@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.
Files changed (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +267 -149
  3. package/assets/agentkits-memory-add-memory.png +0 -0
  4. package/assets/agentkits-memory-memory-detail.png +0 -0
  5. package/assets/agentkits-memory-memory-list.png +0 -0
  6. package/assets/logo.svg +24 -0
  7. package/dist/better-sqlite3-backend.d.ts +192 -0
  8. package/dist/better-sqlite3-backend.d.ts.map +1 -0
  9. package/dist/better-sqlite3-backend.js +801 -0
  10. package/dist/better-sqlite3-backend.js.map +1 -0
  11. package/dist/cli/save.js +0 -0
  12. package/dist/cli/setup.d.ts +6 -2
  13. package/dist/cli/setup.d.ts.map +1 -1
  14. package/dist/cli/setup.js +289 -42
  15. package/dist/cli/setup.js.map +1 -1
  16. package/dist/cli/viewer.js +25 -56
  17. package/dist/cli/viewer.js.map +1 -1
  18. package/dist/cli/web-viewer.d.ts +14 -0
  19. package/dist/cli/web-viewer.d.ts.map +1 -0
  20. package/dist/cli/web-viewer.js +1769 -0
  21. package/dist/cli/web-viewer.js.map +1 -0
  22. package/dist/embeddings/embedding-cache.d.ts +131 -0
  23. package/dist/embeddings/embedding-cache.d.ts.map +1 -0
  24. package/dist/embeddings/embedding-cache.js +217 -0
  25. package/dist/embeddings/embedding-cache.js.map +1 -0
  26. package/dist/embeddings/index.d.ts +11 -0
  27. package/dist/embeddings/index.d.ts.map +1 -0
  28. package/dist/embeddings/index.js +11 -0
  29. package/dist/embeddings/index.js.map +1 -0
  30. package/dist/embeddings/local-embeddings.d.ts +140 -0
  31. package/dist/embeddings/local-embeddings.d.ts.map +1 -0
  32. package/dist/embeddings/local-embeddings.js +293 -0
  33. package/dist/embeddings/local-embeddings.js.map +1 -0
  34. package/dist/hooks/context.d.ts +6 -1
  35. package/dist/hooks/context.d.ts.map +1 -1
  36. package/dist/hooks/context.js +12 -2
  37. package/dist/hooks/context.js.map +1 -1
  38. package/dist/hooks/observation.d.ts +6 -1
  39. package/dist/hooks/observation.d.ts.map +1 -1
  40. package/dist/hooks/observation.js +12 -2
  41. package/dist/hooks/observation.js.map +1 -1
  42. package/dist/hooks/service.d.ts +1 -6
  43. package/dist/hooks/service.d.ts.map +1 -1
  44. package/dist/hooks/service.js +33 -85
  45. package/dist/hooks/service.js.map +1 -1
  46. package/dist/hooks/session-init.d.ts +6 -1
  47. package/dist/hooks/session-init.d.ts.map +1 -1
  48. package/dist/hooks/session-init.js +12 -2
  49. package/dist/hooks/session-init.js.map +1 -1
  50. package/dist/hooks/summarize.d.ts +6 -1
  51. package/dist/hooks/summarize.d.ts.map +1 -1
  52. package/dist/hooks/summarize.js +12 -2
  53. package/dist/hooks/summarize.js.map +1 -1
  54. package/dist/index.d.ts +10 -17
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +172 -94
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp/server.js +17 -3
  59. package/dist/mcp/server.js.map +1 -1
  60. package/dist/migration.js +3 -3
  61. package/dist/migration.js.map +1 -1
  62. package/dist/search/hybrid-search.d.ts +262 -0
  63. package/dist/search/hybrid-search.d.ts.map +1 -0
  64. package/dist/search/hybrid-search.js +688 -0
  65. package/dist/search/hybrid-search.js.map +1 -0
  66. package/dist/search/index.d.ts +13 -0
  67. package/dist/search/index.d.ts.map +1 -0
  68. package/dist/search/index.js +13 -0
  69. package/dist/search/index.js.map +1 -0
  70. package/dist/search/token-economics.d.ts +161 -0
  71. package/dist/search/token-economics.d.ts.map +1 -0
  72. package/dist/search/token-economics.js +239 -0
  73. package/dist/search/token-economics.js.map +1 -0
  74. package/dist/types.d.ts +0 -68
  75. package/dist/types.d.ts.map +1 -1
  76. package/dist/types.js.map +1 -1
  77. package/package.json +23 -8
  78. package/src/__tests__/better-sqlite3-backend.test.ts +1466 -0
  79. package/src/__tests__/cache-manager.test.ts +499 -0
  80. package/src/__tests__/embedding-integration.test.ts +481 -0
  81. package/src/__tests__/hnsw-index.test.ts +727 -0
  82. package/src/__tests__/index.test.ts +432 -0
  83. package/src/better-sqlite3-backend.ts +1000 -0
  84. package/src/cli/setup.ts +358 -47
  85. package/src/cli/viewer.ts +28 -63
  86. package/src/cli/web-viewer.ts +1956 -0
  87. package/src/embeddings/__tests__/embedding-cache.test.ts +269 -0
  88. package/src/embeddings/__tests__/local-embeddings.test.ts +495 -0
  89. package/src/embeddings/embedding-cache.ts +318 -0
  90. package/src/embeddings/index.ts +20 -0
  91. package/src/embeddings/local-embeddings.ts +419 -0
  92. package/src/hooks/__tests__/handlers.test.ts +58 -17
  93. package/src/hooks/__tests__/integration.test.ts +77 -26
  94. package/src/hooks/context.ts +13 -2
  95. package/src/hooks/observation.ts +13 -2
  96. package/src/hooks/service.ts +39 -100
  97. package/src/hooks/session-init.ts +13 -2
  98. package/src/hooks/summarize.ts +13 -2
  99. package/src/index.ts +210 -116
  100. package/src/mcp/server.ts +20 -3
  101. package/src/search/__tests__/hybrid-search.test.ts +669 -0
  102. package/src/search/__tests__/token-economics.test.ts +276 -0
  103. package/src/search/hybrid-search.ts +968 -0
  104. package/src/search/index.ts +29 -0
  105. package/src/search/token-economics.ts +367 -0
  106. package/src/types.ts +0 -96
  107. package/src/__tests__/sqljs-backend.test.ts +0 -410
  108. package/src/migration.ts +0 -574
  109. package/src/sql.js.d.ts +0 -70
  110. 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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"}