Upgrade CLI to v0.2.0: add validate, list commands, --version, --dry-run, --backup flags

- Fix npm test glob pattern for Node >= 21 compatibility
- Add --version/-v flag to display package version
- Add validate command: run 78 profile checks (files, skills, frontmatter, legacy patterns, AGENTS mapping)
- Add list command: display all 13 bundled skills with descriptions
- Add --dry-run/-n flag for init: preview files without copying
- Add --backup/-b flag for init --force: backup existing .agent before overwrite
- Add name field to workflow frontmatter (brainstorm, execute-plan, write-plan)
- Expand smoke check to cover all 13 skills and new command files
- Increase test coverage from 3 to 20 tests (cli, init, validate)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 01:25:28 +07:00
parent 5325629a81
commit 9f1d6eb880
12 changed files with 627 additions and 15 deletions

61
tests/cli.test.mjs Normal file
View File

@@ -0,0 +1,61 @@
import { resolve } from "node:path";
import { spawnSync } from "node:child_process";
import test from "node:test";
import assert from "node:assert/strict";
const cliPath = resolve(process.cwd(), "bin/antigravity-superpowers.js");
function runCli(args) {
return spawnSync(process.execPath, [cliPath, ...args], {
encoding: "utf8",
});
}
test("--help shows usage information", () => {
const result = runCli(["--help"]);
assert.equal(result.status, 0);
assert.match(result.stdout, /Usage:/);
assert.match(result.stdout, /Commands:/);
assert.match(result.stdout, /init/);
assert.match(result.stdout, /validate/);
assert.match(result.stdout, /list/);
});
test("-h shows usage information", () => {
const result = runCli(["-h"]);
assert.equal(result.status, 0);
assert.match(result.stdout, /Usage:/);
});
test("no arguments shows help", () => {
const result = runCli([]);
assert.equal(result.status, 0);
assert.match(result.stdout, /Usage:/);
});
test("--version shows version number", () => {
const result = runCli(["--version"]);
assert.equal(result.status, 0);
assert.match(result.stdout.trim(), /^\d+\.\d+\.\d+$/);
});
test("-v shows version number", () => {
const result = runCli(["-v"]);
assert.equal(result.status, 0);
assert.match(result.stdout.trim(), /^\d+\.\d+\.\d+$/);
});
test("unknown command returns exit code 1", () => {
const result = runCli(["foobar"]);
assert.equal(result.status, 1);
assert.match(result.stderr, /Unknown command: foobar/);
});
test("list shows available skills", () => {
const result = runCli(["list"]);
assert.equal(result.status, 0);
assert.match(result.stdout, /13 skills available/);
assert.match(result.stdout, /brainstorming/);
assert.match(result.stdout, /test-driven-development/);
assert.match(result.stdout, /single-flow-task-execution/);
});