sverklo 0.19.0 → 0.20.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 CHANGED
@@ -82,6 +82,14 @@ If something is missing here that you'd ask about, [open an issue](https://githu
82
82
 
83
83
  ---
84
84
 
85
+ ## What's new in 0.20
86
+
87
+ - **Contradiction detection on the bi-temporal memory layer.** `sverklo_memories mode:"conflicts"` surfaces pairs of active memories that share a pin (file path or symbol name) and may contradict — e.g., "JWT in middleware" vs "JWT in route handler" both pinned to `src/auth.ts`. Restricted to decision/preference/pattern categories (procedural/context are additive, not contradicting). Same-SHA pairs are skipped. Sorted by shared-pin count and age. Conservative by design: surfaces *candidates* for the agent or human to review, not auto-resolution. The bi-temporal model already preserved both sides of the contradiction; this just makes them findable.
88
+
89
+ ## What's new in 0.19
90
+
91
+ - **C# (.cs) language support** — community contribution by [@NerdChieftain](https://github.com/NerdChieftain) in [#22](https://github.com/sverklo/sverklo/pull/22). Tree-sitter (when grammar installed) plus a regex fallback parser. Indexes namespaces (block-scoped + C# 10+ file-scoped), classes, structs, records (plain / `record class` / `record struct`), interfaces, enums, methods, constructors, and `using` directives. Adds `tree-sitter-c-sharp@0.23.5` WASM grammar to the install set. **Sverklo now supports 12 languages.**
92
+
85
93
  ## What's new in 0.18
86
94
 
87
95
  - **Vue.js (.vue) support.** Single-file components are now first-class: the `<script>` block parses through the existing TS/JS pipeline (with line remapping back to the SFC), Composition API helpers (`ref`, `computed`, `reactive`, `defineProps`, …) are indexed as symbols, and PascalCase template tags emit relative imports so PageRank sees component graphs. Also fixes a preexisting TS bug where `import type { X } from 'y'` was missed.
@@ -334,7 +342,7 @@ Real measurements on real codebases. Reproducible via `npm run bench` ([methodol
334
342
 
335
343
  - **Search p95 stays under 26 ms** even on a 4k-file monorepo
336
344
  - **Impact analysis is sub-millisecond** — indexed SQL join, not a string scan
337
- - **11 languages:** TS, JS, Vue, Python, Go, Rust, Java, C, C++, Ruby, PHP
345
+ - **12 languages:** TS, JS, Vue, Python, Go, Rust, Java, C, C++, Ruby, PHP, C#
338
346
 
339
347
  ### Retrieval benchmark — bench:primitives
340
348
 
@@ -352,18 +360,38 @@ A tuned grep beats sverklo on F1. Sverklo wins decisively on token economy (62×
352
360
 
353
361
  ## Quick Start
354
362
 
355
- ### Claude Code
363
+ Three ways to install. Pick whichever matches your setup.
364
+
365
+ <details open>
366
+ <summary><b>⚡️ One-click install (Cursor / VS Code) — fastest</b></summary>
367
+ <br/>
368
+
369
+ [![Install in Cursor](https://img.shields.io/badge/Cursor-Install_MCP-F14C28?style=for-the-badge&logo=cursor&logoColor=white)](cursor://anysphere.cursor-deeplink/mcp/install?name=sverklo&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInN2ZXJrbG8iXX0=) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_MCP-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=sverklo&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22sverklo%22%5D%7D)
370
+
371
+ Click the badge for your editor. Cursor / VS Code prompt to confirm, then sverklo's MCP config is written automatically. Restart the editor and the 37 tools appear in the tool list. **No npm install required** — `npx` resolves it on first use.
372
+
373
+ </details>
374
+
375
+ <details>
376
+ <summary><b>📦 Global install (Claude Code, Windsurf, Zed, Antigravity, any MCP client)</b></summary>
377
+ <br/>
356
378
 
357
379
  ```bash
358
380
  npm install -g sverklo
359
381
  cd your-project && sverklo init
360
382
  ```
361
383
 
362
- Creates `.mcp.json` at your project root and appends sverklo instructions to `CLAUDE.md`. Safe to re-run. If sverklo doesn't appear in `/mcp` after restart, run `sverklo doctor`.
384
+ `sverklo init` auto-detects which AI coding agents you have (Claude Code, Cursor, Windsurf, Zed, Antigravity) and writes the right MCP config files. Idempotent — safe to re-run. If sverklo doesn't appear in your agent after restart, run `sverklo doctor`.
363
385
 
364
- ### Cursor / Windsurf / VS Code / JetBrains
386
+ **Per-agent config locations** (`sverklo init` writes these for you):
387
+ - Claude Code: `.mcp.json` at project root + appends to `CLAUDE.md` (or `AGENTS.md` if present)
388
+ - Cursor: `.cursor/mcp.json`
389
+ - Windsurf: `~/.windsurf/mcp.json`
390
+ - VS Code: `.vscode/mcp.json`
391
+ - JetBrains: Settings → Tools → MCP Servers
392
+ - Antigravity: `~/.gemini/antigravity/mcp_config.json` (global; re-run `sverklo init` per project)
365
393
 
366
- Use the full binary path (`which sverklo`) to avoid PATH issues in spawned subprocesses:
394
+ For agents we don't auto-detect, drop this in their MCP config:
367
395
 
368
396
  ```json
369
397
  {
@@ -376,19 +404,43 @@ Use the full binary path (`which sverklo`) to avoid PATH issues in spawned subpr
376
404
  }
377
405
  ```
378
406
 
379
- Config locations: `.cursor/mcp.json`, `~/.windsurf/mcp.json`, `.vscode/mcp.json`, or JetBrains Settings -> Tools -> MCP Servers.
407
+ Use the full binary path (`which sverklo`) some clients spawn subprocesses without inheriting `$PATH`.
408
+
409
+ </details>
410
+
411
+ <details>
412
+ <summary><b>🔧 From source (contributors / custom builds)</b></summary>
413
+ <br/>
414
+
415
+ ```bash
416
+ git clone https://github.com/sverklo/sverklo.git
417
+ cd sverklo
418
+ npm install
419
+ npm run build
420
+ npm link
421
+ sverklo init # in your project directory
422
+ ```
423
+
424
+ Use this if you're contributing, debugging the indexer, or want to run a not-yet-published build. The `npm link` step makes `sverklo` resolvable globally from the local checkout.
425
+
426
+ To run the bench:
427
+ ```bash
428
+ npm run bench:primitives
429
+ ```
380
430
 
381
- ### Antigravity
431
+ Output lands in `benchmark/results/<timestamp>/`.
382
432
 
383
- `sverklo init` writes the global config at `~/.gemini/antigravity/mcp_config.json`. Because Antigravity lacks per-project MCP config, you'll need to re-run `sverklo init` from each project or use separate keys (`sverklo-projA`, `sverklo-projB`).
433
+ </details>
384
434
 
385
- ### Any MCP client
435
+ ### Any MCP client (one-shot via `npx`)
386
436
 
387
437
  ```bash
388
438
  npx sverklo /path/to/your/project
389
439
  ```
390
440
 
391
- > **First run:** The ONNX embedding model (~90 MB) downloads automatically. Takes ~30 seconds on first launch, then instant.
441
+ No global install needed. `npx` resolves and runs sverklo on first call. Use this in CI, ephemeral sandboxes, or any host where you don't want a global install.
442
+
443
+ > **First run note:** The ONNX embedding model (~90 MB) downloads automatically on first launch. Takes ~30 seconds, then every subsequent run is offline-capable.
392
444
 
393
445
  ---
394
446
 
@@ -5,6 +5,11 @@ export declare const memoriesTool: {
5
5
  inputSchema: {
6
6
  type: "object";
7
7
  properties: {
8
+ mode: {
9
+ type: string;
10
+ enum: string[];
11
+ description: string;
12
+ };
8
13
  category: {
9
14
  type: string;
10
15
  enum: string[];
@@ -1,26 +1,40 @@
1
1
  export const memoriesTool = {
2
2
  name: "sverklo_memories",
3
- description: "List all memories for the current project. Shows memory health: staleness, confidence, access frequency.",
3
+ description: "List all memories for the current project, or surface conflict candidates. " +
4
+ "Default mode shows memory health (staleness, confidence, access frequency). " +
5
+ "Pass `mode: \"conflicts\"` to surface pairs of active memories that share a pin and may " +
6
+ "contradict — the bi-temporal model preserves both, so this is a review prompt for the " +
7
+ "agent or human, not an auto-resolution.",
4
8
  inputSchema: {
5
9
  type: "object",
6
10
  properties: {
11
+ mode: {
12
+ type: "string",
13
+ enum: ["list", "conflicts"],
14
+ description: "list (default): show active memories. conflicts: pairs of active memories sharing " +
15
+ "a pin that may contradict (decision/preference/pattern categories only).",
16
+ },
7
17
  category: {
8
18
  type: "string",
9
19
  enum: ["decision", "preference", "pattern", "context", "todo", "procedural", "any"],
10
- description: "Filter by category (default: 'any')",
20
+ description: "Filter by category in list mode (default: 'any')",
11
21
  },
12
22
  limit: {
13
23
  type: "number",
14
- description: "Max memories to return (default: 50)",
24
+ description: "Max memories (list mode) or conflict pairs (conflicts mode) to return (default: 50 / 25)",
15
25
  },
16
26
  stale_only: {
17
27
  type: "boolean",
18
- description: "Only show stale memories (default: false)",
28
+ description: "List mode: only show stale memories (default: false)",
19
29
  },
20
30
  },
21
31
  },
22
32
  };
23
33
  export function handleMemories(indexer, args) {
34
+ const mode = args.mode || "list";
35
+ if (mode === "conflicts") {
36
+ return formatConflicts(indexer, args.limit || 25);
37
+ }
24
38
  const category = args.category || "any";
25
39
  const limit = args.limit || 50;
26
40
  const staleOnly = args.stale_only || false;
@@ -47,6 +61,37 @@ export function handleMemories(indexer, args) {
47
61
  });
48
62
  return header + rows.join("\n\n");
49
63
  }
64
+ function formatConflicts(indexer, limit) {
65
+ const pairs = indexer.memoryStore.findConflicts(limit);
66
+ if (pairs.length === 0) {
67
+ return ("No conflict candidates detected. Either there are no active memories sharing a pin, " +
68
+ "or the memories that do share pins are non-contradictory (procedural/context categories " +
69
+ "are excluded by design — they're additive, not contradicting).");
70
+ }
71
+ const out = [
72
+ `## Memory conflict candidates (${pairs.length})`,
73
+ "",
74
+ "_These are pairs of active memories that share at least one pin and live in a category " +
75
+ "where contradiction is meaningful (decision / preference / pattern). The bi-temporal model " +
76
+ "preserves both — the agent or human picks which to invalidate via `sverklo_forget` or " +
77
+ "supersede via a fresh `sverklo_remember` call._",
78
+ "",
79
+ ];
80
+ for (let i = 0; i < pairs.length; i++) {
81
+ const { a, b, sharedPins } = pairs[i];
82
+ const ageA = formatAge(a.created_at);
83
+ const ageB = formatAge(b.created_at);
84
+ out.push(`### ${i + 1}. Shared pins: ${sharedPins.map((p) => `\`${p}\``).join(", ")}`);
85
+ out.push("");
86
+ out.push(`**#${a.id}** [${a.category}] · ${ageA} ago · ${a.valid_from_sha?.slice(0, 7) || "no SHA"}`);
87
+ out.push(`> ${a.content.slice(0, 200)}${a.content.length > 200 ? "…" : ""}`);
88
+ out.push("");
89
+ out.push(`**#${b.id}** [${b.category}] · ${ageB} ago · ${b.valid_from_sha?.slice(0, 7) || "no SHA"}`);
90
+ out.push(`> ${b.content.slice(0, 200)}${b.content.length > 200 ? "…" : ""}`);
91
+ out.push("");
92
+ }
93
+ return out.join("\n");
94
+ }
50
95
  function formatAge(timestamp) {
51
96
  const ms = Date.now() - timestamp;
52
97
  const mins = Math.floor(ms / 60000);
@@ -1 +1 @@
1
- {"version":3,"file":"memories.js","sourceRoot":"","sources":["../../../../src/server/tools/memories.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,0GAA0G;IAC5G,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;gBACnF,WAAW,EAAE,qCAAqC;aACnD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,2CAA2C;aACzD;SACF;KACF;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,IAA6B;IAE7B,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAmC,IAAI,KAAK,CAAC;IACpE,MAAM,KAAK,GAAI,IAAI,CAAC,KAAgB,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAI,IAAI,CAAC,UAAsB,IAAI,KAAK,CAAC;IAExD,IAAI,QAAkB,CAAC;IAEvB,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC;SAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9B,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,QAA0B,EAAE,KAAK,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,+FAA+F,CAAC;IACzG,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,gBAAgB,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAEpG,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAEpC,OAAO,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC,UAAU,YAAY,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IACjN,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"memories.js","sourceRoot":"","sources":["../../../../src/server/tools/memories.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,39 @@ export declare class MemoryStore {
37
37
  getById(id: number): Memory | undefined;
38
38
  getAll(limit?: number): Memory[];
39
39
  getByCategory(category: MemoryCategory, limit?: number): Memory[];
40
+ /**
41
+ * Find pairs of active memories that may contradict each other.
42
+ *
43
+ * v0.20 introduces conflict detection on the bi-temporal memory layer.
44
+ * Two memories are flagged as a conflict-candidate when they:
45
+ * 1. are both active (`valid_until_sha IS NULL`)
46
+ * 2. share at least one pin (file path or symbol name)
47
+ * 3. have category "decision", "preference", or "pattern" — the
48
+ * categories where contradiction is meaningful (procedural and
49
+ * context memories are usually additive, not contradicting)
50
+ * 4. were authored at different times (different `valid_from_sha`)
51
+ *
52
+ * The detection is intentionally conservative: it surfaces *candidates*,
53
+ * not confirmed contradictions. The agent or human reviewer decides
54
+ * whether the pair actually contradicts (e.g., "JWT in middleware" vs
55
+ * "JWT in route handler" pinned to the same file IS a contradiction;
56
+ * "validate input" vs "log all errors" pinned to the same file IS NOT).
57
+ *
58
+ * Returns pairs sorted by:
59
+ * 1. number of shared pins (more shared = stronger signal)
60
+ * 2. recency of the older memory (older = more likely to be stale)
61
+ *
62
+ * The semantic-similarity component (cosine over content embeddings)
63
+ * is intentionally NOT in this first version — it requires loading
64
+ * embeddings during the query, and the pin-overlap signal is already
65
+ * load-bearing enough on real corpora. Adding embedding-similarity
66
+ * is a v0.21 extension if pin-overlap proves too noisy in practice.
67
+ */
68
+ findConflicts(limit?: number): Array<{
69
+ a: Memory;
70
+ b: Memory;
71
+ sharedPins: string[];
72
+ }>;
40
73
  delete(id: number): boolean;
41
74
  /**
42
75
  * Bi-temporal invalidation — marks a memory as superseded rather than deleting it.
@@ -1,3 +1,18 @@
1
+ // Parse the pins JSON column into a Set for O(1) overlap checks.
2
+ // Returns an empty Set on null/undefined/malformed input.
3
+ function parsePinsSet(pins) {
4
+ if (!pins)
5
+ return new Set();
6
+ try {
7
+ const parsed = JSON.parse(pins);
8
+ if (!Array.isArray(parsed))
9
+ return new Set();
10
+ return new Set(parsed.filter((p) => typeof p === "string"));
11
+ }
12
+ catch {
13
+ return new Set();
14
+ }
15
+ }
1
16
  // Default mapping from category → kind. Sprint 9: episodic/semantic/procedural
2
17
  // is orthogonal to category — we just need a sensible default for old call
3
18
  // sites that don't pass `kind` explicitly.
@@ -119,6 +134,78 @@ export class MemoryStore {
119
134
  getByCategory(category, limit = 50) {
120
135
  return this.getByCategoryStmt.all(category, limit);
121
136
  }
137
+ /**
138
+ * Find pairs of active memories that may contradict each other.
139
+ *
140
+ * v0.20 introduces conflict detection on the bi-temporal memory layer.
141
+ * Two memories are flagged as a conflict-candidate when they:
142
+ * 1. are both active (`valid_until_sha IS NULL`)
143
+ * 2. share at least one pin (file path or symbol name)
144
+ * 3. have category "decision", "preference", or "pattern" — the
145
+ * categories where contradiction is meaningful (procedural and
146
+ * context memories are usually additive, not contradicting)
147
+ * 4. were authored at different times (different `valid_from_sha`)
148
+ *
149
+ * The detection is intentionally conservative: it surfaces *candidates*,
150
+ * not confirmed contradictions. The agent or human reviewer decides
151
+ * whether the pair actually contradicts (e.g., "JWT in middleware" vs
152
+ * "JWT in route handler" pinned to the same file IS a contradiction;
153
+ * "validate input" vs "log all errors" pinned to the same file IS NOT).
154
+ *
155
+ * Returns pairs sorted by:
156
+ * 1. number of shared pins (more shared = stronger signal)
157
+ * 2. recency of the older memory (older = more likely to be stale)
158
+ *
159
+ * The semantic-similarity component (cosine over content embeddings)
160
+ * is intentionally NOT in this first version — it requires loading
161
+ * embeddings during the query, and the pin-overlap signal is already
162
+ * load-bearing enough on real corpora. Adding embedding-similarity
163
+ * is a v0.21 extension if pin-overlap proves too noisy in practice.
164
+ */
165
+ findConflicts(limit = 25) {
166
+ const candidates = this.db
167
+ .prepare(`
168
+ SELECT * FROM memories
169
+ WHERE valid_until_sha IS NULL
170
+ AND pins IS NOT NULL
171
+ AND pins != '[]'
172
+ AND category IN ('decision', 'preference', 'pattern')
173
+ ORDER BY created_at DESC
174
+ `)
175
+ .all();
176
+ const pairs = [];
177
+ for (let i = 0; i < candidates.length; i++) {
178
+ const a = candidates[i];
179
+ const aPins = parsePinsSet(a.pins);
180
+ if (aPins.size === 0)
181
+ continue;
182
+ for (let j = i + 1; j < candidates.length; j++) {
183
+ const b = candidates[j];
184
+ // Skip pairs from the same SHA — those are co-recorded by the same
185
+ // remember call, not divergent beliefs.
186
+ if (a.valid_from_sha && a.valid_from_sha === b.valid_from_sha)
187
+ continue;
188
+ const bPins = parsePinsSet(b.pins);
189
+ const shared = [];
190
+ for (const pin of aPins) {
191
+ if (bPins.has(pin))
192
+ shared.push(pin);
193
+ }
194
+ if (shared.length === 0)
195
+ continue;
196
+ pairs.push({ a, b, sharedPins: shared });
197
+ }
198
+ }
199
+ pairs.sort((x, y) => {
200
+ const dShared = y.sharedPins.length - x.sharedPins.length;
201
+ if (dShared !== 0)
202
+ return dShared;
203
+ const olderX = Math.min(x.a.created_at, x.b.created_at);
204
+ const olderY = Math.min(y.a.created_at, y.b.created_at);
205
+ return olderX - olderY;
206
+ });
207
+ return pairs.slice(0, limit);
208
+ }
122
209
  delete(id) {
123
210
  const result = this.deleteStmt.run(id);
124
211
  return result.changes > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../../src/storage/memory-store.ts"],"names":[],"mappings":"AAGA,+EAA+E;AAC/E,2EAA2E;AAC3E,2CAA2C;AAC3C,SAAS,cAAc,CAAC,QAAwB;IAC9C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,YAAY;YACf,mEAAmE;YACnE,+DAA+D;YAC/D,sCAAsC;YACtC,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,WAAW;IAkBF;IAjBZ,UAAU,CAAqB;IAC/B,WAAW,CAAqB;IAChC,UAAU,CAAqB;IAC/B,iBAAiB,CAAqB;IACtC,UAAU,CAAqB;IAC/B,UAAU,CAAqB;IAC/B,aAAa,CAAqB;IAClC,eAAe,CAAqB;IACpC,aAAa,CAAqB;IAClC,YAAY,CAAqB;IACjC,cAAc,CAAqB;IACnC,WAAW,CAAqB;IAChC,WAAW,CAAqB;IAChC,aAAa,CAAqB;IAClC,WAAW,CAAqB;IAChC,iBAAiB,CAAqB;IAE9C,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QACvC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACrE,qDAAqD;QACrD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,uFAAuF,CAAC,CAAC;QACtH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CACjC,wGAAwG,CACzG,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAC1B,wEAAwE,CACzE,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;KAO/B,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,CAC/B,qFAAqF,CACtF,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAC7B,+CAA+C,CAChD,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,CAC5B,gGAAgG,CACjG,CAAC;QACF,yEAAyE;QACzE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC;;;;KAIhC,CAAC,CAAC;QACH,mCAAmC;QACnC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;KAK7B,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAC7B,uFAAuF,CACxF,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC3E,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CACjC,iDAAiD,CAClD,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,aAAa,CAAC,EAAU,EAAE,cAAsB;QAC9C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,8CAA8C,CAAC;aACvD,GAAG,CAAC,EAAE,CAA8C,CAAC;QACxD,OAAO,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,MAAM,CACJ,QAAwB,EACxB,OAAe,EACf,IAAqB,EACrB,UAAkB,EAClB,MAAqB,EACrB,SAAwB,EACxB,YAA6B,EAC7B,OAAmB,SAAS,EAC5B,IAAiB;QAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAChC,QAAQ,EACR,OAAO,EACP,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAClC,UAAU,EACV,MAAM,EACN,SAAS,EACT,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAClD,GAAG,EACH,GAAG,EACH,GAAG,EACH,IAAI,EACJ,MAAM,EACN,YAAY,CACb,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,sCAAsC;IACtC,SAAS,CAAC,IAAgB,EAAE,QAAgB,EAAE;QAC5C,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CACN,oGAAoG,CACrG;aACA,GAAG,CAAC,IAAI,EAAE,KAAK,CAAa,CAAC;IAClC,CAAC;IAED,uCAAuC;IACvC,OAAO,CAAC,EAAU,EAAE,IAAgB;QAClC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAI,EAAW;QACrB,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAuB,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,QAAgB,EAAE;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAa,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,QAAwB,EAAE,QAAgB,EAAE;QACxD,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAa,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,EAAU,EAAE,UAAyB,EAAE,eAA8B,IAAI;QAClF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,CAAC,QAAgB,EAAE;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAa,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,IAAgB;QAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,OAAe,EAAE,IAAe;QACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,OAAO,EACP,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAClC,IAAI,CAAC,GAAG,EAAE,EACV,EAAE,CACH,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,QAAgB,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,KAAK;iBACpB,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;iBACtC,KAAK,CAAC,KAAK,CAAC;iBACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;iBACpB,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,IAAI,CAAC,SAAS;gBAAE,OAAO,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAkC,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,KAAc;QAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAc,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,IAAc;QAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAc,EAAE,QAAgB,EAAE;QACzC,4DAA4D;QAC5D,wDAAwD;QACxD,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CACN;;;iBAGS,CACV;aACA,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAa,CAAC;IACnE,CAAC;IAED,KAAK;QACH,OACE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC,GAAG,EACxF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB,GAAG;QAC7B,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CAAC,yDAAyD,CAAC;aAClE,GAAG,CAAC,KAAK,CAAa,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../../src/storage/memory-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sverklo",
3
3
  "mcpName": "io.github.sverklo/sverklo",
4
- "version": "0.19.0",
4
+ "version": "0.20.0",
5
5
  "description": "Sverklo — local-first code intelligence MCP server. Diff-aware MR review, risk scoring, hybrid semantic search, PageRank ranking, persistent memory. Zero config.",
6
6
  "type": "module",
7
7
  "bin": {