Расширения Qwen Code
Qwen Code поддерживает расширения, которые можно использовать для настройки и расширения его функциональности.
Как это работает
При запуске Qwen Code ищет расширения в двух местах:
<workspace>/.qwen/extensions
<home>/.qwen/extensions
Qwen Code загружает все расширения из обоих мест. Если расширение с одинаковым именем существует в обоих местах, то расширение из директории workspace имеет приоритет.
В каждом из этих мест отдельные расширения представлены в виде директории, содержащей файл qwen-extension.json
. Например:
<workspace>/.qwen/extensions/my-extension/qwen-extension.json
qwen-extension.json
Файл qwen-extension.json
содержит конфигурацию расширения. Файл имеет следующую структуру:
{
"name": "my-extension",
"version": "1.0.0",
"mcpServers": {
"my-server": {
"command": "node my-server.js"
}
},
"contextFileName": "QWEN.md",
"excludeTools": ["run_shell_command"]
}
name
: Название расширения. Используется для уникальной идентификации расширения и разрешения конфликтов, когда команды расширения имеют те же имена, что и пользовательские или проектные команды.version
: Версия расширения.mcpServers
: Карта MCP-серверов для настройки. Ключ — это имя сервера, а значение — конфигурация сервера. Эти серверы будут загружены при запуске так же, как и MCP-серверы, настроенные в файлеsettings.json
. Если и расширение, и файлsettings.json
настраивают MCP-сервер с одинаковым именем, приоритет получает сервер, определенный в файлеsettings.json
.contextFileName
: Имя файла, содержащего контекст для расширения. Будет использоваться для загрузки контекста из рабочей области. Если это свойство не задано, но в директории расширения присутствует файлQWEN.md
, то будет загружен именно этот файл.excludeTools
: Массив имен инструментов, которые нужно исключить из модели. Также можно указать ограничения для конкретных команд инструментов, которые их поддерживают, например, для инструментаrun_shell_command
. Например,"excludeTools": ["run_shell_command(rm -rf)"]
заблокирует командуrm -rf
.
Когда Qwen Code запускается, он загружает все расширения и объединяет их конфигурации. В случае конфликтов приоритет получает конфигурация рабочей области.
Команды расширений
Расширения могут предоставлять пользовательские команды, размещая TOML-файлы в подкаталоге commands/
внутри директории расширения. Эти команды следуют тому же формату, что и пользовательские и проектные команды, и используют стандартные соглашения об именовании.
Пример
Расширение с именем gcp
со следующей структурой:
.qwen/extensions/gcp/
├── qwen-extension.json
└── commands/
├── deploy.toml
└── gcs/
└── sync.toml
Предоставит следующие команды:
/deploy
- Отображается как[gcp] Custom command from deploy.toml
в справке/gcs:sync
- Отображается как[gcp] Custom command from sync.toml
в справке
Разрешение конфликтов
Команды расширений имеют самый низкий приоритет. Когда возникает конфликт с пользовательскими или проектными командами:
- Без конфликта: Команда расширения использует свое естественное имя (например,
/deploy
) - При конфликте: Команда расширения переименовывается с префиксом расширения (например,
/gcp.deploy
)
Например, если и пользователь, и расширение gcp
определяют команду deploy
:
/deploy
- Выполняет пользовательскую команду deploy/gcp.deploy
- Выполняет команду deploy расширения (помечена тегом[gcp]
)