@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.
- package/README.md +18 -9
- package/README.zh-CN.md +12 -3
- package/dist/args.d.ts +12 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +18 -5
- package/dist/args.js.map +1 -1
- package/dist/args.test.js +4 -2
- package/dist/args.test.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/panel-cli.test.js +35 -0
- package/dist/panel-cli.test.js.map +1 -1
- package/dist/panel-config.d.ts +7 -0
- package/dist/panel-config.d.ts.map +1 -1
- package/dist/panel-config.js +12 -0
- package/dist/panel-config.js.map +1 -1
- package/dist/panel.d.ts +7 -1
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js +44 -1
- package/dist/panel.js.map +1 -1
- package/dist/provider-probe.test.d.ts +2 -0
- package/dist/provider-probe.test.d.ts.map +1 -0
- package/dist/provider-probe.test.js +192 -0
- package/dist/provider-probe.test.js.map +1 -0
- package/dist/review.d.ts +44 -2
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +140 -1
- package/dist/review.js.map +1 -1
- package/dist/skill-update.test.js +61 -3
- package/dist/skill-update.test.js.map +1 -1
- package/dist/skill.d.ts +28 -0
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +155 -31
- package/dist/skill.js.map +1 -1
- package/dist/types.d.ts +26 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/extensions/panel-tool.test.ts +15 -1
- package/extensions/panel-tool.ts +49 -19
- package/extensions/rv-completions.ts +1 -1
- package/extensions/rv-prompts.test.ts +13 -3
- package/extensions/rv-prompts.ts +28 -15
- package/package.json +1 -1
- package/skills/pi-review/SKILL.md +1 -1
- package/skills/pi-review/references/codex-tools.md +5 -5
- 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
|
-
*
|
|
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) {
|
package/dist/review.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAuB,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEnF,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,MAAM,WAAW,GAAG;QAClB,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACzD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;KACvB,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAE9B,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAC/E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACxF,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAE,CAAC;IACjC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,IAAI,QAAQ;YAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AACxB,CAAC;AAQD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAwB,CAAC;AAE5D,SAAS,eAAe,CAAC,KAAa,EAAE,QAAiB;IACvD,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,QAAiB;IACrD,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;QACpC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;QACpB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;KAC5B,CAAC,CAAC;IACH,MAAM,KAAK,GACT,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM;QAClC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;QACpE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,EAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAClD,0EAA0E;IAC1E,yEAAyE;IACzE,IAAI,KAAK,CAAC,EAAE;QAAE,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC;AACf,CAAC;AAQD;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,QAAgB;IACvE,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IAC7D,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACnE,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,cAAc,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IACnE,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IACxF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO;QACL,aAAa,QAAQ,wDAAwD;QAC7E,+CAA+C;QAC/C,EAAE;QACF,sCAAsC;QACtC,gDAAgD;QAChD,kEAAkE;KACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO;QACL,aAAa,QAAQ,kDAAkD;QACvE,+EAA+E;KAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAcD,MAAM,UAAU,sBAAsB,CACpC,KAAa,EACb,QAA4B,EAC5B,KAAc;IAEd,MAAM,aAAa,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClF,IAAI,CAAC,aAAa,IAAI,kBAAkB,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC9D,0EAA0E;IAC1E,mFAAmF;IACnF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,SAAS,CAAC;IACnF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;IACtD,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,aAAa;QACb,UAAU,EAAE;YACV,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE,cAAc;YAC7B,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,aAAa,CAAC;YACzG,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC;SACnB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,GAAG,GAAG,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAC/D,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC7B,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAEpD,MAAM,UAAU,wBAAwB,CAAC,YAAoB,EAAE,MAAc,EAAE,KAAK,GAAG,6BAA6B;IAClH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,OAAO,YAAY,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,OAAO,GAAG,YAAY,2BAA2B,OAAO,EAAE,CAAC;AAC7D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,UAAmB;IACrE,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC3C,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED;;gFAEgF;AAChF,MAAM,UAAU,wBAAwB,CAAC,UAAmB,EAAE,eAAwB;IACpF,OAAO,CAAC,UAAU,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA0D;IAC1F,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,iCAAiC,KAAK,CAAC,MAAM,EAAE,CAAC;IACzE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,+BAA+B,KAAK,CAAC,MAAM,EAAE,CAAC;IACpF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,IAAc;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,EAAE;QAC1D,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;KACrB,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAkB,EAAE,SAAS,GAAG,eAAe,EAAE;IACnF,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,wBAAwB,MAAM,CAAC,IAAI,sBAAsB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACpE,6EAA6E;IAC7E,0EAA0E;IAC1E,2EAA2E;IAC3E,mCAAmC;IACnC,MAAM,IAAI,GAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC/D,IAAI,YAAY;QAAE,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;IAEpE,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAE,CAAC,CAAC;IACvG,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAE,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEvC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,KAAK,CAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,aAAiC,CAAC;IACtC,IAAI,aAAiC,CAAC;IAEtC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAc,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9B,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED,8EAA8E;IAC9E,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC,CAAC;IAEnC,yEAAyE;IACzE,uEAAuE;IACvE,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3H,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,GAAe;YACvB,WAAW,EAAE,mBAAmB;YAChC,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,GAAG,WAAW,CAAC,UAAU;YACzB,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI;YAC3C,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,GAAG,CAAC,WAAW,CAAC,aAAa;gBAC3B,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE;gBACpF,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAEvE,IAAI,cAA6C,CAAC;IAClD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,cAAc,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,+CAAgD,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,0EAA0E;IAC1E,4EAA4E;IAC5E,wEAAwE;IACxE,oFAAoF;IACpF,IAAI,YAAyC,CAAC;IAC9C,IAAI,WAAmC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM;QAC9B,CAAC,CAAC,IAAI,QAAQ,CAAC;YACX,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACnB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,cAAc;oBAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,YAAY,GAAG,IAAI,eAAe,CAAC;wBACjC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBACtC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;qBAClD,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,EAAE,EAAE,CAAC;YACP,CAAC;SACF,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,SAAS,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;QACzB,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC;QAC1D,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE1C,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,KAAK,EAAE,CAAC;QACrB,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,wEAAwE;QACxE,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC;QACpD,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,gBAAgB,CAAC,OAAO,IAAI,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,IAAI,cAAkC,CAAC;IACvC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,cAAsC,CAAC;IAC3C,4EAA4E;IAC5E,+EAA+E;IAC/E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,0EAA0E;QAC1E,2CAA2C;QAC3C,cAAc,GAAG,WAAW,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QAC3D,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;QACxB,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC;QACjC,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,kEAAkE;QAClE,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;QACxB,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC;QACjC,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,2EAA2E;IAC3E,2EAA2E;IAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,YAAY,EAAE,CAAC;QACjB,WAAW,GAAG;YACZ,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE,eAAe;YAC9B,UAAU,EAAE,wBAAwB,CAAC,YAAY,EAAE,MAAM,CAAC;SAC3D,CAAC;IACJ,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,WAAW,GAAG;YACZ,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE,eAAe;YAC9B,UAAU,EAAE,wBAAwB,CAAC,cAAc,IAAI,8BAA8B,EAAE,MAAM,CAAC;SAC/F,CAAC;IACJ,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,WAAW,GAAG;YACZ,GAAG,WAAW;YACd,UAAU,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SAChF,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;IACpD,MAAM,IAAI,GAAe;QACvB,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,GAAG,gBAAgB;QACnB,UAAU;QACV,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI;QAC3C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,aAAa,EAAE,aAAa,IAAI,SAAS;KAC1C,CAAC;IAEF,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,UAAU;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,EAAE,CAAC;IACtE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAkB;IAChD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -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(
|
|
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,
|
|
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
|
*/
|
package/dist/skill.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAaA,uFAAuF;AACvF,eAAO,MAAM,wBAAwB,
|
|
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",
|
|
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
|
|
27
|
-
const
|
|
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
|
|
35
|
-
const
|
|
36
|
-
const
|
|
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
|
|
44
|
-
const
|
|
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
|
|
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
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
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
|
|
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);
|