@qwen-code/qwen-code 0.19.7 → 0.19.8-nightly.20260711.0ef3a76bd

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 (434) hide show
  1. package/bundled/qc-helper/SKILL.md +1 -0
  2. package/bundled/qc-helper/docs/configuration/auth.md +40 -55
  3. package/bundled/qc-helper/docs/configuration/model-providers.md +224 -218
  4. package/bundled/qc-helper/docs/configuration/settings.md +60 -51
  5. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  6. package/bundled/qc-helper/docs/features/channels/dingtalk.md +12 -2
  7. package/bundled/qc-helper/docs/features/channels/overview.md +86 -12
  8. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -0
  9. package/bundled/qc-helper/docs/features/channels/wecom.md +6 -0
  10. package/bundled/qc-helper/docs/features/code-review.md +29 -5
  11. package/bundled/qc-helper/docs/features/commands.md +39 -38
  12. package/bundled/qc-helper/docs/features/computer-use.md +77 -0
  13. package/bundled/qc-helper/docs/features/hooks.md +36 -34
  14. package/bundled/qc-helper/docs/features/memory.md +1 -1
  15. package/bundled/qc-helper/docs/features/tool-use-summaries.md +19 -23
  16. package/bundled/qc-helper/docs/integration-vscode.md +2 -2
  17. package/bundled/qc-helper/docs/qwen-serve.md +40 -16
  18. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  19. package/bundled/review/DESIGN.md +93 -22
  20. package/bundled/review/SKILL.md +300 -87
  21. package/chunks/MaxSizedBox-4CX4IQWE.js +70 -0
  22. package/chunks/{StandaloneSessionPicker-APISIRJZ.js → StandaloneSessionPicker-TYUSSNJ6.js} +79 -77
  23. package/chunks/{acpAgent-MMOSC2YA.js → acpAgent-5HJEXOPR.js} +978 -205
  24. package/chunks/agent-PZF5IUUB.js +68 -0
  25. package/chunks/agent-headless-L4N7V2SG.js +62 -0
  26. package/chunks/{anthropicContentGenerator-AKYPSZIV.js → anthropicContentGenerator-L73TO3DB.js} +214 -31
  27. package/chunks/{artifact-tool-D233YJFH.js → artifact-tool-U7IRTLIV.js} +5 -5
  28. package/chunks/{askUserQuestion-MKL5ZTMC.js → askUserQuestion-2DLUUZZG.js} +6 -6
  29. package/chunks/bridge-OJL6LD42.js +78 -0
  30. package/chunks/{ca-HCMB2I54.js → ca-WTQOU43B.js} +91 -6
  31. package/chunks/{channel-worker-supervisor-CRCVYQIE.js → channel-worker-supervisor-LF66HCVT.js} +137 -13
  32. package/chunks/{chunk-QQDPRDVW.js → chunk-2HRYPZT5.js} +1 -1
  33. package/chunks/{chunk-JD33UY7E.js → chunk-2K56LTWA.js} +18 -12
  34. package/chunks/{chunk-XISQIIT7.js → chunk-2LV4JUNO.js} +4 -4
  35. package/chunks/chunk-2UU6DW5P.js +296 -0
  36. package/chunks/{chunk-2PSWA5ID.js → chunk-2X56YUSZ.js} +1 -1
  37. package/chunks/chunk-2ZQOQZIS.js +71 -0
  38. package/chunks/{chunk-Q6OEPOOC.js → chunk-3AMVHPEQ.js} +2 -2
  39. package/chunks/{chunk-4RQIB5UZ.js → chunk-3BTRNWWD.js} +1 -35
  40. package/chunks/{chunk-SD4N3QJ2.js → chunk-3QZ6GY6A.js} +66 -22
  41. package/chunks/{chunk-DNV4FSN5.js → chunk-3SJSQXNS.js} +24 -7
  42. package/chunks/{chunk-VQWAZSXN.js → chunk-3XATDZNP.js} +64 -42
  43. package/chunks/{chunk-LEIJKM7Q.js → chunk-3ZAIGBCP.js} +2 -2
  44. package/chunks/{chunk-2NPS2UDH.js → chunk-43JB7OF4.js} +905 -139
  45. package/chunks/chunk-43XJTCHT.js +444 -0
  46. package/chunks/{chunk-CNSF3WO5.js → chunk-47HXCVGG.js} +6 -6
  47. package/chunks/{chunk-VEB3NYSO.js → chunk-4GORAUCN.js} +8 -3
  48. package/chunks/{chunk-55ZMG67I.js → chunk-4LD5APFL.js} +4 -4
  49. package/chunks/{chunk-TLWA7TPR.js → chunk-4QLQE5WJ.js} +2 -2
  50. package/chunks/{chunk-UIDXQNMV.js → chunk-4WGODMVR.js} +1 -1
  51. package/chunks/{chunk-E6US47KI.js → chunk-4WKAA4KS.js} +1 -1
  52. package/chunks/{chunk-H6EMK6QK.js → chunk-4ZVWQHEQ.js} +11913 -5207
  53. package/chunks/{chunk-HW4N45EE.js → chunk-524RQP4Q.js} +29 -8
  54. package/chunks/{chunk-3GONHQOA.js → chunk-57OAHC2Y.js} +1 -1
  55. package/chunks/{chunk-B4U2M63D.js → chunk-5DOUQHL3.js} +2104 -14
  56. package/chunks/{chunk-JZSY4WP3.js → chunk-5DTTYNB7.js} +1 -1
  57. package/chunks/{chunk-A4BMJM77.js → chunk-5O2XNYP6.js} +1 -0
  58. package/chunks/{chunk-P7I3D7FM.js → chunk-5OIXALQ5.js} +2 -2
  59. package/chunks/chunk-5SFOMFG4.js +61 -0
  60. package/chunks/{chunk-QYNNN7BK.js → chunk-5XUCZNSY.js} +2 -2
  61. package/chunks/{chunk-FRFFNYUY.js → chunk-65F3I3PM.js} +5 -5
  62. package/chunks/{chunk-GO6LNQXT.js → chunk-6AM5D4ME.js} +1 -1
  63. package/chunks/{chunk-BWVQN2HV.js → chunk-6CR73ZIK.js} +7 -7
  64. package/chunks/{chunk-BJBWRCSK.js → chunk-6H67XLET.js} +1 -1
  65. package/chunks/{chunk-G7ZG7CA6.js → chunk-6RLROE6G.js} +9 -8
  66. package/chunks/{chunk-TBAZMRW3.js → chunk-6WH2WCSW.js} +2 -2
  67. package/chunks/{chunk-ZERZSAZL.js → chunk-75DOP5OR.js} +2 -2
  68. package/chunks/{chunk-FTFXDZYI.js → chunk-7KZNLIAI.js} +47 -31
  69. package/chunks/{chunk-HJ3GX3Y3.js → chunk-7PW5CTVR.js} +32 -18
  70. package/chunks/{chunk-NQKLOAVJ.js → chunk-7R3CZA3Q.js} +2 -2
  71. package/chunks/{chunk-SAIILPQ3.js → chunk-7X7TEQNX.js} +5 -3
  72. package/chunks/{chunk-IRJWHZWU.js → chunk-A4UCTEB5.js} +2 -2
  73. package/chunks/{chunk-XSAFNANZ.js → chunk-AHUEU3BP.js} +14 -14
  74. package/chunks/{chunk-X3YGAX7V.js → chunk-B5ORX3FG.js} +4 -2
  75. package/chunks/{chunk-ZN5T4BHI.js → chunk-BPZALHVR.js} +2 -2
  76. package/chunks/{chunk-IJRL2S3D.js → chunk-BZIFY5TF.js} +6 -6
  77. package/chunks/{chunk-AJBEAUIS.js → chunk-BZP7HZTK.js} +7 -6
  78. package/chunks/{chunk-OFEVLU4C.js → chunk-CARU2RR2.js} +1 -1
  79. package/chunks/{chunk-MIG5SQNL.js → chunk-CBKR4Q5K.js} +8 -8
  80. package/chunks/chunk-CC2ITGCF.js +176 -0
  81. package/chunks/{chunk-FV7425LN.js → chunk-CEA3E3JB.js} +18 -5
  82. package/chunks/{chunk-GD236YPV.js → chunk-CNOF2IZT.js} +3 -3
  83. package/chunks/chunk-COH43MRJ.js +34 -0
  84. package/chunks/{chunk-E5A7LHNN.js → chunk-CPBF7KYF.js} +1 -1
  85. package/chunks/{chunk-UWCTAVOD.js → chunk-CR3C7WXL.js} +1 -1
  86. package/chunks/{chunk-5P5XGNYH.js → chunk-CU3L64TP.js} +1 -1
  87. package/chunks/{chunk-IWKSG2AR.js → chunk-CXAOG665.js} +1 -1
  88. package/chunks/{chunk-MZ7BABX3.js → chunk-DC5Z3DU6.js} +2 -2
  89. package/chunks/{chunk-64WXLC72.js → chunk-DJ2GSRLV.js} +1 -1
  90. package/chunks/{chunk-4ZJIPVPB.js → chunk-DMN532MJ.js} +11 -11
  91. package/chunks/{chunk-QN5NZ3UQ.js → chunk-DMTGGOSA.js} +2 -2
  92. package/chunks/{chunk-KHDZHZMH.js → chunk-E5Z2AVNV.js} +1 -1
  93. package/chunks/chunk-F4PFZ7WP.js +239 -0
  94. package/chunks/{chunk-ME3YSROJ.js → chunk-FBSBT7JS.js} +25 -13
  95. package/chunks/{chunk-5IFG2VC4.js → chunk-FCMNKVXT.js} +1 -1
  96. package/chunks/{chunk-YDSYD7UI.js → chunk-FD3DA3B4.js} +3 -3
  97. package/chunks/{chunk-GL5TV7B5.js → chunk-GL22M2DU.js} +23 -7
  98. package/chunks/{chunk-AFOLR6YL.js → chunk-GQ4ZEYMI.js} +102 -16
  99. package/chunks/chunk-GRC5HGPI.js +13 -0
  100. package/chunks/{chunk-WMPVYQ4P.js → chunk-GWHYEOV2.js} +2 -2
  101. package/chunks/chunk-GZRTYZ2R.js +292 -0
  102. package/chunks/{chunk-A2X3KLC3.js → chunk-GZXCZHCT.js} +3 -3
  103. package/chunks/{chunk-K5PGHDBN.js → chunk-H6XPXXMH.js} +1 -1
  104. package/chunks/{chunk-24XYI5EI.js → chunk-HACY3IUM.js} +6 -6
  105. package/chunks/{chunk-DGHJTO2K.js → chunk-HIHQ3TWC.js} +38 -9
  106. package/chunks/{chunk-KYMBIKIW.js → chunk-HTHUX2T5.js} +1 -1
  107. package/chunks/{chunk-LQ7TMOCE.js → chunk-HTO4JFDZ.js} +1 -1
  108. package/chunks/{chunk-B34OV7K2.js → chunk-IAVB3HM3.js} +15 -2
  109. package/chunks/{chunk-4UCTWSTP.js → chunk-IDJEZU7C.js} +2 -2
  110. package/chunks/chunk-IEBIKN6A.js +38 -0
  111. package/chunks/{chunk-PRDFOIZF.js → chunk-IJEO2QSK.js} +73 -30
  112. package/chunks/{chunk-MJI36HER.js → chunk-IT6LIIVK.js} +2 -2
  113. package/chunks/{chunk-FEJ2FZ3U.js → chunk-J3JA76CF.js} +2 -2
  114. package/chunks/{chunk-4CGOWHKM.js → chunk-J4MOFEOK.js} +2 -2
  115. package/chunks/{chunk-22MNNNXE.js → chunk-J4TSQ5EQ.js} +3 -2
  116. package/chunks/{chunk-22IFUCVR.js → chunk-JESCGQM3.js} +1 -1
  117. package/chunks/{chunk-CCGOFQV3.js → chunk-JSG7ZSBC.js} +8 -7
  118. package/chunks/{chunk-X265R5C6.js → chunk-K434OPES.js} +5 -5
  119. package/chunks/{chunk-RFIL6REB.js → chunk-KHUQZZJ6.js} +185 -45
  120. package/chunks/{chunk-X2XNQQJI.js → chunk-KKNMOEZH.js} +4 -4
  121. package/chunks/{chunk-6BN7NZ5Z.js → chunk-KL23O5Z5.js} +7 -9
  122. package/chunks/{chunk-MRO43B25.js → chunk-KW7NOTN6.js} +1 -1
  123. package/chunks/{chunk-6IAWPIQ6.js → chunk-L36P3NBD.js} +3 -3
  124. package/chunks/{chunk-54YZOP7P.js → chunk-L573Z2QZ.js} +11894 -5190
  125. package/chunks/{chunk-STAZRKOT.js → chunk-L6GPKRH7.js} +132 -464
  126. package/chunks/{chunk-QAKFYMJI.js → chunk-LD5OWZ5E.js} +155 -19
  127. package/chunks/{chunk-E7KNELIZ.js → chunk-LK7KUE55.js} +2 -2
  128. package/chunks/{chunk-W7EEOR7D.js → chunk-LUODI7WD.js} +5 -5
  129. package/chunks/{chunk-CSOTA7KX.js → chunk-LXNEJD34.js} +2 -2
  130. package/chunks/{chunk-HLKG6CZN.js → chunk-M5GB774H.js} +1 -1
  131. package/chunks/{chunk-3B26UVCX.js → chunk-MC23XKFE.js} +39 -10
  132. package/chunks/{chunk-XPJH4PKR.js → chunk-MPEMTBUZ.js} +2 -2
  133. package/chunks/{chunk-GMOWQOQQ.js → chunk-MUCWGT7O.js} +248 -55
  134. package/chunks/{chunk-PC4ZXHU2.js → chunk-MXL5UP4X.js} +3 -3
  135. package/chunks/{chunk-PUQLHSQ2.js → chunk-N2FGNKOE.js} +10 -12
  136. package/chunks/{chunk-332PWN27.js → chunk-NHDKSOEY.js} +1 -1
  137. package/chunks/{chunk-65CFHNSE.js → chunk-NKHV3OHY.js} +62 -62
  138. package/chunks/{chunk-P7M4GA57.js → chunk-OCPBI7J5.js} +1 -1
  139. package/chunks/{chunk-42XGFRJS.js → chunk-ORBGV7NJ.js} +5 -5
  140. package/chunks/{chunk-ALZ75L2X.js → chunk-OZJLTZKP.js} +415 -379
  141. package/chunks/chunk-P3X7RYUQ.js +468 -0
  142. package/chunks/{chunk-AGHU5VRK.js → chunk-PZL23GTM.js} +1 -1
  143. package/chunks/{chunk-FXGLL2HL.js → chunk-Q7YDKOGY.js} +1 -1
  144. package/chunks/{chunk-LGFAYIKX.js → chunk-QHTIBUWB.js} +1 -1
  145. package/chunks/{chunk-AIY5UTFI.js → chunk-QK2JET6S.js} +934 -2881
  146. package/chunks/{chunk-P3MYAZBY.js → chunk-QMGX2KO2.js} +1 -1
  147. package/chunks/{chunk-QZF5U5KA.js → chunk-QNTUV3PP.js} +11 -11
  148. package/chunks/chunk-QRUIS3DN.js +47 -0
  149. package/chunks/{chunk-ITOGNELQ.js → chunk-QSWDGAIC.js} +2 -2
  150. package/chunks/{chunk-7JGISHHZ.js → chunk-QUJIDGIW.js} +15 -157
  151. package/chunks/{chunk-GHOTR7HL.js → chunk-QUPXZXLV.js} +1 -1
  152. package/chunks/{chunk-TDGF35EN.js → chunk-QYMQSECS.js} +3 -3
  153. package/chunks/{chunk-QYUE6W3T.js → chunk-RDJSGHZE.js} +1 -1
  154. package/chunks/{chunk-TLRYABYP.js → chunk-RKUWKYED.js} +1 -1
  155. package/chunks/{chunk-ADZG46HR.js → chunk-RRNR5U2U.js} +2 -2
  156. package/chunks/{chunk-4O344UEE.js → chunk-RW7CXRUM.js} +39 -19
  157. package/chunks/{chunk-RNBYOUGV.js → chunk-RXFQM6FQ.js} +1 -1
  158. package/chunks/{chunk-QXPI7FEC.js → chunk-S3TWXGKA.js} +4 -4
  159. package/chunks/{chunk-44NROQYV.js → chunk-SJHDYNHF.js} +4 -4
  160. package/chunks/{chunk-MLZQVCF3.js → chunk-SZRN75WQ.js} +1 -1
  161. package/chunks/{chunk-7RYW5LQV.js → chunk-T2NCM2ET.js} +2 -2
  162. package/chunks/{chunk-Z2Z3GUXZ.js → chunk-TB6UDU4T.js} +1 -1
  163. package/chunks/{chunk-SUAKHHK7.js → chunk-TDEXZKMT.js} +3 -3
  164. package/chunks/{chunk-EXPMGZZV.js → chunk-TEGEBB2I.js} +1 -1
  165. package/chunks/{chunk-JF7DFPQ5.js → chunk-TJCEUA3S.js} +15 -3
  166. package/chunks/{chunk-MX2YXRER.js → chunk-TJTKSVIV.js} +1 -1
  167. package/chunks/{chunk-H6BD2ELD.js → chunk-TYAMGABM.js} +2 -2
  168. package/chunks/{chunk-CISB3IQF.js → chunk-U3VSCGEJ.js} +100 -15
  169. package/chunks/{chunk-VRDMOSQS.js → chunk-UDXSXLER.js} +2 -2
  170. package/chunks/{chunk-AHNJGLFV.js → chunk-UOZWKTQG.js} +3 -3
  171. package/chunks/{chunk-CJCKDMWO.js → chunk-URK542T4.js} +1 -1
  172. package/chunks/{chunk-YEGT55NW.js → chunk-UUVCHN62.js} +5697 -2983
  173. package/chunks/{chunk-AHNXYU4O.js → chunk-V6WHFGST.js} +1 -1
  174. package/chunks/{chunk-U4FRHCLA.js → chunk-VAUPLGDZ.js} +2370 -364
  175. package/chunks/{chunk-ZTQ26VBE.js → chunk-VDDGDZMA.js} +1 -1
  176. package/chunks/{chunk-OMX7CUOE.js → chunk-VGC4I5JJ.js} +1 -1
  177. package/chunks/{chunk-IUE7YWC3.js → chunk-VIUKEWUL.js} +8 -8
  178. package/chunks/{chunk-43W4YSO6.js → chunk-VJNBRRZG.js} +2 -2
  179. package/chunks/{chunk-I4A4K72C.js → chunk-VL7GBUQA.js} +1309 -703
  180. package/chunks/{chunk-VZ7HY3YU.js → chunk-W2UIXQDL.js} +3 -3
  181. package/chunks/{chunk-ER3BKOLB.js → chunk-W7FJ3N32.js} +1 -1
  182. package/chunks/{chunk-3HX5LZ6R.js → chunk-WBL3FJEU.js} +2 -2
  183. package/chunks/{chunk-RYFZCUJO.js → chunk-WCUK2QXK.js} +17 -9
  184. package/chunks/{chunk-OWVIH4HY.js → chunk-WFHJDT4S.js} +421 -114
  185. package/chunks/{chunk-BMFMJINR.js → chunk-WL4L7EZH.js} +1 -1
  186. package/chunks/{chunk-NZEGNV4V.js → chunk-WPHYXKFL.js} +8 -51
  187. package/chunks/chunk-X4NKFGFJ.js +81 -0
  188. package/chunks/{chunk-3RW4AZJV.js → chunk-XFSFZCM5.js} +1 -1
  189. package/chunks/{chunk-2MPVVENX.js → chunk-XU457J4V.js} +2 -2
  190. package/chunks/{chunk-SIUQ3YYX.js → chunk-XVNQMZ2I.js} +1 -1
  191. package/chunks/{chunk-SYCJMSIJ.js → chunk-XWRJCPHC.js} +1 -1
  192. package/chunks/chunk-YAF2MQZ6.js +19 -0
  193. package/chunks/chunk-YF4RZPJP.js +168 -0
  194. package/chunks/{chunk-4KJ2BPIT.js → chunk-YLV3XXFB.js} +4 -40
  195. package/chunks/{chunk-BR4QREVK.js → chunk-YQ3U5MUC.js} +1 -1
  196. package/chunks/{chunk-Y6Z2O3WR.js → chunk-YUZI3WAC.js} +1 -1
  197. package/chunks/{chunk-II73RK2S.js → chunk-YVEDCAUE.js} +1 -1
  198. package/chunks/{chunk-SKAZWEV5.js → chunk-ZJE7NSL3.js} +1 -1
  199. package/chunks/{chunk-7LTB54MK.js → chunk-ZLXQN2QS.js} +2 -2
  200. package/chunks/cli-entry-path-4VJ3Y6T2.js +10 -0
  201. package/chunks/{computer-use-X4KUU3NM.js → computer-use-2ZTYDNN4.js} +50 -50
  202. package/chunks/config-utils-ZITWCFBY.js +23 -0
  203. package/chunks/contextCommand-6L4XCZZT.js +68 -0
  204. package/chunks/create-sub-session-INX7TXJI.js +207 -0
  205. package/chunks/create-sub-session-VZIOFS6N.js +375 -0
  206. package/chunks/{cron-create-JSXEIPVS.js → cron-create-AMBKGZX6.js} +9 -9
  207. package/chunks/{cron-delete-OIFVEPGU.js → cron-delete-LRU4OJYG.js} +7 -7
  208. package/chunks/{cron-list-D4ZX4IOE.js → cron-list-WVP2JXER.js} +14 -10
  209. package/chunks/{daemon-F3I2RXP6.js → daemon-QEDXW7ER.js} +554 -4
  210. package/chunks/daemon-status-provider-7XJZ3HPS.js +76 -0
  211. package/chunks/{de-PLLFDERI.js → de-XHBEYUMG.js} +91 -6
  212. package/chunks/{devtools-FM6GJPYG.js → devtools-4QFYJT6U.js} +3 -3
  213. package/chunks/{dist-573HNSVO.js → dist-EFXT7A3G.js} +12 -11
  214. package/chunks/{dist-PKFTNUHO.js → dist-KCRX7TGL.js} +529 -79
  215. package/chunks/{dist-OT7G2WNM.js → dist-MFEAEUV4.js} +1011 -197
  216. package/chunks/{dist-63IS3ZMI.js → dist-PZV5RKM6.js} +4 -4
  217. package/chunks/{dist-FQ5WRJPL.js → dist-QY3THJM5.js} +5 -5
  218. package/chunks/{dist-IMFFBMAT.js → dist-UJOR6KEQ.js} +32 -15
  219. package/chunks/{dist-YTRKAVUB.js → dist-ZWZB4CCN.js} +10 -10
  220. package/chunks/earlyInputCapture-TTWXFIWO.js +69 -0
  221. package/chunks/{edit-WZTZDGCI.js → edit-6UWFRZKY.js} +51 -51
  222. package/chunks/{en-GA2RMXY5.js → en-TKHUFIK7.js} +100 -6
  223. package/chunks/{enter-worktree-DEPXBJEL.js → enter-worktree-LS7SGAII.js} +50 -50
  224. package/chunks/{enterPlanMode-JFGXZHHJ.js → enterPlanMode-TSZYLEEP.js} +66 -51
  225. package/chunks/environment-XCVLHOXG.js +88 -0
  226. package/chunks/errors-KIANLUTC.js +75 -0
  227. package/chunks/{exit-worktree-Y7XBK3VV.js → exit-worktree-2QV6UJSW.js} +50 -50
  228. package/chunks/{exitPlanMode-WQQER65F.js → exitPlanMode-GVZG3F6S.js} +51 -51
  229. package/chunks/{fast-path-W2U6XDNO.js → fast-path-GNFZAMQK.js} +16 -7
  230. package/chunks/{fast-path-settings-RCRXH2JG.js → fast-path-settings-5QZE64HR.js} +6 -5
  231. package/chunks/{fileFromPath-IBEHA3CO.js → fileFromPath-UDALK7FM.js} +3 -3
  232. package/chunks/{fr-GWNQG4XH.js → fr-TBF6JZNE.js} +91 -6
  233. package/chunks/{gemini-T4WX6SRW.js → gemini-N3H6OLHR.js} +501 -197
  234. package/chunks/{geminiContentGenerator-MKQACXEJ.js → geminiContentGenerator-4C257R2N.js} +9 -9
  235. package/chunks/{getMachineId-bsd-4CASPIU4.js → getMachineId-bsd-EXV7SWPA.js} +3 -3
  236. package/chunks/{getMachineId-darwin-HPQPEMZR.js → getMachineId-darwin-IUOMFXU3.js} +3 -3
  237. package/chunks/{getMachineId-linux-AUARKYHL.js → getMachineId-linux-K7XJYFHL.js} +2 -2
  238. package/chunks/{getMachineId-unsupported-S32ZDA2T.js → getMachineId-unsupported-EA5FDRJ6.js} +2 -2
  239. package/chunks/{getMachineId-win-4EFLHYIJ.js → getMachineId-win-KBA6RAI5.js} +3 -3
  240. package/chunks/{glob-4KKSHZDF.js → glob-QTUI5I3Y.js} +95 -74
  241. package/chunks/{grep-GHRYXSLZ.js → grep-Z5MGLRCG.js} +50 -50
  242. package/chunks/handleAutoUpdate-FFF3CZGP.js +69 -0
  243. package/chunks/i18n-QQAJT7A2.js +84 -0
  244. package/chunks/initializer-LGQGC7ZT.js +71 -0
  245. package/chunks/installationInfo-4FEZGXIN.js +65 -0
  246. package/chunks/{ja-2HOTA47X.js → ja-CDXUA2H3.js} +92 -7
  247. package/chunks/{keychain-token-storage-UJV5XP4Z.js → keychain-token-storage-VKUBNCP4.js} +4 -4
  248. package/chunks/{kittyProtocolDetector-OJRCJLIU.js → kittyProtocolDetector-HCNNKJTI.js} +2 -2
  249. package/chunks/list-KIVFF3BB.js +74 -0
  250. package/chunks/loadedSettingsAdapter-EOD3RVZS.js +68 -0
  251. package/chunks/{loop-wakeup-OHWEMFP5.js → loop-wakeup-WX7BLWWP.js} +10 -10
  252. package/chunks/{lowlight-FYAAUU5J.js → lowlight-J2OZNPCA.js} +1 -1
  253. package/chunks/{ls-L654WOAT.js → ls-ZB2BDP6T.js} +6 -6
  254. package/chunks/{lsp-M35KE54Y.js → lsp-V5DN4YUJ.js} +6 -8
  255. package/chunks/mcp-D2P46DB4.js +68 -0
  256. package/chunks/{monitor-464OY2UE.js → monitor-4ZWVOL6J.js} +50 -50
  257. package/chunks/{multipart-parser-AJ4WASWR.js → multipart-parser-AWZKXSQN.js} +3 -3
  258. package/chunks/nonInteractiveCli-NAHUR2X6.js +124 -0
  259. package/chunks/{notebook-edit-BLJYCNDO.js → notebook-edit-RCQ2D2IE.js} +51 -51
  260. package/chunks/openaiContentGenerator-U655T5QC.js +56 -0
  261. package/chunks/pidfile-O3OO2TCP.js +73 -0
  262. package/chunks/{pt-2THT3YHA.js → pt-6IR2VRQY.js} +91 -6
  263. package/chunks/{qwenContentGenerator-SUUHZ6CR.js → qwenContentGenerator-ABGWCRS6.js} +52 -52
  264. package/chunks/{qwenOAuth2-ZV7YLMND.js → qwenOAuth2-PJQ27GSO.js} +9 -9
  265. package/chunks/read-file-X7M4GUPY.js +30 -0
  266. package/chunks/{read-mcp-resource-CNQHBSJM.js → read-mcp-resource-SM5DA4RG.js} +5 -5
  267. package/chunks/{read-package-up-ER5OJUGP.js → read-package-up-TCM6I7S2.js} +2 -2
  268. package/chunks/{record-artifact-PP3LKHTS.js → record-artifact-4XKZX3UW.js} +7 -7
  269. package/chunks/ripGrep-KMPJJK5J.js +60 -0
  270. package/chunks/{ru-Z67YJHBG.js → ru-DBTHQA3F.js} +91 -6
  271. package/chunks/{run-qwen-serve-5OKADVLE.js → run-qwen-serve-O6CMPURG.js} +958 -184
  272. package/chunks/runtime-THE2YO27.js +94 -0
  273. package/chunks/{scheduler-ZRW3AIDU.js → scheduler-XXEA6EFC.js} +51 -51
  274. package/chunks/{send-message-OA6MV4EU.js → send-message-F36YD6KQ.js} +7 -7
  275. package/chunks/serve-W6F44JQQ.js +74 -0
  276. package/chunks/{server-M372UENX.js → server-SAEKMY52.js} +4340 -829
  277. package/chunks/{session-F5KSNP2N.js → session-4GGYGOWY.js} +162 -117
  278. package/chunks/settings-PYEU5HVD.js +118 -0
  279. package/chunks/shell-JGQECKTH.js +68 -0
  280. package/chunks/{skill-A2TL2NPC.js → skill-XPP3C2DS.js} +24 -24
  281. package/chunks/spawnChannel-62QKQBQN.js +70 -0
  282. package/chunks/{src-XKZMNHXS.js → src-2656Q6SN.js} +126 -52
  283. package/chunks/{src-7XL4G4DC.js → src-VLI3TKEY.js} +4 -4
  284. package/chunks/standalone-update-X7AZVG5R.js +79 -0
  285. package/chunks/{startInteractiveUI-REKSTOHU.js → startInteractiveUI-DXR4K6T5.js} +2277 -1834
  286. package/chunks/stdioHelpers-UMY72QRP.js +14 -0
  287. package/chunks/{syntheticOutput-F7LSDCAR.js → syntheticOutput-34H7LGA7.js} +5 -5
  288. package/chunks/task-create-FRGOEIKY.js +22 -0
  289. package/chunks/{task-list-TGGJX7EA.js → task-list-OW766BXZ.js} +10 -10
  290. package/chunks/{task-stop-W7NGTMYQ.js → task-stop-SIR5SNBN.js} +4 -4
  291. package/chunks/{task-update-5WUG5MVQ.js → task-update-YRA532MT.js} +12 -12
  292. package/chunks/{team-create-TBQVWAG7.js → team-create-3EHCUCKA.js} +50 -50
  293. package/chunks/{team-delete-UHQQ2QQX.js → team-delete-6OSECUZC.js} +10 -10
  294. package/chunks/{team-plan-approval-FZPGUSHJ.js → team-plan-approval-KZ7NZIMX.js} +50 -50
  295. package/chunks/theme-manager-J7ANV4JR.js +64 -0
  296. package/chunks/{todoWrite-C4ZAMSR3.js → todoWrite-YDMFEV4G.js} +6 -6
  297. package/chunks/{tool-search-FDQ3SLNJ.js → tool-search-2XLGWG4H.js} +24 -24
  298. package/chunks/total-session-admission-EQIHUOL6.js +72 -0
  299. package/chunks/trustedFolders-BEX5334Z.js +79 -0
  300. package/chunks/{types-QX5C3CHJ.js → types-JNKGKUJT.js} +2 -2
  301. package/chunks/updateCheck-NKPJGJCR.js +69 -0
  302. package/chunks/updateEventEmitter-5MKC7BLQ.js +10 -0
  303. package/chunks/validateNonInterActiveAuth-6DGGGE4A.js +190 -0
  304. package/chunks/{version-CEDD6ZZR.js → version-FRVWU5ZU.js} +3 -3
  305. package/chunks/{web-fetch-UYGMOHW4.js → web-fetch-PAAEQKBW.js} +8 -8
  306. package/chunks/{workflow-CQQ4J4I6.js → workflow-LWFMECLD.js} +51 -51
  307. package/chunks/workspace-providers-status-NE7QWEYS.js +71 -0
  308. package/chunks/workspace-registry-RCWAP57G.js +76 -0
  309. package/chunks/workspace-service-4QUMVGBX.js +80 -0
  310. package/chunks/workspace-skills-status-L34BYRSY.js +70 -0
  311. package/chunks/{write-file-VWGY7AJP.js → write-file-WXO4M5FN.js} +51 -51
  312. package/chunks/{yargs-B64EYTCF.js → yargs-6H2AUULL.js} +2 -2
  313. package/chunks/{zh-7XVVRTDH.js → zh-LJP47LX7.js} +101 -7
  314. package/chunks/{zh-TW-DPH554OG.js → zh-TW-5ISMO3VJ.js} +101 -7
  315. package/cli.js +18 -17
  316. package/locales/ca.js +117 -7
  317. package/locales/de.js +116 -7
  318. package/locales/en.js +133 -7
  319. package/locales/fr.js +117 -7
  320. package/locales/ja.js +119 -7
  321. package/locales/pt.js +116 -7
  322. package/locales/ru.js +116 -7
  323. package/locales/zh-TW.js +130 -7
  324. package/locales/zh.js +130 -7
  325. package/package.json +3 -6
  326. package/web-shell/assets/{arc-C7hjaa7g.js → arc-BRDEF7h6.js} +1 -1
  327. package/web-shell/assets/{architectureDiagram-3BPJPVTR-pm9KtMZY.js → architectureDiagram-3BPJPVTR-Cxnk4Ygq.js} +1 -1
  328. package/web-shell/assets/{blockDiagram-GPEHLZMM-CApElKsU.js → blockDiagram-GPEHLZMM-BZrtayqw.js} +1 -1
  329. package/web-shell/assets/{c4Diagram-AAUBKEIU-BeDe0-9N.js → c4Diagram-AAUBKEIU-Djmbi1yB.js} +1 -1
  330. package/web-shell/assets/channel-C9zfQCn-.js +1 -0
  331. package/web-shell/assets/{chunk-2J33WTMH-DJEkmLdl.js → chunk-2J33WTMH-Cdokj-0U.js} +1 -1
  332. package/web-shell/assets/{chunk-4BX2VUAB-DXX8gdpe.js → chunk-4BX2VUAB-BI9Hx57o.js} +1 -1
  333. package/web-shell/assets/{chunk-55IACEB6-DORmk1kQ.js → chunk-55IACEB6-Cb17cEzj.js} +1 -1
  334. package/web-shell/assets/{chunk-727SXJPM-DWmO4mCZ.js → chunk-727SXJPM-DY1Fc0h_.js} +1 -1
  335. package/web-shell/assets/{chunk-AQP2D5EJ-C7LRaYw2.js → chunk-AQP2D5EJ-B10G71Hd.js} +1 -1
  336. package/web-shell/assets/{chunk-FMBD7UC4-CCdXgyC5.js → chunk-FMBD7UC4-BP6OoB6Z.js} +1 -1
  337. package/web-shell/assets/{chunk-ND2GUHAM-SyL_xvWc.js → chunk-ND2GUHAM-CWIIwUFC.js} +1 -1
  338. package/web-shell/assets/{chunk-QZHKN3VN-BzOuCKxa.js → chunk-QZHKN3VN-DMrqCfGO.js} +1 -1
  339. package/web-shell/assets/classDiagram-4FO5ZUOK-BVNaf5JM.js +1 -0
  340. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BVNaf5JM.js +1 -0
  341. package/web-shell/assets/{cose-bilkent-S5V4N54A-BMPWyDKc.js → cose-bilkent-S5V4N54A-CF-mpkgI.js} +1 -1
  342. package/web-shell/assets/{dagre-BM42HDAG-B_GnPWik.js → dagre-BM42HDAG-DfsRFsg7.js} +1 -1
  343. package/web-shell/assets/{diagram-2AECGRRQ-fJqMc3S_.js → diagram-2AECGRRQ-DBNwf6Dy.js} +1 -1
  344. package/web-shell/assets/{diagram-5GNKFQAL-ximV3O9D.js → diagram-5GNKFQAL-CD1TqV1j.js} +1 -1
  345. package/web-shell/assets/{diagram-KO2AKTUF-2vVyjzqw.js → diagram-KO2AKTUF-DkWlaLI2.js} +1 -1
  346. package/web-shell/assets/{diagram-LMA3HP47-Dckcx1sT.js → diagram-LMA3HP47-ClrAcxwF.js} +1 -1
  347. package/web-shell/assets/{diagram-OG6HWLK6-BAVv47ga.js → diagram-OG6HWLK6-Dr6dnPLw.js} +1 -1
  348. package/web-shell/assets/{erDiagram-TEJ5UH35-Bn3nf5J0.js → erDiagram-TEJ5UH35-Dm_vj18R.js} +1 -1
  349. package/web-shell/assets/{flowDiagram-I6XJVG4X-BIbGF9JT.js → flowDiagram-I6XJVG4X-lp3cMdZu.js} +1 -1
  350. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CDbhb3AH.js → ganttDiagram-6RSMTGT7-AtdCWZya.js} +3 -3
  351. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CbKG1a_w.js → gitGraphDiagram-PVQCEYII-BARTJafF.js} +1 -1
  352. package/web-shell/assets/index-BkNgyfu7.js +3 -0
  353. package/web-shell/assets/index-CihmnZZR.js +784 -0
  354. package/web-shell/assets/index-zfdXhnwH.css +5 -0
  355. package/web-shell/assets/{infoDiagram-5YYISTIA-DUFxTy8m.js → infoDiagram-5YYISTIA-CxbJ54_f.js} +1 -1
  356. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D69hrBG8.js → ishikawaDiagram-YF4QCWOH-hFoO0HQA.js} +1 -1
  357. package/web-shell/assets/{journeyDiagram-JHISSGLW-DsvEw51Y.js → journeyDiagram-JHISSGLW-Bo6cKnLe.js} +1 -1
  358. package/web-shell/assets/{kanban-definition-UN3LZRKU-lFFjZEYd.js → kanban-definition-UN3LZRKU-DIFrH-XL.js} +1 -1
  359. package/web-shell/assets/{linear-Bo5bWzvo.js → linear-Bjv_GjDd.js} +1 -1
  360. package/web-shell/assets/{mermaid.core-C_HKMJx5.js → mermaid.core-C_OiqQEP.js} +5 -5
  361. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DlV-NUTs.js → mindmap-definition-RKZ34NQL-B79Gk8aB.js} +1 -1
  362. package/web-shell/assets/{pieDiagram-4H26LBE5-B2e6FH2a.js → pieDiagram-4H26LBE5-B_P0gIHr.js} +1 -1
  363. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D75kSk-b.js → quadrantDiagram-W4KKPZXB-BC7F0ohb.js} +1 -1
  364. package/web-shell/assets/{requirementDiagram-4Y6WPE33-CQ6xakhM.js → requirementDiagram-4Y6WPE33-BrA5_NSW.js} +1 -1
  365. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-J_XTKrcY.js → sankeyDiagram-5OEKKPKP-Q2iqrNI_.js} +1 -1
  366. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D7jTcBtf.js → sequenceDiagram-3UESZ5HK-6vdIWz4H.js} +1 -1
  367. package/web-shell/assets/{stateDiagram-AJRCARHV-CrlM_OT3.js → stateDiagram-AJRCARHV-DMzXNKcB.js} +1 -1
  368. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BWFH0OCO.js +1 -0
  369. package/web-shell/assets/{timeline-definition-PNZ67QCA-5oZi76Ef.js → timeline-definition-PNZ67QCA-BykEawmS.js} +1 -1
  370. package/web-shell/assets/{vennDiagram-CIIHVFJN-DO5YptPK.js → vennDiagram-CIIHVFJN-B24KD2X1.js} +1 -1
  371. package/web-shell/assets/{wardley-L42UT6IY-4t1eJDvM.js → wardley-L42UT6IY-C761G_tA.js} +1 -1
  372. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DKZc661S.js → wardleyDiagram-YWT4CUSO-CfwGJYqw.js} +1 -1
  373. package/web-shell/assets/{xychartDiagram-2RQKCTM6-su9hp08G.js → xychartDiagram-2RQKCTM6-BDu5AZ2D.js} +1 -1
  374. package/web-shell/index.html +16 -4
  375. package/chunks/MaxSizedBox-XY5LIO5O.js +0 -71
  376. package/chunks/agent-TKIBLLQT.js +0 -68
  377. package/chunks/agent-headless-VLX4C7KX.js +0 -62
  378. package/chunks/bridge-BCU73DZO.js +0 -77
  379. package/chunks/chunk-6SHO7WFF.js +0 -79
  380. package/chunks/chunk-IFEWJXFS.js +0 -37
  381. package/chunks/chunk-S6RLAIUR.js +0 -23
  382. package/chunks/contextCommand-LAYJZF7H.js +0 -68
  383. package/chunks/daemon-status-provider-XSAFKVDS.js +0 -74
  384. package/chunks/earlyInputCapture-AERYYGXE.js +0 -69
  385. package/chunks/errors-GMZL4QV7.js +0 -75
  386. package/chunks/handleAutoUpdate-HN7ZOSXY.js +0 -65
  387. package/chunks/initializer-SRN3IM42.js +0 -69
  388. package/chunks/list-INTVXUPA.js +0 -71
  389. package/chunks/loadedSettingsAdapter-QVHHQPGM.js +0 -66
  390. package/chunks/mcp-7V4T46RG.js +0 -66
  391. package/chunks/nonInteractiveCli-LJEEODU2.js +0 -116
  392. package/chunks/openaiContentGenerator-PFF6HYB2.js +0 -56
  393. package/chunks/pidfile-LIBUENIV.js +0 -73
  394. package/chunks/read-file-L7TBQVX7.js +0 -30
  395. package/chunks/ripGrep-CKKX3GRB.js +0 -60
  396. package/chunks/serve-36WS32W6.js +0 -71
  397. package/chunks/settings-WFLNS3WT.js +0 -114
  398. package/chunks/shell-DEDSWN56.js +0 -68
  399. package/chunks/spawnChannel-RQHUWTCL.js +0 -70
  400. package/chunks/task-create-RPFZNB4B.js +0 -22
  401. package/chunks/theme-manager-DQZVNSOC.js +0 -64
  402. package/chunks/trustedFolders-Z475EIHL.js +0 -79
  403. package/chunks/updateCheck-E2ZX7RL7.js +0 -65
  404. package/chunks/validateNonInterActiveAuth-O4ECBHQL.js +0 -181
  405. package/chunks/workspace-providers-status-MVYXMYDG.js +0 -68
  406. package/chunks/workspace-service-OMBR6ZLG.js +0 -78
  407. package/chunks/workspace-skills-status-IMMQ7CAY.js +0 -68
  408. package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +0 -35
  409. package/node_modules/@qwen-code/audio-capture/dist/index.js +0 -48
  410. package/node_modules/@qwen-code/audio-capture/dist/index.js.map +0 -1
  411. package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +0 -7
  412. package/node_modules/@qwen-code/audio-capture/dist/platform.js +0 -18
  413. package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +0 -1
  414. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +0 -21
  415. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +0 -58
  416. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +0 -5
  417. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +0 -84
  418. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +0 -19
  419. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +0 -6
  420. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +0 -207
  421. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +0 -7
  422. package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +0 -43
  423. package/node_modules/@qwen-code/audio-capture/package.json +0 -30
  424. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  425. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  426. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
  427. package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
  428. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  429. package/web-shell/assets/channel-BNf1dW-j.js +0 -1
  430. package/web-shell/assets/classDiagram-4FO5ZUOK-uOIGlzgi.js +0 -1
  431. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-uOIGlzgi.js +0 -1
  432. package/web-shell/assets/index-CnE2ur2L.js +0 -779
  433. package/web-shell/assets/index-hSKXrlSE.css +0 -5
  434. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Bs4TK_84.js +0 -1
@@ -77,28 +77,28 @@ Settings are organized into categories. Most settings should be placed within th
77
77
 
78
78
  #### general
79
79
 
80
- | Setting | Type | Description | Default |
81
- | ------------------------------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
82
- | `general.preferredEditor` | string | The preferred editor to open files in. | `undefined` |
83
- | `general.vimMode` | boolean | Enable Vim keybindings. | `false` |
84
- | `general.enableAutoUpdate` | boolean | Enable automatic update checks and installations on startup. | `true` |
85
- | `general.showSessionRecap` | boolean | Auto-show a one-line "where you left off" recap when returning to the terminal after being away. Off by default. Use `/recap` to trigger manually regardless of this setting. | `false` |
86
- | `general.sessionRecapAwayThresholdMinutes` | number | Minutes the terminal must be blurred before an auto-recap fires on focus-in. Only used when `showSessionRecap` is enabled. | `5` |
87
- | `general.gitCoAuthor.commit` | boolean | Add a Co-authored-by trailer to git commit messages AND attach a per-file AI-attribution git note (`refs/notes/ai-attribution`) for commits made through Qwen Code. Disabling skips both. | `true` |
88
- | `general.gitCoAuthor.pr` | boolean | Append a Qwen Code attribution line to pull request descriptions when running `gh pr create`. | `true` |
89
- | `general.defaultFileEncoding` | enum | Default encoding for new files. Use `"utf-8"` (default) for UTF-8 without BOM, or `"utf-8-bom"` for UTF-8 with BOM. Only change this if your project specifically requires BOM. | `"utf-8"` |
90
- | `general.voice.enabled` | boolean | Enable voice dictation in the prompt input. Also togglable with the `/voice` command. Requires a transcription model (`voiceModel`) to be configured. | `false` |
91
- | `general.voice.mode` | enum | How push-to-talk behaves: `"hold"` to talk while the key is held, or `"tap"` to start and tap (or pause) to stop and submit. | `"hold"` |
92
- | `general.voice.language` | string | Preferred spoken language for voice transcription (e.g. `"english"`, `"chinese"`). Leave empty to auto-detect. | `""` |
80
+ | Setting | Type | Description | Default |
81
+ | ------------------------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
82
+ | `general.preferredEditor` | string | The preferred editor to open files in. | `undefined` |
83
+ | `general.vimMode` | boolean | Enable Vim keybindings. | `false` |
84
+ | `general.enableAutoUpdate` | boolean | Enable automatic update checks and installations on startup. | `true` |
85
+ | `general.showSessionRecap` | boolean | Auto-show a one-line "where you left off" recap when returning to the terminal after being away. Off by default. Use `/recap` to trigger manually regardless of this setting. | `false` |
86
+ | `general.sessionRecapAwayThresholdMinutes` | number | Minutes the terminal must be blurred before an auto-recap fires on focus-in. Only used when `showSessionRecap` is enabled. | `5` |
87
+ | `general.gitCoAuthor.commit` | boolean | Add a Co-authored-by trailer to git commit messages AND attach a per-file AI-attribution git note (`refs/notes/ai-attribution`) for commits made through Qwen Code. Disabling skips both. | `true` |
88
+ | `general.gitCoAuthor.pr` | boolean | Append a Qwen Code attribution line to pull request descriptions when running `gh pr create`. | `true` |
89
+ | `general.defaultFileEncoding` | enum | Default encoding for new files. Use `"utf-8"` (default) for UTF-8 without BOM, or `"utf-8-bom"` for UTF-8 with BOM. Only change this if your project specifically requires BOM. | `"utf-8"` |
90
+ | `general.voice.enabled` | boolean | Enable voice dictation in the prompt input. Also togglable with the `/voice` command. Requires a transcription model (`voiceModel`) to be configured. | `false` |
91
+ | `general.voice.mode` | enum | How push-to-talk behaves: `"hold"` to talk while the key is held, or `"tap"` to start and tap (or pause) to stop and submit. | `"hold"` |
92
+ | `general.voice.language` | string | Preferred spoken language for voice transcription (e.g. `"english"`, `"chinese"`). Leave empty to auto-detect. | `""` |
93
93
  | `general.voice.keytermsFile` | string | Path to a custom keyterms file (one term per line, `#` for comments) that biases voice transcription toward domain-specific terms. Relative paths resolve from the workspace root; defaults to `.qwen/voice-keyterms.txt` when present. Read only in trusted workspaces. Only applies to Qwen ASR models (`qwen3-asr-*`). | `""` |
94
- | `general.voice.refineTranscript` | boolean | Clean up voice transcripts with the fast model before inserting them — removes filler words and fixes recognition errors while preserving meaning. Falls back to the raw transcript on failure, and is skipped when no fast model is configured. | `true` |
95
- | `general.cleanupPeriodDays` | number | Days to retain `~/.qwen/file-history/` session backups used by `/rewind`. Backups older than this are removed by a background pass that runs at most once per day. `0` = minimum retention (~1 hour): keeps sessions touched in the last hour plus the currently active one. Changes take effect after restart. | `30` |
96
- | `general.language` | enum | Language for the user interface. Use `"auto"` to detect from system settings, or a language code (e.g. `"zh-CN"`, `"fr"`). Custom codes can be added by placing JS locale files in `~/.qwen/locales/`. See [i18n](../features/language). Requires restart. | `"auto"` |
97
- | `general.outputLanguage` | string | Language for model output. Use `"auto"` to detect from system settings, or set a specific language. Requires restart. | `"auto"` |
98
- | `general.dynamicCommandTranslation` | boolean | Enable AI translation of dynamic slash-command descriptions. When disabled, dynamic commands keep their original descriptions and skip translation model calls. | `false` |
99
- | `general.terminalBell` | boolean | Play a terminal bell sound when a response completes or needs approval. | `true` |
100
- | `general.preventSystemSleep` | boolean | Prevent the system from sleeping while Qwen Code is streaming a model response or executing tools. Idle prompt time and permission prompts do not inhibit sleep. Read once at startup, so changes take effect after restart. | `true` |
101
- | `general.chatRecording` | boolean | Save chat history to disk. Disabling this also prevents `--continue` and `--resume` from working. Requires restart. | `true` |
94
+ | `general.voice.refineTranscript` | boolean | Clean up voice transcripts with the fast model before inserting them — removes filler words and fixes recognition errors while preserving meaning. Falls back to the raw transcript on failure, and is skipped when no fast model is configured. | `true` |
95
+ | `general.cleanupPeriodDays` | number | Days to retain `~/.qwen/file-history/` session backups used by `/rewind`. Backups older than this are removed by a background pass that runs at most once per day. `0` = minimum retention (~1 hour): keeps sessions touched in the last hour plus the currently active one. Changes take effect after restart. | `30` |
96
+ | `general.language` | enum | Language for the user interface. Use `"auto"` to detect from system settings, or a language code (e.g. `"zh-CN"`, `"fr"`). Custom codes can be added by placing JS locale files in `~/.qwen/locales/`. See [i18n](../features/language). Requires restart. | `"auto"` |
97
+ | `general.outputLanguage` | string | Language for model output. Use `"auto"` to detect from system settings, or set a specific language. Requires restart. | `"auto"` |
98
+ | `general.dynamicCommandTranslation` | boolean | Enable AI translation of dynamic slash-command descriptions. When disabled, dynamic commands keep their original descriptions and skip translation model calls. | `false` |
99
+ | `general.terminalBell` | boolean | Play a terminal bell sound when a response completes or needs approval. | `true` |
100
+ | `general.preventSystemSleep` | boolean | Prevent the system from sleeping while Qwen Code is streaming a model response or executing tools. Idle prompt time and permission prompts do not inhibit sleep. Read once at startup, so changes take effect after restart. | `true` |
101
+ | `general.chatRecording` | boolean | Save chat history to disk. Disabling this also prevents `--continue` and `--resume` from working. Requires restart. | `true` |
102
102
 
103
103
  #### output
104
104
 
@@ -125,7 +125,7 @@ Settings are organized into categories. Most settings should be placed within th
125
125
  | `ui.showCitations` | boolean | Show citations for generated text in the chat. | `false` |
126
126
  | `ui.history.collapseOnResume` | boolean | Whether to collapse history by default when resuming a session. Can be toggled via `/history collapse-on-resume` and `/history expand-on-resume`. | `false` |
127
127
  | `ui.history.collapsePreviewCount` | number | Number of most recent user turns to keep visible when `ui.history.collapseOnResume` is enabled. `0` collapses all restored history by default; `-1` shows all restored history. | `0` |
128
- | `ui.compactMode` | boolean | Hide tool output and thinking for a cleaner view. Toggle with `Ctrl+O` during a session or via the Settings dialog. Tool approval prompts are never hidden, even in compact mode. The setting persists across sessions. | `false` |
128
+ | `ui.compactMode` | boolean | Retired in the terminal UI. The CLI now always shows the compact, type-based tool view in the main transcript; press `Ctrl+O` to open the full-detail transcript instead of toggling a mode. Still honored by the web shell. | `false` |
129
129
  | `ui.shellOutputMaxLines` | number | Max number of shell output lines shown inline. Set to `0` to disable the cap and show full output. Hidden lines are surfaced via the `+N lines` indicator. Errors, `!`-prefix user-initiated commands, confirming tools, and focused embedded shells always show full output. | `5` |
130
130
  | `ui.enableWelcomeBack` | boolean | Show welcome back dialog when returning to a project with conversation history. When enabled, Qwen Code will automatically detect if you're returning to a project with a previously generated project summary (`.qwen/PROJECT_SUMMARY.md`) and show a dialog allowing you to continue your previous conversation or start fresh. If you choose **Start new chat session**, that choice is remembered for the current project until the project summary changes. This feature integrates with the `/summary` command and quit confirmation dialog. | `true` |
131
131
  | `ui.accessibility.enableLoadingPhrases` | boolean | Enable loading phrases (disable for accessibility). | `true` |
@@ -172,7 +172,7 @@ Settings are organized into categories. Most settings should be placed within th
172
172
  | `model.chatCompression.maxRecentFilesToRetain` | number | Number of most-recently-touched files whose current content is restored (embedded if small, otherwise referenced by path) into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_FILES`. | `5` |
173
173
  | `model.chatCompression.maxRecentImagesToRetain` | number | Number of most-recent images (tool screenshots / user pastes) restored into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_IMAGES`. | `3` |
174
174
  | `model.chatCompression.enableScreenshotTrigger` | boolean | When `true`, auto-compaction also fires once the number of tool-returned images accumulated in history reaches `screenshotTriggerThreshold`, independent of token usage — aimed at computer-use sessions where frequent screenshots dilute model attention. Counts only images returned inside tool results, not user-pasted images. Env override: `QWEN_COMPACT_SCREENSHOT_TRIGGER` (`1`/`true`/`0`/`false`). | `true` |
175
- | `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `QWEN_COMPACT_SCREENSHOT_THRESHOLD`. | `50` |
175
+ | `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `QWEN_COMPACT_SCREENSHOT_THRESHOLD`. | `20` |
176
176
  | `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `true` |
177
177
  | `model.skipLoopDetection` | boolean | Disables streaming loop detection checks. Defaults to `true` (loop detection is skipped) to avoid false positives interrupting legitimate workflows. Set to `false` to re-enable streaming loop detection — useful as a guardrail in headless / non-interactive runs where stuck repetition can otherwise waste budget. | `true` |
178
178
  | `model.maxToolCallsPerTurn` | number | Hard cap on tool calls within a single turn (one model turn plus its tool-result continuations; blocking Stop-hook continuations such as `/goal` iterations start a fresh budget). Always-on circuit breaker against runaway turns, independent of `model.skipLoopDetection`; the pattern-based loop detectors fire long before this cap, which only bounds total volume. Set to `0` or a negative value to disable the cap. Choosing "Disable loop detection for this session" in the loop-detected dialog also suppresses it for the rest of the session. | `100` |
@@ -262,6 +262,12 @@ The `extra_body` field allows you to add custom parameters to the request body s
262
262
  | ------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
263
263
  | `visionModel` | string | Image-capable model used as the vision bridge: when a text-only main model receives an image, it is transcribed by this model first. Leave empty to auto-pick a same-provider vision model. Can also be set via `/model --vision`. | `""` |
264
264
 
265
+ #### visionBridgeTimeoutMs
266
+
267
+ | Setting | Type | Description | Default |
268
+ | ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
269
+ | `visionBridgeTimeoutMs` | integer | Per-attempt timeout in milliseconds for the vision bridge image transcription call (positive integer up to 2147483647; the bridge retries a timed-out attempt once with a fresh timeout). Unset uses the built-in 30s. Raise for slow or proxied vision endpoints. | unset |
270
+
265
271
  #### voiceModel
266
272
 
267
273
  | Setting | Type | Description | Default |
@@ -270,33 +276,33 @@ The `extra_body` field allows you to add custom parameters to the request body s
270
276
 
271
277
  #### modelFallbacks
272
278
 
273
- | Setting | Type | Description | Default |
274
- | ---------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
279
+ | Setting | Type | Description | Default |
280
+ | ---------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
275
281
  | `modelFallbacks` | string | Ordered list of fallback model IDs (comma-separated, max 3) to try when the primary model hits capacity errors (429/503/529). Example: `"qwen-plus,qwen-turbo"`. Can also be set via the `--fallback-model` CLI flag. Requires restart. | `""` |
276
282
 
277
283
  #### modelPricing
278
284
 
279
- | Setting | Type | Description | Default |
280
- | -------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
285
+ | Setting | Type | Description | Default |
286
+ | -------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
281
287
  | `modelPricing` | object | Optional per-model pricing for cost estimation in `/stats model`. Example: `{ "qwen3-coder": { "inputPerMillionTokens": 0.30, "outputPerMillionTokens": 1.20 } }`. | `undefined` |
282
288
 
283
289
  #### context
284
290
 
285
- | Setting | Type | Description | Default |
286
- | ----------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
287
- | `context.fileName` | string or array of strings | The name of the context file(s). | `undefined` |
288
- | `context.autoCompactThreshold` | number | Fraction of the context window at which auto-compaction triggers. Must be greater than 0 and at most 1. Default is `0.7` (70%). For large context windows (>110K tokens), the absolute branch of the three-tier threshold system dominates, so values below ~0.7 may have no visible effect. Custom thresholds primarily affect small-window models (≤128K). Replaces the old `model.chatCompression.contextPercentageThreshold`. | `undefined` (uses internal 0.7) |
289
- | `context.importFormat` | string | The format to use when importing memory. | `undefined` |
290
- | `context.includeDirectories` | array | Additional directories to include in the workspace context. Specifies an array of additional absolute or relative paths to include in the workspace context. Missing directories will be skipped with a warning by default. Paths can use `~` to refer to the user's home directory. This setting can be combined with the `--include-directories` command-line flag. | `[]` |
291
- | `context.loadFromIncludeDirectories` | boolean | Controls the behavior of the `/memory refresh` command. If set to `true`, `QWEN.md` files should be loaded from all directories that are added. If set to `false`, `QWEN.md` should only be loaded from the current directory. | `false` |
292
- | `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching. | `true` |
293
- | `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore and configured custom ignore files when searching. | `true` |
294
- | `context.fileFiltering.customIgnoreFiles` | array | Project-root-relative ignore files to use instead of the default compatibility files (`.agentignore`, `.aiignore`) when `respectQwenIgnore` is enabled. `.qwenignore` is always included. | `[".agentignore", ".aiignore"]` |
295
- | `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt. | `true` |
296
- | `context.fileFiltering.enableFuzzySearch` | boolean | When `true`, enables fuzzy search capabilities when searching for files. Set to `false` to improve performance on projects with a large number of files. | `true` |
297
- | `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger. | `60` |
298
- | `context.clearContextOnIdle.toolResultsNumToKeep` | integer | Integer number of most-recent compactable tool results to preserve when clearing. Values below 1 are floored to 1. | `5` |
299
- | `context.clearContextOnIdle.toolResultsTotalCharsThreshold` | number | Total compactable tool result output characters allowed in history before clearing oldest results. Use `-1` to disable the size trigger. This is a soft threshold: protected recent tool results may keep the total above it. | `500000` |
291
+ | Setting | Type | Description | Default |
292
+ | ----------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------- |
293
+ | `context.fileName` | string or array of strings | The name of the context file(s). | `undefined` |
294
+ | `context.autoCompactThreshold` | number | Target fraction of the context window at which auto-compaction triggers. Must be greater than 0 and at most 1. Default is `0.85` (85%). Acts as a ceiling on the trigger: on large windows it is the effective trigger (~85%), while on smaller windows compaction may fire earlier to leave room to summarize. Replaces the old `model.chatCompression.contextPercentageThreshold`. | `undefined` (uses internal 0.85) |
295
+ | `context.importFormat` | string | The format to use when importing memory. | `undefined` |
296
+ | `context.includeDirectories` | array | Additional directories to include in the workspace context. Specifies an array of additional absolute or relative paths to include in the workspace context. Missing directories will be skipped with a warning by default. Paths can use `~` to refer to the user's home directory. This setting can be combined with the `--include-directories` command-line flag. | `[]` |
297
+ | `context.loadFromIncludeDirectories` | boolean | Controls the behavior of the `/memory refresh` command. If set to `true`, `QWEN.md` files should be loaded from all directories that are added. If set to `false`, `QWEN.md` should only be loaded from the current directory. | `false` |
298
+ | `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching. | `true` |
299
+ | `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore and configured custom ignore files when searching. | `true` |
300
+ | `context.fileFiltering.customIgnoreFiles` | array | Project-root-relative ignore files to use instead of the default compatibility files (`.agentignore`, `.aiignore`) when `respectQwenIgnore` is enabled. `.qwenignore` is always included. | `[".agentignore", ".aiignore"]` |
301
+ | `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt. | `true` |
302
+ | `context.fileFiltering.enableFuzzySearch` | boolean | When `true`, enables fuzzy search capabilities when searching for files. Set to `false` to improve performance on projects with a large number of files. | `true` |
303
+ | `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger. | `60` |
304
+ | `context.clearContextOnIdle.toolResultsNumToKeep` | integer | Integer number of most-recent compactable tool results to preserve when clearing. Values below 1 are floored to 1. | `5` |
305
+ | `context.clearContextOnIdle.toolResultsTotalCharsThreshold` | number | Total compactable tool result output characters allowed in history before clearing oldest results. Use `-1` to disable the size trigger. This is a soft threshold: protected recent tool results may keep the total above it. | `500000` |
300
306
 
301
307
  #### Troubleshooting File Search Performance
302
308
 
@@ -315,6 +321,8 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
315
321
  | `tools.shell.enableInteractiveShell` | boolean | Use `node-pty` for an interactive shell experience. Fallback to `child_process` still applies. | `true` | |
316
322
  | `tools.core` | array of strings | **Deprecated.** Will be removed in next version. Use `permissions.allow` + `permissions.deny` instead. Restricts built-in tools to an allowlist. All tools not in the list are disabled. | `undefined` | |
317
323
  | `tools.exclude` | array of strings | **Deprecated.** Use `permissions.deny` instead. Tool names to exclude from discovery. Automatically migrated to the `permissions` format on first load. | `undefined` | |
324
+ | `tools.disabled` | array of strings | Tool names hidden from the registry entirely. Unlike `permissions.deny` (which blocks calls at runtime), disabled tools are never registered, so they do not appear in `/tools` and cannot be discovered or called by the model. For example, `["enter_plan_mode"]` prevents the model from switching into plan mode on its own. Merged as a union across scopes. | `undefined` | |
325
+ | `tools.visible` | array of strings | Deferred tool names made visible at startup without requiring `tool_search`. Listed tools appear alongside core tools in the initial session. Merged as a union across scopes. | `undefined` | |
318
326
  | `tools.allowed` | array of strings | **Deprecated.** Use `permissions.allow` instead. Tool names that bypass the confirmation dialog. Automatically migrated to the `permissions` format on first load. | `undefined` | |
319
327
  | `tools.approvalMode` | string | Sets the default approval mode for tool usage. | `default` | Possible values: `plan` (analyze only, do not modify files or execute commands), `default` (require approval before file edits or shell commands run), `auto-edit` (automatically approve file edits), `auto` (LLM classifier auto-approves safe actions, blocks risky ones), `yolo` (automatically approve all tool calls) |
320
328
  | `tools.discoveryCommand` | string | Command to run for tool discovery. | `undefined` | |
@@ -325,7 +333,7 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
325
333
  | `tools.truncateToolOutputLines` | number | Maximum lines or entries kept when truncating tool output. Applies to Shell, Grep, Glob, ReadFile and ReadManyFiles tools. | `1000` | Requires restart: Yes |
326
334
  | `tools.computerUse.enabled` | boolean | Enable the built-in Computer Use tools (cua-driver native desktop automation). When `true` (default), the `computer_use__*` tools are registered as deferred built-ins; the first invocation downloads the pinned, signed cua-driver binary into `~/.qwen/computer-use/` and walks through macOS Accessibility / Screen Recording permissions. | `true` | Requires restart: Yes |
327
335
  | `tools.computerUse.maxImageDimension` | number | Longest-edge pixel cap applied to cua-driver screenshots (via `set_config`'s `max_image_dimension`). `-1` (default) keeps cua-driver's built-in default (1568); `0` disables resizing (full resolution); a positive value caps the longest edge. Lower caps cut vision-token cost at the expense of fine detail. | `-1` | Requires restart: Yes. Env override: `QWEN_COMPUTER_USE_MAX_IMAGE_DIMENSION` (a non-negative integer; takes precedence over this setting) |
328
- | `tools.computerUse.idleTimeoutMs` | number | Milliseconds to keep the cua-driver process alive after the last `computer_use__*` call. The default is `300000` (5 minutes). Set to `0` to keep it running until Qwen Code exits. | `300000` | Requires restart: Yes |
336
+ | `tools.computerUse.idleTimeoutMs` | number | Milliseconds to keep the cua-driver process alive after the last `computer_use__*` call. The default is `300000` (5 minutes). Set to `0` to keep it running until Qwen Code exits. | `300000` | Requires restart: Yes |
329
337
  | `tools.toolSearch.enabled` | boolean | Load MCP tools on demand via ToolSearch to reduce prompt size. Disable this for models that rely on prefix-based KV caching (e.g. DeepSeek) to keep the prompt prefix stable and maximize cache hit rates. | `true` | Requires restart: Yes |
330
338
 
331
339
  > [!note]
@@ -342,6 +350,7 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
342
350
  | `memory.autoSkillConfirm` | boolean | Ask for confirmation before auto-generated skills are added to the skill library. When off, auto-skills are saved immediately. | `true` |
343
351
  | `memory.enableTeamMemory` | boolean | Enable a project memory tier shared with collaborators via the git-tracked `.qwen/team-memory/` directory. Writes to it are secret-scanned and reviewable in the git diff. | `false` |
344
352
  | `memory.enableTeamMemorySync` | boolean | When team memory is enabled, automatically commit, fast-forward-pull, and push the `.qwen/team-memory/` directory at session start so collaborators stay in sync. Requires a configured git upstream. | `false` |
353
+ | `memory.agentTimeoutMinutes` | number | Max runtime in minutes for background memory agents (extraction, dream, remember, skill review). Unset uses each agent's built-in default (2–5 minutes); `0` disables the time limit. | unset |
345
354
 
346
355
  See [Memory](../features/memory) for details on how auto-memory works and how to use the `/memory`, `/remember`, and `/dream` commands.
347
356
 
@@ -477,18 +486,18 @@ execute when typed.
477
486
 
478
487
  Controls which [Skills](../features/skills) are exposed to the model.
479
488
 
480
- | Setting | Type | Description | Default |
481
- | ---------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
489
+ | Setting | Type | Description | Default |
490
+ | ----------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
482
491
  | `skills.disabled` | array of strings | Skill names to hide. Matched case-insensitively against the skill name. Hidden skills do not appear in `<available_skills>` or as `/<name>` slash commands. **Merged as a union** across user/project/system scopes, so a project cannot remove entries defined in user or system settings. | `undefined` |
483
492
 
484
493
  #### mcp
485
494
 
486
- | Setting | Type | Description | Default |
487
- | ------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
488
- | `mcp.serverCommand` | string | Command to start an MCP server. | `undefined` |
489
- | `mcp.allowed` | array of strings | An allowlist of MCP servers to allow. Allows you to specify a list of MCP server names that should be made available to the model. This can be used to restrict the set of MCP servers to connect to. Supports glob patterns (`*` matches any sequence, `?` matches a single character — e.g. `"*puppeteer*"`); entries without glob characters are matched exactly. Note that this will be ignored if `--allowed-mcp-server-names` is set. | `undefined` |
490
- | `mcp.excluded` | array of strings | A denylist of MCP servers to exclude. A server listed in both `mcp.excluded` and `mcp.allowed` is excluded. Supports glob patterns (`*`, `?`) the same way as `mcp.allowed`. Note that this will be ignored if `--allowed-mcp-server-names` is set. | `undefined` |
491
- | `mcp.toolIdleTimeoutMs` | number | Idle timeout in milliseconds for MCP tool calls. If the MCP server does not produce any response or progress update within this time, the call is aborted. Must be between `10000` and `3600000`. Can be overridden via the `QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS` environment variable. | `300000` |
495
+ | Setting | Type | Description | Default |
496
+ | ----------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
497
+ | `mcp.serverCommand` | string | Command to start an MCP server. | `undefined` |
498
+ | `mcp.allowed` | array of strings | An allowlist of MCP servers to allow. Allows you to specify a list of MCP server names that should be made available to the model. This can be used to restrict the set of MCP servers to connect to. Supports glob patterns (`*` matches any sequence, `?` matches a single character — e.g. `"*puppeteer*"`); entries without glob characters are matched exactly. Note that this will be ignored if `--allowed-mcp-server-names` is set. | `undefined` |
499
+ | `mcp.excluded` | array of strings | A denylist of MCP servers to exclude. A server listed in both `mcp.excluded` and `mcp.allowed` is excluded. Supports glob patterns (`*`, `?`) the same way as `mcp.allowed`. Note that this will be ignored if `--allowed-mcp-server-names` is set. | `undefined` |
500
+ | `mcp.toolIdleTimeoutMs` | number | Idle timeout in milliseconds for MCP tool calls. If the MCP server does not produce any response or progress update within this time, the call is aborted. Must be between `10000` and `3600000`. Can be overridden via the `QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS` environment variable. | `300000` |
492
501
 
493
502
  > [!note]
494
503
  >
@@ -16,6 +16,7 @@ export default {
16
16
  worktree: 'Worktrees',
17
17
  mcp: 'MCP',
18
18
  lsp: 'LSP (Language Server Protocol)',
19
+ 'computer-use': 'Computer Use',
19
20
  'token-caching': 'Token Caching',
20
21
  sandbox: 'Sandboxing',
21
22
  language: 'i18n',
@@ -30,11 +30,13 @@ Add the channel to `~/.qwen/settings.json`:
30
30
  "type": "dingtalk",
31
31
  "clientId": "$DINGTALK_CLIENT_ID",
32
32
  "clientSecret": "$DINGTALK_CLIENT_SECRET",
33
+ "useConnectionManager": true,
33
34
  "senderPolicy": "open",
34
35
  "sessionScope": "user",
35
36
  "cwd": "/path/to/your/project",
36
37
  "instructions": "You are a concise coding assistant responding via DingTalk.",
37
38
  "groupPolicy": "open",
39
+ "atSender": true,
38
40
  "groups": {
39
41
  "*": { "requireMention": true }
40
42
  }
@@ -61,6 +63,12 @@ Or define them in the `env` section of `settings.json`:
61
63
  }
62
64
  ```
63
65
 
66
+ ### Connection Recovery
67
+
68
+ `useConnectionManager` defaults to `true`. The connection manager monitors the Stream WebSocket and replaces the DingTalk SDK client when the connection stops responding. You should normally leave it enabled.
69
+
70
+ Set `"useConnectionManager": false` to disable Qwen Code's connection manager and fall back to the SDK's keepalive and automatic reconnect behavior.
71
+
64
72
  ## Running
65
73
 
66
74
  ```bash
@@ -83,6 +91,8 @@ DingTalk bots work in both DM and group conversations. To enable group support:
83
91
 
84
92
  By default, the bot requires an @mention in group chats (`requireMention: true`). Set `"requireMention": false` for a specific group to make it respond to all messages. See [Group Chats](./overview#group-chats) for full details.
85
93
 
94
+ Set `"atSender": true` to have the bot @mention the member whose group message triggered its response. It is off by default and only applies to agent replies with a DingTalk staff ID. Mentioned replies use plain text so the @ is visible; replies without a mention use Markdown formatting.
95
+
86
96
  ### Finding a Group's Conversation ID
87
97
 
88
98
  DingTalk uses `conversationId` to identify groups. You can find it in the channel service logs when someone sends a message in the group — look for the `conversationId` field in the log output.
@@ -99,14 +109,14 @@ You can send photos and documents to the bot, not just text.
99
109
 
100
110
  - **Authentication:** AppKey + AppSecret instead of a static bot token. The SDK manages access token refresh automatically.
101
111
  - **Connection:** WebSocket stream instead of polling — no public IP or webhook URL needed.
102
- - **Formatting:** Responses use DingTalk's markdown dialect (a limited subset). Tables are automatically converted to plain text since DingTalk doesn't render them. Long messages are split into chunks at ~3800 characters.
112
+ - **Formatting:** Responses use DingTalk's markdown dialect. Markdown tables are passed through to the DingTalk client; long messages are split into chunks at ~3800 characters.
103
113
  - **Working indicator:** A 👀 emoji reaction is added to the user's message while processing, then removed when the response is sent.
104
114
  - **Media download:** Two-step process — a `downloadCode` from the message is exchanged for a temporary download URL via DingTalk's API.
105
115
  - **Groups:** DingTalk uses `isInAtList` for @mention detection instead of parsing message entities.
106
116
 
107
117
  ## Tips
108
118
 
109
- - **Use DingTalk markdown-aware instructions** — DingTalk supports a limited markdown subset (headers, bold, links, code blocks, but not tables). Adding instructions like "Use DingTalk markdown. Avoid tables." helps the agent format responses correctly.
119
+ - **Use DingTalk markdown-aware instructions** — DingTalk supports headings, bold text, links, code blocks, and tables. Keep tables compact because narrow screens may scroll horizontally.
110
120
  - **Restrict access** — In an organization context, `senderPolicy: "open"` may be acceptable. For tighter control, use `"allowlist"` or `"pairing"`. See [DM Pairing](./overview#dm-pairing) for details.
111
121
  - **Referenced messages** — Quoting (replying to) a user message includes the quoted text as context for the agent. Quoting bot responses is not yet supported.
112
122
 
@@ -1,6 +1,6 @@
1
1
  # Channels
2
2
 
3
- Channels let you interact with a Qwen Code agent from messaging platforms like Telegram, WeChat, QQ, DingTalk, or Feishu, instead of the terminal. You send messages from your phone or desktop chat app, and the agent responds just like it would in the CLI.
3
+ Channels let you interact with a Qwen Code agent from messaging platforms like Telegram, WeChat, QQ, DingTalk, WeCom, or Feishu, instead of the terminal. You send messages from your phone or desktop chat app, and the agent responds just like it would in the CLI.
4
4
 
5
5
  ## How It Works
6
6
 
@@ -15,7 +15,7 @@ All channels share one agent process with isolated sessions per user. Each chann
15
15
 
16
16
  ## Quick Start
17
17
 
18
- 1. Set up a bot on your messaging platform (see channel-specific guides: [Telegram](./telegram), [WeChat](./weixin), [QQ Bot](./qqbot), [DingTalk](./dingtalk), [Feishu](./feishu))
18
+ 1. Set up a bot on your messaging platform (see channel-specific guides: [Telegram](./telegram), [WeChat](./weixin), [QQ Bot](./qqbot), [DingTalk](./dingtalk), [WeCom](./wecom), [Feishu](./feishu))
19
19
  2. Add the channel configuration to `~/.qwen/settings.json`
20
20
  3. Run `qwen channel start` to start all channels, or `qwen channel start <name>` for a single channel
21
21
 
@@ -37,6 +37,7 @@ Channels are configured under the `channels` key in `settings.json`. Each channe
37
37
  "cwd": "/path/to/working/directory",
38
38
  "instructions": "Optional system instructions for the agent.",
39
39
  "groupPolicy": "disabled",
40
+ "dmPolicy": "open",
40
41
  "groups": {
41
42
  "*": { "requireMention": true }
42
43
  }
@@ -49,10 +50,12 @@ Channels are configured under the `channels` key in `settings.json`. Each channe
49
50
 
50
51
  | Option | Required | Description |
51
52
  | ------------------------ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
52
- | `type` | Yes | Channel type: `telegram`, `weixin`, `qq`, `dingtalk`, `feishu`, or a custom type from an extension (see [Plugins](./plugins)) |
53
- | `token` | Telegram | Bot token. Supports `$ENV_VAR` syntax to read from environment variables. Not needed for WeChat, DingTalk, or Feishu |
53
+ | `type` | Yes | Channel type: `telegram`, `weixin`, `qq`, `dingtalk`, `wecom`, `feishu`, or a custom type from an extension (see [Plugins](./plugins)) |
54
+ | `token` | Telegram | Bot token. Supports `$ENV_VAR` syntax to read from environment variables. Not needed for WeChat, DingTalk, WeCom, or Feishu |
54
55
  | `clientId` | DingTalk, Feishu | DingTalk AppKey or Feishu App ID. Supports `$ENV_VAR` syntax |
55
56
  | `clientSecret` | DingTalk, Feishu | DingTalk AppSecret or Feishu App Secret. Supports `$ENV_VAR` syntax |
57
+ | `botId` | WeCom | WeCom intelligent robot Bot ID. Supports `$ENV_VAR` syntax. See [WeCom](./wecom) |
58
+ | `secret` | WeCom | WeCom intelligent robot Secret. Supports `$ENV_VAR` syntax. See [WeCom](./wecom) |
56
59
  | `model` | No | Model to use for this channel (e.g., `qwen3.5-plus`). Overrides the default model. Useful for multimodal models that support image input |
57
60
  | `senderPolicy` | No | Who can talk to the bot: `allowlist` (default), `open`, or `pairing` |
58
61
  | `allowedUsers` | No | List of user IDs allowed to use the bot (used by `allowlist` and `pairing` policies) |
@@ -60,6 +63,7 @@ Channels are configured under the `channels` key in `settings.json`. Each channe
60
63
  | `cwd` | No | Working directory for the agent. Defaults to the current directory |
61
64
  | `instructions` | No | Custom instructions prepended to the first message of each session |
62
65
  | `groupPolicy` | No | Group chat access: `disabled` (default), `allowlist`, or `open`. See [Group Chats](#group-chats) |
66
+ | `dmPolicy` | No | Private/DM access: `open` (default) or `disabled` (silently drop all DMs). Useful for group-only bots |
63
67
  | `groupHistoryLimit` | No | Opt-in group history backfill. `0` or omitted disables it. A positive number persists that many authorized, unmentioned group messages for the next bot mention/reply. |
64
68
  | `groups` | No | Per-group settings. Keys are group chat IDs or `"*"` for defaults. See [Group Chats](#group-chats) |
65
69
  | `dispatchMode` | No | What happens when you send a message while the bot is busy: `steer` (default), `collect`, or `followup`. See [Dispatch Modes](#dispatch-modes) |
@@ -85,7 +89,7 @@ Controls how conversation sessions are managed:
85
89
 
86
90
  ### Channel Memory
87
91
 
88
- Channel memory lets an authorized channel member save stable context for one chat or thread. Qwen Code injects that memory when a fresh channel session starts, including after `/clear`.
92
+ Channel memory lets accepted channel senders save stable context for one chat or thread. Qwen Code injects that memory when a fresh channel session starts, including after `/clear`.
89
93
 
90
94
  Natural-language examples:
91
95
 
@@ -94,10 +98,11 @@ Natural-language examples:
94
98
  - `你现在都记住了什么` shows saved memory for the current chat or thread.
95
99
  - `把这个聊天的记忆清空` starts the clear flow; `确认清空记忆` confirms it.
96
100
 
97
- Group chats can show saved memory, but writes and clears are blocked to avoid
98
- turning shared memory into a prompt-injection path for other participants.
101
+ Channel memory follows the channel access gates. Any message accepted by `senderPolicy`, `dmPolicy`, `groupPolicy`, group settings, pairing, and mention requirements can read, write, or clear memory for that chat or thread.
99
102
 
100
- Only users listed in `allowedUsers` can read, write, or clear channel memory. If `allowedUsers` is empty, channel memory commands are disabled for everyone.
103
+ In open groups, any accepted member can update shared channel memory for that group. Use `allowlist` or `pairing` policies when memory should be limited to trusted senders.
104
+
105
+ Memory is keyed to the current chat or thread, so it is not injected into `single` session scope, where every chat shares one channel-wide agent session.
101
106
 
102
107
  ### Token Security
103
108
 
@@ -211,9 +216,10 @@ By default, Qwen ignores unmentioned group messages and does not store them as s
211
216
 
212
217
  ```
213
218
  1. groupPolicy — is this group allowed? (no → ignore)
214
- 2. requireMention was the bot mentioned/replied to? (no → ignore)
215
- 3. senderPolicyis this sender approved? (no → pairing flow)
216
- 4. Route to session
219
+ 2. dmPolicy is this DM allowed? (disabled → ignore)
220
+ 3. requireMentionwas the bot mentioned/replied to? (no → ignore)
221
+ 4. senderPolicy is this sender approved? (no → pairing flow)
222
+ 5. Route to session
217
223
  ```
218
224
 
219
225
  ### Telegram Setup for Groups
@@ -273,6 +279,8 @@ Files work with any model — no multimodal support required.
273
279
  | Captions | Photo/file captions included as message text | Not applicable | Rich text: mixed text + images in one message | Rich text (`post`): text extracted; embedded images ignored |
274
280
 
275
281
  > QQ Bot does not process incoming media — image and sticker messages are ignored, so it has no media-handling row above.
282
+ >
283
+ > WeCom accepts text, images, mixed text plus images, files, videos, and voice messages (transcribed). Images are passed to the agent as attachments; files and videos are downloaded to temporary local paths. See [WeCom](./wecom#images-and-files) for details.
276
284
 
277
285
  ## Dispatch Modes
278
286
 
@@ -343,7 +351,7 @@ Channels support slash commands. These are handled locally (no agent round-trip)
343
351
 
344
352
  All other slash commands (e.g., `/compress`, `/summary`) are forwarded to the agent.
345
353
 
346
- These commands work on all channel types (Telegram, WeChat, QQ, DingTalk, Feishu).
354
+ These commands work on all channel types (Telegram, WeChat, QQ, DingTalk, WeCom, Feishu).
347
355
 
348
356
  ## Running
349
357
 
@@ -381,6 +389,72 @@ This mode starts one channel worker process owned by `qwen serve`. The worker co
381
389
 
382
390
  When channels are serve-managed, `qwen channel status` shows the owner as `qwen serve`, and `qwen channel stop` tells you to stop the daemon instead of signaling the worker directly. If a ready worker exits unexpectedly, the daemon continues running and reports a channel-worker warning in `/daemon/status`.
383
391
 
392
+ ## Webhook-triggered tasks
393
+
394
+ Daemon-managed channels can also accept authenticated webhook events. Qwen receives the event as context, summarizes and decides what matters, and then delivers the final response to the configured chat target. This is not a raw notification relay.
395
+ Webhook tasks require `approvalMode: "yolo"` because they run without interactive approval. That setting applies to the whole channel, not only webhook turns, so use a dedicated webhook channel or tightly restrict normal chat senders for that channel.
396
+
397
+ Example channel config:
398
+
399
+ ```json
400
+ {
401
+ "channels": {
402
+ "dingtalk-main": {
403
+ "type": "dingtalk",
404
+ "clientId": "$DINGTALK_CLIENT_ID",
405
+ "clientSecret": "$DINGTALK_CLIENT_SECRET",
406
+ "cwd": "/repo",
407
+ "senderPolicy": "allowlist",
408
+ "allowedUsers": ["12345"],
409
+ "approvalMode": "yolo",
410
+ "sessionScope": "user",
411
+ "webhooks": {
412
+ "sources": {
413
+ "github-ci": {
414
+ "secretEnv": "QWEN_CHANNEL_GITHUB_CI_SECRET",
415
+ "targets": {
416
+ "default": {
417
+ "chatId": "OPEN_CONVERSATION_ID",
418
+ "senderId": "webhook:github-ci",
419
+ "isGroup": true
420
+ }
421
+ }
422
+ }
423
+ }
424
+ }
425
+ }
426
+ }
427
+ }
428
+ ```
429
+
430
+ For DingTalk, `chatId` must be the group `openConversationId`; other adapters may require their own proactive target shape.
431
+
432
+ Start `qwen serve` with the channel worker enabled:
433
+
434
+ ```bash
435
+ QWEN_SERVER_TOKEN="$QWEN_SERVER_TOKEN" qwen serve --require-auth --channel dingtalk-main
436
+ ```
437
+
438
+ Example request:
439
+
440
+ ```bash
441
+ curl -X POST "http://127.0.0.1:4170/channels/dingtalk-main/webhooks/github-ci" \
442
+ -H "x-qwen-webhook-secret: $QWEN_CHANNEL_GITHUB_CI_SECRET" \
443
+ -H "Content-Type: application/json" \
444
+ -d '{
445
+ "eventType": "push",
446
+ "targetRef": "default",
447
+ "title": "CI pipeline finished",
448
+ "payload": {
449
+ "targetRef": "refs/heads/main",
450
+ "repository": "qwen-code",
451
+ "status": "success"
452
+ }
453
+ }'
454
+ ```
455
+
456
+ Webhook routes authenticate with the webhook secret header, even when `qwen serve` is running with bearer auth enabled. Do not share the daemon bearer token with webhook providers. Webhook config and `secretEnv` values are loaded when the daemon starts; restart `qwen serve` after changing webhook sources or rotating secrets. A `202 {"accepted": true}` response means the channel worker accepted ownership of the task, not that the final response has already been delivered to chat. Check daemon and channel worker logs, plus `/daemon/status`, when troubleshooting delivery failures.
457
+
384
458
  ### Multi-Channel Mode
385
459
 
386
460
  When you run `qwen channel start` without a name, all channels defined in `settings.json` start together sharing a single agent process. Each channel maintains its own sessions — a Telegram user and a WeChat user get separate conversations, even though they share the same agent.
@@ -55,6 +55,7 @@ All standard channel options work with custom channels:
55
55
  | `instructions` | Prepended to the first message of each session |
56
56
  | `model` | Model override for the channel |
57
57
  | `groupPolicy` | `disabled`, `allowlist`, or `open` |
58
+ | `dmPolicy` | `open` or `disabled` |
58
59
  | `groups` | Per-group settings |
59
60
 
60
61
  See [Overview](./overview) for details on each option.
@@ -11,7 +11,13 @@ This guide covers setting up Qwen Code with a WeCom intelligent robot (企业微
11
11
  ## Creating the Robot
12
12
 
13
13
  1. Open the WeCom admin console and create an intelligent robot.
14
+
15
+ ![](https://gw.alicdn.com/imgextra/i2/O1CN017w1jWj1TTvNBcfya8_!!6000000002384-2-tps-2212-887.png)
16
+
14
17
  2. Choose API mode.
18
+
19
+ ![](https://gw.alicdn.com/imgextra/i3/O1CN01buuik0207paQUuLQW_!!6000000006803-1-tps-1276-720.gif)
20
+
15
21
  3. Copy the Bot ID and Secret.
16
22
  4. Add the robot to the direct chats or groups where it should be available.
17
23