@namzu/sdk 0.1.7 → 0.2.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 (532) hide show
  1. package/CHANGELOG.md +23 -5
  2. package/README.md +14 -9
  3. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  4. package/dist/agents/ReactiveAgent.js +5 -3
  5. package/dist/agents/ReactiveAgent.js.map +1 -1
  6. package/dist/agents/RouterAgent.d.ts.map +1 -1
  7. package/dist/agents/RouterAgent.js +3 -0
  8. package/dist/agents/RouterAgent.js.map +1 -1
  9. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  10. package/dist/agents/SupervisorAgent.js +18 -5
  11. package/dist/agents/SupervisorAgent.js.map +1 -1
  12. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  13. package/dist/bridge/a2a/mapper.js +6 -0
  14. package/dist/bridge/a2a/mapper.js.map +1 -1
  15. package/dist/bridge/a2a/task.d.ts +2 -2
  16. package/dist/bridge/a2a/task.d.ts.map +1 -1
  17. package/dist/bridge/a2a/task.js.map +1 -1
  18. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  19. package/dist/bridge/sse/mapper.js +6 -0
  20. package/dist/bridge/sse/mapper.js.map +1 -1
  21. package/dist/constants/a2a/index.d.ts +2 -2
  22. package/dist/constants/a2a/index.d.ts.map +1 -1
  23. package/dist/constants/a2a/index.js.map +1 -1
  24. package/dist/contracts/api.d.ts +22 -3
  25. package/dist/contracts/api.d.ts.map +1 -1
  26. package/dist/contracts/index.d.ts +3 -1
  27. package/dist/contracts/index.d.ts.map +1 -1
  28. package/dist/contracts/index.js.map +1 -1
  29. package/dist/gateway/local.d.ts.map +1 -1
  30. package/dist/gateway/local.js +6 -0
  31. package/dist/gateway/local.js.map +1 -1
  32. package/dist/index.d.ts +4 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/manager/agent/__tests__/lifecycle.test.d.ts +2 -0
  37. package/dist/manager/agent/__tests__/lifecycle.test.d.ts.map +1 -0
  38. package/dist/manager/agent/__tests__/lifecycle.test.js +302 -0
  39. package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -0
  40. package/dist/manager/agent/lifecycle.d.ts +58 -3
  41. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  42. package/dist/manager/agent/lifecycle.js +311 -12
  43. package/dist/manager/agent/lifecycle.js.map +1 -1
  44. package/dist/manager/run/persistence.d.ts +8 -1
  45. package/dist/manager/run/persistence.d.ts.map +1 -1
  46. package/dist/manager/run/persistence.js +15 -0
  47. package/dist/manager/run/persistence.js.map +1 -1
  48. package/dist/run/reporter.d.ts.map +1 -1
  49. package/dist/run/reporter.js +25 -0
  50. package/dist/run/reporter.js.map +1 -1
  51. package/dist/runtime/query/__tests__/context.test.d.ts +2 -0
  52. package/dist/runtime/query/__tests__/context.test.d.ts.map +1 -0
  53. package/dist/runtime/query/__tests__/context.test.js +84 -0
  54. package/dist/runtime/query/__tests__/context.test.js.map +1 -0
  55. package/dist/runtime/query/context.d.ts +55 -2
  56. package/dist/runtime/query/context.d.ts.map +1 -1
  57. package/dist/runtime/query/context.js +48 -8
  58. package/dist/runtime/query/context.js.map +1 -1
  59. package/dist/runtime/query/events.d.ts.map +1 -1
  60. package/dist/runtime/query/events.js +8 -0
  61. package/dist/runtime/query/events.js.map +1 -1
  62. package/dist/runtime/query/index.d.ts +25 -2
  63. package/dist/runtime/query/index.d.ts.map +1 -1
  64. package/dist/runtime/query/index.js +11 -1
  65. package/dist/runtime/query/index.js.map +1 -1
  66. package/dist/session/__tests__/integration/_fixtures.d.ts +115 -0
  67. package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -0
  68. package/dist/session/__tests__/integration/_fixtures.js +198 -0
  69. package/dist/session/__tests__/integration/_fixtures.js.map +1 -0
  70. package/dist/session/__tests__/integration/capacity-caps.test.d.ts +13 -0
  71. package/dist/session/__tests__/integration/capacity-caps.test.d.ts.map +1 -0
  72. package/dist/session/__tests__/integration/capacity-caps.test.js +116 -0
  73. package/dist/session/__tests__/integration/capacity-caps.test.js.map +1 -0
  74. package/dist/session/__tests__/integration/e2e-spawn.test.d.ts +18 -0
  75. package/dist/session/__tests__/integration/e2e-spawn.test.d.ts.map +1 -0
  76. package/dist/session/__tests__/integration/e2e-spawn.test.js +226 -0
  77. package/dist/session/__tests__/integration/e2e-spawn.test.js.map +1 -0
  78. package/dist/session/__tests__/integration/event-stream-ordering.test.d.ts +15 -0
  79. package/dist/session/__tests__/integration/event-stream-ordering.test.d.ts.map +1 -0
  80. package/dist/session/__tests__/integration/event-stream-ordering.test.js +323 -0
  81. package/dist/session/__tests__/integration/event-stream-ordering.test.js.map +1 -0
  82. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.d.ts +12 -0
  83. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.d.ts.map +1 -0
  84. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js +170 -0
  85. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js.map +1 -0
  86. package/dist/session/__tests__/integration/handoff-illegal-transition.test.d.ts +18 -0
  87. package/dist/session/__tests__/integration/handoff-illegal-transition.test.d.ts.map +1 -0
  88. package/dist/session/__tests__/integration/handoff-illegal-transition.test.js +146 -0
  89. package/dist/session/__tests__/integration/handoff-illegal-transition.test.js.map +1 -0
  90. package/dist/session/__tests__/integration/handoff-single-e2e.test.d.ts +15 -0
  91. package/dist/session/__tests__/integration/handoff-single-e2e.test.d.ts.map +1 -0
  92. package/dist/session/__tests__/integration/handoff-single-e2e.test.js +163 -0
  93. package/dist/session/__tests__/integration/handoff-single-e2e.test.js.map +1 -0
  94. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.d.ts +12 -0
  95. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.d.ts.map +1 -0
  96. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js +157 -0
  97. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js.map +1 -0
  98. package/dist/session/__tests__/integration/migration-filesystem.test.d.ts +11 -0
  99. package/dist/session/__tests__/integration/migration-filesystem.test.d.ts.map +1 -0
  100. package/dist/session/__tests__/integration/migration-filesystem.test.js +140 -0
  101. package/dist/session/__tests__/integration/migration-filesystem.test.js.map +1 -0
  102. package/dist/session/__tests__/integration/migration-id-prefix.test.d.ts +13 -0
  103. package/dist/session/__tests__/integration/migration-id-prefix.test.d.ts.map +1 -0
  104. package/dist/session/__tests__/integration/migration-id-prefix.test.js +84 -0
  105. package/dist/session/__tests__/integration/migration-id-prefix.test.js.map +1 -0
  106. package/dist/session/__tests__/integration/prev-artifact-dag.test.d.ts +14 -0
  107. package/dist/session/__tests__/integration/prev-artifact-dag.test.d.ts.map +1 -0
  108. package/dist/session/__tests__/integration/prev-artifact-dag.test.js +241 -0
  109. package/dist/session/__tests__/integration/prev-artifact-dag.test.js.map +1 -0
  110. package/dist/session/__tests__/integration/retention-archive.test.d.ts +12 -0
  111. package/dist/session/__tests__/integration/retention-archive.test.d.ts.map +1 -0
  112. package/dist/session/__tests__/integration/retention-archive.test.js +186 -0
  113. package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -0
  114. package/dist/session/__tests__/integration/summary-materialization-e2e.test.d.ts +18 -0
  115. package/dist/session/__tests__/integration/summary-materialization-e2e.test.d.ts.map +1 -0
  116. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js +200 -0
  117. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js.map +1 -0
  118. package/dist/session/__tests__/integration/tenant-isolation.test.d.ts +14 -0
  119. package/dist/session/__tests__/integration/tenant-isolation.test.d.ts.map +1 -0
  120. package/dist/session/__tests__/integration/tenant-isolation.test.js +180 -0
  121. package/dist/session/__tests__/integration/tenant-isolation.test.js.map +1 -0
  122. package/dist/session/errors.d.ts +60 -0
  123. package/dist/session/errors.d.ts.map +1 -0
  124. package/dist/session/errors.js +50 -0
  125. package/dist/session/errors.js.map +1 -0
  126. package/dist/session/events/index.d.ts +4 -0
  127. package/dist/session/events/index.d.ts.map +1 -0
  128. package/dist/session/events/index.js +8 -0
  129. package/dist/session/events/index.js.map +1 -0
  130. package/dist/session/events/schema-version.d.ts +13 -0
  131. package/dist/session/events/schema-version.d.ts.map +1 -0
  132. package/dist/session/events/schema-version.js +12 -0
  133. package/dist/session/events/schema-version.js.map +1 -0
  134. package/dist/session/events/types.d.ts +64 -0
  135. package/dist/session/events/types.d.ts.map +1 -0
  136. package/dist/session/events/types.js +2 -0
  137. package/dist/session/events/types.js.map +1 -0
  138. package/dist/session/handoff/__tests__/broadcast.test.d.ts +2 -0
  139. package/dist/session/handoff/__tests__/broadcast.test.d.ts.map +1 -0
  140. package/dist/session/handoff/__tests__/broadcast.test.js +243 -0
  141. package/dist/session/handoff/__tests__/broadcast.test.js.map +1 -0
  142. package/dist/session/handoff/__tests__/capacity.test.d.ts +2 -0
  143. package/dist/session/handoff/__tests__/capacity.test.d.ts.map +1 -0
  144. package/dist/session/handoff/__tests__/capacity.test.js +100 -0
  145. package/dist/session/handoff/__tests__/capacity.test.js.map +1 -0
  146. package/dist/session/handoff/__tests__/single.test.d.ts +2 -0
  147. package/dist/session/handoff/__tests__/single.test.d.ts.map +1 -0
  148. package/dist/session/handoff/__tests__/single.test.js +230 -0
  149. package/dist/session/handoff/__tests__/single.test.js.map +1 -0
  150. package/dist/session/handoff/assignment.d.ts +59 -0
  151. package/dist/session/handoff/assignment.d.ts.map +1 -0
  152. package/dist/session/handoff/assignment.js +11 -0
  153. package/dist/session/handoff/assignment.js.map +1 -0
  154. package/dist/session/handoff/broadcast.d.ts +47 -0
  155. package/dist/session/handoff/broadcast.d.ts.map +1 -0
  156. package/dist/session/handoff/broadcast.js +296 -0
  157. package/dist/session/handoff/broadcast.js.map +1 -0
  158. package/dist/session/handoff/capacity.d.ts +66 -0
  159. package/dist/session/handoff/capacity.d.ts.map +1 -0
  160. package/dist/session/handoff/capacity.js +60 -0
  161. package/dist/session/handoff/capacity.js.map +1 -0
  162. package/dist/session/handoff/events.d.ts +66 -0
  163. package/dist/session/handoff/events.d.ts.map +1 -0
  164. package/dist/session/handoff/events.js +13 -0
  165. package/dist/session/handoff/events.js.map +1 -0
  166. package/dist/session/handoff/index.d.ts +12 -0
  167. package/dist/session/handoff/index.d.ts.map +1 -0
  168. package/dist/session/handoff/index.js +9 -0
  169. package/dist/session/handoff/index.js.map +1 -0
  170. package/dist/session/handoff/single.d.ts +62 -0
  171. package/dist/session/handoff/single.d.ts.map +1 -0
  172. package/dist/session/handoff/single.js +217 -0
  173. package/dist/session/handoff/single.js.map +1 -0
  174. package/dist/session/handoff/version.d.ts +52 -0
  175. package/dist/session/handoff/version.d.ts.map +1 -0
  176. package/dist/session/handoff/version.js +36 -0
  177. package/dist/session/handoff/version.js.map +1 -0
  178. package/dist/session/hierarchy/__tests__/session.test.d.ts +2 -0
  179. package/dist/session/hierarchy/__tests__/session.test.d.ts.map +1 -0
  180. package/dist/session/hierarchy/__tests__/session.test.js +67 -0
  181. package/dist/session/hierarchy/__tests__/session.test.js.map +1 -0
  182. package/dist/session/hierarchy/actor.d.ts +26 -0
  183. package/dist/session/hierarchy/actor.d.ts.map +1 -0
  184. package/dist/session/hierarchy/actor.js +2 -0
  185. package/dist/session/hierarchy/actor.js.map +1 -0
  186. package/dist/session/hierarchy/index.d.ts +8 -0
  187. package/dist/session/hierarchy/index.d.ts.map +1 -0
  188. package/dist/session/hierarchy/index.js +4 -0
  189. package/dist/session/hierarchy/index.js.map +1 -0
  190. package/dist/session/hierarchy/lineage.d.ts +15 -0
  191. package/dist/session/hierarchy/lineage.d.ts.map +1 -0
  192. package/dist/session/hierarchy/lineage.js +2 -0
  193. package/dist/session/hierarchy/lineage.js.map +1 -0
  194. package/dist/session/hierarchy/project.d.ts +40 -0
  195. package/dist/session/hierarchy/project.d.ts.map +1 -0
  196. package/dist/session/hierarchy/project.js +2 -0
  197. package/dist/session/hierarchy/project.js.map +1 -0
  198. package/dist/session/hierarchy/session.d.ts +59 -0
  199. package/dist/session/hierarchy/session.d.ts.map +1 -0
  200. package/dist/session/hierarchy/session.js +51 -0
  201. package/dist/session/hierarchy/session.js.map +1 -0
  202. package/dist/session/hierarchy/sub-session.d.ts +76 -0
  203. package/dist/session/hierarchy/sub-session.d.ts.map +1 -0
  204. package/dist/session/hierarchy/sub-session.js +2 -0
  205. package/dist/session/hierarchy/sub-session.js.map +1 -0
  206. package/dist/session/hierarchy/tenant.d.ts +13 -0
  207. package/dist/session/hierarchy/tenant.d.ts.map +1 -0
  208. package/dist/session/hierarchy/tenant.js +2 -0
  209. package/dist/session/hierarchy/tenant.js.map +1 -0
  210. package/dist/session/index.d.ts +10 -0
  211. package/dist/session/index.d.ts.map +1 -0
  212. package/dist/session/index.js +15 -0
  213. package/dist/session/index.js.map +1 -0
  214. package/dist/session/intervention/__tests__/prev-artifact.test.d.ts +2 -0
  215. package/dist/session/intervention/__tests__/prev-artifact.test.d.ts.map +1 -0
  216. package/dist/session/intervention/__tests__/prev-artifact.test.js +179 -0
  217. package/dist/session/intervention/__tests__/prev-artifact.test.js.map +1 -0
  218. package/dist/session/intervention/index.d.ts +3 -0
  219. package/dist/session/intervention/index.d.ts.map +1 -0
  220. package/dist/session/intervention/index.js +8 -0
  221. package/dist/session/intervention/index.js.map +1 -0
  222. package/dist/session/intervention/prev-artifact.d.ts +103 -0
  223. package/dist/session/intervention/prev-artifact.d.ts.map +1 -0
  224. package/dist/session/intervention/prev-artifact.js +112 -0
  225. package/dist/session/intervention/prev-artifact.js.map +1 -0
  226. package/dist/session/migration/__tests__/filesystem.test.d.ts +2 -0
  227. package/dist/session/migration/__tests__/filesystem.test.d.ts.map +1 -0
  228. package/dist/session/migration/__tests__/filesystem.test.js +188 -0
  229. package/dist/session/migration/__tests__/filesystem.test.js.map +1 -0
  230. package/dist/session/migration/__tests__/id-prefix.test.d.ts +2 -0
  231. package/dist/session/migration/__tests__/id-prefix.test.d.ts.map +1 -0
  232. package/dist/session/migration/__tests__/id-prefix.test.js +83 -0
  233. package/dist/session/migration/__tests__/id-prefix.test.js.map +1 -0
  234. package/dist/session/migration/__tests__/marker.test.d.ts +2 -0
  235. package/dist/session/migration/__tests__/marker.test.d.ts.map +1 -0
  236. package/dist/session/migration/__tests__/marker.test.js +75 -0
  237. package/dist/session/migration/__tests__/marker.test.js.map +1 -0
  238. package/dist/session/migration/errors.d.ts +26 -0
  239. package/dist/session/migration/errors.d.ts.map +1 -0
  240. package/dist/session/migration/errors.js +22 -0
  241. package/dist/session/migration/errors.js.map +1 -0
  242. package/dist/session/migration/filesystem.d.ts +94 -0
  243. package/dist/session/migration/filesystem.d.ts.map +1 -0
  244. package/dist/session/migration/filesystem.js +319 -0
  245. package/dist/session/migration/filesystem.js.map +1 -0
  246. package/dist/session/migration/id-prefix.d.ts +98 -0
  247. package/dist/session/migration/id-prefix.d.ts.map +1 -0
  248. package/dist/session/migration/id-prefix.js +116 -0
  249. package/dist/session/migration/id-prefix.js.map +1 -0
  250. package/dist/session/migration/index.d.ts +8 -0
  251. package/dist/session/migration/index.d.ts.map +1 -0
  252. package/dist/session/migration/index.js +8 -0
  253. package/dist/session/migration/index.js.map +1 -0
  254. package/dist/session/migration/marker.d.ts +57 -0
  255. package/dist/session/migration/marker.d.ts.map +1 -0
  256. package/dist/session/migration/marker.js +111 -0
  257. package/dist/session/migration/marker.js.map +1 -0
  258. package/dist/session/retention/__tests__/archive.test.d.ts +2 -0
  259. package/dist/session/retention/__tests__/archive.test.d.ts.map +1 -0
  260. package/dist/session/retention/__tests__/archive.test.js +252 -0
  261. package/dist/session/retention/__tests__/archive.test.js.map +1 -0
  262. package/dist/session/retention/__tests__/disk-backend.test.d.ts +2 -0
  263. package/dist/session/retention/__tests__/disk-backend.test.d.ts.map +1 -0
  264. package/dist/session/retention/__tests__/disk-backend.test.js +154 -0
  265. package/dist/session/retention/__tests__/disk-backend.test.js.map +1 -0
  266. package/dist/session/retention/archive-backend-ref.d.ts +18 -0
  267. package/dist/session/retention/archive-backend-ref.d.ts.map +1 -0
  268. package/dist/session/retention/archive-backend-ref.js +2 -0
  269. package/dist/session/retention/archive-backend-ref.js.map +1 -0
  270. package/dist/session/retention/archive.d.ts +130 -0
  271. package/dist/session/retention/archive.d.ts.map +1 -0
  272. package/dist/session/retention/archive.js +203 -0
  273. package/dist/session/retention/archive.js.map +1 -0
  274. package/dist/session/retention/backend.d.ts +101 -0
  275. package/dist/session/retention/backend.d.ts.map +1 -0
  276. package/dist/session/retention/backend.js +15 -0
  277. package/dist/session/retention/backend.js.map +1 -0
  278. package/dist/session/retention/disk-backend.d.ts +59 -0
  279. package/dist/session/retention/disk-backend.d.ts.map +1 -0
  280. package/dist/session/retention/disk-backend.js +236 -0
  281. package/dist/session/retention/disk-backend.js.map +1 -0
  282. package/dist/session/retention/index.d.ts +9 -0
  283. package/dist/session/retention/index.d.ts.map +1 -0
  284. package/dist/session/retention/index.js +6 -0
  285. package/dist/session/retention/index.js.map +1 -0
  286. package/dist/session/retention/policy.d.ts +49 -0
  287. package/dist/session/retention/policy.d.ts.map +1 -0
  288. package/dist/session/retention/policy.js +21 -0
  289. package/dist/session/retention/policy.js.map +1 -0
  290. package/dist/session/summary/__tests__/materialize.test.d.ts +2 -0
  291. package/dist/session/summary/__tests__/materialize.test.d.ts.map +1 -0
  292. package/dist/session/summary/__tests__/materialize.test.js +269 -0
  293. package/dist/session/summary/__tests__/materialize.test.js.map +1 -0
  294. package/dist/session/summary/deliverable.d.ts +74 -0
  295. package/dist/session/summary/deliverable.d.ts.map +1 -0
  296. package/dist/session/summary/deliverable.js +20 -0
  297. package/dist/session/summary/deliverable.js.map +1 -0
  298. package/dist/session/summary/index.d.ts +6 -0
  299. package/dist/session/summary/index.d.ts.map +1 -0
  300. package/dist/session/summary/index.js +9 -0
  301. package/dist/session/summary/index.js.map +1 -0
  302. package/dist/session/summary/materialize.d.ts +82 -0
  303. package/dist/session/summary/materialize.d.ts.map +1 -0
  304. package/dist/session/summary/materialize.js +117 -0
  305. package/dist/session/summary/materialize.js.map +1 -0
  306. package/dist/session/summary/ref.d.ts +91 -0
  307. package/dist/session/summary/ref.d.ts.map +1 -0
  308. package/dist/session/summary/ref.js +51 -0
  309. package/dist/session/summary/ref.js.map +1 -0
  310. package/dist/session/workspace/__tests__/git-worktree.test.d.ts +2 -0
  311. package/dist/session/workspace/__tests__/git-worktree.test.d.ts.map +1 -0
  312. package/dist/session/workspace/__tests__/git-worktree.test.js +244 -0
  313. package/dist/session/workspace/__tests__/git-worktree.test.js.map +1 -0
  314. package/dist/session/workspace/__tests__/path-builder.test.d.ts +2 -0
  315. package/dist/session/workspace/__tests__/path-builder.test.d.ts.map +1 -0
  316. package/dist/session/workspace/__tests__/path-builder.test.js +37 -0
  317. package/dist/session/workspace/__tests__/path-builder.test.js.map +1 -0
  318. package/dist/session/workspace/driver.d.ts +55 -0
  319. package/dist/session/workspace/driver.d.ts.map +1 -0
  320. package/dist/session/workspace/driver.js +12 -0
  321. package/dist/session/workspace/driver.js.map +1 -0
  322. package/dist/session/workspace/git-worktree.d.ts +65 -0
  323. package/dist/session/workspace/git-worktree.d.ts.map +1 -0
  324. package/dist/session/workspace/git-worktree.js +156 -0
  325. package/dist/session/workspace/git-worktree.js.map +1 -0
  326. package/dist/session/workspace/index.d.ts +8 -0
  327. package/dist/session/workspace/index.d.ts.map +1 -0
  328. package/dist/session/workspace/index.js +7 -0
  329. package/dist/session/workspace/index.js.map +1 -0
  330. package/dist/session/workspace/path-builder.d.ts +50 -0
  331. package/dist/session/workspace/path-builder.d.ts.map +1 -0
  332. package/dist/session/workspace/path-builder.js +50 -0
  333. package/dist/session/workspace/path-builder.js.map +1 -0
  334. package/dist/session/workspace/ref.d.ts +46 -0
  335. package/dist/session/workspace/ref.d.ts.map +1 -0
  336. package/dist/session/workspace/ref.js +11 -0
  337. package/dist/session/workspace/ref.js.map +1 -0
  338. package/dist/session/workspace/registry.d.ts +26 -0
  339. package/dist/session/workspace/registry.d.ts.map +1 -0
  340. package/dist/session/workspace/registry.js +35 -0
  341. package/dist/session/workspace/registry.js.map +1 -0
  342. package/dist/store/conversation/memory.d.ts +22 -0
  343. package/dist/store/conversation/memory.d.ts.map +1 -1
  344. package/dist/store/conversation/memory.js +22 -0
  345. package/dist/store/conversation/memory.js.map +1 -1
  346. package/dist/store/session/__tests__/disk.test.d.ts +2 -0
  347. package/dist/store/session/__tests__/disk.test.d.ts.map +1 -0
  348. package/dist/store/session/__tests__/disk.test.js +240 -0
  349. package/dist/store/session/__tests__/disk.test.js.map +1 -0
  350. package/dist/store/session/__tests__/memory.test.d.ts +2 -0
  351. package/dist/store/session/__tests__/memory.test.d.ts.map +1 -0
  352. package/dist/store/session/__tests__/memory.test.js +217 -0
  353. package/dist/store/session/__tests__/memory.test.js.map +1 -0
  354. package/dist/store/session/disk.d.ts +85 -0
  355. package/dist/store/session/disk.d.ts.map +1 -0
  356. package/dist/store/session/disk.js +757 -0
  357. package/dist/store/session/disk.js.map +1 -0
  358. package/dist/store/session/index.d.ts +7 -0
  359. package/dist/store/session/index.d.ts.map +1 -0
  360. package/dist/store/session/index.js +11 -0
  361. package/dist/store/session/index.js.map +1 -0
  362. package/dist/store/session/linkage.d.ts +38 -0
  363. package/dist/store/session/linkage.d.ts.map +1 -0
  364. package/dist/store/session/linkage.js +64 -0
  365. package/dist/store/session/linkage.js.map +1 -0
  366. package/dist/store/session/memory.d.ts +48 -0
  367. package/dist/store/session/memory.d.ts.map +1 -0
  368. package/dist/store/session/memory.js +322 -0
  369. package/dist/store/session/memory.js.map +1 -0
  370. package/dist/store/session/messages.d.ts +20 -0
  371. package/dist/store/session/messages.d.ts.map +1 -0
  372. package/dist/store/session/messages.js +12 -0
  373. package/dist/store/session/messages.js.map +1 -0
  374. package/dist/tools/builtins/__tests__/structuredOutput.example.d.ts +1 -1
  375. package/dist/types/agent/base.d.ts +28 -1
  376. package/dist/types/agent/base.d.ts.map +1 -1
  377. package/dist/types/agent/task.d.ts +50 -2
  378. package/dist/types/agent/task.d.ts.map +1 -1
  379. package/dist/types/agent/task.js.map +1 -1
  380. package/dist/types/conversation/index.d.ts +7 -0
  381. package/dist/types/conversation/index.d.ts.map +1 -1
  382. package/dist/types/ids/index.d.ts +26 -3
  383. package/dist/types/ids/index.d.ts.map +1 -1
  384. package/dist/types/ids/index.js +8 -1
  385. package/dist/types/ids/index.js.map +1 -1
  386. package/dist/types/invocation/__tests__/state.test.js +36 -29
  387. package/dist/types/invocation/__tests__/state.test.js.map +1 -1
  388. package/dist/types/invocation/index.d.ts +20 -4
  389. package/dist/types/invocation/index.d.ts.map +1 -1
  390. package/dist/types/invocation/index.js +10 -7
  391. package/dist/types/invocation/index.js.map +1 -1
  392. package/dist/types/run/config.d.ts +11 -1
  393. package/dist/types/run/config.d.ts.map +1 -1
  394. package/dist/types/run/events.d.ts +26 -1
  395. package/dist/types/run/events.d.ts.map +1 -1
  396. package/dist/types/run/index.d.ts.map +1 -1
  397. package/dist/types/run/index.js +8 -0
  398. package/dist/types/run/index.js.map +1 -1
  399. package/dist/types/run/metadata.d.ts +24 -1
  400. package/dist/types/run/metadata.d.ts.map +1 -1
  401. package/dist/types/run/status.d.ts +26 -0
  402. package/dist/types/run/status.d.ts.map +1 -0
  403. package/dist/types/run/status.js +2 -0
  404. package/dist/types/run/status.js.map +1 -0
  405. package/dist/types/session/ids.d.ts +18 -0
  406. package/dist/types/session/ids.d.ts.map +1 -0
  407. package/dist/types/session/ids.js +12 -0
  408. package/dist/types/session/ids.js.map +1 -0
  409. package/dist/types/session/index.d.ts +3 -0
  410. package/dist/types/session/index.d.ts.map +1 -0
  411. package/dist/types/session/index.js +5 -0
  412. package/dist/types/session/index.js.map +1 -0
  413. package/dist/types/session/store.d.ts +188 -0
  414. package/dist/types/session/store.d.ts.map +1 -0
  415. package/dist/types/session/store.js +14 -0
  416. package/dist/types/session/store.js.map +1 -0
  417. package/dist/utils/id.d.ts +18 -1
  418. package/dist/utils/id.d.ts.map +1 -1
  419. package/dist/utils/id.js +42 -4
  420. package/dist/utils/id.js.map +1 -1
  421. package/package.json +1 -1
  422. package/src/agents/ReactiveAgent.ts +7 -3
  423. package/src/agents/RouterAgent.ts +5 -0
  424. package/src/agents/SupervisorAgent.ts +26 -6
  425. package/src/bridge/a2a/mapper.ts +7 -0
  426. package/src/bridge/a2a/task.ts +2 -2
  427. package/src/bridge/sse/mapper.ts +8 -1
  428. package/src/constants/a2a/index.ts +2 -2
  429. package/src/contracts/api.ts +23 -3
  430. package/src/contracts/index.ts +2 -0
  431. package/src/gateway/local.ts +6 -0
  432. package/src/index.ts +14 -0
  433. package/src/manager/agent/__tests__/lifecycle.test.ts +452 -0
  434. package/src/manager/agent/lifecycle.ts +434 -19
  435. package/src/manager/run/persistence.ts +20 -1
  436. package/src/run/reporter.ts +28 -0
  437. package/src/runtime/query/__tests__/context.test.ts +101 -0
  438. package/src/runtime/query/context.ts +106 -10
  439. package/src/runtime/query/events.ts +8 -0
  440. package/src/runtime/query/index.ts +41 -3
  441. package/src/session/__tests__/integration/_fixtures.ts +282 -0
  442. package/src/session/__tests__/integration/capacity-caps.test.ts +164 -0
  443. package/src/session/__tests__/integration/e2e-spawn.test.ts +278 -0
  444. package/src/session/__tests__/integration/event-stream-ordering.test.ts +403 -0
  445. package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +245 -0
  446. package/src/session/__tests__/integration/handoff-illegal-transition.test.ts +179 -0
  447. package/src/session/__tests__/integration/handoff-single-e2e.test.ts +220 -0
  448. package/src/session/__tests__/integration/hierarchy-lifecycle.test.ts +237 -0
  449. package/src/session/__tests__/integration/migration-filesystem.test.ts +209 -0
  450. package/src/session/__tests__/integration/migration-id-prefix.test.ts +101 -0
  451. package/src/session/__tests__/integration/prev-artifact-dag.test.ts +318 -0
  452. package/src/session/__tests__/integration/retention-archive.test.ts +231 -0
  453. package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +237 -0
  454. package/src/session/__tests__/integration/tenant-isolation.test.ts +282 -0
  455. package/src/session/errors.ts +70 -0
  456. package/src/session/events/index.ts +16 -0
  457. package/src/session/events/schema-version.ts +13 -0
  458. package/src/session/events/types.ts +71 -0
  459. package/src/session/handoff/__tests__/broadcast.test.ts +350 -0
  460. package/src/session/handoff/__tests__/capacity.test.ts +123 -0
  461. package/src/session/handoff/__tests__/single.test.ts +316 -0
  462. package/src/session/handoff/assignment.ts +62 -0
  463. package/src/session/handoff/broadcast.ts +381 -0
  464. package/src/session/handoff/capacity.ts +121 -0
  465. package/src/session/handoff/events.ts +72 -0
  466. package/src/session/handoff/index.ts +29 -0
  467. package/src/session/handoff/single.ts +288 -0
  468. package/src/session/handoff/version.ts +59 -0
  469. package/src/session/hierarchy/__tests__/session.test.ts +92 -0
  470. package/src/session/hierarchy/actor.ts +17 -0
  471. package/src/session/hierarchy/index.ts +17 -0
  472. package/src/session/hierarchy/lineage.ts +15 -0
  473. package/src/session/hierarchy/project.ts +41 -0
  474. package/src/session/hierarchy/session.ts +97 -0
  475. package/src/session/hierarchy/sub-session.ts +92 -0
  476. package/src/session/hierarchy/tenant.ts +13 -0
  477. package/src/session/index.ts +15 -0
  478. package/src/session/intervention/__tests__/prev-artifact.test.ts +234 -0
  479. package/src/session/intervention/index.ts +16 -0
  480. package/src/session/intervention/prev-artifact.ts +180 -0
  481. package/src/session/migration/__tests__/filesystem.test.ts +263 -0
  482. package/src/session/migration/__tests__/id-prefix.test.ts +101 -0
  483. package/src/session/migration/__tests__/marker.test.ts +84 -0
  484. package/src/session/migration/errors.ts +23 -0
  485. package/src/session/migration/filesystem.ts +401 -0
  486. package/src/session/migration/id-prefix.ts +146 -0
  487. package/src/session/migration/index.ts +38 -0
  488. package/src/session/migration/marker.ts +131 -0
  489. package/src/session/retention/__tests__/archive.test.ts +316 -0
  490. package/src/session/retention/__tests__/disk-backend.test.ts +180 -0
  491. package/src/session/retention/archive-backend-ref.ts +17 -0
  492. package/src/session/retention/archive.ts +281 -0
  493. package/src/session/retention/backend.ts +107 -0
  494. package/src/session/retention/disk-backend.ts +304 -0
  495. package/src/session/retention/index.ts +16 -0
  496. package/src/session/retention/policy.ts +53 -0
  497. package/src/session/summary/__tests__/materialize.test.ts +341 -0
  498. package/src/session/summary/deliverable.ts +84 -0
  499. package/src/session/summary/index.ts +31 -0
  500. package/src/session/summary/materialize.ts +169 -0
  501. package/src/session/summary/ref.ts +104 -0
  502. package/src/session/workspace/__tests__/git-worktree.test.ts +258 -0
  503. package/src/session/workspace/__tests__/path-builder.test.ts +51 -0
  504. package/src/session/workspace/driver.ts +60 -0
  505. package/src/session/workspace/git-worktree.ts +209 -0
  506. package/src/session/workspace/index.ts +25 -0
  507. package/src/session/workspace/path-builder.ts +71 -0
  508. package/src/session/workspace/ref.ts +50 -0
  509. package/src/session/workspace/registry.ts +42 -0
  510. package/src/store/conversation/memory.ts +23 -0
  511. package/src/store/session/__tests__/disk.test.ts +346 -0
  512. package/src/store/session/__tests__/memory.test.ts +327 -0
  513. package/src/store/session/disk.ts +920 -0
  514. package/src/store/session/index.ts +14 -0
  515. package/src/store/session/linkage.ts +80 -0
  516. package/src/store/session/memory.ts +400 -0
  517. package/src/store/session/messages.ts +21 -0
  518. package/src/types/agent/base.ts +31 -1
  519. package/src/types/agent/task.ts +58 -2
  520. package/src/types/conversation/index.ts +7 -0
  521. package/src/types/ids/index.ts +41 -3
  522. package/src/types/invocation/__tests__/state.test.ts +37 -29
  523. package/src/types/invocation/index.ts +26 -10
  524. package/src/types/run/config.ts +12 -1
  525. package/src/types/run/events.ts +36 -1
  526. package/src/types/run/index.ts +8 -0
  527. package/src/types/run/metadata.ts +24 -1
  528. package/src/types/run/status.ts +33 -0
  529. package/src/types/session/ids.ts +34 -0
  530. package/src/types/session/index.ts +28 -0
  531. package/src/types/session/store.ts +229 -0
  532. package/src/utils/id.ts +55 -4
@@ -0,0 +1,244 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { WorkspaceBackendError } from '../../errors.js';
3
+ import { GitWorktreeDriver, parseWorktreeList, } from '../git-worktree.js';
4
+ function stubLogger() {
5
+ return {
6
+ debug: vi.fn(),
7
+ info: vi.fn(),
8
+ warn: vi.fn(),
9
+ error: vi.fn(),
10
+ child() {
11
+ return stubLogger();
12
+ },
13
+ };
14
+ }
15
+ function okExec(stdout = '', stderr = '') {
16
+ return { stdout, stderr };
17
+ }
18
+ describe('GitWorktreeDriver', () => {
19
+ it('create: invokes `git worktree add` with argv array (no shell interpolation)', async () => {
20
+ const calls = [];
21
+ const exec = async (file, args) => {
22
+ calls.push({ file, args: [...args] });
23
+ return okExec();
24
+ };
25
+ const driver = new GitWorktreeDriver({
26
+ repoRoot: '/repo',
27
+ logger: stubLogger(),
28
+ execFile: exec,
29
+ });
30
+ const ref = await driver.create({ label: 'foo', baseRef: 'main' });
31
+ expect(ref.id.startsWith('wsp_')).toBe(true);
32
+ expect(ref.meta.backend).toBe('git-worktree');
33
+ expect(ref.meta.branch).toBe('namzu/foo');
34
+ expect(calls).toHaveLength(1);
35
+ const call = calls[0];
36
+ if (!call)
37
+ throw new Error('missing call');
38
+ expect(call.file).toBe('git');
39
+ expect(call.args).toEqual([
40
+ '-C',
41
+ '/repo',
42
+ 'worktree',
43
+ 'add',
44
+ '-b',
45
+ 'namzu/foo',
46
+ '/repo/.namzu/worktrees/foo',
47
+ 'main',
48
+ ]);
49
+ });
50
+ it('create: omits baseRef argv slot when not supplied', async () => {
51
+ const calls = [];
52
+ const exec = async (file, args) => {
53
+ calls.push({ file, args: [...args] });
54
+ return okExec();
55
+ };
56
+ const driver = new GitWorktreeDriver({
57
+ repoRoot: '/repo',
58
+ logger: stubLogger(),
59
+ execFile: exec,
60
+ });
61
+ await driver.create({ label: 'bar' });
62
+ const call = calls[0];
63
+ if (!call)
64
+ throw new Error('missing call');
65
+ expect(call.args.at(-1)).toBe('/repo/.namzu/worktrees/bar');
66
+ });
67
+ it('create: wraps failures in WorkspaceBackendError', async () => {
68
+ const exec = async () => {
69
+ throw new Error('invalid baseRef');
70
+ };
71
+ const driver = new GitWorktreeDriver({
72
+ repoRoot: '/repo',
73
+ logger: stubLogger(),
74
+ execFile: exec,
75
+ });
76
+ await expect(driver.create({ baseRef: 'does-not-exist' })).rejects.toBeInstanceOf(WorkspaceBackendError);
77
+ });
78
+ it('dispose: removes worktree with --force', async () => {
79
+ const calls = [];
80
+ const exec = async (_file, args) => {
81
+ calls.push(args);
82
+ return okExec();
83
+ };
84
+ const driver = new GitWorktreeDriver({
85
+ repoRoot: '/repo',
86
+ logger: stubLogger(),
87
+ execFile: exec,
88
+ });
89
+ const ref = {
90
+ id: 'wsp_x',
91
+ meta: {
92
+ backend: 'git-worktree',
93
+ repoRoot: '/repo',
94
+ branch: 'namzu/x',
95
+ worktreePath: '/repo/.namzu/worktrees/x',
96
+ },
97
+ createdAt: new Date(),
98
+ };
99
+ await driver.dispose(ref);
100
+ expect(calls[0]).toEqual([
101
+ '-C',
102
+ '/repo',
103
+ 'worktree',
104
+ 'remove',
105
+ '/repo/.namzu/worktrees/x',
106
+ '--force',
107
+ ]);
108
+ });
109
+ it('dispose: tolerates missing worktree ("not a working tree")', async () => {
110
+ const exec = async () => {
111
+ throw new Error("'/tmp/gone' is not a working tree");
112
+ };
113
+ const driver = new GitWorktreeDriver({
114
+ repoRoot: '/repo',
115
+ logger: stubLogger(),
116
+ execFile: exec,
117
+ });
118
+ const ref = {
119
+ id: 'wsp_x',
120
+ meta: {
121
+ backend: 'git-worktree',
122
+ repoRoot: '/repo',
123
+ branch: 'namzu/x',
124
+ worktreePath: '/tmp/gone',
125
+ },
126
+ createdAt: new Date(),
127
+ };
128
+ // Must NOT throw — roadmap Risk #3 mitigation.
129
+ await expect(driver.dispose(ref)).resolves.toBeUndefined();
130
+ });
131
+ it('dispose: surfaces unexpected failures as WorkspaceBackendError', async () => {
132
+ const exec = async () => {
133
+ throw new Error('fatal: permission denied');
134
+ };
135
+ const driver = new GitWorktreeDriver({
136
+ repoRoot: '/repo',
137
+ logger: stubLogger(),
138
+ execFile: exec,
139
+ });
140
+ const ref = {
141
+ id: 'wsp_x',
142
+ meta: {
143
+ backend: 'git-worktree',
144
+ repoRoot: '/repo',
145
+ branch: 'namzu/x',
146
+ worktreePath: '/repo/.namzu/worktrees/x',
147
+ },
148
+ createdAt: new Date(),
149
+ };
150
+ await expect(driver.dispose(ref)).rejects.toBeInstanceOf(WorkspaceBackendError);
151
+ });
152
+ it('inspect: parses list output and detects clean tree', async () => {
153
+ const listStdout = [
154
+ 'worktree /repo/.namzu/worktrees/x',
155
+ 'HEAD abc123',
156
+ 'branch refs/heads/namzu/x',
157
+ '',
158
+ ].join('\n');
159
+ let callIndex = 0;
160
+ const exec = async (_file, args) => {
161
+ callIndex++;
162
+ if (args.includes('list'))
163
+ return okExec(listStdout);
164
+ if (args.includes('status'))
165
+ return okExec('');
166
+ throw new Error(`unexpected call ${callIndex}`);
167
+ };
168
+ const driver = new GitWorktreeDriver({
169
+ repoRoot: '/repo',
170
+ logger: stubLogger(),
171
+ execFile: exec,
172
+ });
173
+ const ref = {
174
+ id: 'wsp_x',
175
+ meta: {
176
+ backend: 'git-worktree',
177
+ repoRoot: '/repo',
178
+ branch: 'namzu/x',
179
+ worktreePath: '/repo/.namzu/worktrees/x',
180
+ },
181
+ createdAt: new Date(),
182
+ };
183
+ const inspection = await driver.inspect(ref);
184
+ expect(inspection.exists).toBe(true);
185
+ expect(inspection.isDirty).toBe(false);
186
+ });
187
+ it('inspect: reports dirty when status --porcelain has output', async () => {
188
+ const listStdout = [
189
+ 'worktree /repo/.namzu/worktrees/x',
190
+ 'HEAD abc123',
191
+ 'branch refs/heads/namzu/x',
192
+ '',
193
+ ].join('\n');
194
+ const exec = async (_file, args) => {
195
+ if (args.includes('list'))
196
+ return okExec(listStdout);
197
+ if (args.includes('status'))
198
+ return okExec(' M path/to/file\n');
199
+ throw new Error('unexpected');
200
+ };
201
+ const driver = new GitWorktreeDriver({
202
+ repoRoot: '/repo',
203
+ logger: stubLogger(),
204
+ execFile: exec,
205
+ });
206
+ const ref = {
207
+ id: 'wsp_x',
208
+ meta: {
209
+ backend: 'git-worktree',
210
+ repoRoot: '/repo',
211
+ branch: 'namzu/x',
212
+ worktreePath: '/repo/.namzu/worktrees/x',
213
+ },
214
+ createdAt: new Date(),
215
+ };
216
+ const inspection = await driver.inspect(ref);
217
+ expect(inspection.isDirty).toBe(true);
218
+ });
219
+ });
220
+ describe('parseWorktreeList', () => {
221
+ it('returns null when the target path is absent', () => {
222
+ const stdout = ['worktree /other', 'HEAD abc', 'branch refs/heads/main', ''].join('\n');
223
+ expect(parseWorktreeList(stdout, '/missing')).toBeNull();
224
+ });
225
+ it('extracts head + branch for the matching entry', () => {
226
+ const stdout = [
227
+ 'worktree /repo/.namzu/worktrees/x',
228
+ 'HEAD deadbeef',
229
+ 'branch refs/heads/namzu/x',
230
+ '',
231
+ 'worktree /other',
232
+ 'HEAD abc',
233
+ 'bare',
234
+ '',
235
+ ].join('\n');
236
+ const entry = parseWorktreeList(stdout, '/repo/.namzu/worktrees/x');
237
+ expect(entry).toEqual({
238
+ path: '/repo/.namzu/worktrees/x',
239
+ head: 'deadbeef',
240
+ branch: 'refs/heads/namzu/x',
241
+ });
242
+ });
243
+ });
244
+ //# sourceMappingURL=git-worktree.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree.test.js","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/git-worktree.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=path-builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-builder.test.d.ts","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/path-builder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import { join } from 'node:path';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { DefaultPathBuilder } from '../path-builder.js';
4
+ const projectId = 'prj_abc';
5
+ const sessionId = 'ses_xyz';
6
+ const subSessionId = 'sub_qqq';
7
+ const runId = 'run_rrr';
8
+ describe('DefaultPathBuilder', () => {
9
+ it('rootDir returns the injected root verbatim', () => {
10
+ const pb = new DefaultPathBuilder('/tmp/ns');
11
+ expect(pb.rootDir()).toBe('/tmp/ns');
12
+ });
13
+ it('projectDir resolves to {root}/projects/{projectId}', () => {
14
+ const pb = new DefaultPathBuilder('/tmp/ns');
15
+ expect(pb.projectDir(projectId)).toBe(join('/tmp/ns', 'projects', projectId));
16
+ });
17
+ it('sessionDir resolves to {root}/projects/{projectId}/sessions/{sessionId}', () => {
18
+ const pb = new DefaultPathBuilder('/tmp/ns');
19
+ expect(pb.sessionDir(projectId, sessionId)).toBe(join('/tmp/ns', 'projects', projectId, 'sessions', sessionId));
20
+ });
21
+ it('subSessionDir nests under session/subsessions/{subSessionId}', () => {
22
+ const pb = new DefaultPathBuilder('/tmp/ns');
23
+ expect(pb.subSessionDir(projectId, sessionId, subSessionId)).toBe(join('/tmp/ns', 'projects', projectId, 'sessions', sessionId, 'subsessions', subSessionId));
24
+ });
25
+ it('runDir nests under session/runs/{runId}', () => {
26
+ const pb = new DefaultPathBuilder('/tmp/ns');
27
+ expect(pb.runDir(projectId, sessionId, runId)).toBe(join('/tmp/ns', 'projects', projectId, 'sessions', sessionId, 'runs', runId));
28
+ });
29
+ it('root injection is per-instance (does not mutate global state)', () => {
30
+ const a = new DefaultPathBuilder('/tmp/a');
31
+ const b = new DefaultPathBuilder('/tmp/b');
32
+ expect(a.rootDir()).toBe('/tmp/a');
33
+ expect(b.rootDir()).toBe('/tmp/b');
34
+ expect(a.projectDir(projectId)).not.toBe(b.projectDir(projectId));
35
+ });
36
+ });
37
+ //# sourceMappingURL=path-builder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-builder.test.js","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/path-builder.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAG7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,SAAS,GAAG,SAAsB,CAAA;AACxC,MAAM,SAAS,GAAG,SAAsB,CAAA;AACxC,MAAM,YAAY,GAAG,SAAyB,CAAA;AAC9C,MAAM,KAAK,GAAG,SAAkB,CAAA;AAEhC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAClF,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAC/C,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAC7D,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACvE,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAChE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAC1F,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAClD,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAClD,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAC5E,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * WorkspaceBackendDriver — pluggable backend contract for workspace
3
+ * provisioning. See session-hierarchy.md §7.1.
4
+ *
5
+ * Every Session persists a {@link WorkspaceRef}; the driver owns the
6
+ * underlying filesystem/container/etc. semantics. Phase 3 ships the
7
+ * git-worktree reference implementation (`git-worktree.ts`); tmpfs,
8
+ * container, and shared variants slot behind this same interface in a
9
+ * later phase (Convention #10: provider abstraction).
10
+ */
11
+ import type { WorkspaceBackendKind, WorkspaceRef } from './ref.js';
12
+ /**
13
+ * Params for {@link WorkspaceBackendDriver.create}. `baseRef` selects the
14
+ * commit / branch the workspace should track; when absent the driver
15
+ * provisions from the backend's default (e.g. the current branch of the
16
+ * repo for git-worktree).
17
+ */
18
+ export interface CreateWorkspaceParams {
19
+ baseRef?: string;
20
+ label?: string;
21
+ }
22
+ /**
23
+ * Params for {@link WorkspaceBackendDriver.branch}. `label` is a free-form
24
+ * tag embedded into the new workspace name so operators can trace provenance
25
+ * without reaching into the driver's internal naming scheme.
26
+ */
27
+ export interface BranchWorkspaceParams {
28
+ label?: string;
29
+ }
30
+ /**
31
+ * Snapshot returned by {@link WorkspaceBackendDriver.inspect}. `exists` is
32
+ * `false` when the underlying resource has been disposed out-of-band (e.g.
33
+ * manual `git worktree remove` on disk); consumers can use it to detect
34
+ * divergence between the persisted {@link WorkspaceRef} and the backend.
35
+ */
36
+ export interface WorkspaceInspection {
37
+ exists: boolean;
38
+ currentRef: string;
39
+ isDirty: boolean;
40
+ }
41
+ /**
42
+ * Backend driver contract. All methods are async and may throw
43
+ * {@link WorkspaceBackendError} on I/O failures. `dispose` is idempotent —
44
+ * calling it against an already-disposed ref is not an error (mitigates
45
+ * roadmap Risk #3: broadcast rollback must not fail on partial state).
46
+ */
47
+ export interface WorkspaceBackendDriver {
48
+ readonly kind: WorkspaceBackendKind;
49
+ create(params: CreateWorkspaceParams): Promise<WorkspaceRef>;
50
+ branch(source: WorkspaceRef, params: BranchWorkspaceParams): Promise<WorkspaceRef>;
51
+ dispose(ref: WorkspaceRef): Promise<void>;
52
+ inspect(ref: WorkspaceRef): Promise<WorkspaceInspection>;
53
+ }
54
+ export type { WorkspaceBackendKind } from './ref.js';
55
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/session/workspace/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAElE;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;IACnC,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC5D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAClF,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACxD;AAED,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * WorkspaceBackendDriver — pluggable backend contract for workspace
3
+ * provisioning. See session-hierarchy.md §7.1.
4
+ *
5
+ * Every Session persists a {@link WorkspaceRef}; the driver owns the
6
+ * underlying filesystem/container/etc. semantics. Phase 3 ships the
7
+ * git-worktree reference implementation (`git-worktree.ts`); tmpfs,
8
+ * container, and shared variants slot behind this same interface in a
9
+ * later phase (Convention #10: provider abstraction).
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/session/workspace/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * GitWorktreeDriver — reference implementation of
3
+ * {@link WorkspaceBackendDriver} backed by `git worktree`.
4
+ *
5
+ * See session-hierarchy.md §7.2 (Git-worktree reference backend).
6
+ *
7
+ * Safety: every subprocess invocation uses `execFile` with an argv array —
8
+ * no shell interpolation — so caller-supplied `label`/`baseRef` strings
9
+ * cannot escape their argument slot. Failures surface as
10
+ * {@link WorkspaceBackendError} carrying the underlying cause.
11
+ */
12
+ import type { Logger } from '../../utils/logger.js';
13
+ import type { BranchWorkspaceParams, CreateWorkspaceParams, WorkspaceBackendDriver, WorkspaceInspection } from './driver.js';
14
+ import type { WorkspaceRef } from './ref.js';
15
+ /**
16
+ * Minimal shape of `execFile`'s promisified result — allows tests to stub
17
+ * via dependency injection without pulling in the full `ChildProcess` type.
18
+ */
19
+ export interface ExecFileResult {
20
+ stdout: string;
21
+ stderr: string;
22
+ }
23
+ /**
24
+ * Async exec callable used by {@link GitWorktreeDriver}. Matches the shape
25
+ * of `promisify(execFile)` for the argv-array overload. Injected via the
26
+ * constructor so tests can stub without touching `child_process`.
27
+ */
28
+ export type ExecFile = (file: string, args: readonly string[]) => Promise<ExecFileResult>;
29
+ /**
30
+ * Configuration for {@link GitWorktreeDriver}.
31
+ */
32
+ export interface GitWorktreeDriverConfig {
33
+ /** Absolute path to the repo root whose `.git` backs the worktrees. */
34
+ repoRoot: string;
35
+ /**
36
+ * Directory (absolute) where worktree checkouts live. Defaults to
37
+ * `{repoRoot}/.namzu/worktrees` per session-hierarchy.md §7.2.
38
+ */
39
+ worktreesDir?: string;
40
+ logger: Logger;
41
+ /** Test-seam: inject a stub `execFile` implementation. */
42
+ execFile?: ExecFile;
43
+ }
44
+ export declare class GitWorktreeDriver implements WorkspaceBackendDriver {
45
+ readonly kind: "git-worktree";
46
+ private readonly repoRoot;
47
+ private readonly worktreesDir;
48
+ private readonly log;
49
+ private readonly exec;
50
+ constructor(config: GitWorktreeDriverConfig);
51
+ create(params: CreateWorkspaceParams): Promise<WorkspaceRef>;
52
+ branch(source: WorkspaceRef, params: BranchWorkspaceParams): Promise<WorkspaceRef>;
53
+ dispose(ref: WorkspaceRef): Promise<void>;
54
+ inspect(ref: WorkspaceRef): Promise<WorkspaceInspection>;
55
+ }
56
+ /**
57
+ * Parses `git worktree list --porcelain` output, returning the record for
58
+ * `worktreePath` or `null` when absent. Exported for tests.
59
+ */
60
+ export declare function parseWorktreeList(stdout: string, worktreePath: string): {
61
+ path: string;
62
+ head?: string;
63
+ branch?: string;
64
+ } | null;
65
+ //# sourceMappingURL=git-worktree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree.d.ts","sourceRoot":"","sources":["../../../src/session/workspace/git-worktree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EACX,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAA0B,YAAY,EAAE,MAAM,UAAU,CAAA;AAIpE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;AAIzF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED,qBAAa,iBAAkB,YAAW,sBAAsB;IAC/D,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAS;IAEvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;gBAEnB,MAAM,EAAE,uBAAuB;IAOrC,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgC5D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAMlF,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BzC,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAkC9D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqBzD"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * GitWorktreeDriver — reference implementation of
3
+ * {@link WorkspaceBackendDriver} backed by `git worktree`.
4
+ *
5
+ * See session-hierarchy.md §7.2 (Git-worktree reference backend).
6
+ *
7
+ * Safety: every subprocess invocation uses `execFile` with an argv array —
8
+ * no shell interpolation — so caller-supplied `label`/`baseRef` strings
9
+ * cannot escape their argument slot. Failures surface as
10
+ * {@link WorkspaceBackendError} carrying the underlying cause.
11
+ */
12
+ import { execFile } from 'node:child_process';
13
+ import { join } from 'node:path';
14
+ import { promisify } from 'node:util';
15
+ import { generateWorkspaceId } from '../../utils/id.js';
16
+ import { WorkspaceBackendError } from '../errors.js';
17
+ const execFileAsync = promisify(execFile);
18
+ const defaultExecFile = async (file, args) => execFileAsync(file, [...args]);
19
+ export class GitWorktreeDriver {
20
+ kind = 'git-worktree';
21
+ repoRoot;
22
+ worktreesDir;
23
+ log;
24
+ exec;
25
+ constructor(config) {
26
+ this.repoRoot = config.repoRoot;
27
+ this.worktreesDir = config.worktreesDir ?? join(config.repoRoot, '.namzu', 'worktrees');
28
+ this.log = config.logger.child({ component: 'GitWorktreeDriver' });
29
+ this.exec = config.execFile ?? defaultExecFile;
30
+ }
31
+ async create(params) {
32
+ const id = generateWorkspaceId();
33
+ const label = params.label ?? id;
34
+ const branch = `namzu/${label}`;
35
+ const worktreePath = join(this.worktreesDir, label);
36
+ const argv = ['-C', this.repoRoot, 'worktree', 'add', '-b', branch, worktreePath];
37
+ if (params.baseRef !== undefined) {
38
+ argv.push(params.baseRef);
39
+ }
40
+ try {
41
+ await this.exec('git', argv);
42
+ }
43
+ catch (cause) {
44
+ throw new WorkspaceBackendError({ op: 'create', kind: this.kind, cause });
45
+ }
46
+ const meta = {
47
+ backend: 'git-worktree',
48
+ repoRoot: this.repoRoot,
49
+ branch,
50
+ worktreePath,
51
+ };
52
+ this.log.info('git-worktree created', { id, branch, worktreePath });
53
+ return {
54
+ id,
55
+ meta,
56
+ createdAt: new Date(),
57
+ };
58
+ }
59
+ async branch(source, params) {
60
+ // Branch from the source worktree's current branch. The source's
61
+ // `meta.branch` is the ref we base off.
62
+ return this.create({ baseRef: source.meta.branch, label: params.label });
63
+ }
64
+ async dispose(ref) {
65
+ // Tolerate missing directories per roadmap Risk #3 mitigation: the
66
+ // broadcast-rollback compensating step calls dispose on partially
67
+ // provisioned refs and must not propagate "already gone" errors.
68
+ try {
69
+ await this.exec('git', [
70
+ '-C',
71
+ this.repoRoot,
72
+ 'worktree',
73
+ 'remove',
74
+ ref.meta.worktreePath,
75
+ '--force',
76
+ ]);
77
+ this.log.info('git-worktree disposed', { id: ref.id, path: ref.meta.worktreePath });
78
+ }
79
+ catch (cause) {
80
+ const message = cause instanceof Error ? cause.message : String(cause);
81
+ // git exits non-zero with "is not a working tree" when the path is
82
+ // absent; treat as idempotent success and log at debug.
83
+ if (/not a working tree|does not exist|No such file/i.test(message)) {
84
+ this.log.debug('git-worktree already gone; dispose idempotent', {
85
+ id: ref.id,
86
+ path: ref.meta.worktreePath,
87
+ });
88
+ return;
89
+ }
90
+ throw new WorkspaceBackendError({ op: 'dispose', kind: this.kind, cause });
91
+ }
92
+ }
93
+ async inspect(ref) {
94
+ let listStdout;
95
+ try {
96
+ const result = await this.exec('git', [
97
+ '-C',
98
+ this.repoRoot,
99
+ 'worktree',
100
+ 'list',
101
+ '--porcelain',
102
+ ]);
103
+ listStdout = result.stdout;
104
+ }
105
+ catch (cause) {
106
+ throw new WorkspaceBackendError({ op: 'inspect:list', kind: this.kind, cause });
107
+ }
108
+ const entry = parseWorktreeList(listStdout, ref.meta.worktreePath);
109
+ if (!entry) {
110
+ return { exists: false, currentRef: ref.meta.branch, isDirty: false };
111
+ }
112
+ let statusStdout;
113
+ try {
114
+ const result = await this.exec('git', ['-C', ref.meta.worktreePath, 'status', '--porcelain']);
115
+ statusStdout = result.stdout;
116
+ }
117
+ catch (cause) {
118
+ throw new WorkspaceBackendError({ op: 'inspect:status', kind: this.kind, cause });
119
+ }
120
+ return {
121
+ exists: true,
122
+ currentRef: entry.branch ?? entry.head ?? ref.meta.branch,
123
+ isDirty: statusStdout.trim().length > 0,
124
+ };
125
+ }
126
+ }
127
+ /**
128
+ * Parses `git worktree list --porcelain` output, returning the record for
129
+ * `worktreePath` or `null` when absent. Exported for tests.
130
+ */
131
+ export function parseWorktreeList(stdout, worktreePath) {
132
+ const blocks = stdout.split(/\n\n+/);
133
+ for (const block of blocks) {
134
+ const lines = block.split('\n').filter((l) => l.length > 0);
135
+ let path;
136
+ let head;
137
+ let branch;
138
+ for (const line of lines) {
139
+ if (line.startsWith('worktree '))
140
+ path = line.slice('worktree '.length);
141
+ else if (line.startsWith('HEAD '))
142
+ head = line.slice('HEAD '.length);
143
+ else if (line.startsWith('branch '))
144
+ branch = line.slice('branch '.length);
145
+ }
146
+ if (path === worktreePath) {
147
+ return {
148
+ path,
149
+ ...(head !== undefined && { head }),
150
+ ...(branch !== undefined && { branch }),
151
+ };
152
+ }
153
+ }
154
+ return null;
155
+ }
156
+ //# sourceMappingURL=git-worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree.js","sourceRoot":"","sources":["../../../src/session/workspace/git-worktree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type { WorkspaceRef, WorkspaceBackendMeta, WorkspaceBackendKind, GitWorktreeBackendMeta, } from './ref.js';
2
+ export type { WorkspaceBackendDriver, CreateWorkspaceParams, BranchWorkspaceParams, WorkspaceInspection, } from './driver.js';
3
+ export { DefaultPathBuilder } from './path-builder.js';
4
+ export type { PathBuilder } from './path-builder.js';
5
+ export { WorkspaceBackendRegistry } from './registry.js';
6
+ export { GitWorktreeDriver, parseWorktreeList } from './git-worktree.js';
7
+ export type { ExecFile, ExecFileResult, GitWorktreeDriverConfig } from './git-worktree.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/workspace/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACX,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACtB,MAAM,UAAU,CAAA;AAEjB,YAAY,EACX,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACxE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,7 @@
1
+ // Sub-barrel for the workspace module (Convention #4).
2
+ // Concrete types + driver implementation live in sibling files; re-export
3
+ // them here so other modules import via `../session/workspace/index.js`.
4
+ export { DefaultPathBuilder } from './path-builder.js';
5
+ export { WorkspaceBackendRegistry } from './registry.js';
6
+ export { GitWorktreeDriver, parseWorktreeList } from './git-worktree.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/workspace/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,0EAA0E;AAC1E,yEAAyE;AAgBzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}