@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
@@ -2,8 +2,13 @@ import { z } from 'zod'
2
2
  import type { TokenUsage } from '../common/index.js'
3
3
  import type { EmergencySaveId, RunId } from '../ids/index.js'
4
4
  import type { Message } from '../message/index.js'
5
+ import type { TokenBudgetBinding } from './token-budget-store.js'
5
6
 
6
7
  export interface EmergencySaveData {
8
+ /** Reference to the canonical tree ledger; a checkpoint never resets it. */
9
+ readonly budgetBinding?: TokenBudgetBinding
10
+ /** Also present for non-durable accounts; those require the live authority on resume. */
11
+ readonly budgetAccountId?: string
7
12
  id: EmergencySaveId
8
13
  runId: RunId
9
14
  messages: Message[]
@@ -1,3 +1,4 @@
1
+ import type { TokenBudgetSummary } from '../../run/token-budget.js'
1
2
  import type { CostInfo, RunExecutionStatus, TokenUsage } from '../common/index.js'
2
3
  import type { RunId } from '../ids/index.js'
3
4
  import type { Message } from '../message/index.js'
@@ -6,6 +7,7 @@ import type { AgentRunConfig } from './config.js'
6
7
  import type { ReplayAttribution } from './replay.js'
7
8
  import type { StepResult } from './step.js'
8
9
  import type { StopReason } from './stop-reason.js'
10
+ import type { TokenBudgetBinding } from './token-budget-store.js'
9
11
 
10
12
  export interface RunStateMetadata {
11
13
  agentId: string
@@ -60,15 +62,17 @@ export interface RunStateMetadata {
60
62
  *
61
63
  * The wire counterpart is `WireRun` under `contracts/api.ts` — the two stay
62
64
  * decoupled so the HTTP field shape can evolve independently from this
63
- * persistence record. See `docs/sdk/sessions/` for the public hierarchy
64
- * reference.
65
+ * persistence record.
65
66
  */
66
67
  export interface Run {
67
68
  id: RunId
68
69
  status: RunExecutionStatus
69
70
  metadata: RunStateMetadata
70
71
  messages: Message[]
72
+ /** Usage of this invocation only; descendant spend is in budget. */
71
73
  tokenUsage: TokenUsage
74
+ budget?: TokenBudgetSummary
75
+ budgetBinding?: TokenBudgetBinding
72
76
  costInfo: CostInfo
73
77
  currentIteration: number
74
78
  startedAt: number
@@ -1,3 +1,4 @@
1
+ import type { TokenBudgetSummary } from '../../run/token-budget.js'
1
2
  import type { ActivityStatus, ActivityType } from '../activity/index.js'
2
3
  import type { BaseAgentResult } from '../agent/base.js'
3
4
  import type { CostInfo, PlatformError, TokenUsage } from '../common/index.js'
@@ -245,6 +246,8 @@ type CoreRunEvent =
245
246
  iteration: number
246
247
  /** How many `tool_result` bodies were emptied. */
247
248
  clearedCount: number
249
+ /** Assistant narrations cut to their first sentence by the salience pass, when it ran. */
250
+ stubbedCount?: number
248
251
  /** Characters removed, summed across those results. */
249
252
  charsReclaimed: number
250
253
  /** `charsReclaimed` as tokens, by the same estimate the trigger uses. */
@@ -502,6 +505,7 @@ type CoreRunEvent =
502
505
  }
503
506
  | {
504
507
  type: 'run_paused'
508
+ budget?: TokenBudgetSummary
505
509
  runId: RunId
506
510
  checkpointId: CheckpointId
507
511
  reason: string
@@ -550,8 +554,38 @@ type CoreRunEvent =
550
554
  * `stopReason` is what separates them, and it is on the event because the
551
555
  * alternative is asking every consumer to hold the `Run` as well.
552
556
  */
557
+ /**
558
+ * What the run learned was written to the host's memory store: its
559
+ * decisions, discoveries and failures as one entry a later run can
560
+ * search for. Emitted only when a host asked (`consolidateInto`) and
561
+ * the run had something to say.
562
+ */
563
+ /**
564
+ * A background job this run (or the owner it runs under) started has
565
+ * ended. The model learns it from a notice on its next tool result;
566
+ * the host learns it from this, whether or not a turn is running.
567
+ */
568
+ | {
569
+ type: 'background_job_exited'
570
+ runId: RunId
571
+ jobId: string
572
+ command: string
573
+ status: 'exited' | 'killed'
574
+ exitCode?: number
575
+ signal?: string
576
+ }
577
+ | {
578
+ type: 'memory_consolidated'
579
+ runId: RunId
580
+ memoryId: string
581
+ title: string
582
+ decisions: number
583
+ discoveries: number
584
+ failures: number
585
+ }
553
586
  | {
554
587
  type: 'run_completed'
588
+ budget?: TokenBudgetSummary
555
589
  runId: RunId
556
590
  result: string
557
591
  stopReason?: StopReason
@@ -581,6 +615,7 @@ type CoreRunEvent =
581
615
  */
582
616
  | {
583
617
  type: 'run_failed'
618
+ budget?: TokenBudgetSummary
584
619
  runId: RunId
585
620
  error: string
586
621
  failure?: PlatformError
@@ -638,6 +673,8 @@ type CoreRunEvent =
638
673
  }
639
674
  | {
640
675
  type: 'token_usage_updated'
676
+ /** Aggregate tree spend, distinct from this run's own usage. */
677
+ budget?: TokenBudgetSummary
641
678
  runId: RunId
642
679
  usage: TokenUsage
643
680
  cost: CostInfo
@@ -18,6 +18,7 @@ export * from './events.js'
18
18
  export * from './metadata.js'
19
19
  export * from './emergency.js'
20
20
  export * from './state.js'
21
+ export * from './token-budget-store.js'
21
22
  export type { Lineage } from './lineage.js'
22
23
  export type {
23
24
  SubsessionIdledEvent,
@@ -1,9 +1,19 @@
1
+ import {
2
+ asCheckpointId,
3
+ asProjectId,
4
+ asRunId,
5
+ asSessionId,
6
+ asTenantId,
7
+ asTopicId,
8
+ } from '../../utils/id.js'
1
9
  import type { CostInfo, RunExecutionStatus, TokenUsage } from '../common/index.js'
2
10
  import type { CheckpointId, PendingDecision } from '../hitl/index.js'
3
11
  import type { RunId, SessionId, TenantId } from '../ids/index.js'
4
12
  import type { Message } from '../message/index.js'
5
13
  import type { ProjectId, TopicId } from '../session/ids.js'
6
14
  import type { StopReason } from './stop-reason.js'
15
+ import { validateTokenBudgetBinding } from './token-budget-store.js'
16
+ import type { TokenBudgetBinding } from './token-budget-store.js'
7
17
 
8
18
  /**
9
19
  * Everything needed to pick a run back up in a DIFFERENT process.
@@ -24,17 +34,17 @@ import type { StopReason } from './stop-reason.js'
24
34
  * host's job on the way back in, which is exactly why they are absent.
25
35
  */
26
36
  export interface RunState {
37
+ /** Reference to the canonical tree ledger; a checkpoint never resets it. */
38
+ readonly budgetBinding?: TokenBudgetBinding
39
+ /** Also present for non-durable accounts; those require the live authority on resume. */
40
+ readonly budgetAccountId?: string
27
41
  /**
28
- * Schema version. A v1 snapshot (the pre-NZ-TOPIC-03 shape `threadId`
29
- * instead of `topicId`) and a v2 snapshot (the shape between NZ-TOPIC-03
30
- * and NZ-TOPIC-04 `topicId` already the field name, but its value can
31
- * still carry the pre-narrowing `thd_` prefix) are both coerced forward
32
- * by {@link parseRunState}; any other unrecognized version is refused
33
- * with a clear failure rather than a partial restore, because silently
34
- * dropping fields this build does not know about is the outcome worth
35
- * failing loudly to avoid.
42
+ * Schema version. Versions 1–3 are coerced forward by {@link parseRunState}.
43
+ * Version 4 carries aggregate token authority references; earlier readers
44
+ * must refuse it rather than silently discarding that authority on resume.
45
+ * Other unrecognized versions are refused instead of partially restored.
36
46
  */
37
- readonly version: 3
47
+ readonly version: 4
38
48
 
39
49
  readonly runId: RunId
40
50
  readonly sessionId: SessionId
@@ -92,7 +102,7 @@ export class RunStateVersionError extends Error {
92
102
  }
93
103
  }
94
104
 
95
- export const RUN_STATE_VERSION = 3 as const
105
+ export const RUN_STATE_VERSION = 4 as const
96
106
 
97
107
  /** The shape `RunState` had before NZ-TOPIC-03: `threadId`, not `topicId`. */
98
108
  const RUN_STATE_LEGACY_VERSION = 1
@@ -104,17 +114,27 @@ const RUN_STATE_LEGACY_VERSION = 1
104
114
  */
105
115
  const RUN_STATE_PRE_PREFIX_VERSION = 2
106
116
 
107
- /**
108
- * Shared by both legacy branches below: rewrite a `thd_`-prefixed topicId
109
- * value to `top_`, leaving everything else — including an absent topicId —
110
- * untouched. Mirrors `store/session/disk.ts`'s
111
- * `migrateSessionStoreTopicIdPrefix`: same no-op-when-already-correct
112
- * shape, same reason (idempotence under a repeated migration pass).
113
- */
114
- function rewriteLegacyTopicIdPrefix(record: Record<string, unknown>): Record<string, unknown> {
115
- const topicId = record.topicId
116
- if (typeof topicId !== 'string' || !topicId.startsWith('thd_')) return record
117
- return { ...record, topicId: `top_${topicId.slice('thd_'.length)}` }
117
+ /** Before checkpoints referred to a canonical aggregate token ledger. */
118
+ const RUN_STATE_PRE_BUDGET_VERSION = 3
119
+
120
+ /** Require UUIDs on every supplied identity field without rewriting records. */
121
+ function requireEntityIds(record: Record<string, unknown>): Record<string, unknown> {
122
+ if (record.budgetBinding !== undefined) validateTokenBudgetBinding(record.budgetBinding)
123
+ if (record.budgetAccountId !== undefined) asRunId(record.budgetAccountId as string)
124
+ const validators = {
125
+ runId: asRunId,
126
+ parentRunId: asRunId,
127
+ sessionId: asSessionId,
128
+ projectId: asProjectId,
129
+ tenantId: asTenantId,
130
+ topicId: asTopicId,
131
+ checkpointId: asCheckpointId,
132
+ }
133
+ for (const [field, validate] of Object.entries(validators)) {
134
+ const value = record[field]
135
+ if (value !== undefined) validate(value as string)
136
+ }
137
+ return record
118
138
  }
119
139
 
120
140
  /**
@@ -125,15 +145,15 @@ function rewriteLegacyTopicIdPrefix(record: Record<string, unknown>): Record<str
125
145
  * and read by another, possibly weeks later and possibly after an SDK
126
146
  * upgrade; a silent partial restore there produces a run that looks healthy
127
147
  * and has lost its budgets. Failing loudly is the only honest option — for
128
- * every version this build does not otherwise recognize. Versions 1 and 2
129
- * are the exceptions: both are coerced forward rather than refused, the
148
+ * every version this build does not otherwise recognize. Versions 1 through 3
149
+ * are the exceptions: they are coerced forward rather than refused, the
130
150
  * same shape-tolerant rename `store/schema.ts`'s migrations use for the
131
151
  * on-disk session record, because a host that parks a run across either
132
152
  * release boundary would otherwise have every in-flight snapshot refused
133
153
  * on the way back in. `threadId` is renamed only when present (v1), and
134
- * a `thd_`-prefixed `topicId` is rewritten only when present (v1 and v2),
135
- * so a snapshot a host wrote with the field already absent, or already
136
- * `top_`-prefixed, does not gain a stamped or double-rewritten value.
154
+ * topic IDs are validated without changing their value. Retired `thd_`
155
+ * values are refused; opaque UUIDs
156
+ * are preserved. An absent topic field is not added.
137
157
  * Nothing here re-persists the coerced snapshot — a host that calls
138
158
  * `parseRunState` and then serializes the result back out upgrades the
139
159
  * record on THAT write, same as `store/schema.ts`'s "migrate on read,
@@ -151,6 +171,14 @@ export function parseRunState(json: string | unknown): RunState {
151
171
  }
152
172
  const record = raw as Record<string, unknown>
153
173
  const version = record.version
174
+ if (
175
+ (version === RUN_STATE_LEGACY_VERSION ||
176
+ version === RUN_STATE_PRE_PREFIX_VERSION ||
177
+ version === RUN_STATE_PRE_BUDGET_VERSION) &&
178
+ (record.budgetBinding !== undefined || record.budgetAccountId !== undefined)
179
+ ) {
180
+ throw new RunStateVersionError(version, RUN_STATE_VERSION)
181
+ }
154
182
 
155
183
  if (version === RUN_STATE_LEGACY_VERSION) {
156
184
  const { threadId, ...rest } = record
@@ -159,14 +187,14 @@ export function parseRunState(json: string | unknown): RunState {
159
187
  ...(threadId !== undefined ? { topicId: threadId } : {}),
160
188
  }
161
189
  return {
162
- ...rewriteLegacyTopicIdPrefix(withTopicId),
190
+ ...requireEntityIds(withTopicId),
163
191
  version: RUN_STATE_VERSION,
164
192
  } as RunState
165
193
  }
166
194
 
167
- if (version === RUN_STATE_PRE_PREFIX_VERSION) {
195
+ if (version === RUN_STATE_PRE_PREFIX_VERSION || version === RUN_STATE_PRE_BUDGET_VERSION) {
168
196
  return {
169
- ...rewriteLegacyTopicIdPrefix(record),
197
+ ...requireEntityIds(record),
170
198
  version: RUN_STATE_VERSION,
171
199
  } as RunState
172
200
  }
@@ -174,5 +202,5 @@ export function parseRunState(json: string | unknown): RunState {
174
202
  if (version !== RUN_STATE_VERSION) {
175
203
  throw new RunStateVersionError(version, RUN_STATE_VERSION)
176
204
  }
177
- return raw as RunState
205
+ return requireEntityIds(record) as unknown as RunState
178
206
  }
@@ -17,19 +17,8 @@ export type StopReason =
17
17
  * declaring one, arriving at a model the price catalogue has no row for.
18
18
  * `costInfo.unpricedTokens` says how much of the run it covers.
19
19
  *
20
- * ## The closing call is outside the budget, deliberately
21
- *
22
- * Every hard stop is followed by one more model call — `requestFinalResponse`
23
- * asks for a closing summary, and the guard does not run again before or
24
- * after it. That is pre-existing and true of `cost_limit` and
25
- * `token_budget` alike, and it is stated here rather than left to be
26
- * discovered because for THIS reason it cannot be otherwise: the model that
27
- * triggered the stop is by definition one with no rate, so the closing
28
- * call's cost is unmeasurable by construction. Bounding it would mean
29
- * refusing to close the run at all, which loses the work.
30
- *
31
- * Its tokens are counted, so `costInfo.unpricedTokens` includes them and
32
- * the run reports honestly what it could not price.
20
+ * A hard stop issues no further model request. Completed messages and
21
+ * tool results remain in the run even when no closing prose was produced.
33
22
  */
34
23
  | 'cost_unmeasurable'
35
24
  | 'timeout'
@@ -71,7 +60,7 @@ export type StopReason =
71
60
  *
72
61
  * The union of the finish reasons providers report, normalised into a
73
62
  * provider-agnostic vocabulary. `forced_finalize` is a Namzu-specific value
74
- * emitted by the orchestrator when iteration limits force a final response
63
+ * emitted by the orchestrator when budget warnings request a final response
75
64
  * without a model-issued stop reason.
76
65
  */
77
66
  export type MessageStopReason =
@@ -0,0 +1,54 @@
1
+ import type { TokenBudgetSnapshot } from '../../run/token-budget.js'
2
+ import { entityIdPattern } from '../../utils/id-format.js'
3
+ import { asProjectId, asRunId, asSessionId, asTenantId } from '../../utils/id.js'
4
+ import type { ProjectId, RunId, SessionId, TenantId } from '../ids/index.js'
5
+
6
+ /** The root run owns the ledger, including every descendant account. */
7
+ export interface TokenBudgetScope {
8
+ readonly tenantId: TenantId
9
+ readonly projectId: ProjectId
10
+ readonly sessionId: SessionId
11
+ readonly runId: RunId
12
+ }
13
+
14
+ /** JSON-safe checkpoint reference; the latest ledger remains authoritative. */
15
+ export interface TokenBudgetBinding {
16
+ readonly scope: TokenBudgetScope
17
+ readonly accountId: string
18
+ }
19
+
20
+ /**
21
+ * Durable storage for one canonical token ledger per root run.
22
+ *
23
+ * A root and all its descendants share one writer. Save must atomically
24
+ * replace a complete record; a missing record is null and corrupt records
25
+ * throw. This interface provides no compare-and-swap or distributed lease.
26
+ * Hosts must ensure exclusive root ownership when resuming in another process.
27
+ */
28
+ export interface TokenBudgetStore {
29
+ load(scope: TokenBudgetScope): Promise<TokenBudgetSnapshot | null>
30
+ save(scope: TokenBudgetScope, snapshot: TokenBudgetSnapshot): Promise<void>
31
+ }
32
+
33
+ /** Validate an untrusted checkpoint reference without inventing missing identity. */
34
+ export function validateTokenBudgetBinding(value: unknown): TokenBudgetBinding {
35
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
36
+ throw new Error('Invalid token budget binding')
37
+ }
38
+ const binding = value as Partial<TokenBudgetBinding>
39
+ if (typeof binding.accountId !== 'string' || !entityIdPattern().test(binding.accountId)) {
40
+ throw new Error('Invalid token budget account identity')
41
+ }
42
+ if (typeof binding.scope !== 'object' || binding.scope === null) {
43
+ throw new Error('Token budget binding is missing its root scope')
44
+ }
45
+ return {
46
+ accountId: binding.accountId,
47
+ scope: {
48
+ tenantId: asTenantId(binding.scope.tenantId),
49
+ projectId: asProjectId(binding.scope.projectId),
50
+ sessionId: asSessionId(binding.scope.sessionId),
51
+ runId: asRunId(binding.scope.runId),
52
+ },
53
+ }
54
+ }
@@ -206,6 +206,19 @@ export interface SandboxNetworkPolicy {
206
206
  readonly allowedHosts: readonly string[]
207
207
  }
208
208
 
209
+ /** A process the sandbox started and does not wait for; see `Sandbox.spawnDetached`. */
210
+ export interface SandboxDetachedProcess {
211
+ /** The wrapper process. Its stdout and stderr are pipes the caller reads; stdin is closed. */
212
+ readonly child: import('node:child_process').ChildProcess
213
+ /** Signal everything the sandbox started for this process, inside the boundary and out. */
214
+ kill(signal: NodeJS.Signals): void
215
+ }
216
+
217
+ export interface SandboxSpawnOptions {
218
+ readonly cwd?: string
219
+ readonly env?: Record<string, string>
220
+ }
221
+
209
222
  export interface Sandbox {
210
223
  readonly id: SandboxId
211
224
  readonly status: SandboxStatus
@@ -213,6 +226,19 @@ export interface Sandbox {
213
226
  readonly environment: SandboxEnvironment
214
227
  exec(command: string, args?: string[], opts?: SandboxExecOptions): Promise<SandboxExecResult>
215
228
 
229
+ /**
230
+ * Start a process inside the boundary and hand it back running, for a
231
+ * host that keeps long-lived processes — a background job registry.
232
+ * The same confinement as `exec`; the difference is who waits. A
233
+ * provider without this cannot host background jobs, and the tools
234
+ * say so rather than running the job on the host.
235
+ */
236
+ spawnDetached?(
237
+ command: string,
238
+ args?: readonly string[],
239
+ opts?: SandboxSpawnOptions,
240
+ ): SandboxDetachedProcess
241
+
216
242
  /**
217
243
  * Narrow or widen what this sandbox can reach, while it is running.
218
244
  *
@@ -467,6 +493,12 @@ export interface SandboxCreateConfig {
467
493
  */
468
494
  readonly signal?: AbortSignal
469
495
  readonly workingDirectory?: string
496
+ /**
497
+ * Directories bound into the sandbox read-write besides the working
498
+ * directory, absolute on the host. Only meaningful with
499
+ * `workingDirectory`; an ephemeral root has nothing to add to.
500
+ */
501
+ readonly additionalDirectories?: readonly string[]
470
502
  readonly env?: Record<string, string>
471
503
  readonly timeoutMs?: number
472
504
  readonly memoryLimitMb?: number
@@ -34,6 +34,14 @@ import type { ProjectId, SubSessionId, SummaryId, TopicId } from '../session/ids
34
34
  * tracks both.
35
35
  */
36
36
  export interface CreateSessionParams {
37
+ /**
38
+ * The id the session is created under. A host that needs to know a
39
+ * conversation's id before the conversation is written — to name a
40
+ * log, to label a hook, to show it — mints one with `generateSessionId`
41
+ * and passes it here; the store refuses an id it already holds. Absent,
42
+ * the store mints one.
43
+ */
44
+ id?: SessionId
37
45
  topicId: TopicId
38
46
  projectId: ProjectId
39
47
  /**
@@ -223,6 +223,13 @@ export interface ToolDispatchOptions {
223
223
  export interface ToolContext {
224
224
  runId: RunId
225
225
  workingDirectory: string
226
+ /**
227
+ * Directories besides the working directory the file tools may reach,
228
+ * absolute. A host adds one for a session (`/add-dir`); a sandboxed run
229
+ * binds each. Relative paths still resolve against the working
230
+ * directory; an absolute path inside any of these is accepted.
231
+ */
232
+ additionalDirectories?: readonly string[]
226
233
  abortSignal: AbortSignal
227
234
  env: Record<string, string>
228
235
  log: (level: 'info' | 'warn' | 'error', message: string) => void
@@ -490,6 +497,14 @@ export interface ToolResult {
490
497
  * what it sets here.
491
498
  */
492
499
  retryable?: boolean
500
+ /**
501
+ * Facts this result pins into the run's working memory, by key. The
502
+ * kernel keeps them in the working-memory slot — in front of the model
503
+ * every iteration, across compaction — and a later pin under the same
504
+ * key replaces the earlier one. For what a tool knows and the model
505
+ * must not lose: what its controls do, where things are, what failed.
506
+ */
507
+ workingState?: readonly import('../../compaction/types.js').WorkingStatePin[]
493
508
  }
494
509
 
495
510
  export interface ToolDefinition<TInput = unknown> extends ToolPresentation<TInput> {
@@ -8,7 +8,7 @@
8
8
  * metadata**, so the same file was a hard error in one code path and a skill
9
9
  * named after its own directory with "(no description)" in the other. Refuse
10
10
  * versus degrade, on one file shape, is the divergence this module exists to
11
- * end — see `docs/conventions/refuse-do-not-degrade.md`.
11
+ * end — see "refuse do not degrade".
12
12
  *
13
13
  * **Deliberately not a YAML parser.** It is a flat key/value splitter with one
14
14
  * level of nesting, and it refuses the constructs in {@link UNSUPPORTED_YAML}
@@ -0,0 +1,9 @@
1
+ const HEX = '[0-9a-fA-F]'
2
+ const UUID = `${HEX}{8}-${HEX}{4}-[1-8]${HEX}{3}-[89abAB]${HEX}{3}-${HEX}{12}`
3
+
4
+ /** Internal shared spelling rule for runtime checks and JSON-schema-compatible schemas. */
5
+ export function entityIdPattern(): RegExp {
6
+ // JavaScript's $ also matches before a final newline. The final lookahead
7
+ // requires the actual end so no accepted id can carry a control character.
8
+ return new RegExp(String.raw`^${UUID}$(?![\s\S])`)
9
+ }