Перейти к содержимому

CLI и проекты

Эта страница переведена с английского. Читать страницу на английском

Команда zeyn создаёт проекты, добавляет функции (features), проверяет приложение и запускает MCP-сервер для агентов.

Команды

КомандаЧто делает
zeyn new <name>Создаёт приложение со стандартной структурой функций
zeyn new <name> --libСоздаёт библиотеку моделей, функций и текстов, общую для нескольких приложений
zeyn g feature <name>Добавляет src/features/<name> с моделями, хранилищем, действиями и экранами
zeyn routesВыводит список функций, экранов, маршрутов, API и прав доступа
zeyn checkКомпилирует и сообщает о структурных проблемах и отсутствующих переводах
zeyn check --fixПереписывает переименованные API Zeyn в src, tests и examples, затем проверяет
zeyn mcpЗапускает MCP-сервер через stdio для ИИ-агентов

Установите её из crates.io:

cargo install zeyn-cli
zeyn new my-app
cd my-app
cargo run

Внутри этого репозитория запускайте CLI через Cargo:

cargo run -p zeyn-cli -- new my-app
cd my-app
cargo run

Новое приложение

zeyn new создаёт проект, который собирается, проходит свои тесты и следует правилам, заданным для агентов:

  • AGENTS.md и CLAUDE.md: правила проекта и указатель по фреймворку для агентов.
  • .mcp.json: регистрирует MCP-сервер zeyn, чтобы агент мог вызывать zeyn_check и zeyn_docs.
  • config/app.json: значения по умолчанию. Переменные окружения APP_* переопределяют их, например APP_SERVER__ADDR для server.addr.
  • locales/en.json и locales/tr.json: все тексты, которые видит пользователь.
  • src/features/: по одной папке на функцию, с примером функции notes.
  • rustfmt.toml, clippy.toml, deny.toml, rust-toolchain.toml и [lints] в Cargo.toml: стандарты, которые обеспечивает CI. rustfmt.toml задаёт chain_width = 40, поэтому код читается сверху вниз: цепочка вызовов длиннее этого значения получает по одному вызову на строку, в среднем одна-две точки на строку. Агенты и люди просматривают список быстрее, чем одну длинную строку, а в диффах виден тот единственный вызов, который изменился. Сохраняйте эту настройку.
  DataGrid::of(search_items)
      .paging(Paging::pages(25))
      .column(Item::code)
      .column(Item::qty)

а не DataGrid::of(search_items).paging(Paging::pages(25)).column(Item::code).column(Item::qty).

  • Dockerfile и .dockerignore: небольшой образ контейнера.
  • Конвейеры для распространённых CI-серверов, все выполняют одни и те же проверки (cargo fmt --check, cargo clippy -D warnings, cargo test, cargo deny check) и отклоняют тег vX.Y.Z, не совпадающий с Cargo.toml:
    • .github/workflows/ci.yml для GitHub Actions, с .github/dependabot.yml (еженедельные обновления Cargo и actions) и чек-листом для pull request;
    • .gitlab-ci.yml для GitLab;
    • Jenkinsfile для Jenkins (агент Docker, покрытие через cargo llvm-cov).
  • sonar-project.properties: анализ SonarQube (замечания Clippy и покрытие LCOV из target/lcov.info). Рабочий процесс GitHub запускает его, когда заданы переменная репозитория SONAR_HOST_URL и секрет SONAR_TOKEN; Jenkins запускает его, когда задание устанавливает SONAR_ENABLED=true.
  • SECURITY.md и CHANGELOG.md (Keep a Changelog).
  • Локальный git-репозиторий на ветке main, если git установлен (Windows, macOS или Linux) и папка ещё не находится внутри репозитория. Ничего не коммитится, поэтому первый коммит несёт ваше собственное имя и адрес e-mail. --no-git пропускает этот шаг.

Каждая папка описана в разделе Структура проекта.

Проверка приложения

zeyn check запускает компилятор, а затем собственные проверки приложения (App::check): дублирующиеся маршруты, дважды зарегистрированные экраны, сервисы, которые нужны экрану, но никем не зарегистрированы, непригодные горячие клавиши, токены темы с контрастом ниже WCAG AA и ключи перевода, отсутствующие в каком-либо языке. При любой ошибке команда завершается с ошибкой, поэтому её может запускать CI.

Когда релиз Zeyn переименовывает API, zeyn check --fix переписывает старые имена, например Grid в DataGrid и GridQuery в DataQuery, затем проверяет снова.

zeyn check --fix

Docker

Сгенерированный Dockerfile собирается в два этапа и работает на образе distroless от имени пользователя без прав root. Бинарный файл проверяет собственное состояние командой <app> health, которую использует HEALTHCHECK.

docker build -t my-app .
docker run -p 3000:3000 -e APP_SERVER__ADDR=0.0.0.0:3000 my-app

Образ сгенерированного приложения занимает около 43 МБ, а простаивающее приложение использует несколько МБ оперативной памяти.

MCP-сервер

zeyn mcp говорит по MCP через stdio. Его инструменты: zeyn_docs (справочник по фреймворку по темам), zeyn_describe (функции, экраны, маршруты и проблемы приложения в текущем каталоге), zeyn_check (с fix: true запускает check --fix), zeyn_test и zeyn_new_feature. См. MCP и ИИ-агенты.