@namzu/sdk 34.2.0 → 36.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 +171 -0
- package/README.md +2 -6
- package/dist/agents/PipelineAgent.d.ts.map +1 -1
- package/dist/agents/PipelineAgent.js +118 -100
- package/dist/agents/PipelineAgent.js.map +1 -1
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +2 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/RouterAgent.d.ts.map +1 -1
- package/dist/agents/RouterAgent.js +105 -61
- package/dist/agents/RouterAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +8 -4
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/budget.d.ts +6 -0
- package/dist/agents/budget.d.ts.map +1 -0
- package/dist/agents/budget.js +33 -0
- package/dist/agents/budget.js.map +1 -0
- package/dist/agents/explore.d.ts +20 -0
- package/dist/agents/explore.d.ts.map +1 -0
- package/dist/agents/explore.js +26 -0
- package/dist/agents/explore.js.map +1 -0
- package/dist/agents/file-definitions.d.ts +80 -0
- package/dist/agents/file-definitions.d.ts.map +1 -0
- package/dist/agents/file-definitions.js +179 -0
- package/dist/agents/file-definitions.js.map +1 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +6 -0
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +22 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/bus/lock.d.ts.map +1 -1
- package/dist/bus/lock.js +1 -10
- package/dist/bus/lock.js.map +1 -1
- package/dist/compaction/consolidation.d.ts +31 -0
- package/dist/compaction/consolidation.d.ts.map +1 -0
- package/dist/compaction/consolidation.js +63 -0
- package/dist/compaction/consolidation.js.map +1 -0
- package/dist/compaction/factory.d.ts.map +1 -1
- package/dist/compaction/factory.js +3 -0
- package/dist/compaction/factory.js.map +1 -1
- package/dist/compaction/index.d.ts +6 -1
- package/dist/compaction/index.d.ts.map +1 -1
- package/dist/compaction/index.js +6 -0
- package/dist/compaction/index.js.map +1 -1
- package/dist/compaction/manager.d.ts +7 -0
- package/dist/compaction/manager.d.ts.map +1 -1
- package/dist/compaction/manager.js +31 -0
- package/dist/compaction/manager.js.map +1 -1
- package/dist/compaction/plan.d.ts +23 -0
- package/dist/compaction/plan.d.ts.map +1 -1
- package/dist/compaction/plan.js +41 -24
- package/dist/compaction/plan.js.map +1 -1
- package/dist/compaction/salience/bm25.d.ts +26 -0
- package/dist/compaction/salience/bm25.d.ts.map +1 -0
- package/dist/compaction/salience/bm25.js +56 -0
- package/dist/compaction/salience/bm25.js.map +1 -0
- package/dist/compaction/salience/goal.d.ts +21 -0
- package/dist/compaction/salience/goal.d.ts.map +1 -0
- package/dist/compaction/salience/goal.js +32 -0
- package/dist/compaction/salience/goal.js.map +1 -0
- package/dist/compaction/salience/index.d.ts +4 -0
- package/dist/compaction/salience/index.d.ts.map +1 -0
- package/dist/compaction/salience/index.js +4 -0
- package/dist/compaction/salience/index.js.map +1 -0
- package/dist/compaction/salience/minhash.d.ts +17 -0
- package/dist/compaction/salience/minhash.d.ts.map +1 -0
- package/dist/compaction/salience/minhash.js +54 -0
- package/dist/compaction/salience/minhash.js.map +1 -0
- package/dist/compaction/salience/score.d.ts +64 -0
- package/dist/compaction/salience/score.d.ts.map +1 -0
- package/dist/compaction/salience/score.js +256 -0
- package/dist/compaction/salience/score.js.map +1 -0
- package/dist/compaction/salience/tokenize.d.ts +20 -0
- package/dist/compaction/salience/tokenize.d.ts.map +1 -0
- package/dist/compaction/salience/tokenize.js +92 -0
- package/dist/compaction/salience/tokenize.js.map +1 -0
- package/dist/compaction/salience/working-set.d.ts +59 -0
- package/dist/compaction/salience/working-set.d.ts.map +1 -0
- package/dist/compaction/salience/working-set.js +137 -0
- package/dist/compaction/salience/working-set.js.map +1 -0
- package/dist/compaction/serializer.d.ts +2 -0
- package/dist/compaction/serializer.d.ts.map +1 -1
- package/dist/compaction/serializer.js +15 -0
- package/dist/compaction/serializer.js.map +1 -1
- package/dist/compaction/token-estimate.d.ts +13 -0
- package/dist/compaction/token-estimate.d.ts.map +1 -0
- package/dist/compaction/token-estimate.js +58 -0
- package/dist/compaction/token-estimate.js.map +1 -0
- package/dist/compaction/tool-result-editing.d.ts +10 -2
- package/dist/compaction/tool-result-editing.d.ts.map +1 -1
- package/dist/compaction/tool-result-editing.js +22 -24
- package/dist/compaction/tool-result-editing.js.map +1 -1
- package/dist/compaction/types.d.ts +22 -1
- package/dist/compaction/types.d.ts.map +1 -1
- package/dist/compaction/wire.d.ts +3 -1
- package/dist/compaction/wire.d.ts.map +1 -1
- package/dist/compaction/wire.js +2 -0
- package/dist/compaction/wire.js.map +1 -1
- package/dist/config/runtime.d.ts +58 -28
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js +13 -1
- package/dist/config/runtime.js.map +1 -1
- package/dist/connector/builtins/http.d.ts.map +1 -1
- package/dist/connector/builtins/http.js +2 -8
- package/dist/connector/builtins/http.js.map +1 -1
- package/dist/connector/builtins/webhook.js +2 -2
- package/dist/connector/builtins/webhook.js.map +1 -1
- package/dist/connector/mcp/adapter.d.ts +2 -0
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +30 -0
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/tools/adapter.js +2 -2
- package/dist/connector/tools/adapter.js.map +1 -1
- package/dist/connector/tools/definitions.js +2 -2
- package/dist/connector/tools/definitions.js.map +1 -1
- package/dist/constants/compaction/index.d.ts +1 -0
- package/dist/constants/compaction/index.d.ts.map +1 -1
- package/dist/constants/compaction/index.js +1 -0
- package/dist/constants/compaction/index.js.map +1 -1
- package/dist/constants/telemetry/index.d.ts +0 -1
- package/dist/constants/telemetry/index.d.ts.map +1 -1
- package/dist/constants/telemetry/index.js +0 -1
- package/dist/constants/telemetry/index.js.map +1 -1
- package/dist/contracts/a2a.d.ts +5 -5
- package/dist/contracts/api.d.ts +4 -2
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/schemas.d.ts +1 -15
- package/dist/contracts/schemas.d.ts.map +1 -1
- package/dist/contracts/schemas.js +5 -20
- package/dist/contracts/schemas.js.map +1 -1
- package/dist/invariants/index.d.ts +1 -1
- package/dist/manager/agent/lifecycle.d.ts +2 -18
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +373 -340
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +3 -0
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +35 -5
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +1 -0
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/shell-hook.d.ts +128 -0
- package/dist/plugin/shell-hook.d.ts.map +1 -0
- package/dist/plugin/shell-hook.js +299 -0
- package/dist/plugin/shell-hook.js.map +1 -0
- package/dist/prompt/coding-agent-doctrine.d.ts +63 -0
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -0
- package/dist/prompt/coding-agent-doctrine.js +100 -0
- package/dist/prompt/coding-agent-doctrine.js.map +1 -0
- package/dist/prompt/index.d.ts +2 -0
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +1 -0
- package/dist/prompt/index.js.map +1 -1
- package/dist/provider/errors.d.ts +1 -1
- package/dist/provider/errors.js +1 -1
- package/dist/provider/fallback.d.ts +2 -0
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +3 -1
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/retry.d.ts +2 -0
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +3 -1
- package/dist/provider/retry.js.map +1 -1
- package/dist/provider/token-budget.d.ts +13 -0
- package/dist/provider/token-budget.d.ts.map +1 -0
- package/dist/provider/token-budget.js +150 -0
- package/dist/provider/token-budget.js.map +1 -0
- package/dist/public-runtime.d.ts +14 -14
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +15 -10
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +2 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +2 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +12 -2
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/command/kernel-commands.d.ts.map +1 -1
- package/dist/registry/command/kernel-commands.js +18 -6
- package/dist/registry/command/kernel-commands.js.map +1 -1
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +4 -1
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/run/LimitChecker.js +1 -1
- package/dist/run/LimitChecker.js.map +1 -1
- package/dist/run/drain.js +1 -1
- package/dist/run/reporter.d.ts.map +1 -1
- package/dist/run/reporter.js +15 -0
- package/dist/run/reporter.js.map +1 -1
- package/dist/run/token-budget.d.ts +108 -0
- package/dist/run/token-budget.d.ts.map +1 -0
- package/dist/run/token-budget.js +591 -0
- package/dist/run/token-budget.js.map +1 -0
- package/dist/runtime/jobs/registry.d.ts +29 -0
- package/dist/runtime/jobs/registry.d.ts.map +1 -1
- package/dist/runtime/jobs/registry.js +98 -18
- package/dist/runtime/jobs/registry.js.map +1 -1
- package/dist/runtime/query/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/checkpoint.js +10 -3
- package/dist/runtime/query/checkpoint.js.map +1 -1
- package/dist/runtime/query/context.d.ts +2 -26
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +1 -29
- package/dist/runtime/query/context.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +13 -9
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +144 -55
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/guard.d.ts.map +1 -1
- package/dist/runtime/query/guard.js +8 -0
- package/dist/runtime/query/guard.js.map +1 -1
- package/dist/runtime/query/index.d.ts +42 -4
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +153 -52
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +3 -3
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +47 -11
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +98 -30
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +4 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +29 -7
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/working-memory.js +25 -15
- package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +10 -5
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/plugin-hooks.d.ts +1 -1
- package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
- package/dist/runtime/query/plugin-hooks.js +20 -1
- 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 +14 -4
- package/dist/runtime/query/prompt.js.map +1 -1
- package/dist/runtime/query/repeat-call.d.ts +20 -2
- package/dist/runtime/query/repeat-call.d.ts.map +1 -1
- package/dist/runtime/query/repeat-call.js +35 -7
- package/dist/runtime/query/repeat-call.js.map +1 -1
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +9 -0
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +142 -0
- package/dist/runtime/query/review-policy.d.ts.map +1 -0
- package/dist/runtime/query/review-policy.js +144 -0
- package/dist/runtime/query/review-policy.js.map +1 -0
- package/dist/runtime/query/run-state.d.ts.map +1 -1
- package/dist/runtime/query/run-state.js +4 -0
- package/dist/runtime/query/run-state.js.map +1 -1
- package/dist/runtime/query/steering.d.ts +4 -0
- package/dist/runtime/query/steering.d.ts.map +1 -1
- package/dist/runtime/query/steering.js +29 -0
- package/dist/runtime/query/steering.js.map +1 -1
- package/dist/runtime/query/token-budget.d.ts +7 -0
- package/dist/runtime/query/token-budget.d.ts.map +1 -0
- package/dist/runtime/query/token-budget.js +101 -0
- package/dist/runtime/query/token-budget.js.map +1 -0
- package/dist/runtime/query/tool-output-budget.d.ts +2 -0
- package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
- package/dist/runtime/query/tool-output-budget.js +29 -11
- package/dist/runtime/query/tool-output-budget.js.map +1 -1
- package/dist/runtime/query/tool-pause.d.ts.map +1 -1
- package/dist/runtime/query/tool-pause.js +4 -2
- package/dist/runtime/query/tool-pause.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +4 -0
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +4 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/sandbox/file-walk-program.d.ts +3 -0
- package/dist/sandbox/file-walk-program.d.ts.map +1 -0
- package/dist/sandbox/file-walk-program.js +94 -0
- package/dist/sandbox/file-walk-program.js.map +1 -0
- package/dist/sandbox/file-walk.d.ts +12 -0
- package/dist/sandbox/file-walk.d.ts.map +1 -0
- package/dist/sandbox/file-walk.js +429 -0
- package/dist/sandbox/file-walk.js.map +1 -0
- 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/provider/local.d.ts +3 -1
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +121 -12
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/scheduler/completion-inbox.d.ts +3 -2
- package/dist/scheduler/completion-inbox.d.ts.map +1 -1
- package/dist/scheduler/completion-inbox.js +29 -15
- package/dist/scheduler/completion-inbox.js.map +1 -1
- package/dist/scheduler/delegating.d.ts +1 -0
- package/dist/scheduler/delegating.d.ts.map +1 -1
- package/dist/scheduler/delegating.js +29 -12
- package/dist/scheduler/delegating.js.map +1 -1
- package/dist/scheduler/local.d.ts +1 -0
- package/dist/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +4 -7
- package/dist/scheduler/local.js.map +1 -1
- package/dist/session/index.d.ts +0 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +0 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/workspace/path-builder.d.ts.map +1 -1
- package/dist/session/workspace/path-builder.js +5 -4
- package/dist/session/workspace/path-builder.js.map +1 -1
- package/dist/store/feedback/disk.d.ts.map +1 -1
- package/dist/store/feedback/disk.js +4 -6
- package/dist/store/feedback/disk.js.map +1 -1
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/memory/disk.d.ts.map +1 -1
- package/dist/store/memory/disk.js +3 -12
- package/dist/store/memory/disk.js.map +1 -1
- package/dist/store/run/checkpoint-disk.d.ts +3 -3
- package/dist/store/run/checkpoint-disk.d.ts.map +1 -1
- package/dist/store/run/checkpoint-disk.js +14 -26
- package/dist/store/run/checkpoint-disk.js.map +1 -1
- package/dist/store/run/claim-disk.js +1 -1
- package/dist/store/run/conformance.d.ts +1 -1
- package/dist/store/run/conformance.d.ts.map +1 -1
- package/dist/store/run/conformance.js +41 -33
- package/dist/store/run/conformance.js.map +1 -1
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +20 -4
- package/dist/store/run/disk.js.map +1 -1
- package/dist/store/run/token-budget-disk.d.ts +37 -0
- package/dist/store/run/token-budget-disk.d.ts.map +1 -0
- package/dist/store/run/token-budget-disk.js +208 -0
- package/dist/store/run/token-budget-disk.js.map +1 -0
- package/dist/store/session/disk.d.ts +4 -13
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +34 -31
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/session/memory.d.ts +2 -0
- package/dist/store/session/memory.d.ts.map +1 -1
- package/dist/store/session/memory.js +41 -2
- package/dist/store/session/memory.js.map +1 -1
- package/dist/store/task/disk.d.ts.map +1 -1
- package/dist/store/task/disk.js +7 -8
- package/dist/store/task/disk.js.map +1 -1
- package/dist/store/topic/memory.d.ts +2 -0
- package/dist/store/topic/memory.d.ts.map +1 -1
- package/dist/store/topic/memory.js +13 -1
- package/dist/store/topic/memory.js.map +1 -1
- package/dist/test-support/ids.d.ts +4 -19
- package/dist/test-support/ids.d.ts.map +1 -1
- package/dist/test-support/ids.js +51 -59
- package/dist/test-support/ids.js.map +1 -1
- package/dist/tools/advisory/index.d.ts.map +1 -1
- package/dist/tools/advisory/index.js +3 -1
- package/dist/tools/advisory/index.js.map +1 -1
- package/dist/tools/builtins/bash.d.ts +2 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +224 -70
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/computer-use.d.ts +2 -2
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +4 -2
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/edit.js +2 -2
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/glob.d.ts +2 -1
- package/dist/tools/builtins/glob.d.ts.map +1 -1
- package/dist/tools/builtins/glob.js +95 -103
- 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 +155 -111
- package/dist/tools/builtins/grep.js.map +1 -1
- package/dist/tools/builtins/ls.js +4 -4
- package/dist/tools/builtins/ls.js.map +1 -1
- package/dist/tools/builtins/lsp.js +2 -2
- package/dist/tools/builtins/lsp.js.map +1 -1
- package/dist/tools/builtins/read-file.js +2 -2
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/write-file.js +2 -2
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/coordinator/ask-user-question.d.ts +33 -0
- package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -0
- package/dist/tools/coordinator/ask-user-question.js +237 -0
- package/dist/tools/coordinator/ask-user-question.js.map +1 -0
- package/dist/tools/coordinator/index.d.ts +1 -2
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +4 -220
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/memory/read.d.ts.map +1 -1
- package/dist/tools/memory/read.js +2 -4
- package/dist/tools/memory/read.js.map +1 -1
- package/dist/tools/paths.d.ts +13 -0
- package/dist/tools/paths.d.ts.map +1 -1
- package/dist/tools/paths.js +53 -0
- package/dist/tools/paths.js.map +1 -1
- package/dist/tools/roster.d.ts +27 -0
- package/dist/tools/roster.d.ts.map +1 -0
- package/dist/tools/roster.js +42 -0
- package/dist/tools/roster.js.map +1 -0
- package/dist/types/agent/base.d.ts +5 -0
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/pipeline.d.ts +3 -0
- package/dist/types/agent/pipeline.d.ts.map +1 -1
- package/dist/types/agent/router.d.ts +2 -3
- package/dist/types/agent/router.d.ts.map +1 -1
- package/dist/types/agent/scheduler.d.ts +3 -0
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +5 -16
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/agent/task.js.map +1 -1
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/index.js +3 -0
- package/dist/types/common/index.js.map +1 -1
- package/dist/types/computer-use/index.d.ts +8 -0
- package/dist/types/computer-use/index.d.ts.map +1 -1
- package/dist/types/computer-use/index.js.map +1 -1
- package/dist/types/hitl/index.d.ts +5 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/ids/brand.d.ts +5 -47
- package/dist/types/ids/brand.d.ts.map +1 -1
- package/dist/types/ids/brand.js +2 -39
- package/dist/types/ids/brand.js.map +1 -1
- package/dist/types/ids/index.d.ts +59 -69
- package/dist/types/ids/index.d.ts.map +1 -1
- package/dist/types/ids/index.js +12 -10
- package/dist/types/ids/index.js.map +1 -1
- package/dist/types/permission/index.d.ts +9 -0
- package/dist/types/permission/index.d.ts.map +1 -1
- package/dist/types/permission/index.js +9 -1
- package/dist/types/permission/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +45 -4
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js +7 -0
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/run/config.d.ts +3 -0
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/emergency.d.ts +5 -0
- package/dist/types/run/emergency.d.ts.map +1 -1
- package/dist/types/run/emergency.js.map +1 -1
- package/dist/types/run/entity.d.ts +6 -2
- package/dist/types/run/entity.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +35 -0
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/index.d.ts +1 -0
- package/dist/types/run/index.d.ts.map +1 -1
- package/dist/types/run/index.js +1 -0
- package/dist/types/run/index.js.map +1 -1
- package/dist/types/run/state.d.ts +16 -15
- package/dist/types/run/state.d.ts.map +1 -1
- package/dist/types/run/state.js +41 -22
- package/dist/types/run/state.js.map +1 -1
- package/dist/types/run/stop-reason.d.ts +3 -14
- package/dist/types/run/stop-reason.d.ts.map +1 -1
- package/dist/types/run/token-budget-store.d.ts +29 -0
- package/dist/types/run/token-budget-store.d.ts.map +1 -0
- package/dist/types/run/token-budget-store.js +25 -0
- package/dist/types/run/token-budget-store.js.map +1 -0
- package/dist/types/sandbox/index.d.ts +47 -2
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/session/store.d.ts +8 -0
- package/dist/types/session/store.d.ts.map +1 -1
- package/dist/types/tool/index.d.ts +15 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +1 -1
- package/dist/utils/frontmatter.js +1 -1
- package/dist/utils/id-format.d.ts +3 -0
- package/dist/utils/id-format.d.ts.map +1 -0
- package/dist/utils/id-format.js +9 -0
- package/dist/utils/id-format.js.map +1 -0
- package/dist/utils/id.d.ts +65 -32
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +168 -148
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/log/exception.js +1 -1
- package/dist/utils/log/exception.js.map +1 -1
- package/dist/utils/log/index.d.ts.map +1 -1
- package/dist/utils/log/index.js +1 -2
- package/dist/utils/log/index.js.map +1 -1
- package/dist/utils/log/templates.d.ts.map +1 -1
- package/dist/utils/log/templates.js +0 -1
- package/dist/utils/log/templates.js.map +1 -1
- package/package.json +6 -1
- package/src/agents/AGENTS.md +1 -1
- package/src/agents/PipelineAgent.ts +129 -109
- package/src/agents/ReactiveAgent.ts +2 -0
- package/src/agents/RouterAgent.ts +120 -73
- package/src/agents/SupervisorAgent.ts +12 -4
- package/src/agents/budget.ts +42 -0
- package/src/agents/explore.ts +29 -0
- package/src/agents/file-definitions.ts +237 -0
- package/src/agents/index.ts +15 -0
- package/src/bridge/a2a/mapper.ts +6 -0
- package/src/bridge/sse/mapper.ts +22 -0
- package/src/bus/lock.ts +1 -10
- package/src/compaction/consolidation.ts +79 -0
- package/src/compaction/factory.ts +3 -0
- package/src/compaction/index.ts +34 -4
- package/src/compaction/manager.ts +39 -1
- package/src/compaction/plan.ts +52 -21
- package/src/compaction/salience/bm25.ts +72 -0
- package/src/compaction/salience/goal.ts +44 -0
- package/src/compaction/salience/index.ts +19 -0
- package/src/compaction/salience/minhash.ts +53 -0
- package/src/compaction/salience/score.ts +305 -0
- package/src/compaction/salience/tokenize.ts +89 -0
- package/src/compaction/salience/working-set.ts +187 -0
- package/src/compaction/serializer.ts +16 -0
- package/src/compaction/token-estimate.ts +57 -0
- package/src/compaction/tool-result-editing.ts +28 -26
- package/src/compaction/types.ts +24 -1
- package/src/compaction/wire.ts +5 -1
- package/src/config/runtime.ts +13 -1
- package/src/connector/builtins/http.ts +2 -8
- package/src/connector/builtins/webhook.ts +2 -2
- package/src/connector/mcp/adapter.ts +32 -0
- package/src/connector/tools/adapter.ts +2 -2
- package/src/connector/tools/definitions.ts +2 -2
- package/src/constants/compaction/index.ts +1 -0
- package/src/constants/telemetry/index.ts +0 -1
- package/src/contracts/api.ts +5 -1
- package/src/contracts/schemas.ts +6 -20
- package/src/invariants/index.ts +1 -1
- package/src/manager/agent/lifecycle.ts +380 -352
- package/src/manager/run/persistence.ts +35 -5
- package/src/plugin/index.ts +19 -0
- package/src/plugin/shell-hook.ts +403 -0
- package/src/prompt/coding-agent-doctrine.ts +118 -0
- package/src/prompt/index.ts +8 -0
- package/src/provider/errors.ts +1 -1
- package/src/provider/fallback.ts +4 -1
- package/src/provider/retry.ts +4 -1
- package/src/provider/token-budget.ts +158 -0
- package/src/public-runtime.ts +56 -28
- package/src/public-tools.ts +5 -0
- package/src/public-types.ts +65 -0
- package/src/registry/command/kernel-commands.ts +16 -6
- package/src/registry/tool/execute.ts +4 -1
- package/src/run/LimitChecker.ts +1 -1
- package/src/run/drain.ts +1 -1
- package/src/run/reporter.ts +15 -0
- package/src/run/token-budget.ts +692 -0
- package/src/runtime/jobs/registry.ts +123 -17
- package/src/runtime/query/checkpoint.ts +10 -3
- package/src/runtime/query/context.ts +3 -57
- package/src/runtime/query/executor.ts +181 -71
- package/src/runtime/query/guard.ts +8 -0
- package/src/runtime/query/index.ts +209 -62
- package/src/runtime/query/iteration/index.ts +53 -15
- package/src/runtime/query/iteration/phases/compaction.ts +130 -31
- package/src/runtime/query/iteration/phases/context.ts +4 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +39 -7
- package/src/runtime/query/iteration/phases/working-memory.ts +23 -14
- package/src/runtime/query/iteration/stream-turn.ts +9 -5
- package/src/runtime/query/plugin-hooks.ts +24 -2
- package/src/runtime/query/prompt.ts +21 -4
- package/src/runtime/query/repeat-call.ts +42 -7
- package/src/runtime/query/result.ts +9 -0
- package/src/runtime/query/review-policy.ts +231 -0
- package/src/runtime/query/run-state.ts +4 -0
- package/src/runtime/query/steering.ts +32 -0
- package/src/runtime/query/token-budget.ts +127 -0
- package/src/runtime/query/tool-output-budget.ts +33 -10
- package/src/runtime/query/tool-pause.ts +4 -2
- package/src/runtime/query/tooling.ts +8 -0
- package/src/sandbox/file-walk-program.ts +93 -0
- package/src/sandbox/file-walk.ts +463 -0
- package/src/sandbox/index.ts +2 -0
- package/src/sandbox/provider/local.ts +136 -13
- package/src/scheduler/completion-inbox.ts +29 -19
- package/src/scheduler/delegating.ts +35 -13
- package/src/scheduler/local.ts +5 -7
- package/src/session/index.ts +0 -1
- package/src/session/workspace/path-builder.ts +5 -4
- package/src/store/feedback/disk.ts +4 -6
- package/src/store/index.ts +2 -0
- package/src/store/memory/disk.ts +3 -11
- package/src/store/run/checkpoint-disk.ts +14 -27
- package/src/store/run/claim-disk.ts +1 -1
- package/src/store/run/conformance.ts +55 -39
- package/src/store/run/disk.ts +19 -4
- package/src/store/run/token-budget-disk.ts +247 -0
- package/src/store/session/disk.ts +36 -29
- package/src/store/session/memory.ts +38 -1
- package/src/store/task/disk.ts +7 -8
- package/src/store/topic/memory.ts +13 -1
- package/src/test-support/ids.ts +62 -59
- package/src/tools/advisory/index.ts +3 -1
- package/src/tools/builtins/bash.ts +241 -70
- package/src/tools/builtins/computer-use.ts +6 -2
- package/src/tools/builtins/edit.ts +2 -2
- package/src/tools/builtins/glob.ts +104 -122
- package/src/tools/builtins/grep.ts +166 -132
- package/src/tools/builtins/ls.ts +4 -4
- package/src/tools/builtins/lsp.ts +2 -2
- package/src/tools/builtins/read-file.ts +2 -2
- package/src/tools/builtins/write-file.ts +2 -2
- package/src/tools/coordinator/ask-user-question.ts +284 -0
- package/src/tools/coordinator/index.ts +5 -248
- package/src/tools/memory/read.ts +2 -4
- package/src/tools/paths.ts +64 -0
- package/src/tools/roster.ts +46 -0
- package/src/types/agent/base.ts +6 -0
- package/src/types/agent/pipeline.ts +3 -0
- package/src/types/agent/router.ts +2 -3
- package/src/types/agent/scheduler.ts +4 -0
- package/src/types/agent/task.ts +5 -18
- package/src/types/common/index.ts +3 -0
- package/src/types/computer-use/index.ts +8 -0
- package/src/types/hitl/index.ts +5 -0
- package/src/types/ids/brand.ts +5 -48
- package/src/types/ids/index.ts +66 -75
- package/src/types/permission/index.ts +11 -0
- package/src/types/plugin/index.ts +49 -1
- package/src/types/run/config.ts +3 -0
- package/src/types/run/emergency.ts +5 -0
- package/src/types/run/entity.ts +6 -2
- package/src/types/run/events.ts +37 -0
- package/src/types/run/index.ts +1 -0
- package/src/types/run/state.ts +58 -30
- package/src/types/run/stop-reason.ts +3 -14
- package/src/types/run/token-budget-store.ts +54 -0
- package/src/types/sandbox/index.ts +53 -0
- package/src/types/session/store.ts +8 -0
- package/src/types/tool/index.ts +15 -0
- package/src/utils/frontmatter.ts +1 -1
- package/src/utils/id-format.ts +9 -0
- package/src/utils/id.ts +222 -181
- package/src/utils/log/exception.ts +1 -1
- package/src/utils/log/index.ts +1 -2
- package/src/utils/log/templates.ts +0 -1
- package/dist/session/migration/errors.d.ts +0 -26
- package/dist/session/migration/errors.d.ts.map +0 -1
- package/dist/session/migration/errors.js +0 -22
- package/dist/session/migration/errors.js.map +0 -1
- package/dist/session/migration/filesystem.d.ts +0 -122
- package/dist/session/migration/filesystem.d.ts.map +0 -1
- package/dist/session/migration/filesystem.js +0 -379
- package/dist/session/migration/filesystem.js.map +0 -1
- package/dist/session/migration/id-prefix.d.ts +0 -113
- package/dist/session/migration/id-prefix.d.ts.map +0 -1
- package/dist/session/migration/id-prefix.js +0 -132
- package/dist/session/migration/id-prefix.js.map +0 -1
- package/dist/session/migration/index.d.ts +0 -12
- package/dist/session/migration/index.d.ts.map +0 -1
- package/dist/session/migration/index.js +0 -12
- package/dist/session/migration/index.js.map +0 -1
- package/dist/session/migration/marker.d.ts +0 -57
- package/dist/session/migration/marker.d.ts.map +0 -1
- package/dist/session/migration/marker.js +0 -123
- package/dist/session/migration/marker.js.map +0 -1
- package/src/session/migration/errors.ts +0 -23
- package/src/session/migration/filesystem.ts +0 -468
- package/src/session/migration/id-prefix.ts +0 -166
- package/src/session/migration/index.ts +0 -41
- package/src/session/migration/marker.ts +0 -142
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { join } from 'node:path'
|
|
1
2
|
import type { Span } from '@opentelemetry/api'
|
|
2
3
|
import type { AuthorizationGate } from '../../authorization/gate.js'
|
|
3
4
|
import { extractFromToolCall, extractFromToolResult } from '../../compaction/extractor.js'
|
|
@@ -47,10 +48,11 @@ import { toErrorMessage } from '../../utils/error.js'
|
|
|
47
48
|
import { generateToolCallId } from '../../utils/id.js'
|
|
48
49
|
import type { Logger } from '../../utils/logger.js'
|
|
49
50
|
import { compressShellOutput } from '../../utils/shell-compress.js'
|
|
50
|
-
import { type BackgroundJobRegistry, bindOwner } from '../jobs/registry.js'
|
|
51
|
+
import { type BackgroundJobRegistry, type JobProcess, bindOwner } from '../jobs/registry.js'
|
|
51
52
|
import type { ToolResultObservation } from './project-instructions.js'
|
|
52
53
|
import {
|
|
53
54
|
DEFAULT_MAX_TOOL_OUTPUT_CHARS,
|
|
55
|
+
type ToolOutputBudgetResult,
|
|
54
56
|
applyToolOutputBudget,
|
|
55
57
|
describeDroppedContent,
|
|
56
58
|
measureContentBytes,
|
|
@@ -290,6 +292,8 @@ export interface ToolExecutorConfig {
|
|
|
290
292
|
tools: ToolRegistryContract
|
|
291
293
|
runId: RunId
|
|
292
294
|
workingDirectory: string
|
|
295
|
+
/** See `ToolContext.additionalDirectories`. */
|
|
296
|
+
additionalDirectories?: readonly string[]
|
|
293
297
|
/**
|
|
294
298
|
* Read LIVE, not frozen at run start.
|
|
295
299
|
*
|
|
@@ -319,6 +323,13 @@ export interface ToolExecutorConfig {
|
|
|
319
323
|
* that fallback is a lie rather than a lesser version.
|
|
320
324
|
*/
|
|
321
325
|
backgroundJobs?: BackgroundJobRegistry
|
|
326
|
+
/**
|
|
327
|
+
* Which owner the run's jobs are bound to. The run id by default, which
|
|
328
|
+
* scopes them to the run; a host that wants jobs to outlive a turn (a
|
|
329
|
+
* dev server started in one, read in the next) binds them to its
|
|
330
|
+
* session and stops them itself when the session ends.
|
|
331
|
+
*/
|
|
332
|
+
backgroundJobOwner?: string
|
|
322
333
|
|
|
323
334
|
/**
|
|
324
335
|
* Where the `skill` tool reads from.
|
|
@@ -1175,6 +1186,9 @@ export class ToolExecutor {
|
|
|
1175
1186
|
const context: ToolContext = {
|
|
1176
1187
|
runId: this.config.runId,
|
|
1177
1188
|
workingDirectory: this.config.workingDirectory,
|
|
1189
|
+
...(this.config.additionalDirectories?.length
|
|
1190
|
+
? { additionalDirectories: this.config.additionalDirectories }
|
|
1191
|
+
: {}),
|
|
1178
1192
|
abortSignal: this.config.abortSignal,
|
|
1179
1193
|
env: this.config.env,
|
|
1180
1194
|
log: (level, message) => this.log[level](message),
|
|
@@ -1219,12 +1233,38 @@ export class ToolExecutor {
|
|
|
1219
1233
|
// that its foreground work would use. A sandbox-aware persistent
|
|
1220
1234
|
// process capability needs its own execution seam; until one exists,
|
|
1221
1235
|
// the safe composition is to withhold this host capability entirely.
|
|
1222
|
-
|
|
1236
|
+
//
|
|
1237
|
+
// That seam now exists: a sandbox that can `spawnDetached` starts
|
|
1238
|
+
// the job inside its boundary, and the registry only keeps it. A
|
|
1239
|
+
// sandbox without it still withholds the capability.
|
|
1240
|
+
...(this.config.backgroundJobs &&
|
|
1241
|
+
(!this.config.sandbox || this.config.sandbox.spawnDetached !== undefined)
|
|
1223
1242
|
? {
|
|
1224
|
-
backgroundJobs: bindOwner(
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1243
|
+
backgroundJobs: bindOwner(
|
|
1244
|
+
this.config.backgroundJobs,
|
|
1245
|
+
this.config.backgroundJobOwner ?? this.config.runId,
|
|
1246
|
+
{
|
|
1247
|
+
workingDirectory: this.config.workingDirectory,
|
|
1248
|
+
env: this.config.env,
|
|
1249
|
+
...(this.config.sandbox?.spawnDetached
|
|
1250
|
+
? {
|
|
1251
|
+
spawn: (job: {
|
|
1252
|
+
readonly command: string
|
|
1253
|
+
readonly workingDirectory: string
|
|
1254
|
+
readonly env?: Record<string, string>
|
|
1255
|
+
}): JobProcess =>
|
|
1256
|
+
(this.config.sandbox as Sandbox).spawnDetached?.(
|
|
1257
|
+
'/bin/sh',
|
|
1258
|
+
['-c', job.command],
|
|
1259
|
+
{
|
|
1260
|
+
cwd: job.workingDirectory,
|
|
1261
|
+
...(job.env ? { env: job.env } : {}),
|
|
1262
|
+
},
|
|
1263
|
+
) as JobProcess,
|
|
1264
|
+
}
|
|
1265
|
+
: {}),
|
|
1266
|
+
},
|
|
1267
|
+
),
|
|
1228
1268
|
}
|
|
1229
1269
|
: {}),
|
|
1230
1270
|
...(this.parentSpan ? { parentSpan: this.parentSpan } : {}),
|
|
@@ -1239,6 +1279,9 @@ export class ToolExecutor {
|
|
|
1239
1279
|
settleProgress: () => Promise<void>,
|
|
1240
1280
|
preparedCall?: PreparedDirectCall,
|
|
1241
1281
|
): Promise<ToolCallOutcome> {
|
|
1282
|
+
if (this.config.abortSignal.aborted) {
|
|
1283
|
+
return this.recordCancelledBeforeExecution(toolCall.id, toolCall.function.name, {})
|
|
1284
|
+
}
|
|
1242
1285
|
if (preparedCall?.kind === 'synthetic') {
|
|
1243
1286
|
return this.recordSyntheticPreparation(preparedCall)
|
|
1244
1287
|
}
|
|
@@ -1336,7 +1379,15 @@ export class ToolExecutor {
|
|
|
1336
1379
|
|
|
1337
1380
|
input = resolved.input
|
|
1338
1381
|
|
|
1339
|
-
|
|
1382
|
+
let preOutcome: PreToolHookOutcome
|
|
1383
|
+
try {
|
|
1384
|
+
preOutcome = await this.runPreToolHook(toolName, input)
|
|
1385
|
+
} catch (error) {
|
|
1386
|
+
if (!this.config.abortSignal.aborted) throw error
|
|
1387
|
+
// A later call's interrupted preparation must not reject the batch
|
|
1388
|
+
// that already holds an earlier call's settled side-effect receipt.
|
|
1389
|
+
return this.recordCancelledBeforeExecution(toolCall.id, toolName, input)
|
|
1390
|
+
}
|
|
1340
1391
|
if (preOutcome.kind === 'skip' || preOutcome.kind === 'error') {
|
|
1341
1392
|
return this.recordSyntheticHookOutcome(toolCall.id, toolName, preOutcome.input, preOutcome)
|
|
1342
1393
|
}
|
|
@@ -1443,6 +1494,7 @@ export class ToolExecutor {
|
|
|
1443
1494
|
...this.config.toolRetryBackoff,
|
|
1444
1495
|
}
|
|
1445
1496
|
for (let attempt = 1; ; attempt++) {
|
|
1497
|
+
if (this.config.abortSignal.aborted) break
|
|
1446
1498
|
// A missing file will not appear on the second attempt; burning
|
|
1447
1499
|
// the budget on it only delays the error the model needs to see.
|
|
1448
1500
|
const toolWants = !result.success && result.retryable === true
|
|
@@ -1510,23 +1562,23 @@ export class ToolExecutor {
|
|
|
1510
1562
|
const postOverride = post.override
|
|
1511
1563
|
let output =
|
|
1512
1564
|
postOverride?.output ?? (result.success ? this.maybeCompress(toolName, rawOutput) : rawOutput)
|
|
1513
|
-
|
|
1565
|
+
let selectedContent = postOverride?.isError
|
|
1514
1566
|
? undefined
|
|
1515
1567
|
: (postOverride?.content ?? result.content)
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
const dropped = describeDroppedContent(selectedContent)
|
|
1528
|
-
if (dropped) output = `${output}\n\n${dropped}`
|
|
1568
|
+
if (postOverride && !postOverride.isError && postOverride.content === undefined) {
|
|
1569
|
+
// A text redaction must reach both text channels. Only the image or
|
|
1570
|
+
// document blocks survive implicitly; explicit replacement content
|
|
1571
|
+
// remains the hook's complete model-visible decision.
|
|
1572
|
+
if (typeof selectedContent === 'string') selectedContent = postOverride.output
|
|
1573
|
+
else if (selectedContent) {
|
|
1574
|
+
selectedContent = [
|
|
1575
|
+
{ type: 'text', text: postOverride.output },
|
|
1576
|
+
...selectedContent.filter((block) => block.type !== 'text'),
|
|
1577
|
+
]
|
|
1578
|
+
}
|
|
1529
1579
|
}
|
|
1580
|
+
const maxToolOutputChars = this.config.maxToolOutputChars ?? DEFAULT_MAX_TOOL_OUTPUT_CHARS
|
|
1581
|
+
const sourceOutput = output
|
|
1530
1582
|
|
|
1531
1583
|
// Compression is opportunistic and shell-only; the budget is the
|
|
1532
1584
|
// hard bound that applies to every final tool result, including a
|
|
@@ -1553,6 +1605,10 @@ export class ToolExecutor {
|
|
|
1553
1605
|
})
|
|
1554
1606
|
}
|
|
1555
1607
|
output = budgeted.output
|
|
1608
|
+
const modelContent =
|
|
1609
|
+
selectedContent === undefined
|
|
1610
|
+
? undefined
|
|
1611
|
+
: this.budgetContent(selectedContent, toolName, toolCall.id, { sourceOutput, budgeted })
|
|
1556
1612
|
|
|
1557
1613
|
// A failed call, or an override that says the call failed. A `replace`
|
|
1558
1614
|
// says the opposite, and reading it as a failure is what made redaction
|
|
@@ -1562,6 +1618,9 @@ export class ToolExecutor {
|
|
|
1562
1618
|
|
|
1563
1619
|
if (this.workingStateManager) {
|
|
1564
1620
|
extractFromToolResult(this.workingStateManager, toolName, output, effectiveIsError)
|
|
1621
|
+
for (const pin of this.config.abortSignal.aborted ? [] : (result.workingState ?? [])) {
|
|
1622
|
+
this.workingStateManager.pin(pin.key, pin.text, toolName)
|
|
1623
|
+
}
|
|
1565
1624
|
}
|
|
1566
1625
|
|
|
1567
1626
|
if (result.success) {
|
|
@@ -1576,7 +1635,7 @@ export class ToolExecutor {
|
|
|
1576
1635
|
[NAMZU.RUN_ID]: this.config.runId,
|
|
1577
1636
|
[GENAI.TOOL_NAME]: toolName,
|
|
1578
1637
|
'namzu.duration_ms': durationMs,
|
|
1579
|
-
'exception.message': result.error ?? 'unknown',
|
|
1638
|
+
'exception.message': postOverride ? output : (result.error ?? 'unknown'),
|
|
1580
1639
|
})
|
|
1581
1640
|
}
|
|
1582
1641
|
|
|
@@ -1615,11 +1674,6 @@ export class ToolExecutor {
|
|
|
1615
1674
|
result,
|
|
1616
1675
|
})
|
|
1617
1676
|
|
|
1618
|
-
const resolveContent = (): { content?: ToolResultContent } => {
|
|
1619
|
-
if (budgeted.truncated || selectedContent === undefined) return {}
|
|
1620
|
-
return { content: this.budgetContent(selectedContent, toolName) }
|
|
1621
|
-
}
|
|
1622
|
-
|
|
1623
1677
|
return {
|
|
1624
1678
|
toolCallId: toolCall.id,
|
|
1625
1679
|
toolName,
|
|
@@ -1629,13 +1683,12 @@ export class ToolExecutor {
|
|
|
1629
1683
|
//
|
|
1630
1684
|
// An ERROR override drops it: the payload is no longer the tool's,
|
|
1631
1685
|
// and shipping an image beside a failure message describes something
|
|
1632
|
-
// the model was just told did not happen.
|
|
1633
|
-
// for the same reason.
|
|
1686
|
+
// the model was just told did not happen.
|
|
1634
1687
|
//
|
|
1635
1688
|
// A REPLACE keeps it, because the common case is redacting text from
|
|
1636
1689
|
// a result whose image is unaffected — and a hook that needs it gone
|
|
1637
1690
|
// says so with `content`, which wins over both.
|
|
1638
|
-
...
|
|
1691
|
+
...(modelContent !== undefined ? { content: modelContent } : {}),
|
|
1639
1692
|
}
|
|
1640
1693
|
}
|
|
1641
1694
|
|
|
@@ -2108,6 +2161,7 @@ export class ToolExecutor {
|
|
|
2108
2161
|
output: `Error: ${result.message}`,
|
|
2109
2162
|
}
|
|
2110
2163
|
case 'retry':
|
|
2164
|
+
case 'annotate':
|
|
2111
2165
|
// There is no result to replace yet. Rejecting loudly beats
|
|
2112
2166
|
// silently ignoring it: a hook author who returned this here
|
|
2113
2167
|
// meant to redact something and would otherwise watch the secret
|
|
@@ -2327,17 +2381,33 @@ export class ToolExecutor {
|
|
|
2327
2381
|
toolResult: ToolResult,
|
|
2328
2382
|
): Promise<{ override: PostToolOverride | null; retry: boolean }> {
|
|
2329
2383
|
if (!this.config.pluginManager) return { override: null, retry: false }
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2384
|
+
let results: PluginHookResult[]
|
|
2385
|
+
try {
|
|
2386
|
+
results = await this.config.pluginManager.executeHooks(
|
|
2387
|
+
'post_tool_use',
|
|
2388
|
+
{
|
|
2389
|
+
runId: this.config.runId,
|
|
2390
|
+
toolName,
|
|
2391
|
+
toolInput: input,
|
|
2392
|
+
toolResult,
|
|
2393
|
+
signal: this.config.abortSignal,
|
|
2394
|
+
},
|
|
2395
|
+
this.emitEvent,
|
|
2396
|
+
)
|
|
2397
|
+
} catch (error) {
|
|
2398
|
+
if (!this.config.abortSignal.aborted) throw error
|
|
2399
|
+
// The tool has already returned. Cancellation of a later redaction
|
|
2400
|
+
// cannot erase that execution or turn it into a safe-to-repeat call.
|
|
2401
|
+
// Withhold both channels until their post-tool policy has completed.
|
|
2402
|
+
const outcome = toolResult.success
|
|
2403
|
+
? 'reported success before cancellation. The call already executed.'
|
|
2404
|
+
: 'reported failure while cancellation was in progress. Side effects are possible.'
|
|
2405
|
+
const output = `Tool "${toolName}" ${outcome} Output withheld because post-tool review was interrupted. Inspect external state before any retry.`
|
|
2406
|
+
return {
|
|
2407
|
+
override: { output, content: output, isError: !toolResult.success },
|
|
2408
|
+
retry: false,
|
|
2409
|
+
}
|
|
2410
|
+
}
|
|
2341
2411
|
let override: PostToolOverride | null = null
|
|
2342
2412
|
let retry = false
|
|
2343
2413
|
for (const result of results) {
|
|
@@ -2368,6 +2438,7 @@ export class ToolExecutor {
|
|
|
2368
2438
|
continue
|
|
2369
2439
|
case 'skip':
|
|
2370
2440
|
case 'modify':
|
|
2441
|
+
case 'annotate':
|
|
2371
2442
|
throw new Error(
|
|
2372
2443
|
`Plugin hook post_tool_use returned unsupported action '${result.action}' for tool ${toolName}`,
|
|
2373
2444
|
)
|
|
@@ -2441,6 +2512,18 @@ export class ToolExecutor {
|
|
|
2441
2512
|
return { toolCallId: toolCall.id, toolName, output, isError: true }
|
|
2442
2513
|
}
|
|
2443
2514
|
|
|
2515
|
+
private recordCancelledBeforeExecution(
|
|
2516
|
+
toolCallId: string,
|
|
2517
|
+
toolName: string,
|
|
2518
|
+
input: unknown,
|
|
2519
|
+
): Promise<ToolCallOutcome> {
|
|
2520
|
+
const reason = abortReasonText(this.config.abortSignal.reason)
|
|
2521
|
+
return this.recordSyntheticHookOutcome(toolCallId, toolName, input, {
|
|
2522
|
+
kind: 'error',
|
|
2523
|
+
output: `Tool "${toolName}" was not started because the run was cancelled${reason ? `: ${reason}` : '.'}`,
|
|
2524
|
+
})
|
|
2525
|
+
}
|
|
2526
|
+
|
|
2444
2527
|
private async recordSyntheticHookOutcome(
|
|
2445
2528
|
toolCallId: string,
|
|
2446
2529
|
toolName: string,
|
|
@@ -2493,42 +2576,69 @@ export class ToolExecutor {
|
|
|
2493
2576
|
}
|
|
2494
2577
|
|
|
2495
2578
|
/**
|
|
2496
|
-
*
|
|
2497
|
-
*
|
|
2498
|
-
*
|
|
2499
|
-
* smaller image, it is a corrupt one, and a driver handed it would
|
|
2500
|
-
* either fail the request or show the model noise. The text half stays
|
|
2501
|
-
* untouched, so the result still says what happened — and the
|
|
2502
|
-
* replacement names what was withheld and how big it was, which is what
|
|
2503
|
-
* lets the agent ask for a smaller region instead of retrying the same
|
|
2504
|
-
* call.
|
|
2579
|
+
* The host preview and model text may differ; each gets its own text
|
|
2580
|
+
* budget. Rich bytes are measured separately and withheld whole when
|
|
2581
|
+
* over their cap, with a notice inside the model text's same hard bound.
|
|
2505
2582
|
*/
|
|
2506
2583
|
private budgetContent(
|
|
2507
|
-
content:
|
|
2584
|
+
content: ToolResultContent,
|
|
2508
2585
|
toolName: string,
|
|
2509
|
-
|
|
2586
|
+
toolUseId: string,
|
|
2587
|
+
host: { sourceOutput: string; budgeted: ToolOutputBudgetResult },
|
|
2588
|
+
): ToolResultContent {
|
|
2510
2589
|
const cap = this.config.maxToolContentBytes ?? 0
|
|
2511
|
-
if (cap <= 0) return content
|
|
2512
|
-
|
|
2513
2590
|
const size = measureContentBytes(content)
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
'
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2591
|
+
const richWithheld = cap > 0 && size > cap
|
|
2592
|
+
const text =
|
|
2593
|
+
typeof content === 'string'
|
|
2594
|
+
? content
|
|
2595
|
+
: content.flatMap((block) => (block.type === 'text' ? [block.text] : [])).join('\n')
|
|
2596
|
+
const notice = richWithheld
|
|
2597
|
+
? `[rich content withheld: ${size} base64 chars exceeds this run's ${cap} cap] ${describeDroppedContent(content) ?? ''}`
|
|
2598
|
+
: undefined
|
|
2599
|
+
if (richWithheld) {
|
|
2600
|
+
this.log.warn('Tool result content exceeded the rich-content budget', {
|
|
2601
|
+
[NAMZU.RUN_ID]: this.config.runId,
|
|
2602
|
+
[GENAI.TOOL_NAME]: toolName,
|
|
2603
|
+
'namzu.runtime.content_bytes': size,
|
|
2604
|
+
'namzu.runtime.cap': cap,
|
|
2605
|
+
})
|
|
2606
|
+
}
|
|
2607
|
+
const budgeted =
|
|
2608
|
+
text === host.sourceOutput && !notice
|
|
2609
|
+
? host.budgeted
|
|
2610
|
+
: applyToolOutputBudget({
|
|
2611
|
+
toolName,
|
|
2612
|
+
toolUseId,
|
|
2613
|
+
output: text,
|
|
2614
|
+
maxChars: this.config.maxToolOutputChars ?? DEFAULT_MAX_TOOL_OUTPUT_CHARS,
|
|
2615
|
+
...(notice ? { notice } : {}),
|
|
2616
|
+
// A tool may return different host and model text. They must
|
|
2617
|
+
// never compete for the same exclusive spill filename.
|
|
2618
|
+
spillDir: this.config.toolOutputDir
|
|
2619
|
+
? join(this.config.toolOutputDir, 'content')
|
|
2620
|
+
: undefined,
|
|
2621
|
+
onError: (message) =>
|
|
2622
|
+
this.log.warn('Failed to spill oversized model tool content', {
|
|
2623
|
+
[NAMZU.RUN_ID]: this.config.runId,
|
|
2624
|
+
[GENAI.TOOL_NAME]: toolName,
|
|
2625
|
+
'exception.message': message,
|
|
2626
|
+
}),
|
|
2627
|
+
})
|
|
2628
|
+
if (budgeted.truncated && budgeted !== host.budgeted) {
|
|
2629
|
+
this.log.warn('Model tool text exceeded the model-visible budget', {
|
|
2630
|
+
[NAMZU.RUN_ID]: this.config.runId,
|
|
2631
|
+
[GENAI.TOOL_NAME]: toolName,
|
|
2632
|
+
'namzu.runtime.original_length': budgeted.originalLength,
|
|
2633
|
+
'namzu.runtime.spill_path': budgeted.spillPath,
|
|
2634
|
+
})
|
|
2635
|
+
}
|
|
2636
|
+
if (!budgeted.truncated && !richWithheld) return content
|
|
2637
|
+
if (typeof content === 'string') return budgeted.output
|
|
2524
2638
|
return [
|
|
2525
|
-
{
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
described ? ` — ${described}` : ''
|
|
2529
|
-
}]`,
|
|
2530
|
-
},
|
|
2531
|
-
] as import('../../types/message/index.js').ToolResultContent
|
|
2639
|
+
...(budgeted.output ? [{ type: 'text' as const, text: budgeted.output }] : []),
|
|
2640
|
+
...(richWithheld ? [] : content.filter((block) => block.type !== 'text')),
|
|
2641
|
+
]
|
|
2532
2642
|
}
|
|
2533
2643
|
|
|
2534
2644
|
private maybeCompress(toolName: string, output: string): string {
|
|
@@ -110,6 +110,14 @@ export class GuardCoordinator {
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
const limitResult = checkLimitsDetailed(this.limitConfig, limitState)
|
|
113
|
+
if (!abortSignal.aborted && runMgr.budget && runMgr.budget.remaining <= 0) {
|
|
114
|
+
return {
|
|
115
|
+
shouldStop: true,
|
|
116
|
+
forceFinalize: false,
|
|
117
|
+
stopReason: 'token_budget',
|
|
118
|
+
isCancelled: false,
|
|
119
|
+
}
|
|
120
|
+
}
|
|
113
121
|
|
|
114
122
|
if (limitResult.type === 'hard_stop') {
|
|
115
123
|
return {
|