@gian-tiaga/eda 0.2.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/README.md +128 -0
- package/bin/cli.js +34 -0
- package/docs/skills/eda-automate.md +108 -0
- package/docs/skills/eda-commit.md +71 -0
- package/docs/skills/eda-docs.md +146 -0
- package/docs/skills/eda-execute.md +111 -0
- package/docs/skills/eda-fix-by-review.md +86 -0
- package/docs/skills/eda-plan.md +118 -0
- package/docs/skills/eda-research.md +97 -0
- package/docs/skills/eda-review.md +124 -0
- package/docs/skills/eda-send-review.md +90 -0
- package/lib/install.js +108 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# 🌊 eda
|
|
2
|
+
|
|
3
|
+
> Поточная разработка с AI-агентами — на русском языке.
|
|
4
|
+
> Набор готовых скилов для **Claude Code** и **Codex CLI**, которые ведут тебя через весь цикл: от исследования до коммита.
|
|
5
|
+
|
|
6
|
+
`eda` — это девять скилов, каждый отвечает за свой кусок работы. Вместо того чтобы каждый раз объяснять модели, как делать ревью или как исполнять план, ты говоришь одно слово — и она следует чёткой инструкции на русском, со всеми правилами, проверками и артефактами в нужных папках.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ⚡ Установка
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install -g @gian-tiaga/eda
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
В корне твоего проекта:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
eda init
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Скил спросит, куда ставить — в Claude Code, в Codex или в обе среды сразу. Дальше можно работать.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 🛠️ Скилы
|
|
27
|
+
|
|
28
|
+
| Скил | Что делает | Куда складывает |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `eda-research` | Глубоко изучает тему или задачу. Без правок кода. Все вопросы — через интерактивный диалог. На выходе — понятный отчёт со ссылками на источники, диаграммами и таблицами | `docs/researches/` |
|
|
31
|
+
| `eda-plan` | Пишет план реализации через стандартный Plan Mode хост-агента. Подтягивает контекст из `docs/rules.md`, `docs/arch.md`, при желании — релевантное исследование. Затем три параллельных модели (слабая, средняя, мощная) проверяют план на реалистичность, пропущенные шаги и нарушения правил — главный планировщик сам решает, что применить | `docs/plans/` |
|
|
32
|
+
| `eda-execute` | Выполняет план. Спрашивает, где работать (текущая ветка, новая ветка, отдельный worktree). Тесты пишет внутри каждого шага. В конце — полный прогон тестов и линтеров | `docs/executions/` |
|
|
33
|
+
| `eda-review` | Делает код-ревью с оценкой 0–100. Затем три параллельных модели (Sonnet, Haiku, Opus) проверяют само ревью — добавляют пропущенное, убирают лишнее. В строгом режиме — ещё и кросс-ревью между Claude и Codex | `docs/reviews/` |
|
|
34
|
+
| `eda-fix-by-review` | Применяет замечания из ревью. Обязательные — сразу. Спорные — спрашивает. В конце ссылается на отчёт прямо в файле ревью | `docs/review-fixes/` |
|
|
35
|
+
| `eda-send-review` | Отправляет ревью на GitHub PR через `gh` — как комментарий, review, approve или request-changes. Сам определяет PR по текущей ветке | (комментарий в PR) |
|
|
36
|
+
| `eda-commit` | Делает один аккуратный коммит в стиле проекта. В конце спрашивает: push, merge в main + удалить ветку, или ничего | (git) |
|
|
37
|
+
| `eda-docs` | Создаёт или обновляет `docs/rules.md` (максимально строгие правила для твоего стека), `docs/arch.md` (архитектура проекта) и шапку `AGENTS.md`. Может предлагать инструменты, которых ещё нет в проекте | `docs/rules.md`, `docs/arch.md`, `AGENTS.md` |
|
|
38
|
+
| `eda-automate` | Анализирует историю ревью и фиксов. Если какое-то замечание встречается раз за разом — предлагает кастомное правило линтера или статанализатора, чтобы ловить это автоматически | `docs/automations/` |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 🚩 Флаги скилов
|
|
43
|
+
|
|
44
|
+
У некоторых скилов есть флаг `strict` — он включает дополнительные тяжёлые проверки. Передаётся как часть запроса агенту, например: `eda-research strict <тема>` или просто `сделай ревью этого PR в strict-режиме`.
|
|
45
|
+
|
|
46
|
+
Скилы, которых нет в таблице ниже, флагов не поддерживают — у них всё включено по умолчанию.
|
|
47
|
+
|
|
48
|
+
| Скил | Флаг | Что включает | Когда стоит использовать |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| `eda-research` | `strict` | После сохранения отчёта отдаёт его соседнему CLI (Claude → Codex или наоборот) на критическое ревью; затем доправляет отчёт по их замечаниям | Серьёзные исследования, которые лягут в основу больших решений; когда хочется второго мнения от другой модели/среды |
|
|
51
|
+
| `eda-plan` | `strict` | После мета-ревью трёх моделей (это есть всегда) отдаёт план соседнему CLI на дополнительный круг проверки; доправляет план | Большие или ответственные планы, особенно затрагивающие смежные системы |
|
|
52
|
+
| `eda-review` | `strict` | После мета-ревью тремя моделями (Sonnet/Haiku/Opus — это есть всегда) отдаёт ревью соседнему CLI на дополнительный круг проверки; доправляет ревью по его замечаниям | Ревью важных PR; когда нужен максимальный охват |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 🔄 Воркфлоу
|
|
57
|
+
|
|
58
|
+
```mermaid
|
|
59
|
+
flowchart LR
|
|
60
|
+
R[🔍 research] --> P[📝 plan]
|
|
61
|
+
P --> E[⚙️ execute]
|
|
62
|
+
E --> V[🧐 review]
|
|
63
|
+
V --> F[🛠️ fix-by-review]
|
|
64
|
+
F --> S[📤 send-review]
|
|
65
|
+
F --> C[💾 commit]
|
|
66
|
+
V -.-> A[⚡ automate]
|
|
67
|
+
F -.-> A
|
|
68
|
+
D[📚 docs] -.-> P
|
|
69
|
+
D -.-> E
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Использовать всю цепочку не обязательно — каждый скил самодостаточен. Можно начать с `eda-research`, или сразу с `eda-execute` на готовом плане, или просто `eda-commit`, когда правки уже сделаны.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🎯 Главные принципы
|
|
77
|
+
|
|
78
|
+
- **Простой язык.** Скилы общаются с тобой так, чтобы понял человек без глубоких знаний предмета. Термины — только когда без них нельзя.
|
|
79
|
+
- **Все вопросы — структурированно.** Никаких «а уточни, пожалуйста, на какую ветку?» в свободном тексте. Только через `AskUserQuestion` (или нумерованный список в Codex).
|
|
80
|
+
- **Артефакты по папкам.** Исследования отдельно, планы отдельно, ревью отдельно. Между файлами — ссылки. Через месяц легко найти, кто что когда решал.
|
|
81
|
+
- **Границы между скилами жёсткие.** `execute` не коммитит — это работа `commit`. `review` не правит код — это `fix-by-review`. Никаких размытых ответственностей.
|
|
82
|
+
- **Доверие модели.** Скилы короткие. Они говорят «что» и «почему», а «как именно» — модель разбирается сама.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 💻 Команды
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
eda init # выбрать Claude Code / Codex / обе среды и установить скилы
|
|
90
|
+
eda update # обновить уже установленные скилы из текущей версии пакета
|
|
91
|
+
eda --help # справка
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Когда выходит новая версия пакета:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm update -g @gian-tiaga/eda # подтянуть новый код
|
|
98
|
+
eda update # синхронизировать скилы в текущем проекте
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 📁 Куда устанавливаются скилы
|
|
104
|
+
|
|
105
|
+
| Среда | Куда |
|
|
106
|
+
|---|---|
|
|
107
|
+
| **Claude Code** | `<project>/.claude/skills/<skill>/SKILL.md` — отдельная папка на каждый скил |
|
|
108
|
+
| **Codex CLI** | `<project>/.codex/skills/<skill>.md` — отдельный файл на каждый скил |
|
|
109
|
+
|
|
110
|
+
`eda update` идемпотентно перезаписывает файлы в обеих папках. Если ты хочешь подправить скил локально — лучше копию сделай рядом, а не прямо в `.claude/skills/` или `.codex/skills/`, иначе при следующем `update` твои правки потеряются.
|
|
111
|
+
|
|
112
|
+
`AGENTS.md` (как и любые другие файлы в корне проекта) установщик **не трогает**. Если хочешь, чтобы Codex автоматически подгружал скилы, дай ему знать сам — например, одной строкой в `AGENTS.md`: «следуй инструкциям из `.codex/skills/`».
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 🤝 Для кого это
|
|
117
|
+
|
|
118
|
+
- Для тех, кто **постоянно** пишет код с AI-агентом и устал каждый раз заново объяснять, как делать ревью.
|
|
119
|
+
- Для команд, где хочется единый стандарт работы с агентами — чтобы ревью у всех было пронумеровано и оценено, планы лежали в одной папке, а коммиты были по одному стилю.
|
|
120
|
+
- Для разработчиков, которые любят **строгость**: максимально жёсткие правила, обязательные тесты, мета-проверки ревью несколькими моделями, кросс-проверка через соседний CLI.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 📜 Лицензия
|
|
125
|
+
|
|
126
|
+
MIT.
|
|
127
|
+
|
|
128
|
+
Используй, форкай, переписывай под себя. Будет здорово, если поделишься улучшениями обратно.
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { init, update } from '../lib/install.js';
|
|
3
|
+
|
|
4
|
+
const cmd = process.argv[2];
|
|
5
|
+
|
|
6
|
+
const HELP = `eda — установка и обновление скилов eda-* для Claude Code и Codex CLI.
|
|
7
|
+
|
|
8
|
+
Использование:
|
|
9
|
+
eda init — выбрать целевые среды (Claude / Codex / обе) и установить скилы
|
|
10
|
+
eda update — обновить уже установленные скилы в текущем проекте
|
|
11
|
+
eda --help — показать эту справку
|
|
12
|
+
`;
|
|
13
|
+
|
|
14
|
+
try {
|
|
15
|
+
switch (cmd) {
|
|
16
|
+
case 'init':
|
|
17
|
+
await init({ cwd: process.cwd() });
|
|
18
|
+
break;
|
|
19
|
+
case 'update':
|
|
20
|
+
await update({ cwd: process.cwd() });
|
|
21
|
+
break;
|
|
22
|
+
case undefined:
|
|
23
|
+
case '-h':
|
|
24
|
+
case '--help':
|
|
25
|
+
process.stdout.write(HELP);
|
|
26
|
+
break;
|
|
27
|
+
default:
|
|
28
|
+
process.stderr.write(`Неизвестная команда: ${cmd}\n\n${HELP}`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
} catch (err) {
|
|
32
|
+
process.stderr.write(`Ошибка: ${err.message}\n`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eda-automate
|
|
3
|
+
description: Анализирует историю `docs/reviews/` и `docs/review-fixes/`, ищет повторяющиеся замечания и предлагает автоматизации — кастомные правила линтеров, статанализаторов, pre-commit-проверок. Опирается на инструменты, которые уже работают в проекте; если ничего не подходит — предлагает новый, без дублей с уже установленными. Не внедряет автоматизации — выдаёт приоритезированный список с черновиками правил. Внедрение — отдельная задача через `eda-plan` + `eda-execute`. Все вопросы — через AskUserQuestion.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Скил: Автоматизатор (eda-automate)
|
|
7
|
+
|
|
8
|
+
Читаешь историю ревью и фиксов, находишь повторяющиеся замечания, предлагаешь, какие из них можно поймать автоматически: кастомным правилом линтера, статанализатора, pre-commit-проверкой. Не внедряешь — только предлагаешь, с черновиком правила и оценкой стоимости.
|
|
9
|
+
|
|
10
|
+
## Главные правила
|
|
11
|
+
|
|
12
|
+
1. **Прочитай `docs/rules.md` и `docs/arch.md`**, если есть. Не предлагай то, что уже зафиксировано как автоматизированное правило.
|
|
13
|
+
2. **Все вопросы — через `AskUserQuestion`** (в Codex — короткий нумерованный список).
|
|
14
|
+
3. **Не внедряешь автоматизации.** Только отчёт с предложениями. Внедрение — `eda-plan` + `eda-execute`.
|
|
15
|
+
4. **Предлагай только повторяющееся.** Минимум — паттерн встречается в 2+ разных ревью или в 3+ местах одного. Единичные замечания не автоматизируем.
|
|
16
|
+
5. **Каждое предложение — с черновиком правила.** Не «надо бы что-то сделать», а конкретный фрагмент: имя инструмента, имя правила, псевдокод/skeleton.
|
|
17
|
+
6. **Простой язык. Таблицы** для приоритезации.
|
|
18
|
+
|
|
19
|
+
## Этапы
|
|
20
|
+
|
|
21
|
+
### 1. Выбрать диапазон
|
|
22
|
+
`AskUserQuestion`: какую историю анализировать.
|
|
23
|
+
- Все ревью + фиксы (по умолчанию)
|
|
24
|
+
- Последние N (5/10/20)
|
|
25
|
+
- За период (последние N дней)
|
|
26
|
+
- Конкретные файлы
|
|
27
|
+
|
|
28
|
+
Получи список файлов из `docs/reviews/` и `docs/review-fixes/`.
|
|
29
|
+
|
|
30
|
+
### 2. Прочитать контекст
|
|
31
|
+
- Все выбранные ревью и отчёты о фиксах.
|
|
32
|
+
- `docs/rules.md`, `docs/arch.md` (если есть).
|
|
33
|
+
- Какие языки и фреймворки в проекте — определи сам.
|
|
34
|
+
- Какие инструменты статанализа уже установлены и работают — определи по конфигам и зависимостям проекта.
|
|
35
|
+
|
|
36
|
+
### 3. Найти повторяющиеся паттерны
|
|
37
|
+
Сгруппируй замечания по сути (не по точному тексту). Примеры паттернов:
|
|
38
|
+
- Запрещённые конструкции языка/фреймворка.
|
|
39
|
+
- Нарушения архитектурных границ (импорты не из API соседнего модуля).
|
|
40
|
+
- Забытое: error handling, validation, очистка ресурсов.
|
|
41
|
+
- Стиль: имена, форматирование, порядок.
|
|
42
|
+
|
|
43
|
+
Для каждого паттерна собери: где встречался (ссылки на ревью), сколько раз, в каких файлах.
|
|
44
|
+
|
|
45
|
+
### 4. Предложить автоматизации
|
|
46
|
+
Для каждого паттерна выбери подходящий инструмент. Логика выбора:
|
|
47
|
+
|
|
48
|
+
1. Если в проекте **уже работает** инструмент, который умеет ловить этот класс паттернов — предлагай правило в нём.
|
|
49
|
+
2. Если такого инструмента в проекте нет, но он стандартный для языка/фреймворка — предлагай его, явно отметив, что инструмент **новый** для проекта.
|
|
50
|
+
3. **Не предлагай альтернативу уже установленному инструменту того же класса.** Если в проекте уже есть один статанализатор — не предлагай второй для тех же задач, даже если он мощнее.
|
|
51
|
+
|
|
52
|
+
Каждое предложение содержит:
|
|
53
|
+
- Что ловит (одна-две фразы простым языком).
|
|
54
|
+
- Где встречалось (ссылки на 2–3 ревью).
|
|
55
|
+
- Инструмент и тип правила. Если инструмент **новый** для проекта — пометка «требует установки».
|
|
56
|
+
- **Черновик правила** — псевдокод или фрагмент конфигурации.
|
|
57
|
+
- Польза: `low` / `medium` / `high` (по частоте паттерна и вреду от пропуска).
|
|
58
|
+
|
|
59
|
+
### 5. Сохранить отчёт
|
|
60
|
+
`docs/automations/{YYYY-MM-DD}_{HH-MM}_{slug}.md`. Slug — короткое описание набора (например, `php-strict-rules`).
|
|
61
|
+
|
|
62
|
+
```markdown
|
|
63
|
+
---
|
|
64
|
+
date: <YYYY-MM-DD HH:MM>
|
|
65
|
+
sources: [docs/reviews/..., docs/review-fixes/...]
|
|
66
|
+
status: draft
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
# Предложения по автоматизации
|
|
70
|
+
|
|
71
|
+
## Контекст
|
|
72
|
+
- Проанализировано: N ревью + M фиксов
|
|
73
|
+
- Стек проекта: <по конфигам>
|
|
74
|
+
- Уже работающие инструменты: <список>
|
|
75
|
+
|
|
76
|
+
## Предложения
|
|
77
|
+
|
|
78
|
+
### 1. <название паттерна>
|
|
79
|
+
- **Что ловит:** ...
|
|
80
|
+
- **Встречалось в:** `docs/reviews/...` (×2), `docs/reviews/...` (×3)
|
|
81
|
+
- **Инструмент:** <название> (если новый для проекта — пометка «требует установки»)
|
|
82
|
+
- **Черновик правила:**
|
|
83
|
+
```<язык>
|
|
84
|
+
<псевдокод/skeleton>
|
|
85
|
+
```
|
|
86
|
+
- **Польза:** low/medium/high
|
|
87
|
+
|
|
88
|
+
### 2. ...
|
|
89
|
+
|
|
90
|
+
## Приоритезация
|
|
91
|
+
| # | Паттерн | Польза | Приоритет |
|
|
92
|
+
|---|---------|--------|-----------|
|
|
93
|
+
| 1 | ... | high | 1 |
|
|
94
|
+
|
|
95
|
+
## Рекомендация
|
|
96
|
+
<какие 1–3 внедрить первыми и почему — простыми словами>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 6. Финал
|
|
100
|
+
Короткое сообщение: путь к отчёту, сколько паттернов нашёл, топ-3 рекомендации простыми словами, подсказка дальше — «хочешь внедрить → `eda-plan` для плана, потом `eda-execute`».
|
|
101
|
+
|
|
102
|
+
## Чего НЕ делать
|
|
103
|
+
- Внедрять автоматизации (создавать конфиги, ставить пакеты, править pre-commit) — только предлагать.
|
|
104
|
+
- Предлагать на основе единичных замечаний — иначе получится белый шум.
|
|
105
|
+
- Игнорировать существующий стек и предлагать новый инструмент, когда уже есть подходящий.
|
|
106
|
+
- Предлагать второй инструмент того же класса в дополнение к уже установленному.
|
|
107
|
+
- Сохранять отчёт куда-либо кроме `docs/automations/`.
|
|
108
|
+
- Дублировать в предложениях правила, которые уже зафиксированы в `docs/rules.md` как автоматизированные.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eda-commit
|
|
3
|
+
description: Формирует коммит из незакоммиченных изменений в стиле проекта (по docs/rules.md или истории), коммитит без `--no-verify`. В конце спрашивает через AskUserQuestion: push (если есть remote) / merge в main + переключение + удаление ветки (если не в main) / ничего. Не правит логику кода, не пишет тесты — это `eda-execute` или `eda-fix-by-review`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Скил: Коммитер (eda-commit)
|
|
7
|
+
|
|
8
|
+
Берёшь незакоммиченные изменения, делаешь один аккуратный коммит, спрашиваешь у пользователя что делать дальше с веткой и remote.
|
|
9
|
+
|
|
10
|
+
## Главные правила
|
|
11
|
+
|
|
12
|
+
1. **Все вопросы — через `AskUserQuestion`** (в Codex — короткий нумерованный список).
|
|
13
|
+
2. **Не правишь логику кода и не пишешь тесты.** Если на этапе коммита что-то не работает (упал hook, обнаружились сырые правки) — спроси через `AskUserQuestion`, не «допиливай» молча.
|
|
14
|
+
3. **Pre-commit / pre-push hooks не отключай.** Никаких `--no-verify`. Hook упал → правим причину → новый коммит (не `--amend`).
|
|
15
|
+
4. **Один логический коммит за вызов.** Если в diff видишь явно разные изменения — спроси через `AskUserQuestion`, разделить на несколько коммитов или коммитить одним.
|
|
16
|
+
5. **Простой язык** в сообщениях пользователю.
|
|
17
|
+
|
|
18
|
+
## Этапы
|
|
19
|
+
|
|
20
|
+
### 1. Посмотреть состояние
|
|
21
|
+
`git status`, `git diff --stat`, `git log -5 --oneline` — определи стиль коммитов проекта по последним коммитам.
|
|
22
|
+
|
|
23
|
+
Если незакоммиченных изменений нет — сообщи и выйди.
|
|
24
|
+
|
|
25
|
+
### 2. Сформировать коммит
|
|
26
|
+
Составь сообщение в стиле проекта: первая строка короткая (до ~70 символов), при необходимости — тело с пояснением «почему» (не «что» — это в diff).
|
|
27
|
+
|
|
28
|
+
Закоммить через `git add` (точечно по файлам, не `-A`) и `git commit -m`. Не пуш, не `--amend`, не `--no-verify`.
|
|
29
|
+
|
|
30
|
+
Если hook упал — прочитай вывод, исправь причину, повтори через **новый** коммит (не amend).
|
|
31
|
+
|
|
32
|
+
### 3. Спросить про дальнейшее
|
|
33
|
+
Определи:
|
|
34
|
+
- `HAS_REMOTE` = есть ли удалённый репозиторий (`git remote -v`).
|
|
35
|
+
- `CURRENT_BRANCH` = текущая ветка (`git rev-parse --abbrev-ref HEAD`).
|
|
36
|
+
- Целевая ветка — `main` (если у проекта другая основная — определи по `git rev-parse --abbrev-ref origin/HEAD`).
|
|
37
|
+
|
|
38
|
+
Собери варианты для `AskUserQuestion`:
|
|
39
|
+
|
|
40
|
+
| Вариант | Когда показывать |
|
|
41
|
+
|---|---|
|
|
42
|
+
| **Push** | Если `HAS_REMOTE` |
|
|
43
|
+
| **Merge в main + переключение + удаление текущей ветки** | Если `CURRENT_BRANCH != main` |
|
|
44
|
+
| **Ничего больше** | Всегда, если показываются другие варианты (или multiSelect, если хочешь push **и** merge — выбирай) |
|
|
45
|
+
|
|
46
|
+
Логика:
|
|
47
|
+
- Оба варианта применимы → 3 опции в `AskUserQuestion`.
|
|
48
|
+
- Только `push` → 2 опции (push / ничего).
|
|
49
|
+
- Только `merge` → 2 опции (merge+switch+delete / ничего).
|
|
50
|
+
- Ни тот ни другой (мы в main без remote) → **не задавать вопрос**, сразу финал.
|
|
51
|
+
|
|
52
|
+
Действия по выбору:
|
|
53
|
+
|
|
54
|
+
| Выбор | Команды |
|
|
55
|
+
|---|---|
|
|
56
|
+
| Push | `git push -u origin <branch>` (или просто `git push`, если upstream уже настроен) |
|
|
57
|
+
| Merge + switch + delete | `git checkout main` → `git merge <branch>` → `git branch -d <branch>` (если merge без конфликтов; конфликт → остановись, `AskUserQuestion`) |
|
|
58
|
+
| Ничего | пропустить |
|
|
59
|
+
|
|
60
|
+
Если push требует force (например, ветка уже на remote и история разошлась) — **остановись** и спроси через `AskUserQuestion`. Никогда не push --force в main.
|
|
61
|
+
|
|
62
|
+
### 4. Финал
|
|
63
|
+
Короткое сообщение: хеш и заголовок коммита, что было сделано после (push / merge / ничего), текущая ветка после операции.
|
|
64
|
+
|
|
65
|
+
## Чего НЕ делать
|
|
66
|
+
- `--no-verify`, `--no-gpg-sign` — никогда.
|
|
67
|
+
- `--amend` существующего коммита — создавай новый.
|
|
68
|
+
- `git add -A` или `git add .` — добавляй файлы по имени.
|
|
69
|
+
- Коммитить файлы с похожими на секреты именами (`.env`, `credentials*`) без явного подтверждения через `AskUserQuestion`.
|
|
70
|
+
- Push --force в main или master.
|
|
71
|
+
- Делать ревью или править логику кода — это другие скилы.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eda-docs
|
|
3
|
+
description: Создаёт или обновляет три ключевых документа: `docs/rules.md` (максимально строгие правила для стека + предложения новых инструментов), `docs/arch.md` (архитектура проекта), `AGENTS.md` (описание проекта, стек, ссылки на документы и команды). Анализирует стек сам. Не правит код. Все вопросы — через AskUserQuestion.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Скил: Документатор (eda-docs)
|
|
7
|
+
|
|
8
|
+
Создаёшь или обновляешь три документа: `docs/rules.md`, `docs/arch.md` и шапку `AGENTS.md`. Правила — **максимально строгие** для стека проекта; смело предлагай инструменты, которых ещё нет, если они повышают строгость.
|
|
9
|
+
|
|
10
|
+
## Главные правила
|
|
11
|
+
|
|
12
|
+
1. **Все вопросы — через `AskUserQuestion`**.
|
|
13
|
+
2. **Не правишь код**, не ставишь пакеты, не меняешь конфиги. Только документы.
|
|
14
|
+
3. **Максимальная строгость по умолчанию.** Все доступные strict-флаги, запреты «гибких» конструкций, обязательные типы / тесты / обработка ошибок. Если правило бьёт по продуктивности — пометь, но не выкидывай.
|
|
15
|
+
4. **Можно предлагать инструменты, которых ещё нет в проекте**, если они стандартные для стека и повышают строгость. Не предлагай дубль уже установленному того же класса.
|
|
16
|
+
5. **Существующие документы** не переписываем молча. Если файл уже есть — `AskUserQuestion`: переписать / дополнить / создать рядом.
|
|
17
|
+
7. **Простой язык.** В правилах объясняй *почему*, не только *что*. **Таблицы** для перечислений.
|
|
18
|
+
|
|
19
|
+
## Этапы
|
|
20
|
+
|
|
21
|
+
### 1. Проанализировать проект
|
|
22
|
+
Определи сам: языки и фреймворки, тест-фреймворк, базы данных, инфраструктуру (контейнеры, CI), уже установленные линтеры/статанализаторы, главную ветку, стиль коммитов (по `git log`).
|
|
23
|
+
|
|
24
|
+
### 2. Прочитать существующие docs
|
|
25
|
+
`docs/rules.md`, `docs/arch.md`, `AGENTS.md` (если есть). Запомни, что в них уже зафиксировано — чтобы не дублировать и не противоречить.
|
|
26
|
+
|
|
27
|
+
### 3. Уточнить, что обновляем
|
|
28
|
+
`AskUserQuestion`: какие документы трогаем — все три / только rules / только arch / только AGENTS / выбрать несколько.
|
|
29
|
+
|
|
30
|
+
Для каждого существующего файла — **отдельный** `AskUserQuestion`: переписать с нуля / дополнить / оставить как есть.
|
|
31
|
+
|
|
32
|
+
### 4. Сгенерировать `docs/rules.md`
|
|
33
|
+
Структура (примерная — адаптируй под стек):
|
|
34
|
+
|
|
35
|
+
```markdown
|
|
36
|
+
# Правила проекта
|
|
37
|
+
|
|
38
|
+
## Зачем эти правила
|
|
39
|
+
<2–3 предложения: что мы хотим от кода, какую боль закрываем>
|
|
40
|
+
|
|
41
|
+
## Стиль кода
|
|
42
|
+
<строгие настройки форматтера, имена, длина строк, импорты>
|
|
43
|
+
|
|
44
|
+
## Типы
|
|
45
|
+
<обязательные типы, запрет any/mixed, strict-режимы>
|
|
46
|
+
|
|
47
|
+
## Тесты
|
|
48
|
+
<минимальное покрытие, расположение, именование, что обязательно покрывать>
|
|
49
|
+
|
|
50
|
+
## Обработка ошибок
|
|
51
|
+
<запрет «глотания» ошибок, обязательное логирование, типы исключений>
|
|
52
|
+
|
|
53
|
+
## Безопасность
|
|
54
|
+
<секреты, валидация ввода, SQL, XSS, ...>
|
|
55
|
+
|
|
56
|
+
## Производительность
|
|
57
|
+
<запрет N+1, ограничения сложности, ...>
|
|
58
|
+
|
|
59
|
+
## Коммиты и ветки
|
|
60
|
+
<стиль сообщений, главная ветка, политика merge>
|
|
61
|
+
|
|
62
|
+
## Инструменты
|
|
63
|
+
| Инструмент | Установлен | Назначение | Конфиг (черновик) |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| ... | ✓/новый | ... | <фрагмент> |
|
|
66
|
+
|
|
67
|
+
## Что предлагается добавить
|
|
68
|
+
<список инструментов, которых нет, но стоит поставить — для каждого: чем закрывает, черновик минимального конфига>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Каждое правило — с короткой строкой «почему» (ссылка на типичную ошибку или класс багов).
|
|
72
|
+
|
|
73
|
+
### 5. Сгенерировать `docs/arch.md`
|
|
74
|
+
Структура:
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
# Архитектура проекта
|
|
78
|
+
|
|
79
|
+
## Картина целиком
|
|
80
|
+
<2–4 абзаца простыми словами: что делает система, какие у неё границы>
|
|
81
|
+
|
|
82
|
+
<Mermaid-диаграмма верхнего уровня — модули и потоки. Если архитектура линейная и схемы не нужно — одна строка про это>
|
|
83
|
+
|
|
84
|
+
## Модули
|
|
85
|
+
| Модуль | Назначение | Зависит от | API наружу |
|
|
86
|
+
|---|---|---|---|
|
|
87
|
+
|
|
88
|
+
## Потоки данных
|
|
89
|
+
<ключевые сценарии — sequenceDiagram или текст>
|
|
90
|
+
|
|
91
|
+
## Решения и ограничения
|
|
92
|
+
<важные архитектурные решения с обоснованием — почему так, а не иначе>
|
|
93
|
+
|
|
94
|
+
## Что вне области
|
|
95
|
+
<что система осознанно НЕ делает>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 6. Обновить `AGENTS.md`
|
|
99
|
+
Если файл существует — `AskUserQuestion`: переписать / дополнить / оставить. Если нет — создай.
|
|
100
|
+
|
|
101
|
+
Шаблон:
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
# AGENTS.md
|
|
105
|
+
|
|
106
|
+
Инструкции для AI-агентов в этом репозитории.
|
|
107
|
+
|
|
108
|
+
## Проект
|
|
109
|
+
- **Название:** ...
|
|
110
|
+
- **Что делает:** <одно-два предложения>
|
|
111
|
+
- **Стек:** <языки, фреймворки, БД, инфраструктура>
|
|
112
|
+
- **Главная ветка:** <main|master|...>
|
|
113
|
+
|
|
114
|
+
## Для агентов
|
|
115
|
+
Рамка проекта — `docs/rules.md` и `docs/arch.md`. Перед любой правкой кода прочитай их. Если их нет — спроси пользователя, можно ли запустить `eda-docs` для генерации. Скилы серии eda-* лежат в `.claude/skills/` (для Claude Code) и `.codex/skills/` (для Codex CLI) — следуй им, когда пользователь просит выполнить одну из задач серии.
|
|
116
|
+
|
|
117
|
+
## Где что хранится
|
|
118
|
+
| Что | Где |
|
|
119
|
+
|---|---|
|
|
120
|
+
| Исследования | `docs/researches/` |
|
|
121
|
+
| Планы | `docs/plans/` |
|
|
122
|
+
| Журналы выполнения | `docs/executions/` |
|
|
123
|
+
| Ревью | `docs/reviews/` |
|
|
124
|
+
| Отчёты о фиксах | `docs/review-fixes/` |
|
|
125
|
+
| Предложения по автоматизации | `docs/automations/` |
|
|
126
|
+
| Правила проекта | `docs/rules.md` |
|
|
127
|
+
| Архитектура | `docs/arch.md` |
|
|
128
|
+
|
|
129
|
+
## Команды
|
|
130
|
+
- Тесты: `<команда>`
|
|
131
|
+
- Линтер: `<команда>`
|
|
132
|
+
- Локальный запуск: `<команда>` (если применимо)
|
|
133
|
+
|
|
134
|
+
## Стиль коммитов
|
|
135
|
+
<определи по `git log -20 --oneline` или зафиксируй стандарт>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 7. Финал
|
|
139
|
+
Короткое сообщение: какие файлы созданы/обновлены, путь к каждому, ключевые предложения по новым инструментам списком, подсказка дальше — «прочитай файлы, скорректируй вручную, что не подходит».
|
|
140
|
+
|
|
141
|
+
## Чего НЕ делать
|
|
142
|
+
- Править код, ставить пакеты, менять конфиги — только документы.
|
|
143
|
+
- Молча переписывать существующие документы — каждый раз `AskUserQuestion`.
|
|
144
|
+
- Смягчать правила «потому что так удобнее» — стек строгий по умолчанию; послабления отдельно отмечай.
|
|
145
|
+
- Предлагать второй инструмент того же класса в дополнение к уже установленному.
|
|
146
|
+
- Добавлять разделы ради красоты — если для проекта раздел не релевантен, опусти его.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eda-execute
|
|
3
|
+
description: Исполняет план из docs/plans/ — правит код, пишет тесты к изменениям внутри каждого шага, в конце прогоняет полный сьют тестов и линтеры. Прогресс — чекбоксы в файле плана + журнал в `docs/executions/`; в конец плана дописывается ссылка на журнал. Не коммитит (это `eda-commit`), не делает ревью (это `eda-review`). Все вопросы — через AskUserQuestion.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Скил: Исполнитель (eda-execute)
|
|
7
|
+
|
|
8
|
+
Берёшь готовый план из `docs/plans/`, выполняешь до конца, ведёшь журнал. Останавливаешься только при реальных проблемах.
|
|
9
|
+
|
|
10
|
+
## Главные правила
|
|
11
|
+
|
|
12
|
+
1. **Перед правкой кода** прочитай `docs/rules.md` и `docs/arch.md`, если есть. Это рамка проекта. Файлов нет — продолжай молча. Один раз в начале, не перечитывать на каждом шаге.
|
|
13
|
+
2. **Все вопросы — через `AskUserQuestion`** (в Codex, если его нет — короткий нумерованный список).
|
|
14
|
+
3. **Не переформулируй план.** Шаг непонятен — спроси, не «доразрабатывай» молча.
|
|
15
|
+
4. **Не коммитить, не пушить, не делать ревью.** Это другие скилы.
|
|
16
|
+
5. **Идти целиком**, не делать паузы «для подтверждения». Останавливайся только если: тест упал, шаг противоречив, есть риск потерять данные, рискованная операция вне плана.
|
|
17
|
+
6. **Тесты — внутри шага.** Меняешь поведение → пишешь тесты к этому изменению в том же шаге, точечно прогоняешь только их. Полный сьют и линтеры — один раз в конце (этап 7), не на каждом шаге.
|
|
18
|
+
7. **Простой язык** в сообщениях пользователю и вопросах. Термины — только если без них нельзя, и сразу с пояснением.
|
|
19
|
+
8. **Таблицы для структурируемых данных** в журнале. Диаграммы — только если действительно есть что показать.
|
|
20
|
+
|
|
21
|
+
## Этапы
|
|
22
|
+
|
|
23
|
+
### 1. Выбрать план
|
|
24
|
+
Если путь не передан — `AskUserQuestion` со списком последних файлов из `docs/plans/`. Запиши путь в `$PLAN_FILE`.
|
|
25
|
+
|
|
26
|
+
### 2. Выбрать место выполнения
|
|
27
|
+
`AskUserQuestion` с четырьмя вариантами:
|
|
28
|
+
|
|
29
|
+
| Вариант | Что делает | Команда |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| Остаться в текущей ветке | Ничего | — |
|
|
32
|
+
| Новая ветка от main | Переключиться на main, создать ветку от неё | `git checkout main && git checkout -b <slug>` |
|
|
33
|
+
| Новая ветка от текущей ветки | Создать ветку прямо здесь | `git checkout -b <slug>` |
|
|
34
|
+
| Worktree от main в соседней папке | Создать worktree → **остановиться**, дать пользователю инструкцию | см. ниже |
|
|
35
|
+
|
|
36
|
+
`<slug>` бери из имени плана. Если в рабочей копии незакоммиченные изменения и `git checkout` упадёт — остановись и спроси через `AskUserQuestion`.
|
|
37
|
+
|
|
38
|
+
**Если выбран worktree** — выполни:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git worktree add -b <slug> ../<repo-name>-<slug> main
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Покажи пользователю **готовый bash-блок** для копирования (с подставленными именами):
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
cd ../<repo-name>-<slug>
|
|
48
|
+
# затем в новой сессии запусти этот же скил:
|
|
49
|
+
# eda-execute docs/plans/<план>.md
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
И **выйди из скила** — текущая сессия в эту папку не переедет, поэтому продолжать здесь нельзя. Сообщи пользователю, что ждёшь его в новой сессии.
|
|
53
|
+
|
|
54
|
+
### 3. Прочитать контекст
|
|
55
|
+
План + `docs/rules.md` и `docs/arch.md` (если есть). Тест-фреймворк проекта определи сам по конфигам/существующим тестам — этого хватит, чтобы писать тесты в нужном стиле.
|
|
56
|
+
|
|
57
|
+
### 4. Инициализировать прогресс
|
|
58
|
+
- Создай журнал `docs/executions/{YYYY-MM-DD}_{HH-MM}_{slug}.md` (slug — тот же, что у плана, или близкий).
|
|
59
|
+
- В конец файла плана добавь раздел со ссылкой и чекбоксами прогресса:
|
|
60
|
+
```markdown
|
|
61
|
+
## Прогресс выполнения
|
|
62
|
+
Журнал: `docs/executions/{file}.md`
|
|
63
|
+
|
|
64
|
+
- [ ] Шаг 1: ...
|
|
65
|
+
- [ ] Шаг 2: ...
|
|
66
|
+
```
|
|
67
|
+
- Шаблон журнала:
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
---
|
|
71
|
+
plan: <путь>
|
|
72
|
+
started: <YYYY-MM-DD HH:MM>
|
|
73
|
+
status: in_progress
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
# Журнал: <заголовок>
|
|
77
|
+
|
|
78
|
+
## Шаги
|
|
79
|
+
| # | Шаг | Файлы | Тесты | Статус |
|
|
80
|
+
|---|-----|-------|-------|--------|
|
|
81
|
+
|
|
82
|
+
## Заметки
|
|
83
|
+
## Изменения в docs
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 5. Выполнить план
|
|
87
|
+
Идёшь по шагам. На каждом:
|
|
88
|
+
1. Сделай правки.
|
|
89
|
+
2. Если шаг меняет поведение — добавь тесты в этом же шаге, точечно прогони.
|
|
90
|
+
3. Поставь `[x]` в файле плана и допиши строку в таблицу журнала.
|
|
91
|
+
|
|
92
|
+
Останавливайся и спрашивай через `AskUserQuestion`, если: тесты к шагу упали и не правятся быстро / шаг противоречит коду / задевает рискованное вне плана. Архитектурное решение по ходу — записывай в «Изменения в docs», не блокируй.
|
|
93
|
+
|
|
94
|
+
После последнего шага — `finished` и `status: done` в шапке журнала.
|
|
95
|
+
|
|
96
|
+
### 6. Обновить docs
|
|
97
|
+
Если в «Изменениях в docs» что-то накопилось — допиши в `docs/rules.md` или `docs/arch.md` минимально достаточно. Файлов нет — пропусти (создаёт `eda-docs`).
|
|
98
|
+
|
|
99
|
+
### 7. Финальная проверка
|
|
100
|
+
Прогони полный сьют тестов и линтеры на проекте. Команды — стандартные для стека; если непонятно — `AskUserQuestion` один раз. Свои поломки — правишь и повторяешь. Чужие/несвязанные — `AskUserQuestion`. Результат фиксируй разделом `## Финальная проверка` в журнале.
|
|
101
|
+
|
|
102
|
+
### 8. Финал
|
|
103
|
+
Короткое сообщение: пути к плану и журналу, сводка шагов, результат финальной проверки, состояние git («не закоммичено»), 1–3 главных «что важно знать», подсказка «дальше — `eda-review` или `eda-commit`».
|
|
104
|
+
|
|
105
|
+
## Чего НЕ делать
|
|
106
|
+
- Коммитить, пушить, делать кросс-ревью изменений.
|
|
107
|
+
- Гонять полный сьют и линтеры на каждом шаге.
|
|
108
|
+
- Пропускать финальную проверку.
|
|
109
|
+
- Делать паузу после каждого шага «для подтверждения».
|
|
110
|
+
- Пропускать обновление чекбоксов и журнала — иначе теряется состояние.
|
|
111
|
+
- Делать рискованное (удаление файлов, миграции, секреты) без подтверждения, даже если упомянуто в плане.
|