CLI и локальная разработка

Редактор в браузере покрывает весь цикл, но в какой-то момент хочется свой редактор, свой git и свои инструменты. CLI lecodes переносит проект на твою машину: локальная разработка с полным IntelliSense, горячая перезагрузка прямо на телефоне по локальной сети, headless-проверки без устройства и синхронизация с платформой одной командой. Обзор возможностей — на странице CLI; здесь — по шагам.

Установка

CLI — это npm-пакет lecodes-cli (Node ≥ 18); команда, которую он ставит, называется lecodes:

bash
npm i -g lecodes-cli        # затем: lecodes <команда>
npx lecodes-cli <команда>   # или без установки

Если Node на машине нет, возьми standalone-сборку на странице Загрузок: распакуй архив и запусти ./lecodes install — бандл скопируется в библиотечную папку, а lecodes появится в PATH.

Часть команд живёт в отдельных пакетах, которые CLI ставит при первом использовании в ~/.lecodes/peers после подтверждения (--yes или LECODES_YES=1 пропускают вопрос): lecodes-renderer для render и test, lecodes-design для design, lecodes-3d-editor для scene и thumbs, lecodes-assets для assets. Standalone-сборка npm-пакеты не резолвит, так что эти команды требуют установки через npm.

Заметка

lecodes --version показывает заодно версии опциональных пакетов и откуда они взяты — полезно, когда какая-то команда жалуется, что ей чего-то не хватает. lecodes --help перечисляет команды по группам, lecodes <команда> --help — флаги и примеры.

Локальный проект — без аккаунта

Начать можно вообще без платформы: init разворачивает проект прямо на диске — ни логина, ни сервера.

bash
lecodes init myapp
cd myapp
lecodes dev

init кладёт стартовый main.ts, типы SDK, tsconfig.json, CLAUDE.md для ИИ-агентов и первый flow-тест в tests/ — VS Code сразу даёт автодополнение по всем глобалам, офлайн. Команда идемпотентна: существующие файлы не трогает. Правила из Устройства проекта действуют и здесь — никаких пакетных импортов, точка входа без экспортов.

lecodes dev — горячая перезагрузка на устройстве

Главная команда локальной разработки. lecodes dev поднимает dev-сервер в локальной сети и печатает QR-код — отсканируй его приложением le.codes, и проект откроется на телефоне нативно. Дальше цикл замыкается сам:

  • Каждое сохранение перекомпилируется и горячо подменяет работающее приложение прямо на устройстве; ошибка сборки откатывает к последней рабочей версии.
  • console.log и ошибки с устройства стримятся обратно в терминал.
  • URL стабилен между запусками — телефон переподключается к тому же адресу.

Логин не нужен, ассеты отдаются из рабочей папки. Флаги: --port (по умолчанию 4499), --host — если LAN-адрес определился неверно, --entry, --no-qr.

Тот же проект с той же горячей перезагрузкой можно открыть и на других хостах — хоть на всех сразу:

bash
lecodes dev --web          # в браузере (лёгкий веб-хост; камера и карта — в веб-версиях)
lecodes dev --desktop      # в нативном окне на Windows или Linux; --fps покажет счётчик кадров
lecodes dev --android      # на телефоне по USB через adb reverse — без Wi-Fi и LAN-адреса

--android умеет и ограниченную проверку: lecodes dev --android --time 12 --png phone.png запустит приложение, через 12 секунд снимет скриншот с устройства, остановит его и завершится с кодом 1, если оно упало — удобно в CI.

Второй сценарий: проект живёт на le.codes, а ты работаешь с его локальной копией.

bash
lecodes login                        # откроет браузер и авторизует машину
lecodes clone <uuid-или-url> myapp   # файлы + ресурсы + типы
cd myapp
# …правки в своём редакторе…
lecodes status                       # что изменилось
lecodes diff                         # построчный diff с сервером
lecodes push -m "Новое меню"         # все правки — одним чекпоинтом

Модель проще git — без стейджинга и веток. push отправляет всё рабочее дерево, а сервер атомарно собирает из него один чекпоинт: добавления, правки, удаления и переносы сразу; переименования сохраняют историю, неизменённые бинарники повторно не загружаются. pull забирает текущее состояние сервера (можно указать пути, чтобы обновить только их; --force — отбросить локальные правки). Если сервер успел уйти вперёд, push остановится и покажет, что будет перезаписано.

Локальный проект подключается к платформе позже, когда захочешь:

bash
lecodes link                         # создать проект на сервере для этой папки
lecodes link --push -m "v1"          # …и сразу залить первым чекпоинтом
lecodes link --project <uuid>        # принять существующий проект — покажет, что изменит push

Метаданные живут в .lecodes/ — это как .git: хочешь — коммить, хочешь — нет. Типы подтягиваются с сервера при clone, pull и link, поэтому всегда совпадают с задеплоенным рантаймом. Новый проект на сервере создаёт lecodes create <имя>, а push --publish вместе с чекпоинтом сразу публикует проект.

Совет

В CI логин не нужен: токен и адрес API передаются переменными окружения LECODES_TOKEN и LECODES_API. Сам токен создаётся в веб-интерфейсе (или lecodes login --token).

Компиляция и headless-рендер

bash
lecodes compile -o app.js         # весь проект — один портативный бандл
lecodes render --png shot.png     # скриншот приложения без устройства
lecodes render --script demo.json # сценарий: тапы, ввод, кадры — и снимок после

compile собирает тот самый бандл из Устройства проекта — локально, меньше чем за секунду. Без -o бандл уходит в stdout (удобно в пайплайнах), --no-minify оставляет его читаемым. Для локального init-проекта бандл самодостаточен — его можно открыть в le.codes Desktop.

render исполняет проект headless и возвращает семантический JSON-снимок интерфейса — или PNG с --png. Это основа автоматических проверок и работы ИИ-ассистентов: агент правит код, рендерит и сам видит результат. Рендерятся интерфейс и 2D; 3D-сцена в headless приходит как JSON без пикселей — за пикселями lecodes render --desktop через нативный хост (Windows и Linux).

lecodes test — flow-тесты

bash
lecodes test                 # все tests/*.flow.json и сценарии из дизайна
lecodes test hero --logs     # один сценарий, с выводом console.log приложения
lecodes test --json          # машинный отчёт — для CI

Сценарий — JSON-список шагов: тап, ввод текста, скролл, ожидание, кадры, перетаскивание, клавиши — и проверок expect по семантическому снимку или по логу игры (expect.log). Время детерминировано: setLoop, 2D-физика, анимация и аспекты продвигаются фиксированным шагом 1/60 от сценария, а не от часов, так что сценарий, прошедший однажды, проходит всегда. 3D-физика в headless настоящая — это Jolt, тот же, что на устройстве. Упавший шаг сохраняет JSON и PNG кадра в tests/.artifacts/<flow>/.

Если в проекте есть дизайн-доска, test выводит сценарии из её переходов между экранами и проверяет собранное приложение против спроектированной навигации; ответы бэкенда для них подкладываются из tests/fixtures.json.

Нативные оболочки и десктоп

Приложение можно распространять по QR-ссылке без единой сборки. Когда нужен свой бинарь — для стора или для десктопа — его готовит lecodes app:

bash
lecodes app init ios --team ABCDE12345    # Xcode-проект в ./ios с твоим bundle id
lecodes app init android                  # Gradle-проект в ./android
lecodes app sync                          # подтянуть иконку, версии, плагины из app.json
lecodes app build ios                     # собрать; app upload ios — в App Store Connect
lecodes app build desktop                 # переносимая папка для Windows, Linux и macOS

Оболочка запускает скомпилированный бандл офлайн и никогда не отправляется на платформу. Версия нативного SDK закрепляется в app.json, чтобы сборки были воспроизводимыми; lecodes app update двигает закрепление. Xcode и Android Studio для сборки нужны — облачной сборки пока нет. Push-уведомления проверяются без ключей: lecodes pn send "Привет" отправит уведомление на зарегистрированные устройства от твоего имени.

Ассеты, шейдеры и запекание

Для игр и 3D в той же команде — конвейер контента:

  • lecodes assets convert model.fbx — FBX в GLB с текстурами внутри, probe показывает, что внутри модели, doctor чинит типовые проблемы (лимит костей, KTX2, масштаб), retarget переносит анимации с другого скелета — в том числе из Mixamo.
  • lecodes shaders — свои материалы .mat: список, компиляция, update после обновления движка.
  • lecodes lightmap — запечь освещение статики уровня, посмотреть числа и слои бейка.
  • lecodes navmesh — построить навигационную сетку уровня.

Что умеет сам движок — на странице Движок le.codes.

Рядом с CLI — design, scene и update

Из той же команды запускаются ещё два локальных инструмента:

  • le.codes Design (lecodes design) — живой канвас экранов для проектирования приложения вместе с ИИ-ассистентом.
  • Редактор сцен (lecodes scene) — визуальный редактор .scene.ts: дерево сцены, инспектор, гизмо; правки пишутся прямо в исходник, а внешние правки из IDE подхватываются на лету.

Оба регистрируют MCP-серверы, так что ИИ-агент в терминале рендерит экраны доски и читает состояние сцены напрямую. А lecodes update обновляет всё, от чего зависит проект, в правильном порядке: десктопный хост, компилятор шейдеров, сами шейдеры, типы, закрепления оболочек и опциональные пакеты.