Как внести вклад
Мы будем рады принять ваши исправления и дополнения к этому проекту.
Процесс внесения вклада
Проверка кода
Все отправляемые изменения, включая изменения от участников проекта, требуют проверки. Для этого мы используем GitHub pull requests .
Рекомендации по Pull Request’ам
Чтобы помочь нам быстро проверять и объединять ваши PR, пожалуйста, следуйте этим рекомендациям. PR, не соответствующие этим стандартам, могут быть закрыты.
1. Привязка к существующей задаче
Все PR должны быть привязаны к существующей задаче в нашем трекере. Это гарантирует, что каждое изменение было обсуждено и соответствует целям проекта до того, как будет написан код.
- Для исправления ошибок: PR должен быть привязан к отчёту об ошибке.
- Для новых функций: PR должен быть привязан к задаче запроса функции или предложения, которое было одобрено поддерживающим.
Если задачи для вашего изменения не существует, пожалуйста, сначала создайте её и дождитесь обратной связи, прежде чем начинать писать код.
2. Делайте PR небольшими и сфокусированными
Мы предпочитаем небольшие, атомарные PR, которые решают одну проблему или добавляют одну самодостаточную функцию.
- Делайте: Создайте PR, который исправляет одну конкретную ошибку или добавляет одну конкретную функцию.
- Не делайте: Объединять несколько несвязанных изменений (например, исправление ошибки, новая функция и рефакторинг) в один PR.
Как правило, начните разделять PR, когда количество изменённых строк превышает примерно 1 200. PR с более чем 2 000 изменённых строк следует либо разбить на серию меньших, логических PR, которые можно проверять и объединять независимо, либо объяснить в описании PR, почему изменения должны быть объединены вместе.
3. Используйте черновики PR для незавершённой работы
Если вы хотите получить раннюю обратную связь о своей работе, используйте функцию Draft Pull Request на GitHub. Это даёт понять поддерживающим, что PR ещё не готов к формальной проверке, но открыт для обсуждения и первоначальных замечаний.
4. Убедитесь, что все проверки пройдены
Перед отправкой PR убедитесь, что все автоматические проверки пройдены, выполнив npm run preflight. Эта команда запускает все тесты, линтинг и другие проверки стиля.
5. Обновите документацию
Если ваш PR вносит изменения, видимые пользователю (например, новая команда, изменённый флаг или изменение поведения), вы также должны обновить соответствующую документацию в каталоге /docs.
6. Пишите понятные сообщения коммитов и хорошее описание PR
Ваш PR должен иметь понятный, описательный заголовок и подробное описание изменений. Следуйте стандарту Conventional Commits для сообщений коммитов.
- Хороший заголовок PR:
feat(cli): Add --json flag to 'config get' command - Плохой заголовок PR:
Made some changes
В описании PR объясните причины изменений и укажите ссылку на соответствующую задачу (например, Fixes #123).
Настройка разработки и рабочий процесс
Этот раздел помогает участникам понять, как собирать, изменять и настраивать среду разработки этого проекта.
Настройка среды разработки
Предварительные требования:
- Node.js:
- Разработка: Пожалуйста, используйте Node.js
>=22. Ink 7 (используемый TUI) требует Node 22, аreact@^19.2.0является соответствующей peer-зависимостью. Вы можете использовать инструмент вроде nvm для управления версиями Node.js. - Продуктивность: Для запуска CLI в продуктивной среде подойдёт любая версия Node.js
>=22.
- Разработка: Пожалуйста, используйте Node.js
- Git
Процесс сборки
Чтобы клонировать репозиторий:
git clone https://github.com/QwenLM/qwen-code.git # Или URL вашего форка
cd qwen-codeЧтобы установить зависимости, указанные в package.json, а также корневые зависимости:
npm installЧтобы собрать весь проект (все пакеты):
npm run buildЭта команда обычно компилирует TypeScript в JavaScript, собирает ресурсы и подготавливает пакеты к выполнению. За более подробной информацией о том, что происходит во время сборки, обращайтесь к скриптам scripts/build.js и package.json.
Включение изоляции (Sandboxing)
Изоляция (Sandboxing) настоятельно рекомендуется и требует, как минимум, установки QWEN_SANDBOX=true в файле ~/.env и наличия провайдера изоляции (например, macOS Seatbelt, docker или podman). Подробнее см. в разделе Изоляция (Sandboxing).
Чтобы собрать как утилиту CLI qwen, так и контейнер изоляции, выполните build:all из корневого каталога:
npm run build:allЧтобы пропустить сборку контейнера изоляции, можно использовать npm run build.
Запуск
Чтобы запустить приложение Qwen Code из исходного кода (после сборки), выполните следующую команду из корневого каталога:
npm startЕсли вы хотите запустить собранную из исходников версию за пределами папки qwen-code, вы можете использовать npm link path/to/qwen-code/packages/cli (см. документацию ) для работы с qwen.
Запуск тестов
Этот проект содержит два типа тестов: модульные тесты и интеграционные тесты.
Модульные тесты
Чтобы выполнить набор модульных тестов проекта:
npm run testЭто запустит тесты, расположенные в каталогах packages/core и packages/cli. Убедитесь, что тесты проходят, прежде чем отправлять изменения. Для более комплексной проверки рекомендуется выполнить npm run preflight.
Интеграционные тесты
Интеграционные тесты предназначены для проверки сквозной функциональности Qwen Code. Они не выполняются как часть команды npm run test по умолчанию.
Чтобы запустить интеграционные тесты, используйте следующую команду:
npm run test:e2eБолее подробную информацию о фреймворке интеграционного тестирования можно найти в документации по интеграционным тестам.
Линтинг и предварительная проверка
Чтобы обеспечить качество кода и единообразие форматирования, выполните предварительную проверку:
npm run preflightЭта команда запустит ESLint, Prettier, все тесты и другие проверки, определённые в package.json проекта.
ProTip
после клонирования создайте файл git pre-commit hook, чтобы гарантировать, что ваши коммиты всегда будут чистыми.
echo "
# Run npm build and check for errors
if ! npm run preflight; then
echo "npm build failed. Commit aborted."
exit 1
fi
" > .git/hooks/pre-commit && chmod +x .git/hooks/pre-commitФорматирование
Чтобы отдельно отформатировать код в этом проекте, выполните следующую команду из корневого каталога:
npm run formatЭта команда использует Prettier для форматирования кода в соответствии со стилем проекта.
Линтинг
Чтобы отдельно выполнить линтинг кода в этом проекте, выполните следующую команду из корневого каталога:
npm run lintСоглашения о коде
- Пожалуйста, придерживайтесь стиля, шаблонов и соглашений, используемых в существующей кодовой базе.
- Импорты: Обратите особое внимание на пути импорта. Проект использует ESLint для ограничения относительных импортов между пакетами.
Структура проекта
packages/: Содержит отдельные подпакеты проекта.cli/: Интерфейс командной строки.core/: Основная серверная логика Qwen Code.
docs/: Содержит всю документацию проекта.scripts/: Вспомогательные скрипты для сборки, тестирования и задач разработки.
Более подробную информацию об архитектуре см. в docs/architecture.md.
Разработка документации
В этом разделе описывается, как разрабатывать и просматривать документацию локально.
Предварительные требования
- Убедитесь, что у вас установлен Node.js (версия 22+)
- Убедитесь, что у вас есть npm или yarn
Настройка сайта документации локально
Чтобы работать над документацией и просматривать изменения локально:
-
Перейдите в каталог
docs-site:cd docs-site -
Установите зависимости:
npm install -
Свяжите содержимое документации из основного каталога
docs:npm run linkЭто создаст символическую ссылку из
../docsнаcontentв проекте docs-site, позволяя содержимому документации обслуживаться сайтом Next.js. -
Запустите сервер разработки:
npm run dev -
Откройте http://localhost:3000 в браузере, чтобы увидеть сайт документации с обновлениями в реальном времени по мере внесения изменений.
Любые изменения в файлах документации в основном каталоге docs будут немедленно отражены на сайте документации.
Отладка
VS Code:
- Запустите CLI для интерактивной отладки в VS Code с помощью
F5 - Запустите CLI в режиме отладки из корневого каталога:
Эта команда запускает
npm run debugnode --inspect-brk dist/index.jsв каталогеpackages/cli, приостанавливая выполнение до подключения отладчика. Затем вы можете открытьchrome://inspectв браузере Chrome для подключения к отладчику. - В VS Code используйте конфигурацию запуска “Attach” (находится в
.vscode/launch.json).
В качестве альтернативы вы можете использовать конфигурацию “Launch Program” в VS Code, если предпочитаете запускать текущий открытый файл напрямую, но в целом рекомендуется использовать ‘F5’.
Чтобы установить точку останова внутри контейнера изоляции, выполните:
DEBUG=1 qwenПримечание: Если у вас есть DEBUG=true в файле .env проекта, это не повлияет на qwen из-за автоматического исключения. Используйте файлы .qwen/.env для настроек отладки, специфичных для qwen.
React DevTools
Для отладки пользовательского интерфейса CLI на React вы можете использовать React DevTools. Ink, библиотека, используемая для интерфейса CLI, совместима с React DevTools версии 4.x.
-
Запустите приложение Qwen Code в режиме разработки:
DEV=true npm start -
Установите и запустите React DevTools версии 4.28.5 (или последнюю совместимую версию 4.x):
Вы можете установить их глобально:
npm install -g react-devtools@4.28.5 react-devtoolsИли запустить напрямую с помощью npx:
npx react-devtools@4.28.5Ваше запущенное CLI-приложение должно подключиться к React DevTools.
Изоляция (Sandboxing)
TBD
Публикация вручную
Мы публикуем артефакт для каждого коммита в нашем внутреннем реестре. Но если вам нужно вручную сделать локальную сборку, выполните следующие команды:
npm run clean
npm install
npm run auth
npm run prerelease:dev
npm publish --workspaces