@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,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { spawn } from 'node:child_process'
|
|
2
|
+
import { StringDecoder } from 'node:string_decoder'
|
|
3
3
|
import { z } from 'zod'
|
|
4
|
+
import { SANDBOX_KILL_GRACE_MS } from '../../constants/sandbox/index.js'
|
|
4
5
|
import { DANGEROUS_PATTERNS } from '../../constants/tools/index.js'
|
|
6
|
+
import { killTree } from '../../process/kill-tree.js'
|
|
7
|
+
import { subscribeToAbort } from '../../utils/abort.js'
|
|
5
8
|
import { defineTool } from '../defineTool.js'
|
|
6
9
|
import { scrubInheritedEnv } from '../env-scrub.js'
|
|
7
10
|
|
|
8
|
-
const execAsync = promisify(exec)
|
|
9
11
|
// Namzu owns its own bash timeout knob — `NAMZU_BASH_TIMEOUT_MS`.
|
|
10
12
|
// The Vandal fallback (`VANDAL_NAMZU_TIMEOUT_MS`) lived here as a
|
|
11
13
|
// historical bridge while Namzu was carved out of the Vandal repo,
|
|
@@ -67,31 +69,215 @@ const inputSchema = z.object({
|
|
|
67
69
|
|
|
68
70
|
type BashInput = z.infer<typeof inputSchema>
|
|
69
71
|
|
|
72
|
+
const MAX_SHELL_PROGRESS_CHARS = 160
|
|
73
|
+
|
|
74
|
+
/** Keep a bounded tail even when a process never writes a newline. */
|
|
75
|
+
function appendProgressTail(previous: string, chunk: string, start: number, end: number): string {
|
|
76
|
+
return (previous + chunk.slice(Math.max(start, end - MAX_SHELL_PROGRESS_CHARS), end)).slice(
|
|
77
|
+
-MAX_SHELL_PROGRESS_CHARS,
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Clipping a UTF-16 string must not display half of a surrogate pair. */
|
|
82
|
+
function progressLine(value: string): string {
|
|
83
|
+
let line = value.trim()
|
|
84
|
+
const first = line.charCodeAt(0)
|
|
85
|
+
if (first >= 0xdc00 && first <= 0xdfff) line = line.slice(1)
|
|
86
|
+
const last = line.charCodeAt(line.length - 1)
|
|
87
|
+
if (last >= 0xd800 && last <= 0xdbff) line = line.slice(0, -1)
|
|
88
|
+
return line
|
|
89
|
+
}
|
|
90
|
+
|
|
70
91
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* replaces it as the next arrives, so sending a whole chunk sends a wall
|
|
75
|
-
* of text into a slot that shows one line of it. A chunk usually ends
|
|
76
|
-
* mid-line and usually ends with a newline, so the last NON-EMPTY line is
|
|
77
|
-
* the most recent complete thing the command actually said.
|
|
78
|
-
*
|
|
79
|
-
* Progress is capped rather than truncated with an ellipsis: this is
|
|
80
|
-
* glanced at, and a marker in a line nobody reads to the end is noise.
|
|
92
|
+
* One latest line per stream, independent of transport chunk boundaries.
|
|
93
|
+
* Reports stay synchronous: the executor owns coalescing and backpressure.
|
|
94
|
+
* This projection adds neither an output log nor a queue of pending reports.
|
|
81
95
|
*/
|
|
82
|
-
function
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
96
|
+
function shellProgress(report?: (message: string) => void) {
|
|
97
|
+
if (!report) return undefined
|
|
98
|
+
const partial = { stdout: '', stderr: '' }
|
|
99
|
+
let lastMessage = ''
|
|
100
|
+
return ({ stream, data }: { stream: 'stdout' | 'stderr'; data: string }): void => {
|
|
101
|
+
let line = partial[stream]
|
|
102
|
+
let latest = ''
|
|
103
|
+
let start = 0
|
|
104
|
+
// Scan delimiters without allocating an array for arbitrarily chatty output.
|
|
105
|
+
for (const match of data.matchAll(/[\r\n]/g)) {
|
|
106
|
+
line = appendProgressTail(line, data, start, match.index)
|
|
107
|
+
latest = progressLine(line) || latest
|
|
108
|
+
line = ''
|
|
109
|
+
start = match.index + 1
|
|
110
|
+
}
|
|
111
|
+
line = appendProgressTail(line, data, start, data.length)
|
|
112
|
+
partial[stream] = line
|
|
113
|
+
const message = progressLine(line) || latest
|
|
114
|
+
if (!message || message === lastMessage) return
|
|
115
|
+
lastMessage = message
|
|
116
|
+
try {
|
|
117
|
+
report(message)
|
|
118
|
+
} catch {
|
|
119
|
+
// A diagnostic observer cannot break the process output reader.
|
|
120
|
+
}
|
|
87
121
|
}
|
|
88
|
-
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Keep the shell's process group until inherited pipes close. Node's exec
|
|
126
|
+
* timeout/AbortSignal kills only the wrapper and closes its pipes immediately,
|
|
127
|
+
* leaving the command and its descendants running after the promise settles.
|
|
128
|
+
*/
|
|
129
|
+
function execHostShell(
|
|
130
|
+
command: string,
|
|
131
|
+
options: {
|
|
132
|
+
cwd: string
|
|
133
|
+
env: NodeJS.ProcessEnv
|
|
134
|
+
timeout: number
|
|
135
|
+
maxBuffer: number
|
|
136
|
+
signal?: AbortSignal
|
|
137
|
+
onOutput?: ReturnType<typeof shellProgress>
|
|
138
|
+
},
|
|
139
|
+
): Promise<{ stdout: string; stderr: string }> {
|
|
140
|
+
options.signal?.throwIfAborted()
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
const child = spawn(command, {
|
|
143
|
+
cwd: options.cwd,
|
|
144
|
+
env: options.env,
|
|
145
|
+
shell: true,
|
|
146
|
+
// killTree's negative PID must never target the caller's own group.
|
|
147
|
+
detached: process.platform !== 'win32',
|
|
148
|
+
})
|
|
149
|
+
const captures = {
|
|
150
|
+
stdout: {
|
|
151
|
+
chunks: [] as Buffer[],
|
|
152
|
+
bytes: 0,
|
|
153
|
+
truncated: false,
|
|
154
|
+
decoder: new StringDecoder('utf8'),
|
|
155
|
+
},
|
|
156
|
+
stderr: {
|
|
157
|
+
chunks: [] as Buffer[],
|
|
158
|
+
bytes: 0,
|
|
159
|
+
truncated: false,
|
|
160
|
+
decoder: new StringDecoder('utf8'),
|
|
161
|
+
},
|
|
162
|
+
}
|
|
163
|
+
let cause: 'caller' | 'timeout' | 'maxBuffer' | undefined
|
|
164
|
+
let failure: (Error & { code?: string | number }) | undefined
|
|
165
|
+
let escalation: ReturnType<typeof setTimeout> | undefined
|
|
166
|
+
let disposeAbort: (() => void) | undefined
|
|
167
|
+
let closed = false
|
|
168
|
+
const cancel = (origin: NonNullable<typeof cause>) => {
|
|
169
|
+
if (closed || cause !== undefined) return
|
|
170
|
+
cause = origin
|
|
171
|
+
escalation = setTimeout(() => {
|
|
172
|
+
escalation = undefined
|
|
173
|
+
killTree(child, 'SIGKILL')
|
|
174
|
+
// A descendant can deliberately start a separate session. It is
|
|
175
|
+
// outside this group, but its inherited pipes must not hold the
|
|
176
|
+
// cancelled call forever. Keep what was captured during grace.
|
|
177
|
+
child.stdin?.destroy()
|
|
178
|
+
child.stdout?.destroy()
|
|
179
|
+
child.stderr?.destroy()
|
|
180
|
+
}, SANDBOX_KILL_GRACE_MS)
|
|
181
|
+
escalation.unref?.()
|
|
182
|
+
killTree(child, 'SIGTERM')
|
|
183
|
+
}
|
|
184
|
+
const capture = (stream: 'stdout' | 'stderr', chunk: Buffer) => {
|
|
185
|
+
const state = captures[stream]
|
|
186
|
+
const kept = Math.min(chunk.length, options.maxBuffer - state.bytes)
|
|
187
|
+
if (kept > 0) {
|
|
188
|
+
state.chunks.push(Buffer.from(chunk.subarray(0, kept)))
|
|
189
|
+
state.bytes += kept
|
|
190
|
+
}
|
|
191
|
+
if (kept < chunk.length) {
|
|
192
|
+
state.truncated = true
|
|
193
|
+
if (cause === undefined) {
|
|
194
|
+
failure = Object.assign(new RangeError(`${stream} maxBuffer length exceeded`), {
|
|
195
|
+
code: 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER',
|
|
196
|
+
})
|
|
197
|
+
cancel('maxBuffer')
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (options.onOutput) {
|
|
201
|
+
const data = state.decoder.write(chunk)
|
|
202
|
+
if (data) options.onOutput({ stream, data })
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const onStdout = (chunk: Buffer) => capture('stdout', chunk)
|
|
206
|
+
const onStderr = (chunk: Buffer) => capture('stderr', chunk)
|
|
207
|
+
child.stdout?.on('data', onStdout)
|
|
208
|
+
child.stderr?.on('data', onStderr)
|
|
209
|
+
child.once('error', (error: NodeJS.ErrnoException) => {
|
|
210
|
+
failure ??= error
|
|
211
|
+
})
|
|
212
|
+
child.once('close', (code, signal) => {
|
|
213
|
+
closed = true
|
|
214
|
+
disposeAbort?.()
|
|
215
|
+
clearTimeout(deadline)
|
|
216
|
+
if (escalation !== undefined) {
|
|
217
|
+
clearTimeout(escalation)
|
|
218
|
+
// Pipes closing can precede a descendant which closed its copies.
|
|
219
|
+
// Force the owned group now instead of retaining its PID in a timer.
|
|
220
|
+
killTree(child, 'SIGKILL')
|
|
221
|
+
}
|
|
222
|
+
child.stdout?.off('data', onStdout)
|
|
223
|
+
child.stderr?.off('data', onStderr)
|
|
224
|
+
for (const stream of ['stdout', 'stderr'] as const) {
|
|
225
|
+
const data = captures[stream].decoder.end()
|
|
226
|
+
if (data) options.onOutput?.({ stream, data })
|
|
227
|
+
}
|
|
228
|
+
const decodeCapture = (stream: 'stdout' | 'stderr') => {
|
|
229
|
+
const state = captures[stream]
|
|
230
|
+
const bytes = Buffer.concat(state.chunks, state.bytes)
|
|
231
|
+
// Do not flush an incomplete UTF-8 character cut by our byte cap.
|
|
232
|
+
return state.truncated ? new StringDecoder('utf8').write(bytes) : bytes.toString('utf8')
|
|
233
|
+
}
|
|
234
|
+
const stdout = decodeCapture('stdout')
|
|
235
|
+
const stderr = decodeCapture('stderr')
|
|
236
|
+
if (!failure && cause === undefined && code === 0 && signal === null) {
|
|
237
|
+
resolve({ stdout, stderr })
|
|
238
|
+
return
|
|
239
|
+
}
|
|
240
|
+
const error =
|
|
241
|
+
failure ??
|
|
242
|
+
(cause === 'caller'
|
|
243
|
+
? Object.assign(
|
|
244
|
+
new Error('The operation was aborted', { cause: options.signal?.reason }),
|
|
245
|
+
{
|
|
246
|
+
name: 'AbortError',
|
|
247
|
+
code: 'ABORT_ERR',
|
|
248
|
+
},
|
|
249
|
+
)
|
|
250
|
+
: new Error(`Command failed: ${command}\n${stderr}`))
|
|
251
|
+
reject(
|
|
252
|
+
Object.assign(error, {
|
|
253
|
+
stdout,
|
|
254
|
+
stderr,
|
|
255
|
+
stdoutTruncated: captures.stdout.truncated,
|
|
256
|
+
stderrTruncated: captures.stderr.truncated,
|
|
257
|
+
code: failure?.code ?? (cause === 'caller' ? 'ABORT_ERR' : code),
|
|
258
|
+
killed: cause !== undefined,
|
|
259
|
+
signal,
|
|
260
|
+
timedOut: cause === 'timeout',
|
|
261
|
+
}),
|
|
262
|
+
)
|
|
263
|
+
})
|
|
264
|
+
const deadline = setTimeout(() => cancel('timeout'), options.timeout)
|
|
265
|
+
deadline.unref?.()
|
|
266
|
+
if (options.signal) {
|
|
267
|
+
disposeAbort = subscribeToAbort(options.signal, () => cancel('caller'))
|
|
268
|
+
if (options.signal.aborted) cancel('caller')
|
|
269
|
+
}
|
|
270
|
+
})
|
|
89
271
|
}
|
|
90
272
|
|
|
91
273
|
function isDangerousCommand(command: string): boolean {
|
|
92
274
|
return DANGEROUS_PATTERNS.some((pattern) => pattern.test(command))
|
|
93
275
|
}
|
|
94
276
|
|
|
277
|
+
/** The refusal when a sandbox cannot host a detached process; exported so the test states the same words. */
|
|
278
|
+
export const SANDBOX_CANNOT_DETACH =
|
|
279
|
+
'run_in_background is unavailable: this sandbox cannot start a detached process, and the job will not be run on the host to get around it. Run the command in the foreground, or raise `timeout` up to the tool maximum.'
|
|
280
|
+
|
|
95
281
|
export const BashTool = defineTool({
|
|
96
282
|
name: 'bash',
|
|
97
283
|
description:
|
|
@@ -123,21 +309,16 @@ export const BashTool = defineTool({
|
|
|
123
309
|
}
|
|
124
310
|
|
|
125
311
|
if (input.run_in_background) {
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
// composition. This explicit check also protects direct tool callers
|
|
133
|
-
// and says why the capability is absent instead of misdiagnosing the
|
|
134
|
-
// host as having configured no registry.
|
|
135
|
-
if (context.sandbox) {
|
|
312
|
+
// A sandboxed run gets a registry only when its sandbox can start a
|
|
313
|
+
// detached process inside the boundary (`Sandbox.spawnDetached`);
|
|
314
|
+
// the executor withholds it otherwise. This check is for direct
|
|
315
|
+
// tool callers, who could hand a host registry and a sandbox to the
|
|
316
|
+
// same context: the boolean is never an escape from the boundary.
|
|
317
|
+
if (context.sandbox && context.sandbox.spawnDetached === undefined) {
|
|
136
318
|
return {
|
|
137
319
|
success: false,
|
|
138
320
|
output: '',
|
|
139
|
-
error:
|
|
140
|
-
'run_in_background is unavailable while a sandbox is active because the host background-job registry cannot preserve that sandbox boundary. Run the command in the foreground, or use a sandbox-aware persistent-process capability.',
|
|
321
|
+
error: SANDBOX_CANNOT_DETACH,
|
|
141
322
|
}
|
|
142
323
|
}
|
|
143
324
|
// Refused, not degraded to `cmd &`. The fallback is not a lesser
|
|
@@ -193,6 +374,7 @@ export const BashTool = defineTool({
|
|
|
193
374
|
// sandbox can be added later as an explicit
|
|
194
375
|
// `SandboxExecOptions.workspaceRelativeCwd` field; the bash
|
|
195
376
|
// builtin doesn't have that requirement today.
|
|
377
|
+
const onOutput = shellProgress(context.report)
|
|
196
378
|
if (context.sandbox) {
|
|
197
379
|
const result = await context.sandbox.exec('/bin/sh', ['-c', input.command], {
|
|
198
380
|
timeout: input.timeout,
|
|
@@ -207,22 +389,9 @@ export const BashTool = defineTool({
|
|
|
207
389
|
// durable transcript — so this is a progress signal, not a
|
|
208
390
|
// second copy of the output. `result.stdout` remains the
|
|
209
391
|
// answer the model is given.
|
|
210
|
-
onOutput
|
|
211
|
-
? ({ data }) => {
|
|
212
|
-
const line = lastNonEmptyLine(data)
|
|
213
|
-
if (line) context.report?.(line)
|
|
214
|
-
}
|
|
215
|
-
: undefined,
|
|
392
|
+
onOutput,
|
|
216
393
|
})
|
|
217
394
|
|
|
218
|
-
if (result.timedOut) {
|
|
219
|
-
return {
|
|
220
|
-
success: false,
|
|
221
|
-
output: '',
|
|
222
|
-
error: `Command timed out after ${input.timeout}ms`,
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
395
|
// The sandbox reports when IT clipped a stream. Dropping those
|
|
227
396
|
// flags meant the model saw a complete-looking result that had
|
|
228
397
|
// silently lost its tail — and the kernel's own convention is
|
|
@@ -236,41 +405,32 @@ export const BashTool = defineTool({
|
|
|
236
405
|
result.stdout ? `STDOUT:\n${result.stdout}` : '',
|
|
237
406
|
result.stderr ? `STDERR:\n${result.stderr}` : '',
|
|
238
407
|
clipped.length > 0
|
|
239
|
-
? `[${clipped.join(' and ')} was truncated by the sandbox output cap
|
|
408
|
+
? `[${clipped.join(' and ')} was truncated by the sandbox output cap. The omitted output is unavailable in this result. Use a saved artifact or a read-only observation; do not repeat a state-changing action to recover its output.]`
|
|
240
409
|
: '',
|
|
241
410
|
]
|
|
242
411
|
.filter(Boolean)
|
|
243
412
|
.join('\n\n')
|
|
244
413
|
|
|
245
414
|
return {
|
|
246
|
-
success: result.exitCode === 0,
|
|
415
|
+
success: !result.timedOut && result.exitCode === 0,
|
|
247
416
|
output: output || '(no output)',
|
|
248
417
|
data: {
|
|
249
418
|
exitCode: result.exitCode,
|
|
250
419
|
sandboxed: true,
|
|
420
|
+
timedOut: result.timedOut,
|
|
251
421
|
stdoutTruncated: result.stdoutTruncated ?? false,
|
|
252
422
|
stderrTruncated: result.stderrTruncated ?? false,
|
|
253
423
|
},
|
|
254
|
-
error: result.
|
|
424
|
+
error: result.timedOut
|
|
425
|
+
? `Command timed out after ${input.timeout}ms. Any captured output before the deadline is above.`
|
|
426
|
+
: result.exitCode !== 0
|
|
427
|
+
? `Command exited with code ${result.exitCode}`
|
|
428
|
+
: undefined,
|
|
255
429
|
}
|
|
256
430
|
}
|
|
257
431
|
|
|
258
|
-
//
|
|
259
|
-
// a
|
|
260
|
-
// and the executor's deadline could only ever DETACH from the tool
|
|
261
|
-
// rather than end the work it started.
|
|
262
|
-
// `exec` REJECTS on a non-zero exit, on its own timeout, and on a
|
|
263
|
-
// kill — and the rejection carries `stdout`, `stderr`, `code` and
|
|
264
|
-
// `killed`. Letting it propagate threw all of that away: the registry
|
|
265
|
-
// turned the throw into a structured failure, so the model was told a
|
|
266
|
-
// command failed and not one word about how.
|
|
267
|
-
//
|
|
268
|
-
// That is the common case, not an edge one. A failing test run and a
|
|
269
|
-
// failing build are the two things an agent runs bash for most, and
|
|
270
|
-
// both exit non-zero WITH the output that explains why. The sandbox
|
|
271
|
-
// branch above already reports all of it; this branch did not, so the
|
|
272
|
-
// same command told the model two different amounts depending on where
|
|
273
|
-
// it happened to run.
|
|
432
|
+
// The owned runner retains stdout/stderr on non-zero exit and timeout,
|
|
433
|
+
// so a failed command still returns the evidence explaining its failure.
|
|
274
434
|
// The inherited half is scrubbed; `context.env` is not. Inheritance is
|
|
275
435
|
// implicit — nobody decided this command should see `process.env` — while
|
|
276
436
|
// a `context.env` key is one a host wrote on purpose. See
|
|
@@ -279,14 +439,14 @@ export const BashTool = defineTool({
|
|
|
279
439
|
const inherited = scrubInheritedEnv()
|
|
280
440
|
|
|
281
441
|
try {
|
|
282
|
-
const { stdout, stderr } = await
|
|
442
|
+
const { stdout, stderr } = await execHostShell(input.command, {
|
|
283
443
|
cwd: context.workingDirectory,
|
|
284
444
|
timeout: input.timeout,
|
|
285
445
|
env: { ...inherited.env, ...context.env },
|
|
286
446
|
maxBuffer: DEFAULT_BASH_MAX_BUFFER_BYTES,
|
|
287
447
|
signal: context.abortSignal,
|
|
448
|
+
onOutput,
|
|
288
449
|
})
|
|
289
|
-
|
|
290
450
|
return {
|
|
291
451
|
success: true,
|
|
292
452
|
output: formatShellOutput(stdout, stderr) || '(no output)',
|
|
@@ -296,25 +456,34 @@ export const BashTool = defineTool({
|
|
|
296
456
|
const failure = err as NodeJS.ErrnoException & {
|
|
297
457
|
stdout?: string
|
|
298
458
|
stderr?: string
|
|
459
|
+
stdoutTruncated?: boolean
|
|
460
|
+
stderrTruncated?: boolean
|
|
299
461
|
code?: number | string
|
|
300
462
|
killed?: boolean
|
|
301
463
|
signal?: string
|
|
464
|
+
timedOut?: boolean
|
|
302
465
|
}
|
|
303
466
|
|
|
304
467
|
// A caller-owned Stop is the caller's, not a command failure.
|
|
305
468
|
if (context.abortSignal?.aborted) throw err
|
|
306
469
|
|
|
307
|
-
//
|
|
308
|
-
//
|
|
309
|
-
|
|
310
|
-
const timedOut = failure.killed === true && failure.signal === 'SIGTERM'
|
|
470
|
+
// A maxBuffer stop or an ordinary signal is not a deadline. The
|
|
471
|
+
// runner latches the first cancellation cause before signalling.
|
|
472
|
+
const timedOut = failure.timedOut === true
|
|
311
473
|
const exitCode = typeof failure.code === 'number' ? failure.code : undefined
|
|
474
|
+
const clipped = [
|
|
475
|
+
failure.stdoutTruncated ? 'stdout' : '',
|
|
476
|
+
failure.stderrTruncated ? 'stderr' : '',
|
|
477
|
+
].filter(Boolean)
|
|
312
478
|
// Only on the failure path. A successful command did not need to know,
|
|
313
479
|
// and appending this to every result would make the common case noisy
|
|
314
480
|
// to buy nothing. A failing one is exactly where "authentication
|
|
315
481
|
// failed" has to be distinguishable from "the variable was withheld".
|
|
316
482
|
const output = [
|
|
317
483
|
formatShellOutput(failure.stdout, failure.stderr),
|
|
484
|
+
clipped.length > 0
|
|
485
|
+
? `[${clipped.join(' and ')} ${clipped.length === 1 ? 'was' : 'were'} truncated by the host output cap. The omitted output is unavailable in this result.]`
|
|
486
|
+
: '',
|
|
318
487
|
describeWithheldEnv(inherited.dropped),
|
|
319
488
|
]
|
|
320
489
|
.filter(Boolean)
|
|
@@ -326,6 +495,8 @@ export const BashTool = defineTool({
|
|
|
326
495
|
data: {
|
|
327
496
|
...(exitCode !== undefined ? { exitCode } : {}),
|
|
328
497
|
timedOut,
|
|
498
|
+
stdoutTruncated: failure.stdoutTruncated ?? false,
|
|
499
|
+
stderrTruncated: failure.stderrTruncated ?? false,
|
|
329
500
|
...(failure.signal ? { signal: failure.signal } : {}),
|
|
330
501
|
},
|
|
331
502
|
error: timedOut
|
|
@@ -152,7 +152,11 @@ function buildDescription(host: ComputerUseHost): string {
|
|
|
152
152
|
`Available actions: ${available.join('; ') || 'none'}.`,
|
|
153
153
|
]
|
|
154
154
|
if (unavailable.length > 0) {
|
|
155
|
-
lines.push(
|
|
155
|
+
lines.push(
|
|
156
|
+
caps.unavailableReason
|
|
157
|
+
? `Unavailable on this host: ${unavailable.join(', ')} — ${caps.unavailableReason} Do not retry; tell the user.`
|
|
158
|
+
: `Unavailable on this host: ${unavailable.join(', ')}.`,
|
|
159
|
+
)
|
|
156
160
|
}
|
|
157
161
|
lines.push(
|
|
158
162
|
'Coordinates are in logical pixels from the top-left of the primary display. Call getDisplayGeometry through screenshot output before clicking to confirm bounds.',
|
|
@@ -303,7 +307,7 @@ export function createComputerUseTool(host: ComputerUseHost): ToolDefinition<Act
|
|
|
303
307
|
return {
|
|
304
308
|
success: false,
|
|
305
309
|
output: '',
|
|
306
|
-
error: `computer_use: action "${input.type}" requires capability "${required}" which is not available on this host (displayServer=${host.capabilities.displayServer})
|
|
310
|
+
error: `computer_use: action "${input.type}" requires capability "${required}" which is not available on this host (displayServer=${host.capabilities.displayServer}).${host.capabilities.unavailableReason ? ` ${host.capabilities.unavailableReason} Do not retry; tell the user.` : ''}`,
|
|
307
311
|
}
|
|
308
312
|
}
|
|
309
313
|
try {
|
|
@@ -3,7 +3,7 @@ import { readFile } from 'node:fs/promises'
|
|
|
3
3
|
import { z } from 'zod'
|
|
4
4
|
import type { ToolResult } from '../../types/tool/index.js'
|
|
5
5
|
import { defineTool } from '../defineTool.js'
|
|
6
|
-
import {
|
|
6
|
+
import { resolveWithinAnyReal, toolRoots } from '../paths.js'
|
|
7
7
|
import { atomicWriteFile } from './atomic-write-file.js'
|
|
8
8
|
import { fingerprintContent, staleFileError } from './content-fingerprint.js'
|
|
9
9
|
import { withFileMutationLock } from './file-mutation-lock.js'
|
|
@@ -350,7 +350,7 @@ export const EditTool = defineTool({
|
|
|
350
350
|
// machine, and answers it with whatever happens to exist there.
|
|
351
351
|
const filePath = context.sandbox
|
|
352
352
|
? undefined
|
|
353
|
-
: await
|
|
353
|
+
: await resolveWithinAnyReal(toolRoots(context), parsed.data.path)
|
|
354
354
|
// Read-modify-write is not atomic on its own: two edits to the same
|
|
355
355
|
// path interleave their reads, and the second write lands on content
|
|
356
356
|
// the first had already replaced — so one edit vanishes and the loser
|