/** * Generic host-side agent tool registry (registerTool / listTools / schemas). */ import type { AgentToolErrorCode, AgentUiContext, HostToolEffect, ToolExecutionTarget } from "@inupedia/spotlight-protocol"; export type { AgentToolErrorCode, HostToolEffect, ToolExecutionTarget }; export interface ToolContextHint { ensureSceneLevel?: number; ensureMainTab?: string; ensureSmallTab?: string; } export type ToolExecutionMode = "serial" | "parallel-safe"; export interface ToolInputSchemaSuccess { success: true; data: TInput; } export interface ToolInputSchemaFailure { success: false; error: string; } export type ToolInputSchemaResult = ToolInputSchemaSuccess | ToolInputSchemaFailure; export interface ToolInputSchema { safeParse(input: unknown): ToolInputSchemaResult; describe?: string; } type ToolInputFieldDescriptor = { type: "string" | "number" | "boolean"; enum?: readonly (string | number | boolean)[]; optional?: boolean; description?: string; }; export declare function createToolInputSchema>(fields: Record): ToolInputSchema; export declare function createLooseObjectSchema = Record>(description?: string): ToolInputSchema; export interface ToolRecoveryConfig { maxRetries?: number; retryOn?: AgentToolErrorCode[]; beforeRetry?: (input: TInput) => Promise | void; rollback?: (input: TInput) => Promise | void; } export interface ToolPreflightContext { uiContext: TContext; } export type ToolPreflightResult = { ok: true; } | { ok: false; reason: string; }; export interface ToolAvailability { isAvailable?: (ctx: TContext) => boolean; requirements?: string[]; contextHint?: ToolContextHint; preflight?: (input: TInput, context: ToolPreflightContext) => Promise | ToolPreflightResult; } export interface ToolExecution { invoke: (input: TInput) => Promise; summarizeResult?: (result: TOutput) => string; executionMode?: ToolExecutionMode; executionTarget?: ToolExecutionTarget; timeoutMs?: number; recovery?: ToolRecoveryConfig; exposeToLoop?: boolean; buildHostEffect?: (input: TInput, output: TOutput) => HostToolEffect | undefined; } export interface AgentTool { name: string; title?: string; displayName?: string; description: string; category?: string; tags?: string[]; inputSchema?: ToolInputSchema; isAvailable?: (ctx: TContext) => boolean; invoke: (input: TInput) => Promise; executionMode?: ToolExecutionMode; executionTarget?: ToolExecutionTarget; timeoutMs?: number; summarizeResult?: (result: TOutput) => string; exposeToLoop?: boolean; buildHostEffect?: (input: TInput, output: TOutput) => HostToolEffect | undefined; requires?: string[]; contextHint?: ToolContextHint; preflight?: (input: TInput, context: ToolPreflightContext) => Promise | ToolPreflightResult; recovery?: ToolRecoveryConfig; } type AgentToolLegacyCompat = Omit>, "invoke" | "isAvailable"> & { availability?: ToolAvailability; execution?: ToolExecution; canRun?: (ctx: TContext) => boolean; run?: (input: TInput) => Promise; }; export declare function registerTool(tool: AgentTool | AgentToolLegacyCompat): void; export declare function getTool(name: string): AgentTool | undefined; export declare function listTools(): AgentTool[]; export declare function listLoopTools(): AgentTool[]; export declare function getToolsByPrefix(prefix: string): AgentTool[]; export declare function clearTools(): void; export declare function getToolTitle(tool: AgentTool): string; export declare function getToolAvailabilityCheck(tool: AgentTool): (ctx: AgentUiContext) => boolean; export declare function getToolRequirements(tool: AgentTool): string[]; export declare function getToolContextHint(tool: AgentTool): ToolContextHint | undefined; export declare function getToolPreflight(tool: AgentTool): ((input: TInput, context: ToolPreflightContext) => Promise | ToolPreflightResult) | undefined; export declare function getToolInvoker(tool: AgentTool): (input: TInput) => Promise; export declare function getToolExecutionMode(tool: AgentTool): ToolExecutionMode | undefined; export declare function getToolExecutionTarget(tool: AgentTool): ToolExecutionTarget; export declare function getToolExposeToLoop(tool: AgentTool): boolean; export declare function getToolTimeoutMs(tool: AgentTool): number | undefined; export declare function getToolRecovery(tool: AgentTool): ToolRecoveryConfig | undefined; export declare function getToolResultSummarizer(tool: AgentTool): ((result: TOutput) => string) | undefined; export declare function getToolHostEffectBuilder(tool: AgentTool): ((input: TInput, output: TOutput) => HostToolEffect | undefined) | undefined; //# sourceMappingURL=agentRegistry.d.ts.map