factory-factory 0.4.1 → 0.4.2

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 (707) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/abnfDiagram-VRR7QNED-Bz06FkfB.js +1 -0
  3. package/dist/client/assets/arc--1iscGgN.js +1 -0
  4. package/dist/client/assets/architectureDiagram-ZJ3FMSHR-Ds-52hDI.js +36 -0
  5. package/dist/client/assets/blockDiagram-677ZJIJ3-DZwPPZmp.js +132 -0
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-CT8hJB-h.js → c4Diagram-LMCZKHZV-RQch21fC.js} +1 -1
  7. package/dist/client/assets/channel-DFzHt_cl.js +1 -0
  8. package/dist/client/assets/{chunk-QZHKN3VN-Ce3Q_vrs.js → chunk-2Q5K7J3B-Df6Q19iI.js} +1 -1
  9. package/dist/client/assets/{chunk-ND2GUHAM-Qhi4WqzZ.js → chunk-32BRIVSS-DlbaZtVC.js} +1 -1
  10. package/dist/client/assets/{chunk-FMBD7UC4-B4C3KvLe.js → chunk-5VM5RSS4-KgkMhS6k.js} +1 -1
  11. package/dist/client/assets/chunk-EX3LRPZG-DAfTWCem.js +231 -0
  12. package/dist/client/assets/{chunk-4BX2VUAB-km6NpEMz.js → chunk-JWPE2WC7-D6Y5C5Yz.js} +1 -1
  13. package/dist/client/assets/chunk-MOJQB5TN-B_P4pqPC.js +88 -0
  14. package/dist/client/assets/chunk-RYQCIY6F-CzFboHFv.js +1 -0
  15. package/dist/client/assets/{chunk-727SXJPM-Bp-ts2at.js → chunk-V7JOEXUC-8yT3lW_D.js} +5 -5
  16. package/dist/client/assets/{chunk-2J33WTMH-B0h8q8fD.js → chunk-VR4S4FIN-B_QG1di-.js} +1 -1
  17. package/dist/client/assets/{chunk-55IACEB6-COUWt3oA.js → chunk-XXDRQBXY-CzL4_omu.js} +1 -1
  18. package/dist/client/assets/classDiagram-OUVF2IWQ-IkvZ4qsF.js +1 -0
  19. package/dist/client/assets/classDiagram-v2-EOCWNBFH-IkvZ4qsF.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-D6QofwFq.js → cose-bilkent-JH36ORCC-DmZLPx5-.js} +1 -1
  21. package/dist/client/assets/cynefin-VYW2F7L2-DUejQU5F.js +166 -0
  22. package/dist/client/assets/cynefinDiagram-TSTJHNR4-BjallChk.js +62 -0
  23. package/dist/client/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  24. package/dist/client/assets/dagre-VKFMJZFB-COdOy8Kp.js +4 -0
  25. package/dist/client/assets/{diagram-KO2AKTUF-B9ABz-Wk.js → diagram-FQU43EPY-C8Xk7Fyh.js} +3 -3
  26. package/dist/client/assets/diagram-G47NLZAW-B_qqKBqq.js +24 -0
  27. package/dist/client/assets/diagram-NH7WQ7WH-DS1-6fzl.js +24 -0
  28. package/dist/client/assets/diagram-OA4YK3LP-enaDU5V4.js +30 -0
  29. package/dist/client/assets/diagram-WEI45ONY-Cx6LFRuh.js +41 -0
  30. package/dist/client/assets/ebnfDiagram-CCIWWBDH-DVGMcsj6.js +1 -0
  31. package/dist/client/assets/erDiagram-Q63AITRT-DCsDfIB_.js +85 -0
  32. package/dist/client/assets/flowDiagram-23GEKE2U-C5QCjsF8.js +156 -0
  33. package/dist/client/assets/ganttDiagram-NO4QXBWP-CLvtSsZ-.js +292 -0
  34. package/dist/client/assets/gitGraphDiagram-IHSO6WYX-BS6vNDTo.js +106 -0
  35. package/dist/client/assets/{graph--OzhPTMs.js → graph-DOmOIIwC.js} +1 -1
  36. package/dist/client/assets/index-0-xpZu6O.js +689 -0
  37. package/dist/client/assets/index-CxLzpVmH.css +1 -0
  38. package/dist/client/assets/infoDiagram-FWYZ7A6U-CIuYQAoE.js +2 -0
  39. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BLrvV5ke.js → ishikawaDiagram-FXEZZL3T-DeVUVV8X.js} +5 -5
  40. package/dist/client/assets/{journeyDiagram-JHISSGLW-B2-TMwJI.js → journeyDiagram-5HDEW3XC-BsmmwqMS.js} +3 -3
  41. package/dist/client/assets/{kanban-definition-UN3LZRKU-B5mGKgYF.js → kanban-definition-HUTT4EX6-D-mDPzR0.js} +20 -20
  42. package/dist/client/assets/katex-HP8lGamR.js +257 -0
  43. package/dist/client/assets/layout-D-LzfAck.js +1 -0
  44. package/dist/client/assets/{linear-ConE9euY.js → linear-BSdMIO3_.js} +1 -1
  45. package/dist/client/assets/map-DxJ2ADlA.js +1 -0
  46. package/dist/client/assets/{mindmap-definition-RKZ34NQL-B0BaMk8D.js → mindmap-definition-LN4V7U3C-DOuSISM2.js} +3 -3
  47. package/dist/client/assets/{mobile-baseline-DWCt7ZGJ.js → mobile-baseline-C-1Tc5b_.js} +1 -1
  48. package/dist/client/assets/pegDiagram-2B236MQR-C8CMsmVK.js +1 -0
  49. package/dist/client/assets/pieDiagram-ENE6RG2P-B1UfUhQO.js +39 -0
  50. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-DDbeggF4.js → quadrantDiagram-ABIIQ3AL-DujmyYtF.js} +3 -3
  51. package/dist/client/assets/railroadDiagram-RFXS5EU6-DaF-IoiS.js +1 -0
  52. package/dist/client/assets/{requirementDiagram-4Y6WPE33-Cc3ozz7U.js → requirementDiagram-TGXJPOKE-dfpBVIPb.js} +1 -1
  53. package/dist/client/assets/sankeyDiagram-HTMAVEWB-BYCvwHlS.js +40 -0
  54. package/dist/client/assets/sequenceDiagram-DBY2YBRQ-DOdQoxUf.js +162 -0
  55. package/dist/client/assets/sizeCapture-X5ZJPWSS-9sUXw3Q8.js +1 -0
  56. package/dist/client/assets/stateDiagram-2N3HPSRC-QZszWUA_.js +1 -0
  57. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-CueME36n.js +1 -0
  58. package/dist/client/assets/swimlanes-5IMT3BWC-CtEVTRNN.js +2 -0
  59. package/dist/client/assets/swimlanesDiagram-G3AALYLV-DITFxuwY.js +8 -0
  60. package/dist/client/assets/{terminal-instance-CDKJdDaO.js → terminal-instance-nU4PXHMm.js} +1 -1
  61. package/dist/client/assets/{timeline-definition-PNZ67QCA-CyxBqgqv.js → timeline-definition-FHXFAJF6-0fOfnsxU.js} +3 -3
  62. package/dist/client/assets/vennDiagram-L72KCM5P-5eWMXdkg.js +34 -0
  63. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CjJBpd3P.js → wardleyDiagram-EHGQE667-BwNCxx2w.js} +4 -4
  64. package/dist/client/assets/xychartDiagram-FW5EYKEG-VIc8vlw6.js +7 -0
  65. package/dist/client/index.html +2 -2
  66. package/dist/prisma/generated/browser.d.ts +4 -0
  67. package/dist/prisma/generated/browser.d.ts.map +1 -1
  68. package/dist/prisma/generated/client.d.ts +4 -0
  69. package/dist/prisma/generated/client.d.ts.map +1 -1
  70. package/dist/prisma/generated/commonInputTypes.d.ts +88 -148
  71. package/dist/prisma/generated/commonInputTypes.d.ts.map +1 -1
  72. package/dist/prisma/generated/enums.d.ts +0 -6
  73. package/dist/prisma/generated/enums.d.ts.map +1 -1
  74. package/dist/prisma/generated/enums.js +0 -5
  75. package/dist/prisma/generated/enums.js.map +1 -1
  76. package/dist/prisma/generated/internal/class.d.ts +16 -2
  77. package/dist/prisma/generated/internal/class.d.ts.map +1 -1
  78. package/dist/prisma/generated/internal/class.js +6 -6
  79. package/dist/prisma/generated/internal/class.js.map +1 -1
  80. package/dist/prisma/generated/internal/prismaNamespace.d.ts +370 -47
  81. package/dist/prisma/generated/internal/prismaNamespace.d.ts.map +1 -1
  82. package/dist/prisma/generated/internal/prismaNamespace.js +51 -37
  83. package/dist/prisma/generated/internal/prismaNamespace.js.map +1 -1
  84. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts +52 -34
  85. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts.map +1 -1
  86. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js +49 -35
  87. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  88. package/dist/prisma/generated/models/Workspace.d.ts +1017 -2537
  89. package/dist/prisma/generated/models/Workspace.d.ts.map +1 -1
  90. package/dist/prisma/generated/models/WorkspaceAutoIteration.d.ts +524 -0
  91. package/dist/prisma/generated/models/WorkspaceAutoIteration.d.ts.map +1 -0
  92. package/dist/prisma/generated/models/WorkspaceAutoIteration.js +2 -0
  93. package/dist/prisma/generated/models/WorkspaceAutoIteration.js.map +1 -0
  94. package/dist/prisma/generated/models/WorkspacePR.d.ts +858 -0
  95. package/dist/prisma/generated/models/WorkspacePR.d.ts.map +1 -0
  96. package/dist/prisma/generated/models/WorkspacePR.js +2 -0
  97. package/dist/prisma/generated/models/WorkspacePR.js.map +1 -0
  98. package/dist/prisma/generated/models/WorkspaceRatchet.d.ts +593 -0
  99. package/dist/prisma/generated/models/WorkspaceRatchet.d.ts.map +1 -0
  100. package/dist/prisma/generated/models/WorkspaceRatchet.js +2 -0
  101. package/dist/prisma/generated/models/WorkspaceRatchet.js.map +1 -0
  102. package/dist/prisma/generated/models/WorkspaceRunScript.d.ts +631 -0
  103. package/dist/prisma/generated/models/WorkspaceRunScript.d.ts.map +1 -0
  104. package/dist/prisma/generated/models/WorkspaceRunScript.js +2 -0
  105. package/dist/prisma/generated/models/WorkspaceRunScript.js.map +1 -0
  106. package/dist/prisma/generated/models.d.ts +4 -0
  107. package/dist/prisma/generated/models.d.ts.map +1 -1
  108. package/dist/src/backend/app-context.d.ts +4 -1
  109. package/dist/src/backend/app-context.d.ts.map +1 -1
  110. package/dist/src/backend/app-context.js +8 -6
  111. package/dist/src/backend/app-context.js.map +1 -1
  112. package/dist/src/backend/interceptors/auto-branch-rename.d.ts +19 -0
  113. package/dist/src/backend/interceptors/auto-branch-rename.d.ts.map +1 -0
  114. package/dist/src/backend/interceptors/auto-branch-rename.js +76 -0
  115. package/dist/src/backend/interceptors/auto-branch-rename.js.map +1 -0
  116. package/dist/src/backend/interceptors/branch-naming.interceptor.d.ts +4 -0
  117. package/dist/src/backend/interceptors/branch-naming.interceptor.d.ts.map +1 -0
  118. package/dist/src/backend/interceptors/branch-naming.interceptor.js +391 -0
  119. package/dist/src/backend/interceptors/branch-naming.interceptor.js.map +1 -0
  120. package/dist/src/backend/interceptors/branch-naming.interceptor.test.d.ts +2 -0
  121. package/dist/src/backend/interceptors/branch-naming.interceptor.test.d.ts.map +1 -0
  122. package/dist/src/backend/interceptors/branch-naming.interceptor.test.js +780 -0
  123. package/dist/src/backend/interceptors/branch-naming.interceptor.test.js.map +1 -0
  124. package/dist/src/backend/interceptors/branch-rename.utils.d.ts +1 -1
  125. package/dist/src/backend/interceptors/branch-rename.utils.d.ts.map +1 -1
  126. package/dist/src/backend/interceptors/branch-rename.utils.js +10 -14
  127. package/dist/src/backend/interceptors/branch-rename.utils.js.map +1 -1
  128. package/dist/src/backend/interceptors/index.d.ts.map +1 -1
  129. package/dist/src/backend/interceptors/index.js +2 -6
  130. package/dist/src/backend/interceptors/index.js.map +1 -1
  131. package/dist/src/backend/orchestration/data-backup.service.d.ts.map +1 -1
  132. package/dist/src/backend/orchestration/data-backup.service.js +103 -53
  133. package/dist/src/backend/orchestration/data-backup.service.js.map +1 -1
  134. package/dist/src/backend/orchestration/data-backup.service.test.js +186 -47
  135. package/dist/src/backend/orchestration/data-backup.service.test.js.map +1 -1
  136. package/dist/src/backend/orchestration/domain-bridges.orchestrator.d.ts +7 -5
  137. package/dist/src/backend/orchestration/domain-bridges.orchestrator.d.ts.map +1 -1
  138. package/dist/src/backend/orchestration/domain-bridges.orchestrator.js +116 -60
  139. package/dist/src/backend/orchestration/domain-bridges.orchestrator.js.map +1 -1
  140. package/dist/src/backend/orchestration/domain-bridges.orchestrator.test.js +262 -104
  141. package/dist/src/backend/orchestration/domain-bridges.orchestrator.test.js.map +1 -1
  142. package/dist/src/backend/orchestration/event-collector-lifecycle.integration.test.js +2 -2
  143. package/dist/src/backend/orchestration/event-collector-lifecycle.integration.test.js.map +1 -1
  144. package/dist/src/backend/orchestration/event-collector.orchestrator.d.ts +5 -6
  145. package/dist/src/backend/orchestration/event-collector.orchestrator.d.ts.map +1 -1
  146. package/dist/src/backend/orchestration/event-collector.orchestrator.js +12 -35
  147. package/dist/src/backend/orchestration/event-collector.orchestrator.js.map +1 -1
  148. package/dist/src/backend/orchestration/event-collector.orchestrator.test.js +42 -26
  149. package/dist/src/backend/orchestration/event-collector.orchestrator.test.js.map +1 -1
  150. package/dist/src/backend/orchestration/reconciliation.service.d.ts +4 -3
  151. package/dist/src/backend/orchestration/reconciliation.service.d.ts.map +1 -1
  152. package/dist/src/backend/orchestration/reconciliation.service.js +26 -38
  153. package/dist/src/backend/orchestration/reconciliation.service.js.map +1 -1
  154. package/dist/src/backend/orchestration/reconciliation.service.test.js +3 -3
  155. package/dist/src/backend/orchestration/reconciliation.service.test.js.map +1 -1
  156. package/dist/src/backend/orchestration/scheduler.service.d.ts +4 -3
  157. package/dist/src/backend/orchestration/scheduler.service.d.ts.map +1 -1
  158. package/dist/src/backend/orchestration/scheduler.service.js +40 -43
  159. package/dist/src/backend/orchestration/scheduler.service.js.map +1 -1
  160. package/dist/src/backend/orchestration/scheduler.service.test.js +52 -10
  161. package/dist/src/backend/orchestration/scheduler.service.test.js.map +1 -1
  162. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.d.ts +5 -5
  163. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.d.ts.map +1 -1
  164. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.js +20 -61
  165. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.js.map +1 -1
  166. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.test.js +29 -3
  167. package/dist/src/backend/orchestration/snapshot-reconciliation.orchestrator.test.js.map +1 -1
  168. package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts +3 -37
  169. package/dist/src/backend/orchestration/workspace-archive.orchestrator.d.ts.map +1 -1
  170. package/dist/src/backend/orchestration/workspace-archive.orchestrator.js +2 -2
  171. package/dist/src/backend/orchestration/workspace-archive.orchestrator.js.map +1 -1
  172. package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js +9 -9
  173. package/dist/src/backend/orchestration/workspace-archive.orchestrator.test.js.map +1 -1
  174. package/dist/src/backend/orchestration/workspace-init.orchestrator.js +3 -3
  175. package/dist/src/backend/orchestration/workspace-init.orchestrator.js.map +1 -1
  176. package/dist/src/backend/orchestration/workspace-init.orchestrator.test.js +18 -18
  177. package/dist/src/backend/orchestration/workspace-init.orchestrator.test.js.map +1 -1
  178. package/dist/src/backend/orchestration/workspace-notification-delivery.orchestrator.d.ts.map +1 -1
  179. package/dist/src/backend/orchestration/workspace-notification-delivery.orchestrator.js +8 -1
  180. package/dist/src/backend/orchestration/workspace-notification-delivery.orchestrator.js.map +1 -1
  181. package/dist/src/backend/orchestration/workspace-notification-delivery.orchestrator.test.js +23 -0
  182. package/dist/src/backend/orchestration/workspace-notification-delivery.orchestrator.test.js.map +1 -1
  183. package/dist/src/backend/routers/websocket/chat.handler.d.ts.map +1 -1
  184. package/dist/src/backend/routers/websocket/chat.handler.js +10 -6
  185. package/dist/src/backend/routers/websocket/chat.handler.js.map +1 -1
  186. package/dist/src/backend/routers/websocket/chat.handler.test.js +37 -11
  187. package/dist/src/backend/routers/websocket/chat.handler.test.js.map +1 -1
  188. package/dist/src/backend/routers/websocket/index.d.ts +1 -2
  189. package/dist/src/backend/routers/websocket/index.d.ts.map +1 -1
  190. package/dist/src/backend/routers/websocket/index.js +1 -2
  191. package/dist/src/backend/routers/websocket/index.js.map +1 -1
  192. package/dist/src/backend/routers/websocket/log-stream-dev.handler.test.d.ts +2 -0
  193. package/dist/src/backend/routers/websocket/log-stream-dev.handler.test.d.ts.map +1 -0
  194. package/dist/src/backend/routers/websocket/{dev-logs.handler.test.js → log-stream-dev.handler.test.js} +2 -2
  195. package/dist/src/backend/routers/websocket/log-stream-dev.handler.test.js.map +1 -0
  196. package/dist/src/backend/routers/websocket/log-stream-post-run.handler.test.d.ts +2 -0
  197. package/dist/src/backend/routers/websocket/log-stream-post-run.handler.test.d.ts.map +1 -0
  198. package/dist/src/backend/routers/websocket/{post-run-logs.handler.test.js → log-stream-post-run.handler.test.js} +2 -2
  199. package/dist/src/backend/routers/websocket/log-stream-post-run.handler.test.js.map +1 -0
  200. package/dist/src/backend/routers/websocket/log-stream.handler.d.ts +8 -0
  201. package/dist/src/backend/routers/websocket/log-stream.handler.d.ts.map +1 -0
  202. package/dist/src/backend/routers/websocket/log-stream.handler.js +35 -0
  203. package/dist/src/backend/routers/websocket/log-stream.handler.js.map +1 -0
  204. package/dist/src/backend/routers/websocket/terminal.handler.d.ts.map +1 -1
  205. package/dist/src/backend/routers/websocket/terminal.handler.js +4 -2
  206. package/dist/src/backend/routers/websocket/terminal.handler.js.map +1 -1
  207. package/dist/src/backend/routers/websocket/terminal.handler.test.js +37 -0
  208. package/dist/src/backend/routers/websocket/terminal.handler.test.js.map +1 -1
  209. package/dist/src/backend/routers/websocket/websocket.integration.test.js +6 -9
  210. package/dist/src/backend/routers/websocket/websocket.integration.test.js.map +1 -1
  211. package/dist/src/backend/server.d.ts.map +1 -1
  212. package/dist/src/backend/server.js +12 -3
  213. package/dist/src/backend/server.js.map +1 -1
  214. package/dist/src/backend/server.upgrade.test.js +35 -6
  215. package/dist/src/backend/server.upgrade.test.js.map +1 -1
  216. package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.test.js +15 -0
  217. package/dist/src/backend/services/auto-iteration/service/auto-iteration.service.test.js.map +1 -1
  218. package/dist/src/backend/services/auto-iteration/service/git-ops.d.ts.map +1 -1
  219. package/dist/src/backend/services/auto-iteration/service/git-ops.integration.test.d.ts +2 -0
  220. package/dist/src/backend/services/auto-iteration/service/git-ops.integration.test.d.ts.map +1 -0
  221. package/dist/src/backend/services/auto-iteration/service/git-ops.integration.test.js +86 -0
  222. package/dist/src/backend/services/auto-iteration/service/git-ops.integration.test.js.map +1 -0
  223. package/dist/src/backend/services/auto-iteration/service/git-ops.js +37 -2
  224. package/dist/src/backend/services/auto-iteration/service/git-ops.js.map +1 -1
  225. package/dist/src/backend/services/auto-iteration/service/test-runner.service.d.ts.map +1 -1
  226. package/dist/src/backend/services/auto-iteration/service/test-runner.service.js +9 -8
  227. package/dist/src/backend/services/auto-iteration/service/test-runner.service.js.map +1 -1
  228. package/dist/src/backend/services/auto-iteration/service/test-runner.service.test.d.ts +2 -0
  229. package/dist/src/backend/services/auto-iteration/service/test-runner.service.test.d.ts.map +1 -0
  230. package/dist/src/backend/services/auto-iteration/service/test-runner.service.test.js +80 -0
  231. package/dist/src/backend/services/auto-iteration/service/test-runner.service.test.js.map +1 -0
  232. package/dist/src/backend/services/check-single-writer.test.js +303 -32
  233. package/dist/src/backend/services/check-single-writer.test.js.map +1 -1
  234. package/dist/src/backend/services/constants.d.ts +1 -0
  235. package/dist/src/backend/services/constants.d.ts.map +1 -1
  236. package/dist/src/backend/services/constants.js +1 -0
  237. package/dist/src/backend/services/constants.js.map +1 -1
  238. package/dist/src/backend/services/env-schemas.d.ts +46 -46
  239. package/dist/src/backend/services/github/service/bridges.d.ts +6 -5
  240. package/dist/src/backend/services/github/service/bridges.d.ts.map +1 -1
  241. package/dist/src/backend/services/github/service/github-cli/mappers.d.ts +5 -2
  242. package/dist/src/backend/services/github/service/github-cli/mappers.d.ts.map +1 -1
  243. package/dist/src/backend/services/github/service/github-cli/mappers.js.map +1 -1
  244. package/dist/src/backend/services/github/service/github-cli/schemas.d.ts +4 -4
  245. package/dist/src/backend/services/github/service/github-cli.service.d.ts +5 -1
  246. package/dist/src/backend/services/github/service/github-cli.service.d.ts.map +1 -1
  247. package/dist/src/backend/services/github/service/github-cli.service.js.map +1 -1
  248. package/dist/src/backend/services/github/service/index.d.ts +2 -3
  249. package/dist/src/backend/services/github/service/index.d.ts.map +1 -1
  250. package/dist/src/backend/services/github/service/index.js +2 -2
  251. package/dist/src/backend/services/github/service/index.js.map +1 -1
  252. package/dist/src/backend/services/github/service/pr-fetch-coordinator.d.ts +33 -0
  253. package/dist/src/backend/services/github/service/pr-fetch-coordinator.d.ts.map +1 -0
  254. package/dist/src/backend/services/github/service/{pr-fetch-registry.js → pr-fetch-coordinator.js} +80 -69
  255. package/dist/src/backend/services/github/service/pr-fetch-coordinator.js.map +1 -0
  256. package/dist/src/backend/services/github/service/pr-fetch-coordinator.test.d.ts +2 -0
  257. package/dist/src/backend/services/github/service/pr-fetch-coordinator.test.d.ts.map +1 -0
  258. package/dist/src/backend/services/github/service/pr-fetch-coordinator.test.js +222 -0
  259. package/dist/src/backend/services/github/service/pr-fetch-coordinator.test.js.map +1 -0
  260. package/dist/src/backend/services/github/service/pr-snapshot.service.d.ts +12 -11
  261. package/dist/src/backend/services/github/service/pr-snapshot.service.d.ts.map +1 -1
  262. package/dist/src/backend/services/github/service/pr-snapshot.service.js +23 -22
  263. package/dist/src/backend/services/github/service/pr-snapshot.service.js.map +1 -1
  264. package/dist/src/backend/services/github/service/pr-snapshot.service.test.js +134 -75
  265. package/dist/src/backend/services/github/service/pr-snapshot.service.test.js.map +1 -1
  266. package/dist/src/backend/services/job-runner.service.d.ts +24 -0
  267. package/dist/src/backend/services/job-runner.service.d.ts.map +1 -0
  268. package/dist/src/backend/services/job-runner.service.js +168 -0
  269. package/dist/src/backend/services/job-runner.service.js.map +1 -0
  270. package/dist/src/backend/services/job-runner.service.test.d.ts +2 -0
  271. package/dist/src/backend/services/job-runner.service.test.d.ts.map +1 -0
  272. package/dist/src/backend/services/job-runner.service.test.js +498 -0
  273. package/dist/src/backend/services/job-runner.service.test.js.map +1 -0
  274. package/dist/src/backend/services/periodic-task/service/periodic-task.service.d.ts +8 -11
  275. package/dist/src/backend/services/periodic-task/service/periodic-task.service.d.ts.map +1 -1
  276. package/dist/src/backend/services/periodic-task/service/periodic-task.service.js +28 -50
  277. package/dist/src/backend/services/periodic-task/service/periodic-task.service.js.map +1 -1
  278. package/dist/src/backend/services/port.service.d.ts.map +1 -1
  279. package/dist/src/backend/services/port.service.js +4 -0
  280. package/dist/src/backend/services/port.service.js.map +1 -1
  281. package/dist/src/backend/services/port.service.test.js +9 -0
  282. package/dist/src/backend/services/port.service.test.js.map +1 -1
  283. package/dist/src/backend/services/ratchet/service/bridges.d.ts +24 -7
  284. package/dist/src/backend/services/ratchet/service/bridges.d.ts.map +1 -1
  285. package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.d.ts.map +1 -1
  286. package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.js +11 -10
  287. package/dist/src/backend/services/ratchet/service/ratchet-active-session.helpers.js.map +1 -1
  288. package/dist/src/backend/services/ratchet/service/ratchet-decision-logging.helpers.d.ts +1 -1
  289. package/dist/src/backend/services/ratchet/service/ratchet-decision-logging.helpers.js +1 -1
  290. package/dist/src/backend/services/ratchet/service/ratchet-decision-logging.helpers.js.map +1 -1
  291. package/dist/src/backend/services/ratchet/service/ratchet-fixer-dispatch.helpers.d.ts.map +1 -1
  292. package/dist/src/backend/services/ratchet/service/ratchet-fixer-dispatch.helpers.js +8 -3
  293. package/dist/src/backend/services/ratchet/service/ratchet-fixer-dispatch.helpers.js.map +1 -1
  294. package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.d.ts +1 -1
  295. package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.d.ts.map +1 -1
  296. package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.js +103 -95
  297. package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.js.map +1 -1
  298. package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.test.js +36 -22
  299. package/dist/src/backend/services/ratchet/service/ratchet-pr-state.helpers.test.js.map +1 -1
  300. package/dist/src/backend/services/ratchet/service/ratchet.service.d.ts +6 -8
  301. package/dist/src/backend/services/ratchet/service/ratchet.service.d.ts.map +1 -1
  302. package/dist/src/backend/services/ratchet/service/ratchet.service.js +58 -136
  303. package/dist/src/backend/services/ratchet/service/ratchet.service.js.map +1 -1
  304. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js +323 -273
  305. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js.map +1 -1
  306. package/dist/src/backend/services/ratchet/service/ratchet.types.d.ts +3 -1
  307. package/dist/src/backend/services/ratchet/service/ratchet.types.d.ts.map +1 -1
  308. package/dist/src/backend/services/registry.d.ts +6 -2
  309. package/dist/src/backend/services/registry.d.ts.map +1 -1
  310. package/dist/src/backend/services/registry.js +17 -1
  311. package/dist/src/backend/services/registry.js.map +1 -1
  312. package/dist/src/backend/services/resources.integration.test.js +73 -45
  313. package/dist/src/backend/services/resources.integration.test.js.map +1 -1
  314. package/dist/src/backend/services/run-script/service/run-script-proxy.service.d.ts +1 -0
  315. package/dist/src/backend/services/run-script/service/run-script-proxy.service.d.ts.map +1 -1
  316. package/dist/src/backend/services/run-script/service/run-script-proxy.service.js +25 -2
  317. package/dist/src/backend/services/run-script/service/run-script-proxy.service.js.map +1 -1
  318. package/dist/src/backend/services/run-script/service/run-script-proxy.service.test.js +124 -6
  319. package/dist/src/backend/services/run-script/service/run-script-proxy.service.test.js.map +1 -1
  320. package/dist/src/backend/services/run-script/service/run-script-state-machine.service.d.ts.map +1 -1
  321. package/dist/src/backend/services/run-script/service/run-script-state-machine.service.js.map +1 -1
  322. package/dist/src/backend/services/run-script/service/run-script-state-machine.service.test.js +125 -125
  323. package/dist/src/backend/services/run-script/service/run-script-state-machine.service.test.js.map +1 -1
  324. package/dist/src/backend/services/run-script/service/startup-script.service.d.ts.map +1 -1
  325. package/dist/src/backend/services/run-script/service/startup-script.service.js +20 -5
  326. package/dist/src/backend/services/run-script/service/startup-script.service.js.map +1 -1
  327. package/dist/src/backend/services/run-script/service/startup-script.service.test.js +95 -1
  328. package/dist/src/backend/services/run-script/service/startup-script.service.test.js.map +1 -1
  329. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.d.ts.map +1 -1
  330. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.js +4 -4
  331. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.js.map +1 -1
  332. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.test.js +4 -2
  333. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.test.js.map +1 -1
  334. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/permission-response.handler.d.ts +2 -2
  335. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/permission-response.handler.d.ts.map +1 -1
  336. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/permission-response.handler.js +2 -2
  337. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/permission-response.handler.js.map +1 -1
  338. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/permission-response.handler.test.js +10 -25
  339. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/permission-response.handler.test.js.map +1 -1
  340. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.d.ts.map +1 -1
  341. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.js +10 -2
  342. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.js.map +1 -1
  343. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.test.js +41 -2
  344. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.test.js.map +1 -1
  345. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-model.handler.d.ts +2 -2
  346. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-model.handler.d.ts.map +1 -1
  347. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-model.handler.js +4 -4
  348. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-model.handler.js.map +1 -1
  349. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-model.handler.test.js +1 -4
  350. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-model.handler.test.js.map +1 -1
  351. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.js +2 -2
  352. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.js.map +1 -1
  353. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.test.js +2 -2
  354. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.test.js.map +1 -1
  355. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.js +2 -2
  356. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.js.map +1 -1
  357. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.test.js +2 -2
  358. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.test.js.map +1 -1
  359. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.js +2 -2
  360. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.js.map +1 -1
  361. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.test.js +2 -2
  362. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.test.js.map +1 -1
  363. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/user-input.handler.d.ts +3 -2
  364. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/user-input.handler.d.ts.map +1 -1
  365. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/user-input.handler.js +2 -2
  366. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/user-input.handler.js.map +1 -1
  367. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/user-input.handler.test.js +17 -20
  368. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/user-input.handler.test.js.map +1 -1
  369. package/dist/src/backend/services/session/service/chat/chat-message-handlers/registry.d.ts.map +1 -1
  370. package/dist/src/backend/services/session/service/chat/chat-message-handlers/registry.js +15 -6
  371. package/dist/src/backend/services/session/service/chat/chat-message-handlers/registry.js.map +1 -1
  372. package/dist/src/backend/services/session/service/chat/chat-message-handlers/types.d.ts +12 -3
  373. package/dist/src/backend/services/session/service/chat/chat-message-handlers/types.d.ts.map +1 -1
  374. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.d.ts.map +1 -1
  375. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js +18 -14
  376. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js.map +1 -1
  377. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js +7 -1
  378. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js.map +1 -1
  379. package/dist/src/backend/services/session/service/data/session-provider-resolver.service.test.js +1 -3
  380. package/dist/src/backend/services/session/service/data/session-provider-resolver.service.test.js.map +1 -1
  381. package/dist/src/backend/services/session/service/index.d.ts +6 -1
  382. package/dist/src/backend/services/session/service/index.d.ts.map +1 -1
  383. package/dist/src/backend/services/session/service/index.js +5 -1
  384. package/dist/src/backend/services/session/service/index.js.map +1 -1
  385. package/dist/src/backend/services/session/service/interceptor.bridge.d.ts.map +1 -1
  386. package/dist/src/backend/services/session/service/interceptor.bridge.js +47 -3
  387. package/dist/src/backend/services/session/service/interceptor.bridge.js.map +1 -1
  388. package/dist/src/backend/services/session/service/interceptor.bridge.test.d.ts +2 -0
  389. package/dist/src/backend/services/session/service/interceptor.bridge.test.d.ts.map +1 -0
  390. package/dist/src/backend/services/session/service/interceptor.bridge.test.js +83 -0
  391. package/dist/src/backend/services/session/service/interceptor.bridge.test.js.map +1 -0
  392. package/dist/src/backend/services/session/service/lifecycle/session-services.d.ts +16 -0
  393. package/dist/src/backend/services/session/service/lifecycle/session-services.d.ts.map +1 -0
  394. package/dist/src/backend/services/session/service/lifecycle/session-services.js +79 -0
  395. package/dist/src/backend/services/session/service/lifecycle/session-services.js.map +1 -0
  396. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts +4 -2
  397. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts.map +1 -1
  398. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js +6 -4
  399. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js.map +1 -1
  400. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js +10 -11
  401. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js.map +1 -1
  402. package/dist/src/backend/services/session/service/lifecycle/session.prompt.service.test.d.ts +2 -0
  403. package/dist/src/backend/services/session/service/lifecycle/session.prompt.service.test.d.ts.map +1 -0
  404. package/dist/src/backend/services/session/service/lifecycle/session.prompt.service.test.js +142 -0
  405. package/dist/src/backend/services/session/service/lifecycle/session.prompt.service.test.js.map +1 -0
  406. package/dist/src/backend/services/session/service/lifecycle/session.repository.d.ts +5 -2
  407. package/dist/src/backend/services/session/service/lifecycle/session.repository.d.ts.map +1 -1
  408. package/dist/src/backend/services/session/service/lifecycle/session.repository.js.map +1 -1
  409. package/dist/src/backend/services/session/service/lifecycle/session.repository.test.js.map +1 -1
  410. package/dist/src/backend/services/session/service/lifecycle/session.service.d.ts +16 -76
  411. package/dist/src/backend/services/session/service/lifecycle/session.service.d.ts.map +1 -1
  412. package/dist/src/backend/services/session/service/lifecycle/session.service.js +21 -215
  413. package/dist/src/backend/services/session/service/lifecycle/session.service.js.map +1 -1
  414. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js +159 -66
  415. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js.map +1 -1
  416. package/dist/src/backend/services/settings/resources/data-backup.accessor.d.ts +10 -2
  417. package/dist/src/backend/services/settings/resources/data-backup.accessor.d.ts.map +1 -1
  418. package/dist/src/backend/services/settings/resources/data-backup.accessor.js +4 -1
  419. package/dist/src/backend/services/settings/resources/data-backup.accessor.js.map +1 -1
  420. package/dist/src/backend/services/settings/resources/user-settings.accessor.d.ts.map +1 -1
  421. package/dist/src/backend/services/settings/resources/user-settings.accessor.js +1 -0
  422. package/dist/src/backend/services/settings/resources/user-settings.accessor.js.map +1 -1
  423. package/dist/src/backend/services/settings/resources/user-settings.accessor.test.d.ts +2 -0
  424. package/dist/src/backend/services/settings/resources/user-settings.accessor.test.d.ts.map +1 -0
  425. package/dist/src/backend/services/settings/resources/user-settings.accessor.test.js +24 -0
  426. package/dist/src/backend/services/settings/resources/user-settings.accessor.test.js.map +1 -0
  427. package/dist/src/backend/services/terminal/service/terminal-session.service.d.ts +3 -37
  428. package/dist/src/backend/services/terminal/service/terminal-session.service.d.ts.map +1 -1
  429. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.d.ts +25 -0
  430. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.d.ts.map +1 -0
  431. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.js +73 -0
  432. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.js.map +1 -0
  433. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.test.d.ts +2 -0
  434. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.test.d.ts.map +1 -0
  435. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.test.js +155 -0
  436. package/dist/src/backend/services/workspace/resources/workspace-auto-iteration.accessor.test.js.map +1 -0
  437. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.d.ts +61 -0
  438. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.d.ts.map +1 -0
  439. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.js +265 -0
  440. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.js.map +1 -0
  441. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.test.d.ts +2 -0
  442. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.test.d.ts.map +1 -0
  443. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.test.js +398 -0
  444. package/dist/src/backend/services/workspace/resources/workspace-pr.accessor.test.js.map +1 -0
  445. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.d.ts +50 -0
  446. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.d.ts.map +1 -0
  447. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.js +179 -0
  448. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.js.map +1 -0
  449. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.test.d.ts +2 -0
  450. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.test.d.ts.map +1 -0
  451. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.test.js +311 -0
  452. package/dist/src/backend/services/workspace/resources/workspace-ratchet.accessor.test.js.map +1 -0
  453. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.d.ts +33 -0
  454. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.d.ts.map +1 -0
  455. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.js +110 -0
  456. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.js.map +1 -0
  457. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.test.d.ts +2 -0
  458. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.test.d.ts.map +1 -0
  459. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.test.js +192 -0
  460. package/dist/src/backend/services/workspace/resources/workspace-run-script.accessor.test.js.map +1 -0
  461. package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts +61 -118
  462. package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts.map +1 -1
  463. package/dist/src/backend/services/workspace/resources/workspace.accessor.js +186 -426
  464. package/dist/src/backend/services/workspace/resources/workspace.accessor.js.map +1 -1
  465. package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js +286 -623
  466. package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js.map +1 -1
  467. package/dist/src/backend/services/workspace/service/bridges.d.ts +0 -1
  468. package/dist/src/backend/services/workspace/service/bridges.d.ts.map +1 -1
  469. package/dist/src/backend/services/workspace/service/index.d.ts +3 -3
  470. package/dist/src/backend/services/workspace/service/index.d.ts.map +1 -1
  471. package/dist/src/backend/services/workspace/service/index.js +2 -2
  472. package/dist/src/backend/services/workspace/service/index.js.map +1 -1
  473. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.d.ts +3 -2
  474. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.d.ts.map +1 -1
  475. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.js +1 -1
  476. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.js.map +1 -1
  477. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js +2 -3
  478. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js.map +1 -1
  479. package/dist/src/backend/services/workspace/service/lifecycle/data.service.d.ts +117 -387
  480. package/dist/src/backend/services/workspace/service/lifecycle/data.service.d.ts.map +1 -1
  481. package/dist/src/backend/services/workspace/service/lifecycle/data.service.js +7 -11
  482. package/dist/src/backend/services/workspace/service/lifecycle/data.service.js.map +1 -1
  483. package/dist/src/backend/services/workspace/service/lifecycle/data.service.test.js +13 -13
  484. package/dist/src/backend/services/workspace/service/lifecycle/data.service.test.js.map +1 -1
  485. package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.d.ts.map +1 -1
  486. package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.js +13 -30
  487. package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.js.map +1 -1
  488. package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.test.js +99 -29
  489. package/dist/src/backend/services/workspace/service/lifecycle/state-machine.service.test.js.map +1 -1
  490. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.d.ts +3 -192
  491. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.d.ts.map +1 -1
  492. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.js +3 -3
  493. package/dist/src/backend/services/workspace/service/lifecycle/workspace-auto-iteration.service.js.map +1 -1
  494. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.d.ts +6 -66
  495. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.d.ts.map +1 -1
  496. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.js +10 -17
  497. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.js.map +1 -1
  498. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.test.js +16 -4
  499. package/dist/src/backend/services/workspace/service/lifecycle/workspace-pr-snapshot.service.test.js.map +1 -1
  500. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.d.ts +6 -230
  501. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.d.ts.map +1 -1
  502. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.js +12 -22
  503. package/dist/src/backend/services/workspace/service/lifecycle/workspace-ratchet.service.js.map +1 -1
  504. package/dist/src/backend/services/workspace/service/lifecycle/workspace-relationships.service.d.ts +78 -75
  505. package/dist/src/backend/services/workspace/service/lifecycle/workspace-relationships.service.d.ts.map +1 -1
  506. package/dist/src/backend/services/workspace/service/lifecycle/workspace-run-script.service.d.ts +5 -132
  507. package/dist/src/backend/services/workspace/service/lifecycle/workspace-run-script.service.d.ts.map +1 -1
  508. package/dist/src/backend/services/workspace/service/lifecycle/workspace-run-script.service.js +3 -6
  509. package/dist/src/backend/services/workspace/service/lifecycle/workspace-run-script.service.js.map +1 -1
  510. package/dist/src/backend/services/workspace/service/lifecycle/workspace-state-capabilities.test.js +27 -4
  511. package/dist/src/backend/services/workspace/service/lifecycle/workspace-state-capabilities.test.js.map +1 -1
  512. package/dist/src/backend/services/workspace/service/query/project-management.service.d.ts +2 -70
  513. package/dist/src/backend/services/workspace/service/query/project-management.service.d.ts.map +1 -1
  514. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.d.ts +110 -280
  515. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.d.ts.map +1 -1
  516. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.js +4 -3
  517. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.js.map +1 -1
  518. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.test.js +7 -4
  519. package/dist/src/backend/services/workspace/service/query/workspace-maintenance.service.test.js.map +1 -1
  520. package/dist/src/backend/services/workspace/service/query/workspace-notification.service.d.ts +4 -4
  521. package/dist/src/backend/services/workspace/service/query/workspace-query.service.d.ts +29 -216
  522. package/dist/src/backend/services/workspace/service/query/workspace-query.service.d.ts.map +1 -1
  523. package/dist/src/backend/services/workspace/service/query/workspace-query.service.js +91 -139
  524. package/dist/src/backend/services/workspace/service/query/workspace-query.service.js.map +1 -1
  525. package/dist/src/backend/services/workspace/service/query/workspace-query.service.test.js +113 -102
  526. package/dist/src/backend/services/workspace/service/query/workspace-query.service.test.js.map +1 -1
  527. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.d.ts +1 -0
  528. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.d.ts.map +1 -1
  529. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.js +1 -1
  530. package/dist/src/backend/services/workspace/service/snapshot/workspace-snapshot-store.service.js.map +1 -1
  531. package/dist/src/backend/services/workspace/service/state/kanban-state.d.ts +1 -29
  532. package/dist/src/backend/services/workspace/service/state/kanban-state.d.ts.map +1 -1
  533. package/dist/src/backend/services/workspace/service/state/kanban-state.js +0 -191
  534. package/dist/src/backend/services/workspace/service/state/kanban-state.js.map +1 -1
  535. package/dist/src/backend/services/workspace/service/state/kanban-state.test.js +2 -410
  536. package/dist/src/backend/services/workspace/service/state/kanban-state.test.js.map +1 -1
  537. package/dist/src/backend/services/workspace/service/workspace-domain-exports.test.js +1 -4
  538. package/dist/src/backend/services/workspace/service/workspace-domain-exports.test.js.map +1 -1
  539. package/dist/src/backend/services/workspace/service/worktree/worktree-init.test.js +1 -1
  540. package/dist/src/backend/services/workspace/service/worktree/worktree-init.test.js.map +1 -1
  541. package/dist/src/backend/services/workspace-depth-triggers.integration.test.d.ts +2 -0
  542. package/dist/src/backend/services/workspace-depth-triggers.integration.test.d.ts.map +1 -0
  543. package/dist/src/backend/services/workspace-depth-triggers.integration.test.js +68 -0
  544. package/dist/src/backend/services/workspace-depth-triggers.integration.test.js.map +1 -0
  545. package/dist/src/backend/testing/check-prisma-versions-script.test.d.ts +2 -0
  546. package/dist/src/backend/testing/check-prisma-versions-script.test.d.ts.map +1 -0
  547. package/dist/src/backend/testing/check-prisma-versions-script.test.js +52 -0
  548. package/dist/src/backend/testing/check-prisma-versions-script.test.js.map +1 -0
  549. package/dist/src/backend/trpc/admin.router.test.js +7 -7
  550. package/dist/src/backend/trpc/admin.router.test.js.map +1 -1
  551. package/dist/src/backend/trpc/admin.trpc.d.ts +2 -4
  552. package/dist/src/backend/trpc/admin.trpc.d.ts.map +1 -1
  553. package/dist/src/backend/trpc/admin.trpc.js +3 -3
  554. package/dist/src/backend/trpc/admin.trpc.js.map +1 -1
  555. package/dist/src/backend/trpc/closed-sessions.trpc.d.ts +1 -1
  556. package/dist/src/backend/trpc/index.d.ts +227 -804
  557. package/dist/src/backend/trpc/index.d.ts.map +1 -1
  558. package/dist/src/backend/trpc/periodic-task.trpc.d.ts +4 -4
  559. package/dist/src/backend/trpc/project.trpc.d.ts +2 -70
  560. package/dist/src/backend/trpc/project.trpc.d.ts.map +1 -1
  561. package/dist/src/backend/trpc/session.router.test.js +22 -16
  562. package/dist/src/backend/trpc/session.router.test.js.map +1 -1
  563. package/dist/src/backend/trpc/session.trpc.d.ts +11 -45
  564. package/dist/src/backend/trpc/session.trpc.d.ts.map +1 -1
  565. package/dist/src/backend/trpc/session.trpc.js +13 -13
  566. package/dist/src/backend/trpc/session.trpc.js.map +1 -1
  567. package/dist/src/backend/trpc/workspace/children.router.test.js +42 -2
  568. package/dist/src/backend/trpc/workspace/children.router.test.js.map +1 -1
  569. package/dist/src/backend/trpc/workspace/children.trpc.d.ts +3 -37
  570. package/dist/src/backend/trpc/workspace/children.trpc.d.ts.map +1 -1
  571. package/dist/src/backend/trpc/workspace/children.trpc.js +38 -14
  572. package/dist/src/backend/trpc/workspace/children.trpc.js.map +1 -1
  573. package/dist/src/backend/trpc/workspace/composition.test.js +8 -5
  574. package/dist/src/backend/trpc/workspace/composition.test.js.map +1 -1
  575. package/dist/src/backend/trpc/workspace/init.trpc.d.ts +52 -40
  576. package/dist/src/backend/trpc/workspace/init.trpc.d.ts.map +1 -1
  577. package/dist/src/backend/trpc/workspace/workspace-helpers.d.ts +80 -77
  578. package/dist/src/backend/trpc/workspace/workspace-helpers.d.ts.map +1 -1
  579. package/dist/src/backend/trpc/workspace.router.test.js +22 -25
  580. package/dist/src/backend/trpc/workspace.router.test.js.map +1 -1
  581. package/dist/src/backend/trpc/workspace.trpc.d.ts +553 -1477
  582. package/dist/src/backend/trpc/workspace.trpc.d.ts.map +1 -1
  583. package/dist/src/backend/trpc/workspace.trpc.js +13 -43
  584. package/dist/src/backend/trpc/workspace.trpc.js.map +1 -1
  585. package/dist/src/cli/runtime-utils.d.ts.map +1 -1
  586. package/dist/src/cli/runtime-utils.js +4 -0
  587. package/dist/src/cli/runtime-utils.js.map +1 -1
  588. package/dist/src/cli/runtime-utils.test.d.ts +2 -0
  589. package/dist/src/cli/runtime-utils.test.d.ts.map +1 -0
  590. package/dist/src/cli/runtime-utils.test.js +28 -0
  591. package/dist/src/cli/runtime-utils.test.js.map +1 -0
  592. package/dist/src/shared/acp-protocol/protocol/renderer-window.d.ts +1 -0
  593. package/dist/src/shared/acp-protocol/protocol/renderer-window.d.ts.map +1 -1
  594. package/dist/src/shared/acp-protocol/protocol/renderer-window.js +13 -2
  595. package/dist/src/shared/acp-protocol/protocol/renderer-window.js.map +1 -1
  596. package/dist/src/shared/core/index.d.ts +1 -0
  597. package/dist/src/shared/core/index.d.ts.map +1 -1
  598. package/dist/src/shared/core/index.js +1 -0
  599. package/dist/src/shared/core/index.js.map +1 -1
  600. package/dist/src/shared/core/ratchet-state.d.ts +10 -0
  601. package/dist/src/shared/core/ratchet-state.d.ts.map +1 -0
  602. package/dist/src/shared/core/ratchet-state.js +32 -0
  603. package/dist/src/shared/core/ratchet-state.js.map +1 -0
  604. package/dist/src/shared/schemas/export-data.schema.d.ts +2 -12
  605. package/dist/src/shared/schemas/export-data.schema.d.ts.map +1 -1
  606. package/dist/src/shared/schemas/export-data.schema.js +2 -4
  607. package/dist/src/shared/schemas/export-data.schema.js.map +1 -1
  608. package/dist/src/shared/workspace-snapshot.d.ts +1 -1
  609. package/dist/src/test-utils/application-graph.d.ts.map +1 -1
  610. package/dist/src/test-utils/application-graph.js +16 -9
  611. package/dist/src/test-utils/application-graph.js.map +1 -1
  612. package/dist/tsconfig.backend.tsbuildinfo +1 -1
  613. package/package.json +90 -150
  614. package/prisma/migrations/20260726112950_drop_cached_kanban_column/migration.sql +132 -0
  615. package/prisma/migrations/20260726135402_split_workspace_ratchet/migration.sql +149 -0
  616. package/prisma/migrations/20260726181500_split_workspace_pr/migration.sql +142 -0
  617. package/prisma/migrations/20260726200000_derive_ratchet_state/migration.sql +101 -0
  618. package/prisma/migrations/20260726220000_split_workspace_run_script/migration.sql +131 -0
  619. package/prisma/migrations/20260726230000_split_workspace_auto_iteration/migration.sql +123 -0
  620. package/prisma/schema.prisma +219 -62
  621. package/dist/client/assets/arc-lK3Ig9GV.js +0 -1
  622. package/dist/client/assets/architectureDiagram-3BPJPVTR-CeUbfBqe.js +0 -36
  623. package/dist/client/assets/blockDiagram-GPEHLZMM-DiVGPkq2.js +0 -132
  624. package/dist/client/assets/channel-CvY1mvIl.js +0 -1
  625. package/dist/client/assets/chunk-AQP2D5EJ-dyo9i4xa.js +0 -231
  626. package/dist/client/assets/classDiagram-4FO5ZUOK-Db7ZXJ6w.js +0 -1
  627. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Db7ZXJ6w.js +0 -1
  628. package/dist/client/assets/cytoscape.esm-DkOyvmE4.js +0 -321
  629. package/dist/client/assets/dagre-BM42HDAG-CDzpFdgD.js +0 -4
  630. package/dist/client/assets/diagram-2AECGRRQ-dl1_7lyq.js +0 -43
  631. package/dist/client/assets/diagram-5GNKFQAL-B0ynMwBY.js +0 -10
  632. package/dist/client/assets/diagram-LMA3HP47-DZxXcfiX.js +0 -24
  633. package/dist/client/assets/diagram-OG6HWLK6-BncGM9Gv.js +0 -24
  634. package/dist/client/assets/erDiagram-TEJ5UH35-B9hxScvO.js +0 -85
  635. package/dist/client/assets/flowDiagram-I6XJVG4X-DgZ2jwJQ.js +0 -162
  636. package/dist/client/assets/ganttDiagram-6RSMTGT7-BrnNMNRY.js +0 -292
  637. package/dist/client/assets/gitGraphDiagram-PVQCEYII-BJmed6oD.js +0 -106
  638. package/dist/client/assets/index-Btlruz7h.css +0 -1
  639. package/dist/client/assets/index-DEKuJM5_.js +0 -674
  640. package/dist/client/assets/infoDiagram-5YYISTIA-CtLzR4ip.js +0 -2
  641. package/dist/client/assets/katex-DHMw6HUq.js +0 -257
  642. package/dist/client/assets/layout-SsrduOYp.js +0 -1
  643. package/dist/client/assets/pieDiagram-4H26LBE5-DgPu3GTs.js +0 -30
  644. package/dist/client/assets/sankeyDiagram-5OEKKPKP-DmYoq588.js +0 -40
  645. package/dist/client/assets/sequenceDiagram-3UESZ5HK-EVqdDzgf.js +0 -162
  646. package/dist/client/assets/stateDiagram-AJRCARHV-BRd6IxSa.js +0 -1
  647. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DR2vMoX5.js +0 -1
  648. package/dist/client/assets/vennDiagram-CIIHVFJN-CLslQYVi.js +0 -34
  649. package/dist/client/assets/wardley-L42UT6IY-DyEDLg3x.js +0 -161
  650. package/dist/client/assets/xychartDiagram-2RQKCTM6-DwzoT5Dl.js +0 -7
  651. package/dist/src/backend/interceptors/branch-rename.interceptor.d.ts +0 -3
  652. package/dist/src/backend/interceptors/branch-rename.interceptor.d.ts.map +0 -1
  653. package/dist/src/backend/interceptors/branch-rename.interceptor.js +0 -117
  654. package/dist/src/backend/interceptors/branch-rename.interceptor.js.map +0 -1
  655. package/dist/src/backend/interceptors/branch-rename.interceptor.test.d.ts +0 -2
  656. package/dist/src/backend/interceptors/branch-rename.interceptor.test.d.ts.map +0 -1
  657. package/dist/src/backend/interceptors/branch-rename.interceptor.test.js +0 -184
  658. package/dist/src/backend/interceptors/branch-rename.interceptor.test.js.map +0 -1
  659. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.d.ts +0 -6
  660. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.d.ts.map +0 -1
  661. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.js +0 -225
  662. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.js.map +0 -1
  663. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.d.ts +0 -2
  664. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.d.ts.map +0 -1
  665. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.js +0 -348
  666. package/dist/src/backend/interceptors/pre-pr-rename.interceptor.test.js.map +0 -1
  667. package/dist/src/backend/interceptors/pre-push-rename.interceptor.d.ts +0 -4
  668. package/dist/src/backend/interceptors/pre-push-rename.interceptor.d.ts.map +0 -1
  669. package/dist/src/backend/interceptors/pre-push-rename.interceptor.js +0 -136
  670. package/dist/src/backend/interceptors/pre-push-rename.interceptor.js.map +0 -1
  671. package/dist/src/backend/interceptors/pre-push-rename.interceptor.test.d.ts +0 -2
  672. package/dist/src/backend/interceptors/pre-push-rename.interceptor.test.d.ts.map +0 -1
  673. package/dist/src/backend/interceptors/pre-push-rename.interceptor.test.js +0 -260
  674. package/dist/src/backend/interceptors/pre-push-rename.interceptor.test.js.map +0 -1
  675. package/dist/src/backend/routers/websocket/dev-logs.handler.d.ts +0 -5
  676. package/dist/src/backend/routers/websocket/dev-logs.handler.d.ts.map +0 -1
  677. package/dist/src/backend/routers/websocket/dev-logs.handler.js +0 -28
  678. package/dist/src/backend/routers/websocket/dev-logs.handler.js.map +0 -1
  679. package/dist/src/backend/routers/websocket/dev-logs.handler.test.d.ts +0 -2
  680. package/dist/src/backend/routers/websocket/dev-logs.handler.test.d.ts.map +0 -1
  681. package/dist/src/backend/routers/websocket/dev-logs.handler.test.js.map +0 -1
  682. package/dist/src/backend/routers/websocket/post-run-logs.handler.d.ts +0 -5
  683. package/dist/src/backend/routers/websocket/post-run-logs.handler.d.ts.map +0 -1
  684. package/dist/src/backend/routers/websocket/post-run-logs.handler.js +0 -18
  685. package/dist/src/backend/routers/websocket/post-run-logs.handler.js.map +0 -1
  686. package/dist/src/backend/routers/websocket/post-run-logs.handler.test.d.ts +0 -2
  687. package/dist/src/backend/routers/websocket/post-run-logs.handler.test.d.ts.map +0 -1
  688. package/dist/src/backend/routers/websocket/post-run-logs.handler.test.js.map +0 -1
  689. package/dist/src/backend/services/github/service/pr-fetch-registry.d.ts +0 -20
  690. package/dist/src/backend/services/github/service/pr-fetch-registry.d.ts.map +0 -1
  691. package/dist/src/backend/services/github/service/pr-fetch-registry.js.map +0 -1
  692. package/dist/src/backend/services/github/service/pr-fetch-registry.test.d.ts +0 -2
  693. package/dist/src/backend/services/github/service/pr-fetch-registry.test.d.ts.map +0 -1
  694. package/dist/src/backend/services/github/service/pr-fetch-registry.test.js +0 -112
  695. package/dist/src/backend/services/github/service/pr-fetch-registry.test.js.map +0 -1
  696. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.d.ts +0 -11
  697. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.d.ts.map +0 -1
  698. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.js +0 -77
  699. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.js.map +0 -1
  700. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.d.ts +0 -2
  701. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.d.ts.map +0 -1
  702. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.js +0 -66
  703. package/dist/src/backend/services/ratchet/service/ratchet-state-machine.test.js.map +0 -1
  704. package/dist/src/backend/services/session/service/lifecycle/session.service.coverage.test.d.ts +0 -2
  705. package/dist/src/backend/services/session/service/lifecycle/session.service.coverage.test.d.ts.map +0 -1
  706. package/dist/src/backend/services/session/service/lifecycle/session.service.coverage.test.js +0 -279
  707. package/dist/src/backend/services/session/service/lifecycle/session.service.coverage.test.js.map +0 -1
@@ -86,9 +86,9 @@ import { workspaceDataService } from '../../../../../backend/services/workspace/
86
86
  import { closedSessionPersistenceService } from './closed-session-persistence.service.js';
87
87
  import { sessionPromptBuilder } from './session.prompt-builder.js';
88
88
  import { sessionRepository } from './session.repository.js';
89
- import { sessionService } from './session.service.js';
89
+ import { acpEventProcessor, sessionLifecycleService, sessionPromptTurnCompletionService, sessionService, } from './session-services.js';
90
90
  function getAcpProcessorState() {
91
- return sessionService.acpEventProcessor;
91
+ return acpEventProcessor;
92
92
  }
93
93
  function mockCreatedAcpClient(acpHandle) {
94
94
  vi.mocked(acpRuntimeManager.getOrCreateClient).mockImplementation(() => {
@@ -116,14 +116,18 @@ describe('SessionService', () => {
116
116
  acpProcessor.pendingAcpToolCalls.clear();
117
117
  acpProcessor.sessionToWorkspace.clear();
118
118
  acpProcessor.sessionToWorkingDir.clear();
119
- sessionService.setPromptTurnCompleteHandler(null);
119
+ sessionPromptTurnCompletionService.setHandler(null);
120
+ const workspaceBridge = {
121
+ markSessionRunning: vi.fn(),
122
+ markSessionIdle: vi.fn(),
123
+ recordRatchetSessionEnd: mockRecordRatchetSessionEnd,
124
+ resetPRDiscoveryBackoff: vi.fn(async () => true),
125
+ };
120
126
  sessionService.configure({
121
- workspace: {
122
- markSessionRunning: vi.fn(),
123
- markSessionIdle: vi.fn(),
124
- recordRatchetSessionEnd: mockRecordRatchetSessionEnd,
125
- resetPRDiscoveryBackoff: vi.fn(async () => true),
126
- },
127
+ workspace: workspaceBridge,
128
+ });
129
+ sessionLifecycleService.configure({
130
+ workspace: workspaceBridge,
127
131
  });
128
132
  vi.mocked(acpRuntimeManager.getClient).mockReturnValue(undefined);
129
133
  vi.mocked(acpRuntimeManager.isSessionRunning).mockReturnValue(false);
@@ -179,7 +183,7 @@ describe('SessionService', () => {
179
183
  });
180
184
  mockCreatedAcpClient(acpHandle);
181
185
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
182
- await sessionService.startSession('session-1', { initialPrompt: 'Hello' });
186
+ await sessionLifecycleService.startSession('session-1', { initialPrompt: 'Hello' });
183
187
  expect(sessionPromptBuilder.shouldInjectBranchRename).toHaveBeenCalledWith({
184
188
  branchName: 'auto-branch',
185
189
  isAutoGeneratedBranch: true,
@@ -238,7 +242,7 @@ describe('SessionService', () => {
238
242
  });
239
243
  mockCreatedAcpClient(acpHandle);
240
244
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
241
- await sessionService.startSession('session-1', { initialPrompt: '' });
245
+ await sessionLifecycleService.startSession('session-1', { initialPrompt: '' });
242
246
  expect(sessionRepository.updateSession).toHaveBeenCalledWith('session-1', {
243
247
  status: SessionStatus.RUNNING,
244
248
  });
@@ -279,7 +283,7 @@ describe('SessionService', () => {
279
283
  injectedBranchRename: false,
280
284
  });
281
285
  mockCreatedAcpClient(acpHandle);
282
- const result = await sessionService.getOrCreateSessionClient('session-1');
286
+ const result = await sessionLifecycleService.getOrCreateSessionClient('session-1');
283
287
  expect(result).toBe(acpHandle);
284
288
  expect(acpRuntimeManager.getOrCreateClient).toHaveBeenCalledWith('session-1', expect.objectContaining({
285
289
  workingDir: '/tmp/work',
@@ -328,7 +332,7 @@ describe('SessionService', () => {
328
332
  });
329
333
  mockCreatedAcpClient(acpHandle);
330
334
  const injectUserMessageSpy = vi.spyOn(sessionDomainService, 'injectCommittedUserMessage');
331
- await sessionService.getOrCreateSessionClient('session-1');
335
+ await sessionLifecycleService.getOrCreateSessionClient('session-1');
332
336
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
333
337
  acpHandlers.onAcpEvent('session-1', {
334
338
  type: 'acp_session_update',
@@ -375,7 +379,7 @@ describe('SessionService', () => {
375
379
  });
376
380
  mockCreatedAcpClient(acpHandle);
377
381
  const injectUserMessageSpy = vi.spyOn(sessionDomainService, 'injectCommittedUserMessage');
378
- await sessionService.getOrCreateSessionClient('session-1');
382
+ await sessionLifecycleService.getOrCreateSessionClient('session-1');
379
383
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
380
384
  expect(() => acpHandlers.onAcpEvent('session-1', unsafeCoerce({
381
385
  type: 'acp_session_update',
@@ -434,7 +438,7 @@ describe('SessionService', () => {
434
438
  ]);
435
439
  try {
436
440
  const injectUserMessageSpy = vi.spyOn(sessionDomainService, 'injectCommittedUserMessage');
437
- await sessionService.getOrCreateSessionClient('session-1');
441
+ await sessionLifecycleService.getOrCreateSessionClient('session-1');
438
442
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
439
443
  acpHandlers.onAcpEvent('session-1', {
440
444
  type: 'acp_session_update',
@@ -486,7 +490,7 @@ describe('SessionService', () => {
486
490
  });
487
491
  mockCreatedAcpClient(acpHandle);
488
492
  const injectUserMessageSpy = vi.spyOn(sessionDomainService, 'injectCommittedUserMessage');
489
- await sessionService.getOrCreateSessionClient('session-1');
493
+ await sessionLifecycleService.getOrCreateSessionClient('session-1');
490
494
  vi.mocked(acpRuntimeManager.isSessionWorking).mockReturnValue(true);
491
495
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
492
496
  acpHandlers.onAcpEvent('session-1', {
@@ -602,7 +606,7 @@ describe('SessionService', () => {
602
606
  injectedBranchRename: false,
603
607
  });
604
608
  mockCreatedAcpClient(acpHandle);
605
- const result = await sessionService.getOrCreateSessionClientFromRecord(session);
609
+ const result = await sessionLifecycleService.getOrCreateSessionClientFromRecord(session);
606
610
  expect(result).toBe(acpHandle);
607
611
  expect(sessionRepository.getSessionById).not.toHaveBeenCalled();
608
612
  expect(acpRuntimeManager.getOrCreateClient).toHaveBeenCalledWith('session-1', expect.objectContaining({
@@ -647,14 +651,14 @@ describe('SessionService', () => {
647
651
  injectedBranchRename: false,
648
652
  });
649
653
  mockCreatedAcpClient(acpHandle);
650
- await sessionService.getOrCreateSessionClientFromRecord(session);
654
+ await sessionLifecycleService.getOrCreateSessionClientFromRecord(session);
651
655
  const stopLoad = createDeferred();
652
656
  vi.mocked(sessionRepository.getSessionById).mockReturnValueOnce(stopLoad.promise);
653
657
  vi.mocked(sessionRepository.updateSession).mockClear();
654
658
  vi.mocked(sessionRepository.updateSession).mockResolvedValue(session);
655
659
  vi.mocked(acpRuntimeManager.isStopInProgress).mockReturnValue(false);
656
660
  vi.mocked(acpRuntimeManager.stopClient).mockResolvedValue();
657
- const stopPromise = sessionService.stopSession('session-race-test');
661
+ const stopPromise = sessionLifecycleService.stopSession('session-race-test');
658
662
  await Promise.resolve();
659
663
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
660
664
  await acpHandlers.onExit('session-race-test', 0);
@@ -673,7 +677,7 @@ describe('SessionService', () => {
673
677
  it('still clears lifecycle state when only the runtime is already stopping', async () => {
674
678
  vi.mocked(acpRuntimeManager.isStopInProgress).mockReturnValue(true);
675
679
  const clearQueuedWorkSpy = vi.spyOn(sessionDomainService, 'clearQueuedWork');
676
- await sessionService.stopSession('session-1');
680
+ await sessionLifecycleService.stopSession('session-1');
677
681
  expect(acpRuntimeManager.stopClient).not.toHaveBeenCalled();
678
682
  expect(sessionRepository.updateSessionIfStatus).not.toHaveBeenCalled();
679
683
  expect(clearQueuedWorkSpy).toHaveBeenCalledWith('session-1', { emitSnapshot: true });
@@ -718,15 +722,15 @@ describe('SessionService', () => {
718
722
  });
719
723
  vi.mocked(acpRuntimeManager.stopClient).mockResolvedValue();
720
724
  mockCreatedAcpClient(acpHandle);
721
- const stopPromise = sessionService.stopSession('session-1');
725
+ const stopPromise = sessionLifecycleService.stopSession('session-1');
722
726
  await vi.waitFor(() => {
723
727
  expect(sessionRepository.getSessionById).toHaveBeenCalledTimes(1);
724
728
  });
725
- const startError = await sessionService
729
+ const startError = await sessionLifecycleService
726
730
  .startSession('session-1', { initialPrompt: '' })
727
731
  .then(() => null)
728
732
  .catch((error) => error);
729
- const acquisitionError = await sessionService
733
+ const acquisitionError = await sessionLifecycleService
730
734
  .getOrCreateSessionClientFromRecord(session)
731
735
  .then(() => null)
732
736
  .catch((error) => error);
@@ -741,7 +745,7 @@ describe('SessionService', () => {
741
745
  vi.mocked(acpRuntimeManager.stopClient).mockResolvedValue();
742
746
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
743
747
  const clearQueuedWorkSpy = vi.spyOn(sessionDomainService, 'clearQueuedWork');
744
- await sessionService.stopSession('session-1');
748
+ await sessionLifecycleService.stopSession('session-1');
745
749
  expect(clearQueuedWorkSpy).toHaveBeenCalledWith('session-1', { emitSnapshot: true });
746
750
  });
747
751
  it('clears queued work before waiting for the runtime to stop', async () => {
@@ -750,7 +754,7 @@ describe('SessionService', () => {
750
754
  vi.mocked(acpRuntimeManager.stopClient).mockReturnValue(runtimeStop.promise);
751
755
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
752
756
  const clearQueuedWorkSpy = vi.spyOn(sessionDomainService, 'clearQueuedWork');
753
- const stopPromise = sessionService.stopSession('session-1');
757
+ const stopPromise = sessionLifecycleService.stopSession('session-1');
754
758
  await vi.waitFor(() => {
755
759
  expect(acpRuntimeManager.stopClient).toHaveBeenCalledWith('session-1');
756
760
  });
@@ -776,7 +780,7 @@ describe('SessionService', () => {
776
780
  const secondRejection = expect(secondSend).rejects.toMatchObject({ name: 'AbortError' });
777
781
  await Promise.resolve();
778
782
  expect(acpRuntimeManager.sendPrompt).toHaveBeenCalledTimes(1);
779
- await sessionService.stopSession('session-queued-stop');
783
+ await sessionLifecycleService.stopSession('session-queued-stop');
780
784
  await secondRejection;
781
785
  expect(acpRuntimeManager.sendPrompt).toHaveBeenCalledTimes(1);
782
786
  firstPrompt.resolve({ stopReason: 'end_turn' });
@@ -796,7 +800,7 @@ describe('SessionService', () => {
796
800
  ]);
797
801
  await Promise.resolve();
798
802
  expect(acpRuntimeManager.sendPrompt).toHaveBeenCalledTimes(1);
799
- await sessionService.stopSession('session-restarted-after-stop');
803
+ await sessionLifecycleService.stopSession('session-restarted-after-stop');
800
804
  const restartedSend = sessionService.sendAcpMessage('session-restarted-after-stop', [
801
805
  { type: 'text', text: 'after restart' },
802
806
  ]);
@@ -868,7 +872,7 @@ describe('SessionService', () => {
868
872
  injectedBranchRename: false,
869
873
  });
870
874
  mockCreatedAcpClient(acpHandle);
871
- await sessionService.getOrCreateSessionClient('session-runtime-exit');
875
+ await sessionLifecycleService.getOrCreateSessionClient('session-runtime-exit');
872
876
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
873
877
  const firstPrompt = createDeferred();
874
878
  vi.mocked(acpRuntimeManager.sendPrompt).mockReturnValueOnce(firstPrompt.promise);
@@ -924,7 +928,7 @@ describe('SessionService', () => {
924
928
  injectedBranchRename: false,
925
929
  });
926
930
  mockCreatedAcpClient(acpHandle);
927
- await sessionService.getOrCreateSessionClient('session-runtime-exit');
931
+ await sessionLifecycleService.getOrCreateSessionClient('session-runtime-exit');
928
932
  const pendingToolCalls = getAcpProcessorState().pendingAcpToolCalls;
929
933
  pendingToolCalls.set('session-runtime-exit', new Map([
930
934
  [
@@ -983,7 +987,7 @@ describe('SessionService', () => {
983
987
  const secondRejection = expect(secondSend).rejects.toMatchObject({ name: 'AbortError' });
984
988
  await Promise.resolve();
985
989
  expect(acpRuntimeManager.sendPrompt).toHaveBeenCalledTimes(1);
986
- await sessionService.stopSession('session-active-stop');
990
+ await sessionLifecycleService.stopSession('session-active-stop');
987
991
  await secondRejection;
988
992
  const thirdSend = sessionService.sendAcpMessage('session-active-stop', [
989
993
  { type: 'text', text: 'third' },
@@ -1000,7 +1004,7 @@ describe('SessionService', () => {
1000
1004
  vi.mocked(acpRuntimeManager.stopClient).mockResolvedValue();
1001
1005
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1002
1006
  const clearSessionSpy = vi.spyOn(sessionDomainService, 'clearSession');
1003
- await sessionService.stopSession('session-clear');
1007
+ await sessionLifecycleService.stopSession('session-clear');
1004
1008
  expect(clearSessionSpy).toHaveBeenCalledWith('session-clear');
1005
1009
  });
1006
1010
  it('keeps in-memory session state after manual stop when clients are connected', async () => {
@@ -1010,7 +1014,7 @@ describe('SessionService', () => {
1010
1014
  const clearSessionSpy = vi.spyOn(sessionDomainService, 'clearSession');
1011
1015
  sessionEventBus.registerViewerCountProvider((sessionId) => sessionId === 'session-active' ? 1 : 0);
1012
1016
  try {
1013
- await sessionService.stopSession('session-active');
1017
+ await sessionLifecycleService.stopSession('session-active');
1014
1018
  }
1015
1019
  finally {
1016
1020
  sessionEventBus.registerViewerCountProvider(null);
@@ -1019,7 +1023,7 @@ describe('SessionService', () => {
1019
1023
  });
1020
1024
  it('marks workspace session idle during manual stop', async () => {
1021
1025
  const markSessionIdle = vi.fn();
1022
- sessionService.configure({
1026
+ sessionLifecycleService.configure({
1023
1027
  workspace: {
1024
1028
  markSessionRunning: vi.fn(),
1025
1029
  markSessionIdle,
@@ -1034,7 +1038,7 @@ describe('SessionService', () => {
1034
1038
  workspaceId: 'workspace-1',
1035
1039
  }));
1036
1040
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1037
- await sessionService.stopSession('session-1');
1041
+ await sessionLifecycleService.stopSession('session-1');
1038
1042
  expect(markSessionIdle).toHaveBeenCalledWith('workspace-1', 'session-1');
1039
1043
  });
1040
1044
  it('still clears queued work and marks idle when runtime stop fails', async () => {
@@ -1047,7 +1051,7 @@ describe('SessionService', () => {
1047
1051
  }));
1048
1052
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1049
1053
  const clearQueuedWorkSpy = vi.spyOn(sessionDomainService, 'clearQueuedWork');
1050
- await sessionService.stopSession('session-1');
1054
+ await sessionLifecycleService.stopSession('session-1');
1051
1055
  expect(sessionRepository.updateSessionIfStatus).toHaveBeenCalledWith('session-1', {
1052
1056
  status: SessionStatus.IDLE,
1053
1057
  }, [SessionStatus.RUNNING]);
@@ -1078,7 +1082,7 @@ describe('SessionService', () => {
1078
1082
  const appendClaudeEventSpy = vi
1079
1083
  .spyOn(sessionDomainService, 'appendClaudeEvent')
1080
1084
  .mockReturnValue(77);
1081
- await sessionService.stopSession('session-1');
1085
+ await sessionLifecycleService.stopSession('session-1');
1082
1086
  expect(emitDeltaSpy).toHaveBeenCalledWith('session-1', expect.objectContaining({
1083
1087
  type: 'tool_progress',
1084
1088
  tool_use_id: 'call-1',
@@ -1102,7 +1106,7 @@ describe('SessionService', () => {
1102
1106
  });
1103
1107
  it('continues stop cleanup when orphaned tool-call finalization throws', async () => {
1104
1108
  const markSessionIdle = vi.fn();
1105
- sessionService.configure({
1109
+ sessionLifecycleService.configure({
1106
1110
  workspace: {
1107
1111
  markSessionRunning: vi.fn(),
1108
1112
  markSessionIdle,
@@ -1131,7 +1135,7 @@ describe('SessionService', () => {
1131
1135
  vi.spyOn(sessionDomainService, 'emitDelta').mockImplementationOnce(() => {
1132
1136
  throw new Error('emit failed');
1133
1137
  });
1134
- await sessionService.stopSession('session-1');
1138
+ await sessionLifecycleService.stopSession('session-1');
1135
1139
  expect(sessionRepository.updateSessionIfStatus).toHaveBeenCalledWith('session-1', {
1136
1140
  status: SessionStatus.IDLE,
1137
1141
  }, [SessionStatus.RUNNING]);
@@ -1166,7 +1170,7 @@ describe('SessionService', () => {
1166
1170
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1167
1171
  vi.mocked(sessionRepository.deleteSession).mockResolvedValue({});
1168
1172
  try {
1169
- await sessionService.stopSession('session-1');
1173
+ await sessionLifecycleService.stopSession('session-1');
1170
1174
  expect(mockRecordRatchetSessionEnd).toHaveBeenCalledWith('workspace-1', 'session-1', 'COMPLETED');
1171
1175
  expect(closedSessionPersistenceService.persistClosedSession).toHaveBeenCalledWith({
1172
1176
  sessionId: 'session-1',
@@ -1200,7 +1204,7 @@ describe('SessionService', () => {
1200
1204
  }));
1201
1205
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1202
1206
  vi.mocked(closedSessionPersistenceService.persistClosedSession).mockRejectedValue(new Error('Disk full'));
1203
- await sessionService.stopSession('session-1');
1207
+ await sessionLifecycleService.stopSession('session-1');
1204
1208
  expect(closedSessionPersistenceService.persistClosedSession).toHaveBeenCalledTimes(1);
1205
1209
  expect(sessionRepository.deleteSession).not.toHaveBeenCalled();
1206
1210
  });
@@ -1213,7 +1217,7 @@ describe('SessionService', () => {
1213
1217
  workflow: 'default',
1214
1218
  }));
1215
1219
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1216
- await sessionService.stopSession('session-2');
1220
+ await sessionLifecycleService.stopSession('session-2');
1217
1221
  expect(sessionRepository.deleteSession).not.toHaveBeenCalled();
1218
1222
  });
1219
1223
  it('clears ratchet pointer but does not delete session when transient cleanup is disabled', async () => {
@@ -1225,7 +1229,7 @@ describe('SessionService', () => {
1225
1229
  workflow: 'ratchet',
1226
1230
  }));
1227
1231
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1228
- await sessionService.stopSession('session-3', {
1232
+ await sessionLifecycleService.stopSession('session-3', {
1229
1233
  cleanupTransientRatchetSession: false,
1230
1234
  });
1231
1235
  expect(mockRecordRatchetSessionEnd).toHaveBeenCalledWith('workspace-1', 'session-3', 'COMPLETED');
@@ -1263,7 +1267,7 @@ describe('SessionService', () => {
1263
1267
  });
1264
1268
  vi.mocked(acpRuntimeManager.getOrCreateClient).mockRejectedValue(new Error('spawn failed'));
1265
1269
  const setRuntimeSnapshotSpy = vi.spyOn(sessionDomainService, 'setRuntimeSnapshot');
1266
- await expect(sessionService.getOrCreateSessionClient('session-1')).rejects.toThrow('spawn failed');
1270
+ await expect(sessionLifecycleService.getOrCreateSessionClient('session-1')).rejects.toThrow('spawn failed');
1267
1271
  expect(setRuntimeSnapshotSpy).toHaveBeenNthCalledWith(1, 'session-1', expect.objectContaining({
1268
1272
  phase: 'starting',
1269
1273
  processState: 'alive',
@@ -1278,7 +1282,7 @@ describe('SessionService', () => {
1278
1282
  });
1279
1283
  it('throws when session not found during client creation', async () => {
1280
1284
  vi.mocked(sessionRepository.getSessionById).mockResolvedValue(null);
1281
- await expect(sessionService.getOrCreateSessionClient('session-1')).rejects.toThrow('Session not found: session-1');
1285
+ await expect(sessionLifecycleService.getOrCreateSessionClient('session-1')).rejects.toThrow('Session not found: session-1');
1282
1286
  });
1283
1287
  it('returns null session options when workspace is missing', async () => {
1284
1288
  const session = unsafeCoerce({
@@ -1291,7 +1295,7 @@ describe('SessionService', () => {
1291
1295
  });
1292
1296
  vi.mocked(sessionRepository.getSessionById).mockResolvedValue(session);
1293
1297
  vi.mocked(sessionRepository.getWorkspaceById).mockResolvedValue(null);
1294
- const options = await sessionService.getSessionOptions('session-1');
1298
+ const options = await sessionLifecycleService.getSessionOptions('session-1');
1295
1299
  expect(options).toBeNull();
1296
1300
  });
1297
1301
  it('clears ratchetActiveSessionId and deletes session on ACP ratchet exit', async () => {
@@ -1336,7 +1340,7 @@ describe('SessionService', () => {
1336
1340
  });
1337
1341
  mockCreatedAcpClient(acpHandle);
1338
1342
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
1339
- await sessionService.startSession('session-1');
1343
+ await sessionLifecycleService.startSession('session-1');
1340
1344
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
1341
1345
  await acpHandlers.onExit('session-1', 0);
1342
1346
  expect(sessionRepository.updateSession).toHaveBeenCalledWith('session-1', {
@@ -1388,7 +1392,7 @@ describe('SessionService', () => {
1388
1392
  });
1389
1393
  mockCreatedAcpClient(acpHandle);
1390
1394
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
1391
- await sessionService.startSession('session-1');
1395
+ await sessionLifecycleService.startSession('session-1');
1392
1396
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
1393
1397
  await expect(acpHandlers.onExit('session-1', 0)).resolves.toBeUndefined();
1394
1398
  expect(sessionRepository.updateSession).toHaveBeenCalledWith('session-1', {
@@ -1433,7 +1437,7 @@ describe('SessionService', () => {
1433
1437
  });
1434
1438
  mockCreatedAcpClient(acpHandle);
1435
1439
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
1436
- await sessionService.startSession('session-2');
1440
+ await sessionLifecycleService.startSession('session-2');
1437
1441
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
1438
1442
  await acpHandlers.onExit('session-2', 0);
1439
1443
  expect(sessionRepository.updateSession).toHaveBeenCalledWith('session-2', {
@@ -1480,7 +1484,7 @@ describe('SessionService', () => {
1480
1484
  });
1481
1485
  mockCreatedAcpClient(acpHandle);
1482
1486
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
1483
- await sessionService.startSession('session-2');
1487
+ await sessionLifecycleService.startSession('session-2');
1484
1488
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
1485
1489
  await acpHandlers.onExit('session-2', exitCode);
1486
1490
  expect(sessionRepository.updateSession).toHaveBeenCalledWith('session-2', {
@@ -1499,7 +1503,7 @@ describe('SessionService', () => {
1499
1503
  vi.mocked(acpRuntimeManager.isSessionRunning).mockImplementation(() => {
1500
1504
  throw new Error('isSessionRunning failed');
1501
1505
  });
1502
- await expect(sessionService.stopSession('session-1')).rejects.toThrow('isSessionRunning failed');
1506
+ await expect(sessionLifecycleService.stopSession('session-1')).rejects.toThrow('isSessionRunning failed');
1503
1507
  expect(mockAcpTraceLoggerCloseSession).toHaveBeenCalledWith('session-1');
1504
1508
  });
1505
1509
  it('closes ACP trace session even when runtime-exit cleanup throws', async () => {
@@ -1538,7 +1542,7 @@ describe('SessionService', () => {
1538
1542
  });
1539
1543
  mockCreatedAcpClient(acpHandle);
1540
1544
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
1541
- await sessionService.startSession('session-2');
1545
+ await sessionLifecycleService.startSession('session-2');
1542
1546
  const acpHandlers = vi.mocked(acpRuntimeManager.getOrCreateClient).mock.calls[0][2];
1543
1547
  vi.mocked(acpRuntimeManager.isSessionRunning).mockImplementation(() => {
1544
1548
  throw new Error('isSessionRunning failed');
@@ -1581,7 +1585,7 @@ describe('SessionService', () => {
1581
1585
  injectedBranchRename: false,
1582
1586
  });
1583
1587
  mockCreatedAcpClient(acpHandle);
1584
- await sessionService.getOrCreateSessionClient('session-1');
1588
+ await sessionLifecycleService.getOrCreateSessionClient('session-1');
1585
1589
  expect(acpRuntimeManager.getOrCreateClient).toHaveBeenCalled();
1586
1590
  expect(sessionRepository.updateSession).toHaveBeenCalledWith('session-1', {
1587
1591
  status: SessionStatus.RUNNING,
@@ -1688,7 +1692,7 @@ describe('SessionService', () => {
1688
1692
  vi.useFakeTimers();
1689
1693
  try {
1690
1694
  const onPromptTurnComplete = vi.fn().mockResolvedValue(undefined);
1691
- sessionService.setPromptTurnCompleteHandler(onPromptTurnComplete);
1695
+ sessionPromptTurnCompletionService.setHandler(onPromptTurnComplete);
1692
1696
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({
1693
1697
  stopReason: 'end_turn',
1694
1698
  });
@@ -1705,7 +1709,7 @@ describe('SessionService', () => {
1705
1709
  vi.useFakeTimers();
1706
1710
  try {
1707
1711
  const onPromptTurnComplete = vi.fn().mockResolvedValue(undefined);
1708
- sessionService.setPromptTurnCompleteHandler(onPromptTurnComplete);
1712
+ sessionPromptTurnCompletionService.setHandler(onPromptTurnComplete);
1709
1713
  vi.mocked(acpRuntimeManager.sendPrompt).mockRejectedValue({
1710
1714
  code: -32_600,
1711
1715
  message: 'Invalid request',
@@ -1725,7 +1729,7 @@ describe('SessionService', () => {
1725
1729
  vi.useFakeTimers();
1726
1730
  try {
1727
1731
  const onPromptTurnComplete = vi.fn().mockResolvedValue(undefined);
1728
- sessionService.setPromptTurnCompleteHandler(onPromptTurnComplete);
1732
+ sessionPromptTurnCompletionService.setHandler(onPromptTurnComplete);
1729
1733
  vi.mocked(acpRuntimeManager.sendPrompt).mockRejectedValue(new Error('network blip'));
1730
1734
  await expect(sessionService.sendAcpMessage('session-1', [{ type: 'text', text: 'hello' }])).rejects.toThrow('network blip');
1731
1735
  expect(onPromptTurnComplete).not.toHaveBeenCalled();
@@ -1740,14 +1744,14 @@ describe('SessionService', () => {
1740
1744
  vi.useFakeTimers();
1741
1745
  try {
1742
1746
  const onPromptTurnComplete = vi.fn().mockResolvedValue(undefined);
1743
- sessionService.setPromptTurnCompleteHandler(onPromptTurnComplete);
1747
+ sessionPromptTurnCompletionService.setHandler(onPromptTurnComplete);
1744
1748
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({
1745
1749
  stopReason: 'end_turn',
1746
1750
  });
1747
1751
  vi.mocked(acpRuntimeManager.stopClient).mockResolvedValue();
1748
1752
  vi.mocked(sessionRepository.updateSession).mockResolvedValue({});
1749
1753
  await sessionService.sendAcpMessage('session-1', [{ type: 'text', text: 'hello' }]);
1750
- await sessionService.stopSession('session-1');
1754
+ await sessionLifecycleService.stopSession('session-1');
1751
1755
  await vi.runOnlyPendingTimersAsync();
1752
1756
  expect(onPromptTurnComplete).not.toHaveBeenCalled();
1753
1757
  }
@@ -1761,14 +1765,14 @@ describe('SessionService', () => {
1761
1765
  const prompt = createDeferred();
1762
1766
  const runtimeStop = createDeferred();
1763
1767
  const onPromptTurnComplete = vi.fn().mockResolvedValue(undefined);
1764
- sessionService.setPromptTurnCompleteHandler(onPromptTurnComplete);
1768
+ sessionPromptTurnCompletionService.setHandler(onPromptTurnComplete);
1765
1769
  vi.mocked(acpRuntimeManager.sendPrompt).mockReturnValue(prompt.promise);
1766
1770
  vi.mocked(acpRuntimeManager.stopClient).mockReturnValue(runtimeStop.promise);
1767
1771
  const sendPromise = sessionService.sendAcpMessage('session-1', [
1768
1772
  { type: 'text', text: 'hello' },
1769
1773
  ]);
1770
1774
  await Promise.resolve();
1771
- const stopPromise = sessionService.stopSession('session-1');
1775
+ const stopPromise = sessionLifecycleService.stopSession('session-1');
1772
1776
  await vi.waitFor(() => {
1773
1777
  expect(acpRuntimeManager.stopClient).toHaveBeenCalledWith('session-1');
1774
1778
  });
@@ -1784,11 +1788,100 @@ describe('SessionService', () => {
1784
1788
  vi.useRealTimers();
1785
1789
  }
1786
1790
  });
1791
+ it('preserves stopped runtime when an in-flight prompt times out after stop completes', async () => {
1792
+ vi.useFakeTimers();
1793
+ const sessionId = 'session-prompt-timeout-after-stop';
1794
+ sessionEventBus.registerViewerCountProvider((viewedSessionId) => viewedSessionId === sessionId ? 1 : 0);
1795
+ const publishToSessionSpy = vi.spyOn(sessionEventBus, 'publishToSession');
1796
+ try {
1797
+ const prompt = createDeferred();
1798
+ const onPromptTurnComplete = vi.fn().mockResolvedValue(undefined);
1799
+ sessionPromptTurnCompletionService.setHandler(onPromptTurnComplete);
1800
+ vi.mocked(acpRuntimeManager.sendPrompt).mockReturnValue(prompt.promise);
1801
+ vi.mocked(acpRuntimeManager.stopClient).mockResolvedValue();
1802
+ const sendPromise = sessionService.sendAcpMessage(sessionId, [
1803
+ { type: 'text', text: 'hello' },
1804
+ ]);
1805
+ const sendRejection = expect(sendPromise).rejects.toThrow('Prompt timed out');
1806
+ await vi.waitFor(() => {
1807
+ expect(acpRuntimeManager.sendPrompt).toHaveBeenCalledWith(sessionId, [{ type: 'text', text: 'hello' }], undefined);
1808
+ });
1809
+ await sessionLifecycleService.stopSession(sessionId);
1810
+ expect(sessionLifecycleService.isSessionStopping(sessionId)).toBe(false);
1811
+ publishToSessionSpy.mockClear();
1812
+ prompt.reject(new Error('Prompt timed out'));
1813
+ await sendRejection;
1814
+ await vi.runOnlyPendingTimersAsync();
1815
+ expect(sessionLifecycleService.getRuntimeSnapshot(sessionId)).toMatchObject({
1816
+ phase: 'idle',
1817
+ processState: 'stopped',
1818
+ activity: 'IDLE',
1819
+ });
1820
+ expect(publishToSessionSpy).not.toHaveBeenCalledWith(sessionId, expect.objectContaining({
1821
+ type: 'session_delta',
1822
+ data: expect.objectContaining({
1823
+ type: 'session_runtime_updated',
1824
+ sessionRuntime: expect.objectContaining({ processState: 'alive' }),
1825
+ }),
1826
+ }));
1827
+ expect(onPromptTurnComplete).not.toHaveBeenCalled();
1828
+ }
1829
+ finally {
1830
+ publishToSessionSpy.mockRestore();
1831
+ sessionEventBus.registerViewerCountProvider(null);
1832
+ vi.useRealTimers();
1833
+ }
1834
+ });
1835
+ it('does not finalize a restarted prompt when a stopped prompt later times out', async () => {
1836
+ const sessionId = 'session-restarted-before-old-prompt-timeout';
1837
+ const stoppedPrompt = createDeferred();
1838
+ const restartedPrompt = createDeferred();
1839
+ vi.mocked(acpRuntimeManager.sendPrompt)
1840
+ .mockReturnValueOnce(stoppedPrompt.promise)
1841
+ .mockReturnValueOnce(restartedPrompt.promise);
1842
+ vi.mocked(acpRuntimeManager.stopClient).mockResolvedValue();
1843
+ const stoppedSend = sessionService.sendAcpMessage(sessionId, [
1844
+ { type: 'text', text: 'before stop' },
1845
+ ]);
1846
+ const stoppedSendRejection = expect(stoppedSend).rejects.toThrow('Prompt timed out');
1847
+ await vi.waitFor(() => {
1848
+ expect(acpRuntimeManager.sendPrompt).toHaveBeenCalledTimes(1);
1849
+ });
1850
+ await sessionLifecycleService.stopSession(sessionId);
1851
+ const restartedSend = sessionService.sendAcpMessage(sessionId, [
1852
+ { type: 'text', text: 'after restart' },
1853
+ ]);
1854
+ await vi.waitFor(() => {
1855
+ expect(acpRuntimeManager.sendPrompt).toHaveBeenCalledTimes(2);
1856
+ });
1857
+ const pendingToolCalls = getAcpProcessorState().pendingAcpToolCalls;
1858
+ pendingToolCalls.set(sessionId, new Map([
1859
+ [
1860
+ 'restarted-call',
1861
+ {
1862
+ toolUseId: 'restarted-call',
1863
+ toolName: 'Run tests',
1864
+ },
1865
+ ],
1866
+ ]));
1867
+ const appendClaudeEventSpy = vi
1868
+ .spyOn(sessionDomainService, 'appendClaudeEvent')
1869
+ .mockReturnValue(88);
1870
+ stoppedPrompt.reject(new Error('Prompt timed out'));
1871
+ await stoppedSendRejection;
1872
+ const restartedToolCallSurvived = pendingToolCalls.get(sessionId)?.has('restarted-call');
1873
+ const stalePromptFinalizedToolCall = appendClaudeEventSpy.mock.calls.length > 0;
1874
+ pendingToolCalls.delete(sessionId);
1875
+ restartedPrompt.resolve({ stopReason: 'end_turn' });
1876
+ await expect(restartedSend).resolves.toBe('end_turn');
1877
+ expect(restartedToolCallSurvived).toBe(true);
1878
+ expect(stalePromptFinalizedToolCall).toBe(false);
1879
+ });
1787
1880
  it('swallows prompt-turn completion callback failures', async () => {
1788
1881
  vi.useFakeTimers();
1789
1882
  try {
1790
1883
  const onPromptTurnComplete = vi.fn().mockRejectedValue(new Error('dispatch failed'));
1791
- sessionService.setPromptTurnCompleteHandler(onPromptTurnComplete);
1884
+ sessionPromptTurnCompletionService.setHandler(onPromptTurnComplete);
1792
1885
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({
1793
1886
  stopReason: 'end_turn',
1794
1887
  });
@@ -1837,7 +1930,7 @@ describe('SessionService', () => {
1837
1930
  });
1838
1931
  mockCreatedAcpClient(acpHandle);
1839
1932
  vi.mocked(acpRuntimeManager.sendPrompt).mockResolvedValue({ stopReason: 'end_turn' });
1840
- await sessionService.startSession('session-1', { initialPrompt: 'go' });
1933
+ await sessionLifecycleService.startSession('session-1', { initialPrompt: 'go' });
1841
1934
  expect(sessionRepository.getSessionById).toHaveBeenCalledTimes(1);
1842
1935
  });
1843
1936
  it('normalizes stale loading runtime to idle when no process is active', () => {
@@ -1847,7 +1940,7 @@ describe('SessionService', () => {
1847
1940
  activity: 'IDLE',
1848
1941
  updatedAt: new Date('2026-02-10T01:45:35.844Z').toISOString(),
1849
1942
  });
1850
- const runtime = sessionService.getRuntimeSnapshot('session-1');
1943
+ const runtime = sessionLifecycleService.getRuntimeSnapshot('session-1');
1851
1944
  expect(runtime).toMatchObject({
1852
1945
  phase: 'idle',
1853
1946
  processState: 'stopped',
@@ -1861,7 +1954,7 @@ describe('SessionService', () => {
1861
1954
  activity: 'IDLE',
1862
1955
  updatedAt: new Date().toISOString(),
1863
1956
  });
1864
- const runtime = sessionService.getRuntimeSnapshot('session-1');
1957
+ const runtime = sessionLifecycleService.getRuntimeSnapshot('session-1');
1865
1958
  expect(runtime).toMatchObject({
1866
1959
  phase: 'loading',
1867
1960
  processState: 'unknown',
@@ -1881,7 +1974,7 @@ describe('SessionService', () => {
1881
1974
  configOptions: [],
1882
1975
  }));
1883
1976
  vi.mocked(acpRuntimeManager.isSessionWorking).mockReturnValue(false);
1884
- const runtime = sessionService.getRuntimeSnapshot('session-1');
1977
+ const runtime = sessionLifecycleService.getRuntimeSnapshot('session-1');
1885
1978
  expect(runtime).toEqual({
1886
1979
  phase: 'idle',
1887
1980
  processState: 'alive',
@@ -1891,13 +1984,13 @@ describe('SessionService', () => {
1891
1984
  });
1892
1985
  it('stops all ACP clients during shutdown', async () => {
1893
1986
  vi.mocked(acpRuntimeManager.stopAllClients).mockResolvedValue(undefined);
1894
- await sessionService.stopAllClients(4321);
1987
+ await sessionLifecycleService.stopAllClients(4321);
1895
1988
  expect(acpRuntimeManager.stopAllClients).toHaveBeenCalledTimes(1);
1896
1989
  expect(acpRuntimeManager.stopAllClients).toHaveBeenCalledWith(4321);
1897
1990
  });
1898
1991
  it('propagates ACP shutdown failure', async () => {
1899
1992
  vi.mocked(acpRuntimeManager.stopAllClients).mockRejectedValueOnce(new Error('acp shutdown failed'));
1900
- await expect(sessionService.stopAllClients()).rejects.toThrow('acp shutdown failed');
1993
+ await expect(sessionLifecycleService.stopAllClients()).rejects.toThrow('acp shutdown failed');
1901
1994
  expect(acpRuntimeManager.stopAllClients).toHaveBeenCalledWith(5000);
1902
1995
  });
1903
1996
  });