/** * CustomToolAdapter wraps CustomTool instances into AgentTool for use with the agent. */ import type { AgentTool, AgentToolUpdateCallback } from "@f5-sales-demo/pi-agent-core"; import type { Static, TSchema } from "@sinclair/typebox"; import type { Theme } from "../../modes/theme/theme"; import { applyToolProxy } from "../tool-proxy"; import type { CustomTool, CustomToolContext } from "./types"; export class CustomToolAdapter implements AgentTool { declare name: string; declare label: string; declare description: string; declare parameters: TParams; readonly strict = true; constructor( private tool: CustomTool, private getContext: () => CustomToolContext, ) { applyToolProxy(tool, this); } execute( toolCallId: string, params: Static, signal?: AbortSignal, onUpdate?: AgentToolUpdateCallback, context?: CustomToolContext, ) { return this.tool.execute(toolCallId, params, onUpdate, context ?? this.getContext(), signal); } /** * Backward-compatible export of factory function for existing callers. * Prefer CustomToolAdapter constructor directly. */ static wrap( tool: CustomTool, getContext: () => CustomToolContext, ): AgentTool { return new CustomToolAdapter(tool, getContext); } }