@qwen-code/qwen-code 0.18.2 → 0.18.3-nightly.20260621.6b2f800ab

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 (511) hide show
  1. package/README.md +64 -492
  2. package/bundled/loop/SKILL.md +53 -26
  3. package/bundled/loop/SKILL.test.ts +67 -0
  4. package/bundled/qc-helper/docs/configuration/auth.md +7 -6
  5. package/bundled/qc-helper/docs/configuration/model-providers.md +16 -2
  6. package/bundled/qc-helper/docs/configuration/settings.md +51 -44
  7. package/bundled/qc-helper/docs/extension/introduction.md +38 -0
  8. package/bundled/qc-helper/docs/features/approval-mode.md +2 -0
  9. package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
  10. package/bundled/qc-helper/docs/features/channels/overview.md +4 -4
  11. package/bundled/qc-helper/docs/features/channels/qqbot.md +179 -0
  12. package/bundled/qc-helper/docs/features/commands.md +49 -0
  13. package/bundled/qc-helper/docs/features/followup-suggestions.md +10 -6
  14. package/bundled/qc-helper/docs/features/hooks.md +6 -3
  15. package/bundled/qc-helper/docs/features/status-line.md +4 -2
  16. package/bundled/qc-helper/docs/qwen-serve.md +9 -4
  17. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +11 -5
  18. package/bundled/qc-helper/docs/support/troubleshooting.md +5 -0
  19. package/chunks/{agent-P5U6QLWL.js → agent-66UJLGYF.js} +24 -23
  20. package/chunks/{agent-headless-24356DC7.js → agent-headless-XWKLG7OO.js} +24 -23
  21. package/chunks/{anthropicContentGenerator-KLBHYGH6.js → anthropicContentGenerator-5S4OMMNL.js} +9 -7
  22. package/chunks/{askUserQuestion-QPZXR3UO.js → askUserQuestion-WHVYL2S2.js} +2 -2
  23. package/chunks/{ca-RK4QPLIX.js → ca-K6MD665I.js} +42 -2
  24. package/chunks/{chunk-WPTCDQN6.js → chunk-26ZYKTYZ.js} +2 -2
  25. package/chunks/{chunk-O4PICXES.js → chunk-2MPVVENX.js} +14 -6
  26. package/chunks/{chunk-VIEIRAK3.js → chunk-2O3NAOJG.js} +4 -2
  27. package/chunks/{chunk-NNIYWQIS.js → chunk-42HGOMED.js} +2 -1
  28. package/chunks/{chunk-B4ZF2KSI.js → chunk-AE6RQU6F.js} +2 -2
  29. package/chunks/{chunk-FIQECJTQ.js → chunk-ATLUHLZE.js} +1 -1
  30. package/chunks/{chunk-BJ5HQ23U.js → chunk-C6MI2ASN.js} +9 -10
  31. package/chunks/{chunk-LYRSMKLS.js → chunk-CTHZVIMD.js} +2 -2
  32. package/chunks/{chunk-MN5RAXVB.js → chunk-CX3SGIPK.js} +18 -6
  33. package/chunks/{chunk-IQHSD7K5.js → chunk-FH4P6RQA.js} +1 -1
  34. package/chunks/{chunk-LYSND7KR.js → chunk-G4BUMVEY.js} +12 -2
  35. package/chunks/{chunk-YJDVHAGL.js → chunk-GBN55AWZ.js} +2 -2
  36. package/chunks/{chunk-ZNUMXPNK.js → chunk-GOMVJKBL.js} +7 -3
  37. package/chunks/{chunk-NGDXHX3A.js → chunk-GRVAP37P.js} +63 -11
  38. package/chunks/{chunk-CPVI5J2L.js → chunk-ID533GA3.js} +1 -1
  39. package/chunks/{chunk-VU6A2OBJ.js → chunk-JXQ23SNT.js} +217 -219
  40. package/chunks/{chunk-ZMIBJS45.js → chunk-KGV3F6UF.js} +1 -1
  41. package/chunks/{chunk-SFRV6BGY.js → chunk-LF6BKGZT.js} +3 -3
  42. package/chunks/{chunk-LXYWINWF.js → chunk-LTN3VYMZ.js} +1 -1
  43. package/chunks/{chunk-IDYDPBBN.js → chunk-MSJ2MXJ6.js} +3 -3
  44. package/chunks/{chunk-25FFAMED.js → chunk-NLCTUNOS.js} +1048 -295
  45. package/chunks/{chunk-JZEKEWO5.js → chunk-TOSAOARP.js} +6 -6
  46. package/chunks/{chunk-M7OBURJM.js → chunk-VIA5MAE5.js} +24 -12
  47. package/chunks/{chunk-RTTAC5VW.js → chunk-VKILGMZQ.js} +1 -1
  48. package/chunks/{chunk-QFJ67S5R.js → chunk-VN7FXOAW.js} +732 -617
  49. package/chunks/{chunk-HA2UEYZP.js → chunk-WE6TNQJU.js} +13 -6
  50. package/chunks/chunk-XGU3ETVO.js +1026 -0
  51. package/chunks/{chunk-ZOFNJQNJ.js → chunk-XU7BKR3B.js} +3 -3
  52. package/chunks/{chunk-QP4R5FTG.js → chunk-Z7XXFPGP.js} +4 -3
  53. package/chunks/{chunk-TW522KN6.js → chunk-ZTQ26VBE.js} +13 -6
  54. package/chunks/{chunk-EQ5NHJBY.js → chunk-ZV5QED4A.js} +109573 -106663
  55. package/chunks/{computer-use-EGW2I2HZ.js → computer-use-5AHVGVR3.js} +26 -24
  56. package/chunks/contextCommand-PTDKJROT.js +54 -0
  57. package/chunks/{cron-create-DQKRQMCP.js → cron-create-THNDTYXU.js} +6 -6
  58. package/chunks/{cron-delete-DOFPHFTI.js → cron-delete-BS5H6TFJ.js} +6 -6
  59. package/chunks/{cron-list-RCVOO3CB.js → cron-list-7OBVHT7K.js} +24 -10
  60. package/chunks/{de-FGPM4KW5.js → de-K2F3T3TR.js} +41 -1
  61. package/chunks/{dist-2UCAYOX7.js → dist-BD27IA3L.js} +16 -5
  62. package/chunks/{dist-UH7CYT7F.js → dist-DZ6AJDX4.js} +52 -11
  63. package/chunks/{dist-KF43SZZV.js → dist-GKRNVFBH.js} +5 -1
  64. package/chunks/{dist-33LHH26D.js → dist-KIYB7DQW.js} +1 -1
  65. package/chunks/dist-QFFZWACU.js +2136 -0
  66. package/chunks/{edit-FJSOCDO2.js → edit-ADXZN3M7.js} +26 -27
  67. package/chunks/{en-VP6XPGEC.js → en-KGSAKBJP.js} +232 -0
  68. package/chunks/{enter-worktree-X6MVFDLR.js → enter-worktree-F5SJSHNH.js} +24 -23
  69. package/chunks/{enterPlanMode-MZAEQZH3.js → enterPlanMode-MCQ4HWPP.js} +52 -28
  70. package/chunks/{exit-worktree-RM2UPOYQ.js → exit-worktree-26AFS3YQ.js} +191 -41
  71. package/chunks/{exitPlanMode-7BVY3CWJ.js → exitPlanMode-UOPIPSEA.js} +85 -46
  72. package/chunks/{fr-ATYBVCLT.js → fr-2CAQEOK6.js} +41 -1
  73. package/chunks/{geminiContentGenerator-A6JHLUHK.js → geminiContentGenerator-RJA7BIHQ.js} +4 -4
  74. package/chunks/{glob-L3AZLCV6.js → glob-AWTDID4C.js} +26 -24
  75. package/chunks/{grep-SNCPCXIP.js → grep-QJ5TEMYZ.js} +96 -43
  76. package/chunks/{ja-W2QEA2OI.js → ja-QWL7V6OJ.js} +41 -1
  77. package/chunks/{keychain-token-storage-QSTRHKKL.js → keychain-token-storage-YHXIWXIB.js} +2 -2
  78. package/chunks/loop-wakeup-SSBWZ64K.js +167 -0
  79. package/chunks/{ls-TRD77UTS.js → ls-YPFUHZRQ.js} +3 -3
  80. package/chunks/{lsp-2VFWQPZS.js → lsp-FD6DNVAF.js} +2 -2
  81. package/chunks/{monitor-TS6WL6DN.js → monitor-SQYLCQAK.js} +24 -23
  82. package/chunks/{notebook-edit-26RNH24J.js → notebook-edit-7RR3ABQ5.js} +25 -26
  83. package/chunks/{openaiContentGenerator-7CA63X5G.js → openaiContentGenerator-2CHXJZ4A.js} +14 -11
  84. package/chunks/{pt-ZKEWJFBW.js → pt-2SPOLMAY.js} +41 -1
  85. package/chunks/{qwenContentGenerator-4WJTJXFZ.js → qwenContentGenerator-ZXEKDN2J.js} +27 -26
  86. package/chunks/{qwenOAuth2-KK433U33.js → qwenOAuth2-WZ54YZ4J.js} +4 -4
  87. package/chunks/{read-file-EUIHK6HD.js → read-file-AZAKLZFP.js} +9 -8
  88. package/chunks/{ripGrep-7J5B22W2.js → ripGrep-T5PS4VWB.js} +24 -23
  89. package/chunks/{ru-VEKTPJ74.js → ru-35IVJTEH.js} +41 -1
  90. package/chunks/{scheduler-J3OUGTTS.js → scheduler-VZ5KYSX6.js} +24 -23
  91. package/chunks/{send-message-QZOC5GA2.js → send-message-FWFTX62Q.js} +2 -2
  92. package/chunks/{serve-VF4ZNUJP.js → serve-RN6CHKG3.js} +1308 -291
  93. package/chunks/{shell-G6XCJAG3.js → shell-ANALFMWT.js} +24 -23
  94. package/chunks/{skill-7OVC6JIH.js → skill-JIKQTL4U.js} +11 -10
  95. package/chunks/{src-XV5MLRND.js → src-EMRXVZY7.js} +159 -59
  96. package/chunks/{syntheticOutput-WJSUK4SZ.js → syntheticOutput-JY5NEDTV.js} +3 -3
  97. package/chunks/{task-create-GGSC27HO.js → task-create-IGILDV25.js} +7 -7
  98. package/chunks/{task-list-EDHHHSK4.js → task-list-KBEJVAAG.js} +6 -6
  99. package/chunks/{task-stop-WR5PDVZY.js → task-stop-WFTMQ6AC.js} +2 -2
  100. package/chunks/{task-update-UR7NUHBV.js → task-update-UIVX7ZEV.js} +7 -7
  101. package/chunks/{team-create-JXSC7ROC.js → team-create-BVKQF4WK.js} +26 -25
  102. package/chunks/{team-delete-FC33URJK.js → team-delete-LPOXDPVB.js} +6 -6
  103. package/chunks/{todoWrite-GO2ME7ZV.js → todoWrite-R4RIJKOD.js} +4 -4
  104. package/chunks/{tool-search-YRWSWA2H.js → tool-search-E4VYDNQO.js} +9 -8
  105. package/chunks/{web-fetch-NLLATYIL.js → web-fetch-JU7SS6KE.js} +5 -5
  106. package/chunks/{workflow-ZN3DYFMU.js → workflow-VDPJJYAF.js} +242 -39
  107. package/chunks/{write-file-355M4V7Z.js → write-file-NCN66V2C.js} +26 -27
  108. package/chunks/{zh-TW-6YFNCKTA.js → zh-TW-BSG6BUWK.js} +232 -2
  109. package/chunks/{zh-OIXDDQHB.js → zh-X4KM6MTW.js} +233 -0
  110. package/cli.js +11094 -5768
  111. package/examples/agent/agents/diary.md +1 -1
  112. package/examples/mcp-server/qwen-extension.json +8 -1
  113. package/examples/starter/agents/diary.md +1 -1
  114. package/locales/ca.js +67 -2
  115. package/locales/de.js +68 -2
  116. package/locales/en.js +304 -0
  117. package/locales/fr.js +69 -2
  118. package/locales/ja.js +65 -2
  119. package/locales/pt.js +67 -2
  120. package/locales/ru.js +68 -2
  121. package/locales/zh-TW.js +288 -2
  122. package/locales/zh.js +288 -0
  123. package/package.json +4 -3
  124. package/web-shell/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  125. package/web-shell/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  126. package/web-shell/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  127. package/web-shell/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  128. package/web-shell/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  129. package/web-shell/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  130. package/web-shell/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  131. package/web-shell/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  132. package/web-shell/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  133. package/web-shell/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  134. package/web-shell/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  135. package/web-shell/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  136. package/web-shell/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  137. package/web-shell/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  138. package/web-shell/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  139. package/web-shell/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  140. package/web-shell/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  141. package/web-shell/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  142. package/web-shell/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  143. package/web-shell/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  144. package/web-shell/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  145. package/web-shell/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  146. package/web-shell/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  147. package/web-shell/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  148. package/web-shell/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  149. package/web-shell/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  150. package/web-shell/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  151. package/web-shell/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  152. package/web-shell/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  153. package/web-shell/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  154. package/web-shell/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  155. package/web-shell/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  156. package/web-shell/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  157. package/web-shell/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  158. package/web-shell/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  159. package/web-shell/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  160. package/web-shell/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  161. package/web-shell/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  162. package/web-shell/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  163. package/web-shell/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  164. package/web-shell/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  165. package/web-shell/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  166. package/web-shell/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  167. package/web-shell/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  168. package/web-shell/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  169. package/web-shell/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  170. package/web-shell/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  171. package/web-shell/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  172. package/web-shell/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  173. package/web-shell/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  174. package/web-shell/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  175. package/web-shell/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  176. package/web-shell/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  177. package/web-shell/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  178. package/web-shell/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  179. package/web-shell/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  180. package/web-shell/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  181. package/web-shell/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  182. package/web-shell/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  183. package/web-shell/assets/abap-DsBKuouk.js +1 -0
  184. package/web-shell/assets/actionscript-3-D_z4Izcz.js +1 -0
  185. package/web-shell/assets/ada-727ZlQH0.js +1 -0
  186. package/web-shell/assets/andromeeda-C3khCPGq.js +1 -0
  187. package/web-shell/assets/angular-html-LfdN0zeE.js +1 -0
  188. package/web-shell/assets/angular-ts-CKsD7JZE.js +1 -0
  189. package/web-shell/assets/apache-Dn00JSTd.js +1 -0
  190. package/web-shell/assets/apex-COJ4H7py.js +1 -0
  191. package/web-shell/assets/apl-BBq3IX1j.js +1 -0
  192. package/web-shell/assets/applescript-Bu5BbsvL.js +1 -0
  193. package/web-shell/assets/ara-7O62HKoU.js +1 -0
  194. package/web-shell/assets/arc-CRFN10gD.js +1 -0
  195. package/web-shell/assets/architectureDiagram-3BPJPVTR-IRlu1CpH.js +36 -0
  196. package/web-shell/assets/asciidoc-BPT9niGB.js +1 -0
  197. package/web-shell/assets/asm-Dhn9LcZ4.js +1 -0
  198. package/web-shell/assets/astro-CqkE3fuf.js +1 -0
  199. package/web-shell/assets/aurora-x-D-2ljcwZ.js +1 -0
  200. package/web-shell/assets/awk-eg146-Ew.js +1 -0
  201. package/web-shell/assets/ayu-dark-Cv9koXgw.js +1 -0
  202. package/web-shell/assets/ballerina-Du268qiB.js +1 -0
  203. package/web-shell/assets/bat-fje9CFhw.js +1 -0
  204. package/web-shell/assets/beancount-BwXTMy5W.js +1 -0
  205. package/web-shell/assets/berry-3xVqZejG.js +1 -0
  206. package/web-shell/assets/bibtex-xW4inM5L.js +1 -0
  207. package/web-shell/assets/bicep-DHo0CJ0O.js +1 -0
  208. package/web-shell/assets/blade-a8OxSdnT.js +1 -0
  209. package/web-shell/assets/blockDiagram-GPEHLZMM-htIZ6iw8.js +132 -0
  210. package/web-shell/assets/bsl-Dgyn0ogV.js +1 -0
  211. package/web-shell/assets/c-C3t2pwGQ.js +1 -0
  212. package/web-shell/assets/c4Diagram-AAUBKEIU-A2GoRq3O.js +10 -0
  213. package/web-shell/assets/cadence-DNquZEk8.js +1 -0
  214. package/web-shell/assets/cairo--RitsXJZ.js +1 -0
  215. package/web-shell/assets/catppuccin-frappe-CD_QflpE.js +1 -0
  216. package/web-shell/assets/catppuccin-latte-DRW-0cLl.js +1 -0
  217. package/web-shell/assets/catppuccin-macchiato-C-_shW-Y.js +1 -0
  218. package/web-shell/assets/catppuccin-mocha-LGGdnPYs.js +1 -0
  219. package/web-shell/assets/channel-WwImfsc7.js +1 -0
  220. package/web-shell/assets/chunk-2J33WTMH-CdP2AC6u.js +1 -0
  221. package/web-shell/assets/chunk-4BX2VUAB-DrA07nW2.js +1 -0
  222. package/web-shell/assets/chunk-55IACEB6-CFGnVU2f.js +1 -0
  223. package/web-shell/assets/chunk-727SXJPM-BTMkq3Tk.js +206 -0
  224. package/web-shell/assets/chunk-AQP2D5EJ-C9sYg04Z.js +231 -0
  225. package/web-shell/assets/chunk-FMBD7UC4-Cag-cj6I.js +15 -0
  226. package/web-shell/assets/chunk-ND2GUHAM-CDSTFoR7.js +1 -0
  227. package/web-shell/assets/chunk-QZHKN3VN-CN9Z6oOs.js +1 -0
  228. package/web-shell/assets/clarity-BHOwM8T6.js +1 -0
  229. package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +1 -0
  230. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +1 -0
  231. package/web-shell/assets/clojure-DxSadP1t.js +1 -0
  232. package/web-shell/assets/cmake-DbXoA79R.js +1 -0
  233. package/web-shell/assets/cobol-PTqiYgYu.js +1 -0
  234. package/web-shell/assets/codeowners-Bp6g37R7.js +1 -0
  235. package/web-shell/assets/codeql-sacFqUAJ.js +1 -0
  236. package/web-shell/assets/coffee-dyiR41kL.js +1 -0
  237. package/web-shell/assets/common-lisp-C7gG9l05.js +1 -0
  238. package/web-shell/assets/coq-Dsg_Bt_b.js +1 -0
  239. package/web-shell/assets/cose-bilkent-S5V4N54A-DuN9j8Du.js +1 -0
  240. package/web-shell/assets/cpp-BksuvNSY.js +1 -0
  241. package/web-shell/assets/crystal-DtDmRg-F.js +1 -0
  242. package/web-shell/assets/csharp-D9R-vmeu.js +1 -0
  243. package/web-shell/assets/css-BPhBrDlE.js +1 -0
  244. package/web-shell/assets/csv-B0qRVHPH.js +1 -0
  245. package/web-shell/assets/cue-DtFQj3wx.js +1 -0
  246. package/web-shell/assets/cypher-m2LEI-9-.js +1 -0
  247. package/web-shell/assets/cytoscape.esm-CUqq0XTU.js +331 -0
  248. package/web-shell/assets/d-BoXegm-a.js +1 -0
  249. package/web-shell/assets/dagre-BM42HDAG-ByCWe45f.js +4 -0
  250. package/web-shell/assets/dark-plus-C3mMm8J8.js +1 -0
  251. package/web-shell/assets/dart-B9wLZaAG.js +1 -0
  252. package/web-shell/assets/dax-ClGRhx96.js +1 -0
  253. package/web-shell/assets/defaultLocale-DX6XiGOO.js +1 -0
  254. package/web-shell/assets/desktop-DEIpsLCJ.js +1 -0
  255. package/web-shell/assets/diagram-2AECGRRQ-eWyU_pKZ.js +43 -0
  256. package/web-shell/assets/diagram-5GNKFQAL-0Bfu3Fq5.js +10 -0
  257. package/web-shell/assets/diagram-KO2AKTUF-B6KBKkQP.js +3 -0
  258. package/web-shell/assets/diagram-LMA3HP47-TToDmeA_.js +24 -0
  259. package/web-shell/assets/diagram-OG6HWLK6-CQCkC2Yx.js +24 -0
  260. package/web-shell/assets/diff-BgYniUM_.js +1 -0
  261. package/web-shell/assets/docker-COcR7UxN.js +1 -0
  262. package/web-shell/assets/dotenv-BjQB5zDj.js +1 -0
  263. package/web-shell/assets/dracula-BzJJZx-M.js +1 -0
  264. package/web-shell/assets/dracula-soft-BXkSAIEj.js +1 -0
  265. package/web-shell/assets/dream-maker-C-nORZOA.js +1 -0
  266. package/web-shell/assets/edge-D5gP-w-T.js +1 -0
  267. package/web-shell/assets/elixir-CLiX3zqd.js +1 -0
  268. package/web-shell/assets/elm-CmHSxxaM.js +1 -0
  269. package/web-shell/assets/emacs-lisp-BX77sIaO.js +1 -0
  270. package/web-shell/assets/erDiagram-TEJ5UH35-Cm9ls1iB.js +85 -0
  271. package/web-shell/assets/erb-BYTLMnw6.js +1 -0
  272. package/web-shell/assets/erlang-B-DoSBHF.js +1 -0
  273. package/web-shell/assets/everforest-dark-BgDCqdQA.js +1 -0
  274. package/web-shell/assets/everforest-light-C8M2exoo.js +1 -0
  275. package/web-shell/assets/fennel-bCA53EVm.js +1 -0
  276. package/web-shell/assets/fish-w-ucz2PV.js +1 -0
  277. package/web-shell/assets/flowDiagram-I6XJVG4X-Dyoz80Pv.js +162 -0
  278. package/web-shell/assets/fluent-Dayu4EKP.js +1 -0
  279. package/web-shell/assets/fortran-fixed-form-TqA4NnZg.js +1 -0
  280. package/web-shell/assets/fortran-free-form-DKXYxT9g.js +1 -0
  281. package/web-shell/assets/fsharp-XplgxFYe.js +1 -0
  282. package/web-shell/assets/ganttDiagram-6RSMTGT7-Cfut9yaU.js +292 -0
  283. package/web-shell/assets/gdresource-BHYsBjWJ.js +1 -0
  284. package/web-shell/assets/gdscript-DfxzS6Rs.js +1 -0
  285. package/web-shell/assets/gdshader-SKMF96pI.js +1 -0
  286. package/web-shell/assets/genie-ajMbGru0.js +1 -0
  287. package/web-shell/assets/gherkin--30QC5Em.js +1 -0
  288. package/web-shell/assets/git-commit-i4q6IMui.js +1 -0
  289. package/web-shell/assets/git-rebase-B-v9cOL2.js +1 -0
  290. package/web-shell/assets/gitGraphDiagram-PVQCEYII-BCuJdlfD.js +106 -0
  291. package/web-shell/assets/github-dark-DHJKELXO.js +1 -0
  292. package/web-shell/assets/github-dark-default-Cuk6v7N8.js +1 -0
  293. package/web-shell/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  294. package/web-shell/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  295. package/web-shell/assets/github-light-DAi9KRSo.js +1 -0
  296. package/web-shell/assets/github-light-default-D7oLnXFd.js +1 -0
  297. package/web-shell/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  298. package/web-shell/assets/gleam-B430Bg39.js +1 -0
  299. package/web-shell/assets/glimmer-js-D-cwc0-E.js +1 -0
  300. package/web-shell/assets/glimmer-ts-pgjy16dm.js +1 -0
  301. package/web-shell/assets/glsl-DBO2IWDn.js +1 -0
  302. package/web-shell/assets/gnuplot-CM8KxXT1.js +1 -0
  303. package/web-shell/assets/go-B1SYOhNW.js +1 -0
  304. package/web-shell/assets/graph-qsFoMdT2.js +1 -0
  305. package/web-shell/assets/graphql-cDcHW_If.js +1 -0
  306. package/web-shell/assets/groovy-DkBy-JyN.js +1 -0
  307. package/web-shell/assets/hack-D1yCygmZ.js +1 -0
  308. package/web-shell/assets/haml-B2EZWmdv.js +1 -0
  309. package/web-shell/assets/handlebars-BQGss363.js +1 -0
  310. package/web-shell/assets/haskell-BILxekzW.js +1 -0
  311. package/web-shell/assets/haxe-C5wWYbrZ.js +1 -0
  312. package/web-shell/assets/hcl-HzYwdGDm.js +1 -0
  313. package/web-shell/assets/hjson-T-Tgc4AT.js +1 -0
  314. package/web-shell/assets/hlsl-ifBTmRxC.js +1 -0
  315. package/web-shell/assets/houston-DnULxvSX.js +1 -0
  316. package/web-shell/assets/html-C2L_23MC.js +1 -0
  317. package/web-shell/assets/html-derivative-CSfWNPLT.js +1 -0
  318. package/web-shell/assets/http-FRrOvY1W.js +1 -0
  319. package/web-shell/assets/hxml-TIA70rKU.js +1 -0
  320. package/web-shell/assets/hy-BMj5Y0dO.js +1 -0
  321. package/web-shell/assets/imba-bv_oIlVt.js +1 -0
  322. package/web-shell/assets/index-BDZiTAkl.css +1 -0
  323. package/web-shell/assets/index-DaebdpHq.js +516 -0
  324. package/web-shell/assets/infoDiagram-5YYISTIA-CXKxF2VL.js +2 -0
  325. package/web-shell/assets/ini-BjABl1g7.js +1 -0
  326. package/web-shell/assets/init-Gi6I4Gst.js +1 -0
  327. package/web-shell/assets/ishikawaDiagram-YF4QCWOH-DE7HWSU8.js +70 -0
  328. package/web-shell/assets/java-xI-RfyKK.js +1 -0
  329. package/web-shell/assets/javascript-ySlJ1b_l.js +1 -0
  330. package/web-shell/assets/jinja-DGy0s7-h.js +1 -0
  331. package/web-shell/assets/jison-BqZprYcd.js +1 -0
  332. package/web-shell/assets/journeyDiagram-JHISSGLW-D__YUfds.js +139 -0
  333. package/web-shell/assets/json-BQoSv7ci.js +1 -0
  334. package/web-shell/assets/json5-w8dY5SsB.js +1 -0
  335. package/web-shell/assets/jsonc-TU54ms6u.js +1 -0
  336. package/web-shell/assets/jsonl-DREVFZK8.js +1 -0
  337. package/web-shell/assets/jsonnet-BfivnA6A.js +1 -0
  338. package/web-shell/assets/jssm-P4WzXJd0.js +1 -0
  339. package/web-shell/assets/jsx-BAng5TT0.js +1 -0
  340. package/web-shell/assets/julia-BBuGR-5E.js +1 -0
  341. package/web-shell/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  342. package/web-shell/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  343. package/web-shell/assets/kanagawa-wave-DWedfzmr.js +1 -0
  344. package/web-shell/assets/kanban-definition-UN3LZRKU-D82R169M.js +89 -0
  345. package/web-shell/assets/kotlin-B5lbUyaz.js +1 -0
  346. package/web-shell/assets/kusto-mebxcVVE.js +1 -0
  347. package/web-shell/assets/laserwave-DUszq2jm.js +1 -0
  348. package/web-shell/assets/latex-C-cWTeAZ.js +1 -0
  349. package/web-shell/assets/layout-CNYaLpI5.js +1 -0
  350. package/web-shell/assets/lean-XBlWyCtg.js +1 -0
  351. package/web-shell/assets/less-BfCpw3nA.js +1 -0
  352. package/web-shell/assets/light-plus-B7mTdjB0.js +1 -0
  353. package/web-shell/assets/linear-DpyMbKqT.js +1 -0
  354. package/web-shell/assets/liquid-D3W5UaiH.js +1 -0
  355. package/web-shell/assets/log-Cc5clBb7.js +1 -0
  356. package/web-shell/assets/logo-IuBKFhSY.js +1 -0
  357. package/web-shell/assets/lua-CvWAzNxB.js +1 -0
  358. package/web-shell/assets/luau-Du5NY7AG.js +1 -0
  359. package/web-shell/assets/make-Bvotw-X0.js +1 -0
  360. package/web-shell/assets/markdown-UIAJJxZW.js +1 -0
  361. package/web-shell/assets/marko-z0MBrx5-.js +1 -0
  362. package/web-shell/assets/material-theme-D5KoaKCx.js +1 -0
  363. package/web-shell/assets/material-theme-darker-BfHTSMKl.js +1 -0
  364. package/web-shell/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  365. package/web-shell/assets/material-theme-ocean-CyktbL80.js +1 -0
  366. package/web-shell/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  367. package/web-shell/assets/matlab-D9-PGadD.js +1 -0
  368. package/web-shell/assets/mdc-DB_EDNY_.js +1 -0
  369. package/web-shell/assets/mdx-sdHcTMYB.js +1 -0
  370. package/web-shell/assets/mermaid-Ci6OQyBP.js +1 -0
  371. package/web-shell/assets/mermaid.core-D1KEFDhn.js +309 -0
  372. package/web-shell/assets/min-dark-CafNBF8u.js +1 -0
  373. package/web-shell/assets/min-light-CTRr51gU.js +1 -0
  374. package/web-shell/assets/mindmap-definition-RKZ34NQL-BwVUFGFE.js +96 -0
  375. package/web-shell/assets/mipsasm-BC5c_5Pe.js +1 -0
  376. package/web-shell/assets/mojo-Tz6hzZYG.js +1 -0
  377. package/web-shell/assets/monokai-D4h5O-jR.js +1 -0
  378. package/web-shell/assets/move-DB_GagMm.js +1 -0
  379. package/web-shell/assets/narrat-DLbgOhZU.js +1 -0
  380. package/web-shell/assets/nextflow-B0XVJmRM.js +1 -0
  381. package/web-shell/assets/nginx-D_VnBJ67.js +1 -0
  382. package/web-shell/assets/night-owl-C39BiMTA.js +1 -0
  383. package/web-shell/assets/nim-ZlGxZxc3.js +1 -0
  384. package/web-shell/assets/nix-shcSOmrb.js +1 -0
  385. package/web-shell/assets/nord-Ddv68eIx.js +1 -0
  386. package/web-shell/assets/nushell-D4Tzg5kh.js +1 -0
  387. package/web-shell/assets/objective-c-Deuh7S70.js +1 -0
  388. package/web-shell/assets/objective-cpp-BUEGK8hf.js +1 -0
  389. package/web-shell/assets/ocaml-BNioltXt.js +1 -0
  390. package/web-shell/assets/one-dark-pro-GBQ2dnAY.js +1 -0
  391. package/web-shell/assets/one-light-PoHY5YXO.js +1 -0
  392. package/web-shell/assets/ordinal-Cboi1Yqb.js +1 -0
  393. package/web-shell/assets/pascal-JqZropPD.js +1 -0
  394. package/web-shell/assets/perl-CHQXSrWU.js +1 -0
  395. package/web-shell/assets/php-B5ebYQev.js +1 -0
  396. package/web-shell/assets/pieDiagram-4H26LBE5-BO_qoEGx.js +30 -0
  397. package/web-shell/assets/plastic-3e1v2bzS.js +1 -0
  398. package/web-shell/assets/plsql-LKU2TuZ1.js +1 -0
  399. package/web-shell/assets/po-BFLt1xDp.js +1 -0
  400. package/web-shell/assets/poimandres-CS3Unz2-.js +1 -0
  401. package/web-shell/assets/polar-DKykz6zU.js +1 -0
  402. package/web-shell/assets/postcss-B3ZDOciz.js +1 -0
  403. package/web-shell/assets/powerquery-CSHBycmS.js +1 -0
  404. package/web-shell/assets/powershell-BIEUsx6d.js +1 -0
  405. package/web-shell/assets/prisma-B48N-Iqd.js +1 -0
  406. package/web-shell/assets/prolog-BY-TUvya.js +1 -0
  407. package/web-shell/assets/proto-zocC4JxJ.js +1 -0
  408. package/web-shell/assets/pug-CM9l7STV.js +1 -0
  409. package/web-shell/assets/puppet-Cza_XSSt.js +1 -0
  410. package/web-shell/assets/purescript-Bg-kzb6g.js +1 -0
  411. package/web-shell/assets/python-DhUJRlN_.js +1 -0
  412. package/web-shell/assets/qml-D8XfuvdV.js +1 -0
  413. package/web-shell/assets/qmldir-C8lEn-DE.js +1 -0
  414. package/web-shell/assets/qss-DhMKtDLN.js +1 -0
  415. package/web-shell/assets/quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js +7 -0
  416. package/web-shell/assets/r-CwjWoCRV.js +1 -0
  417. package/web-shell/assets/racket-CzouJOBO.js +1 -0
  418. package/web-shell/assets/raku-B1bQXN8T.js +1 -0
  419. package/web-shell/assets/razor-CNLDkMZG.js +1 -0
  420. package/web-shell/assets/red-bN70gL4F.js +1 -0
  421. package/web-shell/assets/reg-5LuOXUq_.js +1 -0
  422. package/web-shell/assets/regexp-DWJ3fJO_.js +1 -0
  423. package/web-shell/assets/rel-DJlmqQ1C.js +1 -0
  424. package/web-shell/assets/requirementDiagram-4Y6WPE33-BJPXejOA.js +84 -0
  425. package/web-shell/assets/riscv-QhoSD0DR.js +1 -0
  426. package/web-shell/assets/rose-pine-CmCqftbK.js +1 -0
  427. package/web-shell/assets/rose-pine-dawn-Ds-gbosJ.js +1 -0
  428. package/web-shell/assets/rose-pine-moon-CjDtw9vr.js +1 -0
  429. package/web-shell/assets/rst-4NLicBqY.js +1 -0
  430. package/web-shell/assets/ruby-DeZ3UC14.js +1 -0
  431. package/web-shell/assets/rust-Be6lgOlo.js +1 -0
  432. package/web-shell/assets/sankeyDiagram-5OEKKPKP-C1xeIL9i.js +40 -0
  433. package/web-shell/assets/sas-BmTFh92c.js +1 -0
  434. package/web-shell/assets/sass-BJ4Li9vH.js +1 -0
  435. package/web-shell/assets/scala-DQVVAn-B.js +1 -0
  436. package/web-shell/assets/scheme-BJGe-b2p.js +1 -0
  437. package/web-shell/assets/scss-C31hgJw-.js +1 -0
  438. package/web-shell/assets/sdbl-BLhTXw86.js +1 -0
  439. package/web-shell/assets/sequenceDiagram-3UESZ5HK-CSYKQUjf.js +162 -0
  440. package/web-shell/assets/shaderlab-B7qAK45m.js +1 -0
  441. package/web-shell/assets/shellscript-atvbtKCR.js +1 -0
  442. package/web-shell/assets/shellsession-C_rIy8kc.js +1 -0
  443. package/web-shell/assets/slack-dark-BthQWCQV.js +1 -0
  444. package/web-shell/assets/slack-ochin-DqwNpetd.js +1 -0
  445. package/web-shell/assets/smalltalk-DkLiglaE.js +1 -0
  446. package/web-shell/assets/snazzy-light-Bw305WKR.js +1 -0
  447. package/web-shell/assets/solarized-dark-DXbdFlpD.js +1 -0
  448. package/web-shell/assets/solarized-light-L9t79GZl.js +1 -0
  449. package/web-shell/assets/solidity-C1w2a3ep.js +1 -0
  450. package/web-shell/assets/soy-C-lX7w71.js +1 -0
  451. package/web-shell/assets/sparql-bYkjHRlG.js +1 -0
  452. package/web-shell/assets/splunk-Cf8iN4DR.js +1 -0
  453. package/web-shell/assets/sql-COK4E0Yg.js +1 -0
  454. package/web-shell/assets/ssh-config-BknIz3MU.js +1 -0
  455. package/web-shell/assets/stata-DorPZHa4.js +1 -0
  456. package/web-shell/assets/stateDiagram-AJRCARHV-d9hiHlAW.js +1 -0
  457. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DgReoybQ.js +1 -0
  458. package/web-shell/assets/stylus-BeQkCIfX.js +1 -0
  459. package/web-shell/assets/svelte-MSaWC3Je.js +1 -0
  460. package/web-shell/assets/swift-BSxZ-RaX.js +1 -0
  461. package/web-shell/assets/synthwave-84-CbfX1IO0.js +1 -0
  462. package/web-shell/assets/system-verilog-C7L56vO4.js +1 -0
  463. package/web-shell/assets/systemd-CUnW07Te.js +1 -0
  464. package/web-shell/assets/talonscript-C1XDQQGZ.js +1 -0
  465. package/web-shell/assets/tasl-CQjiPCtT.js +1 -0
  466. package/web-shell/assets/tcl-DQ1-QYvQ.js +1 -0
  467. package/web-shell/assets/templ-dwX3ZSMB.js +1 -0
  468. package/web-shell/assets/terraform-BbSNqyBO.js +1 -0
  469. package/web-shell/assets/tex-rYs2v40G.js +1 -0
  470. package/web-shell/assets/timeline-definition-PNZ67QCA-BhCBkq8k.js +120 -0
  471. package/web-shell/assets/tokyo-night-DBQeEorK.js +1 -0
  472. package/web-shell/assets/toml-CB2ApiWb.js +1 -0
  473. package/web-shell/assets/ts-tags-CipyTH0X.js +1 -0
  474. package/web-shell/assets/tsv-B_m7g4N7.js +1 -0
  475. package/web-shell/assets/tsx-B6W0miNI.js +1 -0
  476. package/web-shell/assets/turtle-BMR_PYu6.js +1 -0
  477. package/web-shell/assets/twig-NC5TFiHP.js +1 -0
  478. package/web-shell/assets/typescript-Dj6nwHGl.js +1 -0
  479. package/web-shell/assets/typespec-BpWG_bgh.js +1 -0
  480. package/web-shell/assets/typst-BVUVsWT6.js +1 -0
  481. package/web-shell/assets/v-CAQ2eGtk.js +1 -0
  482. package/web-shell/assets/vala-BFOHcciG.js +1 -0
  483. package/web-shell/assets/vb-CdO5JTpU.js +1 -0
  484. package/web-shell/assets/vennDiagram-CIIHVFJN-DPPFWp_y.js +34 -0
  485. package/web-shell/assets/verilog-CJaU5se_.js +1 -0
  486. package/web-shell/assets/vesper-BEBZ7ncR.js +1 -0
  487. package/web-shell/assets/vhdl-DYoNaHQp.js +1 -0
  488. package/web-shell/assets/viml-m4uW47V2.js +1 -0
  489. package/web-shell/assets/vitesse-black-Bkuqu6BP.js +1 -0
  490. package/web-shell/assets/vitesse-dark-D0r3Knsf.js +1 -0
  491. package/web-shell/assets/vitesse-light-CVO1_9PV.js +1 -0
  492. package/web-shell/assets/vue-BuYVFjOK.js +1 -0
  493. package/web-shell/assets/vue-html-xdeiXROB.js +1 -0
  494. package/web-shell/assets/vyper-nyqBNV6O.js +1 -0
  495. package/web-shell/assets/wardley-L42UT6IY-CcOUIgXY.js +173 -0
  496. package/web-shell/assets/wardleyDiagram-YWT4CUSO-p7oR5X7r.js +78 -0
  497. package/web-shell/assets/wasm-C6j12Q_x.js +1 -0
  498. package/web-shell/assets/wasm-CG6Dc4jp.js +1 -0
  499. package/web-shell/assets/wenyan-7A4Fjokl.js +1 -0
  500. package/web-shell/assets/wgsl-CB0Krxn9.js +1 -0
  501. package/web-shell/assets/wikitext-DCE3LsBG.js +1 -0
  502. package/web-shell/assets/wolfram-C3FkfJm5.js +1 -0
  503. package/web-shell/assets/xml-e3z08dGr.js +1 -0
  504. package/web-shell/assets/xsl-Dd0NUgwM.js +1 -0
  505. package/web-shell/assets/xychartDiagram-2RQKCTM6-Dfr7-SEy.js +7 -0
  506. package/web-shell/assets/yaml-CVw76BM1.js +1 -0
  507. package/web-shell/assets/zenscript-HnGAYVZD.js +1 -0
  508. package/web-shell/assets/zig-BVz_zdnA.js +1 -0
  509. package/web-shell/index.html +23 -0
  510. package/chunks/chunk-C64WAJOC.js +0 -117
  511. package/chunks/contextCommand-HI2X2Y7I.js +0 -53
@@ -18,6 +18,16 @@ You can manage extensions at runtime within the interactive CLI using `/extensio
18
18
  | `/extensions install <source>` | Install an extension from a git URL, local path, npm package, or marketplace |
19
19
  | `/extensions explore [source]` | Open extensions source page(Gemini or ClaudeCode) in your browser |
20
20
 
21
+ #### The interactive extension manager
22
+
23
+ Running `/extensions` (or `/extensions manage`) opens an interactive manager with three tabs. Press `Tab` or the `←`/`→` arrows to switch between them.
24
+
25
+ - **Discover** — browse plugins from your configured marketplace sources. Type to search, `Enter` to view a plugin's details, and install it (you'll be asked to choose an install scope). Press `Ctrl+R` to re-fetch the listings, and `Esc` to go back.
26
+ - **Installed** — your installed extensions, grouped by scope (**User level**, **Project level**, and favorites). Use `↑`/`↓` to navigate, `Space` to enable/disable an extension, `f` to favorite it, and `Enter` to open its details. MCP servers bundled by an extension appear nested under their parent extension with live connection status; you can enable or disable each server individually from there.
27
+ - **Sources** — manage the marketplace sources that feed the Discover tab. Use `↑`/`↓` to navigate, `Enter` to select a source, and `d` to remove one. These are the same sources managed by the `qwen extensions sources` CLI commands described below.
28
+
29
+ Changes made here hot-reload immediately, without restarting Qwen Code.
30
+
21
31
  ### CLI Extension Management
22
32
 
23
33
  You can also manage extensions using `qwen extensions` CLI commands. Note that changes made via CLI commands will be reflected in active CLI sessions on restart.
@@ -133,6 +143,34 @@ qwen extensions install /path/to/your/extension
133
143
 
134
144
  Note that we create a copy of the installed extension, so you will need to run `qwen extensions update` to pull in changes from both locally-defined extensions and those on GitHub.
135
145
 
146
+ #### Choosing an install scope
147
+
148
+ By default, an installed extension is enabled globally (user scope). Pass `--scope project` to enable it only for the current workspace:
149
+
150
+ ```bash
151
+ qwen extensions install <source> --scope project
152
+ ```
153
+
154
+ `--scope workspace` is accepted as an alias of `--scope project`. This matches the scope choice offered when installing from the `/extensions manage` Discover tab.
155
+
156
+ ### Managing marketplace sources
157
+
158
+ Marketplace sources (Claude plugin marketplaces) power the Discover tab in `/extensions manage`. You can manage them from the CLI as well:
159
+
160
+ ```bash
161
+ # Add a marketplace (owner/repo, git URL, https URL to marketplace.json, or local path)
162
+ qwen extensions sources add <source>
163
+
164
+ # List configured marketplaces
165
+ qwen extensions sources list
166
+
167
+ # Re-fetch a marketplace's plugin listing
168
+ qwen extensions sources update <name>
169
+
170
+ # Remove a marketplace
171
+ qwen extensions sources remove <name>
172
+ ```
173
+
136
174
  ### Uninstalling an extension
137
175
 
138
176
  To uninstall, run `qwen extensions uninstall extension-name`, so, in the case of the install example:
@@ -52,6 +52,8 @@ If you are in Normal Mode, **Shift+Tab** (or **Tab** on Windows) first switches
52
52
 
53
53
  The `/plan` command provides a quick shortcut for entering and exiting Plan Mode:
54
54
 
55
+ Regular planning requests do not switch modes by themselves. If you want the read-only Plan Mode workflow, use `/plan`, the keyboard shortcut, or set the approval mode to `plan` explicitly.
56
+
55
57
  ```bash
56
58
  /plan # Enter plan mode
57
59
  /plan refactor the auth module # Enter plan mode and start planning
@@ -4,5 +4,6 @@ export default {
4
4
  weixin: 'WeChat',
5
5
  dingtalk: 'DingTalk',
6
6
  feishu: 'Feishu',
7
+ qqbot: 'QQ Bot',
7
8
  plugins: 'Plugins',
8
9
  };
@@ -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, or DingTalk, 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, or DingTalk, 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), [DingTalk](./dingtalk))
18
+ 1. Set up a bot on your messaging platform (see channel-specific guides: [Telegram](./telegram), [WeChat](./weixin), [QQ Bot](./qqbot), [DingTalk](./dingtalk))
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
 
@@ -49,7 +49,7 @@ Channels are configured under the `channels` key in `settings.json`. Each channe
49
49
 
50
50
  | Option | Required | Description |
51
51
  | ------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
52
- | `type` | Yes | Channel type: `telegram`, `weixin`, `dingtalk`, or a custom type from an extension (see [Plugins](./plugins)) |
52
+ | `type` | Yes | Channel type: `telegram`, `weixin`, `qq`, `dingtalk`, `feishu`, or a custom type from an extension (see [Plugins](./plugins)) |
53
53
  | `token` | Telegram | Bot token. Supports `$ENV_VAR` syntax to read from environment variables. Not needed for WeChat or DingTalk |
54
54
  | `clientId` | DingTalk | DingTalk AppKey. Supports `$ENV_VAR` syntax |
55
55
  | `clientSecret` | DingTalk | DingTalk AppSecret. Supports `$ENV_VAR` syntax |
@@ -292,7 +292,7 @@ Channels support slash commands. These are handled locally (no agent round-trip)
292
292
 
293
293
  All other slash commands (e.g., `/compress`, `/summary`) are forwarded to the agent.
294
294
 
295
- These commands work on all channel types (Telegram, WeChat, DingTalk).
295
+ These commands work on all channel types (Telegram, WeChat, QQ, DingTalk).
296
296
 
297
297
  ## Running
298
298
 
@@ -0,0 +1,179 @@
1
+ # QQ Bot (QQ机器人)
2
+
3
+ This guide covers setting up a Qwen Code channel on QQ via the official QQ Bot Open Platform API.
4
+
5
+ ## Prerequisites
6
+
7
+ - A QQ account (mobile app for scanning the QR code)
8
+
9
+ ## Setup
10
+
11
+ ### QR Code Login
12
+
13
+ Start the channel — the first time it will show a QR code. Scan it with your QQ app to activate. No developer account or manual registration needed. Credentials are saved and reused automatically.
14
+
15
+ ```json
16
+ {
17
+ "channels": {
18
+ "my-qq": {
19
+ "type": "qq"
20
+ }
21
+ }
22
+ }
23
+ ```
24
+
25
+ ```bash
26
+ qwen channel start my-qq
27
+ # Scan the QR code in the terminal with your QQ app
28
+ ```
29
+
30
+ ### Manual Configuration (Developer Portal)
31
+
32
+ You can also use credentials from the [QQ Bot Open Platform](https://q.qq.com/) developer portal if you already have an app registered there:
33
+
34
+ ```json
35
+ {
36
+ "channels": {
37
+ "my-qq": {
38
+ "type": "qq",
39
+ "appID": "YOUR_APP_ID",
40
+ "appSecret": "$QQ_APP_SECRET"
41
+ }
42
+ }
43
+ }
44
+ ```
45
+
46
+ Set the secret as an environment variable:
47
+
48
+ ```bash
49
+ export QQ_APP_SECRET=<your-app-secret>
50
+ ```
51
+
52
+ ## Configuration
53
+
54
+ ```json
55
+ {
56
+ "channels": {
57
+ "my-qq": {
58
+ "type": "qq",
59
+ "appID": "YOUR_APP_ID",
60
+ "appSecret": "$QQ_APP_SECRET",
61
+ "sandbox": false,
62
+ "senderPolicy": "open",
63
+ "sessionScope": "user",
64
+ "cwd": "/path/to/your/project",
65
+ "instructions": "你是一个通过 QQ Bot 对话的 AI 助手。回复控制在 2000 字符以内。",
66
+ "blockStreaming": "on",
67
+ "groupPolicy": "disabled",
68
+ "groups": {
69
+ "*": { "requireMention": true }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ### QQ-Specific Options
77
+
78
+ | Option | Default | Description |
79
+ | ----------- | ------- | --------------------------------------------------------------------------------- |
80
+ | `appID` | — | QQ Bot AppID from developer portal. If omitted, QR code login is used. |
81
+ | `appSecret` | — | QQ Bot AppSecret. Supports `$ENV_VAR` syntax. If omitted, QR code login is used. |
82
+ | `sandbox` | `false` | Set to `true` to use the QQ sandbox API environment (`sandbox.api.sgroup.qq.com`) |
83
+
84
+ All standard channel options (see [Channel Overview](./overview#options)) are also supported:
85
+ `senderPolicy`, `allowedUsers`, `sessionScope`, `cwd`, `instructions`, `groupPolicy`, `groups`, `dispatchMode`, `blockStreaming`, `blockStreamingChunk`, `blockStreamingCoalesce`.
86
+
87
+ ## Running
88
+
89
+ ```bash
90
+ # Start only the QQ channel
91
+ qwen channel start my-qq
92
+
93
+ # Or start all configured channels together
94
+ qwen channel start
95
+ ```
96
+
97
+ Open QQ and send a message to your bot. You should see the response arrive in your chat.
98
+
99
+ ## Group Chats
100
+
101
+ To use the bot in QQ groups:
102
+
103
+ 1. Set `groupPolicy` to `"allowlist"` or `"open"` in your channel config
104
+ 2. Add the bot to a QQ group via the QQ Bot Open Platform dashboard or by having a group admin invite it
105
+ 3. Group members must **@mention** the bot to trigger a response
106
+
107
+ QQ Bot API V2 only delivers group messages that @mention the bot — the bot does not see all group messages. By default, `requireMention` is `true` and should be left that way for QQ.
108
+
109
+ See [Group Chats](./overview#group-chats) for full details on group policies and mention gating.
110
+
111
+ ## Markdown Support
112
+
113
+ The QQ Bot channel supports Markdown formatting (`msg_type=2`). The agent's Markdown responses are sent as-is, and QQ renders them with rich formatting (bold, italic, code blocks, links, lists).
114
+
115
+ If the QQ server rejects a Markdown message for any reason, the channel automatically retries it as plain text — so your messages always go through even if the bot's Markdown capability is restricted server-side.
116
+
117
+ This is the opposite of the WeChat channel, which strips all Markdown. You can let the agent use full Markdown with the QQ channel.
118
+
119
+ ## Token Management
120
+
121
+ Access tokens expire after approximately 2 hours. The channel automatically refreshes them at 80% of their TTL (typically ~1.6 hours). If a refresh fails, it retries after 60 seconds.
122
+
123
+ Token refresh continues across WebSocket reconnects — the channel never goes offline due to an expired token as long as the AppID and AppSecret remain valid.
124
+
125
+ ## Connection Resilience
126
+
127
+ - **Auto-reconnect:** On WebSocket disconnect, the channel retries with exponential backoff (up to 20 attempts, max 30 seconds between retries)
128
+ - **Session resume:** If the WebSocket drops briefly, the channel uses QQ's `RESUME` opcode to restore the session without losing in-flight messages
129
+ - **Cross-server context continuation:** Chat sessions and routing state are persisted to disk. If the daemon restarts, conversations continue from where they left off
130
+ - **Heartbeat monitoring:** HEARTBEAT_ACK timeouts are detected and force a reconnection to avoid zombie connections
131
+ - **Message deduplication:** Replayed messages after a reconnect are detected and skipped
132
+
133
+ ## Tips
134
+
135
+ - **Use Markdown freely** — Unlike WeChat, QQ renders Markdown natively. Bold, code blocks, lists, and links all work.
136
+ - **Keep responses under 2000 characters** — Longer responses are automatically split into chunks. Adding a length hint to your instructions helps the agent stay concise.
137
+ - **Sandbox for testing** — Set `"sandbox": true` to use the sandbox API during development. No production messages will be affected.
138
+ - **Restrict access** — Use `senderPolicy: "allowlist"` for a fixed set of QQ users, or `"pairing"` to approve new users from the CLI. See [DM Pairing](./overview#dm-pairing) for details.
139
+
140
+ ## Key Differences from Telegram
141
+
142
+ | Area | QQ Bot | Telegram |
143
+ | ---------------- | ------------------------------------------- | --------------------------------------------- |
144
+ | Authentication | QR code login or AppID/AppSecret | Static bot token from BotFather |
145
+ | Markdown | Native QQ Markdown with plaintext fallback | HTML-formatted from agent Markdown |
146
+ | Token lifecycle | 2h TTL, auto-refresh at 80% | Permanent bot token |
147
+ | Group messages | Only @mention messages are delivered to bot | Bot sees all messages (with privacy mode off) |
148
+ | Typing indicator | Not available (QQ API limitation) | "Working..." message |
149
+ | Sandbox mode | Supported for testing | Not available |
150
+
151
+ ## Troubleshooting
152
+
153
+ ### Bot doesn't respond
154
+
155
+ - Check the terminal output for errors
156
+ - Verify the channel is running (`qwen channel status`)
157
+ - If using `senderPolicy: "allowlist"`, make sure your QQ user ID is in `allowedUsers`
158
+ - On first start, a QR code will appear in the terminal — scan it with your QQ app
159
+
160
+ ### Bot doesn't respond in groups
161
+
162
+ - Check that `groupPolicy` is set to `"allowlist"` or `"open"` (default is `"disabled"`)
163
+ - **You must @mention the bot** — QQ only delivers messages that tag the bot
164
+ - Verify the bot has been added to the group
165
+
166
+ ### QR code login is stuck
167
+
168
+ - The QR code is displayed in the terminal. Scan it with your QQ mobile app (Me → Scan)
169
+ - If the QR code expires (typically after a few minutes), restart the channel to get a new one
170
+
171
+ ### Markdown messages appear as plain text
172
+
173
+ - The QQ server may have rejected the Markdown message and the channel silently fell back to plain text. Check the terminal for `"Markdown rejected"` log messages
174
+ - This is unusual on the QQ Bot Open Platform but can happen if the bot's Markdown capability is restricted server-side
175
+
176
+ ### Token expired after long downtime
177
+
178
+ - If the channel is offline for more than 2 hours, the access token will have expired. The channel fetches a fresh token on reconnect — no action needed
179
+ - If the AppSecret itself is invalid (e.g., rotated in the developer portal), update the `appSecret` field or delete `~/.qwen/channels/<name>-credentials.json` to re-trigger QR code login
@@ -94,6 +94,7 @@ Commands for managing AI tools and models.
94
94
  | `/arena` | Manage Arena sessions | `/arena start`, `/arena status` |
95
95
  | `/goal` | Set a goal — keep working until condition met | `/goal <condition>`, `/goal clear` |
96
96
  | `/tasks` | List background tasks | `/tasks` |
97
+ | `/workflows` | Inspect workflow runs | `/workflows`, `/workflows <runId>` |
97
98
  | `/lsp` | Show LSP server status | `/lsp` |
98
99
  | `/trust` | Manage folder trust settings | `/trust` |
99
100
 
@@ -526,3 +527,51 @@ Requirements:
526
527
  | Shell Escaping | Prevent command injection | Automatic processing |
527
528
  | Execution Confirmation | Avoid accidental execution | Dialog confirmation |
528
529
  | Error Reporting | Help diagnose issues | View error information |
530
+
531
+ ## 5. CLI Subcommands
532
+
533
+ These commands are run from the shell as `qwen <subcommand>` before starting an interactive session.
534
+
535
+ ### Session Management
536
+
537
+ | Command | Description | Usage Examples |
538
+ | -------------------- | --------------------------------- | ------------------------------------------------------------ |
539
+ | `qwen sessions list` | List recent conversation sessions | `qwen sessions list`, `qwen sessions list --json --limit 50` |
540
+
541
+ #### `qwen sessions list`
542
+
543
+ Lists your recent Qwen Code sessions with metadata.
544
+
545
+ **Flags:**
546
+
547
+ | Flag | Type | Default | Description |
548
+ | --------- | ------- | ------- | ----------------------------------------------- |
549
+ | `--json` | boolean | `false` | Output as JSON Lines (one JSON object per line) |
550
+ | `--limit` | number | `20` | Maximum number of sessions to show |
551
+
552
+ **Human-readable output (default):**
553
+
554
+ A table with columns: SESSION ID, STARTED (UTC timestamp), TITLE, BRANCH, PROMPT.
555
+
556
+ **JSON output (`--json`):**
557
+
558
+ Outputs JSON Lines on stdout. Each line is a JSON object with fields:
559
+
560
+ ```
561
+ sessionId, startTime, mtime, prompt, gitBranch, customTitle, titleSource, filePath, cwd
562
+ ```
563
+
564
+ The "has more sessions" hint is emitted via stderr so piping to `jq` remains safe.
565
+
566
+ **Examples:**
567
+
568
+ ```bash
569
+ # Show last 20 sessions (default)
570
+ qwen sessions list
571
+
572
+ # Show last 50 sessions
573
+ qwen sessions list --limit 50
574
+
575
+ # Output as JSON for scripting
576
+ qwen sessions list --json | jq .
577
+ ```
@@ -1,12 +1,12 @@
1
1
  # Followup Suggestions
2
2
 
3
- Qwen Code can predict what you want to type next and show it as ghost text in the input area. This feature uses an LLM call to analyze the conversation context and generate a natural next step suggestion.
3
+ Qwen Code can predict what you want to type next and show it as placeholder text in the input area. This feature uses an LLM call to analyze the conversation context and generate a natural next step suggestion.
4
4
 
5
5
  This feature works end-to-end in the CLI. In the WebUI, the hook and UI plumbing are available, but host applications must trigger suggestion generation and wire the followup state for suggestions to appear.
6
6
 
7
7
  ## How It Works
8
8
 
9
- After Qwen Code finishes responding, a suggestion appears as dimmed text in the input area after a short delay (~300ms). For example, after fixing a bug, you might see:
9
+ After Qwen Code finishes responding, a suggestion appears as dimmed placeholder text in the input area after a short delay (~300ms). For example, after fixing a bug, you might see:
10
10
 
11
11
  ```
12
12
  > run the tests
@@ -19,10 +19,12 @@ The suggestion is generated by sending the conversation history to the model, wh
19
19
  | Key | Action |
20
20
  | ------------- | ------------------------------------------------ |
21
21
  | `Tab` | Accept the suggestion and fill it into the input |
22
- | `Enter` | Accept the suggestion and submit it immediately |
22
+ | `Enter` | Accept the suggestion and fill it into the input |
23
23
  | `Right Arrow` | Accept the suggestion and fill it into the input |
24
24
  | Any typing | Dismiss the suggestion and type normally |
25
25
 
26
+ `Enter` fills the input rather than submitting, so accepting a suggested slash command (e.g. `/clear`) never auto-executes — you submit it yourself with a second `Enter`.
27
+
26
28
  ## When Suggestions Appear
27
29
 
28
30
  Suggestions are generated when all of the following conditions are met:
@@ -32,7 +34,7 @@ Suggestions are generated when all of the following conditions are met:
32
34
  - There are no errors in the most recent response
33
35
  - No confirmation dialogs are pending (e.g., shell confirmation, permissions)
34
36
  - The approval mode is not set to `plan`
35
- - The feature is enabled in settings (disabled by default — set `ui.enableFollowupSuggestions` to `true` to turn it on)
37
+ - The feature is enabled (on by default — set `ui.enableFollowupSuggestions` to `false` to turn it off)
36
38
 
37
39
  Suggestions will not appear in non-interactive mode (e.g., headless/SDK mode).
38
40
 
@@ -44,7 +46,7 @@ Suggestions are automatically dismissed when:
44
46
 
45
47
  ## Fast Model
46
48
 
47
- By default, suggestions use the same model as your main conversation. For faster and cheaper suggestions, configure a dedicated fast model:
49
+ By default, suggestions use the same model as your main conversation. For lower-latency suggestions, configure a dedicated fast model:
48
50
 
49
51
  ### Via command
50
52
 
@@ -64,6 +66,8 @@ Or use `/model --fast` (without a model name) to open a selection dialog.
64
66
 
65
67
  The fast model is used for prompt suggestions and speculative execution. When not configured, the main conversation model is used as fallback.
66
68
 
69
+ > **Cost note:** A fast model lowers latency, but it does not always lower cost. Suggestion generation reuses your conversation's prefix cache (via `ui.enableCacheSharing`, on by default) — but a prefix cache is per-model. Pointing `fastModel` at a different model forks to a separate cache, so the whole conversation history is re-billed as uncached input on the fast model. On long conversations, the default (main model + shared cache) can be **cheaper** than a fast model, since most of the history is billed at the discounted cached rate. Set `fastModel` when latency matters more than per-turn cost.
70
+
67
71
  Thinking/reasoning mode is automatically disabled for all background tasks (suggestion generation and speculation), regardless of your main model's thinking configuration. This avoids wasting tokens on internal reasoning that isn't needed for these tasks.
68
72
 
69
73
  ## Configuration
@@ -72,7 +76,7 @@ These settings can be configured in `settings.json`:
72
76
 
73
77
  | Setting | Type | Default | Description |
74
78
  | ------------------------------ | ------- | ------- | ------------------------------------------------------------------ |
75
- | `ui.enableFollowupSuggestions` | boolean | `false` | Enable or disable followup suggestions |
79
+ | `ui.enableFollowupSuggestions` | boolean | `true` | Enable or disable followup suggestions |
76
80
  | `ui.enableCacheSharing` | boolean | `true` | Use cache-aware forked queries to reduce cost (experimental) |
77
81
  | `ui.enableSpeculation` | boolean | `false` | Speculatively execute suggestions before submission (experimental) |
78
82
  | `fastModel` | string | `""` | Model for prompt suggestions and speculative execution |
@@ -384,7 +384,8 @@ Hook output supports three categories of fields:
384
384
  "permission_mode": "default | plan | auto_edit | yolo",
385
385
  "tool_name": "name of the tool being executed",
386
386
  "tool_input": "object containing the tool's input parameters",
387
- "tool_use_id": "unique identifier for this tool use instance"
387
+ "tool_use_id": "unique identifier for this tool use instance (internal format, e.g., toolu_xxx)",
388
+ "tool_call_id": "original API call ID from the LLM provider (e.g., call_xxx for OpenAI/Qwen) (optional)"
388
389
  }
389
390
  ```
390
391
 
@@ -422,7 +423,8 @@ Hook output supports three categories of fields:
422
423
  "tool_name": "name of the tool that was executed",
423
424
  "tool_input": "object containing the tool's input parameters",
424
425
  "tool_response": "object containing the tool's response",
425
- "tool_use_id": "unique identifier for this tool use instance"
426
+ "tool_use_id": "unique identifier for this tool use instance (internal format, e.g., toolu_xxx)",
427
+ "tool_call_id": "original API call ID from the LLM provider (e.g., call_xxx for OpenAI/Qwen) (optional)"
426
428
  }
427
429
  ```
428
430
 
@@ -453,7 +455,8 @@ Hook output supports three categories of fields:
453
455
  ```json
454
456
  {
455
457
  "permission_mode": "default | plan | auto_edit | yolo",
456
- "tool_use_id": "unique identifier for the tool use",
458
+ "tool_use_id": "unique identifier for the tool use (internal format, e.g., toolu_xxx)",
459
+ "tool_call_id": "original API call ID from the LLM provider (e.g., call_xxx for OpenAI/Qwen) (optional)",
457
460
  "tool_name": "name of the tool that failed",
458
461
  "tool_input": "object containing the tool's input parameters",
459
462
  "error": "error message describing the failure",
@@ -88,8 +88,8 @@ Add a `statusLine` object under the `ui` key in `~/.qwen/settings.json`:
88
88
  | `model` | | Current model name without reasoning level |
89
89
  | `git-branch` | Yes | Current Git branch name (hidden when not in a git repo) |
90
90
  | `context-remaining` | Yes | Percentage of context window remaining (e.g. `Context 65.7% left`) |
91
- | `total-input-tokens` | | Total input tokens used in session (e.g. `30.0k in`) |
92
- | `total-output-tokens` | | Total output tokens used in session (e.g. `5.0k out`) |
91
+ | `total-input-tokens` | | Cumulative input tokens used in session (e.g. `30.0k total in`) |
92
+ | `total-output-tokens` | | Cumulative output tokens used in session (e.g. `5.0k total out`) |
93
93
  | `current-dir` | Yes | Current working directory |
94
94
  | `project-name` | | Project name (basename of working directory) |
95
95
  | `pull-request-number` | | Open PR number for the current branch (requires `gh` CLI) |
@@ -103,6 +103,8 @@ Add a `statusLine` object under the `ui` key in `~/.qwen/settings.json`:
103
103
 
104
104
  Items marked **Default** are pre-selected when you first open the `/statusline` dialog.
105
105
 
106
+ `total-input-tokens` and `total-output-tokens` are session totals. They add up token usage across turns, so input tokens can grow quickly because each new model request includes the current conversation context again. Use `used-tokens` when you want the current prompt size instead of cumulative session spend.
107
+
106
108
  ### Example output
107
109
 
108
110
  With the default items, the status line looks like:
@@ -10,6 +10,7 @@ Run Qwen Code as a local HTTP daemon so multiple clients (IDE plugins, web UIs,
10
10
 
11
11
  ## What it gives you
12
12
 
13
+ - **Built-in Web Shell UI** — `qwen serve` serves the browser-based Web Shell at its root (`http://127.0.0.1:4170/`) out of the box; run `qwen serve --open` to launch it in your browser automatically. It is served on the same origin as the API, so no second port or reverse proxy is needed. Pass `--no-web` for an API-only daemon.
13
14
  - **One agent process, many clients** — under the default `sessionScope: 'single'`, every client connecting to the daemon shares one ACP session. Live cross-client collaboration on the same conversation, the same file diffs, the same permission prompts.
14
15
  - **Reconnect-safe streaming** — SSE with `Last-Event-ID` reconnect lets a client drop and pick up exactly where it left off (within the ring's replay window).
15
16
  - **First-responder permissions** — when the agent asks for permission to run a tool, every connected client sees the request; whichever client answers first wins.
@@ -63,6 +64,8 @@ qwen serve
63
64
 
64
65
  The default bind is `127.0.0.1:4170`. Bearer auth is **off** on loopback so local development "just works". The daemon binds to the current working directory; use `--workspace /path/to/dir` to override.
65
66
 
67
+ **Open the Web Shell UI.** Browse to `http://127.0.0.1:4170/` (or start the daemon with `qwen serve --open` to launch it automatically) for the full browser terminal — chat, diffs, tool calls, and permission prompts. The UI is served at the daemon root on the same origin as the API. The rest of this guide uses raw HTTP so you can script against the API directly.
68
+
66
69
  ### 2. Sanity-check it
67
70
 
68
71
  ```bash
@@ -161,7 +164,7 @@ curl -N http://127.0.0.1:4170/session/$SESSION_ID/events
161
164
  The `data:` line is the **full event envelope** — `{id?, v, type, data, originatorClientId?}` — JSON-stringified on a single line. The ACP payload (the `sessionUpdate` block in this example) sits under `data` inside that envelope. The SSE-level `id:` / `event:` lines are convenience for EventSource clients; the same values appear inside the JSON envelope so raw-`fetch` consumers get them too.
162
165
 
163
166
  Open this **before** sending the prompt — the SSE replay buffer holds the
164
- last 4000 events so a late subscriber can catch up via `Last-Event-ID`,
167
+ last 8000 events so a late subscriber can catch up via `Last-Event-ID`,
165
168
  but for the simple "watch a single prompt" case it's easiest to subscribe
166
169
  first and let it stream live.
167
170
 
@@ -230,6 +233,8 @@ The token comparison is constant-time (SHA-256 + `crypto.timingSafeEqual`); 401
230
233
  | `--mcp-budget-mode <m>` | `warn` / `off` | How `--mcp-client-budget` is enforced. `warn` (default when budget set): no refusal, snapshot's `budgets[0].status` flips to `warning` at ≥75% of budget. `enforce`: connects past the cap are refused, per-server cell shows `disabledReason: 'budget'`, deterministic by `mcpServers` declaration order. `off` (default when budget unset): pure observability. Boot rejects `enforce` without a budget. |
231
234
  | `--http-bridge` | `true` | Stage 1 mode: one `qwen --acp` child per daemon (bound to one workspace at boot, per [#3803](https://github.com/QwenLM/qwen-code/issues/3803) §02); N sessions multiplex onto that child via ACP `newSession()`. Stage 2 native in-process becomes available later. |
232
235
  | `--allow-origin <pat>` | — | T2.4 ([#4514](https://github.com/QwenLM/qwen-code/issues/4514)). Cross-origin allowlist for browser webui clients. Repeatable. Each value is `*` (any origin — boot refuses if no bearer token is configured; `--require-auth` on loopback is recommended so `/health` and `/demo` are also bearer-gated, since both are pre-auth on loopback by default) or a canonical URL origin (`<scheme>://<host>[:<port>]`, no trailing slash / path / userinfo / query). **Subdomain wildcards (`https://*.example.com`) are intentionally unsupported** — list each subdomain explicitly, or use `*` with a configured token (and `--require-auth` for full hardening). Matched origins receive CORS response headers (`Access-Control-Allow-Origin`, `Vary: Origin`, methods, headers, max-age, and exposed `Retry-After`); unmatched origins still get a 403 with the same envelope as today's wall. `Origin: null` (sandboxed iframes, file:// docs) is always rejected, even under `*`. Pre-flight via `caps.features.allow_origin`. Loopback self-origin hits are unaffected. |
236
+ | `--web` / `--no-web` | `true` | Serve the built Web Shell SPA at the daemon root (`GET /`, `/assets/*`, and SPA deep-link fallback). The static shell is registered **before** the bearer-auth gate — a browser can't attach a token to a `<script>` subresource or an address-bar navigation, the shell carries no secrets, and every API route stays token-gated regardless. On non-loopback binds a one-line stderr warning notes the UI is reachable without auth. Use `--no-web` for an API-only daemon. No effect when the build omits the Web Shell assets (the daemon logs a breadcrumb and runs API-only). |
237
+ | `--open` | `false` | After the listener is up, open the Web Shell in your default browser at the daemon URL (with `#token=` appended as a URL fragment when a token is configured — a fragment is never sent to the server, keeping the token out of access logs and Referer headers). No-op with `--no-web`, or in headless / CI / SSH environments where no browser is available. |
233
238
 
234
239
  > **Sizing the load knobs.** `--max-sessions` is the **new-child** cap.
235
240
  > Three other layers also limit load — when sizing for a high-concurrency
@@ -357,7 +362,7 @@ for await (const event of session.events()) {
357
362
 
358
363
  Pre-flight `caps.features.session_load` / `caps.features.session_resume` before calling — older daemons return `404`. `unstable_session_resume` is still advertised as a deprecated compatibility alias. Concurrent same-action requests for the same id coalesce; cross-action races (a `load` racing a `resume`) get `409 restore_in_progress` with `Retry-After: 5`. See the [protocol reference](../developers/qwen-serve-protocol.md) for the full error envelope.
359
364
 
360
- Note: history replay is bounded by the SSE ring (default 4000 frames). Long histories with chatty turns can exceed that — earliest frames are dropped silently. For very long sessions, prefer `resume` and rely on the client's local persisted UI.
365
+ Note: history replay is bounded by the SSE ring (default 8000 frames). Long histories with chatty turns can exceed that — earliest frames are dropped silently. For very long sessions, prefer `resume` and rely on the client's local persisted UI.
361
366
 
362
367
  ## Durability model
363
368
 
@@ -365,7 +370,7 @@ Note: history replay is bounded by the SSE ring (default 4000 frames). Long hist
365
370
 
366
371
  - A child process crash publishes `session_died` and removes the live session from the daemon's maps. The persisted on-disk session **can** be reloaded via `POST /session/:id/load` if a fresh agent child is spawnable.
367
372
  - A daemon restart loses every in-flight live session. The persisted sessions remain on disk and can be loaded against a new daemon process, subject to the same workspace binding rules.
368
- - Long client disconnects (>5 min on a chatty turn) can outrun the SSE replay ring (default 4000 frames) — `Last-Event-ID` reconnect succeeds but state may be incoherent. For mobile / flaky-network clients, plan to re-open SSE on long drops or call `POST /session/:id/load` to replay from disk.
373
+ - Long client disconnects (>5 min on a chatty turn) can outrun the SSE replay ring (default 8000 frames) — `Last-Event-ID` reconnect succeeds but state may be incoherent. For mobile / flaky-network clients, plan to re-open SSE on long drops or call `POST /session/:id/load` to replay from disk.
369
374
  - File operations (`writeTextFile`) are atomic across crashes (write-then-rename); they aren't atomic across daemon restarts in the sense of replaying — the file write either landed or it didn't.
370
375
 
371
376
  If your integration needs server-side cross-restart durability beyond what `session/load` covers (e.g. server-managed retry queues), you still need application-level state recovery. Don't hold long-running, restart-sensitive state inside the daemon's session.
@@ -383,7 +388,7 @@ Stage 1's contract is sized for prototyping. Per [#3889 chiga0 downstream-consum
383
388
 
384
389
  3. ~~**Client-initiated heartbeat path**~~ — shipped via [#4175](https://github.com/QwenLM/qwen-code/issues/4175) PR 9. `POST /session/:id/heartbeat` records last-seen timestamps on the daemon (capability tag `client_heartbeat`); SDK helpers are `DaemonClient.heartbeat()` / `DaemonSessionClient.heartbeat()`.
385
390
  4. **`permission_already_resolved` event** when a vote loses the first-responder race — currently UIs have to infer state from a `404`.
386
- 5. **Larger / per-session-configurable replay ring** default 4000 covers short drops; mobile / chatty-turn workloads need 8000+ or per-session config.
391
+ 5. ~~**Larger replay ring**~~ — bumped to 8000. **Per-session-configurable ring** still open mobile / chatty-turn workloads may need per-session overrides.
387
392
  6. **`slow_client_warning` event before `client_evicted`** — soft backpressure so well-behaved slow clients can self-throttle (trim render depth, drop chunks) before being terminated.
388
393
 
389
394
  **Integration ergonomics:**
@@ -51,11 +51,11 @@ This document lists the available keyboard shortcuts in Qwen Code.
51
51
 
52
52
  ## Suggestions
53
53
 
54
- | Shortcut | Description |
55
- | --------------- | -------------------------------------- |
56
- | `Down Arrow` | Navigate down through the suggestions. |
57
- | `Tab` / `Enter` | Accept the selected suggestion. |
58
- | `Up Arrow` | Navigate up through the suggestions. |
54
+ | Shortcut | Description |
55
+ | ----------------------- | -------------------------------------- |
56
+ | `Down Arrow` / `Ctrl+N` | Navigate down through the suggestions. |
57
+ | `Tab` / `Enter` | Accept the selected suggestion. |
58
+ | `Up Arrow` / `Ctrl+P` | Navigate up through the suggestions. |
59
59
 
60
60
  ## Radio Button Select
61
61
 
@@ -83,6 +83,12 @@ Active only when `ui.useTerminalBuffer` is enabled (Settings → UI → Virtuali
83
83
 
84
84
  When `ui.useTerminalBuffer` is on, the terminal forwards mouse events to qwen-code so the wheel can drive the in-app viewport. As a side effect, **native click-and-drag text selection is consumed by the program** — hold `Shift` (or `Option` on macOS Terminal / iTerm) while dragging to bypass mouse capture and select text the usual way.
85
85
 
86
+ ### tmux trackpad scrolling
87
+
88
+ Inside tmux, some terminals translate trackpad or wheel gestures into plain `Up Arrow` and `Down Arrow` sequences before qwen-code sees them. Those bytes are identical to real arrow-key presses, so qwen-code cannot tell whether you meant to scroll the viewport or navigate prompt history.
89
+
90
+ If trackpad scrolling changes the prompt history in tmux, enable `ui.useTerminalBuffer`; then use `Shift+Up` / `Shift+Down`, or the mouse wheel when tmux forwards wheel events to the app. If you prefer host scrollback, adjust your tmux mouse bindings for wheel events.
91
+
86
92
  ## IDE Integration
87
93
 
88
94
  | Shortcut | Description |
@@ -85,6 +85,11 @@ This guide provides solutions to common issues and debugging tips, including top
85
85
  - **Cause:** The `DEBUG` and `DEBUG_MODE` variables are automatically excluded from project `.env` files to prevent interference with the CLI behavior.
86
86
  - **Solution:** Use a `.qwen/.env` file instead, or configure the `advanced.excludedEnvVars` setting in your `settings.json` to exclude fewer variables.
87
87
 
88
+ - **Trackpad scrolling in tmux changes prompt history instead of scrolling the conversation**
89
+ - **Issue:** In a tmux session, trackpad or wheel scrolling may cycle through previous prompts, similar to pressing `Up Arrow` or `Down Arrow`.
90
+ - **Cause:** tmux can translate wheel gestures into plain arrow-key sequences. Those sequences are indistinguishable from real arrow-key presses by the time qwen-code receives them.
91
+ - **Solution:** Enable `ui.useTerminalBuffer`; then use `Shift+Up` / `Shift+Down`, or the mouse wheel when tmux forwards wheel events to the app. If you prefer host scrollback, adjust your tmux mouse bindings for wheel events.
92
+
88
93
  ## IDE Companion not connecting
89
94
 
90
95
  - Ensure VS Code has a single workspace folder open.