@gian-tiaga/eda 3.2.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +3 -3
- package/README.md +4 -3
- package/agents/eda-aim-executor/agent.json +1 -2
- package/agents/eda-aim-planner/agent.json +1 -2
- package/agents/eda-aim-verifier/agent.json +1 -2
- package/agents/eda-commit-executor/agent.json +1 -2
- package/agents/eda-merge-worktree-executor/agent.json +1 -2
- package/agents/eda-review-api/agent.json +1 -2
- package/agents/eda-review-architecture/agent.json +1 -2
- package/agents/eda-review-business/agent.json +1 -2
- package/agents/eda-review-code-quality/agent.json +1 -2
- package/agents/eda-review-correctness/agent.json +1 -2
- package/agents/eda-review-database/agent.json +1 -2
- package/agents/eda-review-documentation/agent.json +1 -2
- package/agents/eda-review-frontend/agent.json +1 -2
- package/agents/eda-review-performance/agent.json +1 -2
- package/agents/eda-review-plan-alignment/agent.json +1 -2
- package/agents/eda-review-previous-reviews/agent.json +1 -2
- package/agents/eda-review-references/agent.json +1 -2
- package/agents/eda-review-rules/agent.json +1 -2
- package/agents/eda-review-security/agent.json +1 -2
- package/agents/eda-review-tests/agent.json +1 -2
- package/agents/eda-worktree-executor/agent.json +1 -2
- package/lib/catalog.js +12 -0
- package/lib/renderers/claude-agent.js +0 -1
- package/lib/renderers/claude-skill.js +11 -3
- package/package.json +1 -1
- package/skills/eda-aim/SKILL.md +13 -0
- package/skills/eda-commit/SKILL.md +13 -0
- package/skills/eda-merge-worktree/SKILL.md +13 -0
- package/skills/eda-orhestra/SKILL.md +13 -0
- package/skills/eda-plan/SKILL.md +13 -0
- package/skills/eda-plan-execute/SKILL.md +13 -0
- package/skills/eda-plan-polish/SKILL.md +13 -0
- package/skills/eda-polish/SKILL.md +15 -0
- package/skills/eda-review/SKILL.md +19 -2
- package/skills/eda-review/skill.json +7 -0
- package/skills/eda-worktree/SKILL.md +13 -0
package/MIGRATION.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Миграция на eda 3.
|
|
1
|
+
# Миграция на eda 3.3
|
|
2
2
|
|
|
3
3
|
Версия 3.0 перенесла все рабочие результаты скилов в `docs/artifacts/`; постоянная документация проекта остаётся непосредственно в `docs/`. Версия 3.1 дополнительно переработала проверку плана, ревью кода и циклы полировки. Версия 3.2 обновила commit-flow и расположение проектных Codex-скиллов. В npm 3.0 не публиковалась, поэтому переход с 2.x выполняется сразу на актуальную версию 3.x.
|
|
4
4
|
|
|
@@ -75,7 +75,7 @@ docs/
|
|
|
75
75
|
|
|
76
76
|
## Настройки
|
|
77
77
|
|
|
78
|
-
Версия npm-пакета и версия схемы настроек независимы: в eda 3.
|
|
78
|
+
Версия npm-пакета и версия схемы настроек независимы: в eda 3.3 актуальным остаётся `docs/settings.yaml` с `version: 3`.
|
|
79
79
|
|
|
80
80
|
Установщик по-прежнему сохраняет полный валидный v3 байт-в-байт — кроме случая, когда в файле остались устаревшие ключи: тогда он перезаписывает файл без вопросов и печатает, что именно убрал. Старый, неизвестный или неполный YAML нормализуется: известные валидные значения переносятся, а отсутствующие спрашиваются в TTY или получают defaults без TTY.
|
|
81
81
|
|
|
@@ -97,7 +97,7 @@ docs/
|
|
|
97
97
|
- старые рабочие каталоги исчезли из `docs/`, а файлы находятся в `docs/artifacts/`;
|
|
98
98
|
- `docs/business.md`, `docs/business/`, `docs/references.md`, `docs/references/`, `docs/arch.md` и `docs/rules.md` остались на месте;
|
|
99
99
|
- `docs/settings.yaml` содержит `version: 3`;
|
|
100
|
-
- `eda --version` выводит версию `3.
|
|
100
|
+
- `eda --version` выводит версию `3.3.x`;
|
|
101
101
|
- в `docs/settings.yaml` нет секции `plan-review.agents` и аргумента `threshold N` у шага `eda-polish`;
|
|
102
102
|
- в `.claude/agents/` и `.codex/agents/` не осталось файлов `eda-plan-review-*`;
|
|
103
103
|
- Claude-скиллы установлены в `.claude/skills/`, Codex-скиллы — в `.agents/skills/`, агенты — в `.claude/agents/` и `.codex/agents/`.
|
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ eda update-all ~/Code
|
|
|
56
56
|
| `eda-review` | Оркестрирует отдельные read-only проверки корректности, архитектуры, правил, references, business-правил, плана, качества, тестов, безопасности, производительности, frontend/UI/UX, API, БД, документации и предыдущих ревью. Сохраняет только доказанные дефекты, которые обязательно исправить; косметические и спекулятивные предложения отбрасывает. Любая находка даёт `changes-required`, а чистое ревью — `clean` и 100/100. Без аргументов ревьюит `git diff HEAD` | `docs/artifacts/reviews/` |
|
|
57
57
|
| `eda-fix-by-review` | Применяет все находки из ревью с учётом правил, архитектуры и применимых карточек. Спрашивает только при неоднозначности, конфликте, расширении scope или рискованном действии. В конце ссылается на отчёт прямо в файле ревью | `docs/artifacts/review-fixes/` |
|
|
58
58
|
| `eda-manual-test` | Делает ручную smoke/acceptance-проверку после изменений: основной чеклист строит по выполненной задаче и связанному плану/issue/review/fix-отчёту, затем сверяет фактический diff. Применимая business-карточка может добавить только относящийся к задаче инвариант или сценарий; несвязанные карточки не загружаются. Не правит код, не пишет автотесты и не коммитит | `docs/artifacts/manual-tests/` |
|
|
59
|
-
| `eda-polish` | Оркестрирует доводку изменений: запускает полное `eda-review`, затем `eda-fix-by-review` и повторяет цикл до `clean
|
|
59
|
+
| `eda-polish` | Оркестрирует доводку изменений: запускает полное `eda-review`, затем `eda-fix-by-review` и повторяет цикл до `clean` и отсутствия находок либо до лимита 5 итераций. Все находки исправляются, score остаётся справочным. Каждый шаг идёт в изолированном нативном субагенте. Не коммитит | `docs/artifacts/reviews/`, `docs/artifacts/review-fixes/` |
|
|
60
60
|
| `eda-send-review` | На `sonnet` / `gpt-5.6-terra` отправляет ревью на GitHub PR через `gh` всегда в едином формате: общий комментарий-сводка плюс комментарии к строкам кода. Без явно указанного типа использует `comment`; `approve` и `request-changes` берёт только из контекста текущего вызова. По настройке может скрыть предыдущие сводки eda-send-review и зарезолвить их inline-треды. По умолчанию шлёт все пункты. Claude-модель закрепляется при установке; Codex-модель хранится как рекомендуемый будущий override | (комментарий в PR) |
|
|
61
61
|
| `eda-commit` | Работает как лёгкий оркестратор одного `haiku` / `gpt-5.6-luna` агента: тот сам собирает git-контекст, делит выбранный состав на логические коммиты, пишет сообщения, точечно коммитит и выполняет явно заданные push/PR/merge-действия. С явным контекстом охватывает указанный состав; без контекста берёт все tracked-изменения и содержательные untracked-файлы, кроме очевидных кэшей и локальных служебных артефактов. В Claude Code сам оркестратор закреплён за `haiku`; в Codex остаётся на активной модели сессии из-за отсутствия per-skill override. При вероятном секрете агент блокируется до индексации затронутой группы. После любого push всегда возвращает ссылку — на существующий PR или на его создание — и спрашивает, создавать ли PR, если его нет. Если продолжение не задано, предлагает применимые варианты | (git, опционально GitHub PR) |
|
|
62
62
|
| `eda-worktree` | На `haiku` / `gpt-5.6-luna` создаёт через пакетного агента git worktree рядом с основным проектом в папке `{name}-work-{n}` и одноимённую ветку. Базу берёт из аргумента или спрашивает | соседняя папка `{name}-work-{n}` |
|
|
@@ -114,7 +114,7 @@ eda update-all ~/Code
|
|
|
114
114
|
| `eda-review-documentation` | `haiku`, read-only | `gpt-5.6-luna`, read-only | Проверяет обязательные обновления документации |
|
|
115
115
|
| `eda-review-previous-reviews` | `haiku`, read-only | `gpt-5.6-luna`, read-only | Перепроверяет незакрытые удалённые замечания |
|
|
116
116
|
|
|
117
|
-
Агенты устанавливаются отдельно от скилов. Модели review-агентов в таблице — сбалансированные defaults; `docs/settings.yaml` или прямое указание пользователя может заменить модель конкретной проверки на текущий запуск. `eda-aim` последовательно разделяет согласование, выполнение и независимую проверку, а при необходимости использует установленные скилы только в отдельных изолированных субагентах; основной агент передаёт вопросы и структурированные результаты. `eda-commit` сохраняет исходный запрос и целиком передаёт сбор контекста, выбор файлов, коммит и разрешённое продолжение одному простому агенту. `eda-worktree` и `eda-merge-worktree` передают одному специализированному агенту git-операцию, обрабатывают его вопрос или результат и сами команды не выполняют. `eda-review` параллельно запускает только применимые review-агенты; полный prompt каждой роли хранится в агенте, а скил отвечает за выбор, retry и агрегацию.
|
|
117
|
+
Агенты устанавливаются отдельно от скилов. Модели review-агентов в таблице — сбалансированные defaults; `docs/settings.yaml` или прямое указание пользователя может заменить модель конкретной проверки на текущий запуск. `eda-aim` последовательно разделяет согласование, выполнение и независимую проверку, а при необходимости использует установленные скилы только в отдельных изолированных субагентах; основной агент передаёт вопросы и структурированные результаты. `eda-commit` сохраняет исходный запрос и целиком передаёт сбор контекста, выбор файлов, коммит и разрешённое продолжение одному простому агенту. `eda-worktree` и `eda-merge-worktree` передают одному специализированному агенту git-операцию, обрабатывают его вопрос или результат и сами команды не выполняют. `eda-review` параллельно запускает только применимые review-агенты; полный prompt каждой роли хранится в агенте, а скил отвечает за выбор, retry и агрегацию. В Claude Code установленный `eda-review` всегда выполняется через `context: fork`, в том числе из `eda-polish`. В Codex шаги polish и специализированные review-агенты запускаются с `fork_turns: "none"`, без наследования истории. Все выбранные проверки отправляются одним нативным параллельным пакетом без ручных партий и shell-опроса.
|
|
118
118
|
|
|
119
119
|
Для Claude Code установленные `eda-commit`, `eda-worktree` и `eda-merge-worktree` получают `model: haiku`. В Codex у скилов пока нет отдельного per-skill model override: основной поток остаётся на выбранной пользователем модели, но он выполняет только лёгкую оркестрацию, а содержательная работа `eda-commit` и worktree-операций закреплена за `gpt-5.6-luna`.
|
|
120
120
|
|
|
@@ -451,6 +451,7 @@ discover-automations может запускаться от review, fix-by-revie
|
|
|
451
451
|
- **Простой язык.** Скилы общаются с тобой так, чтобы понял человек без глубоких знаний предмета. Термины — только когда без них нельзя.
|
|
452
452
|
- **Все вопросы — интерактивно.** В Claude Code — через `AskUserQuestion`; в интерактивном Codex — через `request_user_input` или блокирующий вопрос в чат. В `codex exec` и других неинтерактивных запусках скил не имитирует диалог: если без ответа нельзя безопасно продолжать, он завершает работу со статусом `blocked: нужен ответ пользователя`.
|
|
453
453
|
- **Проверки — через субагентов.** `eda-review` запускает установленных read-only агентов нативным механизмом Claude/Codex. Если субагенты недоступны, review останавливается: CLI-fallback, кросс-проверки соседним провайдером и подмена ролей главным агентом не используются.
|
|
454
|
+
- **Технические остановки обрабатываются по причине.** Оркестраторы ждут свободный слот при лимите параллельности, запрашивают недостающее разрешение, один раз продолжают агента после временной API-ошибки и без бессмысленных retry останавливаются при лимите глубины, исчерпанной квоте или неизвестном сбое.
|
|
454
455
|
- **Повторяемые роли — в пакетных агентах.** Скилы управляют процессом, а стабильные изолированные роли получают собственный prompt, модель и доступ. Полные review-prompts не дублируются в оркестраторе.
|
|
455
456
|
- **Артефакты по папкам.** Исследования отдельно, планы отдельно, ревью отдельно. Между файлами — ссылки. Через месяц легко найти, кто что когда решал.
|
|
456
457
|
- **Границы между скилами жёсткие.** `plan-execute` только управляет субагентами и не коммитит — это работа `commit`. `review` не правит код — это `fix-by-review`. Никаких размытых ответственностей.
|
|
@@ -486,7 +487,7 @@ eda update-all ~/Code
|
|
|
486
487
|
|
|
487
488
|
## 📁 Структура и установка компонентов
|
|
488
489
|
|
|
489
|
-
Исходники скилов лежат в `skills/<skill>/SKILL.md`. Дополнительные ресурсы скила можно хранить рядом; `skill.json` содержит только платформенные настройки и в проект пользователя не копируется. `models.codex` можно хранить как зарезервированную настройку для будущего per-skill override, но текущий Codex renderer её не добавляет в `SKILL.md`.
|
|
490
|
+
Исходники скилов лежат в `skills/<skill>/SKILL.md`. Дополнительные ресурсы скила можно хранить рядом; `skill.json` содержит только платформенные настройки и в проект пользователя не копируется. Поля `claude.context: fork` и `claude.agent` renderer добавляет только во front matter Claude-копии скила. `models.codex` можно хранить как зарезервированную настройку для будущего per-skill override, но текущий Codex renderer её не добавляет в `SKILL.md`.
|
|
490
491
|
|
|
491
492
|
Исходники агентов лежат в `agents/<agent>/agent.json` и `prompt.md`. Установщик рендерит единый агентный контракт в нативный формат выбранной среды.
|
|
492
493
|
|
package/lib/catalog.js
CHANGED
|
@@ -62,6 +62,18 @@ function validateSkillConfig(skillName, config) {
|
|
|
62
62
|
if (config.models && typeof config.models !== 'object') {
|
|
63
63
|
throw new Error(`Скил ${skillName}: models должен быть объектом.`);
|
|
64
64
|
}
|
|
65
|
+
if (config.claude && (typeof config.claude !== 'object' || Array.isArray(config.claude))) {
|
|
66
|
+
throw new Error(`Скил ${skillName}: claude должен быть объектом.`);
|
|
67
|
+
}
|
|
68
|
+
if (config.claude?.context && config.claude.context !== 'fork') {
|
|
69
|
+
throw new Error(`Скил ${skillName}: claude.context поддерживает только fork.`);
|
|
70
|
+
}
|
|
71
|
+
if (config.claude?.agent && (typeof config.claude.agent !== 'string' || !config.claude.agent.trim())) {
|
|
72
|
+
throw new Error(`Скил ${skillName}: claude.agent должен быть непустой строкой.`);
|
|
73
|
+
}
|
|
74
|
+
if (config.claude?.agent && config.claude.context !== 'fork') {
|
|
75
|
+
throw new Error(`Скил ${skillName}: claude.agent требует claude.context fork.`);
|
|
76
|
+
}
|
|
65
77
|
}
|
|
66
78
|
|
|
67
79
|
function validateAgent(directoryName, agent, prompt) {
|
|
@@ -17,7 +17,6 @@ export function renderClaudeAgent(agent, prompt) {
|
|
|
17
17
|
lines.push(`model: ${agent.models.claude}`);
|
|
18
18
|
if (agent.reasoning?.claude) lines.push(`effort: ${agent.reasoning.claude}`);
|
|
19
19
|
if (agent.access === 'read-only') lines.push('permissionMode: plan');
|
|
20
|
-
if (agent.maxTurns) lines.push(`maxTurns: ${agent.maxTurns}`);
|
|
21
20
|
|
|
22
21
|
lines.push('---', '', prompt.trimEnd(), '');
|
|
23
22
|
return lines.join('\n');
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
export function renderClaudeSkill(content, config = {}) {
|
|
2
2
|
const model = config.models?.claude;
|
|
3
|
-
|
|
3
|
+
const context = config.claude?.context;
|
|
4
|
+
const agent = config.claude?.agent;
|
|
5
|
+
const fields = [
|
|
6
|
+
model && `model: ${model}`,
|
|
7
|
+
context && `context: ${context}`,
|
|
8
|
+
agent && `agent: ${agent}`
|
|
9
|
+
].filter(Boolean);
|
|
10
|
+
|
|
11
|
+
if (fields.length === 0) return content;
|
|
4
12
|
|
|
5
13
|
const closingMarker = content.indexOf('\n---', 4);
|
|
6
14
|
if (!content.startsWith('---\n') || closingMarker === -1) {
|
|
7
|
-
throw new Error('Не удалось добавить Claude
|
|
15
|
+
throw new Error('Не удалось добавить настройки Claude: некорректный front matter скила.');
|
|
8
16
|
}
|
|
9
17
|
|
|
10
|
-
return `${content.slice(0, closingMarker)}\
|
|
18
|
+
return `${content.slice(0, closingMarker)}\n${fields.join('\n')}${content.slice(closingMarker)}`;
|
|
11
19
|
}
|
package/package.json
CHANGED
package/skills/eda-aim/SKILL.md
CHANGED
|
@@ -43,6 +43,19 @@ aim:
|
|
|
43
43
|
- Не копируй системный промпт агента в сообщение с заданием.
|
|
44
44
|
- Если нужный агент или нативные субагенты недоступны, остановись: `blocked: нужен установленный агент <имя>`. Не выполняй его роль основным агентом и не заменяй отдельным CLI-процессом.
|
|
45
45
|
|
|
46
|
+
## Технические остановки субагентов
|
|
47
|
+
|
|
48
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
49
|
+
|
|
50
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
51
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
52
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
53
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
54
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
55
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
56
|
+
|
|
57
|
+
Ожидание слота и один технический retry не расходуют лимиты содержательных итераций или циклов достижения цели.
|
|
58
|
+
|
|
46
59
|
## Вопросы и автоматический режим
|
|
47
60
|
|
|
48
61
|
Агент может вернуть один конкретный `question`, 1–3 взаимоисключающих `options` и `recommended_answer`.
|
|
@@ -31,6 +31,19 @@ description: 'Коммитит выбранные или все незакомм
|
|
|
31
31
|
- Передавай агенту только рабочую директорию, данные текущего запуска и требуемый формат результата.
|
|
32
32
|
- Если custom agent или инструмент субагентов недоступен, остановись: `blocked: нужен установленный агент <имя>`; не выполняй его роль основным агентом и не заменяй отдельным CLI-процессом.
|
|
33
33
|
|
|
34
|
+
## Технические остановки субагентов
|
|
35
|
+
|
|
36
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
37
|
+
|
|
38
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
39
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй работу сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
40
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
41
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
42
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
43
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
44
|
+
|
|
45
|
+
Ожидание слота и один технический retry не меняют `$REQUESTED_ACTIONS` и не разрешают повторять уже выполненные git/GitHub-действия без сверки текущего состояния.
|
|
46
|
+
|
|
34
47
|
## Интерактивные вопросы
|
|
35
48
|
|
|
36
49
|
Когда агент вернул `blocked`, задай его один конкретный вопрос пользователю.
|
|
@@ -25,6 +25,19 @@ description: 'Мержит ветку из соседнего git worktree в т
|
|
|
25
25
|
- Передавай агенту только рабочую директорию, данные текущего запуска и требуемый формат результата.
|
|
26
26
|
- Если custom agent или инструмент субагентов недоступен, остановись: `blocked: нужен установленный агент eda-merge-worktree-executor`. Не выполняй его роль основным агентом и не заменяй отдельным CLI-процессом.
|
|
27
27
|
|
|
28
|
+
## Технические остановки субагентов
|
|
29
|
+
|
|
30
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
31
|
+
|
|
32
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
33
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй работу сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
34
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
35
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
36
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
37
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
38
|
+
|
|
39
|
+
Ожидание слота и один технический retry не разрешают повторять уже выполненный merge без сверки текущего состояния.
|
|
40
|
+
|
|
28
41
|
## Интерактивные вопросы
|
|
29
42
|
|
|
30
43
|
Когда агент вернул `blocked`, задай его один конкретный вопрос пользователю через общий паттерн `AskUserQuestion`.
|
|
@@ -110,6 +110,19 @@ orhestra:
|
|
|
110
110
|
5. Каждый повтор шага и каждый `on_failure.skill` считай новым вызовом: запускай его в новом изолированном субагенте с полным актуальным входом.
|
|
111
111
|
6. Если чистый контекст, субагент этапа или нужная составному скилу вложенная делегация недоступны, остановись с `blocked: недоступна изоляция этапа`. Не выполняй этап основным агентом и не вводи новый CLI-fallback, которого нет в инструкции вызываемого скилла.
|
|
112
112
|
|
|
113
|
+
## Технические остановки субагентов
|
|
114
|
+
|
|
115
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
116
|
+
|
|
117
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
118
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
119
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
120
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
121
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
122
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
123
|
+
|
|
124
|
+
Ожидание слота и один технический retry не расходуют лимиты содержательных итераций или QA-циклов.
|
|
125
|
+
|
|
113
126
|
## Выполнение и QA-цикл
|
|
114
127
|
|
|
115
128
|
Веди внутренний журнал: нормализованные шаги, текущий id, итоговый ввод, статус, созданные артефакты, review score и число QA-циклов. Отдельный orchestration-файл не создавай.
|
package/skills/eda-plan/SKILL.md
CHANGED
|
@@ -64,6 +64,19 @@ description: 'Создаёт понятный исполнимый план ре
|
|
|
64
64
|
14. Если нужны пакеты, библиотеки, CLI или сервисы, а версия не указана в контексте или lock-файлах, найди последнюю стабильную версию через context7 или web search. Не пиши `latest` без конкретной версии и источника.
|
|
65
65
|
15. Финальный план прост, исполним и без альтернатив вида «выбрать», «решить», «можно так или так», «предпочтительно».
|
|
66
66
|
|
|
67
|
+
## Технические остановки субагентов
|
|
68
|
+
|
|
69
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
70
|
+
|
|
71
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
72
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
73
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
74
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
75
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
76
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
77
|
+
|
|
78
|
+
Ожидание слота и один технический retry не расходуют лимиты содержательных итераций.
|
|
79
|
+
|
|
67
80
|
## Этапы
|
|
68
81
|
|
|
69
82
|
### 1. Собрать контекст
|
|
@@ -84,6 +84,19 @@ current_phase: <номер>
|
|
|
84
84
|
|
|
85
85
|
В Codex используй `spawn_agent` с `fork_turns: "none"`, в Claude Code — новый `Agent` с самодостаточным сообщением. Если изоляция или субагенты недоступны, остановись: `blocked: недоступно изолированное выполнение`. Работу основным агентом не делай и CLI-fallback не добавляй.
|
|
86
86
|
|
|
87
|
+
#### Технические остановки субагентов
|
|
88
|
+
|
|
89
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
90
|
+
|
|
91
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
92
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
93
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
94
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
95
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
96
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
97
|
+
|
|
98
|
+
Ожидание слота и один технический retry не считаются попыткой исправления фазы и не расходуют её лимит сходимости.
|
|
99
|
+
|
|
87
100
|
Каждому исполнителю фазы передай: рабочую директорию, `$PLAN_FILE`, номер и полный текст фазы, краткие результаты завершённых фаз, пути к `docs/rules.md`, `docs/arch.md`, `docs/business.md` и `docs/references.md`, ограничения пользователя, критерии проверки фазы и запрет коммитить и менять план и журнал.
|
|
88
101
|
|
|
89
102
|
Требуй YAML-результат:
|
|
@@ -33,6 +33,19 @@ description: 'Доводит план циклом ревью и исправл
|
|
|
33
33
|
4. Основной агент не меняет содержание плана. После `ready` он может обновить только front matter: `status`, `plan_review`, `plan_review_fix`.
|
|
34
34
|
5. Не запускай проверки проекта и не коммить.
|
|
35
35
|
|
|
36
|
+
## Технические остановки субагентов
|
|
37
|
+
|
|
38
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
39
|
+
|
|
40
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
41
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
42
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
43
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
44
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
45
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
46
|
+
|
|
47
|
+
Ожидание слота и один технический retry не расходуют `$LIMIT` и не считаются новой review-итерацией.
|
|
48
|
+
|
|
36
49
|
## Снапшот лучшей версии
|
|
37
50
|
|
|
38
51
|
Перед первым fix скопируй план в `docs/artifacts/plan-snapshots/{slug}.md` и запомни его score как лучший.
|
|
@@ -16,12 +16,27 @@ description: 'Итеративно ревьюит и исправляет изм
|
|
|
16
16
|
## Правила
|
|
17
17
|
|
|
18
18
|
1. Каждый вызов `eda-review` и `eda-fix-by-review` запускай отдельным изолированным субагентом. Основной агент не делает их работу.
|
|
19
|
+
- В Claude Code вызывай установленный `eda-review` именно через `Skill`: его отрендеренная копия содержит `context: fork` и сама создаёт изолированный review-runner. Не читай инструкцию `eda-review` в текущий контекст, не воспроизводи её процедуру самостоятельно и не запускай `eda-review-*` агентов напрямую из полировщика.
|
|
20
|
+
- В Codex каждый вызов `eda-review` и `eda-fix-by-review` запускай через `spawn_agent` с `fork_turns: "none"`. Не оставляй `fork_turns` по умолчанию и не используй `"all"`: субагент получает только самодостаточное task-сообщение и явно указанные пути к артефактам.
|
|
19
21
|
2. Если нативные субагенты недоступны, остановись; не заменяй шаги CLI-процессами.
|
|
20
22
|
3. Успех требует одновременно: полный review со статусом `reviewed` или `reviewed-with-warnings`, `result: clean` и ноль находок. Score — только справочное число, условием завершения он не является.
|
|
21
23
|
4. Любая находка обязательно исправляется. Отклонить находку может только `eda-fix-by-review` и только при её фактической неверности.
|
|
22
24
|
5. Не коммить и не отправляй ревью.
|
|
23
25
|
6. Останавливайся при повторном сбое обязательной проверки review, блокере fix-агента, несокращении числа открытых находок за полный круг или достижении лимита.
|
|
24
26
|
|
|
27
|
+
## Технические остановки субагентов
|
|
28
|
+
|
|
29
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
30
|
+
|
|
31
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
32
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй этап сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
33
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
34
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
35
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
36
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
37
|
+
|
|
38
|
+
Ожидание слота и один технический retry не расходуют `$LIMIT` и не считаются новой polish-итерацией.
|
|
39
|
+
|
|
25
40
|
## Вопросы
|
|
26
41
|
|
|
27
42
|
Если target неоднозначен, передай управление первому `eda-review`: он задаст один конкретный вопрос по правилам своей среды. Если шаг вернул `blocked`, основной агент повторяет только этот вопрос и после ответа продолжает тот же шаг.
|
|
@@ -96,9 +96,26 @@ description: 'Проводит полное read-only ревью diff, ветк
|
|
|
96
96
|
- `previous_reviews` → `eda-review-previous-reviews`;
|
|
97
97
|
- остальные → `eda-review-<check>`.
|
|
98
98
|
|
|
99
|
-
В Claude Code запускай установленный custom agent через `Agent` tool. В Codex
|
|
99
|
+
В Claude Code запускай установленный custom agent через `Agent` tool. Установленная Claude-копия самого `eda-review` выполняется с `context: fork`, поэтому review-оркестрация не должна оставаться в контексте вызвавшего `eda-polish` или другого скила. В Codex каждого установленного custom agent запускай через `spawn_agent` с `fork_turns: "none"`; не оставляй `fork_turns` по умолчанию и не передавай историю review-runner. Передай выбранную модель как runtime override. Если хост не умеет применить выбранную модель или нативные субагенты недоступны, остановись: не выполняй роли главным агентом и не создавай отдельные CLI-процессы.
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
### Технические остановки субагентов
|
|
102
|
+
|
|
103
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
104
|
+
|
|
105
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
106
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй проверку сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
107
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
108
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
109
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
110
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
111
|
+
|
|
112
|
+
Ожидание слота и один технический retry не считаются повторной содержательной проверкой агента.
|
|
113
|
+
|
|
114
|
+
Сначала сформируй весь набор выбранных проверок, затем отправь все вызовы одним параллельным пакетом в одном ответе ассистента. Не дели проверки заранее на волны, партии или последовательные группы и не жди завершения части агентов перед запуском остальных. Если хост ограничивает concurrency, разреши нативному механизму поставить лишние задачи в очередь; повторный запуск допустим только после фактической ошибки лимита по правилам технических остановок выше.
|
|
115
|
+
|
|
116
|
+
Ожидай результаты только нативным механизмом субагентов и их уведомлениями о завершении; в Codex используй `wait_agent`. Не используй Bash, shell-циклы, `sleep`, опрос файлов или артефактов и фиксированные таймауты для ожидания агентов. После отправки всего пакета собирай ответы по мере нативного завершения.
|
|
117
|
+
|
|
118
|
+
Каждому агенту передай только:
|
|
102
119
|
|
|
103
120
|
```text
|
|
104
121
|
Рабочая директория: <cwd>
|
|
@@ -27,6 +27,19 @@ description: 'Создаёт новый соседний git worktree и одн
|
|
|
27
27
|
- Передавай агенту только рабочую директорию, данные текущего запуска и требуемый формат результата.
|
|
28
28
|
- Если custom agent или инструмент субагентов недоступен, остановись: `blocked: нужен установленный агент eda-worktree-executor`. Не выполняй его роль основным агентом и не заменяй отдельным CLI-процессом.
|
|
29
29
|
|
|
30
|
+
## Технические остановки субагентов
|
|
31
|
+
|
|
32
|
+
Техническую ошибку инструмента субагентов не смешивай со статусами `failed` и `blocked` содержательного контракта. Сохрани полный исходный текст ошибки и обработай её по причине:
|
|
33
|
+
|
|
34
|
+
- лимит параллельности или отсутствие свободного слота — дождись уже запущенного этим workflow агента, при необходимости закрой завершённые потоки и повтори тот же запуск; если управляемых активных агентов нет, заверши `blocked: заняты слоты субагентов`;
|
|
35
|
+
- лимит глубины вложения — не повторяй запуск и не выполняй работу сам; заверши `blocked: достигнут лимит глубины субагентов`, указав наблюдаемую и требуемую глубину;
|
|
36
|
+
- исчерпана usage-квота — не делай автоматических повторов; заверши `blocked: исчерпана квота`, сохрани время reset или условие продолжения, если хост его сообщил;
|
|
37
|
+
- не хватает разрешения — запроси одно конкретное разрешение по правилам текущей среды и после ответа продолжи того же агента; в неинтерактивной среде заверши `blocked: нужно разрешение пользователя`;
|
|
38
|
+
- временная API-, server-, overload- или network-ошибка — один раз продолжи того же агента; если resume недоступен, один раз запусти ту же роль с исходным входом, полным частичным результатом и требованием сначала сверить текущее состояние; повторный такой сбой заверши как `blocked` с исходной ошибкой;
|
|
39
|
+
- неизвестная техническая ошибка — не угадывай причину и не зацикливай retry; заверши `blocked: техническая ошибка субагента` с полным исходным текстом.
|
|
40
|
+
|
|
41
|
+
Ожидание слота и один технический retry не разрешают создавать второй worktree без сверки текущего состояния.
|
|
42
|
+
|
|
30
43
|
## Интерактивные вопросы
|
|
31
44
|
|
|
32
45
|
Когда агент вернул `blocked`, задай его один конкретный вопрос пользователю через общий паттерн `AskUserQuestion`.
|