@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
@@ -0,0 +1,236 @@
1
+ /**
2
+ * DiskArchiveBackend — reference filesystem-backed {@link ArchiveBackend}.
3
+ *
4
+ * Convention #8 (atomic writes): every file lands via write-tmp-rename; the
5
+ * final `archive.json` marker is written LAST so a crash mid-bundle leaves
6
+ * the directory visible but UN-marked, and `restore` treats such a bundle
7
+ * as missing. This mirrors the Phase 5 materializer's "marker-last"
8
+ * invariant.
9
+ *
10
+ * Layout:
11
+ *
12
+ * {rootDir}/archive/{arc_<opaque>}/
13
+ * subsession.json # Identity + metadata
14
+ * summary.json # SessionSummaryRef (optional — present iff input.summaryRef)
15
+ * messages.jsonl # One SessionMessage per line (append-style, serialized once)
16
+ * workspace.json # WorkspaceRef (optional — present iff input.workspace)
17
+ * archive.json # Marker — final write; presence = bundle committed
18
+ *
19
+ * Workspace directory contents are NOT archived — we persist the
20
+ * {@link WorkspaceRef} only. The pattern doc §12.3 explicitly allows this:
21
+ * the ref is the re-hydration handle; the worktree itself is disposed at
22
+ * archive time via the caller's {@link WorkspaceBackendDriver}, not copied
23
+ * into the archive bundle. This is a Phase 8 interpretation — see the
24
+ * roadmap deliverable report for rationale (tar bundling deferred).
25
+ *
26
+ * See session-hierarchy.md §12.3.
27
+ */
28
+ import { randomBytes } from 'node:crypto';
29
+ import { mkdir, readFile, readdir, rename, unlink, writeFile } from 'node:fs/promises';
30
+ import { join } from 'node:path';
31
+ /**
32
+ * Raised when {@link DiskArchiveBackend.restore} cannot resolve the supplied
33
+ * ref — either the directory is missing, or the `archive.json` marker is
34
+ * absent (crash-mid-write signal).
35
+ */
36
+ export class ArchiveNotFoundError extends Error {
37
+ details;
38
+ constructor(details) {
39
+ super(`Archive ${details.archiveRef} could not be resolved: ${details.reason}`);
40
+ this.name = 'ArchiveNotFoundError';
41
+ this.details = details;
42
+ }
43
+ }
44
+ export class DiskArchiveBackend {
45
+ kind = 'disk';
46
+ rootDir;
47
+ constructor(config) {
48
+ this.rootDir = config.rootDir;
49
+ }
50
+ async store(input) {
51
+ const archiveRef = generateArchiveBackendRef();
52
+ const archivedAt = new Date();
53
+ const dir = join(this.rootDir, 'archive', archiveRef);
54
+ await mkdir(dir, { recursive: true });
55
+ // 1. Sub-session identity.
56
+ const subEntry = {
57
+ subSessionId: input.subSessionId,
58
+ sessionId: input.sessionId,
59
+ tenantId: input.tenantId,
60
+ };
61
+ await atomicWriteJson(join(dir, 'subsession.json'), subEntry);
62
+ // 2. Summary (optional).
63
+ if (input.summaryRef) {
64
+ const entry = { summary: serializeSummaryFields(input.summaryRef) };
65
+ await atomicWriteJson(join(dir, 'summary.json'), entry);
66
+ }
67
+ // 3. Workspace ref (optional).
68
+ if (input.workspace) {
69
+ const entry = {
70
+ workspace: serializeWorkspaceFields(input.workspace),
71
+ };
72
+ await atomicWriteJson(join(dir, 'workspace.json'), entry);
73
+ }
74
+ // 4. Messages — one JSON per line, serialized once with an atomic
75
+ // tmp-rename. No append I/O: we have the full bundle upfront, and
76
+ // single-write is atomic at the file level.
77
+ const lines = input.messages.map((m) => {
78
+ const line = {
79
+ id: m.id,
80
+ sessionId: m.sessionId,
81
+ tenantId: m.tenantId,
82
+ message: m.message,
83
+ at: m.at.toISOString(),
84
+ };
85
+ return JSON.stringify(line);
86
+ });
87
+ const body = lines.length > 0 ? `${lines.join('\n')}\n` : '';
88
+ await atomicWriteText(join(dir, 'messages.jsonl'), body);
89
+ // 5. Marker — ALWAYS last. Presence = bundle committed.
90
+ const marker = {
91
+ archiveRef,
92
+ archivedAt: archivedAt.toISOString(),
93
+ };
94
+ await atomicWriteJson(join(dir, 'archive.json'), marker);
95
+ return { archiveRef, archivedAt };
96
+ }
97
+ async restore(archiveRef) {
98
+ const dir = join(this.rootDir, 'archive', archiveRef);
99
+ // Directory must exist.
100
+ try {
101
+ await readdir(dir);
102
+ }
103
+ catch (err) {
104
+ const code = err.code;
105
+ if (code === 'ENOENT') {
106
+ throw new ArchiveNotFoundError({ archiveRef, reason: 'missing' });
107
+ }
108
+ throw err;
109
+ }
110
+ // Marker must exist — absence = crash-mid-write.
111
+ const marker = await readJson(join(dir, 'archive.json'));
112
+ if (!marker) {
113
+ throw new ArchiveNotFoundError({ archiveRef, reason: 'incomplete' });
114
+ }
115
+ const subEntry = await readJson(join(dir, 'subsession.json'));
116
+ if (!subEntry) {
117
+ throw new ArchiveNotFoundError({ archiveRef, reason: 'incomplete' });
118
+ }
119
+ const summaryEntry = await readJson(join(dir, 'summary.json'));
120
+ const summaryRef = summaryEntry ? deserializeSummaryFields(summaryEntry.summary) : undefined;
121
+ const workspaceEntry = await readJson(join(dir, 'workspace.json'));
122
+ const workspace = workspaceEntry
123
+ ? deserializeWorkspaceFields(workspaceEntry.workspace)
124
+ : undefined;
125
+ const messagesRaw = await readText(join(dir, 'messages.jsonl'));
126
+ const messages = messagesRaw === null
127
+ ? []
128
+ : messagesRaw
129
+ .split('\n')
130
+ .filter((l) => l.length > 0)
131
+ .map((l) => {
132
+ const raw = JSON.parse(l);
133
+ return {
134
+ id: raw.id,
135
+ sessionId: raw.sessionId,
136
+ tenantId: raw.tenantId,
137
+ message: raw.message,
138
+ at: new Date(raw.at),
139
+ };
140
+ });
141
+ return {
142
+ subSessionId: subEntry.subSessionId,
143
+ sessionId: subEntry.sessionId,
144
+ tenantId: subEntry.tenantId,
145
+ ...(workspace !== undefined && { workspace }),
146
+ ...(summaryRef !== undefined && { summaryRef }),
147
+ messages,
148
+ };
149
+ }
150
+ }
151
+ // Serialization helpers ------------------------------------------------------
152
+ function serializeSummaryFields(s) {
153
+ // Dates survive JSON round-trip as strings; we let JSON.stringify handle
154
+ // the normal `toJSON` path but store them as ISO strings on the wire.
155
+ // On deserialize we coerce back. The in-memory record stays immutable.
156
+ return s;
157
+ }
158
+ function deserializeSummaryFields(s) {
159
+ // JSON revives Dates as strings — resurrect them.
160
+ const at = s.at instanceof Date ? s.at : new Date(s.at);
161
+ const keyDecisions = s.keyDecisions.map((k) => ({
162
+ at: k.at instanceof Date ? k.at : new Date(k.at),
163
+ summary: k.summary,
164
+ }));
165
+ return { ...s, at, keyDecisions };
166
+ }
167
+ function serializeWorkspaceFields(w) {
168
+ return w;
169
+ }
170
+ function deserializeWorkspaceFields(w) {
171
+ const createdAt = w.createdAt instanceof Date ? w.createdAt : new Date(w.createdAt);
172
+ return { ...w, createdAt };
173
+ }
174
+ // ID generation --------------------------------------------------------------
175
+ const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';
176
+ const MAX_UNIFORM_BYTE = Math.floor(256 / ALPHABET.length) * ALPHABET.length;
177
+ /**
178
+ * Mints an {@link ArchiveBackendRef}. Local helper rather than a `utils/id`
179
+ * export because the ref's uniqueness + prefix is an archive-backend concern
180
+ * — other backends may mint refs very differently (e.g. S3 keys).
181
+ */
182
+ function generateArchiveBackendRef(length = 12) {
183
+ let suffix = '';
184
+ let remaining = length;
185
+ while (remaining > 0) {
186
+ const bytes = randomBytes(remaining + 8);
187
+ for (const byte of bytes) {
188
+ if (remaining <= 0)
189
+ break;
190
+ if (byte < MAX_UNIFORM_BYTE) {
191
+ suffix += ALPHABET[byte % ALPHABET.length];
192
+ remaining--;
193
+ }
194
+ }
195
+ }
196
+ return `arc_${suffix}`;
197
+ }
198
+ // FS helpers -----------------------------------------------------------------
199
+ async function atomicWriteJson(filePath, value) {
200
+ await atomicWriteText(filePath, JSON.stringify(value, null, 2));
201
+ }
202
+ async function atomicWriteText(filePath, body) {
203
+ const tempPath = `${filePath}.tmp`;
204
+ try {
205
+ await writeFile(tempPath, body, 'utf-8');
206
+ await rename(tempPath, filePath);
207
+ }
208
+ catch (err) {
209
+ await unlink(tempPath).catch(() => undefined);
210
+ throw err;
211
+ }
212
+ }
213
+ async function readJson(path) {
214
+ try {
215
+ const raw = await readFile(path, 'utf-8');
216
+ return JSON.parse(raw);
217
+ }
218
+ catch (err) {
219
+ const code = err.code;
220
+ if (code === 'ENOENT')
221
+ return null;
222
+ throw err;
223
+ }
224
+ }
225
+ async function readText(path) {
226
+ try {
227
+ return await readFile(path, 'utf-8');
228
+ }
229
+ catch (err) {
230
+ const code = err.code;
231
+ if (code === 'ENOENT')
232
+ return null;
233
+ throw err;
234
+ }
235
+ }
236
+ //# sourceMappingURL=disk-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disk-backend.js","sourceRoot":"","sources":["../../../src/session/retention/disk-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type { ArchiveBackendRef } from './archive-backend-ref.js';
2
+ export type { RetentionPolicy } from './policy.js';
3
+ export { RETENTION_POLICY_DISABLED } from './policy.js';
4
+ export type { ArchiveBackend, ArchiveInput, ArchiveOutput, SubSessionTombstone } from './backend.js';
5
+ export { ArchivalManager, ArchiveNotConfiguredError, SubSessionNotArchivableError, SubSessionNotArchivedError, } from './archive.js';
6
+ export type { ArchivalManagerDeps, WorkspaceResolver } from './archive.js';
7
+ export { ArchiveNotFoundError, DiskArchiveBackend } from './disk-backend.js';
8
+ export type { DiskArchiveBackendConfig } from './disk-backend.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/retention/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AACvD,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACpG,OAAO,EACN,eAAe,EACf,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,GAC1B,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,6 @@
1
+ // Sub-barrel for the retention/archival module (Convention #4).
2
+ // Concrete types + manager live in sibling files.
3
+ export { RETENTION_POLICY_DISABLED } from './policy.js';
4
+ export { ArchivalManager, ArchiveNotConfiguredError, SubSessionNotArchivableError, SubSessionNotArchivedError, } from './archive.js';
5
+ export { ArchiveNotFoundError, DiskArchiveBackend } from './disk-backend.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/retention/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,kDAAkD;AAIlD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,OAAO,EACN,eAAe,EACf,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,GAC1B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * RetentionPolicy — per-project configuration for sub-session retention and
3
+ * archival. See session-hierarchy.md §12.3.
4
+ *
5
+ * Deny-by-default (Convention #5): the absence of any field means "no
6
+ * automatic archival." A policy without an `archiveBackend` cannot drive
7
+ * archival at all — {@link ArchivalManager.archive} rejects with
8
+ * {@link ArchiveNotConfiguredError}. The primitive Phase 8 ships is
9
+ * on-demand `archive(subSessionId)`; a scheduler that invokes the primitive
10
+ * is platform-layer (out of SDK scope per the roadmap "What's OUT" list).
11
+ *
12
+ * Phase 8 replaces the Phase 1 `RetentionPolicyRef = unknown` placeholder at
13
+ * `session/hierarchy/project.ts` with this real type.
14
+ */
15
+ import type { ArchiveBackendRef } from './archive-backend-ref.js';
16
+ /**
17
+ * Retention policy. Every field is optional (deny-by-default): no policy, no
18
+ * archival. See pattern doc §12.3 for rationale.
19
+ */
20
+ export interface RetentionPolicy {
21
+ /**
22
+ * Idle sub-sessions older than this are eligible for archival. Expressed in
23
+ * milliseconds to stay dependency-free — no `Duration` type in the kernel
24
+ * today. Absent field = no TTL (eligibility never triggers on age alone).
25
+ */
26
+ readonly idleSubSessionTTL?: number;
27
+ /**
28
+ * Hard cap on sub-sessions per project. When exceeded, the oldest-idle
29
+ * sub-sessions become archival-eligible. Absent = no cap.
30
+ *
31
+ * Note: enforcement of this cap is platform-layer (scheduler territory).
32
+ * The SDK primitive `archive()` takes an explicit {@link SubSessionId} —
33
+ * it does not walk the project tree.
34
+ */
35
+ readonly maxSubSessionsPerProject?: number;
36
+ /**
37
+ * Ref for the backing {@link ArchiveBackend}. Absent = archival disabled
38
+ * even if TTL/cap are set — {@link ArchivalManager.archive} rejects with
39
+ * {@link ArchiveNotConfiguredError}. This is the deny-by-default gate.
40
+ */
41
+ readonly archiveBackend?: ArchiveBackendRef;
42
+ }
43
+ /**
44
+ * The empty retention policy — archival fully disabled. Exported as a named
45
+ * constant so call sites declare their deny-by-default posture explicitly
46
+ * rather than relying on `{}` literals (Convention #0, #5).
47
+ */
48
+ export declare const RETENTION_POLICY_DISABLED: RetentionPolicy;
49
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/session/retention/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAEjE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAEnC;;;;;;;OAOG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAA;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,eAAmC,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * RetentionPolicy — per-project configuration for sub-session retention and
3
+ * archival. See session-hierarchy.md §12.3.
4
+ *
5
+ * Deny-by-default (Convention #5): the absence of any field means "no
6
+ * automatic archival." A policy without an `archiveBackend` cannot drive
7
+ * archival at all — {@link ArchivalManager.archive} rejects with
8
+ * {@link ArchiveNotConfiguredError}. The primitive Phase 8 ships is
9
+ * on-demand `archive(subSessionId)`; a scheduler that invokes the primitive
10
+ * is platform-layer (out of SDK scope per the roadmap "What's OUT" list).
11
+ *
12
+ * Phase 8 replaces the Phase 1 `RetentionPolicyRef = unknown` placeholder at
13
+ * `session/hierarchy/project.ts` with this real type.
14
+ */
15
+ /**
16
+ * The empty retention policy — archival fully disabled. Exported as a named
17
+ * constant so call sites declare their deny-by-default posture explicitly
18
+ * rather than relying on `{}` literals (Convention #0, #5).
19
+ */
20
+ export const RETENTION_POLICY_DISABLED = Object.freeze({});
21
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/session/retention/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkCH;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=materialize.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materialize.test.d.ts","sourceRoot":"","sources":["../../../../src/session/summary/__tests__/materialize.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,270 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { TenantIsolationError } from '../../../session/errors.js';
3
+ import { InMemorySessionStore } from '../../../store/session/memory.js';
4
+ import { SessionSummaryMaterializer } from '../materialize.js';
5
+ import { AGENT_SUMMARY_MAX_CHARS, AgentSummaryTooLongError, SessionAlreadySummarizedError, } from '../ref.js';
6
+ const TEST_THREAD_ID = 'thd_test';
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
+ function makeSummaryIdGenerator() {
16
+ let n = 0;
17
+ return () => `sum_test_${++n}`;
18
+ }
19
+ async function seedActiveSession(store, tenantId) {
20
+ const project = await store.createProject({ tenantId, name: 'p1' }, tenantId);
21
+ const session = await store.createSession({ threadId: TEST_THREAD_ID, projectId: project.id, currentActor: agentActor(tenantId) }, tenantId);
22
+ // Put the session into `active` so the materializer's status-flip behavior
23
+ // is observable.
24
+ await store.updateSession({ ...session, status: 'active' }, tenantId);
25
+ return { project, session: { ...session, status: 'active' } };
26
+ }
27
+ function buildMaterializer(store) {
28
+ return new SessionSummaryMaterializer({
29
+ store,
30
+ generateSummaryId: makeSummaryIdGenerator(),
31
+ now: () => new Date('2026-04-17T00:00:00Z'),
32
+ });
33
+ }
34
+ describe('SessionSummaryMaterializer.materialize', () => {
35
+ it('materializes on an active session and flips status to idle', async () => {
36
+ const store = new InMemorySessionStore();
37
+ const { session } = await seedActiveSession(store, tenantA);
38
+ const materializer = buildMaterializer(store);
39
+ const summary = await materializer.materialize({
40
+ sessionId: session.id,
41
+ tenantId: tenantA,
42
+ finalOutcome: { status: 'succeeded', verdict: 'done' },
43
+ agentSummary: 'Completed task X.',
44
+ declaredDeliverables: [],
45
+ keyDecisions: [],
46
+ });
47
+ expect(summary.id).toBe('sum_test_1');
48
+ expect(summary.sessionRef).toBe(session.id);
49
+ expect(summary.materializedBy).toBe('kernel');
50
+ const stored = await store.getSummary(session.id, tenantA);
51
+ expect(stored?.id).toBe(summary.id);
52
+ const reloaded = await store.getSession(session.id, tenantA);
53
+ expect(reloaded?.status).toBe('idle');
54
+ });
55
+ it('rejects an agentSummary exceeding AGENT_SUMMARY_MAX_CHARS', async () => {
56
+ const store = new InMemorySessionStore();
57
+ const { session } = await seedActiveSession(store, tenantA);
58
+ const materializer = buildMaterializer(store);
59
+ await expect(materializer.materialize({
60
+ sessionId: session.id,
61
+ tenantId: tenantA,
62
+ finalOutcome: { status: 'succeeded' },
63
+ agentSummary: 'x'.repeat(AGENT_SUMMARY_MAX_CHARS + 1),
64
+ declaredDeliverables: [],
65
+ keyDecisions: [],
66
+ })).rejects.toBeInstanceOf(AgentSummaryTooLongError);
67
+ });
68
+ it('rejects re-materialization when a summary already exists', async () => {
69
+ const store = new InMemorySessionStore();
70
+ const { session } = await seedActiveSession(store, tenantA);
71
+ const materializer = buildMaterializer(store);
72
+ await materializer.materialize({
73
+ sessionId: session.id,
74
+ tenantId: tenantA,
75
+ finalOutcome: { status: 'succeeded' },
76
+ agentSummary: 'first',
77
+ declaredDeliverables: [],
78
+ keyDecisions: [],
79
+ });
80
+ await expect(materializer.materialize({
81
+ sessionId: session.id,
82
+ tenantId: tenantA,
83
+ finalOutcome: { status: 'succeeded' },
84
+ agentSummary: 'second',
85
+ declaredDeliverables: [],
86
+ keyDecisions: [],
87
+ })).rejects.toBeInstanceOf(SessionAlreadySummarizedError);
88
+ });
89
+ it('rejects cross-tenant materialize with TenantIsolationError', async () => {
90
+ const store = new InMemorySessionStore();
91
+ const { session } = await seedActiveSession(store, tenantA);
92
+ const materializer = buildMaterializer(store);
93
+ await expect(materializer.materialize({
94
+ sessionId: session.id,
95
+ tenantId: tenantB,
96
+ finalOutcome: { status: 'succeeded' },
97
+ agentSummary: 'x',
98
+ declaredDeliverables: [],
99
+ keyDecisions: [],
100
+ })).rejects.toBeInstanceOf(TenantIsolationError);
101
+ });
102
+ it('preserves declaredDeliverables verbatim in the emitted ref', async () => {
103
+ const store = new InMemorySessionStore();
104
+ const { session } = await seedActiveSession(store, tenantA);
105
+ const materializer = buildMaterializer(store);
106
+ const deliverables = [
107
+ {
108
+ id: 'del_a',
109
+ kind: 'file',
110
+ path: 'src/foo.ts',
111
+ contentHash: 'abc123',
112
+ sizeBytes: 42,
113
+ },
114
+ {
115
+ id: 'del_b',
116
+ kind: 'artifact_blob',
117
+ storageRef: 'blob://x',
118
+ mediaType: 'application/json',
119
+ },
120
+ ];
121
+ const summary = await materializer.materialize({
122
+ sessionId: session.id,
123
+ tenantId: tenantA,
124
+ finalOutcome: { status: 'partial' },
125
+ agentSummary: '',
126
+ declaredDeliverables: deliverables,
127
+ keyDecisions: [],
128
+ });
129
+ expect(summary.deliverables).toEqual(deliverables);
130
+ });
131
+ it('preserves keyDecisions verbatim in the emitted ref', async () => {
132
+ const store = new InMemorySessionStore();
133
+ const { session } = await seedActiveSession(store, tenantA);
134
+ const materializer = buildMaterializer(store);
135
+ const decisions = [
136
+ { at: new Date('2026-04-17T01:00:00Z'), summary: 'plan approved' },
137
+ { at: new Date('2026-04-17T02:00:00Z'), summary: 'hitl granted' },
138
+ ];
139
+ const summary = await materializer.materialize({
140
+ sessionId: session.id,
141
+ tenantId: tenantA,
142
+ finalOutcome: { status: 'succeeded' },
143
+ agentSummary: '',
144
+ declaredDeliverables: [],
145
+ keyDecisions: decisions,
146
+ });
147
+ expect(summary.keyDecisions).toEqual(decisions);
148
+ });
149
+ it('constructs SummaryId via the injected generator', async () => {
150
+ const store = new InMemorySessionStore();
151
+ const { session } = await seedActiveSession(store, tenantA);
152
+ const gen = makeSummaryIdGenerator();
153
+ const materializer = new SessionSummaryMaterializer({
154
+ store,
155
+ generateSummaryId: gen,
156
+ });
157
+ const summary = await materializer.materialize({
158
+ sessionId: session.id,
159
+ tenantId: tenantA,
160
+ finalOutcome: { status: 'succeeded' },
161
+ agentSummary: '',
162
+ declaredDeliverables: [],
163
+ keyDecisions: [],
164
+ });
165
+ expect(summary.id).toBe('sum_test_1');
166
+ });
167
+ it('always sets materializedBy to "kernel"', async () => {
168
+ const store = new InMemorySessionStore();
169
+ const { session } = await seedActiveSession(store, tenantA);
170
+ const materializer = buildMaterializer(store);
171
+ const summary = await materializer.materialize({
172
+ sessionId: session.id,
173
+ tenantId: tenantA,
174
+ finalOutcome: { status: 'succeeded' },
175
+ agentSummary: '',
176
+ declaredDeliverables: [],
177
+ keyDecisions: [],
178
+ });
179
+ expect(summary.materializedBy).toBe('kernel');
180
+ });
181
+ it('leaves already-idle sessions in idle (no spurious flip)', async () => {
182
+ const store = new InMemorySessionStore();
183
+ const project = await store.createProject({ tenantId: tenantA, name: 'p1' }, tenantA);
184
+ const session = await store.createSession({ threadId: TEST_THREAD_ID, projectId: project.id, currentActor: userActor(tenantA) }, tenantA);
185
+ // session.status defaults to 'idle'
186
+ const materializer = buildMaterializer(store);
187
+ await materializer.materialize({
188
+ sessionId: session.id,
189
+ tenantId: tenantA,
190
+ finalOutcome: { status: 'succeeded' },
191
+ agentSummary: '',
192
+ declaredDeliverables: [],
193
+ keyDecisions: [],
194
+ });
195
+ const reloaded = await store.getSession(session.id, tenantA);
196
+ expect(reloaded?.status).toBe('idle');
197
+ });
198
+ it('leaves failed sessions in failed (materialize does not resurrect)', async () => {
199
+ const store = new InMemorySessionStore();
200
+ const project = await store.createProject({ tenantId: tenantA, name: 'p1' }, tenantA);
201
+ const session = await store.createSession({ threadId: TEST_THREAD_ID, projectId: project.id, currentActor: agentActor(tenantA) }, tenantA);
202
+ await store.updateSession({ ...session, status: 'failed' }, tenantA);
203
+ const materializer = buildMaterializer(store);
204
+ await materializer.materialize({
205
+ sessionId: session.id,
206
+ tenantId: tenantA,
207
+ finalOutcome: { status: 'failed', verdict: 'gave up' },
208
+ agentSummary: '',
209
+ declaredDeliverables: [],
210
+ keyDecisions: [],
211
+ });
212
+ const reloaded = await store.getSession(session.id, tenantA);
213
+ expect(reloaded?.status).toBe('failed');
214
+ });
215
+ });
216
+ describe('SessionSummaryMaterializer.recover', () => {
217
+ it('returns null when no summary file exists (no side effect)', async () => {
218
+ const store = new InMemorySessionStore();
219
+ const { session } = await seedActiveSession(store, tenantA);
220
+ const materializer = buildMaterializer(store);
221
+ const recovered = await materializer.recover(session.id, tenantA);
222
+ expect(recovered).toBeNull();
223
+ const reloaded = await store.getSession(session.id, tenantA);
224
+ // No side effect — still active.
225
+ expect(reloaded?.status).toBe('active');
226
+ });
227
+ it('flips dangling session status idempotently when summary is present', async () => {
228
+ const store = new InMemorySessionStore();
229
+ const { session } = await seedActiveSession(store, tenantA);
230
+ const materializer = buildMaterializer(store);
231
+ // Simulate mid-crash: write summary directly, then force session back to
232
+ // active (mimicking a process death between the two atomic writes).
233
+ await materializer.materialize({
234
+ sessionId: session.id,
235
+ tenantId: tenantA,
236
+ finalOutcome: { status: 'succeeded' },
237
+ agentSummary: '',
238
+ declaredDeliverables: [],
239
+ keyDecisions: [],
240
+ });
241
+ const mid = await store.getSession(session.id, tenantA);
242
+ if (!mid)
243
+ throw new Error('seed mid session missing');
244
+ await store.updateSession({ ...mid, status: 'active' }, tenantA);
245
+ const recovered = await materializer.recover(session.id, tenantA);
246
+ expect(recovered).not.toBeNull();
247
+ const reloaded = await store.getSession(session.id, tenantA);
248
+ expect(reloaded?.status).toBe('idle');
249
+ // Idempotent: calling recover again with session already idle is a no-op.
250
+ const recovered2 = await materializer.recover(session.id, tenantA);
251
+ expect(recovered2?.id).toBe(recovered?.id);
252
+ const reloaded2 = await store.getSession(session.id, tenantA);
253
+ expect(reloaded2?.status).toBe('idle');
254
+ });
255
+ });
256
+ describe('SessionSummaryMaterializer missing session', () => {
257
+ it('throws when the session does not exist', async () => {
258
+ const store = new InMemorySessionStore();
259
+ const materializer = buildMaterializer(store);
260
+ await expect(materializer.materialize({
261
+ sessionId: 'ses_missing',
262
+ tenantId: tenantA,
263
+ finalOutcome: { status: 'succeeded' },
264
+ agentSummary: '',
265
+ declaredDeliverables: [],
266
+ keyDecisions: [],
267
+ })).rejects.toThrow(/not found/);
268
+ });
269
+ });
270
+ //# sourceMappingURL=materialize.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materialize.test.js","sourceRoot":"","sources":["../../../../src/session/summary/__tests__/materialize.test.ts"],"names":[],"mappings":"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"}