@gian-tiaga/eda 0.2.7 → 0.2.8
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/README.md +7 -3
- package/docs/skills/eda-automate.md +45 -25
- package/docs/skills/eda-commit.md +12 -3
- package/docs/skills/eda-fix.md +93 -0
- package/docs/skills/eda-research.md +2 -2
- package/lib/install.js +25 -22
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Поточная разработка с AI-агентами — на русском языке.
|
|
4
4
|
> Набор готовых скилов для **Claude Code** и **Codex CLI**, которые ведут тебя через весь цикл: от исследования до коммита.
|
|
5
5
|
|
|
6
|
-
`eda` — это
|
|
6
|
+
`eda` — это десять скилов, каждый отвечает за свой кусок работы. Вместо того чтобы каждый раз объяснять модели, как делать ревью или как исполнять план, ты говоришь одно слово — и она следует чёткой инструкции на русском, со всеми правилами, проверками и артефактами в нужных папках.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -19,7 +19,7 @@ npm install -g @gian-tiaga/eda
|
|
|
19
19
|
eda init
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Установщик покажет чекбоксы: стрелками выбираешь среду, пробелом отмечаешь, Enter продолжает. Можно поставить Claude Code, Codex CLI или обе среды сразу.
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
@@ -30,6 +30,7 @@ eda init
|
|
|
30
30
|
| `eda-research` | Глубоко изучает тему или задачу. Без правок кода. Все вопросы — через интерактивный диалог. На выходе — понятный отчёт со ссылками на источники, диаграммами и таблицами | `docs/researches/` |
|
|
31
31
|
| `eda-plan` | Пишет план реализации через стандартный Plan Mode хост-агента. Подтягивает контекст из `docs/rules.md`, `docs/arch.md`, при желании — релевантное исследование. Затем три параллельных модели (слабая, средняя, мощная) проверяют план на реалистичность, пропущенные шаги и нарушения правил — главный планировщик сам решает, что применить | `docs/plans/` |
|
|
32
32
|
| `eda-execute` | Выполняет план. Спрашивает, где работать (текущая ветка, новая ветка, отдельный worktree). Тесты пишет внутри каждого шага. В конце — полный прогон тестов и линтеров | `docs/executions/` |
|
|
33
|
+
| `eda-fix` | Делает обычные фиксы по короткому контексту, баг-репорту или файлу плана. Перед правками читает правила и архитектуру, добавляет нужные тесты, прогоняет проверки и сохраняет историю правок | `docs/fixes/` |
|
|
33
34
|
| `eda-review` | Делает код-ревью с оценкой 0–100. Затем три параллельных модели (Sonnet, Haiku, Opus) проверяют само ревью — добавляют пропущенное, убирают лишнее. В строгом режиме — ещё и кросс-ревью между Claude и Codex | `docs/reviews/` |
|
|
34
35
|
| `eda-fix-by-review` | Применяет замечания из ревью. Обязательные — сразу. Спорные — спрашивает. В конце ссылается на отчёт прямо в файле ревью | `docs/review-fixes/` |
|
|
35
36
|
| `eda-send-review` | Отправляет ревью на GitHub PR через `gh` — как комментарий, review, approve или request-changes. Сам определяет PR по текущей ветке | (комментарий в PR) |
|
|
@@ -59,12 +60,15 @@ eda init
|
|
|
59
60
|
flowchart LR
|
|
60
61
|
R[🔍 research] --> P[📝 plan]
|
|
61
62
|
P --> E[⚙️ execute]
|
|
62
|
-
E -->
|
|
63
|
+
E --> X[🛠️ fix]
|
|
64
|
+
X --> V[🧐 review]
|
|
65
|
+
E --> V
|
|
63
66
|
V --> F[🛠️ fix-by-review]
|
|
64
67
|
F --> S[📤 send-review]
|
|
65
68
|
F --> C[💾 commit]
|
|
66
69
|
V -.-> A[⚡ automate]
|
|
67
70
|
F -.-> A
|
|
71
|
+
X -.-> A
|
|
68
72
|
D[📚 docs] -.-> P
|
|
69
73
|
D -.-> E
|
|
70
74
|
```
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eda-automate
|
|
3
|
-
description: 'Анализирует историю `docs/reviews/` и `docs/
|
|
3
|
+
description: 'Анализирует историю `docs/reviews/`, `docs/review-fixes/` и `docs/fixes/`, а с аргументом `plans` ещё и `docs/plans/`. Ищет повторяющиеся замечания, фиксы и проблемы планирования, предлагает автоматизации, а также черновики дополнений для `docs/rules.md` и `docs/arch.md`. Опирается на инструменты, которые уже работают в проекте; если ничего не подходит — предлагает новый, без дублей с уже установленными. Не внедряет изменения — выдаёт приоритезированный список с черновиками правил, проверок и правок документации. Внедрение — отдельная задача через `eda-plan` + `eda-execute`. Все вопросы — через интерактивный вопрос.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Скил: Автоматизатор (eda-automate)
|
|
7
7
|
|
|
8
|
-
Читаешь историю ревью и фиксов, находишь повторяющиеся
|
|
8
|
+
Читаешь историю ревью и фиксов, находишь повторяющиеся замечания и исправления, предлагаешь, какие из них можно поймать автоматически: кастомным правилом линтера, статанализатора, pre-commit-проверкой. Также предлагаешь, что стоит дописать в `docs/rules.md` или `docs/arch.md`, если повторяющийся паттерн лучше закрепить правилом проекта или архитектурным описанием. Если передан аргумент `plans`, дополнительно читаешь планы из `docs/plans/` и ищешь повторяющиеся проблемы планирования, которые можно ловить автоматической проверкой плана. Не внедряешь — только предлагаешь, с черновиками и оценкой стоимости.
|
|
9
9
|
|
|
10
10
|
## Режимы вызова
|
|
11
11
|
|
|
12
12
|
| Режим | Запуск | Что анализирует |
|
|
13
13
|
|---|---|---|
|
|
14
|
-
| Обычный | `eda-automate` | `docs/reviews/` + `docs/review-fixes/` |
|
|
15
|
-
| С планами | `eda-automate plans` | `docs/reviews/` + `docs/review-fixes/` + `docs/plans/` |
|
|
14
|
+
| Обычный | `eda-automate` | `docs/reviews/` + `docs/review-fixes/` + `docs/fixes/` |
|
|
15
|
+
| С планами | `eda-automate plans` | `docs/reviews/` + `docs/review-fixes/` + `docs/fixes/` + `docs/plans/` |
|
|
16
16
|
|
|
17
17
|
## Главные правила
|
|
18
18
|
|
|
19
19
|
1. **Прочитай `docs/rules.md` и `docs/arch.md`**, если есть. Не предлагай то, что уже зафиксировано как автоматизированное правило.
|
|
20
20
|
2. **Интерактивные вопросы** — по разделу ниже.
|
|
21
|
-
3. **Не внедряешь
|
|
21
|
+
3. **Не внедряешь изменения.** Только отчёт с предложениями. Внедрение автоматизаций или правок `docs/rules.md`/`docs/arch.md` — через `eda-plan` + `eda-execute`.
|
|
22
22
|
4. **Предлагай только повторяющееся.** Минимум — паттерн встречается в 2+ разных ревью или в 3+ местах одного. Единичные замечания не автоматизируем.
|
|
23
|
-
5. **Каждое предложение — с
|
|
23
|
+
5. **Каждое предложение — с черновиком.** Не «надо бы что-то сделать», а конкретный фрагмент: правило линтера, псевдокод/skeleton, текст для `docs/rules.md` или патч для `docs/arch.md`.
|
|
24
24
|
6. **Простой язык. Таблицы** для приоритезации.
|
|
25
25
|
7. **Планы анализируй только с аргументом `plans`.** Без него не читай `docs/plans/`, если пользователь не указал конкретные файлы планов.
|
|
26
26
|
|
|
@@ -38,16 +38,16 @@ description: 'Анализирует историю `docs/reviews/` и `docs/rev
|
|
|
38
38
|
Определи режим по аргументам вызова. Если передан `plans`, включи планы в источники без отдельного вопроса.
|
|
39
39
|
|
|
40
40
|
`AskUserQuestion`: какую историю анализировать.
|
|
41
|
-
- Все ревью + фиксы (по умолчанию)
|
|
42
|
-
- Все ревью + фиксы + планы (если передан `plans`)
|
|
41
|
+
- Все ревью + фиксы по ревью + обычные фиксы (по умолчанию)
|
|
42
|
+
- Все ревью + фиксы по ревью + обычные фиксы + планы (если передан `plans`)
|
|
43
43
|
- Последние N (5/10/20)
|
|
44
44
|
- За период (последние N дней)
|
|
45
45
|
- Конкретные файлы
|
|
46
46
|
|
|
47
|
-
Получи список файлов из `docs/reviews/` и `docs/
|
|
47
|
+
Получи список файлов из `docs/reviews/`, `docs/review-fixes/` и `docs/fixes/`. В режиме `plans` дополнительно получи список файлов из `docs/plans/`.
|
|
48
48
|
|
|
49
49
|
### 2. Прочитать контекст
|
|
50
|
-
- Все выбранные ревью и
|
|
50
|
+
- Все выбранные ревью, отчёты о фиксах по ревью и обычные фиксы.
|
|
51
51
|
- В режиме `plans`: все выбранные планы из `docs/plans/`.
|
|
52
52
|
- `docs/rules.md`, `docs/arch.md` (если есть).
|
|
53
53
|
- Какие языки и фреймворки в проекте — определи сам.
|
|
@@ -59,23 +59,30 @@ description: 'Анализирует историю `docs/reviews/` и `docs/rev
|
|
|
59
59
|
- Нарушения архитектурных границ (импорты не из API соседнего модуля).
|
|
60
60
|
- Забытое: error handling, validation, очистка ресурсов.
|
|
61
61
|
- Стиль: имена, форматирование, порядок.
|
|
62
|
+
- Для обычных фиксов: повторяющиеся причины правок, одинаковые классы багов, места где агент регулярно вручную добавляет проверки/валидацию/guard clauses.
|
|
62
63
|
- Для планов: пропущенные тесты, отсутствующая проверка после шага, слишком крупные шаги, шаги без файлов/модулей, противоречие `docs/rules.md` или `docs/arch.md`, нет критерия готовности, рискованные действия без rollback/backup.
|
|
63
64
|
|
|
64
|
-
Для каждого паттерна собери: где встречался (ссылки на
|
|
65
|
+
Для каждого паттерна собери: где встречался (ссылки на источники), сколько раз, в каких файлах.
|
|
65
66
|
|
|
66
|
-
### 4. Предложить автоматизации
|
|
67
|
-
Для каждого паттерна выбери подходящий
|
|
67
|
+
### 4. Предложить автоматизации и правки docs
|
|
68
|
+
Для каждого паттерна выбери подходящий тип реакции. Один паттерн может дать 1–2 предложения, если нужны и правило в docs, и автоматическая проверка.
|
|
68
69
|
|
|
69
70
|
1. Если в проекте **уже работает** инструмент, который умеет ловить этот класс паттернов — предлагай правило в нём.
|
|
70
71
|
2. Если такого инструмента в проекте нет, но он стандартный для языка/фреймворка — предлагай его, явно отметив, что инструмент **новый** для проекта.
|
|
71
72
|
3. **Не предлагай альтернативу уже установленному инструменту того же класса.** Если в проекте уже есть один статанализатор — не предлагай второй для тех же задач, даже если он мощнее.
|
|
72
73
|
4. Для паттернов из планов предлагай проверку плана: скрипт, markdownlint-правило, pre-commit/check, CI-check или custom validator для `docs/plans/*.md`. Не притворяйся, что runtime-линтер кода поймает проблему, которая живёт только в тексте плана.
|
|
74
|
+
5. Если паттерн повторяется потому, что правило проекта отсутствует, расплывчатое или противоречит практике — предложи дополнение к `docs/rules.md`.
|
|
75
|
+
6. Если паттерн повторяется из-за неясной границы модулей, слоя, API, ownership, потоков данных или зависимостей — предложи правку `docs/arch.md`.
|
|
76
|
+
7. Если правило уже есть в `docs/rules.md` или архитектура уже описана в `docs/arch.md`, не дублируй текст. Предлагай только уточнение, если текущая формулировка реально не закрывает повторяющийся случай.
|
|
73
77
|
|
|
74
78
|
Каждое предложение содержит:
|
|
79
|
+
- Тип: `automation` / `rules` / `architecture`.
|
|
75
80
|
- Что ловит (одна-две фразы простым языком).
|
|
76
81
|
- Где встречалось (ссылки на 2–3 источника: ревью, фиксы или планы).
|
|
77
|
-
-
|
|
78
|
-
-
|
|
82
|
+
- Для `automation`: инструмент и тип правила. Если инструмент **новый** для проекта — пометка «требует установки».
|
|
83
|
+
- Для `rules`: целевой раздел `docs/rules.md` и черновик текста правила.
|
|
84
|
+
- Для `architecture`: целевой раздел `docs/arch.md` и черновик текста или diff-блок.
|
|
85
|
+
- **Черновик** — псевдокод, фрагмент конфигурации или markdown-текст.
|
|
79
86
|
- Польза: `low` / `medium` / `high` (по частоте паттерна и вреду от пропуска).
|
|
80
87
|
|
|
81
88
|
### 5. Сохранить отчёт
|
|
@@ -84,19 +91,19 @@ description: 'Анализирует историю `docs/reviews/` и `docs/rev
|
|
|
84
91
|
```markdown
|
|
85
92
|
---
|
|
86
93
|
date: <YYYY-MM-DD HH:MM>
|
|
87
|
-
sources: [docs/reviews/..., docs/review-fixes/...]
|
|
94
|
+
sources: [docs/reviews/..., docs/review-fixes/..., docs/fixes/...]
|
|
88
95
|
mode: <normal | plans>
|
|
89
96
|
status: draft
|
|
90
97
|
---
|
|
91
98
|
|
|
92
|
-
# Предложения по автоматизации
|
|
99
|
+
# Предложения по автоматизации и правилам
|
|
93
100
|
|
|
94
101
|
## Контекст
|
|
95
|
-
- Проанализировано: N ревью + M фиксов + K планов
|
|
102
|
+
- Проанализировано: N ревью + M фиксов по ревью + F обычных фиксов + K планов
|
|
96
103
|
- Стек проекта: <по конфигам>
|
|
97
104
|
- Уже работающие инструменты: <список>
|
|
98
105
|
|
|
99
|
-
##
|
|
106
|
+
## Автоматизации
|
|
100
107
|
|
|
101
108
|
### 1. <название паттерна>
|
|
102
109
|
- **Что ловит:** ...
|
|
@@ -110,23 +117,36 @@ status: draft
|
|
|
110
117
|
|
|
111
118
|
### 2. ...
|
|
112
119
|
|
|
120
|
+
## Правила и архитектура
|
|
121
|
+
|
|
122
|
+
### 1. <название паттерна>
|
|
123
|
+
- **Тип:** rules / architecture
|
|
124
|
+
- **Куда:** `docs/rules.md` / `docs/arch.md`, раздел <название или «новый раздел»>
|
|
125
|
+
- **Почему:** <какой повторяющийся паттерн закрывает>
|
|
126
|
+
- **Встречалось в:** `docs/fixes/...` (×2), `docs/reviews/...` (×1)
|
|
127
|
+
- **Черновик текста:**
|
|
128
|
+
```markdown
|
|
129
|
+
<готовый фрагмент для docs/rules.md или docs/arch.md>
|
|
130
|
+
```
|
|
131
|
+
- **Польза:** low/medium/high
|
|
132
|
+
|
|
113
133
|
## Приоритезация
|
|
114
|
-
| # | Паттерн | Польза | Приоритет |
|
|
115
|
-
|
|
116
|
-
| 1 | ... | high | 1 |
|
|
134
|
+
| # | Тип | Паттерн | Польза | Приоритет |
|
|
135
|
+
|---|-----|---------|--------|-----------|
|
|
136
|
+
| 1 | automation | ... | high | 1 |
|
|
117
137
|
|
|
118
138
|
## Рекомендация
|
|
119
139
|
<какие 1–3 внедрить первыми и почему — простыми словами>
|
|
120
140
|
```
|
|
121
141
|
|
|
122
142
|
### 6. Финал
|
|
123
|
-
Короткое сообщение: путь к отчёту, сколько паттернов нашёл, топ-3 рекомендации простыми словами, подсказка дальше — «хочешь внедрить → `eda-plan` для плана, потом `eda-execute`».
|
|
143
|
+
Короткое сообщение: путь к отчёту, сколько паттернов нашёл, сколько предложений по автоматизациям и сколько по `docs/rules.md`/`docs/arch.md`, топ-3 рекомендации простыми словами, подсказка дальше — «хочешь внедрить → `eda-plan` для плана, потом `eda-execute`».
|
|
124
144
|
|
|
125
145
|
## Чего НЕ делать
|
|
126
|
-
- Внедрять автоматизации
|
|
146
|
+
- Внедрять автоматизации или править `docs/rules.md`/`docs/arch.md` — только предлагать.
|
|
127
147
|
- Предлагать на основе единичных замечаний — иначе получится белый шум.
|
|
128
148
|
- Игнорировать существующий стек и предлагать новый инструмент, когда уже есть подходящий.
|
|
129
149
|
- Предлагать второй инструмент того же класса в дополнение к уже установленному.
|
|
130
150
|
- Сохранять отчёт куда-либо кроме `docs/automations/`.
|
|
131
|
-
- Дублировать в предложениях
|
|
151
|
+
- Дублировать в предложениях правила или архитектурные тезисы, которые уже зафиксированы в `docs/rules.md` или `docs/arch.md`.
|
|
132
152
|
- В обычном режиме без `plans` смешивать проблемы планирования с ревью и фиксами.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eda-commit
|
|
3
|
-
description: 'Формирует коммит из незакоммиченных изменений в стиле проекта (по docs/rules.md или истории),
|
|
3
|
+
description: 'Формирует коммит из незакоммиченных изменений в стиле проекта (по docs/rules.md или истории), включая связанные артефакты из `docs/**`, которые создали скилы. Коммитит без `--no-verify`. В конце спрашивает интерактивно: push (если есть remote) / merge в main + переключение + удаление ветки (если не в main) / ничего. Не правит логику кода, не пишет тесты — это `eda-execute`, `eda-fix` или `eda-fix-by-review`.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Скил: Коммитер (eda-commit)
|
|
@@ -13,7 +13,8 @@ description: 'Формирует коммит из незакоммиченны
|
|
|
13
13
|
2. **Не правишь логику кода и не пишешь тесты.** Если на этапе коммита что-то не работает (упал hook, обнаружились сырые правки) — спроси через `AskUserQuestion`, не «допиливай» молча.
|
|
14
14
|
3. **Pre-commit / pre-push hooks не отключай.** Никаких `--no-verify`. Hook упал → правим причину → новый коммит (не `--amend`).
|
|
15
15
|
4. **Один логический коммит за вызов.** Если в diff видишь явно разные изменения — спроси через `AskUserQuestion`, разделить на несколько коммитов или коммитить одним.
|
|
16
|
-
5.
|
|
16
|
+
5. **Не пропускай `docs/**`.** Планы, исследования, журналы, ревью, отчёты о фиксах, автоматизации, `docs/rules.md` и `docs/arch.md`, созданные или обновлённые скилами, — часть изменения. Если они относятся к текущей задаче, добавляй их в коммит вместе с кодом.
|
|
17
|
+
6. **Простой язык** в сообщениях пользователю.
|
|
17
18
|
|
|
18
19
|
## Интерактивные вопросы
|
|
19
20
|
|
|
@@ -27,13 +28,20 @@ description: 'Формирует коммит из незакоммиченны
|
|
|
27
28
|
## Этапы
|
|
28
29
|
|
|
29
30
|
### 1. Посмотреть состояние
|
|
30
|
-
`git status`, `git diff --stat`, `git log -5 --oneline` — определи стиль коммитов проекта по последним коммитам.
|
|
31
|
+
`git status`, `git diff --stat`, `git log -5 --oneline` — определи стиль коммитов проекта по последним коммитам. Смотри и tracked, и untracked файлы.
|
|
31
32
|
|
|
32
33
|
Если незакоммиченных изменений нет — сообщи и выйди.
|
|
33
34
|
|
|
34
35
|
### 2. Сформировать коммит
|
|
35
36
|
Составь сообщение в стиле проекта: первая строка короткая (до ~70 символов), при необходимости — тело с пояснением «почему» (не «что» — это в diff).
|
|
36
37
|
|
|
38
|
+
Перед `git add` явно выбери файлы для коммита. Включай связанные документы из `docs/**`, особенно:
|
|
39
|
+
- `docs/plans/`, `docs/researches/`, `docs/executions/`;
|
|
40
|
+
- `docs/reviews/`, `docs/review-fixes/`, `docs/fixes/`;
|
|
41
|
+
- `docs/automations/`, `docs/rules.md`, `docs/arch.md`.
|
|
42
|
+
|
|
43
|
+
Не считай эти файлы «служебным шумом» и не оставляй их untracked, если они созданы скилами для текущей задачи. Если документ из `docs/**` выглядит несвязанным с текущим изменением — спроси через `AskUserQuestion`, включать ли его.
|
|
44
|
+
|
|
37
45
|
Закоммить через `git add` (точечно по файлам, не `-A`) и `git commit -m`. Не пуш, не `--amend`, не `--no-verify`.
|
|
38
46
|
|
|
39
47
|
Если hook упал — прочитай вывод, исправь причину, повтори через **новый** коммит (не amend).
|
|
@@ -75,6 +83,7 @@ description: 'Формирует коммит из незакоммиченны
|
|
|
75
83
|
- `--no-verify`, `--no-gpg-sign` — никогда.
|
|
76
84
|
- `--amend` существующего коммита — создавай новый.
|
|
77
85
|
- `git add -A` или `git add .` — добавляй файлы по имени.
|
|
86
|
+
- Пропускать связанные файлы из `docs/**` только потому, что это документация или артефакты скилов.
|
|
78
87
|
- Коммитить файлы с похожими на секреты именами (`.env`, `credentials*`) без явного подтверждения через `AskUserQuestion`.
|
|
79
88
|
- Push --force в main или master.
|
|
80
89
|
- Делать ревью или править логику кода — это другие скилы.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eda-fix
|
|
3
|
+
description: 'Делает обычные фиксы по плану, файлу плана или короткому текстовому контексту. Перед правками читает `docs/rules.md` и `docs/arch.md`, если есть. Правит код, добавляет нужные тесты, прогоняет проверки и сохраняет историю в `docs/fixes/`. Не делает ревью и не коммитит.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Скил: Фиксер (eda-fix)
|
|
7
|
+
|
|
8
|
+
Делаешь конкретные исправления и сохраняешь отчёт, чтобы потом было понятно, что и почему правилось. Это не выполнение большого плана и не фиксы по ревью: вход может быть короткой строкой, баг-репортом, файлом плана или списком задач.
|
|
9
|
+
|
|
10
|
+
## Режимы вызова
|
|
11
|
+
|
|
12
|
+
| Режим | Запуск | Что делает |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| По контексту | `eda-fix <что исправить>` | Делает фиксы по тексту пользователя |
|
|
15
|
+
| По плану | `eda-fix docs/plans/<file>.md` | Делает фиксы по указанному плану |
|
|
16
|
+
|
|
17
|
+
## Главные правила
|
|
18
|
+
|
|
19
|
+
1. **Перед правкой кода** прочитай `docs/rules.md` и `docs/arch.md`, если есть. Файлов нет — продолжай.
|
|
20
|
+
2. **Вход обязателен.** Если не передан план, файл или понятный текст задачи — спроси через интерактивный вопрос.
|
|
21
|
+
3. **Делай только указанные фиксы.** Не расширяй задачу до рефакторинга и не чини соседние проблемы без необходимости.
|
|
22
|
+
4. **Тесты рядом с правкой.** Меняешь поведение — добавь или обнови точечный тест.
|
|
23
|
+
5. **Финальная проверка обязательна.** В конце прогони подходящие тесты и линтеры проекта.
|
|
24
|
+
6. **Историю фиксируй в `docs/fixes/`.** Отчёт обязателен даже для маленькой правки.
|
|
25
|
+
7. **Не коммить и не пушь.** Это `eda-commit`. Не делай ревью — это `eda-review`.
|
|
26
|
+
|
|
27
|
+
## Интерактивные вопросы
|
|
28
|
+
|
|
29
|
+
Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
|
|
30
|
+
- Claude Code: используй `AskUserQuestion`.
|
|
31
|
+
- Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
|
|
32
|
+
- Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
|
|
33
|
+
- Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
|
|
34
|
+
|
|
35
|
+
## Этапы
|
|
36
|
+
|
|
37
|
+
### 1. Определить задачу
|
|
38
|
+
Определи `$FIX_CONTEXT`:
|
|
39
|
+
- если передан путь к файлу — прочитай его;
|
|
40
|
+
- если это план из `docs/plans/` — используй его как план фикса;
|
|
41
|
+
- если передан текст — используй его как контекст;
|
|
42
|
+
- если входа нет или он неоднозначен — спроси через `AskUserQuestion`.
|
|
43
|
+
|
|
44
|
+
### 2. Прочитать рамку проекта
|
|
45
|
+
Прочитай `docs/rules.md` и `docs/arch.md`, если есть. Если `$FIX_CONTEXT` ссылается на research, review, issue или другой файл — прочитай и его.
|
|
46
|
+
|
|
47
|
+
### 3. Сделать фикс
|
|
48
|
+
Найди релевантный код и внеси минимальные правки. Если задача состоит из нескольких пунктов, иди по ним последовательно. Останавливайся и спрашивай, если пункт противоречит коду, требует продуктового решения, рискованной операции, миграции, удаления данных или затрагивает секреты.
|
|
49
|
+
|
|
50
|
+
### 4. Добавить или обновить тесты
|
|
51
|
+
Если фикс меняет поведение — добавь тест рядом с изменением или обнови существующий. Если тесты не нужны, в отчёте коротко объясни почему.
|
|
52
|
+
|
|
53
|
+
### 5. Финальная проверка
|
|
54
|
+
Прогони подходящие тесты и линтеры. Команды определи по стеку проекта. Свои поломки — исправь и повтори. Чужие или несвязанные поломки — зафиксируй в отчёте и спроси через `AskUserQuestion`, если без решения нельзя продолжать.
|
|
55
|
+
|
|
56
|
+
### 6. Сохранить отчёт
|
|
57
|
+
Сохрани отчёт в `docs/fixes/{YYYY-MM-DD}_{HH-MM}_{slug}.md`.
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
---
|
|
61
|
+
date: <YYYY-MM-DD HH:MM>
|
|
62
|
+
source: <text | path | docs/plans/...>
|
|
63
|
+
status: done
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
# Фикс: <краткий заголовок>
|
|
67
|
+
|
|
68
|
+
## Контекст
|
|
69
|
+
<что было передано на вход и какие правила/архитектура учтены>
|
|
70
|
+
|
|
71
|
+
## Что изменено
|
|
72
|
+
| # | Файл | Что изменено | Зачем |
|
|
73
|
+
|---|------|--------------|-------|
|
|
74
|
+
| 1 | `path/file.ext` | ... | ... |
|
|
75
|
+
|
|
76
|
+
## Тесты и проверки
|
|
77
|
+
| Команда | Результат | Заметки |
|
|
78
|
+
|---------|-----------|---------|
|
|
79
|
+
| `<command>` | ✓ / ✗ | ... |
|
|
80
|
+
|
|
81
|
+
## Открытые вопросы
|
|
82
|
+
<если нет — «Нет»>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 7. Финал
|
|
86
|
+
Короткое сообщение: путь к отчёту, что исправлено, какие тесты/линтеры прошли, состояние git («не закоммичено»), дальше — `eda-review` или `eda-commit`.
|
|
87
|
+
|
|
88
|
+
## Чего НЕ делать
|
|
89
|
+
- Коммитить, пушить, создавать PR.
|
|
90
|
+
- Делать ревью вместо фикса.
|
|
91
|
+
- Выполнять большой план с чекбоксами и журналом `docs/executions/` — это `eda-execute`.
|
|
92
|
+
- Применять замечания из готового ревью — это `eda-fix-by-review`.
|
|
93
|
+
- Сохранять отчёт куда-либо кроме `docs/fixes/`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eda-research
|
|
3
|
-
description: 'Глубокое исследование темы или
|
|
3
|
+
description: 'Глубокое исследование темы или задачи в read-only режиме. Без правки кода. Все вопросы — через интерактивный вопрос. Mermaid-диаграммы и markdown-таблицы — там где это даёт ясность. Итог сохраняется в docs/researches/. По умолчанию без кросс-ревью; кросс-ревью соседним агентом (Claude ↔ Codex) включается флагом `strict`.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Скил: Исследователь (eda-research)
|
|
@@ -37,7 +37,7 @@ description: 'Глубокое исследование темы или зада
|
|
|
37
37
|
Прочитай запрос. Сформулируй цель и 3–7 конкретных вопросов. Неясности — задай через `AskUserQuestion`. Не уходи дальше, пока цель не подтверждена.
|
|
38
38
|
|
|
39
39
|
### 2. Собрать материал
|
|
40
|
-
|
|
40
|
+
Работай в read-only режиме: читай файлы, ищи по проекту, смотри историю и запускай только команды, которые не меняют рабочее дерево. Код, конфиги и зависимости не правь. Запись разрешена только на этапе 4 при сохранении итогового отчёта в `docs/researches/`.
|
|
41
41
|
|
|
42
42
|
### 3. Диаграммы (если уместно)
|
|
43
43
|
Есть поток / связи / состояния / последовательность шагов — нарисуй 1–3 Mermaid-диаграммы. Подписи на русском. Если показывать нечего — в разделе диаграмм отчёта одна строка: «Не требуется — тема не имеет графовой структуры.»
|
package/lib/install.js
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
|
+
import checkbox from '@inquirer/checkbox';
|
|
1
2
|
import fs from 'node:fs/promises';
|
|
2
3
|
import path from 'node:path';
|
|
3
|
-
import readline from 'node:readline/promises';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
|
|
6
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
7
|
const __dirname = path.dirname(__filename);
|
|
8
8
|
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
9
9
|
const SKILLS_SRC = path.join(PACKAGE_ROOT, 'docs/skills');
|
|
10
|
+
const TARGET_CHOICES = [
|
|
11
|
+
{ value: 'claude', label: 'Claude Code', dir: '.claude/skills/' },
|
|
12
|
+
{ value: 'codex', label: 'Codex CLI', dir: '.codex/skills/' }
|
|
13
|
+
];
|
|
10
14
|
|
|
11
|
-
export async function init({ cwd }) {
|
|
12
|
-
const targets = await askTargets();
|
|
15
|
+
export async function init({ cwd, input = process.stdin, output = process.stdout }) {
|
|
16
|
+
const targets = await askTargets({ input, output });
|
|
13
17
|
if (targets.length === 0) {
|
|
14
|
-
|
|
18
|
+
output.write('Ничего не выбрано — выходим.\n');
|
|
15
19
|
return;
|
|
16
20
|
}
|
|
17
21
|
await syncSkills(cwd, targets);
|
|
@@ -27,25 +31,24 @@ export async function update({ cwd }) {
|
|
|
27
31
|
await syncSkills(cwd, targets);
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
async function askTargets() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
' [1] Claude Code (.claude/skills/)\n' +
|
|
35
|
-
' [2] Codex CLI (.codex/skills/)\n' +
|
|
36
|
-
' [3] Обе среды\n' +
|
|
37
|
-
'Выбор [3]: '
|
|
38
|
-
);
|
|
39
|
-
rl.close();
|
|
40
|
-
const choice = answer.trim() || '3';
|
|
41
|
-
switch (choice) {
|
|
42
|
-
case '1': return ['claude'];
|
|
43
|
-
case '2': return ['codex'];
|
|
44
|
-
case '3': return ['claude', 'codex'];
|
|
45
|
-
default:
|
|
46
|
-
process.stdout.write(`Неизвестный выбор «${choice}» — выходим.\n`);
|
|
47
|
-
return [];
|
|
34
|
+
export async function askTargets({ input = process.stdin, output = process.stdout } = {}) {
|
|
35
|
+
if (!input.isTTY || !output.isTTY) {
|
|
36
|
+
output.write('Нет интерактивного терминала — устанавливаю Claude Code и Codex CLI.\n');
|
|
37
|
+
return TARGET_CHOICES.map(choice => choice.value);
|
|
48
38
|
}
|
|
39
|
+
|
|
40
|
+
return checkbox({
|
|
41
|
+
message: 'Куда устанавливать скилы?',
|
|
42
|
+
instructions: 'Стрелки — выбрать, Space — отметить, Enter — продолжить',
|
|
43
|
+
choices: TARGET_CHOICES.map(choice => ({
|
|
44
|
+
name: `${choice.label} (${choice.dir})`,
|
|
45
|
+
value: choice.value,
|
|
46
|
+
checked: true
|
|
47
|
+
}))
|
|
48
|
+
}, {
|
|
49
|
+
input,
|
|
50
|
+
output
|
|
51
|
+
});
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
async function detectTargets(cwd) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gian-tiaga/eda",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Набор скилов eda-* для Claude Code и Codex CLI: research, plan, execute, review, fix, send-review, commit, docs, automate",
|
|
3
|
+
"version": "0.2.8",
|
|
4
|
+
"description": "Набор скилов eda-* для Claude Code и Codex CLI: research, plan, execute, fix, review, fix-by-review, send-review, commit, docs, automate",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"eda": "bin/cli.js"
|
|
@@ -35,5 +35,8 @@
|
|
|
35
35
|
"homepage": "https://github.com/falur/eda#readme",
|
|
36
36
|
"bugs": {
|
|
37
37
|
"url": "https://github.com/falur/eda/issues"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@inquirer/checkbox": "^4.3.2"
|
|
38
41
|
}
|
|
39
42
|
}
|