causantic 0.9.3 → 0.10.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 +70 -56
- package/dist/cli/skill-templates.d.ts.map +1 -1
- package/dist/cli/skill-templates.js +23 -18
- package/dist/cli/skill-templates.js.map +1 -1
- package/dist/clusters/cluster-manager.d.ts +16 -0
- package/dist/clusters/cluster-manager.d.ts.map +1 -1
- package/dist/clusters/cluster-manager.js +119 -1
- package/dist/clusters/cluster-manager.js.map +1 -1
- package/dist/config/loader.d.ts +16 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +51 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/memory-config.d.ts +26 -0
- package/dist/config/memory-config.d.ts.map +1 -1
- package/dist/config/memory-config.js +22 -0
- package/dist/config/memory-config.js.map +1 -1
- package/dist/eval/experiments/embedding-model-comparison/run-experiment.d.ts +20 -0
- package/dist/eval/experiments/embedding-model-comparison/run-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/embedding-model-comparison/run-experiment.js +289 -0
- package/dist/eval/experiments/embedding-model-comparison/run-experiment.js.map +1 -0
- package/dist/eval/experiments/index-differentiation/alignment-analysis.d.ts +53 -0
- package/dist/eval/experiments/index-differentiation/alignment-analysis.d.ts.map +1 -0
- package/dist/eval/experiments/index-differentiation/alignment-analysis.js +91 -0
- package/dist/eval/experiments/index-differentiation/alignment-analysis.js.map +1 -0
- package/dist/eval/experiments/index-differentiation/discrimination-test.d.ts +24 -0
- package/dist/eval/experiments/index-differentiation/discrimination-test.d.ts.map +1 -0
- package/dist/eval/experiments/index-differentiation/discrimination-test.js +79 -0
- package/dist/eval/experiments/index-differentiation/discrimination-test.js.map +1 -0
- package/dist/eval/experiments/index-differentiation/index.d.ts +11 -0
- package/dist/eval/experiments/index-differentiation/index.d.ts.map +1 -0
- package/dist/eval/experiments/index-differentiation/index.js +8 -0
- package/dist/eval/experiments/index-differentiation/index.js.map +1 -0
- package/dist/eval/experiments/index-differentiation/refinement-test.d.ts +32 -0
- package/dist/eval/experiments/index-differentiation/refinement-test.d.ts.map +1 -0
- package/dist/eval/experiments/index-differentiation/refinement-test.js +203 -0
- package/dist/eval/experiments/index-differentiation/refinement-test.js.map +1 -0
- package/dist/eval/experiments/index-differentiation/run-experiment.d.ts +20 -0
- package/dist/eval/experiments/index-differentiation/run-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/index-differentiation/run-experiment.js +338 -0
- package/dist/eval/experiments/index-differentiation/run-experiment.js.map +1 -0
- package/dist/eval/experiments/index-differentiation/similarity-analysis.d.ts +31 -0
- package/dist/eval/experiments/index-differentiation/similarity-analysis.d.ts.map +1 -0
- package/dist/eval/experiments/index-differentiation/similarity-analysis.js +60 -0
- package/dist/eval/experiments/index-differentiation/similarity-analysis.js.map +1 -0
- package/dist/eval/experiments/index-differentiation/types.d.ts +114 -0
- package/dist/eval/experiments/index-differentiation/types.d.ts.map +1 -0
- package/dist/eval/experiments/index-differentiation/types.js +8 -0
- package/dist/eval/experiments/index-differentiation/types.js.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-experiment.d.ts +19 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-experiment.js +328 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-experiment.js.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-generator.d.ts +27 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-generator.d.ts.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-generator.js +154 -0
- package/dist/eval/experiments/index-vs-chunk/jeopardy-generator.js.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/query-generator.d.ts +23 -0
- package/dist/eval/experiments/index-vs-chunk/query-generator.d.ts.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/query-generator.js +113 -0
- package/dist/eval/experiments/index-vs-chunk/query-generator.js.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/run-experiment.d.ts +17 -0
- package/dist/eval/experiments/index-vs-chunk/run-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/run-experiment.js +341 -0
- package/dist/eval/experiments/index-vs-chunk/run-experiment.js.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/types.d.ts +71 -0
- package/dist/eval/experiments/index-vs-chunk/types.d.ts.map +1 -0
- package/dist/eval/experiments/index-vs-chunk/types.js +8 -0
- package/dist/eval/experiments/index-vs-chunk/types.js.map +1 -0
- package/dist/eval/experiments/pipeline-dropout/run-experiment.d.ts +18 -0
- package/dist/eval/experiments/pipeline-dropout/run-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/pipeline-dropout/run-experiment.js +347 -0
- package/dist/eval/experiments/pipeline-dropout/run-experiment.js.map +1 -0
- package/dist/eval/experiments/rescorer-ceiling/analyze-misses.d.ts +17 -0
- package/dist/eval/experiments/rescorer-ceiling/analyze-misses.d.ts.map +1 -0
- package/dist/eval/experiments/rescorer-ceiling/analyze-misses.js +247 -0
- package/dist/eval/experiments/rescorer-ceiling/analyze-misses.js.map +1 -0
- package/dist/eval/experiments/rescorer-ceiling/benchmark-rescorers.d.ts +18 -0
- package/dist/eval/experiments/rescorer-ceiling/benchmark-rescorers.d.ts.map +1 -0
- package/dist/eval/experiments/rescorer-ceiling/benchmark-rescorers.js +443 -0
- package/dist/eval/experiments/rescorer-ceiling/benchmark-rescorers.js.map +1 -0
- package/dist/eval/experiments/rescorer-ceiling/run-experiment.d.ts +16 -0
- package/dist/eval/experiments/rescorer-ceiling/run-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/rescorer-ceiling/run-experiment.js +226 -0
- package/dist/eval/experiments/rescorer-ceiling/run-experiment.js.map +1 -0
- package/dist/index-entries/index-generator.d.ts +74 -0
- package/dist/index-entries/index-generator.d.ts.map +1 -0
- package/dist/index-entries/index-generator.js +323 -0
- package/dist/index-entries/index-generator.js.map +1 -0
- package/dist/index-entries/index-refresher.d.ts +54 -0
- package/dist/index-entries/index-refresher.d.ts.map +1 -0
- package/dist/index-entries/index-refresher.js +203 -0
- package/dist/index-entries/index-refresher.js.map +1 -0
- package/dist/index-entries/index.d.ts +6 -0
- package/dist/index-entries/index.d.ts.map +1 -0
- package/dist/index-entries/index.js +6 -0
- package/dist/index-entries/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest/index-entry-hook.d.ts +15 -0
- package/dist/ingest/index-entry-hook.d.ts.map +1 -0
- package/dist/ingest/index-entry-hook.js +84 -0
- package/dist/ingest/index-entry-hook.js.map +1 -0
- package/dist/ingest/ingest-session.d.ts.map +1 -1
- package/dist/ingest/ingest-session.js +72 -18
- package/dist/ingest/ingest-session.js.map +1 -1
- package/dist/ingest/session-state.d.ts +49 -0
- package/dist/ingest/session-state.d.ts.map +1 -0
- package/dist/ingest/session-state.js +158 -0
- package/dist/ingest/session-state.js.map +1 -0
- package/dist/maintenance/scheduler.d.ts.map +1 -1
- package/dist/maintenance/scheduler.js +25 -0
- package/dist/maintenance/scheduler.js.map +1 -1
- package/dist/maintenance/tasks/backfill-index.d.ts +27 -0
- package/dist/maintenance/tasks/backfill-index.d.ts.map +1 -0
- package/dist/maintenance/tasks/backfill-index.js +44 -0
- package/dist/maintenance/tasks/backfill-index.js.map +1 -0
- package/dist/mcp/tools.d.ts +4 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +115 -7
- package/dist/mcp/tools.js.map +1 -1
- package/dist/models/embedder.js +2 -2
- package/dist/models/embedder.js.map +1 -1
- package/dist/models/model-registry.d.ts +2 -0
- package/dist/models/model-registry.d.ts.map +1 -1
- package/dist/models/model-registry.js +15 -0
- package/dist/models/model-registry.js.map +1 -1
- package/dist/repomap/cache.d.ts +58 -0
- package/dist/repomap/cache.d.ts.map +1 -0
- package/dist/repomap/cache.js +101 -0
- package/dist/repomap/cache.js.map +1 -0
- package/dist/repomap/graph.d.ts +54 -0
- package/dist/repomap/graph.d.ts.map +1 -0
- package/dist/repomap/graph.js +113 -0
- package/dist/repomap/graph.js.map +1 -0
- package/dist/repomap/index.d.ts +83 -0
- package/dist/repomap/index.d.ts.map +1 -0
- package/dist/repomap/index.js +99 -0
- package/dist/repomap/index.js.map +1 -0
- package/dist/repomap/parser.d.ts +43 -0
- package/dist/repomap/parser.d.ts.map +1 -0
- package/dist/repomap/parser.js +994 -0
- package/dist/repomap/parser.js.map +1 -0
- package/dist/repomap/regex-parser.d.ts +24 -0
- package/dist/repomap/regex-parser.d.ts.map +1 -0
- package/dist/repomap/regex-parser.js +190 -0
- package/dist/repomap/regex-parser.js.map +1 -0
- package/dist/repomap/renderer.d.ts +40 -0
- package/dist/repomap/renderer.d.ts.map +1 -0
- package/dist/repomap/renderer.js +163 -0
- package/dist/repomap/renderer.js.map +1 -0
- package/dist/repomap/scanner.d.ts +32 -0
- package/dist/repomap/scanner.d.ts.map +1 -0
- package/dist/repomap/scanner.js +171 -0
- package/dist/repomap/scanner.js.map +1 -0
- package/dist/retrieval/chain-assembler.d.ts.map +1 -1
- package/dist/retrieval/chain-assembler.js +22 -3
- package/dist/retrieval/chain-assembler.js.map +1 -1
- package/dist/retrieval/index.d.ts +2 -0
- package/dist/retrieval/index.d.ts.map +1 -1
- package/dist/retrieval/index.js +2 -0
- package/dist/retrieval/index.js.map +1 -1
- package/dist/retrieval/mmr.d.ts +1 -0
- package/dist/retrieval/mmr.d.ts.map +1 -1
- package/dist/retrieval/mmr.js +35 -1
- package/dist/retrieval/mmr.js.map +1 -1
- package/dist/retrieval/search-assembler.d.ts +10 -1
- package/dist/retrieval/search-assembler.d.ts.map +1 -1
- package/dist/retrieval/search-assembler.js +249 -81
- package/dist/retrieval/search-assembler.js.map +1 -1
- package/dist/retrieval/session-reconstructor.d.ts +36 -0
- package/dist/retrieval/session-reconstructor.d.ts.map +1 -1
- package/dist/retrieval/session-reconstructor.js +126 -0
- package/dist/retrieval/session-reconstructor.js.map +1 -1
- package/dist/storage/db.d.ts.map +1 -1
- package/dist/storage/db.js +15 -0
- package/dist/storage/db.js.map +1 -1
- package/dist/storage/index-entry-store.d.ts +71 -0
- package/dist/storage/index-entry-store.d.ts.map +1 -0
- package/dist/storage/index-entry-store.js +275 -0
- package/dist/storage/index-entry-store.js.map +1 -0
- package/dist/storage/index.d.ts +5 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +5 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/migrations.d.ts.map +1 -1
- package/dist/storage/migrations.js +102 -0
- package/dist/storage/migrations.js.map +1 -1
- package/dist/storage/schema.sql +68 -2
- package/dist/storage/session-state-store.d.ts +61 -0
- package/dist/storage/session-state-store.d.ts.map +1 -0
- package/dist/storage/session-state-store.js +119 -0
- package/dist/storage/session-state-store.js.map +1 -0
- package/dist/storage/types.d.ts +50 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/vector-store.d.ts +17 -2
- package/dist/storage/vector-store.d.ts.map +1 -1
- package/dist/storage/vector-store.js +96 -36
- package/dist/storage/vector-store.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ No cloud. No data leaves your machine. Runs entirely on your hardware with optio
|
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
15
|
<strong>Long-term episodic memory for Claude Code</strong><br/>
|
|
16
|
-
<sub>Local-first ·
|
|
16
|
+
<sub>Local-first · Keyword-first retrieval · Causal chain walking · Structural repo map</sub>
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
## Quick Start
|
|
@@ -38,14 +38,15 @@ Developers using Claude Code who want their AI assistant to **remember across se
|
|
|
38
38
|
|
|
39
39
|
## Why Causantic?
|
|
40
40
|
|
|
41
|
-
Most AI memory systems use vector embeddings for similarity search. Causantic
|
|
41
|
+
Most AI memory systems use vector embeddings for similarity search. Causantic takes a different approach — **keyword-first (BM25) retrieval** as the default, a **causal graph** that tracks _relationships_ between memory chunks, a **structural repo map** for code orientation, and **session state capture** for instant resumption. Vector search and HDBSCAN clustering are available as optional enrichment.
|
|
42
42
|
|
|
43
43
|
| | Vector Search Only | Causantic |
|
|
44
44
|
| ------------------------------------ | ------------------ | ------------------------------------------------- |
|
|
45
|
-
| **Finds
|
|
46
|
-
| **Finds
|
|
45
|
+
| **Finds lexically relevant content** | No | Yes (BM25 keyword search — default) |
|
|
46
|
+
| **Finds similar content** | Yes | Yes (optional vector enrichment) |
|
|
47
47
|
| **Finds related context** | No | Yes (causal edges) |
|
|
48
|
-
| **
|
|
48
|
+
| **Structural code orientation** | No | Yes (repo map — definitions, references, ranking) |
|
|
49
|
+
| **Session continuity** | No | Yes (session state capture + briefing mode) |
|
|
49
50
|
| **Temporal awareness** | Wall-clock decay | Episodic chain walking |
|
|
50
51
|
| **Context augmentation** | 1× | **2.46×** (chain walking adds episodic narrative) |
|
|
51
52
|
| **Handles project switches** | Breaks continuity | Preserves causality |
|
|
@@ -53,14 +54,14 @@ Most AI memory systems use vector embeddings for similarity search. Causantic do
|
|
|
53
54
|
|
|
54
55
|
### How It Compares
|
|
55
56
|
|
|
56
|
-
| System | Local-First | Temporal Decay | Graph Structure | Self-Benchmarking |
|
|
57
|
-
| ------------- | :-----------: | :---------------: | :----------------: | :---------------: |
|
|
58
|
-
| **Causantic** | **Yes** | **Chain walking** | **Causal graph** | **Yes** |
|
|
59
|
-
| Mem0 | No (Cloud) | None | Paid add-on | No |
|
|
60
|
-
| Cognee | Self-hostable | None | Triplet extraction | No |
|
|
61
|
-
| Letta/MemGPT | Self-hostable | Summarization | None | No |
|
|
62
|
-
| Zep | Enterprise | Bi-temporal | Temporal KG | No |
|
|
63
|
-
| GraphRAG | Self-hostable | Static corpus | Hierarchical | No |
|
|
57
|
+
| System | Local-First | Temporal Decay | Graph Structure | Structural Map | Self-Benchmarking |
|
|
58
|
+
| ------------- | :-----------: | :---------------: | :----------------: | :------------: | :---------------: |
|
|
59
|
+
| **Causantic** | **Yes** | **Chain walking** | **Causal graph** | **Yes** | **Yes** |
|
|
60
|
+
| Mem0 | No (Cloud) | None | Paid add-on | No | No |
|
|
61
|
+
| Cognee | Self-hostable | None | Triplet extraction | No | No |
|
|
62
|
+
| Letta/MemGPT | Self-hostable | Summarization | None | No | No |
|
|
63
|
+
| Zep | Enterprise | Bi-temporal | Temporal KG | No | No |
|
|
64
|
+
| GraphRAG | Self-hostable | Static corpus | Hierarchical | No | No |
|
|
64
65
|
|
|
65
66
|
See [Landscape Analysis](docs/research/approach/landscape-analysis.md) for detailed per-system analysis.
|
|
66
67
|
|
|
@@ -69,16 +70,19 @@ See [Landscape Analysis](docs/research/approach/landscape-analysis.md) for detai
|
|
|
69
70
|
**1. Local-First with Encryption**
|
|
70
71
|
All data stays on your machine. Optional per-chunk encryption (ChaCha20-Poly1305) with keys stored in your system keychain. No cloud dependency.
|
|
71
72
|
|
|
72
|
-
**2.
|
|
73
|
-
|
|
73
|
+
**2. Keyword-First Retrieval**
|
|
74
|
+
BM25 keyword search (FTS5) is the default retrieval method — fast, precise, and excellent for function names, error codes, and specific terms. Vector search is available as optional enrichment for semantic similarity. Both can fuse via Reciprocal Rank Fusion (RRF) when hybrid mode is enabled.
|
|
74
75
|
|
|
75
|
-
**3.
|
|
76
|
-
|
|
76
|
+
**3. Structural Repo Map**
|
|
77
|
+
Codebase analysis extracts definitions, references, and cross-file relationships. Produces a compact structural summary (~1K tokens) ranked by importance. Gives Claude Code instant orientation without reading individual files. **22 languages**: 12 via tree-sitter (TS, JS, Python, Java, C, C++, Rust, Go, Ruby, C#, PHP, Bash) and 10 via regex fallback (Scala, Kotlin, Swift, Haskell, Lua, Dart, Zig, Elixir, Perl, R).
|
|
77
78
|
|
|
78
|
-
**4.
|
|
79
|
-
|
|
79
|
+
**4. Session Continuity**
|
|
80
|
+
Structured session state capture (files touched, errors, outcomes, tasks, LLM summary) enables instant resumption. The `reconstruct` tool's briefing mode combines session state with the repo map for a complete startup context.
|
|
80
81
|
|
|
81
|
-
**5.
|
|
82
|
+
**5. Causal Graph with Multi-Path Chain Walking**
|
|
83
|
+
Chunks are connected in a sequential linked list — intra-turn chunks chained sequentially, inter-turn edges linking last→first, cross-session edges bridging sessions. The `recall` tool walks this graph backward to reconstruct episodic narratives (augmented with session summaries); `predict` walks forward. Multi-path DFS explores alternatives and selects the best chain by median cosine similarity.
|
|
84
|
+
|
|
85
|
+
**6. Self-Benchmarking Suite**
|
|
82
86
|
Measure how well your memory system is working with built-in benchmarks. Health, retrieval quality, chain quality, and latency — scored and tracked over time with specific tuning recommendations.
|
|
83
87
|
|
|
84
88
|
## Architecture
|
|
@@ -103,45 +107,54 @@ Measure how well your memory system is working with built-in benchmarks. Health,
|
|
|
103
107
|
┌─────────────────────────────────────────────────────────────────┐
|
|
104
108
|
│ Ingestion Pipeline │
|
|
105
109
|
│ ┌──────────┐ ┌──────────┐ ┌────────────┐ ┌──────────────┐ │
|
|
106
|
-
│ │ Parser │→ │ Chunker │→ │
|
|
110
|
+
│ │ Parser │→ │ Chunker │→ │ Edge │→ │ Session │ │
|
|
111
|
+
│ │ │ │ │ │ Creator │ │ State │ │
|
|
107
112
|
│ └──────────┘ └──────────┘ └────────────┘ └──────────────┘ │
|
|
113
|
+
│ ┌──────────────┐ (optional: embedding when embeddingEager=true)│
|
|
114
|
+
│ │ Embedder │ │
|
|
115
|
+
│ └──────────────┘ │
|
|
108
116
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
109
117
|
│
|
|
110
118
|
▼
|
|
111
119
|
┌─────────────────────────────────────────────────────────────────┐
|
|
112
120
|
│ Storage Layer │
|
|
113
|
-
│ ┌──────────────┐ ┌──────────────┐
|
|
114
|
-
│ │ SQLite │ │ LanceDB │
|
|
115
|
-
│ │ (chunks, │ │ (embeddings) │
|
|
116
|
-
│ │ edges, FTS5
|
|
117
|
-
│
|
|
121
|
+
│ ┌──────────────┐ ┌──────────────┐ │
|
|
122
|
+
│ │ SQLite │ │ LanceDB │ │
|
|
123
|
+
│ │ (chunks, │ │ (embeddings) │ ← optional │
|
|
124
|
+
│ │ edges, FTS5,│ │ │ │
|
|
125
|
+
│ │ sessions) │ │ │ │
|
|
126
|
+
│ └──────────────┘ └──────────────┘ │
|
|
118
127
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
119
128
|
│
|
|
120
129
|
▼
|
|
121
130
|
┌─────────────────────────────────────────────────────────────────┐
|
|
122
131
|
│ Retrieval System │
|
|
123
|
-
│ ┌──────────┐ ┌──────────┐
|
|
124
|
-
│ │ Vector │ │
|
|
125
|
-
│ │
|
|
126
|
-
│ └────┬─────┘ └────┬─────┘
|
|
132
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
133
|
+
│ │ Keyword │ │ Vector │ │ Repo Map │ │
|
|
134
|
+
│ │ (BM25) │ │ (opt-in) │ │ (AST) │ │
|
|
135
|
+
│ └────┬─────┘ └────┬─────┘ └──────────┘ │
|
|
127
136
|
│ └──────┬──────┘ │
|
|
128
137
|
│ ▼ │
|
|
129
|
-
│ ┌──────────────┐
|
|
130
|
-
│ │
|
|
131
|
-
│ │ │ │
|
|
132
|
-
│ └──────────────┘
|
|
138
|
+
│ ┌──────────────┐ ┌──────────────────────┐ │
|
|
139
|
+
│ │ MMR Rerank │→ │ Chain Walker │ │
|
|
140
|
+
│ │ │ │ + Context Assembly │ │
|
|
141
|
+
│ └──────────────┘ └──────────────────────┘ │
|
|
133
142
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
134
143
|
│
|
|
135
144
|
▼
|
|
136
145
|
┌─────────────────────────────────────────────────────────────────┐
|
|
137
146
|
│ MCP Server │
|
|
138
|
-
│ ┌────────┐ ┌────────┐ ┌─────────┐
|
|
139
|
-
│ │ search │ │ recall │ │ predict │ │
|
|
140
|
-
│ │ │ │ │ │ │ │
|
|
141
|
-
│ └────────┘ └────────┘ └─────────┘
|
|
142
|
-
│ ┌─────────────┐ ┌─────────────┐ ┌───────┐
|
|
143
|
-
│ │ reconstruct │ │ hook-status │ │ stats │
|
|
144
|
-
│
|
|
147
|
+
│ ┌────────┐ ┌────────┐ ┌─────────┐ ┌─────────┐ ┌───────────┐ │
|
|
148
|
+
│ │ search │ │ recall │ │ predict │ │ repomap │ │list- │ │
|
|
149
|
+
│ │ │ │ │ │ │ │ │ │projects │ │
|
|
150
|
+
│ └────────┘ └────────┘ └─────────┘ └─────────┘ └───────────┘ │
|
|
151
|
+
│ ┌───────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────┐ │
|
|
152
|
+
│ │list- │ │ reconstruct │ │ hook-status │ │ stats │ │
|
|
153
|
+
│ │sessions │ │ │ │ │ │ │ │
|
|
154
|
+
│ └───────────┘ └─────────────┘ └─────────────┘ └───────┘ │
|
|
155
|
+
│ ┌────────┐ │
|
|
156
|
+
│ │ forget │ │
|
|
157
|
+
│ └────────┘ │
|
|
145
158
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
146
159
|
│
|
|
147
160
|
▼
|
|
@@ -156,19 +169,20 @@ Measure how well your memory system is working with built-in benchmarks. Health,
|
|
|
156
169
|
|
|
157
170
|
## MCP Tools
|
|
158
171
|
|
|
159
|
-
The MCP server exposes
|
|
160
|
-
|
|
161
|
-
| Tool | Description
|
|
162
|
-
| --------------- |
|
|
163
|
-
| `search` |
|
|
164
|
-
| `recall` | Episodic memory — "how did we solve X?" Seeds → backward chain walk → ordered narrative.
|
|
165
|
-
| `predict` | Forward episodic — "what's likely next?" Seeds → forward chain walk → ordered narrative.
|
|
166
|
-
| `
|
|
167
|
-
| `list-
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
171
|
-
| `
|
|
172
|
+
The MCP server exposes ten tools:
|
|
173
|
+
|
|
174
|
+
| Tool | Description |
|
|
175
|
+
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
176
|
+
| `search` | Memory discovery — "what do I know about X?" Keyword-first (BM25) with optional vector enrichment. |
|
|
177
|
+
| `recall` | Episodic memory — "how did we solve X?" Seeds → backward chain walk → ordered narrative. Augmented with session summaries. |
|
|
178
|
+
| `predict` | Forward episodic — "what's likely next?" Seeds → forward chain walk → ordered narrative. |
|
|
179
|
+
| `repomap` | Structural codebase summary — files, definitions, cross-file relationships. Compact orientation without reading files. |
|
|
180
|
+
| `list-projects` | Discover available projects with chunk counts and date ranges. |
|
|
181
|
+
| `list-sessions` | Browse sessions for a project with time filtering. |
|
|
182
|
+
| `reconstruct` | Rebuild session context — chronological timeline or structured briefing (session state + repo map). Call with just `project` for recent history. |
|
|
183
|
+
| `hook-status` | Check when hooks last ran and whether they succeeded. |
|
|
184
|
+
| `stats` | Memory statistics — version, chunk/edge/cluster counts, per-project breakdowns. |
|
|
185
|
+
| `forget` | Delete chunks by project, time range, session, or semantic query. Defaults to dry-run preview. |
|
|
172
186
|
|
|
173
187
|
### Claude Code Integration
|
|
174
188
|
|
|
@@ -302,8 +316,8 @@ The name reflects how the causal graph's value is **structural ordering** — wh
|
|
|
302
316
|
|
|
303
317
|
## Limitations
|
|
304
318
|
|
|
305
|
-
- **First-call latency**:
|
|
306
|
-
- **Initial ingestion time**: Large session histories take time to parse
|
|
319
|
+
- **First-call latency**: When embedding is enabled, the model downloads on first use (~500MB). Subsequent calls are fast (~80ms). With keyword-only mode (default), there is no model download.
|
|
320
|
+
- **Initial ingestion time**: Large session histories take time to parse and index. Embedding (when enabled) adds to this cost.
|
|
307
321
|
- **Edge quality dependency**: Chain walking depends on connected edges. Sparse or orphaned chunks fall back to ranked search results.
|
|
308
322
|
- **Collection size effects**: Benchmark scores improve as more sessions are ingested. Small collections (<100 chunks) won't benefit much from chain walking or clustering.
|
|
309
323
|
- **Claude Code 5.1+ required**: Hooks use `async` mode which requires Claude Code 5.1 or later. The parser assumes Claude Code session format (JSONL transcripts). Not a general-purpose memory system.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-templates.d.ts","sourceRoot":"","sources":["../../src/cli/skill-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"skill-templates.d.ts","sourceRoot":"","sources":["../../src/cli/skill-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAw6C3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CA4FhD"}
|
|
@@ -47,11 +47,12 @@ Pass these to the \`recall\` MCP tool:
|
|
|
47
47
|
|
|
48
48
|
## Guidelines
|
|
49
49
|
|
|
50
|
+
- **Always pass the \`project\` parameter** scoped to the current project (derive from the working directory) unless the user explicitly asks for cross-project results
|
|
50
51
|
- \`recall\` walks causal chains to reconstruct narrative — use it when you need the story of how something happened
|
|
52
|
+
- \`recall\` also searches session summaries — if matching summaries are found, they appear as supplementary context before the chain walk results
|
|
51
53
|
- \`recall\` is semantic, NOT time-ordered — it returns whatever matches best regardless of recency
|
|
52
|
-
- \`search\`
|
|
54
|
+
- \`search\` uses keyword-first (BM25) retrieval by default — good for exact matches on function names, error codes, etc.
|
|
53
55
|
- For temporal queries ("recently", "last session", "yesterday"), always use \`reconstruct\` or \`resume\`
|
|
54
|
-
- Use the \`project\` parameter to scope results to the current project when relevant
|
|
55
56
|
`,
|
|
56
57
|
},
|
|
57
58
|
{
|
|
@@ -91,7 +92,9 @@ Pass these to the \`search\` MCP tool:
|
|
|
91
92
|
|
|
92
93
|
## Guidelines
|
|
93
94
|
|
|
94
|
-
-
|
|
95
|
+
- **Always pass the \`project\` parameter** scoped to the current project (derive from the working directory) unless the user explicitly asks for cross-project results
|
|
96
|
+
- By default, search uses **keyword-first (BM25)** retrieval — great for exact matches on function names, error codes, and specific terms
|
|
97
|
+
- Optional vector enrichment can be enabled in config for semantic similarity matching
|
|
95
98
|
- Use \`search\` for discovery, \`recall\` for narrative reconstruction
|
|
96
99
|
- Combine with \`/causantic-recall\` when you need causal chain context (how things led to outcomes)
|
|
97
100
|
`,
|
|
@@ -132,6 +135,7 @@ Pass these to the \`predict\` MCP tool:
|
|
|
132
135
|
|
|
133
136
|
## Guidelines
|
|
134
137
|
|
|
138
|
+
- **Always pass the \`project\` parameter** scoped to the current project (derive from the working directory) unless the user explicitly asks for cross-project results
|
|
135
139
|
- Always provide a concise summary of the current task as the \`context\` parameter
|
|
136
140
|
- Use early in a task to front-load relevant context
|
|
137
141
|
- Especially useful when starting unfamiliar work — past sessions may have covered it
|
|
@@ -160,21 +164,22 @@ Reconstruct context from the most recent session(s) to help the user pick up whe
|
|
|
160
164
|
## Workflow
|
|
161
165
|
|
|
162
166
|
1. **Identify the project**: Derive from the current working directory (use \`list-projects\` if ambiguous)
|
|
163
|
-
2. **
|
|
164
|
-
3. **
|
|
167
|
+
2. **Get a structured briefing**: Use \`reconstruct\` with \`mode: "briefing"\` for a structured summary combining session state (files touched, outcomes, tasks) with a structural repo map
|
|
168
|
+
3. **If briefing mode is unavailable or more detail is needed**: Fall back to \`reconstruct\` with \`previous_session: true\` to get the most recent session before this one
|
|
169
|
+
4. **Summarize for the user**:
|
|
165
170
|
- What was being worked on (key topics/tasks)
|
|
166
171
|
- What was completed vs in progress
|
|
167
172
|
- Any explicit next steps or TODOs mentioned
|
|
168
173
|
- Any open issues or blockers
|
|
169
|
-
|
|
174
|
+
5. **If the user provided a topic**: Also run \`recall\` with that topic scoped to the project
|
|
170
175
|
|
|
171
176
|
## Interpreting User Intent
|
|
172
177
|
|
|
173
178
|
| User says | Action |
|
|
174
179
|
|-----------|--------|
|
|
175
|
-
| (nothing) | \`reconstruct\` with \`previous_session: true\` |
|
|
180
|
+
| (nothing) | \`reconstruct\` with \`mode: "briefing"\` (preferred) or \`previous_session: true\` |
|
|
176
181
|
| "yesterday" / "last week" | \`reconstruct\` with appropriate \`days_back\` |
|
|
177
|
-
| a topic name | \`reconstruct\`
|
|
182
|
+
| a topic name | \`reconstruct\` with \`mode: "briefing"\` + \`recall\` with that topic |
|
|
178
183
|
|
|
179
184
|
## Output Format
|
|
180
185
|
|
|
@@ -404,11 +409,11 @@ The lead agent has MCP access to Causantic tools — subagents do not. Gather al
|
|
|
404
409
|
|
|
405
410
|
### 1.5.1 Query Memory
|
|
406
411
|
|
|
407
|
-
Run these queries **sequentially** (do NOT delegate to subagents, do NOT run in parallel)
|
|
412
|
+
Run these queries **sequentially** (do NOT delegate to subagents, do NOT run in parallel). **Always pass \`project\` scoped to the current project** (derive from the working directory) to avoid pulling in memories from other projects.
|
|
408
413
|
|
|
409
|
-
1. \`search\` with query: "architecture decisions", \`max_tokens: 4000\`
|
|
410
|
-
2. \`search\` with query: "tech debt", \`max_tokens: 4000\`
|
|
411
|
-
3. \`search\` with query: "past cleanup findings", \`max_tokens: 4000\`
|
|
414
|
+
1. \`search\` with query: "architecture decisions", \`project: "<current-project>"\`, \`max_tokens: 4000\`
|
|
415
|
+
2. \`search\` with query: "tech debt", \`project: "<current-project>"\`, \`max_tokens: 4000\`
|
|
416
|
+
3. \`search\` with query: "past cleanup findings", \`project: "<current-project>"\`, \`max_tokens: 4000\`
|
|
412
417
|
|
|
413
418
|
After each query, discard any results that duplicate earlier findings. Stop querying early if accumulated memory exceeds the total cap of 12K tokens.
|
|
414
419
|
|
|
@@ -1170,11 +1175,11 @@ Run memory queries **sequentially** in the lead agent context. Do not delegate m
|
|
|
1170
1175
|
|
|
1171
1176
|
After each query, discard any results that duplicate earlier findings. Stop querying early if accumulated memory exceeds the total cap of 16K tokens.
|
|
1172
1177
|
|
|
1173
|
-
Use the causantic MCP tools to surface deferred and aspirational work
|
|
1174
|
-
1. \`search\` query: "deferred TODO future work", \`max_tokens: 4000\`
|
|
1175
|
-
2. \`search\` query: "roadmap milestone release plan", \`max_tokens: 4000\`
|
|
1176
|
-
3. \`recall\` query: "features we want to build", \`max_tokens: 4000\`
|
|
1177
|
-
4. \`predict\` context: "project roadmap and future work", \`max_tokens: 4000\`
|
|
1178
|
+
Use the causantic MCP tools to surface deferred and aspirational work. **Always pass \`project\` scoped to the current project** (derive from the working directory) to avoid pulling in memories from other projects.
|
|
1179
|
+
1. \`search\` query: "deferred TODO future work", \`project: "<current-project>"\`, \`max_tokens: 4000\`
|
|
1180
|
+
2. \`search\` query: "roadmap milestone release plan", \`project: "<current-project>"\`, \`max_tokens: 4000\`
|
|
1181
|
+
3. \`recall\` query: "features we want to build", \`project: "<current-project>"\`, \`max_tokens: 4000\`
|
|
1182
|
+
4. \`predict\` context: "project roadmap and future work", \`project: "<current-project>"\`, \`max_tokens: 4000\`
|
|
1178
1183
|
- Tag each with source: "memory"
|
|
1179
1184
|
|
|
1180
1185
|
If causantic MCP tools are unavailable or return nothing, note the gap and proceed with other sources.
|
|
@@ -1468,7 +1473,7 @@ Long-term memory is available via the \`causantic\` MCP server.
|
|
|
1468
1473
|
- \`/causantic-predict <context>\` — Surface what came after similar past situations — walks forward through causal chains (what's likely relevant next?)
|
|
1469
1474
|
|
|
1470
1475
|
**Session navigation:**
|
|
1471
|
-
- \`/causantic-resume\` — Resume interrupted work —
|
|
1476
|
+
- \`/causantic-resume\` — Resume interrupted work — structured briefing with session state and repo map
|
|
1472
1477
|
- \`/causantic-reconstruct [time range]\` — Replay a past session chronologically, or get recent history
|
|
1473
1478
|
- \`/causantic-list-projects\` — Discover available projects
|
|
1474
1479
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-templates.js","sourceRoot":"","sources":["../../src/cli/skill-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C;QACE,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"skill-templates.js","sourceRoot":"","sources":["../../src/cli/skill-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -130,6 +130,22 @@ export declare class ClusterManager {
|
|
|
130
130
|
largestCluster: number;
|
|
131
131
|
smallestCluster: number;
|
|
132
132
|
}>;
|
|
133
|
+
/**
|
|
134
|
+
* Run HDBSCAN on index entry embeddings and create index entry clusters.
|
|
135
|
+
*
|
|
136
|
+
* Creates clusters in the `index_entry_clusters` table (parallel to `chunk_clusters`).
|
|
137
|
+
* Each cluster elects a representative (entry closest to centroid) for browsing.
|
|
138
|
+
*/
|
|
139
|
+
reclusterIndexEntries(options?: ClusteringOptions): Promise<ClusteringResult>;
|
|
140
|
+
/**
|
|
141
|
+
* Get index entry cluster representatives.
|
|
142
|
+
* Returns one representative entry ID per cluster (closest to centroid).
|
|
143
|
+
*/
|
|
144
|
+
getIndexEntryRepresentatives(): Promise<Array<{
|
|
145
|
+
clusterId: string;
|
|
146
|
+
indexEntryId: string;
|
|
147
|
+
distance: number;
|
|
148
|
+
}>>;
|
|
133
149
|
/**
|
|
134
150
|
* Find clusters similar to a query embedding.
|
|
135
151
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-manager.d.ts","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"cluster-manager.d.ts","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
* Cluster management: HDBSCAN clustering and chunk assignment.
|
|
3
3
|
*/
|
|
4
4
|
import { HDBSCAN } from './hdbscan.js';
|
|
5
|
-
import { vectorStore } from '../storage/vector-store.js';
|
|
5
|
+
import { vectorStore, indexVectorStore } from '../storage/vector-store.js';
|
|
6
6
|
import { upsertCluster, assignChunksToClusters, getAllClusters, clearAllClusters, getClusterChunkIds, computeMembershipHash, } from '../storage/cluster-store.js';
|
|
7
|
+
import { getDb } from '../storage/db.js';
|
|
7
8
|
import { angularDistance } from '../utils/angular-distance.js';
|
|
8
9
|
import { getConfig } from '../config/memory-config.js';
|
|
9
10
|
import { generateId } from '../storage/db.js';
|
|
10
11
|
import { predictLabels } from './hdbscan/incremental.js';
|
|
11
12
|
import { saveModel, loadModel } from './hdbscan-model-store.js';
|
|
13
|
+
import { createLogger } from '../utils/logger.js';
|
|
14
|
+
const log = createLogger('cluster-manager');
|
|
12
15
|
/**
|
|
13
16
|
* Match new clusters to old clusters by Jaccard overlap, returning
|
|
14
17
|
* a map of newClusterId → matched old snapshot. Uses greedy best-match
|
|
@@ -473,6 +476,121 @@ export class ClusterManager {
|
|
|
473
476
|
smallestCluster: smallest === Infinity ? 0 : smallest,
|
|
474
477
|
};
|
|
475
478
|
}
|
|
479
|
+
/**
|
|
480
|
+
* Run HDBSCAN on index entry embeddings and create index entry clusters.
|
|
481
|
+
*
|
|
482
|
+
* Creates clusters in the `index_entry_clusters` table (parallel to `chunk_clusters`).
|
|
483
|
+
* Each cluster elects a representative (entry closest to centroid) for browsing.
|
|
484
|
+
*/
|
|
485
|
+
async reclusterIndexEntries(options = {}) {
|
|
486
|
+
const startTime = Date.now();
|
|
487
|
+
const { minClusterSize = this.config.minClusterSize } = options;
|
|
488
|
+
// Ensure index_entry_clusters table exists
|
|
489
|
+
const db = getDb();
|
|
490
|
+
db.exec(`
|
|
491
|
+
CREATE TABLE IF NOT EXISTS index_entry_clusters (
|
|
492
|
+
index_entry_id TEXT NOT NULL,
|
|
493
|
+
cluster_id TEXT NOT NULL,
|
|
494
|
+
distance REAL NOT NULL,
|
|
495
|
+
is_representative INTEGER DEFAULT 0,
|
|
496
|
+
PRIMARY KEY (index_entry_id, cluster_id)
|
|
497
|
+
)
|
|
498
|
+
`);
|
|
499
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_iec_cluster ON index_entry_clusters(cluster_id)');
|
|
500
|
+
// Clear existing index entry cluster assignments
|
|
501
|
+
db.exec('DELETE FROM index_entry_clusters');
|
|
502
|
+
// Get all index entry vectors
|
|
503
|
+
const vectors = await indexVectorStore.getAllVectors();
|
|
504
|
+
if (vectors.length === 0) {
|
|
505
|
+
return {
|
|
506
|
+
numClusters: 0,
|
|
507
|
+
assignedChunks: 0,
|
|
508
|
+
noiseChunks: 0,
|
|
509
|
+
noiseRatio: 0,
|
|
510
|
+
clusterSizes: [],
|
|
511
|
+
reassignedNoise: 0,
|
|
512
|
+
durationMs: Date.now() - startTime,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
// Run HDBSCAN
|
|
516
|
+
const embeddings = vectors.map((v) => v.embedding);
|
|
517
|
+
const hdbscan = new HDBSCAN({
|
|
518
|
+
minClusterSize,
|
|
519
|
+
minSamples: minClusterSize,
|
|
520
|
+
});
|
|
521
|
+
const labels = hdbscan.fitSync(embeddings);
|
|
522
|
+
// Group by cluster
|
|
523
|
+
const clusterMembers = new Map();
|
|
524
|
+
for (let i = 0; i < labels.length; i++) {
|
|
525
|
+
const label = labels[i];
|
|
526
|
+
if (label < 0)
|
|
527
|
+
continue;
|
|
528
|
+
if (!clusterMembers.has(label)) {
|
|
529
|
+
clusterMembers.set(label, []);
|
|
530
|
+
}
|
|
531
|
+
clusterMembers.get(label).push(vectors[i]);
|
|
532
|
+
}
|
|
533
|
+
// Create cluster assignments
|
|
534
|
+
const clusterSizes = [];
|
|
535
|
+
const insertStmt = db.prepare('INSERT OR REPLACE INTO index_entry_clusters (index_entry_id, cluster_id, distance, is_representative) VALUES (?, ?, ?, ?)');
|
|
536
|
+
const insertAll = db.transaction(() => {
|
|
537
|
+
for (const [_label, members] of clusterMembers) {
|
|
538
|
+
const centroid = computeCentroid(members.map((m) => m.embedding));
|
|
539
|
+
const clusterId = generateId();
|
|
540
|
+
// Find representative (closest to centroid)
|
|
541
|
+
const withDistances = members.map((m) => ({
|
|
542
|
+
...m,
|
|
543
|
+
distance: angularDistance(m.embedding, centroid),
|
|
544
|
+
}));
|
|
545
|
+
withDistances.sort((a, b) => a.distance - b.distance);
|
|
546
|
+
for (const m of withDistances) {
|
|
547
|
+
const isRep = m.id === withDistances[0].id ? 1 : 0;
|
|
548
|
+
insertStmt.run(m.id, clusterId, m.distance, isRep);
|
|
549
|
+
}
|
|
550
|
+
clusterSizes.push(members.length);
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
insertAll();
|
|
554
|
+
const noiseCount = labels.filter((l) => l < 0).length;
|
|
555
|
+
log.info('Index entry clustering complete', {
|
|
556
|
+
numClusters: clusterMembers.size,
|
|
557
|
+
assigned: vectors.length - noiseCount,
|
|
558
|
+
noise: noiseCount,
|
|
559
|
+
});
|
|
560
|
+
return {
|
|
561
|
+
numClusters: clusterMembers.size,
|
|
562
|
+
assignedChunks: vectors.length - noiseCount,
|
|
563
|
+
noiseChunks: noiseCount,
|
|
564
|
+
noiseRatio: vectors.length > 0 ? noiseCount / vectors.length : 0,
|
|
565
|
+
clusterSizes: clusterSizes.sort((a, b) => b - a),
|
|
566
|
+
reassignedNoise: 0,
|
|
567
|
+
durationMs: Date.now() - startTime,
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Get index entry cluster representatives.
|
|
572
|
+
* Returns one representative entry ID per cluster (closest to centroid).
|
|
573
|
+
*/
|
|
574
|
+
async getIndexEntryRepresentatives() {
|
|
575
|
+
const db = getDb();
|
|
576
|
+
try {
|
|
577
|
+
const rows = db
|
|
578
|
+
.prepare(`SELECT cluster_id, index_entry_id, distance
|
|
579
|
+
FROM index_entry_clusters
|
|
580
|
+
WHERE is_representative = 1
|
|
581
|
+
ORDER BY distance`)
|
|
582
|
+
.all();
|
|
583
|
+
return rows.map((r) => ({
|
|
584
|
+
clusterId: r.cluster_id,
|
|
585
|
+
indexEntryId: r.index_entry_id,
|
|
586
|
+
distance: r.distance,
|
|
587
|
+
}));
|
|
588
|
+
}
|
|
589
|
+
catch {
|
|
590
|
+
// Table may not exist yet
|
|
591
|
+
return [];
|
|
592
|
+
}
|
|
593
|
+
}
|
|
476
594
|
/**
|
|
477
595
|
* Find clusters similar to a query embedding.
|
|
478
596
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-manager.js","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cluster-manager.js","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"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"}
|