@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
@@ -35,6 +35,70 @@ export function resolveWithin(root: string, candidate: string | undefined): stri
35
35
  }
36
36
 
37
37
  /** True when `candidate` resolves inside `root`. */
38
+ /**
39
+ * The directories a tool may reach: the working directory first, then any
40
+ * the host added for the session (`/add-dir`). Relative paths resolve
41
+ * against the first; an absolute path is accepted inside any.
42
+ */
43
+ export function toolRoots(context: {
44
+ readonly workingDirectory: string
45
+ readonly additionalDirectories?: readonly string[]
46
+ }): readonly string[] {
47
+ return [context.workingDirectory, ...(context.additionalDirectories ?? [])]
48
+ }
49
+
50
+ function describeRoots(roots: readonly string[]): string {
51
+ return roots.length === 1
52
+ ? `inside ${resolve(roots[0] as string)}`
53
+ : `inside ${resolve(roots[0] as string)} or the added directories ${roots
54
+ .slice(1)
55
+ .map((r) => resolve(r))
56
+ .join(', ')}`
57
+ }
58
+
59
+ /** `resolveWithin` over several roots. See `toolRoots` for the order. */
60
+ export function resolveWithinAny(roots: readonly string[], candidate: string | undefined): string {
61
+ const [first, ...rest] = roots
62
+ if (first === undefined) throw new Error('No root to resolve within.')
63
+ if (rest.length === 0) return resolveWithin(first, candidate)
64
+ const resolved =
65
+ candidate === undefined || candidate === ''
66
+ ? resolve(first)
67
+ : resolve(resolve(first), candidate)
68
+ for (const root of roots) {
69
+ if (isWithin(root, resolved)) return resolveWithin(root, resolved)
70
+ }
71
+ throw new Error(
72
+ `Path escapes the working directory: ${candidate}. Tools may only reach ${describeRoots(roots)}.`,
73
+ )
74
+ }
75
+
76
+ /** `resolveWithinReal` over several roots: the first that contains the path, links followed. */
77
+ export async function resolveWithinAnyReal(
78
+ roots: readonly string[],
79
+ candidate: string | undefined,
80
+ ): Promise<string> {
81
+ const [first, ...rest] = roots
82
+ if (first === undefined) throw new Error('No root to resolve within.')
83
+ if (rest.length === 0) return resolveWithinReal(first, candidate)
84
+ const resolved =
85
+ candidate === undefined || candidate === ''
86
+ ? resolve(first)
87
+ : resolve(resolve(first), candidate)
88
+ let firstError: unknown
89
+ for (const root of roots) {
90
+ try {
91
+ return await resolveWithinReal(root, resolved)
92
+ } catch (err) {
93
+ firstError ??= err
94
+ }
95
+ }
96
+ throw new Error(
97
+ `Path escapes the working directory: ${candidate}. Tools may only reach ${describeRoots(roots)}.`,
98
+ { cause: firstError },
99
+ )
100
+ }
101
+
38
102
  export function isWithin(root: string, candidate: string): boolean {
39
103
  try {
40
104
  resolveWithin(root, candidate)
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Narrower rosters from a wider one.
3
+ *
4
+ * A delegate that can only look, or a file-defined agent with an allowlist,
5
+ * needs a registry that is the parent's minus something — and every host
6
+ * that builds delegates wrote the same two loops. They live here so the
7
+ * predicate for "read-only" is the one the authorization gate and the
8
+ * prompt exemption already use (`isTrustedReadOnly`), not a third reading
9
+ * of the same flag.
10
+ *
11
+ * Both filters INTERSECT: a name in an allowlist that the source does not
12
+ * carry is simply not there. A filter can never widen.
13
+ */
14
+
15
+ import { ToolRegistry } from '../registry/tool/execute.js'
16
+ import type { ToolRegistryContract } from '../types/tool/index.js'
17
+ import { isTrustedReadOnly } from './trusted-read-only.js'
18
+
19
+ /**
20
+ * The tools that declare themselves read-only and are trusted to say so.
21
+ *
22
+ * Decided by `isTrustedReadOnly` with no input, which is each tool's own
23
+ * declaration: a new read-only builtin joins the roster without this file
24
+ * learning its name, and a connected server's tool that merely CLAIMS to be
25
+ * read-only stays out unless its provenance is trusted.
26
+ */
27
+ export function filterReadOnlyTools(source: ToolRegistryContract): ToolRegistry {
28
+ const filtered = new ToolRegistry()
29
+ for (const tool of source.getAll()) {
30
+ if (isTrustedReadOnly(tool, undefined)) filtered.register(tool)
31
+ }
32
+ return filtered
33
+ }
34
+
35
+ /** The tools whose names are listed. Names the source does not carry are ignored. */
36
+ export function filterToolsNamed(
37
+ source: ToolRegistryContract,
38
+ names: Iterable<string>,
39
+ ): ToolRegistry {
40
+ const allowed = new Set(names)
41
+ const filtered = new ToolRegistry()
42
+ for (const tool of source.getAll()) {
43
+ if (allowed.has(tool.name)) filtered.register(tool)
44
+ }
45
+ return filtered
46
+ }
@@ -1,3 +1,4 @@
1
+ import type { TokenBudget } from '../../run/token-budget.js'
1
2
  import type { ProjectInstructionContext } from '../../runtime/query/project-instructions.js'
2
3
  import type { PathBuilder } from '../../session/workspace/path-builder.js'
3
4
  import type { Logger } from '../../utils/logger.js'
@@ -19,6 +20,8 @@ export type AgentContextLevel = 'full' | 'standard' | 'minimal'
19
20
  export interface BaseAgentConfig {
20
21
  model: string
21
22
  tokenBudget: number
23
+ /** Aggregate authority inherited by descendants; supplied independently of the numeric local cap. */
24
+ budget?: TokenBudget
22
25
  timeoutMs: number
23
26
  /** See {@link import('../run/config.js').AgentRunConfig.streamIdleTimeoutMs}. */
24
27
  streamIdleTimeoutMs?: number
@@ -271,6 +274,9 @@ export interface AgentInput {
271
274
  }
272
275
 
273
276
  export interface BaseAgentResult {
277
+ /** Aggregate tree accounting, separate from this invocation's own usage. */
278
+ budget?: ReturnType<TokenBudget['summary']>
279
+
274
280
  runId: RunId
275
281
  status: RunExecutionStatus
276
282
  stopReason?: StopReason
@@ -1,8 +1,11 @@
1
+ import type { TokenBudget } from '../../run/token-budget.js'
1
2
  import type { RunId } from '../ids/index.js'
2
3
  import type { LLMProvider } from '../provider/index.js'
3
4
  import type { BaseAgentConfig, BaseAgentResult } from './base.js'
4
5
 
5
6
  export interface StepContext {
7
+ /** Shared authority; reserve a child scope before invoking another agent. */
8
+ budget: TokenBudget
6
9
  runId: RunId
7
10
  stepIndex: number
8
11
  totalSteps: number
@@ -15,9 +15,8 @@ export interface RoutingDecision {
15
15
  *
16
16
  * Routing runs before the delegate's run exists, so it has no
17
17
  * `RunPersistence` to accumulate into. Reporting it here lets the
18
- * router fold it into the result it returns, instead of the caller
19
- * seeing only the delegate's usage and under-reporting every routed
20
- * run by one model call.
18
+ * router report its own model usage. The separate budget summary includes
19
+ * both routing and every delegated descendant.
21
20
  */
22
21
  usage?: TokenUsage
23
22
  }
@@ -1,3 +1,4 @@
1
+ import type { TokenBudget } from '../../run/token-budget.js'
1
2
  import type { TaskId } from '../ids/index.js'
2
3
  import type { AgentPersona } from '../persona/index.js'
3
4
  import type { CancelCause } from '../run/cancel-cause.js'
@@ -101,6 +102,9 @@ export interface CreateTaskOptions {
101
102
  }
102
103
 
103
104
  export interface TaskScheduler {
105
+ /** Authority under which this scheduler reserves and meters child execution. */
106
+ readonly budget?: TokenBudget
107
+
104
108
  createTask(options: CreateTaskOptions): Promise<TaskHandle>
105
109
 
106
110
  waitForTask(taskId: TaskId): Promise<TaskHandle>
@@ -1,3 +1,4 @@
1
+ import type { TokenBudget } from '../../run/token-budget.js'
1
2
  import type { ActorRef } from '../../types/session/actor.js'
2
3
  import type { WorkspaceBackendKind } from '../../types/workspace/ref.js'
3
4
  import type { ResumeHandler } from '../hitl/index.js'
@@ -37,7 +38,8 @@ export interface AgentTaskContext {
37
38
 
38
39
  depth: number
39
40
 
40
- budgetTracker: AgentTaskBudget
41
+ /** Shared authority for this parent and every delegated descendant. */
42
+ budget: TokenBudget
41
43
 
42
44
  factoryOptions?: AgentFactoryOptions
43
45
 
@@ -112,11 +114,8 @@ export interface AgentTaskContext {
112
114
  parentActor: ActorRef
113
115
  }
114
116
 
115
- export interface AgentTaskBudget {
116
- total: number
117
-
118
- remaining: number
119
- }
117
+ /** Budget authority shared by an agent task and its descendants. */
118
+ export type AgentTaskBudget = TokenBudget
120
119
 
121
120
  export interface AgentTask {
122
121
  taskId: TaskId
@@ -127,18 +126,6 @@ export interface AgentTask {
127
126
  state: AgentTaskState
128
127
  result?: BaseAgentResult
129
128
 
130
- /**
131
- * Tokens reserved from the shared pool when this child was spawned.
132
- *
133
- * A RESERVATION, not a spend: it is subtracted up front so siblings
134
- * cannot each be promised the same headroom, and the unused part is
135
- * returned when the child settles. Without the return, a pool shrank
136
- * by the full allocation every spawn regardless of what the child
137
- * actually used, so a long session ran out of budget while almost none
138
- * of it had been spent.
139
- */
140
- budgetReservation?: number
141
-
142
129
  pendingMessages: Message[]
143
130
  createdAt: number
144
131
  completedAt?: number
@@ -85,6 +85,9 @@ export function mergeTokenUsage(current: TokenUsage, next: TokenUsage): TokenUsa
85
85
  totalTokens: Math.max(current.totalTokens, next.totalTokens, promptTokens + completionTokens),
86
86
  cachedTokens: Math.max(current.cachedTokens, next.cachedTokens),
87
87
  cacheWriteTokens: Math.max(current.cacheWriteTokens, next.cacheWriteTokens),
88
+ ...(current.reasoningTokens !== undefined || next.reasoningTokens !== undefined
89
+ ? { reasoningTokens: Math.max(current.reasoningTokens ?? 0, next.reasoningTokens ?? 0) }
90
+ : {}),
88
91
  }
89
92
  }
90
93
 
@@ -30,6 +30,14 @@ export interface ComputerUseCapabilities {
30
30
  readonly keyboard: boolean
31
31
  readonly cursorPosition: boolean
32
32
  readonly clipboard: boolean
33
+ /**
34
+ * Why every flag above is false, when a host loaded but the desktop did
35
+ * not answer — a WSL process with PowerShell and no interactive Windows
36
+ * session, an ssh session with no display. Present, the tool stays
37
+ * mounted and says this in its description and in every refusal, so the
38
+ * model reads the reason once and does not try again.
39
+ */
40
+ readonly unavailableReason?: string
33
41
  }
34
42
 
35
43
  // ---------------------------------------------------------------------------
@@ -4,6 +4,7 @@ import type { CostInfo, TokenUsage } from '../common/index.js'
4
4
  import type { CheckpointId, PlanId, RunId } from '../ids/index.js'
5
5
  import type { Message } from '../message/index.js'
6
6
  import type { PlanStatus } from '../plan/index.js'
7
+ import type { TokenBudgetBinding } from '../run/token-budget-store.js'
7
8
 
8
9
  export type { CheckpointId }
9
10
 
@@ -203,6 +204,10 @@ export interface PendingDecision {
203
204
  }
204
205
 
205
206
  export interface IterationCheckpoint {
207
+ /** Reference to the canonical tree ledger; a checkpoint never resets it. */
208
+ readonly budgetBinding?: TokenBudgetBinding
209
+ /** Also present for non-durable accounts; those require the live authority on resume. */
210
+ readonly budgetAccountId?: string
206
211
  id: CheckpointId
207
212
  runId: RunId
208
213
  iteration: number
@@ -1,57 +1,14 @@
1
- /**
2
- * Nominal-brand machinery for the id types — declared here, not yet applied.
3
- *
4
- * Today every id in `./index.ts` is a bare template-literal type, and
5
- * TypeScript's assignability rule for those means
6
- * `const x: RunId = 'run_totally-made-up'` compiles with no cast and no
7
- * factory call. The result is indistinguishable at the type level from an id
8
- * `generateRunId()` actually minted, so the compiler cannot tell a real id
9
- * from a plausible-looking string.
10
- *
11
- * Applying this brand is a separate change, on purpose: flipping the
12
- * declarations turns every existing bare literal into an error at once, and
13
- * that is a `major` with a migration in front of it. This file ships the
14
- * machinery and the runtime constructors that use it so the two can land
15
- * independently — the constructors are useful on their own, since there is
16
- * no runtime prefix validation in the tree at all today.
17
- *
18
- * **The prefix stays in the type, and that is the one place this diverges
19
- * from a plain `Branded<B>`.** A brand alone would render as `RunId` in
20
- * hovers and errors and tell a reader nothing about the shape. Keeping
21
- * `` `${Prefix}_${string}` `` in the intersection means an editor hover still
22
- * shows `run_${string}`, which is most of what makes these ids readable in
23
- * a log line.
24
- */
25
-
1
+ /** Nominal identity is independent of the identifier's serialized spelling. */
26
2
  declare const ID_BRAND: unique symbol
27
3
 
28
- /**
29
- * An id with both its wire shape and a nominal tag.
30
- *
31
- * `B` is a string tag rather than the type's own name by convention — two
32
- * ids with the same prefix but different meanings must not be mutually
33
- * assignable, and only the tag can separate them.
34
- */
35
- export type Id<Prefix extends string, B extends string> = `${Prefix}_${string}` & {
4
+ /** An opaque string whose tag prevents mixing different entity types. */
5
+ export type Id<B extends string> = string & {
36
6
  readonly [ID_BRAND]: B
37
7
  }
38
8
 
39
9
  /**
40
- * The one way to produce a branded id without a runtime check.
41
- *
42
- * A brand cannot be constructed by writing it — `{ [ID_BRAND]: 'RunId' }` is
43
- * not something a caller can type, since the symbol is not exported. So
44
- * every id has to come from somewhere, and there are exactly three places:
45
- * `generate*Id()` mints one, `as*Id()` checks a string into one, and this.
46
- *
47
- * Named `unsafeId` rather than `toId` because the name is the warning, and
48
- * kept HERE rather than in `utils/id.ts` because this file has no imports —
49
- * `types/ids/index.ts` needs it for `UNKNOWN_TENANT_ID` and cannot import
50
- * from `utils/id.ts` without closing a cycle.
51
- *
52
- * Not exported from the package barrel. A consumer that needs an id from a
53
- * string wants the checked constructor; one that wants to skip the check is
54
- * asking for the thing the brand exists to prevent.
10
+ * Internal escape hatch for factories and checked constructors. Not exported
11
+ * from the package barrel; consumers validate external strings with `as*Id`.
55
12
  */
56
13
  export function unsafeId<T extends string>(value: string): T {
57
14
  return value as unknown as T
@@ -1,25 +1,21 @@
1
- import { type Id, unsafeId } from './brand.js'
1
+ import type { Id } from './brand.js'
2
2
 
3
3
  /**
4
- * Every id here is NOMINAL as of NZ-SURF-11: `Id<Prefix, Tag>` intersects the
5
- * wire shape with a unique-symbol brand, so `const a: RunId = 'run_x'` no
6
- * longer compiles and neither does handing a `SessionId` where a `RunId` was
7
- * asked for. Ids are minted by `generate*Id()` or checked by `as*Id()` in
8
- * `utils/id.ts`; fixtures use `test-support/ids.ts`.
4
+ * Entity ids are opaque branded strings. Factories mint UUIDs; checked
5
+ * constructors reject every other spelling, including earlier type prefixes.
6
+ * A RunId cannot be assigned to a SessionId even though their wire shapes
7
+ * are identical. Persisted records and typed fields establish the kind,
8
+ * not the spelling of the id.
9
9
  *
10
- * **What this does NOT stop, measured rather than assumed:** a type
11
- * ASSERTION. `'run_x' as RunId` and `someString as RunId` both still compile,
12
- * because TypeScript's assertion rule only asks that the two types be
13
- * comparable and a string is comparable to a branded string. The brand makes
14
- * a rule against `as <IdType>` enforceable — it does not replace one. See
15
- * `__tests__/an-id-is-not-a-string.test.ts`, which pins both halves.
10
+ * Brands do not validate a type assertion. Use the checked constructors
11
+ * for values received from JSON, flags, URLs, or other untyped boundaries.
16
12
  */
17
- export type RunId = Id<'run', 'RunId'>
18
- export type MessageId = Id<'msg', 'MessageId'>
19
- export type SessionId = Id<'ses', 'SessionId'>
13
+ export type RunId = Id<'RunId'>
14
+ export type MessageId = Id<'MessageId'>
15
+ export type SessionId = Id<'SessionId'>
20
16
  /** Identifies one durable completion goal across its revisions. */
21
- export type GoalId = Id<'goal', 'GoalId'>
22
- export type ToolCallId = Id<'call', 'ToolCallId'>
17
+ export type GoalId = Id<'GoalId'>
18
+ export type ToolCallId = Id<'ToolCallId'>
23
19
  /**
24
20
  * Provider-issued tool-use identifier surfaced on the streaming event bus.
25
21
  * Providers emit different prefixes (`toolu_*`, `call_*`,
@@ -30,38 +26,38 @@ export type ToolCallId = Id<'call', 'ToolCallId'>
30
26
  * persisted assistant messages and replay records.
31
27
  */
32
28
  export type ToolUseId = string
33
- export type ActivityId = Id<'act', 'ActivityId'>
34
- export type TaskId = Id<'task', 'TaskId'>
35
- export type PlanId = Id<'plan', 'PlanId'>
36
- export type KnowledgeBaseId = Id<'kb', 'KnowledgeBaseId'>
37
- export type DocumentId = Id<'doc', 'DocumentId'>
38
- export type ChunkId = Id<'chk', 'ChunkId'>
39
- export type ConnectorId = Id<'conn', 'ConnectorId'>
40
- export type ConnectorInstanceId = Id<'ci', 'ConnectorInstanceId'>
41
- export type TenantId = Id<'tnt', 'TenantId'>
42
- export type CredentialId = Id<'cred', 'CredentialId'>
43
- export type ExecutionContextId = Id<'ectx', 'ExecutionContextId'>
44
- export type MCPServerId = Id<'mcp', 'MCPServerId'>
45
- export type MCPClientId = Id<'mcpc', 'MCPClientId'>
46
- export type MCPSessionId = Id<'mcps', 'MCPSessionId'>
47
- export type EnvironmentId = Id<'env', 'EnvironmentId'>
48
- export type CheckpointId = Id<'cp', 'CheckpointId'>
49
- export type LockId = Id<'lock', 'LockId'>
50
- export type AdvisoryId = Id<'adv', 'AdvisoryId'>
51
- export type AdvisoryCallId = Id<'advc', 'AdvisoryCallId'>
52
- export type EmergencySaveId = Id<'esave', 'EmergencySaveId'>
53
- export type MemoryId = Id<'mem', 'MemoryId'>
54
- export type PluginId = Id<'plg', 'PluginId'>
55
- export type SandboxId = Id<'sbx', 'SandboxId'>
29
+ export type ActivityId = Id<'ActivityId'>
30
+ export type TaskId = Id<'TaskId'>
31
+ export type PlanId = Id<'PlanId'>
32
+ export type KnowledgeBaseId = Id<'KnowledgeBaseId'>
33
+ export type DocumentId = Id<'DocumentId'>
34
+ export type ChunkId = Id<'ChunkId'>
35
+ export type ConnectorId = Id<'ConnectorId'>
36
+ export type ConnectorInstanceId = Id<'ConnectorInstanceId'>
37
+ export type TenantId = Id<'TenantId'>
38
+ export type CredentialId = Id<'CredentialId'>
39
+ export type ExecutionContextId = Id<'ExecutionContextId'>
40
+ export type MCPServerId = Id<'MCPServerId'>
41
+ export type MCPClientId = Id<'MCPClientId'>
42
+ export type MCPSessionId = Id<'MCPSessionId'>
43
+ export type EnvironmentId = Id<'EnvironmentId'>
44
+ export type CheckpointId = Id<'CheckpointId'>
45
+ export type LockId = Id<'LockId'>
46
+ export type AdvisoryId = Id<'AdvisoryId'>
47
+ export type AdvisoryCallId = Id<'AdvisoryCallId'>
48
+ export type EmergencySaveId = Id<'EmergencySaveId'>
49
+ export type MemoryId = Id<'MemoryId'>
50
+ export type PluginId = Id<'PluginId'>
51
+ export type SandboxId = Id<'SandboxId'>
56
52
  /** LOG-14: the audit trail's own record id — distinct from `RunEvent.seq`. */
57
- export type AuditEventId = Id<'aud', 'AuditEventId'>
53
+ export type AuditEventId = Id<'AuditEventId'>
58
54
 
59
55
  // Actor identifiers (Session Hierarchy §4.3).
60
56
  //
61
57
  // This block used to say "branded so actor refs cannot be constructed from
62
58
  // bare strings" while the compiler enforced nothing. NZ-SURF-11 made that
63
59
  // true for `UserId`: `const a: UserId = 'usr_made-up'` is now an error.
64
- export type UserId = Id<'usr', 'UserId'>
60
+ export type UserId = Id<'UserId'>
65
61
 
66
62
  /**
67
63
  * @deprecated An agent is identified by its REGISTRY KEY, and this type
@@ -77,47 +73,42 @@ export type UserId = Id<'usr', 'UserId'>
77
73
  *
78
74
  * Kept for one release rather than deleted, per the deprecate-before-remove
79
75
  * rule: a consumer that annotated its own variable `AgentId` still compiles
80
- * and gets a warning. `asAgentId` is deprecated for the same reason and
81
- * would throw on every value the kernel actually produces.
76
+ * and gets a warning. `asAgentId` is deprecated for the same reason: registry
77
+ * keys have no entity-id spelling contract.
82
78
  */
83
- export type AgentId = Id<'agt', 'AgentId'>
79
+ export type AgentId = Id<'AgentId'>
84
80
 
85
81
  // Shared-store placeholder refs (Session Hierarchy §4.2 / §3.2). Full shapes
86
82
  // land in later phases; kept here as opaque branded IDs so ProjectConfig can
87
83
  // reference them today.
88
- export type MemoryStoreRef = Id<'mms', 'MemoryStoreRef'>
89
- export type VaultRef = Id<'vlt', 'VaultRef'>
90
- export type KnowledgeBaseRef = Id<'kbs', 'KnowledgeBaseRef'>
84
+ export type MemoryStoreRef = Id<'MemoryStoreRef'>
85
+ export type VaultRef = Id<'VaultRef'>
86
+ export type KnowledgeBaseRef = Id<'KnowledgeBaseRef'>
91
87
 
92
- // Session hierarchy IDs. Convention #2 branded IDs; prefixes mandated by the
93
- // five-layer hierarchy (Project → Thread → Session → SubSession → Run). The
94
- // `types/session/ids.ts` barrel re-exports these for co-location ergonomics.
95
- export type ProjectId = Id<'prj', 'ProjectId'>
88
+ // Session hierarchy identities; types/session/ids.ts re-exports these.
89
+ export type ProjectId = Id<'ProjectId'>
96
90
  /**
97
- * NZ-TOPIC-04: narrowed from the NZ-TOPIC-01 alias `type TopicId = ThreadId`
98
- * (both `thd_${string}`) to its own prefix. `thd_` from here on means only
99
- * the pre-0.2.0 top-level container (`session/migration/id-prefix.ts`,
100
- * `session/migration/filesystem.ts`) -- a meaning `ThreadId` never carried;
101
- * it was purely the deprecated name for THIS type. Deleted rather than
102
- * repurposed to mean the legacy container instead: a name whose meaning
103
- * silently changes under unmigrated callers is worse than a name that is
104
- * gone (Convention #0, no silent long-lived compat).
91
+ * A topic is distinct from its project; each carries its own opaque UUID.
105
92
  */
106
- export type TopicId = Id<'top', 'TopicId'>
107
- export type SubSessionId = Id<'sub', 'SubSessionId'>
108
- export type HandoffId = Id<'hof', 'HandoffId'>
109
- export type WorkspaceId = Id<'wsp', 'WorkspaceId'>
110
- export type SummaryId = Id<'sum', 'SummaryId'>
111
- export type DeliverableId = Id<'del', 'DeliverableId'>
93
+ export type TopicId = Id<'TopicId'>
94
+ export type SubSessionId = Id<'SubSessionId'>
95
+ export type HandoffId = Id<'HandoffId'>
96
+ export type WorkspaceId = Id<'WorkspaceId'>
97
+ export type SummaryId = Id<'SummaryId'>
98
+ export type DeliverableId = Id<'DeliverableId'>
112
99
 
113
100
  /**
114
- * Sentinel {@link TenantId} for legacy pre-0.2.0 runs rehomed by the
115
- * boot-time filesystem migration. Consumers with strict tenant enforcement
116
- * should either tag these records on first access or reject them until a
117
- * real tenant is assigned — the kernel surfaces the sentinel but does not
118
- * prescribe policy (Convention #17).
101
+ * @deprecated All prefixed IDs are rejected by InvalidIdError. This error
102
+ * remains exported for callers that referenced the earlier exception type.
119
103
  */
120
- // `unsafeId`, not `asTenantId`: `utils/id.ts` imports this file, so reaching
121
- // for its constructor here would close a cycle. The prefix is pinned by
122
- // `__tests__/an-id-is-not-a-string.test.ts` instead.
123
- export const UNKNOWN_TENANT_ID = unsafeId<TenantId>('tnt_unknown_legacy')
104
+ export class RetiredIdPrefixError extends Error {
105
+ constructor(
106
+ readonly value: string,
107
+ readonly expectedPrefix: string,
108
+ ) {
109
+ super(
110
+ `Retired id prefix: ${JSON.stringify(value)} is not a ${JSON.stringify(expectedPrefix)} id. Records written by namzu before 0.2 are not read by this version; open them with a 0.x namzu that migrates them, or start fresh.`,
111
+ )
112
+ this.name = 'RetiredIdPrefixError'
113
+ }
114
+ }
@@ -1 +1,12 @@
1
1
  export type PermissionMode = 'plan' | 'auto'
2
+
3
+ /**
4
+ * What the model is told when a mutating call is refused under plan mode.
5
+ *
6
+ * Here rather than beside the review policy because two doors say it: the
7
+ * review-time policy (`createReviewPolicy({ mode: 'plan' })`) and the
8
+ * execution-time floor in the tool registry. One text, so the model gets
9
+ * the same instruction whichever door it hit.
10
+ */
11
+ export const PLAN_MODE_REFUSAL =
12
+ 'Refused: plan mode is read-only. Explore with the reading tools, then present the plan as your reply — what you would change, in which files, and in what order. The user will switch out of plan mode to have it carried out.'
@@ -8,7 +8,7 @@ import {
8
8
  MAX_TOOLS_PER_PLUGIN,
9
9
  PLUGIN_NAME_MAX_LENGTH,
10
10
  } from '../../constants/plugin/index.js'
11
- import type { PluginId, RunId } from '../ids/index.js'
11
+ import type { PluginId, RunId, SessionId } from '../ids/index.js'
12
12
  import type { Message, ToolResultContent } from '../message/index.js'
13
13
  import type { CancelCause } from '../run/cancel-cause.js'
14
14
  import type { ToolResult } from '../tool/index.js'
@@ -84,6 +84,20 @@ export function assertPluginContributionType(type: PluginContributionType): void
84
84
  // ---------------------------------------------------------------------------
85
85
 
86
86
  export type PluginHookEvent =
87
+ /**
88
+ * The operator's prompt, before the model sees it. Carries `prompt`.
89
+ * The one event that can BLOCK a run (`skip`) and the one that can add
90
+ * to what the model is told (`annotate`).
91
+ */
92
+ | 'user_prompt_submit'
93
+ /** A host's session opened or closed. Carries `sessionId`; `runId` is minted for the session's own hooks. */
94
+ | 'session_start'
95
+ | 'session_end'
96
+ /** A compaction pass is about to run / has run. Carries `compaction`. */
97
+ | 'pre_compact'
98
+ | 'post_compact'
99
+ /** A delegated run ended. Fired after its own `run_end`; carries `parentRunId`. */
100
+ | 'subagent_stop'
87
101
  | 'run_start'
88
102
  | 'run_end'
89
103
  | 'run_interrupt'
@@ -96,6 +110,12 @@ export type PluginHookEvent =
96
110
 
97
111
  export function assertPluginHookEvent(event: PluginHookEvent): void {
98
112
  switch (event) {
113
+ case 'user_prompt_submit':
114
+ case 'session_start':
115
+ case 'session_end':
116
+ case 'pre_compact':
117
+ case 'post_compact':
118
+ case 'subagent_stop':
99
119
  case 'run_start':
100
120
  case 'run_end':
101
121
  case 'run_interrupt':
@@ -142,10 +162,28 @@ export interface PluginModelResponse {
142
162
  }
143
163
  }
144
164
 
165
+ /** What a compaction hook is shown about the pass. */
166
+ export interface PluginCompactionInfo {
167
+ /** `threshold`: the estimate crossed the line. `overflow`: the provider rejected the prompt. */
168
+ readonly reason: 'threshold' | 'overflow'
169
+ readonly tokensBefore: number
170
+ /** Present on `post_compact`. */
171
+ readonly tokensAfter?: number
172
+ readonly contextWindowTokens: number
173
+ }
174
+
145
175
  export interface PluginHookContext {
146
176
  readonly runId: RunId
147
177
  readonly pluginId: PluginId
148
178
  readonly event: PluginHookEvent
179
+ /** The host's session, on `session_*` and `user_prompt_submit`. */
180
+ readonly sessionId?: SessionId
181
+ /** The run that delegated, on `subagent_stop`. */
182
+ readonly parentRunId?: RunId
183
+ /** The operator's prompt, on `user_prompt_submit`. */
184
+ readonly prompt?: string
185
+ /** The pass, on `pre_compact` and `post_compact`. */
186
+ readonly compaction?: PluginCompactionInfo
149
187
  readonly toolName?: string
150
188
  readonly toolInput?: unknown
151
189
  readonly toolResult?: ToolResult
@@ -204,6 +242,15 @@ export interface PluginHookContext {
204
242
 
205
243
  export type PluginHookResult =
206
244
  | { action: 'continue' }
245
+ /**
246
+ * Add to what the model is told, without changing anything else.
247
+ *
248
+ * The answer a `user_prompt_submit` hook gives when it has context the
249
+ * model should have — the branch, the time, a ticket — and no opinion
250
+ * on the prompt. Accepted on that event only: a tool hook that returns
251
+ * it is rejected, because a tool result is not a place for context.
252
+ */
253
+ | { action: 'annotate'; text: string }
207
254
  | { action: 'skip'; reason: string }
208
255
  | { action: 'modify'; input: unknown }
209
256
  | { action: 'error'; message: string }
@@ -238,6 +285,7 @@ export function assertPluginHookResult(result: PluginHookResult): asserts result
238
285
  const action = result.action
239
286
  switch (action) {
240
287
  case 'continue':
288
+ case 'annotate':
241
289
  case 'skip':
242
290
  case 'modify':
243
291
  case 'error':
@@ -1,3 +1,4 @@
1
+ import type { TokenBudget } from '../../run/token-budget.js'
1
2
  import type { ModelPricing } from '../../utils/cost.js'
2
3
  import type { Logger } from '../../utils/logger.js'
3
4
  import type { RunId, SessionId, TenantId } from '../ids/index.js'
@@ -152,6 +153,8 @@ export interface AgentRunConfig {
152
153
  * Convention #17).
153
154
  */
154
155
  export interface RunPersistenceConfig {
156
+ /** Shared account for this invocation and its delegated descendants. */
157
+ budget?: TokenBudget
155
158
  runId: RunId
156
159
  agentId: string
157
160
  agentName: string