/**
 * Per-tool contract for `get_tool_info` — first hop of the lazy-load pair
 * with `execute_tool`.
 *
 * Side effect: marks the tool as fetched on the shared `SessionToolInfoState`
 * so `execute_tool`'s gate can pass. Both contracts must share the same instance.
 */
import { type ToolContract, type ToolLlmOptionsBase } from '../../../contracts/host-tool.js';
import type { ToolDefinition } from '../../../core/core-types.js';
import { type ExecutableToolName, type SessionToolInfoState } from './shared.js';
export declare const GET_TOOL_INFO_KIND: "getToolInfo";
export type GetToolInfoKind = typeof GET_TOOL_INFO_KIND;
/** The 4 executable tool names `get_tool_info` / `execute_tool` gate. */
export declare const EXECUTABLE_TOOL_NAMES: readonly ["web_search", "web_crawl", "sandbox_llm", "create_website"];
/** Listing summaries shown in the `get_tool_info` description. */
export declare const EXECUTABLE_TOOL_SUMMARIES: Readonly<Record<ExecutableToolName, string>>;
export interface GetToolInfoParams {
    readonly tool_name: ExecutableToolName;
}
/** Shape of the JSON payload `get_tool_info` returns. */
export interface GetToolInfoSchema {
    readonly name: string;
    readonly description: string;
    readonly parameters: {
        readonly type: 'object';
        readonly properties: Record<string, unknown>;
        readonly required: readonly string[];
    };
}
export interface GetToolInfoDetails {
    /** Same shape `execute_tool` emits — both contracts flag their messages hidden. */
    readonly hidden?: boolean;
    /** Name of the tool whose schema was looked up; convenience for debugging. */
    readonly tool_name?: ExecutableToolName;
}
/** Build the LLM-visible description; tool order is sorted for stability. */
export declare function buildGetToolInfoDescription(summaries?: Readonly<Record<ExecutableToolName, string>>, toolNames?: readonly ExecutableToolName[]): string;
export declare const GET_TOOL_INFO_TOOL_DESCRIPTION: string;
export declare const GET_TOOL_INFO_TOOL_NAME_DESCRIPTION = "The name of the tool to get parameter info about (e.g., 'web_search', 'web_crawl')";
export declare function isExecutableToolName(value: unknown): value is ExecutableToolName;
/** Options for `get_tool_info` — adds the contract registry and shared session state. */
export interface GetToolInfoLlmOptions extends ToolLlmOptionsBase {
    readonly contractsByName?: Readonly<Partial<Record<ExecutableToolName, ExecutableContractLike>>>;
    readonly sessionState: SessionToolInfoState;
}
/** Minimum surface a registered executable contract must expose. */
export interface ExecutableContractLike {
    createLlmTool(options: ToolLlmOptionsBase): ToolDefinition;
}
export declare const getToolInfoContract: ToolContract<GetToolInfoParams, GetToolInfoDetails, GetToolInfoLlmOptions>;
//# sourceMappingURL=contract.d.ts.map