@namzu/sdk 34.2.0 → 36.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 (669) hide show
  1. package/CHANGELOG.md +171 -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 +150 -0
  175. package/dist/provider/token-budget.js.map +1 -0
  176. package/dist/public-runtime.d.ts +14 -14
  177. package/dist/public-runtime.d.ts.map +1 -1
  178. package/dist/public-runtime.js +15 -10
  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 +13 -9
  214. package/dist/runtime/query/executor.d.ts.map +1 -1
  215. package/dist/runtime/query/executor.js +144 -55
  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 +42 -4
  221. package/dist/runtime/query/index.d.ts.map +1 -1
  222. package/dist/runtime/query/index.js +153 -52
  223. package/dist/runtime/query/index.js.map +1 -1
  224. package/dist/runtime/query/iteration/index.d.ts +3 -3
  225. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  226. package/dist/runtime/query/iteration/index.js +47 -11
  227. package/dist/runtime/query/iteration/index.js.map +1 -1
  228. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  229. package/dist/runtime/query/iteration/phases/compaction.js +98 -30
  230. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  231. package/dist/runtime/query/iteration/phases/context.d.ts +4 -0
  232. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  233. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  234. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  235. package/dist/runtime/query/iteration/phases/tool-review.js +29 -7
  236. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  237. package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -1
  238. package/dist/runtime/query/iteration/phases/working-memory.js +25 -15
  239. package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -1
  240. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  241. package/dist/runtime/query/iteration/stream-turn.js +10 -5
  242. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  243. package/dist/runtime/query/plugin-hooks.d.ts +1 -1
  244. package/dist/runtime/query/plugin-hooks.d.ts.map +1 -1
  245. package/dist/runtime/query/plugin-hooks.js +20 -1
  246. package/dist/runtime/query/plugin-hooks.js.map +1 -1
  247. package/dist/runtime/query/prompt.d.ts.map +1 -1
  248. package/dist/runtime/query/prompt.js +14 -4
  249. package/dist/runtime/query/prompt.js.map +1 -1
  250. package/dist/runtime/query/repeat-call.d.ts +20 -2
  251. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  252. package/dist/runtime/query/repeat-call.js +35 -7
  253. package/dist/runtime/query/repeat-call.js.map +1 -1
  254. package/dist/runtime/query/result.d.ts.map +1 -1
  255. package/dist/runtime/query/result.js +9 -0
  256. package/dist/runtime/query/result.js.map +1 -1
  257. package/dist/runtime/query/review-policy.d.ts +142 -0
  258. package/dist/runtime/query/review-policy.d.ts.map +1 -0
  259. package/dist/runtime/query/review-policy.js +144 -0
  260. package/dist/runtime/query/review-policy.js.map +1 -0
  261. package/dist/runtime/query/run-state.d.ts.map +1 -1
  262. package/dist/runtime/query/run-state.js +4 -0
  263. package/dist/runtime/query/run-state.js.map +1 -1
  264. package/dist/runtime/query/steering.d.ts +4 -0
  265. package/dist/runtime/query/steering.d.ts.map +1 -1
  266. package/dist/runtime/query/steering.js +29 -0
  267. package/dist/runtime/query/steering.js.map +1 -1
  268. package/dist/runtime/query/token-budget.d.ts +7 -0
  269. package/dist/runtime/query/token-budget.d.ts.map +1 -0
  270. package/dist/runtime/query/token-budget.js +101 -0
  271. package/dist/runtime/query/token-budget.js.map +1 -0
  272. package/dist/runtime/query/tool-output-budget.d.ts +2 -0
  273. package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
  274. package/dist/runtime/query/tool-output-budget.js +29 -11
  275. package/dist/runtime/query/tool-output-budget.js.map +1 -1
  276. package/dist/runtime/query/tool-pause.d.ts.map +1 -1
  277. package/dist/runtime/query/tool-pause.js +4 -2
  278. package/dist/runtime/query/tool-pause.js.map +1 -1
  279. package/dist/runtime/query/tooling.d.ts +4 -0
  280. package/dist/runtime/query/tooling.d.ts.map +1 -1
  281. package/dist/runtime/query/tooling.js +4 -0
  282. package/dist/runtime/query/tooling.js.map +1 -1
  283. package/dist/sandbox/file-walk-program.d.ts +3 -0
  284. package/dist/sandbox/file-walk-program.d.ts.map +1 -0
  285. package/dist/sandbox/file-walk-program.js +94 -0
  286. package/dist/sandbox/file-walk-program.js.map +1 -0
  287. package/dist/sandbox/file-walk.d.ts +12 -0
  288. package/dist/sandbox/file-walk.d.ts.map +1 -0
  289. package/dist/sandbox/file-walk.js +429 -0
  290. package/dist/sandbox/file-walk.js.map +1 -0
  291. package/dist/sandbox/index.d.ts +2 -0
  292. package/dist/sandbox/index.d.ts.map +1 -1
  293. package/dist/sandbox/index.js +1 -0
  294. package/dist/sandbox/index.js.map +1 -1
  295. package/dist/sandbox/provider/local.d.ts +3 -1
  296. package/dist/sandbox/provider/local.d.ts.map +1 -1
  297. package/dist/sandbox/provider/local.js +121 -12
  298. package/dist/sandbox/provider/local.js.map +1 -1
  299. package/dist/scheduler/completion-inbox.d.ts +3 -2
  300. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  301. package/dist/scheduler/completion-inbox.js +29 -15
  302. package/dist/scheduler/completion-inbox.js.map +1 -1
  303. package/dist/scheduler/delegating.d.ts +1 -0
  304. package/dist/scheduler/delegating.d.ts.map +1 -1
  305. package/dist/scheduler/delegating.js +29 -12
  306. package/dist/scheduler/delegating.js.map +1 -1
  307. package/dist/scheduler/local.d.ts +1 -0
  308. package/dist/scheduler/local.d.ts.map +1 -1
  309. package/dist/scheduler/local.js +4 -7
  310. package/dist/scheduler/local.js.map +1 -1
  311. package/dist/session/index.d.ts +0 -1
  312. package/dist/session/index.d.ts.map +1 -1
  313. package/dist/session/index.js +0 -1
  314. package/dist/session/index.js.map +1 -1
  315. package/dist/session/workspace/path-builder.d.ts.map +1 -1
  316. package/dist/session/workspace/path-builder.js +5 -4
  317. package/dist/session/workspace/path-builder.js.map +1 -1
  318. package/dist/store/feedback/disk.d.ts.map +1 -1
  319. package/dist/store/feedback/disk.js +4 -6
  320. package/dist/store/feedback/disk.js.map +1 -1
  321. package/dist/store/index.d.ts +2 -0
  322. package/dist/store/index.d.ts.map +1 -1
  323. package/dist/store/index.js +1 -0
  324. package/dist/store/index.js.map +1 -1
  325. package/dist/store/memory/disk.d.ts.map +1 -1
  326. package/dist/store/memory/disk.js +3 -12
  327. package/dist/store/memory/disk.js.map +1 -1
  328. package/dist/store/run/checkpoint-disk.d.ts +3 -3
  329. package/dist/store/run/checkpoint-disk.d.ts.map +1 -1
  330. package/dist/store/run/checkpoint-disk.js +14 -26
  331. package/dist/store/run/checkpoint-disk.js.map +1 -1
  332. package/dist/store/run/claim-disk.js +1 -1
  333. package/dist/store/run/conformance.d.ts +1 -1
  334. package/dist/store/run/conformance.d.ts.map +1 -1
  335. package/dist/store/run/conformance.js +41 -33
  336. package/dist/store/run/conformance.js.map +1 -1
  337. package/dist/store/run/disk.d.ts.map +1 -1
  338. package/dist/store/run/disk.js +20 -4
  339. package/dist/store/run/disk.js.map +1 -1
  340. package/dist/store/run/token-budget-disk.d.ts +37 -0
  341. package/dist/store/run/token-budget-disk.d.ts.map +1 -0
  342. package/dist/store/run/token-budget-disk.js +208 -0
  343. package/dist/store/run/token-budget-disk.js.map +1 -0
  344. package/dist/store/session/disk.d.ts +4 -13
  345. package/dist/store/session/disk.d.ts.map +1 -1
  346. package/dist/store/session/disk.js +34 -31
  347. package/dist/store/session/disk.js.map +1 -1
  348. package/dist/store/session/memory.d.ts +2 -0
  349. package/dist/store/session/memory.d.ts.map +1 -1
  350. package/dist/store/session/memory.js +41 -2
  351. package/dist/store/session/memory.js.map +1 -1
  352. package/dist/store/task/disk.d.ts.map +1 -1
  353. package/dist/store/task/disk.js +7 -8
  354. package/dist/store/task/disk.js.map +1 -1
  355. package/dist/store/topic/memory.d.ts +2 -0
  356. package/dist/store/topic/memory.d.ts.map +1 -1
  357. package/dist/store/topic/memory.js +13 -1
  358. package/dist/store/topic/memory.js.map +1 -1
  359. package/dist/test-support/ids.d.ts +4 -19
  360. package/dist/test-support/ids.d.ts.map +1 -1
  361. package/dist/test-support/ids.js +51 -59
  362. package/dist/test-support/ids.js.map +1 -1
  363. package/dist/tools/advisory/index.d.ts.map +1 -1
  364. package/dist/tools/advisory/index.js +3 -1
  365. package/dist/tools/advisory/index.js.map +1 -1
  366. package/dist/tools/builtins/bash.d.ts +2 -0
  367. package/dist/tools/builtins/bash.d.ts.map +1 -1
  368. package/dist/tools/builtins/bash.js +224 -70
  369. package/dist/tools/builtins/bash.js.map +1 -1
  370. package/dist/tools/builtins/computer-use.d.ts +2 -2
  371. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  372. package/dist/tools/builtins/computer-use.js +4 -2
  373. package/dist/tools/builtins/computer-use.js.map +1 -1
  374. package/dist/tools/builtins/edit.js +2 -2
  375. package/dist/tools/builtins/edit.js.map +1 -1
  376. package/dist/tools/builtins/glob.d.ts +2 -1
  377. package/dist/tools/builtins/glob.d.ts.map +1 -1
  378. package/dist/tools/builtins/glob.js +95 -103
  379. package/dist/tools/builtins/glob.js.map +1 -1
  380. package/dist/tools/builtins/grep.d.ts.map +1 -1
  381. package/dist/tools/builtins/grep.js +155 -111
  382. package/dist/tools/builtins/grep.js.map +1 -1
  383. package/dist/tools/builtins/ls.js +4 -4
  384. package/dist/tools/builtins/ls.js.map +1 -1
  385. package/dist/tools/builtins/lsp.js +2 -2
  386. package/dist/tools/builtins/lsp.js.map +1 -1
  387. package/dist/tools/builtins/read-file.js +2 -2
  388. package/dist/tools/builtins/read-file.js.map +1 -1
  389. package/dist/tools/builtins/write-file.js +2 -2
  390. package/dist/tools/builtins/write-file.js.map +1 -1
  391. package/dist/tools/coordinator/ask-user-question.d.ts +33 -0
  392. package/dist/tools/coordinator/ask-user-question.d.ts.map +1 -0
  393. package/dist/tools/coordinator/ask-user-question.js +237 -0
  394. package/dist/tools/coordinator/ask-user-question.js.map +1 -0
  395. package/dist/tools/coordinator/index.d.ts +1 -2
  396. package/dist/tools/coordinator/index.d.ts.map +1 -1
  397. package/dist/tools/coordinator/index.js +4 -220
  398. package/dist/tools/coordinator/index.js.map +1 -1
  399. package/dist/tools/memory/read.d.ts.map +1 -1
  400. package/dist/tools/memory/read.js +2 -4
  401. package/dist/tools/memory/read.js.map +1 -1
  402. package/dist/tools/paths.d.ts +13 -0
  403. package/dist/tools/paths.d.ts.map +1 -1
  404. package/dist/tools/paths.js +53 -0
  405. package/dist/tools/paths.js.map +1 -1
  406. package/dist/tools/roster.d.ts +27 -0
  407. package/dist/tools/roster.d.ts.map +1 -0
  408. package/dist/tools/roster.js +42 -0
  409. package/dist/tools/roster.js.map +1 -0
  410. package/dist/types/agent/base.d.ts +5 -0
  411. package/dist/types/agent/base.d.ts.map +1 -1
  412. package/dist/types/agent/pipeline.d.ts +3 -0
  413. package/dist/types/agent/pipeline.d.ts.map +1 -1
  414. package/dist/types/agent/router.d.ts +2 -3
  415. package/dist/types/agent/router.d.ts.map +1 -1
  416. package/dist/types/agent/scheduler.d.ts +3 -0
  417. package/dist/types/agent/scheduler.d.ts.map +1 -1
  418. package/dist/types/agent/task.d.ts +5 -16
  419. package/dist/types/agent/task.d.ts.map +1 -1
  420. package/dist/types/agent/task.js.map +1 -1
  421. package/dist/types/common/index.d.ts.map +1 -1
  422. package/dist/types/common/index.js +3 -0
  423. package/dist/types/common/index.js.map +1 -1
  424. package/dist/types/computer-use/index.d.ts +8 -0
  425. package/dist/types/computer-use/index.d.ts.map +1 -1
  426. package/dist/types/computer-use/index.js.map +1 -1
  427. package/dist/types/hitl/index.d.ts +5 -0
  428. package/dist/types/hitl/index.d.ts.map +1 -1
  429. package/dist/types/hitl/index.js.map +1 -1
  430. package/dist/types/ids/brand.d.ts +5 -47
  431. package/dist/types/ids/brand.d.ts.map +1 -1
  432. package/dist/types/ids/brand.js +2 -39
  433. package/dist/types/ids/brand.js.map +1 -1
  434. package/dist/types/ids/index.d.ts +59 -69
  435. package/dist/types/ids/index.d.ts.map +1 -1
  436. package/dist/types/ids/index.js +12 -10
  437. package/dist/types/ids/index.js.map +1 -1
  438. package/dist/types/permission/index.d.ts +9 -0
  439. package/dist/types/permission/index.d.ts.map +1 -1
  440. package/dist/types/permission/index.js +9 -1
  441. package/dist/types/permission/index.js.map +1 -1
  442. package/dist/types/plugin/index.d.ts +45 -4
  443. package/dist/types/plugin/index.d.ts.map +1 -1
  444. package/dist/types/plugin/index.js +7 -0
  445. package/dist/types/plugin/index.js.map +1 -1
  446. package/dist/types/run/config.d.ts +3 -0
  447. package/dist/types/run/config.d.ts.map +1 -1
  448. package/dist/types/run/emergency.d.ts +5 -0
  449. package/dist/types/run/emergency.d.ts.map +1 -1
  450. package/dist/types/run/emergency.js.map +1 -1
  451. package/dist/types/run/entity.d.ts +6 -2
  452. package/dist/types/run/entity.d.ts.map +1 -1
  453. package/dist/types/run/events.d.ts +35 -0
  454. package/dist/types/run/events.d.ts.map +1 -1
  455. package/dist/types/run/events.js.map +1 -1
  456. package/dist/types/run/index.d.ts +1 -0
  457. package/dist/types/run/index.d.ts.map +1 -1
  458. package/dist/types/run/index.js +1 -0
  459. package/dist/types/run/index.js.map +1 -1
  460. package/dist/types/run/state.d.ts +16 -15
  461. package/dist/types/run/state.d.ts.map +1 -1
  462. package/dist/types/run/state.js +41 -22
  463. package/dist/types/run/state.js.map +1 -1
  464. package/dist/types/run/stop-reason.d.ts +3 -14
  465. package/dist/types/run/stop-reason.d.ts.map +1 -1
  466. package/dist/types/run/token-budget-store.d.ts +29 -0
  467. package/dist/types/run/token-budget-store.d.ts.map +1 -0
  468. package/dist/types/run/token-budget-store.js +25 -0
  469. package/dist/types/run/token-budget-store.js.map +1 -0
  470. package/dist/types/sandbox/index.d.ts +47 -2
  471. package/dist/types/sandbox/index.d.ts.map +1 -1
  472. package/dist/types/sandbox/index.js.map +1 -1
  473. package/dist/types/session/store.d.ts +8 -0
  474. package/dist/types/session/store.d.ts.map +1 -1
  475. package/dist/types/tool/index.d.ts +15 -0
  476. package/dist/types/tool/index.d.ts.map +1 -1
  477. package/dist/types/tool/index.js.map +1 -1
  478. package/dist/utils/frontmatter.d.ts +1 -1
  479. package/dist/utils/frontmatter.js +1 -1
  480. package/dist/utils/id-format.d.ts +3 -0
  481. package/dist/utils/id-format.d.ts.map +1 -0
  482. package/dist/utils/id-format.js +9 -0
  483. package/dist/utils/id-format.js.map +1 -0
  484. package/dist/utils/id.d.ts +65 -32
  485. package/dist/utils/id.d.ts.map +1 -1
  486. package/dist/utils/id.js +168 -148
  487. package/dist/utils/id.js.map +1 -1
  488. package/dist/utils/log/exception.js +1 -1
  489. package/dist/utils/log/exception.js.map +1 -1
  490. package/dist/utils/log/index.d.ts.map +1 -1
  491. package/dist/utils/log/index.js +1 -2
  492. package/dist/utils/log/index.js.map +1 -1
  493. package/dist/utils/log/templates.d.ts.map +1 -1
  494. package/dist/utils/log/templates.js +0 -1
  495. package/dist/utils/log/templates.js.map +1 -1
  496. package/package.json +6 -1
  497. package/src/agents/AGENTS.md +1 -1
  498. package/src/agents/PipelineAgent.ts +129 -109
  499. package/src/agents/ReactiveAgent.ts +2 -0
  500. package/src/agents/RouterAgent.ts +120 -73
  501. package/src/agents/SupervisorAgent.ts +12 -4
  502. package/src/agents/budget.ts +42 -0
  503. package/src/agents/explore.ts +29 -0
  504. package/src/agents/file-definitions.ts +237 -0
  505. package/src/agents/index.ts +15 -0
  506. package/src/bridge/a2a/mapper.ts +6 -0
  507. package/src/bridge/sse/mapper.ts +22 -0
  508. package/src/bus/lock.ts +1 -10
  509. package/src/compaction/consolidation.ts +79 -0
  510. package/src/compaction/factory.ts +3 -0
  511. package/src/compaction/index.ts +34 -4
  512. package/src/compaction/manager.ts +39 -1
  513. package/src/compaction/plan.ts +52 -21
  514. package/src/compaction/salience/bm25.ts +72 -0
  515. package/src/compaction/salience/goal.ts +44 -0
  516. package/src/compaction/salience/index.ts +19 -0
  517. package/src/compaction/salience/minhash.ts +53 -0
  518. package/src/compaction/salience/score.ts +305 -0
  519. package/src/compaction/salience/tokenize.ts +89 -0
  520. package/src/compaction/salience/working-set.ts +187 -0
  521. package/src/compaction/serializer.ts +16 -0
  522. package/src/compaction/token-estimate.ts +57 -0
  523. package/src/compaction/tool-result-editing.ts +28 -26
  524. package/src/compaction/types.ts +24 -1
  525. package/src/compaction/wire.ts +5 -1
  526. package/src/config/runtime.ts +13 -1
  527. package/src/connector/builtins/http.ts +2 -8
  528. package/src/connector/builtins/webhook.ts +2 -2
  529. package/src/connector/mcp/adapter.ts +32 -0
  530. package/src/connector/tools/adapter.ts +2 -2
  531. package/src/connector/tools/definitions.ts +2 -2
  532. package/src/constants/compaction/index.ts +1 -0
  533. package/src/constants/telemetry/index.ts +0 -1
  534. package/src/contracts/api.ts +5 -1
  535. package/src/contracts/schemas.ts +6 -20
  536. package/src/invariants/index.ts +1 -1
  537. package/src/manager/agent/lifecycle.ts +380 -352
  538. package/src/manager/run/persistence.ts +35 -5
  539. package/src/plugin/index.ts +19 -0
  540. package/src/plugin/shell-hook.ts +403 -0
  541. package/src/prompt/coding-agent-doctrine.ts +118 -0
  542. package/src/prompt/index.ts +8 -0
  543. package/src/provider/errors.ts +1 -1
  544. package/src/provider/fallback.ts +4 -1
  545. package/src/provider/retry.ts +4 -1
  546. package/src/provider/token-budget.ts +158 -0
  547. package/src/public-runtime.ts +56 -28
  548. package/src/public-tools.ts +5 -0
  549. package/src/public-types.ts +65 -0
  550. package/src/registry/command/kernel-commands.ts +16 -6
  551. package/src/registry/tool/execute.ts +4 -1
  552. package/src/run/LimitChecker.ts +1 -1
  553. package/src/run/drain.ts +1 -1
  554. package/src/run/reporter.ts +15 -0
  555. package/src/run/token-budget.ts +692 -0
  556. package/src/runtime/jobs/registry.ts +123 -17
  557. package/src/runtime/query/checkpoint.ts +10 -3
  558. package/src/runtime/query/context.ts +3 -57
  559. package/src/runtime/query/executor.ts +181 -71
  560. package/src/runtime/query/guard.ts +8 -0
  561. package/src/runtime/query/index.ts +209 -62
  562. package/src/runtime/query/iteration/index.ts +53 -15
  563. package/src/runtime/query/iteration/phases/compaction.ts +130 -31
  564. package/src/runtime/query/iteration/phases/context.ts +4 -0
  565. package/src/runtime/query/iteration/phases/tool-review.ts +39 -7
  566. package/src/runtime/query/iteration/phases/working-memory.ts +23 -14
  567. package/src/runtime/query/iteration/stream-turn.ts +9 -5
  568. package/src/runtime/query/plugin-hooks.ts +24 -2
  569. package/src/runtime/query/prompt.ts +21 -4
  570. package/src/runtime/query/repeat-call.ts +42 -7
  571. package/src/runtime/query/result.ts +9 -0
  572. package/src/runtime/query/review-policy.ts +231 -0
  573. package/src/runtime/query/run-state.ts +4 -0
  574. package/src/runtime/query/steering.ts +32 -0
  575. package/src/runtime/query/token-budget.ts +127 -0
  576. package/src/runtime/query/tool-output-budget.ts +33 -10
  577. package/src/runtime/query/tool-pause.ts +4 -2
  578. package/src/runtime/query/tooling.ts +8 -0
  579. package/src/sandbox/file-walk-program.ts +93 -0
  580. package/src/sandbox/file-walk.ts +463 -0
  581. package/src/sandbox/index.ts +2 -0
  582. package/src/sandbox/provider/local.ts +136 -13
  583. package/src/scheduler/completion-inbox.ts +29 -19
  584. package/src/scheduler/delegating.ts +35 -13
  585. package/src/scheduler/local.ts +5 -7
  586. package/src/session/index.ts +0 -1
  587. package/src/session/workspace/path-builder.ts +5 -4
  588. package/src/store/feedback/disk.ts +4 -6
  589. package/src/store/index.ts +2 -0
  590. package/src/store/memory/disk.ts +3 -11
  591. package/src/store/run/checkpoint-disk.ts +14 -27
  592. package/src/store/run/claim-disk.ts +1 -1
  593. package/src/store/run/conformance.ts +55 -39
  594. package/src/store/run/disk.ts +19 -4
  595. package/src/store/run/token-budget-disk.ts +247 -0
  596. package/src/store/session/disk.ts +36 -29
  597. package/src/store/session/memory.ts +38 -1
  598. package/src/store/task/disk.ts +7 -8
  599. package/src/store/topic/memory.ts +13 -1
  600. package/src/test-support/ids.ts +62 -59
  601. package/src/tools/advisory/index.ts +3 -1
  602. package/src/tools/builtins/bash.ts +241 -70
  603. package/src/tools/builtins/computer-use.ts +6 -2
  604. package/src/tools/builtins/edit.ts +2 -2
  605. package/src/tools/builtins/glob.ts +104 -122
  606. package/src/tools/builtins/grep.ts +166 -132
  607. package/src/tools/builtins/ls.ts +4 -4
  608. package/src/tools/builtins/lsp.ts +2 -2
  609. package/src/tools/builtins/read-file.ts +2 -2
  610. package/src/tools/builtins/write-file.ts +2 -2
  611. package/src/tools/coordinator/ask-user-question.ts +284 -0
  612. package/src/tools/coordinator/index.ts +5 -248
  613. package/src/tools/memory/read.ts +2 -4
  614. package/src/tools/paths.ts +64 -0
  615. package/src/tools/roster.ts +46 -0
  616. package/src/types/agent/base.ts +6 -0
  617. package/src/types/agent/pipeline.ts +3 -0
  618. package/src/types/agent/router.ts +2 -3
  619. package/src/types/agent/scheduler.ts +4 -0
  620. package/src/types/agent/task.ts +5 -18
  621. package/src/types/common/index.ts +3 -0
  622. package/src/types/computer-use/index.ts +8 -0
  623. package/src/types/hitl/index.ts +5 -0
  624. package/src/types/ids/brand.ts +5 -48
  625. package/src/types/ids/index.ts +66 -75
  626. package/src/types/permission/index.ts +11 -0
  627. package/src/types/plugin/index.ts +49 -1
  628. package/src/types/run/config.ts +3 -0
  629. package/src/types/run/emergency.ts +5 -0
  630. package/src/types/run/entity.ts +6 -2
  631. package/src/types/run/events.ts +37 -0
  632. package/src/types/run/index.ts +1 -0
  633. package/src/types/run/state.ts +58 -30
  634. package/src/types/run/stop-reason.ts +3 -14
  635. package/src/types/run/token-budget-store.ts +54 -0
  636. package/src/types/sandbox/index.ts +53 -0
  637. package/src/types/session/store.ts +8 -0
  638. package/src/types/tool/index.ts +15 -0
  639. package/src/utils/frontmatter.ts +1 -1
  640. package/src/utils/id-format.ts +9 -0
  641. package/src/utils/id.ts +222 -181
  642. package/src/utils/log/exception.ts +1 -1
  643. package/src/utils/log/index.ts +1 -2
  644. package/src/utils/log/templates.ts +0 -1
  645. package/dist/session/migration/errors.d.ts +0 -26
  646. package/dist/session/migration/errors.d.ts.map +0 -1
  647. package/dist/session/migration/errors.js +0 -22
  648. package/dist/session/migration/errors.js.map +0 -1
  649. package/dist/session/migration/filesystem.d.ts +0 -122
  650. package/dist/session/migration/filesystem.d.ts.map +0 -1
  651. package/dist/session/migration/filesystem.js +0 -379
  652. package/dist/session/migration/filesystem.js.map +0 -1
  653. package/dist/session/migration/id-prefix.d.ts +0 -113
  654. package/dist/session/migration/id-prefix.d.ts.map +0 -1
  655. package/dist/session/migration/id-prefix.js +0 -132
  656. package/dist/session/migration/id-prefix.js.map +0 -1
  657. package/dist/session/migration/index.d.ts +0 -12
  658. package/dist/session/migration/index.d.ts.map +0 -1
  659. package/dist/session/migration/index.js +0 -12
  660. package/dist/session/migration/index.js.map +0 -1
  661. package/dist/session/migration/marker.d.ts +0 -57
  662. package/dist/session/migration/marker.d.ts.map +0 -1
  663. package/dist/session/migration/marker.js +0 -123
  664. package/dist/session/migration/marker.js.map +0 -1
  665. package/src/session/migration/errors.ts +0 -23
  666. package/src/session/migration/filesystem.ts +0 -468
  667. package/src/session/migration/id-prefix.ts +0 -166
  668. package/src/session/migration/index.ts +0 -41
  669. package/src/session/migration/marker.ts +0 -142
@@ -1,70 +1,62 @@
1
- /**
2
- * Unchecked id constructors, for fixtures only.
3
- *
4
- * A test that needs three hundred distinct ids is not testing prefix
5
- * validation, and paying a `startsWith` per literal to say `ses_1` buys it
6
- * nothing. These are the cheap landing zone for that: same call shape as the
7
- * `as*Id` constructors in `utils/id.ts`, no check.
8
- *
9
- * **Deliberately NOT exported from the package barrel.** The whole value of
10
- * the checked constructors is that a malformed id cannot reach a store key,
11
- * and an unchecked one on the public surface is a supported way around that.
12
- * `test-support/` is reachable from inside this repo and nowhere else, which
13
- * is exactly the reach this needs.
14
- *
15
- * Two shapes rather than forty functions, because a fixture wants brevity:
16
- * `fixtureId.run('a')` reads at the call site, and `unchecked<RunId>(s)`
17
- * covers anything the table misses.
18
- */
1
+ /** Deterministic UUID fixtures. Deliberately absent from the package barrel. */
2
+ import { createHash } from 'node:crypto';
19
3
  import { unsafeId } from '../types/ids/brand.js';
20
4
  /** Casts without checking. The name is the warning. */
21
5
  export function unchecked(value) {
22
6
  return unsafeId(value);
23
7
  }
8
+ /** Maps a readable fixture label to a stable, valid UUID without global state. */
9
+ export function fixtureUuid(label) {
10
+ const bytes = createHash('sha256').update(label).digest().subarray(0, 16);
11
+ bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;
12
+ bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;
13
+ const hex = bytes.toString('hex');
14
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
15
+ }
24
16
  /**
25
- * One entry per prefixed id type, keyed by the bare concept rather than the
17
+ * One entry per entity type, keyed by the bare concept rather than the
26
18
  * type name — `fixtureId.run('a')`, not `fixtureId.RunId('a')`.
27
19
  */
28
20
  export const fixtureId = {
29
- run: (suffix) => unsafeId(`run_${suffix}`),
30
- message: (suffix) => unsafeId(`msg_${suffix}`),
31
- session: (suffix) => unsafeId(`ses_${suffix}`),
32
- toolCall: (suffix) => unsafeId(`call_${suffix}`),
33
- activity: (suffix) => unsafeId(`act_${suffix}`),
34
- task: (suffix) => unsafeId(`task_${suffix}`),
35
- plan: (suffix) => unsafeId(`plan_${suffix}`),
36
- knowledgeBase: (suffix) => unsafeId(`kb_${suffix}`),
37
- document: (suffix) => unsafeId(`doc_${suffix}`),
38
- chunk: (suffix) => unsafeId(`chk_${suffix}`),
39
- connector: (suffix) => unsafeId(`conn_${suffix}`),
40
- connectorInstance: (suffix) => unsafeId(`ci_${suffix}`),
41
- tenant: (suffix) => unsafeId(`tnt_${suffix}`),
42
- credential: (suffix) => unsafeId(`cred_${suffix}`),
43
- executionContext: (suffix) => unsafeId(`ectx_${suffix}`),
44
- mCPServer: (suffix) => unsafeId(`mcp_${suffix}`),
45
- mCPClient: (suffix) => unsafeId(`mcpc_${suffix}`),
46
- mCPSession: (suffix) => unsafeId(`mcps_${suffix}`),
47
- environment: (suffix) => unsafeId(`env_${suffix}`),
48
- checkpoint: (suffix) => unsafeId(`cp_${suffix}`),
49
- lock: (suffix) => unsafeId(`lock_${suffix}`),
50
- advisory: (suffix) => unsafeId(`adv_${suffix}`),
51
- advisoryCall: (suffix) => unsafeId(`advc_${suffix}`),
52
- emergencySave: (suffix) => unsafeId(`esave_${suffix}`),
53
- memory: (suffix) => unsafeId(`mem_${suffix}`),
54
- plugin: (suffix) => unsafeId(`plg_${suffix}`),
55
- sandbox: (suffix) => unsafeId(`sbx_${suffix}`),
56
- auditEvent: (suffix) => unsafeId(`aud_${suffix}`),
57
- user: (suffix) => unsafeId(`usr_${suffix}`),
58
- agent: (suffix) => unsafeId(`agt_${suffix}`),
59
- memoryStoreRef: (suffix) => unsafeId(`mms_${suffix}`),
60
- vaultRef: (suffix) => unsafeId(`vlt_${suffix}`),
61
- knowledgeBaseRef: (suffix) => unsafeId(`kbs_${suffix}`),
62
- project: (suffix) => unsafeId(`prj_${suffix}`),
63
- topic: (suffix) => unsafeId(`top_${suffix}`),
64
- subSession: (suffix) => unsafeId(`sub_${suffix}`),
65
- handoff: (suffix) => unsafeId(`hof_${suffix}`),
66
- workspace: (suffix) => unsafeId(`wsp_${suffix}`),
67
- summary: (suffix) => unsafeId(`sum_${suffix}`),
68
- deliverable: (suffix) => unsafeId(`del_${suffix}`),
21
+ run: (suffix) => unsafeId(fixtureUuid(`run_${suffix}`)),
22
+ message: (suffix) => unsafeId(fixtureUuid(`msg_${suffix}`)),
23
+ session: (suffix) => unsafeId(fixtureUuid(`ses_${suffix}`)),
24
+ toolCall: (suffix) => unsafeId(fixtureUuid(`call_${suffix}`)),
25
+ activity: (suffix) => unsafeId(fixtureUuid(`act_${suffix}`)),
26
+ task: (suffix) => unsafeId(fixtureUuid(`task_${suffix}`)),
27
+ plan: (suffix) => unsafeId(fixtureUuid(`plan_${suffix}`)),
28
+ knowledgeBase: (suffix) => unsafeId(fixtureUuid(`kb_${suffix}`)),
29
+ document: (suffix) => unsafeId(fixtureUuid(`doc_${suffix}`)),
30
+ chunk: (suffix) => unsafeId(fixtureUuid(`chk_${suffix}`)),
31
+ connector: (suffix) => unsafeId(fixtureUuid(`conn_${suffix}`)),
32
+ connectorInstance: (suffix) => unsafeId(fixtureUuid(`ci_${suffix}`)),
33
+ tenant: (suffix) => unsafeId(fixtureUuid(`tnt_${suffix}`)),
34
+ credential: (suffix) => unsafeId(fixtureUuid(`cred_${suffix}`)),
35
+ executionContext: (suffix) => unsafeId(fixtureUuid(`ectx_${suffix}`)),
36
+ mCPServer: (suffix) => unsafeId(fixtureUuid(`mcp_${suffix}`)),
37
+ mCPClient: (suffix) => unsafeId(fixtureUuid(`mcpc_${suffix}`)),
38
+ mCPSession: (suffix) => unsafeId(fixtureUuid(`mcps_${suffix}`)),
39
+ environment: (suffix) => unsafeId(fixtureUuid(`env_${suffix}`)),
40
+ checkpoint: (suffix) => unsafeId(fixtureUuid(`cp_${suffix}`)),
41
+ lock: (suffix) => unsafeId(fixtureUuid(`lock_${suffix}`)),
42
+ advisory: (suffix) => unsafeId(fixtureUuid(`adv_${suffix}`)),
43
+ advisoryCall: (suffix) => unsafeId(fixtureUuid(`advc_${suffix}`)),
44
+ emergencySave: (suffix) => unsafeId(fixtureUuid(`esave_${suffix}`)),
45
+ memory: (suffix) => unsafeId(fixtureUuid(`mem_${suffix}`)),
46
+ plugin: (suffix) => unsafeId(fixtureUuid(`plg_${suffix}`)),
47
+ sandbox: (suffix) => unsafeId(fixtureUuid(`sbx_${suffix}`)),
48
+ auditEvent: (suffix) => unsafeId(fixtureUuid(`aud_${suffix}`)),
49
+ user: (suffix) => unsafeId(fixtureUuid(`usr_${suffix}`)),
50
+ agent: (suffix) => unsafeId(fixtureUuid(`agt_${suffix}`)),
51
+ memoryStoreRef: (suffix) => unsafeId(fixtureUuid(`mms_${suffix}`)),
52
+ vaultRef: (suffix) => unsafeId(fixtureUuid(`vlt_${suffix}`)),
53
+ knowledgeBaseRef: (suffix) => unsafeId(fixtureUuid(`kbs_${suffix}`)),
54
+ project: (suffix) => unsafeId(fixtureUuid(`prj_${suffix}`)),
55
+ topic: (suffix) => unsafeId(fixtureUuid(`top_${suffix}`)),
56
+ subSession: (suffix) => unsafeId(fixtureUuid(`sub_${suffix}`)),
57
+ handoff: (suffix) => unsafeId(fixtureUuid(`hof_${suffix}`)),
58
+ workspace: (suffix) => unsafeId(fixtureUuid(`wsp_${suffix}`)),
59
+ summary: (suffix) => unsafeId(fixtureUuid(`sum_${suffix}`)),
60
+ deliverable: (suffix) => unsafeId(fixtureUuid(`del_${suffix}`)),
69
61
  };
70
62
  //# sourceMappingURL=ids.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/test-support/ids.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/test-support/ids.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/advisory/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG/D,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAA;CACrC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,EAAE,CAmJ/E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/advisory/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG/D,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAA;CACrC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,EAAE,CAqJ/E"}
@@ -61,7 +61,9 @@ export function buildAdvisoryTools(opts) {
61
61
  permissions: [],
62
62
  readOnly: true,
63
63
  destructive: false,
64
- concurrencySafe: true,
64
+ // Consultations debit one run account and one per-run advisory quota.
65
+ // Serial execution makes the next admission see the preceding receipt.
66
+ concurrencySafe: false,
65
67
  async execute({ advisor_id, question, domain, urgency, include_context }) {
66
68
  const budgetCheck = advisoryCtx.checkBudget();
67
69
  if (!budgetCheck.allowed) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/advisory/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/advisory/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ /** The refusal when a sandbox cannot host a detached process; exported so the test states the same words. */
2
+ export declare const SANDBOX_CANNOT_DETACH = "run_in_background is unavailable: this sandbox cannot start a detached process, and the job will not be run on the host to get around it. Run the command in the foreground, or raise `timeout` up to the tool maximum.";
1
3
  export declare const BashTool: import("../../public-types.js").ToolDefinition<{
2
4
  timeout: number;
3
5
  command: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/tools/builtins/bash.ts"],"names":[],"mappings":"AA8FA,eAAO,MAAM,QAAQ;;;;EAoPnB,CAAA"}
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/tools/builtins/bash.ts"],"names":[],"mappings":"AAoRA,6GAA6G;AAC7G,eAAO,MAAM,qBAAqB,4NACwL,CAAA;AAE1N,eAAO,MAAM,QAAQ;;;;EAqOnB,CAAA"}
@@ -1,10 +1,12 @@
1
- import { exec } from 'node:child_process';
2
- import { promisify } from 'node:util';
1
+ import { spawn } from 'node:child_process';
2
+ import { StringDecoder } from 'node:string_decoder';
3
3
  import { z } from 'zod';
4
+ import { SANDBOX_KILL_GRACE_MS } from '../../constants/sandbox/index.js';
4
5
  import { DANGEROUS_PATTERNS } from '../../constants/tools/index.js';
6
+ import { killTree } from '../../process/kill-tree.js';
7
+ import { subscribeToAbort } from '../../utils/abort.js';
5
8
  import { defineTool } from '../defineTool.js';
6
9
  import { scrubInheritedEnv } from '../env-scrub.js';
7
- const execAsync = promisify(exec);
8
10
  // Namzu owns its own bash timeout knob — `NAMZU_BASH_TIMEOUT_MS`.
9
11
  // The Vandal fallback (`VANDAL_NAMZU_TIMEOUT_MS`) lived here as a
10
12
  // historical bridge while Namzu was carved out of the Vandal repo,
@@ -49,30 +51,198 @@ const inputSchema = z.object({
49
51
  .optional()
50
52
  .describe('Start the command as a background job and return its id immediately, instead of waiting. The turn is not held open; read its output with the `job` tool. Use for watchers, dev servers and long builds. Do NOT write `cmd &` yourself — under the sandbox the shell that backgrounds it exits immediately and takes the job with it.'),
51
53
  });
54
+ const MAX_SHELL_PROGRESS_CHARS = 160;
55
+ /** Keep a bounded tail even when a process never writes a newline. */
56
+ function appendProgressTail(previous, chunk, start, end) {
57
+ return (previous + chunk.slice(Math.max(start, end - MAX_SHELL_PROGRESS_CHARS), end)).slice(-MAX_SHELL_PROGRESS_CHARS);
58
+ }
59
+ /** Clipping a UTF-16 string must not display half of a surrogate pair. */
60
+ function progressLine(value) {
61
+ let line = value.trim();
62
+ const first = line.charCodeAt(0);
63
+ if (first >= 0xdc00 && first <= 0xdfff)
64
+ line = line.slice(1);
65
+ const last = line.charCodeAt(line.length - 1);
66
+ if (last >= 0xd800 && last <= 0xdbff)
67
+ line = line.slice(0, -1);
68
+ return line;
69
+ }
52
70
  /**
53
- * The last line worth showing from one chunk of streamed output.
54
- *
55
- * A progress line is a status, not a log: the host renders one line and
56
- * replaces it as the next arrives, so sending a whole chunk sends a wall
57
- * of text into a slot that shows one line of it. A chunk usually ends
58
- * mid-line and usually ends with a newline, so the last NON-EMPTY line is
59
- * the most recent complete thing the command actually said.
60
- *
61
- * Progress is capped rather than truncated with an ellipsis: this is
62
- * glanced at, and a marker in a line nobody reads to the end is noise.
71
+ * One latest line per stream, independent of transport chunk boundaries.
72
+ * Reports stay synchronous: the executor owns coalescing and backpressure.
73
+ * This projection adds neither an output log nor a queue of pending reports.
63
74
  */
64
- function lastNonEmptyLine(chunk) {
65
- const lines = chunk.split('\n');
66
- for (let i = lines.length - 1; i >= 0; i--) {
67
- const line = lines[i]?.trim();
68
- if (line)
69
- return line.length > 160 ? line.slice(0, 160) : line;
70
- }
71
- return undefined;
75
+ function shellProgress(report) {
76
+ if (!report)
77
+ return undefined;
78
+ const partial = { stdout: '', stderr: '' };
79
+ let lastMessage = '';
80
+ return ({ stream, data }) => {
81
+ let line = partial[stream];
82
+ let latest = '';
83
+ let start = 0;
84
+ // Scan delimiters without allocating an array for arbitrarily chatty output.
85
+ for (const match of data.matchAll(/[\r\n]/g)) {
86
+ line = appendProgressTail(line, data, start, match.index);
87
+ latest = progressLine(line) || latest;
88
+ line = '';
89
+ start = match.index + 1;
90
+ }
91
+ line = appendProgressTail(line, data, start, data.length);
92
+ partial[stream] = line;
93
+ const message = progressLine(line) || latest;
94
+ if (!message || message === lastMessage)
95
+ return;
96
+ lastMessage = message;
97
+ try {
98
+ report(message);
99
+ }
100
+ catch {
101
+ // A diagnostic observer cannot break the process output reader.
102
+ }
103
+ };
104
+ }
105
+ /**
106
+ * Keep the shell's process group until inherited pipes close. Node's exec
107
+ * timeout/AbortSignal kills only the wrapper and closes its pipes immediately,
108
+ * leaving the command and its descendants running after the promise settles.
109
+ */
110
+ function execHostShell(command, options) {
111
+ options.signal?.throwIfAborted();
112
+ return new Promise((resolve, reject) => {
113
+ const child = spawn(command, {
114
+ cwd: options.cwd,
115
+ env: options.env,
116
+ shell: true,
117
+ // killTree's negative PID must never target the caller's own group.
118
+ detached: process.platform !== 'win32',
119
+ });
120
+ const captures = {
121
+ stdout: {
122
+ chunks: [],
123
+ bytes: 0,
124
+ truncated: false,
125
+ decoder: new StringDecoder('utf8'),
126
+ },
127
+ stderr: {
128
+ chunks: [],
129
+ bytes: 0,
130
+ truncated: false,
131
+ decoder: new StringDecoder('utf8'),
132
+ },
133
+ };
134
+ let cause;
135
+ let failure;
136
+ let escalation;
137
+ let disposeAbort;
138
+ let closed = false;
139
+ const cancel = (origin) => {
140
+ if (closed || cause !== undefined)
141
+ return;
142
+ cause = origin;
143
+ escalation = setTimeout(() => {
144
+ escalation = undefined;
145
+ killTree(child, 'SIGKILL');
146
+ // A descendant can deliberately start a separate session. It is
147
+ // outside this group, but its inherited pipes must not hold the
148
+ // cancelled call forever. Keep what was captured during grace.
149
+ child.stdin?.destroy();
150
+ child.stdout?.destroy();
151
+ child.stderr?.destroy();
152
+ }, SANDBOX_KILL_GRACE_MS);
153
+ escalation.unref?.();
154
+ killTree(child, 'SIGTERM');
155
+ };
156
+ const capture = (stream, chunk) => {
157
+ const state = captures[stream];
158
+ const kept = Math.min(chunk.length, options.maxBuffer - state.bytes);
159
+ if (kept > 0) {
160
+ state.chunks.push(Buffer.from(chunk.subarray(0, kept)));
161
+ state.bytes += kept;
162
+ }
163
+ if (kept < chunk.length) {
164
+ state.truncated = true;
165
+ if (cause === undefined) {
166
+ failure = Object.assign(new RangeError(`${stream} maxBuffer length exceeded`), {
167
+ code: 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER',
168
+ });
169
+ cancel('maxBuffer');
170
+ }
171
+ }
172
+ if (options.onOutput) {
173
+ const data = state.decoder.write(chunk);
174
+ if (data)
175
+ options.onOutput({ stream, data });
176
+ }
177
+ };
178
+ const onStdout = (chunk) => capture('stdout', chunk);
179
+ const onStderr = (chunk) => capture('stderr', chunk);
180
+ child.stdout?.on('data', onStdout);
181
+ child.stderr?.on('data', onStderr);
182
+ child.once('error', (error) => {
183
+ failure ??= error;
184
+ });
185
+ child.once('close', (code, signal) => {
186
+ closed = true;
187
+ disposeAbort?.();
188
+ clearTimeout(deadline);
189
+ if (escalation !== undefined) {
190
+ clearTimeout(escalation);
191
+ // Pipes closing can precede a descendant which closed its copies.
192
+ // Force the owned group now instead of retaining its PID in a timer.
193
+ killTree(child, 'SIGKILL');
194
+ }
195
+ child.stdout?.off('data', onStdout);
196
+ child.stderr?.off('data', onStderr);
197
+ for (const stream of ['stdout', 'stderr']) {
198
+ const data = captures[stream].decoder.end();
199
+ if (data)
200
+ options.onOutput?.({ stream, data });
201
+ }
202
+ const decodeCapture = (stream) => {
203
+ const state = captures[stream];
204
+ const bytes = Buffer.concat(state.chunks, state.bytes);
205
+ // Do not flush an incomplete UTF-8 character cut by our byte cap.
206
+ return state.truncated ? new StringDecoder('utf8').write(bytes) : bytes.toString('utf8');
207
+ };
208
+ const stdout = decodeCapture('stdout');
209
+ const stderr = decodeCapture('stderr');
210
+ if (!failure && cause === undefined && code === 0 && signal === null) {
211
+ resolve({ stdout, stderr });
212
+ return;
213
+ }
214
+ const error = failure ??
215
+ (cause === 'caller'
216
+ ? Object.assign(new Error('The operation was aborted', { cause: options.signal?.reason }), {
217
+ name: 'AbortError',
218
+ code: 'ABORT_ERR',
219
+ })
220
+ : new Error(`Command failed: ${command}\n${stderr}`));
221
+ reject(Object.assign(error, {
222
+ stdout,
223
+ stderr,
224
+ stdoutTruncated: captures.stdout.truncated,
225
+ stderrTruncated: captures.stderr.truncated,
226
+ code: failure?.code ?? (cause === 'caller' ? 'ABORT_ERR' : code),
227
+ killed: cause !== undefined,
228
+ signal,
229
+ timedOut: cause === 'timeout',
230
+ }));
231
+ });
232
+ const deadline = setTimeout(() => cancel('timeout'), options.timeout);
233
+ deadline.unref?.();
234
+ if (options.signal) {
235
+ disposeAbort = subscribeToAbort(options.signal, () => cancel('caller'));
236
+ if (options.signal.aborted)
237
+ cancel('caller');
238
+ }
239
+ });
72
240
  }
73
241
  function isDangerousCommand(command) {
74
242
  return DANGEROUS_PATTERNS.some((pattern) => pattern.test(command));
75
243
  }
244
+ /** The refusal when a sandbox cannot host a detached process; exported so the test states the same words. */
245
+ export const SANDBOX_CANNOT_DETACH = 'run_in_background is unavailable: this sandbox cannot start a detached process, and the job will not be run on the host to get around it. Run the command in the foreground, or raise `timeout` up to the tool maximum.';
76
246
  export const BashTool = defineTool({
77
247
  name: 'bash',
78
248
  description: 'Executes a bash command and returns stdout/stderr output. Command timeout is configurable. The `command` parameter is required — never call this tool with empty arguments. For very long content (e.g. building a large file), prefer `write` for the opening and `edit` with insertLine: "end" for follow-up chunks over a heredoc to avoid hitting the output token limit mid-stream.',
@@ -101,20 +271,16 @@ export const BashTool = defineTool({
101
271
  };
102
272
  }
103
273
  if (input.run_in_background) {
104
- // The current registry owns a host process. Foreground execution,
105
- // however, goes through `context.sandbox.exec()` below. Treating the
106
- // same command as host work just because `run_in_background` changed
107
- // would make that boolean an escape hatch from the configured boundary.
108
- //
109
- // Query-built contexts structurally withhold the registry in this
110
- // composition. This explicit check also protects direct tool callers
111
- // and says why the capability is absent instead of misdiagnosing the
112
- // host as having configured no registry.
113
- if (context.sandbox) {
274
+ // A sandboxed run gets a registry only when its sandbox can start a
275
+ // detached process inside the boundary (`Sandbox.spawnDetached`);
276
+ // the executor withholds it otherwise. This check is for direct
277
+ // tool callers, who could hand a host registry and a sandbox to the
278
+ // same context: the boolean is never an escape from the boundary.
279
+ if (context.sandbox && context.sandbox.spawnDetached === undefined) {
114
280
  return {
115
281
  success: false,
116
282
  output: '',
117
- error: 'run_in_background is unavailable while a sandbox is active because the host background-job registry cannot preserve that sandbox boundary. Run the command in the foreground, or use a sandbox-aware persistent-process capability.',
283
+ error: SANDBOX_CANNOT_DETACH,
118
284
  };
119
285
  }
120
286
  // Refused, not degraded to `cmd &`. The fallback is not a lesser
@@ -169,6 +335,7 @@ export const BashTool = defineTool({
169
335
  // sandbox can be added later as an explicit
170
336
  // `SandboxExecOptions.workspaceRelativeCwd` field; the bash
171
337
  // builtin doesn't have that requirement today.
338
+ const onOutput = shellProgress(context.report);
172
339
  if (context.sandbox) {
173
340
  const result = await context.sandbox.exec('/bin/sh', ['-c', input.command], {
174
341
  timeout: input.timeout,
@@ -183,21 +350,8 @@ export const BashTool = defineTool({
183
350
  // durable transcript — so this is a progress signal, not a
184
351
  // second copy of the output. `result.stdout` remains the
185
352
  // answer the model is given.
186
- onOutput: context.report
187
- ? ({ data }) => {
188
- const line = lastNonEmptyLine(data);
189
- if (line)
190
- context.report?.(line);
191
- }
192
- : undefined,
353
+ onOutput,
193
354
  });
194
- if (result.timedOut) {
195
- return {
196
- success: false,
197
- output: '',
198
- error: `Command timed out after ${input.timeout}ms`,
199
- };
200
- }
201
355
  // The sandbox reports when IT clipped a stream. Dropping those
202
356
  // flags meant the model saw a complete-looking result that had
203
357
  // silently lost its tail — and the kernel's own convention is
@@ -210,39 +364,30 @@ export const BashTool = defineTool({
210
364
  result.stdout ? `STDOUT:\n${result.stdout}` : '',
211
365
  result.stderr ? `STDERR:\n${result.stderr}` : '',
212
366
  clipped.length > 0
213
- ? `[${clipped.join(' and ')} was truncated by the sandbox output cap re-run with a filter (grep/head/tail) to see the rest]`
367
+ ? `[${clipped.join(' and ')} was truncated by the sandbox output cap. The omitted output is unavailable in this result. Use a saved artifact or a read-only observation; do not repeat a state-changing action to recover its output.]`
214
368
  : '',
215
369
  ]
216
370
  .filter(Boolean)
217
371
  .join('\n\n');
218
372
  return {
219
- success: result.exitCode === 0,
373
+ success: !result.timedOut && result.exitCode === 0,
220
374
  output: output || '(no output)',
221
375
  data: {
222
376
  exitCode: result.exitCode,
223
377
  sandboxed: true,
378
+ timedOut: result.timedOut,
224
379
  stdoutTruncated: result.stdoutTruncated ?? false,
225
380
  stderrTruncated: result.stderrTruncated ?? false,
226
381
  },
227
- error: result.exitCode !== 0 ? `Command exited with code ${result.exitCode}` : undefined,
382
+ error: result.timedOut
383
+ ? `Command timed out after ${input.timeout}ms. Any captured output before the deadline is above.`
384
+ : result.exitCode !== 0
385
+ ? `Command exited with code ${result.exitCode}`
386
+ : undefined,
228
387
  };
229
388
  }
230
- // Thread the run/deadline signal into the child process. Without it
231
- // a Stop tore down the model stream and left the command running,
232
- // and the executor's deadline could only ever DETACH from the tool
233
- // rather than end the work it started.
234
- // `exec` REJECTS on a non-zero exit, on its own timeout, and on a
235
- // kill — and the rejection carries `stdout`, `stderr`, `code` and
236
- // `killed`. Letting it propagate threw all of that away: the registry
237
- // turned the throw into a structured failure, so the model was told a
238
- // command failed and not one word about how.
239
- //
240
- // That is the common case, not an edge one. A failing test run and a
241
- // failing build are the two things an agent runs bash for most, and
242
- // both exit non-zero WITH the output that explains why. The sandbox
243
- // branch above already reports all of it; this branch did not, so the
244
- // same command told the model two different amounts depending on where
245
- // it happened to run.
389
+ // The owned runner retains stdout/stderr on non-zero exit and timeout,
390
+ // so a failed command still returns the evidence explaining its failure.
246
391
  // The inherited half is scrubbed; `context.env` is not. Inheritance is
247
392
  // implicit — nobody decided this command should see `process.env` — while
248
393
  // a `context.env` key is one a host wrote on purpose. See
@@ -250,12 +395,13 @@ export const BashTool = defineTool({
250
395
  // the sandbox, and for what it therefore does not catch.
251
396
  const inherited = scrubInheritedEnv();
252
397
  try {
253
- const { stdout, stderr } = await execAsync(input.command, {
398
+ const { stdout, stderr } = await execHostShell(input.command, {
254
399
  cwd: context.workingDirectory,
255
400
  timeout: input.timeout,
256
401
  env: { ...inherited.env, ...context.env },
257
402
  maxBuffer: DEFAULT_BASH_MAX_BUFFER_BYTES,
258
403
  signal: context.abortSignal,
404
+ onOutput,
259
405
  });
260
406
  return {
261
407
  success: true,
@@ -268,17 +414,23 @@ export const BashTool = defineTool({
268
414
  // A caller-owned Stop is the caller's, not a command failure.
269
415
  if (context.abortSignal?.aborted)
270
416
  throw err;
271
- // `exec` reports its own timeout as a kill, and the distinction
272
- // matters to the model: "ran out of time" is a different next move
273
- // from "exited 1".
274
- const timedOut = failure.killed === true && failure.signal === 'SIGTERM';
417
+ // A maxBuffer stop or an ordinary signal is not a deadline. The
418
+ // runner latches the first cancellation cause before signalling.
419
+ const timedOut = failure.timedOut === true;
275
420
  const exitCode = typeof failure.code === 'number' ? failure.code : undefined;
421
+ const clipped = [
422
+ failure.stdoutTruncated ? 'stdout' : '',
423
+ failure.stderrTruncated ? 'stderr' : '',
424
+ ].filter(Boolean);
276
425
  // Only on the failure path. A successful command did not need to know,
277
426
  // and appending this to every result would make the common case noisy
278
427
  // to buy nothing. A failing one is exactly where "authentication
279
428
  // failed" has to be distinguishable from "the variable was withheld".
280
429
  const output = [
281
430
  formatShellOutput(failure.stdout, failure.stderr),
431
+ clipped.length > 0
432
+ ? `[${clipped.join(' and ')} ${clipped.length === 1 ? 'was' : 'were'} truncated by the host output cap. The omitted output is unavailable in this result.]`
433
+ : '',
282
434
  describeWithheldEnv(inherited.dropped),
283
435
  ]
284
436
  .filter(Boolean)
@@ -289,6 +441,8 @@ export const BashTool = defineTool({
289
441
  data: {
290
442
  ...(exitCode !== undefined ? { exitCode } : {}),
291
443
  timedOut,
444
+ stdoutTruncated: failure.stdoutTruncated ?? false,
445
+ stderrTruncated: failure.stderrTruncated ?? false,
292
446
  ...(failure.signal ? { signal: failure.signal } : {}),
293
447
  },
294
448
  error: timedOut