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

|
|
16
|
+
|
|
14
17
|
2. Choose API mode.
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
15
21
|
3. Copy the Bot ID and Secret.
|
|
16
22
|
4. Add the robot to the direct chats or groups where it should be available.
|
|
17
23
|
|