@zephyrdeng/pi-review 0.6.2 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +126 -14
  2. package/README.zh-CN.md +79 -4
  3. package/dist/args.d.ts +8 -0
  4. package/dist/args.d.ts.map +1 -1
  5. package/dist/args.js +167 -28
  6. package/dist/args.js.map +1 -1
  7. package/dist/args.test.d.ts +2 -0
  8. package/dist/args.test.d.ts.map +1 -0
  9. package/dist/args.test.js +125 -0
  10. package/dist/args.test.js.map +1 -0
  11. package/dist/child-process.d.ts +3 -0
  12. package/dist/child-process.d.ts.map +1 -1
  13. package/dist/child-process.js +26 -0
  14. package/dist/child-process.js.map +1 -1
  15. package/dist/child-process.test.js +13 -0
  16. package/dist/child-process.test.js.map +1 -1
  17. package/dist/cli-exit.test.d.ts +2 -0
  18. package/dist/cli-exit.test.d.ts.map +1 -0
  19. package/dist/cli-exit.test.js +84 -0
  20. package/dist/cli-exit.test.js.map +1 -0
  21. package/dist/cli.js +16 -2
  22. package/dist/cli.js.map +1 -1
  23. package/dist/config.d.ts +1 -0
  24. package/dist/config.d.ts.map +1 -1
  25. package/dist/config.js +1 -0
  26. package/dist/config.js.map +1 -1
  27. package/dist/extensions/review.d.ts +2 -0
  28. package/dist/extensions/review.js +22 -0
  29. package/dist/extensions/rv-prompts.d.ts +19 -0
  30. package/dist/extensions/rv-prompts.js +132 -0
  31. package/dist/index.d.ts +22 -7
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +15 -6
  34. package/dist/index.js.map +1 -1
  35. package/dist/json-events.d.ts +71 -0
  36. package/dist/json-events.d.ts.map +1 -1
  37. package/dist/json-events.js +250 -0
  38. package/dist/json-events.js.map +1 -1
  39. package/dist/json-events.test.js +217 -1
  40. package/dist/json-events.test.js.map +1 -1
  41. package/dist/loop.d.ts +36 -0
  42. package/dist/loop.d.ts.map +1 -0
  43. package/dist/loop.js +73 -0
  44. package/dist/loop.js.map +1 -0
  45. package/dist/loop.test.d.ts +2 -0
  46. package/dist/loop.test.d.ts.map +1 -0
  47. package/dist/loop.test.js +83 -0
  48. package/dist/loop.test.js.map +1 -0
  49. package/dist/matcher.d.ts +74 -0
  50. package/dist/matcher.d.ts.map +1 -0
  51. package/dist/matcher.js +202 -0
  52. package/dist/matcher.js.map +1 -0
  53. package/dist/matcher.test.d.ts +2 -0
  54. package/dist/matcher.test.d.ts.map +1 -0
  55. package/dist/matcher.test.js +161 -0
  56. package/dist/matcher.test.js.map +1 -0
  57. package/dist/meta-footer.d.ts +15 -1
  58. package/dist/meta-footer.d.ts.map +1 -1
  59. package/dist/meta-footer.js +108 -0
  60. package/dist/meta-footer.js.map +1 -1
  61. package/dist/meta-footer.test.js +43 -1
  62. package/dist/meta-footer.test.js.map +1 -1
  63. package/dist/panel-aggregate.d.ts +18 -0
  64. package/dist/panel-aggregate.d.ts.map +1 -0
  65. package/dist/panel-aggregate.js +247 -0
  66. package/dist/panel-aggregate.js.map +1 -0
  67. package/dist/panel-aggregate.test.d.ts +2 -0
  68. package/dist/panel-aggregate.test.d.ts.map +1 -0
  69. package/dist/panel-aggregate.test.js +461 -0
  70. package/dist/panel-aggregate.test.js.map +1 -0
  71. package/dist/panel-cancellation.test.d.ts +2 -0
  72. package/dist/panel-cancellation.test.d.ts.map +1 -0
  73. package/dist/panel-cancellation.test.js +24 -0
  74. package/dist/panel-cancellation.test.js.map +1 -0
  75. package/dist/panel-cli.test.d.ts +2 -0
  76. package/dist/panel-cli.test.d.ts.map +1 -0
  77. package/dist/panel-cli.test.js +239 -0
  78. package/dist/panel-cli.test.js.map +1 -0
  79. package/dist/panel-config.d.ts +19 -0
  80. package/dist/panel-config.d.ts.map +1 -0
  81. package/dist/panel-config.js +115 -0
  82. package/dist/panel-config.js.map +1 -0
  83. package/dist/panel-config.test.d.ts +2 -0
  84. package/dist/panel-config.test.d.ts.map +1 -0
  85. package/dist/panel-config.test.js +94 -0
  86. package/dist/panel-config.test.js.map +1 -0
  87. package/dist/panel-loop.test.d.ts +2 -0
  88. package/dist/panel-loop.test.d.ts.map +1 -0
  89. package/dist/panel-loop.test.js +118 -0
  90. package/dist/panel-loop.test.js.map +1 -0
  91. package/dist/panel-tools.test.d.ts +2 -0
  92. package/dist/panel-tools.test.d.ts.map +1 -0
  93. package/dist/panel-tools.test.js +12 -0
  94. package/dist/panel-tools.test.js.map +1 -0
  95. package/dist/panel-usage.d.ts +6 -0
  96. package/dist/panel-usage.d.ts.map +1 -0
  97. package/dist/panel-usage.js +21 -0
  98. package/dist/panel-usage.js.map +1 -0
  99. package/dist/panel-view.d.ts +41 -0
  100. package/dist/panel-view.d.ts.map +1 -0
  101. package/dist/panel-view.js +90 -0
  102. package/dist/panel-view.js.map +1 -0
  103. package/dist/panel-view.test.d.ts +2 -0
  104. package/dist/panel-view.test.d.ts.map +1 -0
  105. package/dist/panel-view.test.js +45 -0
  106. package/dist/panel-view.test.js.map +1 -0
  107. package/dist/panel.d.ts +20 -0
  108. package/dist/panel.d.ts.map +1 -0
  109. package/dist/panel.js +393 -0
  110. package/dist/panel.js.map +1 -0
  111. package/dist/presets.d.ts +2 -1
  112. package/dist/presets.d.ts.map +1 -1
  113. package/dist/presets.js +10 -0
  114. package/dist/presets.js.map +1 -1
  115. package/dist/prompt.d.ts +14 -1
  116. package/dist/prompt.d.ts.map +1 -1
  117. package/dist/prompt.js +61 -15
  118. package/dist/prompt.js.map +1 -1
  119. package/dist/prompt.test.d.ts +2 -0
  120. package/dist/prompt.test.d.ts.map +1 -0
  121. package/dist/prompt.test.js +37 -0
  122. package/dist/prompt.test.js.map +1 -0
  123. package/dist/review-events.d.ts +70 -0
  124. package/dist/review-events.d.ts.map +1 -0
  125. package/dist/review-events.js +52 -0
  126. package/dist/review-events.js.map +1 -0
  127. package/dist/review-events.test.d.ts +2 -0
  128. package/dist/review-events.test.d.ts.map +1 -0
  129. package/dist/review-events.test.js +47 -0
  130. package/dist/review-events.test.js.map +1 -0
  131. package/dist/review-result.d.ts +5 -0
  132. package/dist/review-result.d.ts.map +1 -0
  133. package/dist/review-result.js +98 -0
  134. package/dist/review-result.js.map +1 -0
  135. package/dist/review-result.test.d.ts +2 -0
  136. package/dist/review-result.test.d.ts.map +1 -0
  137. package/dist/review-result.test.js +196 -0
  138. package/dist/review-result.test.js.map +1 -0
  139. package/dist/review.d.ts +10 -4
  140. package/dist/review.d.ts.map +1 -1
  141. package/dist/review.js +82 -20
  142. package/dist/review.js.map +1 -1
  143. package/dist/review.meta.test.js +2 -2
  144. package/dist/review.meta.test.js.map +1 -1
  145. package/dist/skill-protocol.test.d.ts +2 -0
  146. package/dist/skill-protocol.test.d.ts.map +1 -0
  147. package/dist/skill-protocol.test.js +35 -0
  148. package/dist/skill-protocol.test.js.map +1 -0
  149. package/dist/types.d.ts +151 -5
  150. package/dist/types.d.ts.map +1 -1
  151. package/dist/types.js +13 -0
  152. package/dist/types.js.map +1 -1
  153. package/extensions/panel-tool.test.ts +30 -0
  154. package/extensions/panel-tool.ts +169 -0
  155. package/extensions/review.ts +3 -1
  156. package/extensions/rv-prompts.test.ts +8 -1
  157. package/extensions/rv-prompts.ts +6 -4
  158. package/package.json +14 -5
  159. package/resources/panel-presets.json +21 -0
  160. package/resources/review-presets.json +2 -2
  161. package/resources/system-prompt.md +11 -1
  162. package/skills/pi-review/SKILL.md +93 -15
  163. package/skills/pi-review/references/codex-tools.md +19 -6
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=args.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.test.d.ts","sourceRoot":"","sources":["../src/args.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ import assert from "node:assert/strict";
2
+ import { test } from "node:test";
3
+ import { ArgsParseError, parseReviewCommand } from "./args.js";
4
+ test("review remains the default and explicit command", () => {
5
+ assert.equal(parseReviewCommand(["--", "@src"]).command, "review");
6
+ assert.equal(parseReviewCommand(["review", "--", "@src"]).command, "review");
7
+ });
8
+ test("loop parses max rounds and shared review options", () => {
9
+ const parsed = parseReviewCommand([
10
+ "loop",
11
+ "--max-rounds",
12
+ "5",
13
+ "--mode",
14
+ "challenge",
15
+ "--model",
16
+ "provider/model",
17
+ "--",
18
+ "@docs/design.md",
19
+ "focus on rollback",
20
+ ]);
21
+ assert.equal(parsed.command, "loop");
22
+ assert.equal(parsed.maxRounds, 5);
23
+ assert.equal(parsed.mode, "challenge");
24
+ assert.equal(parsed.model, "provider/model");
25
+ assert.deepEqual(parsed.payload, ["@docs/design.md", "focus on rollback"]);
26
+ });
27
+ test("loop uses a small default review budget", () => {
28
+ const parsed = parseReviewCommand(["loop", "--", "@src"]);
29
+ assert.equal(parsed.command, "loop");
30
+ assert.equal(parsed.maxRounds, 3);
31
+ });
32
+ test("loop rejects invalid max-rounds values as usage errors", () => {
33
+ for (const value of ["0", "-1", "1.5", "many", "9007199254740992"]) {
34
+ assert.throws(() => parseReviewCommand(["loop", "--max-rounds", value, "--", "@src"]), (error) => error instanceof ArgsParseError
35
+ && error.exitCode === 2
36
+ && /positive integer/.test(error.message));
37
+ }
38
+ });
39
+ test("loop rejects session reuse and review rejects loop-only flags", () => {
40
+ for (const sessionArgs of [
41
+ ["--keep-session"],
42
+ ["--continue", "/tmp/session.jsonl"],
43
+ ["--name", "gate"],
44
+ ]) {
45
+ assert.throws(() => parseReviewCommand(["loop", ...sessionArgs, "--", "@src"]), /loop cannot be used/);
46
+ }
47
+ assert.throws(() => parseReviewCommand(["review", "--max-rounds", "2", "--", "@src"]), /only be used with loop/);
48
+ });
49
+ test("panel options parse for review and loop", () => {
50
+ const parsed = parseReviewCommand([
51
+ "--reviewers", "3", "--consensus", "quorum", "--min-agree", "2", "--concurrency", "2", "--", "@src",
52
+ ]);
53
+ assert.equal(parsed.reviewers, 3);
54
+ assert.equal(parsed.consensus, "quorum");
55
+ assert.equal(parsed.minAgree, 2);
56
+ assert.equal(parsed.concurrency, 2);
57
+ const loopParsed = parseReviewCommand([
58
+ "loop", "--reviewers", "3", "--consensus", "quorum", "--min-agree", "2", "--max-rounds", "2", "--", "@src",
59
+ ]);
60
+ assert.equal(loopParsed.command, "loop");
61
+ assert.equal(loopParsed.reviewers, 3);
62
+ assert.equal(loopParsed.maxRounds, 2);
63
+ const panelParsed = parseReviewCommand(["--panel", "code-experts", "--consensus", "majority", "--", "@src"]);
64
+ assert.equal(panelParsed.panel, "code-experts");
65
+ assert.equal(panelParsed.consensus, "majority");
66
+ });
67
+ test("panel event output format parses as an opt-in machine contract", () => {
68
+ const parsed = parseReviewCommand(["--reviewers", "2", "--output-format", "events-jsonl", "--", "@src"]);
69
+ assert.equal(parsed.outputFormat, "events-jsonl");
70
+ });
71
+ test("loop rejects events-jsonl because its human loop summary has a separate stdout contract", () => {
72
+ assert.throws(() => parseReviewCommand(["loop", "--reviewers", "2", "--output-format", "events-jsonl", "--", "@src"]), (error) => error instanceof ArgsParseError && /loop cannot be used/.test(error.message));
73
+ });
74
+ test("panel rejects shell access as a usage error before execution begins", () => {
75
+ assert.throws(() => parseReviewCommand(["--reviewers", "2", "--tools", "read,bash", "--", "@src"]), (error) => error instanceof ArgsParseError && /panel reviewers only allow/.test(error.message));
76
+ });
77
+ test("reviewer count must be a positive integer within the limit", () => {
78
+ for (const value of ["0", "-1", "1.5", "many"]) {
79
+ assert.throws(() => parseReviewCommand(["--reviewers", value, "--", "@src"]), (error) => error instanceof ArgsParseError && /positive integer/.test(error.message));
80
+ }
81
+ assert.throws(() => parseReviewCommand(["--reviewers", "9", "--", "@src"]), (error) => error instanceof ArgsParseError && /between 1 and 8/.test(error.message));
82
+ });
83
+ test("minimum agreement must be a positive integer and cannot exceed reviewers", () => {
84
+ assert.throws(() => parseReviewCommand(["--reviewers", "3", "--min-agree", "0", "--", "@src"]), (error) => error instanceof ArgsParseError && /positive integer/.test(error.message));
85
+ assert.throws(() => parseReviewCommand(["--reviewers", "2", "--consensus", "quorum", "--min-agree", "3", "--", "@src"]), (error) => error instanceof ArgsParseError && /cannot exceed reviewer count 2/.test(error.message));
86
+ });
87
+ test("unsupported consensus policy is a usage error", () => {
88
+ assert.throws(() => parseReviewCommand(["--reviewers", "3", "--consensus", "supermajority", "--", "@src"]), (error) => error instanceof ArgsParseError && /unknown consensus policy/.test(error.message));
89
+ });
90
+ test("min-agree is only meaningful with quorum consensus", () => {
91
+ assert.throws(() => parseReviewCommand(["--reviewers", "3", "--consensus", "majority", "--min-agree", "2", "--", "@src"]), (error) => error instanceof ArgsParseError && /only meaningful with --consensus quorum/.test(error.message));
92
+ });
93
+ test("reviewers and panel cannot be combined (any reviewer count)", () => {
94
+ for (const count of ["3", "1"]) {
95
+ assert.throws(() => parseReviewCommand(["--reviewers", count, "--panel", "code-experts", "--", "@src"]), (error) => error instanceof ArgsParseError && /cannot be used with --panel/.test(error.message));
96
+ }
97
+ });
98
+ test("panel options require an active panel (reviewers > 1 or panel)", () => {
99
+ for (const args of [
100
+ ["--consensus", "any"],
101
+ ["--min-agree", "2"],
102
+ ["--concurrency", "2"],
103
+ ["--consensus-model", "openai/gpt-5.5"],
104
+ ]) {
105
+ assert.throws(() => parseReviewCommand([...args, "--", "@src"]), (error) => error instanceof ArgsParseError && /panel options require/.test(error.message));
106
+ }
107
+ });
108
+ test("panel cannot be used with session reuse flags", () => {
109
+ for (const sessionArgs of [
110
+ ["--keep-session"],
111
+ ["--continue", "/tmp/session.jsonl"],
112
+ ["--name", "gate"],
113
+ ]) {
114
+ assert.throws(() => parseReviewCommand(["--reviewers", "3", ...sessionArgs, "--", "@src"]), (error) => error instanceof ArgsParseError && /panel cannot be used with/.test(error.message));
115
+ }
116
+ });
117
+ test("concurrency cannot exceed reviewer count", () => {
118
+ assert.throws(() => parseReviewCommand(["--reviewers", "2", "--concurrency", "5", "--", "@src"]), (error) => error instanceof ArgsParseError && /--concurrency 5 cannot exceed reviewer count 2/.test(error.message));
119
+ });
120
+ test("single reviewer with no panel flags keeps existing single-review parsing", () => {
121
+ const parsed = parseReviewCommand(["--reviewers", "1", "--", "@src"]);
122
+ assert.equal(parsed.reviewers, 1);
123
+ assert.equal(parsed.panel, undefined);
124
+ });
125
+ //# sourceMappingURL=args.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.test.js","sourceRoot":"","sources":["../src/args.test.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export declare const DEFAULT_STREAM_CAPTURE_LIMIT: number;
9
9
  type SpawnCommon = {
10
10
  cwd?: string;
11
11
  env?: NodeJS.ProcessEnv;
12
+ signal?: AbortSignal;
13
+ /** Start a separate process group so abort can terminate descendants too. */
14
+ processGroup?: boolean;
12
15
  };
13
16
  export declare function spawnBufferedChild(command: string, argv: string[], options: SpawnCommon): ChildRunResult;
14
17
  export declare function spawnStreamingChild(command: string, argv: string[], options: SpawnCommon & {
@@ -1 +1 @@
1
- {"version":3,"file":"child-process.d.ts","sourceRoot":"","sources":["../src/child-process.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAmB,CAAC;AAE7D,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAQF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,WAAW,GACnB,cAAc,CAchB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,WAAW,GAAG;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,cAAc,CAAC,CAqDzB"}
1
+ {"version":3,"file":"child-process.d.ts","sourceRoot":"","sources":["../src/child-process.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAmB,CAAC;AAE7D,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAQF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,WAAW,GACnB,cAAc,CAchB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,WAAW,GAAG;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,cAAc,CAAC,CA2EzB"}
@@ -30,6 +30,9 @@ export async function spawnStreamingChild(command, argv, options) {
30
30
  cwd: options.cwd,
31
31
  env: options.env,
32
32
  stdio: ["ignore", "pipe", "pipe"],
33
+ // Preserve terminal signal delivery for ordinary streaming children.
34
+ // Panel callers opt into a group so their abort signal reaches Pi descendants.
35
+ detached: options.processGroup === true && process.platform !== "win32",
33
36
  };
34
37
  const child = spawn(command, argv, spawnOpts);
35
38
  let stdout = "";
@@ -39,8 +42,31 @@ export async function spawnStreamingChild(command, argv, options) {
39
42
  if (settled)
40
43
  return;
41
44
  settled = true;
45
+ options.signal?.removeEventListener("abort", abort);
42
46
  resolve(result);
43
47
  };
48
+ const abort = () => {
49
+ if (child.pid === undefined || child.killed)
50
+ return;
51
+ try {
52
+ if (options.processGroup && process.platform === "win32") {
53
+ spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore" });
54
+ }
55
+ else if (options.processGroup) {
56
+ process.kill(-child.pid, "SIGTERM");
57
+ }
58
+ else {
59
+ child.kill("SIGTERM");
60
+ }
61
+ }
62
+ catch {
63
+ child.kill("SIGTERM");
64
+ }
65
+ };
66
+ if (options.signal?.aborted)
67
+ abort();
68
+ else
69
+ options.signal?.addEventListener("abort", abort, { once: true });
44
70
  child.stdout?.setEncoding("utf8");
45
71
  child.stderr?.setEncoding("utf8");
46
72
  child.stdout?.on("data", (chunk) => {
@@ -1 +1 @@
1
- {"version":3,"file":"child-process.js","sourceRoot":"","sources":["../src/child-process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"child-process.js","sourceRoot":"","sources":["../src/child-process.ts"],"names":[],"mappings":"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"}
@@ -52,4 +52,17 @@ test("spawnStreamingChild keeps captured stdout bounded while forwarding all out
52
52
  assert.equal(r.stdout, "efghij");
53
53
  assert.equal(chunks.join(""), "abcdefghij");
54
54
  });
55
+ test("spawnStreamingChild terminates an opted-in process group when aborted", async () => {
56
+ const controller = new AbortController();
57
+ const { stream } = collectSink();
58
+ const result = spawnStreamingChild(process.execPath, ["-e", "setInterval(() => {}, 1000)"], {
59
+ stdoutSink: stream,
60
+ stderrSink: stream,
61
+ signal: controller.signal,
62
+ processGroup: true,
63
+ });
64
+ setTimeout(() => controller.abort(), 30);
65
+ const child = await result;
66
+ assert.equal(child.signal, "SIGTERM");
67
+ });
55
68
  //# sourceMappingURL=child-process.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"child-process.test.js","sourceRoot":"","sources":["../src/child-process.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"child-process.test.js","sourceRoot":"","sources":["../src/child-process.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-exit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-exit.test.d.ts","sourceRoot":"","sources":["../src/cli-exit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import assert from "node:assert/strict";
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { spawnSync } from "node:child_process";
6
+ import { fileURLToPath } from "node:url";
7
+ import { test } from "node:test";
8
+ function tsxLoaderArgs() {
9
+ const args = [];
10
+ for (let index = 0; index < process.execArgv.length - 1; index += 1) {
11
+ const flag = process.execArgv[index];
12
+ const value = process.execArgv[index + 1];
13
+ if ((flag === "--require" || flag === "--import") && value?.includes("tsx")) {
14
+ args.push(flag, value);
15
+ index += 1;
16
+ }
17
+ }
18
+ return args;
19
+ }
20
+ function runCli(fakePi, verdict, childExit = "0") {
21
+ const cliPath = fileURLToPath(new URL("./cli.ts", import.meta.url));
22
+ return spawnSync(process.execPath, [...tsxLoaderArgs(), cliPath, "--no-stream", "--", "@src"], {
23
+ cwd: path.dirname(fileURLToPath(new URL("../package.json", import.meta.url))),
24
+ env: {
25
+ ...process.env,
26
+ PI_BIN: fakePi,
27
+ FAKE_REVIEW_VERDICT: verdict,
28
+ FAKE_REVIEW_EXIT: childExit,
29
+ },
30
+ encoding: "utf8",
31
+ timeout: 30_000,
32
+ });
33
+ }
34
+ test("invalid loop arguments print usage and exit 2", () => {
35
+ const cliPath = fileURLToPath(new URL("./cli.ts", import.meta.url));
36
+ const result = spawnSync(process.execPath, [...tsxLoaderArgs(), cliPath, "loop", "--max-rounds", "0", "--", "@src"], { encoding: "utf8", timeout: 30_000 });
37
+ assert.equal(result.error, undefined);
38
+ assert.equal(result.status, 2);
39
+ assert.match(result.stderr, /--max-rounds must be a positive integer/);
40
+ assert.match(result.stderr, /Usage:/);
41
+ assert.match(result.stderr, /pi-review loop/);
42
+ });
43
+ test("single-review CLI maps structured status to gate exit codes", (t) => {
44
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-cli-exit-"));
45
+ t.after(() => fs.rmSync(tempDir, { recursive: true, force: true }));
46
+ const fakePi = path.join(tempDir, "fake-pi");
47
+ fs.writeFileSync(fakePi, `#!/usr/bin/env node
48
+ const verdict = process.env.FAKE_REVIEW_VERDICT;
49
+ const findings = verdict === "request_changes"
50
+ ? "### F1: Fix the gate\\n- Severity: high\\n- Path: src/cli.ts\\n- Actionable: yes"
51
+ : "No material findings.";
52
+ const text = "## Verdict\\n" + verdict + "\\n\\n## Summary\\n- Fixture.\\n\\n## Findings\\n" + findings + "\\n\\n## Risks and Blind Spots\\nNone.\\n\\n## Open Questions\\nNone.\\n";
53
+ function line(obj) { process.stdout.write(JSON.stringify(obj) + "\\n"); }
54
+ line({ type: "session", version: 3, id: "s1" });
55
+ line({ type: "agent_start" });
56
+ line({ type: "turn_start" });
57
+ line({ type: "message_start", message: { role: "user", content: [{ type: "text", text: "review" }] } });
58
+ line({ type: "message_end", message: { role: "user", content: [{ type: "text", text: "review" }] } });
59
+ line({ type: "message_start", message: { role: "assistant", content: [], model: "fake/model", usage: { input: 100, output: 50, cacheRead: 0, cacheWrite: 0, reasoning: 0, totalTokens: 150 } } });
60
+ line({ type: "message_update", assistantMessageEvent: { type: "text_delta", delta: text, partial: { role: "assistant" } } });
61
+ line({ type: "message_update", assistantMessageEvent: { type: "text_end", content: text, partial: { role: "assistant" } } });
62
+ line({ type: "message_end", message: { role: "assistant", content: [{ type: "text", text }], model: "fake/model", usage: { input: 100, output: 50, cacheRead: 0, cacheWrite: 0, reasoning: 0, totalTokens: 150 }, stopReason: "stop" } });
63
+ line({ type: "turn_end", message: { role: "assistant", content: [{ type: "text", text }], usage: { input: 100, output: 50, totalTokens: 150 } } });
64
+ line({ type: "agent_end", messages: [{ role: "user", content: [{ type: "text", text: "review" }] }, { role: "assistant", content: [{ type: "text", text }], responseModel: "fake/model" }] });
65
+ process.exit(Number(process.env.FAKE_REVIEW_EXIT ?? "0"));
66
+ `);
67
+ fs.chmodSync(fakePi, 0o755);
68
+ const scenarios = [
69
+ { verdict: "approve", childExit: "0", expectedStatus: "clean", expectedExit: 0 },
70
+ { verdict: "request_changes", childExit: "0", expectedStatus: "has_findings", expectedExit: 1 },
71
+ { verdict: "needs_clarification", childExit: "0", expectedStatus: "needs_human", expectedExit: 3 },
72
+ { verdict: "approve", childExit: "9", expectedStatus: "blocked", expectedExit: 4 },
73
+ ];
74
+ for (const scenario of scenarios) {
75
+ const result = runCli(fakePi, scenario.verdict, scenario.childExit);
76
+ assert.equal(result.error, undefined);
77
+ assert.equal(result.status, scenario.expectedExit, result.stderr);
78
+ const metaLine = result.stderr.split("\n").find((line) => line.startsWith("PI_REVIEW_META_JSON: "));
79
+ assert.ok(metaLine, result.stderr);
80
+ const meta = JSON.parse(metaLine.slice("PI_REVIEW_META_JSON: ".length));
81
+ assert.equal(meta.status, scenario.expectedStatus);
82
+ }
83
+ });
84
+ //# sourceMappingURL=cli-exit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-exit.test.js","sourceRoot":"","sources":["../src/cli-exit.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,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;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS,aAAa;IACpB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,UAAU,CAAC,IAAI,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,MAAc,EAAE,OAAe,EAAE,SAAS,GAAG,GAAG;IAC9D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,SAAS,CACd,OAAO,CAAC,QAAQ,EAChB,CAAC,GAAG,aAAa,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,EAC1D;QACE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,MAAM,EAAE,MAAM;YACd,mBAAmB,EAAE,OAAO;YAC5B,gBAAgB,EAAE,SAAS;SAC5B;QACD,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,MAAM;KAChB,CACF,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,CAAC,QAAQ,EAChB,CAAC,GAAG,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,EACxE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CACtC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6DAA6D,EAAE,CAAC,CAAC,EAAE,EAAE;IACxE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE;;;;;;;;;;;;;;;;;;;CAmB1B,CAAC,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAG;QAChB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE;QAChF,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,EAAE;QAC/F,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,EAAE;QAClG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE;KACnF,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpG,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC"}
package/dist/cli.js CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { parseArgs, usage } from "./args.js";
3
2
  import { isInstallHelp } from "./install-args.js";
4
- import { runModels, runReview } from "./review.js";
3
+ import { isPanelActive, parseArgs, usage } from "./args.js";
4
+ import { readReviewStdin, runModels, runReview, runReviewOnce } from "./review.js";
5
+ import { formatLoopSummary, runReviewLoop } from "./loop.js";
6
+ import { runPanelReview, runPanelReviewOnce } from "./panel.js";
5
7
  import { resolveConfig } from "./config.js";
6
8
  import { installSkill, uninstallSkill } from "./skill.js";
7
9
  import { runUpdate } from "./update.js";
@@ -29,6 +31,18 @@ else if (parsed.command === "install-skill") {
29
31
  else if (parsed.command === "uninstall-skill") {
30
32
  uninstallSkill(parsed.extraArgs);
31
33
  }
34
+ else if (parsed.command === "loop") {
35
+ const stdinText = readReviewStdin();
36
+ const runOne = isPanelActive(parsed)
37
+ ? () => runPanelReviewOnce(parsed, stdinText)
38
+ : () => runReviewOnce(parsed, stdinText);
39
+ const result = await runReviewLoop(parsed.maxRounds, runOne);
40
+ process.stdout.write(`${formatLoopSummary(result)}\n`);
41
+ process.exit(result.exitCode);
42
+ }
43
+ else if (isPanelActive(parsed)) {
44
+ await runPanelReview(parsed);
45
+ }
32
46
  else {
33
47
  await runReview(parsed);
34
48
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,IAAI,aAAa,CAAC,MAAM,CAAC;IAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpC,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;IACvC,SAAS,EAAE,CAAC;AACd,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;IACxC,UAAU,CAAC;QACT,EAAE,EAAE,MAAM,CAAC,SAAS,KAAK,KAAK;QAC9B,MAAM,EAAE,MAAM,CAAC,aAAa,KAAK,KAAK;QACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;KAClC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;IAC9C,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;IAChD,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC;KAAM,CAAC;IACN,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAuB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,IAAI,aAAa,CAAC,MAAM,CAAC;IAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpC,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;IACvC,SAAS,EAAE,CAAC;AACd,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;IACxC,UAAU,CAAC;QACT,EAAE,EAAE,MAAM,CAAC,SAAS,KAAK,KAAK;QAC9B,MAAM,EAAE,MAAM,CAAC,aAAa,KAAK,KAAK;QACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;KAClC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;IAC9C,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;IAChD,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC;KAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QAClC,CAAC,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC;QAC7C,CAAC,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,SAAU,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;KAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;IACjC,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;KAAM,CAAC;IACN,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export interface Config {
2
2
  piBin: string;
3
3
  presetsFile: string;
4
+ panelPresetsFile: string;
4
5
  systemPromptFile: string;
5
6
  sessionsRoot: string;
6
7
  reviewHome: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAStC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAUtC"}
package/dist/config.js CHANGED
@@ -11,6 +11,7 @@ export function resolveConfig() {
11
11
  piBin: process.env.PI_BIN || "pi",
12
12
  reviewHome,
13
13
  presetsFile: process.env.PI_REVIEW_PRESETS || path.join(reviewHome, "review-presets.json"),
14
+ panelPresetsFile: process.env.PI_REVIEW_PANEL_PRESETS || path.join(reviewHome, "panel-presets.json"),
14
15
  systemPromptFile: process.env.PI_REVIEW_SYSTEM_PROMPT || path.join(reviewHome, "system-prompt.md"),
15
16
  sessionsRoot: process.env.PI_REVIEW_SESSION_DIR || path.join(DEFAULT_DATA_DIR, "sessions"),
16
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,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,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAUrE,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,oBAAoB,CAAC;IACtE,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI;QACjC,UAAU;QACV,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC;QAC1F,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAClG,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;KAC3F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,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,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAWrE,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,oBAAoB,CAAC;IACtE,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI;QACjC,UAAU;QACV,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC;QAC1F,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC;QACpG,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAClG,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;KAC3F,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ export default function piReviewExtension(pi: ExtensionAPI): void;
@@ -0,0 +1,22 @@
1
+ import { buildRvOrchestrationPrompt, parseRvArgs, RV_COMPLETIONS } from "./rv-prompts.js";
2
+ export default function piReviewExtension(pi) {
3
+ pi.registerCommand("rv", {
4
+ description: "Delegate pi-review to the agent (English prompts). Usage: /rv [--mode plan|challenge] [--model id] [--keep-session] @file-or-text | models",
5
+ getArgumentCompletions: (prefix) => {
6
+ const filtered = RV_COMPLETIONS.filter((item) => item.value.startsWith(prefix));
7
+ return filtered.length
8
+ ? filtered.map(({ value, hint }) => ({ value, label: value, description: hint }))
9
+ : null;
10
+ },
11
+ handler: async (rawArgs, ctx) => {
12
+ const trimmed = rawArgs.trim();
13
+ const parsed = parseRvArgs(trimmed);
14
+ const prompt = buildRvOrchestrationPrompt(parsed);
15
+ if (!trimmed && !parsed.modelsOnly) {
16
+ ctx.ui.notify("/rv needs a target or `models`. Try: /rv @path or /rv models", "warning");
17
+ return;
18
+ }
19
+ pi.sendUserMessage(prompt);
20
+ },
21
+ });
22
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * English orchestration prompts for /rv — parent Pi agent runs pi-review per skill.
3
+ * Child review sessions use presets in resources/review-presets.json (also English).
4
+ */
5
+ export type RvParsed = {
6
+ mode: "code" | "plan" | "challenge";
7
+ model?: string;
8
+ keepSession: boolean;
9
+ continueHandle?: string;
10
+ modelsOnly: boolean;
11
+ target: string;
12
+ };
13
+ export declare function parseRvArgs(raw: string): RvParsed;
14
+ export declare function buildRvOrchestrationPrompt(parsed: RvParsed): string;
15
+ /** Short labels for TUI completions (English). */
16
+ export declare const RV_COMPLETIONS: {
17
+ value: string;
18
+ hint: string;
19
+ }[];