@namzu/sdk 2.0.0 → 3.0.0
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/CHANGELOG.md +2265 -0
- package/README.md +49 -53
- package/dist/__tests__/default-path-conformance.test.d.ts +2 -0
- package/dist/__tests__/default-path-conformance.test.d.ts.map +1 -0
- package/dist/__tests__/default-path-conformance.test.js +262 -0
- package/dist/__tests__/default-path-conformance.test.js.map +1 -0
- package/dist/__tests__/shipped-defaults.test.d.ts +2 -0
- package/dist/__tests__/shipped-defaults.test.d.ts.map +1 -0
- package/dist/__tests__/shipped-defaults.test.js +97 -0
- package/dist/__tests__/shipped-defaults.test.js.map +1 -0
- package/dist/advisory/__tests__/budget-enforcement.test.d.ts +2 -0
- package/dist/advisory/__tests__/budget-enforcement.test.d.ts.map +1 -0
- package/dist/advisory/__tests__/budget-enforcement.test.js +159 -0
- package/dist/advisory/__tests__/budget-enforcement.test.js.map +1 -0
- package/dist/advisory/__tests__/structured-response.test.d.ts +2 -0
- package/dist/advisory/__tests__/structured-response.test.d.ts.map +1 -0
- package/dist/advisory/__tests__/structured-response.test.js +99 -0
- package/dist/advisory/__tests__/structured-response.test.js.map +1 -0
- package/dist/advisory/budget.d.ts +15 -0
- package/dist/advisory/budget.d.ts.map +1 -0
- package/dist/advisory/budget.js +21 -0
- package/dist/advisory/budget.js.map +1 -0
- package/dist/advisory/context.d.ts +2 -0
- package/dist/advisory/context.d.ts.map +1 -1
- package/dist/advisory/context.js +16 -0
- package/dist/advisory/context.js.map +1 -1
- package/dist/advisory/executor.d.ts +14 -11
- package/dist/advisory/executor.d.ts.map +1 -1
- package/dist/advisory/executor.js +36 -24
- package/dist/advisory/executor.js.map +1 -1
- package/dist/advisory/executor.test.d.ts +8 -6
- package/dist/advisory/executor.test.d.ts.map +1 -1
- package/dist/advisory/executor.test.js +12 -8
- package/dist/advisory/executor.test.js.map +1 -1
- package/dist/advisory/index.d.ts +2 -0
- package/dist/advisory/index.d.ts.map +1 -1
- package/dist/advisory/index.js +2 -0
- package/dist/advisory/index.js.map +1 -1
- package/dist/advisory/parse.d.ts +23 -0
- package/dist/advisory/parse.d.ts.map +1 -0
- package/dist/advisory/parse.js +56 -0
- package/dist/advisory/parse.js.map +1 -0
- package/dist/agents/AbstractAgent.d.ts +48 -0
- package/dist/agents/AbstractAgent.d.ts.map +1 -1
- package/dist/agents/AbstractAgent.js +77 -0
- package/dist/agents/AbstractAgent.js.map +1 -1
- package/dist/agents/PipelineAgent.d.ts +10 -0
- package/dist/agents/PipelineAgent.d.ts.map +1 -1
- package/dist/agents/PipelineAgent.js +12 -0
- package/dist/agents/PipelineAgent.js.map +1 -1
- package/dist/agents/ReactiveAgent.d.ts +10 -0
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +40 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/RouterAgent.d.ts +10 -0
- package/dist/agents/RouterAgent.d.ts.map +1 -1
- package/dist/agents/RouterAgent.js +23 -2
- package/dist/agents/RouterAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts +11 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +23 -1
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/__tests__/idempotency-key.test.d.ts +2 -0
- package/dist/agents/__tests__/idempotency-key.test.d.ts.map +1 -0
- package/dist/agents/__tests__/idempotency-key.test.js +149 -0
- package/dist/agents/__tests__/idempotency-key.test.js.map +1 -0
- package/dist/agents/__tests__/invocation-lock.test.d.ts +2 -0
- package/dist/agents/__tests__/invocation-lock.test.d.ts.map +1 -0
- package/dist/agents/__tests__/invocation-lock.test.js +126 -0
- package/dist/agents/__tests__/invocation-lock.test.js.map +1 -0
- package/dist/agents/__tests__/reachability.test.d.ts +2 -0
- package/dist/agents/__tests__/reachability.test.d.ts.map +1 -0
- package/dist/agents/__tests__/reachability.test.js +173 -0
- package/dist/agents/__tests__/reachability.test.js.map +1 -0
- package/dist/agents/__tests__/supervisor-ledger.test.js +1 -1
- package/dist/agents/__tests__/supervisor-ledger.test.js.map +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/lock.d.ts +0 -1
- package/dist/agents/lock.d.ts.map +1 -1
- package/dist/agents/lock.js.map +1 -1
- package/dist/bridge/a2a/late-events.test.d.ts +2 -0
- package/dist/bridge/a2a/late-events.test.d.ts.map +1 -0
- package/dist/bridge/a2a/late-events.test.js +70 -0
- package/dist/bridge/a2a/late-events.test.js.map +1 -0
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +55 -3
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/a2a/mapper.test.js +1 -1
- package/dist/bridge/a2a/mapper.test.js.map +1 -1
- package/dist/bridge/a2a/message.d.ts.map +1 -1
- package/dist/bridge/a2a/message.js +5 -1
- package/dist/bridge/a2a/message.js.map +1 -1
- package/dist/bridge/sse/late-events.test.d.ts +2 -0
- package/dist/bridge/sse/late-events.test.d.ts.map +1 -0
- package/dist/bridge/sse/late-events.test.js +163 -0
- package/dist/bridge/sse/late-events.test.js.map +1 -0
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +100 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/compaction/__tests__/cleared-result-recovery.test.d.ts +2 -0
- package/dist/compaction/__tests__/cleared-result-recovery.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/cleared-result-recovery.test.js +101 -0
- package/dist/compaction/__tests__/cleared-result-recovery.test.js.map +1 -0
- package/dist/compaction/__tests__/context-window.test.d.ts +2 -0
- package/dist/compaction/__tests__/context-window.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/context-window.test.js +62 -0
- package/dist/compaction/__tests__/context-window.test.js.map +1 -0
- package/dist/compaction/__tests__/dangling.test.js +16 -5
- package/dist/compaction/__tests__/dangling.test.js.map +1 -1
- package/dist/compaction/__tests__/lossiness.test.d.ts +2 -0
- package/dist/compaction/__tests__/lossiness.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/lossiness.test.js +163 -0
- package/dist/compaction/__tests__/lossiness.test.js.map +1 -0
- package/dist/compaction/__tests__/state-across-resume.test.d.ts +2 -0
- package/dist/compaction/__tests__/state-across-resume.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/state-across-resume.test.js +88 -0
- package/dist/compaction/__tests__/state-across-resume.test.js.map +1 -0
- package/dist/compaction/__tests__/tool-result-editing.test.d.ts +2 -0
- package/dist/compaction/__tests__/tool-result-editing.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/tool-result-editing.test.js +184 -0
- package/dist/compaction/__tests__/tool-result-editing.test.js.map +1 -0
- package/dist/compaction/__tests__/trim-opens-on-user.test.d.ts +2 -0
- package/dist/compaction/__tests__/trim-opens-on-user.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/trim-opens-on-user.test.js +109 -0
- package/dist/compaction/__tests__/trim-opens-on-user.test.js.map +1 -0
- package/dist/compaction/__tests__/verifier-model.test.d.ts +2 -0
- package/dist/compaction/__tests__/verifier-model.test.d.ts.map +1 -0
- package/dist/compaction/__tests__/verifier-model.test.js +58 -0
- package/dist/compaction/__tests__/verifier-model.test.js.map +1 -0
- package/dist/compaction/context-window.d.ts +44 -0
- package/dist/compaction/context-window.d.ts.map +1 -0
- package/dist/compaction/context-window.js +97 -0
- package/dist/compaction/context-window.js.map +1 -0
- package/dist/compaction/dangling.js +48 -1
- package/dist/compaction/dangling.js.map +1 -1
- package/dist/compaction/extractor.d.ts.map +1 -1
- package/dist/compaction/extractor.js +55 -1
- package/dist/compaction/extractor.js.map +1 -1
- package/dist/compaction/index.d.ts +5 -0
- package/dist/compaction/index.d.ts.map +1 -1
- package/dist/compaction/index.js +3 -0
- package/dist/compaction/index.js.map +1 -1
- package/dist/compaction/manager.d.ts +25 -0
- package/dist/compaction/manager.d.ts.map +1 -1
- package/dist/compaction/manager.js +42 -8
- package/dist/compaction/manager.js.map +1 -1
- package/dist/compaction/managers/structured.d.ts.map +1 -1
- package/dist/compaction/managers/structured.js +7 -3
- package/dist/compaction/managers/structured.js.map +1 -1
- package/dist/compaction/retention.d.ts +15 -0
- package/dist/compaction/retention.d.ts.map +1 -0
- package/dist/compaction/retention.js +89 -0
- package/dist/compaction/retention.js.map +1 -0
- package/dist/compaction/serializer.d.ts.map +1 -1
- package/dist/compaction/serializer.js +28 -11
- package/dist/compaction/serializer.js.map +1 -1
- package/dist/compaction/tool-result-editing.d.ts +54 -0
- package/dist/compaction/tool-result-editing.d.ts.map +1 -0
- package/dist/compaction/tool-result-editing.js +164 -0
- package/dist/compaction/tool-result-editing.js.map +1 -0
- package/dist/compaction/types.d.ts +10 -0
- package/dist/compaction/types.d.ts.map +1 -1
- package/dist/compaction/verifier.d.ts +20 -1
- package/dist/compaction/verifier.d.ts.map +1 -1
- package/dist/compaction/verifier.js +11 -2
- package/dist/compaction/verifier.js.map +1 -1
- package/dist/compaction/wire.d.ts +54 -0
- package/dist/compaction/wire.d.ts.map +1 -0
- package/dist/compaction/wire.js +45 -0
- package/dist/compaction/wire.js.map +1 -0
- package/dist/config/runtime.d.ts +161 -45
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js +61 -19
- package/dist/config/runtime.js.map +1 -1
- package/dist/connector/builtins/http.d.ts.map +1 -1
- package/dist/connector/builtins/http.js +14 -1
- package/dist/connector/builtins/http.js.map +1 -1
- package/dist/connector/builtins/http.test.js +12 -0
- package/dist/connector/builtins/http.test.js.map +1 -1
- package/dist/connector/mcp/__tests__/discovery-policy.test.d.ts +2 -0
- package/dist/connector/mcp/__tests__/discovery-policy.test.d.ts.map +1 -0
- package/dist/connector/mcp/__tests__/discovery-policy.test.js +109 -0
- package/dist/connector/mcp/__tests__/discovery-policy.test.js.map +1 -0
- package/dist/connector/mcp/__tests__/list-pagination.test.d.ts +2 -0
- package/dist/connector/mcp/__tests__/list-pagination.test.d.ts.map +1 -0
- package/dist/connector/mcp/__tests__/list-pagination.test.js +81 -0
- package/dist/connector/mcp/__tests__/list-pagination.test.js.map +1 -0
- package/dist/connector/mcp/__tests__/policy.test.d.ts +2 -0
- package/dist/connector/mcp/__tests__/policy.test.d.ts.map +1 -0
- package/dist/connector/mcp/__tests__/policy.test.js +86 -0
- package/dist/connector/mcp/__tests__/policy.test.js.map +1 -0
- package/dist/connector/mcp/__tests__/protocol-negotiation.test.d.ts +2 -0
- package/dist/connector/mcp/__tests__/protocol-negotiation.test.d.ts.map +1 -0
- package/dist/connector/mcp/__tests__/protocol-negotiation.test.js +81 -0
- package/dist/connector/mcp/__tests__/protocol-negotiation.test.js.map +1 -0
- package/dist/connector/mcp/__tests__/schema-fidelity.test.d.ts +2 -0
- package/dist/connector/mcp/__tests__/schema-fidelity.test.d.ts.map +1 -0
- package/dist/connector/mcp/__tests__/schema-fidelity.test.js +206 -0
- package/dist/connector/mcp/__tests__/schema-fidelity.test.js.map +1 -0
- package/dist/connector/mcp/__tests__/structured-result.test.d.ts +2 -0
- package/dist/connector/mcp/__tests__/structured-result.test.d.ts.map +1 -0
- package/dist/connector/mcp/__tests__/structured-result.test.js +112 -0
- package/dist/connector/mcp/__tests__/structured-result.test.js.map +1 -0
- package/dist/connector/mcp/adapter.d.ts +14 -0
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +292 -18
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts +38 -0
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +138 -12
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/client.test.d.ts +2 -0
- package/dist/connector/mcp/client.test.d.ts.map +1 -0
- package/dist/connector/mcp/client.test.js +105 -0
- package/dist/connector/mcp/client.test.js.map +1 -0
- package/dist/connector/mcp/discovery.d.ts +32 -1
- package/dist/connector/mcp/discovery.d.ts.map +1 -1
- package/dist/connector/mcp/discovery.js +41 -4
- package/dist/connector/mcp/discovery.js.map +1 -1
- package/dist/connector/mcp/http-sse.d.ts.map +1 -1
- package/dist/connector/mcp/http-sse.js +15 -1
- package/dist/connector/mcp/http-sse.js.map +1 -1
- package/dist/connector/mcp/index.d.ts +3 -0
- package/dist/connector/mcp/index.d.ts.map +1 -1
- package/dist/connector/mcp/index.js +1 -0
- package/dist/connector/mcp/index.js.map +1 -1
- package/dist/connector/mcp/policy.d.ts +57 -0
- package/dist/connector/mcp/policy.d.ts.map +1 -0
- package/dist/connector/mcp/policy.js +84 -0
- package/dist/connector/mcp/policy.js.map +1 -0
- package/dist/connector/mcp/schema-refs.d.ts +26 -0
- package/dist/connector/mcp/schema-refs.d.ts.map +1 -0
- package/dist/connector/mcp/schema-refs.js +111 -0
- package/dist/connector/mcp/schema-refs.js.map +1 -0
- package/dist/constants/agent/index.d.ts.map +1 -1
- package/dist/constants/agent/index.js +3 -0
- package/dist/constants/agent/index.js.map +1 -1
- package/dist/constants/compaction/index.js +1 -1
- package/dist/constants/compaction/index.js.map +1 -1
- package/dist/constants/continuation.d.ts +4 -4
- package/dist/constants/continuation.js +4 -4
- package/dist/constants/mcp/index.d.ts +31 -0
- package/dist/constants/mcp/index.d.ts.map +1 -1
- package/dist/constants/mcp/index.js +31 -0
- package/dist/constants/mcp/index.js.map +1 -1
- package/dist/constants/plugin/index.d.ts +23 -2
- package/dist/constants/plugin/index.d.ts.map +1 -1
- package/dist/constants/plugin/index.js +23 -2
- package/dist/constants/plugin/index.js.map +1 -1
- package/dist/constants/sandbox/index.d.ts +2 -3
- package/dist/constants/sandbox/index.d.ts.map +1 -1
- package/dist/constants/sandbox/index.js +6 -5
- package/dist/constants/sandbox/index.js.map +1 -1
- package/dist/constants/telemetry/index.d.ts +7 -0
- package/dist/constants/telemetry/index.d.ts.map +1 -1
- package/dist/constants/telemetry/index.js +7 -0
- package/dist/constants/telemetry/index.js.map +1 -1
- package/dist/constants/tools/index.d.ts +16 -0
- package/dist/constants/tools/index.d.ts.map +1 -1
- package/dist/constants/tools/index.js +16 -0
- package/dist/constants/tools/index.js.map +1 -1
- package/dist/contracts/a2a.d.ts +94 -94
- package/dist/contracts/api.d.ts +40 -2
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/run-status.d.ts +17 -0
- package/dist/contracts/run-status.d.ts.map +1 -0
- package/dist/contracts/run-status.js +41 -0
- package/dist/contracts/run-status.js.map +1 -0
- package/dist/contracts/schemas.d.ts +6 -6
- package/dist/eval/__tests__/case-deadline.test.d.ts +2 -0
- package/dist/eval/__tests__/case-deadline.test.d.ts.map +1 -0
- package/dist/eval/__tests__/case-deadline.test.js +128 -0
- package/dist/eval/__tests__/case-deadline.test.js.map +1 -0
- package/dist/eval/__tests__/end-to-end.test.d.ts +2 -0
- package/dist/eval/__tests__/end-to-end.test.d.ts.map +1 -0
- package/dist/eval/__tests__/end-to-end.test.js +223 -0
- package/dist/eval/__tests__/end-to-end.test.js.map +1 -0
- package/dist/eval/__tests__/harness-honesty.test.d.ts +2 -0
- package/dist/eval/__tests__/harness-honesty.test.d.ts.map +1 -0
- package/dist/eval/__tests__/harness-honesty.test.js +85 -0
- package/dist/eval/__tests__/harness-honesty.test.js.map +1 -0
- package/dist/eval/__tests__/harness.test.d.ts +2 -0
- package/dist/eval/__tests__/harness.test.d.ts.map +1 -0
- package/dist/eval/__tests__/harness.test.js +207 -0
- package/dist/eval/__tests__/harness.test.js.map +1 -0
- package/dist/eval/__tests__/judge.test.d.ts +2 -0
- package/dist/eval/__tests__/judge.test.d.ts.map +1 -0
- package/dist/eval/__tests__/judge.test.js +255 -0
- package/dist/eval/__tests__/judge.test.js.map +1 -0
- package/dist/eval/__tests__/scorer-gates.test.d.ts +2 -0
- package/dist/eval/__tests__/scorer-gates.test.d.ts.map +1 -0
- package/dist/eval/__tests__/scorer-gates.test.js +136 -0
- package/dist/eval/__tests__/scorer-gates.test.js.map +1 -0
- package/dist/eval/experiment.d.ts +54 -0
- package/dist/eval/experiment.d.ts.map +1 -0
- package/dist/eval/experiment.js +263 -0
- package/dist/eval/experiment.js.map +1 -0
- package/dist/eval/from-run.d.ts +30 -0
- package/dist/eval/from-run.d.ts.map +1 -0
- package/dist/eval/from-run.js +46 -0
- package/dist/eval/from-run.js.map +1 -0
- package/dist/eval/index.d.ts +8 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +5 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/judge.d.ts +63 -0
- package/dist/eval/judge.d.ts.map +1 -0
- package/dist/eval/judge.js +136 -0
- package/dist/eval/judge.js.map +1 -0
- package/dist/eval/scorers.d.ts +40 -0
- package/dist/eval/scorers.d.ts.map +1 -0
- package/dist/eval/scorers.js +151 -0
- package/dist/eval/scorers.js.map +1 -0
- package/dist/eval/types.d.ts +150 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +2 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/execution/local.d.ts.map +1 -1
- package/dist/execution/local.js +6 -1
- package/dist/execution/local.js.map +1 -1
- package/dist/execution/local.test.d.ts +2 -0
- package/dist/execution/local.test.d.ts.map +1 -0
- package/dist/execution/local.test.js +37 -0
- package/dist/execution/local.test.js.map +1 -0
- package/dist/gateway/__tests__/list-survives-eviction.test.d.ts +2 -0
- package/dist/gateway/__tests__/list-survives-eviction.test.d.ts.map +1 -0
- package/dist/gateway/__tests__/list-survives-eviction.test.js +102 -0
- package/dist/gateway/__tests__/list-survives-eviction.test.js.map +1 -0
- package/dist/gateway/local.d.ts +42 -2
- package/dist/gateway/local.d.ts.map +1 -1
- package/dist/gateway/local.js +110 -3
- package/dist/gateway/local.js.map +1 -1
- package/dist/manager/agent/__tests__/dispose-cancels.test.d.ts +2 -0
- package/dist/manager/agent/__tests__/dispose-cancels.test.d.ts.map +1 -0
- package/dist/manager/agent/__tests__/dispose-cancels.test.js +88 -0
- package/dist/manager/agent/__tests__/dispose-cancels.test.js.map +1 -0
- package/dist/manager/agent/__tests__/lifecycle.test.js +230 -0
- package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts +35 -0
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +117 -7
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +90 -1
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +120 -0
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/plugin/__tests__/enable-contributions.test.js +3 -3
- package/dist/plugin/__tests__/enable-contributions.test.js.map +1 -1
- package/dist/plugin/__tests__/hook-ordering.test.d.ts +2 -0
- package/dist/plugin/__tests__/hook-ordering.test.d.ts.map +1 -0
- package/dist/plugin/__tests__/hook-ordering.test.js +227 -0
- package/dist/plugin/__tests__/hook-ordering.test.js.map +1 -0
- package/dist/plugin/__tests__/install-time-refusal.test.d.ts +2 -0
- package/dist/plugin/__tests__/install-time-refusal.test.d.ts.map +1 -0
- package/dist/plugin/__tests__/install-time-refusal.test.js +49 -0
- package/dist/plugin/__tests__/install-time-refusal.test.js.map +1 -0
- package/dist/plugin/__tests__/lifecycle.test.js +95 -68
- package/dist/plugin/__tests__/lifecycle.test.js.map +1 -1
- package/dist/plugin/lifecycle.d.ts +15 -1
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +67 -20
- package/dist/plugin/lifecycle.js.map +1 -1
- package/dist/plugin/loader.d.ts +15 -0
- package/dist/plugin/loader.d.ts.map +1 -1
- package/dist/plugin/loader.js +33 -1
- package/dist/plugin/loader.js.map +1 -1
- package/dist/probe/registry.d.ts.map +1 -1
- package/dist/probe/registry.js +19 -1
- package/dist/probe/registry.js.map +1 -1
- package/dist/probe/registry.test.d.ts +9 -3
- package/dist/probe/registry.test.d.ts.map +1 -1
- package/dist/probe/registry.test.js +44 -6
- package/dist/probe/registry.test.js.map +1 -1
- package/dist/provider/__tests__/mock-script.test.d.ts +2 -0
- package/dist/provider/__tests__/mock-script.test.d.ts.map +1 -0
- package/dist/provider/__tests__/mock-script.test.js +151 -0
- package/dist/provider/__tests__/mock-script.test.js.map +1 -0
- package/dist/provider/__tests__/retry-visibility.test.d.ts +2 -0
- package/dist/provider/__tests__/retry-visibility.test.d.ts.map +1 -0
- package/dist/provider/__tests__/retry-visibility.test.js +137 -0
- package/dist/provider/__tests__/retry-visibility.test.js.map +1 -0
- package/dist/provider/__tests__/retry.test.d.ts +2 -0
- package/dist/provider/__tests__/retry.test.d.ts.map +1 -0
- package/dist/provider/__tests__/retry.test.js +259 -0
- package/dist/provider/__tests__/retry.test.js.map +1 -0
- package/dist/provider/capabilities.d.ts +1 -0
- package/dist/provider/capabilities.d.ts.map +1 -1
- package/dist/provider/capabilities.js +2 -0
- package/dist/provider/capabilities.js.map +1 -1
- package/dist/provider/collect.d.ts +1 -1
- package/dist/provider/collect.js +1 -1
- package/dist/provider/collect.test.d.ts +1 -1
- package/dist/provider/collect.test.js +1 -1
- package/dist/provider/index.d.ts +3 -0
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +2 -0
- package/dist/provider/index.js.map +1 -1
- package/dist/provider/mock-register.d.ts.map +1 -1
- package/dist/provider/mock-register.js +5 -2
- package/dist/provider/mock-register.js.map +1 -1
- package/dist/provider/mock.d.ts +35 -5
- package/dist/provider/mock.d.ts.map +1 -1
- package/dist/provider/mock.js +104 -32
- package/dist/provider/mock.js.map +1 -1
- package/dist/provider/retry.d.ts +42 -0
- package/dist/provider/retry.d.ts.map +1 -0
- package/dist/provider/retry.js +161 -0
- package/dist/provider/retry.js.map +1 -0
- package/dist/public-runtime.d.ts +26 -7
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +50 -7
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-types.d.ts +5 -1
- package/dist/public-types.d.ts.map +1 -1
- package/dist/rag/__tests__/retrieval-math.test.d.ts +2 -0
- package/dist/rag/__tests__/retrieval-math.test.d.ts.map +1 -0
- package/dist/rag/__tests__/retrieval-math.test.js +46 -0
- package/dist/rag/__tests__/retrieval-math.test.js.map +1 -0
- package/dist/rag/chunking.d.ts +12 -0
- package/dist/rag/chunking.d.ts.map +1 -1
- package/dist/rag/chunking.js +32 -1
- package/dist/rag/chunking.js.map +1 -1
- package/dist/rag/embedding.d.ts +4 -4
- package/dist/rag/embedding.d.ts.map +1 -1
- package/dist/rag/embedding.js +23 -3
- package/dist/rag/embedding.js.map +1 -1
- package/dist/rag/embedding.test.d.ts +1 -1
- package/dist/rag/embedding.test.js +59 -10
- package/dist/rag/embedding.test.js.map +1 -1
- package/dist/rag/index.d.ts +1 -1
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +1 -1
- package/dist/rag/index.js.map +1 -1
- package/dist/rag/retriever.d.ts +0 -1
- package/dist/rag/retriever.d.ts.map +1 -1
- package/dist/rag/retriever.js +75 -22
- package/dist/rag/retriever.js.map +1 -1
- package/dist/rag/vector-store.test.d.ts +1 -1
- package/dist/rag/vector-store.test.js +2 -2
- package/dist/rag/vector-store.test.js.map +1 -1
- package/dist/registry/ManagedRegistry.test.d.ts +1 -1
- package/dist/registry/ManagedRegistry.test.js +1 -1
- package/dist/registry/Registry.test.d.ts +1 -1
- package/dist/registry/Registry.test.js +1 -1
- package/dist/registry/connector/definitions.test.d.ts +1 -1
- package/dist/registry/connector/definitions.test.js +1 -1
- package/dist/registry/tool/__tests__/schema.test.d.ts +2 -0
- package/dist/registry/tool/__tests__/schema.test.d.ts.map +1 -0
- package/dist/registry/tool/__tests__/schema.test.js +176 -0
- package/dist/registry/tool/__tests__/schema.test.js.map +1 -0
- package/dist/registry/tool/__tests__/tool-name-validation.test.d.ts +2 -0
- package/dist/registry/tool/__tests__/tool-name-validation.test.d.ts.map +1 -0
- package/dist/registry/tool/__tests__/tool-name-validation.test.js +70 -0
- package/dist/registry/tool/__tests__/tool-name-validation.test.js.map +1 -0
- package/dist/registry/tool/execute.d.ts +37 -0
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +91 -21
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/registry/tool/schema.d.ts +26 -0
- package/dist/registry/tool/schema.d.ts.map +1 -0
- package/dist/registry/tool/schema.js +77 -0
- package/dist/registry/tool/schema.js.map +1 -0
- package/dist/registry/toolset/catalog.d.ts.map +1 -1
- package/dist/registry/toolset/catalog.js +0 -1
- package/dist/registry/toolset/catalog.js.map +1 -1
- package/dist/registry/toolset/catalog.test.js +0 -1
- package/dist/registry/toolset/catalog.test.js.map +1 -1
- package/dist/run/reporter.d.ts.map +1 -1
- package/dist/run/reporter.js +76 -0
- package/dist/run/reporter.js.map +1 -1
- package/dist/runtime/bidi/__tests__/session.test.d.ts +2 -0
- package/dist/runtime/bidi/__tests__/session.test.d.ts.map +1 -0
- package/dist/runtime/bidi/__tests__/session.test.js +201 -0
- package/dist/runtime/bidi/__tests__/session.test.js.map +1 -0
- package/dist/runtime/bidi/index.d.ts +5 -0
- package/dist/runtime/bidi/index.d.ts.map +1 -0
- package/dist/runtime/bidi/index.js +3 -0
- package/dist/runtime/bidi/index.js.map +1 -0
- package/dist/runtime/bidi/mock.d.ts +34 -0
- package/dist/runtime/bidi/mock.d.ts.map +1 -0
- package/dist/runtime/bidi/mock.js +60 -0
- package/dist/runtime/bidi/mock.js.map +1 -0
- package/dist/runtime/bidi/session.d.ts +44 -0
- package/dist/runtime/bidi/session.d.ts.map +1 -0
- package/dist/runtime/bidi/session.js +154 -0
- package/dist/runtime/bidi/session.js.map +1 -0
- package/dist/runtime/decision/parser.d.ts.map +1 -1
- package/dist/runtime/decision/parser.js +8 -1
- package/dist/runtime/decision/parser.js.map +1 -1
- package/dist/runtime/decision/parser.test.d.ts +2 -0
- package/dist/runtime/decision/parser.test.d.ts.map +1 -0
- package/dist/runtime/decision/parser.test.js +37 -0
- package/dist/runtime/decision/parser.test.js.map +1 -0
- package/dist/runtime/query/__tests__/answer-review.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/answer-review.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/answer-review.test.js +141 -0
- package/dist/runtime/query/__tests__/answer-review.test.js.map +1 -0
- package/dist/runtime/query/__tests__/capability-negotiation.test.js +24 -111
- package/dist/runtime/query/__tests__/capability-negotiation.test.js.map +1 -1
- package/dist/runtime/query/__tests__/checkpoint-store.test.js +12 -44
- package/dist/runtime/query/__tests__/checkpoint-store.test.js.map +1 -1
- package/dist/runtime/query/__tests__/checkpoint.test.js +2 -10
- package/dist/runtime/query/__tests__/checkpoint.test.js.map +1 -1
- package/dist/runtime/query/__tests__/citations.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/citations.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/citations.test.js +85 -0
- package/dist/runtime/query/__tests__/citations.test.js.map +1 -0
- package/dist/runtime/query/__tests__/content-budget.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/content-budget.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/content-budget.test.js +69 -0
- package/dist/runtime/query/__tests__/content-budget.test.js.map +1 -0
- package/dist/runtime/query/__tests__/context.test.js +3 -2
- package/dist/runtime/query/__tests__/context.test.js.map +1 -1
- package/dist/runtime/query/__tests__/deferred-tools.test.js +21 -130
- package/dist/runtime/query/__tests__/deferred-tools.test.js.map +1 -1
- package/dist/runtime/query/__tests__/delegation-resume.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/delegation-resume.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/delegation-resume.test.js +111 -0
- package/dist/runtime/query/__tests__/delegation-resume.test.js.map +1 -0
- package/dist/runtime/query/__tests__/document-attachments.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/document-attachments.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/document-attachments.test.js +92 -0
- package/dist/runtime/query/__tests__/document-attachments.test.js.map +1 -0
- package/dist/runtime/query/__tests__/durable-park-and-trace.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/durable-park-and-trace.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/durable-park-and-trace.test.js +194 -0
- package/dist/runtime/query/__tests__/durable-park-and-trace.test.js.map +1 -0
- package/dist/runtime/query/__tests__/durable-question-park.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/durable-question-park.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/durable-question-park.test.js +253 -0
- package/dist/runtime/query/__tests__/durable-question-park.test.js.map +1 -0
- package/dist/runtime/query/__tests__/durable-run-state.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/durable-run-state.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/durable-run-state.test.js +158 -0
- package/dist/runtime/query/__tests__/durable-run-state.test.js.map +1 -0
- package/dist/runtime/query/__tests__/executor-plugin-hooks.test.js +24 -20
- package/dist/runtime/query/__tests__/executor-plugin-hooks.test.js.map +1 -1
- package/dist/runtime/query/__tests__/finish-reason-vs-tool-calls.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/finish-reason-vs-tool-calls.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/finish-reason-vs-tool-calls.test.js +187 -0
- package/dist/runtime/query/__tests__/finish-reason-vs-tool-calls.test.js.map +1 -0
- package/dist/runtime/query/__tests__/grant-cannot-overrule-the-gate.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/grant-cannot-overrule-the-gate.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/grant-cannot-overrule-the-gate.test.js +95 -0
- package/dist/runtime/query/__tests__/grant-cannot-overrule-the-gate.test.js.map +1 -0
- package/dist/runtime/query/__tests__/guardrails-e2e.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/guardrails-e2e.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/guardrails-e2e.test.js +132 -0
- package/dist/runtime/query/__tests__/guardrails-e2e.test.js.map +1 -0
- package/dist/runtime/query/__tests__/guardrails.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/guardrails.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/guardrails.test.js +163 -0
- package/dist/runtime/query/__tests__/guardrails.test.js.map +1 -0
- package/dist/runtime/query/__tests__/hook-model-visibility.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/hook-model-visibility.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/hook-model-visibility.test.js +119 -0
- package/dist/runtime/query/__tests__/hook-model-visibility.test.js.map +1 -0
- package/dist/runtime/query/__tests__/long-document-flow.test.js +9 -2
- package/dist/runtime/query/__tests__/long-document-flow.test.js.map +1 -1
- package/dist/runtime/query/__tests__/memory-promotion.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/memory-promotion.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/memory-promotion.test.js +119 -0
- package/dist/runtime/query/__tests__/memory-promotion.test.js.map +1 -0
- package/dist/runtime/query/__tests__/orphan-task-turn-end.test.js +5 -27
- package/dist/runtime/query/__tests__/orphan-task-turn-end.test.js.map +1 -1
- package/dist/runtime/query/__tests__/overflow-relief.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/overflow-relief.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/overflow-relief.test.js +119 -0
- package/dist/runtime/query/__tests__/overflow-relief.test.js.map +1 -0
- package/dist/runtime/query/__tests__/partial-batch-resume.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/partial-batch-resume.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/partial-batch-resume.test.js +205 -0
- package/dist/runtime/query/__tests__/partial-batch-resume.test.js.map +1 -0
- package/dist/runtime/query/__tests__/plugin-hooks.test.js +0 -1
- package/dist/runtime/query/__tests__/plugin-hooks.test.js.map +1 -1
- package/dist/runtime/query/__tests__/prepare-step-chain.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/prepare-step-chain.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/prepare-step-chain.test.js +104 -0
- package/dist/runtime/query/__tests__/prepare-step-chain.test.js.map +1 -0
- package/dist/runtime/query/__tests__/prepare-step.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/prepare-step.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/prepare-step.test.js +194 -0
- package/dist/runtime/query/__tests__/prepare-step.test.js.map +1 -0
- package/dist/runtime/query/__tests__/probe-veto-is-error.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/probe-veto-is-error.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/probe-veto-is-error.test.js +111 -0
- package/dist/runtime/query/__tests__/probe-veto-is-error.test.js.map +1 -0
- package/dist/runtime/query/__tests__/prompt.test.js +1 -1
- package/dist/runtime/query/__tests__/prompt.test.js.map +1 -1
- package/dist/runtime/query/__tests__/provider-fault-pauses.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/provider-fault-pauses.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/provider-fault-pauses.test.js +86 -0
- package/dist/runtime/query/__tests__/provider-fault-pauses.test.js.map +1 -0
- package/dist/runtime/query/__tests__/reasoning-stream.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/reasoning-stream.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/reasoning-stream.test.js +146 -0
- package/dist/runtime/query/__tests__/reasoning-stream.test.js.map +1 -0
- package/dist/runtime/query/__tests__/recoverable-settle.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/recoverable-settle.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/recoverable-settle.test.js +119 -0
- package/dist/runtime/query/__tests__/recoverable-settle.test.js.map +1 -0
- package/dist/runtime/query/__tests__/resume-budget.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/resume-budget.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/resume-budget.test.js +130 -0
- package/dist/runtime/query/__tests__/resume-budget.test.js.map +1 -0
- package/dist/runtime/query/__tests__/resume-pending.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/resume-pending.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/resume-pending.test.js +226 -0
- package/dist/runtime/query/__tests__/resume-pending.test.js.map +1 -0
- package/dist/runtime/query/__tests__/rich-content-budget-wiring.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/rich-content-budget-wiring.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/rich-content-budget-wiring.test.js +89 -0
- package/dist/runtime/query/__tests__/rich-content-budget-wiring.test.js.map +1 -0
- package/dist/runtime/query/__tests__/stop-condition.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/stop-condition.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/stop-condition.test.js +205 -0
- package/dist/runtime/query/__tests__/stop-condition.test.js.map +1 -0
- package/dist/runtime/query/__tests__/structured-output.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/structured-output.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/structured-output.test.js +219 -0
- package/dist/runtime/query/__tests__/structured-output.test.js.map +1 -0
- package/dist/runtime/query/__tests__/structured-run-failure.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/structured-run-failure.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/structured-run-failure.test.js +117 -0
- package/dist/runtime/query/__tests__/structured-run-failure.test.js.map +1 -0
- package/dist/runtime/query/__tests__/terminal-tool.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/terminal-tool.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/terminal-tool.test.js +119 -0
- package/dist/runtime/query/__tests__/terminal-tool.test.js.map +1 -0
- package/dist/runtime/query/__tests__/tool-grants.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/tool-grants.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/tool-grants.test.js +85 -0
- package/dist/runtime/query/__tests__/tool-grants.test.js.map +1 -0
- package/dist/runtime/query/__tests__/tool-output-budget.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/tool-output-budget.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/tool-output-budget.test.js +0 -0
- package/dist/runtime/query/__tests__/tool-output-budget.test.js.map +1 -0
- package/dist/runtime/query/__tests__/tool-pause.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/tool-pause.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/tool-pause.test.js +165 -0
- package/dist/runtime/query/__tests__/tool-pause.test.js.map +1 -0
- package/dist/runtime/query/__tests__/tool-progress.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/tool-progress.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/tool-progress.test.js +122 -0
- package/dist/runtime/query/__tests__/tool-progress.test.js.map +1 -0
- package/dist/runtime/query/__tests__/tool-repair-retry.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/tool-repair-retry.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/tool-repair-retry.test.js +196 -0
- package/dist/runtime/query/__tests__/tool-repair-retry.test.js.map +1 -0
- package/dist/runtime/query/__tests__/tool-result-wire.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/tool-result-wire.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/tool-result-wire.test.js +106 -0
- package/dist/runtime/query/__tests__/tool-result-wire.test.js.map +1 -0
- package/dist/runtime/query/__tests__/tool-timeout.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/tool-timeout.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/tool-timeout.test.js +184 -0
- package/dist/runtime/query/__tests__/tool-timeout.test.js.map +1 -0
- package/dist/runtime/query/__tests__/trace-parenting.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/trace-parenting.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/trace-parenting.test.js +111 -0
- package/dist/runtime/query/__tests__/trace-parenting.test.js.map +1 -0
- package/dist/runtime/query/__tests__/wiring-seams.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/wiring-seams.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/wiring-seams.test.js +237 -0
- package/dist/runtime/query/__tests__/wiring-seams.test.js.map +1 -0
- package/dist/runtime/query/checkpoint.d.ts +124 -6
- package/dist/runtime/query/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/checkpoint.js +207 -6
- package/dist/runtime/query/checkpoint.js.map +1 -1
- package/dist/runtime/query/events.js +2 -2
- package/dist/runtime/query/events.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +224 -7
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +662 -35
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/guard.d.ts +18 -0
- package/dist/runtime/query/guard.d.ts.map +1 -1
- package/dist/runtime/query/guard.js +16 -1
- package/dist/runtime/query/guard.js.map +1 -1
- package/dist/runtime/query/guardrail-presets.d.ts +36 -0
- package/dist/runtime/query/guardrail-presets.d.ts.map +1 -0
- package/dist/runtime/query/guardrail-presets.js +96 -0
- package/dist/runtime/query/guardrail-presets.js.map +1 -0
- package/dist/runtime/query/guardrails.d.ts +35 -0
- package/dist/runtime/query/guardrails.d.ts.map +1 -0
- package/dist/runtime/query/guardrails.js +102 -0
- package/dist/runtime/query/guardrails.js.map +1 -0
- package/dist/runtime/query/index.d.ts +213 -2
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +458 -10
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/__tests__/cancel-settles-turn.test.d.ts +2 -0
- package/dist/runtime/query/iteration/__tests__/cancel-settles-turn.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/__tests__/cancel-settles-turn.test.js +131 -0
- package/dist/runtime/query/iteration/__tests__/cancel-settles-turn.test.js.map +1 -0
- package/dist/runtime/query/iteration/index.d.ts +76 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +577 -34
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/advisory.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/advisory.js +14 -2
- package/dist/runtime/query/iteration/phases/advisory.js.map +1 -1
- package/dist/runtime/query/iteration/phases/advisory.test.d.ts +1 -1
- package/dist/runtime/query/iteration/phases/advisory.test.js +4 -1
- package/dist/runtime/query/iteration/phases/advisory.test.js.map +1 -1
- package/dist/runtime/query/iteration/phases/checkpoint.js +2 -2
- package/dist/runtime/query/iteration/phases/checkpoint.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction-safe-cut.test.js +1 -1
- package/dist/runtime/query/iteration/phases/compaction-safe-cut.test.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts +22 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +297 -64
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context-measurement.test.d.ts +21 -0
- package/dist/runtime/query/iteration/phases/context-measurement.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/context-measurement.test.js +161 -0
- package/dist/runtime/query/iteration/phases/context-measurement.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/context.d.ts +62 -2
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js +87 -0
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js +3 -1
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js.map +1 -1
- package/dist/runtime/query/iteration/phases/overflow-escalation.test.d.ts +15 -0
- package/dist/runtime/query/iteration/phases/overflow-escalation.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/overflow-escalation.test.js +130 -0
- package/dist/runtime/query/iteration/phases/overflow-escalation.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/plan.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/plan.js +8 -2
- package/dist/runtime/query/iteration/phases/plan.js.map +1 -1
- package/dist/runtime/query/iteration/phases/retained-messages.test.d.ts +2 -0
- package/dist/runtime/query/iteration/phases/retained-messages.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/retained-messages.test.js +180 -0
- package/dist/runtime/query/iteration/phases/retained-messages.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/tool-review-denials.test.d.ts +2 -0
- package/dist/runtime/query/iteration/phases/tool-review-denials.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/tool-review-denials.test.js +224 -0
- package/dist/runtime/query/iteration/phases/tool-review-denials.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/tool-review.d.ts +29 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +114 -44
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js +20 -9
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts +2 -26
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +254 -16
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
- package/dist/runtime/query/plugin-hooks.js +6 -2
- package/dist/runtime/query/plugin-hooks.js.map +1 -1
- package/dist/runtime/query/prompt.d.ts.map +1 -1
- package/dist/runtime/query/prompt.js +25 -1
- package/dist/runtime/query/prompt.js.map +1 -1
- package/dist/runtime/query/question-park.d.ts +85 -0
- package/dist/runtime/query/question-park.d.ts.map +1 -0
- package/dist/runtime/query/question-park.js +71 -0
- package/dist/runtime/query/question-park.js.map +1 -0
- package/dist/runtime/query/result.d.ts +9 -0
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +49 -0
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts +106 -0
- package/dist/runtime/query/resume-pending.d.ts.map +1 -0
- package/dist/runtime/query/resume-pending.js +312 -0
- package/dist/runtime/query/resume-pending.js.map +1 -0
- package/dist/runtime/query/run-state.d.ts +52 -0
- package/dist/runtime/query/run-state.d.ts.map +1 -0
- package/dist/runtime/query/run-state.js +87 -0
- package/dist/runtime/query/run-state.js.map +1 -0
- package/dist/runtime/query/tool-grants.d.ts +44 -0
- package/dist/runtime/query/tool-grants.d.ts.map +1 -0
- package/dist/runtime/query/tool-grants.js +63 -0
- package/dist/runtime/query/tool-grants.js.map +1 -0
- package/dist/runtime/query/tool-output-budget.d.ts +83 -0
- package/dist/runtime/query/tool-output-budget.d.ts.map +1 -0
- package/dist/runtime/query/tool-output-budget.js +147 -0
- package/dist/runtime/query/tool-output-budget.js.map +1 -0
- package/dist/runtime/query/tool-pause.d.ts +41 -0
- package/dist/runtime/query/tool-pause.d.ts.map +1 -0
- package/dist/runtime/query/tool-pause.js +94 -0
- package/dist/runtime/query/tool-pause.js.map +1 -0
- package/dist/runtime/query/tooling.d.ts +10 -1
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +13 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/sandbox/__tests__/isolation.test.d.ts +2 -0
- package/dist/sandbox/__tests__/isolation.test.d.ts.map +1 -0
- package/dist/sandbox/__tests__/isolation.test.js +139 -0
- package/dist/sandbox/__tests__/isolation.test.js.map +1 -0
- package/dist/sandbox/__tests__/output-truncation.test.d.ts +2 -0
- package/dist/sandbox/__tests__/output-truncation.test.d.ts.map +1 -0
- package/dist/sandbox/__tests__/output-truncation.test.js +88 -0
- package/dist/sandbox/__tests__/output-truncation.test.js.map +1 -0
- package/dist/sandbox/__tests__/resource-limits.test.d.ts +2 -0
- package/dist/sandbox/__tests__/resource-limits.test.d.ts.map +1 -0
- package/dist/sandbox/__tests__/resource-limits.test.js +86 -0
- package/dist/sandbox/__tests__/resource-limits.test.js.map +1 -0
- package/dist/sandbox/factory.js +1 -1
- package/dist/sandbox/factory.js.map +1 -1
- package/dist/sandbox/index.d.ts +2 -0
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +1 -0
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/isolation.d.ts +15 -0
- package/dist/sandbox/isolation.d.ts.map +1 -0
- package/dist/sandbox/isolation.js +53 -0
- package/dist/sandbox/isolation.js.map +1 -0
- package/dist/sandbox/provider/local.d.ts +51 -2
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +139 -69
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/session/__tests__/integration/spawn-rollback.test.d.ts +1 -1
- package/dist/session/__tests__/integration/spawn-rollback.test.js +1 -1
- package/dist/session/handoff/broadcast.js +3 -3
- package/dist/session/handoff/broadcast.js.map +1 -1
- package/dist/session/migration/__tests__/filesystem.test.js +5 -1
- package/dist/session/migration/__tests__/filesystem.test.js.map +1 -1
- package/dist/session/migration/filesystem.d.ts.map +1 -1
- package/dist/session/migration/filesystem.js +7 -13
- package/dist/session/migration/filesystem.js.map +1 -1
- package/dist/session/migration/marker.d.ts.map +1 -1
- package/dist/session/migration/marker.js +5 -10
- package/dist/session/migration/marker.js.map +1 -1
- package/dist/session/retention/disk-backend.d.ts.map +1 -1
- package/dist/session/retention/disk-backend.js +5 -12
- package/dist/session/retention/disk-backend.js.map +1 -1
- package/dist/session/workspace/__tests__/git-worktree.test.js +6 -2
- package/dist/session/workspace/__tests__/git-worktree.test.js.map +1 -1
- package/dist/session/workspace/__tests__/shared-run.test.js +15 -0
- package/dist/session/workspace/__tests__/shared-run.test.js.map +1 -1
- package/dist/session/workspace/shared-run.js +8 -1
- package/dist/session/workspace/shared-run.js.map +1 -1
- package/dist/skills/__tests__/frontmatter.test.d.ts +2 -0
- package/dist/skills/__tests__/frontmatter.test.d.ts.map +1 -0
- package/dist/skills/__tests__/frontmatter.test.js +106 -0
- package/dist/skills/__tests__/frontmatter.test.js.map +1 -0
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +42 -3
- package/dist/skills/loader.js.map +1 -1
- package/dist/store/__tests__/checkpoint-integrity.test.d.ts +2 -0
- package/dist/store/__tests__/checkpoint-integrity.test.d.ts.map +1 -0
- package/dist/store/__tests__/checkpoint-integrity.test.js +112 -0
- package/dist/store/__tests__/checkpoint-integrity.test.js.map +1 -0
- package/dist/store/__tests__/checkpoint-versioning.test.d.ts +2 -0
- package/dist/store/__tests__/checkpoint-versioning.test.d.ts.map +1 -0
- package/dist/store/__tests__/checkpoint-versioning.test.js +151 -0
- package/dist/store/__tests__/checkpoint-versioning.test.js.map +1 -0
- package/dist/store/__tests__/schema-adoption.test.d.ts +2 -0
- package/dist/store/__tests__/schema-adoption.test.d.ts.map +1 -0
- package/dist/store/__tests__/schema-adoption.test.js +90 -0
- package/dist/store/__tests__/schema-adoption.test.js.map +1 -0
- package/dist/store/__tests__/schema.test.d.ts +2 -0
- package/dist/store/__tests__/schema.test.d.ts.map +1 -0
- package/dist/store/__tests__/schema.test.js +93 -0
- package/dist/store/__tests__/schema.test.js.map +1 -0
- package/dist/store/memory/disk.d.ts.map +1 -1
- package/dist/store/memory/disk.js +16 -16
- package/dist/store/memory/disk.js.map +1 -1
- package/dist/store/run/disk.d.ts +23 -0
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +148 -23
- package/dist/store/run/disk.js.map +1 -1
- package/dist/store/schema.d.ts +73 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +103 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +25 -13
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/task/__tests__/lookup-across-runs.test.d.ts +2 -0
- package/dist/store/task/__tests__/lookup-across-runs.test.d.ts.map +1 -0
- package/dist/store/task/__tests__/lookup-across-runs.test.js +60 -0
- package/dist/store/task/__tests__/lookup-across-runs.test.js.map +1 -0
- package/dist/store/task/disk.d.ts +18 -0
- package/dist/store/task/disk.d.ts.map +1 -1
- package/dist/store/task/disk.js +61 -16
- package/dist/store/task/disk.js.map +1 -1
- package/dist/store/thread/disk.d.ts.map +1 -1
- package/dist/store/thread/disk.js +20 -11
- package/dist/store/thread/disk.js.map +1 -1
- package/dist/streaming/coalesce.d.ts +1 -1
- package/dist/streaming/coalesce.js +1 -1
- package/dist/telemetry/__tests__/latency-instruments.test.d.ts +2 -0
- package/dist/telemetry/__tests__/latency-instruments.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/latency-instruments.test.js +82 -0
- package/dist/telemetry/__tests__/latency-instruments.test.js.map +1 -0
- package/dist/telemetry/__tests__/metrics.test.d.ts +2 -0
- package/dist/telemetry/__tests__/metrics.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/metrics.test.js +112 -0
- package/dist/telemetry/__tests__/metrics.test.js.map +1 -0
- package/dist/telemetry/__tests__/span-hierarchy.test.d.ts +2 -0
- package/dist/telemetry/__tests__/span-hierarchy.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/span-hierarchy.test.js +84 -0
- package/dist/telemetry/__tests__/span-hierarchy.test.js.map +1 -0
- package/dist/telemetry/attributes.d.ts +44 -0
- package/dist/telemetry/attributes.d.ts.map +1 -1
- package/dist/telemetry/attributes.js +80 -0
- package/dist/telemetry/attributes.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +41 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +160 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/test-setup.d.ts +3 -3
- package/dist/test-setup.js +3 -3
- package/dist/test-support/paths.d.ts +14 -0
- package/dist/test-support/paths.d.ts.map +1 -0
- package/dist/test-support/paths.js +16 -0
- package/dist/test-support/paths.js.map +1 -0
- package/dist/tools/__tests__/path-containment.test.d.ts +2 -0
- package/dist/tools/__tests__/path-containment.test.d.ts.map +1 -0
- package/dist/tools/__tests__/path-containment.test.js +133 -0
- package/dist/tools/__tests__/path-containment.test.js.map +1 -0
- package/dist/tools/__tests__/posix-path.test.d.ts +2 -0
- package/dist/tools/__tests__/posix-path.test.d.ts.map +1 -0
- package/dist/tools/__tests__/posix-path.test.js +67 -0
- package/dist/tools/__tests__/posix-path.test.js.map +1 -0
- package/dist/tools/__tests__/sandboxed-search.test.d.ts +2 -0
- package/dist/tools/__tests__/sandboxed-search.test.d.ts.map +1 -0
- package/dist/tools/__tests__/sandboxed-search.test.js +114 -0
- package/dist/tools/__tests__/sandboxed-search.test.js.map +1 -0
- package/dist/tools/builtins/__tests__/computer-use.test.js +12 -2
- package/dist/tools/builtins/__tests__/computer-use.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/edit.test.js +10 -216
- package/dist/tools/builtins/__tests__/edit.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/payload-budget.test.js +16 -30
- package/dist/tools/builtins/__tests__/payload-budget.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/read-file.test.js +23 -1
- package/dist/tools/builtins/__tests__/read-file.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/write-file.test.js +13 -37
- package/dist/tools/builtins/__tests__/write-file.test.js.map +1 -1
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +33 -4
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/computer-use.d.ts +22 -22
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +7 -1
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts +5 -2
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +125 -105
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/glob.d.ts +1 -1
- package/dist/tools/builtins/glob.d.ts.map +1 -1
- package/dist/tools/builtins/glob.js +63 -6
- package/dist/tools/builtins/glob.js.map +1 -1
- package/dist/tools/builtins/grep.d.ts.map +1 -1
- package/dist/tools/builtins/grep.js +61 -8
- package/dist/tools/builtins/grep.js.map +1 -1
- package/dist/tools/builtins/index.js +6 -6
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/ls.d.ts.map +1 -1
- package/dist/tools/builtins/ls.js +4 -2
- package/dist/tools/builtins/ls.js.map +1 -1
- package/dist/tools/builtins/read-file.d.ts +1 -1
- package/dist/tools/builtins/read-file.d.ts.map +1 -1
- package/dist/tools/builtins/read-file.js +38 -4
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/write-file.d.ts +2 -1
- package/dist/tools/builtins/write-file.d.ts.map +1 -1
- package/dist/tools/builtins/write-file.js +40 -66
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/coordinator/__tests__/agent.test.d.ts +1 -1
- package/dist/tools/coordinator/__tests__/agent.test.js +2 -2
- package/dist/tools/coordinator/__tests__/agent.test.js.map +1 -1
- package/dist/tools/coordinator/agent.d.ts +20 -9
- package/dist/tools/coordinator/agent.d.ts.map +1 -1
- package/dist/tools/coordinator/agent.js +2 -1
- package/dist/tools/coordinator/agent.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts +20 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +80 -32
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/defineTool.d.ts +16 -0
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +4 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/glob-match.d.ts +18 -0
- package/dist/tools/glob-match.d.ts.map +1 -0
- package/dist/tools/glob-match.js +50 -0
- package/dist/tools/glob-match.js.map +1 -0
- package/dist/tools/paths.d.ts +20 -0
- package/dist/tools/paths.d.ts.map +1 -0
- package/dist/tools/paths.js +41 -0
- package/dist/tools/paths.js.map +1 -0
- package/dist/tools/posix-path.d.ts +24 -0
- package/dist/tools/posix-path.d.ts.map +1 -0
- package/dist/tools/posix-path.js +67 -0
- package/dist/tools/posix-path.js.map +1 -0
- package/dist/types/advisory/config.d.ts +21 -3
- package/dist/types/advisory/config.d.ts.map +1 -1
- package/dist/types/advisory/result.d.ts +12 -10
- package/dist/types/advisory/result.d.ts.map +1 -1
- package/dist/types/agent/base.d.ts +20 -2
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/factory.d.ts +15 -9
- package/dist/types/agent/factory.d.ts.map +1 -1
- package/dist/types/agent/gateway.d.ts +18 -0
- package/dist/types/agent/gateway.d.ts.map +1 -1
- package/dist/types/agent/manager.d.ts +19 -0
- package/dist/types/agent/manager.d.ts.map +1 -1
- package/dist/types/agent/reactive.d.ts +48 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/agent/router.d.ts +11 -0
- package/dist/types/agent/router.d.ts.map +1 -1
- package/dist/types/agent/supervisor.d.ts +2 -2
- package/dist/types/agent/task.d.ts +24 -0
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/bidi/index.d.ts +140 -0
- package/dist/types/bidi/index.d.ts.map +1 -0
- package/dist/types/bidi/index.js +2 -0
- package/dist/types/bidi/index.js.map +1 -0
- package/dist/types/common/__tests__/numeric-correctness.test.d.ts +2 -0
- package/dist/types/common/__tests__/numeric-correctness.test.d.ts.map +1 -0
- package/dist/types/common/__tests__/numeric-correctness.test.js +108 -0
- package/dist/types/common/__tests__/numeric-correctness.test.js.map +1 -0
- package/dist/types/common/index.d.ts +1 -1
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/index.js +15 -4
- package/dist/types/common/index.js.map +1 -1
- package/dist/types/connector/mcp.d.ts +29 -0
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/errors/__tests__/catalog.test.d.ts +2 -0
- package/dist/types/errors/__tests__/catalog.test.d.ts.map +1 -0
- package/dist/types/errors/__tests__/catalog.test.js +106 -0
- package/dist/types/errors/__tests__/catalog.test.js.map +1 -0
- package/dist/types/errors/__tests__/errors.test.d.ts +2 -0
- package/dist/types/errors/__tests__/errors.test.d.ts.map +1 -0
- package/dist/types/errors/__tests__/errors.test.js +104 -0
- package/dist/types/errors/__tests__/errors.test.js.map +1 -0
- package/dist/types/errors/catalog.d.ts +83 -0
- package/dist/types/errors/catalog.d.ts.map +1 -0
- package/dist/types/errors/catalog.js +148 -0
- package/dist/types/errors/catalog.js.map +1 -0
- package/dist/types/errors/index.d.ts +73 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/errors/index.js +70 -0
- package/dist/types/errors/index.js.map +1 -0
- package/dist/types/guardrail/index.d.ts +57 -0
- package/dist/types/guardrail/index.d.ts.map +1 -0
- package/dist/types/guardrail/index.js +2 -0
- package/dist/types/guardrail/index.js.map +1 -0
- package/dist/types/hitl/index.d.ts +97 -14
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/ids/index.d.ts +2 -2
- package/dist/types/message/content.d.ts +22 -0
- package/dist/types/message/content.d.ts.map +1 -0
- package/dist/types/message/content.js +49 -0
- package/dist/types/message/content.js.map +1 -0
- package/dist/types/message/index.d.ts +193 -8
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +19 -4
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +78 -3
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js +0 -1
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/provider/__tests__/cause-chain.test.d.ts +2 -0
- package/dist/types/provider/__tests__/cause-chain.test.d.ts.map +1 -0
- package/dist/types/provider/__tests__/cause-chain.test.js +108 -0
- package/dist/types/provider/__tests__/cause-chain.test.js.map +1 -0
- package/dist/types/provider/__tests__/declared-retryable.test.d.ts +2 -0
- package/dist/types/provider/__tests__/declared-retryable.test.d.ts.map +1 -0
- package/dist/types/provider/__tests__/declared-retryable.test.js +70 -0
- package/dist/types/provider/__tests__/declared-retryable.test.js.map +1 -0
- package/dist/types/provider/__tests__/overflow-classification.test.d.ts +2 -0
- package/dist/types/provider/__tests__/overflow-classification.test.d.ts.map +1 -0
- package/dist/types/provider/__tests__/overflow-classification.test.js +80 -0
- package/dist/types/provider/__tests__/overflow-classification.test.js.map +1 -0
- package/dist/types/provider/chat.d.ts +27 -1
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/provider/config.d.ts +83 -2
- package/dist/types/provider/config.d.ts.map +1 -1
- package/dist/types/provider/errors.d.ts +102 -0
- package/dist/types/provider/errors.d.ts.map +1 -0
- package/dist/types/provider/errors.js +393 -0
- package/dist/types/provider/errors.js.map +1 -0
- package/dist/types/provider/index.d.ts +3 -2
- package/dist/types/provider/index.d.ts.map +1 -1
- package/dist/types/provider/stream.d.ts +59 -3
- package/dist/types/provider/stream.d.ts.map +1 -1
- package/dist/types/rag/embedding.d.ts +11 -2
- package/dist/types/rag/embedding.d.ts.map +1 -1
- package/dist/types/run/__tests__/step.test.d.ts +2 -0
- package/dist/types/run/__tests__/step.test.d.ts.map +1 -0
- package/dist/types/run/__tests__/step.test.js +107 -0
- package/dist/types/run/__tests__/step.test.js.map +1 -0
- package/dist/types/run/answer-review.d.ts +46 -0
- package/dist/types/run/answer-review.d.ts.map +1 -0
- package/dist/types/run/answer-review.js +2 -0
- package/dist/types/run/answer-review.js.map +1 -0
- package/dist/types/run/config.d.ts +33 -0
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/derive-status.d.ts +29 -0
- package/dist/types/run/derive-status.d.ts.map +1 -0
- package/dist/types/run/derive-status.js +49 -0
- package/dist/types/run/derive-status.js.map +1 -0
- package/dist/types/run/entity.d.ts +16 -0
- package/dist/types/run/entity.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +228 -4
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js +7 -0
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/index.d.ts +5 -0
- package/dist/types/run/index.d.ts.map +1 -1
- package/dist/types/run/index.js +3 -0
- package/dist/types/run/index.js.map +1 -1
- package/dist/types/run/memory-promotion.d.ts +90 -0
- package/dist/types/run/memory-promotion.d.ts.map +1 -0
- package/dist/types/run/memory-promotion.js +38 -0
- package/dist/types/run/memory-promotion.js.map +1 -0
- package/dist/types/run/prepare-step.d.ts +100 -0
- package/dist/types/run/prepare-step.d.ts.map +1 -0
- package/dist/types/run/prepare-step.js +2 -0
- package/dist/types/run/prepare-step.js.map +1 -0
- package/dist/types/run/state.d.ts +85 -0
- package/dist/types/run/state.d.ts.map +1 -0
- package/dist/types/run/state.js +33 -0
- package/dist/types/run/state.js.map +1 -0
- package/dist/types/run/step.d.ts +77 -0
- package/dist/types/run/step.d.ts.map +1 -0
- package/dist/types/run/step.js +26 -0
- package/dist/types/run/step.js.map +1 -0
- package/dist/types/run/stop-reason.d.ts +31 -3
- package/dist/types/run/stop-reason.d.ts.map +1 -1
- package/dist/types/sandbox/index.d.ts +82 -10
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js +13 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/structured-output/index.d.ts +6 -5
- package/dist/types/structured-output/index.d.ts.map +1 -1
- package/dist/types/thread/entity.d.ts +2 -3
- package/dist/types/thread/entity.d.ts.map +1 -1
- package/dist/types/tool/index.d.ts +193 -1
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/tool/repair.d.ts +49 -0
- package/dist/types/tool/repair.d.ts.map +1 -0
- package/dist/types/tool/repair.js +2 -0
- package/dist/types/tool/repair.js.map +1 -0
- package/dist/types/toolset/index.d.ts +2 -5
- package/dist/types/toolset/index.d.ts.map +1 -1
- package/dist/utils/__tests__/atomic-write.test.d.ts +2 -0
- package/dist/utils/__tests__/atomic-write.test.d.ts.map +1 -0
- package/dist/utils/__tests__/atomic-write.test.js +91 -0
- package/dist/utils/__tests__/atomic-write.test.js.map +1 -0
- package/dist/utils/__tests__/shell-compress.test.d.ts +2 -0
- package/dist/utils/__tests__/shell-compress.test.d.ts.map +1 -0
- package/dist/utils/__tests__/shell-compress.test.js +41 -0
- package/dist/utils/__tests__/shell-compress.test.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +10 -0
- package/dist/utils/atomic-write.d.ts.map +1 -0
- package/dist/utils/atomic-write.js +83 -0
- package/dist/utils/atomic-write.js.map +1 -0
- package/dist/utils/shell-compress.d.ts.map +1 -1
- package/dist/utils/shell-compress.js +12 -1
- package/dist/utils/shell-compress.js.map +1 -1
- package/dist/verification/presets.d.ts +6 -3
- package/dist/verification/presets.d.ts.map +1 -1
- package/dist/verification/presets.js +6 -3
- package/dist/verification/presets.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/default-path-conformance.test.ts +306 -0
- package/src/__tests__/shipped-defaults.test.ts +111 -0
- package/src/advisory/__tests__/budget-enforcement.test.ts +208 -0
- package/src/advisory/__tests__/structured-response.test.ts +128 -0
- package/src/advisory/budget.ts +27 -0
- package/src/advisory/context.ts +19 -0
- package/src/advisory/executor.test.ts +12 -8
- package/src/advisory/executor.ts +37 -25
- package/src/advisory/index.ts +2 -0
- package/src/advisory/parse.ts +63 -0
- package/src/agents/AbstractAgent.ts +82 -0
- package/src/agents/PipelineAgent.ts +19 -0
- package/src/agents/ReactiveAgent.ts +47 -0
- package/src/agents/RouterAgent.ts +32 -2
- package/src/agents/SupervisorAgent.ts +31 -1
- package/src/agents/__tests__/idempotency-key.test.ts +177 -0
- package/src/agents/__tests__/invocation-lock.test.ts +154 -0
- package/src/agents/__tests__/reachability.test.ts +224 -0
- package/src/agents/__tests__/supervisor-ledger.test.ts +1 -1
- package/src/agents/index.ts +1 -1
- package/src/agents/lock.ts +0 -2
- package/src/bridge/a2a/late-events.test.ts +84 -0
- package/src/bridge/a2a/mapper.test.ts +1 -1
- package/src/bridge/a2a/mapper.ts +70 -5
- package/src/bridge/a2a/message.ts +5 -1
- package/src/bridge/sse/late-events.test.ts +182 -0
- package/src/bridge/sse/mapper.ts +109 -0
- package/src/compaction/__tests__/cleared-result-recovery.test.ts +118 -0
- package/src/compaction/__tests__/context-window.test.ts +77 -0
- package/src/compaction/__tests__/dangling.test.ts +16 -6
- package/src/compaction/__tests__/lossiness.test.ts +187 -0
- package/src/compaction/__tests__/state-across-resume.test.ts +99 -0
- package/src/compaction/__tests__/tool-result-editing.test.ts +213 -0
- package/src/compaction/__tests__/trim-opens-on-user.test.ts +118 -0
- package/src/compaction/__tests__/verifier-model.test.ts +83 -0
- package/src/compaction/context-window.ts +107 -0
- package/src/compaction/dangling.ts +48 -1
- package/src/compaction/extractor.ts +56 -1
- package/src/compaction/index.ts +16 -0
- package/src/compaction/manager.ts +53 -8
- package/src/compaction/managers/structured.ts +7 -6
- package/src/compaction/retention.ts +89 -0
- package/src/compaction/serializer.ts +42 -11
- package/src/compaction/tool-result-editing.ts +229 -0
- package/src/compaction/types.ts +10 -0
- package/src/compaction/verifier.ts +24 -1
- package/src/compaction/wire.ts +91 -0
- package/src/config/runtime.ts +63 -19
- package/src/connector/builtins/http.test.ts +13 -0
- package/src/connector/builtins/http.ts +15 -1
- package/src/connector/mcp/__tests__/discovery-policy.test.ts +133 -0
- package/src/connector/mcp/__tests__/list-pagination.test.ts +98 -0
- package/src/connector/mcp/__tests__/policy.test.ts +100 -0
- package/src/connector/mcp/__tests__/protocol-negotiation.test.ts +105 -0
- package/src/connector/mcp/__tests__/schema-fidelity.test.ts +250 -0
- package/src/connector/mcp/__tests__/structured-result.test.ts +143 -0
- package/src/connector/mcp/adapter.ts +306 -19
- package/src/connector/mcp/client.test.ts +159 -0
- package/src/connector/mcp/client.ts +160 -13
- package/src/connector/mcp/discovery.ts +74 -5
- package/src/connector/mcp/http-sse.ts +16 -1
- package/src/connector/mcp/index.ts +4 -0
- package/src/connector/mcp/policy.ts +134 -0
- package/src/connector/mcp/schema-refs.ts +126 -0
- package/src/constants/agent/index.ts +3 -0
- package/src/constants/compaction/index.ts +1 -1
- package/src/constants/continuation.ts +4 -4
- package/src/constants/mcp/index.ts +34 -0
- package/src/constants/plugin/index.ts +24 -2
- package/src/constants/sandbox/index.ts +6 -5
- package/src/constants/telemetry/index.ts +8 -0
- package/src/constants/tools/index.ts +20 -0
- package/src/contracts/api.ts +40 -0
- package/src/contracts/run-status.ts +43 -0
- package/src/eval/__tests__/case-deadline.test.ts +147 -0
- package/src/eval/__tests__/end-to-end.test.ts +259 -0
- package/src/eval/__tests__/harness-honesty.test.ts +99 -0
- package/src/eval/__tests__/harness.test.ts +249 -0
- package/src/eval/__tests__/judge.test.ts +306 -0
- package/src/eval/__tests__/scorer-gates.test.ts +156 -0
- package/src/eval/experiment.ts +335 -0
- package/src/eval/from-run.ts +48 -0
- package/src/eval/index.ts +21 -0
- package/src/eval/judge.ts +240 -0
- package/src/eval/scorers.ts +169 -0
- package/src/eval/types.ts +157 -0
- package/src/execution/local.test.ts +46 -0
- package/src/execution/local.ts +6 -1
- package/src/gateway/__tests__/list-survives-eviction.test.ts +124 -0
- package/src/gateway/local.ts +117 -3
- package/src/manager/agent/__tests__/dispose-cancels.test.ts +104 -0
- package/src/manager/agent/__tests__/lifecycle.test.ts +297 -0
- package/src/manager/agent/lifecycle.ts +127 -7
- package/src/manager/run/persistence.ts +132 -1
- package/src/plugin/__tests__/enable-contributions.test.ts +3 -3
- package/src/plugin/__tests__/hook-ordering.test.ts +252 -0
- package/src/plugin/__tests__/install-time-refusal.test.ts +68 -0
- package/src/plugin/__tests__/lifecycle.test.ts +95 -73
- package/src/plugin/lifecycle.ts +76 -22
- package/src/plugin/loader.ts +37 -1
- package/src/probe/registry.test.ts +49 -6
- package/src/probe/registry.ts +21 -1
- package/src/provider/__tests__/mock-script.test.ts +179 -0
- package/src/provider/__tests__/registry.test.ts +1 -1
- package/src/provider/__tests__/retry-visibility.test.ts +160 -0
- package/src/provider/__tests__/retry.test.ts +296 -0
- package/src/provider/capabilities.ts +4 -0
- package/src/provider/collect.test.ts +1 -1
- package/src/provider/collect.ts +1 -1
- package/src/provider/index.ts +8 -0
- package/src/provider/mock-register.ts +5 -2
- package/src/provider/mock.ts +117 -34
- package/src/provider/retry.ts +199 -0
- package/src/public-runtime.ts +111 -7
- package/src/public-types.ts +5 -1
- package/src/rag/__tests__/retrieval-math.test.ts +54 -0
- package/src/rag/chunking.ts +32 -1
- package/src/rag/embedding.test.ts +65 -10
- package/src/rag/embedding.ts +26 -5
- package/src/rag/index.ts +1 -1
- package/src/rag/retriever.ts +92 -21
- package/src/rag/vector-store.test.ts +2 -2
- package/src/registry/ManagedRegistry.test.ts +1 -1
- package/src/registry/Registry.test.ts +1 -1
- package/src/registry/connector/definitions.test.ts +1 -1
- package/src/registry/tool/__tests__/schema.test.ts +208 -0
- package/src/registry/tool/__tests__/tool-name-validation.test.ts +88 -0
- package/src/registry/tool/execute.ts +104 -22
- package/src/registry/tool/schema.ts +80 -0
- package/src/registry/toolset/catalog.test.ts +0 -1
- package/src/registry/toolset/catalog.ts +0 -1
- package/src/run/reporter.ts +84 -0
- package/src/runtime/bidi/__tests__/session.test.ts +232 -0
- package/src/runtime/bidi/index.ts +4 -0
- package/src/runtime/bidi/mock.ts +90 -0
- package/src/runtime/bidi/session.ts +205 -0
- package/src/runtime/decision/parser.test.ts +46 -0
- package/src/runtime/decision/parser.ts +8 -1
- package/src/runtime/query/__tests__/answer-review.test.ts +172 -0
- package/src/runtime/query/__tests__/capability-negotiation.test.ts +25 -129
- package/src/runtime/query/__tests__/checkpoint-store.test.ts +13 -50
- package/src/runtime/query/__tests__/checkpoint.test.ts +2 -10
- package/src/runtime/query/__tests__/citations.test.ts +111 -0
- package/src/runtime/query/__tests__/content-budget.test.ts +83 -0
- package/src/runtime/query/__tests__/context.test.ts +3 -2
- package/src/runtime/query/__tests__/deferred-tools.test.ts +23 -148
- package/src/runtime/query/__tests__/delegation-resume.test.ts +159 -0
- package/src/runtime/query/__tests__/document-attachments.test.ts +125 -0
- package/src/runtime/query/__tests__/durable-park-and-trace.test.ts +245 -0
- package/src/runtime/query/__tests__/durable-question-park.test.ts +305 -0
- package/src/runtime/query/__tests__/durable-run-state.test.ts +194 -0
- package/src/runtime/query/__tests__/executor-plugin-hooks.test.ts +24 -20
- package/src/runtime/query/__tests__/finish-reason-vs-tool-calls.test.ts +206 -0
- package/src/runtime/query/__tests__/grant-cannot-overrule-the-gate.test.ts +115 -0
- package/src/runtime/query/__tests__/guardrails-e2e.test.ts +164 -0
- package/src/runtime/query/__tests__/guardrails.test.ts +236 -0
- package/src/runtime/query/__tests__/hook-model-visibility.test.ts +143 -0
- package/src/runtime/query/__tests__/long-document-flow.test.ts +9 -2
- package/src/runtime/query/__tests__/memory-promotion.test.ts +148 -0
- package/src/runtime/query/__tests__/orphan-task-turn-end.test.ts +5 -31
- package/src/runtime/query/__tests__/overflow-relief.test.ts +139 -0
- package/src/runtime/query/__tests__/partial-batch-resume.test.ts +264 -0
- package/src/runtime/query/__tests__/plugin-hooks.test.ts +0 -1
- package/src/runtime/query/__tests__/prepare-step-chain.test.ts +127 -0
- package/src/runtime/query/__tests__/prepare-step.test.ts +233 -0
- package/src/runtime/query/__tests__/probe-veto-is-error.test.ts +145 -0
- package/src/runtime/query/__tests__/prompt.test.ts +1 -1
- package/src/runtime/query/__tests__/provider-fault-pauses.test.ts +104 -0
- package/src/runtime/query/__tests__/reasoning-stream.test.ts +177 -0
- package/src/runtime/query/__tests__/recoverable-settle.test.ts +145 -0
- package/src/runtime/query/__tests__/resume-budget.test.ts +158 -0
- package/src/runtime/query/__tests__/resume-pending.test.ts +273 -0
- package/src/runtime/query/__tests__/rich-content-budget-wiring.test.ts +109 -0
- package/src/runtime/query/__tests__/stop-condition.test.ts +265 -0
- package/src/runtime/query/__tests__/structured-output.test.ts +268 -0
- package/src/runtime/query/__tests__/structured-run-failure.test.ts +144 -0
- package/src/runtime/query/__tests__/terminal-tool.test.ts +148 -0
- package/src/runtime/query/__tests__/tool-grants.test.ts +102 -0
- package/src/runtime/query/__tests__/tool-output-budget.test.ts +0 -0
- package/src/runtime/query/__tests__/tool-pause.test.ts +209 -0
- package/src/runtime/query/__tests__/tool-progress.test.ts +154 -0
- package/src/runtime/query/__tests__/tool-repair-retry.test.ts +255 -0
- package/src/runtime/query/__tests__/tool-result-wire.test.ts +135 -0
- package/src/runtime/query/__tests__/tool-timeout.test.ts +230 -0
- package/src/runtime/query/__tests__/trace-parenting.test.ts +128 -0
- package/src/runtime/query/__tests__/wiring-seams.test.ts +288 -0
- package/src/runtime/query/checkpoint.ts +242 -10
- package/src/runtime/query/events.ts +2 -2
- package/src/runtime/query/executor.ts +847 -39
- package/src/runtime/query/guard.ts +26 -1
- package/src/runtime/query/guardrail-presets.ts +124 -0
- package/src/runtime/query/guardrails.ts +144 -0
- package/src/runtime/query/index.ts +759 -12
- package/src/runtime/query/iteration/__tests__/cancel-settles-turn.test.ts +177 -0
- package/src/runtime/query/iteration/index.ts +656 -40
- package/src/runtime/query/iteration/phases/advisory.test.ts +4 -1
- package/src/runtime/query/iteration/phases/advisory.ts +14 -2
- package/src/runtime/query/iteration/phases/checkpoint.ts +2 -2
- package/src/runtime/query/iteration/phases/compaction-safe-cut.test.ts +3 -1
- package/src/runtime/query/iteration/phases/compaction.ts +329 -64
- package/src/runtime/query/iteration/phases/context-measurement.test.ts +196 -0
- package/src/runtime/query/iteration/phases/context.ts +155 -2
- package/src/runtime/query/iteration/phases/hitl-answer-question.test.ts +3 -1
- package/src/runtime/query/iteration/phases/overflow-escalation.test.ts +167 -0
- package/src/runtime/query/iteration/phases/plan.ts +10 -2
- package/src/runtime/query/iteration/phases/retained-messages.test.ts +226 -0
- package/src/runtime/query/iteration/phases/tool-review-denials.test.ts +270 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +140 -51
- package/src/runtime/query/iteration/phases/working-memory-compaction.test.ts +21 -9
- package/src/runtime/query/iteration/stream-turn.ts +285 -15
- package/src/runtime/query/plugin-hooks.ts +6 -2
- package/src/runtime/query/prompt.ts +26 -1
- package/src/runtime/query/question-park.ts +120 -0
- package/src/runtime/query/result.ts +64 -0
- package/src/runtime/query/resume-pending.ts +394 -0
- package/src/runtime/query/run-state.ts +124 -0
- package/src/runtime/query/tool-grants.ts +83 -0
- package/src/runtime/query/tool-output-budget.ts +183 -0
- package/src/runtime/query/tool-pause.ts +119 -0
- package/src/runtime/query/tooling.ts +23 -1
- package/src/sandbox/__tests__/isolation.test.ts +164 -0
- package/src/sandbox/__tests__/output-truncation.test.ts +106 -0
- package/src/sandbox/__tests__/resource-limits.test.ts +106 -0
- package/src/sandbox/factory.ts +1 -1
- package/src/sandbox/index.ts +2 -0
- package/src/sandbox/isolation.ts +72 -0
- package/src/sandbox/provider/local.ts +173 -74
- package/src/session/__tests__/integration/spawn-rollback.test.ts +1 -1
- package/src/session/handoff/broadcast.ts +3 -3
- package/src/session/migration/__tests__/filesystem.test.ts +26 -19
- package/src/session/migration/filesystem.ts +7 -12
- package/src/session/migration/marker.ts +5 -9
- package/src/session/retention/disk-backend.ts +5 -11
- package/src/session/workspace/__tests__/git-worktree.test.ts +6 -2
- package/src/session/workspace/__tests__/shared-run.test.ts +18 -0
- package/src/session/workspace/shared-run.ts +7 -1
- package/src/skills/__tests__/frontmatter.test.ts +135 -0
- package/src/skills/loader.ts +47 -3
- package/src/store/__tests__/checkpoint-integrity.test.ts +134 -0
- package/src/store/__tests__/checkpoint-versioning.test.ts +194 -0
- package/src/store/__tests__/schema-adoption.test.ts +118 -0
- package/src/store/__tests__/schema.test.ts +119 -0
- package/src/store/memory/disk.ts +17 -16
- package/src/store/run/disk.ts +169 -22
- package/src/store/schema.ts +135 -0
- package/src/store/session/disk.ts +30 -21
- package/src/store/task/__tests__/lookup-across-runs.test.ts +77 -0
- package/src/store/task/disk.ts +59 -15
- package/src/store/thread/disk.ts +21 -10
- package/src/streaming/coalesce.ts +1 -1
- package/src/telemetry/__tests__/latency-instruments.test.ts +120 -0
- package/src/telemetry/__tests__/metrics.test.ts +160 -0
- package/src/telemetry/__tests__/span-hierarchy.test.ts +94 -0
- package/src/telemetry/attributes.ts +109 -0
- package/src/telemetry/metrics.ts +190 -0
- package/src/test-setup.ts +3 -3
- package/src/test-support/paths.ts +17 -0
- package/src/tools/__tests__/path-containment.test.ts +167 -0
- package/src/tools/__tests__/posix-path.test.ts +83 -0
- package/src/tools/__tests__/sandboxed-search.test.ts +140 -0
- package/src/tools/builtins/__tests__/computer-use.test.ts +15 -2
- package/src/tools/builtins/__tests__/edit.test.ts +10 -270
- package/src/tools/builtins/__tests__/payload-budget.test.ts +20 -40
- package/src/tools/builtins/__tests__/read-file.test.ts +29 -1
- package/src/tools/builtins/__tests__/write-file.test.ts +13 -52
- package/src/tools/builtins/bash.ts +34 -4
- package/src/tools/builtins/computer-use.ts +7 -1
- package/src/tools/builtins/edit.ts +162 -116
- package/src/tools/builtins/glob.ts +71 -6
- package/src/tools/builtins/grep.ts +82 -8
- package/src/tools/builtins/index.ts +6 -6
- package/src/tools/builtins/ls.ts +4 -2
- package/src/tools/builtins/read-file.ts +40 -4
- package/src/tools/builtins/write-file.ts +44 -68
- package/src/tools/coordinator/__tests__/agent.test.ts +2 -2
- package/src/tools/coordinator/agent.ts +23 -10
- package/src/tools/coordinator/index.ts +111 -31
- package/src/tools/defineTool.ts +20 -0
- package/src/tools/glob-match.ts +50 -0
- package/src/tools/paths.ts +44 -0
- package/src/tools/posix-path.ts +73 -0
- package/src/types/advisory/config.ts +21 -3
- package/src/types/advisory/result.ts +12 -7
- package/src/types/agent/base.ts +22 -2
- package/src/types/agent/factory.ts +15 -9
- package/src/types/agent/gateway.ts +20 -0
- package/src/types/agent/manager.ts +19 -0
- package/src/types/agent/reactive.ts +50 -0
- package/src/types/agent/router.ts +11 -0
- package/src/types/agent/supervisor.ts +2 -2
- package/src/types/agent/task.ts +26 -0
- package/src/types/bidi/index.ts +119 -0
- package/src/types/common/__tests__/numeric-correctness.test.ts +123 -0
- package/src/types/common/index.ts +16 -4
- package/src/types/computer-use/index.ts +1 -1
- package/src/types/connector/mcp.ts +29 -0
- package/src/types/errors/__tests__/catalog.test.ts +130 -0
- package/src/types/errors/__tests__/errors.test.ts +118 -0
- package/src/types/errors/catalog.ts +211 -0
- package/src/types/errors/index.ts +121 -0
- package/src/types/guardrail/index.ts +62 -0
- package/src/types/hitl/index.ts +102 -20
- package/src/types/ids/index.ts +2 -2
- package/src/types/message/content.ts +50 -0
- package/src/types/message/index.ts +210 -9
- package/src/types/plugin/index.ts +82 -2
- package/src/types/provider/__tests__/cause-chain.test.ts +132 -0
- package/src/types/provider/__tests__/declared-retryable.test.ts +85 -0
- package/src/types/provider/__tests__/overflow-classification.test.ts +113 -0
- package/src/types/provider/chat.ts +29 -1
- package/src/types/provider/config.ts +83 -2
- package/src/types/provider/errors.ts +472 -0
- package/src/types/provider/index.ts +5 -0
- package/src/types/provider/stream.ts +63 -3
- package/src/types/rag/embedding.ts +11 -2
- package/src/types/run/__tests__/step.test.ts +123 -0
- package/src/types/run/answer-review.ts +51 -0
- package/src/types/run/config.ts +35 -0
- package/src/types/run/derive-status.ts +62 -0
- package/src/types/run/entity.ts +18 -0
- package/src/types/run/events.ts +230 -3
- package/src/types/run/index.ts +5 -0
- package/src/types/run/memory-promotion.ts +112 -0
- package/src/types/run/prepare-step.ts +109 -0
- package/src/types/run/state.ts +111 -0
- package/src/types/run/step.ts +95 -0
- package/src/types/run/stop-reason.ts +29 -1
- package/src/types/sandbox/index.ts +93 -12
- package/src/types/structured-output/index.ts +6 -5
- package/src/types/thread/entity.ts +2 -3
- package/src/types/tool/index.ts +204 -1
- package/src/types/tool/repair.ts +54 -0
- package/src/types/toolset/index.ts +2 -6
- package/src/utils/__tests__/atomic-write.test.ts +108 -0
- package/src/utils/__tests__/shell-compress.test.ts +49 -0
- package/src/utils/atomic-write.ts +85 -0
- package/src/utils/shell-compress.ts +12 -1
- package/src/verification/presets.ts +6 -3
|
@@ -2,8 +2,55 @@ import { extractFromToolCall, extractFromToolResult } from '../../compaction/ext
|
|
|
2
2
|
import { buildProbeContext } from '../../probe/context.js';
|
|
3
3
|
import { ProbeVetoError } from '../../probe/errors.js';
|
|
4
4
|
import { probe as defaultProbeRegistry } from '../../probe/registry.js';
|
|
5
|
-
import {
|
|
5
|
+
import { renderToolSchema } from '../../registry/tool/schema.js';
|
|
6
|
+
import { createToolMessage, } from '../../types/message/index.js';
|
|
7
|
+
import { toErrorMessage } from '../../utils/error.js';
|
|
6
8
|
import { compressShellOutput } from '../../utils/shell-compress.js';
|
|
9
|
+
import { DEFAULT_MAX_TOOL_OUTPUT_CHARS, applyToolOutputBudget, describeDroppedContent, measureContentBytes, } from './tool-output-budget.js';
|
|
10
|
+
/**
|
|
11
|
+
* Default per-tool deadline. Long enough for a real build or test run,
|
|
12
|
+
* short enough that a wedged tool does not hold a turn open indefinitely.
|
|
13
|
+
* A tool that legitimately runs longer declares its own `timeoutMs`.
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_TOOL_TIMEOUT_MS = 120_000;
|
|
16
|
+
/**
|
|
17
|
+
* Cap on tools executing at once within a single batch.
|
|
18
|
+
*
|
|
19
|
+
* `executeBatch` used to `Promise.all` an unbounded fan-out, so a model
|
|
20
|
+
* emitting fifty parallel reads opened fifty file handles and fifty
|
|
21
|
+
* activity records at once. The serial chain is unaffected — it is
|
|
22
|
+
* already one-at-a-time by construction.
|
|
23
|
+
*/
|
|
24
|
+
export const DEFAULT_TOOL_CONCURRENCY = 8;
|
|
25
|
+
/**
|
|
26
|
+
* Re-runs granted to a `post_tool_use` hook that returns `{action:'retry'}`
|
|
27
|
+
* on a tool which did not opt into {@link ToolDefinition.maxRetries}.
|
|
28
|
+
*
|
|
29
|
+
* Small on purpose. The hook is host code reacting to one specific result,
|
|
30
|
+
* which is a more specific signal than the tool's blanket idempotency
|
|
31
|
+
* declaration — but the tool still never said it was safe to re-run, so
|
|
32
|
+
* this buys one correction, not a loop.
|
|
33
|
+
*/
|
|
34
|
+
export const HOOK_RETRY_BUDGET = 1;
|
|
35
|
+
/**
|
|
36
|
+
* An empty arguments string means "no arguments", not "malformed" — the
|
|
37
|
+
* shape a no-parameter tool arrives in.
|
|
38
|
+
*/
|
|
39
|
+
function parseArguments(raw) {
|
|
40
|
+
return JSON.parse(raw || '{}');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Model-visible text for a tool call that was never executed.
|
|
44
|
+
*
|
|
45
|
+
* The reason travels INSIDE the `tool_result` rather than as a trailing
|
|
46
|
+
* user message: a `tool_use` block must be answered by a `tool_result`
|
|
47
|
+
* with the same id, and a denial is an answer, not an omission. Putting
|
|
48
|
+
* the reason here is also what makes rejection *steer* — the model reads
|
|
49
|
+
* it in the slot it already attends to for tool outcomes.
|
|
50
|
+
*/
|
|
51
|
+
export function deniedToolOutput(toolName, reason) {
|
|
52
|
+
return `Error: Tool "${toolName}" was not executed. ${reason}`;
|
|
53
|
+
}
|
|
7
54
|
export class ToolExecutor {
|
|
8
55
|
config;
|
|
9
56
|
activityStore;
|
|
@@ -11,6 +58,7 @@ export class ToolExecutor {
|
|
|
11
58
|
log;
|
|
12
59
|
workingStateManager;
|
|
13
60
|
probes;
|
|
61
|
+
parentSpan;
|
|
14
62
|
readPaths = new Set();
|
|
15
63
|
fileReadTracker = {
|
|
16
64
|
recordRead: (key) => {
|
|
@@ -31,7 +79,30 @@ export class ToolExecutor {
|
|
|
31
79
|
setSandbox(sandbox) {
|
|
32
80
|
this.config = { ...this.config, sandbox };
|
|
33
81
|
}
|
|
34
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Span that this executor's tool spans should hang off — the current
|
|
84
|
+
* iteration. Re-set each turn by the orchestrator, because a tool span
|
|
85
|
+
* belongs under the iteration that requested it.
|
|
86
|
+
*/
|
|
87
|
+
setParentSpan(span) {
|
|
88
|
+
this.parentSpan = span;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Answer every `tool_use` block in `response` with exactly one
|
|
92
|
+
* `tool_result`.
|
|
93
|
+
*
|
|
94
|
+
* `denials` marks ids that must NOT run: each is answered with a
|
|
95
|
+
* synthetic error result carrying the caller's reason instead of being
|
|
96
|
+
* executed. This is what makes the invariant hold by construction —
|
|
97
|
+
* a gate denial, a human rejection and a partial approval all leave
|
|
98
|
+
* the history valid, because there is exactly one place that turns a
|
|
99
|
+
* batch of tool calls into messages and it always covers all of them.
|
|
100
|
+
*
|
|
101
|
+
* Answering with `is_error` semantics rather than dropping the call is
|
|
102
|
+
* the universal contract across providers: an unanswered `tool_use`
|
|
103
|
+
* is a protocol violation, not a decline.
|
|
104
|
+
*/
|
|
105
|
+
async executeBatch(response, denials, prior) {
|
|
35
106
|
const toolCalls = response.message.toolCalls;
|
|
36
107
|
if (!toolCalls) {
|
|
37
108
|
return { messages: [], results: [] };
|
|
@@ -39,6 +110,8 @@ export class ToolExecutor {
|
|
|
39
110
|
this.log.debug('Executing tool batch', {
|
|
40
111
|
runId: this.config.runId,
|
|
41
112
|
toolCount: toolCalls.length,
|
|
113
|
+
deniedCount: denials?.size ?? 0,
|
|
114
|
+
recoveredCount: prior?.size ?? 0,
|
|
42
115
|
tools: toolCalls.map((tc) => tc.function.name),
|
|
43
116
|
});
|
|
44
117
|
// One context per call so each execution can see its own
|
|
@@ -55,11 +128,72 @@ export class ToolExecutor {
|
|
|
55
128
|
const results = new Array(toolCalls.length);
|
|
56
129
|
const parallel = [];
|
|
57
130
|
let serial = Promise.resolve();
|
|
131
|
+
// Bounded fan-out. A model emitting fifty parallel reads used to open
|
|
132
|
+
// fifty file handles and fifty activity records simultaneously; the
|
|
133
|
+
// gate keeps that at a working-set size while preserving completion
|
|
134
|
+
// order independence.
|
|
135
|
+
const gate = new Semaphore(this.config.maxToolConcurrency ?? DEFAULT_TOOL_CONCURRENCY);
|
|
58
136
|
toolCalls.forEach((toolCall, i) => {
|
|
59
|
-
const
|
|
137
|
+
const recovered = prior?.get(toolCall.id);
|
|
138
|
+
if (recovered !== undefined) {
|
|
139
|
+
// This call already ran, in a process that died before the
|
|
140
|
+
// batch settled. Re-running it would be a second charge, a
|
|
141
|
+
// second email, a second row deleted — so the recorded result
|
|
142
|
+
// answers the `tool_use` block and the tool is not touched.
|
|
143
|
+
results[i] = {
|
|
144
|
+
toolCallId: toolCall.id,
|
|
145
|
+
toolName: toolCall.function.name,
|
|
146
|
+
output: recovered.result,
|
|
147
|
+
isError: recovered.isError,
|
|
148
|
+
};
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const denialReason = denials?.get(toolCall.id);
|
|
152
|
+
if (denialReason !== undefined) {
|
|
153
|
+
// Denied calls never touch the tool; they still get a result
|
|
154
|
+
// message so the assistant turn stays fully answered. Run them
|
|
155
|
+
// on the parallel branch — they perform no side effects, so
|
|
156
|
+
// serialization would only add latency.
|
|
157
|
+
parallel.push(this.recordDenial(toolCall, denialReason).then((r) => {
|
|
158
|
+
results[i] = r;
|
|
159
|
+
}));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Per-call, because the event has to name which call it is about:
|
|
163
|
+
// a batch can run several tools at once and a host rendering them
|
|
164
|
+
// side by side needs to know whose progress this is.
|
|
165
|
+
const ctx = {
|
|
166
|
+
...baseContext,
|
|
167
|
+
toolUseId: toolCall.id,
|
|
168
|
+
// Per-call for the same reason: a pause has to be routed back
|
|
169
|
+
// to the call that raised it, and a batch can raise several.
|
|
170
|
+
...(this.config.toolPause ? { requestPause: this.config.toolPause(toolCall.id) } : {}),
|
|
171
|
+
report: (message, fraction) => {
|
|
172
|
+
// Fire-and-forget: a tool reporting progress must never be
|
|
173
|
+
// able to fail because the host's listener threw, and must
|
|
174
|
+
// never have to await the emit mid-work.
|
|
175
|
+
void this.emitEvent({
|
|
176
|
+
type: 'tool_progress',
|
|
177
|
+
runId: this.config.runId,
|
|
178
|
+
toolUseId: toolCall.id,
|
|
179
|
+
toolName: toolCall.function.name,
|
|
180
|
+
message,
|
|
181
|
+
...(fraction !== undefined ? { fraction: Math.min(1, Math.max(0, fraction)) } : {}),
|
|
182
|
+
}).catch(() => { });
|
|
183
|
+
},
|
|
184
|
+
};
|
|
60
185
|
const run = async () => {
|
|
61
186
|
results[i] = await this.executeSingle(toolCall, ctx);
|
|
62
187
|
};
|
|
188
|
+
const gated = async () => {
|
|
189
|
+
await gate.acquire();
|
|
190
|
+
try {
|
|
191
|
+
await run();
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
gate.release();
|
|
195
|
+
}
|
|
196
|
+
};
|
|
63
197
|
let input = {};
|
|
64
198
|
try {
|
|
65
199
|
input = JSON.parse(toolCall.function.arguments || '{}');
|
|
@@ -69,12 +203,35 @@ export class ToolExecutor {
|
|
|
69
203
|
}
|
|
70
204
|
const safe = this.config.tools.get(toolCall.function.name)?.isConcurrencySafe?.(input) === true;
|
|
71
205
|
if (safe)
|
|
72
|
-
parallel.push(
|
|
206
|
+
parallel.push(gated());
|
|
73
207
|
else
|
|
74
208
|
serial = serial.then(run);
|
|
75
209
|
});
|
|
76
210
|
await Promise.all([...parallel, serial]);
|
|
77
|
-
|
|
211
|
+
// Whatever failed above left a hole in `results`; fill every one, so
|
|
212
|
+
// the invariant holds by construction rather than by everything having
|
|
213
|
+
// gone well.
|
|
214
|
+
for (let i = 0; i < toolCalls.length; i++) {
|
|
215
|
+
if (results[i])
|
|
216
|
+
continue;
|
|
217
|
+
const toolCall = toolCalls[i];
|
|
218
|
+
const toolName = toolCall.function.name;
|
|
219
|
+
const message = `Error: Tool "${toolName}" did not complete — the batch failed before it produced a result.`;
|
|
220
|
+
results[i] = { toolCallId: toolCall.id, toolName, output: message, isError: true };
|
|
221
|
+
await this.emitEvent({
|
|
222
|
+
type: 'tool_completed',
|
|
223
|
+
runId: this.config.runId,
|
|
224
|
+
toolUseId: toolCall.id,
|
|
225
|
+
toolName,
|
|
226
|
+
result: message,
|
|
227
|
+
isError: true,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// isError and rich content were computed and then discarded here: the
|
|
231
|
+
// tuple narrowed to {toolCallId, output} BEFORE the message was built,
|
|
232
|
+
// so the failure signal and any image block were structurally lost at
|
|
233
|
+
// the last possible moment.
|
|
234
|
+
const messages = results.map((r) => createToolMessage(r.content ?? r.output, r.toolCallId, r.isError));
|
|
78
235
|
return { messages, results };
|
|
79
236
|
}
|
|
80
237
|
buildToolContext() {
|
|
@@ -94,11 +251,20 @@ export class ToolExecutor {
|
|
|
94
251
|
allowedTools: this.config.allowedTools,
|
|
95
252
|
sandbox: this.config.sandbox,
|
|
96
253
|
fileReadTracker: this.fileReadTracker,
|
|
254
|
+
...(this.parentSpan ? { parentSpan: this.parentSpan } : {}),
|
|
97
255
|
};
|
|
98
256
|
}
|
|
99
257
|
async executeSingle(toolCall, toolContext) {
|
|
100
|
-
|
|
101
|
-
|
|
258
|
+
let toolName = toolCall.function.name;
|
|
259
|
+
// A stream that cut off mid-JSON is the case `repairToolCall` exists
|
|
260
|
+
// for, and it used to be the one case that never reached it: this
|
|
261
|
+
// branch returned before `resolveCall` ran, so the motivating failure
|
|
262
|
+
// was answered with a generic hint while the configured repairer sat
|
|
263
|
+
// unused. Offer it the partial buffer first.
|
|
264
|
+
const truncationRepair = toolCall.metadata?.inputTruncated === true
|
|
265
|
+
? await this.repairTruncatedCall(toolCall, toolName)
|
|
266
|
+
: null;
|
|
267
|
+
if (toolCall.metadata?.inputTruncated === true && !truncationRepair) {
|
|
102
268
|
const message = truncatedToolInputMessage(toolName);
|
|
103
269
|
await this.emitEvent({
|
|
104
270
|
type: 'tool_executing',
|
|
@@ -115,18 +281,30 @@ export class ToolExecutor {
|
|
|
115
281
|
result: message,
|
|
116
282
|
isError: true,
|
|
117
283
|
});
|
|
118
|
-
return { toolCallId: toolCall.id, output: message };
|
|
119
|
-
}
|
|
120
|
-
let input;
|
|
121
|
-
try {
|
|
122
|
-
input = JSON.parse(toolCall.function.arguments);
|
|
284
|
+
return { toolCallId: toolCall.id, toolName, output: message, isError: true };
|
|
123
285
|
}
|
|
124
|
-
|
|
125
|
-
|
|
286
|
+
// A malformed call used to cost a full model round trip to fix: the
|
|
287
|
+
// error went back as a `tool_result`, the model re-read the whole
|
|
288
|
+
// context and tried again. A host that can repair it locally turns
|
|
289
|
+
// that into nothing. No-op when no repairer is configured.
|
|
290
|
+
const resolved = await this.resolveCall(truncationRepair
|
|
291
|
+
? {
|
|
292
|
+
...toolCall,
|
|
293
|
+
function: {
|
|
294
|
+
...toolCall.function,
|
|
295
|
+
name: truncationRepair.toolName ?? toolName,
|
|
296
|
+
arguments: truncationRepair.arguments,
|
|
297
|
+
},
|
|
298
|
+
metadata: {},
|
|
299
|
+
}
|
|
300
|
+
: toolCall);
|
|
301
|
+
toolName = resolved.toolName;
|
|
302
|
+
if (!resolved.ok) {
|
|
303
|
+
// malformed JSON args used to return without ever
|
|
126
304
|
// emitting tool_executing or tool_completed, leaving UI cards
|
|
127
305
|
// orphaned in `streaming_input`. Emit the executing→completed
|
|
128
306
|
// terminal pair so the card lifecycle closes.
|
|
129
|
-
const message =
|
|
307
|
+
const message = resolved.message;
|
|
130
308
|
await this.emitEvent({
|
|
131
309
|
type: 'tool_executing',
|
|
132
310
|
runId: this.config.runId,
|
|
@@ -142,8 +320,9 @@ export class ToolExecutor {
|
|
|
142
320
|
result: message,
|
|
143
321
|
isError: true,
|
|
144
322
|
});
|
|
145
|
-
return { toolCallId: toolCall.id, output: message };
|
|
323
|
+
return { toolCallId: toolCall.id, toolName, output: message, isError: true };
|
|
146
324
|
}
|
|
325
|
+
let input = resolved.input;
|
|
147
326
|
const preOutcome = await this.runPreToolHook(toolName, input);
|
|
148
327
|
if (preOutcome.kind === 'skip' || preOutcome.kind === 'error') {
|
|
149
328
|
return this.recordSyntheticHookOutcome(toolCall.id, toolName, preOutcome.input, preOutcome);
|
|
@@ -186,7 +365,7 @@ export class ToolExecutor {
|
|
|
186
365
|
if (activity) {
|
|
187
366
|
this.activityStore.fail(activity.id, veto.message);
|
|
188
367
|
}
|
|
189
|
-
//
|
|
368
|
+
// probe veto used to skip tool_completed entirely.
|
|
190
369
|
// Emit the terminal event with isError so UI cards finalize.
|
|
191
370
|
await this.emitEvent({
|
|
192
371
|
type: 'tool_completed',
|
|
@@ -198,36 +377,113 @@ export class ToolExecutor {
|
|
|
198
377
|
});
|
|
199
378
|
return {
|
|
200
379
|
toolCallId: toolCall.id,
|
|
380
|
+
toolName,
|
|
201
381
|
output: `Error: ${veto.message}`,
|
|
382
|
+
// The event emitted just above says this failed; the RESULT
|
|
383
|
+
// has to say so too. This was the only result-producing
|
|
384
|
+
// branch in the file that left it off, and `isError` being
|
|
385
|
+
// optional meant the compiler could not notice.
|
|
386
|
+
//
|
|
387
|
+
// Four things degraded off the omission, not one. Two drivers
|
|
388
|
+
// emit their failure marker only when this is true, so the
|
|
389
|
+
// model read a SUCCESSFUL result whose body begins "Error: …"
|
|
390
|
+
// and the failure-recovery path it was trained on never
|
|
391
|
+
// fired. The persisted step recorded a literal
|
|
392
|
+
// `isError: false`, so the run record contradicted its own
|
|
393
|
+
// event stream. And compaction's guard against clearing error
|
|
394
|
+
// results silently excluded vetoed ones.
|
|
395
|
+
isError: true,
|
|
202
396
|
};
|
|
203
397
|
}
|
|
204
398
|
if (this.workingStateManager) {
|
|
205
399
|
extractFromToolCall(this.workingStateManager, toolName, JSON.stringify(input));
|
|
206
400
|
}
|
|
207
401
|
const startMs = Date.now();
|
|
208
|
-
//
|
|
402
|
+
// an unhandled throw from `tools.execute(...)` used to
|
|
209
403
|
// propagate up to `result.ts` as `run_failed` without emitting a
|
|
210
404
|
// terminal `tool_completed`, leaving UI cards stuck in `executing`.
|
|
211
405
|
// Wrap so any throw materialises as an error result.
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
406
|
+
// Typed as the full ToolResult, not a narrowed literal: the narrow
|
|
407
|
+
// version silently DROPPED `content`, so a tool returning an image
|
|
408
|
+
// block had it discarded here — before the wire mapper that was
|
|
409
|
+
// built to carry it ever saw it.
|
|
410
|
+
let result = await this.runOnce(toolName, input, toolContext);
|
|
411
|
+
let post = await this.runPostToolHook(toolName, input, result);
|
|
412
|
+
// In-loop retry. A transient failure used to cost a full model round
|
|
413
|
+
// trip: the error went back as a `tool_result`, the model read it and
|
|
414
|
+
// decided (or didn't) to call again. Strictly opt-in per tool,
|
|
415
|
+
// because the SDK cannot know a tool is idempotent — silently
|
|
416
|
+
// re-running a write or a payment is worse than never retrying.
|
|
417
|
+
const maxRetries = Math.max(0, this.config.tools.get(toolName)?.maxRetries ?? 0);
|
|
418
|
+
for (let attempt = 1;; attempt++) {
|
|
419
|
+
// A missing file will not appear on the second attempt; burning
|
|
420
|
+
// the budget on it only delays the error the model needs to see.
|
|
421
|
+
const toolWants = !result.success && result.retryable === true;
|
|
422
|
+
// A `post_tool_use` hook asking for a retry gets its OWN budget.
|
|
423
|
+
// Bounding it by `maxRetries` made it a silent no-op at the
|
|
424
|
+
// shipped default of 0: the hook's answer was read and discarded
|
|
425
|
+
// on every tool that had not separately opted in. The hook is
|
|
426
|
+
// host code looking at this specific result — a more specific
|
|
427
|
+
// signal than the tool's blanket idempotency declaration — so it
|
|
428
|
+
// is honored, but still bounded so a plugin cannot spin the
|
|
429
|
+
// executor.
|
|
430
|
+
if (!toolWants && !post.retry)
|
|
431
|
+
break;
|
|
432
|
+
const budget = post.retry ? Math.max(maxRetries, HOOK_RETRY_BUDGET) : maxRetries;
|
|
433
|
+
if (attempt > budget)
|
|
434
|
+
break;
|
|
435
|
+
this.log.info('Retrying a failed tool call', {
|
|
219
436
|
runId: this.config.runId,
|
|
220
437
|
tool: toolName,
|
|
221
|
-
|
|
438
|
+
attempt,
|
|
439
|
+
budget,
|
|
440
|
+
requestedByHook: post.retry,
|
|
441
|
+
error: result.error,
|
|
222
442
|
});
|
|
223
|
-
result =
|
|
443
|
+
result = await this.runOnce(toolName, input, toolContext);
|
|
444
|
+
post = await this.runPostToolHook(toolName, input, result);
|
|
224
445
|
}
|
|
225
446
|
const durationMs = Date.now() - startMs;
|
|
226
447
|
const rawOutput = result.success
|
|
227
448
|
? result.output
|
|
228
449
|
: formatFailedToolOutput(result.output, result.error);
|
|
229
450
|
let output = result.success ? this.maybeCompress(toolName, rawOutput) : rawOutput;
|
|
230
|
-
|
|
451
|
+
// Compression is opportunistic and shell-only; the budget is the
|
|
452
|
+
// hard bound that applies to every tool. Runs after compression so
|
|
453
|
+
// a result that shrinks under the cap is never spilled needlessly.
|
|
454
|
+
const budgeted = applyToolOutputBudget({
|
|
455
|
+
toolName,
|
|
456
|
+
toolUseId: toolCall.id,
|
|
457
|
+
output,
|
|
458
|
+
maxChars: this.config.maxToolOutputChars ?? DEFAULT_MAX_TOOL_OUTPUT_CHARS,
|
|
459
|
+
spillDir: this.config.toolOutputDir,
|
|
460
|
+
onError: (message) => this.log.warn('Failed to spill oversized tool output', {
|
|
461
|
+
runId: this.config.runId,
|
|
462
|
+
tool: toolName,
|
|
463
|
+
error: message,
|
|
464
|
+
}),
|
|
465
|
+
});
|
|
466
|
+
if (budgeted.truncated) {
|
|
467
|
+
this.log.warn('Tool output exceeded the model-visible budget', {
|
|
468
|
+
runId: this.config.runId,
|
|
469
|
+
tool: toolName,
|
|
470
|
+
originalLength: budgeted.originalLength,
|
|
471
|
+
spillPath: budgeted.spillPath,
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
output = budgeted.output;
|
|
475
|
+
// A truncated text half drops the rich half with it — the preview is
|
|
476
|
+
// no longer the tool's own payload, so an image alongside it would be
|
|
477
|
+
// illustrating something the model can no longer read. Dropping is
|
|
478
|
+
// right; doing it SILENTLY is not. The model saw a preview and had no
|
|
479
|
+
// way to know an image existed at all, so it reasoned as though the
|
|
480
|
+
// tool had returned text only.
|
|
481
|
+
if (budgeted.truncated && result.content !== undefined) {
|
|
482
|
+
const dropped = describeDroppedContent(result.content);
|
|
483
|
+
if (dropped)
|
|
484
|
+
output = `${output}\n\n${dropped}`;
|
|
485
|
+
}
|
|
486
|
+
const postOverride = post.override;
|
|
231
487
|
if (postOverride !== null) {
|
|
232
488
|
output = postOverride;
|
|
233
489
|
}
|
|
@@ -266,8 +522,114 @@ export class ToolExecutor {
|
|
|
266
522
|
toolName,
|
|
267
523
|
result: output,
|
|
268
524
|
isError: effectiveIsError,
|
|
525
|
+
durationMs,
|
|
526
|
+
// Pre-truncation size, so a host can show "returned 2.1 MB" even
|
|
527
|
+
// though the model only ever saw a preview.
|
|
528
|
+
outputLength: budgeted.originalLength,
|
|
529
|
+
...(budgeted.truncated ? { outputTruncated: true } : {}),
|
|
530
|
+
...(budgeted.spillPath ? { outputSpillPath: budgeted.spillPath } : {}),
|
|
269
531
|
});
|
|
270
|
-
return {
|
|
532
|
+
return {
|
|
533
|
+
toolCallId: toolCall.id,
|
|
534
|
+
toolName,
|
|
535
|
+
output,
|
|
536
|
+
isError: effectiveIsError,
|
|
537
|
+
// A plugin override replaces what the model sees, and a spilled
|
|
538
|
+
// preview is no longer the tool's own payload — neither may carry
|
|
539
|
+
// rich content through.
|
|
540
|
+
...(result.content !== undefined && postOverride === null && !budgeted.truncated
|
|
541
|
+
? { content: this.budgetContent(result.content, toolName) }
|
|
542
|
+
: {}),
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Run a tool under a deadline, with the run abort folded in.
|
|
547
|
+
*
|
|
548
|
+
* `ToolContext.abortSignal` existed but was produced and consumed by
|
|
549
|
+
* nothing: a Stop tore down the model stream and then parked inside
|
|
550
|
+
* `Promise.all` waiting for a tool that had no idea it should quit. A
|
|
551
|
+
* hung MCP stdio server or a `bash` with the old one-hour default
|
|
552
|
+
* could hold a turn open long after the user cancelled.
|
|
553
|
+
*
|
|
554
|
+
* Two mechanisms, because neither alone is enough:
|
|
555
|
+
*
|
|
556
|
+
* 1. The composed signal (run abort OR deadline) is handed to the tool
|
|
557
|
+
* so a cooperative tool actually stops working.
|
|
558
|
+
* 2. The `race` bounds the *executor's* wait regardless, so an
|
|
559
|
+
* uncooperative tool becomes detached rather than blocking.
|
|
560
|
+
*
|
|
561
|
+
* A timeout is reported as a normal failed result, not a throw: the
|
|
562
|
+
* model sees "this timed out" as a `tool_result` and can route around
|
|
563
|
+
* it. A throw would end the run over one slow tool.
|
|
564
|
+
*/
|
|
565
|
+
async executeWithDeadline(toolName, input, toolContext) {
|
|
566
|
+
const timeoutMs = this.config.tools.get(toolName)?.timeoutMs ??
|
|
567
|
+
this.config.toolTimeoutMs ??
|
|
568
|
+
DEFAULT_TOOL_TIMEOUT_MS;
|
|
569
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
570
|
+
return this.config.tools.execute(toolName, input, toolContext);
|
|
571
|
+
}
|
|
572
|
+
const controller = new AbortController();
|
|
573
|
+
const runSignal = this.config.abortSignal;
|
|
574
|
+
const onRunAbort = () => controller.abort(runSignal.reason);
|
|
575
|
+
if (runSignal.aborted)
|
|
576
|
+
controller.abort(runSignal.reason);
|
|
577
|
+
else
|
|
578
|
+
runSignal.addEventListener('abort', onRunAbort, { once: true });
|
|
579
|
+
let timer;
|
|
580
|
+
let timedOut = false;
|
|
581
|
+
try {
|
|
582
|
+
const expired = new Promise((resolve) => {
|
|
583
|
+
timer = setTimeout(() => {
|
|
584
|
+
timedOut = true;
|
|
585
|
+
controller.abort(new Error(`Tool "${toolName}" exceeded ${timeoutMs}ms`));
|
|
586
|
+
resolve('timeout');
|
|
587
|
+
}, timeoutMs);
|
|
588
|
+
});
|
|
589
|
+
const aborted = new Promise((resolve) => {
|
|
590
|
+
if (controller.signal.aborted && !timedOut) {
|
|
591
|
+
resolve('aborted');
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
controller.signal.addEventListener('abort', () => {
|
|
595
|
+
if (!timedOut)
|
|
596
|
+
resolve('aborted');
|
|
597
|
+
}, { once: true });
|
|
598
|
+
});
|
|
599
|
+
const execution = this.config.tools.execute(toolName, input, {
|
|
600
|
+
...toolContext,
|
|
601
|
+
abortSignal: controller.signal,
|
|
602
|
+
});
|
|
603
|
+
// The loser of the race may still reject later; neutralize it so
|
|
604
|
+
// it is never an unhandled rejection.
|
|
605
|
+
execution.catch(() => { });
|
|
606
|
+
const outcome = await Promise.race([execution, expired, aborted]);
|
|
607
|
+
if (outcome === 'timeout') {
|
|
608
|
+
this.log.warn('Tool timed out', {
|
|
609
|
+
runId: this.config.runId,
|
|
610
|
+
tool: toolName,
|
|
611
|
+
timeoutMs,
|
|
612
|
+
});
|
|
613
|
+
return {
|
|
614
|
+
success: false,
|
|
615
|
+
output: '',
|
|
616
|
+
error: `Tool "${toolName}" timed out after ${timeoutMs}ms and was abandoned. It may still be running. Try a narrower input, or a different approach.`,
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
if (outcome === 'aborted') {
|
|
620
|
+
return {
|
|
621
|
+
success: false,
|
|
622
|
+
output: '',
|
|
623
|
+
error: `Tool "${toolName}" was cancelled.`,
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
return outcome;
|
|
627
|
+
}
|
|
628
|
+
finally {
|
|
629
|
+
if (timer !== undefined)
|
|
630
|
+
clearTimeout(timer);
|
|
631
|
+
runSignal.removeEventListener('abort', onRunAbort);
|
|
632
|
+
}
|
|
271
633
|
}
|
|
272
634
|
async runPreToolHook(toolName, input) {
|
|
273
635
|
if (!this.config.pluginManager)
|
|
@@ -297,7 +659,6 @@ export class ToolExecutor {
|
|
|
297
659
|
output: `Error: ${result.message}`,
|
|
298
660
|
};
|
|
299
661
|
case 'retry':
|
|
300
|
-
case 'resume':
|
|
301
662
|
throw new Error(`Plugin hook pre_tool_use returned unsupported action '${result.action}' for tool ${toolName}`);
|
|
302
663
|
default: {
|
|
303
664
|
const _exhaustive = result;
|
|
@@ -307,11 +668,165 @@ export class ToolExecutor {
|
|
|
307
668
|
}
|
|
308
669
|
return { kind: 'continue', input: currentInput };
|
|
309
670
|
}
|
|
671
|
+
/**
|
|
672
|
+
* Turn the call the model issued into a name and a parsed input, giving
|
|
673
|
+
* a configured repairer one chance to fix it first.
|
|
674
|
+
*
|
|
675
|
+
* Exactly one chance: a repairer that produces a call which is still
|
|
676
|
+
* broken will not do better on a second look, and an unbounded loop
|
|
677
|
+
* here is a hang rather than a degradation.
|
|
678
|
+
*
|
|
679
|
+
* `invalid_json` is the ONLY failure that stops the call here, and it
|
|
680
|
+
* stopped it before this function existed too. `unknown_tool` and
|
|
681
|
+
* `schema_validation` merely OFFER the repair and otherwise fall
|
|
682
|
+
* through to the registry, which reports both with better messages —
|
|
683
|
+
* its schema error already ships a "Required: <field>: <type>" hint the
|
|
684
|
+
* model can self-correct from. So with no repairer configured this is
|
|
685
|
+
* behaviorally identical to the bare `JSON.parse` it replaced.
|
|
686
|
+
*/
|
|
687
|
+
async resolveCall(toolCall) {
|
|
688
|
+
let toolName = toolCall.function.name;
|
|
689
|
+
let raw = toolCall.function.arguments;
|
|
690
|
+
for (let attempt = 0;; attempt++) {
|
|
691
|
+
const failure = this.inspectCall(toolName, raw);
|
|
692
|
+
if (!failure)
|
|
693
|
+
return { ok: true, toolName, input: parseArguments(raw) };
|
|
694
|
+
const repair = attempt === 0 && this.config.repairToolCall
|
|
695
|
+
? await this.requestRepair(toolCall, toolName, failure)
|
|
696
|
+
: null;
|
|
697
|
+
if (!repair) {
|
|
698
|
+
if (failure.reason === 'invalid_json') {
|
|
699
|
+
return { ok: false, toolName, message: failure.message };
|
|
700
|
+
}
|
|
701
|
+
return { ok: true, toolName, input: parseArguments(raw) };
|
|
702
|
+
}
|
|
703
|
+
this.log.info('Repaired a malformed tool call', {
|
|
704
|
+
runId: this.config.runId,
|
|
705
|
+
tool: toolName,
|
|
706
|
+
reason: failure.reason,
|
|
707
|
+
...(repair.toolName && repair.toolName !== toolName ? { repairedTo: repair.toolName } : {}),
|
|
708
|
+
});
|
|
709
|
+
toolName = repair.toolName ?? toolName;
|
|
710
|
+
raw = repair.arguments;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
/**
|
|
714
|
+
* What is wrong with this call, or `null` if nothing is.
|
|
715
|
+
*
|
|
716
|
+
* JSON is checked before the tool is looked up: an unparseable argument
|
|
717
|
+
* string is broken regardless of which tool it was aimed at, and it is
|
|
718
|
+
* the one problem the executor itself has to answer.
|
|
719
|
+
*/
|
|
720
|
+
async repairTruncatedCall(toolCall, toolName) {
|
|
721
|
+
if (!this.config.repairToolCall)
|
|
722
|
+
return null;
|
|
723
|
+
// Present the PARTIAL buffer, not the normalized `"{}"` — a repairer
|
|
724
|
+
// handed an empty object has nothing to work from.
|
|
725
|
+
const partial = toolCall.metadata?.partialArguments ?? '';
|
|
726
|
+
const repair = await this.requestRepair({ ...toolCall, function: { ...toolCall.function, arguments: partial } }, toolName, { reason: 'invalid_json', message: truncatedToolInputMessage(toolName) });
|
|
727
|
+
if (repair) {
|
|
728
|
+
this.log.info('Repaired a tool call whose input stream was truncated', {
|
|
729
|
+
runId: this.config.runId,
|
|
730
|
+
tool: toolName,
|
|
731
|
+
partialLength: partial.length,
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
return repair;
|
|
735
|
+
}
|
|
736
|
+
inspectCall(toolName, raw) {
|
|
737
|
+
let parsed;
|
|
738
|
+
try {
|
|
739
|
+
parsed = parseArguments(raw);
|
|
740
|
+
}
|
|
741
|
+
catch {
|
|
742
|
+
return {
|
|
743
|
+
reason: 'invalid_json',
|
|
744
|
+
message: `Error: Invalid JSON in tool arguments for "${toolName}"`,
|
|
745
|
+
};
|
|
746
|
+
}
|
|
747
|
+
const tool = this.config.tools.get?.(toolName);
|
|
748
|
+
if (!tool) {
|
|
749
|
+
// Either the model named a tool that does not exist, or this
|
|
750
|
+
// registry does not implement `get`. Both are the registry's to
|
|
751
|
+
// answer; a repairer still gets offered the `unknown_tool` case.
|
|
752
|
+
return { reason: 'unknown_tool', message: `Error: Unknown tool "${toolName}"` };
|
|
753
|
+
}
|
|
754
|
+
// A registry that hands back a tool with no schema has nothing to
|
|
755
|
+
// validate against; that is not a repairable condition, just an
|
|
756
|
+
// unvalidatable one.
|
|
757
|
+
const validation = tool.inputSchema?.safeParse(parsed);
|
|
758
|
+
if (validation && !validation.success) {
|
|
759
|
+
return {
|
|
760
|
+
reason: 'schema_validation',
|
|
761
|
+
message: `Error: Invalid arguments for "${toolName}": ${validation.error.issues
|
|
762
|
+
.map((issue) => `${issue.path.join('.') || '(root)'}: ${issue.message}`)
|
|
763
|
+
.join('; ')}`,
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
return null;
|
|
767
|
+
}
|
|
768
|
+
async requestRepair(toolCall, toolName, failure) {
|
|
769
|
+
const repairToolCall = this.config.repairToolCall;
|
|
770
|
+
if (!repairToolCall)
|
|
771
|
+
return null;
|
|
772
|
+
const tool = this.config.tools.get(toolName);
|
|
773
|
+
try {
|
|
774
|
+
return await repairToolCall({
|
|
775
|
+
toolCall,
|
|
776
|
+
reason: failure.reason,
|
|
777
|
+
message: failure.message,
|
|
778
|
+
...(tool ? { tool, jsonSchema: renderToolSchema(tool.inputSchema) } : {}),
|
|
779
|
+
availableTools: this.config.tools.listNames(),
|
|
780
|
+
});
|
|
781
|
+
}
|
|
782
|
+
catch (err) {
|
|
783
|
+
// A broken repairer must not turn a recoverable tool error into a
|
|
784
|
+
// failed run: the original error is still a perfectly good answer
|
|
785
|
+
// to give the model.
|
|
786
|
+
this.log.error('repairToolCall threw — falling back to the original error', {
|
|
787
|
+
runId: this.config.runId,
|
|
788
|
+
tool: toolName,
|
|
789
|
+
error: toErrorMessage(err),
|
|
790
|
+
});
|
|
791
|
+
return null;
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
/**
|
|
795
|
+
* One execution attempt, with a throw materialized as an error result.
|
|
796
|
+
*
|
|
797
|
+
* an unhandled throw from `tools.execute(...)` used to
|
|
798
|
+
* propagate up to `result.ts` as `run_failed` without emitting a
|
|
799
|
+
* terminal `tool_completed`, leaving UI cards stuck in `executing`.
|
|
800
|
+
*
|
|
801
|
+
* The return is the full `ToolResult`, not a narrowed literal: the
|
|
802
|
+
* narrow version silently DROPPED `content`, so a tool returning an
|
|
803
|
+
* image block had it discarded here — before the wire mapper built to
|
|
804
|
+
* carry it ever saw it.
|
|
805
|
+
*/
|
|
806
|
+
async runOnce(toolName, input, toolContext) {
|
|
807
|
+
try {
|
|
808
|
+
return await this.executeWithDeadline(toolName, input, toolContext);
|
|
809
|
+
}
|
|
810
|
+
catch (err) {
|
|
811
|
+
const message = toErrorMessage(err);
|
|
812
|
+
this.log.warn('Tool execution threw', {
|
|
813
|
+
runId: this.config.runId,
|
|
814
|
+
tool: toolName,
|
|
815
|
+
error: message,
|
|
816
|
+
});
|
|
817
|
+
return { success: false, output: '', error: message };
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
/**
|
|
821
|
+
* @returns `override` — text replacing the tool's output, or `null`.
|
|
822
|
+
* `retry` — the hook asked for the tool to run again.
|
|
823
|
+
*/
|
|
310
824
|
async runPostToolHook(toolName, input, toolResult) {
|
|
311
825
|
if (!this.config.pluginManager)
|
|
312
|
-
return null;
|
|
826
|
+
return { override: null, retry: false };
|
|
313
827
|
const results = await this.config.pluginManager.executeHooks('post_tool_use', { runId: this.config.runId, toolName, toolInput: input, toolResult }, this.emitEvent);
|
|
314
828
|
let override = null;
|
|
829
|
+
let retry = false;
|
|
315
830
|
for (const result of results) {
|
|
316
831
|
switch (result.action) {
|
|
317
832
|
case 'continue':
|
|
@@ -319,10 +834,16 @@ export class ToolExecutor {
|
|
|
319
834
|
case 'error':
|
|
320
835
|
override = `Error: ${result.message}`;
|
|
321
836
|
continue;
|
|
837
|
+
// `retry` was a declared variant with no implementation: every
|
|
838
|
+
// site that consumed it threw. Here it finally means something
|
|
839
|
+
// — the hook saw the result and wants the tool run again —
|
|
840
|
+
// and it is bounded by the same per-tool retry budget, so a
|
|
841
|
+
// plugin cannot spin the executor.
|
|
842
|
+
case 'retry':
|
|
843
|
+
retry = true;
|
|
844
|
+
continue;
|
|
322
845
|
case 'skip':
|
|
323
846
|
case 'modify':
|
|
324
|
-
case 'retry':
|
|
325
|
-
case 'resume':
|
|
326
847
|
throw new Error(`Plugin hook post_tool_use returned unsupported action '${result.action}' for tool ${toolName}`);
|
|
327
848
|
default: {
|
|
328
849
|
const _exhaustive = result;
|
|
@@ -330,7 +851,57 @@ export class ToolExecutor {
|
|
|
330
851
|
}
|
|
331
852
|
}
|
|
332
853
|
}
|
|
333
|
-
return override;
|
|
854
|
+
return { override, retry };
|
|
855
|
+
}
|
|
856
|
+
/**
|
|
857
|
+
* Answer a tool call that policy or a human refused, without executing
|
|
858
|
+
* it. Emits the same `tool_executing` → `tool_completed` pair as a real
|
|
859
|
+
* execution so UI cards reach a terminal state instead of hanging in
|
|
860
|
+
* `executing`, and records a failed activity for the trace.
|
|
861
|
+
*/
|
|
862
|
+
async recordDenial(toolCall, reason) {
|
|
863
|
+
const toolName = toolCall.function.name;
|
|
864
|
+
let input = {};
|
|
865
|
+
try {
|
|
866
|
+
input = JSON.parse(toolCall.function.arguments || '{}');
|
|
867
|
+
}
|
|
868
|
+
catch {
|
|
869
|
+
input = toolCall.function.arguments;
|
|
870
|
+
}
|
|
871
|
+
const output = deniedToolOutput(toolName, reason);
|
|
872
|
+
this.log.info('Tool call denied — synthesizing tool_result', {
|
|
873
|
+
runId: this.config.runId,
|
|
874
|
+
tool: toolName,
|
|
875
|
+
toolUseId: toolCall.id,
|
|
876
|
+
reason,
|
|
877
|
+
});
|
|
878
|
+
const activity = this.activityStore.create({
|
|
879
|
+
type: 'tool_call',
|
|
880
|
+
description: toolName,
|
|
881
|
+
input,
|
|
882
|
+
toolName,
|
|
883
|
+
toolCallId: toolCall.id,
|
|
884
|
+
});
|
|
885
|
+
if (activity) {
|
|
886
|
+
this.activityStore.start(activity.id);
|
|
887
|
+
this.activityStore.fail(activity.id, output);
|
|
888
|
+
}
|
|
889
|
+
await this.emitEvent({
|
|
890
|
+
type: 'tool_executing',
|
|
891
|
+
runId: this.config.runId,
|
|
892
|
+
toolUseId: toolCall.id,
|
|
893
|
+
toolName,
|
|
894
|
+
input,
|
|
895
|
+
});
|
|
896
|
+
await this.emitEvent({
|
|
897
|
+
type: 'tool_completed',
|
|
898
|
+
runId: this.config.runId,
|
|
899
|
+
toolUseId: toolCall.id,
|
|
900
|
+
toolName,
|
|
901
|
+
result: output,
|
|
902
|
+
isError: true,
|
|
903
|
+
});
|
|
904
|
+
return { toolCallId: toolCall.id, toolName, output, isError: true };
|
|
334
905
|
}
|
|
335
906
|
async recordSyntheticHookOutcome(toolCallId, toolName, input, outcome) {
|
|
336
907
|
const activity = this.activityStore.create({
|
|
@@ -364,7 +935,39 @@ export class ToolExecutor {
|
|
|
364
935
|
result: outcome.output,
|
|
365
936
|
isError: outcome.kind === 'error',
|
|
366
937
|
});
|
|
367
|
-
return { toolCallId, output: outcome.output };
|
|
938
|
+
return { toolCallId, toolName, output: outcome.output, isError: outcome.kind === 'error' };
|
|
939
|
+
}
|
|
940
|
+
/**
|
|
941
|
+
* Bound the rich channel, or leave it alone when no cap is configured.
|
|
942
|
+
*
|
|
943
|
+
* Refused whole rather than trimmed: half a base64 payload is not a
|
|
944
|
+
* smaller image, it is a corrupt one, and a driver handed it would
|
|
945
|
+
* either fail the request or show the model noise. The text half stays
|
|
946
|
+
* untouched, so the result still says what happened — and the
|
|
947
|
+
* replacement names what was withheld and how big it was, which is what
|
|
948
|
+
* lets the agent ask for a smaller region instead of retrying the same
|
|
949
|
+
* call.
|
|
950
|
+
*/
|
|
951
|
+
budgetContent(content, toolName) {
|
|
952
|
+
const cap = this.config.maxToolContentBytes ?? 0;
|
|
953
|
+
if (cap <= 0)
|
|
954
|
+
return content;
|
|
955
|
+
const size = measureContentBytes(content);
|
|
956
|
+
if (size <= cap)
|
|
957
|
+
return content;
|
|
958
|
+
this.log.warn('Tool result content exceeded the rich-content budget', {
|
|
959
|
+
runId: this.config.runId,
|
|
960
|
+
tool: toolName,
|
|
961
|
+
contentBytes: size,
|
|
962
|
+
cap,
|
|
963
|
+
});
|
|
964
|
+
const described = describeDroppedContent(content);
|
|
965
|
+
return [
|
|
966
|
+
{
|
|
967
|
+
type: 'text',
|
|
968
|
+
text: `[rich content withheld: ${size} base64 chars exceeds this run's ${cap} cap${described ? ` — ${described}` : ''}]`,
|
|
969
|
+
},
|
|
970
|
+
];
|
|
368
971
|
}
|
|
369
972
|
maybeCompress(toolName, output) {
|
|
370
973
|
const tool = this.config.tools.get(toolName);
|
|
@@ -383,6 +986,30 @@ export class ToolExecutor {
|
|
|
383
986
|
return compressed;
|
|
384
987
|
}
|
|
385
988
|
}
|
|
989
|
+
/** Minimal counting semaphore. FIFO, no timeout — the deadline is per-tool. */
|
|
990
|
+
class Semaphore {
|
|
991
|
+
available;
|
|
992
|
+
waiters = [];
|
|
993
|
+
constructor(permits) {
|
|
994
|
+
this.available = Math.max(1, permits);
|
|
995
|
+
}
|
|
996
|
+
acquire() {
|
|
997
|
+
if (this.available > 0) {
|
|
998
|
+
this.available--;
|
|
999
|
+
return Promise.resolve();
|
|
1000
|
+
}
|
|
1001
|
+
return new Promise((resolve) => {
|
|
1002
|
+
this.waiters.push(resolve);
|
|
1003
|
+
});
|
|
1004
|
+
}
|
|
1005
|
+
release() {
|
|
1006
|
+
const next = this.waiters.shift();
|
|
1007
|
+
if (next)
|
|
1008
|
+
next();
|
|
1009
|
+
else
|
|
1010
|
+
this.available++;
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
386
1013
|
function formatFailedToolOutput(output, error) {
|
|
387
1014
|
const errorText = `Error: ${error ?? 'Tool execution failed'}`;
|
|
388
1015
|
if (!output || output.trim().length === 0)
|