@qwen-code/qwen-code 0.21.4 → 0.21.5-nightly.20260805.32e274157
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 +8 -7
- package/bundled/qc-helper/docs/configuration/settings.md +16 -16
- package/bundled/qc-helper/docs/features/code-review.md +4 -0
- package/bundled/qc-helper/docs/features/headless.md +31 -0
- package/bundled/qc-helper/docs/features/mcp.md +11 -3
- package/bundled/qc-helper/docs/qwen-serve.md +75 -0
- package/bundled/review/SKILL.md +90 -52
- package/chunks/{MaxSizedBox-5XDFQHTQ.js → MaxSizedBox-H44SGRP7.js} +17 -16
- package/chunks/{StandaloneSessionPicker-DLADA54K.js → StandaloneSessionPicker-T5FQMYD3.js} +31 -30
- package/chunks/{acpAgent-MVEFZSBS.js → acpAgent-J474KXVM.js} +849 -313
- package/chunks/{agent-RB6LCRZX.js → agent-SC23IV5L.js} +17 -16
- package/chunks/{agent-headless-272ZACJV.js → agent-headless-2CHR5WJP.js} +17 -16
- package/chunks/{artifact-tool-TBOYEKTY.js → artifact-tool-RROCCJDA.js} +1 -1
- package/chunks/{askUserQuestion-23Y5WZFJ.js → askUserQuestion-2EPPBPUZ.js} +1 -1
- package/chunks/{bridge-GXUXFSHK.js → bridge-BLHYPCCR.js} +21 -19
- package/chunks/{channel-settings-store-5UA2SABE.js → channel-settings-store-CDOZ7GCP.js} +22 -21
- package/chunks/{channel-worker-group-NDG4WOOZ.js → channel-worker-group-SVGPDH2C.js} +3 -2
- package/chunks/{channel-worker-manager-ZCW6UW34.js → channel-worker-manager-72ZK2GTS.js} +3 -2
- package/chunks/{channel-worker-supervisor-ATGFTZRN.js → channel-worker-supervisor-NUEDVHX4.js} +2 -1
- package/chunks/{chunk-PWCQRLM5.js → chunk-2AGOQ7QO.js} +1 -1
- package/chunks/{chunk-AFJSRJTO.js → chunk-2B6FBVWE.js} +1 -1
- package/chunks/{chunk-XPAY4EMH.js → chunk-2OSE7Q5O.js} +3 -3
- package/chunks/{chunk-DHNFB7NC.js → chunk-2QOLRESU.js} +5 -5
- package/chunks/{chunk-UWSXFI6E.js → chunk-2U7GPHA6.js} +6 -2
- package/chunks/{chunk-CIUUYB23.js → chunk-3DTM3RPU.js} +1 -1
- package/chunks/{chunk-X6QNZOTC.js → chunk-3PRJYMXC.js} +2 -2
- package/chunks/{chunk-6KQUOXT5.js → chunk-3XDH6PZM.js} +7 -7
- package/chunks/{chunk-DJA7YBLJ.js → chunk-56MC5OM7.js} +2 -2
- package/chunks/{chunk-B3EBXISV.js → chunk-5DVP76WL.js} +90 -7
- package/chunks/{chunk-2T3RYG4L.js → chunk-5KDLX7ER.js} +919 -323
- package/chunks/{chunk-O2ZYHG33.js → chunk-5L6CQ4ZU.js} +131 -67
- package/chunks/{chunk-E2SYUEIA.js → chunk-5OAMVWFL.js} +874 -375
- package/chunks/{chunk-LPLMUGIM.js → chunk-5X76FZLI.js} +5 -5
- package/chunks/{chunk-M2L4TMH3.js → chunk-6HTEECQY.js} +3 -3
- package/chunks/{chunk-KHSJSMFS.js → chunk-6I6WUVYI.js} +1 -1
- package/chunks/{chunk-LLMGP5IC.js → chunk-6WBWIPBF.js} +2 -2
- package/chunks/{chunk-PQ5JFCNL.js → chunk-762UTZQZ.js} +3 -3
- package/chunks/{chunk-HBCKZF2A.js → chunk-7EW7CYLA.js} +1 -1
- package/chunks/{chunk-4PZ7SPD5.js → chunk-7FKLLD4X.js} +1 -1
- package/chunks/{chunk-XSOAW7FC.js → chunk-AE7AKP3E.js} +6 -6
- package/chunks/{chunk-UATJZOAJ.js → chunk-ASS3UQB5.js} +3 -3
- package/chunks/{chunk-XGA6XHH3.js → chunk-AXOFMDZC.js} +3 -3
- package/chunks/chunk-BKHCW2BI.js +41 -0
- package/chunks/{chunk-DZPOYHBT.js → chunk-D6FISK43.js} +1 -1
- package/chunks/{chunk-CFDR3GNL.js → chunk-D7D7RXIJ.js} +11 -0
- package/chunks/{chunk-FPPVCCAH.js → chunk-DNPP267F.js} +1 -1
- package/chunks/{chunk-I32URQI7.js → chunk-EA2CKB6L.js} +5 -5
- package/chunks/{chunk-C5YFS6VR.js → chunk-EL4W7MGQ.js} +4 -4
- package/chunks/{chunk-QXTGHZCX.js → chunk-FDLXWNCE.js} +3 -3
- package/chunks/{chunk-PCVMRBLN.js → chunk-FFCSRU3F.js} +1 -1
- package/chunks/{chunk-SV5X2EUV.js → chunk-FMU2QVA5.js} +1 -1
- package/chunks/{chunk-2ON2O4MD.js → chunk-FV2JYSWS.js} +28 -3
- package/chunks/{chunk-KB6VSG2U.js → chunk-GXP44JOS.js} +7 -7
- package/chunks/{chunk-BC4LTKEG.js → chunk-HP6MKLWU.js} +1 -1
- package/chunks/{chunk-YXEVDA66.js → chunk-HU5TUALO.js} +110 -22
- package/chunks/{chunk-2JN5V3I7.js → chunk-ITZK3L4S.js} +1 -1
- package/chunks/{chunk-5XGI4IPK.js → chunk-JEVHOCCA.js} +4 -4
- package/chunks/{chunk-6ME3PVMM.js → chunk-JNFWMBG6.js} +5 -5
- package/chunks/{chunk-3PHUGFPH.js → chunk-JXPOBM4B.js} +1 -1
- package/chunks/{chunk-TXZDRD36.js → chunk-LCCBAGRT.js} +5 -5
- package/chunks/{chunk-G7XXKQYS.js → chunk-LKRMNRSN.js} +27 -1
- package/chunks/{chunk-DOCBJIBL.js → chunk-MB3ILUB7.js} +1 -1
- package/chunks/{chunk-HFVW54NL.js → chunk-MBEMTXQT.js} +9 -2
- package/chunks/{chunk-RNKGMZEW.js → chunk-MFTOMYE2.js} +1 -1
- package/chunks/{chunk-RPYYTL7E.js → chunk-MGSSJT27.js} +2 -2
- package/chunks/{chunk-URVJ4AZC.js → chunk-MKMUBBEX.js} +1 -1
- package/chunks/{chunk-RL2NPV5E.js → chunk-N5QPOGRQ.js} +1 -1
- package/chunks/{chunk-2CCUHZP5.js → chunk-N7PF4KZR.js} +2 -2
- package/chunks/{chunk-JDJ7SC4E.js → chunk-NMBDPO63.js} +255 -197
- package/chunks/{chunk-M6RNMBUO.js → chunk-NQZ5IVLH.js} +4 -4
- package/chunks/{chunk-FV4TUUDE.js → chunk-O4WOWHMZ.js} +1 -1
- package/chunks/{chunk-GDREW3U5.js → chunk-OIVG6IHL.js} +2 -2
- package/chunks/{chunk-IMGNGOGC.js → chunk-PQ2J56BJ.js} +3 -3
- package/chunks/{chunk-EJXATV5R.js → chunk-PWFDZA5A.js} +2 -2
- package/chunks/{chunk-OOPFAIWP.js → chunk-Q7EXR3W2.js} +1 -1
- package/chunks/{chunk-4CTV3FZH.js → chunk-QJL2AQZI.js} +23 -19
- package/chunks/{chunk-SBBHZ3YT.js → chunk-QKWPXGW4.js} +1 -1
- package/chunks/{chunk-HI4YGRJD.js → chunk-RDICVTQC.js} +3 -3
- package/chunks/{chunk-ZRQY5BBS.js → chunk-REAWLQAU.js} +10 -10
- package/chunks/{chunk-BOWKLLWA.js → chunk-SOBA6GIW.js} +3 -3
- package/chunks/{chunk-WDLQGFWP.js → chunk-TYWI5NXY.js} +27 -27
- package/chunks/{chunk-A7PONO5G.js → chunk-URJHXOSO.js} +2 -2
- package/chunks/{chunk-C6FU76AA.js → chunk-V3BNVUFI.js} +1 -1
- package/chunks/{chunk-G6KI6B5L.js → chunk-VF6WPN4R.js} +1 -1
- package/chunks/{chunk-AWTLFUVN.js → chunk-VT27B2XS.js} +13 -13
- package/chunks/{chunk-O4IWFYUW.js → chunk-VY4TEQQ6.js} +4 -4
- package/chunks/{chunk-EIAPOG76.js → chunk-WECYW5EE.js} +4 -4
- package/chunks/{chunk-PDDYAXL2.js → chunk-WIRAPZ62.js} +7 -0
- package/chunks/chunk-WOJZWRAZ.js +123 -0
- package/chunks/{chunk-7UXI6P72.js → chunk-WVAESIM6.js} +2 -2
- package/chunks/{chunk-P5UJMCVS.js → chunk-XIDYVC4P.js} +4 -4
- package/chunks/{chunk-THLV7YGY.js → chunk-XIKKANF4.js} +2 -2
- package/chunks/{chunk-FHPKHXHT.js → chunk-XNZBXQCG.js} +4 -0
- package/chunks/{chunk-ZLJQIGCH.js → chunk-XZCMQUOF.js} +8 -0
- package/chunks/{chunk-PQEIKQXN.js → chunk-YJMFRTLV.js} +24 -6
- package/chunks/{chunk-QZQ72YF6.js → chunk-Z26UXKZE.js} +1 -1
- package/chunks/{chunk-VA5NLVPT.js → chunk-Z7JILXGX.js} +1 -1
- package/chunks/{chunk-UEJESCS7.js → chunk-ZPPP6VCL.js} +1 -1
- package/chunks/{computer-use-MDOMIVTL.js → computer-use-ENYMKQAI.js} +17 -16
- package/chunks/{config-utils-E3ZQTHGM.js → config-utils-LIRO7NSU.js} +2 -2
- package/chunks/{contextCommand-FCK3CB37.js → contextCommand-E7XMHU6M.js} +19 -18
- package/chunks/{core-runtime-UHRHHU2O.js → core-runtime-KDIRQ63A.js} +17 -16
- package/chunks/{create-sub-session-J32WC64U.js → create-sub-session-6EWLAZD5.js} +1 -1
- package/chunks/{create-sub-session-MIXUVLWW.js → create-sub-session-VVEL77UF.js} +17 -16
- package/chunks/{cron-create-HMFSHIAR.js → cron-create-CCRIULJE.js} +1 -1
- package/chunks/{cron-delete-ZJFHOX57.js → cron-delete-FCFW6BGP.js} +1 -1
- package/chunks/{cron-list-ZEX2NBMN.js → cron-list-QDBVCHRF.js} +1 -1
- package/chunks/{daemon-status-provider-6LC7LUNR.js → daemon-status-provider-4LMCSLZ4.js} +25 -23
- package/chunks/{daemon-trust-policy-Y36HGRAM.js → daemon-trust-policy-XLONWB2C.js} +22 -21
- package/chunks/{daemon-trust-policy-monitor-ROTBBDOH.js → daemon-trust-policy-monitor-FHFZ3NNG.js} +22 -21
- package/chunks/{deferred-core-runtime-ZQ4JIAJD.js → deferred-core-runtime-QNEBJ3DP.js} +17 -16
- package/chunks/{display-image-2WOG27DY.js → display-image-GUJA352B.js} +2 -2
- package/chunks/{earlyInputCapture-GPRUNXTP.js → earlyInputCapture-OG5IUF4R.js} +17 -16
- package/chunks/{edit-YK3UP6D2.js → edit-E2WNOITJ.js} +18 -17
- package/chunks/{enter-worktree-QMVQW7UG.js → enter-worktree-RMCBAAA2.js} +17 -16
- package/chunks/{enterPlanMode-TZAYQ5MP.js → enterPlanMode-GISFJA3O.js} +17 -16
- package/chunks/{environment-3UQURCZG.js → environment-JXTQGYDN.js} +19 -18
- package/chunks/{errors-VBIMTNNI.js → errors-2AYTYCQ3.js} +19 -18
- package/chunks/{exit-worktree-4EC7LBBC.js → exit-worktree-HORS3V7Z.js} +17 -16
- package/chunks/{exitPlanMode-K5Y3REU2.js → exitPlanMode-V75Y36HJ.js} +17 -16
- package/chunks/external-tool-guard-provider-5HTGOPGU.js +273 -0
- package/chunks/{fast-path-KS6IE7YR.js → fast-path-HURC6JUT.js} +5 -5
- package/chunks/{gemini-LTUCUOJH.js → gemini-WHMD4RGY.js} +70 -55
- package/chunks/{geminiContentGenerator-M3HJTHKR.js → geminiContentGenerator-DZB3GPNQ.js} +1 -1
- package/chunks/{glob-SKUYGTF2.js → glob-IGTV723M.js} +17 -16
- package/chunks/{goal-tools-SPQ5M6D3.js → goal-tools-3AZKX5WQ.js} +2 -18
- package/chunks/{grep-SQ7RD7SV.js → grep-SJ2NYUCD.js} +17 -16
- package/chunks/{handleAutoUpdate-OK7OX23A.js → handleAutoUpdate-NPBKROGA.js} +21 -20
- package/chunks/{i18n-P77YBKY4.js → i18n-CBSMJZ3Z.js} +18 -17
- package/chunks/{image-gen-2ZWPS42A.js → image-gen-KNKDTUEN.js} +2 -2
- package/chunks/{initializer-PIOYXVW7.js → initializer-JT5P3IQF.js} +22 -21
- package/chunks/{installationInfo-IWMM6DPV.js → installationInfo-CZVCKPPZ.js} +18 -17
- package/chunks/{list-3DCR4TRI.js → list-MT7T6JVH.js} +25 -24
- package/chunks/{list-agents-TWEGRJWO.js → list-agents-GC4BRET7.js} +1 -1
- package/chunks/{loadedSettingsAdapter-EJC6CU5N.js → loadedSettingsAdapter-D4JFGYYQ.js} +22 -21
- package/chunks/{loggingContentGenerator-2JEFU25T.js → loggingContentGenerator-SFT5CMPU.js} +9 -8
- package/chunks/{loop-wakeup-6LLEOQYV.js → loop-wakeup-SQQSBMEY.js} +2 -2
- package/chunks/{ls-H5WX22VK.js → ls-63CC3NNX.js} +1 -1
- package/chunks/{lsp-G6FXYEIS.js → lsp-P6NVJVNT.js} +1 -1
- package/chunks/{managed-npm-update-EGVQPSBR.js → managed-npm-update-YHJW6SGD.js} +18 -17
- package/chunks/{mcp-KFFH2MBV.js → mcp-53X2M7XL.js} +22 -21
- package/chunks/{monitor-6Y3NDMTI.js → monitor-I43P3MNV.js} +17 -16
- package/chunks/{nonInteractiveCli-426IQDPE.js → nonInteractiveCli-UADCDERF.js} +50 -48
- package/chunks/{notebook-edit-373IQQLE.js → notebook-edit-WKZUONWV.js} +18 -17
- package/chunks/{openaiContentGenerator-PGFSOMIQ.js → openaiContentGenerator-YHF3FIYI.js} +9 -8
- package/chunks/{pidfile-Y4INDMHG.js → pidfile-VU37FJS4.js} +17 -16
- package/chunks/{processUtils-6BCPCJZW.js → processUtils-VIQVTDWH.js} +2 -2
- package/chunks/{qwenContentGenerator-QC3KSHSX.js → qwenContentGenerator-46476NL4.js} +18 -17
- package/chunks/{qwenOAuth2-IOAXKJ3L.js → qwenOAuth2-D62OJZFU.js} +1 -1
- package/chunks/{read-file-2T54FYZV.js → read-file-6PSNROKB.js} +7 -6
- package/chunks/{read-mcp-resource-DRZSI3HE.js → read-mcp-resource-RTSSEER5.js} +1 -1
- package/chunks/{record-artifact-IPIRWMFY.js → record-artifact-E6AWQU2Z.js} +2 -2
- package/chunks/{resumeHistoryUtils-O62RDCZ3.js → resumeHistoryUtils-QFD6LB7N.js} +20 -19
- package/chunks/{ripGrep-3H72KY7S.js → ripGrep-4WZJEOGB.js} +17 -16
- package/chunks/{run-qwen-serve-3AIDNNHO.js → run-qwen-serve-SEL3TISE.js} +72 -36
- package/chunks/{runtime-AZ4EHHFV.js → runtime-T6JAS7GL.js} +25 -24
- package/chunks/{scheduler-L4UUCU4Z.js → scheduler-ZCTDMJJV.js} +17 -16
- package/chunks/{sdk-exporters-http-IKNWQJNV.js → sdk-exporters-http-IL2346MJ.js} +6 -2
- package/chunks/{sdk-impl-7CUUMQDB.js → sdk-impl-SYKGVWOZ.js} +2 -2
- package/chunks/{send-message-LHJLVWFD.js → send-message-TL6FIMMN.js} +3 -3
- package/chunks/{serve-CLXGSYOE.js → serve-A7B6VWK7.js} +23 -21
- package/chunks/{server-MEAE3WMM.js → server-6CCTTLO4.js} +170 -63
- package/chunks/{session-OSLD2LT5.js → session-3YYXW6MZ.js} +51 -49
- package/chunks/{settings-ILWAOKA4.js → settings-KWYWA3BS.js} +21 -20
- package/chunks/{shell-RT5DBH6B.js → shell-6SUYJURL.js} +17 -16
- package/chunks/{skill-LVGA3ATZ.js → skill-ZIQFS6YD.js} +8 -7
- package/chunks/{skill-settings-WTZE7EPE.js → skill-settings-23IFV7S3.js} +21 -20
- package/chunks/{spawnChannel-BOBS7DVM.js → spawnChannel-AI7QA35U.js} +20 -18
- package/chunks/{standalone-update-Y5JB4S2K.js → standalone-update-WNXRFLEA.js} +19 -18
- package/chunks/{startInteractiveUI-ZV25CD2S.js → startInteractiveUI-NPZU6YXV.js} +76 -71
- package/chunks/{syntheticOutput-EYL7DWO7.js → syntheticOutput-BN7E626U.js} +2 -2
- package/chunks/{task-create-4ALZMGP5.js → task-create-2X4UP4F3.js} +4 -4
- package/chunks/{task-list-6CVQPORX.js → task-list-WOLJPZ64.js} +1 -1
- package/chunks/{task-stop-Y5ZTFVRX.js → task-stop-TNXRNAL2.js} +1 -1
- package/chunks/{task-update-IKCEEWJ6.js → task-update-VDUSN36E.js} +4 -4
- package/chunks/{team-create-ZVPQIXCP.js → team-create-CMF2RRF2.js} +17 -16
- package/chunks/{team-delete-CE7DC53R.js → team-delete-D2VMSDOT.js} +1 -1
- package/chunks/{team-plan-approval-5UHUBY3W.js → team-plan-approval-5EET4S3I.js} +17 -16
- package/chunks/{terminal-image-renderer-NWC2RALG.js → terminal-image-renderer-TCEAHDFE.js} +18 -17
- package/chunks/{theme-manager-5KICSBOB.js → theme-manager-RPYRQJLX.js} +17 -16
- package/chunks/{todoWrite-FTZWQRZH.js → todoWrite-MHWHO5UO.js} +1 -1
- package/chunks/{tool-search-2AOU77H4.js → tool-search-HJN53LCN.js} +9 -8
- package/chunks/{total-session-admission-FR7RMHVL.js → total-session-admission-4FZK4PCR.js} +21 -19
- package/chunks/{trustedFolders-V7UUPQXO.js → trustedFolders-RIYUQQJC.js} +18 -17
- package/chunks/{update-relaunch-TBWRMQD6.js → update-relaunch-3HVSJU2T.js} +5 -5
- package/chunks/{updateCheck-42SPCLH7.js → updateCheck-EE2XXQNJ.js} +20 -19
- package/chunks/{useAutoAcceptIndicator-4C2KM345.js → useAutoAcceptIndicator-RRV7MW47.js} +23 -22
- package/chunks/{validateNonInterActiveAuth-UVFRXV3Z.js → validateNonInterActiveAuth-3QRII2BS.js} +47 -45
- package/chunks/{version-HKTV6TPN.js → version-4KUHPDAC.js} +1 -1
- package/chunks/{web-fetch-ZRXSV5AN.js → web-fetch-MXA6HQ42.js} +7 -6
- package/chunks/{web-search-WOLV3L6T.js → web-search-YENHOBMC.js} +5 -4
- package/chunks/{workflow-F63ES3OB.js → workflow-RYEVBM4L.js} +18 -17
- package/chunks/{workspace-providers-status-PJMGMYMC.js → workspace-providers-status-SBTU5TWO.js} +25 -24
- package/chunks/{workspace-registration-store-LNBOX5TJ.js → workspace-registration-store-VUMOTODR.js} +1 -1
- package/chunks/{workspace-registry-4PR7VDQ3.js → workspace-registry-OZ5ZUBJ6.js} +21 -19
- package/chunks/{workspace-service-PVI3VUNQ.js → workspace-service-Y3IGAN4K.js} +26 -25
- package/chunks/{workspace-skills-status-2Q5ZISO6.js → workspace-skills-status-FXOIDGOS.js} +23 -22
- package/chunks/{workspace-trust-reconciler-NOILUH3C.js → workspace-trust-reconciler-DQI7MYJS.js} +26 -24
- package/chunks/{write-file-MOM4JDHG.js → write-file-NK4C3GFC.js} +17 -16
- package/chunks/{zoom-image-E3VHRCFU.js → zoom-image-4Y6Y6DAX.js} +7 -6
- package/cli-entry.js +14 -0
- package/cli.js +16 -12
- package/package.json +3 -3
- package/web-shell/assets/{arc-GpdmhIxr.js → arc-DtI1rZcQ.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-C-LhCgH_.js → architectureDiagram-3BPJPVTR-BPZwSVct.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CzNdTCm-.js → blockDiagram-GPEHLZMM-BIQ03j4C.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-Ce7hbrRM.js → c4Diagram-AAUBKEIU-CB0RyFGm.js} +1 -1
- package/web-shell/assets/channel-vfbVFuM1.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BBSEn1PK.js → chunk-2J33WTMH-B3WoS-4H.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-_llgjfe5.js → chunk-4BX2VUAB-C98xYZ1X.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-9fJZ_oZE.js → chunk-55IACEB6-CbTIWRwQ.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DgEzQWOu.js → chunk-727SXJPM-DWGnKTPu.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-B4RthUTc.js → chunk-AQP2D5EJ-4__QyCEX.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CDI-emMW.js → chunk-FMBD7UC4-DFtG1YCW.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-jM2-yOd8.js → chunk-ND2GUHAM-rvAhW51N.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-XGZHlKPF.js → chunk-QZHKN3VN-DfiU9pwZ.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-Cvr8atq3.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-Cvr8atq3.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-90nbW1xQ.js → cose-bilkent-S5V4N54A-Cc4EIdxu.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-BtzlyqZ9.js → dagre-BM42HDAG-CZNj4dGW.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-DAaqGWaH.js → diagram-2AECGRRQ-D5tiqQCr.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-CxlzSIFa.js → diagram-5GNKFQAL-pwzw0jVO.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-8kj-1H6u.js → diagram-KO2AKTUF-4CWiM00x.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-6NhjFwRF.js → diagram-LMA3HP47-Dd7rc7Qf.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-Bn9kvInz.js → diagram-OG6HWLK6-_vzV52ml.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-CaRoGsAt.js → erDiagram-TEJ5UH35-CqbE2bx_.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-TkLweHdf.js → flowDiagram-I6XJVG4X-CaxNr7w4.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-ruwhCKBl.js → ganttDiagram-6RSMTGT7-AGjrtfUA.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DNI_PxoU.js → gitGraphDiagram-PVQCEYII-ADG2zSkc.js} +1 -1
- package/web-shell/assets/{index-p1gz-sxE.js → index-BOryKCqt.js} +1 -1
- package/web-shell/assets/index-Cb1LjsCv.css +5 -0
- package/web-shell/assets/{index-T4KluHvu.js → index-CvJDaIy8.js} +329 -329
- package/web-shell/assets/{infoDiagram-5YYISTIA-DarXq1-A.js → infoDiagram-5YYISTIA-CE3B_IoZ.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-GxDaDlT0.js → ishikawaDiagram-YF4QCWOH-CN-Frhoi.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-mDEoGBzY.js → journeyDiagram-JHISSGLW-CGgezS93.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Ds0t-Mup.js → kanban-definition-UN3LZRKU-BqWijky5.js} +1 -1
- package/web-shell/assets/{linear-05nJ0xZ7.js → linear-D8sfpZf6.js} +1 -1
- package/web-shell/assets/{mermaid.core-Bua24ThM.js → mermaid.core-3PA4QrzM.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_zRdvUS.js → mindmap-definition-RKZ34NQL-D9QxwiCY.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-DZHr1x16.js → pieDiagram-4H26LBE5-Bioaf6uE.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-HA06Wf0h.js → quadrantDiagram-W4KKPZXB-DBb2AS73.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-DH3urmJf.js → requirementDiagram-4Y6WPE33-DXOvZ3KB.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C4xgz0TT.js → sankeyDiagram-5OEKKPKP-D9qg09Dm.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DAUoZWgv.js → sequenceDiagram-3UESZ5HK-DSAUIfpw.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-v7NzXy4l.js → stateDiagram-AJRCARHV-BPZkzfQ3.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DInOqnhZ.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-B3GTYR2W.js → timeline-definition-PNZ67QCA-UDaQp9sP.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BWHjSPAq.js → vennDiagram-CIIHVFJN-2ouhAnHO.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-m9r6IUBC.js → wardley-L42UT6IY-Cq_WEvTK.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-kT0FkVfK.js → wardleyDiagram-YWT4CUSO-Dt24aXOM.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-CYRm10z5.js → xychartDiagram-2RQKCTM6-A5Xk2WCH.js} +1 -1
- package/web-shell/index.html +2 -2
- package/bundled/review/DESIGN.md +0 -724
- package/web-shell/assets/channel-95y6Rcp3.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-pfzVkmjQ.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-pfzVkmjQ.js +0 -1
- package/web-shell/assets/index-WxSvj2tI.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CtdFexEf.js +0 -1
- package/chunks/{channel-management-service-UHX56NBO.js → channel-management-service-5XPPTWUQ.js} +3 -3
- package/chunks/{chunk-LEZFUYPM.js → chunk-7GYP5COR.js} +3 -3
|
@@ -583,13 +583,14 @@ The optional `reasoning` field under `generationConfig` controls how aggressivel
|
|
|
583
583
|
|
|
584
584
|
### Per-provider behavior
|
|
585
585
|
|
|
586
|
-
| Protocol / provider
|
|
587
|
-
|
|
|
588
|
-
| **OpenAI /
|
|
589
|
-
| **OpenAI** (
|
|
590
|
-
| **
|
|
591
|
-
| **Anthropic** (`api.
|
|
592
|
-
| **
|
|
586
|
+
| Protocol / provider | Wire shape | Notes |
|
|
587
|
+
| --------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
588
|
+
| **OpenAI / DashScope** (`qwen3.8-max` family) | Flat `reasoning_effort: <effort>` body parameter | The five `/effort` tiers (`low`, `medium`, `high`, `xhigh`, `max`) are passed through verbatim for any model id starting with `qwen3.8-max` (including dated snapshots and `-latest` aliases); DashScope applies any model-specific mapping. For this family the tier ships alone: a conflicting `enable_thinking` or `thinking_budget` is dropped (warn-logged, once per generator) — DashScope rejects requests combining `reasoning_effort` with `thinking_budget`, and two thinking controls should not ship together. An explicit `enable_thinking: false` in `extra_body` is honoured rather than dropped: it overrides the configured tier as `reasoning_effort: 'none'`, one of the few places `extra_body` does not win verbatim. Other Qwen models continue to map a selected effort to `enable_thinking: true`; a `reasoning_effort` override passes through there unless it conflicts with a `thinking_budget` (a pair DashScope rejects), in which case the inert `reasoning_effort` is dropped and both `enable_thinking` and `thinking_budget` survive. |
|
|
589
|
+
| **OpenAI / DeepSeek** (`api.deepseek.com`) | Flat `reasoning_effort: <effort>` body parameter | When `reasoning.effort` is set in the nested config shape, it's rewritten to flat `reasoning_effort` and `'low'`/`'medium'` are normalized to `'high'`, `'xhigh'` to `'max'` — mirroring DeepSeek's [server-side back-compat](https://api-docs.deepseek.com/zh-cn/api/create-chat-completion). Top-level `samplingParams.reasoning_effort` or `extra_body.reasoning_effort` overrides skip this normalization and ship verbatim. |
|
|
590
|
+
| **OpenAI** (other compatible servers) | `reasoning: { effort, ... }` passed through verbatim | Set via `samplingParams` (e.g. `samplingParams.reasoning_effort` for GPT-5/o-series) when the provider expects a different shape. |
|
|
591
|
+
| **Anthropic** (real `api.anthropic.com`) | `output_config: { effort }` plus the `effort-2025-11-24` beta header | Real Anthropic accepts `'low'`/`'medium'`/`'high'` only. `'max'` is **clamped to `'high'`** with a `debugLogger.warn` line (once per generator); if you want max effort, switch the baseURL to a DeepSeek-compatible endpoint that supports it. |
|
|
592
|
+
| **Anthropic** (`api.deepseek.com/anthropic`) | Same `output_config: { effort }` + beta header | `'max'` is passed through unchanged. |
|
|
593
|
+
| **Gemini** (`@google/genai`) | `thinkingConfig: { includeThoughts: true, thinkingLevel }` | `'low'` → `LOW`, `'high'`/`'max'` → `HIGH`, others → `THINKING_LEVEL_UNSPECIFIED` (Gemini has no `MAX` tier). |
|
|
593
594
|
|
|
594
595
|
### `reasoning: false`
|
|
595
596
|
|
|
@@ -302,21 +302,21 @@ The `extra_body` field allows you to add custom parameters to the request body s
|
|
|
302
302
|
|
|
303
303
|
#### context
|
|
304
304
|
|
|
305
|
-
| Setting | Type | Description
|
|
306
|
-
| ----------------------------------------------------------- | -------------------------- |
|
|
307
|
-
| `context.fileName` | string or array of strings | The name of the context file(s).
|
|
308
|
-
| `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`.
|
|
309
|
-
| `context.importFormat` | string | The format to use when importing memory.
|
|
310
|
-
| `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.
|
|
311
|
-
| `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.
|
|
312
|
-
| `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching.
|
|
313
|
-
| `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore and configured custom ignore files when searching.
|
|
314
|
-
| `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.
|
|
315
|
-
| `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt.
|
|
316
|
-
| `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.
|
|
317
|
-
| `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger.
|
|
318
|
-
| `context.clearContextOnIdle.toolResultsNumToKeep` | integer | Integer number of most-recent compactable tool results to preserve when clearing. Values below 1 are floored to 1.
|
|
319
|
-
| `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.
|
|
305
|
+
| Setting | Type | Description | Default |
|
|
306
|
+
| ----------------------------------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
|
|
307
|
+
| `context.fileName` | string or array of strings | The name of the context file(s). | `undefined` |
|
|
308
|
+
| `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) |
|
|
309
|
+
| `context.importFormat` | string | The format to use when importing memory. | `undefined` |
|
|
310
|
+
| `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. | `[]` |
|
|
311
|
+
| `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` |
|
|
312
|
+
| `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching. | `true` |
|
|
313
|
+
| `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore and configured custom ignore files when searching. | `true` |
|
|
314
|
+
| `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"]` |
|
|
315
|
+
| `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt. | `true` |
|
|
316
|
+
| `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` |
|
|
317
|
+
| `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger. | `60` |
|
|
318
|
+
| `context.clearContextOnIdle.toolResultsNumToKeep` | integer | Integer number of most-recent compactable tool results to preserve when clearing. Values below 1 are floored to 1. | `5` |
|
|
319
|
+
| `context.clearContextOnIdle.toolResultsTotalCharsThreshold` | number | Total compactable tool result output characters allowed in history before clearing oldest results. When exceeded, oldest results are cleared down to half this threshold (best effort) so later turns keep reusing the provider prompt cache instead of rewriting history every turn. Use `-1` to disable the size trigger. This is a soft threshold: protected recent tool results may keep the total above it. | `500000` |
|
|
320
320
|
|
|
321
321
|
#### Troubleshooting File Search Performance
|
|
322
322
|
|
|
@@ -594,7 +594,7 @@ Configures connections to one or more Model-Context Protocol (MCP) servers for d
|
|
|
594
594
|
| `mcpServers.<SERVER_NAME>.httpUrl` | string | The URL of an MCP server that uses streamable HTTP for communication. | Yes |
|
|
595
595
|
| `mcpServers.<SERVER_NAME>.headers` | object | A map of HTTP headers to send with requests to `url` or `httpUrl`. | Yes |
|
|
596
596
|
| `mcpServers.<SERVER_NAME>.timeout` | number | Timeout in milliseconds for requests to this MCP server. | Yes |
|
|
597
|
-
| `mcpServers.<SERVER_NAME>.trust` | boolean | Trust this server and bypass
|
|
597
|
+
| `mcpServers.<SERVER_NAME>.trust` | boolean | Trust this server and bypass its tool call confirmations in a trusted workspace. | Yes |
|
|
598
598
|
| `mcpServers.<SERVER_NAME>.description` | string | A brief description of the server, which may be used for display purposes. | Yes |
|
|
599
599
|
| `mcpServers.<SERVER_NAME>.includeTools` | array of strings | List of tool names to include from this MCP server. When specified, only the tools listed here will be available from this server (allowlist behavior). If not specified, all tools from the server are enabled by default. | Yes |
|
|
600
600
|
| `mcpServers.<SERVER_NAME>.excludeTools` | array of strings | List of tool names to exclude from this MCP server. Tools listed here will not be available to the model, even if they are exposed by the server. **Note:** `excludeTools` takes precedence over `includeTools` - if a tool is in both lists, it will be excluded. | Yes |
|
|
@@ -324,6 +324,8 @@ For same-repo reviews, results are saved as a Markdown file in your project's `.
|
|
|
324
324
|
|
|
325
325
|
Reports include: timestamp, diff stats, build/test results, all findings with verification status, and the verdict. Section headings and descriptive prose follow the output language preference; technical identifiers (SHAs, file paths, gate names, finding ids) stay verbatim.
|
|
326
326
|
|
|
327
|
+
Medium- and high-effort reviews also save a structured JSON companion with the same stem (for example, `2026-04-06-143022-pr-123.json`) holding the canonical findings and the composed verdict as data. Qwen Code's Web Shell renders that document as an interactive review view with filterable findings; the Markdown report stays the human-readable archive.
|
|
328
|
+
|
|
327
329
|
The deterministic halves of the pipeline — argument parsing (`qwen review parse-args`) and the event/body decision (`qwen review compose-review`) — are tested subcommands rather than prompt text, so `--effort` grammar, `--comment` forcing, verdict caps, and downgrade behavior are pinned by unit tests and cannot drift with the model.
|
|
328
330
|
|
|
329
331
|
**GitHub Enterprise:** reviewing a PR URL on a non-`github.com` host routes every GitHub call at that host — the review subcommands (`fetch-pr`, `pr-context`, `comment-status`, `presubmit`) accept `--host` and set it in code, so a forgotten host cannot silently retarget the review at `github.com`.
|
|
@@ -350,6 +352,8 @@ The exit code is the contract a gate should read:
|
|
|
350
352
|
|
|
351
353
|
`3` (not `2`) lets a gate distinguish "the review is blocking" from "the tool broke" — yargs already uses `1` for usage errors — without parsing any output. `--timeout-minutes` (default 120, floored at 1) terminates a hung review and exits `1`, and cancelling the command (Ctrl+C / SIGTERM) terminates the review's process group rather than orphaning it.
|
|
352
354
|
|
|
355
|
+
A time-budgeted run can also export a **soft** deadline so the review stops its open-ended reverse-audit loop while there is still time to verify, compose and post: `QWEN_REVIEW_DEADLINE_EPOCH` is the Unix-seconds moment the run will be killed, and `QWEN_REVIEW_DEADLINE_RESERVE_SECONDS` (default 3600; `0` keeps only the round estimate) is the tail that must remain for the last round's verification, `compose-review` and submission. When the remaining budget no longer fits another round plus that tail, the round builder refuses to build it, and the composed verdict discloses the truncated audit (an otherwise-Approve verdict is capped at Comment). A missing or malformed deadline leaves the review ungated — the outer timeout still bounds the run.
|
|
356
|
+
|
|
353
357
|
## Cross-file Impact Analysis
|
|
354
358
|
|
|
355
359
|
A dedicated cross-file tracer (Agent 1c) owns this walk end-to-end. When code changes modify exported functions, classes, or interfaces, it searches for all callers and checks compatibility:
|
|
@@ -58,6 +58,37 @@ qwen --resume 123e4567-e89b-12d3-a456-426614174000 -p "Apply the follow-up refac
|
|
|
58
58
|
> - Session data is project-scoped JSONL under `~/.qwen/projects/<sanitized-cwd>/chats`.
|
|
59
59
|
> - Restores conversation history, tool outputs, and chat-compression checkpoints before sending the new prompt.
|
|
60
60
|
|
|
61
|
+
## Run a Persistent Goal
|
|
62
|
+
|
|
63
|
+
Headless mode accepts `/goal` as the entire prompt. Goal state is stored with the session, so use `--continue` or `--resume <sessionId>` to inspect or control the same Goal from a later process. This requires `general.chatRecording` to remain enabled (the default).
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Create a Goal and start its worker
|
|
67
|
+
qwen -p "/goal Finish the release checklist"
|
|
68
|
+
|
|
69
|
+
# Inspect its saved state in the same session
|
|
70
|
+
qwen --continue -p "/goal"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Use the same `qwen --continue -p "<control>"` pattern for the other operations:
|
|
74
|
+
|
|
75
|
+
| Control | Behavior |
|
|
76
|
+
| ------------------------------------ | ---------------------------------------------------------------------------------------- |
|
|
77
|
+
| `/goal` | Report the stored state without calling the model. |
|
|
78
|
+
| `/goal <objective>` or `/goal set …` | Create or replace the Goal and start headless Goal work. |
|
|
79
|
+
| `/goal edit <objective>` | Revise a non-completed Goal; work starts immediately when the resulting state is active. |
|
|
80
|
+
| `/goal pause` | Pause an active Goal without calling the model. |
|
|
81
|
+
| `/goal resume` | Resume an eligible Goal and start headless Goal work. |
|
|
82
|
+
| `/goal clear` | Clear the Goal without confirmation or a model call. |
|
|
83
|
+
|
|
84
|
+
Runtime-scheduled Goal continuation segments do not count against `--max-session-turns`, but real user prompts still do. Explicit `--max-wall-time` and `--max-tool-calls` budgets continue to apply; exceeding either pauses active Goal work before the run exits with the budget-specific error.
|
|
85
|
+
|
|
86
|
+
With `--output-format stream-json`, each Goal status change emits a `stream_event` whose `event.type` is `goal_state`. This canonical state event is emitted even without `--include-partial-messages`. When partial messages are enabled, the older `active_goal` event follows as a compatibility projection; automation should treat `goal_state` as authoritative.
|
|
87
|
+
|
|
88
|
+
> [!note]
|
|
89
|
+
>
|
|
90
|
+
> This behavior applies to standard headless CLI runs. ACP still uses the legacy Goal command path.
|
|
91
|
+
|
|
61
92
|
## Customize the Main Session Prompt
|
|
62
93
|
|
|
63
94
|
You can change the main session system prompt for a single CLI run without editing shared memory files.
|
|
@@ -271,7 +271,15 @@ environment. This is kept as an escape hatch for at least one release.
|
|
|
271
271
|
|
|
272
272
|
### Trust (skip confirmations)
|
|
273
273
|
|
|
274
|
-
- **Server trust** (`trust: true`): bypasses confirmation prompts for that server (use sparingly).
|
|
274
|
+
- **Server trust** (`trust: true`): bypasses confirmation prompts for that server only in a trusted workspace (use sparingly).
|
|
275
|
+
|
|
276
|
+
### Connection-loss replay
|
|
277
|
+
|
|
278
|
+
Qwen Code only reconnects and replays the current MCP tool call when the server has `trust: true`, the workspace is trusted, and the tool explicitly declares either `idempotentHint: true` or a consistent read-only annotation. Read-only annotations conflict with `destructiveHint: true` or `idempotentHint: false` and are not replayed.
|
|
279
|
+
|
|
280
|
+
Calls with missing annotations, conflicting annotations, an untrusted server, or an untrusted workspace are not replayed after a connection failure. Qwen Code reports that the result may be unknown because the server could have completed the operation before the response was lost. Verify the outcome before trying again. This conservative behavior can differ from earlier releases that transparently retried unannotated tools.
|
|
281
|
+
|
|
282
|
+
Annotations are server-provided behavior hints, not permissions or an authorization boundary. Only configure `trust: true` for servers you control and whose annotations you have verified.
|
|
275
283
|
|
|
276
284
|
### OAuth authentication
|
|
277
285
|
|
|
@@ -453,7 +461,7 @@ Optional:
|
|
|
453
461
|
| `env` | object | Environment variables for the server process. Values can reference environment variables using `$VAR_NAME` or `${VAR_NAME}` syntax |
|
|
454
462
|
| `cwd` | string | Working directory for Stdio transport |
|
|
455
463
|
| `timeout` | number<br>(default: 600,000) | Request timeout in milliseconds (default: 600,000ms = 10 minutes) |
|
|
456
|
-
| `trust` | boolean<br>(default: false) | When `true`, bypasses
|
|
464
|
+
| `trust` | boolean<br>(default: false) | When `true`, bypasses tool call confirmations for this server in a trusted workspace (default: `false`) |
|
|
457
465
|
| `includeTools` | array | List of tool names to include from this MCP server. When specified, only the tools listed here will be available from this server (allowlist behavior). If not specified, all tools from the server are enabled by default. |
|
|
458
466
|
| `excludeTools` | array | List of tool names to exclude from this MCP server. Tools listed here will not be available to the model, even if they are exposed by the server.<br>Note: `excludeTools` takes precedence over `includeTools` - if a tool is in both lists, it will be excluded. |
|
|
459
467
|
| `targetAudience` | string | The OAuth Client ID allowlisted on the IAP-protected application you are trying to access. Used with `authProviderType: 'service_account_impersonation'`. |
|
|
@@ -481,7 +489,7 @@ qwen mcp add [options] <name> <commandOrUrl> [args...]
|
|
|
481
489
|
| `-e`, `--env` | Set environment variables. | — | `-e KEY=value` |
|
|
482
490
|
| `-H`, `--header` | Set HTTP headers for SSE and HTTP transports. | — | `-H "X-Api-Key: abc123"` |
|
|
483
491
|
| `--timeout` | Set connection timeout in milliseconds. | — | `--timeout 30000` |
|
|
484
|
-
| `--trust` | Trust the server
|
|
492
|
+
| `--trust` | Trust the server; skip confirmations in trusted workspaces. | — (`false`) | `--trust` |
|
|
485
493
|
| `--description` | Set the description for the server. | — | `--description "Local tools"` |
|
|
486
494
|
| `--include-tools` | A comma-separated list of tools to include. | all tools included | `--include-tools mytool,othertool` |
|
|
487
495
|
| `--exclude-tools` | A comma-separated list of tools to exclude. | none | `--exclude-tools mytool` |
|
|
@@ -402,6 +402,9 @@ Notes:
|
|
|
402
402
|
| `--max-journal-bytes <n>` | `8388608` | Per-session byte cap on the in-flight live journal. When exceeded, the oldest journal entries are dropped (at least one entry is always kept). Must be a positive safe integer. Defaults to 8 MiB. |
|
|
403
403
|
| `--mcp-client-budget <n>` | — | Positive integer cap on live MCP clients. When `mcp_workspace_pool` is advertised, the cap and transports are shared per workspace runtime; when the tag is absent, the legacy per-session manager enforces it. Combine with `--mcp-budget-mode`. When unset, no accounting-driven enforcement (but `GET /workspace/mcp` still reports `clientCount`). Distinct from claude-code's `MCP_SERVER_CONNECTION_BATCH_SIZE`, which gates startup concurrency rather than total live clients. Pre-flight `caps.features.mcp_guardrails` and `caps.features.mcp_workspace_pool`. |
|
|
404
404
|
| `--mcp-budget-mode <m>` | `warn` / `off` | How `--mcp-client-budget` is enforced. `warn` (default when budget set): no refusal, snapshot's `budgets[0].status` flips to `warning` at ≥75% of budget. `enforce`: connects past the cap are refused, per-server cell shows `disabledReason: 'budget'`, deterministic by `mcpServers` declaration order. `off` (default when budget unset): pure observability. Boot rejects `enforce` without a budget. |
|
|
405
|
+
| `--external-tool-guard-mode <m>` | `off` | Managed ACP external pre-execution policy. `off` makes no provider calls and advertises no capability. `required` fails startup unless a compatible provider completes the v1 handshake, then fails every supported top-level tool invocation closed unless its single prepare request is allowed. |
|
|
406
|
+
| `--external-tool-guard-endpoint <url>` | — | Origin-only loopback HTTP(S) provider URL used in `required` mode, for example `http://127.0.0.1:8787`. Paths, URL credentials, redirects, non-loopback hosts, and proxy routing are not accepted. |
|
|
407
|
+
| `--external-tool-guard-timeout-ms <n>` | `3000` | Integer `100..30000`; applies independently to the startup handshake and each prepare request. |
|
|
405
408
|
| `--http-bridge` | `true` | Stage 1 mode: production attempts to preheat one primary `qwen --acp` child for compatibility and retries on first use after failure, while each trusted secondary can start one child on demand. Sessions targeting a runtime multiplex onto its child via ACP `newSession()`; untrusted secondaries cannot start ACP. Stage 2 native in-process becomes available later. |
|
|
406
409
|
| `--initialize-timeout-ms <n>` | `10000` | ACP child request timeout, including the `initialize` handshake (ms). Must be a positive integer up to `2147483647`. Values above the JS timer ceiling (`2^31-1`) are rejected at boot because Node silently compresses them to 1 ms. Cold-container deployments that need extra headroom for child startup can raise this; the same value governs `newSession`, workspace-status polls, and other ACP ext-method deadlines. |
|
|
407
410
|
| `--allow-origin <pat>` | — | T2.4 ([#4514](https://github.com/QwenLM/qwen-code/issues/4514)). Cross-origin allowlist for browser webui clients. Repeatable. Each value is `*` (any origin — boot refuses if no bearer token is configured; `--require-auth` on loopback is recommended so `/health` and `/demo` are also bearer-gated, since both are pre-auth on loopback by default) or a canonical URL origin (`<scheme>://<host>[:<port>]`, no trailing slash / path / userinfo / query). **Subdomain wildcards (`https://*.example.com`) are intentionally unsupported** — list each subdomain explicitly, or use `*` with a configured token (and `--require-auth` for full hardening). Matched origins receive CORS response headers (`Access-Control-Allow-Origin`, `Vary: Origin`, methods, headers, max-age, and exposed `Retry-After`); unmatched origins still get a 403 with the same envelope as today's wall. `Origin: null` (sandboxed iframes, file:// docs) is always rejected, even under `*`. Pre-flight via `caps.features.allow_origin`. Loopback self-origin hits are unaffected. |
|
|
@@ -427,6 +430,78 @@ Notes:
|
|
|
427
430
|
> matched case-sensitively by yargs `choices` (`--memory-project-scope
|
|
428
431
|
Workspace` is rejected). Use lowercase values when copying between the two.
|
|
429
432
|
|
|
433
|
+
### Required external Tool Guard
|
|
434
|
+
|
|
435
|
+
This opt-in is for managed ACP deployments that need an external allow/deny
|
|
436
|
+
decision at the final tool-executor boundary. It is fully dark unless
|
|
437
|
+
`--external-tool-guard-mode=required` is present:
|
|
438
|
+
|
|
439
|
+
```sh
|
|
440
|
+
export QWEN_CODE_EXTERNAL_TOOL_GUARD_TOKEN='replace-with-local-secret'
|
|
441
|
+
|
|
442
|
+
qwen serve \
|
|
443
|
+
--external-tool-guard-mode=required \
|
|
444
|
+
--external-tool-guard-endpoint=http://127.0.0.1:8787 \
|
|
445
|
+
--external-tool-guard-timeout-ms=3000
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
The provider must expose `POST /v1/handshake` and `POST /v1/prepare`, require
|
|
449
|
+
`Authorization: Bearer <token>`, return JSON, echo the supplied nonce or
|
|
450
|
+
request ID, and use protocol version `1`. The token must be non-blank, at most
|
|
451
|
+
8192 UTF-16 code units, and contain no control characters. Requests are limited
|
|
452
|
+
to 1 MiB, responses to 64 KiB, and optional denial reasons to 500 UTF-16 code
|
|
453
|
+
units without control characters. A successful prepare response is:
|
|
454
|
+
|
|
455
|
+
```json
|
|
456
|
+
{ "protocolVersion": 1, "requestId": "<echo>", "allowed": true }
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
A denial uses `allowed:false` and may add a short `reason`. For each supported
|
|
460
|
+
top-level tool invocation that passes existing permission and `PreToolUse`
|
|
461
|
+
gates and reaches the final execution boundary, Qwen Code sends one prepare
|
|
462
|
+
request and never retries it. An earlier permission/hook denial sends no
|
|
463
|
+
prepare request. Timeout, cancellation, transport failure, malformed or
|
|
464
|
+
mismatched responses, and explicit denial prevent the executor from running.
|
|
465
|
+
Each spawned ACP channel must also acknowledge that it installed the required
|
|
466
|
+
callback; a missing or incompatible acknowledgement rejects the channel before
|
|
467
|
+
Session creation.
|
|
468
|
+
The provider request carries `sessionId`, `promptId`, `toolCallId`, canonical
|
|
469
|
+
`toolName`, and final `arguments`; `toolCallId` is a correlation label, not an
|
|
470
|
+
authentication identity or standalone idempotency key.
|
|
471
|
+
|
|
472
|
+
Final arguments can contain sensitive application data. Treat them as such in
|
|
473
|
+
provider logs and audit storage.
|
|
474
|
+
|
|
475
|
+
`PreToolUse` hooks run before this final executor decision. Required Guard mode
|
|
476
|
+
does not authorize or sandbox hook behavior; deployments that need a boundary
|
|
477
|
+
around every possible side effect must disable hooks or govern their
|
|
478
|
+
implementations separately.
|
|
479
|
+
|
|
480
|
+
Slash-command actions also run before model/tool scheduling and are not Guard
|
|
481
|
+
invocations. Some built-ins can directly change files or settings. A managed
|
|
482
|
+
deployment that needs an all-effects boundary must reject slash-command input
|
|
483
|
+
or disable every non-approved command through `slashCommands.disabled` or
|
|
484
|
+
`--disabled-slash-commands`.
|
|
485
|
+
|
|
486
|
+
The v1 managed scope is top-level tools invoked by an active foreground
|
|
487
|
+
managed Prompt. Nested or delegating `agent`, `workflow`,
|
|
488
|
+
`create_sub_session`, `send_message`, direct `/fork`, and agent-backed
|
|
489
|
+
workspace memory remember/dream controls are rejected while required mode is
|
|
490
|
+
active. A top-level background shell or monitor start is still one guarded
|
|
491
|
+
invocation and its final arguments reach the provider, but this feature does
|
|
492
|
+
not continuously authorize the process or add a process-completion audit
|
|
493
|
+
protocol; a policy that requires foreground completion should deny those
|
|
494
|
+
shapes. Guarded MCP calls also disable automatic reconnect/replay after a
|
|
495
|
+
transport error. After a successful startup handshake, `/capabilities`
|
|
496
|
+
advertises `external_tool_guard`; its absence means clients must not assume
|
|
497
|
+
enforcement.
|
|
498
|
+
|
|
499
|
+
This feature does not authorize explicit daemon REST/ACP management calls;
|
|
500
|
+
those continue to use the daemon's existing authentication and route
|
|
501
|
+
contracts. It also does not make an allowed tool or shell command
|
|
502
|
+
deterministic or sandbox its internals; managed deployments must combine the
|
|
503
|
+
provider decision with their normal tool policy and isolation boundary.
|
|
504
|
+
|
|
430
505
|
> **Sizing the load knobs.** `--max-sessions` is the per-workspace fresh-session cap. `--max-total-sessions`, when set, is the daemon-wide fresh-session cap.
|
|
431
506
|
> Three other layers also limit load — when sizing for a high-concurrency
|
|
432
507
|
> deployment, tune them together:
|