family-ai-agent 1.0.6 → 1.0.8

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 (149) hide show
  1. package/.letta/settings.local.json +3 -0
  2. package/dist/cli/index.js +1 -1
  3. package/dist/database/adapters/base-adapter.d.ts +81 -0
  4. package/dist/database/adapters/base-adapter.d.ts.map +1 -0
  5. package/dist/database/adapters/base-adapter.js +105 -0
  6. package/dist/database/adapters/base-adapter.js.map +1 -0
  7. package/dist/database/adapters/index.d.ts +49 -0
  8. package/dist/database/adapters/index.d.ts.map +1 -0
  9. package/dist/database/adapters/index.js +200 -0
  10. package/dist/database/adapters/index.js.map +1 -0
  11. package/dist/database/adapters/postgres-adapter.d.ts +75 -0
  12. package/dist/database/adapters/postgres-adapter.d.ts.map +1 -0
  13. package/dist/database/adapters/postgres-adapter.js +225 -0
  14. package/dist/database/adapters/postgres-adapter.js.map +1 -0
  15. package/dist/database/adapters/sqlite-adapter.d.ts +72 -0
  16. package/dist/database/adapters/sqlite-adapter.d.ts.map +1 -0
  17. package/dist/database/adapters/sqlite-adapter.js +368 -0
  18. package/dist/database/adapters/sqlite-adapter.js.map +1 -0
  19. package/dist/database/cache/cache-keys.d.ts +180 -0
  20. package/dist/database/cache/cache-keys.d.ts.map +1 -0
  21. package/dist/database/cache/cache-keys.js +107 -0
  22. package/dist/database/cache/cache-keys.js.map +1 -0
  23. package/dist/database/cache/index.d.ts +24 -0
  24. package/dist/database/cache/index.d.ts.map +1 -0
  25. package/dist/database/cache/index.js +34 -0
  26. package/dist/database/cache/index.js.map +1 -0
  27. package/dist/database/cache/query-cache.d.ts +67 -0
  28. package/dist/database/cache/query-cache.d.ts.map +1 -0
  29. package/dist/database/cache/query-cache.js +177 -0
  30. package/dist/database/cache/query-cache.js.map +1 -0
  31. package/dist/database/client.d.ts +63 -4
  32. package/dist/database/client.d.ts.map +1 -1
  33. package/dist/database/client.js +147 -59
  34. package/dist/database/client.js.map +1 -1
  35. package/dist/database/db-config.d.ts +104 -0
  36. package/dist/database/db-config.d.ts.map +1 -0
  37. package/dist/database/db-config.js +167 -0
  38. package/dist/database/db-config.js.map +1 -0
  39. package/dist/database/drizzle/index.d.ts +42 -0
  40. package/dist/database/drizzle/index.d.ts.map +1 -0
  41. package/dist/database/drizzle/index.js +48 -0
  42. package/dist/database/drizzle/index.js.map +1 -0
  43. package/dist/database/drizzle/schema/audit.d.ts +533 -0
  44. package/dist/database/drizzle/schema/audit.d.ts.map +1 -0
  45. package/dist/database/drizzle/schema/audit.js +71 -0
  46. package/dist/database/drizzle/schema/audit.js.map +1 -0
  47. package/dist/database/drizzle/schema/checkpoints.d.ts +665 -0
  48. package/dist/database/drizzle/schema/checkpoints.d.ts.map +1 -0
  49. package/dist/database/drizzle/schema/checkpoints.js +110 -0
  50. package/dist/database/drizzle/schema/checkpoints.js.map +1 -0
  51. package/dist/database/drizzle/schema/conversations.d.ts +449 -0
  52. package/dist/database/drizzle/schema/conversations.d.ts.map +1 -0
  53. package/dist/database/drizzle/schema/conversations.js +91 -0
  54. package/dist/database/drizzle/schema/conversations.js.map +1 -0
  55. package/dist/database/drizzle/schema/documents.d.ts +600 -0
  56. package/dist/database/drizzle/schema/documents.d.ts.map +1 -0
  57. package/dist/database/drizzle/schema/documents.js +100 -0
  58. package/dist/database/drizzle/schema/documents.js.map +1 -0
  59. package/dist/database/drizzle/schema/index.d.ts +3084 -0
  60. package/dist/database/drizzle/schema/index.d.ts.map +1 -0
  61. package/dist/database/drizzle/schema/index.js +46 -0
  62. package/dist/database/drizzle/schema/index.js.map +1 -0
  63. package/dist/database/drizzle/schema/memories.d.ts +435 -0
  64. package/dist/database/drizzle/schema/memories.d.ts.map +1 -0
  65. package/dist/database/drizzle/schema/memories.js +73 -0
  66. package/dist/database/drizzle/schema/memories.js.map +1 -0
  67. package/dist/database/drizzle/schema/tasks.d.ts +565 -0
  68. package/dist/database/drizzle/schema/tasks.d.ts.map +1 -0
  69. package/dist/database/drizzle/schema/tasks.js +84 -0
  70. package/dist/database/drizzle/schema/tasks.js.map +1 -0
  71. package/dist/database/health/circuit-breaker.d.ts +81 -0
  72. package/dist/database/health/circuit-breaker.d.ts.map +1 -0
  73. package/dist/database/health/circuit-breaker.js +184 -0
  74. package/dist/database/health/circuit-breaker.js.map +1 -0
  75. package/dist/database/health/health-monitor.d.ts +69 -0
  76. package/dist/database/health/health-monitor.d.ts.map +1 -0
  77. package/dist/database/health/health-monitor.js +174 -0
  78. package/dist/database/health/health-monitor.js.map +1 -0
  79. package/dist/database/health/index.d.ts +27 -0
  80. package/dist/database/health/index.d.ts.map +1 -0
  81. package/dist/database/health/index.js +23 -0
  82. package/dist/database/health/index.js.map +1 -0
  83. package/dist/database/index.d.ts +16 -0
  84. package/dist/database/index.d.ts.map +1 -0
  85. package/dist/database/index.js +41 -0
  86. package/dist/database/index.js.map +1 -0
  87. package/dist/database/migrations/index.d.ts +34 -0
  88. package/dist/database/migrations/index.d.ts.map +1 -0
  89. package/dist/database/migrations/index.js +45 -0
  90. package/dist/database/migrations/index.js.map +1 -0
  91. package/dist/database/migrations/migrator.d.ts +77 -0
  92. package/dist/database/migrations/migrator.d.ts.map +1 -0
  93. package/dist/database/migrations/migrator.js +258 -0
  94. package/dist/database/migrations/migrator.js.map +1 -0
  95. package/dist/database/migrations/versions/001_initial.d.ts +9 -0
  96. package/dist/database/migrations/versions/001_initial.d.ts.map +1 -0
  97. package/dist/database/migrations/versions/001_initial.js +183 -0
  98. package/dist/database/migrations/versions/001_initial.js.map +1 -0
  99. package/dist/database/types.d.ts +255 -0
  100. package/dist/database/types.d.ts.map +1 -0
  101. package/dist/database/types.js +8 -0
  102. package/dist/database/types.js.map +1 -0
  103. package/dist/database/vector/embedding-cache.d.ts +92 -0
  104. package/dist/database/vector/embedding-cache.d.ts.map +1 -0
  105. package/dist/database/vector/embedding-cache.js +185 -0
  106. package/dist/database/vector/embedding-cache.js.map +1 -0
  107. package/dist/database/vector/hnsw-index.d.ts +111 -0
  108. package/dist/database/vector/hnsw-index.d.ts.map +1 -0
  109. package/dist/database/vector/hnsw-index.js +337 -0
  110. package/dist/database/vector/hnsw-index.js.map +1 -0
  111. package/dist/database/vector/index.d.ts +75 -0
  112. package/dist/database/vector/index.d.ts.map +1 -0
  113. package/dist/database/vector/index.js +213 -0
  114. package/dist/database/vector/index.js.map +1 -0
  115. package/dist/database/vector/similarity.d.ts +67 -0
  116. package/dist/database/vector/similarity.d.ts.map +1 -0
  117. package/dist/database/vector/similarity.js +176 -0
  118. package/dist/database/vector/similarity.js.map +1 -0
  119. package/package.json +6 -3
  120. package/src/cli/index.ts +1 -1
  121. package/src/database/adapters/base-adapter.ts +171 -0
  122. package/src/database/adapters/index.ts +224 -0
  123. package/src/database/adapters/postgres-adapter.ts +285 -0
  124. package/src/database/adapters/sqlite-adapter.ts +420 -0
  125. package/src/database/cache/cache-keys.ts +150 -0
  126. package/src/database/cache/index.ts +44 -0
  127. package/src/database/cache/query-cache.ts +213 -0
  128. package/src/database/client.ts +166 -64
  129. package/src/database/db-config.ts +194 -0
  130. package/src/database/drizzle/index.ts +66 -0
  131. package/src/database/drizzle/schema/audit.ts +127 -0
  132. package/src/database/drizzle/schema/checkpoints.ts +164 -0
  133. package/src/database/drizzle/schema/conversations.ts +138 -0
  134. package/src/database/drizzle/schema/documents.ts +157 -0
  135. package/src/database/drizzle/schema/index.ts +139 -0
  136. package/src/database/drizzle/schema/memories.ts +127 -0
  137. package/src/database/drizzle/schema/tasks.ts +129 -0
  138. package/src/database/health/circuit-breaker.ts +214 -0
  139. package/src/database/health/health-monitor.ts +224 -0
  140. package/src/database/health/index.ts +41 -0
  141. package/src/database/index.ts +157 -0
  142. package/src/database/migrations/index.ts +52 -0
  143. package/src/database/migrations/migrator.ts +325 -0
  144. package/src/database/migrations/versions/001_initial.ts +198 -0
  145. package/src/database/types.ts +324 -0
  146. package/src/database/vector/embedding-cache.ts +234 -0
  147. package/src/database/vector/hnsw-index.ts +452 -0
  148. package/src/database/vector/index.ts +292 -0
  149. package/src/database/vector/similarity.ts +198 -0
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Database Layer Types
3
+ *
4
+ * Shared TypeScript types for the database abstraction layer.
5
+ * Supports both PostgreSQL and SQLite backends.
6
+ */
7
+ /**
8
+ * Supported database types
9
+ */
10
+ export type DatabaseType = 'postgresql' | 'sqlite';
11
+ /**
12
+ * Database detection modes
13
+ */
14
+ export type DatabaseDetectionMode = 'auto' | 'postgresql' | 'sqlite';
15
+ /**
16
+ * Query result row constraint (compatible with pg.QueryResultRow)
17
+ */
18
+ export type QueryResultRow = Record<string, any>;
19
+ /**
20
+ * Query result interface (compatible with pg.QueryResult)
21
+ */
22
+ export interface QueryResult<T extends QueryResultRow = Record<string, any>> {
23
+ rows: T[];
24
+ rowCount: number | null;
25
+ }
26
+ /**
27
+ * Transaction client interface
28
+ */
29
+ export interface TransactionClient {
30
+ query<T extends QueryResultRow = Record<string, any>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
31
+ }
32
+ /**
33
+ * Connection pool statistics
34
+ */
35
+ export interface PoolStats {
36
+ total: number;
37
+ idle: number;
38
+ waiting: number;
39
+ }
40
+ /**
41
+ * Database health status
42
+ */
43
+ export interface DatabaseHealth {
44
+ status: 'healthy' | 'degraded' | 'unhealthy';
45
+ type: DatabaseType;
46
+ latencyMs: number;
47
+ poolStats?: PoolStats;
48
+ circuitState: CircuitBreakerState;
49
+ lastCheck: Date;
50
+ errors: string[];
51
+ }
52
+ /**
53
+ * Circuit breaker states
54
+ */
55
+ export type CircuitBreakerState = 'closed' | 'open' | 'half-open';
56
+ /**
57
+ * Migration result
58
+ */
59
+ export interface MigrationResult {
60
+ version: number;
61
+ name: string;
62
+ success: boolean;
63
+ error?: string;
64
+ durationMs: number;
65
+ }
66
+ /**
67
+ * Cache statistics
68
+ */
69
+ export interface CacheStats {
70
+ size: number;
71
+ maxSize: number;
72
+ hitCount: number;
73
+ missCount: number;
74
+ hitRate: number;
75
+ }
76
+ /**
77
+ * Vector search options
78
+ */
79
+ export interface VectorSearchOptions {
80
+ userId?: string;
81
+ memoryType?: string;
82
+ limit?: number;
83
+ minSimilarity?: number;
84
+ }
85
+ /**
86
+ * Vector search result
87
+ */
88
+ export interface VectorSearchResult {
89
+ id: string;
90
+ content: string;
91
+ similarity: number;
92
+ memoryType: string;
93
+ metadata: Record<string, unknown>;
94
+ }
95
+ /**
96
+ * Embedding entry for vector index
97
+ */
98
+ export interface EmbeddingEntry {
99
+ id: string;
100
+ vector: number[];
101
+ metadata?: Record<string, unknown>;
102
+ }
103
+ /**
104
+ * Database adapter interface
105
+ */
106
+ export interface DatabaseAdapter {
107
+ /** Database type */
108
+ readonly type: DatabaseType;
109
+ /** Whether the adapter is initialized */
110
+ readonly isInitialized: boolean;
111
+ /**
112
+ * Initialize the database connection
113
+ */
114
+ initialize(): Promise<void>;
115
+ /**
116
+ * Execute a raw SQL query
117
+ */
118
+ query<T extends QueryResultRow = Record<string, any>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
119
+ /**
120
+ * Execute a transaction
121
+ */
122
+ transaction<T>(callback: (client: TransactionClient) => Promise<T>): Promise<T>;
123
+ /**
124
+ * Check database health
125
+ */
126
+ healthCheck(): Promise<boolean>;
127
+ /**
128
+ * Get connection pool statistics (PostgreSQL only)
129
+ */
130
+ getPoolStats?(): PoolStats;
131
+ /**
132
+ * Close all connections
133
+ */
134
+ close(): Promise<void>;
135
+ }
136
+ /**
137
+ * Vector search engine interface
138
+ */
139
+ export interface VectorSearchEngine {
140
+ /**
141
+ * Initialize the vector index
142
+ */
143
+ initialize(): Promise<void>;
144
+ /**
145
+ * Store an embedding
146
+ */
147
+ store(id: string, embedding: number[], metadata?: Record<string, unknown>): Promise<void>;
148
+ /**
149
+ * Search for similar embeddings
150
+ */
151
+ search(queryEmbedding: number[], options?: VectorSearchOptions): Promise<VectorSearchResult[]>;
152
+ /**
153
+ * Remove an embedding
154
+ */
155
+ remove(id: string): Promise<void>;
156
+ /**
157
+ * Rebuild the vector index
158
+ */
159
+ rebuildIndex(): Promise<void>;
160
+ /**
161
+ * Get index statistics
162
+ */
163
+ getStats(): {
164
+ size: number;
165
+ dimension: number;
166
+ };
167
+ }
168
+ /**
169
+ * Database detection result
170
+ */
171
+ export interface DetectionResult {
172
+ type: DatabaseType;
173
+ connectionString?: string;
174
+ sqlitePath?: string;
175
+ reason: string;
176
+ }
177
+ /**
178
+ * Migration definition
179
+ */
180
+ export interface Migration {
181
+ version: number;
182
+ name: string;
183
+ up: (adapter: DatabaseAdapter) => Promise<void>;
184
+ down: (adapter: DatabaseAdapter) => Promise<void>;
185
+ }
186
+ /**
187
+ * Cache entry
188
+ */
189
+ export interface CacheEntry<T> {
190
+ value: T;
191
+ expiresAt: number;
192
+ hits: number;
193
+ }
194
+ /**
195
+ * Query cache options
196
+ */
197
+ export interface QueryCacheOptions {
198
+ maxSize: number;
199
+ defaultTtlMs: number;
200
+ }
201
+ /**
202
+ * Circuit breaker options
203
+ */
204
+ export interface CircuitBreakerOptions {
205
+ failureThreshold: number;
206
+ resetTimeoutMs: number;
207
+ halfOpenMaxAttempts: number;
208
+ }
209
+ /**
210
+ * Health monitor options
211
+ */
212
+ export interface HealthMonitorOptions {
213
+ checkIntervalMs: number;
214
+ errorThreshold: number;
215
+ }
216
+ /**
217
+ * Database configuration
218
+ */
219
+ export interface DatabaseConfig {
220
+ type: DatabaseDetectionMode;
221
+ postgresUrl?: string;
222
+ postgresHost: string;
223
+ postgresPort: number;
224
+ postgresUser: string;
225
+ postgresPassword: string;
226
+ postgresDatabase: string;
227
+ postgresPoolMax: number;
228
+ postgresIdleTimeoutMs: number;
229
+ postgresConnectionTimeoutMs: number;
230
+ sqlitePath?: string;
231
+ healthCheckIntervalMs: number;
232
+ circuitBreakerThreshold: number;
233
+ circuitBreakerTimeoutMs: number;
234
+ cacheMaxSize: number;
235
+ cacheTtlMs: number;
236
+ vectorDimension: number;
237
+ vectorMinSimilarity: number;
238
+ }
239
+ /**
240
+ * Memory types for vector storage
241
+ */
242
+ export type MemoryType = 'semantic' | 'episodic' | 'procedural';
243
+ /**
244
+ * Message roles
245
+ */
246
+ export type MessageRole = 'user' | 'assistant' | 'system';
247
+ /**
248
+ * Task status
249
+ */
250
+ export type TaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
251
+ /**
252
+ * Audit log action types
253
+ */
254
+ export type AuditActionType = 'chat_message' | 'memory_store' | 'memory_search' | 'document_upload' | 'agent_invocation' | 'tool_execution' | 'safety_block';
255
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Database Layer Types
3
+ *
4
+ * Shared TypeScript types for the database abstraction layer.
5
+ * Supports both PostgreSQL and SQLite backends.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Embedding Cache
3
+ *
4
+ * LRU cache for embeddings to avoid redundant database queries.
5
+ * Improves performance for frequently accessed vectors.
6
+ */
7
+ /**
8
+ * Cache statistics
9
+ */
10
+ export interface EmbeddingCacheStats {
11
+ size: number;
12
+ maxSize: number;
13
+ hitCount: number;
14
+ missCount: number;
15
+ hitRate: number;
16
+ memoryUsageBytes: number;
17
+ }
18
+ /**
19
+ * LRU cache for embeddings
20
+ */
21
+ export declare class EmbeddingCache {
22
+ private cache;
23
+ private maxSize;
24
+ private hitCount;
25
+ private missCount;
26
+ private dimension;
27
+ constructor(options?: {
28
+ maxSize?: number;
29
+ dimension?: number;
30
+ });
31
+ /**
32
+ * Get embedding from cache
33
+ */
34
+ get(id: string): number[] | undefined;
35
+ /**
36
+ * Set embedding in cache
37
+ */
38
+ set(id: string, embedding: number[], metadata?: Record<string, unknown>): void;
39
+ /**
40
+ * Check if ID is in cache
41
+ */
42
+ has(id: string): boolean;
43
+ /**
44
+ * Remove embedding from cache
45
+ */
46
+ delete(id: string): boolean;
47
+ /**
48
+ * Clear the cache
49
+ */
50
+ clear(): void;
51
+ /**
52
+ * Evict least recently used entry
53
+ */
54
+ private evictLRU;
55
+ /**
56
+ * Evict entries matching a pattern
57
+ */
58
+ evictPattern(pattern: (id: string) => boolean): number;
59
+ /**
60
+ * Get multiple embeddings (batch)
61
+ */
62
+ getMany(ids: string[]): Map<string, number[]>;
63
+ /**
64
+ * Set multiple embeddings (batch)
65
+ */
66
+ setMany(entries: Array<{
67
+ id: string;
68
+ embedding: number[];
69
+ metadata?: Record<string, unknown>;
70
+ }>): void;
71
+ /**
72
+ * Get cache statistics
73
+ */
74
+ getStats(): EmbeddingCacheStats;
75
+ /**
76
+ * Get cache size
77
+ */
78
+ get size(): number;
79
+ /**
80
+ * Preload embeddings from database records
81
+ */
82
+ preload(records: Array<{
83
+ id: string;
84
+ embedding: number[] | string;
85
+ }>): void;
86
+ /**
87
+ * Trim cache to a smaller size
88
+ */
89
+ trim(newMaxSize: number): void;
90
+ }
91
+ export default EmbeddingCache;
92
+ //# sourceMappingURL=embedding-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-cache.d.ts","sourceRoot":"","sources":["../../../src/database/vector/embedding-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAKlE;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAoBrC;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAmB9E;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM;IAWtD;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAW7C;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAMtG;;OAEG;IACH,QAAQ,IAAI,mBAAmB;IAc/B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAoB3E;;OAEG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAe/B;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Embedding Cache
3
+ *
4
+ * LRU cache for embeddings to avoid redundant database queries.
5
+ * Improves performance for frequently accessed vectors.
6
+ */
7
+ import { createLogger } from '../../utils/logger.js';
8
+ const logger = createLogger('EmbeddingCache');
9
+ /**
10
+ * LRU cache for embeddings
11
+ */
12
+ export class EmbeddingCache {
13
+ cache = new Map();
14
+ maxSize;
15
+ hitCount = 0;
16
+ missCount = 0;
17
+ dimension;
18
+ constructor(options = {}) {
19
+ this.maxSize = options.maxSize ?? 10000;
20
+ this.dimension = options.dimension ?? 1536;
21
+ }
22
+ /**
23
+ * Get embedding from cache
24
+ */
25
+ get(id) {
26
+ const entry = this.cache.get(id);
27
+ if (!entry) {
28
+ this.missCount++;
29
+ return undefined;
30
+ }
31
+ // Update access metadata
32
+ entry.accessCount++;
33
+ entry.lastAccessed = Date.now();
34
+ // Move to end for LRU
35
+ this.cache.delete(id);
36
+ this.cache.set(id, entry);
37
+ this.hitCount++;
38
+ return entry.embedding;
39
+ }
40
+ /**
41
+ * Set embedding in cache
42
+ */
43
+ set(id, embedding, metadata) {
44
+ // Evict if at capacity
45
+ if (this.cache.size >= this.maxSize && !this.cache.has(id)) {
46
+ this.evictLRU();
47
+ }
48
+ const entry = {
49
+ embedding,
50
+ metadata,
51
+ accessCount: 1,
52
+ lastAccessed: Date.now(),
53
+ addedAt: Date.now(),
54
+ };
55
+ // Delete first to ensure it's at the end
56
+ this.cache.delete(id);
57
+ this.cache.set(id, entry);
58
+ }
59
+ /**
60
+ * Check if ID is in cache
61
+ */
62
+ has(id) {
63
+ return this.cache.has(id);
64
+ }
65
+ /**
66
+ * Remove embedding from cache
67
+ */
68
+ delete(id) {
69
+ return this.cache.delete(id);
70
+ }
71
+ /**
72
+ * Clear the cache
73
+ */
74
+ clear() {
75
+ this.cache.clear();
76
+ this.hitCount = 0;
77
+ this.missCount = 0;
78
+ logger.debug('Embedding cache cleared');
79
+ }
80
+ /**
81
+ * Evict least recently used entry
82
+ */
83
+ evictLRU() {
84
+ // First entry is LRU due to Map ordering
85
+ const firstKey = this.cache.keys().next().value;
86
+ if (firstKey) {
87
+ this.cache.delete(firstKey);
88
+ }
89
+ }
90
+ /**
91
+ * Evict entries matching a pattern
92
+ */
93
+ evictPattern(pattern) {
94
+ let count = 0;
95
+ for (const id of this.cache.keys()) {
96
+ if (pattern(id)) {
97
+ this.cache.delete(id);
98
+ count++;
99
+ }
100
+ }
101
+ return count;
102
+ }
103
+ /**
104
+ * Get multiple embeddings (batch)
105
+ */
106
+ getMany(ids) {
107
+ const result = new Map();
108
+ for (const id of ids) {
109
+ const embedding = this.get(id);
110
+ if (embedding) {
111
+ result.set(id, embedding);
112
+ }
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Set multiple embeddings (batch)
118
+ */
119
+ setMany(entries) {
120
+ for (const { id, embedding, metadata } of entries) {
121
+ this.set(id, embedding, metadata);
122
+ }
123
+ }
124
+ /**
125
+ * Get cache statistics
126
+ */
127
+ getStats() {
128
+ const totalRequests = this.hitCount + this.missCount;
129
+ const memoryUsageBytes = this.cache.size * this.dimension * 4; // 4 bytes per float32
130
+ return {
131
+ size: this.cache.size,
132
+ maxSize: this.maxSize,
133
+ hitCount: this.hitCount,
134
+ missCount: this.missCount,
135
+ hitRate: totalRequests > 0 ? this.hitCount / totalRequests : 0,
136
+ memoryUsageBytes,
137
+ };
138
+ }
139
+ /**
140
+ * Get cache size
141
+ */
142
+ get size() {
143
+ return this.cache.size;
144
+ }
145
+ /**
146
+ * Preload embeddings from database records
147
+ */
148
+ preload(records) {
149
+ for (const record of records) {
150
+ let embedding;
151
+ if (typeof record.embedding === 'string') {
152
+ try {
153
+ embedding = JSON.parse(record.embedding);
154
+ }
155
+ catch {
156
+ continue;
157
+ }
158
+ }
159
+ else {
160
+ embedding = record.embedding;
161
+ }
162
+ this.set(record.id, embedding);
163
+ }
164
+ logger.debug('Embeddings preloaded', { count: records.length });
165
+ }
166
+ /**
167
+ * Trim cache to a smaller size
168
+ */
169
+ trim(newMaxSize) {
170
+ if (newMaxSize >= this.cache.size)
171
+ return;
172
+ const toRemove = this.cache.size - newMaxSize;
173
+ let removed = 0;
174
+ for (const id of this.cache.keys()) {
175
+ if (removed >= toRemove)
176
+ break;
177
+ this.cache.delete(id);
178
+ removed++;
179
+ }
180
+ this.maxSize = newMaxSize;
181
+ logger.debug('Cache trimmed', { removed, newSize: this.cache.size });
182
+ }
183
+ }
184
+ export default EmbeddingCache;
185
+ //# sourceMappingURL=embedding-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-cache.js","sourceRoot":"","sources":["../../../src/database/vector/embedding-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * HNSW (Hierarchical Navigable Small World) Index
3
+ *
4
+ * In-memory approximate nearest neighbor search for SQLite mode.
5
+ * Provides fast vector similarity search without pgvector.
6
+ */
7
+ /**
8
+ * Search result with similarity score
9
+ */
10
+ export interface SearchResult {
11
+ id: string;
12
+ similarity: number;
13
+ }
14
+ /**
15
+ * HNSW index configuration
16
+ */
17
+ export interface HNSWConfig {
18
+ /** Vector dimension */
19
+ dimension: number;
20
+ /** Similarity metric: 'cosine' or 'euclidean' */
21
+ similarity: 'cosine' | 'euclidean';
22
+ /** Maximum connections per layer */
23
+ M: number;
24
+ /** Maximum connections for layer 0 */
25
+ M0: number;
26
+ /** Size of dynamic candidate list during construction */
27
+ efConstruction: number;
28
+ /** Level generation factor (1/ln(M)) */
29
+ mL: number;
30
+ }
31
+ /**
32
+ * HNSW Index for fast approximate nearest neighbor search
33
+ */
34
+ export declare class HNSWIndex {
35
+ private nodes;
36
+ private entryPoint;
37
+ private maxLevel;
38
+ private config;
39
+ constructor(config?: Partial<HNSWConfig>);
40
+ /**
41
+ * Get similarity function based on config
42
+ */
43
+ private getSimilarity;
44
+ /**
45
+ * Generate random level for new node
46
+ */
47
+ private randomLevel;
48
+ /**
49
+ * Get maximum connections for a level
50
+ */
51
+ private getMaxConnections;
52
+ /**
53
+ * Add a vector to the index
54
+ */
55
+ add(id: string, vector: number[]): void;
56
+ /**
57
+ * Search for k nearest neighbors
58
+ */
59
+ search(query: number[], k: number, ef?: number): SearchResult[];
60
+ /**
61
+ * Search within a layer
62
+ */
63
+ private searchLayer;
64
+ /**
65
+ * Select best neighbors from candidates
66
+ */
67
+ private selectNeighbors;
68
+ /**
69
+ * Prune connections to maintain max connections
70
+ */
71
+ private pruneConnections;
72
+ /**
73
+ * Remove a vector from the index
74
+ */
75
+ remove(id: string): boolean;
76
+ /**
77
+ * Check if an ID exists in the index
78
+ */
79
+ has(id: string): boolean;
80
+ /**
81
+ * Get vector by ID
82
+ */
83
+ get(id: string): number[] | undefined;
84
+ /**
85
+ * Get index size
86
+ */
87
+ get size(): number;
88
+ /**
89
+ * Get index statistics
90
+ */
91
+ getStats(): {
92
+ size: number;
93
+ dimension: number;
94
+ maxLevel: number;
95
+ avgConnections: number;
96
+ };
97
+ /**
98
+ * Clear the index
99
+ */
100
+ clear(): void;
101
+ /**
102
+ * Get all IDs in the index
103
+ */
104
+ getAllIds(): string[];
105
+ /**
106
+ * Rebuild index from scratch (for optimization)
107
+ */
108
+ rebuild(): void;
109
+ }
110
+ export default HNSWIndex;
111
+ //# sourceMappingURL=hnsw-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hnsw-index.d.ts","sourceRoot":"","sources":["../../../src/database/vector/hnsw-index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,UAAU,EAAE,QAAQ,GAAG,WAAW,CAAC;IACnC,oCAAoC;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;CACZ;AAcD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM;IAI5C;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAoFvC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAyB/D;;OAEG;IACH,OAAO,CAAC,WAAW;IA8DnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAoC3B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAIrC;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB;IAmBD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAchB;AAED,eAAe,SAAS,CAAC"}