sverklo 0.2.13 → 0.2.15

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 (46) hide show
  1. package/dist/src/indexer/indexer-provider-integration.test.d.ts +1 -0
  2. package/dist/src/indexer/indexer-provider-integration.test.js +142 -0
  3. package/dist/src/indexer/indexer-provider-integration.test.js.map +1 -0
  4. package/dist/src/indexer/indexer.d.ts +34 -0
  5. package/dist/src/indexer/indexer.js +107 -6
  6. package/dist/src/indexer/indexer.js.map +1 -1
  7. package/dist/src/indexer/migration.test.d.ts +1 -0
  8. package/dist/src/indexer/migration.test.js +144 -0
  9. package/dist/src/indexer/migration.test.js.map +1 -0
  10. package/dist/src/indexer/parser.js +13 -1
  11. package/dist/src/indexer/parser.js.map +1 -1
  12. package/dist/src/indexer/parser.test.d.ts +1 -0
  13. package/dist/src/indexer/parser.test.js +128 -0
  14. package/dist/src/indexer/parser.test.js.map +1 -0
  15. package/dist/src/indexer/symbol-extractor.js +17 -5
  16. package/dist/src/indexer/symbol-extractor.js.map +1 -1
  17. package/dist/src/indexer/symbol-extractor.test.d.ts +1 -0
  18. package/dist/src/indexer/symbol-extractor.test.js +88 -0
  19. package/dist/src/indexer/symbol-extractor.test.js.map +1 -0
  20. package/dist/src/search/hybrid-search.js +2 -2
  21. package/dist/src/search/hybrid-search.js.map +1 -1
  22. package/dist/src/search/hybrid-search.test.js +3 -0
  23. package/dist/src/search/hybrid-search.test.js.map +1 -1
  24. package/dist/src/search/token-budget.js +33 -5
  25. package/dist/src/search/token-budget.js.map +1 -1
  26. package/dist/src/server/tools/find-references.d.ts +4 -0
  27. package/dist/src/server/tools/find-references.js +46 -6
  28. package/dist/src/server/tools/find-references.js.map +1 -1
  29. package/dist/src/server/tools/find-references.test.d.ts +1 -0
  30. package/dist/src/server/tools/find-references.test.js +98 -0
  31. package/dist/src/server/tools/find-references.test.js.map +1 -0
  32. package/dist/src/server/tools/index-status.js +13 -13
  33. package/dist/src/server/tools/index-status.js.map +1 -1
  34. package/dist/src/server/tools/lookup.js +9 -0
  35. package/dist/src/server/tools/lookup.js.map +1 -1
  36. package/dist/src/server/tools/lookup.test.d.ts +1 -0
  37. package/dist/src/server/tools/lookup.test.js +110 -0
  38. package/dist/src/server/tools/lookup.test.js.map +1 -0
  39. package/dist/src/server/tools/recall.js +2 -2
  40. package/dist/src/server/tools/recall.js.map +1 -1
  41. package/dist/src/server/tools/remember.js +2 -2
  42. package/dist/src/server/tools/remember.js.map +1 -1
  43. package/dist/src/storage/database.d.ts +13 -0
  44. package/dist/src/storage/database.js +47 -0
  45. package/dist/src/storage/database.js.map +1 -1
  46. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { embed, cosineSimilarity } from "../../indexer/embedder.js";
1
+ import { cosineSimilarity } from "../../indexer/embedder.js";
2
2
  import { getGitState } from "../../memory/git-state.js";
3
3
  import { track } from "../../telemetry/index.js";
4
4
  const CONFLICT_THRESHOLD = 0.85;
@@ -46,7 +46,7 @@ export async function handleRemember(indexer, args) {
46
46
  // ─── Conflict detection ───
47
47
  // Check for existing active memories with high semantic similarity.
48
48
  // If same related_files or very high similarity, invalidate the old one.
49
- const [queryVector] = await embed([content]);
49
+ const [queryVector] = await indexer.embed([content]);
50
50
  const existingEmbeddings = indexer.memoryEmbeddingStore.getAll();
51
51
  const conflicts = [];
52
52
  for (const [memId, vec] of existingEmbeddings) {
@@ -1 +1 @@
1
- {"version":3,"file":"remember.js","sourceRoot":"","sources":["../../../../src/server/tools/remember.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remember.js","sourceRoot":"","sources":["../../../../src/server/tools/remember.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,15 @@
1
1
  import Database from "better-sqlite3";
2
+ export declare const CURRENT_DATA_VERSION = 2;
2
3
  export declare function createDatabase(dbPath: string): Database.Database;
4
+ /**
5
+ * Read the stored data version. Returns 0 for fresh databases that
6
+ * have never been tagged, so callers can treat any version < current
7
+ * as "migrate me".
8
+ */
9
+ export declare function getDataVersion(db: Database.Database): number;
10
+ /**
11
+ * Stamp the database with the current data version. Call after a
12
+ * migration completes (or on a fresh database after the first full
13
+ * index, so subsequent runs don't waste time re-migrating).
14
+ */
15
+ export declare function setDataVersion(db: Database.Database, version: number): void;
@@ -1,4 +1,17 @@
1
1
  import Database from "better-sqlite3";
2
+ // Current data-layer version. Bump this when existing stored data
3
+ // (not just schema shape) has become incompatible with the new code.
4
+ // The Indexer runs data migrations on startup when the stored version
5
+ // is lower than this.
6
+ //
7
+ // 1 — initial. Tables as defined in SCHEMA below.
8
+ // 2 — fix for github.com/sverklo/sverklo/issues/13: symbol_refs
9
+ // generated by v0.2.13 and earlier used chunk-wide dedupe in
10
+ // extractReferences(), which collapsed every repeat call of a
11
+ // symbol in the same chunk to one row. Upgrading triggers
12
+ // re-extraction of references from existing chunks (no file
13
+ // I/O — just regex over chunk.content).
14
+ export const CURRENT_DATA_VERSION = 2;
2
15
  const SCHEMA = `
3
16
  -- Indexed files
4
17
  CREATE TABLE IF NOT EXISTS files (
@@ -148,6 +161,15 @@ CREATE INDEX IF NOT EXISTS idx_memories_created ON memories(created_at);
148
161
  CREATE INDEX IF NOT EXISTS idx_memories_stale ON memories(is_stale);
149
162
  CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier);
150
163
  CREATE INDEX IF NOT EXISTS idx_memories_valid_until ON memories(valid_until_sha);
164
+
165
+ -- Key-value metadata. Used to track the data-layer version so we can
166
+ -- run inline migrations when the code's expectations about stored
167
+ -- data drift from what's on disk. Single-row-per-key; no schema here
168
+ -- because values are small strings.
169
+ CREATE TABLE IF NOT EXISTS meta (
170
+ key TEXT PRIMARY KEY,
171
+ value TEXT NOT NULL
172
+ );
151
173
  `;
152
174
  // Additive migrations — run after SCHEMA to upgrade existing databases
153
175
  const MIGRATIONS = [
@@ -176,4 +198,29 @@ export function createDatabase(dbPath) {
176
198
  }
177
199
  return db;
178
200
  }
201
+ /**
202
+ * Read the stored data version. Returns 0 for fresh databases that
203
+ * have never been tagged, so callers can treat any version < current
204
+ * as "migrate me".
205
+ */
206
+ export function getDataVersion(db) {
207
+ try {
208
+ const row = db
209
+ .prepare("SELECT value FROM meta WHERE key = 'data_version'")
210
+ .get();
211
+ return row ? parseInt(row.value, 10) || 0 : 0;
212
+ }
213
+ catch {
214
+ return 0;
215
+ }
216
+ }
217
+ /**
218
+ * Stamp the database with the current data version. Call after a
219
+ * migration completes (or on a fresh database after the first full
220
+ * index, so subsequent runs don't waste time re-migrating).
221
+ */
222
+ export function setDataVersion(db, version) {
223
+ db.prepare("INSERT INTO meta (key, value) VALUES ('data_version', ?) " +
224
+ "ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(String(version));
225
+ }
179
226
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqJd,CAAC;AAEF,uEAAuE;AACvE,MAAM,UAAU,GAAG;IACjB,6DAA6D;IAC7D,qDAAqD;IACrD,sDAAsD;IACtD,wDAAwD;IACxD,uDAAuD;CACxD,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,aAAa;IAE/C,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,yEAAyE;IACzE,sEAAsE;IACtE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,sBAAsB;AACtB,EAAE;AACF,oDAAoD;AACpD,kEAAkE;AAClE,mEAAmE;AACnE,oEAAoE;AACpE,gEAAgE;AAChE,kEAAkE;AAClE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Jd,CAAC;AAEF,uEAAuE;AACvE,MAAM,UAAU,GAAG;IACjB,6DAA6D;IAC7D,qDAAqD;IACrD,sDAAsD;IACtD,wDAAwD;IACxD,uDAAuD;CACxD,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,aAAa;IAE/C,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,yEAAyE;IACzE,sEAAsE;IACtE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAqB;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CAAC,mDAAmD,CAAC;aAC5D,GAAG,EAAmC,CAAC;QAC1C,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAqB,EAAE,OAAe;IACnE,EAAE,CAAC,OAAO,CACR,2DAA2D;QACzD,uDAAuD,CAC1D,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sverklo",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "description": "Sverklo — local-first code intelligence MCP server. Diff-aware MR review, risk scoring, hybrid semantic search, PageRank ranking, persistent memory. Zero config.",
5
5
  "type": "module",
6
6
  "bin": {