@zephyrdeng/pi-review 0.12.1 → 0.13.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 +16 -8
- package/README.zh-CN.md +11 -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 +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.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 +1 -1
- package/dist/types.d.ts.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/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);
|
package/dist/skill.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACzE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAC/D,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,uFAAuF;AACvF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -48,7 +48,7 @@ export interface ParsedArgs {
|
|
|
48
48
|
command: "review" | "loop" | "models" | "install" | "install-skill" | "uninstall-skill" | "update";
|
|
49
49
|
/** For `install`: run `pi install npm:@zephyrdeng/pi-review` */
|
|
50
50
|
installPi?: boolean;
|
|
51
|
-
/** For `install`: run agent skill install (skills CLI / Claude fallback) */
|
|
51
|
+
/** For `install`: run agent skill install (skills CLI / Claude + agy direct fallback) */
|
|
52
52
|
installAgents?: boolean;
|
|
53
53
|
extraArgs?: string[];
|
|
54
54
|
mode: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,2EAA4E,CAAC;AAClG,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,eAAO,MAAM,eAAe,8DAA+D,CAAC;AAC5F,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oGAAoG;IACpG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IACnG,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { createPanelViewState, reducePanelEvent } from "@zephyrdeng/pi-review";
|
|
|
4
4
|
import {
|
|
5
5
|
buildPanelResultContent,
|
|
6
6
|
expandHint,
|
|
7
|
+
normalizePanelToolParams,
|
|
7
8
|
panelToolParamError,
|
|
8
9
|
PanelResultView,
|
|
9
10
|
registerPanelReviewTool,
|
|
@@ -18,11 +19,24 @@ const theme = {
|
|
|
18
19
|
test("panel tool boundary rejects single-reviewer and out-of-range widths", () => {
|
|
19
20
|
assert.match(panelToolParamError({ target: "@src", reviewers: 1 }) ?? "", /between 2 and 8/);
|
|
20
21
|
assert.match(panelToolParamError({ target: "@src", reviewers: 9 }) ?? "", /between 2 and 8/);
|
|
21
|
-
assert.
|
|
22
|
+
assert.equal(panelToolParamError({ target: "@src", panel: "code-experts", reviewers: 2 }), undefined);
|
|
22
23
|
assert.equal(panelToolParamError({ target: "@src", reviewers: 2 }), undefined);
|
|
23
24
|
assert.equal(panelToolParamError({ target: "@src", panel: "code-experts" }), undefined);
|
|
24
25
|
});
|
|
25
26
|
|
|
27
|
+
test("panel + reviewers prefers panel instead of hard-failing", () => {
|
|
28
|
+
const normalized = normalizePanelToolParams({
|
|
29
|
+
target: "@src",
|
|
30
|
+
panel: "code-experts",
|
|
31
|
+
reviewers: 3,
|
|
32
|
+
});
|
|
33
|
+
assert.ok(!("error" in normalized));
|
|
34
|
+
assert.equal(normalized.panel, "code-experts");
|
|
35
|
+
assert.equal(normalized.reviewers, undefined);
|
|
36
|
+
assert.match(normalized.note ?? "", /ignored reviewers=3/);
|
|
37
|
+
assert.match(normalized.note ?? "", /code-experts/);
|
|
38
|
+
});
|
|
39
|
+
|
|
26
40
|
test("registered pi_review rejects reviewers=1 before spawning the panel CLI", async () => {
|
|
27
41
|
let registered: { execute: (...args: any[]) => Promise<any> } | undefined;
|
|
28
42
|
registerPanelReviewTool({
|
package/extensions/panel-tool.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
formatTokens,
|
|
14
14
|
formatUsage,
|
|
15
15
|
reducePanelEvent,
|
|
16
|
+
resolveExclusivePanelShape,
|
|
16
17
|
spawnStreamingChild,
|
|
17
18
|
type PanelReviewMeta,
|
|
18
19
|
type PanelViewState,
|
|
@@ -147,15 +148,21 @@ function reviewerSummaryLines(state: PanelViewState): string[] {
|
|
|
147
148
|
* Full panel conclusion for the parent LLM and expanded TUI.
|
|
148
149
|
* Pure plain text / ASCII only — Pi does not render markdown in tool results.
|
|
149
150
|
*/
|
|
150
|
-
export function buildPanelResultContent(state: PanelViewState, error?: string): string {
|
|
151
|
+
export function buildPanelResultContent(state: PanelViewState, error?: string, note?: string): string {
|
|
151
152
|
const meta = state.meta;
|
|
152
|
-
if (!meta && !error)
|
|
153
|
-
|
|
153
|
+
if (!meta && !error) {
|
|
154
|
+
return note ? `${PANEL_TOOL_DISPLAY_NAME}: ${note}\n\nPanel completed: unknown` : "Panel completed: unknown";
|
|
155
|
+
}
|
|
156
|
+
if (!meta) {
|
|
157
|
+
const body = error ?? "Panel completed: unknown";
|
|
158
|
+
return note ? `${PANEL_TOOL_DISPLAY_NAME}: ${note}\n\n${body}` : body;
|
|
159
|
+
}
|
|
154
160
|
|
|
155
161
|
const findings = formatFindingsPlain(meta);
|
|
156
162
|
const ascii = formatPanelMetaAscii(meta);
|
|
157
163
|
const summaries = reviewerSummaryLines(state);
|
|
158
164
|
const parts = [
|
|
165
|
+
note ? `${PANEL_TOOL_DISPLAY_NAME}: ${note}` : "",
|
|
159
166
|
findings,
|
|
160
167
|
ascii,
|
|
161
168
|
summaries.length ? `Reviewer summaries:\n${summaries.join("\n")}` : "",
|
|
@@ -259,15 +266,35 @@ export type PanelToolParams = {
|
|
|
259
266
|
reviewers?: number;
|
|
260
267
|
};
|
|
261
268
|
|
|
262
|
-
|
|
263
|
-
|
|
269
|
+
export type NormalizedPanelToolParams = {
|
|
270
|
+
panel?: string;
|
|
271
|
+
reviewers?: number;
|
|
272
|
+
/** Set when both panel and reviewers were provided and reviewers was dropped. */
|
|
273
|
+
note?: string;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Normalize agent tool args. Named presets own width/roles; if both `panel` and
|
|
278
|
+
* `reviewers` are set, prefer panel (common host habit) instead of hard-failing.
|
|
279
|
+
*/
|
|
280
|
+
export function normalizePanelToolParams(params: PanelToolParams): NormalizedPanelToolParams | { error: string } {
|
|
264
281
|
if (params.reviewers !== undefined) {
|
|
265
282
|
if (!Number.isSafeInteger(params.reviewers) || params.reviewers < 2 || params.reviewers > 8) {
|
|
266
|
-
return "reviewers must be an integer between 2 and 8; use the shell CLI for a single reviewer";
|
|
283
|
+
return { error: "reviewers must be an integer between 2 and 8; use the shell CLI for a single reviewer" };
|
|
267
284
|
}
|
|
268
|
-
if (params.panel) return "panel cannot be combined with reviewers";
|
|
269
285
|
}
|
|
270
|
-
|
|
286
|
+
const shape = resolveExclusivePanelShape(params);
|
|
287
|
+
const note =
|
|
288
|
+
shape.ignoredReviewers !== undefined
|
|
289
|
+
? `ignored reviewers=${shape.ignoredReviewers}; panel "${shape.panel}" defines the reviewer set`
|
|
290
|
+
: undefined;
|
|
291
|
+
return { panel: shape.panel, reviewers: shape.reviewers, ...(note ? { note } : {}) };
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/** Runtime guard for direct tool calls; schema validation is not the only boundary. */
|
|
295
|
+
export function panelToolParamError(params: PanelToolParams): string | undefined {
|
|
296
|
+
const normalized = normalizePanelToolParams(params);
|
|
297
|
+
return "error" in normalized ? normalized.error : undefined;
|
|
271
298
|
}
|
|
272
299
|
|
|
273
300
|
export function registerPanelReviewTool(pi: ExtensionAPI): void {
|
|
@@ -279,8 +306,8 @@ export function registerPanelReviewTool(pi: ExtensionAPI): void {
|
|
|
279
306
|
parameters: Type.Object({
|
|
280
307
|
target: Type.String({ description: "Review target as given by the user, such as @src, @src/foo.ts, or a free-text brief. Directories stay tool path targets; only real files are attached." }),
|
|
281
308
|
mode: Type.Optional(Type.String({ description: "Review mode; defaults to code." })),
|
|
282
|
-
panel: Type.Optional(Type.String({ description: "Named panel preset; defaults to code-experts when reviewers is omitted." })),
|
|
283
|
-
reviewers: Type.Optional(Type.Number({ minimum: 2, maximum: 8, description: "Independent reviewer count (2-8).
|
|
309
|
+
panel: Type.Optional(Type.String({ description: "Named panel preset; defaults to code-experts when reviewers is omitted. If both panel and reviewers are set, panel wins." })),
|
|
310
|
+
reviewers: Type.Optional(Type.Number({ minimum: 2, maximum: 8, description: "Independent reviewer count (2-8). Omit when panel is set (panel wins if both appear). Single review uses the shell CLI." })),
|
|
284
311
|
reviewerModels: Type.Optional(Type.Array(Type.String(), { description: "Per-reviewer models as id=provider/model[:thinking] (e.g. r1=openai/gpt-5.6-sol:low). Trailing :thinking wins over shared thinking." })),
|
|
285
312
|
consensus: Type.Optional(Type.String({ description: "any | quorum | majority | unanimous" })),
|
|
286
313
|
minAgree: Type.Optional(Type.Number({ description: "Quorum threshold when consensus=quorum" })),
|
|
@@ -325,20 +352,21 @@ export function registerPanelReviewTool(pi: ExtensionAPI): void {
|
|
|
325
352
|
},
|
|
326
353
|
});
|
|
327
354
|
// Preserve the full panel configuration and enforce the panel-only tool boundary.
|
|
328
|
-
const
|
|
329
|
-
if (
|
|
355
|
+
const normalized = normalizePanelToolParams(params);
|
|
356
|
+
if ("error" in normalized) {
|
|
330
357
|
setAmbientStatus(toolCtx, undefined);
|
|
331
358
|
return {
|
|
332
|
-
content: [{ type: "text", text: `${PANEL_TOOL_DISPLAY_NAME}: ${
|
|
333
|
-
details: { state, error:
|
|
359
|
+
content: [{ type: "text", text: `${PANEL_TOOL_DISPLAY_NAME}: ${normalized.error}` }],
|
|
360
|
+
details: { state, error: normalized.error },
|
|
334
361
|
isError: true,
|
|
335
362
|
};
|
|
336
363
|
}
|
|
364
|
+
const shapeNote = normalized.note;
|
|
337
365
|
const args = [cliPath, "--mode", params.mode ?? "code", "--output-format", "events-jsonl"];
|
|
338
|
-
if (
|
|
339
|
-
args.push("--reviewers", String(
|
|
366
|
+
if (normalized.reviewers !== undefined) {
|
|
367
|
+
args.push("--reviewers", String(normalized.reviewers));
|
|
340
368
|
} else {
|
|
341
|
-
args.push("--panel",
|
|
369
|
+
args.push("--panel", normalized.panel ?? "code-experts");
|
|
342
370
|
}
|
|
343
371
|
for (const mapping of params.reviewerModels ?? []) args.push("--reviewer-model", mapping);
|
|
344
372
|
if (params.consensus) args.push("--consensus", params.consensus);
|
|
@@ -376,14 +404,16 @@ export function registerPanelReviewTool(pi: ExtensionAPI): void {
|
|
|
376
404
|
const details: PanelToolDetails = { state, ...(error ? { error } : {}) };
|
|
377
405
|
return {
|
|
378
406
|
// Parent LLM must receive the full conclusion; details remain the TUI rendering source.
|
|
379
|
-
content: [{ type: "text", text: buildPanelResultContent(state, error) }],
|
|
407
|
+
content: [{ type: "text", text: buildPanelResultContent(state, error, shapeNote) }],
|
|
380
408
|
details,
|
|
381
409
|
...(error ? { isError: true } : {}),
|
|
382
410
|
};
|
|
383
411
|
},
|
|
384
412
|
renderCall(args, theme, context) {
|
|
385
413
|
const text = context.lastComponent instanceof Text ? context.lastComponent : new Text("", 0, 0);
|
|
386
|
-
const
|
|
414
|
+
const shape = resolveExclusivePanelShape(args);
|
|
415
|
+
const width =
|
|
416
|
+
shape.reviewers !== undefined ? `reviewers=${shape.reviewers}` : (shape.panel ?? "code-experts");
|
|
387
417
|
text.setText(theme.fg("toolTitle", theme.bold(`${PANEL_TOOL_DISPLAY_NAME} `)) + theme.fg("muted", `${width} · ${args.mode ?? "code"} · ${args.target}`));
|
|
388
418
|
return text;
|
|
389
419
|
},
|
|
@@ -77,7 +77,7 @@ export const FLAG_HINTS: Record<string, string> = {
|
|
|
77
77
|
"--max-rounds": "Loop hard budget: how many review gates (not reviewer count)",
|
|
78
78
|
"--until": "Loop stop goal: clean",
|
|
79
79
|
"--reviewers": "Panel width: independent reviewers per gate (1-8)",
|
|
80
|
-
"--panel": "Named expert panel preset (
|
|
80
|
+
"--panel": "Named expert panel preset (if both set with --reviewers, --panel wins)",
|
|
81
81
|
"--reviewer-model": "Per-reviewer model: pick rK= then model (repeatable)",
|
|
82
82
|
"--consensus": "any | quorum | majority | unanimous",
|
|
83
83
|
"--min-agree": "Quorum threshold (quorum only)",
|
|
@@ -84,7 +84,8 @@ describe("parseRvArgs / validateRvParsed", () => {
|
|
|
84
84
|
assert.match(prompt, /natural-language review request/);
|
|
85
85
|
assert.match(prompt, /Do not expand directory targets into multi-file lists/);
|
|
86
86
|
assert.match(prompt, /panel="code-experts"/);
|
|
87
|
-
assert.match(prompt, /
|
|
87
|
+
assert.match(prompt, /Pass only one of panel or reviewers/);
|
|
88
|
+
assert.match(prompt, /panel wins/);
|
|
88
89
|
assert.match(prompt, /Slash commands select strategy only/);
|
|
89
90
|
assert.doesNotMatch(prompt, /@src\/panel\.ts|@src\/json-events\.ts/);
|
|
90
91
|
});
|
|
@@ -235,10 +236,19 @@ describe("parseRvArgs / validateRvParsed", () => {
|
|
|
235
236
|
]);
|
|
236
237
|
});
|
|
237
238
|
|
|
238
|
-
it("
|
|
239
|
+
it("panel + reviewers is accepted and builders prefer panel", () => {
|
|
239
240
|
const both = parseRvArgs("--reviewers 3 --panel code-experts @src", "loop");
|
|
240
|
-
assert.equal(validateRvParsed(both).ok,
|
|
241
|
+
assert.equal(validateRvParsed(both).ok, true);
|
|
242
|
+
const argv = buildPiReviewArgv(both, "@src");
|
|
243
|
+
assert.ok(argv.includes("--panel"));
|
|
244
|
+
assert.ok(argv.includes("code-experts"));
|
|
245
|
+
assert.ok(!argv.includes("--reviewers"));
|
|
246
|
+
const instruction = buildPiReviewToolCallInstruction(both, "@src");
|
|
247
|
+
assert.match(instruction, /panel="code-experts"/);
|
|
248
|
+
assert.doesNotMatch(instruction, /reviewers=3/);
|
|
249
|
+
});
|
|
241
250
|
|
|
251
|
+
it("rejects incompatible panel strategy combinations", () => {
|
|
242
252
|
const badConsensus = parseRvArgs("--reviewers 3 --consensus nope @src", "loop");
|
|
243
253
|
assert.equal(validateRvParsed(badConsensus).ok, false);
|
|
244
254
|
|