@namzu/sdk 38.2.1 → 40.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 +851 -0
- package/dist/advisory/executor.d.ts +10 -1
- package/dist/advisory/executor.d.ts.map +1 -1
- package/dist/advisory/executor.js +5 -26
- package/dist/advisory/executor.js.map +1 -1
- package/dist/advisory/history.d.ts +9 -0
- package/dist/advisory/history.d.ts.map +1 -0
- package/dist/advisory/history.js +120 -0
- package/dist/advisory/history.js.map +1 -0
- package/dist/advisory/index.d.ts +1 -1
- package/dist/advisory/index.d.ts.map +1 -1
- package/dist/advisory/index.js.map +1 -1
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +3 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/runAgent.d.ts +10 -0
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +3 -0
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/compaction/manual.d.ts +6 -0
- package/dist/compaction/manual.d.ts.map +1 -1
- package/dist/compaction/manual.js +21 -2
- package/dist/compaction/manual.js.map +1 -1
- package/dist/compaction/summary.d.ts.map +1 -1
- package/dist/compaction/summary.js +4 -1
- package/dist/compaction/summary.js.map +1 -1
- package/dist/config/runtime.js +2 -2
- package/dist/config/runtime.js.map +1 -1
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +20 -6
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/contracts/schemas.js +1 -1
- package/dist/contracts/schemas.js.map +1 -1
- package/dist/eval/harness-protection.d.ts +18 -0
- package/dist/eval/harness-protection.d.ts.map +1 -0
- package/dist/eval/harness-protection.js +58 -0
- package/dist/eval/harness-protection.js.map +1 -0
- package/dist/eval/harness-verification.d.ts +6 -1
- package/dist/eval/harness-verification.d.ts.map +1 -1
- package/dist/eval/harness-verification.js +19 -2
- package/dist/eval/harness-verification.js.map +1 -1
- package/dist/eval/index.d.ts +1 -0
- package/dist/eval/index.d.ts.map +1 -1
- package/dist/eval/index.js.map +1 -1
- package/dist/manager/resident/activity.d.ts +50 -0
- package/dist/manager/resident/activity.d.ts.map +1 -0
- package/dist/manager/resident/activity.js +125 -0
- package/dist/manager/resident/activity.js.map +1 -0
- package/dist/manager/resident/agenda.d.ts +13 -1
- package/dist/manager/resident/agenda.d.ts.map +1 -1
- package/dist/manager/resident/agenda.js +40 -5
- package/dist/manager/resident/agenda.js.map +1 -1
- package/dist/manager/resident/consumption.d.ts +104 -0
- package/dist/manager/resident/consumption.d.ts.map +1 -0
- package/dist/manager/resident/consumption.js +233 -0
- package/dist/manager/resident/consumption.js.map +1 -0
- package/dist/manager/resident/evidence-recall.d.ts +24 -0
- package/dist/manager/resident/evidence-recall.d.ts.map +1 -0
- package/dist/manager/resident/evidence-recall.js +295 -0
- package/dist/manager/resident/evidence-recall.js.map +1 -0
- package/dist/manager/resident/history-disk.d.ts +10 -0
- package/dist/manager/resident/history-disk.d.ts.map +1 -0
- package/dist/manager/resident/history-disk.js +50 -0
- package/dist/manager/resident/history-disk.js.map +1 -0
- package/dist/manager/resident/history.d.ts +79 -0
- package/dist/manager/resident/history.d.ts.map +1 -0
- package/dist/manager/resident/history.js +203 -0
- package/dist/manager/resident/history.js.map +1 -0
- package/dist/manager/resident/initiative.d.ts.map +1 -1
- package/dist/manager/resident/initiative.js +11 -3
- package/dist/manager/resident/initiative.js.map +1 -1
- package/dist/manager/resident/learning-cycle.d.ts +131 -0
- package/dist/manager/resident/learning-cycle.d.ts.map +1 -0
- package/dist/manager/resident/learning-cycle.js +306 -0
- package/dist/manager/resident/learning-cycle.js.map +1 -0
- package/dist/manager/resident/learning-observation.d.ts +80 -0
- package/dist/manager/resident/learning-observation.d.ts.map +1 -0
- package/dist/manager/resident/learning-observation.js +22 -0
- package/dist/manager/resident/learning-observation.js.map +1 -0
- package/dist/manager/resident/learning-store.d.ts +106 -0
- package/dist/manager/resident/learning-store.d.ts.map +1 -0
- package/dist/manager/resident/learning-store.js +598 -0
- package/dist/manager/resident/learning-store.js.map +1 -0
- package/dist/manager/resident/learning.d.ts +246 -3
- package/dist/manager/resident/learning.d.ts.map +1 -1
- package/dist/manager/resident/learning.js +96 -6
- package/dist/manager/resident/learning.js.map +1 -1
- package/dist/manager/resident/outbox.d.ts +4 -4
- package/dist/manager/resident/store.d.ts +37 -4
- package/dist/manager/resident/store.d.ts.map +1 -1
- package/dist/manager/resident/store.js +27 -3
- package/dist/manager/resident/store.js.map +1 -1
- package/dist/manager/resident/tool-evidence.d.ts +71 -0
- package/dist/manager/resident/tool-evidence.d.ts.map +1 -0
- package/dist/manager/resident/tool-evidence.js +285 -0
- package/dist/manager/resident/tool-evidence.js.map +1 -0
- package/dist/manager/run/persistence.d.ts +8 -0
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +18 -0
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/plugin/loader.d.ts.map +1 -1
- package/dist/plugin/loader.js +5 -3
- package/dist/plugin/loader.js.map +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
- package/dist/prompt/coding-agent-doctrine.js +2 -0
- package/dist/prompt/coding-agent-doctrine.js.map +1 -1
- 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/prompt/resident-learning.d.ts +19 -0
- package/dist/prompt/resident-learning.d.ts.map +1 -0
- package/dist/prompt/resident-learning.js +125 -0
- package/dist/prompt/resident-learning.js.map +1 -0
- package/dist/prompt/resident-step.d.ts +8 -1
- package/dist/prompt/resident-step.d.ts.map +1 -1
- package/dist/prompt/resident-step.js +65 -4
- package/dist/prompt/resident-step.js.map +1 -1
- package/dist/provider/collect-chat-completion.d.ts +2 -1
- package/dist/provider/collect-chat-completion.d.ts.map +1 -1
- package/dist/provider/collect-chat-completion.js +7 -6
- package/dist/provider/collect-chat-completion.js.map +1 -1
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +2 -1
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/stream-text.d.ts +16 -0
- package/dist/provider/stream-text.d.ts.map +1 -0
- package/dist/provider/stream-text.js +51 -0
- package/dist/provider/stream-text.js.map +1 -0
- package/dist/public-runtime.d.ts +16 -4
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +17 -4
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +13 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +16 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +15 -3
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +2 -3
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/registry/tool/portable.d.ts +65 -0
- package/dist/registry/tool/portable.d.ts.map +1 -0
- package/dist/registry/tool/portable.js +244 -0
- package/dist/registry/tool/portable.js.map +1 -0
- package/dist/registry/tool/schema.d.ts +32 -5
- package/dist/registry/tool/schema.d.ts.map +1 -1
- package/dist/registry/tool/schema.js +35 -9
- package/dist/registry/tool/schema.js.map +1 -1
- package/dist/registry/toolset/catalog.js +8 -8
- package/dist/registry/toolset/catalog.js.map +1 -1
- package/dist/run/LimitChecker.js +3 -3
- package/dist/run/LimitChecker.js.map +1 -1
- package/dist/run/evidence-query.d.ts +41 -0
- package/dist/run/evidence-query.d.ts.map +1 -0
- package/dist/run/evidence-query.js +270 -0
- package/dist/run/evidence-query.js.map +1 -0
- package/dist/run/evidence-recall.d.ts +99 -0
- package/dist/run/evidence-recall.d.ts.map +1 -0
- package/dist/run/evidence-recall.js +633 -0
- package/dist/run/evidence-recall.js.map +1 -0
- package/dist/run/index.d.ts +2 -0
- package/dist/run/index.d.ts.map +1 -1
- package/dist/run/index.js +1 -0
- package/dist/run/index.js.map +1 -1
- package/dist/run/json-claim-verifier.d.ts +83 -0
- package/dist/run/json-claim-verifier.d.ts.map +1 -0
- package/dist/run/json-claim-verifier.js +200 -0
- package/dist/run/json-claim-verifier.js.map +1 -0
- package/dist/run/preparation-context-error.d.ts +10 -0
- package/dist/run/preparation-context-error.d.ts.map +1 -0
- package/dist/run/preparation-context-error.js +15 -0
- package/dist/run/preparation-context-error.js.map +1 -0
- package/dist/run-query/index.d.ts +3 -1
- package/dist/run-query/index.d.ts.map +1 -1
- package/dist/runtime/jobs/awaited-jobs.d.ts +215 -0
- package/dist/runtime/jobs/awaited-jobs.d.ts.map +1 -0
- package/dist/runtime/jobs/awaited-jobs.js +259 -0
- package/dist/runtime/jobs/awaited-jobs.js.map +1 -0
- package/dist/runtime/jobs/registry.d.ts +33 -2
- package/dist/runtime/jobs/registry.d.ts.map +1 -1
- package/dist/runtime/jobs/registry.js +37 -0
- package/dist/runtime/jobs/registry.js.map +1 -1
- package/dist/runtime/query/callback-inference.d.ts +8 -0
- package/dist/runtime/query/callback-inference.d.ts.map +1 -0
- package/dist/runtime/query/callback-inference.js +89 -0
- package/dist/runtime/query/callback-inference.js.map +1 -0
- package/dist/runtime/query/checkpoint.d.ts +4 -0
- package/dist/runtime/query/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/checkpoint.js +13 -0
- package/dist/runtime/query/checkpoint.js.map +1 -1
- package/dist/runtime/query/events.d.ts +1 -0
- package/dist/runtime/query/events.d.ts.map +1 -1
- package/dist/runtime/query/events.js +18 -0
- package/dist/runtime/query/events.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +35 -1
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +77 -8
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/file-evidence-context.d.ts +5 -0
- package/dist/runtime/query/file-evidence-context.d.ts.map +1 -0
- package/dist/runtime/query/file-evidence-context.js +180 -0
- package/dist/runtime/query/file-evidence-context.js.map +1 -0
- package/dist/runtime/query/file-evidence-replay.d.ts +260 -0
- package/dist/runtime/query/file-evidence-replay.d.ts.map +1 -0
- package/dist/runtime/query/file-evidence-replay.js +647 -0
- package/dist/runtime/query/file-evidence-replay.js.map +1 -0
- package/dist/runtime/query/file-evidence-seed.d.ts +50 -0
- package/dist/runtime/query/file-evidence-seed.d.ts.map +1 -0
- package/dist/runtime/query/file-evidence-seed.js +100 -0
- package/dist/runtime/query/file-evidence-seed.js.map +1 -0
- package/dist/runtime/query/guard.d.ts.map +1 -1
- package/dist/runtime/query/guard.js +4 -0
- package/dist/runtime/query/guard.js.map +1 -1
- package/dist/runtime/query/index.d.ts +10 -1
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +133 -26
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +92 -36
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +420 -117
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/advisory.d.ts +2 -1
- package/dist/runtime/query/iteration/phases/advisory.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/advisory.js +2 -1
- package/dist/runtime/query/iteration/phases/advisory.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +12 -1
- 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 +8 -1
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/provider-rejected-image.d.ts +2 -1
- package/dist/runtime/query/iteration/provider-rejected-image.d.ts.map +1 -1
- package/dist/runtime/query/iteration/provider-rejected-image.js +5 -2
- package/dist/runtime/query/iteration/provider-rejected-image.js.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts +4 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +22 -8
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/plugin-hooks.d.ts +14 -0
- package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
- package/dist/runtime/query/plugin-hooks.js +18 -0
- package/dist/runtime/query/plugin-hooks.js.map +1 -1
- package/dist/runtime/query/repeat-call.d.ts +17 -4
- package/dist/runtime/query/repeat-call.d.ts.map +1 -1
- package/dist/runtime/query/repeat-call.js +26 -19
- package/dist/runtime/query/repeat-call.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts +18 -33
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +59 -42
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +4 -4
- package/dist/runtime/query/review-policy.d.ts.map +1 -1
- package/dist/runtime/query/review-policy.js +10 -9
- package/dist/runtime/query/review-policy.js.map +1 -1
- package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -1
- package/dist/runtime/query/sandbox-lifecycle.js +4 -0
- package/dist/runtime/query/sandbox-lifecycle.js.map +1 -1
- package/dist/runtime/query/steering.d.ts +11 -1
- package/dist/runtime/query/steering.d.ts.map +1 -1
- package/dist/runtime/query/steering.js +12 -1
- package/dist/runtime/query/steering.js.map +1 -1
- package/dist/runtime/query/tool-output-budget.d.ts +10 -6
- package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
- package/dist/runtime/query/tool-output-budget.js +54 -12
- package/dist/runtime/query/tool-output-budget.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +5 -1
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +5 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/scheduler/completion-inbox.d.ts +49 -0
- package/dist/scheduler/completion-inbox.d.ts.map +1 -1
- package/dist/scheduler/completion-inbox.js +122 -2
- package/dist/scheduler/completion-inbox.js.map +1 -1
- package/dist/store/evidence/compaction-archive.d.ts +109 -0
- package/dist/store/evidence/compaction-archive.d.ts.map +1 -0
- package/dist/store/evidence/compaction-archive.js +125 -0
- package/dist/store/evidence/compaction-archive.js.map +1 -0
- package/dist/store/evidence/compaction-provenance.d.ts +7 -0
- package/dist/store/evidence/compaction-provenance.d.ts.map +1 -0
- package/dist/store/evidence/compaction-provenance.js +49 -0
- package/dist/store/evidence/compaction-provenance.js.map +1 -0
- package/dist/store/evidence/compaction-text.d.ts +16 -0
- package/dist/store/evidence/compaction-text.d.ts.map +1 -0
- package/dist/store/evidence/compaction-text.js +51 -0
- package/dist/store/evidence/compaction-text.js.map +1 -0
- package/dist/store/evidence/disk.d.ts +11 -0
- package/dist/store/evidence/disk.d.ts.map +1 -0
- package/dist/store/evidence/disk.js +367 -0
- package/dist/store/evidence/disk.js.map +1 -0
- package/dist/store/evidence/format.d.ts +25 -0
- package/dist/store/evidence/format.d.ts.map +1 -0
- package/dist/store/evidence/format.js +115 -0
- package/dist/store/evidence/format.js.map +1 -0
- package/dist/store/evidence/index-page.d.ts +208 -0
- package/dist/store/evidence/index-page.d.ts.map +1 -0
- package/dist/store/evidence/index-page.js +262 -0
- package/dist/store/evidence/index-page.js.map +1 -0
- package/dist/store/evidence/io.d.ts +24 -0
- package/dist/store/evidence/io.d.ts.map +1 -0
- package/dist/store/evidence/io.js +69 -0
- package/dist/store/evidence/io.js.map +1 -0
- package/dist/store/evidence/linked.d.ts +9 -0
- package/dist/store/evidence/linked.d.ts.map +1 -0
- package/dist/store/evidence/linked.js +314 -0
- package/dist/store/evidence/linked.js.map +1 -0
- package/dist/store/evidence/passages.d.ts +15 -0
- package/dist/store/evidence/passages.d.ts.map +1 -0
- package/dist/store/evidence/passages.js +72 -0
- package/dist/store/evidence/passages.js.map +1 -0
- package/dist/store/evidence/record-chain.d.ts +42 -0
- package/dist/store/evidence/record-chain.d.ts.map +1 -0
- package/dist/store/evidence/record-chain.js +111 -0
- package/dist/store/evidence/record-chain.js.map +1 -0
- package/dist/store/evidence/search-input.d.ts +21 -0
- package/dist/store/evidence/search-input.d.ts.map +1 -0
- package/dist/store/evidence/search-input.js +44 -0
- package/dist/store/evidence/search-input.js.map +1 -0
- package/dist/store/evidence/selection.d.ts +9 -0
- package/dist/store/evidence/selection.d.ts.map +1 -0
- package/dist/store/evidence/selection.js +17 -0
- package/dist/store/evidence/selection.js.map +1 -0
- package/dist/store/evidence/source-kind.d.ts +11 -0
- package/dist/store/evidence/source-kind.d.ts.map +1 -0
- package/dist/store/evidence/source-kind.js +26 -0
- package/dist/store/evidence/source-kind.js.map +1 -0
- package/dist/store/evidence/source-text.d.ts +51 -0
- package/dist/store/evidence/source-text.d.ts.map +1 -0
- package/dist/store/evidence/source-text.js +213 -0
- package/dist/store/evidence/source-text.js.map +1 -0
- package/dist/store/evidence/types.d.ts +162 -0
- package/dist/store/evidence/types.d.ts.map +1 -0
- package/dist/store/evidence/types.js +2 -0
- package/dist/store/evidence/types.js.map +1 -0
- package/dist/store/memory/disk.d.ts +2 -0
- package/dist/store/memory/disk.d.ts.map +1 -1
- package/dist/store/memory/disk.js +2 -1
- package/dist/store/memory/disk.js.map +1 -1
- package/dist/store/run/disk.d.ts +10 -0
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +87 -7
- package/dist/store/run/disk.js.map +1 -1
- package/dist/store/run/memory.d.ts +1 -0
- package/dist/store/run/memory.d.ts.map +1 -1
- package/dist/store/run/memory.js +10 -0
- package/dist/store/run/memory.js.map +1 -1
- package/dist/store/run/tool-executions.d.ts +13 -0
- package/dist/store/run/tool-executions.d.ts.map +1 -0
- package/dist/store/run/tool-executions.js +99 -0
- package/dist/store/run/tool-executions.js.map +1 -0
- package/dist/store/session/index.d.ts +2 -0
- package/dist/store/session/index.d.ts.map +1 -1
- package/dist/store/session/index.js +1 -0
- package/dist/store/session/index.js.map +1 -1
- package/dist/store/session/sqlite.d.ts +57 -0
- package/dist/store/session/sqlite.d.ts.map +1 -0
- package/dist/store/session/sqlite.js +430 -0
- package/dist/store/session/sqlite.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +4 -10
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/edit-apply.d.ts +126 -0
- package/dist/tools/builtins/edit-apply.d.ts.map +1 -0
- package/dist/tools/builtins/edit-apply.js +360 -0
- package/dist/tools/builtins/edit-apply.js.map +1 -0
- package/dist/tools/builtins/edit.d.ts +143 -1
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +37 -219
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/index.d.ts +1 -0
- package/dist/tools/builtins/index.d.ts.map +1 -1
- package/dist/tools/builtins/index.js +9 -3
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/job.d.ts.map +1 -1
- package/dist/tools/builtins/job.js +5 -6
- package/dist/tools/builtins/job.js.map +1 -1
- package/dist/tools/builtins/read-file.d.ts +2 -2
- package/dist/tools/builtins/read-file.d.ts.map +1 -1
- package/dist/tools/builtins/read-file.js +50 -65
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/read-render.d.ts +56 -0
- package/dist/tools/builtins/read-render.d.ts.map +1 -0
- package/dist/tools/builtins/read-render.js +73 -0
- package/dist/tools/builtins/read-render.js.map +1 -0
- package/dist/tools/builtins/wait-for-job-bounds.d.ts +67 -0
- package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -0
- package/dist/tools/builtins/wait-for-job-bounds.js +108 -0
- package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -0
- package/dist/tools/builtins/wait-for-job.d.ts +6 -0
- package/dist/tools/builtins/wait-for-job.d.ts.map +1 -0
- package/dist/tools/builtins/wait-for-job.js +162 -0
- package/dist/tools/builtins/wait-for-job.js.map +1 -0
- package/dist/tools/builtins/write-file.js +7 -2
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +1 -7
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/defineTool.d.ts +2 -1
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +1 -1
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/file-read-tracker.d.ts.map +1 -1
- package/dist/tools/file-read-tracker.js +90 -3
- package/dist/tools/file-read-tracker.js.map +1 -1
- package/dist/tools/resident-history.d.ts +10 -0
- package/dist/tools/resident-history.d.ts.map +1 -0
- package/dist/tools/resident-history.js +80 -0
- package/dist/tools/resident-history.js.map +1 -0
- package/dist/tools/resident-tool-evidence.d.ts +5 -0
- package/dist/tools/resident-tool-evidence.d.ts.map +1 -0
- package/dist/tools/resident-tool-evidence.js +57 -0
- package/dist/tools/resident-tool-evidence.js.map +1 -0
- package/dist/types/advisory/config.d.ts +7 -0
- package/dist/types/advisory/config.d.ts.map +1 -1
- package/dist/types/agent/reactive.d.ts +1 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/authorization/index.d.ts +9 -9
- package/dist/types/authorization/index.d.ts.map +1 -1
- package/dist/types/authorization/index.js +1 -1
- package/dist/types/authorization/index.js.map +1 -1
- package/dist/types/hitl/index.d.ts +4 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/message/index.d.ts +16 -2
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +10 -1
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/provider/chat.d.ts +2 -0
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/types/provider/stream.d.ts +4 -0
- package/dist/types/provider/stream.d.ts.map +1 -1
- package/dist/types/run/answer-review.d.ts +34 -3
- package/dist/types/run/answer-review.d.ts.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/entity.d.ts +20 -0
- package/dist/types/run/entity.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +31 -8
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/prepare-step.d.ts +53 -8
- package/dist/types/run/prepare-step.d.ts.map +1 -1
- package/dist/types/run/store.d.ts +29 -4
- package/dist/types/run/store.d.ts.map +1 -1
- package/dist/types/run/store.js +0 -28
- package/dist/types/run/store.js.map +1 -1
- package/dist/types/sandbox/index.d.ts +15 -14
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/tool/index.d.ts +124 -1
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/utils/await-with-abort.d.ts +8 -0
- package/dist/utils/await-with-abort.d.ts.map +1 -0
- package/dist/utils/await-with-abort.js +28 -0
- package/dist/utils/await-with-abort.js.map +1 -0
- package/dist/utils/env.d.ts +19 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +25 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/evidence-time.d.ts +3 -0
- package/dist/utils/evidence-time.d.ts.map +1 -0
- package/dist/utils/evidence-time.js +10 -0
- package/dist/utils/evidence-time.js.map +1 -0
- package/dist/utils/evidence-tokens.d.ts +13 -0
- package/dist/utils/evidence-tokens.d.ts.map +1 -0
- package/dist/utils/evidence-tokens.js +29 -0
- package/dist/utils/evidence-tokens.js.map +1 -0
- package/package.json +1 -1
- package/src/advisory/executor.ts +15 -30
- package/src/advisory/history.ts +126 -0
- package/src/advisory/index.ts +5 -1
- package/src/agents/ReactiveAgent.ts +3 -0
- package/src/agents/runAgent.ts +14 -1
- package/src/compaction/manual.ts +30 -2
- package/src/compaction/summary.ts +4 -1
- package/src/config/runtime.ts +2 -2
- package/src/connector/mcp/adapter.ts +20 -6
- package/src/contracts/schemas.ts +1 -1
- package/src/eval/harness-protection.ts +79 -0
- package/src/eval/harness-verification.ts +31 -1
- package/src/eval/index.ts +1 -0
- package/src/manager/resident/activity.ts +187 -0
- package/src/manager/resident/agenda.ts +59 -5
- package/src/manager/resident/consumption.ts +311 -0
- package/src/manager/resident/evidence-recall.ts +363 -0
- package/src/manager/resident/history-disk.ts +63 -0
- package/src/manager/resident/history.ts +312 -0
- package/src/manager/resident/initiative.ts +13 -3
- package/src/manager/resident/learning-cycle.ts +499 -0
- package/src/manager/resident/learning-observation.ts +39 -0
- package/src/manager/resident/learning-store.ts +813 -0
- package/src/manager/resident/learning.ts +132 -8
- package/src/manager/resident/store.ts +31 -3
- package/src/manager/resident/tool-evidence.ts +412 -0
- package/src/manager/run/persistence.ts +18 -0
- package/src/plugin/loader.ts +8 -3
- package/src/prompt/coding-agent-doctrine.ts +2 -0
- package/src/prompt/index.ts +2 -0
- package/src/prompt/resident-learning.ts +143 -0
- package/src/prompt/resident-step.ts +83 -3
- package/src/provider/collect-chat-completion.ts +7 -6
- package/src/provider/fallback.ts +2 -1
- package/src/provider/stream-text.ts +56 -0
- package/src/public-runtime.ts +39 -1
- package/src/public-tools.ts +21 -0
- package/src/public-types.ts +98 -0
- package/src/registry/tool/execute.ts +2 -4
- package/src/registry/tool/portable.ts +264 -0
- package/src/registry/tool/schema.ts +38 -8
- package/src/registry/toolset/catalog.ts +8 -9
- package/src/run/LimitChecker.ts +3 -3
- package/src/run/evidence-query.ts +333 -0
- package/src/run/evidence-recall.ts +854 -0
- package/src/run/index.ts +11 -0
- package/src/run/json-claim-verifier.ts +298 -0
- package/src/run/preparation-context-error.ts +16 -0
- package/src/run-query/index.ts +1 -1
- package/src/runtime/jobs/awaited-jobs.ts +271 -0
- package/src/runtime/jobs/registry.ts +50 -0
- package/src/runtime/query/callback-inference.ts +94 -0
- package/src/runtime/query/checkpoint.ts +14 -0
- package/src/runtime/query/events.ts +22 -0
- package/src/runtime/query/executor.ts +100 -10
- package/src/runtime/query/file-evidence-context.ts +209 -0
- package/src/runtime/query/file-evidence-replay.ts +776 -0
- package/src/runtime/query/file-evidence-seed.ts +126 -0
- package/src/runtime/query/guard.ts +2 -0
- package/src/runtime/query/index.ts +153 -27
- package/src/runtime/query/iteration/index.ts +467 -110
- package/src/runtime/query/iteration/phases/advisory.ts +3 -0
- package/src/runtime/query/iteration/phases/context.ts +12 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +7 -0
- package/src/runtime/query/iteration/provider-rejected-image.ts +6 -1
- package/src/runtime/query/iteration/stream-turn.ts +35 -8
- package/src/runtime/query/plugin-hooks.ts +20 -0
- package/src/runtime/query/repeat-call.ts +28 -18
- package/src/runtime/query/resume-pending.ts +65 -40
- package/src/runtime/query/review-policy.ts +13 -9
- package/src/runtime/query/sandbox-lifecycle.ts +3 -0
- package/src/runtime/query/steering.ts +11 -0
- package/src/runtime/query/tool-output-budget.ts +65 -13
- package/src/runtime/query/tooling.ts +10 -1
- package/src/scheduler/completion-inbox.ts +124 -2
- package/src/store/evidence/compaction-archive.ts +139 -0
- package/src/store/evidence/compaction-provenance.ts +52 -0
- package/src/store/evidence/compaction-text.ts +61 -0
- package/src/store/evidence/disk.ts +461 -0
- package/src/store/evidence/format.ts +126 -0
- package/src/store/evidence/index-page.ts +292 -0
- package/src/store/evidence/io.ts +95 -0
- package/src/store/evidence/linked.ts +365 -0
- package/src/store/evidence/passages.ts +88 -0
- package/src/store/evidence/record-chain.ts +108 -0
- package/src/store/evidence/search-input.ts +62 -0
- package/src/store/evidence/selection.ts +25 -0
- package/src/store/evidence/source-kind.ts +36 -0
- package/src/store/evidence/source-text.ts +285 -0
- package/src/store/evidence/types.ts +177 -0
- package/src/store/memory/disk.ts +4 -1
- package/src/store/run/disk.ts +110 -8
- package/src/store/run/memory.ts +10 -0
- package/src/store/run/tool-executions.ts +112 -0
- package/src/store/session/index.ts +2 -0
- package/src/store/session/sqlite.ts +584 -0
- package/src/tools/builtins/bash.ts +4 -10
- package/src/tools/builtins/edit-apply.ts +456 -0
- package/src/tools/builtins/edit.ts +39 -270
- package/src/tools/builtins/index.ts +9 -3
- package/src/tools/builtins/job.ts +5 -6
- package/src/tools/builtins/read-file.ts +56 -77
- package/src/tools/builtins/read-render.ts +104 -0
- package/src/tools/builtins/wait-for-job-bounds.ts +179 -0
- package/src/tools/builtins/wait-for-job.ts +184 -0
- package/src/tools/builtins/write-file.ts +7 -2
- package/src/tools/coordinator/index.ts +1 -7
- package/src/tools/defineTool.ts +4 -2
- package/src/tools/file-read-tracker.ts +86 -2
- package/src/tools/resident-history.ts +86 -0
- package/src/tools/resident-tool-evidence.ts +68 -0
- package/src/types/advisory/config.ts +7 -0
- package/src/types/agent/reactive.ts +1 -0
- package/src/types/authorization/index.ts +2 -2
- package/src/types/hitl/index.ts +4 -0
- package/src/types/message/index.ts +22 -0
- package/src/types/provider/chat.ts +2 -0
- package/src/types/provider/stream.ts +4 -0
- package/src/types/run/answer-review.ts +34 -3
- package/src/types/run/config.ts +3 -0
- package/src/types/run/entity.ts +21 -0
- package/src/types/run/events.ts +31 -8
- package/src/types/run/prepare-step.ts +59 -8
- package/src/types/run/store.ts +35 -4
- package/src/types/sandbox/index.ts +15 -14
- package/src/types/tool/index.ts +123 -1
- package/src/utils/await-with-abort.ts +26 -0
- package/src/utils/env.ts +23 -0
- package/src/utils/evidence-time.ts +9 -0
- package/src/utils/evidence-tokens.ts +32 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import type { ResidentAgendaState } from './agenda.js'
|
|
3
|
+
import { ResidentHistoryPageLimit, type ResidentHistoryReadBudget } from './history-disk.js'
|
|
4
|
+
|
|
5
|
+
/** @experimental An immutable upper boundary; new work requires a new source. */
|
|
6
|
+
export interface ResidentActivityScope {
|
|
7
|
+
readonly tenantId: string
|
|
8
|
+
readonly agentKey: string
|
|
9
|
+
readonly throughRevision: number
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** @experimental Admission is authority to inspect an attempt, not proof that it executed. */
|
|
13
|
+
export interface ResidentAdmission {
|
|
14
|
+
readonly revision: number
|
|
15
|
+
readonly pursuitRevision: number
|
|
16
|
+
readonly pursuitId: string
|
|
17
|
+
readonly claimId: string
|
|
18
|
+
readonly step: number
|
|
19
|
+
readonly objective: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** @experimental Settlement is an agenda decision, not proof of verification or delivery. */
|
|
23
|
+
export interface ResidentSettlement {
|
|
24
|
+
readonly revision: number
|
|
25
|
+
readonly pursuitId: string
|
|
26
|
+
readonly claimId: string
|
|
27
|
+
readonly outcome: 'wait' | 'complete' | 'blocked'
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @experimental Forward pages; cursor is the next revision to inspect, initially 1. */
|
|
31
|
+
export interface ResidentActivityOptions {
|
|
32
|
+
readonly cursor?: number
|
|
33
|
+
readonly maxRevisions?: number
|
|
34
|
+
readonly maxReadBytes?: number
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** @experimental Gaps stay explicit; counts cover only the scanned revision range. */
|
|
38
|
+
export interface ResidentActivityPage {
|
|
39
|
+
readonly scope: ResidentActivityScope
|
|
40
|
+
readonly fromRevision: number
|
|
41
|
+
readonly throughRevision: number
|
|
42
|
+
readonly nextCursor: number | null
|
|
43
|
+
readonly scannedBytes: number
|
|
44
|
+
readonly unavailableRevisions: readonly number[]
|
|
45
|
+
readonly admissions: readonly ResidentAdmission[]
|
|
46
|
+
readonly settlements: readonly ResidentSettlement[]
|
|
47
|
+
readonly archivedPursuits: readonly string[]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** @experimental A backend must enforce scope, cancellation and read bounds. */
|
|
51
|
+
export interface ResidentActivitySource {
|
|
52
|
+
readonly scope: ResidentActivityScope
|
|
53
|
+
read(options?: ResidentActivityOptions, signal?: AbortSignal): Promise<ResidentActivityPage>
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Internal adapter for the immutable disk agenda. */
|
|
57
|
+
export function createResidentActivitySource(
|
|
58
|
+
scopeInput: ResidentActivityScope,
|
|
59
|
+
load: (revision: number, budget: ResidentHistoryReadBudget) => Promise<ResidentAgendaState>,
|
|
60
|
+
): ResidentActivitySource {
|
|
61
|
+
const scope = Object.freeze(
|
|
62
|
+
z
|
|
63
|
+
.object({
|
|
64
|
+
tenantId: z.string().uuid(),
|
|
65
|
+
agentKey: z.string().min(1).max(200),
|
|
66
|
+
throughRevision: z.number().int().positive().safe(),
|
|
67
|
+
})
|
|
68
|
+
.parse(scopeInput),
|
|
69
|
+
)
|
|
70
|
+
return {
|
|
71
|
+
scope,
|
|
72
|
+
async read(options: ResidentActivityOptions = {}, signal?: AbortSignal) {
|
|
73
|
+
const from = z
|
|
74
|
+
.number()
|
|
75
|
+
.int()
|
|
76
|
+
.positive()
|
|
77
|
+
.max(scope.throughRevision)
|
|
78
|
+
.parse(options.cursor ?? 1)
|
|
79
|
+
const count = z
|
|
80
|
+
.number()
|
|
81
|
+
.int()
|
|
82
|
+
.positive()
|
|
83
|
+
.max(32)
|
|
84
|
+
.parse(options.maxRevisions ?? 32)
|
|
85
|
+
const budget: ResidentHistoryReadBudget = {
|
|
86
|
+
remaining: z
|
|
87
|
+
.number()
|
|
88
|
+
.int()
|
|
89
|
+
.positive()
|
|
90
|
+
.max(8 * 1024 * 1024)
|
|
91
|
+
.parse(options.maxReadBytes ?? 8 * 1024 * 1024),
|
|
92
|
+
bytesRead: 0,
|
|
93
|
+
signal,
|
|
94
|
+
}
|
|
95
|
+
const unavailable = new Set<number>()
|
|
96
|
+
const read = async (revision: number) => {
|
|
97
|
+
signal?.throwIfAborted()
|
|
98
|
+
try {
|
|
99
|
+
const state = await load(revision, budget)
|
|
100
|
+
if (
|
|
101
|
+
state.tenantId !== scope.tenantId ||
|
|
102
|
+
state.agentKey !== scope.agentKey ||
|
|
103
|
+
state.revision !== revision
|
|
104
|
+
)
|
|
105
|
+
throw new Error('Resident activity scope mismatch.')
|
|
106
|
+
return state
|
|
107
|
+
} catch (error) {
|
|
108
|
+
signal?.throwIfAborted()
|
|
109
|
+
if (error instanceof ResidentHistoryPageLimit) throw error
|
|
110
|
+
unavailable.add(revision)
|
|
111
|
+
return null
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const admissions: ResidentAdmission[] = []
|
|
115
|
+
const settlements: ResidentSettlement[] = []
|
|
116
|
+
const archivedPursuits: string[] = []
|
|
117
|
+
let through = from - 1
|
|
118
|
+
try {
|
|
119
|
+
let before = from > 1 ? await read(from - 1) : null
|
|
120
|
+
for (
|
|
121
|
+
let revision = from;
|
|
122
|
+
revision <= Math.min(scope.throughRevision, from + count - 1);
|
|
123
|
+
revision++
|
|
124
|
+
) {
|
|
125
|
+
const after = await read(revision)
|
|
126
|
+
if (before && after) {
|
|
127
|
+
for (const pursuit of after.pursuits) {
|
|
128
|
+
const previous = before.pursuits.find((p) => p.id === pursuit.id)?.state
|
|
129
|
+
const current = pursuit.state
|
|
130
|
+
if (!previous) continue
|
|
131
|
+
if (
|
|
132
|
+
current.revision === previous.revision + 1 &&
|
|
133
|
+
previous.phase !== 'running' &&
|
|
134
|
+
current.phase === 'running' &&
|
|
135
|
+
current.claimId &&
|
|
136
|
+
current.stepsAdmitted === previous.stepsAdmitted + 1
|
|
137
|
+
) {
|
|
138
|
+
admissions.push({
|
|
139
|
+
revision,
|
|
140
|
+
pursuitRevision: current.revision,
|
|
141
|
+
pursuitId: pursuit.id,
|
|
142
|
+
claimId: current.claimId,
|
|
143
|
+
step: current.stepsAdmitted,
|
|
144
|
+
objective: current.objective,
|
|
145
|
+
})
|
|
146
|
+
}
|
|
147
|
+
if (
|
|
148
|
+
current.revision === previous.revision + 1 &&
|
|
149
|
+
previous.phase === 'running' &&
|
|
150
|
+
previous.claimId &&
|
|
151
|
+
current.phase !== 'running' &&
|
|
152
|
+
current.claimId === null &&
|
|
153
|
+
current.stepsAdmitted === previous.stepsAdmitted
|
|
154
|
+
) {
|
|
155
|
+
settlements.push({
|
|
156
|
+
revision,
|
|
157
|
+
pursuitId: pursuit.id,
|
|
158
|
+
claimId: previous.claimId,
|
|
159
|
+
outcome: current.phase === 'waiting' ? 'wait' : current.phase,
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (after.archiveHead === revision)
|
|
164
|
+
for (const pursuit of before.pursuits)
|
|
165
|
+
if (!after.pursuits.some((p) => p.id === pursuit.id))
|
|
166
|
+
archivedPursuits.push(pursuit.id)
|
|
167
|
+
}
|
|
168
|
+
through = revision
|
|
169
|
+
before = after
|
|
170
|
+
}
|
|
171
|
+
} catch (error) {
|
|
172
|
+
if (!(error instanceof ResidentHistoryPageLimit)) throw error
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
scope,
|
|
176
|
+
fromRevision: from,
|
|
177
|
+
throughRevision: through,
|
|
178
|
+
nextCursor: through < scope.throughRevision ? through + 1 : null,
|
|
179
|
+
scannedBytes: budget.bytesRead,
|
|
180
|
+
unavailableRevisions: [...unavailable],
|
|
181
|
+
admissions,
|
|
182
|
+
settlements,
|
|
183
|
+
archivedPursuits,
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto'
|
|
2
|
-
import { join } from 'node:path'
|
|
2
|
+
import { join, resolve } from 'node:path'
|
|
3
3
|
import { isDeepStrictEqual } from 'node:util'
|
|
4
4
|
import { z } from 'zod'
|
|
5
5
|
import { DiskRecordStore } from '../../store/kv/record-store.js'
|
|
6
6
|
import { DiskRevisionRecordStore } from '../../store/kv/revision-record-store.js'
|
|
7
|
-
import { defineSchema } from '../../store/schema.js'
|
|
7
|
+
import { defineSchema, migrate } from '../../store/schema.js'
|
|
8
8
|
import type { TenantId } from '../../types/ids/index.js'
|
|
9
9
|
import { asTenantId } from '../../utils/id.js'
|
|
10
10
|
import {
|
|
@@ -20,6 +20,9 @@ import {
|
|
|
20
20
|
wakeResidentState,
|
|
21
21
|
} from './store.js'
|
|
22
22
|
|
|
23
|
+
import { type ResidentActivitySource, createResidentActivitySource } from './activity.js'
|
|
24
|
+
import { readResidentHistoryRecord } from './history-disk.js'
|
|
25
|
+
import { type ResidentHistorySource, createResidentHistorySource } from './history.js'
|
|
23
26
|
import {
|
|
24
27
|
type ResidentFeedback,
|
|
25
28
|
type ResidentObservation,
|
|
@@ -186,12 +189,13 @@ export interface ResidentArchiveListOptions {
|
|
|
186
189
|
|
|
187
190
|
const agendaRecordSchema = defineSchema({
|
|
188
191
|
kind: 'resident-agenda',
|
|
189
|
-
current:
|
|
192
|
+
current: 6,
|
|
190
193
|
migrations: {
|
|
191
194
|
1: (record) => record,
|
|
192
195
|
2: (record) => record,
|
|
193
196
|
3: (record) => record,
|
|
194
197
|
4: (record) => record,
|
|
198
|
+
5: (record) => record,
|
|
195
199
|
},
|
|
196
200
|
})
|
|
197
201
|
|
|
@@ -254,10 +258,12 @@ export class DiskResidentAgenda implements ResidentAgendaStore {
|
|
|
254
258
|
'resident agenda',
|
|
255
259
|
(record) => record.revision,
|
|
256
260
|
)
|
|
257
|
-
private readonly
|
|
261
|
+
private readonly historyRecords = new DiskRecordStore<ResidentAgendaState>(agendaRecordSchema)
|
|
258
262
|
private readonly location
|
|
259
263
|
private readonly tenantId: TenantId
|
|
260
264
|
private readonly agentKey: string
|
|
265
|
+
private readonly historyRoot: string
|
|
266
|
+
private readonly historyRevisions: string
|
|
261
267
|
|
|
262
268
|
constructor(root: string, scope: { tenantId: TenantId; agentKey: string }) {
|
|
263
269
|
this.tenantId = asTenantId(scope.tenantId)
|
|
@@ -268,6 +274,8 @@ export class DiskResidentAgenda implements ResidentAgendaStore {
|
|
|
268
274
|
revisionsDir: join(directory, 'revisions'),
|
|
269
275
|
publishLegacyProjection: false,
|
|
270
276
|
}
|
|
277
|
+
this.historyRoot = resolve(root)
|
|
278
|
+
this.historyRevisions = resolve(this.location.revisionsDir)
|
|
271
279
|
}
|
|
272
280
|
|
|
273
281
|
private checked(record: ResidentAgendaState): ResidentAgendaState {
|
|
@@ -301,13 +309,59 @@ export class DiskResidentAgenda implements ResidentAgendaStore {
|
|
|
301
309
|
/** Read one authoritative immutable commit, never the compatibility projection. */
|
|
302
310
|
async readRevision(revision: number): Promise<ResidentAgendaState | null> {
|
|
303
311
|
z.number().int().positive().safe().parse(revision)
|
|
304
|
-
const record = await this.
|
|
312
|
+
const record = await this.historyRecords.read(
|
|
313
|
+
join(this.location.revisionsDir, `${revision}.json`),
|
|
314
|
+
)
|
|
305
315
|
if (record === null) return null
|
|
306
316
|
const state = this.checked(record)
|
|
307
317
|
if (state.revision !== revision) throw new Error('Agenda revision filename and body disagree.')
|
|
308
318
|
return state
|
|
309
319
|
}
|
|
310
320
|
|
|
321
|
+
/**
|
|
322
|
+
* Bind bounded historical reads to this pursuit and a host-selected upper
|
|
323
|
+
* agenda revision (normally ResidentStepContext.agendaRevision). No I/O or
|
|
324
|
+
* inference occurs until search/read; the boundary never advances itself.
|
|
325
|
+
*/
|
|
326
|
+
history(pursuit: ResidentState, throughRevision: number): ResidentHistorySource {
|
|
327
|
+
const state = residentStateSchema.parse(pursuit)
|
|
328
|
+
if (state.tenantId !== this.tenantId || state.agentKey !== this.agentKey || !state.pursuitId)
|
|
329
|
+
throw new Error('History requires a pursuit belonging to this resident agenda.')
|
|
330
|
+
z.number().int().positive().safe().parse(throughRevision)
|
|
331
|
+
return createResidentHistorySource(
|
|
332
|
+
{
|
|
333
|
+
tenantId: this.tenantId,
|
|
334
|
+
agentKey: this.agentKey,
|
|
335
|
+
pursuitId: state.pursuitId,
|
|
336
|
+
throughRevision,
|
|
337
|
+
},
|
|
338
|
+
state,
|
|
339
|
+
async (revision, budget) => {
|
|
340
|
+
const raw = await readResidentHistoryRecord(
|
|
341
|
+
this.historyRoot,
|
|
342
|
+
join(this.historyRevisions, `${revision}.json`),
|
|
343
|
+
budget,
|
|
344
|
+
)
|
|
345
|
+
return this.checked(migrate<ResidentAgendaState>(agendaRecordSchema, raw))
|
|
346
|
+
},
|
|
347
|
+
)
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/** @experimental Bounded admission/settlement history, including archived pursuits. */
|
|
351
|
+
activity(throughRevision: number): ResidentActivitySource {
|
|
352
|
+
return createResidentActivitySource(
|
|
353
|
+
{ tenantId: this.tenantId, agentKey: this.agentKey, throughRevision },
|
|
354
|
+
async (revision, budget) => {
|
|
355
|
+
const raw = await readResidentHistoryRecord(
|
|
356
|
+
this.historyRoot,
|
|
357
|
+
join(this.historyRevisions, `${revision}.json`),
|
|
358
|
+
budget,
|
|
359
|
+
)
|
|
360
|
+
return this.checked(migrate<ResidentAgendaState>(agendaRecordSchema, raw))
|
|
361
|
+
},
|
|
362
|
+
)
|
|
363
|
+
}
|
|
364
|
+
|
|
311
365
|
private retire(state: ResidentAgendaState, input: ResidentArchiveRequest): ResidentAgendaState {
|
|
312
366
|
const request = archiveRequestSchema.parse(input)
|
|
313
367
|
const pursuits = new Set(request.pursuitIds)
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import type {
|
|
3
|
+
ResidentActivityScope,
|
|
4
|
+
ResidentActivitySource,
|
|
5
|
+
ResidentAdmission,
|
|
6
|
+
ResidentSettlement,
|
|
7
|
+
} from './activity.js'
|
|
8
|
+
|
|
9
|
+
const count = z.number().int().nonnegative().safe()
|
|
10
|
+
const uuidKey = (id: string) => id.toLowerCase()
|
|
11
|
+
const admissionSchema = z.object({
|
|
12
|
+
revision: count.positive(),
|
|
13
|
+
pursuitRevision: count.positive(),
|
|
14
|
+
pursuitId: z.string().uuid(),
|
|
15
|
+
claimId: z.string().uuid(),
|
|
16
|
+
step: count.positive(),
|
|
17
|
+
objective: z.string().min(1).max(8000),
|
|
18
|
+
})
|
|
19
|
+
const settlementSchema = z.object({
|
|
20
|
+
revision: count.positive(),
|
|
21
|
+
pursuitId: z.string().uuid(),
|
|
22
|
+
claimId: z.string().uuid(),
|
|
23
|
+
outcome: z.enum(['wait', 'complete', 'blocked']),
|
|
24
|
+
})
|
|
25
|
+
const receiptSchema = z
|
|
26
|
+
.object({
|
|
27
|
+
runId: z.string().uuid(),
|
|
28
|
+
/** Own usage includes retry and side-call spend; never add cache buckets again. */
|
|
29
|
+
ownTokens: count.nullable(),
|
|
30
|
+
treeTokens: count.nullable(),
|
|
31
|
+
ownCostUsd: z.number().nonnegative().finite().nullable(),
|
|
32
|
+
unpricedOwnTokens: count.nullable(),
|
|
33
|
+
usageFinal: z.boolean(),
|
|
34
|
+
cleanup: z.enum(['confirmed', 'unconfirmed', 'unknown']),
|
|
35
|
+
verification: z.enum(['recorded', 'unconfigured', 'unconfirmed']),
|
|
36
|
+
})
|
|
37
|
+
.superRefine((receipt, ctx) => {
|
|
38
|
+
if (
|
|
39
|
+
receipt.ownTokens !== null &&
|
|
40
|
+
receipt.treeTokens !== null &&
|
|
41
|
+
receipt.treeTokens < receipt.ownTokens
|
|
42
|
+
)
|
|
43
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Tree usage is below own usage.' })
|
|
44
|
+
if (
|
|
45
|
+
receipt.ownTokens !== null &&
|
|
46
|
+
receipt.unpricedOwnTokens !== null &&
|
|
47
|
+
receipt.unpricedOwnTokens > receipt.ownTokens
|
|
48
|
+
)
|
|
49
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Unpriced usage exceeds own usage.' })
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
/** @experimental Host-authenticated cumulative root receipt. Cost covers this root only. */
|
|
53
|
+
export type ResidentConsumptionReceipt = z.infer<typeof receiptSchema>
|
|
54
|
+
|
|
55
|
+
/** @experimental A host resolves only authoritative admitted claims and bounds each read. */
|
|
56
|
+
export interface ResidentConsumptionResolver {
|
|
57
|
+
/** Worst-case bytes read per resolution; reserved before calling the adapter. */
|
|
58
|
+
readonly maxReadBytes: number
|
|
59
|
+
resolve(
|
|
60
|
+
admission: ResidentAdmission,
|
|
61
|
+
signal?: AbortSignal,
|
|
62
|
+
): Promise<ResidentConsumptionReceipt | null>
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** @experimental Bounds the entire inspection, not just each page. No inference or writes. */
|
|
66
|
+
export interface ResidentConsumptionOptions {
|
|
67
|
+
readonly cursor?: number
|
|
68
|
+
readonly maxRevisions?: number
|
|
69
|
+
readonly maxHistoryBytes?: number
|
|
70
|
+
readonly maxReceiptBytes?: number
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** @experimental Missing and deferred receipts never establish zero usage. */
|
|
74
|
+
export interface ResidentConsumptionAttempt extends ResidentAdmission {
|
|
75
|
+
readonly settlement: ResidentSettlement | null
|
|
76
|
+
readonly receipt: ResidentConsumptionReceipt | null
|
|
77
|
+
readonly receiptStatus: 'available' | 'missing' | 'invalid' | 'deferred' | 'duplicate-run'
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** @experimental An evidence projection, not a bill or an enforced spending cap. */
|
|
81
|
+
export interface ResidentConsumptionReport {
|
|
82
|
+
readonly scope: ResidentActivityScope
|
|
83
|
+
readonly fromRevision: number
|
|
84
|
+
readonly throughRevision: number
|
|
85
|
+
readonly nextCursor: number | null
|
|
86
|
+
readonly historyComplete: boolean
|
|
87
|
+
readonly unavailableRevisions: readonly number[]
|
|
88
|
+
readonly historyBytes: number
|
|
89
|
+
readonly receiptBytesReserved: number
|
|
90
|
+
readonly archivedPursuits: readonly string[]
|
|
91
|
+
readonly attempts: readonly ResidentConsumptionAttempt[]
|
|
92
|
+
readonly recorded: {
|
|
93
|
+
readonly ownTokens: number
|
|
94
|
+
readonly treeTokens: number
|
|
95
|
+
readonly ownCostUsd: number
|
|
96
|
+
readonly unpricedOwnTokens: number
|
|
97
|
+
}
|
|
98
|
+
readonly unknown: {
|
|
99
|
+
readonly ownUsageAttempts: number
|
|
100
|
+
readonly treeUsageAttempts: number
|
|
101
|
+
readonly ownPriceAttempts: number
|
|
102
|
+
}
|
|
103
|
+
/** Requires complete history and final receipts; says nothing about external billing. */
|
|
104
|
+
readonly usageComplete: boolean
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @experimental Inspect cumulative root receipts once per admitted claim. Historical
|
|
109
|
+
* archive/reconcile events never erase consumption. Tree tokens are a separate total:
|
|
110
|
+
* adding them to own tokens would count the root twice. Descendant prices are unknown.
|
|
111
|
+
*/
|
|
112
|
+
export async function inspectResidentConsumption(
|
|
113
|
+
source: ResidentActivitySource,
|
|
114
|
+
resolver: ResidentConsumptionResolver,
|
|
115
|
+
options: ResidentConsumptionOptions = {},
|
|
116
|
+
signal?: AbortSignal,
|
|
117
|
+
): Promise<ResidentConsumptionReport> {
|
|
118
|
+
const scope = z
|
|
119
|
+
.object({
|
|
120
|
+
tenantId: z.string().uuid(),
|
|
121
|
+
agentKey: z.string().min(1).max(200),
|
|
122
|
+
throughRevision: count.positive(),
|
|
123
|
+
})
|
|
124
|
+
.parse(source.scope)
|
|
125
|
+
const from = z
|
|
126
|
+
.number()
|
|
127
|
+
.int()
|
|
128
|
+
.positive()
|
|
129
|
+
.max(scope.throughRevision)
|
|
130
|
+
.parse(options.cursor ?? 1)
|
|
131
|
+
const maxRevisions = z
|
|
132
|
+
.number()
|
|
133
|
+
.int()
|
|
134
|
+
.positive()
|
|
135
|
+
.max(4096)
|
|
136
|
+
.parse(options.maxRevisions ?? 256)
|
|
137
|
+
const maxHistoryBytes = z
|
|
138
|
+
.number()
|
|
139
|
+
.int()
|
|
140
|
+
.positive()
|
|
141
|
+
.max(8 * 1024 * 1024)
|
|
142
|
+
.parse(options.maxHistoryBytes ?? 8 * 1024 * 1024)
|
|
143
|
+
const maxReceiptBytes = z
|
|
144
|
+
.number()
|
|
145
|
+
.int()
|
|
146
|
+
.nonnegative()
|
|
147
|
+
.max(64 * 1024 * 1024)
|
|
148
|
+
.parse(options.maxReceiptBytes ?? 16 * 1024 * 1024)
|
|
149
|
+
const resolutionBytes = z
|
|
150
|
+
.number()
|
|
151
|
+
.int()
|
|
152
|
+
.positive()
|
|
153
|
+
.max(1024 * 1024)
|
|
154
|
+
.parse(resolver.maxReadBytes)
|
|
155
|
+
const admissions = new Map<string, ResidentAdmission>()
|
|
156
|
+
const settlements = new Map<string, ResidentSettlement>()
|
|
157
|
+
const unavailable = new Set<number>()
|
|
158
|
+
const archived = new Map<string, string>()
|
|
159
|
+
let cursor: number | null = from
|
|
160
|
+
let through = from - 1
|
|
161
|
+
let historyBytes = 0
|
|
162
|
+
while (cursor !== null && through - from + 1 < maxRevisions && historyBytes < maxHistoryBytes) {
|
|
163
|
+
signal?.throwIfAborted()
|
|
164
|
+
const page = await source.read(
|
|
165
|
+
{
|
|
166
|
+
cursor,
|
|
167
|
+
maxRevisions: Math.min(32, maxRevisions - (through - from + 1)),
|
|
168
|
+
maxReadBytes: maxHistoryBytes - historyBytes,
|
|
169
|
+
},
|
|
170
|
+
signal,
|
|
171
|
+
)
|
|
172
|
+
signal?.throwIfAborted()
|
|
173
|
+
if (
|
|
174
|
+
page.scope.tenantId !== scope.tenantId ||
|
|
175
|
+
page.scope.agentKey !== scope.agentKey ||
|
|
176
|
+
page.scope.throughRevision !== scope.throughRevision ||
|
|
177
|
+
page.fromRevision !== cursor ||
|
|
178
|
+
!Number.isSafeInteger(page.throughRevision) ||
|
|
179
|
+
page.throughRevision < cursor - 1 ||
|
|
180
|
+
page.throughRevision > Math.min(scope.throughRevision, from + maxRevisions - 1) ||
|
|
181
|
+
!Number.isSafeInteger(page.scannedBytes) ||
|
|
182
|
+
page.scannedBytes < 0 ||
|
|
183
|
+
page.scannedBytes > maxHistoryBytes - historyBytes ||
|
|
184
|
+
page.nextCursor !==
|
|
185
|
+
(page.throughRevision === scope.throughRevision ? null : page.throughRevision + 1)
|
|
186
|
+
)
|
|
187
|
+
throw new Error('Invalid resident activity page.')
|
|
188
|
+
if (
|
|
189
|
+
page.admissions.length > 32 ||
|
|
190
|
+
page.settlements.length > 32 ||
|
|
191
|
+
page.archivedPursuits.length > 1024
|
|
192
|
+
)
|
|
193
|
+
throw new Error('Resident activity page exceeds event bounds.')
|
|
194
|
+
if (page.unavailableRevisions.length > 33) throw new Error('Invalid unavailable revision list.')
|
|
195
|
+
for (const revision of page.unavailableRevisions) {
|
|
196
|
+
count.positive().parse(revision)
|
|
197
|
+
if (revision < Math.max(1, cursor - 1) || revision > page.throughRevision)
|
|
198
|
+
throw new Error('Unavailable revision is outside the page.')
|
|
199
|
+
unavailable.add(revision)
|
|
200
|
+
}
|
|
201
|
+
for (const raw of page.admissions) {
|
|
202
|
+
const admission = Object.freeze(admissionSchema.parse(raw))
|
|
203
|
+
if (admission.revision < cursor || admission.revision > page.throughRevision)
|
|
204
|
+
throw new Error('Resident admission is outside its history page.')
|
|
205
|
+
if (admissions.has(uuidKey(admission.claimId)))
|
|
206
|
+
throw new Error('Duplicate resident admission.')
|
|
207
|
+
admissions.set(uuidKey(admission.claimId), admission)
|
|
208
|
+
}
|
|
209
|
+
for (const raw of page.settlements) {
|
|
210
|
+
const settlement = Object.freeze(settlementSchema.parse(raw))
|
|
211
|
+
if (settlement.revision < cursor || settlement.revision > page.throughRevision)
|
|
212
|
+
throw new Error('Resident settlement is outside its history page.')
|
|
213
|
+
if (settlements.has(uuidKey(settlement.claimId)))
|
|
214
|
+
throw new Error('Duplicate resident settlement.')
|
|
215
|
+
settlements.set(uuidKey(settlement.claimId), settlement)
|
|
216
|
+
}
|
|
217
|
+
for (const id of page.archivedPursuits) archived.set(uuidKey(z.string().uuid().parse(id)), id)
|
|
218
|
+
historyBytes += page.scannedBytes
|
|
219
|
+
through = page.throughRevision
|
|
220
|
+
if (page.nextCursor === cursor) break
|
|
221
|
+
cursor = page.nextCursor
|
|
222
|
+
}
|
|
223
|
+
const attempts: ResidentConsumptionAttempt[] = []
|
|
224
|
+
let receiptBytesReserved = 0
|
|
225
|
+
for (const admission of admissions.values()) {
|
|
226
|
+
signal?.throwIfAborted()
|
|
227
|
+
const settlement = settlements.get(uuidKey(admission.claimId))
|
|
228
|
+
if (
|
|
229
|
+
settlement &&
|
|
230
|
+
(uuidKey(settlement.pursuitId) !== uuidKey(admission.pursuitId) ||
|
|
231
|
+
settlement.revision <= admission.revision)
|
|
232
|
+
)
|
|
233
|
+
throw new Error('Resident settlement does not follow its admitted claim.')
|
|
234
|
+
let receipt: ResidentConsumptionReceipt | null = null
|
|
235
|
+
let receiptStatus: ResidentConsumptionAttempt['receiptStatus'] = 'deferred'
|
|
236
|
+
if (receiptBytesReserved + resolutionBytes <= maxReceiptBytes) {
|
|
237
|
+
receiptBytesReserved += resolutionBytes
|
|
238
|
+
try {
|
|
239
|
+
const value = await resolver.resolve(admission, signal)
|
|
240
|
+
signal?.throwIfAborted()
|
|
241
|
+
receipt = value === null ? null : receiptSchema.parse(value)
|
|
242
|
+
receiptStatus = receipt ? 'available' : 'missing'
|
|
243
|
+
} catch {
|
|
244
|
+
signal?.throwIfAborted()
|
|
245
|
+
receiptStatus = 'invalid'
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
attempts.push({
|
|
249
|
+
...admission,
|
|
250
|
+
settlement: settlements.get(uuidKey(admission.claimId)) ?? null,
|
|
251
|
+
receipt,
|
|
252
|
+
receiptStatus,
|
|
253
|
+
})
|
|
254
|
+
}
|
|
255
|
+
// A copied root receipt must not authenticate two claims. Exclude BOTH records.
|
|
256
|
+
const runCounts = new Map<string, number>()
|
|
257
|
+
for (const { receipt } of attempts)
|
|
258
|
+
if (receipt)
|
|
259
|
+
runCounts.set(uuidKey(receipt.runId), (runCounts.get(uuidKey(receipt.runId)) ?? 0) + 1)
|
|
260
|
+
const checked = attempts.map((attempt) =>
|
|
261
|
+
attempt.receipt && (runCounts.get(uuidKey(attempt.receipt.runId)) ?? 0) > 1
|
|
262
|
+
? { ...attempt, receipt: null, receiptStatus: 'duplicate-run' as const }
|
|
263
|
+
: attempt,
|
|
264
|
+
)
|
|
265
|
+
const recorded = { ownTokens: 0, treeTokens: 0, ownCostUsd: 0, unpricedOwnTokens: 0 }
|
|
266
|
+
const unknown = { ownUsageAttempts: 0, treeUsageAttempts: 0, ownPriceAttempts: 0 }
|
|
267
|
+
const add = (a: number, b: number) => {
|
|
268
|
+
const result = a + b
|
|
269
|
+
if (!Number.isSafeInteger(result))
|
|
270
|
+
throw new Error('Resident consumption exceeds the safe integer range.')
|
|
271
|
+
return result
|
|
272
|
+
}
|
|
273
|
+
let priceCorrection = 0
|
|
274
|
+
for (const { receipt } of checked) {
|
|
275
|
+
if (!receipt?.usageFinal || receipt.ownTokens === null) unknown.ownUsageAttempts++
|
|
276
|
+
if (!receipt?.usageFinal || receipt.treeTokens === null) unknown.treeUsageAttempts++
|
|
277
|
+
if (
|
|
278
|
+
!receipt?.usageFinal ||
|
|
279
|
+
receipt.ownCostUsd === null ||
|
|
280
|
+
receipt.unpricedOwnTokens === null ||
|
|
281
|
+
receipt.unpricedOwnTokens > 0
|
|
282
|
+
)
|
|
283
|
+
unknown.ownPriceAttempts++
|
|
284
|
+
recorded.ownTokens = add(recorded.ownTokens, receipt?.ownTokens ?? 0)
|
|
285
|
+
recorded.treeTokens = add(recorded.treeTokens, receipt?.treeTokens ?? 0)
|
|
286
|
+
recorded.unpricedOwnTokens = add(recorded.unpricedOwnTokens, receipt?.unpricedOwnTokens ?? 0)
|
|
287
|
+
// Compensated addition limits drift; provider prices are still estimates, not a bill.
|
|
288
|
+
const y = (receipt?.ownCostUsd ?? 0) - priceCorrection
|
|
289
|
+
const next = recorded.ownCostUsd + y
|
|
290
|
+
priceCorrection = next - recorded.ownCostUsd - y
|
|
291
|
+
if (!Number.isFinite(next)) throw new Error('Resident cost exceeds the supported range.')
|
|
292
|
+
recorded.ownCostUsd = next
|
|
293
|
+
}
|
|
294
|
+
const historyComplete = from === 1 && cursor === null && unavailable.size === 0
|
|
295
|
+
return {
|
|
296
|
+
scope,
|
|
297
|
+
fromRevision: from,
|
|
298
|
+
throughRevision: through,
|
|
299
|
+
nextCursor: cursor,
|
|
300
|
+
historyComplete,
|
|
301
|
+
unavailableRevisions: [...unavailable],
|
|
302
|
+
historyBytes,
|
|
303
|
+
receiptBytesReserved,
|
|
304
|
+
archivedPursuits: [...archived.values()],
|
|
305
|
+
attempts: checked,
|
|
306
|
+
recorded,
|
|
307
|
+
unknown,
|
|
308
|
+
usageComplete:
|
|
309
|
+
historyComplete && unknown.ownUsageAttempts === 0 && unknown.treeUsageAttempts === 0,
|
|
310
|
+
}
|
|
311
|
+
}
|