@namzu/sdk 0.4.1 → 0.4.3

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 (685) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/dist/__tests__/replay-public-surface.test.d.ts +2 -0
  3. package/dist/__tests__/replay-public-surface.test.d.ts.map +1 -0
  4. package/dist/__tests__/replay-public-surface.test.js +45 -0
  5. package/dist/__tests__/replay-public-surface.test.js.map +1 -0
  6. package/dist/advisory/context.test.d.ts +16 -0
  7. package/dist/advisory/context.test.d.ts.map +1 -0
  8. package/dist/advisory/context.test.js +92 -0
  9. package/dist/advisory/context.test.js.map +1 -0
  10. package/dist/advisory/evaluator.test.d.ts +34 -0
  11. package/dist/advisory/evaluator.test.d.ts.map +1 -0
  12. package/dist/advisory/evaluator.test.js +172 -0
  13. package/dist/advisory/evaluator.test.js.map +1 -0
  14. package/dist/advisory/executor.test.d.ts +35 -0
  15. package/dist/advisory/executor.test.d.ts.map +1 -0
  16. package/dist/advisory/executor.test.js +233 -0
  17. package/dist/advisory/executor.test.js.map +1 -0
  18. package/dist/advisory/registry.test.d.ts +16 -0
  19. package/dist/advisory/registry.test.d.ts.map +1 -0
  20. package/dist/advisory/registry.test.js +62 -0
  21. package/dist/advisory/registry.test.js.map +1 -0
  22. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  23. package/dist/agents/SupervisorAgent.js.map +1 -1
  24. package/dist/bridge/a2a/agent-card.test.d.ts +24 -0
  25. package/dist/bridge/a2a/agent-card.test.d.ts.map +1 -0
  26. package/dist/bridge/a2a/agent-card.test.js +118 -0
  27. package/dist/bridge/a2a/agent-card.test.js.map +1 -0
  28. package/dist/bridge/a2a/mapper.test.d.ts +29 -0
  29. package/dist/bridge/a2a/mapper.test.d.ts.map +1 -0
  30. package/dist/bridge/a2a/mapper.test.js +265 -0
  31. package/dist/bridge/a2a/mapper.test.js.map +1 -0
  32. package/dist/bridge/a2a/message.test.d.ts +20 -0
  33. package/dist/bridge/a2a/message.test.d.ts.map +1 -0
  34. package/dist/bridge/a2a/message.test.js +116 -0
  35. package/dist/bridge/a2a/message.test.js.map +1 -0
  36. package/dist/bridge/a2a/task.d.ts +2 -2
  37. package/dist/bridge/a2a/task.d.ts.map +1 -1
  38. package/dist/bridge/a2a/task.js.map +1 -1
  39. package/dist/bridge/a2a/task.test.d.ts +29 -0
  40. package/dist/bridge/a2a/task.test.d.ts.map +1 -0
  41. package/dist/bridge/a2a/task.test.js +198 -0
  42. package/dist/bridge/a2a/task.test.js.map +1 -0
  43. package/dist/bridge/mcp/connector/adapter.test.d.ts +27 -0
  44. package/dist/bridge/mcp/connector/adapter.test.d.ts.map +1 -0
  45. package/dist/bridge/mcp/connector/adapter.test.js +203 -0
  46. package/dist/bridge/mcp/connector/adapter.test.js.map +1 -0
  47. package/dist/bridge/sse/mapper.test.d.ts +27 -0
  48. package/dist/bridge/sse/mapper.test.d.ts.map +1 -0
  49. package/dist/bridge/sse/mapper.test.js +271 -0
  50. package/dist/bridge/sse/mapper.test.js.map +1 -0
  51. package/dist/bridge/tools/connector/adapter.test.d.ts +28 -0
  52. package/dist/bridge/tools/connector/adapter.test.d.ts.map +1 -0
  53. package/dist/bridge/tools/connector/adapter.test.js +182 -0
  54. package/dist/bridge/tools/connector/adapter.test.js.map +1 -0
  55. package/dist/bridge/tools/connector/definitions.test.d.ts +23 -0
  56. package/dist/bridge/tools/connector/definitions.test.d.ts.map +1 -0
  57. package/dist/bridge/tools/connector/definitions.test.js +158 -0
  58. package/dist/bridge/tools/connector/definitions.test.js.map +1 -0
  59. package/dist/bridge/tools/connector/router.test.d.ts +21 -0
  60. package/dist/bridge/tools/connector/router.test.d.ts.map +1 -0
  61. package/dist/bridge/tools/connector/router.test.js +139 -0
  62. package/dist/bridge/tools/connector/router.test.js.map +1 -0
  63. package/dist/bus/breaker.test.d.ts +41 -0
  64. package/dist/bus/breaker.test.d.ts.map +1 -0
  65. package/dist/bus/breaker.test.js +242 -0
  66. package/dist/bus/breaker.test.js.map +1 -0
  67. package/dist/bus/index.test.d.ts +25 -0
  68. package/dist/bus/index.test.d.ts.map +1 -0
  69. package/dist/bus/index.test.js +151 -0
  70. package/dist/bus/index.test.js.map +1 -0
  71. package/dist/bus/lock.test.d.ts +44 -0
  72. package/dist/bus/lock.test.d.ts.map +1 -0
  73. package/dist/bus/lock.test.js +226 -0
  74. package/dist/bus/lock.test.js.map +1 -0
  75. package/dist/bus/ownership.test.d.ts +26 -0
  76. package/dist/bus/ownership.test.d.ts.map +1 -0
  77. package/dist/bus/ownership.test.js +205 -0
  78. package/dist/bus/ownership.test.js.map +1 -0
  79. package/dist/config/runtime.d.ts +24 -25
  80. package/dist/config/runtime.d.ts.map +1 -1
  81. package/dist/config/runtime.js.map +1 -1
  82. package/dist/connector/BaseConnector.test.d.ts +21 -0
  83. package/dist/connector/BaseConnector.test.d.ts.map +1 -0
  84. package/dist/connector/BaseConnector.test.js +108 -0
  85. package/dist/connector/BaseConnector.test.js.map +1 -0
  86. package/dist/connector/builtins/http.test.d.ts +30 -0
  87. package/dist/connector/builtins/http.test.d.ts.map +1 -0
  88. package/dist/connector/builtins/http.test.js +232 -0
  89. package/dist/connector/builtins/http.test.js.map +1 -0
  90. package/dist/connector/builtins/webhook.test.d.ts +20 -0
  91. package/dist/connector/builtins/webhook.test.d.ts.map +1 -0
  92. package/dist/connector/builtins/webhook.test.js +113 -0
  93. package/dist/connector/builtins/webhook.test.js.map +1 -0
  94. package/dist/connector/execution/factory.test.d.ts +16 -0
  95. package/dist/connector/execution/factory.test.d.ts.map +1 -0
  96. package/dist/connector/execution/factory.test.js +64 -0
  97. package/dist/connector/execution/factory.test.js.map +1 -0
  98. package/dist/connector/execution/remote.test.d.ts +16 -0
  99. package/dist/connector/execution/remote.test.d.ts.map +1 -0
  100. package/dist/connector/execution/remote.test.js +53 -0
  101. package/dist/connector/execution/remote.test.js.map +1 -0
  102. package/dist/connector/mcp/adapter.test.d.ts +34 -0
  103. package/dist/connector/mcp/adapter.test.d.ts.map +1 -0
  104. package/dist/connector/mcp/adapter.test.js +199 -0
  105. package/dist/connector/mcp/adapter.test.js.map +1 -0
  106. package/dist/contracts/api.d.ts +2 -2
  107. package/dist/contracts/api.d.ts.map +1 -1
  108. package/dist/contracts/index.d.ts +1 -2
  109. package/dist/contracts/index.d.ts.map +1 -1
  110. package/dist/contracts/index.js.map +1 -1
  111. package/dist/contracts/schemas.d.ts +10 -10
  112. package/dist/index.d.ts +3 -103
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +9 -89
  115. package/dist/index.js.map +1 -1
  116. package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -1
  117. package/dist/manager/agent/lifecycle.d.ts +1 -1
  118. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  119. package/dist/manager/agent/lifecycle.js +1 -1
  120. package/dist/manager/agent/lifecycle.js.map +1 -1
  121. package/dist/manager/run/persistence.d.ts +3 -3
  122. package/dist/manager/run/persistence.d.ts.map +1 -1
  123. package/dist/manager/run/persistence.js.map +1 -1
  124. package/dist/manager/thread/__tests__/lifecycle.test.js.map +1 -1
  125. package/dist/manager/thread/lifecycle.d.ts +1 -1
  126. package/dist/manager/thread/lifecycle.d.ts.map +1 -1
  127. package/dist/plugin/loader.d.ts +0 -5
  128. package/dist/plugin/loader.d.ts.map +1 -1
  129. package/dist/plugin/loader.js +1 -13
  130. package/dist/plugin/loader.js.map +1 -1
  131. package/dist/public-runtime.d.ts +70 -0
  132. package/dist/public-runtime.d.ts.map +1 -0
  133. package/dist/public-runtime.js +108 -0
  134. package/dist/public-runtime.js.map +1 -0
  135. package/dist/public-tools.d.ts +19 -0
  136. package/dist/public-tools.d.ts.map +1 -0
  137. package/dist/public-tools.js +34 -0
  138. package/dist/public-tools.js.map +1 -0
  139. package/dist/public-types.d.ts +55 -0
  140. package/dist/public-types.d.ts.map +1 -0
  141. package/dist/public-types.js +14 -0
  142. package/dist/public-types.js.map +1 -0
  143. package/dist/rag/chunking.test.d.ts +20 -0
  144. package/dist/rag/chunking.test.d.ts.map +1 -0
  145. package/dist/rag/chunking.test.js +92 -0
  146. package/dist/rag/chunking.test.js.map +1 -0
  147. package/dist/rag/context-assembler.test.d.ts +19 -0
  148. package/dist/rag/context-assembler.test.d.ts.map +1 -0
  149. package/dist/rag/context-assembler.test.js +98 -0
  150. package/dist/rag/context-assembler.test.js.map +1 -0
  151. package/dist/rag/embedding.test.d.ts +19 -0
  152. package/dist/rag/embedding.test.d.ts.map +1 -0
  153. package/dist/rag/embedding.test.js +115 -0
  154. package/dist/rag/embedding.test.js.map +1 -0
  155. package/dist/rag/ingestion.test.d.ts +22 -0
  156. package/dist/rag/ingestion.test.d.ts.map +1 -0
  157. package/dist/rag/ingestion.test.js +99 -0
  158. package/dist/rag/ingestion.test.js.map +1 -0
  159. package/dist/rag/knowledge-base.test.d.ts +17 -0
  160. package/dist/rag/knowledge-base.test.d.ts.map +1 -0
  161. package/dist/rag/knowledge-base.test.js +77 -0
  162. package/dist/rag/knowledge-base.test.js.map +1 -0
  163. package/dist/rag/rag-tool.d.ts +1 -1
  164. package/dist/rag/rag-tool.test.d.ts +21 -0
  165. package/dist/rag/rag-tool.test.d.ts.map +1 -0
  166. package/dist/rag/rag-tool.test.js +149 -0
  167. package/dist/rag/rag-tool.test.js.map +1 -0
  168. package/dist/rag/retriever.test.d.ts +26 -0
  169. package/dist/rag/retriever.test.d.ts.map +1 -0
  170. package/dist/rag/retriever.test.js +180 -0
  171. package/dist/rag/retriever.test.js.map +1 -0
  172. package/dist/rag/vector-store.test.d.ts +38 -0
  173. package/dist/rag/vector-store.test.d.ts.map +1 -0
  174. package/dist/rag/vector-store.test.js +175 -0
  175. package/dist/rag/vector-store.test.js.map +1 -0
  176. package/dist/registry/ManagedRegistry.test.d.ts +21 -0
  177. package/dist/registry/ManagedRegistry.test.d.ts.map +1 -0
  178. package/dist/registry/ManagedRegistry.test.js +98 -0
  179. package/dist/registry/ManagedRegistry.test.js.map +1 -0
  180. package/dist/registry/Registry.test.d.ts +18 -0
  181. package/dist/registry/Registry.test.d.ts.map +1 -0
  182. package/dist/registry/Registry.test.js +79 -0
  183. package/dist/registry/Registry.test.js.map +1 -0
  184. package/dist/registry/agent/definitions.test.d.ts +15 -0
  185. package/dist/registry/agent/definitions.test.d.ts.map +1 -0
  186. package/dist/registry/agent/definitions.test.js +84 -0
  187. package/dist/registry/agent/definitions.test.js.map +1 -0
  188. package/dist/registry/connector/definitions.test.d.ts +13 -0
  189. package/dist/registry/connector/definitions.test.d.ts.map +1 -0
  190. package/dist/registry/connector/definitions.test.js +41 -0
  191. package/dist/registry/connector/definitions.test.js.map +1 -0
  192. package/dist/registry/connector/scoped.test.d.ts +21 -0
  193. package/dist/registry/connector/scoped.test.d.ts.map +1 -0
  194. package/dist/registry/connector/scoped.test.js +115 -0
  195. package/dist/registry/connector/scoped.test.js.map +1 -0
  196. package/dist/registry/plugin/index.test.d.ts +12 -0
  197. package/dist/registry/plugin/index.test.d.ts.map +1 -0
  198. package/dist/registry/plugin/index.test.js +69 -0
  199. package/dist/registry/plugin/index.test.js.map +1 -0
  200. package/dist/registry/tool/execute.test.d.ts +42 -0
  201. package/dist/registry/tool/execute.test.d.ts.map +1 -0
  202. package/dist/registry/tool/execute.test.js +281 -0
  203. package/dist/registry/tool/execute.test.js.map +1 -0
  204. package/dist/run/LimitChecker.d.ts +0 -1
  205. package/dist/run/LimitChecker.d.ts.map +1 -1
  206. package/dist/run/LimitChecker.js +0 -6
  207. package/dist/run/LimitChecker.js.map +1 -1
  208. package/dist/run/reporter.d.ts +2 -2
  209. package/dist/run/reporter.d.ts.map +1 -1
  210. package/dist/run/reporter.js.map +1 -1
  211. package/dist/runtime/query/__tests__/checkpoint.test.d.ts +2 -0
  212. package/dist/runtime/query/__tests__/checkpoint.test.d.ts.map +1 -0
  213. package/dist/runtime/query/__tests__/checkpoint.test.js +150 -0
  214. package/dist/runtime/query/__tests__/checkpoint.test.js.map +1 -0
  215. package/dist/runtime/query/checkpoint.d.ts +23 -0
  216. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  217. package/dist/runtime/query/checkpoint.js +49 -0
  218. package/dist/runtime/query/checkpoint.js.map +1 -1
  219. package/dist/runtime/query/context.d.ts +0 -2
  220. package/dist/runtime/query/context.d.ts.map +1 -1
  221. package/dist/runtime/query/context.js +0 -4
  222. package/dist/runtime/query/context.js.map +1 -1
  223. package/dist/runtime/query/index.d.ts +3 -3
  224. package/dist/runtime/query/index.d.ts.map +1 -1
  225. package/dist/runtime/query/iteration/phases/advisory.test.d.ts +42 -0
  226. package/dist/runtime/query/iteration/phases/advisory.test.d.ts.map +1 -0
  227. package/dist/runtime/query/iteration/phases/advisory.test.js +334 -0
  228. package/dist/runtime/query/iteration/phases/advisory.test.js.map +1 -0
  229. package/dist/runtime/query/replay/__tests__/mutate.test.d.ts +2 -0
  230. package/dist/runtime/query/replay/__tests__/mutate.test.d.ts.map +1 -0
  231. package/dist/runtime/query/replay/__tests__/mutate.test.js +123 -0
  232. package/dist/runtime/query/replay/__tests__/mutate.test.js.map +1 -0
  233. package/dist/runtime/query/replay/__tests__/prepare.test.d.ts +2 -0
  234. package/dist/runtime/query/replay/__tests__/prepare.test.d.ts.map +1 -0
  235. package/dist/runtime/query/replay/__tests__/prepare.test.js +171 -0
  236. package/dist/runtime/query/replay/__tests__/prepare.test.js.map +1 -0
  237. package/dist/runtime/query/replay/list.d.ts +24 -0
  238. package/dist/runtime/query/replay/list.d.ts.map +1 -0
  239. package/dist/runtime/query/replay/list.js +21 -0
  240. package/dist/runtime/query/replay/list.js.map +1 -0
  241. package/dist/runtime/query/replay/mutate.d.ts +17 -0
  242. package/dist/runtime/query/replay/mutate.d.ts.map +1 -0
  243. package/dist/runtime/query/replay/mutate.js +62 -0
  244. package/dist/runtime/query/replay/mutate.js.map +1 -0
  245. package/dist/runtime/query/replay/prepare.d.ts +56 -0
  246. package/dist/runtime/query/replay/prepare.d.ts.map +1 -0
  247. package/dist/runtime/query/replay/prepare.js +65 -0
  248. package/dist/runtime/query/replay/prepare.js.map +1 -0
  249. package/dist/runtime/query/result.d.ts +2 -2
  250. package/dist/runtime/query/result.d.ts.map +1 -1
  251. package/dist/session/__tests__/integration/_fixtures.d.ts +4 -4
  252. package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -1
  253. package/dist/session/__tests__/integration/_fixtures.js.map +1 -1
  254. package/dist/session/__tests__/integration/archive-gate.test.js.map +1 -1
  255. package/dist/session/__tests__/integration/capacity-caps.test.js.map +1 -1
  256. package/dist/session/__tests__/integration/e2e-spawn.test.js.map +1 -1
  257. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js.map +1 -1
  258. package/dist/session/__tests__/integration/handoff-single-e2e.test.js.map +1 -1
  259. package/dist/session/__tests__/integration/prev-artifact-dag.test.js.map +1 -1
  260. package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -1
  261. package/dist/session/__tests__/integration/spawn-rollback.test.js.map +1 -1
  262. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js +1 -1
  263. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js.map +1 -1
  264. package/dist/session/errors.d.ts +1 -1
  265. package/dist/session/errors.d.ts.map +1 -1
  266. package/dist/session/events/index.d.ts +3 -3
  267. package/dist/session/events/index.d.ts.map +1 -1
  268. package/dist/session/events/index.js +3 -2
  269. package/dist/session/events/index.js.map +1 -1
  270. package/dist/session/handoff/__tests__/broadcast.test.js.map +1 -1
  271. package/dist/session/handoff/__tests__/capacity.test.js.map +1 -1
  272. package/dist/session/handoff/__tests__/single.test.js.map +1 -1
  273. package/dist/session/handoff/assignment.d.ts +1 -1
  274. package/dist/session/handoff/assignment.d.ts.map +1 -1
  275. package/dist/session/handoff/broadcast.d.ts.map +1 -1
  276. package/dist/session/handoff/broadcast.js.map +1 -1
  277. package/dist/session/handoff/single.d.ts.map +1 -1
  278. package/dist/session/handoff/single.js.map +1 -1
  279. package/dist/session/index.d.ts +0 -1
  280. package/dist/session/index.d.ts.map +1 -1
  281. package/dist/session/index.js +7 -6
  282. package/dist/session/index.js.map +1 -1
  283. package/dist/session/intervention/__tests__/prev-artifact.test.js.map +1 -1
  284. package/dist/session/intervention/prev-artifact.d.ts +1 -1
  285. package/dist/session/intervention/prev-artifact.d.ts.map +1 -1
  286. package/dist/session/retention/__tests__/archive.test.js.map +1 -1
  287. package/dist/session/retention/__tests__/disk-backend.test.js.map +1 -1
  288. package/dist/session/retention/archive.d.ts +1 -1
  289. package/dist/session/retention/archive.d.ts.map +1 -1
  290. package/dist/session/retention/backend.d.ts +4 -4
  291. package/dist/session/retention/backend.d.ts.map +1 -1
  292. package/dist/session/retention/disk-backend.d.ts +1 -1
  293. package/dist/session/retention/disk-backend.d.ts.map +1 -1
  294. package/dist/session/retention/index.d.ts +3 -3
  295. package/dist/session/retention/index.d.ts.map +1 -1
  296. package/dist/session/retention/index.js +4 -2
  297. package/dist/session/retention/index.js.map +1 -1
  298. package/dist/session/status/__tests__/derive.test.d.ts +2 -0
  299. package/dist/session/status/__tests__/derive.test.d.ts.map +1 -0
  300. package/dist/session/{hierarchy/__tests__/session.test.js → status/__tests__/derive.test.js} +2 -2
  301. package/dist/session/status/__tests__/derive.test.js.map +1 -0
  302. package/dist/session/status/derive.d.ts +33 -0
  303. package/dist/session/status/derive.d.ts.map +1 -0
  304. package/dist/session/{hierarchy/session.js → status/derive.js} +6 -1
  305. package/dist/session/status/derive.js.map +1 -0
  306. package/dist/session/summary/__tests__/materialize.test.js +2 -1
  307. package/dist/session/summary/__tests__/materialize.test.js.map +1 -1
  308. package/dist/session/summary/errors.d.ts +43 -0
  309. package/dist/session/summary/errors.d.ts.map +1 -0
  310. package/dist/session/summary/errors.js +37 -0
  311. package/dist/session/summary/errors.js.map +1 -0
  312. package/dist/session/summary/index.d.ts +4 -3
  313. package/dist/session/summary/index.d.ts.map +1 -1
  314. package/dist/session/summary/index.js +5 -4
  315. package/dist/session/summary/index.js.map +1 -1
  316. package/dist/session/summary/materialize.d.ts +2 -2
  317. package/dist/session/summary/materialize.d.ts.map +1 -1
  318. package/dist/session/summary/materialize.js +2 -1
  319. package/dist/session/summary/materialize.js.map +1 -1
  320. package/dist/session/workspace/__tests__/git-worktree.test.js.map +1 -1
  321. package/dist/session/workspace/driver.d.ts +2 -2
  322. package/dist/session/workspace/driver.d.ts.map +1 -1
  323. package/dist/session/workspace/git-worktree.d.ts +1 -1
  324. package/dist/session/workspace/git-worktree.d.ts.map +1 -1
  325. package/dist/session/workspace/git-worktree.js.map +1 -1
  326. package/dist/session/workspace/index.d.ts +1 -1
  327. package/dist/session/workspace/index.d.ts.map +1 -1
  328. package/dist/session/workspace/index.js +3 -2
  329. package/dist/session/workspace/index.js.map +1 -1
  330. package/dist/store/run/disk.d.ts +4 -4
  331. package/dist/store/run/disk.d.ts.map +1 -1
  332. package/dist/store/run/disk.js.map +1 -1
  333. package/dist/store/session/__tests__/disk.test.js.map +1 -1
  334. package/dist/store/session/__tests__/memory.test.js.map +1 -1
  335. package/dist/store/session/disk.d.ts +6 -6
  336. package/dist/store/session/disk.d.ts.map +1 -1
  337. package/dist/store/session/disk.js +1 -1
  338. package/dist/store/session/disk.js.map +1 -1
  339. package/dist/store/session/index.d.ts +1 -1
  340. package/dist/store/session/index.d.ts.map +1 -1
  341. package/dist/store/session/index.js +2 -1
  342. package/dist/store/session/index.js.map +1 -1
  343. package/dist/store/session/linkage.d.ts +1 -1
  344. package/dist/store/session/linkage.d.ts.map +1 -1
  345. package/dist/store/session/memory.d.ts +5 -5
  346. package/dist/store/session/memory.d.ts.map +1 -1
  347. package/dist/store/session/memory.js +1 -1
  348. package/dist/store/session/memory.js.map +1 -1
  349. package/dist/store/thread/disk.d.ts +1 -1
  350. package/dist/store/thread/disk.d.ts.map +1 -1
  351. package/dist/store/thread/memory.d.ts +1 -1
  352. package/dist/store/thread/memory.d.ts.map +1 -1
  353. package/dist/telemetry/attributes.d.ts +0 -1
  354. package/dist/telemetry/attributes.d.ts.map +1 -1
  355. package/dist/telemetry/attributes.js +0 -3
  356. package/dist/telemetry/attributes.js.map +1 -1
  357. package/dist/telemetry/runtime-accessors.d.ts +1 -2
  358. package/dist/telemetry/runtime-accessors.d.ts.map +1 -1
  359. package/dist/telemetry/runtime-accessors.js +1 -4
  360. package/dist/telemetry/runtime-accessors.js.map +1 -1
  361. package/dist/test-setup.d.ts +22 -0
  362. package/dist/test-setup.d.ts.map +1 -0
  363. package/dist/test-setup.js +23 -0
  364. package/dist/test-setup.js.map +1 -0
  365. package/dist/tools/builtins/bash.d.ts +1 -1
  366. package/dist/tools/builtins/computer-use.d.ts +4 -4
  367. package/dist/tools/builtins/edit.d.ts +1 -1
  368. package/dist/tools/builtins/glob.d.ts +1 -1
  369. package/dist/tools/builtins/grep.d.ts +1 -1
  370. package/dist/tools/builtins/ls.d.ts +1 -1
  371. package/dist/tools/builtins/read-file.d.ts +1 -1
  372. package/dist/tools/builtins/search-tools.d.ts +1 -1
  373. package/dist/tools/builtins/write-file.d.ts +1 -1
  374. package/dist/types/agent/task.d.ts +2 -2
  375. package/dist/types/agent/task.d.ts.map +1 -1
  376. package/dist/{session/hierarchy/project.d.ts → types/project/entity.d.ts} +4 -4
  377. package/dist/types/project/entity.d.ts.map +1 -0
  378. package/dist/types/project/entity.js +2 -0
  379. package/dist/types/project/entity.js.map +1 -0
  380. package/dist/types/project/index.d.ts +2 -0
  381. package/dist/types/project/index.d.ts.map +1 -0
  382. package/dist/types/project/index.js +4 -0
  383. package/dist/types/project/index.js.map +1 -0
  384. package/dist/types/retention/archive-backend-ref.d.ts.map +1 -0
  385. package/dist/types/retention/archive-backend-ref.js.map +1 -0
  386. package/dist/types/retention/index.d.ts +4 -0
  387. package/dist/types/retention/index.d.ts.map +1 -0
  388. package/dist/types/retention/index.js +4 -0
  389. package/dist/types/retention/index.js.map +1 -0
  390. package/dist/types/retention/policy.d.ts.map +1 -0
  391. package/dist/types/retention/policy.js.map +1 -0
  392. package/dist/types/run/entity.d.ts +56 -0
  393. package/dist/types/run/entity.d.ts.map +1 -0
  394. package/dist/types/run/entity.js +2 -0
  395. package/dist/types/run/entity.js.map +1 -0
  396. package/dist/types/run/events.d.ts +2 -2
  397. package/dist/types/run/events.d.ts.map +1 -1
  398. package/dist/types/run/index.d.ts +7 -1
  399. package/dist/types/run/index.d.ts.map +1 -1
  400. package/dist/types/run/index.js +8 -9
  401. package/dist/types/run/index.js.map +1 -1
  402. package/dist/{session/hierarchy → types/run}/lineage.d.ts +1 -1
  403. package/dist/types/run/lineage.d.ts.map +1 -0
  404. package/dist/types/run/lineage.js.map +1 -0
  405. package/dist/types/run/replay.d.ts +53 -0
  406. package/dist/types/run/replay.d.ts.map +1 -0
  407. package/dist/types/run/replay.js +15 -0
  408. package/dist/types/run/replay.js.map +1 -0
  409. package/dist/types/run/schema-version.d.ts.map +1 -0
  410. package/dist/types/run/schema-version.js.map +1 -0
  411. package/dist/{session/events/types.d.ts → types/run/subsession-events.d.ts} +5 -5
  412. package/dist/types/run/subsession-events.d.ts.map +1 -0
  413. package/dist/types/run/subsession-events.js +2 -0
  414. package/dist/types/run/subsession-events.js.map +1 -0
  415. package/dist/{session/hierarchy → types/session}/actor.d.ts +1 -1
  416. package/dist/types/session/actor.d.ts.map +1 -0
  417. package/dist/{session/hierarchy → types/session}/actor.js.map +1 -1
  418. package/dist/types/session/entity.d.ts +51 -0
  419. package/dist/types/session/entity.d.ts.map +1 -0
  420. package/dist/types/session/entity.js +2 -0
  421. package/dist/types/session/entity.js.map +1 -0
  422. package/dist/types/session/index.d.ts +4 -0
  423. package/dist/types/session/index.d.ts.map +1 -1
  424. package/dist/{store → types}/session/messages.d.ts +2 -2
  425. package/dist/{store → types}/session/messages.d.ts.map +1 -1
  426. package/dist/types/session/messages.js.map +1 -0
  427. package/dist/types/session/store.d.ts +6 -6
  428. package/dist/types/session/store.d.ts.map +1 -1
  429. package/dist/{session/hierarchy → types/session}/sub-session.d.ts +9 -9
  430. package/dist/types/session/sub-session.d.ts.map +1 -0
  431. package/dist/types/session/sub-session.js.map +1 -0
  432. package/dist/{session → types}/summary/deliverable.d.ts +2 -2
  433. package/dist/types/summary/deliverable.d.ts.map +1 -0
  434. package/dist/types/summary/deliverable.js.map +1 -0
  435. package/dist/types/summary/index.d.ts +4 -0
  436. package/dist/types/summary/index.d.ts.map +1 -0
  437. package/dist/types/summary/index.js +4 -0
  438. package/dist/types/summary/index.js.map +1 -0
  439. package/dist/{session → types}/summary/ref.d.ts +9 -36
  440. package/dist/types/summary/ref.d.ts.map +1 -0
  441. package/dist/types/summary/ref.js +28 -0
  442. package/dist/types/summary/ref.js.map +1 -0
  443. package/dist/{session/hierarchy/tenant.d.ts → types/tenant/entity.d.ts} +2 -2
  444. package/dist/types/tenant/entity.d.ts.map +1 -0
  445. package/dist/types/tenant/entity.js +2 -0
  446. package/dist/types/tenant/entity.js.map +1 -0
  447. package/dist/types/tenant/index.d.ts +2 -0
  448. package/dist/types/tenant/index.d.ts.map +1 -0
  449. package/dist/types/tenant/index.js +4 -0
  450. package/dist/types/tenant/index.js.map +1 -0
  451. package/dist/{session/hierarchy/thread.d.ts → types/thread/entity.d.ts} +31 -7
  452. package/dist/types/thread/entity.d.ts.map +1 -0
  453. package/dist/types/thread/entity.js +2 -0
  454. package/dist/types/thread/entity.js.map +1 -0
  455. package/dist/types/thread/index.d.ts +1 -0
  456. package/dist/types/thread/index.d.ts.map +1 -1
  457. package/dist/types/thread/store.d.ts +1 -1
  458. package/dist/types/thread/store.d.ts.map +1 -1
  459. package/dist/types/workspace/index.d.ts +2 -0
  460. package/dist/types/workspace/index.d.ts.map +1 -0
  461. package/dist/types/workspace/index.js +7 -0
  462. package/dist/types/workspace/index.js.map +1 -0
  463. package/dist/{session → types}/workspace/ref.d.ts +1 -1
  464. package/dist/types/workspace/ref.d.ts.map +1 -0
  465. package/dist/types/workspace/ref.js.map +1 -0
  466. package/dist/utils/logger.d.ts +1 -1
  467. package/dist/utils/logger.d.ts.map +1 -1
  468. package/dist/utils/logger.js +5 -0
  469. package/dist/utils/logger.js.map +1 -1
  470. package/package.json +4 -1
  471. package/src/__tests__/replay-public-surface.test.ts +54 -0
  472. package/src/advisory/context.test.ts +109 -0
  473. package/src/advisory/evaluator.test.ts +192 -0
  474. package/src/advisory/executor.test.ts +272 -0
  475. package/src/advisory/registry.test.ts +75 -0
  476. package/src/agents/SupervisorAgent.ts +1 -1
  477. package/src/bridge/a2a/agent-card.test.ts +140 -0
  478. package/src/bridge/a2a/mapper.test.ts +293 -0
  479. package/src/bridge/a2a/message.test.ts +138 -0
  480. package/src/bridge/a2a/task.test.ts +235 -0
  481. package/src/bridge/a2a/task.ts +4 -4
  482. package/src/bridge/mcp/connector/adapter.test.ts +230 -0
  483. package/src/bridge/sse/mapper.test.ts +422 -0
  484. package/src/bridge/tools/connector/adapter.test.ts +224 -0
  485. package/src/bridge/tools/connector/definitions.test.ts +183 -0
  486. package/src/bridge/tools/connector/router.test.ts +159 -0
  487. package/src/bus/breaker.test.ts +274 -0
  488. package/src/bus/index.test.ts +183 -0
  489. package/src/bus/lock.test.ts +265 -0
  490. package/src/bus/ownership.test.ts +243 -0
  491. package/src/config/runtime.ts +0 -2
  492. package/src/connector/BaseConnector.test.ts +130 -0
  493. package/src/connector/builtins/http.test.ts +290 -0
  494. package/src/connector/builtins/webhook.test.ts +138 -0
  495. package/src/connector/execution/factory.test.ts +75 -0
  496. package/src/connector/execution/remote.test.ts +63 -0
  497. package/src/connector/mcp/adapter.test.ts +249 -0
  498. package/src/contracts/api.ts +2 -2
  499. package/src/contracts/index.ts +1 -3
  500. package/src/index.ts +11 -362
  501. package/src/manager/agent/__tests__/lifecycle.test.ts +2 -2
  502. package/src/manager/agent/lifecycle.ts +5 -5
  503. package/src/manager/run/persistence.ts +4 -4
  504. package/src/manager/thread/__tests__/lifecycle.test.ts +1 -1
  505. package/src/manager/thread/lifecycle.ts +2 -2
  506. package/src/plugin/loader.ts +0 -16
  507. package/src/public-runtime.ts +373 -0
  508. package/src/public-tools.ts +63 -0
  509. package/src/public-types.ts +156 -0
  510. package/src/rag/chunking.test.ts +107 -0
  511. package/src/rag/context-assembler.test.ts +114 -0
  512. package/src/rag/embedding.test.ts +130 -0
  513. package/src/rag/ingestion.test.ts +114 -0
  514. package/src/rag/knowledge-base.test.ts +106 -0
  515. package/src/rag/rag-tool.test.ts +167 -0
  516. package/src/rag/retriever.test.ts +210 -0
  517. package/src/rag/vector-store.test.ts +196 -0
  518. package/src/registry/ManagedRegistry.test.ts +118 -0
  519. package/src/registry/Registry.test.ts +91 -0
  520. package/src/registry/agent/definitions.test.ts +100 -0
  521. package/src/registry/connector/definitions.test.ts +51 -0
  522. package/src/registry/connector/scoped.test.ts +129 -0
  523. package/src/registry/plugin/index.test.ts +85 -0
  524. package/src/registry/tool/execute.test.ts +330 -0
  525. package/src/run/LimitChecker.ts +0 -9
  526. package/src/run/reporter.ts +3 -3
  527. package/src/runtime/query/__tests__/checkpoint.test.ts +169 -0
  528. package/src/runtime/query/checkpoint.ts +54 -0
  529. package/src/runtime/query/context.ts +0 -5
  530. package/src/runtime/query/index.ts +4 -4
  531. package/src/runtime/query/iteration/phases/advisory.test.ts +412 -0
  532. package/src/runtime/query/replay/__tests__/mutate.test.ts +134 -0
  533. package/src/runtime/query/replay/__tests__/prepare.test.ts +207 -0
  534. package/src/runtime/query/replay/list.ts +32 -0
  535. package/src/runtime/query/replay/mutate.ts +76 -0
  536. package/src/runtime/query/replay/prepare.ts +114 -0
  537. package/src/runtime/query/result.ts +2 -2
  538. package/src/session/__tests__/integration/_fixtures.ts +2 -2
  539. package/src/session/__tests__/integration/archive-gate.test.ts +1 -1
  540. package/src/session/__tests__/integration/capacity-caps.test.ts +1 -1
  541. package/src/session/__tests__/integration/e2e-spawn.test.ts +1 -1
  542. package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +1 -1
  543. package/src/session/__tests__/integration/handoff-single-e2e.test.ts +1 -1
  544. package/src/session/__tests__/integration/prev-artifact-dag.test.ts +4 -1
  545. package/src/session/__tests__/integration/retention-archive.test.ts +1 -1
  546. package/src/session/__tests__/integration/spawn-rollback.test.ts +2 -2
  547. package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +1 -1
  548. package/src/session/errors.ts +1 -1
  549. package/src/session/events/index.ts +5 -4
  550. package/src/session/handoff/__tests__/broadcast.test.ts +1 -1
  551. package/src/session/handoff/__tests__/capacity.test.ts +1 -1
  552. package/src/session/handoff/__tests__/single.test.ts +1 -1
  553. package/src/session/handoff/assignment.ts +1 -1
  554. package/src/session/handoff/broadcast.ts +2 -2
  555. package/src/session/handoff/single.ts +2 -2
  556. package/src/session/index.ts +7 -6
  557. package/src/session/intervention/__tests__/prev-artifact.test.ts +4 -1
  558. package/src/session/intervention/prev-artifact.ts +1 -1
  559. package/src/session/retention/__tests__/archive.test.ts +3 -3
  560. package/src/session/retention/__tests__/disk-backend.test.ts +4 -4
  561. package/src/session/retention/archive.ts +2 -2
  562. package/src/session/retention/backend.ts +4 -4
  563. package/src/session/retention/disk-backend.ts +4 -4
  564. package/src/session/retention/index.ts +6 -4
  565. package/src/session/{hierarchy/__tests__/session.test.ts → status/__tests__/derive.test.ts} +3 -2
  566. package/src/session/{hierarchy/session.ts → status/derive.ts} +9 -55
  567. package/src/session/summary/__tests__/materialize.test.ts +4 -7
  568. package/src/session/summary/errors.ts +51 -0
  569. package/src/session/summary/index.ts +7 -10
  570. package/src/session/summary/materialize.ts +4 -5
  571. package/src/session/workspace/__tests__/git-worktree.test.ts +1 -1
  572. package/src/session/workspace/driver.ts +2 -2
  573. package/src/session/workspace/git-worktree.ts +1 -1
  574. package/src/session/workspace/index.ts +7 -6
  575. package/src/store/run/disk.ts +4 -4
  576. package/src/store/session/__tests__/disk.test.ts +2 -2
  577. package/src/store/session/__tests__/memory.test.ts +2 -2
  578. package/src/store/session/disk.ts +12 -12
  579. package/src/store/session/index.ts +3 -2
  580. package/src/store/session/linkage.ts +1 -1
  581. package/src/store/session/memory.ts +6 -6
  582. package/src/store/thread/disk.ts +1 -1
  583. package/src/store/thread/memory.ts +1 -1
  584. package/src/telemetry/attributes.ts +0 -4
  585. package/src/telemetry/runtime-accessors.ts +1 -5
  586. package/src/test-setup.ts +24 -0
  587. package/src/types/agent/task.ts +2 -2
  588. package/src/{session/hierarchy/project.ts → types/project/entity.ts} +3 -3
  589. package/src/types/project/index.ts +4 -0
  590. package/src/types/retention/index.ts +6 -0
  591. package/src/types/run/entity.ts +63 -0
  592. package/src/types/run/events.ts +6 -6
  593. package/src/types/run/index.ts +16 -9
  594. package/src/{session/hierarchy → types/run}/lineage.ts +1 -1
  595. package/src/types/run/replay.ts +61 -0
  596. package/src/{session/events/types.ts → types/run/subsession-events.ts} +4 -4
  597. package/src/{session/hierarchy → types/session}/actor.ts +1 -1
  598. package/src/types/session/entity.ts +59 -0
  599. package/src/types/session/index.ts +15 -0
  600. package/src/{store → types}/session/messages.ts +2 -2
  601. package/src/types/session/store.ts +6 -6
  602. package/src/{session/hierarchy → types/session}/sub-session.ts +9 -9
  603. package/src/{session → types}/summary/deliverable.ts +2 -2
  604. package/src/types/summary/index.ts +18 -0
  605. package/src/{session → types}/summary/ref.ts +9 -44
  606. package/src/{session/hierarchy/tenant.ts → types/tenant/entity.ts} +1 -1
  607. package/src/types/tenant/index.ts +4 -0
  608. package/src/{session/hierarchy/thread.ts → types/thread/entity.ts} +30 -6
  609. package/src/types/thread/index.ts +1 -0
  610. package/src/types/thread/store.ts +1 -1
  611. package/src/types/workspace/index.ts +12 -0
  612. package/src/{session → types}/workspace/ref.ts +1 -1
  613. package/src/utils/logger.ts +6 -1
  614. package/dist/contracts/ids.d.ts +0 -2
  615. package/dist/contracts/ids.d.ts.map +0 -1
  616. package/dist/contracts/ids.js +0 -2
  617. package/dist/contracts/ids.js.map +0 -1
  618. package/dist/session/events/schema-version.d.ts.map +0 -1
  619. package/dist/session/events/schema-version.js.map +0 -1
  620. package/dist/session/events/types.d.ts.map +0 -1
  621. package/dist/session/events/types.js +0 -2
  622. package/dist/session/events/types.js.map +0 -1
  623. package/dist/session/hierarchy/__tests__/session.test.d.ts +0 -2
  624. package/dist/session/hierarchy/__tests__/session.test.d.ts.map +0 -1
  625. package/dist/session/hierarchy/__tests__/session.test.js.map +0 -1
  626. package/dist/session/hierarchy/actor.d.ts.map +0 -1
  627. package/dist/session/hierarchy/index.d.ts +0 -9
  628. package/dist/session/hierarchy/index.d.ts.map +0 -1
  629. package/dist/session/hierarchy/index.js +0 -4
  630. package/dist/session/hierarchy/index.js.map +0 -1
  631. package/dist/session/hierarchy/lineage.d.ts.map +0 -1
  632. package/dist/session/hierarchy/lineage.js.map +0 -1
  633. package/dist/session/hierarchy/project.d.ts.map +0 -1
  634. package/dist/session/hierarchy/project.js +0 -2
  635. package/dist/session/hierarchy/project.js.map +0 -1
  636. package/dist/session/hierarchy/session.d.ts +0 -71
  637. package/dist/session/hierarchy/session.d.ts.map +0 -1
  638. package/dist/session/hierarchy/session.js.map +0 -1
  639. package/dist/session/hierarchy/sub-session.d.ts.map +0 -1
  640. package/dist/session/hierarchy/sub-session.js.map +0 -1
  641. package/dist/session/hierarchy/tenant.d.ts.map +0 -1
  642. package/dist/session/hierarchy/tenant.js +0 -2
  643. package/dist/session/hierarchy/tenant.js.map +0 -1
  644. package/dist/session/hierarchy/thread.d.ts.map +0 -1
  645. package/dist/session/hierarchy/thread.js +0 -2
  646. package/dist/session/hierarchy/thread.js.map +0 -1
  647. package/dist/session/retention/archive-backend-ref.d.ts.map +0 -1
  648. package/dist/session/retention/archive-backend-ref.js.map +0 -1
  649. package/dist/session/retention/policy.d.ts.map +0 -1
  650. package/dist/session/retention/policy.js.map +0 -1
  651. package/dist/session/summary/deliverable.d.ts.map +0 -1
  652. package/dist/session/summary/deliverable.js.map +0 -1
  653. package/dist/session/summary/ref.d.ts.map +0 -1
  654. package/dist/session/summary/ref.js +0 -51
  655. package/dist/session/summary/ref.js.map +0 -1
  656. package/dist/session/workspace/ref.d.ts.map +0 -1
  657. package/dist/session/workspace/ref.js.map +0 -1
  658. package/dist/store/session/messages.js.map +0 -1
  659. package/dist/tools/builtins/__tests__/structuredOutput.example.d.ts +0 -140
  660. package/dist/tools/builtins/__tests__/structuredOutput.example.d.ts.map +0 -1
  661. package/dist/tools/builtins/__tests__/structuredOutput.example.js +0 -183
  662. package/dist/tools/builtins/__tests__/structuredOutput.example.js.map +0 -1
  663. package/dist/types/run/state.d.ts +0 -30
  664. package/dist/types/run/state.d.ts.map +0 -1
  665. package/dist/types/run/state.js +0 -2
  666. package/dist/types/run/state.js.map +0 -1
  667. package/src/contracts/ids.ts +0 -1
  668. package/src/session/hierarchy/index.ts +0 -18
  669. package/src/tools/builtins/__tests__/structuredOutput.example.ts +0 -221
  670. package/src/types/run/state.ts +0 -35
  671. /package/dist/{session → types}/retention/archive-backend-ref.d.ts +0 -0
  672. /package/dist/{session → types}/retention/archive-backend-ref.js +0 -0
  673. /package/dist/{session → types}/retention/policy.d.ts +0 -0
  674. /package/dist/{session → types}/retention/policy.js +0 -0
  675. /package/dist/{session/hierarchy → types/run}/lineage.js +0 -0
  676. /package/dist/{session/events → types/run}/schema-version.d.ts +0 -0
  677. /package/dist/{session/events → types/run}/schema-version.js +0 -0
  678. /package/dist/{session/hierarchy → types/session}/actor.js +0 -0
  679. /package/dist/{store → types}/session/messages.js +0 -0
  680. /package/dist/{session/hierarchy → types/session}/sub-session.js +0 -0
  681. /package/dist/{session → types}/summary/deliverable.js +0 -0
  682. /package/dist/{session → types}/workspace/ref.js +0 -0
  683. /package/src/{session → types}/retention/archive-backend-ref.ts +0 -0
  684. /package/src/{session → types}/retention/policy.ts +0 -0
  685. /package/src/{session/events → types/run}/schema-version.ts +0 -0
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `ToolRegistry` extends `ManagedRegistry<ToolDefinition>` with
5
+ * `idField: 'name'` and an additional `availability` map keyed by
6
+ * tool name.
7
+ * - `register(tool)` defaults availability to 'active'; the array
8
+ * overload uses the second arg (if it's a string) as the initial
9
+ * state for all tools.
10
+ * - Tier validation: if `tool.tier` is set AND `tierConfig` is
11
+ * configured, the tier id must be in `tierConfig.tiers`; otherwise
12
+ * register throws. Tools without a tier (even with tierConfig
13
+ * configured) are always accepted.
14
+ * - `unregister` + `clear` drop both the Registry entry and the
15
+ * availability entry.
16
+ * - `activate` / `defer` take a list of names; each throws (via
17
+ * `getOrThrow`) if the name is unknown, then toggles availability.
18
+ * - `suspendAll` flips every `active` tool to `suspended`;
19
+ * `deferred` / `suspended` tools are left alone. `hasSuspended`
20
+ * reports true iff at least one tool is suspended.
21
+ * - `getAvailability(name)` returns 'active' as a default even for
22
+ * unknown names (this is non-obvious but is the current behavior).
23
+ * - `searchDeferred(q)` is a case-insensitive filter against name OR
24
+ * description of every DEFERRED tool.
25
+ * - `assignTiers(mapping)` mutates `tool.tier` on existing tools;
26
+ * throws via `getOrThrow` on unknown name; throws if the tier id
27
+ * is not in `tierConfig.tiers`.
28
+ * - `toTierGuidance` returns null without a guidanceTemplate; calls
29
+ * the template with every defined tier otherwise.
30
+ * - `toPromptSection`: returns '' when no active or deferred tools;
31
+ * otherwise produces `<available_tools>` + `<deferred_tools>`
32
+ * fragments.
33
+ * - `toLLMTools`: converts active + suspended tools (filtered by
34
+ * `toolNames` if provided) into LLM tool schemas via
35
+ * `zodToJsonSchema`. When `tierConfig.labelInDescription` is true,
36
+ * the description is prefixed with the tier label.
37
+ * - `execute`: validates availability → permissionMode plan gate →
38
+ * zod.safeParse → calls tool.execute inside an OTEL span; wraps
39
+ * thrown errors as `{success:false, error}`.
40
+ */
41
+
42
+ import { describe, expect, it, vi } from 'vitest'
43
+ import { z } from 'zod'
44
+
45
+ import type { RunId } from '../../types/ids/index.js'
46
+ import type { ToolContext, ToolDefinition, ToolTierConfig } from '../../types/tool/index.js'
47
+
48
+ import { ToolRegistry } from './execute.js'
49
+
50
+ function makeTool(name: string, overrides: Partial<ToolDefinition> = {}): ToolDefinition {
51
+ return {
52
+ name,
53
+ description: `${name} tool`,
54
+ inputSchema: z.object({ k: z.string().optional() }),
55
+ async execute() {
56
+ return { success: true, output: `${name}-ran` }
57
+ },
58
+ ...overrides,
59
+ }
60
+ }
61
+
62
+ function makeContext(overrides: Partial<ToolContext> = {}): ToolContext {
63
+ return {
64
+ runId: 'run_1' as RunId,
65
+ workingDirectory: '/tmp',
66
+ abortSignal: new AbortController().signal,
67
+ env: {},
68
+ log: () => {},
69
+ ...overrides,
70
+ }
71
+ }
72
+
73
+ describe('ToolRegistry — register + availability', () => {
74
+ it('single-tool register: default availability is active', () => {
75
+ const r = new ToolRegistry()
76
+ r.register(makeTool('read'))
77
+ expect(r.getAvailability('read')).toBe('active')
78
+ })
79
+
80
+ it('array-register: second arg sets availability for all', () => {
81
+ const r = new ToolRegistry()
82
+ r.register([makeTool('a'), makeTool('b')], 'deferred')
83
+ expect(r.getAvailability('a')).toBe('deferred')
84
+ expect(r.getAvailability('b')).toBe('deferred')
85
+ })
86
+
87
+ it('getAvailability returns active for unknown names (current default)', () => {
88
+ const r = new ToolRegistry()
89
+ expect(r.getAvailability('never-registered')).toBe('active')
90
+ })
91
+
92
+ it('unregister drops both the tool + the availability entry', () => {
93
+ const r = new ToolRegistry()
94
+ r.register(makeTool('a'))
95
+ expect(r.unregister('a')).toBe(true)
96
+ expect(r.get('a')).toBeUndefined()
97
+ expect(r.listIds()).toEqual([])
98
+ })
99
+
100
+ it('clear empties both maps', () => {
101
+ const r = new ToolRegistry()
102
+ r.register(makeTool('a'))
103
+ r.clear()
104
+ expect(r.listIds()).toEqual([])
105
+ })
106
+ })
107
+
108
+ describe('ToolRegistry — tier validation', () => {
109
+ const tierConfig: ToolTierConfig = {
110
+ tiers: [
111
+ { id: 'safe', label: 'Safe', priority: 1 },
112
+ { id: 'danger', label: 'Danger', priority: 10 },
113
+ ],
114
+ }
115
+
116
+ it('accepts tools without a tier even when tierConfig is configured', () => {
117
+ const r = new ToolRegistry({ tierConfig })
118
+ expect(() => r.register(makeTool('a'))).not.toThrow()
119
+ })
120
+
121
+ it('accepts tools whose tier is in the config', () => {
122
+ const r = new ToolRegistry({ tierConfig })
123
+ expect(() => r.register(makeTool('a', { tier: 'safe' }))).not.toThrow()
124
+ })
125
+
126
+ it('throws when tier id is unknown', () => {
127
+ const r = new ToolRegistry({ tierConfig })
128
+ expect(() => r.register(makeTool('a', { tier: 'bogus' }))).toThrow(/not defined/)
129
+ })
130
+ })
131
+
132
+ describe('ToolRegistry — activate / defer / suspend', () => {
133
+ it('activate + defer throw via getOrThrow on unknown name', () => {
134
+ const r = new ToolRegistry()
135
+ expect(() => r.activate(['unknown'])).toThrow(/Not found/)
136
+ expect(() => r.defer(['unknown'])).toThrow(/Not found/)
137
+ })
138
+
139
+ it('activate sets state to active', () => {
140
+ const r = new ToolRegistry()
141
+ r.register([makeTool('a')], 'deferred')
142
+ r.activate(['a'])
143
+ expect(r.getAvailability('a')).toBe('active')
144
+ })
145
+
146
+ it('defer sets state to deferred', () => {
147
+ const r = new ToolRegistry()
148
+ r.register(makeTool('a'))
149
+ r.defer(['a'])
150
+ expect(r.getAvailability('a')).toBe('deferred')
151
+ })
152
+
153
+ it('suspendAll flips active → suspended; leaves deferred / suspended alone', () => {
154
+ const r = new ToolRegistry()
155
+ r.register(makeTool('a'))
156
+ r.register(makeTool('b'))
157
+ r.register([makeTool('c')], 'deferred')
158
+ r.suspendAll()
159
+ expect(r.getAvailability('a')).toBe('suspended')
160
+ expect(r.getAvailability('b')).toBe('suspended')
161
+ expect(r.getAvailability('c')).toBe('deferred')
162
+ expect(r.hasSuspended()).toBe(true)
163
+ })
164
+
165
+ it('hasSuspended returns false when none are suspended', () => {
166
+ const r = new ToolRegistry()
167
+ r.register(makeTool('a'))
168
+ expect(r.hasSuspended()).toBe(false)
169
+ })
170
+ })
171
+
172
+ describe('ToolRegistry — searchDeferred', () => {
173
+ it('filters only deferred tools by name OR description (case-insensitive)', () => {
174
+ const r = new ToolRegistry()
175
+ r.register([makeTool('alpha', { description: 'does alpha' })], 'deferred')
176
+ r.register([makeTool('beta', { description: 'does BETA' })], 'deferred')
177
+ r.register(makeTool('gamma'))
178
+ expect(r.searchDeferred('alpha').map((t) => t.name)).toEqual(['alpha'])
179
+ expect(r.searchDeferred('beta').map((t) => t.name)).toEqual(['beta'])
180
+ expect(r.searchDeferred('does').map((t) => t.name)).toEqual(['alpha', 'beta'])
181
+ expect(r.searchDeferred('gamma')).toEqual([])
182
+ })
183
+ })
184
+
185
+ describe('ToolRegistry — tier mutation + guidance', () => {
186
+ const tierConfig: ToolTierConfig = {
187
+ tiers: [
188
+ { id: 'safe', label: 'Safe', priority: 1 },
189
+ { id: 'danger', label: 'Danger', priority: 10 },
190
+ ],
191
+ guidanceTemplate: (tiers) => `tiers: ${tiers.map((t) => t.id).join(',')}`,
192
+ labelInDescription: true,
193
+ }
194
+
195
+ it('assignTiers sets the tier on each mapped tool', () => {
196
+ const r = new ToolRegistry({ tierConfig })
197
+ r.register(makeTool('a'))
198
+ r.assignTiers({ a: 'safe' })
199
+ expect(r.get('a')?.tier).toBe('safe')
200
+ })
201
+
202
+ it('assignTiers throws when the tier is unknown', () => {
203
+ const r = new ToolRegistry({ tierConfig })
204
+ r.register(makeTool('a'))
205
+ expect(() => r.assignTiers({ a: 'bogus' })).toThrow(/not defined/)
206
+ })
207
+
208
+ it('toTierGuidance returns null without a template', () => {
209
+ const r = new ToolRegistry()
210
+ expect(r.toTierGuidance()).toBeNull()
211
+ })
212
+
213
+ it('toTierGuidance renders via the template', () => {
214
+ const r = new ToolRegistry({ tierConfig })
215
+ expect(r.toTierGuidance()).toBe('tiers: safe,danger')
216
+ })
217
+ })
218
+
219
+ describe('ToolRegistry — toPromptSection + toLLMTools', () => {
220
+ it('toPromptSection returns empty when the registry is empty', () => {
221
+ const r = new ToolRegistry()
222
+ expect(r.toPromptSection()).toBe('')
223
+ })
224
+
225
+ it('toPromptSection renders available + deferred fragments', () => {
226
+ const r = new ToolRegistry()
227
+ r.register(makeTool('a'))
228
+ r.register([makeTool('b')], 'deferred')
229
+ const s = r.toPromptSection()
230
+ expect(s).toContain('<available_tools>')
231
+ expect(s).toContain('- a: a tool')
232
+ expect(s).toContain('<deferred_tools>')
233
+ expect(s).toContain('- b')
234
+ })
235
+
236
+ it('toLLMTools: converts active + suspended tools', () => {
237
+ const r = new ToolRegistry()
238
+ r.register(makeTool('a'))
239
+ r.register([makeTool('b')], 'deferred')
240
+ r.register([makeTool('c')], 'suspended')
241
+
242
+ const schemas = r.toLLMTools()
243
+ const names = schemas.map((t) => t.function.name).sort()
244
+ expect(names).toEqual(['a', 'c'])
245
+ })
246
+
247
+ it('toLLMTools: prefixes description with tier label when labelInDescription is true', () => {
248
+ const tierConfig: ToolTierConfig = {
249
+ tiers: [{ id: 'safe', label: 'Safe', priority: 1 }],
250
+ labelInDescription: true,
251
+ }
252
+ const r = new ToolRegistry({ tierConfig })
253
+ r.register(makeTool('a', { tier: 'safe' }))
254
+ const schemas = r.toLLMTools()
255
+ expect(schemas[0]?.function.description).toBe('[Safe] a tool')
256
+ })
257
+ })
258
+
259
+ describe('ToolRegistry — execute', () => {
260
+ it('returns error when tool is not active (e.g. deferred)', async () => {
261
+ const r = new ToolRegistry()
262
+ r.register([makeTool('a')], 'deferred')
263
+ const result = await r.execute('a', {}, makeContext())
264
+ expect(result.success).toBe(false)
265
+ expect(result.error).toMatch(/deferred and cannot be executed/)
266
+ })
267
+
268
+ it('blocks non-read-only tools in plan mode', async () => {
269
+ const r = new ToolRegistry()
270
+ r.register(makeTool('write', { isReadOnly: () => false }))
271
+ const result = await r.execute(
272
+ 'write',
273
+ {},
274
+ makeContext({
275
+ permissionContext: { mode: 'plan', runId: 'run_1', workingDirectory: '/tmp' },
276
+ }),
277
+ )
278
+ expect(result.success).toBe(false)
279
+ expect(result.permissionDenied).toBe(true)
280
+ })
281
+
282
+ it('allows read-only tools in plan mode', async () => {
283
+ const r = new ToolRegistry()
284
+ const execute = vi.fn(async () => ({ success: true, output: 'ok' }))
285
+ r.register(makeTool('read', { isReadOnly: () => true, execute }))
286
+ const result = await r.execute(
287
+ 'read',
288
+ {},
289
+ makeContext({
290
+ permissionContext: { mode: 'plan', runId: 'run_1', workingDirectory: '/tmp' },
291
+ }),
292
+ )
293
+ expect(result.success).toBe(true)
294
+ expect(execute).toHaveBeenCalled()
295
+ })
296
+
297
+ it('returns error when input fails zod validation', async () => {
298
+ const r = new ToolRegistry()
299
+ r.register(
300
+ makeTool('strict', {
301
+ inputSchema: z.object({ required: z.string() }),
302
+ }),
303
+ )
304
+ const result = await r.execute('strict', { required: 123 }, makeContext())
305
+ expect(result.success).toBe(false)
306
+ expect(result.error).toMatch(/Invalid input/)
307
+ })
308
+
309
+ it('wraps thrown errors in the execute function', async () => {
310
+ const r = new ToolRegistry()
311
+ r.register(
312
+ makeTool('bad', {
313
+ async execute() {
314
+ throw new Error('boom')
315
+ },
316
+ }),
317
+ )
318
+ const result = await r.execute('bad', {}, makeContext())
319
+ expect(result.success).toBe(false)
320
+ expect(result.error).toMatch(/execution failed: boom/)
321
+ })
322
+
323
+ it('returns the tool result on happy path', async () => {
324
+ const r = new ToolRegistry()
325
+ r.register(makeTool('good'))
326
+ const result = await r.execute('good', {}, makeContext())
327
+ expect(result.success).toBe(true)
328
+ expect(result.output).toBe('good-ran')
329
+ })
330
+ })
@@ -13,15 +13,6 @@ export type LimitCheckResult =
13
13
  | { type: 'warning'; reason: StopReason }
14
14
  | { type: 'hard_stop'; reason: StopReason }
15
15
 
16
- export function checkLimits(
17
- config: LimitCheckerConfig,
18
- state: LimitCheckerState,
19
- ): StopReason | null {
20
- const result = checkLimitsDetailed(config, state)
21
- if (result.type === 'ok') return null
22
- return result.reason
23
- }
24
-
25
16
  export function checkLimitsDetailed(
26
17
  config: LimitCheckerConfig,
27
18
  state: LimitCheckerState,
@@ -1,4 +1,4 @@
1
- import type { AgentRun, RunEvent, RunEventListener } from '../types/run/index.js'
1
+ import type { Run, RunEvent, RunEventListener } from '../types/run/index.js'
2
2
  import { formatCost } from '../utils/cost.js'
3
3
  import { type Logger, getRootLogger } from '../utils/logger.js'
4
4
 
@@ -13,7 +13,7 @@ function formatDuration(ms: number): string {
13
13
 
14
14
  export interface RunReporter {
15
15
  listener: RunEventListener
16
- summary(run: AgentRun): void
16
+ summary(run: Run): void
17
17
  }
18
18
 
19
19
  export function createRunReporter(parentLogger?: Logger): RunReporter {
@@ -229,7 +229,7 @@ export function createRunReporter(parentLogger?: Logger): RunReporter {
229
229
  }
230
230
  }
231
231
 
232
- function summary(run: AgentRun): void {
232
+ function summary(run: Run): void {
233
233
  const elapsed = (run.endedAt ?? Date.now()) - run.startedAt
234
234
  const { tokenUsage, costInfo, currentIteration, stopReason } = run
235
235
 
@@ -0,0 +1,169 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import type { RunDiskStore } from '../../../store/run/disk.js'
3
+ import type { CheckpointId, IterationCheckpoint } from '../../../types/hitl/index.js'
4
+ import type { EmergencySaveId, RunId } from '../../../types/ids/index.js'
5
+ import type { EmergencySaveData } from '../../../types/run/emergency.js'
6
+ import { CheckpointManager, projectEmergencyToCheckpoint } from '../checkpoint.js'
7
+
8
+ function makeCheckpoint(overrides: Partial<IterationCheckpoint> = {}): IterationCheckpoint {
9
+ return {
10
+ id: 'cp_test_a' as CheckpointId,
11
+ runId: 'run_test' as RunId,
12
+ iteration: 1,
13
+ messages: [{ role: 'user', content: 'hello' }],
14
+ tokenUsage: {
15
+ promptTokens: 0,
16
+ completionTokens: 0,
17
+ totalTokens: 0,
18
+ cachedTokens: 0,
19
+ cacheWriteTokens: 0,
20
+ },
21
+ costInfo: {
22
+ inputCostPer1M: 0,
23
+ outputCostPer1M: 0,
24
+ totalCost: 0,
25
+ cacheDiscount: 0,
26
+ },
27
+ guardState: { iterationCount: 1, elapsedMs: 100 },
28
+ createdAt: Date.now(),
29
+ ...overrides,
30
+ }
31
+ }
32
+
33
+ function makeStoreStub(checkpoints: IterationCheckpoint[]): RunDiskStore {
34
+ return {
35
+ listCheckpoints: async () => checkpoints,
36
+ } as unknown as RunDiskStore
37
+ }
38
+
39
+ describe('CheckpointManager.listEntries', () => {
40
+ it('projects stored checkpoints to CheckpointListEntry', async () => {
41
+ const store = makeStoreStub([
42
+ makeCheckpoint({
43
+ id: 'cp_a' as CheckpointId,
44
+ iteration: 1,
45
+ createdAt: 1000,
46
+ messages: [
47
+ { role: 'user', content: 'hi' },
48
+ { role: 'assistant', content: 'hello' },
49
+ ],
50
+ }),
51
+ makeCheckpoint({
52
+ id: 'cp_b' as CheckpointId,
53
+ iteration: 2,
54
+ createdAt: 2000,
55
+ messages: [
56
+ { role: 'user', content: 'hi' },
57
+ { role: 'assistant', content: 'hello' },
58
+ { role: 'user', content: 'more' },
59
+ ],
60
+ }),
61
+ ])
62
+
63
+ const mgr = new CheckpointManager(store)
64
+ const entries = await mgr.listEntries()
65
+
66
+ expect(entries).toHaveLength(2)
67
+ expect(entries[0]).toEqual({
68
+ id: 'cp_a',
69
+ runId: 'run_test',
70
+ iteration: 1,
71
+ createdAt: 1000,
72
+ messageCount: 2,
73
+ })
74
+ expect(entries[1]).toEqual({
75
+ id: 'cp_b',
76
+ runId: 'run_test',
77
+ iteration: 2,
78
+ createdAt: 2000,
79
+ messageCount: 3,
80
+ })
81
+ })
82
+
83
+ it('returns empty array when no checkpoints exist', async () => {
84
+ const mgr = new CheckpointManager(makeStoreStub([]))
85
+ expect(await mgr.listEntries()).toEqual([])
86
+ })
87
+
88
+ it('does not include full checkpoint payload fields', async () => {
89
+ const mgr = new CheckpointManager(
90
+ makeStoreStub([
91
+ makeCheckpoint({
92
+ toolResultHashes: { call_x: 'hash' },
93
+ branchStack: [{ agentId: 'a', decision: 'd', confidence: 1, timestamp: 0 }],
94
+ }),
95
+ ]),
96
+ )
97
+ const [entry] = await mgr.listEntries()
98
+ expect(entry).not.toHaveProperty('tokenUsage')
99
+ expect(entry).not.toHaveProperty('costInfo')
100
+ expect(entry).not.toHaveProperty('toolResultHashes')
101
+ expect(entry).not.toHaveProperty('branchStack')
102
+ expect(entry).not.toHaveProperty('guardState')
103
+ expect(entry).not.toHaveProperty('messages')
104
+ })
105
+ })
106
+
107
+ function makeEmergencyDump(overrides: Partial<EmergencySaveData> = {}): EmergencySaveData {
108
+ return {
109
+ id: 'esave_dump_a' as EmergencySaveId,
110
+ runId: 'run_victim' as RunId,
111
+ messages: [
112
+ { role: 'user', content: 'before the crash' },
113
+ { role: 'assistant', content: 'working' },
114
+ ],
115
+ tokenUsage: {
116
+ promptTokens: 10,
117
+ completionTokens: 5,
118
+ totalTokens: 15,
119
+ cachedTokens: 0,
120
+ cacheWriteTokens: 0,
121
+ },
122
+ currentIteration: 7,
123
+ startedAt: 1_000,
124
+ savedAt: 2_500,
125
+ processSignal: 'SIGTERM',
126
+ ...overrides,
127
+ }
128
+ }
129
+
130
+ describe('projectEmergencyToCheckpoint', () => {
131
+ it('produces an IterationCheckpoint with all required fields', () => {
132
+ const dump = makeEmergencyDump()
133
+ const cp = projectEmergencyToCheckpoint(dump)
134
+
135
+ expect(cp.runId).toBe('run_victim')
136
+ expect(cp.iteration).toBe(7)
137
+ expect(cp.messages).toBe(dump.messages)
138
+ expect(cp.tokenUsage).toBe(dump.tokenUsage)
139
+ expect(cp.createdAt).toBe(2_500)
140
+ expect(cp.guardState).toEqual({ iterationCount: 7, elapsedMs: 1_500 })
141
+ expect(cp.costInfo).toEqual({
142
+ inputCostPer1M: 0,
143
+ outputCostPer1M: 0,
144
+ totalCost: 0,
145
+ cacheDiscount: 0,
146
+ })
147
+ })
148
+
149
+ it('derives a deterministic CheckpointId from the emergency save id', () => {
150
+ const dump = makeEmergencyDump({ id: 'esave_xyz123' as EmergencySaveId })
151
+ const cp1 = projectEmergencyToCheckpoint(dump)
152
+ const cp2 = projectEmergencyToCheckpoint(dump)
153
+
154
+ expect(cp1.id).toBe('cp_emergency_xyz123')
155
+ expect(cp1.id).toBe(cp2.id)
156
+ })
157
+
158
+ it('clamps guardState.elapsedMs to 0 when savedAt precedes startedAt', () => {
159
+ const cp = projectEmergencyToCheckpoint(makeEmergencyDump({ startedAt: 2_000, savedAt: 1_000 }))
160
+ expect(cp.guardState.elapsedMs).toBe(0)
161
+ })
162
+
163
+ it('leaves optional fields (toolResultHashes, branchStack, activeNode) unset', () => {
164
+ const cp = projectEmergencyToCheckpoint(makeEmergencyDump())
165
+ expect(cp.toolResultHashes).toBeUndefined()
166
+ expect(cp.branchStack).toBeUndefined()
167
+ expect(cp.activeNode).toBeUndefined()
168
+ })
169
+ })
@@ -8,9 +8,52 @@ import type {
8
8
  IterationCheckpoint,
9
9
  } from '../../types/hitl/index.js'
10
10
  import type { AssistantMessage } from '../../types/message/index.js'
11
+ import type { EmergencySaveData } from '../../types/run/emergency.js'
12
+ import type { CheckpointListEntry } from '../../types/run/replay.js'
13
+ import { ZERO_COST } from '../../utils/cost.js'
11
14
  import { buildToolResultHashes } from '../../utils/hash.js'
12
15
  import { generateCheckpointId } from '../../utils/id.js'
13
16
 
17
+ function toCheckpointListEntry(cp: IterationCheckpoint): CheckpointListEntry {
18
+ return {
19
+ id: cp.id,
20
+ runId: cp.runId,
21
+ iteration: cp.iteration,
22
+ createdAt: cp.createdAt,
23
+ messageCount: cp.messages.length,
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Project an {@link EmergencySaveData} dump to an {@link IterationCheckpoint}
29
+ * shape so `replay({ fromCheckpoint: 'emergency' })` can consume it through
30
+ * the same restore path as any other checkpoint.
31
+ *
32
+ * The projection is lossy: `costInfo`, `guardState.elapsedMs`,
33
+ * `toolResultHashes`, `branchStack`, and `activeNode` are not captured at
34
+ * emergency-save time and default to zero/empty values. The synthetic
35
+ * checkpoint id is derived deterministically from the emergency save id so
36
+ * re-projecting the same dump yields the same {@link CheckpointId}.
37
+ *
38
+ * See ses_005-deterministic-replay design §2 + §5.2.
39
+ */
40
+ export function projectEmergencyToCheckpoint(dump: EmergencySaveData): IterationCheckpoint {
41
+ const emergencySuffix = dump.id.replace(/^esave_/, '')
42
+ return {
43
+ id: `cp_emergency_${emergencySuffix}` as CheckpointId,
44
+ runId: dump.runId,
45
+ iteration: dump.currentIteration,
46
+ messages: dump.messages,
47
+ tokenUsage: dump.tokenUsage,
48
+ costInfo: { ...ZERO_COST },
49
+ guardState: {
50
+ iterationCount: dump.currentIteration,
51
+ elapsedMs: Math.max(0, dump.savedAt - dump.startedAt),
52
+ },
53
+ createdAt: dump.savedAt,
54
+ }
55
+ }
56
+
14
57
  export class CheckpointManager {
15
58
  private store: RunDiskStore
16
59
 
@@ -60,6 +103,17 @@ export class CheckpointManager {
60
103
  return this.store.listCheckpoints()
61
104
  }
62
105
 
106
+ /**
107
+ * Listing projection used by the public `listCheckpoints` API. Returns
108
+ * only the fields a consumer needs to pick a fork point for
109
+ * {@link import('./replay/prepare.js').prepareReplayState} — not the
110
+ * full checkpoint payload. See ses_005-deterministic-replay design §3.1.
111
+ */
112
+ async listEntries(): Promise<CheckpointListEntry[]> {
113
+ const checkpoints = await this.store.listCheckpoints()
114
+ return checkpoints.map(toCheckpointListEntry)
115
+ }
116
+
63
117
  async prune(keepLast: number): Promise<void> {
64
118
  const all = await this.list()
65
119
  if (all.length <= keepLast) return
@@ -99,11 +99,6 @@ export interface RunContext {
99
99
  */
100
100
  const migrationPromises = new Map<string, Promise<FilesystemMigrationResult>>()
101
101
 
102
- /** Testing hook — clears the first-call guard cache. */
103
- export function __resetMigrationGuardForTests(): void {
104
- migrationPromises.clear()
105
- }
106
-
107
102
  export class RunContextFactory {
108
103
  /**
109
104
  * Run the boot-time filesystem migration for `rootDir` at most once per
@@ -27,7 +27,7 @@ import { type Message, createSystemMessage } from '../../types/message/index.js'
27
27
  import type { AgentPersona } from '../../types/persona/index.js'
28
28
  import type { LLMProvider } from '../../types/provider/index.js'
29
29
  import type { TaskRouterConfig } from '../../types/router/index.js'
30
- import type { AgentRun, AgentRunConfig, RunEvent, RunEventListener } from '../../types/run/index.js'
30
+ import type { AgentRunConfig, Run, RunEvent, RunEventListener } from '../../types/run/index.js'
31
31
  import type { Sandbox, SandboxProvider } from '../../types/sandbox/index.js'
32
32
  import type { ProjectId, ThreadId } from '../../types/session/ids.js'
33
33
  import type { Skill } from '../../types/skills/index.js'
@@ -136,7 +136,7 @@ export interface QueryParams {
136
136
  invocationState?: InvocationState
137
137
  }
138
138
 
139
- export async function* query(params: QueryParams): AsyncGenerator<RunEvent, AgentRun> {
139
+ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Run> {
140
140
  // Boot-time filesystem migration (session-hierarchy.md §13.4.1). First
141
141
  // call per process per root actually runs; subsequent calls short-circuit
142
142
  // via the in-memory guard in `context.ts`. Kept here rather than inside
@@ -335,7 +335,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Agen
335
335
 
336
336
  const tracer = getTracer()
337
337
 
338
- return yield* (async function* (): AsyncGenerator<RunEvent, AgentRun> {
338
+ return yield* (async function* (): AsyncGenerator<RunEvent, Run> {
339
339
  const rootSpan = tracer.startSpan(agentRunSpanName(params.agentName))
340
340
  rootSpan.setAttributes({
341
341
  [NAMZU.RUN_ID]: ctx.runMgr.id,
@@ -515,7 +515,7 @@ export async function* query(params: QueryParams): AsyncGenerator<RunEvent, Agen
515
515
  export async function drainQuery(
516
516
  params: Omit<QueryParams, 'resumeHandler'> & { resumeHandler?: ResumeHandler },
517
517
  listener?: RunEventListener,
518
- ): Promise<AgentRun> {
518
+ ): Promise<Run> {
519
519
  const fullParams: QueryParams = {
520
520
  ...params,
521
521
  resumeHandler: params.resumeHandler ?? autoApproveHandler,