/**
 * Guards applied around a single tool execution inside a native provider loop.
 *
 * Lives here rather than beside any one provider because it is used by all of
 * them: both Vertex+Claude loops call it directly, and the Gemini paths reach
 * it through `buildDedupedEngineTools`. It previously sat in
 * `providers/googleNativeGemini3/utils.ts`, which meant the Anthropic loops
 * imported a tool-execution primitive out of a Gemini module — accurate about
 * where it was written, misleading about what depends on it.
 *
 * Nothing in here is provider-specific: it takes an executor and a guards
 * object and returns a wrapped executor.
 */
import type { Tool, ToolExecutionGuards } from "../types/index.js";
/**
 * Everything a native provider loop wraps around a tool call that the shared
 * engine does not do itself.
 *
 * Order matters. `raceWithAbort` sits INSIDE `withTimeout` so a turn-level
 * abort is observed the moment it fires rather than after the tool settles,
 * and the timeout still bounds a tool that neither settles nor honours its
 * signal. The progress pings bracket the await because the stall watchdog is
 * a whole-turn interval comparing wall-clock against the last progress mark —
 * without them a legitimately slow tool reads as a stalled turn and is killed.
 *
 * Exported because a tool hydrated MID-TURN has to be wrapped the same way as
 * one declared up front; keeping this inline made the discovered tool the one
 * executor in the system that ran raw.
 */
export declare function guardToolExecutor(name: string, execute: NonNullable<Tool["execute"]>, guards: ToolExecutionGuards): (args: Record<string, unknown>, opts: unknown) => Promise<unknown>;
