Запуск и отладка
Gitcito читает ваш .vscode/launch.json — корневой и любые вложенные,
сгруппированные разделителями, — и запускает выбранную конфигурацию во
встроенном терминале.

- Переменные VS Code раскрываются (
${workspaceFolder}и компания). preLaunchTaskконфигурации выполняется первым.- Значения
${input:…}спрашиваются интерактивно перед запуском (promptStringиpickString).pickStringпоказывает варианты как настоящий выбор со значением по умолчанию;promptStringс пометкойpasswordмаскируется. - Задачи с
isBackground(вотчеры, dev-серверы) запускаются отдельно, так что никогда не блокируют старт. - Compounds запускают каждого участника как собственную параллельную
сессию — в одном разделённом терминале с именем compound, по панели на
участника, ровно как debug-сессии VS Code. С
stopAll: trueостановка одного участника останавливает всех. Задачи, общие для нескольких участников, выполняются один раз, в своей панели, до запуска участников — запрос повышения версии спрашивает один раз, а не по разу на участника. Эта панель закрывается сама при успехе и остаётся открытой при ошибке. serverReadyActionучитывается: когда вывод сессии совпадает с заданным шаблоном, объявленный URL открывается в браузере (openExternally;debugWithChrome/debugWithEdgeтоже открывают браузер — Gitcito не может подключить к нему отладчик).


Плавающая панель даёт паузу / продолжение, перезапуск, остановку и переключает между запущенными сессиями.
Включается в Настройки → Общие → Включить launch.json. Кнопка LAUNCH появляется рядом с вкладками Git / Файлы.
Участник compound отображается как compound › участник, а его перезапуск перезапускает только этого участника. Если панель закрывает что-то нужное, перетащите её в сторону за ручку — позиция запоминается, а двойной щелчок по ручке возвращает её в центр.
Чего Gitcito сознательно не делает: он запускает ваши программы в
настоящих терминалах, но он не отладчик — без точек останова, без просмотра
переменных, без Debug Adapter Protocol. Конфигурации только-attach работают,
когда несут preLaunchTask (задача и есть работа); чистый attach запускать
нечего.
Горячие действия — быстрый путь рядом с «Перезапустить»

Большинство сред разработки давно перезагружаются по одной клавише: flutter run
— по r, Metro — по r, nodemon — по rs ⏎, Vitest перезапускает набор
тестов по a. Перезапускать ради этого всю конфигурацию запуска — медленный
путь: он убивает процесс, снова выполняет каждый preLaunchTask и выбрасывает
состояние приложения.
Поэтому Gitcito читает команду, которую конфигурация запускает на самом деле —
следуя за npm run dev вплоть до скриптов вашего package.json — и выносит
клавиши этой среды на панель отладки. Нажатие записывает клавишу в стандартный
ввод сессии, ровно так, как если бы вы набрали её в терминале сами.
| Среда | Кнопки | За ⋯ |
|---|---|---|
Flutter (flutter run) |
Горячая перезагрузка r, горячий перезапуск R |
debug paint, оверлей производительности, смена платформы, DevTools |
| Expo | Перезагрузить r |
меню разработчика, отладчик |
| Metro / React Native | Перезагрузить r |
меню разработчика, отладчик |
| Vite (dev, serve, preview) | Перезапустить сервер r ⏎ |
открыть в браузере, показать адреса, очистить консоль |
| nodemon | Перезапустить rs ⏎ |
— |
| Vitest (режим watch) | Все тесты a, упавшие f |
обновить снимки |
Jest (--watch) |
Все тесты a, упавшие f |
только изменённые файлы, обновить снимки |
Mocha (--watch) |
Перезапустить rs ⏎ |
— |
AVA (--watch) |
Все тесты r ⏎, обновить снимки u ⏎ |
— |
dotnet watch |
Принудительный перезапуск Ctrl+R |
— |
Wrangler (wrangler dev) |
Открыть в браузере b |
DevTools, локально/удалённо, очистить консоль |
Среды, которые перезагружаются сами, кнопок не получают — node --watch,
ng serve, tsc --watch, cargo watch, next dev, webpack-dev-server.
Кнопка, отправляющая клавишу, которую никто не читает, хуже отсутствия кнопки:
она выглядит так, будто сработала.
Ограничения. Определение текстовое: оно ищет имя программы в командной строке, поэтому конфигурация, запускающая ваш сервер через скрипт-обёртку, который Gitcito прочитать не может, не получит ничего. Подтверждения нажатия тоже нет — кнопка мигает, а настоящий ответ даёт вывод самого процесса. Приостановленная или завершённая сессия ввод не принимает, и кнопки становятся неактивными.
Если догадка неверна, скажите об этом в самой конфигурации:
{
"name": "API (watch)",
"type": "node-terminal",
"command": "./scripts/dev.sh",
"gitcito": { "hotActions": [{ "label": "Reload", "send": "r", "icon": "reload" }] }
}
send пишется буквально — завершите его \n для CLI, ожидающего Enter.
icon необязателен: reload, restart, rerun, failed, snapshot, menu, debugger,
browser, clear, paint, perf, platform, devtools, urls.
Пустой массив hotActions отключает кнопки для этой конфигурации.
Цель запуска — на каком устройстве стартует конфигурация

Конфигурации, которая собирает мобильное приложение, нужно сказать, где его запускать. Этот выбор принадлежит не только Flutter — React Native, Expo, Capacitor и xcodebuild тоже принимают цель, и каждый пишет её по-своему. Поэтому Gitcito спрашивает один раз, рядом с вкладкой LAUNCH, и записывает ответ в той форме, которую читает среда этой конфигурации. Выбор появляется, только если какая-то конфигурация репозитория действительно принимает устройство.
Откуда берётся список — из тех инструментов SDK, что есть на машине; их опрашивают параллельно:
| Инструмент | Даёт | Когда опрашивается |
|---|---|---|
flutter devices / flutter emulators |
всё, уже нормализованное | если в папке есть pubspec.yaml |
xcrun simctl |
симуляторы iOS, запущенные и холодные | на macOS |
adb devices |
телефоны Android и запущенные эмуляторы | всегда |
emulator -list-avds |
ещё холодные эмуляторы Android | всегда |
Один и тот же симулятор сообщают до трёх из них, поэтому записи объединяются по
платформе и имени; при равенстве побеждает Flutter, ведь именно его id ждёт
flutter run -d. Неустановленные инструменты названы внизу меню — короткий
список должен объяснять себя сам.
Что делает выбор:
| Семейство | Записывается как |
|---|---|
| Flutter | -d <id> |
| React Native iOS | --udid <id> |
| React Native Android | --deviceId=<id> |
Expo run:ios / run:android |
--device <id> |
| Capacitor / Ionic | --target <id> |
| xcodebuild | -destination id=<id> |
| всё остальное | только окружение |
Каждая запущенная конфигурация получает ещё GITCITO_DEVICE_ID,
GITCITO_DEVICE_NAME и GITCITO_DEVICE_PLATFORM в окружении, а для настоящего
Android-устройства — и ANDROID_SERIAL. Именно это позволяет скрипту-обёртке,
задаче Gradle или голому adb попасть в тот же телефон, а Gitcito при этом
ничего не переписывает.
Запуск холодного устройства. Всё, что под заголовком Не запущено,
стартует при выборе: flutter emulators --launch, xcrun simctl boot (плюс окно
Simulator) или отсоединённый emulator -avd — так выход из Gitcito не уносит с
собой ваш эмулятор Android.
Ограничения. Конфигурацию, которая уже называет устройство — явный -d,
--simulator, deviceId из Dart-Code, — не трогают: выбор никогда не
перекрывает написанное автором. Id, которому понадобились бы кавычки, уходит в
окружение, вместо того чтобы рисковать сломанной командной строкой. Меню
отфильтровано по тому, до чего дотягиваются ваши конфигурации, так что
репозиторий только под Android никогда не предложит вам iPhone. И список — это
снимок: подключите телефон и нажмите Обновить устройства.
Выбор запоминается для каждого репозитория и забывается, когда устройство исчезает.
См. также: Встроенный терминал
Значения из JSON и YAML
Поле может показывать текущую версию или получать начальное значение из файла проекта. Gitcito читает файл при запуске, перед показом полей. Расширение VS Code не требуется.
Добавьте fileValues в поле promptString или pickString. Каждое значение задаёт путь относительно папки конфигурации запуска и свойство, разделённое точками. Используйте ${fileValue:name} в description или default. Пустой default оставляет поле необязательным.
{
"id": "version",
"type": "promptString",
"description": "Current: ${fileValue:version} (${fileValue:build})",
"default": "",
"fileValues": {
"version": { "file": "version.yaml", "key": "settings.base.MARKETING_VERSION" },
"build": { "file": "version.yaml", "key": "settings.base.CURRENT_PROJECT_VERSION" }
}
}
Поддерживаются файлы JSON, YAML и YML внутри папки размером до 1 МиБ и значения строкового, числового или логического типа. Отсутствующие файлы, неверные данные, отсутствующие свойства и внешние пути останавливают запуск с ошибкой. Команды и выражения JavaScript не выполняются. Новый запуск перечитывает файлы; Restart использует прежние ответы. VS Code не обрабатывает эти поля Gitcito самостоятельно.