@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,499 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto'
|
|
2
|
+
import { z } from 'zod'
|
|
3
|
+
import {
|
|
4
|
+
type HarnessProtectionPlan,
|
|
5
|
+
normalizeHarnessProtection,
|
|
6
|
+
} from '../../eval/harness-protection.js'
|
|
7
|
+
import {
|
|
8
|
+
type HarnessReview,
|
|
9
|
+
type HarnessVerificationBatch,
|
|
10
|
+
reviewHarnessCandidate,
|
|
11
|
+
} from '../../eval/harness-verification.js'
|
|
12
|
+
import type { DiskResidentAgenda } from './agenda.js'
|
|
13
|
+
import {
|
|
14
|
+
type ResidentLearningEvidence,
|
|
15
|
+
type ResidentSkillCandidate,
|
|
16
|
+
hashResidentSkill,
|
|
17
|
+
normalizeResidentSkill,
|
|
18
|
+
promoteResidentSkill,
|
|
19
|
+
residentLearningEvidenceSchema,
|
|
20
|
+
} from './learning.js'
|
|
21
|
+
import { ResidentConflictError } from './store.js'
|
|
22
|
+
|
|
23
|
+
/** @experimental One explicitly requested experiment; callbacks own inference and evaluation. */
|
|
24
|
+
export type ResidentLearningStage = 'explore' | 'generate' | 'verification' | 'confirmation'
|
|
25
|
+
|
|
26
|
+
const receiptSchema = z.object({
|
|
27
|
+
runId: z.string().uuid(),
|
|
28
|
+
tokens: z.number().int().nonnegative().safe().nullable(),
|
|
29
|
+
costUsd: z.number().nonnegative().finite().nullable(),
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
/** @experimental One non-overlapping execution's usage, including its retries. Null is unknown. */
|
|
33
|
+
export type ResidentLearningReceipt = Readonly<z.infer<typeof receiptSchema>>
|
|
34
|
+
|
|
35
|
+
/** @experimental Recorded values are lower bounds when a receipt or stage is incomplete. */
|
|
36
|
+
export interface ResidentLearningConsumption {
|
|
37
|
+
readonly tokens: number
|
|
38
|
+
readonly costUsd: number
|
|
39
|
+
readonly receipts: number
|
|
40
|
+
readonly unknownTokens: number
|
|
41
|
+
readonly unknownCosts: number
|
|
42
|
+
readonly unfinishedStages: number
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** @experimental Append in sequence to host-owned durable storage before acknowledging. */
|
|
46
|
+
export interface ResidentLearningCycleEvent {
|
|
47
|
+
readonly cycleId: string
|
|
48
|
+
readonly sequence: number
|
|
49
|
+
readonly kind:
|
|
50
|
+
| 'started'
|
|
51
|
+
| 'stage-started'
|
|
52
|
+
| 'stage-finished'
|
|
53
|
+
| 'usage'
|
|
54
|
+
| 'exploration'
|
|
55
|
+
| 'candidate'
|
|
56
|
+
| 'evaluation'
|
|
57
|
+
| 'activation-requested'
|
|
58
|
+
| 'finished'
|
|
59
|
+
readonly stage?: ResidentLearningStage
|
|
60
|
+
readonly data: Readonly<Record<string, unknown>>
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** @experimental Use this stage's signal for every owned run; await every usage append. */
|
|
64
|
+
export interface ResidentLearningCycleContext {
|
|
65
|
+
readonly cycleId: string
|
|
66
|
+
readonly stage: ResidentLearningStage
|
|
67
|
+
readonly signal: AbortSignal
|
|
68
|
+
/** Planning allowance, not a reservation or a cap on a callback's in-flight work. */
|
|
69
|
+
readonly remainingUnits: number
|
|
70
|
+
recordUsage(receipt: ResidentLearningReceipt): Promise<void>
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** @experimental Original failure and active baseline; never contains confirmation tasks. */
|
|
74
|
+
export interface ResidentLearningExplorationContext extends ResidentLearningCycleContext {
|
|
75
|
+
readonly skillName: string
|
|
76
|
+
/** Admitted by the host before generation; cannot be changed by a candidate. */
|
|
77
|
+
readonly purpose?: 'task' | 'exploration'
|
|
78
|
+
readonly failure: Readonly<{ evidence: ResidentLearningEvidence; trace: string }>
|
|
79
|
+
readonly baseline: ResidentSkillCandidate | null
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** @experimental Host-retained environment observations, not a model's claim of success. */
|
|
83
|
+
export interface ResidentLearningExploration {
|
|
84
|
+
readonly evidence: ResidentLearningEvidence
|
|
85
|
+
readonly trace: string
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** @experimental Generation sees completed exploration, never held-out evaluation cases. */
|
|
89
|
+
export interface ResidentLearningGenerationContext extends ResidentLearningExplorationContext {
|
|
90
|
+
readonly exploration?: Readonly<ResidentLearningExploration>
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** @experimental The host supplies independently scored, retained traces for these exact revisions. */
|
|
94
|
+
export interface ResidentLearningEvaluationContext extends ResidentLearningCycleContext {
|
|
95
|
+
readonly baseline: ResidentSkillCandidate | null
|
|
96
|
+
readonly candidate: ResidentSkillCandidate
|
|
97
|
+
readonly baselineRevision: string
|
|
98
|
+
readonly candidateRevision: string
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** @experimental No provider, default background loop or executable-code activation is installed. */
|
|
102
|
+
export interface ResidentLearningCycleOptions {
|
|
103
|
+
/** Omitted means task guidance. Explicitly select exploration to improve an explorer policy. */
|
|
104
|
+
readonly purpose?: 'task' | 'exploration'
|
|
105
|
+
/** Fixed before generation; both rounds must preserve every named task. */
|
|
106
|
+
readonly protection: HarnessProtectionPlan
|
|
107
|
+
readonly agenda: Pick<DiskResidentAgenda, 'read' | 'promoteSkill'>
|
|
108
|
+
readonly skillName: string
|
|
109
|
+
readonly failure: { readonly evidence: ResidentLearningEvidence; readonly trace: string }
|
|
110
|
+
readonly parentCycleId?: string
|
|
111
|
+
readonly signal: AbortSignal
|
|
112
|
+
/** Stops subsequent stages/activation after observed excess; callbacks enforce in-flight limits. */
|
|
113
|
+
readonly resources: { readonly unit: 'tokens' | 'usd'; readonly maxUnits: number }
|
|
114
|
+
readonly record: (event: ResidentLearningCycleEvent) => Promise<void>
|
|
115
|
+
/** Optional active tool exploration before synthesis; the host retains actual observations. */
|
|
116
|
+
readonly explore?: (context: ResidentLearningExplorationContext) => Promise<{
|
|
117
|
+
readonly observations: ResidentLearningExploration
|
|
118
|
+
readonly usageComplete: boolean
|
|
119
|
+
}>
|
|
120
|
+
readonly generate: (context: ResidentLearningGenerationContext) => Promise<{
|
|
121
|
+
readonly candidate: ResidentSkillCandidate
|
|
122
|
+
/** All executions, including failures and side calls, have supplied receipts. */
|
|
123
|
+
readonly usageComplete: boolean
|
|
124
|
+
}>
|
|
125
|
+
readonly evaluate: (context: ResidentLearningEvaluationContext) => Promise<{
|
|
126
|
+
readonly batch: HarnessVerificationBatch
|
|
127
|
+
readonly usageComplete: boolean
|
|
128
|
+
}>
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** @experimental An ambiguous activation must be inspected, never automatically replayed. */
|
|
132
|
+
export interface ResidentLearningCycleResult {
|
|
133
|
+
readonly cycleId: string
|
|
134
|
+
readonly status:
|
|
135
|
+
| 'activated'
|
|
136
|
+
| 'rejected'
|
|
137
|
+
| 'inconclusive'
|
|
138
|
+
| 'conflict'
|
|
139
|
+
| 'cancelled'
|
|
140
|
+
| 'failed'
|
|
141
|
+
| 'activation-unknown'
|
|
142
|
+
readonly reason: string
|
|
143
|
+
readonly candidate?: ResidentSkillCandidate
|
|
144
|
+
readonly candidateRevision?: string
|
|
145
|
+
readonly baselineRevision?: string
|
|
146
|
+
readonly agendaRevision?: number
|
|
147
|
+
readonly review?: HarnessReview
|
|
148
|
+
readonly consumption: ResidentLearningConsumption
|
|
149
|
+
readonly auditComplete: boolean
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @experimental Generate one candidate, independently verify and confirm it, then
|
|
154
|
+
* activate through the existing exact-revision transaction. No internal inference
|
|
155
|
+
* loop, retry or model-generated success claim replaces the host's evaluator.
|
|
156
|
+
*/
|
|
157
|
+
export async function runResidentLearningCycle(
|
|
158
|
+
options: ResidentLearningCycleOptions,
|
|
159
|
+
): Promise<ResidentLearningCycleResult> {
|
|
160
|
+
const protection = normalizeHarnessProtection(options.protection)
|
|
161
|
+
const purpose = z.enum(['task', 'exploration']).parse(options.purpose ?? 'task')
|
|
162
|
+
const purposeContext = options.purpose === undefined ? {} : { purpose }
|
|
163
|
+
const skillName = z
|
|
164
|
+
.string()
|
|
165
|
+
.regex(/^[a-z0-9][a-z0-9_-]{0,63}$/)
|
|
166
|
+
.parse(options.skillName)
|
|
167
|
+
const failure = Object.freeze({
|
|
168
|
+
evidence: Object.freeze(residentLearningEvidenceSchema.parse(options.failure.evidence)),
|
|
169
|
+
trace: z.string().trim().min(1).max(32_000).parse(options.failure.trace),
|
|
170
|
+
})
|
|
171
|
+
const resources = z
|
|
172
|
+
.object({ unit: z.enum(['tokens', 'usd']), maxUnits: z.number().positive().finite() })
|
|
173
|
+
.parse(options.resources)
|
|
174
|
+
const parentCycleId =
|
|
175
|
+
options.parentCycleId === undefined ? undefined : z.string().uuid().parse(options.parentCycleId)
|
|
176
|
+
const cycleId = randomUUID()
|
|
177
|
+
const receipts = new Map<string, ResidentLearningReceipt>()
|
|
178
|
+
let sequence = 0
|
|
179
|
+
let pending = Promise.resolve()
|
|
180
|
+
let auditComplete = true
|
|
181
|
+
let unfinishedStages = 0
|
|
182
|
+
let candidate: ResidentSkillCandidate | undefined
|
|
183
|
+
let candidateRevision: string | undefined
|
|
184
|
+
let baselineRevision: string | undefined
|
|
185
|
+
let review: HarnessReview | undefined
|
|
186
|
+
let activatedRevision: number | undefined
|
|
187
|
+
let activationRequested = false
|
|
188
|
+
const usage = (): ResidentLearningConsumption => ({
|
|
189
|
+
tokens: [...receipts.values()].reduce((n, r) => n + (r.tokens ?? 0), 0),
|
|
190
|
+
costUsd: [...receipts.values()].reduce((n, r) => n + (r.costUsd ?? 0), 0),
|
|
191
|
+
receipts: receipts.size,
|
|
192
|
+
unknownTokens: [...receipts.values()].filter((r) => r.tokens === null).length,
|
|
193
|
+
unknownCosts: [...receipts.values()].filter((r) => r.costUsd === null).length,
|
|
194
|
+
unfinishedStages,
|
|
195
|
+
})
|
|
196
|
+
const append = (
|
|
197
|
+
kind: ResidentLearningCycleEvent['kind'],
|
|
198
|
+
data: Record<string, unknown>,
|
|
199
|
+
stage?: ResidentLearningStage,
|
|
200
|
+
) => {
|
|
201
|
+
const event = Object.freeze({
|
|
202
|
+
cycleId,
|
|
203
|
+
sequence: ++sequence,
|
|
204
|
+
kind,
|
|
205
|
+
...(stage ? { stage } : {}),
|
|
206
|
+
data: structuredClone(data),
|
|
207
|
+
})
|
|
208
|
+
pending = pending
|
|
209
|
+
.then(() => options.record(event))
|
|
210
|
+
.catch((error) => {
|
|
211
|
+
auditComplete = false
|
|
212
|
+
throw error
|
|
213
|
+
})
|
|
214
|
+
return pending
|
|
215
|
+
}
|
|
216
|
+
const result = (
|
|
217
|
+
status: ResidentLearningCycleResult['status'],
|
|
218
|
+
reason: string,
|
|
219
|
+
): ResidentLearningCycleResult => ({
|
|
220
|
+
cycleId,
|
|
221
|
+
status,
|
|
222
|
+
reason,
|
|
223
|
+
...(candidate ? { candidate, candidateRevision } : {}),
|
|
224
|
+
...(baselineRevision ? { baselineRevision } : {}),
|
|
225
|
+
...(review ? { review } : {}),
|
|
226
|
+
...(activatedRevision !== undefined ? { agendaRevision: activatedRevision } : {}),
|
|
227
|
+
consumption: usage(),
|
|
228
|
+
auditComplete,
|
|
229
|
+
})
|
|
230
|
+
const resourceProblem = (needsWork = false): string | null => {
|
|
231
|
+
const measured = usage()
|
|
232
|
+
if (
|
|
233
|
+
unfinishedStages ||
|
|
234
|
+
(resources.unit === 'tokens' ? measured.unknownTokens : measured.unknownCosts)
|
|
235
|
+
)
|
|
236
|
+
return `Incomplete ${resources.unit} evidence prevents further learning stages or activation.`
|
|
237
|
+
if ((resources.unit === 'tokens' ? measured.tokens : measured.costUsd) > resources.maxUnits)
|
|
238
|
+
return 'Recorded experiment consumption exceeds the declared resource allowance.'
|
|
239
|
+
if (
|
|
240
|
+
needsWork &&
|
|
241
|
+
(resources.unit === 'tokens' ? measured.tokens : measured.costUsd) === resources.maxUnits
|
|
242
|
+
)
|
|
243
|
+
return 'The recorded resource allowance is exhausted before the next stage.'
|
|
244
|
+
return null
|
|
245
|
+
}
|
|
246
|
+
const execute = async (): Promise<ResidentLearningCycleResult> => {
|
|
247
|
+
options.signal.throwIfAborted()
|
|
248
|
+
const snapshot = structuredClone(await options.agenda.read())
|
|
249
|
+
if (!snapshot) throw new Error('No resident agenda exists for this learning cycle.')
|
|
250
|
+
if (snapshot.paused || snapshot.pursuits.some((p) => p.state.phase === 'running'))
|
|
251
|
+
throw new Error('Resident learning requires an unpaused agenda without running pursuits.')
|
|
252
|
+
const current = snapshot.learning?.skills.find((s) => s.name === skillName)
|
|
253
|
+
if (current && (current.purpose ?? 'task') !== purpose)
|
|
254
|
+
throw new Error(
|
|
255
|
+
'The active skill has a different learning purpose; use a distinct skill name.',
|
|
256
|
+
)
|
|
257
|
+
const baseline = current ? normalizeResidentSkill(current) : null
|
|
258
|
+
baselineRevision = baseline ? hashResidentSkill(baseline) : 'none'
|
|
259
|
+
await append('started', {
|
|
260
|
+
tenantId: snapshot.tenantId,
|
|
261
|
+
agentKey: snapshot.agentKey,
|
|
262
|
+
agendaRevision: snapshot.revision,
|
|
263
|
+
baselineRevision,
|
|
264
|
+
skillName,
|
|
265
|
+
...purposeContext,
|
|
266
|
+
failure,
|
|
267
|
+
resources,
|
|
268
|
+
protection,
|
|
269
|
+
...(options.explore ? { explorationEnabled: true } : {}),
|
|
270
|
+
...(parentCycleId ? { parentCycleId } : {}),
|
|
271
|
+
})
|
|
272
|
+
const check = async () => {
|
|
273
|
+
options.signal.throwIfAborted()
|
|
274
|
+
const latest = await options.agenda.read()
|
|
275
|
+
options.signal.throwIfAborted()
|
|
276
|
+
if (
|
|
277
|
+
!latest ||
|
|
278
|
+
latest.tenantId !== snapshot.tenantId ||
|
|
279
|
+
latest.agentKey !== snapshot.agentKey ||
|
|
280
|
+
latest.revision !== snapshot.revision
|
|
281
|
+
)
|
|
282
|
+
throw new ResidentConflictError()
|
|
283
|
+
}
|
|
284
|
+
const stage = async <T extends { usageComplete: boolean }>(
|
|
285
|
+
name: ResidentLearningStage,
|
|
286
|
+
callback: (context: ResidentLearningCycleContext) => Promise<T>,
|
|
287
|
+
): Promise<T> => {
|
|
288
|
+
await check()
|
|
289
|
+
await append('stage-started', {}, name)
|
|
290
|
+
await check()
|
|
291
|
+
unfinishedStages++
|
|
292
|
+
let open = true
|
|
293
|
+
let receiptFailure: unknown
|
|
294
|
+
const before = receipts.size
|
|
295
|
+
try {
|
|
296
|
+
const measured = usage()
|
|
297
|
+
const context: ResidentLearningCycleContext = Object.freeze({
|
|
298
|
+
cycleId,
|
|
299
|
+
stage: name,
|
|
300
|
+
signal: options.signal,
|
|
301
|
+
remainingUnits: Math.max(
|
|
302
|
+
0,
|
|
303
|
+
resources.maxUnits - (resources.unit === 'tokens' ? measured.tokens : measured.costUsd),
|
|
304
|
+
),
|
|
305
|
+
recordUsage: async (input: ResidentLearningReceipt) => {
|
|
306
|
+
try {
|
|
307
|
+
if (!open) throw new Error('A closed learning stage cannot record new usage.')
|
|
308
|
+
const receipt = Object.freeze(receiptSchema.parse(input))
|
|
309
|
+
const id = receipt.runId.toLowerCase()
|
|
310
|
+
if (receipts.has(id)) throw new Error('Duplicate learning execution receipt.')
|
|
311
|
+
if (receipts.size >= 1024) throw new Error('Learning cycle receipt bound exceeded.')
|
|
312
|
+
const totals = usage()
|
|
313
|
+
if (
|
|
314
|
+
!Number.isSafeInteger(totals.tokens + (receipt.tokens ?? 0)) ||
|
|
315
|
+
!Number.isFinite(totals.costUsd + (receipt.costUsd ?? 0))
|
|
316
|
+
)
|
|
317
|
+
throw new Error('Learning cycle consumption overflow.')
|
|
318
|
+
receipts.set(id, receipt)
|
|
319
|
+
await append('usage', { receipt }, name)
|
|
320
|
+
} catch (error) {
|
|
321
|
+
receiptFailure = error
|
|
322
|
+
throw error
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
})
|
|
326
|
+
const value = await callback(context)
|
|
327
|
+
open = false
|
|
328
|
+
await pending
|
|
329
|
+
if (receiptFailure) throw receiptFailure
|
|
330
|
+
options.signal.throwIfAborted()
|
|
331
|
+
if (value.usageComplete === true && receipts.size > before) unfinishedStages--
|
|
332
|
+
await append(
|
|
333
|
+
'stage-finished',
|
|
334
|
+
{
|
|
335
|
+
usageComplete: value.usageComplete === true && receipts.size > before,
|
|
336
|
+
consumption: usage(),
|
|
337
|
+
},
|
|
338
|
+
name,
|
|
339
|
+
)
|
|
340
|
+
return value
|
|
341
|
+
} finally {
|
|
342
|
+
open = false
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
let exploration: Readonly<ResidentLearningExploration> | undefined
|
|
346
|
+
if (options.explore) {
|
|
347
|
+
const explore = options.explore
|
|
348
|
+
const observed = await stage('explore', (context) =>
|
|
349
|
+
explore(Object.freeze({ ...context, skillName, ...purposeContext, failure, baseline })),
|
|
350
|
+
)
|
|
351
|
+
exploration = Object.freeze({
|
|
352
|
+
evidence: Object.freeze(
|
|
353
|
+
residentLearningEvidenceSchema.parse(observed.observations.evidence),
|
|
354
|
+
),
|
|
355
|
+
trace: z.string().trim().min(1).max(32_000).parse(observed.observations.trace),
|
|
356
|
+
})
|
|
357
|
+
await append(
|
|
358
|
+
'exploration',
|
|
359
|
+
{
|
|
360
|
+
observations: exploration,
|
|
361
|
+
digest: createHash('sha256').update(JSON.stringify(exploration)).digest('hex'),
|
|
362
|
+
},
|
|
363
|
+
'explore',
|
|
364
|
+
)
|
|
365
|
+
const problem = resourceProblem(true)
|
|
366
|
+
if (problem) return result('inconclusive', problem)
|
|
367
|
+
}
|
|
368
|
+
const generated = await stage('generate', (context) =>
|
|
369
|
+
options.generate(
|
|
370
|
+
Object.freeze({
|
|
371
|
+
...context,
|
|
372
|
+
skillName,
|
|
373
|
+
...purposeContext,
|
|
374
|
+
failure,
|
|
375
|
+
baseline,
|
|
376
|
+
...(exploration ? { exploration } : {}),
|
|
377
|
+
}),
|
|
378
|
+
),
|
|
379
|
+
)
|
|
380
|
+
candidateRevision = hashResidentSkill(generated.candidate)
|
|
381
|
+
candidate = normalizeResidentSkill(generated.candidate)
|
|
382
|
+
if ((candidate.purpose ?? 'task') !== purpose)
|
|
383
|
+
throw new Error('Generated skill purpose does not match the host-admitted learning purpose.')
|
|
384
|
+
if (candidate.name !== skillName)
|
|
385
|
+
throw new Error('Generated guidance must retain the requested skill name.')
|
|
386
|
+
await append('candidate', { candidate, candidateRevision, baselineRevision })
|
|
387
|
+
if (candidateRevision === baselineRevision)
|
|
388
|
+
return result('rejected', 'Generated guidance is identical to the active baseline.')
|
|
389
|
+
let problem = resourceProblem(true)
|
|
390
|
+
if (problem) return result('inconclusive', problem)
|
|
391
|
+
const evaluate = async (name: 'verification' | 'confirmation') => {
|
|
392
|
+
const measured = await stage(name, (context) =>
|
|
393
|
+
options.evaluate(
|
|
394
|
+
Object.freeze({
|
|
395
|
+
...context,
|
|
396
|
+
baseline,
|
|
397
|
+
candidate: candidate as ResidentSkillCandidate,
|
|
398
|
+
baselineRevision: baselineRevision as string,
|
|
399
|
+
candidateRevision: candidateRevision as string,
|
|
400
|
+
}),
|
|
401
|
+
),
|
|
402
|
+
)
|
|
403
|
+
const batch = structuredClone(measured.batch)
|
|
404
|
+
if (
|
|
405
|
+
batch.baselineRevision !== baselineRevision ||
|
|
406
|
+
batch.candidateRevision !== candidateRevision
|
|
407
|
+
)
|
|
408
|
+
throw new Error('Evaluation does not identify the admitted baseline and candidate.')
|
|
409
|
+
if (
|
|
410
|
+
batch.baseline.length > 128 ||
|
|
411
|
+
batch.candidate.length > 128 ||
|
|
412
|
+
batch.attributions.length > 128
|
|
413
|
+
)
|
|
414
|
+
throw new Error('A learning evaluation is bounded to 64 paired tasks.')
|
|
415
|
+
await append(
|
|
416
|
+
'evaluation',
|
|
417
|
+
{
|
|
418
|
+
baselineRevision,
|
|
419
|
+
candidateRevision,
|
|
420
|
+
digest: createHash('sha256').update(JSON.stringify(batch)).digest('hex'),
|
|
421
|
+
baselineTrajectories: batch.baseline.map((t) => t.trajectoryId),
|
|
422
|
+
candidateTrajectories: batch.candidate.map((t) => t.trajectoryId),
|
|
423
|
+
},
|
|
424
|
+
name,
|
|
425
|
+
)
|
|
426
|
+
return batch
|
|
427
|
+
}
|
|
428
|
+
const verification = await evaluate('verification')
|
|
429
|
+
review = reviewHarnessCandidate(verification, undefined, protection)
|
|
430
|
+
problem = resourceProblem(true)
|
|
431
|
+
if (problem) return result('inconclusive', problem)
|
|
432
|
+
if (review.decision === 'reject') return result('rejected', review.reason)
|
|
433
|
+
if (
|
|
434
|
+
review.protection?.verification.status !== 'passed' ||
|
|
435
|
+
review.verification.unresolved.length ||
|
|
436
|
+
review.verification.tasks.length < 5 ||
|
|
437
|
+
review.verification.tasks.some((t) => t.trials !== 2)
|
|
438
|
+
)
|
|
439
|
+
return result('inconclusive', review.reason)
|
|
440
|
+
const confirmation = await evaluate('confirmation')
|
|
441
|
+
review = reviewHarnessCandidate(verification, confirmation, protection)
|
|
442
|
+
problem = resourceProblem()
|
|
443
|
+
if (problem) return result('inconclusive', problem)
|
|
444
|
+
if (review.decision !== 'accept')
|
|
445
|
+
return result(review.decision === 'reject' ? 'rejected' : 'inconclusive', review.reason)
|
|
446
|
+
await check()
|
|
447
|
+
const evidence: ResidentLearningEvidence = {
|
|
448
|
+
key: cycleId,
|
|
449
|
+
source: `resident-learning-cycle:${cycleId}`,
|
|
450
|
+
reason: `Paired verification and fresh confirmation of guidance derived from evidence ${failure.evidence.key}.`,
|
|
451
|
+
}
|
|
452
|
+
// Validate all existing activation contracts before entering the ambiguous
|
|
453
|
+
// commit interval. The store repeats this against its atomic snapshot.
|
|
454
|
+
promoteResidentSkill(
|
|
455
|
+
snapshot.learning,
|
|
456
|
+
candidate,
|
|
457
|
+
{ verification, confirmation, protection },
|
|
458
|
+
evidence,
|
|
459
|
+
)
|
|
460
|
+
await append('activation-requested', {
|
|
461
|
+
baselineRevision,
|
|
462
|
+
candidateRevision,
|
|
463
|
+
agendaRevision: snapshot.revision,
|
|
464
|
+
})
|
|
465
|
+
options.signal.throwIfAborted()
|
|
466
|
+
activationRequested = true
|
|
467
|
+
const updated = await options.agenda.promoteSkill(
|
|
468
|
+
snapshot,
|
|
469
|
+
candidate,
|
|
470
|
+
{ verification, confirmation, protection },
|
|
471
|
+
evidence,
|
|
472
|
+
)
|
|
473
|
+
activatedRevision = updated.revision
|
|
474
|
+
return result('activated', 'Evaluated guidance was committed for subsequent admissions.')
|
|
475
|
+
}
|
|
476
|
+
let outcome: ResidentLearningCycleResult
|
|
477
|
+
try {
|
|
478
|
+
outcome = await execute()
|
|
479
|
+
} catch (error) {
|
|
480
|
+
outcome = result(
|
|
481
|
+
error instanceof ResidentConflictError
|
|
482
|
+
? 'conflict'
|
|
483
|
+
: activationRequested
|
|
484
|
+
? 'activation-unknown'
|
|
485
|
+
: options.signal.aborted
|
|
486
|
+
? 'cancelled'
|
|
487
|
+
: 'failed',
|
|
488
|
+
error instanceof Error ? error.message : String(error),
|
|
489
|
+
)
|
|
490
|
+
}
|
|
491
|
+
if (auditComplete) {
|
|
492
|
+
try {
|
|
493
|
+
await append('finished', { result: outcome })
|
|
494
|
+
} catch {
|
|
495
|
+
/* A committed activation is not undone by a journal failure. */
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return { ...outcome, auditComplete }
|
|
499
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { residentLearningEvidenceSchema } from './learning.js'
|
|
3
|
+
|
|
4
|
+
const label = z.string().trim().min(1).max(256)
|
|
5
|
+
export const learningTargetSchema = z.object({
|
|
6
|
+
skillName: z.string().regex(/^[a-z0-9][a-z0-9_-]{0,63}$/),
|
|
7
|
+
evaluatorRevision: label,
|
|
8
|
+
baselineRevision: z.union([z.literal('none'), z.string().regex(/^[a-f0-9]{64}$/)]),
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export const learningObservationSchema = learningTargetSchema.extend({
|
|
12
|
+
runId: z
|
|
13
|
+
.string()
|
|
14
|
+
.uuid()
|
|
15
|
+
.transform((id) => id.toLowerCase()),
|
|
16
|
+
/** Stable task identity, including input/source revision; retries keep the same key. */
|
|
17
|
+
taskKey: label,
|
|
18
|
+
outcome: z.enum(['passed', 'failed', 'execution-error', 'unresolved']),
|
|
19
|
+
/** Host verified all execution receipts have settled. This is not a model assertion. */
|
|
20
|
+
usageComplete: z.boolean(),
|
|
21
|
+
evidence: residentLearningEvidenceSchema,
|
|
22
|
+
trace: z.string().trim().min(1).max(32_000),
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
/** @experimental Host-scored observation; failures need retained traces and a versioned evaluator. */
|
|
26
|
+
export type ResidentLearningObservation = Readonly<
|
|
27
|
+
Omit<z.infer<typeof learningObservationSchema>, 'evidence'>
|
|
28
|
+
> & {
|
|
29
|
+
readonly evidence: Readonly<z.infer<typeof learningObservationSchema>['evidence']>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** @experimental Current evaluator and installed skill revision authorized for one experiment. */
|
|
33
|
+
export type ResidentLearningTarget = Readonly<z.infer<typeof learningTargetSchema>>
|
|
34
|
+
|
|
35
|
+
/** @experimental Stable insertion order; a claimed cycle may have no live executor. */
|
|
36
|
+
export interface ResidentLearningObservationRecord extends ResidentLearningObservation {
|
|
37
|
+
readonly ordinal: number
|
|
38
|
+
readonly attemptedCycleId: string | null
|
|
39
|
+
}
|