factory-factory 0.4.5 → 0.4.7

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 (766) hide show
  1. package/dist/client/assets/{abnfDiagram-VRR7QNED-DygwVN25.js → abnfDiagram-N423BO3Z-BZQ2vUo6.js} +1 -1
  2. package/dist/client/assets/{arc-CcnMw5av.js → arc-XI8Jpfl3.js} +1 -1
  3. package/dist/client/assets/architectureDiagram-T3A2C74G-Dt7Y1pyP.js +36 -0
  4. package/dist/client/assets/{blockDiagram-677ZJIJ3-DQ77xvqH.js → blockDiagram-VBNYF7ZC-DldefwGh.js} +1 -1
  5. package/dist/client/assets/{c4Diagram-LMCZKHZV-B-9QZJ1e.js → c4Diagram-5PPSVZJV-Ba08x7Ef.js} +1 -1
  6. package/dist/client/assets/channel-CRP5IiHm.js +1 -0
  7. package/dist/client/assets/{chunk-32BRIVSS-CV9UmSkI.js → chunk-2GRJ4B5K-B9S0F-4G.js} +1 -1
  8. package/dist/client/assets/{chunk-2Q5K7J3B-DhfBY-Wd.js → chunk-2Q5K7J3B-CZXgC_Jx.js} +1 -1
  9. package/dist/client/assets/{chunk-EX3LRPZG-Dj63JdET.js → chunk-5RXB4S5H-3z0Q5lZX.js} +1 -1
  10. package/dist/client/assets/{chunk-5VM5RSS4-BUNj3iDY.js → chunk-5VM5RSS4-D2hwZzSy.js} +1 -1
  11. package/dist/client/assets/{chunk-MOJQB5TN-PY5GLOxr.js → chunk-6Q2QTUOP-DhgyUVVB.js} +1 -1
  12. package/dist/client/assets/{chunk-V7JOEXUC--zp7Z0xS.js → chunk-GF5L2VYU-B9CpXn1z.js} +1 -1
  13. package/dist/client/assets/{chunk-JWPE2WC7-i6Ud3VAu.js → chunk-JWPE2WC7-C3uO_aKI.js} +1 -1
  14. package/dist/client/assets/{chunk-VR4S4FIN-JstmsazP.js → chunk-KBJHAD2P-BclkmYso.js} +1 -1
  15. package/dist/client/assets/{chunk-RYQCIY6F-pIEuQy1L.js → chunk-RYQCIY6F-D6aZFqMZ.js} +1 -1
  16. package/dist/client/assets/{chunk-XXDRQBXY-C66lsFmy.js → chunk-XXDRQBXY-BQb7-SCi.js} +1 -1
  17. package/dist/client/assets/classDiagram-JCYQIIEL-CB4-8RDd.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-OCEON4UE-CB4-8RDd.js +1 -0
  19. package/dist/client/assets/{cose-bilkent-JH36ORCC-D3jSuAHn.js → cose-bilkent-JH36ORCC-WLzzMmoC.js} +1 -1
  20. package/dist/client/assets/{cynefin-VYW2F7L2-Dx3xfGS7.js → cynefin-VYW2F7L2-D2EF0q2Q.js} +1 -1
  21. package/dist/client/assets/{cynefinDiagram-TSTJHNR4-BcGYZcSJ.js → cynefinDiagram-MW4NZA55-CwoCQCrP.js} +1 -1
  22. package/dist/client/assets/{dagre-VKFMJZFB-CLZSDf9x.js → dagre-VZM6K2ZE-Cg4AkVGB.js} +1 -1
  23. package/dist/client/assets/{diagram-OA4YK3LP-C7WEtC2B.js → diagram-7IWD3JNH-D9lnDmSl.js} +1 -1
  24. package/dist/client/assets/{diagram-FQU43EPY-Nosv2FJf.js → diagram-B4RE2ZJO-AhUFMusY.js} +1 -1
  25. package/dist/client/assets/{diagram-NH7WQ7WH-BmRiUIAJ.js → diagram-LBJQPF4R-C81JtkuS.js} +1 -1
  26. package/dist/client/assets/{diagram-G47NLZAW-CPjqONaO.js → diagram-Q27KOJAE-BOzaYlQ2.js} +1 -1
  27. package/dist/client/assets/diagram-UB23O5K3-uXHocDB0.js +41 -0
  28. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-D2Ye87k4.js → ebnfDiagram-BXEA7PRR-Du4yOTiI.js} +1 -1
  29. package/dist/client/assets/{erDiagram-Q63AITRT-CgZF8eG-.js → erDiagram-JOGREHBK-BxBwtYA0.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-23GEKE2U-bxoO3Eep.js → flowDiagram-UKHOOZJN-YQc_Us9R.js} +6 -6
  31. package/dist/client/assets/{ganttDiagram-NO4QXBWP-BAtqPw6P.js → ganttDiagram-PKOTCBZU-CO08NXgj.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-DYQqeJ8w.js → gitGraphDiagram-DS77QQ5N-NRBrIkNv.js} +1 -1
  33. package/dist/client/assets/index-CVVo6xHd.css +1 -0
  34. package/dist/client/assets/index-CrLTUCBe.js +695 -0
  35. package/dist/client/assets/{infoDiagram-FWYZ7A6U-CZQCerFQ.js → infoDiagram-6WML65LV-CcOh5qQM.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-Bc7wE25N.js → ishikawaDiagram-WSZJBQD7-Ci4gKk1n.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-5HDEW3XC-D5qqjKJz.js → journeyDiagram-NVQOT4AX-CpW1inrw.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-HUTT4EX6-42kkaHBo.js → kanban-definition-27J2QSJJ-jez_FwZT.js} +1 -1
  39. package/dist/client/assets/{linear-Dg3NQEM3.js → linear-6SNETQpS.js} +1 -1
  40. package/dist/client/assets/{mindmap-definition-LN4V7U3C-CRANKUcD.js → mindmap-definition-FAOFIHXS-SmrP71Hb.js} +1 -1
  41. package/dist/client/assets/{mobile-baseline-D6bQ8WTB.js → mobile-baseline-8VVGaFwv.js} +1 -1
  42. package/dist/client/assets/{pegDiagram-2B236MQR-qJQPOd8H.js → pegDiagram-VL7TDLO6-BdZpPP9I.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-ENE6RG2P-B5wB7Ccf.js → pieDiagram-7S7Q4E2Y-JiNW5VtU.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-CCZfXF8m.js → quadrantDiagram-CIZ2JOQS-C2VhzPor.js} +1 -1
  45. package/dist/client/assets/{railroadDiagram-RFXS5EU6-BuIrSJUW.js → railroadDiagram-AXF67PYL-BdfHLYrf.js} +1 -1
  46. package/dist/client/assets/{requirementDiagram-TGXJPOKE-DfIr0zZ3.js → requirementDiagram-LRYGKXZP-BRxDcjdJ.js} +1 -1
  47. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-CJoUXRWq.js → sankeyDiagram-W5VNT64P-BvibpHKV.js} +1 -1
  48. package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-Cq1lOU1b.js → sequenceDiagram-SI44F4Z6-CstrIf8Q.js} +1 -1
  49. package/dist/client/assets/{sizeCapture-X5ZJPWSS-XHOsOkor.js → sizeCapture-X5ZJPWSS-fplvtb2v.js} +1 -1
  50. package/dist/client/assets/{stateDiagram-2N3HPSRC-BLVzzete.js → stateDiagram-OKZ733FA-Cb0qJfhN.js} +1 -1
  51. package/dist/client/assets/stateDiagram-v2-UEYNNEHI-C_Uzjhvg.js +1 -0
  52. package/dist/client/assets/{swimlanes-5IMT3BWC-C20mYIPR.js → swimlanes-SLNWSIFB-BAqCm7Gx.js} +2 -2
  53. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-CO4t8Utk.js +8 -0
  54. package/dist/client/assets/{terminal-instance-Dw2gcPib.js → terminal-instance-B0prRfF6.js} +1 -1
  55. package/dist/client/assets/{timeline-definition-FHXFAJF6-DlceJAxJ.js → timeline-definition-Z64GVDOM-BZbQ0pZK.js} +1 -1
  56. package/dist/client/assets/{vennDiagram-L72KCM5P-CFl-Eo1Y.js → vennDiagram-T6HMQDX7-B3YQXfS4.js} +1 -1
  57. package/dist/client/assets/{wardleyDiagram-EHGQE667-eBpeLOoN.js → wardleyDiagram-T6FBY63Y-Cufi2KwO.js} +1 -1
  58. package/dist/client/assets/{xychartDiagram-FW5EYKEG-B8RBkKiX.js → xychartDiagram-ELKLHX3M-CHGxh5zQ.js} +4 -4
  59. package/dist/client/audio-worklets/pcm-capture-processor.js +67 -0
  60. package/dist/client/index.html +2 -2
  61. package/dist/client/sounds/voice-thinking-start.mp3 +0 -0
  62. package/dist/prisma/generated/commonInputTypes.d.ts +40 -0
  63. package/dist/prisma/generated/commonInputTypes.d.ts.map +1 -1
  64. package/dist/prisma/generated/enums.d.ts +1 -0
  65. package/dist/prisma/generated/enums.d.ts.map +1 -1
  66. package/dist/prisma/generated/enums.js +2 -1
  67. package/dist/prisma/generated/enums.js.map +1 -1
  68. package/dist/prisma/generated/internal/class.js +4 -4
  69. package/dist/prisma/generated/internal/class.js.map +1 -1
  70. package/dist/prisma/generated/internal/prismaNamespace.d.ts +7 -1
  71. package/dist/prisma/generated/internal/prismaNamespace.d.ts.map +1 -1
  72. package/dist/prisma/generated/internal/prismaNamespace.js +6 -0
  73. package/dist/prisma/generated/internal/prismaNamespace.js.map +1 -1
  74. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts +6 -0
  75. package/dist/prisma/generated/internal/prismaNamespaceBrowser.d.ts.map +1 -1
  76. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js +6 -0
  77. package/dist/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  78. package/dist/prisma/generated/models/UserSettings.d.ts +216 -1
  79. package/dist/prisma/generated/models/UserSettings.d.ts.map +1 -1
  80. package/dist/src/backend/app-context.d.ts +4 -1
  81. package/dist/src/backend/app-context.d.ts.map +1 -1
  82. package/dist/src/backend/app-context.js +6 -3
  83. package/dist/src/backend/app-context.js.map +1 -1
  84. package/dist/src/backend/app-context.test.js +6 -1
  85. package/dist/src/backend/app-context.test.js.map +1 -1
  86. package/dist/src/backend/clients/git.client.d.ts +0 -8
  87. package/dist/src/backend/clients/git.client.d.ts.map +1 -1
  88. package/dist/src/backend/clients/git.client.js +0 -70
  89. package/dist/src/backend/clients/git.client.js.map +1 -1
  90. package/dist/src/backend/clients/git.client.test.js +2 -178
  91. package/dist/src/backend/clients/git.client.test.js.map +1 -1
  92. package/dist/src/backend/interceptors/branch-naming.interceptor.test.js +3 -2
  93. package/dist/src/backend/interceptors/branch-naming.interceptor.test.js.map +1 -1
  94. package/dist/src/backend/lib/file-helpers.d.ts +0 -1
  95. package/dist/src/backend/lib/file-helpers.d.ts.map +1 -1
  96. package/dist/src/backend/lib/file-helpers.js +0 -27
  97. package/dist/src/backend/lib/file-helpers.js.map +1 -1
  98. package/dist/src/backend/lib/shell.d.ts +0 -4
  99. package/dist/src/backend/lib/shell.d.ts.map +1 -1
  100. package/dist/src/backend/lib/shell.js +0 -25
  101. package/dist/src/backend/lib/shell.js.map +1 -1
  102. package/dist/src/backend/orchestration/data-backup.service.d.ts.map +1 -1
  103. package/dist/src/backend/orchestration/data-backup.service.js +10 -0
  104. package/dist/src/backend/orchestration/data-backup.service.js.map +1 -1
  105. package/dist/src/backend/orchestration/data-backup.service.test.js +23 -0
  106. package/dist/src/backend/orchestration/data-backup.service.test.js.map +1 -1
  107. package/dist/src/backend/orchestration/reconciliation.service.d.ts.map +1 -1
  108. package/dist/src/backend/orchestration/reconciliation.service.js +4 -0
  109. package/dist/src/backend/orchestration/reconciliation.service.js.map +1 -1
  110. package/dist/src/backend/orchestration/reconciliation.service.test.js +39 -0
  111. package/dist/src/backend/orchestration/reconciliation.service.test.js.map +1 -1
  112. package/dist/src/backend/routers/websocket/chat.handler.d.ts.map +1 -1
  113. package/dist/src/backend/routers/websocket/chat.handler.js +1 -17
  114. package/dist/src/backend/routers/websocket/chat.handler.js.map +1 -1
  115. package/dist/src/backend/routers/websocket/chat.handler.test.js +2 -8
  116. package/dist/src/backend/routers/websocket/chat.handler.test.js.map +1 -1
  117. package/dist/src/backend/routers/websocket/index.d.ts +1 -0
  118. package/dist/src/backend/routers/websocket/index.d.ts.map +1 -1
  119. package/dist/src/backend/routers/websocket/index.js +1 -0
  120. package/dist/src/backend/routers/websocket/index.js.map +1 -1
  121. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.d.ts +11 -0
  122. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.d.ts.map +1 -0
  123. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.js +28 -0
  124. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.js.map +1 -0
  125. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.d.ts +2 -0
  126. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.d.ts.map +1 -0
  127. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.js +84 -0
  128. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.js.map +1 -0
  129. package/dist/src/backend/routers/websocket/voice.handler.d.ts +3 -0
  130. package/dist/src/backend/routers/websocket/voice.handler.d.ts.map +1 -0
  131. package/dist/src/backend/routers/websocket/voice.handler.js +46 -0
  132. package/dist/src/backend/routers/websocket/voice.handler.js.map +1 -0
  133. package/dist/src/backend/routers/websocket/websocket.integration.test.js +0 -4
  134. package/dist/src/backend/routers/websocket/websocket.integration.test.js.map +1 -1
  135. package/dist/src/backend/server.d.ts.map +1 -1
  136. package/dist/src/backend/server.js +5 -3
  137. package/dist/src/backend/server.js.map +1 -1
  138. package/dist/src/backend/server.upgrade.test.js +26 -4
  139. package/dist/src/backend/server.upgrade.test.js.map +1 -1
  140. package/dist/src/backend/services/decision-log/resources/decision-log.accessor.d.ts +0 -2
  141. package/dist/src/backend/services/decision-log/resources/decision-log.accessor.d.ts.map +1 -1
  142. package/dist/src/backend/services/decision-log/resources/decision-log.accessor.js +0 -6
  143. package/dist/src/backend/services/decision-log/resources/decision-log.accessor.js.map +1 -1
  144. package/dist/src/backend/services/github/service/github-cli/schemas.d.ts +0 -23
  145. package/dist/src/backend/services/github/service/github-cli/schemas.d.ts.map +1 -1
  146. package/dist/src/backend/services/github/service/github-cli/schemas.js +0 -18
  147. package/dist/src/backend/services/github/service/github-cli/schemas.js.map +1 -1
  148. package/dist/src/backend/services/github/service/github-cli.service.d.ts +0 -2
  149. package/dist/src/backend/services/github/service/github-cli.service.d.ts.map +1 -1
  150. package/dist/src/backend/services/github/service/github-cli.service.js +0 -37
  151. package/dist/src/backend/services/github/service/github-cli.service.js.map +1 -1
  152. package/dist/src/backend/services/github/service/github-cli.service.test.js +3 -13
  153. package/dist/src/backend/services/github/service/github-cli.service.test.js.map +1 -1
  154. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js +6 -0
  155. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js.map +1 -1
  156. package/dist/src/backend/services/session/resources/agent-session.accessor.d.ts +0 -1
  157. package/dist/src/backend/services/session/resources/agent-session.accessor.d.ts.map +1 -1
  158. package/dist/src/backend/services/session/resources/agent-session.accessor.js +0 -8
  159. package/dist/src/backend/services/session/resources/agent-session.accessor.js.map +1 -1
  160. package/dist/src/backend/services/session/resources/agent-session.accessor.test.js +0 -10
  161. package/dist/src/backend/services/session/resources/agent-session.accessor.test.js.map +1 -1
  162. package/dist/src/backend/services/session/service/acp/acp-client-factory.d.ts +33 -0
  163. package/dist/src/backend/services/session/service/acp/acp-client-factory.d.ts.map +1 -0
  164. package/dist/src/backend/services/session/service/acp/acp-client-factory.js +274 -0
  165. package/dist/src/backend/services/session/service/acp/acp-client-factory.js.map +1 -0
  166. package/dist/src/backend/services/session/service/acp/acp-client-factory.test.d.ts +2 -0
  167. package/dist/src/backend/services/session/service/acp/acp-client-factory.test.d.ts.map +1 -0
  168. package/dist/src/backend/services/session/service/acp/acp-client-factory.test.js +454 -0
  169. package/dist/src/backend/services/session/service/acp/acp-client-factory.test.js.map +1 -0
  170. package/dist/src/backend/services/session/service/acp/acp-client-handler.d.ts +1 -0
  171. package/dist/src/backend/services/session/service/acp/acp-client-handler.d.ts.map +1 -1
  172. package/dist/src/backend/services/session/service/acp/acp-client-handler.js +47 -0
  173. package/dist/src/backend/services/session/service/acp/acp-client-handler.js.map +1 -1
  174. package/dist/src/backend/services/session/service/acp/acp-client-handler.test.js +228 -0
  175. package/dist/src/backend/services/session/service/acp/acp-client-handler.test.js.map +1 -1
  176. package/dist/src/backend/services/session/service/acp/acp-event-translator.d.ts +1 -37
  177. package/dist/src/backend/services/session/service/acp/acp-event-translator.d.ts.map +1 -1
  178. package/dist/src/backend/services/session/service/acp/acp-event-translator.js +1 -334
  179. package/dist/src/backend/services/session/service/acp/acp-event-translator.js.map +1 -1
  180. package/dist/src/backend/services/session/service/acp/acp-event-translator.test.js +5 -484
  181. package/dist/src/backend/services/session/service/acp/acp-event-translator.test.js.map +1 -1
  182. package/dist/src/backend/services/session/service/acp/acp-permission-bridge.d.ts +0 -1
  183. package/dist/src/backend/services/session/service/acp/acp-permission-bridge.d.ts.map +1 -1
  184. package/dist/src/backend/services/session/service/acp/acp-permission-bridge.js +0 -3
  185. package/dist/src/backend/services/session/service/acp/acp-permission-bridge.js.map +1 -1
  186. package/dist/src/backend/services/session/service/acp/acp-permission-bridge.test.js +0 -10
  187. package/dist/src/backend/services/session/service/acp/acp-permission-bridge.test.js.map +1 -1
  188. package/dist/src/backend/services/session/service/acp/acp-process-handle.d.ts +2 -0
  189. package/dist/src/backend/services/session/service/acp/acp-process-handle.d.ts.map +1 -1
  190. package/dist/src/backend/services/session/service/acp/acp-process-handle.js +12 -0
  191. package/dist/src/backend/services/session/service/acp/acp-process-handle.js.map +1 -1
  192. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.d.ts +2 -0
  193. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.d.ts.map +1 -0
  194. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.js +83 -0
  195. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.js.map +1 -0
  196. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.d.ts +17 -0
  197. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.d.ts.map +1 -0
  198. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.js +96 -0
  199. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.js.map +1 -0
  200. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.test.d.ts +2 -0
  201. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.test.d.ts.map +1 -0
  202. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.test.js +140 -0
  203. package/dist/src/backend/services/session/service/acp/acp-prompt-controller.test.js.map +1 -0
  204. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.d.ts +8 -0
  205. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.d.ts.map +1 -0
  206. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.js +81 -0
  207. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.js.map +1 -0
  208. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.test.d.ts +2 -0
  209. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.test.d.ts.map +1 -0
  210. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.test.js +208 -0
  211. package/dist/src/backend/services/session/service/acp/acp-runtime-config-controller.test.js.map +1 -0
  212. package/dist/src/backend/services/session/service/acp/acp-runtime-contracts.d.ts +25 -0
  213. package/dist/src/backend/services/session/service/acp/acp-runtime-contracts.d.ts.map +1 -0
  214. package/dist/src/backend/services/session/service/acp/acp-runtime-contracts.js +2 -0
  215. package/dist/src/backend/services/session/service/acp/acp-runtime-contracts.js.map +1 -0
  216. package/dist/src/backend/services/session/service/acp/acp-runtime-error-handler.d.ts +5 -0
  217. package/dist/src/backend/services/session/service/acp/acp-runtime-error-handler.d.ts.map +1 -0
  218. package/dist/src/backend/services/session/service/acp/acp-runtime-error-handler.js +39 -0
  219. package/dist/src/backend/services/session/service/acp/acp-runtime-error-handler.js.map +1 -0
  220. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.d.ts +20 -0
  221. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.d.ts.map +1 -0
  222. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.js +68 -0
  223. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.js.map +1 -0
  224. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.test.d.ts +2 -0
  225. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.test.d.ts.map +1 -0
  226. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.test.js +17 -0
  227. package/dist/src/backend/services/session/service/acp/acp-runtime-errors.test.js.map +1 -0
  228. package/dist/src/backend/services/session/service/acp/acp-runtime-events.d.ts +36 -1
  229. package/dist/src/backend/services/session/service/acp/acp-runtime-events.d.ts.map +1 -1
  230. package/dist/src/backend/services/session/service/acp/acp-runtime-exit-handler.d.ts +5 -0
  231. package/dist/src/backend/services/session/service/acp/acp-runtime-exit-handler.d.ts.map +1 -0
  232. package/dist/src/backend/services/session/service/acp/acp-runtime-exit-handler.js +35 -0
  233. package/dist/src/backend/services/session/service/acp/acp-runtime-exit-handler.js.map +1 -0
  234. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.browsing.test.d.ts +2 -0
  235. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.browsing.test.d.ts.map +1 -0
  236. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.browsing.test.js +310 -0
  237. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.browsing.test.js.map +1 -0
  238. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.config.test.d.ts +2 -0
  239. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.config.test.d.ts.map +1 -0
  240. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.config.test.js +162 -0
  241. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.config.test.js.map +1 -0
  242. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.creation.test.d.ts +2 -0
  243. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.creation.test.d.ts.map +1 -0
  244. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.creation.test.js +390 -0
  245. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.creation.test.js.map +1 -0
  246. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.d.ts +24 -56
  247. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.d.ts.map +1 -1
  248. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.facade.test.d.ts +2 -0
  249. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.facade.test.d.ts.map +1 -0
  250. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.facade.test.js +59 -0
  251. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.facade.test.js.map +1 -0
  252. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.js +69 -811
  253. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.js.map +1 -1
  254. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.prompt.test.d.ts +2 -0
  255. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.prompt.test.d.ts.map +1 -0
  256. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.prompt.test.js +185 -0
  257. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.prompt.test.js.map +1 -0
  258. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.task-status.test.d.ts +2 -0
  259. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.task-status.test.d.ts.map +1 -0
  260. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.task-status.test.js +57 -0
  261. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.task-status.test.js.map +1 -0
  262. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.termination.test.d.ts +2 -0
  263. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.termination.test.d.ts.map +1 -0
  264. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.termination.test.js +392 -0
  265. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.termination.test.js.map +1 -0
  266. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-harness.d.ts +27 -0
  267. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-harness.d.ts.map +1 -0
  268. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-harness.js +96 -0
  269. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-harness.js.map +1 -0
  270. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-helpers.d.ts +59 -0
  271. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-helpers.d.ts.map +1 -0
  272. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-helpers.js +142 -0
  273. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test-helpers.js.map +1 -0
  274. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.d.ts +21 -0
  275. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.d.ts.map +1 -0
  276. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.js +112 -0
  277. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.js.map +1 -0
  278. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.test.d.ts +2 -0
  279. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.test.d.ts.map +1 -0
  280. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.test.js +142 -0
  281. package/dist/src/backend/services/session/service/acp/acp-runtime-quiescence.test.js.map +1 -0
  282. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.creation.test.d.ts +2 -0
  283. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.creation.test.d.ts.map +1 -0
  284. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.creation.test.js +333 -0
  285. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.creation.test.js.map +1 -0
  286. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.d.ts +85 -0
  287. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.d.ts.map +1 -0
  288. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.js +633 -0
  289. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.js.map +1 -0
  290. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.status.test.d.ts +2 -0
  291. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.status.test.d.ts.map +1 -0
  292. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.status.test.js +99 -0
  293. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.status.test.js.map +1 -0
  294. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.termination.test.d.ts +2 -0
  295. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.termination.test.d.ts.map +1 -0
  296. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.termination.test.js +490 -0
  297. package/dist/src/backend/services/session/service/acp/acp-runtime-supervisor.termination.test.js.map +1 -0
  298. package/dist/src/backend/services/session/service/acp/acp-session-config-options.d.ts +1 -0
  299. package/dist/src/backend/services/session/service/acp/acp-session-config-options.d.ts.map +1 -1
  300. package/dist/src/backend/services/session/service/acp/acp-session-config-options.js +4 -17
  301. package/dist/src/backend/services/session/service/acp/acp-session-config-options.js.map +1 -1
  302. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.d.ts +2 -0
  303. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.d.ts.map +1 -0
  304. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.js +121 -0
  305. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.js.map +1 -0
  306. package/dist/src/backend/services/session/service/acp/acp-session-negotiation.integration.test.js +1 -1
  307. package/dist/src/backend/services/session/service/acp/acp-session-negotiation.integration.test.js.map +1 -1
  308. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.d.ts +9 -0
  309. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.d.ts.map +1 -0
  310. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.js +96 -0
  311. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.js.map +1 -0
  312. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.test.d.ts +2 -0
  313. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.test.d.ts.map +1 -0
  314. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.test.js +171 -0
  315. package/dist/src/backend/services/session/service/acp/acp-subagent-browser.test.js.map +1 -0
  316. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.d.ts +7 -0
  317. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.d.ts.map +1 -0
  318. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.js +160 -0
  319. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.js.map +1 -0
  320. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.d.ts +2 -0
  321. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.d.ts.map +1 -0
  322. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.js +260 -0
  323. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.js.map +1 -0
  324. package/dist/src/backend/services/session/service/acp/claude-model-options.d.ts +5 -0
  325. package/dist/src/backend/services/session/service/acp/claude-model-options.d.ts.map +1 -0
  326. package/dist/src/backend/services/session/service/acp/claude-model-options.js +25 -0
  327. package/dist/src/backend/services/session/service/acp/claude-model-options.js.map +1 -0
  328. package/dist/src/backend/services/session/service/acp/claude-model-options.test.d.ts +2 -0
  329. package/dist/src/backend/services/session/service/acp/claude-model-options.test.d.ts.map +1 -0
  330. package/dist/src/backend/services/session/service/acp/claude-model-options.test.js +49 -0
  331. package/dist/src/backend/services/session/service/acp/claude-model-options.test.js.map +1 -0
  332. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/adapter-state.d.ts +2 -0
  333. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/adapter-state.d.ts.map +1 -1
  334. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.d.ts +3 -1
  335. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.d.ts.map +1 -1
  336. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.js +78 -7
  337. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.js.map +1 -1
  338. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.js +169 -0
  339. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.js.map +1 -1
  340. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.notification-ordering.test.d.ts +2 -0
  341. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.notification-ordering.test.d.ts.map +1 -0
  342. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.notification-ordering.test.js +265 -0
  343. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.notification-ordering.test.js.map +1 -0
  344. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.test.js +283 -14
  345. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.test.js.map +1 -1
  346. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.d.ts +7 -0
  347. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.d.ts.map +1 -0
  348. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.js +98 -0
  349. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.js.map +1 -0
  350. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.test.d.ts +2 -0
  351. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.test.d.ts.map +1 -0
  352. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.test.js +148 -0
  353. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-notification-queue.test.js.map +1 -0
  354. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.d.ts +38 -0
  355. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.d.ts.map +1 -0
  356. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.js +287 -0
  357. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.js.map +1 -0
  358. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.d.ts +2 -0
  359. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.d.ts.map +1 -0
  360. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.js +648 -0
  361. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.js.map +1 -0
  362. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.d.ts +12 -0
  363. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.d.ts.map +1 -0
  364. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.js +51 -0
  365. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.js.map +1 -0
  366. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.d.ts +2 -0
  367. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.d.ts.map +1 -0
  368. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.js +95 -0
  369. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.js.map +1 -0
  370. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.d.ts +226 -19
  371. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.d.ts.map +1 -1
  372. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.js +118 -4
  373. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.js.map +1 -1
  374. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.test.js +125 -1
  375. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.test.js.map +1 -1
  376. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.d.ts +17 -1
  377. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.d.ts.map +1 -1
  378. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.js +231 -30
  379. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.js.map +1 -1
  380. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.test.js +689 -4
  381. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.test.js.map +1 -1
  382. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/task-status-protocol.d.ts +8 -0
  383. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/task-status-protocol.d.ts.map +1 -0
  384. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/task-status-protocol.js +9 -0
  385. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/task-status-protocol.js.map +1 -0
  386. package/dist/src/backend/services/session/service/acp/index.d.ts +3 -2
  387. package/dist/src/backend/services/session/service/acp/index.d.ts.map +1 -1
  388. package/dist/src/backend/services/session/service/acp/index.js +2 -0
  389. package/dist/src/backend/services/session/service/acp/index.js.map +1 -1
  390. package/dist/src/backend/services/session/service/acp/types.d.ts +1 -0
  391. package/dist/src/backend/services/session/service/acp/types.d.ts.map +1 -1
  392. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.d.ts +3 -0
  393. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.d.ts.map +1 -1
  394. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.js +44 -2
  395. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.js.map +1 -1
  396. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.d.ts +2 -0
  397. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.d.ts.map +1 -0
  398. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.js +108 -0
  399. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.js.map +1 -0
  400. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.d.ts.map +1 -1
  401. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.js +9 -1
  402. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.js.map +1 -1
  403. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.recovery.test.d.ts +2 -0
  404. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.recovery.test.d.ts.map +1 -0
  405. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.recovery.test.js +195 -0
  406. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.recovery.test.js.map +1 -0
  407. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.test.js +1 -23
  408. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/load-session.handler.test.js.map +1 -1
  409. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.d.ts.map +1 -1
  410. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.js +4 -0
  411. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.js.map +1 -1
  412. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.test.js +23 -5
  413. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.test.js.map +1 -1
  414. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.js +1 -1
  415. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.js.map +1 -1
  416. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.test.js +1 -1
  417. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-config-option.handler.test.js.map +1 -1
  418. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.js +1 -1
  419. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.js.map +1 -1
  420. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.test.js +1 -1
  421. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/set-thinking-budget.handler.test.js.map +1 -1
  422. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.d.ts +4 -2
  423. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.d.ts.map +1 -1
  424. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.js +2 -7
  425. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.js.map +1 -1
  426. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.test.js +9 -11
  427. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/start.handler.test.js.map +1 -1
  428. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.js +1 -1
  429. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.js.map +1 -1
  430. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.test.js +1 -3
  431. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/stop.handler.test.js.map +1 -1
  432. package/dist/src/backend/services/session/service/chat/chat-message-handlers/registry.d.ts.map +1 -1
  433. package/dist/src/backend/services/session/service/chat/chat-message-handlers/registry.js +3 -2
  434. package/dist/src/backend/services/session/service/chat/chat-message-handlers/registry.js.map +1 -1
  435. package/dist/src/backend/services/session/service/chat/chat-message-handlers/types.d.ts +24 -8
  436. package/dist/src/backend/services/session/service/chat/chat-message-handlers/types.d.ts.map +1 -1
  437. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.d.ts.map +1 -1
  438. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.js +1 -0
  439. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.js.map +1 -1
  440. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.test.js +17 -0
  441. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.test.js.map +1 -1
  442. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.d.ts +16 -15
  443. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.d.ts.map +1 -1
  444. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js +86 -115
  445. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js.map +1 -1
  446. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js +179 -219
  447. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js.map +1 -1
  448. package/dist/src/backend/services/session/service/data/session-data.service.d.ts +0 -2
  449. package/dist/src/backend/services/session/service/data/session-data.service.d.ts.map +1 -1
  450. package/dist/src/backend/services/session/service/data/session-data.service.js +0 -6
  451. package/dist/src/backend/services/session/service/data/session-data.service.js.map +1 -1
  452. package/dist/src/backend/services/session/service/data/session-data.service.test.js +0 -6
  453. package/dist/src/backend/services/session/service/data/session-data.service.test.js.map +1 -1
  454. package/dist/src/backend/services/session/service/data/session-provider-resolver.service.test.js +6 -0
  455. package/dist/src/backend/services/session/service/data/session-provider-resolver.service.test.js.map +1 -1
  456. package/dist/src/backend/services/session/service/index.d.ts +6 -6
  457. package/dist/src/backend/services/session/service/index.d.ts.map +1 -1
  458. package/dist/src/backend/services/session/service/index.js +4 -3
  459. package/dist/src/backend/services/session/service/index.js.map +1 -1
  460. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.d.ts +1 -0
  461. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.d.ts.map +1 -1
  462. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.js +45 -26
  463. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.js.map +1 -1
  464. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.d.ts +2 -0
  465. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.d.ts.map +1 -0
  466. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.js +117 -0
  467. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.js.map +1 -0
  468. package/dist/src/backend/services/session/service/lifecycle/session-context.service.d.ts +33 -0
  469. package/dist/src/backend/services/session/service/lifecycle/session-context.service.d.ts.map +1 -0
  470. package/dist/src/backend/services/session/service/lifecycle/session-context.service.js +120 -0
  471. package/dist/src/backend/services/session/service/lifecycle/session-context.service.js.map +1 -0
  472. package/dist/src/backend/services/session/service/lifecycle/session-context.service.test.d.ts +2 -0
  473. package/dist/src/backend/services/session/service/lifecycle/session-context.service.test.d.ts.map +1 -0
  474. package/dist/src/backend/services/session/service/lifecycle/session-context.service.test.js +174 -0
  475. package/dist/src/backend/services/session/service/lifecycle/session-context.service.test.js.map +1 -0
  476. package/dist/src/backend/services/session/service/lifecycle/session-core-services.d.ts +23 -0
  477. package/dist/src/backend/services/session/service/lifecycle/session-core-services.d.ts.map +1 -0
  478. package/dist/src/backend/services/session/service/lifecycle/session-core-services.js +150 -0
  479. package/dist/src/backend/services/session/service/lifecycle/session-core-services.js.map +1 -0
  480. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.d.ts +5 -0
  481. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.d.ts.map +1 -0
  482. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.js +38 -0
  483. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.js.map +1 -0
  484. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.test.d.ts +2 -0
  485. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.test.d.ts.map +1 -0
  486. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.test.js +52 -0
  487. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-external-ports.test.js.map +1 -0
  488. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.d.ts +35 -0
  489. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.d.ts.map +1 -0
  490. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.js +120 -0
  491. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.js.map +1 -0
  492. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.test.d.ts +2 -0
  493. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.test.d.ts.map +1 -0
  494. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.test.js +192 -0
  495. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle-gate.test.js.map +1 -0
  496. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.d.ts +115 -0
  497. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.d.ts.map +1 -0
  498. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.js +434 -0
  499. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.test-helpers.js.map +1 -0
  500. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.types.d.ts +13 -0
  501. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.types.d.ts.map +1 -0
  502. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.types.js +2 -0
  503. package/dist/src/backend/services/session/service/lifecycle/session-lifecycle.types.js.map +1 -0
  504. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.d.ts +81 -0
  505. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.d.ts.map +1 -0
  506. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.js +242 -0
  507. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.js.map +1 -0
  508. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.test.d.ts +2 -0
  509. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.test.d.ts.map +1 -0
  510. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.test.js +528 -0
  511. package/dist/src/backend/services/session/service/lifecycle/session-notification-delivery.service.test.js.map +1 -0
  512. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.d.ts +39 -0
  513. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.d.ts.map +1 -0
  514. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.js +208 -0
  515. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.js.map +1 -0
  516. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.test.d.ts +2 -0
  517. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.test.d.ts.map +1 -0
  518. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.test.js +274 -0
  519. package/dist/src/backend/services/session/service/lifecycle/session-runtime-exit.coordinator.test.js.map +1 -0
  520. package/dist/src/backend/services/session/service/lifecycle/session-services.composition.test.d.ts +2 -0
  521. package/dist/src/backend/services/session/service/lifecycle/session-services.composition.test.d.ts.map +1 -0
  522. package/dist/src/backend/services/session/service/lifecycle/session-services.composition.test.js +105 -0
  523. package/dist/src/backend/services/session/service/lifecycle/session-services.composition.test.js.map +1 -0
  524. package/dist/src/backend/services/session/service/lifecycle/session-services.d.ts +5 -17
  525. package/dist/src/backend/services/session/service/lifecycle/session-services.d.ts.map +1 -1
  526. package/dist/src/backend/services/session/service/lifecycle/session-services.js +14 -87
  527. package/dist/src/backend/services/session/service/lifecycle/session-services.js.map +1 -1
  528. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.d.ts +64 -0
  529. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.d.ts.map +1 -0
  530. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.js +352 -0
  531. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.js.map +1 -0
  532. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.test.d.ts +2 -0
  533. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.test.d.ts.map +1 -0
  534. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.test.js +702 -0
  535. package/dist/src/backend/services/session/service/lifecycle/session-startup.coordinator.test.js.map +1 -0
  536. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.d.ts +54 -0
  537. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.d.ts.map +1 -0
  538. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.js +265 -0
  539. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.js.map +1 -0
  540. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.test.d.ts +2 -0
  541. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.test.d.ts.map +1 -0
  542. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.test.js +514 -0
  543. package/dist/src/backend/services/session/service/lifecycle/session-termination.coordinator.test.js.map +1 -0
  544. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.d.ts +62 -0
  545. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.d.ts.map +1 -0
  546. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.js +175 -0
  547. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.js.map +1 -0
  548. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.test.d.ts +2 -0
  549. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.test.d.ts.map +1 -0
  550. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.test.js +294 -0
  551. package/dist/src/backend/services/session/service/lifecycle/session-workflow-finalizer.test.js.map +1 -0
  552. package/dist/src/backend/services/session/service/lifecycle/session.config.service.d.ts.map +1 -1
  553. package/dist/src/backend/services/session/service/lifecycle/session.config.service.js +8 -4
  554. package/dist/src/backend/services/session/service/lifecycle/session.config.service.js.map +1 -1
  555. package/dist/src/backend/services/session/service/lifecycle/session.config.service.test.js +58 -5
  556. package/dist/src/backend/services/session/service/lifecycle/session.config.service.test.js.map +1 -1
  557. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.facade.test.d.ts +2 -0
  558. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.facade.test.d.ts.map +1 -0
  559. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.facade.test.js +431 -0
  560. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.facade.test.js.map +1 -0
  561. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts +25 -113
  562. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts.map +1 -1
  563. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js +49 -1069
  564. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js.map +1 -1
  565. package/dist/src/backend/services/session/service/lifecycle/session.prompt.service.test.js +11 -6
  566. package/dist/src/backend/services/session/service/lifecycle/session.prompt.service.test.js.map +1 -1
  567. package/dist/src/backend/services/session/service/lifecycle/session.service.d.ts +3 -6
  568. package/dist/src/backend/services/session/service/lifecycle/session.service.d.ts.map +1 -1
  569. package/dist/src/backend/services/session/service/lifecycle/session.service.js +9 -12
  570. package/dist/src/backend/services/session/service/lifecycle/session.service.js.map +1 -1
  571. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js +88 -41
  572. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js.map +1 -1
  573. package/dist/src/backend/services/session/service/session-domain.service.d.ts.map +1 -1
  574. package/dist/src/backend/services/session/service/session-domain.service.js +1 -0
  575. package/dist/src/backend/services/session/service/session-domain.service.js.map +1 -1
  576. package/dist/src/backend/services/session/service/store/session-store.types.d.ts +1 -1
  577. package/dist/src/backend/services/session/service/store/session-store.types.d.ts.map +1 -1
  578. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.d.ts +3 -0
  579. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.d.ts.map +1 -0
  580. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.js +92 -0
  581. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.js.map +1 -0
  582. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.test.d.ts +2 -0
  583. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.test.d.ts.map +1 -0
  584. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.test.js +81 -0
  585. package/dist/src/backend/services/session/service/store/session-tool-call-recovery.test.js.map +1 -0
  586. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.d.ts +2 -0
  587. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.d.ts.map +1 -0
  588. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.js +5 -0
  589. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.js.map +1 -0
  590. package/dist/src/backend/services/session/service/voice/voice-narration.service.d.ts +28 -0
  591. package/dist/src/backend/services/session/service/voice/voice-narration.service.d.ts.map +1 -0
  592. package/dist/src/backend/services/session/service/voice/voice-narration.service.js +431 -0
  593. package/dist/src/backend/services/session/service/voice/voice-narration.service.js.map +1 -0
  594. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.d.ts +2 -0
  595. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.d.ts.map +1 -0
  596. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.js +536 -0
  597. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.js.map +1 -0
  598. package/dist/src/backend/services/settings/resources/user-settings.accessor.d.ts +6 -0
  599. package/dist/src/backend/services/settings/resources/user-settings.accessor.d.ts.map +1 -1
  600. package/dist/src/backend/services/settings/resources/user-settings.accessor.js +46 -17
  601. package/dist/src/backend/services/settings/resources/user-settings.accessor.js.map +1 -1
  602. package/dist/src/backend/services/settings/service/user-settings.service.d.ts +6 -0
  603. package/dist/src/backend/services/settings/service/user-settings.service.d.ts.map +1 -1
  604. package/dist/src/backend/services/settings/service/user-settings.service.js.map +1 -1
  605. package/dist/src/backend/services/workspace/resources/project.accessor.d.ts +0 -1
  606. package/dist/src/backend/services/workspace/resources/project.accessor.d.ts.map +1 -1
  607. package/dist/src/backend/services/workspace/resources/project.accessor.js +0 -13
  608. package/dist/src/backend/services/workspace/resources/project.accessor.js.map +1 -1
  609. package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts +0 -1
  610. package/dist/src/backend/services/workspace/resources/workspace.accessor.d.ts.map +1 -1
  611. package/dist/src/backend/services/workspace/resources/workspace.accessor.js +0 -10
  612. package/dist/src/backend/services/workspace/resources/workspace.accessor.js.map +1 -1
  613. package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js +3 -8
  614. package/dist/src/backend/services/workspace/resources/workspace.accessor.test.js.map +1 -1
  615. package/dist/src/backend/services/workspace/service/index.d.ts +9 -10
  616. package/dist/src/backend/services/workspace/service/index.d.ts.map +1 -1
  617. package/dist/src/backend/services/workspace/service/index.js +5 -5
  618. package/dist/src/backend/services/workspace/service/index.js.map +1 -1
  619. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js +12 -0
  620. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js.map +1 -1
  621. package/dist/src/backend/services/workspace/service/lifecycle/data.service.d.ts +4 -4
  622. package/dist/src/backend/services/workspace/service/workspace-domain-exports.test.js +1 -7
  623. package/dist/src/backend/services/workspace/service/workspace-domain-exports.test.js.map +1 -1
  624. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.test.js +0 -1
  625. package/dist/src/backend/services/workspace/service/worktree/git-ops.service.test.js.map +1 -1
  626. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.d.ts.map +1 -1
  627. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js +9 -12
  628. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js.map +1 -1
  629. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js +5 -4
  630. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js.map +1 -1
  631. package/dist/src/backend/testing/npm-publish-workflow.test.d.ts +2 -0
  632. package/dist/src/backend/testing/npm-publish-workflow.test.d.ts.map +1 -0
  633. package/dist/src/backend/testing/npm-publish-workflow.test.js +205 -0
  634. package/dist/src/backend/testing/npm-publish-workflow.test.js.map +1 -0
  635. package/dist/src/backend/trpc/admin.trpc.d.ts +10 -0
  636. package/dist/src/backend/trpc/admin.trpc.d.ts.map +1 -1
  637. package/dist/src/backend/trpc/index.d.ts +633 -22
  638. package/dist/src/backend/trpc/index.d.ts.map +1 -1
  639. package/dist/src/backend/trpc/index.js +2 -0
  640. package/dist/src/backend/trpc/index.js.map +1 -1
  641. package/dist/src/backend/trpc/pr-review.router.test.js +1 -12
  642. package/dist/src/backend/trpc/pr-review.router.test.js.map +1 -1
  643. package/dist/src/backend/trpc/pr-review.trpc.d.ts +0 -16
  644. package/dist/src/backend/trpc/pr-review.trpc.d.ts.map +1 -1
  645. package/dist/src/backend/trpc/pr-review.trpc.js +0 -14
  646. package/dist/src/backend/trpc/pr-review.trpc.js.map +1 -1
  647. package/dist/src/backend/trpc/session.router.test.js +170 -3
  648. package/dist/src/backend/trpc/session.router.test.js.map +1 -1
  649. package/dist/src/backend/trpc/session.trpc.d.ts +539 -0
  650. package/dist/src/backend/trpc/session.trpc.d.ts.map +1 -1
  651. package/dist/src/backend/trpc/session.trpc.js +53 -0
  652. package/dist/src/backend/trpc/session.trpc.js.map +1 -1
  653. package/dist/src/backend/trpc/user-settings.router.test.js +117 -6
  654. package/dist/src/backend/trpc/user-settings.router.test.js.map +1 -1
  655. package/dist/src/backend/trpc/user-settings.trpc.d.ts +16 -4
  656. package/dist/src/backend/trpc/user-settings.trpc.d.ts.map +1 -1
  657. package/dist/src/backend/trpc/user-settings.trpc.js +25 -2
  658. package/dist/src/backend/trpc/user-settings.trpc.js.map +1 -1
  659. package/dist/src/backend/trpc/voice.trpc.d.ts +67 -0
  660. package/dist/src/backend/trpc/voice.trpc.d.ts.map +1 -0
  661. package/dist/src/backend/trpc/voice.trpc.js +156 -0
  662. package/dist/src/backend/trpc/voice.trpc.js.map +1 -0
  663. package/dist/src/backend/trpc/voice.trpc.test.d.ts +2 -0
  664. package/dist/src/backend/trpc/voice.trpc.test.d.ts.map +1 -0
  665. package/dist/src/backend/trpc/voice.trpc.test.js +259 -0
  666. package/dist/src/backend/trpc/voice.trpc.test.js.map +1 -0
  667. package/dist/src/backend/trpc/workspace.router.test.js +41 -2
  668. package/dist/src/backend/trpc/workspace.router.test.js.map +1 -1
  669. package/dist/src/backend/trpc/workspace.trpc.d.ts +4 -4
  670. package/dist/src/backend/trpc/workspace.trpc.d.ts.map +1 -1
  671. package/dist/src/backend/trpc/workspace.trpc.js +12 -1
  672. package/dist/src/backend/trpc/workspace.trpc.js.map +1 -1
  673. package/dist/src/lib/chat-protocol.d.ts +72 -0
  674. package/dist/src/lib/chat-protocol.d.ts.map +1 -0
  675. package/dist/src/lib/chat-protocol.js +514 -0
  676. package/dist/src/lib/chat-protocol.js.map +1 -0
  677. package/dist/src/shared/acp-protocol/index.d.ts +2 -0
  678. package/dist/src/shared/acp-protocol/index.d.ts.map +1 -1
  679. package/dist/src/shared/acp-protocol/index.js +2 -0
  680. package/dist/src/shared/acp-protocol/index.js.map +1 -1
  681. package/dist/src/shared/acp-protocol/protocol/queued.d.ts +1 -0
  682. package/dist/src/shared/acp-protocol/protocol/queued.d.ts.map +1 -1
  683. package/dist/src/shared/acp-protocol/protocol/websocket.d.ts +7 -0
  684. package/dist/src/shared/acp-protocol/protocol/websocket.d.ts.map +1 -1
  685. package/dist/src/shared/acp-protocol/protocol/websocket.js +1 -0
  686. package/dist/src/shared/acp-protocol/protocol/websocket.js.map +1 -1
  687. package/dist/src/shared/acp-protocol/session-update-translator.d.ts +39 -0
  688. package/dist/src/shared/acp-protocol/session-update-translator.d.ts.map +1 -0
  689. package/dist/src/shared/acp-protocol/session-update-translator.js +356 -0
  690. package/dist/src/shared/acp-protocol/session-update-translator.js.map +1 -0
  691. package/dist/src/shared/acp-protocol/subagents.d.ts +1175 -0
  692. package/dist/src/shared/acp-protocol/subagents.d.ts.map +1 -0
  693. package/dist/src/shared/acp-protocol/subagents.js +259 -0
  694. package/dist/src/shared/acp-protocol/subagents.js.map +1 -0
  695. package/dist/src/shared/core/enums.d.ts +1 -0
  696. package/dist/src/shared/core/enums.d.ts.map +1 -1
  697. package/dist/src/shared/core/enums.js +1 -0
  698. package/dist/src/shared/core/enums.js.map +1 -1
  699. package/dist/src/shared/deepgram-voices.d.ts +12 -0
  700. package/dist/src/shared/deepgram-voices.d.ts.map +1 -0
  701. package/dist/src/shared/deepgram-voices.js +51 -0
  702. package/dist/src/shared/deepgram-voices.js.map +1 -0
  703. package/dist/src/shared/schemas/export-data.schema.d.ts +10 -0
  704. package/dist/src/shared/schemas/export-data.schema.d.ts.map +1 -1
  705. package/dist/src/shared/schemas/export-data.schema.js +19 -0
  706. package/dist/src/shared/schemas/export-data.schema.js.map +1 -1
  707. package/dist/src/shared/voice-vad.d.ts +11 -0
  708. package/dist/src/shared/voice-vad.d.ts.map +1 -0
  709. package/dist/src/shared/voice-vad.js +19 -0
  710. package/dist/src/shared/voice-vad.js.map +1 -0
  711. package/dist/src/shared/websocket/chat-message.schema.d.ts +1 -0
  712. package/dist/src/shared/websocket/chat-message.schema.d.ts.map +1 -1
  713. package/dist/src/shared/websocket/chat-message.schema.js +1 -0
  714. package/dist/src/shared/websocket/chat-message.schema.js.map +1 -1
  715. package/dist/src/shared/websocket/voice-message.schema.d.ts +25 -0
  716. package/dist/src/shared/websocket/voice-message.schema.d.ts.map +1 -0
  717. package/dist/src/shared/websocket/voice-message.schema.js +14 -0
  718. package/dist/src/shared/websocket/voice-message.schema.js.map +1 -0
  719. package/dist/src/shared/workspace-snapshot.d.ts +5 -5
  720. package/dist/src/test-utils/application-graph.d.ts.map +1 -1
  721. package/dist/src/test-utils/application-graph.js +8 -1
  722. package/dist/src/test-utils/application-graph.js.map +1 -1
  723. package/dist/tsconfig.backend.tsbuildinfo +1 -1
  724. package/package.json +11 -8
  725. package/prisma/migrations/20260802152257_add_voice_mode_settings/migration.sql +34 -0
  726. package/prisma/migrations/20260802200414_add_voice_tts_model_and_speed/migration.sql +36 -0
  727. package/prisma/migrations/20260807222320_voice_vad_aggressiveness_settings/migration.sql +38 -0
  728. package/prisma/schema.prisma +9 -0
  729. package/scripts/postinstall.mjs +6 -2
  730. package/dist/client/assets/architectureDiagram-ZJ3FMSHR-BZgeaNrI.js +0 -36
  731. package/dist/client/assets/channel-zAL33ya-.js +0 -1
  732. package/dist/client/assets/classDiagram-OUVF2IWQ-Dksz7rAA.js +0 -1
  733. package/dist/client/assets/classDiagram-v2-EOCWNBFH-Dksz7rAA.js +0 -1
  734. package/dist/client/assets/diagram-WEI45ONY-up5rQ6My.js +0 -41
  735. package/dist/client/assets/index-BZQlu-dZ.js +0 -694
  736. package/dist/client/assets/index-CwfNzqG5.css +0 -1
  737. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-DA02HYvU.js +0 -1
  738. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CbfcpXpQ.js +0 -8
  739. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.d.ts +0 -2
  740. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.d.ts.map +0 -1
  741. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.js +0 -1438
  742. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.js.map +0 -1
  743. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.d.ts +0 -2
  744. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.d.ts.map +0 -1
  745. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js +0 -1308
  746. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js.map +0 -1
  747. package/dist/src/backend/services/session/service/runtime/index.d.ts +0 -5
  748. package/dist/src/backend/services/session/service/runtime/index.d.ts.map +0 -1
  749. package/dist/src/backend/services/session/service/runtime/index.js +0 -2
  750. package/dist/src/backend/services/session/service/runtime/index.js.map +0 -1
  751. package/dist/src/backend/services/session/service/runtime/provider-runtime-manager.d.ts +0 -21
  752. package/dist/src/backend/services/session/service/runtime/provider-runtime-manager.d.ts.map +0 -1
  753. package/dist/src/backend/services/session/service/runtime/provider-runtime-manager.js +0 -2
  754. package/dist/src/backend/services/session/service/runtime/provider-runtime-manager.js.map +0 -1
  755. package/dist/src/backend/services/session/service/store/file-lock.service.d.ts +0 -97
  756. package/dist/src/backend/services/session/service/store/file-lock.service.d.ts.map +0 -1
  757. package/dist/src/backend/services/session/service/store/file-lock.service.js +0 -429
  758. package/dist/src/backend/services/session/service/store/file-lock.service.js.map +0 -1
  759. package/dist/src/backend/services/session/service/store/file-lock.service.test.d.ts +0 -2
  760. package/dist/src/backend/services/session/service/store/file-lock.service.test.d.ts.map +0 -1
  761. package/dist/src/backend/services/session/service/store/file-lock.service.test.js +0 -672
  762. package/dist/src/backend/services/session/service/store/file-lock.service.test.js.map +0 -1
  763. package/dist/src/shared/workspace-words.d.ts +0 -5
  764. package/dist/src/shared/workspace-words.d.ts.map +0 -1
  765. package/dist/src/shared/workspace-words.js +0 -146
  766. package/dist/src/shared/workspace-words.js.map +0 -1
@@ -1,294 +1,59 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { configService } from '../../../../../backend/services/config.service.js';
3
- import { createLogger } from '../../../../../backend/services/logger.service.js';
4
- import { getChildWorkspaceMcpServerConfig } from '../../../../../backend/services/session/service/acp/child-workspace-mcp-server.js';
5
- import { acpTraceLogger } from '../../../../../backend/services/session/service/logging/acp-trace-logger.service.js';
6
- import { sessionEventBus } from '../../../../../backend/services/session/service/session-event-bus.js';
7
- import { userSettingsService } from '../../../../../backend/services/settings/index.js';
8
- import { workspaceDataService, workspaceNotificationService } from '../../../../../backend/services/workspace/index.js';
9
- import { SessionLifecycleEventKind, SessionLifecycleEventReason, SessionStatus, } from '../../../../../shared/core/index.js';
10
1
  import { createInitialSessionRuntimeState, } from '../../../../../shared/session-runtime.js';
11
- import { buildWorkspaceNotificationMessageText, WORKSPACE_NOTIFICATION_MESSAGE_ID_PREFIX, workspaceNotificationMessageId, } from '../../../../../shared/workspace-notifications.js';
12
- import { closedSessionPersistenceService } from './closed-session-persistence.service.js';
13
- import { toErrorMessage } from './session.error-message.js';
14
- import { maybeDiscoverPROnSessionEnd as maybeDiscoverPROnSessionEndHelper } from './session-pr-discovery.service.js';
15
2
  import { isStaleLoadingRuntime } from './session-runtime-state.helpers.js';
16
- const logger = createLogger('session');
17
- function getPersistedStatusForExitCode(exitCode) {
18
- return exitCode === 0 ? SessionStatus.COMPLETED : SessionStatus.FAILED;
19
- }
20
- const SESSION_STOP_MESSAGES = {
21
- USER_STOP: 'Session stopped by you.',
22
- SESSION_CLOSED: 'Session closed by you.',
23
- WORKSPACE_ARCHIVED: 'Session stopped because the workspace was archived.',
24
- SYSTEM_STOP: 'Session stopped by the system.',
25
- };
26
- const SHUTDOWN_LIFECYCLE_RECORD_TIMEOUT_MS = 1000;
27
3
  export class SessionLifecycleService {
28
- repository;
29
- promptBuilder;
30
- runtimeManager;
31
- sessionDomainService;
32
- sessionPermissionService;
33
- sessionConfigService;
34
- acpEventProcessor;
35
- promptTurnCompletionService;
36
- retryService;
37
- lifecycleEventService;
38
- hydrateProviderHistory;
39
- sendSessionMessage;
40
- onBeforeStopSession;
41
- onSessionExit;
42
- stoppingSessions = new Set();
43
- shutdownSessions = new Set();
44
- stopGenerationCounter = 0;
45
- stopGenerations = new Map();
46
- startupGenerationReferences = new Map();
47
- clientCreationOperations = new Map();
48
- workspaceBridge = null;
49
- messageQueueBridge = null;
50
- autoIterationExitBridge = null;
51
- constructor(options) {
52
- this.repository = options.repository;
53
- this.promptBuilder = options.promptBuilder;
54
- this.runtimeManager = options.runtimeManager;
55
- this.sessionDomainService = options.sessionDomainService;
56
- this.sessionPermissionService = options.sessionPermissionService;
57
- this.sessionConfigService = options.sessionConfigService;
58
- this.acpEventProcessor = options.acpEventProcessor;
59
- this.promptTurnCompletionService = options.promptTurnCompletionService;
60
- this.retryService = options.retryService;
61
- this.lifecycleEventService = options.lifecycleEventService;
62
- this.hydrateProviderHistory =
63
- options.hydrateProviderHistory ?? (async () => undefined);
64
- this.sendSessionMessage = options.sendSessionMessage;
65
- this.onBeforeStopSession = options.onBeforeStopSession;
66
- this.onSessionExit = options.onSessionExit;
4
+ dependencies;
5
+ configured = false;
6
+ constructor(dependencies) {
7
+ this.dependencies = dependencies;
67
8
  }
68
9
  configure(bridges) {
69
- this.workspaceBridge = bridges.workspace;
70
- this.messageQueueBridge = bridges.messageQueue ?? null;
71
- this.autoIterationExitBridge = bridges.autoIterationExit ?? null;
10
+ this.configured = false;
11
+ this.dependencies.workflowFinalizer.configure({
12
+ workspace: bridges.workspace,
13
+ autoIterationExit: bridges.autoIterationExit,
14
+ });
15
+ this.dependencies.terminationCoordinator.configure({ workspace: bridges.workspace });
16
+ this.dependencies.startupCoordinator.configure({ messageQueue: bridges.messageQueue });
17
+ this.configured = true;
72
18
  }
73
19
  async startSession(sessionId, options) {
74
- await this.runStartupOperation(sessionId, async (stopGeneration) => {
75
- const session = await this.repository.getSessionById(sessionId);
76
- if (!session) {
77
- throw new Error(`Session not found: ${sessionId}`);
78
- }
79
- this.assertStartupAllowed(sessionId, stopGeneration);
80
- const existingClient = this.runtimeManager.getClient(sessionId);
81
- if (existingClient) {
82
- throw new Error('Session is already running');
83
- }
84
- const startupModePreset = options?.startupModePreset;
85
- const { handle, resolvedPreset, dispatchableNotificationCount } = await this.getOrCreateAcpSessionClient(sessionId, {}, session, stopGeneration);
86
- this.assertStartupAllowed(sessionId, stopGeneration);
87
- await this.applyStartupModePreset(sessionId, handle, startupModePreset, session.workflow);
88
- this.assertStartupAllowed(sessionId, stopGeneration);
89
- await this.applyConfiguredPermissionPreset(sessionId, session, handle, resolvedPreset);
90
- this.assertStartupAllowed(sessionId, stopGeneration);
91
- await this.dispatchQueuedNotificationsIfNeeded(sessionId, dispatchableNotificationCount);
92
- this.assertStartupAllowed(sessionId, stopGeneration);
93
- const initialPrompt = options?.initialPrompt ?? 'Continue with the task.';
94
- const shouldSendInitialPrompt = dispatchableNotificationCount === 0 ||
95
- (typeof options?.initialPrompt === 'string' && !options.initialPromptIsDefault);
96
- if (shouldSendInitialPrompt && initialPrompt) {
97
- await this.sendSessionMessage(sessionId, initialPrompt);
98
- }
99
- this.assertStartupAllowed(sessionId, stopGeneration);
100
- logger.info('Session started', { sessionId, provider: session.provider });
101
- });
20
+ this.assertConfigured();
21
+ await this.dependencies.startupCoordinator.startSession(sessionId, options);
102
22
  }
103
23
  async restartSession(sessionId, options) {
104
- const isRunning = this.runtimeManager.isSessionRunning(sessionId);
105
- const isStopInProgress = this.runtimeManager.isStopInProgress(sessionId);
106
- if (isStopInProgress) {
107
- throw new Error('Cannot restart: session is currently being stopped. Please try again shortly.');
108
- }
109
- if (isRunning) {
110
- try {
111
- await this.stopSession(sessionId, { cleanupTransientRatchetSession: false });
112
- }
113
- catch (error) {
114
- logger.warn('Error stopping session during restart; continuing with start', {
115
- sessionId,
116
- error: error instanceof Error ? error.message : String(error),
117
- });
118
- }
119
- }
120
- await this.startSession(sessionId, options ?? {
121
- initialPrompt: 'Continue with the task.',
122
- initialPromptIsDefault: true,
123
- });
124
- logger.info('Session restarted', { sessionId });
24
+ this.assertConfigured();
25
+ await this.dependencies.startupCoordinator.restartSession(sessionId, options);
125
26
  }
126
27
  async stopSession(sessionId, options) {
127
- if (this.stoppingSessions.has(sessionId)) {
128
- logger.debug('Session stop already in progress', { sessionId });
129
- return;
130
- }
131
- this.advanceStopGeneration(sessionId);
132
- this.stoppingSessions.add(sessionId);
133
- const stopInvocationId = randomUUID();
134
- try {
135
- await this.stopSessionWithBarrier(sessionId, stopInvocationId, options);
136
- }
137
- finally {
138
- this.stoppingSessions.delete(sessionId);
139
- this.stopGenerations.delete(sessionId);
140
- }
141
- }
142
- async stopSessionWithBarrier(sessionId, stopInvocationId, options) {
143
- this.promptTurnCompletionService.clearSession(sessionId);
144
- this.onBeforeStopSession?.(sessionId);
145
- this.sessionDomainService.clearQueuedWork(sessionId, { emitSnapshot: true });
146
- const session = await this.loadSessionForStop(sessionId);
147
- const workspaceId = session?.workspaceId ?? this.acpEventProcessor.getWorkspaceId(sessionId);
148
- const reason = options?.reason ?? 'SYSTEM_STOP';
149
- if (this.runtimeManager.isStopInProgress(sessionId)) {
150
- logger.debug('Session stop already in progress', { sessionId });
151
- return;
152
- }
153
- if (workspaceId && options?.recordLifecycleEvent !== false) {
154
- await this.lifecycleEventService.record({
155
- workspaceId,
156
- sessionId,
157
- kind: SessionLifecycleEventKind.SESSION_STOPPED,
158
- reason,
159
- message: SESSION_STOP_MESSAGES[reason],
160
- dedupeKey: `session-stop:${stopInvocationId}`,
161
- });
162
- }
163
- const current = this.getRuntimeSnapshot(sessionId);
164
- this.sessionDomainService.setRuntimeSnapshot(sessionId, {
165
- ...current,
166
- phase: 'stopping',
167
- activity: 'IDLE',
168
- updatedAt: new Date().toISOString(),
169
- });
170
- this.acpEventProcessor.clearStreamingState(sessionId);
171
- this.acpEventProcessor.clearReplaySuppression(sessionId);
172
- this.sessionPermissionService.cancelPendingRequests(sessionId);
173
- let stopClientFailed = false;
174
- try {
175
- await this.stopRuntimeAndPendingCreation(sessionId);
176
- }
177
- catch (error) {
178
- stopClientFailed = true;
179
- logger.warn('Error stopping ACP session runtime; continuing cleanup', {
180
- sessionId,
181
- error: error instanceof Error ? error.message : String(error),
182
- });
183
- }
184
- finally {
185
- this.finalizeOrphanedToolCalls(sessionId, 'session_stop');
186
- await this.updateStoppedSessionState(sessionId);
187
- this.sessionDomainService.setRuntimeSnapshot(sessionId, {
188
- phase: 'idle',
189
- processState: 'stopped',
190
- activity: 'IDLE',
191
- updatedAt: new Date().toISOString(),
192
- });
193
- this.markWorkspaceSessionIdleOnStop(workspaceId, sessionId);
194
- this.acpEventProcessor.clearSessionContext(sessionId);
195
- if (!stopClientFailed) {
196
- const shouldCleanupTransientRatchetSession = options?.cleanupTransientRatchetSession ?? true;
197
- await this.cleanupTransientRatchetOnStop(session, sessionId, shouldCleanupTransientRatchetSession);
198
- }
199
- try {
200
- this.clearSessionStoreIfInactive(sessionId, 'manual_stop');
201
- logger.info('ACP session stopped', {
202
- sessionId,
203
- ...(stopClientFailed ? { runtimeStopFailed: true } : {}),
204
- });
205
- }
206
- finally {
207
- acpTraceLogger.closeSession(sessionId);
208
- }
209
- }
210
- }
211
- async stopRuntimeAndPendingCreation(sessionId) {
212
- if (!this.runtimeManager.isStopInProgress(sessionId)) {
213
- await this.runtimeManager.stopClient(sessionId);
214
- }
215
- const pendingCreations = this.clientCreationOperations.get(sessionId);
216
- if (!pendingCreations || pendingCreations.size === 0) {
217
- return;
218
- }
219
- await Promise.allSettled([...pendingCreations]);
220
- if (!this.runtimeManager.isStopInProgress(sessionId)) {
221
- await this.runtimeManager.stopClient(sessionId);
222
- }
28
+ this.assertConfigured();
29
+ await this.dependencies.terminationCoordinator.stopSession(sessionId, options);
223
30
  }
224
31
  async stopWorkspaceSessions(workspaceId, options) {
225
- const sessions = await this.repository.getSessionsByWorkspaceId(workspaceId);
226
- const stopErrors = [];
227
- for (const session of sessions) {
228
- if (session.status === SessionStatus.RUNNING ||
229
- this.runtimeManager.isSessionRunning(session.id)) {
230
- try {
231
- await this.stopSession(session.id, { reason: options?.reason ?? 'SYSTEM_STOP' });
232
- }
233
- catch (error) {
234
- logger.error('Failed to stop workspace session', {
235
- sessionId: session.id,
236
- workspaceId,
237
- error: error instanceof Error ? error.message : String(error),
238
- });
239
- stopErrors.push(error);
240
- }
241
- }
242
- }
243
- if (stopErrors.length > 0) {
244
- throw new Error(`Failed to stop ${stopErrors.length} workspace session${stopErrors.length === 1 ? '' : 's'}`);
245
- }
246
- logger.info('Stopped all workspace sessions', { workspaceId, count: sessions.length });
32
+ this.assertConfigured();
33
+ await this.dependencies.terminationCoordinator.stopWorkspaceSessions(workspaceId, options);
247
34
  }
248
35
  async getOrCreateSessionClient(sessionId, options) {
249
- return await this.runStartupOperation(sessionId, async (stopGeneration) => {
250
- const session = await this.repository.getSessionById(sessionId);
251
- if (!session) {
252
- throw new Error(`Session not found: ${sessionId}`);
253
- }
254
- this.assertStartupAllowed(sessionId, stopGeneration);
255
- const hadClient = !!this.runtimeManager.getClient(sessionId);
256
- const { handle, resolvedPreset, dispatchableNotificationCount } = await this.getOrCreateAcpSessionClient(sessionId, options ?? {}, session, stopGeneration);
257
- this.assertStartupAllowed(sessionId, stopGeneration);
258
- if (!hadClient) {
259
- await this.applyConfiguredPermissionPreset(sessionId, session, handle, resolvedPreset);
260
- this.assertStartupAllowed(sessionId, stopGeneration);
261
- await this.dispatchQueuedNotificationsIfNeeded(sessionId, dispatchableNotificationCount);
262
- this.assertStartupAllowed(sessionId, stopGeneration);
263
- }
264
- return handle;
265
- });
36
+ this.assertConfigured();
37
+ return await this.dependencies.startupCoordinator.getOrCreateSessionClient(sessionId, options);
266
38
  }
267
39
  async getOrCreateSessionClientFromRecord(session, options) {
268
- return await this.runStartupOperation(session.id, async (stopGeneration) => {
269
- this.assertStartupAllowed(session.id, stopGeneration);
270
- const hadClient = !!this.runtimeManager.getClient(session.id);
271
- const { handle, resolvedPreset, dispatchableNotificationCount } = await this.getOrCreateAcpSessionClient(session.id, options ?? {}, session, stopGeneration);
272
- this.assertStartupAllowed(session.id, stopGeneration);
273
- if (!hadClient) {
274
- await this.applyConfiguredPermissionPreset(session.id, session, handle, resolvedPreset);
275
- this.assertStartupAllowed(session.id, stopGeneration);
276
- await this.dispatchQueuedNotificationsIfNeeded(session.id, dispatchableNotificationCount);
277
- this.assertStartupAllowed(session.id, stopGeneration);
278
- }
279
- return handle;
280
- });
40
+ this.assertConfigured();
41
+ return await this.dependencies.startupCoordinator.getOrCreateSessionClientFromRecord(session, options);
42
+ }
43
+ async ensureSubagentBrowseSession(sessionId) {
44
+ this.assertConfigured();
45
+ return await this.dependencies.startupCoordinator.ensureSubagentBrowseSession(sessionId);
281
46
  }
282
47
  getSessionClient(sessionId) {
283
- return this.runtimeManager.getClient(sessionId);
48
+ return this.dependencies.runtimeManager.getClient(sessionId);
284
49
  }
285
50
  getRuntimeSnapshot(sessionId) {
286
51
  const fallback = createInitialSessionRuntimeState();
287
- const persisted = this.sessionDomainService.getRuntimeSnapshot(sessionId);
52
+ const persisted = this.dependencies.sessionDomainService.getRuntimeSnapshot(sessionId);
288
53
  const base = persisted ?? fallback;
289
- const acpClient = this.runtimeManager.getClient(sessionId);
54
+ const acpClient = this.dependencies.runtimeManager.getClient(sessionId);
290
55
  if (acpClient) {
291
- const isWorking = this.runtimeManager.isSessionWorking(sessionId);
56
+ const isWorking = this.dependencies.runtimeManager.isSessionWorking(sessionId);
292
57
  return {
293
58
  phase: isWorking ? 'running' : 'idle',
294
59
  processState: 'alive',
@@ -296,7 +61,7 @@ export class SessionLifecycleService {
296
61
  updatedAt: base.updatedAt,
297
62
  };
298
63
  }
299
- if (this.runtimeManager.isStopInProgress(sessionId)) {
64
+ if (this.dependencies.runtimeManager.isStopInProgress(sessionId)) {
300
65
  return {
301
66
  ...base,
302
67
  phase: 'stopping',
@@ -315,817 +80,32 @@ export class SessionLifecycleService {
315
80
  return base;
316
81
  }
317
82
  isSessionStopping(sessionId) {
318
- return this.stoppingSessions.has(sessionId) || this.runtimeManager.isStopInProgress(sessionId);
83
+ return this.dependencies.lifecycleGate.isSessionStopping(sessionId);
319
84
  }
320
85
  getStopGeneration(sessionId) {
321
- return this.stopGenerations.get(sessionId) ?? this.advanceStopGeneration(sessionId);
322
- }
323
- async runStartupOperation(sessionId, operation) {
324
- const stopGeneration = this.getStopGeneration(sessionId);
325
- this.startupGenerationReferences.set(stopGeneration, (this.startupGenerationReferences.get(stopGeneration) ?? 0) + 1);
326
- let succeeded = false;
327
- try {
328
- const result = await operation(stopGeneration);
329
- succeeded = true;
330
- return result;
331
- }
332
- finally {
333
- this.releaseStartupGeneration(sessionId, stopGeneration, succeeded);
334
- }
335
- }
336
- releaseStartupGeneration(sessionId, stopGeneration, succeeded) {
337
- const referenceCount = this.startupGenerationReferences.get(stopGeneration);
338
- if (referenceCount === undefined) {
339
- return;
340
- }
341
- if (referenceCount > 1) {
342
- this.startupGenerationReferences.set(stopGeneration, referenceCount - 1);
343
- return;
344
- }
345
- this.startupGenerationReferences.delete(stopGeneration);
346
- if (!(succeeded ||
347
- this.isSessionStopping(sessionId) ||
348
- this.runtimeManager.getClient(sessionId)) &&
349
- this.isStopGenerationCurrent(sessionId, stopGeneration)) {
350
- this.stopGenerations.delete(sessionId);
351
- }
86
+ return this.dependencies.lifecycleGate.getGeneration(sessionId);
352
87
  }
353
88
  isStopGenerationCurrent(sessionId, stopGeneration) {
354
- return this.stopGenerations.get(sessionId) === stopGeneration;
355
- }
356
- advanceStopGeneration(sessionId) {
357
- this.stopGenerationCounter += 1;
358
- this.stopGenerations.set(sessionId, this.stopGenerationCounter);
359
- return this.stopGenerationCounter;
89
+ return this.dependencies.lifecycleGate.isGenerationCurrent(sessionId, stopGeneration);
360
90
  }
361
- assertStartupAllowed(sessionId, stopGeneration) {
362
- if (this.isSessionStopping(sessionId) ||
363
- !this.isStopGenerationCurrent(sessionId, stopGeneration)) {
364
- throw new Error('Session is currently being stopped');
365
- }
366
- }
367
- async getSessionOptions(sessionId) {
368
- const sessionContext = await this.loadSessionContext(sessionId);
369
- if (!sessionContext) {
370
- return null;
371
- }
372
- return {
373
- workingDir: sessionContext.workingDir,
374
- resumeProviderSessionId: sessionContext.resumeProviderSessionId,
375
- systemPrompt: sessionContext.systemPrompt,
376
- model: sessionContext.model,
377
- workspaceStatus: sessionContext.workspaceStatus,
378
- };
91
+ getSessionOptions(sessionId) {
92
+ return this.dependencies.contextService.getOptions(sessionId);
379
93
  }
380
94
  async stopAllClients(timeoutMs = 5000) {
381
- this.promptTurnCompletionService.clearAll();
382
- const shutdownSessionIds = this.runtimeManager.beginShutdown();
383
- for (const sessionId of shutdownSessionIds) {
384
- this.shutdownSessions.add(sessionId);
385
- }
386
- await this.recordShutdownLifecycleEvents(shutdownSessionIds);
387
- try {
388
- await this.runtimeManager.stopAllClients(timeoutMs);
389
- }
390
- catch (error) {
391
- logger.error('Failed to stop ACP clients during shutdown', {
392
- error: error instanceof Error ? error.message : String(error),
393
- });
394
- throw error;
395
- }
396
- }
397
- async recordShutdownLifecycleEvent(sessionId) {
398
- const session = await this.loadSessionForStop(sessionId);
399
- const workspaceId = session?.workspaceId ?? this.acpEventProcessor.getWorkspaceId(sessionId);
400
- if (!workspaceId) {
401
- logger.warn('Skipped shutdown lifecycle event without workspace owner', { sessionId });
402
- return;
403
- }
404
- await this.lifecycleEventService.record({
405
- workspaceId,
406
- sessionId,
407
- kind: SessionLifecycleEventKind.SESSION_STOPPED,
408
- reason: SessionLifecycleEventReason.SYSTEM_STOP,
409
- message: SESSION_STOP_MESSAGES.SYSTEM_STOP,
410
- dedupeKey: `session-stop:${randomUUID()}`,
411
- });
412
- }
413
- async recordShutdownLifecycleEvents(sessionIds) {
414
- const resultsPromise = Promise.allSettled(sessionIds.map((sessionId) => this.recordShutdownLifecycleEvent(sessionId)));
415
- let timeout;
416
- const results = await Promise.race([
417
- resultsPromise,
418
- new Promise((resolve) => {
419
- timeout = setTimeout(() => resolve(null), SHUTDOWN_LIFECYCLE_RECORD_TIMEOUT_MS);
420
- }),
421
- ]);
422
- if (timeout) {
423
- clearTimeout(timeout);
424
- }
425
- if (results === null) {
426
- logger.warn('Timed out recording shutdown lifecycle events; continuing shutdown', {
427
- timeoutMs: SHUTDOWN_LIFECYCLE_RECORD_TIMEOUT_MS,
428
- });
429
- return;
430
- }
431
- for (const [index, result] of results.entries()) {
432
- if (result.status === 'rejected') {
433
- logger.warn('Failed recording shutdown lifecycle event; continuing shutdown', {
434
- sessionId: sessionIds[index],
435
- error: result.reason instanceof Error ? result.reason.message : String(result.reason),
436
- });
437
- }
438
- }
439
- }
440
- setupAcpEventHandler(sessionId) {
441
- const runtimeEventHandler = this.acpEventProcessor.createRuntimeEventHandler(sessionId);
442
- const runtimeIncarnationId = randomUUID();
443
- return {
444
- ...runtimeEventHandler,
445
- onSessionId: async (sid, providerSessionId) => {
446
- try {
447
- await this.repository.updateSession(sid, { providerSessionId });
448
- acpTraceLogger.log(sid, 'runtime_metadata', {
449
- type: 'provider_session_id',
450
- providerSessionId,
451
- });
452
- logger.debug('Updated session with ACP providerSessionId', {
453
- sessionId: sid,
454
- providerSessionId,
455
- });
456
- }
457
- catch (error) {
458
- logger.warn('Failed to update session with ACP providerSessionId', {
459
- sessionId: sid,
460
- providerSessionId,
461
- error: error instanceof Error ? error.message : String(error),
462
- });
463
- }
464
- },
465
- onExit: async (sid, exitCode) => {
466
- this.stopGenerations.delete(sid);
467
- const wasDeliberateStop = this.stoppingSessions.has(sid) ||
468
- this.shutdownSessions.has(sid) ||
469
- this.runtimeManager.isStopInProgress(sid);
470
- this.prepareAcpRuntimeExit(sid, exitCode);
471
- await this.handleAcpRuntimeExit(sid, exitCode, wasDeliberateStop, runtimeIncarnationId);
472
- },
473
- onError: (sid, error) => {
474
- acpTraceLogger.log(sid, 'runtime_error', {
475
- message: error.message,
476
- stack: error.stack,
477
- });
478
- this.sessionDomainService.markError(sid, error.message);
479
- logger.error('ACP client error', {
480
- sessionId: sid,
481
- error: error.message,
482
- stack: error.stack,
483
- });
484
- },
485
- onAcpLog: (sid, payload) => {
486
- this.acpEventProcessor.handleAcpLog(sid, payload);
487
- },
488
- };
489
- }
490
- prepareAcpRuntimeExit(sessionId, exitCode) {
491
- this.promptTurnCompletionService.clearSession(sessionId);
492
- this.onSessionExit?.(sessionId);
493
- this.finalizeOrphanedToolCalls(sessionId, 'runtime_exit');
494
- this.acpEventProcessor.clearSessionState(sessionId);
495
- this.sessionPermissionService.cancelPendingRequests(sessionId);
496
- acpTraceLogger.log(sessionId, 'runtime_exit', { exitCode });
497
- }
498
- async handleAcpRuntimeExit(sessionId, exitCode, wasDeliberateStop, runtimeIncarnationId) {
499
- try {
500
- this.sessionDomainService.markProcessExit(sessionId, exitCode);
501
- const session = await this.repository.getSessionById(sessionId);
502
- if (!session) {
503
- logger.warn('Failed to find ACP session on exit', { sessionId });
504
- return;
505
- }
506
- const persistedStatus = getPersistedStatusForExitCode(exitCode);
507
- try {
508
- await this.repository.updateSession(sessionId, { status: persistedStatus });
509
- logger.debug('Updated ACP session status on exit', {
510
- sessionId,
511
- exitCode,
512
- status: persistedStatus,
513
- });
514
- }
515
- catch (error) {
516
- logger.warn('Failed to update ACP session status on exit', {
517
- sessionId,
518
- error: error instanceof Error ? error.message : String(error),
519
- });
520
- }
521
- await this.recordUnexpectedExitIfNeeded(session, sessionId, exitCode, wasDeliberateStop, runtimeIncarnationId);
522
- await this.recordRatchetSessionEndOnExit(session.workspaceId, sessionId, exitCode);
523
- void this.maybeDiscoverPROnSessionEnd(session.workspaceId);
524
- await this.cleanupExitedWorkflow(session, sessionId, wasDeliberateStop);
525
- }
526
- catch (error) {
527
- logger.warn('Failed to process ACP session exit', {
528
- sessionId,
529
- error: error instanceof Error ? error.message : String(error),
530
- });
531
- }
532
- finally {
533
- try {
534
- this.clearSessionStoreIfInactive(sessionId, 'runtime_exit');
535
- }
536
- finally {
537
- acpTraceLogger.closeSession(sessionId);
538
- }
539
- }
540
- }
541
- async recordUnexpectedExitIfNeeded(session, sessionId, exitCode, wasDeliberateStop, runtimeIncarnationId) {
542
- if (wasDeliberateStop) {
543
- return;
544
- }
545
- await this.lifecycleEventService.record({
546
- workspaceId: session.workspaceId,
547
- sessionId,
548
- kind: SessionLifecycleEventKind.SESSION_STOPPED,
549
- reason: SessionLifecycleEventReason.UNEXPECTED_EXIT,
550
- message: exitCode === null
551
- ? 'Session stopped: agent process exited unexpectedly.'
552
- : `Session stopped: agent process exited unexpectedly (code ${exitCode}).`,
553
- dedupeKey: `process-exit:${runtimeIncarnationId}:${exitCode ?? 'signal'}`,
554
- });
555
- }
556
- async cleanupExitedWorkflow(session, sessionId, wasDeliberateStop) {
557
- if (session.workflow === 'ratchet') {
558
- await this.persistRatchetTranscript(sessionId);
559
- await this.repository.deleteSession(sessionId);
560
- this.sessionDomainService.clearSession(sessionId);
561
- logger.debug('Deleted transient ratchet ACP session', { sessionId });
562
- }
563
- if (session.workflow === 'auto-iteration' &&
564
- this.autoIterationExitBridge &&
565
- !wasDeliberateStop) {
566
- this.autoIterationExitBridge.onAutoIterationSessionExit(session.workspaceId, sessionId);
567
- }
568
- }
569
- async createAcpClient(sessionId, options, session, permissionPreset, stopGeneration = this.getStopGeneration(sessionId)) {
570
- const sessionContext = await this.loadSessionContext(sessionId, session);
571
- if (!sessionContext) {
572
- throw new Error(`Session context not ready: ${sessionId}`);
573
- }
574
- this.assertStartupAllowed(sessionId, stopGeneration);
575
- await this.repository.markWorkspaceHasHadSessions(sessionContext.workspaceId);
576
- this.assertStartupAllowed(sessionId, stopGeneration);
577
- this.acpEventProcessor.registerSessionContext(sessionId, {
578
- workspaceId: sessionContext.workspaceId,
579
- workingDir: sessionContext.workingDir,
580
- provider: session?.provider ?? 'CLAUDE',
581
- });
582
- const handlers = this.setupAcpEventHandler(sessionId);
583
- const shouldSuppressReplay = this.shouldSuppressReplayDuringAcpResume(sessionId, session);
584
- this.acpEventProcessor.setReplaySuppression(sessionId, shouldSuppressReplay);
585
- const apiPort = String(configService.getBackendPort());
586
- const mcpServerConfig = getChildWorkspaceMcpServerConfig({
587
- workspaceId: sessionContext.workspaceId,
588
- parentWorkspaceId: sessionContext.parentWorkspaceId ?? null,
589
- apiBaseUrl: `http://localhost:${apiPort}`,
590
- });
591
- const clientOptions = {
592
- provider: session?.provider ?? 'CLAUDE',
593
- workingDir: sessionContext.workingDir,
594
- model: options?.model ?? sessionContext.model,
595
- systemPrompt: sessionContext.systemPrompt,
596
- permissionPreset,
597
- sessionId,
598
- resumeProviderSessionId: session?.providerSessionId ?? undefined,
599
- mcpServers: [mcpServerConfig],
600
- };
601
- let handle;
602
- this.assertStartupAllowed(sessionId, stopGeneration);
603
- const creationPromise = this.runtimeManager.getOrCreateClient(sessionId, clientOptions, handlers, {
604
- workspaceId: sessionContext.workspaceId,
605
- workingDir: sessionContext.workingDir,
606
- });
607
- const sessionCreations = this.clientCreationOperations.get(sessionId) ?? new Set();
608
- sessionCreations.add(creationPromise);
609
- this.clientCreationOperations.set(sessionId, sessionCreations);
610
- try {
611
- handle = await creationPromise;
612
- this.assertStartupAllowed(sessionId, stopGeneration);
613
- await this.sessionConfigService.applyConfiguredReasoningEffort(sessionId, handle, {
614
- persistSnapshot: false,
615
- emitUpdates: false,
616
- });
617
- }
618
- catch (error) {
619
- this.acpEventProcessor.clearSessionState(sessionId);
620
- throw error;
621
- }
622
- finally {
623
- sessionCreations.delete(creationPromise);
624
- if (sessionCreations.size === 0) {
625
- this.clientCreationOperations.delete(sessionId);
626
- }
627
- }
628
- this.assertStartupAllowed(sessionId, stopGeneration);
629
- await this.persistAcpConfigSnapshot(sessionId, {
630
- provider: handle.provider,
631
- providerSessionId: handle.providerSessionId,
632
- configOptions: handle.configOptions,
633
- existingMetadata: session?.providerMetadata ?? undefined,
634
- });
635
- if (handle.configOptions.length > 0) {
636
- this.sessionDomainService.emitDelta(sessionId, {
637
- type: 'config_options_update',
638
- configOptions: handle.configOptions,
639
- });
640
- }
641
- this.sessionDomainService.emitDelta(sessionId, {
642
- type: 'chat_capabilities',
643
- capabilities: this.buildAcpChatBarCapabilities(handle),
644
- });
645
- this.assertStartupAllowed(sessionId, stopGeneration);
646
- const dispatchableNotificationCount = await this.deliverPendingChildNotifications(sessionId, sessionContext.workspaceId, stopGeneration);
647
- return { handle, dispatchableNotificationCount };
648
- }
649
- shouldSuppressReplayDuringAcpResume(sessionId, session) {
650
- if (!session?.providerSessionId) {
651
- return false;
652
- }
653
- if (!this.sessionDomainService.isHistoryHydrated(sessionId)) {
654
- return false;
655
- }
656
- return this.sessionDomainService.getTranscriptSnapshot(sessionId).length > 0;
95
+ this.assertConfigured();
96
+ await this.dependencies.terminationCoordinator.stopAllClients(timeoutMs);
657
97
  }
658
- async applyStartupModePreset(sessionId, handle, startupModePreset, workflow) {
659
- await this.sessionConfigService.applyStartupModePreset(sessionId, handle, startupModePreset, workflow, {
660
- persistSnapshot: this.persistAcpConfigSnapshot.bind(this),
661
- });
662
- }
663
- async applyConfiguredPermissionPreset(sessionId, session, handle, permissionPreset) {
664
- await this.sessionConfigService.applyConfiguredPermissionPreset(sessionId, session, handle, permissionPreset);
665
- }
666
- finalizeOrphanedToolCalls(sessionId, reason) {
667
- try {
668
- this.acpEventProcessor.finalizeOrphanedToolCalls(sessionId, reason);
669
- }
670
- catch (error) {
671
- logger.warn('Failed finalizing orphaned ACP tool calls', {
672
- sessionId,
673
- reason,
674
- error: error instanceof Error ? error.message : String(error),
675
- });
676
- this.acpEventProcessor.clearPendingToolCalls(sessionId);
677
- }
678
- }
679
- markWorkspaceSessionIdleOnStop(workspaceId, sessionId) {
680
- if (!(workspaceId && this.workspaceBridge)) {
681
- return;
682
- }
683
- try {
684
- this.workspaceBridge.markSessionIdle(workspaceId, sessionId);
685
- }
686
- catch (error) {
687
- logger.warn('Failed to mark workspace session idle during stop', {
688
- sessionId,
689
- workspaceId,
690
- error: error instanceof Error ? error.message : String(error),
691
- });
692
- }
693
- }
694
- async loadSessionForStop(sessionId) {
695
- try {
696
- return await this.retryService.run(() => this.repository.getSessionById(sessionId), {
697
- attempts: 2,
698
- operationName: 'loadSessionForStop',
699
- context: { sessionId },
700
- });
701
- }
702
- catch (error) {
703
- logger.warn('Failed to load session before stop; continuing with process shutdown', {
704
- sessionId,
705
- error: error instanceof Error ? error.message : String(error),
706
- });
707
- return null;
708
- }
709
- }
710
- async updateStoppedSessionState(sessionId) {
711
- try {
712
- await this.retryService.run(() => this.repository.updateSessionIfStatus(sessionId, {
713
- status: SessionStatus.IDLE,
714
- }, [SessionStatus.RUNNING]), {
715
- attempts: 2,
716
- operationName: 'updateStoppedSessionState',
717
- context: { sessionId },
718
- });
719
- }
720
- catch (error) {
721
- logger.warn('Failed to update session state during stop; continuing cleanup', {
722
- sessionId,
723
- error: error instanceof Error ? error.message : String(error),
724
- });
725
- }
726
- }
727
- async cleanupTransientRatchetOnStop(session, sessionId, shouldCleanupTransientRatchetSession) {
728
- if (session?.workflow !== 'ratchet') {
729
- return;
730
- }
731
- try {
732
- await this.recordRatchetSessionEnd(session.workspaceId, sessionId, 'COMPLETED');
733
- }
734
- catch (error) {
735
- logger.warn('Failed settling ratchet dispatch record during stop', {
736
- sessionId,
737
- workspaceId: session.workspaceId,
738
- error: error instanceof Error ? error.message : String(error),
739
- });
740
- }
741
- if (!shouldCleanupTransientRatchetSession) {
742
- return;
743
- }
744
- try {
745
- await this.persistRatchetTranscript(sessionId);
746
- await this.repository.deleteSession(sessionId);
747
- this.sessionDomainService.clearSession(sessionId);
748
- logger.debug('Deleted transient ratchet session after stop', { sessionId });
749
- }
750
- catch (error) {
751
- logger.warn('Failed persisting or deleting transient ratchet session during stop', {
752
- sessionId,
753
- error: error instanceof Error ? error.message : String(error),
754
- });
755
- }
756
- }
757
- async recordRatchetSessionEnd(workspaceId, sessionId, outcome) {
758
- if (!this.workspaceBridge) {
759
- return;
760
- }
761
- await this.workspaceBridge.recordRatchetSessionEnd(workspaceId, sessionId, outcome);
98
+ persistClosedSession(sessionId) {
99
+ this.assertConfigured();
100
+ return this.dependencies.workflowFinalizer.persistClosedSession(sessionId);
762
101
  }
763
- async recordRatchetSessionEndOnExit(workspaceId, sessionId, exitCode) {
764
- const outcome = exitCode === 0 || this.runtimeManager.isStopInProgress(sessionId) ? 'COMPLETED' : 'DIED';
765
- await this.recordRatchetSessionEnd(workspaceId, sessionId, outcome);
102
+ recoverStaleRunningSessions() {
103
+ this.assertConfigured();
104
+ return this.dependencies.workflowFinalizer.recoverStaleRunningSessions();
766
105
  }
767
- async maybeDiscoverPROnSessionEnd(workspaceId) {
768
- if (!this.workspaceBridge) {
769
- return;
770
- }
771
- await maybeDiscoverPROnSessionEndHelper(workspaceId, logger, this.workspaceBridge);
772
- }
773
- clearSessionStoreIfInactive(sessionId, reason) {
774
- if (this.runtimeManager.isSessionRunning(sessionId) ||
775
- sessionEventBus.countViewers(sessionId) > 0) {
776
- return;
777
- }
778
- this.sessionDomainService.clearSession(sessionId, { preserveRejections: true });
779
- logger.debug('Cleared inactive in-memory session state', { sessionId, reason });
780
- }
781
- async persistClosedSession(sessionId) {
782
- const session = await this.repository.getSessionById(sessionId);
783
- if (!session) {
784
- logger.warn('Cannot persist closed session: session not found', { sessionId });
785
- return;
786
- }
787
- const workspace = await workspaceDataService.findById(session.workspaceId);
788
- if (!workspace?.worktreePath) {
789
- logger.warn('Cannot persist closed session: no worktree path', {
790
- sessionId,
791
- workspaceId: session.workspaceId,
792
- });
793
- return;
794
- }
795
- await this.hydrateProviderHistory(sessionId, {
796
- ...session,
797
- workspace: { worktreePath: workspace.worktreePath },
798
- });
799
- await this.lifecycleEventService.hydrate(sessionId);
800
- const transcript = this.sessionDomainService.getTranscriptSnapshot(sessionId);
801
- await closedSessionPersistenceService.persistClosedSession({
802
- sessionId,
803
- workspaceId: session.workspaceId,
804
- worktreePath: workspace.worktreePath,
805
- name: session.name,
806
- workflow: session.workflow,
807
- provider: session.provider,
808
- model: session.model,
809
- startedAt: session.createdAt,
810
- messages: transcript,
811
- });
812
- }
813
- async persistRatchetTranscript(sessionId) {
814
- await this.persistClosedSession(sessionId);
815
- }
816
- async getOrCreateAcpSessionClient(sessionId, options, session, stopGeneration) {
817
- this.assertStartupAllowed(sessionId, stopGeneration);
818
- const existingAcp = this.runtimeManager.getClient(sessionId);
819
- if (existingAcp) {
820
- this.sessionDomainService.setRuntimeSnapshot(sessionId, {
821
- phase: existingAcp.isPromptInFlight ? 'running' : 'idle',
822
- processState: 'alive',
823
- activity: existingAcp.isPromptInFlight ? 'WORKING' : 'IDLE',
824
- updatedAt: new Date().toISOString(),
825
- });
826
- return { handle: existingAcp, dispatchableNotificationCount: 0 };
827
- }
828
- this.sessionDomainService.setRuntimeSnapshot(sessionId, {
829
- phase: 'starting',
830
- processState: 'alive',
831
- activity: 'IDLE',
832
- updatedAt: new Date().toISOString(),
833
- });
834
- const resolvedPreset = await this.resolvePermissionPreset(session);
835
- this.assertStartupAllowed(sessionId, stopGeneration);
836
- let handle;
837
- let dispatchableNotificationCount = 0;
838
- try {
839
- const created = await this.createAcpClient(sessionId, options, session, resolvedPreset, stopGeneration);
840
- handle = created.handle;
841
- dispatchableNotificationCount = created.dispatchableNotificationCount;
842
- }
843
- catch (error) {
844
- this.sessionDomainService.setRuntimeSnapshot(sessionId, {
845
- phase: 'error',
846
- processState: 'stopped',
847
- activity: 'IDLE',
848
- errorMessage: `Failed to start agent: ${toErrorMessage(error)}`,
849
- updatedAt: new Date().toISOString(),
850
- });
851
- throw error;
852
- }
853
- this.assertStartupAllowed(sessionId, stopGeneration);
854
- await this.repository.updateSession(sessionId, {
855
- status: SessionStatus.RUNNING,
856
- });
857
- this.sessionDomainService.setRuntimeSnapshot(sessionId, {
858
- phase: handle.isPromptInFlight ? 'running' : 'idle',
859
- processState: 'alive',
860
- activity: handle.isPromptInFlight ? 'WORKING' : 'IDLE',
861
- updatedAt: new Date().toISOString(),
862
- });
863
- return { handle, resolvedPreset, dispatchableNotificationCount };
864
- }
865
- async dispatchQueuedNotificationsIfNeeded(sessionId, dispatchableNotificationCount) {
866
- if (dispatchableNotificationCount === 0 || !this.messageQueueBridge) {
867
- return;
868
- }
869
- try {
870
- await this.messageQueueBridge.tryDispatchNextMessage(sessionId);
871
- }
872
- catch (error) {
873
- logger.warn('Failed to dispatch queued workspace notifications', {
874
- sessionId,
875
- error: error instanceof Error ? error.message : String(error),
876
- });
877
- }
878
- }
879
- async persistAcpConfigSnapshot(sessionId, params) {
880
- await this.sessionConfigService.persistAcpConfigSnapshot(sessionId, params);
881
- }
882
- buildAcpChatBarCapabilities(handle) {
883
- return this.sessionConfigService.buildAcpChatBarCapabilities(handle);
884
- }
885
- async loadSessionContext(sessionId, preloadedSession) {
886
- const session = preloadedSession ?? (await this.repository.getSessionById(sessionId));
887
- if (!session) {
888
- logger.warn('Session not found when getting options', { sessionId });
889
- return null;
890
- }
891
- const workspace = await this.repository.getWorkspaceById(session.workspaceId);
892
- if (!workspace?.worktreePath) {
893
- logger.warn('Workspace or worktree not found', {
894
- sessionId,
895
- workspaceId: session.workspaceId,
896
- });
897
- return null;
898
- }
899
- const shouldInjectBranchRename = this.promptBuilder.shouldInjectBranchRename({
900
- branchName: workspace.branchName,
901
- isAutoGeneratedBranch: workspace.isAutoGeneratedBranch,
902
- hasHadSessions: workspace.hasHadSessions,
903
- });
904
- const project = shouldInjectBranchRename
905
- ? await this.repository.getProjectById(workspace.projectId)
906
- : null;
907
- if (shouldInjectBranchRename && !project) {
908
- logger.warn('Project not found when building branch rename instruction', {
909
- sessionId,
910
- projectId: workspace.projectId,
911
- });
912
- }
913
- const parentCtx = await this.resolveParentWorkspaceContext(workspace);
914
- const { workflowPrompt, systemPrompt, injectedBranchRename } = this.promptBuilder.buildSystemPrompt({
915
- workflow: session.workflow,
916
- workspace: {
917
- branchName: workspace.branchName,
918
- isAutoGeneratedBranch: workspace.isAutoGeneratedBranch,
919
- hasHadSessions: workspace.hasHadSessions,
920
- name: workspace.name,
921
- description: workspace.description ?? undefined,
922
- runScriptPort: workspace.runScriptPort,
923
- parentWorkspaceId: workspace.parentWorkspaceId,
924
- parentWorkspaceName: parentCtx.parentWorkspaceName,
925
- parentProjectName: parentCtx.parentProjectName,
926
- reportBackOn: parentCtx.reportBackOn,
927
- },
928
- project,
929
- });
930
- logger.info('Loaded workflow prompt for session options', {
931
- sessionId,
932
- workflow: session.workflow,
933
- hasPrompt: !!workflowPrompt,
934
- promptLength: workflowPrompt?.length ?? 0,
935
- });
936
- if (injectedBranchRename) {
937
- logger.info('Injected branch rename instruction', {
938
- sessionId,
939
- branchName: workspace.branchName,
940
- branchPrefix: project?.githubOwner,
941
- });
942
- }
943
- return {
944
- workingDir: workspace.worktreePath,
945
- resumeProviderSessionId: session.providerSessionId ?? undefined,
946
- systemPrompt,
947
- model: session.model,
948
- workspaceId: workspace.id,
949
- workspaceStatus: workspace.status,
950
- parentWorkspaceId: workspace.parentWorkspaceId,
951
- };
952
- }
953
- async deliverPendingChildNotifications(sessionId, workspaceId, stopGeneration = this.getStopGeneration(sessionId)) {
954
- try {
955
- const pending = await workspaceNotificationService.listPendingForDelivery(workspaceId);
956
- this.assertStartupAllowed(sessionId, stopGeneration);
957
- if (pending.length === 0) {
958
- return 0;
959
- }
960
- if (!this.messageQueueBridge) {
961
- logger.warn('Cannot deliver pending workspace notifications: message queue bridge missing', {
962
- sessionId,
963
- workspaceId,
964
- count: pending.length,
965
- });
966
- return 0;
967
- }
968
- let enqueuedCount = 0;
969
- let dispatchableCount = 0;
970
- const consumedContentMatchIds = new Set();
971
- for (const notification of pending) {
972
- this.assertStartupAllowed(sessionId, stopGeneration);
973
- const timestamp = notification.createdAt.toISOString();
974
- const messageId = workspaceNotificationMessageId(notification.id);
975
- if (this.sessionDomainService.hasQueuedMessage(sessionId, messageId)) {
976
- dispatchableCount += 1;
977
- continue;
978
- }
979
- let claudeMessage;
980
- if (notification.direction === 'PARENT_TO_CHILD') {
981
- claudeMessage = {
982
- type: 'parent_workspace_update',
983
- parentWorkspaceId: notification.sourceWorkspaceId,
984
- parentWorkspaceName: notification.sourceWorkspaceName,
985
- parentProjectName: notification.sourceProjectName,
986
- text: notification.message,
987
- timestamp,
988
- };
989
- }
990
- else {
991
- claudeMessage = {
992
- type: 'child_workspace_update',
993
- childWorkspaceId: notification.sourceWorkspaceId,
994
- childWorkspaceName: notification.sourceWorkspaceName,
995
- childProjectName: notification.sourceProjectName,
996
- text: notification.message,
997
- timestamp,
998
- };
999
- }
1000
- const enqueueText = buildWorkspaceNotificationMessageText(notification);
1001
- const alreadyDelivered = await this.markDeliveredIfTranscriptMatch(sessionId, workspaceId, notification.id, messageId, enqueueText, consumedContentMatchIds);
1002
- this.assertStartupAllowed(sessionId, stopGeneration);
1003
- if (alreadyDelivered) {
1004
- continue;
1005
- }
1006
- if (this.sessionDomainService.hasQueuedMessage(sessionId, messageId)) {
1007
- dispatchableCount += 1;
1008
- continue;
1009
- }
1010
- const enqueueResult = this.sessionDomainService.enqueue(sessionId, {
1011
- id: messageId,
1012
- text: enqueueText,
1013
- timestamp,
1014
- settings: {
1015
- selectedModel: null,
1016
- reasoningEffort: null,
1017
- thinkingEnabled: false,
1018
- planModeEnabled: false,
1019
- },
1020
- });
1021
- if ('error' in enqueueResult) {
1022
- logger.warn('Failed to enqueue pending workspace notification', {
1023
- sessionId,
1024
- workspaceId,
1025
- notificationId: notification.id,
1026
- error: enqueueResult.error,
1027
- });
1028
- continue;
1029
- }
1030
- enqueuedCount += 1;
1031
- dispatchableCount += 1;
1032
- const order = this.sessionDomainService.appendClaudeEvent(sessionId, claudeMessage);
1033
- this.sessionDomainService.emitDelta(sessionId, {
1034
- type: 'agent_message',
1035
- data: claudeMessage,
1036
- order,
1037
- });
1038
- }
1039
- logger.info('Queued pending workspace notifications', {
1040
- sessionId,
1041
- workspaceId,
1042
- count: enqueuedCount,
1043
- dispatchableCount,
1044
- });
1045
- return dispatchableCount;
1046
- }
1047
- catch (error) {
1048
- logger.warn('Failed to deliver pending workspace notifications', {
1049
- sessionId,
1050
- workspaceId,
1051
- error: error instanceof Error ? error.message : String(error),
1052
- });
1053
- return 0;
1054
- }
1055
- }
1056
- findCommittedQueuedWorkspaceNotificationMessage(sessionId, messageId, messageText, consumedContentMatchIds) {
1057
- const userEntries = this.sessionDomainService
1058
- .getTranscriptSnapshot(sessionId)
1059
- .filter((entry) => entry.source === 'user');
1060
- const exactIdMatch = userEntries.find((entry) => entry.id === messageId);
1061
- if (exactIdMatch) {
1062
- return { id: exactIdMatch.id, matchedByContent: false };
1063
- }
1064
- if (this.sessionDomainService.getHistoryHydrationSource(sessionId) !== 'jsonl') {
1065
- return undefined;
1066
- }
1067
- const contentMatch = userEntries.find((entry) => !entry.id.startsWith(WORKSPACE_NOTIFICATION_MESSAGE_ID_PREFIX) &&
1068
- entry.text === messageText &&
1069
- !consumedContentMatchIds.has(entry.id));
1070
- if (contentMatch) {
1071
- return { id: contentMatch.id, matchedByContent: true };
1072
- }
1073
- return undefined;
1074
- }
1075
- async markDeliveredIfTranscriptMatch(sessionId, workspaceId, notificationId, messageId, messageText, consumedContentMatchIds) {
1076
- const committedMessage = this.findCommittedQueuedWorkspaceNotificationMessage(sessionId, messageId, messageText, consumedContentMatchIds);
1077
- if (!committedMessage) {
1078
- return false;
1079
- }
1080
- if (committedMessage.matchedByContent) {
1081
- consumedContentMatchIds.add(committedMessage.id);
1082
- }
1083
- await this.markDeliveredAfterTranscriptMatch(sessionId, workspaceId, notificationId);
1084
- return true;
1085
- }
1086
- async markDeliveredAfterTranscriptMatch(sessionId, workspaceId, notificationId) {
1087
- try {
1088
- await workspaceNotificationService.markDelivered([notificationId]);
1089
- }
1090
- catch (error) {
1091
- logger.warn('Failed to mark already-transcripted workspace notification delivered', {
1092
- sessionId,
1093
- workspaceId,
1094
- notificationId,
1095
- error: error instanceof Error ? error.message : String(error),
1096
- });
1097
- }
1098
- }
1099
- async resolveParentWorkspaceContext(workspace) {
1100
- if (!workspace.parentWorkspaceId) {
1101
- return {};
1102
- }
1103
- let parentWorkspaceName;
1104
- let parentProjectName;
1105
- const parentWorkspace = await this.repository.getWorkspaceById(workspace.parentWorkspaceId);
1106
- if (parentWorkspace) {
1107
- parentWorkspaceName = parentWorkspace.name;
1108
- const parentProject = await this.repository.getProjectById(parentWorkspace.projectId);
1109
- parentProjectName = parentProject?.name;
1110
- }
1111
- const metadata = workspace.creationMetadata;
1112
- const reportBackOn = typeof metadata?.reportBackOn === 'string' ? metadata.reportBackOn : undefined;
1113
- return { parentWorkspaceName, parentProjectName, reportBackOn };
1114
- }
1115
- async resolvePermissionPreset(session) {
1116
- const fallback = session?.workflow === 'ratchet' ? 'YOLO' : 'STRICT';
1117
- try {
1118
- const settings = await userSettingsService.get();
1119
- return session?.workflow === 'ratchet'
1120
- ? settings.ratchetPermissions
1121
- : settings.defaultWorkspacePermissions;
1122
- }
1123
- catch (error) {
1124
- logger.warn('Failed loading user permission preset; using default', {
1125
- workflow: session?.workflow,
1126
- error: error instanceof Error ? error.message : String(error),
1127
- });
1128
- return fallback;
106
+ assertConfigured() {
107
+ if (!this.configured) {
108
+ throw new Error('SessionLifecycleService not configured: lifecycle bridges missing');
1129
109
  }
1130
110
  }
1131
111
  }