mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-11-05 23:37:25 +00:00
45 lines
1.7 KiB
TypeScript
45 lines
1.7 KiB
TypeScript
import type { AgentTool } from "@earendil-works/pi-agent-core";
|
|
import type { ExtensionContext, ToolDefinition } from "../extensions/types.ts";
|
|
|
|
/** Wrap a ToolDefinition into an AgentTool for the core runtime. */
|
|
export function wrapToolDefinition<TDetails = unknown>(
|
|
definition: ToolDefinition<any, TDetails>,
|
|
ctxFactory?: () => ExtensionContext,
|
|
): AgentTool<any, TDetails> {
|
|
return {
|
|
name: definition.name,
|
|
label: definition.label,
|
|
description: definition.description,
|
|
parameters: definition.parameters,
|
|
prepareArguments: definition.prepareArguments,
|
|
executionMode: definition.executionMode,
|
|
execute: (toolCallId, params, signal, onUpdate) =>
|
|
definition.execute(toolCallId, params, signal, onUpdate, ctxFactory?.() as ExtensionContext),
|
|
};
|
|
}
|
|
|
|
/** Wrap multiple ToolDefinitions into AgentTools for the core runtime. */
|
|
export function wrapToolDefinitions(
|
|
definitions: ToolDefinition<any, any>[],
|
|
ctxFactory?: () => ExtensionContext,
|
|
): AgentTool<any>[] {
|
|
return definitions.map((definition) => wrapToolDefinition(definition, ctxFactory));
|
|
}
|
|
|
|
/**
|
|
* Synthesize a minimal ToolDefinition from an AgentTool.
|
|
*
|
|
* This keeps AgentSession's internal registry definition-first even when a caller
|
|
* provides plain AgentTool overrides that do not include prompt metadata or renderers.
|
|
*/
|
|
export function createToolDefinitionFromAgentTool(tool: AgentTool<any>): ToolDefinition<any, unknown> {
|
|
return {
|
|
name: tool.name,
|
|
label: tool.label,
|
|
description: tool.description,
|
|
parameters: tool.parameters as any,
|
|
prepareArguments: tool.prepareArguments,
|
|
executionMode: tool.executionMode,
|
|
execute: async (toolCallId, params, signal, onUpdate) => tool.execute(toolCallId, params, signal, onUpdate),
|
|
};
|
|
}
|