openspec-playwright 0.1.62 → 0.1.64

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 (55) hide show
  1. package/.claude/commands/CLAUDE.md +12 -0
  2. package/.claude/commands/opsx/CLAUDE.md +12 -0
  3. package/.claude/commands/opsx/e2e-body.md +5 -0
  4. package/.claude/commands/opsx/e2e.md +5 -1
  5. package/.claude/skills/CLAUDE.md +12 -0
  6. package/.claude/skills/openspec-e2e/CLAUDE.md +14 -0
  7. package/.claude/skills/openspec-e2e/SKILL.md +101 -77
  8. package/LICENSE +21 -0
  9. package/README.md +4 -3
  10. package/README.zh-CN.md +4 -3
  11. package/bin/CLAUDE.md +11 -0
  12. package/dist/CLAUDE.md +17 -0
  13. package/dist/commands/doctor.d.ts +4 -1
  14. package/dist/commands/doctor.js +110 -73
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/editors.js +149 -95
  17. package/dist/commands/editors.js.map +1 -1
  18. package/dist/commands/init.js +105 -97
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/mcpSync.js +46 -31
  21. package/dist/commands/mcpSync.js.map +1 -1
  22. package/dist/commands/run.d.ts +13 -0
  23. package/dist/commands/run.js +74 -51
  24. package/dist/commands/run.js.map +1 -1
  25. package/dist/commands/uninstall.d.ts +1 -0
  26. package/dist/commands/uninstall.js +133 -0
  27. package/dist/commands/uninstall.js.map +1 -0
  28. package/dist/commands/update.js +79 -68
  29. package/dist/commands/update.js.map +1 -1
  30. package/dist/index.js +33 -26
  31. package/dist/index.js.map +1 -1
  32. package/employee-standards.md +3 -3
  33. package/package.json +21 -1
  34. package/schemas/playwright-e2e/templates/playwright.config.ts +22 -22
  35. package/templates/CLAUDE.md +15 -0
  36. package/templates/seed.spec.ts +5 -3
  37. package/.github/workflows/release.yml +0 -81
  38. package/docs/plans/2026-03-26-openspec-playwright-design.md +0 -180
  39. package/openspec/schemas/playwright-e2e/schema.yaml +0 -56
  40. package/openspec/schemas/playwright-e2e/templates/e2e-test.ts +0 -55
  41. package/openspec/schemas/playwright-e2e/templates/playwright.config.ts +0 -52
  42. package/openspec/schemas/playwright-e2e/templates/report.md +0 -27
  43. package/openspec/schemas/playwright-e2e/templates/test-plan.md +0 -24
  44. package/openspec-playwright-0.1.62.tgz +0 -0
  45. package/release-notes.md +0 -5
  46. package/src/commands/doctor.ts +0 -115
  47. package/src/commands/editors.ts +0 -606
  48. package/src/commands/init.ts +0 -252
  49. package/src/commands/mcpSync.ts +0 -160
  50. package/src/commands/run.ts +0 -172
  51. package/src/commands/update.ts +0 -192
  52. package/src/index.ts +0 -47
  53. package/tests/editors.test.ts +0 -180
  54. package/tsconfig.json +0 -18
  55. package/vitest.config.ts +0 -9
@@ -1,110 +1,147 @@
1
- import { existsSync, readFileSync } from 'fs';
2
- import { join } from 'path';
3
- import { homedir } from 'os';
4
- import { execSync } from 'child_process';
5
- import chalk from 'chalk';
6
- export async function doctor() {
7
- console.log(chalk.blue('\nšŸ” OpenSpec + Playwright E2E Prerequisites Check\n'));
1
+ import { existsSync, readFileSync } from "fs";
2
+ import { join } from "path";
3
+ import { homedir } from "os";
4
+ import { execSync } from "child_process";
5
+ import chalk from "chalk";
6
+ export async function doctor(options = {}) {
7
+ const checks = [];
8
8
  const projectRoot = process.cwd();
9
- let allOk = true;
10
9
  // Node.js
11
- console.log(chalk.blue('─── Node.js ───'));
12
10
  try {
13
- const node = execSync('node --version', { encoding: 'utf-8' }).trim();
14
- console.log(chalk.green(` āœ“ Node.js ${node}`));
11
+ const node = execSync("node --version", { encoding: "utf-8" }).trim();
12
+ checks.push({
13
+ category: "Node.js",
14
+ name: "node",
15
+ ok: true,
16
+ message: node,
17
+ });
15
18
  }
16
19
  catch {
17
- console.log(chalk.red(' āœ— Node.js not found'));
18
- allOk = false;
20
+ checks.push({
21
+ category: "Node.js",
22
+ name: "node",
23
+ ok: false,
24
+ message: "not found",
25
+ });
19
26
  }
20
27
  // npm
21
- console.log(chalk.blue('\n─── npm ───'));
22
28
  try {
23
- const npm = execSync('npm --version', { encoding: 'utf-8' }).trim();
24
- console.log(chalk.green(` āœ“ npm ${npm}`));
29
+ const npm = execSync("npm --version", { encoding: "utf-8" }).trim();
30
+ checks.push({
31
+ category: "npm",
32
+ name: "npm",
33
+ ok: true,
34
+ message: npm,
35
+ });
25
36
  }
26
37
  catch {
27
- console.log(chalk.red(' āœ— npm not found'));
28
- allOk = false;
38
+ checks.push({
39
+ category: "npm",
40
+ name: "npm",
41
+ ok: false,
42
+ message: "not found",
43
+ });
29
44
  }
30
45
  // OpenSpec
31
- console.log(chalk.blue('\n─── OpenSpec ───'));
32
- const hasOpenSpec = existsSync(join(projectRoot, 'openspec'));
33
- if (hasOpenSpec) {
34
- console.log(chalk.green(' āœ“ OpenSpec initialized'));
35
- }
36
- else {
37
- console.log(chalk.red(' āœ— OpenSpec not initialized'));
38
- console.log(chalk.gray(' Run: openspec init'));
39
- allOk = false;
40
- }
46
+ const hasOpenSpec = existsSync(join(projectRoot, "openspec"));
47
+ checks.push({
48
+ category: "OpenSpec",
49
+ name: "openspec",
50
+ ok: hasOpenSpec,
51
+ message: hasOpenSpec ? "initialized" : "not initialized",
52
+ });
41
53
  // Playwright browsers
42
- console.log(chalk.blue('\n─── Playwright Browsers ───'));
43
54
  try {
44
- const pw = execSync('npx playwright --version', { encoding: 'utf-8' }).trim();
45
- console.log(chalk.green(` āœ“ Playwright ${pw}`));
55
+ const pw = execSync("npx playwright --version", {
56
+ encoding: "utf-8",
57
+ }).trim();
58
+ checks.push({
59
+ category: "Playwright Browsers",
60
+ name: "playwright",
61
+ ok: true,
62
+ message: pw,
63
+ });
46
64
  }
47
65
  catch {
48
- console.log(chalk.red(' āœ— Playwright browsers not installed'));
49
- console.log(chalk.gray(' Run: npx playwright install --with-deps'));
50
- allOk = false;
51
- }
52
- // Playwright MCP (global)
53
- console.log(chalk.blue('\n─── Playwright MCP ───'));
66
+ checks.push({
67
+ category: "Playwright Browsers",
68
+ name: "playwright",
69
+ ok: false,
70
+ message: "not installed",
71
+ });
72
+ }
73
+ // Playwright MCP
54
74
  const homeDir = homedir();
55
- const claudeJsonPath = join(homeDir, '.claude.json');
75
+ const claudeJsonPath = join(homeDir, ".claude.json");
56
76
  let mcpInstalled = false;
57
77
  if (existsSync(claudeJsonPath)) {
58
78
  try {
59
- const claudeJson = JSON.parse(readFileSync(claudeJsonPath, 'utf-8'));
79
+ const claudeJson = JSON.parse(readFileSync(claudeJsonPath, "utf-8"));
60
80
  const globalMcp = claudeJson?.mcpServers ?? {};
61
81
  const localMcp = claudeJson?.projects?.[projectRoot]?.mcpServers ?? {};
62
- if (globalMcp['playwright'] || localMcp['playwright']) {
82
+ if (globalMcp["playwright"] || localMcp["playwright"]) {
63
83
  mcpInstalled = true;
64
84
  }
65
85
  }
66
86
  catch {
67
- // ignore
87
+ // .claude.json missing or malformed — MCP not configured
68
88
  }
69
89
  }
70
- if (mcpInstalled) {
71
- console.log(chalk.green(' āœ“ Playwright MCP installed globally'));
72
- }
73
- else {
74
- console.log(chalk.red(' āœ— Playwright MCP not configured'));
75
- console.log(chalk.gray(' Run: openspec-pw init'));
76
- allOk = false;
77
- }
90
+ checks.push({
91
+ category: "Playwright MCP",
92
+ name: "playwright-mcp",
93
+ ok: mcpInstalled,
94
+ message: mcpInstalled ? "installed" : "not configured",
95
+ });
78
96
  // Skill
79
- console.log(chalk.blue('\n─── Claude Code Skill ───'));
80
- const hasSkill = existsSync(join(projectRoot, '.claude', 'skills', 'openspec-e2e', 'SKILL.md'));
81
- if (hasSkill) {
82
- console.log(chalk.green(' āœ“ /openspec-e2e skill installed'));
83
- }
84
- else {
85
- console.log(chalk.red(' āœ— Skill not installed'));
86
- console.log(chalk.gray(' Run: openspec-pw init'));
87
- allOk = false;
88
- }
97
+ const hasSkill = existsSync(join(projectRoot, ".claude", "skills", "openspec-e2e", "SKILL.md"));
98
+ checks.push({
99
+ category: "Claude Code Skill",
100
+ name: "skill",
101
+ ok: hasSkill,
102
+ message: hasSkill ? "installed" : "not installed",
103
+ });
89
104
  // Seed test
90
- console.log(chalk.blue('\n─── Seed Test ───'));
91
- const hasSeed = existsSync(join(projectRoot, 'tests', 'playwright', 'seed.spec.ts'));
92
- if (hasSeed) {
93
- console.log(chalk.green(' āœ“ seed.spec.ts found'));
94
- }
95
- else {
96
- console.log(chalk.yellow(' ⚠ seed.spec.ts not found (optional)'));
97
- console.log(chalk.gray(' Run: openspec-pw init'));
105
+ const hasSeed = existsSync(join(projectRoot, "tests", "playwright", "seed.spec.ts"));
106
+ checks.push({
107
+ category: "Seed Test",
108
+ name: "seed",
109
+ ok: hasSeed,
110
+ message: hasSeed ? "found" : "not found (optional)",
111
+ });
112
+ const allOk = checks.filter((c) => !c.ok && c.category !== "Seed Test").length === 0;
113
+ if (options.json) {
114
+ console.log(JSON.stringify({ ok: allOk, checks }, null, 2));
115
+ if (!allOk)
116
+ process.exit(1);
117
+ return;
118
+ }
119
+ // Text output
120
+ console.log(chalk.blue("\nšŸ” OpenSpec + Playwright E2E Prerequisites Check\n"));
121
+ let lastCategory = "";
122
+ for (const check of checks) {
123
+ if (check.category !== lastCategory) {
124
+ console.log(chalk.blue(`─── ${check.category} ───`));
125
+ lastCategory = check.category;
126
+ }
127
+ if (check.ok) {
128
+ console.log(chalk.green(` āœ“ ${check.name}: ${check.message}`));
129
+ }
130
+ else if (check.category === "Seed Test") {
131
+ console.log(chalk.yellow(` ⚠ ${check.name}: ${check.message}`));
132
+ }
133
+ else {
134
+ console.log(chalk.red(` āœ— ${check.name}: ${check.message}`));
135
+ }
98
136
  }
99
- // Summary
100
- console.log(chalk.blue('\n─── Summary ───'));
137
+ console.log(chalk.blue("\n─── Summary ───"));
101
138
  if (allOk) {
102
- console.log(chalk.green(' āœ… All prerequisites met!\n'));
103
- console.log(chalk.gray(' Run: /opsx:e2e <change-name> in Claude Code\n'));
139
+ console.log(chalk.green(" āœ… All prerequisites met!\n"));
140
+ console.log(chalk.gray(" Run: /opsx:e2e <change-name> in Claude Code\n"));
104
141
  }
105
142
  else {
106
- console.log(chalk.red(' āŒ Some prerequisites are missing\n'));
107
- console.log(chalk.gray(' Run: openspec-pw init to fix\n'));
143
+ console.log(chalk.red(" āŒ Some prerequisites are missing\n"));
144
+ console.log(chalk.gray(" Run: openspec-pw init to fix\n"));
108
145
  process.exit(1);
109
146
  }
110
147
  }
@@ -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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"}