import { type Static, type TSchema } from "@earendil-works/pi-ai"; import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; export type GippityToolResult = null | boolean | number | string | GippityToolResult[] | { [key: string]: GippityToolResult; }; export interface GippityToolContext { signal: AbortSignal; ctx: ExtensionContext; callId: string; } export interface GippityToolDefinition { name: string; description: string; parameters: T; execute(args: Static, context: GippityToolContext): GippityToolResult | Promise; } interface GippityToolWireDefinition extends Record { type: "function"; name: string; description: string; parameters: TSchema; } export interface GippityToolRegistry { definitions: GippityToolWireDefinition[]; execute(name: string, args: unknown, context: GippityToolContext): Promise; } /** Register during extension loading. Pi removes this subscription on reload. */ export declare function registerGippityVoiceTool(pi: ExtensionAPI, tool: GippityToolDefinition): () => void; /** Snapshot once when a call starts. Later registrations affect the next call. */ export declare function collectGippityVoiceTools(pi: ExtensionAPI): GippityToolRegistry; export {};