/**
 * Per-tool contract for `execute_tool` — second hop of the lazy-load pair
 * with `get_tool_info`. This wrapper gates executable tools until their
 * schema was fetched for the current session.
 */
import { type ToolContract, type ToolLlmOptionsBase } from '../../../contracts/host-tool.js';
import { type ExecutableContractLike } from '../get-tool-info/contract.js';
import { type ExecutableToolName, type SessionToolInfoState } from '../get-tool-info/shared.js';
export declare const EXECUTE_TOOL_KIND: "executeTool";
export type ExecuteToolKind = typeof EXECUTE_TOOL_KIND;
export interface ExecuteToolParams {
    readonly tool_name: ExecutableToolName;
    readonly parameters: Readonly<Record<string, unknown>>;
}
export interface ExecuteToolDetails {
    /** Hide pre-gate errors from the user — agent reads + retries. */
    readonly hidden?: boolean;
    /** Name of the tool the wrapper dispatched to; client renderer reads this to pick the inner renderer. */
    readonly wrapped_tool?: ExecutableToolName;
    /** Inner tool's details passed through verbatim so existing renderers keep working. */
    readonly inner?: unknown;
}
export declare const EXECUTE_TOOL_TOOL_DESCRIPTION = "Execute a tool by name with the specified parameters.\nYou MUST call get_tool_info first to understand parameters before using execute_tool. Include all required parameters.\n\nIMPORTANT: This tool dynamically executes other tools. Make sure you have the correct tool name and parameters before calling this.\nAll target tool parameters MUST be nested inside the 'parameters' dict \u2014 do NOT pass them as top-level keys. Correct: {\"tool_name\": \"web_search\", \"parameters\": {\"query\": \"foo\"}}. Wrong: {\"tool_name\": \"web_search\", \"query\": \"foo\"}.";
export declare const EXECUTE_TOOL_TOOL_NAME_DESCRIPTION = "The name of the tool to execute (e.g., 'web_search', 'web_crawl')";
export declare const EXECUTE_TOOL_PARAMETERS_DESCRIPTION = "Dictionary of parameters to pass to the tool. The keys should match the parameter names from get_tool_info.";
/**
 * Lift stray top-level keys into a synthesized `parameters` object when
 * the LLM forgets to nest them. Exported for direct unit testing.
 */
export declare function autoNestFlatParameters(value: Record<string, unknown>): Record<string, unknown>;
export interface ExecuteToolLlmOptions extends ToolLlmOptionsBase {
    readonly contractsByName?: Readonly<Partial<Record<ExecutableToolName, ExecutableContractLike>>>;
    readonly sessionState: SessionToolInfoState;
}
export declare const executeToolContract: ToolContract<ExecuteToolParams, ExecuteToolDetails, ExecuteToolLlmOptions>;
//# sourceMappingURL=contract.d.ts.map