@zephyrdeng/pi-review 0.17.3 → 0.18.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.
- package/README.md +6 -0
- package/README.zh-CN.md +6 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +4 -0
- package/dist/args.js.map +1 -1
- package/dist/args.test.js +5 -0
- package/dist/args.test.js.map +1 -1
- package/dist/panel.d.ts +5 -0
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js +25 -13
- package/dist/panel.js.map +1 -1
- package/dist/review.d.ts +20 -0
- package/dist/review.d.ts.map +1 -1
- package/dist/review.js +50 -1
- package/dist/review.js.map +1 -1
- package/dist/rules-argv.test.d.ts +2 -0
- package/dist/rules-argv.test.d.ts.map +1 -0
- package/dist/rules-argv.test.js +69 -0
- package/dist/rules-argv.test.js.map +1 -0
- package/dist/rules-extension.d.ts +3 -0
- package/dist/rules-extension.d.ts.map +1 -0
- package/dist/rules-extension.js +68 -0
- package/dist/rules-extension.js.map +1 -0
- package/dist/rules.d.ts +39 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +374 -0
- package/dist/rules.js.map +1 -0
- package/dist/rules.test.d.ts +2 -0
- package/dist/rules.test.d.ts.map +1 -0
- package/dist/rules.test.js +266 -0
- package/dist/rules.test.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -6
- package/skills/pi-review/SKILL.md +7 -1
|
@@ -0,0 +1,266 @@
|
|
|
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 { test } from "vitest";
|
|
6
|
+
import claudeRules from "./rules-extension.js";
|
|
7
|
+
import { compileGlob, discoverRules, expandBraces, findMarkdownFiles, parseRuleFile, ruleMatchesFile, splitTopLevelCommas, } from "./rules.js";
|
|
8
|
+
function matches(pattern, file) {
|
|
9
|
+
const re = compileGlob(pattern);
|
|
10
|
+
return re !== null && re.test(file);
|
|
11
|
+
}
|
|
12
|
+
test("glob: documented examples", () => {
|
|
13
|
+
assert.ok(matches("**/*.ts", "src/api/handler.ts"));
|
|
14
|
+
assert.ok(matches("**/*.ts", "lib/util.ts"));
|
|
15
|
+
assert.ok(matches("**/*.ts", "a.ts"));
|
|
16
|
+
assert.ok(!matches("**/*.ts", "a.tsx"));
|
|
17
|
+
assert.ok(matches("src/**/*", "src/api/handler.ts"));
|
|
18
|
+
assert.ok(matches("src/**/*", "src/a.ts"));
|
|
19
|
+
assert.ok(!matches("src/**/*", "lib/a.ts"));
|
|
20
|
+
assert.ok(matches("*.md", "README.md"));
|
|
21
|
+
assert.ok(!matches("*.md", "docs/README.md"));
|
|
22
|
+
assert.ok(matches("src/components/*.tsx", "src/components/Button.tsx"));
|
|
23
|
+
assert.ok(!matches("src/components/*.tsx", "src/components/nested/Button.tsx"));
|
|
24
|
+
assert.ok(matches("src/**/*.{ts,tsx}", "src/a/b.tsx"));
|
|
25
|
+
assert.ok(matches("src/**/*.{ts,tsx}", "src/b.ts"));
|
|
26
|
+
assert.ok(!matches("src/**/*.{ts,tsx}", "src/b.js"));
|
|
27
|
+
});
|
|
28
|
+
test("glob: ** boundaries, ? and bracket expressions", () => {
|
|
29
|
+
assert.ok(matches("src/**", "src/deep/nested/file.ts"));
|
|
30
|
+
assert.ok(matches("a?c.md", "abc.md"));
|
|
31
|
+
assert.ok(!matches("a?c.md", "abbc.md"));
|
|
32
|
+
assert.ok(matches("file[0-9].md", "file1.md"));
|
|
33
|
+
assert.ok(!matches("file[0-9].md", "fileA.md"));
|
|
34
|
+
assert.ok(matches("file[!0-9].md", "fileA.md"));
|
|
35
|
+
});
|
|
36
|
+
test("glob: invalid bracket expression matches nothing (v2.1.207)", () => {
|
|
37
|
+
assert.equal(compileGlob("photos [2024/**"), null);
|
|
38
|
+
assert.equal(compileGlob("foo[.md"), null);
|
|
39
|
+
});
|
|
40
|
+
test("glob: escaped [ matches literally", () => {
|
|
41
|
+
assert.ok(matches("photos \\[2024/**", "photos [2024/img.png"));
|
|
42
|
+
});
|
|
43
|
+
test("splitTopLevelCommas: commas inside braces are not splits", () => {
|
|
44
|
+
assert.deepEqual(splitTopLevelCommas("src/**/*.{ts,tsx}, docs/**"), [
|
|
45
|
+
"src/**/*.{ts,tsx}",
|
|
46
|
+
"docs/**",
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
test("expandBraces: nested expansion", () => {
|
|
50
|
+
assert.deepEqual(expandBraces("a.{ts,tsx}"), ["a.ts", "a.tsx"]);
|
|
51
|
+
assert.deepEqual(expandBraces("{a,b{1,2}}.md"), ["a.md", "b1.md", "b2.md"]);
|
|
52
|
+
assert.deepEqual(expandBraces("plain.md"), ["plain.md"]);
|
|
53
|
+
});
|
|
54
|
+
test("frontmatter: no frontmatter → unconditional", () => {
|
|
55
|
+
const r = parseRuleFile("# title\n\nbody");
|
|
56
|
+
assert.equal(r.paths, null);
|
|
57
|
+
assert.equal(r.content, "# title\n\nbody");
|
|
58
|
+
});
|
|
59
|
+
test("frontmatter: comma-separated string", () => {
|
|
60
|
+
const r = parseRuleFile('---\npaths: "src/**/*.{ts,tsx}, docs/**"\n---\n\nbody');
|
|
61
|
+
assert.deepEqual(r.paths, ["src/**/*.{ts,tsx}", "docs/**"]);
|
|
62
|
+
assert.equal(r.content, "body");
|
|
63
|
+
});
|
|
64
|
+
test("frontmatter: inline array", () => {
|
|
65
|
+
const r = parseRuleFile('---\npaths: ["src/**", \'lib/**\']\n---\nbody');
|
|
66
|
+
assert.deepEqual(r.paths, ["src/**", "lib/**"]);
|
|
67
|
+
});
|
|
68
|
+
test("frontmatter: YAML block list", () => {
|
|
69
|
+
const r = parseRuleFile("---\npaths:\n - src/**\n - \"lib/**\"\nother: x\n---\nbody");
|
|
70
|
+
assert.deepEqual(r.paths, ["src/**", "lib/**"]);
|
|
71
|
+
assert.equal(r.content, "body");
|
|
72
|
+
});
|
|
73
|
+
test("frontmatter: present but no paths → unconditional, frontmatter stripped", () => {
|
|
74
|
+
const r = parseRuleFile("---\ntitle: x\n---\nbody");
|
|
75
|
+
assert.equal(r.paths, null);
|
|
76
|
+
assert.equal(r.content, "body");
|
|
77
|
+
});
|
|
78
|
+
test("frontmatter: unclosed → whole content", () => {
|
|
79
|
+
const r = parseRuleFile("---\npaths: src/**\nno closing");
|
|
80
|
+
assert.equal(r.paths, null);
|
|
81
|
+
assert.ok(r.content.startsWith("---"));
|
|
82
|
+
});
|
|
83
|
+
test("paths present but all globs invalid → patterns is an empty array", () => {
|
|
84
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-rules-"));
|
|
85
|
+
const project = path.join(root, "p");
|
|
86
|
+
fs.mkdirSync(path.join(project, ".claude", "rules"), { recursive: true });
|
|
87
|
+
fs.writeFileSync(path.join(project, ".claude", "rules", "bad.md"), "---\npaths: foo[.md\n---\nrule");
|
|
88
|
+
const rules = discoverRules(project, path.join(root, "no-home"));
|
|
89
|
+
assert.equal(rules.length, 1);
|
|
90
|
+
assert.deepEqual(rules[0].patterns, []);
|
|
91
|
+
assert.equal(ruleMatchesFile(rules[0], path.join(project, "foo.md")), false);
|
|
92
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
93
|
+
});
|
|
94
|
+
function makeFixture() {
|
|
95
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-rules-"));
|
|
96
|
+
}
|
|
97
|
+
test("discovery: recursive .md, non-md ignored, symlinked dirs and cycle detection", () => {
|
|
98
|
+
const root = makeFixture();
|
|
99
|
+
const rulesDir = path.join(root, ".claude", "rules");
|
|
100
|
+
fs.mkdirSync(path.join(rulesDir, "sub"), { recursive: true });
|
|
101
|
+
fs.writeFileSync(path.join(rulesDir, "a.md"), "A");
|
|
102
|
+
fs.writeFileSync(path.join(rulesDir, "sub", "b.md"), "B");
|
|
103
|
+
fs.writeFileSync(path.join(rulesDir, "ignore.txt"), "x");
|
|
104
|
+
const shared = path.join(root, "shared");
|
|
105
|
+
fs.mkdirSync(shared);
|
|
106
|
+
fs.writeFileSync(path.join(shared, "c.md"), "C");
|
|
107
|
+
fs.symlinkSync(shared, path.join(rulesDir, "linked"));
|
|
108
|
+
fs.symlinkSync(rulesDir, path.join(shared, "loop"));
|
|
109
|
+
const files = findMarkdownFiles(rulesDir).map((f) => path.basename(f)).sort();
|
|
110
|
+
assert.deepEqual(files, ["a.md", "b.md", "c.md"]);
|
|
111
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
112
|
+
});
|
|
113
|
+
test("discovery: user before project, realpath dedupe, paths compiled", () => {
|
|
114
|
+
const root = makeFixture();
|
|
115
|
+
const home = path.join(root, "home");
|
|
116
|
+
const project = path.join(root, "project");
|
|
117
|
+
fs.mkdirSync(path.join(home, ".claude", "rules"), { recursive: true });
|
|
118
|
+
fs.mkdirSync(path.join(project, ".claude", "rules"), { recursive: true });
|
|
119
|
+
fs.writeFileSync(path.join(home, ".claude", "rules", "global.md"), "G");
|
|
120
|
+
fs.writeFileSync(path.join(project, ".claude", "rules", "ts.md"), "---\npaths: \"**/*.ts\"\n---\nTS rule");
|
|
121
|
+
fs.symlinkSync(path.join(home, ".claude", "rules", "global.md"), path.join(project, ".claude", "rules", "dup.md"));
|
|
122
|
+
const rules = discoverRules(project, home);
|
|
123
|
+
assert.deepEqual(rules.map((r) => [path.basename(r.file), r.scope]), [
|
|
124
|
+
["global.md", "user"],
|
|
125
|
+
["ts.md", "project"],
|
|
126
|
+
]);
|
|
127
|
+
const tsRule = rules[1];
|
|
128
|
+
assert.equal(tsRule.patterns?.length, 1);
|
|
129
|
+
assert.ok(ruleMatchesFile(tsRule, path.join(project, "src", "a.ts")));
|
|
130
|
+
assert.ok(!ruleMatchesFile(tsRule, path.join(project, "src", "a.js")));
|
|
131
|
+
assert.ok(!ruleMatchesFile(tsRule, path.join(root, "elsewhere", "a.ts")));
|
|
132
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
133
|
+
});
|
|
134
|
+
test("discovery: cwd in a subdirectory still finds the outer project rules", () => {
|
|
135
|
+
const root = makeFixture();
|
|
136
|
+
const project = path.join(root, "proj");
|
|
137
|
+
const sub = path.join(project, "packages", "app");
|
|
138
|
+
fs.mkdirSync(path.join(project, ".claude", "rules"), { recursive: true });
|
|
139
|
+
fs.mkdirSync(sub, { recursive: true });
|
|
140
|
+
fs.writeFileSync(path.join(project, ".claude", "rules", "r.md"), "R");
|
|
141
|
+
const rules = discoverRules(sub, path.join(root, "home-not-exist"));
|
|
142
|
+
assert.equal(rules.length, 1);
|
|
143
|
+
assert.equal(rules[0].scope, "project");
|
|
144
|
+
assert.equal(rules[0].baseDir, project);
|
|
145
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
146
|
+
});
|
|
147
|
+
test("discovery: nested project scopes are outermost-first, innermost last", () => {
|
|
148
|
+
const root = makeFixture();
|
|
149
|
+
const outer = path.join(root, "outer");
|
|
150
|
+
const inner = path.join(outer, "inner");
|
|
151
|
+
for (const dir of [outer, inner]) {
|
|
152
|
+
fs.mkdirSync(path.join(dir, ".claude", "rules"), { recursive: true });
|
|
153
|
+
fs.writeFileSync(path.join(dir, ".claude", "rules", "r.md"), dir);
|
|
154
|
+
}
|
|
155
|
+
const rules = discoverRules(inner, path.join(root, "no-home"));
|
|
156
|
+
assert.deepEqual(rules.map((r) => r.baseDir), [outer, inner]);
|
|
157
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
158
|
+
});
|
|
159
|
+
test("matching: reading through a symlink path still hits (v2.1.198)", () => {
|
|
160
|
+
const root = makeFixture();
|
|
161
|
+
const project = path.join(root, "p");
|
|
162
|
+
fs.mkdirSync(path.join(project, "src"), { recursive: true });
|
|
163
|
+
fs.mkdirSync(path.join(project, ".claude", "rules"), { recursive: true });
|
|
164
|
+
fs.writeFileSync(path.join(project, "src", "real.ts"), "");
|
|
165
|
+
fs.writeFileSync(path.join(project, ".claude", "rules", "ts.md"), "---\npaths: src/**/*.ts\n---\nrule");
|
|
166
|
+
fs.symlinkSync(path.join(project, "src", "real.ts"), path.join(project, "alias.ts"));
|
|
167
|
+
const rules = discoverRules(project, path.join(root, "no-home"));
|
|
168
|
+
assert.ok(ruleMatchesFile(rules[0], path.join(project, "alias.ts")));
|
|
169
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
170
|
+
});
|
|
171
|
+
/** Minimal ExtensionAPI stub capturing the handlers this extension registers. */
|
|
172
|
+
function loadExtension() {
|
|
173
|
+
const handlers = {};
|
|
174
|
+
const pi = {
|
|
175
|
+
on(event, handler) {
|
|
176
|
+
handlers[event] = handler;
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
claudeRules(pi);
|
|
180
|
+
return handlers;
|
|
181
|
+
}
|
|
182
|
+
const ctx = (cwd) => ({ cwd });
|
|
183
|
+
/** Point os.homedir() at a temp dir so the developer's real ~/.claude/rules never leaks in. */
|
|
184
|
+
async function withTempHome(fn) {
|
|
185
|
+
const home = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-home-"));
|
|
186
|
+
const original = os.homedir;
|
|
187
|
+
os.homedir = () => home;
|
|
188
|
+
try {
|
|
189
|
+
await fn();
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
os.homedir = original;
|
|
193
|
+
fs.rmSync(home, { recursive: true, force: true });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function fixture() {
|
|
197
|
+
const project = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-ext-"));
|
|
198
|
+
fs.mkdirSync(path.join(project, ".claude", "rules"), { recursive: true });
|
|
199
|
+
fs.writeFileSync(path.join(project, ".claude", "rules", "always.md"), "ALWAYS");
|
|
200
|
+
fs.writeFileSync(path.join(project, ".claude", "rules", "ts.md"), "---\npaths: src/**/*.ts\n---\nTS SCOPED");
|
|
201
|
+
return project;
|
|
202
|
+
}
|
|
203
|
+
test("extension appends unconditional rules to the system prompt", async () => {
|
|
204
|
+
await withTempHome(async () => {
|
|
205
|
+
const project = fixture();
|
|
206
|
+
const handlers = loadExtension();
|
|
207
|
+
await handlers.session_start({}, ctx(project));
|
|
208
|
+
const result = await handlers.before_agent_start({ systemPrompt: "BASE", systemPromptOptions: { contextFiles: [] } }, ctx(project));
|
|
209
|
+
assert.ok(result.systemPrompt.startsWith("BASE"));
|
|
210
|
+
assert.match(result.systemPrompt, /# Rules/);
|
|
211
|
+
assert.match(result.systemPrompt, /ALWAYS/);
|
|
212
|
+
assert.ok(!result.systemPrompt.includes("TS SCOPED"), "path-scoped rule must not enter the prompt");
|
|
213
|
+
fs.rmSync(project, { recursive: true, force: true });
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
test("extension dedupes an unconditional rule already loaded as a built-in context file", async () => {
|
|
217
|
+
await withTempHome(async () => {
|
|
218
|
+
const project = fixture();
|
|
219
|
+
const handlers = loadExtension();
|
|
220
|
+
await handlers.session_start({}, ctx(project));
|
|
221
|
+
const ruleFile = path.join(project, ".claude", "rules", "always.md");
|
|
222
|
+
const result = await handlers.before_agent_start({ systemPrompt: "BASE", systemPromptOptions: { contextFiles: [{ path: ruleFile, content: "ALWAYS" }] } }, ctx(project));
|
|
223
|
+
assert.equal(result, undefined, "same realpath must not be injected twice");
|
|
224
|
+
fs.rmSync(project, { recursive: true, force: true });
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
test("extension injects a path-scoped rule into the matching read result exactly once", async () => {
|
|
228
|
+
await withTempHome(async () => {
|
|
229
|
+
const project = fixture();
|
|
230
|
+
fs.mkdirSync(path.join(project, "src"), { recursive: true });
|
|
231
|
+
fs.writeFileSync(path.join(project, "src", "a.ts"), "");
|
|
232
|
+
const handlers = loadExtension();
|
|
233
|
+
await handlers.session_start({}, ctx(project));
|
|
234
|
+
const event = {
|
|
235
|
+
toolName: "read",
|
|
236
|
+
input: { path: "src/a.ts" },
|
|
237
|
+
content: [{ type: "text", text: "file body" }],
|
|
238
|
+
isError: false,
|
|
239
|
+
};
|
|
240
|
+
const first = await handlers.tool_result(event, ctx(project));
|
|
241
|
+
assert.match(first.content.at(-1).text, /TS SCOPED/);
|
|
242
|
+
const second = await handlers.tool_result(event, ctx(project));
|
|
243
|
+
assert.equal(second, undefined, "same rule must inject only once per process");
|
|
244
|
+
// write/edit and read errors never trigger
|
|
245
|
+
assert.equal(await handlers.tool_result({ ...event, toolName: "write" }, ctx(project)), undefined);
|
|
246
|
+
assert.equal(await handlers.tool_result({ ...event, isError: true }, ctx(project)), undefined);
|
|
247
|
+
// compact re-arms injection
|
|
248
|
+
await handlers.session_compact({}, ctx(project));
|
|
249
|
+
assert.match((await handlers.tool_result(event, ctx(project))).content.at(-1).text, /TS SCOPED/);
|
|
250
|
+
fs.rmSync(project, { recursive: true, force: true });
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
test("extension does not match a path outside the project", async () => {
|
|
254
|
+
await withTempHome(async () => {
|
|
255
|
+
const project = fixture();
|
|
256
|
+
const outside = fs.mkdtempSync(path.join(os.tmpdir(), "pi-review-outside-"));
|
|
257
|
+
fs.writeFileSync(path.join(outside, "a.ts"), "");
|
|
258
|
+
const handlers = loadExtension();
|
|
259
|
+
await handlers.session_start({}, ctx(project));
|
|
260
|
+
const result = await handlers.tool_result({ toolName: "read", input: { path: path.join(outside, "a.ts") }, content: [], isError: false }, ctx(project));
|
|
261
|
+
assert.equal(result, undefined);
|
|
262
|
+
fs.rmSync(project, { recursive: true, force: true });
|
|
263
|
+
fs.rmSync(outside, { recursive: true, force: true });
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
//# sourceMappingURL=rules.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.test.js","sourceRoot":"","sources":["../src/rules.test.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -80,6 +80,12 @@ export interface ParsedArgs {
|
|
|
80
80
|
provider?: string;
|
|
81
81
|
thinking?: string;
|
|
82
82
|
tools?: string;
|
|
83
|
+
/**
|
|
84
|
+
* When true, reviewer children do not load the `.claude/rules` extension.
|
|
85
|
+
* Optional so existing ParsedArgs literals stay valid; only an explicit
|
|
86
|
+
* `--no-rules` sets it. `PI_REVIEW_RULES=0` is read at argv-assembly time.
|
|
87
|
+
*/
|
|
88
|
+
noRules?: boolean;
|
|
83
89
|
name?: string;
|
|
84
90
|
search?: string[];
|
|
85
91
|
/** Panel: number of independent reviewers (generic same-model panel). */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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":"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,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IAC7I,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yFAAyF;IACzF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,kGAAkG;IAClG,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,oEAAoE;IACpE,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,mGAAmG;IACnG,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,QAAQ,GAAG,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAG,CAAU,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,UAAW,SAAQ,sBAAsB;IACxD,iFAAiF;IACjF,WAAW,EAAE,OAAO,mBAAmB,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAMD,eAAO,MAAM,kBAAkB,qDAAsD,CAAC;AACtF,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,yDAAyD;AACzD,eAAO,MAAM,qBAAqB,yCAA0C,CAAC;AAE7E,mEAAmE;AACnE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,iFAAiF;AACjF,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAEhE,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC5C,6EAA6E;IAC7E,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,mDAAmD;AACnD,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB,EAAE,WAAW;CAAG;AAEtF,wEAAwE;AACxE,MAAM,WAAW,eAAgB,SAAQ,UAAU,EAAE,WAAW;IAC9D;;;;OAIG;IACH,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;CAC7C;AAED,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,SAAS,CAAU,CAAC;AAGlG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,SAAS,CAAU,CAAC;AAGlG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,CAAU,CAAC;AA+I5F;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAU,CAAC;AA8C9C,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAU,CAAC;AActF,mEAAmE;AACnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAE/B,yDAAyD;AACzD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAU,CAAC;AAE7E,mEAAmE;AACnE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC,iFAAiF;AACjF,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zephyrdeng/pi-review",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"description": "Isolated AI-powered code and plan reviews from the command line",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "ZephyrDeng <zephyrTang@aliyun.com>",
|
|
@@ -51,7 +51,8 @@
|
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"@earendil-works/pi-coding-agent": "*",
|
|
54
|
-
"@earendil-works/pi-tui": "*"
|
|
54
|
+
"@earendil-works/pi-tui": "*",
|
|
55
|
+
"typebox": "*"
|
|
55
56
|
},
|
|
56
57
|
"peerDependenciesMeta": {
|
|
57
58
|
"@earendil-works/pi-coding-agent": {
|
|
@@ -68,7 +69,8 @@
|
|
|
68
69
|
"husky": "^9.1.7",
|
|
69
70
|
"tsx": "^4.23.1",
|
|
70
71
|
"typescript": "^5.8.0",
|
|
71
|
-
"vitest": "^4.1.10"
|
|
72
|
+
"vitest": "^4.1.10",
|
|
73
|
+
"typebox": "^1.1.38"
|
|
72
74
|
},
|
|
73
75
|
"scripts": {
|
|
74
76
|
"prepare": "husky",
|
|
@@ -83,8 +85,5 @@
|
|
|
83
85
|
},
|
|
84
86
|
"engines": {
|
|
85
87
|
"node": ">=20"
|
|
86
|
-
},
|
|
87
|
-
"dependencies": {
|
|
88
|
-
"typebox": "^1.1.38"
|
|
89
88
|
}
|
|
90
89
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pi-review
|
|
3
|
-
description: Use pi-review
|
|
3
|
+
description: "Use pi-review only when the user explicitly requests an independent review or review workflow: code review, review of a diff or MR, loop review, review-fix-re-review closeout, panel review gates, or review status/progress questions. Do not use it for repository inspection, spec-driven evaluation or optimization (for example, checking whether X can be optimized against a specification), implementation-oriented analysis, diagnosis, migration, or conformance fixes (for example, checking compliance and correcting the implementation) unless the user separately asks for an independent review."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Pi Review
|
|
@@ -37,6 +37,12 @@ Review children stay isolated (`--no-extensions`) unless the persistent review c
|
|
|
37
37
|
|
|
38
38
|
Before writing, tell the user the config is machine-level: every later pi-review on this machine (including bare CLI) inherits it. Write it only on acceptance; when editing an existing file, keep every unknown key and never overwrite a value the user set (invalid JSON — stop, do not overwrite). Verify on Pi with `/rv-config`, elsewhere with `cat ~/.pi/pi-review/config.json`. Isolate one run with `PI_REVIEW_CHILD_EXTENSIONS=0` (env overrides config). If a child exits with stale extension ctx after dispose/reload (issue #8), retry that one run with `PI_REVIEW_CHILD_EXTENSIONS=0`.
|
|
39
39
|
|
|
40
|
+
## Claude rules
|
|
41
|
+
|
|
42
|
+
Reviewer children load `.claude/rules/` by default, with Claude Code semantics — user-level `~/.claude/rules/` plus project-level `<dir>/.claude/rules/` from the child's working directory upward. Rules without a `paths` frontmatter key are appended to the child system prompt; rules with `paths` are injected into a `read` result only when the read file matches the glob (`write`/`edit` never trigger).
|
|
43
|
+
|
|
44
|
+
This loader is **our own extension, explicitly passed with `--extension`** — it is not host-extension discovery. Review children still run isolated (`--no-extensions`) by default, so host extensions stay off unless the user opts in above. Disable rules for one run with `--no-rules` or `PI_REVIEW_RULES=0` (also accepts `false` / `off` / `no`). The consensus adjudicator, `screen`, and `classify` never load rules.
|
|
45
|
+
|
|
40
46
|
### Setting config via the agent (preferred path)
|
|
41
47
|
|
|
42
48
|
There is no `/rv-config set` command — the agent is the config editor. When the user asks to change a pi-review setting, edit `~/.pi/pi-review/config.json` directly, with these rules:
|