@fullstackhouse/cerber 0.10.1 → 0.12.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/README.md CHANGED
@@ -8,9 +8,7 @@ verdict with a confidence score. You go through it in a local web cockpit.
8
8
  write is the Send button (plus opt-in daemon auto-send you turn on yourself) —
9
9
  reviewing is 100% local and read-only.
10
10
 
11
- Named after Cerberus, the gatekeeper — and a sibling of
12
- [cezar](https://github.com/open-mercato/cezar): cezar runs coding agents,
13
- cerber guards what gets merged.
11
+ Named after Cerberus, the gatekeeper: cerber guards what gets merged.
14
12
 
15
13
  ## Quick start
16
14
 
@@ -37,9 +35,21 @@ npx @fullstackhouse/cerber serve # → http://127.0.0.1:4820
37
35
  Sending stays a human click. Tame it with `--no-auto-review` (list awaiting
38
36
  PRs, review on click) or `--no-poll` (no GitHub polling at all) — or flip the
39
37
  same two switches in the cockpit's Settings, which persist in
40
- `~/.cerber/config.json` and apply on the next poll. Merged and closed PRs are
41
- archived out of the queue automatically, and PRs in archived repos are never
42
- picked up at all — the repo is read-only, so a review could never be sent.
38
+ `~/.cerber/config.json` and apply on the next poll. The queue only lists what
39
+ still wants you: anything you have settled drops into a drawer under it — one
40
+ for reviews you sent, one for the ones you marked reviewed or skipped, one for
41
+ merged and closed PRs — and PRs in archived repos are never picked up at all,
42
+ since the repo is read-only and a review could never be sent.
43
+
44
+ The cockpit is a background tab most of the day, so it tells you when the queue
45
+ grows: a desktop notification naming the PR that arrived — click it to open the
46
+ review — folded into one popup when several land at once. It stays quiet while
47
+ you're looking straight at cerber, and no browser announces the same PR twice.
48
+ Only the browser can grant this, and only off a click, so the bell in the top
49
+ bar is one: click it to be asked, click it again to stop. Both the switch and
50
+ the record of what has been announced are per-browser, kept in that browser
51
+ rather than in `~/.cerber/config.json` — the permission they gate is the
52
+ browser's, so a second browser starts its own record.
43
53
 
44
54
  ## What a review looks like
45
55
 
@@ -59,6 +69,13 @@ Each review is a plain JSON artifact in `~/.cerber/reviews/` (override with
59
69
  The cockpit (`cerber serve`) renders the queue and the per-PR walkthrough with
60
70
  diffs. Artifacts are plain JSON you can `cat`, edit, or pipe into anything.
61
71
 
72
+ The queue is meant to be walked, not clicked through: `j`/`k` move the cursor
73
+ and the strip under the table explains whatever it lands on — the verdict's own
74
+ reasoning, what the run read, how it sits against the auto-send bar — so most
75
+ rows can be judged without opening them. `↵` opens one, `r` drafts (or
76
+ re-drafts) it. Inside a review, `[` and `]` walk to the previous/next PR still
77
+ awaiting you, `n` steps through the chapters, and `s` sends.
78
+
62
79
  ### It reviews the code, not just the diff
63
80
 
64
81
  Cerber checks the PR's head out locally and lets the review read it. That
@@ -301,4 +318,4 @@ Web cockpit dev with hot reload: `pnpm dev serve` in one terminal,
301
318
 
302
319
  ## License
303
320
 
304
- MIT © Full Stack House
321
+ MIT © [Full Stack House](https://fullstack.house)
@@ -144,10 +144,19 @@ export async function buildApp(opts) {
144
144
  additions: a.pr.additions,
145
145
  deletions: a.pr.deletions,
146
146
  changedFiles: a.pr.changedFiles,
147
+ // The queue's cursor row explains itself without opening the review,
148
+ // so the list carries what that explanation is made of.
149
+ baseRefName: a.pr.baseRefName,
150
+ headRefName: a.pr.headRefName,
147
151
  },
148
152
  verdict: a.verdict,
149
153
  commentCount: a.comments.filter((cm) => cm.status !== "dropped").length,
154
+ driftedCount: a.comments.filter((cm) => cm.status !== "dropped" && cm.drifted).length,
150
155
  costUsd: a.run?.costUsd ?? null,
156
+ withSource: a.run?.withSource ?? null,
157
+ trusted: a.run?.trusted ?? null,
158
+ runError: a.run?.error ?? null,
159
+ sent: a.sent ? { at: a.sent.at, event: a.sent.event, url: a.sent.url, auto: a.sent.auto ?? false } : null,
151
160
  })));
152
161
  });
153
162
  app.get("/api/reviews/:key", async (c) => {
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@fullstackhouse/cerber",
3
- "version": "0.10.1",
3
+ "version": "0.12.0",
4
4
  "description": "AI code-review cockpit: Claude reviews your PRs into local artifacts; nothing reaches GitHub until you say so.",
5
5
  "license": "MIT",
6
+ "author": "Full Stack House (https://fullstack.house)",
6
7
  "repository": "github:fullstackhouse/cerber",
7
8
  "type": "module",
8
9
  "packageManager": "pnpm@10.33.2",