/** Shared session state + types used by both `get_tool_info` and `execute_tool`. */
export declare const EXECUTABLE_TOOL_NAMES: readonly ["web_search", "web_crawl", "sandbox_llm", "create_website"];
export type ExecutableToolName = (typeof EXECUTABLE_TOOL_NAMES)[number];
/** Build a non-empty executable-tool-name literal union for LLM schemas. */
export declare function executableToolNameLiteralUnion(values: readonly ExecutableToolName[], options: {
    description: string;
    errorPrefix: string;
}): import("@sinclair/typebox").TLiteral<"web_search" | "web_crawl" | "create_website" | "sandbox_llm"> | import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"web_search" | "web_crawl" | "create_website" | "sandbox_llm">, ...import("@sinclair/typebox").TLiteral<"web_search" | "web_crawl" | "create_website" | "sandbox_llm">[]]>;
/**
 * Session-scoped gate shared by `get_tool_info` (writer) and `execute_tool`
 * (reader). Both contracts must be constructed from the same instance.
 */
export interface SessionToolInfoState {
    markFetched(tool_name: ExecutableToolName): void;
    hasFetched(tool_name: ExecutableToolName): boolean;
    /** Defensive copy — callers cannot mutate the underlying set. */
    getFetched(): ReadonlySet<ExecutableToolName>;
}
/** Construct an empty session-scoped fetched-set gate. */
export declare function createSessionToolInfoState(): SessionToolInfoState;
//# sourceMappingURL=shared.d.ts.map