@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.
- package/README.md +69 -20
- package/dist/claude/updater.js +83 -7
- package/dist/claude/updater.js.map +1 -1
- package/dist/cli/connect.js +100 -0
- package/dist/cli/connect.js.map +1 -0
- package/dist/cli/init.js +13 -13
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/initConfig.js +2 -0
- package/dist/cli/initConfig.js.map +1 -1
- package/dist/cli/insightsStatus.js +13 -0
- package/dist/cli/insightsStatus.js.map +1 -0
- package/dist/cli/notesDir.js +9 -0
- package/dist/cli/notesDir.js.map +1 -0
- package/dist/cli/projects.js +8 -7
- package/dist/cli/projects.js.map +1 -1
- package/dist/cli/reconcile.js +10 -8
- package/dist/cli/reconcile.js.map +1 -1
- package/dist/cli/reviewInsights.js +145 -0
- package/dist/cli/reviewInsights.js.map +1 -0
- package/dist/cli/syncClaude.js +101 -0
- package/dist/cli/syncClaude.js.map +1 -0
- package/dist/cli.js +50 -73
- package/dist/cli.js.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/connect/calibrate.js +44 -0
- package/dist/connect/calibrate.js.map +1 -0
- package/dist/connect/cluster.js +63 -0
- package/dist/connect/cluster.js.map +1 -0
- package/dist/connect/embed.js +47 -0
- package/dist/connect/embed.js.map +1 -0
- package/dist/connect/extract.js +129 -0
- package/dist/connect/extract.js.map +1 -0
- package/dist/connect/identity.js +65 -0
- package/dist/connect/identity.js.map +1 -0
- package/dist/connect/insightFile.js +61 -0
- package/dist/connect/insightFile.js.map +1 -0
- package/dist/connect/qualify.js +39 -0
- package/dist/connect/qualify.js.map +1 -0
- package/dist/connect/run.js +199 -0
- package/dist/connect/run.js.map +1 -0
- package/dist/connect/text.js +20 -0
- package/dist/connect/text.js.map +1 -0
- package/dist/connect/types.js +2 -0
- package/dist/connect/types.js.map +1 -0
- package/dist/connect/verify.js +77 -0
- package/dist/connect/verify.js.map +1 -0
- package/dist/mcp/server.js +12 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/output/json.js +4 -2
- package/dist/output/json.js.map +1 -1
- package/dist/pipeline/distiller.js +1 -1
- package/dist/pipeline/distiller.js.map +1 -1
- package/dist/pipeline/parser.js +2 -2
- package/dist/pipeline/parser.js.map +1 -1
- package/dist/pipeline/projects.js +1 -1
- package/dist/pipeline/projects.js.map +1 -1
- package/dist/pipeline/run.js +15 -10
- package/dist/pipeline/run.js.map +1 -1
- package/dist/pipeline/toolCallFilter.js +25 -1
- package/dist/pipeline/toolCallFilter.js.map +1 -1
- package/dist/prune/classify.js +8 -2
- package/dist/prune/classify.js.map +1 -1
- package/dist/prune/prune.js +9 -6
- package/dist/prune/prune.js.map +1 -1
- package/dist/search/retriever.js +19 -0
- package/dist/search/retriever.js.map +1 -1
- package/dist/search/thresholds.js +22 -2
- package/dist/search/thresholds.js.map +1 -1
- package/dist/sources/claudeCode.js +35 -0
- package/dist/sources/claudeCode.js.map +1 -0
- package/dist/sources/registry.js +49 -0
- package/dist/sources/registry.js.map +1 -0
- package/dist/sources/types.js +2 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/state/db.js +240 -3
- package/dist/state/db.js.map +1 -1
- package/dist/version.js +2 -1
- package/dist/version.js.map +1 -1
- 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
|
-
|
|
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-
|
|
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,
|
|
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
|
|
116
|
-
not just a storage location: a
|
|
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
|
|
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
|
|
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
|
|
210
|
-
|
|
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
|
|
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`)
|
|
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.
|
|
528
|
-
| Tests |
|
|
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
|
|
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
|
package/dist/claude/updater.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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":"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"}
|
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,
|
|
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
|
|
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: `
|
|
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
|
|
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.
|
|
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
|
|
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) =>
|
|
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 = [...
|
|
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);
|