@djolex999/vir-cli 0.29.0 → 0.31.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
@@ -28,6 +28,7 @@ developer-tools, mcp, local-first, cross-platform, llm-wiki
28
28
  <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-server-c084fc" alt="mcp"></a>
29
29
  <a href="#"><img src="https://img.shields.io/badge/local--first-yes-f59e0b" alt="local-first"></a>
30
30
  <a href="https://github.com/djolex999/vir"><img src="https://img.shields.io/github/stars/djolex999/vir?style=social" alt="stars"></a>
31
+ <a href="https://ko-fi.com/djmarkovic"><img src="https://img.shields.io/badge/Ko--fi-support%20vir-FF5E5B?logo=ko-fi&logoColor=white" alt="Support vir on Ko-fi"></a>
31
32
  </p>
32
33
 
33
34
  That graph is my vault. Every node is a plain markdown file that vir wrote by
@@ -461,6 +462,8 @@ with your distro, init system, and Node version.
461
462
  | `vir connect` | $ | Propose those lessons as cited rules (≤10 LLM calls) |
462
463
  | `vir summarize <project>` | cheap | Cross-session project synthesis |
463
464
  | `vir summarize --week` | cheap | Period summary of the week's notes |
465
+ | `vir journal [date]` | free | Daily work journal from transcripts, no LLM calls (default: today) |
466
+ | `vir journal --since <date>` | free | Write every day with activity from that date on |
464
467
  | `vir lint` | cheap | Find orphans, stale notes, contradictions |
465
468
  | `vir dedupe` | cheap | Interactive duplicate detection + merge |
466
469
  | `vir review` | free | Walk new notes: approve/edit/reject |
@@ -470,6 +473,7 @@ with your distro, init system, and Node version.
470
473
  | `vir review --audited` | free | Walk notes vir audit flagged, worst first |
471
474
  | `vir review --insights` | free | Accept, edit or reject rules proposed by `vir connect` |
472
475
  | `vir audit --apply-rejects` | free | Move fresh reject verdicts to `.rejected/` (reversible) |
476
+ | `vir audit --transcript` | $$ | Check each note against its own transcript; contradicted notes join `vir review --audited` |
473
477
  | `vir lint --strays` | free | Note files with no live DB row (retitle debris) |
474
478
  | `vir lint --strays --fix` | free | Move retitle debris to `archived/` (only when a live copy exists) |
475
479
  | `vir lint --legacy-related` | free | Pre-0.12.0 notes whose stored Related holds content a rewrite drops |
@@ -492,6 +496,63 @@ run `vir <command> --help` for the full flag list. `vir query --json` and
492
496
  `vir doctor --json` are the machine contracts the
493
497
  [vir-obsidian](https://github.com/djolex999/vir-obsidian) plugin consumes.
494
498
 
499
+ ## Daily journal
500
+
501
+ `vir journal` writes one file per day, `vault/vir/journal/YYYY-MM-DD.md`, with
502
+ what happened in each project: what got done, what's in progress, blocked or
503
+ still open, links to that day's decision notes, and work left unfinished on an
504
+ earlier day that nothing has touched since. It reads your transcripts
505
+ directly and makes no LLM calls, so it's free and gives the same file every
506
+ time for the same input.
507
+
508
+ ```markdown
509
+ ## my-app
510
+
511
+ 2 sessions
512
+
513
+ **Done**
514
+ - fix: retry webhook on 502 (commit a1b2c3d)
515
+ - Add idempotency key to checkout (task 1f2e3d4c#todo-0a1b2c3d)
516
+
517
+ **In progress**
518
+ - Migrate sessions table (task 1f2e3d4c#todo-4e5f6a7b)
519
+
520
+ **Decisions**
521
+ - [[use-sqlite-for-job-state-1f2e3d4c]]
522
+
523
+ **Carried over**
524
+ - Rotate webhook secret (task 9c8b7a6d#todo-1c2d3e4f), in progress, open 3 days
525
+ ```
526
+
527
+ Every line has to point at evidence: a commit sha git printed, or a task whose
528
+ tool result confirmed it. A rejected commit, a refused call or a plan step
529
+ nobody finished doesn't count. Tasks come from TaskCreate/TaskUpdate, TodoWrite
530
+ and the Claude desktop app's task list.
531
+
532
+ ```
533
+ vir journal # today
534
+ vir journal 2026-11-04 # one day
535
+ vir journal --since 2026-10-28 # every day with activity since then
536
+ vir journal --all # rewrite every day
537
+ vir journal --stdout # print instead of writing
538
+ vir journal --tz Europe/Belgrade
539
+ ```
540
+
541
+ Days are local calendar days in your machine's time zone (or `--tz`). The
542
+ facts are copied into vir's SQLite state first, so the journal survives Claude
543
+ Code deleting transcripts after about 30 days; delete the folder and re-run to
544
+ get the same files back. Edits to journal files are overwritten. Search
545
+ (`vir query`, MCP) and `vir lint` skip the folder: it records work done, it
546
+ isn't knowledge to retrieve.
547
+
548
+ An unfinished task carries over day to day until it's completed, deleted,
549
+ picked up again under the same name in a later session, or left untouched for
550
+ more than 7 days.
551
+
552
+ Limits: Claude Code sessions only (not Codex yet). Commits made with
553
+ `git commit -q`, merges, rebases and commits outside an agent session aren't
554
+ seen. Work finished outside a session keeps carrying until the 7-day limit.
555
+
495
556
  ## Use vir from any agent (skill)
496
557
 
497
558
  vir ships an [Agent Skills](https://agentskills.io) skill that teaches Claude
@@ -599,6 +660,8 @@ Located at `~/.vir/config.json`.
599
660
  | `filterToolCalls` | `moderate` | Tool-output filtering: `aggressive` \| `moderate` \| `off` |
600
661
  | `retrievalDiversity`| `0` | MMR diversity (0..1); 0 = pure relevance |
601
662
  | `logQueries` | `true` | Log retrievals to `~/.vir/queries.jsonl`; `false` = off |
663
+ | `checkTranscripts` | `false` | After each daemon pass, run `vir audit --transcript` on the oldest unchecked notes |
664
+ | `checkTranscriptsPerRun` | `20` | Notes checked per daemon pass when `checkTranscripts` is on |
602
665
  | `embeddingProvider` | (unset) | `ollama` \| `local` \| `none`; unset = auto-detect |
603
666
  | `models.classify` | `claude-haiku-5-5` | Classify model (Kie keeps Haiku 4.5) |
604
667
  | `models.distill` | `claude-sonnet-5` | Distill model for decision-heavy and large sessions |
@@ -621,6 +684,7 @@ vault/vir/
621
684
  topics/ # synthesized topic pages (vir compose)
622
685
  projects/ # cross-session project summaries
623
686
  summaries/ # weekly/monthly period summaries (derived, never indexed)
687
+ journal/ # daily work journal, YYYY-MM-DD.md (vir journal; never indexed)
624
688
  archived/ # deduplicated notes (kept, never deleted)
625
689
  ```
626
690
 
@@ -675,6 +739,7 @@ Shipped:
675
739
  - [x] Any agent can read your notes: `npx skills add djolex999/vir` (0.25.0)
676
740
  - [x] Recurring lessons become reviewed rules: `vir connect` (0.25.0)
677
741
  - [x] Codex sessions, and a keyless `codex-cli` provider (0.26.0)
742
+ - [x] Daily work journal from transcripts, no LLM calls: `vir journal` (0.30.0)
678
743
 
679
744
  Not built:
680
745
 
@@ -714,6 +779,9 @@ matters, and deposits it somewhere permanent.
714
779
  Inspired by Andrej Karpathy's LLM Wiki pattern and Uros Pesic's KB Brain
715
780
  concept.
716
781
 
782
+ If vir saves you time, [a coffee on Ko-fi](https://ko-fi.com/djmarkovic) keeps it
783
+ maintained and in step with Claude Code and Codex releases.
784
+
717
785
  [GitHub](https://github.com/djolex999) ·
718
786
  [LinkedIn](https://www.linkedin.com/in/djmarkovic/) ·
719
787
  [npm](https://www.npmjs.com/~djolex999) ·
@@ -0,0 +1,28 @@
1
+ import { SubscriptionLimitError } from "../pipeline/subscription.js";
2
+ import { runGround } from "./ground.js";
3
+ export const DEFAULT_CHECKS_PER_RUN = 20;
4
+ export async function checkTranscriptsAfterRun(cfg, db, deps) {
5
+ if (cfg.checkTranscripts !== true)
6
+ return { kind: "off" };
7
+ let summary;
8
+ try {
9
+ summary = await runGround(db, { limit: cfg.checkTranscriptsPerRun ?? DEFAULT_CHECKS_PER_RUN }, deps);
10
+ }
11
+ catch (err) {
12
+ // An optional step after a finished distill pass: a quota halt or a failed
13
+ // call is logged and retried next pass, never turned into a failed run.
14
+ const reason = err instanceof SubscriptionLimitError
15
+ ? `subscription limit: ${err.message}`
16
+ : err instanceof Error
17
+ ? err.message
18
+ : String(err);
19
+ deps.log(`transcript check stopped: ${reason}`);
20
+ return { kind: "stopped", reason };
21
+ }
22
+ if (summary.checked > 0 || summary.failed > 0) {
23
+ deps.log(`transcript check: ${summary.checked} checked, ${summary.contradicted} contradicted ` +
24
+ `(${summary.flagged} sent to review), ${summary.unbacked} unbacked, ${summary.failed} failed`);
25
+ }
26
+ return { kind: "checked", summary };
27
+ }
28
+ //# sourceMappingURL=afterRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"afterRun.js","sourceRoot":"","sources":["../../src/audit/afterRun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,SAAS,EAAuC,MAAM,aAAa,CAAC;AAW7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAOzC,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAmB,EACnB,EAAW,EACX,IAAiD;IAEjD,IAAI,GAAG,CAAC,gBAAgB,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC1D,IAAI,OAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,sBAAsB,IAAI,sBAAsB,EAAE,EAAE,IAAI,CAAC,CAAC;IACvG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,MAAM,GACV,GAAG,YAAY,sBAAsB;YACnC,CAAC,CAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE;YACtC,CAAC,CAAC,GAAG,YAAY,KAAK;gBACpB,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,GAAG,CACN,qBAAqB,OAAO,CAAC,OAAO,aAAa,OAAO,CAAC,YAAY,gBAAgB;YACnF,IAAI,OAAO,CAAC,OAAO,qBAAqB,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,MAAM,SAAS,CAChG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { existsSync } from "node:fs";
2
+ import { filterToolCalls } from "../pipeline/toolCallFilter.js";
3
+ import { scrub } from "../pipeline/scrubber.js";
4
+ import { trimTranscript } from "../pipeline/distillSession.js";
5
+ import { SubscriptionLimitError } from "../pipeline/subscription.js";
6
+ import { resolveSource } from "../sources/registry.js";
7
+ import { AuditParseError } from "./prompt.js";
8
+ import { contentHash } from "./types.js";
9
+ export function selectGroundRows(rows, grounds, opts, isVerified, transcriptExists = existsSync) {
10
+ const fresh = new Set(grounds.filter((g) => g.fresh).map((g) => g.path));
11
+ const out = [];
12
+ let skippedVerified = 0;
13
+ let skippedFresh = 0;
14
+ let transcriptGone = 0;
15
+ for (const r of rows) {
16
+ if (opts.project !== undefined && r.project !== opts.project)
17
+ continue;
18
+ if (!opts.all && fresh.has(r.path)) {
19
+ skippedFresh += 1;
20
+ continue;
21
+ }
22
+ if (isVerified(r)) {
23
+ skippedVerified += 1;
24
+ continue;
25
+ }
26
+ if (!transcriptExists(r.path)) {
27
+ transcriptGone += 1;
28
+ continue;
29
+ }
30
+ out.push(r);
31
+ }
32
+ // Oldest first: their transcripts are the next the agent prunes, so a
33
+ // --limit (and the daemon's per-pass cap) spends on what is about to be lost.
34
+ out.sort((a, b) => {
35
+ if (a.startedAt === b.startedAt)
36
+ return 0;
37
+ if (a.startedAt === null)
38
+ return 1;
39
+ if (b.startedAt === null)
40
+ return -1;
41
+ return a.startedAt.localeCompare(b.startedAt);
42
+ });
43
+ const limited = opts.limit !== undefined && opts.limit > 0 ? out.slice(0, opts.limit) : out;
44
+ return { rows: limited, skippedVerified, skippedFresh, transcriptGone };
45
+ }
46
+ // The transcript as the distiller saw it: tool filter, scrub, trim. The same
47
+ // steps as distillOneSession, so the check reads the evidence the note came from.
48
+ export function loadEvidence(sources, path, filterMode) {
49
+ const parsed = resolveSource(sources, path).parse(path, "");
50
+ const scrubbed = scrub(filterToolCalls(parsed.transcriptText, filterMode).filtered);
51
+ return trimTranscript(scrubbed) ?? scrubbed;
52
+ }
53
+ export function buildGroundPrompt(note, transcript) {
54
+ return `You are checking one note in a developer's knowledge base against the session transcript it was written from. The note is fed back to coding agents as trusted memory, so a claim the transcript does not back is worse than no note.
55
+
56
+ <transcript>
57
+ ${transcript}
58
+ </transcript>
59
+
60
+ <note>
61
+ ${note}
62
+ </note>
63
+
64
+ Go through every factual claim in the note: what was decided and why, what broke and what fixed it, file, function, config and command names, numbers, versions, and the order things happened in. For each, find what the transcript says about it.
65
+
66
+ - A claim is supported when the transcript states it, or it follows directly from what the transcript shows. Paraphrase and summary are fine.
67
+ - A claim is a problem when the transcript contradicts it (a different cause, fix, name, number or outcome), or when nothing in the transcript backs it (an invented detail, a guess written as fact, a fix the session tried that did not work presented as the fix).
68
+ - A note is a summary. Skipping failed attempts, dead ends or intermediate errors on the way to the outcome is not a problem. It is a problem only when the note presents as the cause, fix or result something the transcript shows was not.
69
+ - Generic advice in the note is not a claim about the session; ignore it here.
70
+ - If the transcript has an "omitted" marker, or a tool result is shown truncated or filtered, a claim that could come from the missing part is ok, not unbacked.
71
+ - Paths in the transcript may be shortened (home directory as ~). A path that matches up to that shortening is supported.
72
+
73
+ Reply with JSON only, one finding per claim you looked at closely. Write "transcript" first and decide "status" from it:
74
+ {"findings": [{"claim": "the note's claim", "transcript": "what the transcript actually shows", "status": "ok" | "contradicted" | "unbacked"}]}
75
+ - ok: supported, a fair summary, borderline, or you corrected yourself while checking. When unsure, ok.
76
+ - contradicted: the transcript shows something different.
77
+ - unbacked: nothing in the transcript supports it.
78
+ Keep each field under 25 words. An empty list means every claim is ok.`;
79
+ }
80
+ const PROBLEM_STATUSES = new Set(["contradicted", "unbacked"]);
81
+ export function parseGroundResponse(text) {
82
+ const match = text.match(/\{[\s\S]*\}/);
83
+ if (!match)
84
+ throw new AuditParseError("transcript check response has no JSON object");
85
+ let raw;
86
+ try {
87
+ raw = JSON.parse(match[0]);
88
+ }
89
+ catch {
90
+ throw new AuditParseError("transcript check response JSON does not parse");
91
+ }
92
+ if (typeof raw !== "object" || raw === null) {
93
+ throw new AuditParseError("transcript check response is not an object");
94
+ }
95
+ const findings = raw.findings;
96
+ if (!Array.isArray(findings))
97
+ throw new AuditParseError("transcript check response has no findings list");
98
+ // The verdict is derived here, never taken from the model: models list
99
+ // claims they then judge fine, so only a contradicted/unbacked status counts.
100
+ const problems = findings.flatMap((p) => {
101
+ if (typeof p !== "object" || p === null)
102
+ return [];
103
+ const e = p;
104
+ if (typeof e.status !== "string" || !PROBLEM_STATUSES.has(e.status))
105
+ return [];
106
+ const claim = typeof e.claim === "string" ? e.claim.trim() : "";
107
+ const transcript = typeof e.transcript === "string" ? e.transcript.trim() : "";
108
+ return claim === "" ? [] : [{ claim, status: e.status, transcript }];
109
+ });
110
+ // Contradictions first: they are what a reviewer acts on.
111
+ problems.sort((a, b) => Number(b.status === "contradicted") - Number(a.status === "contradicted"));
112
+ const verdict = problems.some((p) => p.status === "contradicted")
113
+ ? "contradicted"
114
+ : problems.length > 0
115
+ ? "unbacked"
116
+ : "supported";
117
+ return { verdict, problems };
118
+ }
119
+ export function formatGroundReason(problems) {
120
+ return problems
121
+ .map((p) => `${p.status}: ${p.claim}${p.transcript === "" ? "" : ` (transcript: ${p.transcript})`}`)
122
+ .join("; ");
123
+ }
124
+ // Only contradicted notes go to the `vir review --audited` queue: on real notes
125
+ // "unbacked" was mostly claims from truncated tool output, while contradictions
126
+ // were real errors (a wrong count, a bug that never happened). They go as
127
+ // verify, unless a fresh verdict already sends them out (reject or merge).
128
+ function shouldFlagForReview(existing) {
129
+ if (existing === undefined || !existing.fresh)
130
+ return true;
131
+ return existing.verdict === "keep" || existing.verdict === "verify";
132
+ }
133
+ export async function runGround(db, opts, deps) {
134
+ const now = deps.now ?? (() => new Date().toISOString());
135
+ const picked = selectGroundRows(db.listDistilled(), db.listGrounds(), opts, deps.isVerified, deps.transcriptExists);
136
+ const audits = new Map(db.listAudits().map((a) => [a.path, a]));
137
+ const summary = {
138
+ checked: 0,
139
+ supported: 0,
140
+ unbacked: 0,
141
+ contradicted: 0,
142
+ flagged: 0,
143
+ skippedVerified: picked.skippedVerified,
144
+ skippedFresh: picked.skippedFresh,
145
+ transcriptGone: picked.transcriptGone,
146
+ failed: 0,
147
+ };
148
+ for (const [i, row] of picked.rows.entries()) {
149
+ deps.onProgress?.(i, picked.rows.length);
150
+ let result;
151
+ try {
152
+ result = parseGroundResponse(await deps.llm(buildGroundPrompt(row.content, deps.evidence(row.path))));
153
+ }
154
+ catch (err) {
155
+ if (err instanceof SubscriptionLimitError)
156
+ throw err;
157
+ if (!(err instanceof AuditParseError))
158
+ throw err;
159
+ summary.failed += 1;
160
+ continue;
161
+ }
162
+ const hash = contentHash(row.content);
163
+ const reason = formatGroundReason(result.problems);
164
+ db.recordGround(row.path, { verdict: result.verdict, reason, contentHash: hash }, now());
165
+ summary.checked += 1;
166
+ summary[result.verdict] += 1;
167
+ if (result.verdict !== "contradicted")
168
+ continue;
169
+ if (shouldFlagForReview(audits.get(row.path))) {
170
+ db.recordAudit(row.path, { verdict: "verify", reason: `transcript check: ${reason}`, mergeInto: null, contentHash: hash }, now());
171
+ summary.flagged += 1;
172
+ }
173
+ }
174
+ return summary;
175
+ }
176
+ //# sourceMappingURL=ground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground.js","sourceRoot":"","sources":["../../src/audit/ground.ts"],"names":[],"mappings":"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"}
package/dist/cli/audit.js CHANGED
@@ -1,5 +1,9 @@
1
1
  import confirm from "@inquirer/confirm";
2
2
  import { loadConfig } from "../config.js";
3
+ import { loadEvidence, runGround, selectGroundRows, } from "../audit/ground.js";
4
+ import { buildSources } from "../sources/registry.js";
5
+ import { checkTranscriptsAfterRun } from "../audit/afterRun.js";
6
+ import { appendRunLog } from "../pipeline/run.js";
3
7
  import { callLLM, maybeAnthropicClient, normalizeModelName, resolveModelShorthand, withRateLimitRetry, } from "../pipeline/distiller.js";
4
8
  import { applyAuditRejects, previewRejects } from "../audit/apply.js";
5
9
  import { batchByProject } from "../audit/batch.js";
@@ -10,6 +14,13 @@ import * as ui from "../ui/display.js";
10
14
  import { estCostLabel } from "./costLabel.js";
11
15
  import { withPipelineLock } from "./guards.js";
12
16
  export async function auditCommand(opts) {
17
+ if (opts.transcript && opts.applyRejects) {
18
+ ui.header("audit");
19
+ ui.blank();
20
+ ui.row(ui.errorColor(ui.CROSS), ui.text("--transcript and --apply-rejects are separate steps; run one at a time"));
21
+ process.exitCode = 1;
22
+ return;
23
+ }
13
24
  const limit = parseLimitOption(opts.limit);
14
25
  if (limit === null) {
15
26
  ui.header("audit");
@@ -60,6 +71,10 @@ export async function auditCommand(opts) {
60
71
  const auditOpts = { project: opts.project, limit, all: opts.all };
61
72
  const isVerified = (r) => noteIsVerified(root, r);
62
73
  const model = normalizeModelName(resolveModelShorthand(opts.model ?? cfg.models.distill), cfg.provider);
74
+ if (opts.transcript) {
75
+ await transcriptCheck(cfg, db, auditOpts, isVerified, model, opts);
76
+ return;
77
+ }
63
78
  const picked = selectAuditRows(db.listDistilled(), db.listAudits(), auditOpts, isVerified);
64
79
  const batches = batchByProject(picked.rows);
65
80
  const inputTokens = Math.ceil(picked.rows.reduce((n, r) => n + r.content.length, 0) / 4 + batches.length * 600);
@@ -133,4 +148,113 @@ export async function auditCommand(opts) {
133
148
  db.close();
134
149
  }
135
150
  }
151
+ async function transcriptCheck(cfg, db, groundOpts, isVerified, model, opts) {
152
+ const sources = buildSources(cfg);
153
+ const evidence = (path) => loadEvidence(sources, path, cfg.filterToolCalls);
154
+ const picked = selectGroundRows(db.listDistilled(), db.listGrounds(), groundOpts, isVerified);
155
+ // Free: parse each transcript once for the estimate. The text is dropped and
156
+ // read again during the run, so memory stays at one transcript at a time.
157
+ const sp = picked.rows.length > 0 ? ui.spinner(`reading ${picked.rows.length} transcripts`).start() : null;
158
+ let evidenceChars = 0;
159
+ for (const r of picked.rows)
160
+ evidenceChars += evidence(r.path).length;
161
+ sp?.stop();
162
+ const inputTokens = Math.ceil(evidenceChars / 3 + picked.rows.reduce((n, r) => n + r.content.length, 0) / 4 + picked.rows.length * 500);
163
+ const outputTokens = picked.rows.length * 150;
164
+ const estCost = estCostLabel(cfg, model, inputTokens, outputTokens);
165
+ ui.header("audit --transcript");
166
+ ui.blank();
167
+ ui.summary({
168
+ notes: { value: picked.rows.length, color: ui.info },
169
+ "already checked": { value: picked.skippedFresh, color: ui.muted },
170
+ verified: { value: picked.skippedVerified, color: ui.muted },
171
+ "transcript gone": { value: picked.transcriptGone, color: picked.transcriptGone > 0 ? ui.warn : ui.muted },
172
+ model: { value: model, color: ui.accent },
173
+ "est. cost": { value: estCost, color: ui.warn },
174
+ });
175
+ ui.divider();
176
+ if (picked.transcriptGone > 0) {
177
+ ui.line(ui.dim(` ${picked.transcriptGone} note(s) can no longer be checked: the agent pruned their transcripts`));
178
+ }
179
+ if (picked.rows.length === 0) {
180
+ ui.row(ui.success(ui.CHECK), ui.text("nothing to check"));
181
+ return;
182
+ }
183
+ if (opts.dryRun) {
184
+ ui.line(ui.dim(" dry run — no model calls made"));
185
+ return;
186
+ }
187
+ if (opts.yes !== true) {
188
+ const proceed = await confirm({
189
+ message: `check ${picked.rows.length} notes against their transcripts with ${model} (~${estCost})?`,
190
+ default: true,
191
+ });
192
+ if (!proceed) {
193
+ ui.line(ui.dim("aborted"));
194
+ return;
195
+ }
196
+ }
197
+ const llm = groundLlm(cfg, model);
198
+ let summary;
199
+ await withPipelineLock(async () => {
200
+ const run = ui.spinner(`checking ${picked.rows.length} notes`).start();
201
+ try {
202
+ summary = await runGround(db, groundOpts, {
203
+ isVerified,
204
+ evidence,
205
+ onProgress: (done, total) => {
206
+ run.text = ui.dim(`checking notes ${done + 1}/${total}`);
207
+ },
208
+ llm,
209
+ });
210
+ run.stop();
211
+ }
212
+ catch (err) {
213
+ run.fail(ui.errorColor(err.message));
214
+ process.exitCode = 1;
215
+ }
216
+ });
217
+ if (summary === undefined)
218
+ return;
219
+ ui.summary({
220
+ checked: { value: summary.checked, color: ui.info },
221
+ supported: { value: summary.supported, color: ui.success },
222
+ unbacked: { value: summary.unbacked, color: summary.unbacked > 0 ? ui.warn : ui.muted },
223
+ contradicted: { value: summary.contradicted, color: summary.contradicted > 0 ? ui.errorColor : ui.muted },
224
+ "sent to review": { value: summary.flagged, color: summary.flagged > 0 ? ui.warn : ui.muted },
225
+ failed: { value: summary.failed, color: summary.failed > 0 ? ui.errorColor : ui.muted },
226
+ });
227
+ ui.line(ui.dim(" nothing was moved — walk the flagged notes with `vir review --audited`"));
228
+ if (summary.failed > 0)
229
+ process.exitCode = 1;
230
+ }
231
+ function groundLlm(cfg, model) {
232
+ const client = maybeAnthropicClient(cfg);
233
+ return (prompt) => withRateLimitRetry(() => callLLM(cfg, client, {
234
+ prompt,
235
+ model,
236
+ maxTokens: 4000,
237
+ cost: { stage: "audit-transcript" },
238
+ }));
239
+ }
240
+ // Called by `vir run --daemon` after a finished pass, inside its lock. A no-op
241
+ // unless config.checkTranscripts is on.
242
+ export async function transcriptCheckAfterPass(cfg) {
243
+ if (cfg.checkTranscripts !== true)
244
+ return;
245
+ const db = new StateDb();
246
+ try {
247
+ const root = vaultRoot(cfg);
248
+ const sources = buildSources(cfg);
249
+ await checkTranscriptsAfterRun(cfg, db, {
250
+ llm: groundLlm(cfg, normalizeModelName(resolveModelShorthand(cfg.models.distill), cfg.provider)),
251
+ isVerified: (r) => noteIsVerified(root, r),
252
+ evidence: (path) => loadEvidence(sources, path, cfg.filterToolCalls),
253
+ log: appendRunLog,
254
+ });
255
+ }
256
+ finally {
257
+ db.close();
258
+ }
259
+ }
136
260
  //# sourceMappingURL=audit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,9 @@ export function buildInitConfig(existing, a) {
39
39
  logQueries: existing?.logQueries,
40
40
  // Wizard-silent connect-pass knob.
41
41
  connectMaxCandidates: existing?.connectMaxCandidates,
42
+ // Wizard-silent daemon transcript check (opt-in, costs a call per note).
43
+ checkTranscripts: existing?.checkTranscripts,
44
+ checkTranscriptsPerRun: existing?.checkTranscriptsPerRun,
42
45
  // Migration marker: saveConfig stamps the current version anyway; carried
43
46
  // so a built config never reads as pre-migration.
44
47
  configVersion: existing?.configVersion,
@@ -1 +1 @@
1
- {"version":3,"file":"initConfig.js","sourceRoot":"","sources":["../../src/cli/initConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"initConfig.js","sourceRoot":"","sources":["../../src/cli/initConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { loadConfig } from "../config.js";
2
+ import { dayOf } from "../journal/render.js";
3
+ import { ingestJournal, journalDays, loadJournalSessions, renderJournalDay, writeJournalDay, } from "../journal/run.js";
4
+ import { StateDb } from "../state/db.js";
5
+ import * as ui from "../ui/display.js";
6
+ import { withPipelineLock } from "./guards.js";
7
+ const DAY_RE = /^\d{4}-\d{2}-\d{2}$/;
8
+ function validTimeZone(tz) {
9
+ try {
10
+ new Intl.DateTimeFormat("en-CA", { timeZone: tz });
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ export async function cmdJournal(date, opts) {
18
+ const timeZone = opts.tz ?? Intl.DateTimeFormat().resolvedOptions().timeZone;
19
+ const fail = (msg) => {
20
+ ui.row(ui.warn(ui.WARN_GLYPH), ui.text(msg));
21
+ process.exitCode = 1;
22
+ };
23
+ if (!validTimeZone(timeZone))
24
+ return fail(`unknown time zone: ${timeZone}`);
25
+ for (const d of [date, opts.since]) {
26
+ if (d !== undefined && !DAY_RE.test(d))
27
+ return fail(`expected YYYY-MM-DD, got ${d}`);
28
+ }
29
+ if ([date !== undefined, opts.since !== undefined, opts.all === true].filter(Boolean).length > 1) {
30
+ return fail("use one of: a date, --since, --all");
31
+ }
32
+ await withPipelineLock(async () => {
33
+ const cfg = loadConfig();
34
+ const db = new StateDb();
35
+ try {
36
+ const ingest = ingestJournal(cfg, db);
37
+ const sessions = loadJournalSessions(cfg, db);
38
+ const today = dayOf(new Date().toISOString(), timeZone) ?? "";
39
+ const all = journalDays(sessions, timeZone);
40
+ const days = opts.all === true
41
+ ? all
42
+ : opts.since !== undefined
43
+ ? all.filter((d) => d >= opts.since)
44
+ : [date ?? today];
45
+ let written = 0;
46
+ let unchanged = 0;
47
+ for (const day of days) {
48
+ const body = renderJournalDay(sessions, db, day, timeZone);
49
+ if (body === null)
50
+ continue;
51
+ if (opts.stdout === true) {
52
+ process.stdout.write(body);
53
+ continue;
54
+ }
55
+ if (writeJournalDay(cfg, day, body) === "written")
56
+ written += 1;
57
+ else
58
+ unchanged += 1;
59
+ }
60
+ if (opts.stdout === true)
61
+ return;
62
+ ui.row(ui.success(ui.CHECK), ui.text(`${written} day(s) written, ${unchanged} unchanged · ${ingest.parsed} of ${ingest.scanned} transcript(s) parsed`));
63
+ if (ingest.failed > 0)
64
+ ui.row(ui.warn(ui.WARN_GLYPH), ui.text(`${ingest.failed} transcript(s) could not be read`));
65
+ if (written + unchanged === 0)
66
+ ui.row(ui.dim(ui.BULLET), ui.dim(`no activity for ${date ?? today}`));
67
+ }
68
+ finally {
69
+ db.close();
70
+ }
71
+ });
72
+ }
73
+ //# sourceMappingURL=journal.js.map