@qwen-code/qwen-code 0.18.4 → 0.18.5-preview.0
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 +75 -54
- package/bundled/qc-helper/docs/configuration/model-providers.md +221 -185
- package/bundled/qc-helper/docs/configuration/qwen-ignore.md +31 -15
- package/bundled/qc-helper/docs/configuration/settings.md +70 -53
- 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/approval-mode.md +2 -0
- 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 +78 -10
- 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-LYTC56HT.js → agent-P4KSTVXX.js} +24 -22
- package/chunks/{agent-headless-FPUP5WHP.js → agent-headless-QUAPWF55.js} +24 -22
- package/chunks/{anthropicContentGenerator-OLOGBVLP.js → anthropicContentGenerator-7352A7I5.js} +17 -14
- package/chunks/artifact-tool-5J4HUZAV.js +675 -0
- package/chunks/{askUserQuestion-ANRVSBIJ.js → askUserQuestion-HF7HCWDD.js} +20 -7
- package/chunks/{ca-K6MD665I.js → ca-7WC7ELX6.js} +1 -0
- package/chunks/chunk-22IFUCVR.js +291 -0
- package/chunks/{chunk-M5VYHAHT.js → chunk-2BIF2NVV.js} +2 -2
- package/chunks/{chunk-AQDPHFDZ.js → chunk-2QDQTWCI.js} +1 -1
- package/chunks/{chunk-2ES3D3TW.js → chunk-3BR4OIOE.js} +3 -3
- package/chunks/{chunk-N5QHMPZU.js → chunk-3UALQ56H.js} +1 -1
- package/chunks/{chunk-5RVEAAD2.js → chunk-BC5POO46.js} +8 -7
- package/chunks/{chunk-DZCZZPCY.js → chunk-BGUDAULQ.js} +11 -290
- package/chunks/{chunk-FPZF3BNV.js → chunk-BNXANYLH.js} +1 -1
- package/chunks/{chunk-IKOWINH4.js → chunk-C4K3FEQ2.js} +42 -2
- package/chunks/{chunk-PTGKSUUJ.js → chunk-CGEGHF2C.js} +2 -207
- package/chunks/chunk-EEEZIVFJ.js +908 -0
- package/chunks/{chunk-GBTJHKQ6.js → chunk-EIJYMXXX.js} +619 -135
- package/chunks/chunk-EJYJYJZ2.js +3703 -0
- package/chunks/{chunk-F6FP3URI.js → chunk-EW6C27XX.js} +1 -1
- package/chunks/{chunk-HU3RKEK2.js → chunk-F6XNTYNE.js} +216 -1
- package/chunks/{chunk-4HMWGHPP.js → chunk-GZCJS5WH.js} +2 -2
- package/chunks/{chunk-E5SRTXRG.js → chunk-HGNSRCRB.js} +1 -1
- package/chunks/{chunk-IUEQOXOI.js → chunk-KBXLIVWQ.js} +2 -2
- package/chunks/{chunk-JJHY7NAD.js → chunk-L7U2RI5O.js} +59 -57
- package/chunks/{chunk-JN6FVOPP.js → chunk-NKJ6LRCR.js} +2 -2
- package/chunks/{chunk-7OCZ77KA.js → chunk-NWLUISRA.js} +1 -1
- package/chunks/{chunk-JIJBNW4A.js → chunk-OTBK43JR.js} +1 -1
- package/chunks/{chunk-WWU2KUSR.js → chunk-PRYMDRBV.js} +1 -1
- package/chunks/{chunk-KQIKOTQJ.js → chunk-RYLJU2DY.js} +60 -5
- package/chunks/{chunk-VWPDSQZY.js → chunk-T2VDEFUU.js} +2 -2
- package/chunks/{chunk-LXUQBWQA.js → chunk-T336V435.js} +93 -45
- package/chunks/{chunk-4TW2JM5Q.js → chunk-TXVGVZYR.js} +3 -3
- package/chunks/{chunk-6Z2MVJIJ.js → chunk-UMRZ7XCR.js} +172 -5017
- package/chunks/{chunk-7GX7XYZU.js → chunk-XU5P23GN.js} +3 -3
- package/chunks/{chunk-SZWDOOGV.js → chunk-ZC675NGC.js} +11 -11
- package/chunks/{chunk-32SSXBMG.js → chunk-ZXNEOCW2.js} +8049 -5520
- package/chunks/{computer-use-P4WQBATW.js → computer-use-4TLHI3UR.js} +26 -23
- package/chunks/contextCommand-HFEITKSR.js +56 -0
- package/chunks/{cron-create-OKGQO6GX.js → cron-create-A5637KCI.js} +12 -9
- package/chunks/{cron-delete-DTJP7L6O.js → cron-delete-AADOSEOZ.js} +4 -4
- package/chunks/{cron-list-VKZUASFG.js → cron-list-OFCPTT2Y.js} +4 -4
- package/chunks/{de-K2F3T3TR.js → de-ACHALDED.js} +1 -0
- package/chunks/{dist-OLC6NBSB.js → dist-DZ6AJDX4.js} +1 -1
- package/chunks/{dist-QUSDBLAK.js → dist-ZBX7LPJZ.js} +6 -1
- package/chunks/{edit-CS7DSS4Z.js → edit-B7H73V6O.js} +24 -22
- package/chunks/{en-KGSAKBJP.js → en-7OGNWWME.js} +49 -0
- package/chunks/{enter-worktree-PA4HPHJK.js → enter-worktree-GG7ZHYPS.js} +24 -22
- package/chunks/{enterPlanMode-SFE5AFKZ.js → enterPlanMode-RHTAKG52.js} +32 -28
- package/chunks/{exit-worktree-FR3AZTC6.js → exit-worktree-U7VQZRMG.js} +24 -22
- package/chunks/{exitPlanMode-AHOUO44D.js → exitPlanMode-S35A36II.js} +36 -28
- package/chunks/{fr-2CAQEOK6.js → fr-GVKZ27MF.js} +1 -0
- package/chunks/{geminiContentGenerator-AXCVDKGI.js → geminiContentGenerator-W7KVATBA.js} +4 -4
- package/chunks/{glob-BQPAW3IW.js → glob-WOFF7ECI.js} +26 -23
- package/chunks/{grep-2F7BL5TQ.js → grep-MWNYWYWQ.js} +24 -22
- package/chunks/{ja-QWL7V6OJ.js → ja-FKZ2WZ4D.js} +1 -0
- package/chunks/{keychain-token-storage-ALKQXYJQ.js → keychain-token-storage-CSYMNRPP.js} +2 -2
- package/chunks/{loop-wakeup-RX6YIUSG.js → loop-wakeup-DGSMT4N6.js} +5 -5
- package/chunks/{ls-6PLNWHMU.js → ls-UGRZ4ZOM.js} +6 -6
- package/chunks/{lsp-3HFQU4OF.js → lsp-72IJURW3.js} +2 -2
- package/chunks/{monitor-YTTMDFW2.js → monitor-AYUINLYN.js} +24 -22
- package/chunks/{notebook-edit-7TNZMTBR.js → notebook-edit-EP4D4WFD.js} +25 -23
- package/chunks/{openaiContentGenerator-JA6YXXPI.js → openaiContentGenerator-SLYYF7AM.js} +12 -13
- package/chunks/{pt-2SPOLMAY.js → pt-SY5NCFGR.js} +1 -0
- package/chunks/{qwenContentGenerator-NBOVGW7B.js → qwenContentGenerator-VZ7JYU4A.js} +27 -25
- package/chunks/{qwenOAuth2-XWC5SU63.js → qwenOAuth2-K4AASPCV.js} +5 -4
- package/chunks/{read-file-RUBU3KUA.js → read-file-65EQ53KS.js} +9 -8
- package/chunks/{ripGrep-TPFC7KZF.js → ripGrep-5XLHJDDM.js} +24 -22
- package/chunks/{ru-35IVJTEH.js → ru-FWNXJG4F.js} +1 -0
- package/chunks/{scheduler-NTVF45LR.js → scheduler-5GLJSA2H.js} +73 -27
- package/chunks/{send-message-IIT3SHA7.js → send-message-URUZ7PLA.js} +24 -4
- package/chunks/{serve-J6VG37OX.js → serve-MUROZGCG.js} +7575 -6916
- package/chunks/{shell-EQQEHEFI.js → shell-ET3BQWKB.js} +24 -22
- package/chunks/{skill-QWRWJCQJ.js → skill-YEYABCAF.js} +11 -10
- package/chunks/{src-LNADIG5P.js → src-POVOI65Y.js} +165 -66
- package/chunks/{syntheticOutput-H67FYXU7.js → syntheticOutput-65FRJGWM.js} +3 -3
- package/chunks/{task-create-OVXHSHAI.js → task-create-IH45HOFT.js} +6 -6
- package/chunks/{task-list-QUUCQJ3U.js → task-list-FUB6JWSX.js} +5 -5
- package/chunks/{task-stop-WA5DMTKK.js → task-stop-P6IOHQM3.js} +2 -2
- package/chunks/{task-update-PC5427TI.js → task-update-RTUT7LJV.js} +6 -6
- package/chunks/{team-create-TXWQL777.js → team-create-EFZFKQFP.js} +28 -26
- package/chunks/{team-delete-ZTEMYRJ3.js → team-delete-RXGYRMHC.js} +5 -5
- package/chunks/{todoWrite-J6L6ELD6.js → todoWrite-O6JK24G6.js} +4 -4
- package/chunks/{tool-search-JAVM7ABF.js → tool-search-BRJC42TE.js} +9 -8
- package/chunks/{web-fetch-6XLPPTP7.js → web-fetch-KUMBROUI.js} +4 -4
- package/chunks/{workflow-7LN3L6KK.js → workflow-UDRBNFTT.js} +557 -97
- package/chunks/{write-file-DAKE7YKB.js → write-file-F7TAHAHF.js} +24 -22
- package/chunks/{zh-X4KM6MTW.js → zh-3RMSEO5M.js} +49 -0
- package/chunks/{zh-TW-BSG6BUWK.js → zh-TW-R7WRLTJS.js} +49 -0
- package/cli.js +9205 -5426
- package/locales/ca.js +2 -1
- package/locales/de.js +1 -0
- package/locales/en.js +70 -0
- package/locales/fr.js +1 -0
- package/locales/ja.js +1 -0
- package/locales/pt.js +1 -0
- package/locales/ru.js +1 -0
- package/locales/zh-TW.js +67 -0
- package/locales/zh.js +67 -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-POQ6GYN3.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
|
|
|
@@ -47,72 +48,89 @@ This means the `baseUrl` you configure should be compatible with the correspondi
|
|
|
47
48
|
|
|
48
49
|
### OpenAI-compatible providers (`openai`)
|
|
49
50
|
|
|
50
|
-
This auth type supports not only OpenAI's official API but also any OpenAI-compatible endpoint, including aggregated model providers like OpenRouter.
|
|
51
|
+
This auth type supports not only OpenAI's official API but also any OpenAI-compatible endpoint, including aggregated model providers like OpenRouter and Requesty.
|
|
51
52
|
|
|
52
53
|
```json
|
|
53
54
|
{
|
|
54
55
|
"env": {
|
|
55
56
|
"OPENAI_API_KEY": "sk-your-actual-openai-key-here",
|
|
56
|
-
"OPENROUTER_API_KEY": "sk-or-your-actual-openrouter-key-here"
|
|
57
|
+
"OPENROUTER_API_KEY": "sk-or-your-actual-openrouter-key-here",
|
|
58
|
+
"REQUESTY_API_KEY": "sk-your-actual-requesty-key-here"
|
|
57
59
|
},
|
|
58
60
|
"modelProviders": {
|
|
59
|
-
"openai":
|
|
60
|
-
|
|
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
|
-
|
|
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
|
+
}
|
|
86
91
|
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
+
}
|
|
99
104
|
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
+
}
|
|
117
|
+
}
|
|
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
|
+
}
|
|
112
130
|
}
|
|
113
131
|
}
|
|
114
|
-
|
|
115
|
-
|
|
132
|
+
]
|
|
133
|
+
}
|
|
116
134
|
}
|
|
117
135
|
}
|
|
118
136
|
```
|
|
@@ -125,37 +143,40 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
125
143
|
"ANTHROPIC_API_KEY": "sk-ant-your-actual-anthropic-key-here"
|
|
126
144
|
},
|
|
127
145
|
"modelProviders": {
|
|
128
|
-
"anthropic":
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
|
|
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
|
+
}
|
|
142
163
|
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
+
}
|
|
155
176
|
}
|
|
156
177
|
}
|
|
157
|
-
|
|
158
|
-
|
|
178
|
+
]
|
|
179
|
+
}
|
|
159
180
|
}
|
|
160
181
|
}
|
|
161
182
|
```
|
|
@@ -168,29 +189,32 @@ This auth type supports not only OpenAI's official API but also any OpenAI-compa
|
|
|
168
189
|
"GEMINI_API_KEY": "AIza-your-actual-gemini-key-here"
|
|
169
190
|
},
|
|
170
191
|
"modelProviders": {
|
|
171
|
-
"gemini":
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
"
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
"
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
"
|
|
187
|
-
"
|
|
188
|
-
|
|
189
|
-
|
|
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
|
+
}
|
|
190
214
|
}
|
|
191
215
|
}
|
|
192
|
-
|
|
193
|
-
|
|
216
|
+
]
|
|
217
|
+
}
|
|
194
218
|
}
|
|
195
219
|
}
|
|
196
220
|
```
|
|
@@ -207,51 +231,54 @@ Most local inference servers (vLLM, Ollama, LM Studio, etc.) provide an OpenAI-c
|
|
|
207
231
|
"LMSTUDIO_API_KEY": "lm-studio"
|
|
208
232
|
},
|
|
209
233
|
"modelProviders": {
|
|
210
|
-
"openai":
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
"
|
|
218
|
-
"
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
"
|
|
222
|
-
"
|
|
223
|
-
|
|
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
|
+
}
|
|
224
251
|
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
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
|
+
}
|
|
239
266
|
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
+
}
|
|
251
278
|
}
|
|
252
279
|
}
|
|
253
|
-
|
|
254
|
-
|
|
280
|
+
]
|
|
281
|
+
}
|
|
255
282
|
}
|
|
256
283
|
}
|
|
257
284
|
```
|
|
@@ -318,7 +345,7 @@ When you authenticate with an Alibaba Cloud Coding Plan API key using the `/auth
|
|
|
318
345
|
- **China**: <https://bailian.console.aliyun.com/?tab=model#/efm/coding_plan>
|
|
319
346
|
- **International**: <https://modelstudio.console.alibabacloud.com/?tab=dashboard#/efm/coding_plan>
|
|
320
347
|
2. Run the `/auth` command in Qwen Code
|
|
321
|
-
3. Select **Alibaba
|
|
348
|
+
3. Select **Alibaba ModelStudio**, then choose **Coding Plan** from the sub-menu
|
|
322
349
|
4. Select your region
|
|
323
350
|
5. Enter your API key when prompted
|
|
324
351
|
|
|
@@ -367,15 +394,18 @@ If you prefer to manually configure Coding Plan models, you can add them to your
|
|
|
367
394
|
```json
|
|
368
395
|
{
|
|
369
396
|
"modelProviders": {
|
|
370
|
-
"openai":
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
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
|
+
}
|
|
379
409
|
}
|
|
380
410
|
}
|
|
381
411
|
```
|
|
@@ -400,10 +430,10 @@ The effective auth/model/credential values are chosen per field using the follow
|
|
|
400
430
|
| -------------------------- | ----------------------------------- | ----------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------- | ---------------------- | --------------------------------- |
|
|
401
431
|
| Programmatic overrides | `/auth` | `/auth` input | `/auth` input | `/auth` input | — | — |
|
|
402
432
|
| Model provider selection | — | `modelProvider.id` | `env[modelProvider.envKey]` | `modelProvider.baseUrl` | `modelProvider.envKey` | — |
|
|
403
|
-
| 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) | — | — |
|
|
404
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`) | — | — |
|
|
405
435
|
| Settings (`settings.json`) | `security.auth.selectedType` | `model.name` | `security.auth.apiKey` | `security.auth.baseUrl` | — | — |
|
|
406
|
-
| 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 |
|
|
407
437
|
|
|
408
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.
|
|
409
439
|
|
|
@@ -455,7 +485,7 @@ The following fields are treated as atomic objects - provider values completely
|
|
|
455
485
|
|
|
456
486
|
### Example
|
|
457
487
|
|
|
458
|
-
```
|
|
488
|
+
```jsonc
|
|
459
489
|
// User settings (~/.qwen/settings.json)
|
|
460
490
|
{
|
|
461
491
|
"model": {
|
|
@@ -469,14 +499,17 @@ The following fields are treated as atomic objects - provider values completely
|
|
|
469
499
|
// modelProviders configuration
|
|
470
500
|
{
|
|
471
501
|
"modelProviders": {
|
|
472
|
-
"openai":
|
|
473
|
-
"
|
|
474
|
-
"
|
|
475
|
-
|
|
476
|
-
"
|
|
477
|
-
"
|
|
478
|
-
|
|
479
|
-
|
|
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
|
+
}
|
|
480
513
|
}
|
|
481
514
|
}
|
|
482
515
|
```
|
|
@@ -502,22 +535,25 @@ The optional `reasoning` field under `generationConfig` controls how aggressivel
|
|
|
502
535
|
```jsonc
|
|
503
536
|
{
|
|
504
537
|
"modelProviders": {
|
|
505
|
-
"openai":
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
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
|
+
},
|
|
518
554
|
},
|
|
519
|
-
|
|
520
|
-
|
|
555
|
+
],
|
|
556
|
+
},
|
|
521
557
|
},
|
|
522
558
|
}
|
|
523
559
|
```
|
|
@@ -584,7 +620,7 @@ When you configure a model without using `modelProviders`, Qwen Code automatical
|
|
|
584
620
|
|
|
585
621
|
```bash
|
|
586
622
|
# This creates a RuntimeModelSnapshot with ID: $runtime|openai|my-custom-model
|
|
587
|
-
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
|
|
588
624
|
```
|
|
589
625
|
|
|
590
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.
|