@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.
Files changed (493) hide show
  1. package/CHANGELOG.md +700 -0
  2. package/dist/advisory/executor.d.ts +10 -1
  3. package/dist/advisory/executor.d.ts.map +1 -1
  4. package/dist/advisory/executor.js +5 -26
  5. package/dist/advisory/executor.js.map +1 -1
  6. package/dist/advisory/history.d.ts +9 -0
  7. package/dist/advisory/history.d.ts.map +1 -0
  8. package/dist/advisory/history.js +120 -0
  9. package/dist/advisory/history.js.map +1 -0
  10. package/dist/advisory/index.d.ts +1 -1
  11. package/dist/advisory/index.d.ts.map +1 -1
  12. package/dist/advisory/index.js.map +1 -1
  13. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  14. package/dist/agents/ReactiveAgent.js +3 -0
  15. package/dist/agents/ReactiveAgent.js.map +1 -1
  16. package/dist/agents/runAgent.d.ts +10 -0
  17. package/dist/agents/runAgent.d.ts.map +1 -1
  18. package/dist/agents/runAgent.js +3 -0
  19. package/dist/agents/runAgent.js.map +1 -1
  20. package/dist/compaction/manual.d.ts +6 -0
  21. package/dist/compaction/manual.d.ts.map +1 -1
  22. package/dist/compaction/manual.js +21 -2
  23. package/dist/compaction/manual.js.map +1 -1
  24. package/dist/compaction/summary.d.ts.map +1 -1
  25. package/dist/compaction/summary.js +4 -1
  26. package/dist/compaction/summary.js.map +1 -1
  27. package/dist/config/runtime.js +2 -2
  28. package/dist/config/runtime.js.map +1 -1
  29. package/dist/contracts/schemas.js +1 -1
  30. package/dist/contracts/schemas.js.map +1 -1
  31. package/dist/eval/harness-protection.d.ts +18 -0
  32. package/dist/eval/harness-protection.d.ts.map +1 -0
  33. package/dist/eval/harness-protection.js +58 -0
  34. package/dist/eval/harness-protection.js.map +1 -0
  35. package/dist/eval/harness-verification.d.ts +6 -1
  36. package/dist/eval/harness-verification.d.ts.map +1 -1
  37. package/dist/eval/harness-verification.js +19 -2
  38. package/dist/eval/harness-verification.js.map +1 -1
  39. package/dist/eval/index.d.ts +1 -0
  40. package/dist/eval/index.d.ts.map +1 -1
  41. package/dist/eval/index.js.map +1 -1
  42. package/dist/manager/resident/activity.d.ts +50 -0
  43. package/dist/manager/resident/activity.d.ts.map +1 -0
  44. package/dist/manager/resident/activity.js +125 -0
  45. package/dist/manager/resident/activity.js.map +1 -0
  46. package/dist/manager/resident/agenda.d.ts +13 -1
  47. package/dist/manager/resident/agenda.d.ts.map +1 -1
  48. package/dist/manager/resident/agenda.js +40 -5
  49. package/dist/manager/resident/agenda.js.map +1 -1
  50. package/dist/manager/resident/consumption.d.ts +104 -0
  51. package/dist/manager/resident/consumption.d.ts.map +1 -0
  52. package/dist/manager/resident/consumption.js +233 -0
  53. package/dist/manager/resident/consumption.js.map +1 -0
  54. package/dist/manager/resident/evidence-recall.d.ts +24 -0
  55. package/dist/manager/resident/evidence-recall.d.ts.map +1 -0
  56. package/dist/manager/resident/evidence-recall.js +295 -0
  57. package/dist/manager/resident/evidence-recall.js.map +1 -0
  58. package/dist/manager/resident/history-disk.d.ts +10 -0
  59. package/dist/manager/resident/history-disk.d.ts.map +1 -0
  60. package/dist/manager/resident/history-disk.js +50 -0
  61. package/dist/manager/resident/history-disk.js.map +1 -0
  62. package/dist/manager/resident/history.d.ts +79 -0
  63. package/dist/manager/resident/history.d.ts.map +1 -0
  64. package/dist/manager/resident/history.js +203 -0
  65. package/dist/manager/resident/history.js.map +1 -0
  66. package/dist/manager/resident/initiative.d.ts.map +1 -1
  67. package/dist/manager/resident/initiative.js +11 -3
  68. package/dist/manager/resident/initiative.js.map +1 -1
  69. package/dist/manager/resident/learning-cycle.d.ts +131 -0
  70. package/dist/manager/resident/learning-cycle.d.ts.map +1 -0
  71. package/dist/manager/resident/learning-cycle.js +306 -0
  72. package/dist/manager/resident/learning-cycle.js.map +1 -0
  73. package/dist/manager/resident/learning-observation.d.ts +80 -0
  74. package/dist/manager/resident/learning-observation.d.ts.map +1 -0
  75. package/dist/manager/resident/learning-observation.js +22 -0
  76. package/dist/manager/resident/learning-observation.js.map +1 -0
  77. package/dist/manager/resident/learning-store.d.ts +106 -0
  78. package/dist/manager/resident/learning-store.d.ts.map +1 -0
  79. package/dist/manager/resident/learning-store.js +598 -0
  80. package/dist/manager/resident/learning-store.js.map +1 -0
  81. package/dist/manager/resident/learning.d.ts +246 -3
  82. package/dist/manager/resident/learning.d.ts.map +1 -1
  83. package/dist/manager/resident/learning.js +96 -6
  84. package/dist/manager/resident/learning.js.map +1 -1
  85. package/dist/manager/resident/outbox.d.ts +4 -4
  86. package/dist/manager/resident/store.d.ts +37 -4
  87. package/dist/manager/resident/store.d.ts.map +1 -1
  88. package/dist/manager/resident/store.js +27 -3
  89. package/dist/manager/resident/store.js.map +1 -1
  90. package/dist/manager/resident/tool-evidence.d.ts +71 -0
  91. package/dist/manager/resident/tool-evidence.d.ts.map +1 -0
  92. package/dist/manager/resident/tool-evidence.js +285 -0
  93. package/dist/manager/resident/tool-evidence.js.map +1 -0
  94. package/dist/manager/run/persistence.d.ts.map +1 -1
  95. package/dist/manager/run/persistence.js +6 -0
  96. package/dist/manager/run/persistence.js.map +1 -1
  97. package/dist/plugin/loader.d.ts.map +1 -1
  98. package/dist/plugin/loader.js +5 -3
  99. package/dist/plugin/loader.js.map +1 -1
  100. package/dist/prompt/coding-agent-doctrine.d.ts +1 -1
  101. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
  102. package/dist/prompt/coding-agent-doctrine.js +2 -0
  103. package/dist/prompt/coding-agent-doctrine.js.map +1 -1
  104. package/dist/prompt/index.d.ts +2 -0
  105. package/dist/prompt/index.d.ts.map +1 -1
  106. package/dist/prompt/index.js +1 -0
  107. package/dist/prompt/index.js.map +1 -1
  108. package/dist/prompt/resident-learning.d.ts +19 -0
  109. package/dist/prompt/resident-learning.d.ts.map +1 -0
  110. package/dist/prompt/resident-learning.js +125 -0
  111. package/dist/prompt/resident-learning.js.map +1 -0
  112. package/dist/prompt/resident-step.d.ts +8 -1
  113. package/dist/prompt/resident-step.d.ts.map +1 -1
  114. package/dist/prompt/resident-step.js +65 -4
  115. package/dist/prompt/resident-step.js.map +1 -1
  116. package/dist/provider/collect-chat-completion.d.ts +2 -1
  117. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  118. package/dist/provider/collect-chat-completion.js +7 -6
  119. package/dist/provider/collect-chat-completion.js.map +1 -1
  120. package/dist/provider/fallback.d.ts.map +1 -1
  121. package/dist/provider/fallback.js +2 -1
  122. package/dist/provider/fallback.js.map +1 -1
  123. package/dist/provider/stream-text.d.ts +16 -0
  124. package/dist/provider/stream-text.d.ts.map +1 -0
  125. package/dist/provider/stream-text.js +51 -0
  126. package/dist/provider/stream-text.js.map +1 -0
  127. package/dist/public-runtime.d.ts +13 -3
  128. package/dist/public-runtime.d.ts.map +1 -1
  129. package/dist/public-runtime.js +12 -3
  130. package/dist/public-runtime.js.map +1 -1
  131. package/dist/public-tools.d.ts +2 -0
  132. package/dist/public-tools.d.ts.map +1 -1
  133. package/dist/public-tools.js +2 -0
  134. package/dist/public-tools.js.map +1 -1
  135. package/dist/public-types.d.ts +15 -3
  136. package/dist/public-types.d.ts.map +1 -1
  137. package/dist/run/LimitChecker.js +3 -3
  138. package/dist/run/LimitChecker.js.map +1 -1
  139. package/dist/run/evidence-query.d.ts +41 -0
  140. package/dist/run/evidence-query.d.ts.map +1 -0
  141. package/dist/run/evidence-query.js +270 -0
  142. package/dist/run/evidence-query.js.map +1 -0
  143. package/dist/run/evidence-recall.d.ts +99 -0
  144. package/dist/run/evidence-recall.d.ts.map +1 -0
  145. package/dist/run/evidence-recall.js +633 -0
  146. package/dist/run/evidence-recall.js.map +1 -0
  147. package/dist/run/index.d.ts +2 -0
  148. package/dist/run/index.d.ts.map +1 -1
  149. package/dist/run/index.js +1 -0
  150. package/dist/run/index.js.map +1 -1
  151. package/dist/run/json-claim-verifier.d.ts +83 -0
  152. package/dist/run/json-claim-verifier.d.ts.map +1 -0
  153. package/dist/run/json-claim-verifier.js +200 -0
  154. package/dist/run/json-claim-verifier.js.map +1 -0
  155. package/dist/run/preparation-context-error.d.ts +10 -0
  156. package/dist/run/preparation-context-error.d.ts.map +1 -0
  157. package/dist/run/preparation-context-error.js +15 -0
  158. package/dist/run/preparation-context-error.js.map +1 -0
  159. package/dist/run-query/index.d.ts +3 -1
  160. package/dist/run-query/index.d.ts.map +1 -1
  161. package/dist/runtime/query/callback-inference.d.ts +8 -0
  162. package/dist/runtime/query/callback-inference.d.ts.map +1 -0
  163. package/dist/runtime/query/callback-inference.js +89 -0
  164. package/dist/runtime/query/callback-inference.js.map +1 -0
  165. package/dist/runtime/query/checkpoint.d.ts +4 -0
  166. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  167. package/dist/runtime/query/checkpoint.js +13 -0
  168. package/dist/runtime/query/checkpoint.js.map +1 -1
  169. package/dist/runtime/query/events.d.ts +1 -0
  170. package/dist/runtime/query/events.d.ts.map +1 -1
  171. package/dist/runtime/query/events.js +18 -0
  172. package/dist/runtime/query/events.js.map +1 -1
  173. package/dist/runtime/query/executor.d.ts +7 -1
  174. package/dist/runtime/query/executor.d.ts.map +1 -1
  175. package/dist/runtime/query/executor.js +38 -7
  176. package/dist/runtime/query/executor.js.map +1 -1
  177. package/dist/runtime/query/file-evidence-context.d.ts +5 -0
  178. package/dist/runtime/query/file-evidence-context.d.ts.map +1 -0
  179. package/dist/runtime/query/file-evidence-context.js +64 -0
  180. package/dist/runtime/query/file-evidence-context.js.map +1 -0
  181. package/dist/runtime/query/guard.d.ts.map +1 -1
  182. package/dist/runtime/query/guard.js +4 -0
  183. package/dist/runtime/query/guard.js.map +1 -1
  184. package/dist/runtime/query/index.d.ts +10 -1
  185. package/dist/runtime/query/index.d.ts.map +1 -1
  186. package/dist/runtime/query/index.js +39 -24
  187. package/dist/runtime/query/index.js.map +1 -1
  188. package/dist/runtime/query/iteration/index.d.ts +9 -31
  189. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  190. package/dist/runtime/query/iteration/index.js +231 -93
  191. package/dist/runtime/query/iteration/index.js.map +1 -1
  192. package/dist/runtime/query/iteration/phases/advisory.d.ts +2 -1
  193. package/dist/runtime/query/iteration/phases/advisory.d.ts.map +1 -1
  194. package/dist/runtime/query/iteration/phases/advisory.js +2 -1
  195. package/dist/runtime/query/iteration/phases/advisory.js.map +1 -1
  196. package/dist/runtime/query/iteration/phases/context.d.ts +2 -1
  197. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  198. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  199. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  200. package/dist/runtime/query/iteration/phases/tool-review.js +3 -0
  201. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  202. package/dist/runtime/query/iteration/provider-rejected-image.d.ts +2 -1
  203. package/dist/runtime/query/iteration/provider-rejected-image.d.ts.map +1 -1
  204. package/dist/runtime/query/iteration/provider-rejected-image.js +5 -2
  205. package/dist/runtime/query/iteration/provider-rejected-image.js.map +1 -1
  206. package/dist/runtime/query/iteration/stream-turn.d.ts +4 -1
  207. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  208. package/dist/runtime/query/iteration/stream-turn.js +22 -8
  209. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  210. package/dist/runtime/query/resume-pending.d.ts +18 -33
  211. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  212. package/dist/runtime/query/resume-pending.js +59 -42
  213. package/dist/runtime/query/resume-pending.js.map +1 -1
  214. package/dist/runtime/query/review-policy.d.ts +4 -4
  215. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  216. package/dist/runtime/query/review-policy.js +10 -9
  217. package/dist/runtime/query/review-policy.js.map +1 -1
  218. package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -1
  219. package/dist/runtime/query/sandbox-lifecycle.js +4 -0
  220. package/dist/runtime/query/sandbox-lifecycle.js.map +1 -1
  221. package/dist/runtime/query/tool-output-budget.d.ts +10 -6
  222. package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
  223. package/dist/runtime/query/tool-output-budget.js +54 -12
  224. package/dist/runtime/query/tool-output-budget.js.map +1 -1
  225. package/dist/runtime/query/tooling.d.ts +3 -1
  226. package/dist/runtime/query/tooling.d.ts.map +1 -1
  227. package/dist/runtime/query/tooling.js +4 -0
  228. package/dist/runtime/query/tooling.js.map +1 -1
  229. package/dist/scheduler/completion-inbox.d.ts +3 -0
  230. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  231. package/dist/scheduler/completion-inbox.js +28 -0
  232. package/dist/scheduler/completion-inbox.js.map +1 -1
  233. package/dist/store/evidence/compaction-archive.d.ts +109 -0
  234. package/dist/store/evidence/compaction-archive.d.ts.map +1 -0
  235. package/dist/store/evidence/compaction-archive.js +125 -0
  236. package/dist/store/evidence/compaction-archive.js.map +1 -0
  237. package/dist/store/evidence/compaction-provenance.d.ts +7 -0
  238. package/dist/store/evidence/compaction-provenance.d.ts.map +1 -0
  239. package/dist/store/evidence/compaction-provenance.js +49 -0
  240. package/dist/store/evidence/compaction-provenance.js.map +1 -0
  241. package/dist/store/evidence/compaction-text.d.ts +16 -0
  242. package/dist/store/evidence/compaction-text.d.ts.map +1 -0
  243. package/dist/store/evidence/compaction-text.js +51 -0
  244. package/dist/store/evidence/compaction-text.js.map +1 -0
  245. package/dist/store/evidence/disk.d.ts +11 -0
  246. package/dist/store/evidence/disk.d.ts.map +1 -0
  247. package/dist/store/evidence/disk.js +367 -0
  248. package/dist/store/evidence/disk.js.map +1 -0
  249. package/dist/store/evidence/format.d.ts +25 -0
  250. package/dist/store/evidence/format.d.ts.map +1 -0
  251. package/dist/store/evidence/format.js +115 -0
  252. package/dist/store/evidence/format.js.map +1 -0
  253. package/dist/store/evidence/index-page.d.ts +208 -0
  254. package/dist/store/evidence/index-page.d.ts.map +1 -0
  255. package/dist/store/evidence/index-page.js +262 -0
  256. package/dist/store/evidence/index-page.js.map +1 -0
  257. package/dist/store/evidence/io.d.ts +24 -0
  258. package/dist/store/evidence/io.d.ts.map +1 -0
  259. package/dist/store/evidence/io.js +69 -0
  260. package/dist/store/evidence/io.js.map +1 -0
  261. package/dist/store/evidence/linked.d.ts +9 -0
  262. package/dist/store/evidence/linked.d.ts.map +1 -0
  263. package/dist/store/evidence/linked.js +314 -0
  264. package/dist/store/evidence/linked.js.map +1 -0
  265. package/dist/store/evidence/passages.d.ts +15 -0
  266. package/dist/store/evidence/passages.d.ts.map +1 -0
  267. package/dist/store/evidence/passages.js +72 -0
  268. package/dist/store/evidence/passages.js.map +1 -0
  269. package/dist/store/evidence/record-chain.d.ts +42 -0
  270. package/dist/store/evidence/record-chain.d.ts.map +1 -0
  271. package/dist/store/evidence/record-chain.js +111 -0
  272. package/dist/store/evidence/record-chain.js.map +1 -0
  273. package/dist/store/evidence/search-input.d.ts +21 -0
  274. package/dist/store/evidence/search-input.d.ts.map +1 -0
  275. package/dist/store/evidence/search-input.js +44 -0
  276. package/dist/store/evidence/search-input.js.map +1 -0
  277. package/dist/store/evidence/selection.d.ts +9 -0
  278. package/dist/store/evidence/selection.d.ts.map +1 -0
  279. package/dist/store/evidence/selection.js +17 -0
  280. package/dist/store/evidence/selection.js.map +1 -0
  281. package/dist/store/evidence/source-kind.d.ts +11 -0
  282. package/dist/store/evidence/source-kind.d.ts.map +1 -0
  283. package/dist/store/evidence/source-kind.js +26 -0
  284. package/dist/store/evidence/source-kind.js.map +1 -0
  285. package/dist/store/evidence/source-text.d.ts +51 -0
  286. package/dist/store/evidence/source-text.d.ts.map +1 -0
  287. package/dist/store/evidence/source-text.js +213 -0
  288. package/dist/store/evidence/source-text.js.map +1 -0
  289. package/dist/store/evidence/types.d.ts +162 -0
  290. package/dist/store/evidence/types.d.ts.map +1 -0
  291. package/dist/store/evidence/types.js +2 -0
  292. package/dist/store/evidence/types.js.map +1 -0
  293. package/dist/store/memory/disk.d.ts +2 -0
  294. package/dist/store/memory/disk.d.ts.map +1 -1
  295. package/dist/store/memory/disk.js +2 -1
  296. package/dist/store/memory/disk.js.map +1 -1
  297. package/dist/store/run/disk.d.ts +10 -0
  298. package/dist/store/run/disk.d.ts.map +1 -1
  299. package/dist/store/run/disk.js +87 -7
  300. package/dist/store/run/disk.js.map +1 -1
  301. package/dist/store/run/memory.d.ts +1 -0
  302. package/dist/store/run/memory.d.ts.map +1 -1
  303. package/dist/store/run/memory.js +10 -0
  304. package/dist/store/run/memory.js.map +1 -1
  305. package/dist/store/run/tool-executions.d.ts +13 -0
  306. package/dist/store/run/tool-executions.d.ts.map +1 -0
  307. package/dist/store/run/tool-executions.js +99 -0
  308. package/dist/store/run/tool-executions.js.map +1 -0
  309. package/dist/store/session/index.d.ts +2 -0
  310. package/dist/store/session/index.d.ts.map +1 -1
  311. package/dist/store/session/index.js +1 -0
  312. package/dist/store/session/index.js.map +1 -1
  313. package/dist/store/session/sqlite.d.ts +57 -0
  314. package/dist/store/session/sqlite.d.ts.map +1 -0
  315. package/dist/store/session/sqlite.js +430 -0
  316. package/dist/store/session/sqlite.js.map +1 -0
  317. package/dist/tools/builtins/job.d.ts.map +1 -1
  318. package/dist/tools/builtins/job.js +4 -5
  319. package/dist/tools/builtins/job.js.map +1 -1
  320. package/dist/tools/builtins/write-file.js +2 -2
  321. package/dist/tools/builtins/write-file.js.map +1 -1
  322. package/dist/tools/defineTool.d.ts +2 -1
  323. package/dist/tools/defineTool.d.ts.map +1 -1
  324. package/dist/tools/defineTool.js +1 -1
  325. package/dist/tools/defineTool.js.map +1 -1
  326. package/dist/tools/file-read-tracker.d.ts.map +1 -1
  327. package/dist/tools/file-read-tracker.js +12 -3
  328. package/dist/tools/file-read-tracker.js.map +1 -1
  329. package/dist/tools/resident-history.d.ts +10 -0
  330. package/dist/tools/resident-history.d.ts.map +1 -0
  331. package/dist/tools/resident-history.js +80 -0
  332. package/dist/tools/resident-history.js.map +1 -0
  333. package/dist/tools/resident-tool-evidence.d.ts +5 -0
  334. package/dist/tools/resident-tool-evidence.d.ts.map +1 -0
  335. package/dist/tools/resident-tool-evidence.js +57 -0
  336. package/dist/tools/resident-tool-evidence.js.map +1 -0
  337. package/dist/types/advisory/config.d.ts +7 -0
  338. package/dist/types/advisory/config.d.ts.map +1 -1
  339. package/dist/types/agent/reactive.d.ts +1 -0
  340. package/dist/types/agent/reactive.d.ts.map +1 -1
  341. package/dist/types/authorization/index.d.ts +9 -9
  342. package/dist/types/authorization/index.d.ts.map +1 -1
  343. package/dist/types/authorization/index.js +1 -1
  344. package/dist/types/authorization/index.js.map +1 -1
  345. package/dist/types/hitl/index.d.ts +4 -0
  346. package/dist/types/hitl/index.d.ts.map +1 -1
  347. package/dist/types/hitl/index.js.map +1 -1
  348. package/dist/types/message/index.d.ts +16 -2
  349. package/dist/types/message/index.d.ts.map +1 -1
  350. package/dist/types/message/index.js +8 -1
  351. package/dist/types/message/index.js.map +1 -1
  352. package/dist/types/provider/chat.d.ts +2 -0
  353. package/dist/types/provider/chat.d.ts.map +1 -1
  354. package/dist/types/provider/stream.d.ts +4 -0
  355. package/dist/types/provider/stream.d.ts.map +1 -1
  356. package/dist/types/run/answer-review.d.ts +34 -3
  357. package/dist/types/run/answer-review.d.ts.map +1 -1
  358. package/dist/types/run/config.d.ts +3 -0
  359. package/dist/types/run/config.d.ts.map +1 -1
  360. package/dist/types/run/entity.d.ts +7 -0
  361. package/dist/types/run/entity.d.ts.map +1 -1
  362. package/dist/types/run/events.d.ts +31 -8
  363. package/dist/types/run/events.d.ts.map +1 -1
  364. package/dist/types/run/events.js.map +1 -1
  365. package/dist/types/run/prepare-step.d.ts +53 -8
  366. package/dist/types/run/prepare-step.d.ts.map +1 -1
  367. package/dist/types/run/store.d.ts +29 -4
  368. package/dist/types/run/store.d.ts.map +1 -1
  369. package/dist/types/run/store.js +0 -28
  370. package/dist/types/run/store.js.map +1 -1
  371. package/dist/types/tool/index.d.ts +15 -1
  372. package/dist/types/tool/index.d.ts.map +1 -1
  373. package/dist/types/tool/index.js.map +1 -1
  374. package/dist/utils/await-with-abort.d.ts +8 -0
  375. package/dist/utils/await-with-abort.d.ts.map +1 -0
  376. package/dist/utils/await-with-abort.js +28 -0
  377. package/dist/utils/await-with-abort.js.map +1 -0
  378. package/dist/utils/evidence-time.d.ts +3 -0
  379. package/dist/utils/evidence-time.d.ts.map +1 -0
  380. package/dist/utils/evidence-time.js +10 -0
  381. package/dist/utils/evidence-time.js.map +1 -0
  382. package/dist/utils/evidence-tokens.d.ts +13 -0
  383. package/dist/utils/evidence-tokens.d.ts.map +1 -0
  384. package/dist/utils/evidence-tokens.js +29 -0
  385. package/dist/utils/evidence-tokens.js.map +1 -0
  386. package/package.json +1 -1
  387. package/src/advisory/executor.ts +15 -30
  388. package/src/advisory/history.ts +126 -0
  389. package/src/advisory/index.ts +5 -1
  390. package/src/agents/ReactiveAgent.ts +3 -0
  391. package/src/agents/runAgent.ts +14 -1
  392. package/src/compaction/manual.ts +30 -2
  393. package/src/compaction/summary.ts +4 -1
  394. package/src/config/runtime.ts +2 -2
  395. package/src/contracts/schemas.ts +1 -1
  396. package/src/eval/harness-protection.ts +79 -0
  397. package/src/eval/harness-verification.ts +31 -1
  398. package/src/eval/index.ts +1 -0
  399. package/src/manager/resident/activity.ts +187 -0
  400. package/src/manager/resident/agenda.ts +59 -5
  401. package/src/manager/resident/consumption.ts +311 -0
  402. package/src/manager/resident/evidence-recall.ts +363 -0
  403. package/src/manager/resident/history-disk.ts +63 -0
  404. package/src/manager/resident/history.ts +312 -0
  405. package/src/manager/resident/initiative.ts +13 -3
  406. package/src/manager/resident/learning-cycle.ts +499 -0
  407. package/src/manager/resident/learning-observation.ts +39 -0
  408. package/src/manager/resident/learning-store.ts +813 -0
  409. package/src/manager/resident/learning.ts +132 -8
  410. package/src/manager/resident/store.ts +31 -3
  411. package/src/manager/resident/tool-evidence.ts +412 -0
  412. package/src/manager/run/persistence.ts +6 -0
  413. package/src/plugin/loader.ts +8 -3
  414. package/src/prompt/coding-agent-doctrine.ts +2 -0
  415. package/src/prompt/index.ts +2 -0
  416. package/src/prompt/resident-learning.ts +143 -0
  417. package/src/prompt/resident-step.ts +83 -3
  418. package/src/provider/collect-chat-completion.ts +7 -6
  419. package/src/provider/fallback.ts +2 -1
  420. package/src/provider/stream-text.ts +56 -0
  421. package/src/public-runtime.ts +30 -0
  422. package/src/public-tools.ts +3 -0
  423. package/src/public-types.ts +98 -0
  424. package/src/run/LimitChecker.ts +3 -3
  425. package/src/run/evidence-query.ts +333 -0
  426. package/src/run/evidence-recall.ts +854 -0
  427. package/src/run/index.ts +11 -0
  428. package/src/run/json-claim-verifier.ts +298 -0
  429. package/src/run/preparation-context-error.ts +16 -0
  430. package/src/run-query/index.ts +1 -1
  431. package/src/runtime/query/callback-inference.ts +94 -0
  432. package/src/runtime/query/checkpoint.ts +14 -0
  433. package/src/runtime/query/events.ts +22 -0
  434. package/src/runtime/query/executor.ts +51 -9
  435. package/src/runtime/query/file-evidence-context.ts +65 -0
  436. package/src/runtime/query/guard.ts +2 -0
  437. package/src/runtime/query/index.ts +49 -25
  438. package/src/runtime/query/iteration/index.ts +269 -86
  439. package/src/runtime/query/iteration/phases/advisory.ts +3 -0
  440. package/src/runtime/query/iteration/phases/context.ts +2 -0
  441. package/src/runtime/query/iteration/phases/tool-review.ts +3 -0
  442. package/src/runtime/query/iteration/provider-rejected-image.ts +6 -1
  443. package/src/runtime/query/iteration/stream-turn.ts +35 -8
  444. package/src/runtime/query/resume-pending.ts +65 -40
  445. package/src/runtime/query/review-policy.ts +13 -9
  446. package/src/runtime/query/sandbox-lifecycle.ts +3 -0
  447. package/src/runtime/query/tool-output-budget.ts +65 -13
  448. package/src/runtime/query/tooling.ts +7 -1
  449. package/src/scheduler/completion-inbox.ts +26 -0
  450. package/src/store/evidence/compaction-archive.ts +139 -0
  451. package/src/store/evidence/compaction-provenance.ts +52 -0
  452. package/src/store/evidence/compaction-text.ts +61 -0
  453. package/src/store/evidence/disk.ts +461 -0
  454. package/src/store/evidence/format.ts +126 -0
  455. package/src/store/evidence/index-page.ts +292 -0
  456. package/src/store/evidence/io.ts +95 -0
  457. package/src/store/evidence/linked.ts +365 -0
  458. package/src/store/evidence/passages.ts +88 -0
  459. package/src/store/evidence/record-chain.ts +108 -0
  460. package/src/store/evidence/search-input.ts +62 -0
  461. package/src/store/evidence/selection.ts +25 -0
  462. package/src/store/evidence/source-kind.ts +36 -0
  463. package/src/store/evidence/source-text.ts +285 -0
  464. package/src/store/evidence/types.ts +177 -0
  465. package/src/store/memory/disk.ts +4 -1
  466. package/src/store/run/disk.ts +110 -8
  467. package/src/store/run/memory.ts +10 -0
  468. package/src/store/run/tool-executions.ts +112 -0
  469. package/src/store/session/index.ts +2 -0
  470. package/src/store/session/sqlite.ts +584 -0
  471. package/src/tools/builtins/job.ts +4 -5
  472. package/src/tools/builtins/write-file.ts +2 -2
  473. package/src/tools/defineTool.ts +4 -2
  474. package/src/tools/file-read-tracker.ts +8 -2
  475. package/src/tools/resident-history.ts +86 -0
  476. package/src/tools/resident-tool-evidence.ts +68 -0
  477. package/src/types/advisory/config.ts +7 -0
  478. package/src/types/agent/reactive.ts +1 -0
  479. package/src/types/authorization/index.ts +2 -2
  480. package/src/types/hitl/index.ts +4 -0
  481. package/src/types/message/index.ts +20 -0
  482. package/src/types/provider/chat.ts +2 -0
  483. package/src/types/provider/stream.ts +4 -0
  484. package/src/types/run/answer-review.ts +34 -3
  485. package/src/types/run/config.ts +3 -0
  486. package/src/types/run/entity.ts +7 -0
  487. package/src/types/run/events.ts +31 -8
  488. package/src/types/run/prepare-step.ts +59 -8
  489. package/src/types/run/store.ts +35 -4
  490. package/src/types/tool/index.ts +19 -1
  491. package/src/utils/await-with-abort.ts +26 -0
  492. package/src/utils/evidence-time.ts +9 -0
  493. package/src/utils/evidence-tokens.ts +32 -0
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { type HarnessProtectionPlan } from '../../eval/harness-protection.js';
2
3
  import { type HarnessVerificationBatch } from '../../eval/harness-verification.js';
3
4
  export declare const residentLearningEvidenceSchema: z.ZodObject<{
4
5
  key: z.ZodString;
@@ -15,25 +16,101 @@ export declare const residentLearningEvidenceSchema: z.ZodObject<{
15
16
  }>;
16
17
  /** @experimental Host provenance for a correction, evaluated activation or rollback. */
17
18
  export type ResidentLearningEvidence = Readonly<z.infer<typeof residentLearningEvidenceSchema>>;
19
+ declare const sourceSchema: z.ZodObject<{
20
+ key: z.ZodString;
21
+ revision: z.ZodString;
22
+ }, "strip", z.ZodTypeAny, {
23
+ key: string;
24
+ revision: string;
25
+ }, {
26
+ key: string;
27
+ revision: string;
28
+ }>;
29
+ /** @experimental Host-owned source identity and revision; neither is a model assertion. */
30
+ export type ResidentLearningSource = Readonly<z.infer<typeof sourceSchema>>;
18
31
  declare const candidateSchema: z.ZodObject<{
19
32
  name: z.ZodString;
33
+ /** Omitted means ordinary task guidance; exploration policies require explicit projection. */
34
+ purpose: z.ZodOptional<z.ZodEnum<["task", "exploration"]>>;
20
35
  description: z.ZodString;
21
36
  body: z.ZodString;
37
+ /** Optional dependencies whose revisions must still match before projection. */
38
+ sources: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodArray<z.ZodObject<{
39
+ key: z.ZodString;
40
+ revision: z.ZodString;
41
+ }, "strip", z.ZodTypeAny, {
42
+ key: string;
43
+ revision: string;
44
+ }, {
45
+ key: string;
46
+ revision: string;
47
+ }>, "many">, {
48
+ key: string;
49
+ revision: string;
50
+ }[], {
51
+ key: string;
52
+ revision: string;
53
+ }[]>, {
54
+ key: string;
55
+ revision: string;
56
+ }[], {
57
+ key: string;
58
+ revision: string;
59
+ }[]>>;
22
60
  }, "strip", z.ZodTypeAny, {
23
61
  name: string;
24
62
  description: string;
25
63
  body: string;
64
+ sources?: {
65
+ key: string;
66
+ revision: string;
67
+ }[] | undefined;
68
+ purpose?: "task" | "exploration" | undefined;
26
69
  }, {
27
70
  name: string;
28
71
  description: string;
29
72
  body: string;
73
+ sources?: {
74
+ key: string;
75
+ revision: string;
76
+ }[] | undefined;
77
+ purpose?: "task" | "exploration" | undefined;
30
78
  }>;
31
79
  /** @experimental Instructional guidance only; never executable assets or tool permissions. */
32
- export type ResidentSkillCandidate = Readonly<z.infer<typeof candidateSchema>>;
80
+ export type ResidentSkillCandidate = Readonly<Omit<z.infer<typeof candidateSchema>, 'sources'>> & {
81
+ readonly sources?: readonly ResidentLearningSource[];
82
+ };
83
+ /** Internal canonical snapshot, including immutable source bindings. */
84
+ export declare function normalizeResidentSkill(input: ResidentSkillCandidate): ResidentSkillCandidate;
33
85
  declare const learnedSkillSchema: z.ZodObject<{
34
86
  name: z.ZodString;
87
+ /** Omitted means ordinary task guidance; exploration policies require explicit projection. */
88
+ purpose: z.ZodOptional<z.ZodEnum<["task", "exploration"]>>;
35
89
  description: z.ZodString;
36
90
  body: z.ZodString;
91
+ /** Optional dependencies whose revisions must still match before projection. */
92
+ sources: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodArray<z.ZodObject<{
93
+ key: z.ZodString;
94
+ revision: z.ZodString;
95
+ }, "strip", z.ZodTypeAny, {
96
+ key: string;
97
+ revision: string;
98
+ }, {
99
+ key: string;
100
+ revision: string;
101
+ }>, "many">, {
102
+ key: string;
103
+ revision: string;
104
+ }[], {
105
+ key: string;
106
+ revision: string;
107
+ }[]>, {
108
+ key: string;
109
+ revision: string;
110
+ }[], {
111
+ key: string;
112
+ revision: string;
113
+ }[]>>;
37
114
  } & {
38
115
  hash: z.ZodString;
39
116
  evidence: z.ZodObject<{
@@ -55,18 +132,42 @@ declare const learnedSkillSchema: z.ZodObject<{
55
132
  evidenceDigest: z.ZodString;
56
133
  verificationTasks: z.ZodNumber;
57
134
  confirmationTasks: z.ZodNumber;
135
+ /** Absent only on historical activations made before protection was required. */
136
+ protection: z.ZodOptional<z.ZodObject<{
137
+ verificationTasks: z.ZodNumber;
138
+ confirmationTasks: z.ZodNumber;
139
+ planDigest: z.ZodString;
140
+ }, "strip", z.ZodTypeAny, {
141
+ verificationTasks: number;
142
+ confirmationTasks: number;
143
+ planDigest: string;
144
+ }, {
145
+ verificationTasks: number;
146
+ confirmationTasks: number;
147
+ planDigest: string;
148
+ }>>;
58
149
  }, "strip", z.ZodTypeAny, {
59
150
  baselineHash: string;
60
151
  candidateHash: string;
61
152
  evidenceDigest: string;
62
153
  verificationTasks: number;
63
154
  confirmationTasks: number;
155
+ protection?: {
156
+ verificationTasks: number;
157
+ confirmationTasks: number;
158
+ planDigest: string;
159
+ } | undefined;
64
160
  }, {
65
161
  baselineHash: string;
66
162
  candidateHash: string;
67
163
  evidenceDigest: string;
68
164
  verificationTasks: number;
69
165
  confirmationTasks: number;
166
+ protection?: {
167
+ verificationTasks: number;
168
+ confirmationTasks: number;
169
+ planDigest: string;
170
+ } | undefined;
70
171
  }>;
71
172
  }, "strip", z.ZodTypeAny, {
72
173
  name: string;
@@ -77,6 +178,11 @@ declare const learnedSkillSchema: z.ZodObject<{
77
178
  evidenceDigest: string;
78
179
  verificationTasks: number;
79
180
  confirmationTasks: number;
181
+ protection?: {
182
+ verificationTasks: number;
183
+ confirmationTasks: number;
184
+ planDigest: string;
185
+ } | undefined;
80
186
  };
81
187
  body: string;
82
188
  hash: string;
@@ -85,6 +191,11 @@ declare const learnedSkillSchema: z.ZodObject<{
85
191
  key: string;
86
192
  reason: string;
87
193
  };
194
+ sources?: {
195
+ key: string;
196
+ revision: string;
197
+ }[] | undefined;
198
+ purpose?: "task" | "exploration" | undefined;
88
199
  }, {
89
200
  name: string;
90
201
  description: string;
@@ -94,6 +205,11 @@ declare const learnedSkillSchema: z.ZodObject<{
94
205
  evidenceDigest: string;
95
206
  verificationTasks: number;
96
207
  confirmationTasks: number;
208
+ protection?: {
209
+ verificationTasks: number;
210
+ confirmationTasks: number;
211
+ planDigest: string;
212
+ } | undefined;
97
213
  };
98
214
  body: string;
99
215
  hash: string;
@@ -102,9 +218,16 @@ declare const learnedSkillSchema: z.ZodObject<{
102
218
  key: string;
103
219
  reason: string;
104
220
  };
221
+ sources?: {
222
+ key: string;
223
+ revision: string;
224
+ }[] | undefined;
225
+ purpose?: "task" | "exploration" | undefined;
105
226
  }>;
106
227
  /** @experimental Immutable evaluated content and evidence identity. */
107
- export type ResidentLearnedSkill = Readonly<z.infer<typeof learnedSkillSchema>>;
228
+ export type ResidentLearnedSkill = Readonly<Omit<z.infer<typeof learnedSkillSchema>, 'sources'>> & {
229
+ readonly sources?: readonly ResidentLearningSource[];
230
+ };
108
231
  export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
109
232
  revision: z.ZodNumber;
110
233
  identity: z.ZodOptional<z.ZodObject<{
@@ -172,8 +295,33 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
172
295
  }>, "many">;
173
296
  skills: z.ZodArray<z.ZodObject<{
174
297
  name: z.ZodString;
298
+ /** Omitted means ordinary task guidance; exploration policies require explicit projection. */
299
+ purpose: z.ZodOptional<z.ZodEnum<["task", "exploration"]>>;
175
300
  description: z.ZodString;
176
301
  body: z.ZodString;
302
+ /** Optional dependencies whose revisions must still match before projection. */
303
+ sources: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodArray<z.ZodObject<{
304
+ key: z.ZodString;
305
+ revision: z.ZodString;
306
+ }, "strip", z.ZodTypeAny, {
307
+ key: string;
308
+ revision: string;
309
+ }, {
310
+ key: string;
311
+ revision: string;
312
+ }>, "many">, {
313
+ key: string;
314
+ revision: string;
315
+ }[], {
316
+ key: string;
317
+ revision: string;
318
+ }[]>, {
319
+ key: string;
320
+ revision: string;
321
+ }[], {
322
+ key: string;
323
+ revision: string;
324
+ }[]>>;
177
325
  } & {
178
326
  hash: z.ZodString;
179
327
  evidence: z.ZodObject<{
@@ -195,18 +343,42 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
195
343
  evidenceDigest: z.ZodString;
196
344
  verificationTasks: z.ZodNumber;
197
345
  confirmationTasks: z.ZodNumber;
346
+ /** Absent only on historical activations made before protection was required. */
347
+ protection: z.ZodOptional<z.ZodObject<{
348
+ verificationTasks: z.ZodNumber;
349
+ confirmationTasks: z.ZodNumber;
350
+ planDigest: z.ZodString;
351
+ }, "strip", z.ZodTypeAny, {
352
+ verificationTasks: number;
353
+ confirmationTasks: number;
354
+ planDigest: string;
355
+ }, {
356
+ verificationTasks: number;
357
+ confirmationTasks: number;
358
+ planDigest: string;
359
+ }>>;
198
360
  }, "strip", z.ZodTypeAny, {
199
361
  baselineHash: string;
200
362
  candidateHash: string;
201
363
  evidenceDigest: string;
202
364
  verificationTasks: number;
203
365
  confirmationTasks: number;
366
+ protection?: {
367
+ verificationTasks: number;
368
+ confirmationTasks: number;
369
+ planDigest: string;
370
+ } | undefined;
204
371
  }, {
205
372
  baselineHash: string;
206
373
  candidateHash: string;
207
374
  evidenceDigest: string;
208
375
  verificationTasks: number;
209
376
  confirmationTasks: number;
377
+ protection?: {
378
+ verificationTasks: number;
379
+ confirmationTasks: number;
380
+ planDigest: string;
381
+ } | undefined;
210
382
  }>;
211
383
  }, "strip", z.ZodTypeAny, {
212
384
  name: string;
@@ -217,6 +389,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
217
389
  evidenceDigest: string;
218
390
  verificationTasks: number;
219
391
  confirmationTasks: number;
392
+ protection?: {
393
+ verificationTasks: number;
394
+ confirmationTasks: number;
395
+ planDigest: string;
396
+ } | undefined;
220
397
  };
221
398
  body: string;
222
399
  hash: string;
@@ -225,6 +402,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
225
402
  key: string;
226
403
  reason: string;
227
404
  };
405
+ sources?: {
406
+ key: string;
407
+ revision: string;
408
+ }[] | undefined;
409
+ purpose?: "task" | "exploration" | undefined;
228
410
  }, {
229
411
  name: string;
230
412
  description: string;
@@ -234,6 +416,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
234
416
  evidenceDigest: string;
235
417
  verificationTasks: number;
236
418
  confirmationTasks: number;
419
+ protection?: {
420
+ verificationTasks: number;
421
+ confirmationTasks: number;
422
+ planDigest: string;
423
+ } | undefined;
237
424
  };
238
425
  body: string;
239
426
  hash: string;
@@ -242,6 +429,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
242
429
  key: string;
243
430
  reason: string;
244
431
  };
432
+ sources?: {
433
+ key: string;
434
+ revision: string;
435
+ }[] | undefined;
436
+ purpose?: "task" | "exploration" | undefined;
245
437
  }>, "many">;
246
438
  lastChange: z.ZodObject<{
247
439
  key: z.ZodString;
@@ -266,6 +458,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
266
458
  evidenceDigest: string;
267
459
  verificationTasks: number;
268
460
  confirmationTasks: number;
461
+ protection?: {
462
+ verificationTasks: number;
463
+ confirmationTasks: number;
464
+ planDigest: string;
465
+ } | undefined;
269
466
  };
270
467
  body: string;
271
468
  hash: string;
@@ -274,6 +471,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
274
471
  key: string;
275
472
  reason: string;
276
473
  };
474
+ sources?: {
475
+ key: string;
476
+ revision: string;
477
+ }[] | undefined;
478
+ purpose?: "task" | "exploration" | undefined;
277
479
  }[];
278
480
  revision: number;
279
481
  preferences: {
@@ -308,6 +510,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
308
510
  evidenceDigest: string;
309
511
  verificationTasks: number;
310
512
  confirmationTasks: number;
513
+ protection?: {
514
+ verificationTasks: number;
515
+ confirmationTasks: number;
516
+ planDigest: string;
517
+ } | undefined;
311
518
  };
312
519
  body: string;
313
520
  hash: string;
@@ -316,6 +523,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
316
523
  key: string;
317
524
  reason: string;
318
525
  };
526
+ sources?: {
527
+ key: string;
528
+ revision: string;
529
+ }[] | undefined;
530
+ purpose?: "task" | "exploration" | undefined;
319
531
  }[];
320
532
  revision: number;
321
533
  preferences: {
@@ -350,6 +562,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
350
562
  evidenceDigest: string;
351
563
  verificationTasks: number;
352
564
  confirmationTasks: number;
565
+ protection?: {
566
+ verificationTasks: number;
567
+ confirmationTasks: number;
568
+ planDigest: string;
569
+ } | undefined;
353
570
  };
354
571
  body: string;
355
572
  hash: string;
@@ -358,6 +575,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
358
575
  key: string;
359
576
  reason: string;
360
577
  };
578
+ sources?: {
579
+ key: string;
580
+ revision: string;
581
+ }[] | undefined;
582
+ purpose?: "task" | "exploration" | undefined;
361
583
  }[];
362
584
  revision: number;
363
585
  preferences: {
@@ -392,6 +614,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
392
614
  evidenceDigest: string;
393
615
  verificationTasks: number;
394
616
  confirmationTasks: number;
617
+ protection?: {
618
+ verificationTasks: number;
619
+ confirmationTasks: number;
620
+ planDigest: string;
621
+ } | undefined;
395
622
  };
396
623
  body: string;
397
624
  hash: string;
@@ -400,6 +627,11 @@ export declare const residentLearningSchema: z.ZodEffects<z.ZodObject<{
400
627
  key: string;
401
628
  reason: string;
402
629
  };
630
+ sources?: {
631
+ key: string;
632
+ revision: string;
633
+ }[] | undefined;
634
+ purpose?: "task" | "exploration" | undefined;
403
635
  }[];
404
636
  revision: number;
405
637
  preferences: {
@@ -452,6 +684,8 @@ export interface ResidentProfileUpdate {
452
684
  }
453
685
  /** @experimental Recorded paired runs; hosts own execution, scoring and independent attribution. */
454
686
  export interface ResidentSkillEvaluation {
687
+ /** Host-owned task selection fixed before generating the candidate. */
688
+ readonly protection: HarnessProtectionPlan;
455
689
  readonly verification: HarnessVerificationBatch;
456
690
  readonly confirmation?: HarnessVerificationBatch;
457
691
  }
@@ -459,7 +693,7 @@ export interface ResidentSkillEvaluation {
459
693
  export declare function freezeResidentLearning(input: ResidentLearningState): ResidentLearningState;
460
694
  /** Internal pure profile transition; storage owns exact agenda CAS and idle admission. */
461
695
  export declare function reviseResidentProfile(current: ResidentLearningState | undefined, input: ResidentProfileUpdate): ResidentLearningState;
462
- /** @experimental Bind evaluation to the exact normalized name, description and body. */
696
+ /** @experimental Bind evaluation to normalized content and any declared source dependencies. */
463
697
  export declare function hashResidentSkill(input: ResidentSkillCandidate): string;
464
698
  /** Internal pure activation; reuse the kernel's conservative two-round verification gate. */
465
699
  export declare function promoteResidentSkill(current: ResidentLearningState | undefined, input: ResidentSkillCandidate, evaluation: ResidentSkillEvaluation, inputEvidence: ResidentLearningEvidence): ResidentLearningState;
@@ -469,6 +703,10 @@ export declare function restoreResidentSkill(current: ResidentLearningState | un
469
703
  export interface ResidentLearningProjectionOptions {
470
704
  readonly maxChars: number;
471
705
  readonly skillNames: readonly string[];
706
+ /** Defaults to task guidance. Exploration policies never enter ordinary task context. */
707
+ readonly purpose?: 'task' | 'exploration';
708
+ /** Fresh host observations for this projection; absent/mismatched dependencies withhold guidance. */
709
+ readonly sources?: readonly ResidentLearningSource[];
472
710
  }
473
711
  /** @experimental Omitted entries are counted; no partial skill instruction is emitted. */
474
712
  export interface ResidentLearningProjection {
@@ -476,6 +714,11 @@ export interface ResidentLearningProjection {
476
714
  readonly revision: number | null;
477
715
  readonly includedSkills: readonly string[];
478
716
  readonly omitted: number;
717
+ readonly withheldSkills: readonly {
718
+ readonly name: string;
719
+ readonly reason: 'changed-source' | 'unverified-source' | 'different-purpose';
720
+ readonly sourceKeys: readonly string[];
721
+ }[];
479
722
  }
480
723
  /** @experimental Bounded context data; never registers tools, loads files or executes a skill. */
481
724
  export declare function projectResidentLearning(current: ResidentLearningState | undefined, options: ResidentLearningProjectionOptions): ResidentLearningProjection;
@@ -1 +1 @@
1
- {"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../../src/manager/resident/learning.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../../src/manager/resident/learning.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { z } from 'zod';
3
+ import { normalizeHarnessProtection, } from '../../eval/harness-protection.js';
3
4
  import { reviewHarnessCandidate, } from '../../eval/harness-verification.js';
4
5
  const label = z.string().trim().min(1).max(256);
5
6
  const name = z.string().regex(/^[a-z0-9][a-z0-9_-]{0,63}$/);
@@ -9,11 +10,35 @@ export const residentLearningEvidenceSchema = z.object({
9
10
  source: label,
10
11
  reason: z.string().trim().min(1).max(1_000),
11
12
  });
13
+ const sourceSchema = z.object({ key: label, revision: label });
14
+ const sourcesSchema = z
15
+ .array(sourceSchema)
16
+ .min(1)
17
+ .max(8)
18
+ .superRefine((sources, context) => {
19
+ if (new Set(sources.map((source) => source.key)).size !== sources.length)
20
+ context.addIssue({ code: z.ZodIssueCode.custom, message: 'Duplicate learning source keys.' });
21
+ })
22
+ .transform((sources) => sources.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0)));
12
23
  const candidateSchema = z.object({
13
24
  name,
25
+ /** Omitted means ordinary task guidance; exploration policies require explicit projection. */
26
+ purpose: z.enum(['task', 'exploration']).optional(),
14
27
  description: z.string().trim().min(1).max(1_000),
15
28
  body: z.string().trim().min(1).max(4_000),
29
+ /** Optional dependencies whose revisions must still match before projection. */
30
+ sources: sourcesSchema.optional(),
16
31
  });
32
+ /** Internal canonical snapshot, including immutable source bindings. */
33
+ export function normalizeResidentSkill(input) {
34
+ const candidate = candidateSchema.parse(input);
35
+ return Object.freeze({
36
+ ...candidate,
37
+ ...(candidate.sources
38
+ ? { sources: Object.freeze(candidate.sources.map((source) => Object.freeze(source))) }
39
+ : {}),
40
+ });
41
+ }
17
42
  const learnedSkillSchema = candidateSchema.extend({
18
43
  hash: digest,
19
44
  evidence: residentLearningEvidenceSchema,
@@ -23,6 +48,14 @@ const learnedSkillSchema = candidateSchema.extend({
23
48
  evidenceDigest: digest,
24
49
  verificationTasks: z.number().int().min(5).max(64),
25
50
  confirmationTasks: z.number().int().min(5).max(64),
51
+ /** Absent only on historical activations made before protection was required. */
52
+ protection: z
53
+ .object({
54
+ verificationTasks: z.number().int().min(1).max(63),
55
+ confirmationTasks: z.number().int().min(1).max(63),
56
+ planDigest: digest,
57
+ })
58
+ .optional(),
26
59
  }),
27
60
  });
28
61
  export const residentLearningSchema = z
@@ -70,8 +103,16 @@ export function freezeResidentLearning(input) {
70
103
  preferences: Object.freeze(state.preferences.map((p) => Object.freeze({ ...p, evidence: Object.freeze(p.evidence) }))),
71
104
  skills: Object.freeze(state.skills.map((skill) => Object.freeze({
72
105
  ...skill,
106
+ ...(skill.sources
107
+ ? { sources: Object.freeze(skill.sources.map((source) => Object.freeze(source))) }
108
+ : {}),
73
109
  evidence: Object.freeze(skill.evidence),
74
- verification: Object.freeze(skill.verification),
110
+ verification: Object.freeze({
111
+ ...skill.verification,
112
+ ...(skill.verification.protection
113
+ ? { protection: Object.freeze(skill.verification.protection) }
114
+ : {}),
115
+ }),
75
116
  }))),
76
117
  lastChange: Object.freeze(state.lastChange),
77
118
  });
@@ -139,18 +180,28 @@ export function reviseResidentProfile(current, input) {
139
180
  ...(checked.identity !== undefined ? { identity: { text: checked.identity, evidence } } : {}),
140
181
  });
141
182
  }
142
- /** @experimental Bind evaluation to the exact normalized name, description and body. */
183
+ /** @experimental Bind evaluation to normalized content and any declared source dependencies. */
143
184
  export function hashResidentSkill(input) {
144
185
  const candidate = candidateSchema.parse(input);
145
186
  return createHash('sha256')
146
- .update(JSON.stringify([candidate.name, candidate.description, candidate.body]))
187
+ .update(JSON.stringify([
188
+ candidate.name,
189
+ candidate.description,
190
+ candidate.body,
191
+ ...(candidate.sources ? [candidate.sources] : []),
192
+ ...(candidate.purpose === 'exploration' ? [{ purpose: candidate.purpose }] : []),
193
+ ]))
147
194
  .digest('hex');
148
195
  }
149
196
  /** Internal pure activation; reuse the kernel's conservative two-round verification gate. */
150
197
  export function promoteResidentSkill(current, input, evaluation, inputEvidence) {
198
+ const protection = normalizeHarnessProtection(evaluation.protection);
151
199
  const candidate = candidateSchema.parse(input);
152
200
  const hash = hashResidentSkill(candidate);
153
- const baselineHash = current?.skills.find((s) => s.name === candidate.name)?.hash ?? 'none';
201
+ const baseline = current?.skills.find((s) => s.name === candidate.name);
202
+ if (baseline && (baseline.purpose ?? 'task') !== (candidate.purpose ?? 'task'))
203
+ throw new Error('A skill cannot change learning purpose; use a distinct skill name.');
204
+ const baselineHash = baseline?.hash ?? 'none';
154
205
  const evidence = evidenceFor(current, inputEvidence);
155
206
  for (const batch of [evaluation.verification, evaluation.confirmation]) {
156
207
  if (!batch)
@@ -168,7 +219,7 @@ export function promoteResidentSkill(current, input, evaluation, inputEvidence)
168
219
  throw new Error('Inconsistent recorded skill evaluation outcome.');
169
220
  }
170
221
  }
171
- const review = reviewHarnessCandidate(evaluation.verification, evaluation.confirmation);
222
+ const review = reviewHarnessCandidate(evaluation.verification, evaluation.confirmation, protection);
172
223
  if (review.decision !== 'accept')
173
224
  throw new Error(`Resident skill promotion ${review.decision}: ${review.reason}`);
174
225
  const skill = {
@@ -178,9 +229,16 @@ export function promoteResidentSkill(current, input, evaluation, inputEvidence)
178
229
  verification: {
179
230
  baselineHash,
180
231
  candidateHash: hash,
181
- evidenceDigest: createHash('sha256').update(JSON.stringify(evaluation)).digest('hex'),
232
+ evidenceDigest: createHash('sha256')
233
+ .update(JSON.stringify({ ...evaluation, protection }))
234
+ .digest('hex'),
182
235
  verificationTasks: review.verification.tasks.length,
183
236
  confirmationTasks: review.confirmation?.tasks.length ?? 0,
237
+ protection: {
238
+ verificationTasks: protection.verification.length,
239
+ confirmationTasks: protection.confirmation.length,
240
+ planDigest: createHash('sha256').update(JSON.stringify(protection)).digest('hex'),
241
+ },
184
242
  },
185
243
  };
186
244
  const next = base(current, evidence);
@@ -208,18 +266,28 @@ export function projectResidentLearning(current, options) {
208
266
  if (!Number.isSafeInteger(options.maxChars) || options.maxChars < 0 || options.maxChars > 64_000)
209
267
  throw new TypeError('Resident learning context requires maxChars between 0 and 64000.');
210
268
  const selected = z.array(name).max(16).parse(options.skillNames);
269
+ const purpose = z.enum(['task', 'exploration']).parse(options.purpose ?? 'task');
211
270
  if (new Set(selected).size !== selected.length)
212
271
  throw new Error('Duplicate selected skill names.');
272
+ const sources = z
273
+ .array(sourceSchema)
274
+ .max(128)
275
+ .parse(options.sources ?? []);
276
+ if (new Set(sources.map((source) => source.key)).size !== sources.length)
277
+ throw new Error('Duplicate observed learning source keys.');
278
+ const observed = new Map(sources.map((source) => [source.key, source.revision]));
213
279
  if (!current)
214
280
  return Object.freeze({
215
281
  text: '',
216
282
  revision: null,
217
283
  includedSkills: Object.freeze([]),
218
284
  omitted: selected.length,
285
+ withheldSkills: Object.freeze([]),
219
286
  });
220
287
  const state = freezeResidentLearning(current);
221
288
  const pieces = [];
222
289
  const includedSkills = [];
290
+ const withheldSkills = [];
223
291
  let omitted = 0;
224
292
  let length = 0;
225
293
  const add = (value) => {
@@ -243,6 +311,27 @@ export function projectResidentLearning(current, options) {
243
311
  omitted++;
244
312
  continue;
245
313
  }
314
+ if ((skill.purpose ?? 'task') !== purpose) {
315
+ omitted++;
316
+ withheldSkills.push(Object.freeze({
317
+ name: skill.name,
318
+ reason: 'different-purpose',
319
+ sourceKeys: Object.freeze([]),
320
+ }));
321
+ continue;
322
+ }
323
+ const mismatched = skill.sources?.filter((source) => observed.get(source.key) !== source.revision) ?? [];
324
+ if (mismatched.length) {
325
+ omitted++;
326
+ withheldSkills.push(Object.freeze({
327
+ name: skill.name,
328
+ reason: mismatched.some((source) => observed.has(source.key))
329
+ ? 'changed-source'
330
+ : 'unverified-source',
331
+ sourceKeys: Object.freeze(mismatched.map((source) => source.key)),
332
+ }));
333
+ continue;
334
+ }
246
335
  if (add({
247
336
  kind: 'evaluated-guidance',
248
337
  name: skill.name,
@@ -258,6 +347,7 @@ export function projectResidentLearning(current, options) {
258
347
  revision: state.revision,
259
348
  includedSkills: Object.freeze(includedSkills),
260
349
  omitted,
350
+ withheldSkills: Object.freeze(withheldSkills),
261
351
  });
262
352
  }
263
353
  //# sourceMappingURL=learning.js.map