@qwen-code/qwen-code 0.19.2 → 0.19.3-nightly.20260630.e00fe6a27

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 (286) hide show
  1. package/bundled/extension-creator/SKILL.md +357 -0
  2. package/bundled/loop/SKILL.md +21 -7
  3. package/bundled/loop/SKILL.test.ts +41 -0
  4. package/bundled/loop/loop-task-file.test.ts +1064 -0
  5. package/bundled/loop/loop-task-file.ts +404 -0
  6. package/bundled/loop/loop-tick-resolver.test.ts +665 -0
  7. package/bundled/loop/loop-tick-resolver.ts +347 -0
  8. package/bundled/qc-helper/SKILL.md +26 -19
  9. package/bundled/qc-helper/docs/configuration/auth.md +11 -11
  10. package/bundled/qc-helper/docs/configuration/model-providers.md +13 -13
  11. package/bundled/qc-helper/docs/configuration/settings.md +76 -75
  12. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
  13. package/bundled/qc-helper/docs/features/commands.md +108 -77
  14. package/bundled/qc-helper/docs/features/hooks.md +6 -1
  15. package/bundled/qc-helper/docs/features/memory.md +52 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +24 -2
  17. package/bundled/qc-helper/docs/support/tos-privacy.md +16 -3
  18. package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
  19. package/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-T5X5MN5Q.js} +29 -27
  20. package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-P3E3WTOQ.js} +42 -37
  21. package/chunks/{acpAgent-4MCETHF2.js → acpAgent-QEP6DXFW.js} +864 -175
  22. package/chunks/{agent-K3ENVYSB.js → agent-UDANDUF7.js} +24 -23
  23. package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-KYVSZHSO.js} +24 -23
  24. package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-KWSJAQ7B.js} +33 -12
  25. package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-D2X7G3C3.js} +2 -2
  26. package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-UGETICJQ.js} +2 -2
  27. package/chunks/{bridge-4LV2HBH2.js → bridge-X42LXPTA.js} +31 -30
  28. package/chunks/{ca-7WC7ELX6.js → ca-IUFWESZL.js} +1 -0
  29. package/chunks/{chunk-JXQ23SNT.js → chunk-2JKEQWDZ.js} +623 -78
  30. package/chunks/{chunk-2TJ3YN6Q.js → chunk-2RJA6J57.js} +416 -401
  31. package/chunks/{chunk-3UALQ56H.js → chunk-3227DZO4.js} +1 -1
  32. package/chunks/{chunk-BGUDAULQ.js → chunk-3CPCDXFR.js} +5 -5
  33. package/chunks/{chunk-5RVSM6NW.js → chunk-3HUHAQF3.js} +1 -1
  34. package/chunks/{chunk-D5E5TMYH.js → chunk-3M4W4U5G.js} +16 -2
  35. package/chunks/{chunk-DBZUXSSV.js → chunk-4X7NIEQJ.js} +3 -3
  36. package/chunks/chunk-5GOVVXEV.js +73 -0
  37. package/chunks/{chunk-2BAQ3ACS.js → chunk-5SM4VT6V.js} +405 -5
  38. package/chunks/{chunk-NYOHZYHM.js → chunk-5XQ4A26L.js} +45 -3
  39. package/chunks/{chunk-CI5O6SQL.js → chunk-6FKEVYCD.js} +4 -4
  40. package/chunks/{chunk-ZD3NW5KL.js → chunk-7LM4XHPE.js} +63 -9
  41. package/chunks/chunk-7UNP2XM7.js +840 -0
  42. package/chunks/{chunk-OQHQHJRK.js → chunk-ARYCHZ4B.js} +151 -4775
  43. package/chunks/chunk-BC3C4F3Q.js +40 -0
  44. package/chunks/{chunk-CGEGHF2C.js → chunk-BKXBARJZ.js} +1 -1
  45. package/chunks/chunk-BMFMJINR.js +45 -0
  46. package/chunks/chunk-BOJWHRMX.js +11273 -0
  47. package/chunks/{chunk-CGOMICBE.js → chunk-BSZEQNUA.js} +34 -1
  48. package/chunks/{chunk-OIC6S73E.js → chunk-BUUQ5HPX.js} +1 -1
  49. package/chunks/{chunk-2BIF2NVV.js → chunk-BVSVIN45.js} +2 -2
  50. package/chunks/{chunk-TOEGRAVX.js → chunk-BX5YO7UW.js} +17 -5
  51. package/chunks/{chunk-4W4T77MO.js → chunk-BXVWV4GI.js} +109 -6
  52. package/chunks/{chunk-VQRYPFCV.js → chunk-CYHVPQYT.js} +10 -460
  53. package/chunks/{chunk-PRYMDRBV.js → chunk-DDMOU62Q.js} +1 -1
  54. package/chunks/{chunk-S566HKUS.js → chunk-DHXWNSJA.js} +15 -1
  55. package/chunks/{chunk-F6XNTYNE.js → chunk-E6XQPQXW.js} +30 -307
  56. package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
  57. package/chunks/{chunk-EL5IHQON.js → chunk-EWYQFWYF.js} +6 -27
  58. package/chunks/{chunk-HG6YKEBI.js → chunk-F2DOT6UZ.js} +161 -30
  59. package/chunks/{chunk-JTYRZODB.js → chunk-FOOIZCWL.js} +16 -7
  60. package/chunks/{chunk-EX4W6ZYG.js → chunk-G5G4TFZ7.js} +1 -1
  61. package/chunks/{chunk-EW6C27XX.js → chunk-GEHVIWAT.js} +9 -3
  62. package/chunks/chunk-HEVBZSXG.js +4923 -0
  63. package/chunks/chunk-HFQ2XSE7.js +690 -0
  64. package/chunks/{chunk-PF523XJX.js → chunk-HPGTGMP3.js} +1 -1
  65. package/chunks/{chunk-OTBK43JR.js → chunk-HYCC3XM3.js} +1 -1
  66. package/chunks/{chunk-TMBPDHXD.js → chunk-I4H7PRWQ.js} +1 -1
  67. package/chunks/{chunk-EEEZIVFJ.js → chunk-JOLIREYR.js} +1 -1
  68. package/chunks/{chunk-TZM5JIAX.js → chunk-JYPQTRA3.js} +10 -7
  69. package/chunks/chunk-K5XU6E4T.js +167 -0
  70. package/chunks/{chunk-BS64PXY3.js → chunk-KFVU7ODN.js} +1 -1
  71. package/chunks/{chunk-3RJ3ZPPR.js → chunk-KKQWC6WS.js} +7 -7
  72. package/chunks/{chunk-3QFE4OTE.js → chunk-LBW7NW7X.js} +4 -4
  73. package/chunks/{chunk-Z7XXFPGP.js → chunk-LDWTYE33.js} +1 -1
  74. package/chunks/{chunk-EXMX5YHG.js → chunk-LP5E4YIH.js} +1 -1
  75. package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
  76. package/chunks/{chunk-I5T6PIBQ.js → chunk-MBV2CTRL.js} +1010 -925
  77. package/chunks/{chunk-5JZLXFPD.js → chunk-MTHMXSNT.js} +11 -11
  78. package/chunks/{chunk-FPACXT7T.js → chunk-MTJVHQDP.js} +534 -164
  79. package/chunks/chunk-NDOC6M5S.js +481 -0
  80. package/chunks/{chunk-HGNSRCRB.js → chunk-NL4C3H6C.js} +1 -1
  81. package/chunks/{chunk-GZCJS5WH.js → chunk-O2VBQ3Y2.js} +2 -2
  82. package/chunks/{chunk-UN3C6GOR.js → chunk-PPFWEV7G.js} +10 -108
  83. package/chunks/{chunk-RS4HRC75.js → chunk-QI2CFVRF.js} +85 -8
  84. package/chunks/{chunk-XU5P23GN.js → chunk-QLDPRILK.js} +3 -3
  85. package/chunks/chunk-QYUE6W3T.js +123 -0
  86. package/chunks/{chunk-USGMPVOY.js → chunk-R3LHDWF2.js} +21 -12
  87. package/chunks/{chunk-BNXANYLH.js → chunk-RD6YJJJ6.js} +81 -1
  88. package/chunks/{chunk-PXFFKNCO.js → chunk-RIP623NO.js} +4877 -2469
  89. package/chunks/{chunk-XKBP7M7A.js → chunk-RYBSUGOR.js} +142 -30
  90. package/chunks/{chunk-BG4BIP7F.js → chunk-SBBN4BWR.js} +4 -2
  91. package/chunks/{chunk-T2VDEFUU.js → chunk-SKQZZVAV.js} +2 -2
  92. package/chunks/{chunk-5R4SBCX6.js → chunk-SL5MOGQH.js} +3 -3
  93. package/chunks/chunk-SMXULRAN.js +37 -0
  94. package/chunks/{chunk-WA5OJGFL.js → chunk-SS6WJMQK.js} +363 -76
  95. package/chunks/{chunk-UAARVVBI.js → chunk-TNWFHGN6.js} +1 -1
  96. package/chunks/{chunk-I2RFAW6Q.js → chunk-TT6Q3EN4.js} +7 -5
  97. package/chunks/chunk-UAKXW3DN.js +30 -0
  98. package/chunks/{chunk-C4K3FEQ2.js → chunk-UX4SGCGN.js} +32 -3
  99. package/chunks/{chunk-J6AW7O5D.js → chunk-WHDQZHRU.js} +2 -2
  100. package/chunks/{chunk-WGAEWQTF.js → chunk-WN6K47NR.js} +1 -2
  101. package/chunks/{chunk-UAARJR2G.js → chunk-WQT5SOI6.js} +2 -2
  102. package/chunks/{chunk-VYFMN7C6.js → chunk-WUMVIRTN.js} +225 -37
  103. package/chunks/{chunk-R36VMVEP.js → chunk-XJMKOTVV.js} +5 -5
  104. package/chunks/{chunk-TXVGVZYR.js → chunk-XJYUPHRC.js} +3 -3
  105. package/chunks/{chunk-2JD55C6G.js → chunk-Y6YMRS3U.js} +2 -2
  106. package/chunks/{chunk-LLFFKXZZ.js → chunk-YALKC62D.js} +56 -29
  107. package/chunks/{chunk-GYZQA2FO.js → chunk-YLZJCUH6.js} +1 -1
  108. package/chunks/chunk-YTFBURQD.js +313 -0
  109. package/chunks/{chunk-KBXLIVWQ.js → chunk-ZFPRYHWR.js} +2 -2
  110. package/chunks/{chunk-X6EDWN44.js → chunk-ZP6UKOPB.js} +1 -1
  111. package/chunks/{computer-use-6BBRNT6S.js → computer-use-LF2S6LUZ.js} +103 -49
  112. package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-VPX5UG55.js} +26 -25
  113. package/chunks/{cron-create-4KQE6YLH.js → cron-create-SKEY55RG.js} +4 -4
  114. package/chunks/{cron-delete-THME66UP.js → cron-delete-I3NAT32Z.js} +6 -6
  115. package/chunks/{cron-list-7A54SJ5N.js → cron-list-6XRRL6TH.js} +5 -5
  116. package/chunks/{daemon-status-provider-CSL3BUOY.js → daemon-status-provider-5JAWZS4V.js} +34 -34
  117. package/chunks/{de-ACHALDED.js → de-EOW5PVHF.js} +1 -0
  118. package/chunks/{dist-BD27IA3L.js → dist-4FCNM6KJ.js} +2 -2
  119. package/chunks/{dist-OD2FY543.js → dist-O3H4PABL.js} +2 -2
  120. package/chunks/{dist-BOOH5JWN.js → dist-SCAAUWPS.js} +18 -4
  121. package/chunks/{dist-QHJRBCMP.js → dist-UKPWQJCL.js} +44 -2
  122. package/chunks/{dist-QFFZWACU.js → dist-VD7HXTML.js} +20 -9
  123. package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-7FRQMU4P.js} +25 -24
  124. package/chunks/{edit-7J6WXARF.js → edit-REKJDIRL.js} +68 -27
  125. package/chunks/{en-NCUBOJOY.js → en-HPWEJBTR.js} +8 -0
  126. package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-GBKUDCD3.js} +24 -23
  127. package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-WB3Y4FGT.js} +24 -23
  128. package/chunks/{errors-6G2JYR54.js → errors-2XJDYO3M.js} +26 -25
  129. package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-KKC7O2ZV.js} +24 -23
  130. package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-7HMS3TF7.js} +24 -23
  131. package/chunks/{fast-path-35JJFS3C.js → fast-path-XVNIYWGG.js} +4 -4
  132. package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-UQLRFDQP.js} +3 -2
  133. package/chunks/{fr-GVKZ27MF.js → fr-BN5NKSAC.js} +1 -0
  134. package/chunks/{gemini-NDTG7WAX.js → gemini-U5TPU3IQ.js} +210 -104
  135. package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-ZVWRHXOO.js} +4 -4
  136. package/chunks/{glob-SJ2JBZK4.js → glob-FEJWIH2W.js} +24 -23
  137. package/chunks/{grep-BRMWFEWR.js → grep-KMP25IIA.js} +24 -23
  138. package/chunks/{headlessSafetyWarnings-LJ6FJX77.js → headlessSafetyWarnings-5DEDET4M.js} +24 -23
  139. package/chunks/{initializer-P5AXF7PV.js → initializer-FJTACLOH.js} +31 -28
  140. package/chunks/{ja-FKZ2WZ4D.js → ja-7DEUB2TS.js} +1 -0
  141. package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-YLMDLKXT.js} +2 -2
  142. package/chunks/{list-6COK34BP.js → list-SCQXYJUW.js} +32 -29
  143. package/chunks/{loadedSettingsAdapter-XIUTN245.js → loadedSettingsAdapter-P6KPNAG7.js} +30 -27
  144. package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-FYEQEJUA.js} +7 -7
  145. package/chunks/{ls-BYQY7RVV.js → ls-R5WP4BGZ.js} +4 -4
  146. package/chunks/{lsp-X54RO4IV.js → lsp-GSICJMMW.js} +2 -2
  147. package/chunks/{monitor-DH7KFSJV.js → monitor-JU3HHHVY.js} +24 -23
  148. package/chunks/nonInteractiveCli-IZEKUHU3.js +100 -0
  149. package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-YHY3Z2QQ.js} +52 -23
  150. package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-4WUVA3Q2.js} +13 -12
  151. package/chunks/{pt-SY5NCFGR.js → pt-TNZRNLQB.js} +1 -0
  152. package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-MVYYR44B.js} +26 -25
  153. package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-6HNGHALT.js} +5 -4
  154. package/chunks/{read-file-767G23OY.js → read-file-NABEO2X4.js} +8 -8
  155. package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-DQQW7H7T.js} +2 -2
  156. package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-YXLK6UTX.js} +24 -23
  157. package/chunks/{ru-FWNXJG4F.js → ru-NIAUBKCN.js} +1 -0
  158. package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-4B5QBMLQ.js} +144 -41
  159. package/chunks/{scheduler-UNTFDQLG.js → scheduler-XAKIYBDL.js} +24 -23
  160. package/chunks/{send-message-2DAFXEYP.js → send-message-EE4TWKVU.js} +2 -2
  161. package/chunks/{serve-KZ56QB5S.js → serve-4RXVLUKD.js} +30 -28
  162. package/chunks/{server-BV5TZUMU.js → server-7PA5QGIA.js} +11037 -8747
  163. package/chunks/{session-OIBXFSGD.js → session-WNVWRYAH.js} +194 -57
  164. package/chunks/{settings-WJTCBIRA.js → settings-YJH32TFF.js} +30 -27
  165. package/chunks/{shell-WC52IBHW.js → shell-YFLABOS5.js} +24 -23
  166. package/chunks/{skill-U7F7JR4M.js → skill-N3J7FUAY.js} +38 -11
  167. package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-D6WVMFZJ.js} +26 -25
  168. package/chunks/{src-4F6FBZFI.js → src-IU5GDBEH.js} +88 -28
  169. package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-QIPQTRT4.js} +2784 -2474
  170. package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-T5YHQ6S2.js} +3 -3
  171. package/chunks/{task-create-OUYCA553.js → task-create-BLY7RHXX.js} +6 -6
  172. package/chunks/{task-list-WAX7I2IA.js → task-list-3QUYNVYR.js} +5 -5
  173. package/chunks/{task-stop-CAIL6FNH.js → task-stop-U4RATK2V.js} +2 -2
  174. package/chunks/{task-update-AHEO5OUT.js → task-update-U54O7KJX.js} +6 -6
  175. package/chunks/{team-create-3WC7CIIW.js → team-create-TP4CLLM3.js} +24 -23
  176. package/chunks/{team-delete-HGHFG23B.js → team-delete-LKBYPASD.js} +5 -5
  177. package/chunks/{theme-manager-DICFCT3P.js → theme-manager-N2TBIBZT.js} +25 -24
  178. package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-OYXKTVYN.js} +4 -4
  179. package/chunks/{tool-search-L5K7HLER.js → tool-search-GBBSICYB.js} +101 -16
  180. package/chunks/trustedFolders-F7TBU5CD.js +76 -0
  181. package/chunks/types-QX5C3CHJ.js +12 -0
  182. package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-EQDQPSMI.js} +55 -50
  183. package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-PCVCML2X.js} +29 -15
  184. package/chunks/{workflow-OB3AND7I.js → workflow-ANJ4FYBK.js} +32 -30
  185. package/chunks/{workspace-providers-status-ZIR5EPOO.js → workspace-providers-status-462QQKQM.js} +32 -29
  186. package/chunks/workspace-service-VTG4G6CW.js +75 -0
  187. package/chunks/{write-file-SEXBNDZM.js → write-file-3P3WMQQW.js} +63 -27
  188. package/chunks/{zh-RBEGQVQT.js → zh-5EUYXASN.js} +8 -0
  189. package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-TR3XYGE5.js} +8 -0
  190. package/cli-entry.js +20 -9
  191. package/cli.js +6 -6
  192. package/locales/ca.js +2 -0
  193. package/locales/de.js +2 -0
  194. package/locales/en.js +14 -0
  195. package/locales/fr.js +2 -0
  196. package/locales/ja.js +1 -0
  197. package/locales/pt.js +2 -0
  198. package/locales/ru.js +2 -0
  199. package/locales/zh-TW.js +12 -0
  200. package/locales/zh.js +12 -0
  201. package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +35 -0
  202. package/node_modules/@qwen-code/audio-capture/dist/index.js +48 -0
  203. package/node_modules/@qwen-code/audio-capture/dist/index.js.map +1 -0
  204. package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +7 -0
  205. package/node_modules/@qwen-code/audio-capture/dist/platform.js +18 -0
  206. package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +1 -0
  207. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +21 -0
  208. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +58 -0
  209. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +5 -0
  210. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +84 -0
  211. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +19 -0
  212. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +6 -0
  213. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  214. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +7 -0
  215. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +43 -0
  216. package/node_modules/@qwen-code/audio-capture/package.json +30 -0
  217. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  218. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  219. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
  220. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
  221. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  222. package/package.json +18 -6
  223. package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
  224. package/postinstall.js +50 -0
  225. package/web-shell/assets/{arc-D_ae_Y9k.js → arc-DIemsO_F.js} +1 -1
  226. package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-CTlUvIQv.js} +1 -1
  227. package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-DG0jmIZK.js} +1 -1
  228. package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-WljDBi55.js} +1 -1
  229. package/web-shell/assets/channel-CbzRbdpA.js +1 -0
  230. package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-8nc6onr2.js} +1 -1
  231. package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-EopXix8Z.js} +1 -1
  232. package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-BE4Jz3N3.js} +1 -1
  233. package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-C_eErgDN.js} +1 -1
  234. package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-DFtVW-Is.js} +1 -1
  235. package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-CJPyxIg9.js} +1 -1
  236. package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-Bk-xgj6M.js} +1 -1
  237. package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-p3Y4yaFB.js} +1 -1
  238. package/web-shell/assets/classDiagram-4FO5ZUOK-BFdyQ52h.js +1 -0
  239. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BFdyQ52h.js +1 -0
  240. package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-BCMO6Js3.js} +1 -1
  241. package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-DUMrwASf.js} +1 -1
  242. package/web-shell/assets/default-aEtf0G7-.svg +1 -0
  243. package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-C5d7qJbL.js} +1 -1
  244. package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-CjLzMhbT.js} +1 -1
  245. package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-RCoNWeAm.js} +1 -1
  246. package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-KThXjaNV.js} +1 -1
  247. package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-DKsC2BWz.js} +1 -1
  248. package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-DJ2ukmq0.js} +1 -1
  249. package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-zzqaARRX.js} +1 -1
  250. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-kFUg-gqT.js} +1 -1
  251. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-C6JnMVzD.js} +1 -1
  252. package/web-shell/assets/index-B3XUm7dw.js +713 -0
  253. package/web-shell/assets/index-CHmzAWys.css +5 -0
  254. package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-XqPVhp89.js} +1 -1
  255. package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
  256. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D2k8sGpf.js} +1 -1
  257. package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-CQEST1GE.js} +1 -1
  258. package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-DZ7kqVBC.js} +1 -1
  259. package/web-shell/assets/{linear-DGGM2kcP.js → linear-B6C_6q_E.js} +1 -1
  260. package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-CsyNP1qt.js} +5 -5
  261. package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-B1VDIzJq.js} +1 -1
  262. package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-DN0E7Jwu.js} +1 -1
  263. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-UKTQdHKm.js} +1 -1
  264. package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
  265. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-BRGceQvN.js} +1 -1
  266. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-2DDyu41v.js} +1 -1
  267. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-CT5iE8ZU.js} +1 -1
  268. package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-CqMQ_s4G.js} +1 -1
  269. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CamhV5pM.js +1 -0
  270. package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-Di37QSZU.js} +1 -1
  271. package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-DCXvpz5S.js} +1 -1
  272. package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-CpUCk6OX.js} +1 -1
  273. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-D01pVEBg.js} +1 -1
  274. package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-DOu5JDoz.js} +1 -1
  275. package/web-shell/index.html +2 -2
  276. package/chunks/chunk-B6HQGTYR.js +0 -410
  277. package/chunks/chunk-R2BXK7SX.js +0 -13
  278. package/chunks/chunk-RKIZXJMB.js +0 -13
  279. package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
  280. package/chunks/workspace-service-OM5D4OI2.js +0 -60
  281. package/web-shell/assets/channel-DYPNiTww.js +0 -1
  282. package/web-shell/assets/classDiagram-4FO5ZUOK-p_g25Tni.js +0 -1
  283. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-p_g25Tni.js +0 -1
  284. package/web-shell/assets/index-CpOXWDPh.js +0 -714
  285. package/web-shell/assets/index-oVK7qhre.css +0 -5
  286. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BHUSEndU.js +0 -1
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  createDebugLogger,
5
5
  isNodeError
6
- } from "./chunk-C4K3FEQ2.js";
6
+ } from "./chunk-UX4SGCGN.js";
7
7
  import {
8
8
  init_esbuild_shims
9
9
  } from "./chunk-A4BMJM77.js";
@@ -2,20 +2,20 @@
2
2
  "use strict";
3
3
  import {
4
4
  formatFetchErrorForUser
5
- } from "./chunk-EW6C27XX.js";
5
+ } from "./chunk-GEHVIWAT.js";
6
6
  import {
7
7
  openBrowserSecurely
8
8
  } from "./chunk-22IFUCVR.js";
9
+ import {
10
+ atomicWriteFile
11
+ } from "./chunk-3227DZO4.js";
9
12
  import {
10
13
  combineAbortSignals
11
14
  } from "./chunk-64WXLC72.js";
12
- import {
13
- atomicWriteFile
14
- } from "./chunk-3UALQ56H.js";
15
15
  import {
16
16
  Storage,
17
17
  createDebugLogger
18
- } from "./chunk-C4K3FEQ2.js";
18
+ } from "./chunk-UX4SGCGN.js";
19
19
  import {
20
20
  init_esbuild_shims
21
21
  } from "./chunk-A4BMJM77.js";
@@ -6,7 +6,7 @@ import {
6
6
  getNestedProperty,
7
7
  getPersistScopeForModelSelection,
8
8
  restoreSettingsFromBackup
9
- } from "./chunk-OQHQHJRK.js";
9
+ } from "./chunk-HEVBZSXG.js";
10
10
  import {
11
11
  init_esbuild_shims
12
12
  } from "./chunk-A4BMJM77.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  SkillError
5
- } from "./chunk-PXFFKNCO.js";
5
+ } from "./chunk-RIP623NO.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-A4BMJM77.js";
@@ -51,6 +51,7 @@ var MissingCliEntryError = class extends Error {
51
51
  var SERVE_STATUS_EXT_METHODS = {
52
52
  workspaceMcp: "qwen/status/workspace/mcp",
53
53
  workspaceMcpTools: "qwen/status/workspace/mcp/tools",
54
+ workspaceMcpResources: "qwen/status/workspace/mcp/resources",
54
55
  workspaceSkills: "qwen/status/workspace/skills",
55
56
  workspaceTools: "qwen/status/workspace/tools",
56
57
  workspaceProviders: "qwen/status/workspace/providers",
@@ -78,6 +79,7 @@ var SERVE_CONTROL_EXT_METHODS = {
78
79
  sessionShellHistory: "qwen/control/session/shell_history",
79
80
  sessionLanguage: "qwen/control/session/language",
80
81
  sessionRewind: "qwen/control/session/rewind",
82
+ sessionContinue: "qwen/control/session/continue",
81
83
  sessionTitle: "qwen/control/session/title",
82
84
  workspaceMcpRestart: "qwen/control/workspace/mcp/restart",
83
85
  workspaceMcpManage: "qwen/control/workspace/mcp/manage",
@@ -88,7 +90,19 @@ var SERVE_CONTROL_EXT_METHODS = {
88
90
  workspaceMcpRuntimeAdd: "qwen/control/workspace/mcp/runtime-add",
89
91
  workspaceMcpRuntimeRemove: "qwen/control/workspace/mcp/runtime-remove",
90
92
  workspaceReload: "qwen/control/workspace/reload",
91
- workspaceExtensionsRefresh: "qwen/control/workspace/extensions/refresh"
93
+ workspaceExtensionsRefresh: "qwen/control/workspace/extensions/refresh",
94
+ /**
95
+ * Reverse tool channel (issue #5626, Phase 2). Unlike every other entry
96
+ * here — which the PARENT serve process calls DOWN into the `qwen --acp`
97
+ * child — this one is called by the CHILD UP into the parent: a
98
+ * client-hosted (extension) MCP server's `sendSdkMcpMessage` round-trips a
99
+ * JSON-RPC `mcp_message` from the child's `McpClientManager` back to the
100
+ * parent's `ClientMcpRegistrar`, which pushes it down the daemon WS to the
101
+ * client and returns the correlated response. Params: `{ server, payload }`;
102
+ * result: `{ payload }`.
103
+ */
104
+ clientMcpMessage: "qwen/control/client_mcp/message",
105
+ sessionCd: "qwen/control/session/cd"
92
106
  };
93
107
  var IDLE_HOOK_EVENTS = {
94
108
  PreToolUse: { description: "Before tool execution", matcherKind: "toolName" },
@@ -8,14 +8,14 @@ import {
8
8
  } from "./chunk-5DWXLGOM.js";
9
9
  import {
10
10
  loadSettings
11
- } from "./chunk-OQHQHJRK.js";
11
+ } from "./chunk-HEVBZSXG.js";
12
12
  import {
13
13
  writeStderrLine
14
14
  } from "./chunk-Y6Z2O3WR.js";
15
15
  import {
16
16
  MCP_BUDGET_WARN_FRACTION,
17
17
  parsePositiveIntegerEnv
18
- } from "./chunk-PXFFKNCO.js";
18
+ } from "./chunk-RIP623NO.js";
19
19
  import {
20
20
  openBrowserSecurely,
21
21
  shouldLaunchBrowser
@@ -257,7 +257,7 @@ var serveCommand = {
257
257
  process.exit(1);
258
258
  }
259
259
  }
260
- const { runQwenServe } = await import("./run-qwen-serve-REKSTYRA.js");
260
+ const { runQwenServe } = await import("./run-qwen-serve-4B5QBMLQ.js");
261
261
  try {
262
262
  const handle = await runQwenServe({
263
263
  port: argv.port,
@@ -0,0 +1,73 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ themeManager
5
+ } from "./chunk-I4H7PRWQ.js";
6
+ import {
7
+ init_esbuild_shims
8
+ } from "./chunk-A4BMJM77.js";
9
+
10
+ // packages/cli/src/ui/colors.ts
11
+ init_esbuild_shims();
12
+ var Colors = {
13
+ get type() {
14
+ return themeManager.getActiveTheme().colors.type;
15
+ },
16
+ get Foreground() {
17
+ return themeManager.getActiveTheme().colors.Foreground;
18
+ },
19
+ get Background() {
20
+ return themeManager.getActiveTheme().colors.Background;
21
+ },
22
+ get LightBlue() {
23
+ return themeManager.getActiveTheme().colors.LightBlue;
24
+ },
25
+ get AccentBlue() {
26
+ return themeManager.getActiveTheme().colors.AccentBlue;
27
+ },
28
+ get AccentPurple() {
29
+ return themeManager.getActiveTheme().colors.AccentPurple;
30
+ },
31
+ get AccentCyan() {
32
+ return themeManager.getActiveTheme().colors.AccentCyan;
33
+ },
34
+ get AccentGreen() {
35
+ return themeManager.getActiveTheme().colors.AccentGreen;
36
+ },
37
+ get AccentYellow() {
38
+ return themeManager.getActiveTheme().colors.AccentYellow;
39
+ },
40
+ get AccentRed() {
41
+ return themeManager.getActiveTheme().colors.AccentRed;
42
+ },
43
+ get AccentYellowDim() {
44
+ return themeManager.getActiveTheme().colors.AccentYellowDim;
45
+ },
46
+ get AccentRedDim() {
47
+ return themeManager.getActiveTheme().colors.AccentRedDim;
48
+ },
49
+ get DiffAdded() {
50
+ return themeManager.getActiveTheme().colors.DiffAdded;
51
+ },
52
+ get DiffRemoved() {
53
+ return themeManager.getActiveTheme().colors.DiffRemoved;
54
+ },
55
+ get Comment() {
56
+ return themeManager.getActiveTheme().colors.Comment;
57
+ },
58
+ get Gray() {
59
+ return themeManager.getActiveTheme().colors.Gray;
60
+ },
61
+ get GradientColors() {
62
+ return themeManager.getActiveTheme().colors.GradientColors;
63
+ }
64
+ };
65
+
66
+ export {
67
+ Colors
68
+ };
69
+ /**
70
+ * @license
71
+ * Copyright 2025 Google LLC
72
+ * SPDX-License-Identifier: Apache-2.0
73
+ */
@@ -1,5 +1,22 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ buildPermissionSettings
5
+ } from "./chunk-WN6K47NR.js";
6
+ import {
7
+ resolveVoiceStreamConfig,
8
+ resolveVoiceTranscriptionConfig,
9
+ transcribeVoiceAudio
10
+ } from "./chunk-HFQ2XSE7.js";
11
+ import {
12
+ getVoiceSettingsScope,
13
+ isSelectableVoiceModel,
14
+ isVoiceEnabled,
15
+ readVoiceLanguage,
16
+ readVoiceMode,
17
+ readVoiceModel,
18
+ resolveVoiceTransport
19
+ } from "./chunk-5XQ4A26L.js";
3
20
  import {
4
21
  MCP_RESTART_SERVER_DEADLINE_MS
5
22
  } from "./chunk-P7M4GA57.js";
@@ -11,10 +28,7 @@ import {
11
28
  WorkspaceInitPathEscapeError,
12
29
  WorkspaceInitRaceError,
13
30
  WorkspaceInitSymlinkError
14
- } from "./chunk-S566HKUS.js";
15
- import {
16
- writeStderrLine
17
- } from "./chunk-Y6Z2O3WR.js";
31
+ } from "./chunk-DHXWNSJA.js";
18
32
  import {
19
33
  SERVE_CONTROL_EXT_METHODS,
20
34
  SERVE_STATUS_EXT_METHODS,
@@ -27,7 +41,27 @@ import {
27
41
  createIdleWorkspaceProvidersStatus,
28
42
  createIdleWorkspaceSkillsStatus,
29
43
  mapDomainErrorToErrorKind
30
- } from "./chunk-D5E5TMYH.js";
44
+ } from "./chunk-3M4W4U5G.js";
45
+ import {
46
+ WorkspacePermissionRulesSessionRequiredError,
47
+ WorkspaceSettingsPartialPersistError
48
+ } from "./chunk-BMFMJINR.js";
49
+ import {
50
+ getPersistScopeForModelSelection,
51
+ loadSettings
52
+ } from "./chunk-HEVBZSXG.js";
53
+ import {
54
+ getWorkspaceTrustStatus
55
+ } from "./chunk-ARYCHZ4B.js";
56
+ import {
57
+ writeStderrLine
58
+ } from "./chunk-Y6Z2O3WR.js";
59
+ import {
60
+ ModelsConfig
61
+ } from "./chunk-RIP623NO.js";
62
+ import {
63
+ createDebugLogger
64
+ } from "./chunk-UX4SGCGN.js";
31
65
  import {
32
66
  init_esbuild_shims
33
67
  } from "./chunk-A4BMJM77.js";
@@ -39,6 +73,231 @@ import {
39
73
  init_esbuild_shims();
40
74
  import { promises as fs, constants as fsConstants } from "node:fs";
41
75
  import * as path from "node:path";
76
+
77
+ // packages/cli/src/services/voice-service.ts
78
+ init_esbuild_shims();
79
+ var debugLogger = createDebugLogger("VOICE_SERVICE");
80
+ var EMPTY_WORKSPACE_VOICE_UPDATE_ERROR = "At least one of `enabled`, `mode`, `language`, or `voiceModel` must be provided";
81
+ var WorkspaceVoiceError = class extends Error {
82
+ static {
83
+ __name(this, "WorkspaceVoiceError");
84
+ }
85
+ status;
86
+ code;
87
+ constructor(status, code, message) {
88
+ super(message);
89
+ this.name = "WorkspaceVoiceError";
90
+ this.status = status;
91
+ this.code = code;
92
+ }
93
+ };
94
+ function voiceSettingsScopeToWire(scope) {
95
+ return scope === "Workspace" /* Workspace */ ? "workspace" : "user";
96
+ }
97
+ __name(voiceSettingsScopeToWire, "voiceSettingsScopeToWire");
98
+ function buildWorkspaceVoiceSettingsWrites(settings, update, opts = {}) {
99
+ const voiceSettingsScope = getVoiceSettingsScope(
100
+ settings,
101
+ opts.workspaceTrusted
102
+ );
103
+ const writes = [];
104
+ if (update.voiceModel !== void 0) {
105
+ writes.push({
106
+ scope: getPersistScopeForModelSelection(settings),
107
+ key: "voiceModel",
108
+ value: update.voiceModel
109
+ });
110
+ }
111
+ if (update.mode !== void 0) {
112
+ writes.push({
113
+ scope: voiceSettingsScope,
114
+ key: "general.voice.mode",
115
+ value: update.mode
116
+ });
117
+ }
118
+ if (update.language !== void 0) {
119
+ writes.push({
120
+ scope: voiceSettingsScope,
121
+ key: "general.voice.language",
122
+ value: update.language
123
+ });
124
+ }
125
+ if (update.enabled !== void 0) {
126
+ writes.push({
127
+ scope: voiceSettingsScope,
128
+ key: "general.voice.enabled",
129
+ value: update.enabled
130
+ });
131
+ }
132
+ return writes;
133
+ }
134
+ __name(buildWorkspaceVoiceSettingsWrites, "buildWorkspaceVoiceSettingsWrites");
135
+ function createVoiceModelSource(settings) {
136
+ return new ModelsConfig({
137
+ modelProvidersConfig: settings.merged.modelProviders
138
+ });
139
+ }
140
+ __name(createVoiceModelSource, "createVoiceModelSource");
141
+ function listAvailableVoiceModels(settings) {
142
+ const models = createVoiceModelSource(settings).getAllConfiguredModels();
143
+ const idCounts = /* @__PURE__ */ new Map();
144
+ for (const model of models) {
145
+ idCounts.set(model.id, (idCounts.get(model.id) ?? 0) + 1);
146
+ }
147
+ const duplicateIds = [...idCounts.entries()].filter(([, count]) => count > 1).map(([id]) => id);
148
+ if (duplicateIds.length > 0) {
149
+ debugLogger.debug(
150
+ `Skipping duplicate voice model ids: ${duplicateIds.join(", ")}`
151
+ );
152
+ }
153
+ return models.filter((model) => (idCounts.get(model.id) ?? 0) === 1).filter(isSelectableVoiceModel).map((model) => ({
154
+ id: model.id,
155
+ transport: resolveVoiceTransport(model.id)
156
+ })).filter(
157
+ (model) => model.transport !== "unsupported"
158
+ );
159
+ }
160
+ __name(listAvailableVoiceModels, "listAvailableVoiceModels");
161
+ function hasConfiguredBatchVoiceTranscriptionModel(settings) {
162
+ for (const model of listAvailableVoiceModels(settings)) {
163
+ if (model.transport !== "qwen-asr-chat") {
164
+ continue;
165
+ }
166
+ try {
167
+ validateWorkspaceVoiceConfig(settings, model.id);
168
+ return true;
169
+ } catch (err) {
170
+ debugLogger.debug(
171
+ `Skipping unavailable batch voice model '${model.id}': ${err instanceof Error ? err.message : String(err)}`
172
+ );
173
+ }
174
+ }
175
+ return false;
176
+ }
177
+ __name(hasConfiguredBatchVoiceTranscriptionModel, "hasConfiguredBatchVoiceTranscriptionModel");
178
+ function buildWorkspaceVoiceStatus(workspaceCwd, settings) {
179
+ return {
180
+ v: 1,
181
+ workspaceCwd,
182
+ enabled: isVoiceEnabled(settings),
183
+ mode: readVoiceMode(settings),
184
+ language: readVoiceLanguage(settings),
185
+ voiceModel: readVoiceModel(settings) ?? null,
186
+ availableVoiceModels: listAvailableVoiceModels(settings)
187
+ };
188
+ }
189
+ __name(buildWorkspaceVoiceStatus, "buildWorkspaceVoiceStatus");
190
+ function validateWorkspaceVoiceModel(settings, voiceModel) {
191
+ const models = createVoiceModelSource(settings).getAllConfiguredModels();
192
+ const matches = models.filter((model2) => model2.id === voiceModel);
193
+ if (matches.length === 0) {
194
+ throw new WorkspaceVoiceError(
195
+ 400,
196
+ "unknown_voice_model",
197
+ `Voice model '${voiceModel}' is not configured.`
198
+ );
199
+ }
200
+ if (matches.length > 1) {
201
+ throw new WorkspaceVoiceError(
202
+ 400,
203
+ "ambiguous_voice_model",
204
+ `Voice model '${voiceModel}' is ambiguous.`
205
+ );
206
+ }
207
+ const [model] = matches;
208
+ if (!model || !isSelectableVoiceModel(model)) {
209
+ throw new WorkspaceVoiceError(
210
+ 400,
211
+ "unsupported_voice_model",
212
+ `Voice model '${voiceModel}' cannot be used for transcription.`
213
+ );
214
+ }
215
+ const transport = resolveVoiceTransport(model.id);
216
+ if (transport === "unsupported") {
217
+ throw new WorkspaceVoiceError(
218
+ 400,
219
+ "unsupported_voice_model",
220
+ `Voice model '${voiceModel}' cannot be used for transcription.`
221
+ );
222
+ }
223
+ return { id: model.id, transport };
224
+ }
225
+ __name(validateWorkspaceVoiceModel, "validateWorkspaceVoiceModel");
226
+ function validateWorkspaceVoiceConfig(settings, voiceModel) {
227
+ const descriptor = validateWorkspaceVoiceModel(settings, voiceModel);
228
+ try {
229
+ const config = createVoiceModelSource(settings);
230
+ if (descriptor.transport === "qwen-asr-chat") {
231
+ resolveVoiceTranscriptionConfig({ config, settings, voiceModel });
232
+ } else {
233
+ resolveVoiceStreamConfig({ config, settings, voiceModel });
234
+ }
235
+ } catch (err) {
236
+ throw new WorkspaceVoiceError(
237
+ 400,
238
+ "invalid_voice_model",
239
+ err instanceof Error ? err.message : `Voice model '${voiceModel}' is not configured for transcription.`
240
+ );
241
+ }
242
+ return descriptor;
243
+ }
244
+ __name(validateWorkspaceVoiceConfig, "validateWorkspaceVoiceConfig");
245
+ function validateWorkspaceVoiceState(settings, update) {
246
+ if (update.enabled === void 0 && update.mode === void 0 && update.language === void 0 && update.voiceModel === void 0) {
247
+ throw new WorkspaceVoiceError(
248
+ 400,
249
+ "invalid_voice_update",
250
+ EMPTY_WORKSPACE_VOICE_UPDATE_ERROR
251
+ );
252
+ }
253
+ const nextEnabled = update.enabled ?? isVoiceEnabled(settings);
254
+ const nextVoiceModel = update.voiceModel ?? readVoiceModel(settings);
255
+ if (update.voiceModel) {
256
+ validateWorkspaceVoiceModel(settings, update.voiceModel);
257
+ }
258
+ if (!nextEnabled) {
259
+ return;
260
+ }
261
+ if (!nextVoiceModel) {
262
+ throw new WorkspaceVoiceError(
263
+ 400,
264
+ "voice_model_required",
265
+ "A valid voiceModel is required before enabling voice."
266
+ );
267
+ }
268
+ validateWorkspaceVoiceConfig(settings, nextVoiceModel);
269
+ }
270
+ __name(validateWorkspaceVoiceState, "validateWorkspaceVoiceState");
271
+ async function transcribeWorkspaceVoiceAudio(input) {
272
+ const descriptor = validateWorkspaceVoiceModel(
273
+ input.settings,
274
+ input.voiceModel
275
+ );
276
+ if (descriptor.transport !== "qwen-asr-chat") {
277
+ throw new WorkspaceVoiceError(
278
+ 400,
279
+ "unsupported_voice_model",
280
+ `Voice model '${input.voiceModel}' requires realtime transcription, which is not supported by this daemon endpoint.`
281
+ );
282
+ }
283
+ const text = await transcribeVoiceAudio(
284
+ { data: input.data, mimeType: input.mimeType },
285
+ {
286
+ config: createVoiceModelSource(input.settings),
287
+ settings: input.settings,
288
+ voiceModel: input.voiceModel,
289
+ abortSignal: input.abortSignal
290
+ }
291
+ );
292
+ return {
293
+ text,
294
+ model: input.voiceModel,
295
+ transport: descriptor.transport
296
+ };
297
+ }
298
+ __name(transcribeWorkspaceVoiceAudio, "transcribeWorkspaceVoiceAudio");
299
+
300
+ // packages/cli/src/serve/workspace-service/index.ts
42
301
  async function canonicalizeExistingAncestor(inputPath) {
43
302
  let current = inputPath;
44
303
  while (true) {
@@ -77,6 +336,8 @@ function createDaemonWorkspaceService(deps) {
77
336
  workspaceProvidersStatusProvider,
78
337
  isChannelLive,
79
338
  persistDisabledTools,
339
+ persistSetting,
340
+ persistSettings,
80
341
  queryWorkspaceStatus,
81
342
  invokeWorkspaceCommand,
82
343
  refreshExtensionsForAllSessions: refreshExtensionsForAllSessionsOnBridge,
@@ -185,7 +446,133 @@ function createDaemonWorkspaceService(deps) {
185
446
  () => createIdleWorkspaceExtensionsStatus(boundWorkspace)
186
447
  );
187
448
  },
449
+ async getWorkspaceTrustStatus(_ctx) {
450
+ return getWorkspaceTrustStatus(
451
+ loadSettings(boundWorkspace).merged,
452
+ boundWorkspace
453
+ );
454
+ },
455
+ async getWorkspacePermissionsStatus(_ctx) {
456
+ return buildPermissionSettings(loadSettings(boundWorkspace));
457
+ },
458
+ async getWorkspaceVoiceStatus(_ctx) {
459
+ return buildWorkspaceVoiceStatus(
460
+ boundWorkspace,
461
+ loadSettings(boundWorkspace)
462
+ );
463
+ },
188
464
  // -- Mutations --
465
+ async requestWorkspaceTrustChange(ctx, request) {
466
+ publishWorkspaceEvent({
467
+ type: "trust_change_requested",
468
+ data: {
469
+ workspaceCwd: boundWorkspace,
470
+ desiredState: request.desiredState,
471
+ ...request.reason !== void 0 ? { reason: request.reason } : {}
472
+ },
473
+ originatorClientId: ctx.originatorClientId
474
+ });
475
+ return {
476
+ accepted: false,
477
+ desiredState: request.desiredState,
478
+ requiresOperatorAction: true
479
+ };
480
+ },
481
+ async setWorkspacePermissionRules(ctx, request) {
482
+ const key = `permissions.${request.ruleType}`;
483
+ try {
484
+ const result = await invokeWorkspaceCommand(
485
+ "qwen/permissions/setRules",
486
+ {
487
+ cwd: boundWorkspace,
488
+ scope: request.scope,
489
+ ruleType: request.ruleType,
490
+ rules: request.rules
491
+ }
492
+ );
493
+ publishWorkspaceEvent({
494
+ type: "settings_changed",
495
+ data: { key, value: request.rules, scope: request.scope },
496
+ originatorClientId: ctx.originatorClientId
497
+ });
498
+ return result;
499
+ } catch (err) {
500
+ if (!(err instanceof SessionNotFoundError)) {
501
+ throw err;
502
+ }
503
+ throw new WorkspacePermissionRulesSessionRequiredError();
504
+ }
505
+ },
506
+ async setWorkspaceVoiceSettings(ctx, request) {
507
+ if (!persistSettings && !persistSetting) {
508
+ throw new WorkspaceVoiceError(
509
+ 501,
510
+ "not_implemented",
511
+ "Workspace voice settings persistence is not available"
512
+ );
513
+ }
514
+ const settings = loadSettings(boundWorkspace);
515
+ validateWorkspaceVoiceState(settings, request);
516
+ const workspaceTrusted = getWorkspaceTrustStatus(settings.merged, boundWorkspace).effective.state === "trusted";
517
+ const writes = buildWorkspaceVoiceSettingsWrites(settings, request, {
518
+ workspaceTrusted
519
+ });
520
+ const publishWrite = /* @__PURE__ */ __name((write) => {
521
+ publishWorkspaceEvent({
522
+ type: "settings_changed",
523
+ data: {
524
+ key: write.key,
525
+ value: write.value,
526
+ scope: voiceSettingsScopeToWire(write.scope)
527
+ },
528
+ originatorClientId: ctx.originatorClientId
529
+ });
530
+ }, "publishWrite");
531
+ if (persistSettings) {
532
+ try {
533
+ await persistSettings(boundWorkspace, writes);
534
+ } catch (err) {
535
+ if (err instanceof WorkspaceSettingsPartialPersistError) {
536
+ for (const write of err.committedWrites) {
537
+ publishWrite(write);
538
+ }
539
+ }
540
+ throw err;
541
+ }
542
+ for (const write of writes) {
543
+ publishWrite(write);
544
+ }
545
+ } else {
546
+ const committed = [];
547
+ for (const write of writes) {
548
+ try {
549
+ await persistSetting(
550
+ boundWorkspace,
551
+ write.scope,
552
+ write.key,
553
+ write.value
554
+ );
555
+ } catch (err) {
556
+ writeStderrLine(
557
+ `qwen serve: workspace voice partial persist error (workspace=${boundWorkspace}, committed=${committed.length}/${writes.length}, failedKey=${write.key}, failedScope=${voiceSettingsScopeToWire(write.scope)}): ${err instanceof Error ? err.message : String(err)}`
558
+ );
559
+ throw new WorkspaceSettingsPartialPersistError(
560
+ `Voice settings partial persist failed: committed=${committed.length}/${writes.length}`,
561
+ committed,
562
+ err
563
+ );
564
+ }
565
+ committed.push(write);
566
+ }
567
+ for (const write of committed) {
568
+ publishWrite(write);
569
+ }
570
+ }
571
+ return buildWorkspaceVoiceStatus(
572
+ boundWorkspace,
573
+ loadSettings(boundWorkspace)
574
+ );
575
+ },
189
576
  async setWorkspaceToolEnabled(ctx, toolName, enabled) {
190
577
  await persistDisabledTools(boundWorkspace, toolName, enabled);
191
578
  publishWorkspaceEvent({
@@ -477,8 +864,21 @@ function createDaemonWorkspaceService(deps) {
477
864
  __name(createDaemonWorkspaceService, "createDaemonWorkspaceService");
478
865
 
479
866
  export {
867
+ EMPTY_WORKSPACE_VOICE_UPDATE_ERROR,
868
+ WorkspaceVoiceError,
869
+ voiceSettingsScopeToWire,
870
+ buildWorkspaceVoiceSettingsWrites,
871
+ hasConfiguredBatchVoiceTranscriptionModel,
872
+ buildWorkspaceVoiceStatus,
873
+ validateWorkspaceVoiceState,
874
+ transcribeWorkspaceVoiceAudio,
480
875
  createDaemonWorkspaceService
481
876
  };
877
+ /**
878
+ * @license
879
+ * Copyright 2025 Qwen
880
+ * SPDX-License-Identifier: Apache-2.0
881
+ */
482
882
  /**
483
883
  * @license
484
884
  * Copyright 2025 Qwen Team