@qwen-code/qwen-code 0.19.3 → 0.19.4-nightly.20260702.46814e4f1

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 (308) hide show
  1. package/bundled/loop/SKILL.md +22 -3
  2. package/bundled/loop/SKILL.test.ts +20 -0
  3. package/bundled/loop/autonomous-loop.test.ts +59 -0
  4. package/bundled/loop/autonomous-loop.ts +102 -0
  5. package/bundled/loop/loop-task-file.test.ts +1064 -0
  6. package/bundled/loop/loop-task-file.ts +404 -0
  7. package/bundled/loop/loop-tick-resolver.test.ts +906 -0
  8. package/bundled/loop/loop-tick-resolver.ts +416 -0
  9. package/bundled/qc-helper/SKILL.md +12 -5
  10. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  11. package/bundled/qc-helper/docs/configuration/settings.md +62 -32
  12. package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
  13. package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
  14. package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
  15. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
  16. package/bundled/qc-helper/docs/features/code-review.md +17 -61
  17. package/bundled/qc-helper/docs/features/commands.md +42 -40
  18. package/bundled/qc-helper/docs/features/headless.md +19 -18
  19. package/bundled/qc-helper/docs/features/hooks.md +6 -1
  20. package/bundled/qc-helper/docs/features/mcp.md +3 -1
  21. package/bundled/qc-helper/docs/features/memory.md +1 -1
  22. package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
  23. package/bundled/qc-helper/docs/features/status-line.md +3 -3
  24. package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
  25. package/bundled/qc-helper/docs/qwen-serve.md +53 -0
  26. package/bundled/qc-helper/docs/support/troubleshooting.md +11 -0
  27. package/bundled/review/DESIGN.md +21 -26
  28. package/bundled/review/SKILL.md +45 -129
  29. package/chunks/MaxSizedBox-GHGRQ2OS.js +69 -0
  30. package/chunks/{StandaloneSessionPicker-Z52JTYST.js → StandaloneSessionPicker-G7YTTM27.js} +49 -42
  31. package/chunks/{acpAgent-7RZUOWOM.js → acpAgent-SDOILBSU.js} +1325 -365
  32. package/chunks/{agent-4FG7WTHJ.js → agent-NTSXGV4L.js} +31 -25
  33. package/chunks/agent-headless-WYURMSAB.js +62 -0
  34. package/chunks/{anthropicContentGenerator-PFITVL7Y.js → anthropicContentGenerator-WL3LJOUB.js} +110 -31
  35. package/chunks/{artifact-tool-D2X7G3C3.js → artifact-tool-W76WC2JX.js} +3 -3
  36. package/chunks/{askUserQuestion-UGETICJQ.js → askUserQuestion-J3P6TH3V.js} +2 -2
  37. package/chunks/bridge-AMOL4W4P.js +73 -0
  38. package/chunks/{ca-IUFWESZL.js → ca-HCMB2I54.js} +10 -9
  39. package/chunks/channel-worker-supervisor-C3IB63V7.js +659 -0
  40. package/chunks/{chunk-STUWFKGD.js → chunk-26JIREA5.js} +466 -543
  41. package/chunks/{chunk-SLNKLLEO.js → chunk-2MRV62AU.js} +37 -8
  42. package/chunks/{chunk-ODLIHNOY.js → chunk-2U4HUMOL.js} +1 -1
  43. package/chunks/{chunk-CKQA6AWF.js → chunk-4D73HUOP.js} +1 -1
  44. package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
  45. package/chunks/{chunk-J7FA27RO.js → chunk-5LKL3PAU.js} +3 -3
  46. package/chunks/chunk-5P5XGNYH.js +93 -0
  47. package/chunks/{chunk-UFLGERMB.js → chunk-6JE32BRB.js} +178 -124
  48. package/chunks/{chunk-FKAVULLM.js → chunk-75AVTQJ2.js} +74 -10
  49. package/chunks/{chunk-I2LYBGNI.js → chunk-7IOMIYOE.js} +1 -1
  50. package/chunks/{chunk-4LUZAKMK.js → chunk-7KXAGQJ2.js} +1 -1
  51. package/chunks/{chunk-BXSHL2SF.js → chunk-7LUOQJ3D.js} +1 -1
  52. package/chunks/{chunk-YAINVQ3Q.js → chunk-A5OPLHFM.js} +18693 -17055
  53. package/chunks/chunk-AHNXYU4O.js +24 -0
  54. package/chunks/{chunk-UX4SGCGN.js → chunk-AVQDCKNF.js} +96 -22
  55. package/chunks/{chunk-HYCC3XM3.js → chunk-B236XPGF.js} +1 -1
  56. package/chunks/chunk-B6SZLQAZ.js +3523 -0
  57. package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
  58. package/chunks/chunk-BPFJQGY7.js +193 -0
  59. package/chunks/{chunk-SKQZZVAV.js → chunk-BZHLWC6T.js} +2 -2
  60. package/chunks/{chunk-U3KSMM7G.js → chunk-D5KISTLW.js} +339 -383
  61. package/chunks/{chunk-GT2FGICD.js → chunk-DE7YXUR7.js} +1 -1
  62. package/chunks/{chunk-BUUQ5HPX.js → chunk-DG573EOO.js} +1 -1
  63. package/chunks/{chunk-VVLOGDB6.js → chunk-DX3TKXNT.js} +2 -2
  64. package/chunks/chunk-E5A7LHNN.js +51 -0
  65. package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
  66. package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
  67. package/chunks/{chunk-PDE7CSDS.js → chunk-FXKI7OW6.js} +2 -2
  68. package/chunks/{chunk-F3ZYSEY6.js → chunk-FY4TT4L4.js} +3 -3
  69. package/chunks/{chunk-QLDPRILK.js → chunk-G7OQ3RFJ.js} +3 -3
  70. package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
  71. package/chunks/{chunk-KMGMKW5Q.js → chunk-GLPV75ES.js} +9 -3
  72. package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
  73. package/chunks/{chunk-CNLEDYE3.js → chunk-H6TNLOLM.js} +5 -5
  74. package/chunks/{chunk-JVHEVCAU.js → chunk-HLW4EGKR.js} +31 -6
  75. package/chunks/{chunk-I4H7PRWQ.js → chunk-HTWHAN44.js} +1 -1
  76. package/chunks/{chunk-QE6KJYLT.js → chunk-IPYE5BIS.js} +123 -25
  77. package/chunks/{chunk-EJYJYJZ2.js → chunk-IRJWHZWU.js} +3 -70
  78. package/chunks/{chunk-EDMZZFDU.js → chunk-J3YPTTNL.js} +930 -798
  79. package/chunks/{chunk-GGBIN5K7.js → chunk-JGAJMIJZ.js} +1 -1
  80. package/chunks/{chunk-N4EJFBN5.js → chunk-JVLP5US5.js} +427 -263
  81. package/chunks/{chunk-R5OP2ATH.js → chunk-JZG7VB6C.js} +11 -11
  82. package/chunks/{chunk-QI7GOGJR.js → chunk-KKQWC6WS.js} +1 -1
  83. package/chunks/{chunk-ADCIHOQZ.js → chunk-KX5QZRW2.js} +142 -30
  84. package/chunks/{chunk-SBBN4BWR.js → chunk-L7OJ3ZO3.js} +1 -1
  85. package/chunks/{chunk-NDOC6M5S.js → chunk-L7QPM2YD.js} +2 -2
  86. package/chunks/{chunk-BVSVIN45.js → chunk-LKWAVAB5.js} +3 -3
  87. package/chunks/{chunk-T4T2FNV4.js → chunk-LOW52WYZ.js} +2 -2
  88. package/chunks/{chunk-4QK3O43S.js → chunk-LU7BIVWC.js} +4 -4
  89. package/chunks/{chunk-ZP6UKOPB.js → chunk-LWGLBVWA.js} +1 -1
  90. package/chunks/{chunk-L7OKCI7T.js → chunk-M7BLWURA.js} +15 -1
  91. package/chunks/{chunk-PR32FRT6.js → chunk-MIM62IXS.js} +3 -3
  92. package/chunks/{chunk-RD6YJJJ6.js → chunk-MOUXUCXQ.js} +1 -1
  93. package/chunks/{chunk-VBZ452JT.js → chunk-MSNGFH6L.js} +494 -114
  94. package/chunks/{chunk-BX5YO7UW.js → chunk-MTNTVOJR.js} +542 -370
  95. package/chunks/chunk-MX2YXRER.js +44 -0
  96. package/chunks/chunk-NIOPRZNN.js +27 -0
  97. package/chunks/{chunk-SMYQZVZ3.js → chunk-NOGSPTLJ.js} +1 -1
  98. package/chunks/{chunk-DDMOU62Q.js → chunk-NPQWQYU6.js} +1 -1
  99. package/chunks/{chunk-MNF6S5PR.js → chunk-P5THQV6A.js} +4 -4
  100. package/chunks/{chunk-6V4NZFUS.js → chunk-PCYOT4PK.js} +5 -5
  101. package/chunks/{chunk-CF6BB3LT.js → chunk-PPFWEV7G.js} +10 -1
  102. package/chunks/{chunk-FXKVLFFY.js → chunk-PSFDB5FZ.js} +3 -3
  103. package/chunks/{chunk-XJYUPHRC.js → chunk-QOMAHFYI.js} +3 -3
  104. package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
  105. package/chunks/{chunk-RRFZXMYP.js → chunk-QZDBHNMV.js} +691 -164
  106. package/chunks/{chunk-S7AKE7HL.js → chunk-R6RI2HIC.js} +63 -9
  107. package/chunks/{chunk-HZT4UCFB.js → chunk-RB7S52NJ.js} +4 -4
  108. package/chunks/{chunk-J33ZR6OJ.js → chunk-RK22ACPP.js} +16 -16
  109. package/chunks/chunk-RM3PGSGL.js +66 -0
  110. package/chunks/chunk-RNBYOUGV.js +42 -0
  111. package/chunks/chunk-S6RLAIUR.js +23 -0
  112. package/chunks/{chunk-3TV3HUWZ.js → chunk-SCYK2YLI.js} +81 -30
  113. package/chunks/{chunk-HPZTOP4I.js → chunk-SEKRT4SD.js} +133 -23
  114. package/chunks/chunk-SEZC2725.js +36 -0
  115. package/chunks/chunk-SIUQ3YYX.js +78 -0
  116. package/chunks/{chunk-O2VBQ3Y2.js → chunk-SJBIFVD2.js} +2 -2
  117. package/chunks/chunk-SYCJMSIJ.js +82 -0
  118. package/chunks/{chunk-JE5FVRPC.js → chunk-T22H4V4R.js} +48 -23
  119. package/chunks/{chunk-3227DZO4.js → chunk-T42ACHFI.js} +1 -1
  120. package/chunks/{chunk-UO5GVXQE.js → chunk-TENOUWY2.js} +3 -3
  121. package/chunks/{chunk-JOLIREYR.js → chunk-TOAUDIS7.js} +1 -1
  122. package/chunks/{chunk-QNKBEJO2.js → chunk-UA6XBZT7.js} +2776 -1289
  123. package/chunks/{chunk-O75BHFQW.js → chunk-UQTYK5SS.js} +2 -2
  124. package/chunks/{chunk-Y6YMRS3U.js → chunk-UY2TCIZS.js} +17 -3
  125. package/chunks/{chunk-FNJ7BDPH.js → chunk-UY7ZAYTY.js} +10 -7
  126. package/chunks/{chunk-UYT3MWEB.js → chunk-UYHWM24C.js} +30 -2
  127. package/chunks/{chunk-SMXULRAN.js → chunk-VXGPYF7U.js} +1 -1
  128. package/chunks/{chunk-BTLJ2MF5.js → chunk-W7CG5HPC.js} +3 -3
  129. package/chunks/{chunk-JJXWTVSK.js → chunk-XHZKDN7M.js} +34 -1
  130. package/chunks/{chunk-K5XU6E4T.js → chunk-XKSCTXPK.js} +2 -2
  131. package/chunks/chunk-Y4LITCRB.js +367 -0
  132. package/chunks/chunk-YHTNWGRR.js +239 -0
  133. package/chunks/{chunk-BKXBARJZ.js → chunk-YPCPZSZB.js} +1 -1
  134. package/chunks/{chunk-QWFNTRH4.js → chunk-YSM24SCE.js} +1 -1
  135. package/chunks/chunk-YTFBURQD.js +313 -0
  136. package/chunks/{chunk-NL4C3H6C.js → chunk-YXK4GPYO.js} +1 -1
  137. package/chunks/{chunk-RYLJU2DY.js → chunk-ZN5T4BHI.js} +1 -1
  138. package/chunks/{computer-use-JGB36FDW.js → computer-use-MTSVPLPY.js} +34 -28
  139. package/chunks/contextCommand-VGJ3BPTK.js +67 -0
  140. package/chunks/{cron-create-SKEY55RG.js → cron-create-6YTCOX6P.js} +4 -4
  141. package/chunks/{cron-delete-I3NAT32Z.js → cron-delete-E3NIFSUK.js} +4 -4
  142. package/chunks/{cron-list-6XRRL6TH.js → cron-list-Q64MNQNE.js} +4 -4
  143. package/chunks/daemon-EEB2RYOL.js +8453 -0
  144. package/chunks/daemon-status-provider-H5SNMK42.js +71 -0
  145. package/chunks/{de-EOW5PVHF.js → de-PLLFDERI.js} +10 -9
  146. package/chunks/{dist-NHEYYB2B.js → dist-ADMIQGHI.js} +2 -2
  147. package/chunks/{dist-J37VXPLD.js → dist-BCQ7INM7.js} +40 -15
  148. package/chunks/{dist-663NZ6MI.js → dist-KNZFCY5F.js} +116 -11
  149. package/chunks/{dist-LB6OGPVM.js → dist-LHUWC3K6.js} +26 -5
  150. package/chunks/{dist-PQPZ5Q4N.js → dist-WBBZ76JZ.js} +20 -9
  151. package/chunks/{earlyInputCapture-44RISVVJ.js → earlyInputCapture-U4ZIQSQU.js} +32 -26
  152. package/chunks/{edit-NN6GM5DT.js → edit-SYIQ2KBI.js} +41 -38
  153. package/chunks/{en-HPWEJBTR.js → en-M4EBUBNU.js} +32 -10
  154. package/chunks/{enter-worktree-PB3O2C7D.js → enter-worktree-HPPOO244.js} +31 -25
  155. package/chunks/{enterPlanMode-YQFNNSUA.js → enterPlanMode-56YYO52U.js} +41 -25
  156. package/chunks/{errors-LS7XU5DZ.js → errors-EO4SXCFP.js} +33 -27
  157. package/chunks/{exit-worktree-E2FTNSBK.js → exit-worktree-UDM7E6XH.js} +31 -25
  158. package/chunks/{exitPlanMode-GLYK2BUB.js → exitPlanMode-M6P3AWLJ.js} +149 -33
  159. package/chunks/{fast-path-WQ6M7LI7.js → fast-path-42P4QYWI.js} +33 -14
  160. package/chunks/{fast-path-settings-OAGU3X5H.js → fast-path-settings-UQLRFDQP.js} +2 -2
  161. package/chunks/{fr-BN5NKSAC.js → fr-MBMNQSQ6.js} +10 -9
  162. package/chunks/{gemini-2YFLVA2M.js → gemini-NRLXS5J7.js} +84 -70
  163. package/chunks/{geminiContentGenerator-XV6SV6CD.js → geminiContentGenerator-DLJPYYPA.js} +41 -5
  164. package/chunks/{glob-2H6CDDMK.js → glob-JPY3F74Y.js} +31 -25
  165. package/chunks/{grep-VXIUXM3C.js → grep-HW23YES5.js} +31 -25
  166. package/chunks/initializer-HWOZTC4A.js +67 -0
  167. package/chunks/{ja-7DEUB2TS.js → ja-HFV5QCHR.js} +10 -9
  168. package/chunks/{keychain-token-storage-YLMDLKXT.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
  169. package/chunks/list-OZGAGRDG.js +71 -0
  170. package/chunks/loadedSettingsAdapter-RUTZVVIA.js +66 -0
  171. package/chunks/{loop-wakeup-CITGGQHA.js → loop-wakeup-G2EHBRGR.js} +5 -5
  172. package/chunks/{ls-R5WP4BGZ.js → ls-IDHUVSAG.js} +4 -4
  173. package/chunks/{lsp-GSICJMMW.js → lsp-FSRYXGFT.js} +2 -2
  174. package/chunks/{monitor-HKLRS2HQ.js → monitor-QVWEIXU3.js} +33 -26
  175. package/chunks/nonInteractiveCli-RV2WYPML.js +109 -0
  176. package/chunks/{notebook-edit-Y6SKSGTT.js → notebook-edit-B26W3FFH.js} +37 -34
  177. package/chunks/{openaiContentGenerator-J7G2FYJT.js → openaiContentGenerator-6TH7AZGQ.js} +15 -13
  178. package/chunks/pidfile-KW2QQJZI.js +73 -0
  179. package/chunks/{pt-TNZRNLQB.js → pt-2THT3YHA.js} +10 -9
  180. package/chunks/{qwenContentGenerator-5XIEM5GV.js → qwenContentGenerator-5IQAC7RN.js} +33 -27
  181. package/chunks/{qwenOAuth2-AG3PFFLZ.js → qwenOAuth2-LWLA6MQG.js} +5 -4
  182. package/chunks/{read-file-J7D552ZJ.js → read-file-CWFAHOI2.js} +11 -10
  183. package/chunks/{read-mcp-resource-DQQW7H7T.js → read-mcp-resource-PIJF24RO.js} +2 -2
  184. package/chunks/ripGrep-FTZGDKY4.js +60 -0
  185. package/chunks/{ru-NIAUBKCN.js → ru-Z67YJHBG.js} +10 -9
  186. package/chunks/{run-qwen-serve-SGEEVMXD.js → run-qwen-serve-FN2SW5ZI.js} +545 -97
  187. package/chunks/{scheduler-7CQI3S4Q.js → scheduler-BMS23O3I.js} +31 -25
  188. package/chunks/{send-message-EE4TWKVU.js → send-message-33PYFMCT.js} +20 -4
  189. package/chunks/serve-PXFYKL65.js +71 -0
  190. package/chunks/{server-4QMUWXPW.js → server-BRKALJ4F.js} +4132 -1175
  191. package/chunks/{session-NRO7UFOY.js → session-AQMISBP4.js} +205 -64
  192. package/chunks/{settings-SGWRDQSC.js → settings-JCPVUZMB.js} +35 -29
  193. package/chunks/{shell-62ANGIHL.js → shell-POHCRVN2.js} +31 -25
  194. package/chunks/{skill-VWAQAWW6.js → skill-QPEVHS6H.js} +13 -12
  195. package/chunks/spawnChannel-V3QT62TE.js +69 -0
  196. package/chunks/{src-KUV5J5Q2.js → src-IZSP7L6Y.js} +127 -32
  197. package/chunks/{startInteractiveUI-6EYJN3JV.js → startInteractiveUI-63KATISO.js} +16762 -16075
  198. package/chunks/{syntheticOutput-T5YHQ6S2.js → syntheticOutput-YOSWIHDJ.js} +3 -3
  199. package/chunks/{task-create-BLY7RHXX.js → task-create-NHS2NGB3.js} +9 -7
  200. package/chunks/{task-list-3QUYNVYR.js → task-list-5UIB564R.js} +7 -6
  201. package/chunks/{task-stop-U4RATK2V.js → task-stop-HGXZ2VZ3.js} +2 -2
  202. package/chunks/{task-update-U54O7KJX.js → task-update-IYYWUILG.js} +40 -7
  203. package/chunks/{team-create-LPOGCPM7.js → team-create-E5O2F3CA.js} +31 -25
  204. package/chunks/{team-delete-LKBYPASD.js → team-delete-FEKJCU4P.js} +7 -6
  205. package/chunks/team-plan-approval-2TU4YROB.js +202 -0
  206. package/chunks/theme-manager-37KOGPJL.js +64 -0
  207. package/chunks/{todoWrite-OYXKTVYN.js → todoWrite-TKMVZ2HT.js} +4 -4
  208. package/chunks/{tool-search-YPUFJ3ZQ.js → tool-search-4ZTGNSFI.js} +38 -11
  209. package/chunks/{trustedFolders-5B24TMEA.js → trustedFolders-RJ5WXJ6L.js} +32 -26
  210. package/chunks/{validateNonInterActiveAuth-BTDTYOVT.js → validateNonInterActiveAuth-ZWMHZAOK.js} +66 -55
  211. package/chunks/{web-fetch-EEB5LZYU.js → web-fetch-J4PIW36Q.js} +5 -4
  212. package/chunks/{workflow-LAWIW5LI.js → workflow-6PG2PC5M.js} +68 -39
  213. package/chunks/workspace-providers-status-4QIZN2W4.js +68 -0
  214. package/chunks/workspace-service-CYMCOEIO.js +78 -0
  215. package/chunks/{write-file-PCV226DJ.js → write-file-R354LGQF.js} +41 -40
  216. package/chunks/{zh-5EUYXASN.js → zh-SLZNSSZB.js} +32 -10
  217. package/chunks/{zh-TW-TR3XYGE5.js → zh-TW-P53C2SL5.js} +32 -10
  218. package/cli.js +6 -6
  219. package/locales/ca.js +15 -13
  220. package/locales/de.js +15 -13
  221. package/locales/en.js +52 -15
  222. package/locales/fr.js +15 -14
  223. package/locales/ja.js +15 -14
  224. package/locales/pt.js +15 -13
  225. package/locales/ru.js +15 -13
  226. package/locales/zh-TW.js +50 -14
  227. package/locales/zh.js +50 -14
  228. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  229. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  230. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  231. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  232. package/package.json +15 -6
  233. package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
  234. package/postinstall.js +50 -0
  235. package/web-shell/assets/{arc-DA7r8Ueo.js → arc-Bd3048nX.js} +1 -1
  236. package/web-shell/assets/{architectureDiagram-3BPJPVTR-ZDUxPtZ2.js → architectureDiagram-3BPJPVTR-DyzbzABx.js} +1 -1
  237. package/web-shell/assets/{blockDiagram-GPEHLZMM-vrtOf1kJ.js → blockDiagram-GPEHLZMM-CTjxm9Sy.js} +1 -1
  238. package/web-shell/assets/{c4Diagram-AAUBKEIU-BHFjzIi4.js → c4Diagram-AAUBKEIU-DSOFWNU6.js} +1 -1
  239. package/web-shell/assets/channel-oVoup_Ci.js +1 -0
  240. package/web-shell/assets/{chunk-2J33WTMH-mdeQVz59.js → chunk-2J33WTMH-D_PFdjo2.js} +1 -1
  241. package/web-shell/assets/{chunk-4BX2VUAB-BkKMlwBX.js → chunk-4BX2VUAB-52eG6wOT.js} +1 -1
  242. package/web-shell/assets/{chunk-55IACEB6-B7bnXNfu.js → chunk-55IACEB6-CGTZfKkC.js} +1 -1
  243. package/web-shell/assets/{chunk-727SXJPM-DGz8Mm6i.js → chunk-727SXJPM-CZ-qfRUm.js} +1 -1
  244. package/web-shell/assets/{chunk-AQP2D5EJ-BQAydUNk.js → chunk-AQP2D5EJ-B2dSDcqM.js} +1 -1
  245. package/web-shell/assets/{chunk-FMBD7UC4-GHr2LN_p.js → chunk-FMBD7UC4-Cfy3tyA0.js} +1 -1
  246. package/web-shell/assets/{chunk-ND2GUHAM-7R91lnUx.js → chunk-ND2GUHAM-CApNUpUq.js} +1 -1
  247. package/web-shell/assets/{chunk-QZHKN3VN-aTJD3lSQ.js → chunk-QZHKN3VN-CVBG8kgg.js} +1 -1
  248. package/web-shell/assets/classDiagram-4FO5ZUOK-B8WsaT2G.js +1 -0
  249. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B8WsaT2G.js +1 -0
  250. package/web-shell/assets/{cose-bilkent-S5V4N54A-BTf8t1RL.js → cose-bilkent-S5V4N54A-URd77-_-.js} +1 -1
  251. package/web-shell/assets/{dagre-BM42HDAG-_sgp3WuA.js → dagre-BM42HDAG-C07H4G9-.js} +1 -1
  252. package/web-shell/assets/{diagram-2AECGRRQ-CROtRy1w.js → diagram-2AECGRRQ-CYbpXrSn.js} +1 -1
  253. package/web-shell/assets/{diagram-5GNKFQAL-BqGRzwSc.js → diagram-5GNKFQAL-SI8s6fjX.js} +1 -1
  254. package/web-shell/assets/{diagram-KO2AKTUF-CMrcEtA7.js → diagram-KO2AKTUF-mBkC4RTW.js} +1 -1
  255. package/web-shell/assets/{diagram-LMA3HP47-BRydGNW5.js → diagram-LMA3HP47-CyBPDzWJ.js} +1 -1
  256. package/web-shell/assets/{diagram-OG6HWLK6-D0ilgNjV.js → diagram-OG6HWLK6-DwK7kBCu.js} +1 -1
  257. package/web-shell/assets/{erDiagram-TEJ5UH35-2lnQeJUM.js → erDiagram-TEJ5UH35-Ds1StEUd.js} +1 -1
  258. package/web-shell/assets/{flowDiagram-I6XJVG4X-C_ZMdQiC.js → flowDiagram-I6XJVG4X-BDC4-jHO.js} +1 -1
  259. package/web-shell/assets/{ganttDiagram-6RSMTGT7-Dw9V_Ny0.js → ganttDiagram-6RSMTGT7-CV2aHQqf.js} +1 -1
  260. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-HDXI-F1B.js → gitGraphDiagram-PVQCEYII-B8RcuV_L.js} +1 -1
  261. package/web-shell/assets/index-B5WZ0qP1.js +717 -0
  262. package/web-shell/assets/index-CYE1IMd1.css +5 -0
  263. package/web-shell/assets/{infoDiagram-5YYISTIA-CuB8Ebua.js → infoDiagram-5YYISTIA-DUPoTf50.js} +1 -1
  264. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D_tyhVwh.js → ishikawaDiagram-YF4QCWOH-FDYOx9rf.js} +1 -1
  265. package/web-shell/assets/{journeyDiagram-JHISSGLW-CgCwJQNU.js → journeyDiagram-JHISSGLW-C5_ohMRp.js} +1 -1
  266. package/web-shell/assets/{kanban-definition-UN3LZRKU-PZUtcbPx.js → kanban-definition-UN3LZRKU-Bn4UnOMG.js} +1 -1
  267. package/web-shell/assets/{linear-CZqRdJIU.js → linear-Bl0pKQtY.js} +1 -1
  268. package/web-shell/assets/{mermaid.core-CPW_4UEF.js → mermaid.core-sevQFoji.js} +72 -72
  269. package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_Y75ID7.js → mindmap-definition-RKZ34NQL-DSH4JZF9.js} +1 -1
  270. package/web-shell/assets/{pieDiagram-4H26LBE5-Q4dTyLeF.js → pieDiagram-4H26LBE5-acWvdQTD.js} +1 -1
  271. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-ckw329Ft.js → quadrantDiagram-W4KKPZXB-DlggX4Sm.js} +1 -1
  272. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DbVDm4It.js → requirementDiagram-4Y6WPE33--mMqwmV8.js} +1 -1
  273. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CHuZ_ecH.js → sankeyDiagram-5OEKKPKP-BtV9tZ77.js} +1 -1
  274. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DU2YSpq-.js → sequenceDiagram-3UESZ5HK-iDQzPFlj.js} +1 -1
  275. package/web-shell/assets/{stateDiagram-AJRCARHV-CA9PEBUo.js → stateDiagram-AJRCARHV-CsCyQLZ3.js} +1 -1
  276. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CPapECG9.js +1 -0
  277. package/web-shell/assets/{timeline-definition-PNZ67QCA-Bhlo4WVc.js → timeline-definition-PNZ67QCA-Dl0rnKvr.js} +1 -1
  278. package/web-shell/assets/{vennDiagram-CIIHVFJN-6xtPLsyl.js → vennDiagram-CIIHVFJN-qF7nTZzA.js} +1 -1
  279. package/web-shell/assets/{wardley-L42UT6IY-3eozmXPf.js → wardley-L42UT6IY-fWoK9i7F.js} +1 -1
  280. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BOn6hKss.js → wardleyDiagram-YWT4CUSO-pHGfkMnc.js} +1 -1
  281. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BsP4-I_y.js → xychartDiagram-2RQKCTM6-3Doc4Trz.js} +1 -1
  282. package/web-shell/index.html +18 -2
  283. package/chunks/MaxSizedBox-QNF3EIGU.js +0 -63
  284. package/chunks/agent-headless-RQ5BTX3G.js +0 -56
  285. package/chunks/bridge-JL2PMCIW.js +0 -66
  286. package/chunks/chunk-5GOVVXEV.js +0 -73
  287. package/chunks/chunk-BC3C4F3Q.js +0 -40
  288. package/chunks/chunk-BW4KCQFD.js +0 -1103
  289. package/chunks/chunk-RKIZXJMB.js +0 -13
  290. package/chunks/contextCommand-WYU6OQ2F.js +0 -61
  291. package/chunks/daemon-status-provider-HH2EC5FI.js +0 -65
  292. package/chunks/headlessSafetyWarnings-TBE35GJ4.js +0 -55
  293. package/chunks/initializer-2Y7SLOKV.js +0 -61
  294. package/chunks/list-ZAFHZ7OS.js +0 -65
  295. package/chunks/loadedSettingsAdapter-6KJXD6M3.js +0 -60
  296. package/chunks/nonInteractiveCli-5W4GIZQM.js +0 -96
  297. package/chunks/ripGrep-IEIFIWP4.js +0 -54
  298. package/chunks/serve-V6GVZR6U.js +0 -65
  299. package/chunks/spawnChannel-3VHW5EPY.js +0 -63
  300. package/chunks/theme-manager-LYLGAERF.js +0 -58
  301. package/chunks/workspace-providers-status-PIAFVYHA.js +0 -62
  302. package/chunks/workspace-service-YAIOD4HG.js +0 -71
  303. package/web-shell/assets/channel-iRo68q4Q.js +0 -1
  304. package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +0 -1
  305. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +0 -1
  306. package/web-shell/assets/index-CHmzAWys.css +0 -5
  307. package/web-shell/assets/index-w6GTOHh1.js +0 -713
  308. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-t1LRI0oY.js +0 -1
@@ -28,8 +28,7 @@ The `/review` command runs a multi-stage pipeline:
28
28
  ```
29
29
  Step 1: Determine scope (local diff / PR worktree / file)
30
30
  Step 2: Load project review rules
31
- Step 3: Run deterministic analysis (linter, typecheck) [zero LLM cost]
32
- Step 4: 9 parallel review agents [9 LLM calls]
31
+ Step 3: 9 parallel review agents [9 LLM calls]
33
32
  |-- Agent 1: Correctness
34
33
  |-- Agent 2: Security
35
34
  |-- Agent 3: Code Quality
@@ -37,13 +36,12 @@ Step 4: 9 parallel review agents [9 LLM calls]
37
36
  |-- Agent 5: Test Coverage
38
37
  |-- Agent 6: Undirected Audit (3 personas: 6a/6b/6c)
39
38
  '-- Agent 7: Build & Test (runs shell commands)
40
- Step 5: Deduplicate --> Batch verify --> Aggregate [1 LLM call]
41
- Step 6: Iterative reverse audit (1-3 rounds, gap finding) [1-3 LLM calls]
42
- Step 7: Present findings + verdict
43
- Step 8: Autofix (user-confirmed, optional)
44
- Step 9: Post PR inline comments (if requested)
45
- Step 10: Save report + incremental cache
46
- Step 11: Clean up (remove worktree + temp files)
39
+ Step 4: Deduplicate --> Batch verify --> Aggregate [1 LLM call]
40
+ Step 5: Iterative reverse audit (1-3 rounds, gap finding) [1-3 LLM calls]
41
+ Step 6: Present findings + verdict
42
+ Step 7: Submit PR review (inline comments, if requested)
43
+ Step 8: Save report + incremental cache
44
+ Step 9: Clean up (remove worktree + temp files)
47
45
  ```
48
46
 
49
47
  ### Review Agents
@@ -60,29 +58,6 @@ Step 11: Clean up (remove worktree + temp files)
60
58
 
61
59
  All agents run in parallel (Agent 6 launches 3 persona variants concurrently, totaling 9 parallel tasks for same-repo reviews). Findings from Agents 1-6 are verified in a **single batch verification pass** (one agent reviews all findings at once, keeping verification cost fixed regardless of finding count). After verification, **iterative reverse audit** runs 1-3 rounds of gap-finding — each round receives the cumulative finding list from prior rounds, so successive rounds focus on whatever's left undiscovered. The loop stops as soon as a round returns "No issues found", or after 3 rounds (hard cap). Reverse audit findings skip verification (the agent already has full context) and are included as high-confidence results.
62
60
 
63
- ## Deterministic Analysis
64
-
65
- Before the LLM agents run, `/review` automatically runs your project's existing linters and type checkers:
66
-
67
- | Language | Tools detected |
68
- | --------------------- | ---------------------------------------------------------------- |
69
- | TypeScript/JavaScript | `tsc --noEmit`, `npm run lint`, `eslint` |
70
- | Python | `ruff`, `mypy`, `flake8` |
71
- | Rust | `cargo clippy` |
72
- | Go | `go vet`, `golangci-lint` |
73
- | Java | `mvn compile`, `checkstyle`, `spotbugs`, `pmd` |
74
- | C/C++ | `clang-tidy` (if `compile_commands.json` available) |
75
- | Other | Auto-discovered from CI config (`.github/workflows/*.yml`, etc.) |
76
-
77
- For projects that don't match standard patterns (e.g., OpenJDK), `/review` reads CI configuration files to discover what lint/check commands the project uses. No user configuration needed.
78
-
79
- Deterministic findings are tagged with `[linter]` or `[typecheck]` and skip LLM verification — they are ground truth.
80
-
81
- - **Errors** → Critical severity
82
- - **Warnings** → Nice to have (terminal only, not posted as PR comments)
83
-
84
- If a tool is not installed or times out, it is skipped with an informational note.
85
-
86
61
  ## Severity Levels
87
62
 
88
63
  | Severity | Meaning | Posted as PR comment? |
@@ -93,26 +68,12 @@ If a tool is not installed or times out, it is skipped with an informational not
93
68
 
94
69
  Low-confidence findings appear in a separate "Needs Human Review" section in the terminal and are never posted as PR comments.
95
70
 
96
- ## Autofix
97
-
98
- After presenting findings, `/review` offers to auto-apply fixes for Critical and Suggestion findings that have clear solutions:
99
-
100
- ```
101
- Found 3 issues with auto-fixable suggestions. Apply auto-fixes? (y/n)
102
- ```
103
-
104
- - Fixes are applied using the `edit` tool (targeted replacements, not full-file rewrites)
105
- - Per-file linter checks run after fixes to verify they don't introduce new issues
106
- - For PR reviews, fixes are committed and pushed from the worktree automatically — your working tree stays clean
107
- - Nice to have and low-confidence findings are never auto-fixed
108
- - PR review submission always uses the **pre-fix verdict** (e.g., "Request changes") since the remote PR hasn't been updated until the autofix push completes
109
-
110
71
  ## Worktree Isolation
111
72
 
112
73
  When reviewing a PR, `/review` creates a temporary git worktree (`.qwen/tmp/review-pr-<number>`) instead of switching your current branch. This means:
113
74
 
114
75
  - Your working tree, staged changes, and current branch are **never touched**
115
- - Dependencies are installed in the worktree (`npm ci`, etc.) so linting and build/test work
76
+ - Dependencies are installed in the worktree (`npm ci`, etc.) so build/test work
116
77
  - Build and test commands run in isolation without polluting your local build cache
117
78
  - If anything goes wrong, your environment is unaffected — just delete the worktree
118
79
  - The worktree is automatically cleaned up after the review completes
@@ -127,15 +88,13 @@ You can review PRs from other repositories by passing the full URL:
127
88
  /review https://github.com/other-org/other-repo/pull/456
128
89
  ```
129
90
 
130
- This runs in **lightweight mode** — no worktree, no linter, no build/test, no autofix. The review is based on the diff text only (fetched via GitHub API). PR comments can still be posted if you have write access.
91
+ This runs in **lightweight mode** — no worktree, no build/test. The review is based on the diff text only (fetched via GitHub API). PR comments can still be posted if you have write access.
131
92
 
132
93
  | Capability | Same-repo | Cross-repo |
133
94
  | ---------------------------------------------------------- | --------- | ----------------------------- |
134
95
  | LLM review (Agents 1-6 + verify + iterative reverse audit) | ✅ | ✅ |
135
96
  | Agent 7: Build & test | ✅ | ❌ (no local codebase) |
136
- | Deterministic analysis (linter/typecheck) | ✅ | ❌ |
137
97
  | Cross-file impact analysis | ✅ | ❌ |
138
- | Autofix | ✅ | ❌ |
139
98
  | PR inline comments | ✅ | ✅ (if you have write access) |
140
99
  | Incremental review cache | ✅ | ❌ |
141
100
 
@@ -158,7 +117,7 @@ Or, after running `/review 123`, type `post comments` to publish findings withou
158
117
 
159
118
  **What stays terminal-only:**
160
119
 
161
- - Nice to have findings (including linter warnings)
120
+ - Nice to have findings
162
121
  - Low-confidence findings
163
122
 
164
123
  **Self-authored PRs:** GitHub does not allow you to submit `APPROVE` or `REQUEST_CHANGES` reviews on your own pull request — both fail with HTTP 422. When `/review` detects that the PR author matches the current authenticated user, it automatically downgrades the API event to `COMMENT` regardless of verdict, so the submission still succeeds. The terminal still shows the honest verdict ("Approve" / "Request changes" / "Comment") — only the GitHub-side review event is neutralized. The actual findings still appear as inline comments on specific lines, so substantive feedback is unchanged.
@@ -178,7 +137,7 @@ After the review, context-aware tips appear as ghost text. Press Tab to accept:
178
137
  | PR review, zero findings | `post comments` | Approves the PR on GitHub (LGTM) |
179
138
  | Local review, all clear | `commit` | Commits your changes |
180
139
 
181
- Note: `fix these issues` is only available for local reviews. For PR reviews, use Autofix (Step 8) — the worktree is cleaned up after the review, so post-review interactive fixing is not possible.
140
+ Note: `fix these issues` is only available for local reviews. For PR reviews the worktree is cleaned up after the review, so post-review interactive fixing is not possible — use `--comment` or `post comments` to publish findings instead.
182
141
 
183
142
  ## Project Review Rules
184
143
 
@@ -241,7 +200,7 @@ For same-repo reviews, results are saved as a Markdown file in your project's `.
241
200
  .qwen/reviews/2026-04-06-150510-local.md
242
201
  ```
243
202
 
244
- Reports include: timestamp, diff stats, deterministic analysis results, all findings with verification status, and the verdict.
203
+ Reports include: timestamp, diff stats, build/test results, all findings with verification status, and the verdict.
245
204
 
246
205
  ## Cross-file Impact Analysis
247
206
 
@@ -260,10 +219,9 @@ The review pipeline uses a bounded number of LLM calls regardless of how many fi
260
219
 
261
220
  | Stage | LLM calls | Notes |
262
221
  | -------------------------------- | ----------------- | --------------------------------------------------- |
263
- | Deterministic analysis (Step 3) | 0 | Shell commands only |
264
- | Review agents (Step 4) | 9 (or 8) | Run in parallel; Agent 7 skipped in cross-repo mode |
265
- | Batch verification (Step 5) | 1 | Single agent verifies all findings at once |
266
- | Iterative reverse audit (Step 6) | 1-3 | Loops until "No issues found" or 3-round cap |
222
+ | Review agents (Step 3) | 9 (or 8) | Run in parallel; Agent 7 skipped in cross-repo mode |
223
+ | Batch verification (Step 4) | 1 | Single agent verifies all findings at once |
224
+ | Iterative reverse audit (Step 5) | 1-3 | Loops until "No issues found" or 3-round cap |
267
225
  | **Total** | **11-13 (10-12)** | Same-repo: 11-13; cross-repo: 10-12 (no Agent 7) |
268
226
 
269
227
  Most PRs converge to the lower end of the range (1 reverse audit round); the cap prevents runaway cost on pathological cases.
@@ -273,8 +231,7 @@ Most PRs converge to the lower end of the range (1 reverse audit round); the cap
273
231
  The review intentionally excludes:
274
232
 
275
233
  - Pre-existing issues in unchanged code (focus on the diff only)
276
- - Style/formatting/naming that matches your codebase conventions
277
- - Issues a linter or type checker would catch (handled by deterministic analysis)
234
+ - Style or formatting a formatter would auto-normalize, or naming matching your codebase conventions — but NOT substantive issues a linter or type checker would flag (unused variables, unreachable code, type errors), which are in scope
278
235
  - Subjective "consider doing X" suggestions without a real problem
279
236
  - Minor refactoring that doesn't fix a bug or risk
280
237
  - Missing documentation unless the logic is genuinely confusing
@@ -285,7 +242,6 @@ The review intentionally excludes:
285
242
  > **Silence is better than noise.** Every comment should be worth the reader's time.
286
243
 
287
244
  - If unsure whether something is a problem → don't report it
288
- - Linter/typecheck issues are handled by tools, not LLM guesses
289
245
  - Same pattern across N files → aggregated into one finding
290
246
  - PR comments are high-confidence only
291
- - Style/formatting issues matching codebase conventions are excluded
247
+ - Cosmetic style/formatting matching codebase conventions is excluded
@@ -76,40 +76,42 @@ Commands specifically for controlling interface and output language.
76
76
 
77
77
  Commands for managing AI tools and models.
78
78
 
79
- | Command | Description | Usage Examples |
80
- | ---------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
81
- | `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc`, `/mcp nodesc`, `/mcp schema` |
82
- | `/import-config` | Import MCP servers from Claude configs | `/import-config all`, `/import-config claude-code`, `/import-config claude-desktop --scope user\|project` |
83
- | `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
84
- | `/skills` | List and run available skills | `/skills`, `/skills <name>` |
85
- | `/plan` | Switch to plan mode or exit plan mode | `/plan`, `/plan <task>`, `/plan exit` |
86
- | `/approval-mode` | Change the tool-approval mode (current session only) | `/approval-mode`, `/approval-mode auto-edit` |
87
- | → `plan` | Analysis only, no execution (secure review) | `/approval-mode plan` |
88
- | → `default` | Require approval for edits (daily use) | `/approval-mode default` |
89
- | → `auto-edit` | Auto-approve edits (trusted environment) | `/approval-mode auto-edit` |
90
- | → `auto` | Classifier-evaluated approval (autonomous) | `/approval-mode auto` |
91
- | → `yolo` | Auto-approve everything (quick prototyping) | `/approval-mode yolo` |
92
- | `/model` | Switch model used in current session | `/model`, `/model <model-id>` (switch immediately) |
93
- | `/model --fast` | Set a lighter model for prompt suggestions | `/model --fast qwen3-coder-flash` |
94
- | `/model --voice` | Set the model used for voice transcription | `/model --voice <model-id>` |
95
- | `/extensions` | Manage extensions | `/extensions list`, `/extensions manage` |
96
- | `list` | List installed extensions | `/extensions list` |
97
- | `manage` | Manage installed extensions (interactive) | `/extensions manage` |
98
- | → `explore` | Open extensions page in browser | `/extensions explore <Gemini\|ClaudeCode>` |
99
- | → `install` | Install an extension from a git repo or path | `/extensions install <repo-or-path>` |
100
- | `/memory` | Open the Memory Manager dialog | `/memory` |
101
- | `/remember` | Save a durable memory | `/remember Prefer terse responses` |
102
- | `/forget` | Remove matching entries from auto-memory | `/forget <query>` |
103
- | `/dream` | Manually run auto-memory consolidation | `/dream` |
104
- | `/hooks` | Manage Qwen Code hooks | `/hooks`, `/hooks list` |
105
- | `/permissions` | Manage permission rules | `/permissions` |
106
- | `/agents` | Manage subagents | `/agents manage`, `/agents create` |
107
- | `/arena` | Manage Arena sessions | `/arena start`, `/arena stop`, `/arena status`, `/arena select` (alias `choose`) |
108
- | `/goal` | Set a goal — keep working until condition met | `/goal <condition>`, `/goal clear` |
109
- | `/tasks` | List background tasks | `/tasks` |
110
- | `/workflows` | Inspect workflow runs | `/workflows`, `/workflows <runId>` |
111
- | `/lsp` | Show LSP server status | `/lsp` |
112
- | `/trust` | Manage folder trust settings | `/trust` |
79
+ | Command | Description | Usage Examples |
80
+ | ----------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
81
+ | `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc`, `/mcp nodesc`, `/mcp schema` |
82
+ | `/import-config` | Import MCP servers from Claude configs | `/import-config all`, `/import-config claude-code`, `/import-config claude-desktop --scope user\|project` |
83
+ | `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
84
+ | `/skills` | List and run available skills | `/skills`, `/skills <name>` |
85
+ | `/plan` | Switch to plan mode or exit plan mode | `/plan`, `/plan <task>`, `/plan exit` |
86
+ | `/approval-mode` | Change the tool-approval mode (current session only) | `/approval-mode`, `/approval-mode auto-edit` |
87
+ | → `plan` | Analysis only, no execution (secure review) | `/approval-mode plan` |
88
+ | → `default` | Require approval for edits (daily use) | `/approval-mode default` |
89
+ | → `auto-edit` | Auto-approve edits (trusted environment) | `/approval-mode auto-edit` |
90
+ | → `auto` | Classifier-evaluated approval (autonomous) | `/approval-mode auto` |
91
+ | → `yolo` | Auto-approve everything (quick prototyping) | `/approval-mode yolo` |
92
+ | `/model` | Switch model used in current session | `/model`, `/model <model-id>` (switch immediately) |
93
+ | `/model --fast` | Set a lighter model for prompt suggestions | `/model --fast qwen3-coder-flash` |
94
+ | `/model --voice` | Set the model used for voice transcription | `/model --voice <model-id>` |
95
+ | `/model --vision` | Set the vision-bridge model used to transcribe images for a text-only main model | `/model --vision <model-id>` |
96
+ | `/effort` | Set reasoning effort for thinking-capable models | `/effort` (opens picker), `/effort high` (low/medium/high/xhigh/max; mapped & clamped per provider) |
97
+ | `/extensions` | Manage extensions | `/extensions list`, `/extensions manage` |
98
+ | → `list` | List installed extensions | `/extensions list` |
99
+ | → `manage` | Manage installed extensions (interactive) | `/extensions manage` |
100
+ | `explore` | Open extensions page in browser | `/extensions explore <Gemini\|ClaudeCode>` |
101
+ | `install` | Install an extension from a git repo or path | `/extensions install <repo-or-path>` |
102
+ | `/memory` | Open the Memory Manager dialog | `/memory` |
103
+ | `/remember` | Save a durable memory | `/remember Prefer terse responses` |
104
+ | `/forget` | Remove matching entries from auto-memory | `/forget <query>` |
105
+ | `/dream` | Manually run auto-memory consolidation | `/dream` |
106
+ | `/hooks` | Manage Qwen Code hooks | `/hooks`, `/hooks list` |
107
+ | `/permissions` | Manage permission rules | `/permissions` |
108
+ | `/agents` | Manage subagents | `/agents manage`, `/agents create` |
109
+ | `/arena` | Manage Arena sessions | `/arena start`, `/arena stop`, `/arena status`, `/arena select` (alias `choose`) |
110
+ | `/goal` | Set a goal — keep working until condition met | `/goal <condition>`, `/goal clear` |
111
+ | `/tasks` | List background tasks | `/tasks` |
112
+ | `/workflows` | Inspect workflow runs | `/workflows`, `/workflows <runId>` |
113
+ | `/lsp` | Show LSP server status | `/lsp` |
114
+ | `/trust` | Manage folder trust settings | `/trust` |
113
115
 
114
116
  > [!warning]
115
117
  >
@@ -127,12 +129,12 @@ Commands for managing AI tools and models.
127
129
 
128
130
  These commands invoke bundled skills that provide specialized workflows.
129
131
 
130
- | Command | Description | Usage Examples |
131
- | ------------ | ------------------------------------------------------------------- | ------------------------------------------------- |
132
- | `/review` | Review code changes with 5 parallel agents + deterministic analysis | `/review`, `/review 123`, `/review 123 --comment` |
133
- | `/loop` | Run a prompt on a recurring schedule | `/loop 5m check the build` |
134
- | `/simplify` | Review recent changes and apply safe cleanup edits directly | `/simplify`, `/simplify focus on duplication` |
135
- | `/qc-helper` | Answer questions about Qwen Code usage and configuration | `/qc-helper how do I configure MCP?` |
132
+ | Command | Description | Usage Examples |
133
+ | ------------ | ----------------------------------------------------------- | ------------------------------------------------- |
134
+ | `/review` | Review code changes with 9 parallel review agents | `/review`, `/review 123`, `/review 123 --comment` |
135
+ | `/loop` | Run a prompt on a recurring schedule | `/loop 5m check the build` |
136
+ | `/simplify` | Review recent changes and apply safe cleanup edits directly | `/simplify`, `/simplify focus on duplication` |
137
+ | `/qc-helper` | Answer questions about Qwen Code usage and configuration | `/qc-helper how do I configure MCP?` |
136
138
 
137
139
  See [Code Review](./code-review.md) for full `/review` documentation.
138
140
 
@@ -223,24 +223,25 @@ qwen -p "Write code" --output-format stream-json --include-partial-messages | jq
223
223
 
224
224
  Key command-line options for headless usage:
225
225
 
226
- | Option | Description | Example |
227
- | ---------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
228
- | `--prompt`, `-p` | Run in headless mode | `qwen -p "query"` |
229
- | `--output-format`, `-o` | Specify output format (text, json, stream-json) | `qwen -p "query" --output-format json` |
230
- | `--input-format` | Specify input format (text, stream-json) | `qwen --input-format text --output-format stream-json` |
231
- | `--include-partial-messages` | Include partial messages in stream-json output | `qwen -p "query" --output-format stream-json --include-partial-messages` |
232
- | `--system-prompt` | Override the main session system prompt for this run | `qwen -p "query" --system-prompt "You are a terse reviewer."` |
233
- | `--append-system-prompt` | Append extra instructions to the main session system prompt for this run | `qwen -p "query" --append-system-prompt "Focus on concrete findings."` |
234
- | `--debug`, `-d` | Enable debug mode | `qwen -p "query" --debug` |
235
- | `--all-files`, `-a` | Include all files in context | `qwen -p "query" --all-files` |
236
- | `--include-directories` | Include additional directories | `qwen -p "query" --include-directories src,docs` |
237
- | `--yolo`, `-y` | Auto-approve all actions | `qwen -p "query" --yolo` |
238
- | `--approval-mode` | Set approval mode | `qwen -p "query" --approval-mode auto_edit` |
239
- | `--continue` | Resume the most recent session for this project | `qwen --continue -p "Pick up where we left off"` |
240
- | `--resume [sessionId]` | Resume a specific session (or choose interactively) | `qwen --resume 123e... -p "Finish the refactor"` |
241
- | `--max-session-turns` | Cap the number of user/model/tool turns in the run | `qwen -p "..." --max-session-turns 30` |
242
- | `--max-wall-time` | Wall-clock budget; accepts `90` (s), `30s`, `5m`, `1h`, `1.5h` | `qwen -p "..." --max-wall-time 10m` |
243
- | `--max-tool-calls` | Cumulative tool-call budget for the run | `qwen -p "..." --max-tool-calls 50` |
226
+ | Option | Description | Example |
227
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
228
+ | `--prompt`, `-p` | Run in headless mode | `qwen -p "query"` |
229
+ | `--output-format`, `-o` | Specify output format (text, json, stream-json) | `qwen -p "query" --output-format json` |
230
+ | `--input-format` | Specify input format (text, stream-json) | `qwen --input-format text --output-format stream-json` |
231
+ | `--include-partial-messages` | Include partial messages in stream-json output | `qwen -p "query" --output-format stream-json --include-partial-messages` |
232
+ | `--system-prompt` | Override the main session system prompt for this run | `qwen -p "query" --system-prompt "You are a terse reviewer."` |
233
+ | `--append-system-prompt` | Append extra instructions to the main session system prompt for this run | `qwen -p "query" --append-system-prompt "Focus on concrete findings."` |
234
+ | `--debug`, `-d` | Enable debug mode | `qwen -p "query" --debug` |
235
+ | `--safe-mode` | Disable all customizations — context files, hooks, extensions, skills, MCP servers, custom subagents (only built-in subagents load), permission rules, settings-sourced approval mode overrides, memory features, and sandbox settings — to isolate problems; the CLI flags `--yolo` and `--approval-mode` still take effect. See [Troubleshooting](../support/troubleshooting). Also settable via `QWEN_CODE_SAFE_MODE=true`. | `qwen -p "query" --safe-mode` |
236
+ | `--all-files`, `-a` | Include all files in context | `qwen -p "query" --all-files` |
237
+ | `--include-directories` | Include additional directories | `qwen -p "query" --include-directories src,docs` |
238
+ | `--yolo`, `-y` | Auto-approve all actions | `qwen -p "query" --yolo` |
239
+ | `--approval-mode` | Set approval mode | `qwen -p "query" --approval-mode auto_edit` |
240
+ | `--continue` | Resume the most recent session for this project | `qwen --continue -p "Pick up where we left off"` |
241
+ | `--resume [sessionId]` | Resume a specific session (or choose interactively) | `qwen --resume 123e... -p "Finish the refactor"` |
242
+ | `--max-session-turns` | Cap the number of user/model/tool turns in the run | `qwen -p "..." --max-session-turns 30` |
243
+ | `--max-wall-time` | Wall-clock budget; accepts `90` (s), `30s`, `5m`, `1h`, `1.5h` | `qwen -p "..." --max-wall-time 10m` |
244
+ | `--max-tool-calls` | Cumulative tool-call budget for the run | `qwen -p "..." --max-tool-calls 50` |
244
245
 
245
246
  For complete details on all available configuration options, settings files, and environment variables, see the [Configuration Guide](../configuration/settings).
246
247
 
@@ -566,10 +566,15 @@ Hook output supports three categories of fields:
566
566
  ```json
567
567
  {
568
568
  "stop_hook_active": "boolean indicating if stop hook is active",
569
- "last_assistant_message": "the last message from the assistant"
569
+ "last_assistant_message": "the last message from the assistant",
570
+ "context_usage": "ratio of context window used (may exceed 1 when tokens exceed window; optional)",
571
+ "context_limit": "context window size in tokens (optional)",
572
+ "input_tokens": "prompt token count (may include output tokens depending on provider; optional)"
570
573
  }
571
574
  ```
572
575
 
576
+ The `context_usage`, `context_limit`, and `input_tokens` fields allow hook scripts to observe context usage and implement custom compact strategies — for example, a script that prints a reminder to run `/compact` when usage exceeds a custom threshold.
577
+
573
578
  **Output Options**:
574
579
 
575
580
  - `decision`: "allow", "deny", "block", or "ask"
@@ -381,12 +381,14 @@ The `mcp` object in your `settings.json` defines global rules for all MCP server
381
381
  - `mcp.allowed`: allow-list of MCP server names (keys in `mcpServers`)
382
382
  - `mcp.excluded`: deny-list of MCP server names
383
383
 
384
+ Both lists support glob patterns: `*` matches any sequence of characters and `?` matches a single character (for example, `"*puppeteer*"` matches every server whose name contains `puppeteer`). Entries without glob characters are matched exactly. When a server matches both lists, `mcp.excluded` takes precedence.
385
+
384
386
  Example:
385
387
 
386
388
  ```json
387
389
  {
388
390
  "mcp": {
389
- "allowed": ["my-trusted-server"],
391
+ "allowed": ["my-trusted-server", "*-internal"],
390
392
  "excluded": ["experimental-server"]
391
393
  }
392
394
  }
@@ -99,7 +99,7 @@ Everything saved is plain markdown — you can open, edit, or delete any file at
99
99
 
100
100
  Qwen periodically goes through its saved memories to remove duplicates and clean up outdated entries. This runs automatically in the background once a day after enough sessions have accumulated. You can trigger it manually with `/dream` if you want it to run now.
101
101
 
102
- While cleanup is running, **✦ dreaming** appears in the corner of the screen. Your session continues normally.
102
+ Your session continues normally while cleanup runs in the background.
103
103
 
104
104
  ### Turning it on or off
105
105
 
@@ -40,6 +40,16 @@ The scheduled prompt can itself be a command or skill invocation. This is useful
40
40
 
41
41
  Each time the job fires, Qwen Code runs `/review-pr 1234` as if you had typed it.
42
42
 
43
+ ### Autonomous mode
44
+
45
+ Running `/loop` with **no prompt** starts an autonomous loop instead of repeating a fixed prompt. Qwen Code acts as a steward of the work already established in the conversation — it keeps your work moving while you're away:
46
+
47
+ ```text
48
+ /loop
49
+ ```
50
+
51
+ A bare `/loop` (no prompt, no interval) runs a self-paced autonomous loop; `/loop <interval>` with no prompt runs the same autonomous loop on a fixed cadence (e.g. `/loop 10m`). On each fire it advances what the conversation already set up — finishing things you started, maintaining an in-progress PR (addressing review threads, fixing failing CI, resolving conflicts), and honoring follow-up commitments. It only acts on work the transcript already established: it never invents new work or makes irreversible changes (push, delete, send) without clear authorization, and it stops once everything is quiet.
52
+
43
53
  ### Manage loops
44
54
 
45
55
  `/loop` also supports two subcommands for managing existing jobs:
@@ -10,18 +10,18 @@ The status line shows session-aware information — model name, token usage, git
10
10
  ```
11
11
  Single-line status (default approval mode — 1 row):
12
12
  ┌─────────────────────────────────────────────────────────────────┐
13
- │ user@host ~/project (main) ctx:34% 🔒 docker | Debug | 67% │ ← status line
13
+ │ user@host ~/project (main) ctx:34% docker | Debug | 67% │ ← status line
14
14
  └─────────────────────────────────────────────────────────────────┘
15
15
 
16
16
  Multi-line status (up to 2 lines — 2 rows):
17
17
  ┌─────────────────────────────────────────────────────────────────┐
18
- │ user@host ~/project (main) ctx:34% 🔒 docker | Debug | 67% │ ← status line 1
18
+ │ user@host ~/project (main) ctx:34% docker | Debug | 67% │ ← status line 1
19
19
  │ ████████░░░░░░░░░░ 34% context │ ← status line 2
20
20
  └─────────────────────────────────────────────────────────────────┘
21
21
 
22
22
  Multi-line status + non-default mode (3 rows max):
23
23
  ┌─────────────────────────────────────────────────────────────────┐
24
- │ user@host ~/project (main) ctx:34% 🔒 docker | Debug | 67% │ ← status line 1
24
+ │ user@host ~/project (main) ctx:34% docker | Debug | 67% │ ← status line 1
25
25
  │ ████████░░░░░░░░░░ 34% context │ ← status line 2
26
26
  │ auto-accept edits (shift + tab to cycle) │ ← mode indicator
27
27
  └─────────────────────────────────────────────────────────────────┘
@@ -113,23 +113,23 @@ If you encounter issues with IDE integration, here are some common error message
113
113
 
114
114
  ### Connection Errors
115
115
 
116
- - **Message:** `🔴 Disconnected: Failed to connect to IDE companion extension for [IDE Name]. Please ensure the extension is running and try restarting your terminal. To install the extension, run /ide install.`
116
+ - **Message:** `● Disconnected: Failed to connect to IDE companion extension for [IDE Name]. Please ensure the extension is running and try restarting your terminal. To install the extension, run /ide install.`
117
117
  - **Cause:** Qwen Code could not find the necessary environment variables (`QWEN_CODE_IDE_WORKSPACE_PATH` or `QWEN_CODE_IDE_SERVER_PORT`) to connect to the IDE. This usually means the IDE companion extension is not running or did not initialize correctly.
118
118
  - **Solution:**
119
119
  1. Make sure you have installed the **Qwen Code Companion** extension in your IDE and that it is enabled.
120
120
  2. Open a new terminal window in your IDE to ensure it picks up the correct environment.
121
121
 
122
- - **Message:** `🔴 Disconnected: IDE connection error. The connection was lost unexpectedly. Please try reconnecting by running /ide enable`
122
+ - **Message:** `● Disconnected: IDE connection error. The connection was lost unexpectedly. Please try reconnecting by running /ide enable`
123
123
  - **Cause:** The connection to the IDE companion was lost.
124
124
  - **Solution:** Run `/ide enable` to try and reconnect. If the issue continues, open a new terminal window or restart your IDE.
125
125
 
126
126
  ### Configuration Errors
127
127
 
128
- - **Message:** `🔴 Disconnected: Directory mismatch. Qwen Code is running in a different location than the open workspace in [IDE Name]. Please run the CLI from the same directory as your project's root folder.`
128
+ - **Message:** `● Disconnected: Directory mismatch. Qwen Code is running in a different location than the open workspace in [IDE Name]. Please run the CLI from the same directory as your project's root folder.`
129
129
  - **Cause:** The CLI's current working directory is outside the folder or workspace you have open in your IDE.
130
130
  - **Solution:** `cd` into the same directory that is open in your IDE and restart the CLI.
131
131
 
132
- - **Message:** `🔴 Disconnected: To use this feature, please open a workspace folder in [IDE Name] and try again.`
132
+ - **Message:** `● Disconnected: To use this feature, please open a workspace folder in [IDE Name] and try again.`
133
133
  - **Cause:** You have no workspace open in your IDE.
134
134
  - **Solution:** Open a workspace in your IDE and restart the CLI.
135
135
 
@@ -15,6 +15,7 @@ Run Qwen Code as a local HTTP daemon so multiple clients (IDE plugins, web UIs,
15
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).
16
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.
17
17
  - **One daemon, one workspace** — each `qwen serve` process binds to exactly one workspace at boot (per [#3803](https://github.com/QwenLM/qwen-code/issues/3803) §02). Multi-workspace deployments run one daemon per workspace on separate ports (or behind an orchestrator).
18
+ - **Experimental daemon-managed channels** — `qwen serve --channel <name>` starts a channel worker owned by the daemon lifecycle. The worker is a separate process, connects back to the daemon through the SDK, and reports its state in `GET /daemon/status`.
18
19
  - **Remote runtime control** ([#4175](https://github.com/QwenLM/qwen-code/issues/4175) PR 17) — change a session's approval mode (`POST /session/:id/approval-mode`), toggle a tool per workspace (`POST /workspace/tools/:name/enable`), scaffold an empty `QWEN.md` (`POST /workspace/init`, mechanical only — does NOT call the model; for AI-fill, follow up with `POST /session/:id/prompt`), restart a single MCP server with a budget pre-check (`POST /workspace/mcp/:server/restart`), or add/remove MCP servers at runtime without a daemon restart (`POST /workspace/mcp/servers`, `DELETE /workspace/mcp/servers/:name`). All strict-gated — configure `--token` first.
19
20
  - **Session recap** ([#4175](https://github.com/QwenLM/qwen-code/issues/4175) follow-up) — fetch a one-sentence "where did I leave off" summary of an active session (`POST /session/:id/recap`). Wraps core's `generateSessionRecap` as a side-query against the fast model; pollutes neither the main chat history nor the SSE stream. Non-strict gate (same posture as `/prompt`); SDK helper `client.recapSession(sessionId)`.
20
21
  - **Known limit — token-cost amplification:** the route is a pure-cost endpoint (each call is an LLM side-query, no state benefit) and the daemon has no per-route rate limit in v1. On a no-token loopback default a buggy or malicious local client can spam it to burn tokens. Configure `--token` (and optionally `--require-auth`) on shared dev hosts before exposing the daemon.
@@ -82,6 +83,23 @@ curl http://127.0.0.1:4170/daemon/status
82
83
  The `workspaceCwd` field surfaces the bound workspace so clients can pre-flight check + omit `cwd` on `POST /session`.
83
84
  The `limits.maxPendingPromptsPerSession` field advertises the active per-session prompt admission cap; `null` means the cap is disabled.
84
85
 
86
+ ### Run channels from the daemon
87
+
88
+ ```bash
89
+ # Start one configured channel under qwen serve
90
+ qwen serve --channel telegram
91
+
92
+ # Start several configured channels under one daemon-owned worker
93
+ qwen serve --channel telegram --channel feishu
94
+
95
+ # Start all configured channels
96
+ qwen serve --channel all
97
+ ```
98
+
99
+ This mode is experimental and daemon-managed. It does not replace the standalone `qwen channel start` command: standalone channels still use the ACP-backed `AcpBridge` service. With `qwen serve --channel`, the daemon launches one channel worker process after the HTTP runtime is ready. If the worker exits after startup, the daemon keeps running and `GET /daemon/status` reports a `channel_worker_exited` warning. Automatic worker restart is deferred.
100
+
101
+ The daemon is bound to one workspace, so every selected channel's `cwd` must resolve to the daemon workspace. `--channel all` cannot be combined with named channels.
102
+
85
103
  The daemon also exposes read-only runtime snapshots for client UIs and
86
104
  operators: `GET /daemon/status`, `GET /workspace/mcp`,
87
105
  `GET /workspace/skills`, `GET /workspace/providers`, `GET /workspace/env`,
@@ -242,6 +260,38 @@ curl -H "Authorization: Bearer $QWEN_SERVER_TOKEN" http://your-host:4170/capabil
242
260
 
243
261
  The token comparison is constant-time (SHA-256 + `crypto.timingSafeEqual`); 401 responses are uniform across "missing header", "wrong scheme", and "wrong token" so a side-channel can't distinguish.
244
262
 
263
+ ## HTTPS / TLS (for mobile / cross-device access)
264
+
265
+ By default the daemon serves plain HTTP. That's fine on `localhost`, but a phone or tablet hitting a LAN IP (`https://192.168.x.x:4170`) is **not** a [secure context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) over `http://` — so browsers block `getUserMedia` (voice input), WebRTC, and other secure-context-only APIs. Pass `--tls-cert` + `--tls-key` to serve the Web Shell over HTTPS and unlock them:
266
+
267
+ ```bash
268
+ # 1. Install a local CA and trust it (one-time). The mobile device must
269
+ # also trust this CA — mkcert prints where the root cert lives.
270
+ mkcert -install
271
+
272
+ # 2. Generate a cert for your machine's LAN IP. Add localhost / 127.0.0.1 to
273
+ # the SANs too: with `--open`, the daemon rewrites the browser URL to
274
+ # 127.0.0.1, so a cert scoped to only the LAN IP would be rejected with
275
+ # ERR_CERT_COMMON_NAME_INVALID. (mkcert names the output after all hosts.)
276
+ mkcert 192.168.1.100 localhost 127.0.0.1
277
+
278
+ # 3. Start the daemon over HTTPS. Non-loopback binds still require a token,
279
+ # and the browser Origin must be allowed through CORS.
280
+ qwen serve \
281
+ --hostname 0.0.0.0 \
282
+ --token "$(openssl rand -hex 32)" \
283
+ --tls-cert "./192.168.1.100+2.pem" \
284
+ --tls-key "./192.168.1.100+2-key.pem" \
285
+ --allow-origin "https://192.168.1.100:4170"
286
+ # → qwen serve listening on https://0.0.0.0:4170
287
+ ```
288
+
289
+ Notes:
290
+
291
+ - **Both flags or neither** — boot fails if only one is given (a cert with no key can't start an HTTPS listener).
292
+ - **TLS is orthogonal to auth** — HTTPS encrypts the transport; the bearer token still gates every API route. Non-loopback binds require a token with or without TLS.
293
+ - **Scope is TLS termination only** — no auto-generation, no ACME / Let's Encrypt. This is a LAN / dev convenience; for internet-facing deployments terminate TLS at a reverse proxy (see the threat model below).
294
+
245
295
  ## CLI flags
246
296
 
247
297
  | Flag | Default | Purpose |
@@ -250,9 +300,12 @@ The token comparison is constant-time (SHA-256 + `crypto.timingSafeEqual`); 401
250
300
  | `--hostname <addr>` | `127.0.0.1` | Bind interface. Anything beyond loopback requires a token. |
251
301
  | `--token <str>` | — | Bearer token. Falls back to `QWEN_SERVER_TOKEN` env var (with leading/trailing whitespace stripped — handy for `$(cat token.txt)`). |
252
302
  | `--require-auth` | `false` | Refuse to start without a bearer token, even on loopback. Hardens the `127.0.0.1` developer default for shared dev hosts / CI runners / multi-tenant workstations where any local user can hit the listener. Boots only with `--token` or `QWEN_SERVER_TOKEN` set; gates `/health` behind the bearer too. |
303
+ | `--tls-cert <path>` | — | Path to a PEM certificate file. Serve over **HTTPS** instead of HTTP. Must be paired with `--tls-key` (boot fails if only one is given). Unlocks secure-context browser APIs — voice input (`getUserMedia`), WebRTC — over a LAN IP, which browsers otherwise block on plain `http://`. TLS termination only; no auto-generation / ACME. See [HTTPS / TLS](#https--tls-for-mobile--cross-device-access) below. |
304
+ | `--tls-key <path>` | — | Path to a PEM private key file. Must be paired with `--tls-cert`. |
253
305
  | `--max-sessions <n>` | `20` | Cap on concurrent live sessions. New `POST /session` requests that would spawn a fresh child return `503` (with `Retry-After: 5`) when the cap is hit; attaches to existing sessions are NOT counted. Set to `0` to disable. Sized for single-user / small-team usage; raise it if your deployment has the RAM/FD headroom (~30–50 MB per session). |
254
306
  | `--max-pending-prompts-per-session <n>` | `5` | Per-session cap on prompts accepted by `POST /session/:id/prompt` but not yet settled, including queued prompts and the active prompt. The bridge rejects overflow synchronously with `503`, `Retry-After: 5`, and `code: "prompt_queue_full"` before returning a `promptId`. Set to `0` to disable. `branchSession` serializes on the same FIFO but does not count against this prompt cap. |
255
307
  | `--workspace <path>` | `process.cwd()` | Absolute workspace path this daemon binds to (per [#3803](https://github.com/QwenLM/qwen-code/issues/3803) §02 — 1 daemon = 1 workspace). `POST /session` requests with a mismatched `cwd` return `400 workspace_mismatch`. For multi-workspace deployments, run one `qwen serve` per workspace on separate ports. |
308
+ | `--channel <name\|all>` | — | Experimental daemon-managed channel worker. Repeat the flag to select multiple configured channels, or pass `all` to start every configured channel. `all` cannot be combined with named channels. Selected channel `cwd` values must resolve to the daemon workspace. The worker is owned by `qwen serve`; stop the daemon to stop serve-managed channels. |
256
309
  | `--max-connections <n>` | `256` | Listener-level TCP connection cap (`server.maxConnections`). Bounds raw socket count irrespective of session count — slow / phantom SSE clients get rejected at accept time once full. Raise alongside `--max-sessions` if your deployment expects many SSE subscribers per session. |
257
310
  | `--event-ring-size <n>` | `8000` | Per-session SSE replay ring depth (#3803 §02 target). Sets the backlog available to `GET /session/:id/events` with `Last-Event-ID: N`. Larger = more reconnect headroom at the cost of a few hundred KB extra RAM per session. SDK clients can additionally request a larger per-subscriber backlog cap on a specific subscription via `?maxQueued=N` (range `[16, 2048]`, default 256). Daemons also emit a non-terminal `slow_client_warning` SSE frame at 75% queue fill so clients can drain / reconnect before getting evicted. Pre-flight `caps.features.slow_client_warning`. |
258
311
  | `--mcp-client-budget <n>` | — | Positive integer cap on live MCP clients **per ACP session** (issue [#4175](https://github.com/QwenLM/qwen-code/issues/4175) PR 14 v1; PR 23 graduates this to per-workspace via the shared MCP pool). Combine with `--mcp-budget-mode`. When unset, no accounting-driven enforcement (but `GET /workspace/mcp` still reports `clientCount`). Distinct from claude-code's `MCP_SERVER_CONNECTION_BATCH_SIZE` which gates startup concurrency, not the total client count. Pre-flight `caps.features.mcp_guardrails`. |