@namzu/sdk 38.2.1 → 39.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 +700 -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/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.map +1 -1
- package/dist/manager/run/persistence.js +6 -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 +13 -3
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +12 -3
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +2 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +2 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +15 -3
- package/dist/public-types.d.ts.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/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 +7 -1
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +38 -7
- 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 +64 -0
- package/dist/runtime/query/file-evidence-context.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 +39 -24
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +9 -31
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +231 -93
- 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 +2 -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 +3 -0
- 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/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/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 +3 -1
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +4 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/scheduler/completion-inbox.d.ts +3 -0
- package/dist/scheduler/completion-inbox.d.ts.map +1 -1
- package/dist/scheduler/completion-inbox.js +28 -0
- 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/job.d.ts.map +1 -1
- package/dist/tools/builtins/job.js +4 -5
- package/dist/tools/builtins/job.js.map +1 -1
- package/dist/tools/builtins/write-file.js +2 -2
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/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 +12 -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 +8 -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 +7 -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/tool/index.d.ts +15 -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/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/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 +6 -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 +30 -0
- package/src/public-tools.ts +3 -0
- package/src/public-types.ts +98 -0
- 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/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 +51 -9
- package/src/runtime/query/file-evidence-context.ts +65 -0
- package/src/runtime/query/guard.ts +2 -0
- package/src/runtime/query/index.ts +49 -25
- package/src/runtime/query/iteration/index.ts +269 -86
- package/src/runtime/query/iteration/phases/advisory.ts +3 -0
- package/src/runtime/query/iteration/phases/context.ts +2 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +3 -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/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/tool-output-budget.ts +65 -13
- package/src/runtime/query/tooling.ts +7 -1
- package/src/scheduler/completion-inbox.ts +26 -0
- 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/job.ts +4 -5
- package/src/tools/builtins/write-file.ts +2 -2
- package/src/tools/defineTool.ts +4 -2
- package/src/tools/file-read-tracker.ts +8 -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 +20 -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 +7 -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/tool/index.ts +19 -1
- package/src/utils/await-with-abort.ts +26 -0
- package/src/utils/evidence-time.ts +9 -0
- package/src/utils/evidence-tokens.ts +32 -0
|
@@ -47,11 +47,10 @@ export const JobTool = defineTool({
|
|
|
47
47
|
inputSchema,
|
|
48
48
|
category: 'shell',
|
|
49
49
|
permissions: ['shell_execute'],
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
destructive: (input: JobInput) => input.action === 'kill',
|
|
50
|
+
// The static permission describes the full capability. The prepared action
|
|
51
|
+
// determines whether this call only observes its owner-bound registry.
|
|
52
|
+
readOnly: (input: JobInput) => input?.action === 'read' || input?.action === 'list',
|
|
53
|
+
destructive: (input: JobInput) => input?.action === 'kill',
|
|
55
54
|
concurrencySafe: true,
|
|
56
55
|
|
|
57
56
|
presentCall(input) {
|
|
@@ -150,7 +150,7 @@ export const WriteFileTool = defineTool({
|
|
|
150
150
|
// This write is now the runtime's newest observation. Recording only
|
|
151
151
|
// the boolean would leave an older content fingerprint in place and
|
|
152
152
|
// make the next same-run write refuse its own predecessor as drift.
|
|
153
|
-
context.fileReadTracker?.recordRead(valid.path, content)
|
|
153
|
+
context.fileReadTracker?.recordRead(valid.path, content, context.toolUseId)
|
|
154
154
|
return fileWriteResult(
|
|
155
155
|
valid.path,
|
|
156
156
|
current === null ? null : current?.toString('utf-8'),
|
|
@@ -171,7 +171,7 @@ export const WriteFileTool = defineTool({
|
|
|
171
171
|
// leaves the destination truncated — and this tool overwrites a
|
|
172
172
|
// whole file, so the truncation is the user's previous work.
|
|
173
173
|
await atomicWriteFile(hostPath, content)
|
|
174
|
-
context.fileReadTracker?.recordRead(hostPath, content)
|
|
174
|
+
context.fileReadTracker?.recordRead(hostPath, content, context.toolUseId)
|
|
175
175
|
|
|
176
176
|
return fileWriteResult(hostPath, current, content)
|
|
177
177
|
})
|
package/src/tools/defineTool.ts
CHANGED
|
@@ -17,7 +17,8 @@ export interface DefineToolOptions<S extends z.ZodType> {
|
|
|
17
17
|
validationErrorHint?: string
|
|
18
18
|
category: ToolDefinition['category']
|
|
19
19
|
permissions: ToolPermission[]
|
|
20
|
-
|
|
20
|
+
/** Whether this exact call only observes state; conservative for unknown inputs. */
|
|
21
|
+
readOnly: boolean | ((input: z.infer<S>) => boolean)
|
|
21
22
|
destructive: boolean | ((input: z.infer<S>) => boolean)
|
|
22
23
|
concurrencySafe: boolean
|
|
23
24
|
/** Batch ordering boundary; see {@link ToolDefinition.executionBarrier}. */
|
|
@@ -88,7 +89,8 @@ export function defineTool<S extends z.ZodType>(
|
|
|
88
89
|
: {}),
|
|
89
90
|
category: options.category,
|
|
90
91
|
permissions: options.permissions,
|
|
91
|
-
isReadOnly:
|
|
92
|
+
isReadOnly:
|
|
93
|
+
typeof options.readOnly === 'function' ? options.readOnly : () => options.readOnly as boolean,
|
|
92
94
|
isDestructive:
|
|
93
95
|
typeof options.destructive === 'function'
|
|
94
96
|
? options.destructive
|
|
@@ -5,12 +5,18 @@ import { fingerprintContent } from './builtins/content-fingerprint.js'
|
|
|
5
5
|
export function createFileReadTracker(): FileReadTracker {
|
|
6
6
|
const paths = new Set<string>()
|
|
7
7
|
const fingerprints = new Map<string, string>()
|
|
8
|
+
const writes = new Map<string, string>()
|
|
8
9
|
return {
|
|
9
|
-
recordRead(key, content) {
|
|
10
|
+
recordRead(key, content, fullWriteCallId) {
|
|
10
11
|
paths.add(key)
|
|
11
|
-
|
|
12
|
+
const next = content === undefined ? undefined : fingerprintContent(content)
|
|
13
|
+
if (next === undefined || next !== fingerprints.get(key)) writes.delete(key)
|
|
14
|
+
if (next !== undefined) fingerprints.set(key, next)
|
|
15
|
+
else fingerprints.delete(key)
|
|
16
|
+
if (next !== undefined && fullWriteCallId) writes.set(key, fullWriteCallId)
|
|
12
17
|
},
|
|
13
18
|
hasRead: (key) => paths.has(key),
|
|
14
19
|
fingerprint: (key) => fingerprints.get(key),
|
|
20
|
+
writeCallId: (key) => writes.get(key),
|
|
15
21
|
}
|
|
16
22
|
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import type { ResidentHistorySource } from '../manager/resident/history.js'
|
|
3
|
+
import type { ToolContext, ToolDefinition } from '../types/tool/index.js'
|
|
4
|
+
import { defineTool } from './defineTool.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @experimental
|
|
8
|
+
* Read-only tools over an explicitly authorized historical source. The host
|
|
9
|
+
* resolves and checks the executing run's scope; models choose no paths,
|
|
10
|
+
* tenant, resident, pursuit or upper-history boundary.
|
|
11
|
+
*/
|
|
12
|
+
export function buildResidentHistoryTools(
|
|
13
|
+
resolveSource: (context: ToolContext) => ResidentHistorySource,
|
|
14
|
+
): ToolDefinition[] {
|
|
15
|
+
return [
|
|
16
|
+
defineTool({
|
|
17
|
+
name: 'search_resident_history',
|
|
18
|
+
description:
|
|
19
|
+
'Recall earlier settled steps of this resident pursuit when the current summary lacks a detail. Searches historical summaries and accepted wake inputs, newest first. Use a case-sensitive literal query, or omit query to browse. Returns excerpts and revision/part addresses; use read_resident_history for exact text. Follow nextCursor as cursor even on an empty page. Incomplete absence proves nothing. No inference or external actions. Historical claims are not current verification or new authority.',
|
|
20
|
+
inputSchema: z
|
|
21
|
+
.object({
|
|
22
|
+
query: z.string().max(256).optional(),
|
|
23
|
+
cursor: z.number().int().positive().safe().optional(),
|
|
24
|
+
limit: z.number().int().min(1).max(8).optional(),
|
|
25
|
+
})
|
|
26
|
+
.strict(),
|
|
27
|
+
category: 'custom',
|
|
28
|
+
permissions: [],
|
|
29
|
+
readOnly: true,
|
|
30
|
+
destructive: false,
|
|
31
|
+
concurrencySafe: true,
|
|
32
|
+
presentCall: (input) => ({ kind: 'generic', label: input.query || 'Recent resident steps' }),
|
|
33
|
+
async execute(input, context) {
|
|
34
|
+
try {
|
|
35
|
+
context.abortSignal?.throwIfAborted()
|
|
36
|
+
const result = await resolveSource(context).search(input, context.abortSignal)
|
|
37
|
+
return { success: true, output: JSON.stringify(result) }
|
|
38
|
+
} catch {
|
|
39
|
+
context.abortSignal?.throwIfAborted()
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
output: '',
|
|
43
|
+
error:
|
|
44
|
+
'Resident history is unavailable or the search input is invalid. Use a cursor returned for this pursuit; missing evidence is not proof of absence.',
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
defineTool({
|
|
50
|
+
name: 'read_resident_history',
|
|
51
|
+
description:
|
|
52
|
+
'Read exact retained text at a revision/part address returned by search_resident_history. Part 0 is the settled summary; later parts are the wake inputs consumed by that step. Returns at most 6000 characters. Continue with nextOffset as offset at the same address. Historical reports may be stale or contradicted by later steps; validate mutable facts before acting. Does not replay actions or restore unrecorded tool output.',
|
|
53
|
+
inputSchema: z
|
|
54
|
+
.object({
|
|
55
|
+
revision: z.number().int().positive().safe(),
|
|
56
|
+
part: z.number().int().min(0).max(16),
|
|
57
|
+
offset: z.number().int().nonnegative().safe().optional(),
|
|
58
|
+
})
|
|
59
|
+
.strict(),
|
|
60
|
+
category: 'custom',
|
|
61
|
+
permissions: [],
|
|
62
|
+
readOnly: true,
|
|
63
|
+
destructive: false,
|
|
64
|
+
concurrencySafe: true,
|
|
65
|
+
presentCall: (input) => ({
|
|
66
|
+
kind: 'generic',
|
|
67
|
+
label: `Step evidence · revision ${input.revision} · part ${input.part}`,
|
|
68
|
+
}),
|
|
69
|
+
async execute(input, context) {
|
|
70
|
+
try {
|
|
71
|
+
context.abortSignal?.throwIfAborted()
|
|
72
|
+
const result = await resolveSource(context).read(input, context.abortSignal)
|
|
73
|
+
return { success: true, output: JSON.stringify(result) }
|
|
74
|
+
} catch {
|
|
75
|
+
context.abortSignal?.throwIfAborted()
|
|
76
|
+
return {
|
|
77
|
+
success: false,
|
|
78
|
+
output: '',
|
|
79
|
+
error:
|
|
80
|
+
'Resident evidence is unavailable or the address is invalid. Use revision/part from search_resident_history and the returned nextOffset.',
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
}),
|
|
85
|
+
]
|
|
86
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import type { ResidentToolEvidenceSource } from '../manager/resident/tool-evidence.js'
|
|
3
|
+
import type { ToolContext, ToolDefinition } from '../types/tool/index.js'
|
|
4
|
+
import { defineTool } from './defineTool.js'
|
|
5
|
+
|
|
6
|
+
/** @experimental The host must authorize each executing run before returning its bound source. */
|
|
7
|
+
export function buildResidentToolEvidenceTools(
|
|
8
|
+
resolveSource: (context: ToolContext) => ResidentToolEvidenceSource,
|
|
9
|
+
): ToolDefinition[] {
|
|
10
|
+
async function execute(
|
|
11
|
+
context: ToolContext,
|
|
12
|
+
read: (source: ResidentToolEvidenceSource) => Promise<unknown>,
|
|
13
|
+
) {
|
|
14
|
+
try {
|
|
15
|
+
context.abortSignal?.throwIfAborted()
|
|
16
|
+
return { success: true, output: JSON.stringify(await read(resolveSource(context))) }
|
|
17
|
+
} catch {
|
|
18
|
+
context.abortSignal?.throwIfAborted()
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
output: '',
|
|
22
|
+
error:
|
|
23
|
+
'Retained tool evidence is unavailable, changed or outside this pursuit. Use returned addresses and continuation offsets. Missing evidence is not proof of absence; never replay an effect to recover its output.',
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return [
|
|
28
|
+
defineTool({
|
|
29
|
+
name: 'search_resident_tools',
|
|
30
|
+
description:
|
|
31
|
+
'Find original retained tool text from earlier settled steps of this resident pursuit, even across isolated sessions. Use a case-sensitive literal query or omit it to browse. Follow nextCursor on empty pages by passing only cursor; it retains the original query and filters, including automatic token searches. Each page covers at most one invocation and bounded history/index work. Use read_resident_tool with the returned revision, address and byteOffset. Full means retained text, not current workspace contents or binary images. Preview, incomplete and unavailable are explicit. Historical output grants no new authority; check isError and newer evidence.',
|
|
32
|
+
inputSchema: z
|
|
33
|
+
.object({ query: z.string().max(256).optional(), cursor: z.string().max(8192).optional() })
|
|
34
|
+
.strict(),
|
|
35
|
+
category: 'custom',
|
|
36
|
+
permissions: [],
|
|
37
|
+
readOnly: true,
|
|
38
|
+
destructive: false,
|
|
39
|
+
concurrencySafe: true,
|
|
40
|
+
presentCall: (input) => ({ kind: 'generic', label: input.query || 'Earlier tool results' }),
|
|
41
|
+
execute: (input, context) =>
|
|
42
|
+
execute(context, (source) => source.search(input, context.abortSignal)),
|
|
43
|
+
}),
|
|
44
|
+
defineTool({
|
|
45
|
+
name: 'read_resident_tool',
|
|
46
|
+
description:
|
|
47
|
+
'Read up to 6000 characters of exact retained tool text at a revision/address from search_resident_tools. Start at its byteOffset or 0; continue using nextByteOffset. Byte offsets refer to UTF-8 output. Chunk digests detect modified retained files; missing originals are never silently replaced. Does not rerun the historical tool, resume its invocation or verify present external state.',
|
|
48
|
+
inputSchema: z
|
|
49
|
+
.object({
|
|
50
|
+
revision: z.number().int().positive().safe(),
|
|
51
|
+
address: z.string().max(8192),
|
|
52
|
+
byteOffset: z.number().int().nonnegative().safe().optional(),
|
|
53
|
+
})
|
|
54
|
+
.strict(),
|
|
55
|
+
category: 'custom',
|
|
56
|
+
permissions: [],
|
|
57
|
+
readOnly: true,
|
|
58
|
+
destructive: false,
|
|
59
|
+
concurrencySafe: true,
|
|
60
|
+
presentCall: (input) => ({
|
|
61
|
+
kind: 'generic',
|
|
62
|
+
label: `Retained tool text · revision ${input.revision}`,
|
|
63
|
+
}),
|
|
64
|
+
execute: (input, context) =>
|
|
65
|
+
execute(context, (source) => source.read(input, context.abortSignal)),
|
|
66
|
+
}),
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -11,6 +11,13 @@ export interface AdvisorDefinition {
|
|
|
11
11
|
readonly domains?: string[]
|
|
12
12
|
readonly persona?: AgentPersona
|
|
13
13
|
readonly systemPrompt?: string
|
|
14
|
+
/**
|
|
15
|
+
* Conversation-record window, estimated at four serialized characters per
|
|
16
|
+
* token. Keeps a contiguous suffix of whole public records; roles, tool
|
|
17
|
+
* calls/results, escaping and separators count toward this window.
|
|
18
|
+
* Fixed framing, working state, tool catalogue, system prompt and question
|
|
19
|
+
* are separate. Omitted or zero leaves the record window unbounded.
|
|
20
|
+
*/
|
|
14
21
|
readonly maxContextTokens?: number
|
|
15
22
|
readonly useCompactedContext?: boolean
|
|
16
23
|
readonly maxResponseTokens?: number
|
|
@@ -106,6 +106,7 @@ export interface ReactiveAgentConfig extends BaseAgentConfig {
|
|
|
106
106
|
toolRetryBackoff?: QueryParams['toolRetryBackoff']
|
|
107
107
|
maxToolConcurrency?: number
|
|
108
108
|
maxToolOutputChars?: number
|
|
109
|
+
retainedToolPreviewChars?: QueryParams['retainedToolPreviewChars']
|
|
109
110
|
/**
|
|
110
111
|
* Cap on the RICH channel of a single tool result, in base64 characters.
|
|
111
112
|
* `0` or absent disables it. Separate from {@link maxToolOutputChars}:
|
|
@@ -50,7 +50,7 @@ export type AuthorizationRule =
|
|
|
50
50
|
type: 'custom_pattern'
|
|
51
51
|
pattern: string
|
|
52
52
|
target: 'name' | 'args' | 'both'
|
|
53
|
-
decision: 'allow' | 'deny'
|
|
53
|
+
decision: 'allow' | 'deny' | 'review'
|
|
54
54
|
}
|
|
55
55
|
| {
|
|
56
56
|
/**
|
|
@@ -112,7 +112,7 @@ const CustomPatternSchema = z.object({
|
|
|
112
112
|
type: z.literal('custom_pattern'),
|
|
113
113
|
pattern: z.string().max(MAX_CUSTOM_PATTERN_LENGTH),
|
|
114
114
|
target: z.enum(['name', 'args', 'both']),
|
|
115
|
-
decision: z.enum(['allow', 'deny']),
|
|
115
|
+
decision: z.enum(['allow', 'deny', 'review']),
|
|
116
116
|
})
|
|
117
117
|
const ArgumentPatternSchema = z.object({
|
|
118
118
|
type: z.literal('argument_pattern'),
|
package/src/types/hitl/index.ts
CHANGED
|
@@ -82,6 +82,8 @@ export interface ToolCallSummary {
|
|
|
82
82
|
authorization?: {
|
|
83
83
|
decision: 'allow' | 'deny' | 'review'
|
|
84
84
|
reason?: string
|
|
85
|
+
/** A matching rule requested review; read-only exemptions must not bypass it. */
|
|
86
|
+
explicitReview?: true
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
|
|
@@ -220,6 +222,8 @@ export interface IterationCheckpoint {
|
|
|
220
222
|
latestUserMessage?: UserMessage
|
|
221
223
|
/** Structured host-review rejections consumed at this checkpoint, independent of compacted messages. */
|
|
222
224
|
structuredReviewAttempts?: number
|
|
225
|
+
/** Consumed prose-answer rejections, independent of compactable feedback messages. */
|
|
226
|
+
answerReviewAttempts?: number
|
|
223
227
|
/** Native structured-output corrections consumed independently of message history. */
|
|
224
228
|
nativeStructuredAttempts?: number
|
|
225
229
|
tokenUsage: TokenUsage
|
|
@@ -195,6 +195,8 @@ export interface BaseMessage {
|
|
|
195
195
|
export interface SystemMessage extends BaseMessage {
|
|
196
196
|
role: 'system'
|
|
197
197
|
content: string
|
|
198
|
+
/** Host provenance for a derived summary, independent of its textual heading. */
|
|
199
|
+
source?: { readonly type: 'compaction-summary' }
|
|
198
200
|
}
|
|
199
201
|
|
|
200
202
|
export interface UserMessage extends BaseMessage {
|
|
@@ -246,6 +248,7 @@ export const RUNTIME_CONTEXT_MESSAGE_KINDS = [
|
|
|
246
248
|
'auto-continuation',
|
|
247
249
|
'limit-finalization',
|
|
248
250
|
'steering',
|
|
251
|
+
'step-context',
|
|
249
252
|
'structured-output',
|
|
250
253
|
'task-completion',
|
|
251
254
|
] as const
|
|
@@ -374,9 +377,24 @@ export interface ReasoningBlock {
|
|
|
374
377
|
readonly encrypted?: string
|
|
375
378
|
}
|
|
376
379
|
|
|
380
|
+
/** Ordered public assistant text items; these are not private reasoning blocks. */
|
|
381
|
+
export interface AssistantTextPart {
|
|
382
|
+
readonly id: string
|
|
383
|
+
readonly text: string
|
|
384
|
+
readonly phase?: 'commentary' | 'final_answer'
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/** Select explicit final answers, retaining unphased behavior when none is identified. */
|
|
388
|
+
export function selectAssistantText(parts: readonly AssistantTextPart[]): string {
|
|
389
|
+
const final = parts.filter((part) => part.phase === 'final_answer')
|
|
390
|
+
return (final.length ? final : parts).map((part) => part.text).join('\n\n')
|
|
391
|
+
}
|
|
392
|
+
|
|
377
393
|
export interface AssistantMessage extends BaseMessage {
|
|
378
394
|
role: 'assistant'
|
|
379
395
|
content: string | null
|
|
396
|
+
/** Original ordered text items, including commentary excluded from the selected answer. */
|
|
397
|
+
textParts?: readonly AssistantTextPart[]
|
|
380
398
|
toolCalls?: ToolCall[]
|
|
381
399
|
/** Which configured model route produced this turn. */
|
|
382
400
|
source?: AssistantMessageSource
|
|
@@ -501,6 +519,7 @@ export function createAssistantMessage(
|
|
|
501
519
|
reasoning?: readonly ReasoningBlock[],
|
|
502
520
|
citations?: readonly Citation[],
|
|
503
521
|
source?: AssistantMessageSource,
|
|
522
|
+
textParts?: readonly AssistantTextPart[],
|
|
504
523
|
): AssistantMessage {
|
|
505
524
|
return {
|
|
506
525
|
role: 'assistant',
|
|
@@ -509,6 +528,7 @@ export function createAssistantMessage(
|
|
|
509
528
|
...(reasoning && reasoning.length > 0 ? { reasoning } : {}),
|
|
510
529
|
...(citations && citations.length > 0 ? { citations } : {}),
|
|
511
530
|
...(source ? { source } : {}),
|
|
531
|
+
...(textParts ? { textParts } : {}),
|
|
512
532
|
timestamp: Date.now(),
|
|
513
533
|
}
|
|
514
534
|
}
|
|
@@ -182,6 +182,8 @@ export interface ChatCompletionResponse {
|
|
|
182
182
|
message: {
|
|
183
183
|
role: 'assistant'
|
|
184
184
|
content: string | null
|
|
185
|
+
/** Ordered public text items; content selects explicit final answers when present. */
|
|
186
|
+
textParts?: readonly import('../message/index.js').AssistantTextPart[]
|
|
185
187
|
toolCalls?: ToolCall[]
|
|
186
188
|
/** Reasoning blocks the model emitted, in original block order. */
|
|
187
189
|
reasoning?: readonly ReasoningBlock[]
|
|
@@ -8,6 +8,8 @@ export interface StreamChunk {
|
|
|
8
8
|
* retain the last defined value and the query stores it in message source.
|
|
9
9
|
*/
|
|
10
10
|
replayState?: unknown
|
|
11
|
+
/** Complete ordered text snapshot, emitted at settlement; replaces accumulated text items. */
|
|
12
|
+
textParts?: readonly import('../message/index.js').AssistantTextPart[]
|
|
11
13
|
delta: {
|
|
12
14
|
/** Activity executed by the provider, never a local function-call request. */
|
|
13
15
|
hostedTool?: {
|
|
@@ -17,6 +19,8 @@ export interface StreamChunk {
|
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
content?: string
|
|
22
|
+
/** Identity and phase of this content fragment, when the provider supplies them. */
|
|
23
|
+
textPart?: Omit<import('../message/index.js').AssistantTextPart, 'text'>
|
|
20
24
|
toolCalls?: Array<{
|
|
21
25
|
index: number
|
|
22
26
|
id?: string
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { RunId } from '../ids/index.js'
|
|
2
|
-
import type { Message } from '../message/index.js'
|
|
2
|
+
import type { Message, UserMessage } from '../message/index.js'
|
|
3
|
+
import type { PreparationTextRequest, PreparationTextResult } from './prepare-step.js'
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* A host's verdict on the answer a run is about to settle with.
|
|
@@ -15,7 +16,7 @@ export type AnswerReview =
|
|
|
15
16
|
| {
|
|
16
17
|
readonly accept: false
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
+
* Feedback supplied as runtime context on the next model request.
|
|
19
20
|
*
|
|
20
21
|
* Prose rather than a code, because the model is the audience
|
|
21
22
|
* and a code would have to be explained to it anyway. Say what
|
|
@@ -31,8 +32,36 @@ export interface AnswerReviewContext {
|
|
|
31
32
|
readonly iteration: number
|
|
32
33
|
/** Run cancellation; reviewers should forward it to verification operations. */
|
|
33
34
|
readonly signal?: AbortSignal
|
|
34
|
-
/**
|
|
35
|
+
/** Canonical history currently retained by the run; compaction may remove messages. */
|
|
35
36
|
readonly messages: readonly Message[]
|
|
37
|
+
/**
|
|
38
|
+
* Isolated copy of the SDK messages dispatched for this candidate's model
|
|
39
|
+
* request, after context projection and any image-recovery retry. Includes
|
|
40
|
+
* request-only evidence absent from durable history; excludes this candidate
|
|
41
|
+
* and subsequently delivered messages/results. This is the provider-chain
|
|
42
|
+
* input, not a vendor-wire capture or proof of truth/freshness. Optional for
|
|
43
|
+
* hosts constructing their own review context. Not checkpointed or retained
|
|
44
|
+
* as conversation history; modifying the copy cannot edit the run/request.
|
|
45
|
+
*/
|
|
46
|
+
readonly requestMessages?: readonly Message[]
|
|
47
|
+
/**
|
|
48
|
+
* Isolated copy of the latest operator, goal-round or steering input accepted
|
|
49
|
+
* before this candidate's dispatch. Retained even when compaction removes
|
|
50
|
+
* that input from history. Excludes arrivals delivered after dispatch and
|
|
51
|
+
* runtime reports. This is one input, not the complete task specification
|
|
52
|
+
* or a guarantee that the original message was sent verbatim to the model.
|
|
53
|
+
*/
|
|
54
|
+
readonly latestUserMessage?: UserMessage
|
|
55
|
+
/**
|
|
56
|
+
* Optional run-owned, tool-free inference: at most one call per review
|
|
57
|
+
* invocation, revoked when the callback ends. Uses the same bounded text
|
|
58
|
+
* request/result shapes as prepareStep and the run's metered provider chain,
|
|
59
|
+
* selected step model and effort. No history, candidate or tools are attached
|
|
60
|
+
* implicitly. Await its result before returning a verdict; generated text
|
|
61
|
+
* is a model judgment, not authenticated evidence. Missing in custom hosts
|
|
62
|
+
* which do not supply this capability.
|
|
63
|
+
*/
|
|
64
|
+
readonly generateText?: (request: PreparationTextRequest) => Promise<PreparationTextResult>
|
|
36
65
|
}
|
|
37
66
|
|
|
38
67
|
/**
|
|
@@ -43,6 +72,8 @@ export interface AnswerReviewContext {
|
|
|
43
72
|
* a closing summary under pressure, and rejecting it would spend budget
|
|
44
73
|
* the run has already run out of.
|
|
45
74
|
*
|
|
75
|
+
* Exceptions and malformed verdicts fail the run. Cancellation stops waiting;
|
|
76
|
+
* work started by a reviewer must still honor the supplied signal.
|
|
46
77
|
* Bounded: see the run's answer-review limit. A reviewer that never
|
|
47
78
|
* accepts stops the run with a stop reason that names it, rather than
|
|
48
79
|
* looping until the token budget ends the run for an unrelated reason.
|
package/src/types/run/config.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type { CheckpointStore } from './checkpoint-store.js'
|
|
|
8
8
|
|
|
9
9
|
export interface AgentRunConfig {
|
|
10
10
|
model: string
|
|
11
|
+
/** Total run duration in milliseconds; 0 disables the run deadline. */
|
|
11
12
|
timeoutMs: number
|
|
12
13
|
/**
|
|
13
14
|
* Maximum silence between provider stream chunks, in milliseconds.
|
|
@@ -67,8 +68,10 @@ export interface AgentRunConfig {
|
|
|
67
68
|
effort?: import('../provider/index.js').ReasoningEffort
|
|
68
69
|
/** Provider-hosted search for this run. Explicit opt-in; no local network permission. */
|
|
69
70
|
webSearch?: import('../provider/index.js').ChatCompletionParams['webSearch']
|
|
71
|
+
/** Cumulative parent-and-descendant tokens; 0 is unlimited with usage accounting. */
|
|
70
72
|
tokenBudget: number
|
|
71
73
|
costLimitUsd?: number
|
|
74
|
+
/** Main-loop iterations; 0 disables this guard. Omitted defaults depend on the entry point. */
|
|
72
75
|
maxIterations?: number
|
|
73
76
|
temperature?: number
|
|
74
77
|
env?: Record<string, string>
|
package/src/types/run/entity.ts
CHANGED
|
@@ -10,6 +10,13 @@ import type { StopReason } from './stop-reason.js'
|
|
|
10
10
|
import type { TokenBudgetBinding } from './token-budget-store.js'
|
|
11
11
|
|
|
12
12
|
export interface RunStateMetadata {
|
|
13
|
+
/** This invocation's owner, independent of a shared ancestor token account. */
|
|
14
|
+
readonly scope?: {
|
|
15
|
+
readonly tenantId: string
|
|
16
|
+
readonly projectId: string
|
|
17
|
+
readonly sessionId: string
|
|
18
|
+
readonly runId: string
|
|
19
|
+
}
|
|
13
20
|
agentId: string
|
|
14
21
|
agentName: string
|
|
15
22
|
config: AgentRunConfig
|
package/src/types/run/events.ts
CHANGED
|
@@ -209,8 +209,8 @@ type CoreRunEvent =
|
|
|
209
209
|
iteration: number
|
|
210
210
|
/** Exactly the messages the pass removed, in their original order. */
|
|
211
211
|
messages: Message[]
|
|
212
|
-
/**
|
|
213
|
-
reason: 'threshold' | 'overflow'
|
|
212
|
+
/** Automatic threshold, provider rejection, or a host-requested pass. */
|
|
213
|
+
reason: 'threshold' | 'overflow' | 'manual'
|
|
214
214
|
}
|
|
215
215
|
| {
|
|
216
216
|
type: 'compaction_completed'
|
|
@@ -464,6 +464,8 @@ type CoreRunEvent =
|
|
|
464
464
|
outputTruncated?: boolean
|
|
465
465
|
/** Where the full output was written, when it was spilled. */
|
|
466
466
|
outputSpillPath?: string
|
|
467
|
+
/** SHA-256 of the chunk manifest captured with the retained text. */
|
|
468
|
+
outputSpillIntegrity?: string
|
|
467
469
|
}
|
|
468
470
|
/**
|
|
469
471
|
* A tool asked the user a question and the run is parked on it.
|
|
@@ -947,6 +949,7 @@ type CoreRunEvent =
|
|
|
947
949
|
iteration: number
|
|
948
950
|
messageId: MessageId
|
|
949
951
|
text: string
|
|
952
|
+
textPart?: Omit<import('../message/index.js').AssistantTextPart, 'text'>
|
|
950
953
|
}
|
|
951
954
|
| {
|
|
952
955
|
type: 'message_completed'
|
|
@@ -956,14 +959,16 @@ type CoreRunEvent =
|
|
|
956
959
|
stopReason: MessageStopReason
|
|
957
960
|
usage?: TokenUsage
|
|
958
961
|
/**
|
|
959
|
-
*
|
|
960
|
-
*
|
|
961
|
-
*
|
|
962
|
-
*
|
|
963
|
-
*
|
|
964
|
-
*
|
|
962
|
+
* Settled assistant text. When the provider supplies public text
|
|
963
|
+
* phases, this selects explicit final-answer items; concatenating
|
|
964
|
+
* raw deltas would also include intermediate commentary. All items
|
|
965
|
+
* remain available in textParts. Without phases, ordinary delta
|
|
966
|
+
* concatenation is unchanged. Stop reason still determines whether
|
|
967
|
+
* this message finished, was cancelled or hit an output limit.
|
|
965
968
|
*/
|
|
966
969
|
content?: string
|
|
970
|
+
/** Ordered original items; content selects explicit final answers if supplied. */
|
|
971
|
+
textParts?: readonly import('../message/index.js').AssistantTextPart[]
|
|
967
972
|
}
|
|
968
973
|
| {
|
|
969
974
|
type: 'tool_input_started'
|
|
@@ -1032,6 +1037,24 @@ export type PersistedRunEvent = RunEvent & {
|
|
|
1032
1037
|
readonly seq: number
|
|
1033
1038
|
/** Epoch ms at which the store recorded the event. */
|
|
1034
1039
|
readonly timestamp: number
|
|
1040
|
+
/** Optional disk integrity link to the preceding complete JSONL record. Null marks a chain boundary. */
|
|
1041
|
+
readonly previousRecord?: {
|
|
1042
|
+
readonly offset: number
|
|
1043
|
+
readonly length: number
|
|
1044
|
+
readonly sha256: string
|
|
1045
|
+
readonly seq: number
|
|
1046
|
+
} | null
|
|
1047
|
+
/**
|
|
1048
|
+
* Optional writer-owned link to the preceding text record or integrity boundary.
|
|
1049
|
+
* Text retrieval may skip nontext records; operational replay still uses every event.
|
|
1050
|
+
* Absence requires adjacent traversal. Null is only valid at a chain boundary.
|
|
1051
|
+
*/
|
|
1052
|
+
readonly previousTextRecord?: {
|
|
1053
|
+
readonly offset: number
|
|
1054
|
+
readonly length: number
|
|
1055
|
+
readonly sha256: string
|
|
1056
|
+
readonly seq: number
|
|
1057
|
+
} | null
|
|
1035
1058
|
}
|
|
1036
1059
|
|
|
1037
1060
|
/**
|