openspec-playwright 0.1.63 → 0.1.65

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
@@ -20,22 +20,13 @@ openspec-pw init # Install Playwright E2E integration
20
20
 
21
21
  ## Supported AI Coding Assistants
22
22
 
23
- Auto-detects and installs commands for all 23 editors OpenSpec supports:
23
+ Auto-detects and installs commands for all 5 editors OpenSpec supports:
24
24
 
25
25
  | Editor | Path | Editor | Path |
26
26
  |--------|------|--------|------|
27
27
  | Claude Code | `.claude/` | Gemini CLI | `.gemini/` |
28
28
  | Cursor | `.cursor/` | GitHub Copilot | `.github/` |
29
- | Windsurf | `.windsurf/` | Kiro | `.kiro/` |
30
- | Cline | `.clinerules/` | Kilo Code | `.kilocode/` |
31
- | Continue | `.continue/` | iFlow | `.iflow/` |
32
- | Amazon Q | `.amazonq/` | CoStrict | `.cospec/` |
33
- | Antigravity | `.agent/` | OpenCode | `.opencode/` |
34
- | Auggie | `.augment/` | Factory | `.factory/` |
35
- | CodeBuddy | `.codebuddy/` | Pi | `.pi/` |
36
- | Codex | `~/.codex/` (global) | Qoder | `.qoder/` |
37
- | Qwen Code | `.qwen/` | RooCode | `.roo/` |
38
- | Crush | `.crush/` | | |
29
+ | Cline | `.clinerules/` | | |
39
30
 
40
31
  `openspec-pw init` auto-detects editors in your project and installs the right command files. Claude Code gets the full experience (skill + command + Playwright MCP). Other editors get command/workflow files with the complete E2E workflow.
41
32
 
@@ -45,7 +36,7 @@ Auto-detects and installs commands for all 23 editors OpenSpec supports:
45
36
 
46
37
  ```bash
47
38
  /opsx:e2e my-feature # Claude Code
48
- /opsx-e2e my-feature # Cursor, Windsurf, Cline, Continue
39
+ /opsx-e2e my-feature # Cursor, Cline, Gemini CLI, GitHub Copilot
49
40
  ```
50
41
 
51
42
  ### CLI Commands
@@ -101,12 +92,12 @@ openspec-pw uninstall # Remove integration from the project
101
92
 
102
93
  1. **Node.js >= 20**
103
94
  2. **OpenSpec** initialized: `npm install -g @fission-ai/openspec && openspec init`
104
- 3. **One of 23 editors**: Claude Code, Cursor, Windsurf, Cline, Continue, Amazon Q, Gemini CLI, GitHub Copilot, Kiro, Kilo Code, iFlow, CoStrict, OpenCode, Auggie, Factory, CodeBuddy, Codex, Pi, Qoder, Qwen Code, RooCode, Crush, Antigravity (auto-detected)
95
+ 3. **One of 5 editors**: Claude Code, Cursor, Cline, Gemini CLI, GitHub Copilot (auto-detected)
105
96
  4. **Claude Code only**: Playwright MCP — `claude mcp add playwright npx @playwright/mcp@latest`
106
97
 
107
98
  ## What `openspec-pw init` Does
108
99
 
109
- 1. Detects installed AI coding assistants (all 23 supported editors)
100
+ 1. Detects installed AI coding assistants (all 5 supported editors)
110
101
  2. Installs E2E command/workflow files for each detected editor
111
102
  3. Installs `/openspec-e2e` skill for Claude Code
112
103
  4. Installs Playwright MCP globally for Claude Code (via `claude mcp add`)
@@ -171,9 +162,9 @@ CLI (openspec-pw)
171
162
  Skill/Commands (per editor)
172
163
  ├── Claude Code → /opsx:e2e (skill) + /opsx:e2e (command) + MCP
173
164
  ├── Cursor → /opsx-e2e (command)
174
- ├── Windsurf → /opsx-e2e (workflow)
175
- ├── Cline → /opsx-e2e (workflow)
176
- └── Continue → /opsx-e2e (prompt)
165
+ ├── Cline → /opsx-e2e (workflow)
166
+ ├── Gemini CLI → /opsx-e2e (command)
167
+ └── GitHub Copilot → /opsx-e2e (command)
177
168
 
178
169
  Test Assets (tests/playwright/)
179
170
  ├── seed.spec.ts → Env validation
package/README.zh-CN.md CHANGED
@@ -20,22 +20,13 @@ openspec-pw init # 安装 Playwright E2E 集成
20
20
 
21
21
  ## 支持的 AI 编码助手
22
22
 
23
- 自动检测并安装 OpenSpec 支持的全部 23 个编辑器的命令文件:
23
+ 自动检测并安装 OpenSpec 支持的全部 5 个编辑器的命令文件:
24
24
 
25
25
  | 编辑器 | 路径 | 编辑器 | 路径 |
26
26
  |--------|------|--------|------|
27
27
  | Claude Code | `.claude/` | Gemini CLI | `.gemini/` |
28
28
  | Cursor | `.cursor/` | GitHub Copilot | `.github/` |
29
- | Windsurf | `.windsurf/` | Kiro | `.kiro/` |
30
- | Cline | `.clinerules/` | Kilo Code | `.kilocode/` |
31
- | Continue | `.continue/` | iFlow | `.iflow/` |
32
- | Amazon Q | `.amazonq/` | CoStrict | `.cospec/` |
33
- | Antigravity | `.agent/` | OpenCode | `.opencode/` |
34
- | Auggie | `.augment/` | Factory | `.factory/` |
35
- | CodeBuddy | `.codebuddy/` | Pi | `.pi/` |
36
- | Codex | `~/.codex/` (全局) | Qoder | `.qoder/` |
37
- | Qwen Code | `.qwen/` | RooCode | `.roo/` |
38
- | Crush | `.crush/` | | |
29
+ | Cline | `.clinerules/` | | |
39
30
 
40
31
  `openspec-pw init` 会检测项目中安装了哪些编辑器并安装对应文件。Claude Code 获得完整体验(skill + 命令 + Playwright MCP)。其他编辑器获得包含完整 E2E 工作流的命令/工作流文件。
41
32
 
@@ -45,7 +36,7 @@ openspec-pw init # 安装 Playwright E2E 集成
45
36
 
46
37
  ```bash
47
38
  /opsx:e2e my-feature # Claude Code
48
- /opsx-e2e my-feature # Cursor, Windsurf, Cline, Continue
39
+ /opsx-e2e my-feature # Cursor, Cline, Gemini CLI, GitHub Copilot
49
40
  ```
50
41
 
51
42
  ### CLI 命令
@@ -102,12 +93,12 @@ openspec-pw uninstall # 移除项目中的集成
102
93
 
103
94
  1. **Node.js >= 20**
104
95
  2. **OpenSpec** 已初始化: `npm install -g @fission-ai/openspec && openspec init`
105
- 3. **任一 23 编辑器**: Claude Code、Cursor、Windsurf、Cline、Continue 等(自动检测)
96
+ 3. **任一 5 编辑器**: Claude Code、Cursor、Cline、Gemini CLI、GitHub Copilot(自动检测)
106
97
  4. **仅 Claude Code**: Playwright MCP — `claude mcp add playwright npx @playwright/mcp@latest`
107
98
 
108
99
  ## `openspec-pw init` 做了什么
109
100
 
110
- 1. 检测已安装的 AI 编码助手(支持全部 23 个编辑器)
101
+ 1. 检测已安装的 AI 编码助手(支持全部 5 个编辑器)
111
102
  2. 为每个检测到的编辑器安装 E2E 命令/工作流文件
112
103
  3. 为 Claude Code 安装 `/openspec-e2e` skill
113
104
  4. 为 Claude Code 全局安装 Playwright MCP(通过 `claude mcp add`)
@@ -172,9 +163,9 @@ CLI (openspec-pw)
172
163
  Skill/命令(按编辑器)
173
164
  ├── Claude Code → /opsx:e2e (skill) + /opsx:e2e (command) + MCP
174
165
  ├── Cursor → /opsx-e2e (command)
175
- ├── Windsurf → /opsx-e2e (workflow)
176
- ├── Cline → /opsx-e2e (workflow)
177
- └── Continue → /opsx-e2e (prompt)
166
+ ├── Cline → /opsx-e2e (workflow)
167
+ ├── Gemini CLI → /opsx-e2e (command)
168
+ └── GitHub Copilot → /opsx-e2e (command)
178
169
 
179
170
  测试资产 (tests/playwright/)
180
171
  ├── seed.spec.ts → 环境验证
@@ -1,6 +1,6 @@
1
1
  /** Shared YAML escape — matches OpenSpec's escape logic */
2
2
  export declare function escapeYamlValue(value: string): string;
3
- /** Format tags as YAML inline array (escaped) */
3
+ /** Format tags as YAML inline array */
4
4
  export declare function formatTagsArray(tags: string[]): string;
5
5
  /** Command metadata shared across editors */
6
6
  export interface CommandMeta {
@@ -23,8 +23,6 @@ declare const claudeAdapter: EditorAdapter;
23
23
  declare const ALL_ADAPTERS: EditorAdapter[];
24
24
  /** Detect which editors are installed by checking their config directories */
25
25
  export declare function detectEditors(projectRoot: string): EditorAdapter[];
26
- /** Detect Codex by checking if CODEX_HOME or ~/.codex exists */
27
- export declare function detectCodex(): EditorAdapter | null;
28
26
  /** Build the shared command metadata */
29
27
  export declare function buildCommandMeta(body: string): CommandMeta;
30
28
  /** Install command files for all detected editors */
@@ -1,5 +1,4 @@
1
1
  import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
2
- import { homedir } from "os";
3
2
  import { join, dirname, resolve as pathResolve } from "path";
4
3
  import chalk from "chalk";
5
4
  /** Shared YAML escape — matches OpenSpec's escape logic */
@@ -14,18 +13,10 @@ export function escapeYamlValue(value) {
14
13
  }
15
14
  return value;
16
15
  }
17
- /** Format tags as YAML inline array (escaped) */
16
+ /** Format tags as YAML inline array */
18
17
  export function formatTagsArray(tags) {
19
18
  return `[${tags.map((t) => escapeYamlValue(t)).join(", ")}]`;
20
19
  }
21
- /** Format tags as YAML inline array (plain, no escaping) */
22
- function formatTagsPlain(tags) {
23
- return `[${tags.join(", ")}]`;
24
- }
25
- /** Transform /opsx: to /opsx- for OpenCode */
26
- function transformToHyphenCommands(text) {
27
- return text.replace(/\/opsx:/g, "/opsx-");
28
- }
29
20
  // ─── Claude Code ──────────────────────────────────────────────────────────────
30
21
  /** Claude Code: .claude/commands/opsx/<id>.md + SKILL.md */
31
22
  const claudeAdapter = {
@@ -66,28 +57,8 @@ ${meta.body}
66
57
  `;
67
58
  },
68
59
  };
69
- // ─── Windsurf ────────────────────────────────────────────────────────────────
70
- /** Windsurf: .windsurf/workflows/opsx-<id>.md */
71
- const windsurfAdapter = {
72
- toolId: "windsurf",
73
- hasSkill: false,
74
- getCommandPath(id) {
75
- return join(".windsurf", "workflows", `opsx-${id}.md`);
76
- },
77
- formatCommand(meta) {
78
- return `---
79
- name: ${escapeYamlValue(meta.name)}
80
- description: ${escapeYamlValue(meta.description)}
81
- category: ${escapeYamlValue(meta.category)}
82
- tags: ${formatTagsArray(meta.tags)}
83
- ---
84
-
85
- ${meta.body}
86
- `;
87
- },
88
- };
89
- // ─── Cline ──────────────────────────────────────────────────────────────────
90
- /** Cline: .clinerules/workflows/opsx-<id>.md — markdown header only */
60
+ // ─── Cline ───────────────────────────────────────────────────────────────────
61
+ /** Cline: .clinerules/workflows/opsx-<id>.md */
91
62
  const clineAdapter = {
92
63
  toolId: "cline",
93
64
  hasSkill: false,
@@ -103,174 +74,7 @@ ${meta.body}
103
74
  `;
104
75
  },
105
76
  };
106
- // ─── Continue ────────────────────────────────────────────────────────────────
107
- /** Continue: .continue/prompts/opsx-<id>.prompt */
108
- const continueAdapter = {
109
- toolId: "continue",
110
- hasSkill: false,
111
- getCommandPath(id) {
112
- return join(".continue", "prompts", `opsx-${id}.prompt`);
113
- },
114
- formatCommand(meta) {
115
- return `---
116
- name: opsx-${meta.id}
117
- description: ${meta.description}
118
- invokable: true
119
- ---
120
-
121
- ${meta.body}
122
- `;
123
- },
124
- };
125
- // ─── amazon-q ─────────────────────────────────────────────────────────────
126
- /** Amazon Q: .amazonq/prompts/opsx-<id>.md */
127
- const amazonqAdapter = {
128
- toolId: "amazon-q",
129
- hasSkill: false,
130
- getCommandPath(id) {
131
- return join(".amazonq", "prompts", `opsx-${id}.md`);
132
- },
133
- formatCommand(meta) {
134
- return `---
135
- description: ${meta.description}
136
- ---
137
-
138
- ${meta.body}
139
- `;
140
- },
141
- };
142
- // ─── antigravity ──────────────────────────────────────────────────────────
143
- /** Antigravity: .agent/workflows/opsx-<id>.md */
144
- const antigravityAdapter = {
145
- toolId: "antigravity",
146
- hasSkill: false,
147
- getCommandPath(id) {
148
- return join(".agent", "workflows", `opsx-${id}.md`);
149
- },
150
- formatCommand(meta) {
151
- return `---
152
- description: ${meta.description}
153
- ---
154
-
155
- ${meta.body}
156
- `;
157
- },
158
- };
159
- // ─── auggie ────────────────────────────────────────────────────────────────
160
- /** Auggie: .augment/commands/opsx-<id>.md */
161
- const auggieAdapter = {
162
- toolId: "auggie",
163
- hasSkill: false,
164
- getCommandPath(id) {
165
- return join(".augment", "commands", `opsx-${id}.md`);
166
- },
167
- formatCommand(meta) {
168
- return `---
169
- description: ${meta.description}
170
- argument-hint: command arguments
171
- ---
172
-
173
- ${meta.body}
174
- `;
175
- },
176
- };
177
- // ─── codebuddy ─────────────────────────────────────────────────────────────
178
- /** CodeBuddy: .codebuddy/commands/opsx/<id>.md */
179
- const codebuddyAdapter = {
180
- toolId: "codebuddy",
181
- hasSkill: false,
182
- getCommandPath(id) {
183
- return join(".codebuddy", "commands", "opsx", `${id}.md`);
184
- },
185
- formatCommand(meta) {
186
- return `---
187
- name: ${meta.name}
188
- description: "${meta.description}"
189
- argument-hint: "[command arguments]"
190
- ---
191
-
192
- ${meta.body}
193
- `;
194
- },
195
- };
196
- // ─── codex ────────────────────────────────────────────────────────────────
197
- /** Codex: <CODEX_HOME>/prompts/opsx-<id>.md — global scope */
198
- const codexAdapter = {
199
- toolId: "codex",
200
- hasSkill: false,
201
- getCommandPath(id) {
202
- const codexHome = process.env.CODEX_HOME?.trim() || join(homedir(), ".codex");
203
- // pathResolve: if codexHome is absolute (C:\...), it returns codexHome directly
204
- // if relative, it resolves against projectRoot
205
- return pathResolve(codexHome, "prompts", `opsx-${id}.md`);
206
- },
207
- formatCommand(meta) {
208
- return `---
209
- description: ${meta.description}
210
- argument-hint: command arguments
211
- ---
212
-
213
- ${meta.body}
214
- `;
215
- },
216
- };
217
- // ─── costrict ─────────────────────────────────────────────────────────────
218
- /** CoStrict: .cospec/openspec/commands/opsx-<id>.md */
219
- const costrictAdapter = {
220
- toolId: "costrict",
221
- hasSkill: false,
222
- getCommandPath(id) {
223
- return join(".cospec", "openspec", "commands", `opsx-${id}.md`);
224
- },
225
- formatCommand(meta) {
226
- return `---
227
- description: "${meta.description}"
228
- argument-hint: command arguments
229
- ---
230
-
231
- ${meta.body}
232
- `;
233
- },
234
- };
235
- // ─── crush ────────────────────────────────────────────────────────────────
236
- /** Crush: .crush/commands/opsx/<id>.md — raw values, no escaping */
237
- const crushAdapter = {
238
- toolId: "crush",
239
- hasSkill: false,
240
- getCommandPath(id) {
241
- return join(".crush", "commands", "opsx", `${id}.md`);
242
- },
243
- formatCommand(meta) {
244
- return `---
245
- name: ${meta.name}
246
- description: ${meta.description}
247
- category: ${meta.category}
248
- tags: ${formatTagsPlain(meta.tags)}
249
- ---
250
-
251
- ${meta.body}
252
- `;
253
- },
254
- };
255
- // ─── factory ───────────────────────────────────────────────────────────────
256
- /** Factory Droid: .factory/commands/opsx-<id>.md */
257
- const factoryAdapter = {
258
- toolId: "factory",
259
- hasSkill: false,
260
- getCommandPath(id) {
261
- return join(".factory", "commands", `opsx-${id}.md`);
262
- },
263
- formatCommand(meta) {
264
- return `---
265
- description: ${meta.description}
266
- argument-hint: command arguments
267
- ---
268
-
269
- ${meta.body}
270
- `;
271
- },
272
- };
273
- // ─── gemini ────────────────────────────────────────────────────────────────
77
+ // ─── Gemini CLI ──────────────────────────────────────────────────────────────
274
78
  /** Gemini CLI: .gemini/commands/opsx/<id>.toml */
275
79
  const geminiAdapter = {
276
80
  toolId: "gemini",
@@ -287,7 +91,7 @@ ${meta.body}
287
91
  `;
288
92
  },
289
93
  };
290
- // ─── github-copilot ────────────────────────────────────────────────────────
94
+ // ─── GitHub Copilot ────────────────────────────────────────────────────────
291
95
  /** GitHub Copilot: .github/prompts/opsx-<id>.prompt.md */
292
96
  const githubcopilotAdapter = {
293
97
  toolId: "github-copilot",
@@ -300,145 +104,6 @@ const githubcopilotAdapter = {
300
104
  description: ${meta.description}
301
105
  ---
302
106
 
303
- ${meta.body}
304
- `;
305
- },
306
- };
307
- // ─── iflow ────────────────────────────────────────────────────────────────
308
- /** iFlow: .iflow/commands/opsx-<id>.md */
309
- const iflowAdapter = {
310
- toolId: "iflow",
311
- hasSkill: false,
312
- getCommandPath(id) {
313
- return join(".iflow", "commands", `opsx-${id}.md`);
314
- },
315
- formatCommand(meta) {
316
- return `---
317
- name: /opsx-${meta.id}
318
- id: opsx-${meta.id}
319
- category: ${meta.category}
320
- description: ${meta.description}
321
- ---
322
-
323
- ${meta.body}
324
- `;
325
- },
326
- };
327
- // ─── kilocode ────────────────────────────────────────────────────────────
328
- /** Kilo Code: .kilocode/workflows/opsx-<id>.md — body only */
329
- const kilocodeAdapter = {
330
- toolId: "kilocode",
331
- hasSkill: false,
332
- getCommandPath(id) {
333
- return join(".kilocode", "workflows", `opsx-${id}.md`);
334
- },
335
- formatCommand(meta) {
336
- return `${meta.body}
337
- `;
338
- },
339
- };
340
- // ─── kiro ─────────────────────────────────────────────────────────────────
341
- /** Kiro: .kiro/prompts/opsx-<id>.prompt.md */
342
- const kiroAdapter = {
343
- toolId: "kiro",
344
- hasSkill: false,
345
- getCommandPath(id) {
346
- return join(".kiro", "prompts", `opsx-${id}.prompt.md`);
347
- },
348
- formatCommand(meta) {
349
- return `---
350
- description: ${meta.description}
351
- ---
352
-
353
- ${meta.body}
354
- `;
355
- },
356
- };
357
- // ─── opencode ─────────────────────────────────────────────────────────────
358
- /** OpenCode: .opencode/commands/opsx-<id>.md — transforms /opsx: to /opsx- */
359
- const opencodeAdapter = {
360
- toolId: "opencode",
361
- hasSkill: false,
362
- getCommandPath(id) {
363
- return join(".opencode", "commands", `opsx-${id}.md`);
364
- },
365
- formatCommand(meta) {
366
- const transformed = transformToHyphenCommands(meta.body);
367
- return `---
368
- description: ${meta.description}
369
- ---
370
-
371
- ${transformed}
372
- `;
373
- },
374
- };
375
- // ─── pi ──────────────────────────────────────────────────────────────────
376
- /** Pi: .pi/prompts/opsx-<id>.md */
377
- const piAdapter = {
378
- toolId: "pi",
379
- hasSkill: false,
380
- getCommandPath(id) {
381
- return join(".pi", "prompts", `opsx-${id}.md`);
382
- },
383
- formatCommand(meta) {
384
- return `---
385
- description: ${escapeYamlValue(meta.description)}
386
- ---
387
-
388
- ${meta.body}
389
- `;
390
- },
391
- };
392
- // ─── qoder ────────────────────────────────────────────────────────────────
393
- /** Qoder: .qoder/commands/opsx/<id>.md — raw values, no escaping */
394
- const qoderAdapter = {
395
- toolId: "qoder",
396
- hasSkill: false,
397
- getCommandPath(id) {
398
- return join(".qoder", "commands", "opsx", `${id}.md`);
399
- },
400
- formatCommand(meta) {
401
- return `---
402
- name: ${meta.name}
403
- description: ${meta.description}
404
- category: ${meta.category}
405
- tags: ${formatTagsPlain(meta.tags)}
406
- ---
407
-
408
- ${meta.body}
409
- `;
410
- },
411
- };
412
- // ─── qwen ────────────────────────────────────────────────────────────────
413
- /** Qwen Code: .qwen/commands/opsx-<id>.toml */
414
- const qwenAdapter = {
415
- toolId: "qwen",
416
- hasSkill: false,
417
- getCommandPath(id) {
418
- return join(".qwen", "commands", `opsx-${id}.toml`);
419
- },
420
- formatCommand(meta) {
421
- return `description = "${meta.description}"
422
-
423
- prompt = """
424
- ${meta.body}
425
- """
426
- `;
427
- },
428
- };
429
- // ─── roocode ─────────────────────────────────────────────────────────────
430
- /** RooCode: .roo/commands/opsx-<id>.md — markdown header */
431
- const roocodeAdapter = {
432
- toolId: "roocode",
433
- hasSkill: false,
434
- getCommandPath(id) {
435
- return join(".roo", "commands", `opsx-${id}.md`);
436
- },
437
- formatCommand(meta) {
438
- return `# ${meta.name}
439
-
440
- ${meta.description}
441
-
442
107
  ${meta.body}
443
108
  `;
444
109
  },
@@ -447,64 +112,23 @@ ${meta.body}
447
112
  const ALL_ADAPTERS = [
448
113
  claudeAdapter,
449
114
  cursorAdapter,
450
- windsurfAdapter,
451
115
  clineAdapter,
452
- continueAdapter,
453
- amazonqAdapter,
454
- antigravityAdapter,
455
- auggieAdapter,
456
- codebuddyAdapter,
457
- codexAdapter,
458
- costrictAdapter,
459
- crushAdapter,
460
- factoryAdapter,
461
116
  geminiAdapter,
462
117
  githubcopilotAdapter,
463
- iflowAdapter,
464
- kilocodeAdapter,
465
- kiroAdapter,
466
- opencodeAdapter,
467
- piAdapter,
468
- qoderAdapter,
469
- qwenAdapter,
470
- roocodeAdapter,
471
118
  ];
472
119
  /** Detect which editors are installed by checking their config directories */
473
120
  export function detectEditors(projectRoot) {
474
121
  const checks = [
475
122
  [".claude", claudeAdapter],
476
123
  [".cursor", cursorAdapter],
477
- [".windsurf", windsurfAdapter],
478
124
  [".clinerules", clineAdapter],
479
- [".continue", continueAdapter],
480
- [".amazonq", amazonqAdapter],
481
- [".agent", antigravityAdapter],
482
- [".augment", auggieAdapter],
483
- [".codebuddy", codebuddyAdapter],
484
- [".cospec", costrictAdapter],
485
- [".crush", crushAdapter],
486
- [".factory", factoryAdapter],
487
125
  [".gemini", geminiAdapter],
488
126
  [".github", githubcopilotAdapter],
489
- [".iflow", iflowAdapter],
490
- [".kilocode", kilocodeAdapter],
491
- [".kiro", kiroAdapter],
492
- [".opencode", opencodeAdapter],
493
- [".pi", piAdapter],
494
- [".qoder", qoderAdapter],
495
- [".qwen", qwenAdapter],
496
- [".roo", roocodeAdapter],
497
127
  ];
498
128
  return checks
499
129
  .filter(([dir]) => existsSync(join(projectRoot, dir)))
500
130
  .map(([, adapter]) => adapter);
501
131
  }
502
- // ─── Codex is global — detect separately ─────────────────────────────────
503
- /** Detect Codex by checking if CODEX_HOME or ~/.codex exists */
504
- export function detectCodex() {
505
- const codexHome = process.env.CODEX_HOME?.trim() || join(homedir(), ".codex");
506
- return existsSync(codexHome) ? codexAdapter : null;
507
- }
508
132
  // ─── Install helpers ───────────────────────────────────────────────────────
509
133
  /** Build the shared command metadata */
510
134
  export function buildCommandMeta(body) {
@@ -563,7 +187,8 @@ export function installProjectClaudeMd(projectRoot, standardsContent) {
563
187
  }
564
188
  else {
565
189
  // No existing CLAUDE.md, create from template
566
- const content = `# ${projectRoot.split("/").pop()}\n\n` + standardsContent;
190
+ const projName = projectRoot.split("/").pop() ?? "Project";
191
+ const content = `# ${projName}\n\n${standardsContent}\n`;
567
192
  writeFileSync(dest, content);
568
193
  console.log(chalk.green(" ✓ CLAUDE.md: created with employee-grade standards"));
569
194
  }
@@ -1 +1 @@
1
- {"version":3,"file":"editors.js","sourceRoot":"","sources":["../../src/commands/editors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editors.js","sourceRoot":"","sources":["../../src/commands/editors.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { fileURLToPath } from "url";
6
6
  import chalk from "chalk";
7
7
  import { readFile } from "fs/promises";
8
8
  import { syncMcpTools } from "./mcpSync.js";
9
- import { detectEditors, detectCodex, installForAllEditors, installSkill, installProjectClaudeMd, readEmployeeStandards, claudeAdapter, } from "./editors.js";
9
+ import { detectEditors, installForAllEditors, installSkill, installProjectClaudeMd, readEmployeeStandards, claudeAdapter, } from "./editors.js";
10
10
  const TEMPLATE_DIR = fileURLToPath(new URL("../../templates", import.meta.url));
11
11
  const SCHEMA_DIR = fileURLToPath(new URL("../../schemas", import.meta.url));
12
12
  const SKILL_SRC = fileURLToPath(new URL("../../.claude/skills/openspec-e2e/SKILL.md", import.meta.url));
@@ -68,11 +68,9 @@ export async function init(options) {
68
68
  // 4. Install E2E commands for detected editors
69
69
  console.log(chalk.blue("\n─── Installing E2E Commands ───"));
70
70
  const detected = detectEditors(projectRoot);
71
- const codex = detectCodex();
72
- const adapters = codex ? [...detected, codex] : detected;
73
- if (adapters.length > 0) {
71
+ if (detected.length > 0) {
74
72
  const body = await readFile(CMD_BODY_SRC, "utf-8");
75
- installForAllEditors(body, adapters, projectRoot);
73
+ installForAllEditors(body, detected, projectRoot);
76
74
  }
77
75
  else {
78
76
  const body = await readFile(CMD_BODY_SRC, "utf-8");