revu-ai 0.1.1 → 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.
- package/CHANGELOG.md +39 -0
- package/README.md +75 -12
- package/dist/cache/cross-reference.d.ts +37 -0
- package/dist/cache/cross-reference.js +94 -0
- package/dist/cache/cross-reference.js.map +1 -0
- package/dist/cli.js +106 -12
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.js +9 -10
- package/dist/config.js.map +1 -1
- package/dist/discovery.js +70 -12
- package/dist/discovery.js.map +1 -1
- package/dist/findings.d.ts +18 -0
- package/dist/findings.js +22 -0
- package/dist/findings.js.map +1 -0
- package/dist/forges/dedup.d.ts +17 -0
- package/dist/forges/dedup.js +42 -0
- package/dist/forges/dedup.js.map +1 -0
- package/dist/forges/diff-lines.d.ts +12 -0
- package/dist/forges/diff-lines.js +93 -0
- package/dist/forges/diff-lines.js.map +1 -0
- package/dist/forges/github/api.d.ts +70 -0
- package/dist/forges/github/api.js +102 -0
- package/dist/forges/github/api.js.map +1 -0
- package/dist/forges/github/index.d.ts +10 -0
- package/dist/forges/github/index.js +292 -0
- package/dist/forges/github/index.js.map +1 -0
- package/dist/forges/gitlab/index.d.ts +7 -0
- package/dist/forges/gitlab/index.js +13 -0
- package/dist/forges/gitlab/index.js.map +1 -0
- package/dist/forges/post-cmd.d.ts +20 -0
- package/dist/forges/post-cmd.js +54 -0
- package/dist/forges/post-cmd.js.map +1 -0
- package/dist/forges/registry.d.ts +5 -0
- package/dist/forges/registry.js +24 -0
- package/dist/forges/registry.js.map +1 -0
- package/dist/forges/render.d.ts +18 -0
- package/dist/forges/render.js +59 -0
- package/dist/forges/render.js.map +1 -0
- package/dist/forges/types.d.ts +65 -0
- package/dist/forges/types.js +2 -0
- package/dist/forges/types.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +3 -1
- package/dist/init.js +6 -3
- package/dist/init.js.map +1 -1
- package/dist/mcp/aggregator.d.ts +9 -1
- package/dist/mcp/aggregator.js +39 -3
- package/dist/mcp/aggregator.js.map +1 -1
- package/dist/mcp/server.d.ts +8 -0
- package/dist/mcp/server.js +60 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +38 -2
- package/dist/mcp/tools.js +36 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output/github.d.ts +1 -1
- package/dist/output/github.js +3 -7
- package/dist/output/github.js.map +1 -1
- package/dist/output/json.d.ts +3 -1
- package/dist/output/json.js +4 -7
- package/dist/output/json.js.map +1 -1
- package/dist/output/pretty.d.ts +1 -1
- package/dist/output/pretty.js +2 -8
- package/dist/output/pretty.js.map +1 -1
- package/dist/prompts/review-system.d.ts +3 -1
- package/dist/prompts/review-system.js +47 -2
- package/dist/prompts/review-system.js.map +1 -1
- package/dist/providers/claude-code.d.ts +7 -5
- package/dist/providers/claude-code.js +77 -15
- package/dist/providers/claude-code.js.map +1 -1
- package/dist/providers/opencode.d.ts +6 -0
- package/dist/providers/opencode.js +653 -0
- package/dist/providers/opencode.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -7
- package/dist/providers/registry.js +29 -21
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/types.d.ts +8 -1
- package/dist/runner.d.ts +6 -1
- package/dist/runner.js +71 -26
- package/dist/runner.js.map +1 -1
- package/dist/scaffold-paths.d.ts +10 -0
- package/dist/scaffold-paths.js +25 -0
- package/dist/scaffold-paths.js.map +1 -0
- package/dist/types.d.ts +38 -3
- package/dist/types.js +4 -7
- package/dist/types.js.map +1 -1
- package/examples/github-workflow.yml +51 -10
- package/package.json +5 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `revu-ai` are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project's pre-1.0 versioning treats minor bumps as breaking-change boundaries.
|
|
4
|
+
|
|
5
|
+
## 0.2.0 — 2026-05-09
|
|
6
|
+
|
|
7
|
+
### Breaking changes
|
|
8
|
+
|
|
9
|
+
- **`--provider` semantics changed.** The flag previously selected the agent harness (`claude-code`); that role moved to a new `--harness` flag. `--provider` is now the AI-provider field, only meaningful for harnesses that support multiple providers (currently `opencode`). Same renames in `revu.config.json` (`provider` → `harness`, plus a new optional `provider`).
|
|
10
|
+
- The exported registry API renamed: `registerProvider` / `unregisterProvider` / `getProviderFactory` / `listProviders` → `registerHarness` / `unregisterHarness` / `getHarnessFactory` / `listHarnesses`. Plus the scaffold pair: `registerScaffoldProvider` → `registerScaffoldHarness`, `getScaffoldFactory` → `getScaffoldHarness`.
|
|
11
|
+
- `RevuConfig.provider: string` → `RevuConfig.harness: string` with a new optional `RevuConfig.provider?: string`.
|
|
12
|
+
- **`RunReport.schemaVersion` bumped from `1` to `2`.** The shape gains a required `Finding.fingerprint` (12-char sha256 prefix of `ruleId|path|line|message`), an optional `Finding.priorFp` for moved-finding correlation, an optional `Finding.commentId` populated by the github post step, and a top-level `resolutions: Resolution[]` array. Readers that consume `--output-file` JSON should accept v1 OR v2 (the post step does — see `src/forges/post-cmd.ts`).
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **opencode harness.** Drop in any provider/model [opencode](https://opencode.ai) supports — xAI Grok, Google Gemini, OpenAI, Anthropic-via-opencode, etc.
|
|
17
|
+
```bash
|
|
18
|
+
revu-ai --harness opencode --provider xai --model grok-4-1-fast-reasoning
|
|
19
|
+
revu-ai --harness opencode --provider google --model gemini-2.5-pro
|
|
20
|
+
revu-ai init --harness opencode --provider google --model gemini-2.5-pro
|
|
21
|
+
```
|
|
22
|
+
Requires the `opencode` binary on `PATH`. Set the relevant env var: `XAI_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`.
|
|
23
|
+
- **`mcp__revu__write_rule_file` sidecar tool** (scaffold mode only). Path-validates `.revu.md` writes inside the repo root; required for the opencode scaffold path since opencode lacks per-call tool gating.
|
|
24
|
+
- New shared util `src/scaffold-paths.ts` exporting `isAllowedRuleFileWrite` / `toRepoRelative` (lifted out of `claude-code.ts`).
|
|
25
|
+
- Cross-validation tests for the opencode bash allowlist (`tests/opencode-bash.test.ts`) — 43 cases asserting that every command the patterns intend to allow is also accepted by claude-code's stricter `isReadOnlyShellCommand`, plus adversarial inputs (redirects, chains, command substitution, mutators) the validator rejects.
|
|
26
|
+
- Test coverage added for `FindingsAggregator.markResolved` / `resolutionsFor` / `allResolutions` / `onResolution`, the `mark_finding_resolved` MCP tool, and the runner's `priorReport` input flow.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **`revu-ai github post`** — sequential PATCH calls now use per-call try/catch and continue through the loop on failure. Failures are logged to stderr with counts and reasons; the augmented report is always returned so the next run's `--prior-report` can dedup correctly. The `listReviewCommentsForReview` backfill is similarly resilient — a network blip there logs a warning instead of dropping the augmented report.
|
|
31
|
+
- Severity display maps (`SEV_BADGE` in `forges/render.ts`, `SEV_COLOR` / `SEV_LABEL` in `cli.ts`) now carry comments noting that `Record<Severity, …>` makes `SEVERITIES` (in `src/types.ts`) the single source of truth — adding a new severity fails typecheck at every map until it's extended.
|
|
32
|
+
|
|
33
|
+
### Safety notes
|
|
34
|
+
|
|
35
|
+
The opencode harness is a weaker bash boundary than claude-code's: opencode evaluates its `permission.bash` patterns with simple wildcards (`*` matches anything, including shell metacharacters), so a pattern like `"cat *"` cannot prevent `cat foo > /tmp/x`. Residual defenses are the reviewer system prompt (read-only commands only), `permission.edit: "deny"`, and the `"*": "deny"` catchall. The contract the agent is expected to respect is pinned by `tests/opencode-bash.test.ts`. Use the claude-code harness if you need stricter shell sandboxing.
|
|
36
|
+
|
|
37
|
+
## 0.1.1
|
|
38
|
+
|
|
39
|
+
GitHub PR review integration + prior-run-aware reviewers (initial release on this branch).
|
package/README.md
CHANGED
|
@@ -22,7 +22,15 @@ npm i -D revu-ai
|
|
|
22
22
|
pnpm add -D revu-ai
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Set
|
|
25
|
+
Set the API key for whichever harness/provider you'll use:
|
|
26
|
+
|
|
27
|
+
- **Claude Code** (default harness): `ANTHROPIC_API_KEY`
|
|
28
|
+
- **opencode** harness with `--provider xai`: `XAI_API_KEY`
|
|
29
|
+
- **opencode** harness with `--provider google`: `GOOGLE_GENERATIVE_AI_API_KEY`
|
|
30
|
+
- **opencode** harness with `--provider anthropic`: `ANTHROPIC_API_KEY`
|
|
31
|
+
- **opencode** harness with `--provider openai`: `OPENAI_API_KEY`
|
|
32
|
+
|
|
33
|
+
The opencode harness also requires the `opencode` binary on your `PATH` ([install instructions](https://opencode.ai/docs/install/)).
|
|
26
34
|
|
|
27
35
|
## Quick start
|
|
28
36
|
|
|
@@ -91,8 +99,9 @@ Options:
|
|
|
91
99
|
--working-tree # review uncommitted changes instead of branch
|
|
92
100
|
--staged # review staged changes only
|
|
93
101
|
--pattern <glob> # rule file glob; default: **/*.revu.md
|
|
94
|
-
--
|
|
95
|
-
--
|
|
102
|
+
--harness <name> # claude-code | opencode (default: claude-code)
|
|
103
|
+
--provider <name> # AI provider id (opencode harness only) — e.g. xai, google, anthropic
|
|
104
|
+
--model <id> # model id passed to harness
|
|
96
105
|
--concurrency <n> # max parallel agents; default: min(8, ruleCount)
|
|
97
106
|
--output <fmt> # pretty | json | github (default: auto)
|
|
98
107
|
--output-file <path> # also write output to a file
|
|
@@ -110,7 +119,7 @@ Exit codes: `0` clean, `1` findings ≥ `--fail-on`, `2` runner / agent error.
|
|
|
110
119
|
```json
|
|
111
120
|
{
|
|
112
121
|
"pattern": "**/*.revu.md",
|
|
113
|
-
"
|
|
122
|
+
"harness": "claude-code",
|
|
114
123
|
"model": "claude-sonnet-4-6",
|
|
115
124
|
"concurrency": 8,
|
|
116
125
|
"output": "auto",
|
|
@@ -118,6 +127,39 @@ Exit codes: `0` clean, `1` findings ≥ `--fail-on`, `2` runner / agent error.
|
|
|
118
127
|
}
|
|
119
128
|
```
|
|
120
129
|
|
|
130
|
+
### Using opencode (Gemini, Grok, OpenAI, …)
|
|
131
|
+
|
|
132
|
+
`revu-ai` supports [opencode](https://opencode.ai) as an alternative harness, which lets you swap in any provider+model opencode supports.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Grok via xAI
|
|
136
|
+
revu-ai --harness opencode --provider xai --model grok-4-1-fast-reasoning
|
|
137
|
+
|
|
138
|
+
# Gemini 2.5 Pro via Google
|
|
139
|
+
revu-ai --harness opencode --provider google --model gemini-2.5-pro
|
|
140
|
+
|
|
141
|
+
# Claude via Anthropic, but driven through opencode instead of Claude Code
|
|
142
|
+
revu-ai --harness opencode --provider anthropic --model claude-sonnet-4-5
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Or in `revu.config.json`:
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"harness": "opencode",
|
|
150
|
+
"provider": "xai",
|
|
151
|
+
"model": "grok-4-1-fast-reasoning"
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The `init` command also honors these flags, so you can scaffold rule files using whatever provider/model you prefer:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
revu-ai init --harness opencode --provider google --model gemini-2.5-pro
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
> **Note on safety:** Under the opencode harness, file edits and webfetch are denied, and bash is restricted to read-only commands via opencode's permission patterns. Rule-file writes during `init` are routed through a sidecar MCP tool (`mcp__revu__write_rule_file`) that path-validates each write inside the repo.
|
|
162
|
+
|
|
121
163
|
## Output
|
|
122
164
|
|
|
123
165
|
The JSON shape is the stable contract for downstream tooling:
|
|
@@ -138,19 +180,40 @@ The JSON shape is the stable contract for downstream tooling:
|
|
|
138
180
|
}
|
|
139
181
|
```
|
|
140
182
|
|
|
141
|
-
##
|
|
183
|
+
## Forge integrations
|
|
184
|
+
|
|
185
|
+
revu-ai is forge-agnostic. The first integration ships GitHub; GitLab and others slot in via the same interface (the CLI grammar is `revu-ai <forge> post`).
|
|
186
|
+
|
|
187
|
+
### GitHub
|
|
188
|
+
|
|
189
|
+
A starter workflow lives at `examples/github-workflow.yml`. Drop it into `.github/workflows/revu-ai.yml` and add `ANTHROPIC_API_KEY` as a repo secret. The workflow runs revu-ai, then `revu-ai github post` lands findings as **one bundled PR review** with threaded inline comments and a top-level summary — same UX as a human reviewer leaving a multi-comment review.
|
|
190
|
+
|
|
191
|
+
Re-runs are idempotent: each comment carries a hidden marker, and findings already posted on the PR are skipped automatically. To make the PR check itself blocking, add `--request-changes high` to the post step — any high/critical finding then submits as `REQUEST_CHANGES`, which combines with branch protection to block merge.
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
revu-ai github post --report /tmp/revu.json [options]
|
|
195
|
+
--pr <n> PR number (default: parsed from $GITHUB_REF on pull_request events)
|
|
196
|
+
--repo <owner/repo> default: $GITHUB_REPOSITORY
|
|
197
|
+
--commit-sha <sha> default: $GITHUB_SHA
|
|
198
|
+
--token-env <NAME> env var holding the token (default: GITHUB_TOKEN)
|
|
199
|
+
--request-changes <sev> submit as REQUEST_CHANGES if any finding ≥ severity
|
|
200
|
+
--no-dedup post everything; ignore existing bot comments
|
|
201
|
+
--dry-run print the request body that would be POSTed; no network calls
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### GitLab and others
|
|
142
205
|
|
|
143
|
-
|
|
206
|
+
`revu-ai gitlab post` is reserved in the CLI but not yet implemented — the adapter throws a clear "not yet implemented" message until shipped. Bitbucket / Gitea / Forgejo will plug in via the same `ForgeAdapter` interface in `src/forges/types.ts`.
|
|
144
207
|
|
|
145
|
-
## Custom
|
|
208
|
+
## Custom harnesses
|
|
146
209
|
|
|
147
|
-
|
|
210
|
+
Two harnesses ship out of the box: `claude-code` (via `@anthropic-ai/claude-agent-sdk`) and `opencode` (via `@opencode-ai/sdk`). The `ReviewAgent` interface in `src/providers/types.ts` is the swap-out boundary for adding more:
|
|
148
211
|
|
|
149
212
|
```ts
|
|
150
|
-
import {
|
|
213
|
+
import { registerHarness } from "revu-ai";
|
|
151
214
|
|
|
152
|
-
|
|
153
|
-
name: "my-
|
|
215
|
+
registerHarness("my-harness", (cfg) => ({
|
|
216
|
+
name: "my-harness",
|
|
154
217
|
async run(input) {
|
|
155
218
|
// Connect to input.mcp.url with Authorization: Bearer <input.mcp.authToken>
|
|
156
219
|
// and X-Revu-Rule-Id: <input.ruleId>. Call mcp__report_finding for each finding.
|
|
@@ -159,7 +222,7 @@ registerProvider("my-provider", (cfg) => ({
|
|
|
159
222
|
}));
|
|
160
223
|
```
|
|
161
224
|
|
|
162
|
-
Then `revu-ai --
|
|
225
|
+
Then `revu-ai --harness my-harness` (or set it in `revu.config.json`).
|
|
163
226
|
|
|
164
227
|
## License
|
|
165
228
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Finding, Resolution, RunReport } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Pure function that turns a (priorReport, currentReport) pair into a plan
|
|
4
|
+
* of what the post step should do on the forge:
|
|
5
|
+
* - PATCH comments for resolved findings (mark them resolved-with-strikethrough)
|
|
6
|
+
* - PATCH comments for moved findings (rewrite body + line)
|
|
7
|
+
* - POST fresh comments for genuinely-new findings
|
|
8
|
+
* - Produce the next-run cache (`outputFindings` ∪ resolved entries)
|
|
9
|
+
*/
|
|
10
|
+
export interface ResolvedPatch {
|
|
11
|
+
ruleId: string;
|
|
12
|
+
commentId: number | string;
|
|
13
|
+
/** The finding (from prior) being marked resolved. */
|
|
14
|
+
finding: Finding;
|
|
15
|
+
reason: "fixed" | "stale";
|
|
16
|
+
resolvedAtSha: string;
|
|
17
|
+
}
|
|
18
|
+
export interface MovedPatch {
|
|
19
|
+
ruleId: string;
|
|
20
|
+
commentId: number | string;
|
|
21
|
+
/** The finding (from current run) at its new location. */
|
|
22
|
+
finding: Finding;
|
|
23
|
+
/** The fingerprint of the prior finding this evolved from. */
|
|
24
|
+
priorFp: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ActionPlan {
|
|
27
|
+
patchesResolved: ResolvedPatch[];
|
|
28
|
+
patchesMoved: MovedPatch[];
|
|
29
|
+
posts: Finding[];
|
|
30
|
+
/** Findings to record in the cache for the next run. Includes still-open carry-overs,
|
|
31
|
+
* moved-to-new-location updates, and net-new findings. Resolved findings are NOT
|
|
32
|
+
* carried forward (their resolution is final). */
|
|
33
|
+
outputFindings: Finding[];
|
|
34
|
+
/** Resolutions from the current run, plus any prior resolutions carried over. */
|
|
35
|
+
outputResolutions: Resolution[];
|
|
36
|
+
}
|
|
37
|
+
export declare function buildActionPlan(priorReport: RunReport | undefined, currentReport: RunReport): ActionPlan;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export function buildActionPlan(priorReport, currentReport) {
|
|
2
|
+
const currentSha = currentReport.reviewTarget.headSha ?? "";
|
|
3
|
+
// ---- Index prior findings by fingerprint ----
|
|
4
|
+
const priorByFp = new Map();
|
|
5
|
+
if (priorReport) {
|
|
6
|
+
for (const f of priorReport.findings) {
|
|
7
|
+
priorByFp.set(f.fingerprint, f);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
// ---- Track which prior fps are touched this run ----
|
|
11
|
+
const touchedPriorFps = new Set();
|
|
12
|
+
// ---- Walk current resolutions ----
|
|
13
|
+
const patchesResolved = [];
|
|
14
|
+
for (const r of currentReport.resolutions) {
|
|
15
|
+
const prior = priorByFp.get(r.fingerprint);
|
|
16
|
+
if (!prior)
|
|
17
|
+
continue; // resolution refers to an unknown prior — ignore (could be stale agent state)
|
|
18
|
+
touchedPriorFps.add(r.fingerprint);
|
|
19
|
+
if (prior.commentId !== undefined) {
|
|
20
|
+
patchesResolved.push({
|
|
21
|
+
ruleId: r.ruleId,
|
|
22
|
+
commentId: prior.commentId,
|
|
23
|
+
finding: prior,
|
|
24
|
+
reason: r.reason,
|
|
25
|
+
resolvedAtSha: r.resolvedAtSha || currentSha,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// ---- Walk current findings ----
|
|
30
|
+
const patchesMoved = [];
|
|
31
|
+
const posts = [];
|
|
32
|
+
const outputFindings = [];
|
|
33
|
+
for (const cf of currentReport.findings) {
|
|
34
|
+
if (cf.priorFp) {
|
|
35
|
+
// Moved finding — correlate with the prior.
|
|
36
|
+
const prior = priorByFp.get(cf.priorFp);
|
|
37
|
+
touchedPriorFps.add(cf.priorFp);
|
|
38
|
+
if (prior?.commentId !== undefined) {
|
|
39
|
+
const augmented = {
|
|
40
|
+
...cf,
|
|
41
|
+
commentId: prior.commentId,
|
|
42
|
+
firstSeenSha: prior.firstSeenSha ?? prior.lastSeenSha ?? currentSha,
|
|
43
|
+
lastSeenSha: currentSha,
|
|
44
|
+
};
|
|
45
|
+
patchesMoved.push({
|
|
46
|
+
ruleId: cf.ruleId,
|
|
47
|
+
commentId: prior.commentId,
|
|
48
|
+
finding: augmented,
|
|
49
|
+
priorFp: cf.priorFp,
|
|
50
|
+
});
|
|
51
|
+
outputFindings.push(augmented);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// Prior we'd patch isn't known — treat as a fresh post.
|
|
55
|
+
posts.push({ ...cf, firstSeenSha: currentSha, lastSeenSha: currentSha });
|
|
56
|
+
outputFindings.push({ ...cf, firstSeenSha: currentSha, lastSeenSha: currentSha });
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const samePrior = priorByFp.get(cf.fingerprint);
|
|
60
|
+
if (samePrior) {
|
|
61
|
+
// Still open at the same location — carry the prior commentId forward.
|
|
62
|
+
touchedPriorFps.add(cf.fingerprint);
|
|
63
|
+
outputFindings.push({
|
|
64
|
+
...cf,
|
|
65
|
+
commentId: samePrior.commentId,
|
|
66
|
+
firstSeenSha: samePrior.firstSeenSha ?? samePrior.lastSeenSha ?? currentSha,
|
|
67
|
+
lastSeenSha: currentSha,
|
|
68
|
+
});
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Genuinely new.
|
|
72
|
+
posts.push({ ...cf, firstSeenSha: currentSha, lastSeenSha: currentSha });
|
|
73
|
+
outputFindings.push({ ...cf, firstSeenSha: currentSha, lastSeenSha: currentSha });
|
|
74
|
+
}
|
|
75
|
+
// ---- Carry forward prior findings that weren't touched and weren't resolved ----
|
|
76
|
+
// The reviewer agent is *expected* to silently drop "still open at same location" findings.
|
|
77
|
+
// If a prior is missing from current AND not in resolutions, treat as still-open and carry over.
|
|
78
|
+
if (priorReport) {
|
|
79
|
+
for (const prior of priorReport.findings) {
|
|
80
|
+
if (touchedPriorFps.has(prior.fingerprint))
|
|
81
|
+
continue;
|
|
82
|
+
// Already-resolved (in this run) is a different bucket — handled above.
|
|
83
|
+
// Carry forward unchanged with lastSeenSha bumped.
|
|
84
|
+
outputFindings.push({
|
|
85
|
+
...prior,
|
|
86
|
+
lastSeenSha: currentSha,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ---- Resolutions: just propagate this run's; old resolutions don't need re-recording. ----
|
|
91
|
+
const outputResolutions = [...currentReport.resolutions];
|
|
92
|
+
return { patchesResolved, patchesMoved, posts, outputFindings, outputResolutions };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=cross-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-reference.js","sourceRoot":"","sources":["../../src/cache/cross-reference.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -8,6 +8,7 @@ import { listRules, run, RevuExit } from "./runner.js";
|
|
|
8
8
|
import { emitJson } from "./output/json.js";
|
|
9
9
|
import { emitPretty } from "./output/pretty.js";
|
|
10
10
|
import { emitGithub } from "./output/github.js";
|
|
11
|
+
import { SEVERITIES } from "./types.js";
|
|
11
12
|
const COLOR = process.stderr.isTTY && !process.env.NO_COLOR;
|
|
12
13
|
const c = {
|
|
13
14
|
reset: "\x1b[0m",
|
|
@@ -22,6 +23,9 @@ const c = {
|
|
|
22
23
|
gray: "\x1b[90m",
|
|
23
24
|
};
|
|
24
25
|
const paint = (color, s) => (COLOR ? `${c[color]}${s}${c.reset}` : s);
|
|
26
|
+
// `Record<Severity, …>` makes SEVERITIES the single source of truth — adding
|
|
27
|
+
// a new severity in src/types.ts fails typecheck here until both maps are
|
|
28
|
+
// extended. (See also: src/forges/render.ts's SEV_BADGE.)
|
|
25
29
|
const SEV_COLOR = {
|
|
26
30
|
aesthetic: "gray",
|
|
27
31
|
low: "blue",
|
|
@@ -63,17 +67,21 @@ program
|
|
|
63
67
|
.command("init")
|
|
64
68
|
.description("Spawn an agent to inspect the repo and scaffold curated .revu.md rule files")
|
|
65
69
|
.option("--force", "overwrite existing rule files in .revu/")
|
|
66
|
-
.option("--
|
|
67
|
-
.option("--
|
|
70
|
+
.option("--harness <name>", "agent harness (default: claude-code; also: opencode)")
|
|
71
|
+
.option("--provider <name>", "AI provider id (opencode harness only — e.g. x-ai, google, anthropic)")
|
|
72
|
+
.option("--model <id>", "model id passed to harness")
|
|
68
73
|
.option("--timeout-ms <ms>", "scaffold agent wall-clock timeout (default: 600000 = 10min)", parseIntOpt)
|
|
69
74
|
.action(async (opts) => {
|
|
70
75
|
const { runInit, InitRefusedError } = await import("./init.js");
|
|
71
|
-
|
|
76
|
+
// See run-command sibling — paint() handles ANSI noop in non-TTY, so
|
|
77
|
+
// emit progress everywhere unless REVU_DEBUG / REVU_QUIET says otherwise.
|
|
78
|
+
const showProgress = !process.env.REVU_DEBUG && !process.env.REVU_QUIET;
|
|
72
79
|
try {
|
|
73
80
|
const result = await runInit({
|
|
74
81
|
cwd: process.cwd(),
|
|
75
82
|
force: opts.force ?? false,
|
|
76
|
-
|
|
83
|
+
harness: opts.harness ?? "claude-code",
|
|
84
|
+
...(opts.provider !== undefined ? { provider: opts.provider } : {}),
|
|
77
85
|
...(opts.model !== undefined ? { model: opts.model } : {}),
|
|
78
86
|
timeoutMs: opts.timeoutMs ?? 600_000,
|
|
79
87
|
onStart: ({ repoRoot }) => process.stderr.write(`${paint("cyan", "▶")} ${paint("bold", "scaffolding rule files")} ${paint("dim", repoRoot)}\n`),
|
|
@@ -137,13 +145,15 @@ program
|
|
|
137
145
|
.option("--working-tree", "review uncommitted working-tree changes")
|
|
138
146
|
.option("--staged", "review staged changes only")
|
|
139
147
|
.option("--pattern <glob>", "rule file glob")
|
|
140
|
-
.option("--
|
|
141
|
-
.option("--
|
|
148
|
+
.option("--harness <name>", "agent harness (default: claude-code; also: opencode)")
|
|
149
|
+
.option("--provider <name>", "AI provider id (opencode harness only — e.g. x-ai, google, anthropic)")
|
|
150
|
+
.option("--model <id>", "model id passed to harness")
|
|
142
151
|
.option("--concurrency <n>", "max parallel agents", parseIntOpt)
|
|
143
152
|
.option("--output <fmt>", "pretty | json | github")
|
|
144
153
|
.option("--output-file <path>", "additionally write output to a file")
|
|
145
154
|
.option("--fail-on <severity>", "exit non-zero threshold (default: high)")
|
|
146
155
|
.option("--timeout-ms <ms>", "per-rule wall-clock timeout in ms (default: 300000 = 5min); 0 disables", parseIntOpt0Allowed)
|
|
156
|
+
.option("--prior-report <path>", "Prior --output-file report; reviewer agents see open prior findings as context")
|
|
147
157
|
.option("--force", "ignore the no-changes pre-flight skip")
|
|
148
158
|
.option("--config <path>", "config file path")
|
|
149
159
|
.action(async (opts) => {
|
|
@@ -151,7 +161,27 @@ program
|
|
|
151
161
|
const repoRoot = findRepoRoot(cwd);
|
|
152
162
|
const cfg = loadConfig(repoRoot, opts);
|
|
153
163
|
try {
|
|
154
|
-
|
|
164
|
+
// Always show per-rule progress — `paint()` already noops ANSI codes
|
|
165
|
+
// when stderr isn't a TTY (CI logs), so this gives plain `↳ Bash(...)`,
|
|
166
|
+
// `↳ Read(...)`, `✱ med ...` lines that are useful for debugging long
|
|
167
|
+
// CI runs. REVU_DEBUG suppresses this in favour of raw SDK debug
|
|
168
|
+
// output. Set REVU_QUIET to opt out entirely.
|
|
169
|
+
const showProgress = !process.env.REVU_DEBUG && !process.env.REVU_QUIET;
|
|
170
|
+
// Optionally read the prior-run report to enable cross-run reasoning.
|
|
171
|
+
let priorReportObj;
|
|
172
|
+
if (cfg.priorReport) {
|
|
173
|
+
try {
|
|
174
|
+
const fs = await import("node:fs");
|
|
175
|
+
priorReportObj = JSON.parse(fs.readFileSync(cfg.priorReport, "utf8"));
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
const code = e.code;
|
|
179
|
+
if (code !== "ENOENT")
|
|
180
|
+
throw e;
|
|
181
|
+
// Missing prior file is normal on the first run; just proceed without one.
|
|
182
|
+
priorReportObj = undefined;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
155
185
|
const { report, exitCode } = await run(cwd, cfg, {
|
|
156
186
|
onRuleStart: (id) => process.stderr.write(`${paint("cyan", "▶")} ${paint("bold", id)}\n`),
|
|
157
187
|
onActivity: showProgress
|
|
@@ -193,15 +223,22 @@ program
|
|
|
193
223
|
}
|
|
194
224
|
process.stderr.write(` ${paint("bold", r.id)} ${status} ${dur}\n`);
|
|
195
225
|
},
|
|
196
|
-
});
|
|
226
|
+
}, { ...(priorReportObj ? { priorReport: priorReportObj } : {}) });
|
|
197
227
|
const fmt = cfg.output === "auto" ? (process.stdout.isTTY ? "pretty" : "json") : cfg.output;
|
|
198
|
-
const outFile = cfg.outputFile;
|
|
199
228
|
if (fmt === "json")
|
|
200
|
-
emitJson(report
|
|
229
|
+
emitJson(report);
|
|
201
230
|
else if (fmt === "github")
|
|
202
|
-
emitGithub(report
|
|
231
|
+
emitGithub(report);
|
|
203
232
|
else
|
|
204
|
-
emitPretty(report
|
|
233
|
+
emitPretty(report);
|
|
234
|
+
// `--output-file` is the machine-readable contract for cross-run
|
|
235
|
+
// reuse (`--prior-report` next time). It is always JSON regardless
|
|
236
|
+
// of the stdout format the user picked, so a CI workflow can show
|
|
237
|
+
// a pretty review on screen and still cache the report verbatim.
|
|
238
|
+
if (cfg.outputFile) {
|
|
239
|
+
const fs = await import("node:fs");
|
|
240
|
+
fs.writeFileSync(cfg.outputFile, JSON.stringify(report, null, 2) + "\n", "utf8");
|
|
241
|
+
}
|
|
205
242
|
// If every rule errored, emit a stderr line with the actual cause so
|
|
206
243
|
// it's visible even when stdout is being piped/captured.
|
|
207
244
|
const failed = report.rules.filter((r) => !r.ok);
|
|
@@ -239,6 +276,63 @@ function parseIntOpt(value) {
|
|
|
239
276
|
throw new Error(`Invalid integer: ${value}`);
|
|
240
277
|
return n;
|
|
241
278
|
}
|
|
279
|
+
function parseSeverityOpt(value) {
|
|
280
|
+
if (SEVERITIES.includes(value))
|
|
281
|
+
return value;
|
|
282
|
+
throw new Error(`Invalid severity "${value}". Expected one of: ${SEVERITIES.join(", ")}`);
|
|
283
|
+
}
|
|
284
|
+
function registerForgeCommands(program) {
|
|
285
|
+
for (const forgeName of ["github", "gitlab"]) {
|
|
286
|
+
const group = program.command(forgeName).description(`${forgeName} forge integration`);
|
|
287
|
+
group
|
|
288
|
+
.command("post")
|
|
289
|
+
.description(forgeName === "github"
|
|
290
|
+
? "Post a revu-ai run report as a PR review with bundled inline comments"
|
|
291
|
+
: `Post a revu-ai run report to ${forgeName} (not yet implemented)`)
|
|
292
|
+
.requiredOption("--report <path>", "JSON report from `revu-ai --output json --output-file ...` (use `-` for stdin)")
|
|
293
|
+
.option("--prior-report <path>", "Prior run's --output-file (for cross-run dedup, resolutions, and PATCH-instead-of-POST)")
|
|
294
|
+
.option("--output-file <path>", "Write the augmented report (with new commentIds) here so the next run can use it as --prior-report")
|
|
295
|
+
.option("--pr <n>", "PR/MR number (default: parsed from CI env)")
|
|
296
|
+
.option("--repo <owner/repo>", "default: forge-specific env var")
|
|
297
|
+
.option("--commit-sha <sha>", "default: $GITHUB_SHA / equivalent")
|
|
298
|
+
.option("--token-env <NAME>", "env var holding the API token (default: GITHUB_TOKEN / etc.)")
|
|
299
|
+
.option("--request-changes <severity>", "submit as REQUEST_CHANGES if any new finding ≥ severity", parseSeverityOpt)
|
|
300
|
+
.option("--dry-run", "print the request body that would be POSTed; no network calls")
|
|
301
|
+
.action(async (opts) => {
|
|
302
|
+
const { runForgePost } = await import("./forges/post-cmd.js");
|
|
303
|
+
try {
|
|
304
|
+
const result = await runForgePost({
|
|
305
|
+
forge: forgeName,
|
|
306
|
+
reportPath: opts.report,
|
|
307
|
+
...(opts.priorReport !== undefined ? { priorReportPath: opts.priorReport } : {}),
|
|
308
|
+
...(opts.outputFile !== undefined ? { outputFile: opts.outputFile } : {}),
|
|
309
|
+
flags: {
|
|
310
|
+
...(opts.pr !== undefined ? { pr: opts.pr } : {}),
|
|
311
|
+
...(opts.repo !== undefined ? { repo: opts.repo } : {}),
|
|
312
|
+
...(opts.commitSha !== undefined ? { commitSha: opts.commitSha } : {}),
|
|
313
|
+
...(opts.tokenEnv !== undefined ? { tokenEnv: opts.tokenEnv } : {}),
|
|
314
|
+
},
|
|
315
|
+
...(opts.requestChanges !== undefined ? { requestChangesAtOrAbove: opts.requestChanges } : {}),
|
|
316
|
+
dryRun: opts.dryRun ?? false,
|
|
317
|
+
});
|
|
318
|
+
// Emit a colored summary on stderr.
|
|
319
|
+
const headline = result.event === "request-changes"
|
|
320
|
+
? `${paint("red", paint("bold", "✗"))} ${paint("bold", "request changes")}`
|
|
321
|
+
: `${paint("green", paint("bold", "✓"))} ${paint("bold", "review submitted")}`;
|
|
322
|
+
process.stderr.write(`${headline} ${paint("dim", `(posts: ${result.inline.posted}, patches: ${result.patchesResolved + result.patchesMoved} [${result.patchesResolved} resolved + ${result.patchesMoved} moved])`)}\n`);
|
|
323
|
+
if (result.reviewUrl)
|
|
324
|
+
process.stderr.write(` ${paint("dim", result.reviewUrl)}\n`);
|
|
325
|
+
// Exit code: 1 when blocking (request-changes), 0 otherwise.
|
|
326
|
+
process.exit(result.event === "request-changes" ? 1 : 0);
|
|
327
|
+
}
|
|
328
|
+
catch (e) {
|
|
329
|
+
process.stderr.write(`${paint("red", paint("bold", `revu-ai ${forgeName} post:`))} ${e.message}\n`);
|
|
330
|
+
process.exit(2);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
registerForgeCommands(program);
|
|
242
336
|
function parseIntOpt0Allowed(value) {
|
|
243
337
|
const n = Number.parseInt(value, 10);
|
|
244
338
|
if (!Number.isFinite(n) || n < 0)
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type RevuConfig } from "./types.js";
|
|
2
2
|
export declare const DEFAULT_CONFIG: RevuConfig;
|
|
3
3
|
export interface CliOverrides {
|
|
4
4
|
base?: string;
|
|
5
5
|
workingTree?: boolean;
|
|
6
6
|
staged?: boolean;
|
|
7
7
|
pattern?: string;
|
|
8
|
+
harness?: string;
|
|
8
9
|
provider?: string;
|
|
9
10
|
model?: string;
|
|
10
11
|
concurrency?: number;
|
|
@@ -14,5 +15,6 @@ export interface CliOverrides {
|
|
|
14
15
|
force?: boolean;
|
|
15
16
|
config?: string;
|
|
16
17
|
timeoutMs?: number;
|
|
18
|
+
priorReport?: string;
|
|
17
19
|
}
|
|
18
20
|
export declare function loadConfig(repoRoot: string, overrides: CliOverrides): RevuConfig;
|
package/dist/config.js
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
"low",
|
|
6
|
-
"medium",
|
|
7
|
-
"high",
|
|
8
|
-
"critical",
|
|
9
|
-
]);
|
|
3
|
+
import { SEVERITIES } from "./types.js";
|
|
4
|
+
const SEVERITY_SET = new Set(SEVERITIES);
|
|
10
5
|
export const DEFAULT_CONFIG = {
|
|
11
6
|
pattern: "**/*.revu.md",
|
|
12
7
|
workingTree: false,
|
|
13
8
|
staged: false,
|
|
14
|
-
|
|
9
|
+
harness: "claude-code",
|
|
15
10
|
output: "auto",
|
|
16
11
|
failOn: "high",
|
|
17
12
|
force: false,
|
|
@@ -42,6 +37,8 @@ export function loadConfig(repoRoot, overrides) {
|
|
|
42
37
|
merged.workingTree = overrides.workingTree;
|
|
43
38
|
if (overrides.staged !== undefined)
|
|
44
39
|
merged.staged = overrides.staged;
|
|
40
|
+
if (overrides.harness !== undefined)
|
|
41
|
+
merged.harness = overrides.harness;
|
|
45
42
|
if (overrides.provider !== undefined)
|
|
46
43
|
merged.provider = overrides.provider;
|
|
47
44
|
if (overrides.model !== undefined)
|
|
@@ -56,9 +53,11 @@ export function loadConfig(repoRoot, overrides) {
|
|
|
56
53
|
merged.force = overrides.force;
|
|
57
54
|
if (overrides.timeoutMs !== undefined)
|
|
58
55
|
merged.timeoutMs = overrides.timeoutMs;
|
|
56
|
+
if (overrides.priorReport !== undefined)
|
|
57
|
+
merged.priorReport = overrides.priorReport;
|
|
59
58
|
if (overrides.failOn !== undefined) {
|
|
60
|
-
if (!
|
|
61
|
-
throw new Error(`Invalid --fail-on value: ${overrides.failOn}. Expected one of: ${
|
|
59
|
+
if (!SEVERITY_SET.has(overrides.failOn)) {
|
|
60
|
+
throw new Error(`Invalid --fail-on value: ${overrides.failOn}. Expected one of: ${SEVERITIES.join(", ")}`);
|
|
62
61
|
}
|
|
63
62
|
merged.failOn = overrides.failOn;
|
|
64
63
|
}
|