revu-ai 0.1.2 → 0.2.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +75 -12
  3. package/dist/cache/cross-reference.d.ts +37 -0
  4. package/dist/cache/cross-reference.js +94 -0
  5. package/dist/cache/cross-reference.js.map +1 -0
  6. package/dist/cli.js +106 -12
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts +3 -1
  9. package/dist/config.js +9 -10
  10. package/dist/config.js.map +1 -1
  11. package/dist/discovery.js +8 -1
  12. package/dist/discovery.js.map +1 -1
  13. package/dist/findings.d.ts +18 -0
  14. package/dist/findings.js +22 -0
  15. package/dist/findings.js.map +1 -0
  16. package/dist/forges/dedup.d.ts +17 -0
  17. package/dist/forges/dedup.js +42 -0
  18. package/dist/forges/dedup.js.map +1 -0
  19. package/dist/forges/diff-lines.d.ts +12 -0
  20. package/dist/forges/diff-lines.js +93 -0
  21. package/dist/forges/diff-lines.js.map +1 -0
  22. package/dist/forges/github/api.d.ts +70 -0
  23. package/dist/forges/github/api.js +102 -0
  24. package/dist/forges/github/api.js.map +1 -0
  25. package/dist/forges/github/index.d.ts +10 -0
  26. package/dist/forges/github/index.js +292 -0
  27. package/dist/forges/github/index.js.map +1 -0
  28. package/dist/forges/gitlab/index.d.ts +7 -0
  29. package/dist/forges/gitlab/index.js +13 -0
  30. package/dist/forges/gitlab/index.js.map +1 -0
  31. package/dist/forges/post-cmd.d.ts +20 -0
  32. package/dist/forges/post-cmd.js +54 -0
  33. package/dist/forges/post-cmd.js.map +1 -0
  34. package/dist/forges/registry.d.ts +5 -0
  35. package/dist/forges/registry.js +24 -0
  36. package/dist/forges/registry.js.map +1 -0
  37. package/dist/forges/render.d.ts +18 -0
  38. package/dist/forges/render.js +59 -0
  39. package/dist/forges/render.js.map +1 -0
  40. package/dist/forges/types.d.ts +65 -0
  41. package/dist/forges/types.js +2 -0
  42. package/dist/forges/types.js.map +1 -0
  43. package/dist/index.d.ts +2 -2
  44. package/dist/index.js +1 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/init.d.ts +3 -1
  47. package/dist/init.js +6 -3
  48. package/dist/init.js.map +1 -1
  49. package/dist/mcp/aggregator.d.ts +9 -1
  50. package/dist/mcp/aggregator.js +39 -3
  51. package/dist/mcp/aggregator.js.map +1 -1
  52. package/dist/mcp/server.d.ts +8 -0
  53. package/dist/mcp/server.js +60 -5
  54. package/dist/mcp/server.js.map +1 -1
  55. package/dist/mcp/tools.d.ts +38 -2
  56. package/dist/mcp/tools.js +36 -1
  57. package/dist/mcp/tools.js.map +1 -1
  58. package/dist/output/github.d.ts +1 -1
  59. package/dist/output/github.js +3 -7
  60. package/dist/output/github.js.map +1 -1
  61. package/dist/output/json.d.ts +3 -1
  62. package/dist/output/json.js +4 -7
  63. package/dist/output/json.js.map +1 -1
  64. package/dist/output/pretty.d.ts +1 -1
  65. package/dist/output/pretty.js +2 -8
  66. package/dist/output/pretty.js.map +1 -1
  67. package/dist/prompts/review-system.d.ts +3 -1
  68. package/dist/prompts/review-system.js +47 -2
  69. package/dist/prompts/review-system.js.map +1 -1
  70. package/dist/providers/claude-code.d.ts +7 -5
  71. package/dist/providers/claude-code.js +77 -15
  72. package/dist/providers/claude-code.js.map +1 -1
  73. package/dist/providers/opencode.d.ts +6 -0
  74. package/dist/providers/opencode.js +653 -0
  75. package/dist/providers/opencode.js.map +1 -0
  76. package/dist/providers/registry.d.ts +7 -7
  77. package/dist/providers/registry.js +29 -21
  78. package/dist/providers/registry.js.map +1 -1
  79. package/dist/providers/types.d.ts +8 -1
  80. package/dist/runner.d.ts +6 -1
  81. package/dist/runner.js +71 -26
  82. package/dist/runner.js.map +1 -1
  83. package/dist/scaffold-paths.d.ts +10 -0
  84. package/dist/scaffold-paths.js +25 -0
  85. package/dist/scaffold-paths.js.map +1 -0
  86. package/dist/types.d.ts +38 -3
  87. package/dist/types.js +4 -7
  88. package/dist/types.js.map +1 -1
  89. package/examples/github-workflow.yml +51 -10
  90. package/package.json +16 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { ReviewAgentFactory, ScaffoldAgentFactory } from "./types.js";
2
- export declare function registerProvider(name: string, factory: ReviewAgentFactory): void;
3
- export declare function unregisterProvider(name: string): void;
4
- export declare function registerScaffoldProvider(name: string, factory: ScaffoldAgentFactory): void;
5
- export declare function unregisterScaffoldProvider(name: string): void;
6
- export declare function getProviderFactory(name: string): ReviewAgentFactory;
7
- export declare function getScaffoldFactory(name: string): ScaffoldAgentFactory;
8
- export declare function listProviders(): string[];
2
+ export declare function registerHarness(name: string, factory: ReviewAgentFactory): void;
3
+ export declare function unregisterHarness(name: string): void;
4
+ export declare function registerScaffoldHarness(name: string, factory: ScaffoldAgentFactory): void;
5
+ export declare function unregisterScaffoldHarness(name: string): void;
6
+ export declare function getHarnessFactory(name: string): ReviewAgentFactory;
7
+ export declare function getScaffoldHarness(name: string): ScaffoldAgentFactory;
8
+ export declare function listHarnesses(): string[];
@@ -1,5 +1,6 @@
1
1
  import { claudeCodeProvider, claudeCodeScaffoldProvider } from "./claude-code.js";
2
- const REGISTRY = new Map([
2
+ import { opencodeProvider, opencodeScaffoldProvider } from "./opencode.js";
3
+ const HARNESSES = new Map([
3
4
  [
4
5
  "claude-code",
5
6
  {
@@ -7,54 +8,61 @@ const REGISTRY = new Map([
7
8
  scaffold: claudeCodeScaffoldProvider,
8
9
  },
9
10
  ],
11
+ [
12
+ "opencode",
13
+ {
14
+ review: opencodeProvider,
15
+ scaffold: opencodeScaffoldProvider,
16
+ },
17
+ ],
10
18
  ]);
11
19
  function entry(name) {
12
- let e = REGISTRY.get(name);
20
+ let e = HARNESSES.get(name);
13
21
  if (!e) {
14
22
  e = {};
15
- REGISTRY.set(name, e);
23
+ HARNESSES.set(name, e);
16
24
  }
17
25
  return e;
18
26
  }
19
- export function registerProvider(name, factory) {
27
+ export function registerHarness(name, factory) {
20
28
  entry(name).review = factory;
21
29
  }
22
- export function unregisterProvider(name) {
23
- const e = REGISTRY.get(name);
30
+ export function unregisterHarness(name) {
31
+ const e = HARNESSES.get(name);
24
32
  if (!e)
25
33
  return;
26
34
  delete e.review;
27
35
  if (!e.review && !e.scaffold)
28
- REGISTRY.delete(name);
36
+ HARNESSES.delete(name);
29
37
  }
30
- export function registerScaffoldProvider(name, factory) {
38
+ export function registerScaffoldHarness(name, factory) {
31
39
  entry(name).scaffold = factory;
32
40
  }
33
- export function unregisterScaffoldProvider(name) {
34
- const e = REGISTRY.get(name);
41
+ export function unregisterScaffoldHarness(name) {
42
+ const e = HARNESSES.get(name);
35
43
  if (!e)
36
44
  return;
37
45
  delete e.scaffold;
38
46
  if (!e.review && !e.scaffold)
39
- REGISTRY.delete(name);
47
+ HARNESSES.delete(name);
40
48
  }
41
- export function getProviderFactory(name) {
42
- const factory = REGISTRY.get(name)?.review;
49
+ export function getHarnessFactory(name) {
50
+ const factory = HARNESSES.get(name)?.review;
43
51
  if (!factory) {
44
- const known = [...REGISTRY.entries()].filter(([, e]) => e.review).map(([k]) => k).join(", ");
45
- throw new Error(`Unknown review provider "${name}". Known: ${known}`);
52
+ const known = [...HARNESSES.entries()].filter(([, e]) => e.review).map(([k]) => k).join(", ");
53
+ throw new Error(`Unknown review harness "${name}". Known: ${known}`);
46
54
  }
47
55
  return factory;
48
56
  }
49
- export function getScaffoldFactory(name) {
50
- const factory = REGISTRY.get(name)?.scaffold;
57
+ export function getScaffoldHarness(name) {
58
+ const factory = HARNESSES.get(name)?.scaffold;
51
59
  if (!factory) {
52
- const known = [...REGISTRY.entries()].filter(([, e]) => e.scaffold).map(([k]) => k).join(", ");
53
- throw new Error(`Unknown scaffold provider "${name}". Known: ${known}`);
60
+ const known = [...HARNESSES.entries()].filter(([, e]) => e.scaffold).map(([k]) => k).join(", ");
61
+ throw new Error(`Unknown scaffold harness "${name}". Known: ${known}`);
54
62
  }
55
63
  return factory;
56
64
  }
57
- export function listProviders() {
58
- return [...REGISTRY.keys()];
65
+ export function listHarnesses() {
66
+ return [...HARNESSES.keys()];
59
67
  }
60
68
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAQ3E,MAAM,SAAS,GAA8B,IAAI,GAAG,CAAC;IACnD;QACE,aAAa;QACb;YACE,MAAM,EAAE,kBAAwC;YAChD,QAAQ,EAAE,0BAAkD;SAC7D;KACF;IACD;QACE,UAAU;QACV;YACE,MAAM,EAAE,gBAAsC;YAC9C,QAAQ,EAAE,wBAAgD;SAC3D;KACF;CACF,CAAC,CAAC;AAEH,SAAS,KAAK,CAAC,IAAY;IACzB,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,EAAE,CAAC;QACP,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAA2B;IACvE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO;IACf,OAAO,CAAC,CAAC,MAAM,CAAC;IAChB,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ;QAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,OAA6B;IACjF,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO;IACf,OAAO,CAAC,CAAC,QAAQ,CAAC;IAClB,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ;QAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,aAAa,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,aAAa,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ReviewTarget } from "../types.js";
1
+ import type { Finding, ReviewTarget } from "../types.js";
2
2
  export interface ReviewActivity {
3
3
  /** "tool" for tool-use, "text" for assistant prose. */
4
4
  kind: "tool" | "text";
@@ -22,6 +22,11 @@ export interface ReviewInput {
22
22
  signal?: AbortSignal;
23
23
  /** Optional progress callback — providers should call this for tool use / text turns. */
24
24
  onActivity?: (activity: ReviewActivity) => void;
25
+ /** Open findings this same rule reported on a previous run, for cross-run reasoning. */
26
+ priorFindings?: Finding[];
27
+ /** SHA at which the prior findings were observed (the head of the previous run). Used in the
28
+ * prior-findings prompt block to tell the agent the time delta to consider. */
29
+ priorHeadSha?: string;
25
30
  }
26
31
  export interface ReviewResult {
27
32
  ruleId: string;
@@ -38,6 +43,7 @@ export interface ReviewAgent {
38
43
  export interface ReviewAgentFactory {
39
44
  (cfg: {
40
45
  model?: string;
46
+ provider?: string;
41
47
  }): ReviewAgent;
42
48
  }
43
49
  export interface ScaffoldInput {
@@ -66,5 +72,6 @@ export interface ScaffoldAgent {
66
72
  export interface ScaffoldAgentFactory {
67
73
  (cfg: {
68
74
  model?: string;
75
+ provider?: string;
69
76
  }): ScaffoldAgent;
70
77
  }
package/dist/runner.d.ts CHANGED
@@ -16,7 +16,12 @@ export interface RunHooks {
16
16
  /** Fires for each finding the moment it's reported through the MCP sidecar. */
17
17
  onFinding?: (finding: Finding) => void;
18
18
  }
19
- export declare function run(cwd: string, config: RevuConfig, hooks?: RunHooks): Promise<RunnerResult>;
19
+ export interface RunInputs {
20
+ /** Optional prior-run report. When present, each rule's open prior findings are
21
+ * threaded into that rule's reviewer agent for cross-run reasoning. */
22
+ priorReport?: RunReport;
23
+ }
24
+ export declare function run(cwd: string, config: RevuConfig, hooks?: RunHooks, inputs?: RunInputs): Promise<RunnerResult>;
20
25
  export declare function listRules(cwd: string, pattern: string): Promise<{
21
26
  relPath: string;
22
27
  ruleId: string;
package/dist/runner.js CHANGED
@@ -2,7 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { findRepoRoot, resolveTarget, isReviewEmpty } from "./refs.js";
3
3
  import { discoverRules } from "./discovery.js";
4
4
  import { startSidecar } from "./mcp/server.js";
5
- import { getProviderFactory } from "./providers/registry.js";
5
+ import { getHarnessFactory } from "./providers/registry.js";
6
6
  import { createLimiter } from "./concurrency.js";
7
7
  import { SEVERITY_ORDER } from "./types.js";
8
8
  export class RevuExit extends Error {
@@ -13,7 +13,7 @@ export class RevuExit extends Error {
13
13
  this.name = "RevuExit";
14
14
  }
15
15
  }
16
- export async function run(cwd, config, hooks = {}) {
16
+ export async function run(cwd, config, hooks = {}, inputs = {}) {
17
17
  const startedAt = new Date().toISOString();
18
18
  const runId = randomUUID();
19
19
  const repoRoot = findRepoRoot(cwd);
@@ -29,39 +29,82 @@ export async function run(cwd, config, hooks = {}) {
29
29
  if (!config.force && isReviewEmpty(resolved.target, repoRoot)) {
30
30
  throw new RevuExit("No changes to review.", 0);
31
31
  }
32
+ // Group prior findings by ruleId so each agent only sees its own.
33
+ const priorByRule = new Map();
34
+ if (inputs.priorReport) {
35
+ const resolvedFps = new Set(inputs.priorReport.resolutions?.map((r) => `${r.ruleId}\0${r.fingerprint}`) ?? []);
36
+ for (const f of inputs.priorReport.findings) {
37
+ // Skip findings that the prior report already marked resolved.
38
+ if (resolvedFps.has(`${f.ruleId}\0${f.fingerprint}`))
39
+ continue;
40
+ const list = priorByRule.get(f.ruleId);
41
+ if (list)
42
+ list.push(f);
43
+ else
44
+ priorByRule.set(f.ruleId, [f]);
45
+ }
46
+ }
47
+ const priorHeadSha = inputs.priorReport?.reviewTarget.headSha;
32
48
  const sidecar = await startSidecar({ repoRoot });
33
49
  const unsubscribeFindings = hooks.onFinding
34
50
  ? sidecar.aggregator.onAdd(hooks.onFinding)
35
51
  : () => { };
36
- const factory = getProviderFactory(config.provider);
37
- const provider = factory({ ...(config.model ? { model: config.model } : {}) });
52
+ const factory = getHarnessFactory(config.harness);
53
+ const provider = factory({
54
+ ...(config.model ? { model: config.model } : {}),
55
+ ...(config.provider ? { provider: config.provider } : {}),
56
+ });
38
57
  const concurrency = config.concurrency ?? Math.min(8, rules.length);
39
58
  const limit = createLimiter(concurrency);
40
59
  const ruleResults = [];
41
60
  try {
42
61
  await Promise.all(rules.map((rule) => limit(async () => {
43
62
  hooks.onRuleStart?.(rule.ruleId, rule.relPath);
44
- const result = await provider.run({
45
- ruleId: rule.ruleId,
46
- rulesFilePath: rule.absPath,
47
- rulesContent: rule.content,
48
- reviewTarget: resolved.target,
49
- repoRoot,
50
- mcp: { url: sidecar.url, authToken: sidecar.authToken },
51
- timeoutMs: config.timeoutMs,
52
- ...(hooks.onActivity
53
- ? { onActivity: (a) => hooks.onActivity?.(rule.ruleId, a) }
54
- : {}),
55
- });
56
- const ruleResult = {
57
- id: result.ruleId,
58
- path: rule.relPath,
59
- ok: result.ok,
60
- durationMs: result.durationMs,
61
- findingCount: sidecar.aggregator.countFor(result.ruleId),
62
- ...(result.errorMessage ? { errorMessage: result.errorMessage } : {}),
63
- ...(result.timedOut ? { timedOut: true } : {}),
64
- };
63
+ const priorForRule = priorByRule.get(rule.ruleId);
64
+ const ruleStart = Date.now();
65
+ // Per-rule isolation: a provider that throws (bug, runtime
66
+ // error, anything we didn't anticipate) must not abort the
67
+ // whole run. Catch here, convert to an errored RuleResult, and
68
+ // let the other rules finish. The provider's own contract is
69
+ // already to return ReviewResult with `ok:false` on expected
70
+ // failures — this is the safety net for unexpected ones.
71
+ let ruleResult;
72
+ try {
73
+ const result = await provider.run({
74
+ ruleId: rule.ruleId,
75
+ rulesFilePath: rule.absPath,
76
+ rulesContent: rule.content,
77
+ reviewTarget: resolved.target,
78
+ repoRoot,
79
+ mcp: { url: sidecar.url, authToken: sidecar.authToken },
80
+ timeoutMs: config.timeoutMs,
81
+ ...(hooks.onActivity
82
+ ? { onActivity: (a) => hooks.onActivity?.(rule.ruleId, a) }
83
+ : {}),
84
+ ...(priorForRule && priorForRule.length > 0 ? { priorFindings: priorForRule } : {}),
85
+ ...(priorHeadSha ? { priorHeadSha } : {}),
86
+ });
87
+ ruleResult = {
88
+ id: result.ruleId,
89
+ path: rule.relPath,
90
+ ok: result.ok,
91
+ durationMs: result.durationMs,
92
+ findingCount: sidecar.aggregator.countFor(result.ruleId),
93
+ ...(result.errorMessage ? { errorMessage: result.errorMessage } : {}),
94
+ ...(result.timedOut ? { timedOut: true } : {}),
95
+ };
96
+ }
97
+ catch (e) {
98
+ const message = e?.stack ?? e?.message ?? String(e);
99
+ ruleResult = {
100
+ id: rule.ruleId,
101
+ path: rule.relPath,
102
+ ok: false,
103
+ durationMs: Date.now() - ruleStart,
104
+ findingCount: sidecar.aggregator.countFor(rule.ruleId),
105
+ errorMessage: `unexpected error: ${message.split("\n")[0]}`,
106
+ };
107
+ }
65
108
  ruleResults.push(ruleResult);
66
109
  hooks.onRuleEnd?.(ruleResult);
67
110
  })));
@@ -71,14 +114,16 @@ export async function run(cwd, config, hooks = {}) {
71
114
  await sidecar.shutdown();
72
115
  }
73
116
  const findings = sidecar.aggregator.all();
117
+ const resolutions = sidecar.aggregator.allResolutions();
74
118
  const report = {
75
- schemaVersion: 1,
119
+ schemaVersion: 2,
76
120
  runId,
77
121
  startedAt,
78
122
  completedAt: new Date().toISOString(),
79
123
  reviewTarget: { ...resolved, mode: resolved.target.mode },
80
124
  rules: ruleResults.sort((a, b) => a.id.localeCompare(b.id)),
81
125
  findings: findings.sort(findingSort),
126
+ resolutions,
82
127
  };
83
128
  const exitCode = computeExitCode(findings, ruleResults, config.failOn);
84
129
  return { report, exitCode };
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The scaffold agent is allowed to write rule files, but only `.revu.md` files
3
+ * that resolve to a path inside the repo root. Anything else must be rejected
4
+ * by whatever code is enforcing the write (canUseTool callback for claude-code,
5
+ * the MCP `write_rule_file` tool for opencode).
6
+ */
7
+ export declare function isAllowedRuleFileWrite(repoRoot: string, filePath: unknown): boolean;
8
+ /** Normalize a (possibly absolute) `.revu.md` path to a repo-relative,
9
+ * forward-slash path. Caller must have already passed `isAllowedRuleFileWrite`. */
10
+ export declare function toRepoRelative(repoRoot: string, filePath: string): string;
@@ -0,0 +1,25 @@
1
+ import { isAbsolute, relative, resolve } from "node:path";
2
+ /**
3
+ * The scaffold agent is allowed to write rule files, but only `.revu.md` files
4
+ * that resolve to a path inside the repo root. Anything else must be rejected
5
+ * by whatever code is enforcing the write (canUseTool callback for claude-code,
6
+ * the MCP `write_rule_file` tool for opencode).
7
+ */
8
+ export function isAllowedRuleFileWrite(repoRoot, filePath) {
9
+ if (typeof filePath !== "string" || filePath.length === 0)
10
+ return false;
11
+ if (!/\.revu\.md$/.test(filePath))
12
+ return false;
13
+ const abs = isAbsolute(filePath) ? filePath : resolve(repoRoot, filePath);
14
+ const rel = relative(resolve(repoRoot), abs);
15
+ if (rel === "" || rel.startsWith("..") || isAbsolute(rel))
16
+ return false;
17
+ return true;
18
+ }
19
+ /** Normalize a (possibly absolute) `.revu.md` path to a repo-relative,
20
+ * forward-slash path. Caller must have already passed `isAllowedRuleFileWrite`. */
21
+ export function toRepoRelative(repoRoot, filePath) {
22
+ const abs = isAbsolute(filePath) ? filePath : resolve(repoRoot, filePath);
23
+ return relative(resolve(repoRoot), abs).split("\\").join("/");
24
+ }
25
+ //# sourceMappingURL=scaffold-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-paths.js","sourceRoot":"","sources":["../src/scaffold-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,QAAiB;IACxE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;oFACoF;AACpF,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,QAAgB;IAC/D,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1E,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChE,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- export type Severity = "aesthetic" | "low" | "medium" | "high" | "critical";
1
+ /** Single source of truth for severity levels, in increasing severity order.
2
+ * Every other severity-aware constant in the codebase derives from this. */
3
+ export declare const SEVERITIES: readonly ["aesthetic", "low", "medium", "high", "critical"];
4
+ export type Severity = (typeof SEVERITIES)[number];
2
5
  export declare const SEVERITY_ORDER: Record<Severity, number>;
3
6
  export interface RuleFile {
4
7
  ruleId: string;
@@ -29,6 +32,26 @@ export interface Finding {
29
32
  lineEnd?: number;
30
33
  message: string;
31
34
  category?: string;
35
+ /** Stable cross-run identity. sha256 of (ruleId|path|line|message), truncated to 12 chars. */
36
+ fingerprint: string;
37
+ /** Set when this finding evolved from a prior one (e.g. line moved). The post step uses
38
+ * this to look up the prior comment id and PATCH instead of POST. */
39
+ priorFp?: string;
40
+ /** Forge-native id of the comment representing this finding, populated by the post step
41
+ * after a successful create / patch. Opaque to the runner. */
42
+ commentId?: number | string;
43
+ /** First commit at which this finding was observed. Carried across runs via --prior-report. */
44
+ firstSeenSha?: string;
45
+ /** Most recent commit at which this finding was observed. */
46
+ lastSeenSha?: string;
47
+ }
48
+ export interface Resolution {
49
+ ruleId: string;
50
+ /** Fingerprint of the prior finding the agent considers resolved. */
51
+ fingerprint: string;
52
+ reason: "fixed" | "stale";
53
+ /** Commit at which the agent considered the finding resolved. */
54
+ resolvedAtSha: string;
32
55
  }
33
56
  export interface RuleResult {
34
57
  id: string;
@@ -41,7 +64,9 @@ export interface RuleResult {
41
64
  timedOut?: boolean;
42
65
  }
43
66
  export interface RunReport {
44
- schemaVersion: 1;
67
+ /** Bumped to 2 when prior-run-aware features (resolutions, fingerprint, commentId) were added.
68
+ * Readers SHOULD accept v1 reports and treat missing fields as defaults. */
69
+ schemaVersion: 2;
45
70
  runId: string;
46
71
  startedAt: string;
47
72
  completedAt: string;
@@ -50,13 +75,20 @@ export interface RunReport {
50
75
  };
51
76
  rules: RuleResult[];
52
77
  findings: Finding[];
78
+ /** Resolutions emitted by reviewers this run, OR carried forward from `--prior-report`. */
79
+ resolutions: Resolution[];
53
80
  }
54
81
  export interface RevuConfig {
55
82
  pattern: string;
56
83
  base?: string;
57
84
  workingTree: boolean;
58
85
  staged: boolean;
59
- provider: string;
86
+ /** The agent harness driving the reviewer. Default `claude-code`. `opencode` lets you
87
+ * swap in any provider/model opencode supports (xai, google, anthropic, …). */
88
+ harness: string;
89
+ /** AI provider for harnesses that support multiple (e.g. opencode). Ignored by
90
+ * single-provider harnesses like `claude-code`. */
91
+ provider?: string;
60
92
  model?: string;
61
93
  concurrency?: number;
62
94
  output: "pretty" | "json" | "github" | "auto";
@@ -65,4 +97,7 @@ export interface RevuConfig {
65
97
  force: boolean;
66
98
  /** Per-agent wall-clock timeout in ms. Default 300_000 (5 minutes). */
67
99
  timeoutMs: number;
100
+ /** Path to a prior run's --output-file report. When present, reviewer agents see
101
+ * their rule's open prior findings as system-prompt context for cross-run reasoning. */
102
+ priorReport?: string;
68
103
  }
package/dist/types.js CHANGED
@@ -1,8 +1,5 @@
1
- export const SEVERITY_ORDER = {
2
- aesthetic: 0,
3
- low: 1,
4
- medium: 2,
5
- high: 3,
6
- critical: 4,
7
- };
1
+ /** Single source of truth for severity levels, in increasing severity order.
2
+ * Every other severity-aware constant in the codebase derives from this. */
3
+ export const SEVERITIES = ["aesthetic", "low", "medium", "high", "critical"];
4
+ export const SEVERITY_ORDER = Object.freeze(Object.fromEntries(SEVERITIES.map((s, i) => [s, i])));
8
5
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,CAAC;CACZ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;6EAC6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;AAItF,MAAM,CAAC,MAAM,cAAc,GAA6B,MAAM,CAAC,MAAM,CACnE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CACzB,CAAC"}
@@ -1,10 +1,16 @@
1
- # Drop this into `.github/workflows/revu-ai.yml` in any repo where you want
2
- # revu-ai to run on PRs. Findings render as PR annotations because the `github`
3
- # formatter emits workflow commands.
1
+ # Drop this into `.github/workflows/revu-ai.yml` to run revu-ai on every PR
2
+ # and post findings as a single bundled PR review.
4
3
  #
5
- # You'll need to set ANTHROPIC_API_KEY (or your provider's equivalent) as
6
- # a repository secret. The workflow uses --base origin/$BASE_REF so revu-ai
7
- # reviews the full PR.
4
+ # Cross-run state: actions/cache restores the prior --output-file report
5
+ # (so reviewers see their previous open findings as system-prompt context;
6
+ # the post step PATCHes existing comments instead of always creating fresh
7
+ # ones — resolved findings get marked with strikethrough + ✅ footer; moved
8
+ # findings get repointed to the new line).
9
+ #
10
+ # Setup:
11
+ # 1. Add `ANTHROPIC_API_KEY` as a repository secret.
12
+ # 2. The `permissions:` block below grants the default $GITHUB_TOKEN
13
+ # enough scope to leave PR review comments — no PAT needed.
8
14
  name: revu-ai
9
15
 
10
16
  on:
@@ -12,7 +18,7 @@ on:
12
18
 
13
19
  permissions:
14
20
  contents: read
15
- pull-requests: write # so annotations land on the PR
21
+ pull-requests: write
16
22
 
17
23
  jobs:
18
24
  review:
@@ -20,8 +26,7 @@ jobs:
20
26
  steps:
21
27
  - uses: actions/checkout@v4
22
28
  with:
23
- # Need full history so origin/<base> is available for the diff.
24
- fetch-depth: 0
29
+ fetch-depth: 0 # need full history so origin/<base> is available for the diff
25
30
 
26
31
  - uses: actions/setup-node@v4
27
32
  with:
@@ -29,10 +34,46 @@ jobs:
29
34
 
30
35
  - run: npm install -g revu-ai
31
36
 
37
+ - name: Restore prior revu-ai report
38
+ uses: actions/cache@v4
39
+ with:
40
+ path: /tmp/revu-prior.json
41
+ # Per-run key forces a fresh save; restore-keys prefix picks up the most-recent prior.
42
+ key: revu-ai-pr-${{ github.event.pull_request.number }}-${{ github.run_id }}
43
+ restore-keys: |
44
+ revu-ai-pr-${{ github.event.pull_request.number }}-
45
+
32
46
  - name: Run revu-ai
33
47
  env:
34
48
  ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
35
49
  BASE_REF: ${{ github.event.pull_request.base.ref }}
36
50
  run: |
37
51
  git fetch origin "$BASE_REF":"refs/remotes/origin/$BASE_REF"
38
- revu-ai --base "origin/$BASE_REF" --output github --fail-on high
52
+ PRIOR_FLAG=""
53
+ if [ -f /tmp/revu-prior.json ]; then
54
+ PRIOR_FLAG="--prior-report /tmp/revu-prior.json"
55
+ fi
56
+ revu-ai \
57
+ --base "origin/$BASE_REF" \
58
+ --output json \
59
+ --output-file /tmp/revu.json \
60
+ $PRIOR_FLAG
61
+ # Note: `if: always()` on the post step below already keeps it running
62
+ # if this step exits non-zero, so findings still land on the PR.
63
+
64
+ - name: Post review comments
65
+ if: always()
66
+ env:
67
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
68
+ run: |
69
+ PRIOR_FLAG=""
70
+ if [ -f /tmp/revu-prior.json ]; then
71
+ PRIOR_FLAG="--prior-report /tmp/revu-prior.json"
72
+ fi
73
+ revu-ai github post \
74
+ --report /tmp/revu.json \
75
+ --output-file /tmp/revu-post.json \
76
+ $PRIOR_FLAG
77
+ cp /tmp/revu-post.json /tmp/revu-prior.json # cache pickup for next run
78
+ # To make the PR check itself blocking, add:
79
+ # --request-changes high