@namzu/sdk 34.2.0 → 35.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 +133 -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 +102 -0
- package/dist/provider/token-budget.js.map +1 -0
- package/dist/public-runtime.d.ts +12 -12
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +14 -9
- 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 +12 -9
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +95 -46
- 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 +35 -4
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +152 -52
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +16 -5
- 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 +2 -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/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/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/provider/local.d.ts +3 -1
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +112 -12
- package/dist/sandbox/provider/local.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 +9 -11
- 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.js +3 -3
- package/dist/tools/builtins/glob.js.map +1 -1
- package/dist/tools/builtins/grep.js +2 -2
- package/dist/tools/builtins/grep.js.map +1 -1
- package/dist/tools/builtins/ls.js +2 -2
- 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 +27 -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 +1 -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 +114 -0
- package/src/public-runtime.ts +54 -27
- 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 +128 -58
- package/src/runtime/query/guard.ts +8 -0
- package/src/runtime/query/index.ts +201 -62
- package/src/runtime/query/iteration/index.ts +24 -6
- package/src/runtime/query/iteration/phases/compaction.ts +130 -31
- package/src/runtime/query/iteration/phases/context.ts +2 -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/plugin-hooks.ts +24 -2
- 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/provider/local.ts +123 -13
- 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 +11 -12
- package/src/tools/builtins/computer-use.ts +6 -2
- package/src/tools/builtins/edit.ts +2 -2
- package/src/tools/builtins/glob.ts +3 -3
- package/src/tools/builtins/grep.ts +2 -2
- package/src/tools/builtins/ls.ts +2 -2
- 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 +32 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-budget-disk.d.ts","sourceRoot":"","sources":["../../../src/store/run/token-budget-disk.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,WAAW,EACX,KAAK,mBAAmB,EAExB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yCAAyC,CAAA;AAE9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAU/F,MAAM,WAAW,0BAA0B;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAGhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAE7B,MAAM,EAAE,0BAA0B;IAE/D,OAAO,CAAC,IAAI;IAKN,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAMlE,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAqCnE,IAAI;CAmBlB;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAChC,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiC3F"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { TokenBudget, validateTokenBudgetSnapshot, } from '../../run/token-budget.js';
|
|
4
|
+
import { DefaultPathBuilder } from '../../session/workspace/path-builder.js';
|
|
5
|
+
import { temporaryPathFor } from '../../utils/atomic-write.js';
|
|
6
|
+
import { asProjectId, asRunId, asSessionId, asTenantId } from '../../utils/id.js';
|
|
7
|
+
/**
|
|
8
|
+
* Canonical ledger beside the root run, independent of checkpoint pruning.
|
|
9
|
+
*
|
|
10
|
+
* Writes from this instance are serialized and use private atomic sidecars.
|
|
11
|
+
* New directories are mode 0700 and files are mode 0600. This is a single
|
|
12
|
+
* writer store; atomic replacement does not provide a distributed lease.
|
|
13
|
+
*/
|
|
14
|
+
export class DiskTokenBudgetStore {
|
|
15
|
+
config;
|
|
16
|
+
writes = new Map();
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
}
|
|
20
|
+
path(scope) {
|
|
21
|
+
validateScope(scope);
|
|
22
|
+
return join(this.config.baseDir, scope.runId, 'token-budget.json');
|
|
23
|
+
}
|
|
24
|
+
async load(scope) {
|
|
25
|
+
const path = this.path(scope);
|
|
26
|
+
await this.writes.get(path);
|
|
27
|
+
return this.read(path, scope);
|
|
28
|
+
}
|
|
29
|
+
async save(scope, snapshot) {
|
|
30
|
+
const path = this.path(scope);
|
|
31
|
+
const checkedScope = validateScope(scope);
|
|
32
|
+
const checkedSnapshot = validateSnapshotScope(snapshot, checkedScope);
|
|
33
|
+
const previous = this.writes.get(path) ?? Promise.resolve();
|
|
34
|
+
const writing = previous
|
|
35
|
+
.catch(() => undefined)
|
|
36
|
+
.then(async () => {
|
|
37
|
+
const existing = await this.read(path, checkedScope);
|
|
38
|
+
if (existing)
|
|
39
|
+
assertSameRoot(existing, checkedSnapshot);
|
|
40
|
+
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
41
|
+
const temporary = temporaryPathFor(path);
|
|
42
|
+
const record = {
|
|
43
|
+
version: 1,
|
|
44
|
+
scope: checkedScope,
|
|
45
|
+
snapshot: checkedSnapshot,
|
|
46
|
+
};
|
|
47
|
+
try {
|
|
48
|
+
await writeFile(temporary, `${JSON.stringify(record)}\n`, {
|
|
49
|
+
encoding: 'utf8',
|
|
50
|
+
flag: 'wx',
|
|
51
|
+
mode: 0o600,
|
|
52
|
+
});
|
|
53
|
+
await rename(temporary, path);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
await unlink(temporary).catch(() => undefined);
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
this.writes.set(path, writing);
|
|
61
|
+
try {
|
|
62
|
+
await writing;
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
if (this.writes.get(path) === writing)
|
|
66
|
+
this.writes.delete(path);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async read(path, scope) {
|
|
70
|
+
let text;
|
|
71
|
+
try {
|
|
72
|
+
text = await readFile(path, 'utf8');
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error.code === 'ENOENT')
|
|
76
|
+
return null;
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
const raw = JSON.parse(text);
|
|
80
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
81
|
+
throw new Error('Invalid token budget record');
|
|
82
|
+
}
|
|
83
|
+
const record = raw;
|
|
84
|
+
if (record.version !== 1)
|
|
85
|
+
throw new Error('Unsupported token budget record version');
|
|
86
|
+
if (!record.scope)
|
|
87
|
+
throw new Error('Token budget record is missing its root scope');
|
|
88
|
+
const storedScope = validateScope(record.scope);
|
|
89
|
+
if (!sameScope(scope, storedScope))
|
|
90
|
+
throw new Error('Token budget root scope mismatch');
|
|
91
|
+
return validateSnapshotScope(record.snapshot, scope);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Open the latest authority; a checkpoint only selects an existing account. */
|
|
95
|
+
export async function openTokenBudget(options) {
|
|
96
|
+
const scope = validateScope(options.scope);
|
|
97
|
+
const pathBuilder = options.pathBuilder ??
|
|
98
|
+
new DefaultPathBuilder(join(options.workingDirectory ?? process.cwd(), '.namzu'));
|
|
99
|
+
const store = options.store ??
|
|
100
|
+
new DiskTokenBudgetStore({
|
|
101
|
+
baseDir: join(pathBuilder.sessionDir(scope.projectId, scope.sessionId), 'runs'),
|
|
102
|
+
});
|
|
103
|
+
const persistence = {
|
|
104
|
+
scope,
|
|
105
|
+
save: (snapshot) => store.save(scope, snapshot),
|
|
106
|
+
};
|
|
107
|
+
const saved = await store.load(scope);
|
|
108
|
+
let budget;
|
|
109
|
+
if (saved === null) {
|
|
110
|
+
if (options.requireExisting || options.accountId !== undefined) {
|
|
111
|
+
throw new Error('The token budget ledger required by this run is missing');
|
|
112
|
+
}
|
|
113
|
+
if (options.limit === undefined)
|
|
114
|
+
throw new Error('A new token budget requires an explicit limit');
|
|
115
|
+
budget = TokenBudget.create(options.limit, scope.runId, persistence);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const snapshot = validateSnapshotScope(saved, scope);
|
|
119
|
+
if (options.limit !== undefined && rootLimit(snapshot) !== options.limit) {
|
|
120
|
+
throw new Error('Token budget root limit mismatch');
|
|
121
|
+
}
|
|
122
|
+
budget = TokenBudget.restore(snapshot, persistence);
|
|
123
|
+
}
|
|
124
|
+
const account = options.accountId === undefined ? budget : budget.account(options.accountId);
|
|
125
|
+
await budget.flush();
|
|
126
|
+
return account;
|
|
127
|
+
}
|
|
128
|
+
function validateScope(scope) {
|
|
129
|
+
return {
|
|
130
|
+
tenantId: asTenantId(scope.tenantId),
|
|
131
|
+
projectId: asProjectId(scope.projectId),
|
|
132
|
+
sessionId: asSessionId(scope.sessionId),
|
|
133
|
+
runId: asRunId(scope.runId),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function sameScope(left, right) {
|
|
137
|
+
return (left.tenantId === right.tenantId &&
|
|
138
|
+
left.projectId === right.projectId &&
|
|
139
|
+
left.sessionId === right.sessionId &&
|
|
140
|
+
left.runId === right.runId);
|
|
141
|
+
}
|
|
142
|
+
function validateSnapshotScope(snapshot, scope) {
|
|
143
|
+
const checked = validateTokenBudgetSnapshot(snapshot);
|
|
144
|
+
if (checked.rootRunId !== scope.runId)
|
|
145
|
+
throw new Error('Token budget root run mismatch');
|
|
146
|
+
return checked;
|
|
147
|
+
}
|
|
148
|
+
function rootLimit(snapshot) {
|
|
149
|
+
const account = snapshot.accounts.find((account) => account.id === snapshot.rootAccountId);
|
|
150
|
+
if (!account)
|
|
151
|
+
throw new Error('Token budget root account is missing');
|
|
152
|
+
return account.limit;
|
|
153
|
+
}
|
|
154
|
+
function assertSameRoot(before, after) {
|
|
155
|
+
if (before.rootAccountId !== after.rootAccountId) {
|
|
156
|
+
throw new Error('Cannot replace an existing token budget with a different root');
|
|
157
|
+
}
|
|
158
|
+
const reconciled = before.poisoned && !after.poisoned;
|
|
159
|
+
if (reconciled && after.requests.length > 0) {
|
|
160
|
+
throw new Error('Cannot reopen a token budget with unresolved requests');
|
|
161
|
+
}
|
|
162
|
+
const accounts = new Map(after.accounts.map((account) => [account.id, account]));
|
|
163
|
+
for (const previous of before.accounts) {
|
|
164
|
+
const current = accounts.get(previous.id);
|
|
165
|
+
if (!current ||
|
|
166
|
+
(previous.limit > 0 && (current.limit === 0 || current.limit > previous.limit)) ||
|
|
167
|
+
current.parentId !== previous.parentId ||
|
|
168
|
+
(previous.runId !== undefined && current.runId !== previous.runId) ||
|
|
169
|
+
(previous.settled && !current.settled)) {
|
|
170
|
+
throw new Error('Cannot replace or remove an existing token budget account');
|
|
171
|
+
}
|
|
172
|
+
for (const [runId, spent] of Object.entries(previous.usage)) {
|
|
173
|
+
const recorded = current.usage[runId];
|
|
174
|
+
if (!usageAtLeast(recorded, spent)) {
|
|
175
|
+
throw new Error('Cannot reduce recorded token budget usage');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const receipts = new Map(after.completedRequests.map((request) => [request.id, request]));
|
|
180
|
+
for (const previous of before.completedRequests) {
|
|
181
|
+
const current = receipts.get(previous.id);
|
|
182
|
+
if (!current ||
|
|
183
|
+
current.accountId !== previous.accountId ||
|
|
184
|
+
current.runId !== previous.runId ||
|
|
185
|
+
!usageAtLeast(current.usage, previous.usage)) {
|
|
186
|
+
throw new Error('Cannot remove or replace a token budget completion receipt');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const active = new Map(after.requests.map((request) => [request.id, request]));
|
|
190
|
+
for (const previous of before.requests) {
|
|
191
|
+
const current = active.get(previous.id) ?? receipts.get(previous.id);
|
|
192
|
+
if (!current ||
|
|
193
|
+
current.accountId !== previous.accountId ||
|
|
194
|
+
current.runId !== previous.runId ||
|
|
195
|
+
(reconciled && current.usage === undefined) ||
|
|
196
|
+
!usageAtLeast(current.usage, previous.usage)) {
|
|
197
|
+
throw new Error('Cannot forget an unresolved token budget request without a completion receipt');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function usageAtLeast(current, previous) {
|
|
202
|
+
if (previous === undefined)
|
|
203
|
+
return true;
|
|
204
|
+
if (current === undefined)
|
|
205
|
+
return false;
|
|
206
|
+
return Object.entries(previous).every(([field, amount]) => typeof amount !== 'number' || (current[field] ?? 0) >= amount);
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=token-budget-disk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-budget-disk.js","sourceRoot":"","sources":["../../../src/store/run/token-budget-disk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EACN,WAAW,EAEX,2BAA2B,GAC3B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAoB,MAAM,yCAAyC,CAAA;AAG9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAajF;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IAGH;IAFZ,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE1D,YAA6B,MAAkC;QAAlC,WAAM,GAAN,MAAM,CAA4B;IAAG,CAAC;IAE3D,IAAI,CAAC,KAAuB;QACnC,aAAa,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAuB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAuB,EAAE,QAA6B;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;QAC3D,MAAM,OAAO,GAAG,QAAQ;aACtB,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;YACpD,IAAI,QAAQ;gBAAE,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;YACvD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAC5D,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAiB;gBAC5B,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,eAAe;aACzB,CAAA;YACD,IAAI,CAAC;gBACJ,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;oBACzD,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,KAAK;iBACX,CAAC,CAAA;gBACF,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;gBAC9C,MAAM,KAAK,CAAA;YACZ,CAAC;QACF,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC9B,IAAI,CAAC;YACJ,MAAM,OAAO,CAAA;QACd,CAAC;gBAAS,CAAC;YACV,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAChE,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,KAAuB;QACvD,IAAI,IAAY,CAAA;QAChB,IAAI,CAAC;YACJ,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;YACnE,MAAM,KAAK,CAAA;QACZ,CAAC;QACD,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,GAA4B,CAAA;QAC3C,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QACpF,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACnF,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACvF,OAAO,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACrD,CAAC;CACD;AAcD,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA+B;IACpE,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1C,MAAM,WAAW,GAChB,OAAO,CAAC,WAAW;QACnB,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;IAClF,MAAM,KAAK,GACV,OAAO,CAAC,KAAK;QACb,IAAI,oBAAoB,CAAC;YACxB,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;SAC/E,CAAC,CAAA;IACH,MAAM,WAAW,GAAG;QACnB,KAAK;QACL,IAAI,EAAE,CAAC,QAA6B,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;KACpE,CAAA;IACD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,MAAmB,CAAA;IACvB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;QAC3E,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAC9B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACjE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACrE,CAAC;SAAM,CAAC;QACP,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACpD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IACpD,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5F,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACpB,OAAO,OAAO,CAAA;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAuB;IAC7C,OAAO;QACN,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;KAC3B,CAAA;AACF,CAAC;AAED,SAAS,SAAS,CAAC,IAAsB,EAAE,KAAuB;IACjE,OAAO,CACN,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAChC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QAClC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QAClC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAC1B,CAAA;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAiB,EAAE,KAAuB;IACxE,MAAM,OAAO,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA;IACrD,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACxF,OAAO,OAAO,CAAA;AACf,CAAC;AAED,SAAS,SAAS,CAAC,QAA6B;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC1F,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACrE,OAAO,OAAO,CAAC,KAAK,CAAA;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,MAA2B,EAAE,KAA0B;IAC9E,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAA;IACrD,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAChF,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACzC,IACC,CAAC,OAAO;YACR,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/E,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;YACtC,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC;YAClE,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EACrC,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC7E,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;YAC7D,CAAC;QACF,CAAC;IACF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACzF,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACzC,IACC,CAAC,OAAO;YACR,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;YACxC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;YAChC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAC3C,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;QAC9E,CAAC;IACF,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAC9E,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACpE,IACC,CAAC,OAAO;YACR,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;YACxC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;YAChC,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC;YAC3C,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAC3C,CAAC;YACF,MAAM,IAAI,KAAK,CACd,+EAA+E,CAC/E,CAAA;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,OAA+B,EAAE,QAAgC;IACtF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACvC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CACpC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CACnB,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAyB,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAClF,CAAA;AACF,CAAC"}
|
|
@@ -38,19 +38,10 @@ import type { SessionSummaryRef } from '../../types/summary/ref.js';
|
|
|
38
38
|
*/
|
|
39
39
|
export declare function migrateSessionStoreMessageRecordKind(record: Record<string, unknown>): Record<string, unknown>;
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* v1→v2 step in the same `migrate()` call, has `topicId` starting `top_`
|
|
46
|
-
* (or `thd_`, freshly renamed from `threadId` — this step runs on it next
|
|
47
|
-
* in the same pass) either way, and the check below is what makes running
|
|
48
|
-
* it on an already-correct value a same-object no-op rather than a
|
|
49
|
-
* needless copy. Same one-function-runs-over-every-kind shape as its
|
|
50
|
-
* v1→v2 sibling: only `PersistedSession.topicId` is ever `thd_`-prefixed,
|
|
51
|
-
* so every other kind this schema stamps (project.json, subsession.json,
|
|
52
|
-
* summary.json, each messages.jsonl line) has no `topicId` key and comes
|
|
53
|
-
* back untouched.
|
|
41
|
+
* Validate topic UUIDs before accepting a stored record. Prefixed IDs are
|
|
42
|
+
* rejected without rewriting stored references.
|
|
43
|
+
* This migrator runs over every session-store record kind; records without
|
|
44
|
+
* a topicId are intentionally untouched.
|
|
54
45
|
*/
|
|
55
46
|
export declare function migrateSessionStoreTopicIdPrefix(record: Record<string, unknown>): Record<string, unknown>;
|
|
56
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disk.d.ts","sourceRoot":"","sources":["../../../src/store/session/disk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAEpE,OAAO,KAAK,EAGX,iBAAiB,EACjB,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"disk.d.ts","sourceRoot":"","sources":["../../../src/store/session/disk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAa,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAEpE,OAAO,KAAK,EAGX,iBAAiB,EACjB,MAAM,4BAA4B,CAAA;AA6CnC;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB;AAuCD;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oCAAoC,CACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIzB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,MAAM,CAAA;CACf;AAwHD,qBAAa,gBAAiB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0C;IACvE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0C;IACvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG7B;gBAES,MAAM,EAAE,sBAAsB;IAMpC,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAiEtF;;;;OAIG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAuB5E,cAAc;IAwB5B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,uBAAuB;YAUjB,sBAAsB;IAwB9B,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAQ7E,aAAa,CAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAsBpB,gBAAgB,CACrB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,MAAM,GAC1B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAqBpB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;IA6B7D,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAkChF,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAS7E,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;IA8CtF,qBAAqB,CAC1B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;IAwBxB,aAAa,CAClB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,IAAI,CAAC;IAkCV,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DtE,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAoCzF,aAAa,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IASzF,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3E,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/E,aAAa,CAClB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,SAAS,CAAC;IA4Bf,eAAe,CACpB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,IAAI,CAAC;IA0BV,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;IAKnF,mBAAmB,CACxB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IA4C/B,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IAOrF,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;IAOpF,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAalF;;;;;;;;;;;;OAYG;IACG,aAAa,CAClB,OAAO,EAAE,iBAAiB,GAAG;QAAE,cAAc,EAAE,QAAQ,CAAA;KAAE,EACzD,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,IAAI,CAAC;IA8CV,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAW7F,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,UAAU;YASJ,aAAa;YA8Bb,gBAAgB;YAyChB,gBAAgB;CAoC9B;AAuJD,YAAY,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA"}
|
|
@@ -25,7 +25,7 @@ import { appendFile, mkdir, readFile, rm } from 'node:fs/promises';
|
|
|
25
25
|
import { join } from 'node:path';
|
|
26
26
|
import { ProjectRootPathTakenError, StaleProjectError, StaleSessionError, TenantIsolationError, } from '../../session/errors.js';
|
|
27
27
|
import { SessionAlreadySummarizedError } from '../../session/summary/errors.js';
|
|
28
|
-
import { generateMessageId, generateProjectId, generateSessionId, generateSubSessionId, } from '../../utils/id.js';
|
|
28
|
+
import { asProjectId, asSessionId, asSubSessionId, asTopicId, generateMessageId, generateProjectId, generateSessionId, generateSubSessionId, isEntityId, } from '../../utils/id.js';
|
|
29
29
|
import { DiskRecordStore } from '../kv/record-store.js';
|
|
30
30
|
import { DiskRevisionRecordStore, } from '../kv/revision-record-store.js';
|
|
31
31
|
// `migrate` and `stamp` are imported directly for the append-only
|
|
@@ -90,25 +90,17 @@ export function migrateSessionStoreMessageRecordKind(record) {
|
|
|
90
90
|
const records = new DiskRecordStore(SCHEMA);
|
|
91
91
|
const rootPathBindings = new DiskRevisionRecordStore(SCHEMA, 'project root-path binding', (record) => record.storageRevision);
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* v1→v2 step in the same `migrate()` call, has `topicId` starting `top_`
|
|
98
|
-
* (or `thd_`, freshly renamed from `threadId` — this step runs on it next
|
|
99
|
-
* in the same pass) either way, and the check below is what makes running
|
|
100
|
-
* it on an already-correct value a same-object no-op rather than a
|
|
101
|
-
* needless copy. Same one-function-runs-over-every-kind shape as its
|
|
102
|
-
* v1→v2 sibling: only `PersistedSession.topicId` is ever `thd_`-prefixed,
|
|
103
|
-
* so every other kind this schema stamps (project.json, subsession.json,
|
|
104
|
-
* summary.json, each messages.jsonl line) has no `topicId` key and comes
|
|
105
|
-
* back untouched.
|
|
93
|
+
* Validate topic UUIDs before accepting a stored record. Prefixed IDs are
|
|
94
|
+
* rejected without rewriting stored references.
|
|
95
|
+
* This migrator runs over every session-store record kind; records without
|
|
96
|
+
* a topicId are intentionally untouched.
|
|
106
97
|
*/
|
|
107
98
|
export function migrateSessionStoreTopicIdPrefix(record) {
|
|
108
99
|
const topicId = record.topicId;
|
|
109
|
-
if (typeof topicId
|
|
110
|
-
|
|
111
|
-
|
|
100
|
+
if (typeof topicId === 'string') {
|
|
101
|
+
asTopicId(topicId);
|
|
102
|
+
}
|
|
103
|
+
return record;
|
|
112
104
|
}
|
|
113
105
|
/**
|
|
114
106
|
* v1 → v2: the FK field `session.json` carries to its owning Topic was
|
|
@@ -348,6 +340,8 @@ export class DiskSessionStore {
|
|
|
348
340
|
const entries = await records.scanNames(projectsRoot, '');
|
|
349
341
|
const found = [];
|
|
350
342
|
for (const entry of entries) {
|
|
343
|
+
if (!isEntityId(entry, 'project'))
|
|
344
|
+
continue;
|
|
351
345
|
const raw = await records.read(join(projectsRoot, entry, 'project.json'));
|
|
352
346
|
if (!raw)
|
|
353
347
|
continue;
|
|
@@ -366,13 +360,17 @@ export class DiskSessionStore {
|
|
|
366
360
|
}
|
|
367
361
|
// Session CRUD ------------------------------------------------------------
|
|
368
362
|
async createSession(params, tenantId) {
|
|
363
|
+
const id = params.id === undefined ? generateSessionId() : asSessionId(params.id);
|
|
369
364
|
const project = await this.getProject(params.projectId, tenantId);
|
|
370
365
|
if (!project) {
|
|
371
366
|
throw new Error(`Project ${params.projectId} not found`);
|
|
372
367
|
}
|
|
373
368
|
const now = new Date();
|
|
369
|
+
if (params.id !== undefined && (await this.getSession(id, tenantId))) {
|
|
370
|
+
throw new Error(`Session ${params.id} already exists`);
|
|
371
|
+
}
|
|
374
372
|
const session = {
|
|
375
|
-
id
|
|
373
|
+
id,
|
|
376
374
|
topicId: params.topicId,
|
|
377
375
|
projectId: params.projectId,
|
|
378
376
|
tenantId,
|
|
@@ -427,12 +425,12 @@ export class DiskSessionStore {
|
|
|
427
425
|
const projectDirs = await records.scanNames(projectsDir, '');
|
|
428
426
|
const results = [];
|
|
429
427
|
for (const rawProject of projectDirs) {
|
|
430
|
-
if (!rawProject
|
|
428
|
+
if (!isEntityId(rawProject, 'project'))
|
|
431
429
|
continue;
|
|
432
430
|
const sessionsRoot = join(projectsDir, rawProject, 'sessions');
|
|
433
431
|
const sessionDirs = await records.scanNames(sessionsRoot, '');
|
|
434
432
|
for (const rawSessionId of sessionDirs) {
|
|
435
|
-
if (!rawSessionId
|
|
433
|
+
if (!isEntityId(rawSessionId, 'session'))
|
|
436
434
|
continue;
|
|
437
435
|
const path = join(sessionsRoot, rawSessionId);
|
|
438
436
|
const raw = await records.read(join(path, 'session.json'));
|
|
@@ -462,7 +460,7 @@ export class DiskSessionStore {
|
|
|
462
460
|
const sessionDirs = await records.scanNames(sessionsRoot, '');
|
|
463
461
|
const results = [];
|
|
464
462
|
for (const rawSessionId of sessionDirs) {
|
|
465
|
-
if (!rawSessionId
|
|
463
|
+
if (!isEntityId(rawSessionId, 'session'))
|
|
466
464
|
continue;
|
|
467
465
|
const path = join(sessionsRoot, rawSessionId);
|
|
468
466
|
const raw = await records.read(join(path, 'session.json'));
|
|
@@ -521,7 +519,7 @@ export class DiskSessionStore {
|
|
|
521
519
|
// match the in-memory semantics.
|
|
522
520
|
const subsDir = join(located.path, 'subsessions');
|
|
523
521
|
const subEntries = await records.scanNames(subsDir, '');
|
|
524
|
-
if (subEntries.some((
|
|
522
|
+
if (subEntries.some((entry) => isEntityId(entry, 'subSession'))) {
|
|
525
523
|
throw new Error(`Session ${sessionId} has attached sub-sessions; delete them before deleting the session`);
|
|
526
524
|
}
|
|
527
525
|
// Also scan tree for sub-session records that reference this session as
|
|
@@ -532,17 +530,17 @@ export class DiskSessionStore {
|
|
|
532
530
|
const projectsDir = join(this.rootDir, 'projects');
|
|
533
531
|
const projectDirs = await records.scanNames(projectsDir, '');
|
|
534
532
|
for (const rawProject of projectDirs) {
|
|
535
|
-
if (!rawProject
|
|
533
|
+
if (!isEntityId(rawProject, 'project'))
|
|
536
534
|
continue;
|
|
537
535
|
const sessionsRoot = join(projectsDir, rawProject, 'sessions');
|
|
538
536
|
const siblingSessions = await records.scanNames(sessionsRoot, '');
|
|
539
537
|
for (const rawSib of siblingSessions) {
|
|
540
|
-
if (!rawSib
|
|
538
|
+
if (!isEntityId(rawSib, 'session'))
|
|
541
539
|
continue;
|
|
542
540
|
const sibSubsDir = join(sessionsRoot, rawSib, 'subsessions');
|
|
543
541
|
const sibSubs = await records.scanNames(sibSubsDir, '');
|
|
544
542
|
for (const rawSub of sibSubs) {
|
|
545
|
-
if (!rawSub
|
|
543
|
+
if (!isEntityId(rawSub, 'subSession'))
|
|
546
544
|
continue;
|
|
547
545
|
const subRaw = await records.read(join(sibSubsDir, rawSub, 'subsession.json'));
|
|
548
546
|
if (!subRaw)
|
|
@@ -823,6 +821,7 @@ export class DiskSessionStore {
|
|
|
823
821
|
}
|
|
824
822
|
}
|
|
825
823
|
projectDir(projectId) {
|
|
824
|
+
asProjectId(projectId);
|
|
826
825
|
const cached = this.projectIndex.get(projectId);
|
|
827
826
|
if (cached)
|
|
828
827
|
return cached.path;
|
|
@@ -831,6 +830,7 @@ export class DiskSessionStore {
|
|
|
831
830
|
return path;
|
|
832
831
|
}
|
|
833
832
|
async locateSession(sessionId) {
|
|
833
|
+
asSessionId(sessionId);
|
|
834
834
|
const cached = this.sessionIndex.get(sessionId);
|
|
835
835
|
if (cached)
|
|
836
836
|
return cached;
|
|
@@ -839,13 +839,13 @@ export class DiskSessionStore {
|
|
|
839
839
|
// same `return null` the old catch took directly.
|
|
840
840
|
const projectDirs = await records.scanNames(projectsDir, '');
|
|
841
841
|
for (const rawId of projectDirs) {
|
|
842
|
-
if (!rawId
|
|
842
|
+
if (!isEntityId(rawId, 'project'))
|
|
843
843
|
continue;
|
|
844
844
|
const projectId = rawId;
|
|
845
845
|
const sessionsRoot = join(projectsDir, projectId, 'sessions');
|
|
846
846
|
const sessionDirs = await records.scanNames(sessionsRoot, '');
|
|
847
847
|
for (const rawSessionId of sessionDirs) {
|
|
848
|
-
if (!rawSessionId
|
|
848
|
+
if (!isEntityId(rawSessionId, 'session'))
|
|
849
849
|
continue;
|
|
850
850
|
if (rawSessionId === sessionId) {
|
|
851
851
|
const entry = {
|
|
@@ -861,6 +861,7 @@ export class DiskSessionStore {
|
|
|
861
861
|
return null;
|
|
862
862
|
}
|
|
863
863
|
async locateSubSession(subSessionId) {
|
|
864
|
+
asSubSessionId(subSessionId);
|
|
864
865
|
const cached = this.subSessionIndex.get(subSessionId);
|
|
865
866
|
if (cached)
|
|
866
867
|
return cached;
|
|
@@ -869,13 +870,13 @@ export class DiskSessionStore {
|
|
|
869
870
|
// same `return null` the old catch took directly.
|
|
870
871
|
const projectDirs = await records.scanNames(projectsDir, '');
|
|
871
872
|
for (const rawProject of projectDirs) {
|
|
872
|
-
if (!rawProject
|
|
873
|
+
if (!isEntityId(rawProject, 'project'))
|
|
873
874
|
continue;
|
|
874
875
|
const projectId = rawProject;
|
|
875
876
|
const sessionsRoot = join(projectsDir, projectId, 'sessions');
|
|
876
877
|
const sessionDirs = await records.scanNames(sessionsRoot, '');
|
|
877
878
|
for (const rawSession of sessionDirs) {
|
|
878
|
-
if (!rawSession
|
|
879
|
+
if (!isEntityId(rawSession, 'session'))
|
|
879
880
|
continue;
|
|
880
881
|
const sessionId = rawSession;
|
|
881
882
|
const subsDir = join(sessionsRoot, sessionId, 'subsessions');
|
|
@@ -905,16 +906,18 @@ export class DiskSessionStore {
|
|
|
905
906
|
// view the old catch returned directly.
|
|
906
907
|
const projectDirs = await records.scanNames(projectsDir, '');
|
|
907
908
|
for (const rawProject of projectDirs) {
|
|
908
|
-
if (!rawProject
|
|
909
|
+
if (!isEntityId(rawProject, 'project'))
|
|
909
910
|
continue;
|
|
910
911
|
const sessionsRoot = join(projectsDir, rawProject, 'sessions');
|
|
911
912
|
const sessionDirs = await records.scanNames(sessionsRoot, '');
|
|
912
913
|
for (const rawSession of sessionDirs) {
|
|
913
|
-
if (!rawSession
|
|
914
|
+
if (!isEntityId(rawSession, 'session'))
|
|
914
915
|
continue;
|
|
915
916
|
const subsRoot = join(sessionsRoot, rawSession, 'subsessions');
|
|
916
917
|
const subDirs = await records.scanNames(subsRoot, '');
|
|
917
918
|
for (const rawSub of subDirs) {
|
|
919
|
+
if (!isEntityId(rawSub, 'subSession'))
|
|
920
|
+
continue;
|
|
918
921
|
const raw = await records.read(join(subsRoot, rawSub, 'subsession.json'));
|
|
919
922
|
if (!raw)
|
|
920
923
|
continue;
|