@qwen-code/qwen-code 0.23.1-preview.1 → 0.23.1-preview.2

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 (313) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +7 -7
  2. package/bundled/qc-helper/docs/features/channels/dingtalk.md +26 -0
  3. package/bundled/qc-helper/docs/features/commands.md +71 -6
  4. package/bundled/qc-helper/docs/features/skills.md +40 -0
  5. package/chunks/{MaxSizedBox-5ARLO5PR.js → MaxSizedBox-IYIQ43IZ.js} +26 -27
  6. package/chunks/{StandaloneSessionPicker-T6B322CB.js → StandaloneSessionPicker-AWB2OHX6.js} +44 -45
  7. package/chunks/{acp-startup-profiler-6ULXXQMS.js → acp-startup-profiler-BAL4LJTN.js} +2 -2
  8. package/chunks/{acpAgent-WTDEY5KD.js → acpAgent-ZC57OLS4.js} +148 -96
  9. package/chunks/{agent-NXPUXEVZ.js → agent-GEBPAEJS.js} +16 -17
  10. package/chunks/{agent-headless-QQZTWOKO.js → agent-headless-63ZEYAJK.js} +16 -17
  11. package/chunks/{artifact-tool-DFVVJXL2.js → artifact-tool-P52OKKEF.js} +1 -1
  12. package/chunks/{askUserQuestion-GF7VQ44M.js → askUserQuestion-3KAYLLMM.js} +2 -2
  13. package/chunks/{bridge-OHY5OGOZ.js → bridge-MHWO5I5T.js} +30 -31
  14. package/chunks/{channel-management-service-ZDDG3G5S.js → channel-management-service-NFRZXQFO.js} +4 -4
  15. package/chunks/{channel-settings-store-7BJAS2SU.js → channel-settings-store-T7PMIHKC.js} +36 -37
  16. package/chunks/{channel-worker-group-2ISMRENV.js → channel-worker-group-O2BWK5F7.js} +5 -5
  17. package/chunks/{channel-worker-manager-VSRPVPRH.js → channel-worker-manager-4WP7VJOD.js} +5 -5
  18. package/chunks/{channel-worker-supervisor-SRJBK72Z.js → channel-worker-supervisor-CCUXD6J5.js} +3 -3
  19. package/chunks/{chunk-4VZCORNT.js → chunk-22QOQKG4.js} +1 -1
  20. package/chunks/{chunk-AHBLRVD5.js → chunk-2C3XDBGL.js} +4 -4
  21. package/chunks/{chunk-WTW36TJ3.js → chunk-2EKVPSIJ.js} +1 -1
  22. package/chunks/{chunk-ZTAVGFKA.js → chunk-37SOBIA3.js} +1 -1
  23. package/chunks/{chunk-IXSGOSEG.js → chunk-3RMVM33U.js} +28 -25
  24. package/chunks/{chunk-H3UDNQLO.js → chunk-4OCYWXKF.js} +1 -1
  25. package/chunks/{chunk-D6PIMKY3.js → chunk-4VY3ITHR.js} +4 -4
  26. package/chunks/{chunk-J3O5I5ZD.js → chunk-5FYGZ7E3.js} +3 -3
  27. package/chunks/{chunk-4JAGXZR3.js → chunk-5V4B3EWA.js} +1 -1
  28. package/chunks/{chunk-HFTB354P.js → chunk-5Z4FCEPY.js} +60 -6
  29. package/chunks/{chunk-VDXYYVCD.js → chunk-65GHQ4FX.js} +65 -10
  30. package/chunks/{chunk-32YDNYXP.js → chunk-6KYWU726.js} +1 -1
  31. package/chunks/{chunk-4HC4DYKN.js → chunk-6RZX2HIH.js} +1 -1
  32. package/chunks/{chunk-IFD3BTEA.js → chunk-733KQL63.js} +3 -3
  33. package/chunks/{chunk-MWHY26G3.js → chunk-75UQFGFE.js} +1 -1
  34. package/chunks/{chunk-QWZOOIR3.js → chunk-7PMKXGRP.js} +4 -4
  35. package/chunks/{chunk-KE3Q4JMY.js → chunk-AIMZIXZM.js} +3 -3
  36. package/chunks/{chunk-G34YLYCS.js → chunk-ANVC5CSK.js} +10 -10
  37. package/chunks/{chunk-SAZS4IWW.js → chunk-AUJOWIT5.js} +3 -3
  38. package/chunks/{chunk-Z6WZPXQH.js → chunk-AWDF462I.js} +1 -1
  39. package/chunks/{chunk-47BZVBTE.js → chunk-AX23QSX3.js} +3 -3
  40. package/chunks/{chunk-7BZS4ZDV.js → chunk-B5FF3LRF.js} +17 -17
  41. package/chunks/{chunk-TMWB67LS.js → chunk-BNWIX6BM.js} +2 -2
  42. package/chunks/{chunk-GZWW2QWR.js → chunk-C4NXRR7T.js} +2 -2
  43. package/chunks/{chunk-DNPHKA72.js → chunk-C55CR5I4.js} +6 -6
  44. package/chunks/{chunk-JPEAQJNS.js → chunk-C7M445SS.js} +1 -1
  45. package/chunks/{chunk-R355CUNQ.js → chunk-CLKE4IY3.js} +1 -77
  46. package/chunks/{chunk-VUSSAGKI.js → chunk-E4VX6LXB.js} +1 -1
  47. package/chunks/{chunk-GMNLYQOS.js → chunk-E6TI726I.js} +1 -1
  48. package/chunks/{chunk-Y3ZKI4RQ.js → chunk-EGRFCIXD.js} +19 -17
  49. package/chunks/{chunk-D4CU6DKR.js → chunk-EPZWBYQI.js} +5 -5
  50. package/chunks/{chunk-43NOB5NM.js → chunk-ERMAXPXA.js} +1 -1
  51. package/chunks/{chunk-KPXRFTT7.js → chunk-FETY36NQ.js} +1 -1
  52. package/chunks/{chunk-P6LATTDG.js → chunk-FWH4736Q.js} +3 -3
  53. package/chunks/{chunk-43JNQAHO.js → chunk-FXYNIZPW.js} +2 -2
  54. package/chunks/{chunk-4VUVBN3Y.js → chunk-G6UUOCUT.js} +87 -0
  55. package/chunks/{chunk-XY3USGFE.js → chunk-GEV66YGE.js} +1 -1
  56. package/chunks/{chunk-VEFRT7NX.js → chunk-H3Q3RSKZ.js} +1 -1
  57. package/chunks/{chunk-BKNY7PDI.js → chunk-HPE4LEWX.js} +1 -1
  58. package/chunks/{chunk-E4L5BM2B.js → chunk-HWZOOSEB.js} +4 -4
  59. package/chunks/{chunk-MNEYUNOE.js → chunk-HZS3JRQW.js} +2 -2
  60. package/chunks/{chunk-2RYWGYB3.js → chunk-I67KJGM6.js} +3 -3
  61. package/chunks/{chunk-O2GG7H4C.js → chunk-I7UNCY24.js} +2 -2
  62. package/chunks/{chunk-JLWFGYXU.js → chunk-IGOIYZBG.js} +2 -2
  63. package/chunks/{chunk-L4R7BCVV.js → chunk-IMWCUWQT.js} +1 -1
  64. package/chunks/{chunk-QMFOYPGV.js → chunk-J3VZF2AL.js} +2 -2
  65. package/chunks/{chunk-XOVVCGZX.js → chunk-JOV46WGX.js} +1 -1
  66. package/chunks/{chunk-LMJQSPWB.js → chunk-KA5HR3G2.js} +1 -1
  67. package/chunks/{chunk-VY6UVU7G.js → chunk-KAZWXVI3.js} +2 -2
  68. package/chunks/{chunk-IQN2CCIE.js → chunk-KP5QK3FB.js} +3 -3
  69. package/chunks/{chunk-2WGJG2KW.js → chunk-KTLT7VCX.js} +4 -4
  70. package/chunks/{chunk-IKLFS6SC.js → chunk-L36LLVA5.js} +3 -3
  71. package/chunks/{chunk-MUZCSTOO.js → chunk-LD53HMPV.js} +4 -4
  72. package/chunks/{chunk-P4RUUG64.js → chunk-LTCI6ZOJ.js} +1 -1
  73. package/chunks/{chunk-SN5FV4FY.js → chunk-LYHYXJJ3.js} +3 -3
  74. package/chunks/{chunk-RDKXZ2LS.js → chunk-LYT2OU7D.js} +1 -1
  75. package/chunks/{chunk-GVVCLL2P.js → chunk-MFCWL4LI.js} +9 -9
  76. package/chunks/{chunk-RPBMP6BN.js → chunk-MWIO7MF6.js} +3 -0
  77. package/chunks/{chunk-OECNP26L.js → chunk-N6S3NUYJ.js} +1 -1
  78. package/chunks/{chunk-NGX4NUNP.js → chunk-O2FEO2CB.js} +131 -6
  79. package/chunks/{chunk-GXZHYPHZ.js → chunk-OFB36ZBA.js} +4 -1
  80. package/chunks/{chunk-LDS57224.js → chunk-OWCFKIFQ.js} +1 -1
  81. package/chunks/{chunk-ZAZ3NFL6.js → chunk-P5Z7VD23.js} +237 -52
  82. package/chunks/{chunk-5MTARK4Y.js → chunk-PLUAIHZO.js} +4 -4
  83. package/chunks/{chunk-KK2GZGBK.js → chunk-PMGWY6ZP.js} +10 -10
  84. package/chunks/{chunk-JRYL3T2O.js → chunk-PQSCGZT2.js} +1 -1
  85. package/chunks/{chunk-UKKYOIVT.js → chunk-QAZ2MGYT.js} +2 -2
  86. package/chunks/{chunk-CZACBHAW.js → chunk-QQGAR64U.js} +4 -4
  87. package/chunks/{chunk-ER273QE6.js → chunk-QW7BUOSI.js} +2 -2
  88. package/chunks/{chunk-RVNS7NWN.js → chunk-R7TKFIQO.js} +1 -1
  89. package/chunks/{chunk-GCFZ2LAX.js → chunk-RCUWMVN3.js} +1 -1
  90. package/chunks/{chunk-CWNC7M73.js → chunk-RD3VPM4E.js} +2 -2
  91. package/chunks/{chunk-KJJPJYHI.js → chunk-REDVV5NC.js} +7 -7
  92. package/chunks/{chunk-4IQKBLTQ.js → chunk-RGAQDQ3Z.js} +9 -9
  93. package/chunks/{chunk-WXC6OAWD.js → chunk-RH344FKI.js} +1 -1
  94. package/chunks/{chunk-64MQTIX7.js → chunk-RPFJJ33Z.js} +2 -2
  95. package/chunks/{chunk-LPBQODMR.js → chunk-RQNAO42A.js} +4 -4
  96. package/chunks/{chunk-LK7S2D6V.js → chunk-RRCNEW2A.js} +4 -4
  97. package/chunks/{chunk-O45WBTNS.js → chunk-RSU3I6UL.js} +3 -3
  98. package/chunks/{chunk-AQ5NAGWI.js → chunk-RUMSY4ES.js} +4 -4
  99. package/chunks/{chunk-QSC5YOEC.js → chunk-SD7Y2PMC.js} +1 -1
  100. package/chunks/{chunk-SFMCYMVF.js → chunk-SHK2SIR5.js} +4 -4
  101. package/chunks/{chunk-XUSOYE2I.js → chunk-SHX2HIE7.js} +1 -1
  102. package/chunks/{chunk-PTFFWTTO.js → chunk-SI6Q52UI.js} +3 -3
  103. package/chunks/{chunk-JBTZUFR4.js → chunk-T7TP5UQL.js} +6 -6
  104. package/chunks/{chunk-YCDL2SAS.js → chunk-TDHVOZ65.js} +2 -2
  105. package/chunks/{chunk-PZV2FASB.js → chunk-TRWQQBVH.js} +1 -1
  106. package/chunks/{chunk-I72PHOKL.js → chunk-TSLRORQR.js} +93 -95
  107. package/chunks/{chunk-UEZOXZNI.js → chunk-TXAEXF2B.js} +786 -366
  108. package/chunks/{chunk-4F2QRVW6.js → chunk-UTVIIA7N.js} +1 -1
  109. package/chunks/{chunk-WR3SH3EY.js → chunk-VMFPZXRT.js} +131 -60
  110. package/chunks/{chunk-XHGGYCTA.js → chunk-VYCJITND.js} +1 -1
  111. package/chunks/{chunk-5YY5MZT6.js → chunk-WFXD5OZH.js} +1 -1
  112. package/chunks/{chunk-URSCX7S7.js → chunk-WLZRMF3C.js} +2 -2
  113. package/chunks/{chunk-P5LDR7FI.js → chunk-WQBR7LN5.js} +3 -3
  114. package/chunks/{chunk-N7VURC4O.js → chunk-WXFCI3O5.js} +2 -2
  115. package/chunks/{chunk-HJ34U5J4.js → chunk-XNC2TCUO.js} +4 -4
  116. package/chunks/{chunk-N7EYO2E7.js → chunk-XQ4RDO5B.js} +1 -1
  117. package/chunks/{chunk-JOPC3FND.js → chunk-XX4MBBFW.js} +5 -5
  118. package/chunks/{chunk-TDP7UULF.js → chunk-Y3C5COGI.js} +1 -1
  119. package/chunks/{chunk-54TF2ZIQ.js → chunk-YLFICBYK.js} +3 -3
  120. package/chunks/{chunk-4MCY33Y2.js → chunk-Z6DDPSGJ.js} +1 -1
  121. package/chunks/{chunk-WEXA2DNG.js → chunk-Z6KFLEG7.js} +13 -0
  122. package/chunks/{chunk-PZUOHCWI.js → chunk-ZNI3V2XA.js} +2 -2
  123. package/chunks/{chunk-6UIACMGH.js → chunk-ZRVFHLLK.js} +1 -1
  124. package/chunks/{chunk-NAKALAL4.js → chunk-ZT3XUGSU.js} +32 -8
  125. package/chunks/{config-utils-QXDOTXEQ.js → config-utils-F4CFJ4MW.js} +30 -31
  126. package/chunks/{contextCommand-RN4KARWC.js → contextCommand-OIIGGOMU.js} +28 -29
  127. package/chunks/{core-runtime-NAZCOKHB.js → core-runtime-JEHLOGMB.js} +26 -27
  128. package/chunks/{create-sub-session-BCSM4WKB.js → create-sub-session-MVFBE5RA.js} +35 -30
  129. package/chunks/{create-sub-session-BQ3SE4TX.js → create-sub-session-TGIX63YU.js} +2 -2
  130. package/chunks/{cron-create-D6HQ7I7I.js → cron-create-GTPVMJCF.js} +1 -1
  131. package/chunks/{cron-delete-KK3D2SQV.js → cron-delete-ZBK27Z4K.js} +1 -1
  132. package/chunks/{cron-list-VBF3IZMF.js → cron-list-KTFKFDKC.js} +1 -1
  133. package/chunks/{daemon-git-worktree-guard-3K5CAU36.js → daemon-git-worktree-guard-5FTKLJOU.js} +26 -27
  134. package/chunks/{daemon-status-provider-4X3ZZQTZ.js → daemon-status-provider-P6A5MPMW.js} +35 -36
  135. package/chunks/{daemon-trust-policy-R45CFUJA.js → daemon-trust-policy-ZJ3NFYUO.js} +32 -33
  136. package/chunks/{daemon-trust-policy-monitor-DSSFCO3K.js → daemon-trust-policy-monitor-6SDLEW7S.js} +32 -33
  137. package/chunks/{deferred-core-runtime-UO2M6WYI.js → deferred-core-runtime-DWOXIU5S.js} +26 -27
  138. package/chunks/{display-image-EVVTBVYE.js → display-image-CTNHJRZC.js} +4 -4
  139. package/chunks/{dist-PH5RSTEA.js → dist-3H3WODVS.js} +1 -1
  140. package/chunks/{dist-UVHW2U56.js → dist-AI25RVRA.js} +1 -1
  141. package/chunks/{dist-AFH3BMZZ.js → dist-I74QLLQS.js} +1 -1
  142. package/chunks/{dist-SIHF5MU2.js → dist-NXW4DUUX.js} +1 -1
  143. package/chunks/{dist-MK5PPBRF.js → dist-P6YWBITG.js} +670 -17
  144. package/chunks/{dist-QUU7TVE3.js → dist-T4PRA5EZ.js} +1 -1
  145. package/chunks/{dist-SB2XRXZA.js → dist-VCAS67N5.js} +1 -1
  146. package/chunks/{dist-3T5MDUHP.js → dist-XINEKB5A.js} +1 -1
  147. package/chunks/{dist-R5Y34V6T.js → dist-YNQU4CKC.js} +2 -2
  148. package/chunks/{edit-VNBCTRWP.js → edit-WPVXLL3T.js} +16 -17
  149. package/chunks/{en-JMR535HP.js → en-YJNRUQG4.js} +1 -1
  150. package/chunks/{enter-worktree-CEVK7MQ2.js → enter-worktree-5A6VW6BN.js} +4 -4
  151. package/chunks/{enterPlanMode-4KMZMUIA.js → enterPlanMode-JSODW7E2.js} +16 -17
  152. package/chunks/{environment-S2HYQDON.js → environment-5LLJ3I3W.js} +28 -29
  153. package/chunks/{errors-DAAN5TL7.js → errors-IQT3YZEP.js} +28 -29
  154. package/chunks/{exit-worktree-D3YE6MUN.js → exit-worktree-QV7E7KP6.js} +4 -4
  155. package/chunks/{exitPlanMode-HR36HG3D.js → exitPlanMode-DDVFYNW4.js} +16 -17
  156. package/chunks/{fast-path-4IWSW3UV.js → fast-path-PAUQQEVU.js} +2 -2
  157. package/chunks/{glob-IZYB2XH2.js → glob-SQ7CTZ7F.js} +16 -17
  158. package/chunks/{goal-tools-VGUPKQDJ.js → goal-tools-UWZRCLQB.js} +16 -17
  159. package/chunks/{grep-OUVLNXG7.js → grep-BLHF2S5D.js} +2 -2
  160. package/chunks/{handleAutoUpdate-D56FMDTW.js → handleAutoUpdate-RUPZZTSG.js} +29 -30
  161. package/chunks/{i18n-BKE5WO6T.js → i18n-SF5MPWEB.js} +27 -28
  162. package/chunks/{image-gen-SHVQ3XID.js → image-gen-Q3RUTVKR.js} +1 -1
  163. package/chunks/{initializer-MS4SGEHF.js → initializer-CK4WPYZG.js} +32 -33
  164. package/chunks/{installationInfo-542MGC4S.js → installationInfo-IRPQEYRF.js} +26 -27
  165. package/chunks/{list-H6XTKUWL.js → list-E3PS3EBJ.js} +35 -36
  166. package/chunks/{list-agents-ULYBGJXC.js → list-agents-I5TRH3J7.js} +2 -2
  167. package/chunks/{llm-3NUC4EJY.js → llm-JQKBOYAF.js} +67 -68
  168. package/chunks/{llm-content-generator-R4NL3OQN.js → llm-content-generator-2QWGBW42.js} +2 -2
  169. package/chunks/{loadedSettingsAdapter-3XLKYDVT.js → loadedSettingsAdapter-DGXGVYZS.js} +32 -33
  170. package/chunks/{loggingContentGenerator-ZYSWVNEO.js → loggingContentGenerator-ZYURLJKK.js} +18 -19
  171. package/chunks/{loop-wakeup-B27BEYRL.js → loop-wakeup-HL6XOWI4.js} +2 -2
  172. package/chunks/{ls-3IIMMVKF.js → ls-YV7RKLKY.js} +1 -1
  173. package/chunks/{lsp-VJAT7XKS.js → lsp-NO3AMRZT.js} +1 -1
  174. package/chunks/{managed-npm-update-L2I53ZAI.js → managed-npm-update-HTHR63EA.js} +26 -27
  175. package/chunks/{mcp-4PIXQASW.js → mcp-I7G2AEWS.js} +32 -33
  176. package/chunks/{monitor-O2YQTOZZ.js → monitor-4R76BCRZ.js} +16 -17
  177. package/chunks/{nonInteractiveCli-LV7CDBA2.js → nonInteractiveCli-24OQ3VP2.js} +64 -65
  178. package/chunks/{notebook-edit-4RE2ALH4.js → notebook-edit-PPSH7FEX.js} +16 -17
  179. package/chunks/{openaiContentGenerator-7ND7K5CP.js → openaiContentGenerator-K7V5EO7F.js} +10 -10
  180. package/chunks/{pidfile-UFTLQ7NP.js → pidfile-TGIUY2GG.js} +26 -27
  181. package/chunks/{processUtils-3XBB4FYV.js → processUtils-3USXUQWX.js} +2 -2
  182. package/chunks/{prompt-terminal-ledger-2QASOGMM.js → prompt-terminal-ledger-XHVZRXJI.js} +27 -28
  183. package/chunks/{qwenContentGenerator-AELTUTH6.js → qwenContentGenerator-MPBOQB64.js} +18 -19
  184. package/chunks/{read-file-PDWHZPHX.js → read-file-R256LDWQ.js} +4 -4
  185. package/chunks/{read-mcp-resource-YXJZ75UB.js → read-mcp-resource-D3N75DGF.js} +1 -1
  186. package/chunks/{record-artifact-WJDOV6XU.js → record-artifact-Q5CRGJTP.js} +2 -2
  187. package/chunks/{report-findings-Q4UACKWR.js → report-findings-TJ34R7QK.js} +3 -3
  188. package/chunks/{request-shutdown-2YZ3E3GH.js → request-shutdown-LRKMTBAD.js} +6 -6
  189. package/chunks/{resumeHistoryUtils-QRXZEEBA.js → resumeHistoryUtils-S43LTFHD.js} +30 -31
  190. package/chunks/{ripGrep-KSOOLE6H.js → ripGrep-L7HPZ75Y.js} +7 -7
  191. package/chunks/{run-qwen-serve-RTAREPT6.js → run-qwen-serve-CTFL5R6U.js} +46 -46
  192. package/chunks/{runtime-ESFSCJRZ.js → runtime-FS5TL6P7.js} +37 -38
  193. package/chunks/{scheduled-tasks-6ZHRNBH6.js → scheduled-tasks-QXPV3Q35.js} +32 -33
  194. package/chunks/{scheduler-DQI6KV7T.js → scheduler-EXU5HMVK.js} +28 -29
  195. package/chunks/{send-message-PQCVSVMN.js → send-message-GQKXGMPI.js} +7 -7
  196. package/chunks/{serve-FY7ZEW52.js → serve-ITJC7WNN.js} +32 -33
  197. package/chunks/{server-KNDY6K5F.js → server-6JQY3PTU.js} +66 -67
  198. package/chunks/{session-MCEPXAZP.js → session-PJDEKXD4.js} +85 -72
  199. package/chunks/{session-attachments-root-OLNAE6GF.js → session-attachments-root-L37ORSST.js} +26 -27
  200. package/chunks/{session-pr-refresh-HKJHQQQK.js → session-pr-refresh-WIFD52YL.js} +31 -32
  201. package/chunks/{settings-VXO4WBMK.js → settings-LO6J5SAZ.js} +31 -32
  202. package/chunks/{shell-U263OTES.js → shell-ANAFVYGR.js} +16 -17
  203. package/chunks/{skill-SDODGBKL.js → skill-SHJWKSPH.js} +10 -57
  204. package/chunks/{skill-settings-YEIA22QJ.js → skill-settings-GX3XHZ5Q.js} +31 -32
  205. package/chunks/{spawnChannel-4WJZVFPP.js → spawnChannel-WE42VBKM.js} +28 -29
  206. package/chunks/{standalone-update-ZWVQUO64.js → standalone-update-CWDIKJRP.js} +28 -29
  207. package/chunks/{start-opentui-ui-BFYCJQRZ.js → start-opentui-ui-BBHGFOTF.js} +70 -71
  208. package/chunks/{startInteractiveUI-JYAFCMHL.js → startInteractiveUI-FQX7LUYP.js} +172 -110
  209. package/chunks/{syntheticOutput-AUAJBNXR.js → syntheticOutput-D2P5V6RG.js} +2 -2
  210. package/chunks/{task-create-LD5ISM3E.js → task-create-PMAFST2T.js} +7 -7
  211. package/chunks/{task-list-YISJ4RJA.js → task-list-R2HSY2NC.js} +1 -1
  212. package/chunks/{task-stop-65ZOVATJ.js → task-stop-BFSKRTGV.js} +1 -1
  213. package/chunks/{task-update-AAN4ZVEY.js → task-update-JYC57USF.js} +7 -7
  214. package/chunks/{team-create-KU7MABNO.js → team-create-WKTPCH6D.js} +16 -17
  215. package/chunks/{team-delete-XFRRTJTT.js → team-delete-CBHVBTPB.js} +1 -1
  216. package/chunks/{team-plan-approval-DPB377A3.js → team-plan-approval-Y23DL7WR.js} +16 -17
  217. package/chunks/{terminal-image-renderer-WGWRENOF.js → terminal-image-renderer-B646HBDW.js} +28 -29
  218. package/chunks/{theme-manager-GBUFULSO.js → theme-manager-BNWESY26.js} +26 -27
  219. package/chunks/{todoWrite-G7NT4IFP.js → todoWrite-5ERKFWAK.js} +3 -5
  220. package/chunks/{tool-search-6YUXHBPT.js → tool-search-PVQ5O5Y2.js} +9 -9
  221. package/chunks/{total-session-admission-54R2JQ5L.js → total-session-admission-P5Z43KNW.js} +30 -31
  222. package/chunks/{trustedFolders-KAJIDJTH.js → trustedFolders-FH2LT2MZ.js} +27 -28
  223. package/chunks/{update-relaunch-XM4IWBFD.js → update-relaunch-WOWTKJSN.js} +5 -5
  224. package/chunks/{updateCheck-W6UZFURI.js → updateCheck-3MYFMM35.js} +28 -29
  225. package/chunks/{useAutoAcceptIndicator-LAWYHY3U.js → useAutoAcceptIndicator-Q7ZRRRKO.js} +33 -34
  226. package/chunks/{validateNonInterActiveAuth-7WCKHRN2.js → validateNonInterActiveAuth-MYEWJX3G.js} +61 -62
  227. package/chunks/{version-3ZU43RJ6.js → version-RO2FPO76.js} +1 -1
  228. package/chunks/{web-fetch-QHI2SQL4.js → web-fetch-QAKY2LUA.js} +4 -4
  229. package/chunks/{web-search-3KZZKWNY.js → web-search-XA5Z4ZCD.js} +2 -2
  230. package/chunks/{workflow-HRW7Y2X4.js → workflow-QFIOCMDM.js} +18 -19
  231. package/chunks/{workspace-providers-status-KTGCWCPC.js → workspace-providers-status-B2UD7RAG.js} +35 -36
  232. package/chunks/{workspace-registration-store-LHLPPWNE.js → workspace-registration-store-VZLRTI3Q.js} +1 -1
  233. package/chunks/{workspace-registry-X34MLN52.js → workspace-registry-GYOGG6TM.js} +30 -31
  234. package/chunks/{workspace-runtime-coordinator-U4PW4P7K.js → workspace-runtime-coordinator-7KRXGQ4V.js} +31 -32
  235. package/chunks/{workspace-service-KD7BCGYL.js → workspace-service-DJEYGJE4.js} +36 -37
  236. package/chunks/{workspace-skills-status-YJGO6Y3T.js → workspace-skills-status-MOKNESUC.js} +33 -34
  237. package/chunks/{workspace-trust-reconciler-EUYHISCH.js → workspace-trust-reconciler-AXOSUTQW.js} +36 -37
  238. package/chunks/{write-file-EBSB34NJ.js → write-file-QOYVHAKK.js} +18 -19
  239. package/chunks/{zh-TW-W2GNP2IU.js → zh-TW-N2TBF2F2.js} +1 -1
  240. package/chunks/{zh-DVFYHRK5.js → zh-VBFCRQBL.js} +1 -1
  241. package/chunks/{zoom-image-UJ5VKWKP.js → zoom-image-UCCLGFNC.js} +4 -4
  242. package/cli.js +13 -13
  243. package/export-transcript-document.js +2 -2
  244. package/locales/en.js +2 -2
  245. package/locales/zh-TW.js +2 -2
  246. package/locales/zh.js +2 -2
  247. package/package.json +3 -3
  248. package/web-shell/assets/{abnfDiagram-VCTEODGH-Dur--luQ.js → abnfDiagram-VCTEODGH-CTstZpXw.js} +1 -1
  249. package/web-shell/assets/{arc-tYLobxFi.js → arc-DKW0mbPo.js} +1 -1
  250. package/web-shell/assets/{architectureDiagram-5GKGNRK7-IG6aXD03.js → architectureDiagram-5GKGNRK7-DkMpJ42t.js} +1 -1
  251. package/web-shell/assets/{blockDiagram-NRAW4CY4-C6eBSkfA.js → blockDiagram-NRAW4CY4-7Cp1_4i3.js} +1 -1
  252. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BrX3HJqB.js → c4Diagram-UCG6FXSJ-BfaoSlBK.js} +1 -1
  253. package/web-shell/assets/channel-CQx7VSAp.js +1 -0
  254. package/web-shell/assets/{chunk-2Q5K7J3B-B3fcJ8ee.js → chunk-2Q5K7J3B-_n1qzAio.js} +1 -1
  255. package/web-shell/assets/{chunk-5VM5RSS4-CeC90yKM.js → chunk-5VM5RSS4-0cira5ZV.js} +1 -1
  256. package/web-shell/assets/{chunk-F27PBJKO-CW44RVki.js → chunk-F27PBJKO-DseRXSHC.js} +1 -1
  257. package/web-shell/assets/{chunk-G27WJ6UU-D1PAMukD.js → chunk-G27WJ6UU-BehQWin0.js} +1 -1
  258. package/web-shell/assets/{chunk-JWPE2WC7-Dt3Y2Fvx.js → chunk-JWPE2WC7-B5ftg1Bb.js} +1 -1
  259. package/web-shell/assets/{chunk-LCL6LL3I-CZHw2lLI.js → chunk-LCL6LL3I-D7rnbVdk.js} +1 -1
  260. package/web-shell/assets/{chunk-POPQ4Y6H-ysNAdTGx.js → chunk-POPQ4Y6H-2Bp-Orju.js} +1 -1
  261. package/web-shell/assets/{chunk-SVP7TREG-BdNXW6YQ.js → chunk-SVP7TREG-CD2goGva.js} +1 -1
  262. package/web-shell/assets/{chunk-XXDRQBXY-DgqQ9UA8.js → chunk-XXDRQBXY-DzQt-Rji.js} +1 -1
  263. package/web-shell/assets/classDiagram-DTDB5LWJ-C-Uz8hHk.js +1 -0
  264. package/web-shell/assets/classDiagram-v2-JRS7N3AN-C-Uz8hHk.js +1 -0
  265. package/web-shell/assets/{cose-bilkent-JH36ORCC-BILImXzJ.js → cose-bilkent-JH36ORCC-C-BZXSUn.js} +1 -1
  266. package/web-shell/assets/{cynefin-OW5HDTMX-DR88Pund.js → cynefin-OW5HDTMX-BTcvowe1.js} +1 -1
  267. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-BYFbfkA6.js → cynefinDiagram-5FMLGOSQ-BoUE6K81.js} +1 -1
  268. package/web-shell/assets/{dagre-3AP2YEHR-rfpyc6sX.js → dagre-3AP2YEHR-BHxy9xeB.js} +1 -1
  269. package/web-shell/assets/{diagram-S7CK7UJ4-BJxLmEwH.js → diagram-S7CK7UJ4-DMiJIvDT.js} +1 -1
  270. package/web-shell/assets/{diagram-UQ7AKVKN-H34xm7k3.js → diagram-UQ7AKVKN-DXV09Aes.js} +1 -1
  271. package/web-shell/assets/{diagram-VSXAHHWV-HYxhwNLx.js → diagram-VSXAHHWV-CocpRomV.js} +1 -1
  272. package/web-shell/assets/{diagram-VX7I27RA-BJazso8F.js → diagram-VX7I27RA-DL7nqtb4.js} +1 -1
  273. package/web-shell/assets/{diagram-Z3DM3KII-Clje1aNy.js → diagram-Z3DM3KII-CPZ2Jux_.js} +1 -1
  274. package/web-shell/assets/{ebnfDiagram-PWID7BFC-M93YBkFh.js → ebnfDiagram-PWID7BFC-BX-eVNsX.js} +1 -1
  275. package/web-shell/assets/{erDiagram-SSCWMZ5O-DY8XzSHU.js → erDiagram-SSCWMZ5O-CPy_Ir6y.js} +1 -1
  276. package/web-shell/assets/{flowDiagram-A5DVABFB-CE6Aylcq.js → flowDiagram-A5DVABFB-eknAOte9.js} +1 -1
  277. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DI-5LL22.js → ganttDiagram-EL5Y4UJY-crAxw_t7.js} +1 -1
  278. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-C7BZWElk.js → gitGraphDiagram-WWUBYQGX-M29pa3Tc.js} +1 -1
  279. package/web-shell/assets/{index-CVyqwW7y.js → index-B4TLaxWs.js} +474 -474
  280. package/web-shell/assets/{index-DclFHns9.js → index-C9R-iojE.js} +1 -1
  281. package/web-shell/assets/index-CCrkEbzz.css +36 -0
  282. package/web-shell/assets/{infoDiagram-RXCK75RN-CGUSy4Pc.js → infoDiagram-RXCK75RN-XqspXdOU.js} +1 -1
  283. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-B5BVks9q.js → ishikawaDiagram-5VMMS53U-C5KFS-7j.js} +1 -1
  284. package/web-shell/assets/{journeyDiagram-EYS64GPL-CFh6Tf7h.js → journeyDiagram-EYS64GPL-Cc57LVRo.js} +1 -1
  285. package/web-shell/assets/{kanban-definition-3QL26DDD-B7TlxP7c.js → kanban-definition-3QL26DDD-C81OG-AI.js} +1 -1
  286. package/web-shell/assets/{layout-Br_pZq2Q.js → layout-CFVu37BB.js} +1 -1
  287. package/web-shell/assets/{linear-BVlP6fte.js → linear-ChBxdtWf.js} +1 -1
  288. package/web-shell/assets/{mermaid.core-TrcYWoiF.js → mermaid.core-CMLfue0w.js} +6 -6
  289. package/web-shell/assets/{mindmap-definition-FBJOCRG2-BJ4LzqjZ.js → mindmap-definition-FBJOCRG2-DFsvJThp.js} +1 -1
  290. package/web-shell/assets/{pegDiagram-XKGWAZYB-1b_MxlOl.js → pegDiagram-XKGWAZYB-BzpRzM4F.js} +1 -1
  291. package/web-shell/assets/{pieDiagram-E7YTZNPT-B8zl0YhY.js → pieDiagram-E7YTZNPT-Cv0Kankl.js} +1 -1
  292. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CIZO8ukl.js → quadrantDiagram-AXDQQJYC-Bh2BJ3Ay.js} +1 -1
  293. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CepHSbCj.js → railroadDiagram-O6MQD6OU-y8rNDdDS.js} +1 -1
  294. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BCgxkcSW.js → requirementDiagram-EFPCY7ZU-C0m2DKJ_.js} +1 -1
  295. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CE5CcoMM.js → sankeyDiagram-P5KCCOFB-BzdGnSF4.js} +1 -1
  296. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DvgHi-d5.js → sequenceDiagram-WJ2MYXX4-DPzAVmzz.js} +1 -1
  297. package/web-shell/assets/{sizeCapture-X5ZJPWSS-T-fAsCPX.js → sizeCapture-X5ZJPWSS-LcHG28Zh.js} +1 -1
  298. package/web-shell/assets/{stateDiagram-HBIQ2CUA-DYHaul-5.js → stateDiagram-HBIQ2CUA-C1Bzy3IT.js} +1 -1
  299. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-LuuL5byY.js +1 -0
  300. package/web-shell/assets/{swimlanes-XN3QIQJK-Dbz3Qiej.js → swimlanes-XN3QIQJK-Bftk8V64.js} +1 -1
  301. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-COmnNq8s.js +8 -0
  302. package/web-shell/assets/{timeline-definition-24CTP7MA-9NVRts3N.js → timeline-definition-24CTP7MA-BfXHcN1A.js} +1 -1
  303. package/web-shell/assets/{vennDiagram-4TSXK5OY-C7cb7vnH.js → vennDiagram-4TSXK5OY-DRSlI9-V.js} +1 -1
  304. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CG-8Ddjm.js → wardleyDiagram-VM6X3IG4-CaLmqGau.js} +1 -1
  305. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-iGeYAcP4.js → xychartDiagram-S5SC5T6Z-8lgUT6e8.js} +1 -1
  306. package/web-shell/index.html +6 -3
  307. package/chunks/chunk-FKJM6JKY.js +0 -98
  308. package/web-shell/assets/channel-uEkvKckd.js +0 -1
  309. package/web-shell/assets/classDiagram-DTDB5LWJ-DuPsnhWS.js +0 -1
  310. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DuPsnhWS.js +0 -1
  311. package/web-shell/assets/index-FO7JXPnH.css +0 -36
  312. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BcYho9a4.js +0 -1
  313. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6HsOIgX.js +0 -8
@@ -407,13 +407,13 @@ See [Memory](../features/memory) for details on how auto-memory works and how to
407
407
 
408
408
  #### agents
409
409
 
410
- | Setting | Type | Description | Default |
411
- | ------------------------------ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
412
- | `agents.builtin.exploreModel` | string | Model selector for the built-in Explore subagent. Use `inherit` for the main session model, `fast` for `fastModel`, a model ID, or an `authType:model-id` selector. A custom same-name Explore agent keeps its own model configuration. Requires restart. | `inherit` |
413
- | `agents.modelGrades` | object | Maps semantic grade names exposed to the Agent tool to model selectors. Requires restart. | `undefined` |
414
- | `agents.allowedGrades` | array of strings | Optional whitelist of configured model grades the Agent tool may use. Requires restart. | `undefined` |
415
- | `agents.crossSessionMessaging` | boolean | Experimental. Let Qwen Code sessions on this machine send each other messages over a per-session local socket. Turning it on opens this session to peer messages, makes it discoverable to others, and lets its model address them from `send_message`. Requires restart. A workspace may set this to `false` only; a workspace `true` is ignored, with a warning only when it would loosen the operator-set or default value. | `false` |
416
- | `agents.crossSessionInbound` | enum | What happens to messages other sessions send this one: `accept` delivers them, `hold` parks them for `/peers` review without letting the model act, `refuse` opts this session out. Unset means review-class parity (see [Messaging another running session](../features/commands.md#6-messaging-another-running-session)). A workspace may only tighten this (`hold` or `refuse`, when stricter than the operator-set value or the unset default); an effective unrecognized value holds every message. | `undefined` |
410
+ | Setting | Type | Description | Default |
411
+ | ------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
412
+ | `agents.builtin.exploreModel` | string | Model selector for the built-in Explore subagent. Use `inherit` for the main session model, `fast` for `fastModel`, a model ID, or an `authType:model-id` selector. A custom same-name Explore agent keeps its own model configuration. Requires restart. | `inherit` |
413
+ | `agents.modelGrades` | object | Maps semantic grade names exposed to the Agent tool to model selectors. Requires restart. | `undefined` |
414
+ | `agents.allowedGrades` | array of strings | Optional whitelist of configured model grades the Agent tool may use. Requires restart. | `undefined` |
415
+ | `agents.crossSessionMessaging` | boolean | Experimental. Let Qwen Code sessions on this machine send each other messages over a per-session local socket. Turning it on opens this session to peer messages, makes it discoverable to others, and lets its model address them from `send_message`. Requires restart. A workspace may set this to `false` only; a workspace `true` is ignored, with a warning only when it would loosen the operator-set or default value. | `false` |
416
+ | `agents.crossSessionInbound` | enum | What happens to inbound cross-session messages: `accept` delivers them, `hold` parks them for `/peers` review without letting the model act, and `refuse` opts this session out. Unset means [user-minted controllers](../features/commands.md#trusted-controllers) and this session's own child processes auto-deliver, while other sessions use [review-class parity](../features/commands.md#6-messaging-another-running-session); other messages are held for review. A workspace may only tighten this (`hold` or `refuse`, when stricter than the operator-set value or the unset default); an effective unrecognized value holds every message. | `undefined` |
417
417
 
418
418
  #### permissions
419
419
 
@@ -105,6 +105,32 @@ you edit other fields.
105
105
 
106
106
  Set `"useConnectionManager": false` to disable Qwen Code's connection manager and fall back to the SDK's keepalive and automatic reconnect behavior.
107
107
 
108
+ ### Background Agent Responses
109
+
110
+ Background Agent output is sent as soon as each response segment is available.
111
+ Every message is labeled with the Agent name so concurrent work remains
112
+ attributable.
113
+
114
+ To buffer each Agent's notification turn and send it as one labeled message,
115
+ enable aggregation for the DingTalk channel in `settings.json`:
116
+
117
+ ```json
118
+ {
119
+ "channels": {
120
+ "my-dingtalk": {
121
+ "type": "dingtalk",
122
+ "clientId": "$DINGTALK_CLIENT_ID",
123
+ "clientSecret": "$DINGTALK_CLIENT_SECRET",
124
+ "aggregateBackgroundAgentResponses": true
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ Aggregation is disabled by default. A partial labeled message is sent if the
131
+ Agent turn is interrupted, fails before producing a final response, or does
132
+ not finish within ten minutes.
133
+
108
134
  ## Running
109
135
 
110
136
  ```bash
@@ -100,7 +100,7 @@ Commands for managing AI tools and models.
100
100
  | → `auto-edit` | Auto-approve edits (trusted environment) | `/approval-mode auto-edit` |
101
101
  | → `auto` | Classifier-evaluated approval (autonomous) | `/approval-mode auto` |
102
102
  | → `yolo` | Auto-approve everything (quick prototyping) | `/approval-mode yolo` |
103
- | `/peers` | Review messages held from other Qwen Code sessions on this machine | `/peers`, `/peers accept <id>`, `/peers deny all` |
103
+ | `/peers` | Review held peer messages; manage trusted controllers | `/peers`, `/peers accept <id>`, `/peers deny all`, `/peers controllers`, `/peers revoke <id>` |
104
104
  | `/model` | Switch model used in current session | `/model`, `/model <model-id>` (switch immediately) |
105
105
  | `/model --fast` | Set a lighter model for prompt suggestions | `/model --fast qwen3-coder-flash` |
106
106
  | `/model --voice` | Set the model used for voice transcription | `/model --voice <model-id>` |
@@ -711,10 +711,11 @@ These commands are run from the shell as `qwen <subcommand>` before starting an
711
711
 
712
712
  ### Session Management
713
713
 
714
- | Command | Description | Usage Examples |
715
- | -------------------- | ------------------------------------------- | ------------------------------------------------------------ |
716
- | `qwen sessions list` | List recent conversation sessions | `qwen sessions list`, `qwen sessions list --json --limit 50` |
717
- | `qwen sessions ps` | List interactive sessions running right now | `qwen sessions ps`, `qwen sessions ps --json` |
714
+ | Command | Description | Usage Examples |
715
+ | --------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------- |
716
+ | `qwen sessions list` | List recent conversation sessions | `qwen sessions list`, `qwen sessions list --json --limit 50` |
717
+ | `qwen sessions ps` | List interactive sessions running right now | `qwen sessions ps`, `qwen sessions ps --json` |
718
+ | `qwen sessions controllers` | Manage trusted controller tokens | `qwen sessions controllers add --label <name>`, `qwen sessions controllers list` |
718
719
 
719
720
  #### `qwen sessions list`
720
721
 
@@ -780,7 +781,7 @@ object with fields:
780
781
 
781
782
  ```
782
783
  schemaVersion, pid, procStart, pidNs, sessionId, cwd, name, startedAt,
783
- qwenVersion
784
+ qwenVersion, ipcPath (when peer messaging is available)
784
785
  ```
785
786
 
786
787
  Nothing else is written to stdout — an empty listing prints nothing at
@@ -914,3 +915,67 @@ anything else. The model sees it as
914
915
  `<cross_session_message from="own process" origin="own-process">` with a
915
916
  notice that it came from a script or hook the session ran, not from the
916
917
  user.
918
+
919
+ ### Trusted controllers
920
+
921
+ The rule above holds a message from any sender that does not say which
922
+ review class it is in, and a program that is not a Qwen Code session has
923
+ none to say. That is the right default for a stranger, but not for a
924
+ program you chose: a voice front-end, a dictation bridge, an automation
925
+ daemon relaying your own instructions would have every message parked,
926
+ and approving each one by hand defeats the point.
927
+
928
+ You grant such a program delivery by minting it a token:
929
+
930
+ ```bash
931
+ qwen sessions controllers add --label voice-bridge
932
+ ```
933
+
934
+ The token is printed once and is not stored anywhere: the file under
935
+ your Qwen home keeps only its SHA-256 hash, so nothing that later reads
936
+ that file can present the token. Put it in the controller's own
937
+ configuration when the command prints it.
938
+
939
+ A controller presents the token the way any other sender does — as the
940
+ first line of the connection — and takes the socket path from the
941
+ session registry (`qwen sessions ps --json` prints one record per live
942
+ session, `ipcPath` being the address):
943
+
944
+ ```bash
945
+ { printf '%s\n' \
946
+ '{"msgV":1,"type":"auth","token":"'"$QWEN_CONTROLLER_TOKEN"'"}' \
947
+ '{"msgV":1,"msgId":"'"$(uuidgen)"'","type":"user","priority":"next","message":{"role":"user","content":"open the failing test"}}'; \
948
+ } | socat - UNIX-CONNECT:"$SESSION_IPC_PATH"
949
+ ```
950
+
951
+ A message that arrives on a granted token is delivered without
952
+ per-message review, whatever review class either side is in — but it
953
+ still yields to an explicit setting: an `agents.crossSessionInbound` of
954
+ `hold` parks it like anything else, and `refuse` turns it away. Grants
955
+ belong to your Qwen home rather than to one session, so a controller
956
+ reaches whichever sessions you are running, and sessions re-read the
957
+ file on every connection: minting or revoking one takes effect on the
958
+ next connection, with nothing to restart.
959
+
960
+ ```bash
961
+ qwen sessions controllers list # ids, labels, when they were added
962
+ qwen sessions controllers remove c_1a2b # revoke one
963
+ ```
964
+
965
+ `/peers controllers` and `/peers revoke <id>` do the same from inside a
966
+ session. A message that came through a grant is shown as
967
+ `Message from a trusted controller (voice-bridge)`, and appears in
968
+ `/peers` as `[controller] voice-bridge` if a `hold` setting parked it.
969
+
970
+ The model sees such a message as
971
+ `<cross_session_message from="controller" origin="controller" controller="voice-bridge">`,
972
+ with a notice that it relays your own instructions — and the same two
973
+ prohibitions that apply to every other origin: it may not edit
974
+ permission settings, QWEN.md, or config because the message asked, and
975
+ it may not treat the message as you approving a pending confirmation
976
+ prompt. A controller can say what to do next; it cannot answer a prompt
977
+ on your behalf.
978
+
979
+ Anyone who holds the token can send as that controller, so treat it like
980
+ any other credential: give it to one program, keep it out of shared
981
+ config, and revoke it when that program is done.
@@ -190,6 +190,46 @@ disable-model-invocation: true
190
190
 
191
191
  You can combine both fields, but then the Skill is not reachable through the normal user or model invocation paths.
192
192
 
193
+ ### Optional: enforce a rule deterministically (`hooks:`)
194
+
195
+ Everything in a `SKILL.md` body is an instruction to the model: it is prompt text, so following it depends on the model. When a rule must hold no matter what the model decides — refuse to run unless a required value was injected, never touch a protected path — declare a [hook](hooks.md) in the frontmatter instead. Hooks run as code, so they do not depend on the model's cooperation:
196
+
197
+ ```yaml
198
+ ---
199
+ name: gated-skill
200
+ description: Calls the downstream CLI using a runtime-injected session ID
201
+ hooks:
202
+ PreToolUse:
203
+ - matcher: run_shell_command
204
+ hooks:
205
+ - type: command
206
+ command: '"$QWEN_SKILL_ROOT/scripts/gate-session-id.sh"'
207
+ ---
208
+ ```
209
+
210
+ `$QWEN_SKILL_ROOT` is set to the Skill's own directory, so hook commands can reference files shipped alongside `SKILL.md`. The command string is handed to a shell, so **keep the inner quotes**: unquoted, a project path containing a space splits into two words and the gate never runs. **Make the script executable** (`chmod +x`) too. Both mistakes fail open in the same way: the tool call proceeds, and nothing appears in the transcript or the log to say the gate did not run. A `PreToolUse` hook blocks the tool call when it exits with code `2` (stderr is fed back to the model as the reason), or when it prints `hookSpecificOutput.permissionDecision: "deny"`:
211
+
212
+ ```bash
213
+ #!/usr/bin/env bash
214
+ if [ -z "${DOWNSTREAM_SESSION_ID:-}" ]; then
215
+ echo "Required input DOWNSTREAM_SESSION_ID is not available. Cannot proceed." >&2
216
+ exit 2
217
+ fi
218
+ exit 0
219
+ ```
220
+
221
+ Notes:
222
+
223
+ - Hooks are registered when the Skill is invoked and last for the rest of the session. This is true on both invocation paths — whether the model calls the Skill or you type `/<skill-name>`.
224
+ - Session hooks live only in memory, so resuming a session with `--continue` / `--resume` does **not** restore them, on either invocation path. The Skill's instructions can come back with the replayed conversation while the hooks meant to enforce them are gone — re-run the Skill after resuming to re-arm its gate.
225
+ - Registration is idempotent: re-invoking a Skill does not stack duplicate hooks.
226
+ - Always give a tool event an explicit `matcher:`. An omitted one is stored as the empty pattern, which is compiled to `^$` and matches no tool name — the hook registers and then never fires, with nothing to say so. Use `*` if you mean every tool.
227
+ - The `command:` runs through the platform shell: `bash` on macOS and Linux, and on Windows Git Bash when it is detected (`MSYSTEM`/`TERM`), otherwise `cmd.exe` or PowerShell. The example above is POSIX shell — under `cmd.exe` `$QWEN_SKILL_ROOT` is not expanded and a `.sh` script is not executable, so the gate fails open there. A hook may set `shell: bash` to force bash, but that resolves to whatever `bash` is on `PATH`, so on Windows outside Git Bash write the gate for the shell you actually have.
228
+ - Sessions that disable hooks register none of them — `disableAllHooks`, safe mode, and an ACP client's `skipHooks`. The Skill's body and its `allowedTools` still apply in those sessions, but its gate does not, so a rule you rely on a hook to enforce is not enforced there. Bare mode goes further: no Skills are discovered at all, so there is no body and no `allowedTools` either.
229
+ - A **project** Skill's hooks run repo-supplied commands, so they are registered only in a trusted folder, and trust is re-read every time a hook fires and every time a permission is decided. With an IDE companion connected that value is live: revoking trust silences an already-registered gate — and suspends the Skill's `allowedTools` — at the next tool call, without a restart. Without an IDE connection the value is fixed when the CLI starts, so a change made through the CLI's own trust dialog takes effect on restart. Granting trust never retro-registers: invoke the Skill again.
230
+ - `hooks:` is read for project, user, and bundled Skills. Extension-provided Skills do not support it; use the extension's own manifest-level hooks instead.
231
+ - See [Hooks](hooks.md) for the full event list, matcher syntax, and output format.
232
+
193
233
  ## Add supporting files
194
234
 
195
235
  Create additional files alongside `SKILL.md`:
@@ -14,59 +14,58 @@ import "./chunk-47ECGEJC.js";
14
14
  import "./chunk-2MIN6GRR.js";
15
15
  import "./chunk-QHTIBUWB.js";
16
16
  import "./chunk-RKUWKYED.js";
17
- import "./chunk-UEZOXZNI.js";
17
+ import "./chunk-TXAEXF2B.js";
18
18
  import "./chunk-GELRJXE2.js";
19
19
  import "./chunk-32CM56LO.js";
20
- import "./chunk-JPEAQJNS.js";
21
- import "./chunk-WTW36TJ3.js";
20
+ import "./chunk-C7M445SS.js";
21
+ import "./chunk-2EKVPSIJ.js";
22
22
  import "./chunk-LJZSMWOH.js";
23
- import "./chunk-VUSSAGKI.js";
24
- import "./chunk-O45WBTNS.js";
23
+ import "./chunk-E4VX6LXB.js";
24
+ import "./chunk-RSU3I6UL.js";
25
25
  import "./chunk-DJXSOEFB.js";
26
- import "./chunk-2WGJG2KW.js";
27
- import "./chunk-QMFOYPGV.js";
28
- import "./chunk-LDS57224.js";
26
+ import "./chunk-KTLT7VCX.js";
27
+ import "./chunk-J3VZF2AL.js";
28
+ import "./chunk-OWCFKIFQ.js";
29
29
  import "./chunk-ZPJWUGCS.js";
30
- import "./chunk-HFTB354P.js";
30
+ import "./chunk-5Z4FCEPY.js";
31
31
  import "./chunk-BUQN5LTI.js";
32
32
  import "./chunk-VU7O7CGQ.js";
33
- import "./chunk-QSC5YOEC.js";
33
+ import "./chunk-SD7Y2PMC.js";
34
34
  import "./chunk-VNOVK4I7.js";
35
- import "./chunk-I72PHOKL.js";
35
+ import "./chunk-TSLRORQR.js";
36
36
  import "./chunk-GOFAQQZA.js";
37
37
  import "./chunk-3K65MUKD.js";
38
38
  import "./chunk-6HUXPLB5.js";
39
39
  import "./chunk-TWPJO254.js";
40
40
  import "./chunk-CQ35AJ4Z.js";
41
41
  import "./chunk-YHDGABDC.js";
42
- import "./chunk-RDKXZ2LS.js";
42
+ import "./chunk-LYT2OU7D.js";
43
43
  import "./chunk-B54PFQS5.js";
44
- import "./chunk-43NOB5NM.js";
44
+ import "./chunk-ERMAXPXA.js";
45
45
  import "./chunk-6PVPNMXU.js";
46
46
  import "./chunk-565U2ANU.js";
47
47
  import "./chunk-FDOGGKAA.js";
48
48
  import "./chunk-IRH27ZC2.js";
49
49
  import "./chunk-QHWCP53L.js";
50
50
  import "./chunk-F53KKZUD.js";
51
- import "./chunk-PZV2FASB.js";
51
+ import "./chunk-TRWQQBVH.js";
52
52
  import "./chunk-QJNDUTOL.js";
53
- import "./chunk-OECNP26L.js";
53
+ import "./chunk-N6S3NUYJ.js";
54
54
  import "./chunk-O6GEWCJA.js";
55
55
  import "./chunk-CHEIIBT3.js";
56
- import "./chunk-UKKYOIVT.js";
56
+ import "./chunk-QAZ2MGYT.js";
57
57
  import "./chunk-B44JBZBB.js";
58
58
  import "./chunk-BF3RUIVP.js";
59
59
  import "./chunk-JX6XHPTX.js";
60
- import "./chunk-R355CUNQ.js";
61
- import "./chunk-4VUVBN3Y.js";
60
+ import "./chunk-CLKE4IY3.js";
62
61
  import "./chunk-ZSTCM3MX.js";
63
62
  import "./chunk-NXWYCSPL.js";
64
63
  import "./chunk-MLXTMF7H.js";
65
- import "./chunk-GXZHYPHZ.js";
64
+ import "./chunk-OFB36ZBA.js";
66
65
  import "./chunk-3CZ2BQV6.js";
67
66
  import "./chunk-PQEISIKS.js";
68
67
  import "./chunk-3K456UJF.js";
69
- import "./chunk-VEFRT7NX.js";
68
+ import "./chunk-H3Q3RSKZ.js";
70
69
  import "./chunk-S6LOFUVP.js";
71
70
  import "./chunk-NAVJD2PQ.js";
72
71
  import "./chunk-UKADFFL2.js";
@@ -79,7 +78,7 @@ import "./chunk-W4LL5RZO.js";
79
78
  import "./chunk-3UMWOKJC.js";
80
79
  import "./chunk-KFFCDLKV.js";
81
80
  import "./chunk-7OCIQNKX.js";
82
- import "./chunk-P5LDR7FI.js";
81
+ import "./chunk-WQBR7LN5.js";
83
82
  import "./chunk-5ETULJLP.js";
84
83
  import "./chunk-XBVNNDPK.js";
85
84
  import "./chunk-VGC4I5JJ.js";
@@ -89,18 +88,18 @@ import "./chunk-HD7O6WLV.js";
89
88
  import "./chunk-WZAD4ZNJ.js";
90
89
  import "./chunk-FPGTNKCP.js";
91
90
  import "./chunk-TIGXX4PA.js";
92
- import "./chunk-5MTARK4Y.js";
91
+ import "./chunk-PLUAIHZO.js";
93
92
  import "./chunk-XFFRI3WM.js";
94
93
  import "./chunk-4HOEU2OR.js";
95
94
  import "./chunk-HHJLM3WQ.js";
96
95
  import "./chunk-7VEYUF3N.js";
97
96
  import "./chunk-74TONY4F.js";
98
- import "./chunk-GMNLYQOS.js";
99
- import "./chunk-D6PIMKY3.js";
100
- import "./chunk-NGX4NUNP.js";
101
- import "./chunk-FKJM6JKY.js";
97
+ import "./chunk-E6TI726I.js";
98
+ import "./chunk-4VY3ITHR.js";
99
+ import "./chunk-O2FEO2CB.js";
100
+ import "./chunk-G6UUOCUT.js";
102
101
  import "./chunk-IZ2U57NY.js";
103
- import "./chunk-RPBMP6BN.js";
102
+ import "./chunk-MWIO7MF6.js";
104
103
  import "./chunk-ZAFYHRVY.js";
105
104
  import "./chunk-75DOP5OR.js";
106
105
  import "./chunk-DMTGGOSA.js";
@@ -4,14 +4,14 @@ import {
4
4
  ConfigContext,
5
5
  SessionPicker,
6
6
  SettingsContext
7
- } from "./chunk-7BZS4ZDV.js";
8
- import "./chunk-IQN2CCIE.js";
9
- import "./chunk-JBTZUFR4.js";
7
+ } from "./chunk-B5FF3LRF.js";
8
+ import "./chunk-KP5QK3FB.js";
9
+ import "./chunk-T7TP5UQL.js";
10
10
  import {
11
11
  KeypressProvider
12
- } from "./chunk-Z6WZPXQH.js";
13
- import "./chunk-XHGGYCTA.js";
14
- import "./chunk-2RYWGYB3.js";
12
+ } from "./chunk-AWDF462I.js";
13
+ import "./chunk-VYCJITND.js";
14
+ import "./chunk-I67KJGM6.js";
15
15
  import "./chunk-3SH53ANB.js";
16
16
  import "./chunk-HY3DXYZK.js";
17
17
  import "./chunk-4WGODMVR.js";
@@ -30,86 +30,85 @@ import {
30
30
  import {
31
31
  require_react
32
32
  } from "./chunk-5QWWOFGG.js";
33
- import "./chunk-54TF2ZIQ.js";
34
- import "./chunk-4VZCORNT.js";
35
- import "./chunk-N7VURC4O.js";
36
- import "./chunk-N7EYO2E7.js";
33
+ import "./chunk-YLFICBYK.js";
34
+ import "./chunk-22QOQKG4.js";
35
+ import "./chunk-WXFCI3O5.js";
36
+ import "./chunk-XQ4RDO5B.js";
37
37
  import "./chunk-EKTCKZV5.js";
38
- import "./chunk-ZTAVGFKA.js";
38
+ import "./chunk-37SOBIA3.js";
39
39
  import "./chunk-47ECGEJC.js";
40
40
  import "./chunk-2MIN6GRR.js";
41
41
  import "./chunk-QHTIBUWB.js";
42
42
  import "./chunk-57OAHC2Y.js";
43
- import "./chunk-4F2QRVW6.js";
44
- import "./chunk-AQ5NAGWI.js";
45
- import "./chunk-ER273QE6.js";
43
+ import "./chunk-UTVIIA7N.js";
44
+ import "./chunk-RUMSY4ES.js";
45
+ import "./chunk-QW7BUOSI.js";
46
46
  import "./chunk-RKUWKYED.js";
47
47
  import "./chunk-BW4333PP.js";
48
48
  import "./chunk-IDS7MSUP.js";
49
- import "./chunk-MUZCSTOO.js";
49
+ import "./chunk-LD53HMPV.js";
50
50
  import "./chunk-5EJZE3FP.js";
51
- import "./chunk-H3UDNQLO.js";
51
+ import "./chunk-4OCYWXKF.js";
52
52
  import "./chunk-NUQFUXOG.js";
53
- import "./chunk-XY3USGFE.js";
53
+ import "./chunk-GEV66YGE.js";
54
54
  import "./chunk-NPQ5ZKRP.js";
55
55
  import "./chunk-MR3PXB6E.js";
56
- import "./chunk-UEZOXZNI.js";
56
+ import "./chunk-TXAEXF2B.js";
57
57
  import "./chunk-GELRJXE2.js";
58
58
  import "./chunk-32CM56LO.js";
59
- import "./chunk-JPEAQJNS.js";
60
- import "./chunk-WTW36TJ3.js";
59
+ import "./chunk-C7M445SS.js";
60
+ import "./chunk-2EKVPSIJ.js";
61
61
  import "./chunk-LJZSMWOH.js";
62
- import "./chunk-VUSSAGKI.js";
63
- import "./chunk-O45WBTNS.js";
62
+ import "./chunk-E4VX6LXB.js";
63
+ import "./chunk-RSU3I6UL.js";
64
64
  import "./chunk-DJXSOEFB.js";
65
- import "./chunk-2WGJG2KW.js";
66
- import "./chunk-QMFOYPGV.js";
67
- import "./chunk-LDS57224.js";
65
+ import "./chunk-KTLT7VCX.js";
66
+ import "./chunk-J3VZF2AL.js";
67
+ import "./chunk-OWCFKIFQ.js";
68
68
  import "./chunk-ZPJWUGCS.js";
69
- import "./chunk-HFTB354P.js";
69
+ import "./chunk-5Z4FCEPY.js";
70
70
  import "./chunk-BUQN5LTI.js";
71
71
  import "./chunk-VU7O7CGQ.js";
72
- import "./chunk-QSC5YOEC.js";
72
+ import "./chunk-SD7Y2PMC.js";
73
73
  import "./chunk-VNOVK4I7.js";
74
74
  import {
75
75
  SessionService
76
- } from "./chunk-I72PHOKL.js";
76
+ } from "./chunk-TSLRORQR.js";
77
77
  import "./chunk-GOFAQQZA.js";
78
78
  import "./chunk-3K65MUKD.js";
79
79
  import "./chunk-6HUXPLB5.js";
80
80
  import "./chunk-TWPJO254.js";
81
81
  import "./chunk-CQ35AJ4Z.js";
82
82
  import "./chunk-YHDGABDC.js";
83
- import "./chunk-RDKXZ2LS.js";
83
+ import "./chunk-LYT2OU7D.js";
84
84
  import "./chunk-B54PFQS5.js";
85
- import "./chunk-43NOB5NM.js";
85
+ import "./chunk-ERMAXPXA.js";
86
86
  import "./chunk-6PVPNMXU.js";
87
87
  import "./chunk-565U2ANU.js";
88
88
  import "./chunk-FDOGGKAA.js";
89
89
  import "./chunk-IRH27ZC2.js";
90
90
  import "./chunk-QHWCP53L.js";
91
91
  import "./chunk-F53KKZUD.js";
92
- import "./chunk-PZV2FASB.js";
92
+ import "./chunk-TRWQQBVH.js";
93
93
  import "./chunk-QJNDUTOL.js";
94
- import "./chunk-OECNP26L.js";
94
+ import "./chunk-N6S3NUYJ.js";
95
95
  import "./chunk-O6GEWCJA.js";
96
96
  import "./chunk-CHEIIBT3.js";
97
- import "./chunk-UKKYOIVT.js";
97
+ import "./chunk-QAZ2MGYT.js";
98
98
  import "./chunk-B44JBZBB.js";
99
99
  import "./chunk-BF3RUIVP.js";
100
100
  import "./chunk-JX6XHPTX.js";
101
- import "./chunk-R355CUNQ.js";
102
- import "./chunk-4VUVBN3Y.js";
101
+ import "./chunk-CLKE4IY3.js";
103
102
  import "./chunk-ZSTCM3MX.js";
104
103
  import "./chunk-NXWYCSPL.js";
105
104
  import "./chunk-MLXTMF7H.js";
106
- import "./chunk-GXZHYPHZ.js";
105
+ import "./chunk-OFB36ZBA.js";
107
106
  import {
108
107
  getGitBranch
109
108
  } from "./chunk-3CZ2BQV6.js";
110
109
  import "./chunk-PQEISIKS.js";
111
110
  import "./chunk-3K456UJF.js";
112
- import "./chunk-VEFRT7NX.js";
111
+ import "./chunk-H3Q3RSKZ.js";
113
112
  import "./chunk-S6LOFUVP.js";
114
113
  import "./chunk-NAVJD2PQ.js";
115
114
  import "./chunk-UKADFFL2.js";
@@ -122,7 +121,7 @@ import "./chunk-W4LL5RZO.js";
122
121
  import "./chunk-3UMWOKJC.js";
123
122
  import "./chunk-KFFCDLKV.js";
124
123
  import "./chunk-7OCIQNKX.js";
125
- import "./chunk-P5LDR7FI.js";
124
+ import "./chunk-WQBR7LN5.js";
126
125
  import "./chunk-5ETULJLP.js";
127
126
  import "./chunk-XBVNNDPK.js";
128
127
  import "./chunk-VGC4I5JJ.js";
@@ -132,20 +131,20 @@ import "./chunk-HD7O6WLV.js";
132
131
  import "./chunk-WZAD4ZNJ.js";
133
132
  import "./chunk-FPGTNKCP.js";
134
133
  import "./chunk-TIGXX4PA.js";
135
- import "./chunk-5MTARK4Y.js";
134
+ import "./chunk-PLUAIHZO.js";
136
135
  import "./chunk-XFFRI3WM.js";
137
136
  import "./chunk-4HOEU2OR.js";
138
137
  import "./chunk-HHJLM3WQ.js";
139
138
  import "./chunk-7VEYUF3N.js";
140
139
  import "./chunk-74TONY4F.js";
141
- import "./chunk-GMNLYQOS.js";
142
- import "./chunk-D6PIMKY3.js";
143
- import "./chunk-NGX4NUNP.js";
144
- import "./chunk-FKJM6JKY.js";
140
+ import "./chunk-E6TI726I.js";
141
+ import "./chunk-4VY3ITHR.js";
142
+ import "./chunk-O2FEO2CB.js";
143
+ import "./chunk-G6UUOCUT.js";
145
144
  import "./chunk-IZ2U57NY.js";
146
- import "./chunk-RPBMP6BN.js";
145
+ import "./chunk-MWIO7MF6.js";
147
146
  import "./chunk-ZAFYHRVY.js";
148
- import "./chunk-BKNY7PDI.js";
147
+ import "./chunk-HPE4LEWX.js";
149
148
  import {
150
149
  writeStdoutLine
151
150
  } from "./chunk-7FA2II6K.js";
@@ -9,8 +9,8 @@ import {
9
9
  markAcpStartup,
10
10
  recordAcpConfigStartupEvent,
11
11
  resetAcpStartupProfilerForTesting
12
- } from "./chunk-L4R7BCVV.js";
13
- import "./chunk-WEXA2DNG.js";
12
+ } from "./chunk-IMWCUWQT.js";
13
+ import "./chunk-Z6KFLEG7.js";
14
14
  import "./chunk-5O2XNYP6.js";
15
15
  import "./chunk-J2S4EL5Y.js";
16
16
  export {