flowctl — командная строка агента
flowctl — маленькая утилита без зависимостей, которая идёт в комплекте со скиллом. Она умеет проверять флоу до сохранения, выкатывать изменения и читать логи прогонов — то, что агент делает чаще всего, — одним вызовом вместо ручных GraphQL-запросов.
Установка и окружение
Бинарники лежат в скилле: https://dynapi.ru/cms/agent-skill/cli/.
Скачайте файл под свою систему — и это всё, утилите не нужна установка:
| Система | Файл |
|---|---|
| Linux | flowctl-linux-amd64 |
| Windows | flowctl-windows-amd64.exe |
| macOS (Apple Silicon) | flowctl-darwin-arm64 |
| macOS (Intel) | flowctl-darwin-amd64 |
Адрес и ключ задаются переменными окружения один раз за сессию.
Linux и macOS:
export DYNAPI_URL="https://dynapi.ru/cms/graphql"
export DYNAPI_APIKEY="dca_…"
Windows (PowerShell):
$env:DYNAPI_URL = "https://dynapi.ru/cms/graphql"
$env:DYNAPI_APIKEY = "dca_…"
Каждая сетевая команда подхватывает их сама; флаги --url и --key
переопределяют окружение, если нужно работать с другим проектом.
Если какая-то команда «не существует» — у вас старый бинарник: с каждым
релизом набор команд растёт. flowctl version покажет сборку, свежий файл
лежит по тому же адресу (эндпоинт не меняется, меняется только утилита).
Команды
Проверка
| Команда | Что делает |
|---|---|
flowctl validate <flow.json> |
Локально: разбор документа флоу, инварианты графа, синтаксис Liquid в каждом узле. Ничего не отправляет на сервер. |
flowctl dryrun <flow.json> |
Сухой прогон несохранённого флоу на сервере (dryRunFlow): печать шагов, сработавших условий и ошибок. |
flowctl runs <slug> |
Здоровье живого флоу текстом: сколько раз сработал каждый узел, средняя длительность, последняя ошибка. |
Публикация
| Команда | Что делает |
|---|---|
flowctl save <flow.json> |
Сохранить флоу черновиком. Никогда не публикует. |
flowctl publish <slug> |
Выкатить черновик флоу на основной адрес. |
flowctl apply <export.json> |
Полный импорт экспорта: ручка + флоу + шаблоны + маршруты. --publish — сразу опубликовать. |
flowctl flow list / flow get-doc <slug> |
Список сценариев; живой документ флоу в формате JSON (--out — в файл) — честный ответ на вопрос «что этот сценарий делает». |
flowctl site publish |
Полная публикация сайта: черновики шаблонов, статики и библиотеки запросов, слияние маршрутов и запросов (надгробия учитываются, свежие живые правки сохраняются), карта сайта. Печатает, что сдвинулось. |
Проверка после сохранения — на превью-хосте
(https://preview-<поддомен>.dynapi.ru): он всегда исполняет черновики,
посетители основного адреса их не видят.
Материал сайта
| Команда | Что делает |
|---|---|
flowctl files push <путь…> |
Загрузить шаблоны и статику с диска (каталог — рекурсивно). --publish — сразу опубликовать. |
flowctl template list / static list |
Инвентарь файлов сайта: каждый путь и его состояние — live (опубликован), draft (новый черновик), live+draft (есть неопубликованная правка). |
flowctl files delete <путь> |
Удалить файл из обеих копий — сначала черновик (именно он воскресил бы файл при следующей полной публикации), затем живую. --publish — полная публикация следом, чтобы реплики сбросили кэш. |
flowctl route <list|save|publish|delete> |
Маршруты: список, черновик, публикация, удаление. |
flowctl query <list|save|publish|delete> |
Библиотека запросов. Удаление — через «надгробие» в черновике (query delete): удалённая без него живая запись воскресает при следующей полной публикации. |
flowctl subdomain [имя] [--set] |
Текущий поддомен и адреса; проверка занятости; --set — занять. |
Контент
| Команда | Что делает |
|---|---|
flowctl entity <types|schema|items|get|create|update|delete|delete-type|count> |
Типы контента и записи без ручного GraphQL: список типов, схема, страницы записей, создание/правка/удаление. |
flowctl entity count <тип> |
Честное число записей (с --where/--search) — полезно, когда постраничный лист упирается в лимит 100 строк. |
flowctl entity delete-type <тип> |
Снести тип и все его записи (каскад в одной транзакции, необратимо). Сначала печатает, что именно исчезнет, и спрашивает подтверждение; --yes — для скриптов. |
flowctl media push <файл…> |
Загрузить файлы в медиатеку; печатает id и url каждого. |
flowctl media refs <id> |
Где файл используется — проверка перед удалением. |
flowctl secret <set|list|delete> |
Секреты проекта для secret://-ссылок во флоу. Значение подаётся на stdin, прочитать сохранённое нельзя. |
Захват id записи: flowctl entity create|update … -quiet печатает только id — его и подставляйте в переменную. Декорированная строка вида ✓ create … id=… — проза для человека: в переменной она ломает ссылки на записи. Если id сразу идёт в поле другой записи (например, seo у страницы), перечитайте её после обновления и убедитесь, что ссылка встала.
Большие объёмы — с паузами. У платформы есть лимиты на менеджмент-операции в минуту: установка уровня визарда или массовая загрузка файлов формально легальны поштучно, но упираются в лимит на хвосте — обычно на финальной публикации. Делите большие работы на партии с паузами, после 429 выжидайте retry_after.
Пример сессии
# окружение
export DYNAPI_URL="https://dynapi.ru/cms/graphql"
export DYNAPI_APIKEY="dca_…"
# проверить флоу локально и на сервере
flowctl validate katalog.json
flowctl dryrun katalog.json
# сохранить черновиком, проверить на превью, опубликовать
flowctl save katalog.json --slug katalog
curl -s https://preview-<поддомен>.dynapi.ru/katalog
flowctl publish katalog
# убедиться, что живой флоу здоров, а файлы сайта в порядке
flowctl runs katalog
flowctl route list
flowctl template list
Назад: Скилл dynapi-site-dev