@qwen-code/qwen-code 0.18.5 → 0.19.1-nightly.20260624.a234860a4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/SKILL.md +13 -5
- package/bundled/qc-helper/docs/configuration/_meta.ts +1 -0
- package/bundled/qc-helper/docs/configuration/auth.md +68 -48
- package/bundled/qc-helper/docs/configuration/model-providers.md +217 -195
- package/bundled/qc-helper/docs/configuration/qwen-ignore.md +31 -15
- package/bundled/qc-helper/docs/configuration/settings.md +44 -27
- package/bundled/qc-helper/docs/configuration/themes.md +7 -4
- package/bundled/qc-helper/docs/extension/extension-releasing.md +1 -1
- package/bundled/qc-helper/docs/extension/introduction.md +27 -21
- package/bundled/qc-helper/docs/features/arena.md +3 -3
- package/bundled/qc-helper/docs/features/channels/overview.md +1 -1
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
- package/bundled/qc-helper/docs/features/commands.md +6 -1
- package/bundled/qc-helper/docs/features/headless.md +1 -1
- package/bundled/qc-helper/docs/features/mcp.md +33 -14
- package/bundled/qc-helper/docs/features/sandbox.md +2 -2
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
- package/bundled/qc-helper/docs/integration-github-action.md +2 -2
- package/bundled/qc-helper/docs/overview.md +1 -1
- package/bundled/qc-helper/docs/quickstart.md +9 -5
- package/bundled/qc-helper/docs/qwen-serve.md +14 -2
- package/bundled/qc-helper/docs/support/tos-privacy.md +1 -1
- package/chunks/{agent-2TEY55UD.js → agent-6KV474S5.js} +24 -22
- package/chunks/{agent-headless-SCUAXEEE.js → agent-headless-XO7MM6JT.js} +24 -22
- package/chunks/{anthropicContentGenerator-5S4OMMNL.js → anthropicContentGenerator-7352A7I5.js} +12 -11
- package/chunks/artifact-tool-5J4HUZAV.js +675 -0
- package/chunks/{askUserQuestion-WHVYL2S2.js → askUserQuestion-HF7HCWDD.js} +20 -7
- package/chunks/chunk-22IFUCVR.js +291 -0
- package/chunks/{chunk-26ZYKTYZ.js → chunk-2BIF2NVV.js} +2 -2
- package/chunks/{chunk-VKILGMZQ.js → chunk-2QDQTWCI.js} +1 -1
- package/chunks/{chunk-XGU3ETVO.js → chunk-3BR4OIOE.js} +3 -3
- package/chunks/{chunk-LTN3VYMZ.js → chunk-3UALQ56H.js} +1 -1
- package/chunks/{chunk-F5E6IKYN.js → chunk-54J4JDWT.js} +619 -135
- package/chunks/{chunk-KZGQ3G3Q.js → chunk-76BDT2HH.js} +80 -83
- package/chunks/{chunk-VECKCOH6.js → chunk-7QBKO4A6.js} +7118 -5113
- package/chunks/{chunk-MSJ2MXJ6.js → chunk-BGUDAULQ.js} +11 -290
- package/chunks/{chunk-FH4P6RQA.js → chunk-BNXANYLH.js} +1 -1
- package/chunks/{chunk-SIJKWK35.js → chunk-C4JC2FL3.js} +8 -7
- package/chunks/{chunk-WE6TNQJU.js → chunk-C4K3FEQ2.js} +36 -0
- package/chunks/{chunk-G4BUMVEY.js → chunk-CGEGHF2C.js} +2 -217
- package/chunks/chunk-EEEZIVFJ.js +908 -0
- package/chunks/chunk-EJYJYJZ2.js +3703 -0
- package/chunks/{chunk-ATLUHLZE.js → chunk-EW6C27XX.js} +1 -1
- package/chunks/{chunk-42HGOMED.js → chunk-F6XNTYNE.js} +216 -1
- package/chunks/{chunk-C6MI2ASN.js → chunk-GZCJS5WH.js} +2 -2
- package/chunks/{chunk-KGV3F6UF.js → chunk-HGNSRCRB.js} +1 -1
- package/chunks/{chunk-2CNO5W47.js → chunk-HNYTRFAM.js} +171 -5016
- package/chunks/{chunk-CX3SGIPK.js → chunk-KBXLIVWQ.js} +2 -2
- package/chunks/{chunk-GOMVJKBL.js → chunk-L7U2RI5O.js} +59 -57
- package/chunks/{chunk-GBN55AWZ.js → chunk-NKJ6LRCR.js} +2 -2
- package/chunks/{chunk-2O3NAOJG.js → chunk-NWLUISRA.js} +1 -1
- package/chunks/{chunk-ID533GA3.js → chunk-OTBK43JR.js} +1 -1
- package/chunks/{chunk-AE6RQU6F.js → chunk-PRYMDRBV.js} +1 -1
- package/chunks/{chunk-KQIKOTQJ.js → chunk-RYLJU2DY.js} +60 -5
- package/chunks/{chunk-CTHZVIMD.js → chunk-T2VDEFUU.js} +2 -2
- package/chunks/{chunk-C7JA3XCX.js → chunk-TKXRLRTF.js} +5 -5
- package/chunks/{chunk-LF6BKGZT.js → chunk-TXVGVZYR.js} +3 -3
- package/chunks/{chunk-XU7BKR3B.js → chunk-XU5P23GN.js} +3 -3
- package/chunks/{computer-use-OB3C5QG2.js → computer-use-WOKHYISX.js} +24 -22
- package/chunks/contextCommand-JSYQAO3O.js +56 -0
- package/chunks/{cron-create-THNDTYXU.js → cron-create-A5637KCI.js} +12 -9
- package/chunks/{cron-delete-BS5H6TFJ.js → cron-delete-AADOSEOZ.js} +4 -4
- package/chunks/{cron-list-7OBVHT7K.js → cron-list-OFCPTT2Y.js} +4 -4
- package/chunks/{dist-GKRNVFBH.js → dist-ZBX7LPJZ.js} +2 -1
- package/chunks/{edit-GNCLIF67.js → edit-6EN6NO6G.js} +24 -22
- package/chunks/{en-S3OQBISC.js → en-7OGNWWME.js} +48 -0
- package/chunks/{enter-worktree-E7BNZOGT.js → enter-worktree-XJ4S74CL.js} +24 -22
- package/chunks/{enterPlanMode-IA42A5EU.js → enterPlanMode-GQNQIH2V.js} +27 -23
- package/chunks/{exit-worktree-QJ2K74UT.js → exit-worktree-6MKLATVB.js} +24 -22
- package/chunks/{exitPlanMode-UKKHBUYJ.js → exitPlanMode-YACWA5GO.js} +36 -28
- package/chunks/{geminiContentGenerator-ICSDM37U.js → geminiContentGenerator-OLJGOIWO.js} +4 -4
- package/chunks/{glob-IGD7LWYX.js → glob-YHSIN2LG.js} +26 -23
- package/chunks/{grep-IZM3IVND.js → grep-5EMEAJBO.js} +24 -22
- package/chunks/{keychain-token-storage-YHXIWXIB.js → keychain-token-storage-CSYMNRPP.js} +2 -2
- package/chunks/{loop-wakeup-SSBWZ64K.js → loop-wakeup-DGSMT4N6.js} +5 -5
- package/chunks/{ls-YPFUHZRQ.js → ls-UGRZ4ZOM.js} +6 -6
- package/chunks/{lsp-FD6DNVAF.js → lsp-72IJURW3.js} +2 -2
- package/chunks/{monitor-ALJNE3R4.js → monitor-ZGXTGINM.js} +24 -22
- package/chunks/{notebook-edit-7XRZX55T.js → notebook-edit-O7WO3APR.js} +25 -23
- package/chunks/{openaiContentGenerator-FWKITDFJ.js → openaiContentGenerator-N4FCEGU2.js} +12 -15
- package/chunks/{qwenContentGenerator-5RPGQZ63.js → qwenContentGenerator-BOAZ7MMG.js} +26 -24
- package/chunks/{qwenOAuth2-WZ54YZ4J.js → qwenOAuth2-K4AASPCV.js} +5 -4
- package/chunks/{read-file-4WN2DT5N.js → read-file-RB35MI5I.js} +9 -8
- package/chunks/{ripGrep-4ZKT6KBQ.js → ripGrep-CWJOA6JG.js} +24 -22
- package/chunks/{scheduler-O2E65VDK.js → scheduler-XUBHNI2Z.js} +73 -27
- package/chunks/{send-message-FWFTX62Q.js → send-message-URUZ7PLA.js} +24 -4
- package/chunks/{serve-3DM6CRGD.js → serve-P356SCA2.js} +618 -92
- package/chunks/{shell-ARVZK6RF.js → shell-5TRHTPML.js} +24 -22
- package/chunks/{skill-BFUBGA4I.js → skill-RW6N7GHL.js} +11 -10
- package/chunks/{src-5YMCDSII.js → src-SPEHQKTK.js} +140 -67
- package/chunks/{syntheticOutput-JY5NEDTV.js → syntheticOutput-65FRJGWM.js} +3 -3
- package/chunks/{task-create-IGILDV25.js → task-create-IH45HOFT.js} +6 -6
- package/chunks/{task-list-KBEJVAAG.js → task-list-FUB6JWSX.js} +5 -5
- package/chunks/{task-stop-WFTMQ6AC.js → task-stop-P6IOHQM3.js} +2 -2
- package/chunks/{task-update-UIVX7ZEV.js → task-update-RTUT7LJV.js} +6 -6
- package/chunks/{team-create-HRBV5ATK.js → team-create-D6GSPXCO.js} +28 -26
- package/chunks/{team-delete-LPOXDPVB.js → team-delete-RXGYRMHC.js} +5 -5
- package/chunks/{todoWrite-R4RIJKOD.js → todoWrite-O6JK24G6.js} +4 -4
- package/chunks/{tool-search-67HI54YA.js → tool-search-6YIMUUVD.js} +9 -8
- package/chunks/{web-fetch-JU7SS6KE.js → web-fetch-KUMBROUI.js} +4 -4
- package/chunks/{workflow-W4SCLWLU.js → workflow-ML3XFTCN.js} +557 -97
- package/chunks/{write-file-TLNXC2NR.js → write-file-VLT6ODLK.js} +24 -22
- package/chunks/{zh-QXLZV2PX.js → zh-3RMSEO5M.js} +48 -0
- package/chunks/{zh-TW-3OKU7LDA.js → zh-TW-R7WRLTJS.js} +48 -0
- package/cli.js +8559 -5100
- package/locales/en.js +69 -0
- package/locales/zh-TW.js +66 -0
- package/locales/zh.js +66 -0
- package/package.json +3 -2
- package/web-shell/assets/{arc-CRFN10gD.js → arc-DHUeMnnj.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-IRlu1CpH.js → architectureDiagram-3BPJPVTR-DlX12yyj.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-htIZ6iw8.js → blockDiagram-GPEHLZMM-DTFUXMUT.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-A2GoRq3O.js → c4Diagram-AAUBKEIU-CWdB54fk.js} +1 -1
- package/web-shell/assets/channel-C3WhMjjP.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CdP2AC6u.js → chunk-2J33WTMH-CF5C5jNR.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-DrA07nW2.js → chunk-4BX2VUAB-Cw7Ydfji.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-CFGnVU2f.js → chunk-55IACEB6-CnbI1ZCw.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-BTMkq3Tk.js → chunk-727SXJPM-DmSy00Pe.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-C9sYg04Z.js → chunk-AQP2D5EJ-DgNgXqBu.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-Cag-cj6I.js → chunk-FMBD7UC4-tz2IvOXv.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-CDSTFoR7.js → chunk-ND2GUHAM-DaBLEBPa.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-CN9Z6oOs.js → chunk-QZHKN3VN-DVCQST3O.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CQ6TXPif.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CQ6TXPif.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-DuN9j8Du.js → cose-bilkent-S5V4N54A-CAKTcdCQ.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-ByCWe45f.js → dagre-BM42HDAG-BdkBwlKg.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-eWyU_pKZ.js → diagram-2AECGRRQ-DYt3G65F.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-0Bfu3Fq5.js → diagram-5GNKFQAL-BWvROWjY.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-B6KBKkQP.js → diagram-KO2AKTUF-BvvgwIaQ.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-TToDmeA_.js → diagram-LMA3HP47-E7NLSNKg.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CQCkC2Yx.js → diagram-OG6HWLK6-CYmUBgpE.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-Cm9ls1iB.js → erDiagram-TEJ5UH35-BU5gY30h.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-Dyoz80Pv.js → flowDiagram-I6XJVG4X-V_ZssSZ9.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-Cfut9yaU.js → ganttDiagram-6RSMTGT7-QIShlsdI.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BCuJdlfD.js → gitGraphDiagram-PVQCEYII-DJxdu2YS.js} +1 -1
- package/web-shell/assets/index-BPnhI7gl.css +1 -0
- package/web-shell/assets/index-De4rqTsW.js +706 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CXKxF2VL.js → infoDiagram-5YYISTIA-BqjdrFeO.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DE7HWSU8.js → ishikawaDiagram-YF4QCWOH-BP_a2YZ2.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-D__YUfds.js → journeyDiagram-JHISSGLW-BXg-S3Lk.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-D82R169M.js → kanban-definition-UN3LZRKU-BksAkdEJ.js} +1 -1
- package/web-shell/assets/{linear-DpyMbKqT.js → linear-D2m9-ODE.js} +1 -1
- package/web-shell/assets/{mermaid.core-D1KEFDhn.js → mermaid.core-dTtkZp2F.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BwVUFGFE.js → mindmap-definition-RKZ34NQL-Bft9my8O.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-BO_qoEGx.js → pieDiagram-4H26LBE5-Cw8S-alZ.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js → quadrantDiagram-W4KKPZXB-DaDoTMts.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BJPXejOA.js → requirementDiagram-4Y6WPE33-Cp5kSpwj.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C1xeIL9i.js → sankeyDiagram-5OEKKPKP-CW8RsJJZ.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CSYKQUjf.js → sequenceDiagram-3UESZ5HK-DTfpIiJK.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-d9hiHlAW.js → stateDiagram-AJRCARHV-DixFVzEs.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DZgE04s3.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-BhCBkq8k.js → timeline-definition-PNZ67QCA-DYsbXn5l.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DPPFWp_y.js → vennDiagram-CIIHVFJN-HUpRpuUp.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-CcOUIgXY.js → wardley-L42UT6IY-cT3nQH_T.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-p7oR5X7r.js → wardleyDiagram-YWT4CUSO-Dmm7J6Qc.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-Dfr7-SEy.js → xychartDiagram-2RQKCTM6-CX0L5p9C.js} +1 -1
- package/web-shell/index.html +3 -3
- package/chunks/chunk-77WXWU44.js +0 -26
- package/chunks/contextCommand-3327KUC4.js +0 -54
- package/web-shell/assets/channel-WwImfsc7.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +0 -1
- package/web-shell/assets/index-BDZiTAkl.css +0 -1
- package/web-shell/assets/index-DaebdpHq.js +0 -516
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DgReoybQ.js +0 -1
|
@@ -4,11 +4,11 @@ Qwen Code allows you to configure multiple model providers through the `modelPro
|
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
Use `modelProviders` to declare
|
|
7
|
+
Use `modelProviders` to declare models per auth type that the `/model` picker can switch between. Keys must be valid auth types (`openai`, `anthropic`, `gemini`, etc.). Each auth type maps to a `ProviderConfig` object with a `protocol` field and a `models` field (the array of model definitions). Each entry in `models` requires an `id`; `envKey` is **optional and recommended** (when omitted, it falls back to the auth type's default env key, e.g. `OPENAI_API_KEY` for `openai`), with optional `name`, `description`, `baseUrl`, and `generationConfig`. Credentials are never persisted in settings; the runtime reads them from `process.env[envKey]`. Qwen OAuth models remain hard-coded and cannot be overridden.
|
|
8
8
|
|
|
9
9
|
> [!note]
|
|
10
10
|
>
|
|
11
|
-
> Only the `/model` command exposes non-default auth types. Anthropic, Gemini, etc., must be defined via `modelProviders`. The `/auth` command lists
|
|
11
|
+
> Only the `/model` command exposes non-default auth types. Anthropic, Gemini, etc., must be defined via `modelProviders`. The `/auth` command lists three top-level options: **Alibaba ModelStudio** (with Coding Plan, Token Plan, and Standard API Key in its sub-menu), **Third-party Providers**, and **Custom Provider**. (Qwen OAuth is no longer a selectable dialog entry; its free tier was discontinued on 2026-04-15.)
|
|
12
12
|
|
|
13
13
|
> [!note]
|
|
14
14
|
>
|
|
@@ -28,9 +28,10 @@ The `modelProviders` object keys must be valid `authType` values. Currently supp
|
|
|
28
28
|
| `anthropic` | Anthropic Claude API |
|
|
29
29
|
| `gemini` | Google Gemini API |
|
|
30
30
|
| `qwen-oauth` | Qwen OAuth (hard-coded, cannot be overridden in `modelProviders`) |
|
|
31
|
+
| `vertex-ai` | Google Vertex AI (uses the `gemini` protocol and the `@google/genai` SDK in Vertex AI mode; selecting it sets `GOOGLE_GENAI_USE_VERTEXAI=true`) |
|
|
31
32
|
|
|
32
33
|
> [!warning]
|
|
33
|
-
> If an
|
|
34
|
+
> If an unknown auth type key is used (e.g., a typo like `"openai-custom"`), a non-empty key is accepted as-is as its own auth-type group, but it will not map to a known protocol — so its models won't work as intended and won't behave correctly in the `/model` picker. Only blank (empty or whitespace-only) keys are skipped. Always use one of the supported auth type values listed above.
|
|
34
35
|
|
|
35
36
|
### SDKs Used for API Requests
|
|
36
37
|
|
|
@@ -57,76 +58,79 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
57
58
|
"REQUESTY_API_KEY": "sk-your-actual-requesty-key-here"
|
|
58
59
|
},
|
|
59
60
|
"modelProviders": {
|
|
60
|
-
"openai":
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
61
|
+
"openai": {
|
|
62
|
+
"protocol": "openai",
|
|
63
|
+
"models": [
|
|
64
|
+
{
|
|
65
|
+
"id": "gpt-4o",
|
|
66
|
+
"name": "GPT-4o",
|
|
67
|
+
"envKey": "OPENAI_API_KEY",
|
|
68
|
+
"baseUrl": "https://api.openai.com/v1",
|
|
69
|
+
"generationConfig": {
|
|
70
|
+
"timeout": 60000,
|
|
71
|
+
"maxRetries": 3,
|
|
72
|
+
"enableCacheControl": true,
|
|
73
|
+
"contextWindowSize": 128000,
|
|
74
|
+
"modalities": {
|
|
75
|
+
"image": true
|
|
76
|
+
},
|
|
77
|
+
"customHeaders": {
|
|
78
|
+
"X-Client-Request-ID": "req-123"
|
|
79
|
+
},
|
|
80
|
+
"extra_body": {
|
|
81
|
+
"enable_thinking": true,
|
|
82
|
+
"service_tier": "priority"
|
|
83
|
+
},
|
|
84
|
+
"samplingParams": {
|
|
85
|
+
"temperature": 0.2,
|
|
86
|
+
"top_p": 0.8,
|
|
87
|
+
"max_tokens": 4096,
|
|
88
|
+
"presence_penalty": 0.1,
|
|
89
|
+
"frequency_penalty": 0.1
|
|
90
|
+
}
|
|
87
91
|
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "gpt-4o-mini",
|
|
95
|
+
"name": "GPT-4o Mini",
|
|
96
|
+
"envKey": "OPENAI_API_KEY",
|
|
97
|
+
"baseUrl": "https://api.openai.com/v1",
|
|
98
|
+
"generationConfig": {
|
|
99
|
+
"timeout": 30000,
|
|
100
|
+
"samplingParams": {
|
|
101
|
+
"temperature": 0.5,
|
|
102
|
+
"max_tokens": 2048
|
|
103
|
+
}
|
|
100
104
|
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "openai/gpt-4o",
|
|
108
|
+
"name": "GPT-4o (via OpenRouter)",
|
|
109
|
+
"envKey": "OPENROUTER_API_KEY",
|
|
110
|
+
"baseUrl": "https://openrouter.ai/api/v1",
|
|
111
|
+
"generationConfig": {
|
|
112
|
+
"timeout": 120000,
|
|
113
|
+
"maxRetries": 3,
|
|
114
|
+
"samplingParams": {
|
|
115
|
+
"temperature": 0.7
|
|
116
|
+
}
|
|
113
117
|
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"id": "openai/gpt-4o-mini",
|
|
121
|
+
"name": "GPT-4o Mini (via Requesty)",
|
|
122
|
+
"envKey": "REQUESTY_API_KEY",
|
|
123
|
+
"baseUrl": "https://router.requesty.ai/v1",
|
|
124
|
+
"generationConfig": {
|
|
125
|
+
"timeout": 120000,
|
|
126
|
+
"maxRetries": 3,
|
|
127
|
+
"samplingParams": {
|
|
128
|
+
"temperature": 0.7
|
|
129
|
+
}
|
|
126
130
|
}
|
|
127
131
|
}
|
|
128
|
-
|
|
129
|
-
|
|
132
|
+
]
|
|
133
|
+
}
|
|
130
134
|
}
|
|
131
135
|
}
|
|
132
136
|
```
|
|
@@ -139,37 +143,40 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
139
143
|
"ANTHROPIC_API_KEY": "sk-ant-your-actual-anthropic-key-here"
|
|
140
144
|
},
|
|
141
145
|
"modelProviders": {
|
|
142
|
-
"anthropic":
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
"
|
|
150
|
-
"
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
"
|
|
154
|
-
"
|
|
155
|
-
|
|
146
|
+
"anthropic": {
|
|
147
|
+
"protocol": "anthropic",
|
|
148
|
+
"models": [
|
|
149
|
+
{
|
|
150
|
+
"id": "claude-3-5-sonnet",
|
|
151
|
+
"name": "Claude 3.5 Sonnet",
|
|
152
|
+
"envKey": "ANTHROPIC_API_KEY",
|
|
153
|
+
"baseUrl": "https://api.anthropic.com/v1",
|
|
154
|
+
"generationConfig": {
|
|
155
|
+
"timeout": 120000,
|
|
156
|
+
"maxRetries": 3,
|
|
157
|
+
"contextWindowSize": 200000,
|
|
158
|
+
"samplingParams": {
|
|
159
|
+
"temperature": 0.7,
|
|
160
|
+
"max_tokens": 8192,
|
|
161
|
+
"top_p": 0.9
|
|
162
|
+
}
|
|
156
163
|
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "claude-3-opus",
|
|
167
|
+
"name": "Claude 3 Opus",
|
|
168
|
+
"envKey": "ANTHROPIC_API_KEY",
|
|
169
|
+
"baseUrl": "https://api.anthropic.com/v1",
|
|
170
|
+
"generationConfig": {
|
|
171
|
+
"timeout": 180000,
|
|
172
|
+
"samplingParams": {
|
|
173
|
+
"temperature": 0.3,
|
|
174
|
+
"max_tokens": 4096
|
|
175
|
+
}
|
|
169
176
|
}
|
|
170
177
|
}
|
|
171
|
-
|
|
172
|
-
|
|
178
|
+
]
|
|
179
|
+
}
|
|
173
180
|
}
|
|
174
181
|
}
|
|
175
182
|
```
|
|
@@ -182,29 +189,32 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
182
189
|
"GEMINI_API_KEY": "AIza-your-actual-gemini-key-here"
|
|
183
190
|
},
|
|
184
191
|
"modelProviders": {
|
|
185
|
-
"gemini":
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
"
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
"
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
"
|
|
201
|
-
"
|
|
202
|
-
|
|
203
|
-
|
|
192
|
+
"gemini": {
|
|
193
|
+
"protocol": "gemini",
|
|
194
|
+
"models": [
|
|
195
|
+
{
|
|
196
|
+
"id": "gemini-2.0-flash",
|
|
197
|
+
"name": "Gemini 2.0 Flash",
|
|
198
|
+
"envKey": "GEMINI_API_KEY",
|
|
199
|
+
"baseUrl": "https://generativelanguage.googleapis.com",
|
|
200
|
+
"capabilities": {
|
|
201
|
+
"vision": true
|
|
202
|
+
},
|
|
203
|
+
"generationConfig": {
|
|
204
|
+
"timeout": 60000,
|
|
205
|
+
"maxRetries": 2,
|
|
206
|
+
"contextWindowSize": 1000000,
|
|
207
|
+
"schemaCompliance": "auto",
|
|
208
|
+
"samplingParams": {
|
|
209
|
+
"temperature": 0.4,
|
|
210
|
+
"top_p": 0.95,
|
|
211
|
+
"max_tokens": 8192,
|
|
212
|
+
"top_k": 40
|
|
213
|
+
}
|
|
204
214
|
}
|
|
205
215
|
}
|
|
206
|
-
|
|
207
|
-
|
|
216
|
+
]
|
|
217
|
+
}
|
|
208
218
|
}
|
|
209
219
|
}
|
|
210
220
|
```
|
|
@@ -221,51 +231,54 @@ Most local inference servers (vLLM, Ollama, LM Studio, etc.) provide an OpenAI-c
|
|
|
221
231
|
"LMSTUDIO_API_KEY": "lm-studio"
|
|
222
232
|
},
|
|
223
233
|
"modelProviders": {
|
|
224
|
-
"openai":
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
"
|
|
232
|
-
"
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
"
|
|
236
|
-
"
|
|
237
|
-
|
|
234
|
+
"openai": {
|
|
235
|
+
"protocol": "openai",
|
|
236
|
+
"models": [
|
|
237
|
+
{
|
|
238
|
+
"id": "qwen2.5-7b",
|
|
239
|
+
"name": "Qwen2.5 7B (Ollama)",
|
|
240
|
+
"envKey": "OLLAMA_API_KEY",
|
|
241
|
+
"baseUrl": "http://localhost:11434/v1",
|
|
242
|
+
"generationConfig": {
|
|
243
|
+
"timeout": 300000,
|
|
244
|
+
"maxRetries": 1,
|
|
245
|
+
"contextWindowSize": 32768,
|
|
246
|
+
"samplingParams": {
|
|
247
|
+
"temperature": 0.7,
|
|
248
|
+
"top_p": 0.9,
|
|
249
|
+
"max_tokens": 4096
|
|
250
|
+
}
|
|
238
251
|
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"id": "llama-3.1-8b",
|
|
255
|
+
"name": "Llama 3.1 8B (vLLM)",
|
|
256
|
+
"envKey": "VLLM_API_KEY",
|
|
257
|
+
"baseUrl": "http://localhost:8000/v1",
|
|
258
|
+
"generationConfig": {
|
|
259
|
+
"timeout": 120000,
|
|
260
|
+
"maxRetries": 2,
|
|
261
|
+
"contextWindowSize": 128000,
|
|
262
|
+
"samplingParams": {
|
|
263
|
+
"temperature": 0.6,
|
|
264
|
+
"max_tokens": 8192
|
|
265
|
+
}
|
|
253
266
|
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"id": "local-model",
|
|
270
|
+
"name": "Local Model (LM Studio)",
|
|
271
|
+
"envKey": "LMSTUDIO_API_KEY",
|
|
272
|
+
"baseUrl": "http://localhost:1234/v1",
|
|
273
|
+
"generationConfig": {
|
|
274
|
+
"timeout": 60000,
|
|
275
|
+
"samplingParams": {
|
|
276
|
+
"temperature": 0.5
|
|
277
|
+
}
|
|
265
278
|
}
|
|
266
279
|
}
|
|
267
|
-
|
|
268
|
-
|
|
280
|
+
]
|
|
281
|
+
}
|
|
269
282
|
}
|
|
270
283
|
}
|
|
271
284
|
```
|
|
@@ -332,7 +345,7 @@ When you authenticate with an Alibaba Cloud Coding Plan API key using the `/auth
|
|
|
332
345
|
- **China**: <https://bailian.console.aliyun.com/?tab=model#/efm/coding_plan>
|
|
333
346
|
- **International**: <https://modelstudio.console.alibabacloud.com/?tab=dashboard#/efm/coding_plan>
|
|
334
347
|
2. Run the `/auth` command in Qwen Code
|
|
335
|
-
3. Select **Alibaba
|
|
348
|
+
3. Select **Alibaba ModelStudio**, then choose **Coding Plan** from the sub-menu
|
|
336
349
|
4. Select your region
|
|
337
350
|
5. Enter your API key when prompted
|
|
338
351
|
|
|
@@ -381,15 +394,18 @@ If you prefer to manually configure Coding Plan models, you can add them to your
|
|
|
381
394
|
```json
|
|
382
395
|
{
|
|
383
396
|
"modelProviders": {
|
|
384
|
-
"openai":
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
397
|
+
"openai": {
|
|
398
|
+
"protocol": "openai",
|
|
399
|
+
"models": [
|
|
400
|
+
{
|
|
401
|
+
"id": "qwen3-coder-plus",
|
|
402
|
+
"name": "qwen3-coder-plus",
|
|
403
|
+
"description": "Qwen3-Coder via Alibaba Cloud Coding Plan",
|
|
404
|
+
"envKey": "YOUR_CUSTOM_ENV_KEY",
|
|
405
|
+
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1"
|
|
406
|
+
}
|
|
407
|
+
]
|
|
408
|
+
}
|
|
393
409
|
}
|
|
394
410
|
}
|
|
395
411
|
```
|
|
@@ -414,10 +430,10 @@ The effective auth/model/credential values are chosen per field using the follow
|
|
|
414
430
|
| -------------------------- | ----------------------------------- | ----------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------- | ---------------------- | --------------------------------- |
|
|
415
431
|
| Programmatic overrides | `/auth` | `/auth` input | `/auth` input | `/auth` input | — | — |
|
|
416
432
|
| Model provider selection | — | `modelProvider.id` | `env[modelProvider.envKey]` | `modelProvider.baseUrl` | `modelProvider.envKey` | — |
|
|
417
|
-
| CLI arguments | `--auth-type` | `--model` | `--
|
|
433
|
+
| CLI arguments | `--auth-type` | `--model` | `--openai-api-key` (or provider-specific equivalents) | `--openai-base-url` (or provider-specific equivalents) | — | — |
|
|
418
434
|
| Environment variables | — | Provider-specific mapping (e.g. `OPENAI_MODEL`) | Provider-specific mapping (e.g. `OPENAI_API_KEY`) | Provider-specific mapping (e.g. `OPENAI_BASE_URL`) | — | — |
|
|
419
435
|
| Settings (`settings.json`) | `security.auth.selectedType` | `model.name` | `security.auth.apiKey` | `security.auth.baseUrl` | — | — |
|
|
420
|
-
| Default / computed | Falls back to `AuthType.QWEN_OAUTH` | Built-in default (OpenAI ⇒ `qwen3-
|
|
436
|
+
| Default / computed | Falls back to `AuthType.QWEN_OAUTH` | Built-in default (OpenAI ⇒ `qwen3.5-plus`) | — | — | — | `Config.getProxy()` if configured |
|
|
421
437
|
|
|
422
438
|
\*When present, CLI auth flags override settings. Otherwise, `security.auth.selectedType` or the implicit default determine the auth type. Qwen OAuth and OpenAI are the only auth types surfaced without extra configuration.
|
|
423
439
|
|
|
@@ -469,7 +485,7 @@ The following fields are treated as atomic objects - provider values completely
|
|
|
469
485
|
|
|
470
486
|
### Example
|
|
471
487
|
|
|
472
|
-
```
|
|
488
|
+
```jsonc
|
|
473
489
|
// User settings (~/.qwen/settings.json)
|
|
474
490
|
{
|
|
475
491
|
"model": {
|
|
@@ -483,14 +499,17 @@ The following fields are treated as atomic objects - provider values completely
|
|
|
483
499
|
// modelProviders configuration
|
|
484
500
|
{
|
|
485
501
|
"modelProviders": {
|
|
486
|
-
"openai":
|
|
487
|
-
"
|
|
488
|
-
"
|
|
489
|
-
|
|
490
|
-
"
|
|
491
|
-
"
|
|
492
|
-
|
|
493
|
-
|
|
502
|
+
"openai": {
|
|
503
|
+
"protocol": "openai",
|
|
504
|
+
"models": [{
|
|
505
|
+
"id": "gpt-4o",
|
|
506
|
+
"envKey": "OPENAI_API_KEY",
|
|
507
|
+
"generationConfig": {
|
|
508
|
+
"timeout": 60000,
|
|
509
|
+
"samplingParams": { "temperature": 0.2 }
|
|
510
|
+
}
|
|
511
|
+
}]
|
|
512
|
+
}
|
|
494
513
|
}
|
|
495
514
|
}
|
|
496
515
|
```
|
|
@@ -516,22 +535,25 @@ The optional `reasoning` field under `generationConfig` controls how aggressivel
|
|
|
516
535
|
```jsonc
|
|
517
536
|
{
|
|
518
537
|
"modelProviders": {
|
|
519
|
-
"openai":
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
538
|
+
"openai": {
|
|
539
|
+
"protocol": "openai",
|
|
540
|
+
"models": [
|
|
541
|
+
{
|
|
542
|
+
"id": "deepseek-v4-pro",
|
|
543
|
+
"name": "DeepSeek V4 Pro",
|
|
544
|
+
"baseUrl": "https://api.deepseek.com/v1",
|
|
545
|
+
"envKey": "DEEPSEEK_API_KEY",
|
|
546
|
+
"generationConfig": {
|
|
547
|
+
// The four-tier scale:
|
|
548
|
+
// 'low' | 'medium' — server-mapped to 'high' on DeepSeek
|
|
549
|
+
// 'high' — default reasoning intensity
|
|
550
|
+
// 'max' — DeepSeek-specific extra-strong tier
|
|
551
|
+
// Or set `false` to disable reasoning entirely.
|
|
552
|
+
"reasoning": { "effort": "max" },
|
|
553
|
+
},
|
|
532
554
|
},
|
|
533
|
-
|
|
534
|
-
|
|
555
|
+
],
|
|
556
|
+
},
|
|
535
557
|
},
|
|
536
558
|
}
|
|
537
559
|
```
|
|
@@ -598,7 +620,7 @@ When you configure a model without using `modelProviders`, Qwen Code automatical
|
|
|
598
620
|
|
|
599
621
|
```bash
|
|
600
622
|
# This creates a RuntimeModelSnapshot with ID: $runtime|openai|my-custom-model
|
|
601
|
-
qwen --auth-type openai --model my-custom-model --
|
|
623
|
+
qwen --auth-type openai --model my-custom-model --openai-api-key $KEY --openai-base-url https://api.example.com/v1
|
|
602
624
|
```
|
|
603
625
|
|
|
604
626
|
The snapshot:
|
|
@@ -1,33 +1,49 @@
|
|
|
1
1
|
# Ignoring Files
|
|
2
2
|
|
|
3
|
-
This document provides an overview of the Qwen Ignore (`.qwenignore`) feature of Qwen Code.
|
|
3
|
+
This document provides an overview of the Qwen Ignore (`.qwenignore`) feature of Qwen Code. Qwen Code also recognizes custom ignore files configured by `context.fileFiltering.customIgnoreFiles`, which defaults to the compatibility files `.agentignore` and `.aiignore`.
|
|
4
4
|
|
|
5
|
-
Qwen Code includes the ability to automatically ignore files, similar to `.gitignore` (used by Git). Adding paths to
|
|
5
|
+
Qwen Code includes the ability to automatically ignore files, similar to `.gitignore` (used by Git). Adding paths to `.qwenignore` or a configured custom ignore file will exclude them from tools that support this feature, although they will still be visible to other services (such as Git).
|
|
6
6
|
|
|
7
7
|
## How it works
|
|
8
8
|
|
|
9
|
-
When you add a path to
|
|
9
|
+
When you add a path to one of these ignore files, tools that respect Qwen ignore rules will exclude matching files and directories from their operations. For example, when you use the [`read_many_files`](../../developers/tools/multi-file) command, any paths in `.qwenignore` or configured custom ignore files will be automatically excluded.
|
|
10
10
|
|
|
11
|
-
For the most part,
|
|
11
|
+
For the most part, these ignore files follow the conventions of `.gitignore` files:
|
|
12
12
|
|
|
13
13
|
- Blank lines and lines starting with `#` are ignored.
|
|
14
14
|
- Standard glob patterns are supported (such as `*`, `?`, and `[]`).
|
|
15
15
|
- Putting a `/` at the end will only match directories.
|
|
16
|
-
- Putting a `/` at the beginning anchors the path relative to the
|
|
16
|
+
- Putting a `/` at the beginning anchors the path relative to the ignore file.
|
|
17
17
|
- `!` negates a pattern.
|
|
18
18
|
|
|
19
|
-
You can update
|
|
19
|
+
You can update these ignore files at any time. To apply the changes, you must restart your Qwen Code session.
|
|
20
20
|
|
|
21
|
-
## How to use
|
|
21
|
+
## How to use ignore files
|
|
22
22
|
|
|
23
|
-
| Step
|
|
24
|
-
|
|
|
25
|
-
| **Enable
|
|
26
|
-
| **Add ignore rules**
|
|
23
|
+
| Step | Description |
|
|
24
|
+
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
25
|
+
| **Enable ignore rules** | Create `.qwenignore`, a default custom file (`.agentignore` / `.aiignore`), or a configured custom ignore file in your project root directory |
|
|
26
|
+
| **Add ignore rules** | Open the ignore file and add paths to ignore, example: `/archive/` or `apikeys.txt` |
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
By default, Qwen Code reads `.qwenignore`, `.agentignore`, and `.aiignore`.
|
|
29
|
+
To use a different custom ignore file, configure:
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"context": {
|
|
34
|
+
"fileFiltering": {
|
|
35
|
+
"customIgnoreFiles": [".cursorignore"]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`.qwenignore` is always included when `context.fileFiltering.respectQwenIgnore`
|
|
42
|
+
is enabled. Custom ignore file paths are relative to the project root.
|
|
43
|
+
|
|
44
|
+
### Ignore file examples
|
|
45
|
+
|
|
46
|
+
You can use any supported ignore file to ignore directories and files:
|
|
31
47
|
|
|
32
48
|
```
|
|
33
49
|
# Exclude your /packages/ directory and all subdirectories
|
|
@@ -37,7 +53,7 @@ You can use `.qwenignore` to ignore directories and files:
|
|
|
37
53
|
apikeys.txt
|
|
38
54
|
```
|
|
39
55
|
|
|
40
|
-
You can use wildcards in your
|
|
56
|
+
You can use wildcards in your ignore file with `*`:
|
|
41
57
|
|
|
42
58
|
```
|
|
43
59
|
# Exclude all .md files
|
|
@@ -52,4 +68,4 @@ Finally, you can exclude files and directories from exclusion with `!`:
|
|
|
52
68
|
!README.md
|
|
53
69
|
```
|
|
54
70
|
|
|
55
|
-
To remove paths from
|
|
71
|
+
To remove paths from an ignore file, delete the relevant lines.
|