@better-agent/core 0.1.0-beta.1 → 0.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tools.d.mts","names":[],"sources":["../../../src/mcp/tool/mcp-tools.ts"],"mappings":";;;;;KAMK,uBAAA,GAA0B,oBAAA;;AAH2B;;;;;AAa1D;;iBAAgB,eAAA,CACZ,MAAA,EAAQ,SAAA,EACR,KAAA,EAAO,OAAA,IACP,OAAA;EAFQ,4CAIJ,MAAA;AAAA,IAEL,uBAAA"}
1
+ {"version":3,"file":"mcp-tools.d.mts","names":[],"sources":["../../../src/mcp/tool/mcp-tools.ts"],"mappings":";;;;;KAQK,uBAAA,GAA0B,oBAAA;;AAH2B;;;;;AAa1D;;iBAAgB,eAAA,CACZ,MAAA,EAAQ,SAAA,EACR,KAAA,EAAO,OAAA,IACP,OAAA;EAFQ,4CAIJ,MAAA;AAAA,IAEL,uBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tools.mjs","names":[],"sources":["../../../src/mcp/tool/mcp-tools.ts"],"sourcesContent":["import { TOOL_JSON_SCHEMA } from \"../../tools/constants\";\nimport type { ServerToolDefinition, ToolHandler } from \"../../tools/types\";\nimport type { MCPClient } from \"./mcp-client\";\nimport type { MCPCallToolResult, MCPTool } from \"./types\";\n\n// biome-ignore lint/suspicious/noExplicitAny:\ntype MCPServerToolDefinition = ServerToolDefinition<any, string, unknown>;\n\n/**\n * Converts MCP tools into Better Agent server tool definitions.\n *\n * @param client MCP client used for tool calls.\n * @param tools MCP tool definitions from the server.\n * @param options Optional prefix for tool names.\n * @returns Server tool definitions with working handlers.\n */\nexport function convertMCPTools(\n client: MCPClient,\n tools: MCPTool[],\n options?: {\n /** Optional prefix to add to tool names. */\n prefix?: string;\n },\n): MCPServerToolDefinition[] {\n return tools.map((tool) => convertMCPTool(client, tool, options?.prefix));\n}\n\n/**\n * Converts one MCP tool into a Better Agent server tool definition.\n */\nfunction convertMCPTool(\n client: MCPClient,\n tool: MCPTool,\n prefix?: string,\n): MCPServerToolDefinition {\n const name = prefix ? `${prefix}_${tool.name}` : tool.name;\n\n // The generated handler proxies execution back to the MCP server.\n const handler: ToolHandler<unknown, unknown> = async (\n input: unknown,\n _ctx: { signal: AbortSignal; emit: (event: unknown) => Promise<void> },\n ) => {\n const result = await client.callTool({\n name: tool.name,\n arguments: input as Record<string, unknown>,\n });\n\n // Normalize the MCP result into a Better Agent-friendly value.\n return convertToolResult(result);\n };\n\n // Build a JSON Schema payload that matches Better Agent's tool expectations.\n const jsonSchema: Record<string, unknown> = {\n type: \"object\",\n properties: tool.inputSchema.properties ?? {},\n required: tool.inputSchema.required ?? [],\n ...(tool.inputSchema.$schema ? { $schema: tool.inputSchema.$schema } : {}),\n };\n\n return {\n kind: \"server\",\n name,\n description: tool.description ?? `MCP tool: ${tool.name}`,\n // MCP schemas are discovered at runtime, so the public tool type is intentionally erased.\n schema: tool.inputSchema as Record<string, unknown>,\n handler,\n [TOOL_JSON_SCHEMA]: jsonSchema,\n };\n}\n\n/**\n * Converts an MCP tool result into a Better Agent tool result value.\n */\nfunction convertToolResult(result: MCPCallToolResult): unknown {\n // Text content is used to build a readable thrown error when MCP marks the call as failed.\n if (result.isError === true) {\n const errorMessage = result.content\n ? result.content\n .filter((item) => item.type === \"text\")\n .map((item) => item.text)\n .join(\"\\n\")\n : \"Tool execution failed\";\n\n throw new Error(errorMessage);\n }\n\n // Prefer structured content when the server provides it.\n if (result.structuredContent !== undefined) {\n return result.structuredContent;\n }\n\n if (result.content === undefined || result.content.length === 0) {\n return { success: true };\n }\n\n // Collapse one text item into a plain string for convenience.\n const firstItem = result.content[0];\n if (result.content.length === 1 && firstItem !== undefined && firstItem.type === \"text\") {\n return firstItem.text;\n }\n\n // Preserve multi-item results in a simple array form.\n return result.content.map((item) => {\n switch (item.type) {\n case \"text\":\n return item.text;\n case \"image\":\n return {\n type: \"image\",\n data: item.data,\n mimeType: item.mimeType,\n };\n case \"resource\":\n return {\n type: \"resource\",\n uri: item.resource.uri,\n content: item.resource.text ?? item.resource.blob,\n };\n default:\n return item;\n }\n });\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAgB,gBACZ,QACA,OACA,SAIyB;AACzB,QAAO,MAAM,KAAK,SAAS,eAAe,QAAQ,MAAM,SAAS,OAAO,CAAC;;;;;AAM7E,SAAS,eACL,QACA,MACA,QACuB;CACvB,MAAM,OAAO,SAAS,GAAG,OAAO,GAAG,KAAK,SAAS,KAAK;CAGtD,MAAM,UAAyC,OAC3C,OACA,SACC;AAOD,SAAO,kBANQ,MAAM,OAAO,SAAS;GACjC,MAAM,KAAK;GACX,WAAW;GACd,CAAC,CAG8B;;CAIpC,MAAM,aAAsC;EACxC,MAAM;EACN,YAAY,KAAK,YAAY,cAAc,EAAE;EAC7C,UAAU,KAAK,YAAY,YAAY,EAAE;EACzC,GAAI,KAAK,YAAY,UAAU,EAAE,SAAS,KAAK,YAAY,SAAS,GAAG,EAAE;EAC5E;AAED,QAAO;EACH,MAAM;EACN;EACA,aAAa,KAAK,eAAe,aAAa,KAAK;EAEnD,QAAQ,KAAK;EACb;GACC,mBAAmB;EACvB;;;;;AAML,SAAS,kBAAkB,QAAoC;AAE3D,KAAI,OAAO,YAAY,MAAM;EACzB,MAAM,eAAe,OAAO,UACtB,OAAO,QACF,QAAQ,SAAS,KAAK,SAAS,OAAO,CACtC,KAAK,SAAS,KAAK,KAAK,CACxB,KAAK,KAAK,GACf;AAEN,QAAM,IAAI,MAAM,aAAa;;AAIjC,KAAI,OAAO,sBAAsB,OAC7B,QAAO,OAAO;AAGlB,KAAI,OAAO,YAAY,UAAa,OAAO,QAAQ,WAAW,EAC1D,QAAO,EAAE,SAAS,MAAM;CAI5B,MAAM,YAAY,OAAO,QAAQ;AACjC,KAAI,OAAO,QAAQ,WAAW,KAAK,cAAc,UAAa,UAAU,SAAS,OAC7E,QAAO,UAAU;AAIrB,QAAO,OAAO,QAAQ,KAAK,SAAS;AAChC,UAAQ,KAAK,MAAb;GACI,KAAK,OACD,QAAO,KAAK;GAChB,KAAK,QACD,QAAO;IACH,MAAM;IACN,MAAM,KAAK;IACX,UAAU,KAAK;IAClB;GACL,KAAK,WACD,QAAO;IACH,MAAM;IACN,KAAK,KAAK,SAAS;IACnB,SAAS,KAAK,SAAS,QAAQ,KAAK,SAAS;IAChD;GACL,QACI,QAAO;;GAEjB"}
1
+ {"version":3,"file":"mcp-tools.mjs","names":[],"sources":["../../../src/mcp/tool/mcp-tools.ts"],"sourcesContent":["import type { Event } from \"../../events\";\nimport type { Awaitable } from \"../../internal/types\";\nimport { TOOL_JSON_SCHEMA } from \"../../tools/constants\";\nimport type { ServerToolDefinition, ToolHandler } from \"../../tools/types\";\nimport type { MCPClient } from \"./mcp-client\";\nimport type { MCPCallToolResult, MCPTool } from \"./types\";\n\n// biome-ignore lint/suspicious/noExplicitAny:\ntype MCPServerToolDefinition = ServerToolDefinition<any, string, unknown>;\n\n/**\n * Converts MCP tools into Better Agent server tool definitions.\n *\n * @param client MCP client used for tool calls.\n * @param tools MCP tool definitions from the server.\n * @param options Optional prefix for tool names.\n * @returns Server tool definitions with working handlers.\n */\nexport function convertMCPTools(\n client: MCPClient,\n tools: MCPTool[],\n options?: {\n /** Optional prefix to add to tool names. */\n prefix?: string;\n },\n): MCPServerToolDefinition[] {\n return tools.map((tool) => convertMCPTool(client, tool, options?.prefix));\n}\n\n/**\n * Converts one MCP tool into a Better Agent server tool definition.\n */\nfunction convertMCPTool(\n client: MCPClient,\n tool: MCPTool,\n prefix?: string,\n): MCPServerToolDefinition {\n const name = prefix ? `${prefix}_${tool.name}` : tool.name;\n\n // The generated handler proxies execution back to the MCP server.\n const handler: ToolHandler<unknown, unknown> = async (\n input: unknown,\n _ctx: { signal: AbortSignal; emit: (event: Event) => Awaitable<void> },\n ) => {\n const result = await client.callTool({\n name: tool.name,\n arguments: input as Record<string, unknown>,\n });\n\n // Normalize the MCP result into a Better Agent-friendly value.\n return convertToolResult(result);\n };\n\n // Build a JSON Schema payload that matches Better Agent's tool expectations.\n const jsonSchema: Record<string, unknown> = {\n type: \"object\",\n properties: tool.inputSchema.properties ?? {},\n required: tool.inputSchema.required ?? [],\n ...(tool.inputSchema.$schema ? { $schema: tool.inputSchema.$schema } : {}),\n };\n\n return {\n kind: \"server\",\n name,\n description: tool.description ?? `MCP tool: ${tool.name}`,\n // MCP schemas are discovered at runtime, so the public tool type is intentionally erased.\n schema: tool.inputSchema as Record<string, unknown>,\n handler,\n [TOOL_JSON_SCHEMA]: jsonSchema,\n };\n}\n\n/**\n * Converts an MCP tool result into a Better Agent tool result value.\n */\nfunction convertToolResult(result: MCPCallToolResult): unknown {\n // Text content is used to build a readable thrown error when MCP marks the call as failed.\n if (result.isError === true) {\n const errorMessage = result.content\n ? result.content\n .filter((item) => item.type === \"text\")\n .map((item) => item.text)\n .join(\"\\n\")\n : \"Tool execution failed\";\n\n throw new Error(errorMessage);\n }\n\n // Prefer structured content when the server provides it.\n if (result.structuredContent !== undefined) {\n return result.structuredContent;\n }\n\n if (result.content === undefined || result.content.length === 0) {\n return { success: true };\n }\n\n // Collapse one text item into a plain string for convenience.\n const firstItem = result.content[0];\n if (result.content.length === 1 && firstItem !== undefined && firstItem.type === \"text\") {\n return firstItem.text;\n }\n\n // Preserve multi-item results in a simple array form.\n return result.content.map((item) => {\n switch (item.type) {\n case \"text\":\n return item.text;\n case \"image\":\n return {\n type: \"image\",\n data: item.data,\n mimeType: item.mimeType,\n };\n case \"resource\":\n return {\n type: \"resource\",\n uri: item.resource.uri,\n content: item.resource.text ?? item.resource.blob,\n };\n default:\n return item;\n }\n });\n}\n"],"mappings":";;;;;;;;;;;AAkBA,SAAgB,gBACZ,QACA,OACA,SAIyB;AACzB,QAAO,MAAM,KAAK,SAAS,eAAe,QAAQ,MAAM,SAAS,OAAO,CAAC;;;;;AAM7E,SAAS,eACL,QACA,MACA,QACuB;CACvB,MAAM,OAAO,SAAS,GAAG,OAAO,GAAG,KAAK,SAAS,KAAK;CAGtD,MAAM,UAAyC,OAC3C,OACA,SACC;AAOD,SAAO,kBANQ,MAAM,OAAO,SAAS;GACjC,MAAM,KAAK;GACX,WAAW;GACd,CAAC,CAG8B;;CAIpC,MAAM,aAAsC;EACxC,MAAM;EACN,YAAY,KAAK,YAAY,cAAc,EAAE;EAC7C,UAAU,KAAK,YAAY,YAAY,EAAE;EACzC,GAAI,KAAK,YAAY,UAAU,EAAE,SAAS,KAAK,YAAY,SAAS,GAAG,EAAE;EAC5E;AAED,QAAO;EACH,MAAM;EACN;EACA,aAAa,KAAK,eAAe,aAAa,KAAK;EAEnD,QAAQ,KAAK;EACb;GACC,mBAAmB;EACvB;;;;;AAML,SAAS,kBAAkB,QAAoC;AAE3D,KAAI,OAAO,YAAY,MAAM;EACzB,MAAM,eAAe,OAAO,UACtB,OAAO,QACF,QAAQ,SAAS,KAAK,SAAS,OAAO,CACtC,KAAK,SAAS,KAAK,KAAK,CACxB,KAAK,KAAK,GACf;AAEN,QAAM,IAAI,MAAM,aAAa;;AAIjC,KAAI,OAAO,sBAAsB,OAC7B,QAAO,OAAO;AAGlB,KAAI,OAAO,YAAY,UAAa,OAAO,QAAQ,WAAW,EAC1D,QAAO,EAAE,SAAS,MAAM;CAI5B,MAAM,YAAY,OAAO,QAAQ;AACjC,KAAI,OAAO,QAAQ,WAAW,KAAK,cAAc,UAAa,UAAU,SAAS,OAC7E,QAAO,UAAU;AAIrB,QAAO,OAAO,QAAQ,KAAK,SAAS;AAChC,UAAQ,KAAK,MAAb;GACI,KAAK,OACD,QAAO,KAAK;GAChB,KAAK,QACD,QAAO;IACH,MAAM;IACN,MAAM,KAAK;IACX,UAAU,KAAK;IAClB;GACL,KAAK,WACD,QAAO;IACH,MAAM;IACN,KAAK,KAAK,SAAS;IACnB,SAAS,KAAK,SAAS,QAAQ,KAAK,SAAS;IAChD;GACL,QACI,QAAO;;GAEjB"}
@@ -262,7 +262,12 @@ const executeToolCalls = async (params) => {
262
262
  };
263
263
  const runToolHandler = async (input) => {
264
264
  if (tool.kind === "server") return await tool.handler(input, {
265
+ runId: params.runId,
266
+ agentName: params.agentName,
267
+ ...params.conversationId !== void 0 ? { conversationId: params.conversationId } : {},
268
+ parentMessageId: params.parentMessageId,
265
269
  signal: params.signal,
270
+ ...params.context !== void 0 ? { context: params.context } : {},
266
271
  emit: params.emit
267
272
  });
268
273
  if (!params.pendingToolRuntime) throw BetterAgentError.fromCode("NOT_IMPLEMENTED", `Client tool '${tool.name}' requires a live runtime capable of accepting tool results.`, {
@@ -1 +1 @@
1
- {"version":3,"file":"execute-tool-calls.mjs","names":[],"sources":["../../src/run/execute-tool-calls.ts"],"sourcesContent":["import { BetterAgentError } from \"@better-agent/shared/errors\";\nimport { logger } from \"@better-agent/shared/logger\";\nimport { safeJsonParse } from \"@better-agent/shared/utils\";\nimport { type Event, Events } from \"../events\";\nimport type { PluginRuntime } from \"../plugins\";\nimport type { GenerativeModelToolCallRequest, GenerativeModelToolCallResult } from \"../providers\";\nimport { validateInput } from \"../schema\";\nimport type {\n AgentToolDefinition,\n ExecutionToolError,\n OnToolError,\n ParseToolError,\n ToolApprovalConfig,\n ToolErrorContext,\n ToolErrorMode,\n ToolErrorPayload,\n ToolErrorResultFor,\n ValidationToolError,\n} from \"../tools\";\nimport type { PendingToolRuntime } from \"./pending-tools\";\nimport type { RunAdvancedOptions } from \"./types\";\n\nconst MAX_TOOL_ERROR_REPAIR_DEPTH = 2;\nconst MAX_TOOL_ERROR_RETRY_ATTEMPTS = 3;\n\ntype RecoverableToolErrorKind = ToolErrorPayload[\"errorKind\"];\ntype ExecutableToolDefinition = Exclude<AgentToolDefinition, { kind: \"hosted\" }>;\n\ntype ToolExecutionOutcome = {\n result: unknown;\n isError?: boolean;\n errorKind?: RecoverableToolErrorKind;\n};\n\ntype ResolvedApproval = {\n required?: boolean;\n timeoutMs?: number;\n meta?: Record<string, unknown>;\n};\n\ntype PreparedToolCall = {\n toolCall: GenerativeModelToolCallRequest;\n tool: ExecutableToolDefinition;\n toolTarget: \"server\" | \"client\";\n args?: unknown;\n validatedInput?: unknown;\n resolvedApproval?: ResolvedApproval;\n skip: boolean;\n skipResult?: unknown;\n parseError?: BetterAgentError;\n validationError?: BetterAgentError;\n shouldEmitToolCallEnd: boolean;\n};\n\nconst getToolRunName = (tool: AgentToolDefinition): string | undefined =>\n tool.kind === \"hosted\"\n ? typeof tool.name === \"string\" && tool.name.length > 0\n ? tool.name\n : typeof tool.type === \"string\" && tool.type.length > 0\n ? tool.type\n : undefined\n : typeof tool.name === \"string\" && tool.name.length > 0\n ? tool.name\n : undefined;\n\n/** Executes the next batch of tool calls. */\nexport const executeToolCalls = async <TContext>(params: {\n runId: string;\n agentName: string;\n conversationId?: string;\n parentMessageId: string;\n toolCalls: readonly GenerativeModelToolCallRequest[];\n tools: readonly AgentToolDefinition[];\n toolErrorMode?: ToolErrorMode;\n onToolError?: OnToolError;\n signal: AbortSignal;\n emit: (event: Event) => Promise<void>;\n advanced?: RunAdvancedOptions;\n pendingToolRuntime?: PendingToolRuntime;\n context?: TContext;\n pluginRuntime?: PluginRuntime | null;\n}): Promise<{\n results: GenerativeModelToolCallResult[];\n}> => {\n const results: GenerativeModelToolCallResult[] = [];\n\n const throwIfAborted = () => {\n if (params.signal.aborted) {\n throw BetterAgentError.fromCode(\"ABORTED\", \"Tool execution was aborted.\", {\n trace: [{ at: \"core.run.executeToolCalls.aborted\" }],\n });\n }\n };\n\n const isAbortError = (error: unknown): boolean =>\n params.signal.aborted === true ||\n (error instanceof BetterAgentError && error.code === \"ABORTED\");\n\n const waitForRetryBackoff = async (ms: number) => {\n if (ms <= 0) {\n throwIfAborted();\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n params.signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n\n const onAbort = () => {\n clearTimeout(timer);\n reject(\n BetterAgentError.fromCode(\"ABORTED\", \"Tool execution was aborted.\", {\n trace: [{ at: \"core.run.executeToolCalls.retryBackoff\" }],\n }),\n );\n };\n\n if (params.signal.aborted) {\n onAbort();\n return;\n }\n\n params.signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n };\n\n const extractToolErrorMessage = (\n error: unknown,\n errorKind: RecoverableToolErrorKind,\n ): string => {\n const rawMessage =\n error instanceof BetterAgentError || error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : \"Unknown tool error\";\n\n if (errorKind === \"parse\") {\n return `Tool arguments could not be parsed as valid JSON. ${rawMessage}`.trim();\n }\n\n if (errorKind === \"validation\") {\n return `Tool arguments failed schema validation. ${rawMessage}`.trim();\n }\n\n return rawMessage;\n };\n\n const createToolErrorOutcome = (args: {\n toolName: string;\n errorKind: RecoverableToolErrorKind;\n message: string;\n retryable?: boolean;\n }): ToolExecutionOutcome => ({\n result: {\n type: \"tool_error\",\n toolName: args.toolName,\n errorKind: args.errorKind,\n message: args.message,\n retryable: args.retryable,\n } satisfies ToolErrorPayload,\n isError: true,\n errorKind: args.errorKind,\n });\n\n const createToolErrorOutcomeFromError = (args: {\n toolName: string;\n error: unknown;\n errorKind: RecoverableToolErrorKind;\n message?: string;\n retryable?: boolean;\n }): ToolExecutionOutcome =>\n createToolErrorOutcome({\n toolName: args.toolName,\n errorKind: args.errorKind,\n message: args.message ?? extractToolErrorMessage(args.error, args.errorKind),\n retryable:\n args.retryable ??\n (args.error instanceof BetterAgentError ? args.error.retryable : undefined),\n });\n\n const emitToolCallStart = async (prepared: {\n toolCall: GenerativeModelToolCallRequest;\n toolTarget: \"server\" | \"client\";\n }) => {\n await params.emit({\n type: Events.TOOL_CALL_START,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const emitToolCallArgs = async (prepared: {\n toolCall: GenerativeModelToolCallRequest;\n toolTarget: \"server\" | \"client\";\n }) => {\n await params.emit({\n type: Events.TOOL_CALL_ARGS,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n delta: prepared.toolCall.arguments,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const emitToolCallEnd = async (prepared: {\n toolCall: GenerativeModelToolCallRequest;\n toolTarget: \"server\" | \"client\";\n }) => {\n await params.emit({\n type: Events.TOOL_CALL_END,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const emitToolCallResult = async (\n prepared: PreparedToolCall,\n outcome: ToolExecutionOutcome,\n ) => {\n await params.emit({\n type: Events.TOOL_CALL_RESULT,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n result: outcome.result,\n isError: outcome.isError,\n errorKind: outcome.errorKind,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const resolveExecutableTool = (\n toolCall: GenerativeModelToolCallRequest,\n ): { tool: ExecutableToolDefinition; toolTarget: \"server\" | \"client\" } => {\n const tool = params.tools.find((candidate) => getToolRunName(candidate) === toolCall.name);\n if (!tool) {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n `Tool '${toolCall.name}' was requested by the model but is not available for this run.`,\n {\n context: {\n runId: params.runId,\n agentName: params.agentName,\n toolName: toolCall.name,\n },\n trace: [{ at: \"core.run.executeToolCalls.missingTool\" }],\n },\n );\n }\n\n if (tool.kind === \"hosted\") {\n throw BetterAgentError.fromCode(\n \"NOT_IMPLEMENTED\",\n `Hosted tool '${getToolRunName(tool) ?? toolCall.name}' reached the in-process tool executor, but hosted tools must be executed by the provider during model invocation.`,\n {\n context: {\n runId: params.runId,\n agentName: params.agentName,\n toolName: getToolRunName(tool) ?? toolCall.name,\n toolTarget: tool.kind,\n provider: tool.provider,\n toolType: tool.type,\n },\n trace: [{ at: \"core.run.executeToolCalls.hostedToolInvariant\" }],\n },\n );\n }\n\n return {\n tool,\n toolTarget: tool.kind === \"client\" ? \"client\" : \"server\",\n };\n };\n\n const resolveApprovalConfig = async <TInput>(args: {\n approval?: ToolApprovalConfig<unknown, TInput>;\n input: TInput;\n toolCall: GenerativeModelToolCallRequest;\n tool: ExecutableToolDefinition;\n toolTarget: \"server\" | \"client\";\n }): Promise<ResolvedApproval | undefined> => {\n const approval = args.approval;\n if (!approval) {\n return undefined;\n }\n\n let resolved: ResolvedApproval = {\n required: approval.required,\n timeoutMs: approval.timeoutMs,\n meta: approval.meta,\n };\n\n if (approval.resolve) {\n const runtimeResolved = await approval.resolve({\n context: params.context,\n input: args.input,\n runId: params.runId,\n toolCallId: args.toolCall.callId,\n toolName: args.tool.name,\n toolTarget: args.toolTarget,\n });\n\n resolved = {\n required: runtimeResolved.required ?? resolved.required,\n timeoutMs: runtimeResolved.timeoutMs ?? resolved.timeoutMs,\n meta: runtimeResolved.meta ?? resolved.meta,\n };\n }\n\n return resolved;\n };\n\n const emitApprovalRequested = async (prepared: PreparedToolCall) => {\n await params.emit({\n type: Events.TOOL_APPROVAL_REQUIRED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n toolInput: prepared.validatedInput,\n state: \"requested\",\n timestamp: Date.now(),\n meta: prepared.resolvedApproval?.meta,\n });\n\n await params.emit({\n type: Events.TOOL_APPROVAL_UPDATED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n state: \"requested\",\n toolInput: prepared.validatedInput,\n timestamp: Date.now(),\n meta: prepared.resolvedApproval?.meta,\n });\n };\n\n const awaitApprovalIfNeeded = async (\n prepared: PreparedToolCall,\n ): Promise<{ approved: true } | { approved: false; note?: string }> => {\n if (!prepared.resolvedApproval?.required) {\n return { approved: true };\n }\n\n if (!params.pendingToolRuntime) {\n throw BetterAgentError.fromCode(\n \"NOT_IMPLEMENTED\",\n `Tool '${prepared.tool.name}' requires approval, but no approval runtime is configured.`,\n {\n context: {\n runId: params.runId,\n toolName: prepared.tool.name,\n toolCallId: prepared.toolCall.callId,\n toolTarget: prepared.toolTarget,\n },\n trace: [{ at: \"core.run.executeTools.awaitApprovalIfNeeded\" }],\n },\n );\n }\n\n try {\n const decision = await params.pendingToolRuntime.awaitToolApproval({\n runId: params.runId,\n toolCallId: prepared.toolCall.callId,\n toolName: prepared.tool.name,\n timeoutMs:\n prepared.resolvedApproval.timeoutMs ?? params.advanced?.toolApprovalTimeoutMs,\n signal: params.signal,\n });\n\n await params.emit({\n type: Events.TOOL_APPROVAL_UPDATED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n state: decision.decision,\n toolInput: prepared.validatedInput,\n timestamp: Date.now(),\n meta: prepared.resolvedApproval.meta,\n note: decision.note,\n actorId: decision.actorId,\n });\n\n if (decision.decision === \"denied\") {\n return decision.note !== undefined\n ? { approved: false, note: decision.note }\n : { approved: false };\n }\n\n return { approved: true };\n } catch (error) {\n if (error instanceof BetterAgentError && error.code === \"TIMEOUT\") {\n await params.emit({\n type: Events.TOOL_APPROVAL_UPDATED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n state: \"expired\",\n toolInput: prepared.validatedInput,\n timestamp: Date.now(),\n meta: prepared.resolvedApproval.meta,\n });\n }\n\n throw error;\n }\n };\n\n for (const toolCall of params.toolCalls) {\n throwIfAborted();\n\n const { tool, toolTarget } = resolveExecutableTool(toolCall);\n const resolvedToolErrorMode = tool.toolErrorMode ?? params.toolErrorMode ?? \"tool_error\";\n\n const defaultToolErrorOutcome = (args: {\n error: unknown;\n errorKind: RecoverableToolErrorKind;\n retryable?: boolean;\n }): ToolExecutionOutcome => {\n if (isAbortError(args.error)) {\n throw args.error;\n }\n\n if (resolvedToolErrorMode === \"throw\") {\n throw args.error;\n }\n\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n retryable: args.retryable,\n });\n };\n\n const runToolHandler = async (input: unknown) => {\n if (tool.kind === \"server\") {\n return await tool.handler(input, {\n signal: params.signal,\n emit: params.emit,\n });\n }\n\n if (!params.pendingToolRuntime) {\n throw BetterAgentError.fromCode(\n \"NOT_IMPLEMENTED\",\n `Client tool '${tool.name}' requires a live runtime capable of accepting tool results.`,\n {\n context: {\n runId: params.runId,\n agentName: params.agentName,\n toolName: tool.name,\n toolCallId: toolCall.callId,\n },\n trace: [{ at: \"core.run.executeToolCalls.awaitClientToolResult\" }],\n },\n );\n }\n\n return await params.pendingToolRuntime.awaitClientToolResult({\n runId: params.runId,\n toolCallId: toolCall.callId,\n toolName: toolCall.name,\n timeoutMs: params.advanced?.clientToolResultTimeoutMs,\n signal: params.signal,\n });\n };\n\n const resolveHookAction = async <T extends ToolErrorContext>(\n context: T,\n ): Promise<ToolErrorResultFor<T> | undefined> => {\n const toolAction = await tool.onToolError?.(context);\n if (toolAction !== undefined) {\n if (toolAction.action !== \"skip\") {\n return toolAction;\n }\n } else {\n return undefined;\n }\n\n const agentAction = await params.onToolError?.(context);\n if (agentAction !== undefined && agentAction.action !== \"skip\") {\n return agentAction;\n }\n\n return undefined;\n };\n\n const resolveToolError = async (args: {\n error: unknown;\n errorKind: RecoverableToolErrorKind;\n input?: unknown;\n recoveryDepth: number;\n }): Promise<ToolExecutionOutcome> => {\n if (isAbortError(args.error)) {\n throw args.error;\n }\n\n if (args.recoveryDepth >= MAX_TOOL_ERROR_REPAIR_DEPTH) {\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n const context =\n args.errorKind === \"parse\"\n ? ({\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n error: args.error,\n rawArguments: toolCall.arguments,\n errorKind: \"parse\",\n } satisfies ParseToolError)\n : args.errorKind === \"validation\"\n ? ({\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n error: args.error,\n rawArguments: toolCall.arguments,\n input: args.input,\n errorKind: \"validation\",\n } satisfies ValidationToolError)\n : ({\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n error: args.error,\n rawArguments: toolCall.arguments,\n input: args.input,\n errorKind: \"execution\",\n } satisfies ExecutionToolError);\n\n const action = await resolveHookAction(context);\n if (action === undefined) {\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n switch (action.action) {\n case \"send_to_model\":\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n message:\n action.message ?? extractToolErrorMessage(args.error, args.errorKind),\n retryable: action.retryable,\n });\n\n case \"throw\":\n throw args.error;\n\n case \"skip\":\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n\n case \"repair\":\n return await validateAndExecuteInput(action.input, args.recoveryDepth + 1);\n\n case \"retry\": {\n if (args.errorKind !== \"execution\" || args.input === undefined) {\n logger.warn(\n `[better-agent] Ignoring invalid onToolError action '${action.action}' for tool '${toolCall.name}' (${args.errorKind} error).`,\n );\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n const attempts = Math.max(\n 1,\n Math.min(action.maxAttempts ?? 1, MAX_TOOL_ERROR_RETRY_ATTEMPTS),\n );\n\n let lastError = args.error;\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n throwIfAborted();\n try {\n return { result: await runToolHandler(args.input) };\n } catch (retryError) {\n if (isAbortError(retryError)) {\n throw retryError;\n }\n\n lastError = retryError;\n if (attempt < attempts - 1) {\n await waitForRetryBackoff((attempt + 1) * 500);\n }\n }\n }\n\n return await resolveToolError({\n error: lastError,\n errorKind: \"execution\",\n input: args.input,\n recoveryDepth: args.recoveryDepth + 1,\n });\n }\n\n case \"result\":\n if (args.errorKind !== \"execution\") {\n logger.warn(\n `[better-agent] Ignoring invalid onToolError action '${action.action}' for tool '${toolCall.name}' (${args.errorKind} error).`,\n );\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n return { result: action.value };\n\n default:\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n };\n\n const executeApprovedInput = async (\n prepared: PreparedToolCall,\n input: unknown,\n recoveryDepth: number,\n ): Promise<ToolExecutionOutcome> => {\n const approval = await awaitApprovalIfNeeded(prepared);\n if (!approval.approved) {\n const denialReason = approval.note ? ` Reason: ${approval.note}` : \"\";\n return {\n result: `Tool '${toolCall.name}' was denied by the operator.${denialReason}`,\n };\n }\n\n try {\n return { result: await runToolHandler(input) };\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n\n return await resolveToolError({\n error,\n errorKind: \"execution\",\n input,\n recoveryDepth,\n });\n }\n };\n\n const validateAndExecuteInput = async (\n input: unknown,\n recoveryDepth: number,\n ): Promise<ToolExecutionOutcome> => {\n const validatedInput = await validateInput(tool.schema, input);\n if (validatedInput.isErr()) {\n return await resolveToolError({\n error: validatedInput.error.at({\n at: \"core.run.executeToolCalls.validateToolInput\",\n }),\n errorKind: \"validation\",\n input,\n recoveryDepth,\n });\n }\n\n const prepared: PreparedToolCall = {\n toolCall,\n tool,\n toolTarget,\n args: input,\n validatedInput: validatedInput.value,\n resolvedApproval: await resolveApprovalConfig({\n approval: tool.approval,\n input: validatedInput.value,\n toolCall,\n tool,\n toolTarget,\n }),\n skip: false,\n shouldEmitToolCallEnd: false,\n };\n\n return await executeApprovedInput(prepared, validatedInput.value, recoveryDepth);\n };\n\n const prepareToolCall = async (): Promise<PreparedToolCall> => {\n const parsed = safeJsonParse(toolCall.arguments);\n if (parsed.isErr()) {\n return {\n toolCall,\n tool,\n toolTarget,\n skip: false,\n shouldEmitToolCallEnd: false,\n parseError: BetterAgentError.wrap({\n err: parsed.error,\n message: `Failed to parse arguments for tool '${toolCall.name}'`,\n opts: {\n code: \"VALIDATION_FAILED\",\n context: {\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n },\n trace: [{ at: \"core.run.executeToolCalls.parseToolArguments\" }],\n },\n }),\n };\n }\n\n const beforeHook =\n params.pluginRuntime?.hasToolHooks === true\n ? await params.pluginRuntime.applyBeforeToolCall({\n runId: params.runId,\n agentName: params.agentName,\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n args: parsed.value,\n conversationId: params.conversationId,\n })\n : { args: parsed.value };\n\n if (beforeHook?.decision?.skip === true) {\n return {\n toolCall,\n tool,\n toolTarget,\n args: beforeHook.args,\n skip: true,\n skipResult: beforeHook.decision.result,\n shouldEmitToolCallEnd: true,\n };\n }\n\n const validatedInput = await validateInput(tool.schema, beforeHook.args);\n if (validatedInput.isErr()) {\n return {\n toolCall,\n tool,\n toolTarget,\n args: beforeHook.args,\n skip: false,\n shouldEmitToolCallEnd: false,\n validationError: validatedInput.error.at({\n at: \"core.run.executeToolCalls.validateToolInput\",\n }),\n };\n }\n\n const prepared: PreparedToolCall = {\n toolCall,\n tool,\n toolTarget,\n args: beforeHook.args,\n validatedInput: validatedInput.value,\n resolvedApproval: await resolveApprovalConfig({\n approval: tool.approval,\n input: validatedInput.value,\n toolCall,\n tool,\n toolTarget,\n }),\n skip: false,\n shouldEmitToolCallEnd: true,\n };\n\n if (prepared.resolvedApproval?.required) {\n await emitApprovalRequested(prepared);\n }\n\n return prepared;\n };\n\n const executePreparedTool = async (\n prepared: PreparedToolCall,\n ): Promise<ToolExecutionOutcome> => {\n if (prepared.parseError) {\n return await resolveToolError({\n error: prepared.parseError,\n errorKind: \"parse\",\n recoveryDepth: 0,\n });\n }\n\n if (prepared.skip) {\n return { result: prepared.skipResult };\n }\n\n if (prepared.validationError) {\n return await resolveToolError({\n error: prepared.validationError,\n errorKind: \"validation\",\n input: prepared.args,\n recoveryDepth: 0,\n });\n }\n\n return await executeApprovedInput(prepared, prepared.validatedInput, 0);\n };\n\n const applyAfterToolCall = async (\n prepared: PreparedToolCall,\n outcome: ToolExecutionOutcome,\n ): Promise<ToolExecutionOutcome> => {\n if (params.pluginRuntime?.hasToolHooks !== true) {\n return outcome;\n }\n\n const afterHook = await params.pluginRuntime.applyAfterToolCall({\n runId: params.runId,\n agentName: params.agentName,\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n args: prepared.args,\n result: outcome.result,\n conversationId: params.conversationId,\n error:\n outcome.isError === true &&\n typeof outcome.result === \"object\" &&\n outcome.result !== null &&\n \"message\" in outcome.result &&\n typeof outcome.result.message === \"string\"\n ? outcome.result.message\n : undefined,\n });\n\n return {\n ...outcome,\n result: afterHook.result,\n };\n };\n\n await emitToolCallStart({ toolCall, toolTarget });\n await emitToolCallArgs({ toolCall, toolTarget });\n\n const prepared = await prepareToolCall();\n if (prepared.shouldEmitToolCallEnd) {\n await emitToolCallEnd(prepared);\n }\n\n const outcome = await executePreparedTool(prepared);\n const finalOutcome = await applyAfterToolCall(prepared, outcome);\n\n await emitToolCallResult(prepared, finalOutcome);\n\n results.push({\n type: \"tool-call\",\n callId: toolCall.callId,\n name: toolCall.name,\n arguments: toolCall.arguments,\n result: finalOutcome.result,\n isError: finalOutcome.isError,\n });\n }\n\n return { results };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"execute-tool-calls.mjs","names":[],"sources":["../../src/run/execute-tool-calls.ts"],"sourcesContent":["import { BetterAgentError } from \"@better-agent/shared/errors\";\nimport { logger } from \"@better-agent/shared/logger\";\nimport { safeJsonParse } from \"@better-agent/shared/utils\";\nimport { type Event, Events } from \"../events\";\nimport type { PluginRuntime } from \"../plugins\";\nimport type { GenerativeModelToolCallRequest, GenerativeModelToolCallResult } from \"../providers\";\nimport { validateInput } from \"../schema\";\nimport type {\n AgentToolDefinition,\n ExecutionToolError,\n OnToolError,\n ParseToolError,\n ToolApprovalConfig,\n ToolErrorContext,\n ToolErrorMode,\n ToolErrorPayload,\n ToolErrorResultFor,\n ValidationToolError,\n} from \"../tools\";\nimport type { PendingToolRuntime } from \"./pending-tools\";\nimport type { RunAdvancedOptions } from \"./types\";\n\nconst MAX_TOOL_ERROR_REPAIR_DEPTH = 2;\nconst MAX_TOOL_ERROR_RETRY_ATTEMPTS = 3;\n\ntype RecoverableToolErrorKind = ToolErrorPayload[\"errorKind\"];\ntype ExecutableToolDefinition = Exclude<AgentToolDefinition, { kind: \"hosted\" }>;\n\ntype ToolExecutionOutcome = {\n result: unknown;\n isError?: boolean;\n errorKind?: RecoverableToolErrorKind;\n};\n\ntype ResolvedApproval = {\n required?: boolean;\n timeoutMs?: number;\n meta?: Record<string, unknown>;\n};\n\ntype PreparedToolCall = {\n toolCall: GenerativeModelToolCallRequest;\n tool: ExecutableToolDefinition;\n toolTarget: \"server\" | \"client\";\n args?: unknown;\n validatedInput?: unknown;\n resolvedApproval?: ResolvedApproval;\n skip: boolean;\n skipResult?: unknown;\n parseError?: BetterAgentError;\n validationError?: BetterAgentError;\n shouldEmitToolCallEnd: boolean;\n};\n\nconst getToolRunName = (tool: AgentToolDefinition): string | undefined =>\n tool.kind === \"hosted\"\n ? typeof tool.name === \"string\" && tool.name.length > 0\n ? tool.name\n : typeof tool.type === \"string\" && tool.type.length > 0\n ? tool.type\n : undefined\n : typeof tool.name === \"string\" && tool.name.length > 0\n ? tool.name\n : undefined;\n\n/** Executes the next batch of tool calls. */\nexport const executeToolCalls = async <TContext>(params: {\n runId: string;\n agentName: string;\n conversationId?: string;\n parentMessageId: string;\n toolCalls: readonly GenerativeModelToolCallRequest[];\n tools: readonly AgentToolDefinition[];\n toolErrorMode?: ToolErrorMode;\n onToolError?: OnToolError;\n signal: AbortSignal;\n emit: (event: Event) => Promise<void>;\n advanced?: RunAdvancedOptions;\n pendingToolRuntime?: PendingToolRuntime;\n context?: TContext;\n pluginRuntime?: PluginRuntime | null;\n}): Promise<{\n results: GenerativeModelToolCallResult[];\n}> => {\n const results: GenerativeModelToolCallResult[] = [];\n\n const throwIfAborted = () => {\n if (params.signal.aborted) {\n throw BetterAgentError.fromCode(\"ABORTED\", \"Tool execution was aborted.\", {\n trace: [{ at: \"core.run.executeToolCalls.aborted\" }],\n });\n }\n };\n\n const isAbortError = (error: unknown): boolean =>\n params.signal.aborted === true ||\n (error instanceof BetterAgentError && error.code === \"ABORTED\");\n\n const waitForRetryBackoff = async (ms: number) => {\n if (ms <= 0) {\n throwIfAborted();\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n params.signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n\n const onAbort = () => {\n clearTimeout(timer);\n reject(\n BetterAgentError.fromCode(\"ABORTED\", \"Tool execution was aborted.\", {\n trace: [{ at: \"core.run.executeToolCalls.retryBackoff\" }],\n }),\n );\n };\n\n if (params.signal.aborted) {\n onAbort();\n return;\n }\n\n params.signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n };\n\n const extractToolErrorMessage = (\n error: unknown,\n errorKind: RecoverableToolErrorKind,\n ): string => {\n const rawMessage =\n error instanceof BetterAgentError || error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : \"Unknown tool error\";\n\n if (errorKind === \"parse\") {\n return `Tool arguments could not be parsed as valid JSON. ${rawMessage}`.trim();\n }\n\n if (errorKind === \"validation\") {\n return `Tool arguments failed schema validation. ${rawMessage}`.trim();\n }\n\n return rawMessage;\n };\n\n const createToolErrorOutcome = (args: {\n toolName: string;\n errorKind: RecoverableToolErrorKind;\n message: string;\n retryable?: boolean;\n }): ToolExecutionOutcome => ({\n result: {\n type: \"tool_error\",\n toolName: args.toolName,\n errorKind: args.errorKind,\n message: args.message,\n retryable: args.retryable,\n } satisfies ToolErrorPayload,\n isError: true,\n errorKind: args.errorKind,\n });\n\n const createToolErrorOutcomeFromError = (args: {\n toolName: string;\n error: unknown;\n errorKind: RecoverableToolErrorKind;\n message?: string;\n retryable?: boolean;\n }): ToolExecutionOutcome =>\n createToolErrorOutcome({\n toolName: args.toolName,\n errorKind: args.errorKind,\n message: args.message ?? extractToolErrorMessage(args.error, args.errorKind),\n retryable:\n args.retryable ??\n (args.error instanceof BetterAgentError ? args.error.retryable : undefined),\n });\n\n const emitToolCallStart = async (prepared: {\n toolCall: GenerativeModelToolCallRequest;\n toolTarget: \"server\" | \"client\";\n }) => {\n await params.emit({\n type: Events.TOOL_CALL_START,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const emitToolCallArgs = async (prepared: {\n toolCall: GenerativeModelToolCallRequest;\n toolTarget: \"server\" | \"client\";\n }) => {\n await params.emit({\n type: Events.TOOL_CALL_ARGS,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n delta: prepared.toolCall.arguments,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const emitToolCallEnd = async (prepared: {\n toolCall: GenerativeModelToolCallRequest;\n toolTarget: \"server\" | \"client\";\n }) => {\n await params.emit({\n type: Events.TOOL_CALL_END,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const emitToolCallResult = async (\n prepared: PreparedToolCall,\n outcome: ToolExecutionOutcome,\n ) => {\n await params.emit({\n type: Events.TOOL_CALL_RESULT,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n result: outcome.result,\n isError: outcome.isError,\n errorKind: outcome.errorKind,\n toolTarget: prepared.toolTarget,\n timestamp: Date.now(),\n });\n };\n\n const resolveExecutableTool = (\n toolCall: GenerativeModelToolCallRequest,\n ): { tool: ExecutableToolDefinition; toolTarget: \"server\" | \"client\" } => {\n const tool = params.tools.find((candidate) => getToolRunName(candidate) === toolCall.name);\n if (!tool) {\n throw BetterAgentError.fromCode(\n \"VALIDATION_FAILED\",\n `Tool '${toolCall.name}' was requested by the model but is not available for this run.`,\n {\n context: {\n runId: params.runId,\n agentName: params.agentName,\n toolName: toolCall.name,\n },\n trace: [{ at: \"core.run.executeToolCalls.missingTool\" }],\n },\n );\n }\n\n if (tool.kind === \"hosted\") {\n throw BetterAgentError.fromCode(\n \"NOT_IMPLEMENTED\",\n `Hosted tool '${getToolRunName(tool) ?? toolCall.name}' reached the in-process tool executor, but hosted tools must be executed by the provider during model invocation.`,\n {\n context: {\n runId: params.runId,\n agentName: params.agentName,\n toolName: getToolRunName(tool) ?? toolCall.name,\n toolTarget: tool.kind,\n provider: tool.provider,\n toolType: tool.type,\n },\n trace: [{ at: \"core.run.executeToolCalls.hostedToolInvariant\" }],\n },\n );\n }\n\n return {\n tool,\n toolTarget: tool.kind === \"client\" ? \"client\" : \"server\",\n };\n };\n\n const resolveApprovalConfig = async <TInput>(args: {\n approval?: ToolApprovalConfig<unknown, TInput>;\n input: TInput;\n toolCall: GenerativeModelToolCallRequest;\n tool: ExecutableToolDefinition;\n toolTarget: \"server\" | \"client\";\n }): Promise<ResolvedApproval | undefined> => {\n const approval = args.approval;\n if (!approval) {\n return undefined;\n }\n\n let resolved: ResolvedApproval = {\n required: approval.required,\n timeoutMs: approval.timeoutMs,\n meta: approval.meta,\n };\n\n if (approval.resolve) {\n const runtimeResolved = await approval.resolve({\n context: params.context,\n input: args.input,\n runId: params.runId,\n toolCallId: args.toolCall.callId,\n toolName: args.tool.name,\n toolTarget: args.toolTarget,\n });\n\n resolved = {\n required: runtimeResolved.required ?? resolved.required,\n timeoutMs: runtimeResolved.timeoutMs ?? resolved.timeoutMs,\n meta: runtimeResolved.meta ?? resolved.meta,\n };\n }\n\n return resolved;\n };\n\n const emitApprovalRequested = async (prepared: PreparedToolCall) => {\n await params.emit({\n type: Events.TOOL_APPROVAL_REQUIRED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n toolInput: prepared.validatedInput,\n state: \"requested\",\n timestamp: Date.now(),\n meta: prepared.resolvedApproval?.meta,\n });\n\n await params.emit({\n type: Events.TOOL_APPROVAL_UPDATED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n state: \"requested\",\n toolInput: prepared.validatedInput,\n timestamp: Date.now(),\n meta: prepared.resolvedApproval?.meta,\n });\n };\n\n const awaitApprovalIfNeeded = async (\n prepared: PreparedToolCall,\n ): Promise<{ approved: true } | { approved: false; note?: string }> => {\n if (!prepared.resolvedApproval?.required) {\n return { approved: true };\n }\n\n if (!params.pendingToolRuntime) {\n throw BetterAgentError.fromCode(\n \"NOT_IMPLEMENTED\",\n `Tool '${prepared.tool.name}' requires approval, but no approval runtime is configured.`,\n {\n context: {\n runId: params.runId,\n toolName: prepared.tool.name,\n toolCallId: prepared.toolCall.callId,\n toolTarget: prepared.toolTarget,\n },\n trace: [{ at: \"core.run.executeTools.awaitApprovalIfNeeded\" }],\n },\n );\n }\n\n try {\n const decision = await params.pendingToolRuntime.awaitToolApproval({\n runId: params.runId,\n toolCallId: prepared.toolCall.callId,\n toolName: prepared.tool.name,\n timeoutMs:\n prepared.resolvedApproval.timeoutMs ?? params.advanced?.toolApprovalTimeoutMs,\n signal: params.signal,\n });\n\n await params.emit({\n type: Events.TOOL_APPROVAL_UPDATED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n state: decision.decision,\n toolInput: prepared.validatedInput,\n timestamp: Date.now(),\n meta: prepared.resolvedApproval.meta,\n note: decision.note,\n actorId: decision.actorId,\n });\n\n if (decision.decision === \"denied\") {\n return decision.note !== undefined\n ? { approved: false, note: decision.note }\n : { approved: false };\n }\n\n return { approved: true };\n } catch (error) {\n if (error instanceof BetterAgentError && error.code === \"TIMEOUT\") {\n await params.emit({\n type: Events.TOOL_APPROVAL_UPDATED,\n runId: params.runId,\n agentName: params.agentName,\n parentMessageId: params.parentMessageId,\n toolCallId: prepared.toolCall.callId,\n toolCallName: prepared.toolCall.name,\n toolTarget: prepared.toolTarget,\n state: \"expired\",\n toolInput: prepared.validatedInput,\n timestamp: Date.now(),\n meta: prepared.resolvedApproval.meta,\n });\n }\n\n throw error;\n }\n };\n\n for (const toolCall of params.toolCalls) {\n throwIfAborted();\n\n const { tool, toolTarget } = resolveExecutableTool(toolCall);\n const resolvedToolErrorMode = tool.toolErrorMode ?? params.toolErrorMode ?? \"tool_error\";\n\n const defaultToolErrorOutcome = (args: {\n error: unknown;\n errorKind: RecoverableToolErrorKind;\n retryable?: boolean;\n }): ToolExecutionOutcome => {\n if (isAbortError(args.error)) {\n throw args.error;\n }\n\n if (resolvedToolErrorMode === \"throw\") {\n throw args.error;\n }\n\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n retryable: args.retryable,\n });\n };\n\n const runToolHandler = async (input: unknown) => {\n if (tool.kind === \"server\") {\n return await tool.handler(input, {\n runId: params.runId,\n agentName: params.agentName,\n ...(params.conversationId !== undefined\n ? { conversationId: params.conversationId }\n : {}),\n parentMessageId: params.parentMessageId,\n signal: params.signal,\n ...(params.context !== undefined ? { context: params.context } : {}),\n emit: params.emit,\n });\n }\n\n if (!params.pendingToolRuntime) {\n throw BetterAgentError.fromCode(\n \"NOT_IMPLEMENTED\",\n `Client tool '${tool.name}' requires a live runtime capable of accepting tool results.`,\n {\n context: {\n runId: params.runId,\n agentName: params.agentName,\n toolName: tool.name,\n toolCallId: toolCall.callId,\n },\n trace: [{ at: \"core.run.executeToolCalls.awaitClientToolResult\" }],\n },\n );\n }\n\n return await params.pendingToolRuntime.awaitClientToolResult({\n runId: params.runId,\n toolCallId: toolCall.callId,\n toolName: toolCall.name,\n timeoutMs: params.advanced?.clientToolResultTimeoutMs,\n signal: params.signal,\n });\n };\n\n const resolveHookAction = async <T extends ToolErrorContext>(\n context: T,\n ): Promise<ToolErrorResultFor<T> | undefined> => {\n const toolAction = await tool.onToolError?.(context);\n if (toolAction !== undefined) {\n if (toolAction.action !== \"skip\") {\n return toolAction;\n }\n } else {\n return undefined;\n }\n\n const agentAction = await params.onToolError?.(context);\n if (agentAction !== undefined && agentAction.action !== \"skip\") {\n return agentAction;\n }\n\n return undefined;\n };\n\n const resolveToolError = async (args: {\n error: unknown;\n errorKind: RecoverableToolErrorKind;\n input?: unknown;\n recoveryDepth: number;\n }): Promise<ToolExecutionOutcome> => {\n if (isAbortError(args.error)) {\n throw args.error;\n }\n\n if (args.recoveryDepth >= MAX_TOOL_ERROR_REPAIR_DEPTH) {\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n const context =\n args.errorKind === \"parse\"\n ? ({\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n error: args.error,\n rawArguments: toolCall.arguments,\n errorKind: \"parse\",\n } satisfies ParseToolError)\n : args.errorKind === \"validation\"\n ? ({\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n error: args.error,\n rawArguments: toolCall.arguments,\n input: args.input,\n errorKind: \"validation\",\n } satisfies ValidationToolError)\n : ({\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n error: args.error,\n rawArguments: toolCall.arguments,\n input: args.input,\n errorKind: \"execution\",\n } satisfies ExecutionToolError);\n\n const action = await resolveHookAction(context);\n if (action === undefined) {\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n switch (action.action) {\n case \"send_to_model\":\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n message:\n action.message ?? extractToolErrorMessage(args.error, args.errorKind),\n retryable: action.retryable,\n });\n\n case \"throw\":\n throw args.error;\n\n case \"skip\":\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n\n case \"repair\":\n return await validateAndExecuteInput(action.input, args.recoveryDepth + 1);\n\n case \"retry\": {\n if (args.errorKind !== \"execution\" || args.input === undefined) {\n logger.warn(\n `[better-agent] Ignoring invalid onToolError action '${action.action}' for tool '${toolCall.name}' (${args.errorKind} error).`,\n );\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n const attempts = Math.max(\n 1,\n Math.min(action.maxAttempts ?? 1, MAX_TOOL_ERROR_RETRY_ATTEMPTS),\n );\n\n let lastError = args.error;\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n throwIfAborted();\n try {\n return { result: await runToolHandler(args.input) };\n } catch (retryError) {\n if (isAbortError(retryError)) {\n throw retryError;\n }\n\n lastError = retryError;\n if (attempt < attempts - 1) {\n await waitForRetryBackoff((attempt + 1) * 500);\n }\n }\n }\n\n return await resolveToolError({\n error: lastError,\n errorKind: \"execution\",\n input: args.input,\n recoveryDepth: args.recoveryDepth + 1,\n });\n }\n\n case \"result\":\n if (args.errorKind !== \"execution\") {\n logger.warn(\n `[better-agent] Ignoring invalid onToolError action '${action.action}' for tool '${toolCall.name}' (${args.errorKind} error).`,\n );\n return createToolErrorOutcomeFromError({\n toolName: toolCall.name,\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n\n return { result: action.value };\n\n default:\n return defaultToolErrorOutcome({\n error: args.error,\n errorKind: args.errorKind,\n });\n }\n };\n\n const executeApprovedInput = async (\n prepared: PreparedToolCall,\n input: unknown,\n recoveryDepth: number,\n ): Promise<ToolExecutionOutcome> => {\n const approval = await awaitApprovalIfNeeded(prepared);\n if (!approval.approved) {\n const denialReason = approval.note ? ` Reason: ${approval.note}` : \"\";\n return {\n result: `Tool '${toolCall.name}' was denied by the operator.${denialReason}`,\n };\n }\n\n try {\n return { result: await runToolHandler(input) };\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n\n return await resolveToolError({\n error,\n errorKind: \"execution\",\n input,\n recoveryDepth,\n });\n }\n };\n\n const validateAndExecuteInput = async (\n input: unknown,\n recoveryDepth: number,\n ): Promise<ToolExecutionOutcome> => {\n const validatedInput = await validateInput(tool.schema, input);\n if (validatedInput.isErr()) {\n return await resolveToolError({\n error: validatedInput.error.at({\n at: \"core.run.executeToolCalls.validateToolInput\",\n }),\n errorKind: \"validation\",\n input,\n recoveryDepth,\n });\n }\n\n const prepared: PreparedToolCall = {\n toolCall,\n tool,\n toolTarget,\n args: input,\n validatedInput: validatedInput.value,\n resolvedApproval: await resolveApprovalConfig({\n approval: tool.approval,\n input: validatedInput.value,\n toolCall,\n tool,\n toolTarget,\n }),\n skip: false,\n shouldEmitToolCallEnd: false,\n };\n\n return await executeApprovedInput(prepared, validatedInput.value, recoveryDepth);\n };\n\n const prepareToolCall = async (): Promise<PreparedToolCall> => {\n const parsed = safeJsonParse(toolCall.arguments);\n if (parsed.isErr()) {\n return {\n toolCall,\n tool,\n toolTarget,\n skip: false,\n shouldEmitToolCallEnd: false,\n parseError: BetterAgentError.wrap({\n err: parsed.error,\n message: `Failed to parse arguments for tool '${toolCall.name}'`,\n opts: {\n code: \"VALIDATION_FAILED\",\n context: {\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n },\n trace: [{ at: \"core.run.executeToolCalls.parseToolArguments\" }],\n },\n }),\n };\n }\n\n const beforeHook =\n params.pluginRuntime?.hasToolHooks === true\n ? await params.pluginRuntime.applyBeforeToolCall({\n runId: params.runId,\n agentName: params.agentName,\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n args: parsed.value,\n conversationId: params.conversationId,\n })\n : { args: parsed.value };\n\n if (beforeHook?.decision?.skip === true) {\n return {\n toolCall,\n tool,\n toolTarget,\n args: beforeHook.args,\n skip: true,\n skipResult: beforeHook.decision.result,\n shouldEmitToolCallEnd: true,\n };\n }\n\n const validatedInput = await validateInput(tool.schema, beforeHook.args);\n if (validatedInput.isErr()) {\n return {\n toolCall,\n tool,\n toolTarget,\n args: beforeHook.args,\n skip: false,\n shouldEmitToolCallEnd: false,\n validationError: validatedInput.error.at({\n at: \"core.run.executeToolCalls.validateToolInput\",\n }),\n };\n }\n\n const prepared: PreparedToolCall = {\n toolCall,\n tool,\n toolTarget,\n args: beforeHook.args,\n validatedInput: validatedInput.value,\n resolvedApproval: await resolveApprovalConfig({\n approval: tool.approval,\n input: validatedInput.value,\n toolCall,\n tool,\n toolTarget,\n }),\n skip: false,\n shouldEmitToolCallEnd: true,\n };\n\n if (prepared.resolvedApproval?.required) {\n await emitApprovalRequested(prepared);\n }\n\n return prepared;\n };\n\n const executePreparedTool = async (\n prepared: PreparedToolCall,\n ): Promise<ToolExecutionOutcome> => {\n if (prepared.parseError) {\n return await resolveToolError({\n error: prepared.parseError,\n errorKind: \"parse\",\n recoveryDepth: 0,\n });\n }\n\n if (prepared.skip) {\n return { result: prepared.skipResult };\n }\n\n if (prepared.validationError) {\n return await resolveToolError({\n error: prepared.validationError,\n errorKind: \"validation\",\n input: prepared.args,\n recoveryDepth: 0,\n });\n }\n\n return await executeApprovedInput(prepared, prepared.validatedInput, 0);\n };\n\n const applyAfterToolCall = async (\n prepared: PreparedToolCall,\n outcome: ToolExecutionOutcome,\n ): Promise<ToolExecutionOutcome> => {\n if (params.pluginRuntime?.hasToolHooks !== true) {\n return outcome;\n }\n\n const afterHook = await params.pluginRuntime.applyAfterToolCall({\n runId: params.runId,\n agentName: params.agentName,\n toolName: toolCall.name,\n toolCallId: toolCall.callId,\n args: prepared.args,\n result: outcome.result,\n conversationId: params.conversationId,\n error:\n outcome.isError === true &&\n typeof outcome.result === \"object\" &&\n outcome.result !== null &&\n \"message\" in outcome.result &&\n typeof outcome.result.message === \"string\"\n ? outcome.result.message\n : undefined,\n });\n\n return {\n ...outcome,\n result: afterHook.result,\n };\n };\n\n await emitToolCallStart({ toolCall, toolTarget });\n await emitToolCallArgs({ toolCall, toolTarget });\n\n const prepared = await prepareToolCall();\n if (prepared.shouldEmitToolCallEnd) {\n await emitToolCallEnd(prepared);\n }\n\n const outcome = await executePreparedTool(prepared);\n const finalOutcome = await applyAfterToolCall(prepared, outcome);\n\n await emitToolCallResult(prepared, finalOutcome);\n\n results.push({\n type: \"tool-call\",\n callId: toolCall.callId,\n name: toolCall.name,\n arguments: toolCall.arguments,\n result: finalOutcome.result,\n isError: finalOutcome.isError,\n });\n }\n\n return { results };\n};\n"],"mappings":"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"}
@@ -167,8 +167,18 @@ type BoundToolApprovalConfig<TContext, TSchema extends ResolvableSchema> = ToolA
167
167
  * Extra context passed to a tool handler at call time.
168
168
  */
169
169
  interface ToolRunContext {
170
+ /** Active run id. */
171
+ runId: string;
172
+ /** Agent name for this run. */
173
+ agentName: string;
174
+ /** Shared conversation id, if present. */
175
+ conversationId?: string;
176
+ /** Parent assistant message that produced this tool call batch. */
177
+ parentMessageId: string;
170
178
  /** Abort signal for cancelling the active run. */
171
179
  signal: AbortSignal;
180
+ /** Run context value passed to the agent, when present. */
181
+ context?: unknown;
172
182
  /** Emits runtime events while the tool is running. */
173
183
  emit: (event: Event) => Awaitable<void>;
174
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/tools/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/tools/types.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-agent/core",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.2",
4
4
  "description": "Better Agent core TypeScript library",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -60,7 +60,7 @@
60
60
  "access": "public"
61
61
  },
62
62
  "dependencies": {
63
- "@better-agent/shared": "0.1.0-canary.2",
63
+ "@better-agent/shared": "0.1.0-beta.2",
64
64
  "ajv": "^8.17.1",
65
65
  "@standard-schema/spec": "1.1.0",
66
66
  "json-schema-to-ts": "^3.1.1"