Как внести вклад
Мы будем рады принять ваши патчи и вклад в этот проект.
Процесс внесения вклада
Проверка кода
Все предложения, включая предложения от участников проекта, проходят проверку. Для этого мы используем GitHub pull request .
Рекомендации по оформлению Pull Request
Чтобы помочь нам быстро просматривать и сливать ваши PR, пожалуйста, следуйте этим рекомендациям. PR, не соответствующие этим стандартам, могут быть закрыты.
1. Привязка к существующему Issue
Все PR должны быть привязаны к существующему issue в нашем трекере. Это гарантирует, что каждое изменение обсуждалось и соответствует целям проекта до написания кода.
- Для исправлений ошибок: PR должен быть привязан к issue с отчётом об ошибке.
- Для новых функций: PR должен быть привязан к issue с запросом функции или предложением, одобренным мейнтейнером.
Если issue для вашего изменения не существует, сначала создайте его и дождитесь обратной связи, прежде чем начинать писать код.
2. Делайте PR небольшими и сфокусированными
Мы предпочитаем небольшие, атомарные PR, которые решают одну задачу или добавляют одну самостоятельную функцию.
- Делайте: Создайте PR, который исправляет одну конкретную ошибку или добавляет одну конкретную функцию.
- Не делайте: Объединяйте несколько несвязанных изменений (например, исправление ошибки, новую функцию и рефакторинг) в один PR.
Как правило, начинайте разделять PR, когда он превышает примерно 1200 изменённых строк. PR размером более примерно 2000 изменённых строк следует либо разбить на серию более мелких логических PR, которые можно проверять и сливать независимо, либо пояснить в описании PR, почему изменение должно быть объединено вместе.
3. Используйте черновики PR для незавершённой работы
Если вы хотите получить раннюю обратную связь по своей работе, используйте функцию GitHub Draft Pull Request. Это сигнализирует мейнтейнерам, что 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 объясните «почему» за вашими изменениями и укажите ссылку на соответствующее issue (например, 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-code, так и контейнер изоляции, выполните build:all из корневого каталога:
npm run build:allЧтобы пропустить сборку контейнера изоляции, используйте npm run build.
Запуск
Чтобы запустить приложение Qwen Code из исходного кода (после сборки), выполните следующую команду из корневого каталога:
npm startЕсли вы хотите запустить собранный из исходников код за пределами папки qwen-code, вы можете использовать npm link path/to/qwen-code/packages/cli (см. документацию ), чтобы запускать с помощью qwen-code.
Запуск тестов
Этот проект содержит два типа тестов: модульные (unit) и интеграционные (integration).
Модульные тесты
Чтобы выполнить набор модульных тестов для проекта:
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
После клонирования создайте файл precommit-хука git, чтобы ваши коммиты всегда были чистыми.
echo "
# Выполнить сборку npm и проверить на ошибки
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-codeПримечание: Если у вас установлено DEBUG=true в файле .env проекта, это не повлияет на qwen-code из-за автоматического исключения. Используйте файлы .qwen-code/.env для специфичных для qwen-code настроек отладки.
React DevTools
Для отладки React-интерфейса CLI можно использовать 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.
Песочница
TBD
Ручная публикация
Мы публикуем артефакт для каждого коммита во внутренний реестр. Но если вам нужно вручную выполнить локальную сборку, выполните следующие команды:
npm run clean
npm install
npm run auth
npm run prerelease:dev
npm publish --workspaces