fix: harden sub-agent model overrides

This commit is contained in:
Peter Steinberger
2026-01-07 04:48:20 +00:00
parent 12d57da53a
commit 514fcfe77e
6 changed files with 113 additions and 11 deletions

View File

@@ -4,6 +4,8 @@ import type {
AgentToolUpdateCallback,
} from "@mariozechner/pi-agent-core";
import type { ToolDefinition } from "@mariozechner/pi-coding-agent";
import { logError } from "../logger.js";
import { jsonResult } from "./tools/common.js";
// biome-ignore lint/suspicious/noExplicitAny: TypeBox schema type from pi-agent-core uses a different module instance.
type AnyAgentTool = AgentTool<any, unknown>;
@@ -26,7 +28,24 @@ export function toToolDefinitions(tools: AnyAgentTool[]): ToolDefinition[] {
): Promise<AgentToolResult<unknown>> => {
// 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);
try {
return await tool.execute(toolCallId, params, signal, onUpdate);
} catch (err) {
if (signal?.aborted) throw err;
const name =
err && typeof err === "object" && "name" in err
? String((err as { name?: unknown }).name)
: "";
if (name === "AbortError") throw err;
const message =
err instanceof Error ? err.stack ?? err.message : String(err);
logError(`[tools] ${tool.name} failed: ${message}`);
return jsonResult({
status: "error",
tool: tool.name,
error: message,
});
}
},
} satisfies ToolDefinition;
});