@gian-tiaga/eda 3.4.0 → 3.6.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 +2 -0
- package/README.md +32 -15
- package/agents/eda-commit-executor/agent.json +4 -4
- package/agents/eda-commit-executor/prompt.md +12 -3
- package/lib/install.js +91 -8
- package/package.json +1 -1
- package/skills/eda-commit/SKILL.md +2 -2
- package/skills/eda-commit/skill.json +2 -1
- package/skills/eda-manual-test/SKILL.md +110 -54
- package/skills/eda-orhestra/SKILL.md +16 -12
- package/skills/eda-polish/SKILL.md +2 -1
- package/skills/eda-prepare-ai/SKILL.md +20 -7
- package/skills/eda-review/SKILL.md +41 -16
- package/skills/eda-review/references/review-matrix.md +70 -0
package/MIGRATION.md
CHANGED
|
@@ -87,6 +87,8 @@ docs/
|
|
|
87
87
|
|
|
88
88
|
- **Удалены двенадцать агентов `eda-plan-review-*`.** Проверку плана целиком выполняет один субагент по фиксированному чек-листу. `eda update` стирает файлы этих агентов из `.claude/agents/` и `.codex/agents/`.
|
|
89
89
|
- **Секция `plan-review.agents` больше не читается.** Начиная с 3.1.1 `eda update` находит её в готовом файле настроек и убирает вместе с другими устаревшими ключами — `review-check`, `review.strict`, `review.include_code_quality`. Дефолт `plan-review.threshold` — `100`, `plan-polish.limit` — `2`.
|
|
90
|
+
- **У `eda-review` появился режим исполнения.** `review.execution` принимает `subagents` или `single`; default `subagents` сохраняет прежнее поведение. В `single` все выбранные проверки выполняет один review-runner, поэтому модели отдельных `review.agents` не применяются.
|
|
91
|
+
- **У `eda-orhestra` появился режим исполнения.** `orhestra.execution` принимает `subagents`, `single` или `single_propagated`; default `subagents` сохраняет прежнее поведение. `single` выполняет верхние этапы текущим агентом, а `single_propagated` дополнительно передаёт `single` совместимым execute/review-этапам.
|
|
90
92
|
- **У `eda-polish` больше нет порога.** Цикл завершается только при нуле находок и останавливается досрочно, если за круг число открытых находок не сократилось. Аргумент вида `args: "threshold 90 limit 2"` в шаге оркестратора `eda update` приводит к виду `args: "limit 2"`.
|
|
91
93
|
- **Формат ревью дополнен.** У каждой находки появилось поле `repro` — чем проблема воспроизводится, — а в отчёт добавлен раздел «Отклонено» с причинами отклонения. `eda-fix-by-review` может отклонить находку, но только фактически неверную и с обоснованием в отчёте. Старые файлы ревью читаются как есть.
|
|
92
94
|
|
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ eda update-all ~/Code
|
|
|
41
41
|
|
|
42
42
|
| Скил | Что делает | Куда складывает |
|
|
43
43
|
|---|---|---|
|
|
44
|
-
| `eda-orhestra` | Выполняет настраиваемую цепочку `eda-*`-скилов.
|
|
44
|
+
| `eda-orhestra` | Выполняет настраиваемую цепочку `eda-*`-скилов. В `subagents` каждый этап получает чистый контекст, в `single` этапы выполняет текущий агент, а `single_propagated` дополнительно передаёт `single` в совместимые execute/review-этапы. По умолчанию: план без проверок → полировка плана → выполнение → автономное ревью и исправления → ручные тесты. Если QA нашёл баг, оркестра запускает fix и повторяет только ручной тест. В `orhestra.steps` шаги можно переставлять, отключать и снабжать `args`. Не коммитит | Артефакты включённых скилов |
|
|
45
45
|
| `eda-aim` | Сначала через отдельного агента-планировщика согласует с человеком одну или несколько простых проверяемых целей, затем передаёт их агентам-исполнителям и повторяет работу до независимого подтверждения агентом-проверяющим. При необходимости использует установленные скилы в отдельных изолированных субагентах. В `automatic` отвечает на безопасные рабочие вопросы самостоятельно, в `manual` передаёт их человеку; режим задаётся через `aim.mode` или текущий вызов. Точный список новых целей человек подтверждает всегда | `docs/artifacts/aims/` и артефакты задействованных скилов |
|
|
46
46
|
| `eda-new-project` | Помогает стартовать новый проект: собирает и согласует требования, функциональность и границы, ограничения и архитектурные драйверы, сравнивает варианты основного стека и фиксирует выбранные компоненты с актуальными стабильными версиями. Не проектирует архитектуру, правила, проверки, AI-скилы или MCP; сохраняет подтверждённый стартовый бриф и всегда без дополнительного вопроса запускает полный технический bootstrap через `eda-prepare-ai` | `docs/artifacts/project-starts/`, затем артефакты `eda-prepare-ai` |
|
|
47
47
|
| `eda-business` | Совместно с человеком описывает целевое поведение проекта по тематическим карточкам: сложные темы фиксирует подробно, но без шума, соседних модулей и привязки к текущему коду. Может закрепить значимый механизм вроде JWT или серверного хранения токенов, но не язык, библиотеку или конкретную СУБД. `about` содержит лишь короткое описание проекта и основные возможности | `docs/business.md`, `docs/business/` |
|
|
@@ -55,13 +55,13 @@ eda update-all ~/Code
|
|
|
55
55
|
| `eda-fix` | Делает обычные фиксы по короткому контексту, баг-репорту или плану. Перед правками читает правила, архитектуру и только применимые карточки, добавляет нужные тесты, прогоняет проверки и сохраняет историю правок | `docs/artifacts/fixes/` |
|
|
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
|
-
| `eda-manual-test` | Делает ручную
|
|
58
|
+
| `eda-manual-test` | Делает ручную проверку после изменений. По умолчанию проверка полная: разбирает план или другой артефакт по разделам, дополняет его фактическим `git diff HEAD` и закрывает матрицу областей — API, база данных, консольные команды, интерфейс, алгоритмы, фон и интеграции, права и роли, конфигурация, логи, регрессии рядом. Область нельзя закрыть чтением кода или зелёными автотестами; незакрытая область даёт `blocked`. Быстрый smoke включается настройкой `manual-test.depth` или словом в запросе. Применимая business-карточка может добавить только относящийся к задаче инвариант или сценарий. Не правит код, не пишет автотесты и не коммитит | `docs/artifacts/manual-tests/` |
|
|
59
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
|
-
| `eda-commit` | Работает как лёгкий оркестратор одного `
|
|
61
|
+
| `eda-commit` | Работает как лёгкий оркестратор одного `sonnet` / `gpt-5.6-terra` агента: тот сам собирает git-контекст, делит выбранный состав на логические коммиты, пишет сообщения и тексты PR по исходному запросу и фактическому diff, точечно коммитит и выполняет явно заданные push/PR/merge-действия. Для PR использует шаблон репозитория, отражает все группы изменений и указывает только реально выполненные проверки. С явным контекстом охватывает указанный состав; без контекста берёт все tracked-изменения и содержательные untracked-файлы, кроме очевидных кэшей и локальных служебных артефактов. В Claude Code сам оркестратор закреплён за `sonnet`; в 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}` |
|
|
63
63
|
| `eda-merge-worktree` | На `haiku` / `gpt-5.6-luna` мержит через пакетного агента ветку из соседнего worktree в текущую ветку. Принимает номер `1`, короткое имя `work-1` или полное имя `{name}-work-1`. Worktree и ветку после merge не удаляет | (git) |
|
|
64
|
-
| `eda-prepare-ai` | Выполняет технический bootstrap нового или существующего проекта: проектирует архитектуру, строгие правила и профиль инструментов, проходит полный каталог автоматических проверок, подбирает применимые AI-скилы, роли и MCP, затем создаёт AI-документацию. Подтверждённые требования, стек и архитектурные драйверы из `eda-new-project` принимает как обязательный вход и не переоткрывает без обнаруженного конфликта. Для пустого проекта не выдумывает reference-карточки и не выдаёт неустановленные инструменты за доступные | `docs/rules.md`, `docs/arch.md`, `docs/references.md`, `docs/references/`, `AGENTS.md`, `CLAUDE.md` |
|
|
64
|
+
| `eda-prepare-ai` | Выполняет технический bootstrap нового или существующего проекта: проектирует архитектуру, строгие правила и профиль инструментов, проходит полный каталог автоматических проверок, подбирает применимые AI-скилы, роли и MCP, затем создаёт AI-документацию. Один факт хранит у одного владельца: `docs/rules.md` содержит рабочие действия, запреты и команды проверок, а `docs/arch.md` — топологию исходного кода, ownership, зависимости и потоки без рабочих инструкций. Подтверждённые требования, стек и архитектурные драйверы из `eda-new-project` принимает как обязательный вход и не переоткрывает без обнаруженного конфликта. Для пустого проекта не выдумывает reference-карточки и не выдаёт неустановленные инструменты за доступные | `docs/rules.md`, `docs/arch.md`, `docs/references.md`, `docs/references/`, `AGENTS.md`, `CLAUDE.md` |
|
|
65
65
|
| `eda-discover-automations` | Проводит baseline gap-аудит проекта даже без истории, а при наличии анализирует ревью, планы и фиксы. Не ограничивает число предложений: проверяет тесты/e2e, стиль, статанализ, границы модулей, конфиги/IaC, API/БД, security/supply chain, performance, release, эксплуатацию, browser MCP и MCP стека. Для каждой идеи даёт команду, контур запуска и приоритет; ничего не внедряет | `docs/artifacts/automations/` |
|
|
66
66
|
|
|
67
67
|
### Структура `docs/`
|
|
@@ -95,7 +95,7 @@ eda update-all ~/Code
|
|
|
95
95
|
| `eda-aim-planner` | `sonnet`, workspace-write | `gpt-5.6-terra`, workspace-write | Задаёт вопросы, формулирует простой проверяемый список и создаёт файл только после подтверждения человека |
|
|
96
96
|
| `eda-aim-executor` | `opus`, workspace-write | `gpt-5.6-sol`, workspace-write | Выполняет назначенные пункты, при необходимости запрашивает установленные скилы для запуска в изолированных субагентах и дополняет общий журнал |
|
|
97
97
|
| `eda-aim-verifier` | `opus`, workspace-write | `gpt-5.6-sol`, workspace-write | Независимо проверяет каждый критерий, отмечает подтверждённые цели и возвращает пробелы на новый круг выполнения |
|
|
98
|
-
| `eda-commit-executor` | `
|
|
98
|
+
| `eda-commit-executor` | `sonnet` | `gpt-5.6-terra` | Собирает git-контекст, пишет сообщения коммитов и PR по запросу и фактическим изменениям, делит выбранный scope на логические коммиты и выполняет явно разрешённые push/PR/merge-действия |
|
|
99
99
|
| `eda-worktree-executor` | `haiku` | `gpt-5.6-luna` | Создаёт соседний worktree и одноимённую ветку, не изменяя файлы проекта |
|
|
100
100
|
| `eda-merge-worktree-executor` | `haiku` | `gpt-5.6-luna` | Мержит ветку из соседнего worktree в текущую без cleanup и ручного разрешения конфликтов |
|
|
101
101
|
| `eda-review-correctness` | `sonnet`, read-only | `gpt-5.6-terra`, read-only | Проверяет функциональную корректность и крайние случаи |
|
|
@@ -114,15 +114,15 @@ 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` или прямое указание пользователя может заменить модель конкретной проверки на текущий
|
|
117
|
+
Агенты устанавливаются отдельно от скилов. Модели review-агентов в таблице — сбалансированные defaults; `docs/settings.yaml` или прямое указание пользователя может заменить модель конкретной проверки на текущий запуск в режиме `subagents`. `eda-aim` последовательно разделяет согласование, выполнение и независимую проверку, а при необходимости использует установленные скилы только в отдельных изолированных субагентах; основной агент передаёт вопросы и структурированные результаты. `eda-commit` сохраняет исходный запрос и целиком передаёт сбор контекста, выбор файлов, коммит и разрешённое продолжение одному простому агенту. `eda-worktree` и `eda-merge-worktree` передают одному специализированному агенту git-операцию, обрабатывают его вопрос или результат и сами команды не выполняют. `eda-review` поддерживает два режима: `subagents` параллельно запускает применимых review-агентов, а `single` один раз читает общий контекст и выполняет те же проверки одним агентом по встроенной матрице. В Claude Code установленный `eda-review` всегда выполняется через `context: fork`, в том числе из `eda-polish`. В Codex шаги polish и специализированные review-агенты запускаются с `fork_turns: "none"`, без наследования истории. В `subagents` все выбранные проверки отправляются одним нативным параллельным пакетом без ручных партий и shell-опроса.
|
|
118
118
|
|
|
119
|
-
Для Claude Code
|
|
119
|
+
Для Claude Code установленный `eda-commit` получает `model: sonnet`, а `eda-worktree` и `eda-merge-worktree` — `model: haiku`. В Codex у скилов пока нет отдельного per-skill model override: основной поток остаётся на выбранной пользователем модели, но он выполняет только лёгкую оркестрацию; содержательная работа `eda-commit` закреплена за `gpt-5.6-terra`, а worktree-операции — за `gpt-5.6-luna`.
|
|
120
120
|
|
|
121
121
|
---
|
|
122
122
|
|
|
123
123
|
## 🚩 Флаги скилов
|
|
124
124
|
|
|
125
|
-
У некоторых скилов есть флаг `strict` — он включает дополнительные тяжёлые проверки. Передаётся как часть запроса агенту, например: `eda-explore strict <тема>`. Также strict можно включить отдельно в `docs/settings.yaml`, например через `explore.strict: true`. У `eda-review`
|
|
125
|
+
У некоторых скилов есть флаг `strict` — он включает дополнительные тяжёлые проверки. Передаётся как часть запроса агенту, например: `eda-explore strict <тема>`. Также strict можно включить отдельно в `docs/settings.yaml`, например через `explore.strict: true`. У `eda-review` режим исполнения задаётся через `subagents` / `single`, а состав проверок — через собственные `mode` и `model`.
|
|
126
126
|
|
|
127
127
|
У `eda-plan-execute` есть режимы `subagents` / `single` / `auto`. Режим можно разово указать в вызове, например `eda-plan-execute single docs/artifacts/plans/....md`; без него используется `plan-execute.mode` из настроек, а без настроек — `auto`.
|
|
128
128
|
|
|
@@ -132,13 +132,15 @@ eda update-all ~/Code
|
|
|
132
132
|
|
|
133
133
|
| Скил | Флаг | Что включает | Когда стоит использовать |
|
|
134
134
|
|---|---|---|---|
|
|
135
|
-
| `eda-orhestra` | `automatic` / `manual`, `без полировки плана`, `без полировки кода`, `полировка кода N итераций`, `без ручных тестов` | Разово меняет
|
|
135
|
+
| `eda-orhestra` | `automatic` / `manual`, `subagents` / `single` / `single_propagated`, `без полировки плана`, `без полировки кода`, `полировка кода N итераций`, `без ручных тестов` | Разово меняет вопросы, исполнение, состав цепочки и параметры шагов поверх `docs/settings.yaml` | `single` экономит верхний слой, `single_propagated` также включает single у совместимых execute/review-этапов |
|
|
136
136
|
| `eda-aim` | `automatic` / `manual` | Разово меняет способ ответа на рабочие вопросы поверх `aim.mode`; подтверждение точного списка новых целей остаётся обязательным | Автономная работа или совместное прохождение развилок с человеком |
|
|
137
137
|
| `eda-explore` | `strict` | После сохранения отчёта отдаёт его соседнему CLI (Claude → Codex или наоборот) на критическое ревью конкретности, фактов, развилок, рисков и версий; затем доправляет отчёт по замечаниям | Серьёзные исследования, которые лягут в основу больших решений; когда хочется второго мнения от другой модели/среды |
|
|
138
138
|
| `eda-plan` | `strict`, `без ревью плана`, `без проверок` | `strict` независимо включает кросс-CLI проверку; `без ревью плана` отключает встроенный review/fix; `без проверок` отключает оба вида ревью | Когда нужно разделить создание плана и его последующую полировку |
|
|
139
139
|
| `eda-plan-review` | `threshold N` | Разово меняет долю закрытых пунктов, при которой план считается готовым | Для самостоятельного аудита готового плана |
|
|
140
140
|
| `eda-plan-execute` | `subagents` / `single` / `auto` | Разово меняет, где выполняются фазы, поверх `plan-execute.mode` | `single` для небольшого плана в одном контексте, `subagents` для большого или тяжёлого |
|
|
141
141
|
| `eda-plan-polish` | `threshold N`, `limit N` | Меняет gate и максимальное число подтверждающих review-итераций | Для доводки ответственных планов перед `eda-plan-execute` |
|
|
142
|
+
| `eda-manual-test` | `full` / `полная проверка`, `smoke` / `быстро` | Разово меняет глубину ручной проверки поверх `manual-test.depth` | `smoke` для короткой правки, `full` — когда нужно закрыть все области после плана |
|
|
143
|
+
| `eda-review` | `subagents` / `single` | Разово меняет способ выполнения выбранных проверок поверх `review.execution` | `single` экономит контекст на частых локальных ревью; `subagents` сохраняет независимость ролей для ответственных изменений |
|
|
142
144
|
|
|
143
145
|
---
|
|
144
146
|
|
|
@@ -155,6 +157,9 @@ orhestra:
|
|
|
155
157
|
# Режим полного цикла eda-orhestra.
|
|
156
158
|
# automatic | manual
|
|
157
159
|
mode: automatic
|
|
160
|
+
# Где выполняются этапы и передаётся ли single совместимым вложенным скилам.
|
|
161
|
+
# subagents | single | single_propagated
|
|
162
|
+
execution: subagents
|
|
158
163
|
# Упорядоченная цепочка. Шаги можно отключать, удалять и переставлять.
|
|
159
164
|
steps:
|
|
160
165
|
- id: plan
|
|
@@ -237,8 +242,17 @@ plan-execute:
|
|
|
237
242
|
# subagents — каждая фаза в отдельном субагенте, single — весь план одним контекстом, auto — решает по плану.
|
|
238
243
|
mode: auto
|
|
239
244
|
|
|
245
|
+
manual-test:
|
|
246
|
+
# Глубина ручной проверки в eda-manual-test.
|
|
247
|
+
# full — закрыть все применимые области: API, база, консольные команды, интерфейс, алгоритмы, фон, права, конфигурацию, логи и регрессии рядом.
|
|
248
|
+
# smoke — только запуск и основной сценарий изменённой области.
|
|
249
|
+
# full | smoke | ask_each_time
|
|
250
|
+
depth: full
|
|
251
|
+
|
|
240
252
|
review:
|
|
241
|
-
#
|
|
253
|
+
# subagents — отдельный специализированный агент на проверку, single — все проверки одним агентом.
|
|
254
|
+
execution: subagents
|
|
255
|
+
# Каждая проверка имеет собственный режим запуска; модели применяются только в subagents.
|
|
242
256
|
agents:
|
|
243
257
|
# Проверяет ошибки в логике, крайние случаи и обработку ошибок.
|
|
244
258
|
# Эта базовая проверка по умолчанию запускается всегда.
|
|
@@ -376,6 +390,7 @@ discover-automations:
|
|
|
376
390
|
|
|
377
391
|
Что означают настройки:
|
|
378
392
|
- `orhestra.mode` — `automatic` безопасно закрывает рабочие вопросы без промежуточных подтверждений; `manual` пишет план вместе с человеком и передаёт ему вопросы.
|
|
393
|
+
- `orhestra.execution` — `subagents` запускает каждый этап отдельно, `single` выполняет верхнюю цепочку текущим агентом, `single_propagated` дополнительно передаёт `single` шагам `eda-plan-execute`, `eda-polish` и прямому `eda-review`; default `subagents`. Другие вложенные скилы сохраняют собственный контракт.
|
|
379
394
|
- `orhestra.steps` — выполняемый сверху вниз workflow. `enabled: false` отключает шаг, а `args` передаёт ему дополнительные параметры. Например, для `eda-polish`: `args: "limit 2"`. Шаги можно переставлять или добавлять, но git/publish-скиллы оркестратор не запускает.
|
|
380
395
|
- Старое значение `steps[].skill: eda-execute` во время запуска автоматически понимается как `eda-plan-execute`; существующий `docs/settings.yaml` установщик не переписывает.
|
|
381
396
|
- `steps[].on_failure` — настраивает исправление failed manual-test прямо рядом с этим шагом: `skill` и `args` задают фикс, `then` — повторяемые id шагов, `max_cycles` — лимит. Если обработчика нет, оркестратор сохраняет failed-отчёт и останавливается.
|
|
@@ -386,8 +401,10 @@ discover-automations:
|
|
|
386
401
|
- `plan-review.threshold` — доля закрытых пунктов чек-листа для статуса `ready`, default `100`. Отдельных агентов у `plan-review` больше нет: проверку целиком делает один субагент.
|
|
387
402
|
- `plan-polish.limit` — максимальное число подтверждающих review-итераций; default `2`. Цикл останавливается раньше, если score перестал расти.
|
|
388
403
|
- `plan-execute.mode` — где `eda-plan-execute` выполняет фазы: `subagents` — каждая фаза в отдельном изолированном субагенте с независимой проверкой, `single` — весь план одним контекстом без субагентов, `auto` — выбор по плану; default `auto`. Явный режим в вызове имеет приоритет.
|
|
404
|
+
- `manual-test.depth` — глубина ручной проверки в `eda-manual-test`: `full` — закрыть все применимые области матрицы покрытия, `smoke` — только запуск и основной сценарий изменённой области, `ask_each_time` — спрашивать каждый раз; default `full`. Явная глубина в вызове имеет приоритет.
|
|
405
|
+
- `review.execution` — где выполняются проверки `eda-review`: `subagents` запускает отдельные специализированные роли, `single` выполняет те же выбранные проверки одним агентом с однократной загрузкой общего контекста; default `subagents`. Явный режим в вызове имеет приоритет.
|
|
389
406
|
- `review.agents.<check>.mode` — запускать проверку всегда, автоматически по контексту или отключить.
|
|
390
|
-
- `review.agents.<check>.model.claude` и `.codex` — модель конкретной проверки в соответствующей
|
|
407
|
+
- `review.agents.<check>.model.claude` и `.codex` — модель конкретной проверки в соответствующей среде для `subagents`; в `single` используется текущая модель агента.
|
|
391
408
|
- `eda-review` не делит находки по обязательности: каждый принятый пункт требует исправления, а предложения без доказанного практического дефекта отбрасываются. Score остаётся экспертной оценкой серьёзности; любая находка блокирует `clean` независимо от score.
|
|
392
409
|
- `send-review.close_previous_reviews` — после успешной новой отправки скрывает предыдущие сводки, созданные `eda-send-review` текущим GitHub-пользователем, и резолвит связанные inline-треды; прямое указание в текущем запросе переопределяет настройку.
|
|
393
410
|
- `discover-automations.include_plans` — добавляет `docs/artifacts/plans/` в обычный запуск `eda-discover-automations`.
|
|
@@ -404,7 +421,7 @@ discover-automations:
|
|
|
404
421
|
|
|
405
422
|
`eda-orhestra` по умолчанию запускает основной цикл одной командой:
|
|
406
423
|
|
|
407
|
-
|
|
424
|
+
В default `subagents` каждая стрелка передаёт явный вход и пути к артефактам в новый изолированный субагент. В `single` и `single_propagated` верхние этапы идут последовательно в текущем контексте.
|
|
408
425
|
|
|
409
426
|
```text
|
|
410
427
|
plan без проверок → plan-polish → plan-execute → polish → manual-test ──passed──> готово
|
|
@@ -447,9 +464,9 @@ plan-polish = специализированный plan-review ─> plan-review-
|
|
|
447
464
|
discover-automations может запускаться от review, fix-by-review или fix.
|
|
448
465
|
```
|
|
449
466
|
|
|
450
|
-
`eda-manual-test` обычно ставится после `eda-plan-execute`, `eda-fix` или `eda-fix-by-review`, чтобы руками проверить API
|
|
467
|
+
`eda-manual-test` обычно ставится после `eda-plan-execute`, `eda-fix` или `eda-fix-by-review`, чтобы руками проверить API, базу, консольные команды, интерфейс и алгоритмы перед ревью или коммитом.
|
|
451
468
|
|
|
452
|
-
Использовать всю цепочку не обязательно — каждый скил самодостаточен. Для полного прохода одной задачи можно вызвать `eda-orhestra automatic <задача>` или `eda-orhestra manual <задача>`. Разовые варианты: `eda-orhestra automatic без полировки плана <задача>`, `eda-orhestra полировка кода 2 итерации <задача>`, `eda-orhestra без ручных тестов <задача>`. Постоянный порядок и аргументы
|
|
469
|
+
Использовать всю цепочку не обязательно — каждый скил самодостаточен. Для полного прохода одной задачи можно вызвать `eda-orhestra automatic <задача>` или `eda-orhestra manual <задача>`. Разовые варианты: `eda-orhestra single <задача>`, `eda-orhestra single_propagated <задача>`, `eda-orhestra automatic без полировки плана <задача>`, `eda-orhestra полировка кода 2 итерации <задача>`, `eda-orhestra без ручных тестов <задача>`. Постоянный режим исполнения задаётся в `orhestra.execution`, порядок и аргументы — в `orhestra.steps`. Новый проект можно начать с `eda-new-project`; существующий — с `eda-prepare-ai`, `eda-roadmap`, `eda-explore`, или сразу с `eda-plan-execute` на готовом плане, или просто `eda-commit`, когда правки уже сделаны. Для параллельной работы есть `eda-worktree`, а для возврата ветки из worktree в текущую ветку — `eda-merge-worktree`.
|
|
453
470
|
|
|
454
471
|
Вызов `eda-commit` без контекста охватывает все незакоммиченные tracked-изменения и содержательные untracked-файлы; очевидные кэши, временные и локальные служебные артефакты остаются вне коммитов. Executor сам делит полный состав на необходимое число логически цельных коммитов — один, три или больше. Например, запрос `eda-commit сразу отправь ветку, создай PR и дай ссылку` использует тот же полный состав и выполняет всю указанную цепочку без отдельного вопроса после серии коммитов.
|
|
455
472
|
|
|
@@ -459,7 +476,7 @@ discover-automations может запускаться от review, fix-by-revie
|
|
|
459
476
|
|
|
460
477
|
- **Простой язык.** Скилы общаются с тобой так, чтобы понял человек без глубоких знаний предмета. Термины — только когда без них нельзя.
|
|
461
478
|
- **Все вопросы — интерактивно.** В Claude Code — через `AskUserQuestion`; в интерактивном Codex — через `request_user_input` или блокирующий вопрос в чат. В `codex exec` и других неинтерактивных запусках скил не имитирует диалог: если без ответа нельзя безопасно продолжать, он завершает работу со статусом `blocked: нужен ответ пользователя`.
|
|
462
|
-
-
|
|
479
|
+
- **Способ review настраивается.** В `subagents` `eda-review` запускает установленных read-only агентов нативным механизмом Claude/Codex и блокируется при их недоступности без CLI-fallback. В `single` один review-runner выполняет те же выбранные проверки по общей матрице без leaf-субагентов и повторной загрузки общего контекста.
|
|
463
480
|
- **Технические остановки обрабатываются по причине.** Оркестраторы ждут свободный слот при лимите параллельности, запрашивают недостающее разрешение, один раз продолжают агента после временной API-ошибки и без бессмысленных retry останавливаются при лимите глубины, исчерпанной квоте или неизвестном сбое.
|
|
464
481
|
- **Повторяемые роли — в пакетных агентах.** Скилы управляют процессом, а стабильные изолированные роли получают собственный prompt, модель и доступ. Полные review-prompts не дублируются в оркестраторе.
|
|
465
482
|
- **Артефакты по папкам.** Исследования отдельно, планы отдельно, ревью отдельно. Между файлами — ссылки. Через месяц легко найти, кто что когда решал.
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"name": "eda-commit-executor",
|
|
4
4
|
"description": "Самостоятельно собирает git-контекст, делит выбранные или все незакоммиченные изменения на логические коммиты и выполняет явно разрешённые push, PR или merge-действия для eda-commit.",
|
|
5
5
|
"models": {
|
|
6
|
-
"claude": "
|
|
7
|
-
"codex": "gpt-5.6-
|
|
6
|
+
"claude": "sonnet",
|
|
7
|
+
"codex": "gpt-5.6-terra"
|
|
8
8
|
},
|
|
9
9
|
"reasoning": {
|
|
10
|
-
"claude": "
|
|
11
|
-
"codex": "
|
|
10
|
+
"claude": "medium",
|
|
11
|
+
"codex": "medium"
|
|
12
12
|
},
|
|
13
13
|
"access": "git-write"
|
|
14
14
|
}
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
2. Прочитай последние 5–10 коммитов и определи наблюдаемый стиль сообщений.
|
|
38
38
|
3. Получи текущую ветку, upstream, remotes и основную ветку из `origin/HEAD`.
|
|
39
39
|
4. Прочитай `AGENTS.md`, `CLAUDE.md`, `docs/rules.md`, `docs/arch.md` и связанные артефакты из `docs/**`, если они есть и применимы к изменениям.
|
|
40
|
-
5. Проверяй существующий PR текущей ветки, когда `USER_REQUEST` или `REQUESTED_ACTIONS` упоминает PR или push.
|
|
40
|
+
5. Проверяй существующий PR текущей ветки, когда `USER_REQUEST` или `REQUESTED_ACTIONS` упоминает PR или push. Если предстоит создание или обновление PR, найди применимый шаблон PR в репозитории и прочитай его целиком.
|
|
41
41
|
6. Определи состав коммита:
|
|
42
42
|
- если `COMMIT_SCOPE` непустой, выбери соответствующий ему логический набор и отдели несвязанные пользовательские изменения;
|
|
43
43
|
- если `COMMIT_SCOPE` пустой, выбери все незакоммиченные tracked-изменения — staged, unstaged и удаления — и все содержательные untracked-файлы во всём репозитории. Несколько задач или несвязанных изменений в этом режиме охватываются одной серией коммитов и не требуют вопроса;
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
1. Непосредственно перед индексацией повторно проверь `git status` и diff оставшихся изменений. Если состояние неожиданно изменилось или при непустом `COMMIT_SCOPE` состав стал неоднозначным, верни `blocked` до `git add` этой группы.
|
|
61
61
|
2. Добавляй новые файлы и подготавливай обычный изолированный индекс только точечно через `git add -- <paths>`; не используй `git add -A` или `git add .`. Если в индексе остаются файлы других групп или изменения вне scope, используй `git commit --only -- <paths>` либо эквивалентную безопасную path-limited стратегию: чужие staged-изменения не должны попасть в текущий коммит, исчезнуть из индекса или расшириться за счёт их unstaged-части.
|
|
62
62
|
3. Проверь точный кандидат текущего коммита: `git diff --cached` для изолированного индекса или соответствующий path-limited diff для `--only`. Убедись, что кандидат содержит только текущую логическую группу без служебных артефактов или секретных файлов. При обнаружении проблемы не коммить и верни `blocked` с точным состоянием индекса и списком уже созданных коммитов.
|
|
63
|
-
4. Составь отдельное сообщение в стиле истории
|
|
63
|
+
4. Составь отдельное сообщение в стиле истории проекта. Заголовок до примерно 70 символов должен конкретно называть результат группы, а не повторять имя ветки, список файлов или общие слова вроде `changes`, `updates` и «правки». Если причина или важное изменение поведения не очевидны из заголовка, добавь короткое тело. Описывай только фактический кандидат коммита и не приписывай ему изменения или проверки из других групп.
|
|
64
64
|
5. Выполни `git commit` выбранным изолированным способом без `--amend`, `--no-verify` и `--no-gpg-sign`. Проверь фактический состав нового commit, сохрани hash, subject и files, затем переходи к следующей группе.
|
|
65
65
|
|
|
66
66
|
После последнего коммита проверь, что из выбранного состава ничего не осталось. Только затем выполняй действия после коммитов.
|
|
@@ -71,9 +71,18 @@
|
|
|
71
71
|
|
|
72
72
|
Выполни `REQUESTED_ACTIONS` по порядку без повторного вопроса. Явное «создай PR» разрешает обычный push текущей ветки как необходимую предпосылку.
|
|
73
73
|
|
|
74
|
+
Для создания или явно запрошенного обновления PR составь заголовок и описание по полному `USER_REQUEST`, фактическим коммитам текущей ветки относительно base и итоговому diff. Не своди PR к копии последнего commit message, если коммитов несколько.
|
|
75
|
+
|
|
76
|
+
- Явно заданные пользователем заголовок, текст или обязательные разделы имеют приоритет. Иначе следуй найденному шаблону PR; если шаблона нет, дай короткое описание цели, список фактических изменений и раздел проверки.
|
|
77
|
+
- Заголовок должен описывать общий результат PR конкретно и без имени ветки, номера коммита, служебных префиксов или общих формулировок вроде `updates` и «изменения».
|
|
78
|
+
- В описании объясни, зачем нужен PR и что изменилось с точки зрения проверяемого поведения или контракта. Не пересказывай diff по файлам и не добавляй ритуальные разделы без содержательной информации.
|
|
79
|
+
- В разделе проверки перечисли только реально выполненные команды и их результат. Если проверки не запускались, так и напиши; не выдумывай тесты, issue, метрики, совместимость или breaking changes.
|
|
80
|
+
- Перед отправкой сверь текст с base...HEAD diff: каждое утверждение должно подтверждаться текущим PR, а все основные логические группы коммитов должны быть отражены.
|
|
81
|
+
- Передавай многострочное описание через временный файл и `--body-file`, чтобы shell quoting не повредил Markdown. Не оставляй незаполненные placeholder'ы шаблона.
|
|
82
|
+
|
|
74
83
|
- Для push используй существующий upstream, иначе `git push -u origin <branch>`.
|
|
75
84
|
- Для PR определи base по `origin/HEAD`, сначала проверь текущую ветку через `gh pr view`; существующий PR не дублируй.
|
|
76
|
-
- Если PR отсутствует, создай его через `gh pr create
|
|
85
|
+
- Если PR отсутствует, создай его через `gh pr create --title <title> --body-file <file>`, затем получи фактические номер и URL через `gh`; не угадывай ссылку. Если PR уже существует, меняй его заголовок или описание только по явному запросу пользователя через `gh pr edit`; обычный push не перезаписывает текст PR.
|
|
77
86
|
- После любого выполненного push всегда возвращай ссылку. Если PR текущей ветки есть — `pr.status: existing` и его фактический URL. Если PR нет — `pr.status: absent` и `pr.create_url`: ссылка на создание PR, собранная из фактического URL репозитория (`gh repo view`), base из `origin/HEAD` и имени ветки.
|
|
78
87
|
- Если PR нет, а его создание не запрошено, сам PR не создавай: верни `completed`, `pr.create_url`, вопрос «Создать PR?» и варианты «создать PR» / «оставить ссылку на создание».
|
|
79
88
|
- Если репозиторий не на GitHub или `gh` недоступен, верни `pr.create_url: null` и назови причину в `error`.
|
package/lib/install.js
CHANGED
|
@@ -251,6 +251,7 @@ const DEFAULT_ORHESTRA_STEPS = ORHESTRA_STEP_DEFINITIONS.map(({ name, ...step })
|
|
|
251
251
|
const DEFAULT_SETTINGS = {
|
|
252
252
|
orhestra: {
|
|
253
253
|
mode: 'automatic',
|
|
254
|
+
execution: 'subagents',
|
|
254
255
|
steps: DEFAULT_ORHESTRA_STEPS
|
|
255
256
|
},
|
|
256
257
|
aim: {
|
|
@@ -277,7 +278,11 @@ const DEFAULT_SETTINGS = {
|
|
|
277
278
|
planExecute: {
|
|
278
279
|
mode: 'auto'
|
|
279
280
|
},
|
|
281
|
+
manualTest: {
|
|
282
|
+
depth: 'full'
|
|
283
|
+
},
|
|
280
284
|
review: {
|
|
285
|
+
execution: 'subagents',
|
|
281
286
|
agents: DEFAULT_REVIEW_AGENTS
|
|
282
287
|
},
|
|
283
288
|
sendReview: {
|
|
@@ -295,6 +300,7 @@ const SETTINGS_SECTION_NAMES = [
|
|
|
295
300
|
'plan-review',
|
|
296
301
|
'plan-polish',
|
|
297
302
|
'plan-execute',
|
|
303
|
+
'manual-test',
|
|
298
304
|
'review',
|
|
299
305
|
'send-review',
|
|
300
306
|
'discover-automations'
|
|
@@ -346,6 +352,20 @@ const ORHESTRA_MODE_CHOICES = [
|
|
|
346
352
|
name: 'Писать план вместе с человеком и передавать ему вопросы'
|
|
347
353
|
}
|
|
348
354
|
];
|
|
355
|
+
const ORHESTRA_EXECUTION_CHOICES = [
|
|
356
|
+
{
|
|
357
|
+
value: 'subagents',
|
|
358
|
+
name: 'Каждый этап выполнять отдельным изолированным субагентом'
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
value: 'single',
|
|
362
|
+
name: 'Все этапы выполнять текущим агентом без передачи режима внутрь'
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
value: 'single_propagated',
|
|
366
|
+
name: 'Все этапы выполнять текущим агентом и передавать single совместимым скилам'
|
|
367
|
+
}
|
|
368
|
+
];
|
|
349
369
|
const AIM_MODE_CHOICES = [
|
|
350
370
|
{
|
|
351
371
|
value: 'automatic',
|
|
@@ -396,6 +416,20 @@ const PLAN_SIZE_CHOICES = [
|
|
|
396
416
|
name: 'Спрашивать размер плана каждый раз'
|
|
397
417
|
}
|
|
398
418
|
];
|
|
419
|
+
const MANUAL_TEST_DEPTH_CHOICES = [
|
|
420
|
+
{
|
|
421
|
+
value: 'full',
|
|
422
|
+
name: 'Полная проверка всех областей: API, база, консоль, интерфейс, алгоритмы'
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
value: 'smoke',
|
|
426
|
+
name: 'Только smoke: запуск и основной сценарий изменённой области'
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
value: 'ask_each_time',
|
|
430
|
+
name: 'Спрашивать глубину проверки каждый раз'
|
|
431
|
+
}
|
|
432
|
+
];
|
|
399
433
|
const DECISION_MODE_CHOICES = [
|
|
400
434
|
{
|
|
401
435
|
value: 'recommend_and_ask',
|
|
@@ -447,6 +481,16 @@ const REVIEW_MODE_CHOICES = [
|
|
|
447
481
|
{ value: 'auto', name: 'auto — запускать только когда проверка применима' },
|
|
448
482
|
{ value: 'off', name: 'off — отключить проверку' }
|
|
449
483
|
];
|
|
484
|
+
const REVIEW_EXECUTION_CHOICES = [
|
|
485
|
+
{
|
|
486
|
+
value: 'subagents',
|
|
487
|
+
name: 'Каждую review-проверку выполнять отдельным специализированным субагентом'
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
value: 'single',
|
|
491
|
+
name: 'Все review-проверки выполнять одним агентом в общем контексте'
|
|
492
|
+
}
|
|
493
|
+
];
|
|
450
494
|
const CLAUDE_REVIEW_MODEL_CHOICES = [
|
|
451
495
|
{ value: 'haiku', name: 'haiku — быстрая проверка' },
|
|
452
496
|
{ value: 'sonnet', name: 'sonnet — сильная проверка кода' },
|
|
@@ -726,6 +770,7 @@ export async function askSettings({
|
|
|
726
770
|
}
|
|
727
771
|
|
|
728
772
|
const scalarPrompts = [
|
|
773
|
+
['orhestra', 'orhestra.execution', settings.orhestra, 'execution', 'Как eda-orhestra должен выполнять этапы по умолчанию?', ORHESTRA_EXECUTION_CHOICES],
|
|
729
774
|
['aim', 'aim.mode', settings.aim, 'mode', 'Как eda-aim должен отвечать на рабочие вопросы по умолчанию?', AIM_MODE_CHOICES],
|
|
730
775
|
['explore', 'explore.decisionMode', settings.explore, 'decisionMode', 'Как принимать важные решения в eda-explore?', DECISION_MODE_CHOICES],
|
|
731
776
|
['plan', 'plan.size', settings.plan, 'size', 'Какой размер плана eda-plan использовать по умолчанию?', PLAN_SIZE_CHOICES],
|
|
@@ -734,7 +779,9 @@ export async function askSettings({
|
|
|
734
779
|
['plan', 'plan.loggingStrategy', settings.plan, 'loggingStrategy', 'Какую стратегию логирования eda-plan использовать по умолчанию?', LOGGING_STRATEGY_CHOICES],
|
|
735
780
|
['plan-review', 'planReview.threshold', settings.planReview, 'threshold', 'Какой порог готовности использовать в eda-plan-review?', PLAN_REVIEW_THRESHOLD_CHOICES],
|
|
736
781
|
['plan-polish', 'planPolish.limit', settings.planPolish, 'limit', 'Сколько review-итераций разрешить eda-plan-polish?', PLAN_POLISH_LIMIT_CHOICES],
|
|
737
|
-
['plan-execute', 'planExecute.mode', settings.planExecute, 'mode', 'Как eda-plan-execute должен выполнять фазы по умолчанию?', PLAN_EXECUTE_MODE_CHOICES]
|
|
782
|
+
['plan-execute', 'planExecute.mode', settings.planExecute, 'mode', 'Как eda-plan-execute должен выполнять фазы по умолчанию?', PLAN_EXECUTE_MODE_CHOICES],
|
|
783
|
+
['manual-test', 'manualTest.depth', settings.manualTest, 'depth', 'Какую глубину ручной проверки использовать в eda-manual-test по умолчанию?', MANUAL_TEST_DEPTH_CHOICES],
|
|
784
|
+
['review', 'review.execution', settings.review, 'execution', 'Как eda-review должен выполнять проверки по умолчанию?', REVIEW_EXECUTION_CHOICES]
|
|
738
785
|
];
|
|
739
786
|
for (const [section, key, target, property, message, choices] of scalarPrompts) {
|
|
740
787
|
if (!requestedSections.has(section) || !shouldAsk(key)) continue;
|
|
@@ -747,7 +794,8 @@ export async function askSettings({
|
|
|
747
794
|
output,
|
|
748
795
|
selectPrompt,
|
|
749
796
|
seedAgents: settings.review.agents,
|
|
750
|
-
missingKeys
|
|
797
|
+
missingKeys,
|
|
798
|
+
skipModels: settings.review.execution === 'single'
|
|
751
799
|
});
|
|
752
800
|
}
|
|
753
801
|
return settings;
|
|
@@ -758,7 +806,8 @@ export async function askReviewAgentSettings({
|
|
|
758
806
|
output = process.stdout,
|
|
759
807
|
selectPrompt = select,
|
|
760
808
|
seedAgents = DEFAULT_REVIEW_AGENTS,
|
|
761
|
-
missingKeys = null
|
|
809
|
+
missingKeys = null,
|
|
810
|
+
skipModels = false
|
|
762
811
|
} = {}) {
|
|
763
812
|
return askAgentSettings({
|
|
764
813
|
input,
|
|
@@ -768,11 +817,12 @@ export async function askReviewAgentSettings({
|
|
|
768
817
|
seedAgents,
|
|
769
818
|
missingKeys,
|
|
770
819
|
keyPrefix: 'review.agents',
|
|
771
|
-
label: 'review'
|
|
820
|
+
label: 'review',
|
|
821
|
+
skipModels
|
|
772
822
|
});
|
|
773
823
|
}
|
|
774
824
|
|
|
775
|
-
async function askAgentSettings({ input, output, selectPrompt, definitions, seedAgents, missingKeys, keyPrefix, label }) {
|
|
825
|
+
async function askAgentSettings({ input, output, selectPrompt, definitions, seedAgents, missingKeys, keyPrefix, label, skipModels = false }) {
|
|
776
826
|
const configuredAgents = structuredClone(seedAgents);
|
|
777
827
|
const shouldAsk = key => missingKeys === null || missingKeys.has(key);
|
|
778
828
|
for (const agent of definitions) {
|
|
@@ -790,14 +840,14 @@ async function askAgentSettings({ input, output, selectPrompt, definitions, seed
|
|
|
790
840
|
|
|
791
841
|
let claude = configuredAgents[agent.key].model.claude;
|
|
792
842
|
let codex = configuredAgents[agent.key].model.codex;
|
|
793
|
-
if (mode !== 'off' && shouldAsk(claudeKey)) {
|
|
843
|
+
if (!skipModels && mode !== 'off' && shouldAsk(claudeKey)) {
|
|
794
844
|
claude = await selectPrompt({
|
|
795
845
|
message: `Какой моделью Claude проверять ${agent.key}?`,
|
|
796
846
|
choices: CLAUDE_REVIEW_MODEL_CHOICES,
|
|
797
847
|
default: claude
|
|
798
848
|
}, { input, output });
|
|
799
849
|
}
|
|
800
|
-
if (mode !== 'off' && shouldAsk(codexKey)) {
|
|
850
|
+
if (!skipModels && mode !== 'off' && shouldAsk(codexKey)) {
|
|
801
851
|
codex = await selectPrompt({
|
|
802
852
|
message: `Какой моделью Codex проверять ${agent.key}?`,
|
|
803
853
|
choices: CODEX_REVIEW_MODEL_CHOICES,
|
|
@@ -1118,6 +1168,12 @@ function migrateSettingsContent(content) {
|
|
|
1118
1168
|
const legacyDefaults = objectValue(raw.defaults);
|
|
1119
1169
|
const orhestra = objectValue(raw.orhestra);
|
|
1120
1170
|
transfer('orhestra.mode', orhestra.mode, oneOf(['automatic', 'manual']), value => { settings.orhestra.mode = value; });
|
|
1171
|
+
transfer(
|
|
1172
|
+
'orhestra.execution',
|
|
1173
|
+
orhestra.execution,
|
|
1174
|
+
oneOf(['subagents', 'single', 'single_propagated']),
|
|
1175
|
+
value => { settings.orhestra.execution = value; }
|
|
1176
|
+
);
|
|
1121
1177
|
const steps = normalizeStoredOrhestraSteps(orhestra.steps);
|
|
1122
1178
|
transfer('orhestra.steps', steps, value => Array.isArray(value), value => { settings.orhestra.steps = value; });
|
|
1123
1179
|
|
|
@@ -1176,7 +1232,21 @@ function migrateSettingsContent(content) {
|
|
|
1176
1232
|
value => { settings.planExecute.mode = value; }
|
|
1177
1233
|
);
|
|
1178
1234
|
|
|
1235
|
+
const manualTest = objectValue(raw['manual-test']);
|
|
1236
|
+
transfer(
|
|
1237
|
+
'manualTest.depth',
|
|
1238
|
+
manualTest.depth,
|
|
1239
|
+
oneOf(['full', 'smoke', 'ask_each_time']),
|
|
1240
|
+
value => { settings.manualTest.depth = value; }
|
|
1241
|
+
);
|
|
1242
|
+
|
|
1179
1243
|
const review = objectValue(raw.review);
|
|
1244
|
+
transfer(
|
|
1245
|
+
'review.execution',
|
|
1246
|
+
review.execution,
|
|
1247
|
+
oneOf(['subagents', 'single']),
|
|
1248
|
+
value => { settings.review.execution = value; }
|
|
1249
|
+
);
|
|
1180
1250
|
transferAgentSettings({
|
|
1181
1251
|
rawAgents: objectValue(review.agents),
|
|
1182
1252
|
settingsAgents: settings.review.agents,
|
|
@@ -1348,6 +1418,9 @@ orhestra:
|
|
|
1348
1418
|
# Режим полного цикла eda-orhestra.
|
|
1349
1419
|
# automatic | manual
|
|
1350
1420
|
mode: ${orhestra.mode ?? 'automatic'}
|
|
1421
|
+
# Где выполняются этапы и передаётся ли single совместимым вложенным скилам.
|
|
1422
|
+
# subagents | single | single_propagated
|
|
1423
|
+
execution: ${orhestra.execution ?? 'subagents'}
|
|
1351
1424
|
# Упорядоченная цепочка. Шаги можно отключать, удалять и переставлять.
|
|
1352
1425
|
steps:
|
|
1353
1426
|
${orhestraSteps}
|
|
@@ -1400,8 +1473,18 @@ plan-execute:
|
|
|
1400
1473
|
# subagents — каждая фаза в отдельном субагенте, single — весь план одним контекстом, auto — решает по плану.
|
|
1401
1474
|
mode: ${settings.planExecute.mode}
|
|
1402
1475
|
|
|
1476
|
+
manual-test:
|
|
1477
|
+
# Глубина ручной проверки в eda-manual-test.
|
|
1478
|
+
# full — закрыть все применимые области: API, база, консольные команды, интерфейс, алгоритмы, фон, права, конфигурацию, логи и регрессии рядом.
|
|
1479
|
+
# smoke — только запуск и основной сценарий изменённой области.
|
|
1480
|
+
# full | smoke | ask_each_time
|
|
1481
|
+
depth: ${settings.manualTest.depth}
|
|
1482
|
+
|
|
1403
1483
|
review:
|
|
1404
|
-
#
|
|
1484
|
+
# Где eda-review выполняет выбранные проверки.
|
|
1485
|
+
# subagents — отдельный специализированный агент на проверку, single — все проверки одним агентом.
|
|
1486
|
+
execution: ${settings.review.execution ?? 'subagents'}
|
|
1487
|
+
# Каждая проверка имеет собственный режим запуска; модели применяются только в subagents.
|
|
1405
1488
|
agents:
|
|
1406
1489
|
${reviewAgents}
|
|
1407
1490
|
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@ description: 'Коммитит выбранные или все незакомм
|
|
|
23
23
|
|
|
24
24
|
| Агент | Claude Code | Codex | Доступ |
|
|
25
25
|
|---|---|---|---|
|
|
26
|
-
| `eda-commit-executor` | `
|
|
26
|
+
| `eda-commit-executor` | `sonnet` | `gpt-5.6-terra` | git-write |
|
|
27
27
|
|
|
28
28
|
- В Claude Code запускай установленный custom agent через `Agent` tool по имени.
|
|
29
29
|
- В Codex запускай установленный custom agent через `spawn_agent` или аналог по имени.
|
|
@@ -75,7 +75,7 @@ COMMIT_SCOPE:
|
|
|
75
75
|
Верни результат строго по YAML-контракту агента.
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Агент сам собирает git-контекст, читает правила и историю, формирует
|
|
78
|
+
Агент сам собирает git-контекст, читает правила и историю, формирует сообщения коммитов и тексты PR по исходному запросу и фактическому diff, точечно коммитит и выполняет разрешённое продолжение. При непустом `$COMMIT_SCOPE` он выбирает соответствующий состав. При пустом `$COMMIT_SCOPE` включает все tracked-изменения и содержательные untracked-файлы, исключая только очевидные кэши, временные, системные и локальные служебные артефакты. Выбранный состав он сам делит на необходимое число логически цельных коммитов и создаёт их по порядку; несколько задач в полном дефолтном наборе не являются причиной для вопроса. При вероятном секрете или другой реальной небезопасности он обязан вернуть `blocked` до индексации затронутой группы.
|
|
79
79
|
|
|
80
80
|
Явная команда пользователя разрешает обычные ожидаемые действия и безопасные предпосылки в её рамках. Например, «создай PR» разрешает обычный push текущей ветки, если без него PR создать нельзя. Она не разрешает force-push, публикацию секретов или другое не названное рискованное действие.
|
|
81
81
|
|