import type { Static, TSchema } from "typebox"; export interface PiTextContent { type: "text"; text: string; } export interface PiToolResult { content: PiTextContent[]; details: TDetails; } export type PiToolUpdateCallback = ( update: PiToolResult, ) => void | Promise; export interface PiExtensionContext { cwd: string; hasUI: boolean; ui: { confirm(title: string, message: string): Promise; notify(message: string, level: "info" | "warning" | "error"): void; }; } export interface PiToolDefinition { name: string; label: string; description: string; promptSnippet?: string; promptGuidelines?: string[]; parameters: TParameters; execute( toolCallId: string, params: Static, signal: AbortSignal | undefined, onUpdate: PiToolUpdateCallback | undefined, context: PiExtensionContext, ): Promise>; } export interface PiCommandDefinition { description: string; handler(args: string, context: PiExtensionContext): Promise; } export interface PiCodeModeApi { registerTool( tool: PiToolDefinition, ): void; registerCommand(name: string, command: PiCommandDefinition): void; on( event: "session_start" | "session_shutdown", handler: (...args: unknown[]) => Promise | void, ): void; }