@qwen-code/qwen-code 0.19.4 → 0.19.5-nightly.20260703.b16baf1ff

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 (234) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +22 -6
  2. package/bundled/qc-helper/docs/features/commands.md +41 -34
  3. package/bundled/qc-helper/docs/features/headless.md +19 -18
  4. package/bundled/qc-helper/docs/qwen-serve.md +34 -0
  5. package/bundled/qc-helper/docs/support/troubleshooting.md +5 -0
  6. package/chunks/{MaxSizedBox-ERTNFI22.js → MaxSizedBox-42KZ5OFE.js} +12 -11
  7. package/chunks/{StandaloneSessionPicker-Y5NGRLRY.js → StandaloneSessionPicker-G4VTICMM.js} +23 -22
  8. package/chunks/{acpAgent-UMN6OYTR.js → acpAgent-6O25PA3M.js} +82 -78
  9. package/chunks/{agent-56DZU4ZU.js → agent-SNVTRNV7.js} +9 -8
  10. package/chunks/{agent-headless-SR7N2IJG.js → agent-headless-LNKVTSBX.js} +9 -8
  11. package/chunks/{anthropicContentGenerator-5OZFO6WQ.js → anthropicContentGenerator-WL3LJOUB.js} +99 -23
  12. package/chunks/{artifact-tool-JVZMHA4B.js → artifact-tool-W76WC2JX.js} +1 -1
  13. package/chunks/{askUserQuestion-CMJZ2F3D.js → askUserQuestion-J3P6TH3V.js} +1 -1
  14. package/chunks/{bridge-AUHNFOUS.js → bridge-AZZAYKI2.js} +15 -13
  15. package/chunks/{ca-RYOETBUW.js → ca-HCMB2I54.js} +1 -0
  16. package/chunks/channel-worker-supervisor-C2J3TIOV.js +665 -0
  17. package/chunks/{chunk-W2ZOAX7F.js → chunk-26UO4PLG.js} +3 -3
  18. package/chunks/chunk-2Z43HUXT.js +99 -0
  19. package/chunks/{chunk-VKGG724L.js → chunk-3GCPLNVF.js} +11 -10
  20. package/chunks/chunk-3RW4AZJV.js +5063 -0
  21. package/chunks/{chunk-6AQR7732.js → chunk-46IAL3RB.js} +1 -1
  22. package/chunks/{chunk-QAFQLTXG.js → chunk-4JWM2UGC.js} +1 -1
  23. package/chunks/{chunk-C2IHHGBZ.js → chunk-4PGQKUIV.js} +10 -10
  24. package/chunks/{chunk-PPFWEV7G.js → chunk-4RQIB5UZ.js} +62 -62
  25. package/chunks/{chunk-L7VH7HQA.js → chunk-4UEWG5AS.js} +29 -4
  26. package/chunks/{chunk-J3F7X3LW.js → chunk-5B2WNM6V.js} +1 -1
  27. package/chunks/{chunk-XCUFHOAD.js → chunk-6NHUWPNL.js} +1 -1
  28. package/chunks/{chunk-HI55Z6PR.js → chunk-7DMQRPC7.js} +401 -58
  29. package/chunks/{chunk-Q7VHIRDD.js → chunk-7K4G2H2H.js} +1 -1
  30. package/chunks/{chunk-W6X4FGWX.js → chunk-7XS7CMSU.js} +1 -1
  31. package/chunks/{chunk-SFN4TEHY.js → chunk-APTOAKV5.js} +4 -4
  32. package/chunks/{chunk-BNJLLAQ7.js → chunk-AYUVPH6L.js} +1 -1
  33. package/chunks/chunk-BPFJQGY7.js +193 -0
  34. package/chunks/{chunk-CUGEBAKG.js → chunk-C47IJLUT.js} +1 -1
  35. package/chunks/chunk-CXBG27SF.js +35 -0
  36. package/chunks/{chunk-UQFP2FEF.js → chunk-DG573EOO.js} +1 -1
  37. package/chunks/{chunk-ND25GXEU.js → chunk-DLJKEPXB.js} +14 -6
  38. package/chunks/{chunk-MNDTD5E5.js → chunk-DNJ2KHWN.js} +4 -4
  39. package/chunks/{chunk-KKQWC6WS.js → chunk-DNV4FSN5.js} +1 -1
  40. package/chunks/chunk-DOYHOG47.js +949 -0
  41. package/chunks/chunk-E2K45AJ7.js +5448 -0
  42. package/chunks/{chunk-75X2VLSH.js → chunk-F26BNXI2.js} +26 -5
  43. package/chunks/{chunk-6TLY5W3B.js → chunk-FB6LGUF4.js} +127 -23
  44. package/chunks/{chunk-UT5JU5DJ.js → chunk-FEPEMQR4.js} +42 -15
  45. package/chunks/{chunk-2X2JUE47.js → chunk-FKHE7ZNF.js} +2 -2
  46. package/chunks/{chunk-YBDZ63KI.js → chunk-FVRLDQ7T.js} +8 -4
  47. package/chunks/{chunk-DQ74W65K.js → chunk-HCLTQ3PV.js} +47 -20
  48. package/chunks/{chunk-BQNJBEUA.js → chunk-KFO6YNQT.js} +16 -2
  49. package/chunks/{chunk-UQYOMM6J.js → chunk-L4CYPEA7.js} +10 -10
  50. package/chunks/{chunk-MEQWZGK5.js → chunk-L7OJ3ZO3.js} +1 -1
  51. package/chunks/chunk-LOEYAC6N.js +86 -0
  52. package/chunks/{chunk-4VZH35PN.js → chunk-MTNTVOJR.js} +2 -0
  53. package/chunks/{chunk-6CIIP6OE.js → chunk-O2EZ4VRP.js} +3 -3
  54. package/chunks/{chunk-ZJP5T7IA.js → chunk-ODPWORQZ.js} +1 -1
  55. package/chunks/{chunk-TTFNVEO5.js → chunk-P5GH4DTN.js} +3 -3
  56. package/chunks/{chunk-7KPI4LAI.js → chunk-QURP4S5U.js} +3 -3
  57. package/chunks/{chunk-UANCYOOQ.js → chunk-R6RI2HIC.js} +1 -1
  58. package/chunks/{chunk-FYKX6XOT.js → chunk-RBLDOR7U.js} +1 -1
  59. package/chunks/{chunk-EDAGQADF.js → chunk-S6RLAIUR.js} +2 -0
  60. package/chunks/chunk-SIUQ3YYX.js +78 -0
  61. package/chunks/{chunk-GICCHL2Q.js → chunk-STP6AYKH.js} +1 -1
  62. package/chunks/{chunk-HJDF3ZVU.js → chunk-UEGNXWAX.js} +6 -6
  63. package/chunks/{chunk-PIYV6COW.js → chunk-UTWYG2WA.js} +1 -1
  64. package/chunks/{chunk-QMIND2AS.js → chunk-UY2TCIZS.js} +15 -1
  65. package/chunks/{chunk-CG7SVARK.js → chunk-VDIZBM46.js} +2 -2
  66. package/chunks/{chunk-73H73ASU.js → chunk-VJSWLYUL.js} +1 -1
  67. package/chunks/{chunk-FNLXLI4I.js → chunk-WMLQKZ64.js} +2 -2
  68. package/chunks/{chunk-KVPFPC4J.js → chunk-WSAAEPPQ.js} +14 -14
  69. package/chunks/{chunk-BFG6OZN7.js → chunk-WWOVV2PW.js} +3742 -2737
  70. package/chunks/{chunk-MKHC4BYZ.js → chunk-XAVV2JAM.js} +21 -5
  71. package/chunks/{chunk-ZXCVPMIK.js → chunk-XR7W5VRL.js} +167 -54
  72. package/chunks/{chunk-CS5XYDBO.js → chunk-XS7IHJ63.js} +5 -5
  73. package/chunks/{chunk-B7KGXIPZ.js → chunk-YCU7QV7Q.js} +11 -4
  74. package/chunks/{chunk-OJCECIJA.js → chunk-YHTNWGRR.js} +5 -4
  75. package/chunks/{chunk-7VPC7D7O.js → chunk-YLQSGKAN.js} +2 -2
  76. package/chunks/{chunk-OAFUMTWW.js → chunk-Z75MFQFL.js} +2 -2
  77. package/chunks/{chunk-HRZB5CSC.js → chunk-ZRHHQFV4.js} +1 -1
  78. package/chunks/{computer-use-VWN5HH6A.js → computer-use-UHZAYYGO.js} +9 -8
  79. package/chunks/{contextCommand-DFFG5KDJ.js → contextCommand-X4WOJ2L4.js} +11 -10
  80. package/chunks/{cron-create-CSSWJ67I.js → cron-create-6YTCOX6P.js} +1 -1
  81. package/chunks/{cron-delete-E56CFQ7A.js → cron-delete-E3NIFSUK.js} +1 -1
  82. package/chunks/{cron-list-BKSINY6Y.js → cron-list-Q64MNQNE.js} +1 -1
  83. package/chunks/{daemon-5T6IHWJV.js → daemon-EEB2RYOL.js} +23 -0
  84. package/chunks/{daemon-status-provider-V5UY7O7J.js → daemon-status-provider-YXWNGOAF.js} +18 -16
  85. package/chunks/{de-HB5NJXGB.js → de-PLLFDERI.js} +1 -0
  86. package/chunks/{dist-TAVAGZU6.js → dist-AP5V4WYU.js} +54 -14
  87. package/chunks/{dist-XBOVZ3R5.js → dist-IZP2VV4C.js} +156 -57
  88. package/chunks/{dist-B7SSDVWT.js → dist-SNXOUPYS.js} +201 -7
  89. package/chunks/{dist-2HDL5SHQ.js → dist-X4ZDE726.js} +43 -8
  90. package/chunks/{dist-BL3SL665.js → dist-Z57Q4YF5.js} +1 -1
  91. package/chunks/{earlyInputCapture-VVYU4FDO.js → earlyInputCapture-3HUGMAFL.js} +9 -8
  92. package/chunks/{edit-F35PTMBA.js → edit-QDKRNFZK.js} +14 -17
  93. package/chunks/{en-FZREZFPO.js → en-M4EBUBNU.js} +2 -0
  94. package/chunks/{enter-worktree-3DIW7EGJ.js → enter-worktree-ODWIPMOP.js} +9 -8
  95. package/chunks/{enterPlanMode-QNXT77KP.js → enterPlanMode-XROL6G5C.js} +11 -10
  96. package/chunks/{errors-M53YG76R.js → errors-RCPBWFTG.js} +11 -10
  97. package/chunks/{exit-worktree-BSDWNWHZ.js → exit-worktree-BIU7P4TR.js} +9 -8
  98. package/chunks/{exitPlanMode-EL7AY327.js → exitPlanMode-LWZHZ7CF.js} +107 -12
  99. package/chunks/{fast-path-DUCSMUFW.js → fast-path-7S4NR2WI.js} +6 -4
  100. package/chunks/{fast-path-settings-UQLRFDQP.js → fast-path-settings-RCRXH2JG.js} +2 -2
  101. package/chunks/{fr-XY3NQFCM.js → fr-MBMNQSQ6.js} +1 -0
  102. package/chunks/{gemini-F3IERB37.js → gemini-W7CZCFFV.js} +75 -67
  103. package/chunks/{geminiContentGenerator-6OULAKFQ.js → geminiContentGenerator-MWZWJAWR.js} +39 -3
  104. package/chunks/{glob-ZMLFTD4T.js → glob-GZ4LUOQT.js} +9 -8
  105. package/chunks/{grep-H5X66EI7.js → grep-BZ34WAQJ.js} +9 -8
  106. package/chunks/{initializer-LEOT2OLH.js → initializer-W4EUD3H7.js} +14 -13
  107. package/chunks/{ja-J7YAG7SA.js → ja-HFV5QCHR.js} +1 -0
  108. package/chunks/{list-M3DKXML6.js → list-S325XJ2Y.js} +16 -15
  109. package/chunks/{loadedSettingsAdapter-OKMQFGGG.js → loadedSettingsAdapter-QP3XBMQI.js} +14 -13
  110. package/chunks/{loop-wakeup-FPBAVVPR.js → loop-wakeup-G2EHBRGR.js} +2 -2
  111. package/chunks/{ls-UGWQXPTY.js → ls-IDHUVSAG.js} +1 -1
  112. package/chunks/{lsp-24WV7NXB.js → lsp-FSRYXGFT.js} +1 -1
  113. package/chunks/mcp-LRKXM6OS.js +66 -0
  114. package/chunks/{monitor-ARL5P45R.js → monitor-7C33CWA5.js} +11 -10
  115. package/chunks/{nonInteractiveCli-NUVLF3YR.js → nonInteractiveCli-FPZS7ROR.js} +46 -43
  116. package/chunks/{notebook-edit-ANTZ2DDY.js → notebook-edit-ZXQ25NWU.js} +14 -16
  117. package/chunks/{openaiContentGenerator-TFGMKGHN.js → openaiContentGenerator-FUQ7GNK6.js} +4 -4
  118. package/chunks/{pidfile-AWTL4C63.js → pidfile-NPZV5ZIA.js} +10 -9
  119. package/chunks/{pt-6RTAA6SS.js → pt-2THT3YHA.js} +1 -0
  120. package/chunks/{qwenContentGenerator-6QWAYTWS.js → qwenContentGenerator-LNEWYA52.js} +10 -9
  121. package/chunks/{read-file-EJY73XQ3.js → read-file-G6GBNSM3.js} +3 -3
  122. package/chunks/{read-mcp-resource-NCBTPP7X.js → read-mcp-resource-PIJF24RO.js} +1 -1
  123. package/chunks/{ripGrep-HC4SA6CQ.js → ripGrep-IGOC7PVL.js} +9 -8
  124. package/chunks/{ru-AUBGJ2C4.js → ru-Z67YJHBG.js} +1 -0
  125. package/chunks/{run-qwen-serve-AGLZ642J.js → run-qwen-serve-AAA53KS4.js} +131 -38
  126. package/chunks/{scheduler-TURO7NGY.js → scheduler-SPGJ7ILO.js} +9 -8
  127. package/chunks/{send-message-3S2NYS3O.js → send-message-33PYFMCT.js} +15 -1
  128. package/chunks/{serve-5DAMOIDW.js → serve-37UIHUYP.js} +15 -14
  129. package/chunks/{server-4AGEK2HC.js → server-MFMOYMEB.js} +187 -173
  130. package/chunks/{session-7ZOQUC4Y.js → session-XRY2CG4Z.js} +47 -44
  131. package/chunks/{settings-DR4V6L5Y.js → settings-X5GXXGKH.js} +13 -12
  132. package/chunks/{shell-H5WFKUXH.js → shell-E5HOWJMT.js} +9 -8
  133. package/chunks/{skill-ANHU5ZCR.js → skill-FELDZMWO.js} +3 -3
  134. package/chunks/{spawnChannel-VN5LJV7Z.js → spawnChannel-XLTVHAT6.js} +12 -10
  135. package/chunks/{src-OVZLTVVM.js → src-ZWPLTWTV.js} +21 -10
  136. package/chunks/{startInteractiveUI-OA22V32P.js → startInteractiveUI-GO6J3SJ7.js} +2609 -2458
  137. package/chunks/{syntheticOutput-SV7GBHZ5.js → syntheticOutput-YOSWIHDJ.js} +2 -2
  138. package/chunks/{task-create-W2H2UJCH.js → task-create-NHS2NGB3.js} +3 -2
  139. package/chunks/{task-list-THBOPV4G.js → task-list-5UIB564R.js} +1 -1
  140. package/chunks/{task-stop-33FVCNCJ.js → task-stop-HGXZ2VZ3.js} +1 -1
  141. package/chunks/{task-update-LVFQLXEI.js → task-update-IYYWUILG.js} +34 -2
  142. package/chunks/{team-create-OYL5CAQO.js → team-create-WWMKZ3UO.js} +9 -8
  143. package/chunks/{team-delete-NTUQ25UY.js → team-delete-FEKJCU4P.js} +1 -1
  144. package/chunks/team-plan-approval-CUNEZJOV.js +202 -0
  145. package/chunks/{theme-manager-XCMPF2SI.js → theme-manager-LRBEA5ID.js} +9 -8
  146. package/chunks/{todoWrite-SEPO2RI3.js → todoWrite-TKMVZ2HT.js} +1 -1
  147. package/chunks/{tool-search-YXW55X6Z.js → tool-search-L57ZRBJF.js} +8 -6
  148. package/chunks/{trustedFolders-TEPGM5YL.js → trustedFolders-DYAOFXN2.js} +10 -9
  149. package/chunks/{validateNonInterActiveAuth-OQIS7WUE.js → validateNonInterActiveAuth-AB4C2FLG.js} +43 -40
  150. package/chunks/version-2A66AIB2.js +10 -0
  151. package/chunks/{web-fetch-OE7LHURA.js → web-fetch-J4PIW36Q.js} +2 -2
  152. package/chunks/{workflow-RTUWORAP.js → workflow-H7YLGTBI.js} +12 -11
  153. package/chunks/{workspace-providers-status-DM2XANVB.js → workspace-providers-status-UUIBOTKI.js} +16 -15
  154. package/chunks/{workspace-service-VKBI2KZD.js → workspace-service-FATHYK5C.js} +21 -20
  155. package/chunks/workspace-skills-status-KIC3KYPR.js +62 -0
  156. package/chunks/{write-file-WGALQ53L.js → write-file-ETGUMYAK.js} +14 -18
  157. package/chunks/yargs-B64EYTCF.js +10 -0
  158. package/chunks/{zh-V3B4TFWL.js → zh-SLZNSSZB.js} +2 -0
  159. package/chunks/{zh-TW-6GIKXEAN.js → zh-TW-P53C2SL5.js} +2 -0
  160. package/cli-entry.js +81 -8
  161. package/cli.js +348 -55
  162. package/locales/ca.js +2 -0
  163. package/locales/de.js +2 -0
  164. package/locales/en.js +3 -0
  165. package/locales/fr.js +2 -0
  166. package/locales/ja.js +2 -0
  167. package/locales/pt.js +2 -0
  168. package/locales/ru.js +2 -0
  169. package/locales/zh-TW.js +3 -0
  170. package/locales/zh.js +3 -0
  171. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  172. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  173. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  174. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  175. package/package.json +6 -15
  176. package/web-shell/assets/{arc-Det5Ccum.js → arc-QjIJgYzv.js} +1 -1
  177. package/web-shell/assets/{architectureDiagram-3BPJPVTR-DqNWVFpl.js → architectureDiagram-3BPJPVTR-DJkZ9KoB.js} +1 -1
  178. package/web-shell/assets/{blockDiagram-GPEHLZMM-CYl7tYBi.js → blockDiagram-GPEHLZMM-BlNeekUB.js} +1 -1
  179. package/web-shell/assets/{c4Diagram-AAUBKEIU-DaAEi0NQ.js → c4Diagram-AAUBKEIU-B6FDrE3D.js} +1 -1
  180. package/web-shell/assets/channel-M6R-XOoS.js +1 -0
  181. package/web-shell/assets/{chunk-2J33WTMH-Df2CDEE2.js → chunk-2J33WTMH-CZO5-3og.js} +1 -1
  182. package/web-shell/assets/{chunk-4BX2VUAB-DNBFcyL2.js → chunk-4BX2VUAB-CZ2VJPFe.js} +1 -1
  183. package/web-shell/assets/{chunk-55IACEB6-BKjF-0HI.js → chunk-55IACEB6-3zVP6pGF.js} +1 -1
  184. package/web-shell/assets/{chunk-727SXJPM-DYwAwfIM.js → chunk-727SXJPM-omuP8Zhh.js} +1 -1
  185. package/web-shell/assets/{chunk-AQP2D5EJ-C6FswLqy.js → chunk-AQP2D5EJ-BK6Ivmyv.js} +1 -1
  186. package/web-shell/assets/{chunk-FMBD7UC4-DRWAcZSY.js → chunk-FMBD7UC4-NLjjxV0s.js} +1 -1
  187. package/web-shell/assets/{chunk-ND2GUHAM-AoL16mNR.js → chunk-ND2GUHAM-Dc0JTV8t.js} +1 -1
  188. package/web-shell/assets/{chunk-QZHKN3VN-a8PtLMck.js → chunk-QZHKN3VN-ZYp-8jN-.js} +1 -1
  189. package/web-shell/assets/classDiagram-4FO5ZUOK-B7rcL2Jc.js +1 -0
  190. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B7rcL2Jc.js +1 -0
  191. package/web-shell/assets/{cose-bilkent-S5V4N54A-C4Aeu5qf.js → cose-bilkent-S5V4N54A-BNu1jqy7.js} +1 -1
  192. package/web-shell/assets/{dagre-BM42HDAG-BOulamjo.js → dagre-BM42HDAG-0AHvPm2v.js} +1 -1
  193. package/web-shell/assets/{diagram-2AECGRRQ-D1wt2ykO.js → diagram-2AECGRRQ-BJsDQdp0.js} +1 -1
  194. package/web-shell/assets/{diagram-5GNKFQAL-BRseus-O.js → diagram-5GNKFQAL-C1gNnoxj.js} +1 -1
  195. package/web-shell/assets/{diagram-KO2AKTUF-XSMkNzpZ.js → diagram-KO2AKTUF-FmgehSoq.js} +1 -1
  196. package/web-shell/assets/{diagram-LMA3HP47-21KNLqoi.js → diagram-LMA3HP47-i7_13R2F.js} +1 -1
  197. package/web-shell/assets/{diagram-OG6HWLK6-DnUI8F5G.js → diagram-OG6HWLK6-DkUUR1x-.js} +1 -1
  198. package/web-shell/assets/{erDiagram-TEJ5UH35-BVSOMuM2.js → erDiagram-TEJ5UH35-BcwJzw0n.js} +1 -1
  199. package/web-shell/assets/{flowDiagram-I6XJVG4X-fYtDPJsW.js → flowDiagram-I6XJVG4X-CCPgwkQS.js} +1 -1
  200. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CmRXosW_.js → ganttDiagram-6RSMTGT7-C3g0sliF.js} +1 -1
  201. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DPrmySxO.js → gitGraphDiagram-PVQCEYII-DLt4J_oG.js} +1 -1
  202. package/web-shell/assets/index-9qfvU0_r.css +5 -0
  203. package/web-shell/assets/index-DasTT8n6.js +717 -0
  204. package/web-shell/assets/{infoDiagram-5YYISTIA-x3VbEuCV.js → infoDiagram-5YYISTIA-DMO0nW8F.js} +1 -1
  205. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-SmitHRMC.js → ishikawaDiagram-YF4QCWOH-qSN9LjC5.js} +1 -1
  206. package/web-shell/assets/{journeyDiagram-JHISSGLW-BxvA551S.js → journeyDiagram-JHISSGLW-CQZH-jC2.js} +1 -1
  207. package/web-shell/assets/{kanban-definition-UN3LZRKU-DNHC16jY.js → kanban-definition-UN3LZRKU-Cu6qk5En.js} +1 -1
  208. package/web-shell/assets/{linear-CQ6irBL9.js → linear-Dpp4BWJF.js} +1 -1
  209. package/web-shell/assets/{mermaid.core-DtB6NO1e.js → mermaid.core-DDAcmZsz.js} +5 -5
  210. package/web-shell/assets/{mindmap-definition-RKZ34NQL-QKMAgV2v.js → mindmap-definition-RKZ34NQL-G3JXxnUU.js} +1 -1
  211. package/web-shell/assets/{pieDiagram-4H26LBE5-bvb6dGn6.js → pieDiagram-4H26LBE5-ABQwHraX.js} +1 -1
  212. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DLgdlG4D.js → quadrantDiagram-W4KKPZXB-BUWZV-ho.js} +1 -1
  213. package/web-shell/assets/{requirementDiagram-4Y6WPE33-2M9YH4GF.js → requirementDiagram-4Y6WPE33-XHg5n00A.js} +1 -1
  214. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-DzwfclTH.js → sankeyDiagram-5OEKKPKP-Bwzw0RtM.js} +1 -1
  215. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-BvPmTuy2.js → sequenceDiagram-3UESZ5HK-CGYLtnFV.js} +1 -1
  216. package/web-shell/assets/{stateDiagram-AJRCARHV-BjwUmrJF.js → stateDiagram-AJRCARHV-BG1UhKch.js} +1 -1
  217. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CSG8MpoN.js +1 -0
  218. package/web-shell/assets/{timeline-definition-PNZ67QCA-CXzS6qqz.js → timeline-definition-PNZ67QCA-B_tY-Dyz.js} +1 -1
  219. package/web-shell/assets/{vennDiagram-CIIHVFJN-yRSolF5B.js → vennDiagram-CIIHVFJN-Crp_Rw_L.js} +1 -1
  220. package/web-shell/assets/{wardley-L42UT6IY-ClLJjHPG.js → wardley-L42UT6IY-DR27pFXX.js} +1 -1
  221. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-VIa6t2p2.js → wardleyDiagram-YWT4CUSO-BM_CRFgm.js} +1 -1
  222. package/web-shell/assets/{xychartDiagram-2RQKCTM6-CtmrkezW.js → xychartDiagram-2RQKCTM6-DO2Z2lWl.js} +1 -1
  223. package/web-shell/index.html +28 -3
  224. package/chunks/channel-worker-supervisor-A74FV522.js +0 -308
  225. package/chunks/chunk-MVZXZWGT.js +0 -11323
  226. package/chunks/chunk-S5EQPDTM.js +0 -91
  227. package/patches/chrome-devtools-mcp+1.4.0.patch +0 -31
  228. package/postinstall.js +0 -50
  229. package/web-shell/assets/channel-Bm0bFauD.js +0 -1
  230. package/web-shell/assets/classDiagram-4FO5ZUOK--NgUfb55.js +0 -1
  231. package/web-shell/assets/classDiagram-v2-Q7XG4LA2--NgUfb55.js +0 -1
  232. package/web-shell/assets/index-BpKnmyFV.js +0 -717
  233. package/web-shell/assets/index-fLrtxpOG.css +0 -5
  234. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C4L8zXeL.js +0 -1
@@ -9,13 +9,60 @@ import {
9
9
  openQwenAsrRealtimeStream,
10
10
  openVoiceStream,
11
11
  openVoiceStreamWithRetry
12
- } from "./chunk-CUGEBAKG.js";
12
+ } from "./chunk-C47IJLUT.js";
13
13
  import {
14
14
  SetupGithubError,
15
15
  setupGithub
16
16
  } from "./chunk-L7QPM2YD.js";
17
17
  import "./chunk-54YZOP7P.js";
18
- import "./chunk-HRZB5CSC.js";
18
+ import "./chunk-ZRHHQFV4.js";
19
+ import {
20
+ createWorkspaceProvidersStatusProvider
21
+ } from "./chunk-4UEWG5AS.js";
22
+ import {
23
+ getAuthTypeFromEnv,
24
+ resolveCliGenerationConfig
25
+ } from "./chunk-KFO6YNQT.js";
26
+ import {
27
+ createWorkspaceSkillsStatusProvider
28
+ } from "./chunk-LOEYAC6N.js";
29
+ import "./chunk-CXBG27SF.js";
30
+ import {
31
+ EMPTY_WORKSPACE_VOICE_UPDATE_ERROR,
32
+ WorkspaceVoiceError,
33
+ buildWorkspaceVoiceSettingsWrites,
34
+ buildWorkspaceVoiceStatus,
35
+ createDaemonWorkspaceService,
36
+ hasConfiguredBatchVoiceTranscriptionModel,
37
+ transcribeWorkspaceVoiceAudio,
38
+ validateWorkspaceVoiceState,
39
+ voiceSettingsScopeToWire
40
+ } from "./chunk-FEPEMQR4.js";
41
+ import {
42
+ PermissionRulesValidationError,
43
+ buildPermissionSettings,
44
+ isPermissionRuleType,
45
+ normalizePermissionRules,
46
+ readPermissionRuleSet
47
+ } from "./chunk-4JWM2UGC.js";
48
+ import {
49
+ assertVoiceBaseUrlNetworkAllowed,
50
+ isStreamingVoiceModel,
51
+ resolveVoiceStreamConfig,
52
+ resolveVoiceTranscriptionConfig,
53
+ sanitizeVoiceErrorMessage,
54
+ transcribeVoiceAudio
55
+ } from "./chunk-AYUVPH6L.js";
56
+ import {
57
+ isVoiceEnabled,
58
+ isVoiceMode,
59
+ readVoiceModel
60
+ } from "./chunk-7K4G2H2H.js";
61
+ import "./chunk-NIOPRZNN.js";
62
+ import {
63
+ WorkspacePermissionRulesSessionRequiredError,
64
+ WorkspaceSettingsPartialPersistError
65
+ } from "./chunk-BMFMJINR.js";
19
66
  import {
20
67
  CAPABILITIES_SCHEMA_VERSION,
21
68
  CLIENT_ID_HEADER,
@@ -60,7 +107,7 @@ import {
60
107
  setRateLimiter,
61
108
  unsafeRevealSecret,
62
109
  validateMcpRuntimeServerName
63
- } from "./chunk-B7KGXIPZ.js";
110
+ } from "./chunk-YCU7QV7Q.js";
64
111
  import {
65
112
  isLoopbackBind
66
113
  } from "./chunk-RNBYOUGV.js";
@@ -68,58 +115,12 @@ import "./chunk-3HX5LZ6R.js";
68
115
  import "./chunk-7RYW5LQV.js";
69
116
  import {
70
117
  createDaemonStatusProvider
71
- } from "./chunk-6CIIP6OE.js";
72
- import "./chunk-W2ZOAX7F.js";
118
+ } from "./chunk-O2EZ4VRP.js";
119
+ import "./chunk-26UO4PLG.js";
73
120
  import "./chunk-KHDZHZMH.js";
74
- import "./chunk-W6X4FGWX.js";
75
121
  import {
76
122
  createAcpSessionBridge
77
- } from "./chunk-KVPFPC4J.js";
78
- import "./chunk-EWALXUAD.js";
79
- import {
80
- EVENT_SCHEMA_VERSION,
81
- SubscriberLimitExceededError
82
- } from "./chunk-ALX6BUYW.js";
83
- import "./chunk-YBDZ63KI.js";
84
- import {
85
- createWorkspaceProvidersStatusProvider
86
- } from "./chunk-L7VH7HQA.js";
87
- import {
88
- getAuthTypeFromEnv,
89
- resolveCliGenerationConfig
90
- } from "./chunk-BQNJBEUA.js";
91
- import {
92
- EMPTY_WORKSPACE_VOICE_UPDATE_ERROR,
93
- WorkspaceVoiceError,
94
- buildWorkspaceVoiceSettingsWrites,
95
- buildWorkspaceVoiceStatus,
96
- createDaemonWorkspaceService,
97
- hasConfiguredBatchVoiceTranscriptionModel,
98
- transcribeWorkspaceVoiceAudio,
99
- validateWorkspaceVoiceState,
100
- voiceSettingsScopeToWire
101
- } from "./chunk-UT5JU5DJ.js";
102
- import {
103
- PermissionRulesValidationError,
104
- buildPermissionSettings,
105
- isPermissionRuleType,
106
- normalizePermissionRules,
107
- readPermissionRuleSet
108
- } from "./chunk-QAFQLTXG.js";
109
- import {
110
- assertVoiceBaseUrlNetworkAllowed,
111
- isStreamingVoiceModel,
112
- resolveVoiceStreamConfig,
113
- resolveVoiceTranscriptionConfig,
114
- sanitizeVoiceErrorMessage,
115
- transcribeVoiceAudio
116
- } from "./chunk-BNJLLAQ7.js";
117
- import {
118
- isVoiceEnabled,
119
- isVoiceMode,
120
- readVoiceModel
121
- } from "./chunk-Q7VHIRDD.js";
122
- import "./chunk-NIOPRZNN.js";
123
+ } from "./chunk-WSAAEPPQ.js";
123
124
  import "./chunk-P7M4GA57.js";
124
125
  import {
125
126
  BranchWhilePromptActiveError,
@@ -150,42 +151,45 @@ import {
150
151
  WorkspaceInitSymlinkError,
151
152
  WorkspaceMismatchError
152
153
  } from "./chunk-T22H4V4R.js";
154
+ import "./chunk-EWALXUAD.js";
153
155
  import {
154
156
  MAX_WORKSPACE_PATH_LENGTH,
155
157
  canonicalizeWorkspace
156
158
  } from "./chunk-SEZC2725.js";
159
+ import {
160
+ EVENT_SCHEMA_VERSION,
161
+ SubscriberLimitExceededError
162
+ } from "./chunk-ALX6BUYW.js";
163
+ import "./chunk-FVRLDQ7T.js";
157
164
  import {
158
165
  STATUS_SCHEMA_VERSION,
159
166
  createIdleWorkspaceMemoryStatus,
160
167
  mapDomainErrorToErrorKind
161
- } from "./chunk-GICCHL2Q.js";
162
- import {
163
- WorkspacePermissionRulesSessionRequiredError,
164
- WorkspaceSettingsPartialPersistError
165
- } from "./chunk-BMFMJINR.js";
168
+ } from "./chunk-STP6AYKH.js";
169
+ import "./chunk-2Z43HUXT.js";
170
+ import "./chunk-UFC57OYT.js";
166
171
  import {
167
172
  getDialogSettingKeys,
168
173
  getNestedProperty,
169
174
  getSettingDefinition,
170
175
  loadSettings,
171
176
  validateSettingValue
172
- } from "./chunk-MKHC4BYZ.js";
177
+ } from "./chunk-XAVV2JAM.js";
173
178
  import {
174
179
  SUPPORTED_LANGUAGES
175
- } from "./chunk-UQYOMM6J.js";
180
+ } from "./chunk-L4CYPEA7.js";
176
181
  import "./chunk-TLRYABYP.js";
177
- import "./chunk-UFC57OYT.js";
178
- import "./chunk-PPFWEV7G.js";
182
+ import "./chunk-4RQIB5UZ.js";
183
+ import "./chunk-7XS7CMSU.js";
179
184
  import {
180
185
  getWorkspaceTrustStatus
181
- } from "./chunk-ZJP5T7IA.js";
186
+ } from "./chunk-ODPWORQZ.js";
182
187
  import {
183
188
  writeStderrLine
184
189
  } from "./chunk-Y6Z2O3WR.js";
185
190
  import "./chunk-QYUE6W3T.js";
186
191
  import {
187
192
  ALL_PROVIDERS,
188
- APPROVAL_MODES,
189
193
  BTW_MAX_INPUT_LENGTH,
190
194
  BuiltinAgentRegistry,
191
195
  Client,
@@ -212,22 +216,24 @@ import {
212
216
  redactUrlCredentials,
213
217
  shouldShowStep,
214
218
  writeWorkspaceContextFile
215
- } from "./chunk-BFG6OZN7.js";
219
+ } from "./chunk-WWOVV2PW.js";
216
220
  import "./chunk-5P5XGNYH.js";
217
- import "./chunk-K5PGHDBN.js";
218
221
  import "./chunk-SKAZWEV5.js";
222
+ import "./chunk-K5PGHDBN.js";
219
223
  import "./chunk-QOMAHFYI.js";
220
224
  import "./chunk-G7OQ3RFJ.js";
221
225
  import "./chunk-LKWAVAB5.js";
222
- import "./chunk-MEQWZGK5.js";
223
- import "./chunk-UANCYOOQ.js";
226
+ import "./chunk-L7OJ3ZO3.js";
227
+ import "./chunk-R6RI2HIC.js";
224
228
  import "./chunk-2MPVVENX.js";
225
229
  import "./chunk-ZTQ26VBE.js";
226
230
  import "./chunk-SJBIFVD2.js";
227
231
  import "./chunk-MLZQVCF3.js";
228
- import "./chunk-S5EQPDTM.js";
229
232
  import "./chunk-LQ7TMOCE.js";
230
233
  import "./chunk-E5A7LHNN.js";
234
+ import {
235
+ APPROVAL_MODES
236
+ } from "./chunk-BPFJQGY7.js";
231
237
  import "./chunk-GO6LNQXT.js";
232
238
  import "./chunk-B236XPGF.js";
233
239
  import "./chunk-YXK4GPYO.js";
@@ -246,15 +252,15 @@ import {
246
252
  recordDaemonHttpRequest,
247
253
  recordDaemonHttpResponse,
248
254
  withDaemonRequestSpan
249
- } from "./chunk-HJDF3ZVU.js";
255
+ } from "./chunk-UEGNXWAX.js";
250
256
  import "./chunk-E6US47KI.js";
251
257
  import "./chunk-UWCTAVOD.js";
252
258
  import "./chunk-OFEVLU4C.js";
253
259
  import "./chunk-OMX7CUOE.js";
254
260
  import "./chunk-MOUXUCXQ.js";
255
261
  import "./chunk-BZHLWC6T.js";
256
- import "./chunk-UQFP2FEF.js";
257
- import "./chunk-4VZH35PN.js";
262
+ import "./chunk-DG573EOO.js";
263
+ import "./chunk-MTNTVOJR.js";
258
264
  import {
259
265
  QwenOAuth2Client,
260
266
  QwenOAuthPollError,
@@ -267,6 +273,7 @@ import {
267
273
  import "./chunk-GLPV75ES.js";
268
274
  import "./chunk-22IFUCVR.js";
269
275
  import "./chunk-T42ACHFI.js";
276
+ import "./chunk-SIUQ3YYX.js";
270
277
  import "./chunk-YTFBURQD.js";
271
278
  import "./chunk-YPCPZSZB.js";
272
279
  import "./chunk-IRJWHZWU.js";
@@ -302,8 +309,6 @@ var import_express4 = __toESM(require_express(), 1);
302
309
  // packages/cli/src/serve/acp-http/index.ts
303
310
  init_esbuild_shims();
304
311
  import { createHash as createHash3, timingSafeEqual } from "node:crypto";
305
- import { createRequire } from "node:module";
306
- import * as path9 from "node:path";
307
312
 
308
313
  // packages/cli/src/serve/acp-http/dispatch.ts
309
314
  init_esbuild_shims();
@@ -1512,8 +1517,8 @@ var PathMutexRegistry = class {
1512
1517
  async runExclusive(key, fn) {
1513
1518
  const previous = this.tails.get(key) ?? Promise.resolve();
1514
1519
  let release;
1515
- const current = new Promise((resolve5) => {
1516
- release = resolve5;
1520
+ const current = new Promise((resolve4) => {
1521
+ release = resolve4;
1517
1522
  });
1518
1523
  const tail = previous.catch(() => void 0).then(() => current);
1519
1524
  this.tails.set(key, tail);
@@ -2000,7 +2005,7 @@ async function renameWithRetryLocal(src, dest, retries, delayMs) {
2000
2005
  const retryable = code === "EPERM" || code === "EACCES";
2001
2006
  if (!retryable || attempt === retries) throw err;
2002
2007
  await new Promise(
2003
- (resolve5) => setTimeout(resolve5, delayMs * 2 ** attempt)
2008
+ (resolve4) => setTimeout(resolve4, delayMs * 2 ** attempt)
2004
2009
  );
2005
2010
  }
2006
2011
  }
@@ -8266,9 +8271,9 @@ var SseStream = class {
8266
8271
  return next;
8267
8272
  }
8268
8273
  doWrite(chunk) {
8269
- return new Promise((resolve5, reject) => {
8274
+ return new Promise((resolve4, reject) => {
8270
8275
  if (this.closed || this.res.writableEnded) {
8271
- resolve5();
8276
+ resolve4();
8272
8277
  return;
8273
8278
  }
8274
8279
  let ok;
@@ -8279,7 +8284,7 @@ var SseStream = class {
8279
8284
  return;
8280
8285
  }
8281
8286
  if (ok) {
8282
- resolve5();
8287
+ resolve4();
8283
8288
  return;
8284
8289
  }
8285
8290
  const cleanup = /* @__PURE__ */ __name(() => {
@@ -8289,11 +8294,11 @@ var SseStream = class {
8289
8294
  }, "cleanup");
8290
8295
  const onDrain = /* @__PURE__ */ __name(() => {
8291
8296
  cleanup();
8292
- resolve5();
8297
+ resolve4();
8293
8298
  }, "onDrain");
8294
8299
  const onCloseEv = /* @__PURE__ */ __name(() => {
8295
8300
  cleanup();
8296
- resolve5();
8301
+ resolve4();
8297
8302
  }, "onCloseEv");
8298
8303
  const onErrorEv = /* @__PURE__ */ __name((err) => {
8299
8304
  cleanup();
@@ -8355,14 +8360,14 @@ var WsStream = class {
8355
8360
  send(message, _id) {
8356
8361
  const data = JSON.stringify(message);
8357
8362
  const next = this.writeChain.then(
8358
- () => new Promise((resolve5, reject) => {
8363
+ () => new Promise((resolve4, reject) => {
8359
8364
  if (this._closed) {
8360
- resolve5();
8365
+ resolve4();
8361
8366
  return;
8362
8367
  }
8363
8368
  this.ws.send(data, (err) => {
8364
8369
  if (err) reject(err);
8365
- else resolve5();
8370
+ else resolve4();
8366
8371
  });
8367
8372
  })
8368
8373
  );
@@ -8667,7 +8672,7 @@ var CdpReverseLink = class {
8667
8672
  throw { code: -32e3, message: "CDP tunnel closed" };
8668
8673
  }
8669
8674
  await this.attach();
8670
- return new Promise((resolve5, reject) => {
8675
+ return new Promise((resolve4, reject) => {
8671
8676
  if (this.disposed) {
8672
8677
  reject({ code: -32e3, message: "CDP tunnel closed" });
8673
8678
  return;
@@ -8678,7 +8683,7 @@ var CdpReverseLink = class {
8678
8683
  `CDP command id=${id} method=${method} timed out after ${this.commandTimeoutMs}ms`
8679
8684
  );
8680
8685
  const progressTimer = this.armProgressLog(id, method);
8681
- this.pending.set(id, { resolve: resolve5, reject, timer, progressTimer });
8686
+ this.pending.set(id, { resolve: resolve4, reject, timer, progressTimer });
8682
8687
  try {
8683
8688
  this.log?.(
8684
8689
  `qwen serve: /cdp forwarded command id=${id} method=${method} to extension`
@@ -8705,7 +8710,7 @@ var CdpReverseLink = class {
8705
8710
  if (this.attached) return Promise.resolve({});
8706
8711
  if (this.attachPromise) return this.attachPromise;
8707
8712
  this.attachPromise = new Promise(
8708
- (resolve5, reject) => {
8713
+ (resolve4, reject) => {
8709
8714
  if (this.disposed) {
8710
8715
  reject({ code: -32e3, message: "CDP tunnel closed" });
8711
8716
  return;
@@ -8715,7 +8720,7 @@ var CdpReverseLink = class {
8715
8720
  this.pendingAttach = {
8716
8721
  id,
8717
8722
  pending: {
8718
- resolve: /* @__PURE__ */ __name((result) => resolve5(result ?? {}), "resolve"),
8723
+ resolve: /* @__PURE__ */ __name((result) => resolve4(result ?? {}), "resolve"),
8719
8724
  reject,
8720
8725
  timer
8721
8726
  }
@@ -9223,9 +9228,9 @@ var ACP_SESSION_HEADER = "acp-session-id";
9223
9228
  var CDP_PATH = "/cdp";
9224
9229
  var CDP_BRIDGE_CLIENT_NAME = "qwen-cdp-bridge";
9225
9230
  var CHROME_DEVTOOLS_MCP_SERVER_NAME = "chrome-devtools";
9231
+ var CDP_MCP_COMMAND_ENV = "QWEN_CDP_MCP_COMMAND";
9226
9232
  var RUNTIME_MCP_RETRY_DELAY_MS = 250;
9227
9233
  var RUNTIME_MCP_RETRY_ATTEMPTS = 20;
9228
- var requireFromHere = createRequire(import.meta.url);
9229
9234
  function formatCdpEndpointHost(hostname) {
9230
9235
  const host = hostname?.trim() || "127.0.0.1";
9231
9236
  if (host === "0.0.0.0" || host === "::" || host === "[::]") {
@@ -9240,25 +9245,23 @@ function isAcpChannelUnavailable(err) {
9240
9245
  }
9241
9246
  __name(isAcpChannelUnavailable, "isAcpChannelUnavailable");
9242
9247
  function delay(ms) {
9243
- return new Promise((resolve5) => setTimeout(resolve5, ms));
9248
+ return new Promise((resolve4) => setTimeout(resolve4, ms));
9244
9249
  }
9245
9250
  __name(delay, "delay");
9246
- function buildChromeDevToolsMcpRuntimeConfigFromPackage(localPort, pkgJsonPath, pkgBin, hostname) {
9251
+ function buildChromeDevToolsMcpRuntimeConfig(localPort, hostname) {
9247
9252
  if (localPort === void 0 || !Number.isInteger(localPort) || localPort <= 0) {
9248
9253
  return void 0;
9249
9254
  }
9250
- const binRel = typeof pkgBin === "string" ? pkgBin : Object.values(pkgBin ?? {})[0];
9251
- if (!binRel) return void 0;
9252
- const pkgDir = path9.dirname(pkgJsonPath);
9253
- const binPath = path9.resolve(pkgDir, binRel);
9254
- const binRelToPkg = path9.relative(pkgDir, binPath);
9255
- if (binRelToPkg.startsWith("..") || path9.isAbsolute(binRelToPkg)) {
9255
+ const command = process.env[CDP_MCP_COMMAND_ENV]?.trim();
9256
+ if (!command) {
9257
+ writeStderrLine(
9258
+ `qwen serve: set ${CDP_MCP_COMMAND_ENV} to enable browser automation MCP (chrome-devtools-mcp is no longer bundled)`
9259
+ );
9256
9260
  return void 0;
9257
9261
  }
9258
9262
  return {
9259
- command: process.execPath,
9263
+ command,
9260
9264
  args: [
9261
- binPath,
9262
9265
  "--wsEndpoint",
9263
9266
  `ws://${formatCdpEndpointHost(hostname)}:${localPort}/cdp`
9264
9267
  ],
@@ -9266,26 +9269,6 @@ function buildChromeDevToolsMcpRuntimeConfigFromPackage(localPort, pkgJsonPath,
9266
9269
  [RUNTIME_MCP_IF_ABSENT_CONFIG_FLAG]: true
9267
9270
  };
9268
9271
  }
9269
- __name(buildChromeDevToolsMcpRuntimeConfigFromPackage, "buildChromeDevToolsMcpRuntimeConfigFromPackage");
9270
- function buildChromeDevToolsMcpRuntimeConfig(localPort, hostname) {
9271
- try {
9272
- const pkgJsonPath = requireFromHere.resolve(
9273
- "chrome-devtools-mcp/package.json"
9274
- );
9275
- const pkg = requireFromHere("chrome-devtools-mcp/package.json");
9276
- return buildChromeDevToolsMcpRuntimeConfigFromPackage(
9277
- localPort,
9278
- pkgJsonPath,
9279
- pkg.bin,
9280
- hostname
9281
- );
9282
- } catch (err) {
9283
- writeStderrLine(
9284
- `qwen serve: chrome-devtools-mcp package not resolvable: ${err instanceof Error ? err.message : String(err)}`
9285
- );
9286
- return void 0;
9287
- }
9288
- }
9289
9272
  __name(buildChromeDevToolsMcpRuntimeConfig, "buildChromeDevToolsMcpRuntimeConfig");
9290
9273
  var WS_BEARER_SUBPROTOCOL_PREFIX = "qwen-bearer.";
9291
9274
  function extractUpgradeBearer(req) {
@@ -9352,8 +9335,17 @@ function isSameLoopbackOrigin(origin, localPort) {
9352
9335
  const allowed = /* @__PURE__ */ new Set([
9353
9336
  `http://localhost:${localPort}`,
9354
9337
  `http://127.0.0.1:${localPort}`,
9355
- `http://[::1]:${localPort}`
9338
+ `http://[::1]:${localPort}`,
9339
+ `https://localhost:${localPort}`,
9340
+ `https://127.0.0.1:${localPort}`,
9341
+ `https://[::1]:${localPort}`
9356
9342
  ]);
9343
+ if (localPort === 80 || localPort === 443) {
9344
+ for (const host of ["localhost", "127.0.0.1", "[::1]"]) {
9345
+ allowed.add(`http://${host}`);
9346
+ allowed.add(`https://${host}`);
9347
+ }
9348
+ }
9357
9349
  return allowed.has(parsed.origin.toLowerCase());
9358
9350
  }
9359
9351
  __name(isSameLoopbackOrigin, "isSameLoopbackOrigin");
@@ -9361,7 +9353,7 @@ var MAX_INFLIGHT_MCP_DISPATCH = 8;
9361
9353
  function mountAcpHttp(app, bridge, opts) {
9362
9354
  const enabled = opts.enabled ?? process.env["QWEN_SERVE_ACP_HTTP"] !== "0";
9363
9355
  if (!enabled) return void 0;
9364
- const path13 = opts.path ?? "/acp";
9356
+ const path12 = opts.path ?? "/acp";
9365
9357
  const dispatcherRef = {};
9366
9358
  const registry = new ConnectionRegistry(
9367
9359
  (req, clientId) => {
@@ -9498,7 +9490,7 @@ function mountAcpHttp(app, bridge, opts) {
9498
9490
  opts.archiveCoordinator ?? new SessionArchiveCoordinator()
9499
9491
  );
9500
9492
  dispatcherRef.current = dispatcher;
9501
- app.post(path13, async (req, res) => {
9493
+ app.post(path12, async (req, res) => {
9502
9494
  const ct = req.headers["content-type"];
9503
9495
  if (!ct || !ct.startsWith("application/json")) {
9504
9496
  res.status(415).json({ error: "Content-Type must be application/json" });
@@ -9602,7 +9594,7 @@ function mountAcpHttp(app, bridge, opts) {
9602
9594
  );
9603
9595
  });
9604
9596
  });
9605
- app.get(path13, (req, res) => {
9597
+ app.get(path12, (req, res) => {
9606
9598
  const accept = req.headers["accept"] ?? "";
9607
9599
  if (!accept.includes("text/event-stream")) {
9608
9600
  res.status(406).json({ error: "Accept header must include text/event-stream" });
@@ -9688,7 +9680,7 @@ function mountAcpHttp(app, bridge, opts) {
9688
9680
  onPumpSettled();
9689
9681
  });
9690
9682
  });
9691
- app.delete(path13, (req, res) => {
9683
+ app.delete(path12, (req, res) => {
9692
9684
  const connectionId = headerOf(req, ACP_CONNECTION_HEADER);
9693
9685
  if (!connectionId) {
9694
9686
  res.status(400).json({ error: "Missing Acp-Connection-Id" });
@@ -9751,7 +9743,7 @@ function mountAcpHttp(app, bridge, opts) {
9751
9743
  const extraRoute = opts.extraWsRoutes?.find(
9752
9744
  (route) => route.path === url.pathname
9753
9745
  );
9754
- if (url.pathname !== path13 && !isCdpPath && !extraRoute) {
9746
+ if (url.pathname !== path12 && !isCdpPath && !extraRoute) {
9755
9747
  logReject(`unknown-path ${url.pathname}`);
9756
9748
  socket.destroy();
9757
9749
  return;
@@ -9765,6 +9757,12 @@ function mountAcpHttp(app, bridge, opts) {
9765
9757
  `[::1]:${localPort}`,
9766
9758
  `host.docker.internal:${localPort}`
9767
9759
  ]);
9760
+ if (localPort === 80 || localPort === 443) {
9761
+ allowed.add("localhost");
9762
+ allowed.add("127.0.0.1");
9763
+ allowed.add("[::1]");
9764
+ allowed.add("host.docker.internal");
9765
+ }
9768
9766
  if (!allowed.has(host)) {
9769
9767
  logReject(`host-not-allowed ${host || "(missing)"}`);
9770
9768
  socket.write("HTTP/1.1 403 Forbidden\r\n\r\n");
@@ -10142,7 +10140,7 @@ function mountAcpHttp(app, bridge, opts) {
10142
10140
  });
10143
10141
  }, "upgradeListener");
10144
10142
  httpServer.on("upgrade", upgradeListener);
10145
- writeStderrLine(`qwen serve: /acp WebSocket transport enabled on ${path13}`);
10143
+ writeStderrLine(`qwen serve: /acp WebSocket transport enabled on ${path12}`);
10146
10144
  }
10147
10145
  __name(setupWebSocket, "setupWebSocket");
10148
10146
  return {
@@ -10610,7 +10608,7 @@ var CdpTunnelRegistry = class {
10610
10608
  // packages/cli/src/serve/web-shell-static.ts
10611
10609
  init_esbuild_shims();
10612
10610
  var import_express2 = __toESM(require_express(), 1);
10613
- import * as path10 from "node:path";
10611
+ import * as path9 from "node:path";
10614
10612
  var WEB_SHELL_CSP_DIRECTIVES = [
10615
10613
  "default-src 'self'",
10616
10614
  "script-src 'self' 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'",
@@ -10638,7 +10636,7 @@ function isDocumentNavigation(req) {
10638
10636
  }
10639
10637
  __name(isDocumentNavigation, "isDocumentNavigation");
10640
10638
  function createSendIndex(webShellDir, frameAncestors = []) {
10641
- const indexPath = path10.join(webShellDir, "index.html");
10639
+ const indexPath = path9.join(webShellDir, "index.html");
10642
10640
  const csp = buildWebShellCsp(frameAncestors);
10643
10641
  return (res) => {
10644
10642
  res.status(200).set("Content-Security-Policy", csp).set("X-Content-Type-Options", "nosniff").set("Referrer-Policy", "no-referrer").set(
@@ -10674,7 +10672,7 @@ function mountWebShellAssets(app, webShellDir, frameAncestors = []) {
10674
10672
  const sendIndex = createSendIndex(webShellDir, frameAncestors);
10675
10673
  app.use(
10676
10674
  "/assets",
10677
- import_express2.default.static(path10.join(webShellDir, "assets"), {
10675
+ import_express2.default.static(path9.join(webShellDir, "assets"), {
10678
10676
  index: false,
10679
10677
  immutable: true,
10680
10678
  maxAge: "1y"
@@ -12233,14 +12231,14 @@ function registerWorkspaceExtensionRoutes(app, deps) {
12233
12231
  code: "extension_queue_full"
12234
12232
  });
12235
12233
  }, "sendExtensionQueueFull");
12236
- const withExtensionTimeout = /* @__PURE__ */ __name(async (promise, timeoutMs, operation) => await new Promise((resolve5, reject) => {
12234
+ const withExtensionTimeout = /* @__PURE__ */ __name(async (promise, timeoutMs, operation) => await new Promise((resolve4, reject) => {
12237
12235
  const timeout = setTimeout(() => {
12238
12236
  reject(new Error(`${operation} timed out after ${timeoutMs}ms`));
12239
12237
  }, timeoutMs);
12240
12238
  promise.then(
12241
12239
  (value) => {
12242
12240
  clearTimeout(timeout);
12243
- resolve5(value);
12241
+ resolve4(value);
12244
12242
  },
12245
12243
  (err) => {
12246
12244
  clearTimeout(timeout);
@@ -13356,7 +13354,7 @@ __name(registerPermissionRoutes, "registerPermissionRoutes");
13356
13354
  // packages/cli/src/serve/routes/session.ts
13357
13355
  init_esbuild_shims();
13358
13356
  import * as crypto2 from "node:crypto";
13359
- import * as path11 from "node:path";
13357
+ import * as path10 from "node:path";
13360
13358
 
13361
13359
  // packages/cli/src/serve/server/prompt-deadline.ts
13362
13360
  init_esbuild_shims();
@@ -13696,7 +13694,7 @@ function registerSessionRoutes(app, deps) {
13696
13694
  withMutableSession("POST /session/:id/cd", async (req, res, sessionId) => {
13697
13695
  const body = safeBody(req);
13698
13696
  const targetPath = body["path"];
13699
- if (typeof targetPath !== "string" || targetPath.length === 0 || !path11.isAbsolute(targetPath)) {
13697
+ if (typeof targetPath !== "string" || targetPath.length === 0 || !path10.isAbsolute(targetPath)) {
13700
13698
  res.status(400).json({
13701
13699
  error: "`path` is required and must be an absolute path",
13702
13700
  code: "invalid_path"
@@ -14162,7 +14160,7 @@ function registerSessionRoutes(app, deps) {
14162
14160
  );
14163
14161
  app.get("/workspace/:id/sessions", async (req, res) => {
14164
14162
  const workspaceCwd = req.params["id"] ?? "";
14165
- if (!path11.isAbsolute(workspaceCwd)) {
14163
+ if (!path10.isAbsolute(workspaceCwd)) {
14166
14164
  res.status(400).json({ error: "`:id` must decode to an absolute workspace path" });
14167
14165
  return;
14168
14166
  }
@@ -15572,9 +15570,9 @@ function registerSseEventsRoutes(app, deps) {
15572
15570
  let writeChain = Promise.resolve();
15573
15571
  const trackWriterIdle = writerIdleTimeoutMs !== void 0 && writerIdleTimeoutMs > 0;
15574
15572
  let lastWriteAt = trackWriterIdle ? Date.now() : 0;
15575
- const doWrite = /* @__PURE__ */ __name((chunk) => new Promise((resolve5, reject) => {
15573
+ const doWrite = /* @__PURE__ */ __name((chunk) => new Promise((resolve4, reject) => {
15576
15574
  if (res.writableEnded) {
15577
- resolve5();
15575
+ resolve4();
15578
15576
  return;
15579
15577
  }
15580
15578
  let ok;
@@ -15586,19 +15584,19 @@ function registerSseEventsRoutes(app, deps) {
15586
15584
  }
15587
15585
  if (ok) {
15588
15586
  if (trackWriterIdle) lastWriteAt = Date.now();
15589
- resolve5();
15587
+ resolve4();
15590
15588
  return;
15591
15589
  }
15592
15590
  const onDrain = /* @__PURE__ */ __name(() => {
15593
15591
  res.off("close", onClose);
15594
15592
  res.off("error", onError);
15595
15593
  if (trackWriterIdle) lastWriteAt = Date.now();
15596
- resolve5();
15594
+ resolve4();
15597
15595
  }, "onDrain");
15598
15596
  const onClose = /* @__PURE__ */ __name(() => {
15599
15597
  res.off("drain", onDrain);
15600
15598
  res.off("error", onError);
15601
- resolve5();
15599
+ resolve4();
15602
15600
  }, "onClose");
15603
15601
  const onError = /* @__PURE__ */ __name((err) => {
15604
15602
  res.off("drain", onDrain);
@@ -15720,7 +15718,7 @@ __name(registerSseEventsRoutes, "registerSseEventsRoutes");
15720
15718
  // packages/cli/src/serve/routes/a2ui-action.ts
15721
15719
  init_esbuild_shims();
15722
15720
  import * as fsp4 from "node:fs/promises";
15723
- import * as path12 from "node:path";
15721
+ import * as path11 from "node:path";
15724
15722
  var A2UI_MIME = "application/a2ui+json";
15725
15723
  var ACTION_TOOL = "action";
15726
15724
  var CALL_TIMEOUT_MS = 15e3;
@@ -15740,7 +15738,7 @@ __name(usableServerConfig, "usableServerConfig");
15740
15738
  async function findFromSettingsFile(workspaceCwd) {
15741
15739
  try {
15742
15740
  const raw = await fsp4.readFile(
15743
- path12.join(workspaceCwd, ".qwen", "settings.json"),
15741
+ path11.join(workspaceCwd, ".qwen", "settings.json"),
15744
15742
  "utf8"
15745
15743
  );
15746
15744
  const settings = JSON.parse(raw);
@@ -15898,17 +15896,17 @@ __name(resolveBridgeFsFactory, "resolveBridgeFsFactory");
15898
15896
  // packages/cli/src/serve/server/telemetry.ts
15899
15897
  init_esbuild_shims();
15900
15898
  function resolveDaemonTelemetryRoute(req) {
15901
- const path13 = req.path.replace(/\/$/, "") || "/";
15902
- if (req.method === "POST" && path13 === "/session") {
15899
+ const path12 = req.path.replace(/\/$/, "") || "/";
15900
+ if (req.method === "POST" && path12 === "/session") {
15903
15901
  return { route: "POST /session" };
15904
15902
  }
15905
- if (req.method === "POST" && path13 === "/sessions/delete") {
15903
+ if (req.method === "POST" && path12 === "/sessions/delete") {
15906
15904
  return { route: "POST /sessions/delete" };
15907
15905
  }
15908
- if (req.method === "GET" && path13 === "/daemon/status") {
15906
+ if (req.method === "GET" && path12 === "/daemon/status") {
15909
15907
  return { route: "GET /daemon/status" };
15910
15908
  }
15911
- const sessionAction = path13.match(
15909
+ const sessionAction = path12.match(
15912
15910
  /^\/session\/([^/]+)\/(load|resume|prompt|cancel|recap|btw|mid-turn-message|model|shell|detach|rewind|approval-mode|language|a2ui-action)$/
15913
15911
  );
15914
15912
  const sessionActionId = sessionAction?.[1];
@@ -15919,14 +15917,14 @@ function resolveDaemonTelemetryRoute(req) {
15919
15917
  sessionId: sessionActionId
15920
15918
  };
15921
15919
  }
15922
- const sessionMetadata = path13.match(/^\/session\/([^/]+)\/metadata$/);
15920
+ const sessionMetadata = path12.match(/^\/session\/([^/]+)\/metadata$/);
15923
15921
  if (sessionMetadata?.[1] && req.method === "PATCH") {
15924
15922
  return {
15925
15923
  route: "PATCH /session/:id/metadata",
15926
15924
  sessionId: sessionMetadata[1]
15927
15925
  };
15928
15926
  }
15929
- const sessionPermission = path13.match(
15927
+ const sessionPermission = path12.match(
15930
15928
  /^\/session\/([^/]+)\/permission\/([^/]+)$/
15931
15929
  );
15932
15930
  if (sessionPermission?.[1] && sessionPermission?.[2] && req.method === "POST") {
@@ -15937,7 +15935,7 @@ function resolveDaemonTelemetryRoute(req) {
15937
15935
  ...rawRequestId.length <= MAX_CLIENT_ID_LENGTH && CLIENT_ID_RE.test(rawRequestId) ? { permissionRequestId: rawRequestId } : {}
15938
15936
  };
15939
15937
  }
15940
- const globalPermission = path13.match(/^\/permission\/([^/]+)$/);
15938
+ const globalPermission = path12.match(/^\/permission\/([^/]+)$/);
15941
15939
  if (globalPermission?.[1] && req.method === "POST") {
15942
15940
  const rawRequestId = globalPermission[1];
15943
15941
  return {
@@ -15945,66 +15943,66 @@ function resolveDaemonTelemetryRoute(req) {
15945
15943
  ...rawRequestId.length <= MAX_CLIENT_ID_LENGTH && CLIENT_ID_RE.test(rawRequestId) ? { permissionRequestId: rawRequestId } : {}
15946
15944
  };
15947
15945
  }
15948
- const deleteSession = path13.match(/^\/session\/([^/]+)$/);
15946
+ const deleteSession = path12.match(/^\/session\/([^/]+)$/);
15949
15947
  const deleteSessionId = deleteSession?.[1];
15950
15948
  if (deleteSessionId && req.method === "DELETE") {
15951
15949
  return { route: "DELETE /session/:id", sessionId: deleteSessionId };
15952
15950
  }
15953
- if (req.method === "GET" && /^\/workspace\/[^/]+\/sessions$/.test(path13)) {
15951
+ if (req.method === "GET" && /^\/workspace\/[^/]+\/sessions$/.test(path12)) {
15954
15952
  return { route: "GET /workspace/:id/sessions" };
15955
15953
  }
15956
- if (req.method === "POST" && path13 === "/workspace/init") {
15954
+ if (req.method === "POST" && path12 === "/workspace/init") {
15957
15955
  return { route: "POST /workspace/init" };
15958
15956
  }
15959
- if (req.method === "POST" && path13 === "/workspace/setup-github") {
15957
+ if (req.method === "POST" && path12 === "/workspace/setup-github") {
15960
15958
  return { route: "POST /workspace/setup-github" };
15961
15959
  }
15962
- if (req.method === "POST" && path13 === "/workspace/reload") {
15960
+ if (req.method === "POST" && path12 === "/workspace/reload") {
15963
15961
  return { route: "POST /workspace/reload" };
15964
15962
  }
15965
- const mcpRestart = path13.match(/^\/workspace\/mcp\/([^/]+)\/restart$/);
15963
+ const mcpRestart = path12.match(/^\/workspace\/mcp\/([^/]+)\/restart$/);
15966
15964
  if (mcpRestart?.[1] && req.method === "POST") {
15967
15965
  return { route: "POST /workspace/mcp/:server/restart" };
15968
15966
  }
15969
- if (req.method === "POST" && path13 === "/workspace/mcp/servers") {
15967
+ if (req.method === "POST" && path12 === "/workspace/mcp/servers") {
15970
15968
  return { route: "POST /workspace/mcp/servers" };
15971
15969
  }
15972
- const mcpDelete = path13.match(/^\/workspace\/mcp\/servers\/([^/]+)$/);
15970
+ const mcpDelete = path12.match(/^\/workspace\/mcp\/servers\/([^/]+)$/);
15973
15971
  if (mcpDelete?.[1] && req.method === "DELETE") {
15974
15972
  return { route: "DELETE /workspace/mcp/servers/:name" };
15975
15973
  }
15976
- if (req.method === "POST" && path13 === "/workspace/auth/device-flow") {
15974
+ if (req.method === "POST" && path12 === "/workspace/auth/device-flow") {
15977
15975
  return { route: "POST /workspace/auth/device-flow" };
15978
15976
  }
15979
- const deviceFlowDelete = path13.match(
15977
+ const deviceFlowDelete = path12.match(
15980
15978
  /^\/workspace\/auth\/device-flow\/([^/]+)$/
15981
15979
  );
15982
15980
  if (deviceFlowDelete?.[1] && req.method === "DELETE") {
15983
15981
  return { route: "DELETE /workspace/auth/device-flow/:id" };
15984
15982
  }
15985
- const toolEnable = path13.match(/^\/workspace\/tools\/([^/]+)\/enable$/);
15983
+ const toolEnable = path12.match(/^\/workspace\/tools\/([^/]+)\/enable$/);
15986
15984
  if (toolEnable?.[1] && req.method === "POST") {
15987
15985
  return { route: "POST /workspace/tools/:name/enable" };
15988
15986
  }
15989
- if (path13 === "/workspace/settings") {
15987
+ if (path12 === "/workspace/settings") {
15990
15988
  if (req.method === "GET") return { route: "GET /workspace/settings" };
15991
15989
  if (req.method === "POST") return { route: "POST /workspace/settings" };
15992
15990
  }
15993
- if (path13 === "/workspace/permissions") {
15991
+ if (path12 === "/workspace/permissions") {
15994
15992
  if (req.method === "GET") return { route: "GET /workspace/permissions" };
15995
15993
  if (req.method === "POST") return { route: "POST /workspace/permissions" };
15996
15994
  }
15997
- if (path13 === "/workspace/trust") {
15995
+ if (path12 === "/workspace/trust") {
15998
15996
  if (req.method === "GET") return { route: "GET /workspace/trust" };
15999
15997
  }
16000
- if (req.method === "POST" && path13 === "/workspace/trust/request") {
15998
+ if (req.method === "POST" && path12 === "/workspace/trust/request") {
16001
15999
  return { route: "POST /workspace/trust/request" };
16002
16000
  }
16003
- if (path13 === "/workspace/voice") {
16001
+ if (path12 === "/workspace/voice") {
16004
16002
  if (req.method === "GET") return { route: "GET /workspace/voice" };
16005
16003
  if (req.method === "POST") return { route: "POST /workspace/voice" };
16006
16004
  }
16007
- if (req.method === "POST" && path13 === "/workspace/voice/transcribe") {
16005
+ if (req.method === "POST" && path12 === "/workspace/voice/transcribe") {
16008
16006
  return { route: "POST /workspace/voice/transcribe" };
16009
16007
  }
16010
16008
  return void 0;
@@ -16030,7 +16028,7 @@ function daemonTelemetryMiddleware(boundWorkspace) {
16030
16028
  ...route.permissionRequestId ? { permissionRequestId: route.permissionRequestId } : {},
16031
16029
  ...clientId ? { clientId } : {}
16032
16030
  },
16033
- async (span) => await new Promise((resolve5, reject) => {
16031
+ async (span) => await new Promise((resolve4, reject) => {
16034
16032
  let done = false;
16035
16033
  const finish = /* @__PURE__ */ __name(() => {
16036
16034
  if (done) return;
@@ -16041,7 +16039,7 @@ function daemonTelemetryMiddleware(boundWorkspace) {
16041
16039
  route.route,
16042
16040
  res.statusCode
16043
16041
  );
16044
- resolve5();
16042
+ resolve4();
16045
16043
  }, "finish");
16046
16044
  res.once("finish", finish);
16047
16045
  res.once("close", finish);
@@ -16364,10 +16362,10 @@ function installRateLimiter(app, opts, daemonLog) {
16364
16362
  { tier, key: key.slice(0, 64) }
16365
16363
  );
16366
16364
  } : void 0,
16367
- onError: daemonLog ? (err, path13) => {
16365
+ onError: daemonLog ? (err, path12) => {
16368
16366
  daemonLog.warn(
16369
16367
  `rate limiter error (fail-open): ${err instanceof Error ? err.message : String(err)}`,
16370
- { path: path13 }
16368
+ { path: path12 }
16371
16369
  );
16372
16370
  } : void 0
16373
16371
  });
@@ -16391,8 +16389,23 @@ function installSelfOriginStripMiddleware(app, getPort) {
16391
16389
  `http://127.0.0.1:${port}`,
16392
16390
  `http://localhost:${port}`,
16393
16391
  `http://[::1]:${port}`,
16394
- `http://host.docker.internal:${port}`
16392
+ `http://host.docker.internal:${port}`,
16393
+ `https://127.0.0.1:${port}`,
16394
+ `https://localhost:${port}`,
16395
+ `https://[::1]:${port}`,
16396
+ `https://host.docker.internal:${port}`
16395
16397
  ]);
16398
+ if (port === 80 || port === 443) {
16399
+ for (const host of [
16400
+ "127.0.0.1",
16401
+ "localhost",
16402
+ "[::1]",
16403
+ "host.docker.internal"
16404
+ ]) {
16405
+ cachedSelfOrigins.add(`http://${host}`);
16406
+ cachedSelfOrigins.add(`https://${host}`);
16407
+ }
16408
+ }
16396
16409
  }
16397
16410
  if (cachedSelfOrigins.has(origin)) {
16398
16411
  delete req.headers.origin;
@@ -16766,6 +16779,7 @@ function createServeApp(opts, getPort = () => opts.port, deps = {}) {
16766
16779
  contextFilename: deps.contextFilename ?? "QWEN.md",
16767
16780
  statusProvider,
16768
16781
  workspaceProvidersStatusProvider: createWorkspaceProvidersStatusProvider(),
16782
+ workspaceSkillsStatusProvider: createWorkspaceSkillsStatusProvider(),
16769
16783
  isChannelLive: /* @__PURE__ */ __name(() => bridge.isChannelLive(), "isChannelLive"),
16770
16784
  persistDisabledTools: deps.persistDisabledTools ?? (async () => {
16771
16785
  throw new Error(
@@ -17129,7 +17143,7 @@ export {
17129
17143
  *
17130
17144
  * CDP browser-level emulation layer for the Plan C "CDP tunnel" (issue #5626).
17131
17145
  *
17132
- * A puppeteer client (chrome-devtools-mcp) connects to the daemon's `/cdp`
17146
+ * A CDP client connects to the daemon's `/cdp`
17133
17147
  * WebSocket expecting a browser-level CDP endpoint, but behind the tunnel is a
17134
17148
  * single real tab driven via `chrome.debugger` (page-level only). This class
17135
17149
  * synthesizes the missing browser-level topology so puppeteer connects and gets
@@ -17153,7 +17167,7 @@ export {
17153
17167
  *
17154
17168
  * `/cdp` endpoint glue for the Plan C "CDP tunnel" (issue #5626).
17155
17169
  *
17156
- * Per puppeteer connection (chrome-devtools-mcp) this wires:
17170
+ * Per CDP client connection this wires:
17157
17171
  *
17158
17172
  * puppeteer --raw CDP--> CdpBrowserEmulator --forwardToTab--> CdpReverseLink
17159
17173
  * |