@namzu/sdk 34.1.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 +150 -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 +107 -47
  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 +27 -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 +140 -59
  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 +28 -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-budget-disk.d.ts","sourceRoot":"","sources":["../../../src/store/run/token-budget-disk.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,WAAW,EACX,KAAK,mBAAmB,EAExB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yCAAyC,CAAA;AAE9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAU/F,MAAM,WAAW,0BAA0B;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAGhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAE7B,MAAM,EAAE,0BAA0B;IAE/D,OAAO,CAAC,IAAI;IAKN,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAMlE,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAqCnE,IAAI;CAmBlB;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAChC,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiC3F"}
@@ -0,0 +1,208 @@
1
+ import { mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ import { TokenBudget, validateTokenBudgetSnapshot, } from '../../run/token-budget.js';
4
+ import { DefaultPathBuilder } from '../../session/workspace/path-builder.js';
5
+ import { temporaryPathFor } from '../../utils/atomic-write.js';
6
+ import { asProjectId, asRunId, asSessionId, asTenantId } from '../../utils/id.js';
7
+ /**
8
+ * Canonical ledger beside the root run, independent of checkpoint pruning.
9
+ *
10
+ * Writes from this instance are serialized and use private atomic sidecars.
11
+ * New directories are mode 0700 and files are mode 0600. This is a single
12
+ * writer store; atomic replacement does not provide a distributed lease.
13
+ */
14
+ export class DiskTokenBudgetStore {
15
+ config;
16
+ writes = new Map();
17
+ constructor(config) {
18
+ this.config = config;
19
+ }
20
+ path(scope) {
21
+ validateScope(scope);
22
+ return join(this.config.baseDir, scope.runId, 'token-budget.json');
23
+ }
24
+ async load(scope) {
25
+ const path = this.path(scope);
26
+ await this.writes.get(path);
27
+ return this.read(path, scope);
28
+ }
29
+ async save(scope, snapshot) {
30
+ const path = this.path(scope);
31
+ const checkedScope = validateScope(scope);
32
+ const checkedSnapshot = validateSnapshotScope(snapshot, checkedScope);
33
+ const previous = this.writes.get(path) ?? Promise.resolve();
34
+ const writing = previous
35
+ .catch(() => undefined)
36
+ .then(async () => {
37
+ const existing = await this.read(path, checkedScope);
38
+ if (existing)
39
+ assertSameRoot(existing, checkedSnapshot);
40
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
41
+ const temporary = temporaryPathFor(path);
42
+ const record = {
43
+ version: 1,
44
+ scope: checkedScope,
45
+ snapshot: checkedSnapshot,
46
+ };
47
+ try {
48
+ await writeFile(temporary, `${JSON.stringify(record)}\n`, {
49
+ encoding: 'utf8',
50
+ flag: 'wx',
51
+ mode: 0o600,
52
+ });
53
+ await rename(temporary, path);
54
+ }
55
+ catch (error) {
56
+ await unlink(temporary).catch(() => undefined);
57
+ throw error;
58
+ }
59
+ });
60
+ this.writes.set(path, writing);
61
+ try {
62
+ await writing;
63
+ }
64
+ finally {
65
+ if (this.writes.get(path) === writing)
66
+ this.writes.delete(path);
67
+ }
68
+ }
69
+ async read(path, scope) {
70
+ let text;
71
+ try {
72
+ text = await readFile(path, 'utf8');
73
+ }
74
+ catch (error) {
75
+ if (error.code === 'ENOENT')
76
+ return null;
77
+ throw error;
78
+ }
79
+ const raw = JSON.parse(text);
80
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
81
+ throw new Error('Invalid token budget record');
82
+ }
83
+ const record = raw;
84
+ if (record.version !== 1)
85
+ throw new Error('Unsupported token budget record version');
86
+ if (!record.scope)
87
+ throw new Error('Token budget record is missing its root scope');
88
+ const storedScope = validateScope(record.scope);
89
+ if (!sameScope(scope, storedScope))
90
+ throw new Error('Token budget root scope mismatch');
91
+ return validateSnapshotScope(record.snapshot, scope);
92
+ }
93
+ }
94
+ /** Open the latest authority; a checkpoint only selects an existing account. */
95
+ export async function openTokenBudget(options) {
96
+ const scope = validateScope(options.scope);
97
+ const pathBuilder = options.pathBuilder ??
98
+ new DefaultPathBuilder(join(options.workingDirectory ?? process.cwd(), '.namzu'));
99
+ const store = options.store ??
100
+ new DiskTokenBudgetStore({
101
+ baseDir: join(pathBuilder.sessionDir(scope.projectId, scope.sessionId), 'runs'),
102
+ });
103
+ const persistence = {
104
+ scope,
105
+ save: (snapshot) => store.save(scope, snapshot),
106
+ };
107
+ const saved = await store.load(scope);
108
+ let budget;
109
+ if (saved === null) {
110
+ if (options.requireExisting || options.accountId !== undefined) {
111
+ throw new Error('The token budget ledger required by this run is missing');
112
+ }
113
+ if (options.limit === undefined)
114
+ throw new Error('A new token budget requires an explicit limit');
115
+ budget = TokenBudget.create(options.limit, scope.runId, persistence);
116
+ }
117
+ else {
118
+ const snapshot = validateSnapshotScope(saved, scope);
119
+ if (options.limit !== undefined && rootLimit(snapshot) !== options.limit) {
120
+ throw new Error('Token budget root limit mismatch');
121
+ }
122
+ budget = TokenBudget.restore(snapshot, persistence);
123
+ }
124
+ const account = options.accountId === undefined ? budget : budget.account(options.accountId);
125
+ await budget.flush();
126
+ return account;
127
+ }
128
+ function validateScope(scope) {
129
+ return {
130
+ tenantId: asTenantId(scope.tenantId),
131
+ projectId: asProjectId(scope.projectId),
132
+ sessionId: asSessionId(scope.sessionId),
133
+ runId: asRunId(scope.runId),
134
+ };
135
+ }
136
+ function sameScope(left, right) {
137
+ return (left.tenantId === right.tenantId &&
138
+ left.projectId === right.projectId &&
139
+ left.sessionId === right.sessionId &&
140
+ left.runId === right.runId);
141
+ }
142
+ function validateSnapshotScope(snapshot, scope) {
143
+ const checked = validateTokenBudgetSnapshot(snapshot);
144
+ if (checked.rootRunId !== scope.runId)
145
+ throw new Error('Token budget root run mismatch');
146
+ return checked;
147
+ }
148
+ function rootLimit(snapshot) {
149
+ const account = snapshot.accounts.find((account) => account.id === snapshot.rootAccountId);
150
+ if (!account)
151
+ throw new Error('Token budget root account is missing');
152
+ return account.limit;
153
+ }
154
+ function assertSameRoot(before, after) {
155
+ if (before.rootAccountId !== after.rootAccountId) {
156
+ throw new Error('Cannot replace an existing token budget with a different root');
157
+ }
158
+ const reconciled = before.poisoned && !after.poisoned;
159
+ if (reconciled && after.requests.length > 0) {
160
+ throw new Error('Cannot reopen a token budget with unresolved requests');
161
+ }
162
+ const accounts = new Map(after.accounts.map((account) => [account.id, account]));
163
+ for (const previous of before.accounts) {
164
+ const current = accounts.get(previous.id);
165
+ if (!current ||
166
+ (previous.limit > 0 && (current.limit === 0 || current.limit > previous.limit)) ||
167
+ current.parentId !== previous.parentId ||
168
+ (previous.runId !== undefined && current.runId !== previous.runId) ||
169
+ (previous.settled && !current.settled)) {
170
+ throw new Error('Cannot replace or remove an existing token budget account');
171
+ }
172
+ for (const [runId, spent] of Object.entries(previous.usage)) {
173
+ const recorded = current.usage[runId];
174
+ if (!usageAtLeast(recorded, spent)) {
175
+ throw new Error('Cannot reduce recorded token budget usage');
176
+ }
177
+ }
178
+ }
179
+ const receipts = new Map(after.completedRequests.map((request) => [request.id, request]));
180
+ for (const previous of before.completedRequests) {
181
+ const current = receipts.get(previous.id);
182
+ if (!current ||
183
+ current.accountId !== previous.accountId ||
184
+ current.runId !== previous.runId ||
185
+ !usageAtLeast(current.usage, previous.usage)) {
186
+ throw new Error('Cannot remove or replace a token budget completion receipt');
187
+ }
188
+ }
189
+ const active = new Map(after.requests.map((request) => [request.id, request]));
190
+ for (const previous of before.requests) {
191
+ const current = active.get(previous.id) ?? receipts.get(previous.id);
192
+ if (!current ||
193
+ current.accountId !== previous.accountId ||
194
+ current.runId !== previous.runId ||
195
+ (reconciled && current.usage === undefined) ||
196
+ !usageAtLeast(current.usage, previous.usage)) {
197
+ throw new Error('Cannot forget an unresolved token budget request without a completion receipt');
198
+ }
199
+ }
200
+ }
201
+ function usageAtLeast(current, previous) {
202
+ if (previous === undefined)
203
+ return true;
204
+ if (current === undefined)
205
+ return false;
206
+ return Object.entries(previous).every(([field, amount]) => typeof amount !== 'number' || (current[field] ?? 0) >= amount);
207
+ }
208
+ //# sourceMappingURL=token-budget-disk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-budget-disk.js","sourceRoot":"","sources":["../../../src/store/run/token-budget-disk.ts"],"names":[],"mappings":"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"}
@@ -38,19 +38,10 @@ import type { SessionSummaryRef } from '../../types/summary/ref.js';
38
38
  */
39
39
  export declare function migrateSessionStoreMessageRecordKind(record: Record<string, unknown>): Record<string, unknown>;
40
40
  /**
41
- * v2 v3: NZ-TOPIC-04 narrows the Topic id prefix from `thd_` to `top_`.
42
- * The FIELD is already `topicId` (the v1→v2 step above handled that); this
43
- * step rewrites only the VALUE, and only when it still carries the old
44
- * prefix — a record already at v3, or one that just arrived here via the
45
- * v1→v2 step in the same `migrate()` call, has `topicId` starting `top_`
46
- * (or `thd_`, freshly renamed from `threadId` — this step runs on it next
47
- * in the same pass) either way, and the check below is what makes running
48
- * it on an already-correct value a same-object no-op rather than a
49
- * needless copy. Same one-function-runs-over-every-kind shape as its
50
- * v1→v2 sibling: only `PersistedSession.topicId` is ever `thd_`-prefixed,
51
- * so every other kind this schema stamps (project.json, subsession.json,
52
- * summary.json, each messages.jsonl line) has no `topicId` key and comes
53
- * back untouched.
41
+ * Validate topic UUIDs before accepting a stored record. Prefixed IDs are
42
+ * rejected without rewriting stored references.
43
+ * This migrator runs over every session-store record kind; records without
44
+ * a topicId are intentionally untouched.
54
45
  */
55
46
  export declare function migrateSessionStoreTopicIdPrefix(record: Record<string, unknown>): Record<string, unknown>;
56
47
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"disk.d.ts","sourceRoot":"","sources":["../../../src/store/session/disk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"disk.d.ts","sourceRoot":"","sources":["../../../src/store/session/disk.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ import { appendFile, mkdir, readFile, rm } from 'node:fs/promises';
25
25
  import { join } from 'node:path';
26
26
  import { ProjectRootPathTakenError, StaleProjectError, StaleSessionError, TenantIsolationError, } from '../../session/errors.js';
27
27
  import { SessionAlreadySummarizedError } from '../../session/summary/errors.js';
28
- import { generateMessageId, generateProjectId, generateSessionId, generateSubSessionId, } from '../../utils/id.js';
28
+ import { asProjectId, asSessionId, asSubSessionId, asTopicId, generateMessageId, generateProjectId, generateSessionId, generateSubSessionId, isEntityId, } from '../../utils/id.js';
29
29
  import { DiskRecordStore } from '../kv/record-store.js';
30
30
  import { DiskRevisionRecordStore, } from '../kv/revision-record-store.js';
31
31
  // `migrate` and `stamp` are imported directly for the append-only
@@ -90,25 +90,17 @@ export function migrateSessionStoreMessageRecordKind(record) {
90
90
  const records = new DiskRecordStore(SCHEMA);
91
91
  const rootPathBindings = new DiskRevisionRecordStore(SCHEMA, 'project root-path binding', (record) => record.storageRevision);
92
92
  /**
93
- * v2 v3: NZ-TOPIC-04 narrows the Topic id prefix from `thd_` to `top_`.
94
- * The FIELD is already `topicId` (the v1→v2 step above handled that); this
95
- * step rewrites only the VALUE, and only when it still carries the old
96
- * prefix — a record already at v3, or one that just arrived here via the
97
- * v1→v2 step in the same `migrate()` call, has `topicId` starting `top_`
98
- * (or `thd_`, freshly renamed from `threadId` — this step runs on it next
99
- * in the same pass) either way, and the check below is what makes running
100
- * it on an already-correct value a same-object no-op rather than a
101
- * needless copy. Same one-function-runs-over-every-kind shape as its
102
- * v1→v2 sibling: only `PersistedSession.topicId` is ever `thd_`-prefixed,
103
- * so every other kind this schema stamps (project.json, subsession.json,
104
- * summary.json, each messages.jsonl line) has no `topicId` key and comes
105
- * back untouched.
93
+ * Validate topic UUIDs before accepting a stored record. Prefixed IDs are
94
+ * rejected without rewriting stored references.
95
+ * This migrator runs over every session-store record kind; records without
96
+ * a topicId are intentionally untouched.
106
97
  */
107
98
  export function migrateSessionStoreTopicIdPrefix(record) {
108
99
  const topicId = record.topicId;
109
- if (typeof topicId !== 'string' || !topicId.startsWith('thd_'))
110
- return record;
111
- return { ...record, topicId: `top_${topicId.slice('thd_'.length)}` };
100
+ if (typeof topicId === 'string') {
101
+ asTopicId(topicId);
102
+ }
103
+ return record;
112
104
  }
113
105
  /**
114
106
  * v1 → v2: the FK field `session.json` carries to its owning Topic was
@@ -348,6 +340,8 @@ export class DiskSessionStore {
348
340
  const entries = await records.scanNames(projectsRoot, '');
349
341
  const found = [];
350
342
  for (const entry of entries) {
343
+ if (!isEntityId(entry, 'project'))
344
+ continue;
351
345
  const raw = await records.read(join(projectsRoot, entry, 'project.json'));
352
346
  if (!raw)
353
347
  continue;
@@ -366,13 +360,17 @@ export class DiskSessionStore {
366
360
  }
367
361
  // Session CRUD ------------------------------------------------------------
368
362
  async createSession(params, tenantId) {
363
+ const id = params.id === undefined ? generateSessionId() : asSessionId(params.id);
369
364
  const project = await this.getProject(params.projectId, tenantId);
370
365
  if (!project) {
371
366
  throw new Error(`Project ${params.projectId} not found`);
372
367
  }
373
368
  const now = new Date();
369
+ if (params.id !== undefined && (await this.getSession(id, tenantId))) {
370
+ throw new Error(`Session ${params.id} already exists`);
371
+ }
374
372
  const session = {
375
- id: generateSessionId(),
373
+ id,
376
374
  topicId: params.topicId,
377
375
  projectId: params.projectId,
378
376
  tenantId,
@@ -427,12 +425,12 @@ export class DiskSessionStore {
427
425
  const projectDirs = await records.scanNames(projectsDir, '');
428
426
  const results = [];
429
427
  for (const rawProject of projectDirs) {
430
- if (!rawProject.startsWith('prj_'))
428
+ if (!isEntityId(rawProject, 'project'))
431
429
  continue;
432
430
  const sessionsRoot = join(projectsDir, rawProject, 'sessions');
433
431
  const sessionDirs = await records.scanNames(sessionsRoot, '');
434
432
  for (const rawSessionId of sessionDirs) {
435
- if (!rawSessionId.startsWith('ses_'))
433
+ if (!isEntityId(rawSessionId, 'session'))
436
434
  continue;
437
435
  const path = join(sessionsRoot, rawSessionId);
438
436
  const raw = await records.read(join(path, 'session.json'));
@@ -462,7 +460,7 @@ export class DiskSessionStore {
462
460
  const sessionDirs = await records.scanNames(sessionsRoot, '');
463
461
  const results = [];
464
462
  for (const rawSessionId of sessionDirs) {
465
- if (!rawSessionId.startsWith('ses_'))
463
+ if (!isEntityId(rawSessionId, 'session'))
466
464
  continue;
467
465
  const path = join(sessionsRoot, rawSessionId);
468
466
  const raw = await records.read(join(path, 'session.json'));
@@ -521,7 +519,7 @@ export class DiskSessionStore {
521
519
  // match the in-memory semantics.
522
520
  const subsDir = join(located.path, 'subsessions');
523
521
  const subEntries = await records.scanNames(subsDir, '');
524
- if (subEntries.some((e) => e.startsWith('sub_'))) {
522
+ if (subEntries.some((entry) => isEntityId(entry, 'subSession'))) {
525
523
  throw new Error(`Session ${sessionId} has attached sub-sessions; delete them before deleting the session`);
526
524
  }
527
525
  // Also scan tree for sub-session records that reference this session as
@@ -532,17 +530,17 @@ export class DiskSessionStore {
532
530
  const projectsDir = join(this.rootDir, 'projects');
533
531
  const projectDirs = await records.scanNames(projectsDir, '');
534
532
  for (const rawProject of projectDirs) {
535
- if (!rawProject.startsWith('prj_'))
533
+ if (!isEntityId(rawProject, 'project'))
536
534
  continue;
537
535
  const sessionsRoot = join(projectsDir, rawProject, 'sessions');
538
536
  const siblingSessions = await records.scanNames(sessionsRoot, '');
539
537
  for (const rawSib of siblingSessions) {
540
- if (!rawSib.startsWith('ses_'))
538
+ if (!isEntityId(rawSib, 'session'))
541
539
  continue;
542
540
  const sibSubsDir = join(sessionsRoot, rawSib, 'subsessions');
543
541
  const sibSubs = await records.scanNames(sibSubsDir, '');
544
542
  for (const rawSub of sibSubs) {
545
- if (!rawSub.startsWith('sub_'))
543
+ if (!isEntityId(rawSub, 'subSession'))
546
544
  continue;
547
545
  const subRaw = await records.read(join(sibSubsDir, rawSub, 'subsession.json'));
548
546
  if (!subRaw)
@@ -823,6 +821,7 @@ export class DiskSessionStore {
823
821
  }
824
822
  }
825
823
  projectDir(projectId) {
824
+ asProjectId(projectId);
826
825
  const cached = this.projectIndex.get(projectId);
827
826
  if (cached)
828
827
  return cached.path;
@@ -831,6 +830,7 @@ export class DiskSessionStore {
831
830
  return path;
832
831
  }
833
832
  async locateSession(sessionId) {
833
+ asSessionId(sessionId);
834
834
  const cached = this.sessionIndex.get(sessionId);
835
835
  if (cached)
836
836
  return cached;
@@ -839,13 +839,13 @@ export class DiskSessionStore {
839
839
  // same `return null` the old catch took directly.
840
840
  const projectDirs = await records.scanNames(projectsDir, '');
841
841
  for (const rawId of projectDirs) {
842
- if (!rawId.startsWith('prj_'))
842
+ if (!isEntityId(rawId, 'project'))
843
843
  continue;
844
844
  const projectId = rawId;
845
845
  const sessionsRoot = join(projectsDir, projectId, 'sessions');
846
846
  const sessionDirs = await records.scanNames(sessionsRoot, '');
847
847
  for (const rawSessionId of sessionDirs) {
848
- if (!rawSessionId.startsWith('ses_'))
848
+ if (!isEntityId(rawSessionId, 'session'))
849
849
  continue;
850
850
  if (rawSessionId === sessionId) {
851
851
  const entry = {
@@ -861,6 +861,7 @@ export class DiskSessionStore {
861
861
  return null;
862
862
  }
863
863
  async locateSubSession(subSessionId) {
864
+ asSubSessionId(subSessionId);
864
865
  const cached = this.subSessionIndex.get(subSessionId);
865
866
  if (cached)
866
867
  return cached;
@@ -869,13 +870,13 @@ export class DiskSessionStore {
869
870
  // same `return null` the old catch took directly.
870
871
  const projectDirs = await records.scanNames(projectsDir, '');
871
872
  for (const rawProject of projectDirs) {
872
- if (!rawProject.startsWith('prj_'))
873
+ if (!isEntityId(rawProject, 'project'))
873
874
  continue;
874
875
  const projectId = rawProject;
875
876
  const sessionsRoot = join(projectsDir, projectId, 'sessions');
876
877
  const sessionDirs = await records.scanNames(sessionsRoot, '');
877
878
  for (const rawSession of sessionDirs) {
878
- if (!rawSession.startsWith('ses_'))
879
+ if (!isEntityId(rawSession, 'session'))
879
880
  continue;
880
881
  const sessionId = rawSession;
881
882
  const subsDir = join(sessionsRoot, sessionId, 'subsessions');
@@ -905,16 +906,18 @@ export class DiskSessionStore {
905
906
  // view the old catch returned directly.
906
907
  const projectDirs = await records.scanNames(projectsDir, '');
907
908
  for (const rawProject of projectDirs) {
908
- if (!rawProject.startsWith('prj_'))
909
+ if (!isEntityId(rawProject, 'project'))
909
910
  continue;
910
911
  const sessionsRoot = join(projectsDir, rawProject, 'sessions');
911
912
  const sessionDirs = await records.scanNames(sessionsRoot, '');
912
913
  for (const rawSession of sessionDirs) {
913
- if (!rawSession.startsWith('ses_'))
914
+ if (!isEntityId(rawSession, 'session'))
914
915
  continue;
915
916
  const subsRoot = join(sessionsRoot, rawSession, 'subsessions');
916
917
  const subDirs = await records.scanNames(subsRoot, '');
917
918
  for (const rawSub of subDirs) {
919
+ if (!isEntityId(rawSub, 'subSession'))
920
+ continue;
918
921
  const raw = await records.read(join(subsRoot, rawSub, 'subsession.json'));
919
922
  if (!raw)
920
923
  continue;