Перейти к содержанию

SDK 0.3 · формат v2 · Совместимость с SDK

Архитектура ​

Платформа и приложение ​

Ядро выполняет workflow, проверяет определения и связывает входы с выходами. Конструкции задают порядок выполнения. Блоки выполняют операции; плагины добавляют блоку драйвер, обработчик или формат.

Серверная поставка предоставляет UI, API и устойчивое хранилище состояния. Встраивание в Python и отдельный сервер используют одни определения и правила выполнения.

Где живут сценарии ​

Workflow, промпты, адреса сервисов и правила приложения находятся в его репозитории. База запусков, файлы и секреты принадлежат инсталляции и хранятся вне Git. Движок не импортирует код приложения.

Прикладная логика собирается в workflow. Повторяемую интеграцию можно вызывать как вложенный сценарий. CLI запускает установленные инструменты; оркестрация остаётся видимой в определении процесса.

Входы и выходы ​

Workflow объявляет JSON Schema входов и результата. Каждый блок и вложенный workflow имеет явный контракт. Внешнему вызывающему доступны только объявленные outputs.

Поля YAML ​

ПолеНазначение
schema_versionВерсия формата определения
name, description, versionНазвание, описание и авторская версия
input_schema, output_schemaJSON Schema входов и результата
inputsВходные значения по умолчанию
stepsШаги выполнения
outputsРезультат для вызывающего
secretsОбъявления необходимых секретов
timeout_secondsЛимит активного выполнения
triggers, on_finishУсловия запуска и последующее действие

Блок, шаг и конструкция ​

block выбирает тип блока, id именует конкретный шаг. Один блок может использоваться в процессе несколько раз с разными параметрами. params.operation выбирает операцию, если у блока их несколько.

steps, loop, concurrency, call, approval — конструкции управления. Они также отображаются узлами графа, но не требуют поля block.

Параметры шага ​

yaml
- id: request
  block: http
  params:
    url: "{inputs.source_url}"

Параметры проверяются по схеме выбранной операции. Неизвестные поля отклоняются. Справочники операций находятся у соответствующих блоков в магазине.

Ссылки ​

{inputs.text} — вход workflow; {request.json} — результат шага; {secret.KEY} — объявленный секрет. Целая ссылка сохраняет тип значения. Отсутствующее поле считается ошибкой; null и пустая строка различаются.

Буквальные фигурные скобки экранируются удвоением. Данные подставляются один раз и не превращаются в код. Служебные пространства inputs, secret, state, loop нельзя подменять именами шагов. Внутренние имена групп имеют собственную область видимости.

Файлы ​

FileRef — ссылка на сохранённый файл: ID, имя, MIME-тип и размер. Между шагами передаётся ссылка, а не копия байтов. Доступ проверяется для текущего аккаунта.

Условия ​

when определяет, выполнять ли шаг. Условие проверяется до его параметров. Ложное условие пропускает шаг без создания результата.

ПолеНазначение
valueПроверяемое значение
opОператор
expectedОжидаемое значение

Операторы: equals, not_equals, in, gte, lte, min_length, max_length, matches, contains. Все три поля обязательны; типы автоматически не приводятся. В approval.when условие относится к необходимости согласования результата вызова.

Состояние выполнения · state ​

state содержит статусы шагов и решения по согласованию. Полезный результат шага и состояние его исполнения доступны отдельно:

СсылкаЗначение
{request.json}Результат операции
{state.request.status}Статус шага
{state.draft.approval.status}Решение по согласованию
{loop.state}Данные, передаваемые между итерациями

Пропущенный шаг не создаёт результата. Следующий шаг должен учитывать это в условии, прежде чем обращаться к его выходам.

Ошибки и ожидания ​

Ошибка останавливает текущий путь, если операция явно не возвращает её как данные. При on_error: collect ошибка пути возвращается как code, message, step_path. После ожидания используются сохранённые результаты; завершённые действия не повторяются.

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

Поставка плагинов ​

Ядро, блоки и плагины выбираются независимо. Базовый блок означает часть основного инвентаря, а не обязательную зависимость ядра. Руководство по магазину объясняет выбор состава и совместимость.