@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
|
@@ -53,10 +53,15 @@ import type {
|
|
|
53
53
|
SessionSummaryRef,
|
|
54
54
|
} from '../../types/summary/ref.js'
|
|
55
55
|
import {
|
|
56
|
+
asProjectId,
|
|
57
|
+
asSessionId,
|
|
58
|
+
asSubSessionId,
|
|
59
|
+
asTopicId,
|
|
56
60
|
generateMessageId,
|
|
57
61
|
generateProjectId,
|
|
58
62
|
generateSessionId,
|
|
59
63
|
generateSubSessionId,
|
|
64
|
+
isEntityId,
|
|
60
65
|
} from '../../utils/id.js'
|
|
61
66
|
import { DiskRecordStore } from '../kv/record-store.js'
|
|
62
67
|
import {
|
|
@@ -151,26 +156,19 @@ const rootPathBindings = new DiskRevisionRecordStore<RootPathBinding>(
|
|
|
151
156
|
)
|
|
152
157
|
|
|
153
158
|
/**
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* v1→v2 step in the same `migrate()` call, has `topicId` starting `top_`
|
|
159
|
-
* (or `thd_`, freshly renamed from `threadId` — this step runs on it next
|
|
160
|
-
* in the same pass) either way, and the check below is what makes running
|
|
161
|
-
* it on an already-correct value a same-object no-op rather than a
|
|
162
|
-
* needless copy. Same one-function-runs-over-every-kind shape as its
|
|
163
|
-
* v1→v2 sibling: only `PersistedSession.topicId` is ever `thd_`-prefixed,
|
|
164
|
-
* so every other kind this schema stamps (project.json, subsession.json,
|
|
165
|
-
* summary.json, each messages.jsonl line) has no `topicId` key and comes
|
|
166
|
-
* back untouched.
|
|
159
|
+
* Validate topic UUIDs before accepting a stored record. Prefixed IDs are
|
|
160
|
+
* rejected without rewriting stored references.
|
|
161
|
+
* This migrator runs over every session-store record kind; records without
|
|
162
|
+
* a topicId are intentionally untouched.
|
|
167
163
|
*/
|
|
168
164
|
export function migrateSessionStoreTopicIdPrefix(
|
|
169
165
|
record: Record<string, unknown>,
|
|
170
166
|
): Record<string, unknown> {
|
|
171
167
|
const topicId = record.topicId
|
|
172
|
-
if (typeof topicId
|
|
173
|
-
|
|
168
|
+
if (typeof topicId === 'string') {
|
|
169
|
+
asTopicId(topicId)
|
|
170
|
+
}
|
|
171
|
+
return record
|
|
174
172
|
}
|
|
175
173
|
|
|
176
174
|
/**
|
|
@@ -567,6 +565,7 @@ export class DiskSessionStore implements SessionStore {
|
|
|
567
565
|
|
|
568
566
|
const found: Project[] = []
|
|
569
567
|
for (const entry of entries) {
|
|
568
|
+
if (!isEntityId(entry, 'project')) continue
|
|
570
569
|
const raw = await records.read<PersistedProject>(join(projectsRoot, entry, 'project.json'))
|
|
571
570
|
if (!raw) continue
|
|
572
571
|
// Another tenant's project is absent, not an error — a listing is a
|
|
@@ -585,13 +584,17 @@ export class DiskSessionStore implements SessionStore {
|
|
|
585
584
|
// Session CRUD ------------------------------------------------------------
|
|
586
585
|
|
|
587
586
|
async createSession(params: CreateSessionParams, tenantId: TenantId): Promise<Session> {
|
|
587
|
+
const id = params.id === undefined ? generateSessionId() : asSessionId(params.id)
|
|
588
588
|
const project = await this.getProject(params.projectId, tenantId)
|
|
589
589
|
if (!project) {
|
|
590
590
|
throw new Error(`Project ${params.projectId} not found`)
|
|
591
591
|
}
|
|
592
592
|
const now = new Date()
|
|
593
|
+
if (params.id !== undefined && (await this.getSession(id, tenantId))) {
|
|
594
|
+
throw new Error(`Session ${params.id} already exists`)
|
|
595
|
+
}
|
|
593
596
|
const session: Session = {
|
|
594
|
-
id
|
|
597
|
+
id,
|
|
595
598
|
topicId: params.topicId,
|
|
596
599
|
projectId: params.projectId,
|
|
597
600
|
tenantId,
|
|
@@ -647,11 +650,11 @@ export class DiskSessionStore implements SessionStore {
|
|
|
647
650
|
|
|
648
651
|
const results: Session[] = []
|
|
649
652
|
for (const rawProject of projectDirs) {
|
|
650
|
-
if (!rawProject
|
|
653
|
+
if (!isEntityId(rawProject, 'project')) continue
|
|
651
654
|
const sessionsRoot = join(projectsDir, rawProject, 'sessions')
|
|
652
655
|
const sessionDirs = await records.scanNames(sessionsRoot, '')
|
|
653
656
|
for (const rawSessionId of sessionDirs) {
|
|
654
|
-
if (!rawSessionId
|
|
657
|
+
if (!isEntityId(rawSessionId, 'session')) continue
|
|
655
658
|
const path = join(sessionsRoot, rawSessionId)
|
|
656
659
|
const raw = await records.read<PersistedSession>(join(path, 'session.json'))
|
|
657
660
|
if (!raw) continue
|
|
@@ -682,7 +685,7 @@ export class DiskSessionStore implements SessionStore {
|
|
|
682
685
|
|
|
683
686
|
const results: Session[] = []
|
|
684
687
|
for (const rawSessionId of sessionDirs) {
|
|
685
|
-
if (!rawSessionId
|
|
688
|
+
if (!isEntityId(rawSessionId, 'session')) continue
|
|
686
689
|
const path = join(sessionsRoot, rawSessionId)
|
|
687
690
|
const raw = await records.read<PersistedSession>(join(path, 'session.json'))
|
|
688
691
|
if (!raw) continue
|
|
@@ -747,7 +750,7 @@ export class DiskSessionStore implements SessionStore {
|
|
|
747
750
|
// match the in-memory semantics.
|
|
748
751
|
const subsDir = join(located.path, 'subsessions')
|
|
749
752
|
const subEntries = await records.scanNames(subsDir, '')
|
|
750
|
-
if (subEntries.some((
|
|
753
|
+
if (subEntries.some((entry) => isEntityId(entry, 'subSession'))) {
|
|
751
754
|
throw new Error(
|
|
752
755
|
`Session ${sessionId} has attached sub-sessions; delete them before deleting the session`,
|
|
753
756
|
)
|
|
@@ -761,15 +764,15 @@ export class DiskSessionStore implements SessionStore {
|
|
|
761
764
|
const projectsDir = join(this.rootDir, 'projects')
|
|
762
765
|
const projectDirs = await records.scanNames(projectsDir, '')
|
|
763
766
|
for (const rawProject of projectDirs) {
|
|
764
|
-
if (!rawProject
|
|
767
|
+
if (!isEntityId(rawProject, 'project')) continue
|
|
765
768
|
const sessionsRoot = join(projectsDir, rawProject, 'sessions')
|
|
766
769
|
const siblingSessions = await records.scanNames(sessionsRoot, '')
|
|
767
770
|
for (const rawSib of siblingSessions) {
|
|
768
|
-
if (!rawSib
|
|
771
|
+
if (!isEntityId(rawSib, 'session')) continue
|
|
769
772
|
const sibSubsDir = join(sessionsRoot, rawSib, 'subsessions')
|
|
770
773
|
const sibSubs = await records.scanNames(sibSubsDir, '')
|
|
771
774
|
for (const rawSub of sibSubs) {
|
|
772
|
-
if (!rawSub
|
|
775
|
+
if (!isEntityId(rawSub, 'subSession')) continue
|
|
773
776
|
const subRaw = await records.read<PersistedSubSession>(
|
|
774
777
|
join(sibSubsDir, rawSub, 'subsession.json'),
|
|
775
778
|
)
|
|
@@ -1091,6 +1094,7 @@ export class DiskSessionStore implements SessionStore {
|
|
|
1091
1094
|
}
|
|
1092
1095
|
|
|
1093
1096
|
private projectDir(projectId: ProjectId): string {
|
|
1097
|
+
asProjectId(projectId)
|
|
1094
1098
|
const cached = this.projectIndex.get(projectId)
|
|
1095
1099
|
if (cached) return cached.path
|
|
1096
1100
|
const path = join(this.rootDir, 'projects', projectId)
|
|
@@ -1099,6 +1103,7 @@ export class DiskSessionStore implements SessionStore {
|
|
|
1099
1103
|
}
|
|
1100
1104
|
|
|
1101
1105
|
private async locateSession(sessionId: SessionId): Promise<SessionIndexEntry | null> {
|
|
1106
|
+
asSessionId(sessionId)
|
|
1102
1107
|
const cached = this.sessionIndex.get(sessionId)
|
|
1103
1108
|
if (cached) return cached
|
|
1104
1109
|
|
|
@@ -1107,12 +1112,12 @@ export class DiskSessionStore implements SessionStore {
|
|
|
1107
1112
|
// same `return null` the old catch took directly.
|
|
1108
1113
|
const projectDirs = await records.scanNames(projectsDir, '')
|
|
1109
1114
|
for (const rawId of projectDirs) {
|
|
1110
|
-
if (!rawId
|
|
1115
|
+
if (!isEntityId(rawId, 'project')) continue
|
|
1111
1116
|
const projectId = rawId as ProjectId
|
|
1112
1117
|
const sessionsRoot = join(projectsDir, projectId, 'sessions')
|
|
1113
1118
|
const sessionDirs = await records.scanNames(sessionsRoot, '')
|
|
1114
1119
|
for (const rawSessionId of sessionDirs) {
|
|
1115
|
-
if (!rawSessionId
|
|
1120
|
+
if (!isEntityId(rawSessionId, 'session')) continue
|
|
1116
1121
|
if (rawSessionId === sessionId) {
|
|
1117
1122
|
const entry: SessionIndexEntry = {
|
|
1118
1123
|
sessionId,
|
|
@@ -1133,6 +1138,7 @@ export class DiskSessionStore implements SessionStore {
|
|
|
1133
1138
|
projectId: ProjectId
|
|
1134
1139
|
path: string
|
|
1135
1140
|
} | null> {
|
|
1141
|
+
asSubSessionId(subSessionId)
|
|
1136
1142
|
const cached = this.subSessionIndex.get(subSessionId)
|
|
1137
1143
|
if (cached) return cached
|
|
1138
1144
|
|
|
@@ -1141,12 +1147,12 @@ export class DiskSessionStore implements SessionStore {
|
|
|
1141
1147
|
// same `return null` the old catch took directly.
|
|
1142
1148
|
const projectDirs = await records.scanNames(projectsDir, '')
|
|
1143
1149
|
for (const rawProject of projectDirs) {
|
|
1144
|
-
if (!rawProject
|
|
1150
|
+
if (!isEntityId(rawProject, 'project')) continue
|
|
1145
1151
|
const projectId = rawProject as ProjectId
|
|
1146
1152
|
const sessionsRoot = join(projectsDir, projectId, 'sessions')
|
|
1147
1153
|
const sessionDirs = await records.scanNames(sessionsRoot, '')
|
|
1148
1154
|
for (const rawSession of sessionDirs) {
|
|
1149
|
-
if (!rawSession
|
|
1155
|
+
if (!isEntityId(rawSession, 'session')) continue
|
|
1150
1156
|
const sessionId = rawSession as SessionId
|
|
1151
1157
|
const subsDir = join(sessionsRoot, sessionId, 'subsessions')
|
|
1152
1158
|
const subDirs = await records.scanNames(subsDir, '')
|
|
@@ -1177,14 +1183,15 @@ export class DiskSessionStore implements SessionStore {
|
|
|
1177
1183
|
const projectDirs = await records.scanNames(projectsDir, '')
|
|
1178
1184
|
|
|
1179
1185
|
for (const rawProject of projectDirs) {
|
|
1180
|
-
if (!rawProject
|
|
1186
|
+
if (!isEntityId(rawProject, 'project')) continue
|
|
1181
1187
|
const sessionsRoot = join(projectsDir, rawProject, 'sessions')
|
|
1182
1188
|
const sessionDirs = await records.scanNames(sessionsRoot, '')
|
|
1183
1189
|
for (const rawSession of sessionDirs) {
|
|
1184
|
-
if (!rawSession
|
|
1190
|
+
if (!isEntityId(rawSession, 'session')) continue
|
|
1185
1191
|
const subsRoot = join(sessionsRoot, rawSession, 'subsessions')
|
|
1186
1192
|
const subDirs = await records.scanNames(subsRoot, '')
|
|
1187
1193
|
for (const rawSub of subDirs) {
|
|
1194
|
+
if (!isEntityId(rawSub, 'subSession')) continue
|
|
1188
1195
|
const raw = await records.read<PersistedSubSession>(
|
|
1189
1196
|
join(subsRoot, rawSub, 'subsession.json'),
|
|
1190
1197
|
)
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* (Convention #5 deny-by-default, session-hierarchy.md §12.2).
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import { realpathSync } from 'node:fs'
|
|
12
|
+
import { resolve } from 'node:path'
|
|
11
13
|
import {
|
|
12
14
|
ProjectRootPathTakenError,
|
|
13
15
|
StaleProjectError,
|
|
@@ -32,6 +34,8 @@ import type {
|
|
|
32
34
|
import type { SubSession } from '../../types/session/sub-session.js'
|
|
33
35
|
import type { SessionSummaryRef } from '../../types/summary/ref.js'
|
|
34
36
|
import {
|
|
37
|
+
asProjectId,
|
|
38
|
+
asTenantId,
|
|
35
39
|
generateMessageId,
|
|
36
40
|
generateProjectId,
|
|
37
41
|
generateSessionId,
|
|
@@ -80,6 +84,36 @@ export class InMemorySessionStore implements SessionStore {
|
|
|
80
84
|
private readonly messages = new Map<SessionId, SessionMessage[]>()
|
|
81
85
|
private readonly summaries = new Map<SessionId, SummaryRecord>()
|
|
82
86
|
|
|
87
|
+
/** Hydrate existing Project snapshots without minting replacement identities. */
|
|
88
|
+
constructor(projects: readonly Project[] = []) {
|
|
89
|
+
const roots = new Map<string, ProjectId>()
|
|
90
|
+
for (const input of projects) {
|
|
91
|
+
const project = structuredClone(input)
|
|
92
|
+
asProjectId(project.id)
|
|
93
|
+
asTenantId(project.tenantId)
|
|
94
|
+
if (this.projects.has(project.id)) throw new Error(`Duplicate project ${project.id}`)
|
|
95
|
+
if (project.rootPath !== undefined) {
|
|
96
|
+
let rootPath: string
|
|
97
|
+
try {
|
|
98
|
+
rootPath = realpathSync(project.rootPath)
|
|
99
|
+
} catch (error) {
|
|
100
|
+
if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error
|
|
101
|
+
rootPath = resolve(project.rootPath)
|
|
102
|
+
}
|
|
103
|
+
const key = `${project.tenantId}\0${rootPath}`
|
|
104
|
+
const existingProjectId = roots.get(key)
|
|
105
|
+
if (existingProjectId) throw new ProjectRootPathTakenError({ rootPath, existingProjectId })
|
|
106
|
+
roots.set(key, project.id)
|
|
107
|
+
this.projects.set(project.id, {
|
|
108
|
+
tenantId: project.tenantId,
|
|
109
|
+
project: { ...project, rootPath },
|
|
110
|
+
})
|
|
111
|
+
} else {
|
|
112
|
+
this.projects.set(project.id, { tenantId: project.tenantId, project })
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
83
117
|
// Project CRUD ------------------------------------------------------------
|
|
84
118
|
|
|
85
119
|
async createProject(params: CreateProjectParams, tenantId: TenantId): Promise<Project> {
|
|
@@ -229,8 +263,11 @@ export class InMemorySessionStore implements SessionStore {
|
|
|
229
263
|
this.assertTenant(projectRecord.tenantId, tenantId, `project(${params.projectId})`)
|
|
230
264
|
|
|
231
265
|
const now = new Date()
|
|
266
|
+
if (params.id !== undefined && (await this.getSession(params.id, tenantId))) {
|
|
267
|
+
throw new Error(`Session ${params.id} already exists`)
|
|
268
|
+
}
|
|
232
269
|
const session: Session = {
|
|
233
|
-
id: generateSessionId(),
|
|
270
|
+
id: params.id ?? generateSessionId(),
|
|
234
271
|
topicId: params.topicId,
|
|
235
272
|
projectId: params.projectId,
|
|
236
273
|
tenantId,
|
package/src/store/task/disk.ts
CHANGED
|
@@ -11,7 +11,7 @@ import type {
|
|
|
11
11
|
TaskStore,
|
|
12
12
|
UpdateTaskParams,
|
|
13
13
|
} from '../../types/task/index.js'
|
|
14
|
-
import { generateTaskId } from '../../utils/id.js'
|
|
14
|
+
import { asRunId, asTaskId, asTenantId, generateTaskId, isEntityId } from '../../utils/id.js'
|
|
15
15
|
import { SCOPE_ATTRIBUTE } from '../../utils/log/types.js'
|
|
16
16
|
import { type Logger, resolveLogger } from '../../utils/logger.js'
|
|
17
17
|
import { DiskRecordStore } from '../kv/record-store.js'
|
|
@@ -82,12 +82,13 @@ export class DiskTaskStore implements TaskStore {
|
|
|
82
82
|
|
|
83
83
|
constructor(config: DiskTaskStoreConfig) {
|
|
84
84
|
this.baseDir = config.baseDir
|
|
85
|
-
this.defaultRunId = config.defaultRunId
|
|
86
|
-
this.tenantId = config.tenantId
|
|
85
|
+
this.defaultRunId = asRunId(config.defaultRunId)
|
|
86
|
+
this.tenantId = config.tenantId === undefined ? undefined : asTenantId(config.tenantId)
|
|
87
87
|
this.log = resolveLogger(config.logger).child({ [SCOPE_ATTRIBUTE]: 'store/task/disk' })
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
private taskDir(runId: RunId): string {
|
|
91
|
+
asRunId(runId)
|
|
91
92
|
if (this.tenantId) {
|
|
92
93
|
return join(this.baseDir, 'tenants', this.tenantId, 'tasks', runId)
|
|
93
94
|
}
|
|
@@ -95,6 +96,7 @@ export class DiskTaskStore implements TaskStore {
|
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
private taskPath(runId: RunId, taskId: TaskId): string {
|
|
99
|
+
asTaskId(taskId)
|
|
98
100
|
return join(this.taskDir(runId), `${taskId}.json`)
|
|
99
101
|
}
|
|
100
102
|
|
|
@@ -498,12 +500,9 @@ export class DiskTaskStore implements TaskStore {
|
|
|
498
500
|
: join(this.baseDir, 'tasks')
|
|
499
501
|
try {
|
|
500
502
|
const entries = await readdir(root, { withFileTypes: true })
|
|
501
|
-
//
|
|
502
|
-
// gives, including the honest half: a directory that is not a run must
|
|
503
|
-
// not be enumerated as one, this is not observable downstream today,
|
|
504
|
-
// and it is the declared return type that makes it worth keeping.
|
|
503
|
+
// The tasks directory identifies runs; either ID encoding is valid.
|
|
505
504
|
return entries
|
|
506
|
-
.filter((e) => e.isDirectory() && e.name
|
|
505
|
+
.filter((e) => e.isDirectory() && isEntityId(e.name, 'run'))
|
|
507
506
|
.map((e) => e.name as RunId)
|
|
508
507
|
} catch (err) {
|
|
509
508
|
const code = (err as NodeJS.ErrnoException).code
|
|
@@ -19,7 +19,7 @@ import type { TenantId } from '../../types/ids/index.js'
|
|
|
19
19
|
import type { ProjectId, TopicId } from '../../types/session/ids.js'
|
|
20
20
|
import type { Topic } from '../../types/topic/entity.js'
|
|
21
21
|
import type { CreateTopicParams, TopicStore } from '../../types/topic/store.js'
|
|
22
|
-
import { generateTopicId } from '../../utils/id.js'
|
|
22
|
+
import { asProjectId, asTenantId, asTopicId, generateTopicId } from '../../utils/id.js'
|
|
23
23
|
|
|
24
24
|
interface TopicRecord {
|
|
25
25
|
tenantId: TenantId
|
|
@@ -29,6 +29,18 @@ interface TopicRecord {
|
|
|
29
29
|
export class InMemoryTopicStore implements TopicStore {
|
|
30
30
|
private readonly topics = new Map<TopicId, TopicRecord>()
|
|
31
31
|
|
|
32
|
+
/** Hydrate existing Topic snapshots without creating new topic identities. */
|
|
33
|
+
constructor(topics: readonly Topic[] = []) {
|
|
34
|
+
for (const input of topics) {
|
|
35
|
+
const topic = structuredClone(input)
|
|
36
|
+
asTopicId(topic.id)
|
|
37
|
+
asProjectId(topic.projectId)
|
|
38
|
+
asTenantId(topic.tenantId)
|
|
39
|
+
if (this.topics.has(topic.id)) throw new Error(`Duplicate topic ${topic.id}`)
|
|
40
|
+
this.topics.set(topic.id, { tenantId: topic.tenantId, topic })
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
async createTopic(params: CreateTopicParams, tenantId: TenantId): Promise<Topic> {
|
|
33
45
|
const now = new Date()
|
|
34
46
|
const topic: Topic = {
|
package/src/test-support/ids.ts
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unchecked id constructors, for fixtures only.
|
|
3
|
-
*
|
|
4
|
-
* A test that needs three hundred distinct ids is not testing prefix
|
|
5
|
-
* validation, and paying a `startsWith` per literal to say `ses_1` buys it
|
|
6
|
-
* nothing. These are the cheap landing zone for that: same call shape as the
|
|
7
|
-
* `as*Id` constructors in `utils/id.ts`, no check.
|
|
8
|
-
*
|
|
9
|
-
* **Deliberately NOT exported from the package barrel.** The whole value of
|
|
10
|
-
* the checked constructors is that a malformed id cannot reach a store key,
|
|
11
|
-
* and an unchecked one on the public surface is a supported way around that.
|
|
12
|
-
* `test-support/` is reachable from inside this repo and nowhere else, which
|
|
13
|
-
* is exactly the reach this needs.
|
|
14
|
-
*
|
|
15
|
-
* Two shapes rather than forty functions, because a fixture wants brevity:
|
|
16
|
-
* `fixtureId.run('a')` reads at the call site, and `unchecked<RunId>(s)`
|
|
17
|
-
* covers anything the table misses.
|
|
18
|
-
*/
|
|
1
|
+
/** Deterministic UUID fixtures. Deliberately absent from the package barrel. */
|
|
19
2
|
|
|
3
|
+
import { createHash } from 'node:crypto'
|
|
20
4
|
import { unsafeId } from '../types/ids/brand.js'
|
|
21
5
|
import type {
|
|
22
6
|
ActivityId,
|
|
@@ -66,52 +50,71 @@ export function unchecked<T extends string>(value: string): T {
|
|
|
66
50
|
return unsafeId<T>(value)
|
|
67
51
|
}
|
|
68
52
|
|
|
53
|
+
/** Maps a readable fixture label to a stable, valid UUID without global state. */
|
|
54
|
+
export function fixtureUuid(label: string): string {
|
|
55
|
+
const bytes = createHash('sha256').update(label).digest().subarray(0, 16)
|
|
56
|
+
bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40
|
|
57
|
+
bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80
|
|
58
|
+
const hex = bytes.toString('hex')
|
|
59
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`
|
|
60
|
+
}
|
|
61
|
+
|
|
69
62
|
/**
|
|
70
|
-
* One entry per
|
|
63
|
+
* One entry per entity type, keyed by the bare concept rather than the
|
|
71
64
|
* type name — `fixtureId.run('a')`, not `fixtureId.RunId('a')`.
|
|
72
65
|
*/
|
|
73
66
|
export const fixtureId = {
|
|
74
|
-
run: (suffix: string): RunId => unsafeId<RunId>(`run_${suffix}`),
|
|
75
|
-
message: (suffix: string): MessageId => unsafeId<MessageId>(`msg_${suffix}`),
|
|
76
|
-
session: (suffix: string): SessionId => unsafeId<SessionId>(`ses_${suffix}`),
|
|
77
|
-
toolCall: (suffix: string): ToolCallId => unsafeId<ToolCallId>(`call_${suffix}`),
|
|
78
|
-
activity: (suffix: string): ActivityId => unsafeId<ActivityId>(`act_${suffix}`),
|
|
79
|
-
task: (suffix: string): TaskId => unsafeId<TaskId>(`task_${suffix}`),
|
|
80
|
-
plan: (suffix: string): PlanId => unsafeId<PlanId>(`plan_${suffix}`),
|
|
81
|
-
knowledgeBase: (suffix: string): KnowledgeBaseId =>
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
67
|
+
run: (suffix: string): RunId => unsafeId<RunId>(fixtureUuid(`run_${suffix}`)),
|
|
68
|
+
message: (suffix: string): MessageId => unsafeId<MessageId>(fixtureUuid(`msg_${suffix}`)),
|
|
69
|
+
session: (suffix: string): SessionId => unsafeId<SessionId>(fixtureUuid(`ses_${suffix}`)),
|
|
70
|
+
toolCall: (suffix: string): ToolCallId => unsafeId<ToolCallId>(fixtureUuid(`call_${suffix}`)),
|
|
71
|
+
activity: (suffix: string): ActivityId => unsafeId<ActivityId>(fixtureUuid(`act_${suffix}`)),
|
|
72
|
+
task: (suffix: string): TaskId => unsafeId<TaskId>(fixtureUuid(`task_${suffix}`)),
|
|
73
|
+
plan: (suffix: string): PlanId => unsafeId<PlanId>(fixtureUuid(`plan_${suffix}`)),
|
|
74
|
+
knowledgeBase: (suffix: string): KnowledgeBaseId =>
|
|
75
|
+
unsafeId<KnowledgeBaseId>(fixtureUuid(`kb_${suffix}`)),
|
|
76
|
+
document: (suffix: string): DocumentId => unsafeId<DocumentId>(fixtureUuid(`doc_${suffix}`)),
|
|
77
|
+
chunk: (suffix: string): ChunkId => unsafeId<ChunkId>(fixtureUuid(`chk_${suffix}`)),
|
|
78
|
+
connector: (suffix: string): ConnectorId => unsafeId<ConnectorId>(fixtureUuid(`conn_${suffix}`)),
|
|
85
79
|
connectorInstance: (suffix: string): ConnectorInstanceId =>
|
|
86
|
-
unsafeId<ConnectorInstanceId>(`ci_${suffix}`),
|
|
87
|
-
tenant: (suffix: string): TenantId => unsafeId<TenantId>(`tnt_${suffix}`),
|
|
88
|
-
credential: (suffix: string): CredentialId =>
|
|
80
|
+
unsafeId<ConnectorInstanceId>(fixtureUuid(`ci_${suffix}`)),
|
|
81
|
+
tenant: (suffix: string): TenantId => unsafeId<TenantId>(fixtureUuid(`tnt_${suffix}`)),
|
|
82
|
+
credential: (suffix: string): CredentialId =>
|
|
83
|
+
unsafeId<CredentialId>(fixtureUuid(`cred_${suffix}`)),
|
|
89
84
|
executionContext: (suffix: string): ExecutionContextId =>
|
|
90
|
-
unsafeId<ExecutionContextId>(`ectx_${suffix}`),
|
|
91
|
-
mCPServer: (suffix: string): MCPServerId => unsafeId<MCPServerId>(`mcp_${suffix}`),
|
|
92
|
-
mCPClient: (suffix: string): MCPClientId => unsafeId<MCPClientId>(`mcpc_${suffix}`),
|
|
93
|
-
mCPSession: (suffix: string): MCPSessionId =>
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
85
|
+
unsafeId<ExecutionContextId>(fixtureUuid(`ectx_${suffix}`)),
|
|
86
|
+
mCPServer: (suffix: string): MCPServerId => unsafeId<MCPServerId>(fixtureUuid(`mcp_${suffix}`)),
|
|
87
|
+
mCPClient: (suffix: string): MCPClientId => unsafeId<MCPClientId>(fixtureUuid(`mcpc_${suffix}`)),
|
|
88
|
+
mCPSession: (suffix: string): MCPSessionId =>
|
|
89
|
+
unsafeId<MCPSessionId>(fixtureUuid(`mcps_${suffix}`)),
|
|
90
|
+
environment: (suffix: string): EnvironmentId =>
|
|
91
|
+
unsafeId<EnvironmentId>(fixtureUuid(`env_${suffix}`)),
|
|
92
|
+
checkpoint: (suffix: string): CheckpointId => unsafeId<CheckpointId>(fixtureUuid(`cp_${suffix}`)),
|
|
93
|
+
lock: (suffix: string): LockId => unsafeId<LockId>(fixtureUuid(`lock_${suffix}`)),
|
|
94
|
+
advisory: (suffix: string): AdvisoryId => unsafeId<AdvisoryId>(fixtureUuid(`adv_${suffix}`)),
|
|
95
|
+
advisoryCall: (suffix: string): AdvisoryCallId =>
|
|
96
|
+
unsafeId<AdvisoryCallId>(fixtureUuid(`advc_${suffix}`)),
|
|
97
|
+
emergencySave: (suffix: string): EmergencySaveId =>
|
|
98
|
+
unsafeId<EmergencySaveId>(fixtureUuid(`esave_${suffix}`)),
|
|
99
|
+
memory: (suffix: string): MemoryId => unsafeId<MemoryId>(fixtureUuid(`mem_${suffix}`)),
|
|
100
|
+
plugin: (suffix: string): PluginId => unsafeId<PluginId>(fixtureUuid(`plg_${suffix}`)),
|
|
101
|
+
sandbox: (suffix: string): SandboxId => unsafeId<SandboxId>(fixtureUuid(`sbx_${suffix}`)),
|
|
102
|
+
auditEvent: (suffix: string): AuditEventId =>
|
|
103
|
+
unsafeId<AuditEventId>(fixtureUuid(`aud_${suffix}`)),
|
|
104
|
+
user: (suffix: string): UserId => unsafeId<UserId>(fixtureUuid(`usr_${suffix}`)),
|
|
105
|
+
agent: (suffix: string): AgentId => unsafeId<AgentId>(fixtureUuid(`agt_${suffix}`)),
|
|
106
|
+
memoryStoreRef: (suffix: string): MemoryStoreRef =>
|
|
107
|
+
unsafeId<MemoryStoreRef>(fixtureUuid(`mms_${suffix}`)),
|
|
108
|
+
vaultRef: (suffix: string): VaultRef => unsafeId<VaultRef>(fixtureUuid(`vlt_${suffix}`)),
|
|
108
109
|
knowledgeBaseRef: (suffix: string): KnowledgeBaseRef =>
|
|
109
|
-
unsafeId<KnowledgeBaseRef>(`kbs_${suffix}`),
|
|
110
|
-
project: (suffix: string): ProjectId => unsafeId<ProjectId>(`prj_${suffix}`),
|
|
111
|
-
topic: (suffix: string): TopicId => unsafeId<TopicId>(`top_${suffix}`),
|
|
112
|
-
subSession: (suffix: string): SubSessionId =>
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
unsafeId<KnowledgeBaseRef>(fixtureUuid(`kbs_${suffix}`)),
|
|
111
|
+
project: (suffix: string): ProjectId => unsafeId<ProjectId>(fixtureUuid(`prj_${suffix}`)),
|
|
112
|
+
topic: (suffix: string): TopicId => unsafeId<TopicId>(fixtureUuid(`top_${suffix}`)),
|
|
113
|
+
subSession: (suffix: string): SubSessionId =>
|
|
114
|
+
unsafeId<SubSessionId>(fixtureUuid(`sub_${suffix}`)),
|
|
115
|
+
handoff: (suffix: string): HandoffId => unsafeId<HandoffId>(fixtureUuid(`hof_${suffix}`)),
|
|
116
|
+
workspace: (suffix: string): WorkspaceId => unsafeId<WorkspaceId>(fixtureUuid(`wsp_${suffix}`)),
|
|
117
|
+
summary: (suffix: string): SummaryId => unsafeId<SummaryId>(fixtureUuid(`sum_${suffix}`)),
|
|
118
|
+
deliverable: (suffix: string): DeliverableId =>
|
|
119
|
+
unsafeId<DeliverableId>(fixtureUuid(`del_${suffix}`)),
|
|
117
120
|
} as const
|
|
@@ -77,7 +77,9 @@ export function buildAdvisoryTools(opts: AdvisoryToolsOptions): ToolDefinition[]
|
|
|
77
77
|
permissions: [],
|
|
78
78
|
readOnly: true,
|
|
79
79
|
destructive: false,
|
|
80
|
-
|
|
80
|
+
// Consultations debit one run account and one per-run advisory quota.
|
|
81
|
+
// Serial execution makes the next admission see the preceding receipt.
|
|
82
|
+
concurrencySafe: false,
|
|
81
83
|
async execute({ advisor_id, question, domain, urgency, include_context }) {
|
|
82
84
|
const budgetCheck = advisoryCtx.checkBudget()
|
|
83
85
|
if (!budgetCheck.allowed) {
|