@qwen-code/qwen-code 0.21.0 → 0.21.1-nightly.20260731.702932cc7

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 (423) hide show
  1. package/bundled/qc-helper/docs/configuration/model-providers.md +2 -0
  2. package/bundled/qc-helper/docs/configuration/settings.md +39 -28
  3. package/bundled/qc-helper/docs/features/channels/_meta.ts +2 -0
  4. package/bundled/qc-helper/docs/features/channels/github.md +139 -0
  5. package/bundled/qc-helper/docs/features/channels/gitlab.md +171 -0
  6. package/bundled/qc-helper/docs/features/channels/overview.md +61 -6
  7. package/bundled/qc-helper/docs/features/code-review.md +21 -1
  8. package/bundled/qc-helper/docs/features/hooks.md +72 -15
  9. package/bundled/qc-helper/docs/features/mcp.md +9 -1
  10. package/bundled/qc-helper/docs/features/scheduled-tasks.md +3 -1
  11. package/bundled/qc-helper/docs/features/sub-agents.md +42 -8
  12. package/bundled/qc-helper/docs/qwen-serve.md +11 -7
  13. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +2 -2
  14. package/bundled/qc-helper/docs/support/troubleshooting.md +2 -1
  15. package/bundled/review/DESIGN.md +19 -0
  16. package/bundled/review/SKILL.md +120 -61
  17. package/chunks/MaxSizedBox-LAFHK4VO.js +88 -0
  18. package/chunks/{StandaloneSessionPicker-BIRMPLRD.js → StandaloneSessionPicker-EMNOBN3S.js} +71 -68
  19. package/chunks/{acp-startup-profiler-RV3IV562.js → acp-startup-profiler-2C4A5ZTJ.js} +2 -2
  20. package/chunks/{acpAgent-6J2U72PQ.js → acpAgent-ERFA6HWV.js} +1674 -591
  21. package/chunks/agent-PLKF6JK4.js +84 -0
  22. package/chunks/agent-headless-JAORDQ63.js +78 -0
  23. package/chunks/{anthropicContentGenerator-75BKLTSP.js → anthropicContentGenerator-OFHSZJBF.js} +79 -27
  24. package/chunks/{artifact-tool-Y5T7GG7F.js → artifact-tool-RDN2W7ND.js} +4 -4
  25. package/chunks/{askUserQuestion-2H6747FR.js → askUserQuestion-OZERWH5R.js} +4 -4
  26. package/chunks/bridge-NYOBVRIT.js +94 -0
  27. package/chunks/{build-RV63TIRH.js → build-GDBLPA24.js} +1 -1
  28. package/chunks/{ca-25EDXPFZ.js → ca-6W3SK7OQ.js} +6 -1
  29. package/chunks/channel-management-service-5S7YCWX5.js +418 -0
  30. package/chunks/channel-settings-store-NLOKYO23.js +91 -0
  31. package/chunks/{channel-worker-group-2ZD7TVAT.js → channel-worker-group-OVWGYMZS.js} +11 -6
  32. package/chunks/{channel-worker-manager-4OA4BCGB.js → channel-worker-manager-H55GKOQA.js} +11 -6
  33. package/chunks/{channel-worker-supervisor-V7KCFJTS.js → channel-worker-supervisor-CABBXYHK.js} +7 -5
  34. package/chunks/{chunk-RIBKPMRP.js → chunk-23F4XGWO.js} +19 -6
  35. package/chunks/{chunk-ACY3A37B.js → chunk-25VHI5T7.js} +23 -18
  36. package/chunks/{chunk-MZAXJAUM.js → chunk-26JK4RPD.js} +1 -1
  37. package/chunks/{chunk-6GMVPFB2.js → chunk-2IIJTXYF.js} +45 -16
  38. package/chunks/{chunk-BPJSQIJX.js → chunk-2J3OJGTL.js} +0 -2
  39. package/chunks/{chunk-2X55UKQE.js → chunk-2JZR3B4A.js} +3 -3
  40. package/chunks/{chunk-7JURR4JT.js → chunk-2OQUICDM.js} +167 -81
  41. package/chunks/{chunk-ZJHVAS7M.js → chunk-2YCYFWYZ.js} +4 -5
  42. package/chunks/{chunk-3QMGYBFN.js → chunk-3APUUXRF.js} +1 -80
  43. package/chunks/{chunk-MUP3T3AD.js → chunk-3I6DUGQD.js} +1 -35
  44. package/chunks/{chunk-JVPM2ULZ.js → chunk-3XZ5SSNR.js} +6 -6
  45. package/chunks/chunk-42VPM33K.js +319 -0
  46. package/chunks/{chunk-VAK25FTU.js → chunk-45IOTAUS.js} +1 -1
  47. package/chunks/chunk-45UYUCJ6.js +363 -0
  48. package/chunks/{chunk-JZA3JUDJ.js → chunk-4KP2F2TE.js} +1 -1
  49. package/chunks/{chunk-IO3IX5Q4.js → chunk-4YJQD2IO.js} +1 -1
  50. package/chunks/{chunk-JXJFVC6E.js → chunk-5G6XUGXO.js} +61 -14
  51. package/chunks/{chunk-ZOIFNCKL.js → chunk-5NNHICSA.js} +3 -23
  52. package/chunks/{chunk-A4UCTEB5.js → chunk-5WV5S2GT.js} +0 -1
  53. package/chunks/{chunk-RHLZR4E5.js → chunk-675H6PLP.js} +1 -1
  54. package/chunks/chunk-6FMJLI5M.js +1591 -0
  55. package/chunks/chunk-6MPDY6ZG.js +76 -0
  56. package/chunks/{chunk-PSOO6YXD.js → chunk-6NUWQ3R7.js} +9 -7
  57. package/chunks/{chunk-7MVVZO4N.js → chunk-6ZRWX46I.js} +4 -4
  58. package/chunks/{chunk-TPRQ7RZH.js → chunk-76E5Y3UZ.js} +3117 -993
  59. package/chunks/{chunk-UUUTRMI2.js → chunk-7ULQIS27.js} +1 -1
  60. package/chunks/{chunk-BKHWX6I2.js → chunk-A5BZ722X.js} +11 -3
  61. package/chunks/{chunk-TEHGS6UP.js → chunk-A5T5W7PR.js} +154 -16
  62. package/chunks/{chunk-VIA5XA4U.js → chunk-A5UODYG3.js} +4 -1
  63. package/chunks/{chunk-JLU636DO.js → chunk-ALMR3E6Q.js} +1 -0
  64. package/chunks/{chunk-EBJQ6AXW.js → chunk-ANDVK2JN.js} +358 -14
  65. package/chunks/{chunk-TOFQCPDC.js → chunk-AOHY3QJ3.js} +14 -8
  66. package/chunks/chunk-AQ37AY7B.js +93 -0
  67. package/chunks/{chunk-PJIZUQVC.js → chunk-AZQ3DT76.js} +2 -2
  68. package/chunks/{chunk-LKEJ26GS.js → chunk-B3TA3IF5.js} +16 -11
  69. package/chunks/{chunk-Q4M4MDQ4.js → chunk-B43QHWY6.js} +1 -1
  70. package/chunks/{chunk-UH3WSE5L.js → chunk-B4AJNNOL.js} +1 -6
  71. package/chunks/{chunk-K36B6G2O.js → chunk-B6FOGNGH.js} +5 -5
  72. package/chunks/{chunk-PWVFN2LF.js → chunk-BP2H5K25.js} +1 -1
  73. package/chunks/{chunk-LB6DUZ26.js → chunk-BTWSGZCT.js} +264 -185
  74. package/chunks/{chunk-ZNAUOR2I.js → chunk-BZBPT52P.js} +2 -2
  75. package/chunks/{chunk-L26JL52R.js → chunk-CBBP4BMC.js} +64 -67
  76. package/chunks/{chunk-ZD6UTE4A.js → chunk-CNTR4GR6.js} +1 -1
  77. package/chunks/{chunk-3SJ43L4W.js → chunk-CPZAH673.js} +6 -0
  78. package/chunks/{chunk-EPDRMGT4.js → chunk-D4HTUMGX.js} +4 -28
  79. package/chunks/{chunk-QAF7NMK7.js → chunk-D7CQTWRS.js} +1 -1
  80. package/chunks/{chunk-XVNQMZ2I.js → chunk-DGEIYUC3.js} +0 -1
  81. package/chunks/{chunk-BPZALHVR.js → chunk-DI35ZN7T.js} +1 -1
  82. package/chunks/{chunk-IKCX4CCL.js → chunk-DKPJUF5F.js} +118 -95
  83. package/chunks/{chunk-DLWL3Z7A.js → chunk-DSFHVTWD.js} +3 -3
  84. package/chunks/{chunk-FSITMZJH.js → chunk-DYRYLJ3O.js} +18 -9
  85. package/chunks/{chunk-NL7LTRLR.js → chunk-E2BHWIDT.js} +48 -72
  86. package/chunks/{chunk-UDX5OBWR.js → chunk-E2FN6SM7.js} +94 -4
  87. package/chunks/{chunk-USTWD7QV.js → chunk-E6CJ2SMM.js} +26 -16
  88. package/chunks/{chunk-KMQ33DO4.js → chunk-EDB7A72S.js} +4 -4
  89. package/chunks/{chunk-7ZCNENPP.js → chunk-FANRZEAJ.js} +1 -1
  90. package/chunks/{chunk-WBL3FJEU.js → chunk-FC4KQFCS.js} +1 -1
  91. package/chunks/{chunk-5NBDS5S6.js → chunk-FCYYAB4S.js} +162 -7
  92. package/chunks/{chunk-OKY7HXPG.js → chunk-FJ5WUMUQ.js} +2 -2
  93. package/chunks/{chunk-PHOF65IG.js → chunk-FRXG4ARO.js} +36273 -44436
  94. package/chunks/{chunk-FQK6JAFG.js → chunk-FS674JW4.js} +4 -4
  95. package/chunks/chunk-FYJ7W2PI.js +194 -0
  96. package/chunks/{chunk-BULDBTYC.js → chunk-G7XXKQYS.js} +3 -28
  97. package/chunks/{chunk-LS77BEZP.js → chunk-GLCZKT5V.js} +1 -5
  98. package/chunks/{chunk-VRYUBFMC.js → chunk-GRUAVQQR.js} +1 -1
  99. package/chunks/{chunk-MVSUYZDT.js → chunk-GWV7DI3S.js} +4 -4
  100. package/chunks/{chunk-A5L3JMUA.js → chunk-HC45LTEN.js} +18 -4
  101. package/chunks/{chunk-PC6JANNU.js → chunk-HKRVXYDN.js} +4 -4
  102. package/chunks/{chunk-GZXCZHCT.js → chunk-I3G5JWBV.js} +1 -1
  103. package/chunks/{chunk-4WIZGAH3.js → chunk-I5BT7ADR.js} +6 -58
  104. package/chunks/{chunk-GSN55ZRI.js → chunk-ID3O7PRB.js} +19 -7
  105. package/chunks/{chunk-L5UHQJTJ.js → chunk-IGTHU3T4.js} +1 -1
  106. package/chunks/{chunk-BIQWWWJN.js → chunk-IIUGIWWY.js} +1 -1
  107. package/chunks/{chunk-RWTEFFPU.js → chunk-JCJ7LKNA.js} +6140 -5616
  108. package/chunks/{chunk-S3TWXGKA.js → chunk-JE7KQ2UP.js} +4 -2
  109. package/chunks/{chunk-PWTZEM3C.js → chunk-JXVC2PL3.js} +3 -37
  110. package/chunks/chunk-JYBU6YUE.js +378 -0
  111. package/chunks/{chunk-RF3EXIHJ.js → chunk-K3PFMM5U.js} +49 -26
  112. package/chunks/{chunk-JCW2R7WC.js → chunk-K623ENWT.js} +3 -79
  113. package/chunks/{chunk-T2NCM2ET.js → chunk-K6KS3LTN.js} +2 -749
  114. package/chunks/chunk-KWHKHSIS.js +81 -0
  115. package/chunks/{chunk-DHHOYAPR.js → chunk-L2E5GFAG.js} +7 -7
  116. package/chunks/{chunk-2W3OOD4W.js → chunk-L55JWS76.js} +6 -3
  117. package/chunks/{chunk-E5TUC6CA.js → chunk-LHKCY7DY.js} +3 -3
  118. package/chunks/{chunk-NH6KE4JX.js → chunk-LOY7RWQG.js} +3 -3
  119. package/chunks/{chunk-U7M2DMGW.js → chunk-M4MSAE7U.js} +130 -5
  120. package/chunks/{chunk-IJTOWOD7.js → chunk-MB32MS4U.js} +92 -9
  121. package/chunks/{chunk-PR75REBZ.js → chunk-MM7TH7ZM.js} +12 -82
  122. package/chunks/{chunk-FODK6UMO.js → chunk-MPHPFVKK.js} +0 -2
  123. package/chunks/{chunk-M5JM7OSF.js → chunk-N4ACHWNH.js} +2 -3
  124. package/chunks/{chunk-JESCGQM3.js → chunk-NAVJD2PQ.js} +8 -7
  125. package/chunks/{chunk-J56UI34H.js → chunk-NBD76HUW.js} +4 -2
  126. package/chunks/{chunk-2SCDWPXI.js → chunk-NC4U4I3Y.js} +5 -5
  127. package/chunks/{chunk-H4SBPHSA.js → chunk-NNL7WPPK.js} +3 -3
  128. package/chunks/{chunk-YBL3QUDD.js → chunk-NQCXWP5D.js} +1 -1
  129. package/chunks/{chunk-CIKQ7KKO.js → chunk-NVFSGPIF.js} +954 -444
  130. package/chunks/{chunk-6OUGMXDC.js → chunk-NWNEANAT.js} +7 -7
  131. package/chunks/chunk-O6GEWCJA.js +21 -0
  132. package/chunks/chunk-OCPBI7J5.js +18 -0
  133. package/chunks/{chunk-KIM5GUMA.js → chunk-OE6F6ZWQ.js} +589 -220
  134. package/chunks/{chunk-SQCQ4KO2.js → chunk-P5DEY3NF.js} +380 -317
  135. package/chunks/{chunk-2JZBVYTU.js → chunk-Q3T5KA2V.js} +1 -8
  136. package/chunks/{chunk-MB4MZHMJ.js → chunk-QARJNL2V.js} +211 -522
  137. package/chunks/{chunk-YH6G52F2.js → chunk-QCXGC7QB.js} +4 -4
  138. package/chunks/chunk-QDK4F2N5.js +1252 -0
  139. package/chunks/{chunk-VDDGDZMA.js → chunk-QHWCP53L.js} +14 -7
  140. package/chunks/{chunk-VULLI6WQ.js → chunk-QIERF2GQ.js} +6 -6
  141. package/chunks/{chunk-TGILQ3YH.js → chunk-QQTJK5GB.js} +200 -77
  142. package/chunks/{chunk-H5FFA6TH.js → chunk-QTHQ6Z5X.js} +16 -3
  143. package/chunks/{chunk-5I2IWRSH.js → chunk-R2XWGR75.js} +2 -2
  144. package/chunks/{chunk-YPE6A4GC.js → chunk-RT7FNC2O.js} +2 -2
  145. package/chunks/{chunk-OFDOK3VM.js → chunk-RX7NJOPE.js} +8 -13
  146. package/chunks/{chunk-6AM5D4ME.js → chunk-S6LOFUVP.js} +0 -12
  147. package/chunks/{chunk-K4XWPEWB.js → chunk-SHN4KHDK.js} +4 -33
  148. package/chunks/{chunk-VYPFXUCB.js → chunk-SZ3KHTDR.js} +1 -1
  149. package/chunks/chunk-T26EAKDL.js +13 -0
  150. package/chunks/chunk-T3CHYWJZ.js +758 -0
  151. package/chunks/{chunk-FNQ6T3CV.js → chunk-TEGJSJDF.js} +10 -7
  152. package/chunks/{chunk-RZIX2G32.js → chunk-THPORXSI.js} +1 -1
  153. package/chunks/{chunk-OHNBB4XR.js → chunk-THVU3RNH.js} +1 -1
  154. package/chunks/{record-artifact-RQKFYO5B.js → chunk-TIRRPCFS.js} +22 -7
  155. package/chunks/{chunk-ETSW4KLJ.js → chunk-TUCOXPHJ.js} +2 -2
  156. package/chunks/{chunk-63P4EL5V.js → chunk-TZTAV5RH.js} +1 -1
  157. package/chunks/{chunk-LK7CHLVP.js → chunk-U4VTUMMK.js} +0 -60
  158. package/chunks/{chunk-3RN6GBKS.js → chunk-U5CODIJW.js} +1 -1
  159. package/chunks/chunk-UU2B5YG6.js +2196 -0
  160. package/chunks/{chunk-R5AFZNQW.js → chunk-VAVHTGU4.js} +15 -8
  161. package/chunks/{chunk-2NH6DYI4.js → chunk-VHPFWR2O.js} +12 -12
  162. package/chunks/{chunk-IKYJHJNF.js → chunk-VOMQ2P6B.js} +3 -3
  163. package/chunks/{chunk-ZFDTEDCF.js → chunk-VX22DUW2.js} +6 -6
  164. package/chunks/{chunk-HTR4WV6U.js → chunk-W4RQUHY3.js} +31 -1
  165. package/chunks/{chunk-M4FMGVY4.js → chunk-WQP7BKWA.js} +3 -3
  166. package/chunks/{chunk-LH2BYDQ5.js → chunk-X2E5TFJ5.js} +18 -12
  167. package/chunks/{chunk-COH43MRJ.js → chunk-XCGIMOLN.js} +27 -1
  168. package/chunks/{chunk-YX324OPW.js → chunk-XDS22O52.js} +1 -1
  169. package/chunks/chunk-XP4L6KS3.js +463 -0
  170. package/chunks/{chunk-6FGBXPWM.js → chunk-XQK4XXTN.js} +38 -44
  171. package/chunks/{chunk-55DJUCI2.js → chunk-XWYPFDB5.js} +53 -43
  172. package/chunks/{chunk-Y34KJKDC.js → chunk-Y7BVNVVW.js} +1 -1
  173. package/chunks/{chunk-IPUUTYMV.js → chunk-YDLJGZHL.js} +1 -1
  174. package/chunks/{chunk-HIJQF5B5.js → chunk-YGE3IXJP.js} +1 -1
  175. package/chunks/{chunk-LQIW3YFY.js → chunk-YJFPRUWX.js} +9 -7
  176. package/chunks/{chunk-J24WCGIN.js → chunk-YQIIG4NA.js} +4 -4
  177. package/chunks/{chunk-BJX6ZSUK.js → chunk-YUFIEIWC.js} +2 -2
  178. package/chunks/{chunk-NIBLUX3Y.js → chunk-Z3S5EMOW.js} +148 -21
  179. package/chunks/{chunk-WCXCRJYB.js → chunk-Z3YLHKB7.js} +1 -1
  180. package/chunks/chunk-Z4X5MTRT.js +133 -0
  181. package/chunks/{chunk-UW5EOVUN.js → chunk-ZBVS26BY.js} +4 -4
  182. package/chunks/{chunk-HTO4JFDZ.js → chunk-ZPJWUGCS.js} +0 -1
  183. package/chunks/{chunk-X5XDDSSH.js → chunk-ZPZ7ZJEE.js} +28 -5
  184. package/chunks/{computer-use-SOQ4E3VX.js → computer-use-GOM42LNK.js} +53 -50
  185. package/chunks/{config-utils-7V7GGIW6.js → config-utils-WADIDWGG.js} +4 -3
  186. package/chunks/contextCommand-6LVPTIWD.js +83 -0
  187. package/chunks/core-runtime-253XV2DB.js +137 -0
  188. package/chunks/{create-sub-session-QRJLW5BV.js → create-sub-session-45POYEVP.js} +50 -47
  189. package/chunks/{create-sub-session-IWW2IZ2T.js → create-sub-session-62YZWVAY.js} +3 -3
  190. package/chunks/{cron-create-YIID5XAW.js → cron-create-6E7GIQTG.js} +6 -6
  191. package/chunks/{cron-delete-ZVHYCEP2.js → cron-delete-JD26XY3W.js} +5 -5
  192. package/chunks/{cron-list-XEGS463Q.js → cron-list-CUWFB44G.js} +6 -6
  193. package/chunks/{daemon-YO6433NF.js → daemon-PCNCI5YU.js} +428 -18
  194. package/chunks/daemon-status-provider-AKALDYJJ.js +93 -0
  195. package/chunks/daemon-trust-policy-XB7ZSQFQ.js +88 -0
  196. package/chunks/daemon-trust-policy-monitor-FUTKP42Q.js +175 -0
  197. package/chunks/{de-HGRCYDEJ.js → de-SY6O76BF.js} +6 -1
  198. package/chunks/deferred-core-runtime-RKLCO7V5.js +92 -0
  199. package/chunks/dist-26BIMQT6.js +4487 -0
  200. package/chunks/{dist-F6IBUDR4.js → dist-2PERFI23.js} +12 -9
  201. package/chunks/{dist-46NQKLTW.js → dist-OAOC5OV4.js} +2 -2
  202. package/chunks/{dist-YFNEUWSE.js → dist-PVEAFLHY.js} +5 -4
  203. package/chunks/{dist-AIKFMUKK.js → dist-SL2LUMML.js} +1449 -14
  204. package/chunks/dist-ULIG4M5H.js +13415 -0
  205. package/chunks/{dist-WEAHOXDM.js → dist-WGMNT3JQ.js} +2 -1
  206. package/chunks/{dist-BBLXMS3N.js → dist-ZHXOBXDN.js} +3 -3
  207. package/chunks/earlyInputCapture-FCWU47OB.js +85 -0
  208. package/chunks/{edit-OBDSQURM.js → edit-TTACM3LN.js} +51 -48
  209. package/chunks/{en-MTWBNGDO.js → en-NBK3JKCE.js} +9 -1
  210. package/chunks/{enter-worktree-U6MRPQ2P.js → enter-worktree-R34GFDX6.js} +51 -48
  211. package/chunks/{enterPlanMode-BC5QUZZ2.js → enterPlanMode-KJPBB6G5.js} +51 -48
  212. package/chunks/environment-IJG3N2PR.js +105 -0
  213. package/chunks/errors-MRON5OJD.js +91 -0
  214. package/chunks/esm-K5FARBNI.js +5548 -0
  215. package/chunks/{exit-worktree-DGNYMECB.js → exit-worktree-UBA66Y4I.js} +51 -48
  216. package/chunks/exitPlanMode-SMSPGNSK.js +76 -0
  217. package/chunks/{fast-path-JJZFJANL.js → fast-path-ZBAMZDCP.js} +16 -6
  218. package/chunks/{fr-45RLL55O.js → fr-4KG5V7UT.js} +6 -1
  219. package/chunks/{gemini-QS36EBZV.js → gemini-XFT7HRNL.js} +106 -99
  220. package/chunks/{geminiContentGenerator-AG4KB6CV.js → geminiContentGenerator-XD3MLYQX.js} +40 -11
  221. package/chunks/{getMachineId-bsd-V7W3GODC.js → getMachineId-bsd-FG7IUY6U.js} +1 -1
  222. package/chunks/{getMachineId-darwin-TDO75DQP.js → getMachineId-darwin-GLCJI2RA.js} +1 -1
  223. package/chunks/{getMachineId-linux-TF43WQT2.js → getMachineId-linux-O6OPPAKO.js} +1 -1
  224. package/chunks/{getMachineId-unsupported-ZGUO3TXT.js → getMachineId-unsupported-S6CKYVGC.js} +1 -1
  225. package/chunks/{getMachineId-win-ECFYZZFQ.js → getMachineId-win-X5SRNEH7.js} +1 -1
  226. package/chunks/{glob-V7R3PSK3.js → glob-HFKY7HXZ.js} +51 -48
  227. package/chunks/goal-tools-HGO6VXPB.js +335 -0
  228. package/chunks/{grep-QYPSK7OP.js → grep-EO5Z3PFV.js} +53 -49
  229. package/chunks/handleAutoUpdate-WRENFE6C.js +84 -0
  230. package/chunks/i18n-ZG5OTVSV.js +100 -0
  231. package/chunks/{image-gen-Z3VPGKRC.js → image-gen-CKWZ4MJI.js} +12 -12
  232. package/chunks/initializer-FYPLLRC7.js +89 -0
  233. package/chunks/installationInfo-5RV4HRMC.js +83 -0
  234. package/chunks/{ja-B7DF7DFG.js → ja-F3GSQXMF.js} +6 -1
  235. package/chunks/{keychain-token-storage-MDTG3WRM.js → keychain-token-storage-IKO4G53C.js} +3 -3
  236. package/chunks/lib-RUF3WZA6.js +9 -0
  237. package/chunks/list-ZNWVL3AT.js +92 -0
  238. package/chunks/{list-agents-5KJJHR6I.js → list-agents-PXJ7ZUFB.js} +3 -3
  239. package/chunks/loadedSettingsAdapter-GQGNHP5I.js +86 -0
  240. package/chunks/{loggingContentGenerator-HS3S5H3Q.js → loggingContentGenerator-MS5DFAWH.js} +78 -113
  241. package/chunks/{loop-wakeup-FXKNNYSY.js → loop-wakeup-Y26NQZ5I.js} +15 -8
  242. package/chunks/{ls-NTK6VOQJ.js → ls-ONQTTMQR.js} +5 -5
  243. package/chunks/{lsp-2JI24STP.js → lsp-YGHHRGMD.js} +3 -3
  244. package/chunks/{managed-npm-update-JYEMMXA3.js → managed-npm-update-67AK4GTL.js} +51 -48
  245. package/chunks/mcp-FVQ4VTLM.js +86 -0
  246. package/chunks/{monitor-R3ODH5U6.js → monitor-BXB33EOZ.js} +51 -48
  247. package/chunks/nonInteractiveCli-CN2GYSN3.js +148 -0
  248. package/chunks/{notebook-edit-BNOK452R.js → notebook-edit-FKYRBV4L.js} +51 -48
  249. package/chunks/{openaiContentGenerator-WMCU3O2H.js → openaiContentGenerator-UUXV5DGU.js} +26 -27
  250. package/chunks/pidfile-MV347TTZ.js +89 -0
  251. package/chunks/process-registry-2CHQBXH5.js +157 -0
  252. package/chunks/{processUtils-RT7UNCC2.js → processUtils-LKFG52RV.js} +2 -2
  253. package/chunks/{pt-22Q3FP73.js → pt-EQ33KWEN.js} +6 -1
  254. package/chunks/{qwenContentGenerator-HHCRK4SX.js → qwenContentGenerator-3WYI2HRW.js} +56 -53
  255. package/chunks/{qwenOAuth2-OWLB5AKH.js → qwenOAuth2-B46MW45O.js} +10 -10
  256. package/chunks/read-file-ACSHVWP3.js +29 -0
  257. package/chunks/{read-mcp-resource-4DKQWGHD.js → read-mcp-resource-U2IJN5HM.js} +4 -4
  258. package/chunks/record-artifact-MGPJ7EG4.js +21 -0
  259. package/chunks/resumeHistoryUtils-AMS4767B.js +94 -0
  260. package/chunks/ripGrep-BAPM2UKC.js +76 -0
  261. package/chunks/{ru-FZCNZHDC.js → ru-7OZAUKGG.js} +6 -1
  262. package/chunks/{run-qwen-serve-FU6HEM4J.js → run-qwen-serve-JEN6FO2A.js} +1018 -263
  263. package/chunks/runtime-WVP22ISH.js +122 -0
  264. package/chunks/{scheduler-G2ZS2Z7E.js → scheduler-HTX5ACVR.js} +50 -47
  265. package/chunks/{sdk-exporters-grpc-AK3LGHNO.js → sdk-exporters-grpc-54L4LS5L.js} +4 -4
  266. package/chunks/{sdk-exporters-http-FYBSUCPD.js → sdk-exporters-http-4BQANSJ6.js} +7 -7
  267. package/chunks/{sdk-impl-GMVPB7NB.js → sdk-impl-Z4VXWVFX.js} +14 -14
  268. package/chunks/{send-message-Q6OOR6BR.js → send-message-PMP4ATVM.js} +8 -13
  269. package/chunks/serve-ELQIVNWN.js +92 -0
  270. package/chunks/{server-4UMH7OIZ.js → server-JNW2NOSQ.js} +5288 -1364
  271. package/chunks/{session-K3O3Q2SV.js → session-NC356XNS.js} +102 -95
  272. package/chunks/{settings-CR2EWTBA.js → settings-73RMIOJ6.js} +54 -51
  273. package/chunks/shell-NMHF5TFG.js +86 -0
  274. package/chunks/{skill-I3SDA4MB.js → skill-XPGXHEKO.js} +22 -22
  275. package/chunks/skill-settings-5IGIJDGA.js +94 -0
  276. package/chunks/spawnChannel-T5THBHFN.js +85 -0
  277. package/chunks/standalone-update-ODXEPDLP.js +95 -0
  278. package/chunks/{startInteractiveUI-SLZGHRPH.js → startInteractiveUI-S27DXVAE.js} +1241 -905
  279. package/chunks/{syntheticOutput-I3757IWH.js → syntheticOutput-D7E6ZFKR.js} +4 -4
  280. package/chunks/task-create-NFCYD43L.js +26 -0
  281. package/chunks/{task-list-FOPULZEP.js → task-list-TAVMGEVD.js} +7 -7
  282. package/chunks/{task-stop-H6RHXFVQ.js → task-stop-ZDF2UJRM.js} +3 -3
  283. package/chunks/{task-update-M57TFZJT.js → task-update-6L7LHGEX.js} +12 -11
  284. package/chunks/{team-create-YJALH5D2.js → team-create-CTLQWTJ2.js} +53 -50
  285. package/chunks/{team-delete-QE2UXJL7.js → team-delete-DPGGRQBU.js} +7 -7
  286. package/chunks/{team-plan-approval-34QFYKGN.js → team-plan-approval-WKRUAPJ4.js} +51 -48
  287. package/chunks/theme-manager-XQHXQQX6.js +80 -0
  288. package/chunks/{todoWrite-VQ7FKOHL.js → todoWrite-2UO5G6G6.js} +34 -6
  289. package/chunks/{tool-search-NF7GB6LE.js → tool-search-45YINAJA.js} +21 -22
  290. package/chunks/total-session-admission-QPUKGHKO.js +88 -0
  291. package/chunks/trustedFolders-YMUTRHEQ.js +98 -0
  292. package/chunks/{update-relaunch-WBUZJC5O.js → update-relaunch-PZUXTVHC.js} +5 -5
  293. package/chunks/updateCheck-IZAN4XTB.js +95 -0
  294. package/chunks/useAutoAcceptIndicator-CGL2MAYE.js +96 -0
  295. package/chunks/{validateNonInterActiveAuth-3R223G3R.js → validateNonInterActiveAuth-GBGNJ65K.js} +97 -90
  296. package/chunks/{version-HS7YSFHV.js → version-Z7EX24NZ.js} +1 -1
  297. package/chunks/{web-fetch-NKCSG7ZE.js → web-fetch-ETTT2H3V.js} +19 -21
  298. package/chunks/{web-search-S62WAP4S.js → web-search-Y3ZSVRJ6.js} +13 -13
  299. package/chunks/{workflow-QAGU5RU4.js → workflow-ATRJSAO7.js} +52 -49
  300. package/chunks/workspace-providers-status-YM3WLW3N.js +89 -0
  301. package/chunks/{workspace-registration-store-24JMHDGF.js → workspace-registration-store-4EGNCIPG.js} +1 -1
  302. package/chunks/workspace-registry-NGZOZKQP.js +96 -0
  303. package/chunks/workspace-service-SVWOXX2B.js +103 -0
  304. package/chunks/workspace-skills-status-YZHZ3PT5.js +89 -0
  305. package/chunks/workspace-trust-reconciler-GGBQV2U5.js +349 -0
  306. package/chunks/write-file-HLGCEB72.js +78 -0
  307. package/chunks/xterm-headless-NTYVIBT3.js +3475 -0
  308. package/chunks/{zh-LUIGBD55.js → zh-H3YDK5QW.js} +9 -1
  309. package/chunks/{zh-TW-F5KG2IYD.js → zh-TW-JYCP7XUA.js} +9 -1
  310. package/chunks/zoom-image-LDECT475.js +224 -0
  311. package/cli.js +50 -16
  312. package/locales/ca.js +7 -2
  313. package/locales/de.js +7 -2
  314. package/locales/en.js +10 -2
  315. package/locales/fr.js +7 -2
  316. package/locales/ja.js +7 -2
  317. package/locales/pt.js +7 -2
  318. package/locales/ru.js +7 -2
  319. package/locales/zh-TW.js +10 -2
  320. package/locales/zh.js +10 -2
  321. package/package.json +5 -4
  322. package/web-shell/assets/{arc-DcbWnB9T.js → arc-Dpy_U6Bb.js} +1 -1
  323. package/web-shell/assets/{architectureDiagram-3BPJPVTR-kMMF5sud.js → architectureDiagram-3BPJPVTR-DgDOg-c5.js} +1 -1
  324. package/web-shell/assets/{blockDiagram-GPEHLZMM-Htl9vTJS.js → blockDiagram-GPEHLZMM-tADd9Ja3.js} +1 -1
  325. package/web-shell/assets/{c4Diagram-AAUBKEIU-BnZnm0mQ.js → c4Diagram-AAUBKEIU-68wj9MCU.js} +1 -1
  326. package/web-shell/assets/channel-Do7fFnFl.js +1 -0
  327. package/web-shell/assets/{chunk-2J33WTMH-DziB7kDG.js → chunk-2J33WTMH-DjJLOeVU.js} +1 -1
  328. package/web-shell/assets/{chunk-4BX2VUAB-CmkD8daw.js → chunk-4BX2VUAB-CMbzGeVC.js} +1 -1
  329. package/web-shell/assets/{chunk-55IACEB6-CHAd9A_U.js → chunk-55IACEB6-SlKgejv9.js} +1 -1
  330. package/web-shell/assets/{chunk-727SXJPM-Dqaam3fE.js → chunk-727SXJPM-CijXssHZ.js} +1 -1
  331. package/web-shell/assets/{chunk-AQP2D5EJ-D_-saBYM.js → chunk-AQP2D5EJ-D8w25nvR.js} +1 -1
  332. package/web-shell/assets/{chunk-FMBD7UC4-B9r_veWD.js → chunk-FMBD7UC4-Bv9dcx_e.js} +1 -1
  333. package/web-shell/assets/{chunk-ND2GUHAM-B3EaCSpL.js → chunk-ND2GUHAM-Bzf6sAOd.js} +1 -1
  334. package/web-shell/assets/{chunk-QZHKN3VN-CYq8x9mn.js → chunk-QZHKN3VN-whNoNeW5.js} +1 -1
  335. package/web-shell/assets/classDiagram-4FO5ZUOK-By_XOP3X.js +1 -0
  336. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-By_XOP3X.js +1 -0
  337. package/web-shell/assets/{cose-bilkent-S5V4N54A-D0ng4uiB.js → cose-bilkent-S5V4N54A-rpQS44Lz.js} +1 -1
  338. package/web-shell/assets/{dagre-BM42HDAG-DCZollQv.js → dagre-BM42HDAG-Ck7VE6nT.js} +1 -1
  339. package/web-shell/assets/{diagram-2AECGRRQ-Dfk2pWS0.js → diagram-2AECGRRQ-CgRrsodR.js} +1 -1
  340. package/web-shell/assets/{diagram-5GNKFQAL-kX38ltWR.js → diagram-5GNKFQAL-CsTZtE5A.js} +1 -1
  341. package/web-shell/assets/{diagram-KO2AKTUF-CJz2vsXh.js → diagram-KO2AKTUF-D5EAdVq4.js} +1 -1
  342. package/web-shell/assets/{diagram-LMA3HP47-BvMLZm_7.js → diagram-LMA3HP47-DNrjHC7Z.js} +1 -1
  343. package/web-shell/assets/{diagram-OG6HWLK6-l7kfStkO.js → diagram-OG6HWLK6-ClJSJGgC.js} +1 -1
  344. package/web-shell/assets/{erDiagram-TEJ5UH35-BSVa8GGT.js → erDiagram-TEJ5UH35-DuVnos_y.js} +1 -1
  345. package/web-shell/assets/{flowDiagram-I6XJVG4X-CoawKIXH.js → flowDiagram-I6XJVG4X-DEpIVl1s.js} +1 -1
  346. package/web-shell/assets/{ganttDiagram-6RSMTGT7-DFUDH0zF.js → ganttDiagram-6RSMTGT7-COnQM2-C.js} +1 -1
  347. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-Y2pvpT4e.js → gitGraphDiagram-PVQCEYII-C-lX5H3_.js} +1 -1
  348. package/web-shell/assets/index-C2GE3DAF.js +74 -0
  349. package/web-shell/assets/{index-D0GX0zZf.js → index-DfcyS2E7.js} +1 -1
  350. package/web-shell/assets/index-Qxt6kN7i.js +1700 -0
  351. package/web-shell/assets/index-bo0Z8hfu.css +5 -0
  352. package/web-shell/assets/{infoDiagram-5YYISTIA-CU8_zLiX.js → infoDiagram-5YYISTIA-D0WP-wmU.js} +1 -1
  353. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-AVQiV0DU.js → ishikawaDiagram-YF4QCWOH-DgsI3Clu.js} +1 -1
  354. package/web-shell/assets/{journeyDiagram-JHISSGLW-DQ0VSKa3.js → journeyDiagram-JHISSGLW-4yCoMZO6.js} +1 -1
  355. package/web-shell/assets/{kanban-definition-UN3LZRKU-BqnWqsE_.js → kanban-definition-UN3LZRKU-D_05au1N.js} +1 -1
  356. package/web-shell/assets/{linear-BkoihsaA.js → linear-B38fDz0Q.js} +1 -1
  357. package/web-shell/assets/{mermaid.core-5RJs-31j.js → mermaid.core-aGNwTaHi.js} +5 -5
  358. package/web-shell/assets/{mindmap-definition-RKZ34NQL-D33Bxnpd.js → mindmap-definition-RKZ34NQL-C2yf_5WM.js} +1 -1
  359. package/web-shell/assets/{pieDiagram-4H26LBE5-BuEAw3BH.js → pieDiagram-4H26LBE5-DiHABBT-.js} +1 -1
  360. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Kox_usEq.js → quadrantDiagram-W4KKPZXB-W9xkeAGe.js} +1 -1
  361. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CNjeUif0.js → requirementDiagram-4Y6WPE33-BGmRXl9k.js} +1 -1
  362. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BCd2OL_U.js → sankeyDiagram-5OEKKPKP-CvOmT43_.js} +1 -1
  363. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CF2ZTsz0.js → sequenceDiagram-3UESZ5HK-C8pdd0Z-.js} +1 -1
  364. package/web-shell/assets/{stateDiagram-AJRCARHV-qenSzHtm.js → stateDiagram-AJRCARHV-C-CYdFx2.js} +1 -1
  365. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BieEHeN9.js +1 -0
  366. package/web-shell/assets/{timeline-definition-PNZ67QCA-B5DyWdgs.js → timeline-definition-PNZ67QCA-w2KQn1cI.js} +1 -1
  367. package/web-shell/assets/{vennDiagram-CIIHVFJN-DqP4I_o_.js → vennDiagram-CIIHVFJN-DuorhRku.js} +1 -1
  368. package/web-shell/assets/{wardley-L42UT6IY-CJe2e4mg.js → wardley-L42UT6IY-BAXm2cWy.js} +1 -1
  369. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BMDSw-Rr.js → wardleyDiagram-YWT4CUSO-8PHaOXn5.js} +1 -1
  370. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BTVZYkxD.js → xychartDiagram-2RQKCTM6-Do84JFSc.js} +1 -1
  371. package/web-shell/index.html +2 -2
  372. package/chunks/MaxSizedBox-5DPPWPGT.js +0 -85
  373. package/chunks/agent-6ODUANDO.js +0 -81
  374. package/chunks/agent-headless-7BYQTMHW.js +0 -75
  375. package/chunks/bridge-ZUB64FAE.js +0 -90
  376. package/chunks/chunk-LEH5C7FV.js +0 -232
  377. package/chunks/chunk-SZRN75WQ.js +0 -29
  378. package/chunks/chunk-UGYMA4EI.js +0 -219
  379. package/chunks/chunk-Z2BC6UJ5.js +0 -8575
  380. package/chunks/contextCommand-JLHYA34Z.js +0 -80
  381. package/chunks/daemon-status-provider-2233Q37D.js +0 -89
  382. package/chunks/earlyInputCapture-A7NDU3PF.js +0 -82
  383. package/chunks/environment-W5UFC2CH.js +0 -102
  384. package/chunks/errors-M7CLORXH.js +0 -88
  385. package/chunks/exitPlanMode-GXTBWQAR.js +0 -403
  386. package/chunks/handleAutoUpdate-6DBEZYPV.js +0 -81
  387. package/chunks/i18n-VUJJZIMU.js +0 -97
  388. package/chunks/initializer-UWAK5U5O.js +0 -86
  389. package/chunks/installationInfo-6O2YAA52.js +0 -80
  390. package/chunks/list-GB4ESM3T.js +0 -89
  391. package/chunks/loadedSettingsAdapter-OT6JVQ7U.js +0 -83
  392. package/chunks/mcp-6DBDJPFU.js +0 -83
  393. package/chunks/nonInteractiveCli-MOYCYBBU.js +0 -141
  394. package/chunks/pidfile-TFRZZZIO.js +0 -86
  395. package/chunks/read-file-APMO3PSX.js +0 -31
  396. package/chunks/resumeHistoryUtils-6KRYEAWZ.js +0 -91
  397. package/chunks/ripGrep-BEJDEDXW.js +0 -73
  398. package/chunks/runtime-XXRRTNP6.js +0 -118
  399. package/chunks/serve-7BSTXJ4T.js +0 -89
  400. package/chunks/shell-HH3PF3A2.js +0 -83
  401. package/chunks/spawnChannel-RWNDBXGA.js +0 -82
  402. package/chunks/src-GE4TTTML.js +0 -3147
  403. package/chunks/standalone-update-Q6WFRZZQ.js +0 -92
  404. package/chunks/task-create-N7WQSGYA.js +0 -25
  405. package/chunks/theme-manager-SWRILQHI.js +0 -77
  406. package/chunks/total-session-admission-DLHHHLD3.js +0 -84
  407. package/chunks/trustedFolders-KHXHY6PY.js +0 -93
  408. package/chunks/updateCheck-RKL6M5XN.js +0 -92
  409. package/chunks/useAutoAcceptIndicator-CFQ5BUJL.js +0 -93
  410. package/chunks/workspace-providers-status-QSVZUETE.js +0 -86
  411. package/chunks/workspace-registry-UT4RBNBM.js +0 -88
  412. package/chunks/workspace-service-JFWRUS4V.js +0 -98
  413. package/chunks/workspace-skills-status-ZBBKJOI2.js +0 -85
  414. package/chunks/write-file-VHIXW5M7.js +0 -73
  415. package/web-shell/assets/channel-Cq7YKtfC.js +0 -1
  416. package/web-shell/assets/classDiagram-4FO5ZUOK-CQ9aC1Tg.js +0 -1
  417. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CQ9aC1Tg.js +0 -1
  418. package/web-shell/assets/index-D9haPt0X.css +0 -5
  419. package/web-shell/assets/index-ckX9Pq5k.js +0 -1230
  420. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-B7W4zlCr.js +0 -1
  421. package/chunks/{chunk-TARRHLLG.js → chunk-QUGAUQGJ.js} +25 -25
  422. package/chunks/{chunk-U7ZFW55U.js → chunk-VOQXFAY5.js} +977 -977
  423. /package/chunks/{chunk-LXXMOYPL.js → chunk-VXZBKKQR.js} +0 -0
@@ -2,12 +2,12 @@
2
2
  "use strict";
3
3
  import {
4
4
  buildPermissionSettings
5
- } from "./chunk-VRYUBFMC.js";
5
+ } from "./chunk-GRUAVQQR.js";
6
6
  import {
7
7
  resolveVoiceStreamConfig,
8
8
  resolveVoiceTranscriptionConfig,
9
9
  transcribeVoiceAudio
10
- } from "./chunk-H4SBPHSA.js";
10
+ } from "./chunk-NNL7WPPK.js";
11
11
  import {
12
12
  getVoiceSettingsScope,
13
13
  isSelectableVoiceModel,
@@ -16,7 +16,7 @@ import {
16
16
  readVoiceMode,
17
17
  readVoiceModel,
18
18
  resolveVoiceTransport
19
- } from "./chunk-YBL3QUDD.js";
19
+ } from "./chunk-NQCXWP5D.js";
20
20
  import {
21
21
  WorkspacePermissionRulesSessionRequiredError,
22
22
  WorkspaceSettingsPartialPersistError,
@@ -24,15 +24,8 @@ import {
24
24
  WorkspaceSkillNotToggleableError
25
25
  } from "./chunk-OA4JVLSA.js";
26
26
  import {
27
- MCP_RESTART_SERVER_DEADLINE_MS,
28
- McpServerNotFoundError,
29
- McpServerRestartFailedError,
30
- SessionNotFoundError,
31
- WorkspaceInitConflictError,
32
- WorkspaceInitPathEscapeError,
33
- WorkspaceInitRaceError,
34
- WorkspaceInitSymlinkError
35
- } from "./chunk-UH3WSE5L.js";
27
+ MCP_RESTART_SERVER_DEADLINE_MS
28
+ } from "./chunk-OCPBI7J5.js";
36
29
  import {
37
30
  BridgeChannelClosedError,
38
31
  SERVE_CONTROL_EXT_METHODS,
@@ -46,14 +39,26 @@ import {
46
39
  createIdleWorkspaceProvidersStatus,
47
40
  createIdleWorkspaceSkillsStatus,
48
41
  mapDomainErrorToErrorKind
49
- } from "./chunk-VIA5XA4U.js";
42
+ } from "./chunk-A5UODYG3.js";
43
+ import {
44
+ resolveSkillSettings
45
+ } from "./chunk-Z4X5MTRT.js";
46
+ import {
47
+ McpServerNotFoundError,
48
+ McpServerRestartFailedError,
49
+ SessionNotFoundError,
50
+ WorkspaceInitConflictError,
51
+ WorkspaceInitPathEscapeError,
52
+ WorkspaceInitRaceError,
53
+ WorkspaceInitSymlinkError
54
+ } from "./chunk-B4AJNNOL.js";
50
55
  import {
51
56
  getPersistScopeForModelSelection,
52
57
  loadSettings
53
- } from "./chunk-TEHGS6UP.js";
58
+ } from "./chunk-A5T5W7PR.js";
54
59
  import {
55
60
  getWorkspaceTrustStatus
56
- } from "./chunk-Z2BC6UJ5.js";
61
+ } from "./chunk-UU2B5YG6.js";
57
62
  import {
58
63
  writeStderrLine,
59
64
  writeStderrLineSafe
@@ -62,11 +67,11 @@ import {
62
67
  ModelsConfig,
63
68
  SkillManager,
64
69
  require_yauzl
65
- } from "./chunk-PHOF65IG.js";
70
+ } from "./chunk-FRXG4ARO.js";
66
71
  import {
67
72
  Storage,
68
73
  createDebugLogger
69
- } from "./chunk-NL7LTRLR.js";
74
+ } from "./chunk-E2BHWIDT.js";
70
75
  import {
71
76
  init_esbuild_shims
72
77
  } from "./chunk-5O2XNYP6.js";
@@ -885,7 +890,7 @@ function skillBaseDir(workspace, scope) {
885
890
  return scope === "workspace" ? path.join(workspace, ".qwen", "skills") : path.join(Storage.getGlobalQwenDir(), "skills");
886
891
  }
887
892
  __name(skillBaseDir, "skillBaseDir");
888
- async function removeInstallArtifacts(baseDir, skillName) {
893
+ async function removeInstallArtifacts(baseDir, skillName, assertGenerationOpen) {
889
894
  const workDir = path.dirname(baseDir);
890
895
  const workPrefix = `.${path.basename(baseDir)}-${skillName}`;
891
896
  const locations = [
@@ -903,17 +908,18 @@ async function removeInstallArtifacts(baseDir, skillName) {
903
908
  await Promise.all(
904
909
  entries.filter(
905
910
  (entry) => prefixes.some((prefix) => entry.name.startsWith(prefix))
906
- ).map(
907
- (entry) => fs.rm(path.join(directory, entry.name), {
911
+ ).map(async (entry) => {
912
+ assertGenerationOpen?.();
913
+ await fs.rm(path.join(directory, entry.name), {
908
914
  recursive: true,
909
915
  force: true
910
- })
911
- )
916
+ });
917
+ })
912
918
  );
913
919
  }
914
920
  }
915
921
  __name(removeInstallArtifacts, "removeInstallArtifacts");
916
- async function ensureDirectoryWithoutSymlinks(directory) {
922
+ async function ensureDirectoryWithoutSymlinks(directory, assertGenerationOpen) {
917
923
  const missing = [];
918
924
  let current = directory;
919
925
  while (true) {
@@ -931,15 +937,21 @@ async function ensureDirectoryWithoutSymlinks(directory) {
931
937
  current = parent;
932
938
  }
933
939
  }
934
- for (const entry of missing.reverse()) await fs.mkdir(entry);
940
+ for (const entry of missing.reverse()) {
941
+ assertGenerationOpen?.();
942
+ await fs.mkdir(entry);
943
+ }
935
944
  }
936
945
  __name(ensureDirectoryWithoutSymlinks, "ensureDirectoryWithoutSymlinks");
937
- async function installWorkspaceSkill(workspace, request, githubToken) {
946
+ async function installWorkspaceSkill(workspace, request, githubToken, assertGenerationOpen) {
947
+ assertGenerationOpen?.();
938
948
  const skillName = validateWorkspaceSkillName(request.name);
939
949
  const files = await filesFromSource(request.source, githubToken);
940
950
  const baseDir = skillBaseDir(workspace, request.scope);
941
- await ensureDirectoryWithoutSymlinks(baseDir);
942
- await removeInstallArtifacts(baseDir, skillName);
951
+ assertGenerationOpen?.();
952
+ await ensureDirectoryWithoutSymlinks(baseDir, assertGenerationOpen);
953
+ assertGenerationOpen?.();
954
+ await removeInstallArtifacts(baseDir, skillName, assertGenerationOpen);
943
955
  const destination = path.join(baseDir, skillName);
944
956
  const existing = await fs.lstat(destination).catch(() => void 0);
945
957
  if (existing?.isSymbolicLink() || existing && !existing.isDirectory()) {
@@ -947,15 +959,19 @@ async function installWorkspaceSkill(workspace, request, githubToken) {
947
959
  }
948
960
  const workDir = path.dirname(baseDir);
949
961
  const workPrefix = `.${path.basename(baseDir)}-${skillName}`;
962
+ assertGenerationOpen?.();
950
963
  const staging = await fs.mkdtemp(
951
964
  path.join(workDir, `${workPrefix}.installing-`)
952
965
  );
953
966
  const backup = path.join(workDir, `${workPrefix}.backup-${Date.now()}`);
954
967
  let movedExisting = false;
968
+ let committedStaging = false;
955
969
  try {
956
970
  for (const file of files) {
957
971
  const target = path.join(staging, ...file.relativePath.split("/"));
972
+ assertGenerationOpen?.();
958
973
  await fs.mkdir(path.dirname(target), { recursive: true });
974
+ assertGenerationOpen?.();
959
975
  await fs.writeFile(target, file.content);
960
976
  }
961
977
  const skillFile = path.join(staging, "SKILL.md");
@@ -979,12 +995,19 @@ async function installWorkspaceSkill(workspace, request, githubToken) {
979
995
  );
980
996
  }
981
997
  if (existing) {
998
+ assertGenerationOpen?.();
982
999
  await fs.rename(destination, backup);
983
1000
  movedExisting = true;
984
1001
  }
1002
+ assertGenerationOpen?.();
985
1003
  await fs.rename(staging, destination);
1004
+ committedStaging = true;
1005
+ assertGenerationOpen?.();
986
1006
  } catch (error) {
987
- await fs.rm(staging, { recursive: true, force: true }).catch(() => void 0);
1007
+ await fs.rm(committedStaging ? destination : staging, {
1008
+ recursive: true,
1009
+ force: true
1010
+ }).catch(() => void 0);
988
1011
  if (movedExisting) {
989
1012
  await fs.rename(backup, destination).catch(() => void 0);
990
1013
  }
@@ -1000,7 +1023,8 @@ async function installWorkspaceSkill(workspace, request, githubToken) {
1000
1023
  };
1001
1024
  }
1002
1025
  __name(installWorkspaceSkill, "installWorkspaceSkill");
1003
- async function deleteWorkspaceSkill(workspace, scope, skillNameInput, installedPath) {
1026
+ async function deleteWorkspaceSkill(workspace, scope, skillNameInput, installedPath, assertGenerationOpen) {
1027
+ assertGenerationOpen?.();
1004
1028
  const skillName = validateWorkspaceSkillName(skillNameInput);
1005
1029
  const skillDir = path.resolve(path.dirname(installedPath));
1006
1030
  const skillFile = path.resolve(installedPath);
@@ -1036,12 +1060,14 @@ async function deleteWorkspaceSkill(workspace, scope, skillNameInput, installedP
1036
1060
  "Skill name does not match its installed directory"
1037
1061
  );
1038
1062
  }
1063
+ assertGenerationOpen?.();
1039
1064
  await fs.rm(skillDir, { recursive: true, force: true });
1040
1065
  return { skillName, scope, deleted: true };
1041
1066
  }
1042
1067
  __name(deleteWorkspaceSkill, "deleteWorkspaceSkill");
1043
1068
 
1044
1069
  // packages/cli/src/serve/workspace-service/index.ts
1070
+ var WORKSPACE_SKILLS_SNAPSHOT_TTL_MS = 5e3;
1045
1071
  async function canonicalizeExistingAncestor(inputPath) {
1046
1072
  let current = inputPath;
1047
1073
  while (true) {
@@ -1098,6 +1124,8 @@ __name(withTimeout, "withTimeout");
1098
1124
  function createDaemonWorkspaceService(deps) {
1099
1125
  const {
1100
1126
  boundWorkspace,
1127
+ isWorkspaceTrusted,
1128
+ assertGenerationOpen,
1101
1129
  contextFilename,
1102
1130
  statusProvider,
1103
1131
  workspaceProvidersStatusProvider,
@@ -1116,9 +1144,27 @@ function createDaemonWorkspaceService(deps) {
1116
1144
  refreshExtensionsForAllSessions: refreshExtensionsForAllSessionsOnBridge,
1117
1145
  publishWorkspaceEvent
1118
1146
  } = deps;
1147
+ const loadBoundSettings = /* @__PURE__ */ __name((skipLoadEnvironment = false) => {
1148
+ const workspaceTrusted = isWorkspaceTrusted();
1149
+ return loadSettings(boundWorkspace, {
1150
+ skipLoadEnvironment: skipLoadEnvironment || !workspaceTrusted,
1151
+ skipWorkspaceSettings: !workspaceTrusted,
1152
+ workspaceTrusted
1153
+ });
1154
+ }, "loadBoundSettings");
1155
+ const assertActiveGeneration = /* @__PURE__ */ __name(() => assertGenerationOpen?.(), "assertActiveGeneration");
1119
1156
  let lastWorkspaceSkillsStatus;
1157
+ let lastWorkspaceSkillsStatusAt = 0;
1158
+ let workspaceSkillsGeneration = 0;
1159
+ let inFlightWorkspaceSkillsStatus;
1120
1160
  let inFlightAcpPreheat;
1121
- const getWorkspaceSkillsStatus = /* @__PURE__ */ __name(async () => {
1161
+ const invalidateWorkspaceSkillsSnapshot = /* @__PURE__ */ __name(() => {
1162
+ workspaceSkillsGeneration += 1;
1163
+ lastWorkspaceSkillsStatus = void 0;
1164
+ lastWorkspaceSkillsStatusAt = 0;
1165
+ workspaceSkillsStatusProvider?.invalidate?.(boundWorkspace);
1166
+ }, "invalidateWorkspaceSkillsSnapshot");
1167
+ const readWorkspaceSkillsStatus = /* @__PURE__ */ __name(async (generation) => {
1122
1168
  let status;
1123
1169
  try {
1124
1170
  status = await queryWorkspaceStatus(
@@ -1131,14 +1177,25 @@ function createDaemonWorkspaceService(deps) {
1131
1177
  );
1132
1178
  status = createIdleWorkspaceSkillsStatus(boundWorkspace);
1133
1179
  }
1134
- if (status.initialized) {
1180
+ if (status.initialized && generation === workspaceSkillsGeneration) {
1135
1181
  lastWorkspaceSkillsStatus = status;
1182
+ lastWorkspaceSkillsStatusAt = Date.now();
1136
1183
  return status;
1137
1184
  }
1138
- if (lastWorkspaceSkillsStatus) return lastWorkspaceSkillsStatus;
1185
+ if (lastWorkspaceSkillsStatus) {
1186
+ if (generation === workspaceSkillsGeneration) {
1187
+ lastWorkspaceSkillsStatusAt = Date.now();
1188
+ }
1189
+ return lastWorkspaceSkillsStatus;
1190
+ }
1139
1191
  if (workspaceSkillsStatusProvider) {
1140
1192
  try {
1141
- return await workspaceSkillsStatusProvider(boundWorkspace);
1193
+ const localStatus = await workspaceSkillsStatusProvider(boundWorkspace);
1194
+ if (localStatus.initialized && generation === workspaceSkillsGeneration) {
1195
+ lastWorkspaceSkillsStatus = localStatus;
1196
+ lastWorkspaceSkillsStatusAt = Date.now();
1197
+ }
1198
+ return localStatus;
1142
1199
  } catch (err) {
1143
1200
  writeStderrLine(
1144
1201
  `qwen serve: getWorkspaceSkillsStatus local provider failed: ${err instanceof Error ? err.message : String(err)}`
@@ -1146,22 +1203,47 @@ function createDaemonWorkspaceService(deps) {
1146
1203
  }
1147
1204
  }
1148
1205
  return status;
1206
+ }, "readWorkspaceSkillsStatus");
1207
+ const getWorkspaceSkillsStatus = /* @__PURE__ */ __name(() => {
1208
+ const cacheAgeMs = Date.now() - lastWorkspaceSkillsStatusAt;
1209
+ if (lastWorkspaceSkillsStatus && cacheAgeMs >= 0 && cacheAgeMs < WORKSPACE_SKILLS_SNAPSHOT_TTL_MS) {
1210
+ return Promise.resolve(lastWorkspaceSkillsStatus);
1211
+ }
1212
+ const generation = workspaceSkillsGeneration;
1213
+ if (inFlightWorkspaceSkillsStatus?.generation === generation) {
1214
+ return inFlightWorkspaceSkillsStatus.promise;
1215
+ }
1216
+ const promise = readWorkspaceSkillsStatus(generation);
1217
+ inFlightWorkspaceSkillsStatus = { generation, promise };
1218
+ const clearInFlight = /* @__PURE__ */ __name(() => {
1219
+ if (inFlightWorkspaceSkillsStatus?.promise === promise) {
1220
+ inFlightWorkspaceSkillsStatus = void 0;
1221
+ }
1222
+ }, "clearInFlight");
1223
+ void promise.then(clearInFlight, clearInFlight);
1224
+ return promise;
1149
1225
  }, "getWorkspaceSkillsStatus");
1150
1226
  const refreshWorkspaceSkillsAfterMutation = /* @__PURE__ */ __name(async () => {
1151
- lastWorkspaceSkillsStatus = void 0;
1152
- workspaceSkillsStatusProvider?.invalidate?.(boundWorkspace);
1227
+ invalidateWorkspaceSkillsSnapshot();
1153
1228
  if (!(isChannelLive?.() ?? false)) return;
1154
1229
  try {
1155
- await invokeWorkspaceCommand(
1230
+ const refreshed = await invokeWorkspaceCommand(
1156
1231
  SERVE_CONTROL_EXT_METHODS.workspaceSkillsRefresh,
1157
- { cwd: boundWorkspace }
1232
+ { cwd: boundWorkspace, reason: "content" }
1158
1233
  );
1234
+ if ((refreshed.configsFailed ?? 0) > 0) {
1235
+ writeStderrLine(
1236
+ `qwen serve: ${refreshed.configsFailed} skill cache refresh(es) failed after mutation`
1237
+ );
1238
+ }
1159
1239
  } catch (err) {
1160
1240
  if (!(err instanceof SessionNotFoundError) && !(err instanceof BridgeChannelClosedError)) {
1161
1241
  writeStderrLine(
1162
1242
  `qwen serve: workspace skill refresh after mutation failed: ${err instanceof Error ? err.message : String(err)}`
1163
1243
  );
1164
1244
  }
1245
+ } finally {
1246
+ invalidateWorkspaceSkillsSnapshot();
1165
1247
  }
1166
1248
  }, "refreshWorkspaceSkillsAfterMutation");
1167
1249
  return {
@@ -1188,6 +1270,7 @@ function createDaemonWorkspaceService(deps) {
1188
1270
  );
1189
1271
  },
1190
1272
  async preheatAcpChild(_ctx, opts) {
1273
+ assertActiveGeneration();
1191
1274
  const startedAt = performance.now();
1192
1275
  const channelLive = /* @__PURE__ */ __name(() => isChannelLive?.() ?? false, "channelLive");
1193
1276
  const finish = /* @__PURE__ */ __name((result) => ({
@@ -1346,24 +1429,22 @@ function createDaemonWorkspaceService(deps) {
1346
1429
  },
1347
1430
  async getWorkspaceTrustStatus(_ctx) {
1348
1431
  return getWorkspaceTrustStatus(
1349
- loadSettings(boundWorkspace).merged,
1432
+ loadBoundSettings(true).merged,
1350
1433
  boundWorkspace
1351
1434
  );
1352
1435
  },
1353
1436
  async getWorkspacePermissionsStatus(_ctx) {
1354
- return buildPermissionSettings(loadSettings(boundWorkspace));
1437
+ return buildPermissionSettings(loadBoundSettings());
1355
1438
  },
1356
1439
  async getWorkspaceVoiceStatus(_ctx) {
1357
1440
  return buildWorkspaceVoiceStatus(
1358
1441
  boundWorkspace,
1359
- loadSettings(
1360
- boundWorkspace,
1361
- voiceEnv ? { skipLoadEnvironment: true } : true
1362
- )
1442
+ loadBoundSettings(Boolean(voiceEnv))
1363
1443
  );
1364
1444
  },
1365
1445
  // -- Mutations --
1366
1446
  async requestWorkspaceTrustChange(ctx, request) {
1447
+ assertActiveGeneration();
1367
1448
  publishWorkspaceEvent({
1368
1449
  type: "trust_change_requested",
1369
1450
  data: {
@@ -1380,6 +1461,7 @@ function createDaemonWorkspaceService(deps) {
1380
1461
  };
1381
1462
  },
1382
1463
  async setWorkspacePermissionRules(ctx, request) {
1464
+ assertActiveGeneration();
1383
1465
  const key = `permissions.${request.ruleType}`;
1384
1466
  try {
1385
1467
  const result = await invokeWorkspaceCommand(
@@ -1391,6 +1473,7 @@ function createDaemonWorkspaceService(deps) {
1391
1473
  rules: request.rules
1392
1474
  }
1393
1475
  );
1476
+ assertActiveGeneration();
1394
1477
  publishWorkspaceEvent({
1395
1478
  type: "settings_changed",
1396
1479
  data: { key, value: request.rules, scope: request.scope },
@@ -1405,6 +1488,7 @@ function createDaemonWorkspaceService(deps) {
1405
1488
  }
1406
1489
  },
1407
1490
  async setWorkspaceVoiceSettings(ctx, request) {
1491
+ assertActiveGeneration();
1408
1492
  if (!persistSettings && !persistSetting) {
1409
1493
  throw new WorkspaceVoiceError(
1410
1494
  501,
@@ -1412,14 +1496,10 @@ function createDaemonWorkspaceService(deps) {
1412
1496
  "Workspace voice settings persistence is not available"
1413
1497
  );
1414
1498
  }
1415
- const settings = loadSettings(
1416
- boundWorkspace,
1417
- voiceEnv ? { skipLoadEnvironment: true } : true
1418
- );
1499
+ const settings = loadBoundSettings(Boolean(voiceEnv));
1419
1500
  validateWorkspaceVoiceState(settings, request, { env: voiceEnv });
1420
- const workspaceTrusted = getWorkspaceTrustStatus(settings.merged, boundWorkspace).effective.state === "trusted";
1421
1501
  const writes = buildWorkspaceVoiceSettingsWrites(settings, request, {
1422
- workspaceTrusted,
1502
+ workspaceTrusted: isWorkspaceTrusted(),
1423
1503
  ...voiceSettingsScope ? { scopeOverride: voiceSettingsScope } : {}
1424
1504
  });
1425
1505
  const publishWrite = /* @__PURE__ */ __name((write) => {
@@ -1435,15 +1515,17 @@ function createDaemonWorkspaceService(deps) {
1435
1515
  }, "publishWrite");
1436
1516
  if (persistSettings) {
1437
1517
  try {
1438
- await persistSettings(boundWorkspace, writes);
1518
+ await persistSettings(boundWorkspace, writes, assertGenerationOpen);
1439
1519
  } catch (err) {
1440
1520
  if (err instanceof WorkspaceSettingsPartialPersistError) {
1521
+ assertActiveGeneration();
1441
1522
  for (const write of err.committedWrites) {
1442
1523
  publishWrite(write);
1443
1524
  }
1444
1525
  }
1445
1526
  throw err;
1446
1527
  }
1528
+ assertActiveGeneration();
1447
1529
  for (const write of writes) {
1448
1530
  publishWrite(write);
1449
1531
  }
@@ -1455,9 +1537,11 @@ function createDaemonWorkspaceService(deps) {
1455
1537
  boundWorkspace,
1456
1538
  write.scope,
1457
1539
  write.key,
1458
- write.value
1540
+ write.value,
1541
+ assertGenerationOpen
1459
1542
  );
1460
1543
  } catch (err) {
1544
+ assertActiveGeneration();
1461
1545
  writeStderrLine(
1462
1546
  `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)}`
1463
1547
  );
@@ -1470,22 +1554,28 @@ function createDaemonWorkspaceService(deps) {
1470
1554
  err
1471
1555
  );
1472
1556
  }
1557
+ assertActiveGeneration();
1473
1558
  committed.push(write);
1474
1559
  }
1560
+ assertActiveGeneration();
1475
1561
  for (const write of committed) {
1476
1562
  publishWrite(write);
1477
1563
  }
1478
1564
  }
1479
1565
  return buildWorkspaceVoiceStatus(
1480
1566
  boundWorkspace,
1481
- loadSettings(
1482
- boundWorkspace,
1483
- voiceEnv ? { skipLoadEnvironment: true } : true
1484
- )
1567
+ loadBoundSettings(Boolean(voiceEnv))
1485
1568
  );
1486
1569
  },
1487
1570
  async setWorkspaceToolEnabled(ctx, toolName, enabled) {
1488
- await persistDisabledTools(boundWorkspace, toolName, enabled);
1571
+ assertActiveGeneration();
1572
+ await persistDisabledTools(
1573
+ boundWorkspace,
1574
+ toolName,
1575
+ enabled,
1576
+ assertGenerationOpen
1577
+ );
1578
+ assertActiveGeneration();
1489
1579
  publishWorkspaceEvent({
1490
1580
  type: "tool_toggled",
1491
1581
  data: { toolName, enabled },
@@ -1494,6 +1584,7 @@ function createDaemonWorkspaceService(deps) {
1494
1584
  return { toolName, enabled };
1495
1585
  },
1496
1586
  async setWorkspaceSkillEnabled(ctx, requestedSkillName, enabled) {
1587
+ assertActiveGeneration();
1497
1588
  const normalizedName = requestedSkillName.trim().toLowerCase();
1498
1589
  const status = await getWorkspaceSkillsStatus();
1499
1590
  const skill = status.skills.find(
@@ -1506,11 +1597,11 @@ function createDaemonWorkspaceService(deps) {
1506
1597
  "not_user_invocable"
1507
1598
  );
1508
1599
  }
1509
- const disabled = loadSettings(boundWorkspace).merged.skills?.disabled;
1510
- const disabledNames = new Set(
1511
- (Array.isArray(disabled) ? disabled : []).filter((name) => typeof name === "string").map((name) => name.trim().toLowerCase()).filter(Boolean)
1600
+ const needsLegacyInactiveCheck = skill.level === "extension" && skill.status === "disabled" && skill.disabledReason === void 0;
1601
+ const disabledBySettings = needsLegacyInactiveCheck && resolveSkillSettings(loadBoundSettings(true)).disabledNames.has(
1602
+ normalizedName
1512
1603
  );
1513
- if (skill.level === "extension" && skill.status === "disabled" && !disabledNames.has(normalizedName)) {
1604
+ if (skill.level === "extension" && skill.status === "disabled" && (skill.disabledReason === "inactive_extension" || skill.disabledReason === void 0 && !disabledBySettings)) {
1514
1605
  throw new WorkspaceSkillNotToggleableError(
1515
1606
  skill.name,
1516
1607
  "inactive_extension"
@@ -1519,21 +1610,23 @@ function createDaemonWorkspaceService(deps) {
1519
1610
  const persisted = await persistDisabledSkills(
1520
1611
  boundWorkspace,
1521
1612
  skill.name,
1522
- enabled
1613
+ enabled,
1614
+ assertGenerationOpen
1523
1615
  );
1616
+ assertActiveGeneration();
1524
1617
  const channelLive = isChannelLive?.() ?? false;
1525
1618
  let activation = channelLive ? "applied" : "deferred";
1526
1619
  let sessionsRefreshed = 0;
1527
1620
  let sessionsFailed = 0;
1528
1621
  if (persisted.changed) {
1529
- lastWorkspaceSkillsStatus = void 0;
1530
- workspaceSkillsStatusProvider?.invalidate?.(boundWorkspace);
1622
+ invalidateWorkspaceSkillsSnapshot();
1531
1623
  if (channelLive) {
1532
1624
  try {
1533
1625
  const refreshed = await invokeWorkspaceCommand(
1534
1626
  SERVE_CONTROL_EXT_METHODS.workspaceSkillsRefresh,
1535
- { cwd: boundWorkspace }
1627
+ { cwd: boundWorkspace, reason: "settings" }
1536
1628
  );
1629
+ assertActiveGeneration();
1537
1630
  sessionsRefreshed = refreshed.sessionsRefreshed;
1538
1631
  sessionsFailed = refreshed.sessionsFailed;
1539
1632
  if (sessionsFailed > 0) activation = "partial";
@@ -1548,16 +1641,26 @@ function createDaemonWorkspaceService(deps) {
1548
1641
  );
1549
1642
  }
1550
1643
  }
1644
+ invalidateWorkspaceSkillsSnapshot();
1551
1645
  }
1552
- publishWorkspaceEvent({
1553
- type: "settings_changed",
1554
- data: {
1646
+ assertActiveGeneration();
1647
+ const settingsChanges = persisted.settingsChanges ?? [
1648
+ {
1555
1649
  key: "skills.disabled",
1556
- value: persisted.disabled.length > 0 ? persisted.disabled : void 0,
1557
- scope: "workspace"
1558
- },
1559
- originatorClientId: ctx.originatorClientId
1560
- });
1650
+ value: persisted.disabled.length > 0 ? persisted.disabled : void 0
1651
+ }
1652
+ ];
1653
+ for (const change of settingsChanges) {
1654
+ publishWorkspaceEvent({
1655
+ type: "settings_changed",
1656
+ data: {
1657
+ key: change.key,
1658
+ value: change.value,
1659
+ scope: "workspace"
1660
+ },
1661
+ originatorClientId: ctx.originatorClientId
1662
+ });
1663
+ }
1561
1664
  }
1562
1665
  return {
1563
1666
  skillName: skill.name,
@@ -1569,15 +1672,20 @@ function createDaemonWorkspaceService(deps) {
1569
1672
  };
1570
1673
  },
1571
1674
  async installWorkspaceSkill(_ctx, request) {
1675
+ assertActiveGeneration();
1572
1676
  const result = await installWorkspaceSkill(
1573
1677
  boundWorkspace,
1574
1678
  request,
1575
- skillInstallEnv?.["GH_TOKEN"] ?? skillInstallEnv?.["GITHUB_TOKEN"]
1679
+ skillInstallEnv?.["GH_TOKEN"] ?? skillInstallEnv?.["GITHUB_TOKEN"],
1680
+ assertGenerationOpen
1576
1681
  );
1682
+ assertActiveGeneration();
1577
1683
  await refreshWorkspaceSkillsAfterMutation();
1684
+ assertActiveGeneration();
1578
1685
  return result;
1579
1686
  },
1580
1687
  async deleteWorkspaceSkill(_ctx, requestedSkillName, scope) {
1688
+ assertActiveGeneration();
1581
1689
  const normalizedName = requestedSkillName.trim().toLowerCase();
1582
1690
  const status = await getWorkspaceSkillsStatus();
1583
1691
  const skill = status.skills.find(
@@ -1596,12 +1704,16 @@ function createDaemonWorkspaceService(deps) {
1596
1704
  boundWorkspace,
1597
1705
  scope,
1598
1706
  skill.name,
1599
- skill.installedPath
1707
+ skill.installedPath,
1708
+ assertGenerationOpen
1600
1709
  );
1710
+ assertActiveGeneration();
1601
1711
  await refreshWorkspaceSkillsAfterMutation();
1712
+ assertActiveGeneration();
1602
1713
  return result;
1603
1714
  },
1604
1715
  async initWorkspace(ctx, opts) {
1716
+ assertActiveGeneration();
1605
1717
  const filename = contextFilename;
1606
1718
  const target = path2.resolve(boundWorkspace, filename);
1607
1719
  const withinWorkspace = target === boundWorkspace || target.startsWith(boundWorkspace + path2.sep);
@@ -1661,6 +1773,7 @@ function createDaemonWorkspaceService(deps) {
1661
1773
  if (action === "created") {
1662
1774
  let fh;
1663
1775
  try {
1776
+ assertActiveGeneration();
1664
1777
  fh = await fs2.open(target, "wx");
1665
1778
  } catch (err) {
1666
1779
  const code = err?.code;
@@ -1675,6 +1788,7 @@ function createDaemonWorkspaceService(deps) {
1675
1788
  }
1676
1789
  try {
1677
1790
  await verifyParentPostOpen(target, wsCanonical, fh);
1791
+ assertActiveGeneration();
1678
1792
  await fh.writeFile("", "utf8");
1679
1793
  } finally {
1680
1794
  await fh.close();
@@ -1682,6 +1796,7 @@ function createDaemonWorkspaceService(deps) {
1682
1796
  } else if (action === "overwrote") {
1683
1797
  let overwriteFh;
1684
1798
  try {
1799
+ assertActiveGeneration();
1685
1800
  overwriteFh = await fs2.open(
1686
1801
  target,
1687
1802
  fsConstants.O_WRONLY | (fsConstants.O_NOFOLLOW ?? 0)
@@ -1706,11 +1821,13 @@ function createDaemonWorkspaceService(deps) {
1706
1821
  }
1707
1822
  try {
1708
1823
  await verifyParentPostOpen(target, wsCanonical, overwriteFh);
1824
+ assertActiveGeneration();
1709
1825
  await overwriteFh.truncate(0);
1710
1826
  } finally {
1711
1827
  await overwriteFh.close();
1712
1828
  }
1713
1829
  }
1830
+ assertActiveGeneration();
1714
1831
  publishWorkspaceEvent({
1715
1832
  type: "workspace_initialized",
1716
1833
  data: { path: target, action },
@@ -1719,6 +1836,7 @@ function createDaemonWorkspaceService(deps) {
1719
1836
  return { path: target, action };
1720
1837
  },
1721
1838
  async restartMcpServer(ctx, serverName, opts) {
1839
+ assertActiveGeneration();
1722
1840
  const params = { serverName };
1723
1841
  if (opts?.entryIndex !== void 0) {
1724
1842
  params["entryIndex"] = opts.entryIndex;
@@ -1748,6 +1866,7 @@ function createDaemonWorkspaceService(deps) {
1748
1866
  }
1749
1867
  throw err;
1750
1868
  }
1869
+ assertActiveGeneration();
1751
1870
  if ("entries" in result) {
1752
1871
  const entries = Array.isArray(result.entries) ? result.entries : [];
1753
1872
  if (!Array.isArray(result.entries)) {
@@ -1807,15 +1926,17 @@ function createDaemonWorkspaceService(deps) {
1807
1926
  return result;
1808
1927
  },
1809
1928
  async reload(ctx) {
1929
+ assertActiveGeneration();
1810
1930
  if (deps.reloadDaemonEnv) {
1811
1931
  try {
1812
- await deps.reloadDaemonEnv(boundWorkspace);
1932
+ await deps.reloadDaemonEnv(boundWorkspace, assertGenerationOpen);
1813
1933
  } catch (err) {
1814
1934
  writeStderrLine(
1815
1935
  `qwen serve: daemon reload failed: ${err instanceof Error ? err.message : String(err)}`
1816
1936
  );
1817
1937
  }
1818
1938
  }
1939
+ assertActiveGeneration();
1819
1940
  let childReloaded = false;
1820
1941
  let env = {
1821
1942
  updatedKeys: [],
@@ -1844,6 +1965,7 @@ function createDaemonWorkspaceService(deps) {
1844
1965
  writeStderrLine(`qwen serve: reload failed: ${childError}`);
1845
1966
  }
1846
1967
  }
1968
+ assertActiveGeneration();
1847
1969
  publishWorkspaceEvent({
1848
1970
  type: "settings_reloaded",
1849
1971
  data: {
@@ -1866,9 +1988,10 @@ function createDaemonWorkspaceService(deps) {
1866
1988
  };
1867
1989
  },
1868
1990
  invalidateWorkspaceSkillsStatus() {
1869
- lastWorkspaceSkillsStatus = void 0;
1991
+ invalidateWorkspaceSkillsSnapshot();
1870
1992
  },
1871
1993
  async refreshExtensionsForAllSessions() {
1994
+ assertActiveGeneration();
1872
1995
  try {
1873
1996
  if (!refreshExtensionsForAllSessionsOnBridge) {
1874
1997
  throw new Error("refreshExtensionsForAllSessions is not wired");
@@ -1880,7 +2003,7 @@ function createDaemonWorkspaceService(deps) {
1880
2003
  );
1881
2004
  return { refreshed: 0, failed: 1 };
1882
2005
  } finally {
1883
- lastWorkspaceSkillsStatus = void 0;
2006
+ invalidateWorkspaceSkillsSnapshot();
1884
2007
  }
1885
2008
  }
1886
2009
  };