openspec-playwright 0.3.73 → 0.3.75
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 +18 -17
- package/README.zh-CN.md +19 -18
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +54 -23
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/editors/adapters/claude.d.ts +5 -0
- package/dist/commands/editors/adapters/claude.js +79 -0
- package/dist/commands/editors/adapters/claude.js.map +1 -0
- package/dist/commands/editors/adapters/cline.d.ts +15 -0
- package/dist/commands/editors/adapters/cline.js +63 -0
- package/dist/commands/editors/adapters/cline.js.map +1 -0
- package/dist/commands/editors/adapters/cursor.d.ts +15 -0
- package/dist/commands/editors/adapters/cursor.js +79 -0
- package/dist/commands/editors/adapters/cursor.js.map +1 -0
- package/dist/commands/editors/adapters/dsh.d.ts +27 -0
- package/dist/commands/editors/adapters/dsh.js +67 -0
- package/dist/commands/editors/adapters/dsh.js.map +1 -0
- package/dist/commands/editors/adapters/omp.d.ts +24 -0
- package/dist/commands/editors/adapters/omp.js +73 -0
- package/dist/commands/editors/adapters/omp.js.map +1 -0
- package/dist/commands/editors/adapters/opencode.d.ts +8 -0
- package/dist/commands/editors/adapters/opencode.js +133 -0
- package/dist/commands/editors/adapters/opencode.js.map +1 -0
- package/dist/commands/editors/adapters/pi.d.ts +27 -0
- package/dist/commands/editors/adapters/pi.js +64 -0
- package/dist/commands/editors/adapters/pi.js.map +1 -0
- package/dist/commands/editors/project-rules.d.ts +69 -0
- package/dist/commands/editors/project-rules.js +246 -0
- package/dist/commands/editors/project-rules.js.map +1 -0
- package/dist/commands/editors/registry.d.ts +12 -0
- package/dist/commands/editors/registry.js +59 -0
- package/dist/commands/editors/registry.js.map +1 -0
- package/dist/commands/editors/shared.d.ts +37 -0
- package/dist/commands/editors/shared.js +92 -0
- package/dist/commands/editors/shared.js.map +1 -0
- package/dist/commands/editors/tool-selection.d.ts +17 -0
- package/dist/commands/editors/tool-selection.js +60 -0
- package/dist/commands/editors/tool-selection.js.map +1 -0
- package/dist/commands/editors/types.d.ts +82 -0
- package/dist/commands/editors/types.js +41 -0
- package/dist/commands/editors/types.js.map +1 -0
- package/dist/commands/editors.d.ts +32 -309
- package/dist/commands/editors.js +38 -960
- package/dist/commands/editors.js.map +1 -1
- package/dist/commands/explore.d.ts +2 -0
- package/dist/commands/explore.js +2 -2
- package/dist/commands/explore.js.map +1 -1
- package/dist/commands/init.js +15 -25
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/uninstall.js +4 -2
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.js +12 -8
- package/dist/commands/update.js.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/mcp.d.ts +5 -2
- package/dist/shared/mcp.js +15 -7
- package/dist/shared/mcp.js.map +1 -1
- package/employee-standards.md +2 -0
- package/package.json +5 -5
- package/templates/e2e-command.md +6 -2
package/README.md
CHANGED
|
@@ -22,15 +22,15 @@ openspec-pw init # Install Playwright E2E integration (--tools to pick
|
|
|
22
22
|
|
|
23
23
|
**Claude Code** (Anthropic) — E2E workflow is driven by the `/opsx:e2e` command using a browser exploration tool (Playwright MCP or `openspec-pw explore`) + Playwright MCP (test execution).
|
|
24
24
|
|
|
25
|
-
**OpenCode** (SST) — E2E workflow is driven by the `/opsx-e2e` command (hyphenated per OpenSpec convention) using the same browser exploration + Playwright MCP stack. Playwright MCP is configured under `mcp
|
|
25
|
+
**OpenCode** (SST) — E2E workflow is driven by the `/opsx-e2e` command (hyphenated per OpenSpec convention) using the same browser exploration + Playwright MCP stack. Playwright MCP is configured under `mcp["playwright-test"]` in `opencode.jsonc`.
|
|
26
26
|
|
|
27
|
-
**Cline** — E2E workflow is driven by the `/opsx-e2e` skill (installed as `.cline/skills/opsx-e2e/SKILL.md`) using the same browser exploration + Playwright MCP stack. Playwright MCP is configured in `.cline/mcp.json` under `mcpServers
|
|
27
|
+
**Cline** — E2E workflow is driven by the `/opsx-e2e` skill (installed as `.cline/skills/opsx-e2e/SKILL.md`) using the same browser exploration + Playwright MCP stack. Playwright MCP is configured in `.cline/mcp.json` under `mcpServers["playwright-test"]`. Cline auto-detects `AGENTS.md` as project rules — no wrapper file needed.
|
|
28
28
|
|
|
29
|
-
**Cursor** — E2E workflow is dual-installed: slash command at `.cursor/commands/opsx-e2e.md` (plain markdown, `$1` = change name) and Agent Skill at `.cursor/skills/opsx-e2e/SKILL.md` (`disable-model-invocation: true`). Invoke `/opsx-e2e`. Playwright MCP is merged into `.cursor/mcp.json` under `mcpServers
|
|
29
|
+
**Cursor** — E2E workflow is dual-installed: slash command at `.cursor/commands/opsx-e2e.md` (plain markdown, `$1` = change name) and Agent Skill at `.cursor/skills/opsx-e2e/SKILL.md` (`disable-model-invocation: true`). Invoke `/opsx-e2e`. Playwright MCP is merged into `.cursor/mcp.json` under `mcpServers["playwright-test"]`. Cursor auto-detects `AGENTS.md`. Skill name is `opsx-e2e` (not OpenSpec's `openspec-*` skill prefix). If you want Cursor support but have no `.cursor/` yet: `mkdir -p .cursor`.
|
|
30
30
|
|
|
31
31
|
**Pi** (earendil-works) — E2E workflow is driven by the `/opsx-e2e` prompt template (installed as `.pi/prompts/opsx-e2e.md`; the filename becomes the command name). Pi has **no MCP client**, so browser exploration runs through `openspec-pw explore` and test execution through `npx playwright test` in the shell. Pi loads `AGENTS.md` natively — no wrapper file needed. Detected via a project `.pi/` dir or the global `~/.pi/agent/` config dir.
|
|
32
32
|
|
|
33
|
-
**Oh My Pi (omp)** — E2E workflow is driven by the `/opsx-e2e` command (installed as `.omp/commands/opsx-e2e.md`). Playwright MCP is configured in `.omp/mcp.json` under `mcpServers
|
|
33
|
+
**Oh My Pi (omp)** — E2E workflow is driven by the `/opsx-e2e` command (installed as `.omp/commands/opsx-e2e.md`). Playwright MCP is configured in `.omp/mcp.json` under `mcpServers["playwright-test"]` (omp also inherits `.claude/`/`.cursor/`/opencode MCP configs when present). omp auto-detects `AGENTS.md` — no wrapper file needed. Detected via a project `.omp/` dir or the global `~/.omp/agent/` config dir.
|
|
34
34
|
|
|
35
35
|
**DeepSeek Harness (dsh)** — E2E workflow is driven by the `/opsx-e2e` skill (installed as `.dsh/skills/opsx-e2e/SKILL.md`, the highest-priority `project-dsh` skill root). dsh configures MCP via `cordis.yml` plugin config rather than a simple file, so Playwright MCP is **not** auto-installed — configure `@deepseek-ai/dsh-mcp-client` manually and use `openspec-pw explore` for browser exploration. dsh reads `AGENTS.md` natively — no wrapper file needed. Detected via a project `.dsh/` dir or the global `~/.dsh/` (DSH_HOME) dir.
|
|
36
36
|
|
|
@@ -169,11 +169,12 @@ openspec-pw uninstall # Remove integration from the project
|
|
|
169
169
|
1. **Node.js >= 20**
|
|
170
170
|
2. **Claude Code** (with `.claude/` directory) and/or **OpenCode** (with `.opencode/` directory) and/or **Cline** (with `.cline/` or `.clinerules/` directory) and/or **Cursor** (with `.cursor/` directory) and/or **Pi** (project `.pi/` or global `~/.pi/agent/`) and/or **Oh My Pi** (project `.omp/` or global `~/.omp/agent/`) and/or **DeepSeek Harness** (project `.dsh/` or global `~/.dsh/`)
|
|
171
171
|
3. **OpenSpec** initialized: `npm install -g @fission-ai/openspec@latest && openspec init`
|
|
172
|
-
4. **Playwright MCP** (for test execution + Healer) — installed automatically by `openspec-pw init` when a frontend signal is detected (skipped for API-only projects — API tests use the `request` fixture), **project-scoped** (written to a project file; Claude Code uses `--scope project` → project-root `.mcp.json`, never your global `~/.claude.json`):
|
|
173
|
-
-
|
|
174
|
-
- **
|
|
175
|
-
- **
|
|
176
|
-
- **
|
|
172
|
+
4. **Playwright MCP** (for test execution + Healer) — installed automatically by `openspec-pw init` when a frontend signal is detected (skipped for API-only projects — API tests use the `request` fixture), **project-scoped** (written to a project file; Claude Code uses `--scope project` → project-root `.mcp.json`, never your global `~/.claude.json`). A single server matching the official `playwright init-agents` layout:
|
|
173
|
+
- `playwright-test` — official test-runner server (`npx playwright run-test-mcp-server`, bundled with the `playwright` package). Superset of `@playwright/mcp`: one entry exposes both `browser_*` tools (exploration + Healer page inspection) and the structured `test_run` / `test_debug` / `test_list` workflow tools for the Healer loop.
|
|
174
|
+
- **Claude Code**: `claude mcp add --scope project playwright-test npx playwright run-test-mcp-server` (stored in project-root `.mcp.json`, usable by the whole team via version control)
|
|
175
|
+
- **OpenCode**: merged into `opencode.jsonc` under `mcp["playwright-test"] = { type: "local", command: ["npx", "playwright", "run-test-mcp-server"] }`
|
|
176
|
+
- **Cline**: merged into `.cline/mcp.json` under `mcpServers["playwright-test"] = { "command": "npx", "args": ["playwright", "run-test-mcp-server"] }`
|
|
177
|
+
- **Cursor**: merged into `.cursor/mcp.json` under `mcpServers["playwright-test"] = { "command": "npx", "args": ["playwright", "run-test-mcp-server"] }`
|
|
177
178
|
|
|
178
179
|
> **Migrating from older versions**: before this change, Claude Code's Playwright MCP was installed at global user scope (`~/.claude.json`). If you initialized with an older `openspec-pw`, a stale global entry may still load everywhere. Clean it up once: `claude mcp remove playwright` (user scope). Note that project-scoped servers prompt for approval the first time they are used interactively (`claude mcp reset-project-choices` resets those choices).
|
|
179
180
|
|
|
@@ -198,7 +199,7 @@ Run through these steps in order when using the E2E workflow for the first time:
|
|
|
198
199
|
| 1. Install CLI | `npm install -g openspec-playwright@latest` | Check Node.js version `node -v` (needs >= 20) |
|
|
199
200
|
| 2. Install OpenSpec | `npm install -g @fission-ai/openspec@latest && openspec init` | `npm cache clean -f && npm install -g @fission-ai/openspec@latest` |
|
|
200
201
|
| 3. Initialize E2E | `openspec-pw init` | Run `openspec-pw doctor` to see what's missing |
|
|
201
|
-
| 4. Install Playwright MCP | `claude mcp add --scope project playwright npx
|
|
202
|
+
| 4. Install Playwright MCP | `claude mcp add --scope project playwright-test npx playwright run-test-mcp-server` (Claude, writes project-root `.mcp.json`), or add `mcp["playwright-test"]` to `opencode.jsonc` (OpenCode), or `mcpServers["playwright-test"]` in `.cline/mcp.json` / `.cursor/mcp.json` | `cat .mcp.json` (Claude, check `mcpServers["playwright-test"]`) / `cat opencode.jsonc` (OpenCode) / `cat .cline/mcp.json` (Cline) / `cat .cursor/mcp.json` (Cursor) |
|
|
202
203
|
| 5. Install browsers | `npx playwright install --with-deps` | macOS may need `xcode-select --install` first |
|
|
203
204
|
| 6. Start dev server | `npm run dev` (in a separate terminal) | Confirm port, set `BASE_URL` if non-standard |
|
|
204
205
|
| 7. Validate env | `npx playwright test tests/playwright/seed.spec.ts` | Check `webServer` in `playwright.config.ts` |
|
|
@@ -217,7 +218,7 @@ Run through these steps in order when using the E2E workflow for the first time:
|
|
|
217
218
|
| **OpenSpec** | directory initialized | `.spec.md` specs count |
|
|
218
219
|
| **Playwright Browsers** | CLI version, Chromium binary downloaded | — |
|
|
219
220
|
| **Playwright Test** | `@playwright/test` framework installed | — |
|
|
220
|
-
| **Playwright MCP** | configured for each detected editor (skipped with an informational note for Pi and DeepSeek Harness, which have no simple MCP config file) | — |
|
|
221
|
+
| **Playwright MCP** | test-runner server configured for each detected editor (skipped with an informational note for Pi and DeepSeek Harness, which have no simple MCP config file) | `playwright-cli` (@playwright/cli on PATH) — optional ⚠, never block |
|
|
221
222
|
| **Sync** | standards in sync when initialized (drift → `openspec-pw update`) | not initialized (gated, non-blocking) |
|
|
222
223
|
| **Tests** | `tests/playwright/` directory exists | `auth.setup.ts` presence |
|
|
223
224
|
| **Seed Test** | — | `seed.spec.ts` presence |
|
|
@@ -309,20 +310,20 @@ CLI (openspec-pw)
|
|
|
309
310
|
Editors (auto-detected by openspec-pw init)
|
|
310
311
|
├── Claude Code (/opsx:e2e)
|
|
311
312
|
│ ├── .claude/commands/opsx/e2e.md → Command file
|
|
312
|
-
│ ├──
|
|
313
|
+
│ ├── playwright-test server → Healer Agent tools (via `claude mcp add --scope project playwright-test …`, writes project-root `.mcp.json`)
|
|
313
314
|
│ └── CLAUDE.md → CodeGraph 优先 block + workflow hint + imports AGENTS.md via `@AGENTS.md`
|
|
314
315
|
├── OpenCode (/opsx-e2e)
|
|
315
316
|
│ ├── .opencode/commands/opsx-e2e.md → Command file (body rewritten from /opsx: → /opsx-)
|
|
316
|
-
│ ├── opencode.jsonc → Playwright MCP (mcp
|
|
317
|
+
│ ├── opencode.jsonc → Playwright MCP (mcp["playwright-test"]) + instructions routing
|
|
317
318
|
│ └── AGENTS.md → Employee-grade standards (SSOT)
|
|
318
319
|
├── Cline (/opsx-e2e)
|
|
319
320
|
│ ├── .cline/skills/opsx-e2e/SKILL.md → Skill file (body rewritten from /opsx: → /opsx-)
|
|
320
|
-
│ ├── .cline/mcp.json → Playwright MCP (mcpServers
|
|
321
|
+
│ ├── .cline/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
321
322
|
│ └── AGENTS.md → Employee-grade standards (auto-detected by Cline)
|
|
322
323
|
├── Cursor (/opsx-e2e)
|
|
323
324
|
│ ├── .cursor/commands/opsx-e2e.md → Slash command (plain MD, $1 = change name)
|
|
324
325
|
│ ├── .cursor/skills/opsx-e2e/SKILL.md → Skill (disable-model-invocation: true)
|
|
325
|
-
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers
|
|
326
|
+
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
326
327
|
│ └── AGENTS.md → Employee-grade standards (auto-detected by Cursor)
|
|
327
328
|
├── Pi (/opsx-e2e)
|
|
328
329
|
│ ├── .pi/prompts/opsx-e2e.md → Prompt template (filename = command name)
|
|
@@ -330,7 +331,7 @@ Editors (auto-detected by openspec-pw init)
|
|
|
330
331
|
│ (no MCP client — exploration via `openspec-pw explore`)
|
|
331
332
|
└── Oh My Pi (/opsx-e2e)
|
|
332
333
|
├── .omp/commands/opsx-e2e.md → Command file (name + description frontmatter)
|
|
333
|
-
├── .omp/mcp.json → Playwright MCP (mcpServers
|
|
334
|
+
├── .omp/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
334
335
|
└── AGENTS.md → Employee-grade standards (auto-detected by omp)
|
|
335
336
|
└── DeepSeek Harness (/opsx-e2e)
|
|
336
337
|
├── .dsh/skills/opsx-e2e/SKILL.md → Skill file (name + description frontmatter)
|
|
@@ -359,7 +360,7 @@ Exploration (openspec/changes/<name>/specs/playwright/)
|
|
|
359
360
|
├── app-exploration.md → This change's routes + verified selectors
|
|
360
361
|
└── test-plan.md → This change's test cases
|
|
361
362
|
|
|
362
|
-
Healer Agent (
|
|
363
|
+
Healer Agent (playwright-test MCP server)
|
|
363
364
|
└── browser_snapshot, browser_navigate, browser_run_code, etc.
|
|
364
365
|
```
|
|
365
366
|
|
package/README.zh-CN.md
CHANGED
|
@@ -17,12 +17,13 @@ npm install -g openspec-playwright@latest
|
|
|
17
17
|
1. **Node.js >= 20**
|
|
18
18
|
2. **Claude Code**(带 `.claude/` 目录)和/或 **OpenCode**(带 `.opencode/` 目录)和/或 **Cline**(带 `.cline/` 或 `.clinerules/` 目录)和/或 **Cursor**(带 `.cursor/` 目录)和/或 **Pi**(项目 `.pi/` 或全局 `~/.pi/agent/`)和/或 **Oh My Pi**(项目 `.omp/` 或全局 `~/.omp/agent/`)和/或 **DeepSeek Harness**(项目 `.dsh/` 或全局 `~/.dsh/`)
|
|
19
19
|
3. **OpenSpec** 已初始化:`npm install -g @fission-ai/openspec@latest && openspec init`
|
|
20
|
-
4. **Playwright MCP**(用于测试执行 + Healer)— `openspec-pw init` 会在检测到前端信号时按编辑器自动安装(纯 API 项目跳过——API 测试用 `request` fixture),**全部项目级**(写入项目内文件;Claude Code 用 `--scope project` 写项目根 `.mcp.json`,不碰全局 `~/.claude.json
|
|
21
|
-
-
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
- **
|
|
20
|
+
4. **Playwright MCP**(用于测试执行 + Healer)— `openspec-pw init` 会在检测到前端信号时按编辑器自动安装(纯 API 项目跳过——API 测试用 `request` fixture),**全部项目级**(写入项目内文件;Claude Code 用 `--scope project` 写项目根 `.mcp.json`,不碰全局 `~/.claude.json`)。安装**单个** server,与 Playwright 官方 `playwright init-agents` 布局一致:
|
|
21
|
+
- `playwright-test` — 官方 test-runner server(`npx playwright run-test-mcp-server`,`playwright` 包自带)。是 `@playwright/mcp` 的**超集**:一个条目同时暴露 `browser_*` 浏览器工具(探索 + Healer 页面检查)和结构化的 `test_run` / `test_debug` / `test_list` 工作流工具(Healer 闭环)。
|
|
22
|
+
- **Claude Code**:`claude mcp add --scope project playwright-test npx playwright run-test-mcp-server`(写入项目根 `.mcp.json`,可随版本控制供团队共享)
|
|
23
|
+
- **OpenCode**:合并到 `opencode.jsonc` 的 `mcp["playwright-test"] = { type: "local", command: ["npx", "playwright", "run-test-mcp-server"] }`
|
|
24
|
+
- **Cline**:合并到 `.cline/mcp.json` 的 `mcpServers["playwright-test"] = { "command": "npx", "args": ["playwright", "run-test-mcp-server"] }`
|
|
25
|
+
- **Cursor**:合并到 `.cursor/mcp.json` 的 `mcpServers["playwright-test"] = { "command": "npx", "args": ["playwright", "run-test-mcp-server"] }`
|
|
26
|
+
- **Oh My Pi**:合并到 `.omp/mcp.json` 的 `mcpServers["playwright-test"] = { "command": "npx", "args": ["playwright", "run-test-mcp-server"] }`
|
|
26
27
|
- **Pi**:无 MCP 客户端,跳过安装 — 浏览器探索改用 `openspec-pw explore`
|
|
27
28
|
|
|
28
29
|
> **旧版本迁移**:早期版本把 Claude Code 的 Playwright MCP 装到全局 user 域(`~/.claude.json`)。若你用旧版 `openspec-pw` 初始化过,全局残留仍会对所有项目生效,清理一次即可:`claude mcp remove playwright`(user 域)。注意:项目级 server 首次交互使用时 Claude Code 会弹出批准提示(`claude mcp reset-project-choices` 可重置选择)。
|
|
@@ -44,15 +45,15 @@ openspec-pw init # 安装 Playwright E2E 集成(--tools 可选编辑
|
|
|
44
45
|
|
|
45
46
|
**Claude Code**(Anthropic)— E2E 工作流由 `探索 + 测试执行` 两步组成:Playwright MCP + `openspec-pw explore`。
|
|
46
47
|
|
|
47
|
-
**OpenCode**(SST)— E2E 工作流由 `/opsx-e2e` 命令驱动(按 OpenSpec 惯例使用连字符),使用相同的浏览器探索 + Playwright MCP 技术栈。Playwright MCP 通过 `opencode.jsonc` 的 `mcp
|
|
48
|
+
**OpenCode**(SST)— E2E 工作流由 `/opsx-e2e` 命令驱动(按 OpenSpec 惯例使用连字符),使用相同的浏览器探索 + Playwright MCP 技术栈。Playwright MCP 通过 `opencode.jsonc` 的 `mcp["playwright-test"]` 配置。
|
|
48
49
|
|
|
49
|
-
**Cline** — E2E 工作流由 `/opsx-e2e` skill 驱动(安装为 `.cline/skills/opsx-e2e/SKILL.md`),使用相同的浏览器探索 + Playwright MCP 技术栈。Playwright MCP 通过 `.cline/mcp.json` 的 `mcpServers
|
|
50
|
+
**Cline** — E2E 工作流由 `/opsx-e2e` skill 驱动(安装为 `.cline/skills/opsx-e2e/SKILL.md`),使用相同的浏览器探索 + Playwright MCP 技术栈。Playwright MCP 通过 `.cline/mcp.json` 的 `mcpServers["playwright-test"]` 配置。Cline 原生自动识别 `AGENTS.md` 作为项目规则 — 无需包装文件。
|
|
50
51
|
|
|
51
|
-
**Cursor** — E2E 工作流双份安装:斜杠命令 `.cursor/commands/opsx-e2e.md`(纯 markdown,`$1` = change 名)+ Agent Skill `.cursor/skills/opsx-e2e/SKILL.md`(`disable-model-invocation: true`)。调用 `/opsx-e2e`。Playwright MCP 合并进 `.cursor/mcp.json` 的 `mcpServers
|
|
52
|
+
**Cursor** — E2E 工作流双份安装:斜杠命令 `.cursor/commands/opsx-e2e.md`(纯 markdown,`$1` = change 名)+ Agent Skill `.cursor/skills/opsx-e2e/SKILL.md`(`disable-model-invocation: true`)。调用 `/opsx-e2e`。Playwright MCP 合并进 `.cursor/mcp.json` 的 `mcpServers["playwright-test"]`。Cursor 原生识别 `AGENTS.md`。Skill 名为 `opsx-e2e`(不是 OpenSpec 的 `openspec-*` 前缀)。若要用 Cursor 但还没有 `.cursor/`:`mkdir -p .cursor`。
|
|
52
53
|
|
|
53
54
|
**Pi**(earendil-works)— E2E 工作流由 `/opsx-e2e` 提示词模板驱动(安装为 `.pi/prompts/opsx-e2e.md`,文件名即命令名)。Pi **没有 MCP 客户端**,浏览器探索改用 `openspec-pw explore`,测试执行用 shell 跑 `npx playwright test`。Pi 原生加载 `AGENTS.md` — 无需包装文件。检测信号:项目 `.pi/` 目录或全局 `~/.pi/agent/` 配置目录。
|
|
54
55
|
|
|
55
|
-
**Oh My Pi(omp)** — E2E 工作流由 `/opsx-e2e` 命令驱动(安装为 `.omp/commands/opsx-e2e.md`)。Playwright MCP 配置在 `.omp/mcp.json` 的 `mcpServers
|
|
56
|
+
**Oh My Pi(omp)** — E2E 工作流由 `/opsx-e2e` 命令驱动(安装为 `.omp/commands/opsx-e2e.md`)。Playwright MCP 配置在 `.omp/mcp.json` 的 `mcpServers["playwright-test"]`(omp 也会继承 `.claude/` / `.cursor/` / opencode 的 MCP 配置)。omp 原生识别 `AGENTS.md` — 无需包装文件。检测信号:项目 `.omp/` 目录或全局 `~/.omp/agent/` 配置目录。
|
|
56
57
|
|
|
57
58
|
**DeepSeek Harness(dsh)** — E2E 工作流由 `/opsx-e2e` skill 驱动(安装为 `.dsh/skills/opsx-e2e/SKILL.md`,即最高优先级的 `project-dsh` skill 根)。dsh 通过 `cordis.yml` 插件配置而非简单文件来配置 MCP,因此 **不自动安装** Playwright MCP — 需手动配置 `@deepseek-ai/dsh-mcp-client`,浏览器探索改用 `openspec-pw explore`。dsh 原生读取 `AGENTS.md` — 无需包装文件。检测信号:项目 `.dsh/` 目录或全局 `~/.dsh/`(DSH_HOME)目录。
|
|
58
59
|
|
|
@@ -191,7 +192,7 @@ openspec-pw uninstall # 移除项目中的集成
|
|
|
191
192
|
| 1. 安装 CLI | `npm install -g openspec-playwright@latest` | 检查 Node.js 版本 `node -v`(需 >= 20) |
|
|
192
193
|
| 2. 安装 OpenSpec | `npm install -g @fission-ai/openspec@latest && openspec init` | `npm cache clean -f && npm install -g @fission-ai/openspec@latest` |
|
|
193
194
|
| 3. 初始化 E2E | `openspec-pw init` | 运行 `openspec-pw doctor` 查看具体缺失项 |
|
|
194
|
-
| 4. 安装 Playwright MCP | `claude mcp add --scope project playwright npx
|
|
195
|
+
| 4. 安装 Playwright MCP | `claude mcp add --scope project playwright-test npx playwright run-test-mcp-server`(Claude,写入项目根 `.mcp.json`),或将 `mcp["playwright-test"]` 加入 `opencode.jsonc`(OpenCode),或将 `mcpServers["playwright-test"]` 加入 `.cline/mcp.json`(Cline)/ `.cursor/mcp.json`(Cursor)/ `.omp/mcp.json`(Oh My Pi);Pi 与 DeepSeek Harness 无简单 MCP 配置文件,跳过 | `cat .mcp.json`(Claude,检查 `mcpServers["playwright-test"]`)/ `cat opencode.jsonc`(OpenCode)/ `cat .cline/mcp.json`(Cline)/ `cat .cursor/mcp.json`(Cursor)/ `cat .omp/mcp.json`(Oh My Pi)确认安装成功 |
|
|
195
196
|
| 5. 安装浏览器 | `npx playwright install --with-deps` | macOS 可能需先运行 `xcode-select --install` |
|
|
196
197
|
| 6. 启动开发服务器 | `npm run dev`(在另一个终端) | 确认端口,配置 `BASE_URL` |
|
|
197
198
|
| 7. 验证环境 | `npx playwright test tests/playwright/seed.spec.ts` | 检查 `playwright.config.ts` 中的 `webServer` 配置 |
|
|
@@ -210,7 +211,7 @@ openspec-pw uninstall # 移除项目中的集成
|
|
|
210
211
|
| **OpenSpec** | 目录已初始化 | `.spec.md` 规范文件数量 |
|
|
211
212
|
| **Playwright 浏览器** | CLI 版本、Chromium 二进制已下载 | — |
|
|
212
213
|
| **Playwright 测试框架** | `@playwright/test` 已安装 | — |
|
|
213
|
-
| **Playwright MCP** |
|
|
214
|
+
| **Playwright MCP** | 每个检测到的编辑器均已配置 test-runner server(Pi 无 MCP 客户端,跳过并以信息性提示记录) | `playwright-cli`(PATH 上的 @playwright/cli)——可选 ⚠,不阻断 |
|
|
214
215
|
| **Sync** | 已初始化时标准同步(漂移 → `openspec-pw update`) | 未初始化(闸门,不阻断) |
|
|
215
216
|
| **测试目录** | `tests/playwright/` 目录存在 | `auth.setup.ts` 是否存在 |
|
|
216
217
|
| **种子测试** | — | `seed.spec.ts` 是否存在 |
|
|
@@ -276,20 +277,20 @@ CLI (openspec-pw)
|
|
|
276
277
|
编辑器(由 openspec-pw init 自动检测)
|
|
277
278
|
├── Claude Code (/opsx:e2e)
|
|
278
279
|
│ ├── .claude/commands/opsx/e2e.md → 命令文件(从 templates/e2e-command.md 安装)
|
|
279
|
-
│ ├──
|
|
280
|
+
│ ├── playwright-test server → Healer Agent 工具(通过 `claude mcp add --scope project playwright-test …`,写入项目根 `.mcp.json`)
|
|
280
281
|
│ └── CLAUDE.md → CodeGraph 优先节 + 工作流提示 + 通过 `@AGENTS.md` 引入 AGENTS.md
|
|
281
282
|
├── OpenCode (/opsx-e2e)
|
|
282
283
|
│ ├── .opencode/commands/opsx-e2e.md → 命令文件(正文由 /opsx: 改写为 /opsx-)
|
|
283
|
-
│ ├── opencode.jsonc → Playwright MCP (mcp
|
|
284
|
+
│ ├── opencode.jsonc → Playwright MCP (mcp["playwright-test"]) + 指令路由
|
|
284
285
|
│ └── AGENTS.md → 员工级规范(单一数据源)
|
|
285
286
|
├── Cline (/opsx-e2e)
|
|
286
287
|
│ ├── .cline/skills/opsx-e2e/SKILL.md → Skill 文件(正文由 /opsx: 改写为 /opsx-)
|
|
287
|
-
│ ├── .cline/mcp.json → Playwright MCP (mcpServers
|
|
288
|
+
│ ├── .cline/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
288
289
|
│ └── AGENTS.md → 员工级规范(Cline 原生自动识别)
|
|
289
290
|
├── Cursor (/opsx-e2e)
|
|
290
291
|
│ ├── .cursor/commands/opsx-e2e.md → 斜杠命令(纯 MD,$1 = change 名)
|
|
291
292
|
│ ├── .cursor/skills/opsx-e2e/SKILL.md → Skill(disable-model-invocation: true)
|
|
292
|
-
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers
|
|
293
|
+
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
293
294
|
│ └── AGENTS.md → 员工级规范(Cursor 原生自动识别)
|
|
294
295
|
├── Pi (/opsx-e2e)
|
|
295
296
|
│ ├── .pi/prompts/opsx-e2e.md → 提示词模板(文件名 = 命令名)
|
|
@@ -297,7 +298,7 @@ CLI (openspec-pw)
|
|
|
297
298
|
│ (无 MCP 客户端 — 探索改用 `openspec-pw explore`)
|
|
298
299
|
└── Oh My Pi (/opsx-e2e)
|
|
299
300
|
├── .omp/commands/opsx-e2e.md → 命令文件(name + description frontmatter)
|
|
300
|
-
├── .omp/mcp.json → Playwright MCP (mcpServers
|
|
301
|
+
├── .omp/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
301
302
|
└── AGENTS.md → 员工级规范(omp 原生自动识别)
|
|
302
303
|
└── DeepSeek Harness (/opsx-e2e)
|
|
303
304
|
├── .dsh/skills/opsx-e2e/SKILL.md → Skill 文件(name + description frontmatter)
|
|
@@ -323,7 +324,7 @@ Cline 与 Cursor 原生自动识别 `AGENTS.md`,无需包装文件。
|
|
|
323
324
|
├── app-exploration.md → 本次 change 的路由 + 已验证选择器
|
|
324
325
|
└── test-plan.md → 本次 change 的测试用例
|
|
325
326
|
|
|
326
|
-
Healer Agent (
|
|
327
|
+
Healer Agent (playwright-test MCP server)
|
|
327
328
|
└── browser_snapshot, browser_navigate, browser_run_code 等
|
|
328
329
|
```
|
|
329
330
|
|
package/dist/commands/doctor.js
CHANGED
|
@@ -5,8 +5,26 @@ import { join } from "path";
|
|
|
5
5
|
import { execFileSync } from "child_process";
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import { detectAdapters, slashCommandForAdapter, claudeWrapperStandardsContent } from "../commands/editors.js";
|
|
8
|
-
import { detectAppServer,
|
|
8
|
+
import { detectAppServer, isTestRunnerMcpInstalled, needsShell, detectCodeGraphStatus } from "../shared/index.js";
|
|
9
9
|
import { bundledStandardsPath, compareBlock, OPENSPEC_START } from "../shared/drift.js";
|
|
10
|
+
const OPTIONAL_NAMES = new Set([
|
|
11
|
+
"engines",
|
|
12
|
+
"specs",
|
|
13
|
+
"auth-setup",
|
|
14
|
+
"seed",
|
|
15
|
+
"dev-script",
|
|
16
|
+
"base-url",
|
|
17
|
+
"reachable",
|
|
18
|
+
"codegraph-cli",
|
|
19
|
+
"codegraph-index",
|
|
20
|
+
"codegraph-mcp",
|
|
21
|
+
"playwright-cli",
|
|
22
|
+
]);
|
|
23
|
+
// Per-editor optional checks can't be enumerated by exact name — match
|
|
24
|
+
// the test-runner MCP checks (one per detected adapter) by prefix.
|
|
25
|
+
export function isOptionalCheck(name) {
|
|
26
|
+
return OPTIONAL_NAMES.has(name) || name.startsWith("test-runner-mcp-");
|
|
27
|
+
}
|
|
10
28
|
export async function doctor(options = {}) {
|
|
11
29
|
const checks = [];
|
|
12
30
|
const projectRoot = process.cwd();
|
|
@@ -205,17 +223,24 @@ export async function doctor(options = {}) {
|
|
|
205
223
|
});
|
|
206
224
|
continue;
|
|
207
225
|
}
|
|
208
|
-
|
|
226
|
+
// Single project-scoped MCP server (official test-runner layout):
|
|
227
|
+
// playwright-test supersedes the @playwright/mcp browser-control
|
|
228
|
+
// server. Optional check — missing means a stale install; run update.
|
|
229
|
+
const testRunnerInstalled = isTestRunnerMcpInstalled(adapter);
|
|
209
230
|
checks.push({
|
|
210
231
|
category: "Playwright MCP",
|
|
211
|
-
name: `
|
|
212
|
-
ok:
|
|
213
|
-
message:
|
|
232
|
+
name: `test-runner-mcp-${adapter.label}`,
|
|
233
|
+
ok: testRunnerInstalled,
|
|
234
|
+
message: testRunnerInstalled
|
|
235
|
+
? "installed"
|
|
236
|
+
: `not configured for ${adapter.label} (run openspec-pw update)`,
|
|
214
237
|
});
|
|
215
|
-
// Claude Code MCP moved to project scope (0.3.69):
|
|
216
|
-
//
|
|
217
|
-
//
|
|
218
|
-
|
|
238
|
+
// Claude Code MCP moved to project scope (0.3.69): a legacy user-scope
|
|
239
|
+
// playwright entry in ~/.claude.json is invisible to the project-level
|
|
240
|
+
// check above. With the single-server layout the project server is
|
|
241
|
+
// `playwright-test`, so any user-scope `playwright` entry is legacy —
|
|
242
|
+
// surface it (Claude Code would load it into every session).
|
|
243
|
+
if (adapter.id === "claude") {
|
|
219
244
|
try {
|
|
220
245
|
const globalCfg = JSON.parse(readFileSync(join(homedir(), ".claude.json"), "utf-8"));
|
|
221
246
|
if (globalCfg?.mcpServers?.playwright) {
|
|
@@ -257,6 +282,24 @@ export async function doctor(options = {}) {
|
|
|
257
282
|
});
|
|
258
283
|
}
|
|
259
284
|
}
|
|
285
|
+
// @playwright/cli — awareness only (0.x, no semver promise; never a
|
|
286
|
+
// dependency). Editor-independent, hence outside the adapter branch.
|
|
287
|
+
let cliAvailable = false;
|
|
288
|
+
try {
|
|
289
|
+
execFileSync(process.platform === "win32" ? "where" : "which", ["playwright-cli"], { stdio: "ignore", shell: needsShell });
|
|
290
|
+
cliAvailable = true;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
/* not installed — optional */
|
|
294
|
+
}
|
|
295
|
+
checks.push({
|
|
296
|
+
category: "Playwright MCP",
|
|
297
|
+
name: "playwright-cli",
|
|
298
|
+
ok: cliAvailable,
|
|
299
|
+
message: cliAvailable
|
|
300
|
+
? "available"
|
|
301
|
+
: "not installed (optional token-efficient browser CLI for agents)",
|
|
302
|
+
});
|
|
260
303
|
// Sync — employee standards drift (AGENTS.md / CLAUDE.md OPENSPEC blocks)
|
|
261
304
|
// Gated on "initialized": a project that never ran init is `ok:true` so CI
|
|
262
305
|
// is not tripped; an initialized project with stale standards is `ok:false`.
|
|
@@ -473,19 +516,7 @@ export async function doctor(options = {}) {
|
|
|
473
516
|
ok: mcpOk,
|
|
474
517
|
message: mcpMsg,
|
|
475
518
|
});
|
|
476
|
-
const
|
|
477
|
-
"engines",
|
|
478
|
-
"specs",
|
|
479
|
-
"auth-setup",
|
|
480
|
-
"seed",
|
|
481
|
-
"dev-script",
|
|
482
|
-
"base-url",
|
|
483
|
-
"reachable",
|
|
484
|
-
"codegraph-cli",
|
|
485
|
-
"codegraph-index",
|
|
486
|
-
"codegraph-mcp",
|
|
487
|
-
]);
|
|
488
|
-
const allOk = checks.filter((c) => !c.ok && !OPTIONAL_NAMES.has(c.name)).length === 0;
|
|
519
|
+
const allOk = checks.filter((c) => !c.ok && !isOptionalCheck(c.name)).length === 0;
|
|
489
520
|
if (options.json) {
|
|
490
521
|
console.log(JSON.stringify({ ok: allOk, checks }, null, 2));
|
|
491
522
|
if (!allOk)
|
|
@@ -503,7 +534,7 @@ export async function doctor(options = {}) {
|
|
|
503
534
|
if (check.ok) {
|
|
504
535
|
console.log(chalk.green(` ✓ ${check.name}: ${check.message}`));
|
|
505
536
|
}
|
|
506
|
-
else if (
|
|
537
|
+
else if (isOptionalCheck(check.name)) {
|
|
507
538
|
console.log(chalk.yellow(` ⚠ ${check.name}: ${check.message}`));
|
|
508
539
|
}
|
|
509
540
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type EditorAdapter, type CommandMeta } from "../types.js";
|
|
2
|
+
export declare function formatClaudeCommand(meta: CommandMeta): string;
|
|
3
|
+
export declare function getClaudeCommandPath(id: string): string;
|
|
4
|
+
export declare function hasClaudeCode(projectRoot: string): boolean;
|
|
5
|
+
export declare const claudeAdapter: EditorAdapter;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code adapter: `.claude/commands/opsx/<id>.md` with full
|
|
3
|
+
* frontmatter; reads CLAUDE.md directly (thin wrapper installed by
|
|
4
|
+
* project-rules). Playwright MCP installs at project scope — written to
|
|
5
|
+
* the project-root `.mcp.json` via `claude mcp add --scope project`.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync } from "fs";
|
|
8
|
+
import { execFileSync } from "node:child_process";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { TIMEOUT } from "../../../shared/constants.js";
|
|
11
|
+
import { needsShell } from "../../../shared/platform.js";
|
|
12
|
+
import { defineAdapter } from "../types.js";
|
|
13
|
+
import { escapeYamlValue, formatTagsArray } from "../shared.js";
|
|
14
|
+
import { registerAdapter } from "../registry.js";
|
|
15
|
+
// ─── Claude Code adapter ─────────────────────────────────────────────────
|
|
16
|
+
export function formatClaudeCommand(meta) {
|
|
17
|
+
return `---
|
|
18
|
+
name: ${escapeYamlValue(meta.name)}
|
|
19
|
+
description: ${escapeYamlValue(meta.description)}
|
|
20
|
+
category: ${escapeYamlValue(meta.category)}
|
|
21
|
+
tags: ${formatTagsArray(meta.tags)}
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
${meta.body}
|
|
25
|
+
`;
|
|
26
|
+
}
|
|
27
|
+
export function getClaudeCommandPath(id) {
|
|
28
|
+
return join(".claude", "commands", "opsx", `${id}.md`);
|
|
29
|
+
}
|
|
30
|
+
export function hasClaudeCode(projectRoot) {
|
|
31
|
+
return existsSync(join(projectRoot, ".claude"));
|
|
32
|
+
}
|
|
33
|
+
export const claudeAdapter = defineAdapter({
|
|
34
|
+
id: "claude",
|
|
35
|
+
label: "claude",
|
|
36
|
+
displayName: "Claude Code",
|
|
37
|
+
detect: hasClaudeCode,
|
|
38
|
+
commandFilePath: getClaudeCommandPath,
|
|
39
|
+
formatCommand: formatClaudeCommand,
|
|
40
|
+
// Claude Code reads CLAUDE.md directly — override the AGENTS.md default.
|
|
41
|
+
projectRulesPath: (root) => join(root, "CLAUDE.md"),
|
|
42
|
+
isMcpInstalled(root, serverName) {
|
|
43
|
+
// Project scope: Playwright MCP lives in the project-root .mcp.json.
|
|
44
|
+
// Read the file directly instead of `claude mcp list` — zero CLI
|
|
45
|
+
// dependency, testable, and never confuses a global user-scope entry
|
|
46
|
+
// with a project-scoped one.
|
|
47
|
+
try {
|
|
48
|
+
const mcpJson = readFileSync(join(root, ".mcp.json"), "utf-8");
|
|
49
|
+
const parsed = JSON.parse(mcpJson);
|
|
50
|
+
return (typeof parsed === "object" &&
|
|
51
|
+
parsed !== null &&
|
|
52
|
+
typeof parsed.mcpServers === "object" &&
|
|
53
|
+
parsed.mcpServers !== null &&
|
|
54
|
+
Object.hasOwn(parsed.mcpServers, serverName));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Missing or unparseable file — server not installed
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
installMcp(_root, serverName, command) {
|
|
62
|
+
execFileSync("claude", ["mcp", "add", "--scope", "project", serverName, ...command], {
|
|
63
|
+
encoding: "utf-8",
|
|
64
|
+
timeout: TIMEOUT.MCP_LIST,
|
|
65
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
66
|
+
shell: needsShell,
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
removeMcp(_root, serverName) {
|
|
70
|
+
execFileSync("claude", ["mcp", "remove", "--scope", "project", serverName], {
|
|
71
|
+
encoding: "utf-8",
|
|
72
|
+
timeout: TIMEOUT.MCP_LIST,
|
|
73
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
74
|
+
shell: needsShell,
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
registerAdapter(claudeAdapter);
|
|
79
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/commands/editors/adapters/claude.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAwC,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,4EAA4E;AAE5E,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACnD,OAAO;QACD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;eACnB,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;YACpC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGhC,IAAI,CAAC,IAAI;CACV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,OAAO,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAkB,aAAa,CAAC;IACxD,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,aAAa;IACrB,eAAe,EAAE,oBAAoB;IACrC,aAAa,EAAE,mBAAmB;IAClC,yEAAyE;IACzE,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;IACnD,cAAc,CAAC,IAAI,EAAE,UAAU;QAC7B,qEAAqE;QACrE,iEAAiE;QACjE,qEAAqE;QACrE,6BAA6B;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,MAAM,KAAK,IAAI;gBACf,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;gBACrC,MAAM,CAAC,UAAU,KAAK,IAAI;gBAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAC7C,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO;QACnC,YAAY,CACV,QAAQ,EACR,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,EAC5D;YACE,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,KAAK,EAAE,UAAU;SAClB,CACF,CAAC;IACJ,CAAC;IACD,SAAS,CAAC,KAAK,EAAE,UAAU;QACzB,YAAY,CACV,QAAQ,EACR,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EACnD;YACE,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,KAAK,EAAE,UAAU;SAClB,CACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type EditorAdapter, type CommandMeta } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cline stores project-level config in `.cline/` (skills/, rules/, mcp.json).
|
|
4
|
+
* `.clinerules/` is the legacy rules-only directory, still auto-detected.
|
|
5
|
+
*
|
|
6
|
+
* Conventions follow the Cline documentation (2026):
|
|
7
|
+
* - Skills: `.cline/skills/<name>/SKILL.md` with YAML frontmatter
|
|
8
|
+
* (name + description). Triggered via `/<name>` slash command.
|
|
9
|
+
* - MCP: `.cline/mcp.json` with `{ "mcpServers": { ... } }` structure.
|
|
10
|
+
* - Rules: Cline auto-detects `AGENTS.md` — no wrapper file needed.
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatClineCommand(meta: CommandMeta): string;
|
|
13
|
+
export declare function getClineCommandPath(id: string): string;
|
|
14
|
+
export declare function hasCline(projectRoot: string): boolean;
|
|
15
|
+
export declare const clineAdapter: EditorAdapter;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cline adapter: `.cline/skills/opsx-<id>/SKILL.md` with name+description
|
|
3
|
+
* frontmatter; MCP lives in `.cline/mcp.json`. Cline auto-detects
|
|
4
|
+
* AGENTS.md as project rules — no wrapper file needed.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync } from "fs";
|
|
7
|
+
import { join } from "path";
|
|
8
|
+
import { defineAdapter } from "../types.js";
|
|
9
|
+
import { escapeYamlValue, transformToHyphenCommands, isMcpServerInFile, installMcpServerInFile, removeMcpServerFromFile, } from "../shared.js";
|
|
10
|
+
import { registerAdapter } from "../registry.js";
|
|
11
|
+
// ─── Cline adapter ───────────────────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Cline stores project-level config in `.cline/` (skills/, rules/, mcp.json).
|
|
14
|
+
* `.clinerules/` is the legacy rules-only directory, still auto-detected.
|
|
15
|
+
*
|
|
16
|
+
* Conventions follow the Cline documentation (2026):
|
|
17
|
+
* - Skills: `.cline/skills/<name>/SKILL.md` with YAML frontmatter
|
|
18
|
+
* (name + description). Triggered via `/<name>` slash command.
|
|
19
|
+
* - MCP: `.cline/mcp.json` with `{ "mcpServers": { ... } }` structure.
|
|
20
|
+
* - Rules: Cline auto-detects `AGENTS.md` — no wrapper file needed.
|
|
21
|
+
*/
|
|
22
|
+
export function formatClineCommand(meta) {
|
|
23
|
+
const body = transformToHyphenCommands(meta.body);
|
|
24
|
+
const skillName = `opsx-${meta.id}`;
|
|
25
|
+
return `---
|
|
26
|
+
name: ${escapeYamlValue(skillName)}
|
|
27
|
+
description: ${escapeYamlValue(meta.description)}
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
${body}
|
|
31
|
+
`;
|
|
32
|
+
}
|
|
33
|
+
export function getClineCommandPath(id) {
|
|
34
|
+
return join(".cline", "skills", `opsx-${id}`, "SKILL.md");
|
|
35
|
+
}
|
|
36
|
+
export function hasCline(projectRoot) {
|
|
37
|
+
return (existsSync(join(projectRoot, ".cline")) ||
|
|
38
|
+
existsSync(join(projectRoot, ".clinerules")));
|
|
39
|
+
}
|
|
40
|
+
export const clineAdapter = defineAdapter({
|
|
41
|
+
id: "cline",
|
|
42
|
+
label: "cline",
|
|
43
|
+
displayName: "Cline",
|
|
44
|
+
detect: hasCline,
|
|
45
|
+
commandFilePath: getClineCommandPath,
|
|
46
|
+
formatCommand: formatClineCommand,
|
|
47
|
+
// Cline auto-detects AGENTS.md — that's the default.
|
|
48
|
+
isMcpInstalled(projectRoot, serverName) {
|
|
49
|
+
return isMcpServerInFile(clineMcpPath(projectRoot), serverName);
|
|
50
|
+
},
|
|
51
|
+
installMcp(projectRoot, serverName, command) {
|
|
52
|
+
installMcpServerInFile(clineMcpPath(projectRoot), serverName, command);
|
|
53
|
+
},
|
|
54
|
+
removeMcp(projectRoot, serverName) {
|
|
55
|
+
removeMcpServerFromFile(clineMcpPath(projectRoot), serverName);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
/** Path to the project-level MCP config file for Cline. */
|
|
59
|
+
function clineMcpPath(projectRoot) {
|
|
60
|
+
return join(projectRoot, ".cline", "mcp.json");
|
|
61
|
+
}
|
|
62
|
+
registerAdapter(clineAdapter);
|
|
63
|
+
//# sourceMappingURL=cline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cline.js","sourceRoot":"","sources":["../../../../src/commands/editors/adapters/cline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAwC,MAAM,aAAa,CAAC;AAClF,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,4EAA4E;AAE5E;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;IACpC,OAAO;QACD,eAAe,CAAC,SAAS,CAAC;eACnB,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;;;EAG9C,IAAI;CACL,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAU;IAC5C,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC1C,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACvC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAC7C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAkB,aAAa,CAAC;IACvD,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,OAAO;IACpB,MAAM,EAAE,QAAQ;IAChB,eAAe,EAAE,mBAAmB;IACpC,aAAa,EAAE,kBAAkB;IACjC,qDAAqD;IACrD,cAAc,CAAC,WAAW,EAAE,UAAU;QACpC,OAAO,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IACD,UAAU,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO;QACzC,sBAAsB,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IACD,SAAS,CAAC,WAAW,EAAE,UAAU;QAC/B,uBAAuB,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;CACF,CAAC,CAAC;AAEH,2DAA2D;AAC3D,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC;AAED,eAAe,CAAC,YAAY,CAAC,CAAC"}
|