@gian-tiaga/eda 0.8.6 → 1.0.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.
Files changed (85) hide show
  1. package/MIGRATION.md +117 -0
  2. package/README.md +324 -71
  3. package/agents/eda-aim-executor/agent.json +15 -0
  4. package/agents/eda-aim-executor/prompt.md +61 -0
  5. package/agents/eda-aim-planner/agent.json +15 -0
  6. package/agents/eda-aim-planner/prompt.md +43 -0
  7. package/agents/eda-aim-verifier/agent.json +15 -0
  8. package/agents/eda-aim-verifier/prompt.md +57 -0
  9. package/agents/eda-commit-context/agent.json +15 -0
  10. package/agents/eda-commit-context/prompt.md +58 -0
  11. package/agents/eda-commit-executor/agent.json +15 -0
  12. package/agents/eda-commit-executor/prompt.md +87 -0
  13. package/agents/eda-merge-worktree-executor/agent.json +15 -0
  14. package/agents/eda-merge-worktree-executor/prompt.md +57 -0
  15. package/agents/eda-review-api/agent.json +15 -0
  16. package/agents/eda-review-api/prompt.md +34 -0
  17. package/agents/eda-review-architecture/agent.json +15 -0
  18. package/agents/eda-review-architecture/prompt.md +34 -0
  19. package/agents/eda-review-code-quality/agent.json +15 -0
  20. package/agents/eda-review-code-quality/prompt.md +34 -0
  21. package/agents/eda-review-correctness/agent.json +15 -0
  22. package/agents/eda-review-correctness/prompt.md +34 -0
  23. package/agents/eda-review-database/agent.json +15 -0
  24. package/agents/eda-review-database/prompt.md +34 -0
  25. package/agents/eda-review-documentation/agent.json +15 -0
  26. package/agents/eda-review-documentation/prompt.md +34 -0
  27. package/agents/eda-review-frontend/agent.json +15 -0
  28. package/agents/eda-review-frontend/prompt.md +34 -0
  29. package/agents/eda-review-performance/agent.json +15 -0
  30. package/agents/eda-review-performance/prompt.md +34 -0
  31. package/agents/eda-review-plan-alignment/agent.json +15 -0
  32. package/agents/eda-review-plan-alignment/prompt.md +34 -0
  33. package/agents/eda-review-previous-reviews/agent.json +15 -0
  34. package/agents/eda-review-previous-reviews/prompt.md +44 -0
  35. package/agents/eda-review-references/agent.json +15 -0
  36. package/agents/eda-review-references/prompt.md +34 -0
  37. package/agents/eda-review-rules/agent.json +15 -0
  38. package/agents/eda-review-rules/prompt.md +34 -0
  39. package/agents/eda-review-security/agent.json +15 -0
  40. package/agents/eda-review-security/prompt.md +34 -0
  41. package/agents/eda-review-tests/agent.json +15 -0
  42. package/agents/eda-review-tests/prompt.md +34 -0
  43. package/agents/eda-worktree-executor/agent.json +15 -0
  44. package/agents/eda-worktree-executor/prompt.md +49 -0
  45. package/bin/cli.js +4 -4
  46. package/lib/catalog.js +118 -0
  47. package/lib/install.js +763 -113
  48. package/lib/renderers/claude-agent.js +24 -0
  49. package/lib/renderers/claude-skill.js +11 -0
  50. package/lib/renderers/codex-agent.js +24 -0
  51. package/lib/renderers/codex-skill.js +3 -0
  52. package/package.json +5 -3
  53. package/skills/eda-aim/SKILL.md +212 -0
  54. package/skills/eda-commit/SKILL.md +124 -0
  55. package/skills/eda-commit/skill.json +6 -0
  56. package/skills/eda-discover-automations/SKILL.md +184 -0
  57. package/skills/{eda-explore.md → eda-explore/SKILL.md} +11 -8
  58. package/skills/{eda-fix.md → eda-fix/SKILL.md} +7 -6
  59. package/skills/{eda-fix-by-review.md → eda-fix-by-review/SKILL.md} +5 -4
  60. package/skills/{eda-manual-test.md → eda-manual-test/SKILL.md} +1 -1
  61. package/skills/eda-merge-worktree/SKILL.md +72 -0
  62. package/skills/eda-merge-worktree/skill.json +7 -0
  63. package/skills/eda-new-project/SKILL.md +163 -0
  64. package/skills/eda-orhestra/SKILL.md +146 -0
  65. package/skills/{eda-plan.md → eda-plan/SKILL.md} +39 -29
  66. package/skills/eda-plan-execute/SKILL.md +186 -0
  67. package/skills/{eda-plan-polish.md → eda-plan-polish/SKILL.md} +14 -13
  68. package/skills/eda-polish/SKILL.md +80 -0
  69. package/skills/eda-prepare-ai/SKILL.md +227 -0
  70. package/skills/eda-review/SKILL.md +212 -0
  71. package/skills/{eda-send-review.md → eda-send-review/SKILL.md} +66 -19
  72. package/skills/eda-send-review/skill.json +7 -0
  73. package/skills/eda-worktree/SKILL.md +73 -0
  74. package/skills/eda-worktree/skill.json +7 -0
  75. package/skills/eda-automate.md +0 -185
  76. package/skills/eda-commit.md +0 -91
  77. package/skills/eda-docs.md +0 -123
  78. package/skills/eda-execute.md +0 -140
  79. package/skills/eda-merge-worktree.md +0 -116
  80. package/skills/eda-polish.md +0 -113
  81. package/skills/eda-review-check.md +0 -149
  82. package/skills/eda-review.md +0 -173
  83. package/skills/eda-start.md +0 -233
  84. package/skills/eda-worktree.md +0 -113
  85. /package/skills/{eda-roadmap.md → eda-roadmap/SKILL.md} +0 -0
@@ -1,15 +1,27 @@
1
1
  ---
2
2
  name: eda-send-review
3
- description: 'Отправляет ревью из `docs/reviews/...`, выбранное по тексту рядом с вызовом, на GitHub PR через `gh` — всегда в едином формате: общий комментарий-сводка плюс комментарии к строкам кода (inline). Тип отправки (`comment`/`approve`/`request-changes`) задаёт только статус review, но не структуру вывода. По умолчанию отправляет все пункты; если в тексте указано подмножество — только его. Перед отправкой читает `docs/rules.md` и `docs/arch.md` и строго следует им. Целевой PR определяется из текста или по текущей ветке; если PR нет — предлагает создать. После отправки в конец файла ревью дописывает ссылку. Не правит код, не делает само ревью. Вопросы задаёт только когда без ответа нельзя безопасно продолжать.'
3
+ description: 'Отправляет готовое ревью из `docs/reviews/...` на GitHub PR через `gh`: сводку в теле review и замечания комментариями к строкам. Явный `comment`/`approve`/`request-changes` берёт из контекста текущего вызова, без него сразу использует `comment` независимо от score. По умолчанию отправляет все пункты, а по контексту — указанное подмножество. Настройка `send-review.close_previous_reviews` позволяет после успешной отправки скрыть предыдущие сводки eda-send-review и зарезолвить связанные inline-треды; текущий запрос может её переопределить. PR определяет из текста или текущей ветки, после отправки дописывает ссылку в файл. Не правит код и не делает новое ревью.'
4
4
  ---
5
5
 
6
6
  # Скил: Отправитель ревью (eda-send-review)
7
7
 
8
8
  Берёшь готовое ревью из `docs/reviews/`, отправляешь его на GitHub PR через `gh`. Отправляешь **всегда в одном формате**: общий комментарий-сводка плюс комментарии к строкам кода. В конец файла ревью дописываешь, куда отправил.
9
9
 
10
+ ## Режим запуска
11
+
12
+ Прочитай `docs/settings.yaml`, если файл есть. Прямое указание пользователя в текущем сообщении важнее настройки.
13
+
14
+ Поддерживается только `version: 2`. При другой версии, отсутствующем разделе или неизвестном значении используй дефолт; настройки старого формата не применяй. Дефолт: `send-review.close_previous_reviews: false`.
15
+
16
+ | Настройка | Значения | Аргументы в сообщении |
17
+ |---|---|---|
18
+ | `send-review.close_previous_reviews` | `true`, `false` | `close_previous_reviews=true/false`, `send-review.close_previous_reviews=true/false`; включение: «закрой предыдущие ревью», «скрой старые комментарии»; выключение: «не закрывай предыдущие ревью», `keep previous reviews` |
19
+
20
+ Вычисли `$CLOSE_PREVIOUS_REVIEWS` один раз до отправки. Настройку в файле не меняй.
21
+
10
22
  ## Вход из сообщения пользователя
11
23
 
12
- Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: тему, задачу, путь к файлу, режим, ограничения, какие пункты отправлять и прямые указания.
24
+ Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: тему, задачу, путь к файлу, статус отправки, ограничение по пунктам, режим закрытия предыдущих ревью и прямые указания.
13
25
 
14
26
  Если этого входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных вариантов или есть риск выполнить не ту задачу. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
15
27
 
@@ -20,8 +32,9 @@ description: 'Отправляет ревью из `docs/reviews/...`, выбр
20
32
  3. **Интерактивные вопросы** — по разделу ниже.
21
33
  4. **Прочитай `docs/rules.md` и `docs/arch.md`**, если есть, и строго следуй им при выборе способа отправки и финальной отметке.
22
34
  5. **Не правишь код, не делаешь само ревью.** Только переупаковка и отправка.
23
- 6. **Никаких самостоятельных оценок.** Статус review определяется по оценке ревью и тексту пользователя. `approve` и `request-changes` всегда подтверждаются пользователем.
24
- 7. **Простой язык.** В сообщениях пользователю и комментариях PR без лишних терминов.
35
+ 6. **По умолчанию — `COMMENT`.** Статус review определяется только по явному указанию в контексте текущего вызова. Если статуса нет, отправляй `COMMENT` без вопроса. Оценка ревью не меняет event.
36
+ 7. **Закрывай только свои предыдущие отправки.** При включённой настройке скрывай только более ранние сводки `eda-send-review`, созданные текущим GitHub-пользователем в целевом PR, и резолви только связанные с ними inline-треды. Чужие комментарии и обсуждения не трогай.
37
+ 8. **Простой язык.** В сообщениях пользователю и комментариях PR без лишних терминов.
25
38
 
26
39
  ## Интерактивные вопросы
27
40
 
@@ -30,7 +43,7 @@ description: 'Отправляет ревью из `docs/reviews/...`, выбр
30
43
  - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
31
44
  - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
32
45
  - Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
33
- - Для отправки ревью это правило важнее продолжения: не создавай PR, не отправляй approve/request-changes и не меняй статус отправки вместо ответа пользователя.
46
+ - Для отправки ревью это правило важнее продолжения: не создавай PR и не угадывай статус при противоречивых прямых указаниях вместо ответа пользователя. Одно явно указанное действие `approve` или `request-changes` уже является достаточным разрешением и повторного подтверждения не требует.
34
47
 
35
48
  ## Этапы
36
49
 
@@ -38,9 +51,9 @@ description: 'Отправляет ревью из `docs/reviews/...`, выбр
38
51
  `gh --version` + `gh auth status`. Если `gh` отсутствует или не авторизован — остановись, сообщи и выйди (это пользователю нужно решить).
39
52
 
40
53
  ### 2. Выбрать ревью и что отправлять
41
- Сначала разбери текст рядом с вызовом: путь к ревью, название или часть названия, «последнее ревью», PR (`PR 12`, `#12`) и статус отправки (`comment`, `review-comment`, `approve`, `request-changes`).
54
+ Сначала разбери текст рядом с вызовом: путь к ревью, название или часть названия, «последнее ревью», PR (`PR 12`, `#12`), статус отправки (`comment`, `review-comment`, `approve`, `request-changes`) и указание закрыть или сохранить предыдущие ревью.
42
55
 
43
- Если найдено ровно одно ревью — продолжай без вопроса. Если найдено несколько одинаково подходящих ревью — `AskUserQuestion` со списком вариантов. Если входа нет — `AskUserQuestion` со списком последних файлов из `docs/reviews/`. Если `docs/reviews/` отсутствует или пуста — остановись с понятным вопросом или статусом `blocked: нужно ревью`. Прочитай файл целиком: оценку, замечания, рекомендации.
56
+ Если найдено ровно одно ревью — продолжай без вопроса. Если найдено несколько одинаково подходящих ревью — `AskUserQuestion` со списком вариантов. Если входа нет — `AskUserQuestion` со списком последних файлов из `docs/reviews/`. Если `docs/reviews/` отсутствует или пуста — остановись с понятным вопросом или статусом `blocked: нужно ревью`. Прочитай файл целиком: оценку, замечания, рекомендации. Отсутствие статуса отправки само по себе не считается недостатком входа и не требует вопроса.
44
57
 
45
58
  **Что отправлять.** По умолчанию — все замечания. Если в тексте указано подмножество, отправь только его. Синтаксис свободный, распознавай по смыслу: по номерам («пункты 1, 3, 5»), по обязательности («только обязательные» → раздел «Править обязательно»), по типу («только security» → замечания с этим `Тип`). Выбор влияет и на сводку, и на комментарии к строкам.
46
59
 
@@ -50,15 +63,17 @@ description: 'Отправляет ревью из `docs/reviews/...`, выбр
50
63
  Если PR нет — `AskUserQuestion`: «PR ещё нет: создать PR из текущей ветки / указать номер существующего PR / прервать». При создании используй `gh pr create` (заголовок и тело — по последним коммитам ветки).
51
64
 
52
65
  ### 4. Выбрать статус review
66
+
53
67
  Review отправляется всегда; здесь выбирается только его статус (`event`).
54
68
 
55
- | Условие | event | Подтверждение |
69
+ | Контекст текущего вызова | event | Вопрос |
56
70
  |---|---|---|
57
- | score ≥ 80 (или в тексте `approve`) | `APPROVE` | всегда `AskUserQuestion` |
58
- | score < 50 (или в тексте `request-changes`) | `REQUEST_CHANGES` | всегда `AskUserQuestion` |
59
- | иначе (или в тексте `comment` / `review-comment`) | `COMMENT` | без подтверждения |
71
+ | явно указано `approve` | `APPROVE` | не задавать |
72
+ | явно указано `request-changes` / «запросить изменения» | `REQUEST_CHANGES` | не задавать |
73
+ | явно указано `comment` / `review-comment` | `COMMENT` | не задавать |
74
+ | статус не указан | `COMMENT` | не задавать |
60
75
 
61
- `comment` и `review-comment` означают review без статуса (`event=COMMENT`) — обычный комментарий-ревью, который тоже несёт сводку и комментарии к строкам. `approve` и `request-changes` подтверждай через `AskUserQuestion` всегда, даже если указаны в тексте. Если предложенный статус противоречит ревью — `AskUserQuestion`: подтвердить / выбрать другой.
76
+ `comment` и `review-comment` означают review без решения о принятии изменений (`event=COMMENT`) — обычный комментарий-ревью, который тоже несёт сводку и комментарии к строкам. Явно приложенный или названный пользователем контекст текущего вызова учитывай наравне с текстом рядом со скиллом. Не выводи статус из score, раздела рекомендаций, не связанного с вызовом старого обсуждения или предыдущих запусков. Если в текущем контексте одновременно указаны несовместимые статусы и приоритет неясен — `AskUserQuestion` с тремя вариантами.
62
77
 
63
78
  ### 5. Собрать сводку и комментарии к строкам
64
79
  Из выбранных пунктов собери две части.
@@ -80,15 +95,26 @@ Review отправляется всегда; здесь выбирается т
80
95
  1. **[тип]** `path/file.py:42` — <что не так>. → <что предлагаешь>
81
96
 
82
97
  _Сгенерировано из `<путь к docs/reviews/...>`_
98
+ <!-- eda-send-review -->
83
99
  ```
84
100
 
85
101
  Раздел «Замечания вне diff» добавляй только если такие пункты есть (см. ниже); иначе опусти его.
86
102
 
87
- **Комментарии к строкам** — по одному на каждое отправляемое замечание, чьё `Где: path:line` входит в diff PR. Для каждого: `{ "path": "<path>", "line": <line>, "side": "RIGHT", "body": "<суть простым языком + рекомендация + как исправить>" }`. Для замечания об удалённой строке используй `"side": "LEFT"`.
103
+ **Комментарии к строкам** — по одному на каждое отправляемое замечание, чьё `Где: path:line` входит в diff PR. Для каждого: `{ "path": "<path>", "line": <line>, "side": "RIGHT", "body": "<суть простым языком + рекомендация + как исправить>\n\n<!-- eda-send-review -->" }`. Для замечания об удалённой строке используй `"side": "LEFT"`.
88
104
 
89
105
  Какие строки входят в diff — определи по `gh pr diff <num>`. Замечания, чьи строки в diff не попали (или без `path:line`), в комментарии к строкам **не** клади — перенеси их в раздел «Замечания вне diff» сводки, чтобы ничего не потерялось.
90
106
 
91
- ### 6. Отправить
107
+ ### 6. Зафиксировать предыдущие отправки и отправить
108
+
109
+ Если `$CLOSE_PREVIOUS_REVIEWS=false`, не запрашивай старые комментарии и переходи сразу к отправке.
110
+
111
+ Если `$CLOSE_PREVIOUS_REVIEWS=true`, **до новой отправки** получи через `gh api graphql` все страницы `reviews`, `comments` и `reviewThreads` целевого PR. Сохрани два списка:
112
+
113
+ - `$PREVIOUS_SUMMARY_IDS` — Node ID неминимизированных `PullRequestReview` и fallback-`IssueComment`, у которых `viewerDidAuthor=true`, `viewerCanMinimize=true`, а тело содержит `<!-- eda-send-review -->` или старую метку `_Сгенерировано из \`docs/reviews/...\`_`;
114
+ - `$PREVIOUS_THREAD_IDS` — Node ID незарезолвленных тредов с `viewerCanResolve=true`, у которых корневой комментарий относится через `pullRequestReview.id` к одному из найденных предыдущих review.
115
+
116
+ Не выбирай предыдущие отправки только по автору: метка `eda-send-review` обязательна. Не включай комментарии других пользователей, немаркированные ручные review и треды, не связанные с найденными review. Обработай пагинацию до `hasNextPage=false`. Поскольку снимок сделан до POST, новая отправка в эти списки не попадёт.
117
+
92
118
  Тело сводки и комментарии собери в один JSON через `mktemp`:
93
119
 
94
120
  ```json
@@ -105,9 +131,27 @@ gh api "repos/$OWNER_REPO/pulls/<num>/reviews" --method POST --input <payload.js
105
131
  Fallback'ы:
106
132
  - API упал с `422` из-за конкретных строк — перенеси эти пункты в раздел «Замечания вне diff» сводки и переотправь без них.
107
133
  - У цели нет diff/строк PR вовсе (нечего привязывать) — отправь только сводку обычным комментарием: `gh pr comment <num> --body-file <tmpfile>`.
108
- - Другая ошибка — покажи вывод пользователю и спроси через `AskUserQuestion` (повторить / другой статус / прервать).
134
+ - Другая ошибка — покажи вывод пользователю и спроси через `AskUserQuestion` (повторить / прервать). Не меняй event без нового прямого указания пользователя.
135
+
136
+ ### 7. Закрыть предыдущие отправки
137
+
138
+ Выполняй этот этап только после успешной новой отправки и только при `$CLOSE_PREVIOUS_REVIEWS=true`.
139
+
140
+ Каждую старую сводку из `$PREVIOUS_SUMMARY_IDS` скрой как устаревшую — это действие **Hide** в интерфейсе GitHub:
141
+
142
+ ```bash
143
+ gh api graphql -f query='mutation($id: ID!) { minimizeComment(input: {subjectId: $id, classifier: OUTDATED}) { minimizedComment { isMinimized } } }' -F id="$SUMMARY_ID"
144
+ ```
145
+
146
+ Каждый связанный старый тред из `$PREVIOUS_THREAD_IDS` зарезолви:
147
+
148
+ ```bash
149
+ gh api graphql -f query='mutation($id: ID!) { resolveReviewThread(input: {threadId: $id}) { thread { isResolved } } }' -F id="$THREAD_ID"
150
+ ```
151
+
152
+ Обрабатывай все элементы, даже если отдельная мутация упала. Ошибка очистки не отменяет уже отправленное новое ревью и не должна приводить к повторной отправке. Сохрани количества успешных и неуспешных Hide/Resolve для финала.
109
153
 
110
- ### 7. Дописать ссылку в файл ревью
154
+ ### 8. Дописать ссылку в файл ревью
111
155
  В конец `$REVIEW_FILE` добавь:
112
156
 
113
157
  ```markdown
@@ -115,17 +159,20 @@ Fallback'ы:
115
159
  - PR: <URL из ответа gh>
116
160
  - Статус: <comment | approve | request-changes>
117
161
  - Отправлено пунктов: <сколько / inline + сколько в сводке>
162
+ - Предыдущие ревью: <не закрывались | скрыто N сводок, зарезолвлено M тредов | частично: скрыто N, зарезолвлено M, ошибок K>
118
163
  - Дата: <YYYY-MM-DD HH:MM>
119
164
  ```
120
165
 
121
- ### 8. Финал
122
- Короткое сообщение: PR-номер и URL, статус отправки, сколько пунктов ушло комментариями к строкам и сколько в сводку, путь к файлу ревью.
166
+ ### 9. Финал
167
+ Короткое сообщение: PR-номер и URL, статус отправки, сколько пунктов ушло комментариями к строкам и сколько в сводку, результат закрытия предыдущих ревью и путь к файлу ревью.
123
168
 
124
169
  ## Чего НЕ делать
125
170
  - Делать само ревью или править замечания — это `eda-review` / `eda-fix-by-review`.
126
171
  - Отправлять всё одним обычным комментарием PR, когда строки можно привязать к diff — обычный комментарий только fallback при отсутствии diff.
127
172
  - Терять замечания вне diff — они идут в сводку отдельным разделом.
128
- - Отправлять `approve` или `request-changes` без явного подтверждения через `AskUserQuestion`, даже если оценка ≥ 80.
173
+ - Выводить `approve` или `request-changes` из score, рекомендаций или не связанного с вызовом старого контекста — без явного статуса в контексте текущего вызова всегда `COMMENT`.
174
+ - Скрывать или резолвить чужие, ручные или не связанные с предыдущими отправками `eda-send-review` комментарии.
175
+ - Закрывать предыдущие отправки до успешной публикации нового ревью.
129
176
  - Передавать тело через `-b "..."` со спецсимволами — только `--input` (Reviews API) или `--body-file` (fallback).
130
177
  - Создавать PR молча, если его нет — только через `AskUserQuestion`.
131
178
  - Сохранять копии отправленного в отдельные файлы — связь через ссылку в файле ревью.
@@ -0,0 +1,7 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "models": {
4
+ "claude": "sonnet",
5
+ "codex": "gpt-5.6-terra"
6
+ }
7
+ }
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: eda-worktree
3
+ description: 'Оркестрирует создание нового git worktree через пакетного агента на `haiku` / `gpt-5.6-luna`. Worktree создаётся рядом с основным проектом в папке `{name}-work-{n}` с одноимённой веткой. Базовую ветку берёт из текста рядом с вызовом, если она указана, иначе спрашивает интерактивно. Не правит код, не коммитит и не мержит обратно.'
4
+ ---
5
+
6
+ # Скил: Создатель worktree (eda-worktree)
7
+
8
+ Работай как лёгкий оркестратор установленного агента `eda-worktree-executor`. Сам не исследуй git-состояние, не выбирай имя или базу и не выполняй команды.
9
+
10
+ ## Вход из сообщения пользователя
11
+
12
+ Сохрани весь текст текущего сообщения дословно в `$USER_REQUEST`. Это главный вход: базовая ветка или ref, ограничения и прямые указания.
13
+
14
+ Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно. При последующем ответе на вопрос сохрани исходный `$USER_REQUEST` и передай ответ отдельно.
15
+
16
+ ## Агент
17
+
18
+ | Агент | Claude Code | Codex | Доступ |
19
+ |---|---|---|---|
20
+ | `eda-worktree-executor` | `haiku` | `gpt-5.6-luna` | git-write |
21
+
22
+ - В Claude Code запускай установленный custom agent через `Agent` tool по имени.
23
+ - В Codex запускай установленный custom agent через `spawn_agent` или аналог по имени.
24
+ - Не копируй в task-сообщение системный prompt агента: он уже установлен в `.claude/agents/` или `.codex/agents/`.
25
+ - Передавай агенту только рабочую директорию, данные текущего запуска и требуемый формат результата.
26
+ - Если custom agent или инструмент субагентов недоступен, остановись: `blocked: нужен установленный агент eda-worktree-executor`. Не выполняй его роль основным агентом и не заменяй отдельным CLI-процессом.
27
+
28
+ ## Интерактивные вопросы
29
+
30
+ Когда агент вернул `blocked`, задай его один конкретный вопрос пользователю через общий паттерн `AskUserQuestion`.
31
+
32
+ - Claude Code: используй `AskUserQuestion`.
33
+ - Codex interactive: используй `request_user_input`, если доступен; иначе задай один короткий вопрос с 1–3 вариантами и остановись до ответа.
34
+ - Codex exec / неинтерактивный запуск: не читай stdin; заверши со статусом `blocked: нужен ответ пользователя`, перечисли вопрос и варианты.
35
+ - Не запускай команды, которые ждут интерактивного ввода в терминале.
36
+
37
+ После ответа продолжи того же агента, если хост это поддерживает. Иначе запусти `eda-worktree-executor` заново с исходным запросом, полным предыдущим результатом и ответом пользователя.
38
+
39
+ ## Процесс
40
+
41
+ Запусти `eda-worktree-executor` и передай:
42
+
43
+ ```text
44
+ Рабочая директория: <cwd>
45
+ USER_REQUEST:
46
+ <полный дословный запрос>
47
+
48
+ Верни результат строго по YAML-контракту агента.
49
+ ```
50
+
51
+ Обработай `status`:
52
+
53
+ - `created` — переходи к финалу;
54
+ - `blocked` — задай вопрос агента и продолжи после ответа;
55
+ - `failed` — коротко сообщи фактическую ошибку и безопасный следующий шаг.
56
+
57
+ ## Финал
58
+
59
+ Для `created` коротко сообщи из результата агента:
60
+
61
+ - созданный путь worktree;
62
+ - имя ветки;
63
+ - выбранную базу;
64
+ - предупреждение о незакоммиченных изменениях, если оно есть;
65
+ - команду `cd "<worktree_path>"`;
66
+ - что обратный merge выполняет `eda-merge-worktree <n>` или `eda-merge-worktree work-<n>`.
67
+
68
+ ## Чего НЕ делать
69
+
70
+ - Выполнять работу `eda-worktree-executor` основным агентом.
71
+ - Править код, docs, конфиги или зависимости.
72
+ - Коммитить, пушить, мержить или удалять worktree и ветки.
73
+ - Терять исходный `$USER_REQUEST` после интерактивного ответа.
@@ -0,0 +1,7 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "models": {
4
+ "claude": "haiku",
5
+ "codex": "gpt-5.6-luna"
6
+ }
7
+ }
@@ -1,185 +0,0 @@
1
- ---
2
- name: eda-automate
3
- description: 'Анализирует историю `docs/reviews/`, `docs/review-fixes/` и `docs/fixes/`; по запросу или `automate.include_plans: true` добавляет `docs/plans/`. Ищет повторяющиеся ошибки и ручные правки, в первую очередь предлагает автоматизации на уровне языка и тулчейна: правила линтера/статанализатора, проверки типов, тесты, pre-commit/CI-скрипты. Если кодовая проверка не закрывает класс проблем, предлагает точечные дополнения к `docs/rules.md`, `docs/arch.md`, MCP-серверы, агентные проверки или новые eda-скилы без дублей с уже установленными инструментами. Не внедряет изменения — сохраняет отчёт в `docs/automations/` с приоритетами и черновиками.'
4
- ---
5
-
6
- # Скил: Автоматизатор (eda-automate)
7
-
8
- Читаешь историю ревью и фиксов, находишь повторяющиеся ошибки, ручные правки и недостающие проверки. Главная цель — предложить автоматизации на уровне языка программирования и тулчейна: правила линтера, статанализатора, typecheck, тесты, pre-commit/CI-проверки, валидаторы планов и скрипты качества. `docs/rules.md`, `docs/arch.md`, MCP-серверы, агентные проверки и новые eda-скилы предлагаешь только как дополнение, когда они реально закрывают повторяющийся класс ошибок и не подменяют проверку кода. Не внедряешь — только сохраняешь отчёт с черновиками и оценкой стоимости.
9
-
10
- ## Режим запуска
11
-
12
- Прочитай `docs/settings.yaml`, если файл есть. Прямое указание пользователя в текущем сообщении важнее настроек.
13
-
14
- Дефолт: `automate.include_plans: false`.
15
-
16
- | Настройка | Значения | Аргументы в сообщении |
17
- |---|---|---|
18
- | `automate.include_plans` | `true`, `false` | `plans`, «с планами»; выключение: `normal`, «без планов» |
19
-
20
- Обычный режим анализирует `docs/reviews/`, `docs/review-fixes/`, `docs/fixes/`. Режим с планами добавляет `docs/plans/`.
21
-
22
- ## Вход из сообщения пользователя
23
-
24
- Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: тему, задачу, путь к файлу, режим, ограничения и прямые указания.
25
-
26
- Если этого входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных вариантов или есть риск выполнить не ту задачу. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
27
-
28
- ## Главные правила
29
-
30
- 1. **Прочитай `docs/rules.md` и `docs/arch.md`**, если есть, и строго следуй им. Не предлагай то, что уже зафиксировано как автоматизированное правило или архитектурное решение.
31
- 2. **Интерактивные вопросы** — по разделу ниже.
32
- 3. **Не внедряешь изменения.** Только отчёт с предложениями. Внедрение автоматизаций, MCP-серверов, новых скилов или правок `docs/rules.md`/`docs/arch.md` — через `eda-plan` + `eda-execute`.
33
- 4. **Предлагай только повторяющееся.** Минимум — паттерн встречается в 2+ разных ревью или в 3+ местах одного. Единичные замечания не автоматизируем.
34
- 5. **Сначала программная проверка.** Для каждого паттерна сначала оцени, можно ли поймать его линтером, статанализатором, typecheck, тестом, pre-commit/CI-скриптом или валидатором. Агентные решения предлагай только если программная проверка невозможна, слишком дорогая или требует лучшего контекста для AI-агента.
35
- 6. **Каждое предложение — с черновиком.** Не «надо бы что-то сделать», а конкретный фрагмент: правило линтера, псевдокод/skeleton, тестовый сценарий, CI-шаг, конфиг MCP, описание нового скила, текст для `docs/rules.md` или патч для `docs/arch.md`.
36
- 7. **Простой язык. Таблицы** для приоритезации.
37
- 8. **Планы анализируй только когда режим с планами включён.** Режим включают аргумент `plans`, явная просьба пользователя или `automate.include_plans: true` в `docs/settings.yaml`. Если пользователь явно написал `normal` / «без планов», не читай `docs/plans/`.
38
-
39
- ## Интерактивные вопросы
40
-
41
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
42
- - Claude Code: используй `AskUserQuestion`.
43
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
44
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
45
- - Не запускай команды, которые ждут интерактивного ввода в терминале; перед такими командами спроси в хост-интерфейсе или остановись с `blocked`.
46
-
47
- ## Этапы
48
-
49
- ### 1. Выбрать диапазон
50
- Определи режим и диапазон по текущему сообщению и `docs/settings.yaml`. Без вопроса используй вход, если он задаёт `plans` / `normal`, последние N, период или конкретные файлы/папки. Если диапазон не указан, но источники есть, используй все ревью + фиксы по ревью + обычные фиксы по умолчанию.
51
-
52
- Если вход неоднозначен — `AskUserQuestion`: все ревью и фиксы / все ревью, фиксы и планы / последние N / период / конкретные файлы.
53
-
54
- Получи список файлов из `docs/reviews/`, `docs/review-fixes/` и `docs/fixes/`. В режиме `plans` дополнительно получи список файлов из `docs/plans/`. Если нужные папки отсутствуют или пусты, не продолжай с пустым списком: сообщи, каких источников нет; если не осталось ни одного источника, остановись с понятным вопросом или статусом `blocked: нет источников для анализа`.
55
-
56
- ### 2. Прочитать контекст
57
- - Все выбранные ревью, отчёты о фиксах по ревью и обычные фиксы.
58
- - В режиме `plans`: все выбранные планы из `docs/plans/`.
59
- - `docs/rules.md`, `docs/arch.md` (если есть) — прочитай и строго следуй им.
60
- - Какие языки и фреймворки в проекте — определи сам.
61
- - Какие инструменты качества уже установлены и работают: линтеры, форматтеры, статанализаторы, typecheck, тесты, coverage, pre-commit, CI, npm/composer/make-скрипты.
62
- - Какие агентные усиления уже есть: `.claude/skills/`, `.codex/skills/`, MCP-конфиги, локальные скилы, команды для ревью/планирования. Не предлагай дубль уже установленному.
63
-
64
- ### 3. Найти повторяющиеся паттерны
65
- Сгруппируй замечания по сути (не по точному тексту). Примеры паттернов:
66
- - Запрещённые конструкции языка/фреймворка.
67
- - Нарушения архитектурных границ (импорты не из API соседнего модуля).
68
- - Забытое: error handling, validation, очистка ресурсов.
69
- - Пробелы тестов: повторяющиеся регрессии без unit/integration/contract-теста, нет фикстур, нет проверки edge cases.
70
- - Пробелы тулчейна: нет typecheck, schema validation, coverage threshold, dependency audit, forbidden imports, проверок миграций.
71
- - Стиль: имена, форматирование, порядок.
72
- - Для обычных фиксов: повторяющиеся причины правок, одинаковые классы багов, места где агент регулярно вручную добавляет проверки/валидацию/guard clauses.
73
- - Для планов: пропущенные тесты, отсутствующая проверка после шага, слишком крупные шаги, шаги без файлов/модулей, противоречие `docs/rules.md` или `docs/arch.md`, нет критерия готовности, рискованные действия без rollback/backup.
74
- - Для агентного процесса: агент регулярно не читает нужный источник, забывает запускать одинаковую команду, не видит контракт из внешней системы, путает формат артефакта или повторяет одну и ту же ошибку в планах/ревью.
75
-
76
- Для каждого паттерна собери: где встречался (ссылки на источники), сколько раз, в каких файлах.
77
-
78
- ### 4. Предложить автоматизации и правки docs
79
- Для каждого паттерна выбери 1–2 реакции: `automation`, `tests`, `tooling`, `agent`, `rules`, `architecture`.
80
-
81
- Приоритет реакций:
82
- 1. `automation` — правило линтера, статанализатора, typecheck, custom validator, pre-commit/CI/check-скрипт.
83
- 2. `tests` — конкретный unit/integration/contract/e2e/regression-тест или тестовый helper, который ловит повторяющийся баг.
84
- 3. `tooling` — новый или донастроенный инструмент качества, если в проекте нет подходящего и инструмент стандартный для стека.
85
- 4. `agent` — MCP-сервер, новая/обновлённая eda-инструкция, специализированная агентная проверка или обязательный источник контекста. Предлагай только когда это закрывает повторяющуюся ошибку AI-процесса или даёт агенту данные, которые нельзя надёжно получить из кода.
86
- 5. `rules` / `architecture` — текстовые правила и архитектурные уточнения, если проблема связана с договорённостью, границей модулей или ownership.
87
-
88
- Предпочитай уже установленный инструмент, если он ловит этот класс проблем. Новый инструмент предлагай только если он не дублирует инструмент того же класса. Для проблем из планов предлагай проверку `docs/plans/*.md`, а не runtime-линтер кода. Если правило или архитектура уже зафиксированы, не дублируй текст; предложи только уточнение, которое закрывает повторяющийся случай.
89
-
90
- Каждое предложение содержит:
91
- - Тип: `automation` / `tests` / `tooling` / `agent` / `rules` / `architecture`.
92
- - Что ловит (одна-две фразы простым языком).
93
- - Где встречалось (ссылки на 2–3 источника: ревью, фиксы или планы).
94
- - Для `automation`: инструмент, тип правила и место запуска (`lint`, `test`, `pre-commit`, `CI`, локальный скрипт). Если инструмент **новый** для проекта — пометка «требует установки».
95
- - Для `tests`: уровень теста, сценарий, фикстуры/данные и команда проверки.
96
- - Для `tooling`: какой инструмент добавить или донастроить, почему существующие не закрывают проблему.
97
- - Для `agent`: MCP-сервер, скил или агентная проверка, какие данные/ошибки закрывает, где подключать.
98
- - Для `rules`: целевой раздел `docs/rules.md` и черновик текста правила.
99
- - Для `architecture`: целевой раздел `docs/arch.md` и черновик текста или diff-блок.
100
- - **Черновик** — псевдокод, фрагмент конфигурации или markdown-текст.
101
- - Польза: `low` / `medium` / `high` (по частоте паттерна и вреду от пропуска).
102
-
103
- ### 5. Сохранить отчёт
104
- `docs/automations/{YYYY-MM-DD}_{HH-MM}_{slug}.md`. Slug — короткое описание набора (например, `php-strict-rules`).
105
-
106
- ```markdown
107
- ---
108
- date: <YYYY-MM-DD HH:MM>
109
- sources: [docs/reviews/..., docs/review-fixes/..., docs/fixes/...]
110
- mode: <normal | plans>
111
- status: draft
112
- ---
113
-
114
- # Предложения по автоматизации
115
-
116
- ## Контекст
117
- - Проанализировано: N ревью + M фиксов по ревью + F обычных фиксов + K планов
118
- - Стек проекта: <по конфигам>
119
- - Уже работающие инструменты: <список>
120
- - Уже найденные скилы/MCP/агентные проверки: <список или «не найдены»>
121
-
122
- ## Проверки кода и тесты
123
-
124
- ### 1. <название паттерна>
125
- - **Тип:** automation / tests / tooling
126
- - **Что ловит:** ...
127
- - **Встречалось в:** `docs/reviews/...` (×2), `docs/reviews/...` (×3)
128
- - **Инструмент:** <название или текущий test runner> (если новый для проекта — пометка «требует установки»)
129
- - **Где запускать:** lint / test / pre-commit / CI / локальный скрипт
130
- - **Черновик:**
131
- ```<язык>
132
- <псевдокод/skeleton>
133
- ```
134
- - **Польза:** low/medium/high
135
-
136
- ### 2. ...
137
-
138
- ## Агентные усиления
139
-
140
- ### 1. <название паттерна>
141
- - **Тип:** agent
142
- - **Что закрывает:** <какую повторяющуюся ошибку процесса или нехватку контекста>
143
- - **Встречалось в:** `docs/reviews/...` (×2), `docs/fixes/...` (×1)
144
- - **Предложение:** MCP-сервер / новый eda-скил / правка существующего скила / специализированная агентная проверка
145
- - **Черновик:**
146
- ```markdown
147
- <конфиг, описание скила или инструкция агентной проверки>
148
- ```
149
- - **Польза:** low/medium/high
150
-
151
- ## Правила и архитектура
152
-
153
- ### 1. <название паттерна>
154
- - **Тип:** rules / architecture
155
- - **Куда:** `docs/rules.md` / `docs/arch.md`, раздел <название или «новый раздел»>
156
- - **Почему:** <какой повторяющийся паттерн закрывает>
157
- - **Встречалось в:** `docs/fixes/...` (×2), `docs/reviews/...` (×1)
158
- - **Черновик текста:**
159
- ```markdown
160
- <готовый фрагмент для docs/rules.md или docs/arch.md>
161
- ```
162
- - **Польза:** low/medium/high
163
-
164
- ## Приоритезация
165
- | # | Тип | Паттерн | Польза | Приоритет |
166
- |---|-----|---------|--------|-----------|
167
- | 1 | automation | ... | high | 1 |
168
-
169
- ## Рекомендация
170
- <какие 1–3 внедрить первыми и почему — простыми словами>
171
- ```
172
-
173
- ### 6. Финал
174
- Короткое сообщение: путь к отчёту, сколько паттернов нашёл, сколько предложений по проверкам кода/тестам, сколько по агентным усилениям и сколько по `docs/rules.md`/`docs/arch.md`, топ-3 рекомендации простыми словами, подсказка дальше — «хочешь внедрить → `eda-plan` для плана, потом `eda-execute`».
175
-
176
- ## Чего НЕ делать
177
- - Внедрять автоматизации, ставить MCP-серверы, создавать скилы или править `docs/rules.md`/`docs/arch.md` — только предлагать.
178
- - Предлагать на основе единичных замечаний — иначе получится белый шум.
179
- - Игнорировать существующий стек и предлагать новый инструмент, когда уже есть подходящий.
180
- - Предлагать второй инструмент того же класса в дополнение к уже установленному.
181
- - Подменять линтер, статанализатор или тест MCP-сервером/скилом, если ошибку можно надёжно поймать программной проверкой.
182
- - Предлагать MCP-сервер или новый скил без повторяющегося процесса, нехватки контекста или явной ошибки AI-агента.
183
- - Сохранять отчёт куда-либо кроме `docs/automations/`.
184
- - Дублировать в предложениях правила или архитектурные тезисы, которые уже зафиксированы в `docs/rules.md` или `docs/arch.md`.
185
- - В обычном режиме без `plans` смешивать проблемы планирования с ревью и фиксами.
@@ -1,91 +0,0 @@
1
- ---
2
- name: eda-commit
3
- description: 'Формирует коммит из незакоммиченных изменений с учётом текста рядом с вызовом: файлы, сообщение коммита и намерение push. Читает docs/rules.md и docs/arch.md, строго следует им и истории коммитов, включая связанные артефакты из `docs/**`, которые создали скилы. Коммитит без `--no-verify`. После коммита спрашивает интерактивно про push / merge в main + переключение + удаление ветки / ничего; inline push не обходит подтверждение. Не правит логику кода, не пишет тесты — это `eda-execute`, `eda-fix` или `eda-fix-by-review`.'
4
- ---
5
-
6
- # Скил: Коммитер (eda-commit)
7
-
8
- Берёшь незакоммиченные изменения, делаешь один аккуратный коммит, спрашиваешь у пользователя что делать дальше с веткой и remote.
9
-
10
- ## Вход из сообщения пользователя
11
-
12
- Текст рядом с вызовом скилла в текущем сообщении пользователя — главный вход. Сначала разбери именно его: тему, задачу, путь к файлу, режим, ограничения и прямые указания.
13
-
14
- Если этого входа достаточно, продолжай без вопроса. `AskUserQuestion` задавай только если входа нет, он противоречивый, найдено несколько равных вариантов или есть риск выполнить не ту задачу. Старое обсуждение в истории не считай входом, если пользователь не связал его с текущим вызовом явно.
15
-
16
- ## Главные правила
17
-
18
- 1. **Интерактивные вопросы** — по разделу ниже.
19
- 2. **Не правишь логику кода и не пишешь тесты.** Если на этапе коммита что-то не работает (упал hook, обнаружились сырые правки) — спроси через `AskUserQuestion`, не «допиливай» молча.
20
- 3. **Pre-commit / pre-push hooks не отключай.** Никаких `--no-verify`. Hook упал → правим причину → новый коммит (не `--amend`).
21
- 4. **Один логический коммит за вызов.** Если в diff видишь явно разные изменения — спроси через `AskUserQuestion`, разделить на несколько коммитов или коммитить одним.
22
- 5. **Прочитай `docs/rules.md` и `docs/arch.md`**, если есть, и строго следуй им при выборе файлов, сообщении коммита и дальнейших действиях.
23
- 6. **Не пропускай `docs/**`.** Планы, исследования, журналы, ревью, отчёты о фиксах, автоматизации, `docs/rules.md` и `docs/arch.md`, созданные или обновлённые скилами, — часть изменения. Если они относятся к текущей задаче, добавляй их в коммит вместе с кодом.
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
- - Для коммита это правило важнее требования довести операцию до конца: не делай push, merge, force-push, удаление ветки или исправление вне задачи вместо ответа пользователя.
34
-
35
- ## Этапы
36
-
37
- ### 1. Посмотреть состояние
38
- `git status`, `git diff --stat`, `git log -5 --oneline`, `docs/rules.md`, `docs/arch.md` (если есть) — определи стиль коммитов проекта и строго следуй правилам/архитектуре. Смотри и tracked, и untracked файлы.
39
-
40
- Если незакоммиченных изменений нет — сообщи и выйди.
41
-
42
- Разбери текст рядом с вызовом: он может задавать конкретные файлы для коммита, черновик сообщения коммита или намерение `push`. Используй список файлов и сообщение, если они не противоречат diff и правилам проекта. Inline `push` считай намерением для этапа 3, но не разрешением обойти обязательный вопрос после коммита. Merge, force-push, удаление ветки, спорные файлы и файлы с признаками секретов всё равно требуют подтверждения по правилам ниже.
43
-
44
- ### 2. Сформировать коммит
45
- Составь сообщение в стиле проекта: первая строка короткая (до ~70 символов), при необходимости — тело с пояснением «почему» (не «что» — это в diff).
46
-
47
- Перед `git add` явно выбери файлы для коммита. Включай связанные документы из `docs/**`, особенно:
48
- - `docs/plans/`, `docs/researches/`, `docs/executions/`;
49
- - `docs/reviews/`, `docs/review-fixes/`, `docs/fixes/`;
50
- - `docs/automations/`, `docs/rules.md`, `docs/arch.md`.
51
-
52
- Не считай эти файлы «служебным шумом» и не оставляй их untracked, если они созданы скилами для текущей задачи. Если документ из `docs/**` выглядит несвязанным с текущим изменением — спроси через `AskUserQuestion`, включать ли его.
53
-
54
- Закоммить через `git add` (точечно по файлам, не `-A`) и `git commit -m`. Не пуш, не `--amend`, не `--no-verify`.
55
-
56
- Если hook упал — прочитай вывод, исправь причину, повтори через **новый** коммит (не amend).
57
-
58
- ### 3. Спросить про дальнейшее
59
- Определи `HAS_REMOTE` (`git remote -v`), `CURRENT_BRANCH` (`git rev-parse --abbrev-ref HEAD`) и целевую ветку: `main` или основную ветку из `origin/HEAD`.
60
-
61
- Собери варианты для `AskUserQuestion`:
62
-
63
- | Вариант | Когда показывать |
64
- |---|---|
65
- | **Push** | Если `HAS_REMOTE` |
66
- | **Merge в main + переключение + удаление текущей ветки** | Если `CURRENT_BRANCH != main` |
67
- | **Ничего больше** | Всегда, если показываются другие варианты (или multiSelect, если хочешь push **и** merge — выбирай) |
68
-
69
- Показывай только применимые варианты. Если мы в main без remote — не задавай вопрос, сразу финал.
70
-
71
- Действия по выбору:
72
-
73
- | Выбор | Команды |
74
- |---|---|
75
- | Push | `git push -u origin <branch>` (или просто `git push`, если upstream уже настроен) |
76
- | Merge + switch + delete | `git checkout main` → `git merge <branch>` → `git branch -d <branch>` (если merge без конфликтов; конфликт → остановись, `AskUserQuestion`) |
77
- | Ничего | пропустить |
78
-
79
- Если push требует force (например, ветка уже на remote и история разошлась) — **остановись** и спроси через `AskUserQuestion`. Никогда не push --force в main.
80
-
81
- ### 4. Финал
82
- Короткое сообщение: хеш и заголовок коммита, что было сделано после (push / merge / ничего), текущая ветка после операции.
83
-
84
- ## Чего НЕ делать
85
- - `--no-verify`, `--no-gpg-sign` — никогда.
86
- - `--amend` существующего коммита — создавай новый.
87
- - `git add -A` или `git add .` — добавляй файлы по имени.
88
- - Пропускать связанные файлы из `docs/**` только потому, что это документация или артефакты скилов.
89
- - Коммитить файлы с похожими на секреты именами (`.env`, `credentials*`) без явного подтверждения через `AskUserQuestion`.
90
- - Push --force в main или master.
91
- - Делать ревью или править логику кода — это другие скилы.