@qwen-code/qwen-code 0.21.1-simplify-system-prompt.0 → 0.21.2-nightly.20260801.bc382c3ff
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/docs/configuration/model-providers.md +2 -0
- package/bundled/qc-helper/docs/configuration/settings.md +42 -30
- package/bundled/qc-helper/docs/features/channels/_meta.ts +2 -0
- package/bundled/qc-helper/docs/features/channels/github.md +146 -0
- package/bundled/qc-helper/docs/features/channels/gitlab.md +177 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +61 -6
- package/bundled/qc-helper/docs/features/code-review.md +21 -1
- package/bundled/qc-helper/docs/features/commands.md +1 -0
- package/bundled/qc-helper/docs/features/hooks.md +186 -32
- package/bundled/qc-helper/docs/features/mcp.md +9 -1
- package/bundled/qc-helper/docs/features/memory.md +27 -0
- package/bundled/qc-helper/docs/features/scheduled-tasks.md +3 -1
- package/bundled/qc-helper/docs/features/skills.md +14 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +75 -8
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +7 -7
- package/bundled/qc-helper/docs/qwen-serve.md +32 -8
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +4 -4
- package/bundled/qc-helper/docs/support/troubleshooting.md +2 -1
- package/bundled/review/DESIGN.md +19 -0
- package/bundled/review/SKILL.md +120 -61
- package/chunks/MaxSizedBox-CDHTDITS.js +89 -0
- package/chunks/{StandaloneSessionPicker-O6RKBPU4.js → StandaloneSessionPicker-L63HUAHP.js} +76 -73
- package/chunks/{acp-startup-profiler-RV3IV562.js → acp-startup-profiler-3RICG2YW.js} +2 -2
- package/chunks/{acpAgent-HYFVXVDR.js → acpAgent-6WVVT2P3.js} +2147 -1009
- package/chunks/agent-KDM4CBOU.js +85 -0
- package/chunks/agent-headless-AS7K2K57.js +79 -0
- package/chunks/{anthropicContentGenerator-LXUXMOE7.js → anthropicContentGenerator-WCBYB6JG.js} +388 -37
- package/chunks/{artifact-tool-Y5T7GG7F.js → artifact-tool-ANV4CFCR.js} +4 -4
- package/chunks/{askUserQuestion-2H6747FR.js → askUserQuestion-MALEB47H.js} +4 -4
- package/chunks/bridge-JNEW6FES.js +95 -0
- package/chunks/{build-RV63TIRH.js → build-GDBLPA24.js} +1 -1
- package/chunks/{ca-25EDXPFZ.js → ca-4OJN75WT.js} +52 -6
- package/chunks/{channel-management-service-G74LFADV.js → channel-management-service-QOO7TD3T.js} +21 -6
- package/chunks/channel-settings-store-4CSMTR4L.js +92 -0
- package/chunks/{channel-worker-group-PTJIJSKC.js → channel-worker-group-ERSUOPIR.js} +10 -6
- package/chunks/{channel-worker-manager-WIMGM2FD.js → channel-worker-manager-X247YDQ7.js} +10 -6
- package/chunks/{channel-worker-supervisor-KUFTR6P5.js → channel-worker-supervisor-ORJIEEPP.js} +6 -5
- package/chunks/{chunk-LNARWLZQ.js → chunk-25QQVOCG.js} +5 -5
- package/chunks/{chunk-2OM7GEXO.js → chunk-2A6MHYIA.js} +3 -3
- package/chunks/{chunk-ER5LWJR6.js → chunk-2CTKGIFR.js} +3 -3
- package/chunks/{chunk-SQBYH7PX.js → chunk-2DNKEBXY.js} +1 -1
- package/chunks/{chunk-6GMVPFB2.js → chunk-2IIJTXYF.js} +45 -16
- package/chunks/{chunk-BPJSQIJX.js → chunk-2J3OJGTL.js} +0 -2
- package/chunks/chunk-2M5N3DHY.js +378 -0
- package/chunks/{chunk-CC4N4M36.js → chunk-2PNQQ4UR.js} +2 -2
- package/chunks/{chunk-E5TUC6CA.js → chunk-2UISUFHQ.js} +3 -3
- package/chunks/{chunk-PWTZEM3C.js → chunk-33FNCQSY.js} +3 -37
- package/chunks/{chunk-J56UI34H.js → chunk-3LGZEYOF.js} +4 -2
- package/chunks/{chunk-66RMLJHC.js → chunk-3MHPWQ2M.js} +590 -212
- package/chunks/{chunk-NL7LTRLR.js → chunk-3RXUYQJI.js} +54 -74
- package/chunks/{chunk-E5Z2AVNV.js → chunk-3SH53ANB.js} +0 -11
- package/chunks/{chunk-XHRTVPG2.js → chunk-3WXMXT7C.js} +22 -11
- package/chunks/{chunk-C3NS4F2Q.js → chunk-42IKVPST.js} +1 -1
- package/chunks/{chunk-M5JM7OSF.js → chunk-432XCUHF.js} +2 -3
- package/chunks/{chunk-5U4IPFBR.js → chunk-433VD3HX.js} +4 -4
- package/chunks/chunk-434YCHSV.js +2196 -0
- package/chunks/{chunk-DHHOYAPR.js → chunk-4LKVQFHM.js} +7 -7
- package/chunks/{chunk-IPUUTYMV.js → chunk-4NFY2S7N.js} +0 -33
- package/chunks/{chunk-J6D3VXCC.js → chunk-5UJ6A3CH.js} +158 -12
- package/chunks/{chunk-N3FAY5CM.js → chunk-5UZITEHA.js} +158 -5
- package/chunks/{chunk-A4UCTEB5.js → chunk-5WV5S2GT.js} +0 -1
- package/chunks/chunk-6FMJLI5M.js +1591 -0
- package/chunks/{chunk-6FGBXPWM.js → chunk-6O5DVH27.js} +38 -44
- package/chunks/{chunk-2RFKHEXL.js → chunk-6PLDPT2C.js} +1 -1
- package/chunks/{chunk-52O2CIUL.js → chunk-7IYLHTTM.js} +130 -5
- package/chunks/{chunk-5THCYPLO.js → chunk-7K2WTPQO.js} +15 -8
- package/chunks/{chunk-2Q3OT4OV.js → chunk-7MY2AR5A.js} +204 -81
- package/chunks/{chunk-YH6G52F2.js → chunk-A2A34TSB.js} +4 -4
- package/chunks/{chunk-3QMGYBFN.js → chunk-A5YZ3FA2.js} +2 -80
- package/chunks/{chunk-K4XWPEWB.js → chunk-A6SX5TAH.js} +4 -33
- package/chunks/{chunk-VYPFXUCB.js → chunk-AKA24BGO.js} +1 -1
- package/chunks/chunk-AQ37AY7B.js +93 -0
- package/chunks/{chunk-PANH4R3B.js → chunk-AQEWCKX4.js} +18 -12
- package/chunks/{chunk-LG4GZIVV.js → chunk-AYB4HSBI.js} +4 -4
- package/chunks/{chunk-PJIZUQVC.js → chunk-AZQ3DT76.js} +2 -2
- package/chunks/{chunk-2JZBVYTU.js → chunk-BFHXDAR7.js} +1 -8
- package/chunks/{chunk-2W3OOD4W.js → chunk-BGXZBI5B.js} +7 -4
- package/chunks/{chunk-2YZJCM5T.js → chunk-BKUN5QHP.js} +7 -7
- package/chunks/{chunk-UUUTRMI2.js → chunk-BV4QX43X.js} +1 -1
- package/chunks/{chunk-4M377AZG.js → chunk-C4L2MEIT.js} +6 -6
- package/chunks/{chunk-VV6XU5L7.js → chunk-CHCLO3M7.js} +19 -14
- package/chunks/{chunk-TOFQCPDC.js → chunk-CWEIMFFW.js} +14 -8
- package/chunks/{chunk-XVNQMZ2I.js → chunk-DGEIYUC3.js} +0 -1
- package/chunks/{chunk-BPZALHVR.js → chunk-DI35ZN7T.js} +1 -1
- package/chunks/{chunk-WDSWXQU3.js → chunk-DUIJ2IXG.js} +5 -13
- package/chunks/{chunk-3MSHSCSN.js → chunk-DVGTU5TC.js} +94 -4
- package/chunks/{chunk-RHLZR4E5.js → chunk-DYA25Y7U.js} +1 -1
- package/chunks/{chunk-MUP3T3AD.js → chunk-E4WHKETF.js} +32 -38
- package/chunks/{chunk-WBL3FJEU.js → chunk-FC4KQFCS.js} +1 -1
- package/chunks/{chunk-V6VRAM7B.js → chunk-FJHA23GM.js} +12 -12
- package/chunks/chunk-FYJ7W2PI.js +194 -0
- package/chunks/{chunk-INADJJGW.js → chunk-G7XXKQYS.js} +2 -2
- package/chunks/{chunk-LZEMEFKY.js → chunk-GALUTA2C.js} +1 -1
- package/chunks/{chunk-ML52PL6O.js → chunk-GB3AB7TR.js} +4374 -3779
- package/chunks/{chunk-SASBXAQL.js → chunk-GHJM2C2T.js} +6 -8
- package/chunks/{chunk-LS77BEZP.js → chunk-GLCZKT5V.js} +1 -5
- package/chunks/chunk-GOFAQQZA.js +132 -0
- package/chunks/{chunk-BJX6ZSUK.js → chunk-GTM6IHBB.js} +2 -2
- package/chunks/{chunk-TF2X2WCT.js → chunk-GVISB2OH.js} +2 -2
- package/chunks/{chunk-OKY7HXPG.js → chunk-H36SETQS.js} +2 -2
- package/chunks/{chunk-7FZEBPKS.js → chunk-H4346YW5.js} +39 -22
- package/chunks/{chunk-LNURQEMZ.js → chunk-H4DSRWAS.js} +24 -13
- package/chunks/{chunk-3JAQDSXN.js → chunk-H6MC6VQX.js} +290 -179
- package/chunks/{chunk-GZXCZHCT.js → chunk-I3G5JWBV.js} +1 -1
- package/chunks/{chunk-PR75REBZ.js → chunk-I5GNT6ZS.js} +18 -82
- package/chunks/{chunk-MVS3NS2N.js → chunk-I6FAHB4N.js} +28 -5
- package/chunks/{chunk-ZOIFNCKL.js → chunk-I7JDGNG6.js} +3 -23
- package/chunks/{chunk-OJGCZBB7.js → chunk-II6WPWHY.js} +41 -36
- package/chunks/{chunk-UH3WSE5L.js → chunk-J26HHFI5.js} +2 -7
- package/chunks/{chunk-S3TWXGKA.js → chunk-JE7KQ2UP.js} +4 -2
- package/chunks/{chunk-ZD6UTE4A.js → chunk-JELIWHXD.js} +1 -1
- package/chunks/{chunk-6PSLCFQ2.js → chunk-JRIDA5HF.js} +18 -9
- package/chunks/{chunk-W4CQXHT6.js → chunk-K4CGQN4Q.js} +1 -1
- package/chunks/{chunk-G4WFQUYQ.js → chunk-K5Q62CGR.js} +1 -1
- package/chunks/{chunk-JCW2R7WC.js → chunk-K623ENWT.js} +3 -79
- package/chunks/{chunk-T2NCM2ET.js → chunk-K6KS3LTN.js} +2 -749
- package/chunks/{chunk-DN6ZX5AY.js → chunk-KG22G46Y.js} +62 -15
- package/chunks/{chunk-L5UHQJTJ.js → chunk-KKN2IE7Q.js} +1 -1
- package/chunks/{chunk-63P4EL5V.js → chunk-KVUBYJDM.js} +2 -2
- package/chunks/{chunk-E5WH5O3C.js → chunk-KXSYDCP2.js} +4 -4
- package/chunks/{chunk-JALU3ZDU.js → chunk-LAPK3GLC.js} +212 -16
- package/chunks/chunk-LBOVL47Y.js +29 -0
- package/chunks/{chunk-FQK6JAFG.js → chunk-LBWNSLJK.js} +4 -4
- package/chunks/{chunk-3IXOIAKE.js → chunk-LL4U3BSH.js} +30 -10
- package/chunks/{chunk-B7QDM6Z7.js → chunk-LRJWFR6L.js} +4 -4
- package/chunks/{chunk-RWS5VYWC.js → chunk-M2F5PLOW.js} +1018 -484
- package/chunks/{chunk-HIJQF5B5.js → chunk-M744OFVE.js} +1 -1
- package/chunks/{chunk-I7XZ3RY5.js → chunk-MBKPUM5Y.js} +1 -1
- package/chunks/chunk-MISUEWB4.js +8749 -0
- package/chunks/{chunk-FNQ6T3CV.js → chunk-MOHAWIAW.js} +10 -7
- package/chunks/{chunk-FODK6UMO.js → chunk-MPHPFVKK.js} +0 -2
- package/chunks/{chunk-QY5MMZ6O.js → chunk-MSIVKDRC.js} +4 -4
- package/chunks/{record-artifact-RQKFYO5B.js → chunk-MYT7N6QH.js} +22 -7
- package/chunks/{chunk-JESCGQM3.js → chunk-NAVJD2PQ.js} +8 -7
- package/chunks/{chunk-DM4Q4JJH.js → chunk-NGWYUZZO.js} +68794 -83526
- package/chunks/{chunk-6OUGMXDC.js → chunk-NWNEANAT.js} +7 -7
- package/chunks/{chunk-PQNHRFJC.js → chunk-NYX53SV4.js} +0 -2
- package/chunks/{chunk-Z5BLYMZM.js → chunk-NZB4NDJL.js} +10 -10
- package/chunks/{chunk-SRZ6DXVG.js → chunk-O2ZYHG33.js} +47 -138
- package/chunks/chunk-O6GEWCJA.js +21 -0
- package/chunks/{chunk-PHVR5UUY.js → chunk-OBAIHYFT.js} +1 -1
- package/chunks/chunk-OCPBI7J5.js +18 -0
- package/chunks/{chunk-P5V4T7NK.js → chunk-OCRM53TT.js} +11 -3
- package/chunks/{chunk-V7RNNPGC.js → chunk-P5Y23G2L.js} +18 -1
- package/chunks/{chunk-KU5XMLDK.js → chunk-PDDYAXL2.js} +7 -1
- package/chunks/{chunk-L26JL52R.js → chunk-PGEGUNH5.js} +108 -68
- package/chunks/{chunk-2JM6GZ5D.js → chunk-PGP7Y3RQ.js} +8 -13
- package/chunks/{chunk-VFSJ5VRH.js → chunk-PHODQP2V.js} +6 -6
- package/chunks/{chunk-PSWQZHEA.js → chunk-PXA5AWHY.js} +1 -1
- package/chunks/{chunk-VDDGDZMA.js → chunk-QHWCP53L.js} +14 -7
- package/chunks/chunk-QL4TN4HS.js +59 -0
- package/chunks/{chunk-USTWD7QV.js → chunk-QMBEW7EW.js} +26 -16
- package/chunks/{chunk-U4VTUMMK.js → chunk-QONSRAEV.js} +1 -1
- package/chunks/{chunk-NH6KE4JX.js → chunk-QYPT3QUD.js} +3 -3
- package/chunks/{chunk-GDIPH4JY.js → chunk-RGJ4JWSU.js} +133 -50
- package/chunks/{chunk-BO4XCS7P.js → chunk-RPYYTL7E.js} +77 -94
- package/chunks/{chunk-6AM5D4ME.js → chunk-S6LOFUVP.js} +0 -12
- package/chunks/{chunk-B4UMZKMU.js → chunk-SK2UKB45.js} +1 -1
- package/chunks/{chunk-QPDRAXDJ.js → chunk-SWEBEXPI.js} +1 -1
- package/chunks/chunk-T26EAKDL.js +13 -0
- package/chunks/chunk-T3CHYWJZ.js +758 -0
- package/chunks/{chunk-U7TXFVUN.js → chunk-TFFMATHX.js} +120 -95
- package/chunks/{chunk-M4UKFCZ2.js → chunk-TNVKFQXQ.js} +616 -217
- package/chunks/{chunk-5I2IWRSH.js → chunk-TYERNYH4.js} +2 -2
- package/chunks/{chunk-VAK25FTU.js → chunk-U25CMJYY.js} +1 -1
- package/chunks/{chunk-A5L3JMUA.js → chunk-UH7Z7Y45.js} +18 -4
- package/chunks/{chunk-BRRAJXPA.js → chunk-UHQ3L6GC.js} +1 -1
- package/chunks/{chunk-HV3G62R6.js → chunk-UHTJC7O3.js} +1 -1
- package/chunks/{chunk-3SJ43L4W.js → chunk-UKZEXS6K.js} +8 -0
- package/chunks/{chunk-DM22XS4K.js → chunk-UOFFZNXV.js} +361 -17
- package/chunks/{chunk-FY3M44RD.js → chunk-URN76TKR.js} +3 -3
- package/chunks/{chunk-MSLKI6C2.js → chunk-UWLG4UCE.js} +139 -31
- package/chunks/{chunk-A6UO2C7C.js → chunk-UWSXFI6E.js} +167 -81
- package/chunks/{chunk-BYFNTGKI.js → chunk-VS3GXRNZ.js} +3703 -1399
- package/chunks/{chunk-TQCBGUHN.js → chunk-VWF42XC6.js} +5 -5
- package/chunks/{chunk-32MVHM4T.js → chunk-W7XZ3KP5.js} +1 -1
- package/chunks/{chunk-B6ZJ7SI6.js → chunk-WISQLM4Q.js} +1526 -1420
- package/chunks/{chunk-H5FFA6TH.js → chunk-WK4TJUEA.js} +16 -3
- package/chunks/{chunk-3HBZKBMQ.js → chunk-WP4HGHFG.js} +5 -5
- package/chunks/{chunk-BIQWWWJN.js → chunk-XC2VAFVZ.js} +1 -1
- package/chunks/{chunk-EPDRMGT4.js → chunk-XC656O42.js} +4 -28
- package/chunks/{chunk-COH43MRJ.js → chunk-XCGIMOLN.js} +27 -1
- package/chunks/{chunk-YAF5VNU7.js → chunk-XCLLRKY5.js} +4 -5
- package/chunks/chunk-XFDPIC4P.js +319 -0
- package/chunks/{chunk-KIUFNBHR.js → chunk-XSA5EKTJ.js} +1 -1
- package/chunks/{chunk-OHNBB4XR.js → chunk-YAVY33G4.js} +1 -1
- package/chunks/{chunk-DLWL3Z7A.js → chunk-YXEVDA66.js} +3 -3
- package/chunks/chunk-Z4X5MTRT.js +133 -0
- package/chunks/{chunk-UW5EOVUN.js → chunk-ZBVS26BY.js} +4 -4
- package/chunks/{chunk-HTO4JFDZ.js → chunk-ZPJWUGCS.js} +0 -1
- package/chunks/{chunk-ZE5WPL4I.js → chunk-ZRFJ75D7.js} +3 -3
- package/chunks/{chunk-MK7VQDN3.js → chunk-ZTN6OA5J.js} +8 -6
- package/chunks/{computer-use-DOFAHZAB.js → computer-use-Z4NCIIJN.js} +54 -51
- package/chunks/{config-utils-VFQXVGNR.js → config-utils-64LM6OEQ.js} +4 -4
- package/chunks/contextCommand-HVM7XFCB.js +84 -0
- package/chunks/core-runtime-NL3ZBHBU.js +138 -0
- package/chunks/{create-sub-session-IWW2IZ2T.js → create-sub-session-AM32K2HD.js} +3 -3
- package/chunks/{create-sub-session-7543K2QA.js → create-sub-session-XHSCDYFU.js} +54 -51
- package/chunks/{cron-create-YIID5XAW.js → cron-create-HPXYE6C5.js} +6 -6
- package/chunks/{cron-delete-ZVHYCEP2.js → cron-delete-FPVNTKPK.js} +5 -5
- package/chunks/{cron-list-XEGS463Q.js → cron-list-ZEI6PAAV.js} +6 -6
- package/chunks/{daemon-VOMQW7KZ.js → daemon-PCNCI5YU.js} +239 -18
- package/chunks/daemon-status-provider-XD23SNAM.js +94 -0
- package/chunks/daemon-trust-policy-NOHK7IW5.js +89 -0
- package/chunks/daemon-trust-policy-monitor-ZBTSR333.js +176 -0
- package/chunks/{de-HGRCYDEJ.js → de-A6TI4LBB.js} +52 -6
- package/chunks/deferred-core-runtime-JJBHKM2C.js +93 -0
- package/chunks/{dist-RTJFMNEZ.js → dist-4LAMY2SK.js} +1449 -14
- package/chunks/{dist-NNVBBOGU.js → dist-4T4NCJFL.js} +2 -2
- package/chunks/dist-7KOL6OMD.js +13467 -0
- package/chunks/{dist-BRB6EXK4.js → dist-BH76AT7N.js} +3 -3
- package/chunks/dist-BXA3JXVQ.js +4749 -0
- package/chunks/{dist-KTYYJ2C5.js → dist-OEEFI6UU.js} +12 -9
- package/chunks/{dist-K6Y4E7FX.js → dist-SMLVOWKV.js} +5 -4
- package/chunks/{dist-ANLAT3GS.js → dist-V2RK6S6Q.js} +2 -1
- package/chunks/earlyInputCapture-KLAZDAIP.js +86 -0
- package/chunks/{edit-RIEOJWKB.js → edit-YQZWCISX.js} +53 -50
- package/chunks/{en-MTWBNGDO.js → en-RESOFG55.js} +55 -6
- package/chunks/{enter-worktree-OGK5FQ3R.js → enter-worktree-WLVWI3FP.js} +53 -50
- package/chunks/{enterPlanMode-IWZYALIB.js → enterPlanMode-6RYXFQUD.js} +53 -50
- package/chunks/environment-DXJTXSVT.js +106 -0
- package/chunks/errors-XGAGG2S2.js +92 -0
- package/chunks/esm-K5FARBNI.js +5548 -0
- package/chunks/{exit-worktree-4TEYVIVP.js → exit-worktree-C4276VPP.js} +53 -50
- package/chunks/exitPlanMode-MM5HIRUF.js +77 -0
- package/chunks/{fast-path-HYE7IFEV.js → fast-path-PIXYOHCH.js} +17 -3
- package/chunks/{fr-45RLL55O.js → fr-QF7RI5ZE.js} +52 -6
- package/chunks/{gemini-NGRQX3YJ.js → gemini-43RLVUNP.js} +171 -109
- package/chunks/{geminiContentGenerator-FQHPFZSR.js → geminiContentGenerator-PNQ4TSID.js} +7 -7
- package/chunks/{getMachineId-bsd-V7W3GODC.js → getMachineId-bsd-FG7IUY6U.js} +1 -1
- package/chunks/{getMachineId-darwin-TDO75DQP.js → getMachineId-darwin-GLCJI2RA.js} +1 -1
- package/chunks/{getMachineId-linux-TF43WQT2.js → getMachineId-linux-O6OPPAKO.js} +1 -1
- package/chunks/{getMachineId-unsupported-ZGUO3TXT.js → getMachineId-unsupported-S6CKYVGC.js} +1 -1
- package/chunks/{getMachineId-win-ECFYZZFQ.js → getMachineId-win-X5SRNEH7.js} +1 -1
- package/chunks/{glob-FRTM3X2E.js → glob-ZMBQKAU5.js} +53 -50
- package/chunks/goal-tools-Y767F7LZ.js +335 -0
- package/chunks/{grep-RKWVROCW.js → grep-HSV37W2Q.js} +55 -51
- package/chunks/handleAutoUpdate-QDHZPBAY.js +85 -0
- package/chunks/i18n-ME22A6RN.js +101 -0
- package/chunks/{image-gen-WIEM7KZA.js → image-gen-IFC7ZWSB.js} +12 -12
- package/chunks/initializer-J7H2CHVB.js +90 -0
- package/chunks/installationInfo-R7FXPQN5.js +84 -0
- package/chunks/{ja-B7DF7DFG.js → ja-URQESVGW.js} +52 -6
- package/chunks/{keychain-token-storage-MDTG3WRM.js → keychain-token-storage-7BT4TQ2A.js} +3 -3
- package/chunks/{kittyProtocolDetector-MBRTDRBK.js → kittyProtocolDetector-BFLAKYXH.js} +1 -1
- package/chunks/lib-RUF3WZA6.js +9 -0
- package/chunks/list-OYDIBA4N.js +93 -0
- package/chunks/{list-agents-5KJJHR6I.js → list-agents-GATIBBQQ.js} +3 -3
- package/chunks/loadedSettingsAdapter-OK6GK2GE.js +87 -0
- package/chunks/{loggingContentGenerator-WGM27QAW.js → loggingContentGenerator-U4ZEG4GL.js} +66 -50
- package/chunks/{loop-wakeup-FXKNNYSY.js → loop-wakeup-3DZMQQQQ.js} +15 -8
- package/chunks/{ls-NTK6VOQJ.js → ls-7F4GHXIH.js} +5 -5
- package/chunks/{lsp-2JI24STP.js → lsp-6FEHVBWI.js} +3 -3
- package/chunks/{managed-npm-update-JQ2CG3RH.js → managed-npm-update-PGKAJLLO.js} +52 -49
- package/chunks/mcp-S4DXJD2G.js +87 -0
- package/chunks/{monitor-7FEWXX5F.js → monitor-E5ZFMT74.js} +53 -50
- package/chunks/nonInteractiveCli-HNOHKEPE.js +149 -0
- package/chunks/{notebook-edit-JGJV2K6J.js → notebook-edit-6QDN6VZJ.js} +53 -50
- package/chunks/{openaiContentGenerator-JPVXDTAO.js → openaiContentGenerator-3NLB2C5O.js} +25 -27
- package/chunks/pidfile-ZMOIUGG6.js +90 -0
- package/chunks/process-registry-2CHQBXH5.js +157 -0
- package/chunks/{processUtils-V2LCK6T6.js → processUtils-E4QGQVWW.js} +2 -2
- package/chunks/{pt-22Q3FP73.js → pt-EEEQXRUI.js} +52 -6
- package/chunks/{qwenContentGenerator-TICV2W2Z.js → qwenContentGenerator-2LFRWJTM.js} +57 -54
- package/chunks/{qwenOAuth2-XGFI5XJG.js → qwenOAuth2-N32BUQDC.js} +10 -10
- package/chunks/read-file-GLDCWZBG.js +29 -0
- package/chunks/{read-mcp-resource-4DKQWGHD.js → read-mcp-resource-AFS3UKZO.js} +4 -4
- package/chunks/record-artifact-ECZSCEG5.js +21 -0
- package/chunks/resumeHistoryUtils-F5BE5QDW.js +95 -0
- package/chunks/ripGrep-T23Y4AGY.js +77 -0
- package/chunks/{ru-FZCNZHDC.js → ru-WGZDYQAB.js} +52 -6
- package/chunks/{run-qwen-serve-3VCV4I7E.js → run-qwen-serve-TI2HGLLU.js} +1155 -272
- package/chunks/runtime-WCWM3DO7.js +125 -0
- package/chunks/{scheduler-RS2I6RU5.js → scheduler-2QZO5AV5.js} +51 -48
- package/chunks/{sdk-exporters-grpc-AK3LGHNO.js → sdk-exporters-grpc-54L4LS5L.js} +4 -4
- package/chunks/{sdk-exporters-http-FS6ZV7MF.js → sdk-exporters-http-IKNWQJNV.js} +7 -7
- package/chunks/{sdk-impl-7FZSCSXB.js → sdk-impl-7CUUMQDB.js} +10 -10
- package/chunks/{send-message-Q6OOR6BR.js → send-message-X7G2JSII.js} +8 -13
- package/chunks/serve-DZOMYUFU.js +93 -0
- package/chunks/{server-HRZ23U7M.js → server-N4AJRKIQ.js} +5299 -1584
- package/chunks/{session-7XHZKTVV.js → session-GS6AKMN7.js} +167 -102
- package/chunks/{settings-7ZGZDXAS.js → settings-CUN3SELH.js} +56 -53
- package/chunks/shell-NGBFVXC5.js +87 -0
- package/chunks/{skill-LIWXNLDW.js → skill-SC2BSO75.js} +35 -23
- package/chunks/skill-settings-XVPCPW5K.js +95 -0
- package/chunks/spawnChannel-RILO4YY3.js +86 -0
- package/chunks/standalone-update-TMLT6LVJ.js +96 -0
- package/chunks/{startInteractiveUI-IW3CSKHA.js → startInteractiveUI-J45WOEOU.js} +1343 -1230
- package/chunks/{syntheticOutput-I3757IWH.js → syntheticOutput-FHRY3BPQ.js} +4 -4
- package/chunks/task-create-LAQXBIHC.js +26 -0
- package/chunks/{task-list-FOPULZEP.js → task-list-V6K5DRDH.js} +8 -8
- package/chunks/{task-stop-H6RHXFVQ.js → task-stop-LQXE52L6.js} +3 -3
- package/chunks/{task-update-M57TFZJT.js → task-update-NXRCXSPB.js} +13 -12
- package/chunks/{team-create-O2FROQ4R.js → team-create-W3EVWCTA.js} +55 -52
- package/chunks/{team-delete-QE2UXJL7.js → team-delete-Z4KGO7RC.js} +8 -8
- package/chunks/{team-plan-approval-Q6WDBXTQ.js → team-plan-approval-URYVKJF4.js} +53 -50
- package/chunks/theme-manager-CUAMS2NI.js +81 -0
- package/chunks/{todoWrite-VQ7FKOHL.js → todoWrite-OFIZDI7P.js} +34 -6
- package/chunks/{tool-search-APECNQ3Z.js → tool-search-DCICFL32.js} +21 -22
- package/chunks/total-session-admission-3ZTAXVUK.js +89 -0
- package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
- package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
- package/chunks/trustedFolders-EVCN36O5.js +99 -0
- package/chunks/{update-relaunch-ON5MDJQG.js → update-relaunch-XLW46RHQ.js} +5 -5
- package/chunks/updateCheck-ZHVXDAIH.js +96 -0
- package/chunks/useAutoAcceptIndicator-ZGD6BJSP.js +97 -0
- package/chunks/{validateNonInterActiveAuth-JBLKBKRD.js → validateNonInterActiveAuth-R3BAQFDY.js} +102 -97
- package/chunks/{version-LTNUBQJY.js → version-PMWREGCG.js} +1 -1
- package/chunks/{web-fetch-L5UTI53V.js → web-fetch-PGN27SGF.js} +19 -21
- package/chunks/{web-search-KM33JOS3.js → web-search-KW4UNMRE.js} +13 -13
- package/chunks/{workflow-K7FAWV77.js → workflow-SN3TJBTJ.js} +374 -323
- package/chunks/workspace-providers-status-O3HUZGGR.js +90 -0
- package/chunks/{workspace-registration-store-6TGVDJV5.js → workspace-registration-store-M3FJ74RS.js} +2 -2
- package/chunks/workspace-registry-U7ISW23N.js +97 -0
- package/chunks/workspace-service-VH6IWADT.js +104 -0
- package/chunks/workspace-skills-status-XANARSZS.js +90 -0
- package/chunks/workspace-trust-reconciler-35EFR4GC.js +350 -0
- package/chunks/write-file-NCRSGUDT.js +79 -0
- package/chunks/xterm-headless-NTYVIBT3.js +3475 -0
- package/chunks/{zh-LUIGBD55.js → zh-OHX23Q44.js} +52 -6
- package/chunks/{zh-TW-F5KG2IYD.js → zh-TW-4G7YKDAQ.js} +52 -6
- package/chunks/zoom-image-X7CIADYC.js +224 -0
- package/cli.js +55 -48
- package/locales/ca.js +67 -6
- package/locales/de.js +69 -6
- package/locales/en.js +69 -6
- package/locales/fr.js +71 -6
- package/locales/ja.js +68 -6
- package/locales/pt.js +67 -6
- package/locales/ru.js +70 -6
- package/locales/zh-TW.js +62 -6
- package/locales/zh.js +62 -6
- package/package.json +5 -4
- package/web-shell/assets/{arc-BbHijhiN.js → arc-CaMTqKio.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-Cb4B_JD0.js → architectureDiagram-3BPJPVTR-Bjxztij2.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-Dsjlh3H-.js → blockDiagram-GPEHLZMM-BYJzeHi9.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-Cp5AeR4U.js → c4Diagram-AAUBKEIU-fYAa-Eil.js} +1 -1
- package/web-shell/assets/channel-LEZei0-5.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CLcY7W2e.js → chunk-2J33WTMH-B1OTlTml.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BUhvY2LR.js → chunk-4BX2VUAB-DNj4uy6k.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-kDIFC_71.js → chunk-55IACEB6-DAqNmg3c.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-CIBO15f2.js → chunk-727SXJPM-BwB4ddxE.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BJ_T_slV.js → chunk-AQP2D5EJ-DmHR_UZs.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-BEkW35J8.js → chunk-FMBD7UC4-BlfOXumo.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-GGPxofay.js → chunk-ND2GUHAM-BKogiSy7.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-Bifllrb6.js → chunk-QZHKN3VN-DEclVrOF.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BiaRhfvf.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BiaRhfvf.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-C-Add_Dp.js → cose-bilkent-S5V4N54A-CwtS21WT.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-B7MfwNq2.js → dagre-BM42HDAG-BAAIlB4p.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-CY_0zuDz.js → diagram-2AECGRRQ-ChljtF_V.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-VyYSbCgA.js → diagram-5GNKFQAL-BIXVd31-.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CBiIZ2PL.js → diagram-KO2AKTUF-BEiBaS15.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BL3CrVOx.js → diagram-LMA3HP47-C-g4tWKM.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CZUPx96P.js → diagram-OG6HWLK6-CNCCbNQG.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-B81xHr1-.js → erDiagram-TEJ5UH35-v8ysnsdI.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-EZWhir-J.js → flowDiagram-I6XJVG4X-LKVlLjwA.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CVFSuIAg.js → ganttDiagram-6RSMTGT7-DA5MrKYG.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-C1H2uQDv.js → gitGraphDiagram-PVQCEYII-Cyg5fe6d.js} +1 -1
- package/web-shell/assets/index-BgOcEaVt.js +1756 -0
- package/web-shell/assets/index-C2GE3DAF.js +74 -0
- package/web-shell/assets/{index-BYo99NBH.js → index-CKdUkVVS.js} +1 -1
- package/web-shell/assets/index-DA5Lvscv.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-BwyFMlF8.js → infoDiagram-5YYISTIA-SLsfu3Qd.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CQ7Yhn2Y.js → ishikawaDiagram-YF4QCWOH-CmHOmTNx.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CJn2sf0l.js → journeyDiagram-JHISSGLW-C3gM_HFQ.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DaNRqwVN.js → kanban-definition-UN3LZRKU-BbHD7duM.js} +1 -1
- package/web-shell/assets/{linear-DCKODZe2.js → linear-CSBvm435.js} +1 -1
- package/web-shell/assets/{mermaid.core-CTGJOk27.js → mermaid.core-CPMw15lU.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BKU3_3rg.js → mindmap-definition-RKZ34NQL-C_tNqXQW.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-COcwBJ82.js → pieDiagram-4H26LBE5-DH_N-8yY.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CQnQ443x.js → quadrantDiagram-W4KKPZXB-CRbS8UkN.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CZ2oj5cD.js → requirementDiagram-4Y6WPE33-DJgdZPZn.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BxAv5mNu.js → sankeyDiagram-5OEKKPKP-vhL1y5zx.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CztaySPs.js → sequenceDiagram-3UESZ5HK-UQthhFwd.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CTQT1oGD.js → stateDiagram-AJRCARHV-CAywEm20.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-lfJQHw-7.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-K9Mkex5A.js → timeline-definition-PNZ67QCA-CLO8b3FD.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-B2rVIw76.js → vennDiagram-CIIHVFJN-BNAAh0Mu.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-Z1w2JR4M.js → wardley-L42UT6IY-CUY7bLpN.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CIX9aKXf.js → wardleyDiagram-YWT4CUSO-CSg_ORdW.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-CI9DLIKB.js → xychartDiagram-2RQKCTM6-BjffV208.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/MaxSizedBox-INHRH72H.js +0 -86
- package/chunks/agent-VXDAN5JK.js +0 -82
- package/chunks/agent-headless-K4ZMMNBD.js +0 -76
- package/chunks/bridge-LGPZCFHO.js +0 -91
- package/chunks/channel-settings-store-CHCDRTPY.js +0 -89
- package/chunks/chunk-HGT6JR3U.js +0 -177
- package/chunks/chunk-JZA3JUDJ.js +0 -82
- package/chunks/chunk-SZRN75WQ.js +0 -29
- package/chunks/chunk-UGYMA4EI.js +0 -219
- package/chunks/chunk-VCBZUOSI.js +0 -8575
- package/chunks/contextCommand-QIZYHDR5.js +0 -81
- package/chunks/daemon-status-provider-OS5UWBHV.js +0 -90
- package/chunks/earlyInputCapture-WQT24RWD.js +0 -83
- package/chunks/environment-VZ7BRI4Q.js +0 -103
- package/chunks/errors-PCX25DVP.js +0 -89
- package/chunks/exitPlanMode-GHPUHBZJ.js +0 -423
- package/chunks/handleAutoUpdate-2CZQRJ66.js +0 -82
- package/chunks/i18n-XEQVMRKN.js +0 -98
- package/chunks/initializer-OVGZ4FLY.js +0 -87
- package/chunks/installationInfo-5UUQJI6Y.js +0 -81
- package/chunks/list-HODU6RXD.js +0 -90
- package/chunks/loadedSettingsAdapter-TYNLBALY.js +0 -84
- package/chunks/mcp-J3DFWX4A.js +0 -84
- package/chunks/nonInteractiveCli-F4GYSMHT.js +0 -144
- package/chunks/pidfile-4VNAR3EP.js +0 -87
- package/chunks/read-file-LZXUR4TO.js +0 -31
- package/chunks/resumeHistoryUtils-65OX3SGJ.js +0 -92
- package/chunks/ripGrep-2U2FRGMV.js +0 -74
- package/chunks/runtime-AXJWIEDU.js +0 -120
- package/chunks/serve-W2GC47CM.js +0 -90
- package/chunks/shell-45IPBDP5.js +0 -84
- package/chunks/spawnChannel-PVXQ5AGV.js +0 -83
- package/chunks/src-AY65BYR7.js +0 -3166
- package/chunks/standalone-update-ZMFNKAEY.js +0 -93
- package/chunks/task-create-N7WQSGYA.js +0 -25
- package/chunks/theme-manager-YYPZFBAH.js +0 -78
- package/chunks/total-session-admission-JXES723M.js +0 -85
- package/chunks/trustedFolders-HVI7IXUH.js +0 -94
- package/chunks/updateCheck-WUJGHWZZ.js +0 -93
- package/chunks/useAutoAcceptIndicator-CHSTZLZD.js +0 -94
- package/chunks/workspace-providers-status-GAKSF4LL.js +0 -87
- package/chunks/workspace-registry-A7NQUONG.js +0 -89
- package/chunks/workspace-service-STGVSO4N.js +0 -99
- package/chunks/workspace-skills-status-66AK3DUA.js +0 -86
- package/chunks/write-file-HUUCEG4P.js +0 -74
- package/web-shell/assets/channel-Bzdx6E8P.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-Cd6wbiuK.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cd6wbiuK.js +0 -1
- package/web-shell/assets/index-B2bXx96W.js +0 -1249
- package/web-shell/assets/index-_8mKjx8q.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BjMdT6E_.js +0 -1
- package/chunks/{chunk-TARRHLLG.js → chunk-QUGAUQGJ.js} +25 -25
- package/chunks/{chunk-U7ZFW55U.js → chunk-VOQXFAY5.js} +977 -977
- /package/chunks/{chunk-LXXMOYPL.js → chunk-VXZBKKQR.js} +0 -0
|
@@ -94,6 +94,8 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
94
94
|
"generationConfig": {
|
|
95
95
|
"timeout": 60000,
|
|
96
96
|
"maxRetries": 3,
|
|
97
|
+
"retryInitialDelayMs": 3000,
|
|
98
|
+
"retryMaxDelayMs": 30000,
|
|
97
99
|
"enableCacheControl": true,
|
|
98
100
|
"contextWindowSize": 128000,
|
|
99
101
|
"modalities": {
|
|
@@ -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 | Retired in the terminal UI. The CLI now always shows the compact, type-based tool view in the main transcript; press `Ctrl+O` to
|
|
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 toggle expanded detail mode (expand or collapse all thinking blocks and tool outputs inline) 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` |
|
|
@@ -157,28 +157,28 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
157
157
|
|
|
158
158
|
#### model
|
|
159
159
|
|
|
160
|
-
| Setting | Type | Description
|
|
161
|
-
| -------------------------------------------------- | ------- |
|
|
162
|
-
| `model.name` | string | The Qwen model to use for conversations.
|
|
163
|
-
| `model.reasoningEffort` | enum | How hard reasoning-capable models think, applied across all providers. Set with the [`/effort`](../features/commands) command (`low`, `medium`, `high`, `xhigh`, `max`). Each provider maps and clamps this to what the active model supports (e.g. Gemini caps at `high`; Anthropic clamps tiers a model lacks). Leave unset to use the model/provider default.
|
|
164
|
-
| `model.baseUrl` | string | Persisted automatically by the model picker to disambiguate when multiple `modelProviders` entries share the same model id. Not intended to be set by hand — use the `/model` picker or a `modelProviders` entry instead; a stale hand-edited value can silently route requests to a different same-id provider.
|
|
165
|
-
| `model.sessionTokenLimit` | number | Maximum recorded prompt token count allowed before sending the next message. `-1` means unlimited; `0` is also treated as unlimited (unlike `model.maxToolCalls`, where `0` disallows all calls). When the recorded prompt count exceeds the limit, the next send is dropped (the session is not aborted).
|
|
166
|
-
| `model.maxSessionTurns` | integer | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited.
|
|
167
|
-
| `model.maxWallTimeSeconds` | number | Wall-clock budget for headless / unattended runs, in seconds. `-1` means unlimited. Overridable per-invocation via `--max-wall-time`, which requires a positive duration (`90`, `30s`, `5m`, `1h`, `1.5h`); the minimum is 1 second — sub-second values (`500ms`, `0.5`) are rejected as typos. Omit the flag to fall back to this setting. Aborts with exit code 55 when exceeded.
|
|
168
|
-
| `model.maxToolCalls` | number | Cumulative tool-call budget for a run (counts every executed tool, success or failure; `structured_output` under `--json-schema` is exempt). `-1` means unlimited; `0` means "no tool calls allowed". Capped at 1,000,000 to catch typos. Overridable via `--max-tool-calls`. Aborts with exit code 55 when exceeded.
|
|
169
|
-
| `model.maxSubagentDepth` | number | Maximum sub-agent nesting depth (1-based levels: a top-level sub-agent is level 1). `1` keeps sub-agents available but disables nesting — the pre-nesting behavior. Values clamp to the range 1–100; non-finite values fall back to the default. Teammates, forks, and workflow-spawned agents never nest regardless of this setting. Overridable via `--max-subagent-depth`.
|
|
170
|
-
| `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `enableCacheControl`, `splitToolMedia` (default `true`; splits tool-returned media — including images read by the built-in read_file — into a follow-up user message instead of the spec-violating `role: "tool"` message, so strict OpenAI-compatible servers like doubao / new-api / LM Studio can see it; set `false` to restore the legacy embed-in-tool behavior), `toolResultContentFormat` (default `"parts"`; set `"string"` only for legacy OpenAI-compatible runtimes whose tool templates ignore text content parts), `contextWindowSize` (override model's context window size), `modalities` (override auto-detected input modalities), `customHeaders` (custom HTTP headers for API requests), and `extra_body` (additional body parameters for OpenAI-compatible API requests only), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
|
|
171
|
-
| `model.chatCompression.contextPercentageThreshold` | number | **REMOVED.** Replaced by `context.autoCompactThreshold` (see `#### context` section below). Auto-compaction now uses a three-tier threshold ladder (warn / auto / hard) computed internally from the model's context window via the `computeThresholds()` function. The old setting is silently ignored (no startup warning). See PR #4345 / `docs/design/auto-compaction-threshold-redesign.md` for the redesign rationale.
|
|
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`.
|
|
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`.
|
|
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`).
|
|
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`.
|
|
176
|
-
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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).
|
|
160
|
+
| Setting | Type | Description | Default |
|
|
161
|
+
| -------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
162
|
+
| `model.name` | string | The Qwen model to use for conversations. | `undefined` |
|
|
163
|
+
| `model.reasoningEffort` | enum | How hard reasoning-capable models think, applied across all providers. Set with the [`/effort`](../features/commands) command (`low`, `medium`, `high`, `xhigh`, `max`). Each provider maps and clamps this to what the active model supports (e.g. Gemini caps at `high`; Anthropic clamps tiers a model lacks). Leave unset to use the model/provider default. | `undefined` |
|
|
164
|
+
| `model.baseUrl` | string | Persisted automatically by the model picker to disambiguate when multiple `modelProviders` entries share the same model id. Not intended to be set by hand — use the `/model` picker or a `modelProviders` entry instead; a stale hand-edited value can silently route requests to a different same-id provider. | `undefined` |
|
|
165
|
+
| `model.sessionTokenLimit` | number | Maximum recorded prompt token count allowed before sending the next message. `-1` means unlimited; `0` is also treated as unlimited (unlike `model.maxToolCalls`, where `0` disallows all calls). When the recorded prompt count exceeds the limit, the next send is dropped (the session is not aborted). | `-1` |
|
|
166
|
+
| `model.maxSessionTurns` | integer | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited. | `-1` |
|
|
167
|
+
| `model.maxWallTimeSeconds` | number | Wall-clock budget for headless / unattended runs, in seconds. `-1` means unlimited. Overridable per-invocation via `--max-wall-time`, which requires a positive duration (`90`, `30s`, `5m`, `1h`, `1.5h`); the minimum is 1 second — sub-second values (`500ms`, `0.5`) are rejected as typos. Omit the flag to fall back to this setting. Aborts with exit code 55 when exceeded. | `-1` |
|
|
168
|
+
| `model.maxToolCalls` | number | Cumulative tool-call budget for a run (counts every executed tool, success or failure; `structured_output` under `--json-schema` is exempt). `-1` means unlimited; `0` means "no tool calls allowed". Capped at 1,000,000 to catch typos. Overridable via `--max-tool-calls`. Aborts with exit code 55 when exceeded. | `-1` |
|
|
169
|
+
| `model.maxSubagentDepth` | number | Maximum sub-agent nesting depth (1-based levels: a top-level sub-agent is level 1). `1` keeps sub-agents available but disables nesting — the pre-nesting behavior. Values clamp to the range 1–100; non-finite values fall back to the default. Teammates, forks, and workflow-spawned agents never nest regardless of this setting. Overridable via `--max-subagent-depth`. | `5` |
|
|
170
|
+
| `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `retryInitialDelayMs`, `retryMaxDelayMs`, `enableCacheControl`, `splitToolMedia` (default `true`; splits tool-returned media — including images read by the built-in read_file — into a follow-up user message instead of the spec-violating `role: "tool"` message, so strict OpenAI-compatible servers like doubao / new-api / LM Studio can see it; set `false` to restore the legacy embed-in-tool behavior), `toolResultContentFormat` (default `"parts"`; set `"string"` only for legacy OpenAI-compatible runtimes whose tool templates ignore text content parts), `contextWindowSize` (override model's context window size), `modalities` (override auto-detected input modalities), `customHeaders` (custom HTTP headers for API requests), and `extra_body` (additional body parameters for OpenAI-compatible API requests only), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
|
|
171
|
+
| `model.chatCompression.contextPercentageThreshold` | number | **REMOVED.** Replaced by `context.autoCompactThreshold` (see `#### context` section below). Auto-compaction now uses a three-tier threshold ladder (warn / auto / hard) computed internally from the model's context window via the `computeThresholds()` function. The old setting is silently ignored (no startup warning). See PR #4345 / `docs/design/auto-compaction-threshold-redesign.md` for the redesign rationale. | `N/A` |
|
|
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
|
+
| `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
|
+
| `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`. | `20` |
|
|
176
|
+
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `true` |
|
|
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 | 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
|
+
| `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
|
+
| `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
|
+
| `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` |
|
|
182
182
|
|
|
183
183
|
**Example model.generationConfig:**
|
|
184
184
|
|
|
@@ -337,6 +337,7 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
|
|
|
337
337
|
| `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) |
|
|
338
338
|
| `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 |
|
|
339
339
|
| `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 |
|
|
340
|
+
| `tools.toolSearch.threshold` | number | Context-window percentage used as the session-start budget for preloading deferred tools (bundled built-ins and MCP alike). When the combined schemas of every deferred tool fit within this budget, they are all declared upfront instead of loaded on demand via ToolSearch — a stable declaration list keeps prefix KV caches valid for the whole session. Set `0` to always load deferred tools on demand. | `10` | Requires restart: Yes |
|
|
340
341
|
|
|
341
342
|
> [!note]
|
|
342
343
|
>
|
|
@@ -358,9 +359,11 @@ See [Memory](../features/memory) for details on how auto-memory works and how to
|
|
|
358
359
|
|
|
359
360
|
#### agents
|
|
360
361
|
|
|
361
|
-
| Setting | Type
|
|
362
|
-
| ----------------------------- |
|
|
363
|
-
| `agents.builtin.exploreModel` | string
|
|
362
|
+
| Setting | Type | Description | Default |
|
|
363
|
+
| ----------------------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
364
|
+
| `agents.builtin.exploreModel` | string | Model selector for the built-in Explore subagent. Use `inherit` for the main session model, `fast` for `fastModel`, a model ID, or an `authType:model-id` selector. A custom same-name Explore agent keeps its own model configuration. Requires restart. | `inherit` |
|
|
365
|
+
| `agents.modelGrades` | object | Maps semantic grade names exposed to the Agent tool to model selectors. Requires restart. | `undefined` |
|
|
366
|
+
| `agents.allowedGrades` | array of strings | Optional whitelist of configured model grades the Agent tool may use. Requires restart. | `undefined` |
|
|
364
367
|
|
|
365
368
|
#### permissions
|
|
366
369
|
|
|
@@ -494,9 +497,14 @@ execute when typed.
|
|
|
494
497
|
|
|
495
498
|
Controls which [Skills](../features/skills) are exposed to the model.
|
|
496
499
|
|
|
497
|
-
| Setting
|
|
498
|
-
|
|
|
499
|
-
| `skills.
|
|
500
|
+
| Setting | Type | Description | Default |
|
|
501
|
+
| ------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- |
|
|
502
|
+
| `skills.disabledLevels` | array of strings | Skill discovery levels to skip entirely. Supported values are `project`, `user`, `extension`, and `bundled`. Merged as a union across settings scopes. Use `["bundled"]` to hide every bundled skill while retaining host-provided skills. Note: `skills.directories` entries are discovered at the `user` level, so `["user"]` hides those too. | `undefined` |
|
|
503
|
+
| `skills.disabled` | array of strings | Hard-disabled skill names. Matched case-insensitively and **merged as a union** across settings scopes, so project settings cannot override a user or system entry. Hidden skills do not appear in `<available_skills>` or as `/<name>` slash commands. | `undefined` |
|
|
504
|
+
| `skills.defaultDisabled` | array of strings | Skill names that start disabled but can be opted into through `skills.enabled`. Matched case-insensitively and merged as a union across settings scopes. | `undefined` |
|
|
505
|
+
| `skills.enabled` | array of strings | Explicit opt-ins that override matching `skills.defaultDisabled` entries. Matched case-insensitively and merged as a union across settings scopes. This setting cannot override `skills.disabled` or re-enable skills from a `skills.disabledLevels`-excluded level. | `undefined` |
|
|
506
|
+
|
|
507
|
+
The precedence is `skills.disabled` > `skills.enabled` > `skills.defaultDisabled`. For example, a user can put a skill in `defaultDisabled` and a project can add the same name to `enabled`; a hard `disabled` entry at any scope still wins.
|
|
500
508
|
|
|
501
509
|
#### mcp
|
|
502
510
|
|
|
@@ -551,6 +559,7 @@ LSP server configuration is done through `.lsp.json` files in your project root
|
|
|
551
559
|
| -------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
|
|
552
560
|
| `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
561
|
| `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` |
|
|
562
|
+
| `experimental.sessionWriterLease` | boolean | Enable cross-process write fencing for persisted ACP and daemon sessions. The value is frozen when the ACP or daemon process starts. All concurrent ACP writers must enable the setting; mixed versions or configurations remain unsafe. Interactive and headless recorders are unaffected. Requires process restart. | `false` |
|
|
554
563
|
| `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
564
|
| `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
565
|
| `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` |
|
|
@@ -586,6 +595,7 @@ Configures logging and metrics collection for Qwen Code. For more information, s
|
|
|
586
595
|
| `telemetry.otlpEndpoint` | string | The endpoint for the OTLP Exporter. | |
|
|
587
596
|
| `telemetry.otlpProtocol` | string | The protocol for the OTLP Exporter (`grpc` or `http`). | |
|
|
588
597
|
| `telemetry.logPrompts` | boolean | Whether or not to include the content of user prompts in the logs. | |
|
|
598
|
+
| `telemetry.userId` | string | Stable end-user identifier written to GenAI spans as the ARMS extension `gen_ai.user.id`. Prefer a pseudonymous value. Do not set a process-wide value for a shared multi-user daemon or channel instance. | |
|
|
589
599
|
| `telemetry.includeSensitiveSpanAttributes` | boolean | When enabled, attaches verbatim user prompts, system prompts, tool inputs/outputs, and model responses to native OTel span attributes (in addition to log-to-span bridge spans). ⚠️ Streams sensitive data — file contents, shell commands, conversation history — to your OTLP backend. | `false` |
|
|
590
600
|
| `telemetry.sensitiveSpanAttributeMaxLength` | number | Maximum JavaScript string length for each sensitive native OTel span attribute content payload. Must be between `1` and `104857600` (100 MiB). Set lower if your collector or backend rejects large attributes. | `1048576` |
|
|
591
601
|
| `telemetry.outfile` | string | Path to write telemetry to a file. When set, overrides OTLP export. | |
|
|
@@ -632,6 +642,7 @@ Here is an example of a `settings.json` file with the nested structure, new as o
|
|
|
632
642
|
"target": "local",
|
|
633
643
|
"otlpEndpoint": "http://localhost:4317",
|
|
634
644
|
"logPrompts": true,
|
|
645
|
+
"userId": "user-079458",
|
|
635
646
|
"includeSensitiveSpanAttributes": false,
|
|
636
647
|
"sensitiveSpanAttributeMaxLength": 1048576
|
|
637
648
|
},
|
|
@@ -689,6 +700,7 @@ For authentication-related variables (like `OPENAI_*`) and the recommended `.qwe
|
|
|
689
700
|
| `QWEN_TELEMETRY_OTLP_ENDPOINT` | Sets the OTLP endpoint for telemetry. | Overrides the `telemetry.otlpEndpoint` setting. |
|
|
690
701
|
| `QWEN_TELEMETRY_OTLP_PROTOCOL` | Sets the OTLP protocol (`grpc` or `http`). | Overrides the `telemetry.otlpProtocol` setting. |
|
|
691
702
|
| `QWEN_TELEMETRY_LOG_PROMPTS` | Set to `true` or `1` to enable or disable logging of user prompts. Any other value is treated as disabling it. | Overrides the `telemetry.logPrompts` setting. |
|
|
703
|
+
| `QWEN_TELEMETRY_USER_ID` | Sets a stable end-user identifier on interaction, LLM, Tool, and Agent spans as `gen_ai.user.id`. Prefer a pseudonymous value. | Overrides `telemetry.userId` after trimming. A blank value falls back to settings. This is process-wide and must not be used as per-request identity in a shared multi-user process. |
|
|
692
704
|
| `QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES` | Set to `true` or `1` to attach verbatim user prompts, system prompts, tool I/O, and model responses to native OTel span attributes (and keep `prompt` / `function_args` / `response_text` on log-to-span bridge spans). Any other value disables it. | Overrides the `telemetry.includeSensitiveSpanAttributes` setting. ⚠️ Streams sensitive data to your OTLP backend. |
|
|
693
705
|
| `QWEN_TELEMETRY_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH` | Sets the maximum JavaScript string length for each sensitive native OTel span attribute content payload. Must be a positive integer no greater than `104857600` (100 MiB). | Overrides the `telemetry.sensitiveSpanAttributeMaxLength` setting. Default is `1048576` (1 MiB); lower it if your collector or backend rejects large span attributes. |
|
|
694
706
|
| `QWEN_TELEMETRY_OUTFILE` | Sets the file path to write telemetry to. When set, overrides OTLP export. | Overrides the `telemetry.outfile` setting. |
|
|
@@ -844,7 +856,7 @@ To help us improve Qwen Code, we collect anonymized usage statistics. This data
|
|
|
844
856
|
|
|
845
857
|
**What we collect:**
|
|
846
858
|
|
|
847
|
-
- **Tool Calls:** We log the names of the tools that are called,
|
|
859
|
+
- **Tool Calls:** We log the names and categories (native or MCP) of the tools that are called, their terminal status (success, error, or cancelled), and how long they take to execute. We do not collect the arguments passed to the tools or any data returned by them.
|
|
848
860
|
- **API Requests:** We log the model used for each request, the duration of the request, and whether it was successful. We do not collect the content of the prompts or responses.
|
|
849
861
|
- **Session Information:** We collect information about the configuration of the CLI, such as the enabled tools and the approval mode.
|
|
850
862
|
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# GitHub
|
|
2
|
+
|
|
3
|
+
This guide covers setting up a Qwen Code channel that monitors GitHub notifications and responds to mentions, review requests, assignments, and followed-thread activity.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- A GitHub account for the channel. Use a dedicated bot account when the PAT
|
|
8
|
+
owner also needs to operate the channel.
|
|
9
|
+
- A GitHub Personal Access Token (PAT) with `notifications` and `public_repo` (or `repo`) scopes
|
|
10
|
+
|
|
11
|
+
## Creating a Token
|
|
12
|
+
|
|
13
|
+
1. Go to **Settings → Developer settings → Personal access tokens → Tokens (classic)**
|
|
14
|
+
2. Generate a token with these scopes:
|
|
15
|
+
- **notifications** — read notification threads
|
|
16
|
+
- **public_repo** (or **repo** for private repos) — post comments
|
|
17
|
+
3. Save the token securely as an environment variable
|
|
18
|
+
|
|
19
|
+
## Configuration
|
|
20
|
+
|
|
21
|
+
Add the channel to `~/.qwen/settings.json`:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"channels": {
|
|
26
|
+
"my-github": {
|
|
27
|
+
"type": "github",
|
|
28
|
+
"token": "$GITHUB_TOKEN",
|
|
29
|
+
"pollInterval": 60000,
|
|
30
|
+
"reasonFilter": ["mention", "review_requested", "assign"],
|
|
31
|
+
"senderPolicy": "allowlist",
|
|
32
|
+
"allowedUsers": ["operator-github-username"],
|
|
33
|
+
"sessionScope": "chat_thread",
|
|
34
|
+
"cwd": "/path/to/your/project",
|
|
35
|
+
"blockStreaming": "off",
|
|
36
|
+
"groupPolicy": "open",
|
|
37
|
+
"groups": {
|
|
38
|
+
"*": { "requireMention": true }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Set the token as an environment variable:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
export GITHUB_TOKEN="ghp_your_token_here"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The PAT owner cannot trigger its own channel: GitHub self-activity does not
|
|
52
|
+
provide a usable notification, and the adapter intentionally ignores its own
|
|
53
|
+
comments to prevent reply loops. If the PAT owner needs to operate the channel,
|
|
54
|
+
use a separate bot-owned PAT and put only operator accounts in `allowedUsers`.
|
|
55
|
+
Startup rejects an allowlist containing only the PAT owner and warns when the
|
|
56
|
+
PAT owner appears alongside other operators.
|
|
57
|
+
|
|
58
|
+
### GitHub Enterprise
|
|
59
|
+
|
|
60
|
+
For GitHub Enterprise Server, set `baseUrl`:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"baseUrl": "https://github.example.com/api/v3"
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Configuration Options
|
|
69
|
+
|
|
70
|
+
| Option | Default | Description |
|
|
71
|
+
| ------------------------- | ------------------------ | --------------------------------------------------------------------------------------------- |
|
|
72
|
+
| `token` | (required) | Classic PAT with `notifications` scope |
|
|
73
|
+
| `pollInterval` | `60000` | Poll interval in ms |
|
|
74
|
+
| `baseUrl` | `https://api.github.com` | API base URL (for GHE) |
|
|
75
|
+
| `groupPolicy` | `"disabled"` | Must be `"open"` for notifications to flow |
|
|
76
|
+
| `senderPolicy` | `"allowlist"` | Who can trigger the bot |
|
|
77
|
+
| `groups.*.requireMention` | `true` | Require @mentions for ordinary comments; directed notification reasons still run |
|
|
78
|
+
| `blockStreaming` | `"off"` | Always forced to `"off"`; intermediate model chunks aren't published; `"on"` is not supported |
|
|
79
|
+
| `reasonFilter` | unset | Optional allowlist of GitHub notification reasons to process |
|
|
80
|
+
|
|
81
|
+
Use `reasonFilter` to drop noisy notification classes such as `ci_activity` or `state_change`. Do not use `reasonFilter: ["mention"]` as a replacement for `groups.*.requireMention`: GitHub's `mention` reason is sticky at the thread level, so real new @mentions can arrive later under `comment`, `subscribed`, `author`, or other reasons and would be skipped.
|
|
82
|
+
|
|
83
|
+
Valid `reasonFilter` values are `mention`, `review_requested`, `assign`, `author`, `comment`, `ci_activity`, `manual`, `state_change`, `subscribed`, `team_mention`, `security_alert`, `approval_requested`, `invitation`, `member_feature_requested`, and `security_advisory_credit`.
|
|
84
|
+
|
|
85
|
+
Filtered notifications are still marked read before they are skipped. Removing the filter later will not replay notifications the channel already skipped.
|
|
86
|
+
|
|
87
|
+
## ⚠️ Security
|
|
88
|
+
|
|
89
|
+
On a **public repository**, setting `senderPolicy: "open"` allows **any GitHub user** who triggers a supported notification reason to submit prompts that drive the agent in your `cwd`. This includes reading code, spending tokens, posting comments, and (subject to permission policy) running tools.
|
|
90
|
+
|
|
91
|
+
Always use `senderPolicy: "allowlist"` with explicit `allowedUsers` on public repos.
|
|
92
|
+
|
|
93
|
+
Allowlist and pairing entries follow the **username**, not the immutable account ID. If an allowlisted user renames their GitHub account, remove the stale entry — GitHub releases the old username for anyone else to claim, and the new holder would inherit the allowlist/pairing authorization.
|
|
94
|
+
|
|
95
|
+
## Mention Detection
|
|
96
|
+
|
|
97
|
+
The adapter detects mentions by scanning comment text and first-contact issue or PR bodies for `@bot-username` using a case-insensitive regex. It does not trust `reason: "mention"` alone because that value is sticky at the thread level. Other reasons select review, triage, followed-thread, or fallback prompts.
|
|
98
|
+
|
|
99
|
+
## How It Works
|
|
100
|
+
|
|
101
|
+
The adapter uses GitHub's Notifications API as a wake-up signal:
|
|
102
|
+
|
|
103
|
+
1. **Poll** `GET /notifications` for unread threads
|
|
104
|
+
2. **Mark read** via `markNotificationsAsRead` (best-effort cleanup, before processing)
|
|
105
|
+
3. **Enumerate** comments via `listComments` within a cursor-based time window
|
|
106
|
+
4. **Dispatch** by notification reason: strict mention matching, pull request review, issue triage, followed-thread comment aggregation, or per-comment fallback
|
|
107
|
+
5. **First-contact fallback**: a brand-new unread issue/PR body can be processed when no comment was dispatched; mention notifications still require an actual body mention
|
|
108
|
+
|
|
109
|
+
The comment window is `(previousCursor, currentMaxUpdatedAt]` — comments already eligible in a previous poll cycle are excluded by the cursor, preventing duplicate replies even when the async mark-read has not taken effect. If the process crashes mid-processing, the user can re-mention the bot to retry.
|
|
110
|
+
|
|
111
|
+
Non-comment activity (push, label changes) bumps the notification's `updated_at` but produces zero new comments in the window, so re-fetched threads are skipped without triggering the agent.
|
|
112
|
+
|
|
113
|
+
## Response Feedback
|
|
114
|
+
|
|
115
|
+
For an accepted issue or pull-request comment, the channel adds GitHub's `👀` reaction while the agent is working, then removes it when the run completes, fails, or is cancelled. Both operations are best-effort: a reaction API or permission failure is logged and never prevents the final response.
|
|
116
|
+
|
|
117
|
+
### Final-only output
|
|
118
|
+
|
|
119
|
+
The GitHub channel always forces final-only delivery. The adapter sets `blockStreaming` to `"off"`, so intermediate model chunks are never published as separate comments and `blockStreaming: "on"` is not supported.
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"blockStreaming": "off"
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
If GitHub returns a definite no-write delivery failure, such as a rate-limit
|
|
128
|
+
response, the channel stores the final reply in
|
|
129
|
+
`~/.qwen/channels/<workspace-scope>/<channel>-<name-hash>-github-pending-deliveries.json`
|
|
130
|
+
with private file permissions and retries it on the next channel start.
|
|
131
|
+
Ambiguous delivery failures are not retried automatically because GitHub may
|
|
132
|
+
have created the comment.
|
|
133
|
+
|
|
134
|
+
## Known Limitations
|
|
135
|
+
|
|
136
|
+
- **First start skips existing unread notifications.** The cursor initializes to "now" on first launch. Notifications created before the bot starts are not processed unless the thread receives new activity afterwards.
|
|
137
|
+
- If a user marks a notification as read on github.com before the bot's poll cycle, the bot will not process it.
|
|
138
|
+
- The bot does not read comments before the current polling window; `author` and `comment` notifications may aggregate up to 20 comments from that window.
|
|
139
|
+
- Inline PR review comments and review summary bodies are not enumerated; only issue/PR comments are processed.
|
|
140
|
+
- Requires a classic PAT with `notifications` scope. Fine-grained PATs do not support the notifications API.
|
|
141
|
+
|
|
142
|
+
## Starting the Channel
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
qwen channel start my-github
|
|
146
|
+
```
|