@psiclawops/hypermem 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/background-indexer.d.ts +132 -0
- package/dist/background-indexer.d.ts.map +1 -0
- package/dist/background-indexer.js +1044 -0
- package/dist/cache.d.ts +110 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +495 -0
- package/dist/compaction-fence.d.ts +89 -0
- package/dist/compaction-fence.d.ts.map +1 -0
- package/dist/compaction-fence.js +153 -0
- package/dist/compositor.d.ts +226 -0
- package/dist/compositor.d.ts.map +1 -0
- package/dist/compositor.js +2558 -0
- package/dist/content-type-classifier.d.ts +41 -0
- package/dist/content-type-classifier.d.ts.map +1 -0
- package/dist/content-type-classifier.js +181 -0
- package/dist/cross-agent.d.ts +62 -0
- package/dist/cross-agent.d.ts.map +1 -0
- package/dist/cross-agent.js +259 -0
- package/dist/db.d.ts +131 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +402 -0
- package/dist/desired-state-store.d.ts +100 -0
- package/dist/desired-state-store.d.ts.map +1 -0
- package/dist/desired-state-store.js +222 -0
- package/dist/doc-chunk-store.d.ts +140 -0
- package/dist/doc-chunk-store.d.ts.map +1 -0
- package/dist/doc-chunk-store.js +391 -0
- package/dist/doc-chunker.d.ts +99 -0
- package/dist/doc-chunker.d.ts.map +1 -0
- package/dist/doc-chunker.js +324 -0
- package/dist/dreaming-promoter.d.ts +86 -0
- package/dist/dreaming-promoter.d.ts.map +1 -0
- package/dist/dreaming-promoter.js +381 -0
- package/dist/episode-store.d.ts +49 -0
- package/dist/episode-store.d.ts.map +1 -0
- package/dist/episode-store.js +135 -0
- package/dist/fact-store.d.ts +75 -0
- package/dist/fact-store.d.ts.map +1 -0
- package/dist/fact-store.js +236 -0
- package/dist/fleet-store.d.ts +144 -0
- package/dist/fleet-store.d.ts.map +1 -0
- package/dist/fleet-store.js +276 -0
- package/dist/fos-mod.d.ts +178 -0
- package/dist/fos-mod.d.ts.map +1 -0
- package/dist/fos-mod.js +416 -0
- package/dist/hybrid-retrieval.d.ts +64 -0
- package/dist/hybrid-retrieval.d.ts.map +1 -0
- package/dist/hybrid-retrieval.js +344 -0
- package/dist/image-eviction.d.ts +49 -0
- package/dist/image-eviction.d.ts.map +1 -0
- package/dist/image-eviction.js +251 -0
- package/dist/index.d.ts +650 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1072 -0
- package/dist/keystone-scorer.d.ts +51 -0
- package/dist/keystone-scorer.d.ts.map +1 -0
- package/dist/keystone-scorer.js +52 -0
- package/dist/knowledge-graph.d.ts +110 -0
- package/dist/knowledge-graph.d.ts.map +1 -0
- package/dist/knowledge-graph.js +305 -0
- package/dist/knowledge-lint.d.ts +29 -0
- package/dist/knowledge-lint.d.ts.map +1 -0
- package/dist/knowledge-lint.js +116 -0
- package/dist/knowledge-store.d.ts +72 -0
- package/dist/knowledge-store.d.ts.map +1 -0
- package/dist/knowledge-store.js +247 -0
- package/dist/library-schema.d.ts +22 -0
- package/dist/library-schema.d.ts.map +1 -0
- package/dist/library-schema.js +1038 -0
- package/dist/message-store.d.ts +89 -0
- package/dist/message-store.d.ts.map +1 -0
- package/dist/message-store.js +323 -0
- package/dist/metrics-dashboard.d.ts +114 -0
- package/dist/metrics-dashboard.d.ts.map +1 -0
- package/dist/metrics-dashboard.js +260 -0
- package/dist/obsidian-exporter.d.ts +57 -0
- package/dist/obsidian-exporter.d.ts.map +1 -0
- package/dist/obsidian-exporter.js +274 -0
- package/dist/obsidian-watcher.d.ts +147 -0
- package/dist/obsidian-watcher.d.ts.map +1 -0
- package/dist/obsidian-watcher.js +403 -0
- package/dist/open-domain.d.ts +46 -0
- package/dist/open-domain.d.ts.map +1 -0
- package/dist/open-domain.js +125 -0
- package/dist/preference-store.d.ts +54 -0
- package/dist/preference-store.d.ts.map +1 -0
- package/dist/preference-store.js +109 -0
- package/dist/preservation-gate.d.ts +82 -0
- package/dist/preservation-gate.d.ts.map +1 -0
- package/dist/preservation-gate.js +150 -0
- package/dist/proactive-pass.d.ts +63 -0
- package/dist/proactive-pass.d.ts.map +1 -0
- package/dist/proactive-pass.js +239 -0
- package/dist/profiles.d.ts +44 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +227 -0
- package/dist/provider-translator.d.ts +50 -0
- package/dist/provider-translator.d.ts.map +1 -0
- package/dist/provider-translator.js +403 -0
- package/dist/rate-limiter.d.ts +76 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +179 -0
- package/dist/repair-tool-pairs.d.ts +38 -0
- package/dist/repair-tool-pairs.d.ts.map +1 -0
- package/dist/repair-tool-pairs.js +138 -0
- package/dist/retrieval-policy.d.ts +51 -0
- package/dist/retrieval-policy.d.ts.map +1 -0
- package/dist/retrieval-policy.js +77 -0
- package/dist/schema.d.ts +15 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +229 -0
- package/dist/secret-scanner.d.ts +51 -0
- package/dist/secret-scanner.d.ts.map +1 -0
- package/dist/secret-scanner.js +248 -0
- package/dist/seed.d.ts +108 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +177 -0
- package/dist/session-flusher.d.ts +53 -0
- package/dist/session-flusher.d.ts.map +1 -0
- package/dist/session-flusher.js +69 -0
- package/dist/session-topic-map.d.ts +41 -0
- package/dist/session-topic-map.d.ts.map +1 -0
- package/dist/session-topic-map.js +77 -0
- package/dist/spawn-context.d.ts +54 -0
- package/dist/spawn-context.d.ts.map +1 -0
- package/dist/spawn-context.js +159 -0
- package/dist/system-store.d.ts +73 -0
- package/dist/system-store.d.ts.map +1 -0
- package/dist/system-store.js +182 -0
- package/dist/temporal-store.d.ts +80 -0
- package/dist/temporal-store.d.ts.map +1 -0
- package/dist/temporal-store.js +149 -0
- package/dist/topic-detector.d.ts +35 -0
- package/dist/topic-detector.d.ts.map +1 -0
- package/dist/topic-detector.js +249 -0
- package/dist/topic-store.d.ts +45 -0
- package/dist/topic-store.d.ts.map +1 -0
- package/dist/topic-store.js +136 -0
- package/dist/topic-synthesizer.d.ts +51 -0
- package/dist/topic-synthesizer.d.ts.map +1 -0
- package/dist/topic-synthesizer.js +315 -0
- package/dist/trigger-registry.d.ts +63 -0
- package/dist/trigger-registry.d.ts.map +1 -0
- package/dist/trigger-registry.js +163 -0
- package/dist/types.d.ts +533 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/vector-store.d.ts +170 -0
- package/dist/vector-store.d.ts.map +1 -0
- package/dist/vector-store.js +677 -0
- package/dist/version.d.ts +34 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +34 -0
- package/dist/wiki-page-emitter.d.ts +65 -0
- package/dist/wiki-page-emitter.d.ts.map +1 -0
- package/dist/wiki-page-emitter.js +258 -0
- package/dist/work-store.d.ts +112 -0
- package/dist/work-store.d.ts.map +1 -0
- package/dist/work-store.js +273 -0
- package/package.json +1 -1
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hypermem Vector Store — Semantic Search via sqlite-vec
|
|
3
|
+
*
|
|
4
|
+
* Provides embedding-backed KNN search over facts, knowledge, episodes,
|
|
5
|
+
* and session registry entries. Uses Ollama (local) for embeddings,
|
|
6
|
+
* sqlite-vec for vector indexing, and coexists with existing FTS5.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - One vec0 virtual table per indexed content type
|
|
10
|
+
* - Embeddings generated via local Ollama (nomic-embed-text, 768d)
|
|
11
|
+
* - Vectors stored alongside content in the same agent DB
|
|
12
|
+
* - LRU embedding cache (module-level, per-process) to avoid redundant Ollama calls
|
|
13
|
+
* - Precomputed embedding passthrough: callers can supply an embedding to skip Ollama
|
|
14
|
+
* - Batch embedding support for bulk indexing
|
|
15
|
+
*/
|
|
16
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
17
|
+
export interface EmbeddingConfig {
|
|
18
|
+
/**
|
|
19
|
+
* Embedding provider. Default: 'ollama'.
|
|
20
|
+
* - 'ollama': local Ollama instance (nomic-embed-text or any pull'd model)
|
|
21
|
+
* - 'openai': OpenAI Embeddings API (text-embedding-3-small / 3-large)
|
|
22
|
+
*/
|
|
23
|
+
provider?: 'ollama' | 'openai';
|
|
24
|
+
/** Ollama base URL. Default: http://localhost:11434 */
|
|
25
|
+
ollamaUrl: string;
|
|
26
|
+
/** OpenAI API key. Required when provider is 'openai'. */
|
|
27
|
+
openaiApiKey?: string;
|
|
28
|
+
/** OpenAI base URL. Default: https://api.openai.com/v1 */
|
|
29
|
+
openaiBaseUrl?: string;
|
|
30
|
+
/** Embedding model name. Default: nomic-embed-text (ollama) or text-embedding-3-small (openai) */
|
|
31
|
+
model: string;
|
|
32
|
+
/** Embedding dimensions. Default: 768 (ollama/nomic) or 1536 (openai/3-small) */
|
|
33
|
+
dimensions: number;
|
|
34
|
+
/** Request timeout ms. Default: 10000 */
|
|
35
|
+
timeout: number;
|
|
36
|
+
/** Max texts per batch request. Default: 32 (ollama) or 128 (openai) */
|
|
37
|
+
batchSize: number;
|
|
38
|
+
/** LRU cache max entries. Default: 128 */
|
|
39
|
+
cacheSize?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface VectorSearchResult {
|
|
42
|
+
rowid: number;
|
|
43
|
+
distance: number;
|
|
44
|
+
sourceTable: string;
|
|
45
|
+
sourceId: number;
|
|
46
|
+
content: string;
|
|
47
|
+
domain?: string;
|
|
48
|
+
agentId?: string;
|
|
49
|
+
metadata?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface VectorIndexStats {
|
|
52
|
+
totalVectors: number;
|
|
53
|
+
tableBreakdown: Record<string, number>;
|
|
54
|
+
lastIndexedAt: string | null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Clear the embedding cache. Primarily for testing.
|
|
58
|
+
*/
|
|
59
|
+
export declare function clearEmbeddingCache(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Generate embeddings via Ollama API.
|
|
62
|
+
* Supports single and batch embedding.
|
|
63
|
+
* Results are cached per text hash — cache hits skip the Ollama call entirely.
|
|
64
|
+
*/
|
|
65
|
+
export declare function generateEmbeddings(texts: string[], config?: EmbeddingConfig): Promise<Float32Array[]>;
|
|
66
|
+
/**
|
|
67
|
+
* VectorStore — manages vector indexes in an agent's vector database.
|
|
68
|
+
*
|
|
69
|
+
* The vector DB (vectors.db) stores vec0 virtual tables and the index map.
|
|
70
|
+
* Source content (facts, knowledge, episodes) lives in the library DB.
|
|
71
|
+
* The VectorStore needs both: vectorDb for indexes, libraryDb for content.
|
|
72
|
+
*/
|
|
73
|
+
export declare class VectorStore {
|
|
74
|
+
private readonly db;
|
|
75
|
+
private readonly libraryDb;
|
|
76
|
+
private readonly config;
|
|
77
|
+
constructor(db: DatabaseSync, config?: Partial<EmbeddingConfig>, libraryDb?: DatabaseSync);
|
|
78
|
+
/**
|
|
79
|
+
* Create vector index tables if they don't exist.
|
|
80
|
+
* Safe to call multiple times (idempotent).
|
|
81
|
+
*/
|
|
82
|
+
ensureTables(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Index a single content item. Generates embedding and stores in vec table.
|
|
85
|
+
* Skips if content hasn't changed (based on hash).
|
|
86
|
+
*/
|
|
87
|
+
/** Allowlisted source tables for vector indexing. Prevents SQL injection via table name interpolation. */
|
|
88
|
+
private static readonly ALLOWED_SOURCE_TABLES;
|
|
89
|
+
private validateSourceTable;
|
|
90
|
+
indexItem(sourceTable: string, sourceId: number, content: string, domain?: string): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* Batch index multiple items. More efficient than individual calls.
|
|
93
|
+
*/
|
|
94
|
+
indexBatch(items: Array<{
|
|
95
|
+
sourceTable: string;
|
|
96
|
+
sourceId: number;
|
|
97
|
+
content: string;
|
|
98
|
+
domain?: string;
|
|
99
|
+
}>): Promise<{
|
|
100
|
+
indexed: number;
|
|
101
|
+
skipped: number;
|
|
102
|
+
}>;
|
|
103
|
+
/**
|
|
104
|
+
* Semantic KNN search across one or all vector tables.
|
|
105
|
+
*
|
|
106
|
+
* @param precomputedEmbedding — optional pre-computed embedding for the query.
|
|
107
|
+
* When provided, skips the Ollama call entirely. The precomputed embedding
|
|
108
|
+
* is still inserted into the LRU cache so subsequent identical queries hit.
|
|
109
|
+
*/
|
|
110
|
+
search(query: string, opts?: {
|
|
111
|
+
tables?: string[];
|
|
112
|
+
limit?: number;
|
|
113
|
+
maxDistance?: number;
|
|
114
|
+
precomputedEmbedding?: Float32Array;
|
|
115
|
+
}): Promise<VectorSearchResult[]>;
|
|
116
|
+
/**
|
|
117
|
+
* Get content from a source table by id.
|
|
118
|
+
*/
|
|
119
|
+
private getSourceContent;
|
|
120
|
+
/**
|
|
121
|
+
* Index all un-indexed content in the agent's database.
|
|
122
|
+
* Called by the background indexer.
|
|
123
|
+
*/
|
|
124
|
+
indexAll(agentId: string): Promise<{
|
|
125
|
+
indexed: number;
|
|
126
|
+
skipped: number;
|
|
127
|
+
}>;
|
|
128
|
+
/**
|
|
129
|
+
* Remove vector index entries for deleted source rows.
|
|
130
|
+
*/
|
|
131
|
+
pruneOrphans(): number;
|
|
132
|
+
/**
|
|
133
|
+
* Remove the vector index entry for a single source item.
|
|
134
|
+
*
|
|
135
|
+
* Deletes both the vec table row and the vec_index_map entry for the given
|
|
136
|
+
* (sourceTable, sourceId) pair. Used by the background indexer for immediate
|
|
137
|
+
* point-in-time removal when a supersedes relationship is detected.
|
|
138
|
+
*
|
|
139
|
+
* @returns true if an entry was found and removed, false if nothing was indexed.
|
|
140
|
+
*/
|
|
141
|
+
removeItem(sourceTable: string, sourceId: number): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Check whether a source item already has a vector in the index.
|
|
144
|
+
* Used by the episode backfill to skip already-vectorized entries.
|
|
145
|
+
*/
|
|
146
|
+
hasItem(sourceTable: string, sourceId: number): boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Tombstone vector entries for superseded facts and knowledge.
|
|
149
|
+
*
|
|
150
|
+
* When fact A is superseded by fact B (facts.superseded_by = B.id), the old
|
|
151
|
+
* vector for A should not surface in semantic recall. Without this, recalled
|
|
152
|
+
* context can include contradicted/outdated facts alongside their replacements.
|
|
153
|
+
*
|
|
154
|
+
* Strategy: find all indexed facts/knowledge with superseded_by IS NOT NULL
|
|
155
|
+
* and delete their vec_index_map entries + vec table rows. The source row
|
|
156
|
+
* stays in library.db (audit trail) but disappears from recall.
|
|
157
|
+
*
|
|
158
|
+
* @returns Number of vector entries tombstoned.
|
|
159
|
+
*/
|
|
160
|
+
tombstoneSuperseded(): number;
|
|
161
|
+
/**
|
|
162
|
+
* Get index statistics.
|
|
163
|
+
*/
|
|
164
|
+
getStats(): VectorIndexStats;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Create vector tables in a library database for session registry search.
|
|
168
|
+
*/
|
|
169
|
+
export declare function ensureSessionVecTable(db: DatabaseSync, dimensions?: number): void;
|
|
170
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../src/vector-store.ts"],"names":[],"mappings":"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"}
|