openspec-playwright 0.3.74 → 0.3.76
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 +32 -22
- package/README.zh-CN.md +23 -20
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +112 -47
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/editors/adapters/dsh.js +3 -0
- package/dist/commands/editors/adapters/dsh.js.map +1 -1
- package/dist/commands/editors/adapters/omp.js +3 -0
- package/dist/commands/editors/adapters/omp.js.map +1 -1
- package/dist/commands/editors/adapters/pi.js +3 -0
- package/dist/commands/editors/adapters/pi.js.map +1 -1
- package/dist/commands/editors/project-rules.js +1 -1
- package/dist/commands/editors/project-rules.js.map +1 -1
- package/dist/commands/editors/registry.d.ts +15 -0
- package/dist/commands/editors/registry.js +22 -1
- package/dist/commands/editors/registry.js.map +1 -1
- package/dist/commands/editors/types.d.ts +17 -0
- package/dist/commands/editors/types.js +5 -0
- package/dist/commands/editors/types.js.map +1 -1
- package/dist/commands/editors.d.ts +1 -1
- package/dist/commands/editors.js +1 -1
- 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 +23 -32
- 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 +1 -2
- package/dist/commands/update.js +109 -55
- 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 +28 -49
- package/package.json +1 -1
- 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
|
|
|
@@ -109,10 +109,19 @@ ids. A `--tools` id is configured even when the editor is not detected
|
|
|
109
109
|
(its config directory is created).
|
|
110
110
|
|
|
111
111
|
Without `--tools`, an interactive multi-select is shown on TTY terminals
|
|
112
|
-
(pre-selecting detected editors
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
(pre-selecting detected editors — including global-config-dir signals for
|
|
113
|
+
Pi, Oh My Pi, and DeepSeek Harness); on non-interactive terminals the
|
|
114
|
+
configured editors fall back to **project-level detection only** (global
|
|
115
|
+
config dirs are a pre-select suggestion, never a write authorization).
|
|
116
|
+
`--tools` is documented as orthogonal to `--no-mcp`: the former picks
|
|
117
|
+
*which* editors, the latter *whether* to install the Playwright MCP server
|
|
118
|
+
for them.
|
|
119
|
+
|
|
120
|
+
**Editor territory**: `update` only maintains editors that already have
|
|
121
|
+
openspec-pw command artifacts in the project — it never adds new editors
|
|
122
|
+
(a global config dir or a hand-created `.cursor/` does not authorize
|
|
123
|
+
writes). To add an editor to an initialized project, re-run
|
|
124
|
+
`openspec-pw init --tools <id>` (idempotent).
|
|
116
125
|
### CLI Commands
|
|
117
126
|
|
|
118
127
|
```bash
|
|
@@ -169,11 +178,12 @@ openspec-pw uninstall # Remove integration from the project
|
|
|
169
178
|
1. **Node.js >= 20**
|
|
170
179
|
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
180
|
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
|
-
- **
|
|
181
|
+
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:
|
|
182
|
+
- `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.
|
|
183
|
+
- **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)
|
|
184
|
+
- **OpenCode**: merged into `opencode.jsonc` under `mcp["playwright-test"] = { type: "local", command: ["npx", "playwright", "run-test-mcp-server"] }`
|
|
185
|
+
- **Cline**: merged into `.cline/mcp.json` under `mcpServers["playwright-test"] = { "command": "npx", "args": ["playwright", "run-test-mcp-server"] }`
|
|
186
|
+
- **Cursor**: merged into `.cursor/mcp.json` under `mcpServers["playwright-test"] = { "command": "npx", "args": ["playwright", "run-test-mcp-server"] }`
|
|
177
187
|
|
|
178
188
|
> **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
189
|
|
|
@@ -198,7 +208,7 @@ Run through these steps in order when using the E2E workflow for the first time:
|
|
|
198
208
|
| 1. Install CLI | `npm install -g openspec-playwright@latest` | Check Node.js version `node -v` (needs >= 20) |
|
|
199
209
|
| 2. Install OpenSpec | `npm install -g @fission-ai/openspec@latest && openspec init` | `npm cache clean -f && npm install -g @fission-ai/openspec@latest` |
|
|
200
210
|
| 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
|
|
211
|
+
| 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
212
|
| 5. Install browsers | `npx playwright install --with-deps` | macOS may need `xcode-select --install` first |
|
|
203
213
|
| 6. Start dev server | `npm run dev` (in a separate terminal) | Confirm port, set `BASE_URL` if non-standard |
|
|
204
214
|
| 7. Validate env | `npx playwright test tests/playwright/seed.spec.ts` | Check `webServer` in `playwright.config.ts` |
|
|
@@ -217,8 +227,8 @@ Run through these steps in order when using the E2E workflow for the first time:
|
|
|
217
227
|
| **OpenSpec** | directory initialized | `.spec.md` specs count |
|
|
218
228
|
| **Playwright Browsers** | CLI version, Chromium binary downloaded | — |
|
|
219
229
|
| **Playwright Test** | `@playwright/test` framework installed | — |
|
|
220
|
-
| **Playwright MCP** | configured for each
|
|
221
|
-
| **Sync** | standards in sync when initialized (drift → `openspec-pw update
|
|
230
|
+
| **Playwright MCP** | test-runner server configured for each **authorized** editor (command artifacts exist; unauthorized editors get an info line pointing at `init --tools <id>` — never a warning) | `playwright-cli` (@playwright/cli on PATH) — optional ⚠, never block |
|
|
231
|
+
| **Sync** | standards in sync when initialized (drift → `openspec-pw update`; AGENTS.md without markers counts as not-initialized, always ok) | not initialized (gated, non-blocking) |
|
|
222
232
|
| **Tests** | `tests/playwright/` directory exists | `auth.setup.ts` presence |
|
|
223
233
|
| **Seed Test** | — | `seed.spec.ts` presence |
|
|
224
234
|
| **App Server** | — | dev script, base URL, reachability |
|
|
@@ -309,20 +319,20 @@ CLI (openspec-pw)
|
|
|
309
319
|
Editors (auto-detected by openspec-pw init)
|
|
310
320
|
├── Claude Code (/opsx:e2e)
|
|
311
321
|
│ ├── .claude/commands/opsx/e2e.md → Command file
|
|
312
|
-
│ ├──
|
|
322
|
+
│ ├── playwright-test server → Healer Agent tools (via `claude mcp add --scope project playwright-test …`, writes project-root `.mcp.json`)
|
|
313
323
|
│ └── CLAUDE.md → CodeGraph 优先 block + workflow hint + imports AGENTS.md via `@AGENTS.md`
|
|
314
324
|
├── OpenCode (/opsx-e2e)
|
|
315
325
|
│ ├── .opencode/commands/opsx-e2e.md → Command file (body rewritten from /opsx: → /opsx-)
|
|
316
|
-
│ ├── opencode.jsonc → Playwright MCP (mcp
|
|
326
|
+
│ ├── opencode.jsonc → Playwright MCP (mcp["playwright-test"]) + instructions routing
|
|
317
327
|
│ └── AGENTS.md → Employee-grade standards (SSOT)
|
|
318
328
|
├── Cline (/opsx-e2e)
|
|
319
329
|
│ ├── .cline/skills/opsx-e2e/SKILL.md → Skill file (body rewritten from /opsx: → /opsx-)
|
|
320
|
-
│ ├── .cline/mcp.json → Playwright MCP (mcpServers
|
|
330
|
+
│ ├── .cline/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
321
331
|
│ └── AGENTS.md → Employee-grade standards (auto-detected by Cline)
|
|
322
332
|
├── Cursor (/opsx-e2e)
|
|
323
333
|
│ ├── .cursor/commands/opsx-e2e.md → Slash command (plain MD, $1 = change name)
|
|
324
334
|
│ ├── .cursor/skills/opsx-e2e/SKILL.md → Skill (disable-model-invocation: true)
|
|
325
|
-
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers
|
|
335
|
+
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
326
336
|
│ └── AGENTS.md → Employee-grade standards (auto-detected by Cursor)
|
|
327
337
|
├── Pi (/opsx-e2e)
|
|
328
338
|
│ ├── .pi/prompts/opsx-e2e.md → Prompt template (filename = command name)
|
|
@@ -330,7 +340,7 @@ Editors (auto-detected by openspec-pw init)
|
|
|
330
340
|
│ (no MCP client — exploration via `openspec-pw explore`)
|
|
331
341
|
└── Oh My Pi (/opsx-e2e)
|
|
332
342
|
├── .omp/commands/opsx-e2e.md → Command file (name + description frontmatter)
|
|
333
|
-
├── .omp/mcp.json → Playwright MCP (mcpServers
|
|
343
|
+
├── .omp/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
334
344
|
└── AGENTS.md → Employee-grade standards (auto-detected by omp)
|
|
335
345
|
└── DeepSeek Harness (/opsx-e2e)
|
|
336
346
|
├── .dsh/skills/opsx-e2e/SKILL.md → Skill file (name + description frontmatter)
|
|
@@ -359,7 +369,7 @@ Exploration (openspec/changes/<name>/specs/playwright/)
|
|
|
359
369
|
├── app-exploration.md → This change's routes + verified selectors
|
|
360
370
|
└── test-plan.md → This change's test cases
|
|
361
371
|
|
|
362
|
-
Healer Agent (
|
|
372
|
+
Healer Agent (playwright-test MCP server)
|
|
363
373
|
└── browser_snapshot, browser_navigate, browser_run_code, etc.
|
|
364
374
|
```
|
|
365
375
|
|
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
|
|
|
@@ -124,7 +125,9 @@ openspec-pw init --tools none # 不配置编辑器,只生成脚手
|
|
|
124
125
|
|
|
125
126
|
受支持 id:`claude`、`opencode`、`cline`、`cursor`、`pi`、`omp`、`dsh`(`oh-my-pi` 是 `omp` 的别名)。id 大小写不敏感、重复自动去重、`all`/`none` 不能与具体 id 混用。被 `--tools` 指定的编辑器即使未被检测到也会配置(会自动创建其配置目录)。
|
|
126
127
|
|
|
127
|
-
未提供 `--tools` 时:TTY
|
|
128
|
+
未提供 `--tools` 时:TTY 终端弹出交互式多选(预选已检测的编辑器——含 Pi / Oh My Pi / DeepSeek Harness 的全局配置目录信号);非交互终端回退到**仅项目内检测**(全局配置目录只是预选建议,不构成写入授权)。`--tools` 与 `--no-mcp` 正交:前者选择*哪些*编辑器,后者决定*是否*为它们安装 Playwright MCP。
|
|
129
|
+
|
|
130
|
+
**编辑器领土**:`update` 只维护项目内已有 openspec-pw 命令工件的编辑器——不会新增编辑器(全局配置目录或手建的 `.cursor/` 不构成写入授权)。给已初始化项目新增编辑器请重跑 `openspec-pw init --tools <id>`(幂等)。
|
|
128
131
|
|
|
129
132
|
### CLI 命令
|
|
130
133
|
|
|
@@ -191,7 +194,7 @@ openspec-pw uninstall # 移除项目中的集成
|
|
|
191
194
|
| 1. 安装 CLI | `npm install -g openspec-playwright@latest` | 检查 Node.js 版本 `node -v`(需 >= 20) |
|
|
192
195
|
| 2. 安装 OpenSpec | `npm install -g @fission-ai/openspec@latest && openspec init` | `npm cache clean -f && npm install -g @fission-ai/openspec@latest` |
|
|
193
196
|
| 3. 初始化 E2E | `openspec-pw init` | 运行 `openspec-pw doctor` 查看具体缺失项 |
|
|
194
|
-
| 4. 安装 Playwright MCP | `claude mcp add --scope project playwright npx
|
|
197
|
+
| 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
198
|
| 5. 安装浏览器 | `npx playwright install --with-deps` | macOS 可能需先运行 `xcode-select --install` |
|
|
196
199
|
| 6. 启动开发服务器 | `npm run dev`(在另一个终端) | 确认端口,配置 `BASE_URL` |
|
|
197
200
|
| 7. 验证环境 | `npx playwright test tests/playwright/seed.spec.ts` | 检查 `playwright.config.ts` 中的 `webServer` 配置 |
|
|
@@ -210,8 +213,8 @@ openspec-pw uninstall # 移除项目中的集成
|
|
|
210
213
|
| **OpenSpec** | 目录已初始化 | `.spec.md` 规范文件数量 |
|
|
211
214
|
| **Playwright 浏览器** | CLI 版本、Chromium 二进制已下载 | — |
|
|
212
215
|
| **Playwright 测试框架** | `@playwright/test` 已安装 | — |
|
|
213
|
-
| **Playwright MCP** |
|
|
214
|
-
| **Sync** | 已初始化时标准同步(漂移 → `openspec-pw update
|
|
216
|
+
| **Playwright MCP** | 每个已授权(有命令工件)编辑器的 test-runner server 配置;未授权编辑器降为信息行(提示 `init --tools` 添加,不阻断) | `playwright-cli`(PATH 上的 @playwright/cli)——可选 ⚠,不阻断 |
|
|
217
|
+
| **Sync** | 已初始化时标准同步(漂移 → `openspec-pw update`;AGENTS.md 无标记视为未初始化,恒 ok:true) | 未初始化(闸门,不阻断) |
|
|
215
218
|
| **测试目录** | `tests/playwright/` 目录存在 | `auth.setup.ts` 是否存在 |
|
|
216
219
|
| **种子测试** | — | `seed.spec.ts` 是否存在 |
|
|
217
220
|
| **应用服务器** | — | 开发脚本、基础 URL、可达性 |
|
|
@@ -276,20 +279,20 @@ CLI (openspec-pw)
|
|
|
276
279
|
编辑器(由 openspec-pw init 自动检测)
|
|
277
280
|
├── Claude Code (/opsx:e2e)
|
|
278
281
|
│ ├── .claude/commands/opsx/e2e.md → 命令文件(从 templates/e2e-command.md 安装)
|
|
279
|
-
│ ├──
|
|
282
|
+
│ ├── playwright-test server → Healer Agent 工具(通过 `claude mcp add --scope project playwright-test …`,写入项目根 `.mcp.json`)
|
|
280
283
|
│ └── CLAUDE.md → CodeGraph 优先节 + 工作流提示 + 通过 `@AGENTS.md` 引入 AGENTS.md
|
|
281
284
|
├── OpenCode (/opsx-e2e)
|
|
282
285
|
│ ├── .opencode/commands/opsx-e2e.md → 命令文件(正文由 /opsx: 改写为 /opsx-)
|
|
283
|
-
│ ├── opencode.jsonc → Playwright MCP (mcp
|
|
286
|
+
│ ├── opencode.jsonc → Playwright MCP (mcp["playwright-test"]) + 指令路由
|
|
284
287
|
│ └── AGENTS.md → 员工级规范(单一数据源)
|
|
285
288
|
├── Cline (/opsx-e2e)
|
|
286
289
|
│ ├── .cline/skills/opsx-e2e/SKILL.md → Skill 文件(正文由 /opsx: 改写为 /opsx-)
|
|
287
|
-
│ ├── .cline/mcp.json → Playwright MCP (mcpServers
|
|
290
|
+
│ ├── .cline/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
288
291
|
│ └── AGENTS.md → 员工级规范(Cline 原生自动识别)
|
|
289
292
|
├── Cursor (/opsx-e2e)
|
|
290
293
|
│ ├── .cursor/commands/opsx-e2e.md → 斜杠命令(纯 MD,$1 = change 名)
|
|
291
294
|
│ ├── .cursor/skills/opsx-e2e/SKILL.md → Skill(disable-model-invocation: true)
|
|
292
|
-
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers
|
|
295
|
+
│ ├── .cursor/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
293
296
|
│ └── AGENTS.md → 员工级规范(Cursor 原生自动识别)
|
|
294
297
|
├── Pi (/opsx-e2e)
|
|
295
298
|
│ ├── .pi/prompts/opsx-e2e.md → 提示词模板(文件名 = 命令名)
|
|
@@ -297,7 +300,7 @@ CLI (openspec-pw)
|
|
|
297
300
|
│ (无 MCP 客户端 — 探索改用 `openspec-pw explore`)
|
|
298
301
|
└── Oh My Pi (/opsx-e2e)
|
|
299
302
|
├── .omp/commands/opsx-e2e.md → 命令文件(name + description frontmatter)
|
|
300
|
-
├── .omp/mcp.json → Playwright MCP (mcpServers
|
|
303
|
+
├── .omp/mcp.json → Playwright MCP (mcpServers["playwright-test"])
|
|
301
304
|
└── AGENTS.md → 员工级规范(omp 原生自动识别)
|
|
302
305
|
└── DeepSeek Harness (/opsx-e2e)
|
|
303
306
|
├── .dsh/skills/opsx-e2e/SKILL.md → Skill 文件(name + description frontmatter)
|
|
@@ -323,7 +326,7 @@ Cline 与 Cursor 原生自动识别 `AGENTS.md`,无需包装文件。
|
|
|
323
326
|
├── app-exploration.md → 本次 change 的路由 + 已验证选择器
|
|
324
327
|
└── test-plan.md → 本次 change 的测试用例
|
|
325
328
|
|
|
326
|
-
Healer Agent (
|
|
329
|
+
Healer Agent (playwright-test MCP server)
|
|
327
330
|
└── browser_snapshot, browser_navigate, browser_run_code 等
|
|
328
331
|
```
|
|
329
332
|
|
package/dist/commands/doctor.js
CHANGED
|
@@ -4,9 +4,27 @@ import { createRequire } from "node:module";
|
|
|
4
4
|
import { join } from "path";
|
|
5
5
|
import { execFileSync } from "child_process";
|
|
6
6
|
import chalk from "chalk";
|
|
7
|
-
import { detectAdapters, slashCommandForAdapter, claudeWrapperStandardsContent } from "../commands/editors.js";
|
|
8
|
-
import { detectAppServer,
|
|
7
|
+
import { detectAdapters, hasCommandArtifacts, slashCommandForAdapter, claudeAdapter, claudeWrapperStandardsContent, } from "../commands/editors.js";
|
|
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();
|
|
@@ -201,21 +219,36 @@ export async function doctor(options = {}) {
|
|
|
201
219
|
category: "Playwright MCP",
|
|
202
220
|
name: `playwright-mcp-${adapter.label}`,
|
|
203
221
|
ok: true,
|
|
222
|
+
authorized: hasCommandArtifacts(projectRoot, adapter),
|
|
204
223
|
message: `${adapter.displayName} has no MCP client (use openspec-pw explore)`,
|
|
205
224
|
});
|
|
206
225
|
continue;
|
|
207
226
|
}
|
|
208
|
-
|
|
227
|
+
// Gate on write authorization (tool-owned command artifacts exist),
|
|
228
|
+
// not on detection: a global config dir or a hand-created marker
|
|
229
|
+
// directory does not authorize openspec-pw writes, so nagging about
|
|
230
|
+
// "run update" for it would send the user into a loop update cannot
|
|
231
|
+
// fix (update never expands territory). Unauthorized → info line
|
|
232
|
+
// pointing at the init extension path.
|
|
233
|
+
const authorized = hasCommandArtifacts(projectRoot, adapter);
|
|
234
|
+
const testRunnerInstalled = isTestRunnerMcpInstalled(adapter);
|
|
209
235
|
checks.push({
|
|
210
236
|
category: "Playwright MCP",
|
|
211
|
-
name: `
|
|
212
|
-
ok:
|
|
213
|
-
|
|
237
|
+
name: `test-runner-mcp-${adapter.label}`,
|
|
238
|
+
ok: authorized ? testRunnerInstalled : true,
|
|
239
|
+
authorized,
|
|
240
|
+
message: authorized
|
|
241
|
+
? testRunnerInstalled
|
|
242
|
+
? "installed"
|
|
243
|
+
: `not configured for ${adapter.label} (run openspec-pw update)`
|
|
244
|
+
: `not configured in this project (run "openspec-pw init --tools ${adapter.id}" to add)`,
|
|
214
245
|
});
|
|
215
|
-
// Claude Code MCP moved to project scope (0.3.69):
|
|
216
|
-
//
|
|
217
|
-
//
|
|
218
|
-
|
|
246
|
+
// Claude Code MCP moved to project scope (0.3.69): a legacy user-scope
|
|
247
|
+
// playwright entry in ~/.claude.json is invisible to the project-level
|
|
248
|
+
// check above. With the single-server layout the project server is
|
|
249
|
+
// `playwright-test`, so any user-scope `playwright` entry is legacy —
|
|
250
|
+
// surface it (Claude Code would load it into every session).
|
|
251
|
+
if (adapter.id === "claude") {
|
|
219
252
|
try {
|
|
220
253
|
const globalCfg = JSON.parse(readFileSync(join(homedir(), ".claude.json"), "utf-8"));
|
|
221
254
|
if (globalCfg?.mcpServers?.playwright) {
|
|
@@ -232,31 +265,59 @@ export async function doctor(options = {}) {
|
|
|
232
265
|
}
|
|
233
266
|
}
|
|
234
267
|
}
|
|
235
|
-
// Cursor-specific: command + skill readiness (spec requirement)
|
|
268
|
+
// Cursor-specific: command + skill readiness (spec requirement). Gated
|
|
269
|
+
// on write authorization — a hand-created .cursor/ with the user's own
|
|
270
|
+
// config must not red-flag doctor (update would not create the files).
|
|
236
271
|
const cursor = adapters.find((a) => a.id === "cursor");
|
|
237
272
|
if (cursor) {
|
|
273
|
+
const cursorAuthorized = hasCommandArtifacts(projectRoot, cursor);
|
|
238
274
|
const cmdPath = join(projectRoot, ".cursor", "commands", "opsx-e2e.md");
|
|
239
275
|
const skillPath = join(projectRoot, ".cursor", "skills", "opsx-e2e", "SKILL.md");
|
|
240
276
|
const hasCmd = existsSync(cmdPath);
|
|
241
277
|
const hasSkill = existsSync(skillPath);
|
|
278
|
+
const notConfigured = 'not configured in this project (run "openspec-pw init --tools cursor" to add)';
|
|
242
279
|
checks.push({
|
|
243
280
|
category: "Cursor E2E",
|
|
244
281
|
name: "cursor-e2e-command",
|
|
245
|
-
ok: hasCmd,
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
282
|
+
ok: cursorAuthorized ? hasCmd : true,
|
|
283
|
+
authorized: cursorAuthorized,
|
|
284
|
+
message: cursorAuthorized
|
|
285
|
+
? hasCmd
|
|
286
|
+
? ".cursor/commands/opsx-e2e.md found"
|
|
287
|
+
: ".cursor/commands/opsx-e2e.md missing"
|
|
288
|
+
: notConfigured,
|
|
249
289
|
});
|
|
250
290
|
checks.push({
|
|
251
291
|
category: "Cursor E2E",
|
|
252
292
|
name: "cursor-e2e-skill",
|
|
253
|
-
ok: hasSkill,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
293
|
+
ok: cursorAuthorized ? hasSkill : true,
|
|
294
|
+
authorized: cursorAuthorized,
|
|
295
|
+
message: cursorAuthorized
|
|
296
|
+
? hasSkill
|
|
297
|
+
? ".cursor/skills/opsx-e2e/SKILL.md found"
|
|
298
|
+
: ".cursor/skills/opsx-e2e/SKILL.md missing"
|
|
299
|
+
: notConfigured,
|
|
257
300
|
});
|
|
258
301
|
}
|
|
259
302
|
}
|
|
303
|
+
// @playwright/cli — awareness only (0.x, no semver promise; never a
|
|
304
|
+
// dependency). Editor-independent, hence outside the adapter branch.
|
|
305
|
+
let cliAvailable = false;
|
|
306
|
+
try {
|
|
307
|
+
execFileSync(process.platform === "win32" ? "where" : "which", ["playwright-cli"], { stdio: "ignore", shell: needsShell });
|
|
308
|
+
cliAvailable = true;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
/* not installed — optional */
|
|
312
|
+
}
|
|
313
|
+
checks.push({
|
|
314
|
+
category: "Playwright MCP",
|
|
315
|
+
name: "playwright-cli",
|
|
316
|
+
ok: cliAvailable,
|
|
317
|
+
message: cliAvailable
|
|
318
|
+
? "available"
|
|
319
|
+
: "not installed (optional token-efficient browser CLI for agents)",
|
|
320
|
+
});
|
|
260
321
|
// Sync — employee standards drift (AGENTS.md / CLAUDE.md OPENSPEC blocks)
|
|
261
322
|
// Gated on "initialized": a project that never ran init is `ok:true` so CI
|
|
262
323
|
// is not tripped; an initialized project with stale standards is `ok:false`.
|
|
@@ -282,36 +343,49 @@ export async function doctor(options = {}) {
|
|
|
282
343
|
const standardsExpected = existsSync(standardsPath)
|
|
283
344
|
? readFileSync(standardsPath, "utf-8")
|
|
284
345
|
: "";
|
|
285
|
-
// AGENTS.md
|
|
286
|
-
//
|
|
287
|
-
//
|
|
346
|
+
// AGENTS.md — 标记即领土: only the tool-owned block is maintained
|
|
347
|
+
// (update repairs it when present). A missing file or one without
|
|
348
|
+
// markers is NOT repairable by update — report ok:true with a message
|
|
349
|
+
// pointing at init, never at update (avoids the doctor-nags →
|
|
350
|
+
// update-can't-fix loop).
|
|
288
351
|
const agentsPath = join(projectRoot, "AGENTS.md");
|
|
289
352
|
if (!existsSync(agentsPath)) {
|
|
290
353
|
checks.push({
|
|
291
354
|
category: "Sync",
|
|
292
355
|
name: "standards-agents",
|
|
293
|
-
ok:
|
|
294
|
-
|
|
356
|
+
ok: true,
|
|
357
|
+
authorized: hasCommand,
|
|
358
|
+
message: hasCommand
|
|
359
|
+
? 'AGENTS.md missing (standards block removed) — restore via "openspec-pw init --tools <id>"'
|
|
360
|
+
: "not initialized (run openspec-pw init first)",
|
|
295
361
|
});
|
|
296
362
|
}
|
|
297
363
|
else {
|
|
298
364
|
const fileContent = readFileSync(agentsPath, "utf-8");
|
|
299
365
|
const noMarkers = !fileContent.includes(OPENSPEC_START);
|
|
300
366
|
const drift = noMarkers
|
|
301
|
-
? { stale:
|
|
367
|
+
? { stale: false }
|
|
302
368
|
: compareBlock(fileContent, standardsExpected);
|
|
303
369
|
checks.push({
|
|
304
370
|
category: "Sync",
|
|
305
371
|
name: "standards-agents",
|
|
306
|
-
ok: !drift.stale,
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
372
|
+
ok: noMarkers ? true : !drift.stale,
|
|
373
|
+
authorized: noMarkers ? hasCommand : true,
|
|
374
|
+
message: noMarkers
|
|
375
|
+
? hasCommand
|
|
376
|
+
? 'AGENTS.md has no OPENSPEC block (removed) — restore via "openspec-pw init --tools <id>"'
|
|
377
|
+
: "not initialized (run openspec-pw init first)"
|
|
378
|
+
: drift.stale
|
|
379
|
+
? "AGENTS.md differs from bundled version — run openspec-pw update"
|
|
380
|
+
: "standards in sync",
|
|
310
381
|
});
|
|
311
382
|
}
|
|
312
|
-
// CLAUDE.md wrapper is only checked when
|
|
313
|
-
//
|
|
314
|
-
|
|
383
|
+
// CLAUDE.md wrapper is only checked when the claude editor is authorized
|
|
384
|
+
// (command artifacts exist) — not on detection: a global ~/.claude dir
|
|
385
|
+
// or a project .claude/ without openspec-pw artifacts never implies a
|
|
386
|
+
// wrapper. A bare `@AGENTS.md` import without markers is left
|
|
387
|
+
// untouched — not stale.
|
|
388
|
+
if (hasCommandArtifacts(projectRoot, claudeAdapter)) {
|
|
315
389
|
const claudePath = join(projectRoot, "CLAUDE.md");
|
|
316
390
|
// A symlinked CLAUDE.md (→ AGENTS.md, the official reuse pattern) is
|
|
317
391
|
// covered by the standards-agents check above — comparing it against
|
|
@@ -473,19 +547,7 @@ export async function doctor(options = {}) {
|
|
|
473
547
|
ok: mcpOk,
|
|
474
548
|
message: mcpMsg,
|
|
475
549
|
});
|
|
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;
|
|
550
|
+
const allOk = checks.filter((c) => !c.ok && !isOptionalCheck(c.name)).length === 0;
|
|
489
551
|
if (options.json) {
|
|
490
552
|
console.log(JSON.stringify({ ok: allOk, checks }, null, 2));
|
|
491
553
|
if (!allOk)
|
|
@@ -503,7 +565,7 @@ export async function doctor(options = {}) {
|
|
|
503
565
|
if (check.ok) {
|
|
504
566
|
console.log(chalk.green(` ✓ ${check.name}: ${check.message}`));
|
|
505
567
|
}
|
|
506
|
-
else if (
|
|
568
|
+
else if (isOptionalCheck(check.name)) {
|
|
507
569
|
console.log(chalk.yellow(` ⚠ ${check.name}: ${check.message}`));
|
|
508
570
|
}
|
|
509
571
|
else {
|
|
@@ -513,7 +575,10 @@ export async function doctor(options = {}) {
|
|
|
513
575
|
console.log(chalk.blue("\n─── Summary ───"));
|
|
514
576
|
if (allOk) {
|
|
515
577
|
console.log(chalk.green(" ✅ All prerequisites met!\n"));
|
|
516
|
-
|
|
578
|
+
// Hint only over authorized editors — global-signal detection must not
|
|
579
|
+
// suggest commands for editors this project never configured (same
|
|
580
|
+
// display/authorization alignment as update's restart hint).
|
|
581
|
+
const detected = detectAdapters(process.cwd()).filter((a) => hasCommandArtifacts(process.cwd(), a));
|
|
517
582
|
const hints = detected.length
|
|
518
583
|
? detected.map((a) => {
|
|
519
584
|
return `${slashCommandForAdapter(a)} (in ${a.displayName})`;
|
|
@@ -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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"}
|