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.
Files changed (41) hide show
  1. package/README.md +32 -22
  2. package/README.zh-CN.md +23 -20
  3. package/dist/commands/doctor.d.ts +1 -0
  4. package/dist/commands/doctor.js +112 -47
  5. package/dist/commands/doctor.js.map +1 -1
  6. package/dist/commands/editors/adapters/dsh.js +3 -0
  7. package/dist/commands/editors/adapters/dsh.js.map +1 -1
  8. package/dist/commands/editors/adapters/omp.js +3 -0
  9. package/dist/commands/editors/adapters/omp.js.map +1 -1
  10. package/dist/commands/editors/adapters/pi.js +3 -0
  11. package/dist/commands/editors/adapters/pi.js.map +1 -1
  12. package/dist/commands/editors/project-rules.js +1 -1
  13. package/dist/commands/editors/project-rules.js.map +1 -1
  14. package/dist/commands/editors/registry.d.ts +15 -0
  15. package/dist/commands/editors/registry.js +22 -1
  16. package/dist/commands/editors/registry.js.map +1 -1
  17. package/dist/commands/editors/types.d.ts +17 -0
  18. package/dist/commands/editors/types.js +5 -0
  19. package/dist/commands/editors/types.js.map +1 -1
  20. package/dist/commands/editors.d.ts +1 -1
  21. package/dist/commands/editors.js +1 -1
  22. package/dist/commands/editors.js.map +1 -1
  23. package/dist/commands/explore.d.ts +2 -0
  24. package/dist/commands/explore.js +2 -2
  25. package/dist/commands/explore.js.map +1 -1
  26. package/dist/commands/init.js +23 -32
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/uninstall.js +4 -2
  29. package/dist/commands/uninstall.js.map +1 -1
  30. package/dist/commands/update.d.ts +1 -2
  31. package/dist/commands/update.js +109 -55
  32. package/dist/commands/update.js.map +1 -1
  33. package/dist/shared/index.d.ts +1 -1
  34. package/dist/shared/index.js +1 -1
  35. package/dist/shared/index.js.map +1 -1
  36. package/dist/shared/mcp.d.ts +5 -2
  37. package/dist/shared/mcp.js +15 -7
  38. package/dist/shared/mcp.js.map +1 -1
  39. package/employee-standards.md +28 -49
  40. package/package.json +1 -1
  41. package/templates/e2e-command.md +6 -2
@@ -1,4 +1,3 @@
1
- import { detectAdapters } from "./editors.js";
2
1
  export interface UpdateOptions {
3
2
  cli?: boolean;
4
3
  skill?: boolean;
@@ -11,7 +10,7 @@ export declare function update(options: UpdateOptions): Promise<void>;
11
10
  * under `--no-skill` — standards sync is not a skill install and must not be
12
11
  * silently skipped by that flag.
13
12
  */
14
- export declare function syncEmployeeStandards(tmpDir: string, projectRoot: string, detected: ReturnType<typeof detectAdapters>): void;
13
+ export declare function syncEmployeeStandards(tmpDir: string, projectRoot: string, claudeAuthorized: boolean): void;
15
14
  export declare function syncProjectTemplates(tmpDir: string, projectRoot: string): void;
16
15
  /**
17
16
  * Sync credentials.yaml — update template structure while preserving user data.
@@ -6,8 +6,8 @@ import { tmpdir } from "os";
6
6
  import { promisify } from "util";
7
7
  import chalk from "chalk";
8
8
  import * as tar from "tar";
9
- import { buildCommandMeta, detectAdapters, installCommand, installProjectRules, claudeWrapperStandardsContent, } from "./editors.js";
10
- import { isPlaywrightMcpInstalled, ensurePlaywrightMcp, needsShell, detectCodeGraphStatus, codegraphHintLines, } from "../shared/index.js";
9
+ import { buildCommandMeta, getAllAdapters, hasCommandArtifacts, installCommand, installOpenSpecBlock, installClaudeWrapper, claudeAdapter, claudeWrapperStandardsContent, opencodeAdapter, } from "./editors.js";
10
+ import { ensureTestRunnerMcp, isTestRunnerMcpInstalled, hasFrontendSignal, needsShell, detectCodeGraphStatus, codegraphHintLines, } from "../shared/index.js";
11
11
  import { compareBlock, OPENSPEC_START } from "../shared/drift.js";
12
12
  const execFileAsync = promisify(execFile);
13
13
  export async function update(options) {
@@ -33,7 +33,12 @@ export async function update(options) {
33
33
  console.log(chalk.blue("─── Updating CLI ───"));
34
34
  let cliUpdated = false;
35
35
  try {
36
- await execFileAsync("npm", ["install", "-g", "openspec-playwright@latest"], { timeout: 120000, cwd: projectRoot, stdio: "inherit", shell: needsShell });
36
+ await execFileAsync("npm", ["install", "-g", "openspec-playwright@latest"], {
37
+ timeout: 120000,
38
+ cwd: projectRoot,
39
+ stdio: "inherit",
40
+ shell: needsShell,
41
+ });
37
42
  console.log(chalk.green(" ✓ CLI updated via npm"));
38
43
  cliUpdated = true;
39
44
  }
@@ -88,7 +93,12 @@ export async function update(options) {
88
93
  console.log(chalk.gray(" Node module resolution will use local version, not global CLI."));
89
94
  console.log(chalk.gray(" Syncing local devDependency to latest..."));
90
95
  try {
91
- await execFileAsync("npm", ["install", "-D", "openspec-playwright@latest"], { timeout: 120000, cwd: projectRoot, stdio: "inherit", shell: needsShell });
96
+ await execFileAsync("npm", ["install", "-D", "openspec-playwright@latest"], {
97
+ timeout: 120000,
98
+ cwd: projectRoot,
99
+ stdio: "inherit",
100
+ shell: needsShell,
101
+ });
92
102
  console.log(chalk.green(" ✓ devDependency synced to latest"));
93
103
  }
94
104
  catch (err) {
@@ -109,13 +119,21 @@ export async function update(options) {
109
119
  if (existsSync(commandSrc)) {
110
120
  body = readFileSync(commandSrc, "utf-8");
111
121
  }
112
- const detected = detectAdapters(projectRoot);
113
- if (detected.length === 0) {
114
- console.log(chalk.gray(" - No supported editor (.claude, .opencode, .cline, .cursor, .pi, .omp, or .dsh) found, skipping command installation"));
122
+ // Write authorization = tool-owned artifacts exist ("existing artifacts
123
+ // are the manifest") — never detect(): a global config dir or a
124
+ // hand-created marker directory does not authorize writes. update
125
+ // maintains territory; it never expands it.
126
+ const authorized = getAllAdapters().filter((a) => hasCommandArtifacts(projectRoot, a));
127
+ if (authorized.length === 0) {
128
+ console.log(chalk.gray(' - No openspec-pw artifacts in this project — run "openspec-pw init" to set up editor integrations'));
115
129
  }
116
130
  else if (body) {
117
131
  const meta = buildCommandMeta(body);
118
- for (const adapter of detected) {
132
+ for (const adapter of getAllAdapters()) {
133
+ if (!hasCommandArtifacts(projectRoot, adapter)) {
134
+ console.log(chalk.gray(` - ${adapter.label}: not configured in this project (run "openspec-pw init --tools ${adapter.id}" to add)`));
135
+ continue;
136
+ }
119
137
  // Drift-aware: only rewrite a command file when its content differs
120
138
  // from the formatted template. Untouched files keep their mtime.
121
139
  const relPath = adapter.commandFilePath(meta.id);
@@ -149,8 +167,9 @@ export async function update(options) {
149
167
  syncProjectTemplates(tmpDir, projectRoot);
150
168
  // Standards sync (drift-aware). Under --no-skill this phase still runs
151
169
  // via the else branch below — the flag only scopes command/template
152
- // installation, not standards.
153
- syncEmployeeStandards(tmpDir, projectRoot, detected);
170
+ // installation, not standards. CLAUDE.md wrapper is gated on the
171
+ // claude editor's command-artifact authorization.
172
+ syncEmployeeStandards(tmpDir, projectRoot, hasCommandArtifacts(projectRoot, claudeAdapter));
154
173
  rmSync(tmpDir, { recursive: true, force: true });
155
174
  console.log(chalk.green(" ✓ Commands & templates updated to latest"));
156
175
  }
@@ -159,7 +178,12 @@ export async function update(options) {
159
178
  console.log(chalk.yellow(` ⚠ Failed to update from npm: ${msg}`));
160
179
  console.log(chalk.gray(" Trying npm install to pull latest version..."));
161
180
  try {
162
- await execFileAsync("npm", ["install", "-g", "openspec-playwright@latest"], { timeout: 120000, cwd: projectRoot, stdio: "inherit", shell: needsShell });
181
+ await execFileAsync("npm", ["install", "-g", "openspec-playwright@latest"], {
182
+ timeout: 120000,
183
+ cwd: projectRoot,
184
+ stdio: "inherit",
185
+ shell: needsShell,
186
+ });
163
187
  console.log(chalk.green(" ✓ Updated via npm install"));
164
188
  }
165
189
  catch (err2) {
@@ -176,7 +200,7 @@ export async function update(options) {
176
200
  console.log(chalk.blue("\n─── Standards Sync ───"));
177
201
  try {
178
202
  const tmpDir = await fetchLatestBundle();
179
- syncEmployeeStandards(tmpDir, projectRoot, detectAdapters(projectRoot));
203
+ syncEmployeeStandards(tmpDir, projectRoot, hasCommandArtifacts(projectRoot, claudeAdapter));
180
204
  rmSync(tmpDir, { recursive: true, force: true });
181
205
  }
182
206
  catch (err) {
@@ -184,25 +208,44 @@ export async function update(options) {
184
208
  console.log(chalk.yellow(` ⚠ Standards sync failed: ${msg}`));
185
209
  }
186
210
  }
187
- // 2b. Install Playwright MCP if not present (per detected editor)
211
+ // 2b. Install the Playwright test-runner MCP for each authorized editor
212
+ // (tool-owned command artifacts exist). Single project-scoped server
213
+ // matching the official `playwright init-agents` layout: `playwright-test`
214
+ // exposes both browser_* tools and the test_run/test_debug/test_list
215
+ // workflow tools. Frontend gate mirrors init — API-only projects don't
216
+ // need the browser MCP (the skip is announced, not silent). Unauthorized
217
+ // editors are skipped: MCP config files (e.g. .omp/mcp.json) are never
218
+ // created out of thin air.
188
219
  if (options.mcp !== false) {
189
- const mcpEditors = detectAdapters(projectRoot);
190
- if (mcpEditors.length > 0) {
191
- console.log(chalk.blue("\n─── Installing Playwright MCP ───"));
192
- for (const adapter of mcpEditors) {
193
- if (isPlaywrightMcpInstalled(adapter)) {
194
- console.log(chalk.green(` ✓ ${adapter.label}: Playwright MCP already installed`));
195
- continue;
196
- }
197
- try {
198
- ensurePlaywrightMcp(adapter);
199
- if (adapter.supportsMcp !== false) {
200
- console.log(chalk.gray(` (Restart ${adapter.label} to activate)`));
220
+ if (hasFrontendSignal(projectRoot) !== true) {
221
+ console.log(chalk.gray(" - No frontend signal detected — skipping Playwright MCP (API tests use the request fixture)"));
222
+ }
223
+ else {
224
+ const authorized = getAllAdapters().filter((a) => hasCommandArtifacts(projectRoot, a));
225
+ if (authorized.length === 0) {
226
+ console.log(chalk.gray(' - No openspec-pw artifacts in this project — run "openspec-pw init" to set up the Playwright MCP'));
227
+ }
228
+ else {
229
+ console.log(chalk.blue("\n─── Installing Playwright MCP ───"));
230
+ for (const adapter of getAllAdapters()) {
231
+ if (!hasCommandArtifacts(projectRoot, adapter)) {
232
+ console.log(chalk.gray(` - ${adapter.label}: not configured in this project (run "openspec-pw init --tools ${adapter.id}" to add)`));
233
+ continue;
234
+ }
235
+ if (isTestRunnerMcpInstalled(adapter)) {
236
+ console.log(chalk.green(` ✓ ${adapter.label}: Test-runner MCP already installed`));
237
+ continue;
238
+ }
239
+ try {
240
+ ensureTestRunnerMcp(adapter);
241
+ if (adapter.supportsMcp !== false) {
242
+ console.log(chalk.gray(` (Restart ${adapter.label} to activate)`));
243
+ }
244
+ }
245
+ catch {
246
+ console.log(chalk.yellow(` ⚠ ${adapter.label}: Failed to install Test-runner MCP`));
247
+ console.log(chalk.gray(` Install manually (see ${adapter.label} docs).`));
201
248
  }
202
- }
203
- catch {
204
- console.log(chalk.yellow(` ⚠ ${adapter.label}: Failed to install Playwright MCP`));
205
- console.log(chalk.gray(` Install manually (see ${adapter.label} docs).`));
206
249
  }
207
250
  }
208
251
  }
@@ -216,7 +259,7 @@ export async function update(options) {
216
259
  // devDependency in the user's package.json shadowing the global
217
260
  // CLI binary. See Node module resolution rules.
218
261
  await checkVersionShadow();
219
- const editorsForHint = detectAdapters(projectRoot);
262
+ const editorsForHint = getAllAdapters().filter((a) => hasCommandArtifacts(projectRoot, a));
220
263
  if (editorsForHint.length > 0) {
221
264
  const labels = editorsForHint.map((a) => a.displayName).join(" + ");
222
265
  console.log(chalk.bold(`\n Restart ${labels} to use the updated commands.`));
@@ -295,7 +338,11 @@ async function fetchLatestBundle() {
295
338
  .sort((a, b) => b.mtime - a.mtime);
296
339
  if (tgzFiles.length === 0)
297
340
  throw new Error("No tarball found");
298
- await tar.extract({ file: join(tmpDir, tgzFiles[0].name), cwd: tmpDir, strip: 1 });
341
+ await tar.extract({
342
+ file: join(tmpDir, tgzFiles[0].name),
343
+ cwd: tmpDir,
344
+ strip: 1,
345
+ });
299
346
  return tmpDir;
300
347
  }
301
348
  /**
@@ -304,37 +351,40 @@ async function fetchLatestBundle() {
304
351
  * under `--no-skill` — standards sync is not a skill install and must not be
305
352
  * silently skipped by that flag.
306
353
  */
307
- export function syncEmployeeStandards(tmpDir, projectRoot, detected) {
354
+ export function syncEmployeeStandards(tmpDir, projectRoot, claudeAuthorized) {
308
355
  // Update employee-grade standards in project rules files (AGENTS.md + CLAUDE.md).
309
356
  // Drift-aware: only rewrite a rules file when its OPENSPEC block differs
310
357
  // from the bundled template; matching content is left untouched (no mtime
311
- // change). AGENTS.md is the SSOT (always written by installProjectRules);
312
- // CLAUDE.md is the Claude wrapper (only written when Claude is detected).
358
+ // change). 标记即领土, judged per artifact: AGENTS.md is only maintained
359
+ // when it already carries the tool-owned OPENSPEC block a missing file
360
+ // or one without markers is NOT created/appended here (run
361
+ // `openspec-pw init` to install). The CLAUDE.md wrapper is gated on the
362
+ // claude editor's command-artifact authorization, not its own markers.
313
363
  const standardsSrc = join(tmpDir, "employee-standards.md");
314
364
  if (!existsSync(standardsSrc))
315
365
  return;
316
366
  const standards = readFileSync(standardsSrc, "utf-8");
317
- if (detected.length === 0) {
318
- console.log(chalk.gray(" - No supported editor (.claude, .opencode, .cline, .cursor, .pi, .omp, or .dsh) found, skipping standards sync"));
319
- return;
320
- }
321
- // AGENTS.md is the single source of truth and is always written by
322
- // installProjectRules regardless of which editors are detected — so it
323
- // is always checked here (covers claude-only projects). A present file
324
- // with no OPENSPEC marker needs the block appended (tool-owned).
325
367
  const agentsPath = join(projectRoot, "AGENTS.md");
326
- let agentsStale = !existsSync(agentsPath);
327
- if (!agentsStale) {
368
+ let agentsStale = false;
369
+ let agentsInTerritory = false;
370
+ if (!existsSync(agentsPath)) {
371
+ console.log(chalk.gray(' - AGENTS.md not found — run "openspec-pw init" to install employee standards'));
372
+ }
373
+ else {
328
374
  const fileContent = readFileSync(agentsPath, "utf-8");
329
- agentsStale =
330
- !fileContent.includes(OPENSPEC_START) ||
331
- compareBlock(fileContent, standards).stale;
375
+ if (!fileContent.includes(OPENSPEC_START)) {
376
+ console.log(chalk.gray(' - AGENTS.md has no OPENSPEC block — run "openspec-pw init" to install employee standards'));
377
+ }
378
+ else {
379
+ agentsInTerritory = true;
380
+ agentsStale = compareBlock(fileContent, standards).stale;
381
+ }
332
382
  }
333
- // CLAUDE.md wrapper is only written when Claude is detected. A bare
334
- // `@AGENTS.md` import without markers is left untouched (added by the
335
- // openspec CLI or the user) — not stale.
383
+ // CLAUDE.md wrapper is only maintained when the claude editor is
384
+ // authorized. A bare `@AGENTS.md` import without markers is left
385
+ // untouched (added by the openspec CLI or the user) — not stale.
336
386
  let claudeStale = false;
337
- if (detected.some((a) => a.id === "claude")) {
387
+ if (claudeAuthorized) {
338
388
  const claudePath = join(projectRoot, "CLAUDE.md");
339
389
  // A symlinked CLAUDE.md (→ AGENTS.md, the official reuse pattern)
340
390
  // is what Claude Code reads; the AGENTS.md check above already
@@ -359,12 +409,16 @@ export function syncEmployeeStandards(tmpDir, projectRoot, detected) {
359
409
  }
360
410
  }
361
411
  }
362
- const anyStale = agentsStale || claudeStale;
363
- if (anyStale) {
412
+ if (agentsStale || claudeStale) {
364
413
  console.log(chalk.gray(" 检测到非模板内容将被覆盖 — OPENSPEC block differs from bundled version"));
365
- installProjectRules(projectRoot, standards, detected);
414
+ if (agentsStale) {
415
+ installOpenSpecBlock(projectRoot, standards, opencodeAdapter);
416
+ }
417
+ if (claudeStale) {
418
+ installClaudeWrapper(projectRoot);
419
+ }
366
420
  }
367
- else {
421
+ else if (agentsInTerritory) {
368
422
  console.log(chalk.green(" ✓ employee-grade standards already in sync"));
369
423
  }
370
424
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export { SHARED_FILE_NAMES, TIMEOUT } from "./constants.js";
2
- export { isPlaywrightMcpInstalled, ensurePlaywrightMcp, removePlaywrightMcp, } from "./mcp.js";
2
+ export { removePlaywrightMcp, TEST_RUNNER_MCP_SERVER, isTestRunnerMcpInstalled, ensureTestRunnerMcp, removeTestRunnerMcp, } from "./mcp.js";
3
3
  export { needsShell } from "./platform.js";
4
4
  export { detectCodeGraphStatus, codegraphHintLines } from "./codegraph.js";
5
5
  export type { CodeGraphStatus } from "./codegraph.js";
@@ -1,5 +1,5 @@
1
1
  export { SHARED_FILE_NAMES, TIMEOUT } from "./constants.js";
2
- export { isPlaywrightMcpInstalled, ensurePlaywrightMcp, removePlaywrightMcp, } from "./mcp.js";
2
+ export { removePlaywrightMcp, TEST_RUNNER_MCP_SERVER, isTestRunnerMcpInstalled, ensureTestRunnerMcp, removeTestRunnerMcp, } from "./mcp.js";
3
3
  export { needsShell } from "./platform.js";
4
4
  export { detectCodeGraphStatus, codegraphHintLines } from "./codegraph.js";
5
5
  export { detectAppServer, findNpmRoot, chooseDevScript, parsePort, hasFrontendSignal, } from "./app-detect.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EACL,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EACL,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
@@ -13,6 +13,9 @@ export declare function isMcpInstalled(adapter: EditorAdapter, serverName: strin
13
13
  export declare function ensureMcp(adapter: EditorAdapter, serverName: string, command: string[]): void;
14
14
  /** Remove an MCP server from this editor. Does not throw if missing. */
15
15
  export declare function removeMcp(adapter: EditorAdapter, serverName: string): void;
16
- export declare function isPlaywrightMcpInstalled(adapter: EditorAdapter): boolean;
17
- export declare function ensurePlaywrightMcp(adapter: EditorAdapter): void;
16
+ /** Official test-runner MCP server — bundled `playwright` CLI subcommand. */
17
+ export declare const TEST_RUNNER_MCP_SERVER = "playwright-test";
18
18
  export declare function removePlaywrightMcp(adapter: EditorAdapter): void;
19
+ export declare function isTestRunnerMcpInstalled(adapter: EditorAdapter): boolean;
20
+ export declare function ensureTestRunnerMcp(adapter: EditorAdapter): void;
21
+ export declare function removeTestRunnerMcp(adapter: EditorAdapter): void;
@@ -42,14 +42,22 @@ export function removeMcp(adapter, serverName) {
42
42
  }
43
43
  }
44
44
  // ─── Playwright MCP conveniences ────────────────────────────────────────
45
- const PLAYWRIGHT_MCP_COMMAND = ["npx", "@playwright/mcp@latest"];
46
- export function isPlaywrightMcpInstalled(adapter) {
47
- return isMcpInstalled(adapter, "playwright");
48
- }
49
- export function ensurePlaywrightMcp(adapter) {
50
- ensureMcp(adapter, "playwright", PLAYWRIGHT_MCP_COMMAND);
51
- }
45
+ /** Official test-runner MCP server — bundled `playwright` CLI subcommand. */
46
+ export const TEST_RUNNER_MCP_SERVER = "playwright-test";
47
+ const TEST_RUNNER_MCP_COMMAND = ["npx", "playwright", "run-test-mcp-server"];
48
+ // Kept for backward compatibility with projects that still have a
49
+ // legacy `@playwright/mcp` entry from older openspec-pw versions — uninstall
50
+ // uses this to clean the stale entry out of the project's mcp config.
52
51
  export function removePlaywrightMcp(adapter) {
53
52
  removeMcp(adapter, "playwright");
54
53
  }
54
+ export function isTestRunnerMcpInstalled(adapter) {
55
+ return isMcpInstalled(adapter, TEST_RUNNER_MCP_SERVER);
56
+ }
57
+ export function ensureTestRunnerMcp(adapter) {
58
+ ensureMcp(adapter, TEST_RUNNER_MCP_SERVER, TEST_RUNNER_MCP_COMMAND);
59
+ }
60
+ export function removeTestRunnerMcp(adapter) {
61
+ removeMcp(adapter, TEST_RUNNER_MCP_SERVER);
62
+ }
55
63
  //# sourceMappingURL=mcp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/shared/mcp.ts"],"names":[],"mappings":"AAUA,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,OAAsB,EAAE,UAAkB;IACvE,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CACvB,OAAsB,EACtB,UAAkB,EAClB,OAAiB;IAEjB,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CACT,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,uFAAuF,CAC3H,CAAC;QACF,OAAO;IACT,CAAC;IACD,IAAI,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,wBAAwB,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,gBAAgB,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,uBAAuB,UAAU,MAAM,CAAC,CAAC;QAC1E,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,SAAS,CAAC,OAAsB,EAAE,UAAkB;IAClE,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,wCAAwC,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,wCAAwC,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,cAAc,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,sBAAsB,UAAU,MAAM,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,2EAA2E;AAE3E,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAEjE,MAAM,UAAU,wBAAwB,CAAC,OAAsB;IAC7D,OAAO,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/shared/mcp.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
 
7
7
  **约定**:动手前先读 `openspec/config.yaml`(技术栈、结构、约定、约束等),无内容则忽略。
8
8
 
9
- **语言**:用中文回复用户。
9
+ **OpenSpec 命令**:跑 `npx openspec --help` 查看可用命令。
10
10
 
11
11
  **优先级决策规则**:🔴 CRITICAL(违反→静默 bug / 安全漏洞,必须修正)→ **停下确认后再执行**|🟡 IMPORTANT(偏离需说明理由)→ **谨慎执行,偏离说明原因**|⚪ STANDARD(标准实践,可调整)→ 按标准执行
12
12
 
@@ -14,25 +14,20 @@
14
14
 
15
15
  ## 1. 代码质量
16
16
 
17
- > WHY:AI 默认倾向多写、快写、猜写。本节约束将这些倾向转化为可验证的生产代码。
17
+ > WHY:AI 默认倾向多写、快写、猜写——本节把倾向转化为可验证的生产代码。
18
18
 
19
19
  **DO**
20
- - 🔴 **lint + typecheck 每次编辑后自动执行,通过才算成功**。扫源码扩展名判断主语言:.ts/.tsx→ESLint+tsc、.py→ruff+mypy、.go→gofmt+vet 等。工具不存在时告知用户,不假装跑过
20
+ - 🔴 **lint + typecheck 每次编辑后自动执行,通过才算成功**。扫源码扩展名判断主语言:.ts/.tsx→ESLint+tsc、.py→ruff+mypy、.go→gofmt+vet 等;失败时先跑对应语言 auto-fix(如 `npm run lint:fix`)再重跑 gate。工具不存在时告知用户,不假装跑过
21
21
  - 🟡 不隐藏任何 gate 失败结果——lint / typecheck / test 任一失败时,完整输出错误日志并停止,不继续后续步骤
22
- - 未执行的检查步骤明确标注「未运行」,不暗示已通过
23
- - 🟡 需求理解不清或存在可见风险时,先停下来提问,不直接执行。偏离标准实践需说明理由
24
- - 🟡 动手前列假设 → 逐条验证。有不清→停下来,说出困惑,再提问
22
+ - 🟡 未执行的检查步骤明确标注「未运行」,不暗示已通过
23
+ - 🟡 需求理解不清或存在可见风险时,先停下来提问,不直接执行;动手前列假设 → 逐条验证,有不清再提问
25
24
  - 🟡 多解释则全列,更简单方案则提出并坚持
26
25
  - 🟡 多步任务先列计划(`1. [Step] → verify: [check]`),循环验证直到成功
27
- - 🟡 lint 失败时优先运行对应语言的 auto-fix(如 `npm run lint:fix` / `ruff format .` / `go fmt ./...`)
28
26
  - 🟡 只写被要求的:不加"灵活"、"可配置"、单次使用抽象、未要求功能。200行能50行则重写
29
27
  - 🔴 过时的直接删:删除/修改时不留兼容层、不写迁移、不留 fallback
30
- - 🟡 优先用成熟、有人维护的库,没有明确理由别自己重写
31
- - 🟡 选型前先翻项目已有依赖能做什么,再加新包或自己写
32
- - 🟡 同类问题先用成熟产品验证过的模式解决,不从零发明
33
- - 🟡 精准改动:只改必要的,改完清理自己造成的垃圾。匹配现有风格
28
+ - 🔴 方案选型按优先级链:项目已有依赖 → 成熟有人维护的库 → 自己实现(没有明确理由不从零发明);同类问题先用成熟产品验证过的模式解决
29
+ - 🟡 精准改动:只改必要的,改完清理自己造成的垃圾(未使用的 import/export/prop/console.log 等;清理与重构分开提交)。匹配现有风格
34
30
  - 🟡 代码文件行数上限 1500:超过即违例,必须按职责拆分,不得继续堆叠
35
- - ⚪ 重构前清理未使用的 import/export/prop/console.log 等,单独提交再做重构
36
31
 
37
32
  **DO NOT**
38
33
  - 不写只适配特定输入值的逻辑 → 上游格式变化即失效
@@ -53,24 +48,20 @@
53
48
 
54
49
  ## 2. 工具使用
55
50
 
56
- > WHY:工具使用方式直接影响搜索覆盖面和结果准确性。
57
-
58
51
  **工具调用纪律(防循环)🔴**
59
52
  - 🔴 一次只发一个工具调用,等结果再决定下一步;等待/轮询用单个调用内部的循环实现
60
53
  - 🔴 单条消息并行只用于真正独立的调用,禁止复制相同调用
61
54
  - 🔴 发现自己正在重复生成相同调用 → 立即停止,重新评估
62
- - 🟡 长会话接近上下文上限时,复杂任务前先压缩上下文(如 /compact)
55
+ - 🟡 长会话接近上下文上限时,复杂任务前先压缩上下文
63
56
 
64
57
  **DO**
65
58
  - 🟡 搜索分层:结构性问题(定义/调用/影响/流)优先用 CodeGraph;字面文本用全文搜索;文件名模式用文件名匹配。跳过依赖目录和缓存目录(调试依赖时除外),搜子目录时按需缩小
66
59
  - 🟡 重命名覆盖:调用、类型、字符串、import、barrel file、测试 mock,不得假设一次覆盖
67
- - 🟡 联网调研优先 agent-reach skill
68
- - 🟡 涉及前端 UI 设计时,按序使用:frontend-design skill 定方向 → ui-ux-pro-max skill 选风格 → web-design-guidelines skill 审查,三步组合避免"千篇一律 AI 风"
69
60
  - 🟡 编辑 → 重新读取确认 → 跑 §1 的 lint+typecheck → 任一失败则回退
70
61
  - 🟡 变更完成告知用户可能遗漏区域,提示人工复查
71
62
 
72
63
  **DO NOT**
73
- - 🔴 禁止用 sed/awk/node -e/python -c 等管道命令改源码文件(跳过编辑工具验证层)
64
+ - 🔴 禁止用 sed/awk/node -e/python -c 等管道命令改写项目内已有文件——源码/文档/测试/配置同算(跳过编辑工具验证层);确需批量改写,先征得用户同意
74
65
  - 不主动推送,除非用户明确要求
75
66
 
76
67
  **REQUIRE**
@@ -81,23 +72,12 @@
81
72
 
82
73
  ## 3. 大规模任务
83
74
 
84
- > WHY:200+ 行直接修改缺乏评审,OpenSpec 工作流强制提案→设计→评审→实现。
75
+ > WHY:200+ 行直接修改缺乏评审。
85
76
 
86
77
  - 🔴 200+ 行修改或架构变更(新增服务/API 契约/数据模型重构)必须走 OpenSpec(`/opsx:propose`),禁止直接修改
87
78
  - 🟡 新功能先跑通最小端到端路径,再增量扩展;不为未完成的复杂度拆掉能跑的代码
88
79
  - 🟡 架构决策往长了做:不接受"先这样以后再换"的临时方案
89
-
90
- ### 工作流参考
91
-
92
- | 阶段 | 命令 | 退出条件 |
93
- |------|------|---------|
94
- | 提案 | `/opsx:propose` | proposal + scenarios 生成 |
95
- | 实现 | `/opsx:apply` | lint + typecheck 通过 |
96
- | 自审 | `/opsx:verify` | 实现匹配 design,无遗漏 |
97
- | E2E | `/opsx:e2e` / `/opsx-e2e` | 测试生成 + Healer 验证通过 |
98
- | 归档 | `/opsx:archive` | specs 更新,归档完成 |
99
-
100
- 所有阶段由用户手动触发,**AI 不自动进入下一阶段**。
80
+ - 🔴 所有阶段由用户手动触发,**AI 不自动进入下一阶段**(提案 `/opsx:propose` → 实现 `/opsx:apply` → 自审 `/opsx:verify` → E2E `/opsx:e2e` → 归档 `/opsx:archive`)
101
81
 
102
82
  ---
103
83
 
@@ -122,30 +102,29 @@
122
102
 
123
103
  ## 5. 临时文件管理
124
104
 
125
- > WHY:临时文件散落在项目根目录而非集中存放,会在 commit 时被意外加入版本控制(导致仓库膨胀),或积累到难以清理(占用磁盘空间)。本节建立可自动化管理协议,避免这两类问题。
126
-
127
- **DO**
128
- - 🟡 非源码临时文件(截图、日志、heapdump 等)放项目根 `tmp/` 下
129
- - 🟡 文件名含时间戳(如 `screenshot-20260721T143000.png`)以避免冲突和重复
130
- - ⚪ 平铺存放,不分子目录,简化清理脚本
131
-
132
- **DO NOT**
133
- - 🔴 禁止将临时文件提交到版本控制(确保 `.gitignore` 包含 `tmp/`)
134
-
135
- **REQUIRE**
136
- - 🟡 超 24 小时的文件应在 commit 前删除
137
- - ⚪ 文件命名遵循项目所在语言/框架的约定(如 JS/Go 用 kebab-case,Python/Rust 用 snake_case,Java 用 PascalCase),避免空格和特殊字符
105
+ - 🟡 非源码临时文件(截图、日志、heapdump 等)放项目根 `tmp/` 下,文件名含时间戳(如 `screenshot-20260721T143000.png`)
106
+ - 🔴 禁止将临时文件提交到版本控制(确保 `.gitignore` 包含 `tmp/`);超 24 小时的临时文件在 commit 前删除
138
107
 
139
108
  ---
140
109
 
141
- ## 6. 浏览器验证证据链
110
+ ## 6. 测试与验证策略
142
111
 
143
- > WHY:截图证明像素,不证明行为。改用户可见可交互的东西,验证必须真的发生,不靠「代码看起来对」。
112
+ > WHY:测试的价值在验证行为,不在覆盖率数字;截图证明像素,不证明行为。AI 用琐碎单测堆数量冒充完成度——生成烧 token、套件拖慢反馈,验收结果才决定能否交付。
144
113
 
145
114
  **触发:改了用户可见可交互的东西,就必须在浏览器里证明**
146
- - 🔴 改 DOM/交互/跳转/异步渲染/样式/响应式,或守卫/权限/多角色可见性 → 浏览器验证(权限类必须真实登录态);纯逻辑 → unit,不开浏览器
115
+ - 🔴 改 DOM/交互/跳转/异步渲染/样式/响应式,或守卫/权限/多角色可见性 → 浏览器验证(权限类必须真实登录态);纯逻辑 → 按下方单测取舍,不开浏览器
116
+
117
+ **单测——命中才测,宁缺毋滥**
118
+ - 🟡 值得单测:业务核心计算/状态转换、含分支的纯函数、边界与错误处理路径、被多处复用的工具、修过 bug 的回归。不值得:纯透传、getter/装饰器/样板、类型系统已保证的行为、框架自带行为;模糊地带默认测(漏测代价 > 多测代价),一个行为一组断言,不拆场景凑数
119
+ - 🔴 验收标准点名的行为与业务核心逻辑必须被某层测试覆盖(单测或验收测试,一层即可,不重复堆);不以本条为由跳过/删除既有测试
120
+ - 🟡 分层反馈预期:单测改完随手跑(秒级量级);验收测试提交前实跑(见下方交付,分钟级可接受)
121
+
122
+ **验收——对照 spec 验收标准的真实行为验证,层级由被验对象决定**
123
+ - 🔴 后端/服务 → 对真实运行的服务发真实请求验证契约与端到端行为,不以全 mock 的单测链冒充验收;验收落成集成测试,提交前实跑
124
+ - 🔴 前端/用户可见 → 浏览器自检 + Playwright 交付测试(见下方 A/B)
125
+ - 🟡 集成测试用真实数据/依赖(seed/fixture,遵守 §4);期望锚定 spec 写「预期 X,实测 Y」(同下方自检 A),不自定期望
147
126
 
148
- **A. 自检(开发中 AI 验证,不留测试代码)**
127
+ **A. 自检(浏览器,开发中 AI 验证,不留测试代码)**
149
128
  - 🔴 截图 ≠ 行为验证:交互必须验证结果(点击后的状态/跳转/渲染),仅截图不算通过
150
129
  - 🟡 验证前核对加载的是本次产物(清缓存/停用 SW/核 hash)——跑旧包验证作废
151
130
  - 🟡 权限类禁止注入 token(守卫未执行,验证作废);多角色各角色单独登录验证
@@ -158,4 +137,4 @@
158
137
  - 🟡 提交前实跑测试,通过才算完成;未运行不视为完成
159
138
  - 🟡 无法覆盖的路径说明理由;skip/fixme 必附理由
160
139
  - 🟡 稳定选择器(data-testid/role);Healer 只消 flaky,不得掩盖断言失败
161
- - 🔴 含断言的临时脚本转正为 Playwright 测试或删除
140
+ - 🔴 含断言的临时脚本转正为对应层级的测试(浏览器→Playwright、服务→API 集成测试)或删除
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openspec-playwright",
3
- "version": "0.3.74",
3
+ "version": "0.3.76",
4
4
  "description": "OpenSpec + Playwright E2E verification setup tool for Claude Code, OpenCode, Cline, and Cursor",
5
5
  "type": "module",
6
6
  "bin": {