@evalops/maestro 0.10.31 → 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.
- package/dist/agent/transport/tool-execution.d.ts +1 -0
- package/dist/agent/transport/tool-execution.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution.js +23 -3
- package/dist/agent/transport/tool-execution.js.map +1 -1
- package/dist/agent/transport/tool-phase-summary.d.ts +6 -0
- package/dist/agent/transport/tool-phase-summary.d.ts.map +1 -0
- package/dist/agent/transport/tool-phase-summary.js +99 -0
- package/dist/agent/transport/tool-phase-summary.js.map +1 -0
- package/dist/agent/transport/tool-safety-pipeline.d.ts +1 -0
- package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.js +9 -4
- package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +4 -99
- package/dist/agent/transport.js.map +1 -1
- package/dist/cli/commands/a2a/args.d.ts +13 -0
- package/dist/cli/commands/a2a/args.d.ts.map +1 -0
- package/dist/cli/commands/a2a/args.js +327 -0
- package/dist/cli/commands/a2a/args.js.map +1 -0
- package/dist/cli/commands/a2a/discovery.d.ts +40 -0
- package/dist/cli/commands/a2a/discovery.d.ts.map +1 -0
- package/dist/cli/commands/a2a/discovery.js +150 -0
- package/dist/cli/commands/a2a/discovery.js.map +1 -0
- package/dist/cli/commands/a2a.d.ts +2 -5
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +4 -474
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli.js +1801 -1528
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/server/app-context.d.ts +7 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/chat-ws.d.ts.map +1 -1
- package/dist/server/handlers/chat-ws.js +42 -24
- package/dist/server/handlers/chat-ws.js.map +1 -1
- package/dist/server/handlers/chat.d.ts.map +1 -1
- package/dist/server/handlers/chat.js +54 -35
- package/dist/server/handlers/chat.js.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.js +7 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +134 -15
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/server-utils.d.ts.map +1 -1
- package/dist/server/server-utils.js +12 -0
- package/dist/server/server-utils.js.map +1 -1
- package/dist/server/session-timeline.d.ts.map +1 -1
- package/dist/server/session-timeline.js +13 -0
- package/dist/server/session-timeline.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +30 -0
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +96 -5
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/tools/find.d.ts +2 -0
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +25 -12
- package/dist/tools/find.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +6 -2
|
@@ -31,6 +31,7 @@ export interface ToolExecutionContext {
|
|
|
31
31
|
clientToolService?: ClientToolExecutionService;
|
|
32
32
|
toolExecutionBridge?: PlatformToolExecutionBridge;
|
|
33
33
|
toolExecutionBridgePlan?: ToolExecutionBridgePlan;
|
|
34
|
+
approvalRequestId?: string;
|
|
34
35
|
toolUpdateQueue: ToolUpdateQueue;
|
|
35
36
|
/** Pre-created client tool execution promise (if applicable) */
|
|
36
37
|
clientToolExecPromise?: Promise<{
|
|
@@ -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;
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAe5E,OAAO,EAIN,2BAA2B,GAC3B,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAEN,qBAAqB,GACrB,MAAM,sBAAsB,CAAC;AAqC9B,MAAM,yBAAyB,GAA8B;IAC5D,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,GAAG;IACnB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,CAAC;CACpB,CAAC;AAEF,wEAAwE;AACxE,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,MAAM,0BAA0B,GAAG;IAClC,SAAS;IACT,WAAW;IACX,YAAY;IACZ,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,cAAc;IACd,WAAW;CACX,CAAC;AAEF,MAAM,8BAA8B,GAAG;IACtC,SAAS;IACT,YAAY;IACZ,WAAW;IACX,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,cAAc;IACd,WAAW;IACX,QAAQ;CACR,CAAC;AAEF,SAAS,sBAAsB,CAC9B,MAAwB;IAExB,OAAO;QACN,cAAc,EACb,MAAM,EAAE,cAAc,IAAI,yBAAyB,CAAC,cAAc;QACnE,cAAc,EACb,MAAM,EAAE,cAAc,IAAI,yBAAyB,CAAC,cAAc;QACnE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,yBAAyB,CAAC,UAAU;QACtE,iBAAiB,EAChB,MAAM,EAAE,iBAAiB,IAAI,yBAAyB,CAAC,iBAAiB;KACzE,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GACZ,KAAK,YAAY,KAAK;QACrB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE;QAC7B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,IACC,8BAA8B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC1E,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,0BAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,WAAmB;IAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAExC,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACrE,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACtE,CAAC;IACD,IACC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB,CAAC;QACF,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACnE,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACzE,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACxD,CAAC;IACD,IACC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC3B,CAAC;QACF,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,WAAW,oBAAoB,KAAK;SAC5C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,YAAoB;IAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,yBAAyB,CAAC;IAClC,CAAC;IACD,MAAM,SAAS,GACd,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,OAAO,sBAAsB,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,MAAoB;IACxD,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;QAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACzC,GAAyB;IAEzB,MAAM,EACL,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,aAAa,EACb,sBAAsB,EACtB,GAAG,EACH,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,GACvB,GAAG,GAAG,CAAC;IAER,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACpE,MAAM,kBAAkB,GACvB,IAAI,CAAC,UAAU,KAAK,SAAS;QAC7B,IAAI,CAAC,YAAY,KAAK,SAAS;QAC/B,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC;IACzD,MAAM,gBAAgB,GACrB,CAAC,YAAY;QACb,CAAC,kBAAkB;QACnB,mBAAmB,CAAC,cAAc,GAAG,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,YAAY;QACnC,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,kBAAkB;YACnB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC,cAAc,CAAC,GAAG,CAAC;YAC7D,CAAC,CAAC,gBAAgB;gBACjB,CAAC,CAAC,mBAAmB,CAAC,cAAc,GAAG,CAAC;gBACxC,CAAC,CAAC,CAAC,CAAC;IACP,MAAM,UAAU,GAAG,kBAAkB;QACpC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,mBAAmB,CAAC,cAAc,CAAC;QAC3D,CAAC,CAAC,mBAAmB,CAAC,cAAc,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAE/D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,QAAQ,GAAG,CAAC,aAA8B,EAAE,EAAE;QACnD,eAAe,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,uBAAuB;YAC7B,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,IAAI,EAAE,sBAAsB;YAC5B,aAAa;SACb,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK,IAA8B,EAAE;QAC5D,IAAI,IAAI,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACd,0DAA0D,IAAI,CAAC,IAAI,GAAG,CACtE,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC;YACxC,OAAO;gBACN,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,SAAS;aACC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,OAAO,CACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CACnE,CAAC;QACH,CAAC;QACD,OAAO,2BAA2B,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAC1D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CACnE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,IAA8B,EAAE;QAC7D,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,OAAO,eAAe,GAAG,qBAAqB,EAAE,CAAC;YAChD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,OAAO,GAAG,UAAU,CAAC;YACzB,IAAI,SAAkB,CAAC;YAEvB,OAAO,OAAO,GAAG,eAAe,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,CAAC;gBACb,aAAa,IAAI,CAAC,CAAC;gBACnB,IAAI,CAAC;oBACJ,OAAO,MAAM,eAAe,EAAE,CAAC;gBAChC,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACzB,SAAS,GAAG,KAAK,CAAC;oBAClB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;wBACrB,MAAM,KAAK,CAAC;oBACb,CAAC;oBACD,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,cAAc,GAAG,OAAO,IAAI,eAAe,CAAC;oBAClD,IAAI,CAAC,SAAS,IAAI,cAAc,EAAE,CAAC;wBAClC,MAAM;oBACP,CAAC;oBACD,IAAI,kBAAkB,EAAE,CAAC;wBACxB,iCAAiC;wBACjC,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC3C,CAAC;yBAAM,CAAC;wBACP,8CAA8C;wBAC9C,MAAM,UAAU,GAAG,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACrB,UAAU,IAAI,OAAO,EACrB,mBAAmB,CAAC,UAAU,CAC9B,CAAC;wBACF,OAAO,GAAG,UAAU;4BACnB,CAAC,CAAC,mBAAmB,CAAC,cAAc;4BACpC,CAAC,CAAC,IAAI,CAAC,GAAG,CACR,OAAO,GAAG,mBAAmB,CAAC,iBAAiB,EAC/C,mBAAmB,CAAC,UAAU,CAC9B,CAAC;wBACJ,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACtC,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,gBAAgB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpD,MAAM,SAAS,CAAC;YACjB,CAAC;YACD,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,OAAO,GAAqB;gBACjC,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,UAAU,aAAa,EAAE;gBAC3C,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,IAAI,EAAE,sBAAsB;gBAC5B,YAAY;gBACZ,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,iBAAiB,CAAC,YAAY,CAAC;aACxC,CAAC;YACF,IAAI,gBAAgB,CAAC,uBAAuB,EAAE,EAAE,CAAC;gBAChD,eAAe,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO;iBACP,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GACb,MAAM,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACzD,IAAI,gBAAgB,CAAC,uBAAuB,EAAE,EAAE,CAAC;gBAChD,eAAe,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO;oBACP,QAAQ;iBACR,CAAC,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBACjC,IAAI,YAAY,EAAE,CAAC;oBAClB,mEAAmE;oBACnE,wEAAwE;oBACxE,MAAM,SAAS,CAAC;gBACjB,CAAC;gBACD,eAAe,IAAI,CAAC,CAAC;gBACrB,SAAS;YACV,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,oBAAoB,CAAC,CAAC;gBACtE,UAAU,CAAC,IAAI,GAAG,YAAY,CAAC;gBAC/B,MAAM,UAAU,CAAC;YAClB,CAAC;YACD,MAAM,SAAS,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CACd,SAAS,QAAQ,CAAC,IAAI,kBAAkB,qBAAqB,eAAe,CAC5E,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,IAAI,EAAE;QAClB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAExC,MAAM,qBAAqB,CAC1B,WAAW,EACX,QAAQ,CAAC,IAAI,EACb,sBAAsB,EACtB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACtC,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC;YAEF,gBAAgB,CAAC,aAAa,CAC7B,QAAQ,CAAC,IAAI,EACb,aAAa,EACb,CAAC,MAAM,CAAC,OAAO,EACf,IAAI,CACJ,CAAC;YAEF,kBAAkB,CAAC,iBAAiB,CACnC,OAAO,CAAC,YAAY,EACpB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACtB,CAAC;YAEF,MAAM,aAAa,GAAsB;gBACxC,IAAI,EAAE,YAAqB;gBAC3B,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;gBAChC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,IAAI,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,mBAAmB,CAC3D,iBAAiB,EACjB,aAAa,EACb,MAAM,CACN,CAAC;gBACF,IAAI,cAAc,CAAC,iBAAiB,EAAE,CAAC;oBACtC,aAAa,CAAC,OAAO,GAAG;wBACvB,GAAG,aAAa,CAAC,OAAO;wBACxB;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,qBAAqB,cAAc,CAAC,iBAAiB,EAAE;yBAC7D;qBACD,CAAC;gBACH,CAAC;gBACD,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;oBACxC,aAAa,CAAC,OAAO,GAAG;wBACvB,GAAG,aAAa,CAAC,OAAO;wBACxB;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,kBAAkB,cAAc,CAAC,UAAU,IAAI,qBAAqB,EAAE;yBAC5E;qBACD,CAAC;oBACF,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC9B,CAAC;gBACD,IAAI,cAAc,CAAC,UAAU,EAAE,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;oBACpE,MAAM,aAAa,GAClB,aAAa,CAAC,OAAO,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ;wBACjE,CAAC,CAAC;4BACA,GAAI,aAAa,CAAC,OAAmC;yBACrD;wBACF,CAAC,CAAC,EAAE,CAAC;oBACP,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;wBAC/B,aAAa,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;oBACtD,CAAC;oBACD,IAAI,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;wBACvC,aAAa,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;oBACtD,CAAC;oBACD,aAAa,CAAC,OAAO,GAAG,aAA6C,CAAC;gBACvE,CAAC;gBAED,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,gBAAgB,CACxD,iBAAiB,EACjB,aAAa,EACb,MAAM,CACN,CAAC;gBAEF,IAAI,cAAc,CAAC,iBAAiB,EAAE,CAAC;oBACtC,aAAa,CAAC,OAAO,GAAG;wBACvB,GAAG,aAAa,CAAC,OAAO;wBACxB;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,qBAAqB,cAAc,CAAC,iBAAiB,EAAE;yBAC7D;qBACD,CAAC;gBACH,CAAC;gBAED,IAAI,cAAc,CAAC,UAAU,EAAE,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;oBACpE,MAAM,aAAa,GAClB,aAAa,CAAC,OAAO,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ;wBACjE,CAAC,CAAC;4BACA,GAAI,aAAa,CAAC,OAAmC;yBACrD;wBACF,CAAC,CAAC,EAAE,CAAC;oBACP,IACC,cAAc,CAAC,UAAU;wBACzB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAChD,CAAC;wBACF,aAAa,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;oBACtD,CAAC;oBACD,IAAI,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;wBACvC,aAAa,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;oBACtD,CAAC;oBACD,aAAa,CAAC,OAAO,GAAG,aAA6C,CAAC;gBACvE,CAAC;gBAED,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;oBACxC,aAAa,CAAC,OAAO,GAAG;wBACvB,GAAG,aAAa,CAAC,OAAO;wBACxB;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,kBAAkB,cAAc,CAAC,UAAU,IAAI,qBAAqB,EAAE;yBAC5E;qBACD,CAAC;oBACF,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC9B,CAAC;YACF,CAAC;YAED,MAAM,QAAQ,GACb,mBAAmB,IAAI,uBAAuB,EAAE,IAAI,KAAK,SAAS;gBACjE,CAAC,CAAC,MAAM,mBAAmB,CAAC,iBAAiB,CAC3C,uBAAmD,EACnD,aAAa,EACb,MAAM,CACN;gBACF,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,cAAc,GACnB,mBAAmB,IAAI,uBAAuB,EAAE,IAAI,KAAK,UAAU;gBAClE,CAAC,CAAC,MAAM,mBAAmB,CAAC,oBAAoB,CAC9C,uBAAuB,EACvB,aAAa,EACb,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,EACvB,MAAM,CACN;gBACF,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO;gBACN,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,GAAG,2BAA2B,CAC7B,uBAAuB,EACvB,QAAQ,IAAI,cAAc,CAC1B;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3D,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAEvD,MAAM,qBAAqB,CAC1B,WAAW,EACX,QAAQ,CAAC,IAAI,EACb,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAClD,SAAS,EACT,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,EACvB,gBAAgB,CAChB,CAAC;YAEF,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1E,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YAE9D,MAAM,aAAa,GAAsB;gBACxC,IAAI,EAAE,YAAqB;gBAC3B,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gBAAgB;qBACtB;iBACD;gBACD,OAAO,EAAE,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBAC/D,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC,0BAA0B,CACrE,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,CACN,CAAC;gBACF,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;oBACzC,aAAa,CAAC,OAAO,GAAG;wBACvB,GAAG,aAAa,CAAC,OAAO;wBACxB;4BACC,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,qBAAqB,iBAAiB,CAAC,iBAAiB,EAAE;yBAChE;qBACD,CAAC;gBACH,CAAC;YACF,CAAC;YAED,MAAM,QAAQ,GACb,mBAAmB,IAAI,uBAAuB,EAAE,IAAI,KAAK,SAAS;gBACjE,CAAC,CAAC,MAAM,mBAAmB,CAAC,iBAAiB,CAC3C,uBAAmD,EACnD,aAAa,EACb,MAAM,CACN;gBACF,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,cAAc,GACnB,mBAAmB,IAAI,uBAAuB,EAAE,IAAI,KAAK,UAAU;gBAClE,CAAC,CAAC,MAAM,mBAAmB,CAAC,oBAAoB,CAC9C,uBAAuB,EACvB,aAAa,EACb,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,EACvB,MAAM,CACN;gBACF,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO;gBACN,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,IAAI;gBACb,GAAG,2BAA2B,CAC7B,uBAAuB,EACvB,QAAQ,IAAI,cAAc,CAC1B;aACD,CAAC;QACH,CAAC;IACF,CAAC,CAAC,EAAE,CAAC;AACN,CAAC","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
|
-
|
|
603
|
-
|
|
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,
|