@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,157 +1,139 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { basename, dirname, relative, resolve, sep } from 'node:path'
|
|
1
|
+
import { isAbsolute, join, relative, sep } from 'node:path'
|
|
3
2
|
import { z } from 'zod'
|
|
4
|
-
import
|
|
5
|
-
import type {
|
|
3
|
+
import { walkFilesLocally } from '../../sandbox/file-walk.js'
|
|
4
|
+
import type { SandboxWalkFilesOptions } from '../../types/sandbox/index.js'
|
|
6
5
|
import { defineTool } from '../defineTool.js'
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { joinPosix, relativePosix, resolveWithinPosix } from '../posix-path.js'
|
|
6
|
+
import { resolveWithin, resolveWithinAny, resolveWithinAnyReal, toolRoots } from '../paths.js'
|
|
7
|
+
import { relativePosix, resolveWithinPosix } from '../posix-path.js'
|
|
10
8
|
|
|
11
|
-
/**
|
|
12
|
-
* Cap on results, shared by both paths so a sandboxed search and a host
|
|
13
|
-
* search truncate at the same point.
|
|
14
|
-
*/
|
|
15
9
|
const MAX_GLOB_RESULTS = 500
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Enumerate inside the sandbox and match there.
|
|
19
|
-
*
|
|
20
|
-
* This tool read the HOST filesystem through `node:fs` and referenced
|
|
21
|
-
* `context.sandbox` nowhere, so with a container backend wired in the
|
|
22
|
-
* sandbox was not a read boundary at all. The paths it returned were
|
|
23
|
-
* host-relative too, while `read` resolves what it is given INSIDE the
|
|
24
|
-
* sandbox — so every glob-to-read handoff either failed or opened a
|
|
25
|
-
* different file. Every sibling builtin already remembers this branch.
|
|
26
|
-
*
|
|
27
|
-
* `listFiles` returns sandbox-relative paths, which is the coordinate
|
|
28
|
-
* system `read` and `grep` already speak, so a path from here can be
|
|
29
|
-
* handed straight to them.
|
|
30
|
-
*/
|
|
31
|
-
async function globInSandbox(
|
|
32
|
-
input: { pattern: string; path?: string },
|
|
33
|
-
sandbox: Sandbox,
|
|
34
|
-
): Promise<ToolResult> {
|
|
35
|
-
// The sandbox's own coordinate system — see `posix-path`.
|
|
36
|
-
const root = resolveWithinPosix(sandbox.rootDir, input.path)
|
|
37
|
-
const entries = await sandbox.listFiles(root)
|
|
38
|
-
|
|
39
|
-
let pattern = input.pattern
|
|
40
|
-
if (!pattern.includes('/') && !pattern.startsWith('**/')) pattern = `**/${pattern}`
|
|
41
|
-
|
|
42
|
-
const matches: string[] = []
|
|
43
|
-
for (const entry of entries) {
|
|
44
|
-
const relPath = relativePosix(sandbox.rootDir, joinPosix(root, entry.path))
|
|
45
|
-
if (!matchesGlob(relPath, pattern)) continue
|
|
46
|
-
matches.push(`./${relPath}`)
|
|
47
|
-
if (matches.length >= MAX_GLOB_RESULTS) break
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (matches.length === 0) {
|
|
51
|
-
return {
|
|
52
|
-
success: true,
|
|
53
|
-
output: `No files found matching pattern "${input.pattern}" in ${root}`,
|
|
54
|
-
data: { count: 0, files: [], sandboxed: true },
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
success: true,
|
|
59
|
-
output: matches.join('\n'),
|
|
60
|
-
data: { count: matches.length, files: matches, sandboxed: true },
|
|
61
|
-
}
|
|
62
|
-
}
|
|
10
|
+
const MAX_VISITED_ENTRIES = 20_000
|
|
63
11
|
|
|
64
12
|
const inputSchema = z.object({
|
|
65
|
-
pattern: z
|
|
13
|
+
pattern: z
|
|
14
|
+
.string()
|
|
15
|
+
.min(1)
|
|
16
|
+
.max(4096)
|
|
17
|
+
.describe(
|
|
18
|
+
'File glob relative to path. "*" lists immediate files; "**/*.ts" explicitly searches subdirectories. Supports braces and character classes. Known file paths can be read directly without discovery.',
|
|
19
|
+
),
|
|
66
20
|
path: z
|
|
67
21
|
.string()
|
|
68
22
|
.optional()
|
|
69
|
-
.describe(
|
|
23
|
+
.describe(
|
|
24
|
+
'Directory to search in. Defaults to the working directory. Choose the narrowest relevant directory.',
|
|
25
|
+
),
|
|
26
|
+
include_hidden: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe(
|
|
30
|
+
'Include hidden files and directories in wildcard matches. Default: false. Explicit dotfile patterns still match.',
|
|
31
|
+
),
|
|
70
32
|
})
|
|
71
33
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (!match || match.index === undefined) {
|
|
80
|
-
return { baseDir: dirname(pattern), relativePattern: basename(pattern) }
|
|
34
|
+
/** Keep the pattern in the selected directory's coordinate system. */
|
|
35
|
+
function relativePattern(pattern: string, root: string, sandboxed: boolean): string {
|
|
36
|
+
let result = sandboxed ? pattern : pattern.split(sep).join('/')
|
|
37
|
+
if (result.split('/').includes('..')) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
'Glob pattern escapes the search directory through "..". Choose a contained path and a relative pattern.',
|
|
40
|
+
)
|
|
81
41
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return { baseDir: '', relativePattern: pattern }
|
|
42
|
+
if (sandboxed ? result.startsWith('/') : isAbsolute(pattern)) {
|
|
43
|
+
const contained = sandboxed ? resolveWithinPosix(root, result) : resolveWithin(root, pattern)
|
|
44
|
+
result = sandboxed
|
|
45
|
+
? relativePosix(root, contained)
|
|
46
|
+
: relative(root, contained).split(sep).join('/')
|
|
88
47
|
}
|
|
48
|
+
while (result.startsWith('./')) result = result.slice(2)
|
|
49
|
+
return result || '.'
|
|
50
|
+
}
|
|
89
51
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
return
|
|
52
|
+
/** Keep unusual filenames unambiguous without changing the returned path data. */
|
|
53
|
+
function displayPath(path: string): string {
|
|
54
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: quote filenames containing control bytes instead of creating fake result lines.
|
|
55
|
+
return /[\x00-\x1f\x7f]/.test(path) ? JSON.stringify(path) : path
|
|
94
56
|
}
|
|
95
57
|
|
|
96
58
|
export const GlobTool = defineTool({
|
|
97
59
|
name: 'glob',
|
|
98
|
-
description:
|
|
60
|
+
description:
|
|
61
|
+
'Finds regular files by glob pattern in a bounded search. "*" searches one directory; use "**" explicitly for recursive discovery. Returns at most 500 paths and identifies incomplete searches. Does not follow symlinks.',
|
|
99
62
|
inputSchema,
|
|
100
63
|
category: 'filesystem',
|
|
101
64
|
permissions: ['file_read'],
|
|
102
65
|
readOnly: true,
|
|
103
66
|
destructive: false,
|
|
104
67
|
concurrencySafe: true,
|
|
68
|
+
timeoutMs: 15_000,
|
|
105
69
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Contained, not merely resolved. This was a bare `resolve`, so
|
|
112
|
-
// `path: "../../.."` reached whatever sits above the working
|
|
113
|
-
// directory — with no sandbox needed to make it work.
|
|
114
|
-
const basePath = resolveWithin(context.workingDirectory, input.path)
|
|
115
|
-
|
|
116
|
-
let searchPath = basePath
|
|
117
|
-
let pattern = input.pattern
|
|
70
|
+
presentCall(input) {
|
|
71
|
+
return { kind: 'generic', label: `${input.pattern} in ${input.path ?? '.'}` }
|
|
72
|
+
},
|
|
118
73
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
74
|
+
async execute(input, context) {
|
|
75
|
+
context.abortSignal?.throwIfAborted()
|
|
76
|
+
const sandbox = context.sandbox
|
|
77
|
+
const lexicalRoot = sandbox
|
|
78
|
+
? resolveWithinPosix(sandbox.rootDir, input.path)
|
|
79
|
+
: resolveWithinAny(toolRoots(context), input.path)
|
|
80
|
+
const root = sandbox ? lexicalRoot : await resolveWithinAnyReal(toolRoots(context), input.path)
|
|
81
|
+
const pattern = relativePattern(input.pattern, lexicalRoot, sandbox !== undefined)
|
|
82
|
+
const walkSandbox = sandbox?.walkFiles?.bind(sandbox)
|
|
83
|
+
if (sandbox && !walkSandbox) {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
output: '',
|
|
87
|
+
error:
|
|
88
|
+
'This sandbox does not support bounded file discovery (Sandbox.walkFiles). Update its adapter or use an available directory-listing command inside the sandbox.',
|
|
128
89
|
}
|
|
129
90
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
for await (const entry of glob(pattern, { cwd: searchPath })) {
|
|
138
|
-
const absolutePath = resolve(searchPath, entry)
|
|
139
|
-
matches.push(`./${relative(context.workingDirectory, absolutePath)}`)
|
|
140
|
-
if (matches.length >= MAX_GLOB_RESULTS) break
|
|
91
|
+
const options: SandboxWalkFilesOptions = {
|
|
92
|
+
pattern,
|
|
93
|
+
signal: context.abortSignal,
|
|
94
|
+
maxEntries: MAX_GLOB_RESULTS + 1,
|
|
95
|
+
maxVisitedEntries: MAX_VISITED_ENTRIES,
|
|
96
|
+
includeHidden: input.include_hidden ?? false,
|
|
141
97
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
98
|
+
const entries = walkSandbox ? walkSandbox(root, options) : walkFilesLocally(root, options)
|
|
99
|
+
const files: string[] = []
|
|
100
|
+
let truncated = false
|
|
101
|
+
let failure: string | undefined
|
|
102
|
+
try {
|
|
103
|
+
for await (const entry of entries) {
|
|
104
|
+
context.abortSignal?.throwIfAborted()
|
|
105
|
+
const absolute = sandbox
|
|
106
|
+
? resolveWithinPosix(root, entry.path)
|
|
107
|
+
: resolveWithin(root, entry.path)
|
|
108
|
+
if (files.length === MAX_GLOB_RESULTS) {
|
|
109
|
+
truncated = true
|
|
110
|
+
break
|
|
111
|
+
}
|
|
112
|
+
// Readers resolve relative input against the original working path,
|
|
113
|
+
// which may be a symlink. Project back through the selected alias
|
|
114
|
+
// before relativizing so added directories remain reachable.
|
|
115
|
+
const file = sandbox
|
|
116
|
+
? relativePosix(sandbox.rootDir, absolute)
|
|
117
|
+
: relative(context.workingDirectory, join(lexicalRoot, relative(root, absolute)))
|
|
118
|
+
files.push(`./${sandbox ? file : file.split(sep).join('/')}`)
|
|
148
119
|
}
|
|
120
|
+
} catch (error) {
|
|
121
|
+
if (context.abortSignal?.aborted) throw error
|
|
122
|
+
truncated = true
|
|
123
|
+
failure = error instanceof Error ? error.message : String(error)
|
|
149
124
|
}
|
|
150
|
-
|
|
125
|
+
const notice = failure
|
|
126
|
+
? `[Search incomplete: ${failure}]`
|
|
127
|
+
: truncated
|
|
128
|
+
? `[Showing the first ${MAX_GLOB_RESULTS} matching files. Narrow the directory or pattern for the remaining results.]`
|
|
129
|
+
: undefined
|
|
151
130
|
return {
|
|
152
|
-
success:
|
|
153
|
-
output:
|
|
154
|
-
|
|
131
|
+
success: failure === undefined,
|
|
132
|
+
output:
|
|
133
|
+
[...files.map(displayPath), ...(notice ? [notice] : [])].join('\n') ||
|
|
134
|
+
`No files found matching pattern "${input.pattern}" in ${root}`,
|
|
135
|
+
data: { count: files.length, files, truncated, ...(sandbox ? { sandboxed: true } : {}) },
|
|
136
|
+
...(failure ? { error: failure } : {}),
|
|
155
137
|
}
|
|
156
138
|
},
|
|
157
139
|
})
|
|
@@ -1,60 +1,54 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { readFile } from 'node:fs/promises'
|
|
2
|
+
import { isAbsolute, join, relative, sep } from 'node:path'
|
|
3
3
|
import { z } from 'zod'
|
|
4
|
-
import
|
|
4
|
+
import { walkFilesLocally } from '../../sandbox/file-walk.js'
|
|
5
|
+
import type { SandboxWalkFilesOptions } from '../../types/sandbox/index.js'
|
|
6
|
+
import { subscribeToAbort } from '../../utils/abort.js'
|
|
5
7
|
import { defineTool } from '../defineTool.js'
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* and read — so that is all this abstracts. Matching, context lines and
|
|
15
|
-
* the caps stay in one implementation; duplicating them per source is how
|
|
16
|
-
* the two would drift apart, and the sandbox path is the one nobody runs
|
|
17
|
-
* by accident.
|
|
18
|
-
*/
|
|
19
|
-
interface FileSource {
|
|
20
|
-
/** The root every reported path is relative to. */
|
|
21
|
-
readonly root: string
|
|
22
|
-
/** True when paths are the sandbox's, not the host's. */
|
|
23
|
-
readonly posix?: boolean
|
|
24
|
-
list(searchRoot: string, pattern: string): AsyncIterable<string>
|
|
25
|
-
read(path: string): Promise<Buffer>
|
|
26
|
-
}
|
|
8
|
+
import {
|
|
9
|
+
resolveWithin,
|
|
10
|
+
resolveWithinAny,
|
|
11
|
+
resolveWithinAnyReal,
|
|
12
|
+
resolveWithinReal,
|
|
13
|
+
toolRoots,
|
|
14
|
+
} from '../paths.js'
|
|
15
|
+
import { relativePosix, resolveWithinPosix } from '../posix-path.js'
|
|
27
16
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
17
|
+
/** A remote read has no signal parameter; stop consuming it when the turn ends. */
|
|
18
|
+
async function readWithSignal(read: () => Promise<Buffer>, signal?: AbortSignal): Promise<Buffer> {
|
|
19
|
+
signal?.throwIfAborted()
|
|
20
|
+
if (!signal) return await read()
|
|
21
|
+
let dispose: (() => void) | undefined
|
|
22
|
+
try {
|
|
23
|
+
const cancelled = new Promise<never>((_, reject) => {
|
|
24
|
+
dispose = subscribeToAbort(signal, () => reject(signal.reason))
|
|
25
|
+
})
|
|
26
|
+
// Promise.race observes any late rejection. A late buffer is never searched.
|
|
27
|
+
return await Promise.race([
|
|
28
|
+
Promise.resolve().then(() => {
|
|
29
|
+
signal.throwIfAborted()
|
|
30
|
+
return read()
|
|
31
|
+
}),
|
|
32
|
+
cancelled,
|
|
33
|
+
])
|
|
34
|
+
} finally {
|
|
35
|
+
dispose?.()
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
38
|
|
|
40
|
-
function
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// two disagree, and then hand the model a path its own
|
|
50
|
-
// sandbox cannot open.
|
|
51
|
-
const absolute = joinPosix(searchRoot, entry.path)
|
|
52
|
-
const relPath = relativePosix(sandbox.rootDir, absolute)
|
|
53
|
-
if (matchesGlob(relPath, pattern)) yield absolute
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
read: (path) => sandbox.readFile(path),
|
|
39
|
+
function relativeInclude(include: string, root: string, sandboxed: boolean): string {
|
|
40
|
+
let pattern = sandboxed ? include : include.split(sep).join('/')
|
|
41
|
+
if (pattern.split('/').includes('..'))
|
|
42
|
+
throw new Error('Include pattern escapes the search directory')
|
|
43
|
+
if (sandboxed ? pattern.startsWith('/') : isAbsolute(include)) {
|
|
44
|
+
const absolute = sandboxed ? resolveWithinPosix(root, pattern) : resolveWithin(root, include)
|
|
45
|
+
pattern = sandboxed
|
|
46
|
+
? relativePosix(root, absolute)
|
|
47
|
+
: relative(root, absolute).split(sep).join('/')
|
|
57
48
|
}
|
|
49
|
+
while (pattern.startsWith('./')) pattern = pattern.slice(2)
|
|
50
|
+
// Grep's existing unqualified include is recursive: *.ts means **/*.ts.
|
|
51
|
+
return pattern.includes('/') ? pattern : `**/${pattern}`
|
|
58
52
|
}
|
|
59
53
|
|
|
60
54
|
const inputSchema = z.object({
|
|
@@ -84,6 +78,7 @@ const inputSchema = z.object({
|
|
|
84
78
|
|
|
85
79
|
const MAX_FILE_SIZE = 5 * 1024 * 1024 // 5 MB — skip binaries/large files
|
|
86
80
|
const BINARY_CHECK_BYTES = 512
|
|
81
|
+
const MAX_VISITED_ENTRIES = 20_000
|
|
87
82
|
|
|
88
83
|
function isBinaryContent(buffer: Buffer): boolean {
|
|
89
84
|
const check = buffer.subarray(0, BINARY_CHECK_BYTES)
|
|
@@ -96,15 +91,17 @@ function isBinaryContent(buffer: Buffer): boolean {
|
|
|
96
91
|
export const GrepTool = defineTool({
|
|
97
92
|
name: 'grep',
|
|
98
93
|
description:
|
|
99
|
-
'Searches file contents using a regular expression. Returns matching lines with file paths, line numbers, and optional context lines. Skips binary files.',
|
|
94
|
+
'Searches file contents using a regular expression. Returns matching lines with file paths, line numbers, and optional context lines. Searches incrementally with a bounded traversal; identifies incomplete searches. Skips binary files, files over 5 MB, and symlinks. Choose the narrowest relevant directory.',
|
|
100
95
|
inputSchema,
|
|
101
96
|
category: 'analysis',
|
|
102
97
|
permissions: ['file_read'],
|
|
103
98
|
readOnly: true,
|
|
104
99
|
destructive: false,
|
|
105
100
|
concurrencySafe: true,
|
|
101
|
+
timeoutMs: 15_000,
|
|
106
102
|
|
|
107
103
|
async execute(input, context) {
|
|
104
|
+
context.abortSignal?.throwIfAborted()
|
|
108
105
|
const flags = input.case_sensitive ? 'g' : 'gi'
|
|
109
106
|
let regex: RegExp
|
|
110
107
|
try {
|
|
@@ -117,108 +114,145 @@ export const GrepTool = defineTool({
|
|
|
117
114
|
}
|
|
118
115
|
}
|
|
119
116
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
:
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
filePattern = `**/${filePattern}`
|
|
117
|
+
const sandbox = context.sandbox
|
|
118
|
+
const lexicalRoot = sandbox
|
|
119
|
+
? resolveWithinPosix(sandbox.rootDir, input.path)
|
|
120
|
+
: resolveWithinAny(toolRoots(context), input.path)
|
|
121
|
+
const root = sandbox ? lexicalRoot : await resolveWithinAnyReal(toolRoots(context), input.path)
|
|
122
|
+
const filePattern = relativeInclude(input.include ?? '**/*', lexicalRoot, sandbox !== undefined)
|
|
123
|
+
const walkSandbox = sandbox?.walkFiles?.bind(sandbox)
|
|
124
|
+
if (sandbox && !walkSandbox) {
|
|
125
|
+
return {
|
|
126
|
+
success: false,
|
|
127
|
+
output: '',
|
|
128
|
+
error:
|
|
129
|
+
'This sandbox does not support bounded file discovery (Sandbox.walkFiles). Update its adapter before searching file contents.',
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const options: SandboxWalkFilesOptions = {
|
|
133
|
+
pattern: filePattern,
|
|
134
|
+
signal: context.abortSignal,
|
|
135
|
+
maxEntries: MAX_VISITED_ENTRIES + 1,
|
|
136
|
+
maxVisitedEntries: MAX_VISITED_ENTRIES,
|
|
137
|
+
// Preserve existing source behavior: sandbox grep included dotfiles;
|
|
138
|
+
// node's host glob excluded wildcard dotfiles.
|
|
139
|
+
includeHidden: sandbox !== undefined,
|
|
144
140
|
}
|
|
141
|
+
const entries = walkSandbox ? walkSandbox(root, options) : walkFilesLocally(root, options)
|
|
145
142
|
|
|
146
143
|
const results: string[] = []
|
|
147
144
|
let totalMatches = 0
|
|
148
145
|
let filesSearched = 0
|
|
149
146
|
let filesMatched = 0
|
|
150
147
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
for (let i = 0; i < lines.length; i++) {
|
|
168
|
-
const line = lines[i] ?? ''
|
|
169
|
-
regex.lastIndex = 0
|
|
170
|
-
if (!regex.test(line)) continue
|
|
148
|
+
let truncated = false
|
|
149
|
+
let failure: string | undefined
|
|
150
|
+
let unreadableFiles = 0
|
|
151
|
+
try {
|
|
152
|
+
for await (const entry of entries) {
|
|
153
|
+
context.abortSignal?.throwIfAborted()
|
|
154
|
+
const filePath = sandbox
|
|
155
|
+
? resolveWithinPosix(root, entry.path)
|
|
156
|
+
: resolveWithin(root, entry.path)
|
|
157
|
+
if (filesSearched >= MAX_VISITED_ENTRIES) {
|
|
158
|
+
throw new Error(
|
|
159
|
+
`File search stopped after examining ${MAX_VISITED_ENTRIES} files; narrow its root or include pattern.`,
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
filesSearched++
|
|
163
|
+
if (entry.size > MAX_FILE_SIZE) continue
|
|
171
164
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
165
|
+
let content: string
|
|
166
|
+
try {
|
|
167
|
+
const buffer = await readWithSignal(
|
|
168
|
+
() =>
|
|
169
|
+
sandbox
|
|
170
|
+
? sandbox.readFile(filePath)
|
|
171
|
+
: resolveWithinReal(root, filePath).then((contained) =>
|
|
172
|
+
readFile(contained, { signal: context.abortSignal }),
|
|
173
|
+
),
|
|
174
|
+
context.abortSignal,
|
|
175
|
+
)
|
|
176
|
+
context.abortSignal?.throwIfAborted()
|
|
177
|
+
if (buffer.length > MAX_FILE_SIZE || isBinaryContent(buffer)) continue
|
|
178
|
+
content = buffer.toString('utf-8')
|
|
179
|
+
} catch (error) {
|
|
180
|
+
if (context.abortSignal?.aborted) throw error
|
|
181
|
+
unreadableFiles++
|
|
182
|
+
continue
|
|
175
183
|
}
|
|
176
184
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
// hand the model a string `read` then resolves somewhere else.
|
|
180
|
-
const relPath = source.posix
|
|
181
|
-
? `./${relativePosix(source.root, filePath)}`
|
|
182
|
-
: `./${relative(source.root, filePath).split(sep).join('/')}`
|
|
185
|
+
const lines = content.split('\n')
|
|
186
|
+
let fileHasMatch = false
|
|
183
187
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
const
|
|
188
|
+
for (let i = 0; i < lines.length; i++) {
|
|
189
|
+
context.abortSignal?.throwIfAborted()
|
|
190
|
+
const line = lines[i] ?? ''
|
|
191
|
+
regex.lastIndex = 0
|
|
192
|
+
if (!regex.test(line)) continue
|
|
187
193
|
|
|
188
|
-
if (
|
|
189
|
-
|
|
194
|
+
if (!fileHasMatch) {
|
|
195
|
+
fileHasMatch = true
|
|
196
|
+
filesMatched++
|
|
190
197
|
}
|
|
191
198
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
199
|
+
const relPath = sandbox
|
|
200
|
+
? `./${relativePosix(sandbox.rootDir, filePath)}`
|
|
201
|
+
: `./${relative(context.workingDirectory, join(lexicalRoot, relative(root, filePath)))
|
|
202
|
+
.split(sep)
|
|
203
|
+
.join('/')}`
|
|
204
|
+
|
|
205
|
+
if (input.context_lines > 0) {
|
|
206
|
+
const start = Math.max(0, i - input.context_lines)
|
|
207
|
+
const end = Math.min(lines.length - 1, i + input.context_lines)
|
|
208
|
+
|
|
209
|
+
if (results.length > 0) {
|
|
210
|
+
results.push('--')
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
for (let j = start; j <= end; j++) {
|
|
214
|
+
const prefix = j === i ? ':' : '-'
|
|
215
|
+
results.push(`${relPath}${prefix}${j + 1}${prefix}${lines[j]}`)
|
|
216
|
+
}
|
|
217
|
+
} else {
|
|
218
|
+
results.push(`${relPath}:${i + 1}:${line}`)
|
|
195
219
|
}
|
|
196
|
-
|
|
197
|
-
|
|
220
|
+
|
|
221
|
+
totalMatches++
|
|
222
|
+
if (totalMatches >= input.max_results) break
|
|
198
223
|
}
|
|
199
224
|
|
|
200
|
-
totalMatches
|
|
201
|
-
|
|
225
|
+
if (totalMatches >= input.max_results) {
|
|
226
|
+
// Do not read another file just to prove there are more hits. Reaching
|
|
227
|
+
// the requested cap means completeness was not established.
|
|
228
|
+
truncated = true
|
|
229
|
+
break
|
|
230
|
+
}
|
|
202
231
|
}
|
|
203
|
-
|
|
204
|
-
|
|
232
|
+
} catch (error) {
|
|
233
|
+
truncated = true
|
|
234
|
+
failure = (error instanceof Error ? error.message : String(error)) || 'File search failed.'
|
|
205
235
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
success: true,
|
|
210
|
-
output: `No matches found for pattern "${input.pattern}"`,
|
|
211
|
-
data: { totalMatches: 0, filesSearched, filesMatched: 0 },
|
|
212
|
-
}
|
|
236
|
+
if (unreadableFiles > 0) {
|
|
237
|
+
truncated = true
|
|
238
|
+
failure ??= `${unreadableFiles} file(s) could not be read.`
|
|
213
239
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
240
|
+
const summary =
|
|
241
|
+
totalMatches > 0
|
|
242
|
+
? `Found ${totalMatches} match(es) in ${filesMatched} file(s) (${filesSearched} files searched)`
|
|
243
|
+
: truncated
|
|
244
|
+
? `No matches found in the files searched for pattern "${input.pattern}"`
|
|
245
|
+
: `No matches found for pattern "${input.pattern}"`
|
|
246
|
+
const notice = failure
|
|
247
|
+
? `[Search incomplete: ${failure}]`
|
|
248
|
+
: truncated
|
|
249
|
+
? `[Search incomplete: reached max_results (${input.max_results}). Narrow the directory or include pattern for a complete search.]`
|
|
250
|
+
: undefined
|
|
218
251
|
return {
|
|
219
|
-
success:
|
|
220
|
-
output,
|
|
221
|
-
data: { totalMatches, filesSearched, filesMatched },
|
|
252
|
+
success: failure === undefined,
|
|
253
|
+
output: [results.join('\n'), summary, notice].filter(Boolean).join('\n\n'),
|
|
254
|
+
data: { totalMatches, filesSearched, filesMatched, truncated },
|
|
255
|
+
...(failure ? { error: failure } : {}),
|
|
222
256
|
}
|
|
223
257
|
},
|
|
224
258
|
})
|
package/src/tools/builtins/ls.ts
CHANGED
|
@@ -4,8 +4,8 @@ import { z } from 'zod'
|
|
|
4
4
|
import type { Sandbox } from '../../types/sandbox/index.js'
|
|
5
5
|
import type { ToolResult } from '../../types/tool/index.js'
|
|
6
6
|
import { defineTool } from '../defineTool.js'
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { resolveWithinAny, toolRoots } from '../paths.js'
|
|
8
|
+
import { relativePosix, resolveWithinPosix } from '../posix-path.js'
|
|
9
9
|
|
|
10
10
|
const inputSchema = z.object({
|
|
11
11
|
path: z.string().default('.').describe('Directory path to list. Defaults to working directory.'),
|
|
@@ -140,7 +140,7 @@ async function listInSandbox(
|
|
|
140
140
|
// Relative to the LISTED directory, in the sandbox's own coordinates.
|
|
141
141
|
const relativePaths: { segments: string[]; size: number }[] = []
|
|
142
142
|
for (const entry of entries) {
|
|
143
|
-
const rel = relativePosix(root,
|
|
143
|
+
const rel = relativePosix(root, resolveWithinPosix(root, entry.path))
|
|
144
144
|
if (!rel || rel.startsWith('..')) continue
|
|
145
145
|
const segments = rel.split('/').filter(Boolean)
|
|
146
146
|
if (segments.length === 0) continue
|
|
@@ -220,7 +220,7 @@ export const LsTool = defineTool({
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
// Contained, not merely resolved — see `resolveWithin`.
|
|
223
|
-
const targetPath =
|
|
223
|
+
const targetPath = resolveWithinAny(toolRoots(context), input.path)
|
|
224
224
|
|
|
225
225
|
if (input.recursive) {
|
|
226
226
|
const output: string[] = []
|