openspec-playwright 0.1.20 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@ A setup tool that integrates OpenSpec's spec-driven development with Playwright'
7
7
  ## Install
8
8
 
9
9
  ```bash
10
- npm install -g https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz
10
+ npm install -g openspec-playwright
11
11
  ```
12
12
 
13
13
  ## Setup
package/README.zh-CN.md CHANGED
@@ -7,7 +7,7 @@
7
7
  ## 安装
8
8
 
9
9
  ```bash
10
- npm install -g https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz
10
+ npm install -g openspec-playwright
11
11
  ```
12
12
 
13
13
  ## 初始化
@@ -3,42 +3,45 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync, } from 'fs';
3
3
  import { join } from 'path';
4
4
  import chalk from 'chalk';
5
5
  const SKILL_SRC = new URL('../../.claude/skills/openspec-e2e', import.meta.url).pathname;
6
- const CMD_SRC = new URL('../../.claude/commands/opsx/e2e.md', import.meta.url).pathname;
6
+ const CMD_SRC = new URL('../../.claude/commands/opsx', import.meta.url).pathname;
7
7
  const SCHEMA_DIR = new URL('../../schemas', import.meta.url).pathname;
8
8
  export async function update(options) {
9
9
  console.log(chalk.blue('\n🔄 Updating OpenSpec + Playwright E2E\n'));
10
10
  const projectRoot = process.cwd();
11
- // 1. Update CLI tool (from git latest, not npm)
11
+ // 1. Update CLI tool from npm
12
12
  if (options.cli !== false) {
13
13
  console.log(chalk.blue('─── Updating CLI ───'));
14
14
  try {
15
- execSync('npm install -g https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz', { stdio: 'inherit' });
16
- console.log(chalk.green(' ✓ CLI updated to latest commit'));
15
+ execSync('npm install -g openspec-playwright', { stdio: 'inherit', cwd: projectRoot });
16
+ console.log(chalk.green(' ✓ CLI updated via npm'));
17
17
  }
18
18
  catch {
19
- console.log(chalk.yellow(' ⚠ Failed to update CLI'));
20
- console.log(chalk.gray(' Run manually: npm install -g https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz'));
19
+ console.log(chalk.yellow(' ⚠ Failed to update CLI via npm'));
20
+ console.log(chalk.gray(' Run manually: npm install -g openspec-playwright'));
21
21
  }
22
22
  }
23
- // 2. Update skill and command from git tarball (latest commit, not npm package)
23
+ // 2. Update skill and command from npm tarball
24
24
  if (options.skill !== false) {
25
25
  console.log(chalk.blue('\n─── Updating Skill & Command ───'));
26
26
  try {
27
- // Download tarball to temp file and extract
28
- const tmpSkill = '/tmp/openspec-e2e-skill.tar.gz';
27
+ // Download npm tarball and extract
29
28
  const tmpDir = '/tmp/openspec-e2e-update';
30
- execSync(`curl -sL https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz -o ${tmpSkill}`, { stdio: 'pipe' });
31
- // Clean and re-extract to avoid stale files from previous runs
32
- execSync(`rm -rf ${tmpDir} && mkdir -p ${tmpDir} && tar -xzf ${tmpSkill} -C ${tmpDir} --strip-components=1`, { stdio: 'pipe' });
33
- const skillSrc = `${tmpDir}/.claude/skills/openspec-e2e/SKILL.md`;
34
- const cmdSrc = `${tmpDir}/.claude/commands/opsx/e2e.md`;
35
- const schemaSrc = `${tmpDir}/schemas/playwright-e2e`;
29
+ execSync(`rm -rf ${tmpDir} && mkdir -p ${tmpDir}`, { stdio: 'pipe', cwd: projectRoot });
30
+ execSync(`npm pack openspec-playwright --pack-destination ${tmpDir}`, { stdio: 'pipe', cwd: projectRoot });
31
+ const tarball = execSync(`ls -t ${tmpDir}/openspec-playwright-*.tgz | head -1`, { encoding: 'utf-8', cwd: projectRoot }).trim();
32
+ // Move tarball out before extracting to avoid "overwrite archive" error
33
+ const tmpTarball = `${tmpDir}/package.tgz`;
34
+ execSync(`mv "${tarball}" "${tmpTarball}"`, { stdio: 'pipe', cwd: projectRoot });
35
+ execSync(`tar -xzf "${tmpTarball}" -C ${tmpDir} --strip-components=1`, { stdio: 'pipe', cwd: projectRoot });
36
+ const skillSrc = join(tmpDir, '.claude', 'skills', 'openspec-e2e', 'SKILL.md');
37
+ const cmdSrc = join(tmpDir, '.claude', 'commands', 'opsx', 'e2e.md');
38
+ const schemaSrc = join(tmpDir, 'schemas', 'playwright-e2e');
36
39
  installSkillFrom(skillSrc, cmdSrc, schemaSrc, projectRoot);
37
40
  console.log(chalk.green(' ✓ Skill & command updated to latest'));
38
41
  }
39
42
  catch {
40
- console.log(chalk.yellow(' ⚠ Failed to update skill/command from git'));
41
- console.log(chalk.gray(' Running from npm package instead...'));
43
+ console.log(chalk.yellow(' ⚠ Failed to update skill/command from npm'));
44
+ console.log(chalk.gray(' Falling back to local files...'));
42
45
  installSkill(projectRoot);
43
46
  }
44
47
  }
@@ -49,7 +52,7 @@ export async function update(options) {
49
52
  console.log(chalk.gray(' Then run /opsx:e2e <change-name> to verify.\n'));
50
53
  }
51
54
  function installSkill(projectRoot) {
52
- installSkillFrom(SKILL_SRC, CMD_SRC, SCHEMA_DIR + '/playwright-e2e', projectRoot);
55
+ installSkillFrom(join(SKILL_SRC, 'SKILL.md'), join(CMD_SRC, 'e2e.md'), join(SCHEMA_DIR, 'playwright-e2e'), projectRoot);
53
56
  }
54
57
  function installSkillFrom(skillSrc, cmdSrc, schemaSrc, projectRoot) {
55
58
  const skillDir = join(projectRoot, '.claude', 'skills', 'openspec-e2e');
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,GACV,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,mCAAmC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACzF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACxF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAOtE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAsB;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,gDAAgD;IAChD,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,QAAQ,CACN,4FAA4F,EAC5F,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,4GAA4G,CAAC,CACzH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,gCAAgC,CAAC;YAClD,MAAM,MAAM,GAAG,0BAA0B,CAAC;YAE1C,QAAQ,CACN,2FAA2F,QAAQ,EAAE,EACrG,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;YACF,+DAA+D;YAC/D,QAAQ,CAAC,UAAU,MAAM,gBAAgB,MAAM,gBAAgB,QAAQ,OAAO,MAAM,uBAAuB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAEhI,MAAM,QAAQ,GAAG,GAAG,MAAM,uCAAuC,CAAC;YAClE,MAAM,MAAM,GAAG,GAAG,MAAM,+BAA+B,CAAC;YACxD,MAAM,SAAS,GAAG,GAAG,MAAM,yBAAyB,CAAC;YAErD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;YACjE,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,UAAU;IACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,WAAmB;IACvC,gBAAgB,CACd,SAAS,EACT,OAAO,EACP,UAAU,GAAG,iBAAiB,EAC9B,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAiB,EAAE,WAAmB;IAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAExD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAE7D,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE3D,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB,EAAE,WAAmB;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAE9E,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,mBAAmB;IACnB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,sBAAsB,CAAC,CAAC;QAC3F,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACvC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openspec-playwright",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "description": "OpenSpec + Playwright E2E verification setup tool for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
package/release-notes.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ## What's Changed
2
2
 
3
- - ci: set version from tag before npm pack/publish
3
+ - fix: update command now uses npm instead of git tarball
4
4
 
5
- **Full Changelog**: https://github.com/wxhou/openspec-playwright/releases/tag/v0.1.20
5
+ **Full Changelog**: https://github.com/wxhou/openspec-playwright/releases/tag/v0.1.22
@@ -9,7 +9,7 @@ import { join } from 'path';
9
9
  import chalk from 'chalk';
10
10
 
11
11
  const SKILL_SRC = new URL('../../.claude/skills/openspec-e2e', import.meta.url).pathname;
12
- const CMD_SRC = new URL('../../.claude/commands/opsx/e2e.md', import.meta.url).pathname;
12
+ const CMD_SRC = new URL('../../.claude/commands/opsx', import.meta.url).pathname;
13
13
  const SCHEMA_DIR = new URL('../../schemas', import.meta.url).pathname;
14
14
 
15
15
  export interface UpdateOptions {
@@ -22,47 +22,52 @@ export async function update(options: UpdateOptions) {
22
22
 
23
23
  const projectRoot = process.cwd();
24
24
 
25
- // 1. Update CLI tool (from git latest, not npm)
25
+ // 1. Update CLI tool from npm
26
26
  if (options.cli !== false) {
27
27
  console.log(chalk.blue('─── Updating CLI ───'));
28
28
  try {
29
29
  execSync(
30
- 'npm install -g https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz',
31
- { stdio: 'inherit' }
30
+ 'npm install -g openspec-playwright',
31
+ { stdio: 'inherit', cwd: projectRoot }
32
32
  );
33
- console.log(chalk.green(' ✓ CLI updated to latest commit'));
33
+ console.log(chalk.green(' ✓ CLI updated via npm'));
34
34
  } catch {
35
- console.log(chalk.yellow(' ⚠ Failed to update CLI'));
35
+ console.log(chalk.yellow(' ⚠ Failed to update CLI via npm'));
36
36
  console.log(
37
- chalk.gray(' Run manually: npm install -g https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz')
37
+ chalk.gray(' Run manually: npm install -g openspec-playwright')
38
38
  );
39
39
  }
40
40
  }
41
41
 
42
- // 2. Update skill and command from git tarball (latest commit, not npm package)
42
+ // 2. Update skill and command from npm tarball
43
43
  if (options.skill !== false) {
44
44
  console.log(chalk.blue('\n─── Updating Skill & Command ───'));
45
45
  try {
46
- // Download tarball to temp file and extract
47
- const tmpSkill = '/tmp/openspec-e2e-skill.tar.gz';
46
+ // Download npm tarball and extract
48
47
  const tmpDir = '/tmp/openspec-e2e-update';
49
-
48
+ execSync(`rm -rf ${tmpDir} && mkdir -p ${tmpDir}`, { stdio: 'pipe', cwd: projectRoot });
50
49
  execSync(
51
- `curl -sL https://github.com/wxhou/openspec-playwright/archive/refs/heads/main.tar.gz -o ${tmpSkill}`,
52
- { stdio: 'pipe' }
50
+ `npm pack openspec-playwright --pack-destination ${tmpDir}`,
51
+ { stdio: 'pipe', cwd: projectRoot }
53
52
  );
54
- // Clean and re-extract to avoid stale files from previous runs
55
- execSync(`rm -rf ${tmpDir} && mkdir -p ${tmpDir} && tar -xzf ${tmpSkill} -C ${tmpDir} --strip-components=1`, { stdio: 'pipe' });
56
-
57
- const skillSrc = `${tmpDir}/.claude/skills/openspec-e2e/SKILL.md`;
58
- const cmdSrc = `${tmpDir}/.claude/commands/opsx/e2e.md`;
59
- const schemaSrc = `${tmpDir}/schemas/playwright-e2e`;
53
+ const tarball = execSync(
54
+ `ls -t ${tmpDir}/openspec-playwright-*.tgz | head -1`,
55
+ { encoding: 'utf-8', cwd: projectRoot }
56
+ ).trim();
57
+ // Move tarball out before extracting to avoid "overwrite archive" error
58
+ const tmpTarball = `${tmpDir}/package.tgz`;
59
+ execSync(`mv "${tarball}" "${tmpTarball}"`, { stdio: 'pipe', cwd: projectRoot });
60
+ execSync(`tar -xzf "${tmpTarball}" -C ${tmpDir} --strip-components=1`, { stdio: 'pipe', cwd: projectRoot });
61
+
62
+ const skillSrc = join(tmpDir, '.claude', 'skills', 'openspec-e2e', 'SKILL.md');
63
+ const cmdSrc = join(tmpDir, '.claude', 'commands', 'opsx', 'e2e.md');
64
+ const schemaSrc = join(tmpDir, 'schemas', 'playwright-e2e');
60
65
 
61
66
  installSkillFrom(skillSrc, cmdSrc, schemaSrc, projectRoot);
62
67
  console.log(chalk.green(' ✓ Skill & command updated to latest'));
63
68
  } catch {
64
- console.log(chalk.yellow(' ⚠ Failed to update skill/command from git'));
65
- console.log(chalk.gray(' Running from npm package instead...'));
69
+ console.log(chalk.yellow(' ⚠ Failed to update skill/command from npm'));
70
+ console.log(chalk.gray(' Falling back to local files...'));
66
71
  installSkill(projectRoot);
67
72
  }
68
73
  }
@@ -77,9 +82,9 @@ export async function update(options: UpdateOptions) {
77
82
 
78
83
  function installSkill(projectRoot: string) {
79
84
  installSkillFrom(
80
- SKILL_SRC,
81
- CMD_SRC,
82
- SCHEMA_DIR + '/playwright-e2e',
85
+ join(SKILL_SRC, 'SKILL.md'),
86
+ join(CMD_SRC, 'e2e.md'),
87
+ join(SCHEMA_DIR, 'playwright-e2e'),
83
88
  projectRoot
84
89
  );
85
90
  }
Binary file