@zephyrdeng/pi-review 0.12.1 → 0.14.0

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 (48) hide show
  1. package/README.md +18 -9
  2. package/README.zh-CN.md +12 -3
  3. package/dist/args.d.ts +12 -0
  4. package/dist/args.d.ts.map +1 -1
  5. package/dist/args.js +18 -5
  6. package/dist/args.js.map +1 -1
  7. package/dist/args.test.js +4 -2
  8. package/dist/args.test.js.map +1 -1
  9. package/dist/index.d.ts +6 -6
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +4 -4
  12. package/dist/index.js.map +1 -1
  13. package/dist/panel-cli.test.js +35 -0
  14. package/dist/panel-cli.test.js.map +1 -1
  15. package/dist/panel-config.d.ts +7 -0
  16. package/dist/panel-config.d.ts.map +1 -1
  17. package/dist/panel-config.js +12 -0
  18. package/dist/panel-config.js.map +1 -1
  19. package/dist/panel.d.ts +7 -1
  20. package/dist/panel.d.ts.map +1 -1
  21. package/dist/panel.js +44 -1
  22. package/dist/panel.js.map +1 -1
  23. package/dist/provider-probe.test.d.ts +2 -0
  24. package/dist/provider-probe.test.d.ts.map +1 -0
  25. package/dist/provider-probe.test.js +192 -0
  26. package/dist/provider-probe.test.js.map +1 -0
  27. package/dist/review.d.ts +44 -2
  28. package/dist/review.d.ts.map +1 -1
  29. package/dist/review.js +140 -1
  30. package/dist/review.js.map +1 -1
  31. package/dist/skill-update.test.js +61 -3
  32. package/dist/skill-update.test.js.map +1 -1
  33. package/dist/skill.d.ts +28 -0
  34. package/dist/skill.d.ts.map +1 -1
  35. package/dist/skill.js +155 -31
  36. package/dist/skill.js.map +1 -1
  37. package/dist/types.d.ts +26 -2
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/types.js.map +1 -1
  40. package/extensions/panel-tool.test.ts +15 -1
  41. package/extensions/panel-tool.ts +49 -19
  42. package/extensions/rv-completions.ts +1 -1
  43. package/extensions/rv-prompts.test.ts +13 -3
  44. package/extensions/rv-prompts.ts +28 -15
  45. package/package.json +1 -1
  46. package/skills/pi-review/SKILL.md +1 -1
  47. package/skills/pi-review/references/codex-tools.md +5 -5
  48. package/skills/pi-review/references/model-selection.md +1 -1
package/dist/review.js CHANGED
@@ -14,6 +14,7 @@ import { ProgressLogWriter } from "./progress-log.js";
14
14
  import { makeRunSessionDir, newestJsonl } from "./session.js";
15
15
  import { fail, hasPathSeparator, expandMaybeHome, normalizeTools } from "./utils.js";
16
16
  import { resolveConfig } from "./config.js";
17
+ import { splitModelProvider } from "./panel-config.js";
17
18
  import { formatReviewMetaAscii, formatReviewMetaJsonLine } from "./meta-footer.js";
18
19
  export function readReviewStdin() {
19
20
  if (process.stdin.isTTY)
@@ -40,7 +41,115 @@ export function childEnv(piBin) {
40
41
  };
41
42
  }
42
43
  /**
43
- * Isolate review children from host Pi extension side effects.
44
+ * Parse `pi --list-models` table output into distinct provider names.
45
+ * Columns are space-padded; offsets are derived from the header row so
46
+ * provider names are stable even if they contain spaces.
47
+ */
48
+ export function parseModelCatalog(stdout) {
49
+ const lines = stdout.split("\n");
50
+ const headerIdx = lines.findIndex((l) => l.includes("provider") && l.includes("model"));
51
+ if (headerIdx === -1)
52
+ return [];
53
+ const header = lines[headerIdx];
54
+ const providerStart = header.indexOf("provider");
55
+ const modelStart = header.indexOf("model");
56
+ const providers = new Set();
57
+ for (const line of lines.slice(headerIdx + 1)) {
58
+ if (!line.trim())
59
+ continue;
60
+ const provider = line.slice(providerStart, modelStart).trim();
61
+ if (provider)
62
+ providers.add(provider);
63
+ }
64
+ return [...providers];
65
+ }
66
+ const MODEL_CATALOG_CACHE = new Map();
67
+ function catalogCacheKey(piBin, isolated) {
68
+ return `${piBin}|${isolated ? "no-ext" : "with-ext"}`;
69
+ }
70
+ function listProviders(piBin, isolated) {
71
+ const key = catalogCacheKey(piBin, isolated);
72
+ const cached = MODEL_CATALOG_CACHE.get(key);
73
+ if (cached)
74
+ return cached;
75
+ const args = ["--list-models", ...(isolated ? ["--no-extensions"] : [])];
76
+ const result = spawnSync(piBin, args, {
77
+ env: childEnv(piBin),
78
+ encoding: "utf8",
79
+ maxBuffer: 16 * 1024 * 1024,
80
+ });
81
+ const query = result.status === 0 && result.stdout
82
+ ? { providers: new Set(parseModelCatalog(result.stdout)), ok: true }
83
+ : { providers: new Set(), ok: false };
84
+ // Only cache successful queries: a transient spawn failure (slow startup,
85
+ // config read hiccup) must not poison the probe for the rest of the run.
86
+ if (query.ok)
87
+ MODEL_CATALOG_CACHE.set(key, query);
88
+ return query;
89
+ }
90
+ /**
91
+ * Decide whether `provider` is usable by an isolated review child
92
+ * (--no-extensions, issue #8). Missing from the isolated catalog but present
93
+ * with host extensions loaded means the provider is registered by an
94
+ * extension; the caller should surface a fix hint instead of a confusing
95
+ * unknown-provider failure. A failed catalog query is `indeterminate`: the
96
+ * caller must not block a possibly-valid provider on probe trouble.
97
+ */
98
+ export function probeProviderAvailability(piBin, provider) {
99
+ const isolated = listProviders(piBin, true);
100
+ if (!isolated.ok)
101
+ return { kind: "indeterminate", provider };
102
+ if (isolated.providers.has(provider))
103
+ return { kind: "available" };
104
+ const withExtensions = listProviders(piBin, false);
105
+ if (!withExtensions.ok)
106
+ return { kind: "indeterminate", provider };
107
+ if (withExtensions.providers.has(provider))
108
+ return { kind: "extension_only", provider };
109
+ return { kind: "unknown", provider };
110
+ }
111
+ /** Human-readable fix hint for a provider that only exists via host extensions. */
112
+ export function extensionOnlyHintText(provider) {
113
+ return [
114
+ `provider "${provider}" is registered by a Pi extension, but review children`,
115
+ `run isolated with --no-extensions (issue #8).`,
116
+ "",
117
+ "Re-run with host extensions enabled:",
118
+ ` PI_REVIEW_CHILD_EXTENSIONS=1 pi-review ...`,
119
+ "(accepts 1 / true / keep; see README PI_REVIEW_CHILD_EXTENSIONS)",
120
+ ].join("\n");
121
+ }
122
+ /** Human-readable message for a provider missing from the catalog entirely. */
123
+ export function unknownProviderHintText(provider) {
124
+ return [
125
+ `provider "${provider}" was not found in the Pi model catalog (with or`,
126
+ `without host extensions loaded). Check --provider / preset provider spelling.`,
127
+ ].join("\n");
128
+ }
129
+ export function configBlockForProvider(piBin, provider, model) {
130
+ const probeProvider = provider ?? (model ? splitModelProvider(model) : undefined);
131
+ if (!probeProvider || childIsolationArgs().length === 0)
132
+ return undefined;
133
+ const probe = probeProviderAvailability(piBin, probeProvider);
134
+ // available → proceed; indeterminate (catalog query failed) → proceed and
135
+ // let the child surface its own accurate error rather than block on probe trouble.
136
+ if (probe.kind === "available" || probe.kind === "indeterminate")
137
+ return undefined;
138
+ const extensionOnly = probe.kind === "extension_only";
139
+ return {
140
+ provider: probeProvider,
141
+ extensionOnly,
142
+ structured: {
143
+ status: "blocked",
144
+ verdict: "blocked",
145
+ verdictSource: "config_error",
146
+ parseError: extensionOnly ? extensionOnlyHintText(probeProvider) : unknownProviderHintText(probeProvider),
147
+ findings: [],
148
+ actionableCount: 0,
149
+ },
150
+ };
151
+ }
152
+ /** Isolate review children from host Pi extension side effects.
44
153
  *
45
154
  * Host extensions (usage HUDs, auto-reload bridges, etc.) may capture extension
46
155
  * ctx and touch it after session dispose/reload. That throws Pi's stale-context
@@ -138,6 +247,36 @@ export async function runReviewOnce(parsed, stdinText = readReviewStdin()) {
138
247
  }
139
248
  // Isolate single-review children from host extension side effects (issue #8).
140
249
  args.push(...childIsolationArgs());
250
+ // Block before spawning when the requested provider only exists via host
251
+ // extensions (issue #8): the isolated child would otherwise die with a
252
+ // confusing unknown-provider error. Surface an actionable hint so the host
253
+ // agent knows to re-run with PI_REVIEW_CHILD_EXTENSIONS=1.
254
+ const configBlock = configBlockForProvider(config.piBin, parsed.provider || preset.provider, parsed.model || preset.model);
255
+ if (configBlock) {
256
+ const hint = configBlock.structured.parseError ?? "";
257
+ const meta = {
258
+ metaVersion: REVIEW_META_VERSION,
259
+ reviewMode: parsed.mode,
260
+ ...configBlock.structured,
261
+ durationMs: 0,
262
+ model: parsed.model || preset.model || null,
263
+ ...(parsed.thinking || preset.thinking ? { thinking: parsed.thinking || preset.thinking } : {}),
264
+ ...(configBlock.extensionOnly
265
+ ? { extensionHint: { provider: configBlock.provider, availableViaExtension: true } }
266
+ : {}),
267
+ };
268
+ process.stdout.write(`${hint}\n\n`);
269
+ process.stdout.write(`${formatReviewMetaAscii(meta)}\n`);
270
+ const metaJsonDest = process.env.PI_REVIEW_META_STDOUT?.toLowerCase();
271
+ const jsonLine = formatReviewMetaJsonLine(meta);
272
+ if (metaJsonDest === "1" || metaJsonDest === "true" || metaJsonDest === "stdout") {
273
+ process.stdout.write(jsonLine);
274
+ }
275
+ else {
276
+ process.stderr.write(jsonLine);
277
+ }
278
+ return { meta, exitCode: reviewExitCode(meta.status) };
279
+ }
141
280
  args.push(...(payload.attachableFileRefs ?? payload.fileRefs), prompt);
142
281
  let progressWriter;
143
282
  if (parsed.progressLog) {
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../src/review.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,73 @@
1
1
  import assert from "node:assert/strict";
2
2
  import fs from "node:fs";
3
+ import os from "node:os";
3
4
  import path from "node:path";
4
5
  import { fileURLToPath } from "node:url";
5
6
  import { test } from "vitest";
6
- import { DEFAULT_AGENT_SKILL_ARGS } from "./skill.js";
7
+ import { DEFAULT_AGENT_SKILL_ARGS, DEFAULT_SKILL_AGENTS, expandSkillAgentArgs, listDirectSkillInstallTargets, resolveDirectSkillInstallTargets, selectedSkillAgents, } from "./skill.js";
7
8
  const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
8
9
  const bundledSkillDir = path.join(packageRoot, "skills", "pi-review");
9
10
  const bundledSkill = path.join(bundledSkillDir, "SKILL.md");
10
11
  const bundledRefs = path.join(bundledSkillDir, "references");
11
- test("DEFAULT_AGENT_SKILL_ARGS is non-interactive for common agents", () => {
12
- assert.deepEqual(DEFAULT_AGENT_SKILL_ARGS, ["-y", "--agent", "claude-code", "codex", "cursor"]);
12
+ test("DEFAULT_AGENT_SKILL_ARGS is non-interactive for common agents including agy", () => {
13
+ assert.deepEqual(DEFAULT_SKILL_AGENTS, [
14
+ "claude-code",
15
+ "codex",
16
+ "cursor",
17
+ "antigravity",
18
+ "antigravity-cli",
19
+ ]);
20
+ assert.deepEqual(DEFAULT_AGENT_SKILL_ARGS, ["-y", "--agent", ...DEFAULT_SKILL_AGENTS]);
21
+ });
22
+ test("expandSkillAgentArgs maps agy alias to skills CLI agent names", () => {
23
+ assert.deepEqual(expandSkillAgentArgs(["-y", "--agent", "agy"]), [
24
+ "-y",
25
+ "--agent",
26
+ "antigravity",
27
+ "antigravity-cli",
28
+ ]);
29
+ assert.deepEqual(expandSkillAgentArgs(["--agent", "claude-code", "agy", "cursor"]), [
30
+ "--agent",
31
+ "claude-code",
32
+ "antigravity",
33
+ "antigravity-cli",
34
+ "cursor",
35
+ ]);
36
+ assert.deepEqual(expandSkillAgentArgs(["--agent", "antigravity", "agy"]), [
37
+ "--agent",
38
+ "antigravity",
39
+ "antigravity-cli",
40
+ ]);
41
+ assert.deepEqual(expandSkillAgentArgs(["--agent", "claude-code", "codex"]), [
42
+ "--agent",
43
+ "claude-code",
44
+ "codex",
45
+ ]);
46
+ });
47
+ test("listDirectSkillInstallTargets covers Claude Code and universal agy path", () => {
48
+ const home = os.homedir();
49
+ const targets = listDirectSkillInstallTargets();
50
+ assert.deepEqual(targets.map((t) => t.id), ["claude-code", "agy"]);
51
+ assert.equal(targets[0].dir, path.join(home, ".claude", "skills", "pi-review"));
52
+ assert.equal(targets[1].dir, path.join(home, ".gemini", "config", "skills", "pi-review"));
53
+ });
54
+ test("selectedSkillAgents and resolveDirectSkillInstallTargets honor --agent filters", () => {
55
+ assert.equal(selectedSkillAgents([]), "all");
56
+ assert.equal(selectedSkillAgents(["-y", "--global"]), "all");
57
+ assert.deepEqual(selectedSkillAgents(["--agent", "agy", "-y"]), [
58
+ "antigravity",
59
+ "antigravity-cli",
60
+ ]);
61
+ assert.deepEqual(selectedSkillAgents(["-a", "claude-code", "codex"]), [
62
+ "claude-code",
63
+ "codex",
64
+ ]);
65
+ assert.equal(selectedSkillAgents(["--all"]), "all");
66
+ assert.deepEqual(resolveDirectSkillInstallTargets(["--agent", "agy"]).map((t) => t.id), ["agy"]);
67
+ assert.deepEqual(resolveDirectSkillInstallTargets(["--agent", "claude-code"]).map((t) => t.id), ["claude-code"]);
68
+ assert.deepEqual(resolveDirectSkillInstallTargets(["--agent", "antigravity-cli"]).map((t) => t.id), ["agy"]);
69
+ assert.deepEqual(resolveDirectSkillInstallTargets(["--agent", "codex", "cursor"]).map((t) => t.id), []);
70
+ assert.deepEqual(resolveDirectSkillInstallTargets([]).map((t) => t.id), ["claude-code", "agy"]);
13
71
  });
14
72
  test("bundled skill ships SKILL.md and references assets for update fallback", () => {
15
73
  assert.equal(fs.existsSync(bundledSkill), true);
@@ -1 +1 @@
1
- {"version":3,"file":"skill-update.test.js","sourceRoot":"","sources":["../src/skill-update.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACrF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AAE7D,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;IACzE,MAAM,CAAC,SAAS,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IAClF,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IACrF,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,0DAA0D,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"skill-update.test.js","sourceRoot":"","sources":["../src/skill-update.test.ts"],"names":[],"mappings":"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"}
package/dist/skill.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ /** skills CLI agent ids used by default install / update. */
2
+ export declare const DEFAULT_SKILL_AGENTS: readonly ["claude-code", "codex", "cursor", "antigravity", "antigravity-cli"];
1
3
  /** Non-interactive defaults used by install / update when agents are not specified. */
2
4
  export declare const DEFAULT_AGENT_SKILL_ARGS: string[];
3
5
  export type SkillMethod = "skills-cli" | "direct";
@@ -7,6 +9,32 @@ export interface SkillOpResult {
7
9
  /** Human-readable summary for CLI boxes / logs. */
8
10
  message: string;
9
11
  }
12
+ export interface DirectSkillInstallTarget {
13
+ /** Stable id for tests / logs (`claude-code`, `agy`). */
14
+ id: string;
15
+ /** Human label written to stdout. */
16
+ label: string;
17
+ /** Absolute skill directory (contains SKILL.md). */
18
+ dir: string;
19
+ }
20
+ /**
21
+ * Direct-copy destinations when the skills CLI is unavailable.
22
+ * Claude Code keeps `~/.claude/skills`; agy uses the universal path that
23
+ * AGY / AGY CLI / AGY IDE all discover (`~/.gemini/config/skills`).
24
+ */
25
+ export declare function listDirectSkillInstallTargets(home?: string): DirectSkillInstallTarget[];
26
+ /**
27
+ * Expand user-facing agent aliases before forwarding to the skills CLI.
28
+ * `agy` → `antigravity` + `antigravity-cli` (deduped, order-preserving).
29
+ */
30
+ export declare function expandSkillAgentArgs(args: string[]): string[];
31
+ /**
32
+ * Parse `--agent` / `-a` values (and honor `--all`) after alias expansion.
33
+ * Returns `"all"` when no agent filter is present.
34
+ */
35
+ export declare function selectedSkillAgents(args: string[]): string[] | "all";
36
+ /** Map skills-CLI / user agent ids onto direct-copy targets. */
37
+ export declare function resolveDirectSkillInstallTargets(args?: string[], home?: string): DirectSkillInstallTarget[];
10
38
  /**
11
39
  * Install agent skill content. Does not exit — callers decide process lifecycle.
12
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAaA,uFAAuF;AACvF,eAAO,MAAM,wBAAwB,UAAsD,CAAC;AAE5F,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAwGD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,aAAa,CAYvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,aAAa,CA0BtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,aAAa,CAWzE;AAED,wBAAgB,YAAY,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,KAAK,CAG5D;AAED,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,KAAK,CAG9D"}
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAaA,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,+EAOvB,CAAC;AAEX,uFAAuF;AACvF,eAAO,MAAM,wBAAwB,UAA6C,CAAC;AAOnF,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,SAAe,GAAG,wBAAwB,EAAE,CAa7F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAc7D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAgBpE;AAED,gEAAgE;AAChE,wBAAgB,gCAAgC,CAC9C,IAAI,GAAE,MAAM,EAAO,EACnB,IAAI,SAAe,GAClB,wBAAwB,EAAE,CAW5B;AAqJD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,aAAa,CAcvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,aAAa,CA4BtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,aAAa,CAWzE;AAED,wBAAgB,YAAY,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,KAAK,CAG5D;AAED,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAM,EAAO,GAAG,KAAK,CAG9D"}
package/dist/skill.js CHANGED
@@ -9,8 +9,95 @@ const BUNDLED_SKILL_DIR = path.join(PACKAGE_ROOT, "skills", "pi-review");
9
9
  const BUNDLED_SKILL = path.join(BUNDLED_SKILL_DIR, "SKILL.md");
10
10
  const REPO = "ZephyrDeng/pi-review";
11
11
  const SKILL_NAME = "pi-review";
12
+ /** skills CLI agent ids used by default install / update. */
13
+ export const DEFAULT_SKILL_AGENTS = [
14
+ "claude-code",
15
+ "codex",
16
+ "cursor",
17
+ // Google Antigravity (agy): product + CLI flavors in the skills CLI registry.
18
+ "antigravity",
19
+ "antigravity-cli",
20
+ ];
12
21
  /** Non-interactive defaults used by install / update when agents are not specified. */
13
- export const DEFAULT_AGENT_SKILL_ARGS = ["-y", "--agent", "claude-code", "codex", "cursor"];
22
+ export const DEFAULT_AGENT_SKILL_ARGS = ["-y", "--agent", ...DEFAULT_SKILL_AGENTS];
23
+ /** User-facing `agy` alias expands to the skills CLI agent ids. */
24
+ const AGY_ALIAS = "agy";
25
+ const AGY_SKILLS_AGENTS = ["antigravity", "antigravity-cli"];
26
+ const AGY_SKILLS_AGENT_SET = new Set(AGY_SKILLS_AGENTS);
27
+ /**
28
+ * Direct-copy destinations when the skills CLI is unavailable.
29
+ * Claude Code keeps `~/.claude/skills`; agy uses the universal path that
30
+ * AGY / AGY CLI / AGY IDE all discover (`~/.gemini/config/skills`).
31
+ */
32
+ export function listDirectSkillInstallTargets(home = os.homedir()) {
33
+ return [
34
+ {
35
+ id: "claude-code",
36
+ label: "Claude Code",
37
+ dir: path.join(home, ".claude", "skills", SKILL_NAME),
38
+ },
39
+ {
40
+ id: "agy",
41
+ label: "agy (Antigravity)",
42
+ dir: path.join(home, ".gemini", "config", "skills", SKILL_NAME),
43
+ },
44
+ ];
45
+ }
46
+ /**
47
+ * Expand user-facing agent aliases before forwarding to the skills CLI.
48
+ * `agy` → `antigravity` + `antigravity-cli` (deduped, order-preserving).
49
+ */
50
+ export function expandSkillAgentArgs(args) {
51
+ const expanded = args.flatMap((arg) => arg === AGY_ALIAS ? [...AGY_SKILLS_AGENTS] : [arg]);
52
+ const seenAgents = new Set();
53
+ const out = [];
54
+ for (const arg of expanded) {
55
+ if (AGY_SKILLS_AGENT_SET.has(arg)) {
56
+ if (seenAgents.has(arg))
57
+ continue;
58
+ seenAgents.add(arg);
59
+ }
60
+ out.push(arg);
61
+ }
62
+ return out;
63
+ }
64
+ /**
65
+ * Parse `--agent` / `-a` values (and honor `--all`) after alias expansion.
66
+ * Returns `"all"` when no agent filter is present.
67
+ */
68
+ export function selectedSkillAgents(args) {
69
+ const normalized = expandSkillAgentArgs(args);
70
+ if (hasFlag(normalized, "--all"))
71
+ return "all";
72
+ const agents = [];
73
+ for (let i = 0; i < normalized.length; i++) {
74
+ const token = normalized[i];
75
+ if (token !== "--agent" && token !== "-a")
76
+ continue;
77
+ i += 1;
78
+ while (i < normalized.length && !normalized[i].startsWith("-")) {
79
+ agents.push(normalized[i]);
80
+ i += 1;
81
+ }
82
+ i -= 1;
83
+ }
84
+ return agents.length === 0 ? "all" : agents;
85
+ }
86
+ /** Map skills-CLI / user agent ids onto direct-copy targets. */
87
+ export function resolveDirectSkillInstallTargets(args = [], home = os.homedir()) {
88
+ const all = listDirectSkillInstallTargets(home);
89
+ const selected = selectedSkillAgents(args);
90
+ if (selected === "all")
91
+ return all;
92
+ const want = new Set();
93
+ for (const agent of selected) {
94
+ if (agent === "claude-code")
95
+ want.add("claude-code");
96
+ if (agent === AGY_ALIAS || AGY_SKILLS_AGENT_SET.has(agent))
97
+ want.add("agy");
98
+ }
99
+ return all.filter((target) => want.has(target.id));
100
+ }
14
101
  function hasSkillsCli() {
15
102
  const result = spawnSync("npx", ["skills", "--version"], {
16
103
  encoding: "utf8",
@@ -23,25 +110,28 @@ function hasFlag(args, ...flags) {
23
110
  return args.some((a) => flags.includes(a));
24
111
  }
25
112
  function installViaSkillsCli(args) {
26
- const global = hasFlag(args, "-g", "--global") ? [] : ["-g"];
27
- const result = spawnSync("npx", ["skills", "add", REPO, ...global, "--skill", SKILL_NAME, ...args], {
113
+ const normalized = expandSkillAgentArgs(args);
114
+ const global = hasFlag(normalized, "-g", "--global") ? [] : ["-g"];
115
+ const result = spawnSync("npx", ["skills", "add", REPO, ...global, "--skill", SKILL_NAME, ...normalized], {
28
116
  stdio: "inherit",
29
117
  encoding: "utf8",
30
118
  });
31
119
  return result.status === 0;
32
120
  }
33
121
  function updateViaSkillsCli(args = []) {
34
- const global = hasFlag(args, "-g", "--global") ? [] : ["-g"];
35
- const yes = hasFlag(args, "-y", "--yes") ? [] : ["-y"];
36
- const result = spawnSync("npx", ["skills", "update", SKILL_NAME, ...global, ...yes, ...args], {
122
+ const normalized = expandSkillAgentArgs(args);
123
+ const global = hasFlag(normalized, "-g", "--global") ? [] : ["-g"];
124
+ const yes = hasFlag(normalized, "-y", "--yes") ? [] : ["-y"];
125
+ const result = spawnSync("npx", ["skills", "update", SKILL_NAME, ...global, ...yes, ...normalized], {
37
126
  stdio: "inherit",
38
127
  encoding: "utf8",
39
128
  });
40
129
  return result.status === 0;
41
130
  }
42
131
  function uninstallViaSkillsCli(args) {
43
- const global = hasFlag(args, "-g", "--global") ? [] : ["-g"];
44
- const result = spawnSync("npx", ["skills", "remove", SKILL_NAME, ...global, ...args], {
132
+ const normalized = expandSkillAgentArgs(args);
133
+ const global = hasFlag(normalized, "-g", "--global") ? [] : ["-g"];
134
+ const result = spawnSync("npx", ["skills", "remove", SKILL_NAME, ...global, ...normalized], {
45
135
  stdio: "inherit",
46
136
  encoding: "utf8",
47
137
  });
@@ -60,7 +150,11 @@ function copySkillTree(srcDir, destDir) {
60
150
  }
61
151
  }
62
152
  }
63
- function installDirect() {
153
+ function readPackageVersion() {
154
+ const pkg = JSON.parse(fs.readFileSync(path.join(PACKAGE_ROOT, "package.json"), "utf8"));
155
+ return pkg.version;
156
+ }
157
+ function installDirect(extraArgs = []) {
64
158
  if (!fs.existsSync(BUNDLED_SKILL)) {
65
159
  return {
66
160
  ok: false,
@@ -68,27 +162,57 @@ function installDirect() {
68
162
  message: `bundled SKILL.md not found at ${BUNDLED_SKILL}`,
69
163
  };
70
164
  }
71
- const targetDir = path.join(os.homedir(), ".claude", "skills", "pi-review");
72
- // Replace tree so references/ and other assets stay in sync with the package.
73
- fs.rmSync(targetDir, { recursive: true, force: true });
74
- copySkillTree(BUNDLED_SKILL_DIR, targetDir);
75
- const pkg = JSON.parse(fs.readFileSync(path.join(PACKAGE_ROOT, "package.json"), "utf8"));
76
- const targetFile = path.join(targetDir, "SKILL.md");
77
- const message = `Installed pi-review skill v${pkg.version} to ${targetFile}`;
78
- process.stdout.write(`${message}\n`);
79
- return { ok: true, method: "direct", message };
80
- }
81
- function uninstallDirect() {
82
- const targetDir = path.join(os.homedir(), ".claude", "skills", "pi-review");
83
- if (!fs.existsSync(targetDir)) {
165
+ const targets = resolveDirectSkillInstallTargets(extraArgs);
166
+ if (targets.length === 0) {
167
+ const message = "direct install only supports claude-code and agy (antigravity / antigravity-cli); no matching targets";
168
+ process.stderr.write(`${message}\n`);
169
+ return { ok: false, method: "direct", message };
170
+ }
171
+ const version = readPackageVersion();
172
+ const installed = [];
173
+ for (const target of targets) {
174
+ // Replace tree so references/ and other assets stay in sync with the package.
175
+ fs.rmSync(target.dir, { recursive: true, force: true });
176
+ copySkillTree(BUNDLED_SKILL_DIR, target.dir);
177
+ const targetFile = path.join(target.dir, "SKILL.md");
178
+ const line = `Installed pi-review skill v${version} to ${target.label}: ${targetFile}`;
179
+ process.stdout.write(`${line}\n`);
180
+ installed.push(line);
181
+ }
182
+ return {
183
+ ok: true,
184
+ method: "direct",
185
+ message: installed.join("; "),
186
+ };
187
+ }
188
+ function uninstallDirect(extraArgs = []) {
189
+ const targets = resolveDirectSkillInstallTargets(extraArgs);
190
+ if (targets.length === 0) {
191
+ const message = "direct uninstall only supports claude-code and agy (antigravity / antigravity-cli); no matching targets";
192
+ process.stderr.write(`${message}\n`);
193
+ return { ok: false, method: "direct", message };
194
+ }
195
+ const removed = [];
196
+ const missing = [];
197
+ for (const target of targets) {
198
+ if (!fs.existsSync(target.dir)) {
199
+ missing.push(target.label);
200
+ continue;
201
+ }
202
+ fs.rmSync(target.dir, { recursive: true });
203
+ const line = `Removed pi-review skill from ${target.label}: ${target.dir}`;
204
+ process.stdout.write(`${line}\n`);
205
+ removed.push(line);
206
+ }
207
+ if (removed.length === 0) {
84
208
  const message = "pi-review skill not found";
85
209
  process.stdout.write(`${message}\n`);
86
210
  return { ok: true, method: "direct", message };
87
211
  }
88
- fs.rmSync(targetDir, { recursive: true });
89
- const message = `Removed pi-review skill from ${targetDir}`;
90
- process.stdout.write(`${message}\n`);
91
- return { ok: true, method: "direct", message };
212
+ if (missing.length > 0) {
213
+ process.stdout.write(`Not installed for: ${missing.join(", ")}\n`);
214
+ }
215
+ return { ok: true, method: "direct", message: removed.join("; ") };
92
216
  }
93
217
  /**
94
218
  * Install agent skill content. Does not exit — callers decide process lifecycle.
@@ -102,8 +226,8 @@ export function runInstallSkill(extraArgs = []) {
102
226
  message: ok ? "Installed pi-review skill via skills CLI" : "skills CLI install failed",
103
227
  };
104
228
  }
105
- process.stdout.write("skills CLI not found, installing to Claude Code directly...\n");
106
- return installDirect();
229
+ process.stdout.write("skills CLI not found, installing directly to Claude Code and/or agy (Antigravity)...\n");
230
+ return installDirect(extraArgs);
107
231
  }
108
232
  /**
109
233
  * Refresh already-installed skill content to the latest version.
@@ -131,8 +255,8 @@ export function runUpdateSkill(extraArgs = []) {
131
255
  : "skills CLI skill update/install failed",
132
256
  };
133
257
  }
134
- process.stdout.write("skills CLI not found, refreshing Claude Code skill from package...\n");
135
- return installDirect();
258
+ process.stdout.write("skills CLI not found, refreshing Claude Code and/or agy skills from package...\n");
259
+ return installDirect(extraArgs);
136
260
  }
137
261
  /**
138
262
  * Uninstall agent skill content. Does not exit — callers decide process lifecycle.
@@ -146,7 +270,7 @@ export function runUninstallSkill(extraArgs = []) {
146
270
  message: ok ? "Removed pi-review skill via skills CLI" : "skills CLI remove failed",
147
271
  };
148
272
  }
149
- return uninstallDirect();
273
+ return uninstallDirect(extraArgs);
150
274
  }
151
275
  export function installSkill(extraArgs = []) {
152
276
  const result = runInstallSkill(extraArgs);