import type { Schema } from "./schema.ts"; import type { BranchEntry } from "./store.ts"; export interface ToolResult { content: Array<{ type: "text"; text: string; }>; details?: unknown; isError?: boolean; } export interface ToolDefinition> { name: string; label: string; description: string; promptSnippet: string; promptGuidelines: string[]; parameters: Schema; execute(toolCallId: string, params: TParams, signal: AbortSignal | undefined, onUpdate: unknown, ctx: ExtensionContext): Promise; } export interface RegisteredCommand { description: string; handler(args: string, ctx: ExtensionContext): Promise | void; } export interface ExtensionAPI { events: { emit(event: string, data: T): void; }; on(event: "session_start" | "session_tree", handler: (event: unknown, ctx: ExtensionContext) => Promise | void): void; on(event: "session_before_compact", handler: (event: unknown, ctx: ExtensionContext) => Promise | void): void; registerTool>(tool: ToolDefinition): void; registerCommand(name: string, options: RegisteredCommand): void; appendEntry(customType: string, data?: T): void; } export interface ExtensionContext { mode: "tui" | "rpc" | "print" | string; sessionManager: { getBranch(): BranchEntry[]; }; ui: { notify(message: string, type?: "info" | "warning" | "error"): void; setStatus(key: string, text: string | undefined): void; setWidget(key: string, content: string[] | undefined, options?: { placement?: "aboveEditor" | "belowEditor"; }): void; }; }