opencode-rag-plugin 1.10.6 → 1.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/ReadMe.md +44 -6
  2. package/dist/api.d.ts +1 -0
  3. package/dist/api.js +1 -0
  4. package/dist/api.js.map +1 -1
  5. package/dist/chunker/image.d.ts +14 -0
  6. package/dist/chunker/image.js +356 -0
  7. package/dist/chunker/image.js.map +1 -0
  8. package/dist/chunker/loader.js +5 -0
  9. package/dist/chunker/loader.js.map +1 -1
  10. package/dist/cli.js +220 -2
  11. package/dist/cli.js.map +1 -1
  12. package/dist/core/config.d.ts +17 -0
  13. package/dist/core/config.js +30 -5
  14. package/dist/core/config.js.map +1 -1
  15. package/dist/core/interfaces.d.ts +12 -0
  16. package/dist/core/resolve-api-key.js +3 -0
  17. package/dist/core/resolve-api-key.js.map +1 -1
  18. package/dist/core/runtime-overrides.d.ts +6 -0
  19. package/dist/core/runtime-overrides.js +20 -1
  20. package/dist/core/runtime-overrides.js.map +1 -1
  21. package/dist/describer/describer.js +1 -1
  22. package/dist/describer/describer.js.map +1 -1
  23. package/dist/embedder/health.d.ts +18 -0
  24. package/dist/embedder/health.js +291 -0
  25. package/dist/embedder/health.js.map +1 -0
  26. package/dist/eval/index.d.ts +3 -0
  27. package/dist/eval/index.js +2 -0
  28. package/dist/eval/index.js.map +1 -1
  29. package/dist/eval/run-token-test.d.ts +7 -0
  30. package/dist/eval/run-token-test.js +288 -0
  31. package/dist/eval/run-token-test.js.map +1 -0
  32. package/dist/eval/token-analysis.d.ts +111 -0
  33. package/dist/eval/token-analysis.js +286 -0
  34. package/dist/eval/token-analysis.js.map +1 -0
  35. package/dist/eval/token-counter.d.ts +41 -0
  36. package/dist/eval/token-counter.js +102 -0
  37. package/dist/eval/token-counter.js.map +1 -0
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/indexer.d.ts +1 -1
  42. package/dist/indexer.js +65 -13
  43. package/dist/indexer.js.map +1 -1
  44. package/dist/opencode/tools.js +12 -5
  45. package/dist/opencode/tools.js.map +1 -1
  46. package/dist/plugin.js +71 -29
  47. package/dist/plugin.js.map +1 -1
  48. package/dist/retriever/keyword-index.d.ts +1 -0
  49. package/dist/retriever/keyword-index.js +11 -0
  50. package/dist/retriever/keyword-index.js.map +1 -1
  51. package/dist/retriever/retriever.d.ts +1 -0
  52. package/dist/retriever/retriever.js +49 -7
  53. package/dist/retriever/retriever.js.map +1 -1
  54. package/dist/tui.js +54 -5
  55. package/dist/tui.js.map +1 -1
  56. package/dist/web/api.d.ts +8 -0
  57. package/dist/web/api.js +81 -0
  58. package/dist/web/api.js.map +1 -1
  59. package/dist/web/server.js +31 -0
  60. package/dist/web/server.js.map +1 -1
  61. package/dist/web/ui/app.css +1 -0
  62. package/dist/web/ui/github-dark.css +118 -0
  63. package/dist/web/ui/highlight.min.js +1213 -0
  64. package/dist/web/ui/index.html +504 -125
  65. package/package.json +8 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/embedder/health.ts"],"names":[],"mappings":"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"}
@@ -3,3 +3,6 @@ export { RAG_TOOL_NAMES, isRagTool } from "./types.js";
3
3
  export { appendSessionEvent, readSessionEvents, listSessionIDs, listSessions, getSession, deleteSession, computeSummary, compareSessions, } from "./storage.js";
4
4
  export { createSessionLogger } from "./session-logger.js";
5
5
  export type { SessionLogger } from "./session-logger.js";
6
+ export { analyzeTokenUsage, compareTokenAnalyses, formatTokenReport, estimateContextTokens, projectTokenSavings, } from "./token-analysis.js";
7
+ export type { TokenAnalysis, PerQueryBreakdown } from "./token-analysis.js";
8
+ export { countTokens, countTokensBatch, sumTokens, estimateContextTokensFormatted, tokenizerMethod, } from "./token-counter.js";
@@ -1,4 +1,6 @@
1
1
  export { RAG_TOOL_NAMES, isRagTool } from "./types.js";
2
2
  export { appendSessionEvent, readSessionEvents, listSessionIDs, listSessions, getSession, deleteSession, computeSummary, compareSessions, } from "./storage.js";
3
3
  export { createSessionLogger } from "./session-logger.js";
4
+ export { analyzeTokenUsage, compareTokenAnalyses, formatTokenReport, estimateContextTokens, projectTokenSavings, } from "./token-analysis.js";
5
+ export { countTokens, countTokensBatch, sumTokens, estimateContextTokensFormatted, tokenizerMethod, } from "./token-counter.js";
4
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eval/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eval/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,8BAA8B,EAC9B,eAAe,GAChB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Integration test: Run real RAG pipeline against indexed codebase
3
+ * and produce a token usage report.
4
+ *
5
+ * Usage: node --import tsx src/eval/run-token-test.ts
6
+ */
7
+ export {};
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Integration test: Run real RAG pipeline against indexed codebase
3
+ * and produce a token usage report.
4
+ *
5
+ * Usage: node --import tsx src/eval/run-token-test.ts
6
+ */
7
+ import { writeFileSync } from "node:fs";
8
+ import path from "node:path";
9
+ import { loadConfig, DEFAULT_CONFIG } from "../core/config.js";
10
+ import { createEmbedder } from "../embedder/factory.js";
11
+ import { LanceDBStore } from "../vectorstore/lancedb.js";
12
+ import { retrieve } from "../retriever/retriever.js";
13
+ import { KeywordIndex } from "../retriever/keyword-index.js";
14
+ import { loadRuntimeOverrides, applyRuntimeOverrides } from "../core/runtime-overrides.js";
15
+ import { resolveApiKey } from "../core/resolve-api-key.js";
16
+ import { countTokens, tokenizerMethod } from "./token-counter.js";
17
+ const WORKTREE = process.cwd();
18
+ const STORE_PATH = path.join(WORKTREE, ".opencode", "rag_db");
19
+ const TOKENIZER = tokenizerMethod();
20
+ const QUERIES = [
21
+ "How does the retrieval pipeline work end-to-end?",
22
+ "How does the plugin auto-inject context into messages?",
23
+ "How does the keyword index combine with vector search?",
24
+ "Where is the embedder factory defined?",
25
+ "Where is the LanceDB store implementation?",
26
+ "Find all usages of the retrieve function",
27
+ "Find all usages of SearchResult type",
28
+ "How does the chunker factory register new languages?",
29
+ "What is the default minScore configuration?",
30
+ "How does the session logger capture token usage?",
31
+ ];
32
+ function getConfig() {
33
+ const configPath = path.join(WORKTREE, "opencode-rag.json");
34
+ let cfg;
35
+ try {
36
+ cfg = loadConfig(configPath);
37
+ }
38
+ catch {
39
+ cfg = DEFAULT_CONFIG;
40
+ }
41
+ const overrides = loadRuntimeOverrides(STORE_PATH);
42
+ cfg = applyRuntimeOverrides(cfg, overrides);
43
+ resolveApiKey(cfg, WORKTREE);
44
+ return cfg;
45
+ }
46
+ function formatAutoInjectContext(results, worktree, maxTokens, maxChunks) {
47
+ if (results.length === 0)
48
+ return "";
49
+ const sorted = [...results].sort((a, b) => b.score - a.score);
50
+ const included = sorted.slice(0, maxChunks);
51
+ const buildString = (items) => {
52
+ const first = items[0];
53
+ const last = items[items.length - 1];
54
+ const uniqueFiles = new Set(items.map((r) => r.chunk.metadata.filePath));
55
+ const lines = [];
56
+ lines.push(`\n**Auto-retrieved code context** _(context: ${items.length} chunk${items.length === 1 ? "" : "s"}, ${uniqueFiles.size} file${uniqueFiles.size === 1 ? "" : "s"}, relevance ${last.score.toFixed(2)}–${first.score.toFixed(2)})_\n`);
57
+ lines.push("---\n");
58
+ for (const r of items) {
59
+ const m = r.chunk.metadata;
60
+ const relPath = path.relative(worktree, m.filePath).replace(/\\/g, "/");
61
+ lines.push(`[${relPath}:${m.startLine}-${m.endLine}] (${m.language}, score: ${r.score.toFixed(2)})`);
62
+ if (r.chunk.description)
63
+ lines.push(`> ${r.chunk.description}`);
64
+ lines.push("```" + m.language);
65
+ lines.push(r.chunk.content);
66
+ lines.push("```\n");
67
+ }
68
+ lines.push("---");
69
+ return lines.join("\n");
70
+ };
71
+ let formatted = buildString(included);
72
+ while (countTokens(formatted) > maxTokens && included.length > 1) {
73
+ included.pop();
74
+ formatted = buildString(included);
75
+ }
76
+ return formatted;
77
+ }
78
+ function formatFileList(results, worktree) {
79
+ const fileMap = new Map();
80
+ for (const r of results) {
81
+ const m = r.chunk.metadata;
82
+ const existing = fileMap.get(m.filePath);
83
+ if (existing) {
84
+ existing.lines.push(m.startLine, m.endLine);
85
+ existing.scores.push(r.score);
86
+ }
87
+ else {
88
+ fileMap.set(m.filePath, { lines: [m.startLine, m.endLine], scores: [r.score] });
89
+ }
90
+ }
91
+ const sorted = [...fileMap.entries()].sort((a, b) => Math.max(...b[1].scores) - Math.max(...a[1].scores)).slice(0, 10);
92
+ if (sorted.length === 0)
93
+ return "";
94
+ const lines = ["Relevant files:"];
95
+ for (const [fp, info] of sorted) {
96
+ const relPath = path.relative(worktree, fp).replace(/\\/g, "/");
97
+ const lang = results.find((r) => r.chunk.metadata.filePath === fp)?.chunk.metadata.language ?? "";
98
+ lines.push(`${relPath} (${lang}, lines ${Math.min(...info.lines)}-${Math.max(...info.lines)}, relevance ${Math.max(...info.scores).toFixed(2)})`);
99
+ }
100
+ return lines.join("\n");
101
+ }
102
+ async function main() {
103
+ console.log("\n OpenCodeRAG Token Usage Integration Test\n");
104
+ console.log(" ─────────────────────────────────────────\n");
105
+ const cfg = getConfig();
106
+ const embedder = createEmbedder(cfg);
107
+ const store = new LanceDBStore(STORE_PATH);
108
+ let keywordIndex;
109
+ try {
110
+ keywordIndex = await KeywordIndex.load(STORE_PATH);
111
+ }
112
+ catch { /* optional */ }
113
+ const indexedCount = await store.count();
114
+ console.log(` Indexed chunks: ${indexedCount}`);
115
+ console.log(` Embedding model: ${cfg.embedding.provider}/${cfg.embedding.model}`);
116
+ console.log(` Retrieval: topK=${cfg.retrieval.topK}, minScore=${cfg.retrieval.minScore}, hybrid=${cfg.retrieval.hybridSearch?.enabled}`);
117
+ console.log(` Auto-inject: minScore=${cfg.openCode.autoInject?.minScore ?? 0.85}, maxChunks=${cfg.openCode.autoInject?.maxChunks ?? 5}, maxTokens=${cfg.openCode.autoInject?.maxTokens ?? 3000}\n`);
118
+ const results = [];
119
+ for (let i = 0; i < QUERIES.length; i++) {
120
+ const query = QUERIES[i];
121
+ process.stdout.write(` [${i + 1}/${QUERIES.length}] ${query.substring(0, 50)}...`);
122
+ const searchResults = await retrieve(query, embedder, store, {
123
+ topK: cfg.retrieval.topK,
124
+ minScore: cfg.retrieval.minScore,
125
+ keywordIndex,
126
+ keywordWeight: cfg.retrieval.hybridSearch?.keywordWeight,
127
+ queryPrefix: cfg.embedding.queryPrefix,
128
+ });
129
+ const inputTokens = countTokens(query);
130
+ const minScore = cfg.openCode.autoInject?.minScore ?? 0.85;
131
+ const maxChunks = cfg.openCode.autoInject?.maxChunks ?? 5;
132
+ const maxTokens = cfg.openCode.autoInject?.maxTokens ?? 3000;
133
+ const highConfidence = searchResults.filter((r) => r.score >= minScore);
134
+ let ragOnText = "";
135
+ let contentType = "none";
136
+ if (highConfidence.length > 0) {
137
+ ragOnText = formatAutoInjectContext(highConfidence, WORKTREE, maxTokens, maxChunks);
138
+ contentType = "chunks";
139
+ if (ragOnText.length === 0) {
140
+ ragOnText = formatFileList(highConfidence, WORKTREE);
141
+ contentType = "file_paths";
142
+ }
143
+ }
144
+ const contextTokens = countTokens(ragOnText);
145
+ const topScore = searchResults.length > 0 ? searchResults[0].score : 0;
146
+ const savedReads = highConfidence.length > 0 ? Math.min(3, highConfidence.length) : 0;
147
+ results.push({
148
+ query,
149
+ ragOn: { inputTokens, contextTokens, topScore, resultCount: searchResults.length, contentType },
150
+ ragOff: { inputTokens },
151
+ savedReads,
152
+ });
153
+ console.log(` ✓ ${searchResults.length} results, top=${topScore.toFixed(2)}, inject=${contextTokens} tok`);
154
+ }
155
+ // Test with multiple thresholds to find the effective range
156
+ const thresholds = [0.85, 0.75, 0.65, 0.50];
157
+ const thresholdResults = [];
158
+ for (const threshold of thresholds) {
159
+ let totalCtx = 0;
160
+ let injected = 0;
161
+ for (const r of results) {
162
+ // Re-run filtering with this threshold
163
+ // We stored the original search results — re-filter
164
+ }
165
+ // Re-retrieve for each threshold (cached by embedder)
166
+ let tTotalCtx = 0;
167
+ let tInjected = 0;
168
+ for (let i = 0; i < QUERIES.length; i++) {
169
+ const query = QUERIES[i];
170
+ const searchResults = await retrieve(query, embedder, store, {
171
+ topK: cfg.retrieval.topK,
172
+ minScore: cfg.retrieval.minScore,
173
+ keywordIndex,
174
+ keywordWeight: cfg.retrieval.hybridSearch?.keywordWeight,
175
+ queryPrefix: cfg.embedding.queryPrefix,
176
+ });
177
+ const highConf = searchResults.filter((r) => r.score >= threshold);
178
+ if (highConf.length > 0) {
179
+ const text = formatAutoInjectContext(highConf, WORKTREE, cfg.openCode.autoInject?.maxTokens ?? 2000, cfg.openCode.autoInject?.maxChunks ?? 5);
180
+ const tokens = countTokens(text);
181
+ tTotalCtx += tokens;
182
+ tInjected++;
183
+ }
184
+ }
185
+ thresholdResults.push({
186
+ threshold,
187
+ injected: tInjected,
188
+ avgContext: tInjected > 0 ? Math.round(tTotalCtx / tInjected) : 0,
189
+ totalContext: tTotalCtx,
190
+ });
191
+ }
192
+ // Find best threshold
193
+ const bestThreshold = thresholdResults.find((t) => t.injected > 0 && t.totalContext > 0);
194
+ console.log("\n Threshold analysis:");
195
+ for (const t of thresholdResults) {
196
+ console.log(` minScore=${t.threshold}: ${t.injected}/${QUERIES.length} queries injected, avg ${t.avgContext} tok, total ${t.totalContext} tok`);
197
+ }
198
+ // Use the 0.75 threshold results for the report (most realistic)
199
+ const effectiveThreshold = thresholdResults.find((t) => t.threshold === 0.75) ?? thresholdResults[0];
200
+ const totalContextTokens = effectiveThreshold.totalContext;
201
+ const avgContextTokens = effectiveThreshold.avgContext;
202
+ const totalInputTokens = results.reduce((s, r) => s + r.ragOff.inputTokens, 0);
203
+ const totalSavedReads = results.reduce((s, r) => s + r.savedReads, 0);
204
+ const savedReadTokens = totalSavedReads * 1200;
205
+ const netSavings = savedReadTokens - totalContextTokens;
206
+ const avgTopScore = results.reduce((s, r) => s + r.ragOn.topScore, 0) / results.length;
207
+ const queriesWithInjection = results.filter((r) => r.ragOn.contextTokens > 0).length;
208
+ const systemGuidanceTokens = indexedCount > 0 ? 150 * results.length : 0;
209
+ const netSavingsWithGuidance = netSavings - systemGuidanceTokens;
210
+ const report = [];
211
+ report.push("# OpenCodeRAG Token Usage Report\n");
212
+ report.push(`**Date:** ${new Date().toISOString().split("T")[0]}`);
213
+ report.push(`**Codebase:** ${WORKTREE}`);
214
+ report.push(`**Indexed chunks:** ${indexedCount}`);
215
+ report.push(`**Embedding model:** ${cfg.embedding.provider}/${cfg.embedding.model}`);
216
+ report.push(`**Tokenizer:** ${TOKENIZER === "tiktoken" ? "tiktoken cl100k_base (BPE)" : "heuristic (characters / 4)"}`);
217
+ report.push(`**Retrieval:** topK=${cfg.retrieval.topK}, minScore=${cfg.retrieval.minScore}, hybrid=${cfg.retrieval.hybridSearch?.enabled ?? false}`);
218
+ report.push(`**Auto-inject:** minScore=${cfg.openCode.autoInject?.minScore ?? 0.85}, maxChunks=${cfg.openCode.autoInject?.maxChunks ?? 5}, maxTokens=${cfg.openCode.autoInject?.maxTokens ?? 3000}`);
219
+ report.push("");
220
+ report.push("## Summary\n");
221
+ report.push("| Metric | Value |");
222
+ report.push("|--------|-------|");
223
+ report.push(`| Queries tested | ${results.length} |`);
224
+ report.push(`| Queries with injection | ${queriesWithInjection} / ${results.length} |`);
225
+ report.push(`| Avg top relevance score | ${avgTopScore.toFixed(3)} |`);
226
+ report.push(`| Total RAG context injected | ${totalContextTokens.toLocaleString()} tokens |`);
227
+ report.push(`| Avg context per query | ${avgContextTokens.toLocaleString()} tokens |`);
228
+ report.push(`| System guidance overhead | ${systemGuidanceTokens.toLocaleString()} tokens |`);
229
+ report.push(`| Estimated reads saved | ${totalSavedReads} calls |`);
230
+ report.push(`| Estimated read tokens saved | ${savedReadTokens.toLocaleString()} tokens |`);
231
+ report.push(`| **Net token savings** | **${netSavings > 0 ? "+" : ""}${netSavings.toLocaleString()} tokens** |`);
232
+ report.push(`| **Net savings (with guidance)** | **${netSavingsWithGuidance > 0 ? "+" : ""}${netSavingsWithGuidance.toLocaleString()} tokens** |`);
233
+ report.push("");
234
+ report.push("## Verdict\n");
235
+ if (netSavings > 0) {
236
+ report.push(`**RAG SAVES tokens overall.** The ${totalContextTokens.toLocaleString()} tokens of injected context are offset by an estimated ${savedReadTokens.toLocaleString()} tokens saved from ${totalSavedReads} fewer file reads. Net savings: **+${netSavings.toLocaleString()} tokens** (${((netSavings / (totalInputTokens + totalContextTokens)) * 100).toFixed(1)}%).`);
237
+ }
238
+ else {
239
+ report.push(`**RAG COSTS tokens overall.** The ${totalContextTokens.toLocaleString()} tokens of injected context exceed the estimated ${savedReadTokens.toLocaleString()} tokens saved from fewer file reads. Net overhead: **${netSavings.toLocaleString()} tokens** (${((Math.abs(netSavings) / (totalInputTokens + totalContextTokens)) * 100).toFixed(1)}%).`);
240
+ }
241
+ report.push("");
242
+ report.push("## Per-Query Results\n");
243
+ report.push("| # | Query | Results | Top Score | Injected | Content Type |");
244
+ report.push("|---|-------|---------|-----------|----------|--------------|");
245
+ for (let i = 0; i < results.length; i++) {
246
+ const r = results[i];
247
+ const q = r.query.length > 45 ? r.query.substring(0, 42) + "..." : r.query;
248
+ report.push(`| ${i + 1} | ${q} | ${r.ragOn.resultCount} | ${r.ragOn.topScore.toFixed(3)} | ${r.ragOn.contextTokens} tok | ${r.ragOn.contentType} |`);
249
+ }
250
+ report.push("");
251
+ report.push("## Token Breakdown\n");
252
+ report.push("### Without RAG (estimated)\n");
253
+ report.push("- Agent must read files to find relevant code: ~2-3 reads × ~1200 tokens = **~2400-3600 tokens per query**");
254
+ report.push("- No injected context overhead");
255
+ report.push("- No system guidance overhead");
256
+ report.push("");
257
+ report.push("### With RAG\n");
258
+ report.push(`- Injected context: **${avgContextTokens} tokens per query** (avg)`);
259
+ report.push(`- System guidance: **~150 tokens per query**`);
260
+ report.push("- Agent reads fewer files: **~0-1 reads per query**");
261
+ report.push("");
262
+ report.push("## Notes\n");
263
+ report.push("- Read token savings are **estimated** based on typical agent behavior (2-3 extra reads per query without RAG)");
264
+ report.push("- Actual savings depend on query complexity, codebase size, and agent model");
265
+ report.push("- RAG provides **qualitative benefits** beyond token savings: more targeted code context, fewer hallucinations, better grounding");
266
+ report.push("- The `minScore` threshold (0.85) is conservative — lowering it injects more context but catches more relevant code");
267
+ report.push("");
268
+ const reportPath = path.join(WORKTREE, "doc", "eval-token-report.md");
269
+ writeFileSync(reportPath, report.join("\n"), "utf-8");
270
+ console.log(`\n Report written to: ${reportPath}\n`);
271
+ const sep = "─".repeat(70);
272
+ console.log(sep);
273
+ console.log(" SUMMARY");
274
+ console.log(sep);
275
+ console.log(` Queries: ${results.length}`);
276
+ console.log(` With injection: ${queriesWithInjection}/${results.length}`);
277
+ console.log(` Avg context/query: ${avgContextTokens} tokens`);
278
+ console.log(` Total context: ${totalContextTokens} tokens`);
279
+ console.log(` System guidance: ${systemGuidanceTokens} tokens`);
280
+ console.log(` Reads saved: ${totalSavedReads} calls (~${savedReadTokens} tokens)`);
281
+ const color = netSavings > 0 ? "\x1b[32m" : "\x1b[33m";
282
+ const reset = "\x1b[0m";
283
+ console.log(` Net savings: ${color}${netSavings > 0 ? "+" : ""}${netSavings} tokens${reset}`);
284
+ console.log(sep);
285
+ console.log();
286
+ }
287
+ main().catch((err) => { console.error("Test failed:", err); process.exit(1); });
288
+ //# sourceMappingURL=run-token-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-token-test.js","sourceRoot":"","sources":["../../src/eval/run-token-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Token usage analysis for comparing RAG-on vs RAG-off sessions.
3
+ *
4
+ * Provides functions to:
5
+ * - Analyze per-query token breakdown from session events
6
+ * - Estimate token savings from RAG (fewer read tool calls)
7
+ * - Generate comparison reports between RAG-on and RAG-off sessions
8
+ */
9
+ export interface PerQueryBreakdown {
10
+ messageID: string;
11
+ inputTokens: number;
12
+ outputTokens: number;
13
+ reasoningTokens: number;
14
+ cacheRead: number;
15
+ cacheWrite: number;
16
+ cost: number;
17
+ ragContextTokens: number;
18
+ ragChunkCount: number;
19
+ ragTopScore: number;
20
+ readToolCalls: number;
21
+ ragToolCalls: number;
22
+ responseTimeMs: number;
23
+ }
24
+ export interface TokenAnalysis {
25
+ sessionID: string;
26
+ queryCount: number;
27
+ breakdowns: PerQueryBreakdown[];
28
+ totals: {
29
+ inputTokens: number;
30
+ outputTokens: number;
31
+ reasoningTokens: number;
32
+ cacheRead: number;
33
+ cacheWrite: number;
34
+ cost: number;
35
+ ragContextTokens: number;
36
+ readToolCalls: number;
37
+ ragToolCalls: number;
38
+ systemGuidanceTokens: number;
39
+ avgResponseTimeMs: number;
40
+ totalToolTimeMs: number;
41
+ models: string[];
42
+ };
43
+ estimates: {
44
+ tokensWithoutRAG: number;
45
+ tokensWithRAG: number;
46
+ netSavings: number;
47
+ percentSavings: number;
48
+ };
49
+ }
50
+ /**
51
+ * Analyze token usage for a single session from its JSONL event log.
52
+ *
53
+ * Reads all events, groups them by message, and computes per-query breakdowns
54
+ * including RAG context injection, tool calls, and response times.
55
+ */
56
+ export declare function analyzeTokenUsage(storePath: string, sessionID: string): TokenAnalysis;
57
+ /**
58
+ * Compare two token analyses (RAG-on vs RAG-off) and produce a delta report.
59
+ */
60
+ export declare function compareTokenAnalyses(ragOn: TokenAnalysis, ragOff: TokenAnalysis): {
61
+ delta: {
62
+ inputTokens: number;
63
+ outputTokens: number;
64
+ reasoningTokens: number;
65
+ cacheRead: number;
66
+ cost: number;
67
+ ragContextTokens: number;
68
+ readToolCalls: number;
69
+ ragToolCalls: number;
70
+ systemGuidanceTokens: number;
71
+ responseTimeMs: number;
72
+ };
73
+ percentChange: {
74
+ inputTokens: number;
75
+ outputTokens: number;
76
+ cost: number;
77
+ readToolCalls: number;
78
+ responseTimeMs: number;
79
+ };
80
+ verdict: string;
81
+ };
82
+ /**
83
+ * Format a token comparison report as a human-readable string.
84
+ */
85
+ export declare function formatTokenReport(ragOn: TokenAnalysis, ragOff: TokenAnalysis, comparison: ReturnType<typeof compareTokenAnalyses>): string;
86
+ /**
87
+ * Estimate the token count for given text content.
88
+ * Uses tiktoken BPE (cl100k_base) when available, falls back to ceil(len/4).
89
+ */
90
+ export declare function estimateContextTokens(text: string): number;
91
+ /**
92
+ * Project whether RAG would save tokens for a given query profile.
93
+ *
94
+ * @param avgChunkSize - Average size of injected code chunks in characters
95
+ * @param avgChunksPerQuery - Average chunks injected per query
96
+ * @param avgReadsPerQueryWithoutRAG - Average read calls without RAG
97
+ * @param avgReadsPerQueryWithRAG - Average read calls with RAG
98
+ * @param queryCount - Number of queries in the session
99
+ */
100
+ export declare function projectTokenSavings(params: {
101
+ avgChunkSize: number;
102
+ avgChunksPerQuery: number;
103
+ avgReadsPerQueryWithoutRAG: number;
104
+ avgReadsPerQueryWithRAG: number;
105
+ queryCount: number;
106
+ }): {
107
+ ragOverheadTokens: number;
108
+ savedReadTokens: number;
109
+ netSavings: number;
110
+ isPositive: boolean;
111
+ };