/**
 * Pure name → `ToolDefinition[]` builder. Knows every per-tool contract and
 * how to thread runtime refs into each `createLlmTool`. Mode resolution lives
 * one layer up in `mode-host-tools.ts`.
 */
import type { Api, Model } from '../../ai/types.js';
import type { ChildAgentEventEmitter } from '../../contracts/agent-api.js';
import { AgentExecuteCodeMode } from '../../contracts/agent-execute-code.js';
import type { HostToolSessionPolicy } from '../../contracts/host-tool.js';
import { type StreamFn, type ToolDefinition } from '../../core/core-types.js';
import type { PendingHostToolRequests } from '../../core/pending-host-tool-requests.js';
import type { ShortcutXLPromptPlatform } from '../prompt/build.js';
import { ExecuteCodeSurface } from './execute-code/index.js';
import { type SessionToolInfoState } from './get-tool-info/index.js';
import { type RefreshContextParams } from './refresh-context/index.js';
import { type SwitchModeLlmOptions } from './switch-mode/index.js';
export interface BuildHostToolListOptions {
    readonly pendingHostToolRequests: PendingHostToolRequests;
    readonly sessionPolicy: HostToolSessionPolicy;
    readonly agentMode: AgentExecuteCodeMode;
    readonly executeCodeSurface: ExecuteCodeSurface;
    /** The runtime's streamer — used by `task` to spawn subagents. */
    readonly streamFn: StreamFn;
    /** Resolve a subagent's declared `model` id to a concrete `Model<Api>`. */
    readonly resolveModel: (modelId: string) => Model<Api> | undefined;
    readonly getCurrentModel?: () => Model<Api> | undefined;
    /** Resolve a provider's API key. Forwarded to subagents for stream auth. */
    readonly getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
    /** Active per-turn speed. Forwarded dynamically so subagents inherit submit-time speed. */
    readonly getSpeed?: () => 'fast' | 'standard' | undefined;
    /** Optional sink for raw child-agent events; `toolCallId` is the parent `task` call. */
    readonly emitChildAgentEvent?: ChildAgentEventEmitter;
    readonly preferCurrentModelForSubagents?: boolean;
    /** Shared gate between `get_tool_info` and `execute_tool`; minted fresh if omitted. */
    readonly sessionToolInfoState?: SessionToolInfoState;
    /** Session-scoped tool names unavailable to this runtime. */
    readonly disabledToolNames?: readonly string[];
    /** Wire names to include. Caller resolves the list; unknown names are logged and skipped. */
    readonly toolNames: readonly string[];
    /** Names to omit after resolution. */
    readonly skipNames?: readonly string[];
    /**
     * When true, the `execute_code` tool is gated to the read-only surface —
     * the read-only-violation gate rejects writes and the in-prompt API
     * reference (built by subagents that need it) is filtered to ask-mode
     * methods only. Subagents set this; the parent session leaves it
     * undefined and inherits its agent mode.
     */
    readonly spreadsheetReadOnly?: boolean;
    /**
     * Prompt platform handle. Forwarded to the `task` tool so subagent
     * prompt builders can render an API reference for the right host
     * (web vs plugin). The parent session does not need to pass this
     * — `task` only consumes it when spawning a child.
     */
    readonly promptPlatform?: ShortcutXLPromptPlatform;
    readonly applyRuntimeHandoff?: SwitchModeLlmOptions['applyRuntimeHandoff'];
    readonly scheduleRefresh?: (params: RefreshContextParams) => void;
    readonly allowedSubagents?: readonly string[];
}
export declare function buildHostToolList(options: BuildHostToolListOptions): ToolDefinition[];
//# sourceMappingURL=build-tool-list.d.ts.map