CLI Commands
Назначение
Пакет commands/ это orchestration-layer внутри CLI.
Если main.py маршрутизирует пользовательское намерение, а CLIEngine выполняет рендеринг, то commands переводят конкретное действие пользователя в реальную операцию scaffolding.
Это не низкоуровневые генераторы файлов. Это scenario handlers.
То есть каждая команда отвечает на высокоуровневый вопрос вроде:
- как инициализировать новый проект
- как расширить существующий проект
- как сгенерировать repository config files
- как сгенерировать deployment files
- как scaffold'ить quality tooling
Архитектурная Роль
Commands находятся между двумя мирами:
- входным миром menus, arguments и user intent
- выходным миром blueprints, generated files и post-generation instructions
Их задача:
- выбрать нужный blueprint subtree
- собрать rendering context
- определить target paths
- скоординировать multi-step scaffold flow
- показать разработчику дальнейшие шаги
Поэтому commands это не просто обертки вокруг engine.scaffold(...).
Именно они кодируют семантику конкретного CLI-действия.
Семейства Команд
Текущие команды складываются в несколько архитектурных групп.
Инициализация Проекта
init.py это верхнеуровневый публичный scaffold-entrypoint для создания нового проекта.
Он координирует new-project workflow и делегирует разбор install-слоев orchestration-слою установки.
Его публичная роль проста:
- принять явные CLI-флаги
- нормализовать project options
- запустить new-project scaffold flow
Install / Extension Orchestration
install.py это сценарный слой за сборкой и расширением проекта.
Он отвечает за:
- вычисление install-слоев, которые следуют из выбранных модулей
- detection уже установленных project modules
- scaffolding new-project flows
- расширение existing projects
- генерацию compare copy для уже найденных модулей
Это сердцевина command-layer в текущей scaffold-модели. Это уже не просто один feature installer. Именно здесь описано, как проект растет после появления базового scaffold.
Команды Repository Config
repo.py отвечает за генерацию repository-level shell, например:
pyproject.toml.env.example- других root-level comparison files
Это command-family, который находится над runtime project tree. Он управляет packaging и repository shell вокруг Django-кодовой базы.
Команды Качества
quality.py не занимается структурой runtime-приложения.
Он генерирует developer workflow support, например .pre-commit-config.yaml и related baseline files.
Это показывает, что commands-package строит не только runtime code, но и окружение разработчика вокруг проекта.
Команды Деплоя
deploy.py отвечает за генерацию operational infrastructure, сейчас вокруг Docker и CI/CD support.
Как и quality tooling, этот command находится вне основного runtime app tree, но при этом остается частью generated project ecosystem.
Общий Паттерн Команд
Несмотря на различия, у команд есть общий архитектурный паттерн:
- принять intent и параметры
- вычислить destination paths
- собрать context
- вызвать
CLIEngineнапрямую или через helper orchestration layer - напечатать понятные next steps
Из-за этого у CLI получается единая ментальная модель. Каждая команда определяет, что именно добавляется, но сам flow выполнения остается стабильным.
Runtime Flow
flowchart TD
A["User intent from menu or args"] --> B["command handler"]
B --> C["resolve target path"]
B --> D["build render context"]
B --> E["choose blueprint subtree"]
C --> F["CLIEngine or install orchestrator"]
D --> F
E --> F
F --> G["generated project files"]
B --> H["next-step instructions"]
Почему Команды Нужно Документировать
Без отдельной документации commands CLI выглядит как плоский список действий. Но на деле именно commands кодируют поддерживаемую модель роста проекта:
- инициализировать базовый проект
- расширять его install-слоями
- генерировать repository shell files
- добавлять developer tooling
- добавлять deployment support
Поэтому documentation по commands объясняет не только то, что CLI умеет делать, но и то, как репозиторий ожидает эволюцию проекта во времени.
Связь С Другими Слоями CLI
main.pyвыбирает, какой command handler должен запуститьсяprompts.pyдает интерактивные входные данные для commandsCLIEngineвыполняет реальную генерацию файлов по запросу commandsblueprints/дают структурный материал, который commands используют
То есть commands это семантический центр CLI: они интерпретируют intent и превращают его в generation work.