@namzu/sdk 34.2.0 → 35.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 (637) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/README.md +2 -6
  3. package/dist/agents/PipelineAgent.d.ts.map +1 -1
  4. package/dist/agents/PipelineAgent.js +118 -100
  5. package/dist/agents/PipelineAgent.js.map +1 -1
  6. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  7. package/dist/agents/ReactiveAgent.js +2 -0
  8. package/dist/agents/ReactiveAgent.js.map +1 -1
  9. package/dist/agents/RouterAgent.d.ts.map +1 -1
  10. package/dist/agents/RouterAgent.js +105 -61
  11. package/dist/agents/RouterAgent.js.map +1 -1
  12. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  13. package/dist/agents/SupervisorAgent.js +8 -4
  14. package/dist/agents/SupervisorAgent.js.map +1 -1
  15. package/dist/agents/budget.d.ts +6 -0
  16. package/dist/agents/budget.d.ts.map +1 -0
  17. package/dist/agents/budget.js +33 -0
  18. package/dist/agents/budget.js.map +1 -0
  19. package/dist/agents/explore.d.ts +20 -0
  20. package/dist/agents/explore.d.ts.map +1 -0
  21. package/dist/agents/explore.js +26 -0
  22. package/dist/agents/explore.js.map +1 -0
  23. package/dist/agents/file-definitions.d.ts +80 -0
  24. package/dist/agents/file-definitions.d.ts.map +1 -0
  25. package/dist/agents/file-definitions.js +179 -0
  26. package/dist/agents/file-definitions.js.map +1 -0
  27. package/dist/agents/index.d.ts +3 -0
  28. package/dist/agents/index.d.ts.map +1 -1
  29. package/dist/agents/index.js +2 -0
  30. package/dist/agents/index.js.map +1 -1
  31. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  32. package/dist/bridge/a2a/mapper.js +6 -0
  33. package/dist/bridge/a2a/mapper.js.map +1 -1
  34. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  35. package/dist/bridge/sse/mapper.js +22 -0
  36. package/dist/bridge/sse/mapper.js.map +1 -1
  37. package/dist/bus/lock.d.ts.map +1 -1
  38. package/dist/bus/lock.js +1 -10
  39. package/dist/bus/lock.js.map +1 -1
  40. package/dist/compaction/consolidation.d.ts +31 -0
  41. package/dist/compaction/consolidation.d.ts.map +1 -0
  42. package/dist/compaction/consolidation.js +63 -0
  43. package/dist/compaction/consolidation.js.map +1 -0
  44. package/dist/compaction/factory.d.ts.map +1 -1
  45. package/dist/compaction/factory.js +3 -0
  46. package/dist/compaction/factory.js.map +1 -1
  47. package/dist/compaction/index.d.ts +6 -1
  48. package/dist/compaction/index.d.ts.map +1 -1
  49. package/dist/compaction/index.js +6 -0
  50. package/dist/compaction/index.js.map +1 -1
  51. package/dist/compaction/manager.d.ts +7 -0
  52. package/dist/compaction/manager.d.ts.map +1 -1
  53. package/dist/compaction/manager.js +31 -0
  54. package/dist/compaction/manager.js.map +1 -1
  55. package/dist/compaction/plan.d.ts +23 -0
  56. package/dist/compaction/plan.d.ts.map +1 -1
  57. package/dist/compaction/plan.js +41 -24
  58. package/dist/compaction/plan.js.map +1 -1
  59. package/dist/compaction/salience/bm25.d.ts +26 -0
  60. package/dist/compaction/salience/bm25.d.ts.map +1 -0
  61. package/dist/compaction/salience/bm25.js +56 -0
  62. package/dist/compaction/salience/bm25.js.map +1 -0
  63. package/dist/compaction/salience/goal.d.ts +21 -0
  64. package/dist/compaction/salience/goal.d.ts.map +1 -0
  65. package/dist/compaction/salience/goal.js +32 -0
  66. package/dist/compaction/salience/goal.js.map +1 -0
  67. package/dist/compaction/salience/index.d.ts +4 -0
  68. package/dist/compaction/salience/index.d.ts.map +1 -0
  69. package/dist/compaction/salience/index.js +4 -0
  70. package/dist/compaction/salience/index.js.map +1 -0
  71. package/dist/compaction/salience/minhash.d.ts +17 -0
  72. package/dist/compaction/salience/minhash.d.ts.map +1 -0
  73. package/dist/compaction/salience/minhash.js +54 -0
  74. package/dist/compaction/salience/minhash.js.map +1 -0
  75. package/dist/compaction/salience/score.d.ts +64 -0
  76. package/dist/compaction/salience/score.d.ts.map +1 -0
  77. package/dist/compaction/salience/score.js +256 -0
  78. package/dist/compaction/salience/score.js.map +1 -0
  79. package/dist/compaction/salience/tokenize.d.ts +20 -0
  80. package/dist/compaction/salience/tokenize.d.ts.map +1 -0
  81. package/dist/compaction/salience/tokenize.js +92 -0
  82. package/dist/compaction/salience/tokenize.js.map +1 -0
  83. package/dist/compaction/salience/working-set.d.ts +59 -0
  84. package/dist/compaction/salience/working-set.d.ts.map +1 -0
  85. package/dist/compaction/salience/working-set.js +137 -0
  86. package/dist/compaction/salience/working-set.js.map +1 -0
  87. package/dist/compaction/serializer.d.ts +2 -0
  88. package/dist/compaction/serializer.d.ts.map +1 -1
  89. package/dist/compaction/serializer.js +15 -0
  90. package/dist/compaction/serializer.js.map +1 -1
  91. package/dist/compaction/token-estimate.d.ts +13 -0
  92. package/dist/compaction/token-estimate.d.ts.map +1 -0
  93. package/dist/compaction/token-estimate.js +58 -0
  94. package/dist/compaction/token-estimate.js.map +1 -0
  95. package/dist/compaction/tool-result-editing.d.ts +10 -2
  96. package/dist/compaction/tool-result-editing.d.ts.map +1 -1
  97. package/dist/compaction/tool-result-editing.js +22 -24
  98. package/dist/compaction/tool-result-editing.js.map +1 -1
  99. package/dist/compaction/types.d.ts +22 -1
  100. package/dist/compaction/types.d.ts.map +1 -1
  101. package/dist/compaction/wire.d.ts +3 -1
  102. package/dist/compaction/wire.d.ts.map +1 -1
  103. package/dist/compaction/wire.js +2 -0
  104. package/dist/compaction/wire.js.map +1 -1
  105. package/dist/config/runtime.d.ts +58 -28
  106. package/dist/config/runtime.d.ts.map +1 -1
  107. package/dist/config/runtime.js +13 -1
  108. package/dist/config/runtime.js.map +1 -1
  109. package/dist/connector/builtins/http.d.ts.map +1 -1
  110. package/dist/connector/builtins/http.js +2 -8
  111. package/dist/connector/builtins/http.js.map +1 -1
  112. package/dist/connector/builtins/webhook.js +2 -2
  113. package/dist/connector/builtins/webhook.js.map +1 -1
  114. package/dist/connector/mcp/adapter.d.ts +2 -0
  115. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  116. package/dist/connector/mcp/adapter.js +30 -0
  117. package/dist/connector/mcp/adapter.js.map +1 -1
  118. package/dist/connector/tools/adapter.js +2 -2
  119. package/dist/connector/tools/adapter.js.map +1 -1
  120. package/dist/connector/tools/definitions.js +2 -2
  121. package/dist/connector/tools/definitions.js.map +1 -1
  122. package/dist/constants/compaction/index.d.ts +1 -0
  123. package/dist/constants/compaction/index.d.ts.map +1 -1
  124. package/dist/constants/compaction/index.js +1 -0
  125. package/dist/constants/compaction/index.js.map +1 -1
  126. package/dist/constants/telemetry/index.d.ts +0 -1
  127. package/dist/constants/telemetry/index.d.ts.map +1 -1
  128. package/dist/constants/telemetry/index.js +0 -1
  129. package/dist/constants/telemetry/index.js.map +1 -1
  130. package/dist/contracts/a2a.d.ts +5 -5
  131. package/dist/contracts/api.d.ts +4 -2
  132. package/dist/contracts/api.d.ts.map +1 -1
  133. package/dist/contracts/schemas.d.ts +1 -15
  134. package/dist/contracts/schemas.d.ts.map +1 -1
  135. package/dist/contracts/schemas.js +5 -20
  136. package/dist/contracts/schemas.js.map +1 -1
  137. package/dist/invariants/index.d.ts +1 -1
  138. package/dist/manager/agent/lifecycle.d.ts +2 -18
  139. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  140. package/dist/manager/agent/lifecycle.js +373 -340
  141. package/dist/manager/agent/lifecycle.js.map +1 -1
  142. package/dist/manager/run/persistence.d.ts +3 -0
  143. package/dist/manager/run/persistence.d.ts.map +1 -1
  144. package/dist/manager/run/persistence.js +35 -5
  145. package/dist/manager/run/persistence.js.map +1 -1
  146. package/dist/plugin/index.d.ts +2 -0
  147. package/dist/plugin/index.d.ts.map +1 -1
  148. package/dist/plugin/index.js +1 -0
  149. package/dist/plugin/index.js.map +1 -1
  150. package/dist/plugin/shell-hook.d.ts +128 -0
  151. package/dist/plugin/shell-hook.d.ts.map +1 -0
  152. package/dist/plugin/shell-hook.js +299 -0
  153. package/dist/plugin/shell-hook.js.map +1 -0
  154. package/dist/prompt/coding-agent-doctrine.d.ts +63 -0
  155. package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -0
  156. package/dist/prompt/coding-agent-doctrine.js +100 -0
  157. package/dist/prompt/coding-agent-doctrine.js.map +1 -0
  158. package/dist/prompt/index.d.ts +2 -0
  159. package/dist/prompt/index.d.ts.map +1 -1
  160. package/dist/prompt/index.js +1 -0
  161. package/dist/prompt/index.js.map +1 -1
  162. package/dist/provider/errors.d.ts +1 -1
  163. package/dist/provider/errors.js +1 -1
  164. package/dist/provider/fallback.d.ts +2 -0
  165. package/dist/provider/fallback.d.ts.map +1 -1
  166. package/dist/provider/fallback.js +3 -1
  167. package/dist/provider/fallback.js.map +1 -1
  168. package/dist/provider/retry.d.ts +2 -0
  169. package/dist/provider/retry.d.ts.map +1 -1
  170. package/dist/provider/retry.js +3 -1
  171. package/dist/provider/retry.js.map +1 -1
  172. package/dist/provider/token-budget.d.ts +13 -0
  173. package/dist/provider/token-budget.d.ts.map +1 -0
  174. package/dist/provider/token-budget.js +102 -0
  175. package/dist/provider/token-budget.js.map +1 -0
  176. package/dist/public-runtime.d.ts +12 -12
  177. package/dist/public-runtime.d.ts.map +1 -1
  178. package/dist/public-runtime.js +14 -9
  179. package/dist/public-runtime.js.map +1 -1
  180. package/dist/public-tools.d.ts +2 -0
  181. package/dist/public-tools.d.ts.map +1 -1
  182. package/dist/public-tools.js +2 -0
  183. package/dist/public-tools.js.map +1 -1
  184. package/dist/public-types.d.ts +12 -2
  185. package/dist/public-types.d.ts.map +1 -1
  186. package/dist/registry/command/kernel-commands.d.ts.map +1 -1
  187. package/dist/registry/command/kernel-commands.js +18 -6
  188. package/dist/registry/command/kernel-commands.js.map +1 -1
  189. package/dist/registry/tool/execute.d.ts.map +1 -1
  190. package/dist/registry/tool/execute.js +4 -1
  191. package/dist/registry/tool/execute.js.map +1 -1
  192. package/dist/run/LimitChecker.js +1 -1
  193. package/dist/run/LimitChecker.js.map +1 -1
  194. package/dist/run/drain.js +1 -1
  195. package/dist/run/reporter.d.ts.map +1 -1
  196. package/dist/run/reporter.js +15 -0
  197. package/dist/run/reporter.js.map +1 -1
  198. package/dist/run/token-budget.d.ts +108 -0
  199. package/dist/run/token-budget.d.ts.map +1 -0
  200. package/dist/run/token-budget.js +591 -0
  201. package/dist/run/token-budget.js.map +1 -0
  202. package/dist/runtime/jobs/registry.d.ts +29 -0
  203. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  204. package/dist/runtime/jobs/registry.js +98 -18
  205. package/dist/runtime/jobs/registry.js.map +1 -1
  206. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  207. package/dist/runtime/query/checkpoint.js +10 -3
  208. package/dist/runtime/query/checkpoint.js.map +1 -1
  209. package/dist/runtime/query/context.d.ts +2 -26
  210. package/dist/runtime/query/context.d.ts.map +1 -1
  211. package/dist/runtime/query/context.js +1 -29
  212. package/dist/runtime/query/context.js.map +1 -1
  213. package/dist/runtime/query/executor.d.ts +12 -9
  214. package/dist/runtime/query/executor.d.ts.map +1 -1
  215. package/dist/runtime/query/executor.js +95 -46
  216. package/dist/runtime/query/executor.js.map +1 -1
  217. package/dist/runtime/query/guard.d.ts.map +1 -1
  218. package/dist/runtime/query/guard.js +8 -0
  219. package/dist/runtime/query/guard.js.map +1 -1
  220. package/dist/runtime/query/index.d.ts +35 -4
  221. package/dist/runtime/query/index.d.ts.map +1 -1
  222. package/dist/runtime/query/index.js +152 -52
  223. package/dist/runtime/query/index.js.map +1 -1
  224. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  225. package/dist/runtime/query/iteration/index.js +16 -5
  226. package/dist/runtime/query/iteration/index.js.map +1 -1
  227. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  228. package/dist/runtime/query/iteration/phases/compaction.js +98 -30
  229. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  230. package/dist/runtime/query/iteration/phases/context.d.ts +2 -0
  231. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  232. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  233. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  234. package/dist/runtime/query/iteration/phases/tool-review.js +29 -7
  235. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  236. package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -1
  237. package/dist/runtime/query/iteration/phases/working-memory.js +25 -15
  238. package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -1
  239. package/dist/runtime/query/plugin-hooks.d.ts +1 -1
  240. package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
  241. package/dist/runtime/query/plugin-hooks.js +20 -1
  242. package/dist/runtime/query/plugin-hooks.js.map +1 -1
  243. package/dist/runtime/query/repeat-call.d.ts +20 -2
  244. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  245. package/dist/runtime/query/repeat-call.js +35 -7
  246. package/dist/runtime/query/repeat-call.js.map +1 -1
  247. package/dist/runtime/query/result.d.ts.map +1 -1
  248. package/dist/runtime/query/result.js +9 -0
  249. package/dist/runtime/query/result.js.map +1 -1
  250. package/dist/runtime/query/review-policy.d.ts +142 -0
  251. package/dist/runtime/query/review-policy.d.ts.map +1 -0
  252. package/dist/runtime/query/review-policy.js +144 -0
  253. package/dist/runtime/query/review-policy.js.map +1 -0
  254. package/dist/runtime/query/run-state.d.ts.map +1 -1
  255. package/dist/runtime/query/run-state.js +4 -0
  256. package/dist/runtime/query/run-state.js.map +1 -1
  257. package/dist/runtime/query/steering.d.ts +4 -0
  258. package/dist/runtime/query/steering.d.ts.map +1 -1
  259. package/dist/runtime/query/steering.js +29 -0
  260. package/dist/runtime/query/steering.js.map +1 -1
  261. package/dist/runtime/query/token-budget.d.ts +7 -0
  262. package/dist/runtime/query/token-budget.d.ts.map +1 -0
  263. package/dist/runtime/query/token-budget.js +101 -0
  264. package/dist/runtime/query/token-budget.js.map +1 -0
  265. package/dist/runtime/query/tool-output-budget.d.ts +2 -0
  266. package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
  267. package/dist/runtime/query/tool-output-budget.js +29 -11
  268. package/dist/runtime/query/tool-output-budget.js.map +1 -1
  269. package/dist/runtime/query/tool-pause.d.ts.map +1 -1
  270. package/dist/runtime/query/tool-pause.js +4 -2
  271. package/dist/runtime/query/tool-pause.js.map +1 -1
  272. package/dist/runtime/query/tooling.d.ts +4 -0
  273. package/dist/runtime/query/tooling.d.ts.map +1 -1
  274. package/dist/runtime/query/tooling.js +4 -0
  275. package/dist/runtime/query/tooling.js.map +1 -1
  276. package/dist/sandbox/provider/local.d.ts +3 -1
  277. package/dist/sandbox/provider/local.d.ts.map +1 -1
  278. package/dist/sandbox/provider/local.js +112 -12
  279. package/dist/sandbox/provider/local.js.map +1 -1
  280. package/dist/scheduler/delegating.d.ts +1 -0
  281. package/dist/scheduler/delegating.d.ts.map +1 -1
  282. package/dist/scheduler/delegating.js +29 -12
  283. package/dist/scheduler/delegating.js.map +1 -1
  284. package/dist/scheduler/local.d.ts +1 -0
  285. package/dist/scheduler/local.d.ts.map +1 -1
  286. package/dist/scheduler/local.js +4 -7
  287. package/dist/scheduler/local.js.map +1 -1
  288. package/dist/session/index.d.ts +0 -1
  289. package/dist/session/index.d.ts.map +1 -1
  290. package/dist/session/index.js +0 -1
  291. package/dist/session/index.js.map +1 -1
  292. package/dist/session/workspace/path-builder.d.ts.map +1 -1
  293. package/dist/session/workspace/path-builder.js +5 -4
  294. package/dist/session/workspace/path-builder.js.map +1 -1
  295. package/dist/store/feedback/disk.d.ts.map +1 -1
  296. package/dist/store/feedback/disk.js +4 -6
  297. package/dist/store/feedback/disk.js.map +1 -1
  298. package/dist/store/index.d.ts +2 -0
  299. package/dist/store/index.d.ts.map +1 -1
  300. package/dist/store/index.js +1 -0
  301. package/dist/store/index.js.map +1 -1
  302. package/dist/store/memory/disk.d.ts.map +1 -1
  303. package/dist/store/memory/disk.js +3 -12
  304. package/dist/store/memory/disk.js.map +1 -1
  305. package/dist/store/run/checkpoint-disk.d.ts +3 -3
  306. package/dist/store/run/checkpoint-disk.d.ts.map +1 -1
  307. package/dist/store/run/checkpoint-disk.js +14 -26
  308. package/dist/store/run/checkpoint-disk.js.map +1 -1
  309. package/dist/store/run/claim-disk.js +1 -1
  310. package/dist/store/run/conformance.d.ts +1 -1
  311. package/dist/store/run/conformance.d.ts.map +1 -1
  312. package/dist/store/run/conformance.js +41 -33
  313. package/dist/store/run/conformance.js.map +1 -1
  314. package/dist/store/run/disk.d.ts.map +1 -1
  315. package/dist/store/run/disk.js +20 -4
  316. package/dist/store/run/disk.js.map +1 -1
  317. package/dist/store/run/token-budget-disk.d.ts +37 -0
  318. package/dist/store/run/token-budget-disk.d.ts.map +1 -0
  319. package/dist/store/run/token-budget-disk.js +208 -0
  320. package/dist/store/run/token-budget-disk.js.map +1 -0
  321. package/dist/store/session/disk.d.ts +4 -13
  322. package/dist/store/session/disk.d.ts.map +1 -1
  323. package/dist/store/session/disk.js +34 -31
  324. package/dist/store/session/disk.js.map +1 -1
  325. package/dist/store/session/memory.d.ts +2 -0
  326. package/dist/store/session/memory.d.ts.map +1 -1
  327. package/dist/store/session/memory.js +41 -2
  328. package/dist/store/session/memory.js.map +1 -1
  329. package/dist/store/task/disk.d.ts.map +1 -1
  330. package/dist/store/task/disk.js +7 -8
  331. package/dist/store/task/disk.js.map +1 -1
  332. package/dist/store/topic/memory.d.ts +2 -0
  333. package/dist/store/topic/memory.d.ts.map +1 -1
  334. package/dist/store/topic/memory.js +13 -1
  335. package/dist/store/topic/memory.js.map +1 -1
  336. package/dist/test-support/ids.d.ts +4 -19
  337. package/dist/test-support/ids.d.ts.map +1 -1
  338. package/dist/test-support/ids.js +51 -59
  339. package/dist/test-support/ids.js.map +1 -1
  340. package/dist/tools/advisory/index.d.ts.map +1 -1
  341. package/dist/tools/advisory/index.js +3 -1
  342. package/dist/tools/advisory/index.js.map +1 -1
  343. package/dist/tools/builtins/bash.d.ts +2 -0
  344. package/dist/tools/builtins/bash.d.ts.map +1 -1
  345. package/dist/tools/builtins/bash.js +9 -11
  346. package/dist/tools/builtins/bash.js.map +1 -1
  347. package/dist/tools/builtins/computer-use.d.ts +2 -2
  348. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  349. package/dist/tools/builtins/computer-use.js +4 -2
  350. package/dist/tools/builtins/computer-use.js.map +1 -1
  351. package/dist/tools/builtins/edit.js +2 -2
  352. package/dist/tools/builtins/edit.js.map +1 -1
  353. package/dist/tools/builtins/glob.js +3 -3
  354. package/dist/tools/builtins/glob.js.map +1 -1
  355. package/dist/tools/builtins/grep.js +2 -2
  356. package/dist/tools/builtins/grep.js.map +1 -1
  357. package/dist/tools/builtins/ls.js +2 -2
  358. package/dist/tools/builtins/ls.js.map +1 -1
  359. package/dist/tools/builtins/lsp.js +2 -2
  360. package/dist/tools/builtins/lsp.js.map +1 -1
  361. package/dist/tools/builtins/read-file.js +2 -2
  362. package/dist/tools/builtins/read-file.js.map +1 -1
  363. package/dist/tools/builtins/write-file.js +2 -2
  364. package/dist/tools/builtins/write-file.js.map +1 -1
  365. package/dist/tools/coordinator/ask-user-question.d.ts +33 -0
  366. package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -0
  367. package/dist/tools/coordinator/ask-user-question.js +237 -0
  368. package/dist/tools/coordinator/ask-user-question.js.map +1 -0
  369. package/dist/tools/coordinator/index.d.ts +1 -2
  370. package/dist/tools/coordinator/index.d.ts.map +1 -1
  371. package/dist/tools/coordinator/index.js +4 -220
  372. package/dist/tools/coordinator/index.js.map +1 -1
  373. package/dist/tools/memory/read.d.ts.map +1 -1
  374. package/dist/tools/memory/read.js +2 -4
  375. package/dist/tools/memory/read.js.map +1 -1
  376. package/dist/tools/paths.d.ts +13 -0
  377. package/dist/tools/paths.d.ts.map +1 -1
  378. package/dist/tools/paths.js +53 -0
  379. package/dist/tools/paths.js.map +1 -1
  380. package/dist/tools/roster.d.ts +27 -0
  381. package/dist/tools/roster.d.ts.map +1 -0
  382. package/dist/tools/roster.js +42 -0
  383. package/dist/tools/roster.js.map +1 -0
  384. package/dist/types/agent/base.d.ts +5 -0
  385. package/dist/types/agent/base.d.ts.map +1 -1
  386. package/dist/types/agent/pipeline.d.ts +3 -0
  387. package/dist/types/agent/pipeline.d.ts.map +1 -1
  388. package/dist/types/agent/router.d.ts +2 -3
  389. package/dist/types/agent/router.d.ts.map +1 -1
  390. package/dist/types/agent/scheduler.d.ts +3 -0
  391. package/dist/types/agent/scheduler.d.ts.map +1 -1
  392. package/dist/types/agent/task.d.ts +5 -16
  393. package/dist/types/agent/task.d.ts.map +1 -1
  394. package/dist/types/agent/task.js.map +1 -1
  395. package/dist/types/common/index.d.ts.map +1 -1
  396. package/dist/types/common/index.js +3 -0
  397. package/dist/types/common/index.js.map +1 -1
  398. package/dist/types/computer-use/index.d.ts +8 -0
  399. package/dist/types/computer-use/index.d.ts.map +1 -1
  400. package/dist/types/computer-use/index.js.map +1 -1
  401. package/dist/types/hitl/index.d.ts +5 -0
  402. package/dist/types/hitl/index.d.ts.map +1 -1
  403. package/dist/types/hitl/index.js.map +1 -1
  404. package/dist/types/ids/brand.d.ts +5 -47
  405. package/dist/types/ids/brand.d.ts.map +1 -1
  406. package/dist/types/ids/brand.js +2 -39
  407. package/dist/types/ids/brand.js.map +1 -1
  408. package/dist/types/ids/index.d.ts +59 -69
  409. package/dist/types/ids/index.d.ts.map +1 -1
  410. package/dist/types/ids/index.js +12 -10
  411. package/dist/types/ids/index.js.map +1 -1
  412. package/dist/types/permission/index.d.ts +9 -0
  413. package/dist/types/permission/index.d.ts.map +1 -1
  414. package/dist/types/permission/index.js +9 -1
  415. package/dist/types/permission/index.js.map +1 -1
  416. package/dist/types/plugin/index.d.ts +45 -4
  417. package/dist/types/plugin/index.d.ts.map +1 -1
  418. package/dist/types/plugin/index.js +7 -0
  419. package/dist/types/plugin/index.js.map +1 -1
  420. package/dist/types/run/config.d.ts +3 -0
  421. package/dist/types/run/config.d.ts.map +1 -1
  422. package/dist/types/run/emergency.d.ts +5 -0
  423. package/dist/types/run/emergency.d.ts.map +1 -1
  424. package/dist/types/run/emergency.js.map +1 -1
  425. package/dist/types/run/entity.d.ts +6 -2
  426. package/dist/types/run/entity.d.ts.map +1 -1
  427. package/dist/types/run/events.d.ts +35 -0
  428. package/dist/types/run/events.d.ts.map +1 -1
  429. package/dist/types/run/events.js.map +1 -1
  430. package/dist/types/run/index.d.ts +1 -0
  431. package/dist/types/run/index.d.ts.map +1 -1
  432. package/dist/types/run/index.js +1 -0
  433. package/dist/types/run/index.js.map +1 -1
  434. package/dist/types/run/state.d.ts +16 -15
  435. package/dist/types/run/state.d.ts.map +1 -1
  436. package/dist/types/run/state.js +41 -22
  437. package/dist/types/run/state.js.map +1 -1
  438. package/dist/types/run/stop-reason.d.ts +3 -14
  439. package/dist/types/run/stop-reason.d.ts.map +1 -1
  440. package/dist/types/run/token-budget-store.d.ts +29 -0
  441. package/dist/types/run/token-budget-store.d.ts.map +1 -0
  442. package/dist/types/run/token-budget-store.js +25 -0
  443. package/dist/types/run/token-budget-store.js.map +1 -0
  444. package/dist/types/sandbox/index.d.ts +27 -2
  445. package/dist/types/sandbox/index.d.ts.map +1 -1
  446. package/dist/types/sandbox/index.js.map +1 -1
  447. package/dist/types/session/store.d.ts +8 -0
  448. package/dist/types/session/store.d.ts.map +1 -1
  449. package/dist/types/tool/index.d.ts +15 -0
  450. package/dist/types/tool/index.d.ts.map +1 -1
  451. package/dist/types/tool/index.js.map +1 -1
  452. package/dist/utils/frontmatter.d.ts +1 -1
  453. package/dist/utils/frontmatter.js +1 -1
  454. package/dist/utils/id-format.d.ts +3 -0
  455. package/dist/utils/id-format.d.ts.map +1 -0
  456. package/dist/utils/id-format.js +9 -0
  457. package/dist/utils/id-format.js.map +1 -0
  458. package/dist/utils/id.d.ts +65 -32
  459. package/dist/utils/id.d.ts.map +1 -1
  460. package/dist/utils/id.js +168 -148
  461. package/dist/utils/id.js.map +1 -1
  462. package/dist/utils/log/exception.js +1 -1
  463. package/dist/utils/log/exception.js.map +1 -1
  464. package/dist/utils/log/index.d.ts.map +1 -1
  465. package/dist/utils/log/index.js +1 -2
  466. package/dist/utils/log/index.js.map +1 -1
  467. package/dist/utils/log/templates.d.ts.map +1 -1
  468. package/dist/utils/log/templates.js +0 -1
  469. package/dist/utils/log/templates.js.map +1 -1
  470. package/package.json +1 -1
  471. package/src/agents/AGENTS.md +1 -1
  472. package/src/agents/PipelineAgent.ts +129 -109
  473. package/src/agents/ReactiveAgent.ts +2 -0
  474. package/src/agents/RouterAgent.ts +120 -73
  475. package/src/agents/SupervisorAgent.ts +12 -4
  476. package/src/agents/budget.ts +42 -0
  477. package/src/agents/explore.ts +29 -0
  478. package/src/agents/file-definitions.ts +237 -0
  479. package/src/agents/index.ts +15 -0
  480. package/src/bridge/a2a/mapper.ts +6 -0
  481. package/src/bridge/sse/mapper.ts +22 -0
  482. package/src/bus/lock.ts +1 -10
  483. package/src/compaction/consolidation.ts +79 -0
  484. package/src/compaction/factory.ts +3 -0
  485. package/src/compaction/index.ts +34 -4
  486. package/src/compaction/manager.ts +39 -1
  487. package/src/compaction/plan.ts +52 -21
  488. package/src/compaction/salience/bm25.ts +72 -0
  489. package/src/compaction/salience/goal.ts +44 -0
  490. package/src/compaction/salience/index.ts +19 -0
  491. package/src/compaction/salience/minhash.ts +53 -0
  492. package/src/compaction/salience/score.ts +305 -0
  493. package/src/compaction/salience/tokenize.ts +89 -0
  494. package/src/compaction/salience/working-set.ts +187 -0
  495. package/src/compaction/serializer.ts +16 -0
  496. package/src/compaction/token-estimate.ts +57 -0
  497. package/src/compaction/tool-result-editing.ts +28 -26
  498. package/src/compaction/types.ts +24 -1
  499. package/src/compaction/wire.ts +5 -1
  500. package/src/config/runtime.ts +13 -1
  501. package/src/connector/builtins/http.ts +2 -8
  502. package/src/connector/builtins/webhook.ts +2 -2
  503. package/src/connector/mcp/adapter.ts +32 -0
  504. package/src/connector/tools/adapter.ts +2 -2
  505. package/src/connector/tools/definitions.ts +2 -2
  506. package/src/constants/compaction/index.ts +1 -0
  507. package/src/constants/telemetry/index.ts +0 -1
  508. package/src/contracts/api.ts +5 -1
  509. package/src/contracts/schemas.ts +6 -20
  510. package/src/invariants/index.ts +1 -1
  511. package/src/manager/agent/lifecycle.ts +380 -352
  512. package/src/manager/run/persistence.ts +35 -5
  513. package/src/plugin/index.ts +19 -0
  514. package/src/plugin/shell-hook.ts +403 -0
  515. package/src/prompt/coding-agent-doctrine.ts +118 -0
  516. package/src/prompt/index.ts +8 -0
  517. package/src/provider/errors.ts +1 -1
  518. package/src/provider/fallback.ts +4 -1
  519. package/src/provider/retry.ts +4 -1
  520. package/src/provider/token-budget.ts +114 -0
  521. package/src/public-runtime.ts +54 -27
  522. package/src/public-tools.ts +5 -0
  523. package/src/public-types.ts +65 -0
  524. package/src/registry/command/kernel-commands.ts +16 -6
  525. package/src/registry/tool/execute.ts +4 -1
  526. package/src/run/LimitChecker.ts +1 -1
  527. package/src/run/drain.ts +1 -1
  528. package/src/run/reporter.ts +15 -0
  529. package/src/run/token-budget.ts +692 -0
  530. package/src/runtime/jobs/registry.ts +123 -17
  531. package/src/runtime/query/checkpoint.ts +10 -3
  532. package/src/runtime/query/context.ts +3 -57
  533. package/src/runtime/query/executor.ts +128 -58
  534. package/src/runtime/query/guard.ts +8 -0
  535. package/src/runtime/query/index.ts +201 -62
  536. package/src/runtime/query/iteration/index.ts +24 -6
  537. package/src/runtime/query/iteration/phases/compaction.ts +130 -31
  538. package/src/runtime/query/iteration/phases/context.ts +2 -0
  539. package/src/runtime/query/iteration/phases/tool-review.ts +39 -7
  540. package/src/runtime/query/iteration/phases/working-memory.ts +23 -14
  541. package/src/runtime/query/plugin-hooks.ts +24 -2
  542. package/src/runtime/query/repeat-call.ts +42 -7
  543. package/src/runtime/query/result.ts +9 -0
  544. package/src/runtime/query/review-policy.ts +231 -0
  545. package/src/runtime/query/run-state.ts +4 -0
  546. package/src/runtime/query/steering.ts +32 -0
  547. package/src/runtime/query/token-budget.ts +127 -0
  548. package/src/runtime/query/tool-output-budget.ts +33 -10
  549. package/src/runtime/query/tool-pause.ts +4 -2
  550. package/src/runtime/query/tooling.ts +8 -0
  551. package/src/sandbox/provider/local.ts +123 -13
  552. package/src/scheduler/delegating.ts +35 -13
  553. package/src/scheduler/local.ts +5 -7
  554. package/src/session/index.ts +0 -1
  555. package/src/session/workspace/path-builder.ts +5 -4
  556. package/src/store/feedback/disk.ts +4 -6
  557. package/src/store/index.ts +2 -0
  558. package/src/store/memory/disk.ts +3 -11
  559. package/src/store/run/checkpoint-disk.ts +14 -27
  560. package/src/store/run/claim-disk.ts +1 -1
  561. package/src/store/run/conformance.ts +55 -39
  562. package/src/store/run/disk.ts +19 -4
  563. package/src/store/run/token-budget-disk.ts +247 -0
  564. package/src/store/session/disk.ts +36 -29
  565. package/src/store/session/memory.ts +38 -1
  566. package/src/store/task/disk.ts +7 -8
  567. package/src/store/topic/memory.ts +13 -1
  568. package/src/test-support/ids.ts +62 -59
  569. package/src/tools/advisory/index.ts +3 -1
  570. package/src/tools/builtins/bash.ts +11 -12
  571. package/src/tools/builtins/computer-use.ts +6 -2
  572. package/src/tools/builtins/edit.ts +2 -2
  573. package/src/tools/builtins/glob.ts +3 -3
  574. package/src/tools/builtins/grep.ts +2 -2
  575. package/src/tools/builtins/ls.ts +2 -2
  576. package/src/tools/builtins/lsp.ts +2 -2
  577. package/src/tools/builtins/read-file.ts +2 -2
  578. package/src/tools/builtins/write-file.ts +2 -2
  579. package/src/tools/coordinator/ask-user-question.ts +284 -0
  580. package/src/tools/coordinator/index.ts +5 -248
  581. package/src/tools/memory/read.ts +2 -4
  582. package/src/tools/paths.ts +64 -0
  583. package/src/tools/roster.ts +46 -0
  584. package/src/types/agent/base.ts +6 -0
  585. package/src/types/agent/pipeline.ts +3 -0
  586. package/src/types/agent/router.ts +2 -3
  587. package/src/types/agent/scheduler.ts +4 -0
  588. package/src/types/agent/task.ts +5 -18
  589. package/src/types/common/index.ts +3 -0
  590. package/src/types/computer-use/index.ts +8 -0
  591. package/src/types/hitl/index.ts +5 -0
  592. package/src/types/ids/brand.ts +5 -48
  593. package/src/types/ids/index.ts +66 -75
  594. package/src/types/permission/index.ts +11 -0
  595. package/src/types/plugin/index.ts +49 -1
  596. package/src/types/run/config.ts +3 -0
  597. package/src/types/run/emergency.ts +5 -0
  598. package/src/types/run/entity.ts +6 -2
  599. package/src/types/run/events.ts +37 -0
  600. package/src/types/run/index.ts +1 -0
  601. package/src/types/run/state.ts +58 -30
  602. package/src/types/run/stop-reason.ts +3 -14
  603. package/src/types/run/token-budget-store.ts +54 -0
  604. package/src/types/sandbox/index.ts +32 -0
  605. package/src/types/session/store.ts +8 -0
  606. package/src/types/tool/index.ts +15 -0
  607. package/src/utils/frontmatter.ts +1 -1
  608. package/src/utils/id-format.ts +9 -0
  609. package/src/utils/id.ts +222 -181
  610. package/src/utils/log/exception.ts +1 -1
  611. package/src/utils/log/index.ts +1 -2
  612. package/src/utils/log/templates.ts +0 -1
  613. package/dist/session/migration/errors.d.ts +0 -26
  614. package/dist/session/migration/errors.d.ts.map +0 -1
  615. package/dist/session/migration/errors.js +0 -22
  616. package/dist/session/migration/errors.js.map +0 -1
  617. package/dist/session/migration/filesystem.d.ts +0 -122
  618. package/dist/session/migration/filesystem.d.ts.map +0 -1
  619. package/dist/session/migration/filesystem.js +0 -379
  620. package/dist/session/migration/filesystem.js.map +0 -1
  621. package/dist/session/migration/id-prefix.d.ts +0 -113
  622. package/dist/session/migration/id-prefix.d.ts.map +0 -1
  623. package/dist/session/migration/id-prefix.js +0 -132
  624. package/dist/session/migration/id-prefix.js.map +0 -1
  625. package/dist/session/migration/index.d.ts +0 -12
  626. package/dist/session/migration/index.d.ts.map +0 -1
  627. package/dist/session/migration/index.js +0 -12
  628. package/dist/session/migration/index.js.map +0 -1
  629. package/dist/session/migration/marker.d.ts +0 -57
  630. package/dist/session/migration/marker.d.ts.map +0 -1
  631. package/dist/session/migration/marker.js +0 -123
  632. package/dist/session/migration/marker.js.map +0 -1
  633. package/src/session/migration/errors.ts +0 -23
  634. package/src/session/migration/filesystem.ts +0 -468
  635. package/src/session/migration/id-prefix.ts +0 -166
  636. package/src/session/migration/index.ts +0 -41
  637. package/src/session/migration/marker.ts +0 -142
@@ -8,6 +8,7 @@ import {
8
8
  } from '../../advisory/index.js'
9
9
  import { drainQueuedMessages } from '../../agents/handle.js'
10
10
  import { AuthorizationGate } from '../../authorization/gate.js'
11
+ import { consolidationEntry } from '../../compaction/consolidation.js'
11
12
  import {
12
13
  type ToolHistoryRepairReport,
13
14
  repairToolMessageHistory,
@@ -18,12 +19,12 @@ import { WorkingStateManager } from '../../compaction/manager.js'
18
19
  import type { ContextReducer } from '../../compaction/reducer.js'
19
20
  import { serializeState as serializeWorkingState } from '../../compaction/serializer.js'
20
21
  import { restoreWorkingState, snapshotWorkingState } from '../../compaction/wire.js'
21
- import type { CompactionConfig } from '../../config/runtime.js'
22
- import { BOOT_EVENT_NAMES } from '../../constants/telemetry/index.js'
22
+ import { type CompactionConfig, CompactionConfigSchema } from '../../config/runtime.js'
23
23
  import { TOOL_OUTPUT_DIR_NAME } from '../../constants/tools/index.js'
24
24
  import { EmergencySaveManager } from '../../manager/run/emergency.js'
25
25
  import type { RunPersistence } from '../../manager/run/persistence.js'
26
26
  import { resolveModelPricing } from '../../pricing/index.js'
27
+ import { PromptContributionRegistry } from '../../prompt/contributions.js'
27
28
  import { resolveProviderCapabilities } from '../../provider/capabilities.js'
28
29
  import { isCallerAbortError } from '../../provider/errors.js'
29
30
  import {
@@ -33,7 +34,8 @@ import {
33
34
  } from '../../provider/fallback.js'
34
35
  import { resolveStreamIdleTimeoutMs, withStreamIdleTimeout } from '../../provider/idle-timeout.js'
35
36
  import { type ProviderRetryConfig, withProviderRetry } from '../../provider/retry.js'
36
- import { DefaultFilesystemMigrator, loggingMigrationSink } from '../../session/migration/index.js'
37
+ import { withTokenBudget } from '../../provider/token-budget.js'
38
+ import type { TokenBudget } from '../../run/token-budget.js'
37
39
  import type { PathBuilder } from '../../session/workspace/path-builder.js'
38
40
  import { resolveAttachments } from '../../store/attachment/index.js'
39
41
  import {
@@ -61,13 +63,13 @@ import type { AuthorizationGateConfig } from '../../types/authorization/index.js
61
63
  import { NamzuError } from '../../types/errors/index.js'
62
64
  import type { InputGuardrailSpec, OutputGuardrailSpec } from '../../types/guardrail/index.js'
63
65
  import {
64
- type CheckpointId,
65
66
  type HITLResumeDecision,
66
67
  type ResumeHandler,
67
68
  autoApproveHandler,
68
69
  } from '../../types/hitl/index.js'
69
- import type { RunId, SessionId, TenantId } from '../../types/ids/index.js'
70
+ import type { CheckpointId, PlanId, RunId, SessionId, TenantId } from '../../types/ids/index.js'
70
71
  import type { InvocationState } from '../../types/invocation/index.js'
72
+ import type { MemoryStore } from '../../types/memory/index.js'
71
73
  import {
72
74
  type AssistantMessage,
73
75
  type Message,
@@ -96,6 +98,7 @@ import type { PromoteMemory } from '../../types/run/memory-promotion.js'
96
98
  import { memoryCandidateFor } from '../../types/run/memory-promotion.js'
97
99
  import type { RunState } from '../../types/run/state.js'
98
100
  import type { RunStore } from '../../types/run/store.js'
101
+ import type { TokenBudgetStore } from '../../types/run/token-budget-store.js'
99
102
  import type { Sandbox, SandboxProvider } from '../../types/sandbox/index.js'
100
103
  import type { ProjectId, TopicId } from '../../types/session/ids.js'
101
104
  import type { Skill } from '../../types/skills/index.js'
@@ -106,9 +109,8 @@ import type { RepairToolCall } from '../../types/tool/repair.js'
106
109
  import type { BackoffPolicy } from '../../utils/backoff.js'
107
110
  import type { ModelPricing } from '../../utils/cost.js'
108
111
  import { toErrorMessage } from '../../utils/error.js'
109
- import { generateRunId } from '../../utils/id.js'
112
+ import { generateCheckpointId, generateRunId } from '../../utils/id.js'
110
113
  import { errorAttributes } from '../../utils/log/exception.js'
111
- import { EVENT_NAME_ATTRIBUTE } from '../../utils/log/types.js'
112
114
  import type { Logger } from '../../utils/logger.js'
113
115
  import type { BackgroundJobRegistry } from '../jobs/registry.js'
114
116
  import { AUTO_APPROVE_POLICY_NAME, createRunApprovalPolicy } from './approval-policy.js'
@@ -147,12 +149,17 @@ import {
147
149
  resolveSandboxTeardownTimeoutMs,
148
150
  teardownSandbox,
149
151
  } from './sandbox-lifecycle.js'
150
- import type { SteeringChannel } from './steering.js'
152
+ import { SteeringBinding, type SteeringChannel } from './steering.js'
153
+ import { resolveQueryBudget } from './token-budget.js'
151
154
  import { ToolGrantSet } from './tool-grants.js'
152
155
  import { createToolPause } from './tool-pause.js'
153
156
  import { ToolingBootstrap } from './tooling.js'
154
157
 
155
158
  export interface QueryParams {
159
+ /** One account shared with the task scheduler and descendant runs. */
160
+ budget?: TokenBudget
161
+ /** Canonical tree ledger; defaults to disk beside the root run. */
162
+ tokenBudgetStore?: TokenBudgetStore
156
163
  /**
157
164
  * Notice when the model issues the identical tool call repeatedly, and
158
165
  * say so on the next `tool_result`. Defaults on.
@@ -274,6 +281,16 @@ export interface QueryParams {
274
281
  * background execution is refused rather than silently bypassing the sandbox.
275
282
  */
276
283
  backgroundJobs?: BackgroundJobRegistry
284
+ /**
285
+ * Which owner the run's background jobs belong to. Absent, the run id:
286
+ * jobs are stopped when the run ends. A host that wants a job to
287
+ * outlive the turn that started it — a dev server started in one turn
288
+ * and read in the next — passes its session id here and calls
289
+ * `backgroundJobs.killOwner(sessionId)` when the session ends; the run
290
+ * then stops nothing at its end and still tells the model when a job
291
+ * finishes.
292
+ */
293
+ backgroundJobOwner?: string
277
294
 
278
295
  /**
279
296
  * What else goes in this run's prompt.
@@ -469,6 +486,12 @@ export interface QueryParams {
469
486
  agentId: string
470
487
  agentName: string
471
488
  workingDirectory?: string
489
+ /**
490
+ * Directories besides the working directory the file tools may reach,
491
+ * absolute; a sandboxed run binds each read-write. See
492
+ * `ToolContext.additionalDirectories`.
493
+ */
494
+ additionalDirectories?: readonly string[]
472
495
  pricing?: ModelPricing
473
496
  enableActivityTracking?: boolean
474
497
  messages: Message[]
@@ -715,6 +738,15 @@ export interface QueryParams {
715
738
 
716
739
  compactionConfig?: CompactionConfig
717
740
 
741
+ /**
742
+ * Where what the run learned is written when it ends: its decisions,
743
+ * discoveries and failures, as one entry tagged `learning`. Episodic
744
+ * memory (the working state) dies with the run; this is the bridge to
745
+ * the semantic store a later run searches. Absent means nothing is
746
+ * written. A store that fails is logged and never fails the run.
747
+ */
748
+ consolidateInto?: MemoryStore
749
+
718
750
  /**
719
751
  * Optional neutral working-memory seam. When set, the iteration loop
720
752
  * re-renders the provider's string into a single pinned leading system
@@ -1022,6 +1054,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1022
1054
  // generating it twice would silently hand the log and the run two
1023
1055
  // different ids.
1024
1056
  const runId = params.runId ?? generateRunId()
1057
+ const budget = await resolveQueryBudget(params, runId, selectedResumeState)
1025
1058
  const log = RunContextFactory.buildLogger({
1026
1059
  agentName: params.agentName,
1027
1060
  runConfig,
@@ -1033,44 +1066,6 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1033
1066
  tenantId: params.tenantId,
1034
1067
  })
1035
1068
 
1036
- // Boot-time filesystem migration (session-hierarchy.md §13.4.1). First
1037
- // call per process per root actually runs; subsequent calls short-circuit
1038
- // via the in-memory guard in `context.ts`. Kept here rather than inside
1039
- // the synchronous `RunContextFactory.build` so the factory signature stays
1040
- // sync for tests / non-async call sites.
1041
- //
1042
- // The migrator built here — not `ensureMigrated`'s own default — is what
1043
- // turns the migration facts `DefaultFilesystemMigrator` already computes
1044
- // into a `namzu.migration.completed` record instead of discarding them.
1045
- // `ensureMigrated`'s default parameter stays
1046
- // `NOOP_FILESYSTEM_MIGRATION_SINK` (see `context.ts`), so any other path
1047
- // that reaches `ensureMigrated` keeps today's silent behaviour.
1048
- const cwdForMigration = params.workingDirectory ?? process.cwd()
1049
- const migrationRoot = params.pathBuilder?.rootDir() ?? join(cwdForMigration, '.namzu')
1050
- const migrationResult = await RunContextFactory.ensureMigrated(
1051
- migrationRoot,
1052
- new DefaultFilesystemMigrator(loggingMigrationSink(log)),
1053
- )
1054
- // `loggingMigrationSink` only ever hears about `kind: 'migrated'` — the
1055
- // only outcome `DefaultFilesystemMigrator` ever hands its sink (see the
1056
- // module doc on `FilesystemMigrationSink`). The other two are logged
1057
- // here, straight off the resolved result, rather than by widening
1058
- // `FilesystemMigrationEvent` to carry them: a wider union would need a
1059
- // new arm in every exhaustive switch already written over it — a major —
1060
- // for two outcomes `migrationResult.kind` already fully describes.
1061
- if (migrationResult.kind !== 'migrated') {
1062
- log.debug('filesystem migration: nothing to do', {
1063
- [EVENT_NAME_ATTRIBUTE]: BOOT_EVENT_NAMES.MIGRATION_COMPLETED,
1064
- // `namzu.migration.*`, matching `loggingMigrationSink` — the OTHER
1065
- // emitter of this same event name. Two emitters of one event writing
1066
- // two namespaces for the same fact is precisely the collision the
1067
- // namespaced-key rule exists to stop, and a per-module derivation is
1068
- // how it would be reintroduced.
1069
- 'namzu.migration.kind': migrationResult.kind,
1070
- 'namzu.migration.marker_path': migrationResult.markerPath,
1071
- })
1072
- }
1073
-
1074
1069
  // Every model call in the run — the loop's turns, the forced-final
1075
1070
  // summary, advisory and compaction side calls — goes through this one
1076
1071
  // wrapped provider, so the retry policy cannot be bypassed by a code
@@ -1102,9 +1097,14 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1102
1097
  idleTimeoutMs: streamIdleTimeoutMs,
1103
1098
  log,
1104
1099
  })
1100
+ const metered = withTokenBudget(withIdleBound, budget)
1105
1101
  return params.retry === false
1106
- ? withIdleBound
1107
- : withProviderRetry(withIdleBound, { config: params.retry, log })
1102
+ ? metered
1103
+ : withProviderRetry(metered, {
1104
+ config: params.retry,
1105
+ log,
1106
+ canRetry: () => budget.remaining > 0,
1107
+ })
1108
1108
  }
1109
1109
  // Who is serving right now, for the run RECORD rather than for the request.
1110
1110
  //
@@ -1123,6 +1123,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1123
1123
  })),
1124
1124
  {
1125
1125
  log,
1126
+ canFallback: () => budget.remaining > 0,
1126
1127
  onSwap: (to) => {
1127
1128
  serving.current = to
1128
1129
  // `ctx` is declared below and is initialized before anything can
@@ -1278,6 +1279,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1278
1279
  }
1279
1280
 
1280
1281
  const ctx = RunContextFactory.build({
1282
+ budget,
1281
1283
  ...(topicState ? { topicPermissionMode: topicState.permissionMode } : {}),
1282
1284
  ...(params.permissionModeRef ? { permissionModeRef: params.permissionModeRef } : {}),
1283
1285
  agentId: params.agentId,
@@ -1329,13 +1331,19 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1329
1331
  emit: (event) => eventTranslator.emitEvent(event),
1330
1332
  })
1331
1333
 
1334
+ const planApprovalIds = new Map<PlanId, CheckpointId>()
1332
1335
  ctx.planManager.setApprovalHandler(async (request) => {
1336
+ let checkpointId = planApprovalIds.get(request.planId)
1337
+ if (!checkpointId) {
1338
+ checkpointId = generateCheckpointId()
1339
+ planApprovalIds.set(request.planId, checkpointId)
1340
+ }
1333
1341
  // `.current.handler`, never a captured `params.resumeHandler`. That
1334
1342
  // capture is what made changing the policy mean ending the run.
1335
1343
  const decision = await approvalPolicy.current.handler({
1336
1344
  type: 'plan_approval',
1337
1345
  runId: ctx.runId,
1338
- checkpointId: `cp_plan_${request.planId}` as import('../../types/ids/index.js').CheckpointId,
1346
+ checkpointId,
1339
1347
  plan: {
1340
1348
  planId: request.planId,
1341
1349
  title: request.title,
@@ -1683,6 +1691,9 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1683
1691
  tools: params.tools,
1684
1692
  runId: ctx.runId,
1685
1693
  workingDirectory: ctx.cwd,
1694
+ ...(params.additionalDirectories?.length
1695
+ ? { additionalDirectories: params.additionalDirectories }
1696
+ : {}),
1686
1697
  permissionMode: () => ctx.permissionMode.current,
1687
1698
  env: runConfig.env ?? {},
1688
1699
  abortSignal: ctx.abortController.signal,
@@ -1690,6 +1701,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1690
1701
  invocationState: params.invocationState,
1691
1702
  pluginManager: params.pluginManager,
1692
1703
  ...(params.backgroundJobs ? { backgroundJobs: params.backgroundJobs } : {}),
1704
+ ...(params.backgroundJobOwner ? { backgroundJobOwner: params.backgroundJobOwner } : {}),
1693
1705
  // The `skill` tool's registry. Threaded from the run rather than
1694
1706
  // held by the tool, because a tool that reached for a module-level
1695
1707
  // registry would answer about whatever the last run configured.
@@ -1734,12 +1746,52 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1734
1746
  ctx.log,
1735
1747
  )
1736
1748
 
1749
+ // A background job's exit reaches the model as a notice on its next tool
1750
+ // result, and the host as an event — without either polling. Subscribed
1751
+ // for the owner the run's jobs are bound to, so a session-owned job that
1752
+ // ends during this run is reported here too.
1753
+ const jobOwner = params.backgroundJobOwner ?? ctx.runId
1754
+ const jobNotices = params.backgroundJobs ? new SteeringBinding() : undefined
1755
+ const unsubscribeJobExits = params.backgroundJobs?.onExit((job) => {
1756
+ if (job.owner !== jobOwner) return
1757
+ const outcome =
1758
+ job.status === 'killed'
1759
+ ? 'was stopped'
1760
+ : `exited with code ${job.exitCode ?? 'unknown'}${job.signal ? ` (${job.signal})` : ''}`
1761
+ jobNotices?.steer(
1762
+ `Background job ${job.id} (${job.command}) ${outcome}. Read its output with the job tool if you need it.`,
1763
+ )
1764
+ void eventTranslator
1765
+ .emitEvent({
1766
+ type: 'background_job_exited',
1767
+ runId: ctx.runId,
1768
+ jobId: job.id,
1769
+ command: job.command,
1770
+ status: job.status === 'killed' ? 'killed' : 'exited',
1771
+ ...(job.exitCode !== undefined ? { exitCode: job.exitCode } : {}),
1772
+ ...(job.signal ? { signal: job.signal } : {}),
1773
+ })
1774
+ .catch(() => {})
1775
+ })
1737
1776
  let workingStateManager: WorkingStateManager | undefined
1738
- if (params.compactionConfig && params.compactionConfig.strategy !== 'disabled') {
1739
- workingStateManager = new WorkingStateManager(params.compactionConfig)
1777
+ // Normalised once, defaults applied. A host that passes a partial
1778
+ // object a strategy and a window, nothing else — used to reach the
1779
+ // phase with `triggerThreshold` undefined, and `usage < undefined` is
1780
+ // false: the pass ran on every iteration and the salience strategy fell
1781
+ // through to the stale-result clearing it exists to replace. The eval
1782
+ // suite that passed exactly that object found it.
1783
+ const compactionConfig = params.compactionConfig
1784
+ ? CompactionConfigSchema.parse(params.compactionConfig)
1785
+ : undefined
1786
+ if (compactionConfig && compactionConfig.strategy !== 'disabled') {
1787
+ workingStateManager = new WorkingStateManager(compactionConfig)
1740
1788
  toolExecutor.setWorkingStateManager(workingStateManager)
1741
1789
  }
1742
1790
 
1791
+ // The run's own registry when the host passed none, so a hook's
1792
+ // annotation has somewhere to land.
1793
+ const promptContributions = params.promptContributions ?? new PromptContributionRegistry()
1794
+
1743
1795
  const promptBuilder = new PromptBuilder({
1744
1796
  systemPrompt: params.systemPrompt,
1745
1797
  persona: params.persona,
@@ -1748,7 +1800,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1748
1800
  tools: params.tools,
1749
1801
  allowedTools: effectiveAllowedTools,
1750
1802
  runtimeContext: params.runtimeContext,
1751
- ...(params.promptContributions ? { contributions: params.promptContributions } : {}),
1803
+ contributions: promptContributions,
1752
1804
  })
1753
1805
 
1754
1806
  const guard = new GuardCoordinator({
@@ -1800,10 +1852,13 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1800
1852
  // explicitly chosen provider/cancellation policy.
1801
1853
  const boundedAdvisors = params.advisory.advisors.map((advisor) => ({
1802
1854
  ...advisor,
1803
- provider: withStreamIdleTimeout(advisor.provider, {
1804
- idleTimeoutMs: streamIdleTimeoutMs,
1805
- log: ctx.log,
1806
- }),
1855
+ provider: withTokenBudget(
1856
+ withStreamIdleTimeout(advisor.provider, {
1857
+ idleTimeoutMs: streamIdleTimeoutMs,
1858
+ log: ctx.log,
1859
+ }),
1860
+ budget,
1861
+ ),
1807
1862
  }))
1808
1863
  const advisorRegistry = new AdvisorRegistry(boundedAdvisors, params.advisory.defaultAdvisorId)
1809
1864
  // A budget the runtime cannot measure is refused here rather than
@@ -1891,8 +1946,9 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1891
1946
  // question rather than the next run.
1892
1947
  resumeHandler: (request) => approvalPolicy.current.handler(request),
1893
1948
  takeApprovalPolicyChange: () => approvalPolicy.takeUnannouncedChange(),
1894
- ...(params.promptContributions ? { promptContributions: params.promptContributions } : {}),
1949
+ promptContributions,
1895
1950
  ...(params.steering ? { steering: params.steering } : {}),
1951
+ ...(jobNotices ? { jobNotices } : {}),
1896
1952
  checkpointMgr,
1897
1953
  planManager: ctx.planManager,
1898
1954
  taskGateway: taskScheduler,
@@ -1905,7 +1961,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
1905
1961
  // run is a claim about work nobody repeated, and a module-level map
1906
1962
  // would leak exactly that way.
1907
1963
  ...(params.repeatCallAdvisory === false ? {} : { repeatCalls: new RepeatCallTracker() }),
1908
- compactionConfig: params.compactionConfig,
1964
+ compactionConfig,
1909
1965
  ...(params.inboundMessages ? { inboundMessages: params.inboundMessages } : {}),
1910
1966
  ...(params.projectInstructionContext
1911
1967
  ? { projectInstructionContext: params.projectInstructionContext }
@@ -2069,6 +2125,32 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2069
2125
  'namzu.runtime.resume_from_checkpoint': params.resumeFromCheckpoint ?? null,
2070
2126
  })
2071
2127
 
2128
+ // The operator's prompt, before the model sees it. A hook may
2129
+ // refuse it — the run ends here, before a prompt is built — or add
2130
+ // to what the model is told; the addition rides the prompt as a
2131
+ // dynamic contribution so every iteration of the run carries it.
2132
+ if (params.pluginManager) {
2133
+ const hookResults = await params.pluginManager.executeHooks(
2134
+ 'user_prompt_submit',
2135
+ {
2136
+ runId: ctx.runId,
2137
+ sessionId: params.sessionId,
2138
+ prompt: lastUserPrompt(initialMessages),
2139
+ signal: ctx.abortController.signal,
2140
+ },
2141
+ eventTranslator.emitEvent,
2142
+ )
2143
+ const annotations = applyLifecycleHookResults('user_prompt_submit', hookResults)
2144
+ if (annotations.length > 0) {
2145
+ promptContributions.replace({
2146
+ id: 'hooks:user_prompt_submit',
2147
+ placement: 'dynamic',
2148
+ render: () => `Context from the operator's hooks:\n\n${annotations.join('\n\n')}`,
2149
+ })
2150
+ }
2151
+ yield* eventTranslator.drainPending()
2152
+ }
2153
+
2072
2154
  const contextLevel = params.contextLevel ?? 'full'
2073
2155
  const cacheInput = {
2074
2156
  systemPrompt: params.systemPrompt,
@@ -2078,7 +2160,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2078
2160
  tools: params.tools,
2079
2161
  allowedTools: effectiveAllowedTools,
2080
2162
  runtimeContext: params.runtimeContext,
2081
- ...(params.promptContributions ? { contributions: params.promptContributions } : {}),
2163
+ contributions: promptContributions,
2082
2164
  }
2083
2165
 
2084
2166
  const segments: PromptSegments = promptCache
@@ -2132,8 +2214,8 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2132
2214
  // would drop it and replace it with a summary covering only
2133
2215
  // what happened after the resume, silently losing the run's
2134
2216
  // first hour.
2135
- if (workingStateManager && checkpoint.workingState && params.compactionConfig) {
2136
- const revived = restoreWorkingState(checkpoint.workingState, params.compactionConfig)
2217
+ if (workingStateManager && checkpoint.workingState && compactionConfig) {
2218
+ const revived = restoreWorkingState(checkpoint.workingState, compactionConfig)
2137
2219
  workingStateManager.replaceState(revived.getState())
2138
2220
  ctx.log.info('Restored compaction working state from checkpoint', {
2139
2221
  [NAMZU.RUN_ID]: ctx.runMgr.id,
@@ -2412,6 +2494,9 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2412
2494
  provider: params.sandboxProvider,
2413
2495
  config: {
2414
2496
  ...(rootAtCwd ? { workingDirectory: ctx.cwd } : {}),
2497
+ ...(rootAtCwd && params.additionalDirectories?.length
2498
+ ? { additionalDirectories: params.additionalDirectories }
2499
+ : {}),
2415
2500
  timeoutMs: runConfig.sandbox?.timeoutMs,
2416
2501
  memoryLimitMb: runConfig.sandbox?.memoryLimitMb,
2417
2502
  maxProcesses: runConfig.sandbox?.maxProcesses,
@@ -2580,6 +2665,22 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2580
2665
  )
2581
2666
  applyLifecycleHookResults('run_end', hookResults)
2582
2667
  yield* eventTranslator.drainPending()
2668
+ // A delegated run says so once more, by name, so a hook that
2669
+ // only cares when a subagent finishes need not read parent ids
2670
+ // off every run_end.
2671
+ if (params.parentRunId !== undefined) {
2672
+ const stopResults = await params.pluginManager.executeHooks(
2673
+ 'subagent_stop',
2674
+ {
2675
+ runId: ctx.runId,
2676
+ parentRunId: params.parentRunId,
2677
+ signal: ctx.abortController.signal,
2678
+ },
2679
+ eventTranslator.emitEvent,
2680
+ )
2681
+ applyLifecycleHookResults('subagent_stop', stopResults)
2682
+ yield* eventTranslator.drainPending()
2683
+ }
2583
2684
  }
2584
2685
 
2585
2686
  // Hand the step record to the run before it settles, so the
@@ -2638,6 +2739,32 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2638
2739
  }
2639
2740
  }
2640
2741
 
2742
+ if (params.consolidateInto && workingStateManager) {
2743
+ const entry = consolidationEntry(workingStateManager.getState(), {
2744
+ runId: ctx.runId,
2745
+ at: Date.now(),
2746
+ })
2747
+ if (entry) {
2748
+ try {
2749
+ const { entry: saved } = await params.consolidateInto.create(entry)
2750
+ await eventTranslator.emitEvent({
2751
+ type: 'memory_consolidated',
2752
+ runId: ctx.runId,
2753
+ memoryId: saved.id,
2754
+ title: entry.title,
2755
+ decisions: workingStateManager.getState().decisions.length,
2756
+ discoveries: workingStateManager.getState().discoveries.length,
2757
+ failures: workingStateManager.getState().failures.length,
2758
+ })
2759
+ yield* eventTranslator.drainPending()
2760
+ } catch (error) {
2761
+ ctx.log.warn('consolidation into the memory store failed', {
2762
+ [NAMZU.RUN_ID]: ctx.runId,
2763
+ 'namzu.memory.error': toErrorMessage(error),
2764
+ })
2765
+ }
2766
+ }
2767
+ }
2641
2768
  yield* resultAssembler.completeRun(rootSpan)
2642
2769
  } catch (err) {
2643
2770
  // A failed run still spent its steps; report them.
@@ -2659,7 +2786,10 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2659
2786
  //
2660
2787
  // Awaited, and its failure swallowed. A job that would not die is
2661
2788
  // worth a log line, and is not worth retracting a run's answer.
2662
- if (params.backgroundJobs) {
2789
+ unsubscribeJobExits?.()
2790
+ // Only jobs bound to this run. Jobs a host bound to its session are
2791
+ // the host's to stop, when the session ends.
2792
+ if (params.backgroundJobs && (params.backgroundJobOwner ?? ctx.runId) === ctx.runId) {
2663
2793
  try {
2664
2794
  const stopped = await params.backgroundJobs.killOwner(ctx.runId)
2665
2795
  if (stopped.length > 0) {
@@ -2743,6 +2873,15 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run>
2743
2873
  * either way — a stale cursor belongs to the client, and must not be able to
2744
2874
  * stop the work.
2745
2875
  */
2876
+ /** The text of the newest user turn, which is what a prompt hook is asked about. */
2877
+ function lastUserPrompt(messages: readonly Message[]): string {
2878
+ for (let i = messages.length - 1; i >= 0; i--) {
2879
+ const m = messages[i]
2880
+ if (m?.role === 'user' && typeof m.content === 'string') return m.content
2881
+ }
2882
+ return ''
2883
+ }
2884
+
2746
2885
  async function* catchUpFromCursor(
2747
2886
  runMgr: RunPersistence,
2748
2887
  cursor: RunEventCursor,
@@ -312,8 +312,9 @@ export class IterationOrchestrator {
312
312
  'namzu.runtime.input_tokens': runMgr.tokenUsage.promptTokens,
313
313
  'namzu.runtime.output_tokens': runMgr.tokenUsage.completionTokens,
314
314
  })
315
- await this.requestFinalResponse(model, stopReason)
316
- yield* this.ctx.drainPending()
315
+ // A hard stop has no budget left for another model request.
316
+ // Closing prose is requested at the warning threshold while
317
+ // headroom remains; the completed work is already in history.
317
318
  runMgr.setStopReason(stopReason)
318
319
  break
319
320
  }
@@ -788,6 +789,7 @@ export class IterationOrchestrator {
788
789
  type: 'token_usage_updated',
789
790
  runId: runMgr.id,
790
791
  usage: runMgr.tokenUsage,
792
+ budget: runMgr.budget?.summary(),
791
793
  cost: runMgr.costInfo,
792
794
  ...contextFigures,
793
795
  })
@@ -1079,12 +1081,13 @@ export class IterationOrchestrator {
1079
1081
  continue
1080
1082
  }
1081
1083
 
1084
+ let closingStopReason: StopReason | undefined
1082
1085
  if (!hasContent && !forceFinalize) {
1083
1086
  this.ctx.log.warn('Empty completion detected — requesting final summary', {
1084
1087
  [NAMZU.ITERATION]: iterationNum,
1085
1088
  'namzu.runtime.finish_reason': response.finishReason,
1086
1089
  })
1087
- await this.requestFinalResponse(model, 'end_turn')
1090
+ closingStopReason = await this.requestFinalResponse(model, 'end_turn')
1088
1091
  yield* this.ctx.drainPending()
1089
1092
  }
1090
1093
 
@@ -1115,7 +1118,10 @@ export class IterationOrchestrator {
1115
1118
  // also settle as `end_turn`, and there the deferred predicate
1116
1119
  // is not why the run ended: those decided the answer
1117
1120
  // themselves.
1118
- runMgr.setStopReason(stopWasDeferredForOutstandingWork ? 'stop_condition' : 'end_turn')
1121
+ runMgr.setStopReason(
1122
+ closingStopReason ??
1123
+ (stopWasDeferredForOutstandingWork ? 'stop_condition' : 'end_turn'),
1124
+ )
1119
1125
  break
1120
1126
  }
1121
1127
 
@@ -2029,7 +2035,10 @@ export class IterationOrchestrator {
2029
2035
  })
2030
2036
  }
2031
2037
 
2032
- private async requestFinalResponse(model: string, reason: StopReason): Promise<void> {
2038
+ private async requestFinalResponse(
2039
+ model: string,
2040
+ reason: StopReason,
2041
+ ): Promise<StopReason | undefined> {
2033
2042
  const lastAssistant = [...this.ctx.runMgr.messages]
2034
2043
  .reverse()
2035
2044
  .find((m) => m.role === 'assistant')
@@ -2040,8 +2049,16 @@ export class IterationOrchestrator {
2040
2049
  lastAssistant.content.length > 0
2041
2050
 
2042
2051
  if (hasResult) return
2052
+ // An empty completion may itself have exhausted the run. This fallback
2053
+ // is another billed request, so it must pass the same hard limits as
2054
+ // the next normal iteration and preserve their unfinished stop reason.
2055
+ const guardResult = this.ctx.guard.beforeIteration(
2056
+ this.ctx.runMgr,
2057
+ this.ctx.abortController.signal,
2058
+ )
2059
+ if (guardResult.shouldStop) return guardResult.stopReason
2043
2060
 
2044
- this.ctx.log.info('Requesting final response before limit enforcement', {
2061
+ this.ctx.log.info('Requesting final response after empty completion', {
2045
2062
  'namzu.runtime.reason': reason,
2046
2063
  })
2047
2064
 
@@ -2145,6 +2162,7 @@ export class IterationOrchestrator {
2145
2162
  'exception.message': toErrorMessage(err),
2146
2163
  })
2147
2164
  }
2165
+ return undefined
2148
2166
  }
2149
2167
  }
2150
2168