@gian-tiaga/eda 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,7 +19,7 @@ npm install -g @gian-tiaga/eda
19
19
  eda init
20
20
  ```
21
21
 
22
- Установщик покажет чекбоксы: стрелками выбираешь среду, пробелом отмечаешь, Enter продолжает. Можно поставить Claude Code, Codex CLI или обе среды сразу. Если `docs/settings.yaml` ещё нет, установщик также предложит выбрать настройки скилов и создаст этот файл.
22
+ Установщик покажет чекбоксы: стрелками выбираешь среду, пробелом отмечаешь, Enter продолжает. Можно поставить Claude Code, Codex CLI или обе среды сразу. Если `docs/settings.yaml` ещё нет, установщик также предложит выбрать настройки скилов и создаст этот файл. В конце `eda init` пишет, сколько скилов установлено.
23
23
 
24
24
  ---
25
25
 
@@ -65,22 +65,29 @@ eda init
65
65
  version: 1
66
66
 
67
67
  defaults:
68
+ # Включает strict-режим по умолчанию для eda-explore, eda-plan и eda-review.
68
69
  # true | false
69
70
  strict: false
71
+ # Задаёт размер плана по умолчанию для eda-plan.
70
72
  # normal | short | ask_each_time
71
73
  plan_size: normal
74
+ # Определяет, как eda-explore и eda-plan принимают существенные решения.
72
75
  # autonomous | recommend_and_ask | ask_each_time
73
76
  decision_mode: recommend_and_ask
77
+ # Задаёт стратегию тестов по умолчанию для eda-plan.
74
78
  # after_each_phase | tdd_each_phase | end_of_plan | ask_each_time
75
79
  test_strategy: ask_each_time
80
+ # Задаёт стратегию логирования по умолчанию для eda-plan.
76
81
  # debug_precise | standard | ask_each_time
77
82
  logging_strategy: ask_each_time
78
83
 
79
84
  automate:
85
+ # Добавляет docs/plans/ в обычный запуск eda-automate.
80
86
  # true | false
81
87
  include_plans: false
82
88
 
83
89
  review:
90
+ # Добавляет в eda-review проверку качества кода и meta-reviewer quality-check.
84
91
  # true | false
85
92
  include_code_quality: true
86
93
  ```
@@ -130,7 +137,7 @@ automate может запускаться от review, fix-by-review или fix
130
137
 
131
138
  ```bash
132
139
  eda init # выбрать Claude Code / Codex / обе среды и установить скилы
133
- eda update # обновить скилы и создать docs/settings.yaml, если его ещё нет
140
+ eda update # обновить скилы, показать их количество и создать docs/settings.yaml, если его ещё нет
134
141
  eda --version # показать версию установленного пакета
135
142
  eda --help # справка
136
143
  ```
@@ -153,7 +160,7 @@ eda update # синхронизировать скилы в текущ
153
160
  | **Claude Code** | `<project>/.claude/skills/<skill>/SKILL.md` — отдельная папка на каждый скил |
154
161
  | **Codex CLI** | `<project>/.codex/skills/<skill>/SKILL.md` — отдельная папка на каждый скил |
155
162
 
156
- `eda update` идемпотентно перезаписывает файлы в обеих папках. При обновлении старые файлы Codex-формата `<project>/.codex/skills/<skill>.md`, созданные версиями `eda` до этой структуры, удаляются. Если ты хочешь подправить скил локально — лучше копию сделай рядом, а не прямо в `.claude/skills/` или `.codex/skills/`, иначе при следующем `update` твои правки потеряются.
163
+ `eda update` идемпотентно перезаписывает файлы в обеих папках и в конце пишет, сколько скилов обновлено. При обновлении старые файлы Codex-формата `<project>/.codex/skills/<skill>.md`, созданные версиями `eda` до этой структуры, удаляются. Если ты хочешь подправить скил локально — лучше копию сделай рядом, а не прямо в `.claude/skills/` или `.codex/skills/`, иначе при следующем `update` твои правки потеряются.
157
164
 
158
165
  `AGENTS.md` (как и любые другие файлы в корне проекта) установщик **не трогает**. Если хочешь, чтобы Codex автоматически подгружал скилы, дай ему знать сам — например, одной строкой в `AGENTS.md`: «следуй инструкциям из `.codex/skills/`».
159
166
 
package/lib/install.js CHANGED
@@ -108,7 +108,7 @@ export async function init({ cwd, input = process.stdin, output = process.stdout
108
108
  return;
109
109
  }
110
110
  await ensureSettings(cwd, { input, output });
111
- await syncSkills(cwd, targets, output);
111
+ await syncSkills(cwd, targets, output, { action: 'install' });
112
112
  }
113
113
 
114
114
  export async function update({ cwd, input = process.stdin, output = process.stdout }) {
@@ -119,7 +119,7 @@ export async function update({ cwd, input = process.stdin, output = process.stdo
119
119
  }
120
120
  output.write(`Найдены установленные среды: ${targets.join(', ')}\n`);
121
121
  await ensureSettings(cwd, { input, output });
122
- await syncSkills(cwd, targets, output);
122
+ await syncSkills(cwd, targets, output, { action: 'update' });
123
123
  }
124
124
 
125
125
  export async function askTargets({ input = process.stdin, output = process.stdout } = {}) {
@@ -211,7 +211,7 @@ async function detectTargets(cwd) {
211
211
  return targets;
212
212
  }
213
213
 
214
- async function syncSkills(cwd, targets, output = process.stdout) {
214
+ async function syncSkills(cwd, targets, output = process.stdout, { action = 'update' } = {}) {
215
215
  const skills = await listSkills();
216
216
  if (skills.length === 0) {
217
217
  throw new Error(`В пакете нет скилов (искал в ${SKILLS_SRC}).`);
@@ -222,6 +222,8 @@ async function syncSkills(cwd, targets, output = process.stdout) {
222
222
  if (targets.includes('codex')) await installToCodex(cwd, skills, output);
223
223
  await removeRetiredSkills(cwd, targets);
224
224
 
225
+ const actionLabel = action === 'install' ? 'Установлено' : 'Обновлено';
226
+ output.write(`${actionLabel} ${formatSkillCount(skills.length)}.\n`);
225
227
  output.write('\nГотово.\n');
226
228
  }
227
229
 
@@ -252,22 +254,29 @@ function formatSettings(settings) {
252
254
  return `version: 1
253
255
 
254
256
  defaults:
257
+ # Включает strict-режим по умолчанию для eda-explore, eda-plan и eda-review.
255
258
  # true | false
256
259
  strict: ${settings.strict ? 'true' : 'false'}
260
+ # Задаёт размер плана по умолчанию для eda-plan.
257
261
  # normal | short | ask_each_time
258
262
  plan_size: ${settings.planSize}
263
+ # Определяет, как eda-explore и eda-plan принимают существенные решения.
259
264
  # autonomous | recommend_and_ask | ask_each_time
260
265
  decision_mode: ${settings.decisionMode}
266
+ # Задаёт стратегию тестов по умолчанию для eda-plan.
261
267
  # after_each_phase | tdd_each_phase | end_of_plan | ask_each_time
262
268
  test_strategy: ${settings.testStrategy}
269
+ # Задаёт стратегию логирования по умолчанию для eda-plan.
263
270
  # debug_precise | standard | ask_each_time
264
271
  logging_strategy: ${settings.loggingStrategy}
265
272
 
266
273
  automate:
274
+ # Добавляет docs/plans/ в обычный запуск eda-automate.
267
275
  # true | false
268
276
  include_plans: ${settings.includePlans ? 'true' : 'false'}
269
277
 
270
278
  review:
279
+ # Добавляет в eda-review проверку качества кода и meta-reviewer quality-check.
271
280
  # true | false
272
281
  include_code_quality: ${settings.includeCodeQuality ? 'true' : 'false'}
273
282
  `;
@@ -282,7 +291,7 @@ async function installToClaude(cwd, skills, output = process.stdout) {
282
291
  const content = await fs.readFile(skill.path, 'utf-8');
283
292
  await fs.writeFile(path.join(skillDir, 'SKILL.md'), content);
284
293
  }
285
- output.write(` ✓ Claude Code: ${dst}\n`);
294
+ output.write(` ✓ Claude Code: ${dst} (${formatSkillCount(skills.length)})\n`);
286
295
  }
287
296
 
288
297
  async function installToCodex(cwd, skills, output = process.stdout) {
@@ -295,7 +304,19 @@ async function installToCodex(cwd, skills, output = process.stdout) {
295
304
  await fs.writeFile(path.join(skillDir, 'SKILL.md'), content);
296
305
  await removeObsoleteCodexFile(dst, skill.name);
297
306
  }
298
- output.write(` ✓ Codex CLI: ${dst}\n`);
307
+ output.write(` ✓ Codex CLI: ${dst} (${formatSkillCount(skills.length)})\n`);
308
+ }
309
+
310
+ function formatSkillCount(count) {
311
+ return `${count} ${pluralizeSkill(count)}`;
312
+ }
313
+
314
+ function pluralizeSkill(count) {
315
+ const mod10 = count % 10;
316
+ const mod100 = count % 100;
317
+ if (mod10 === 1 && mod100 !== 11) return 'скил';
318
+ if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) return 'скила';
319
+ return 'скилов';
299
320
  }
300
321
 
301
322
  async function removeObsoleteCodexFile(dst, skillName) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Набор скилов eda-* для Claude Code и Codex CLI: roadmap, explore, plan, execute, fix, review, fix-by-review, send-review, commit, docs, automate",
5
5
  "type": "module",
6
6
  "bin": {