@gian-tiaga/eda 0.8.6 → 1.0.1
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 +119 -0
- package/README.md +324 -71
- package/agents/eda-aim-executor/agent.json +15 -0
- package/agents/eda-aim-executor/prompt.md +61 -0
- package/agents/eda-aim-planner/agent.json +15 -0
- package/agents/eda-aim-planner/prompt.md +43 -0
- package/agents/eda-aim-verifier/agent.json +15 -0
- package/agents/eda-aim-verifier/prompt.md +57 -0
- package/agents/eda-commit-context/agent.json +15 -0
- package/agents/eda-commit-context/prompt.md +58 -0
- package/agents/eda-commit-executor/agent.json +15 -0
- package/agents/eda-commit-executor/prompt.md +87 -0
- package/agents/eda-merge-worktree-executor/agent.json +15 -0
- package/agents/eda-merge-worktree-executor/prompt.md +57 -0
- package/agents/eda-review-api/agent.json +15 -0
- package/agents/eda-review-api/prompt.md +34 -0
- package/agents/eda-review-architecture/agent.json +15 -0
- package/agents/eda-review-architecture/prompt.md +34 -0
- package/agents/eda-review-code-quality/agent.json +15 -0
- package/agents/eda-review-code-quality/prompt.md +34 -0
- package/agents/eda-review-correctness/agent.json +15 -0
- package/agents/eda-review-correctness/prompt.md +34 -0
- package/agents/eda-review-database/agent.json +15 -0
- package/agents/eda-review-database/prompt.md +34 -0
- package/agents/eda-review-documentation/agent.json +15 -0
- package/agents/eda-review-documentation/prompt.md +34 -0
- package/agents/eda-review-frontend/agent.json +15 -0
- package/agents/eda-review-frontend/prompt.md +34 -0
- package/agents/eda-review-performance/agent.json +15 -0
- package/agents/eda-review-performance/prompt.md +34 -0
- package/agents/eda-review-plan-alignment/agent.json +15 -0
- package/agents/eda-review-plan-alignment/prompt.md +34 -0
- package/agents/eda-review-previous-reviews/agent.json +15 -0
- package/agents/eda-review-previous-reviews/prompt.md +44 -0
- package/agents/eda-review-references/agent.json +15 -0
- package/agents/eda-review-references/prompt.md +34 -0
- package/agents/eda-review-rules/agent.json +15 -0
- package/agents/eda-review-rules/prompt.md +34 -0
- package/agents/eda-review-security/agent.json +15 -0
- package/agents/eda-review-security/prompt.md +34 -0
- package/agents/eda-review-tests/agent.json +15 -0
- package/agents/eda-review-tests/prompt.md +34 -0
- package/agents/eda-worktree-executor/agent.json +15 -0
- package/agents/eda-worktree-executor/prompt.md +49 -0
- package/bin/cli.js +4 -4
- package/lib/catalog.js +118 -0
- package/lib/install.js +921 -119
- package/lib/renderers/claude-agent.js +24 -0
- package/lib/renderers/claude-skill.js +11 -0
- package/lib/renderers/codex-agent.js +24 -0
- package/lib/renderers/codex-skill.js +3 -0
- package/package.json +5 -3
- package/skills/eda-aim/SKILL.md +212 -0
- package/skills/eda-commit/SKILL.md +124 -0
- package/skills/eda-commit/skill.json +6 -0
- package/skills/eda-discover-automations/SKILL.md +184 -0
- package/skills/{eda-explore.md → eda-explore/SKILL.md} +11 -8
- package/skills/{eda-fix.md → eda-fix/SKILL.md} +7 -6
- package/skills/{eda-fix-by-review.md → eda-fix-by-review/SKILL.md} +5 -4
- package/skills/{eda-manual-test.md → eda-manual-test/SKILL.md} +1 -1
- package/skills/eda-merge-worktree/SKILL.md +72 -0
- package/skills/eda-merge-worktree/skill.json +7 -0
- package/skills/eda-new-project/SKILL.md +163 -0
- package/skills/eda-orhestra/SKILL.md +146 -0
- package/skills/{eda-plan.md → eda-plan/SKILL.md} +39 -29
- package/skills/eda-plan-execute/SKILL.md +186 -0
- package/skills/{eda-plan-polish.md → eda-plan-polish/SKILL.md} +14 -13
- package/skills/eda-polish/SKILL.md +80 -0
- package/skills/eda-prepare-ai/SKILL.md +227 -0
- package/skills/eda-review/SKILL.md +212 -0
- package/skills/{eda-send-review.md → eda-send-review/SKILL.md} +66 -19
- package/skills/eda-send-review/skill.json +7 -0
- package/skills/eda-worktree/SKILL.md +73 -0
- package/skills/eda-worktree/skill.json +7 -0
- package/skills/eda-automate.md +0 -185
- package/skills/eda-commit.md +0 -91
- package/skills/eda-docs.md +0 -123
- package/skills/eda-execute.md +0 -140
- package/skills/eda-merge-worktree.md +0 -116
- package/skills/eda-polish.md +0 -113
- package/skills/eda-review-check.md +0 -149
- package/skills/eda-review.md +0 -173
- package/skills/eda-start.md +0 -233
- package/skills/eda-worktree.md +0 -113
- /package/skills/{eda-roadmap.md → eda-roadmap/SKILL.md} +0 -0
package/skills/eda-docs.md
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eda-docs
|
|
3
|
-
description: 'Создаёт или обновляет документы, указанные рядом с вызовом: `docs/rules.md` (правила, подстроенные под реальный проект), `docs/arch.md` (архитектура проекта), `AGENTS.md` (описание проекта, стек, ссылки на документы и команды) или все три. Анализирует стек сам, учитывает переданный контекст и уже существующие практики. Не правит код.'
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Скил: Документатор (eda-docs)
|
|
7
|
-
|
|
8
|
-
Создаёшь или обновляешь три документа: `docs/rules.md`, `docs/arch.md` и шапку `AGENTS.md`. Документы должны быть подстроены под конкретный проект: его стек, текущую структуру, уже установленные инструменты, стиль кода, тесты, инфраструктуру и контекст, который передал пользователь.
|
|
9
|
-
|
|
10
|
-
## Вход из сообщения пользователя
|
|
11
|
-
|
|
12
|
-
Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: тему, задачу, путь к файлу, режим, ограничения, прямые указания и дополнительный контекст о том, какие правила, архитектурные решения или боли проекта пользователь хочет зафиксировать.
|
|
13
|
-
|
|
14
|
-
Если этого входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных вариантов или есть риск выполнить не ту задачу. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
|
|
15
|
-
|
|
16
|
-
## Главные правила
|
|
17
|
-
|
|
18
|
-
1. **Интерактивные вопросы** — по разделу ниже.
|
|
19
|
-
2. **Не правишь код**, не ставишь пакеты, не меняешь конфиги. Только документы.
|
|
20
|
-
3. **Подстройка под проект.** Не генерируй универсальный шаблон. Каждое правило и архитектурное описание должны опираться на найденные файлы, стек, текущие команды, зависимости, структуру директорий, существующие docs и контекст пользователя.
|
|
21
|
-
4. **Строгость только там, где она уместна для проекта.** Если предлагаешь усиление строгости или новый инструмент, объясни реальную проблему проекта; не предлагай дубль уже установленному инструменту того же класса.
|
|
22
|
-
5. **Существующие документы** не переписываем молча. Если файл уже есть — `AskUserQuestion`: переписать / дополнить / создать рядом.
|
|
23
|
-
6. **Простой язык.** Сначала объясняй простыми словами, зачем правило или архитектурный блок нужен проекту. Потом формулируй конкретику.
|
|
24
|
-
|
|
25
|
-
## Интерактивные вопросы
|
|
26
|
-
|
|
27
|
-
Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
|
|
28
|
-
- Claude Code: используй `AskUserQuestion`.
|
|
29
|
-
- Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
|
|
30
|
-
- Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
|
|
31
|
-
- Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
|
|
32
|
-
|
|
33
|
-
## Этапы
|
|
34
|
-
|
|
35
|
-
### 1. Проанализировать проект
|
|
36
|
-
Определи сам: языки и фреймворки, тест-фреймворк, базы данных, инфраструктуру (контейнеры, CI), уже установленные линтеры/статанализаторы, главную ветку, стиль коммитов (по `git log`).
|
|
37
|
-
|
|
38
|
-
### 2. Прочитать существующие docs
|
|
39
|
-
`docs/rules.md`, `docs/arch.md`, `AGENTS.md` (если есть). Прочитай их и строго следуй уже зафиксированной рамке, если задача не требует её изменить. Запомни, что в них уже зафиксировано — чтобы не дублировать и не противоречить.
|
|
40
|
-
|
|
41
|
-
### 3. Уточнить, что обновляем
|
|
42
|
-
Если пользователь указал `rules`, `docs/rules.md`, `arch`, `docs/arch.md`, `AGENTS.md` или «все» — используй этот список без вопроса. Если список документов не указан или неоднозначен — `AskUserQuestion`: все три / только rules / только arch / только AGENTS / выбрать несколько.
|
|
43
|
-
|
|
44
|
-
Для каждого существующего файла задай отдельный `AskUserQuestion`: переписать с нуля / дополнить / оставить как есть.
|
|
45
|
-
|
|
46
|
-
### 4. Сформировать план `docs/rules.md`
|
|
47
|
-
Не используй фиксированный шаблон разделов. Сначала на основе анализа проекта и контекста пользователя предложи набор правил, которые действительно нужны этому проекту.
|
|
48
|
-
|
|
49
|
-
Перед записью файла задай `AskUserQuestion` с коротким планом: 5–12 правил или групп правил, зачем каждое нужно проекту, что подтверждено практикой, а что является предложением. Если пользователь передал контекст заранее, используй его как основной источник намерения, но сверяй с реальным стеком и файлами.
|
|
50
|
-
|
|
51
|
-
Из ответа пользователя сформируй план `docs/rules.md`, а затем сам документ. Формат документа выбирай под проект: разделы, таблицы, списки и примеры должны помогать читать и применять правила, а не соответствовать заранее заданной форме.
|
|
52
|
-
|
|
53
|
-
В готовом `docs/rules.md` обязательно должны быть:
|
|
54
|
-
- краткое объяснение, зачем документ нужен;
|
|
55
|
-
- правила, привязанные к текущему стеку, структуре и командам проекта;
|
|
56
|
-
- объяснение простым языком, зачем нужно каждое важное правило;
|
|
57
|
-
- команды проверки, если они реально есть в проекте;
|
|
58
|
-
- отдельный блок предложений, если есть полезные идеи, которые ещё не приняты или не настроены.
|
|
59
|
-
|
|
60
|
-
### 5. Сформировать план `docs/arch.md`
|
|
61
|
-
Не используй фиксированный шаблон архитектуры. Архитектурный документ должен описывать фактическую форму проекта: модули, границы, потоки данных, внешние зависимости и решения, которые реально видны в коде или переданы пользователем.
|
|
62
|
-
|
|
63
|
-
Перед записью файла задай `AskUserQuestion` с коротким планом: 4–10 архитектурных блоков, зачем каждый нужен читателю, что подтверждено кодом, что является выводом из структуры, а что требует подтверждения пользователя.
|
|
64
|
-
|
|
65
|
-
Из ответа пользователя сформируй план `docs/arch.md`, а затем сам документ. Формат выбирай под проект. Если схему, таблицу модулей или список потоков данных полезно читать — добавь. Если они создают шум — не добавляй.
|
|
66
|
-
|
|
67
|
-
В готовом `docs/arch.md` обязательно должны быть:
|
|
68
|
-
- простое описание, что делает система и где её границы;
|
|
69
|
-
- описание ключевых частей проекта на языке текущего стека;
|
|
70
|
-
- зависимости между важными частями;
|
|
71
|
-
- фактические команды, входные точки или runtime-компоненты, если они есть;
|
|
72
|
-
- явное разделение подтверждённых фактов, выводов из кода и предположений, если уверенности недостаточно.
|
|
73
|
-
|
|
74
|
-
### 6. Обновить `AGENTS.md`
|
|
75
|
-
Если файл существует — `AskUserQuestion`: переписать / дополнить / оставить. Если нет — создай.
|
|
76
|
-
|
|
77
|
-
Шаблон:
|
|
78
|
-
|
|
79
|
-
```markdown
|
|
80
|
-
# AGENTS.md
|
|
81
|
-
|
|
82
|
-
Инструкции для AI-агентов в этом репозитории.
|
|
83
|
-
|
|
84
|
-
## Проект
|
|
85
|
-
- **Название:** ...
|
|
86
|
-
- **Что делает:** <одно-два предложения>
|
|
87
|
-
- **Стек:** <языки, фреймворки, БД, инфраструктура>
|
|
88
|
-
- **Главная ветка:** <main|master|...>
|
|
89
|
-
|
|
90
|
-
## Для агентов
|
|
91
|
-
Рамка проекта — `docs/rules.md` и `docs/arch.md`. Перед любой правкой кода прочитай их и строго следуй им. Если их нет — спроси пользователя, можно ли запустить `eda-docs` для генерации. Скилы серии eda-* лежат в `.claude/skills/` (для Claude Code) и `.codex/skills/` (для Codex CLI) — следуй им, когда пользователь просит выполнить одну из задач серии.
|
|
92
|
-
|
|
93
|
-
## Где что хранится
|
|
94
|
-
| Что | Где |
|
|
95
|
-
|---|---|
|
|
96
|
-
| Исследования | `docs/researches/` |
|
|
97
|
-
| Планы | `docs/plans/` |
|
|
98
|
-
| Журналы выполнения | `docs/executions/` |
|
|
99
|
-
| Ревью | `docs/reviews/` |
|
|
100
|
-
| Отчёты о фиксах | `docs/review-fixes/` |
|
|
101
|
-
| Предложения по автоматизации | `docs/automations/` |
|
|
102
|
-
| Правила проекта | `docs/rules.md` |
|
|
103
|
-
| Архитектура | `docs/arch.md` |
|
|
104
|
-
|
|
105
|
-
## Команды
|
|
106
|
-
- Тесты: `<команда>`
|
|
107
|
-
- Линтер: `<команда>`
|
|
108
|
-
- Локальный запуск: `<команда>` (если применимо)
|
|
109
|
-
|
|
110
|
-
## Стиль коммитов
|
|
111
|
-
<определи по `git log -20 --oneline` или зафиксируй стандарт>
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### 7. Финал
|
|
115
|
-
Короткое сообщение: какие файлы созданы/обновлены, путь к каждому, какие предложения остались непринятыми или требуют отдельного решения, подсказка дальше — «прочитай файлы, скорректируй вручную, что не подходит».
|
|
116
|
-
|
|
117
|
-
## Чего НЕ делать
|
|
118
|
-
- Править код, ставить пакеты, менять конфиги — только документы.
|
|
119
|
-
- Молча переписывать существующие документы — каждый раз `AskUserQuestion`.
|
|
120
|
-
- Генерировать универсальные правила без связи с реальным проектом, стеком и контекстом пользователя.
|
|
121
|
-
- Превращать предложения в правила без согласия пользователя.
|
|
122
|
-
- Предлагать второй инструмент того же класса в дополнение к уже установленному.
|
|
123
|
-
- Добавлять разделы ради красоты — если для проекта раздел не релевантен, опусти его.
|
package/skills/eda-execute.md
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eda-execute
|
|
3
|
-
description: 'Исполняет план из docs/plans/ по пути или описанию рядом с вызовом. Перед правками читает план, `docs/rules.md` и `docs/arch.md`; правила и архитектура обязательны к исполнению. Если шаг плана им противоречит, останавливается и спрашивает пользователя. Правит код, в конце прогоняет полный сьют тестов и линтеры. Прогресс — чекбоксы в файле плана + журнал в `docs/executions/`; в конец плана дописывается ссылка на журнал. Не коммитит (это `eda-commit`), не делает ревью (это `eda-review`).'
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Скил: Исполнитель (eda-execute)
|
|
7
|
-
|
|
8
|
-
Берёшь готовый план из `docs/plans/`, выполняешь до конца, ведёшь журнал. Останавливаешься только при реальных проблемах.
|
|
9
|
-
|
|
10
|
-
## Вход из сообщения пользователя
|
|
11
|
-
|
|
12
|
-
Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: тему, задачу, путь к файлу, режим, ограничения и прямые указания.
|
|
13
|
-
|
|
14
|
-
Если этого входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных вариантов или есть риск выполнить не ту задачу. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
|
|
15
|
-
|
|
16
|
-
## Главные правила
|
|
17
|
-
|
|
18
|
-
1. **План, `docs/rules.md` и `docs/arch.md` — обязательная рамка исполнения.** Перед правками прочитай план, `docs/rules.md` и `docs/arch.md`, если они есть. `docs/rules.md` и `docs/arch.md` обязательны к исполнению, а не просто к прочтению. Выполняй план только в той форме, которая строго следует правилам и архитектуре проекта.
|
|
19
|
-
2. **Конфликт блокирует выполнение.** Если шаг плана противоречит коду, `docs/rules.md` или `docs/arch.md`, не исполняй его молча и не выбирай обходной путь сам. Спроси: адаптировать выполнение под правила/архитектуру, вернуться к `eda-plan` для исправления плана или изменить правила/архитектуру отдельной задачей.
|
|
20
|
-
3. **Не додумывай план.** Шаг непонятен — спроси через `AskUserQuestion`, не «доразрабатывай» молча.
|
|
21
|
-
4. **Иди целиком.** Не делай паузы «для подтверждения» после каждого шага; останавливайся только при конфликте, падении проверки, риске потери данных или рискованной операции вне плана.
|
|
22
|
-
5. **Проверки нельзя подавлять.** Не отключай линтеры, тесты, typecheck, static analysis и другие проверки; не добавляй игноры, исключения из проверок, ослабление правил или изменение команд так, чтобы проверка перестала запускаться. Пиши и правь код так, чтобы проверки проходили по сути.
|
|
23
|
-
6. **Не коммить, не пушь, не делай ревью.** Это другие скилы.
|
|
24
|
-
7. **Пиши просто.** В сообщениях, вопросах и журнале используй простой язык; таблицы — для структурированных данных.
|
|
25
|
-
|
|
26
|
-
## Интерактивные вопросы
|
|
27
|
-
|
|
28
|
-
Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
|
|
29
|
-
- Claude Code: используй `AskUserQuestion`.
|
|
30
|
-
- Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
|
|
31
|
-
- Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
|
|
32
|
-
- Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
|
|
33
|
-
- Для выполнения кода это правило важнее требования идти целиком: не додумывай план, не исполняй шаги вопреки `docs/rules.md` или `docs/arch.md`, не делай рискованные операции и не правь чужие/несвязанные поломки вместо ответа пользователя.
|
|
34
|
-
|
|
35
|
-
## Этапы
|
|
36
|
-
|
|
37
|
-
### 1. Выбрать план
|
|
38
|
-
Сначала разбери текст рядом с вызовом:
|
|
39
|
-
- если указан путь к плану — используй его как `$PLAN_FILE`;
|
|
40
|
-
- если указано название плана или часть названия — найди совпадение в `docs/plans/`;
|
|
41
|
-
- если написано «последний план» — возьми самый новый файл из `docs/plans/`;
|
|
42
|
-
- если вставлен текст плана — используй его как план выполнения и при инициализации прогресса сохрани/привяжи к файлу в `docs/plans/`, если это безопасно и однозначно.
|
|
43
|
-
|
|
44
|
-
Если найден ровно один план — продолжай без вопроса. Если найдено несколько одинаково подходящих планов — `AskUserQuestion` со списком вариантов. Если входа нет — `AskUserQuestion` со списком последних файлов из `docs/plans/`. Если `docs/plans/` отсутствует или пуста и вход не содержит план — остановись с понятным вопросом или статусом `blocked: нужен план`. Запиши путь в `$PLAN_FILE`.
|
|
45
|
-
|
|
46
|
-
### 2. Выбрать место выполнения
|
|
47
|
-
`AskUserQuestion` с четырьмя вариантами:
|
|
48
|
-
|
|
49
|
-
| Вариант | Что делает | Команда |
|
|
50
|
-
|---|---|---|
|
|
51
|
-
| Остаться в текущей ветке | Ничего | — |
|
|
52
|
-
| Новая ветка от main | Переключиться на main, создать ветку от неё | `git checkout main && git checkout -b <slug>` |
|
|
53
|
-
| Новая ветка от текущей ветки | Создать ветку прямо здесь | `git checkout -b <slug>` |
|
|
54
|
-
| Worktree от main в соседней папке | Создать worktree → **остановиться**, дать пользователю инструкцию | см. ниже |
|
|
55
|
-
|
|
56
|
-
`<slug>` бери из имени плана. Если в рабочей копии незакоммиченные изменения и `git checkout` упадёт — остановись и спроси через `AskUserQuestion`.
|
|
57
|
-
|
|
58
|
-
**Если выбран worktree** — выполни:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
git worktree add -b <slug> ../<repo-name>-<slug> main
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Покажи пользователю **готовый bash-блок** для копирования (с подставленными именами):
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
cd ../<repo-name>-<slug>
|
|
68
|
-
# затем в новой сессии запусти этот же скил:
|
|
69
|
-
# eda-execute docs/plans/<план>.md
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
И **выйди из скила** — текущая сессия в эту папку не переедет, поэтому продолжать здесь нельзя. Сообщи пользователю, что ждёшь его в новой сессии.
|
|
73
|
-
|
|
74
|
-
### 3. Прочитать контекст
|
|
75
|
-
Прочитай план, `docs/rules.md` и `docs/arch.md` (если есть). Тест-фреймворк проекта определи сам по конфигам и существующим тестам.
|
|
76
|
-
|
|
77
|
-
Перед выполнением проверь, нет ли в плане шагов, зависимостей, API, миграций, границ модулей, команд проверки или решений, которые противоречат правилам или архитектуре. Если конфликт есть — остановись и задай `AskUserQuestion` по варианту из главных правил.
|
|
78
|
-
|
|
79
|
-
### 4. Инициализировать прогресс
|
|
80
|
-
- Создай журнал `docs/executions/{YYYY-MM-DD}_{HH-MM}_{slug}.md` (slug — тот же, что у плана, или близкий).
|
|
81
|
-
- В конец файла плана добавь раздел со ссылкой и чекбоксами прогресса:
|
|
82
|
-
```markdown
|
|
83
|
-
## Прогресс выполнения
|
|
84
|
-
Журнал: `docs/executions/{file}.md`
|
|
85
|
-
|
|
86
|
-
- [ ] Шаг 1: ...
|
|
87
|
-
- [ ] Шаг 2: ...
|
|
88
|
-
```
|
|
89
|
-
- Шаблон журнала:
|
|
90
|
-
|
|
91
|
-
```markdown
|
|
92
|
-
---
|
|
93
|
-
plan: <путь>
|
|
94
|
-
started: <YYYY-MM-DD HH:MM>
|
|
95
|
-
status: in_progress
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
# Журнал: <заголовок>
|
|
99
|
-
|
|
100
|
-
## Шаги
|
|
101
|
-
| # | Шаг | Файлы | Тесты | Статус |
|
|
102
|
-
|---|-----|-------|-------|--------|
|
|
103
|
-
|
|
104
|
-
## Заметки
|
|
105
|
-
## Изменения в docs
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### 5. Выполнить план
|
|
109
|
-
Идёшь по шагам. На каждом:
|
|
110
|
-
1. Перед правкой сверяешь действие с `docs/rules.md` и `docs/arch.md`.
|
|
111
|
-
2. Если правила или архитектура задают способ реализации, границы модулей, команды проверки, требования к тестам, миграциям, API, безопасности или документации — следуй им даже тогда, когда план описан менее строго.
|
|
112
|
-
3. Если есть конфликт с правилами или архитектурой — не правь код, задай `AskUserQuestion`.
|
|
113
|
-
4. Сделай правки.
|
|
114
|
-
5. Выполни проверки, если они прямо указаны в шаге.
|
|
115
|
-
6. Поставь `[x]` в файле плана и допиши строку в таблицу журнала.
|
|
116
|
-
|
|
117
|
-
Останавливайся и спрашивай через `AskUserQuestion`, если тесты к шагу упали и не правятся быстро, шаг противоречит коду, `docs/rules.md` или `docs/arch.md`, либо задевает рискованное вне плана. Архитектурное решение по ходу — записывай в «Изменения в docs», но не меняй зафиксированную архитектуру молча.
|
|
118
|
-
|
|
119
|
-
После последнего шага — `finished` и `status: done` в шапке журнала.
|
|
120
|
-
|
|
121
|
-
### 6. Обновить docs
|
|
122
|
-
Если в «Изменениях в docs» что-то накопилось — допиши в `docs/rules.md` или `docs/arch.md` минимально достаточно. Файлов нет — пропусти (создаёт `eda-docs`).
|
|
123
|
-
|
|
124
|
-
### 7. Финальная проверка
|
|
125
|
-
Прогони полный сьют тестов и линтеры на проекте. Команды — стандартные для стека; если непонятно — `AskUserQuestion` один раз. Свои поломки — правишь причину и повторяешь. Запрещено делать проверки зелёными через подавление ошибок, отключение правил, исключение файлов, ослабление конфигов или изменение команд проверки. Чужие/несвязанные — `AskUserQuestion`. Результат фиксируй разделом `## Финальная проверка` в журнале.
|
|
126
|
-
|
|
127
|
-
### 8. Финал
|
|
128
|
-
Короткое сообщение: пути к плану и журналу, сводка шагов, результат финальной проверки, состояние git («не закоммичено»), 1–3 главных «что важно знать», подсказка «дальше — `eda-review` или `eda-commit`».
|
|
129
|
-
|
|
130
|
-
## Чего НЕ делать
|
|
131
|
-
- Коммитить, пушить, делать кросс-ревью изменений.
|
|
132
|
-
- Гонять полный сьют и линтеры на каждом шаге.
|
|
133
|
-
- Пропускать финальную проверку.
|
|
134
|
-
- Делать паузу после каждого шага «для подтверждения».
|
|
135
|
-
- Пропускать обновление чекбоксов и журнала — иначе теряется состояние.
|
|
136
|
-
- Делать рискованное (удаление файлов, миграции, секреты) без подтверждения, даже если упомянуто в плане.
|
|
137
|
-
- Подавлять ошибки линтеров, тестов, typecheck или других проверок вместо исправления кода.
|
|
138
|
-
- Считать `docs/rules.md` и `docs/arch.md` просто контекстом для ознакомления.
|
|
139
|
-
- Исполнять план, который противоречит правилам или архитектуре проекта.
|
|
140
|
-
- Обходить правило или архитектурное ограничение без явного решения пользователя.
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eda-merge-worktree
|
|
3
|
-
description: 'Мержит ветку из соседнего git worktree `{name}-work-{n}` в текущую ветку. Аргумент принимает как номер `1`, короткое имя `work-1` или полное имя `{name}-work-1`. Перед merge проверяет текущий worktree и исходный worktree на незакоммиченные изменения. После успешного merge не удаляет worktree и ветку.'
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Скил: Merge из worktree (eda-merge-worktree)
|
|
7
|
-
|
|
8
|
-
Мержишь ветку из соседнего worktree в текущую ветку. Этот скил не чистит worktree после merge: папка и ветка остаются на месте.
|
|
9
|
-
|
|
10
|
-
## Вход из сообщения пользователя
|
|
11
|
-
|
|
12
|
-
Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: номер worktree, короткое имя `work-<n>`, полное имя `{name}-work-<n>`, ограничения и прямые указания.
|
|
13
|
-
|
|
14
|
-
Если входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если аргумент не указан, он противоречивый, найдено несколько равных вариантов или есть риск смержить не ту ветку. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
|
|
15
|
-
|
|
16
|
-
## Главные правила
|
|
17
|
-
|
|
18
|
-
1. **Merge только в текущую ветку.** Не переключайся на другую целевую ветку без явного указания пользователя.
|
|
19
|
-
2. **Аргумент worktree обязателен.** Принимай `1`, `work-1` или полное имя `{name}-work-1`.
|
|
20
|
-
3. **Не удаляй worktree и ветку после merge.** Даже при успешном merge cleanup не выполняется.
|
|
21
|
-
4. **Не правь код вручную.** Если merge дал конфликт, остановись и покажи, какие файлы требуют ручного решения.
|
|
22
|
-
5. **Не коммить и не пушь.** Merge-коммит создаёт только сам `git merge`, если Git решит, что он нужен.
|
|
23
|
-
6. **Простой язык** в сообщениях пользователю.
|
|
24
|
-
|
|
25
|
-
## Интерактивные вопросы
|
|
26
|
-
|
|
27
|
-
Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
|
|
28
|
-
- Claude Code: используй `AskUserQuestion`.
|
|
29
|
-
- Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
|
|
30
|
-
- Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
|
|
31
|
-
- Не запускай команды, которые ждут интерактивного ввода в терминале.
|
|
32
|
-
|
|
33
|
-
## Этапы
|
|
34
|
-
|
|
35
|
-
### 1. Проверить git-репозиторий
|
|
36
|
-
|
|
37
|
-
Выполни:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
git rev-parse --show-toplevel
|
|
41
|
-
git worktree list --porcelain
|
|
42
|
-
git rev-parse --abbrev-ref HEAD
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Если это не git-репозиторий — остановись и сообщи. Если текущий worktree в detached HEAD — остановись: merge должен идти в именованную ветку.
|
|
46
|
-
|
|
47
|
-
Определи основной worktree по первой записи `worktree <path>` из `git worktree list --porcelain`. Из его basename получи `$PROJECT_NAME`.
|
|
48
|
-
|
|
49
|
-
### 2. Нормализовать аргумент
|
|
50
|
-
|
|
51
|
-
Пусть `$ARG` — значение рядом с вызовом.
|
|
52
|
-
|
|
53
|
-
Правила:
|
|
54
|
-
- `1` → `$WORKTREE_NAME=$PROJECT_NAME-work-1`;
|
|
55
|
-
- `work-1` → `$WORKTREE_NAME=$PROJECT_NAME-work-1`;
|
|
56
|
-
- `$PROJECT_NAME-work-1` → `$WORKTREE_NAME=$ARG`;
|
|
57
|
-
- другое значение → попробуй найти worktree с basename `$ARG`; если не найден — остановись и покажи доступные worktree.
|
|
58
|
-
|
|
59
|
-
Если `$ARG` не указан, спроси через `AskUserQuestion` и предложи найденные worktree с именами по шаблону `$PROJECT_NAME-work-<n>`.
|
|
60
|
-
|
|
61
|
-
### 3. Найти исходный worktree и ветку
|
|
62
|
-
|
|
63
|
-
Из `git worktree list --porcelain` найди запись, у которой basename пути равен `$WORKTREE_NAME`.
|
|
64
|
-
|
|
65
|
-
Для найденной записи определи `$SOURCE_WORKTREE_PATH` и `$SOURCE_BRANCH` из строки `branch refs/heads/<name>`.
|
|
66
|
-
|
|
67
|
-
Если worktree не найден — остановись и покажи доступные варианты. Если исходный worktree в detached HEAD или ветку определить нельзя — остановись: нечего безопасно мержить по имени ветки.
|
|
68
|
-
|
|
69
|
-
Если `$SOURCE_WORKTREE_PATH` совпадает с текущим worktree — остановись: нужно запускать merge из целевого worktree, а не из исходного.
|
|
70
|
-
|
|
71
|
-
### 4. Проверить чистоту
|
|
72
|
-
|
|
73
|
-
Проверь текущий worktree:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
git status --porcelain
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Проверь исходный worktree:
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
git -C "$SOURCE_WORKTREE_PATH" status --porcelain
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Если где-то есть незакоммиченные изменения — остановись и объясни, где именно. Нельзя мержить, пока изменения не закоммичены, не застешены или не убраны пользователем.
|
|
86
|
-
|
|
87
|
-
Если текущая ветка уже содержит `$SOURCE_BRANCH`, сообщи, что merge не нужен, и выйди без действий.
|
|
88
|
-
|
|
89
|
-
### 5. Выполнить merge
|
|
90
|
-
|
|
91
|
-
Выполни:
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
git merge "$SOURCE_BRANCH"
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Если Git сообщает `Already up to date`, это успешный результат.
|
|
98
|
-
|
|
99
|
-
Если появились конфликты, остановись. Покажи:
|
|
100
|
-
- что merge начат и требует ручного решения;
|
|
101
|
-
- список конфликтных файлов из `git status --short`;
|
|
102
|
-
- что пользователь должен разрешить конфликты и завершить merge вручную.
|
|
103
|
-
|
|
104
|
-
Не пытайся автоматически разрешать конфликты.
|
|
105
|
-
|
|
106
|
-
### 6. Финал
|
|
107
|
-
|
|
108
|
-
Короткое сообщение: какая ветка смержена, в какую текущую ветку, из какого worktree, статус результата (`merged`, `already up to date` или `conflict`) и явно: worktree и исходная ветка не удалялись.
|
|
109
|
-
|
|
110
|
-
## Чего НЕ делать
|
|
111
|
-
|
|
112
|
-
- Удалять worktree через `git worktree remove`.
|
|
113
|
-
- Удалять исходную ветку через `git branch -d` или `git branch -D`.
|
|
114
|
-
- Делать push.
|
|
115
|
-
- Править файлы для решения конфликтов.
|
|
116
|
-
- Мержить грязный исходный worktree, потому что незакоммиченные изменения не попадут в merge.
|
package/skills/eda-polish.md
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eda-polish
|
|
3
|
-
description: 'Автономно доводит изменения до заданной оценки ревью: запускает `eda-review draft`, затем `eda-review-check`, затем `eda-fix-by-review apply-optional`, и повторяет цикл до порога качества или лимита итераций. Все обязательные замечания чинятся, optional-замечания fix-агент применяет или отклоняет сам с обоснованием. По умолчанию цель — 95/100, лимит — 5 итераций; порог можно переопределить в сообщении (`до 90`, `threshold 90`). Каждый шаг запускается в изолированном субагенте или отдельном CLI-процессе. Не коммитит и не отправляет ревью.'
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Скил: Доводка по ревью (eda-polish)
|
|
7
|
-
|
|
8
|
-
Оркестрируешь цикл проверки и исправления: черновое ревью, проверка ревью, применение замечаний, новое ревью. Сам не пишешь ревью и не правишь код в основном агенте — каждый шаг запускаешь в изолированном субагенте или отдельном CLI-процессе.
|
|
9
|
-
|
|
10
|
-
## Вход из сообщения пользователя
|
|
11
|
-
|
|
12
|
-
Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: target для ревью, путь к плану, PR/ветку/diff/файл, желаемый порог, лимит итераций, ограничения и прямые указания.
|
|
13
|
-
|
|
14
|
-
Если этого входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных вариантов или есть риск полировать не те изменения. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
|
|
15
|
-
|
|
16
|
-
## Режим запуска
|
|
17
|
-
|
|
18
|
-
Порог качества по умолчанию — `95`. Пользователь может переопределить его в текущем сообщении: `до 90`, `threshold 90`, `цель 90`. Допустимые значения — от `1` до `100`.
|
|
19
|
-
|
|
20
|
-
Лимит по умолчанию — `5` итераций. Пользователь может явно задать меньший или больший лимит словами `лимит 3`, `max iterations 3`, `не больше 3 кругов`.
|
|
21
|
-
|
|
22
|
-
`strict` или `normal` передавай в `eda-review-check` только если пользователь явно указал режим. Если режима нет, запускай `eda-review-check` без режима: он сам прочитает `docs/settings.yaml`. `eda-review draft` всегда остаётся draft без субагентов.
|
|
23
|
-
|
|
24
|
-
## Главные правила
|
|
25
|
-
|
|
26
|
-
1. **Изоляция шагов обязательна.** `eda-review draft`, `eda-review-check` и `eda-fix-by-review apply-optional` запускаются отдельными субагентами или отдельными CLI-процессами. Главный агент только управляет циклом и читает артефакты.
|
|
27
|
-
2. **Не коммитишь и не отправляешь ревью.** Это работа `eda-commit` и `eda-send-review`.
|
|
28
|
-
3. **Не обходишь границы скилов.** Ревью делает `eda-review draft`, проверку ревью делает `eda-review-check`, правки делает `eda-fix-by-review apply-optional`.
|
|
29
|
-
4. **Цель цикла — score из проверенного ревью.** Сравнивай порог только с ревью после `eda-review-check`, не с draft.
|
|
30
|
-
5. **Обязательные замечания исправляются все.** Для шага фиксов всегда передавай `apply-optional`, чтобы `eda-fix-by-review` не спрашивал пользователя в цикле: все пункты «править обязательно» он обязан исправить, а по пунктам «на усмотрение автора» сам решает, применить или отклонить с причиной.
|
|
31
|
-
6. **Останавливайся на блокерах.** Если любой субагент завершился `blocked`, проверки не проходят из-за нерешённой причины, нет применимых замечаний или score не растёт два круга подряд — останови цикл и объясни причину.
|
|
32
|
-
7. **Не скрывай неудачную сходимость.** Если лимит достигнут, финал должен прямо сказать, какая оценка получилась и какие ревью/фиксы были последними.
|
|
33
|
-
|
|
34
|
-
## Интерактивные вопросы
|
|
35
|
-
|
|
36
|
-
Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
|
|
37
|
-
- Claude Code: используй `AskUserQuestion`.
|
|
38
|
-
- Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
|
|
39
|
-
- Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
|
|
40
|
-
- Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
|
|
41
|
-
|
|
42
|
-
## Запуск субагентов
|
|
43
|
-
|
|
44
|
-
Каждый запуск должен получать полный, самодостаточный prompt: какой скилл выполнить, какой target или файл использовать, что считать успехом, где искать артефакт результата. Передавай только текущий вход и пути к созданным файлам, а не длинную историю чата.
|
|
45
|
-
|
|
46
|
-
- Claude Code: запускай шаги через `Agent` tool, по одному шагу за раз. Для каждого шага проси агента использовать нужный скилл и вернуть путь к созданному или обновлённому файлу.
|
|
47
|
-
- Codex interactive: если доступен инструмент субагентов (`spawn_agent` или аналог), запускай шаги через него. Не делай ревью или фиксы основным агентом, когда субагенты доступны.
|
|
48
|
-
- Codex exec / неинтерактивный fallback: запускай каждый шаг отдельным `codex exec` с явной инструкцией использовать нужный скилл. Следующий шаг стартует только после чтения артефакта предыдущего.
|
|
49
|
-
- Если нет ни субагентов, ни CLI-fallback, остановись со статусом `blocked: нужен инструмент изолированного запуска`.
|
|
50
|
-
|
|
51
|
-
## Этапы
|
|
52
|
-
|
|
53
|
-
### 1. Подготовить цель и параметры
|
|
54
|
-
|
|
55
|
-
Определи `$TARGET_CONTEXT` так же, как это делает `eda-review`: указанный файл/папка/PR/ветка, незакоммиченный diff или diff текущей ветки от base. Если план указан — сохрани путь и передавай его в каждый `eda-review draft`. Если план нужен, но не указан и не определяется однозначно, вопрос задаст субагент `eda-review draft`; при его `blocked` останови весь цикл.
|
|
56
|
-
|
|
57
|
-
Создай внутренний журнал итераций в сообщении агента: номер, review file, checked score, fix report, причина перехода к следующему кругу. Отдельный файл журнала не нужен.
|
|
58
|
-
|
|
59
|
-
### 2. Итерационный цикл
|
|
60
|
-
|
|
61
|
-
Повторяй до достижения порога или лимита:
|
|
62
|
-
|
|
63
|
-
1. Запусти изолированный шаг:
|
|
64
|
-
|
|
65
|
-
```text
|
|
66
|
-
Используй скилл eda-review draft. Сделай черновое ревью для: <TARGET_CONTEXT>. Если есть план: <PLAN_FILE>. Сохрани ревью в docs/reviews/ и верни только путь к файлу и score.
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
2. Получи `$REVIEW_FILE` из ответа или найди самый новый файл, созданный после старта шага. Если файл не найден — остановись `blocked: review file не создан`.
|
|
70
|
-
|
|
71
|
-
3. Запусти изолированный шаг:
|
|
72
|
-
|
|
73
|
-
```text
|
|
74
|
-
Используй скилл eda-review-check <режим, только если пользователь указал strict или normal>. Проверь ревью: <REVIEW_FILE>. Верни путь к ревью, итоговый score, статус и список meta_reviewers.
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
4. Прочитай `$REVIEW_FILE` после проверки и извлеки `score`. Если `score >= threshold`, останови цикл как успешный.
|
|
78
|
-
|
|
79
|
-
5. Если score ниже порога, проверь, есть ли в ревью пункты «править обязательно» или «на усмотрение автора». Если применимых пунктов нет — остановись `blocked: нет применимых замечаний для повышения оценки`.
|
|
80
|
-
|
|
81
|
-
6. Запусти изолированный шаг:
|
|
82
|
-
|
|
83
|
-
```text
|
|
84
|
-
Используй скилл eda-fix-by-review apply-optional. Разбери замечания из ревью: <REVIEW_FILE>. Все пункты «править обязательно» исправь. По каждому пункту «на усмотрение автора» сам реши, применять ли его; отклонённые optional-пункты запиши с причиной в отчёт и ссылку в ревью, чтобы следующие ревьюеры не повторяли их без новых аргументов. Сохрани отчёт в docs/review-fixes/ и верни путь к отчёту, результат финальных проверок и состояние git.
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
7. Если фикс завершился `blocked`, с ошибкой проверок или без применённых правок — останови цикл и покажи причину.
|
|
88
|
-
|
|
89
|
-
8. Перейди к следующей итерации на обновлённом рабочем дереве.
|
|
90
|
-
|
|
91
|
-
Если score не растёт два проверенных круга подряд, остановись раньше лимита: дальнейший цикл, скорее всего, повторит те же замечания.
|
|
92
|
-
|
|
93
|
-
### 3. Финал
|
|
94
|
-
|
|
95
|
-
Короткое сообщение:
|
|
96
|
-
- результат: `достигнут порог`, `достигнут лимит`, `blocked`, `нет применимых замечаний`, `score не растёт`;
|
|
97
|
-
- итоговая оценка и порог;
|
|
98
|
-
- сколько итераций выполнено;
|
|
99
|
-
- путь к последнему ревью;
|
|
100
|
-
- путь к последнему отчёту фиксов, если он был;
|
|
101
|
-
- результат финальной проверки из последнего `eda-fix-by-review`;
|
|
102
|
-
- состояние git («не закоммичено»).
|
|
103
|
-
|
|
104
|
-
Если порог достигнут — предложи дальше `eda-commit`. Если остановка неуспешная — назови следующий конкретный шаг: ручное решение блокера, изменение порога или отдельный `eda-review strict`.
|
|
105
|
-
|
|
106
|
-
## Чего НЕ делать
|
|
107
|
-
|
|
108
|
-
- Делать ревью, проверку ревью или фиксы основным агентом вместо запуска скилов.
|
|
109
|
-
- Запускать следующий шаг, не прочитав артефакт предыдущего.
|
|
110
|
-
- Сравнивать порог с draft-оценкой до `eda-review-check`.
|
|
111
|
-
- Продолжать после `blocked` или красных финальных проверок.
|
|
112
|
-
- Коммитить, пушить или отправлять ревью.
|
|
113
|
-
- Переписывать `docs/settings.yaml` или менять правила проекта ради достижения оценки.
|