@qwen-code/qwen-code 0.19.7 → 0.19.8-nightly.20260710.205430235

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 (292) hide show
  1. package/bundled/qc-helper/SKILL.md +1 -0
  2. package/bundled/qc-helper/docs/configuration/auth.md +40 -55
  3. package/bundled/qc-helper/docs/configuration/model-providers.md +224 -218
  4. package/bundled/qc-helper/docs/configuration/settings.md +43 -36
  5. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  6. package/bundled/qc-helper/docs/features/channels/overview.md +20 -12
  7. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -0
  8. package/bundled/qc-helper/docs/features/code-review.md +2 -1
  9. package/bundled/qc-helper/docs/features/commands.md +39 -38
  10. package/bundled/qc-helper/docs/features/computer-use.md +77 -0
  11. package/bundled/qc-helper/docs/features/hooks.md +36 -34
  12. package/bundled/qc-helper/docs/features/memory.md +1 -1
  13. package/bundled/qc-helper/docs/features/tool-use-summaries.md +19 -23
  14. package/bundled/qc-helper/docs/qwen-serve.md +22 -12
  15. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  16. package/bundled/review/DESIGN.md +14 -13
  17. package/bundled/review/SKILL.md +38 -61
  18. package/chunks/{MaxSizedBox-XY5LIO5O.js → MaxSizedBox-LOFYQFYJ.js} +13 -14
  19. package/chunks/{StandaloneSessionPicker-APISIRJZ.js → StandaloneSessionPicker-U5OQBGEB.js} +31 -29
  20. package/chunks/{acpAgent-MMOSC2YA.js → acpAgent-SDIFRIED.js} +637 -131
  21. package/chunks/{agent-TKIBLLQT.js → agent-JIBBVHNQ.js} +10 -10
  22. package/chunks/{agent-headless-VLX4C7KX.js → agent-headless-6LGZYJYU.js} +10 -10
  23. package/chunks/{anthropicContentGenerator-AKYPSZIV.js → anthropicContentGenerator-55REPTTF.js} +30 -3
  24. package/chunks/{artifact-tool-D233YJFH.js → artifact-tool-EIN46DPM.js} +1 -1
  25. package/chunks/{askUserQuestion-MKL5ZTMC.js → askUserQuestion-6YX6ZRX7.js} +1 -1
  26. package/chunks/{bridge-BCU73DZO.js → bridge-HVPFYNM4.js} +17 -16
  27. package/chunks/{ca-HCMB2I54.js → ca-MULEGDVS.js} +89 -5
  28. package/chunks/{channel-worker-supervisor-CRCVYQIE.js → channel-worker-supervisor-OPXXT4JK.js} +20 -3
  29. package/chunks/{chunk-DGHJTO2K.js → chunk-2AF26HVM.js} +31 -2
  30. package/chunks/{chunk-3B26UVCX.js → chunk-2GUVUHJY.js} +6 -4
  31. package/chunks/{chunk-FV7425LN.js → chunk-2SZOMGOR.js} +4 -1
  32. package/chunks/{chunk-CNSF3WO5.js → chunk-32KS5XSX.js} +3 -3
  33. package/chunks/{chunk-4UCTWSTP.js → chunk-34UUM3IN.js} +1 -1
  34. package/chunks/{chunk-G7ZG7CA6.js → chunk-3UP777ZS.js} +8 -7
  35. package/chunks/{chunk-MIG5SQNL.js → chunk-4CSVIZLT.js} +4 -4
  36. package/chunks/{chunk-GD236YPV.js → chunk-4ONWIT5C.js} +1 -1
  37. package/chunks/{chunk-4ZJIPVPB.js → chunk-4XK7TNBP.js} +8 -8
  38. package/chunks/{chunk-I4A4K72C.js → chunk-5F2H3PXG.js} +446 -232
  39. package/chunks/chunk-5HOF2K5U.js +19 -0
  40. package/chunks/{chunk-GMOWQOQQ.js → chunk-5ZVIYNLN.js} +228 -36
  41. package/chunks/chunk-6O6Z2I5Q.js +292 -0
  42. package/chunks/{chunk-RYFZCUJO.js → chunk-6QKT5VNZ.js} +14 -6
  43. package/chunks/{chunk-SD4N3QJ2.js → chunk-6ZPSVWLF.js} +61 -17
  44. package/chunks/{chunk-X265R5C6.js → chunk-7YGSDQ5J.js} +2 -2
  45. package/chunks/{chunk-PRDFOIZF.js → chunk-A6KEUFJO.js} +32 -5
  46. package/chunks/{chunk-OWVIH4HY.js → chunk-B5OAMPJ5.js} +389 -87
  47. package/chunks/{chunk-ME3YSROJ.js → chunk-CV2AT2WJ.js} +22 -10
  48. package/chunks/{chunk-U4FRHCLA.js → chunk-DDKUYKHA.js} +1912 -201
  49. package/chunks/{chunk-YDSYD7UI.js → chunk-E3SA2LY4.js} +2 -2
  50. package/chunks/{chunk-6IAWPIQ6.js → chunk-EDM5O3SX.js} +2 -2
  51. package/chunks/{chunk-CISB3IQF.js → chunk-FONJQQWI.js} +65 -6
  52. package/chunks/{chunk-FRFFNYUY.js → chunk-G3WIMNL4.js} +3 -3
  53. package/chunks/{chunk-B34OV7K2.js → chunk-GGQQA4JW.js} +13 -0
  54. package/chunks/chunk-GLE2YUPU.js +34 -0
  55. package/chunks/{chunk-MJI36HER.js → chunk-GOTMC3BX.js} +1 -1
  56. package/chunks/{chunk-RFIL6REB.js → chunk-GRB4QSBD.js} +168 -31
  57. package/chunks/chunk-GVVY7GSP.js +38 -0
  58. package/chunks/{chunk-7JGISHHZ.js → chunk-HDEUQRAR.js} +14 -156
  59. package/chunks/{chunk-NZEGNV4V.js → chunk-HPRI22FZ.js} +6 -6
  60. package/chunks/{chunk-STAZRKOT.js → chunk-I34IHZFJ.js} +117 -459
  61. package/chunks/{chunk-JF7DFPQ5.js → chunk-I3MBKL6Z.js} +12 -2
  62. package/chunks/{chunk-DNV4FSN5.js → chunk-I5XN6KDI.js} +21 -4
  63. package/chunks/{chunk-VZ7HY3YU.js → chunk-IAMRWMFU.js} +1 -1
  64. package/chunks/{chunk-44NROQYV.js → chunk-JOQMY62N.js} +1 -1
  65. package/chunks/{chunk-VQWAZSXN.js → chunk-JW4IKIZ2.js} +57 -35
  66. package/chunks/{chunk-SAIILPQ3.js → chunk-KJMYXFUR.js} +3 -1
  67. package/chunks/{chunk-AFOLR6YL.js → chunk-KQ6MKCFE.js} +102 -16
  68. package/chunks/{chunk-X3YGAX7V.js → chunk-KS2FRTYI.js} +2 -0
  69. package/chunks/{chunk-IUE7YWC3.js → chunk-LE7EF36E.js} +7 -7
  70. package/chunks/{chunk-B4U2M63D.js → chunk-LRY7HD3Q.js} +2101 -11
  71. package/chunks/{chunk-PUQLHSQ2.js → chunk-ME7E6WZB.js} +6 -8
  72. package/chunks/{chunk-LEIJKM7Q.js → chunk-MEK7ZRJ3.js} +1 -1
  73. package/chunks/{chunk-AJBEAUIS.js → chunk-MG2TNCRX.js} +4 -3
  74. package/chunks/{chunk-GL5TV7B5.js → chunk-MSMQURDV.js} +21 -5
  75. package/chunks/{chunk-6BN7NZ5Z.js → chunk-NXDJLKKX.js} +4 -6
  76. package/chunks/{chunk-FEJ2FZ3U.js → chunk-NY2ZOFMM.js} +1 -1
  77. package/chunks/{chunk-QZF5U5KA.js → chunk-NY5BE643.js} +8 -8
  78. package/chunks/{chunk-4RQIB5UZ.js → chunk-O2YT7VB4.js} +0 -34
  79. package/chunks/{chunk-4KJ2BPIT.js → chunk-OACJLMLD.js} +2 -38
  80. package/chunks/chunk-PCWSPWXZ.js +168 -0
  81. package/chunks/{chunk-XPJH4PKR.js → chunk-PJ74K3DH.js} +1 -1
  82. package/chunks/{chunk-FTFXDZYI.js → chunk-PW7VWRLX.js} +45 -29
  83. package/chunks/chunk-R3SLDK6Y.js +468 -0
  84. package/chunks/{chunk-4O344UEE.js → chunk-SDJOZOYY.js} +38 -18
  85. package/chunks/{chunk-ALZ75L2X.js → chunk-SMYIBRAA.js} +412 -376
  86. package/chunks/{chunk-CCGOFQV3.js → chunk-SS5P6JM6.js} +6 -5
  87. package/chunks/{chunk-AIY5UTFI.js → chunk-T3XHYGMG.js} +925 -2872
  88. package/chunks/{chunk-Q6OEPOOC.js → chunk-TB6GWNV4.js} +1 -1
  89. package/chunks/{chunk-24XYI5EI.js → chunk-TERKDCOZ.js} +3 -3
  90. package/chunks/chunk-TVO5C767.js +159 -0
  91. package/chunks/{chunk-TBAZMRW3.js → chunk-TVW53EK7.js} +1 -1
  92. package/chunks/chunk-TX5QZYK6.js +296 -0
  93. package/chunks/{chunk-JD33UY7E.js → chunk-TZRVTPJ6.js} +15 -9
  94. package/chunks/{chunk-65CFHNSE.js → chunk-UAFB2DNB.js} +59 -59
  95. package/chunks/{chunk-QAKFYMJI.js → chunk-UOXLB2LY.js} +152 -17
  96. package/chunks/chunk-V35MD7KN.js +13 -0
  97. package/chunks/{chunk-XSAFNANZ.js → chunk-VWDJHVXM.js} +12 -12
  98. package/chunks/{chunk-XISQIIT7.js → chunk-W77ZLCSX.js} +1 -1
  99. package/chunks/{chunk-BWVQN2HV.js → chunk-WTEIUA2V.js} +4 -4
  100. package/chunks/{chunk-TDGF35EN.js → chunk-XOHNA2S6.js} +1 -1
  101. package/chunks/{chunk-HJ3GX3Y3.js → chunk-XZVUZSDG.js} +25 -11
  102. package/chunks/{chunk-ADZG46HR.js → chunk-YHGCTQG3.js} +1 -1
  103. package/chunks/{chunk-2NPS2UDH.js → chunk-YUNPEB3Q.js} +478 -43
  104. package/chunks/chunk-Z3I3QJK3.js +47 -0
  105. package/chunks/{chunk-P7I3D7FM.js → chunk-Z466FBSA.js} +1 -1
  106. package/chunks/{chunk-YEGT55NW.js → chunk-ZDAZSR2O.js} +3009 -1220
  107. package/chunks/{chunk-VEB3NYSO.js → chunk-ZJQBTFJ6.js} +6 -1
  108. package/chunks/chunk-ZL5HN75Q.js +61 -0
  109. package/chunks/{computer-use-X4KUU3NM.js → computer-use-IW5XBECT.js} +10 -10
  110. package/chunks/{contextCommand-LAYJZF7H.js → contextCommand-4QPLK2SH.js} +14 -14
  111. package/chunks/create-sub-session-7JK3EYWA.js +212 -0
  112. package/chunks/create-sub-session-EVYZYAE3.js +364 -0
  113. package/chunks/{cron-create-JSXEIPVS.js → cron-create-2CCO2PW6.js} +2 -2
  114. package/chunks/{cron-delete-OIFVEPGU.js → cron-delete-ETVTP5IV.js} +2 -2
  115. package/chunks/{cron-list-D4ZX4IOE.js → cron-list-FS3KWOY5.js} +2 -2
  116. package/chunks/{daemon-F3I2RXP6.js → daemon-NNUYIBWA.js} +461 -0
  117. package/chunks/{daemon-status-provider-XSAFKVDS.js → daemon-status-provider-3EPG6BXX.js} +21 -19
  118. package/chunks/{de-PLLFDERI.js → de-QRG6J2CM.js} +89 -5
  119. package/chunks/{dist-YTRKAVUB.js → dist-3EIIFOJV.js} +1 -1
  120. package/chunks/{dist-PKFTNUHO.js → dist-7F5GWZDZ.js} +2 -1
  121. package/chunks/{dist-FQ5WRJPL.js → dist-CBJ7OJ5R.js} +2 -2
  122. package/chunks/{dist-OT7G2WNM.js → dist-LIFJ2YAI.js} +1 -1
  123. package/chunks/{dist-573HNSVO.js → dist-OKXOQ63L.js} +2 -1
  124. package/chunks/{dist-IMFFBMAT.js → dist-SU5LY5R4.js} +3 -1
  125. package/chunks/{earlyInputCapture-AERYYGXE.js → earlyInputCapture-HP5XAS7A.js} +10 -10
  126. package/chunks/{edit-WZTZDGCI.js → edit-MDICC6KH.js} +11 -11
  127. package/chunks/{en-GA2RMXY5.js → en-HF3KFWZG.js} +91 -5
  128. package/chunks/{enter-worktree-DEPXBJEL.js → enter-worktree-JWTRNEN4.js} +10 -10
  129. package/chunks/{enterPlanMode-JFGXZHHJ.js → enterPlanMode-GMRZMTBQ.js} +10 -10
  130. package/chunks/environment-2CJAFOFN.js +88 -0
  131. package/chunks/{errors-GMZL4QV7.js → errors-UZOVFD2U.js} +13 -13
  132. package/chunks/{exit-worktree-Y7XBK3VV.js → exit-worktree-QQGEG343.js} +10 -10
  133. package/chunks/{exitPlanMode-WQQER65F.js → exitPlanMode-YK2JVAAB.js} +10 -10
  134. package/chunks/{fast-path-W2U6XDNO.js → fast-path-6SD4JNQW.js} +12 -3
  135. package/chunks/{fast-path-settings-RCRXH2JG.js → fast-path-settings-RAQGCIT7.js} +3 -2
  136. package/chunks/{fr-GWNQG4XH.js → fr-RSCO6HHD.js} +89 -5
  137. package/chunks/{gemini-T4WX6SRW.js → gemini-TFQXPUZB.js} +436 -140
  138. package/chunks/{geminiContentGenerator-MKQACXEJ.js → geminiContentGenerator-LJ2BNXHX.js} +1 -1
  139. package/chunks/{glob-4KKSHZDF.js → glob-3IJ6JR5W.js} +10 -10
  140. package/chunks/{grep-GHRYXSLZ.js → grep-UFZ2RFQZ.js} +10 -10
  141. package/chunks/{handleAutoUpdate-HN7ZOSXY.js → handleAutoUpdate-TEZC5ZIR.js} +17 -13
  142. package/chunks/i18n-5QEODTJV.js +84 -0
  143. package/chunks/{initializer-SRN3IM42.js → initializer-222MPCLQ.js} +18 -16
  144. package/chunks/installationInfo-OZ62OHZ2.js +65 -0
  145. package/chunks/{ja-2HOTA47X.js → ja-RRFGG2DC.js} +89 -5
  146. package/chunks/{list-INTVXUPA.js → list-BN5VBIIE.js} +20 -18
  147. package/chunks/{loadedSettingsAdapter-QVHHQPGM.js → loadedSettingsAdapter-EHTUJRFB.js} +18 -16
  148. package/chunks/{loop-wakeup-OHWEMFP5.js → loop-wakeup-SR2KWT4B.js} +3 -3
  149. package/chunks/{ls-L654WOAT.js → ls-RUBQK5Q2.js} +2 -2
  150. package/chunks/{lsp-M35KE54Y.js → lsp-DUTVY2ZA.js} +3 -5
  151. package/chunks/{mcp-7V4T46RG.js → mcp-OPGHD26Y.js} +18 -16
  152. package/chunks/{monitor-464OY2UE.js → monitor-WXBDVYYV.js} +10 -10
  153. package/chunks/{nonInteractiveCli-LJEEODU2.js → nonInteractiveCli-CWIBGJ4U.js} +54 -49
  154. package/chunks/{notebook-edit-BLJYCNDO.js → notebook-edit-T7P7M73F.js} +11 -11
  155. package/chunks/{openaiContentGenerator-PFF6HYB2.js → openaiContentGenerator-OES264C3.js} +7 -7
  156. package/chunks/{pidfile-LIBUENIV.js → pidfile-LJ3NLS2P.js} +10 -10
  157. package/chunks/{pt-2THT3YHA.js → pt-D4CG46JM.js} +89 -5
  158. package/chunks/{qwenContentGenerator-SUUHZ6CR.js → qwenContentGenerator-QJ67LAJ5.js} +12 -12
  159. package/chunks/{read-file-L7TBQVX7.js → read-file-KZD7TLU7.js} +5 -5
  160. package/chunks/{read-mcp-resource-CNQHBSJM.js → read-mcp-resource-Q56IMYOH.js} +1 -1
  161. package/chunks/{record-artifact-PP3LKHTS.js → record-artifact-GZ5D5HZX.js} +4 -4
  162. package/chunks/{ripGrep-CKKX3GRB.js → ripGrep-KUJLX75U.js} +10 -10
  163. package/chunks/{ru-Z67YJHBG.js → ru-O2QUEL22.js} +89 -5
  164. package/chunks/{run-qwen-serve-5OKADVLE.js → run-qwen-serve-M52KVRGI.js} +664 -153
  165. package/chunks/{scheduler-ZRW3AIDU.js → scheduler-FFATTAYZ.js} +10 -10
  166. package/chunks/{send-message-OA6MV4EU.js → send-message-HAGK3VTV.js} +2 -2
  167. package/chunks/{serve-36WS32W6.js → serve-B5S32524.js} +21 -18
  168. package/chunks/{server-M372UENX.js → server-6HK5FJMR.js} +3301 -665
  169. package/chunks/{session-F5KSNP2N.js → session-3WB76VTQ.js} +55 -50
  170. package/chunks/{settings-WFLNS3WT.js → settings-W3IX7NHK.js} +27 -23
  171. package/chunks/{shell-DEDSWN56.js → shell-HZIU2ZG7.js} +10 -10
  172. package/chunks/{skill-A2TL2NPC.js → skill-34OUFB65.js} +5 -5
  173. package/chunks/{spawnChannel-RQHUWTCL.js → spawnChannel-FTZJ3I5O.js} +12 -12
  174. package/chunks/{src-XKZMNHXS.js → src-NELBIIGI.js} +48 -10
  175. package/chunks/standalone-update-LICI2VSK.js +79 -0
  176. package/chunks/{startInteractiveUI-REKSTOHU.js → startInteractiveUI-LZEV5YI2.js} +2203 -1764
  177. package/chunks/stdioHelpers-CA7MG65Z.js +14 -0
  178. package/chunks/{syntheticOutput-F7LSDCAR.js → syntheticOutput-XFFJVCGV.js} +2 -2
  179. package/chunks/{task-create-RPFZNB4B.js → task-create-VINUSVBF.js} +3 -3
  180. package/chunks/{task-list-TGGJX7EA.js → task-list-YZ2AWQEG.js} +1 -1
  181. package/chunks/{task-stop-W7NGTMYQ.js → task-stop-PEXPKUW3.js} +1 -1
  182. package/chunks/{task-update-5WUG5MVQ.js → task-update-BHIX57YH.js} +3 -3
  183. package/chunks/{team-create-TBQVWAG7.js → team-create-2JS2OYSF.js} +10 -10
  184. package/chunks/{team-delete-UHQQ2QQX.js → team-delete-2OHXSBVS.js} +1 -1
  185. package/chunks/{team-plan-approval-FZPGUSHJ.js → team-plan-approval-PHLGYUY7.js} +10 -10
  186. package/chunks/{theme-manager-DQZVNSOC.js → theme-manager-UYXLX37P.js} +10 -10
  187. package/chunks/{todoWrite-C4ZAMSR3.js → todoWrite-7Q4ELT4F.js} +1 -1
  188. package/chunks/{tool-search-FDQ3SLNJ.js → tool-search-2MWA3GWE.js} +6 -6
  189. package/chunks/total-session-admission-PRZK35X4.js +72 -0
  190. package/chunks/{trustedFolders-Z475EIHL.js → trustedFolders-IT4JBNPG.js} +12 -12
  191. package/chunks/{updateCheck-E2ZX7RL7.js → updateCheck-X3ZWDO3Z.js} +17 -13
  192. package/chunks/updateEventEmitter-NXWTRHXY.js +10 -0
  193. package/chunks/{validateNonInterActiveAuth-O4ECBHQL.js → validateNonInterActiveAuth-IAOL7CM3.js} +51 -45
  194. package/chunks/{version-CEDD6ZZR.js → version-25QF6A5H.js} +1 -1
  195. package/chunks/{web-fetch-UYGMOHW4.js → web-fetch-I7FOWHGA.js} +2 -2
  196. package/chunks/{workflow-CQQ4J4I6.js → workflow-LZZ5U3IT.js} +11 -11
  197. package/chunks/{workspace-providers-status-MVYXMYDG.js → workspace-providers-status-7DTOAWEL.js} +21 -18
  198. package/chunks/workspace-registry-BBIPESIZ.js +76 -0
  199. package/chunks/{workspace-service-OMBR6ZLG.js → workspace-service-SY3P3FUY.js} +25 -23
  200. package/chunks/{workspace-skills-status-IMMQ7CAY.js → workspace-skills-status-GTT2A4WN.js} +20 -18
  201. package/chunks/{write-file-VWGY7AJP.js → write-file-M6IHNW3V.js} +11 -11
  202. package/chunks/{zh-7XVVRTDH.js → zh-K2EH6BDD.js} +91 -5
  203. package/chunks/{zh-TW-DPH554OG.js → zh-TW-4GPXJ7ZY.js} +91 -5
  204. package/cli.js +13 -12
  205. package/locales/ca.js +115 -7
  206. package/locales/de.js +114 -7
  207. package/locales/en.js +118 -7
  208. package/locales/fr.js +115 -7
  209. package/locales/ja.js +116 -6
  210. package/locales/pt.js +114 -7
  211. package/locales/ru.js +114 -7
  212. package/locales/zh-TW.js +114 -6
  213. package/locales/zh.js +114 -6
  214. package/package.json +3 -6
  215. package/web-shell/assets/{arc-C7hjaa7g.js → arc-G3HZaqaL.js} +1 -1
  216. package/web-shell/assets/{architectureDiagram-3BPJPVTR-pm9KtMZY.js → architectureDiagram-3BPJPVTR-DhBrwwch.js} +1 -1
  217. package/web-shell/assets/{blockDiagram-GPEHLZMM-CApElKsU.js → blockDiagram-GPEHLZMM-16JbbF0N.js} +1 -1
  218. package/web-shell/assets/{c4Diagram-AAUBKEIU-BeDe0-9N.js → c4Diagram-AAUBKEIU-DQ3-pKgc.js} +1 -1
  219. package/web-shell/assets/channel-CX7ZHuuL.js +1 -0
  220. package/web-shell/assets/{chunk-2J33WTMH-DJEkmLdl.js → chunk-2J33WTMH-ERCn30sp.js} +1 -1
  221. package/web-shell/assets/{chunk-4BX2VUAB-DXX8gdpe.js → chunk-4BX2VUAB-DTysfbFi.js} +1 -1
  222. package/web-shell/assets/{chunk-55IACEB6-DORmk1kQ.js → chunk-55IACEB6-BFGrbTBi.js} +1 -1
  223. package/web-shell/assets/{chunk-727SXJPM-DWmO4mCZ.js → chunk-727SXJPM-DCX4Oar-.js} +1 -1
  224. package/web-shell/assets/{chunk-AQP2D5EJ-C7LRaYw2.js → chunk-AQP2D5EJ-CgT6sBr3.js} +1 -1
  225. package/web-shell/assets/{chunk-FMBD7UC4-CCdXgyC5.js → chunk-FMBD7UC4-C1Uuk1KV.js} +1 -1
  226. package/web-shell/assets/{chunk-ND2GUHAM-SyL_xvWc.js → chunk-ND2GUHAM-DajgESiu.js} +1 -1
  227. package/web-shell/assets/{chunk-QZHKN3VN-BzOuCKxa.js → chunk-QZHKN3VN-DLJSvy9X.js} +1 -1
  228. package/web-shell/assets/classDiagram-4FO5ZUOK-B-oT3UI8.js +1 -0
  229. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B-oT3UI8.js +1 -0
  230. package/web-shell/assets/{cose-bilkent-S5V4N54A-BMPWyDKc.js → cose-bilkent-S5V4N54A-CH3w3qs7.js} +1 -1
  231. package/web-shell/assets/{dagre-BM42HDAG-B_GnPWik.js → dagre-BM42HDAG-BloXan9B.js} +1 -1
  232. package/web-shell/assets/{diagram-2AECGRRQ-fJqMc3S_.js → diagram-2AECGRRQ-BbZiGcmK.js} +1 -1
  233. package/web-shell/assets/{diagram-5GNKFQAL-ximV3O9D.js → diagram-5GNKFQAL-GQlYvLJv.js} +1 -1
  234. package/web-shell/assets/{diagram-KO2AKTUF-2vVyjzqw.js → diagram-KO2AKTUF-CtIBvVq3.js} +1 -1
  235. package/web-shell/assets/{diagram-LMA3HP47-Dckcx1sT.js → diagram-LMA3HP47-D5TBo9a2.js} +1 -1
  236. package/web-shell/assets/{diagram-OG6HWLK6-BAVv47ga.js → diagram-OG6HWLK6-N0gQhw6R.js} +1 -1
  237. package/web-shell/assets/{erDiagram-TEJ5UH35-Bn3nf5J0.js → erDiagram-TEJ5UH35-zab9vDj3.js} +1 -1
  238. package/web-shell/assets/{flowDiagram-I6XJVG4X-BIbGF9JT.js → flowDiagram-I6XJVG4X-BnnjtWJa.js} +1 -1
  239. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CDbhb3AH.js → ganttDiagram-6RSMTGT7-2T0SQU4f.js} +1 -1
  240. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CbKG1a_w.js → gitGraphDiagram-PVQCEYII-DAD6_que.js} +1 -1
  241. package/web-shell/assets/index-XLkWfLja.css +5 -0
  242. package/web-shell/assets/index-srlTR1Jg.js +786 -0
  243. package/web-shell/assets/{infoDiagram-5YYISTIA-DUFxTy8m.js → infoDiagram-5YYISTIA-C-j8d0xO.js} +1 -1
  244. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D69hrBG8.js → ishikawaDiagram-YF4QCWOH-D97bAKoT.js} +1 -1
  245. package/web-shell/assets/{journeyDiagram-JHISSGLW-DsvEw51Y.js → journeyDiagram-JHISSGLW-BJAHfJmm.js} +1 -1
  246. package/web-shell/assets/{kanban-definition-UN3LZRKU-lFFjZEYd.js → kanban-definition-UN3LZRKU-CZgR5aac.js} +1 -1
  247. package/web-shell/assets/{linear-Bo5bWzvo.js → linear-DOd4kYhA.js} +1 -1
  248. package/web-shell/assets/{mermaid.core-C_HKMJx5.js → mermaid.core-BBaplnXA.js} +5 -5
  249. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DlV-NUTs.js → mindmap-definition-RKZ34NQL-IhBF_BR5.js} +1 -1
  250. package/web-shell/assets/{pieDiagram-4H26LBE5-B2e6FH2a.js → pieDiagram-4H26LBE5-B4R4sYyH.js} +1 -1
  251. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D75kSk-b.js → quadrantDiagram-W4KKPZXB-DKd1SJ61.js} +1 -1
  252. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CQ6xakhM.js → requirementDiagram-4Y6WPE33-Cw96V0Xb.js} +1 -1
  253. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-J_XTKrcY.js → sankeyDiagram-5OEKKPKP-C6ne_yWi.js} +1 -1
  254. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D7jTcBtf.js → sequenceDiagram-3UESZ5HK-CCyp4PDp.js} +1 -1
  255. package/web-shell/assets/{stateDiagram-AJRCARHV-CrlM_OT3.js → stateDiagram-AJRCARHV-DHvIqTmx.js} +1 -1
  256. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DvFhmpwA.js +1 -0
  257. package/web-shell/assets/{timeline-definition-PNZ67QCA-5oZi76Ef.js → timeline-definition-PNZ67QCA-amb3n9zH.js} +1 -1
  258. package/web-shell/assets/{vennDiagram-CIIHVFJN-DO5YptPK.js → vennDiagram-CIIHVFJN-Abf2qRFJ.js} +1 -1
  259. package/web-shell/assets/{wardley-L42UT6IY-4t1eJDvM.js → wardley-L42UT6IY-BBlOp1av.js} +1 -1
  260. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DKZc661S.js → wardleyDiagram-YWT4CUSO-gE_sZ0Ak.js} +1 -1
  261. package/web-shell/assets/{xychartDiagram-2RQKCTM6-su9hp08G.js → xychartDiagram-2RQKCTM6-BwOni53i.js} +1 -1
  262. package/web-shell/index.html +16 -4
  263. package/chunks/chunk-6SHO7WFF.js +0 -79
  264. package/chunks/chunk-IFEWJXFS.js +0 -37
  265. package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +0 -35
  266. package/node_modules/@qwen-code/audio-capture/dist/index.js +0 -48
  267. package/node_modules/@qwen-code/audio-capture/dist/index.js.map +0 -1
  268. package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +0 -7
  269. package/node_modules/@qwen-code/audio-capture/dist/platform.js +0 -18
  270. package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +0 -1
  271. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +0 -21
  272. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +0 -58
  273. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +0 -5
  274. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +0 -84
  275. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +0 -19
  276. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +0 -6
  277. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +0 -207
  278. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +0 -7
  279. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +0 -43
  280. package/node_modules/@qwen-code/audio-capture/package.json +0 -30
  281. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  282. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  283. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
  284. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
  285. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  286. package/web-shell/assets/channel-BNf1dW-j.js +0 -1
  287. package/web-shell/assets/classDiagram-4FO5ZUOK-uOIGlzgi.js +0 -1
  288. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-uOIGlzgi.js +0 -1
  289. package/web-shell/assets/index-CnE2ur2L.js +0 -779
  290. package/web-shell/assets/index-hSKXrlSE.css +0 -5
  291. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Bs4TK_84.js +0 -1
  292. /package/chunks/{chunk-Y6Z2O3WR.js → chunk-JM7BYJO5.js} +0 -0
@@ -2,10 +2,10 @@
2
2
  "use strict";
3
3
  import {
4
4
  functionResponsePartsToString
5
- } from "./chunk-OWVIH4HY.js";
5
+ } from "./chunk-B5OAMPJ5.js";
6
6
  import {
7
7
  parseAndFormatApiError
8
- } from "./chunk-YEGT55NW.js";
8
+ } from "./chunk-ZDAZSR2O.js";
9
9
  import {
10
10
  init_esbuild_shims
11
11
  } from "./chunk-A4BMJM77.js";
@@ -9,12 +9,12 @@ import {
9
9
 
10
10
  // packages/cli/src/serve/workspace-skills-mapping.ts
11
11
  init_esbuild_shims();
12
- function mapSkillConfigToStatus(skill, disabledSkillNames = /* @__PURE__ */ new Set()) {
12
+ function mapSkillConfigToStatus(skill, disabledSkillNames = /* @__PURE__ */ new Set(), opts = {}) {
13
13
  const userDisabled = disabledSkillNames.has(skill.name.toLowerCase());
14
14
  const modelInvocable = skill.disableModelInvocation !== true;
15
15
  return {
16
16
  kind: "skill",
17
- status: userDisabled ? "disabled" : "ok",
17
+ status: opts.disabled || userDisabled ? "disabled" : "ok",
18
18
  name: skill.name,
19
19
  description: skill.description,
20
20
  level: skill.level,
@@ -5,10 +5,10 @@ import {
5
5
  TaggedThinkingParser,
6
6
  getRateLimitErrorDetails,
7
7
  openaiRequestCaptureContext
8
- } from "./chunk-GMOWQOQQ.js";
8
+ } from "./chunk-5ZVIYNLN.js";
9
9
  import {
10
10
  RequestTokenizer
11
- } from "./chunk-44NROQYV.js";
11
+ } from "./chunk-JOQMY62N.js";
12
12
  import {
13
13
  DASHSCOPE_PROXY_BASE_URL,
14
14
  DEFAULT_DASHSCOPE_BASE_URL,
@@ -24,7 +24,7 @@ import {
24
24
  import {
25
25
  runtimeDiagnostics,
26
26
  safeJsonParse
27
- } from "./chunk-CCGOFQV3.js";
27
+ } from "./chunk-SS5P6JM6.js";
28
28
  import {
29
29
  GenerateContentResponse
30
30
  } from "./chunk-55ZMG67I.js";
@@ -8154,6 +8154,33 @@ var StreamInactivityTimeoutError = class extends Error {
8154
8154
  }
8155
8155
  code = "ETIMEDOUT";
8156
8156
  };
8157
+ var NON_SSE_BODY_PREFIX_LIMIT = 512;
8158
+ function isSSECompatibleContentType(contentType) {
8159
+ if (!contentType) return true;
8160
+ const mediaType = (contentType.split(";")[0] ?? "").trim().toLowerCase();
8161
+ return mediaType === "text/event-stream" || mediaType === "application/x-ndjson" || mediaType === "application/stream+json";
8162
+ }
8163
+ __name(isSSECompatibleContentType, "isSSECompatibleContentType");
8164
+ var NonSSEResponseError = class extends Error {
8165
+ constructor(contentType, httpStatus, bodyPrefix, requestId) {
8166
+ const preview = bodyPrefix.length > 0 ? ` Body prefix: ${bodyPrefix}` : "";
8167
+ super(
8168
+ `Streaming request received a non-SSE response (HTTP ${httpStatus}, Content-Type: ${contentType || "unknown"}).${preview}`
8169
+ );
8170
+ this.contentType = contentType;
8171
+ this.httpStatus = httpStatus;
8172
+ this.bodyPrefix = bodyPrefix;
8173
+ this.requestId = requestId;
8174
+ this.name = "NonSSEResponseError";
8175
+ this.status = httpStatus;
8176
+ this.request_id = requestId;
8177
+ }
8178
+ static {
8179
+ __name(this, "NonSSEResponseError");
8180
+ }
8181
+ status;
8182
+ request_id;
8183
+ };
8157
8184
  function resolveStreamIdleTimeoutMs(config) {
8158
8185
  const fromConfig = config.streamIdleTimeoutMs;
8159
8186
  if (typeof fromConfig === "number") {
@@ -8283,9 +8310,41 @@ var ContentGenerationPipeline = class {
8283
8310
  const perRequestAc = createChildAbortController(parentSignal);
8284
8311
  let stream;
8285
8312
  try {
8286
- stream = await this.client.chat.completions.create(openaiRequest, {
8287
- signal: perRequestAc.signal
8288
- });
8313
+ const createPromise = this.client.chat.completions.create(
8314
+ openaiRequest,
8315
+ { signal: perRequestAc.signal }
8316
+ );
8317
+ if (typeof createPromise.withResponse === "function") {
8318
+ const {
8319
+ data,
8320
+ response: httpResponse,
8321
+ request_id
8322
+ } = await createPromise.withResponse();
8323
+ stream = data;
8324
+ const contentType = httpResponse.headers.get("content-type") ?? null;
8325
+ if (!isSSECompatibleContentType(contentType)) {
8326
+ let bodyPrefix = "";
8327
+ try {
8328
+ if (httpResponse.body) {
8329
+ const reader = httpResponse.body.getReader();
8330
+ const { value } = await reader.read();
8331
+ reader.releaseLock();
8332
+ if (value) {
8333
+ bodyPrefix = new TextDecoder().decode(value).slice(0, NON_SSE_BODY_PREFIX_LIMIT);
8334
+ }
8335
+ }
8336
+ } catch {
8337
+ }
8338
+ throw new NonSSEResponseError(
8339
+ contentType,
8340
+ httpResponse.status,
8341
+ bodyPrefix,
8342
+ request_id
8343
+ );
8344
+ }
8345
+ } else {
8346
+ stream = await createPromise;
8347
+ }
8289
8348
  } catch (e) {
8290
8349
  perRequestAc.abort();
8291
8350
  throw e;
@@ -2,11 +2,11 @@
2
2
  "use strict";
3
3
  import {
4
4
  writeStderrLine
5
- } from "./chunk-Y6Z2O3WR.js";
5
+ } from "./chunk-JM7BYJO5.js";
6
6
  import {
7
7
  JsonFormatter,
8
8
  parseAndFormatApiError
9
- } from "./chunk-YEGT55NW.js";
9
+ } from "./chunk-ZDAZSR2O.js";
10
10
  import {
11
11
  FatalBudgetExceededError,
12
12
  FatalCancellationError,
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-22MNNNXE.js";
16
16
  import {
17
17
  runExitCleanup
18
- } from "./chunk-4UCTWSTP.js";
18
+ } from "./chunk-34UUM3IN.js";
19
19
  import {
20
20
  init_esbuild_shims
21
21
  } from "./chunk-A4BMJM77.js";
@@ -118,6 +118,18 @@ var SessionLimitExceededError = class extends Error {
118
118
  this.limit = limit;
119
119
  }
120
120
  };
121
+ var TotalSessionLimitExceededError = class extends Error {
122
+ static {
123
+ __name(this, "TotalSessionLimitExceededError");
124
+ }
125
+ limit;
126
+ scope = "total";
127
+ constructor(limit) {
128
+ super(`Total session limit reached (${limit})`);
129
+ this.name = "TotalSessionLimitExceededError";
130
+ this.limit = limit;
131
+ }
132
+ };
121
133
  var PromptQueueFullError = class extends Error {
122
134
  static {
123
135
  __name(this, "PromptQueueFullError");
@@ -394,6 +406,7 @@ export {
394
406
  RestoreInProgressError,
395
407
  InvalidSessionScopeError,
396
408
  SessionLimitExceededError,
409
+ TotalSessionLimitExceededError,
397
410
  PromptQueueFullError,
398
411
  WorkspaceMismatchError,
399
412
  InvalidClientIdError,
@@ -0,0 +1,34 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ init_esbuild_shims
5
+ } from "./chunk-A4BMJM77.js";
6
+ import {
7
+ __name
8
+ } from "./chunk-J2S4EL5Y.js";
9
+
10
+ // packages/acp-bridge/src/replayWindowLimits.ts
11
+ init_esbuild_shims();
12
+ var DEFAULT_COMPACTED_REPLAY_MAX_BYTES = 4 * 1024 * 1024;
13
+ var MAX_COMPACTED_REPLAY_MAX_BYTES = 256 * 1024 * 1024;
14
+ function normalizeCompactedReplayMaxBytes(value) {
15
+ if (value === void 0) return DEFAULT_COMPACTED_REPLAY_MAX_BYTES;
16
+ if (!Number.isSafeInteger(value) || value < 1 || value > MAX_COMPACTED_REPLAY_MAX_BYTES) {
17
+ throw new TypeError(
18
+ `Invalid compactedReplayMaxBytes: ${value}. Must be a positive safe integer in [1, ${MAX_COMPACTED_REPLAY_MAX_BYTES}].`
19
+ );
20
+ }
21
+ return value;
22
+ }
23
+ __name(normalizeCompactedReplayMaxBytes, "normalizeCompactedReplayMaxBytes");
24
+
25
+ export {
26
+ DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
27
+ MAX_COMPACTED_REPLAY_MAX_BYTES,
28
+ normalizeCompactedReplayMaxBytes
29
+ };
30
+ /**
31
+ * @license
32
+ * Copyright 2026 Qwen Team
33
+ * SPDX-License-Identifier: Apache-2.0
34
+ */
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  registerCleanup
5
- } from "./chunk-4UCTWSTP.js";
5
+ } from "./chunk-34UUM3IN.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-A4BMJM77.js";
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ER3BKOLB.js";
18
18
  import {
19
19
  writeStderrLine
20
- } from "./chunk-Y6Z2O3WR.js";
20
+ } from "./chunk-JM7BYJO5.js";
21
21
  import {
22
22
  require_once
23
23
  } from "./chunk-5P5XGNYH.js";
@@ -16455,6 +16455,7 @@ var SERVE_CAPABILITY_REGISTRY = {
16455
16455
  session_cancel: { since: "v1" },
16456
16456
  session_events: { since: "v1" },
16457
16457
  session_artifacts: { since: "v1" },
16458
+ session_artifacts_persistence: { since: "v1" },
16458
16459
  // Daemon emits `slow_client_warning` synthetic frames at 75% queue
16459
16460
  // fill and honors `?maxQueued=N` (range [16, 2048]) on
16460
16461
  // `GET /session/:id/events`. Old daemons silently lack both — SDK
@@ -16668,6 +16669,24 @@ var SERVE_CAPABILITY_REGISTRY = {
16668
16669
  session_branch: { since: "v1" },
16669
16670
  rate_limit: { since: "v1" },
16670
16671
  workspace_reload: { since: "v1" },
16672
+ // Daemon supports reloading its daemon-managed channel worker via
16673
+ // `POST /workspace/channel/reload`. The worker is stopped and relaunched;
16674
+ // on relaunch it re-reads settings.json (channels / proxy / per-channel
16675
+ // model), so channel settings changes apply without a full daemon restart.
16676
+ // Advertised CONDITIONALLY — only when the daemon was started with
16677
+ // `--channel` (i.e. a channel worker exists to reload).
16678
+ channel_reload: { since: "v1" },
16679
+ // Multi-workspace sessions closed loop (issue #6378 Phase 2a). Advertised
16680
+ // only when one daemon hosts more than one registered workspace runtime.
16681
+ multi_workspace_sessions: { since: "v1" },
16682
+ // Workspace-qualified core REST routes under `/workspaces/:workspace/...`.
16683
+ // Covers core file/status/permissions/trust/lifecycle/MCP/tool, memory,
16684
+ // workspace agent CRUD, and persisted session organization surfaces.
16685
+ // Workspace-qualified settings also require the existing
16686
+ // `workspace_settings` tag because that surface depends on settings
16687
+ // persistence. ACP/WebSocket, auth, voice, and extensions stay on their
16688
+ // existing primary-workspace routes in this phase.
16689
+ workspace_qualified_rest_core: { since: "v1" },
16671
16690
  // Phase 2 "reverse tool channel" (issue #5626). A connected WS client (e.g.
16672
16691
  // the Chrome extension) can host an MCP server that the daemon's agent
16673
16692
  // calls by carrying `mcp_message` JSON-RPC frames over the daemon WS,
@@ -16684,6 +16703,12 @@ var SERVE_CAPABILITY_REGISTRY = {
16684
16703
  // frames. Advertised when explicitly enabled or when the daemon is serving a
16685
16704
  // Chrome extension origin.
16686
16705
  cdp_tunnel_over_ws: { since: "v1" },
16706
+ // Browser automation MCP tools are available only when the CDP tunnel is on
16707
+ // and the operator has configured an external stdio adapter via
16708
+ // QWEN_CDP_MCP_COMMAND. This is separate from `cdp_tunnel_over_ws`: a daemon
16709
+ // may expose the tunnel while intentionally not bundling/registering a
16710
+ // chrome-devtools MCP adapter.
16711
+ browser_automation_mcp: { since: "v1" },
16687
16712
  // Daemon hosts the `/voice/stream` WebSocket: the browser captures audio and
16688
16713
  // streams raw PCM, the daemon transcribes server-side via the configured
16689
16714
  // `voiceModel` (credentials never reach the client). Advertised
@@ -16718,10 +16743,23 @@ var CONDITIONAL_SERVE_FEATURES = /* @__PURE__ */ new Map([
16718
16743
  "session_shell_command",
16719
16744
  (toggles) => toggles.sessionShellCommandEnabled === true
16720
16745
  ],
16746
+ [
16747
+ "session_artifacts_persistence",
16748
+ (toggles) => toggles.sessionArtifactsPersistenceAvailable === true
16749
+ ],
16721
16750
  ["rate_limit", (toggles) => toggles.rateLimit === true],
16722
16751
  ["workspace_reload", (toggles) => toggles.reloadAvailable === true],
16752
+ ["channel_reload", (toggles) => toggles.channelReloadAvailable === true],
16753
+ [
16754
+ "multi_workspace_sessions",
16755
+ (toggles) => toggles.multiWorkspaceSessionsEnabled === true
16756
+ ],
16723
16757
  ["client_mcp_over_ws", (toggles) => toggles.clientMcpOverWsEnabled === true],
16724
16758
  ["cdp_tunnel_over_ws", (toggles) => toggles.cdpTunnelOverWsEnabled === true],
16759
+ [
16760
+ "browser_automation_mcp",
16761
+ (toggles) => toggles.browserAutomationMcpAvailable === true
16762
+ ],
16725
16763
  [
16726
16764
  // Advertised whenever the `/voice/stream` WS endpoint exists. A configured
16727
16765
  // token (or `--require-auth`) no longer suppresses it: browsers can't set
@@ -17231,35 +17269,78 @@ __name(parseDaemonStatusDetail, "parseDaemonStatusDetail");
17231
17269
  async function buildDaemonStatusResponse(detail, input) {
17232
17270
  const bridgeSnapshot = input.bridge.getDaemonStatusSnapshot();
17233
17271
  const lastActivity = input.bridge.lastActivityAt ?? null;
17272
+ const workspaceRuntimes = input.workspaceRegistry?.list();
17273
+ const workspaceSnapshots = workspaceRuntimes?.map((runtime) => ({
17274
+ workspaceCwd: runtime.workspaceCwd,
17275
+ snapshot: runtime.bridge === input.bridge ? bridgeSnapshot : runtime.bridge.getDaemonStatusSnapshot(),
17276
+ lastActivity: runtime.bridge === input.bridge ? lastActivity : runtime.bridge.lastActivityAt ?? null
17277
+ })) ?? [
17278
+ {
17279
+ workspaceCwd: input.boundWorkspace,
17280
+ snapshot: bridgeSnapshot,
17281
+ lastActivity
17282
+ }
17283
+ ];
17284
+ const aggregatedSessionCount = workspaceSnapshots.reduce(
17285
+ (sum, item) => sum + item.snapshot.sessionCount,
17286
+ 0
17287
+ );
17288
+ const aggregatedPendingPermissionCount = workspaceSnapshots.reduce(
17289
+ (sum, item) => sum + item.snapshot.pendingPermissionCount,
17290
+ 0
17291
+ );
17292
+ const aggregatedChannelLive = workspaceSnapshots.some(
17293
+ (item) => item.snapshot.channelLive
17294
+ );
17295
+ const aggregatedLastActivity = workspaceSnapshots.reduce(
17296
+ (latest, item) => item.lastActivity !== null && (latest === null || item.lastActivity > latest) ? item.lastActivity : latest,
17297
+ null
17298
+ );
17234
17299
  const acpSnapshot = input.acpHandle?.registry.getSnapshot();
17235
17300
  const rateLimitHits = input.rateLimiter?.getHitCounts() ?? zeroRateHits();
17236
17301
  let pendingPrompts = 0;
17237
17302
  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
- );
17303
+ const derivedQueuedPromptsByWorkspace = [];
17304
+ for (const [index, { snapshot }] of workspaceSnapshots.entries()) {
17305
+ let derivedQueuedPromptsForWorkspace = 0;
17306
+ for (const session of snapshot.sessions) {
17307
+ pendingPrompts += session.pendingPromptCount;
17308
+ const sessionQueuedPrompts = Math.max(
17309
+ 0,
17310
+ session.pendingPromptCount - (session.hasActivePrompt ? 1 : 0)
17311
+ );
17312
+ derivedQueuedPrompts += sessionQueuedPrompts;
17313
+ derivedQueuedPromptsForWorkspace += sessionQueuedPrompts;
17314
+ }
17315
+ derivedQueuedPromptsByWorkspace[index] = derivedQueuedPromptsForWorkspace;
17244
17316
  }
17245
- const queuedPrompts = input.bridge.pendingPromptTotal ?? derivedQueuedPrompts;
17317
+ const queuedPrompts = workspaceRuntimes?.reduce(
17318
+ (sum, runtime, index) => sum + (runtime.bridge.pendingPromptTotal ?? derivedQueuedPromptsByWorkspace[index] ?? 0),
17319
+ 0
17320
+ ) ?? input.bridge.pendingPromptTotal ?? derivedQueuedPrompts;
17246
17321
  const channelWorker = input.getChannelWorkerSnapshot?.() ?? {
17247
17322
  enabled: false,
17248
17323
  state: "disabled",
17249
17324
  channels: []
17250
17325
  };
17326
+ const totalAdmissionSnapshot = input.getTotalSessionAdmissionSnapshot?.();
17251
17327
  const issues = [];
17252
17328
  let full;
17253
17329
  pushRuntimeIssues(
17254
17330
  issues,
17255
- bridgeSnapshot,
17256
17331
  acpSnapshot,
17257
17332
  rateLimitHits,
17258
17333
  input,
17259
- channelWorker
17334
+ channelWorker,
17335
+ totalAdmissionSnapshot,
17336
+ workspaceSnapshots
17260
17337
  );
17261
17338
  if (detail === "full") {
17262
- full = await buildFullStatus(input, bridgeSnapshot, acpSnapshot);
17339
+ full = await buildFullStatus(
17340
+ input,
17341
+ acpSnapshot,
17342
+ workspaceSnapshots.flatMap((item) => item.snapshot.sessions)
17343
+ );
17263
17344
  pushFullIssues(issues, full);
17264
17345
  }
17265
17346
  return {
@@ -17288,26 +17369,39 @@ async function buildDaemonStatusResponse(detail, input) {
17288
17369
  },
17289
17370
  limits: {
17290
17371
  maxSessions: bridgeSnapshot.limits.maxSessions,
17372
+ maxTotalSessions: positiveFiniteOrNull(input.opts.maxTotalSessions),
17291
17373
  maxPendingPromptsPerSession: bridgeSnapshot.limits.maxPendingPromptsPerSession,
17292
17374
  listenerMaxConnections: listenerMaxConnections(input.opts.maxConnections),
17293
17375
  eventRingSize: bridgeSnapshot.limits.eventRingSize,
17376
+ compactedReplayMaxBytes: bridgeSnapshot.limits.compactedReplayMaxBytes,
17294
17377
  promptDeadlineMs: positiveFiniteOrNull(input.opts.promptDeadlineMs),
17295
17378
  writerIdleTimeoutMs: positiveFiniteOrNull(input.opts.writerIdleTimeoutMs),
17296
17379
  channelIdleTimeoutMs: bridgeSnapshot.limits.channelIdleTimeoutMs,
17297
17380
  sessionIdleTimeoutMs: bridgeSnapshot.limits.sessionIdleTimeoutMs,
17298
17381
  acpConnectionCap: acpSnapshot?.connectionCap ?? null
17299
17382
  },
17383
+ ...workspaceRuntimes && workspaceRuntimes.length > 1 ? {
17384
+ workspaces: workspaceRuntimes.map((runtime) => ({
17385
+ id: runtime.workspaceId,
17386
+ cwd: runtime.workspaceCwd,
17387
+ primary: runtime.primary,
17388
+ trusted: runtime.trusted
17389
+ }))
17390
+ } : {},
17300
17391
  capabilities: {
17301
17392
  protocolVersions: input.protocolVersions,
17302
17393
  features: [...input.features]
17303
17394
  },
17304
17395
  runtime: {
17305
- sessions: { active: bridgeSnapshot.sessionCount },
17396
+ sessions: {
17397
+ active: aggregatedSessionCount,
17398
+ ...totalAdmissionSnapshot ? { admissionInFlight: totalAdmissionSnapshot.inFlight } : {}
17399
+ },
17306
17400
  permissions: {
17307
- pending: bridgeSnapshot.pendingPermissionCount,
17401
+ pending: aggregatedPendingPermissionCount,
17308
17402
  policy: bridgeSnapshot.permissionPolicy
17309
17403
  },
17310
- channel: { live: bridgeSnapshot.channelLive },
17404
+ channel: { live: aggregatedChannelLive },
17311
17405
  channelWorker,
17312
17406
  transport: {
17313
17407
  restSseActive: input.getRestSseActive(),
@@ -17328,11 +17422,14 @@ async function buildDaemonStatusResponse(detail, input) {
17328
17422
  ...input.getPerfSnapshot ? { perf: input.getPerfSnapshot() } : {},
17329
17423
  ...input.getMetricsSeries ? { metrics: { series: input.getMetricsSeries() } } : {},
17330
17424
  activity: {
17331
- activePrompts: input.bridge.activePromptCount ?? 0,
17425
+ activePrompts: workspaceRuntimes?.reduce(
17426
+ (sum, runtime) => sum + (runtime.bridge.activePromptCount ?? 0),
17427
+ 0
17428
+ ) ?? input.bridge.activePromptCount ?? 0,
17332
17429
  pendingPrompts,
17333
17430
  queuedPrompts,
17334
- lastActivityAt: lastActivity !== null ? new Date(lastActivity).toISOString() : null,
17335
- idleSinceMs: lastActivity !== null ? Date.now() - lastActivity : null
17431
+ lastActivityAt: aggregatedLastActivity !== null ? new Date(aggregatedLastActivity).toISOString() : null,
17432
+ idleSinceMs: aggregatedLastActivity !== null ? Date.now() - aggregatedLastActivity : null
17336
17433
  },
17337
17434
  process: process.memoryUsage()
17338
17435
  },
@@ -17354,7 +17451,7 @@ function cloneStartup(startup) {
17354
17451
  };
17355
17452
  }
17356
17453
  __name(cloneStartup, "cloneStartup");
17357
- async function buildFullStatus(input, bridgeSnapshot, acpSnapshot) {
17454
+ async function buildFullStatus(input, acpSnapshot, sessions) {
17358
17455
  const ctx = {
17359
17456
  route: "GET /daemon/status",
17360
17457
  workspaceCwd: input.boundWorkspace
@@ -17394,7 +17491,7 @@ async function buildFullStatus(input, bridgeSnapshot, acpSnapshot) {
17394
17491
  )
17395
17492
  ]);
17396
17493
  return {
17397
- sessions: bridgeSnapshot.sessions,
17494
+ sessions,
17398
17495
  acpConnections: acpSnapshot?.connections ?? [],
17399
17496
  workspace: {
17400
17497
  mcp,
@@ -17452,13 +17549,30 @@ async function withTimeout(promise, section, timeoutMs) {
17452
17549
  }
17453
17550
  }
17454
17551
  __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
- });
17552
+ function pushRuntimeIssues(issues, acpSnapshot, rateLimitHits, input, channelWorker, totalAdmissionSnapshot, workspaceSnapshots) {
17553
+ for (const { workspaceCwd, snapshot } of workspaceSnapshots) {
17554
+ if (snapshot.limits.maxSessions !== null && snapshot.limits.maxSessions > 0 && snapshot.sessionCount / snapshot.limits.maxSessions >= CAPACITY_WARNING_RATIO) {
17555
+ issues.push({
17556
+ code: "session_capacity_high",
17557
+ severity: "warning",
17558
+ message: workspaceSnapshots.length > 1 ? `Workspace ${workspaceCwd} active sessions are at ${snapshot.sessionCount}/${snapshot.limits.maxSessions}.` : `Active sessions are at ${snapshot.sessionCount}/${snapshot.limits.maxSessions}.`
17559
+ });
17560
+ }
17561
+ }
17562
+ const maxTotalSessions = positiveFiniteOrNull(input.opts.maxTotalSessions);
17563
+ if (maxTotalSessions !== null) {
17564
+ const fallbackLiveCount = workspaceSnapshots.reduce(
17565
+ (sum, item) => sum + item.snapshot.sessionCount,
17566
+ 0
17567
+ );
17568
+ const totalActive = (totalAdmissionSnapshot?.liveCount ?? fallbackLiveCount) + (totalAdmissionSnapshot?.inFlight ?? 0);
17569
+ if (totalActive / maxTotalSessions >= CAPACITY_WARNING_RATIO) {
17570
+ issues.push({
17571
+ code: "total_session_capacity_high",
17572
+ severity: "warning",
17573
+ message: `Total active and in-flight sessions are at ${totalActive}/${maxTotalSessions}.`
17574
+ });
17575
+ }
17462
17576
  }
17463
17577
  if (acpSnapshot !== void 0 && acpSnapshot.connectionCap !== null && acpSnapshot.connectionCap > 0 && acpSnapshot.connectionCount / acpSnapshot.connectionCap >= CAPACITY_WARNING_RATIO) {
17464
17578
  issues.push({
@@ -17467,18 +17581,25 @@ function pushRuntimeIssues(issues, bridgeSnapshot, acpSnapshot, rateLimitHits, i
17467
17581
  message: `ACP connections are at ${acpSnapshot.connectionCount}/${acpSnapshot.connectionCap}.`
17468
17582
  });
17469
17583
  }
17470
- if (bridgeSnapshot.pendingPermissionCount > 0) {
17584
+ const pendingPermissionCount = workspaceSnapshots.reduce(
17585
+ (sum, item) => sum + item.snapshot.pendingPermissionCount,
17586
+ 0
17587
+ );
17588
+ if (pendingPermissionCount > 0) {
17471
17589
  issues.push({
17472
17590
  code: "pending_permissions",
17473
17591
  severity: "warning",
17474
- message: `${bridgeSnapshot.pendingPermissionCount} permission request(s) are pending.`
17592
+ message: `${pendingPermissionCount} permission request(s) are pending.`
17475
17593
  });
17476
17594
  }
17477
- if (bridgeSnapshot.sessionCount > 0 && !bridgeSnapshot.channelLive) {
17595
+ const downWorkspaces = workspaceSnapshots.filter(
17596
+ (item) => item.snapshot.sessionCount > 0 && !item.snapshot.channelLive
17597
+ );
17598
+ if (downWorkspaces.length > 0) {
17478
17599
  issues.push({
17479
17600
  code: "acp_channel_down",
17480
17601
  severity: "error",
17481
- message: "Active sessions exist but the ACP channel is not live."
17602
+ 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
17603
  });
17483
17604
  }
17484
17605
  if (input.opts.rateLimit === true && sumRateHits(rateLimitHits) > 0) {
@@ -17743,6 +17864,19 @@ function copyNumber(from, to, key) {
17743
17864
  }
17744
17865
  __name(copyNumber, "copyNumber");
17745
17866
 
17867
+ // packages/cli/src/serve/cdp-mcp-command.ts
17868
+ init_esbuild_shims();
17869
+ var QWEN_CDP_MCP_COMMAND_ENV = "QWEN_CDP_MCP_COMMAND";
17870
+ function resolveCdpMcpCommand(env) {
17871
+ const command = env[QWEN_CDP_MCP_COMMAND_ENV]?.trim();
17872
+ return command ? command : void 0;
17873
+ }
17874
+ __name(resolveCdpMcpCommand, "resolveCdpMcpCommand");
17875
+ function isBrowserAutomationMcpAvailable(opts, env) {
17876
+ return opts.cdpTunnelOverWs === true && !opts.token && env["QWEN_SERVE_ACP_HTTP"] !== "0" && resolveCdpMcpCommand(env) !== void 0;
17877
+ }
17878
+ __name(isBrowserAutomationMcpAvailable, "isBrowserAutomationMcpAvailable");
17879
+
17746
17880
  export {
17747
17881
  require_express2 as require_express,
17748
17882
  sanitizeForStderr,
@@ -17794,7 +17928,10 @@ export {
17794
17928
  buildDaemonStatusResponse,
17795
17929
  allowOriginMode,
17796
17930
  listenerMaxConnections,
17797
- positiveFiniteOrNull
17931
+ positiveFiniteOrNull,
17932
+ QWEN_CDP_MCP_COMMAND_ENV,
17933
+ resolveCdpMcpCommand,
17934
+ isBrowserAutomationMcpAvailable
17798
17935
  };
17799
17936
  /**
17800
17937
  * @license
@@ -0,0 +1,38 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ t
5
+ } from "./chunk-UOXLB2LY.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/ui/utils/history-gap-notice.ts
14
+ init_esbuild_shims();
15
+ function formatHistoryGapNotice(_gap) {
16
+ return t(
17
+ "\u26A0\uFE0F History gap: earlier conversation was lost before this point (storage interruption) and could not be recovered."
18
+ );
19
+ }
20
+ __name(formatHistoryGapNotice, "formatHistoryGapNotice");
21
+ function indexGapsByChild(gaps) {
22
+ const byChild = /* @__PURE__ */ new Map();
23
+ for (const gap of gaps ?? []) {
24
+ byChild.set(gap.childUuid, gap);
25
+ }
26
+ return byChild;
27
+ }
28
+ __name(indexGapsByChild, "indexGapsByChild");
29
+
30
+ export {
31
+ formatHistoryGapNotice,
32
+ indexGapsByChild
33
+ };
34
+ /**
35
+ * @license
36
+ * Copyright 2025 Qwen Code
37
+ * SPDX-License-Identifier: Apache-2.0
38
+ */