@qwen-code/qwen-code 0.19.11 → 0.19.12-nightly.20260719.86ad532de

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 (319) hide show
  1. package/bundled/batch/SKILL.md +6 -0
  2. package/bundled/qc-helper/docs/configuration/model-providers.md +11 -0
  3. package/bundled/qc-helper/docs/configuration/settings.md +11 -10
  4. package/bundled/qc-helper/docs/features/channels/overview.md +70 -13
  5. package/bundled/qc-helper/docs/features/sub-agents.md +8 -8
  6. package/bundled/qc-helper/docs/features/worktree.md +2 -2
  7. package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +42 -7
  8. package/bundled/qc-helper/docs/qwen-serve.md +144 -45
  9. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  10. package/bundled/review/DESIGN.md +2 -2
  11. package/bundled/review/SKILL.md +66 -51
  12. package/bundled/simplify/SKILL.md +1 -1
  13. package/chunks/{MaxSizedBox-L6TGYDM3.js → MaxSizedBox-VN34SVGS.js} +34 -32
  14. package/chunks/{StandaloneSessionPicker-AKEQHU5P.js → StandaloneSessionPicker-77OEIQM5.js} +54 -50
  15. package/chunks/acp-startup-profiler-N3RHHXJ3.js +25 -0
  16. package/chunks/{acpAgent-PTNBGJDN.js → acpAgent-AIROM74S.js} +1859 -506
  17. package/chunks/{agent-AJOMOZPJ.js → agent-6XWITLS6.js} +26 -27
  18. package/chunks/{agent-headless-CYKOMAXS.js → agent-headless-ZVIKPSAB.js} +26 -27
  19. package/chunks/{anthropicContentGenerator-HBRXJSP4.js → anthropicContentGenerator-ZZRGFEES.js} +35 -12
  20. package/chunks/{artifact-tool-MIZLXBLF.js → artifact-tool-PHO5XEGZ.js} +5 -5
  21. package/chunks/{askUserQuestion-XMJVPNWM.js → askUserQuestion-CEPBT47X.js} +2 -47
  22. package/chunks/{bridge-QKISWPCI.js → bridge-FSVN3PIR.js} +31 -32
  23. package/chunks/build-SSCNEHZZ.js +62 -0
  24. package/chunks/{ca-CODEN7TD.js → ca-2SL2BXTK.js} +3 -2
  25. package/chunks/{channel-worker-group-SOUWTFHC.js → channel-worker-group-53CMOPFT.js} +4 -4
  26. package/chunks/{channel-worker-manager-LOVSV3WW.js → channel-worker-manager-UTXILKC2.js} +4 -4
  27. package/chunks/{channel-worker-supervisor-XW6MHJBQ.js → channel-worker-supervisor-ZGO2W2MD.js} +3 -3
  28. package/chunks/{chunk-3DWIFU7L.js → chunk-2HOVDT7W.js} +1 -1
  29. package/chunks/{chunk-V2DXTLUE.js → chunk-2IZNQ5HD.js} +3 -3
  30. package/chunks/{chunk-TL4R5TRK.js → chunk-2YJUZPZT.js} +2 -2
  31. package/chunks/{chunk-L5U3ELZX.js → chunk-335ECZTA.js} +1 -1
  32. package/chunks/{chunk-NJOFRXTM.js → chunk-33IUKQEP.js} +5376 -3961
  33. package/chunks/chunk-33W7L67A.js +45 -0
  34. package/chunks/{chunk-2FO5GFKZ.js → chunk-3DJY4IFO.js} +1 -1
  35. package/chunks/chunk-3EKXWANE.js +624 -0
  36. package/chunks/{chunk-5VWYKIMW.js → chunk-3XBT37RB.js} +2 -2
  37. package/chunks/{chunk-LS56TX3M.js → chunk-3Y47AQYG.js} +1 -1
  38. package/chunks/chunk-4AEXUO5O.js +37 -0
  39. package/chunks/{chunk-Y66VOBRP.js → chunk-4CA4WUMS.js} +2 -2
  40. package/chunks/{chunk-LQIDP6K5.js → chunk-4CHDYDG3.js} +1 -1
  41. package/chunks/{chunk-FNX3LGAK.js → chunk-4ODB7WIB.js} +1 -1
  42. package/chunks/{chunk-TV6K2FB4.js → chunk-4RPARQ5D.js} +2 -2
  43. package/chunks/{chunk-RCEEXIOO.js → chunk-4XCVGEEX.js} +3 -3
  44. package/chunks/chunk-4ZT26FOU.js +442 -0
  45. package/chunks/{chunk-QOTQH4CB.js → chunk-5HRAAUK6.js} +49 -16
  46. package/chunks/{chunk-RP5R7MB6.js → chunk-5QNQJRE3.js} +12 -12
  47. package/chunks/{chunk-HTHUX2T5.js → chunk-5QWWOFGG.js} +0 -1
  48. package/chunks/{chunk-CPFIQVZJ.js → chunk-5SMQKZ4B.js} +1 -1
  49. package/chunks/{chunk-S63Z5V42.js → chunk-63TDC2M5.js} +4 -4
  50. package/chunks/{chunk-THXDQSTA.js → chunk-6A5LI4XI.js} +82 -274
  51. package/chunks/{chunk-BXBDC476.js → chunk-6EXXUHUN.js} +5 -5
  52. package/chunks/{chunk-YGYSMY2R.js → chunk-7DJEFPZD.js} +1785 -1159
  53. package/chunks/{chunk-6WPJRYLZ.js → chunk-7SX6WZNO.js} +3 -3
  54. package/chunks/{chunk-Y3KFTWVX.js → chunk-ADBLDNOY.js} +6 -6
  55. package/chunks/{chunk-6EDDYPI3.js → chunk-ADVNPV4H.js} +4 -4
  56. package/chunks/{chunk-GNBBAQ6J.js → chunk-AITVKIUP.js} +111 -40
  57. package/chunks/{chunk-JGUT3LWZ.js → chunk-ANRANWVE.js} +4 -1
  58. package/chunks/{chunk-MQOVXZAF.js → chunk-AV3CV4JW.js} +529 -61
  59. package/chunks/{chunk-KXYJPRT5.js → chunk-B3KGZCQN.js} +182 -8
  60. package/chunks/{chunk-VFX7EZIR.js → chunk-B3TIKQHF.js} +8 -1
  61. package/chunks/{chunk-3M75MSVA.js → chunk-B7HLFDXN.js} +1 -1
  62. package/chunks/chunk-B7UOE7BN.js +114 -0
  63. package/chunks/{chunk-CITWNIXJ.js → chunk-BOLBNPNY.js} +5 -5
  64. package/chunks/{chunk-CAHY5ABC.js → chunk-CDUQZPSP.js} +1 -1
  65. package/chunks/{chunk-CH2XVB47.js → chunk-CNUJKQVS.js} +3 -3
  66. package/chunks/{chunk-BUAXJVNP.js → chunk-CQQ5OE6W.js} +3 -3
  67. package/chunks/{chunk-4AGTGMCQ.js → chunk-CSYSI5BO.js} +12 -12
  68. package/chunks/{chunk-JD44PNGJ.js → chunk-DC5I3HU4.js} +10 -5
  69. package/chunks/{chunk-BYH2JRK3.js → chunk-DWFTNEQN.js} +5 -5
  70. package/chunks/chunk-EWH3O2GW.js +125 -0
  71. package/chunks/{chunk-FSA7ERJ2.js → chunk-F2RR4HO2.js} +1 -1
  72. package/chunks/{chunk-YFVO2HOR.js → chunk-F5R43JUK.js} +5 -5
  73. package/chunks/{chunk-SQ5BK3GO.js → chunk-GFSWFJAR.js} +1 -1
  74. package/chunks/{chunk-SUARMD4Q.js → chunk-H2XVO6NE.js} +1 -263
  75. package/chunks/{chunk-LXLTBIDP.js → chunk-HCCR43AY.js} +1 -1
  76. package/chunks/chunk-HRYXMOSU.js +1187 -0
  77. package/chunks/{chunk-NVTQZXR7.js → chunk-II2AAZ5X.js} +101 -2209
  78. package/chunks/{chunk-HASK4LMI.js → chunk-IQFLUNWU.js} +13 -226
  79. package/chunks/{chunk-SPJQO2CE.js → chunk-J2MKYJKZ.js} +2 -2
  80. package/chunks/{chunk-TYLOFD2U.js → chunk-JCJPZMJV.js} +1 -1
  81. package/chunks/{chunk-4HUDDSO5.js → chunk-K5Y76NRQ.js} +4 -4
  82. package/chunks/{chunk-A2HWMJVO.js → chunk-LKR7QQ63.js} +3 -3
  83. package/chunks/{chunk-FBU7WRZI.js → chunk-LPHGXXZX.js} +6 -1
  84. package/chunks/{chunk-7NMU22Q3.js → chunk-M7A5T6IW.js} +18 -7
  85. package/chunks/{chunk-N5VIZTND.js → chunk-ML7CX3ZO.js} +1 -1
  86. package/chunks/{chunk-6WGZDD67.js → chunk-NBMIC7DR.js} +2 -2
  87. package/chunks/{chunk-OKAIGAYW.js → chunk-NEAETR5W.js} +3 -3
  88. package/chunks/{chunk-OWT2CAEQ.js → chunk-NEEB7UEN.js} +2354 -1690
  89. package/chunks/{chunk-ZQIYGQCG.js → chunk-NIJEXGV6.js} +739 -201
  90. package/chunks/{chunk-JWICTOXS.js → chunk-NV6UUA6T.js} +2 -2
  91. package/chunks/{chunk-TIOE2OPE.js → chunk-OLMETXLX.js} +2 -2
  92. package/chunks/{chunk-2Z5UX4KI.js → chunk-OSSDHJDU.js} +1 -1
  93. package/chunks/{chunk-YUZI3WAC.js → chunk-OWAK7LMW.js} +7 -0
  94. package/chunks/chunk-P4ASKBGX.js +883 -0
  95. package/chunks/{chunk-FXKOAEXP.js → chunk-PJOJAFFM.js} +16 -16
  96. package/chunks/{chunk-QDJ2R4CM.js → chunk-PO3ZIZX2.js} +3 -3
  97. package/chunks/{chunk-3AYLDB6B.js → chunk-PPT47UUM.js} +1 -1
  98. package/chunks/{chunk-2OG646IN.js → chunk-Q64UTPKU.js} +4 -4
  99. package/chunks/{chunk-6Y6ORE2G.js → chunk-QBYO74L6.js} +1358 -576
  100. package/chunks/{chunk-QYG4BY6Q.js → chunk-QCZKJPGY.js} +1 -1
  101. package/chunks/{chunk-PZL23GTM.js → chunk-QR6U5QPP.js} +8 -0
  102. package/chunks/chunk-QSG4ZFG4.js +257 -0
  103. package/chunks/{chunk-7X7TEQNX.js → chunk-QTERJVPZ.js} +14 -6
  104. package/chunks/{chunk-AVEOWVOM.js → chunk-R3VWUU2E.js} +1 -1
  105. package/chunks/{chunk-DOPUYNXO.js → chunk-R52FL6L4.js} +15 -9
  106. package/chunks/chunk-RS7MT2QG.js +305 -0
  107. package/chunks/{chunk-GLNHPRZT.js → chunk-SA4X4YGT.js} +1 -1
  108. package/chunks/{chunk-ARKANCNX.js → chunk-SGPFJMRP.js} +1 -1
  109. package/chunks/chunk-SV5PQVQE.js +71 -0
  110. package/chunks/chunk-TDKQP3M6.js +201 -0
  111. package/chunks/{chunk-FMNYGWOD.js → chunk-TKYQJAS4.js} +14 -8
  112. package/chunks/{chunk-CF5VJRGC.js → chunk-TUNJICIY.js} +1 -1
  113. package/chunks/{chunk-4LD5APFL.js → chunk-TYQMGACW.js} +1 -0
  114. package/chunks/{chunk-7NFB7LBQ.js → chunk-UE5TZ55T.js} +8 -0
  115. package/chunks/{chunk-F333XEAU.js → chunk-UOA2IHRI.js} +4 -3
  116. package/chunks/{chunk-AU3MFJPL.js → chunk-UWLXRKGK.js} +8 -8
  117. package/chunks/{chunk-VRR65QYW.js → chunk-V4PCIS25.js} +5 -1
  118. package/chunks/chunk-V7RNNPGC.js +44 -0
  119. package/chunks/{chunk-WIEO4CWB.js → chunk-VAJS2E2D.js} +1 -1
  120. package/chunks/{chunk-WMNXXRGL.js → chunk-VFZHDNSC.js} +31 -31
  121. package/chunks/{chunk-574PTLMU.js → chunk-VUN5SFHA.js} +471 -103
  122. package/chunks/{chunk-5Z452MMD.js → chunk-VXDVXAB3.js} +2282 -1306
  123. package/chunks/{chunk-STZQCNN3.js → chunk-W7H223ZZ.js} +1 -1
  124. package/chunks/{chunk-WTNZ6DXB.js → chunk-WEPXQKGP.js} +1 -1
  125. package/chunks/{chunk-4BJVSIS3.js → chunk-WHQNBBWW.js} +2 -2
  126. package/chunks/{chunk-7ZYHLN67.js → chunk-WMOPDZQI.js} +26 -75
  127. package/chunks/{chunk-SY7NEYX4.js → chunk-X2D4YVI7.js} +2 -2
  128. package/chunks/{chunk-4ROQY23C.js → chunk-X4MDRQ7W.js} +7 -7
  129. package/chunks/{chunk-L4Y55KIS.js → chunk-X6YQWCIJ.js} +1 -1
  130. package/chunks/{chunk-Q6TUALBE.js → chunk-XAAEDML2.js} +1 -1
  131. package/chunks/{chunk-KKRTYONM.js → chunk-XSPFQQRE.js} +3 -3
  132. package/chunks/{chunk-K7VD4XLT.js → chunk-XTONJ2BO.js} +1 -1
  133. package/chunks/{chunk-KSZKSE23.js → chunk-Y2ENGUD6.js} +1 -1
  134. package/chunks/{chunk-ZIXOTAPZ.js → chunk-YD2SMXAD.js} +92 -3
  135. package/chunks/{chunk-5CNYZ7TN.js → chunk-YWEW33JY.js} +7 -7
  136. package/chunks/{chunk-T76DGHGG.js → chunk-ZUDXPOWE.js} +5 -5
  137. package/chunks/{chunk-4IJMTYCB.js → chunk-ZZWZL2NJ.js} +818 -29
  138. package/chunks/{computer-use-VZZMJEQ7.js → computer-use-WE6DJ3DU.js} +26 -27
  139. package/chunks/{config-utils-IQQT3GCI.js → config-utils-AHQ6YZ66.js} +3 -3
  140. package/chunks/{contextCommand-PORKIZSY.js → contextCommand-APLGOUNW.js} +30 -32
  141. package/chunks/{create-sub-session-EAB2U5XW.js → create-sub-session-DIJOV6HV.js} +2 -2
  142. package/chunks/{create-sub-session-XVFKHAFW.js → create-sub-session-OTTIX3RM.js} +27 -28
  143. package/chunks/{cron-create-GMVKSXZT.js → cron-create-X462ERYA.js} +4 -4
  144. package/chunks/{cron-delete-VDZKUAVK.js → cron-delete-SL5UJUM3.js} +4 -4
  145. package/chunks/{cron-list-UG7C7RAR.js → cron-list-3MD6SVXI.js} +4 -4
  146. package/chunks/{daemon-IHR6WSPB.js → daemon-RG2MAI6T.js} +240 -76
  147. package/chunks/{daemon-status-provider-ABLBA3UJ.js → daemon-status-provider-G5QZVVTH.js} +35 -36
  148. package/chunks/{de-NOXPCSYN.js → de-I7ZIYXZC.js} +3 -2
  149. package/chunks/{dist-GXJVCOS7.js → dist-2BHAYBKP.js} +2 -1
  150. package/chunks/{dist-VYWUKURL.js → dist-2MIU4UUH.js} +1 -1
  151. package/chunks/{dist-PX2ERZ6I.js → dist-53PZYC5B.js} +2 -2
  152. package/chunks/{dist-4WCQEZIN.js → dist-AU7NQQRP.js} +1 -1
  153. package/chunks/{dist-DOPL5LSQ.js → dist-FUTEXY6A.js} +1 -1
  154. package/chunks/{dist-V2YVLYOW.js → dist-WGTQO7F2.js} +3 -1
  155. package/chunks/{earlyInputCapture-DJCU5SPU.js → earlyInputCapture-RZCDCUI6.js} +27 -28
  156. package/chunks/{edit-O4VV5AO6.js → edit-T4YAEHVL.js} +27 -28
  157. package/chunks/{en-JFVULHTB.js → en-XE34GKAA.js} +7 -3
  158. package/chunks/{enter-worktree-XQYDDI2I.js → enter-worktree-OLYEPNXA.js} +26 -27
  159. package/chunks/{enterPlanMode-CESVMQBV.js → enterPlanMode-AXQ7UTER.js} +27 -30
  160. package/chunks/{environment-5KXOLZNR.js → environment-XUW6EU64.js} +29 -30
  161. package/chunks/{errors-EBUTCBAQ.js → errors-BPEUP6YP.js} +29 -30
  162. package/chunks/{exit-worktree-MWGNSPNX.js → exit-worktree-NEKFMEVZ.js} +26 -27
  163. package/chunks/exitPlanMode-S4BINY7I.js +389 -0
  164. package/chunks/{fast-path-6V73F2T2.js → fast-path-XMVR6CC3.js} +2 -2
  165. package/chunks/{fr-HVFNU42H.js → fr-X7KDVZIY.js} +3 -2
  166. package/chunks/{gemini-TEFJZCIZ.js → gemini-VM2AHAT4.js} +136 -82
  167. package/chunks/{geminiContentGenerator-M56BEXWI.js → geminiContentGenerator-E37XMSNA.js} +5 -5
  168. package/chunks/{glob-DMYFEEAZ.js → glob-VYD7XS67.js} +32 -28
  169. package/chunks/{grep-GYE47MD4.js → grep-BURXFWDL.js} +32 -28
  170. package/chunks/{handleAutoUpdate-OLUY4L7L.js → handleAutoUpdate-FZXSIFIU.js} +32 -34
  171. package/chunks/{i18n-462JC7IY.js → i18n-DM4SEIAM.js} +28 -29
  172. package/chunks/{initializer-Y7WD4D2I.js → initializer-LKQSF7J5.js} +33 -34
  173. package/chunks/{installationInfo-I2Z3BKCE.js → installationInfo-LSRQCS2L.js} +27 -28
  174. package/chunks/{ja-PY5AF544.js → ja-2ICT3KXF.js} +3 -2
  175. package/chunks/{keychain-token-storage-AU22CQI6.js → keychain-token-storage-K23CFKGN.js} +2 -2
  176. package/chunks/{list-XQ5MSAXP.js → list-6MZCALBI.js} +35 -36
  177. package/chunks/{loadedSettingsAdapter-TQOWYE7C.js → loadedSettingsAdapter-SUHPE5NW.js} +32 -33
  178. package/chunks/{loop-wakeup-QXWZSCYM.js → loop-wakeup-6H7OENTB.js} +5 -5
  179. package/chunks/{ls-2OUTG3IZ.js → ls-APTSOOS5.js} +4 -4
  180. package/chunks/{lsp-4VMNXZW6.js → lsp-HPACPJAN.js} +2 -2
  181. package/chunks/{mcp-22LLEEVM.js → mcp-N75YKDQK.js} +32 -33
  182. package/chunks/{monitor-VKG324X3.js → monitor-2JJAHIM4.js} +26 -27
  183. package/chunks/nonInteractiveCli-SORFQT24.js +126 -0
  184. package/chunks/{notebook-edit-FJJRBQ3S.js → notebook-edit-7EEP2DCR.js} +27 -28
  185. package/chunks/{openaiContentGenerator-4T2OGTR5.js → openaiContentGenerator-E2QCAALJ.js} +13 -14
  186. package/chunks/{pidfile-XL3MDCBM.js → pidfile-AB24FZKB.js} +27 -28
  187. package/chunks/{processUtils-7UCFN34D.js → processUtils-UXCL54EN.js} +2 -2
  188. package/chunks/{pt-A3PRQXMU.js → pt-JJ4XPIBP.js} +3 -2
  189. package/chunks/{qwenContentGenerator-PQUXJDIZ.js → qwenContentGenerator-ZHX56AH2.js} +30 -31
  190. package/chunks/{qwenOAuth2-LEYOU7RU.js → qwenOAuth2-U7XSUSZN.js} +22 -5
  191. package/chunks/react-SG7JAQSZ.js +8 -0
  192. package/chunks/{read-file-3EYQML7E.js → read-file-H2AYF2AF.js} +9 -10
  193. package/chunks/{read-mcp-resource-JUFHCKSC.js → read-mcp-resource-C6NT52T6.js} +2 -2
  194. package/chunks/{record-artifact-DWSMBXYY.js → record-artifact-ENCU7QCL.js} +2 -2
  195. package/chunks/resumeHistoryUtils-IRKP4PVH.js +78 -0
  196. package/chunks/{ripGrep-S6WPGQNA.js → ripGrep-LLPVNSO3.js} +26 -27
  197. package/chunks/{ru-IBCWUTOC.js → ru-STR4KTW7.js} +3 -2
  198. package/chunks/{run-qwen-serve-NSKBT3HU.js → run-qwen-serve-UHQFJZQY.js} +1472 -162
  199. package/chunks/{runtime-LG5ZZ3VH.js → runtime-6K6HOC2V.js} +38 -37
  200. package/chunks/{scheduler-PLX3VVTB.js → scheduler-BR7QEF6U.js} +26 -27
  201. package/chunks/{send-message-JZ752NWD.js → send-message-5GZ4FX2V.js} +3 -3
  202. package/chunks/{serve-S2ZLRZZR.js → serve-OB2UY4V5.js} +32 -33
  203. package/chunks/{server-5ECMV4TM.js → server-BSMFGOCV.js} +1916 -899
  204. package/chunks/{session-ILSONWG4.js → session-UGRANIDK.js} +108 -77
  205. package/chunks/{settings-BOE7WWSA.js → settings-HG7ZGQ64.js} +36 -37
  206. package/chunks/{shell-VW664JIZ.js → shell-2UFD4IRR.js} +26 -27
  207. package/chunks/{skill-COHV6625.js → skill-JVFBLVKR.js} +11 -12
  208. package/chunks/{spawnChannel-5UUR5XOZ.js → spawnChannel-ASJR6O2Q.js} +28 -29
  209. package/chunks/{src-XPKFZ3RN.js → src-RTHJXW3N.js} +119 -72
  210. package/chunks/{standalone-update-IOOJ2NZQ.js → standalone-update-YHXZTF3M.js} +29 -30
  211. package/chunks/{startInteractiveUI-3NGJGXXS.js → startInteractiveUI-CIJKT7XL.js} +6456 -2491
  212. package/chunks/{stdioHelpers-UMY72QRP.js → stdioHelpers-HGIYTWAY.js} +3 -1
  213. package/chunks/{syntheticOutput-LELY6HAI.js → syntheticOutput-ULOVVLY4.js} +3 -3
  214. package/chunks/{task-create-QY3BIMNM.js → task-create-DUE2PMNI.js} +7 -7
  215. package/chunks/{task-list-D2U47WBJ.js → task-list-WVPNX7BZ.js} +5 -5
  216. package/chunks/{task-stop-N6E5IYLH.js → task-stop-CPEQWOT6.js} +2 -2
  217. package/chunks/{task-update-HJCQILLB.js → task-update-HY2LNFFB.js} +7 -7
  218. package/chunks/{team-create-UPLVZQFX.js → team-create-XGD5BSLF.js} +26 -27
  219. package/chunks/{team-delete-RCWYDRF4.js → team-delete-JJV6IUOA.js} +5 -5
  220. package/chunks/{team-plan-approval-F5F432RO.js → team-plan-approval-RW6EP5EW.js} +26 -27
  221. package/chunks/{theme-manager-JJE4BJ67.js → theme-manager-JPWJ4H75.js} +27 -28
  222. package/chunks/todoWrite-JHHIDOIV.js +358 -0
  223. package/chunks/{tool-search-LRXI4JLZ.js → tool-search-JQK7UCL3.js} +10 -11
  224. package/chunks/{total-session-admission-I4DHN6UP.js → total-session-admission-YLXP3P5L.js} +32 -33
  225. package/chunks/{trustedFolders-SEH7LNX2.js → trustedFolders-67VIPNJF.js} +28 -29
  226. package/chunks/turndown.cjs-FZHGMUTY.js +17670 -0
  227. package/chunks/{update-relaunch-T6ZKBUA6.js → update-relaunch-UMZWQZXN.js} +6 -6
  228. package/chunks/{updateCheck-FWLXZPRO.js → updateCheck-LOJWV4M7.js} +30 -31
  229. package/chunks/useAutoAcceptIndicator-P4DA73XX.js +80 -0
  230. package/chunks/{validateNonInterActiveAuth-X6K2VWYT.js → validateNonInterActiveAuth-SLPMMOPF.js} +68 -70
  231. package/chunks/{version-LIFSOGSE.js → version-6ILPYU7G.js} +1 -1
  232. package/chunks/web-fetch-IUAE5MLR.js +938 -0
  233. package/chunks/{workflow-NX2DFWGD.js → workflow-4QYH47BD.js} +29 -30
  234. package/chunks/{workspace-providers-status-VYD6M2NE.js → workspace-providers-status-27WKTNXB.js} +35 -36
  235. package/chunks/{workspace-registration-store-2Y6PWOEL.js → workspace-registration-store-KETPENQV.js} +1 -1
  236. package/chunks/{workspace-registry-PKBDBWCA.js → workspace-registry-5RDV7UHN.js} +32 -33
  237. package/chunks/{workspace-service-HHORUHTS.js → workspace-service-4KY5LGX5.js} +38 -39
  238. package/chunks/{workspace-skills-status-O5Q26LIY.js → workspace-skills-status-FNGBSHFL.js} +33 -34
  239. package/chunks/{write-file-NVAEZ3J2.js → write-file-7AF5MMBK.js} +60 -28
  240. package/chunks/{zh-PAUNIMHQ.js → zh-6ANG2HTL.js} +7 -3
  241. package/chunks/{zh-TW-GNEUIUFF.js → zh-TW-4RR3YHNN.js} +7 -3
  242. package/cli-entry.js +37 -2
  243. package/cli.js +17 -11
  244. package/locales/ca.js +3 -2
  245. package/locales/de.js +3 -2
  246. package/locales/en.js +10 -5
  247. package/locales/fr.js +3 -2
  248. package/locales/ja.js +3 -2
  249. package/locales/pt.js +3 -2
  250. package/locales/ru.js +3 -2
  251. package/locales/zh-TW.js +9 -3
  252. package/locales/zh.js +9 -3
  253. package/package.json +3 -3
  254. package/web-shell/assets/{arc-H74fE8UR.js → arc-z137BnM5.js} +1 -1
  255. package/web-shell/assets/{architectureDiagram-3BPJPVTR-DN3kEq-I.js → architectureDiagram-3BPJPVTR-DLAe1aUX.js} +1 -1
  256. package/web-shell/assets/{blockDiagram-GPEHLZMM-BrqbsFUF.js → blockDiagram-GPEHLZMM-BA3s3H1p.js} +1 -1
  257. package/web-shell/assets/{c4Diagram-AAUBKEIU-ClFhU1P-.js → c4Diagram-AAUBKEIU-VcGzhrEv.js} +1 -1
  258. package/web-shell/assets/channel-U-57In3z.js +1 -0
  259. package/web-shell/assets/{chunk-2J33WTMH-jCIcG0_M.js → chunk-2J33WTMH-DOUS2ITi.js} +1 -1
  260. package/web-shell/assets/{chunk-4BX2VUAB-DSkGe62-.js → chunk-4BX2VUAB-Dcyeec-L.js} +1 -1
  261. package/web-shell/assets/{chunk-55IACEB6-BxBHOGTd.js → chunk-55IACEB6-DTFCNQwe.js} +1 -1
  262. package/web-shell/assets/{chunk-727SXJPM-v_DS7dH7.js → chunk-727SXJPM-CxnR6fvf.js} +1 -1
  263. package/web-shell/assets/{chunk-AQP2D5EJ-1RzEKRPq.js → chunk-AQP2D5EJ-BMA4LaGW.js} +1 -1
  264. package/web-shell/assets/{chunk-FMBD7UC4-DyrSbLOX.js → chunk-FMBD7UC4-CPjlX2He.js} +1 -1
  265. package/web-shell/assets/{chunk-ND2GUHAM-BCmdsZiy.js → chunk-ND2GUHAM-Tew1sAeZ.js} +1 -1
  266. package/web-shell/assets/{chunk-QZHKN3VN-CphHGW2D.js → chunk-QZHKN3VN-C4J1gk1l.js} +1 -1
  267. package/web-shell/assets/classDiagram-4FO5ZUOK-C1Z054Gw.js +1 -0
  268. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-C1Z054Gw.js +1 -0
  269. package/web-shell/assets/{cose-bilkent-S5V4N54A-D5kRC7Fi.js → cose-bilkent-S5V4N54A-QH-RajmL.js} +1 -1
  270. package/web-shell/assets/{dagre-BM42HDAG-DIiyJJ0U.js → dagre-BM42HDAG-CnIFmEz1.js} +1 -1
  271. package/web-shell/assets/{diagram-2AECGRRQ-BOcuB8xU.js → diagram-2AECGRRQ-CghLGoLe.js} +1 -1
  272. package/web-shell/assets/{diagram-5GNKFQAL-CMgiZ4d3.js → diagram-5GNKFQAL-Dh_00fSs.js} +1 -1
  273. package/web-shell/assets/{diagram-KO2AKTUF-Ctx8pfN0.js → diagram-KO2AKTUF-C-sFs61Z.js} +1 -1
  274. package/web-shell/assets/{diagram-LMA3HP47-BT5REAWC.js → diagram-LMA3HP47-BVN3Pmns.js} +1 -1
  275. package/web-shell/assets/{diagram-OG6HWLK6-CJkUqXcp.js → diagram-OG6HWLK6-BsWAi0S3.js} +1 -1
  276. package/web-shell/assets/{erDiagram-TEJ5UH35-DyvNNX6v.js → erDiagram-TEJ5UH35-DQwmzQ9j.js} +1 -1
  277. package/web-shell/assets/{flowDiagram-I6XJVG4X-VBf8_My8.js → flowDiagram-I6XJVG4X-Ba_i6EF9.js} +1 -1
  278. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CviJnR7B.js → ganttDiagram-6RSMTGT7-CCO9sCgw.js} +1 -1
  279. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BY66_Oze.js → gitGraphDiagram-PVQCEYII-C5dBdRN9.js} +1 -1
  280. package/web-shell/assets/{index-DhYuvi3j.js → index-DtBztxRX.js} +1 -1
  281. package/web-shell/assets/index-XGDFJE-X.css +5 -0
  282. package/web-shell/assets/index-gr6ZEnYY.js +1187 -0
  283. package/web-shell/assets/{infoDiagram-5YYISTIA-D2jaewWZ.js → infoDiagram-5YYISTIA-Chp3x8ms.js} +1 -1
  284. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-BpnNTyi5.js → ishikawaDiagram-YF4QCWOH-Ck6UCFu5.js} +1 -1
  285. package/web-shell/assets/{journeyDiagram-JHISSGLW-CA55GNZF.js → journeyDiagram-JHISSGLW-DXKIR2Ny.js} +1 -1
  286. package/web-shell/assets/{kanban-definition-UN3LZRKU-DyiSl_Ts.js → kanban-definition-UN3LZRKU-Dj4eNMwI.js} +1 -1
  287. package/web-shell/assets/{linear-B-sN3dkV.js → linear-C1qgKQ5Y.js} +1 -1
  288. package/web-shell/assets/{mermaid.core-xf9SXDdb.js → mermaid.core-BUY1NJxU.js} +5 -5
  289. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DXhr2kRk.js → mindmap-definition-RKZ34NQL-BMad5mbc.js} +1 -1
  290. package/web-shell/assets/{pieDiagram-4H26LBE5-DUXpbfGQ.js → pieDiagram-4H26LBE5-CmWcsPTt.js} +1 -1
  291. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-NeDQYeWw.js → quadrantDiagram-W4KKPZXB-DoKQiGHC.js} +1 -1
  292. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BSbFRL1A.js → requirementDiagram-4Y6WPE33-CscyVirD.js} +1 -1
  293. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-gg27cAaN.js → sankeyDiagram-5OEKKPKP-34PeJdjz.js} +1 -1
  294. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Bi_1TSs4.js → sequenceDiagram-3UESZ5HK-Bz39dKTI.js} +1 -1
  295. package/web-shell/assets/{stateDiagram-AJRCARHV-CboCCRaf.js → stateDiagram-AJRCARHV-Cj5gOYJV.js} +1 -1
  296. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CHbfyKhi.js +1 -0
  297. package/web-shell/assets/{timeline-definition-PNZ67QCA-DrGpF_jn.js → timeline-definition-PNZ67QCA-CwEXlmaS.js} +1 -1
  298. package/web-shell/assets/{vennDiagram-CIIHVFJN-DCaJU67x.js → vennDiagram-CIIHVFJN-xy7w9Od6.js} +1 -1
  299. package/web-shell/assets/{wardley-L42UT6IY-p0QcW1aP.js → wardley-L42UT6IY-BK3Iy08t.js} +1 -1
  300. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DiEVxj1W.js → wardleyDiagram-YWT4CUSO-CdDGNLRV.js} +1 -1
  301. package/web-shell/assets/{xychartDiagram-2RQKCTM6-iQB8nSlA.js → xychartDiagram-2RQKCTM6-wf0Mg9fL.js} +1 -1
  302. package/web-shell/index.html +2 -2
  303. package/chunks/chunk-2HRYPZT5.js +0 -25
  304. package/chunks/chunk-BYB3GF2T.js +0 -582
  305. package/chunks/chunk-FYQ22K62.js +0 -367
  306. package/chunks/chunk-QAW7PIHT.js +0 -168
  307. package/chunks/chunk-RTV5TUYB.js +0 -143
  308. package/chunks/chunk-YLSSEUAM.js +0 -3212
  309. package/chunks/chunk-ZPAHLFZU.js +0 -172
  310. package/chunks/exitPlanMode-HYQL4XMB.js +0 -909
  311. package/chunks/nonInteractiveCli-UMYUT643.js +0 -129
  312. package/chunks/todoWrite-FKCGATPJ.js +0 -531
  313. package/chunks/web-fetch-CFCWTCAP.js +0 -5673
  314. package/web-shell/assets/channel-NFC5ADAa.js +0 -1
  315. package/web-shell/assets/classDiagram-4FO5ZUOK-DHgwjz3X.js +0 -1
  316. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DHgwjz3X.js +0 -1
  317. package/web-shell/assets/index-8xIBbHV3.js +0 -1143
  318. package/web-shell/assets/index-DLyhlZZO.css +0 -5
  319. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CXRqms6P.js +0 -1
@@ -126,23 +126,29 @@ You are a worker agent processing a batch of files.
126
126
 
127
127
  ### Example Invocation Pattern
128
128
 
129
+ Set `run_in_background: false` on every worker call so all results return inline
130
+ for aggregation in Step 4.
131
+
129
132
  ```
130
133
  <Agent tool call 1>
131
134
  description: "Process batch chunk 1/3"
132
135
  prompt: "You are a worker agent... [full prompt as above]"
133
136
  subagent_type: "general-purpose"
137
+ run_in_background: false
134
138
  </Agent tool call 1>
135
139
 
136
140
  <Agent tool call 2>
137
141
  description: "Process batch chunk 2/3"
138
142
  prompt: "You are a worker agent... [full prompt as above]"
139
143
  subagent_type: "general-purpose"
144
+ run_in_background: false
140
145
  </Agent tool call 2>
141
146
 
142
147
  <Agent tool call 3>
143
148
  description: "Process batch chunk 3/3"
144
149
  prompt: "You are a worker agent... [full prompt as above]"
145
150
  subagent_type: "general-purpose"
151
+ run_in_background: false
146
152
  </Agent tool call 3>
147
153
  ```
148
154
 
@@ -237,6 +237,17 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
237
237
  }
238
238
  ```
239
239
 
240
+ For a vision model that can also follow the normal Qwen Code agent policy and use tools, opt in to full-turn image routing with both capabilities:
241
+
242
+ ```json
243
+ "capabilities": {
244
+ "vision": true,
245
+ "agent": true
246
+ }
247
+ ```
248
+
249
+ When a text-only primary uses that model as its configured vision fallback, the complete image-bearing turn stays on that exact provider, model, and endpoint across tool calls and retries. The next independent turn returns to the primary, and each model request receives only media modalities supported by its target. Omit `agent` (or set it to `false`) to keep the safer Vision Bridge transcription flow.
250
+
240
251
  ### Local Self-Hosted Models (via OpenAI-compatible API)
241
252
 
242
253
  Most local inference servers (vLLM, Ollama, LM Studio, etc.) provide an OpenAI-compatible API endpoint. Configure them using the `openai` auth type with a local `baseUrl`:
@@ -87,7 +87,7 @@ Settings are organized into categories. Most settings should be placed within th
87
87
  | `general.gitCoAuthor.commit` | boolean | Add a Co-authored-by trailer to git commit messages AND attach a per-file AI-attribution git note (`refs/notes/ai-attribution`) for commits made through Qwen Code. Disabling skips both. | `true` |
88
88
  | `general.gitCoAuthor.pr` | boolean | Append a Qwen Code attribution line to pull request descriptions when running `gh pr create`. | `true` |
89
89
  | `general.defaultFileEncoding` | enum | Default encoding for new files. Use `"utf-8"` (default) for UTF-8 without BOM, or `"utf-8-bom"` for UTF-8 with BOM. Only change this if your project specifically requires BOM. | `"utf-8"` |
90
- | `general.voice.enabled` | boolean | Enable voice dictation in the prompt input. Also togglable with the `/voice` command. Requires a transcription model (`voiceModel`) to be configured. | `false` |
90
+ | `general.voice.enabled` | boolean | Enable voice dictation in the prompt input. Also toggleable with the `/voice` command. Requires a transcription model (`voiceModel`) to be configured. | `false` |
91
91
  | `general.voice.mode` | enum | How push-to-talk behaves: `"hold"` to talk while the key is held, or `"tap"` to start and tap (or pause) to stop and submit. | `"hold"` |
92
92
  | `general.voice.language` | string | Preferred spoken language for voice transcription (e.g. `"english"`, `"chinese"`). Leave empty to auto-detect. | `""` |
93
93
  | `general.voice.keytermsFile` | string | Path to a custom keyterms file (one term per line, `#` for comments) that biases voice transcription toward domain-specific terms. Relative paths resolve from the workspace root; defaults to `.qwen/voice-keyterms.txt` when present. Read only in trusted workspaces. Only applies to Qwen ASR models (`qwen3-asr-*`). | `""` |
@@ -139,7 +139,7 @@ Settings are organized into categories. Most settings should be placed within th
139
139
  | `ui.disableWorkflowKeywordTrigger` | boolean | When `true`, mentioning the word `workflow` in a prompt no longer softly steers the turn toward the Workflow tool (and the Footer `workflow active` indicator is suppressed). Only applies when workflows are enabled. | `false` |
140
140
  | `ui.enableUserFeedback` | boolean | Show an optional feedback dialog after conversations to help improve Qwen performance. | `true` |
141
141
  | `ui.compactInline` | boolean | Compact tool display within each group instead of merging across groups. Requires `ui.compactMode` to be enabled. Requires restart. | `false` |
142
- | `ui.useTerminalBuffer` | boolean | Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions. Scroll with `Shift+↑/↓` (line), `PgUp`/`PgDn` (page), `Ctrl+Home/End` (top/bottom), or the mouse wheel. Does not use the host terminal scrollback while enabled; hold `Shift` (or `Option` on macOS) while dragging for native text selection. | `false` |
142
+ | `ui.useTerminalBuffer` | boolean | Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions. Scroll with `Shift+↑/↓` (line), `PgUp`/`PgDn` (page), `Ctrl+Home/End` (top/bottom), or the mouse wheel. Does not use the host terminal scrollback while enabled; drag to select text (double/triple click selects a word/line), or hold `Shift` (or `Option` on macOS) while dragging for the terminal's own selection. | `false` |
143
143
  | `ui.hideBuiltinWorktreeIndicator` | boolean | Hide the built-in `⎇ worktree-<branch> (<slug>)` line in the Footer. The worktree state is still passed to custom statusline scripts via the stdin payload. Keep at the default unless your custom statusline renders the worktree itself. | `false` |
144
144
 
145
145
  #### ide
@@ -175,7 +175,7 @@ Settings are organized into categories. Most settings should be placed within th
175
175
  | `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `QWEN_COMPACT_SCREENSHOT_THRESHOLD`. | `20` |
176
176
  | `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `true` |
177
177
  | `model.skipLoopDetection` | boolean | Disables streaming loop detection checks. Defaults to `true` (loop detection is skipped) to avoid false positives interrupting legitimate workflows. Set to `false` to re-enable streaming loop detection — useful as a guardrail in headless / non-interactive runs where stuck repetition can otherwise waste budget. | `true` |
178
- | `model.maxToolCallsPerTurn` | integer | Hard cap on tool calls within a single turn (one model turn plus its tool-result continuations; blocking Stop-hook continuations such as `/goal` iterations start a fresh budget). Always-on circuit breaker against runaway turns, independent of `model.skipLoopDetection`; the pattern-based loop detectors fire long before this cap, which only bounds total volume. Set to `0` or a negative value to disable the cap. Choosing "Disable loop detection for this session" in the loop-detected dialog also suppresses it for the rest of the session. | `100` |
178
+ | `model.maxToolCallsPerTurn` | integer | Per-turn tool-call cap (one model turn plus its tool-result continuations; blocking Stop-hook continuations such as `/goal` iterations start a fresh budget). When set explicitly, this value is a hard cap: the turn halts on the next tool call after it is reached (the released behavior). When left unset (default 100), the cap is adaptive: once the turn exceeds 100 it halts only when the model keeps repeating the same call (a stuck loop); a productive turn (diverse calls) continues up to a hard backstop of 1000, which always halts. The adaptive default applies to both the interactive TUI and non-interactive (`-p` / JSON / stream-JSON) core-client runs; the daemon/ACP path always treats the value as a hard cap. Always-on circuit breaker against runaway turns, independent of `model.skipLoopDetection`. Set to `0` or a negative value to disable the cap. Choosing "Disable loop detection for this session" in the loop-detected dialog also suppresses it for the rest of the session. | `100` |
179
179
  | `model.skipStartupContext` | boolean | Skips sending the startup workspace context (environment summary and acknowledgement) at the beginning of each session. Enable this if you prefer to provide context manually or want to save tokens on startup. | `false` |
180
180
  | `model.enableOpenAILogging` | boolean | Enables logging of OpenAI API calls for debugging and analysis. When enabled, API requests and responses are logged to JSON files. | `false` |
181
181
  | `model.openAILoggingDir` | string | Custom directory path for OpenAI API logs. If not specified, defaults to `logs/openai` in the current working directory. Supports absolute paths, relative paths (resolved from current working directory), and `~` expansion (home directory). | `undefined` |
@@ -547,13 +547,14 @@ LSP server configuration is done through `.lsp.json` files in your project root
547
547
  >
548
548
  > **Experimental features.** These toggles gate in-development capabilities and may change or be removed in future releases.
549
549
 
550
- | Setting | Type | Description | Default |
551
- | -------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
552
- | `experimental.cron` | boolean | Enable in-session cron/loop tools (`cron_create`, `cron_list`, `cron_delete`) so the model can create recurring prompts. Can be disabled via the `QWEN_CODE_DISABLE_CRON=1` environment variable. Requires restart. | `true` |
553
- | `experimental.cronRecurringMaxAgeDays` | number | Days a recurring cron/loop job lives before auto-expiring (it fires one final time, then is deleted). Set to `0` to disable expiry so jobs run until deleted useful for long-running daemon deployments. Can be overridden via the `QWEN_CODE_CRON_MAX_AGE_DAYS` environment variable. Requires restart. | `7` |
554
- | `experimental.agentTeam` | boolean | Enable agent-team collaboration tools (`team_create`, `task_create`, `task_update`, `send_message`, etc.) for multi-agent coordination. Can also be enabled via `QWEN_CODE_ENABLE_AGENT_TEAM=1`. Requires restart. | `false` |
555
- | `experimental.artifact` | boolean | Enable the Artifact tool, letting the model publish a self-contained HTML page and open it in the browser. Interactive, non-SDK sessions only. `QWEN_CODE_ENABLE_ARTIFACT=1` enables metadata-only `record_artifact` for non-SDK daemon sessions and also enables the Artifact tool in interactive sessions; `QWEN_CODE_DISABLE_ARTIFACT=1` disables both. Requires restart. | `false` |
556
- | `experimental.emitToolUseSummaries` | boolean | Generate a short LLM-based label after each tool-call batch completes. See [Tool-Use Summaries](../features/tool-use-summaries). Requires a fast model to be configured (`fastModel`); silently skipped otherwise. Can be overridden per-session with `QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0` or `=1`. | `true` |
550
+ | Setting | Type | Description | Default |
551
+ | -------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
552
+ | `experimental.cron` | boolean | Enable in-session cron/loop tools (`cron_create`, `cron_list`, `cron_delete`) so the model can create recurring prompts. Can be disabled via the `QWEN_CODE_DISABLE_CRON=1` environment variable. Requires restart. | `true` |
553
+ | `experimental.todoStopGuard` | boolean | Allow daemon and ACP sessions to continue after a natural model stop when the current work chain successfully wrote an unfinished top-level Todo list. Adds at most two consecutive primary-model calls without new user input; mid-turn user input starts a fresh two-attempt stage. It is not restored after process restart and is forced off in safe, bare, and Approval `plan` modes. Requires restart. | `false` |
554
+ | `experimental.cronRecurringMaxAgeDays` | number | Days a recurring cron/loop job lives before auto-expiring (it fires one final time, then is deleted). Set to `0` to disable expiry so jobs run until deleted — useful for long-running daemon deployments. Can be overridden via the `QWEN_CODE_CRON_MAX_AGE_DAYS` environment variable. Requires restart. | `7` |
555
+ | `experimental.agentTeam` | boolean | Enable agent-team collaboration tools (`team_create`, `task_create`, `task_update`, `send_message`, etc.) for multi-agent coordination. Can also be enabled via `QWEN_CODE_ENABLE_AGENT_TEAM=1`. Requires restart. | `false` |
556
+ | `experimental.artifact` | boolean | Enable artifact tools. Enabled by default. In interactive, non-SDK sessions, the model can publish a self-contained HTML page as an interactive Artifact and open it in the browser. Non-SDK daemon sessions can use metadata-only `record_artifact`. Set this to `false` or use `QWEN_CODE_DISABLE_ARTIFACT=1` to disable both. Requires restart. | `true` |
557
+ | `experimental.emitToolUseSummaries` | boolean | Generate a short LLM-based label after each tool-call batch completes. See [Tool-Use Summaries](../features/tool-use-summaries). Requires a fast model to be configured (`fastModel`); silently skipped otherwise. Can be overridden per-session with `QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0` or `=1`. | `true` |
557
558
 
558
559
  #### mcpServers
559
560
 
@@ -92,23 +92,37 @@ Controls how conversation sessions are managed:
92
92
  Channel memory stores durable context for one chat or thread. Entries have stable
93
93
  IDs, so a list response can be used for deterministic follow-up operations.
94
94
 
95
- - `记住:默认使用 staging 环境` saves a new entry for the current chat or
96
- thread.
95
+ - `记住:默认使用 staging 环境` is the deterministic form and saves exactly one
96
+ scalar entry for the current chat or thread.
97
+ - To save several separate facts in one request, use a natural phrase routed
98
+ through the classifier. For example:
99
+ `请记住这三条约定:使用 staging;发布前测试;优先中文回复` creates entries
100
+ that you can manage independently. Exact duplicate facts are skipped and
101
+ reported without creating another entry. Requests containing credential-like
102
+ text are rejected; remove secrets and save the non-sensitive facts separately.
97
103
  - `查看记忆` lists entries and their stable IDs. Use `查看第 2 页记忆` to view
98
104
  a later page, `查看记忆 <id>` to view one entry, or a natural filtered
99
105
  request such as `只看中文偏好` to list the matching entries.
100
106
  - `查看刚才那条记忆`, `把关于 staging 的记忆改成默认使用 production`, and
101
107
  `忘掉刚才那条` work when the natural reference resolves to exactly one entry.
102
- `把 <id> 改成默认使用 production` updates that entry immediately, and
103
- `忘掉 <id>` removes it immediately. Neither operation needs confirmation.
108
+ Natural updates and removals first show the proposed change. Confirm an
109
+ update with `确认更新记忆` or `confirm memory update`, or a removal with
110
+ `确认删除记忆` or `confirm memory removal`, within 60 seconds. Exact-ID
111
+ updates and removals remain immediate and do not need confirmation.
104
112
  - `清空记忆` starts the clear-all confirmation flow; `确认清空记忆` completes
105
113
  it.
106
114
 
107
115
  When a natural inspect, update, or removal request matches multiple entries,
108
116
  the bot returns the candidate IDs and previews without changing memory. There
109
- is no pending selection or confirmation state: retry the request with one exact
110
- ID, such as `忘掉 m-a31f0d82c7e4`. Exact-ID operations remain the deterministic
111
- fast path. A natural request with no match reports that no entry matched.
117
+ is no pending selection for an ambiguous result: retry the request with one
118
+ exact ID, such as `忘掉 m-a31f0d82c7e4`. Exact-ID operations remain the
119
+ deterministic fast path. A natural request with no match reports that no entry
120
+ matched.
121
+
122
+ Pending update, removal, and clear confirmations apply only to the sender and
123
+ chat or thread that created them. A newer clear, natural update, or natural
124
+ removal proposal replaces an older pending one for that sender and target.
125
+ Pending confirmations are discarded when the channel process restarts.
112
126
 
113
127
  The legacy slash aliases `/remember-channel`, `/channel-memory`, and
114
128
  `/forget-channel` have been removed. They are no longer channel-memory
@@ -130,10 +144,9 @@ Memory remains keyed to the current chat or thread. It is not injected into a
130
144
  `sessionScope: single` session, because that session is shared across the whole
131
145
  channel rather than scoped to one target.
132
146
 
133
- Channel memory does not automatically learn facts from normal conversation,
134
- extract multiple entries from one request, or accept `第一个` as confirmation
135
- for an ambiguous natural reference. Use a clear remember request and an exact
136
- entry ID when a natural reference is ambiguous.
147
+ Channel memory does not automatically learn facts from normal conversation or
148
+ accept `第一个` as confirmation for an ambiguous natural reference. Use a clear
149
+ remember request and an exact entry ID when a natural reference is ambiguous.
137
150
 
138
151
  ### Token Security
139
152
 
@@ -160,7 +173,7 @@ When `senderPolicy` is set to `"pairing"`, unknown senders go through an approva
160
173
  qwen channel pairing approve my-channel VEQDDWXJ
161
174
  ```
162
175
 
163
- Once approved, the user's ID is saved to `~/.qwen/channels/<name>-allowlist.json` and all future messages go through normally.
176
+ Once approved, the user's ID is saved to the channel's workspace-scoped allowlist (`~/.qwen/channels/<workspace-scope>/<name>-allowlist.json`) and all future messages go through normally. Pairing state is scoped per workspace, so two workspaces using the same channel name keep separate approvals.
164
177
 
165
178
  ### Pairing CLI Commands
166
179
 
@@ -172,13 +185,15 @@ qwen channel pairing list my-channel
172
185
  qwen channel pairing approve my-channel <CODE>
173
186
  ```
174
187
 
188
+ Run these from the channel's workspace directory (or pass `--cwd <dir>`) — pairing state is stored per workspace.
189
+
175
190
  ### Pairing Rules
176
191
 
177
192
  - Codes are 8 characters, uppercase, using an unambiguous alphabet (no `0`/`O`/`1`/`I`)
178
193
  - Codes expire after 1 hour
179
194
  - Maximum 3 pending requests per channel at a time — additional requests are ignored until one expires or is approved
180
195
  - Users listed in `allowedUsers` in `settings.json` always skip pairing
181
- - Approved users are stored in `~/.qwen/channels/<name>-allowlist.json` — treat this file as sensitive
196
+ - Approved users are stored per workspace in `~/.qwen/channels/<workspace-scope>/<name>-allowlist.json` — treat this file as sensitive
182
197
 
183
198
  ## Group Chats
184
199
 
@@ -473,6 +488,48 @@ Example channel config:
473
488
 
474
489
  For DingTalk, set `isGroup` explicitly on every target. A direct-message target uses the DingTalk user ID as `chatId` with `isGroup: false`; a group target uses the group `openConversationId` with `isGroup: true`. Other adapters may require their own proactive target shape.
475
490
 
491
+ Daemon-managed DingTalk, Feishu, Telegram, and WeCom channels dynamically observe contacts from authorized inbound messages. List contacts observed in the primary workspace during the default seven-day freshness window:
492
+
493
+ ```bash
494
+ curl -H "Authorization: Bearer $QWEN_SERVER_TOKEN" \
495
+ http://127.0.0.1:4170/workspace/channel/observed-contacts
496
+ ```
497
+
498
+ Use `GET /workspaces/:workspace/channel/observed-contacts` to select another registered, trusted workspace. Add `?freshWithinSeconds=N` to choose a window from one second through 365 days. The daemon advertises this API with the `workspace_channel_observed_contacts` capability.
499
+
500
+ The response returns complete platform IDs and labels. Group labels use names already present in accepted inbound messages when available: DingTalk supplies `conversationTitle`, and Telegram supplies `chat.title`. Feishu and WeCom group labels currently fall back to their complete IDs; no platform directory or group-detail API is queried. Topic labels also fall back to complete IDs. Each `lastObservedAt` is a canonical ISO 8601 UTC timestamp with millisecond precision; clients can convert it to the user's local time zone for display. Top-level `users` contains users observed in direct messages. `groups` contains observed group conversations, `groups[].users` contains users observed in each group, and `groups[].topics[].users` contains users observed in Feishu or Telegram topics:
501
+
502
+ ```json
503
+ {
504
+ "users": [
505
+ {
506
+ "channelName": "feishu-main",
507
+ "label": "Example User",
508
+ "id": "ou_complete_user_id",
509
+ "lastObservedAt": "2026-07-17T08:00:00.000Z"
510
+ }
511
+ ],
512
+ "groups": [
513
+ {
514
+ "channelName": "feishu-main",
515
+ "label": "oc_complete_chat_id",
516
+ "id": "oc_complete_chat_id",
517
+ "lastObservedAt": "2026-07-17T08:05:00.000Z",
518
+ "users": [
519
+ {
520
+ "label": "Example User",
521
+ "id": "ou_complete_user_id",
522
+ "lastObservedAt": "2026-07-17T08:05:00.000Z"
523
+ }
524
+ ],
525
+ "topics": []
526
+ }
527
+ ]
528
+ }
529
+ ```
530
+
531
+ These nested users are observed participants, not authoritative group membership. Only messages that pass direct/group, mention, sender, and pairing gates are recorded. Repeated observations refresh labels and timestamps; passive observation cannot detect a leave or deletion until the relationship becomes stale. Message content is never stored. The bounded registry lives under `$QWEN_HOME/channels/daemon/<workspaceHash>/observed-contacts.json`, outside the workspace checkout and partitioned per workspace. Its 500-observation limit is shared by all channels and conversations in that workspace, and observations older than 365 days are removed on the next accepted write. If the registry becomes malformed or uses an unsupported version, delete that file to reset it; accepted traffic recreates it. Webhook configuration and delivery are unchanged.
532
+
476
533
  Start `qwen serve` with the channel worker enabled:
477
534
 
478
535
  ```bash
@@ -14,16 +14,16 @@ Subagents are independent AI assistants that:
14
14
 
15
15
  ## Fork Subagent
16
16
 
17
- In addition to named subagents, Qwen Code supports **forking** — selected explicitly with `subagent_type: "fork"` (available in interactive sessions). A fork inherits the parent's full conversation context and runs detached in the background. Omitting `subagent_type` does **not** fork; it launches the general-purpose subagent, which runs to completion and returns its result inline.
17
+ In addition to named subagents, Qwen Code supports **forking** — selected explicitly with `subagent_type: "fork"` (available in interactive sessions). A fork inherits the parent's full conversation context and runs detached in the background. Omitting `subagent_type` does **not** fork; it launches the general-purpose subagent. Top-level named subagents run in the background by default and deliver their results through completion notifications. Set `run_in_background: false` when the current turn must wait for the result inline.
18
18
 
19
19
  ### How Fork Differs from Named Subagents
20
20
 
21
- | | Named Subagent | Fork Subagent |
22
- | ------------- | --------------------------------- | ----------------------------------------------------- |
23
- | Context | Starts fresh, no parent history | Inherits parent's full conversation history |
24
- | System prompt | Uses its own configured prompt | Uses parent's exact system prompt (for cache sharing) |
25
- | Execution | Blocks the parent until done | Runs in background, parent continues immediately |
26
- | Use case | Specialized tasks (testing, docs) | Parallel tasks that need the current context |
21
+ | | Named Subagent | Fork Subagent |
22
+ | ------------- | -------------------------------------------------------------- | ----------------------------------------------------- |
23
+ | Context | Starts fresh, no parent history | Inherits parent's full conversation history |
24
+ | System prompt | Uses its own configured prompt | Uses parent's exact system prompt (for cache sharing) |
25
+ | Execution | Background by default; supports an explicit foreground opt-out | Always detached; parent continues immediately |
26
+ | Use case | Specialized tasks (testing, docs) | Parallel tasks that need the current context |
27
27
 
28
28
  ### When Fork is Used
29
29
 
@@ -61,7 +61,7 @@ Fork children cannot create further forks. This is enforced at runtime — if a
61
61
  1. **Configuration**: You create Subagents configurations that define their behavior, tools, and system prompts
62
62
  2. **Delegation**: The main AI can automatically delegate tasks to appropriate Subagents — or fork itself (`subagent_type: "fork"`) when it wants to inherit the full conversation context and discard the intermediate output
63
63
  3. **Execution**: Subagents work independently, using their configured tools to complete tasks
64
- 4. **Results**: They return results and execution summaries back to the main conversation
64
+ 4. **Results**: Background runs notify the main conversation when they finish; foreground opt-outs return results inline
65
65
 
66
66
  ## Getting Started
67
67
 
@@ -181,8 +181,8 @@ The `agent` tool accepts an optional `isolation: "worktree"` parameter. When set
181
181
 
182
182
  Two constraints:
183
183
 
184
- - `isolation: "worktree"` requires a `subagent_type` — forked sub-agents (no `subagent_type`) reuse the parent's full conversation context, so isolating them would split intent from working tree.
185
- - Background agents (`run_in_background: true`) work fine with isolation; the cleanup runs when the agent reports completion.
184
+ - `isolation: "worktree"` requires a non-fork `subagent_type` — forked sub-agents (`subagent_type: "fork"`) reuse the parent's full conversation context, so isolating them would split intent from working tree.
185
+ - Agents using `isolation: "worktree"` follow the default background behavior; the cleanup runs when the agent reports completion. Set `run_in_background: false` for an inline result. Caller-owned `working_dir` launches remain foreground by default because their lifecycle is managed externally.
186
186
 
187
187
  ### Automatic Stale Cleanup
188
188
 
@@ -20,6 +20,34 @@ The daemon reads the bearer token from either `--token <value>` on the CLI or th
20
20
 
21
21
  One shell-level `export` covers both server boot and SDK client construction (just keep it scoped to the session, per the note above).
22
22
 
23
+ ## Workspace lifecycle and process boundaries
24
+
25
+ One daemon can host several isolated workspace runtimes under the same listener.
26
+ Repeat `--workspace` with absolute directories to create explicit startup
27
+ runtimes; the first is primary. Primary and other explicit startup/static
28
+ runtimes cannot be removed without restarting the process.
29
+
30
+ Additional workspaces can also be registered while the daemon is running
31
+ through `POST /workspaces`. Pass `persist: true` to retain a dynamic secondary
32
+ in the user-level registration store so it is restored on the next start.
33
+ Untrusted registrations remain visible for diagnostics, bounded file reads,
34
+ and declared persisted reads but cannot start ACP. Dynamic and
35
+ persisted-restored secondaries are removable: a normal removal refuses while
36
+ the runtime is busy, while a forced removal requests termination of active
37
+ resources and commits logical removal before the same cwd can be re-added.
38
+ Cleanup is bounded and best-effort after the persistence commit point; failures
39
+ are logged rather than restoring the removed runtime.
40
+
41
+ Runtime isolation covers cwd, environment overlay, filesystem/trust boundary,
42
+ workspace services, bridge, Voice lease state, channel worker, and the ACP/MCP
43
+ resource boundary. Production attempts to preheat the primary ACP child and
44
+ retries on first use after failure; trusted secondaries start theirs on demand,
45
+ and untrusted secondaries do not start ACP.
46
+ Authentication, HTTP rate limits, listener and Voice admission caps,
47
+ total-session admission, metrics, shutdown, and the process fault radius remain
48
+ daemon-global. Run separate daemons when those process-level boundaries must be
49
+ independent.
50
+
23
51
  ## Linux: systemd user unit
24
52
 
25
53
  > **Find your `qwen` binary first.** The unit file's `ExecStart=` must hold an **absolute path** — service managers don't read your shell's `PATH`. Run `which qwen` to discover it. Common locations: `/usr/local/bin/qwen` (Linuxbrew, manual installs), `~/.nvm/versions/node/vX.Y.Z/bin/qwen` (nvm), `~/.fnm/aliases/default/bin/qwen` (fnm), `~/.volta/bin/qwen` (Volta). Substitute the actual path everywhere the templates below show `/PATH/TO/qwen`.
@@ -34,9 +62,9 @@ After=network.target
34
62
  [Service]
35
63
  Type=simple
36
64
  # Replace with your project; %h expands to $HOME under user units.
37
- WorkingDirectory=%h/your-project
65
+ WorkingDirectory=%h/project-a
38
66
  # Run `which qwen` to find the absolute path. systemd does NOT read $PATH.
39
- ExecStart=/PATH/TO/qwen serve --hostname 127.0.0.1 --port 4170
67
+ ExecStart=/PATH/TO/qwen serve --hostname 127.0.0.1 --port 4170 --workspace %h/project-a --workspace %h/project-b
40
68
  # Read the bearer token from a chmod 600 file rather than inlining it
41
69
  # in the unit. `Environment=` would expose the token in the unit file
42
70
  # (typically 644 = world-readable). EnvironmentFile keeps the token in
@@ -95,10 +123,14 @@ Without `loginctl enable-linger`, the user-level systemd instance shuts down whe
95
123
  <string>127.0.0.1</string>
96
124
  <string>--port</string>
97
125
  <string>4170</string>
126
+ <string>--workspace</string>
127
+ <string>/Users/YOUR-USERNAME/project-a</string>
128
+ <string>--workspace</string>
129
+ <string>/Users/YOUR-USERNAME/project-b</string>
98
130
  </array>
99
131
  <!-- launchd does NOT expand `~` or `$HOME` — use absolute paths. -->
100
132
  <key>WorkingDirectory</key>
101
- <string>/Users/YOUR-USERNAME/your-project</string>
133
+ <string>/Users/YOUR-USERNAME/project-a</string>
102
134
  <key>EnvironmentVariables</key>
103
135
  <dict>
104
136
  <!-- DO NOT COMMIT this file with a real token. Also chmod 600 the
@@ -153,7 +185,7 @@ After editing the plist (e.g., rotating the token) you must `unload` then `load`
153
185
  Assumes `QWEN_SERVER_TOKEN` is already exported in your shell (see the setup section above):
154
186
 
155
187
  ```bash
156
- tmux new -d -s qwen-serve "cd ~/your-project && qwen serve --hostname 127.0.0.1"
188
+ tmux new -d -s qwen-serve "qwen serve --hostname 127.0.0.1 --workspace /absolute/path/project-a --workspace /absolute/path/project-b"
157
189
  tmux attach -t qwen-serve # see live logs; Ctrl-b d to detach
158
190
  tmux kill-session -t qwen-serve
159
191
  ```
@@ -165,11 +197,14 @@ tmux kill-session -t qwen-serve
165
197
  Assumes `QWEN_SERVER_TOKEN` is already exported in your shell:
166
198
 
167
199
  ```bash
168
- nohup bash -c 'cd ~/your-project && qwen serve --hostname 127.0.0.1' > qwen-serve.log 2>&1 &
200
+ nohup qwen serve --hostname 127.0.0.1 \
201
+ --workspace /absolute/path/project-a \
202
+ --workspace /absolute/path/project-b \
203
+ > qwen-serve.log 2>&1 &
169
204
  echo $! # daemon PID; capture if you want to `kill` cleanly later
170
205
  ```
171
206
 
172
- The wrapping `bash -c '...'` ensures the daemon binds to `~/your-project` rather than wherever you happened to run the command. Without that `cd`, `qwen serve` defaults to `process.cwd()` and a `POST /session` from a client expecting your project workspace returns `400 workspace_mismatch` — silent foot-gun.
207
+ Explicit absolute `--workspace` values keep the daemon independent of the shell's current directory. A client should select one of the advertised `capabilities.workspaces[]` entries and pass its cwd when creating a session.
173
208
 
174
209
  OK for one-off "let me run this in the background while I poke at the API" workflows. **Not recommended** for anything beyond a single session — no restart-on-crash, log file grows unbounded, no clean way to find the daemon if you forget the PID. Prefer tmux for interactive supervision or systemd / launchd for anything you want to outlast a reboot.
175
210
 
@@ -214,7 +249,7 @@ A daemon **restart** drops all in-memory sessions; clients reconnect and start f
214
249
  ## Out of scope (defers to v0.16.x or later)
215
250
 
216
251
  - **Containerized deployment** — Dockerfile, docker-compose, Kubernetes manifests, nginx + TLS reverse proxy, multi-instance token isolation. Defers to v0.16.x once an enterprise pilot is committed; the doc would otherwise rot from no-one-validating.
217
- - **Cross-host federation / multi-daemon coordination on one host** — `1 daemon = 1 workspace × N sessions` is enforced. Instance-path token keying + stale-token cleanup defer to v0.16.x.
252
+ - **Cross-host federation / multi-daemon coordination on one host** — one daemon can host multiple registered workspace runtimes, but daemons do not coordinate. Instance-path token keying + stale-token cleanup defer to v0.16.x.
218
253
  - **Auto-generated daemon tokens** — alpha is BYO-token. Auto-gen + token-store infrastructure defers to v0.16.x.
219
254
  - **Windows native service** (`nssm`, Service Control Manager wrapper) — for now use [WSL2](https://learn.microsoft.com/en-us/windows/wsl/) and follow the systemd section above.
220
255