34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
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<any, unknown>;
|
|
|
|
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<unknown> | undefined,
|
|
_ctx,
|
|
signal,
|
|
): 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);
|
|
},
|
|
} satisfies ToolDefinition;
|
|
});
|
|
}
|