import type { ExtensionAPI, ExtensionCommandContext } from "@mariozechner/pi-coding-agent"; import { contentToText } from "../helpers"; export type ArchonToolResult = { content: Array<{ type: string; text: string }>; details?: Record; }; export abstract class ArchonHandler { abstract run(pi: ExtensionAPI, ctx: ExtensionCommandContext, args: string[]): Promise; async runTool(pi: ExtensionAPI, ctx: ExtensionCommandContext, args: string[]): Promise { const messages: ArchonToolResult["content"] = []; let details: Record | undefined; const toolPi = { ...pi, sendMessage(payload: { content?: unknown; details?: Record }) { messages.push({ type: "text", text: contentToText(payload.content) }); if (payload.details) details = { ...(details ?? {}), ...payload.details }; }, } as ExtensionAPI; await this.run(toolPi, ctx, args); return { content: messages.length ? messages : [{ type: "text", text: "" }], details }; } }