sverklo 0.2.12 → 0.2.14
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 +102 -13
- package/dist/bin/sverklo.js +69 -1
- package/dist/bin/sverklo.js.map +1 -1
- package/dist/src/audit-prompt.d.ts +2 -0
- package/dist/src/audit-prompt.js +91 -0
- package/dist/src/audit-prompt.js.map +1 -0
- package/dist/src/doctor.js +55 -0
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/indexer/embedding-providers.d.ts +34 -0
- package/dist/src/indexer/embedding-providers.js +215 -0
- package/dist/src/indexer/embedding-providers.js.map +1 -0
- package/dist/src/indexer/embedding-providers.test.d.ts +1 -0
- package/dist/src/indexer/embedding-providers.test.js +83 -0
- package/dist/src/indexer/embedding-providers.test.js.map +1 -0
- package/dist/src/indexer/indexer-freshness.test.d.ts +1 -0
- package/dist/src/indexer/indexer-freshness.test.js +109 -0
- package/dist/src/indexer/indexer-freshness.test.js.map +1 -0
- package/dist/src/indexer/indexer-provider-integration.test.d.ts +1 -0
- package/dist/src/indexer/indexer-provider-integration.test.js +142 -0
- package/dist/src/indexer/indexer-provider-integration.test.js.map +1 -0
- package/dist/src/indexer/indexer.d.ts +44 -0
- package/dist/src/indexer/indexer.js +153 -10
- package/dist/src/indexer/indexer.js.map +1 -1
- package/dist/src/indexer/migration.test.d.ts +1 -0
- package/dist/src/indexer/migration.test.js +144 -0
- package/dist/src/indexer/migration.test.js.map +1 -0
- package/dist/src/indexer/symbol-extractor.js +17 -5
- package/dist/src/indexer/symbol-extractor.js.map +1 -1
- package/dist/src/indexer/symbol-extractor.test.d.ts +1 -0
- package/dist/src/indexer/symbol-extractor.test.js +88 -0
- package/dist/src/indexer/symbol-extractor.test.js.map +1 -0
- package/dist/src/indexer/watcher.js +4 -0
- package/dist/src/indexer/watcher.js.map +1 -1
- package/dist/src/memory/journal.d.ts +62 -0
- package/dist/src/memory/journal.js +136 -0
- package/dist/src/memory/journal.js.map +1 -0
- package/dist/src/memory/journal.test.d.ts +1 -0
- package/dist/src/memory/journal.test.js +98 -0
- package/dist/src/memory/journal.test.js.map +1 -0
- package/dist/src/modes.d.ts +16 -0
- package/dist/src/modes.js +104 -0
- package/dist/src/modes.js.map +1 -0
- package/dist/src/modes.test.d.ts +1 -0
- package/dist/src/modes.test.js +48 -0
- package/dist/src/modes.test.js.map +1 -0
- package/dist/src/search/hybrid-search.d.ts +22 -0
- package/dist/src/search/hybrid-search.js +169 -7
- package/dist/src/search/hybrid-search.js.map +1 -1
- package/dist/src/search/hybrid-search.test.d.ts +1 -0
- package/dist/src/search/hybrid-search.test.js +112 -0
- package/dist/src/search/hybrid-search.test.js.map +1 -0
- package/dist/src/search/token-budget.d.ts +1 -0
- package/dist/src/search/token-budget.js +34 -6
- package/dist/src/search/token-budget.js.map +1 -1
- package/dist/src/server/mcp-server.js +32 -25
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/server/tool-overrides.d.ts +16 -0
- package/dist/src/server/tool-overrides.js +102 -0
- package/dist/src/server/tool-overrides.js.map +1 -0
- package/dist/src/server/tool-overrides.test.d.ts +1 -0
- package/dist/src/server/tool-overrides.test.js +124 -0
- package/dist/src/server/tool-overrides.test.js.map +1 -0
- package/dist/src/server/tools/context-budget.test.d.ts +1 -0
- package/dist/src/server/tools/context-budget.test.js +150 -0
- package/dist/src/server/tools/context-budget.test.js.map +1 -0
- package/dist/src/server/tools/context.d.ts +11 -1
- package/dist/src/server/tools/context.js +202 -8
- package/dist/src/server/tools/context.js.map +1 -1
- package/dist/src/server/tools/diff-heuristics.d.ts +28 -0
- package/dist/src/server/tools/diff-heuristics.js +213 -0
- package/dist/src/server/tools/diff-heuristics.js.map +1 -0
- package/dist/src/server/tools/diff-heuristics.test.d.ts +1 -0
- package/dist/src/server/tools/diff-heuristics.test.js +151 -0
- package/dist/src/server/tools/diff-heuristics.test.js.map +1 -0
- package/dist/src/server/tools/find-references.d.ts +4 -0
- package/dist/src/server/tools/find-references.js +46 -6
- package/dist/src/server/tools/find-references.js.map +1 -1
- package/dist/src/server/tools/find-references.test.d.ts +1 -0
- package/dist/src/server/tools/find-references.test.js +98 -0
- package/dist/src/server/tools/find-references.test.js.map +1 -0
- package/dist/src/server/tools/forget.js +3 -0
- package/dist/src/server/tools/forget.js.map +1 -1
- package/dist/src/server/tools/index-status.js +16 -0
- package/dist/src/server/tools/index-status.js.map +1 -1
- package/dist/src/server/tools/lookup.js +21 -13
- package/dist/src/server/tools/lookup.js.map +1 -1
- package/dist/src/server/tools/lookup.test.d.ts +1 -0
- package/dist/src/server/tools/lookup.test.js +110 -0
- package/dist/src/server/tools/lookup.test.js.map +1 -0
- package/dist/src/server/tools/recall.d.ts +5 -1
- package/dist/src/server/tools/recall.js +68 -6
- package/dist/src/server/tools/recall.js.map +1 -1
- package/dist/src/server/tools/recall.test.d.ts +1 -0
- package/dist/src/server/tools/recall.test.js +116 -0
- package/dist/src/server/tools/recall.test.js.map +1 -0
- package/dist/src/server/tools/remember.js +16 -2
- package/dist/src/server/tools/remember.js.map +1 -1
- package/dist/src/server/tools/review-diff.js +31 -0
- package/dist/src/server/tools/review-diff.js.map +1 -1
- package/dist/src/server/tools/search.js +29 -4
- package/dist/src/server/tools/search.js.map +1 -1
- package/dist/src/server/tools/search.test.d.ts +1 -0
- package/dist/src/server/tools/search.test.js +118 -0
- package/dist/src/server/tools/search.test.js.map +1 -0
- package/dist/src/server/tools/tier.js +25 -1
- package/dist/src/server/tools/tier.js.map +1 -1
- package/dist/src/storage/chunk-store.d.ts +12 -0
- package/dist/src/storage/chunk-store.js +16 -0
- package/dist/src/storage/chunk-store.js.map +1 -1
- package/dist/src/storage/chunk-store.test.d.ts +1 -0
- package/dist/src/storage/chunk-store.test.js +69 -0
- package/dist/src/storage/chunk-store.test.js.map +1 -0
- package/dist/src/storage/database.d.ts +13 -0
- package/dist/src/storage/database.js +47 -0
- package/dist/src/storage/database.js.map +1 -1
- package/package.json +5 -2
|
@@ -5,6 +5,7 @@ import { GraphStore } from "../storage/graph-store.js";
|
|
|
5
5
|
import { MemoryStore } from "../storage/memory-store.js";
|
|
6
6
|
import { MemoryEmbeddingStore } from "../storage/memory-embedding-store.js";
|
|
7
7
|
import { SymbolRefStore } from "../storage/symbol-ref-store.js";
|
|
8
|
+
import { MemoryJournal } from "../memory/journal.js";
|
|
8
9
|
import type { ProjectConfig, IndexStatus } from "../types/index.js";
|
|
9
10
|
export declare class Indexer {
|
|
10
11
|
private config;
|
|
@@ -16,11 +17,48 @@ export declare class Indexer {
|
|
|
16
17
|
memoryStore: MemoryStore;
|
|
17
18
|
memoryEmbeddingStore: MemoryEmbeddingStore;
|
|
18
19
|
symbolRefStore: SymbolRefStore;
|
|
20
|
+
memoryJournal: MemoryJournal;
|
|
21
|
+
private embeddingProvider;
|
|
19
22
|
private indexing;
|
|
20
23
|
private progress;
|
|
21
24
|
private lastIndexedTime;
|
|
25
|
+
private freshnessCache;
|
|
26
|
+
private static readonly FRESHNESS_CACHE_MS;
|
|
22
27
|
constructor(config: ProjectConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Bring the on-disk data layer up to CURRENT_DATA_VERSION. Runs
|
|
30
|
+
* once on Indexer construction and is a no-op on already-current
|
|
31
|
+
* databases.
|
|
32
|
+
*
|
|
33
|
+
* Migrations are intentionally side-effecting on this instance's
|
|
34
|
+
* stores; each one should be small, deterministic, and fast.
|
|
35
|
+
*/
|
|
36
|
+
private runDataMigrations;
|
|
23
37
|
get rootPath(): string;
|
|
38
|
+
/**
|
|
39
|
+
* Embed a batch of texts using the selected provider. Callers should
|
|
40
|
+
* prefer this over importing the legacy embed() directly so that a
|
|
41
|
+
* single env-var change (SVERKLO_EMBEDDING_PROVIDER) actually takes
|
|
42
|
+
* effect across every query path.
|
|
43
|
+
*
|
|
44
|
+
* If the provider hasn't been lazily initialized yet (embed() called
|
|
45
|
+
* before the first index() run), we init the default provider
|
|
46
|
+
* synchronously via the bundled ONNX module so read-path tools like
|
|
47
|
+
* search / recall / remember still work during bootstrap.
|
|
48
|
+
*/
|
|
49
|
+
embed(texts: string[]): Promise<Float32Array[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Human-readable name of the active embedding provider. Used by
|
|
52
|
+
* sverklo_status and sverklo doctor to show the user which provider
|
|
53
|
+
* their env vars actually selected. Returns "default" if the
|
|
54
|
+
* provider hasn't been initialized yet.
|
|
55
|
+
*/
|
|
56
|
+
get embeddingProviderName(): string;
|
|
57
|
+
/**
|
|
58
|
+
* Dimensions of the active embedding provider. Surfaced in status
|
|
59
|
+
* so users can spot a dimension mismatch that would require reindex.
|
|
60
|
+
*/
|
|
61
|
+
get embeddingDimensions(): number;
|
|
24
62
|
index(): Promise<void>;
|
|
25
63
|
reindexFile(relativePath: string, absolutePath: string, language: string): Promise<void>;
|
|
26
64
|
removeFile(relativePath: string): void;
|
|
@@ -38,6 +76,12 @@ export declare class Indexer {
|
|
|
38
76
|
dirtyFiles: string[];
|
|
39
77
|
missingFiles: string[];
|
|
40
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* Drop the freshness cache. Called by the file watcher when a real
|
|
81
|
+
* change event fires so the next sverklo_status reflects reality
|
|
82
|
+
* without waiting for the 2-second TTL.
|
|
83
|
+
*/
|
|
84
|
+
invalidateFreshnessCache(): void;
|
|
41
85
|
close(): void;
|
|
42
86
|
/**
|
|
43
87
|
* Delete the index database entirely and reinitialize empty stores.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync, existsSync, unlinkSync } from "node:fs";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
|
-
import { createDatabase } from "../storage/database.js";
|
|
3
|
+
import { createDatabase, getDataVersion, setDataVersion, CURRENT_DATA_VERSION, } from "../storage/database.js";
|
|
4
4
|
import { FileStore } from "../storage/file-store.js";
|
|
5
5
|
import { ChunkStore } from "../storage/chunk-store.js";
|
|
6
6
|
import { EmbeddingStore } from "../storage/embedding-store.js";
|
|
@@ -8,10 +8,12 @@ import { GraphStore } from "../storage/graph-store.js";
|
|
|
8
8
|
import { MemoryStore } from "../storage/memory-store.js";
|
|
9
9
|
import { MemoryEmbeddingStore } from "../storage/memory-embedding-store.js";
|
|
10
10
|
import { SymbolRefStore } from "../storage/symbol-ref-store.js";
|
|
11
|
+
import { MemoryJournal } from "../memory/journal.js";
|
|
11
12
|
import { discoverFiles } from "./file-discovery.js";
|
|
12
13
|
import { parseFile } from "./parser.js";
|
|
13
14
|
import { describeChunk } from "./describer.js";
|
|
14
|
-
import { embed, initEmbedder } from "./embedder.js";
|
|
15
|
+
import { embed as legacyEmbed, initEmbedder } from "./embedder.js";
|
|
16
|
+
import { createEmbeddingProvider, } from "./embedding-providers.js";
|
|
15
17
|
import { buildGraph } from "./graph-builder.js";
|
|
16
18
|
import { extractReferences } from "./symbol-extractor.js";
|
|
17
19
|
import { createIgnoreFilter } from "../utils/ignore.js";
|
|
@@ -28,9 +30,23 @@ export class Indexer {
|
|
|
28
30
|
memoryStore;
|
|
29
31
|
memoryEmbeddingStore;
|
|
30
32
|
symbolRefStore;
|
|
33
|
+
memoryJournal;
|
|
34
|
+
// Issue #9 wiring (caught during dogfood session, 2026-04-08):
|
|
35
|
+
// The pluggable provider factory existed but the indexer was still
|
|
36
|
+
// calling the bundled ONNX embed() directly, so SVERKLO_EMBEDDING_PROVIDER
|
|
37
|
+
// had no effect. We lazily select a provider on the first index() call,
|
|
38
|
+
// then use it everywhere via the public embed() method below.
|
|
39
|
+
embeddingProvider = null;
|
|
31
40
|
indexing = false;
|
|
32
41
|
progress = { done: 0, total: 0 };
|
|
33
42
|
lastIndexedTime = null;
|
|
43
|
+
// Freshness result cache. The disk walk in getFreshness() dominates the
|
|
44
|
+
// cost of sverklo_status (~95ms on a 150-file repo before this cache was
|
|
45
|
+
// added — see issue #6). Status is a read-only advisory call and the
|
|
46
|
+
// filesystem doesn't meaningfully change in a 2-second window, so we
|
|
47
|
+
// memoize briefly. The file watcher invalidates on real changes below.
|
|
48
|
+
freshnessCache = null;
|
|
49
|
+
static FRESHNESS_CACHE_MS = 2000;
|
|
34
50
|
constructor(config) {
|
|
35
51
|
this.config = config;
|
|
36
52
|
this.db = createDatabase(config.dbPath);
|
|
@@ -41,21 +57,116 @@ export class Indexer {
|
|
|
41
57
|
this.memoryStore = new MemoryStore(this.db);
|
|
42
58
|
this.memoryEmbeddingStore = new MemoryEmbeddingStore(this.db);
|
|
43
59
|
this.symbolRefStore = new SymbolRefStore(this.db);
|
|
60
|
+
this.memoryJournal = new MemoryJournal(config.rootPath);
|
|
61
|
+
// Run any outstanding data migrations before any query code touches
|
|
62
|
+
// the stores. Migrations are surgical — they operate on the existing
|
|
63
|
+
// data and never require a full reindex — so the user sees zero
|
|
64
|
+
// downtime on upgrade.
|
|
65
|
+
this.runDataMigrations();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Bring the on-disk data layer up to CURRENT_DATA_VERSION. Runs
|
|
69
|
+
* once on Indexer construction and is a no-op on already-current
|
|
70
|
+
* databases.
|
|
71
|
+
*
|
|
72
|
+
* Migrations are intentionally side-effecting on this instance's
|
|
73
|
+
* stores; each one should be small, deterministic, and fast.
|
|
74
|
+
*/
|
|
75
|
+
runDataMigrations() {
|
|
76
|
+
const stored = getDataVersion(this.db);
|
|
77
|
+
if (stored >= CURRENT_DATA_VERSION)
|
|
78
|
+
return;
|
|
79
|
+
// A fresh database has version 0 and no data yet — we'll stamp it
|
|
80
|
+
// below without running any migrations. Only existing data needs
|
|
81
|
+
// upgrading.
|
|
82
|
+
const chunkCount = this.chunkStore.count();
|
|
83
|
+
if (stored < 2 && chunkCount > 0) {
|
|
84
|
+
// Migration 1 → 2: re-extract symbol references from every
|
|
85
|
+
// existing chunk. Fixes github.com/sverklo/sverklo/issues/13
|
|
86
|
+
// where v0.2.13 and earlier collapsed repeat calls of the
|
|
87
|
+
// same symbol in one chunk to a single symbol_refs row.
|
|
88
|
+
//
|
|
89
|
+
// We drop the old symbol_refs rows and re-run extractReferences
|
|
90
|
+
// in-process. No file I/O, no re-parsing — just regex over the
|
|
91
|
+
// chunk bodies we already have in the DB.
|
|
92
|
+
log(`[migration] data_version ${stored} → 2: re-extracting symbol refs for ${chunkCount} chunks (fixes #13)`);
|
|
93
|
+
const t0 = Date.now();
|
|
94
|
+
this.db.exec("DELETE FROM symbol_refs");
|
|
95
|
+
// Pull chunks one at a time to keep memory bounded on huge repos.
|
|
96
|
+
const rows = this.db
|
|
97
|
+
.prepare("SELECT id, name, start_line, content FROM chunks")
|
|
98
|
+
.all();
|
|
99
|
+
let totalRefs = 0;
|
|
100
|
+
const insertTxn = this.db.transaction(() => {
|
|
101
|
+
for (const row of rows) {
|
|
102
|
+
const refs = extractReferences(row.content, row.name);
|
|
103
|
+
for (const ref of refs) {
|
|
104
|
+
this.symbolRefStore.insert(row.id, ref.name, row.start_line + ref.line);
|
|
105
|
+
totalRefs++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
insertTxn();
|
|
110
|
+
log(`[migration] extracted ${totalRefs} symbol refs in ${Date.now() - t0}ms`);
|
|
111
|
+
}
|
|
112
|
+
setDataVersion(this.db, CURRENT_DATA_VERSION);
|
|
44
113
|
}
|
|
45
114
|
get rootPath() {
|
|
46
115
|
return this.config.rootPath;
|
|
47
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Embed a batch of texts using the selected provider. Callers should
|
|
119
|
+
* prefer this over importing the legacy embed() directly so that a
|
|
120
|
+
* single env-var change (SVERKLO_EMBEDDING_PROVIDER) actually takes
|
|
121
|
+
* effect across every query path.
|
|
122
|
+
*
|
|
123
|
+
* If the provider hasn't been lazily initialized yet (embed() called
|
|
124
|
+
* before the first index() run), we init the default provider
|
|
125
|
+
* synchronously via the bundled ONNX module so read-path tools like
|
|
126
|
+
* search / recall / remember still work during bootstrap.
|
|
127
|
+
*/
|
|
128
|
+
async embed(texts) {
|
|
129
|
+
if (this.embeddingProvider) {
|
|
130
|
+
return this.embeddingProvider.embed(texts);
|
|
131
|
+
}
|
|
132
|
+
// Fallback: lazy-init the default provider. Happens if search /
|
|
133
|
+
// recall is called before index() completes.
|
|
134
|
+
await initEmbedder();
|
|
135
|
+
return legacyEmbed(texts);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Human-readable name of the active embedding provider. Used by
|
|
139
|
+
* sverklo_status and sverklo doctor to show the user which provider
|
|
140
|
+
* their env vars actually selected. Returns "default" if the
|
|
141
|
+
* provider hasn't been initialized yet.
|
|
142
|
+
*/
|
|
143
|
+
get embeddingProviderName() {
|
|
144
|
+
return this.embeddingProvider?.name ?? "default";
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Dimensions of the active embedding provider. Surfaced in status
|
|
148
|
+
* so users can spot a dimension mismatch that would require reindex.
|
|
149
|
+
*/
|
|
150
|
+
get embeddingDimensions() {
|
|
151
|
+
return this.embeddingProvider?.dimensions ?? 384;
|
|
152
|
+
}
|
|
48
153
|
async index() {
|
|
49
154
|
if (this.indexing)
|
|
50
155
|
return;
|
|
51
156
|
this.indexing = true;
|
|
52
157
|
// Cold-start vs refresh detection: cold start = no file records yet.
|
|
53
|
-
// Computed before
|
|
158
|
+
// Computed before provider init so we don't count model download in duration.
|
|
54
159
|
const __isColdStart = this.fileStore.count() === 0;
|
|
55
160
|
try {
|
|
56
161
|
log(`Indexing ${this.config.rootPath}...`);
|
|
57
162
|
const startTime = Date.now();
|
|
58
|
-
|
|
163
|
+
// Select the embedding provider lazily on first index. This
|
|
164
|
+
// reads SVERKLO_EMBEDDING_PROVIDER + related env vars and falls
|
|
165
|
+
// back to the bundled ONNX model on any failure. Only runs once
|
|
166
|
+
// per Indexer instance — subsequent index() calls reuse it.
|
|
167
|
+
if (!this.embeddingProvider) {
|
|
168
|
+
this.embeddingProvider = await createEmbeddingProvider();
|
|
169
|
+
}
|
|
59
170
|
// 1. Discover files
|
|
60
171
|
const ignoreFilter = createIgnoreFilter(this.config.rootPath);
|
|
61
172
|
const files = discoverFiles(this.config.rootPath, ignoreFilter);
|
|
@@ -132,7 +243,7 @@ export class Indexer {
|
|
|
132
243
|
for (let i = 0; i < embeddingBatch.length; i += BATCH_SIZE) {
|
|
133
244
|
const batch = embeddingBatch.slice(i, i + BATCH_SIZE);
|
|
134
245
|
const texts = batch.map((b) => b.text);
|
|
135
|
-
const vectors = await embed(texts);
|
|
246
|
+
const vectors = await this.embed(texts);
|
|
136
247
|
for (let j = 0; j < batch.length; j++) {
|
|
137
248
|
this.embeddingStore.insert(batch[j].chunkId, vectors[j]);
|
|
138
249
|
}
|
|
@@ -144,6 +255,11 @@ export class Indexer {
|
|
|
144
255
|
buildGraph(fileImports, this.fileStore, this.graphStore, this.config.rootPath);
|
|
145
256
|
// 8. Update project metadata
|
|
146
257
|
this.lastIndexedTime = Date.now();
|
|
258
|
+
// Any full reindex invalidates the freshness cache: the disk
|
|
259
|
+
// walk we cached is stale relative to the new index state.
|
|
260
|
+
// Skipping this left sverklo_status showing the old dirty list
|
|
261
|
+
// for up to FRESHNESS_CACHE_MS after a forced rebuild.
|
|
262
|
+
this.freshnessCache = null;
|
|
147
263
|
const elapsed = this.lastIndexedTime - startTime;
|
|
148
264
|
log(`Indexing complete: ${this.fileStore.count()} files, ` +
|
|
149
265
|
`${this.chunkStore.count()} chunks in ${elapsed}ms`);
|
|
@@ -185,7 +301,7 @@ export class Indexer {
|
|
|
185
301
|
this.symbolRefStore.insert(chunkId, ref.name, chunk.startLine + ref.line);
|
|
186
302
|
}
|
|
187
303
|
const embText = description + "\n" + chunk.content.slice(0, 512);
|
|
188
|
-
const [vector] = await embed([embText]);
|
|
304
|
+
const [vector] = await this.embed([embText]);
|
|
189
305
|
this.embeddingStore.insert(chunkId, vector);
|
|
190
306
|
}
|
|
191
307
|
}
|
|
@@ -217,6 +333,18 @@ export class Indexer {
|
|
|
217
333
|
* is a low-frequency call (start of session) so the cost is acceptable.
|
|
218
334
|
*/
|
|
219
335
|
getFreshness() {
|
|
336
|
+
// Serve from cache if recent. Issue #6 — this call dominated the
|
|
337
|
+
// wall-clock cost of sverklo_status, which agents can hit multiple
|
|
338
|
+
// times per session.
|
|
339
|
+
if (this.freshnessCache &&
|
|
340
|
+
Date.now() - this.freshnessCache.ts < Indexer.FRESHNESS_CACHE_MS) {
|
|
341
|
+
// Refresh ageSeconds (wall-clock keeps moving) but reuse the
|
|
342
|
+
// expensive disk-walk result.
|
|
343
|
+
const ageSeconds = this.lastIndexedTime === null
|
|
344
|
+
? null
|
|
345
|
+
: Math.floor((Date.now() - this.lastIndexedTime) / 1000);
|
|
346
|
+
return { ...this.freshnessCache.result, ageSeconds };
|
|
347
|
+
}
|
|
220
348
|
const ageSeconds = this.lastIndexedTime === null
|
|
221
349
|
? null
|
|
222
350
|
: Math.floor((Date.now() - this.lastIndexedTime) / 1000);
|
|
@@ -226,8 +354,13 @@ export class Indexer {
|
|
|
226
354
|
const ignoreFilter = createIgnoreFilter(this.config.rootPath);
|
|
227
355
|
const onDisk = discoverFiles(this.config.rootPath, ignoreFilter);
|
|
228
356
|
const onDiskMap = new Map(onDisk.map((f) => [f.relativePath, f.lastModified]));
|
|
229
|
-
//
|
|
230
|
-
|
|
357
|
+
// Single pass over the indexed file list — the previous version
|
|
358
|
+
// called fileStore.getAll() twice, doubling the SQLite scan cost
|
|
359
|
+
// on large repos.
|
|
360
|
+
const indexedFiles = this.fileStore.getAll();
|
|
361
|
+
const indexedPaths = new Set();
|
|
362
|
+
for (const indexed of indexedFiles) {
|
|
363
|
+
indexedPaths.add(indexed.path);
|
|
231
364
|
const diskMtime = onDiskMap.get(indexed.path);
|
|
232
365
|
if (diskMtime === undefined) {
|
|
233
366
|
missingFiles.push(indexed.path);
|
|
@@ -237,7 +370,6 @@ export class Indexer {
|
|
|
237
370
|
}
|
|
238
371
|
}
|
|
239
372
|
// Files on disk but not in the index (new since last index)
|
|
240
|
-
const indexedPaths = new Set(this.fileStore.getAll().map((f) => f.path));
|
|
241
373
|
for (const f of onDisk) {
|
|
242
374
|
if (!indexedPaths.has(f.relativePath)) {
|
|
243
375
|
dirtyFiles.push(f.relativePath);
|
|
@@ -247,7 +379,17 @@ export class Indexer {
|
|
|
247
379
|
catch (err) {
|
|
248
380
|
logError("getFreshness: disk walk failed", err);
|
|
249
381
|
}
|
|
250
|
-
|
|
382
|
+
const result = { ageSeconds, dirtyFiles, missingFiles };
|
|
383
|
+
this.freshnessCache = { ts: Date.now(), result };
|
|
384
|
+
return result;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Drop the freshness cache. Called by the file watcher when a real
|
|
388
|
+
* change event fires so the next sverklo_status reflects reality
|
|
389
|
+
* without waiting for the 2-second TTL.
|
|
390
|
+
*/
|
|
391
|
+
invalidateFreshnessCache() {
|
|
392
|
+
this.freshnessCache = null;
|
|
251
393
|
}
|
|
252
394
|
close() {
|
|
253
395
|
this.db.close();
|
|
@@ -290,6 +432,7 @@ export class Indexer {
|
|
|
290
432
|
this.indexing = false;
|
|
291
433
|
this.progress = { done: 0, total: 0 };
|
|
292
434
|
this.lastIndexedTime = null;
|
|
435
|
+
this.freshnessCache = null;
|
|
293
436
|
}
|
|
294
437
|
}
|
|
295
438
|
function hashFile(filePath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../../src/indexer/indexer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../../src/indexer/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { Indexer } from "./indexer.js";
|
|
6
|
+
import { getProjectConfig } from "../utils/config.js";
|
|
7
|
+
import { createDatabase, getDataVersion, setDataVersion, CURRENT_DATA_VERSION, } from "../storage/database.js";
|
|
8
|
+
// Tests for the data-version migration runner (issue #13 rollout).
|
|
9
|
+
//
|
|
10
|
+
// Scenario: a user upgrades from v0.2.13 (where symbol_refs rows
|
|
11
|
+
// were lossy due to chunk-wide dedupe) to v0.2.14 (where the bug
|
|
12
|
+
// is fixed). Their existing index is still lossy until we re-extract
|
|
13
|
+
// references from the chunks we already have.
|
|
14
|
+
//
|
|
15
|
+
// The migration:
|
|
16
|
+
// 1. runs on Indexer construction if stored data_version < 2
|
|
17
|
+
// 2. drops all symbol_refs rows
|
|
18
|
+
// 3. re-runs extractReferences over every chunk.content already in the db
|
|
19
|
+
// 4. stamps data_version = 2 so subsequent constructions are a no-op
|
|
20
|
+
describe("data-version migration", () => {
|
|
21
|
+
let tmpRoot;
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
tmpRoot = mkdtempSync(join(tmpdir(), "sverklo-migration-"));
|
|
24
|
+
mkdirSync(join(tmpRoot, "src"), { recursive: true });
|
|
25
|
+
// A file with a symbol called twice in the same function.
|
|
26
|
+
// Under v0.2.13, extractReferences would produce ONE symbol_ref
|
|
27
|
+
// row for 'helper' from this function, not two.
|
|
28
|
+
//
|
|
29
|
+
// Note: we use `declare function` for helper rather than a real
|
|
30
|
+
// definition because the current chunker only chunks the first
|
|
31
|
+
// top-level function when a file has multiple — that's a
|
|
32
|
+
// separate bug worth filing, but not blocking the migration
|
|
33
|
+
// tests here.
|
|
34
|
+
writeFileSync(join(tmpRoot, "src", "a.ts"), [
|
|
35
|
+
"declare function helper(): number;",
|
|
36
|
+
"export function run() {",
|
|
37
|
+
" const a = helper();",
|
|
38
|
+
" const b = helper();",
|
|
39
|
+
" return a + b;",
|
|
40
|
+
"}",
|
|
41
|
+
].join("\n"), "utf-8");
|
|
42
|
+
});
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
try {
|
|
45
|
+
rmSync(tmpRoot, { recursive: true, force: true });
|
|
46
|
+
}
|
|
47
|
+
catch { }
|
|
48
|
+
});
|
|
49
|
+
it("fresh database stamps data_version = CURRENT_DATA_VERSION on first index", async () => {
|
|
50
|
+
const cfg = getProjectConfig(tmpRoot);
|
|
51
|
+
const indexer = new Indexer(cfg);
|
|
52
|
+
try {
|
|
53
|
+
await indexer.index();
|
|
54
|
+
const v = getDataVersion(indexer.db);
|
|
55
|
+
expect(v).toBe(CURRENT_DATA_VERSION);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
indexer.close();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
it("upgrading from v1 re-extracts symbol refs", async () => {
|
|
62
|
+
// Step 1: build an index the "old" way. We create a database,
|
|
63
|
+
// set data_version = 1, and insert a single lossy symbol_ref
|
|
64
|
+
// row for 'helper' on the first call site only. This simulates
|
|
65
|
+
// what v0.2.13 would have produced.
|
|
66
|
+
const cfg = getProjectConfig(tmpRoot);
|
|
67
|
+
{
|
|
68
|
+
const indexer = new Indexer(cfg);
|
|
69
|
+
await indexer.index();
|
|
70
|
+
indexer.close();
|
|
71
|
+
}
|
|
72
|
+
// Simulate an old (v0.2.13) index by:
|
|
73
|
+
// - manually deleting all symbol_refs
|
|
74
|
+
// - inserting ONE lossy row for helper at the first call site
|
|
75
|
+
// - setting data_version = 1
|
|
76
|
+
{
|
|
77
|
+
const db = createDatabase(cfg.dbPath);
|
|
78
|
+
db.exec("DELETE FROM symbol_refs");
|
|
79
|
+
// Find the chunk id of the `run` function
|
|
80
|
+
const runChunk = db
|
|
81
|
+
.prepare("SELECT id FROM chunks WHERE name = 'run'")
|
|
82
|
+
.get();
|
|
83
|
+
if (runChunk) {
|
|
84
|
+
db.prepare("INSERT INTO symbol_refs (source_chunk_id, target_name, line) VALUES (?, ?, ?)").run(runChunk.id, "helper", 2);
|
|
85
|
+
}
|
|
86
|
+
setDataVersion(db, 1);
|
|
87
|
+
db.close();
|
|
88
|
+
}
|
|
89
|
+
// Step 2: open the index with a new Indexer. The migration
|
|
90
|
+
// should run and re-extract all references.
|
|
91
|
+
const indexer2 = new Indexer(cfg);
|
|
92
|
+
try {
|
|
93
|
+
const db = indexer2.db;
|
|
94
|
+
// data_version should now be CURRENT
|
|
95
|
+
expect(getDataVersion(db)).toBe(CURRENT_DATA_VERSION);
|
|
96
|
+
// symbol_refs should now include BOTH helper calls, not just one
|
|
97
|
+
const helperRefs = db
|
|
98
|
+
.prepare("SELECT COUNT(*) as c FROM symbol_refs WHERE target_name = 'helper'")
|
|
99
|
+
.get();
|
|
100
|
+
expect(helperRefs.c).toBeGreaterThanOrEqual(2);
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
indexer2.close();
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
it("a second Indexer construction on a current database is a no-op", async () => {
|
|
107
|
+
const cfg = getProjectConfig(tmpRoot);
|
|
108
|
+
{
|
|
109
|
+
const indexer = new Indexer(cfg);
|
|
110
|
+
await indexer.index();
|
|
111
|
+
indexer.close();
|
|
112
|
+
}
|
|
113
|
+
// Capture the symbol_refs count after the initial index
|
|
114
|
+
const db = createDatabase(cfg.dbPath);
|
|
115
|
+
const initial = db.prepare("SELECT COUNT(*) as c FROM symbol_refs").get().c;
|
|
116
|
+
db.close();
|
|
117
|
+
// Construct again — migration should skip
|
|
118
|
+
const indexer2 = new Indexer(cfg);
|
|
119
|
+
try {
|
|
120
|
+
const db2 = indexer2.db;
|
|
121
|
+
const after = db2.prepare("SELECT COUNT(*) as c FROM symbol_refs").get().c;
|
|
122
|
+
// Same count — no rebuild happened
|
|
123
|
+
expect(after).toBe(initial);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
indexer2.close();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
it("migration handles an empty database (no chunks) without erroring", () => {
|
|
130
|
+
// Case: someone installs sverklo, opens a project, but no files
|
|
131
|
+
// have been indexed yet. Database is empty. Migration should
|
|
132
|
+
// still stamp the version and return cleanly.
|
|
133
|
+
const cfg = getProjectConfig(tmpRoot);
|
|
134
|
+
const emptyIndexer = new Indexer(cfg);
|
|
135
|
+
try {
|
|
136
|
+
const db = emptyIndexer.db;
|
|
137
|
+
expect(getDataVersion(db)).toBe(CURRENT_DATA_VERSION);
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
emptyIndexer.close();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=migration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.test.js","sourceRoot":"","sources":["../../../src/indexer/migration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,9 +45,21 @@ const NEW_RE = /\bnew\s+([A-Z][a-zA-Z0-9_]{2,})/g;
|
|
|
45
45
|
*/
|
|
46
46
|
export function extractReferences(content, selfName = null) {
|
|
47
47
|
const refs = [];
|
|
48
|
-
const seen = new Set(); // dedupe within a chunk
|
|
49
48
|
const lines = content.split("\n");
|
|
50
49
|
for (let i = 0; i < lines.length; i++) {
|
|
50
|
+
// Dedupe scope is per LINE, not per chunk.
|
|
51
|
+
//
|
|
52
|
+
// Issue #13: the old implementation used a chunk-wide `seen` set,
|
|
53
|
+
// which meant a symbol called twice in the same function got one
|
|
54
|
+
// symbol_ref row at the first call site — the second call was
|
|
55
|
+
// silently dropped. That made sverklo_impact a lossy tool and
|
|
56
|
+
// caused it to under-report blast radius on any real refactor.
|
|
57
|
+
//
|
|
58
|
+
// Per-line dedupe still catches the case where two regexes (CALL_RE
|
|
59
|
+
// and NEW_RE) both fire on `new Foo()`, while letting repeat calls
|
|
60
|
+
// across lines each contribute their own row. The (chunk, name,
|
|
61
|
+
// line) UNIQUE constraint on symbol_refs prevents exact duplicates.
|
|
62
|
+
const seenOnLine = new Set();
|
|
51
63
|
const line = lines[i];
|
|
52
64
|
// Strip string literals and comments to reduce false positives
|
|
53
65
|
const stripped = stripStringsAndComments(line);
|
|
@@ -59,18 +71,18 @@ export function extractReferences(content, selfName = null) {
|
|
|
59
71
|
if (name === selfName ||
|
|
60
72
|
KEYWORDS.has(name) ||
|
|
61
73
|
COMMON_BUILTINS.has(name) ||
|
|
62
|
-
|
|
74
|
+
seenOnLine.has(name))
|
|
63
75
|
continue;
|
|
64
|
-
|
|
76
|
+
seenOnLine.add(name);
|
|
65
77
|
refs.push({ name, line: i });
|
|
66
78
|
}
|
|
67
79
|
// Constructor calls: new Foo
|
|
68
80
|
NEW_RE.lastIndex = 0;
|
|
69
81
|
while ((m = NEW_RE.exec(stripped)) !== null) {
|
|
70
82
|
const name = m[1];
|
|
71
|
-
if (name === selfName || KEYWORDS.has(name) ||
|
|
83
|
+
if (name === selfName || KEYWORDS.has(name) || seenOnLine.has(name))
|
|
72
84
|
continue;
|
|
73
|
-
|
|
85
|
+
seenOnLine.add(name);
|
|
74
86
|
refs.push({ name, line: i });
|
|
75
87
|
}
|
|
76
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbol-extractor.js","sourceRoot":"","sources":["../../../src/indexer/symbol-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,yDAAyD;AACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;IACxE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW;IAC7E,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;IACtE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IACrE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;IAC3E,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;IACtE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;IACvE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ;IAC9D,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW;IACpE,2CAA2C;IAC3C,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS;IACtE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;IAClE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO;IACtE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAC1E,CAAC,CAAC;AAEH,sDAAsD;AACtD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ;IACrE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW;IACvE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAC9D,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS;CAChD,CAAC,CAAC;AAEH,4DAA4D;AAC5D,6DAA6D;AAC7D,MAAM,OAAO,GAAG,wDAAwD,CAAC;AACzE,MAAM,MAAM,GAAG,kCAAkC,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,WAA0B,IAAI;IAE9B,MAAM,IAAI,GAAqC,EAAE,CAAC;IAClD,MAAM,
|
|
1
|
+
{"version":3,"file":"symbol-extractor.js","sourceRoot":"","sources":["../../../src/indexer/symbol-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|