@zubriq/code 0.19.8-1 → 0.19.9-1

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 (243) hide show
  1. package/dist/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
  2. package/dist/bundled/qc-helper/docs/features/channels/overview.md +23 -12
  3. package/dist/bundled/qc-helper/docs/features/channels/plugins.md +1 -0
  4. package/dist/bundled/qc-helper/docs/features/channels/wecom.md +111 -0
  5. package/dist/bundled/qc-helper/docs/features/hooks.md +36 -34
  6. package/dist/bundled/qc-helper/docs/features/memory.md +1 -1
  7. package/dist/bundled/qc-helper/docs/qwen-serve.md +17 -10
  8. package/dist/bundled/review/SKILL.md +6 -2
  9. package/dist/chunks/{MaxSizedBox-OWTCJQNO.js → MaxSizedBox-W6SAJMJC.js} +13 -11
  10. package/dist/chunks/{StandaloneSessionPicker-6NGEQFBH.js → StandaloneSessionPicker-YBKZZKIA.js} +28 -23
  11. package/dist/chunks/{acpAgent-XPRWSNOW.js → acpAgent-SQJQBOTS.js} +110 -80
  12. package/dist/chunks/{agent-TB6S4VXU.js → agent-QU7Q2RZN.js} +8 -8
  13. package/dist/chunks/{agent-headless-R3XYK5TT.js → agent-headless-PBHLWHND.js} +8 -8
  14. package/dist/chunks/{anthropicContentGenerator-FZQAEMYK.js → anthropicContentGenerator-52G6ZA3D.js} +31 -4
  15. package/dist/chunks/{artifact-tool-H2TNPNP5.js → artifact-tool-D233YJFH.js} +25 -6
  16. package/dist/chunks/{bridge-HVRG6SMU.js → bridge-LJLLDUMW.js} +17 -14
  17. package/dist/chunks/{ca-HCMB2I54.js → ca-MKD32FQL.js} +26 -1
  18. package/dist/chunks/{channel-worker-supervisor-B7MSMB5K.js → channel-worker-supervisor-NZQUOEFJ.js} +3 -3
  19. package/dist/chunks/{chunk-YRM6BC6H.js → chunk-27AYMAL6.js} +506 -63
  20. package/dist/chunks/{chunk-536GZ6UF.js → chunk-2MDC5WDB.js} +17 -111
  21. package/dist/chunks/{chunk-H3D6XAOL.js → chunk-2PRSBVPI.js} +3 -3
  22. package/dist/chunks/chunk-332PWN27.js +19 -0
  23. package/dist/chunks/{chunk-FVMWEHWU.js → chunk-3B26UVCX.js} +114 -12
  24. package/dist/chunks/{chunk-ZM5BPDXV.js → chunk-3F22JT4E.js} +1 -1
  25. package/dist/chunks/{chunk-W6RH6KHR.js → chunk-3GPVYALM.js} +4 -2
  26. package/dist/chunks/{chunk-G7ZG7CA6.js → chunk-3UP777ZS.js} +8 -7
  27. package/dist/chunks/{chunk-PA7QS4X5.js → chunk-43W4YSO6.js} +1 -12
  28. package/dist/chunks/{chunk-5EB2HK3X.js → chunk-4IK56VLC.js} +1 -1
  29. package/dist/chunks/{chunk-UE5TCZE6.js → chunk-5FAUIGXH.js} +5 -13
  30. package/dist/chunks/{chunk-VEB3NYSO.js → chunk-5MBO76SL.js} +5 -0
  31. package/dist/chunks/{chunk-PDITONOB.js → chunk-5MRUKUOG.js} +5347 -4132
  32. package/dist/chunks/{chunk-4UC3U66K.js → chunk-6EUMFVPJ.js} +5 -5
  33. package/dist/chunks/{chunk-YOGGIAGF.js → chunk-6JL5OVLX.js} +1 -1
  34. package/dist/chunks/{chunk-QG4ZO2EB.js → chunk-74E6VVF6.js} +11 -11
  35. package/dist/chunks/chunk-A2X3KLC3.js +3807 -0
  36. package/dist/chunks/{chunk-BA4HLTG2.js → chunk-B6B2MUUF.js} +5 -5
  37. package/dist/chunks/{chunk-XKYOIERV.js → chunk-BN5VYAOZ.js} +681 -1239
  38. package/dist/chunks/{chunk-IO76BGJ3.js → chunk-BYUA6YYS.js} +15 -9
  39. package/dist/chunks/{chunk-NCFY7PWS.js → chunk-CCGOFQV3.js} +51 -2
  40. package/dist/chunks/{chunk-66KNL43D.js → chunk-CD6USWHZ.js} +1 -1
  41. package/dist/chunks/{chunk-ZWSTIPSW.js → chunk-CEITMQ62.js} +2 -2
  42. package/dist/chunks/{chunk-7AQTBTVY.js → chunk-EJP6Z7NU.js} +4 -3
  43. package/dist/chunks/{chunk-RTW5ZXHO.js → chunk-EZTNYRHH.js} +6 -5
  44. package/dist/chunks/{chunk-MJQFA66Z.js → chunk-FAATDXYS.js} +308 -81
  45. package/dist/chunks/{chunk-DNV4FSN5.js → chunk-FBET5XZ2.js} +6 -4
  46. package/dist/chunks/{chunk-HTC4R67V.js → chunk-FES4YXJ3.js} +9 -9
  47. package/dist/chunks/{chunk-NBKE6QRZ.js → chunk-FHTUTVIQ.js} +10 -5
  48. package/dist/chunks/chunk-FII3C4E7.js +168 -0
  49. package/dist/chunks/{chunk-2NL7ED5Q.js → chunk-FV7425LN.js} +22 -1
  50. package/dist/chunks/{chunk-J6OET6C3.js → chunk-GAI76CFX.js} +4 -4
  51. package/dist/chunks/{chunk-B34OV7K2.js → chunk-GGQQA4JW.js} +13 -0
  52. package/dist/chunks/chunk-GLE2YUPU.js +34 -0
  53. package/dist/chunks/{chunk-X265R5C6.js → chunk-GN3F6PIU.js} +1 -1
  54. package/dist/chunks/{chunk-SM624MOZ.js → chunk-GWUN54UD.js} +1 -1
  55. package/dist/chunks/chunk-H3TELH3H.js +942 -0
  56. package/dist/chunks/{chunk-XZULYFIX.js → chunk-HD4DZI2L.js} +2 -2
  57. package/dist/chunks/{chunk-KLLLWQM2.js → chunk-HPQIVXSP.js} +1 -1
  58. package/dist/chunks/{chunk-WSVZFWN4.js → chunk-IBY3Q3HG.js} +693 -104
  59. package/dist/chunks/{chunk-JSEOX4CM.js → chunk-JGR6W4IX.js} +14 -8
  60. package/dist/chunks/chunk-K652V4NH.js +283 -0
  61. package/dist/chunks/{chunk-OCBJKHF2.js → chunk-KH2CZZDD.js} +2 -2
  62. package/dist/chunks/chunk-LGFAYIKX.js +115 -0
  63. package/dist/chunks/{chunk-QG5KDB6X.js → chunk-LZDW5TDV.js} +5 -5
  64. package/dist/chunks/{chunk-ENKWIF75.js → chunk-MA4AZNP7.js} +10 -10
  65. package/dist/chunks/{chunk-4RQIB5UZ.js → chunk-O2YT7VB4.js} +0 -34
  66. package/dist/chunks/{chunk-4KJ2BPIT.js → chunk-OACJLMLD.js} +2 -38
  67. package/dist/chunks/{chunk-ML2ZWH2K.js → chunk-PCWYMX57.js} +14 -153
  68. package/dist/chunks/{chunk-NHFBLJOI.js → chunk-Q3PQ5VGJ.js} +1 -1
  69. package/dist/chunks/{chunk-LGXBB2R2.js → chunk-QK3I36QG.js} +1 -1
  70. package/dist/chunks/chunk-RA7TR75G.js +8223 -0
  71. package/dist/chunks/{chunk-KSPVDFE4.js → chunk-SAIILPQ3.js} +0 -3
  72. package/dist/chunks/{chunk-DHKDK57Q.js → chunk-SNZPA74J.js} +146 -54
  73. package/dist/chunks/{chunk-PWR5MVM3.js → chunk-SSP3UT5C.js} +4 -4
  74. package/dist/chunks/{chunk-4LETJLG2.js → chunk-SUCRVT5L.js} +1 -1
  75. package/dist/chunks/{chunk-5YLZHETW.js → chunk-TRR5KGDN.js} +1 -1
  76. package/dist/chunks/chunk-UIDXQNMV.js +13 -0
  77. package/dist/chunks/{chunk-PIORL4OD.js → chunk-UKV3D7WB.js} +0 -44
  78. package/dist/chunks/chunk-UYNUIGUR.js +167 -0
  79. package/dist/chunks/chunk-V2TYBEWU.js +28 -0
  80. package/dist/chunks/chunk-V35MD7KN.js +13 -0
  81. package/dist/chunks/{chunk-N4HTVZDZ.js → chunk-VR3KCBHH.js} +1 -1
  82. package/dist/chunks/{chunk-APYUOROB.js → chunk-W4CTWW7M.js} +423 -61
  83. package/dist/chunks/{chunk-ABANKQYY.js → chunk-WJAW2O5H.js} +92 -465
  84. package/dist/chunks/{chunk-6RSBRKF5.js → chunk-WN4YJJGH.js} +2 -2
  85. package/dist/chunks/chunk-XNXVCNAT.js +88 -0
  86. package/dist/chunks/{chunk-TDGF35EN.js → chunk-XOHNA2S6.js} +1 -1
  87. package/dist/chunks/chunk-XQPMKWSV.js +487 -0
  88. package/dist/chunks/{chunk-4FQL7KUS.js → chunk-XWDHZP7P.js} +8 -8
  89. package/dist/chunks/{chunk-REPRY4F7.js → chunk-YCKKP4QA.js} +10 -10
  90. package/dist/chunks/{chunk-YNWQ3PUQ.js → chunk-YJWMOGGZ.js} +3 -3
  91. package/dist/chunks/{chunk-RFIL6REB.js → chunk-YKZIAK7C.js} +119 -29
  92. package/dist/chunks/{chunk-45YCXM2H.js → chunk-YZDBUH6S.js} +45 -9
  93. package/dist/chunks/chunk-Z3I3QJK3.js +47 -0
  94. package/dist/chunks/{chunk-G23FFNLT.js → chunk-ZDGPPCTW.js} +20 -8
  95. package/dist/chunks/chunk-ZL5HN75Q.js +61 -0
  96. package/dist/chunks/{chunk-IQX5S2RS.js → chunk-ZL7JCYWM.js} +66 -7
  97. package/dist/chunks/{computer-use-A72BECH4.js → computer-use-4B45EG2F.js} +8 -8
  98. package/dist/chunks/{contextCommand-RREXA4B7.js → contextCommand-GIVRWNTS.js} +12 -11
  99. package/dist/chunks/{cron-create-DDYU4DIR.js → cron-create-JSXEIPVS.js} +1 -1
  100. package/dist/chunks/{cron-delete-DFKOUZWN.js → cron-delete-OIFVEPGU.js} +1 -1
  101. package/dist/chunks/{cron-list-ME5QGAR5.js → cron-list-D4ZX4IOE.js} +1 -1
  102. package/dist/chunks/{daemon-XWG2EGFX.js → daemon-WPAENEBW.js} +71 -3
  103. package/dist/chunks/{daemon-status-provider-Y6AFXTET.js → daemon-status-provider-WBOAMCHE.js} +20 -17
  104. package/dist/chunks/{de-PLLFDERI.js → de-ZFPPQVSF.js} +26 -1
  105. package/dist/chunks/{dist-LPVU3L2M.js → dist-BEXOZXLQ.js} +6 -3792
  106. package/dist/chunks/{dist-7GU63KI5.js → dist-E6UANPIM.js} +1 -1
  107. package/dist/chunks/{dist-VHBP2PIG.js → dist-H2AEJCZ5.js} +2 -2
  108. package/dist/chunks/{dist-3UDX5T4T.js → dist-O2IRTRPP.js} +1 -1
  109. package/dist/chunks/dist-SCFLLYMK.js +3217 -0
  110. package/dist/chunks/{dist-H4HHZYCI.js → dist-Z34QPAQW.js} +2 -2
  111. package/dist/chunks/{earlyInputCapture-OAHBOGOO.js → earlyInputCapture-JWMCAJZR.js} +8 -8
  112. package/dist/chunks/{edit-SFYW3FOV.js → edit-O5FUVHBE.js} +9 -9
  113. package/dist/chunks/{en-AXARKOWO.js → en-N4EPZAQI.js} +31 -2
  114. package/dist/chunks/{enter-worktree-LUPPQ2NH.js → enter-worktree-LOJFRC3D.js} +8 -8
  115. package/dist/chunks/{enterPlanMode-44GEN5U6.js → enterPlanMode-VS3FAUPX.js} +8 -8
  116. package/dist/chunks/environment-WKW5TLSH.js +90 -0
  117. package/dist/chunks/{errors-H3Q3W3DL.js → errors-LEZXHJMR.js} +10 -10
  118. package/dist/chunks/{exit-worktree-34CVVWT4.js → exit-worktree-RN2NXRMP.js} +8 -8
  119. package/dist/chunks/{exitPlanMode-5G5BHNUP.js → exitPlanMode-EPC424I4.js} +8 -8
  120. package/dist/chunks/{fast-path-7PKGFBRM.js → fast-path-UUPAFOSQ.js} +12 -3
  121. package/dist/chunks/{fast-path-settings-RCRXH2JG.js → fast-path-settings-7RIFI3PK.js} +3 -2
  122. package/dist/chunks/{fr-MBMNQSQ6.js → fr-5WWMY53B.js} +30 -1
  123. package/dist/chunks/{gemini-2II6JH4H.js → gemini-QCKK4XNU.js} +438 -265
  124. package/dist/chunks/{geminiContentGenerator-SWEJVOC4.js → geminiContentGenerator-DX4SRXJA.js} +1 -1
  125. package/dist/chunks/{glob-5DFC7DXW.js → glob-4URMJWRX.js} +8 -8
  126. package/dist/chunks/{grep-QYVXGRRJ.js → grep-AEQB5KED.js} +8 -8
  127. package/dist/chunks/handleAutoUpdate-Y4YNG34Y.js +65 -0
  128. package/dist/chunks/{initializer-XX3UGUHE.js → initializer-NDEBMSOG.js} +17 -13
  129. package/dist/chunks/{ja-HFV5QCHR.js → ja-CUHZOLEJ.js} +30 -1
  130. package/dist/chunks/{list-AX5FWBVC.js → list-VSCBNOWT.js} +17 -15
  131. package/dist/chunks/{loadedSettingsAdapter-ISOM6GJ7.js → loadedSettingsAdapter-FDO752BA.js} +15 -13
  132. package/dist/chunks/{loop-wakeup-ZW5P6VPY.js → loop-wakeup-OHWEMFP5.js} +2 -2
  133. package/dist/chunks/{ls-L654WOAT.js → ls-7MFU2QYW.js} +1 -1
  134. package/dist/chunks/{lsp-M35KE54Y.js → lsp-XHDTPTGV.js} +2 -4
  135. package/dist/chunks/{mcp-74F6725E.js → mcp-MLPWTHUV.js} +15 -13
  136. package/dist/chunks/{monitor-W4WRSC2C.js → monitor-WCVHIJUJ.js} +16 -11
  137. package/dist/chunks/{nonInteractiveCli-4QMV6C4J.js → nonInteractiveCli-32HZK274.js} +52 -44
  138. package/dist/chunks/{notebook-edit-XBZEIP42.js → notebook-edit-NPOMPKS4.js} +9 -9
  139. package/dist/chunks/{openaiContentGenerator-RTUJDESE.js → openaiContentGenerator-6AIBSRQK.js} +6 -6
  140. package/dist/chunks/{pidfile-YWSGNTPK.js → pidfile-7Y3QEDSZ.js} +8 -8
  141. package/dist/chunks/{pt-2THT3YHA.js → pt-OLYN42DS.js} +26 -1
  142. package/dist/chunks/{qwenContentGenerator-4ZFYAZLY.js → qwenContentGenerator-OUYOAYT4.js} +10 -10
  143. package/dist/chunks/{read-file-D7DKDIAC.js → read-file-EESFA24L.js} +3 -3
  144. package/dist/chunks/{record-artifact-PP3LKHTS.js → record-artifact-SQ2OKRJW.js} +3 -3
  145. package/dist/chunks/{ripGrep-KG7JYNER.js → ripGrep-DLYV7ZZG.js} +8 -8
  146. package/dist/chunks/{ru-PER5I4OI.js → ru-MKM2HFDS.js} +26 -1
  147. package/dist/chunks/{run-qwen-serve-XGJSNF6S.js → run-qwen-serve-WUEHQROF.js} +602 -143
  148. package/dist/chunks/{scheduler-MOLWOE4G.js → scheduler-SK4Y66V4.js} +8 -8
  149. package/dist/chunks/{send-message-OA6MV4EU.js → send-message-76GT3JMC.js} +1 -1
  150. package/dist/chunks/{serve-4ZNVPYND.js → serve-UCDGVZFI.js} +17 -14
  151. package/dist/chunks/{server-ACWDFHIF.js → server-FVGFFVZ4.js} +1394 -328
  152. package/dist/chunks/{session-VYO2GRO2.js → session-RIGKDMGR.js} +53 -45
  153. package/dist/chunks/{settings-4J2O3K22.js → settings-LVFFGXGE.js} +24 -20
  154. package/dist/chunks/{shell-RKERJYXR.js → shell-PAWNAFYN.js} +8 -8
  155. package/dist/chunks/{skill-JYACZJ5V.js → skill-5YIN3Z6Y.js} +15 -5
  156. package/dist/chunks/{spawnChannel-BA3U3RGX.js → spawnChannel-KIMZHWNR.js} +10 -10
  157. package/dist/chunks/{src-3P337V4P.js → src-BIWCD3VX.js} +21 -9
  158. package/dist/chunks/{startInteractiveUI-SUSZ6FWB.js → startInteractiveUI-AFXLGUFI.js} +33759 -41620
  159. package/dist/chunks/{task-create-RPFZNB4B.js → task-create-WCHTB435.js} +2 -2
  160. package/dist/chunks/{task-update-5WUG5MVQ.js → task-update-XYWMHJGJ.js} +2 -2
  161. package/dist/chunks/{team-create-YVWGRZEA.js → team-create-26WOMISV.js} +8 -8
  162. package/dist/chunks/{team-plan-approval-VRF54TTI.js → team-plan-approval-B5XB6UQC.js} +8 -8
  163. package/dist/chunks/{theme-manager-JW2KOACL.js → theme-manager-4TJ5TEFD.js} +8 -8
  164. package/dist/chunks/{tool-search-KUSMAZBN.js → tool-search-FFU63E6M.js} +6 -23
  165. package/dist/chunks/total-session-admission-JOD7SMPJ.js +72 -0
  166. package/dist/chunks/{trustedFolders-ERGSUCDK.js → trustedFolders-IJ2QHXSC.js} +9 -9
  167. package/dist/chunks/updateCheck-5Z25DCBP.js +65 -0
  168. package/dist/chunks/{validateNonInterActiveAuth-DDI62H5X.js → validateNonInterActiveAuth-G5EY47DE.js} +49 -41
  169. package/dist/chunks/{version-VB3AHVUF.js → version-LGO3GOKQ.js} +2 -1
  170. package/dist/chunks/{workflow-WINKRCI4.js → workflow-ZTK3WT3D.js} +9 -9
  171. package/dist/chunks/{workspace-providers-status-ZVZPXKSO.js → workspace-providers-status-YMPTRKW2.js} +18 -15
  172. package/dist/chunks/workspace-registry-NBUL6LBH.js +74 -0
  173. package/dist/chunks/{workspace-service-GAS2LV2P.js → workspace-service-V6G2RCD4.js} +21 -19
  174. package/dist/chunks/{workspace-skills-status-4WGKYJVA.js → workspace-skills-status-ZCW44BCH.js} +16 -14
  175. package/dist/chunks/{write-file-UTLKVZNN.js → write-file-4FUTAEW6.js} +9 -9
  176. package/dist/chunks/{zh-RS3HZHFH.js → zh-J4F6QWQV.js} +31 -2
  177. package/dist/chunks/{zh-TW-L5GRQ4S4.js → zh-TW-XVDWOLSW.js} +31 -2
  178. package/dist/cli.js +11 -11
  179. package/dist/locales/ca.js +30 -0
  180. package/dist/locales/de.js +30 -0
  181. package/dist/locales/en.js +38 -2
  182. package/dist/locales/fr.js +36 -0
  183. package/dist/locales/ja.js +36 -0
  184. package/dist/locales/pt.js +30 -0
  185. package/dist/locales/ru.js +30 -0
  186. package/dist/locales/zh-TW.js +38 -2
  187. package/dist/locales/zh.js +38 -2
  188. package/dist/package.json +3 -3
  189. package/dist/web-shell/assets/{arc-C6tzvtOa.js → arc-BWyoJpY2.js} +1 -1
  190. package/dist/web-shell/assets/{architectureDiagram-3BPJPVTR-DSYQFGn9.js → architectureDiagram-3BPJPVTR-BT0mGrz2.js} +1 -1
  191. package/dist/web-shell/assets/{blockDiagram-GPEHLZMM-CHjBdXAD.js → blockDiagram-GPEHLZMM-BLgUWvyf.js} +1 -1
  192. package/dist/web-shell/assets/{c4Diagram-AAUBKEIU-BQzK6Yyb.js → c4Diagram-AAUBKEIU-DYx9M7oU.js} +1 -1
  193. package/dist/web-shell/assets/channel-wmPUGHtg.js +1 -0
  194. package/dist/web-shell/assets/{chunk-2J33WTMH-hpP2p3Ij.js → chunk-2J33WTMH-CfMHWbuZ.js} +1 -1
  195. package/dist/web-shell/assets/{chunk-4BX2VUAB-B5KtK1JJ.js → chunk-4BX2VUAB-B1URoqEV.js} +1 -1
  196. package/dist/web-shell/assets/{chunk-55IACEB6-BDv6Mfr2.js → chunk-55IACEB6-DAIaM4QF.js} +1 -1
  197. package/dist/web-shell/assets/{chunk-727SXJPM-BevPWfrX.js → chunk-727SXJPM-B2X34knw.js} +1 -1
  198. package/dist/web-shell/assets/{chunk-AQP2D5EJ-ChDrz2ad.js → chunk-AQP2D5EJ-Cif-zLTQ.js} +1 -1
  199. package/dist/web-shell/assets/{chunk-FMBD7UC4-ClMdVSDs.js → chunk-FMBD7UC4-H18WCXdY.js} +1 -1
  200. package/dist/web-shell/assets/{chunk-ND2GUHAM-BceV8kZS.js → chunk-ND2GUHAM-YFtetHi0.js} +1 -1
  201. package/dist/web-shell/assets/{chunk-QZHKN3VN-DtyK2wwc.js → chunk-QZHKN3VN-By2hiH3r.js} +1 -1
  202. package/dist/web-shell/assets/classDiagram-4FO5ZUOK-BA2ljEjW.js +1 -0
  203. package/dist/web-shell/assets/classDiagram-v2-Q7XG4LA2-BA2ljEjW.js +1 -0
  204. package/dist/web-shell/assets/{cose-bilkent-S5V4N54A-BGMsqwmE.js → cose-bilkent-S5V4N54A-VrcnnLZu.js} +1 -1
  205. package/dist/web-shell/assets/{dagre-BM42HDAG-C-71clpF.js → dagre-BM42HDAG-CGo-IaVV.js} +1 -1
  206. package/dist/web-shell/assets/{diagram-2AECGRRQ-WIzzlkec.js → diagram-2AECGRRQ-Dl4QjzIB.js} +1 -1
  207. package/dist/web-shell/assets/{diagram-5GNKFQAL-CtnhZUP1.js → diagram-5GNKFQAL-qMLmsO0u.js} +1 -1
  208. package/dist/web-shell/assets/{diagram-KO2AKTUF-CS_IUezp.js → diagram-KO2AKTUF-CHlmuxPI.js} +1 -1
  209. package/dist/web-shell/assets/{diagram-LMA3HP47-BQnGRwN9.js → diagram-LMA3HP47-BUwU3GwT.js} +1 -1
  210. package/dist/web-shell/assets/{diagram-OG6HWLK6-By2VIocq.js → diagram-OG6HWLK6-HEhwPDUM.js} +1 -1
  211. package/dist/web-shell/assets/{erDiagram-TEJ5UH35-Dy8WeNkr.js → erDiagram-TEJ5UH35-1n0llBmM.js} +1 -1
  212. package/dist/web-shell/assets/{flowDiagram-I6XJVG4X-Diu_4y0w.js → flowDiagram-I6XJVG4X-BN74uMnt.js} +1 -1
  213. package/dist/web-shell/assets/{ganttDiagram-6RSMTGT7-CH8euujP.js → ganttDiagram-6RSMTGT7-BoOq78i3.js} +1 -1
  214. package/dist/web-shell/assets/{gitGraphDiagram-PVQCEYII-DHiObZq1.js → gitGraphDiagram-PVQCEYII-CN8b00c8.js} +1 -1
  215. package/dist/web-shell/assets/index-CNwoO1Cn.js +783 -0
  216. package/dist/web-shell/assets/index-CWQ0z6kZ.css +5 -0
  217. package/dist/web-shell/assets/{infoDiagram-5YYISTIA-CvC9A6fh.js → infoDiagram-5YYISTIA-CCurnIna.js} +1 -1
  218. package/dist/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BK46kC4E.js → ishikawaDiagram-YF4QCWOH-AwuRqdUP.js} +1 -1
  219. package/dist/web-shell/assets/{journeyDiagram-JHISSGLW-B2TIiKq4.js → journeyDiagram-JHISSGLW-B7IICk-E.js} +1 -1
  220. package/dist/web-shell/assets/{kanban-definition-UN3LZRKU-Bh0WAulO.js → kanban-definition-UN3LZRKU-BYF0OKhx.js} +1 -1
  221. package/dist/web-shell/assets/{linear-Bxe9SHMk.js → linear-GWWguGfD.js} +1 -1
  222. package/dist/web-shell/assets/{mermaid.core-B1Pv6D5B.js → mermaid.core-JqtkxvCl.js} +5 -5
  223. package/dist/web-shell/assets/{mindmap-definition-RKZ34NQL-Bz0joLH8.js → mindmap-definition-RKZ34NQL-B0MmHsZ6.js} +1 -1
  224. package/dist/web-shell/assets/{pieDiagram-4H26LBE5-CnN4x-VS.js → pieDiagram-4H26LBE5-DhImUZLQ.js} +1 -1
  225. package/dist/web-shell/assets/{quadrantDiagram-W4KKPZXB-BYWD4xO4.js → quadrantDiagram-W4KKPZXB-DGeSC3DT.js} +1 -1
  226. package/dist/web-shell/assets/{requirementDiagram-4Y6WPE33-B4MEhI9h.js → requirementDiagram-4Y6WPE33-DkspY6Re.js} +1 -1
  227. package/dist/web-shell/assets/{sankeyDiagram-5OEKKPKP-Dk_FgKLp.js → sankeyDiagram-5OEKKPKP-CaOofS2x.js} +1 -1
  228. package/dist/web-shell/assets/{sequenceDiagram-3UESZ5HK-B4ksiBZQ.js → sequenceDiagram-3UESZ5HK-DFQ_kFnN.js} +1 -1
  229. package/dist/web-shell/assets/{stateDiagram-AJRCARHV-CYf0xSPl.js → stateDiagram-AJRCARHV-D3snw0Tz.js} +1 -1
  230. package/dist/web-shell/assets/stateDiagram-v2-BHNVJYJU-BbSm_9d0.js +1 -0
  231. package/dist/web-shell/assets/{timeline-definition-PNZ67QCA-0CXeWHNY.js → timeline-definition-PNZ67QCA-l4zH8nLM.js} +1 -1
  232. package/dist/web-shell/assets/{vennDiagram-CIIHVFJN-DHoYY9v2.js → vennDiagram-CIIHVFJN-BnRlA98M.js} +1 -1
  233. package/dist/web-shell/assets/{wardley-L42UT6IY-D_65qshr.js → wardley-L42UT6IY-BS0xUdmd.js} +1 -1
  234. package/dist/web-shell/assets/{wardleyDiagram-YWT4CUSO-Cv90x1sd.js → wardleyDiagram-YWT4CUSO-DKGBUWyQ.js} +1 -1
  235. package/dist/web-shell/assets/{xychartDiagram-2RQKCTM6-5FQCYJyh.js → xychartDiagram-2RQKCTM6-DVb2HuOB.js} +1 -1
  236. package/dist/web-shell/index.html +2 -2
  237. package/package.json +3 -2
  238. package/dist/web-shell/assets/channel-V-ZaJrA6.js +0 -1
  239. package/dist/web-shell/assets/classDiagram-4FO5ZUOK-s-H0snGT.js +0 -1
  240. package/dist/web-shell/assets/classDiagram-v2-Q7XG4LA2-s-H0snGT.js +0 -1
  241. package/dist/web-shell/assets/index-DW75jq0K.css +0 -5
  242. package/dist/web-shell/assets/index-tiCo0xbZ.js +0 -779
  243. package/dist/web-shell/assets/stateDiagram-v2-BHNVJYJU-CMtrFRUb.js +0 -1
@@ -4,19 +4,19 @@ import {
4
4
  handleAtCommand,
5
5
  resolveAtCommandQuery,
6
6
  sanitizeDisplayText
7
- } from "./chunk-PWR5MVM3.js";
7
+ } from "./chunk-SSP3UT5C.js";
8
8
  import {
9
9
  isAtCommand,
10
10
  isBtwCommand,
11
11
  isSlashCommand,
12
12
  normalizePartList,
13
13
  recordGoalStatusItem
14
- } from "./chunk-XKYOIERV.js";
14
+ } from "./chunk-BN5VYAOZ.js";
15
15
  import {
16
16
  SHELL_COMMAND_NAME,
17
17
  fitPendingSlice,
18
18
  useSessionStats
19
- } from "./chunk-45YCXM2H.js";
19
+ } from "./chunk-YZDBUH6S.js";
20
20
  import {
21
21
  require_react
22
22
  } from "./chunk-KYMBIKIW.js";
@@ -28,10 +28,10 @@ import {
28
28
  } from "./chunk-KHDZHZMH.js";
29
29
  import {
30
30
  isInlineModelOverrideAllowed
31
- } from "./chunk-4FQL7KUS.js";
31
+ } from "./chunk-XWDHZP7P.js";
32
32
  import {
33
33
  t
34
- } from "./chunk-ENKWIF75.js";
34
+ } from "./chunk-MA4AZNP7.js";
35
35
  import {
36
36
  AutonomousLoopTickResolver,
37
37
  CoreToolScheduler,
@@ -53,7 +53,7 @@ import {
53
53
  setActiveGoal,
54
54
  shouldRunVisionBridge,
55
55
  splitImageParts
56
- } from "./chunk-PDITONOB.js";
56
+ } from "./chunk-5MRUKUOG.js";
57
57
  import {
58
58
  ApiCancelEvent,
59
59
  ConversationFinishedEvent,
@@ -63,17 +63,17 @@ import {
63
63
  logConversationFinishedEvent,
64
64
  logUserPrompt,
65
65
  logUserRetry
66
- } from "./chunk-YRM6BC6H.js";
66
+ } from "./chunk-27AYMAL6.js";
67
67
  import {
68
68
  isAnyAutoMemPath
69
- } from "./chunk-4KJ2BPIT.js";
69
+ } from "./chunk-OACJLMLD.js";
70
70
  import {
71
71
  ToolNames
72
72
  } from "./chunk-X3YGAX7V.js";
73
73
  import {
74
74
  getUnsupportedImageFormatWarning,
75
75
  isSupportedImageMimeType
76
- } from "./chunk-PIORL4OD.js";
76
+ } from "./chunk-UKV3D7WB.js";
77
77
  import {
78
78
  FinishReason
79
79
  } from "./chunk-55ZMG67I.js";
@@ -1466,7 +1466,7 @@ var useGeminiStream = /* @__PURE__ */ __name((geminiClient, history, addItem, co
1466
1466
  );
1467
1467
  if (!clipped) break;
1468
1468
  let boundaryLine = -1;
1469
- for (let k = Math.min(keptLines, bufferLines.length) - 1; k >= 0; k--) {
1469
+ for (let k = Math.min(keptLines, bufferLines.length - 1); k >= 0; k--) {
1470
1470
  if (bufferLines[k].trim() === "") {
1471
1471
  boundaryLine = k;
1472
1472
  break;
@@ -5,17 +5,17 @@ import {
5
5
  } from "./chunk-6IAWPIQ6.js";
6
6
  import {
7
7
  loadSettings
8
- } from "./chunk-ABANKQYY.js";
8
+ } from "./chunk-WJAW2O5H.js";
9
9
  import {
10
10
  STATUS_SCHEMA_VERSION
11
- } from "./chunk-NHFBLJOI.js";
11
+ } from "./chunk-Q3PQ5VGJ.js";
12
12
  import {
13
13
  writeStderrLine
14
14
  } from "./chunk-Y6Z2O3WR.js";
15
15
  import {
16
16
  SkillManager,
17
17
  isSafeModeEnv
18
- } from "./chunk-PDITONOB.js";
18
+ } from "./chunk-5MRUKUOG.js";
19
19
  import {
20
20
  init_esbuild_shims
21
21
  } from "./chunk-A4BMJM77.js";
@@ -16668,6 +16668,9 @@ var SERVE_CAPABILITY_REGISTRY = {
16668
16668
  session_branch: { since: "v1" },
16669
16669
  rate_limit: { since: "v1" },
16670
16670
  workspace_reload: { since: "v1" },
16671
+ // Multi-workspace sessions closed loop (issue #6378 Phase 2a). Advertised
16672
+ // only when one daemon hosts more than one registered workspace runtime.
16673
+ multi_workspace_sessions: { since: "v1" },
16671
16674
  // Phase 2 "reverse tool channel" (issue #5626). A connected WS client (e.g.
16672
16675
  // the Chrome extension) can host an MCP server that the daemon's agent
16673
16676
  // calls by carrying `mcp_message` JSON-RPC frames over the daemon WS,
@@ -16720,6 +16723,10 @@ var CONDITIONAL_SERVE_FEATURES = /* @__PURE__ */ new Map([
16720
16723
  ],
16721
16724
  ["rate_limit", (toggles) => toggles.rateLimit === true],
16722
16725
  ["workspace_reload", (toggles) => toggles.reloadAvailable === true],
16726
+ [
16727
+ "multi_workspace_sessions",
16728
+ (toggles) => toggles.multiWorkspaceSessionsEnabled === true
16729
+ ],
16723
16730
  ["client_mcp_over_ws", (toggles) => toggles.clientMcpOverWsEnabled === true],
16724
16731
  ["cdp_tunnel_over_ws", (toggles) => toggles.cdpTunnelOverWsEnabled === true],
16725
16732
  [
@@ -17231,35 +17238,78 @@ __name(parseDaemonStatusDetail, "parseDaemonStatusDetail");
17231
17238
  async function buildDaemonStatusResponse(detail, input) {
17232
17239
  const bridgeSnapshot = input.bridge.getDaemonStatusSnapshot();
17233
17240
  const lastActivity = input.bridge.lastActivityAt ?? null;
17241
+ const workspaceRuntimes = input.workspaceRegistry?.list();
17242
+ const workspaceSnapshots = workspaceRuntimes?.map((runtime) => ({
17243
+ workspaceCwd: runtime.workspaceCwd,
17244
+ snapshot: runtime.bridge === input.bridge ? bridgeSnapshot : runtime.bridge.getDaemonStatusSnapshot(),
17245
+ lastActivity: runtime.bridge === input.bridge ? lastActivity : runtime.bridge.lastActivityAt ?? null
17246
+ })) ?? [
17247
+ {
17248
+ workspaceCwd: input.boundWorkspace,
17249
+ snapshot: bridgeSnapshot,
17250
+ lastActivity
17251
+ }
17252
+ ];
17253
+ const aggregatedSessionCount = workspaceSnapshots.reduce(
17254
+ (sum, item) => sum + item.snapshot.sessionCount,
17255
+ 0
17256
+ );
17257
+ const aggregatedPendingPermissionCount = workspaceSnapshots.reduce(
17258
+ (sum, item) => sum + item.snapshot.pendingPermissionCount,
17259
+ 0
17260
+ );
17261
+ const aggregatedChannelLive = workspaceSnapshots.some(
17262
+ (item) => item.snapshot.channelLive
17263
+ );
17264
+ const aggregatedLastActivity = workspaceSnapshots.reduce(
17265
+ (latest, item) => item.lastActivity !== null && (latest === null || item.lastActivity > latest) ? item.lastActivity : latest,
17266
+ null
17267
+ );
17234
17268
  const acpSnapshot = input.acpHandle?.registry.getSnapshot();
17235
17269
  const rateLimitHits = input.rateLimiter?.getHitCounts() ?? zeroRateHits();
17236
17270
  let pendingPrompts = 0;
17237
17271
  let derivedQueuedPrompts = 0;
17238
- for (const session of bridgeSnapshot.sessions) {
17239
- pendingPrompts += session.pendingPromptCount;
17240
- derivedQueuedPrompts += Math.max(
17241
- 0,
17242
- session.pendingPromptCount - (session.hasActivePrompt ? 1 : 0)
17243
- );
17272
+ const derivedQueuedPromptsByWorkspace = [];
17273
+ for (const [index, { snapshot }] of workspaceSnapshots.entries()) {
17274
+ let derivedQueuedPromptsForWorkspace = 0;
17275
+ for (const session of snapshot.sessions) {
17276
+ pendingPrompts += session.pendingPromptCount;
17277
+ const sessionQueuedPrompts = Math.max(
17278
+ 0,
17279
+ session.pendingPromptCount - (session.hasActivePrompt ? 1 : 0)
17280
+ );
17281
+ derivedQueuedPrompts += sessionQueuedPrompts;
17282
+ derivedQueuedPromptsForWorkspace += sessionQueuedPrompts;
17283
+ }
17284
+ derivedQueuedPromptsByWorkspace[index] = derivedQueuedPromptsForWorkspace;
17244
17285
  }
17245
- const queuedPrompts = input.bridge.pendingPromptTotal ?? derivedQueuedPrompts;
17286
+ const queuedPrompts = workspaceRuntimes?.reduce(
17287
+ (sum, runtime, index) => sum + (runtime.bridge.pendingPromptTotal ?? derivedQueuedPromptsByWorkspace[index] ?? 0),
17288
+ 0
17289
+ ) ?? input.bridge.pendingPromptTotal ?? derivedQueuedPrompts;
17246
17290
  const channelWorker = input.getChannelWorkerSnapshot?.() ?? {
17247
17291
  enabled: false,
17248
17292
  state: "disabled",
17249
17293
  channels: []
17250
17294
  };
17295
+ const totalAdmissionSnapshot = input.getTotalSessionAdmissionSnapshot?.();
17251
17296
  const issues = [];
17252
17297
  let full;
17253
17298
  pushRuntimeIssues(
17254
17299
  issues,
17255
- bridgeSnapshot,
17256
17300
  acpSnapshot,
17257
17301
  rateLimitHits,
17258
17302
  input,
17259
- channelWorker
17303
+ channelWorker,
17304
+ totalAdmissionSnapshot,
17305
+ workspaceSnapshots
17260
17306
  );
17261
17307
  if (detail === "full") {
17262
- full = await buildFullStatus(input, bridgeSnapshot, acpSnapshot);
17308
+ full = await buildFullStatus(
17309
+ input,
17310
+ acpSnapshot,
17311
+ workspaceSnapshots.flatMap((item) => item.snapshot.sessions)
17312
+ );
17263
17313
  pushFullIssues(issues, full);
17264
17314
  }
17265
17315
  return {
@@ -17288,26 +17338,39 @@ async function buildDaemonStatusResponse(detail, input) {
17288
17338
  },
17289
17339
  limits: {
17290
17340
  maxSessions: bridgeSnapshot.limits.maxSessions,
17341
+ maxTotalSessions: positiveFiniteOrNull(input.opts.maxTotalSessions),
17291
17342
  maxPendingPromptsPerSession: bridgeSnapshot.limits.maxPendingPromptsPerSession,
17292
17343
  listenerMaxConnections: listenerMaxConnections(input.opts.maxConnections),
17293
17344
  eventRingSize: bridgeSnapshot.limits.eventRingSize,
17345
+ compactedReplayMaxBytes: bridgeSnapshot.limits.compactedReplayMaxBytes,
17294
17346
  promptDeadlineMs: positiveFiniteOrNull(input.opts.promptDeadlineMs),
17295
17347
  writerIdleTimeoutMs: positiveFiniteOrNull(input.opts.writerIdleTimeoutMs),
17296
17348
  channelIdleTimeoutMs: bridgeSnapshot.limits.channelIdleTimeoutMs,
17297
17349
  sessionIdleTimeoutMs: bridgeSnapshot.limits.sessionIdleTimeoutMs,
17298
17350
  acpConnectionCap: acpSnapshot?.connectionCap ?? null
17299
17351
  },
17352
+ ...workspaceRuntimes && workspaceRuntimes.length > 1 ? {
17353
+ workspaces: workspaceRuntimes.map((runtime) => ({
17354
+ id: runtime.workspaceId,
17355
+ cwd: runtime.workspaceCwd,
17356
+ primary: runtime.primary,
17357
+ trusted: runtime.trusted
17358
+ }))
17359
+ } : {},
17300
17360
  capabilities: {
17301
17361
  protocolVersions: input.protocolVersions,
17302
17362
  features: [...input.features]
17303
17363
  },
17304
17364
  runtime: {
17305
- sessions: { active: bridgeSnapshot.sessionCount },
17365
+ sessions: {
17366
+ active: aggregatedSessionCount,
17367
+ ...totalAdmissionSnapshot ? { admissionInFlight: totalAdmissionSnapshot.inFlight } : {}
17368
+ },
17306
17369
  permissions: {
17307
- pending: bridgeSnapshot.pendingPermissionCount,
17370
+ pending: aggregatedPendingPermissionCount,
17308
17371
  policy: bridgeSnapshot.permissionPolicy
17309
17372
  },
17310
- channel: { live: bridgeSnapshot.channelLive },
17373
+ channel: { live: aggregatedChannelLive },
17311
17374
  channelWorker,
17312
17375
  transport: {
17313
17376
  restSseActive: input.getRestSseActive(),
@@ -17328,11 +17391,14 @@ async function buildDaemonStatusResponse(detail, input) {
17328
17391
  ...input.getPerfSnapshot ? { perf: input.getPerfSnapshot() } : {},
17329
17392
  ...input.getMetricsSeries ? { metrics: { series: input.getMetricsSeries() } } : {},
17330
17393
  activity: {
17331
- activePrompts: input.bridge.activePromptCount ?? 0,
17394
+ activePrompts: workspaceRuntimes?.reduce(
17395
+ (sum, runtime) => sum + (runtime.bridge.activePromptCount ?? 0),
17396
+ 0
17397
+ ) ?? input.bridge.activePromptCount ?? 0,
17332
17398
  pendingPrompts,
17333
17399
  queuedPrompts,
17334
- lastActivityAt: lastActivity !== null ? new Date(lastActivity).toISOString() : null,
17335
- idleSinceMs: lastActivity !== null ? Date.now() - lastActivity : null
17400
+ lastActivityAt: aggregatedLastActivity !== null ? new Date(aggregatedLastActivity).toISOString() : null,
17401
+ idleSinceMs: aggregatedLastActivity !== null ? Date.now() - aggregatedLastActivity : null
17336
17402
  },
17337
17403
  process: process.memoryUsage()
17338
17404
  },
@@ -17354,7 +17420,7 @@ function cloneStartup(startup) {
17354
17420
  };
17355
17421
  }
17356
17422
  __name(cloneStartup, "cloneStartup");
17357
- async function buildFullStatus(input, bridgeSnapshot, acpSnapshot) {
17423
+ async function buildFullStatus(input, acpSnapshot, sessions) {
17358
17424
  const ctx = {
17359
17425
  route: "GET /daemon/status",
17360
17426
  workspaceCwd: input.boundWorkspace
@@ -17394,7 +17460,7 @@ async function buildFullStatus(input, bridgeSnapshot, acpSnapshot) {
17394
17460
  )
17395
17461
  ]);
17396
17462
  return {
17397
- sessions: bridgeSnapshot.sessions,
17463
+ sessions,
17398
17464
  acpConnections: acpSnapshot?.connections ?? [],
17399
17465
  workspace: {
17400
17466
  mcp,
@@ -17452,13 +17518,30 @@ async function withTimeout(promise, section, timeoutMs) {
17452
17518
  }
17453
17519
  }
17454
17520
  __name(withTimeout, "withTimeout");
17455
- function pushRuntimeIssues(issues, bridgeSnapshot, acpSnapshot, rateLimitHits, input, channelWorker) {
17456
- if (bridgeSnapshot.limits.maxSessions !== null && bridgeSnapshot.limits.maxSessions > 0 && bridgeSnapshot.sessionCount / bridgeSnapshot.limits.maxSessions >= CAPACITY_WARNING_RATIO) {
17457
- issues.push({
17458
- code: "session_capacity_high",
17459
- severity: "warning",
17460
- message: `Active sessions are at ${bridgeSnapshot.sessionCount}/${bridgeSnapshot.limits.maxSessions}.`
17461
- });
17521
+ function pushRuntimeIssues(issues, acpSnapshot, rateLimitHits, input, channelWorker, totalAdmissionSnapshot, workspaceSnapshots) {
17522
+ for (const { workspaceCwd, snapshot } of workspaceSnapshots) {
17523
+ if (snapshot.limits.maxSessions !== null && snapshot.limits.maxSessions > 0 && snapshot.sessionCount / snapshot.limits.maxSessions >= CAPACITY_WARNING_RATIO) {
17524
+ issues.push({
17525
+ code: "session_capacity_high",
17526
+ severity: "warning",
17527
+ message: workspaceSnapshots.length > 1 ? `Workspace ${workspaceCwd} active sessions are at ${snapshot.sessionCount}/${snapshot.limits.maxSessions}.` : `Active sessions are at ${snapshot.sessionCount}/${snapshot.limits.maxSessions}.`
17528
+ });
17529
+ }
17530
+ }
17531
+ const maxTotalSessions = positiveFiniteOrNull(input.opts.maxTotalSessions);
17532
+ if (maxTotalSessions !== null) {
17533
+ const fallbackLiveCount = workspaceSnapshots.reduce(
17534
+ (sum, item) => sum + item.snapshot.sessionCount,
17535
+ 0
17536
+ );
17537
+ const totalActive = (totalAdmissionSnapshot?.liveCount ?? fallbackLiveCount) + (totalAdmissionSnapshot?.inFlight ?? 0);
17538
+ if (totalActive / maxTotalSessions >= CAPACITY_WARNING_RATIO) {
17539
+ issues.push({
17540
+ code: "total_session_capacity_high",
17541
+ severity: "warning",
17542
+ message: `Total active and in-flight sessions are at ${totalActive}/${maxTotalSessions}.`
17543
+ });
17544
+ }
17462
17545
  }
17463
17546
  if (acpSnapshot !== void 0 && acpSnapshot.connectionCap !== null && acpSnapshot.connectionCap > 0 && acpSnapshot.connectionCount / acpSnapshot.connectionCap >= CAPACITY_WARNING_RATIO) {
17464
17547
  issues.push({
@@ -17467,18 +17550,25 @@ function pushRuntimeIssues(issues, bridgeSnapshot, acpSnapshot, rateLimitHits, i
17467
17550
  message: `ACP connections are at ${acpSnapshot.connectionCount}/${acpSnapshot.connectionCap}.`
17468
17551
  });
17469
17552
  }
17470
- if (bridgeSnapshot.pendingPermissionCount > 0) {
17553
+ const pendingPermissionCount = workspaceSnapshots.reduce(
17554
+ (sum, item) => sum + item.snapshot.pendingPermissionCount,
17555
+ 0
17556
+ );
17557
+ if (pendingPermissionCount > 0) {
17471
17558
  issues.push({
17472
17559
  code: "pending_permissions",
17473
17560
  severity: "warning",
17474
- message: `${bridgeSnapshot.pendingPermissionCount} permission request(s) are pending.`
17561
+ message: `${pendingPermissionCount} permission request(s) are pending.`
17475
17562
  });
17476
17563
  }
17477
- if (bridgeSnapshot.sessionCount > 0 && !bridgeSnapshot.channelLive) {
17564
+ const downWorkspaces = workspaceSnapshots.filter(
17565
+ (item) => item.snapshot.sessionCount > 0 && !item.snapshot.channelLive
17566
+ );
17567
+ if (downWorkspaces.length > 0) {
17478
17568
  issues.push({
17479
17569
  code: "acp_channel_down",
17480
17570
  severity: "error",
17481
- message: "Active sessions exist but the ACP channel is not live."
17571
+ message: downWorkspaces.length === 1 ? `Active sessions exist but the ACP channel is not live for ${downWorkspaces[0].workspaceCwd}.` : `Active sessions exist but the ACP channel is not live for ${downWorkspaces.length} workspace(s).`
17482
17572
  });
17483
17573
  }
17484
17574
  if (input.opts.rateLimit === true && sumRateHits(rateLimitHits) > 0) {
@@ -2,19 +2,19 @@
2
2
  "use strict";
3
3
  import {
4
4
  getEffectiveSupportedModes
5
- } from "./chunk-4UC3U66K.js";
5
+ } from "./chunk-6EUMFVPJ.js";
6
6
  import {
7
7
  require_jsx_runtime
8
- } from "./chunk-UE5TCZE6.js";
8
+ } from "./chunk-5FAUIGXH.js";
9
9
  import {
10
10
  require_react
11
11
  } from "./chunk-KYMBIKIW.js";
12
12
  import {
13
13
  getCachedStringWidth
14
- } from "./chunk-536GZ6UF.js";
14
+ } from "./chunk-2MDC5WDB.js";
15
15
  import {
16
16
  uiTelemetryService
17
- } from "./chunk-YRM6BC6H.js";
17
+ } from "./chunk-27AYMAL6.js";
18
18
  import {
19
19
  init_esbuild_shims
20
20
  } from "./chunk-A4BMJM77.js";
@@ -376,6 +376,7 @@ __name(getCommandSubcommandNames, "getCommandSubcommandNames");
376
376
  // packages/cli/src/ui/utils/pending-rendered-height.ts
377
377
  init_esbuild_shims();
378
378
  var TABLE_CHROME_ROWS = 5;
379
+ var TABLE_MAX_ROW_LINES = 4;
379
380
  var TABLE_ROW_RE = /^\s*\|(.+)\|\s*$/;
380
381
  var TABLE_SEPARATOR_RE = /^(?=.*\|)\s*\|?\s*(:?-+:?)\s*(\|\s*(:?-+:?)\s*)*\|?\s*$/;
381
382
  var CODE_FENCE_RE = /^ *(`{3,}|~{3,}) *([^`]*)$/;
@@ -490,13 +491,47 @@ function fitPendingSlice(allLines, contentWidth, budget, tableClampRows) {
490
491
  let j = i + 2;
491
492
  while (j < allLines.length && TABLE_ROW_RE.test(allLines[j])) j++;
492
493
  const dataRows = j - (i + 2);
493
- const colCount = splitMarkdownTableRow(
494
+ const headerCells = splitMarkdownTableRow(
494
495
  TABLE_ROW_RE.exec(allLines[i])[1]
495
- ).length;
496
+ );
497
+ const colCount = headerCells.length;
496
498
  const minHorizontalWidth = Math.max(24, 6 * colCount + 5);
497
- const usesVertical = contentWidth < minHorizontalWidth;
498
- const rows = usesVertical ? dataRows * colCount + Math.max(0, dataRows - 1) + 2 : 2 * dataRows + TABLE_CHROME_ROWS;
499
- const cost = Math.min(rows, tableClampRows);
499
+ const perColWidth = Math.max(
500
+ 3,
501
+ Math.floor((contentWidth - (1 + 3 * colCount) - 4) / colCount)
502
+ );
503
+ let contentRows = 0;
504
+ let verticalRows = 0;
505
+ let maxRowLines = 1;
506
+ for (const label of headerCells) {
507
+ maxRowLines = Math.max(
508
+ maxRowLines,
509
+ estimateWrappedRows(label, perColWidth)
510
+ );
511
+ }
512
+ contentRows += maxRowLines;
513
+ for (let r = i + 2; r < j; r++) {
514
+ const cells = splitMarkdownTableRow(
515
+ TABLE_ROW_RE.exec(allLines[r])[1]
516
+ );
517
+ let rowMax = 1;
518
+ for (let colIdx = 0; colIdx < cells.length; colIdx++) {
519
+ const value = cells[colIdx];
520
+ rowMax = Math.max(rowMax, estimateWrappedRows(value, perColWidth));
521
+ const label = headerCells[colIdx] ?? "";
522
+ verticalRows += estimateWrappedRows(
523
+ label ? `${label}: ${value}` : value,
524
+ contentWidth
525
+ );
526
+ }
527
+ contentRows += rowMax;
528
+ if (r === i + 2) {
529
+ maxRowLines = Math.max(maxRowLines, rowMax);
530
+ }
531
+ }
532
+ const usesVertical = dataRows > 0 && (contentWidth < minHorizontalWidth || maxRowLines > TABLE_MAX_ROW_LINES);
533
+ const rows = usesVertical ? verticalRows + Math.max(0, dataRows - 1) + 2 : contentRows + Math.max(0, dataRows - 1) + TABLE_CHROME_ROWS;
534
+ const cost = Math.min(rows, tableClampRows + 2);
500
535
  if (rendered + cost > budget && i > 0) {
501
536
  kept = i;
502
537
  break;
@@ -538,6 +573,7 @@ var TOOL_STATUS = {
538
573
  };
539
574
 
540
575
  export {
576
+ TABLE_MAX_ROW_LINES,
541
577
  TABLE_ROW_RE,
542
578
  TABLE_SEPARATOR_RE,
543
579
  CODE_FENCE_RE,
@@ -0,0 +1,47 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ init_esbuild_shims
5
+ } from "./chunk-A4BMJM77.js";
6
+
7
+ // packages/cli/src/config/shared-env-keys.ts
8
+ init_esbuild_shims();
9
+ var DEFAULT_EXCLUDED_ENV_VARS = ["DEBUG", "DEBUG_MODE"];
10
+ var ENV_CORRUPTED_PATH = "QWEN_CODE_SETTINGS_CORRUPTED_PATH";
11
+ var ENV_WAS_RECOVERED = "QWEN_CODE_SETTINGS_WAS_RECOVERED";
12
+ var PROJECT_ENV_HARDCODED_EXCLUSIONS = [
13
+ "QWEN_HOME",
14
+ "QWEN_RUNTIME_DIR",
15
+ "QWEN_CODE_MCP_APPROVALS_PATH",
16
+ "QWEN_CODE_TRUSTED_FOLDERS_PATH",
17
+ ENV_CORRUPTED_PATH,
18
+ ENV_WAS_RECOVERED,
19
+ // QWEN_TLS_INSECURE (and NODE_TLS_REJECT_UNAUTHORIZED, which it mirrors)
20
+ // disable TLS certificate verification for all outbound API connections. A
21
+ // project `.env` must never enable either — that would let an untrusted repo
22
+ // silently turn off MITM protection. Opt-in stays with the user via the
23
+ // `--insecure` flag, the shell environment, or a home `.env`. The initial
24
+ // `.env` load only consults this list, so both keys must be here (not just
25
+ // RELOAD_EXCLUDED_KEYS, which only applies on reload).
26
+ "QWEN_TLS_INSECURE",
27
+ "NODE_TLS_REJECT_UNAUTHORIZED"
28
+ ];
29
+ var HOME_ENV_BOOTSTRAP_KEYS = [
30
+ "QWEN_HOME",
31
+ "QWEN_RUNTIME_DIR",
32
+ "QWEN_CODE_MCP_APPROVALS_PATH",
33
+ "QWEN_CODE_TRUSTED_FOLDERS_PATH"
34
+ ];
35
+
36
+ export {
37
+ DEFAULT_EXCLUDED_ENV_VARS,
38
+ ENV_CORRUPTED_PATH,
39
+ ENV_WAS_RECOVERED,
40
+ PROJECT_ENV_HARDCODED_EXCLUSIONS,
41
+ HOME_ENV_BOOTSTRAP_KEYS
42
+ };
43
+ /**
44
+ * @license
45
+ * Copyright 2025 Qwen Team
46
+ * SPDX-License-Identifier: Apache-2.0
47
+ */
@@ -3,22 +3,25 @@
3
3
  import {
4
4
  HEADLESS_YOLO_NO_SANDBOX_WARNING
5
5
  } from "./chunk-BJBWRCSK.js";
6
+ import {
7
+ DEFAULT_RING_SIZE
8
+ } from "./chunk-3UP777ZS.js";
9
+ import {
10
+ DEFAULT_COMPACTED_REPLAY_MAX_BYTES
11
+ } from "./chunk-GLE2YUPU.js";
6
12
  import {
7
13
  normalizeServeChannelSelection
8
14
  } from "./chunk-MX2YXRER.js";
9
15
  import {
10
16
  loadSettings
11
- } from "./chunk-ABANKQYY.js";
12
- import {
13
- DEFAULT_RING_SIZE
14
- } from "./chunk-G7ZG7CA6.js";
17
+ } from "./chunk-WJAW2O5H.js";
15
18
  import {
16
19
  writeStderrLine
17
20
  } from "./chunk-Y6Z2O3WR.js";
18
21
  import {
19
22
  MCP_BUDGET_WARN_FRACTION,
20
23
  parsePositiveIntegerEnv
21
- } from "./chunk-PDITONOB.js";
24
+ } from "./chunk-5MRUKUOG.js";
22
25
  import {
23
26
  openBrowserSecurely,
24
27
  shouldLaunchBrowser
@@ -88,6 +91,9 @@ var serveCommand = {
88
91
  type: "number",
89
92
  default: 20,
90
93
  description: "Cap on concurrent live sessions. New spawn requests beyond this return 503; attach to existing sessions still works. Set to 0 to disable."
94
+ }).option("max-total-sessions", {
95
+ type: "number",
96
+ description: "Non-negative integer cap on concurrent live sessions across all workspace runtimes. Set to 0 to disable."
91
97
  }).option("max-pending-prompts-per-session", {
92
98
  type: "number",
93
99
  default: 5,
@@ -96,7 +102,7 @@ var serveCommand = {
96
102
  type: "string",
97
103
  array: true,
98
104
  requiresArg: true,
99
- description: "Absolute workspace path this daemon binds to. POST /session requests with a mismatched cwd return 400 workspace_mismatch. Defaults to process.cwd() when omitted. For multi-workspace deployments, run one `qwen serve` per workspace on separate ports (or behind an external orchestrator)."
105
+ description: "Absolute workspace path this daemon binds to. POST /session requests with a mismatched cwd return 400 workspace_mismatch. Defaults to process.cwd() when omitted. Repeat for sessions-only multi-workspace mode; legacy workspace APIs remain primary-workspace only."
100
106
  }).option("max-connections", {
101
107
  type: "number",
102
108
  default: 256,
@@ -139,10 +145,14 @@ var serveCommand = {
139
145
  // one place rather than drifting between CLI and bus.
140
146
  default: DEFAULT_RING_SIZE,
141
147
  description: "Per-session SSE replay ring depth. Sets the replay backlog available to `GET /session/:id/events` reconnects that send a `Last-Event-ID: N` header. Larger = more reconnect headroom at the cost of a few hundred KB extra RAM per session. Must be a positive finite integer."
148
+ }).option("compacted-replay-max-bytes", {
149
+ type: "number",
150
+ default: DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
151
+ description: "Per-session in-memory compacted replay snapshot byte cap for `POST /session/:id/load` late attaches. Larger = more recent history in load snapshots at higher heap cost. Must be a positive safe integer no larger than 256 MiB."
142
152
  }).option("http-bridge", {
143
153
  type: "boolean",
144
154
  default: true,
145
- description: "Stage 1 mode: one `qwen --acp` child per daemon (the daemon binds to one workspace at boot, multiplexing N sessions onto that child via the agent's native `newSession()`). Stage 2 native in-process mode is not yet implemented; this flag will become opt-in then."
155
+ description: "HTTP bridge mode: one `qwen --acp` child per registered workspace (sessions-only multi-workspace routing is enabled when multiple --workspace values are supplied). Stage 2 native in-process mode is not yet implemented; this flag will become opt-in then."
146
156
  }).option("mcp-client-budget", {
147
157
  type: "number",
148
158
  description: "Cap on live MCP clients spawned inside the ACP child for the bound workspace. Positive integer. Combine with --mcp-budget-mode to control behavior at the cap. When unset, mode defaults to off (no accounting-driven enforcement, but GET /workspace/mcp still reports `clientCount`). Distinct from claude-code MCP_SERVER_CONNECTION_BATCH_SIZE which gates startup concurrency, not the total client count."
@@ -287,7 +297,7 @@ var serveCommand = {
287
297
  process.exit(1);
288
298
  }
289
299
  }
290
- const { runQwenServe } = await import("./run-qwen-serve-XGJSNF6S.js");
300
+ const { runQwenServe } = await import("./run-qwen-serve-WUEHQROF.js");
291
301
  try {
292
302
  const handle = await runQwenServe({
293
303
  port: argv.port,
@@ -295,9 +305,11 @@ var serveCommand = {
295
305
  token: argv.token,
296
306
  mode: "http-bridge",
297
307
  maxSessions: argv["max-sessions"],
308
+ ...argv["max-total-sessions"] !== void 0 ? { maxTotalSessions: argv["max-total-sessions"] } : {},
298
309
  maxPendingPromptsPerSession,
299
310
  maxConnections: argv["max-connections"],
300
311
  eventRingSize: argv["event-ring-size"],
312
+ compactedReplayMaxBytes: argv["compacted-replay-max-bytes"],
301
313
  workspace: argv.workspace,
302
314
  requireAuth: argv["require-auth"],
303
315
  enableSessionShell: argv["enable-session-shell"],
@@ -0,0 +1,61 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ TotalSessionLimitExceededError
5
+ } from "./chunk-GGQQA4JW.js";
6
+ import {
7
+ init_esbuild_shims
8
+ } from "./chunk-A4BMJM77.js";
9
+ import {
10
+ __name
11
+ } from "./chunk-J2S4EL5Y.js";
12
+
13
+ // packages/cli/src/serve/total-session-admission.ts
14
+ init_esbuild_shims();
15
+ function createTotalSessionAdmissionController({
16
+ maxTotalSessions,
17
+ getBridges
18
+ }) {
19
+ let inFlight = 0;
20
+ const limit = maxTotalSessions === void 0 || maxTotalSessions === 0 || maxTotalSessions === Number.POSITIVE_INFINITY ? Number.POSITIVE_INFINITY : maxTotalSessions;
21
+ return {
22
+ admit(context) {
23
+ if (limit !== Number.POSITIVE_INFINITY) {
24
+ if (getLiveCount(getBridges()) + inFlight >= limit) {
25
+ throw Object.assign(new TotalSessionLimitExceededError(limit), {
26
+ operation: context.operation,
27
+ workspaceCwd: context.workspaceCwd,
28
+ ...context.sessionId ? { sessionId: context.sessionId } : {},
29
+ ...context.sourceSessionId ? { sourceSessionId: context.sourceSessionId } : {}
30
+ });
31
+ }
32
+ }
33
+ inFlight++;
34
+ let released = false;
35
+ return {
36
+ release() {
37
+ if (released) return;
38
+ released = true;
39
+ inFlight--;
40
+ }
41
+ };
42
+ },
43
+ snapshot() {
44
+ return { liveCount: getLiveCount(getBridges()), inFlight };
45
+ }
46
+ };
47
+ }
48
+ __name(createTotalSessionAdmissionController, "createTotalSessionAdmissionController");
49
+ function getLiveCount(bridges) {
50
+ return bridges.reduce((sum, bridge) => sum + bridge.sessionCount, 0);
51
+ }
52
+ __name(getLiveCount, "getLiveCount");
53
+
54
+ export {
55
+ createTotalSessionAdmissionController
56
+ };
57
+ /**
58
+ * @license
59
+ * Copyright 2026 Qwen Team
60
+ * SPDX-License-Identifier: Apache-2.0
61
+ */