@djolex999/vir-cli 0.15.0 → 0.17.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 +33 -2
- package/dist/cli/initConfig.js +12 -3
- package/dist/cli/initConfig.js.map +1 -1
- package/dist/cli/queries.js +44 -0
- package/dist/cli/queries.js.map +1 -0
- package/dist/cli/reconcile.js +15 -2
- package/dist/cli/reconcile.js.map +1 -1
- package/dist/cli.js +107 -16
- package/dist/cli.js.map +1 -1
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/cost/log.js.map +1 -1
- package/dist/cost/pricing.js.map +1 -1
- package/dist/cost/report.js +8 -5
- package/dist/cost/report.js.map +1 -1
- package/dist/diagnostics/doctor.js +79 -1
- package/dist/diagnostics/doctor.js.map +1 -1
- package/dist/mcp/server.js +19 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/pipeline/claudeCli.js +186 -0
- package/dist/pipeline/claudeCli.js.map +1 -0
- package/dist/pipeline/distiller.js +28 -5
- package/dist/pipeline/distiller.js.map +1 -1
- package/dist/pipeline/projects.js +4 -0
- package/dist/pipeline/projects.js.map +1 -1
- package/dist/pipeline/run.js +57 -3
- package/dist/pipeline/run.js.map +1 -1
- package/dist/search/queryLog.js +123 -0
- package/dist/search/queryLog.js.map +1 -0
- package/dist/search/retriever.js +25 -8
- package/dist/search/retriever.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -253,7 +253,10 @@ sources 4 · via embedding · searched 126
|
|
|
253
253
|
- Node.js 20+
|
|
254
254
|
- Claude Code (sessions at `~/.claude/projects/`)
|
|
255
255
|
- Obsidian vault
|
|
256
|
-
-
|
|
256
|
+
- A distill provider — any one of:
|
|
257
|
+
- Anthropic API key (predictable per-session cost, no effect on your Claude Code limits)
|
|
258
|
+
- Your Claude Code subscription (`provider: "claude-cli"` — free and keyless; distills consume your Claude Code usage limits)
|
|
259
|
+
- Kie.ai API key (~72% cheaper API, third-party proxy)
|
|
257
260
|
- Optional: Ollama + `nomic-embed-text` for semantic search
|
|
258
261
|
|
|
259
262
|
## Cost
|
|
@@ -261,6 +264,18 @@ sources 4 · via embedding · searched 126
|
|
|
261
264
|
Vir runs two API calls per session: a Haiku classify (cheap) and a distill
|
|
262
265
|
(the main cost). Cost depends on session size and your provider.
|
|
263
266
|
|
|
267
|
+
### The zero-dollar option: `claude-cli`
|
|
268
|
+
|
|
269
|
+
With `provider: "claude-cli"` vir shells out to your installed `claude`
|
|
270
|
+
binary instead of calling an API — no key, no per-session dollars. The
|
|
271
|
+
trade: every distill consumes your Claude Code subscription quota (the same
|
|
272
|
+
limits your interactive sessions use), and that quota has no meter. vir
|
|
273
|
+
therefore caps claude-cli runs at 25 sessions per run (the rest are picked
|
|
274
|
+
up next cycle), halts immediately if your subscription limit is hit (with
|
|
275
|
+
the reset time; nothing is retried against the wall), and records these
|
|
276
|
+
calls in `cost.log` with cost marked not-applicable — never a fake $0.00.
|
|
277
|
+
The API path remains the default.
|
|
278
|
+
|
|
264
279
|
### Real cost shape (measured on 226 historical sessions via Kie)
|
|
265
280
|
|
|
266
281
|
| Metric | Sonnet | Haiku |
|
|
@@ -337,6 +352,7 @@ with your distro, init system, and Node version.
|
|
|
337
352
|
| `vir projects exclude <p>` | free | Stop tracking (existing notes untouched) |
|
|
338
353
|
| `vir cost` | free | API cost report (total/median/p90/top) |
|
|
339
354
|
| `vir query "<question>"` | cheap | Semantic search your vault |
|
|
355
|
+
| `vir queries` | free | Retrieval report: method split, degraded rate, dead-weight notes |
|
|
340
356
|
| `vir compose "<topic>"` | $$ | Synthesize a topic page from related notes |
|
|
341
357
|
| `vir summarize <project>` | cheap | Cross-session project synthesis |
|
|
342
358
|
| `vir summarize --week` | cheap | Period summary of the week's notes |
|
|
@@ -421,7 +437,7 @@ Located at `~/.vir/config.json`.
|
|
|
421
437
|
| `outputDir` | `vir` | Subdir inside vault |
|
|
422
438
|
| `claudeProjectsDir` | `~/.claude/projects` | Claude Code sessions |
|
|
423
439
|
| `cadenceHours` | `3` | Daemon run frequency (hours) |
|
|
424
|
-
| `provider` | `anthropic` | `anthropic`
|
|
440
|
+
| `provider` | `anthropic` | `anthropic` \| `claude-cli` (subscription, keyless) \| `kie` |
|
|
425
441
|
| `anthropicApiKey` | (unset) | Required if `provider=anthropic` |
|
|
426
442
|
| `kieApiKey` | (unset) | Required if `provider=kie` |
|
|
427
443
|
| `filterThreshold` | `0.4` | Heuristic pre-filter (0..1) |
|
|
@@ -432,6 +448,7 @@ Located at `~/.vir/config.json`.
|
|
|
432
448
|
| `projects` | (unset) | Per-project `include`/`exclude` map; absent = undecided |
|
|
433
449
|
| `filterToolCalls` | `moderate` | Tool-output filtering: `aggressive` \| `moderate` \| `off` |
|
|
434
450
|
| `retrievalDiversity`| `0.3` | MMR diversity (0..1) |
|
|
451
|
+
| `logQueries` | `true` | Log retrievals to `~/.vir/queries.jsonl`; `false` = off |
|
|
435
452
|
| `embeddingProvider` | (unset) | `ollama` \| `local` \| `none`; unset = auto-detect |
|
|
436
453
|
| `models.classify` | `claude-haiku-4-5-20251001` | Classify model |
|
|
437
454
|
| `models.distill` | `claude-sonnet-5` | Distill model for decision-heavy and large sessions |
|
|
@@ -464,8 +481,22 @@ vault/vir/
|
|
|
464
481
|
~/.vir/vir.db # SQLite (hashes, embeddings, content)
|
|
465
482
|
~/.vir/cost.log # per-call cost records (JSONL)
|
|
466
483
|
~/.vir/daemon.log # daemon run log
|
|
484
|
+
~/.vir/queries.jsonl # retrieval log (JSONL, rotates at 5 MB, one .1 kept)
|
|
467
485
|
```
|
|
468
486
|
|
|
487
|
+
### Query logging
|
|
488
|
+
|
|
489
|
+
Every `vir query` and MCP `vir_query` retrieval appends one record to
|
|
490
|
+
`~/.vir/queries.jsonl`: the query text, which notes surfaced at what rank and
|
|
491
|
+
score, the search method (embedding vs TF-IDF fallback), and latency. It never
|
|
492
|
+
records the synthesized answer.
|
|
493
|
+
|
|
494
|
+
This log stays on your machine — it is **never transmitted anywhere**. It
|
|
495
|
+
exists so `vir queries` can tell you which notes actually earn their place in
|
|
496
|
+
retrieval (and which never surface), and it is the baseline for future ranking
|
|
497
|
+
improvements. Delete it any time; disable it with `"logQueries": false` in
|
|
498
|
+
`~/.vir/config.json`.
|
|
499
|
+
|
|
469
500
|
## Project status
|
|
470
501
|
|
|
471
502
|
| | |
|
package/dist/cli/initConfig.js
CHANGED
|
@@ -23,6 +23,14 @@ export function buildInitConfig(existing, a) {
|
|
|
23
23
|
distillPdfs: existing?.distillPdfs,
|
|
24
24
|
filterToolCalls: existing?.filterToolCalls,
|
|
25
25
|
retrievalDiversity: existing?.retrievalDiversity,
|
|
26
|
+
// Caught by the schema-enumerated survival test — the FOURTH silently
|
|
27
|
+
// dropped key (after bug #5, projects, logQueries). Never carried since
|
|
28
|
+
// 0.15.0: a configured embedding provider was reset to auto-detect on
|
|
29
|
+
// every re-init.
|
|
30
|
+
embeddingProvider: existing?.embeddingProvider,
|
|
31
|
+
// Wizard-silent key (0.16.0): without this carry-over a re-init would
|
|
32
|
+
// silently reset a user's logQueries:false back to the zod default.
|
|
33
|
+
logQueries: existing?.logQueries,
|
|
26
34
|
projects: { ...existing?.projects, ...a.projects },
|
|
27
35
|
notifications: existing?.notifications,
|
|
28
36
|
workflowTranscripts: existing?.workflowTranscripts,
|
|
@@ -32,10 +40,11 @@ export function buildInitConfig(existing, a) {
|
|
|
32
40
|
distill: a.distillModel,
|
|
33
41
|
// New installs get hybrid routing out of the box: route routine sessions
|
|
34
42
|
// to Haiku, keep the chosen distill model for decision/large ones.
|
|
43
|
+
// claude-cli shares the anthropic id set (full ids pin via --model).
|
|
35
44
|
distillFast: existing?.models?.distillFast ??
|
|
36
|
-
(a.provider === "
|
|
37
|
-
? "claude-haiku-4-5
|
|
38
|
-
: "claude-haiku-4-5"),
|
|
45
|
+
(a.provider === "kie"
|
|
46
|
+
? "claude-haiku-4-5"
|
|
47
|
+
: "claude-haiku-4-5-20251001"),
|
|
39
48
|
...(existing?.models?.distillThreshold != null
|
|
40
49
|
? { distillThreshold: existing.models.distillThreshold }
|
|
41
50
|
: {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initConfig.js","sourceRoot":"","sources":["../../src/cli/initConfig.ts"],"names":[],"mappings":"AAuBA,iEAAiE;AACjE,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAC7B,QAAuB,EACvB,CAAc;IAEd,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,0EAA0E;QAC1E,4EAA4E;QAC5E,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,QAAQ,EAAE,eAAe;QAC/D,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,QAAQ,EAAE,SAAS;QAC7C,YAAY,EAAE,QAAQ,EAAE,YAAY;QACpC,SAAS,EAAE,QAAQ,EAAE,SAAS;QAC9B,OAAO,EAAE,QAAQ,EAAE,OAAO;QAC1B,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,eAAe,EAAE,QAAQ,EAAE,eAAe;QAC1C,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,WAAW,EAAE,QAAQ,EAAE,WAAW;QAClC,eAAe,EAAE,QAAQ,EAAE,eAAe;QAC1C,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB;QAChD,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;QAClD,aAAa,EAAE,QAAQ,EAAE,aAAa;QACtC,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;QAClD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,QAAQ,EAAE,gBAAgB;QAClE,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,aAAa;YACzB,OAAO,EAAE,CAAC,CAAC,YAAY;YACvB,yEAAyE;YACzE,mEAAmE;YACnE,WAAW,EACT,QAAQ,EAAE,MAAM,EAAE,WAAW;gBAC7B,CAAC,CAAC,CAAC,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"initConfig.js","sourceRoot":"","sources":["../../src/cli/initConfig.ts"],"names":[],"mappings":"AAuBA,iEAAiE;AACjE,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAC7B,QAAuB,EACvB,CAAc;IAEd,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,0EAA0E;QAC1E,4EAA4E;QAC5E,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,QAAQ,EAAE,eAAe;QAC/D,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,QAAQ,EAAE,SAAS;QAC7C,YAAY,EAAE,QAAQ,EAAE,YAAY;QACpC,SAAS,EAAE,QAAQ,EAAE,SAAS;QAC9B,OAAO,EAAE,QAAQ,EAAE,OAAO;QAC1B,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,eAAe,EAAE,QAAQ,EAAE,eAAe;QAC1C,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,WAAW,EAAE,QAAQ,EAAE,WAAW;QAClC,eAAe,EAAE,QAAQ,EAAE,eAAe;QAC1C,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB;QAChD,sEAAsE;QACtE,wEAAwE;QACxE,sEAAsE;QACtE,iBAAiB;QACjB,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB;QAC9C,sEAAsE;QACtE,oEAAoE;QACpE,UAAU,EAAE,QAAQ,EAAE,UAAU;QAChC,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;QAClD,aAAa,EAAE,QAAQ,EAAE,aAAa;QACtC,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;QAClD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,QAAQ,EAAE,gBAAgB;QAClE,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,aAAa;YACzB,OAAO,EAAE,CAAC,CAAC,YAAY;YACvB,yEAAyE;YACzE,mEAAmE;YACnE,qEAAqE;YACrE,WAAW,EACT,QAAQ,EAAE,MAAM,EAAE,WAAW;gBAC7B,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK;oBACnB,CAAC,CAAC,kBAAkB;oBACpB,CAAC,CAAC,2BAA2B,CAAC;YAClC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,IAAI,IAAI;gBAC5C,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE;gBACxD,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Below this many logged queries, "never surfaced" is dominated by "never
|
|
2
|
+
// asked about" — a handful of queries can only touch a handful of notes, so
|
|
3
|
+
// presenting the rest as dead weight is noise dressed as signal. 20 queries
|
|
4
|
+
// at topK 5–8 give every genuinely useful note ~100+ chances to surface.
|
|
5
|
+
export const MIN_DEAD_WEIGHT_SAMPLE = 20;
|
|
6
|
+
export function buildQueriesReport(records, allSlugs, topN = 10) {
|
|
7
|
+
const surfaced = new Map();
|
|
8
|
+
let embedding = 0;
|
|
9
|
+
let tfidf = 0;
|
|
10
|
+
let degraded = 0;
|
|
11
|
+
for (const r of records) {
|
|
12
|
+
if (r.method === "embedding")
|
|
13
|
+
embedding += 1;
|
|
14
|
+
else
|
|
15
|
+
tfidf += 1;
|
|
16
|
+
if (r.degraded)
|
|
17
|
+
degraded += 1;
|
|
18
|
+
for (const h of r.hits) {
|
|
19
|
+
const s = surfaced.get(h.slug) ?? { count: 0, rankSum: 0 };
|
|
20
|
+
s.count += 1;
|
|
21
|
+
s.rankSum += h.rank;
|
|
22
|
+
surfaced.set(h.slug, s);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const topNotes = [...surfaced.entries()]
|
|
26
|
+
.map(([slug, s]) => ({
|
|
27
|
+
slug,
|
|
28
|
+
count: s.count,
|
|
29
|
+
avgRank: Math.round((s.rankSum / s.count) * 100) / 100,
|
|
30
|
+
}))
|
|
31
|
+
.sort((a, b) => b.count - a.count || a.avgRank - b.avgRank)
|
|
32
|
+
.slice(0, topN);
|
|
33
|
+
return {
|
|
34
|
+
total: records.length,
|
|
35
|
+
byMethod: { embedding, tfidf },
|
|
36
|
+
degraded,
|
|
37
|
+
degradedRate: records.length === 0 ? 0 : degraded / records.length,
|
|
38
|
+
topNotes,
|
|
39
|
+
deadWeight: records.length < MIN_DEAD_WEIGHT_SAMPLE
|
|
40
|
+
? null
|
|
41
|
+
: allSlugs.filter((s) => !surfaced.has(s)),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/cli/queries.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAczC,MAAM,UAAU,kBAAkB,CAChC,OAAyB,EACzB,QAAkB,EAClB,IAAI,GAAG,EAAE;IAET,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8C,CAAC;IACvE,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;YAAE,SAAS,IAAI,CAAC,CAAC;;YACxC,KAAK,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,CAAC,QAAQ;YAAE,QAAQ,IAAI,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3D,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACb,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC;YACpB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnB,IAAI;QACJ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;KACvD,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;SAC1D,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAElB,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;QAC9B,QAAQ;QACR,YAAY,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM;QAClE,QAAQ;QACR,UAAU,EACR,OAAO,CAAC,MAAM,GAAG,sBAAsB;YACrC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
package/dist/cli/reconcile.js
CHANGED
|
@@ -5,6 +5,7 @@ import { stdin, stdout } from "node:process";
|
|
|
5
5
|
import { readCostLog } from "../cost/log.js";
|
|
6
6
|
import { computeCost } from "../cost/pricing.js";
|
|
7
7
|
import { Distiller, normalizeModelName, resolveModelShorthand } from "../pipeline/distiller.js";
|
|
8
|
+
import { ClaudeCliLimitError } from "../pipeline/claudeCli.js";
|
|
8
9
|
import { scoreSession } from "../pipeline/filter.js";
|
|
9
10
|
import { acquireLock, LockHeldError, releaseLock } from "../pipeline/lock.js";
|
|
10
11
|
import { parseSession } from "../pipeline/parser.js";
|
|
@@ -50,7 +51,8 @@ export function summarizeReconcileTargets(cfg, targets, costSessionIds, forceDis
|
|
|
50
51
|
if (hadCostRecord)
|
|
51
52
|
collateralCount += 1;
|
|
52
53
|
let estimatedCost = 0;
|
|
53
|
-
|
|
54
|
+
// Subscription path: retries cost quota, not dollars — estimate stays 0.
|
|
55
|
+
if (cfg.provider !== "claude-cli" && existsSync(t.path)) {
|
|
54
56
|
try {
|
|
55
57
|
const parsed = parseSession(t.path, t.hash);
|
|
56
58
|
const classifyIn = Math.ceil(scrub(parsed.rawSummary).length / CHARS_PER_TOKEN);
|
|
@@ -116,7 +118,10 @@ export async function runReconcile(cfg, opts = {}) {
|
|
|
116
118
|
// no content from.
|
|
117
119
|
const costSessionIds = new Set();
|
|
118
120
|
for (const r of readCostLog()) {
|
|
119
|
-
if (r.stage === "distill" &&
|
|
121
|
+
if (r.stage === "distill" &&
|
|
122
|
+
r.session &&
|
|
123
|
+
r.estimated_cost_usd !== null &&
|
|
124
|
+
r.estimated_cost_usd > 0) {
|
|
120
125
|
costSessionIds.add(r.session);
|
|
121
126
|
}
|
|
122
127
|
}
|
|
@@ -223,6 +228,14 @@ export async function runReconcile(cfg, opts = {}) {
|
|
|
223
228
|
await new Promise((r) => setTimeout(r, 2000));
|
|
224
229
|
}
|
|
225
230
|
catch (err) {
|
|
231
|
+
// A subscription limit halts reconcile exactly like the run loop:
|
|
232
|
+
// one wall, not N failures — and force-retries against it would burn
|
|
233
|
+
// quota for nothing. Remaining targets stay eligible for the next pass.
|
|
234
|
+
if (err instanceof ClaudeCliLimitError) {
|
|
235
|
+
ui.row(ui.errorColor(ui.CROSS), ui.text(err.message));
|
|
236
|
+
process.exitCode = 1;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
226
239
|
// A retry that fails again must leave the row as-is (content still
|
|
227
240
|
// null/empty) so the next reconcile pass can catch it. Do NOT mark
|
|
228
241
|
// it processed-with-empty.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/cli/reconcile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/cli/reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,OAAO,GAER,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AASvC,8EAA8E;AAC9E,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,0DAA0D;AAC1D,uEAAuE;AACvE,sDAAsD;AACtD,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,4BAA4B;AAC5B,8EAA8E;AAC9E,8EAA8E;AAC9E,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CACpC,IAAkB,EAClB,KAAK,GAAG,KAAK;IAEb,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI;YACjB,CAAC,CAAC,OAAO,KAAK,EAAE;YAChB,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC,CACtD,CAAC;AACJ,CAAC;AASD,+EAA+E;AAC/E,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB,CACvC,GAAW,EACX,OAAqB,EACrB,cAA2B,EAC3B,iBAA0B;IAM1B,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,kBAAkB,CACrC,qBAAqB,CAAC,iBAAiB,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9D,GAAG,CAAC,QAAQ,CACb,CAAC;IACF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,MAAM,IAAI,GAA6B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,aAAa;YAAE,eAAe,IAAI,CAAC,CAAC;QAExC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,yEAAyE;QACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,eAAe,CAClD,CAAC;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,KAAK,CACH,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,CACrE,CAAC,MAAM,GAAG,eAAe,CAC3B,CAAC;gBACF,aAAa;oBACX,WAAW,CACT,GAAG,CAAC,QAAQ,EACZ,aAAa,EACb,UAAU,EACV,sBAAsB,EACtB,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,YAAY,CACjB;wBACD,WAAW,CACT,GAAG,CAAC,QAAQ,EACZ,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,YAAY,CACjB,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;QACH,CAAC;QACD,SAAS,IAAI,aAAa,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS;YACT,aAAa;YACb,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,SAAiB;IACpE,EAAE,CAAC,GAAG,CACJ;QACE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;QAChE,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE;KAC9D,EACD,EAAE,KAAK,EAAE,yBAAyB,EAAE,CACrC,CAAC;IACF,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;SAC1D,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAW,EACX,OAAyB,EAAE;IAE3B,uEAAuE;IACvE,qEAAqE;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,WAAW,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC9D,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,MAAM,OAAO,GAAG,sBAAsB,CACpC,EAAE,CAAC,oBAAoB,EAAE,EACzB,IAAI,CAAC,KAAK,KAAK,IAAI,CACpB,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EACpB,EAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAC5D,CAAC;YACF,OAAO;QACT,CAAC;QAED,0EAA0E;QAC1E,0EAA0E;QAC1E,mBAAmB;QACnB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,EAAE,CAAC;YAC9B,IACE,CAAC,CAAC,KAAK,KAAK,SAAS;gBACrB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,kBAAkB,KAAK,IAAI;gBAC7B,CAAC,CAAC,kBAAkB,GAAG,CAAC,EACxB,CAAC;gBACD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,yBAAyB,CACpE,GAAG,EACH,OAAO,EACP,cAAc,CACf,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5D,EAAE,CAAC,IAAI,CACL,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAChH,CAAC;QACJ,CAAC;QACD,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,OAAO,EAAE,CAAC;QACb,EAAE,CAAC,OAAO,CAAC;YACT,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE;YACnD,iBAAiB,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE;YACrE,uBAAuB,EAAE;gBACvB,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;aAC9C;SACF,CAAC,CAAC;QACH,EAAE,CAAC,OAAO,EAAE,CAAC;QAEb,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,EAAE,CAAC,IAAI,CACL,EAAE,CAAC,GAAG,CACJ,+FAA+F,CAChG,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,WAAW,IAAI,CAAC,CAAC;gBACjB,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EACtB,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC3D,CAAC;gBACF,SAAS;YACX,CAAC;YACD,sEAAsE;YACtE,qEAAqE;YACrE,qEAAqE;YACrE,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;wBAC3C,8DAA8D;wBAC9D,+DAA+D;wBAC/D,mDAAmD;wBACnD,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBACtB,SAAS,IAAI,CAAC,CAAC;wBACf,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EACpB,EAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,CACjD,CAAC;wBACF,SAAS;oBACX,CAAC;oBACD,WAAW,IAAI,CAAC,CAAC;oBACjB,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EACvB,EAAE,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAC1D,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAClB,8DAA8D;oBAC9D,2CAA2C;oBAC3C,EAAE,CAAC,MAAM,CAAC;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,EAAE;qBACd,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjD,MAAM,UAAU,GAAG,eAAe,CAChC,MAAM,CAAC,cAAc,EACrB,GAAG,CAAC,eAAe,CACpB,CAAC;gBACF,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,MAAM,EACN,eAAe,EACf,eAAe,CAChB,CAAC;gBACF,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,gEAAgE;oBAChE,EAAE,CAAC,MAAM,CAAC;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,EAAE;qBACd,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,EAAE,CAAC,MAAM,CAAC;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,OAAO;oBAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;oBACtB,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;oBACtC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;oBAChC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;oBACpC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,UAAU;oBAC1C,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAC;gBACH,SAAS,IAAI,CAAC,CAAC;gBACf,EAAE,CAAC,WAAW,CACZ,IAAI,CAAC,cAAc,CAAC,QAAQ,EAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,CAC1B,CAAC;gBACF,kEAAkE;gBAClE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,qEAAqE;gBACrE,wEAAwE;gBACxE,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;oBACvC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;oBACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACrB,MAAM;gBACR,CAAC;gBACD,mEAAmE;gBACnE,mEAAmE;gBACnE,2BAA2B;gBAC3B,WAAW,IAAI,CAAC,CAAC;gBACjB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClD,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EACvB,EAAE,CAAC,IAAI,CAAC,iBAAiB,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,OAAO,EAAE,CAAC;QACb,EAAE,CAAC,OAAO,CAAC;YACT,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE;YAClD,cAAc,EAAE;gBACd,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;aAChD;YACD,cAAc,EAAE;gBACd,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;aAC1C;SACF,CAAC,CAAC;QACH,EAAE,CAAC,OAAO,EAAE,CAAC;QAEb,oEAAoE;QACpE,wEAAwE;QACxE,qEAAqE;QACrE,wEAAwE;QACxE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,EAAE,CAAC,IAAI,CACL,KAAK,CAAC,GAAG,CACP,KAAK,WAAW,yFAAyF,CAC1G,CACF,CAAC;QACJ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,SAAS;YAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -31,7 +31,9 @@ import { countByCategory, summarizeAll, summarizeProject, } from "./pipeline/sum
|
|
|
31
31
|
import { buildPeriodPrompt, estimatePeriodCostTokens, periodLabel, periodRange, selectNotesInPeriod, summarizePeriod, } from "./pipeline/periodSummary.js";
|
|
32
32
|
import { embedNoteWithProvider, resolveEmbeddingProvider, } from "./search/provider.js";
|
|
33
33
|
import { acquireLock, LockHeldError, releaseLock } from "./pipeline/lock.js";
|
|
34
|
-
import {
|
|
34
|
+
import { loadIndex, searchWithOutcome, vaultRoot } from "./search/retriever.js";
|
|
35
|
+
import { QUERY_LOG_PATH, readQueryLog, recordQueryEvent, } from "./search/queryLog.js";
|
|
36
|
+
import { MIN_DEAD_WEIGHT_SAMPLE, buildQueriesReport } from "./cli/queries.js";
|
|
35
37
|
import { buildQueryResults, errorPayload } from "./output/json.js";
|
|
36
38
|
import { synthesize } from "./search/synthesizer.js";
|
|
37
39
|
import { runMcpServer } from "./mcp/server.js";
|
|
@@ -151,10 +153,21 @@ program
|
|
|
151
153
|
// bug that hid Kie's 200-with-error responses pre-0.7.2.
|
|
152
154
|
if (summary.errored > 0 ||
|
|
153
155
|
summary.articlesErrored > 0 ||
|
|
154
|
-
summary.pdfsErrored > 0
|
|
156
|
+
summary.pdfsErrored > 0 ||
|
|
157
|
+
// A limit halt is an incomplete run — schedulers must not read it
|
|
158
|
+
// as success. The message itself already printed from the loop.
|
|
159
|
+
summary.limitHalted !== null) {
|
|
155
160
|
process.exitCode = 1;
|
|
156
161
|
}
|
|
157
162
|
}));
|
|
163
|
+
// Dollar-estimate label for the ACTIVE provider. On the subscription path the
|
|
164
|
+
// honest label is quota, never "$0.00" — a zero would read as "free API call"
|
|
165
|
+
// and hide that the run consumes the user's Claude Code limits.
|
|
166
|
+
function estCostLabel(cfg, model, inputTokens, outputTokens) {
|
|
167
|
+
if (cfg.provider === "claude-cli")
|
|
168
|
+
return "subscription quota (no $)";
|
|
169
|
+
return ui.formatUsd(computeCost(cfg.provider, model, inputTokens, outputTokens, cfg.pricing, cfg.kieTopUpTier));
|
|
170
|
+
}
|
|
158
171
|
async function confirmCostIfNeeded(cfg, newCount) {
|
|
159
172
|
if (newCount <= 20)
|
|
160
173
|
return true;
|
|
@@ -199,6 +212,9 @@ program
|
|
|
199
212
|
const report = buildReport(records);
|
|
200
213
|
ui.stat("window", since);
|
|
201
214
|
ui.stat("llm calls", report.recordCount);
|
|
215
|
+
if (report.subscriptionCalls > 0) {
|
|
216
|
+
ui.stat("subscription", `${report.subscriptionCalls} claude-cli calls (quota, no $ — excluded from totals)`);
|
|
217
|
+
}
|
|
202
218
|
ui.stat("sessions", report.sessionCount);
|
|
203
219
|
ui.stat("total", ui.formatUsd(report.total), ui.warn);
|
|
204
220
|
ui.stat("median/session", ui.formatUsd(report.median));
|
|
@@ -217,6 +233,54 @@ program
|
|
|
217
233
|
ui.line(` ${ui.dim(ui.BULLET)} ${ui.text(label.padEnd(42))} ${ui.dim(`${s.calls}×`)} ${ui.warn(ui.formatUsd(s.cost))}`);
|
|
218
234
|
}
|
|
219
235
|
}));
|
|
236
|
+
program
|
|
237
|
+
.command("queries")
|
|
238
|
+
.description("Report on logged retrievals from ~/.vir/queries.jsonl")
|
|
239
|
+
.option("--json", "Emit the full report as JSON for scripting")
|
|
240
|
+
.option("--top <n>", "How many top-surfaced notes to show (default 10)", "10")
|
|
241
|
+
.action(runAction(async (opts) => {
|
|
242
|
+
const cfg = loadConfig();
|
|
243
|
+
const topN = Math.max(1, Number(opts.top ?? "10") || 10);
|
|
244
|
+
const records = readQueryLog();
|
|
245
|
+
// loadIndex walks exactly the retrievable notes (skips summaries/,
|
|
246
|
+
// .rejected/, archived/, index/log) — the honest denominator for
|
|
247
|
+
// dead weight.
|
|
248
|
+
const allSlugs = loadIndex(cfg).map((d) => d.relPath.replace(/\.md$/, ""));
|
|
249
|
+
const report = buildQueriesReport(records, allSlugs, topN);
|
|
250
|
+
if (opts.json) {
|
|
251
|
+
// NOT a plugin contract — scripting output like `vir projects --json`.
|
|
252
|
+
process.stdout.write(JSON.stringify(report) + "\n");
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
ui.header("queries");
|
|
256
|
+
ui.blank();
|
|
257
|
+
if (report.total === 0) {
|
|
258
|
+
ui.row(ui.warn(ui.WARN_GLYPH), ui.text("no logged queries yet"));
|
|
259
|
+
ui.line(ui.dim(` ${QUERY_LOG_PATH} fills as you run \`vir query\` or use the MCP tools`));
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
ui.stat("queries", report.total);
|
|
263
|
+
ui.stat("method", `${report.byMethod.embedding} embedding · ${report.byMethod.tfidf} tfidf`);
|
|
264
|
+
ui.stat("degraded", `${report.degraded} (${Math.round(report.degradedRate * 100)}%)`, report.degraded > 0 ? ui.warn : undefined);
|
|
265
|
+
ui.blank();
|
|
266
|
+
ui.line(ui.dim(` top ${Math.min(topN, report.topNotes.length)} surfaced notes`));
|
|
267
|
+
for (const n of report.topNotes) {
|
|
268
|
+
ui.line(` ${ui.dim(ui.BULLET)} ${ui.text(n.slug.padEnd(52))} ${ui.dim(`${n.count}× · avg rank ${n.avgRank}`)}`);
|
|
269
|
+
}
|
|
270
|
+
ui.blank();
|
|
271
|
+
if (report.deadWeight === null) {
|
|
272
|
+
ui.line(ui.dim(` dead weight: suppressed — ${report.total} quer${report.total === 1 ? "y" : "ies"} logged, ${MIN_DEAD_WEIGHT_SAMPLE} needed before "never surfaced" means unused rather than unasked`));
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
ui.line(ui.dim(` dead weight: ${report.deadWeight.length} of ${allSlugs.length} notes never surfaced`));
|
|
276
|
+
for (const slug of report.deadWeight.slice(0, topN)) {
|
|
277
|
+
ui.line(` ${ui.dim(ui.BULLET)} ${ui.muted(slug)}`);
|
|
278
|
+
}
|
|
279
|
+
if (report.deadWeight.length > topN) {
|
|
280
|
+
ui.line(ui.dim(` … ${report.deadWeight.length - topN} more (\`vir queries --json\` for all)`));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}));
|
|
220
284
|
program
|
|
221
285
|
.command("calibrate <sessionId>")
|
|
222
286
|
.description("Distill ONE session to stdout for A/B model comparison — never writes vault or DB")
|
|
@@ -563,11 +627,11 @@ program
|
|
|
563
627
|
const counts = countByCategory(notes);
|
|
564
628
|
const prompt = buildPeriodPrompt(label, notes, counts);
|
|
565
629
|
const { inputTokens, outputTokens } = estimatePeriodCostTokens(prompt);
|
|
566
|
-
const estCost =
|
|
630
|
+
const estCost = estCostLabel(cfg, model, inputTokens, outputTokens);
|
|
567
631
|
ui.summary({
|
|
568
632
|
notes: { value: notes.length, color: ui.info },
|
|
569
633
|
model: { value: model, color: ui.accent },
|
|
570
|
-
"est. cost": { value:
|
|
634
|
+
"est. cost": { value: estCost, color: ui.warn },
|
|
571
635
|
});
|
|
572
636
|
ui.divider();
|
|
573
637
|
if (opts.dryRun === true) {
|
|
@@ -576,7 +640,7 @@ program
|
|
|
576
640
|
}
|
|
577
641
|
if (opts.yes !== true) {
|
|
578
642
|
const proceed = await confirm({
|
|
579
|
-
message: `synthesize with ${model} (~${
|
|
643
|
+
message: `synthesize with ${model} (~${estCost})?`,
|
|
580
644
|
default: true,
|
|
581
645
|
});
|
|
582
646
|
if (!proceed) {
|
|
@@ -832,8 +896,18 @@ async function runQueryJson(question, limit) {
|
|
|
832
896
|
}
|
|
833
897
|
const db = new StateDb();
|
|
834
898
|
try {
|
|
835
|
-
const
|
|
836
|
-
const
|
|
899
|
+
const t0 = Date.now();
|
|
900
|
+
const outcome = await searchWithOutcome(cfg, db, question, limit);
|
|
901
|
+
recordQueryEvent({
|
|
902
|
+
logQueries: cfg.logQueries,
|
|
903
|
+
source: "cli",
|
|
904
|
+
query: question,
|
|
905
|
+
type: "all",
|
|
906
|
+
hits: outcome.hits,
|
|
907
|
+
search: outcome,
|
|
908
|
+
latencyMs: Date.now() - t0,
|
|
909
|
+
});
|
|
910
|
+
const results = buildQueryResults(outcome.hits, vaultRoot(cfg), cfg.topicsDir);
|
|
837
911
|
process.stdout.write(JSON.stringify(results) + "\n");
|
|
838
912
|
}
|
|
839
913
|
catch (err) {
|
|
@@ -869,6 +943,7 @@ program
|
|
|
869
943
|
// served the hits.
|
|
870
944
|
const sp = ui.spinner("searching vault").start();
|
|
871
945
|
let outcome;
|
|
946
|
+
const t0 = Date.now();
|
|
872
947
|
try {
|
|
873
948
|
outcome = await searchWithOutcome(cfg, db, question, 8);
|
|
874
949
|
sp.stop();
|
|
@@ -877,6 +952,15 @@ program
|
|
|
877
952
|
sp.fail(ui.errorColor(err.message));
|
|
878
953
|
return;
|
|
879
954
|
}
|
|
955
|
+
recordQueryEvent({
|
|
956
|
+
logQueries: cfg.logQueries,
|
|
957
|
+
source: "cli",
|
|
958
|
+
query: question,
|
|
959
|
+
type: "all",
|
|
960
|
+
hits: outcome.hits,
|
|
961
|
+
search: outcome,
|
|
962
|
+
latencyMs: Date.now() - t0,
|
|
963
|
+
});
|
|
880
964
|
const hits = outcome.hits;
|
|
881
965
|
if (outcome.degraded) {
|
|
882
966
|
ui.row(ui.warn(ui.WARN_GLYPH), ui.text(`embedding search failed — results are TF-IDF fallback (${outcome.embedError})`));
|
|
@@ -959,11 +1043,11 @@ program
|
|
|
959
1043
|
ui.divider();
|
|
960
1044
|
const model = normalizeModelName(resolveModelShorthand(opts.model ?? cfg.models.distill), cfg.provider);
|
|
961
1045
|
const { inputTokens, outputTokens } = estimateComposeCostTokens(topic, sources);
|
|
962
|
-
const estCost =
|
|
1046
|
+
const estCost = estCostLabel(cfg, model, inputTokens, outputTokens);
|
|
963
1047
|
ui.summary({
|
|
964
1048
|
sources: { value: sources.length, color: ui.info },
|
|
965
1049
|
model: { value: model, color: ui.accent },
|
|
966
|
-
"est. cost": { value:
|
|
1050
|
+
"est. cost": { value: estCost, color: ui.warn },
|
|
967
1051
|
});
|
|
968
1052
|
ui.divider();
|
|
969
1053
|
if (opts.dryRun) {
|
|
@@ -972,7 +1056,7 @@ program
|
|
|
972
1056
|
}
|
|
973
1057
|
if (opts.yes !== true) {
|
|
974
1058
|
const proceed = await confirm({
|
|
975
|
-
message: `synthesize with ${model} (~${
|
|
1059
|
+
message: `synthesize with ${model} (~${estCost})?`,
|
|
976
1060
|
default: true,
|
|
977
1061
|
});
|
|
978
1062
|
if (!proceed) {
|
|
@@ -1004,7 +1088,7 @@ program
|
|
|
1004
1088
|
title: { value: result.title, color: ui.text },
|
|
1005
1089
|
sources: { value: result.sourceCount, color: ui.info },
|
|
1006
1090
|
confidence: { value: result.confidence.toFixed(2), color: ui.info },
|
|
1007
|
-
...(rec
|
|
1091
|
+
...(rec && rec.estimated_cost_usd !== null
|
|
1008
1092
|
? { cost: { value: ui.formatUsd(rec.estimated_cost_usd), color: ui.warn } }
|
|
1009
1093
|
: {}),
|
|
1010
1094
|
});
|
|
@@ -1403,11 +1487,15 @@ async function cmdInit() {
|
|
|
1403
1487
|
default: existing?.provider ?? "anthropic",
|
|
1404
1488
|
choices: [
|
|
1405
1489
|
{
|
|
1406
|
-
name: "Anthropic
|
|
1490
|
+
name: "Anthropic (API key — predictable per-session cost, no effect on your Claude Code limits)",
|
|
1407
1491
|
value: "anthropic",
|
|
1408
1492
|
},
|
|
1409
1493
|
{
|
|
1410
|
-
name: "
|
|
1494
|
+
name: "Claude Code (subscription — free and keyless; distills consume your Claude Code usage limits)",
|
|
1495
|
+
value: "claude-cli",
|
|
1496
|
+
},
|
|
1497
|
+
{
|
|
1498
|
+
name: "Kie.ai (~72% cheaper API, third-party proxy — you trade reliability for cost)",
|
|
1411
1499
|
value: "kie",
|
|
1412
1500
|
},
|
|
1413
1501
|
],
|
|
@@ -1431,11 +1519,14 @@ async function cmdInit() {
|
|
|
1431
1519
|
if (provider === "anthropic") {
|
|
1432
1520
|
anthropicApiKey = await promptSecret("Anthropic API key", existing?.anthropicApiKey ?? process.env.ANTHROPIC_API_KEY ?? undefined, (v) => (v.startsWith("sk-ant-") ? true : "key should start with sk-ant-"));
|
|
1433
1521
|
}
|
|
1434
|
-
else {
|
|
1522
|
+
else if (provider === "kie") {
|
|
1435
1523
|
kieApiKey = await promptSecret("Kie.ai API key", existing?.kieApiKey ?? process.env.KIE_API_KEY ?? undefined, (v) => (v.length > 10 ? true : "enter a valid Kie.ai API key"));
|
|
1436
1524
|
}
|
|
1525
|
+
// claude-cli: no credential of any kind — it uses the `claude` login.
|
|
1437
1526
|
// ── model pickers (provider-aware) ──────────────────────────────────────
|
|
1438
|
-
|
|
1527
|
+
// claude-cli accepts the same full Anthropic model ids (and pins them per
|
|
1528
|
+
// invocation via --model), so it shares the anthropic id set.
|
|
1529
|
+
const classifyChoices = provider !== "kie"
|
|
1439
1530
|
? [
|
|
1440
1531
|
{
|
|
1441
1532
|
name: "claude-haiku-4-5-20251001 (recommended)",
|
|
@@ -1454,7 +1545,7 @@ async function cmdInit() {
|
|
|
1454
1545
|
message: "Classify model (fast pass)",
|
|
1455
1546
|
choices: classifyChoices,
|
|
1456
1547
|
});
|
|
1457
|
-
const distillChoices = provider
|
|
1548
|
+
const distillChoices = provider !== "kie"
|
|
1458
1549
|
? [
|
|
1459
1550
|
{
|
|
1460
1551
|
name: "claude-sonnet-5 (recommended)",
|