@djolex999/vir-cli 0.21.0 → 0.22.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 -2
- package/dist/audit/apply.js +61 -0
- package/dist/audit/apply.js.map +1 -0
- package/dist/audit/batch.js +37 -0
- package/dist/audit/batch.js.map +1 -0
- package/dist/audit/prompt.js +76 -0
- package/dist/audit/prompt.js.map +1 -0
- package/dist/audit/run.js +90 -0
- package/dist/audit/run.js.map +1 -0
- package/dist/audit/types.js +13 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/cli/review.js +45 -9
- package/dist/cli/review.js.map +1 -1
- package/dist/cli.js +134 -1
- package/dist/cli.js.map +1 -1
- package/dist/search/synthesizer.js +8 -3
- package/dist/search/synthesizer.js.map +1 -1
- package/dist/state/db.js +47 -0
- package/dist/state/db.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -369,6 +369,10 @@ with your distro, init system, and Node version.
|
|
|
369
369
|
| `vir dedupe` | cheap | Interactive duplicate detection + merge |
|
|
370
370
|
| `vir review` | free | Walk new notes: approve/edit/reject |
|
|
371
371
|
| `vir review --restore <note>` | free | Put one rejected note back |
|
|
372
|
+
| `vir audit` | cheap | Model judges each note; verdicts feed `vir review --audited` |
|
|
373
|
+
| `vir audit --dry-run` | free | Notes, batches and est. cost, no model call |
|
|
374
|
+
| `vir review --audited` | free | Walk notes vir audit flagged, worst first |
|
|
375
|
+
| `vir audit --apply-rejects` | free | Move fresh reject verdicts to `.rejected/` (reversible) |
|
|
372
376
|
| `vir lint --strays` | free | Note files with no live DB row (retitle debris) |
|
|
373
377
|
| `vir lint --strays --fix` | free | Move retitle debris to `archived/` (only when a live copy exists) |
|
|
374
378
|
| `vir lint --legacy-related` | free | Pre-0.12.0 notes whose stored Related holds content a rewrite drops |
|
|
@@ -519,8 +523,8 @@ improvements. Delete it any time; disable it with `"logQueries": false` in
|
|
|
519
523
|
|
|
520
524
|
| | |
|
|
521
525
|
| -------------- | ----------------------------------------- |
|
|
522
|
-
| Version | 0.
|
|
523
|
-
| Tests |
|
|
526
|
+
| Version | 0.22.0 |
|
|
527
|
+
| Tests | 887 passing |
|
|
524
528
|
| Platforms | macOS (launchd), Linux (systemd/cron) |
|
|
525
529
|
| Node | 20+ |
|
|
526
530
|
| First-run cost | $1 to $5 (Kie.ai optional, ~72% cheaper) |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
|
+
import { rejectNote, setFrontmatter } from "../cli/review.js";
|
|
4
|
+
import { LOCK_PATH, acquireLock, releaseLock } from "../pipeline/lock.js";
|
|
5
|
+
import { makeSlug } from "../pipeline/slug.js";
|
|
6
|
+
import { REJECTED_DIR } from "../pipeline/vaultDirs.js";
|
|
7
|
+
import { CATEGORY_DIR } from "../pipeline/writer.js";
|
|
8
|
+
import { noteIsVerified } from "./run.js";
|
|
9
|
+
// Only fresh reject verdicts. verify and merge mean editing text, which stays
|
|
10
|
+
// with a human; a stale verdict judged text the note no longer has.
|
|
11
|
+
export function selectRejectsToApply(rows, audits, project) {
|
|
12
|
+
const rejected = new Set(audits.filter((a) => a.fresh && a.verdict === "reject").map((a) => a.path));
|
|
13
|
+
return rows.filter((r) => rejected.has(r.path) && (project === undefined || r.project === project));
|
|
14
|
+
}
|
|
15
|
+
// What `--apply-rejects` will actually do, for the confirmation prompt. A note a
|
|
16
|
+
// human approved is skipped at move time (noteIsVerified below), so the preview
|
|
17
|
+
// must not count it as moving. applyAuditRejects re-checks at act time anyway:
|
|
18
|
+
// a note can be approved between the preview and the confirmation.
|
|
19
|
+
export function previewRejects(rows, audits, isVerified, project) {
|
|
20
|
+
const toMove = [];
|
|
21
|
+
const verified = [];
|
|
22
|
+
for (const r of selectRejectsToApply(rows, audits, project))
|
|
23
|
+
(isVerified(r) ? verified : toMove).push(r);
|
|
24
|
+
return { toMove, verified };
|
|
25
|
+
}
|
|
26
|
+
export function applyAuditRejects(db, vaultRoot, opts = {}) {
|
|
27
|
+
const now = opts.now ?? new Date().toISOString();
|
|
28
|
+
// A concurrent `vir run` may be rewriting these very notes.
|
|
29
|
+
acquireLock(opts.lockPath ?? LOCK_PATH);
|
|
30
|
+
try {
|
|
31
|
+
const summary = { moved: 0, missingFile: 0, collision: 0, verified: 0 };
|
|
32
|
+
for (const row of selectRejectsToApply(db.listDistilled(), db.listAudits(), opts.project)) {
|
|
33
|
+
const file = join(vaultRoot, CATEGORY_DIR[row.category], `${makeSlug(row.topic, row.sessionId)}.md`);
|
|
34
|
+
if (!existsSync(file)) {
|
|
35
|
+
summary.missingFile += 1;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// `vir review` approve/edit stamps `verified` on the file only — the DB
|
|
39
|
+
// verdict stays fresh, so this is the one place the file's own state
|
|
40
|
+
// must override a stale-but-fresh reject verdict.
|
|
41
|
+
if (noteIsVerified(vaultRoot, row)) {
|
|
42
|
+
summary.verified += 1;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (existsSync(join(vaultRoot, REJECTED_DIR, basename(file)))) {
|
|
46
|
+
summary.collision += 1;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const dest = rejectNote(file, vaultRoot, now);
|
|
50
|
+
// Tells a later reader (and `vir review --restore`) that no human made this call.
|
|
51
|
+
writeFileSync(dest, setFrontmatter(readFileSync(dest, "utf8"), { rejected_by: "audit" }));
|
|
52
|
+
db.markRejected(row.sessionId, now);
|
|
53
|
+
summary.moved += 1;
|
|
54
|
+
}
|
|
55
|
+
return summary;
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
releaseLock(opts.lockPath ?? LOCK_PATH);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/audit/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ~10k input tokens per call at chars/4. Large enough that a project's
|
|
2
|
+
// near-duplicates usually share a batch, small enough to stay well inside
|
|
3
|
+
// every provider's context and keep one failure cheap.
|
|
4
|
+
export const AUDIT_BATCH_CHARS = 40_000;
|
|
5
|
+
// maxTokens for an audit call is 4000, and each verdict costs ~70 output
|
|
6
|
+
// tokens (id + verdict + reason) — past ~55 notes the model's reply itself
|
|
7
|
+
// gets truncated before every verdict fits, even though 30 tiny notes are
|
|
8
|
+
// nowhere near the char budget. Caps rows per batch independently of size.
|
|
9
|
+
export const AUDIT_BATCH_MAX_ROWS = 30;
|
|
10
|
+
export function batchByProject(rows, maxChars = AUDIT_BATCH_CHARS, maxRows = AUDIT_BATCH_MAX_ROWS) {
|
|
11
|
+
const byProject = new Map();
|
|
12
|
+
for (const r of rows) {
|
|
13
|
+
const list = byProject.get(r.project) ?? [];
|
|
14
|
+
list.push(r);
|
|
15
|
+
byProject.set(r.project, list);
|
|
16
|
+
}
|
|
17
|
+
const out = [];
|
|
18
|
+
for (const project of [...byProject.keys()].sort()) {
|
|
19
|
+
const sorted = (byProject.get(project) ?? []).sort((a, b) => (a.startedAt ?? "").localeCompare(b.startedAt ?? ""));
|
|
20
|
+
let current = [];
|
|
21
|
+
let size = 0;
|
|
22
|
+
for (const r of sorted) {
|
|
23
|
+
const len = r.content.length + r.topic.length;
|
|
24
|
+
if (current.length > 0 && (size + len > maxChars || current.length >= maxRows)) {
|
|
25
|
+
out.push({ project, rows: current });
|
|
26
|
+
current = [];
|
|
27
|
+
size = 0;
|
|
28
|
+
}
|
|
29
|
+
current.push(r);
|
|
30
|
+
size += len;
|
|
31
|
+
}
|
|
32
|
+
if (current.length > 0)
|
|
33
|
+
out.push({ project, rows: current });
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/audit/batch.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,0EAA0E;AAC1E,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAOvC,MAAM,UAAU,cAAc,CAC5B,IAAoB,EACpB,WAAmB,iBAAiB,EACpC,UAAkB,oBAAoB;IAEtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1D,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CACrD,CAAC;QACF,IAAI,OAAO,GAAmB,EAAE,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,EAAE,CAAC;gBAC/E,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,IAAI,GAAG,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { AUDIT_VERDICTS } from "./types.js";
|
|
2
|
+
export class AuditParseError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "AuditParseError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
// The criteria and their order come from the 2026-09-25 manual audit of the
|
|
9
|
+
// reference vault (~/.vir/eval/audit-2026-09-25/): the generic test decided
|
|
10
|
+
// most rejects, narration and snapshot-only notes most of the rest. Verdict
|
|
11
|
+
// wording revised after the first calibration run sent 76% of notes to verify
|
|
12
|
+
// for title and filler polish.
|
|
13
|
+
export function buildAuditPrompt(project, rows) {
|
|
14
|
+
const notes = rows
|
|
15
|
+
.map((r, i) => `<note id="n${i + 1}" topic="${r.topic.replace(/"/g, "'")}" category="${r.category}">\n${r.content}\n</note>`)
|
|
16
|
+
.join("\n\n");
|
|
17
|
+
return `You are auditing notes in a developer's knowledge base. The notes were written by a model from Claude Code session transcripts, and they are fed back to Claude through search and CLAUDE.md, so noise actively hurts. Judge each note. Be strict; do not default to keep.
|
|
18
|
+
|
|
19
|
+
project: ${project}
|
|
20
|
+
|
|
21
|
+
Apply these tests in order:
|
|
22
|
+
1. Would a strong coding model already know this without the note? Generic best practice ("validate input", "use httpOnly cookies") fails even when correct. Only knowledge specific to this project earns a place: its decisions and their reasons, gotchas in this particular setup, config and infra facts, things that cost real debugging time.
|
|
23
|
+
2. Is it narration instead of knowledge? "The session scanned the middleware", "no vulnerabilities were found", file-tree walkthroughs.
|
|
24
|
+
3. Is it only true on the day it was written? Test counts, commit hashes, branch status, "X is still missing".
|
|
25
|
+
4. Is it a duplicate of another note in this batch? Keep the better one and mark the other merge.
|
|
26
|
+
5. Does the title (topic) describe what the body actually says? A title that covers only part of the note is not by itself a reason to leave keep.
|
|
27
|
+
|
|
28
|
+
Verdicts:
|
|
29
|
+
- keep: the note carries project-specific knowledge worth retrieving as it is. Some filler, a few generic lines around the specific facts, or a title that covers only part of the note do not make it verify.
|
|
30
|
+
- verify: a human has to decide something before this note can be trusted: a claim looks wrong or contradicts another note here, a snapshot ("still missing", a branch or test state) is stated as a lasting fact, or the project-specific part is under about a third of the note. Say exactly what to change.
|
|
31
|
+
- merge: a near-duplicate of another note here. Give merge_into as that note's id.
|
|
32
|
+
- reject: generic, narration, snapshot-only, or wrong.
|
|
33
|
+
|
|
34
|
+
Reply with a JSON array only, one entry per note:
|
|
35
|
+
[{"id": "n1", "verdict": "keep|verify|merge|reject", "reason": "one concrete sentence", "merge_into": "n2 or null"}]
|
|
36
|
+
In "reason", refer to other notes by their topic, never by id: the ids exist only in this message.
|
|
37
|
+
|
|
38
|
+
${notes}`;
|
|
39
|
+
}
|
|
40
|
+
export function parseAuditResponse(text, count) {
|
|
41
|
+
const match = text.match(/\[[\s\S]*\]/);
|
|
42
|
+
if (!match)
|
|
43
|
+
throw new AuditParseError("audit response has no JSON array");
|
|
44
|
+
let raw;
|
|
45
|
+
try {
|
|
46
|
+
raw = JSON.parse(match[0]);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
throw new AuditParseError("audit response JSON does not parse");
|
|
50
|
+
}
|
|
51
|
+
if (!Array.isArray(raw))
|
|
52
|
+
throw new AuditParseError("audit response is not an array");
|
|
53
|
+
const ids = new Set(Array.from({ length: count }, (_, i) => `n${i + 1}`));
|
|
54
|
+
const out = new Map();
|
|
55
|
+
for (const entry of raw) {
|
|
56
|
+
if (typeof entry !== "object" || entry === null)
|
|
57
|
+
continue;
|
|
58
|
+
const e = entry;
|
|
59
|
+
const id = typeof e.id === "string" ? e.id : "";
|
|
60
|
+
const verdict = e.verdict;
|
|
61
|
+
if (!ids.has(id) || !AUDIT_VERDICTS.includes(verdict))
|
|
62
|
+
continue;
|
|
63
|
+
const reason = typeof e.reason === "string" ? e.reason.trim() : "";
|
|
64
|
+
const target = typeof e.merge_into === "string" ? e.merge_into : null;
|
|
65
|
+
if (verdict === "merge") {
|
|
66
|
+
const valid = target !== null && ids.has(target) && target !== id;
|
|
67
|
+
out.set(id, valid
|
|
68
|
+
? { verdict: "merge", reason, mergeInto: target }
|
|
69
|
+
: { verdict: "verify", reason, mergeInto: null });
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
out.set(id, { verdict: verdict, reason, mergeInto: null });
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/audit/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { parseFrontmatter } from "../cli/review.js";
|
|
4
|
+
import { ClaudeCliLimitError } from "../pipeline/claudeCli.js";
|
|
5
|
+
import { makeSlug } from "../pipeline/slug.js";
|
|
6
|
+
import { CATEGORY_DIR } from "../pipeline/writer.js";
|
|
7
|
+
import { batchByProject } from "./batch.js";
|
|
8
|
+
import { AuditParseError, buildAuditPrompt, parseAuditResponse } from "./prompt.js";
|
|
9
|
+
import { AUDIT_VERDICTS, contentHash } from "./types.js";
|
|
10
|
+
// `--limit` must gate before any model call: an unparseable or non-positive
|
|
11
|
+
// value ("abc", "0", "-1") is a usage error, not silently "no limit" (that
|
|
12
|
+
// used to be `vir audit`'s behavior, and it hid typos as a full-vault run).
|
|
13
|
+
// undefined = flag omitted; null = flag given but invalid.
|
|
14
|
+
export function parseLimitOption(raw) {
|
|
15
|
+
if (raw === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
const n = Number(raw);
|
|
18
|
+
return Number.isInteger(n) && n > 0 ? n : null;
|
|
19
|
+
}
|
|
20
|
+
export function selectAuditRows(rows, audits, opts, isVerified) {
|
|
21
|
+
const fresh = new Set(audits.filter((a) => a.fresh).map((a) => a.path));
|
|
22
|
+
let skippedVerified = 0;
|
|
23
|
+
let skippedFresh = 0;
|
|
24
|
+
const out = [];
|
|
25
|
+
for (const r of rows) {
|
|
26
|
+
if (opts.project !== undefined && r.project !== opts.project)
|
|
27
|
+
continue;
|
|
28
|
+
if (!opts.all && fresh.has(r.path)) {
|
|
29
|
+
skippedFresh += 1;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (isVerified(r)) {
|
|
33
|
+
skippedVerified += 1;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
out.push(r);
|
|
37
|
+
}
|
|
38
|
+
const limited = opts.limit !== undefined && opts.limit > 0 ? out.slice(0, opts.limit) : out;
|
|
39
|
+
return { rows: limited, skippedVerified, skippedFresh };
|
|
40
|
+
}
|
|
41
|
+
export function noteIsVerified(vaultRoot, row) {
|
|
42
|
+
const file = join(vaultRoot, CATEGORY_DIR[row.category], `${makeSlug(row.topic, row.sessionId)}.md`);
|
|
43
|
+
if (!existsSync(file))
|
|
44
|
+
return false;
|
|
45
|
+
try {
|
|
46
|
+
return parseFrontmatter(readFileSync(file, "utf8")).verified === "true";
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export async function runAudit(db, opts, deps) {
|
|
53
|
+
const now = deps.now ?? (() => new Date().toISOString());
|
|
54
|
+
const picked = selectAuditRows(db.listDistilled(), db.listAudits(), opts, deps.isVerified);
|
|
55
|
+
const summary = {
|
|
56
|
+
audited: 0,
|
|
57
|
+
skippedVerified: picked.skippedVerified,
|
|
58
|
+
skippedFresh: picked.skippedFresh,
|
|
59
|
+
unanswered: 0,
|
|
60
|
+
failedBatches: 0,
|
|
61
|
+
byVerdict: Object.fromEntries(AUDIT_VERDICTS.map((v) => [v, 0])),
|
|
62
|
+
};
|
|
63
|
+
for (const batch of batchByProject(picked.rows)) {
|
|
64
|
+
let parsed;
|
|
65
|
+
try {
|
|
66
|
+
parsed = parseAuditResponse(await deps.llm(buildAuditPrompt(batch.project, batch.rows)), batch.rows.length);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
if (err instanceof ClaudeCliLimitError)
|
|
70
|
+
throw err;
|
|
71
|
+
if (!(err instanceof AuditParseError))
|
|
72
|
+
throw err;
|
|
73
|
+
summary.failedBatches += 1;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
batch.rows.forEach((row, i) => {
|
|
77
|
+
const v = parsed.get(`n${i + 1}`);
|
|
78
|
+
if (v === undefined) {
|
|
79
|
+
summary.unanswered += 1;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const target = v.mergeInto === null ? null : batch.rows[Number(v.mergeInto.slice(1)) - 1]?.sessionId ?? null;
|
|
83
|
+
db.recordAudit(row.path, { verdict: v.verdict, reason: v.reason, mergeInto: target, contentHash: contentHash(row.content) }, now());
|
|
84
|
+
summary.audited += 1;
|
|
85
|
+
summary.byVerdict[v.verdict] += 1;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return summary;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
export const AUDIT_VERDICTS = [
|
|
3
|
+
"keep",
|
|
4
|
+
"verify",
|
|
5
|
+
"merge",
|
|
6
|
+
"reject",
|
|
7
|
+
];
|
|
8
|
+
// A verdict is only valid for the exact text it judged. Readers compare this
|
|
9
|
+
// hash with the current `content` column instead of trusting a timestamp.
|
|
10
|
+
export function contentHash(content) {
|
|
11
|
+
return createHash("sha256").update(content).digest("hex");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/audit/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;CACT,CAAC;AAEF,6EAA6E;AAC7E,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC"}
|
package/dist/cli/review.js
CHANGED
|
@@ -110,7 +110,7 @@ export function rejectNote(filePath, vaultRoot, now = new Date().toISOString())
|
|
|
110
110
|
// Undo one review rejection: move the note back to its category dir, drop the
|
|
111
111
|
// stamp, and let its row serve again. `name` is the filename in `.rejected/`,
|
|
112
112
|
// with or without `.md`. Refuses rather than overwrite a live note.
|
|
113
|
-
export function restoreRejected(db, vaultRoot, name) {
|
|
113
|
+
export function restoreRejected(db, vaultRoot, name, now = new Date().toISOString()) {
|
|
114
114
|
const file = name.endsWith(".md") ? name : `${name}.md`;
|
|
115
115
|
const src = join(vaultRoot, REJECTED_DIR, basename(file));
|
|
116
116
|
if (!existsSync(src)) {
|
|
@@ -127,7 +127,14 @@ export function restoreRejected(db, vaultRoot, name) {
|
|
|
127
127
|
throw new Error(`${join(subDir, basename(file))} already exists — not overwriting it`);
|
|
128
128
|
}
|
|
129
129
|
mkdirSync(join(vaultRoot, subDir), { recursive: true });
|
|
130
|
-
|
|
130
|
+
let restored = removeFrontmatterKeys(content, ["rejected_at", "rejected_by"]);
|
|
131
|
+
// Restoring a machine reject (`rejected_by: audit`) is itself a human
|
|
132
|
+
// verdict — stamp it verified so neither `vir audit` nor `--apply-rejects`
|
|
133
|
+
// ever act on it again. A human reject (no `rejected_by`) is left as-is.
|
|
134
|
+
if (fm.rejected_by === "audit") {
|
|
135
|
+
restored = setFrontmatter(restored, { verified: "true", reviewed_at: now });
|
|
136
|
+
}
|
|
137
|
+
writeFileSync(dest, restored);
|
|
131
138
|
rmSync(src);
|
|
132
139
|
if (fm.session_id)
|
|
133
140
|
db.clearRejected(fm.session_id);
|
|
@@ -176,6 +183,7 @@ export function collectNotes(vaultRoot, opts = {}) {
|
|
|
176
183
|
confidence: Number(fm.confidence ?? "0") || 0,
|
|
177
184
|
date: fm.date ?? "",
|
|
178
185
|
verified,
|
|
186
|
+
sessionId: fm.session_id ?? "",
|
|
179
187
|
});
|
|
180
188
|
}
|
|
181
189
|
}
|
|
@@ -184,6 +192,20 @@ export function collectNotes(vaultRoot, opts = {}) {
|
|
|
184
192
|
return out.slice(0, opts.limit);
|
|
185
193
|
return out;
|
|
186
194
|
}
|
|
195
|
+
const AUDIT_ORDER = { reject: 0, merge: 1, verify: 2 };
|
|
196
|
+
// Worst first, so a short review session spends its attention where the
|
|
197
|
+
// auditor saw the most noise. `keep` needs no human, and a stale verdict judged
|
|
198
|
+
// text the note no longer has.
|
|
199
|
+
export function orderForAudit(notes, audits) {
|
|
200
|
+
const bySession = new Map(audits.filter((a) => a.fresh).map((a) => [a.sessionId, a]));
|
|
201
|
+
return notes
|
|
202
|
+
.flatMap((n) => {
|
|
203
|
+
const audit = bySession.get(n.sessionId);
|
|
204
|
+
return audit !== undefined && audit.verdict !== "keep" ? [{ ...n, audit }] : [];
|
|
205
|
+
})
|
|
206
|
+
.sort((a, b) => (AUDIT_ORDER[a.audit.verdict] ?? 9) - (AUDIT_ORDER[b.audit.verdict] ?? 9) ||
|
|
207
|
+
b.date.localeCompare(a.date));
|
|
208
|
+
}
|
|
187
209
|
// Body sans frontmatter and the injected "Project:/Category:" wikilink header,
|
|
188
210
|
// collapsed to a single paragraph for a compact preview.
|
|
189
211
|
function excerpt(content) {
|
|
@@ -208,12 +230,16 @@ function openInEditor(filePath) {
|
|
|
208
230
|
const res = spawnSync(editor, [filePath], { stdio: "inherit" });
|
|
209
231
|
return !res.error;
|
|
210
232
|
}
|
|
211
|
-
function renderNote(n, idx, total) {
|
|
233
|
+
function renderNote(n, idx, total, audit) {
|
|
212
234
|
const catColor = ui.colorForCategory[n.category] ?? ui.text;
|
|
213
235
|
ui.line(`${ui.dim(`[${idx + 1}/${total}]`)} ${ui.text(ui.shortNotePath(n.relPath))}`);
|
|
214
236
|
ui.line(`${catColor(n.category)} ${ui.dim(ui.BULLET)} ${ui.text(n.project || "—")}` +
|
|
215
237
|
` ${ui.dim(ui.BULLET)} ${ui.dim("conf")} ${ui.info(n.confidence.toFixed(2))}` +
|
|
216
238
|
(n.verified ? ` ${ui.dim(ui.BULLET)} ${ui.success("verified")}` : ""));
|
|
239
|
+
if (audit !== undefined) {
|
|
240
|
+
const color = audit.verdict === "reject" ? ui.errorColor : ui.warn;
|
|
241
|
+
ui.line(`${ui.dim("audit")} ${color(audit.verdict)}${audit.target ? ui.dim(` → ${audit.target}`) : ""} ${ui.text(audit.reason)}`);
|
|
242
|
+
}
|
|
217
243
|
ui.blank();
|
|
218
244
|
let body = "";
|
|
219
245
|
try {
|
|
@@ -247,17 +273,22 @@ async function reviewWithDb(opts, vaultRoot, db) {
|
|
|
247
273
|
syncRejections(db, vaultRoot);
|
|
248
274
|
const parsedLimit = opts.limit ? Number.parseInt(opts.limit, 10) : 50;
|
|
249
275
|
const limit = Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 50;
|
|
250
|
-
const
|
|
276
|
+
const collected = collectNotes(vaultRoot, {
|
|
251
277
|
all: opts.all,
|
|
252
278
|
project: opts.project,
|
|
253
|
-
limit,
|
|
279
|
+
limit: opts.audited ? undefined : limit,
|
|
254
280
|
});
|
|
281
|
+
const topicBySession = new Map(db.listDistilled().map((r) => [r.sessionId, r.topic]));
|
|
282
|
+
const audited = opts.audited ? orderForAudit(collected, db.listAudits()).slice(0, limit) : null;
|
|
283
|
+
const notes = audited ?? collected;
|
|
255
284
|
ui.header("review");
|
|
256
285
|
ui.blank();
|
|
257
286
|
if (notes.length === 0) {
|
|
258
|
-
ui.row(ui.success(ui.CHECK), ui.text(opts.
|
|
259
|
-
? "no notes
|
|
260
|
-
:
|
|
287
|
+
ui.row(ui.success(ui.CHECK), ui.text(opts.audited
|
|
288
|
+
? "no flagged notes — run `vir audit` first"
|
|
289
|
+
: opts.all
|
|
290
|
+
? "no notes found to review"
|
|
291
|
+
: "no unreviewed notes — you're all caught up"));
|
|
261
292
|
return;
|
|
262
293
|
}
|
|
263
294
|
const scope = opts.project ? ` in ${opts.project}` : "";
|
|
@@ -275,7 +306,12 @@ async function reviewWithDb(opts, vaultRoot, db) {
|
|
|
275
306
|
if (!n)
|
|
276
307
|
continue;
|
|
277
308
|
ui.divider();
|
|
278
|
-
|
|
309
|
+
const a = audited?.[i]?.audit;
|
|
310
|
+
renderNote(n, i, notes.length, a && {
|
|
311
|
+
verdict: a.verdict,
|
|
312
|
+
reason: a.reason,
|
|
313
|
+
target: a.mergeInto ? (topicBySession.get(a.mergeInto) ?? a.mergeInto) : null,
|
|
314
|
+
});
|
|
279
315
|
const ans = (await rl.question(ui.muted("[a]pprove [e]dit [r]eject [s]kip [q]uit: ")))
|
|
280
316
|
.trim()
|
|
281
317
|
.toLowerCase();
|
package/dist/cli/review.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/cli/review.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/cli/review.ts"],"names":[],"mappings":"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"}
|