@aitytech/agentkits-memory 1.0.0 → 2.0.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/LICENSE +21 -0
- package/README.md +267 -149
- package/assets/agentkits-memory-add-memory.png +0 -0
- package/assets/agentkits-memory-memory-detail.png +0 -0
- package/assets/agentkits-memory-memory-list.png +0 -0
- package/assets/logo.svg +24 -0
- package/dist/better-sqlite3-backend.d.ts +192 -0
- package/dist/better-sqlite3-backend.d.ts.map +1 -0
- package/dist/better-sqlite3-backend.js +801 -0
- package/dist/better-sqlite3-backend.js.map +1 -0
- package/dist/cli/save.js +0 -0
- package/dist/cli/setup.d.ts +6 -2
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +289 -42
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/viewer.js +25 -56
- package/dist/cli/viewer.js.map +1 -1
- package/dist/cli/web-viewer.d.ts +14 -0
- package/dist/cli/web-viewer.d.ts.map +1 -0
- package/dist/cli/web-viewer.js +1769 -0
- package/dist/cli/web-viewer.js.map +1 -0
- package/dist/embeddings/embedding-cache.d.ts +131 -0
- package/dist/embeddings/embedding-cache.d.ts.map +1 -0
- package/dist/embeddings/embedding-cache.js +217 -0
- package/dist/embeddings/embedding-cache.js.map +1 -0
- package/dist/embeddings/index.d.ts +11 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +11 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/local-embeddings.d.ts +140 -0
- package/dist/embeddings/local-embeddings.d.ts.map +1 -0
- package/dist/embeddings/local-embeddings.js +293 -0
- package/dist/embeddings/local-embeddings.js.map +1 -0
- package/dist/hooks/context.d.ts +6 -1
- package/dist/hooks/context.d.ts.map +1 -1
- package/dist/hooks/context.js +12 -2
- package/dist/hooks/context.js.map +1 -1
- package/dist/hooks/observation.d.ts +6 -1
- package/dist/hooks/observation.d.ts.map +1 -1
- package/dist/hooks/observation.js +12 -2
- package/dist/hooks/observation.js.map +1 -1
- package/dist/hooks/service.d.ts +1 -6
- package/dist/hooks/service.d.ts.map +1 -1
- package/dist/hooks/service.js +33 -85
- package/dist/hooks/service.js.map +1 -1
- package/dist/hooks/session-init.d.ts +6 -1
- package/dist/hooks/session-init.d.ts.map +1 -1
- package/dist/hooks/session-init.js +12 -2
- package/dist/hooks/session-init.js.map +1 -1
- package/dist/hooks/summarize.d.ts +6 -1
- package/dist/hooks/summarize.d.ts.map +1 -1
- package/dist/hooks/summarize.js +12 -2
- package/dist/hooks/summarize.js.map +1 -1
- package/dist/index.d.ts +10 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +172 -94
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +17 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/migration.js +3 -3
- package/dist/migration.js.map +1 -1
- package/dist/search/hybrid-search.d.ts +262 -0
- package/dist/search/hybrid-search.d.ts.map +1 -0
- package/dist/search/hybrid-search.js +688 -0
- package/dist/search/hybrid-search.js.map +1 -0
- package/dist/search/index.d.ts +13 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +13 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/token-economics.d.ts +161 -0
- package/dist/search/token-economics.d.ts.map +1 -0
- package/dist/search/token-economics.js +239 -0
- package/dist/search/token-economics.js.map +1 -0
- package/dist/types.d.ts +0 -68
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +23 -8
- package/src/__tests__/better-sqlite3-backend.test.ts +1466 -0
- package/src/__tests__/cache-manager.test.ts +499 -0
- package/src/__tests__/embedding-integration.test.ts +481 -0
- package/src/__tests__/hnsw-index.test.ts +727 -0
- package/src/__tests__/index.test.ts +432 -0
- package/src/better-sqlite3-backend.ts +1000 -0
- package/src/cli/setup.ts +358 -47
- package/src/cli/viewer.ts +28 -63
- package/src/cli/web-viewer.ts +1956 -0
- package/src/embeddings/__tests__/embedding-cache.test.ts +269 -0
- package/src/embeddings/__tests__/local-embeddings.test.ts +495 -0
- package/src/embeddings/embedding-cache.ts +318 -0
- package/src/embeddings/index.ts +20 -0
- package/src/embeddings/local-embeddings.ts +419 -0
- package/src/hooks/__tests__/handlers.test.ts +58 -17
- package/src/hooks/__tests__/integration.test.ts +77 -26
- package/src/hooks/context.ts +13 -2
- package/src/hooks/observation.ts +13 -2
- package/src/hooks/service.ts +39 -100
- package/src/hooks/session-init.ts +13 -2
- package/src/hooks/summarize.ts +13 -2
- package/src/index.ts +210 -116
- package/src/mcp/server.ts +20 -3
- package/src/search/__tests__/hybrid-search.test.ts +669 -0
- package/src/search/__tests__/token-economics.test.ts +276 -0
- package/src/search/hybrid-search.ts +968 -0
- package/src/search/index.ts +29 -0
- package/src/search/token-economics.ts +367 -0
- package/src/types.ts +0 -96
- package/src/__tests__/sqljs-backend.test.ts +0 -410
- package/src/migration.ts +0 -574
- package/src/sql.js.d.ts +0 -70
- package/src/sqljs-backend.ts +0 -789
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BetterSqlite3Backend - Native SQLite with FTS5 Trigram for CJK Support
|
|
3
|
+
*
|
|
4
|
+
* Production-grade backend using better-sqlite3 (native SQLite).
|
|
5
|
+
* Provides:
|
|
6
|
+
* - FTS5 with trigram tokenizer for CJK (Japanese, Chinese, Korean)
|
|
7
|
+
* - BM25 ranking for relevance scoring
|
|
8
|
+
* - 10x faster than sql.js for large datasets
|
|
9
|
+
* - Proper word segmentation for all languages
|
|
10
|
+
*
|
|
11
|
+
* Requires:
|
|
12
|
+
* - Node.js environment (no browser support)
|
|
13
|
+
* - npm install better-sqlite3
|
|
14
|
+
*
|
|
15
|
+
* @module @agentkits/memory/better-sqlite3-backend
|
|
16
|
+
*/
|
|
17
|
+
import { EventEmitter } from 'node:events';
|
|
18
|
+
import type Database from 'better-sqlite3';
|
|
19
|
+
import { IMemoryBackend, MemoryEntry, MemoryEntryUpdate, MemoryQuery, SearchOptions, SearchResult, BackendStats, HealthCheckResult, EmbeddingGenerator } from './types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Configuration for BetterSqlite3 Backend
|
|
22
|
+
*/
|
|
23
|
+
export interface BetterSqlite3BackendConfig {
|
|
24
|
+
/** Path to SQLite database file (:memory: for in-memory) */
|
|
25
|
+
databasePath: string;
|
|
26
|
+
/** Enable query optimization and WAL mode */
|
|
27
|
+
optimize: boolean;
|
|
28
|
+
/** Default namespace */
|
|
29
|
+
defaultNamespace: string;
|
|
30
|
+
/** Embedding generator for semantic search */
|
|
31
|
+
embeddingGenerator?: EmbeddingGenerator;
|
|
32
|
+
/** Maximum entries before auto-cleanup */
|
|
33
|
+
maxEntries: number;
|
|
34
|
+
/** Enable verbose logging */
|
|
35
|
+
verbose: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* FTS5 tokenizer to use
|
|
38
|
+
* - 'trigram': Best for CJK (Japanese, Chinese, Korean) - works with all languages
|
|
39
|
+
* - 'unicode61': Standard tokenizer, good for English/Latin
|
|
40
|
+
* - 'porter': Stemming for English
|
|
41
|
+
*/
|
|
42
|
+
ftsTokenizer: 'trigram' | 'unicode61' | 'porter';
|
|
43
|
+
/** Path to custom SQLite extension (e.g., lindera for advanced Japanese) */
|
|
44
|
+
extensionPath?: string;
|
|
45
|
+
/** Custom tokenizer name when using extension (e.g., 'lindera_tokenizer') */
|
|
46
|
+
customTokenizer?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* BetterSqlite3 Backend for Production Memory Storage
|
|
50
|
+
*
|
|
51
|
+
* Features:
|
|
52
|
+
* - Native SQLite performance (10x faster than sql.js)
|
|
53
|
+
* - FTS5 with trigram tokenizer for CJK language support
|
|
54
|
+
* - BM25 relevance ranking
|
|
55
|
+
* - WAL mode for concurrent reads
|
|
56
|
+
* - Optional extension loading (lindera, ICU, etc.)
|
|
57
|
+
*/
|
|
58
|
+
export declare class BetterSqlite3Backend extends EventEmitter implements IMemoryBackend {
|
|
59
|
+
private config;
|
|
60
|
+
private db;
|
|
61
|
+
private initialized;
|
|
62
|
+
private ftsAvailable;
|
|
63
|
+
private stats;
|
|
64
|
+
constructor(config?: Partial<BetterSqlite3BackendConfig>);
|
|
65
|
+
/**
|
|
66
|
+
* Initialize the BetterSqlite3 backend
|
|
67
|
+
*/
|
|
68
|
+
initialize(): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Create the database schema
|
|
71
|
+
*/
|
|
72
|
+
private createSchema;
|
|
73
|
+
/**
|
|
74
|
+
* Create FTS5 virtual table with appropriate tokenizer
|
|
75
|
+
*/
|
|
76
|
+
private createFtsTable;
|
|
77
|
+
/**
|
|
78
|
+
* Get the active tokenizer being used
|
|
79
|
+
*/
|
|
80
|
+
getActiveTokenizer(): string;
|
|
81
|
+
/**
|
|
82
|
+
* Check if FTS5 is available and CJK optimized
|
|
83
|
+
*/
|
|
84
|
+
isFtsAvailable(): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Check if CJK is optimally supported (trigram or lindera)
|
|
87
|
+
*/
|
|
88
|
+
isCjkOptimized(): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Shutdown the backend
|
|
91
|
+
*/
|
|
92
|
+
shutdown(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Store a memory entry
|
|
95
|
+
*/
|
|
96
|
+
store(entry: MemoryEntry): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Retrieve a memory entry by ID
|
|
99
|
+
*/
|
|
100
|
+
get(id: string): Promise<MemoryEntry | null>;
|
|
101
|
+
/**
|
|
102
|
+
* Retrieve a memory entry by key within a namespace
|
|
103
|
+
*/
|
|
104
|
+
getByKey(namespace: string, key: string): Promise<MemoryEntry | null>;
|
|
105
|
+
/**
|
|
106
|
+
* Update a memory entry
|
|
107
|
+
*/
|
|
108
|
+
update(id: string, update: MemoryEntryUpdate): Promise<MemoryEntry | null>;
|
|
109
|
+
/**
|
|
110
|
+
* Delete a memory entry
|
|
111
|
+
*/
|
|
112
|
+
delete(id: string): Promise<boolean>;
|
|
113
|
+
/**
|
|
114
|
+
* Query memory entries
|
|
115
|
+
*/
|
|
116
|
+
query(query: MemoryQuery): Promise<MemoryEntry[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Full-text search using FTS5
|
|
119
|
+
*/
|
|
120
|
+
searchFts(query: string, options?: {
|
|
121
|
+
namespace?: string;
|
|
122
|
+
limit?: number;
|
|
123
|
+
}): Promise<MemoryEntry[]>;
|
|
124
|
+
/**
|
|
125
|
+
* LIKE-based search fallback
|
|
126
|
+
*/
|
|
127
|
+
private searchLike;
|
|
128
|
+
/**
|
|
129
|
+
* Sanitize query for FTS5
|
|
130
|
+
*/
|
|
131
|
+
private sanitizeFtsQuery;
|
|
132
|
+
/**
|
|
133
|
+
* Semantic vector search
|
|
134
|
+
*/
|
|
135
|
+
search(embedding: Float32Array, options: SearchOptions): Promise<SearchResult[]>;
|
|
136
|
+
/**
|
|
137
|
+
* Calculate cosine similarity between two vectors
|
|
138
|
+
*/
|
|
139
|
+
private cosineSimilarity;
|
|
140
|
+
/**
|
|
141
|
+
* Bulk insert entries
|
|
142
|
+
*/
|
|
143
|
+
bulkInsert(entries: MemoryEntry[]): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Bulk delete entries
|
|
146
|
+
*/
|
|
147
|
+
bulkDelete(ids: string[]): Promise<number>;
|
|
148
|
+
/**
|
|
149
|
+
* Get entry count
|
|
150
|
+
*/
|
|
151
|
+
count(namespace?: string): Promise<number>;
|
|
152
|
+
/**
|
|
153
|
+
* List all namespaces
|
|
154
|
+
*/
|
|
155
|
+
listNamespaces(): Promise<string[]>;
|
|
156
|
+
/**
|
|
157
|
+
* Clear all entries in a namespace
|
|
158
|
+
*/
|
|
159
|
+
clearNamespace(namespace: string): Promise<number>;
|
|
160
|
+
/**
|
|
161
|
+
* Get backend statistics
|
|
162
|
+
*/
|
|
163
|
+
getStats(): Promise<BackendStats>;
|
|
164
|
+
/**
|
|
165
|
+
* Perform health check
|
|
166
|
+
*/
|
|
167
|
+
healthCheck(): Promise<HealthCheckResult>;
|
|
168
|
+
/**
|
|
169
|
+
* Get the underlying database for advanced operations
|
|
170
|
+
*/
|
|
171
|
+
getDatabase(): Database.Database | null;
|
|
172
|
+
/**
|
|
173
|
+
* Rebuild FTS index
|
|
174
|
+
*/
|
|
175
|
+
rebuildFtsIndex(): Promise<void>;
|
|
176
|
+
/**
|
|
177
|
+
* Convert database row to MemoryEntry
|
|
178
|
+
*/
|
|
179
|
+
private rowToEntry;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create a BetterSqlite3 backend with default CJK support
|
|
183
|
+
*/
|
|
184
|
+
export declare function createBetterSqlite3Backend(config?: Partial<BetterSqlite3BackendConfig>): BetterSqlite3Backend;
|
|
185
|
+
/**
|
|
186
|
+
* Create a BetterSqlite3 backend with lindera extension for advanced Japanese
|
|
187
|
+
*/
|
|
188
|
+
export declare function createJapaneseOptimizedBackend(config: Partial<BetterSqlite3BackendConfig> & {
|
|
189
|
+
linderaPath: string;
|
|
190
|
+
}): BetterSqlite3Backend;
|
|
191
|
+
export default BetterSqlite3Backend;
|
|
192
|
+
//# sourceMappingURL=better-sqlite3-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-sqlite3-backend.d.ts","sourceRoot":"","sources":["../src/better-sqlite3-backend.ts"],"names":[],"mappings":"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"}
|