Шаблоны
Шаблоны позволяют использовать динамический контент в директивах воркфлоу, условиях и других полях. Используйте шаблонные переменные для доступа к контексту выполнения, результатам шагов и параметрам воркфлоу.
Базовый синтаксис
Заголовок раздела «Базовый синтаксис»Шаблонные переменные используют двойные фигурные скобки:
{{variableName}}Переменные разрешаются во время выполнения из контекста выполнения.
Доступные переменные
Заголовок раздела «Доступные переменные»Контекст выполнения
Заголовок раздела «Контекст выполнения»{{executionId}} - ID текущего выполнения{{workflowId}} - Выполняемый воркфлоу{{currentNodeId}} - ID текущего узлаПользовательские переменные
Заголовок раздела «Пользовательские переменные»Переменные, установленные во время выполнения:
{{projectName}} - Пользовательская переменная{{results}} - Вывод предыдущего шага{{count}} - Числовая переменнаяРезультаты узлов
Заголовок раздела «Результаты узлов»Доступ к результатам предыдущих шагов:
{{input}} - Ввод последнего шага{{nodeStates.nodeId.result}} - Результат конкретного узлаУстановка переменных
Заголовок раздела «Установка переменных»Переменные могут быть установлены в определениях узлов:
{ "id": "set-vars", "type": "step", "directive": "Инициализировать проект", "completionCondition": "Проект инициализирован", "setVariables": { "projectName": "my-project", "environment": "development" }}Или динамически из ответа агента через inputSchema:
{ "inputSchema": { "type": "object", "properties": { "projectName": { "type": "string" } } }}Значения ответа агента автоматически добавляются в контекст.
Условные шаблоны
Заголовок раздела «Условные шаблоны»Используйте условные блоки для включения или исключения контента на основе значений контекста:
{{#if variable}}Контент если истина{{else}}Контент если ложь{{/if}}{{#if variable}}Контент если истина{{/if}}Ложные значения: null, undefined, false, 0, "", "нет", "no"
Примеры
Заголовок раздела «Примеры»{{#if has_file_access}}Сохранить в ./output.md{{else}}Вернуть результат в ответе{{/if}}{{#if approved}}Продолжаем деплой{{else}}Ожидаем подтверждения{{/if}}Условные шаблоны обрабатываются в полях directive и completionCondition узлов agent-directive.
Шаблоны Unless
Заголовок раздела «Шаблоны Unless»Используйте {{#unless}} для обратного условия - контент показывается когда значение ложное:
{{#unless isLoggedIn}}Пожалуйста, войдите{{/unless}}{{#unless hasError}}Успех!{{else}}Произошла ошибка{{/unless}}Шаблоны сравнения на равенство
Заголовок раздела «Шаблоны сравнения на равенство»Используйте {{#eq}} для сравнения переменной со строковым значением:
{{#eq variable 'value'}}Контент если равно{{/eq}}{{#eq variable 'value'}}Контент если равно{{else}}Контент если не равно{{/eq}}Пример:
{{#eq upload_target 'staging'}}Деплой на staging сервер{{/eq}}{{#eq upload_target 'production'}}Деплой на production сервер{{/eq}}Шаблоны сравнения на неравенство
Заголовок раздела «Шаблоны сравнения на неравенство»Используйте {{#neq}} для показа контента когда переменная НЕ равна значению:
{{#neq variable 'value'}}Контент если не равно{{/neq}}{{#neq variable 'value'}}Контент если не равно{{else}}Контент если равно{{/neq}}Пример:
{{#neq test_info 'skip'}}Запусти тесты: {{test_command}}{{/neq}}Шаблоны итерации
Заголовок раздела «Шаблоны итерации»Используйте {{#each}} для итерации по массивам:
{{#each items}}{{this}}, {{/each}}{{#each users}}{{name}} ({{age}})\n{{/each}}{{#each steps}}{{@index}}: {{action}}{{/each}}Внутри {{#each}}:
{{this}}- текущий элемент (сериализуется для объектов){{this.fieldName}}- доступ к полю текущего объекта{{this.nested.path}}- доступ к вложенным полям{{@index}}- текущий индекс (начиная с 0){{fieldName}}- сокращение для{{this.fieldName}}
Поддержка условий внутри циклов:
{{#each tasks}}{{#if done}}[x]{{else}}[ ]{{/if}} {{name}}\n{{/each}}Примеры
Заголовок раздела «Примеры»Динамическая директива
Заголовок раздела «Динамическая директива»{ "directive": "Реализуй фичу {{featureName}} в проекте {{projectName}}", "completionCondition": "Фича {{featureName}} реализована и протестирована"}Условный переход
Заголовок раздела «Условный переход»{ "transitions": [ { "condition": "{{testsPassed}} === true", "target": "deploy" }, { "condition": "{{retryCount}} < 3", "target": "fix-and-retry" }, { "target": "escalate" } ]}Цикл со счетчиком
Заголовок раздела «Цикл со счетчиком»{ "type": "loop", "directive": "Итерация {{iterationCount}}: Улучши решение", "loopCondition": "{{qualityScore}} < 8 && {{iterationCount}} < 5"}Шаблон в описании Input Schema
Заголовок раздела «Шаблон в описании Input Schema»Помогите агентам понять ожидаемый формат:
{ "inputSchema": { "type": "object", "properties": { "implementation": { "type": "string", "description": "Код для {{featureName}} на {{language}}" } } }}Экранирование
Заголовок раздела «Экранирование»Для вывода литеральных фигурных скобок используйте двойное экранирование:
\\{{notAVariable}} - Выводит: {{notAVariable}}Лучшие практики
Заголовок раздела «Лучшие практики»- Описательные имена — Используйте понятные имена переменных
- Значения по умолчанию — Предоставляйте fallback для опциональных переменных
- Согласованность типов — Сохраняйте согласованность типов переменных при использовании
- Документация — Документируйте пользовательские переменные в описании воркфлоу
Отладка
Заголовок раздела «Отладка»Проверьте значения переменных в контексте выполнения:
Агент: Какие текущие переменные контекста?[вызывает get_execution_context]