@qwen-code/qwen-code 0.19.8 → 0.19.9

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 (434) 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 +60 -51
  5. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  6. package/bundled/qc-helper/docs/features/channels/dingtalk.md +9 -2
  7. package/bundled/qc-helper/docs/features/channels/overview.md +71 -4
  8. package/bundled/qc-helper/docs/features/channels/wecom.md +6 -0
  9. package/bundled/qc-helper/docs/features/code-review.md +29 -5
  10. package/bundled/qc-helper/docs/features/commands.md +39 -38
  11. package/bundled/qc-helper/docs/features/computer-use.md +77 -0
  12. package/bundled/qc-helper/docs/features/tool-use-summaries.md +19 -23
  13. package/bundled/qc-helper/docs/integration-vscode.md +2 -2
  14. package/bundled/qc-helper/docs/qwen-serve.md +29 -12
  15. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  16. package/bundled/review/DESIGN.md +93 -22
  17. package/bundled/review/SKILL.md +295 -86
  18. package/chunks/MaxSizedBox-6HYJ3ZPJ.js +70 -0
  19. package/chunks/{StandaloneSessionPicker-EYRGH6PJ.js → StandaloneSessionPicker-WS4GXYOG.js} +79 -79
  20. package/chunks/{acpAgent-GRFTTRHW.js → acpAgent-5FWSOZL5.js} +968 -200
  21. package/chunks/agent-HOLHB3RT.js +68 -0
  22. package/chunks/agent-headless-SXL6H56A.js +62 -0
  23. package/chunks/{anthropicContentGenerator-CPF22MA7.js → anthropicContentGenerator-L73TO3DB.js} +187 -31
  24. package/chunks/{artifact-tool-D233YJFH.js → artifact-tool-U7IRTLIV.js} +5 -5
  25. package/chunks/{askUserQuestion-MKL5ZTMC.js → askUserQuestion-2DLUUZZG.js} +6 -6
  26. package/chunks/bridge-BCJQ7BBB.js +78 -0
  27. package/chunks/{ca-MKD32FQL.js → ca-UJ6HC4H2.js} +64 -5
  28. package/chunks/{channel-worker-supervisor-NZQUOEFJ.js → channel-worker-supervisor-WSOAAYUO.js} +137 -13
  29. package/chunks/{chunk-QQDPRDVW.js → chunk-2HRYPZT5.js} +1 -1
  30. package/chunks/{chunk-2PSWA5ID.js → chunk-2X56YUSZ.js} +1 -1
  31. package/chunks/{chunk-DIWVZ3VM.js → chunk-34MW4KTI.js} +5 -5
  32. package/chunks/{chunk-IBY3Q3HG.js → chunk-34Z3U5RQ.js} +508 -126
  33. package/chunks/{chunk-UXEW557D.js → chunk-3AHXV67U.js} +3 -3
  34. package/chunks/{chunk-O2YT7VB4.js → chunk-3BTRNWWD.js} +1 -1
  35. package/chunks/chunk-3G7CIHVV.js +71 -0
  36. package/chunks/{chunk-FBET5XZ2.js → chunk-3SJSQXNS.js} +20 -5
  37. package/chunks/{chunk-BUZ6HGL4.js → chunk-3VAGG5T5.js} +248 -55
  38. package/chunks/{chunk-M7S4GK5Z.js → chunk-4C5BQ2D2.js} +74 -27
  39. package/chunks/{chunk-5MBO76SL.js → chunk-4GORAUCN.js} +3 -3
  40. package/chunks/{chunk-55ZMG67I.js → chunk-4LD5APFL.js} +4 -4
  41. package/chunks/{chunk-TLWA7TPR.js → chunk-4QLQE5WJ.js} +2 -2
  42. package/chunks/{chunk-UIDXQNMV.js → chunk-4WGODMVR.js} +1 -1
  43. package/chunks/{chunk-E6US47KI.js → chunk-4WKAA4KS.js} +1 -1
  44. package/chunks/{chunk-H6EMK6QK.js → chunk-4ZVWQHEQ.js} +11913 -5207
  45. package/chunks/{chunk-HW4N45EE.js → chunk-524RQP4Q.js} +29 -8
  46. package/chunks/{chunk-3GONHQOA.js → chunk-57OAHC2Y.js} +1 -1
  47. package/chunks/{chunk-JZSY4WP3.js → chunk-5DTTYNB7.js} +1 -1
  48. package/chunks/{chunk-YDOXPLYL.js → chunk-5HOMWMCL.js} +1147 -738
  49. package/chunks/{chunk-A4BMJM77.js → chunk-5O2XNYP6.js} +1 -0
  50. package/chunks/{chunk-ZL5HN75Q.js → chunk-5SFOMFG4.js} +2 -2
  51. package/chunks/{chunk-2EM7ECZD.js → chunk-5U27BZ72.js} +179 -63
  52. package/chunks/{chunk-JRQ7EVGE.js → chunk-5VXNZWGF.js} +2 -2
  53. package/chunks/{chunk-QYNNN7BK.js → chunk-5XUCZNSY.js} +2 -2
  54. package/chunks/{chunk-GO6LNQXT.js → chunk-6AM5D4ME.js} +1 -1
  55. package/chunks/{chunk-BJBWRCSK.js → chunk-6H67XLET.js} +1 -1
  56. package/chunks/{chunk-PUVCVELY.js → chunk-6PESIEKJ.js} +4 -4
  57. package/chunks/{chunk-3UP777ZS.js → chunk-6RLROE6G.js} +1 -1
  58. package/chunks/{chunk-ZERZSAZL.js → chunk-75DOP5OR.js} +2 -2
  59. package/chunks/{chunk-RMLZAUWH.js → chunk-77XJ3SWN.js} +10 -12
  60. package/chunks/{chunk-L46XKEGM.js → chunk-7PU4FYLG.js} +5 -8
  61. package/chunks/{chunk-NQKLOAVJ.js → chunk-7R3CZA3Q.js} +2 -2
  62. package/chunks/{chunk-SAIILPQ3.js → chunk-7X7TEQNX.js} +5 -3
  63. package/chunks/{chunk-OQXDAMKY.js → chunk-A3XKDTSH.js} +8 -8
  64. package/chunks/{chunk-IRJWHZWU.js → chunk-A4UCTEB5.js} +2 -2
  65. package/chunks/{chunk-TSPB77TG.js → chunk-AKIVHSJR.js} +923 -2892
  66. package/chunks/{chunk-FQNC62B2.js → chunk-ATAKVRIF.js} +11 -11
  67. package/chunks/{chunk-GSHQYYIV.js → chunk-AURZZYMD.js} +6 -26
  68. package/chunks/{chunk-CHB5SLZZ.js → chunk-B4G2WOFA.js} +3 -3
  69. package/chunks/{chunk-X3YGAX7V.js → chunk-B5ORX3FG.js} +4 -2
  70. package/chunks/chunk-BAPGSC7U.js +239 -0
  71. package/chunks/{chunk-UX6OTBVD.js → chunk-BMGVRZN4.js} +2 -2
  72. package/chunks/{chunk-ZN5T4BHI.js → chunk-BPZALHVR.js} +2 -2
  73. package/chunks/{chunk-IJRL2S3D.js → chunk-BZIFY5TF.js} +6 -6
  74. package/chunks/{chunk-OFEVLU4C.js → chunk-CARU2RR2.js} +1 -1
  75. package/chunks/chunk-CC2ITGCF.js +176 -0
  76. package/chunks/{chunk-HDOH3QYE.js → chunk-CCDMCZPP.js} +2 -2
  77. package/chunks/{chunk-FV7425LN.js → chunk-CEA3E3JB.js} +18 -5
  78. package/chunks/{chunk-BOBOCR5H.js → chunk-CLFKOZEK.js} +4 -4
  79. package/chunks/{chunk-P3XEEI3X.js → chunk-CNEIYWSA.js} +38 -9
  80. package/chunks/{chunk-GLE2YUPU.js → chunk-COH43MRJ.js} +1 -1
  81. package/chunks/{chunk-E5A7LHNN.js → chunk-CPBF7KYF.js} +1 -1
  82. package/chunks/{chunk-UWCTAVOD.js → chunk-CR3C7WXL.js} +1 -1
  83. package/chunks/{chunk-5P5XGNYH.js → chunk-CU3L64TP.js} +1 -1
  84. package/chunks/{chunk-CD6USWHZ.js → chunk-CUMMSHH6.js} +2 -2
  85. package/chunks/{chunk-IWKSG2AR.js → chunk-CXAOG665.js} +1 -1
  86. package/chunks/{chunk-WQTHLB5T.js → chunk-D2GFWEXB.js} +7 -7
  87. package/chunks/{chunk-I6WGFJJ3.js → chunk-D5SKC4YG.js} +38 -12
  88. package/chunks/{chunk-MZ7BABX3.js → chunk-DC5Z3DU6.js} +2 -2
  89. package/chunks/{chunk-64WXLC72.js → chunk-DJ2GSRLV.js} +1 -1
  90. package/chunks/{chunk-QN5NZ3UQ.js → chunk-DMTGGOSA.js} +2 -2
  91. package/chunks/{chunk-A5JOJ77H.js → chunk-E2IY465S.js} +38 -15
  92. package/chunks/{chunk-KHDZHZMH.js → chunk-E5Z2AVNV.js} +1 -1
  93. package/chunks/{chunk-SQ2UATK7.js → chunk-EAXLGSFP.js} +11 -11
  94. package/chunks/{chunk-JCH35JB3.js → chunk-ECNYL4AA.js} +2 -2
  95. package/chunks/{chunk-E7EMCSUG.js → chunk-EGYZ275M.js} +64 -42
  96. package/chunks/{chunk-6VK6FIMQ.js → chunk-EMDMPBJ4.js} +415 -379
  97. package/chunks/{chunk-5IFG2VC4.js → chunk-FCMNKVXT.js} +1 -1
  98. package/chunks/{chunk-V35MD7KN.js → chunk-GRC5HGPI.js} +1 -1
  99. package/chunks/{chunk-WMPVYQ4P.js → chunk-GWHYEOV2.js} +2 -2
  100. package/chunks/{chunk-27BHARDE.js → chunk-GWLSNBG4.js} +2103 -13
  101. package/chunks/chunk-GZRTYZ2R.js +292 -0
  102. package/chunks/{chunk-A2X3KLC3.js → chunk-GZXCZHCT.js} +3 -3
  103. package/chunks/{chunk-K5PGHDBN.js → chunk-H6XPXXMH.js} +1 -1
  104. package/chunks/{chunk-DICGXFAI.js → chunk-HKMAENAO.js} +8 -8
  105. package/chunks/{chunk-ZE6E424U.js → chunk-HPDUL5MF.js} +2 -2
  106. package/chunks/{chunk-KYMBIKIW.js → chunk-HTHUX2T5.js} +1 -1
  107. package/chunks/{chunk-LQ7TMOCE.js → chunk-HTO4JFDZ.js} +1 -1
  108. package/chunks/{chunk-ON3JA3RU.js → chunk-HVY356M2.js} +7 -9
  109. package/chunks/{chunk-GGQQA4JW.js → chunk-IAVB3HM3.js} +2 -2
  110. package/chunks/{chunk-FEJ2FZ3U.js → chunk-J3JA76CF.js} +2 -2
  111. package/chunks/{chunk-4CGOWHKM.js → chunk-J4MOFEOK.js} +2 -2
  112. package/chunks/{chunk-22MNNNXE.js → chunk-J4TSQ5EQ.js} +3 -2
  113. package/chunks/{chunk-22IFUCVR.js → chunk-JESCGQM3.js} +1 -1
  114. package/chunks/{chunk-CCGOFQV3.js → chunk-JSG7ZSBC.js} +8 -7
  115. package/chunks/{chunk-WF4FAXDL.js → chunk-JZETEN3Z.js} +62 -62
  116. package/chunks/{chunk-GN3F6PIU.js → chunk-K434OPES.js} +5 -5
  117. package/chunks/{chunk-YKZIAK7C.js → chunk-KHUQZZJ6.js} +66 -16
  118. package/chunks/{chunk-X2XNQQJI.js → chunk-KKNMOEZH.js} +4 -4
  119. package/chunks/{chunk-MRO43B25.js → chunk-KW7NOTN6.js} +1 -1
  120. package/chunks/{chunk-6IAWPIQ6.js → chunk-L36P3NBD.js} +3 -3
  121. package/chunks/{chunk-54YZOP7P.js → chunk-L573Z2QZ.js} +11894 -5190
  122. package/chunks/{chunk-DHOLNQLC.js → chunk-L6P4KPHR.js} +12 -12
  123. package/chunks/{chunk-E7KNELIZ.js → chunk-LK7KUE55.js} +2 -2
  124. package/chunks/{chunk-W7EEOR7D.js → chunk-LUODI7WD.js} +5 -5
  125. package/chunks/{chunk-CSOTA7KX.js → chunk-LXNEJD34.js} +2 -2
  126. package/chunks/{chunk-HLKG6CZN.js → chunk-M5GB774H.js} +1 -1
  127. package/chunks/{chunk-3B26UVCX.js → chunk-MC23XKFE.js} +39 -10
  128. package/chunks/{chunk-PC4ZXHU2.js → chunk-MXL5UP4X.js} +3 -3
  129. package/chunks/{chunk-BVYU3ZTI.js → chunk-N3EMS75V.js} +73 -30
  130. package/chunks/{chunk-332PWN27.js → chunk-NHDKSOEY.js} +1 -1
  131. package/chunks/{chunk-3GNOQZDC.js → chunk-NVYTCB5Z.js} +4797 -2620
  132. package/chunks/{chunk-P7M4GA57.js → chunk-OCPBI7J5.js} +1 -1
  133. package/chunks/chunk-OQ4DRIOA.js +296 -0
  134. package/chunks/{chunk-42XGFRJS.js → chunk-ORBGV7NJ.js} +5 -5
  135. package/chunks/{chunk-AYNCLGTW.js → chunk-P67PFTUT.js} +8 -51
  136. package/chunks/{chunk-VGGOPZUL.js → chunk-PDZ7MBDG.js} +12 -5
  137. package/chunks/{chunk-WHJQ3JUS.js → chunk-PODM4SZ4.js} +12 -12
  138. package/chunks/{chunk-JPALE3PA.js → chunk-PVZM22CK.js} +6 -6
  139. package/chunks/{chunk-AGHU5VRK.js → chunk-PZL23GTM.js} +1 -1
  140. package/chunks/{chunk-L4AMBVQG.js → chunk-Q4YQW46J.js} +31 -17
  141. package/chunks/{chunk-XYR5RUA5.js → chunk-Q6I5QHMH.js} +10 -3
  142. package/chunks/{chunk-FXGLL2HL.js → chunk-Q7YDKOGY.js} +1 -1
  143. package/chunks/{chunk-LGFAYIKX.js → chunk-QHTIBUWB.js} +1 -1
  144. package/chunks/{chunk-P3MYAZBY.js → chunk-QMGX2KO2.js} +1 -1
  145. package/chunks/{chunk-Z3I3QJK3.js → chunk-QRUIS3DN.js} +1 -1
  146. package/chunks/{chunk-ITOGNELQ.js → chunk-QSWDGAIC.js} +2 -2
  147. package/chunks/{chunk-GHOTR7HL.js → chunk-QUPXZXLV.js} +1 -1
  148. package/chunks/{chunk-XOHNA2S6.js → chunk-QYMQSECS.js} +3 -3
  149. package/chunks/{chunk-QYUE6W3T.js → chunk-RDJSGHZE.js} +1 -1
  150. package/chunks/{chunk-TLRYABYP.js → chunk-RKUWKYED.js} +1 -1
  151. package/chunks/{chunk-RNBYOUGV.js → chunk-RXFQM6FQ.js} +1 -1
  152. package/chunks/{chunk-QXPI7FEC.js → chunk-S3TWXGKA.js} +4 -4
  153. package/chunks/{chunk-BOBRZZKD.js → chunk-SCGXUJBT.js} +5 -5
  154. package/chunks/{chunk-44NROQYV.js → chunk-SJHDYNHF.js} +4 -4
  155. package/chunks/{chunk-MLZQVCF3.js → chunk-SZRN75WQ.js} +1 -1
  156. package/chunks/{chunk-7RYW5LQV.js → chunk-T2NCM2ET.js} +2 -2
  157. package/chunks/{chunk-Z2Z3GUXZ.js → chunk-TB6UDU4T.js} +1 -1
  158. package/chunks/{chunk-SUAKHHK7.js → chunk-TDEXZKMT.js} +3 -3
  159. package/chunks/{chunk-EXPMGZZV.js → chunk-TEGEBB2I.js} +1 -1
  160. package/chunks/{chunk-MX2YXRER.js → chunk-TJTKSVIV.js} +1 -1
  161. package/chunks/chunk-TO6QE22P.js +444 -0
  162. package/chunks/{chunk-H6BD2ELD.js → chunk-TYAMGABM.js} +2 -2
  163. package/chunks/chunk-U2NNEY4R.js +38 -0
  164. package/chunks/{chunk-VRDMOSQS.js → chunk-UDXSXLER.js} +2 -2
  165. package/chunks/{chunk-AHNJGLFV.js → chunk-UOZWKTQG.js} +3 -3
  166. package/chunks/{chunk-CJCKDMWO.js → chunk-URK542T4.js} +1 -1
  167. package/chunks/{chunk-AHNXYU4O.js → chunk-V6WHFGST.js} +1 -1
  168. package/chunks/{chunk-DCZWC4PF.js → chunk-VA4KQY6V.js} +5 -5
  169. package/chunks/{chunk-ZTQ26VBE.js → chunk-VDDGDZMA.js} +1 -1
  170. package/chunks/{chunk-OMX7CUOE.js → chunk-VGC4I5JJ.js} +1 -1
  171. package/chunks/{chunk-43W4YSO6.js → chunk-VJNBRRZG.js} +2 -2
  172. package/chunks/{chunk-J7RCB6N5.js → chunk-VTU57BWZ.js} +2 -2
  173. package/chunks/{chunk-LAXNEOBG.js → chunk-VWPVHAMO.js} +15 -3
  174. package/chunks/{chunk-VZ7HY3YU.js → chunk-W2UIXQDL.js} +3 -3
  175. package/chunks/{chunk-JZHIQJOE.js → chunk-W3JHSWRP.js} +6 -6
  176. package/chunks/{chunk-ER3BKOLB.js → chunk-W7FJ3N32.js} +1 -1
  177. package/chunks/{chunk-3HX5LZ6R.js → chunk-WBL3FJEU.js} +2 -2
  178. package/chunks/{chunk-BMFMJINR.js → chunk-WL4L7EZH.js} +1 -1
  179. package/chunks/{chunk-PMFULMLX.js → chunk-WQUQVGTF.js} +2057 -266
  180. package/chunks/chunk-X4NKFGFJ.js +81 -0
  181. package/chunks/{chunk-YHKAK72D.js → chunk-X6TJ3YZV.js} +102 -16
  182. package/chunks/{chunk-3RW4AZJV.js → chunk-XFSFZCM5.js} +1 -1
  183. package/chunks/{chunk-O7FIRWJV.js → chunk-XLA62MYB.js} +3 -3
  184. package/chunks/{chunk-2MPVVENX.js → chunk-XU457J4V.js} +2 -2
  185. package/chunks/{chunk-EEN2TKST.js → chunk-XUOOWUZS.js} +2 -2
  186. package/chunks/{chunk-SIUQ3YYX.js → chunk-XVNQMZ2I.js} +1 -1
  187. package/chunks/{chunk-SYCJMSIJ.js → chunk-XWRJCPHC.js} +1 -1
  188. package/chunks/{chunk-TI3BWD4D.js → chunk-XYQSMABS.js} +39 -19
  189. package/chunks/chunk-YAF2MQZ6.js +19 -0
  190. package/chunks/{chunk-O33TBKDC.js → chunk-YAUFFXDS.js} +154 -19
  191. package/chunks/{chunk-OACJLMLD.js → chunk-YLV3XXFB.js} +2 -2
  192. package/chunks/{chunk-BR4QREVK.js → chunk-YQ3U5MUC.js} +1 -1
  193. package/chunks/{chunk-Y6Z2O3WR.js → chunk-YUZI3WAC.js} +1 -1
  194. package/chunks/{chunk-II73RK2S.js → chunk-YVEDCAUE.js} +1 -1
  195. package/chunks/{chunk-SKAZWEV5.js → chunk-ZJE7NSL3.js} +1 -1
  196. package/chunks/{chunk-7LTB54MK.js → chunk-ZLXQN2QS.js} +2 -2
  197. package/chunks/cli-entry-path-4VJ3Y6T2.js +10 -0
  198. package/chunks/{computer-use-WMY3UOBX.js → computer-use-HM37RX6A.js} +50 -50
  199. package/chunks/config-utils-NV2SVGPB.js +23 -0
  200. package/chunks/contextCommand-OF5SFGH2.js +68 -0
  201. package/chunks/create-sub-session-INX7TXJI.js +207 -0
  202. package/chunks/create-sub-session-KPRT7ECJ.js +375 -0
  203. package/chunks/{cron-create-JSXEIPVS.js → cron-create-AMBKGZX6.js} +9 -9
  204. package/chunks/{cron-delete-OIFVEPGU.js → cron-delete-LRU4OJYG.js} +7 -7
  205. package/chunks/{cron-list-D4ZX4IOE.js → cron-list-WVP2JXER.js} +14 -10
  206. package/chunks/{daemon-WPAENEBW.js → daemon-ARHTSTXP.js} +478 -6
  207. package/chunks/daemon-status-provider-B2UTZUJ2.js +76 -0
  208. package/chunks/{de-ZFPPQVSF.js → de-EBJN3OVN.js} +64 -5
  209. package/chunks/{devtools-FM6GJPYG.js → devtools-4QFYJT6U.js} +3 -3
  210. package/chunks/{dist-Z34QPAQW.js → dist-PNVLTKTL.js} +374 -78
  211. package/chunks/{dist-63IS3ZMI.js → dist-PZV5RKM6.js} +4 -4
  212. package/chunks/{dist-BEXOZXLQ.js → dist-QYCAEZIT.js} +32 -15
  213. package/chunks/{dist-H2AEJCZ5.js → dist-R7LN5AZE.js} +5 -5
  214. package/chunks/{dist-E6UANPIM.js → dist-VHV4EVHG.js} +1011 -197
  215. package/chunks/{dist-O2IRTRPP.js → dist-WKPOYU7O.js} +10 -10
  216. package/chunks/{dist-SCFLLYMK.js → dist-XKU3ABM5.js} +12 -11
  217. package/chunks/earlyInputCapture-3VTHRC4C.js +69 -0
  218. package/chunks/{edit-OTYWAXGP.js → edit-VNI4NJ73.js} +51 -51
  219. package/chunks/{en-N4EPZAQI.js → en-5A6LA7RK.js} +74 -6
  220. package/chunks/{enter-worktree-HNYBDVCX.js → enter-worktree-IYYBKPZT.js} +50 -50
  221. package/chunks/{enterPlanMode-CJCNGT63.js → enterPlanMode-GMC5FD5A.js} +50 -50
  222. package/chunks/environment-5HSSRMJ7.js +88 -0
  223. package/chunks/errors-HMFCJJ7P.js +75 -0
  224. package/chunks/{exit-worktree-DUUKOE3X.js → exit-worktree-6BHCMP5G.js} +50 -50
  225. package/chunks/{exitPlanMode-AMMSXOAJ.js → exitPlanMode-CJW7G74W.js} +51 -51
  226. package/chunks/{fast-path-OV6NIP3K.js → fast-path-FRDMDVHG.js} +8 -8
  227. package/chunks/{fast-path-settings-7RIFI3PK.js → fast-path-settings-5QZE64HR.js} +6 -6
  228. package/chunks/{fileFromPath-IBEHA3CO.js → fileFromPath-UDALK7FM.js} +3 -3
  229. package/chunks/{fr-5WWMY53B.js → fr-YXRABLYZ.js} +64 -5
  230. package/chunks/{gemini-NQ3WWBKB.js → gemini-QYSEGHAX.js} +119 -111
  231. package/chunks/{geminiContentGenerator-CDUNEJQE.js → geminiContentGenerator-J7YNZDYP.js} +9 -9
  232. package/chunks/{getMachineId-bsd-4CASPIU4.js → getMachineId-bsd-EXV7SWPA.js} +3 -3
  233. package/chunks/{getMachineId-darwin-HPQPEMZR.js → getMachineId-darwin-IUOMFXU3.js} +3 -3
  234. package/chunks/{getMachineId-linux-AUARKYHL.js → getMachineId-linux-K7XJYFHL.js} +2 -2
  235. package/chunks/{getMachineId-unsupported-S32ZDA2T.js → getMachineId-unsupported-EA5FDRJ6.js} +2 -2
  236. package/chunks/{getMachineId-win-4EFLHYIJ.js → getMachineId-win-KBA6RAI5.js} +3 -3
  237. package/chunks/{glob-ROV3YS4R.js → glob-BRCSGFOT.js} +95 -74
  238. package/chunks/{grep-NRITKDCD.js → grep-EE2DUOSY.js} +50 -50
  239. package/chunks/handleAutoUpdate-5NWTLR67.js +69 -0
  240. package/chunks/i18n-BASPENNQ.js +84 -0
  241. package/chunks/initializer-UTQ7FB7G.js +71 -0
  242. package/chunks/installationInfo-W6V4DT7W.js +65 -0
  243. package/chunks/{ja-CUHZOLEJ.js → ja-7VQOANVG.js} +64 -5
  244. package/chunks/{keychain-token-storage-UJV5XP4Z.js → keychain-token-storage-VKUBNCP4.js} +4 -4
  245. package/chunks/{kittyProtocolDetector-OJRCJLIU.js → kittyProtocolDetector-HCNNKJTI.js} +2 -2
  246. package/chunks/list-DEICDL65.js +74 -0
  247. package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +68 -0
  248. package/chunks/{loop-wakeup-OHWEMFP5.js → loop-wakeup-WX7BLWWP.js} +10 -10
  249. package/chunks/{lowlight-FYAAUU5J.js → lowlight-J2OZNPCA.js} +1 -1
  250. package/chunks/{ls-7MFU2QYW.js → ls-ZB2BDP6T.js} +6 -6
  251. package/chunks/{lsp-XHDTPTGV.js → lsp-V5DN4YUJ.js} +4 -4
  252. package/chunks/mcp-L5JXEEIA.js +68 -0
  253. package/chunks/{monitor-FL2ZO33W.js → monitor-X5Z3H4FY.js} +50 -50
  254. package/chunks/{multipart-parser-AJ4WASWR.js → multipart-parser-AWZKXSQN.js} +3 -3
  255. package/chunks/nonInteractiveCli-LS2K4X6A.js +124 -0
  256. package/chunks/{notebook-edit-6PULTHL5.js → notebook-edit-TRM2QIJK.js} +51 -51
  257. package/chunks/openaiContentGenerator-AAYONPMF.js +56 -0
  258. package/chunks/pidfile-D4I4FTVA.js +73 -0
  259. package/chunks/{pt-OLYN42DS.js → pt-2C6YCSHL.js} +64 -5
  260. package/chunks/{qwenContentGenerator-NX2E7PB7.js → qwenContentGenerator-K3HZ2H76.js} +52 -52
  261. package/chunks/{qwenOAuth2-ZV7YLMND.js → qwenOAuth2-PJQ27GSO.js} +9 -9
  262. package/chunks/read-file-7SZSIZOL.js +30 -0
  263. package/chunks/{read-mcp-resource-CNQHBSJM.js → read-mcp-resource-SM5DA4RG.js} +5 -5
  264. package/chunks/{read-package-up-ER5OJUGP.js → read-package-up-TCM6I7S2.js} +2 -2
  265. package/chunks/{record-artifact-SQ2OKRJW.js → record-artifact-4XKZX3UW.js} +4 -4
  266. package/chunks/ripGrep-YNPFVCZP.js +60 -0
  267. package/chunks/{ru-LDM3GWVQ.js → ru-6BBHVZZV.js} +64 -5
  268. package/chunks/{run-qwen-serve-JK2DL7PI.js → run-qwen-serve-DMWV5N6L.js} +395 -74
  269. package/chunks/runtime-57WWRVHN.js +94 -0
  270. package/chunks/{scheduler-O4IGVZKK.js → scheduler-YBLGWSIL.js} +51 -51
  271. package/chunks/{send-message-76GT3JMC.js → send-message-F36YD6KQ.js} +7 -7
  272. package/chunks/serve-R63NK3CV.js +74 -0
  273. package/chunks/{server-SGNPKX2O.js → server-Z22GCAXP.js} +3956 -869
  274. package/chunks/{session-5BNM25EZ.js → session-HKAAI7BN.js} +117 -112
  275. package/chunks/settings-3EYN66GK.js +118 -0
  276. package/chunks/shell-6YXINTWJ.js +68 -0
  277. package/chunks/{skill-I22QK5XS.js → skill-OO57P4X6.js} +24 -24
  278. package/chunks/spawnChannel-JD7G4VU6.js +70 -0
  279. package/chunks/{src-BBQSM46M.js → src-G5UPLZSZ.js} +122 -52
  280. package/chunks/{src-7XL4G4DC.js → src-VLI3TKEY.js} +4 -4
  281. package/chunks/standalone-update-OB7F4JPZ.js +79 -0
  282. package/chunks/{startInteractiveUI-JII36UGN.js → startInteractiveUI-73EGLIIH.js} +1775 -1663
  283. package/chunks/stdioHelpers-UMY72QRP.js +14 -0
  284. package/chunks/{syntheticOutput-F7LSDCAR.js → syntheticOutput-34H7LGA7.js} +5 -5
  285. package/chunks/task-create-FRGOEIKY.js +22 -0
  286. package/chunks/{task-list-TGGJX7EA.js → task-list-OW766BXZ.js} +10 -10
  287. package/chunks/{task-stop-W7NGTMYQ.js → task-stop-SIR5SNBN.js} +4 -4
  288. package/chunks/{task-update-XYWMHJGJ.js → task-update-YRA532MT.js} +12 -12
  289. package/chunks/{team-create-A7NUU5AQ.js → team-create-PECAAPXK.js} +50 -50
  290. package/chunks/{team-delete-UHQQ2QQX.js → team-delete-6OSECUZC.js} +10 -10
  291. package/chunks/{team-plan-approval-TOQRJ2KI.js → team-plan-approval-L6F434RY.js} +50 -50
  292. package/chunks/theme-manager-ZG4RY6GU.js +64 -0
  293. package/chunks/{todoWrite-C4ZAMSR3.js → todoWrite-YDMFEV4G.js} +6 -6
  294. package/chunks/{tool-search-SZ4EFS2T.js → tool-search-THVIWAPB.js} +24 -24
  295. package/chunks/total-session-admission-JOKNRIIA.js +72 -0
  296. package/chunks/trustedFolders-EOGT3UVS.js +79 -0
  297. package/chunks/{types-QX5C3CHJ.js → types-JNKGKUJT.js} +2 -2
  298. package/chunks/updateCheck-2KYEYVSB.js +69 -0
  299. package/chunks/updateEventEmitter-5MKC7BLQ.js +10 -0
  300. package/chunks/validateNonInterActiveAuth-EN6ZQSR2.js +190 -0
  301. package/chunks/{version-NO2XSNNP.js → version-3UEA6ZIR.js} +3 -3
  302. package/chunks/{web-fetch-UYGMOHW4.js → web-fetch-PAAEQKBW.js} +8 -8
  303. package/chunks/{workflow-WO2H6NRI.js → workflow-QCCCMYP3.js} +51 -51
  304. package/chunks/workspace-providers-status-4KMGETOJ.js +71 -0
  305. package/chunks/workspace-registry-24QFLQYH.js +76 -0
  306. package/chunks/workspace-service-RVLBMSMZ.js +80 -0
  307. package/chunks/workspace-skills-status-DS4ZVFTO.js +70 -0
  308. package/chunks/{write-file-PX2Z7IBE.js → write-file-I3MUDRIE.js} +51 -51
  309. package/chunks/{yargs-B64EYTCF.js → yargs-6H2AUULL.js} +2 -2
  310. package/chunks/{zh-J4F6QWQV.js → zh-RQE7I22T.js} +74 -6
  311. package/chunks/{zh-TW-XVDWOLSW.js → zh-TW-TBPQGHKH.js} +74 -6
  312. package/cli.js +18 -17
  313. package/locales/ca.js +85 -7
  314. package/locales/de.js +84 -7
  315. package/locales/en.js +101 -7
  316. package/locales/fr.js +85 -7
  317. package/locales/ja.js +86 -6
  318. package/locales/pt.js +84 -7
  319. package/locales/ru.js +84 -7
  320. package/locales/zh-TW.js +97 -6
  321. package/locales/zh.js +97 -6
  322. package/package.json +3 -6
  323. package/web-shell/assets/{arc-BWyoJpY2.js → arc-C15hqnJe.js} +1 -1
  324. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BT0mGrz2.js → architectureDiagram-3BPJPVTR-B-At37J_.js} +1 -1
  325. package/web-shell/assets/{blockDiagram-GPEHLZMM-BLgUWvyf.js → blockDiagram-GPEHLZMM-B51wjcU7.js} +1 -1
  326. package/web-shell/assets/{c4Diagram-AAUBKEIU-DYx9M7oU.js → c4Diagram-AAUBKEIU-xBK7BAwN.js} +1 -1
  327. package/web-shell/assets/channel-CLiQD50f.js +1 -0
  328. package/web-shell/assets/{chunk-2J33WTMH-CfMHWbuZ.js → chunk-2J33WTMH-xKmLg7Yr.js} +1 -1
  329. package/web-shell/assets/{chunk-4BX2VUAB-B1URoqEV.js → chunk-4BX2VUAB-BfkdKZCM.js} +1 -1
  330. package/web-shell/assets/{chunk-55IACEB6-DAIaM4QF.js → chunk-55IACEB6-DT713sZf.js} +1 -1
  331. package/web-shell/assets/{chunk-727SXJPM-B2X34knw.js → chunk-727SXJPM-CYEeAamv.js} +1 -1
  332. package/web-shell/assets/{chunk-AQP2D5EJ-Cif-zLTQ.js → chunk-AQP2D5EJ-DBN-5CFd.js} +1 -1
  333. package/web-shell/assets/{chunk-FMBD7UC4-H18WCXdY.js → chunk-FMBD7UC4-CGZKk4PH.js} +1 -1
  334. package/web-shell/assets/{chunk-ND2GUHAM-YFtetHi0.js → chunk-ND2GUHAM-qQbC2O-y.js} +1 -1
  335. package/web-shell/assets/{chunk-QZHKN3VN-By2hiH3r.js → chunk-QZHKN3VN-B3zeXwsX.js} +1 -1
  336. package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +1 -0
  337. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +1 -0
  338. package/web-shell/assets/{cose-bilkent-S5V4N54A-VrcnnLZu.js → cose-bilkent-S5V4N54A-BKsl1Wvy.js} +1 -1
  339. package/web-shell/assets/{dagre-BM42HDAG-CGo-IaVV.js → dagre-BM42HDAG-CuuuLiBK.js} +1 -1
  340. package/web-shell/assets/{diagram-2AECGRRQ-Dl4QjzIB.js → diagram-2AECGRRQ-CG4_eKiV.js} +1 -1
  341. package/web-shell/assets/{diagram-5GNKFQAL-qMLmsO0u.js → diagram-5GNKFQAL-DSFTmZB1.js} +1 -1
  342. package/web-shell/assets/{diagram-KO2AKTUF-CHlmuxPI.js → diagram-KO2AKTUF-BxwlEHn8.js} +1 -1
  343. package/web-shell/assets/{diagram-LMA3HP47-BUwU3GwT.js → diagram-LMA3HP47-BUAg-jMG.js} +1 -1
  344. package/web-shell/assets/{diagram-OG6HWLK6-HEhwPDUM.js → diagram-OG6HWLK6-BFM2jlO5.js} +1 -1
  345. package/web-shell/assets/{erDiagram-TEJ5UH35-1n0llBmM.js → erDiagram-TEJ5UH35-CerbFPa2.js} +1 -1
  346. package/web-shell/assets/{flowDiagram-I6XJVG4X-BN74uMnt.js → flowDiagram-I6XJVG4X-BNeZz5Zz.js} +1 -1
  347. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BoOq78i3.js → ganttDiagram-6RSMTGT7-CTOogLaM.js} +1 -1
  348. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CN8b00c8.js → gitGraphDiagram-PVQCEYII-yxSFkXPj.js} +1 -1
  349. package/web-shell/assets/index-D5IWFVk1.css +5 -0
  350. package/web-shell/assets/index-KFJRDhX7.js +783 -0
  351. package/web-shell/assets/{infoDiagram-5YYISTIA-CCurnIna.js → infoDiagram-5YYISTIA-DYdAUevm.js} +1 -1
  352. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-AwuRqdUP.js → ishikawaDiagram-YF4QCWOH-CNuijZ90.js} +1 -1
  353. package/web-shell/assets/{journeyDiagram-JHISSGLW-B7IICk-E.js → journeyDiagram-JHISSGLW-BTyiuonf.js} +1 -1
  354. package/web-shell/assets/{kanban-definition-UN3LZRKU-BYF0OKhx.js → kanban-definition-UN3LZRKU-DPJo0Uow.js} +1 -1
  355. package/web-shell/assets/{linear-GWWguGfD.js → linear-C8wKCbIC.js} +1 -1
  356. package/web-shell/assets/{mermaid.core-JqtkxvCl.js → mermaid.core-BV5o7nW5.js} +5 -5
  357. package/web-shell/assets/{mindmap-definition-RKZ34NQL-B0MmHsZ6.js → mindmap-definition-RKZ34NQL-BtLcBmSt.js} +1 -1
  358. package/web-shell/assets/{pieDiagram-4H26LBE5-DhImUZLQ.js → pieDiagram-4H26LBE5-C22J7A9Q.js} +1 -1
  359. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DGeSC3DT.js → quadrantDiagram-W4KKPZXB-DSL10wiL.js} +1 -1
  360. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DkspY6Re.js → requirementDiagram-4Y6WPE33-feqh0UpX.js} +1 -1
  361. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CaOofS2x.js → sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js} +1 -1
  362. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DFQ_kFnN.js → sequenceDiagram-3UESZ5HK-DIluIcb1.js} +1 -1
  363. package/web-shell/assets/{stateDiagram-AJRCARHV-D3snw0Tz.js → stateDiagram-AJRCARHV-hlhnuoYH.js} +1 -1
  364. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +1 -0
  365. package/web-shell/assets/{timeline-definition-PNZ67QCA-l4zH8nLM.js → timeline-definition-PNZ67QCA-Dqf_CqgL.js} +1 -1
  366. package/web-shell/assets/{vennDiagram-CIIHVFJN-BnRlA98M.js → vennDiagram-CIIHVFJN-DD2QhaTX.js} +1 -1
  367. package/web-shell/assets/{wardley-L42UT6IY-BS0xUdmd.js → wardley-L42UT6IY-B2uI85U_.js} +1 -1
  368. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DKGBUWyQ.js → wardleyDiagram-YWT4CUSO-U1aJX71g.js} +1 -1
  369. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DVb2HuOB.js → xychartDiagram-2RQKCTM6-C0ODHUee.js} +1 -1
  370. package/web-shell/index.html +16 -4
  371. package/chunks/MaxSizedBox-5DT2SD7B.js +0 -71
  372. package/chunks/agent-H2DGKS77.js +0 -68
  373. package/chunks/agent-headless-KFMFIT6J.js +0 -62
  374. package/chunks/bridge-NA3ZQQKJ.js +0 -78
  375. package/chunks/chunk-6SHO7WFF.js +0 -79
  376. package/chunks/chunk-IFEWJXFS.js +0 -37
  377. package/chunks/chunk-S6RLAIUR.js +0 -23
  378. package/chunks/chunk-XNXVCNAT.js +0 -88
  379. package/chunks/contextCommand-LXFZRP4L.js +0 -68
  380. package/chunks/daemon-status-provider-GJRXY5EN.js +0 -76
  381. package/chunks/earlyInputCapture-KNOYZ4MJ.js +0 -69
  382. package/chunks/environment-ATFTYMLZ.js +0 -88
  383. package/chunks/errors-A54HAADA.js +0 -75
  384. package/chunks/handleAutoUpdate-CEZJAARW.js +0 -65
  385. package/chunks/initializer-BRFJKRRX.js +0 -71
  386. package/chunks/list-KVHF7O4X.js +0 -73
  387. package/chunks/loadedSettingsAdapter-LL5PSFKX.js +0 -68
  388. package/chunks/mcp-3GCXRTOQ.js +0 -68
  389. package/chunks/nonInteractiveCli-PTQI3DV6.js +0 -119
  390. package/chunks/openaiContentGenerator-YE42PKCY.js +0 -56
  391. package/chunks/pidfile-NZYSCFRK.js +0 -73
  392. package/chunks/read-file-33XGP5HF.js +0 -30
  393. package/chunks/ripGrep-QWZLGTAN.js +0 -60
  394. package/chunks/serve-JTMIGANH.js +0 -74
  395. package/chunks/settings-3MI4XXP6.js +0 -118
  396. package/chunks/shell-YJKBE67T.js +0 -68
  397. package/chunks/spawnChannel-UNV6W4DU.js +0 -70
  398. package/chunks/task-create-WCHTB435.js +0 -22
  399. package/chunks/theme-manager-WZ4RRMMB.js +0 -64
  400. package/chunks/total-session-admission-ULXJWXFV.js +0 -72
  401. package/chunks/trustedFolders-LAZZPZ3D.js +0 -79
  402. package/chunks/updateCheck-KONLM73X.js +0 -65
  403. package/chunks/validateNonInterActiveAuth-MPKSRCXD.js +0 -184
  404. package/chunks/workspace-providers-status-3W7E7DFW.js +0 -71
  405. package/chunks/workspace-registry-SXJZNN3O.js +0 -74
  406. package/chunks/workspace-service-CZRQZ4Q4.js +0 -80
  407. package/chunks/workspace-skills-status-K7WFREPD.js +0 -70
  408. package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +0 -35
  409. package/node_modules/@qwen-code/audio-capture/dist/index.js +0 -48
  410. package/node_modules/@qwen-code/audio-capture/dist/index.js.map +0 -1
  411. package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +0 -7
  412. package/node_modules/@qwen-code/audio-capture/dist/platform.js +0 -18
  413. package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +0 -1
  414. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +0 -21
  415. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +0 -58
  416. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +0 -5
  417. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +0 -84
  418. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +0 -19
  419. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +0 -6
  420. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +0 -207
  421. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +0 -7
  422. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +0 -43
  423. package/node_modules/@qwen-code/audio-capture/package.json +0 -30
  424. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  425. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  426. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
  427. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
  428. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  429. package/web-shell/assets/channel-wmPUGHtg.js +0 -1
  430. package/web-shell/assets/classDiagram-4FO5ZUOK-BA2ljEjW.js +0 -1
  431. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BA2ljEjW.js +0 -1
  432. package/web-shell/assets/index-CNwoO1Cn.js +0 -783
  433. package/web-shell/assets/index-CWQ0z6kZ.css +0 -5
  434. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BbSm_9d0.js +0 -1
@@ -3,10 +3,10 @@
3
3
  import {
4
4
  DaemonMetricsRing,
5
5
  computeCpuPercent
6
- } from "./chunk-II73RK2S.js";
6
+ } from "./chunk-YVEDCAUE.js";
7
7
  import {
8
- findCliEntryPath
9
- } from "./chunk-AHNXYU4O.js";
8
+ RUNTIME_STARTUP_CANCELLED_MESSAGE
9
+ } from "./chunk-QUPXZXLV.js";
10
10
  import {
11
11
  CAPABILITIES_SCHEMA_VERSION,
12
12
  ClientMcpSenderRegistry,
@@ -22,71 +22,75 @@ import {
22
22
  getRateLimiter,
23
23
  getServeProtocolVersions,
24
24
  hostAllowlist,
25
+ isBrowserAutomationMcpAvailable,
25
26
  listenerMaxConnections,
26
27
  parseAllowOriginPatterns,
27
28
  parseDaemonStatusDetail,
28
29
  positiveFiniteOrNull,
29
30
  require_express,
30
31
  resolveWebShellDir
31
- } from "./chunk-YKZIAK7C.js";
32
+ } from "./chunk-KHUQZZJ6.js";
32
33
  import {
33
34
  isLoopbackBind
34
- } from "./chunk-RNBYOUGV.js";
35
- import "./chunk-3HX5LZ6R.js";
36
- import "./chunk-7RYW5LQV.js";
37
- import {
38
- RUNTIME_STARTUP_CANCELLED_MESSAGE
39
- } from "./chunk-GHOTR7HL.js";
35
+ } from "./chunk-RXFQM6FQ.js";
40
36
  import {
41
37
  LOAD_REPLAY_META_KEY
42
- } from "./chunk-AGHU5VRK.js";
38
+ } from "./chunk-PZL23GTM.js";
39
+ import {
40
+ canonicalizeWorkspace
41
+ } from "./chunk-W7FJ3N32.js";
43
42
  import {
44
43
  DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
45
44
  normalizeCompactedReplayMaxBytes
46
- } from "./chunk-GLE2YUPU.js";
47
- import {
48
- canonicalizeWorkspace
49
- } from "./chunk-ER3BKOLB.js";
45
+ } from "./chunk-COH43MRJ.js";
46
+ import "./chunk-WBL3FJEU.js";
47
+ import "./chunk-T2NCM2ET.js";
50
48
  import {
51
49
  loadServeFastPathSettings,
52
50
  preResolveServeFastPathHomeEnvOverrides
53
- } from "./chunk-FBET5XZ2.js";
51
+ } from "./chunk-3SJSQXNS.js";
52
+ import {
53
+ getGlobalQwenDirLite,
54
+ resolveConfigPathLite
55
+ } from "./chunk-3BTRNWWD.js";
56
+ import "./chunk-QRUIS3DN.js";
54
57
  import {
58
+ ChannelWebhookEnqueueError,
55
59
  QWEN_SERVER_TOKEN_ENV
56
- } from "./chunk-S6RLAIUR.js";
60
+ } from "./chunk-X4NKFGFJ.js";
57
61
  import {
58
62
  channelSelectionNames
59
- } from "./chunk-MX2YXRER.js";
63
+ } from "./chunk-TJTKSVIV.js";
60
64
  import {
61
- getGlobalQwenDirLite,
62
- resolveConfigPathLite
63
- } from "./chunk-O2YT7VB4.js";
64
- import "./chunk-Z3I3QJK3.js";
65
+ sanitizeLogText
66
+ } from "./chunk-34Z3U5RQ.js";
67
+ import "./chunk-UDXSXLER.js";
68
+ import {
69
+ isWithinRoot
70
+ } from "./chunk-RDJSGHZE.js";
65
71
  import {
66
72
  getCliVersion
67
- } from "./chunk-UXEW557D.js";
68
- import "./chunk-43W4YSO6.js";
73
+ } from "./chunk-3AHXV67U.js";
74
+ import "./chunk-VJNBRRZG.js";
69
75
  import {
70
76
  writeStderrLine,
71
77
  writeStdoutLine
72
- } from "./chunk-Y6Z2O3WR.js";
73
- import {
74
- isWithinRoot
75
- } from "./chunk-QYUE6W3T.js";
76
- import "./chunk-5P5XGNYH.js";
77
- import "./chunk-SKAZWEV5.js";
78
- import "./chunk-UWCTAVOD.js";
79
- import "./chunk-SYCJMSIJ.js";
78
+ } from "./chunk-YUZI3WAC.js";
79
+ import "./chunk-CU3L64TP.js";
80
+ import "./chunk-ZJE7NSL3.js";
81
+ import "./chunk-H6XPXXMH.js";
82
+ import "./chunk-CR3C7WXL.js";
83
+ import "./chunk-XWRJCPHC.js";
80
84
  import {
81
85
  finalizeStartupProfile,
82
86
  profileCheckpoint
83
- } from "./chunk-ITOGNELQ.js";
84
- import "./chunk-FXGLL2HL.js";
85
- import "./chunk-QN5NZ3UQ.js";
86
- import "./chunk-BR4QREVK.js";
87
+ } from "./chunk-QSWDGAIC.js";
88
+ import "./chunk-Q7YDKOGY.js";
89
+ import "./chunk-DMTGGOSA.js";
90
+ import "./chunk-YQ3U5MUC.js";
87
91
  import {
88
92
  init_esbuild_shims
89
- } from "./chunk-A4BMJM77.js";
93
+ } from "./chunk-5O2XNYP6.js";
90
94
  import {
91
95
  __name,
92
96
  __toESM
@@ -95,7 +99,7 @@ import {
95
99
  // packages/cli/src/serve/run-qwen-serve.ts
96
100
  init_esbuild_shims();
97
101
  var import_express = __toESM(require_express(), 1);
98
- import { X509Certificate } from "node:crypto";
102
+ import { X509Certificate, createHash as createHash2, timingSafeEqual } from "node:crypto";
99
103
  import * as fs from "node:fs";
100
104
  import * as https from "node:https";
101
105
  import * as path from "node:path";
@@ -1074,6 +1078,10 @@ function extractContextFilename(value) {
1074
1078
  return void 0;
1075
1079
  }
1076
1080
  __name(extractContextFilename, "extractContextFilename");
1081
+ function sessionArtifactsPersistenceAvailableFromSettings(settings) {
1082
+ return settings?.general?.chatRecording !== false;
1083
+ }
1084
+ __name(sessionArtifactsPersistenceAvailableFromSettings, "sessionArtifactsPersistenceAvailableFromSettings");
1077
1085
  var settingsWriteLocks = /* @__PURE__ */ new Map();
1078
1086
  function withSettingsLock(workspace, fn) {
1079
1087
  const prev = settingsWriteLocks.get(workspace) ?? Promise.resolve();
@@ -1085,11 +1093,13 @@ __name(withSettingsLock, "withSettingsLock");
1085
1093
  var channelWorkerRuntimePromise;
1086
1094
  async function loadChannelWorkerRuntime() {
1087
1095
  channelWorkerRuntimePromise ??= Promise.all([
1088
- import("./channel-worker-supervisor-NZQUOEFJ.js"),
1089
- import("./pidfile-NZYSCFRK.js")
1090
- ]).then(([supervisor, pidfile]) => ({
1096
+ import("./channel-worker-supervisor-WSOAAYUO.js"),
1097
+ import("./pidfile-D4I4FTVA.js"),
1098
+ import("./cli-entry-path-4VJ3Y6T2.js")
1099
+ ]).then(([supervisor, pidfile, cliEntryPath]) => ({
1091
1100
  createChannelWorkerSupervisor: supervisor.createChannelWorkerSupervisor,
1092
- channelServicePidfile: pidfile
1101
+ channelServicePidfile: pidfile,
1102
+ findCliEntryPath: cliEntryPath.findCliEntryPath
1093
1103
  })).catch((err) => {
1094
1104
  channelWorkerRuntimePromise = void 0;
1095
1105
  throw err;
@@ -1108,9 +1118,18 @@ function createDisabledChannelWorkerSupervisor() {
1108
1118
  },
1109
1119
  async stop() {
1110
1120
  },
1121
+ async restart() {
1122
+ return { ...snapshot, channels: [] };
1123
+ },
1111
1124
  killAllSync() {
1112
1125
  },
1113
- snapshot: /* @__PURE__ */ __name(() => ({ ...snapshot, channels: [] }), "snapshot")
1126
+ snapshot: /* @__PURE__ */ __name(() => ({ ...snapshot, channels: [] }), "snapshot"),
1127
+ async enqueueWebhookTask() {
1128
+ throw new ChannelWebhookEnqueueError(
1129
+ "channel_worker_unavailable",
1130
+ "Channel worker is not running."
1131
+ );
1132
+ }
1114
1133
  };
1115
1134
  }
1116
1135
  __name(createDisabledChannelWorkerSupervisor, "createDisabledChannelWorkerSupervisor");
@@ -1157,7 +1176,7 @@ function shouldPreheatBridge(deps) {
1157
1176
  __name(shouldPreheatBridge, "shouldPreheatBridge");
1158
1177
  var coreRuntimePromise;
1159
1178
  function loadCoreRuntime() {
1160
- coreRuntimePromise ??= import("./src-BBQSM46M.js");
1179
+ coreRuntimePromise ??= import("./src-G5UPLZSZ.js");
1161
1180
  return coreRuntimePromise;
1162
1181
  }
1163
1182
  __name(loadCoreRuntime, "loadCoreRuntime");
@@ -1187,10 +1206,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
1187
1206
  var settingsRuntimePromise;
1188
1207
  function loadSettingsRuntimeModules() {
1189
1208
  settingsRuntimePromise ??= Promise.all([
1190
- import("./settings-3MI4XXP6.js"),
1191
- import("./environment-ATFTYMLZ.js"),
1192
- import("./loadedSettingsAdapter-LL5PSFKX.js"),
1193
- import("./trustedFolders-LAZZPZ3D.js")
1209
+ import("./settings-3EYN66GK.js"),
1210
+ import("./environment-5HSSRMJ7.js"),
1211
+ import("./loadedSettingsAdapter-NOWEGDYJ.js"),
1212
+ import("./trustedFolders-EOGT3UVS.js")
1194
1213
  ]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
1195
1214
  settings,
1196
1215
  environment,
@@ -1200,6 +1219,21 @@ function loadSettingsRuntimeModules() {
1200
1219
  return settingsRuntimePromise;
1201
1220
  }
1202
1221
  __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
1222
+ var channelWebhookConfigRuntimePromise;
1223
+ function loadChannelWebhookConfigRuntime() {
1224
+ channelWebhookConfigRuntimePromise ??= Promise.all([
1225
+ import("./runtime-57WWRVHN.js"),
1226
+ import("./config-utils-NV2SVGPB.js")
1227
+ ]).then(([channelRuntime, configUtils]) => ({
1228
+ loadChannelsConfig: channelRuntime.loadChannelsConfig,
1229
+ parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
1230
+ })).catch((err) => {
1231
+ channelWebhookConfigRuntimePromise = void 0;
1232
+ throw err;
1233
+ });
1234
+ return channelWebhookConfigRuntimePromise;
1235
+ }
1236
+ __name(loadChannelWebhookConfigRuntime, "loadChannelWebhookConfigRuntime");
1203
1237
  async function loadServeRuntimeModules() {
1204
1238
  const [
1205
1239
  serverModule,
@@ -1213,16 +1247,16 @@ async function loadServeRuntimeModules() {
1213
1247
  totalSessionAdmissionModule,
1214
1248
  workspaceRegistryModule
1215
1249
  ] = await Promise.all([
1216
- import("./server-SGNPKX2O.js"),
1217
- import("./bridge-NA3ZQQKJ.js"),
1218
- import("./spawnChannel-UNV6W4DU.js"),
1219
- import("./workspace-service-CZRQZ4Q4.js"),
1220
- import("./types-QX5C3CHJ.js"),
1221
- import("./daemon-status-provider-GJRXY5EN.js"),
1222
- import("./workspace-providers-status-3W7E7DFW.js"),
1223
- import("./workspace-skills-status-K7WFREPD.js"),
1224
- import("./total-session-admission-ULXJWXFV.js"),
1225
- import("./workspace-registry-SXJZNN3O.js")
1250
+ import("./server-Z22GCAXP.js"),
1251
+ import("./bridge-BCJQ7BBB.js"),
1252
+ import("./spawnChannel-JD7G4VU6.js"),
1253
+ import("./workspace-service-RVLBMSMZ.js"),
1254
+ import("./types-JNKGKUJT.js"),
1255
+ import("./daemon-status-provider-B2UTZUJ2.js"),
1256
+ import("./workspace-providers-status-4KMGETOJ.js"),
1257
+ import("./workspace-skills-status-DS4ZVFTO.js"),
1258
+ import("./total-session-admission-JOKNRIIA.js"),
1259
+ import("./workspace-registry-24QFLQYH.js")
1226
1260
  ]);
1227
1261
  return {
1228
1262
  createServeApp: serverModule.createServeApp,
@@ -1237,7 +1271,8 @@ async function loadServeRuntimeModules() {
1237
1271
  createWorkspaceProvidersStatusProvider: workspaceProvidersStatusModule.createWorkspaceProvidersStatusProvider,
1238
1272
  createWorkspaceSkillsStatusProvider: workspaceSkillsStatusModule.createWorkspaceSkillsStatusProvider,
1239
1273
  createTotalSessionAdmissionController: totalSessionAdmissionModule.createTotalSessionAdmissionController,
1240
- createWorkspaceRegistry: workspaceRegistryModule.createWorkspaceRegistry
1274
+ createWorkspaceRegistry: workspaceRegistryModule.createWorkspaceRegistry,
1275
+ createWorkspaceSessionOwnerIndex: workspaceRegistryModule.createWorkspaceSessionOwnerIndex
1241
1276
  };
1242
1277
  }
1243
1278
  __name(loadServeRuntimeModules, "loadServeRuntimeModules");
@@ -1261,7 +1296,7 @@ function sessionIdleTimeoutMs(value) {
1261
1296
  return value !== void 0 ? channelIdleTimeoutMs(value) : DEFAULT_SESSION_IDLE_TIMEOUT_MS;
1262
1297
  }
1263
1298
  __name(sessionIdleTimeoutMs, "sessionIdleTimeoutMs");
1264
- function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled) {
1299
+ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, sessionArtifactsPersistenceAvailable, env) {
1265
1300
  return getAdvertisedServeFeatures(void 0, {
1266
1301
  requireAuth: opts.requireAuth === true,
1267
1302
  mcpPoolActive: opts.mcpPoolActive !== false,
@@ -1270,12 +1305,15 @@ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled) {
1270
1305
  ...opts.writerIdleTimeoutMs !== void 0 ? { writerIdleTimeoutMs: opts.writerIdleTimeoutMs } : {},
1271
1306
  persistSettingAvailable: true,
1272
1307
  sessionShellCommandEnabled,
1308
+ sessionArtifactsPersistenceAvailable,
1273
1309
  rateLimit: opts.rateLimit === true,
1274
1310
  reloadAvailable: true,
1311
+ channelReloadAvailable: opts.channelSelection !== void 0,
1275
1312
  // Advertise the same WS feature flags as the runtime path (serve-features.ts)
1276
1313
  // so the bootstrap `/capabilities` window doesn't briefly under-report them.
1277
1314
  clientMcpOverWsEnabled: opts.clientMcpOverWs === true,
1278
- cdpTunnelOverWsEnabled: opts.cdpTunnelOverWs === true
1315
+ cdpTunnelOverWsEnabled: opts.cdpTunnelOverWs === true,
1316
+ browserAutomationMcpAvailable: isBrowserAutomationMcpAvailable(opts, env)
1279
1317
  });
1280
1318
  }
1281
1319
  __name(currentServeFeaturesForRunQwenServe, "currentServeFeaturesForRunQwenServe");
@@ -1287,7 +1325,9 @@ function createBootstrapCapabilities(input) {
1287
1325
  mode: input.opts.mode,
1288
1326
  features: currentServeFeaturesForRunQwenServe(
1289
1327
  input.opts,
1290
- input.sessionShellCommandEnabled
1328
+ input.sessionShellCommandEnabled,
1329
+ input.sessionArtifactsPersistenceAvailable,
1330
+ input.env
1291
1331
  ),
1292
1332
  modelServices: [],
1293
1333
  workspaceCwd: input.boundWorkspace,
@@ -1432,6 +1472,7 @@ function createBootstrapServeApp(input) {
1432
1472
  daemonLog,
1433
1473
  qwenCodeVersion,
1434
1474
  sessionShellCommandEnabled,
1475
+ sessionArtifactsPersistenceAvailable,
1435
1476
  permissionPolicy,
1436
1477
  multiWorkspaceCapabilitiesRequireRuntime,
1437
1478
  getRuntimeError,
@@ -1487,7 +1528,9 @@ function createBootstrapServeApp(input) {
1487
1528
  boundWorkspace,
1488
1529
  qwenCodeVersion,
1489
1530
  sessionShellCommandEnabled,
1490
- permissionPolicy
1531
+ sessionArtifactsPersistenceAvailable,
1532
+ permissionPolicy,
1533
+ env: process.env
1491
1534
  })
1492
1535
  );
1493
1536
  });
@@ -1558,7 +1601,9 @@ function createBootstrapServeApp(input) {
1558
1601
  protocolVersions: getServeProtocolVersions(),
1559
1602
  features: currentServeFeaturesForRunQwenServe(
1560
1603
  opts,
1561
- sessionShellCommandEnabled
1604
+ sessionShellCommandEnabled,
1605
+ sessionArtifactsPersistenceAvailable,
1606
+ process.env
1562
1607
  )
1563
1608
  },
1564
1609
  runtime: {
@@ -1630,13 +1675,12 @@ function createDelegatingServeApp(bootstrapApp, getRuntimeApp, options = {}) {
1630
1675
  const dispatch = /* @__PURE__ */ __name(async () => {
1631
1676
  let target = getRuntimeApp();
1632
1677
  if (!target && options.waitForDeferredRuntimeRoutes === true && !isBootstrapServeRoute(req) && !isCorsPreflightRequest(req) && options.startRuntime && options.runtimeReady) {
1633
- if (options.authenticateDeferredRuntimeRequest && !runSynchronousRequestGate(
1634
- options.authenticateDeferredRuntimeRequest,
1635
- req,
1636
- res,
1637
- next
1638
- )) {
1639
- return;
1678
+ const webhookRequest = isChannelWebhookRequest(req);
1679
+ const authGate = webhookRequest ? options.authenticateDeferredChannelWebhookRequest ?? options.authenticateDeferredRuntimeRequest : options.authenticateDeferredRuntimeRequest;
1680
+ if (authGate) {
1681
+ if (!runSynchronousRequestGate(authGate, req, res, next)) {
1682
+ return;
1683
+ }
1640
1684
  }
1641
1685
  options.startRuntime();
1642
1686
  try {
@@ -1658,6 +1702,80 @@ function isBootstrapServeRoute(req) {
1658
1702
  return BOOTSTRAP_SERVE_PATHS.has(path2);
1659
1703
  }
1660
1704
  __name(isBootstrapServeRoute, "isBootstrapServeRoute");
1705
+ function isChannelWebhookRequest(req) {
1706
+ return req.method === "POST" && /^\/channels\/[^/]+\/webhooks\/[^/]+\/?$/u.test(req.path);
1707
+ }
1708
+ __name(isChannelWebhookRequest, "isChannelWebhookRequest");
1709
+ function createDeferredChannelWebhookAuth(workspace, runtime, daemonLog) {
1710
+ return (req, res, next) => {
1711
+ const match = /^\/channels\/([^/]+)\/webhooks\/([^/]+)\/?$/u.exec(req.path);
1712
+ const channelName = decodeDeferredWebhookPathSegment(match?.[1]);
1713
+ const source = decodeDeferredWebhookPathSegment(match?.[2]);
1714
+ if (!channelName || !source) {
1715
+ daemonLog.warn("deferred webhook auth failed", {
1716
+ channelName: channelName ?? "unknown",
1717
+ source: source ?? "unknown",
1718
+ reason: "invalid webhook path"
1719
+ });
1720
+ res.status(401).json({ error: "Invalid webhook secret" });
1721
+ return;
1722
+ }
1723
+ const secret = readDeferredWebhookSecret(
1724
+ runtime,
1725
+ workspace,
1726
+ channelName,
1727
+ source
1728
+ );
1729
+ if (!matchesWebhookSecret(req.get("x-qwen-webhook-secret"), secret)) {
1730
+ daemonLog.warn("deferred webhook auth failed", {
1731
+ channelName,
1732
+ source,
1733
+ reason: secret ? "secret mismatch" : "source not configured"
1734
+ });
1735
+ res.status(401).json({ error: "Invalid webhook secret" });
1736
+ return;
1737
+ }
1738
+ next();
1739
+ };
1740
+ }
1741
+ __name(createDeferredChannelWebhookAuth, "createDeferredChannelWebhookAuth");
1742
+ function decodeDeferredWebhookPathSegment(segment) {
1743
+ if (segment === void 0) return void 0;
1744
+ try {
1745
+ return decodeURIComponent(segment);
1746
+ } catch {
1747
+ return void 0;
1748
+ }
1749
+ }
1750
+ __name(decodeDeferredWebhookPathSegment, "decodeDeferredWebhookPathSegment");
1751
+ function readDeferredWebhookSecret(runtime, workspace, channelName, source) {
1752
+ try {
1753
+ const rawConfig = runtime.loadChannelsConfig(workspace)[channelName];
1754
+ if (typeof rawConfig !== "object" || rawConfig === null) {
1755
+ return void 0;
1756
+ }
1757
+ return runtime.parseChannelWebhookConfig(
1758
+ channelName,
1759
+ rawConfig
1760
+ )?.sources[source]?.secret;
1761
+ } catch (err) {
1762
+ const reason = err instanceof Error ? err.message : String(err);
1763
+ writeStderrLine(
1764
+ `[webhook-secret] failed to read deferred webhook secret for ${sanitizeLogText(channelName, 128)}/${sanitizeLogText(source, 128)}: ${sanitizeLogText(reason, 512)}`
1765
+ );
1766
+ return void 0;
1767
+ }
1768
+ }
1769
+ __name(readDeferredWebhookSecret, "readDeferredWebhookSecret");
1770
+ function matchesWebhookSecret(candidate, expected) {
1771
+ if (typeof candidate !== "string" || typeof expected !== "string" || expected.length === 0) {
1772
+ return false;
1773
+ }
1774
+ const expectedDigest = createHash2("sha256").update(expected).digest();
1775
+ const candidateDigest = createHash2("sha256").update(candidate).digest();
1776
+ return timingSafeEqual(expectedDigest, candidateDigest);
1777
+ }
1778
+ __name(matchesWebhookSecret, "matchesWebhookSecret");
1661
1779
  function isCorsPreflightRequest(req) {
1662
1780
  return req.method === "OPTIONS" && Boolean(req.headers.origin) && Boolean(
1663
1781
  req.headers["access-control-request-method"] || req.headers["access-control-request-headers"]
@@ -1933,8 +2051,10 @@ async function runQwenServe(optsIn, deps = {}) {
1933
2051
  let permissionPolicy;
1934
2052
  let permissionConsensusQuorum;
1935
2053
  let bootSettings;
2054
+ let sessionArtifactsPersistenceAvailable = true;
1936
2055
  try {
1937
2056
  bootSettings = deps.bootSettings ?? loadServeFastPathSettings(boundWorkspace);
2057
+ sessionArtifactsPersistenceAvailable = sessionArtifactsPersistenceAvailableFromSettings(bootSettings);
1938
2058
  contextFilenameForInit = extractContextFilename(
1939
2059
  bootSettings.context?.fileName
1940
2060
  );
@@ -2114,6 +2234,7 @@ async function runQwenServe(optsIn, deps = {}) {
2114
2234
  }, "disposeDaemonEventLoopMonitor");
2115
2235
  let channelWorker = createDisabledChannelWorkerSupervisor();
2116
2236
  const getChannelWorkerSnapshot = /* @__PURE__ */ __name(() => channelWorker.snapshot(), "getChannelWorkerSnapshot");
2237
+ const reloadChannelWorker = /* @__PURE__ */ __name(() => channelWorker.restart(), "reloadChannelWorker");
2117
2238
  const writeChannelWorkerPidfile = /* @__PURE__ */ __name((snapshot = channelWorker.snapshot(), options = {}) => {
2118
2239
  if (!opts.channelSelection || !channelServicePidfile) return;
2119
2240
  try {
@@ -2414,6 +2535,7 @@ async function runQwenServe(optsIn, deps = {}) {
2414
2535
  getBridges: /* @__PURE__ */ __name(() => runtimeBridges.length > 0 ? runtimeBridges : bridgeRef ? [bridgeRef] : [], "getBridges")
2415
2536
  }
2416
2537
  );
2538
+ const sessionOwnerIndex = runtime.createWorkspaceSessionOwnerIndex();
2417
2539
  const persistDisabledToolsFn = /* @__PURE__ */ __name((workspace, toolName, enabled) => withSettingsLock(workspace, async () => {
2418
2540
  const fresh = settingsRuntime.settings.loadSettings(workspace);
2419
2541
  const wsScope = fresh.forScope(WORKSPACE_SETTING_SCOPE).settings;
@@ -2460,12 +2582,19 @@ async function runQwenServe(optsIn, deps = {}) {
2460
2582
  );
2461
2583
  }
2462
2584
  }), "persistSettingsFn");
2585
+ const { createSubSessionLauncher } = await import("./create-sub-session-KPRT7ECJ.js");
2586
+ const subSessionLauncher = createSubSessionLauncher({
2587
+ getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
2588
+ boundWorkspace
2589
+ });
2463
2590
  const bridge = deps.bridge ?? runtime.createAcpSessionBridge({
2464
2591
  // Reverse tool channel: let `BridgeClient.extMethod` reach the WS
2465
2592
  // connection that hosts a named client MCP server (#5626).
2466
2593
  clientMcpSender: clientMcpSenderRegistry.lookup,
2594
+ onCreateSubSession: subSessionLauncher.launch,
2467
2595
  maxSessions: opts.maxSessions,
2468
2596
  freshSessionAdmission: totalSessionAdmission.admit,
2597
+ sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
2469
2598
  ...opts.maxPendingPromptsPerSession !== void 0 ? { maxPendingPromptsPerSession: opts.maxPendingPromptsPerSession } : {},
2470
2599
  ...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
2471
2600
  ...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
@@ -2504,6 +2633,7 @@ async function runQwenServe(optsIn, deps = {}) {
2504
2633
  persistDisabledTools: persistDisabledToolsFn,
2505
2634
  persistSetting: persistSettingFn,
2506
2635
  persistSettings: persistSettingsFn,
2636
+ preheatAcpChild: /* @__PURE__ */ __name(() => bridge.preheat(), "preheatAcpChild"),
2507
2637
  reloadDaemonEnv: /* @__PURE__ */ __name((workspace) => withSettingsLock(workspace, async () => {
2508
2638
  const fresh = settingsRuntime.settings.loadSettings(workspace, {
2509
2639
  skipLoadEnvironment: true
@@ -2614,6 +2744,7 @@ async function runQwenServe(optsIn, deps = {}) {
2614
2744
  }
2615
2745
  };
2616
2746
  }, "createRuntimeEnvMetadata");
2747
+ const subSessionStoppers = [];
2617
2748
  for (const workspaceInput of workspaceInputs.slice(1)) {
2618
2749
  let secondarySettings;
2619
2750
  try {
@@ -2667,10 +2798,17 @@ async function runQwenServe(optsIn, deps = {}) {
2667
2798
  ...opts.experimentalLsp === true ? { extraArgs: ["--experimental-lsp"] } : {}
2668
2799
  });
2669
2800
  const secondaryClientMcpSenderRegistry = new ClientMcpSenderRegistry();
2801
+ let secondaryBridgeRef;
2802
+ const secondarySubSessionLauncher = createSubSessionLauncher({
2803
+ getBridge: /* @__PURE__ */ __name(() => secondaryBridgeRef, "getBridge"),
2804
+ boundWorkspace: workspaceInput.cwd
2805
+ });
2670
2806
  const secondaryBridge = runtime.createAcpSessionBridge({
2671
2807
  clientMcpSender: secondaryClientMcpSenderRegistry.lookup,
2808
+ onCreateSubSession: secondarySubSessionLauncher.launch,
2672
2809
  maxSessions: opts.maxSessions,
2673
2810
  freshSessionAdmission: totalSessionAdmission.admit,
2811
+ sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
2674
2812
  ...opts.maxPendingPromptsPerSession !== void 0 ? { maxPendingPromptsPerSession: opts.maxPendingPromptsPerSession } : {},
2675
2813
  ...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
2676
2814
  ...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
@@ -2696,8 +2834,10 @@ async function runQwenServe(optsIn, deps = {}) {
2696
2834
  fresh.setValue(WORKSPACE_SETTING_SCOPE, "tools.approvalMode", mode);
2697
2835
  }), "persistApprovalMode")
2698
2836
  });
2837
+ secondaryBridgeRef = secondaryBridge;
2699
2838
  runtimeBridges.push(secondaryBridge);
2700
2839
  internalRuntimeBridgesForCleanup.push(secondaryBridge);
2840
+ subSessionStoppers.push(secondarySubSessionLauncher.stop);
2701
2841
  const secondaryWorkspaceService = runtime.createDaemonWorkspaceService({
2702
2842
  boundWorkspace: workspaceInput.cwd,
2703
2843
  contextFilename: contextFilenameForInit ?? "QWEN.md",
@@ -2707,6 +2847,7 @@ async function runQwenServe(optsIn, deps = {}) {
2707
2847
  }),
2708
2848
  workspaceSkillsStatusProvider: runtime.createWorkspaceSkillsStatusProvider(),
2709
2849
  isChannelLive: /* @__PURE__ */ __name(() => secondaryBridge.isChannelLive(), "isChannelLive"),
2850
+ preheatAcpChild: /* @__PURE__ */ __name(() => secondaryBridge.preheat(), "preheatAcpChild"),
2710
2851
  persistDisabledTools: persistDisabledToolsFn,
2711
2852
  persistSetting: persistSettingFn,
2712
2853
  persistSettings: persistSettingsFn,
@@ -2772,7 +2913,9 @@ async function runQwenServe(optsIn, deps = {}) {
2772
2913
  clientMcpSenderRegistry: secondaryClientMcpSenderRegistry
2773
2914
  });
2774
2915
  }
2775
- const workspaceRegistry = runtime.createWorkspaceRegistry(workspaceRuntimes);
2916
+ const workspaceRegistry = runtime.createWorkspaceRegistry(workspaceRuntimes, {
2917
+ sessionOwnerIndex
2918
+ });
2776
2919
  core.registerDaemonGaugeCallbacks({
2777
2920
  sessionCount: /* @__PURE__ */ __name(() => workspaceRegistry.list().reduce((sum, item) => sum + item.bridge.sessionCount, 0), "sessionCount"),
2778
2921
  sseCount: /* @__PURE__ */ __name(() => runtime.getActiveSseCount(), "sseCount"),
@@ -2864,8 +3007,163 @@ async function runQwenServe(optsIn, deps = {}) {
2864
3007
  metricsLoopDelay.disable();
2865
3008
  }
2866
3009
  };
3010
+ const createDynamicWorkspaceRuntime = /* @__PURE__ */ __name(async (cwd) => {
3011
+ let wsSettings;
3012
+ try {
3013
+ wsSettings = settingsRuntime.settings.loadSettings(cwd);
3014
+ } catch (err) {
3015
+ writeStderrLine(
3016
+ `qwen serve: could not read full settings for dynamic workspace ${cwd} (${err instanceof Error ? err.message : String(err)}); falling back to defaults.`
3017
+ );
3018
+ }
3019
+ const trusted = wsSettings ? settingsRuntime.trustedFolders.getWorkspaceTrustStatus(
3020
+ wsSettings.merged,
3021
+ cwd
3022
+ ).effective.state === "trusted" : false;
3023
+ const wsEnv = createRuntimeEnvMetadata(cwd, wsSettings);
3024
+ const wsHash = core.hashDaemonWorkspace(cwd);
3025
+ const wsFsFactory = runtime.resolveBridgeFsFactory({
3026
+ boundWorkspaces: [cwd],
3027
+ trusted,
3028
+ emit: deps.fsAuditEmit,
3029
+ pathLocks: sharedPathLocks,
3030
+ ...customIgnoreFiles !== void 0 ? { customIgnoreFiles } : {}
3031
+ });
3032
+ const wsChannelFactory = runtime.createSpawnChannelFactory({
3033
+ sourceEnv: wsEnv.effectiveEnv,
3034
+ onDiagnosticLine: diagnosticSink,
3035
+ pipeHooks: {
3036
+ onMessageSent: /* @__PURE__ */ __name((bytes) => recordPipeMessage("outbound", bytes), "onMessageSent"),
3037
+ onMessageReceived: /* @__PURE__ */ __name((bytes) => recordPipeMessage("inbound", bytes), "onMessageReceived"),
3038
+ onMessageObserved: /* @__PURE__ */ __name(({ direction, bytes, message }) => observeLargePipeFrame({
3039
+ direction: daemonPipeDirection(direction),
3040
+ bytes,
3041
+ message
3042
+ }), "onMessageObserved")
3043
+ },
3044
+ ...opts.experimentalLsp === true ? { extraArgs: ["--experimental-lsp"] } : {}
3045
+ });
3046
+ const wsClientMcpRegistry = new ClientMcpSenderRegistry();
3047
+ let wsBridgeRef;
3048
+ const wsSubSessionLauncher = createSubSessionLauncher({
3049
+ getBridge: /* @__PURE__ */ __name(() => wsBridgeRef, "getBridge"),
3050
+ boundWorkspace: cwd
3051
+ });
3052
+ const wsBridge = runtime.createAcpSessionBridge({
3053
+ clientMcpSender: wsClientMcpRegistry.lookup,
3054
+ onCreateSubSession: wsSubSessionLauncher.launch,
3055
+ maxSessions: opts.maxSessions,
3056
+ freshSessionAdmission: totalSessionAdmission.admit,
3057
+ sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
3058
+ ...opts.maxPendingPromptsPerSession !== void 0 ? { maxPendingPromptsPerSession: opts.maxPendingPromptsPerSession } : {},
3059
+ ...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
3060
+ ...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
3061
+ ...opts.channelIdleTimeoutMs !== void 0 ? { channelIdleTimeoutMs: opts.channelIdleTimeoutMs } : {},
3062
+ ...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
3063
+ ...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
3064
+ ...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
3065
+ boundWorkspace: cwd,
3066
+ sessionShellCommandEnabled,
3067
+ childEnvOverrides,
3068
+ channelFactory: wsChannelFactory,
3069
+ onDiagnosticLine: diagnosticSink,
3070
+ telemetry: createRuntimeBridgeTelemetry(wsHash),
3071
+ ...permissionPolicy !== void 0 ? { permissionPolicy } : {},
3072
+ ...permissionConsensusQuorum !== void 0 ? { permissionConsensusQuorum } : {},
3073
+ permissionAudit: permissionAuditPublisher,
3074
+ statusProvider: runtime.createDaemonStatusProvider({
3075
+ env: wsEnv.effectiveEnv
3076
+ }),
3077
+ fileSystem: createBridgeFileSystemAdapter(wsFsFactory),
3078
+ persistApprovalMode: /* @__PURE__ */ __name((workspace, mode) => withSettingsLock(workspace, async () => {
3079
+ const fresh = settingsRuntime.settings.loadSettings(workspace);
3080
+ fresh.setValue(WORKSPACE_SETTING_SCOPE, "tools.approvalMode", mode);
3081
+ }), "persistApprovalMode")
3082
+ });
3083
+ wsBridgeRef = wsBridge;
3084
+ const wsService = runtime.createDaemonWorkspaceService({
3085
+ boundWorkspace: cwd,
3086
+ contextFilename: contextFilenameForInit ?? "QWEN.md",
3087
+ statusProvider: runtime.createDaemonStatusProvider({
3088
+ env: wsEnv.effectiveEnv
3089
+ }),
3090
+ workspaceProvidersStatusProvider: runtime.createWorkspaceProvidersStatusProvider({
3091
+ env: wsEnv.effectiveEnv
3092
+ }),
3093
+ workspaceSkillsStatusProvider: runtime.createWorkspaceSkillsStatusProvider(),
3094
+ isChannelLive: /* @__PURE__ */ __name(() => wsBridge.isChannelLive(), "isChannelLive"),
3095
+ preheatAcpChild: /* @__PURE__ */ __name(() => wsBridge.preheat(), "preheatAcpChild"),
3096
+ persistDisabledTools: persistDisabledToolsFn,
3097
+ persistSetting: persistSettingFn,
3098
+ persistSettings: persistSettingsFn,
3099
+ reloadDaemonEnv: /* @__PURE__ */ __name((workspace) => withSettingsLock(workspace, async () => {
3100
+ const fresh = settingsRuntime.settings.loadSettings(workspace, {
3101
+ skipLoadEnvironment: true
3102
+ });
3103
+ const result = settingsRuntime.settings.reloadEnvironment(
3104
+ fresh.merged,
3105
+ workspace
3106
+ );
3107
+ try {
3108
+ const refreshedRuntimeEnv = settingsRuntime.environment.buildRuntimeEnvironment(
3109
+ fresh.merged,
3110
+ workspace,
3111
+ daemonRuntimeBaseEnv
3112
+ );
3113
+ logRuntimeEnvFileReadFailures(workspace, refreshedRuntimeEnv);
3114
+ wsEnv.replace(refreshedRuntimeEnv.effectiveEnv);
3115
+ wsEnv.metadata.envFileReadFailed = refreshedRuntimeEnv.envFileReadFailed;
3116
+ wsEnv.metadata.envFileReadFailures.splice(
3117
+ 0,
3118
+ wsEnv.metadata.envFileReadFailures.length,
3119
+ ...refreshedRuntimeEnv.envFileReadFailures
3120
+ );
3121
+ wsEnv.metadata.overlayKeys.splice(
3122
+ 0,
3123
+ wsEnv.metadata.overlayKeys.length,
3124
+ ...refreshedRuntimeEnv.overlayKeys
3125
+ );
3126
+ wsEnv.metadata.envFilePaths.splice(
3127
+ 0,
3128
+ wsEnv.metadata.envFilePaths.length,
3129
+ ...refreshedRuntimeEnv.envFilePaths
3130
+ );
3131
+ delete wsEnv.metadata.fallbackReason;
3132
+ } catch (err) {
3133
+ wsEnv.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
3134
+ daemonLog.warn(
3135
+ "failed to rebuild dynamic runtime env snapshot after daemon env reload; preserving previous runtime env",
3136
+ {
3137
+ workspace,
3138
+ error: wsEnv.metadata.fallbackReason
3139
+ }
3140
+ );
3141
+ }
3142
+ return result;
3143
+ }), "reloadDaemonEnv"),
3144
+ queryWorkspaceStatus: /* @__PURE__ */ __name((method, idle) => wsBridge.queryWorkspaceStatus(method, idle), "queryWorkspaceStatus"),
3145
+ invokeWorkspaceCommand: /* @__PURE__ */ __name((method, params, invokeOpts) => wsBridge.invokeWorkspaceCommand(method, params, invokeOpts), "invokeWorkspaceCommand"),
3146
+ refreshExtensionsForAllSessions: /* @__PURE__ */ __name(() => wsBridge.refreshExtensionsForAllSessions(), "refreshExtensionsForAllSessions"),
3147
+ publishWorkspaceEvent: /* @__PURE__ */ __name((event) => wsBridge.publishWorkspaceEvent(event), "publishWorkspaceEvent")
3148
+ });
3149
+ runtimeBridges.push(wsBridge);
3150
+ internalRuntimeBridgesForCleanup.push(wsBridge);
3151
+ subSessionStoppers.push(wsSubSessionLauncher.stop);
3152
+ return {
3153
+ workspaceId: wsHash,
3154
+ workspaceCwd: cwd,
3155
+ primary: false,
3156
+ trusted,
3157
+ env: wsEnv.metadata,
3158
+ bridge: wsBridge,
3159
+ workspaceService: wsService,
3160
+ routeFileSystemFactory: wsFsFactory,
3161
+ clientMcpSenderRegistry: wsClientMcpRegistry
3162
+ };
3163
+ }, "createDynamicWorkspaceRuntime");
2867
3164
  const app2 = runtime.createServeApp(opts, () => actualPort, {
2868
3165
  workspaceRegistry,
3166
+ createWorkspaceRuntime: createDynamicWorkspaceRuntime,
2869
3167
  bridge,
2870
3168
  webShellDir,
2871
3169
  boundWorkspace,
@@ -2880,6 +3178,11 @@ async function runQwenServe(optsIn, deps = {}) {
2880
3178
  primaryRuntimeEnv,
2881
3179
  daemonLog,
2882
3180
  getChannelWorkerSnapshot,
3181
+ enqueueChannelWebhookTask: /* @__PURE__ */ __name((task) => channelWorker.enqueueWebhookTask(task), "enqueueChannelWebhookTask"),
3182
+ // Gate both the `channel_reload` capability and the reload route on the
3183
+ // presence of this dep, so it is advertised only when a channel worker
3184
+ // exists to reload.
3185
+ ...opts.channelSelection ? { reloadChannelWorker } : {},
2883
3186
  getPerfSnapshot: /* @__PURE__ */ __name(() => ({
2884
3187
  eventLoop: currentDaemonEventLoopMonitor.snapshot(),
2885
3188
  promptQueueWait: {
@@ -2903,6 +3206,9 @@ async function runQwenServe(optsIn, deps = {}) {
2903
3206
  persistDisabledTools: persistDisabledToolsFn,
2904
3207
  persistSetting: persistSettingFn,
2905
3208
  persistSettings: persistSettingsFn,
3209
+ sessionArtifactsPersistenceAvailable: sessionArtifactsPersistenceAvailableFromSettings(
3210
+ runtimeBootSettings?.merged
3211
+ ),
2906
3212
  installAuthProvider: /* @__PURE__ */ __name((req) => withSettingsLock(
2907
3213
  boundWorkspace,
2908
3214
  async () => {
@@ -2941,6 +3247,8 @@ async function runQwenServe(optsIn, deps = {}) {
2941
3247
  }
2942
3248
  ), "installAuthProvider")
2943
3249
  });
3250
+ app2.locals.subSessionStoppers = subSessionStoppers;
3251
+ subSessionStoppers.push(subSessionLauncher.stop);
2944
3252
  return { app: app2, bridge };
2945
3253
  }, "buildRuntime");
2946
3254
  if (deps.bridge) {
@@ -2962,17 +3270,24 @@ async function runQwenServe(optsIn, deps = {}) {
2962
3270
  daemonLog,
2963
3271
  qwenCodeVersion: cliVersion,
2964
3272
  sessionShellCommandEnabled,
3273
+ sessionArtifactsPersistenceAvailable,
2965
3274
  permissionPolicy,
2966
3275
  multiWorkspaceCapabilitiesRequireRuntime: workspaceInputs.length > 1,
2967
3276
  getRuntimeError: /* @__PURE__ */ __name(() => runtimeStartupError, "getRuntimeError"),
2968
3277
  getChannelWorkerSnapshot,
2969
3278
  onHealthServed: deferRuntimeUntilFirstHealth ? () => startRuntimeAfterHealth?.() : void 0
2970
3279
  });
3280
+ const deferredChannelWebhookAuth = deferRuntimeUntilFirstHealth ? createDeferredChannelWebhookAuth(
3281
+ boundWorkspace,
3282
+ await loadChannelWebhookConfigRuntime(),
3283
+ daemonLog
3284
+ ) : void 0;
2971
3285
  const app = runtimeApp ?? createDelegatingServeApp(bootstrapApp, () => runtimeApp, {
2972
3286
  waitForDeferredRuntimeRoutes: deferRuntimeUntilFirstHealth,
2973
3287
  startRuntime: /* @__PURE__ */ __name(() => startRuntimeForRequest?.(), "startRuntime"),
2974
3288
  runtimeReady,
2975
- authenticateDeferredRuntimeRequest: bearerAuth(opts.token)
3289
+ authenticateDeferredRuntimeRequest: bearerAuth(opts.token),
3290
+ authenticateDeferredChannelWebhookRequest: deferredChannelWebhookAuth
2976
3291
  });
2977
3292
  let listenHostname = opts.hostname;
2978
3293
  if (opts.hostname.startsWith("[")) {
@@ -3010,7 +3325,8 @@ async function runQwenServe(optsIn, deps = {}) {
3010
3325
  try {
3011
3326
  if (opts.channelSelection) {
3012
3327
  const createSupervisor = deps.channelWorkerSupervisorFactory ?? channelRuntime?.createChannelWorkerSupervisor;
3013
- if (!createSupervisor) {
3328
+ const findCliEntryPath = channelRuntime?.findCliEntryPath;
3329
+ if (!createSupervisor || !findCliEntryPath) {
3014
3330
  throw new Error(
3015
3331
  "Channel worker supervisor runtime is not available."
3016
3332
  );
@@ -3311,6 +3627,10 @@ async function runQwenServe(optsIn, deps = {}) {
3311
3627
  closePromise = new Promise((res, rej) => {
3312
3628
  shuttingDown = true;
3313
3629
  app.locals.stopScheduledTaskKeepalive?.();
3630
+ const stoppers = app.locals.subSessionStoppers;
3631
+ if (stoppers) {
3632
+ for (const stop of stoppers) stop();
3633
+ }
3314
3634
  clearRuntimeStartAfterHealthTimer();
3315
3635
  clearRuntimeStartFallbackTimer();
3316
3636
  cancelDeferredRuntimeStartup();
@@ -3512,6 +3832,7 @@ async function runQwenServe(optsIn, deps = {}) {
3512
3832
  __name(runQwenServe, "runQwenServe");
3513
3833
  export {
3514
3834
  InvalidPolicyConfigError,
3835
+ createDisabledChannelWorkerSupervisor,
3515
3836
  createLazyBridgeProxy,
3516
3837
  extractContextFilename,
3517
3838
  formatChannelWorkerDaemonUrl,