@namzu/sdk 38.1.0 → 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 (534) hide show
  1. package/CHANGELOG.md +758 -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 +137 -0
  47. package/dist/manager/resident/agenda.d.ts.map +1 -0
  48. package/dist/manager/resident/agenda.js +586 -0
  49. package/dist/manager/resident/agenda.js.map +1 -0
  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/delivery-window.d.ts +22 -0
  55. package/dist/manager/resident/delivery-window.d.ts.map +1 -0
  56. package/dist/manager/resident/delivery-window.js +78 -0
  57. package/dist/manager/resident/delivery-window.js.map +1 -0
  58. package/dist/manager/resident/evidence-recall.d.ts +24 -0
  59. package/dist/manager/resident/evidence-recall.d.ts.map +1 -0
  60. package/dist/manager/resident/evidence-recall.js +295 -0
  61. package/dist/manager/resident/evidence-recall.js.map +1 -0
  62. package/dist/manager/resident/history-disk.d.ts +10 -0
  63. package/dist/manager/resident/history-disk.d.ts.map +1 -0
  64. package/dist/manager/resident/history-disk.js +50 -0
  65. package/dist/manager/resident/history-disk.js.map +1 -0
  66. package/dist/manager/resident/history.d.ts +79 -0
  67. package/dist/manager/resident/history.d.ts.map +1 -0
  68. package/dist/manager/resident/history.js +203 -0
  69. package/dist/manager/resident/history.js.map +1 -0
  70. package/dist/manager/resident/host.d.ts +78 -0
  71. package/dist/manager/resident/host.d.ts.map +1 -0
  72. package/dist/manager/resident/host.js +252 -0
  73. package/dist/manager/resident/host.js.map +1 -0
  74. package/dist/manager/resident/initiative.d.ts +111 -0
  75. package/dist/manager/resident/initiative.d.ts.map +1 -0
  76. package/dist/manager/resident/initiative.js +129 -0
  77. package/dist/manager/resident/initiative.js.map +1 -0
  78. package/dist/manager/resident/learning-cycle.d.ts +131 -0
  79. package/dist/manager/resident/learning-cycle.d.ts.map +1 -0
  80. package/dist/manager/resident/learning-cycle.js +306 -0
  81. package/dist/manager/resident/learning-cycle.js.map +1 -0
  82. package/dist/manager/resident/learning-observation.d.ts +80 -0
  83. package/dist/manager/resident/learning-observation.d.ts.map +1 -0
  84. package/dist/manager/resident/learning-observation.js +22 -0
  85. package/dist/manager/resident/learning-observation.js.map +1 -0
  86. package/dist/manager/resident/learning-store.d.ts +106 -0
  87. package/dist/manager/resident/learning-store.d.ts.map +1 -0
  88. package/dist/manager/resident/learning-store.js +598 -0
  89. package/dist/manager/resident/learning-store.js.map +1 -0
  90. package/dist/manager/resident/learning.d.ts +726 -0
  91. package/dist/manager/resident/learning.d.ts.map +1 -0
  92. package/dist/manager/resident/learning.js +353 -0
  93. package/dist/manager/resident/learning.js.map +1 -0
  94. package/dist/manager/resident/loop.d.ts +31 -0
  95. package/dist/manager/resident/loop.d.ts.map +1 -0
  96. package/dist/manager/resident/loop.js +69 -0
  97. package/dist/manager/resident/loop.js.map +1 -0
  98. package/dist/manager/resident/outbox.d.ts +180 -0
  99. package/dist/manager/resident/outbox.d.ts.map +1 -0
  100. package/dist/manager/resident/outbox.js +214 -0
  101. package/dist/manager/resident/outbox.js.map +1 -0
  102. package/dist/manager/resident/proposal.d.ts +91 -0
  103. package/dist/manager/resident/proposal.d.ts.map +1 -0
  104. package/dist/manager/resident/proposal.js +75 -0
  105. package/dist/manager/resident/proposal.js.map +1 -0
  106. package/dist/manager/resident/store.d.ts +182 -0
  107. package/dist/manager/resident/store.d.ts.map +1 -0
  108. package/dist/manager/resident/store.js +199 -0
  109. package/dist/manager/resident/store.js.map +1 -0
  110. package/dist/manager/resident/tool-evidence.d.ts +71 -0
  111. package/dist/manager/resident/tool-evidence.d.ts.map +1 -0
  112. package/dist/manager/resident/tool-evidence.js +285 -0
  113. package/dist/manager/resident/tool-evidence.js.map +1 -0
  114. package/dist/manager/run/persistence.d.ts.map +1 -1
  115. package/dist/manager/run/persistence.js +6 -0
  116. package/dist/manager/run/persistence.js.map +1 -1
  117. package/dist/plugin/loader.d.ts.map +1 -1
  118. package/dist/plugin/loader.js +5 -3
  119. package/dist/plugin/loader.js.map +1 -1
  120. package/dist/prompt/coding-agent-doctrine.d.ts +1 -1
  121. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
  122. package/dist/prompt/coding-agent-doctrine.js +2 -0
  123. package/dist/prompt/coding-agent-doctrine.js.map +1 -1
  124. package/dist/prompt/contributions.d.ts +5 -2
  125. package/dist/prompt/contributions.d.ts.map +1 -1
  126. package/dist/prompt/contributions.js.map +1 -1
  127. package/dist/prompt/index.d.ts +4 -0
  128. package/dist/prompt/index.d.ts.map +1 -1
  129. package/dist/prompt/index.js +2 -0
  130. package/dist/prompt/index.js.map +1 -1
  131. package/dist/prompt/resident-learning.d.ts +19 -0
  132. package/dist/prompt/resident-learning.d.ts.map +1 -0
  133. package/dist/prompt/resident-learning.js +125 -0
  134. package/dist/prompt/resident-learning.js.map +1 -0
  135. package/dist/prompt/resident-step.d.ts +36 -0
  136. package/dist/prompt/resident-step.d.ts.map +1 -0
  137. package/dist/prompt/resident-step.js +135 -0
  138. package/dist/prompt/resident-step.js.map +1 -0
  139. package/dist/provider/collect-chat-completion.d.ts +2 -1
  140. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  141. package/dist/provider/collect-chat-completion.js +7 -6
  142. package/dist/provider/collect-chat-completion.js.map +1 -1
  143. package/dist/provider/fallback.d.ts.map +1 -1
  144. package/dist/provider/fallback.js +2 -1
  145. package/dist/provider/fallback.js.map +1 -1
  146. package/dist/provider/stream-text.d.ts +16 -0
  147. package/dist/provider/stream-text.d.ts.map +1 -0
  148. package/dist/provider/stream-text.js +51 -0
  149. package/dist/provider/stream-text.js.map +1 -0
  150. package/dist/public-runtime.d.ts +22 -3
  151. package/dist/public-runtime.d.ts.map +1 -1
  152. package/dist/public-runtime.js +21 -3
  153. package/dist/public-runtime.js.map +1 -1
  154. package/dist/public-tools.d.ts +2 -0
  155. package/dist/public-tools.d.ts.map +1 -1
  156. package/dist/public-tools.js +2 -0
  157. package/dist/public-tools.js.map +1 -1
  158. package/dist/public-types.d.ts +29 -3
  159. package/dist/public-types.d.ts.map +1 -1
  160. package/dist/registry/index.d.ts +1 -1
  161. package/dist/registry/index.d.ts.map +1 -1
  162. package/dist/registry/tool/execute.d.ts +18 -0
  163. package/dist/registry/tool/execute.d.ts.map +1 -1
  164. package/dist/registry/tool/execute.js +43 -6
  165. package/dist/registry/tool/execute.js.map +1 -1
  166. package/dist/run/LimitChecker.js +3 -3
  167. package/dist/run/LimitChecker.js.map +1 -1
  168. package/dist/run/evidence-query.d.ts +41 -0
  169. package/dist/run/evidence-query.d.ts.map +1 -0
  170. package/dist/run/evidence-query.js +270 -0
  171. package/dist/run/evidence-query.js.map +1 -0
  172. package/dist/run/evidence-recall.d.ts +99 -0
  173. package/dist/run/evidence-recall.d.ts.map +1 -0
  174. package/dist/run/evidence-recall.js +633 -0
  175. package/dist/run/evidence-recall.js.map +1 -0
  176. package/dist/run/index.d.ts +2 -0
  177. package/dist/run/index.d.ts.map +1 -1
  178. package/dist/run/index.js +1 -0
  179. package/dist/run/index.js.map +1 -1
  180. package/dist/run/json-claim-verifier.d.ts +83 -0
  181. package/dist/run/json-claim-verifier.d.ts.map +1 -0
  182. package/dist/run/json-claim-verifier.js +200 -0
  183. package/dist/run/json-claim-verifier.js.map +1 -0
  184. package/dist/run/preparation-context-error.d.ts +10 -0
  185. package/dist/run/preparation-context-error.d.ts.map +1 -0
  186. package/dist/run/preparation-context-error.js +15 -0
  187. package/dist/run/preparation-context-error.js.map +1 -0
  188. package/dist/run-query/index.d.ts +3 -1
  189. package/dist/run-query/index.d.ts.map +1 -1
  190. package/dist/runtime/query/callback-inference.d.ts +8 -0
  191. package/dist/runtime/query/callback-inference.d.ts.map +1 -0
  192. package/dist/runtime/query/callback-inference.js +89 -0
  193. package/dist/runtime/query/callback-inference.js.map +1 -0
  194. package/dist/runtime/query/checkpoint.d.ts +4 -0
  195. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  196. package/dist/runtime/query/checkpoint.js +13 -0
  197. package/dist/runtime/query/checkpoint.js.map +1 -1
  198. package/dist/runtime/query/events.d.ts +7 -1
  199. package/dist/runtime/query/events.d.ts.map +1 -1
  200. package/dist/runtime/query/events.js +39 -12
  201. package/dist/runtime/query/events.js.map +1 -1
  202. package/dist/runtime/query/executor.d.ts +7 -1
  203. package/dist/runtime/query/executor.d.ts.map +1 -1
  204. package/dist/runtime/query/executor.js +38 -7
  205. package/dist/runtime/query/executor.js.map +1 -1
  206. package/dist/runtime/query/file-evidence-context.d.ts +5 -0
  207. package/dist/runtime/query/file-evidence-context.d.ts.map +1 -0
  208. package/dist/runtime/query/file-evidence-context.js +64 -0
  209. package/dist/runtime/query/file-evidence-context.js.map +1 -0
  210. package/dist/runtime/query/guard.d.ts.map +1 -1
  211. package/dist/runtime/query/guard.js +4 -0
  212. package/dist/runtime/query/guard.js.map +1 -1
  213. package/dist/runtime/query/index.d.ts +10 -1
  214. package/dist/runtime/query/index.d.ts.map +1 -1
  215. package/dist/runtime/query/index.js +40 -25
  216. package/dist/runtime/query/index.js.map +1 -1
  217. package/dist/runtime/query/iteration/index.d.ts +9 -31
  218. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  219. package/dist/runtime/query/iteration/index.js +231 -93
  220. package/dist/runtime/query/iteration/index.js.map +1 -1
  221. package/dist/runtime/query/iteration/phases/advisory.d.ts +2 -1
  222. package/dist/runtime/query/iteration/phases/advisory.d.ts.map +1 -1
  223. package/dist/runtime/query/iteration/phases/advisory.js +2 -1
  224. package/dist/runtime/query/iteration/phases/advisory.js.map +1 -1
  225. package/dist/runtime/query/iteration/phases/context.d.ts +2 -1
  226. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  227. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  228. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  229. package/dist/runtime/query/iteration/phases/tool-review.js +3 -0
  230. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  231. package/dist/runtime/query/iteration/provider-rejected-image.d.ts +2 -1
  232. package/dist/runtime/query/iteration/provider-rejected-image.d.ts.map +1 -1
  233. package/dist/runtime/query/iteration/provider-rejected-image.js +5 -2
  234. package/dist/runtime/query/iteration/provider-rejected-image.js.map +1 -1
  235. package/dist/runtime/query/iteration/stream-turn.d.ts +4 -1
  236. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  237. package/dist/runtime/query/iteration/stream-turn.js +22 -8
  238. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  239. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  240. package/dist/runtime/query/prompt-cache.js +21 -42
  241. package/dist/runtime/query/prompt-cache.js.map +1 -1
  242. package/dist/runtime/query/resume-pending.d.ts +18 -33
  243. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  244. package/dist/runtime/query/resume-pending.js +59 -42
  245. package/dist/runtime/query/resume-pending.js.map +1 -1
  246. package/dist/runtime/query/review-policy.d.ts +4 -4
  247. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  248. package/dist/runtime/query/review-policy.js +10 -9
  249. package/dist/runtime/query/review-policy.js.map +1 -1
  250. package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -1
  251. package/dist/runtime/query/sandbox-lifecycle.js +4 -0
  252. package/dist/runtime/query/sandbox-lifecycle.js.map +1 -1
  253. package/dist/runtime/query/tool-output-budget.d.ts +10 -6
  254. package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
  255. package/dist/runtime/query/tool-output-budget.js +54 -12
  256. package/dist/runtime/query/tool-output-budget.js.map +1 -1
  257. package/dist/runtime/query/tooling.d.ts +3 -1
  258. package/dist/runtime/query/tooling.d.ts.map +1 -1
  259. package/dist/runtime/query/tooling.js +4 -0
  260. package/dist/runtime/query/tooling.js.map +1 -1
  261. package/dist/scheduler/completion-inbox.d.ts +3 -0
  262. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  263. package/dist/scheduler/completion-inbox.js +28 -0
  264. package/dist/scheduler/completion-inbox.js.map +1 -1
  265. package/dist/store/evidence/compaction-archive.d.ts +109 -0
  266. package/dist/store/evidence/compaction-archive.d.ts.map +1 -0
  267. package/dist/store/evidence/compaction-archive.js +125 -0
  268. package/dist/store/evidence/compaction-archive.js.map +1 -0
  269. package/dist/store/evidence/compaction-provenance.d.ts +7 -0
  270. package/dist/store/evidence/compaction-provenance.d.ts.map +1 -0
  271. package/dist/store/evidence/compaction-provenance.js +49 -0
  272. package/dist/store/evidence/compaction-provenance.js.map +1 -0
  273. package/dist/store/evidence/compaction-text.d.ts +16 -0
  274. package/dist/store/evidence/compaction-text.d.ts.map +1 -0
  275. package/dist/store/evidence/compaction-text.js +51 -0
  276. package/dist/store/evidence/compaction-text.js.map +1 -0
  277. package/dist/store/evidence/disk.d.ts +11 -0
  278. package/dist/store/evidence/disk.d.ts.map +1 -0
  279. package/dist/store/evidence/disk.js +367 -0
  280. package/dist/store/evidence/disk.js.map +1 -0
  281. package/dist/store/evidence/format.d.ts +25 -0
  282. package/dist/store/evidence/format.d.ts.map +1 -0
  283. package/dist/store/evidence/format.js +115 -0
  284. package/dist/store/evidence/format.js.map +1 -0
  285. package/dist/store/evidence/index-page.d.ts +208 -0
  286. package/dist/store/evidence/index-page.d.ts.map +1 -0
  287. package/dist/store/evidence/index-page.js +262 -0
  288. package/dist/store/evidence/index-page.js.map +1 -0
  289. package/dist/store/evidence/io.d.ts +24 -0
  290. package/dist/store/evidence/io.d.ts.map +1 -0
  291. package/dist/store/evidence/io.js +69 -0
  292. package/dist/store/evidence/io.js.map +1 -0
  293. package/dist/store/evidence/linked.d.ts +9 -0
  294. package/dist/store/evidence/linked.d.ts.map +1 -0
  295. package/dist/store/evidence/linked.js +314 -0
  296. package/dist/store/evidence/linked.js.map +1 -0
  297. package/dist/store/evidence/passages.d.ts +15 -0
  298. package/dist/store/evidence/passages.d.ts.map +1 -0
  299. package/dist/store/evidence/passages.js +72 -0
  300. package/dist/store/evidence/passages.js.map +1 -0
  301. package/dist/store/evidence/record-chain.d.ts +42 -0
  302. package/dist/store/evidence/record-chain.d.ts.map +1 -0
  303. package/dist/store/evidence/record-chain.js +111 -0
  304. package/dist/store/evidence/record-chain.js.map +1 -0
  305. package/dist/store/evidence/search-input.d.ts +21 -0
  306. package/dist/store/evidence/search-input.d.ts.map +1 -0
  307. package/dist/store/evidence/search-input.js +44 -0
  308. package/dist/store/evidence/search-input.js.map +1 -0
  309. package/dist/store/evidence/selection.d.ts +9 -0
  310. package/dist/store/evidence/selection.d.ts.map +1 -0
  311. package/dist/store/evidence/selection.js +17 -0
  312. package/dist/store/evidence/selection.js.map +1 -0
  313. package/dist/store/evidence/source-kind.d.ts +11 -0
  314. package/dist/store/evidence/source-kind.d.ts.map +1 -0
  315. package/dist/store/evidence/source-kind.js +26 -0
  316. package/dist/store/evidence/source-kind.js.map +1 -0
  317. package/dist/store/evidence/source-text.d.ts +51 -0
  318. package/dist/store/evidence/source-text.d.ts.map +1 -0
  319. package/dist/store/evidence/source-text.js +213 -0
  320. package/dist/store/evidence/source-text.js.map +1 -0
  321. package/dist/store/evidence/types.d.ts +162 -0
  322. package/dist/store/evidence/types.d.ts.map +1 -0
  323. package/dist/store/evidence/types.js +2 -0
  324. package/dist/store/evidence/types.js.map +1 -0
  325. package/dist/store/memory/disk.d.ts +2 -0
  326. package/dist/store/memory/disk.d.ts.map +1 -1
  327. package/dist/store/memory/disk.js +2 -1
  328. package/dist/store/memory/disk.js.map +1 -1
  329. package/dist/store/run/disk.d.ts +10 -0
  330. package/dist/store/run/disk.d.ts.map +1 -1
  331. package/dist/store/run/disk.js +87 -7
  332. package/dist/store/run/disk.js.map +1 -1
  333. package/dist/store/run/memory.d.ts +1 -0
  334. package/dist/store/run/memory.d.ts.map +1 -1
  335. package/dist/store/run/memory.js +10 -0
  336. package/dist/store/run/memory.js.map +1 -1
  337. package/dist/store/run/tool-executions.d.ts +13 -0
  338. package/dist/store/run/tool-executions.d.ts.map +1 -0
  339. package/dist/store/run/tool-executions.js +99 -0
  340. package/dist/store/run/tool-executions.js.map +1 -0
  341. package/dist/store/session/index.d.ts +2 -0
  342. package/dist/store/session/index.d.ts.map +1 -1
  343. package/dist/store/session/index.js +1 -0
  344. package/dist/store/session/index.js.map +1 -1
  345. package/dist/store/session/sqlite.d.ts +57 -0
  346. package/dist/store/session/sqlite.d.ts.map +1 -0
  347. package/dist/store/session/sqlite.js +430 -0
  348. package/dist/store/session/sqlite.js.map +1 -0
  349. package/dist/tools/builtins/job.d.ts.map +1 -1
  350. package/dist/tools/builtins/job.js +4 -5
  351. package/dist/tools/builtins/job.js.map +1 -1
  352. package/dist/tools/builtins/write-file.js +2 -2
  353. package/dist/tools/builtins/write-file.js.map +1 -1
  354. package/dist/tools/defineTool.d.ts +2 -1
  355. package/dist/tools/defineTool.d.ts.map +1 -1
  356. package/dist/tools/defineTool.js +1 -1
  357. package/dist/tools/defineTool.js.map +1 -1
  358. package/dist/tools/file-read-tracker.d.ts.map +1 -1
  359. package/dist/tools/file-read-tracker.js +12 -3
  360. package/dist/tools/file-read-tracker.js.map +1 -1
  361. package/dist/tools/resident-history.d.ts +10 -0
  362. package/dist/tools/resident-history.d.ts.map +1 -0
  363. package/dist/tools/resident-history.js +80 -0
  364. package/dist/tools/resident-history.js.map +1 -0
  365. package/dist/tools/resident-tool-evidence.d.ts +5 -0
  366. package/dist/tools/resident-tool-evidence.d.ts.map +1 -0
  367. package/dist/tools/resident-tool-evidence.js +57 -0
  368. package/dist/tools/resident-tool-evidence.js.map +1 -0
  369. package/dist/types/advisory/config.d.ts +7 -0
  370. package/dist/types/advisory/config.d.ts.map +1 -1
  371. package/dist/types/agent/reactive.d.ts +1 -0
  372. package/dist/types/agent/reactive.d.ts.map +1 -1
  373. package/dist/types/authorization/index.d.ts +9 -9
  374. package/dist/types/authorization/index.d.ts.map +1 -1
  375. package/dist/types/authorization/index.js +1 -1
  376. package/dist/types/authorization/index.js.map +1 -1
  377. package/dist/types/hitl/index.d.ts +4 -0
  378. package/dist/types/hitl/index.d.ts.map +1 -1
  379. package/dist/types/hitl/index.js.map +1 -1
  380. package/dist/types/message/index.d.ts +16 -2
  381. package/dist/types/message/index.d.ts.map +1 -1
  382. package/dist/types/message/index.js +8 -1
  383. package/dist/types/message/index.js.map +1 -1
  384. package/dist/types/provider/chat.d.ts +2 -0
  385. package/dist/types/provider/chat.d.ts.map +1 -1
  386. package/dist/types/provider/stream.d.ts +4 -0
  387. package/dist/types/provider/stream.d.ts.map +1 -1
  388. package/dist/types/run/answer-review.d.ts +34 -3
  389. package/dist/types/run/answer-review.d.ts.map +1 -1
  390. package/dist/types/run/config.d.ts +3 -0
  391. package/dist/types/run/config.d.ts.map +1 -1
  392. package/dist/types/run/entity.d.ts +7 -0
  393. package/dist/types/run/entity.d.ts.map +1 -1
  394. package/dist/types/run/events.d.ts +31 -8
  395. package/dist/types/run/events.d.ts.map +1 -1
  396. package/dist/types/run/events.js.map +1 -1
  397. package/dist/types/run/prepare-step.d.ts +53 -8
  398. package/dist/types/run/prepare-step.d.ts.map +1 -1
  399. package/dist/types/run/store.d.ts +29 -4
  400. package/dist/types/run/store.d.ts.map +1 -1
  401. package/dist/types/run/store.js +0 -28
  402. package/dist/types/run/store.js.map +1 -1
  403. package/dist/types/tool/index.d.ts +15 -1
  404. package/dist/types/tool/index.d.ts.map +1 -1
  405. package/dist/types/tool/index.js.map +1 -1
  406. package/dist/utils/await-with-abort.d.ts +8 -0
  407. package/dist/utils/await-with-abort.d.ts.map +1 -0
  408. package/dist/utils/await-with-abort.js +28 -0
  409. package/dist/utils/await-with-abort.js.map +1 -0
  410. package/dist/utils/evidence-time.d.ts +3 -0
  411. package/dist/utils/evidence-time.d.ts.map +1 -0
  412. package/dist/utils/evidence-time.js +10 -0
  413. package/dist/utils/evidence-time.js.map +1 -0
  414. package/dist/utils/evidence-tokens.d.ts +13 -0
  415. package/dist/utils/evidence-tokens.d.ts.map +1 -0
  416. package/dist/utils/evidence-tokens.js +29 -0
  417. package/dist/utils/evidence-tokens.js.map +1 -0
  418. package/package.json +1 -1
  419. package/src/advisory/executor.ts +15 -30
  420. package/src/advisory/history.ts +126 -0
  421. package/src/advisory/index.ts +5 -1
  422. package/src/agents/ReactiveAgent.ts +3 -0
  423. package/src/agents/runAgent.ts +14 -1
  424. package/src/compaction/manual.ts +30 -2
  425. package/src/compaction/summary.ts +4 -1
  426. package/src/config/runtime.ts +2 -2
  427. package/src/contracts/schemas.ts +1 -1
  428. package/src/eval/harness-protection.ts +79 -0
  429. package/src/eval/harness-verification.ts +31 -1
  430. package/src/eval/index.ts +1 -0
  431. package/src/manager/resident/activity.ts +187 -0
  432. package/src/manager/resident/agenda.ts +907 -0
  433. package/src/manager/resident/consumption.ts +311 -0
  434. package/src/manager/resident/delivery-window.ts +93 -0
  435. package/src/manager/resident/evidence-recall.ts +363 -0
  436. package/src/manager/resident/history-disk.ts +63 -0
  437. package/src/manager/resident/history.ts +312 -0
  438. package/src/manager/resident/host.ts +356 -0
  439. package/src/manager/resident/initiative.ts +205 -0
  440. package/src/manager/resident/learning-cycle.ts +499 -0
  441. package/src/manager/resident/learning-observation.ts +39 -0
  442. package/src/manager/resident/learning-store.ts +813 -0
  443. package/src/manager/resident/learning.ts +493 -0
  444. package/src/manager/resident/loop.ts +101 -0
  445. package/src/manager/resident/outbox.ts +307 -0
  446. package/src/manager/resident/proposal.ts +105 -0
  447. package/src/manager/resident/store.ts +257 -0
  448. package/src/manager/resident/tool-evidence.ts +412 -0
  449. package/src/manager/run/persistence.ts +6 -0
  450. package/src/plugin/loader.ts +8 -3
  451. package/src/prompt/coding-agent-doctrine.ts +2 -0
  452. package/src/prompt/contributions.ts +5 -2
  453. package/src/prompt/index.ts +4 -0
  454. package/src/prompt/resident-learning.ts +143 -0
  455. package/src/prompt/resident-step.ts +176 -0
  456. package/src/provider/collect-chat-completion.ts +7 -6
  457. package/src/provider/fallback.ts +2 -1
  458. package/src/provider/stream-text.ts +56 -0
  459. package/src/public-runtime.ts +44 -0
  460. package/src/public-tools.ts +3 -0
  461. package/src/public-types.ts +165 -0
  462. package/src/registry/index.ts +1 -1
  463. package/src/registry/tool/execute.ts +56 -9
  464. package/src/run/LimitChecker.ts +3 -3
  465. package/src/run/evidence-query.ts +333 -0
  466. package/src/run/evidence-recall.ts +854 -0
  467. package/src/run/index.ts +11 -0
  468. package/src/run/json-claim-verifier.ts +298 -0
  469. package/src/run/preparation-context-error.ts +16 -0
  470. package/src/run-query/index.ts +1 -1
  471. package/src/runtime/query/callback-inference.ts +94 -0
  472. package/src/runtime/query/checkpoint.ts +14 -0
  473. package/src/runtime/query/events.ts +46 -14
  474. package/src/runtime/query/executor.ts +51 -9
  475. package/src/runtime/query/file-evidence-context.ts +65 -0
  476. package/src/runtime/query/guard.ts +2 -0
  477. package/src/runtime/query/index.ts +50 -27
  478. package/src/runtime/query/iteration/index.ts +269 -86
  479. package/src/runtime/query/iteration/phases/advisory.ts +3 -0
  480. package/src/runtime/query/iteration/phases/context.ts +2 -0
  481. package/src/runtime/query/iteration/phases/tool-review.ts +3 -0
  482. package/src/runtime/query/iteration/provider-rejected-image.ts +6 -1
  483. package/src/runtime/query/iteration/stream-turn.ts +35 -8
  484. package/src/runtime/query/prompt-cache.ts +24 -47
  485. package/src/runtime/query/resume-pending.ts +65 -40
  486. package/src/runtime/query/review-policy.ts +13 -9
  487. package/src/runtime/query/sandbox-lifecycle.ts +3 -0
  488. package/src/runtime/query/tool-output-budget.ts +65 -13
  489. package/src/runtime/query/tooling.ts +7 -1
  490. package/src/scheduler/completion-inbox.ts +26 -0
  491. package/src/store/evidence/compaction-archive.ts +139 -0
  492. package/src/store/evidence/compaction-provenance.ts +52 -0
  493. package/src/store/evidence/compaction-text.ts +61 -0
  494. package/src/store/evidence/disk.ts +461 -0
  495. package/src/store/evidence/format.ts +126 -0
  496. package/src/store/evidence/index-page.ts +292 -0
  497. package/src/store/evidence/io.ts +95 -0
  498. package/src/store/evidence/linked.ts +365 -0
  499. package/src/store/evidence/passages.ts +88 -0
  500. package/src/store/evidence/record-chain.ts +108 -0
  501. package/src/store/evidence/search-input.ts +62 -0
  502. package/src/store/evidence/selection.ts +25 -0
  503. package/src/store/evidence/source-kind.ts +36 -0
  504. package/src/store/evidence/source-text.ts +285 -0
  505. package/src/store/evidence/types.ts +177 -0
  506. package/src/store/memory/disk.ts +4 -1
  507. package/src/store/run/disk.ts +110 -8
  508. package/src/store/run/memory.ts +10 -0
  509. package/src/store/run/tool-executions.ts +112 -0
  510. package/src/store/session/index.ts +2 -0
  511. package/src/store/session/sqlite.ts +584 -0
  512. package/src/tools/builtins/job.ts +4 -5
  513. package/src/tools/builtins/write-file.ts +2 -2
  514. package/src/tools/defineTool.ts +4 -2
  515. package/src/tools/file-read-tracker.ts +8 -2
  516. package/src/tools/resident-history.ts +86 -0
  517. package/src/tools/resident-tool-evidence.ts +68 -0
  518. package/src/types/advisory/config.ts +7 -0
  519. package/src/types/agent/reactive.ts +1 -0
  520. package/src/types/authorization/index.ts +2 -2
  521. package/src/types/hitl/index.ts +4 -0
  522. package/src/types/message/index.ts +20 -0
  523. package/src/types/provider/chat.ts +2 -0
  524. package/src/types/provider/stream.ts +4 -0
  525. package/src/types/run/answer-review.ts +34 -3
  526. package/src/types/run/config.ts +3 -0
  527. package/src/types/run/entity.ts +7 -0
  528. package/src/types/run/events.ts +31 -8
  529. package/src/types/run/prepare-step.ts +59 -8
  530. package/src/types/run/store.ts +35 -4
  531. package/src/types/tool/index.ts +19 -1
  532. package/src/utils/await-with-abort.ts +26 -0
  533. package/src/utils/evidence-time.ts +9 -0
  534. package/src/utils/evidence-tokens.ts +32 -0
@@ -43,12 +43,14 @@ import type {
43
43
  ToolCallRepairReason,
44
44
  } from '../../types/tool/repair.js'
45
45
  import { abortReasonText } from '../../utils/abort.js'
46
+ import { awaitWithAbort } from '../../utils/await-with-abort.js'
46
47
  import { type BackoffPolicy, backoffWithJitter, sleep } from '../../utils/backoff.js'
47
48
  import { toErrorMessage } from '../../utils/error.js'
48
49
  import { generateToolCallId } from '../../utils/id.js'
49
50
  import type { Logger } from '../../utils/logger.js'
50
51
  import { compressShellOutput } from '../../utils/shell-compress.js'
51
52
  import { type BackgroundJobRegistry, type JobProcess, bindOwner } from '../jobs/registry.js'
53
+ import { describeVisibleFileEvidence } from './file-evidence-context.js'
52
54
  import type { ToolResultObservation } from './project-instructions.js'
53
55
  import { ToolCallBudget, assertMaxToolCalls } from './tool-call-budget.js'
54
56
  import {
@@ -376,6 +378,8 @@ export interface ToolExecutorConfig {
376
378
  * {@link DEFAULT_MAX_TOOL_OUTPUT_CHARS}; set `0` to disable.
377
379
  */
378
380
  maxToolOutputChars?: number
381
+ /** See QueryParams.retainedToolPreviewChars; applies to the recorded host output. */
382
+ retainedToolPreviewChars?: number
379
383
 
380
384
  /**
381
385
  * Cap on the RICH channel of a single tool result, in base64
@@ -401,7 +405,8 @@ export interface ToolExecutorConfig {
401
405
  * with `read`/`grep`. Absent ⇒ over-budget output is middle-elided and
402
406
  * the overflow is lost.
403
407
  */
404
- toolOutputDir?: string
408
+ captureRunEvidence?: ToolContext['captureRunEvidence']
409
+ toolOutputDir?: string | (() => string | undefined)
405
410
  /**
406
411
  * Last chance to fix a tool call the model got wrong, before the error
407
412
  * reaches it. See {@link RepairToolCall}.
@@ -491,6 +496,12 @@ export function deniedToolOutput(toolName: string, reason: string): string {
491
496
  }
492
497
 
493
498
  export class ToolExecutor {
499
+ private outputDirectory(): string | undefined {
500
+ return typeof this.config.toolOutputDir === 'function'
501
+ ? this.config.toolOutputDir()
502
+ : this.config.toolOutputDir
503
+ }
504
+
494
505
  private config: ToolExecutorConfig
495
506
  private activityStore: ActivityStore
496
507
  private emitEvent: EmitEvent
@@ -536,6 +547,16 @@ export class ToolExecutor {
536
547
  this.config = { ...this.config, sandbox }
537
548
  }
538
549
 
550
+ /** Request-only evidence from the same ledger used by mutation admission. No filesystem I/O. */
551
+ describeFileEvidence(messages: readonly Message[]): string | undefined {
552
+ return describeVisibleFileEvidence(
553
+ messages,
554
+ this.fileReadTracker,
555
+ this.config.workingDirectory,
556
+ this.config.sandbox !== undefined,
557
+ )
558
+ }
559
+
539
560
  /**
540
561
  * Span that this executor's tool spans should hang off — the current
541
562
  * iteration. Re-set each turn by the orchestrator, because a tool span
@@ -1175,7 +1196,8 @@ export class ToolExecutor {
1175
1196
  toolUseId: nestedId,
1176
1197
  output: rawOutput,
1177
1198
  maxChars: this.config.maxToolOutputChars ?? DEFAULT_MAX_TOOL_OUTPUT_CHARS,
1178
- spillDir: this.config.toolOutputDir,
1199
+ retainedPreviewChars: this.config.retainedToolPreviewChars,
1200
+ spillDir: this.outputDirectory(),
1179
1201
  onError: (message) =>
1180
1202
  this.log.warn('Failed to spill oversized nested tool output', {
1181
1203
  [NAMZU.RUN_ID]: this.config.runId,
@@ -1206,6 +1228,7 @@ export class ToolExecutor {
1206
1228
  outputLength: budgeted.originalLength,
1207
1229
  ...(budgeted.truncated ? { outputTruncated: true } : {}),
1208
1230
  ...(budgeted.spillPath ? { outputSpillPath: budgeted.spillPath } : {}),
1231
+ ...(budgeted.spillIntegrity ? { outputSpillIntegrity: budgeted.spillIntegrity } : {}),
1209
1232
  ...(via ? { via } : {}),
1210
1233
  })
1211
1234
  recordObservation({
@@ -1253,6 +1276,7 @@ export class ToolExecutor {
1253
1276
  workingDirectory: this.config.workingDirectory,
1254
1277
  },
1255
1278
  invocationState: this.config.invocationState,
1279
+ captureRunEvidence: this.config.captureRunEvidence,
1256
1280
  toolRegistry: this.config.tools,
1257
1281
  // The step's list wins where it has one; the run's is the default.
1258
1282
  // Same precedence the request already uses when it decides which
@@ -1628,8 +1652,8 @@ export class ToolExecutor {
1628
1652
  : formatFailedToolOutput(result.output, result.error)
1629
1653
 
1630
1654
  const postOverride = post.override
1631
- let output =
1632
- postOverride?.output ?? (result.success ? this.maybeCompress(toolName, rawOutput) : rawOutput)
1655
+ let output = postOverride?.output ?? rawOutput
1656
+ const preview = !postOverride && result.success ? this.maybeCompress(toolName, output) : output
1633
1657
  let selectedContent = postOverride?.isError
1634
1658
  ? undefined
1635
1659
  : (postOverride?.content ?? result.content)
@@ -1655,16 +1679,22 @@ export class ToolExecutor {
1655
1679
  toolName,
1656
1680
  toolUseId: toolCall.id,
1657
1681
  output,
1682
+ preview,
1658
1683
  maxChars: maxToolOutputChars,
1659
- spillDir: this.config.toolOutputDir,
1684
+ retainedPreviewChars: this.config.retainedToolPreviewChars,
1685
+ spillDir: this.outputDirectory(),
1660
1686
  onError: (message) =>
1661
- this.log.warn('Failed to spill oversized tool output', {
1687
+ this.log.warn('Failed to retain original tool output', {
1662
1688
  [NAMZU.RUN_ID]: this.config.runId,
1663
1689
  [GENAI.TOOL_NAME]: toolName,
1664
1690
  'exception.message': message,
1665
1691
  }),
1666
1692
  })
1667
- if (budgeted.truncated) {
1693
+ if (
1694
+ budgeted.truncated &&
1695
+ maxToolOutputChars > 0 &&
1696
+ budgeted.originalLength > maxToolOutputChars
1697
+ ) {
1668
1698
  this.log.warn('Tool output exceeded the model-visible budget', {
1669
1699
  [NAMZU.RUN_ID]: this.config.runId,
1670
1700
  [GENAI.TOOL_NAME]: toolName,
@@ -1736,6 +1766,7 @@ export class ToolExecutor {
1736
1766
  outputLength: budgeted.originalLength,
1737
1767
  ...(budgeted.truncated ? { outputTruncated: true } : {}),
1738
1768
  ...(budgeted.spillPath ? { outputSpillPath: budgeted.spillPath } : {}),
1769
+ ...(budgeted.spillIntegrity ? { outputSpillIntegrity: budgeted.spillIntegrity } : {}),
1739
1770
  })
1740
1771
  recordObservation({
1741
1772
  runId: this.config.runId,
@@ -1864,9 +1895,20 @@ export class ToolExecutor {
1864
1895
  }
1865
1896
  }
1866
1897
 
1898
+ const inheritedCapture = toolContext.captureRunEvidence
1899
+ const scopedCapture: ToolContext['captureRunEvidence'] = inheritedCapture
1900
+ ? async (maxReadBytes, signal) => {
1901
+ const combined = signal
1902
+ ? AbortSignal.any([controller.signal, signal])
1903
+ : controller.signal
1904
+ combined.throwIfAborted()
1905
+ return awaitWithAbort(inheritedCapture(maxReadBytes, combined), combined)
1906
+ }
1907
+ : undefined
1867
1908
  const context = {
1868
1909
  ...toolContext,
1869
1910
  abortSignal: controller.signal,
1911
+ ...(scopedCapture ? { captureRunEvidence: scopedCapture } : {}),
1870
1912
  ...(scopedDispatch ? { dispatchTool: scopedDispatch } : {}),
1871
1913
  }
1872
1914
  const execution = prepared
@@ -2686,8 +2728,8 @@ export class ToolExecutor {
2686
2728
  ...(notice ? { notice } : {}),
2687
2729
  // A tool may return different host and model text. They must
2688
2730
  // never compete for the same exclusive spill filename.
2689
- spillDir: this.config.toolOutputDir
2690
- ? join(this.config.toolOutputDir, 'content')
2731
+ spillDir: this.outputDirectory()
2732
+ ? join(this.outputDirectory() as string, 'content')
2691
2733
  : undefined,
2692
2734
  onError: (message) =>
2693
2735
  this.log.warn('Failed to spill oversized model tool content', {
@@ -0,0 +1,65 @@
1
+ import { resolve } from 'node:path'
2
+ import { isClearedToolResult } from '../../compaction/tool-result-editing.js'
3
+ import { fingerprintContent } from '../../tools/builtins/content-fingerprint.js'
4
+ import { WriteFileTool } from '../../tools/builtins/write-file.js'
5
+ import type { Message, ToolCall } from '../../types/message/index.js'
6
+ import type { FileReadTracker } from '../../types/tool/index.js'
7
+
8
+ /** Join visible call bodies, successful receipts and this executor's observation ledger. */
9
+ export function describeVisibleFileEvidence(
10
+ messages: readonly Message[],
11
+ tracker: FileReadTracker,
12
+ workingDirectory: string,
13
+ sandboxed: boolean,
14
+ ): string | undefined {
15
+ // Execution-owned witnesses survive transparent wrappers; a name alone proves nothing.
16
+ if (!tracker.writeCallId || !tracker.fingerprint) return
17
+ const calls = new Map<string, ToolCall | null>()
18
+ const results = new Map<string, Message | null>()
19
+ for (const message of messages) {
20
+ if (message.role === 'assistant') {
21
+ for (const call of message.toolCalls ?? []) {
22
+ calls.set(call.id, calls.has(call.id) ? null : call)
23
+ }
24
+ } else if (message.role === 'tool') {
25
+ results.set(message.toolCallId, results.has(message.toolCallId) ? null : message)
26
+ }
27
+ }
28
+ const files = new Map<string, { path: string; bodyInCall: string; observedFingerprint: string }>()
29
+ for (const [id, call] of calls) {
30
+ const receipt = results.get(id)
31
+ if (
32
+ !call ||
33
+ call.function.name !== 'write' ||
34
+ call.metadata?.inputTruncated ||
35
+ call.function.arguments.length > 32_000 ||
36
+ id.length > 256 ||
37
+ !receipt ||
38
+ receipt.role !== 'tool' ||
39
+ receipt.isError ||
40
+ typeof receipt.content !== 'string' ||
41
+ isClearedToolResult(receipt.content)
42
+ )
43
+ continue
44
+ try {
45
+ const input = WriteFileTool.inputSchema.safeParse(JSON.parse(call.function.arguments))
46
+ if (!input.success || input.data.path.length > 512) continue
47
+ const body = input.data.content ?? input.data.newStr
48
+ if (typeof body !== 'string') continue
49
+ const key = sandboxed ? input.data.path : resolve(workingDirectory, input.data.path)
50
+ const fingerprint = fingerprintContent(body)
51
+ if (tracker.writeCallId(key) !== id || tracker.fingerprint(key) !== fingerprint) continue
52
+ files.delete(key)
53
+ files.set(key, {
54
+ path: input.data.path,
55
+ bodyInCall: id,
56
+ observedFingerprint: fingerprint,
57
+ })
58
+ if (files.size > 6) files.delete(files.keys().next().value as string)
59
+ } catch {
60
+ // Malformed retained inputs or a custom tracker cannot establish evidence.
61
+ }
62
+ }
63
+ if (files.size === 0) return
64
+ return `Visible file evidence (this request only): each complete body remains in the named successful write call and matches the latest conversation observation. Reuse that body for a targeted edit; a read solely to recall it is unnecessary. This is NOT a fresh disk check. Built-in edit/write still compare the disk body at mutation admission and refuse observed drift; on refusal inspect the current file and replan. Missing entries establish nothing.\n${JSON.stringify([...files.values()])}`
65
+ }
@@ -83,6 +83,7 @@ export class GuardCoordinator {
83
83
  * on the RUN rather than on the process now hosting it.
84
84
  */
85
85
  remainingBeforeFinalizeMs(): number {
86
+ if (this.limitConfig.timeoutMs === 0) return Number.POSITIVE_INFINITY
86
87
  const finalizeAt = this.limitConfig.timeoutMs * this.limitConfig.budgetWarningThreshold
87
88
  return Math.max(0, finalizeAt - (Date.now() - this.startTime))
88
89
  }
@@ -96,6 +97,7 @@ export class GuardCoordinator {
96
97
  * deadline around such work instead of inventing a second clock.
97
98
  */
98
99
  remainingUntilTimeoutMs(): number {
100
+ if (this.limitConfig.timeoutMs === 0) return Number.POSITIVE_INFINITY
99
101
  return Math.max(0, this.limitConfig.timeoutMs - (Date.now() - this.startTime))
100
102
  }
101
103
 
@@ -139,10 +139,10 @@ import { ResultAssembler } from './result.js'
139
139
  import {
140
140
  type PendingResumePlan,
141
141
  applyPendingResume,
142
+ interruptedToolCalls,
142
143
  planCrashResume,
143
144
  planPendingResume,
144
145
  recoverCompletedCalls,
145
- unansweredToolCalls,
146
146
  } from './resume-pending.js'
147
147
  import {
148
148
  acquireSandbox,
@@ -362,6 +362,14 @@ export interface QueryParams {
362
362
  * agent decides the rest is worth re-reading. Set `0` to disable.
363
363
  */
364
364
  maxToolOutputChars?: number
365
+ /**
366
+ * Smaller preview for text that exceeded maxToolOutputChars, after its full
367
+ * host output and integrity manifest have been saved. Unset/0 keeps the old
368
+ * preview size. Does not change the spill threshold, rich blocks or ordinary
369
+ * results. A failed spill/manifest or a cap too small for its recovery path
370
+ * retains the ordinary output budget. Re-supply on resume.
371
+ */
372
+ retainedToolPreviewChars?: number
365
373
 
366
374
  /**
367
375
  * Cap on the RICH channel of a single tool result, in base64 characters.
@@ -411,6 +419,7 @@ export interface QueryParams {
411
419
  *
412
420
  * Bounded by {@link maxAnswerReviews}. Never called on the forced-final
413
421
  * turn, which exists to extract a closing summary under pressure.
422
+ * Exceptions or malformed verdicts fail the run; cancellation stops waiting.
414
423
  */
415
424
  reviewAnswer?: ReviewAnswer
416
425
 
@@ -422,7 +431,7 @@ export interface QueryParams {
422
431
  */
423
432
  promoteMemory?: PromoteMemory
424
433
 
425
- /** Rejections allowed before the run stops. Default 3. */
434
+ /** Corrections allowed before the run stops. Nonnegative safe integer; default 3. Consumed rejections survive checkpoints. */
426
435
  maxAnswerReviews?: number
427
436
 
428
437
  /** Called with each completed step, as it completes. */
@@ -931,11 +940,10 @@ async function resolveProviderContextWindow(
931
940
  onAbort = () => resolve(interrupted)
932
941
  resolverSignal.addEventListener('abort', onAbort, { once: true })
933
942
  })
934
- // Wire and directory config validation already limit this field to one
935
- // hour. The clamp also keeps a direct QueryParams caller from triggering
936
- // Node's >2^31-1 one-millisecond timer coercion and turning a huge run
937
- // budget into an immediate metadata fallback.
938
- const deadlineMs = Math.min(Math.max(0, timeoutMs), 2_147_483_647)
943
+ // Direct QueryParams callers can supply a large run deadline. The clamp
944
+ // avoids Node's >2^31-1 one-millisecond timer coercion during metadata lookup.
945
+ // Metadata discovery remains optional and bounded even without a run deadline.
946
+ const deadlineMs = timeoutMs === 0 ? 5_000 : Math.min(Math.max(0, timeoutMs), 2_147_483_647)
939
947
  const timer = setTimeout(() => {
940
948
  deadline.abort(new Error(`Provider context-window lookup exceeded ${deadlineMs}ms`))
941
949
  }, deadlineMs)
@@ -1707,10 +1715,24 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1707
1715
  ? new AuthorizationGate(gateConfig, ctx.log)
1708
1716
  : undefined
1709
1717
 
1710
- // is null only when the run has no disk layout (tests,
1711
- // in-memory hosts); the budget then degrades to middle-elision.
1712
- const runDirForTools = ctx.runMgr.getRunDir()
1713
- const toolOutputDir = runDirForTools ? join(runDirForTools, TOOL_OUTPUT_DIR_NAME) : undefined
1718
+ // The store is initialized when the async query starts, after tooling is
1719
+ // composed. Resolve lazily at execution time: capturing getRunDir() here
1720
+ // permanently disabled retention for fresh disk-backed invocations.
1721
+ const toolOutputDir = () => {
1722
+ const runDir = ctx.runMgr.getRunDir()
1723
+ return runDir ? join(runDir, TOOL_OUTPUT_DIR_NAME) : undefined
1724
+ }
1725
+ // The same invocation-owned capability serves tools and optional preparation.
1726
+ // Local cancellation cannot override the run's cancellation or settled state.
1727
+ const captureRunEvidence = async (maxReadBytes?: number, signal?: AbortSignal) => {
1728
+ const combined = signal
1729
+ ? AbortSignal.any([ctx.abortController.signal, signal])
1730
+ : ctx.abortController.signal
1731
+ combined.throwIfAborted()
1732
+ const source = await eventTranslator.captureRunEvidence(maxReadBytes, combined)
1733
+ combined.throwIfAborted()
1734
+ return source
1735
+ }
1714
1736
 
1715
1737
  const toolExecutor = ToolingBootstrap.init(
1716
1738
  {
@@ -1741,8 +1763,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1741
1763
  ...(params.maxToolCalls !== undefined
1742
1764
  ? {
1743
1765
  maxToolCalls: params.maxToolCalls,
1744
- readToolCallBudgetEvents: () =>
1745
- ctx.runMgr.getRunStore().readEvents({ integrity: 'strict' }),
1766
+ readToolCallBudgetEvents: () => eventTranslator.readEvents({ integrity: 'strict' }),
1746
1767
  }
1747
1768
  : {}),
1748
1769
  ...(params.maxToolConcurrency !== undefined
@@ -1751,13 +1772,17 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1751
1772
  ...(params.maxToolOutputChars !== undefined
1752
1773
  ? { maxToolOutputChars: params.maxToolOutputChars }
1753
1774
  : {}),
1775
+ ...(params.retainedToolPreviewChars !== undefined
1776
+ ? { retainedToolPreviewChars: params.retainedToolPreviewChars }
1777
+ : {}),
1754
1778
  ...(params.maxToolContentBytes !== undefined
1755
1779
  ? { maxToolContentBytes: params.maxToolContentBytes }
1756
1780
  : {}),
1757
1781
  // Overflow lands beside the run's other artifacts, so it is
1758
1782
  // cleaned up with the run and reachable by the model's own
1759
1783
  // `read`/`grep` without a new affordance.
1760
- ...(toolOutputDir ? { toolOutputDir } : {}),
1784
+ toolOutputDir,
1785
+ captureRunEvidence,
1761
1786
  ...(params.repairToolCall ? { repairToolCall: params.repairToolCall } : {}),
1762
1787
  ...(verificationGate ? { authorizationGate: verificationGate } : {}),
1763
1788
  recordAudit: (input) => ctx.runMgr.recordAudit(input),
@@ -1931,6 +1956,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1931
1956
  : undefined
1932
1957
  return {
1933
1958
  messages: ctx.runMgr.messages,
1959
+ turn: iterationOrchestrator.getAdvisoryTurnContext(),
1934
1960
  ...(summary !== undefined ? { workingStateSummary: summary } : {}),
1935
1961
  ...(advisoryConfig.includeToolCatalog
1936
1962
  ? { toolCatalog: params.tools.toLLMTools(effectiveAllowedTools) }
@@ -1951,6 +1977,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1951
1977
  }
1952
1978
 
1953
1979
  const iterationOrchestrator = new IterationOrchestrator({
1980
+ captureRunEvidence,
1954
1981
  provider: resilientProvider,
1955
1982
  providerCapabilities: capabilities,
1956
1983
  strictCapabilities: params.strictCapabilities === true,
@@ -2295,23 +2322,19 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2295
2322
  ? planPendingResume(projectedCheckpoint, params.pendingDecision, ctx.log)
2296
2323
  : null
2297
2324
 
2298
- // Results of tools that finished before the process died. The
2299
- // executor already emits one `tool_completed` per tool inline
2300
- // and the transcript already persists it, so the record was
2301
- // durable all along — it was simply never read back, and the
2302
- // resumed run re-ran calls that had already charged a card or
2303
- // sent an email.
2304
- const unanswered = unansweredToolCalls(projectedCheckpoint.messages)
2325
+ // Recover completed observations and explicitly unknown outcomes.
2326
+ // A recorded start is not proof that its external effect failed.
2327
+ const unanswered = interruptedToolCalls(projectedCheckpoint.messages)
2305
2328
  recoveredResults =
2306
2329
  unanswered.length > 0
2307
- ? await recoverCompletedCalls(ctx.runMgr, unanswered, ctx.log)
2330
+ ? await recoverCompletedCalls(ctx.runMgr, unanswered, ctx.log, {
2331
+ answers: pendingResume?.answers,
2332
+ signal: ctx.abortController.signal,
2333
+ })
2308
2334
  : new Map()
2309
2335
 
2310
- // A batch caught MID-execution is a resume, not a fresh
2311
- // decision: stripping the turn and letting the model re-decide
2312
- // would re-run everything that already ran. Only taken when
2313
- // the transcript proves execution had begun — a tool-review
2314
- // park has no completions and keeps the cheap repair below.
2336
+ // Preserve both known and unknown outcomes before continuing calls
2337
+ // whose absence of a start was established by a complete scan.
2315
2338
  if (!pendingResume && recoveredResults.size > 0) {
2316
2339
  pendingResume = planCrashResume(projectedCheckpoint, recoveredResults, ctx.log)
2317
2340
  }