import type { AgentTool, AgentToolResult, AgentToolUpdateCallback, } from "@mariozechner/pi-agent-core"; import type { ToolDefinition } from "@mariozechner/pi-coding-agent"; // biome-ignore lint/suspicious/noExplicitAny: TypeBox schema type from pi-agent-core uses a different module instance. type AnyAgentTool = AgentTool; export function toToolDefinitions(tools: AnyAgentTool[]): ToolDefinition[] { return tools.map((tool) => { const name = tool.name || "tool"; return { name, label: tool.label ?? name, description: tool.description ?? "", // biome-ignore lint/suspicious/noExplicitAny: TypeBox schema from pi-agent-core uses a different module instance. parameters: tool.parameters as any, execute: async ( toolCallId, params, onUpdate: AgentToolUpdateCallback | undefined, _ctx, signal, ): Promise> => { // KNOWN: pi-coding-agent `ToolDefinition.execute` has a different signature/order // than pi-agent-core `AgentTool.execute`. This adapter keeps our existing tools intact. return tool.execute(toolCallId, params, signal, onUpdate); }, } satisfies ToolDefinition; }); }