@evalops/maestro 0.10.30 → 0.10.32

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.
Files changed (80) hide show
  1. package/dist/agent/compaction/cut-points.d.ts +157 -0
  2. package/dist/agent/compaction/cut-points.d.ts.map +1 -0
  3. package/dist/agent/compaction/cut-points.js +341 -0
  4. package/dist/agent/compaction/cut-points.js.map +1 -0
  5. package/dist/agent/compaction.d.ts +4 -144
  6. package/dist/agent/compaction.d.ts.map +1 -1
  7. package/dist/agent/compaction.js +5 -340
  8. package/dist/agent/compaction.js.map +1 -1
  9. package/dist/agent/transport/tool-execution.d.ts +1 -0
  10. package/dist/agent/transport/tool-execution.d.ts.map +1 -1
  11. package/dist/agent/transport/tool-execution.js +23 -3
  12. package/dist/agent/transport/tool-execution.js.map +1 -1
  13. package/dist/agent/transport/tool-phase-summary.d.ts +6 -0
  14. package/dist/agent/transport/tool-phase-summary.d.ts.map +1 -0
  15. package/dist/agent/transport/tool-phase-summary.js +99 -0
  16. package/dist/agent/transport/tool-phase-summary.js.map +1 -0
  17. package/dist/agent/transport/tool-safety-pipeline.d.ts +1 -0
  18. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  19. package/dist/agent/transport/tool-safety-pipeline.js +9 -4
  20. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  21. package/dist/agent/transport.d.ts.map +1 -1
  22. package/dist/agent/transport.js +4 -99
  23. package/dist/agent/transport.js.map +1 -1
  24. package/dist/cli/commands/a2a/args.d.ts +13 -0
  25. package/dist/cli/commands/a2a/args.d.ts.map +1 -0
  26. package/dist/cli/commands/a2a/args.js +327 -0
  27. package/dist/cli/commands/a2a/args.js.map +1 -0
  28. package/dist/cli/commands/a2a/discovery.d.ts +40 -0
  29. package/dist/cli/commands/a2a/discovery.d.ts.map +1 -0
  30. package/dist/cli/commands/a2a/discovery.js +150 -0
  31. package/dist/cli/commands/a2a/discovery.js.map +1 -0
  32. package/dist/cli/commands/a2a.d.ts +2 -5
  33. package/dist/cli/commands/a2a.d.ts.map +1 -1
  34. package/dist/cli/commands/a2a.js +4 -474
  35. package/dist/cli/commands/a2a.js.map +1 -1
  36. package/dist/cli.js +1868 -1591
  37. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  38. package/dist/node_modules/@evalops/tui/package.json +1 -1
  39. package/dist/server/app-context.d.ts +7 -0
  40. package/dist/server/app-context.d.ts.map +1 -1
  41. package/dist/server/app-context.js.map +1 -1
  42. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  43. package/dist/server/handlers/chat-ws.js +42 -24
  44. package/dist/server/handlers/chat-ws.js.map +1 -1
  45. package/dist/server/handlers/chat.d.ts.map +1 -1
  46. package/dist/server/handlers/chat.js +54 -35
  47. package/dist/server/handlers/chat.js.map +1 -1
  48. package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
  49. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  50. package/dist/server/handlers/hosted-runner-identity.js +7 -0
  51. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  52. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  53. package/dist/server/handlers/platform-a2a-push.js +134 -15
  54. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  55. package/dist/server/server-utils.d.ts.map +1 -1
  56. package/dist/server/server-utils.js +12 -0
  57. package/dist/server/server-utils.js.map +1 -1
  58. package/dist/server/session-timeline.d.ts.map +1 -1
  59. package/dist/server/session-timeline.js +13 -0
  60. package/dist/server/session-timeline.js.map +1 -1
  61. package/dist/telemetry/maestro-event-catalog.d.ts +30 -0
  62. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  63. package/dist/telemetry/maestro-event-catalog.js +96 -5
  64. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  65. package/dist/tools/find.d.ts +2 -0
  66. package/dist/tools/find.d.ts.map +1 -1
  67. package/dist/tools/find.js +25 -12
  68. package/dist/tools/find.js.map +1 -1
  69. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  70. package/dist/tools/parallel-ripgrep.js +1 -10
  71. package/dist/tools/parallel-ripgrep.js.map +1 -1
  72. package/dist/tools/ripgrep-utils.d.ts +1 -0
  73. package/dist/tools/ripgrep-utils.d.ts.map +1 -1
  74. package/dist/tools/ripgrep-utils.js +9 -0
  75. package/dist/tools/ripgrep-utils.js.map +1 -1
  76. package/dist/tools/search.d.ts.map +1 -1
  77. package/dist/tools/search.js +4 -4
  78. package/dist/tools/search.js.map +1 -1
  79. package/dist/version.json +2 -2
  80. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EACX,eAAe,EAGf,gBAAgB,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EACX,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EAER,MAAM,aAAa,CAAC;AACrB,OAAO,EAEN,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAE5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACX,oBAAoB,EACpB,eAAe,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,KAAK,eAAe,EAEpB,MAAM,sBAAsB,CAAC;AAM9B,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,WAAW,CAAC,EAAE,IAAI,CACjB,eAAe,EACf,qBAAqB,GAAG,kBAAkB,GAAG,4BAA4B,CACzE,CAAC;IACF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;IAC/C,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;IAClD,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD,eAAe,EAAE,eAAe,CAAC;IACjC,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAC/B,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC;KACjB,CAAC,CAAC;CACH;AAuKD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,oBAAoB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAoZ/B"}
1
+ {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EACX,eAAe,EAGf,gBAAgB,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EACX,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EAER,MAAM,aAAa,CAAC;AACrB,OAAO,EAEN,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAE5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACX,oBAAoB,EACpB,eAAe,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,KAAK,eAAe,EAEpB,MAAM,sBAAsB,CAAC;AAM9B,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,WAAW,CAAC,EAAE,IAAI,CACjB,eAAe,EACf,qBAAqB,GAAG,kBAAkB,GAAG,4BAA4B,CACzE,CAAC;IACF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;IAC/C,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;IAClD,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,eAAe,EAAE,eAAe,CAAC;IACjC,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAC/B,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC;KACjB,CAAC,CAAC;CACH;AAuKD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,oBAAoB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAkb/B"}
@@ -158,7 +158,7 @@ function sleepWithSignal(ms, signal) {
158
158
  * and hook lifecycle (PostToolUse, EvalGate, PostToolUseFailure).
159
159
  */
160
160
  export function createToolExecutionPromise(ctx) {
161
- const { toolCall, effectiveToolCall, tool, validatedArgs, sanitizedExecutionArgs, cfg, signal, clock, safetyMiddleware, adaptiveThresholds, auditLogger, hookService, toolUpdateQueue, clientToolExecPromise, toolRetryService, toolRetryConfig, clientToolService, toolExecutionBridge, toolExecutionBridgePlan, } = ctx;
161
+ const { toolCall, effectiveToolCall, tool, validatedArgs, sanitizedExecutionArgs, cfg, signal, clock, safetyMiddleware, adaptiveThresholds, auditLogger, hookService, toolUpdateQueue, clientToolExecPromise, toolRetryService, toolRetryConfig, clientToolService, toolExecutionBridge, toolExecutionBridgePlan, approvalRequestId, } = ctx;
162
162
  const startTime = clock.now();
163
163
  const resolvedRetryConfig = resolveToolRetryConfig(toolRetryConfig);
164
164
  const toolHasRetryConfig = tool.maxRetries !== undefined ||
@@ -206,6 +206,24 @@ export function createToolExecutionPromise(ctx) {
206
206
  }
207
207
  return runWithMcpClientToolService(clientToolService, () => tool.execute(toolCall.id, validatedArgs, signal, context, onUpdate));
208
208
  };
209
+ const attachApprovalRequestId = (message) => {
210
+ if (!approvalRequestId) {
211
+ return;
212
+ }
213
+ const details = message.details && typeof message.details === "object"
214
+ ? { ...message.details }
215
+ : {};
216
+ if (typeof details.approvalRequestId !== "string") {
217
+ details.approvalRequestId = approvalRequestId;
218
+ }
219
+ message.details = details;
220
+ };
221
+ const withLocalApprovalMetadata = (metadata) => ({
222
+ ...metadata,
223
+ ...(approvalRequestId && !metadata.approvalRequestId
224
+ ? { approvalRequestId }
225
+ : {}),
226
+ });
209
227
  const executeWithRetry = async () => {
210
228
  let totalAttempts = 0;
211
229
  let userRetryRounds = 0;
@@ -307,6 +325,7 @@ export function createToolExecutionPromise(ctx) {
307
325
  isError: result.isError || false,
308
326
  timestamp: clock.now(),
309
327
  };
328
+ attachApprovalRequestId(toolResultMsg);
310
329
  if (hookService && !result.isError) {
311
330
  const postHookResult = await hookService.runPostToolUseHooks(effectiveToolCall, toolResultMsg, signal);
312
331
  if (postHookResult.additionalContext) {
@@ -387,7 +406,7 @@ export function createToolExecutionPromise(ctx) {
387
406
  return {
388
407
  message: toolResultMsg,
389
408
  isError: toolResultMsg.isError,
390
- ...buildObservedResultMetadata(toolExecutionBridgePlan, observed ?? governedOutput),
409
+ ...withLocalApprovalMetadata(buildObservedResultMetadata(toolExecutionBridgePlan, observed ?? governedOutput)),
391
410
  };
392
411
  }
393
412
  catch (error) {
@@ -413,6 +432,7 @@ export function createToolExecutionPromise(ctx) {
413
432
  isError: true,
414
433
  timestamp: clock.now(),
415
434
  };
435
+ attachApprovalRequestId(toolResultMsg);
416
436
  if (hookService) {
417
437
  const failureHookResult = await hookService.runPostToolUseFailureHooks(effectiveToolCall, baseErrorMessage, signal);
418
438
  if (failureHookResult.additionalContext) {
@@ -434,7 +454,7 @@ export function createToolExecutionPromise(ctx) {
434
454
  return {
435
455
  message: toolResultMsg,
436
456
  isError: true,
437
- ...buildObservedResultMetadata(toolExecutionBridgePlan, observed ?? governedOutput),
457
+ ...withLocalApprovalMetadata(buildObservedResultMetadata(toolExecutionBridgePlan, observed ?? governedOutput)),
438
458
  };
439
459
  }
440
460
  })();
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool Execution\n * Creates the execution promise for a tool call, handling client/server dispatch,\n * audit logging, safety tracking, and hook lifecycle.\n */\n\nimport { getErrorMessage, isRetriableError } from \"../../errors/index.js\";\nimport type { ToolHookService } from \"../../hooks/tool-integration.js\";\nimport { runWithMcpClientToolService } from \"../../mcp/elicitation.js\";\nimport { METRICS } from \"../../safety/adaptive-thresholds.js\";\nimport type { AdaptiveThresholds } from \"../../safety/adaptive-thresholds.js\";\nimport type { SafetyMiddleware } from \"../../safety/safety-middleware.js\";\nimport { ToolError } from \"../../tools/tool-dsl.js\";\nimport type { Clock } from \"../../utils/clock.js\";\nimport { extractRetryHeaders, parseRetryAfter } from \"../../utils/retry.js\";\nimport type {\n\tToolRetryConfig,\n\tToolRetryDecision,\n\tToolRetryRequest,\n\tToolRetryService,\n} from \"../tool-retry.js\";\nimport type { ClientToolExecutionService } from \"../transport.js\";\nimport type {\n\tAgentRunConfig,\n\tAgentTool,\n\tAgentToolResult,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\nimport {\n\ttype ObserveToolExecutionPlan,\n\ttype PlatformToolExecutionBridge,\n\ttype ToolExecutionBridgePlan,\n\tbuildObservedResultMetadata,\n} from \"./tool-execution-bridge.js\";\nimport type {\n\tToolExecutionOutcome,\n\tToolUpdateQueue,\n} from \"./tool-update-queue.js\";\nimport {\n\ttype ToolAuditLogger,\n\tlogToolExecutionAudit,\n} from \"./transport-utils.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ToolExecutionContext {\n\ttoolCall: ToolCall;\n\teffectiveToolCall: ToolCall;\n\ttool: AgentTool;\n\tvalidatedArgs: Record<string, unknown>;\n\tsanitizedExecutionArgs: Record<string, unknown>;\n\tcfg: AgentRunConfig;\n\tsignal?: AbortSignal;\n\t// Services\n\tclock: Clock;\n\tsafetyMiddleware: SafetyMiddleware;\n\tadaptiveThresholds: AdaptiveThresholds;\n\tauditLogger?: ToolAuditLogger;\n\thookService?: Pick<\n\t\tToolHookService,\n\t\t\"runPostToolUseHooks\" | \"runEvalGateHooks\" | \"runPostToolUseFailureHooks\"\n\t>;\n\ttoolRetryService?: ToolRetryService;\n\ttoolRetryConfig?: ToolRetryConfig;\n\tclientToolService?: ClientToolExecutionService;\n\ttoolExecutionBridge?: PlatformToolExecutionBridge;\n\ttoolExecutionBridgePlan?: ToolExecutionBridgePlan;\n\t// Concurrency\n\ttoolUpdateQueue: ToolUpdateQueue;\n\t/** Pre-created client tool execution promise (if applicable) */\n\tclientToolExecPromise?: Promise<{\n\t\tcontent: AgentToolResult[\"content\"];\n\t\tisError: boolean;\n\t}>;\n}\n\nconst DEFAULT_TOOL_RETRY_CONFIG: Required<ToolRetryConfig> = {\n\tmaxAutoRetries: 1,\n\tinitialDelayMs: 500,\n\tmaxDelayMs: 5_000,\n\tbackoffMultiplier: 2,\n};\n\n/** Hard cap on user-prompted retry rounds to prevent infinite loops. */\nconst MAX_USER_RETRY_ROUNDS = 10;\n\nconst RETRYABLE_MESSAGE_SNIPPETS = [\n\t\"timeout\",\n\t\"timed out\",\n\t\"rate limit\",\n\t\"too many requests\",\n\t\"temporarily\",\n\t\"overloaded\",\n\t\"network\",\n\t\"econnreset\",\n\t\"econnrefused\",\n\t\"enotfound\",\n];\n\nconst NON_RETRYABLE_MESSAGE_SNIPPETS = [\n\t\"invalid\",\n\t\"validation\",\n\t\"not found\",\n\t\"no such file\",\n\t\"permission\",\n\t\"denied\",\n\t\"unauthorized\",\n\t\"forbidden\",\n\t\"syntax\",\n];\n\nfunction resolveToolRetryConfig(\n\tconfig?: ToolRetryConfig,\n): Required<ToolRetryConfig> {\n\treturn {\n\t\tmaxAutoRetries:\n\t\t\tconfig?.maxAutoRetries ?? DEFAULT_TOOL_RETRY_CONFIG.maxAutoRetries,\n\t\tinitialDelayMs:\n\t\t\tconfig?.initialDelayMs ?? DEFAULT_TOOL_RETRY_CONFIG.initialDelayMs,\n\t\tmaxDelayMs: config?.maxDelayMs ?? DEFAULT_TOOL_RETRY_CONFIG.maxDelayMs,\n\t\tbackoffMultiplier:\n\t\t\tconfig?.backoffMultiplier ?? DEFAULT_TOOL_RETRY_CONFIG.backoffMultiplier,\n\t};\n}\n\nfunction isRetryableToolError(error: unknown): boolean {\n\tif (!error) return false;\n\tif (isRetriableError(error)) return true;\n\tif (error instanceof ToolError && error.code === \"VALIDATION_ERROR\") {\n\t\treturn false;\n\t}\n\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\treturn false;\n\t}\n\tconst message =\n\t\terror instanceof Error\n\t\t\t? error.message.toLowerCase()\n\t\t\t: String(error).toLowerCase();\n\tif (\n\t\tNON_RETRYABLE_MESSAGE_SNIPPETS.some((snippet) => message.includes(snippet))\n\t) {\n\t\treturn false;\n\t}\n\tif (RETRYABLE_MESSAGE_SNIPPETS.some((snippet) => message.includes(snippet))) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction buildToolErrorHints(error: unknown, baseMessage: string): string[] {\n\tconst hints = new Set<string>();\n\tconst lower = baseMessage.toLowerCase();\n\n\tif (error instanceof ToolError && error.code === \"VALIDATION_ERROR\") {\n\t\thints.add(\"Check the tool arguments for missing or invalid values.\");\n\t}\n\tif (\n\t\tlower.includes(\"permission\") ||\n\t\tlower.includes(\"eacces\") ||\n\t\tlower.includes(\"denied\")\n\t) {\n\t\thints.add(\"Verify file permissions or access rights.\");\n\t}\n\tif (lower.includes(\"not found\") || lower.includes(\"no such file\")) {\n\t\thints.add(\"Confirm the target path exists and is spelled correctly.\");\n\t}\n\tif (lower.includes(\"timeout\") || lower.includes(\"timed out\")) {\n\t\thints.add(\"Check network connectivity and retry.\");\n\t}\n\tif (lower.includes(\"rate limit\") || lower.includes(\"too many requests\")) {\n\t\thints.add(\"Wait briefly before retrying the request.\");\n\t}\n\tif (\n\t\tlower.includes(\"unauthorized\") ||\n\t\tlower.includes(\"forbidden\") ||\n\t\tlower.includes(\"api key\") ||\n\t\tlower.includes(\"credential\")\n\t) {\n\t\thints.add(\"Verify API keys or credentials for this provider.\");\n\t}\n\tif (isRetriableError(error)) {\n\t\thints.add(\"This looks transient; retrying may succeed.\");\n\t}\n\n\treturn Array.from(hints);\n}\n\nfunction formatToolErrorMessage(error: unknown): string {\n\tconst baseMessage = getErrorMessage(error);\n\tconst hints = buildToolErrorHints(error, baseMessage);\n\tif (hints.length === 0) {\n\t\treturn baseMessage;\n\t}\n\treturn `${baseMessage}\\n\\nNext steps:\\n${hints\n\t\t.map((hint) => `- ${hint}`)\n\t\t.join(\"\\n\")}`;\n}\n\nfunction buildRetrySummary(errorMessage: string): string {\n\tconst firstLine = errorMessage.split(/\\r?\\n/)[0]?.trim();\n\tif (!firstLine) {\n\t\treturn \"Awaiting retry decision\";\n\t}\n\tconst shortened =\n\t\tfirstLine.length > 80 ? `${firstLine.slice(0, 77)}...` : firstLine;\n\treturn `Retry after error: ${shortened}`;\n}\n\nfunction sleepWithSignal(ms: number, signal?: AbortSignal): Promise<void> {\n\tif (ms <= 0) return Promise.resolve();\n\tif (!signal) {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n\tif (signal.aborted) {\n\t\tconst error = new Error(\"Operation aborted\");\n\t\terror.name = \"AbortError\";\n\t\treturn Promise.reject(error);\n\t}\n\treturn new Promise((resolve, reject) => {\n\t\tconst timer = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tcleanup();\n\t\t\tconst error = new Error(\"Operation aborted\");\n\t\t\terror.name = \"AbortError\";\n\t\t\treject(error);\n\t\t};\n\t\tconst cleanup = () => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Execution Promise Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a promise that executes the tool and returns the outcome.\n * Handles client vs server tool dispatch, audit logging, safety tracking,\n * and hook lifecycle (PostToolUse, EvalGate, PostToolUseFailure).\n */\nexport function createToolExecutionPromise(\n\tctx: ToolExecutionContext,\n): Promise<ToolExecutionOutcome> {\n\tconst {\n\t\ttoolCall,\n\t\teffectiveToolCall,\n\t\ttool,\n\t\tvalidatedArgs,\n\t\tsanitizedExecutionArgs,\n\t\tcfg,\n\t\tsignal,\n\t\tclock,\n\t\tsafetyMiddleware,\n\t\tadaptiveThresholds,\n\t\tauditLogger,\n\t\thookService,\n\t\ttoolUpdateQueue,\n\t\tclientToolExecPromise,\n\t\ttoolRetryService,\n\t\ttoolRetryConfig,\n\t\tclientToolService,\n\t\ttoolExecutionBridge,\n\t\ttoolExecutionBridgePlan,\n\t} = ctx;\n\n\tconst startTime = clock.now();\n\tconst resolvedRetryConfig = resolveToolRetryConfig(toolRetryConfig);\n\tconst toolHasRetryConfig =\n\t\ttool.maxRetries !== undefined ||\n\t\ttool.retryDelayMs !== undefined ||\n\t\ttool.shouldRetry !== undefined;\n\tconst isClientTool = tool.executionLocation === \"client\";\n\tconst allowAutoRetries =\n\t\t!isClientTool &&\n\t\t!toolHasRetryConfig &&\n\t\tresolvedRetryConfig.maxAutoRetries > 0;\n\tconst autoMaxAttempts = isClientTool\n\t\t? 1\n\t\t: toolHasRetryConfig\n\t\t\t? (tool.maxRetries ?? resolvedRetryConfig.maxAutoRetries) + 1\n\t\t\t: allowAutoRetries\n\t\t\t\t? resolvedRetryConfig.maxAutoRetries + 1\n\t\t\t\t: 1;\n\tconst retryDelay = toolHasRetryConfig\n\t\t? (tool.retryDelayMs ?? resolvedRetryConfig.initialDelayMs)\n\t\t: resolvedRetryConfig.initialDelayMs;\n\tconst shouldRetryFn = tool.shouldRetry ?? isRetryableToolError;\n\n\tconst context = cfg.sandbox ? { sandbox: cfg.sandbox } : undefined;\n\tconst onUpdate = (partialResult: AgentToolResult) => {\n\t\ttoolUpdateQueue.push({\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: sanitizedExecutionArgs,\n\t\t\tpartialResult,\n\t\t});\n\t};\n\n\tconst executeToolOnce = async (): Promise<AgentToolResult> => {\n\t\tif (tool.executionLocation === \"client\") {\n\t\t\tif (!clientToolExecPromise) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Client tool execution service not configured for tool \"${tool.name}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst res = await clientToolExecPromise;\n\t\t\treturn {\n\t\t\t\tcontent: res.content,\n\t\t\t\tisError: res.isError,\n\t\t\t\tdetails: undefined,\n\t\t\t} as AgentToolResult;\n\t\t}\n\t\tif (!clientToolService) {\n\t\t\treturn Promise.resolve(\n\t\t\t\ttool.execute(toolCall.id, validatedArgs, signal, context, onUpdate),\n\t\t\t);\n\t\t}\n\t\treturn runWithMcpClientToolService(clientToolService, () =>\n\t\t\ttool.execute(toolCall.id, validatedArgs, signal, context, onUpdate),\n\t\t);\n\t};\n\n\tconst executeWithRetry = async (): Promise<AgentToolResult> => {\n\t\tlet totalAttempts = 0;\n\t\tlet userRetryRounds = 0;\n\t\twhile (userRetryRounds < MAX_USER_RETRY_ROUNDS) {\n\t\t\tlet attempt = 0;\n\t\t\tlet delayMs = retryDelay;\n\t\t\tlet lastError: unknown;\n\n\t\t\twhile (attempt < autoMaxAttempts) {\n\t\t\t\tattempt += 1;\n\t\t\t\ttotalAttempts += 1;\n\t\t\t\ttry {\n\t\t\t\t\treturn await executeToolOnce();\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tlastError = error;\n\t\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tconst retryable = shouldRetryFn(error);\n\t\t\t\t\tconst isFinalAttempt = attempt >= autoMaxAttempts;\n\t\t\t\t\tif (!retryable || isFinalAttempt) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (toolHasRetryConfig) {\n\t\t\t\t\t\t// Tool-level config: fixed delay\n\t\t\t\t\t\tawait sleepWithSignal(retryDelay, signal);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Transport-level config: exponential backoff\n\t\t\t\t\t\tconst retryAfter = parseRetryAfter(extractRetryHeaders(error));\n\t\t\t\t\t\tconst delay = Math.min(\n\t\t\t\t\t\t\tretryAfter ?? delayMs,\n\t\t\t\t\t\t\tresolvedRetryConfig.maxDelayMs,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdelayMs = retryAfter\n\t\t\t\t\t\t\t? resolvedRetryConfig.initialDelayMs\n\t\t\t\t\t\t\t: Math.min(\n\t\t\t\t\t\t\t\t\tdelayMs * resolvedRetryConfig.backoffMultiplier,\n\t\t\t\t\t\t\t\t\tresolvedRetryConfig.maxDelayMs,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\tawait sleepWithSignal(delay, signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!lastError) {\n\t\t\t\tthrow new Error(\"Tool execution failed without an error\");\n\t\t\t}\n\t\t\tif (!toolRetryService || !shouldRetryFn(lastError)) {\n\t\t\t\tthrow lastError;\n\t\t\t}\n\t\t\tconst errorMessage = getErrorMessage(lastError);\n\t\t\tconst request: ToolRetryRequest = {\n\t\t\t\tid: `${toolCall.id}:retry:${totalAttempts}`,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\targs: sanitizedExecutionArgs,\n\t\t\t\terrorMessage,\n\t\t\t\tattempt: totalAttempts,\n\t\t\t\tsummary: buildRetrySummary(errorMessage),\n\t\t\t};\n\t\t\tif (toolRetryService.requiresUserInteraction()) {\n\t\t\t\ttoolUpdateQueue.push({\n\t\t\t\t\ttype: \"tool_retry_required\",\n\t\t\t\t\trequest,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst decision: ToolRetryDecision =\n\t\t\t\tawait toolRetryService.requestDecision(request, signal);\n\t\t\tif (toolRetryService.requiresUserInteraction()) {\n\t\t\t\ttoolUpdateQueue.push({\n\t\t\t\t\ttype: \"tool_retry_resolved\",\n\t\t\t\t\trequest,\n\t\t\t\t\tdecision,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (decision.action === \"retry\") {\n\t\t\t\tif (isClientTool) {\n\t\t\t\t\t// Client tools use a pre-created promise that can't be re-executed\n\t\t\t\t\t// from the transport layer. Throw so the client can handle re-dispatch.\n\t\t\t\t\tthrow lastError;\n\t\t\t\t}\n\t\t\t\tuserRetryRounds += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (decision.action === \"abort\") {\n\t\t\t\tconst abortError = new Error(decision.reason ?? \"Tool retry aborted\");\n\t\t\t\tabortError.name = \"AbortError\";\n\t\t\t\tthrow abortError;\n\t\t\t}\n\t\t\tthrow lastError;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`Tool \"${toolCall.name}\" failed after ${MAX_USER_RETRY_ROUNDS} retry rounds`,\n\t\t);\n\t};\n\n\treturn (async () => {\n\t\ttry {\n\t\t\tconst result = await executeWithRetry();\n\n\t\t\tawait logToolExecutionAudit(\n\t\t\t\tauditLogger,\n\t\t\t\ttoolCall.name,\n\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\tresult.isError ? \"failure\" : \"success\",\n\t\t\t\tclock.now() - startTime,\n\t\t\t);\n\n\t\t\tsafetyMiddleware.postExecution(\n\t\t\t\ttoolCall.name,\n\t\t\t\tvalidatedArgs,\n\t\t\t\t!result.isError,\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\tadaptiveThresholds.recordObservation(\n\t\t\t\tMETRICS.FAILURE_RATE,\n\t\t\t\tresult.isError ? 1 : 0,\n\t\t\t);\n\n\t\t\tconst toolResultMsg: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\" as const,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\tcontent: result.content,\n\t\t\t\tdetails: result.details,\n\t\t\t\tisError: result.isError || false,\n\t\t\t\ttimestamp: clock.now(),\n\t\t\t};\n\n\t\t\tif (hookService && !result.isError) {\n\t\t\t\tconst postHookResult = await hookService.runPostToolUseHooks(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\tif (postHookResult.additionalContext) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook context]: ${postHookResult.additionalContext}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tif (postHookResult.preventContinuation) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook stop]: ${postHookResult.stopReason ?? \"Hook requested stop\"}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\ttoolResultMsg.isError = true;\n\t\t\t\t}\n\t\t\t\tif (postHookResult.assertions?.length || postHookResult.evaluation) {\n\t\t\t\t\tconst mergedDetails: Record<string, unknown> =\n\t\t\t\t\t\ttoolResultMsg.details && typeof toolResultMsg.details === \"object\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...(toolResultMsg.details as Record<string, unknown>),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {};\n\t\t\t\t\tif (postHookResult.evaluation) {\n\t\t\t\t\t\tmergedDetails.evaluation = postHookResult.evaluation;\n\t\t\t\t\t}\n\t\t\t\t\tif (postHookResult.assertions?.length) {\n\t\t\t\t\t\tmergedDetails.assertions = postHookResult.assertions;\n\t\t\t\t\t}\n\t\t\t\t\ttoolResultMsg.details = mergedDetails as typeof toolResultMsg.details;\n\t\t\t\t}\n\n\t\t\t\tconst evalHookResult = await hookService.runEvalGateHooks(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\n\t\t\t\tif (evalHookResult.additionalContext) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook context]: ${evalHookResult.additionalContext}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\tif (evalHookResult.assertions?.length || evalHookResult.evaluation) {\n\t\t\t\t\tconst mergedDetails: Record<string, unknown> =\n\t\t\t\t\t\ttoolResultMsg.details && typeof toolResultMsg.details === \"object\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...(toolResultMsg.details as Record<string, unknown>),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {};\n\t\t\t\t\tif (\n\t\t\t\t\t\tevalHookResult.evaluation &&\n\t\t\t\t\t\tObject.keys(evalHookResult.evaluation).length > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tmergedDetails.evaluation = evalHookResult.evaluation;\n\t\t\t\t\t}\n\t\t\t\t\tif (evalHookResult.assertions?.length) {\n\t\t\t\t\t\tmergedDetails.assertions = evalHookResult.assertions;\n\t\t\t\t\t}\n\t\t\t\t\ttoolResultMsg.details = mergedDetails as typeof toolResultMsg.details;\n\t\t\t\t}\n\n\t\t\t\tif (evalHookResult.preventContinuation) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook stop]: ${evalHookResult.stopReason ?? \"Hook requested stop\"}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\ttoolResultMsg.isError = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst observed =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"observe\"\n\t\t\t\t\t? await toolExecutionBridge.recordObservation(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan as ObserveToolExecutionPlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\tconst governedOutput =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"governed\"\n\t\t\t\t\t? await toolExecutionBridge.recordGovernedOutput(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tclock.now() - startTime,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tmessage: toolResultMsg,\n\t\t\t\tisError: toolResultMsg.isError,\n\t\t\t\t...buildObservedResultMetadata(\n\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\tobserved ?? governedOutput,\n\t\t\t\t),\n\t\t\t};\n\t\t} catch (error: unknown) {\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst baseErrorMessage = getErrorMessage(error);\n\t\t\tconst formattedMessage = formatToolErrorMessage(error);\n\n\t\t\tawait logToolExecutionAudit(\n\t\t\t\tauditLogger,\n\t\t\t\ttoolCall.name,\n\t\t\t\tsafetyMiddleware.sanitizeForLogging(validatedArgs),\n\t\t\t\t\"failure\",\n\t\t\t\tclock.now() - startTime,\n\t\t\t\tbaseErrorMessage,\n\t\t\t);\n\n\t\t\tsafetyMiddleware.postExecution(toolCall.name, validatedArgs, false, true);\n\t\t\tadaptiveThresholds.recordObservation(METRICS.FAILURE_RATE, 1);\n\n\t\t\tconst toolResultMsg: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\" as const,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: formattedMessage,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: error instanceof ToolError ? error.details : undefined,\n\t\t\t\tisError: true,\n\t\t\t\ttimestamp: clock.now(),\n\t\t\t};\n\n\t\t\tif (hookService) {\n\t\t\t\tconst failureHookResult = await hookService.runPostToolUseFailureHooks(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\tbaseErrorMessage,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\tif (failureHookResult.additionalContext) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook context]: ${failureHookResult.additionalContext}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst observed =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"observe\"\n\t\t\t\t\t? await toolExecutionBridge.recordObservation(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan as ObserveToolExecutionPlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\tconst governedOutput =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"governed\"\n\t\t\t\t\t? await toolExecutionBridge.recordGovernedOutput(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tclock.now() - startTime,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tmessage: toolResultMsg,\n\t\t\t\tisError: true,\n\t\t\t\t...buildObservedResultMetadata(\n\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\tobserved ?? governedOutput,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t})();\n}\n"]}
1
+ {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool Execution\n * Creates the execution promise for a tool call, handling client/server dispatch,\n * audit logging, safety tracking, and hook lifecycle.\n */\n\nimport { getErrorMessage, isRetriableError } from \"../../errors/index.js\";\nimport type { ToolHookService } from \"../../hooks/tool-integration.js\";\nimport { runWithMcpClientToolService } from \"../../mcp/elicitation.js\";\nimport { METRICS } from \"../../safety/adaptive-thresholds.js\";\nimport type { AdaptiveThresholds } from \"../../safety/adaptive-thresholds.js\";\nimport type { SafetyMiddleware } from \"../../safety/safety-middleware.js\";\nimport { ToolError } from \"../../tools/tool-dsl.js\";\nimport type { Clock } from \"../../utils/clock.js\";\nimport { extractRetryHeaders, parseRetryAfter } from \"../../utils/retry.js\";\nimport type {\n\tToolRetryConfig,\n\tToolRetryDecision,\n\tToolRetryRequest,\n\tToolRetryService,\n} from \"../tool-retry.js\";\nimport type { ClientToolExecutionService } from \"../transport.js\";\nimport type {\n\tAgentRunConfig,\n\tAgentTool,\n\tAgentToolResult,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\nimport {\n\ttype ObserveToolExecutionPlan,\n\ttype PlatformToolExecutionBridge,\n\ttype ToolExecutionBridgePlan,\n\tbuildObservedResultMetadata,\n} from \"./tool-execution-bridge.js\";\nimport type {\n\tToolExecutionOutcome,\n\tToolUpdateQueue,\n} from \"./tool-update-queue.js\";\nimport {\n\ttype ToolAuditLogger,\n\tlogToolExecutionAudit,\n} from \"./transport-utils.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ToolExecutionContext {\n\ttoolCall: ToolCall;\n\teffectiveToolCall: ToolCall;\n\ttool: AgentTool;\n\tvalidatedArgs: Record<string, unknown>;\n\tsanitizedExecutionArgs: Record<string, unknown>;\n\tcfg: AgentRunConfig;\n\tsignal?: AbortSignal;\n\t// Services\n\tclock: Clock;\n\tsafetyMiddleware: SafetyMiddleware;\n\tadaptiveThresholds: AdaptiveThresholds;\n\tauditLogger?: ToolAuditLogger;\n\thookService?: Pick<\n\t\tToolHookService,\n\t\t\"runPostToolUseHooks\" | \"runEvalGateHooks\" | \"runPostToolUseFailureHooks\"\n\t>;\n\ttoolRetryService?: ToolRetryService;\n\ttoolRetryConfig?: ToolRetryConfig;\n\tclientToolService?: ClientToolExecutionService;\n\ttoolExecutionBridge?: PlatformToolExecutionBridge;\n\ttoolExecutionBridgePlan?: ToolExecutionBridgePlan;\n\tapprovalRequestId?: string;\n\t// Concurrency\n\ttoolUpdateQueue: ToolUpdateQueue;\n\t/** Pre-created client tool execution promise (if applicable) */\n\tclientToolExecPromise?: Promise<{\n\t\tcontent: AgentToolResult[\"content\"];\n\t\tisError: boolean;\n\t}>;\n}\n\nconst DEFAULT_TOOL_RETRY_CONFIG: Required<ToolRetryConfig> = {\n\tmaxAutoRetries: 1,\n\tinitialDelayMs: 500,\n\tmaxDelayMs: 5_000,\n\tbackoffMultiplier: 2,\n};\n\n/** Hard cap on user-prompted retry rounds to prevent infinite loops. */\nconst MAX_USER_RETRY_ROUNDS = 10;\n\nconst RETRYABLE_MESSAGE_SNIPPETS = [\n\t\"timeout\",\n\t\"timed out\",\n\t\"rate limit\",\n\t\"too many requests\",\n\t\"temporarily\",\n\t\"overloaded\",\n\t\"network\",\n\t\"econnreset\",\n\t\"econnrefused\",\n\t\"enotfound\",\n];\n\nconst NON_RETRYABLE_MESSAGE_SNIPPETS = [\n\t\"invalid\",\n\t\"validation\",\n\t\"not found\",\n\t\"no such file\",\n\t\"permission\",\n\t\"denied\",\n\t\"unauthorized\",\n\t\"forbidden\",\n\t\"syntax\",\n];\n\nfunction resolveToolRetryConfig(\n\tconfig?: ToolRetryConfig,\n): Required<ToolRetryConfig> {\n\treturn {\n\t\tmaxAutoRetries:\n\t\t\tconfig?.maxAutoRetries ?? DEFAULT_TOOL_RETRY_CONFIG.maxAutoRetries,\n\t\tinitialDelayMs:\n\t\t\tconfig?.initialDelayMs ?? DEFAULT_TOOL_RETRY_CONFIG.initialDelayMs,\n\t\tmaxDelayMs: config?.maxDelayMs ?? DEFAULT_TOOL_RETRY_CONFIG.maxDelayMs,\n\t\tbackoffMultiplier:\n\t\t\tconfig?.backoffMultiplier ?? DEFAULT_TOOL_RETRY_CONFIG.backoffMultiplier,\n\t};\n}\n\nfunction isRetryableToolError(error: unknown): boolean {\n\tif (!error) return false;\n\tif (isRetriableError(error)) return true;\n\tif (error instanceof ToolError && error.code === \"VALIDATION_ERROR\") {\n\t\treturn false;\n\t}\n\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\treturn false;\n\t}\n\tconst message =\n\t\terror instanceof Error\n\t\t\t? error.message.toLowerCase()\n\t\t\t: String(error).toLowerCase();\n\tif (\n\t\tNON_RETRYABLE_MESSAGE_SNIPPETS.some((snippet) => message.includes(snippet))\n\t) {\n\t\treturn false;\n\t}\n\tif (RETRYABLE_MESSAGE_SNIPPETS.some((snippet) => message.includes(snippet))) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction buildToolErrorHints(error: unknown, baseMessage: string): string[] {\n\tconst hints = new Set<string>();\n\tconst lower = baseMessage.toLowerCase();\n\n\tif (error instanceof ToolError && error.code === \"VALIDATION_ERROR\") {\n\t\thints.add(\"Check the tool arguments for missing or invalid values.\");\n\t}\n\tif (\n\t\tlower.includes(\"permission\") ||\n\t\tlower.includes(\"eacces\") ||\n\t\tlower.includes(\"denied\")\n\t) {\n\t\thints.add(\"Verify file permissions or access rights.\");\n\t}\n\tif (lower.includes(\"not found\") || lower.includes(\"no such file\")) {\n\t\thints.add(\"Confirm the target path exists and is spelled correctly.\");\n\t}\n\tif (lower.includes(\"timeout\") || lower.includes(\"timed out\")) {\n\t\thints.add(\"Check network connectivity and retry.\");\n\t}\n\tif (lower.includes(\"rate limit\") || lower.includes(\"too many requests\")) {\n\t\thints.add(\"Wait briefly before retrying the request.\");\n\t}\n\tif (\n\t\tlower.includes(\"unauthorized\") ||\n\t\tlower.includes(\"forbidden\") ||\n\t\tlower.includes(\"api key\") ||\n\t\tlower.includes(\"credential\")\n\t) {\n\t\thints.add(\"Verify API keys or credentials for this provider.\");\n\t}\n\tif (isRetriableError(error)) {\n\t\thints.add(\"This looks transient; retrying may succeed.\");\n\t}\n\n\treturn Array.from(hints);\n}\n\nfunction formatToolErrorMessage(error: unknown): string {\n\tconst baseMessage = getErrorMessage(error);\n\tconst hints = buildToolErrorHints(error, baseMessage);\n\tif (hints.length === 0) {\n\t\treturn baseMessage;\n\t}\n\treturn `${baseMessage}\\n\\nNext steps:\\n${hints\n\t\t.map((hint) => `- ${hint}`)\n\t\t.join(\"\\n\")}`;\n}\n\nfunction buildRetrySummary(errorMessage: string): string {\n\tconst firstLine = errorMessage.split(/\\r?\\n/)[0]?.trim();\n\tif (!firstLine) {\n\t\treturn \"Awaiting retry decision\";\n\t}\n\tconst shortened =\n\t\tfirstLine.length > 80 ? `${firstLine.slice(0, 77)}...` : firstLine;\n\treturn `Retry after error: ${shortened}`;\n}\n\nfunction sleepWithSignal(ms: number, signal?: AbortSignal): Promise<void> {\n\tif (ms <= 0) return Promise.resolve();\n\tif (!signal) {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n\tif (signal.aborted) {\n\t\tconst error = new Error(\"Operation aborted\");\n\t\terror.name = \"AbortError\";\n\t\treturn Promise.reject(error);\n\t}\n\treturn new Promise((resolve, reject) => {\n\t\tconst timer = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tcleanup();\n\t\t\tconst error = new Error(\"Operation aborted\");\n\t\t\terror.name = \"AbortError\";\n\t\t\treject(error);\n\t\t};\n\t\tconst cleanup = () => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Execution Promise Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a promise that executes the tool and returns the outcome.\n * Handles client vs server tool dispatch, audit logging, safety tracking,\n * and hook lifecycle (PostToolUse, EvalGate, PostToolUseFailure).\n */\nexport function createToolExecutionPromise(\n\tctx: ToolExecutionContext,\n): Promise<ToolExecutionOutcome> {\n\tconst {\n\t\ttoolCall,\n\t\teffectiveToolCall,\n\t\ttool,\n\t\tvalidatedArgs,\n\t\tsanitizedExecutionArgs,\n\t\tcfg,\n\t\tsignal,\n\t\tclock,\n\t\tsafetyMiddleware,\n\t\tadaptiveThresholds,\n\t\tauditLogger,\n\t\thookService,\n\t\ttoolUpdateQueue,\n\t\tclientToolExecPromise,\n\t\ttoolRetryService,\n\t\ttoolRetryConfig,\n\t\tclientToolService,\n\t\ttoolExecutionBridge,\n\t\ttoolExecutionBridgePlan,\n\t\tapprovalRequestId,\n\t} = ctx;\n\n\tconst startTime = clock.now();\n\tconst resolvedRetryConfig = resolveToolRetryConfig(toolRetryConfig);\n\tconst toolHasRetryConfig =\n\t\ttool.maxRetries !== undefined ||\n\t\ttool.retryDelayMs !== undefined ||\n\t\ttool.shouldRetry !== undefined;\n\tconst isClientTool = tool.executionLocation === \"client\";\n\tconst allowAutoRetries =\n\t\t!isClientTool &&\n\t\t!toolHasRetryConfig &&\n\t\tresolvedRetryConfig.maxAutoRetries > 0;\n\tconst autoMaxAttempts = isClientTool\n\t\t? 1\n\t\t: toolHasRetryConfig\n\t\t\t? (tool.maxRetries ?? resolvedRetryConfig.maxAutoRetries) + 1\n\t\t\t: allowAutoRetries\n\t\t\t\t? resolvedRetryConfig.maxAutoRetries + 1\n\t\t\t\t: 1;\n\tconst retryDelay = toolHasRetryConfig\n\t\t? (tool.retryDelayMs ?? resolvedRetryConfig.initialDelayMs)\n\t\t: resolvedRetryConfig.initialDelayMs;\n\tconst shouldRetryFn = tool.shouldRetry ?? isRetryableToolError;\n\n\tconst context = cfg.sandbox ? { sandbox: cfg.sandbox } : undefined;\n\tconst onUpdate = (partialResult: AgentToolResult) => {\n\t\ttoolUpdateQueue.push({\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: sanitizedExecutionArgs,\n\t\t\tpartialResult,\n\t\t});\n\t};\n\n\tconst executeToolOnce = async (): Promise<AgentToolResult> => {\n\t\tif (tool.executionLocation === \"client\") {\n\t\t\tif (!clientToolExecPromise) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Client tool execution service not configured for tool \"${tool.name}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst res = await clientToolExecPromise;\n\t\t\treturn {\n\t\t\t\tcontent: res.content,\n\t\t\t\tisError: res.isError,\n\t\t\t\tdetails: undefined,\n\t\t\t} as AgentToolResult;\n\t\t}\n\t\tif (!clientToolService) {\n\t\t\treturn Promise.resolve(\n\t\t\t\ttool.execute(toolCall.id, validatedArgs, signal, context, onUpdate),\n\t\t\t);\n\t\t}\n\t\treturn runWithMcpClientToolService(clientToolService, () =>\n\t\t\ttool.execute(toolCall.id, validatedArgs, signal, context, onUpdate),\n\t\t);\n\t};\n\n\tconst attachApprovalRequestId = (message: ToolResultMessage): void => {\n\t\tif (!approvalRequestId) {\n\t\t\treturn;\n\t\t}\n\t\tconst details =\n\t\t\tmessage.details && typeof message.details === \"object\"\n\t\t\t\t? { ...(message.details as Record<string, unknown>) }\n\t\t\t\t: {};\n\t\tif (typeof details.approvalRequestId !== \"string\") {\n\t\t\tdetails.approvalRequestId = approvalRequestId;\n\t\t}\n\t\tmessage.details = details as typeof message.details;\n\t};\n\n\tconst withLocalApprovalMetadata = (\n\t\tmetadata: ReturnType<typeof buildObservedResultMetadata>,\n\t): ReturnType<typeof buildObservedResultMetadata> => ({\n\t\t...metadata,\n\t\t...(approvalRequestId && !metadata.approvalRequestId\n\t\t\t? { approvalRequestId }\n\t\t\t: {}),\n\t});\n\n\tconst executeWithRetry = async (): Promise<AgentToolResult> => {\n\t\tlet totalAttempts = 0;\n\t\tlet userRetryRounds = 0;\n\t\twhile (userRetryRounds < MAX_USER_RETRY_ROUNDS) {\n\t\t\tlet attempt = 0;\n\t\t\tlet delayMs = retryDelay;\n\t\t\tlet lastError: unknown;\n\n\t\t\twhile (attempt < autoMaxAttempts) {\n\t\t\t\tattempt += 1;\n\t\t\t\ttotalAttempts += 1;\n\t\t\t\ttry {\n\t\t\t\t\treturn await executeToolOnce();\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tlastError = error;\n\t\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tconst retryable = shouldRetryFn(error);\n\t\t\t\t\tconst isFinalAttempt = attempt >= autoMaxAttempts;\n\t\t\t\t\tif (!retryable || isFinalAttempt) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (toolHasRetryConfig) {\n\t\t\t\t\t\t// Tool-level config: fixed delay\n\t\t\t\t\t\tawait sleepWithSignal(retryDelay, signal);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Transport-level config: exponential backoff\n\t\t\t\t\t\tconst retryAfter = parseRetryAfter(extractRetryHeaders(error));\n\t\t\t\t\t\tconst delay = Math.min(\n\t\t\t\t\t\t\tretryAfter ?? delayMs,\n\t\t\t\t\t\t\tresolvedRetryConfig.maxDelayMs,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdelayMs = retryAfter\n\t\t\t\t\t\t\t? resolvedRetryConfig.initialDelayMs\n\t\t\t\t\t\t\t: Math.min(\n\t\t\t\t\t\t\t\t\tdelayMs * resolvedRetryConfig.backoffMultiplier,\n\t\t\t\t\t\t\t\t\tresolvedRetryConfig.maxDelayMs,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\tawait sleepWithSignal(delay, signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!lastError) {\n\t\t\t\tthrow new Error(\"Tool execution failed without an error\");\n\t\t\t}\n\t\t\tif (!toolRetryService || !shouldRetryFn(lastError)) {\n\t\t\t\tthrow lastError;\n\t\t\t}\n\t\t\tconst errorMessage = getErrorMessage(lastError);\n\t\t\tconst request: ToolRetryRequest = {\n\t\t\t\tid: `${toolCall.id}:retry:${totalAttempts}`,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\targs: sanitizedExecutionArgs,\n\t\t\t\terrorMessage,\n\t\t\t\tattempt: totalAttempts,\n\t\t\t\tsummary: buildRetrySummary(errorMessage),\n\t\t\t};\n\t\t\tif (toolRetryService.requiresUserInteraction()) {\n\t\t\t\ttoolUpdateQueue.push({\n\t\t\t\t\ttype: \"tool_retry_required\",\n\t\t\t\t\trequest,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst decision: ToolRetryDecision =\n\t\t\t\tawait toolRetryService.requestDecision(request, signal);\n\t\t\tif (toolRetryService.requiresUserInteraction()) {\n\t\t\t\ttoolUpdateQueue.push({\n\t\t\t\t\ttype: \"tool_retry_resolved\",\n\t\t\t\t\trequest,\n\t\t\t\t\tdecision,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (decision.action === \"retry\") {\n\t\t\t\tif (isClientTool) {\n\t\t\t\t\t// Client tools use a pre-created promise that can't be re-executed\n\t\t\t\t\t// from the transport layer. Throw so the client can handle re-dispatch.\n\t\t\t\t\tthrow lastError;\n\t\t\t\t}\n\t\t\t\tuserRetryRounds += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (decision.action === \"abort\") {\n\t\t\t\tconst abortError = new Error(decision.reason ?? \"Tool retry aborted\");\n\t\t\t\tabortError.name = \"AbortError\";\n\t\t\t\tthrow abortError;\n\t\t\t}\n\t\t\tthrow lastError;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`Tool \"${toolCall.name}\" failed after ${MAX_USER_RETRY_ROUNDS} retry rounds`,\n\t\t);\n\t};\n\n\treturn (async () => {\n\t\ttry {\n\t\t\tconst result = await executeWithRetry();\n\n\t\t\tawait logToolExecutionAudit(\n\t\t\t\tauditLogger,\n\t\t\t\ttoolCall.name,\n\t\t\t\tsanitizedExecutionArgs,\n\t\t\t\tresult.isError ? \"failure\" : \"success\",\n\t\t\t\tclock.now() - startTime,\n\t\t\t);\n\n\t\t\tsafetyMiddleware.postExecution(\n\t\t\t\ttoolCall.name,\n\t\t\t\tvalidatedArgs,\n\t\t\t\t!result.isError,\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\tadaptiveThresholds.recordObservation(\n\t\t\t\tMETRICS.FAILURE_RATE,\n\t\t\t\tresult.isError ? 1 : 0,\n\t\t\t);\n\n\t\t\tconst toolResultMsg: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\" as const,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\tcontent: result.content,\n\t\t\t\tdetails: result.details,\n\t\t\t\tisError: result.isError || false,\n\t\t\t\ttimestamp: clock.now(),\n\t\t\t};\n\t\t\tattachApprovalRequestId(toolResultMsg);\n\n\t\t\tif (hookService && !result.isError) {\n\t\t\t\tconst postHookResult = await hookService.runPostToolUseHooks(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\tif (postHookResult.additionalContext) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook context]: ${postHookResult.additionalContext}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tif (postHookResult.preventContinuation) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook stop]: ${postHookResult.stopReason ?? \"Hook requested stop\"}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\ttoolResultMsg.isError = true;\n\t\t\t\t}\n\t\t\t\tif (postHookResult.assertions?.length || postHookResult.evaluation) {\n\t\t\t\t\tconst mergedDetails: Record<string, unknown> =\n\t\t\t\t\t\ttoolResultMsg.details && typeof toolResultMsg.details === \"object\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...(toolResultMsg.details as Record<string, unknown>),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {};\n\t\t\t\t\tif (postHookResult.evaluation) {\n\t\t\t\t\t\tmergedDetails.evaluation = postHookResult.evaluation;\n\t\t\t\t\t}\n\t\t\t\t\tif (postHookResult.assertions?.length) {\n\t\t\t\t\t\tmergedDetails.assertions = postHookResult.assertions;\n\t\t\t\t\t}\n\t\t\t\t\ttoolResultMsg.details = mergedDetails as typeof toolResultMsg.details;\n\t\t\t\t}\n\n\t\t\t\tconst evalHookResult = await hookService.runEvalGateHooks(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\n\t\t\t\tif (evalHookResult.additionalContext) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook context]: ${evalHookResult.additionalContext}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\tif (evalHookResult.assertions?.length || evalHookResult.evaluation) {\n\t\t\t\t\tconst mergedDetails: Record<string, unknown> =\n\t\t\t\t\t\ttoolResultMsg.details && typeof toolResultMsg.details === \"object\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t...(toolResultMsg.details as Record<string, unknown>),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {};\n\t\t\t\t\tif (\n\t\t\t\t\t\tevalHookResult.evaluation &&\n\t\t\t\t\t\tObject.keys(evalHookResult.evaluation).length > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tmergedDetails.evaluation = evalHookResult.evaluation;\n\t\t\t\t\t}\n\t\t\t\t\tif (evalHookResult.assertions?.length) {\n\t\t\t\t\t\tmergedDetails.assertions = evalHookResult.assertions;\n\t\t\t\t\t}\n\t\t\t\t\ttoolResultMsg.details = mergedDetails as typeof toolResultMsg.details;\n\t\t\t\t}\n\n\t\t\t\tif (evalHookResult.preventContinuation) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook stop]: ${evalHookResult.stopReason ?? \"Hook requested stop\"}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\ttoolResultMsg.isError = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst observed =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"observe\"\n\t\t\t\t\t? await toolExecutionBridge.recordObservation(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan as ObserveToolExecutionPlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\tconst governedOutput =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"governed\"\n\t\t\t\t\t? await toolExecutionBridge.recordGovernedOutput(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tclock.now() - startTime,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tmessage: toolResultMsg,\n\t\t\t\tisError: toolResultMsg.isError,\n\t\t\t\t...withLocalApprovalMetadata(\n\t\t\t\t\tbuildObservedResultMetadata(\n\t\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\t\tobserved ?? governedOutput,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t} catch (error: unknown) {\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst baseErrorMessage = getErrorMessage(error);\n\t\t\tconst formattedMessage = formatToolErrorMessage(error);\n\n\t\t\tawait logToolExecutionAudit(\n\t\t\t\tauditLogger,\n\t\t\t\ttoolCall.name,\n\t\t\t\tsafetyMiddleware.sanitizeForLogging(validatedArgs),\n\t\t\t\t\"failure\",\n\t\t\t\tclock.now() - startTime,\n\t\t\t\tbaseErrorMessage,\n\t\t\t);\n\n\t\t\tsafetyMiddleware.postExecution(toolCall.name, validatedArgs, false, true);\n\t\t\tadaptiveThresholds.recordObservation(METRICS.FAILURE_RATE, 1);\n\n\t\t\tconst toolResultMsg: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\" as const,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: formattedMessage,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: error instanceof ToolError ? error.details : undefined,\n\t\t\t\tisError: true,\n\t\t\t\ttimestamp: clock.now(),\n\t\t\t};\n\t\t\tattachApprovalRequestId(toolResultMsg);\n\n\t\t\tif (hookService) {\n\t\t\t\tconst failureHookResult = await hookService.runPostToolUseFailureHooks(\n\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\tbaseErrorMessage,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\tif (failureHookResult.additionalContext) {\n\t\t\t\t\ttoolResultMsg.content = [\n\t\t\t\t\t\t...toolResultMsg.content,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: `\\n[Hook context]: ${failureHookResult.additionalContext}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst observed =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"observe\"\n\t\t\t\t\t? await toolExecutionBridge.recordObservation(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan as ObserveToolExecutionPlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\tconst governedOutput =\n\t\t\t\ttoolExecutionBridge && toolExecutionBridgePlan?.kind === \"governed\"\n\t\t\t\t\t? await toolExecutionBridge.recordGovernedOutput(\n\t\t\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\t\t\ttoolResultMsg,\n\t\t\t\t\t\t\tclock.now() - startTime,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tmessage: toolResultMsg,\n\t\t\t\tisError: true,\n\t\t\t\t...withLocalApprovalMetadata(\n\t\t\t\t\tbuildObservedResultMetadata(\n\t\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\t\tobserved ?? governedOutput,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t})();\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { AgentEvent, ToolSchedulingDecision } from "../types.js";
2
+ export type ToolPhaseSummaryEvent = Extract<AgentEvent, {
3
+ type: "tool_phase_summary";
4
+ }>;
5
+ export declare function buildToolPhaseSummaryEvent(decisionsByToolCall: Iterable<ToolSchedulingDecision>): ToolPhaseSummaryEvent | undefined;
6
+ //# sourceMappingURL=tool-phase-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-phase-summary.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/tool-phase-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAC1C,UAAU,EACV;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAC9B,CAAC;AAEF,wBAAgB,0BAA0B,CACzC,mBAAmB,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACnD,qBAAqB,GAAG,SAAS,CAuInC"}
@@ -0,0 +1,99 @@
1
+ export function buildToolPhaseSummaryEvent(decisionsByToolCall) {
2
+ const rawDecisions = [...decisionsByToolCall].sort((left, right) => left.emittedIndex - right.emittedIndex);
3
+ if (rawDecisions.length === 0) {
4
+ return undefined;
5
+ }
6
+ const waveCounts = new Map();
7
+ for (const decision of rawDecisions) {
8
+ if (decision.waveIndex !== undefined) {
9
+ waveCounts.set(decision.waveIndex, (waveCounts.get(decision.waveIndex) ?? 0) + 1);
10
+ }
11
+ }
12
+ const decisions = rawDecisions.map((decision) => {
13
+ const isSingleModelToolCall = rawDecisions.length === 1;
14
+ const waveSize = decision.waveIndex !== undefined
15
+ ? (waveCounts.get(decision.waveIndex) ?? 1)
16
+ : 1;
17
+ const outcome = decision.cacheHit === true
18
+ ? "cached"
19
+ : decision.decision === "skipped"
20
+ ? "skipped"
21
+ : decision.decision === "delayed" ||
22
+ decision.blockedByMutation === true
23
+ ? "delayed"
24
+ : decision.decision === "parallelized" ||
25
+ (waveSize > 1 && decision.decision === "scheduled")
26
+ ? "parallelized"
27
+ : "serialized";
28
+ const reason = outcome === "cached"
29
+ ? "cache_hit"
30
+ : decision.blockedByMutation === true
31
+ ? decision.reason
32
+ : decision.reason === "workflow_state_serialized"
33
+ ? "workflow_state_serialized"
34
+ : decision.mcpOptIn === true
35
+ ? "mcp_parallel_opt_in"
36
+ : decision.reason.startsWith("read_only")
37
+ ? outcome === "parallelized"
38
+ ? "read_only_parallel_safe"
39
+ : isSingleModelToolCall
40
+ ? "single_read_only_call"
41
+ : decision.reason
42
+ : decision.reason.startsWith("path_scoped_mutation")
43
+ ? "path_scoped_mutation"
44
+ : decision.reason;
45
+ return {
46
+ toolCallId: decision.callId,
47
+ toolName: decision.toolName,
48
+ emittedIndex: decision.emittedIndex,
49
+ outcome,
50
+ decision: outcome,
51
+ reason,
52
+ waveIndex: decision.waveIndex !== undefined
53
+ ? Math.max(0, decision.waveIndex - 1)
54
+ : undefined,
55
+ waitMs: Math.max(0, Math.round(decision.schedulerWaitMs ?? 0)),
56
+ schedulerWaitMs: Math.max(0, Math.round(decision.schedulerWaitMs ?? 0)),
57
+ mcpOptIn: decision.mcpOptIn,
58
+ cacheHit: decision.cacheHit,
59
+ blockedByMutation: decision.blockedByMutation,
60
+ };
61
+ });
62
+ const parallelizedCallCount = decisions.filter((decision) => decision.outcome === "parallelized").length;
63
+ const delayedCallCount = decisions.filter((decision) => decision.outcome === "delayed").length;
64
+ const batchShapingFeedback = decisions.length === 1 && decisions[0]?.reason === "single_read_only_call"
65
+ ? {
66
+ avoidableSingleton: true,
67
+ reason: "single_read_only_call",
68
+ hint: "When you need several independent reads or searches, emit them together in one assistant message so Maestro can batch them safely.",
69
+ }
70
+ : undefined;
71
+ const serializationReasons = Object.fromEntries([...decisions]
72
+ .filter((decision) => decision.outcome === "serialized" || decision.outcome === "delayed")
73
+ .reduce((counts, decision) => {
74
+ counts.set(decision.reason, (counts.get(decision.reason) ?? 0) + 1);
75
+ return counts;
76
+ }, new Map()));
77
+ return {
78
+ type: "tool_phase_summary",
79
+ modelToolCallCount: rawDecisions.length,
80
+ modelEmittedToolCallCount: rawDecisions.length,
81
+ schedulableWaveCount: waveCounts.size,
82
+ parallelizedCallCount,
83
+ actuallyParallelizedCallCount: parallelizedCallCount,
84
+ serializedCallCount: decisions.filter((decision) => decision.outcome === "serialized" || decision.outcome === "delayed").length,
85
+ delayedCallCount,
86
+ blockedByMutationCount: decisions.filter((decision) => decision.blockedByMutation === true).length,
87
+ mcpOptInCallCount: decisions.filter((decision) => decision.mcpOptIn === true).length,
88
+ mcpOptInUseCount: decisions.filter((decision) => decision.mcpOptIn === true)
89
+ .length,
90
+ cacheHitCount: decisions.filter((decision) => decision.cacheHit === true)
91
+ .length,
92
+ totalToolWaitMs: decisions.reduce((total, decision) => total + decision.waitMs, 0),
93
+ toolWaitTimeMs: decisions.reduce((total, decision) => total + decision.waitMs, 0),
94
+ serializationReasons,
95
+ decisions,
96
+ batchShapingFeedback,
97
+ };
98
+ }
99
+ //# sourceMappingURL=tool-phase-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-phase-summary.js","sourceRoot":"","sources":["../../../src/agent/transport/tool-phase-summary.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentEvent, ToolSchedulingDecision } from \"../types.js\";\n\nexport type ToolPhaseSummaryEvent = Extract<\n\tAgentEvent,\n\t{ type: \"tool_phase_summary\" }\n>;\n\nexport function buildToolPhaseSummaryEvent(\n\tdecisionsByToolCall: Iterable<ToolSchedulingDecision>,\n): ToolPhaseSummaryEvent | undefined {\n\tconst rawDecisions = [...decisionsByToolCall].sort(\n\t\t(left, right) => left.emittedIndex - right.emittedIndex,\n\t);\n\tif (rawDecisions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst waveCounts = new Map<number, number>();\n\tfor (const decision of rawDecisions) {\n\t\tif (decision.waveIndex !== undefined) {\n\t\t\twaveCounts.set(\n\t\t\t\tdecision.waveIndex,\n\t\t\t\t(waveCounts.get(decision.waveIndex) ?? 0) + 1,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst decisions: ToolPhaseSummaryEvent[\"decisions\"] = rawDecisions.map(\n\t\t(decision) => {\n\t\t\tconst isSingleModelToolCall = rawDecisions.length === 1;\n\t\t\tconst waveSize =\n\t\t\t\tdecision.waveIndex !== undefined\n\t\t\t\t\t? (waveCounts.get(decision.waveIndex) ?? 1)\n\t\t\t\t\t: 1;\n\t\t\tconst outcome =\n\t\t\t\tdecision.cacheHit === true\n\t\t\t\t\t? \"cached\"\n\t\t\t\t\t: decision.decision === \"skipped\"\n\t\t\t\t\t\t? \"skipped\"\n\t\t\t\t\t\t: decision.decision === \"delayed\" ||\n\t\t\t\t\t\t\t\tdecision.blockedByMutation === true\n\t\t\t\t\t\t\t? \"delayed\"\n\t\t\t\t\t\t\t: decision.decision === \"parallelized\" ||\n\t\t\t\t\t\t\t\t\t(waveSize > 1 && decision.decision === \"scheduled\")\n\t\t\t\t\t\t\t\t? \"parallelized\"\n\t\t\t\t\t\t\t\t: \"serialized\";\n\t\t\tconst reason =\n\t\t\t\toutcome === \"cached\"\n\t\t\t\t\t? \"cache_hit\"\n\t\t\t\t\t: decision.blockedByMutation === true\n\t\t\t\t\t\t? decision.reason\n\t\t\t\t\t\t: decision.reason === \"workflow_state_serialized\"\n\t\t\t\t\t\t\t? \"workflow_state_serialized\"\n\t\t\t\t\t\t\t: decision.mcpOptIn === true\n\t\t\t\t\t\t\t\t? \"mcp_parallel_opt_in\"\n\t\t\t\t\t\t\t\t: decision.reason.startsWith(\"read_only\")\n\t\t\t\t\t\t\t\t\t? outcome === \"parallelized\"\n\t\t\t\t\t\t\t\t\t\t? \"read_only_parallel_safe\"\n\t\t\t\t\t\t\t\t\t\t: isSingleModelToolCall\n\t\t\t\t\t\t\t\t\t\t\t? \"single_read_only_call\"\n\t\t\t\t\t\t\t\t\t\t\t: decision.reason\n\t\t\t\t\t\t\t\t\t: decision.reason.startsWith(\"path_scoped_mutation\")\n\t\t\t\t\t\t\t\t\t\t? \"path_scoped_mutation\"\n\t\t\t\t\t\t\t\t\t\t: decision.reason;\n\t\t\treturn {\n\t\t\t\ttoolCallId: decision.callId,\n\t\t\t\ttoolName: decision.toolName,\n\t\t\t\temittedIndex: decision.emittedIndex,\n\t\t\t\toutcome,\n\t\t\t\tdecision: outcome,\n\t\t\t\treason,\n\t\t\t\twaveIndex:\n\t\t\t\t\tdecision.waveIndex !== undefined\n\t\t\t\t\t\t? Math.max(0, decision.waveIndex - 1)\n\t\t\t\t\t\t: undefined,\n\t\t\t\twaitMs: Math.max(0, Math.round(decision.schedulerWaitMs ?? 0)),\n\t\t\t\tschedulerWaitMs: Math.max(0, Math.round(decision.schedulerWaitMs ?? 0)),\n\t\t\t\tmcpOptIn: decision.mcpOptIn,\n\t\t\t\tcacheHit: decision.cacheHit,\n\t\t\t\tblockedByMutation: decision.blockedByMutation,\n\t\t\t};\n\t\t},\n\t);\n\n\tconst parallelizedCallCount = decisions.filter(\n\t\t(decision) => decision.outcome === \"parallelized\",\n\t).length;\n\tconst delayedCallCount = decisions.filter(\n\t\t(decision) => decision.outcome === \"delayed\",\n\t).length;\n\tconst batchShapingFeedback =\n\t\tdecisions.length === 1 && decisions[0]?.reason === \"single_read_only_call\"\n\t\t\t? {\n\t\t\t\t\tavoidableSingleton: true,\n\t\t\t\t\treason: \"single_read_only_call\",\n\t\t\t\t\thint: \"When you need several independent reads or searches, emit them together in one assistant message so Maestro can batch them safely.\",\n\t\t\t\t}\n\t\t\t: undefined;\n\tconst serializationReasons = Object.fromEntries(\n\t\t[...decisions]\n\t\t\t.filter(\n\t\t\t\t(decision) =>\n\t\t\t\t\tdecision.outcome === \"serialized\" || decision.outcome === \"delayed\",\n\t\t\t)\n\t\t\t.reduce((counts, decision) => {\n\t\t\t\tcounts.set(decision.reason, (counts.get(decision.reason) ?? 0) + 1);\n\t\t\t\treturn counts;\n\t\t\t}, new Map<string, number>()),\n\t);\n\n\treturn {\n\t\ttype: \"tool_phase_summary\",\n\t\tmodelToolCallCount: rawDecisions.length,\n\t\tmodelEmittedToolCallCount: rawDecisions.length,\n\t\tschedulableWaveCount: waveCounts.size,\n\t\tparallelizedCallCount,\n\t\tactuallyParallelizedCallCount: parallelizedCallCount,\n\t\tserializedCallCount: decisions.filter(\n\t\t\t(decision) =>\n\t\t\t\tdecision.outcome === \"serialized\" || decision.outcome === \"delayed\",\n\t\t).length,\n\t\tdelayedCallCount,\n\t\tblockedByMutationCount: decisions.filter(\n\t\t\t(decision) => decision.blockedByMutation === true,\n\t\t).length,\n\t\tmcpOptInCallCount: decisions.filter(\n\t\t\t(decision) => decision.mcpOptIn === true,\n\t\t).length,\n\t\tmcpOptInUseCount: decisions.filter((decision) => decision.mcpOptIn === true)\n\t\t\t.length,\n\t\tcacheHitCount: decisions.filter((decision) => decision.cacheHit === true)\n\t\t\t.length,\n\t\ttotalToolWaitMs: decisions.reduce(\n\t\t\t(total, decision) => total + decision.waitMs,\n\t\t\t0,\n\t\t),\n\t\ttoolWaitTimeMs: decisions.reduce(\n\t\t\t(total, decision) => total + decision.waitMs,\n\t\t\t0,\n\t\t),\n\t\tserializationReasons,\n\t\tdecisions,\n\t\tbatchShapingFeedback,\n\t};\n}\n"]}
@@ -24,6 +24,7 @@ export type ToolSafetyVerdict = {
24
24
  toolDef: AgentTool;
25
25
  events: AgentEvent[];
26
26
  sanitizedExecutionArgs: Record<string, unknown>;
27
+ approvalRequestId?: string;
27
28
  toolExecutionBridgePlan?: ToolExecutionBridgePlan;
28
29
  };
29
30
  export interface ToolSafetyContext {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-safety-pipeline.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/tool-safety-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-safety-pipeline.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/tool-safety-pipeline.ts"],"names":[],"mappings":"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"}
@@ -412,6 +412,7 @@ export async function* evaluateToolSafety(ctx) {
412
412
  };
413
413
  }
414
414
  let toolExecutionBridgePlan;
415
+ let approvalRequestId;
415
416
  let platformApprovalRequest;
416
417
  let platformApprovalResolved = false;
417
418
  const bridgeArgs = safetyMiddleware.sanitizeForLogging(effectiveToolCall.arguments);
@@ -599,11 +600,13 @@ export async function* evaluateToolSafety(ctx) {
599
600
  const shouldEmitEvents = approvalService.requiresUserInteraction();
600
601
  const decisionPromise = approvalService.requestApproval(request, signal, clock);
601
602
  const registrationMetadata = await waitForPendingApprovalRegistration(approvalService, request.id, decisionPromise, signal);
602
- recordMaestroApprovalHit({
603
- approval_request_id: platformApprovalRequest?.id ??
603
+ approvalRequestId =
604
+ platformApprovalRequest?.id ??
604
605
  toolExecutionBridgePlan?.metadata.approvalRequestId ??
605
606
  registrationMetadata?.remoteApprovalRequestId ??
606
- request.id,
607
+ request.id;
608
+ recordMaestroApprovalHit({
609
+ approval_request_id: approvalRequestId,
607
610
  action: request.actionDescription ?? request.summaryLabel ?? request.toolName,
608
611
  command: typeof sanitizedApprovalArgs.command === "string"
609
612
  ? sanitizedApprovalArgs.command
@@ -682,7 +685,8 @@ export async function* evaluateToolSafety(ctx) {
682
685
  };
683
686
  const deniedEvents = recordEvents(emitToolResult(deniedResult, toolCall, true, {
684
687
  toolExecutionId: toolExecutionBridgePlan?.metadata.toolExecutionId,
685
- approvalRequestId: toolExecutionBridgePlan?.metadata.approvalRequestId,
688
+ approvalRequestId: toolExecutionBridgePlan?.metadata.approvalRequestId ??
689
+ approvalRequestId,
686
690
  }));
687
691
  for (const event of deniedEvents) {
688
692
  yield event;
@@ -731,6 +735,7 @@ export async function* evaluateToolSafety(ctx) {
731
735
  toolDef,
732
736
  events,
733
737
  sanitizedExecutionArgs,
738
+ ...(approvalRequestId ? { approvalRequestId } : {}),
734
739
  ...(toolExecutionBridgePlan ? { toolExecutionBridgePlan } : {}),
735
740
  },
736
741
  rateLimitUpdate: rateLimitResult.updatedState,