@aitytech/agentkits-memory 1.0.1 → 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/README.md +54 -5
- 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 +2 -1
- package/dist/cli/web-viewer.d.ts.map +1 -1
- package/dist/cli/web-viewer.js +791 -141
- package/dist/cli/web-viewer.js.map +1 -1
- 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 +5 -3
- 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 +936 -182
- 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
package/README.md
CHANGED
|
@@ -46,14 +46,13 @@
|
|
|
46
46
|
| Feature | Benefit |
|
|
47
47
|
|---------|---------|
|
|
48
48
|
| **100% Local** | All data stays on your machine. No cloud, no API keys, no accounts |
|
|
49
|
-
| **Blazing Fast** | SQLite
|
|
49
|
+
| **Blazing Fast** | Native SQLite (better-sqlite3) = instant queries, zero latency |
|
|
50
50
|
| **Zero Config** | Works out of the box. No database setup required |
|
|
51
51
|
| **Cross-Platform** | Windows, macOS, Linux - same code, same speed |
|
|
52
52
|
| **MCP Server** | `memory_save`, `memory_search`, `memory_recall`, `memory_list`, `memory_status` |
|
|
53
53
|
| **Web Viewer** | Browser UI to view, add, edit, delete memories |
|
|
54
54
|
| **Vector Search** | Optional HNSW semantic similarity (no external service) |
|
|
55
55
|
| **Auto-Capture** | Hooks for session context, tool usage, summaries |
|
|
56
|
-
| **Git-Friendly** | Export to markdown for version control |
|
|
57
56
|
|
|
58
57
|
---
|
|
59
58
|
|
|
@@ -220,12 +219,63 @@ Memories are stored in `.claude/memory/memory.db` within your project directory.
|
|
|
220
219
|
```
|
|
221
220
|
.claude/memory/
|
|
222
221
|
├── memory.db # SQLite database
|
|
223
|
-
|
|
224
|
-
└── exports/ # Optional markdown exports
|
|
222
|
+
└── memory.db-wal # Write-ahead log (temp)
|
|
225
223
|
```
|
|
226
224
|
|
|
227
225
|
---
|
|
228
226
|
|
|
227
|
+
## CJK Language Support
|
|
228
|
+
|
|
229
|
+
AgentKits Memory has **automatic CJK support** for Chinese, Japanese, and Korean text search.
|
|
230
|
+
|
|
231
|
+
### Zero Configuration
|
|
232
|
+
|
|
233
|
+
When `better-sqlite3` is installed (default), CJK search works automatically:
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
import { ProjectMemoryService } from '@aitytech/agentkits-memory';
|
|
237
|
+
|
|
238
|
+
const memory = new ProjectMemoryService('.claude/memory');
|
|
239
|
+
await memory.initialize();
|
|
240
|
+
|
|
241
|
+
// Store CJK content
|
|
242
|
+
await memory.storeEntry({
|
|
243
|
+
key: 'auth-pattern',
|
|
244
|
+
content: '認証機能の実装パターン - JWT with refresh tokens',
|
|
245
|
+
namespace: 'patterns',
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// Search in Japanese, Chinese, or Korean - it just works!
|
|
249
|
+
const results = await memory.query({
|
|
250
|
+
type: 'hybrid',
|
|
251
|
+
content: '認証機能',
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### How It Works
|
|
256
|
+
|
|
257
|
+
- **Native SQLite**: Uses `better-sqlite3` for maximum performance
|
|
258
|
+
- **Trigram tokenizer**: FTS5 with trigram creates 3-character sequences for CJK matching
|
|
259
|
+
- **Smart fallback**: Short CJK queries (< 3 chars) automatically use LIKE search
|
|
260
|
+
- **BM25 ranking**: Relevance scoring for search results
|
|
261
|
+
|
|
262
|
+
### Advanced: Japanese Word Segmentation
|
|
263
|
+
|
|
264
|
+
For advanced Japanese with proper word segmentation, optionally use lindera:
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import { createJapaneseOptimizedBackend } from '@aitytech/agentkits-memory';
|
|
268
|
+
|
|
269
|
+
const backend = createJapaneseOptimizedBackend({
|
|
270
|
+
databasePath: '.claude/memory/memory.db',
|
|
271
|
+
linderaPath: './path/to/liblindera_sqlite.dylib',
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Requires [lindera-sqlite](https://github.com/lindera/lindera-sqlite) build.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
229
279
|
## API Reference
|
|
230
280
|
|
|
231
281
|
### ProjectMemoryService
|
|
@@ -258,7 +308,6 @@ interface ProjectMemoryConfig {
|
|
|
258
308
|
| `semanticSearch(content, k)` | Semantic similarity search |
|
|
259
309
|
| `count(namespace?)` | Count entries |
|
|
260
310
|
| `listNamespaces()` | List all namespaces |
|
|
261
|
-
| `exportToMarkdown(namespace)` | Export to markdown |
|
|
262
311
|
| `getStats()` | Get statistics |
|
|
263
312
|
|
|
264
313
|
---
|
|
@@ -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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"}
|