@qwen-code/qwen-code 0.18.5 → 0.19.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.
Files changed (146) hide show
  1. package/bundled/qc-helper/docs/configuration/qwen-ignore.md +31 -15
  2. package/bundled/qc-helper/docs/configuration/settings.md +15 -14
  3. package/bundled/qc-helper/docs/extension/introduction.md +24 -6
  4. package/bundled/qc-helper/docs/features/mcp.md +9 -6
  5. package/bundled/qc-helper/docs/qwen-serve.md +1 -1
  6. package/chunks/{agent-2TEY55UD.js → agent-IPSDEZNB.js} +24 -22
  7. package/chunks/{agent-headless-SCUAXEEE.js → agent-headless-ZMTUWMZJ.js} +24 -22
  8. package/chunks/{anthropicContentGenerator-5S4OMMNL.js → anthropicContentGenerator-6MCH4X6S.js} +12 -11
  9. package/chunks/artifact-tool-PBX64YTT.js +675 -0
  10. package/chunks/{askUserQuestion-WHVYL2S2.js → askUserQuestion-5ZQOWSRT.js} +20 -7
  11. package/chunks/chunk-22IFUCVR.js +291 -0
  12. package/chunks/{chunk-XGU3ETVO.js → chunk-255L5QYW.js} +3 -3
  13. package/chunks/{chunk-26ZYKTYZ.js → chunk-2BIF2NVV.js} +2 -2
  14. package/chunks/{chunk-LTN3VYMZ.js → chunk-3UALQ56H.js} +1 -1
  15. package/chunks/{chunk-2O3NAOJG.js → chunk-57XRIZVC.js} +1 -1
  16. package/chunks/{chunk-MSJ2MXJ6.js → chunk-BGUDAULQ.js} +11 -290
  17. package/chunks/{chunk-FH4P6RQA.js → chunk-BNXANYLH.js} +1 -1
  18. package/chunks/{chunk-WE6TNQJU.js → chunk-C4K3FEQ2.js} +36 -0
  19. package/chunks/{chunk-G4BUMVEY.js → chunk-CGEGHF2C.js} +2 -217
  20. package/chunks/{chunk-2CNO5W47.js → chunk-CICUTYTF.js} +174 -5026
  21. package/chunks/chunk-EEEZIVFJ.js +908 -0
  22. package/chunks/chunk-EJYJYJZ2.js +3703 -0
  23. package/chunks/{chunk-ATLUHLZE.js → chunk-EW6C27XX.js} +1 -1
  24. package/chunks/{chunk-SIJKWK35.js → chunk-GAAALA2X.js} +6 -6
  25. package/chunks/{chunk-C6MI2ASN.js → chunk-GZCJS5WH.js} +2 -2
  26. package/chunks/{chunk-KGV3F6UF.js → chunk-HGNSRCRB.js} +1 -1
  27. package/chunks/{chunk-42HGOMED.js → chunk-JDV3VBPY.js} +216 -1
  28. package/chunks/{chunk-CX3SGIPK.js → chunk-JRVB4QUY.js} +2 -2
  29. package/chunks/{chunk-F5E6IKYN.js → chunk-KFR4QTV3.js} +557 -22
  30. package/chunks/{chunk-ID533GA3.js → chunk-OTBK43JR.js} +1 -1
  31. package/chunks/{chunk-GOMVJKBL.js → chunk-PLY4F7QW.js} +5 -3
  32. package/chunks/{chunk-VKILGMZQ.js → chunk-PO5LVPK3.js} +1 -1
  33. package/chunks/{chunk-AE6RQU6F.js → chunk-PRYMDRBV.js} +1 -1
  34. package/chunks/{chunk-GBN55AWZ.js → chunk-QKUAGMGE.js} +2 -2
  35. package/chunks/{chunk-KQIKOTQJ.js → chunk-RYLJU2DY.js} +60 -5
  36. package/chunks/{chunk-KZGQ3G3Q.js → chunk-S7ILEIB4.js} +82 -84
  37. package/chunks/{chunk-CTHZVIMD.js → chunk-T2VDEFUU.js} +2 -2
  38. package/chunks/{chunk-LF6BKGZT.js → chunk-TXVGVZYR.js} +3 -3
  39. package/chunks/{chunk-C7JA3XCX.js → chunk-VRIVIYRL.js} +5 -5
  40. package/chunks/{chunk-XU7BKR3B.js → chunk-XU5P23GN.js} +3 -3
  41. package/chunks/{chunk-VECKCOH6.js → chunk-YF3ORUIU.js} +6362 -4888
  42. package/chunks/{computer-use-OB3C5QG2.js → computer-use-YYK42DD5.js} +24 -22
  43. package/chunks/contextCommand-BO45MUAA.js +56 -0
  44. package/chunks/{cron-create-THNDTYXU.js → cron-create-DXKAP5KN.js} +4 -4
  45. package/chunks/{cron-delete-BS5H6TFJ.js → cron-delete-WGO4PZTF.js} +4 -4
  46. package/chunks/{cron-list-7OBVHT7K.js → cron-list-EY7D3ZUC.js} +4 -4
  47. package/chunks/{dist-GKRNVFBH.js → dist-ZBX7LPJZ.js} +2 -1
  48. package/chunks/{edit-GNCLIF67.js → edit-QERNJN7K.js} +24 -22
  49. package/chunks/{en-S3OQBISC.js → en-UTXMGXIR.js} +47 -0
  50. package/chunks/{enter-worktree-E7BNZOGT.js → enter-worktree-6ZKH5IL3.js} +24 -22
  51. package/chunks/{enterPlanMode-IA42A5EU.js → enterPlanMode-B2PBF4MA.js} +27 -23
  52. package/chunks/{exit-worktree-QJ2K74UT.js → exit-worktree-EOCMQO4I.js} +24 -22
  53. package/chunks/{exitPlanMode-UKKHBUYJ.js → exitPlanMode-WSRXCBRZ.js} +36 -28
  54. package/chunks/{geminiContentGenerator-ICSDM37U.js → geminiContentGenerator-NTR4LTKS.js} +4 -4
  55. package/chunks/{glob-IGD7LWYX.js → glob-IWDJQI2V.js} +26 -23
  56. package/chunks/{grep-IZM3IVND.js → grep-2DV5BXMH.js} +24 -22
  57. package/chunks/{keychain-token-storage-YHXIWXIB.js → keychain-token-storage-CSYMNRPP.js} +2 -2
  58. package/chunks/{loop-wakeup-SSBWZ64K.js → loop-wakeup-XVSDE7QR.js} +5 -5
  59. package/chunks/{ls-YPFUHZRQ.js → ls-LPY3ATQQ.js} +6 -6
  60. package/chunks/{lsp-FD6DNVAF.js → lsp-ZT3AAXIF.js} +2 -2
  61. package/chunks/{monitor-ALJNE3R4.js → monitor-6HBDS2RS.js} +24 -22
  62. package/chunks/{notebook-edit-7XRZX55T.js → notebook-edit-J5AY5BRY.js} +25 -23
  63. package/chunks/{openaiContentGenerator-FWKITDFJ.js → openaiContentGenerator-ENABCJDM.js} +12 -15
  64. package/chunks/{qwenContentGenerator-5RPGQZ63.js → qwenContentGenerator-ISW42U7C.js} +26 -24
  65. package/chunks/{qwenOAuth2-WZ54YZ4J.js → qwenOAuth2-K4AASPCV.js} +5 -4
  66. package/chunks/{read-file-4WN2DT5N.js → read-file-NRX2FSSQ.js} +9 -8
  67. package/chunks/{ripGrep-4ZKT6KBQ.js → ripGrep-WF5CKHR5.js} +24 -22
  68. package/chunks/{scheduler-O2E65VDK.js → scheduler-PNPG5WJ3.js} +73 -27
  69. package/chunks/{send-message-FWFTX62Q.js → send-message-447W6NH6.js} +24 -4
  70. package/chunks/{serve-3DM6CRGD.js → serve-ZBRCIIHW.js} +430 -70
  71. package/chunks/{shell-ARVZK6RF.js → shell-DLIL6MLU.js} +24 -22
  72. package/chunks/{skill-BFUBGA4I.js → skill-32TXHY4A.js} +11 -10
  73. package/chunks/{src-5YMCDSII.js → src-PDDLF5BB.js} +114 -67
  74. package/chunks/{syntheticOutput-JY5NEDTV.js → syntheticOutput-GQRDRLGR.js} +3 -3
  75. package/chunks/{task-create-IGILDV25.js → task-create-66DDSTVI.js} +6 -6
  76. package/chunks/{task-list-KBEJVAAG.js → task-list-GOPXRSHG.js} +5 -5
  77. package/chunks/{task-stop-WFTMQ6AC.js → task-stop-M7NKGFX2.js} +2 -2
  78. package/chunks/{task-update-UIVX7ZEV.js → task-update-M5TBHLZV.js} +6 -6
  79. package/chunks/{team-create-HRBV5ATK.js → team-create-EHLDSJGI.js} +28 -26
  80. package/chunks/{team-delete-LPOXDPVB.js → team-delete-DKKDS65W.js} +5 -5
  81. package/chunks/{todoWrite-R4RIJKOD.js → todoWrite-4VX7X44D.js} +4 -4
  82. package/chunks/{tool-search-67HI54YA.js → tool-search-FU7IZAOO.js} +9 -8
  83. package/chunks/{web-fetch-JU7SS6KE.js → web-fetch-YPP3V4FJ.js} +4 -4
  84. package/chunks/{workflow-W4SCLWLU.js → workflow-WUDNBCGX.js} +544 -92
  85. package/chunks/{write-file-TLNXC2NR.js → write-file-NVFPX6CH.js} +24 -22
  86. package/chunks/{zh-TW-3OKU7LDA.js → zh-TW-J2TTW67R.js} +47 -0
  87. package/chunks/{zh-QXLZV2PX.js → zh-YOXVTJU5.js} +47 -0
  88. package/cli.js +8018 -4955
  89. package/locales/en.js +68 -0
  90. package/locales/zh-TW.js +65 -0
  91. package/locales/zh.js +65 -0
  92. package/package.json +3 -2
  93. package/web-shell/assets/{arc-CRFN10gD.js → arc-pxOt9B72.js} +1 -1
  94. package/web-shell/assets/{architectureDiagram-3BPJPVTR-IRlu1CpH.js → architectureDiagram-3BPJPVTR-B9XuYYOT.js} +1 -1
  95. package/web-shell/assets/{blockDiagram-GPEHLZMM-htIZ6iw8.js → blockDiagram-GPEHLZMM-5yK68iu4.js} +1 -1
  96. package/web-shell/assets/{c4Diagram-AAUBKEIU-A2GoRq3O.js → c4Diagram-AAUBKEIU-B1LY-qNI.js} +1 -1
  97. package/web-shell/assets/channel-Cx7egbSX.js +1 -0
  98. package/web-shell/assets/{chunk-2J33WTMH-CdP2AC6u.js → chunk-2J33WTMH-DkgXg7cM.js} +1 -1
  99. package/web-shell/assets/{chunk-4BX2VUAB-DrA07nW2.js → chunk-4BX2VUAB-DdM45KFM.js} +1 -1
  100. package/web-shell/assets/{chunk-55IACEB6-CFGnVU2f.js → chunk-55IACEB6-CmdsDjD4.js} +1 -1
  101. package/web-shell/assets/{chunk-727SXJPM-BTMkq3Tk.js → chunk-727SXJPM-CQ4pJ5GH.js} +1 -1
  102. package/web-shell/assets/{chunk-AQP2D5EJ-C9sYg04Z.js → chunk-AQP2D5EJ-Dy6UWz37.js} +1 -1
  103. package/web-shell/assets/{chunk-FMBD7UC4-Cag-cj6I.js → chunk-FMBD7UC4-CC8nFqap.js} +1 -1
  104. package/web-shell/assets/{chunk-ND2GUHAM-CDSTFoR7.js → chunk-ND2GUHAM-CkmS7lx7.js} +1 -1
  105. package/web-shell/assets/{chunk-QZHKN3VN-CN9Z6oOs.js → chunk-QZHKN3VN-DynyqleZ.js} +1 -1
  106. package/web-shell/assets/classDiagram-4FO5ZUOK-CwH_F8cH.js +1 -0
  107. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwH_F8cH.js +1 -0
  108. package/web-shell/assets/{cose-bilkent-S5V4N54A-DuN9j8Du.js → cose-bilkent-S5V4N54A-DA0fzCsY.js} +1 -1
  109. package/web-shell/assets/{dagre-BM42HDAG-ByCWe45f.js → dagre-BM42HDAG-DHYXRqCo.js} +1 -1
  110. package/web-shell/assets/{diagram-2AECGRRQ-eWyU_pKZ.js → diagram-2AECGRRQ-DWD6BcPs.js} +1 -1
  111. package/web-shell/assets/{diagram-5GNKFQAL-0Bfu3Fq5.js → diagram-5GNKFQAL-CX9wnqVc.js} +1 -1
  112. package/web-shell/assets/{diagram-KO2AKTUF-B6KBKkQP.js → diagram-KO2AKTUF-BpE8Kbt8.js} +1 -1
  113. package/web-shell/assets/{diagram-LMA3HP47-TToDmeA_.js → diagram-LMA3HP47-DLPcrP0C.js} +1 -1
  114. package/web-shell/assets/{diagram-OG6HWLK6-CQCkC2Yx.js → diagram-OG6HWLK6-CSUCBsCe.js} +1 -1
  115. package/web-shell/assets/{erDiagram-TEJ5UH35-Cm9ls1iB.js → erDiagram-TEJ5UH35-d3Z0uMXS.js} +1 -1
  116. package/web-shell/assets/{flowDiagram-I6XJVG4X-Dyoz80Pv.js → flowDiagram-I6XJVG4X-C7vj5FX3.js} +1 -1
  117. package/web-shell/assets/{ganttDiagram-6RSMTGT7-Cfut9yaU.js → ganttDiagram-6RSMTGT7-BV9UvDV_.js} +1 -1
  118. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BCuJdlfD.js → gitGraphDiagram-PVQCEYII-CoWp0mW4.js} +1 -1
  119. package/web-shell/assets/index-CjTH6cLP.js +516 -0
  120. package/web-shell/assets/{infoDiagram-5YYISTIA-CXKxF2VL.js → infoDiagram-5YYISTIA-DUswfJHA.js} +1 -1
  121. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DE7HWSU8.js → ishikawaDiagram-YF4QCWOH-WidEKukx.js} +1 -1
  122. package/web-shell/assets/{journeyDiagram-JHISSGLW-D__YUfds.js → journeyDiagram-JHISSGLW-D7IRK3VN.js} +1 -1
  123. package/web-shell/assets/{kanban-definition-UN3LZRKU-D82R169M.js → kanban-definition-UN3LZRKU-CwFJ6Cja.js} +1 -1
  124. package/web-shell/assets/{linear-DpyMbKqT.js → linear-BQ8GvDRY.js} +1 -1
  125. package/web-shell/assets/{mermaid.core-D1KEFDhn.js → mermaid.core-CwF8A_xO.js} +5 -5
  126. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BwVUFGFE.js → mindmap-definition-RKZ34NQL-TR1s0iZi.js} +1 -1
  127. package/web-shell/assets/{pieDiagram-4H26LBE5-BO_qoEGx.js → pieDiagram-4H26LBE5-Cd91pMl9.js} +1 -1
  128. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js → quadrantDiagram-W4KKPZXB-BGxGDNMl.js} +1 -1
  129. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BJPXejOA.js → requirementDiagram-4Y6WPE33-Cq3fWmYz.js} +1 -1
  130. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C1xeIL9i.js → sankeyDiagram-5OEKKPKP-ChLyGdq0.js} +1 -1
  131. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CSYKQUjf.js → sequenceDiagram-3UESZ5HK-tazy79aB.js} +1 -1
  132. package/web-shell/assets/{stateDiagram-AJRCARHV-d9hiHlAW.js → stateDiagram-AJRCARHV-dIYLUNSf.js} +1 -1
  133. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-luL7KTiX.js +1 -0
  134. package/web-shell/assets/{timeline-definition-PNZ67QCA-BhCBkq8k.js → timeline-definition-PNZ67QCA-BuENhrC2.js} +1 -1
  135. package/web-shell/assets/{vennDiagram-CIIHVFJN-DPPFWp_y.js → vennDiagram-CIIHVFJN-DLtum9dF.js} +1 -1
  136. package/web-shell/assets/{wardley-L42UT6IY-CcOUIgXY.js → wardley-L42UT6IY-Bf7OSF3y.js} +1 -1
  137. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-p7oR5X7r.js → wardleyDiagram-YWT4CUSO-slMw3OB3.js} +1 -1
  138. package/web-shell/assets/{xychartDiagram-2RQKCTM6-Dfr7-SEy.js → xychartDiagram-2RQKCTM6-CdxOm8oC.js} +1 -1
  139. package/web-shell/index.html +1 -1
  140. package/chunks/chunk-77WXWU44.js +0 -26
  141. package/chunks/contextCommand-3327KUC4.js +0 -54
  142. package/web-shell/assets/channel-WwImfsc7.js +0 -1
  143. package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +0 -1
  144. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +0 -1
  145. package/web-shell/assets/index-DaebdpHq.js +0 -516
  146. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DgReoybQ.js +0 -1
@@ -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 your `.qwenignore` file will exclude them from tools that support this feature, although they will still be visible to other services (such as Git).
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 your `.qwenignore` file, tools that respect this file 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 your `.qwenignore` file will be automatically excluded.
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, `.qwenignore` follows the conventions of `.gitignore` files:
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 `.qwenignore` file.
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 your `.qwenignore` file at any time. To apply the changes, you must restart your Qwen Code session.
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 `.qwenignore`
21
+ ## How to use ignore files
22
22
 
23
- | Step | Description |
24
- | ---------------------- | -------------------------------------------------------------------------------------- |
25
- | **Enable .qwenignore** | Create a file named `.qwenignore` in your project root directory |
26
- | **Add ignore rules** | Open `.qwenignore` file and add paths to ignore, example: `/archive/` or `apikeys.txt` |
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
- ### `.qwenignore` examples
28
+ By default, Qwen Code reads `.qwenignore`, `.agentignore`, and `.aiignore`.
29
+ To use a different custom ignore file, configure:
29
30
 
30
- You can use `.qwenignore` to ignore directories and files:
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 `.qwenignore` file with `*`:
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 your `.qwenignore` file, delete the relevant lines.
71
+ To remove paths from an ignore file, delete the relevant lines.
@@ -235,25 +235,26 @@ The `extra_body` field allows you to add custom parameters to the request body s
235
235
 
236
236
  #### context
237
237
 
238
- | Setting | Type | Description | Default |
239
- | ----------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
240
- | `context.fileName` | string or array of strings | The name of the context file(s). | `undefined` |
241
- | `context.importFormat` | string | The format to use when importing memory. | `undefined` |
242
- | `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. | `[]` |
243
- | `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` |
244
- | `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching. | `true` |
245
- | `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore files when searching. | `true` |
246
- | `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt. | `true` |
247
- | `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` |
248
- | `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger. | `60` |
249
- | `context.clearContextOnIdle.toolResultsNumToKeep` | number | Number of most-recent compactable tool results to preserve when clearing. Floor at 1. | `5` |
250
- | `context.clearContextOnIdle.toolResultsTotalCharsThreshold` | number | Total compactable tool result output characters allowed in history before clearing oldest results. Use `-1` to disable the size trigger. This is a soft threshold: protected recent tool results may keep the total above it. | `500000` |
238
+ | Setting | Type | Description | Default |
239
+ | ----------------------------------------------------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
240
+ | `context.fileName` | string or array of strings | The name of the context file(s). | `undefined` |
241
+ | `context.importFormat` | string | The format to use when importing memory. | `undefined` |
242
+ | `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. | `[]` |
243
+ | `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` |
244
+ | `context.fileFiltering.respectGitIgnore` | boolean | Respect .gitignore files when searching. | `true` |
245
+ | `context.fileFiltering.respectQwenIgnore` | boolean | Respect .qwenignore and configured custom ignore files when searching. | `true` |
246
+ | `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"]` |
247
+ | `context.fileFiltering.enableRecursiveFileSearch` | boolean | Whether to enable searching recursively for filenames under the current tree when completing `@` prefixes in the prompt. | `true` |
248
+ | `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` |
249
+ | `context.clearContextOnIdle.toolResultsThresholdMinutes` | number | Minutes of inactivity before clearing old tool result content. Use `-1` to disable the idle trigger. | `60` |
250
+ | `context.clearContextOnIdle.toolResultsNumToKeep` | number | Number of most-recent compactable tool results to preserve when clearing. Floor at 1. | `5` |
251
+ | `context.clearContextOnIdle.toolResultsTotalCharsThreshold` | number | Total compactable tool result output characters allowed in history before clearing oldest results. Use `-1` to disable the size trigger. This is a soft threshold: protected recent tool results may keep the total above it. | `500000` |
251
252
 
252
253
  #### Troubleshooting File Search Performance
253
254
 
254
255
  If you are experiencing performance issues with file searching (e.g., with `@` completions), especially in projects with a very large number of files, here are a few things you can try in order of recommendation:
255
256
 
256
- 1. **Use `.qwenignore`:** Create a `.qwenignore` file in your project root to exclude directories that contain a large number of files that you don't need to reference (e.g., build artifacts, logs, `node_modules`). Reducing the total number of files crawled is the most effective way to improve performance.
257
+ 1. **Use an ignore file:** Create a `.qwenignore` or configured custom ignore file in your project root to exclude directories that contain a large number of files that you don't need to reference (e.g., build artifacts, logs, `node_modules`). Reducing the total number of files crawled is the most effective way to improve performance.
257
258
  2. **Disable Fuzzy Search:** If ignoring files is not enough, you can disable fuzzy search by setting `enableFuzzySearch` to `false` in your `settings.json` file. This will use a simpler, non-fuzzy matching algorithm, which can be faster.
258
259
  3. **Disable Recursive File Search:** As a last resort, you can disable recursive file search entirely by setting `enableRecursiveFileSearch` to `false`. This will be the fastest option as it avoids a recursive crawl of your project. However, it means you will need to type the full path to files when using `@` completions.
259
260
 
@@ -12,11 +12,11 @@ We offer a suite of extension management tools using both `qwen extensions` CLI
12
12
 
13
13
  You can manage extensions at runtime within the interactive CLI using `/extensions` slash commands. These commands support hot-reloading, meaning changes take effect immediately without restarting the application.
14
14
 
15
- | Command | Description |
16
- | ------------------------------------- | ---------------------------------------------------------------------------- |
17
- | `/extensions` or `/extensions manage` | Manage all installed extensions |
18
- | `/extensions install <source>` | Install an extension from a git URL, local path, npm package, or marketplace |
19
- | `/extensions explore [source]` | Open extensions source page(Gemini or ClaudeCode) in your browser |
15
+ | Command | Description |
16
+ | ------------------------------------- | ---------------------------------------------------------------------------------------------------- |
17
+ | `/extensions` or `/extensions manage` | Manage all installed extensions |
18
+ | `/extensions install <source>` | Install an extension from a git URL, local path or archive, archive URL, npm package, or marketplace |
19
+ | `/extensions explore [source]` | Open extensions source page(Gemini or ClaudeCode) in your browser |
20
20
 
21
21
  #### The interactive extension manager
22
22
 
@@ -141,8 +141,26 @@ This will install the github mcp server extension.
141
141
  qwen extensions install /path/to/your/extension
142
142
  ```
143
143
 
144
+ Local `.zip` and `.tar.gz` archives are also supported:
145
+
146
+ ```bash
147
+ qwen extensions install /path/to/your/extension.zip
148
+ qwen extensions install /path/to/your/extension.tar.gz
149
+ ```
150
+
151
+ The archive must contain a complete extension at its root, or a single top-level directory containing the extension.
152
+
144
153
  Note that we create a copy of the installed extension, so you will need to run `qwen extensions update` to pull in changes from both locally-defined extensions and those on GitHub.
145
154
 
155
+ #### From Archive URL
156
+
157
+ ```bash
158
+ qwen extensions install https://example.com/your/extension.zip
159
+ qwen extensions install https://example.com/your/extension.tar.gz
160
+ ```
161
+
162
+ Archive URLs can be updated later as long as the URL continues to point at a newer archive for the same extension.
163
+
146
164
  #### Choosing an install scope
147
165
 
148
166
  By default, an installed extension is enabled globally (user scope). Pass `--scope project` to enable it only for the current workspace:
@@ -193,7 +211,7 @@ This is useful if you have an extension disabled at the top-level and only enabl
193
211
 
194
212
  ### Updating an extension
195
213
 
196
- For extensions installed from a local path, a git repository, or an npm registry, you can explicitly update to the latest version with `qwen extensions update extension-name`. For npm extensions installed without a version pin (e.g. `@scope/pkg`), updates check the `latest` dist-tag. For those installed with a specific dist-tag (e.g. `@scope/pkg@beta`), updates track that tag. Extensions pinned to an exact version (e.g. `@scope/pkg@1.2.0`) are always considered up-to-date.
214
+ For extensions installed from a local path or archive, an archive URL, a git repository, or an npm registry, you can explicitly update to the latest version with `qwen extensions update extension-name`. For npm extensions installed without a version pin (e.g. `@scope/pkg`), updates check the `latest` dist-tag. For those installed with a specific dist-tag (e.g. `@scope/pkg@beta`), updates track that tag. Extensions pinned to an exact version (e.g. `@scope/pkg@1.2.0`) are always considered up-to-date.
197
215
 
198
216
  You can update all extensions with:
199
217
 
@@ -42,8 +42,8 @@ qwen mcp
42
42
 
43
43
  Most users only need these two scopes:
44
44
 
45
- - **Project scope (default)**: `.qwen/settings.json` in your project root
46
- - **User scope**: `~/.qwen/settings.json` across all projects on your machine
45
+ - **User scope (default)**: `~/.qwen/settings.json` across all projects on your machine
46
+ - **Project scope**: `.qwen/settings.json` in your project root
47
47
 
48
48
  Write to user scope:
49
49
 
@@ -94,7 +94,7 @@ JSON (`.qwen/settings.json`):
94
94
  }
95
95
  ```
96
96
 
97
- CLI (writes to project scope by default):
97
+ CLI (writes to user scope by default):
98
98
 
99
99
  ```bash
100
100
  qwen mcp add pythonTools -e DATABASE_URL=$DB_CONNECTION_STRING -e API_KEY=$EXTERNAL_API_KEY \
@@ -177,8 +177,11 @@ The prompt's messages are sent to the model, which then acts on them.
177
177
 
178
178
  Resources a server advertises via `resources/list` are discovered per
179
179
  server. Open the management dialog with `/mcp` and select a server to see
180
- its **Resources** count alongside its tools and prompts. As with prompts,
181
- the `resources` capability is not required to be declared.
180
+ its **Resources** count alongside its tools and prompts. Choose **View
181
+ resources** to browse the server's resource URIs; selecting one shows its
182
+ description and MIME type along with the exact `@server:uri` reference to
183
+ paste into a message. As with prompts, the `resources` capability is not
184
+ required to be declared.
182
185
 
183
186
  Inject a resource's contents into your message with the `@server:uri`
184
187
  syntax — type `@`, then the server name, a colon, and the resource URI:
@@ -447,7 +450,7 @@ qwen mcp add [options] <name> <commandOrUrl> [args...]
447
450
  | `<name>` | A unique name for the server. | — | `example-server` |
448
451
  | `<commandOrUrl>` | The command to execute (for `stdio`) or the URL (for `http`/`sse`). | — | `/usr/bin/python` or `http://localhost:8` |
449
452
  | `[args...]` | Optional arguments for a `stdio` command. | — | `--port 5000` |
450
- | `-s`, `--scope` | Configuration scope (user or project). | `project` | `-s user` |
453
+ | `-s`, `--scope` | Configuration scope (user or project). | `user` | `-s user` |
451
454
  | `-t`, `--transport` | Transport type (`stdio`, `sse`, `http`). | `stdio` | `-t sse` |
452
455
  | `-e`, `--env` | Set environment variables. | — | `-e KEY=value` |
453
456
  | `-H`, `--header` | Set HTTP headers for SSE and HTTP transports. | — | `-H "X-Api-Key: abc123"` |
@@ -234,7 +234,7 @@ The token comparison is constant-time (SHA-256 + `crypto.timingSafeEqual`); 401
234
234
  | `--http-bridge` | `true` | Stage 1 mode: one `qwen --acp` child per daemon (bound to one workspace at boot, per [#3803](https://github.com/QwenLM/qwen-code/issues/3803) §02); N sessions multiplex onto that child via ACP `newSession()`. Stage 2 native in-process becomes available later. |
235
235
  | `--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. |
236
236
  | `--web` / `--no-web` | `true` | Serve the built Web Shell SPA at the daemon root (`GET /`, `/assets/*`, and SPA deep-link fallback). The static shell is registered **before** the bearer-auth gate — a browser can't attach a token to a `<script>` subresource or an address-bar navigation, the shell carries no secrets, and every API route stays token-gated regardless. On non-loopback binds a one-line stderr warning notes the UI is reachable without auth. Use `--no-web` for an API-only daemon. No effect when the build omits the Web Shell assets (the daemon logs a breadcrumb and runs API-only). |
237
- | `--open` | `false` | After the listener is up, open the Web Shell in your default browser at the daemon URL (with `#token=` appended as a URL fragment when a token is configured — a fragment is never sent to the server, keeping the token out of access logs and Referer headers). No-op with `--no-web`, or in headless / CI / SSH environments where no browser is available. |
237
+ | `--open` | `false` | After the listener is up, open the Web Shell in your default browser at the daemon URL (with `#token=` appended as a URL fragment when a token is configured — a fragment is never sent to the server, keeping the token out of access logs and Referer headers). No-op with `--no-web`, or in headless / CI / SSH environments where no browser is available. |
238
238
 
239
239
  > **Sizing the load knobs.** `--max-sessions` is the **new-child** cap.
240
240
  > Three other layers also limit load — when sizing for a high-concurrency
@@ -7,41 +7,43 @@ import {
7
7
  hasRebuiltToolRegistry,
8
8
  rebuildToolRegistryOnOverride,
9
9
  resolveSubagentApprovalMode
10
- } from "./chunk-VECKCOH6.js";
10
+ } from "./chunk-YF3ORUIU.js";
11
11
  import "./chunk-K5PGHDBN.js";
12
- import "./chunk-XU7BKR3B.js";
13
- import "./chunk-2O3NAOJG.js";
14
- import "./chunk-XGU3ETVO.js";
12
+ import "./chunk-TXVGVZYR.js";
13
+ import "./chunk-XU5P23GN.js";
14
+ import "./chunk-2BIF2NVV.js";
15
+ import "./chunk-57XRIZVC.js";
16
+ import "./chunk-255L5QYW.js";
15
17
  import "./chunk-2MPVVENX.js";
16
18
  import "./chunk-ZTQ26VBE.js";
17
- import "./chunk-C6MI2ASN.js";
18
- import "./chunk-LF6BKGZT.js";
19
- import "./chunk-26ZYKTYZ.js";
19
+ import "./chunk-GZCJS5WH.js";
20
20
  import "./chunk-MLZQVCF3.js";
21
21
  import "./chunk-LD2XBG6Z.js";
22
- import "./chunk-ID533GA3.js";
23
- import "./chunk-KGV3F6UF.js";
24
- import "./chunk-77WXWU44.js";
25
- import "./chunk-AE6RQU6F.js";
26
- import "./chunk-2CNO5W47.js";
22
+ import "./chunk-OTBK43JR.js";
23
+ import "./chunk-HGNSRCRB.js";
24
+ import "./chunk-EEEZIVFJ.js";
25
+ import "./chunk-PRYMDRBV.js";
26
+ import "./chunk-CICUTYTF.js";
27
27
  import "./chunk-3PJXIDKI.js";
28
28
  import "./chunk-UWCTAVOD.js";
29
29
  import "./chunk-OFEVLU4C.js";
30
30
  import "./chunk-OMX7CUOE.js";
31
- import "./chunk-FH4P6RQA.js";
32
- import "./chunk-CTHZVIMD.js";
33
- import "./chunk-VKILGMZQ.js";
34
- import "./chunk-GOMVJKBL.js";
35
- import "./chunk-MSJ2MXJ6.js";
36
- import "./chunk-ATLUHLZE.js";
31
+ import "./chunk-BNXANYLH.js";
32
+ import "./chunk-T2VDEFUU.js";
33
+ import "./chunk-PO5LVPK3.js";
34
+ import "./chunk-PLY4F7QW.js";
35
+ import "./chunk-BGUDAULQ.js";
36
+ import "./chunk-EW6C27XX.js";
37
+ import "./chunk-22IFUCVR.js";
37
38
  import "./chunk-64WXLC72.js";
38
- import "./chunk-LTN3VYMZ.js";
39
- import "./chunk-42HGOMED.js";
40
- import "./chunk-G4BUMVEY.js";
39
+ import "./chunk-3UALQ56H.js";
40
+ import "./chunk-JDV3VBPY.js";
41
+ import "./chunk-CGEGHF2C.js";
42
+ import "./chunk-EJYJYJZ2.js";
41
43
  import "./chunk-55ZMG67I.js";
42
44
  import "./chunk-H6BD2ELD.js";
43
45
  import "./chunk-5IFG2VC4.js";
44
- import "./chunk-WE6TNQJU.js";
46
+ import "./chunk-C4K3FEQ2.js";
45
47
  import "./chunk-ZERZSAZL.js";
46
48
  import "./chunk-QN5NZ3UQ.js";
47
49
  import "./chunk-BR4QREVK.js";
@@ -4,41 +4,43 @@ import {
4
4
  AgentHeadless,
5
5
  ContextState,
6
6
  templateString
7
- } from "./chunk-VECKCOH6.js";
7
+ } from "./chunk-YF3ORUIU.js";
8
8
  import "./chunk-K5PGHDBN.js";
9
- import "./chunk-XU7BKR3B.js";
10
- import "./chunk-2O3NAOJG.js";
11
- import "./chunk-XGU3ETVO.js";
9
+ import "./chunk-TXVGVZYR.js";
10
+ import "./chunk-XU5P23GN.js";
11
+ import "./chunk-2BIF2NVV.js";
12
+ import "./chunk-57XRIZVC.js";
13
+ import "./chunk-255L5QYW.js";
12
14
  import "./chunk-2MPVVENX.js";
13
15
  import "./chunk-ZTQ26VBE.js";
14
- import "./chunk-C6MI2ASN.js";
15
- import "./chunk-LF6BKGZT.js";
16
- import "./chunk-26ZYKTYZ.js";
16
+ import "./chunk-GZCJS5WH.js";
17
17
  import "./chunk-MLZQVCF3.js";
18
18
  import "./chunk-LD2XBG6Z.js";
19
- import "./chunk-ID533GA3.js";
20
- import "./chunk-KGV3F6UF.js";
21
- import "./chunk-77WXWU44.js";
22
- import "./chunk-AE6RQU6F.js";
23
- import "./chunk-2CNO5W47.js";
19
+ import "./chunk-OTBK43JR.js";
20
+ import "./chunk-HGNSRCRB.js";
21
+ import "./chunk-EEEZIVFJ.js";
22
+ import "./chunk-PRYMDRBV.js";
23
+ import "./chunk-CICUTYTF.js";
24
24
  import "./chunk-3PJXIDKI.js";
25
25
  import "./chunk-UWCTAVOD.js";
26
26
  import "./chunk-OFEVLU4C.js";
27
27
  import "./chunk-OMX7CUOE.js";
28
- import "./chunk-FH4P6RQA.js";
29
- import "./chunk-CTHZVIMD.js";
30
- import "./chunk-VKILGMZQ.js";
31
- import "./chunk-GOMVJKBL.js";
32
- import "./chunk-MSJ2MXJ6.js";
33
- import "./chunk-ATLUHLZE.js";
28
+ import "./chunk-BNXANYLH.js";
29
+ import "./chunk-T2VDEFUU.js";
30
+ import "./chunk-PO5LVPK3.js";
31
+ import "./chunk-PLY4F7QW.js";
32
+ import "./chunk-BGUDAULQ.js";
33
+ import "./chunk-EW6C27XX.js";
34
+ import "./chunk-22IFUCVR.js";
34
35
  import "./chunk-64WXLC72.js";
35
- import "./chunk-LTN3VYMZ.js";
36
- import "./chunk-42HGOMED.js";
37
- import "./chunk-G4BUMVEY.js";
36
+ import "./chunk-3UALQ56H.js";
37
+ import "./chunk-JDV3VBPY.js";
38
+ import "./chunk-CGEGHF2C.js";
39
+ import "./chunk-EJYJYJZ2.js";
38
40
  import "./chunk-55ZMG67I.js";
39
41
  import "./chunk-H6BD2ELD.js";
40
42
  import "./chunk-5IFG2VC4.js";
41
- import "./chunk-WE6TNQJU.js";
43
+ import "./chunk-C4K3FEQ2.js";
42
44
  import "./chunk-ZERZSAZL.js";
43
45
  import "./chunk-QN5NZ3UQ.js";
44
46
  import "./chunk-BR4QREVK.js";
@@ -3,30 +3,31 @@
3
3
  import {
4
4
  require_abort_controller,
5
5
  require_lib
6
- } from "./chunk-KQIKOTQJ.js";
6
+ } from "./chunk-RYLJU2DY.js";
7
7
  import {
8
8
  RequestTokenizer
9
- } from "./chunk-CX3SGIPK.js";
9
+ } from "./chunk-JRVB4QUY.js";
10
10
  import {
11
11
  Blob,
12
12
  File,
13
13
  isFile,
14
14
  isFunction
15
15
  } from "./chunk-P3MYAZBY.js";
16
- import {
17
- buildRuntimeFetchOptions,
18
- redactProxyError
19
- } from "./chunk-42HGOMED.js";
20
16
  import {
21
17
  CAPPED_DEFAULT_MAX_TOKENS,
22
18
  DEFAULT_TIMEOUT,
23
- convertSchema,
19
+ buildRuntimeFetchOptions,
24
20
  hasExplicitOutputLimit,
25
21
  parsePositiveIntegerEnvValue,
26
- runtimeDiagnostics,
27
- safeJsonParse,
22
+ redactProxyError,
28
23
  tokenLimit
29
- } from "./chunk-G4BUMVEY.js";
24
+ } from "./chunk-JDV3VBPY.js";
25
+ import {
26
+ convertSchema,
27
+ runtimeDiagnostics,
28
+ safeJsonParse
29
+ } from "./chunk-CGEGHF2C.js";
30
+ import "./chunk-EJYJYJZ2.js";
30
31
  import {
31
32
  FinishReason,
32
33
  GenerateContentResponse
@@ -35,7 +36,7 @@ import "./chunk-H6BD2ELD.js";
35
36
  import "./chunk-5IFG2VC4.js";
36
37
  import {
37
38
  createDebugLogger
38
- } from "./chunk-WE6TNQJU.js";
39
+ } from "./chunk-C4K3FEQ2.js";
39
40
  import {
40
41
  require_ms
41
42
  } from "./chunk-BR4QREVK.js";