@namzu/sdk 0.1.8 → 0.3.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 (626) hide show
  1. package/CHANGELOG.md +69 -2
  2. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  3. package/dist/agents/ReactiveAgent.js +5 -2
  4. package/dist/agents/ReactiveAgent.js.map +1 -1
  5. package/dist/agents/RouterAgent.d.ts.map +1 -1
  6. package/dist/agents/RouterAgent.js +3 -0
  7. package/dist/agents/RouterAgent.js.map +1 -1
  8. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  9. package/dist/agents/SupervisorAgent.js +21 -5
  10. package/dist/agents/SupervisorAgent.js.map +1 -1
  11. package/dist/bridge/a2a/index.d.ts +1 -1
  12. package/dist/bridge/a2a/index.d.ts.map +1 -1
  13. package/dist/bridge/a2a/index.js +1 -1
  14. package/dist/bridge/a2a/index.js.map +1 -1
  15. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  16. package/dist/bridge/a2a/mapper.js +6 -0
  17. package/dist/bridge/a2a/mapper.js.map +1 -1
  18. package/dist/bridge/a2a/message.d.ts +0 -2
  19. package/dist/bridge/a2a/message.d.ts.map +1 -1
  20. package/dist/bridge/a2a/message.js +0 -26
  21. package/dist/bridge/a2a/message.js.map +1 -1
  22. package/dist/bridge/a2a/task.d.ts +5 -4
  23. package/dist/bridge/a2a/task.d.ts.map +1 -1
  24. package/dist/bridge/a2a/task.js +4 -4
  25. package/dist/bridge/a2a/task.js.map +1 -1
  26. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  27. package/dist/bridge/sse/mapper.js +6 -0
  28. package/dist/bridge/sse/mapper.js.map +1 -1
  29. package/dist/constants/a2a/index.d.ts +2 -2
  30. package/dist/constants/a2a/index.d.ts.map +1 -1
  31. package/dist/constants/a2a/index.js.map +1 -1
  32. package/dist/contracts/api.d.ts +14 -27
  33. package/dist/contracts/api.d.ts.map +1 -1
  34. package/dist/contracts/ids.d.ts +1 -1
  35. package/dist/contracts/ids.d.ts.map +1 -1
  36. package/dist/contracts/index.d.ts +3 -3
  37. package/dist/contracts/index.d.ts.map +1 -1
  38. package/dist/contracts/index.js +1 -1
  39. package/dist/contracts/index.js.map +1 -1
  40. package/dist/contracts/schemas.d.ts +1 -31
  41. package/dist/contracts/schemas.d.ts.map +1 -1
  42. package/dist/contracts/schemas.js +1 -7
  43. package/dist/contracts/schemas.js.map +1 -1
  44. package/dist/gateway/local.d.ts.map +1 -1
  45. package/dist/gateway/local.js +6 -0
  46. package/dist/gateway/local.js.map +1 -1
  47. package/dist/index.d.ts +6 -3
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +6 -3
  50. package/dist/index.js.map +1 -1
  51. package/dist/manager/agent/__tests__/lifecycle.test.d.ts +2 -0
  52. package/dist/manager/agent/__tests__/lifecycle.test.d.ts.map +1 -0
  53. package/dist/manager/agent/__tests__/lifecycle.test.js +316 -0
  54. package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -0
  55. package/dist/manager/agent/lifecycle.d.ts +67 -3
  56. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  57. package/dist/manager/agent/lifecycle.js +375 -14
  58. package/dist/manager/agent/lifecycle.js.map +1 -1
  59. package/dist/manager/index.d.ts +2 -0
  60. package/dist/manager/index.d.ts.map +1 -1
  61. package/dist/manager/index.js +1 -0
  62. package/dist/manager/index.js.map +1 -1
  63. package/dist/manager/run/persistence.d.ts +10 -1
  64. package/dist/manager/run/persistence.d.ts.map +1 -1
  65. package/dist/manager/run/persistence.js +20 -0
  66. package/dist/manager/run/persistence.js.map +1 -1
  67. package/dist/manager/thread/__tests__/lifecycle.test.d.ts +2 -0
  68. package/dist/manager/thread/__tests__/lifecycle.test.d.ts.map +1 -0
  69. package/dist/manager/thread/__tests__/lifecycle.test.js +216 -0
  70. package/dist/manager/thread/__tests__/lifecycle.test.js.map +1 -0
  71. package/dist/manager/thread/lifecycle.d.ts +105 -0
  72. package/dist/manager/thread/lifecycle.d.ts.map +1 -0
  73. package/dist/manager/thread/lifecycle.js +186 -0
  74. package/dist/manager/thread/lifecycle.js.map +1 -0
  75. package/dist/rag/retriever.js +2 -2
  76. package/dist/run/reporter.d.ts.map +1 -1
  77. package/dist/run/reporter.js +25 -0
  78. package/dist/run/reporter.js.map +1 -1
  79. package/dist/runtime/query/__tests__/context.test.d.ts +2 -0
  80. package/dist/runtime/query/__tests__/context.test.d.ts.map +1 -0
  81. package/dist/runtime/query/__tests__/context.test.js +85 -0
  82. package/dist/runtime/query/__tests__/context.test.js.map +1 -0
  83. package/dist/runtime/query/context-cache.d.ts +3 -3
  84. package/dist/runtime/query/context-cache.d.ts.map +1 -1
  85. package/dist/runtime/query/context-cache.js +2 -2
  86. package/dist/runtime/query/context-cache.js.map +1 -1
  87. package/dist/runtime/query/context.d.ts +45 -1
  88. package/dist/runtime/query/context.d.ts.map +1 -1
  89. package/dist/runtime/query/context.js +50 -8
  90. package/dist/runtime/query/context.js.map +1 -1
  91. package/dist/runtime/query/events.d.ts.map +1 -1
  92. package/dist/runtime/query/events.js +8 -0
  93. package/dist/runtime/query/events.js.map +1 -1
  94. package/dist/runtime/query/index.d.ts +22 -1
  95. package/dist/runtime/query/index.d.ts.map +1 -1
  96. package/dist/runtime/query/index.js +11 -0
  97. package/dist/runtime/query/index.js.map +1 -1
  98. package/dist/session/__tests__/integration/_fixtures.d.ts +122 -0
  99. package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -0
  100. package/dist/session/__tests__/integration/_fixtures.js +215 -0
  101. package/dist/session/__tests__/integration/_fixtures.js.map +1 -0
  102. package/dist/session/__tests__/integration/archive-gate.test.d.ts +15 -0
  103. package/dist/session/__tests__/integration/archive-gate.test.d.ts.map +1 -0
  104. package/dist/session/__tests__/integration/archive-gate.test.js +214 -0
  105. package/dist/session/__tests__/integration/archive-gate.test.js.map +1 -0
  106. package/dist/session/__tests__/integration/capacity-caps.test.d.ts +13 -0
  107. package/dist/session/__tests__/integration/capacity-caps.test.d.ts.map +1 -0
  108. package/dist/session/__tests__/integration/capacity-caps.test.js +123 -0
  109. package/dist/session/__tests__/integration/capacity-caps.test.js.map +1 -0
  110. package/dist/session/__tests__/integration/e2e-spawn.test.d.ts +18 -0
  111. package/dist/session/__tests__/integration/e2e-spawn.test.d.ts.map +1 -0
  112. package/dist/session/__tests__/integration/e2e-spawn.test.js +238 -0
  113. package/dist/session/__tests__/integration/e2e-spawn.test.js.map +1 -0
  114. package/dist/session/__tests__/integration/event-stream-ordering.test.d.ts +15 -0
  115. package/dist/session/__tests__/integration/event-stream-ordering.test.d.ts.map +1 -0
  116. package/dist/session/__tests__/integration/event-stream-ordering.test.js +330 -0
  117. package/dist/session/__tests__/integration/event-stream-ordering.test.js.map +1 -0
  118. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.d.ts +12 -0
  119. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.d.ts.map +1 -0
  120. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js +182 -0
  121. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js.map +1 -0
  122. package/dist/session/__tests__/integration/handoff-illegal-transition.test.d.ts +18 -0
  123. package/dist/session/__tests__/integration/handoff-illegal-transition.test.d.ts.map +1 -0
  124. package/dist/session/__tests__/integration/handoff-illegal-transition.test.js +156 -0
  125. package/dist/session/__tests__/integration/handoff-illegal-transition.test.js.map +1 -0
  126. package/dist/session/__tests__/integration/handoff-single-e2e.test.d.ts +15 -0
  127. package/dist/session/__tests__/integration/handoff-single-e2e.test.d.ts.map +1 -0
  128. package/dist/session/__tests__/integration/handoff-single-e2e.test.js +179 -0
  129. package/dist/session/__tests__/integration/handoff-single-e2e.test.js.map +1 -0
  130. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.d.ts +12 -0
  131. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.d.ts.map +1 -0
  132. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js +158 -0
  133. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js.map +1 -0
  134. package/dist/session/__tests__/integration/migration-filesystem.test.d.ts +11 -0
  135. package/dist/session/__tests__/integration/migration-filesystem.test.d.ts.map +1 -0
  136. package/dist/session/__tests__/integration/migration-filesystem.test.js +140 -0
  137. package/dist/session/__tests__/integration/migration-filesystem.test.js.map +1 -0
  138. package/dist/session/__tests__/integration/migration-id-prefix.test.d.ts +13 -0
  139. package/dist/session/__tests__/integration/migration-id-prefix.test.d.ts.map +1 -0
  140. package/dist/session/__tests__/integration/migration-id-prefix.test.js +84 -0
  141. package/dist/session/__tests__/integration/migration-id-prefix.test.js.map +1 -0
  142. package/dist/session/__tests__/integration/prev-artifact-dag.test.d.ts +14 -0
  143. package/dist/session/__tests__/integration/prev-artifact-dag.test.d.ts.map +1 -0
  144. package/dist/session/__tests__/integration/prev-artifact-dag.test.js +242 -0
  145. package/dist/session/__tests__/integration/prev-artifact-dag.test.js.map +1 -0
  146. package/dist/session/__tests__/integration/retention-archive.test.d.ts +12 -0
  147. package/dist/session/__tests__/integration/retention-archive.test.d.ts.map +1 -0
  148. package/dist/session/__tests__/integration/retention-archive.test.js +187 -0
  149. package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -0
  150. package/dist/session/__tests__/integration/spawn-rollback.test.d.ts +26 -0
  151. package/dist/session/__tests__/integration/spawn-rollback.test.d.ts.map +1 -0
  152. package/dist/session/__tests__/integration/spawn-rollback.test.js +236 -0
  153. package/dist/session/__tests__/integration/spawn-rollback.test.js.map +1 -0
  154. package/dist/session/__tests__/integration/summary-materialization-e2e.test.d.ts +18 -0
  155. package/dist/session/__tests__/integration/summary-materialization-e2e.test.d.ts.map +1 -0
  156. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js +201 -0
  157. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js.map +1 -0
  158. package/dist/session/__tests__/integration/tenant-isolation.test.d.ts +14 -0
  159. package/dist/session/__tests__/integration/tenant-isolation.test.d.ts.map +1 -0
  160. package/dist/session/__tests__/integration/tenant-isolation.test.js +189 -0
  161. package/dist/session/__tests__/integration/tenant-isolation.test.js.map +1 -0
  162. package/dist/session/errors.d.ts +139 -0
  163. package/dist/session/errors.d.ts.map +1 -0
  164. package/dist/session/errors.js +107 -0
  165. package/dist/session/errors.js.map +1 -0
  166. package/dist/session/events/index.d.ts +4 -0
  167. package/dist/session/events/index.d.ts.map +1 -0
  168. package/dist/session/events/index.js +8 -0
  169. package/dist/session/events/index.js.map +1 -0
  170. package/dist/session/events/schema-version.d.ts +13 -0
  171. package/dist/session/events/schema-version.d.ts.map +1 -0
  172. package/dist/session/events/schema-version.js +12 -0
  173. package/dist/session/events/schema-version.js.map +1 -0
  174. package/dist/session/events/types.d.ts +64 -0
  175. package/dist/session/events/types.d.ts.map +1 -0
  176. package/dist/session/events/types.js +2 -0
  177. package/dist/session/events/types.js.map +1 -0
  178. package/dist/session/handoff/__tests__/broadcast.test.d.ts +2 -0
  179. package/dist/session/handoff/__tests__/broadcast.test.d.ts.map +1 -0
  180. package/dist/session/handoff/__tests__/broadcast.test.js +261 -0
  181. package/dist/session/handoff/__tests__/broadcast.test.js.map +1 -0
  182. package/dist/session/handoff/__tests__/capacity.test.d.ts +2 -0
  183. package/dist/session/handoff/__tests__/capacity.test.d.ts.map +1 -0
  184. package/dist/session/handoff/__tests__/capacity.test.js +103 -0
  185. package/dist/session/handoff/__tests__/capacity.test.js.map +1 -0
  186. package/dist/session/handoff/__tests__/single.test.d.ts +2 -0
  187. package/dist/session/handoff/__tests__/single.test.d.ts.map +1 -0
  188. package/dist/session/handoff/__tests__/single.test.js +239 -0
  189. package/dist/session/handoff/__tests__/single.test.js.map +1 -0
  190. package/dist/session/handoff/assignment.d.ts +71 -0
  191. package/dist/session/handoff/assignment.d.ts.map +1 -0
  192. package/dist/session/handoff/assignment.js +11 -0
  193. package/dist/session/handoff/assignment.js.map +1 -0
  194. package/dist/session/handoff/broadcast.d.ts +54 -0
  195. package/dist/session/handoff/broadcast.d.ts.map +1 -0
  196. package/dist/session/handoff/broadcast.js +311 -0
  197. package/dist/session/handoff/broadcast.js.map +1 -0
  198. package/dist/session/handoff/capacity.d.ts +66 -0
  199. package/dist/session/handoff/capacity.d.ts.map +1 -0
  200. package/dist/session/handoff/capacity.js +60 -0
  201. package/dist/session/handoff/capacity.js.map +1 -0
  202. package/dist/session/handoff/events.d.ts +66 -0
  203. package/dist/session/handoff/events.d.ts.map +1 -0
  204. package/dist/session/handoff/events.js +13 -0
  205. package/dist/session/handoff/events.js.map +1 -0
  206. package/dist/session/handoff/index.d.ts +12 -0
  207. package/dist/session/handoff/index.d.ts.map +1 -0
  208. package/dist/session/handoff/index.js +9 -0
  209. package/dist/session/handoff/index.js.map +1 -0
  210. package/dist/session/handoff/single.d.ts +69 -0
  211. package/dist/session/handoff/single.d.ts.map +1 -0
  212. package/dist/session/handoff/single.js +229 -0
  213. package/dist/session/handoff/single.js.map +1 -0
  214. package/dist/session/handoff/version.d.ts +52 -0
  215. package/dist/session/handoff/version.d.ts.map +1 -0
  216. package/dist/session/handoff/version.js +36 -0
  217. package/dist/session/handoff/version.js.map +1 -0
  218. package/dist/session/hierarchy/__tests__/session.test.d.ts +2 -0
  219. package/dist/session/hierarchy/__tests__/session.test.d.ts.map +1 -0
  220. package/dist/session/hierarchy/__tests__/session.test.js +69 -0
  221. package/dist/session/hierarchy/__tests__/session.test.js.map +1 -0
  222. package/dist/session/hierarchy/actor.d.ts +26 -0
  223. package/dist/session/hierarchy/actor.d.ts.map +1 -0
  224. package/dist/session/hierarchy/actor.js +2 -0
  225. package/dist/session/hierarchy/actor.js.map +1 -0
  226. package/dist/session/hierarchy/index.d.ts +9 -0
  227. package/dist/session/hierarchy/index.d.ts.map +1 -0
  228. package/dist/session/hierarchy/index.js +4 -0
  229. package/dist/session/hierarchy/index.js.map +1 -0
  230. package/dist/session/hierarchy/lineage.d.ts +15 -0
  231. package/dist/session/hierarchy/lineage.d.ts.map +1 -0
  232. package/dist/session/hierarchy/lineage.js +2 -0
  233. package/dist/session/hierarchy/lineage.js.map +1 -0
  234. package/dist/session/hierarchy/project.d.ts +40 -0
  235. package/dist/session/hierarchy/project.d.ts.map +1 -0
  236. package/dist/session/hierarchy/project.js +2 -0
  237. package/dist/session/hierarchy/project.js.map +1 -0
  238. package/dist/session/hierarchy/session.d.ts +71 -0
  239. package/dist/session/hierarchy/session.d.ts.map +1 -0
  240. package/dist/session/hierarchy/session.js +51 -0
  241. package/dist/session/hierarchy/session.js.map +1 -0
  242. package/dist/session/hierarchy/sub-session.d.ts +76 -0
  243. package/dist/session/hierarchy/sub-session.d.ts.map +1 -0
  244. package/dist/session/hierarchy/sub-session.js +2 -0
  245. package/dist/session/hierarchy/sub-session.js.map +1 -0
  246. package/dist/session/hierarchy/tenant.d.ts +13 -0
  247. package/dist/session/hierarchy/tenant.d.ts.map +1 -0
  248. package/dist/session/hierarchy/tenant.js +2 -0
  249. package/dist/session/hierarchy/tenant.js.map +1 -0
  250. package/dist/session/hierarchy/thread.d.ts +54 -0
  251. package/dist/session/hierarchy/thread.d.ts.map +1 -0
  252. package/dist/session/hierarchy/thread.js +2 -0
  253. package/dist/session/hierarchy/thread.js.map +1 -0
  254. package/dist/session/index.d.ts +10 -0
  255. package/dist/session/index.d.ts.map +1 -0
  256. package/dist/session/index.js +15 -0
  257. package/dist/session/index.js.map +1 -0
  258. package/dist/session/intervention/__tests__/prev-artifact.test.d.ts +2 -0
  259. package/dist/session/intervention/__tests__/prev-artifact.test.d.ts.map +1 -0
  260. package/dist/session/intervention/__tests__/prev-artifact.test.js +179 -0
  261. package/dist/session/intervention/__tests__/prev-artifact.test.js.map +1 -0
  262. package/dist/session/intervention/index.d.ts +3 -0
  263. package/dist/session/intervention/index.d.ts.map +1 -0
  264. package/dist/session/intervention/index.js +8 -0
  265. package/dist/session/intervention/index.js.map +1 -0
  266. package/dist/session/intervention/prev-artifact.d.ts +103 -0
  267. package/dist/session/intervention/prev-artifact.d.ts.map +1 -0
  268. package/dist/session/intervention/prev-artifact.js +112 -0
  269. package/dist/session/intervention/prev-artifact.js.map +1 -0
  270. package/dist/session/migration/__tests__/filesystem.test.d.ts +2 -0
  271. package/dist/session/migration/__tests__/filesystem.test.d.ts.map +1 -0
  272. package/dist/session/migration/__tests__/filesystem.test.js +188 -0
  273. package/dist/session/migration/__tests__/filesystem.test.js.map +1 -0
  274. package/dist/session/migration/__tests__/id-prefix.test.d.ts +2 -0
  275. package/dist/session/migration/__tests__/id-prefix.test.d.ts.map +1 -0
  276. package/dist/session/migration/__tests__/id-prefix.test.js +83 -0
  277. package/dist/session/migration/__tests__/id-prefix.test.js.map +1 -0
  278. package/dist/session/migration/__tests__/marker.test.d.ts +2 -0
  279. package/dist/session/migration/__tests__/marker.test.d.ts.map +1 -0
  280. package/dist/session/migration/__tests__/marker.test.js +75 -0
  281. package/dist/session/migration/__tests__/marker.test.js.map +1 -0
  282. package/dist/session/migration/errors.d.ts +26 -0
  283. package/dist/session/migration/errors.d.ts.map +1 -0
  284. package/dist/session/migration/errors.js +22 -0
  285. package/dist/session/migration/errors.js.map +1 -0
  286. package/dist/session/migration/filesystem.d.ts +94 -0
  287. package/dist/session/migration/filesystem.d.ts.map +1 -0
  288. package/dist/session/migration/filesystem.js +319 -0
  289. package/dist/session/migration/filesystem.js.map +1 -0
  290. package/dist/session/migration/id-prefix.d.ts +93 -0
  291. package/dist/session/migration/id-prefix.d.ts.map +1 -0
  292. package/dist/session/migration/id-prefix.js +111 -0
  293. package/dist/session/migration/id-prefix.js.map +1 -0
  294. package/dist/session/migration/index.d.ts +8 -0
  295. package/dist/session/migration/index.d.ts.map +1 -0
  296. package/dist/session/migration/index.js +8 -0
  297. package/dist/session/migration/index.js.map +1 -0
  298. package/dist/session/migration/marker.d.ts +57 -0
  299. package/dist/session/migration/marker.d.ts.map +1 -0
  300. package/dist/session/migration/marker.js +111 -0
  301. package/dist/session/migration/marker.js.map +1 -0
  302. package/dist/session/retention/__tests__/archive.test.d.ts +2 -0
  303. package/dist/session/retention/__tests__/archive.test.d.ts.map +1 -0
  304. package/dist/session/retention/__tests__/archive.test.js +253 -0
  305. package/dist/session/retention/__tests__/archive.test.js.map +1 -0
  306. package/dist/session/retention/__tests__/disk-backend.test.d.ts +2 -0
  307. package/dist/session/retention/__tests__/disk-backend.test.d.ts.map +1 -0
  308. package/dist/session/retention/__tests__/disk-backend.test.js +154 -0
  309. package/dist/session/retention/__tests__/disk-backend.test.js.map +1 -0
  310. package/dist/session/retention/archive-backend-ref.d.ts +18 -0
  311. package/dist/session/retention/archive-backend-ref.d.ts.map +1 -0
  312. package/dist/session/retention/archive-backend-ref.js +2 -0
  313. package/dist/session/retention/archive-backend-ref.js.map +1 -0
  314. package/dist/session/retention/archive.d.ts +130 -0
  315. package/dist/session/retention/archive.d.ts.map +1 -0
  316. package/dist/session/retention/archive.js +203 -0
  317. package/dist/session/retention/archive.js.map +1 -0
  318. package/dist/session/retention/backend.d.ts +101 -0
  319. package/dist/session/retention/backend.d.ts.map +1 -0
  320. package/dist/session/retention/backend.js +15 -0
  321. package/dist/session/retention/backend.js.map +1 -0
  322. package/dist/session/retention/disk-backend.d.ts +59 -0
  323. package/dist/session/retention/disk-backend.d.ts.map +1 -0
  324. package/dist/session/retention/disk-backend.js +236 -0
  325. package/dist/session/retention/disk-backend.js.map +1 -0
  326. package/dist/session/retention/index.d.ts +9 -0
  327. package/dist/session/retention/index.d.ts.map +1 -0
  328. package/dist/session/retention/index.js +6 -0
  329. package/dist/session/retention/index.js.map +1 -0
  330. package/dist/session/retention/policy.d.ts +49 -0
  331. package/dist/session/retention/policy.d.ts.map +1 -0
  332. package/dist/session/retention/policy.js +21 -0
  333. package/dist/session/retention/policy.js.map +1 -0
  334. package/dist/session/summary/__tests__/materialize.test.d.ts +2 -0
  335. package/dist/session/summary/__tests__/materialize.test.d.ts.map +1 -0
  336. package/dist/session/summary/__tests__/materialize.test.js +270 -0
  337. package/dist/session/summary/__tests__/materialize.test.js.map +1 -0
  338. package/dist/session/summary/deliverable.d.ts +74 -0
  339. package/dist/session/summary/deliverable.d.ts.map +1 -0
  340. package/dist/session/summary/deliverable.js +20 -0
  341. package/dist/session/summary/deliverable.js.map +1 -0
  342. package/dist/session/summary/index.d.ts +6 -0
  343. package/dist/session/summary/index.d.ts.map +1 -0
  344. package/dist/session/summary/index.js +9 -0
  345. package/dist/session/summary/index.js.map +1 -0
  346. package/dist/session/summary/materialize.d.ts +82 -0
  347. package/dist/session/summary/materialize.d.ts.map +1 -0
  348. package/dist/session/summary/materialize.js +117 -0
  349. package/dist/session/summary/materialize.js.map +1 -0
  350. package/dist/session/summary/ref.d.ts +91 -0
  351. package/dist/session/summary/ref.d.ts.map +1 -0
  352. package/dist/session/summary/ref.js +51 -0
  353. package/dist/session/summary/ref.js.map +1 -0
  354. package/dist/session/workspace/__tests__/git-worktree.test.d.ts +2 -0
  355. package/dist/session/workspace/__tests__/git-worktree.test.d.ts.map +1 -0
  356. package/dist/session/workspace/__tests__/git-worktree.test.js +244 -0
  357. package/dist/session/workspace/__tests__/git-worktree.test.js.map +1 -0
  358. package/dist/session/workspace/__tests__/path-builder.test.d.ts +2 -0
  359. package/dist/session/workspace/__tests__/path-builder.test.d.ts.map +1 -0
  360. package/dist/session/workspace/__tests__/path-builder.test.js +37 -0
  361. package/dist/session/workspace/__tests__/path-builder.test.js.map +1 -0
  362. package/dist/session/workspace/driver.d.ts +55 -0
  363. package/dist/session/workspace/driver.d.ts.map +1 -0
  364. package/dist/session/workspace/driver.js +12 -0
  365. package/dist/session/workspace/driver.js.map +1 -0
  366. package/dist/session/workspace/git-worktree.d.ts +65 -0
  367. package/dist/session/workspace/git-worktree.d.ts.map +1 -0
  368. package/dist/session/workspace/git-worktree.js +156 -0
  369. package/dist/session/workspace/git-worktree.js.map +1 -0
  370. package/dist/session/workspace/index.d.ts +8 -0
  371. package/dist/session/workspace/index.d.ts.map +1 -0
  372. package/dist/session/workspace/index.js +7 -0
  373. package/dist/session/workspace/index.js.map +1 -0
  374. package/dist/session/workspace/path-builder.d.ts +50 -0
  375. package/dist/session/workspace/path-builder.d.ts.map +1 -0
  376. package/dist/session/workspace/path-builder.js +50 -0
  377. package/dist/session/workspace/path-builder.js.map +1 -0
  378. package/dist/session/workspace/ref.d.ts +46 -0
  379. package/dist/session/workspace/ref.d.ts.map +1 -0
  380. package/dist/session/workspace/ref.js +11 -0
  381. package/dist/session/workspace/ref.js.map +1 -0
  382. package/dist/session/workspace/registry.d.ts +26 -0
  383. package/dist/session/workspace/registry.d.ts.map +1 -0
  384. package/dist/session/workspace/registry.js +35 -0
  385. package/dist/session/workspace/registry.js.map +1 -0
  386. package/dist/store/index.d.ts +0 -2
  387. package/dist/store/index.d.ts.map +1 -1
  388. package/dist/store/index.js +0 -1
  389. package/dist/store/index.js.map +1 -1
  390. package/dist/store/session/__tests__/disk.test.d.ts +2 -0
  391. package/dist/store/session/__tests__/disk.test.d.ts.map +1 -0
  392. package/dist/store/session/__tests__/disk.test.js +267 -0
  393. package/dist/store/session/__tests__/disk.test.js.map +1 -0
  394. package/dist/store/session/__tests__/memory.test.d.ts +2 -0
  395. package/dist/store/session/__tests__/memory.test.d.ts.map +1 -0
  396. package/dist/store/session/__tests__/memory.test.js +258 -0
  397. package/dist/store/session/__tests__/memory.test.js.map +1 -0
  398. package/dist/store/session/disk.d.ts +86 -0
  399. package/dist/store/session/disk.d.ts.map +1 -0
  400. package/dist/store/session/disk.js +818 -0
  401. package/dist/store/session/disk.js.map +1 -0
  402. package/dist/store/session/index.d.ts +7 -0
  403. package/dist/store/session/index.d.ts.map +1 -0
  404. package/dist/store/session/index.js +10 -0
  405. package/dist/store/session/index.js.map +1 -0
  406. package/dist/store/session/linkage.d.ts +38 -0
  407. package/dist/store/session/linkage.d.ts.map +1 -0
  408. package/dist/store/session/linkage.js +64 -0
  409. package/dist/store/session/linkage.js.map +1 -0
  410. package/dist/store/session/memory.d.ts +49 -0
  411. package/dist/store/session/memory.d.ts.map +1 -0
  412. package/dist/store/session/memory.js +335 -0
  413. package/dist/store/session/memory.js.map +1 -0
  414. package/dist/store/session/messages.d.ts +20 -0
  415. package/dist/store/session/messages.d.ts.map +1 -0
  416. package/dist/store/session/messages.js +12 -0
  417. package/dist/store/session/messages.js.map +1 -0
  418. package/dist/store/thread/disk.d.ts +41 -0
  419. package/dist/store/thread/disk.d.ts.map +1 -0
  420. package/dist/store/thread/disk.js +229 -0
  421. package/dist/store/thread/disk.js.map +1 -0
  422. package/dist/store/thread/index.d.ts +4 -0
  423. package/dist/store/thread/index.d.ts.map +1 -0
  424. package/dist/store/thread/index.js +6 -0
  425. package/dist/store/thread/index.js.map +1 -0
  426. package/dist/store/thread/memory.d.ts +23 -0
  427. package/dist/store/thread/memory.d.ts.map +1 -0
  428. package/dist/store/thread/memory.js +90 -0
  429. package/dist/store/thread/memory.js.map +1 -0
  430. package/dist/tools/builtins/__tests__/structuredOutput.example.d.ts +1 -1
  431. package/dist/types/agent/base.d.ts +24 -1
  432. package/dist/types/agent/base.d.ts.map +1 -1
  433. package/dist/types/agent/factory.d.ts +8 -2
  434. package/dist/types/agent/factory.d.ts.map +1 -1
  435. package/dist/types/agent/task.d.ts +57 -2
  436. package/dist/types/agent/task.d.ts.map +1 -1
  437. package/dist/types/agent/task.js.map +1 -1
  438. package/dist/types/ids/index.d.ts +22 -3
  439. package/dist/types/ids/index.d.ts.map +1 -1
  440. package/dist/types/ids/index.js +8 -1
  441. package/dist/types/ids/index.js.map +1 -1
  442. package/dist/types/invocation/__tests__/state.test.js +36 -29
  443. package/dist/types/invocation/__tests__/state.test.js.map +1 -1
  444. package/dist/types/invocation/index.d.ts +20 -4
  445. package/dist/types/invocation/index.d.ts.map +1 -1
  446. package/dist/types/invocation/index.js +10 -7
  447. package/dist/types/invocation/index.js.map +1 -1
  448. package/dist/types/rag/retrieval.d.ts +4 -3
  449. package/dist/types/rag/retrieval.d.ts.map +1 -1
  450. package/dist/types/run/config.d.ts +12 -1
  451. package/dist/types/run/config.d.ts.map +1 -1
  452. package/dist/types/run/events.d.ts +26 -1
  453. package/dist/types/run/events.d.ts.map +1 -1
  454. package/dist/types/run/index.d.ts.map +1 -1
  455. package/dist/types/run/index.js +8 -0
  456. package/dist/types/run/index.js.map +1 -1
  457. package/dist/types/run/metadata.d.ts +12 -2
  458. package/dist/types/run/metadata.d.ts.map +1 -1
  459. package/dist/types/run/status.d.ts +26 -0
  460. package/dist/types/run/status.d.ts.map +1 -0
  461. package/dist/types/run/status.js +2 -0
  462. package/dist/types/run/status.js.map +1 -0
  463. package/dist/types/session/ids.d.ts +9 -0
  464. package/dist/types/session/ids.d.ts.map +1 -0
  465. package/dist/types/session/ids.js +9 -0
  466. package/dist/types/session/ids.js.map +1 -0
  467. package/dist/types/session/index.d.ts +3 -0
  468. package/dist/types/session/index.d.ts.map +1 -0
  469. package/dist/types/session/index.js +5 -0
  470. package/dist/types/session/index.js.map +1 -0
  471. package/dist/types/session/store.d.ts +210 -0
  472. package/dist/types/session/store.d.ts.map +1 -0
  473. package/dist/types/session/store.js +9 -0
  474. package/dist/types/session/store.js.map +1 -0
  475. package/dist/types/thread/index.d.ts +2 -0
  476. package/dist/types/thread/index.d.ts.map +1 -0
  477. package/dist/types/thread/index.js +5 -0
  478. package/dist/types/thread/index.js.map +1 -0
  479. package/dist/types/thread/store.d.ts +86 -0
  480. package/dist/types/thread/store.d.ts.map +1 -0
  481. package/dist/types/thread/store.js +22 -0
  482. package/dist/types/thread/store.js.map +1 -0
  483. package/dist/utils/id.d.ts +8 -2
  484. package/dist/utils/id.d.ts.map +1 -1
  485. package/dist/utils/id.js +22 -4
  486. package/dist/utils/id.js.map +1 -1
  487. package/package.json +6 -11
  488. package/src/agents/ReactiveAgent.ts +7 -2
  489. package/src/agents/RouterAgent.ts +5 -0
  490. package/src/agents/SupervisorAgent.ts +29 -6
  491. package/src/bridge/a2a/index.ts +0 -1
  492. package/src/bridge/a2a/mapper.ts +7 -0
  493. package/src/bridge/a2a/message.ts +0 -32
  494. package/src/bridge/a2a/task.ts +9 -8
  495. package/src/bridge/sse/mapper.ts +8 -1
  496. package/src/constants/a2a/index.ts +2 -2
  497. package/src/contracts/api.ts +14 -30
  498. package/src/contracts/ids.ts +1 -1
  499. package/src/contracts/index.ts +3 -7
  500. package/src/contracts/schemas.ts +1 -8
  501. package/src/gateway/local.ts +6 -0
  502. package/src/index.ts +14 -4
  503. package/src/manager/agent/__tests__/lifecycle.test.ts +473 -0
  504. package/src/manager/agent/lifecycle.ts +515 -21
  505. package/src/manager/index.ts +3 -0
  506. package/src/manager/run/persistence.ts +26 -1
  507. package/src/manager/thread/__tests__/lifecycle.test.ts +286 -0
  508. package/src/manager/thread/lifecycle.ts +217 -0
  509. package/src/rag/retriever.ts +2 -2
  510. package/src/run/reporter.ts +28 -0
  511. package/src/runtime/query/__tests__/context.test.ts +102 -0
  512. package/src/runtime/query/context-cache.ts +4 -4
  513. package/src/runtime/query/context.ts +98 -9
  514. package/src/runtime/query/events.ts +8 -0
  515. package/src/runtime/query/index.ts +38 -1
  516. package/src/session/__tests__/integration/_fixtures.ts +310 -0
  517. package/src/session/__tests__/integration/archive-gate.test.ts +288 -0
  518. package/src/session/__tests__/integration/capacity-caps.test.ts +171 -0
  519. package/src/session/__tests__/integration/e2e-spawn.test.ts +296 -0
  520. package/src/session/__tests__/integration/event-stream-ordering.test.ts +410 -0
  521. package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +271 -0
  522. package/src/session/__tests__/integration/handoff-illegal-transition.test.ts +214 -0
  523. package/src/session/__tests__/integration/handoff-single-e2e.test.ts +251 -0
  524. package/src/session/__tests__/integration/hierarchy-lifecycle.test.ts +240 -0
  525. package/src/session/__tests__/integration/migration-filesystem.test.ts +209 -0
  526. package/src/session/__tests__/integration/migration-id-prefix.test.ts +101 -0
  527. package/src/session/__tests__/integration/prev-artifact-dag.test.ts +325 -0
  528. package/src/session/__tests__/integration/retention-archive.test.ts +233 -0
  529. package/src/session/__tests__/integration/spawn-rollback.test.ts +313 -0
  530. package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +239 -0
  531. package/src/session/__tests__/integration/tenant-isolation.test.ts +292 -0
  532. package/src/session/errors.ts +159 -0
  533. package/src/session/events/index.ts +16 -0
  534. package/src/session/events/schema-version.ts +13 -0
  535. package/src/session/events/types.ts +71 -0
  536. package/src/session/handoff/__tests__/broadcast.test.ts +378 -0
  537. package/src/session/handoff/__tests__/capacity.test.ts +129 -0
  538. package/src/session/handoff/__tests__/single.test.ts +333 -0
  539. package/src/session/handoff/assignment.ts +74 -0
  540. package/src/session/handoff/broadcast.ts +406 -0
  541. package/src/session/handoff/capacity.ts +121 -0
  542. package/src/session/handoff/events.ts +72 -0
  543. package/src/session/handoff/index.ts +29 -0
  544. package/src/session/handoff/single.ts +310 -0
  545. package/src/session/handoff/version.ts +59 -0
  546. package/src/session/hierarchy/__tests__/session.test.ts +100 -0
  547. package/src/session/hierarchy/actor.ts +17 -0
  548. package/src/session/hierarchy/index.ts +18 -0
  549. package/src/session/hierarchy/lineage.ts +15 -0
  550. package/src/session/hierarchy/project.ts +41 -0
  551. package/src/session/hierarchy/session.ts +109 -0
  552. package/src/session/hierarchy/sub-session.ts +92 -0
  553. package/src/session/hierarchy/tenant.ts +13 -0
  554. package/src/session/hierarchy/thread.ts +55 -0
  555. package/src/session/index.ts +15 -0
  556. package/src/session/intervention/__tests__/prev-artifact.test.ts +234 -0
  557. package/src/session/intervention/index.ts +16 -0
  558. package/src/session/intervention/prev-artifact.ts +180 -0
  559. package/src/session/migration/__tests__/filesystem.test.ts +263 -0
  560. package/src/session/migration/__tests__/id-prefix.test.ts +101 -0
  561. package/src/session/migration/__tests__/marker.test.ts +84 -0
  562. package/src/session/migration/errors.ts +23 -0
  563. package/src/session/migration/filesystem.ts +401 -0
  564. package/src/session/migration/id-prefix.ts +141 -0
  565. package/src/session/migration/index.ts +38 -0
  566. package/src/session/migration/marker.ts +131 -0
  567. package/src/session/retention/__tests__/archive.test.ts +318 -0
  568. package/src/session/retention/__tests__/disk-backend.test.ts +180 -0
  569. package/src/session/retention/archive-backend-ref.ts +17 -0
  570. package/src/session/retention/archive.ts +281 -0
  571. package/src/session/retention/backend.ts +107 -0
  572. package/src/session/retention/disk-backend.ts +304 -0
  573. package/src/session/retention/index.ts +16 -0
  574. package/src/session/retention/policy.ts +53 -0
  575. package/src/session/summary/__tests__/materialize.test.ts +343 -0
  576. package/src/session/summary/deliverable.ts +84 -0
  577. package/src/session/summary/index.ts +31 -0
  578. package/src/session/summary/materialize.ts +169 -0
  579. package/src/session/summary/ref.ts +104 -0
  580. package/src/session/workspace/__tests__/git-worktree.test.ts +258 -0
  581. package/src/session/workspace/__tests__/path-builder.test.ts +51 -0
  582. package/src/session/workspace/driver.ts +60 -0
  583. package/src/session/workspace/git-worktree.ts +209 -0
  584. package/src/session/workspace/index.ts +25 -0
  585. package/src/session/workspace/path-builder.ts +71 -0
  586. package/src/session/workspace/ref.ts +50 -0
  587. package/src/session/workspace/registry.ts +42 -0
  588. package/src/store/index.ts +0 -3
  589. package/src/store/session/__tests__/disk.test.ts +397 -0
  590. package/src/store/session/__tests__/memory.test.ts +402 -0
  591. package/src/store/session/disk.ts +976 -0
  592. package/src/store/session/index.ts +13 -0
  593. package/src/store/session/linkage.ts +80 -0
  594. package/src/store/session/memory.ts +412 -0
  595. package/src/store/session/messages.ts +21 -0
  596. package/src/store/thread/disk.ts +261 -0
  597. package/src/store/thread/index.ts +7 -0
  598. package/src/store/thread/memory.ts +104 -0
  599. package/src/types/agent/base.ts +27 -1
  600. package/src/types/agent/factory.ts +8 -3
  601. package/src/types/agent/task.ts +66 -2
  602. package/src/types/ids/index.ts +34 -3
  603. package/src/types/invocation/__tests__/state.test.ts +37 -29
  604. package/src/types/invocation/index.ts +26 -10
  605. package/src/types/rag/retrieval.ts +4 -3
  606. package/src/types/run/config.ts +13 -1
  607. package/src/types/run/events.ts +36 -1
  608. package/src/types/run/index.ts +8 -0
  609. package/src/types/run/metadata.ts +12 -2
  610. package/src/types/run/status.ts +33 -0
  611. package/src/types/session/ids.ts +23 -0
  612. package/src/types/session/index.ts +27 -0
  613. package/src/types/session/store.ts +252 -0
  614. package/src/types/thread/index.ts +5 -0
  615. package/src/types/thread/store.ts +92 -0
  616. package/src/utils/id.ts +34 -4
  617. package/dist/store/conversation/memory.d.ts +0 -21
  618. package/dist/store/conversation/memory.d.ts.map +0 -1
  619. package/dist/store/conversation/memory.js +0 -86
  620. package/dist/store/conversation/memory.js.map +0 -1
  621. package/dist/types/conversation/index.d.ts +0 -7
  622. package/dist/types/conversation/index.d.ts.map +0 -1
  623. package/dist/types/conversation/index.js +0 -2
  624. package/dist/types/conversation/index.js.map +0 -1
  625. package/src/store/conversation/memory.ts +0 -121
  626. package/src/types/conversation/index.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAwB,MAAM,6BAA6B,CAAA;AAClG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAK1F,qBAAa,cAAc;IAC1B,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,GAAG,CAAQ;gBAEP,MAAM,EAAE,oBAAoB;IA4BxC,IAAI,EAAE,IAAI,KAAK,CAEd;IAED,IAAI,MAAM,sDAET;IAED,IAAI,UAAU,2BAEb;IAED,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAI5B,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAIhC,WAAW,IAAI,YAAY;IAI3B,SAAS,IAAI,MAAM,GAAG,IAAI;IAIpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,WAAW,IAAI,IAAI;IAInB,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAS5C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO/B,aAAa,IAAI,IAAI;IAMrB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIvC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,kBAAkB,IAAI,MAAM;IAK5B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQxC,OAAO,CAAC,aAAa;IAUrB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAchD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc9B"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAwB,MAAM,6BAA6B,CAAA;AAClG,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAKrE,qBAAa,cAAc;IAC1B,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,MAAM,EAAE,oBAAoB;IAgCxC,IAAI,EAAE,IAAI,KAAK,CAEd;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,MAAM,sDAET;IAED,IAAI,UAAU,2BAEb;IAED,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAI5B,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAIhC,WAAW,IAAI,YAAY;IAI3B,SAAS,IAAI,MAAM,GAAG,IAAI;IAIpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,WAAW,IAAI,IAAI;IAInB,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAS5C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO/B,aAAa,IAAI,IAAI;IAMrB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIvC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,kBAAkB,IAAI,MAAM;IAK5B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQxC,OAAO,CAAC,aAAa;IAUrB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAchD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc9B"}
@@ -8,9 +8,17 @@ export class RunPersistence {
8
8
  runStore;
9
9
  pricing;
10
10
  log;
11
+ _sessionId;
12
+ _threadId;
13
+ _tenantId;
14
+ _projectId;
11
15
  constructor(config) {
12
16
  this.pricing = config.pricing;
13
17
  this.log = config.log;
18
+ this._sessionId = config.sessionId;
19
+ this._threadId = config.threadId;
20
+ this._tenantId = config.tenantId;
21
+ this._projectId = config.projectId;
14
22
  this.runStore = new RunDiskStore({
15
23
  baseDir: config.outputDir,
16
24
  logger: config.log,
@@ -36,6 +44,18 @@ export class RunPersistence {
36
44
  get id() {
37
45
  return this.run.id;
38
46
  }
47
+ get sessionId() {
48
+ return this._sessionId;
49
+ }
50
+ get threadId() {
51
+ return this._threadId;
52
+ }
53
+ get tenantId() {
54
+ return this._tenantId;
55
+ }
56
+ get projectId() {
57
+ return this._projectId;
58
+ }
39
59
  get status() {
40
60
  return this.run.status;
41
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lifecycle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.test.d.ts","sourceRoot":"","sources":["../../../../src/manager/thread/__tests__/lifecycle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,216 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ThreadClosedError, ThreadNotEmptyError } from '../../../session/errors.js';
3
+ import { InMemorySessionStore } from '../../../store/session/memory.js';
4
+ import { InMemoryThreadStore } from '../../../store/thread/memory.js';
5
+ import { ThreadManager } from '../lifecycle.js';
6
+ const MISSING_THREAD_ID = 'thd_missing';
7
+ const tenantA = 'tnt_alpha';
8
+ const tenantB = 'tnt_beta';
9
+ function userActor(tenantId) {
10
+ return { kind: 'user', userId: 'usr_a', tenantId };
11
+ }
12
+ function agentActor(tenantId) {
13
+ return { kind: 'agent', agentId: 'agt_a', tenantId };
14
+ }
15
+ async function harness(tenantId = tenantA) {
16
+ const threadStore = new InMemoryThreadStore();
17
+ const sessionStore = new InMemorySessionStore();
18
+ const project = await sessionStore.createProject({ tenantId, name: 'p1' }, tenantId);
19
+ const thread = await threadStore.createThread({ projectId: project.id, title: 't' }, tenantId);
20
+ const manager = new ThreadManager({ threadStore, sessionStore });
21
+ return { threadStore, sessionStore, project, thread, manager };
22
+ }
23
+ describe('ThreadManager', () => {
24
+ describe('requireOpen', () => {
25
+ it('returns the thread when open', async () => {
26
+ const { thread, manager } = await harness();
27
+ await expect(manager.requireOpen(thread.id, tenantA)).resolves.toMatchObject({
28
+ id: thread.id,
29
+ status: 'open',
30
+ });
31
+ });
32
+ it('throws ThreadClosedError when archived', async () => {
33
+ const { thread, manager, threadStore } = await harness();
34
+ await threadStore.updateThread({ ...thread, status: 'archived' }, tenantA);
35
+ await expect(manager.requireOpen(thread.id, tenantA)).rejects.toBeInstanceOf(ThreadClosedError);
36
+ });
37
+ it('throws when the thread does not exist', async () => {
38
+ const { manager } = await harness();
39
+ await expect(manager.requireOpen(MISSING_THREAD_ID, tenantA)).rejects.toThrow(/not found/);
40
+ });
41
+ });
42
+ describe('archive', () => {
43
+ it('flips status to archived and bumps ownerVersion', async () => {
44
+ const { thread, manager } = await harness();
45
+ const archived = await manager.archive(thread.id, tenantA);
46
+ expect(archived.status).toBe('archived');
47
+ expect(archived.ownerVersion).toBe(thread.ownerVersion + 1);
48
+ });
49
+ it('is idempotent on an already-archived thread (no store write)', async () => {
50
+ const { thread, manager, threadStore } = await harness();
51
+ await threadStore.updateThread({ ...thread, status: 'archived' }, tenantA);
52
+ const before = await threadStore.getThread(thread.id, tenantA);
53
+ const result = await manager.archive(thread.id, tenantA);
54
+ expect(result.status).toBe('archived');
55
+ // Re-archival must NOT advance ownerVersion — the store would have
56
+ // rejected a second updateThread as stale anyway; we assert the
57
+ // short-circuit path held instead.
58
+ expect(result.ownerVersion).toBe(before?.ownerVersion);
59
+ });
60
+ it('throws when the thread does not exist', async () => {
61
+ const { manager } = await harness();
62
+ await expect(manager.archive(MISSING_THREAD_ID, tenantA)).rejects.toThrow(/not found/);
63
+ });
64
+ it('rejects with ThreadNotEmptyError when a session is active', async () => {
65
+ const { thread, project, manager, sessionStore } = await harness();
66
+ const session = await sessionStore.createSession({
67
+ threadId: thread.id,
68
+ projectId: project.id,
69
+ currentActor: userActor(tenantA),
70
+ }, tenantA);
71
+ await sessionStore.updateSession({ ...session, status: 'active' }, tenantA);
72
+ await expect(manager.archive(thread.id, tenantA)).rejects.toMatchObject({
73
+ name: 'ThreadNotEmptyError',
74
+ details: {
75
+ threadId: thread.id,
76
+ tenantId: tenantA,
77
+ op: 'archive',
78
+ totalBlockingSessions: 1,
79
+ blockingSessions: [{ sessionId: session.id, status: 'active' }],
80
+ },
81
+ });
82
+ });
83
+ it('defensive re-check: already-archived thread with a smuggled active session still rejects', async () => {
84
+ // Flip the thread to archived directly (bypassing manager.archive so
85
+ // no check runs), then attach an active session via direct store
86
+ // mutation. A subsequent manager.archive() must surface the offender
87
+ // as ThreadNotEmptyError, not short-circuit as "already archived".
88
+ const { thread, project, manager, sessionStore, threadStore } = await harness();
89
+ await threadStore.updateThread({ ...thread, status: 'archived' }, tenantA);
90
+ const smuggled = await sessionStore.createSession({
91
+ threadId: thread.id,
92
+ projectId: project.id,
93
+ currentActor: userActor(tenantA),
94
+ }, tenantA);
95
+ await sessionStore.updateSession({ ...smuggled, status: 'active' }, tenantA);
96
+ await expect(manager.archive(thread.id, tenantA)).rejects.toMatchObject({
97
+ name: 'ThreadNotEmptyError',
98
+ details: {
99
+ op: 'archive',
100
+ totalBlockingSessions: 1,
101
+ blockingSessions: [{ sessionId: smuggled.id, status: 'active' }],
102
+ },
103
+ });
104
+ });
105
+ it.each(['locked', 'awaiting_hitl', 'awaiting_merge'])('rejects when a session is %s', async (status) => {
106
+ const { thread, project, manager, sessionStore } = await harness();
107
+ const session = await sessionStore.createSession({
108
+ threadId: thread.id,
109
+ projectId: project.id,
110
+ currentActor: userActor(tenantA),
111
+ }, tenantA);
112
+ await sessionStore.updateSession({ ...session, status }, tenantA);
113
+ await expect(manager.archive(thread.id, tenantA)).rejects.toBeInstanceOf(ThreadNotEmptyError);
114
+ });
115
+ it('allows archival when every session is quiescent (idle / failed / archived)', async () => {
116
+ const { thread, project, manager, sessionStore } = await harness();
117
+ // `createSession` defaults to `idle`; force the others via updateSession.
118
+ await sessionStore.createSession({
119
+ threadId: thread.id,
120
+ projectId: project.id,
121
+ currentActor: userActor(tenantA),
122
+ }, tenantA);
123
+ const sFailed = await sessionStore.createSession({
124
+ threadId: thread.id,
125
+ projectId: project.id,
126
+ currentActor: agentActor(tenantA),
127
+ }, tenantA);
128
+ await sessionStore.updateSession({ ...sFailed, status: 'failed' }, tenantA);
129
+ const archived = await manager.archive(thread.id, tenantA);
130
+ expect(archived.status).toBe('archived');
131
+ });
132
+ it('ignores sessions attached to a sibling thread', async () => {
133
+ const { thread, project, manager, sessionStore, threadStore } = await harness();
134
+ const other = await threadStore.createThread({ projectId: project.id, title: 'other' }, tenantA);
135
+ // Active session under the OTHER thread must not block archival of
136
+ // `thread`.
137
+ const otherSession = await sessionStore.createSession({
138
+ threadId: other.id,
139
+ projectId: project.id,
140
+ currentActor: userActor(tenantA),
141
+ }, tenantA);
142
+ await sessionStore.updateSession({ ...otherSession, status: 'active' }, tenantA);
143
+ await expect(manager.archive(thread.id, tenantA)).resolves.toMatchObject({
144
+ status: 'archived',
145
+ });
146
+ });
147
+ it('does not leak cross-tenant sessions into the precondition', async () => {
148
+ // Shared stores across tenants (production shape). A session with
149
+ // the same threadId string under tenantB must not block archival
150
+ // of tenantA's thread.
151
+ const threadStore = new InMemoryThreadStore();
152
+ const sessionStore = new InMemorySessionStore();
153
+ const manager = new ThreadManager({ threadStore, sessionStore });
154
+ const pA = await sessionStore.createProject({ tenantId: tenantA, name: 'pa' }, tenantA);
155
+ const pB = await sessionStore.createProject({ tenantId: tenantB, name: 'pb' }, tenantB);
156
+ const tA = await threadStore.createThread({ projectId: pA.id, title: 'ta' }, tenantA);
157
+ // Cross-tenant session with the same threadId string as tA.
158
+ const bSession = await sessionStore.createSession({ threadId: tA.id, projectId: pB.id, currentActor: userActor(tenantB) }, tenantB);
159
+ await sessionStore.updateSession({ ...bSession, status: 'active' }, tenantB);
160
+ await expect(manager.archive(tA.id, tenantA)).resolves.toMatchObject({
161
+ status: 'archived',
162
+ });
163
+ });
164
+ });
165
+ describe('delete', () => {
166
+ it('deletes an empty thread', async () => {
167
+ const { thread, manager, threadStore } = await harness();
168
+ await manager.delete(thread.id, tenantA);
169
+ expect(await threadStore.getThread(thread.id, tenantA)).toBeNull();
170
+ });
171
+ it('rejects with ThreadNotEmptyError when any session references the thread', async () => {
172
+ const { thread, project, manager, sessionStore } = await harness();
173
+ const session = await sessionStore.createSession({
174
+ threadId: thread.id,
175
+ projectId: project.id,
176
+ currentActor: userActor(tenantA),
177
+ }, tenantA);
178
+ // Idle — allowed under archive, still blocks delete.
179
+ await expect(manager.delete(thread.id, tenantA)).rejects.toMatchObject({
180
+ name: 'ThreadNotEmptyError',
181
+ details: {
182
+ threadId: thread.id,
183
+ tenantId: tenantA,
184
+ op: 'delete',
185
+ totalBlockingSessions: 1,
186
+ blockingSessions: [{ sessionId: session.id, status: 'idle' }],
187
+ },
188
+ });
189
+ });
190
+ it('detects orphaned sessions referencing a missing thread', async () => {
191
+ // Thread record is destroyed via the store directly, but a session
192
+ // still carries its threadId. Manager.delete must reject rather
193
+ // than silently succeed on the "thread is already gone" short-cut
194
+ // (the session scan runs unconditionally).
195
+ const { thread, project, manager, sessionStore, threadStore } = await harness();
196
+ const orphan = await sessionStore.createSession({
197
+ threadId: thread.id,
198
+ projectId: project.id,
199
+ currentActor: userActor(tenantA),
200
+ }, tenantA);
201
+ await threadStore.deleteThread(thread.id, tenantA);
202
+ await expect(manager.delete(thread.id, tenantA)).rejects.toMatchObject({
203
+ name: 'ThreadNotEmptyError',
204
+ details: {
205
+ op: 'delete',
206
+ blockingSessions: [{ sessionId: orphan.id, status: 'idle' }],
207
+ },
208
+ });
209
+ });
210
+ it('is idempotent for an absent thread with no orphans', async () => {
211
+ const { manager } = await harness();
212
+ await expect(manager.delete(MISSING_THREAD_ID, tenantA)).resolves.toBeUndefined();
213
+ });
214
+ });
215
+ });
216
+ //# sourceMappingURL=lifecycle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.test.js","sourceRoot":"","sources":["../../../../src/manager/thread/__tests__/lifecycle.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAGrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,MAAM,iBAAiB,GAAG,aAAyB,CAAA;AAEnD,MAAM,OAAO,GAAG,WAAuB,CAAA;AACvC,MAAM,OAAO,GAAG,UAAsB,CAAA;AAEtC,SAAS,SAAS,CAAC,QAAkB;IACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAiB,EAAE,QAAQ,EAAE,CAAA;AAC7D,CAAC;AAED,SAAS,UAAU,CAAC,QAAkB;IACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAkB,EAAE,QAAQ,EAAE,CAAA;AAChE,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,WAAqB,OAAO;IAClD,MAAM,WAAW,GAAG,IAAI,mBAAmB,EAAE,CAAA;IAC7C,MAAM,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC/C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAA;IACpF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC9F,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAA;IAChE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAC/D,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAC3C,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC5E,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,MAAM,EAAE,MAAM;aACd,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YACxD,MAAM,WAAW,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAA;YAC1E,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAC3E,iBAAiB,CACjB,CAAA;QACF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YACnC,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC3F,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAC3C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAC1D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACxC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YACxD,MAAM,WAAW,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAA;YAC1E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAE9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACtC,mEAAmE;YACnE,gEAAgE;YAChE,mCAAmC;YACnC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YACnC,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACvF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAClE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAC/C;gBACC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;aAChC,EACD,OAAO,CACP,CAAA;YACD,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;YAE3E,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBACvE,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE;oBACR,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,QAAQ,EAAE,OAAO;oBACjB,EAAE,EAAE,SAAS;oBACb,qBAAqB,EAAE,CAAC;oBACxB,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;iBAC/D;aACD,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;YACzG,qEAAqE;YACrE,iEAAiE;YACjE,qEAAqE;YACrE,mEAAmE;YACnE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAC/E,MAAM,WAAW,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAA;YAC1E,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,aAAa,CAChD;gBACC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;aAChC,EACD,OAAO,CACP,CAAA;YACD,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;YAE5E,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBACvE,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE;oBACR,EAAE,EAAE,SAAS;oBACb,qBAAqB,EAAE,CAAC;oBACxB,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;iBAChE;aACD,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,eAAe,EAAE,gBAAgB,CAAU,CAAC,CAC9D,8BAA8B,EAC9B,KAAK,EAAE,MAAM,EAAE,EAAE;YAChB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAClE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAC/C;gBACC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;aAChC,EACD,OAAO,CACP,CAAA;YACD,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAA;YAEjE,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CACvE,mBAAmB,CACnB,CAAA;QACF,CAAC,CACD,CAAA;QAED,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAClE,0EAA0E;YAC1E,MAAM,YAAY,CAAC,aAAa,CAC/B;gBACC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;aAChC,EACD,OAAO,CACP,CAAA;YACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAC/C;gBACC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC;aACjC,EACD,OAAO,CACP,CAAA;YACD,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;YAE3E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAC1D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAC/E,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,YAAY,CAC3C,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACzC,OAAO,CACP,CAAA;YACD,mEAAmE;YACnE,YAAY;YACZ,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,aAAa,CACpD;gBACC,QAAQ,EAAE,KAAK,CAAC,EAAE;gBAClB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;aAChC,EACD,OAAO,CACP,CAAA;YACD,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;YAEhF,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACxE,MAAM,EAAE,UAAU;aAClB,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YAC1E,kEAAkE;YAClE,iEAAiE;YACjE,uBAAuB;YACvB,MAAM,WAAW,GAAG,IAAI,mBAAmB,EAAE,CAAA;YAC7C,MAAM,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAA;YAC/C,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAA;YAEhE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;YACvF,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;YACvF,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;YAErF,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,aAAa,CAChD,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EACvE,OAAO,CACP,CAAA;YACD,MAAM,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;YAE5E,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACpE,MAAM,EAAE,UAAU;aAClB,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YACxD,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YACxC,MAAM,CAAC,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACnE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAClE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAC/C;gBACC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;aAChC,EACD,OAAO,CACP,CAAA;YACD,qDAAqD;YACrD,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBACtE,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE;oBACR,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,QAAQ,EAAE,OAAO;oBACjB,EAAE,EAAE,QAAQ;oBACZ,qBAAqB,EAAE,CAAC;oBACxB,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;iBAC7D;aACD,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACvE,mEAAmE;YACnE,gEAAgE;YAChE,kEAAkE;YAClE,2CAA2C;YAC3C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YAC/E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAC9C;gBACC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;aAChC,EACD,OAAO,CACP,CAAA;YACD,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAElD,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBACtE,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE;oBACR,EAAE,EAAE,QAAQ;oBACZ,gBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;iBAC5D;aACD,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,EAAE,CAAA;YACnC,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAClF,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * ThreadManager — thin orchestrator over {@link ThreadStore} and
3
+ * {@link SessionStore}.
4
+ *
5
+ * Owns user-facing lifecycle operations on the Thread topic layer plus the
6
+ * archive-gate contract enforced at session-creation ingress sites.
7
+ *
8
+ * Phase 2.6 wired `ThreadManager.requireOpen` into three ingress paths:
9
+ * - {@link AgentManager.provisionSpawn} (child session creation)
10
+ * - `executeSingleHandoff` (recipient session creation)
11
+ * - `executeBroadcastHandoff` (N recipient sessions per fan-out)
12
+ * Those call sites depend on this manager, so the one-method indirection
13
+ * stopped being "structural overhead" the moment archive/delete needed the
14
+ * session-presence cross-check anyway.
15
+ *
16
+ * Archive + delete require cross-store preconditions (session-presence
17
+ * checks) — enforced here where both stores are in scope. The stores
18
+ * themselves stay unaware of each other's layout (Convention #0), which is
19
+ * why the gate lives at the manager layer rather than as a universal store
20
+ * interceptor (see `archive` JSDoc for the direct-store-bypass boundary).
21
+ */
22
+ import type { Thread } from '../../session/hierarchy/thread.js';
23
+ import type { TenantId } from '../../types/ids/index.js';
24
+ import type { ProjectId, ThreadId } from '../../types/session/ids.js';
25
+ import type { SessionStore } from '../../types/session/store.js';
26
+ import type { CreateThreadParams, ThreadStore } from '../../types/thread/store.js';
27
+ export interface ThreadManagerDeps {
28
+ readonly threadStore: ThreadStore;
29
+ readonly sessionStore: SessionStore;
30
+ }
31
+ export declare class ThreadManager {
32
+ private readonly deps;
33
+ constructor(deps: ThreadManagerDeps);
34
+ /** Persist a new Thread. Thin passthrough for uniformity at the manager surface. */
35
+ create(params: CreateThreadParams, tenantId: TenantId): Promise<Thread>;
36
+ /** Read a Thread by id; returns `null` when absent for the tenant. */
37
+ get(threadId: ThreadId, tenantId: TenantId): Promise<Thread | null>;
38
+ /**
39
+ * CAS update on a Thread. Propagates {@link import('../../session/errors.js').StaleThreadError}
40
+ * from the store on `ownerVersion` mismatch — callers re-read, re-apply,
41
+ * and retry.
42
+ */
43
+ update(thread: Thread, tenantId: TenantId): Promise<void>;
44
+ /** List Threads under a Project, ordered by `createdAt` ascending. */
45
+ list(projectId: ProjectId, tenantId: TenantId): Promise<readonly Thread[]>;
46
+ /**
47
+ * Load a Thread and assert it is in `'open'` state. Used by the spawn path
48
+ * as a precondition — a SubSession cannot be created under an archived
49
+ * Thread. Throws on absence and on archival; returns the loaded Thread on
50
+ * success so callers can avoid the second round-trip.
51
+ *
52
+ * Convention #5: deny-by-default. A missing Thread is a hard error, not a
53
+ * silent "assume archived".
54
+ */
55
+ requireOpen(threadId: ThreadId, tenantId: TenantId): Promise<Thread>;
56
+ /**
57
+ * Flip a Thread to `'archived'` via CAS on {@link Thread.ownerVersion}.
58
+ *
59
+ * Preconditions (checked in order):
60
+ * 1. Thread exists for the tenant (throws on absence).
61
+ * 2. No attached Session is in a non-terminal state (see
62
+ * {@link ARCHIVAL_BLOCKING_STATUSES}). The presence check runs
63
+ * **before** the idempotent-archive short-circuit so that an already
64
+ * archived thread harboring a live session still surfaces as
65
+ * {@link ThreadNotEmptyError} rather than a silent success.
66
+ * 3. If the thread is already `'archived'` the method short-circuits
67
+ * without an `updateThread` write (idempotent re-archival). The
68
+ * returned record reflects the current persisted state.
69
+ *
70
+ * On a fresh archive transition the underlying
71
+ * {@link ThreadStore.updateThread} call commits with `ownerVersion + 1`.
72
+ * A {@link import('../../session/errors.js').StaleThreadError} from a
73
+ * concurrent writer propagates unchanged — the caller is expected to
74
+ * re-read + retry (mirrors the `updateThread` contract).
75
+ *
76
+ * Gate scope (Phase 2.6): `ThreadManager.requireOpen` is wired into
77
+ * `AgentManager.provisionSpawn` and both handoff flows, so the production
78
+ * ingress paths cannot attach new sessions under an archived thread.
79
+ * `SessionStore.createSession` / `updateSession` remain public and
80
+ * ungated at the store layer — a direct caller can still mutate a
81
+ * session after archival (the store has no `ThreadStore` handle by
82
+ * design; cross-store awareness lives in the manager). The defensive
83
+ * re-check above catches a smuggled live session on a subsequent
84
+ * archive call, but does not prevent the direct-store write from
85
+ * landing. That's an acceptable boundary — kernel callers must go
86
+ * through the ingress paths; direct store consumers are out of scope
87
+ * for the archive invariant.
88
+ */
89
+ archive(threadId: ThreadId, tenantId: TenantId): Promise<Thread>;
90
+ /**
91
+ * Hard-delete a Thread record. Rejects with {@link ThreadNotEmptyError}
92
+ * (`op: 'delete'`) when ANY Session still references the Thread —
93
+ * deletion is stricter than archival, which tolerates quiescent sessions.
94
+ * Callers must first delete or archive-and-tombstone every attached
95
+ * session (via {@link SessionStore.deleteSession}) before invoking.
96
+ *
97
+ * The session scan runs unconditionally, so orphaned sessions pointing at
98
+ * a missing thread are still detected and reject the delete. Idempotent
99
+ * for genuinely absent threads (no sessions, no thread record) — missing
100
+ * thread + empty session list is a no-op at the store layer. Convention
101
+ * #5: deny-by-default; no implicit cascade into SessionStore.
102
+ */
103
+ delete(threadId: ThreadId, tenantId: TenantId): Promise<void>;
104
+ }
105
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/manager/thread/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAElF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;CACnC;AAoBD,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;gBAE5B,IAAI,EAAE,iBAAiB;IAInC,oFAAoF;IACpF,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvE,sEAAsE;IACtE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAInE;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,sEAAsE;IACtE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAI1E;;;;;;;;OAQG;IACG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAyCtE;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAanE"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * ThreadManager — thin orchestrator over {@link ThreadStore} and
3
+ * {@link SessionStore}.
4
+ *
5
+ * Owns user-facing lifecycle operations on the Thread topic layer plus the
6
+ * archive-gate contract enforced at session-creation ingress sites.
7
+ *
8
+ * Phase 2.6 wired `ThreadManager.requireOpen` into three ingress paths:
9
+ * - {@link AgentManager.provisionSpawn} (child session creation)
10
+ * - `executeSingleHandoff` (recipient session creation)
11
+ * - `executeBroadcastHandoff` (N recipient sessions per fan-out)
12
+ * Those call sites depend on this manager, so the one-method indirection
13
+ * stopped being "structural overhead" the moment archive/delete needed the
14
+ * session-presence cross-check anyway.
15
+ *
16
+ * Archive + delete require cross-store preconditions (session-presence
17
+ * checks) — enforced here where both stores are in scope. The stores
18
+ * themselves stay unaware of each other's layout (Convention #0), which is
19
+ * why the gate lives at the manager layer rather than as a universal store
20
+ * interceptor (see `archive` JSDoc for the direct-store-bypass boundary).
21
+ */
22
+ import { THREAD_NOT_EMPTY_SAMPLE_LIMIT, ThreadClosedError, ThreadNotEmptyError, } from '../../session/errors.js';
23
+ /**
24
+ * Session statuses that block Thread archival. A session in any of these
25
+ * states has live work in-flight (mid-run, mid-handoff, blocked on human
26
+ * input, or orchestrating a broadcast merge) — freezing the Thread while any
27
+ * of them are active would strand resumable work.
28
+ *
29
+ * `idle`, `failed`, and `archived` are archival-compatible: they are
30
+ * quiescent or already-terminal, so a newly-frozen Thread can safely contain
31
+ * them. This list mirrors the `SessionStatus` discriminants that represent
32
+ * "not-yet-done" work (session-hierarchy.md §5.1).
33
+ */
34
+ const ARCHIVAL_BLOCKING_STATUSES = new Set([
35
+ 'active',
36
+ 'locked',
37
+ 'awaiting_hitl',
38
+ 'awaiting_merge',
39
+ ]);
40
+ export class ThreadManager {
41
+ deps;
42
+ constructor(deps) {
43
+ this.deps = deps;
44
+ }
45
+ /** Persist a new Thread. Thin passthrough for uniformity at the manager surface. */
46
+ create(params, tenantId) {
47
+ return this.deps.threadStore.createThread(params, tenantId);
48
+ }
49
+ /** Read a Thread by id; returns `null` when absent for the tenant. */
50
+ get(threadId, tenantId) {
51
+ return this.deps.threadStore.getThread(threadId, tenantId);
52
+ }
53
+ /**
54
+ * CAS update on a Thread. Propagates {@link import('../../session/errors.js').StaleThreadError}
55
+ * from the store on `ownerVersion` mismatch — callers re-read, re-apply,
56
+ * and retry.
57
+ */
58
+ update(thread, tenantId) {
59
+ return this.deps.threadStore.updateThread(thread, tenantId);
60
+ }
61
+ /** List Threads under a Project, ordered by `createdAt` ascending. */
62
+ list(projectId, tenantId) {
63
+ return this.deps.threadStore.listThreads(projectId, tenantId);
64
+ }
65
+ /**
66
+ * Load a Thread and assert it is in `'open'` state. Used by the spawn path
67
+ * as a precondition — a SubSession cannot be created under an archived
68
+ * Thread. Throws on absence and on archival; returns the loaded Thread on
69
+ * success so callers can avoid the second round-trip.
70
+ *
71
+ * Convention #5: deny-by-default. A missing Thread is a hard error, not a
72
+ * silent "assume archived".
73
+ */
74
+ async requireOpen(threadId, tenantId) {
75
+ const thread = await this.deps.threadStore.getThread(threadId, tenantId);
76
+ if (!thread) {
77
+ throw new Error(`Thread ${threadId} not found`);
78
+ }
79
+ if (thread.status === 'archived') {
80
+ throw new ThreadClosedError({ threadId, op: 'require-open' });
81
+ }
82
+ return thread;
83
+ }
84
+ /**
85
+ * Flip a Thread to `'archived'` via CAS on {@link Thread.ownerVersion}.
86
+ *
87
+ * Preconditions (checked in order):
88
+ * 1. Thread exists for the tenant (throws on absence).
89
+ * 2. No attached Session is in a non-terminal state (see
90
+ * {@link ARCHIVAL_BLOCKING_STATUSES}). The presence check runs
91
+ * **before** the idempotent-archive short-circuit so that an already
92
+ * archived thread harboring a live session still surfaces as
93
+ * {@link ThreadNotEmptyError} rather than a silent success.
94
+ * 3. If the thread is already `'archived'` the method short-circuits
95
+ * without an `updateThread` write (idempotent re-archival). The
96
+ * returned record reflects the current persisted state.
97
+ *
98
+ * On a fresh archive transition the underlying
99
+ * {@link ThreadStore.updateThread} call commits with `ownerVersion + 1`.
100
+ * A {@link import('../../session/errors.js').StaleThreadError} from a
101
+ * concurrent writer propagates unchanged — the caller is expected to
102
+ * re-read + retry (mirrors the `updateThread` contract).
103
+ *
104
+ * Gate scope (Phase 2.6): `ThreadManager.requireOpen` is wired into
105
+ * `AgentManager.provisionSpawn` and both handoff flows, so the production
106
+ * ingress paths cannot attach new sessions under an archived thread.
107
+ * `SessionStore.createSession` / `updateSession` remain public and
108
+ * ungated at the store layer — a direct caller can still mutate a
109
+ * session after archival (the store has no `ThreadStore` handle by
110
+ * design; cross-store awareness lives in the manager). The defensive
111
+ * re-check above catches a smuggled live session on a subsequent
112
+ * archive call, but does not prevent the direct-store write from
113
+ * landing. That's an acceptable boundary — kernel callers must go
114
+ * through the ingress paths; direct store consumers are out of scope
115
+ * for the archive invariant.
116
+ */
117
+ async archive(threadId, tenantId) {
118
+ const thread = await this.deps.threadStore.getThread(threadId, tenantId);
119
+ if (!thread) {
120
+ throw new Error(`Thread ${threadId} not found`);
121
+ }
122
+ // Always enforce the blocking-session invariant — even on re-archival.
123
+ // If the thread is already archived but somehow gained a live session
124
+ // (direct store mutation, concurrent spawn before a write-barrier
125
+ // existed), surfacing that via ThreadNotEmptyError is more useful to
126
+ // operators than a silent idempotent success.
127
+ const sessions = await this.deps.sessionStore.listSessions(threadId, tenantId);
128
+ const blocking = sessions.filter((s) => ARCHIVAL_BLOCKING_STATUSES.has(s.status));
129
+ if (blocking.length > 0) {
130
+ throw new ThreadNotEmptyError({
131
+ threadId,
132
+ tenantId,
133
+ op: 'archive',
134
+ blockingSessions: summarizeBlocking(blocking),
135
+ totalBlockingSessions: blocking.length,
136
+ });
137
+ }
138
+ if (thread.status === 'archived') {
139
+ // Idempotent: already archived, no live sessions attached. Skip the
140
+ // write (updateThread would still bump ownerVersion for no semantic
141
+ // change).
142
+ return thread;
143
+ }
144
+ const next = { ...thread, status: 'archived' };
145
+ await this.deps.threadStore.updateThread(next, tenantId);
146
+ // updateThread advances ownerVersion + updatedAt; re-read so the returned
147
+ // record reflects the persisted state (callers rely on version monotonicity).
148
+ const reloaded = await this.deps.threadStore.getThread(threadId, tenantId);
149
+ if (!reloaded) {
150
+ throw new Error(`Thread ${threadId} vanished between archive and read-back`);
151
+ }
152
+ return reloaded;
153
+ }
154
+ /**
155
+ * Hard-delete a Thread record. Rejects with {@link ThreadNotEmptyError}
156
+ * (`op: 'delete'`) when ANY Session still references the Thread —
157
+ * deletion is stricter than archival, which tolerates quiescent sessions.
158
+ * Callers must first delete or archive-and-tombstone every attached
159
+ * session (via {@link SessionStore.deleteSession}) before invoking.
160
+ *
161
+ * The session scan runs unconditionally, so orphaned sessions pointing at
162
+ * a missing thread are still detected and reject the delete. Idempotent
163
+ * for genuinely absent threads (no sessions, no thread record) — missing
164
+ * thread + empty session list is a no-op at the store layer. Convention
165
+ * #5: deny-by-default; no implicit cascade into SessionStore.
166
+ */
167
+ async delete(threadId, tenantId) {
168
+ const sessions = await this.deps.sessionStore.listSessions(threadId, tenantId);
169
+ if (sessions.length > 0) {
170
+ throw new ThreadNotEmptyError({
171
+ threadId,
172
+ tenantId,
173
+ op: 'delete',
174
+ blockingSessions: summarizeBlocking(sessions),
175
+ totalBlockingSessions: sessions.length,
176
+ });
177
+ }
178
+ await this.deps.threadStore.deleteThread(threadId, tenantId);
179
+ }
180
+ }
181
+ function summarizeBlocking(sessions) {
182
+ return sessions
183
+ .slice(0, THREAD_NOT_EMPTY_SAMPLE_LIMIT)
184
+ .map((s) => ({ sessionId: s.id, status: s.status }));
185
+ }
186
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/manager/thread/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -38,10 +38,10 @@ export class DefaultRetriever {
38
38
  };
39
39
  }
40
40
  expandQuery(query) {
41
- if (!query.threadMessages || query.threadMessages.length === 0) {
41
+ if (!query.recentMessages || query.recentMessages.length === 0) {
42
42
  return query.text;
43
43
  }
44
- const recentContext = query.threadMessages.slice(-3).join(' ');
44
+ const recentContext = query.recentMessages.slice(-3).join(' ');
45
45
  return `${query.text}\n\nContext: ${recentContext}`;
46
46
  }
47
47
  async vectorSearch(query, scope, knowledgeBaseId, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/run/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAEjF,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAA;AAW/D,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CA4MpE"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/run/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAEjF,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAA;AAW/D,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAwOpE"}