@namzu/sdk 38.2.1 → 40.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/CHANGELOG.md +851 -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/connector/mcp/adapter.d.ts.map +1 -1
  30. package/dist/connector/mcp/adapter.js +20 -6
  31. package/dist/connector/mcp/adapter.js.map +1 -1
  32. package/dist/contracts/schemas.js +1 -1
  33. package/dist/contracts/schemas.js.map +1 -1
  34. package/dist/eval/harness-protection.d.ts +18 -0
  35. package/dist/eval/harness-protection.d.ts.map +1 -0
  36. package/dist/eval/harness-protection.js +58 -0
  37. package/dist/eval/harness-protection.js.map +1 -0
  38. package/dist/eval/harness-verification.d.ts +6 -1
  39. package/dist/eval/harness-verification.d.ts.map +1 -1
  40. package/dist/eval/harness-verification.js +19 -2
  41. package/dist/eval/harness-verification.js.map +1 -1
  42. package/dist/eval/index.d.ts +1 -0
  43. package/dist/eval/index.d.ts.map +1 -1
  44. package/dist/eval/index.js.map +1 -1
  45. package/dist/manager/resident/activity.d.ts +50 -0
  46. package/dist/manager/resident/activity.d.ts.map +1 -0
  47. package/dist/manager/resident/activity.js +125 -0
  48. package/dist/manager/resident/activity.js.map +1 -0
  49. package/dist/manager/resident/agenda.d.ts +13 -1
  50. package/dist/manager/resident/agenda.d.ts.map +1 -1
  51. package/dist/manager/resident/agenda.js +40 -5
  52. package/dist/manager/resident/agenda.js.map +1 -1
  53. package/dist/manager/resident/consumption.d.ts +104 -0
  54. package/dist/manager/resident/consumption.d.ts.map +1 -0
  55. package/dist/manager/resident/consumption.js +233 -0
  56. package/dist/manager/resident/consumption.js.map +1 -0
  57. package/dist/manager/resident/evidence-recall.d.ts +24 -0
  58. package/dist/manager/resident/evidence-recall.d.ts.map +1 -0
  59. package/dist/manager/resident/evidence-recall.js +295 -0
  60. package/dist/manager/resident/evidence-recall.js.map +1 -0
  61. package/dist/manager/resident/history-disk.d.ts +10 -0
  62. package/dist/manager/resident/history-disk.d.ts.map +1 -0
  63. package/dist/manager/resident/history-disk.js +50 -0
  64. package/dist/manager/resident/history-disk.js.map +1 -0
  65. package/dist/manager/resident/history.d.ts +79 -0
  66. package/dist/manager/resident/history.d.ts.map +1 -0
  67. package/dist/manager/resident/history.js +203 -0
  68. package/dist/manager/resident/history.js.map +1 -0
  69. package/dist/manager/resident/initiative.d.ts.map +1 -1
  70. package/dist/manager/resident/initiative.js +11 -3
  71. package/dist/manager/resident/initiative.js.map +1 -1
  72. package/dist/manager/resident/learning-cycle.d.ts +131 -0
  73. package/dist/manager/resident/learning-cycle.d.ts.map +1 -0
  74. package/dist/manager/resident/learning-cycle.js +306 -0
  75. package/dist/manager/resident/learning-cycle.js.map +1 -0
  76. package/dist/manager/resident/learning-observation.d.ts +80 -0
  77. package/dist/manager/resident/learning-observation.d.ts.map +1 -0
  78. package/dist/manager/resident/learning-observation.js +22 -0
  79. package/dist/manager/resident/learning-observation.js.map +1 -0
  80. package/dist/manager/resident/learning-store.d.ts +106 -0
  81. package/dist/manager/resident/learning-store.d.ts.map +1 -0
  82. package/dist/manager/resident/learning-store.js +598 -0
  83. package/dist/manager/resident/learning-store.js.map +1 -0
  84. package/dist/manager/resident/learning.d.ts +246 -3
  85. package/dist/manager/resident/learning.d.ts.map +1 -1
  86. package/dist/manager/resident/learning.js +96 -6
  87. package/dist/manager/resident/learning.js.map +1 -1
  88. package/dist/manager/resident/outbox.d.ts +4 -4
  89. package/dist/manager/resident/store.d.ts +37 -4
  90. package/dist/manager/resident/store.d.ts.map +1 -1
  91. package/dist/manager/resident/store.js +27 -3
  92. package/dist/manager/resident/store.js.map +1 -1
  93. package/dist/manager/resident/tool-evidence.d.ts +71 -0
  94. package/dist/manager/resident/tool-evidence.d.ts.map +1 -0
  95. package/dist/manager/resident/tool-evidence.js +285 -0
  96. package/dist/manager/resident/tool-evidence.js.map +1 -0
  97. package/dist/manager/run/persistence.d.ts +8 -0
  98. package/dist/manager/run/persistence.d.ts.map +1 -1
  99. package/dist/manager/run/persistence.js +18 -0
  100. package/dist/manager/run/persistence.js.map +1 -1
  101. package/dist/plugin/loader.d.ts.map +1 -1
  102. package/dist/plugin/loader.js +5 -3
  103. package/dist/plugin/loader.js.map +1 -1
  104. package/dist/prompt/coding-agent-doctrine.d.ts +1 -1
  105. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
  106. package/dist/prompt/coding-agent-doctrine.js +2 -0
  107. package/dist/prompt/coding-agent-doctrine.js.map +1 -1
  108. package/dist/prompt/index.d.ts +2 -0
  109. package/dist/prompt/index.d.ts.map +1 -1
  110. package/dist/prompt/index.js +1 -0
  111. package/dist/prompt/index.js.map +1 -1
  112. package/dist/prompt/resident-learning.d.ts +19 -0
  113. package/dist/prompt/resident-learning.d.ts.map +1 -0
  114. package/dist/prompt/resident-learning.js +125 -0
  115. package/dist/prompt/resident-learning.js.map +1 -0
  116. package/dist/prompt/resident-step.d.ts +8 -1
  117. package/dist/prompt/resident-step.d.ts.map +1 -1
  118. package/dist/prompt/resident-step.js +65 -4
  119. package/dist/prompt/resident-step.js.map +1 -1
  120. package/dist/provider/collect-chat-completion.d.ts +2 -1
  121. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  122. package/dist/provider/collect-chat-completion.js +7 -6
  123. package/dist/provider/collect-chat-completion.js.map +1 -1
  124. package/dist/provider/fallback.d.ts.map +1 -1
  125. package/dist/provider/fallback.js +2 -1
  126. package/dist/provider/fallback.js.map +1 -1
  127. package/dist/provider/stream-text.d.ts +16 -0
  128. package/dist/provider/stream-text.d.ts.map +1 -0
  129. package/dist/provider/stream-text.js +51 -0
  130. package/dist/provider/stream-text.js.map +1 -0
  131. package/dist/public-runtime.d.ts +16 -4
  132. package/dist/public-runtime.d.ts.map +1 -1
  133. package/dist/public-runtime.js +17 -4
  134. package/dist/public-runtime.js.map +1 -1
  135. package/dist/public-tools.d.ts +13 -0
  136. package/dist/public-tools.d.ts.map +1 -1
  137. package/dist/public-tools.js +16 -0
  138. package/dist/public-tools.js.map +1 -1
  139. package/dist/public-types.d.ts +15 -3
  140. package/dist/public-types.d.ts.map +1 -1
  141. package/dist/registry/tool/execute.d.ts.map +1 -1
  142. package/dist/registry/tool/execute.js +2 -3
  143. package/dist/registry/tool/execute.js.map +1 -1
  144. package/dist/registry/tool/portable.d.ts +65 -0
  145. package/dist/registry/tool/portable.d.ts.map +1 -0
  146. package/dist/registry/tool/portable.js +244 -0
  147. package/dist/registry/tool/portable.js.map +1 -0
  148. package/dist/registry/tool/schema.d.ts +32 -5
  149. package/dist/registry/tool/schema.d.ts.map +1 -1
  150. package/dist/registry/tool/schema.js +35 -9
  151. package/dist/registry/tool/schema.js.map +1 -1
  152. package/dist/registry/toolset/catalog.js +8 -8
  153. package/dist/registry/toolset/catalog.js.map +1 -1
  154. package/dist/run/LimitChecker.js +3 -3
  155. package/dist/run/LimitChecker.js.map +1 -1
  156. package/dist/run/evidence-query.d.ts +41 -0
  157. package/dist/run/evidence-query.d.ts.map +1 -0
  158. package/dist/run/evidence-query.js +270 -0
  159. package/dist/run/evidence-query.js.map +1 -0
  160. package/dist/run/evidence-recall.d.ts +99 -0
  161. package/dist/run/evidence-recall.d.ts.map +1 -0
  162. package/dist/run/evidence-recall.js +633 -0
  163. package/dist/run/evidence-recall.js.map +1 -0
  164. package/dist/run/index.d.ts +2 -0
  165. package/dist/run/index.d.ts.map +1 -1
  166. package/dist/run/index.js +1 -0
  167. package/dist/run/index.js.map +1 -1
  168. package/dist/run/json-claim-verifier.d.ts +83 -0
  169. package/dist/run/json-claim-verifier.d.ts.map +1 -0
  170. package/dist/run/json-claim-verifier.js +200 -0
  171. package/dist/run/json-claim-verifier.js.map +1 -0
  172. package/dist/run/preparation-context-error.d.ts +10 -0
  173. package/dist/run/preparation-context-error.d.ts.map +1 -0
  174. package/dist/run/preparation-context-error.js +15 -0
  175. package/dist/run/preparation-context-error.js.map +1 -0
  176. package/dist/run-query/index.d.ts +3 -1
  177. package/dist/run-query/index.d.ts.map +1 -1
  178. package/dist/runtime/jobs/awaited-jobs.d.ts +215 -0
  179. package/dist/runtime/jobs/awaited-jobs.d.ts.map +1 -0
  180. package/dist/runtime/jobs/awaited-jobs.js +259 -0
  181. package/dist/runtime/jobs/awaited-jobs.js.map +1 -0
  182. package/dist/runtime/jobs/registry.d.ts +33 -2
  183. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  184. package/dist/runtime/jobs/registry.js +37 -0
  185. package/dist/runtime/jobs/registry.js.map +1 -1
  186. package/dist/runtime/query/callback-inference.d.ts +8 -0
  187. package/dist/runtime/query/callback-inference.d.ts.map +1 -0
  188. package/dist/runtime/query/callback-inference.js +89 -0
  189. package/dist/runtime/query/callback-inference.js.map +1 -0
  190. package/dist/runtime/query/checkpoint.d.ts +4 -0
  191. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  192. package/dist/runtime/query/checkpoint.js +13 -0
  193. package/dist/runtime/query/checkpoint.js.map +1 -1
  194. package/dist/runtime/query/events.d.ts +1 -0
  195. package/dist/runtime/query/events.d.ts.map +1 -1
  196. package/dist/runtime/query/events.js +18 -0
  197. package/dist/runtime/query/events.js.map +1 -1
  198. package/dist/runtime/query/executor.d.ts +35 -1
  199. package/dist/runtime/query/executor.d.ts.map +1 -1
  200. package/dist/runtime/query/executor.js +77 -8
  201. package/dist/runtime/query/executor.js.map +1 -1
  202. package/dist/runtime/query/file-evidence-context.d.ts +5 -0
  203. package/dist/runtime/query/file-evidence-context.d.ts.map +1 -0
  204. package/dist/runtime/query/file-evidence-context.js +180 -0
  205. package/dist/runtime/query/file-evidence-context.js.map +1 -0
  206. package/dist/runtime/query/file-evidence-replay.d.ts +260 -0
  207. package/dist/runtime/query/file-evidence-replay.d.ts.map +1 -0
  208. package/dist/runtime/query/file-evidence-replay.js +647 -0
  209. package/dist/runtime/query/file-evidence-replay.js.map +1 -0
  210. package/dist/runtime/query/file-evidence-seed.d.ts +50 -0
  211. package/dist/runtime/query/file-evidence-seed.d.ts.map +1 -0
  212. package/dist/runtime/query/file-evidence-seed.js +100 -0
  213. package/dist/runtime/query/file-evidence-seed.js.map +1 -0
  214. package/dist/runtime/query/guard.d.ts.map +1 -1
  215. package/dist/runtime/query/guard.js +4 -0
  216. package/dist/runtime/query/guard.js.map +1 -1
  217. package/dist/runtime/query/index.d.ts +10 -1
  218. package/dist/runtime/query/index.d.ts.map +1 -1
  219. package/dist/runtime/query/index.js +133 -26
  220. package/dist/runtime/query/index.js.map +1 -1
  221. package/dist/runtime/query/iteration/index.d.ts +92 -36
  222. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  223. package/dist/runtime/query/iteration/index.js +420 -117
  224. package/dist/runtime/query/iteration/index.js.map +1 -1
  225. package/dist/runtime/query/iteration/phases/advisory.d.ts +2 -1
  226. package/dist/runtime/query/iteration/phases/advisory.d.ts.map +1 -1
  227. package/dist/runtime/query/iteration/phases/advisory.js +2 -1
  228. package/dist/runtime/query/iteration/phases/advisory.js.map +1 -1
  229. package/dist/runtime/query/iteration/phases/context.d.ts +12 -1
  230. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  231. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  232. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  233. package/dist/runtime/query/iteration/phases/tool-review.js +8 -1
  234. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  235. package/dist/runtime/query/iteration/provider-rejected-image.d.ts +2 -1
  236. package/dist/runtime/query/iteration/provider-rejected-image.d.ts.map +1 -1
  237. package/dist/runtime/query/iteration/provider-rejected-image.js +5 -2
  238. package/dist/runtime/query/iteration/provider-rejected-image.js.map +1 -1
  239. package/dist/runtime/query/iteration/stream-turn.d.ts +4 -1
  240. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  241. package/dist/runtime/query/iteration/stream-turn.js +22 -8
  242. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  243. package/dist/runtime/query/plugin-hooks.d.ts +14 -0
  244. package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
  245. package/dist/runtime/query/plugin-hooks.js +18 -0
  246. package/dist/runtime/query/plugin-hooks.js.map +1 -1
  247. package/dist/runtime/query/repeat-call.d.ts +17 -4
  248. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  249. package/dist/runtime/query/repeat-call.js +26 -19
  250. package/dist/runtime/query/repeat-call.js.map +1 -1
  251. package/dist/runtime/query/resume-pending.d.ts +18 -33
  252. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  253. package/dist/runtime/query/resume-pending.js +59 -42
  254. package/dist/runtime/query/resume-pending.js.map +1 -1
  255. package/dist/runtime/query/review-policy.d.ts +4 -4
  256. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  257. package/dist/runtime/query/review-policy.js +10 -9
  258. package/dist/runtime/query/review-policy.js.map +1 -1
  259. package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -1
  260. package/dist/runtime/query/sandbox-lifecycle.js +4 -0
  261. package/dist/runtime/query/sandbox-lifecycle.js.map +1 -1
  262. package/dist/runtime/query/steering.d.ts +11 -1
  263. package/dist/runtime/query/steering.d.ts.map +1 -1
  264. package/dist/runtime/query/steering.js +12 -1
  265. package/dist/runtime/query/steering.js.map +1 -1
  266. package/dist/runtime/query/tool-output-budget.d.ts +10 -6
  267. package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
  268. package/dist/runtime/query/tool-output-budget.js +54 -12
  269. package/dist/runtime/query/tool-output-budget.js.map +1 -1
  270. package/dist/runtime/query/tooling.d.ts +5 -1
  271. package/dist/runtime/query/tooling.d.ts.map +1 -1
  272. package/dist/runtime/query/tooling.js +5 -0
  273. package/dist/runtime/query/tooling.js.map +1 -1
  274. package/dist/scheduler/completion-inbox.d.ts +49 -0
  275. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  276. package/dist/scheduler/completion-inbox.js +122 -2
  277. package/dist/scheduler/completion-inbox.js.map +1 -1
  278. package/dist/store/evidence/compaction-archive.d.ts +109 -0
  279. package/dist/store/evidence/compaction-archive.d.ts.map +1 -0
  280. package/dist/store/evidence/compaction-archive.js +125 -0
  281. package/dist/store/evidence/compaction-archive.js.map +1 -0
  282. package/dist/store/evidence/compaction-provenance.d.ts +7 -0
  283. package/dist/store/evidence/compaction-provenance.d.ts.map +1 -0
  284. package/dist/store/evidence/compaction-provenance.js +49 -0
  285. package/dist/store/evidence/compaction-provenance.js.map +1 -0
  286. package/dist/store/evidence/compaction-text.d.ts +16 -0
  287. package/dist/store/evidence/compaction-text.d.ts.map +1 -0
  288. package/dist/store/evidence/compaction-text.js +51 -0
  289. package/dist/store/evidence/compaction-text.js.map +1 -0
  290. package/dist/store/evidence/disk.d.ts +11 -0
  291. package/dist/store/evidence/disk.d.ts.map +1 -0
  292. package/dist/store/evidence/disk.js +367 -0
  293. package/dist/store/evidence/disk.js.map +1 -0
  294. package/dist/store/evidence/format.d.ts +25 -0
  295. package/dist/store/evidence/format.d.ts.map +1 -0
  296. package/dist/store/evidence/format.js +115 -0
  297. package/dist/store/evidence/format.js.map +1 -0
  298. package/dist/store/evidence/index-page.d.ts +208 -0
  299. package/dist/store/evidence/index-page.d.ts.map +1 -0
  300. package/dist/store/evidence/index-page.js +262 -0
  301. package/dist/store/evidence/index-page.js.map +1 -0
  302. package/dist/store/evidence/io.d.ts +24 -0
  303. package/dist/store/evidence/io.d.ts.map +1 -0
  304. package/dist/store/evidence/io.js +69 -0
  305. package/dist/store/evidence/io.js.map +1 -0
  306. package/dist/store/evidence/linked.d.ts +9 -0
  307. package/dist/store/evidence/linked.d.ts.map +1 -0
  308. package/dist/store/evidence/linked.js +314 -0
  309. package/dist/store/evidence/linked.js.map +1 -0
  310. package/dist/store/evidence/passages.d.ts +15 -0
  311. package/dist/store/evidence/passages.d.ts.map +1 -0
  312. package/dist/store/evidence/passages.js +72 -0
  313. package/dist/store/evidence/passages.js.map +1 -0
  314. package/dist/store/evidence/record-chain.d.ts +42 -0
  315. package/dist/store/evidence/record-chain.d.ts.map +1 -0
  316. package/dist/store/evidence/record-chain.js +111 -0
  317. package/dist/store/evidence/record-chain.js.map +1 -0
  318. package/dist/store/evidence/search-input.d.ts +21 -0
  319. package/dist/store/evidence/search-input.d.ts.map +1 -0
  320. package/dist/store/evidence/search-input.js +44 -0
  321. package/dist/store/evidence/search-input.js.map +1 -0
  322. package/dist/store/evidence/selection.d.ts +9 -0
  323. package/dist/store/evidence/selection.d.ts.map +1 -0
  324. package/dist/store/evidence/selection.js +17 -0
  325. package/dist/store/evidence/selection.js.map +1 -0
  326. package/dist/store/evidence/source-kind.d.ts +11 -0
  327. package/dist/store/evidence/source-kind.d.ts.map +1 -0
  328. package/dist/store/evidence/source-kind.js +26 -0
  329. package/dist/store/evidence/source-kind.js.map +1 -0
  330. package/dist/store/evidence/source-text.d.ts +51 -0
  331. package/dist/store/evidence/source-text.d.ts.map +1 -0
  332. package/dist/store/evidence/source-text.js +213 -0
  333. package/dist/store/evidence/source-text.js.map +1 -0
  334. package/dist/store/evidence/types.d.ts +162 -0
  335. package/dist/store/evidence/types.d.ts.map +1 -0
  336. package/dist/store/evidence/types.js +2 -0
  337. package/dist/store/evidence/types.js.map +1 -0
  338. package/dist/store/memory/disk.d.ts +2 -0
  339. package/dist/store/memory/disk.d.ts.map +1 -1
  340. package/dist/store/memory/disk.js +2 -1
  341. package/dist/store/memory/disk.js.map +1 -1
  342. package/dist/store/run/disk.d.ts +10 -0
  343. package/dist/store/run/disk.d.ts.map +1 -1
  344. package/dist/store/run/disk.js +87 -7
  345. package/dist/store/run/disk.js.map +1 -1
  346. package/dist/store/run/memory.d.ts +1 -0
  347. package/dist/store/run/memory.d.ts.map +1 -1
  348. package/dist/store/run/memory.js +10 -0
  349. package/dist/store/run/memory.js.map +1 -1
  350. package/dist/store/run/tool-executions.d.ts +13 -0
  351. package/dist/store/run/tool-executions.d.ts.map +1 -0
  352. package/dist/store/run/tool-executions.js +99 -0
  353. package/dist/store/run/tool-executions.js.map +1 -0
  354. package/dist/store/session/index.d.ts +2 -0
  355. package/dist/store/session/index.d.ts.map +1 -1
  356. package/dist/store/session/index.js +1 -0
  357. package/dist/store/session/index.js.map +1 -1
  358. package/dist/store/session/sqlite.d.ts +57 -0
  359. package/dist/store/session/sqlite.d.ts.map +1 -0
  360. package/dist/store/session/sqlite.js +430 -0
  361. package/dist/store/session/sqlite.js.map +1 -0
  362. package/dist/tools/builtins/bash.d.ts.map +1 -1
  363. package/dist/tools/builtins/bash.js +4 -10
  364. package/dist/tools/builtins/bash.js.map +1 -1
  365. package/dist/tools/builtins/edit-apply.d.ts +126 -0
  366. package/dist/tools/builtins/edit-apply.d.ts.map +1 -0
  367. package/dist/tools/builtins/edit-apply.js +360 -0
  368. package/dist/tools/builtins/edit-apply.js.map +1 -0
  369. package/dist/tools/builtins/edit.d.ts +143 -1
  370. package/dist/tools/builtins/edit.d.ts.map +1 -1
  371. package/dist/tools/builtins/edit.js +37 -219
  372. package/dist/tools/builtins/edit.js.map +1 -1
  373. package/dist/tools/builtins/index.d.ts +1 -0
  374. package/dist/tools/builtins/index.d.ts.map +1 -1
  375. package/dist/tools/builtins/index.js +9 -3
  376. package/dist/tools/builtins/index.js.map +1 -1
  377. package/dist/tools/builtins/job.d.ts.map +1 -1
  378. package/dist/tools/builtins/job.js +5 -6
  379. package/dist/tools/builtins/job.js.map +1 -1
  380. package/dist/tools/builtins/read-file.d.ts +2 -2
  381. package/dist/tools/builtins/read-file.d.ts.map +1 -1
  382. package/dist/tools/builtins/read-file.js +50 -65
  383. package/dist/tools/builtins/read-file.js.map +1 -1
  384. package/dist/tools/builtins/read-render.d.ts +56 -0
  385. package/dist/tools/builtins/read-render.d.ts.map +1 -0
  386. package/dist/tools/builtins/read-render.js +73 -0
  387. package/dist/tools/builtins/read-render.js.map +1 -0
  388. package/dist/tools/builtins/wait-for-job-bounds.d.ts +67 -0
  389. package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -0
  390. package/dist/tools/builtins/wait-for-job-bounds.js +108 -0
  391. package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -0
  392. package/dist/tools/builtins/wait-for-job.d.ts +6 -0
  393. package/dist/tools/builtins/wait-for-job.d.ts.map +1 -0
  394. package/dist/tools/builtins/wait-for-job.js +162 -0
  395. package/dist/tools/builtins/wait-for-job.js.map +1 -0
  396. package/dist/tools/builtins/write-file.js +7 -2
  397. package/dist/tools/builtins/write-file.js.map +1 -1
  398. package/dist/tools/coordinator/index.d.ts.map +1 -1
  399. package/dist/tools/coordinator/index.js +1 -7
  400. package/dist/tools/coordinator/index.js.map +1 -1
  401. package/dist/tools/defineTool.d.ts +2 -1
  402. package/dist/tools/defineTool.d.ts.map +1 -1
  403. package/dist/tools/defineTool.js +1 -1
  404. package/dist/tools/defineTool.js.map +1 -1
  405. package/dist/tools/file-read-tracker.d.ts.map +1 -1
  406. package/dist/tools/file-read-tracker.js +90 -3
  407. package/dist/tools/file-read-tracker.js.map +1 -1
  408. package/dist/tools/resident-history.d.ts +10 -0
  409. package/dist/tools/resident-history.d.ts.map +1 -0
  410. package/dist/tools/resident-history.js +80 -0
  411. package/dist/tools/resident-history.js.map +1 -0
  412. package/dist/tools/resident-tool-evidence.d.ts +5 -0
  413. package/dist/tools/resident-tool-evidence.d.ts.map +1 -0
  414. package/dist/tools/resident-tool-evidence.js +57 -0
  415. package/dist/tools/resident-tool-evidence.js.map +1 -0
  416. package/dist/types/advisory/config.d.ts +7 -0
  417. package/dist/types/advisory/config.d.ts.map +1 -1
  418. package/dist/types/agent/reactive.d.ts +1 -0
  419. package/dist/types/agent/reactive.d.ts.map +1 -1
  420. package/dist/types/authorization/index.d.ts +9 -9
  421. package/dist/types/authorization/index.d.ts.map +1 -1
  422. package/dist/types/authorization/index.js +1 -1
  423. package/dist/types/authorization/index.js.map +1 -1
  424. package/dist/types/hitl/index.d.ts +4 -0
  425. package/dist/types/hitl/index.d.ts.map +1 -1
  426. package/dist/types/hitl/index.js.map +1 -1
  427. package/dist/types/message/index.d.ts +16 -2
  428. package/dist/types/message/index.d.ts.map +1 -1
  429. package/dist/types/message/index.js +10 -1
  430. package/dist/types/message/index.js.map +1 -1
  431. package/dist/types/provider/chat.d.ts +2 -0
  432. package/dist/types/provider/chat.d.ts.map +1 -1
  433. package/dist/types/provider/stream.d.ts +4 -0
  434. package/dist/types/provider/stream.d.ts.map +1 -1
  435. package/dist/types/run/answer-review.d.ts +34 -3
  436. package/dist/types/run/answer-review.d.ts.map +1 -1
  437. package/dist/types/run/config.d.ts +3 -0
  438. package/dist/types/run/config.d.ts.map +1 -1
  439. package/dist/types/run/entity.d.ts +20 -0
  440. package/dist/types/run/entity.d.ts.map +1 -1
  441. package/dist/types/run/events.d.ts +31 -8
  442. package/dist/types/run/events.d.ts.map +1 -1
  443. package/dist/types/run/events.js.map +1 -1
  444. package/dist/types/run/prepare-step.d.ts +53 -8
  445. package/dist/types/run/prepare-step.d.ts.map +1 -1
  446. package/dist/types/run/store.d.ts +29 -4
  447. package/dist/types/run/store.d.ts.map +1 -1
  448. package/dist/types/run/store.js +0 -28
  449. package/dist/types/run/store.js.map +1 -1
  450. package/dist/types/sandbox/index.d.ts +15 -14
  451. package/dist/types/sandbox/index.d.ts.map +1 -1
  452. package/dist/types/sandbox/index.js.map +1 -1
  453. package/dist/types/tool/index.d.ts +124 -1
  454. package/dist/types/tool/index.d.ts.map +1 -1
  455. package/dist/types/tool/index.js.map +1 -1
  456. package/dist/utils/await-with-abort.d.ts +8 -0
  457. package/dist/utils/await-with-abort.d.ts.map +1 -0
  458. package/dist/utils/await-with-abort.js +28 -0
  459. package/dist/utils/await-with-abort.js.map +1 -0
  460. package/dist/utils/env.d.ts +19 -0
  461. package/dist/utils/env.d.ts.map +1 -0
  462. package/dist/utils/env.js +25 -0
  463. package/dist/utils/env.js.map +1 -0
  464. package/dist/utils/evidence-time.d.ts +3 -0
  465. package/dist/utils/evidence-time.d.ts.map +1 -0
  466. package/dist/utils/evidence-time.js +10 -0
  467. package/dist/utils/evidence-time.js.map +1 -0
  468. package/dist/utils/evidence-tokens.d.ts +13 -0
  469. package/dist/utils/evidence-tokens.d.ts.map +1 -0
  470. package/dist/utils/evidence-tokens.js +29 -0
  471. package/dist/utils/evidence-tokens.js.map +1 -0
  472. package/package.json +1 -1
  473. package/src/advisory/executor.ts +15 -30
  474. package/src/advisory/history.ts +126 -0
  475. package/src/advisory/index.ts +5 -1
  476. package/src/agents/ReactiveAgent.ts +3 -0
  477. package/src/agents/runAgent.ts +14 -1
  478. package/src/compaction/manual.ts +30 -2
  479. package/src/compaction/summary.ts +4 -1
  480. package/src/config/runtime.ts +2 -2
  481. package/src/connector/mcp/adapter.ts +20 -6
  482. package/src/contracts/schemas.ts +1 -1
  483. package/src/eval/harness-protection.ts +79 -0
  484. package/src/eval/harness-verification.ts +31 -1
  485. package/src/eval/index.ts +1 -0
  486. package/src/manager/resident/activity.ts +187 -0
  487. package/src/manager/resident/agenda.ts +59 -5
  488. package/src/manager/resident/consumption.ts +311 -0
  489. package/src/manager/resident/evidence-recall.ts +363 -0
  490. package/src/manager/resident/history-disk.ts +63 -0
  491. package/src/manager/resident/history.ts +312 -0
  492. package/src/manager/resident/initiative.ts +13 -3
  493. package/src/manager/resident/learning-cycle.ts +499 -0
  494. package/src/manager/resident/learning-observation.ts +39 -0
  495. package/src/manager/resident/learning-store.ts +813 -0
  496. package/src/manager/resident/learning.ts +132 -8
  497. package/src/manager/resident/store.ts +31 -3
  498. package/src/manager/resident/tool-evidence.ts +412 -0
  499. package/src/manager/run/persistence.ts +18 -0
  500. package/src/plugin/loader.ts +8 -3
  501. package/src/prompt/coding-agent-doctrine.ts +2 -0
  502. package/src/prompt/index.ts +2 -0
  503. package/src/prompt/resident-learning.ts +143 -0
  504. package/src/prompt/resident-step.ts +83 -3
  505. package/src/provider/collect-chat-completion.ts +7 -6
  506. package/src/provider/fallback.ts +2 -1
  507. package/src/provider/stream-text.ts +56 -0
  508. package/src/public-runtime.ts +39 -1
  509. package/src/public-tools.ts +21 -0
  510. package/src/public-types.ts +98 -0
  511. package/src/registry/tool/execute.ts +2 -4
  512. package/src/registry/tool/portable.ts +264 -0
  513. package/src/registry/tool/schema.ts +38 -8
  514. package/src/registry/toolset/catalog.ts +8 -9
  515. package/src/run/LimitChecker.ts +3 -3
  516. package/src/run/evidence-query.ts +333 -0
  517. package/src/run/evidence-recall.ts +854 -0
  518. package/src/run/index.ts +11 -0
  519. package/src/run/json-claim-verifier.ts +298 -0
  520. package/src/run/preparation-context-error.ts +16 -0
  521. package/src/run-query/index.ts +1 -1
  522. package/src/runtime/jobs/awaited-jobs.ts +271 -0
  523. package/src/runtime/jobs/registry.ts +50 -0
  524. package/src/runtime/query/callback-inference.ts +94 -0
  525. package/src/runtime/query/checkpoint.ts +14 -0
  526. package/src/runtime/query/events.ts +22 -0
  527. package/src/runtime/query/executor.ts +100 -10
  528. package/src/runtime/query/file-evidence-context.ts +209 -0
  529. package/src/runtime/query/file-evidence-replay.ts +776 -0
  530. package/src/runtime/query/file-evidence-seed.ts +126 -0
  531. package/src/runtime/query/guard.ts +2 -0
  532. package/src/runtime/query/index.ts +153 -27
  533. package/src/runtime/query/iteration/index.ts +467 -110
  534. package/src/runtime/query/iteration/phases/advisory.ts +3 -0
  535. package/src/runtime/query/iteration/phases/context.ts +12 -0
  536. package/src/runtime/query/iteration/phases/tool-review.ts +7 -0
  537. package/src/runtime/query/iteration/provider-rejected-image.ts +6 -1
  538. package/src/runtime/query/iteration/stream-turn.ts +35 -8
  539. package/src/runtime/query/plugin-hooks.ts +20 -0
  540. package/src/runtime/query/repeat-call.ts +28 -18
  541. package/src/runtime/query/resume-pending.ts +65 -40
  542. package/src/runtime/query/review-policy.ts +13 -9
  543. package/src/runtime/query/sandbox-lifecycle.ts +3 -0
  544. package/src/runtime/query/steering.ts +11 -0
  545. package/src/runtime/query/tool-output-budget.ts +65 -13
  546. package/src/runtime/query/tooling.ts +10 -1
  547. package/src/scheduler/completion-inbox.ts +124 -2
  548. package/src/store/evidence/compaction-archive.ts +139 -0
  549. package/src/store/evidence/compaction-provenance.ts +52 -0
  550. package/src/store/evidence/compaction-text.ts +61 -0
  551. package/src/store/evidence/disk.ts +461 -0
  552. package/src/store/evidence/format.ts +126 -0
  553. package/src/store/evidence/index-page.ts +292 -0
  554. package/src/store/evidence/io.ts +95 -0
  555. package/src/store/evidence/linked.ts +365 -0
  556. package/src/store/evidence/passages.ts +88 -0
  557. package/src/store/evidence/record-chain.ts +108 -0
  558. package/src/store/evidence/search-input.ts +62 -0
  559. package/src/store/evidence/selection.ts +25 -0
  560. package/src/store/evidence/source-kind.ts +36 -0
  561. package/src/store/evidence/source-text.ts +285 -0
  562. package/src/store/evidence/types.ts +177 -0
  563. package/src/store/memory/disk.ts +4 -1
  564. package/src/store/run/disk.ts +110 -8
  565. package/src/store/run/memory.ts +10 -0
  566. package/src/store/run/tool-executions.ts +112 -0
  567. package/src/store/session/index.ts +2 -0
  568. package/src/store/session/sqlite.ts +584 -0
  569. package/src/tools/builtins/bash.ts +4 -10
  570. package/src/tools/builtins/edit-apply.ts +456 -0
  571. package/src/tools/builtins/edit.ts +39 -270
  572. package/src/tools/builtins/index.ts +9 -3
  573. package/src/tools/builtins/job.ts +5 -6
  574. package/src/tools/builtins/read-file.ts +56 -77
  575. package/src/tools/builtins/read-render.ts +104 -0
  576. package/src/tools/builtins/wait-for-job-bounds.ts +179 -0
  577. package/src/tools/builtins/wait-for-job.ts +184 -0
  578. package/src/tools/builtins/write-file.ts +7 -2
  579. package/src/tools/coordinator/index.ts +1 -7
  580. package/src/tools/defineTool.ts +4 -2
  581. package/src/tools/file-read-tracker.ts +86 -2
  582. package/src/tools/resident-history.ts +86 -0
  583. package/src/tools/resident-tool-evidence.ts +68 -0
  584. package/src/types/advisory/config.ts +7 -0
  585. package/src/types/agent/reactive.ts +1 -0
  586. package/src/types/authorization/index.ts +2 -2
  587. package/src/types/hitl/index.ts +4 -0
  588. package/src/types/message/index.ts +22 -0
  589. package/src/types/provider/chat.ts +2 -0
  590. package/src/types/provider/stream.ts +4 -0
  591. package/src/types/run/answer-review.ts +34 -3
  592. package/src/types/run/config.ts +3 -0
  593. package/src/types/run/entity.ts +21 -0
  594. package/src/types/run/events.ts +31 -8
  595. package/src/types/run/prepare-step.ts +59 -8
  596. package/src/types/run/store.ts +35 -4
  597. package/src/types/sandbox/index.ts +15 -14
  598. package/src/types/tool/index.ts +123 -1
  599. package/src/utils/await-with-abort.ts +26 -0
  600. package/src/utils/env.ts +23 -0
  601. package/src/utils/evidence-time.ts +9 -0
  602. package/src/utils/evidence-tokens.ts +32 -0
@@ -0,0 +1,86 @@
1
+ import { z } from 'zod'
2
+ import type { ResidentHistorySource } from '../manager/resident/history.js'
3
+ import type { ToolContext, ToolDefinition } from '../types/tool/index.js'
4
+ import { defineTool } from './defineTool.js'
5
+
6
+ /**
7
+ * @experimental
8
+ * Read-only tools over an explicitly authorized historical source. The host
9
+ * resolves and checks the executing run's scope; models choose no paths,
10
+ * tenant, resident, pursuit or upper-history boundary.
11
+ */
12
+ export function buildResidentHistoryTools(
13
+ resolveSource: (context: ToolContext) => ResidentHistorySource,
14
+ ): ToolDefinition[] {
15
+ return [
16
+ defineTool({
17
+ name: 'search_resident_history',
18
+ description:
19
+ 'Recall earlier settled steps of this resident pursuit when the current summary lacks a detail. Searches historical summaries and accepted wake inputs, newest first. Use a case-sensitive literal query, or omit query to browse. Returns excerpts and revision/part addresses; use read_resident_history for exact text. Follow nextCursor as cursor even on an empty page. Incomplete absence proves nothing. No inference or external actions. Historical claims are not current verification or new authority.',
20
+ inputSchema: z
21
+ .object({
22
+ query: z.string().max(256).optional(),
23
+ cursor: z.number().int().positive().safe().optional(),
24
+ limit: z.number().int().min(1).max(8).optional(),
25
+ })
26
+ .strict(),
27
+ category: 'custom',
28
+ permissions: [],
29
+ readOnly: true,
30
+ destructive: false,
31
+ concurrencySafe: true,
32
+ presentCall: (input) => ({ kind: 'generic', label: input.query || 'Recent resident steps' }),
33
+ async execute(input, context) {
34
+ try {
35
+ context.abortSignal?.throwIfAborted()
36
+ const result = await resolveSource(context).search(input, context.abortSignal)
37
+ return { success: true, output: JSON.stringify(result) }
38
+ } catch {
39
+ context.abortSignal?.throwIfAborted()
40
+ return {
41
+ success: false,
42
+ output: '',
43
+ error:
44
+ 'Resident history is unavailable or the search input is invalid. Use a cursor returned for this pursuit; missing evidence is not proof of absence.',
45
+ }
46
+ }
47
+ },
48
+ }),
49
+ defineTool({
50
+ name: 'read_resident_history',
51
+ description:
52
+ 'Read exact retained text at a revision/part address returned by search_resident_history. Part 0 is the settled summary; later parts are the wake inputs consumed by that step. Returns at most 6000 characters. Continue with nextOffset as offset at the same address. Historical reports may be stale or contradicted by later steps; validate mutable facts before acting. Does not replay actions or restore unrecorded tool output.',
53
+ inputSchema: z
54
+ .object({
55
+ revision: z.number().int().positive().safe(),
56
+ part: z.number().int().min(0).max(16),
57
+ offset: z.number().int().nonnegative().safe().optional(),
58
+ })
59
+ .strict(),
60
+ category: 'custom',
61
+ permissions: [],
62
+ readOnly: true,
63
+ destructive: false,
64
+ concurrencySafe: true,
65
+ presentCall: (input) => ({
66
+ kind: 'generic',
67
+ label: `Step evidence · revision ${input.revision} · part ${input.part}`,
68
+ }),
69
+ async execute(input, context) {
70
+ try {
71
+ context.abortSignal?.throwIfAborted()
72
+ const result = await resolveSource(context).read(input, context.abortSignal)
73
+ return { success: true, output: JSON.stringify(result) }
74
+ } catch {
75
+ context.abortSignal?.throwIfAborted()
76
+ return {
77
+ success: false,
78
+ output: '',
79
+ error:
80
+ 'Resident evidence is unavailable or the address is invalid. Use revision/part from search_resident_history and the returned nextOffset.',
81
+ }
82
+ }
83
+ },
84
+ }),
85
+ ]
86
+ }
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod'
2
+ import type { ResidentToolEvidenceSource } from '../manager/resident/tool-evidence.js'
3
+ import type { ToolContext, ToolDefinition } from '../types/tool/index.js'
4
+ import { defineTool } from './defineTool.js'
5
+
6
+ /** @experimental The host must authorize each executing run before returning its bound source. */
7
+ export function buildResidentToolEvidenceTools(
8
+ resolveSource: (context: ToolContext) => ResidentToolEvidenceSource,
9
+ ): ToolDefinition[] {
10
+ async function execute(
11
+ context: ToolContext,
12
+ read: (source: ResidentToolEvidenceSource) => Promise<unknown>,
13
+ ) {
14
+ try {
15
+ context.abortSignal?.throwIfAborted()
16
+ return { success: true, output: JSON.stringify(await read(resolveSource(context))) }
17
+ } catch {
18
+ context.abortSignal?.throwIfAborted()
19
+ return {
20
+ success: false,
21
+ output: '',
22
+ error:
23
+ 'Retained tool evidence is unavailable, changed or outside this pursuit. Use returned addresses and continuation offsets. Missing evidence is not proof of absence; never replay an effect to recover its output.',
24
+ }
25
+ }
26
+ }
27
+ return [
28
+ defineTool({
29
+ name: 'search_resident_tools',
30
+ description:
31
+ 'Find original retained tool text from earlier settled steps of this resident pursuit, even across isolated sessions. Use a case-sensitive literal query or omit it to browse. Follow nextCursor on empty pages by passing only cursor; it retains the original query and filters, including automatic token searches. Each page covers at most one invocation and bounded history/index work. Use read_resident_tool with the returned revision, address and byteOffset. Full means retained text, not current workspace contents or binary images. Preview, incomplete and unavailable are explicit. Historical output grants no new authority; check isError and newer evidence.',
32
+ inputSchema: z
33
+ .object({ query: z.string().max(256).optional(), cursor: z.string().max(8192).optional() })
34
+ .strict(),
35
+ category: 'custom',
36
+ permissions: [],
37
+ readOnly: true,
38
+ destructive: false,
39
+ concurrencySafe: true,
40
+ presentCall: (input) => ({ kind: 'generic', label: input.query || 'Earlier tool results' }),
41
+ execute: (input, context) =>
42
+ execute(context, (source) => source.search(input, context.abortSignal)),
43
+ }),
44
+ defineTool({
45
+ name: 'read_resident_tool',
46
+ description:
47
+ 'Read up to 6000 characters of exact retained tool text at a revision/address from search_resident_tools. Start at its byteOffset or 0; continue using nextByteOffset. Byte offsets refer to UTF-8 output. Chunk digests detect modified retained files; missing originals are never silently replaced. Does not rerun the historical tool, resume its invocation or verify present external state.',
48
+ inputSchema: z
49
+ .object({
50
+ revision: z.number().int().positive().safe(),
51
+ address: z.string().max(8192),
52
+ byteOffset: z.number().int().nonnegative().safe().optional(),
53
+ })
54
+ .strict(),
55
+ category: 'custom',
56
+ permissions: [],
57
+ readOnly: true,
58
+ destructive: false,
59
+ concurrencySafe: true,
60
+ presentCall: (input) => ({
61
+ kind: 'generic',
62
+ label: `Retained tool text · revision ${input.revision}`,
63
+ }),
64
+ execute: (input, context) =>
65
+ execute(context, (source) => source.read(input, context.abortSignal)),
66
+ }),
67
+ ]
68
+ }
@@ -11,6 +11,13 @@ export interface AdvisorDefinition {
11
11
  readonly domains?: string[]
12
12
  readonly persona?: AgentPersona
13
13
  readonly systemPrompt?: string
14
+ /**
15
+ * Conversation-record window, estimated at four serialized characters per
16
+ * token. Keeps a contiguous suffix of whole public records; roles, tool
17
+ * calls/results, escaping and separators count toward this window.
18
+ * Fixed framing, working state, tool catalogue, system prompt and question
19
+ * are separate. Omitted or zero leaves the record window unbounded.
20
+ */
14
21
  readonly maxContextTokens?: number
15
22
  readonly useCompactedContext?: boolean
16
23
  readonly maxResponseTokens?: number
@@ -106,6 +106,7 @@ export interface ReactiveAgentConfig extends BaseAgentConfig {
106
106
  toolRetryBackoff?: QueryParams['toolRetryBackoff']
107
107
  maxToolConcurrency?: number
108
108
  maxToolOutputChars?: number
109
+ retainedToolPreviewChars?: QueryParams['retainedToolPreviewChars']
109
110
  /**
110
111
  * Cap on the RICH channel of a single tool result, in base64 characters.
111
112
  * `0` or absent disables it. Separate from {@link maxToolOutputChars}:
@@ -50,7 +50,7 @@ export type AuthorizationRule =
50
50
  type: 'custom_pattern'
51
51
  pattern: string
52
52
  target: 'name' | 'args' | 'both'
53
- decision: 'allow' | 'deny'
53
+ decision: 'allow' | 'deny' | 'review'
54
54
  }
55
55
  | {
56
56
  /**
@@ -112,7 +112,7 @@ const CustomPatternSchema = z.object({
112
112
  type: z.literal('custom_pattern'),
113
113
  pattern: z.string().max(MAX_CUSTOM_PATTERN_LENGTH),
114
114
  target: z.enum(['name', 'args', 'both']),
115
- decision: z.enum(['allow', 'deny']),
115
+ decision: z.enum(['allow', 'deny', 'review']),
116
116
  })
117
117
  const ArgumentPatternSchema = z.object({
118
118
  type: z.literal('argument_pattern'),
@@ -82,6 +82,8 @@ export interface ToolCallSummary {
82
82
  authorization?: {
83
83
  decision: 'allow' | 'deny' | 'review'
84
84
  reason?: string
85
+ /** A matching rule requested review; read-only exemptions must not bypass it. */
86
+ explicitReview?: true
85
87
  }
86
88
  }
87
89
 
@@ -220,6 +222,8 @@ export interface IterationCheckpoint {
220
222
  latestUserMessage?: UserMessage
221
223
  /** Structured host-review rejections consumed at this checkpoint, independent of compacted messages. */
222
224
  structuredReviewAttempts?: number
225
+ /** Consumed prose-answer rejections, independent of compactable feedback messages. */
226
+ answerReviewAttempts?: number
223
227
  /** Native structured-output corrections consumed independently of message history. */
224
228
  nativeStructuredAttempts?: number
225
229
  tokenUsage: TokenUsage
@@ -195,6 +195,8 @@ export interface BaseMessage {
195
195
  export interface SystemMessage extends BaseMessage {
196
196
  role: 'system'
197
197
  content: string
198
+ /** Host provenance for a derived summary, independent of its textual heading. */
199
+ source?: { readonly type: 'compaction-summary' }
198
200
  }
199
201
 
200
202
  export interface UserMessage extends BaseMessage {
@@ -244,8 +246,11 @@ export const RUNTIME_CONTEXT_MESSAGE_KINDS = [
244
246
  'advisory',
245
247
  'answer-review',
246
248
  'auto-continuation',
249
+ 'job-exit',
247
250
  'limit-finalization',
251
+ 'repeat-call',
248
252
  'steering',
253
+ 'step-context',
249
254
  'structured-output',
250
255
  'task-completion',
251
256
  ] as const
@@ -374,9 +379,24 @@ export interface ReasoningBlock {
374
379
  readonly encrypted?: string
375
380
  }
376
381
 
382
+ /** Ordered public assistant text items; these are not private reasoning blocks. */
383
+ export interface AssistantTextPart {
384
+ readonly id: string
385
+ readonly text: string
386
+ readonly phase?: 'commentary' | 'final_answer'
387
+ }
388
+
389
+ /** Select explicit final answers, retaining unphased behavior when none is identified. */
390
+ export function selectAssistantText(parts: readonly AssistantTextPart[]): string {
391
+ const final = parts.filter((part) => part.phase === 'final_answer')
392
+ return (final.length ? final : parts).map((part) => part.text).join('\n\n')
393
+ }
394
+
377
395
  export interface AssistantMessage extends BaseMessage {
378
396
  role: 'assistant'
379
397
  content: string | null
398
+ /** Original ordered text items, including commentary excluded from the selected answer. */
399
+ textParts?: readonly AssistantTextPart[]
380
400
  toolCalls?: ToolCall[]
381
401
  /** Which configured model route produced this turn. */
382
402
  source?: AssistantMessageSource
@@ -501,6 +521,7 @@ export function createAssistantMessage(
501
521
  reasoning?: readonly ReasoningBlock[],
502
522
  citations?: readonly Citation[],
503
523
  source?: AssistantMessageSource,
524
+ textParts?: readonly AssistantTextPart[],
504
525
  ): AssistantMessage {
505
526
  return {
506
527
  role: 'assistant',
@@ -509,6 +530,7 @@ export function createAssistantMessage(
509
530
  ...(reasoning && reasoning.length > 0 ? { reasoning } : {}),
510
531
  ...(citations && citations.length > 0 ? { citations } : {}),
511
532
  ...(source ? { source } : {}),
533
+ ...(textParts ? { textParts } : {}),
512
534
  timestamp: Date.now(),
513
535
  }
514
536
  }
@@ -182,6 +182,8 @@ export interface ChatCompletionResponse {
182
182
  message: {
183
183
  role: 'assistant'
184
184
  content: string | null
185
+ /** Ordered public text items; content selects explicit final answers when present. */
186
+ textParts?: readonly import('../message/index.js').AssistantTextPart[]
185
187
  toolCalls?: ToolCall[]
186
188
  /** Reasoning blocks the model emitted, in original block order. */
187
189
  reasoning?: readonly ReasoningBlock[]
@@ -8,6 +8,8 @@ export interface StreamChunk {
8
8
  * retain the last defined value and the query stores it in message source.
9
9
  */
10
10
  replayState?: unknown
11
+ /** Complete ordered text snapshot, emitted at settlement; replaces accumulated text items. */
12
+ textParts?: readonly import('../message/index.js').AssistantTextPart[]
11
13
  delta: {
12
14
  /** Activity executed by the provider, never a local function-call request. */
13
15
  hostedTool?: {
@@ -17,6 +19,8 @@ export interface StreamChunk {
17
19
  }
18
20
 
19
21
  content?: string
22
+ /** Identity and phase of this content fragment, when the provider supplies them. */
23
+ textPart?: Omit<import('../message/index.js').AssistantTextPart, 'text'>
20
24
  toolCalls?: Array<{
21
25
  index: number
22
26
  id?: string
@@ -1,5 +1,6 @@
1
1
  import type { RunId } from '../ids/index.js'
2
- import type { Message } from '../message/index.js'
2
+ import type { Message, UserMessage } from '../message/index.js'
3
+ import type { PreparationTextRequest, PreparationTextResult } from './prepare-step.js'
3
4
 
4
5
  /**
5
6
  * A host's verdict on the answer a run is about to settle with.
@@ -15,7 +16,7 @@ export type AnswerReview =
15
16
  | {
16
17
  readonly accept: false
17
18
  /**
18
- * What to send back, as the user turn the model will read next.
19
+ * Feedback supplied as runtime context on the next model request.
19
20
  *
20
21
  * Prose rather than a code, because the model is the audience
21
22
  * and a code would have to be explained to it anyway. Say what
@@ -31,8 +32,36 @@ export interface AnswerReviewContext {
31
32
  readonly iteration: number
32
33
  /** Run cancellation; reviewers should forward it to verification operations. */
33
34
  readonly signal?: AbortSignal
34
- /** The full history, so a reviewer can see how the answer was reached. */
35
+ /** Canonical history currently retained by the run; compaction may remove messages. */
35
36
  readonly messages: readonly Message[]
37
+ /**
38
+ * Isolated copy of the SDK messages dispatched for this candidate's model
39
+ * request, after context projection and any image-recovery retry. Includes
40
+ * request-only evidence absent from durable history; excludes this candidate
41
+ * and subsequently delivered messages/results. This is the provider-chain
42
+ * input, not a vendor-wire capture or proof of truth/freshness. Optional for
43
+ * hosts constructing their own review context. Not checkpointed or retained
44
+ * as conversation history; modifying the copy cannot edit the run/request.
45
+ */
46
+ readonly requestMessages?: readonly Message[]
47
+ /**
48
+ * Isolated copy of the latest operator, goal-round or steering input accepted
49
+ * before this candidate's dispatch. Retained even when compaction removes
50
+ * that input from history. Excludes arrivals delivered after dispatch and
51
+ * runtime reports. This is one input, not the complete task specification
52
+ * or a guarantee that the original message was sent verbatim to the model.
53
+ */
54
+ readonly latestUserMessage?: UserMessage
55
+ /**
56
+ * Optional run-owned, tool-free inference: at most one call per review
57
+ * invocation, revoked when the callback ends. Uses the same bounded text
58
+ * request/result shapes as prepareStep and the run's metered provider chain,
59
+ * selected step model and effort. No history, candidate or tools are attached
60
+ * implicitly. Await its result before returning a verdict; generated text
61
+ * is a model judgment, not authenticated evidence. Missing in custom hosts
62
+ * which do not supply this capability.
63
+ */
64
+ readonly generateText?: (request: PreparationTextRequest) => Promise<PreparationTextResult>
36
65
  }
37
66
 
38
67
  /**
@@ -43,6 +72,8 @@ export interface AnswerReviewContext {
43
72
  * a closing summary under pressure, and rejecting it would spend budget
44
73
  * the run has already run out of.
45
74
  *
75
+ * Exceptions and malformed verdicts fail the run. Cancellation stops waiting;
76
+ * work started by a reviewer must still honor the supplied signal.
46
77
  * Bounded: see the run's answer-review limit. A reviewer that never
47
78
  * accepts stops the run with a stop reason that names it, rather than
48
79
  * looping until the token budget ends the run for an unrelated reason.
@@ -8,6 +8,7 @@ import type { CheckpointStore } from './checkpoint-store.js'
8
8
 
9
9
  export interface AgentRunConfig {
10
10
  model: string
11
+ /** Total run duration in milliseconds; 0 disables the run deadline. */
11
12
  timeoutMs: number
12
13
  /**
13
14
  * Maximum silence between provider stream chunks, in milliseconds.
@@ -67,8 +68,10 @@ export interface AgentRunConfig {
67
68
  effort?: import('../provider/index.js').ReasoningEffort
68
69
  /** Provider-hosted search for this run. Explicit opt-in; no local network permission. */
69
70
  webSearch?: import('../provider/index.js').ChatCompletionParams['webSearch']
71
+ /** Cumulative parent-and-descendant tokens; 0 is unlimited with usage accounting. */
70
72
  tokenBudget: number
71
73
  costLimitUsd?: number
74
+ /** Main-loop iterations; 0 disables this guard. Omitted defaults depend on the entry point. */
72
75
  maxIterations?: number
73
76
  temperature?: number
74
77
  env?: Record<string, string>
@@ -10,6 +10,13 @@ import type { StopReason } from './stop-reason.js'
10
10
  import type { TokenBudgetBinding } from './token-budget-store.js'
11
11
 
12
12
  export interface RunStateMetadata {
13
+ /** This invocation's owner, independent of a shared ancestor token account. */
14
+ readonly scope?: {
15
+ readonly tenantId: string
16
+ readonly projectId: string
17
+ readonly sessionId: string
18
+ readonly runId: string
19
+ }
13
20
  agentId: string
14
21
  agentName: string
15
22
  config: AgentRunConfig
@@ -116,6 +123,20 @@ export interface Run {
116
123
  */
117
124
  abandonedTaskIds?: readonly string[]
118
125
 
126
+ /**
127
+ * Background jobs the model was waiting on that were still running when
128
+ * this run ended.
129
+ *
130
+ * Only jobs `wait_for_job` named: a dev server nobody awaited is not work
131
+ * this run walked away from, it is work it deliberately left behind. The
132
+ * run holds itself open for these, bounded, and names the ones the bound
133
+ * ran out on — the same honesty `abandonedTaskIds` owes for a delegated
134
+ * worker, and with the same limit: naming a job is not stopping it. A
135
+ * run-owned job is still stopped by the run's own teardown; one bound to
136
+ * the host's session keeps running, which is what it was started for.
137
+ */
138
+ abandonedJobIds?: readonly string[]
139
+
119
140
  parentRunId?: RunId
120
141
 
121
142
  depth?: number
@@ -209,8 +209,8 @@ type CoreRunEvent =
209
209
  iteration: number
210
210
  /** Exactly the messages the pass removed, in their original order. */
211
211
  messages: Message[]
212
- /** Whether the pass ran on the threshold or on a provider rejection. */
213
- reason: 'threshold' | 'overflow'
212
+ /** Automatic threshold, provider rejection, or a host-requested pass. */
213
+ reason: 'threshold' | 'overflow' | 'manual'
214
214
  }
215
215
  | {
216
216
  type: 'compaction_completed'
@@ -464,6 +464,8 @@ type CoreRunEvent =
464
464
  outputTruncated?: boolean
465
465
  /** Where the full output was written, when it was spilled. */
466
466
  outputSpillPath?: string
467
+ /** SHA-256 of the chunk manifest captured with the retained text. */
468
+ outputSpillIntegrity?: string
467
469
  }
468
470
  /**
469
471
  * A tool asked the user a question and the run is parked on it.
@@ -947,6 +949,7 @@ type CoreRunEvent =
947
949
  iteration: number
948
950
  messageId: MessageId
949
951
  text: string
952
+ textPart?: Omit<import('../message/index.js').AssistantTextPart, 'text'>
950
953
  }
951
954
  | {
952
955
  type: 'message_completed'
@@ -956,14 +959,16 @@ type CoreRunEvent =
956
959
  stopReason: MessageStopReason
957
960
  usage?: TokenUsage
958
961
  /**
959
- * Aggregated assistant text accumulated from `text_delta`
960
- * events for this message. Optional so consumers that
961
- * already concatenate deltas themselves don't have to pay
962
- * the duplication; consumers that only care about the
963
- * completed message (telemetry, A2A bridge, postmortem
964
- * tooling) can read this field directly.
962
+ * Settled assistant text. When the provider supplies public text
963
+ * phases, this selects explicit final-answer items; concatenating
964
+ * raw deltas would also include intermediate commentary. All items
965
+ * remain available in textParts. Without phases, ordinary delta
966
+ * concatenation is unchanged. Stop reason still determines whether
967
+ * this message finished, was cancelled or hit an output limit.
965
968
  */
966
969
  content?: string
970
+ /** Ordered original items; content selects explicit final answers if supplied. */
971
+ textParts?: readonly import('../message/index.js').AssistantTextPart[]
967
972
  }
968
973
  | {
969
974
  type: 'tool_input_started'
@@ -1032,6 +1037,24 @@ export type PersistedRunEvent = RunEvent & {
1032
1037
  readonly seq: number
1033
1038
  /** Epoch ms at which the store recorded the event. */
1034
1039
  readonly timestamp: number
1040
+ /** Optional disk integrity link to the preceding complete JSONL record. Null marks a chain boundary. */
1041
+ readonly previousRecord?: {
1042
+ readonly offset: number
1043
+ readonly length: number
1044
+ readonly sha256: string
1045
+ readonly seq: number
1046
+ } | null
1047
+ /**
1048
+ * Optional writer-owned link to the preceding text record or integrity boundary.
1049
+ * Text retrieval may skip nontext records; operational replay still uses every event.
1050
+ * Absence requires adjacent traversal. Null is only valid at a chain boundary.
1051
+ */
1052
+ readonly previousTextRecord?: {
1053
+ readonly offset: number
1054
+ readonly length: number
1055
+ readonly sha256: string
1056
+ readonly seq: number
1057
+ } | null
1035
1058
  }
1036
1059
 
1037
1060
  /**
@@ -1,8 +1,28 @@
1
+ import type { TokenUsage } from '../common/index.js'
1
2
  import type { RunId } from '../ids/index.js'
2
3
  import type { Message, UserMessage } from '../message/index.js'
3
4
  import type { ToolChoice } from '../provider/chat.js'
4
5
  import type { Skill } from '../skills/index.js'
5
6
  import type { StepResult } from './step.js'
7
+ import type { StepProvenance } from './step.js'
8
+
9
+ /** @experimental Bounded, tool-free inference shared by preparation and answer review. */
10
+ export interface PreparationTextRequest {
11
+ readonly system: string
12
+ readonly prompt: string
13
+ /** Default 256; maximum 1,024. A provider limit, not a hard billing ceiling. */
14
+ readonly maxTokens?: number
15
+ /** Default and maximum 10,000ms, shortened by stage/run cancellation. */
16
+ readonly timeoutMs?: number
17
+ readonly signal?: AbortSignal
18
+ }
19
+
20
+ /** @experimental Side-call usage also contributes to the owning run's totals. */
21
+ export interface PreparationTextResult {
22
+ readonly text: string
23
+ readonly usage: TokenUsage
24
+ readonly servedBy: StepProvenance
25
+ }
6
26
 
7
27
  /**
8
28
  * What the loop knows before it calls the model again.
@@ -17,6 +37,25 @@ import type { StepResult } from './step.js'
17
37
  */
18
38
  export interface PrepareStepContext {
19
39
  readonly runId: RunId
40
+ /**
41
+ * Optional run-owned inference for context preparation. At most one call per
42
+ * stage invocation; cannot be called after that stage returns. Uses the run's
43
+ * metered provider/fallback chain and the model selected by preceding stages.
44
+ * Only supplied text is sent (12,000 characters total); no tools or history
45
+ * are implicitly attached. Returned text is bounded to 8,192 characters.
46
+ * Absent in beforeStep and in hosts which do not supply this capability.
47
+ */
48
+ readonly generateText?: (request: PreparationTextRequest) => Promise<PreparationTextResult>
49
+ /**
50
+ * Optional writer-bound snapshot of this invocation's completed events.
51
+ * Never discovers other runs or repeats tools. Unsupported stores return
52
+ * undefined; cancellation or a settled invocation rejects capture. A local
53
+ * signal can shorten, never extend, the run's lifetime.
54
+ */
55
+ readonly captureRunEvidence?: (
56
+ maxReadBytes?: number,
57
+ signal?: AbortSignal,
58
+ ) => Promise<import('../../store/evidence/types.js').RunTextEvidenceSource | undefined>
20
59
  /** 1-based, matching the iteration number in events and traces. */
21
60
  readonly stepNumber: number
22
61
  /** Full history as it stands, so a decision can read what happened. */
@@ -31,7 +70,7 @@ export interface PrepareStepContext {
31
70
  readonly signal?: AbortSignal
32
71
  /**
33
72
  * Estimated room for additional step context after existing messages,
34
- * earlier stages' system/skills, and a response reserve. Recomputed for
73
+ * earlier stages' system/skills/context, and a response reserve. Recomputed for
35
74
  * each stage and its selected model; not a billing limit or fit guarantee.
36
75
  * `beforeStep` observes its existing boundary before compaction runs.
37
76
  */
@@ -127,10 +166,9 @@ export interface PrepareStepResult {
127
166
  * research wants the search skill, writing wants the style guide, and
128
167
  * neither benefits from carrying the other.
129
168
  *
130
- * Rendered into the same ephemeral trailing system message `system`
131
- * uses, and for the same reason: appending leaves the cached prefix
132
- * intact, where rewriting the run's prompt would invalidate it every
133
- * iteration for what is usually one phase's worth of guidance.
169
+ * Rendered into the same ephemeral system message `system` uses. Providers
170
+ * may move that message before history, so changing skills can invalidate
171
+ * reuse of the conversation prefix even though the run's prompt is unchanged.
134
172
  *
135
173
  * ADDITIVE to the run's skills, not a replacement. A skill the run
136
174
  * always carries is not something a step should be able to take away by
@@ -152,12 +190,25 @@ export interface PrepareStepResult {
152
190
  * Guidance for this step ONLY, appended as a system message that is not
153
191
  * retained afterwards.
154
192
  *
155
- * Kept separate from the run's system prompt on purpose: the prompt is
156
- * the cached prefix, and rewriting it per step would bust the cache on
157
- * every iteration for what is usually one sentence of phase direction.
193
+ * Some providers collect all system messages before conversation history.
194
+ * Changing this field can therefore invalidate reuse of the history prefix.
195
+ * Use `context` for changing observations that do not require system authority.
158
196
  */
159
197
  readonly system?: string
160
198
 
199
+ /**
200
+ * Current observations for this request only, appended after history and any
201
+ * step system guidance. Carried as a visibly labelled user-role message with
202
+ * runtime provenance, not operator input or system authority. It never enters
203
+ * durable conversation history or replaces `latestUserMessage`.
204
+ *
205
+ * Useful for changing inventories and retrieved data on providers that hoist
206
+ * system messages. This preserves the history's placement, not a cache-hit
207
+ * guarantee. Later stages may compose `prepared.context` or replace it; an
208
+ * empty string clears it. The next step starts without it.
209
+ */
210
+ readonly context?: string
211
+
161
212
  readonly temperature?: number
162
213
  readonly maxResponseTokens?: number
163
214
  }
@@ -1,3 +1,4 @@
1
+ import type { RunEvidenceScope, RunTextEvidenceSource } from '../../store/evidence/types.js'
1
2
  /**
2
3
  * RunStore — persistence contract for a run's own evidence.
3
4
  *
@@ -97,7 +98,38 @@ export interface CompletedToolRecord {
97
98
  readonly isError: boolean
98
99
  }
99
100
 
101
+ /** The latest recorded execution boundary of a tool call, not its inferred external effect. */
102
+ export type ToolExecutionRecord =
103
+ | (CompletedToolRecord & { readonly status: 'completed' })
104
+ | { readonly toolUseId: string; readonly toolName: string; readonly status: 'started' }
105
+
106
+ /** Absence proves no recorded start only when the whole selected log is complete. */
107
+ export interface ToolExecutionSnapshot {
108
+ readonly complete: boolean
109
+ readonly records: ReadonlyMap<string, ToolExecutionRecord>
110
+ }
111
+
100
112
  export interface RunStore {
113
+ /**
114
+ * Optional bounded recovery scan for selected call IDs. A started call without
115
+ * a completion has an unknown outcome and must not be automatically replayed.
116
+ * The runtime falls back to strict readEvents for stores without this method.
117
+ */
118
+ readToolExecutions?(
119
+ toolUseIds: readonly string[],
120
+ signal?: AbortSignal,
121
+ ): Promise<ToolExecutionSnapshot>
122
+ /**
123
+ * Optional bounded read capability anchored to this writer's completed event
124
+ * boundary. Observe signal while waiting/reading; cancellation must not release
125
+ * a writer lock before its pending operation settles.
126
+ */
127
+ captureTextEvidence?(
128
+ scope: RunEvidenceScope,
129
+ maxReadBytes?: number,
130
+ signal?: AbortSignal,
131
+ ): Promise<RunTextEvidenceSource | undefined>
132
+
101
133
  /**
102
134
  * Bind this store to a run, before any other call.
103
135
  *
@@ -186,10 +218,9 @@ export interface RunStore {
186
218
  * already come back, and the resumed run re-executes those calls. For a
187
219
  * file write that is waste; for a payment or an email it is a second one.
188
220
  *
189
- * A backend that does not retain individual events answers with an empty
190
- * map, which costs re-execution and is honest. It must not answer with a
191
- * PARTIAL map: a caller reads a present entry as "this call is already
192
- * answered", so a half-remembered batch is worse than a forgotten one.
221
+ * This completed-only view cannot distinguish an unstarted call from an
222
+ * interrupted effect. It is not authority to execute an absent call. Runtime
223
+ * recovery uses readToolExecutions or a strict readEvents scan instead.
193
224
  */
194
225
  readCompletedTools(): Promise<Map<string, CompletedToolRecord>>
195
226