@gian-tiaga/eda 3.2.2 → 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 CHANGED
@@ -1,4 +1,4 @@
1
- # Миграция на eda 3.2
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.2 актуальным остаётся `docs/settings.yaml` с `version: 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.2.x`;
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`, отсутствия находок и оценки не ниже 95/100 либо до лимита 5 итераций. Все находки исправляются. Каждый шаг идёт в изолированном нативном субагенте. Не коммитит | `docs/artifacts/reviews/`, `docs/artifacts/review-fixes/` |
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
 
@@ -487,7 +487,7 @@ eda update-all ~/Code
487
487
 
488
488
  ## 📁 Структура и установка компонентов
489
489
 
490
- Исходники скилов лежат в `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`.
491
491
 
492
492
  Исходники агентов лежат в `agents/<agent>/agent.json` и `prompt.md`. Установщик рендерит единый агентный контракт в нативный формат выбранной среды.
493
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) {
@@ -1,11 +1,19 @@
1
1
  export function renderClaudeSkill(content, config = {}) {
2
2
  const model = config.models?.claude;
3
- if (!model) return content;
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 model override: некорректный front matter скила.');
15
+ throw new Error('Не удалось добавить настройки Claude: некорректный front matter скила.');
8
16
  }
9
17
 
10
- return `${content.slice(0, closingMarker)}\nmodel: ${model}${content.slice(closingMarker)}`;
18
+ return `${content.slice(0, closingMarker)}\n${fields.join('\n')}${content.slice(closingMarker)}`;
11
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "3.2.2",
3
+ "version": "3.3.0",
4
4
  "description": "Пакет скилов и специализированных агентов eda-* для Claude Code и Codex CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,6 +16,8 @@ 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` и только при её фактической неверности.
@@ -96,7 +96,7 @@ 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 запускай установленный custom agent через `spawn_agent` или аналог. Передай выбранную модель как runtime override. Если хост не умеет применить выбранную модель или нативные субагенты недоступны, остановись: не выполняй роли главным агентом и не создавай отдельные CLI-процессы.
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
102
 
@@ -111,7 +111,11 @@ description: 'Проводит полное read-only ревью diff, ветк
111
111
 
112
112
  Ожидание слота и один технический retry не считаются повторной содержательной проверкой агента.
113
113
 
114
- Запусти все выбранные проверки одним параллельным пакетом; если хост ограничивает concurrency, разреши ему поставить лишние задачи в очередь. Каждому агенту передай только:
114
+ Сначала сформируй весь набор выбранных проверок, затем отправь все вызовы одним параллельным пакетом в одном ответе ассистента. Не дели проверки заранее на волны, партии или последовательные группы и не жди завершения части агентов перед запуском остальных. Если хост ограничивает concurrency, разреши нативному механизму поставить лишние задачи в очередь; повторный запуск допустим только после фактической ошибки лимита по правилам технических остановок выше.
115
+
116
+ Ожидай результаты только нативным механизмом субагентов и их уведомлениями о завершении; в Codex используй `wait_agent`. Не используй Bash, shell-циклы, `sleep`, опрос файлов или артефактов и фиксированные таймауты для ожидания агентов. После отправки всего пакета собирай ответы по мере нативного завершения.
117
+
118
+ Каждому агенту передай только:
115
119
 
116
120
  ```text
117
121
  Рабочая директория: <cwd>
@@ -0,0 +1,7 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "claude": {
4
+ "context": "fork",
5
+ "agent": "general-purpose"
6
+ }
7
+ }