@gian-tiaga/eda 0.2.0 → 0.2.2

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
@@ -105,9 +105,9 @@ eda update # синхронизировать скилы в текущ
105
105
  | Среда | Куда |
106
106
  |---|---|
107
107
  | **Claude Code** | `<project>/.claude/skills/<skill>/SKILL.md` — отдельная папка на каждый скил |
108
- | **Codex CLI** | `<project>/.codex/skills/<skill>.md` — отдельный файл на каждый скил |
108
+ | **Codex CLI** | `<project>/.codex/skills/<skill>/SKILL.md` — отдельная папка на каждый скил |
109
109
 
110
- `eda update` идемпотентно перезаписывает файлы в обеих папках. Если ты хочешь подправить скил локально — лучше копию сделай рядом, а не прямо в `.claude/skills/` или `.codex/skills/`, иначе при следующем `update` твои правки потеряются.
110
+ `eda update` идемпотентно перезаписывает файлы в обеих папках. При обновлении старые файлы Codex-формата `<project>/.codex/skills/<skill>.md`, созданные версиями `eda` до этой структуры, удаляются. Если ты хочешь подправить скил локально — лучше копию сделай рядом, а не прямо в `.claude/skills/` или `.codex/skills/`, иначе при следующем `update` твои правки потеряются.
111
111
 
112
112
  `AGENTS.md` (как и любые другие файлы в корне проекта) установщик **не трогает**. Если хочешь, чтобы Codex автоматически подгружал скилы, дай ему знать сам — например, одной строкой в `AGENTS.md`: «следуй инструкциям из `.codex/skills/`».
113
113
 
package/lib/install.js CHANGED
@@ -92,12 +92,23 @@ async function installToCodex(cwd, skills) {
92
92
  const dst = path.join(cwd, '.codex/skills');
93
93
  await fs.mkdir(dst, { recursive: true });
94
94
  for (const skill of skills) {
95
+ const skillDir = path.join(dst, skill.name);
96
+ await fs.mkdir(skillDir, { recursive: true });
95
97
  const content = await fs.readFile(skill.path, 'utf-8');
96
- await fs.writeFile(path.join(dst, `${skill.name}.md`), content);
98
+ await fs.writeFile(path.join(skillDir, 'SKILL.md'), content);
99
+ await removeObsoleteCodexFile(dst, skill.name);
97
100
  }
98
101
  process.stdout.write(` ✓ Codex CLI: ${dst}\n`);
99
102
  }
100
103
 
104
+ async function removeObsoleteCodexFile(dst, skillName) {
105
+ try {
106
+ await fs.rm(path.join(dst, `${skillName}.md`));
107
+ } catch (err) {
108
+ if (err?.code !== 'ENOENT') throw err;
109
+ }
110
+ }
111
+
101
112
  async function dirExists(p) {
102
113
  try {
103
114
  const st = await fs.stat(p);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gian-tiaga/eda",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Набор скилов eda-* для Claude Code и Codex CLI: research, plan, execute, review, fix, send-review, commit, docs, automate",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,7 @@
16
16
  "node": ">=18"
17
17
  },
18
18
  "scripts": {
19
- "test": "node --test test/"
19
+ "test": "node --test \"test/**/*.test.js\""
20
20
  },
21
21
  "keywords": [
22
22
  "claude",