factory-factory 0.4.5 → 0.4.6

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 (383) hide show
  1. package/dist/client/assets/{abnfDiagram-VRR7QNED-DygwVN25.js → abnfDiagram-N423BO3Z-BcUuFtOj.js} +1 -1
  2. package/dist/client/assets/{arc-CcnMw5av.js → arc-Cp8_E6ha.js} +1 -1
  3. package/dist/client/assets/architectureDiagram-T3A2C74G-C3_2J0tC.js +36 -0
  4. package/dist/client/assets/{blockDiagram-677ZJIJ3-DQ77xvqH.js → blockDiagram-VBNYF7ZC-Dy0jc6lP.js} +1 -1
  5. package/dist/client/assets/{c4Diagram-LMCZKHZV-B-9QZJ1e.js → c4Diagram-5PPSVZJV-97TkD6w-.js} +1 -1
  6. package/dist/client/assets/channel-DLBBfejH.js +1 -0
  7. package/dist/client/assets/{chunk-32BRIVSS-CV9UmSkI.js → chunk-2GRJ4B5K-Dc0I7ume.js} +1 -1
  8. package/dist/client/assets/{chunk-2Q5K7J3B-DhfBY-Wd.js → chunk-2Q5K7J3B-DbFPWZwu.js} +1 -1
  9. package/dist/client/assets/{chunk-EX3LRPZG-Dj63JdET.js → chunk-5RXB4S5H-Dci_7ZDD.js} +1 -1
  10. package/dist/client/assets/{chunk-5VM5RSS4-BUNj3iDY.js → chunk-5VM5RSS4-Ca82Rzl0.js} +1 -1
  11. package/dist/client/assets/{chunk-MOJQB5TN-PY5GLOxr.js → chunk-6Q2QTUOP-Be2f5Q2t.js} +1 -1
  12. package/dist/client/assets/{chunk-V7JOEXUC--zp7Z0xS.js → chunk-GF5L2VYU-C4VRs6xS.js} +1 -1
  13. package/dist/client/assets/{chunk-JWPE2WC7-i6Ud3VAu.js → chunk-JWPE2WC7-DVlW0c7f.js} +1 -1
  14. package/dist/client/assets/{chunk-VR4S4FIN-JstmsazP.js → chunk-KBJHAD2P-BKRpW89b.js} +1 -1
  15. package/dist/client/assets/{chunk-RYQCIY6F-pIEuQy1L.js → chunk-RYQCIY6F-BwMw9oh9.js} +1 -1
  16. package/dist/client/assets/{chunk-XXDRQBXY-C66lsFmy.js → chunk-XXDRQBXY-py-FQquv.js} +1 -1
  17. package/dist/client/assets/classDiagram-JCYQIIEL-Ds5wVQR3.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-OCEON4UE-Ds5wVQR3.js +1 -0
  19. package/dist/client/assets/{cose-bilkent-JH36ORCC-D3jSuAHn.js → cose-bilkent-JH36ORCC-BMCtQCZ8.js} +1 -1
  20. package/dist/client/assets/{cynefin-VYW2F7L2-Dx3xfGS7.js → cynefin-VYW2F7L2-BTHAy6wD.js} +1 -1
  21. package/dist/client/assets/{cynefinDiagram-TSTJHNR4-BcGYZcSJ.js → cynefinDiagram-MW4NZA55-pQCQD0Ih.js} +1 -1
  22. package/dist/client/assets/{dagre-VKFMJZFB-CLZSDf9x.js → dagre-VZM6K2ZE-CZcoEFVf.js} +1 -1
  23. package/dist/client/assets/{diagram-OA4YK3LP-C7WEtC2B.js → diagram-7IWD3JNH-DgQv_208.js} +1 -1
  24. package/dist/client/assets/{diagram-FQU43EPY-Nosv2FJf.js → diagram-B4RE2ZJO-DoFotcsB.js} +1 -1
  25. package/dist/client/assets/{diagram-NH7WQ7WH-BmRiUIAJ.js → diagram-LBJQPF4R-C5zkL1ml.js} +1 -1
  26. package/dist/client/assets/{diagram-G47NLZAW-CPjqONaO.js → diagram-Q27KOJAE-ERKqnoHP.js} +1 -1
  27. package/dist/client/assets/diagram-UB23O5K3-Dyt6sy3Z.js +41 -0
  28. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-D2Ye87k4.js → ebnfDiagram-BXEA7PRR-DqsFEAw2.js} +1 -1
  29. package/dist/client/assets/{erDiagram-Q63AITRT-CgZF8eG-.js → erDiagram-JOGREHBK-Dn8Aqkgn.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-23GEKE2U-bxoO3Eep.js → flowDiagram-UKHOOZJN-DcArGyH-.js} +6 -6
  31. package/dist/client/assets/{ganttDiagram-NO4QXBWP-BAtqPw6P.js → ganttDiagram-PKOTCBZU-BuHaeolc.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-DYQqeJ8w.js → gitGraphDiagram-DS77QQ5N-iKWWNsQK.js} +1 -1
  33. package/dist/client/assets/index-CVVo6xHd.css +1 -0
  34. package/dist/client/assets/index-DY0TryY7.js +695 -0
  35. package/dist/client/assets/{infoDiagram-FWYZ7A6U-CZQCerFQ.js → infoDiagram-6WML65LV-C7IulVvo.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-Bc7wE25N.js → ishikawaDiagram-WSZJBQD7-DW4cB_Nk.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-5HDEW3XC-D5qqjKJz.js → journeyDiagram-NVQOT4AX-Nzsiy4H7.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-HUTT4EX6-42kkaHBo.js → kanban-definition-27J2QSJJ-BUsK9dj9.js} +1 -1
  39. package/dist/client/assets/{linear-Dg3NQEM3.js → linear-CyoW-usj.js} +1 -1
  40. package/dist/client/assets/{mindmap-definition-LN4V7U3C-CRANKUcD.js → mindmap-definition-FAOFIHXS-Bd9cSJjQ.js} +1 -1
  41. package/dist/client/assets/{mobile-baseline-D6bQ8WTB.js → mobile-baseline-K78aE4nt.js} +1 -1
  42. package/dist/client/assets/{pegDiagram-2B236MQR-qJQPOd8H.js → pegDiagram-VL7TDLO6-BrmAKdiE.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-ENE6RG2P-B5wB7Ccf.js → pieDiagram-7S7Q4E2Y-Ce0k6LI1.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-CCZfXF8m.js → quadrantDiagram-CIZ2JOQS-_9HxOOGa.js} +1 -1
  45. package/dist/client/assets/{railroadDiagram-RFXS5EU6-BuIrSJUW.js → railroadDiagram-AXF67PYL-ChdF1CBw.js} +1 -1
  46. package/dist/client/assets/{requirementDiagram-TGXJPOKE-DfIr0zZ3.js → requirementDiagram-LRYGKXZP-Bm2gdYTE.js} +1 -1
  47. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-CJoUXRWq.js → sankeyDiagram-W5VNT64P-Kf7zUiC-.js} +1 -1
  48. package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-Cq1lOU1b.js → sequenceDiagram-SI44F4Z6-DyPqsgh1.js} +1 -1
  49. package/dist/client/assets/{sizeCapture-X5ZJPWSS-XHOsOkor.js → sizeCapture-X5ZJPWSS-Cgn8Hxr2.js} +1 -1
  50. package/dist/client/assets/{stateDiagram-2N3HPSRC-BLVzzete.js → stateDiagram-OKZ733FA-CJxSzxmg.js} +1 -1
  51. package/dist/client/assets/stateDiagram-v2-UEYNNEHI-BwUaUW2J.js +1 -0
  52. package/dist/client/assets/{swimlanes-5IMT3BWC-C20mYIPR.js → swimlanes-SLNWSIFB-Ckb_izEZ.js} +2 -2
  53. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-D87lLmuW.js +8 -0
  54. package/dist/client/assets/{terminal-instance-Dw2gcPib.js → terminal-instance-DWySt2_t.js} +1 -1
  55. package/dist/client/assets/{timeline-definition-FHXFAJF6-DlceJAxJ.js → timeline-definition-Z64GVDOM-BWx_NLrK.js} +1 -1
  56. package/dist/client/assets/{vennDiagram-L72KCM5P-CFl-Eo1Y.js → vennDiagram-T6HMQDX7-BgN2-lO-.js} +1 -1
  57. package/dist/client/assets/{wardleyDiagram-EHGQE667-eBpeLOoN.js → wardleyDiagram-T6FBY63Y-C9iwoeki.js} +1 -1
  58. package/dist/client/assets/{xychartDiagram-FW5EYKEG-B8RBkKiX.js → xychartDiagram-ELKLHX3M-B3AYy5ZN.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 +4 -1
  83. package/dist/src/backend/app-context.js.map +1 -1
  84. package/dist/src/backend/orchestration/data-backup.service.d.ts.map +1 -1
  85. package/dist/src/backend/orchestration/data-backup.service.js +10 -0
  86. package/dist/src/backend/orchestration/data-backup.service.js.map +1 -1
  87. package/dist/src/backend/orchestration/data-backup.service.test.js +23 -0
  88. package/dist/src/backend/orchestration/data-backup.service.test.js.map +1 -1
  89. package/dist/src/backend/orchestration/reconciliation.service.d.ts.map +1 -1
  90. package/dist/src/backend/orchestration/reconciliation.service.js +4 -0
  91. package/dist/src/backend/orchestration/reconciliation.service.js.map +1 -1
  92. package/dist/src/backend/orchestration/reconciliation.service.test.js +39 -0
  93. package/dist/src/backend/orchestration/reconciliation.service.test.js.map +1 -1
  94. package/dist/src/backend/routers/websocket/index.d.ts +1 -0
  95. package/dist/src/backend/routers/websocket/index.d.ts.map +1 -1
  96. package/dist/src/backend/routers/websocket/index.js +1 -0
  97. package/dist/src/backend/routers/websocket/index.js.map +1 -1
  98. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.d.ts +11 -0
  99. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.d.ts.map +1 -0
  100. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.js +28 -0
  101. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.js.map +1 -0
  102. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.d.ts +2 -0
  103. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.d.ts.map +1 -0
  104. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.js +84 -0
  105. package/dist/src/backend/routers/websocket/voice-soft-stop.handler.test.js.map +1 -0
  106. package/dist/src/backend/routers/websocket/voice.handler.d.ts +3 -0
  107. package/dist/src/backend/routers/websocket/voice.handler.d.ts.map +1 -0
  108. package/dist/src/backend/routers/websocket/voice.handler.js +46 -0
  109. package/dist/src/backend/routers/websocket/voice.handler.js.map +1 -0
  110. package/dist/src/backend/server.d.ts.map +1 -1
  111. package/dist/src/backend/server.js +3 -1
  112. package/dist/src/backend/server.js.map +1 -1
  113. package/dist/src/backend/server.upgrade.test.js +16 -0
  114. package/dist/src/backend/server.upgrade.test.js.map +1 -1
  115. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js +6 -0
  116. package/dist/src/backend/services/ratchet/service/ratchet.service.test.js.map +1 -1
  117. package/dist/src/backend/services/session/service/acp/acp-client-handler.d.ts +1 -0
  118. package/dist/src/backend/services/session/service/acp/acp-client-handler.d.ts.map +1 -1
  119. package/dist/src/backend/services/session/service/acp/acp-client-handler.js +30 -0
  120. package/dist/src/backend/services/session/service/acp/acp-client-handler.js.map +1 -1
  121. package/dist/src/backend/services/session/service/acp/acp-client-handler.test.js +57 -0
  122. package/dist/src/backend/services/session/service/acp/acp-client-handler.test.js.map +1 -1
  123. package/dist/src/backend/services/session/service/acp/acp-event-translator.d.ts +1 -37
  124. package/dist/src/backend/services/session/service/acp/acp-event-translator.d.ts.map +1 -1
  125. package/dist/src/backend/services/session/service/acp/acp-event-translator.js +1 -334
  126. package/dist/src/backend/services/session/service/acp/acp-event-translator.js.map +1 -1
  127. package/dist/src/backend/services/session/service/acp/acp-event-translator.test.js +5 -484
  128. package/dist/src/backend/services/session/service/acp/acp-event-translator.test.js.map +1 -1
  129. package/dist/src/backend/services/session/service/acp/acp-process-handle.d.ts +2 -0
  130. package/dist/src/backend/services/session/service/acp/acp-process-handle.d.ts.map +1 -1
  131. package/dist/src/backend/services/session/service/acp/acp-process-handle.js +12 -0
  132. package/dist/src/backend/services/session/service/acp/acp-process-handle.js.map +1 -1
  133. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.d.ts +2 -0
  134. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.d.ts.map +1 -0
  135. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.js +66 -0
  136. package/dist/src/backend/services/session/service/acp/acp-process-handle.test.js.map +1 -0
  137. package/dist/src/backend/services/session/service/acp/acp-runtime-events.d.ts +7 -1
  138. package/dist/src/backend/services/session/service/acp/acp-runtime-events.d.ts.map +1 -1
  139. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.d.ts +19 -1
  140. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.d.ts.map +1 -1
  141. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.js +240 -54
  142. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.js.map +1 -1
  143. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.js +320 -22
  144. package/dist/src/backend/services/session/service/acp/acp-runtime-manager.test.js.map +1 -1
  145. package/dist/src/backend/services/session/service/acp/acp-session-config-options.d.ts +1 -0
  146. package/dist/src/backend/services/session/service/acp/acp-session-config-options.d.ts.map +1 -1
  147. package/dist/src/backend/services/session/service/acp/acp-session-config-options.js +4 -17
  148. package/dist/src/backend/services/session/service/acp/acp-session-config-options.js.map +1 -1
  149. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.d.ts +2 -0
  150. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.d.ts.map +1 -0
  151. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.js +121 -0
  152. package/dist/src/backend/services/session/service/acp/acp-session-config-options.test.js.map +1 -0
  153. package/dist/src/backend/services/session/service/acp/acp-session-negotiation.integration.test.js +1 -1
  154. package/dist/src/backend/services/session/service/acp/acp-session-negotiation.integration.test.js.map +1 -1
  155. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.d.ts +7 -0
  156. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.d.ts.map +1 -0
  157. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.js +160 -0
  158. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.js.map +1 -0
  159. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.d.ts +2 -0
  160. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.d.ts.map +1 -0
  161. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.js +260 -0
  162. package/dist/src/backend/services/session/service/acp/claude-model-catalog-loader.test.js.map +1 -0
  163. package/dist/src/backend/services/session/service/acp/claude-model-options.d.ts +5 -0
  164. package/dist/src/backend/services/session/service/acp/claude-model-options.d.ts.map +1 -0
  165. package/dist/src/backend/services/session/service/acp/claude-model-options.js +25 -0
  166. package/dist/src/backend/services/session/service/acp/claude-model-options.js.map +1 -0
  167. package/dist/src/backend/services/session/service/acp/claude-model-options.test.d.ts +2 -0
  168. package/dist/src/backend/services/session/service/acp/claude-model-options.test.d.ts.map +1 -0
  169. package/dist/src/backend/services/session/service/acp/claude-model-options.test.js +49 -0
  170. package/dist/src/backend/services/session/service/acp/claude-model-options.test.js.map +1 -0
  171. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/adapter-state.d.ts +2 -0
  172. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/adapter-state.d.ts.map +1 -1
  173. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.d.ts +2 -0
  174. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.d.ts.map +1 -1
  175. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.js +64 -1
  176. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.js.map +1 -1
  177. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.js +169 -0
  178. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.js.map +1 -1
  179. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.test.js +251 -0
  180. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.test.js.map +1 -1
  181. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.d.ts +38 -0
  182. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.d.ts.map +1 -0
  183. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.js +287 -0
  184. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.js.map +1 -0
  185. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.d.ts +2 -0
  186. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.d.ts.map +1 -0
  187. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.js +648 -0
  188. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-controller.test.js.map +1 -0
  189. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.d.ts +12 -0
  190. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.d.ts.map +1 -0
  191. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.js +51 -0
  192. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.js.map +1 -0
  193. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.d.ts +2 -0
  194. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.d.ts.map +1 -0
  195. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.js +85 -0
  196. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-subagent-mapper.test.js.map +1 -0
  197. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.d.ts +154 -19
  198. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.d.ts.map +1 -1
  199. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.js +73 -4
  200. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.js.map +1 -1
  201. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.test.js +86 -1
  202. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/codex-zod.test.js.map +1 -1
  203. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.d.ts +7 -0
  204. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.d.ts.map +1 -1
  205. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.js +85 -16
  206. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.js.map +1 -1
  207. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.test.js +356 -0
  208. package/dist/src/backend/services/session/service/acp/codex-app-server-adapter/stream-event-handler.test.js.map +1 -1
  209. package/dist/src/backend/services/session/service/acp/index.d.ts +2 -1
  210. package/dist/src/backend/services/session/service/acp/index.d.ts.map +1 -1
  211. package/dist/src/backend/services/session/service/acp/index.js +1 -0
  212. package/dist/src/backend/services/session/service/acp/index.js.map +1 -1
  213. package/dist/src/backend/services/session/service/acp/types.d.ts +1 -0
  214. package/dist/src/backend/services/session/service/acp/types.d.ts.map +1 -1
  215. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.d.ts +3 -0
  216. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.d.ts.map +1 -1
  217. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.js +44 -2
  218. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.js.map +1 -1
  219. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.d.ts +2 -0
  220. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.d.ts.map +1 -0
  221. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.js +108 -0
  222. package/dist/src/backend/services/session/service/chat/chat-event-forwarder.service.test.js.map +1 -0
  223. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.d.ts.map +1 -1
  224. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.js +4 -0
  225. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.js.map +1 -1
  226. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.test.js +24 -0
  227. package/dist/src/backend/services/session/service/chat/chat-message-handlers/handlers/queue-message.handler.test.js.map +1 -1
  228. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.d.ts.map +1 -1
  229. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.js +1 -0
  230. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.js.map +1 -1
  231. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.test.js +17 -0
  232. package/dist/src/backend/services/session/service/chat/chat-message-handlers/utils.test.js.map +1 -1
  233. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.d.ts +2 -0
  234. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.d.ts.map +1 -1
  235. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js +40 -11
  236. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.js.map +1 -1
  237. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js +131 -2
  238. package/dist/src/backend/services/session/service/chat/chat-message-handlers.service.test.js.map +1 -1
  239. package/dist/src/backend/services/session/service/data/session-provider-resolver.service.test.js +6 -0
  240. package/dist/src/backend/services/session/service/data/session-provider-resolver.service.test.js.map +1 -1
  241. package/dist/src/backend/services/session/service/index.d.ts +4 -3
  242. package/dist/src/backend/services/session/service/index.d.ts.map +1 -1
  243. package/dist/src/backend/services/session/service/index.js +3 -2
  244. package/dist/src/backend/services/session/service/index.js.map +1 -1
  245. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.d.ts +1 -0
  246. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.d.ts.map +1 -1
  247. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.js +36 -26
  248. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.js.map +1 -1
  249. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.d.ts +2 -0
  250. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.d.ts.map +1 -0
  251. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.js +70 -0
  252. package/dist/src/backend/services/session/service/lifecycle/acp-event-processor.subagents.test.js.map +1 -0
  253. package/dist/src/backend/services/session/service/lifecycle/session.config.service.d.ts.map +1 -1
  254. package/dist/src/backend/services/session/service/lifecycle/session.config.service.js +8 -4
  255. package/dist/src/backend/services/session/service/lifecycle/session.config.service.js.map +1 -1
  256. package/dist/src/backend/services/session/service/lifecycle/session.config.service.test.js +58 -5
  257. package/dist/src/backend/services/session/service/lifecycle/session.config.service.test.js.map +1 -1
  258. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts +4 -0
  259. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.d.ts.map +1 -1
  260. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js +154 -53
  261. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.js.map +1 -1
  262. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js +220 -8
  263. package/dist/src/backend/services/session/service/lifecycle/session.lifecycle.service.test.js.map +1 -1
  264. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js +45 -7
  265. package/dist/src/backend/services/session/service/lifecycle/session.service.test.js.map +1 -1
  266. package/dist/src/backend/services/session/service/session-domain.service.d.ts.map +1 -1
  267. package/dist/src/backend/services/session/service/session-domain.service.js +1 -0
  268. package/dist/src/backend/services/session/service/session-domain.service.js.map +1 -1
  269. package/dist/src/backend/services/session/service/store/session-store.types.d.ts +1 -1
  270. package/dist/src/backend/services/session/service/store/session-store.types.d.ts.map +1 -1
  271. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.d.ts +2 -0
  272. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.d.ts.map +1 -0
  273. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.js +5 -0
  274. package/dist/src/backend/services/session/service/voice/voice-mode-instructions.js.map +1 -0
  275. package/dist/src/backend/services/session/service/voice/voice-narration.service.d.ts +28 -0
  276. package/dist/src/backend/services/session/service/voice/voice-narration.service.d.ts.map +1 -0
  277. package/dist/src/backend/services/session/service/voice/voice-narration.service.js +431 -0
  278. package/dist/src/backend/services/session/service/voice/voice-narration.service.js.map +1 -0
  279. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.d.ts +2 -0
  280. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.d.ts.map +1 -0
  281. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.js +536 -0
  282. package/dist/src/backend/services/session/service/voice/voice-narration.service.test.js.map +1 -0
  283. package/dist/src/backend/services/settings/resources/user-settings.accessor.d.ts +6 -0
  284. package/dist/src/backend/services/settings/resources/user-settings.accessor.d.ts.map +1 -1
  285. package/dist/src/backend/services/settings/resources/user-settings.accessor.js +46 -17
  286. package/dist/src/backend/services/settings/resources/user-settings.accessor.js.map +1 -1
  287. package/dist/src/backend/services/settings/service/user-settings.service.d.ts +6 -0
  288. package/dist/src/backend/services/settings/service/user-settings.service.d.ts.map +1 -1
  289. package/dist/src/backend/services/settings/service/user-settings.service.js.map +1 -1
  290. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js +12 -0
  291. package/dist/src/backend/services/workspace/service/lifecycle/creation.service.test.js.map +1 -1
  292. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.d.ts.map +1 -1
  293. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js +9 -12
  294. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.js.map +1 -1
  295. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js +5 -4
  296. package/dist/src/backend/services/workspace/service/worktree/worktree-lifecycle.service.test.js.map +1 -1
  297. package/dist/src/backend/trpc/admin.trpc.d.ts +10 -0
  298. package/dist/src/backend/trpc/admin.trpc.d.ts.map +1 -1
  299. package/dist/src/backend/trpc/index.d.ts +631 -4
  300. package/dist/src/backend/trpc/index.d.ts.map +1 -1
  301. package/dist/src/backend/trpc/index.js +2 -0
  302. package/dist/src/backend/trpc/index.js.map +1 -1
  303. package/dist/src/backend/trpc/session.router.test.js +193 -2
  304. package/dist/src/backend/trpc/session.router.test.js.map +1 -1
  305. package/dist/src/backend/trpc/session.trpc.d.ts +539 -0
  306. package/dist/src/backend/trpc/session.trpc.d.ts.map +1 -1
  307. package/dist/src/backend/trpc/session.trpc.js +53 -0
  308. package/dist/src/backend/trpc/session.trpc.js.map +1 -1
  309. package/dist/src/backend/trpc/user-settings.router.test.js +117 -6
  310. package/dist/src/backend/trpc/user-settings.router.test.js.map +1 -1
  311. package/dist/src/backend/trpc/user-settings.trpc.d.ts +16 -4
  312. package/dist/src/backend/trpc/user-settings.trpc.d.ts.map +1 -1
  313. package/dist/src/backend/trpc/user-settings.trpc.js +25 -2
  314. package/dist/src/backend/trpc/user-settings.trpc.js.map +1 -1
  315. package/dist/src/backend/trpc/voice.trpc.d.ts +67 -0
  316. package/dist/src/backend/trpc/voice.trpc.d.ts.map +1 -0
  317. package/dist/src/backend/trpc/voice.trpc.js +156 -0
  318. package/dist/src/backend/trpc/voice.trpc.js.map +1 -0
  319. package/dist/src/backend/trpc/voice.trpc.test.d.ts +2 -0
  320. package/dist/src/backend/trpc/voice.trpc.test.d.ts.map +1 -0
  321. package/dist/src/backend/trpc/voice.trpc.test.js +259 -0
  322. package/dist/src/backend/trpc/voice.trpc.test.js.map +1 -0
  323. package/dist/src/shared/acp-protocol/index.d.ts +2 -0
  324. package/dist/src/shared/acp-protocol/index.d.ts.map +1 -1
  325. package/dist/src/shared/acp-protocol/index.js +2 -0
  326. package/dist/src/shared/acp-protocol/index.js.map +1 -1
  327. package/dist/src/shared/acp-protocol/protocol/queued.d.ts +1 -0
  328. package/dist/src/shared/acp-protocol/protocol/queued.d.ts.map +1 -1
  329. package/dist/src/shared/acp-protocol/protocol/websocket.d.ts +7 -0
  330. package/dist/src/shared/acp-protocol/protocol/websocket.d.ts.map +1 -1
  331. package/dist/src/shared/acp-protocol/protocol/websocket.js +1 -0
  332. package/dist/src/shared/acp-protocol/protocol/websocket.js.map +1 -1
  333. package/dist/src/shared/acp-protocol/session-update-translator.d.ts +39 -0
  334. package/dist/src/shared/acp-protocol/session-update-translator.d.ts.map +1 -0
  335. package/dist/src/shared/acp-protocol/session-update-translator.js +356 -0
  336. package/dist/src/shared/acp-protocol/session-update-translator.js.map +1 -0
  337. package/dist/src/shared/acp-protocol/subagents.d.ts +1175 -0
  338. package/dist/src/shared/acp-protocol/subagents.d.ts.map +1 -0
  339. package/dist/src/shared/acp-protocol/subagents.js +259 -0
  340. package/dist/src/shared/acp-protocol/subagents.js.map +1 -0
  341. package/dist/src/shared/core/enums.d.ts +1 -0
  342. package/dist/src/shared/core/enums.d.ts.map +1 -1
  343. package/dist/src/shared/core/enums.js +1 -0
  344. package/dist/src/shared/core/enums.js.map +1 -1
  345. package/dist/src/shared/deepgram-voices.d.ts +12 -0
  346. package/dist/src/shared/deepgram-voices.d.ts.map +1 -0
  347. package/dist/src/shared/deepgram-voices.js +51 -0
  348. package/dist/src/shared/deepgram-voices.js.map +1 -0
  349. package/dist/src/shared/schemas/export-data.schema.d.ts +10 -0
  350. package/dist/src/shared/schemas/export-data.schema.d.ts.map +1 -1
  351. package/dist/src/shared/schemas/export-data.schema.js +19 -0
  352. package/dist/src/shared/schemas/export-data.schema.js.map +1 -1
  353. package/dist/src/shared/voice-vad.d.ts +11 -0
  354. package/dist/src/shared/voice-vad.d.ts.map +1 -0
  355. package/dist/src/shared/voice-vad.js +19 -0
  356. package/dist/src/shared/voice-vad.js.map +1 -0
  357. package/dist/src/shared/websocket/chat-message.schema.d.ts +1 -0
  358. package/dist/src/shared/websocket/chat-message.schema.d.ts.map +1 -1
  359. package/dist/src/shared/websocket/chat-message.schema.js +1 -0
  360. package/dist/src/shared/websocket/chat-message.schema.js.map +1 -1
  361. package/dist/src/shared/websocket/voice-message.schema.d.ts +25 -0
  362. package/dist/src/shared/websocket/voice-message.schema.d.ts.map +1 -0
  363. package/dist/src/shared/websocket/voice-message.schema.js +14 -0
  364. package/dist/src/shared/websocket/voice-message.schema.js.map +1 -0
  365. package/dist/src/shared/workspace-snapshot.d.ts +5 -5
  366. package/dist/src/test-utils/application-graph.d.ts.map +1 -1
  367. package/dist/src/test-utils/application-graph.js +7 -1
  368. package/dist/src/test-utils/application-graph.js.map +1 -1
  369. package/dist/tsconfig.backend.tsbuildinfo +1 -1
  370. package/package.json +6 -6
  371. package/prisma/migrations/20260802152257_add_voice_mode_settings/migration.sql +34 -0
  372. package/prisma/migrations/20260802200414_add_voice_tts_model_and_speed/migration.sql +36 -0
  373. package/prisma/migrations/20260807222320_voice_vad_aggressiveness_settings/migration.sql +38 -0
  374. package/prisma/schema.prisma +9 -0
  375. package/dist/client/assets/architectureDiagram-ZJ3FMSHR-BZgeaNrI.js +0 -36
  376. package/dist/client/assets/channel-zAL33ya-.js +0 -1
  377. package/dist/client/assets/classDiagram-OUVF2IWQ-Dksz7rAA.js +0 -1
  378. package/dist/client/assets/classDiagram-v2-EOCWNBFH-Dksz7rAA.js +0 -1
  379. package/dist/client/assets/diagram-WEI45ONY-up5rQ6My.js +0 -41
  380. package/dist/client/assets/index-BZQlu-dZ.js +0 -694
  381. package/dist/client/assets/index-CwfNzqG5.css +0 -1
  382. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-DA02HYvU.js +0 -1
  383. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CbfcpXpQ.js +0 -8
@@ -1,4 +1,5 @@
1
1
  import type { RequestPermissionRequest, SessionNotification } from '@agentclientprotocol/sdk';
2
+ import type { SubagentsChangedParams } from '../../../../../shared/acp-protocol/subagents.js';
2
3
  export type AcpSessionUpdateEvent = {
3
4
  type: 'acp_session_update';
4
5
  update: SessionNotification['update'];
@@ -8,5 +9,10 @@ export type AcpPermissionRequestEvent = {
8
9
  requestId: string;
9
10
  params: RequestPermissionRequest;
10
11
  };
11
- export type AcpRuntimeEvent = AcpSessionUpdateEvent | AcpPermissionRequestEvent;
12
+ export type AcpSubagentsChangedEvent = {
13
+ type: 'acp_subagents_changed';
14
+ subagentId: string;
15
+ change: SubagentsChangedParams['change'];
16
+ };
17
+ export type AcpRuntimeEvent = AcpSessionUpdateEvent | AcpPermissionRequestEvent | AcpSubagentsChangedEvent;
12
18
  //# sourceMappingURL=acp-runtime-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"acp-runtime-events.d.ts","sourceRoot":"","sources":["../../../../../../../src/backend/services/session/service/acp/acp-runtime-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE9F,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG,yBAAyB,CAAC"}
1
+ {"version":3,"file":"acp-runtime-events.d.ts","sourceRoot":"","sources":["../../../../../../../src/backend/services/session/service/acp/acp-runtime-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,qBAAqB,GACrB,yBAAyB,GACzB,wBAAwB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { type ContentBlock, type SessionConfigOption } from '@agentclientprotocol/sdk';
2
+ import { type SubagentBrowseCapability, type SubagentListParams, type SubagentListResult, type SubagentReadParams, type SubagentReadResult } from '../../../../../shared/acp-protocol/subagents.js';
2
3
  import type { AcpPermissionBridge } from './acp-permission-bridge.js';
3
4
  import { AcpProcessHandle } from './acp-process-handle.js';
4
5
  import type { AcpRuntimeEvent } from './acp-runtime-events.js';
@@ -7,6 +8,9 @@ export declare class PromptTimeoutError extends Error {
7
8
  readonly timeoutMs: number;
8
9
  constructor(sessionId: string, timeoutMs: number);
9
10
  }
11
+ export declare class AcpBrowseSessionUnavailableError extends Error {
12
+ constructor(message: string, options?: ErrorOptions);
13
+ }
10
14
  export type AcpRuntimeCreatedCallback = (sessionId: string, client: AcpProcessHandle, context: {
11
15
  workspaceId: string;
12
16
  workingDir: string;
@@ -21,8 +25,10 @@ export type AcpRuntimeEventHandlers = {
21
25
  };
22
26
  export declare class AcpRuntimeManager {
23
27
  private readonly sessions;
28
+ private readonly browseOnlySessions;
24
29
  private readonly pendingCreation;
25
30
  private readonly stoppingInProgress;
31
+ private readonly stopOperations;
26
32
  private readonly managedStopChildren;
27
33
  private readonly creationLocks;
28
34
  private readonly lockRefCounts;
@@ -44,11 +50,20 @@ export declare class AcpRuntimeManager {
44
50
  setOnClientCreated(callback: AcpRuntimeCreatedCallback): void;
45
51
  isStopInProgress(sessionId: string): boolean;
46
52
  getClient(sessionId: string): AcpProcessHandle | undefined;
53
+ getBrowseClient(sessionId: string): AcpProcessHandle | undefined;
54
+ isBrowseOnlySession(sessionId: string): boolean;
47
55
  getPendingClient(sessionId: string): Promise<AcpProcessHandle> | undefined;
56
+ getSubagentBrowseCapability(sessionId: string): SubagentBrowseCapability | null;
57
+ listSubagents(sessionId: string, input: Omit<SubagentListParams, 'sessionId'>): Promise<SubagentListResult>;
58
+ readSubagentTranscript(sessionId: string, input: Omit<SubagentReadParams, 'sessionId'>): Promise<SubagentReadResult>;
59
+ private requireSubagentBrowseHandle;
48
60
  getOrCreateClient(sessionId: string, options: AcpClientOptions, handlers: AcpRuntimeEventHandlers, context: {
49
61
  workspaceId: string;
50
62
  workingDir: string;
51
63
  }): Promise<AcpProcessHandle>;
64
+ private promoteForActiveUse;
65
+ private recordClientPurpose;
66
+ private clearBrowseOnlyPurposeIfUnused;
52
67
  private createClient;
53
68
  private cleanupFailedClientCreation;
54
69
  private abortClientCreationIfStopping;
@@ -63,14 +78,17 @@ export declare class AcpRuntimeManager {
63
78
  private notifyClientCreated;
64
79
  private wireChildErrorHandler;
65
80
  private createOrResumeSession;
81
+ private tryLoadStoredSession;
82
+ private logLoadSessionFailure;
66
83
  stopClient(sessionId: string): Promise<void>;
84
+ private stopClientOnce;
67
85
  sendPrompt(sessionId: string, prompt: ContentBlock[], timeoutMs?: number): Promise<{
68
86
  stopReason: string;
69
87
  }>;
70
88
  private escalatePromptTimeout;
71
89
  private isCurrentPromptTimeoutHandle;
72
90
  private clearPromptInFlight;
73
- cancelPrompt(sessionId: string): Promise<void>;
91
+ cancelPrompt(sessionId: string): Promise<boolean>;
74
92
  setConfigOption(sessionId: string, configId: string, value: string): Promise<SessionConfigOption[]>;
75
93
  setSessionMode(sessionId: string, modeId: string): Promise<SessionConfigOption[]>;
76
94
  setSessionModel(sessionId: string, modelId: string): Promise<SessionConfigOption[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"acp-runtime-manager.d.ts","sourceRoot":"","sources":["../../../../../../../src/backend/services/session/service/acp/acp-runtime-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp-runtime-manager.d.ts","sourceRoot":"","sources":["../../../../../../../src/backend/services/session/service/acp/acp-runtime-manager.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,9 @@ import { spawn } from 'node:child_process';
2
2
  import { Readable, Writable } from 'node:stream';
3
3
  import { ClientSideConnection, ndJsonStream, PROTOCOL_VERSION, } from '@agentclientprotocol/sdk';
4
4
  import pLimit from 'p-limit';
5
+ import { z } from 'zod';
5
6
  import { createLogger, getCurrentProcessEnv } from '../../../../../backend/services/logger.service.js';
7
+ import { SUBAGENTS_LIST_METHOD, SUBAGENTS_READ_METHOD, subagentListParamsSchema, subagentListResultSchema, subagentReadParamsSchema, subagentReadResultSchema, } from '../../../../../shared/acp-protocol/subagents.js';
6
8
  import { AcpClientHandler } from './acp-client-handler.js';
7
9
  import { AcpProcessHandle } from './acp-process-handle.js';
8
10
  import { createAcpSpawnError, hasUsableWorkingDir, resolveAcpBinary, resolveInternalCodexAcpSpawnCommand, withTimeout, } from './acp-runtime-spawn.js';
@@ -17,6 +19,20 @@ export class PromptTimeoutError extends Error {
17
19
  this.name = 'PromptTimeoutError';
18
20
  }
19
21
  }
22
+ export class AcpBrowseSessionUnavailableError extends Error {
23
+ constructor(message, options) {
24
+ super(message, options);
25
+ this.name = 'AcpBrowseSessionUnavailableError';
26
+ }
27
+ }
28
+ class AcpSubagentBrowseError extends Error {
29
+ code;
30
+ constructor(code, message, options) {
31
+ super(message, options);
32
+ this.code = code;
33
+ this.name = 'AcpSubagentBrowseError';
34
+ }
35
+ }
20
36
  function resolveAutoApprovePolicy(preset) {
21
37
  if (preset === 'YOLO' || preset === 'RELAXED') {
22
38
  return 'all';
@@ -24,9 +40,20 @@ function resolveAutoApprovePolicy(preset) {
24
40
  return 'none';
25
41
  }
26
42
  const DEFAULT_ACP_STARTUP_TIMEOUT_MS = 30_000;
43
+ function getAcpErrorMetadata(error) {
44
+ const code = typeof error.code === 'number' || typeof error.code === 'string' ? error.code : undefined;
45
+ return {
46
+ ...(code !== undefined ? { code } : {}),
47
+ ...(typeof error.data !== 'undefined' ? { data: error.data } : {}),
48
+ };
49
+ }
27
50
  function getAcpErrorLogDetails(error) {
28
51
  if (error instanceof Error) {
29
- return { message: error.message };
52
+ const maybe = error;
53
+ return {
54
+ message: error.message,
55
+ ...getAcpErrorMetadata(maybe),
56
+ };
30
57
  }
31
58
  if (typeof error === 'object' && error !== null) {
32
59
  const maybe = error;
@@ -40,11 +67,9 @@ function getAcpErrorLogDetails(error) {
40
67
  return String(error);
41
68
  }
42
69
  })();
43
- const code = typeof maybe.code === 'number' || typeof maybe.code === 'string' ? maybe.code : undefined;
44
70
  return {
45
71
  message,
46
- ...(code !== undefined ? { code } : {}),
47
- ...(typeof maybe.data !== 'undefined' ? { data: maybe.data } : {}),
72
+ ...getAcpErrorMetadata(maybe),
48
73
  };
49
74
  }
50
75
  return { message: String(error) };
@@ -53,6 +78,48 @@ function isMethodNotFoundError(error) {
53
78
  const details = getAcpErrorLogDetails(error);
54
79
  return details.code === -32_601 || details.message.includes('Method not found');
55
80
  }
81
+ function subagentBrowseMessage(operation, kind) {
82
+ const subject = operation === 'list' ? 'Sub-agent list' : 'Sub-agent transcript';
83
+ if (kind === 'invalid') {
84
+ return `Invalid ${subject.toLowerCase()} request.`;
85
+ }
86
+ if (kind === 'not_found') {
87
+ return `${subject} not found for this session.`;
88
+ }
89
+ if (kind === 'protocol') {
90
+ return `${subject} is unavailable because the provider returned an invalid response.`;
91
+ }
92
+ return `${subject} request failed.`;
93
+ }
94
+ function normalizeSubagentBrowseError(error, operation) {
95
+ if (error instanceof AcpSubagentBrowseError) {
96
+ return error;
97
+ }
98
+ if (error instanceof z.ZodError) {
99
+ return new AcpSubagentBrowseError('PRECONDITION_FAILED', subagentBrowseMessage(operation, 'protocol'), { cause: error });
100
+ }
101
+ const details = getAcpErrorLogDetails(error);
102
+ if (details.code === -32_602) {
103
+ return new AcpSubagentBrowseError('INVALID_INPUT', subagentBrowseMessage(operation, 'invalid'), { cause: error });
104
+ }
105
+ if (details.code === -32_002) {
106
+ return new AcpSubagentBrowseError('NOT_FOUND', subagentBrowseMessage(operation, 'not_found'), {
107
+ cause: error,
108
+ });
109
+ }
110
+ if (details.code === -32_601) {
111
+ return new AcpSubagentBrowseError('PRECONDITION_FAILED', 'Sub-agent browsing is unavailable for this session.', { cause: error });
112
+ }
113
+ if (details.code === -32_000) {
114
+ return new AcpSubagentBrowseError('PRECONDITION_FAILED', 'Provider authentication is required for sub-agent browsing.', { cause: error });
115
+ }
116
+ if (details.code === -32_603 || details.code === -32_600 || details.code === -32_700) {
117
+ return new AcpSubagentBrowseError('PRECONDITION_FAILED', subagentBrowseMessage(operation, 'protocol'), { cause: error });
118
+ }
119
+ return new AcpSubagentBrowseError('INTERNAL_ERROR', subagentBrowseMessage(operation, 'failed'), {
120
+ cause: error,
121
+ });
122
+ }
56
123
  async function raceWithSoftTimeout(promise, timeoutMs) {
57
124
  let timeout;
58
125
  const timeoutPromise = new Promise((resolve) => {
@@ -70,8 +137,10 @@ async function raceWithSoftTimeout(promise, timeoutMs) {
70
137
  }
71
138
  export class AcpRuntimeManager {
72
139
  sessions = new Map();
140
+ browseOnlySessions = new Set();
73
141
  pendingCreation = new Map();
74
142
  stoppingInProgress = new Set();
143
+ stopOperations = new Map();
75
144
  managedStopChildren = new WeakSet();
76
145
  creationLocks = new Map();
77
146
  lockRefCounts = new Map();
@@ -103,12 +172,70 @@ export class AcpRuntimeManager {
103
172
  return this.stoppingInProgress.has(sessionId);
104
173
  }
105
174
  getClient(sessionId) {
175
+ if (this.browseOnlySessions.has(sessionId)) {
176
+ return undefined;
177
+ }
178
+ return this.getBrowseClient(sessionId);
179
+ }
180
+ getBrowseClient(sessionId) {
106
181
  const handle = this.sessions.get(sessionId);
107
182
  return handle?.isRunning() ? handle : undefined;
108
183
  }
184
+ isBrowseOnlySession(sessionId) {
185
+ return this.browseOnlySessions.has(sessionId);
186
+ }
109
187
  getPendingClient(sessionId) {
110
188
  return this.pendingCreation.get(sessionId);
111
189
  }
190
+ getSubagentBrowseCapability(sessionId) {
191
+ return this.getBrowseClient(sessionId)?.getSubagentBrowseCapability() ?? null;
192
+ }
193
+ async listSubagents(sessionId, input) {
194
+ const handle = this.requireSubagentBrowseHandle(sessionId);
195
+ const parsedParams = subagentListParamsSchema.safeParse({
196
+ ...input,
197
+ sessionId: handle.providerSessionId,
198
+ });
199
+ if (!parsedParams.success) {
200
+ throw new AcpSubagentBrowseError('INVALID_INPUT', subagentBrowseMessage('list', 'invalid'), {
201
+ cause: parsedParams.error,
202
+ });
203
+ }
204
+ try {
205
+ const response = await handle.connection.extMethod(SUBAGENTS_LIST_METHOD, parsedParams.data);
206
+ return subagentListResultSchema.parse(response);
207
+ }
208
+ catch (error) {
209
+ throw normalizeSubagentBrowseError(error, 'list');
210
+ }
211
+ }
212
+ async readSubagentTranscript(sessionId, input) {
213
+ const handle = this.requireSubagentBrowseHandle(sessionId);
214
+ const parsedParams = subagentReadParamsSchema.safeParse({
215
+ ...input,
216
+ sessionId: handle.providerSessionId,
217
+ });
218
+ if (!parsedParams.success) {
219
+ throw new AcpSubagentBrowseError('INVALID_INPUT', subagentBrowseMessage('transcript', 'invalid'), { cause: parsedParams.error });
220
+ }
221
+ try {
222
+ const response = await handle.connection.extMethod(SUBAGENTS_READ_METHOD, parsedParams.data);
223
+ return subagentReadResultSchema.parse(response);
224
+ }
225
+ catch (error) {
226
+ throw normalizeSubagentBrowseError(error, 'transcript');
227
+ }
228
+ }
229
+ requireSubagentBrowseHandle(sessionId) {
230
+ const handle = this.getBrowseClient(sessionId);
231
+ if (!handle) {
232
+ throw new AcpSubagentBrowseError('PRECONDITION_FAILED', 'Sub-agent browsing requires a running parent session.');
233
+ }
234
+ if (!handle.getSubagentBrowseCapability()) {
235
+ throw new AcpSubagentBrowseError('PRECONDITION_FAILED', 'Sub-agent browsing is unavailable for this session.');
236
+ }
237
+ return handle;
238
+ }
112
239
  getOrCreateClient(sessionId, options, handlers, context) {
113
240
  if (this.isShuttingDown) {
114
241
  return Promise.reject(this.createShutdownError(sessionId));
@@ -126,17 +253,21 @@ export class AcpRuntimeManager {
126
253
  if (this.isShuttingDown) {
127
254
  throw this.createShutdownError(sessionId);
128
255
  }
129
- const existing = this.sessions.get(sessionId);
256
+ const existing = this.getBrowseClient(sessionId);
130
257
  if (existing?.isRunning()) {
258
+ this.promoteForActiveUse(sessionId, options);
131
259
  logger.debug('Returning existing running ACP client', { sessionId });
132
260
  return existing;
133
261
  }
134
262
  const pending = this.pendingCreation.get(sessionId);
135
263
  if (pending) {
136
264
  logger.debug('Waiting for pending ACP client creation', { sessionId });
137
- return await pending;
265
+ const handle = await pending;
266
+ this.promoteForActiveUse(sessionId, options);
267
+ return handle;
138
268
  }
139
269
  logger.info('Creating new ACP client', { sessionId, provider: options.provider });
270
+ this.recordClientPurpose(sessionId, options);
140
271
  const createPromise = this.createClient(sessionId, options, handlers, context);
141
272
  this.pendingCreation.set(sessionId, createPromise);
142
273
  try {
@@ -144,6 +275,7 @@ export class AcpRuntimeManager {
144
275
  }
145
276
  finally {
146
277
  this.pendingCreation.delete(sessionId);
278
+ this.clearBrowseOnlyPurposeIfUnused(sessionId);
147
279
  }
148
280
  }
149
281
  finally {
@@ -159,6 +291,23 @@ export class AcpRuntimeManager {
159
291
  }
160
292
  });
161
293
  }
294
+ promoteForActiveUse(sessionId, options) {
295
+ if (options.purpose !== 'browse') {
296
+ this.browseOnlySessions.delete(sessionId);
297
+ }
298
+ }
299
+ recordClientPurpose(sessionId, options) {
300
+ if (options.purpose === 'browse') {
301
+ this.browseOnlySessions.add(sessionId);
302
+ return;
303
+ }
304
+ this.browseOnlySessions.delete(sessionId);
305
+ }
306
+ clearBrowseOnlyPurposeIfUnused(sessionId) {
307
+ if (!(this.sessions.has(sessionId) || this.pendingCreation.has(sessionId))) {
308
+ this.browseOnlySessions.delete(sessionId);
309
+ }
310
+ }
162
311
  async createClient(sessionId, options, handlers, context) {
163
312
  if (this.isShuttingDown) {
164
313
  throw this.createShutdownError(sessionId);
@@ -309,6 +458,7 @@ export class AcpRuntimeManager {
309
458
  });
310
459
  handle.configOptions = sessionInfo.configOptions;
311
460
  this.sessions.set(sessionId, handle);
461
+ this.recordClientPurpose(sessionId, options);
312
462
  this.wireChildExitHandler(sessionId, child, handlers);
313
463
  await this.notifyClientCreated(sessionId, handle, context, handlers);
314
464
  return handle;
@@ -433,19 +583,23 @@ export class AcpRuntimeManager {
433
583
  wireChildExitHandler(sessionId, child, handlers) {
434
584
  child.on('exit', async (code) => {
435
585
  if (this.shouldSkipChildExitHandler(sessionId, child, code)) {
586
+ this.clearBrowseOnlyPurposeIfUnused(sessionId);
436
587
  return;
437
588
  }
438
589
  this.pendingCreation.delete(sessionId);
439
- if (handlers.onExit) {
440
- try {
590
+ try {
591
+ if (handlers.onExit) {
441
592
  await handlers.onExit(sessionId, code);
442
593
  }
443
- catch (error) {
444
- logger.warn('Failed to handle ACP exit event', {
445
- sessionId,
446
- error: error instanceof Error ? error.message : String(error),
447
- });
448
- }
594
+ }
595
+ catch (error) {
596
+ logger.warn('Failed to handle ACP exit event', {
597
+ sessionId,
598
+ error: error instanceof Error ? error.message : String(error),
599
+ });
600
+ }
601
+ finally {
602
+ this.clearBrowseOnlyPurposeIfUnused(sessionId);
449
603
  }
450
604
  });
451
605
  }
@@ -513,42 +667,21 @@ export class AcpRuntimeManager {
513
667
  }
514
668
  async createOrResumeSession(connection, sessionId, options, agentCapabilities) {
515
669
  const storedId = options.resumeProviderSessionId;
516
- const canResume = agentCapabilities.loadSession === true && !!storedId;
670
+ const browseOnly = options.purpose === 'browse';
517
671
  const mcpServers = (options.mcpServers ?? []).map((s) => ({
518
672
  name: s.name,
519
673
  command: s.command,
520
674
  args: s.args,
521
675
  env: Object.entries(s.env).map(([name, value]) => ({ name, value })),
522
676
  }));
523
- if (canResume && storedId) {
524
- let loadResult = null;
525
- try {
526
- loadResult = await connection.loadSession({
527
- sessionId: storedId,
528
- cwd: options.workingDir,
529
- mcpServers,
530
- });
531
- }
532
- catch (error) {
533
- const details = getAcpErrorLogDetails(error);
534
- logger.warn('loadSession failed, falling back to newSession', {
535
- sessionId,
536
- storedProviderSessionId: storedId,
537
- error: details.message,
538
- ...(details.code !== undefined ? { errorCode: details.code } : {}),
539
- ...(typeof details.data !== 'undefined' ? { errorData: details.data } : {}),
540
- });
541
- }
542
- if (loadResult !== null) {
543
- logger.info('ACP session resumed via loadSession', {
544
- sessionId,
545
- providerSessionId: storedId,
546
- });
547
- return {
548
- providerSessionId: storedId,
549
- configOptions: requireSessionConfigOptions(options.provider, 'loadSession', loadResult),
550
- };
551
- }
677
+ const resumed = await this.tryLoadStoredSession(connection, sessionId, options, agentCapabilities, mcpServers);
678
+ if (resumed) {
679
+ return resumed;
680
+ }
681
+ if (browseOnly) {
682
+ throw new AcpBrowseSessionUnavailableError(storedId
683
+ ? 'Provider does not support restoring this session for sub-agent browsing.'
684
+ : 'Stored provider session is required for sub-agent browsing.');
552
685
  }
553
686
  const sessionResult = await connection.newSession({
554
687
  cwd: options.workingDir,
@@ -563,11 +696,62 @@ export class AcpRuntimeManager {
563
696
  configOptions: requireSessionConfigOptions(options.provider, 'newSession', sessionResult),
564
697
  };
565
698
  }
566
- async stopClient(sessionId) {
567
- if (this.stoppingInProgress.has(sessionId)) {
699
+ async tryLoadStoredSession(connection, sessionId, options, agentCapabilities, mcpServers) {
700
+ const storedId = options.resumeProviderSessionId;
701
+ if (!(agentCapabilities.loadSession === true && storedId)) {
702
+ return null;
703
+ }
704
+ let loadResult;
705
+ try {
706
+ loadResult = await connection.loadSession({
707
+ sessionId: storedId,
708
+ cwd: options.workingDir,
709
+ mcpServers,
710
+ });
711
+ }
712
+ catch (error) {
713
+ this.logLoadSessionFailure(sessionId, storedId, error, options.purpose === 'browse');
714
+ if (options.purpose === 'browse') {
715
+ throw new AcpBrowseSessionUnavailableError('Provider failed to restore this session for sub-agent browsing.', { cause: error });
716
+ }
717
+ return null;
718
+ }
719
+ logger.info('ACP session resumed via loadSession', {
720
+ sessionId,
721
+ providerSessionId: storedId,
722
+ });
723
+ return {
724
+ providerSessionId: storedId,
725
+ configOptions: requireSessionConfigOptions(options.provider, 'loadSession', loadResult),
726
+ };
727
+ }
728
+ logLoadSessionFailure(sessionId, storedProviderSessionId, error, browseOnly) {
729
+ const details = getAcpErrorLogDetails(error);
730
+ logger.warn(browseOnly ? 'Browse-only loadSession failed' : 'loadSession failed', {
731
+ sessionId,
732
+ storedProviderSessionId,
733
+ error: details.message,
734
+ ...(details.code !== undefined ? { errorCode: details.code } : {}),
735
+ ...(typeof details.data !== 'undefined' ? { errorData: details.data } : {}),
736
+ ...(!browseOnly ? { fallback: 'newSession' } : {}),
737
+ });
738
+ }
739
+ stopClient(sessionId) {
740
+ const existingStop = this.stopOperations.get(sessionId);
741
+ if (existingStop) {
568
742
  logger.debug('ACP session stop already in progress', { sessionId });
569
- return;
743
+ return existingStop;
570
744
  }
745
+ let trackedStop;
746
+ trackedStop = this.stopClientOnce(sessionId).finally(() => {
747
+ if (this.stopOperations.get(sessionId) === trackedStop) {
748
+ this.stopOperations.delete(sessionId);
749
+ }
750
+ });
751
+ this.stopOperations.set(sessionId, trackedStop);
752
+ return trackedStop;
753
+ }
754
+ async stopClientOnce(sessionId) {
571
755
  const pendingCreation = this.pendingCreation.get(sessionId);
572
756
  const initialHandle = this.sessions.get(sessionId);
573
757
  if (!(initialHandle || pendingCreation)) {
@@ -619,6 +803,7 @@ export class AcpRuntimeManager {
619
803
  const current = this.sessions.get(sessionId);
620
804
  if (current === stoppedHandle) {
621
805
  this.sessions.delete(sessionId);
806
+ this.browseOnlySessions.delete(sessionId);
622
807
  }
623
808
  }
624
809
  }
@@ -709,13 +894,15 @@ export class AcpRuntimeManager {
709
894
  async cancelPrompt(sessionId) {
710
895
  const handle = this.sessions.get(sessionId);
711
896
  if (!handle) {
712
- return;
897
+ return false;
713
898
  }
714
- if (handle.isPromptInFlight) {
715
- await handle.connection.cancel({
716
- sessionId: handle.providerSessionId,
717
- });
899
+ if (!handle.isPromptInFlight) {
900
+ return false;
718
901
  }
902
+ await handle.connection.cancel({
903
+ sessionId: handle.providerSessionId,
904
+ });
905
+ return true;
719
906
  }
720
907
  async setConfigOption(sessionId, configId, value) {
721
908
  const handle = this.sessions.get(sessionId);
@@ -832,8 +1019,7 @@ export class AcpRuntimeManager {
832
1019
  return this.sessions.entries();
833
1020
  }
834
1021
  isSessionRunning(sessionId) {
835
- const handle = this.sessions.get(sessionId);
836
- return handle?.isRunning() ?? false;
1022
+ return this.getClient(sessionId) !== undefined;
837
1023
  }
838
1024
  isSessionWorking(sessionId) {
839
1025
  const handle = this.sessions.get(sessionId);