@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/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);
package/dist/skill.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"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"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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.match(panelToolParamError({ target: "@src", panel: "code-experts", reviewers: 2 }) ?? "", /cannot be combined/);
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({
@@ -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) return "Panel completed: unknown";
153
- if (!meta) return error ?? "Panel completed: unknown";
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
- /** Runtime guard for direct tool calls; schema validation is not the only boundary. */
263
- export function panelToolParamError(params: PanelToolParams): string | undefined {
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
- return undefined;
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). Cannot combine with panel; single review uses the shell CLI." })),
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 paramError = panelToolParamError(params);
329
- if (paramError) {
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}: ${paramError}` }],
333
- details: { state, error: paramError },
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 (params.reviewers !== undefined) {
339
- args.push("--reviewers", String(params.reviewers));
366
+ if (normalized.reviewers !== undefined) {
367
+ args.push("--reviewers", String(normalized.reviewers));
340
368
  } else {
341
- args.push("--panel", params.panel ?? "code-experts");
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 width = args.reviewers !== undefined ? `reviewers=${args.reviewers}` : (args.panel ?? "code-experts");
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 (cannot combine with --reviewers)",
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, /Do not drop panel\/reviewers\/reviewerModels\/consensus fields/);
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("rejects incompatible panel strategy combinations", () => {
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, false);
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