@djolex999/vir-cli 0.24.2 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +69 -20
  2. package/dist/claude/updater.js +83 -7
  3. package/dist/claude/updater.js.map +1 -1
  4. package/dist/cli/connect.js +100 -0
  5. package/dist/cli/connect.js.map +1 -0
  6. package/dist/cli/init.js +13 -13
  7. package/dist/cli/init.js.map +1 -1
  8. package/dist/cli/initConfig.js +2 -0
  9. package/dist/cli/initConfig.js.map +1 -1
  10. package/dist/cli/insightsStatus.js +13 -0
  11. package/dist/cli/insightsStatus.js.map +1 -0
  12. package/dist/cli/notesDir.js +9 -0
  13. package/dist/cli/notesDir.js.map +1 -0
  14. package/dist/cli/projects.js +8 -7
  15. package/dist/cli/projects.js.map +1 -1
  16. package/dist/cli/reconcile.js +10 -8
  17. package/dist/cli/reconcile.js.map +1 -1
  18. package/dist/cli/reviewInsights.js +145 -0
  19. package/dist/cli/reviewInsights.js.map +1 -0
  20. package/dist/cli/syncClaude.js +101 -0
  21. package/dist/cli/syncClaude.js.map +1 -0
  22. package/dist/cli.js +50 -73
  23. package/dist/cli.js.map +1 -1
  24. package/dist/config.js +2 -0
  25. package/dist/config.js.map +1 -1
  26. package/dist/connect/calibrate.js +44 -0
  27. package/dist/connect/calibrate.js.map +1 -0
  28. package/dist/connect/cluster.js +63 -0
  29. package/dist/connect/cluster.js.map +1 -0
  30. package/dist/connect/embed.js +47 -0
  31. package/dist/connect/embed.js.map +1 -0
  32. package/dist/connect/extract.js +129 -0
  33. package/dist/connect/extract.js.map +1 -0
  34. package/dist/connect/identity.js +65 -0
  35. package/dist/connect/identity.js.map +1 -0
  36. package/dist/connect/insightFile.js +61 -0
  37. package/dist/connect/insightFile.js.map +1 -0
  38. package/dist/connect/qualify.js +39 -0
  39. package/dist/connect/qualify.js.map +1 -0
  40. package/dist/connect/run.js +199 -0
  41. package/dist/connect/run.js.map +1 -0
  42. package/dist/connect/text.js +20 -0
  43. package/dist/connect/text.js.map +1 -0
  44. package/dist/connect/types.js +2 -0
  45. package/dist/connect/types.js.map +1 -0
  46. package/dist/connect/verify.js +77 -0
  47. package/dist/connect/verify.js.map +1 -0
  48. package/dist/mcp/server.js +12 -2
  49. package/dist/mcp/server.js.map +1 -1
  50. package/dist/output/json.js +4 -2
  51. package/dist/output/json.js.map +1 -1
  52. package/dist/pipeline/distiller.js +1 -1
  53. package/dist/pipeline/distiller.js.map +1 -1
  54. package/dist/pipeline/parser.js +2 -2
  55. package/dist/pipeline/parser.js.map +1 -1
  56. package/dist/pipeline/projects.js +1 -1
  57. package/dist/pipeline/projects.js.map +1 -1
  58. package/dist/pipeline/run.js +15 -10
  59. package/dist/pipeline/run.js.map +1 -1
  60. package/dist/pipeline/toolCallFilter.js +25 -1
  61. package/dist/pipeline/toolCallFilter.js.map +1 -1
  62. package/dist/prune/classify.js +8 -2
  63. package/dist/prune/classify.js.map +1 -1
  64. package/dist/prune/prune.js +9 -6
  65. package/dist/prune/prune.js.map +1 -1
  66. package/dist/search/retriever.js +19 -0
  67. package/dist/search/retriever.js.map +1 -1
  68. package/dist/search/thresholds.js +22 -2
  69. package/dist/search/thresholds.js.map +1 -1
  70. package/dist/sources/claudeCode.js +35 -0
  71. package/dist/sources/claudeCode.js.map +1 -0
  72. package/dist/sources/registry.js +49 -0
  73. package/dist/sources/registry.js.map +1 -0
  74. package/dist/sources/types.js +2 -0
  75. package/dist/sources/types.js.map +1 -0
  76. package/dist/state/db.js +240 -3
  77. package/dist/state/db.js.map +1 -1
  78. package/dist/version.js +2 -1
  79. package/dist/version.js.map +1 -1
  80. package/package.json +1 -1
package/README.md CHANGED
@@ -5,7 +5,8 @@
5
5
  <h1 align="center">vir</h1>
6
6
 
7
7
  <p align="center">
8
- An LLM Wiki for Claude Code, in your Obsidian vault.
8
+ Karpathy's LLM Wiki, built automatically from your Claude Code sessions.<br>
9
+ Plain markdown you own: best in Obsidian, fine without it.
9
10
  </p>
10
11
 
11
12
  <p align="center">
@@ -22,7 +23,7 @@ developer-tools, mcp, local-first, cross-platform, llm-wiki
22
23
  <a href="https://www.npmjs.com/package/@djolex999/vir-cli"><img src="https://img.shields.io/npm/v/@djolex999/vir-cli?color=7c6af7&label=npm" alt="npm version"></a>
23
24
  <a href="https://www.npmjs.com/package/@djolex999/vir-cli"><img src="https://img.shields.io/npm/dw/@djolex999/vir-cli?color=4fd1a0" alt="npm downloads"></a>
24
25
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22d3ee" alt="license"></a>
25
- <a href="#project-status"><img src="https://img.shields.io/badge/tests-612%20passing-22c55e" alt="tests"></a>
26
+ <a href="#project-status"><img src="https://img.shields.io/badge/tests-1217%20passing-22c55e" alt="tests"></a>
26
27
  <a href="#project-status"><img src="https://img.shields.io/badge/platforms-macOS%20%7C%20Linux-lightgrey" alt="platforms"></a>
27
28
  <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-server-c084fc" alt="mcp"></a>
28
29
  <a href="#"><img src="https://img.shields.io/badge/local--first-yes-f59e0b" alt="local-first"></a>
@@ -56,7 +57,7 @@ vir init
56
57
  vir run
57
58
  ```
58
59
 
59
- `vir init` is a wizard: provider, models, vault path. `vir run` does one pass
60
+ `vir init` is a wizard: provider, models, notes folder. `vir run` does one pass
60
61
  over your sessions and writes notes. When you like the output,
61
62
  `vir schedule install` registers a daemon that keeps the vault current.
62
63
 
@@ -87,7 +88,7 @@ Claude Code sessions
87
88
  ↓
88
89
  vir
89
90
  ↓
90
- Obsidian vault
91
+ markdown notes (Obsidian vault optional)
91
92
  ↓
92
93
  CLAUDE.md
93
94
  ↓
@@ -112,12 +113,15 @@ Several open source implementations of this pattern now exist
112
113
  [nashsu/llm_wiki](https://github.com/nashsu/llm_wiki) among them). Each takes
113
114
  a different shape.
114
115
 
115
- Vir is the Obsidian-native one. It treats Obsidian as the primary frontend,
116
- not just a storage location: a sidebar plugin
116
+ Vir is the one built from your own coding sessions, and it is Obsidian-native
117
+ when you want it. In Obsidian it is a frontend, not just a storage location: a
118
+ sidebar plugin
117
119
  ([vir-obsidian](https://github.com/djolex999/vir-obsidian)),
118
120
  dataview-compatible frontmatter, wikilinked notes that show up in the graph.
119
121
  It reads AI coding session transcripts retroactively, so months of existing
120
- history become a queryable knowledge base in one run.
122
+ history become a queryable knowledge base in one run. Without Obsidian it is a
123
+ folder of markdown, and `vir query` and the MCP server work with no editor at
124
+ all.
121
125
 
122
126
  [Karpathy's post →](https://x.com/karpathy/status/2039805659525644595)
123
127
 
@@ -141,16 +145,25 @@ worse results, not better."_ Fair. Vir addresses it in layers:
141
145
  - **Opt-in `CLAUDE.md` sync.** Nothing vir generates touches your prompt
142
146
  context automatically. `vir sync-claude` shows a diff and waits for your
143
147
  confirmation. You decide what reaches Claude.
144
- - **Plain markdown output.** Every note is a file in your Obsidian vault. Read
148
+ - **Plain markdown output.** Every note is a file in your notes folder. Read
145
149
  it, edit it, delete it. Nothing is hidden in a database you can't inspect.
146
150
  - **Lint and dedupe.** `vir lint` flags contradictions and stale notes;
147
151
  `vir dedupe` merges near-duplicate notes that have drifted apart.
148
152
  - **Active learning** via `vir review`. Walk through new distillations and
149
- approve, edit, or reject each one. Verified notes rank first in retrieval
150
- (in `vir query` and the MCP server). Rejected notes move to `.rejected/`,
153
+ approve, edit, or reject each one. Verified notes get a ranking boost in
154
+ retrieval (in `vir query` and the MCP server). Rejected notes move to `.rejected/`,
151
155
  recoverable, not deleted.
152
156
  - **MMR-diverse retrieval.** Queries return notes covering different aspects
153
157
  of the topic, not 5 similar duplicates.
158
+ - **Recurring lessons become rules, only with your yes.** `vir connect` looks
159
+ for a lesson you've written down in at least 3 sessions over at least a
160
+ week (by embedding each "What Was Learned" item), and has the model state it
161
+ as one rule, with a verbatim quote from every note it cites; quotes that
162
+ aren't in the note are thrown out. Proposed rules live in `insights/rules/`,
163
+ stay out of search until you accept them in `vir review --insights`, and
164
+ reach CLAUDE.md only through `vir sync-claude`, which asks about each rule
165
+ separately and never adds one under `--force`. Rejected rules stay rejected
166
+ even after the source notes are rewritten. Needs an embedding provider.
154
167
  - **Topic synthesis** via `vir compose "<topic>"`. Embedding-searches the
155
168
  vault for related notes and synthesizes them into a single topic page under
156
169
  `topics/`, with each source wikilinked so it backlinks in Obsidian's graph.
@@ -206,8 +219,8 @@ Different tools for different needs:
206
219
  capture and vector storage, use claude-mem.
207
220
  - **If you're building AI applications that need to remember users**
208
221
  long-term, use mem0 (different layer entirely).
209
- - **If you want an Obsidian-native LLM Wiki** that reads your existing Claude
210
- Code sessions, use vir.
222
+ - **If you want an LLM Wiki that reads your existing Claude Code sessions**,
223
+ Obsidian-native or just a folder of markdown, use vir.
211
224
 
212
225
  ## Numbers from a real run
213
226
 
@@ -224,7 +237,8 @@ Output from my first run across 226 Claude Code sessions:
224
237
 
225
238
  Other LLM Wiki implementations would produce similar results with the same
226
239
  input. The distinguishing question for vir is workflow fit: does
227
- Obsidian-native plus retroactive match how you actually work?
240
+ retroactive distillation of your own sessions, Obsidian-native when you want
241
+ it, match how you actually work?
228
242
 
229
243
  Example query against the distilled vault:
230
244
 
@@ -255,13 +269,28 @@ sources 4 · via embedding · searched 126
255
269
  - macOS or Linux (systemd or cron)
256
270
  - Node.js 20+
257
271
  - Claude Code (sessions at `~/.claude/projects/`)
258
- - Obsidian vault
272
+ - A folder for notes. An Obsidian vault works great but is optional; see
273
+ [Without Obsidian](#without-obsidian).
259
274
  - A distill provider — any one of:
260
275
  - Anthropic API key (predictable per-session cost, no effect on your Claude Code limits)
261
276
  - Your Claude Code subscription (`provider: "claude-cli"` — free and keyless; distills consume your Claude Code usage limits)
262
277
  - Kie.ai API key (~72% cheaper, third-party proxy — used for testing and calibration runs, not recommended for your real vault)
263
278
  - Optional: Ollama + `nomic-embed-text` for semantic search
264
279
 
280
+
281
+ ## Without Obsidian
282
+
283
+ vir writes plain markdown with YAML frontmatter. Obsidian is the nicest way to
284
+ browse it, but nothing depends on it:
285
+
286
+ - **Any editor works.** Notes are ordinary `.md` files under `<notes folder>/vir/`.
287
+ `[[wikilinks]]` read fine as text, and VS Code with Foam or Markdown Memo
288
+ resolves them as links.
289
+ - **No editor needed for retrieval.** `vir query "<question>"` and the MCP server
290
+ (`vir mcp install`) search the folder directly.
291
+ - **Point `vir init` at any folder.** If no Obsidian vault exists, it suggests
292
+ `~/notes` and creates it.
293
+
265
294
  ## Cost
266
295
 
267
296
  Vir runs two API calls per session: a Haiku classify (cheap) and a distill
@@ -363,6 +392,8 @@ with your distro, init system, and Node version.
363
392
  | `vir query "<question>"` | cheap | Semantic search your vault |
364
393
  | `vir queries` | free | Retrieval report: method split, degraded rate, dead-weight notes |
365
394
  | `vir compose "<topic>"` | $$ | Synthesize a topic page from related notes |
395
+ | `vir connect --dry-run` | free | Find lessons you keep re-learning; show candidates + cost |
396
+ | `vir connect` | $ | Propose those lessons as cited rules (≤10 LLM calls) |
366
397
  | `vir summarize <project>` | cheap | Cross-session project synthesis |
367
398
  | `vir summarize --week` | cheap | Period summary of the week's notes |
368
399
  | `vir lint` | cheap | Find orphans, stale notes, contradictions |
@@ -372,6 +403,7 @@ with your distro, init system, and Node version.
372
403
  | `vir audit` | cheap | Model judges each note; verdicts feed `vir review --audited` |
373
404
  | `vir audit --dry-run` | free | Notes, batches and est. cost, no model call |
374
405
  | `vir review --audited` | free | Walk notes vir audit flagged, worst first |
406
+ | `vir review --insights` | free | Accept, edit or reject rules proposed by `vir connect` |
375
407
  | `vir audit --apply-rejects` | free | Move fresh reject verdicts to `.rejected/` (reversible) |
376
408
  | `vir lint --strays` | free | Note files with no live DB row (retitle debris) |
377
409
  | `vir lint --strays --fix` | free | Move retitle debris to `archived/` (only when a live copy exists) |
@@ -395,6 +427,23 @@ run `vir <command> --help` for the full flag list. `vir query --json` and
395
427
  `vir doctor --json` are the machine contracts the
396
428
  [vir-obsidian](https://github.com/djolex999/vir-obsidian) plugin consumes.
397
429
 
430
+ ## Use vir from any agent (skill)
431
+
432
+ vir ships an [Agent Skills](https://agentskills.io) skill that teaches Claude
433
+ Code, Codex, Cursor and other skill-aware agents to check your notes before
434
+ they work: search with `vir query --json` (free, no LLM call), cite the notes
435
+ they use, and verify them against the current code.
436
+
437
+ ```bash
438
+ npx skills add djolex999/vir
439
+ ```
440
+
441
+ The skill is read-only. It never writes your notes, never runs paid commands
442
+ like `vir run` unless you ask, and if vir isn't installed it tells you how to
443
+ set it up instead of installing it. It prefers the MCP server when that's
444
+ registered, and falls back to reading the notes folder directly. Source:
445
+ [`skills/vir/SKILL.md`](skills/vir/SKILL.md).
446
+
398
447
  ## MCP server (Claude Code integration)
399
448
 
400
449
  Vir runs as an MCP server, letting Claude Code consult your vault mid-session
@@ -408,8 +457,8 @@ Restart Claude Code. The vault is now queryable mid-session via six tools:
408
457
  `vir_query`, `vir_status`, `vir_recent_notes`, `vir_recent_articles`,
409
458
  `vir_project_summary`, `vir_compose`. `vir_query` takes a `type` filter
410
459
  (`session` | `article` | `topic` | `pdf` | `all`). Human-verified notes
411
- (approved via `vir review`) rank first; pass `verified_only: true` to see
412
- only those. The server never writes the vault. `vir_query` is the one tool
460
+ (approved via `vir review`) get a +0.2 score boost; pass `verified_only: true`
461
+ to see only those. The server never writes the vault. `vir_query` is the one tool
413
462
  that spends tokens: it synthesizes an answer with your provider, and
414
463
  `synthesize: false` returns just the matching notes.
415
464
 
@@ -456,7 +505,7 @@ Located at `~/.vir/config.json`.
456
505
 
457
506
  | Field | Default | Description |
458
507
  | ------------------- | --------------------------- | ---------------------------------------------------------- |
459
- | `vaultPath` | (required) | Absolute path to Obsidian vault |
508
+ | `vaultPath` | (required) | Absolute path to your notes folder (Obsidian vault optional) |
460
509
  | `outputDir` | `vir` | Subdir inside vault |
461
510
  | `claudeProjectsDir` | `~/.claude/projects` | Claude Code sessions |
462
511
  | `cadenceHours` | `3` | Daemon run frequency (hours) |
@@ -524,8 +573,8 @@ improvements. Delete it any time; disable it with `"logQueries": false` in
524
573
 
525
574
  | | |
526
575
  | -------------- | ----------------------------------------- |
527
- | Version | 0.22.0 |
528
- | Tests | 887 passing |
576
+ | Version | 0.24.2 |
577
+ | Tests | 1073 passing |
529
578
  | Platforms | macOS (launchd), Linux (systemd/cron) |
530
579
  | Node | 20+ |
531
580
  | First-run cost | $1 to $5 (Kie.ai optional, ~72% cheaper) |
@@ -536,7 +585,7 @@ improvements. Delete it any time; disable it with `"logQueries": false` in
536
585
  Shipped:
537
586
 
538
587
  - [x] Linux support (systemd timer + cron fallback), experimental
539
- - [x] Active learning: `vir review`, verified notes ranked first in retrieval
588
+ - [x] Active learning: `vir review`, verified notes boosted in retrieval
540
589
  - [x] Web article ingestion (Obsidian Web Clipper folder → same vault)
541
590
  - [x] PDF and paper ingestion
542
591
  - [x] Obsidian plugin: [vir-obsidian](https://github.com/djolex999/vir-obsidian), sidebar queries against the vault
@@ -1,15 +1,68 @@
1
1
  import { chmodSync, existsSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
2
2
  import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
+ import { ruleText } from "../connect/text.js";
4
5
  import { kebab } from "../pipeline/writer.js";
5
6
  export const VIR_START = "<!-- VIR:START -->";
6
7
  export const VIR_END = "<!-- VIR:END -->";
7
8
  const TOP_N_PER_CATEGORY = 5;
8
- export function planUpdates(_cfg, db, options = {}) {
9
+ // Which CLAUDE.md a rule's scope lands in, limited to the targets planUpdates
10
+ // builds this run (a project with no distilled notes has no plan).
11
+ function ruleTarget(scope, options, projectSlugs) {
12
+ if (scope === "global")
13
+ return options.project ? null : globalClaudePath();
14
+ if (!scope.startsWith("project:") || options.globalOnly)
15
+ return null;
16
+ const slug = scope.slice("project:".length);
17
+ if (options.project && slug !== options.project)
18
+ return null;
19
+ return projectSlugs.has(slug) ? projectClaudePath(slug) : null;
20
+ }
21
+ function projectSlugsOf(rows) {
22
+ return new Set(rows.map((r) => kebab(r.project)).filter((s) => s.length > 0));
23
+ }
24
+ // Accepted rules not yet promoted or declined, one per target — each becomes
25
+ // its own y/n hunk in sync-claude. Never includes proposed or rejected rules.
26
+ export function planRules(db, options = {}) {
27
+ const slugs = projectSlugsOf(db.listDistilled());
28
+ const out = [];
29
+ for (const insight of db.listInsights()) {
30
+ if (insight.status !== "accepted" || insight.promotion !== "none")
31
+ continue;
32
+ const target = ruleTarget(insight.scope, options, slugs);
33
+ if (target !== null)
34
+ out.push({ target, insight });
35
+ }
36
+ return out;
37
+ }
38
+ export function renderRuleHunk(c) {
39
+ const sources = c.insight.evidence
40
+ .map((e) => `[[${e.citeSlug}]] (${e.project || "-"}, ${e.date.slice(0, 10)})`)
41
+ .join(", ");
42
+ return [`+ - rule: ${ruleText(c.insight.rule)}`, ` why: ${ruleText(c.insight.why)}`, ` sources: ${sources}`].join("\n");
43
+ }
44
+ export function planUpdates(_cfg, db, options = {},
45
+ // Rules approved interactively THIS run; rendered alongside promoted ones.
46
+ approvedRuleIds = new Set()) {
9
47
  const rows = db.listDistilled();
10
48
  const plans = [];
49
+ const slugs = projectSlugsOf(rows);
50
+ const rulesByTarget = new Map();
51
+ for (const ins of db.listInsights()) {
52
+ if (ins.status !== "accepted")
53
+ continue;
54
+ if (ins.promotion !== "promoted" && !(ins.promotion === "none" && approvedRuleIds.has(ins.id)))
55
+ continue;
56
+ const target = ruleTarget(ins.scope, options, slugs);
57
+ if (target === null)
58
+ continue;
59
+ const list = rulesByTarget.get(target) ?? [];
60
+ list.push({ id: ins.id, rule: ins.rule });
61
+ rulesByTarget.set(target, list);
62
+ }
11
63
  if (!options.project) {
12
- plans.push(buildPlan(globalClaudePath(), rows, { scope: "global" }));
64
+ const target = globalClaudePath();
65
+ plans.push(buildPlan(target, rows, { scope: "global" }, rulesByTarget.get(target) ?? []));
13
66
  }
14
67
  if (options.globalOnly)
15
68
  return plans;
@@ -29,13 +82,13 @@ export function planUpdates(_cfg, db, options = {}) {
29
82
  }
30
83
  for (const [slug, projectRows] of byProject) {
31
84
  const target = projectClaudePath(slug);
32
- plans.push(buildPlan(target, projectRows, { scope: { project: slug } }));
85
+ plans.push(buildPlan(target, projectRows, { scope: { project: slug } }, rulesByTarget.get(target) ?? []));
33
86
  }
34
87
  return plans;
35
88
  }
36
- function buildPlan(target, rows, meta) {
89
+ function buildPlan(target, rows, meta, rules = []) {
37
90
  const entries = selectTopEntries(rows);
38
- const newBlock = renderBlock(entries);
91
+ const newBlock = renderBlock(entries, rules);
39
92
  const existsAtPath = existsSync(target);
40
93
  let existingBlock = "";
41
94
  let lastUpdated = null;
@@ -50,7 +103,14 @@ function buildPlan(target, rows, meta) {
50
103
  }
51
104
  }
52
105
  const oldEntries = parseEntries(existingBlock);
53
- const diff = computeDiff(oldEntries, entries);
106
+ const oldRules = parseRules(existingBlock);
107
+ const oldIds = new Set(oldRules.map((r) => r.id));
108
+ const newIds = new Set(rules.map((r) => r.id));
109
+ const diff = {
110
+ ...computeDiff(oldEntries, entries),
111
+ rulesAdded: rules.filter((r) => !oldIds.has(r.id)),
112
+ rulesRemoved: oldRules.filter((r) => !newIds.has(r.id)),
113
+ };
54
114
  return {
55
115
  target,
56
116
  exists: existsAtPath,
@@ -91,7 +151,7 @@ function selectTopEntries(rows) {
91
151
  }
92
152
  return out;
93
153
  }
94
- function renderBlock(entries) {
154
+ export function renderBlock(entries, rules = []) {
95
155
  const today = new Date().toISOString().slice(0, 10);
96
156
  const lines = [];
97
157
  lines.push(VIR_START);
@@ -126,9 +186,25 @@ function renderBlock(entries) {
126
186
  }
127
187
  lines.push("");
128
188
  }
189
+ if (rules.length > 0) {
190
+ lines.push("## Rules (from vir)");
191
+ lines.push("");
192
+ for (const r of rules)
193
+ lines.push(`- rule: ${ruleText(r.rule)} <!-- vir-rule:${r.id} -->`);
194
+ lines.push("");
195
+ }
129
196
  lines.push(VIR_END);
130
197
  return lines.join("\n");
131
198
  }
199
+ function parseRules(block) {
200
+ const out = [];
201
+ for (const line of block.split("\n")) {
202
+ const m = line.match(/^- rule: (.+) <!-- vir-rule:([A-Za-z0-9-]+) -->$/);
203
+ if (m?.[1] !== undefined && m[2] !== undefined)
204
+ out.push({ id: m[2], rule: m[1] });
205
+ }
206
+ return out;
207
+ }
132
208
  function extractBlock(raw) {
133
209
  const start = raw.indexOf(VIR_START);
134
210
  const end = raw.indexOf(VIR_END);
@@ -1 +1 @@
1
- {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/claude/updater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/claude/updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import confirm from "@inquirer/confirm";
2
+ import { loadConfig } from "../config.js";
3
+ import { runConnect } from "../connect/run.js";
4
+ import { computeCost, resolvePricing } from "../cost/pricing.js";
5
+ import { callLLM, maybeAnthropicClient, normalizeModelName, resolveModelShorthand, withRateLimitRetry, } from "../pipeline/distiller.js";
6
+ import { resolveActiveProviderCached } from "../search/provider.js";
7
+ import { StateDb } from "../state/db.js";
8
+ import * as ui from "../ui/display.js";
9
+ const VERIFY_MAX_TOKENS = 1200;
10
+ export function formatConnectSummary(s, dryRun, opts = {}) {
11
+ const lines = [`${s.lessons} lessons · ${s.clusters} clusters · ${s.candidates} candidates`];
12
+ const skipped = [];
13
+ if (s.unchanged > 0)
14
+ skipped.push(`${s.unchanged} unchanged`);
15
+ if (s.skippedRejected > 0)
16
+ skipped.push(`${s.skippedRejected} previously rejected`);
17
+ if (skipped.length > 0)
18
+ lines.push(`skipped: ${skipped.join(" · ")}`);
19
+ if (s.deferred > 0)
20
+ lines.push(`${s.deferred} deferred (connectMaxCandidates)`);
21
+ if (dryRun) {
22
+ const calls = s.candidates - s.deferred;
23
+ lines.push(opts.quota === true
24
+ ? `${calls} LLM call(s) on your Claude Code subscription quota`
25
+ : s.estCostUsd === null
26
+ ? `${calls} LLM call(s), cost unknown (no price for this model)`
27
+ : `up to $${s.estCostUsd.toFixed(2)} for ${calls} LLM call(s)`);
28
+ return lines;
29
+ }
30
+ const out = [`${s.proposed} proposed`, `${s.updated} updated`];
31
+ if (s.additionsFlagged > 0)
32
+ out.push(`${s.additionsFlagged} accepted rule(s) with new evidence`);
33
+ if (s.unverified > 0)
34
+ out.push(`${s.unverified} unverified`);
35
+ if (s.llmFailures > 0)
36
+ out.push(`${s.llmFailures} LLM failure(s)`);
37
+ lines.push(`${s.llmCalls} LLM call(s): ${out.join(" · ")}`);
38
+ if (s.keptRatios.length > 0)
39
+ lines.push(`kept ${s.keptRatios.map(([k, t]) => `${k}/${t}`).join(", ")}`);
40
+ if (s.proposed + s.updated + s.additionsFlagged > 0)
41
+ lines.push("review them with: vir review --insights");
42
+ return lines;
43
+ }
44
+ export async function cmdConnect(opts) {
45
+ const cfg = loadConfig();
46
+ const db = new StateDb();
47
+ try {
48
+ const client = maybeAnthropicClient(cfg);
49
+ const model = normalizeModelName(resolveModelShorthand(cfg.models.distill), cfg.provider);
50
+ const deps = {
51
+ provider: await resolveActiveProviderCached(cfg.embeddingProvider),
52
+ llm: (prompt) => withRateLimitRetry(() => callLLM(cfg, client, { prompt, model, maxTokens: VERIFY_MAX_TOKENS, cost: { stage: "connect" } })),
53
+ model,
54
+ estimateCostUsd: (inTok, outTok) => cfg.provider === "claude-cli"
55
+ ? 0
56
+ : resolvePricing(cfg.provider, model, cfg.pricing, cfg.kieTopUpTier) === null
57
+ ? null
58
+ : computeCost(cfg.provider, model, inTok, outTok, cfg.pricing, cfg.kieTopUpTier),
59
+ now: () => new Date(),
60
+ };
61
+ ui.header(`connect${opts.dryRun ? " --dry-run" : ""}`);
62
+ ui.blank();
63
+ if (opts.reconsider !== undefined) {
64
+ if (opts.dryRun) {
65
+ const row = db.getInsightBySlug(opts.reconsider);
66
+ ui.line(ui.text(row === null
67
+ ? ` no rule with slug ${opts.reconsider}`
68
+ : ` would reset ${opts.reconsider} (${row.status}, ${row.promotion}) to proposed — nothing written`));
69
+ return;
70
+ }
71
+ await runConnect(cfg, db, { dryRun: false, reconsider: opts.reconsider }, deps);
72
+ ui.row(ui.success(ui.CHECK), ui.text(`${opts.reconsider} is proposed again — vir review --insights`));
73
+ return;
74
+ }
75
+ const preview = await runConnect(cfg, db, { dryRun: true }, deps);
76
+ const quota = cfg.provider === "claude-cli";
77
+ for (const l of formatConnectSummary(preview, true, { quota }))
78
+ ui.line(ui.text(` ${l}`));
79
+ if (opts.dryRun || preview.candidates === 0)
80
+ return;
81
+ if (opts.yes !== true) {
82
+ if (process.stdin.isTTY !== true) {
83
+ throw new Error("vir connect makes paid LLM calls — pass --yes to run it non-interactively");
84
+ }
85
+ const proceed = await confirm({ message: "Run the LLM calls now?", default: false });
86
+ if (!proceed) {
87
+ ui.line(ui.dim(" aborted"));
88
+ return;
89
+ }
90
+ }
91
+ ui.blank();
92
+ const result = await runConnect(cfg, db, { dryRun: false }, deps);
93
+ for (const l of formatConnectSummary(result, false, { quota }))
94
+ ui.line(ui.text(` ${l}`));
95
+ }
96
+ finally {
97
+ db.close();
98
+ }
99
+ }
100
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAyC,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,UAAU,oBAAoB,CAClC,CAAiB,EACjB,MAAe,EACf,OAA4B,EAAE;IAE9B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,eAAe,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,sBAAsB,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,kCAAkC,CAAC,CAAC;IAChF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC;QACxC,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,KAAK,KAAK,IAAI;YACjB,CAAC,CAAC,GAAG,KAAK,qDAAqD;YAC/D,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI;gBACvB,CAAC,CAAC,GAAG,KAAK,sDAAsD;gBAChE,CAAC,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CACjE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,gBAAgB,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,qCAAqC,CAAC,CAAC;IACjG,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,iBAAiB,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,iBAAiB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxG,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA8D;IAC7F,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAgB;YACxB,QAAQ,EAAE,MAAM,2BAA2B,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAClE,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CACd,kBAAkB,CAAC,GAAG,EAAE,CACtB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAClG;YACH,KAAK;YACL,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CACjC,GAAG,CAAC,QAAQ,KAAK,YAAY;gBAC3B,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI;oBAC3E,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC;YACtF,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjD,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI;oBAC1B,CAAC,CAAC,uBAAuB,IAAI,CAAC,UAAU,EAAE;oBAC1C,CAAC,CAAC,iBAAiB,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,SAAS,iCAAiC,CAAC,CAAC,CAAC;gBACzG,OAAO;YACT,CAAC;YACD,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;YAChF,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,4CAA4C,CAAC,CAAC,CAAC;YACtG,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO;QAEpD,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;YAC/F,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;QACH,CAAC;QACD,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAClE,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
package/dist/cli/init.js CHANGED
@@ -7,11 +7,12 @@ import { homedir } from "node:os";
7
7
  import { join } from "node:path";
8
8
  import { CONFIG_PATH, maskSecret, ConfigSchema, configExists, ensureVirDir, expandHome, loadConfig, saveConfig, } from "../config.js";
9
9
  import { setupNotifications } from "./notificationsSetup.js";
10
- import { categorizeTranscriptHead, classifyTranscript, estimateSessionCost, groupByProject, readTranscriptHead, } from "../pipeline/projects.js";
10
+ import { categorizeTranscriptHead, estimateSessionCost, readTranscriptHead, } from "../pipeline/projects.js";
11
+ import { buildSources, groupSessions, resolveSource, scanAll, } from "../sources/registry.js";
11
12
  import { promptProjectDecisions } from "./projectSelect.js";
12
- import { scanSessions } from "../pipeline/scanner.js";
13
13
  import { normalizeModelName } from "../pipeline/distiller.js";
14
14
  import { buildInitConfig } from "./initConfig.js";
15
+ import { defaultNotesDir } from "./notesDir.js";
15
16
  import { installToClaudeCode } from "../mcp/install.js";
16
17
  import * as ui from "../ui/display.js";
17
18
  export async function cmdInit() {
@@ -23,15 +24,14 @@ export async function cmdInit() {
23
24
  let vaultPath = "";
24
25
  for (;;) {
25
26
  vaultPath = await input({
26
- message: "Obsidian vault path",
27
- default: existing?.vaultPath ??
28
- join(homedir(), "Documents", "Obsidian", "MyVault"),
27
+ message: "Notes folder (any folder of markdown — an Obsidian vault works too)",
28
+ default: existing?.vaultPath ?? defaultNotesDir(homedir(), existsSync),
29
29
  });
30
30
  const expanded = expandHome(vaultPath);
31
31
  if (existsSync(expanded))
32
32
  break;
33
33
  const create = await confirm({
34
- message: `Vault path does not exist (${expanded}). Create it?`,
34
+ message: `Folder does not exist (${expanded}). Create it?`,
35
35
  default: true,
36
36
  });
37
37
  if (create) {
@@ -45,7 +45,7 @@ export async function cmdInit() {
45
45
  }
46
46
  }
47
47
  const outputDir = await input({
48
- message: "Output subdir inside vault",
48
+ message: "Output subfolder inside the notes folder",
49
49
  default: existing?.outputDir ?? "vir",
50
50
  });
51
51
  // ── claude projects dir ─────────────────────────────────────────────────
@@ -69,15 +69,14 @@ export async function cmdInit() {
69
69
  // ── web articles (optional second input source) ─────────────────────────
70
70
  let articlesDir = existing?.articlesDir;
71
71
  const wantsArticles = await confirm({
72
- message: "Do you save web articles to a folder (e.g. Obsidian Web Clipper)?",
72
+ message: "Do you save web articles as markdown to a folder (e.g. a web clipper)?",
73
73
  default: existing?.articlesDir !== undefined,
74
74
  });
75
75
  if (wantsArticles) {
76
76
  for (;;) {
77
77
  articlesDir = await input({
78
78
  message: "Articles (raw/) directory",
79
- default: existing?.articlesDir ??
80
- join(homedir(), "Documents", "Obsidian", "raw"),
79
+ default: existing?.articlesDir ?? join(expandHome(vaultPath), "raw"),
81
80
  });
82
81
  const expanded = expandHome(articlesDir);
83
82
  if (existsSync(expanded))
@@ -255,12 +254,13 @@ export async function cmdInit() {
255
254
  let agentTranscriptsAnswer;
256
255
  try {
257
256
  const projectsDirX = expandHome(claudeProjectsDir);
258
- const allFound = scanSessions(projectsDirX);
257
+ const sources = buildSources({ claudeProjectsDir: projectsDirX });
258
+ const allFound = scanAll(sources);
259
259
  // Triage counts + the agent-transcript question. Only top-level
260
260
  // transcripts count (nested workflow/sidechain have their own filter),
261
261
  // and agent transcripts are excluded from the per-project multi-select
262
262
  // numbers so the costs shown reflect what would actually distill.
263
- const topLevel = allFound.filter((s) => classifyTranscript(s.path, projectsDirX) === "session");
263
+ const topLevel = allFound.filter((s) => resolveSource(sources, s.path).category(s.path) === "session");
264
264
  const counts = { interactive: 0, agent: 0, stub: 0 };
265
265
  const agentPaths = new Set();
266
266
  for (const s of topLevel) {
@@ -287,7 +287,7 @@ export async function cmdInit() {
287
287
  const found = agentTranscriptsAnswer !== "include"
288
288
  ? topLevel.filter((s) => !agentPaths.has(s.path))
289
289
  : topLevel;
290
- const groups = [...groupByProject(found, projectsDirX).values()];
290
+ const groups = [...groupSessions(found, sources).values()];
291
291
  if (groups.length > 0) {
292
292
  const classifyId = normalizeModelName(classifyModel, provider);
293
293
  const distillId = normalizeModelName(distillModel, provider);