@qwen-code/qwen-code 0.19.9 → 0.19.10

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 (310) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +7 -0
  2. package/bundled/qc-helper/docs/features/channels/dingtalk.md +3 -0
  3. package/bundled/qc-helper/docs/features/channels/overview.md +11 -3
  4. package/bundled/qc-helper/docs/features/code-review.md +88 -44
  5. package/bundled/qc-helper/docs/features/commands.md +6 -6
  6. package/bundled/qc-helper/docs/features/hooks.md +29 -0
  7. package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
  8. package/bundled/qc-helper/docs/qwen-serve.md +46 -20
  9. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  10. package/bundled/review/DESIGN.md +219 -33
  11. package/bundled/review/SKILL.md +449 -153
  12. package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-67ODZ4SZ.js} +31 -31
  13. package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-SIPBQT5Z.js} +51 -49
  14. package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-VPZJXLFX.js} +528 -478
  15. package/chunks/{agent-HOLHB3RT.js → agent-Z7NWL6XL.js} +26 -26
  16. package/chunks/{agent-headless-SXL6H56A.js → agent-headless-73HZ6ROQ.js} +26 -26
  17. package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-56U3YCP2.js} +5 -5
  18. package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-BWZZJ42H.js} +2 -2
  19. package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-WU3S5A5T.js} +2 -2
  20. package/chunks/{bridge-BCJQ7BBB.js → bridge-XFKW6S7Q.js} +32 -32
  21. package/chunks/{ca-UJ6HC4H2.js → ca-C2JTT2N5.js} +4 -1
  22. package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
  23. package/chunks/channel-worker-manager-5RWKSGEU.js +418 -0
  24. package/chunks/channel-worker-supervisor-PCDAZN4D.js +20 -0
  25. package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
  26. package/chunks/{chunk-B5ORX3FG.js → chunk-2UUAIFQO.js} +1 -1
  27. package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
  28. package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
  29. package/chunks/chunk-3MX7D6QN.js +516 -0
  30. package/chunks/{chunk-E2IY465S.js → chunk-3XJFUTNM.js} +10 -10
  31. package/chunks/{chunk-JZETEN3Z.js → chunk-422XAKCK.js} +3 -3
  32. package/chunks/{chunk-N3EMS75V.js → chunk-4FMG7EDJ.js} +1268 -1233
  33. package/chunks/{chunk-HKMAENAO.js → chunk-4YWLED2A.js} +8 -6
  34. package/chunks/{chunk-SCGXUJBT.js → chunk-5EBKKSBX.js} +3 -3
  35. package/chunks/chunk-5HBA2Z7V.js +28 -0
  36. package/chunks/{chunk-XYQSMABS.js → chunk-5LROA5W4.js} +4 -4
  37. package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
  38. package/chunks/{chunk-VA4KQY6V.js → chunk-65N2J6V2.js} +3 -3
  39. package/chunks/{chunk-4C5BQ2D2.js → chunk-6GETGQWP.js} +71 -12
  40. package/chunks/{chunk-PVZM22CK.js → chunk-6GKMJPOC.js} +5 -5
  41. package/chunks/{chunk-W2UIXQDL.js → chunk-6OATMEYN.js} +1 -1
  42. package/chunks/{chunk-GZRTYZ2R.js → chunk-6W6DI34P.js} +154 -1
  43. package/chunks/{chunk-EMDMPBJ4.js → chunk-7L4XBYVW.js} +3 -3
  44. package/chunks/{chunk-EAXLGSFP.js → chunk-7MJAZMXK.js} +8 -8
  45. package/chunks/{chunk-K434OPES.js → chunk-7NAWTFVY.js} +3 -3
  46. package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
  47. package/chunks/{chunk-5SFOMFG4.js → chunk-7R4DPSRA.js} +36 -2
  48. package/chunks/{chunk-P67PFTUT.js → chunk-AAR5SGMD.js} +4 -4
  49. package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
  50. package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
  51. package/chunks/{chunk-D2GFWEXB.js → chunk-B5I2IIWY.js} +6 -6
  52. package/chunks/{chunk-524RQP4Q.js → chunk-B7NUUEXC.js} +10 -4
  53. package/chunks/{chunk-CUMMSHH6.js → chunk-BBNVFRGD.js} +1 -1
  54. package/chunks/{chunk-5HOMWMCL.js → chunk-CEW4HDPK.js} +4166 -1338
  55. package/chunks/chunk-CJFNEBYB.js +91 -0
  56. package/chunks/{chunk-VWPVHAMO.js → chunk-CUUXANEQ.js} +5 -1
  57. package/chunks/{chunk-GWLSNBG4.js → chunk-DK33QJ3V.js} +30 -26
  58. package/chunks/{chunk-HPDUL5MF.js → chunk-DPFBNG72.js} +1 -1
  59. package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
  60. package/chunks/{chunk-MC23XKFE.js → chunk-E67NFMF4.js} +3 -3
  61. package/chunks/{chunk-OQ4DRIOA.js → chunk-EQY6POVO.js} +2 -2
  62. package/chunks/{chunk-XUOOWUZS.js → chunk-F7NXQH4Y.js} +1 -1
  63. package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
  64. package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
  65. package/chunks/{chunk-PDZ7MBDG.js → chunk-FXMC7SL2.js} +27 -6
  66. package/chunks/{chunk-SJHDYNHF.js → chunk-GDQQRV43.js} +3 -3
  67. package/chunks/{chunk-34MW4KTI.js → chunk-GGJII3FM.js} +2 -2
  68. package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
  69. package/chunks/chunk-GYTKQYDB.js +23 -0
  70. package/chunks/{chunk-HVY356M2.js → chunk-H3FQOPPS.js} +3 -3
  71. package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
  72. package/chunks/{chunk-WQUQVGTF.js → chunk-HHEFI4RP.js} +183 -96
  73. package/chunks/chunk-IDS7MSUP.js +74 -0
  74. package/chunks/{chunk-6PESIEKJ.js → chunk-JSJFKYWT.js} +68 -6
  75. package/chunks/{chunk-CNEIYWSA.js → chunk-K4PZ5F5T.js} +5 -5
  76. package/chunks/{chunk-NVYTCB5Z.js → chunk-K7CRWKOE.js} +14534 -13980
  77. package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
  78. package/chunks/{chunk-IAVB3HM3.js → chunk-KSO42X3Z.js} +13 -0
  79. package/chunks/chunk-L37RC7MQ.js +493 -0
  80. package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
  81. package/chunks/{chunk-3G7CIHVV.js → chunk-L62SEJWY.js} +4 -4
  82. package/chunks/{chunk-EGYZ275M.js → chunk-LNUXFLLJ.js} +4 -4
  83. package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
  84. package/chunks/{chunk-VTU57BWZ.js → chunk-LQU7EVFA.js} +1 -1
  85. package/chunks/{chunk-B4G2WOFA.js → chunk-LTNI523B.js} +2 -2
  86. package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
  87. package/chunks/{chunk-KHUQZZJ6.js → chunk-MO7O5722.js} +370 -36
  88. package/chunks/chunk-MR3PXB6E.js +48 -0
  89. package/chunks/{chunk-5VXNZWGF.js → chunk-N6FXRR6P.js} +1 -1
  90. package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
  91. package/chunks/{chunk-TO6QE22P.js → chunk-OATTJGPJ.js} +26 -22
  92. package/chunks/{chunk-X6TJ3YZV.js → chunk-OFEVHGVU.js} +159 -57
  93. package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
  94. package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
  95. package/chunks/{chunk-3VAGG5T5.js → chunk-P6LART6G.js} +116 -15
  96. package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
  97. package/chunks/{chunk-BAPGSC7U.js → chunk-Q5GLXH5Q.js} +23 -9
  98. package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
  99. package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
  100. package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
  101. package/chunks/{chunk-YAUFFXDS.js → chunk-RDRVMDWV.js} +12 -11
  102. package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
  103. package/chunks/{chunk-U2NNEY4R.js → chunk-SPUYQB4T.js} +1 -1
  104. package/chunks/{chunk-34Z3U5RQ.js → chunk-SXU3KKNI.js} +514 -114
  105. package/chunks/{chunk-ECNYL4AA.js → chunk-TISZXPAX.js} +1 -1
  106. package/chunks/{chunk-JSG7ZSBC.js → chunk-TQBODCFD.js} +1 -1
  107. package/chunks/{chunk-AKIVHSJR.js → chunk-TTUO4DNG.js} +111 -93
  108. package/chunks/chunk-TV6K2FB4.js +224 -0
  109. package/chunks/{chunk-4GORAUCN.js → chunk-TXY2C3D2.js} +1 -1
  110. package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
  111. package/chunks/{chunk-CLFKOZEK.js → chunk-UFOKA4PR.js} +1 -1
  112. package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-URU5UEK6.js} +67 -35
  113. package/chunks/{chunk-D5SKC4YG.js → chunk-V7EQTZYR.js} +41 -13
  114. package/chunks/{chunk-L6P4KPHR.js → chunk-VBRRNQB7.js} +59 -39
  115. package/chunks/{chunk-BMGVRZN4.js → chunk-W34A5MJH.js} +1 -1
  116. package/chunks/{chunk-PODM4SZ4.js → chunk-WDW64OW3.js} +5 -5
  117. package/chunks/{chunk-W3JHSWRP.js → chunk-WDWJ4OQJ.js} +4 -4
  118. package/chunks/{chunk-Q4YQW46J.js → chunk-WIASPMLX.js} +31 -17
  119. package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
  120. package/chunks/{chunk-A3XKDTSH.js → chunk-WLXYAKV7.js} +4 -4
  121. package/chunks/{chunk-Q6I5QHMH.js → chunk-WTSXKLG5.js} +1 -1
  122. package/chunks/{chunk-J3JA76CF.js → chunk-WX6SD4IQ.js} +1 -1
  123. package/chunks/{chunk-77XJ3SWN.js → chunk-X362TMXZ.js} +5 -5
  124. package/chunks/{chunk-CCDMCZPP.js → chunk-XLIRF7IK.js} +1 -1
  125. package/chunks/{chunk-AURZZYMD.js → chunk-XXJKGHZV.js} +4 -4
  126. package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
  127. package/chunks/{chunk-CC2ITGCF.js → chunk-YHN5SUIJ.js} +49 -6
  128. package/chunks/{chunk-3AHXV67U.js → chunk-YU56QGXX.js} +1 -1
  129. package/chunks/{chunk-5U27BZ72.js → chunk-YX4LLZ3D.js} +187 -75
  130. package/chunks/{chunk-ATAKVRIF.js → chunk-YYPXHMWO.js} +7 -7
  131. package/chunks/{chunk-XLA62MYB.js → chunk-ZKMGAFYV.js} +2 -2
  132. package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
  133. package/chunks/{chunk-7PU4FYLG.js → chunk-ZQTZXVHP.js} +4 -4
  134. package/chunks/chunk-ZRKBI3DP.js +34 -0
  135. package/chunks/{computer-use-HM37RX6A.js → computer-use-IYTX45WA.js} +26 -26
  136. package/chunks/{config-utils-NV2SVGPB.js → config-utils-CFT33LTP.js} +3 -2
  137. package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-272V77WU.js} +28 -28
  138. package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-CBJMQLYP.js} +26 -26
  139. package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-WNX2OQVX.js} +2 -2
  140. package/chunks/{cron-create-AMBKGZX6.js → cron-create-36TIFKRT.js} +4 -4
  141. package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-OQD3WULU.js} +4 -4
  142. package/chunks/{cron-list-WVP2JXER.js → cron-list-4533T2FH.js} +4 -4
  143. package/chunks/{daemon-ARHTSTXP.js → daemon-RNGFPMAB.js} +575 -58
  144. package/chunks/{daemon-status-provider-B2UTZUJ2.js → daemon-status-provider-L4STG5VO.js} +36 -36
  145. package/chunks/{de-EBJN3OVN.js → de-2VCDRDGU.js} +4 -1
  146. package/chunks/{dist-VHV4EVHG.js → dist-3V3ZV6ML.js} +1 -1
  147. package/chunks/{dist-XKU3ABM5.js → dist-ERCPDVA6.js} +1 -1
  148. package/chunks/{dist-PNVLTKTL.js → dist-HNN7DR2L.js} +158 -4
  149. package/chunks/{dist-WKPOYU7O.js → dist-JZE7F6YR.js} +1 -1
  150. package/chunks/{dist-QYCAEZIT.js → dist-MOEC47TR.js} +5 -1
  151. package/chunks/{dist-R7LN5AZE.js → dist-PHEPJLXD.js} +2 -2
  152. package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-EN4BRREQ.js} +27 -27
  153. package/chunks/{edit-VNI4NJ73.js → edit-OMAF2QDR.js} +27 -27
  154. package/chunks/{en-5A6LA7RK.js → en-NJCA3TAA.js} +5 -1
  155. package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-BBZX52HG.js} +26 -26
  156. package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-5NNFMBUY.js} +42 -27
  157. package/chunks/{environment-5HSSRMJ7.js → environment-7TEWMJYN.js} +30 -29
  158. package/chunks/{errors-HMFCJJ7P.js → errors-I4VKVX3F.js} +28 -28
  159. package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-FUWRJI33.js} +26 -26
  160. package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-IHCJ5EEI.js} +26 -26
  161. package/chunks/{fast-path-FRDMDVHG.js → fast-path-ZA57TOH4.js} +3 -3
  162. package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
  163. package/chunks/{fr-YXRABLYZ.js → fr-5F3E7WKD.js} +4 -1
  164. package/chunks/{gemini-QYSEGHAX.js → gemini-UOAKVXBG.js} +139 -76
  165. package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-G6UCE6MW.js} +4 -4
  166. package/chunks/{glob-BRCSGFOT.js → glob-4GJQ2UFF.js} +28 -27
  167. package/chunks/{grep-EE2DUOSY.js → grep-5QSYXF2E.js} +26 -26
  168. package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-ULHNWL6R.js} +30 -30
  169. package/chunks/{i18n-BASPENNQ.js → i18n-CYDUTF6F.js} +27 -27
  170. package/chunks/initializer-NRFKUGIO.js +73 -0
  171. package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-WELKRHHE.js} +27 -27
  172. package/chunks/{ja-7VQOANVG.js → ja-66J6B53L.js} +5 -2
  173. package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
  174. package/chunks/list-JVDXEG2E.js +76 -0
  175. package/chunks/loadedSettingsAdapter-WAM4VUTG.js +70 -0
  176. package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-MVUKDVCP.js} +5 -5
  177. package/chunks/{ls-ZB2BDP6T.js → ls-RXNIAQDE.js} +4 -4
  178. package/chunks/{lsp-V5DN4YUJ.js → lsp-HB5LM5IL.js} +2 -2
  179. package/chunks/mcp-YHOZN3ZM.js +70 -0
  180. package/chunks/{monitor-X5Z3H4FY.js → monitor-R7XZPJHQ.js} +26 -26
  181. package/chunks/nonInteractiveCli-NSOB6D74.js +129 -0
  182. package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-6RNKE2L2.js} +27 -27
  183. package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-XNS5S64I.js} +12 -12
  184. package/chunks/{pidfile-D4I4FTVA.js → pidfile-XE4RRR2P.js} +27 -27
  185. package/chunks/{pt-2C6YCSHL.js → pt-TFZO5Y6T.js} +4 -1
  186. package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-APDPJ3VN.js} +28 -28
  187. package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
  188. package/chunks/{read-file-7SZSIZOL.js → read-file-XSUWXSR7.js} +8 -8
  189. package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-6LRTZKXI.js} +2 -2
  190. package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-PMDTY4OS.js} +2 -2
  191. package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-APB3CDMU.js} +26 -26
  192. package/chunks/{ru-6BBHVZZV.js → ru-4L4LFHIT.js} +4 -1
  193. package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-NWTGPERT.js} +1232 -371
  194. package/chunks/{runtime-57WWRVHN.js → runtime-EIO3NQKR.js} +42 -37
  195. package/chunks/{scheduler-YBLGWSIL.js → scheduler-JJDZBDRN.js} +26 -26
  196. package/chunks/{send-message-F36YD6KQ.js → send-message-SR4WSXP2.js} +3 -3
  197. package/chunks/{serve-R63NK3CV.js → serve-WTIPB3EI.js} +36 -34
  198. package/chunks/{server-Z22GCAXP.js → server-NJPHQHLH.js} +5238 -1328
  199. package/chunks/{session-HKAAI7BN.js → session-O4AO7FTS.js} +298 -98
  200. package/chunks/{settings-3EYN66GK.js → settings-HQNDK7TG.js} +34 -32
  201. package/chunks/{shell-6YXINTWJ.js → shell-UIXM6PWG.js} +26 -26
  202. package/chunks/{skill-OO57P4X6.js → skill-3XMB4ULV.js} +10 -10
  203. package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-3R632QRM.js} +28 -28
  204. package/chunks/{src-G5UPLZSZ.js → src-USZKPUOC.js} +85 -27
  205. package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-L5XW3D7K.js} +28 -28
  206. package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-CPZOL2WB.js} +730 -397
  207. package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-YKFNUQZD.js} +3 -3
  208. package/chunks/{task-create-FRGOEIKY.js → task-create-NUFOHU53.js} +8 -7
  209. package/chunks/{task-list-OW766BXZ.js → task-list-Z2IKQY3S.js} +6 -5
  210. package/chunks/{task-stop-SIR5SNBN.js → task-stop-KQFIVQTJ.js} +2 -2
  211. package/chunks/{task-update-YRA532MT.js → task-update-HKADXSTD.js} +8 -7
  212. package/chunks/{team-create-PECAAPXK.js → team-create-XXPRF3IQ.js} +26 -26
  213. package/chunks/{team-delete-6OSECUZC.js → team-delete-SDNTGZLG.js} +6 -5
  214. package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-EOTTKHDW.js} +26 -26
  215. package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-P6UITO2L.js} +27 -27
  216. package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-YNXB27GB.js} +4 -4
  217. package/chunks/{tool-search-THVIWAPB.js → tool-search-DDNGK2LR.js} +9 -9
  218. package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-PL5N7DNY.js} +33 -33
  219. package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
  220. package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-C5LMF3UR.js} +29 -28
  221. package/chunks/types-ML3TRJQ5.js +16 -0
  222. package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-QTVVISH7.js} +29 -29
  223. package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-RY4RKBQG.js} +75 -71
  224. package/chunks/{version-3UEA6ZIR.js → version-U45RYOSD.js} +1 -1
  225. package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-ZSPR3PRR.js} +5 -5
  226. package/chunks/{workflow-QCCCMYP3.js → workflow-TCIAQYOA.js} +27 -27
  227. package/chunks/workspace-providers-status-I3G2HYLY.js +73 -0
  228. package/chunks/workspace-registration-store-IH5GLZ6Y.js +27 -0
  229. package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-QEKBELIX.js} +33 -33
  230. package/chunks/workspace-service-ORKHGLP3.js +86 -0
  231. package/chunks/workspace-skills-status-D7QCNDYY.js +72 -0
  232. package/chunks/{write-file-I3MUDRIE.js → write-file-JGRQR5VM.js} +27 -27
  233. package/chunks/{zh-RQE7I22T.js → zh-FSAH32JB.js} +6 -2
  234. package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-D2YIE2LO.js} +6 -2
  235. package/cli.js +11 -11
  236. package/locales/ca.js +6 -0
  237. package/locales/de.js +6 -0
  238. package/locales/en.js +8 -0
  239. package/locales/fr.js +6 -0
  240. package/locales/ja.js +7 -1
  241. package/locales/pt.js +6 -0
  242. package/locales/ru.js +6 -0
  243. package/locales/zh-TW.js +9 -1
  244. package/locales/zh.js +9 -1
  245. package/package.json +3 -3
  246. package/web-shell/assets/{arc-C15hqnJe.js → arc-CUeDlxvE.js} +1 -1
  247. package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-PiUszkQA.js} +1 -1
  248. package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-s2wYSO7e.js} +1 -1
  249. package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-DyLxZoz9.js} +1 -1
  250. package/web-shell/assets/channel-DkuJJ0qd.js +1 -0
  251. package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-Dsdai7Tk.js} +1 -1
  252. package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-DEosOjV7.js} +1 -1
  253. package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-sNsRLTXf.js} +1 -1
  254. package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-DkRNZzmh.js} +1 -1
  255. package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-BrsRNpzd.js} +1 -1
  256. package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-CI039lpl.js} +1 -1
  257. package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-M-pkeIfu.js} +1 -1
  258. package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-C4ckGNbH.js} +1 -1
  259. package/web-shell/assets/classDiagram-4FO5ZUOK-CwqHc0TB.js +1 -0
  260. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwqHc0TB.js +1 -0
  261. package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-BciKUAFq.js} +1 -1
  262. package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-C1nTSgU6.js} +1 -1
  263. package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-BDPNWr1m.js} +1 -1
  264. package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-CNFhTszL.js} +1 -1
  265. package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-CjPa4p5a.js} +1 -1
  266. package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-ZzPykSyG.js} +1 -1
  267. package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-0UVtZ9A4.js} +1 -1
  268. package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-CajDZCat.js} +1 -1
  269. package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-BRuFBIvL.js} +1 -1
  270. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-BevGmJqG.js} +3 -3
  271. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-DvPMpBMb.js} +1 -1
  272. package/web-shell/assets/index-Cnvv4VcI.css +5 -0
  273. package/web-shell/assets/index-D1Uyklxa.js +1088 -0
  274. package/web-shell/assets/index-DzHwQkQq.js +3 -0
  275. package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-Oixn7tA9.js} +1 -1
  276. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-BgKpeg-j.js} +1 -1
  277. package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-74mwxIaA.js} +1 -1
  278. package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-D4D6cEqA.js} +1 -1
  279. package/web-shell/assets/{linear-C8wKCbIC.js → linear-atZRE_L2.js} +1 -1
  280. package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-KKudX-JC.js} +5 -5
  281. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-CMCej9yG.js} +1 -1
  282. package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-nhx40X7q.js} +1 -1
  283. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-CUmVcN3M.js} +1 -1
  284. package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-C_vyEwyy.js} +1 -1
  285. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-DU6G4VWR.js} +1 -1
  286. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-DdeRR_KJ.js} +1 -1
  287. package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-C6iCI8ps.js} +1 -1
  288. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C0_6nR6C.js +1 -0
  289. package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-B_Ea8Cb7.js} +1 -1
  290. package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-BPUVZEJA.js} +1 -1
  291. package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-BWEj0lKY.js} +1 -1
  292. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BvDsdIQw.js} +1 -1
  293. package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-crz0QhF_.js} +1 -1
  294. package/web-shell/index.html +2 -2
  295. package/chunks/chunk-CU3L64TP.js +0 -93
  296. package/chunks/initializer-UTQ7FB7G.js +0 -71
  297. package/chunks/list-DEICDL65.js +0 -74
  298. package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +0 -68
  299. package/chunks/mcp-L5JXEEIA.js +0 -68
  300. package/chunks/nonInteractiveCli-LS2K4X6A.js +0 -124
  301. package/chunks/types-JNKGKUJT.js +0 -12
  302. package/chunks/workspace-providers-status-4KMGETOJ.js +0 -71
  303. package/chunks/workspace-service-RVLBMSMZ.js +0 -80
  304. package/chunks/workspace-skills-status-DS4ZVFTO.js +0 -70
  305. package/web-shell/assets/channel-CLiQD50f.js +0 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +0 -1
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +0 -1
  308. package/web-shell/assets/index-D5IWFVk1.css +0 -5
  309. package/web-shell/assets/index-KFJRDhX7.js +0 -783
  310. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +0 -1
@@ -33,10 +33,36 @@ var WorkspacePermissionRulesSessionRequiredError = class extends Error {
33
33
  this.name = "WorkspacePermissionRulesSessionRequiredError";
34
34
  }
35
35
  };
36
+ var WorkspaceSkillNotFoundError = class extends Error {
37
+ constructor(skillName) {
38
+ super(`Skill not found: ${skillName}`);
39
+ this.skillName = skillName;
40
+ this.name = "WorkspaceSkillNotFoundError";
41
+ }
42
+ static {
43
+ __name(this, "WorkspaceSkillNotFoundError");
44
+ }
45
+ };
46
+ var WorkspaceSkillNotToggleableError = class extends Error {
47
+ constructor(skillName, reason, lockedScope) {
48
+ super(
49
+ lockedScope ? `Skill ${skillName} is locked by ${lockedScope} settings` : `Skill ${skillName} is not toggleable: ${reason}`
50
+ );
51
+ this.skillName = skillName;
52
+ this.reason = reason;
53
+ this.lockedScope = lockedScope;
54
+ this.name = "WorkspaceSkillNotToggleableError";
55
+ }
56
+ static {
57
+ __name(this, "WorkspaceSkillNotToggleableError");
58
+ }
59
+ };
36
60
 
37
61
  export {
38
62
  WorkspaceSettingsPartialPersistError,
39
- WorkspacePermissionRulesSessionRequiredError
63
+ WorkspacePermissionRulesSessionRequiredError,
64
+ WorkspaceSkillNotFoundError,
65
+ WorkspaceSkillNotToggleableError
40
66
  };
41
67
  /**
42
68
  * @license
@@ -1,8 +1,8 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
3
  import {
4
- resolvePath
5
- } from "./chunk-34Z3U5RQ.js";
4
+ resolveChannelCwd
5
+ } from "./chunk-ZRKBI3DP.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -21,12 +21,12 @@ function ensureBuiltins() {
21
21
  if (!builtinsPromise) {
22
22
  builtinsPromise = (async () => {
23
23
  const labelled = [
24
- { name: "telegram", promise: import("./dist-WKPOYU7O.js") },
25
- { name: "weixin", promise: import("./dist-R7LN5AZE.js") },
26
- { name: "dingtalk", promise: import("./dist-PNVLTKTL.js") },
27
- { name: "wecom", promise: import("./dist-XKU3ABM5.js") },
28
- { name: "feishu", promise: import("./dist-QYCAEZIT.js") },
29
- { name: "qqbot", promise: import("./dist-VHV4EVHG.js") }
24
+ { name: "telegram", promise: import("./dist-JZE7F6YR.js") },
25
+ { name: "weixin", promise: import("./dist-PHEPJLXD.js") },
26
+ { name: "dingtalk", promise: import("./dist-HNN7DR2L.js") },
27
+ { name: "wecom", promise: import("./dist-ERCPDVA6.js") },
28
+ { name: "feishu", promise: import("./dist-MOEC47TR.js") },
29
+ { name: "qqbot", promise: import("./dist-3V3ZV6ML.js") }
30
30
  ];
31
31
  const results = await Promise.allSettled(labelled.map((l) => l.promise));
32
32
  for (let i = 0; i < results.length; i++) {
@@ -74,13 +74,13 @@ var CHANNEL_APPROVAL_MODES = /* @__PURE__ */ new Set([
74
74
  "auto",
75
75
  "yolo"
76
76
  ]);
77
- function resolveEnvVars(value) {
77
+ function resolveEnvVars(value, env = process.env) {
78
78
  if (value.startsWith("$$")) {
79
79
  return value.substring(1);
80
80
  }
81
81
  if (value.startsWith("$")) {
82
82
  const envName = value.substring(1);
83
- const envValue = process.env[envName];
83
+ const envValue = env[envName];
84
84
  if (envValue === void 0) {
85
85
  throw new Error(
86
86
  `Environment variable ${envName} is not set (referenced as ${value})`
@@ -231,7 +231,7 @@ function parseWebhookTarget(channelName, path, raw) {
231
231
  return target;
232
232
  }
233
233
  __name(parseWebhookTarget, "parseWebhookTarget");
234
- function parseWebhookSource(channelName, path, raw) {
234
+ function parseWebhookSource(channelName, path, raw, env) {
235
235
  const record = requireObjectField(channelName, path, raw);
236
236
  const rawTargets = requireObjectField(
237
237
  channelName,
@@ -254,7 +254,8 @@ function parseWebhookSource(channelName, path, raw) {
254
254
  );
255
255
  }
256
256
  const secret = hasSecret ? resolveEnvVars(
257
- requireStringField(channelName, `${path}.secret`, record["secret"])
257
+ requireStringField(channelName, `${path}.secret`, record["secret"]),
258
+ env
258
259
  ) : resolveWebhookSecretEnv(
259
260
  channelName,
260
261
  path,
@@ -262,7 +263,8 @@ function parseWebhookSource(channelName, path, raw) {
262
263
  channelName,
263
264
  `${path}.secretEnv`,
264
265
  record["secretEnv"]
265
- )
266
+ ),
267
+ env
266
268
  );
267
269
  if (secret.length === 0) {
268
270
  throw new Error(
@@ -272,14 +274,14 @@ function parseWebhookSource(channelName, path, raw) {
272
274
  return { secret, targets };
273
275
  }
274
276
  __name(parseWebhookSource, "parseWebhookSource");
275
- function resolveWebhookSecretEnv(channelName, path, secretEnv) {
277
+ function resolveWebhookSecretEnv(channelName, path, secretEnv, env) {
276
278
  const envName = secretEnv.startsWith("$") ? secretEnv.substring(1) : secretEnv;
277
279
  if (!ENV_VAR_NAME_PATTERN.test(envName)) {
278
280
  throw new Error(
279
281
  `Channel "${channelName}" field "${path}.secretEnv" must be an environment variable name or $-prefixed reference.`
280
282
  );
281
283
  }
282
- const envValue = process.env[envName];
284
+ const envValue = env[envName];
283
285
  if (envValue === void 0) {
284
286
  throw new Error(
285
287
  `Channel "${channelName}" field "${path}.secretEnv" references an unset environment variable.`
@@ -293,7 +295,7 @@ function resolveWebhookSecretEnv(channelName, path, secretEnv) {
293
295
  return envValue;
294
296
  }
295
297
  __name(resolveWebhookSecretEnv, "resolveWebhookSecretEnv");
296
- function parseWebhookConfig(channelName, rawConfig) {
298
+ function parseWebhookConfig(channelName, rawConfig, env = process.env) {
297
299
  const raw = rawConfig["webhooks"];
298
300
  if (raw === void 0 || raw === null) {
299
301
  return void 0;
@@ -309,7 +311,8 @@ function parseWebhookConfig(channelName, rawConfig) {
309
311
  sources[source] = parseWebhookSource(
310
312
  channelName,
311
313
  `webhooks.sources.${source}`,
312
- sourceConfig
314
+ sourceConfig,
315
+ env
313
316
  );
314
317
  }
315
318
  return { sources };
@@ -330,11 +333,11 @@ function parseApprovalModeConfig(channelName, rawConfig) {
330
333
  return approvalMode;
331
334
  }
332
335
  __name(parseApprovalModeConfig, "parseApprovalModeConfig");
333
- function parseChannelWebhookConfig(channelName, rawConfig) {
334
- return parseWebhookConfig(channelName, rawConfig);
336
+ function parseChannelWebhookConfig(channelName, rawConfig, env = process.env) {
337
+ return parseWebhookConfig(channelName, rawConfig, env);
335
338
  }
336
339
  __name(parseChannelWebhookConfig, "parseChannelWebhookConfig");
337
- function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError) {
340
+ function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError, env = process.env) {
338
341
  const raw = rawConfig["webhooks"];
339
342
  if (raw === void 0 || raw === null) {
340
343
  return void 0;
@@ -351,7 +354,8 @@ function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError)
351
354
  sources[source] = parseWebhookSource(
352
355
  channelName,
353
356
  `webhooks.sources.${source}`,
354
- sourceConfig
357
+ sourceConfig,
358
+ env
355
359
  );
356
360
  } catch (error) {
357
361
  onSourceError?.(source, error);
@@ -416,7 +420,7 @@ async function parseChannelConfig(name, rawConfig, defaultCwd = process.cwd(), o
416
420
  senderPolicy: rawConfig["senderPolicy"] || "allowlist",
417
421
  allowedUsers: rawConfig["allowedUsers"] || [],
418
422
  sessionScope: rawConfig["sessionScope"] || "user",
419
- cwd: resolvePath(rawConfig["cwd"] || defaultCwd),
423
+ cwd: resolveChannelCwd(rawConfig["cwd"], defaultCwd),
420
424
  approvalMode: parseApprovalModeConfig(name, rawConfig),
421
425
  instructions: rawConfig["instructions"],
422
426
  identity: parseObjectStringFields(name, rawConfig, "identity", [
@@ -2,12 +2,12 @@
2
2
  "use strict";
3
3
  import {
4
4
  buildPermissionSettings
5
- } from "./chunk-5VXNZWGF.js";
5
+ } from "./chunk-N6FXRR6P.js";
6
6
  import {
7
7
  resolveVoiceStreamConfig,
8
8
  resolveVoiceTranscriptionConfig,
9
9
  transcribeVoiceAudio
10
- } from "./chunk-PDZ7MBDG.js";
10
+ } from "./chunk-FXMC7SL2.js";
11
11
  import {
12
12
  getVoiceSettingsScope,
13
13
  isSelectableVoiceModel,
@@ -16,11 +16,13 @@ import {
16
16
  readVoiceMode,
17
17
  readVoiceModel,
18
18
  resolveVoiceTransport
19
- } from "./chunk-HPDUL5MF.js";
19
+ } from "./chunk-DPFBNG72.js";
20
20
  import {
21
21
  WorkspacePermissionRulesSessionRequiredError,
22
- WorkspaceSettingsPartialPersistError
23
- } from "./chunk-WL4L7EZH.js";
22
+ WorkspaceSettingsPartialPersistError,
23
+ WorkspaceSkillNotFoundError,
24
+ WorkspaceSkillNotToggleableError
25
+ } from "./chunk-OA4JVLSA.js";
24
26
  import {
25
27
  MCP_RESTART_SERVER_DEADLINE_MS
26
28
  } from "./chunk-OCPBI7J5.js";
@@ -32,8 +34,9 @@ import {
32
34
  WorkspaceInitPathEscapeError,
33
35
  WorkspaceInitRaceError,
34
36
  WorkspaceInitSymlinkError
35
- } from "./chunk-IAVB3HM3.js";
37
+ } from "./chunk-KSO42X3Z.js";
36
38
  import {
39
+ BridgeChannelClosedError,
37
40
  SERVE_CONTROL_EXT_METHODS,
38
41
  SERVE_STATUS_EXT_METHODS,
39
42
  STATUS_SCHEMA_VERSION,
@@ -45,23 +48,23 @@ import {
45
48
  createIdleWorkspaceProvidersStatus,
46
49
  createIdleWorkspaceSkillsStatus,
47
50
  mapDomainErrorToErrorKind
48
- } from "./chunk-VWPVHAMO.js";
51
+ } from "./chunk-CUUXANEQ.js";
49
52
  import {
50
53
  getPersistScopeForModelSelection,
51
54
  loadSettings
52
- } from "./chunk-4C5BQ2D2.js";
55
+ } from "./chunk-6GETGQWP.js";
53
56
  import {
54
57
  getWorkspaceTrustStatus
55
- } from "./chunk-HKMAENAO.js";
58
+ } from "./chunk-4YWLED2A.js";
56
59
  import {
57
60
  writeStderrLine
58
61
  } from "./chunk-YUZI3WAC.js";
59
62
  import {
60
63
  ModelsConfig
61
- } from "./chunk-NVYTCB5Z.js";
64
+ } from "./chunk-K7CRWKOE.js";
62
65
  import {
63
66
  createDebugLogger
64
- } from "./chunk-J4TSQ5EQ.js";
67
+ } from "./chunk-7NFB7LBQ.js";
65
68
  import {
66
69
  init_esbuild_shims
67
70
  } from "./chunk-5O2XNYP6.js";
@@ -96,14 +99,11 @@ function voiceSettingsScopeToWire(scope) {
96
99
  }
97
100
  __name(voiceSettingsScopeToWire, "voiceSettingsScopeToWire");
98
101
  function buildWorkspaceVoiceSettingsWrites(settings, update, opts = {}) {
99
- const voiceSettingsScope = getVoiceSettingsScope(
100
- settings,
101
- opts.workspaceTrusted
102
- );
102
+ const voiceSettingsScope = opts.scopeOverride ?? getVoiceSettingsScope(settings, opts.workspaceTrusted);
103
103
  const writes = [];
104
104
  if (update.voiceModel !== void 0) {
105
105
  writes.push({
106
- scope: getPersistScopeForModelSelection(settings),
106
+ scope: opts.scopeOverride ?? getPersistScopeForModelSelection(settings),
107
107
  key: "voiceModel",
108
108
  value: update.voiceModel
109
109
  });
@@ -158,13 +158,13 @@ function listAvailableVoiceModels(settings) {
158
158
  );
159
159
  }
160
160
  __name(listAvailableVoiceModels, "listAvailableVoiceModels");
161
- function hasConfiguredBatchVoiceTranscriptionModel(settings) {
161
+ function hasConfiguredBatchVoiceTranscriptionModel(settings, opts = {}) {
162
162
  for (const model of listAvailableVoiceModels(settings)) {
163
163
  if (model.transport !== "qwen-asr-chat") {
164
164
  continue;
165
165
  }
166
166
  try {
167
- validateWorkspaceVoiceConfig(settings, model.id);
167
+ validateWorkspaceVoiceConfig(settings, model.id, opts);
168
168
  return true;
169
169
  } catch (err) {
170
170
  debugLogger.debug(
@@ -223,14 +223,24 @@ function validateWorkspaceVoiceModel(settings, voiceModel) {
223
223
  return { id: model.id, transport };
224
224
  }
225
225
  __name(validateWorkspaceVoiceModel, "validateWorkspaceVoiceModel");
226
- function validateWorkspaceVoiceConfig(settings, voiceModel) {
226
+ function validateWorkspaceVoiceConfig(settings, voiceModel, opts = {}) {
227
227
  const descriptor = validateWorkspaceVoiceModel(settings, voiceModel);
228
228
  try {
229
229
  const config = createVoiceModelSource(settings);
230
230
  if (descriptor.transport === "qwen-asr-chat") {
231
- resolveVoiceTranscriptionConfig({ config, settings, voiceModel });
231
+ resolveVoiceTranscriptionConfig({
232
+ config,
233
+ settings,
234
+ voiceModel,
235
+ env: opts.env
236
+ });
232
237
  } else {
233
- resolveVoiceStreamConfig({ config, settings, voiceModel });
238
+ resolveVoiceStreamConfig({
239
+ config,
240
+ settings,
241
+ voiceModel,
242
+ env: opts.env
243
+ });
234
244
  }
235
245
  } catch (err) {
236
246
  throw new WorkspaceVoiceError(
@@ -242,7 +252,7 @@ function validateWorkspaceVoiceConfig(settings, voiceModel) {
242
252
  return descriptor;
243
253
  }
244
254
  __name(validateWorkspaceVoiceConfig, "validateWorkspaceVoiceConfig");
245
- function validateWorkspaceVoiceState(settings, update) {
255
+ function validateWorkspaceVoiceState(settings, update, opts = {}) {
246
256
  if (update.enabled === void 0 && update.mode === void 0 && update.language === void 0 && update.voiceModel === void 0) {
247
257
  throw new WorkspaceVoiceError(
248
258
  400,
@@ -265,7 +275,7 @@ function validateWorkspaceVoiceState(settings, update) {
265
275
  "A valid voiceModel is required before enabling voice."
266
276
  );
267
277
  }
268
- validateWorkspaceVoiceConfig(settings, nextVoiceModel);
278
+ validateWorkspaceVoiceConfig(settings, nextVoiceModel, opts);
269
279
  }
270
280
  __name(validateWorkspaceVoiceState, "validateWorkspaceVoiceState");
271
281
  async function transcribeWorkspaceVoiceAudio(input) {
@@ -286,6 +296,7 @@ async function transcribeWorkspaceVoiceAudio(input) {
286
296
  config: createVoiceModelSource(input.settings),
287
297
  settings: input.settings,
288
298
  voiceModel: input.voiceModel,
299
+ env: input.env,
289
300
  abortSignal: input.abortSignal
290
301
  }
291
302
  );
@@ -360,8 +371,11 @@ function createDaemonWorkspaceService(deps) {
360
371
  workspaceSkillsStatusProvider,
361
372
  isChannelLive,
362
373
  persistDisabledTools,
374
+ persistDisabledSkills,
363
375
  persistSetting,
364
376
  persistSettings,
377
+ voiceEnv,
378
+ voiceSettingsScope,
365
379
  preheatAcpChild: preheatAcpChildOnBridge,
366
380
  queryWorkspaceStatus,
367
381
  invokeWorkspaceCommand,
@@ -370,6 +384,35 @@ function createDaemonWorkspaceService(deps) {
370
384
  } = deps;
371
385
  let lastWorkspaceSkillsStatus;
372
386
  let inFlightAcpPreheat;
387
+ const getWorkspaceSkillsStatus = /* @__PURE__ */ __name(async () => {
388
+ let status;
389
+ try {
390
+ status = await queryWorkspaceStatus(
391
+ SERVE_STATUS_EXT_METHODS.workspaceSkills,
392
+ () => createIdleWorkspaceSkillsStatus(boundWorkspace)
393
+ );
394
+ } catch (err) {
395
+ writeStderrLine(
396
+ `qwen serve: getWorkspaceSkillsStatus query failed: ${err instanceof Error ? err.message : String(err)}`
397
+ );
398
+ status = createIdleWorkspaceSkillsStatus(boundWorkspace);
399
+ }
400
+ if (status.initialized) {
401
+ lastWorkspaceSkillsStatus = status;
402
+ return status;
403
+ }
404
+ if (lastWorkspaceSkillsStatus) return lastWorkspaceSkillsStatus;
405
+ if (workspaceSkillsStatusProvider) {
406
+ try {
407
+ return await workspaceSkillsStatusProvider(boundWorkspace);
408
+ } catch (err) {
409
+ writeStderrLine(
410
+ `qwen serve: getWorkspaceSkillsStatus local provider failed: ${err instanceof Error ? err.message : String(err)}`
411
+ );
412
+ }
413
+ }
414
+ return status;
415
+ }, "getWorkspaceSkillsStatus");
373
416
  return {
374
417
  // -- Status queries (delegate to ACP child via queryWorkspaceStatus) --
375
418
  async getWorkspaceMcpStatus(_ctx) {
@@ -379,35 +422,7 @@ function createDaemonWorkspaceService(deps) {
379
422
  );
380
423
  },
381
424
  async getWorkspaceSkillsStatus(_ctx) {
382
- let status;
383
- try {
384
- status = await queryWorkspaceStatus(
385
- SERVE_STATUS_EXT_METHODS.workspaceSkills,
386
- () => createIdleWorkspaceSkillsStatus(boundWorkspace)
387
- );
388
- } catch (err) {
389
- writeStderrLine(
390
- `qwen serve: getWorkspaceSkillsStatus query failed: ${err instanceof Error ? err.message : String(err)}`
391
- );
392
- status = createIdleWorkspaceSkillsStatus(boundWorkspace);
393
- }
394
- if (status.initialized) {
395
- lastWorkspaceSkillsStatus = status;
396
- return status;
397
- }
398
- if (lastWorkspaceSkillsStatus) {
399
- return lastWorkspaceSkillsStatus;
400
- }
401
- if (workspaceSkillsStatusProvider) {
402
- try {
403
- return await workspaceSkillsStatusProvider(boundWorkspace);
404
- } catch (err) {
405
- writeStderrLine(
406
- `qwen serve: getWorkspaceSkillsStatus local provider failed: ${err instanceof Error ? err.message : String(err)}`
407
- );
408
- }
409
- }
410
- return status;
425
+ return getWorkspaceSkillsStatus();
411
426
  },
412
427
  async getWorkspaceProvidersStatus(_ctx) {
413
428
  if (workspaceProvidersStatusProvider) {
@@ -566,7 +581,10 @@ function createDaemonWorkspaceService(deps) {
566
581
  async getWorkspaceVoiceStatus(_ctx) {
567
582
  return buildWorkspaceVoiceStatus(
568
583
  boundWorkspace,
569
- loadSettings(boundWorkspace)
584
+ loadSettings(
585
+ boundWorkspace,
586
+ voiceEnv ? { skipLoadEnvironment: true } : true
587
+ )
570
588
  );
571
589
  },
572
590
  // -- Mutations --
@@ -619,11 +637,15 @@ function createDaemonWorkspaceService(deps) {
619
637
  "Workspace voice settings persistence is not available"
620
638
  );
621
639
  }
622
- const settings = loadSettings(boundWorkspace);
623
- validateWorkspaceVoiceState(settings, request);
640
+ const settings = loadSettings(
641
+ boundWorkspace,
642
+ voiceEnv ? { skipLoadEnvironment: true } : true
643
+ );
644
+ validateWorkspaceVoiceState(settings, request, { env: voiceEnv });
624
645
  const workspaceTrusted = getWorkspaceTrustStatus(settings.merged, boundWorkspace).effective.state === "trusted";
625
646
  const writes = buildWorkspaceVoiceSettingsWrites(settings, request, {
626
- workspaceTrusted
647
+ workspaceTrusted,
648
+ ...voiceSettingsScope ? { scopeOverride: voiceSettingsScope } : {}
627
649
  });
628
650
  const publishWrite = /* @__PURE__ */ __name((write) => {
629
651
  publishWorkspaceEvent({
@@ -664,6 +686,9 @@ function createDaemonWorkspaceService(deps) {
664
686
  writeStderrLine(
665
687
  `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)}`
666
688
  );
689
+ for (const committedWrite of committed) {
690
+ publishWrite(committedWrite);
691
+ }
667
692
  throw new WorkspaceSettingsPartialPersistError(
668
693
  `Voice settings partial persist failed: committed=${committed.length}/${writes.length}`,
669
694
  committed,
@@ -678,7 +703,10 @@ function createDaemonWorkspaceService(deps) {
678
703
  }
679
704
  return buildWorkspaceVoiceStatus(
680
705
  boundWorkspace,
681
- loadSettings(boundWorkspace)
706
+ loadSettings(
707
+ boundWorkspace,
708
+ voiceEnv ? { skipLoadEnvironment: true } : true
709
+ )
682
710
  );
683
711
  },
684
712
  async setWorkspaceToolEnabled(ctx, toolName, enabled) {
@@ -690,6 +718,80 @@ function createDaemonWorkspaceService(deps) {
690
718
  });
691
719
  return { toolName, enabled };
692
720
  },
721
+ async setWorkspaceSkillEnabled(ctx, requestedSkillName, enabled) {
722
+ const normalizedName = requestedSkillName.trim().toLowerCase();
723
+ const status = await getWorkspaceSkillsStatus();
724
+ const skill = status.skills.find(
725
+ (candidate) => candidate.name.trim().toLowerCase() === normalizedName
726
+ );
727
+ if (!skill) throw new WorkspaceSkillNotFoundError(requestedSkillName);
728
+ if (skill.userInvocable === false) {
729
+ throw new WorkspaceSkillNotToggleableError(
730
+ skill.name,
731
+ "not_user_invocable"
732
+ );
733
+ }
734
+ const disabled = loadSettings(boundWorkspace).merged.skills?.disabled;
735
+ const disabledNames = new Set(
736
+ (Array.isArray(disabled) ? disabled : []).filter((name) => typeof name === "string").map((name) => name.trim().toLowerCase()).filter(Boolean)
737
+ );
738
+ if (skill.level === "extension" && skill.status === "disabled" && !disabledNames.has(normalizedName)) {
739
+ throw new WorkspaceSkillNotToggleableError(
740
+ skill.name,
741
+ "inactive_extension"
742
+ );
743
+ }
744
+ const persisted = await persistDisabledSkills(
745
+ boundWorkspace,
746
+ skill.name,
747
+ enabled
748
+ );
749
+ const channelLive = isChannelLive?.() ?? false;
750
+ let activation = channelLive ? "applied" : "deferred";
751
+ let sessionsRefreshed = 0;
752
+ let sessionsFailed = 0;
753
+ if (persisted.changed) {
754
+ lastWorkspaceSkillsStatus = void 0;
755
+ if (channelLive) {
756
+ try {
757
+ const refreshed = await invokeWorkspaceCommand(
758
+ SERVE_CONTROL_EXT_METHODS.workspaceSkillsRefresh,
759
+ { cwd: boundWorkspace }
760
+ );
761
+ sessionsRefreshed = refreshed.sessionsRefreshed;
762
+ sessionsFailed = refreshed.sessionsFailed;
763
+ if (sessionsFailed > 0) activation = "partial";
764
+ } catch (err) {
765
+ if (err instanceof SessionNotFoundError || err instanceof BridgeChannelClosedError) {
766
+ activation = "deferred";
767
+ } else {
768
+ activation = "partial";
769
+ sessionsFailed = 1;
770
+ writeStderrLine(
771
+ `qwen serve: workspace skill refresh failed: ${err instanceof Error ? err.message : String(err)}`
772
+ );
773
+ }
774
+ }
775
+ }
776
+ publishWorkspaceEvent({
777
+ type: "settings_changed",
778
+ data: {
779
+ key: "skills.disabled",
780
+ value: persisted.disabled.length > 0 ? persisted.disabled : void 0,
781
+ scope: "workspace"
782
+ },
783
+ originatorClientId: ctx.originatorClientId
784
+ });
785
+ }
786
+ return {
787
+ skillName: skill.name,
788
+ enabled,
789
+ changed: persisted.changed,
790
+ activation,
791
+ sessionsRefreshed,
792
+ sessionsFailed
793
+ };
794
+ },
693
795
  async initWorkspace(ctx, opts) {
694
796
  const filename = contextFilename;
695
797
  const target = path.resolve(boundWorkspace, filename);
@@ -7,15 +7,6 @@ import {
7
7
  __name
8
8
  } from "./chunk-J2S4EL5Y.js";
9
9
 
10
- // packages/cli/src/serve/channel-worker-env.ts
11
- init_esbuild_shims();
12
- var CHANNEL_DAEMON_WORKER_SENTINEL = "QWEN_CHANNEL_DAEMON_WORKER";
13
- var CHANNEL_WORKER_HEARTBEAT_INTERVAL_MS = 15e3;
14
- var QWEN_DAEMON_TOKEN_ENV = "QWEN_DAEMON_TOKEN";
15
- var QWEN_DAEMON_URL_ENV = "QWEN_DAEMON_URL";
16
- var QWEN_DAEMON_WORKSPACE_ENV = "QWEN_DAEMON_WORKSPACE";
17
- var QWEN_SERVER_TOKEN_ENV = "QWEN_SERVER_TOKEN";
18
-
19
10
  // packages/cli/src/serve/channel-webhook-ipc.ts
20
11
  init_esbuild_shims();
21
12
  import { randomUUID } from "node:crypto";
@@ -65,12 +56,6 @@ function isChannelWebhookTaskResultMessage(value) {
65
56
  __name(isChannelWebhookTaskResultMessage, "isChannelWebhookTaskResultMessage");
66
57
 
67
58
  export {
68
- CHANNEL_DAEMON_WORKER_SENTINEL,
69
- CHANNEL_WORKER_HEARTBEAT_INTERVAL_MS,
70
- QWEN_DAEMON_TOKEN_ENV,
71
- QWEN_DAEMON_URL_ENV,
72
- QWEN_DAEMON_WORKSPACE_ENV,
73
- QWEN_SERVER_TOKEN_ENV,
74
59
  ChannelWebhookEnqueueError,
75
60
  isChannelWebhookEnqueueErrorCode,
76
61
  isChannelWebhookEnqueueError,
@@ -2,20 +2,20 @@
2
2
  "use strict";
3
3
  import {
4
4
  formatFetchErrorForUser
5
- } from "./chunk-UOZWKTQG.js";
5
+ } from "./chunk-ZPAHLFZU.js";
6
6
  import {
7
7
  openBrowserSecurely
8
8
  } from "./chunk-JESCGQM3.js";
9
9
  import {
10
10
  atomicWriteFile
11
- } from "./chunk-ZLXQN2QS.js";
11
+ } from "./chunk-WIEO4CWB.js";
12
12
  import {
13
13
  combineAbortSignals
14
14
  } from "./chunk-DJ2GSRLV.js";
15
15
  import {
16
16
  Storage,
17
17
  createDebugLogger
18
- } from "./chunk-J4TSQ5EQ.js";
18
+ } from "./chunk-7NFB7LBQ.js";
19
19
  import {
20
20
  init_esbuild_shims
21
21
  } from "./chunk-5O2XNYP6.js";