@claude-flow/memory 3.0.0-alpha.1 → 3.0.0-alpha.10

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 (163) hide show
  1. package/README.md +356 -18
  2. package/dist/agent-memory-scope.d.ts +131 -0
  3. package/dist/agent-memory-scope.d.ts.map +1 -0
  4. package/dist/agent-memory-scope.js +215 -0
  5. package/dist/agent-memory-scope.js.map +1 -0
  6. package/dist/agent-memory-scope.test.d.ts +8 -0
  7. package/dist/agent-memory-scope.test.d.ts.map +1 -0
  8. package/dist/agent-memory-scope.test.js +463 -0
  9. package/dist/agent-memory-scope.test.js.map +1 -0
  10. package/dist/agentdb-adapter.d.ts +22 -3
  11. package/dist/agentdb-adapter.d.ts.map +1 -1
  12. package/dist/agentdb-adapter.js +135 -8
  13. package/dist/agentdb-adapter.js.map +1 -1
  14. package/dist/auto-memory-bridge.d.ts +226 -0
  15. package/dist/auto-memory-bridge.d.ts.map +1 -0
  16. package/dist/auto-memory-bridge.js +709 -0
  17. package/dist/auto-memory-bridge.js.map +1 -0
  18. package/dist/auto-memory-bridge.test.d.ts +8 -0
  19. package/dist/auto-memory-bridge.test.d.ts.map +1 -0
  20. package/dist/auto-memory-bridge.test.js +754 -0
  21. package/dist/auto-memory-bridge.test.js.map +1 -0
  22. package/dist/benchmark.test.d.ts +2 -0
  23. package/dist/benchmark.test.d.ts.map +1 -0
  24. package/dist/benchmark.test.js +277 -0
  25. package/dist/benchmark.test.js.map +1 -0
  26. package/dist/hybrid-backend.d.ts.map +1 -1
  27. package/dist/hybrid-backend.js +29 -4
  28. package/dist/hybrid-backend.js.map +1 -1
  29. package/dist/index.d.ts +8 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +8 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/learning-bridge.d.ts +137 -0
  34. package/dist/learning-bridge.d.ts.map +1 -0
  35. package/dist/learning-bridge.js +335 -0
  36. package/dist/learning-bridge.js.map +1 -0
  37. package/dist/learning-bridge.test.d.ts +8 -0
  38. package/dist/learning-bridge.test.d.ts.map +1 -0
  39. package/dist/learning-bridge.test.js +578 -0
  40. package/dist/learning-bridge.test.js.map +1 -0
  41. package/dist/memory-graph.d.ts +100 -0
  42. package/dist/memory-graph.d.ts.map +1 -0
  43. package/dist/memory-graph.js +333 -0
  44. package/dist/memory-graph.js.map +1 -0
  45. package/dist/memory-graph.test.d.ts +8 -0
  46. package/dist/memory-graph.test.d.ts.map +1 -0
  47. package/dist/memory-graph.test.js +609 -0
  48. package/dist/memory-graph.test.js.map +1 -0
  49. package/dist/sqlite-backend.js +3 -3
  50. package/dist/sqljs-backend.d.ts.map +1 -1
  51. package/dist/sqljs-backend.js +5 -2
  52. package/dist/sqljs-backend.js.map +1 -1
  53. package/dist/types.d.ts +3 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +20 -5
  56. package/.agentic-flow/intelligence.json +0 -16
  57. package/__tests__/coverage/base.css +0 -224
  58. package/__tests__/coverage/block-navigation.js +0 -87
  59. package/__tests__/coverage/coverage-final.json +0 -19
  60. package/__tests__/coverage/favicon.png +0 -0
  61. package/__tests__/coverage/index.html +0 -206
  62. package/__tests__/coverage/lcov-report/base.css +0 -224
  63. package/__tests__/coverage/lcov-report/block-navigation.js +0 -87
  64. package/__tests__/coverage/lcov-report/favicon.png +0 -0
  65. package/__tests__/coverage/lcov-report/index.html +0 -206
  66. package/__tests__/coverage/lcov-report/prettify.css +0 -1
  67. package/__tests__/coverage/lcov-report/prettify.js +0 -2
  68. package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  69. package/__tests__/coverage/lcov-report/sorter.js +0 -210
  70. package/__tests__/coverage/lcov-report/src/agentdb-adapter.ts.html +0 -2737
  71. package/__tests__/coverage/lcov-report/src/agentdb-backend.ts.html +0 -3130
  72. package/__tests__/coverage/lcov-report/src/application/commands/delete-memory.command.ts.html +0 -601
  73. package/__tests__/coverage/lcov-report/src/application/commands/index.html +0 -131
  74. package/__tests__/coverage/lcov-report/src/application/commands/store-memory.command.ts.html +0 -394
  75. package/__tests__/coverage/lcov-report/src/application/queries/index.html +0 -116
  76. package/__tests__/coverage/lcov-report/src/application/queries/search-memory.query.ts.html +0 -796
  77. package/__tests__/coverage/lcov-report/src/application/services/index.html +0 -116
  78. package/__tests__/coverage/lcov-report/src/application/services/memory-application-service.ts.html +0 -793
  79. package/__tests__/coverage/lcov-report/src/cache-manager.ts.html +0 -1633
  80. package/__tests__/coverage/lcov-report/src/database-provider.ts.html +0 -1618
  81. package/__tests__/coverage/lcov-report/src/domain/entities/index.html +0 -116
  82. package/__tests__/coverage/lcov-report/src/domain/entities/memory-entry.ts.html +0 -952
  83. package/__tests__/coverage/lcov-report/src/domain/services/index.html +0 -116
  84. package/__tests__/coverage/lcov-report/src/domain/services/memory-domain-service.ts.html +0 -1294
  85. package/__tests__/coverage/lcov-report/src/hnsw-index.ts.html +0 -3124
  86. package/__tests__/coverage/lcov-report/src/hybrid-backend.ts.html +0 -2167
  87. package/__tests__/coverage/lcov-report/src/index.html +0 -266
  88. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  89. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/index.html +0 -116
  90. package/__tests__/coverage/lcov-report/src/migration.ts.html +0 -2092
  91. package/__tests__/coverage/lcov-report/src/query-builder.ts.html +0 -1711
  92. package/__tests__/coverage/lcov-report/src/sqlite-backend.ts.html +0 -2281
  93. package/__tests__/coverage/lcov-report/src/sqljs-backend.ts.html +0 -2374
  94. package/__tests__/coverage/lcov-report/src/types.ts.html +0 -2266
  95. package/__tests__/coverage/lcov.info +0 -10238
  96. package/__tests__/coverage/prettify.css +0 -1
  97. package/__tests__/coverage/prettify.js +0 -2
  98. package/__tests__/coverage/sort-arrow-sprite.png +0 -0
  99. package/__tests__/coverage/sorter.js +0 -210
  100. package/__tests__/coverage/src/agentdb-adapter.ts.html +0 -2737
  101. package/__tests__/coverage/src/agentdb-backend.ts.html +0 -3130
  102. package/__tests__/coverage/src/application/commands/delete-memory.command.ts.html +0 -601
  103. package/__tests__/coverage/src/application/commands/index.html +0 -131
  104. package/__tests__/coverage/src/application/commands/store-memory.command.ts.html +0 -394
  105. package/__tests__/coverage/src/application/queries/index.html +0 -116
  106. package/__tests__/coverage/src/application/queries/search-memory.query.ts.html +0 -796
  107. package/__tests__/coverage/src/application/services/index.html +0 -116
  108. package/__tests__/coverage/src/application/services/memory-application-service.ts.html +0 -793
  109. package/__tests__/coverage/src/cache-manager.ts.html +0 -1633
  110. package/__tests__/coverage/src/database-provider.ts.html +0 -1618
  111. package/__tests__/coverage/src/domain/entities/index.html +0 -116
  112. package/__tests__/coverage/src/domain/entities/memory-entry.ts.html +0 -952
  113. package/__tests__/coverage/src/domain/services/index.html +0 -116
  114. package/__tests__/coverage/src/domain/services/memory-domain-service.ts.html +0 -1294
  115. package/__tests__/coverage/src/hnsw-index.ts.html +0 -3124
  116. package/__tests__/coverage/src/hybrid-backend.ts.html +0 -2167
  117. package/__tests__/coverage/src/index.html +0 -266
  118. package/__tests__/coverage/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  119. package/__tests__/coverage/src/infrastructure/repositories/index.html +0 -116
  120. package/__tests__/coverage/src/migration.ts.html +0 -2092
  121. package/__tests__/coverage/src/query-builder.ts.html +0 -1711
  122. package/__tests__/coverage/src/sqlite-backend.ts.html +0 -2281
  123. package/__tests__/coverage/src/sqljs-backend.ts.html +0 -2374
  124. package/__tests__/coverage/src/types.ts.html +0 -2266
  125. package/benchmarks/cache-hit-rate.bench.ts +0 -535
  126. package/benchmarks/hnsw-indexing.bench.ts +0 -552
  127. package/benchmarks/memory-write.bench.ts +0 -469
  128. package/benchmarks/vector-search.bench.ts +0 -449
  129. package/docs/AGENTDB-INTEGRATION.md +0 -388
  130. package/docs/CROSS_PLATFORM.md +0 -505
  131. package/docs/WINDOWS_SUPPORT.md +0 -422
  132. package/examples/agentdb-example.ts +0 -345
  133. package/examples/cross-platform-usage.ts +0 -326
  134. package/framework/benchmark.ts +0 -112
  135. package/src/agentdb-adapter.ts +0 -884
  136. package/src/agentdb-backend.test.ts +0 -339
  137. package/src/agentdb-backend.ts +0 -1016
  138. package/src/application/commands/delete-memory.command.ts +0 -172
  139. package/src/application/commands/store-memory.command.ts +0 -103
  140. package/src/application/index.ts +0 -36
  141. package/src/application/queries/search-memory.query.ts +0 -237
  142. package/src/application/services/memory-application-service.ts +0 -236
  143. package/src/cache-manager.ts +0 -516
  144. package/src/database-provider.test.ts +0 -364
  145. package/src/database-provider.ts +0 -511
  146. package/src/domain/entities/memory-entry.ts +0 -289
  147. package/src/domain/index.ts +0 -35
  148. package/src/domain/repositories/memory-repository.interface.ts +0 -120
  149. package/src/domain/services/memory-domain-service.ts +0 -403
  150. package/src/hnsw-index.ts +0 -1013
  151. package/src/hybrid-backend.test.ts +0 -399
  152. package/src/hybrid-backend.ts +0 -694
  153. package/src/index.ts +0 -515
  154. package/src/infrastructure/index.ts +0 -23
  155. package/src/infrastructure/repositories/hybrid-memory-repository.ts +0 -516
  156. package/src/migration.ts +0 -669
  157. package/src/query-builder.ts +0 -542
  158. package/src/sqlite-backend.ts +0 -732
  159. package/src/sqljs-backend.ts +0 -763
  160. package/src/types.ts +0 -727
  161. package/tsconfig.json +0 -9
  162. package/tsconfig.tsbuildinfo +0 -1
  163. package/verify-cross-platform.ts +0 -170
@@ -1,345 +0,0 @@
1
- /**
2
- * AgentDB Backend Example
3
- *
4
- * Demonstrates agentdb@2.0.0-alpha.3.4 integration with V3 memory system
5
- */
6
-
7
- import { AgentDBBackend, HybridBackend, createDefaultEntry } from '../src/index.js';
8
-
9
- // ===== Example 1: Basic AgentDBBackend Usage =====
10
-
11
- async function basicExample() {
12
- console.log('\n=== Basic AgentDBBackend Example ===\n');
13
-
14
- // Initialize backend
15
- const backend = new AgentDBBackend({
16
- dbPath: ':memory:',
17
- namespace: 'demo',
18
- vectorDimension: 384, // Using MiniLM embeddings
19
- hnswM: 16,
20
- hnswEfConstruction: 200,
21
- });
22
-
23
- await backend.initialize();
24
-
25
- // Check if AgentDB is available
26
- if (backend.isAvailable()) {
27
- console.log('✓ AgentDB available with HNSW indexing');
28
- } else {
29
- console.log('⚠ AgentDB not available, using fallback');
30
- }
31
-
32
- // Store some entries
33
- const entries = [
34
- createDefaultEntry({
35
- key: 'auth-oauth',
36
- content: 'OAuth 2.0 authentication flow with refresh tokens',
37
- tags: ['auth', 'oauth', 'security'],
38
- }),
39
- createDefaultEntry({
40
- key: 'auth-jwt',
41
- content: 'JWT token-based authentication for REST APIs',
42
- tags: ['auth', 'jwt', 'api'],
43
- }),
44
- createDefaultEntry({
45
- key: 'auth-session',
46
- content: 'Session-based authentication with cookies',
47
- tags: ['auth', 'session', 'cookies'],
48
- }),
49
- ];
50
-
51
- console.log('Storing entries...');
52
- for (const entry of entries) {
53
- await backend.store(entry);
54
- }
55
-
56
- // Query by exact key
57
- console.log('\n--- Exact Key Query ---');
58
- const oauth = await backend.getByKey('demo', 'auth-oauth');
59
- console.log('Found:', oauth?.content);
60
-
61
- // Query by prefix
62
- console.log('\n--- Prefix Query ---');
63
- const authEntries = await backend.query({
64
- type: 'prefix',
65
- keyPrefix: 'auth-',
66
- limit: 10,
67
- });
68
- console.log(`Found ${authEntries.length} entries with prefix 'auth-'`);
69
-
70
- // Query by tags
71
- console.log('\n--- Tag Query ---');
72
- const jwtEntries = await backend.query({
73
- type: 'tag',
74
- tags: ['jwt'],
75
- limit: 10,
76
- });
77
- console.log(`Found ${jwtEntries.length} entries with tag 'jwt'`);
78
-
79
- // Get statistics
80
- console.log('\n--- Statistics ---');
81
- const stats = await backend.getStats();
82
- console.log('Total entries:', stats.totalEntries);
83
- console.log('Avg query time:', stats.avgQueryTime.toFixed(2), 'ms');
84
- console.log('Memory usage:', (stats.memoryUsage / 1024).toFixed(2), 'KB');
85
-
86
- if (stats.hnswStats) {
87
- console.log('HNSW vectors:', stats.hnswStats.vectorCount);
88
- console.log('HNSW avg search:', stats.hnswStats.avgSearchTime.toFixed(2), 'ms');
89
- }
90
-
91
- // Health check
92
- console.log('\n--- Health Check ---');
93
- const health = await backend.healthCheck();
94
- console.log('Status:', health.status);
95
- console.log('Storage:', health.components.storage.status);
96
- console.log('Index:', health.components.index.status);
97
-
98
- await backend.shutdown();
99
- console.log('\n✓ Backend shutdown complete');
100
- }
101
-
102
- // ===== Example 2: Hybrid Backend (SQLite + AgentDB) =====
103
-
104
- async function hybridExample() {
105
- console.log('\n=== Hybrid Backend Example ===\n');
106
-
107
- // Simulated embedding function (normally would use real embeddings)
108
- const mockEmbedding = async (text: string): Promise<Float32Array> => {
109
- const hash = Array.from(text).reduce((acc, char) => acc + char.charCodeAt(0), 0);
110
- const dim = 384;
111
- const result = new Float32Array(dim);
112
- for (let i = 0; i < dim; i++) {
113
- result[i] = Math.sin((hash + i) * 0.1);
114
- }
115
- return result;
116
- };
117
-
118
- const hybrid = new HybridBackend({
119
- sqlite: {
120
- dbPath: ':memory:',
121
- },
122
- agentdb: {
123
- dbPath: ':memory:',
124
- vectorDimension: 384,
125
- hnswM: 16,
126
- },
127
- embeddingGenerator: mockEmbedding,
128
- dualWrite: true,
129
- });
130
-
131
- await hybrid.initialize();
132
-
133
- console.log('✓ Hybrid backend initialized (SQLite + AgentDB)');
134
-
135
- // Store entries with embeddings
136
- console.log('\nStoring entries with embeddings...');
137
- const techEntries = [
138
- createDefaultEntry({
139
- key: 'pattern-singleton',
140
- content: 'Singleton design pattern ensures only one instance exists',
141
- namespace: 'patterns',
142
- tags: ['design-pattern', 'creational'],
143
- }),
144
- createDefaultEntry({
145
- key: 'pattern-factory',
146
- content: 'Factory pattern creates objects without specifying exact classes',
147
- namespace: 'patterns',
148
- tags: ['design-pattern', 'creational'],
149
- }),
150
- createDefaultEntry({
151
- key: 'pattern-observer',
152
- content: 'Observer pattern defines one-to-many dependency between objects',
153
- namespace: 'patterns',
154
- tags: ['design-pattern', 'behavioral'],
155
- }),
156
- ];
157
-
158
- for (const entry of techEntries) {
159
- await hybrid.store(entry);
160
- }
161
-
162
- // Structured query (goes to SQLite)
163
- console.log('\n--- Structured Query (SQLite) ---');
164
- const structured = await hybrid.queryStructured({
165
- namespace: 'patterns',
166
- type: 'episodic',
167
- limit: 10,
168
- });
169
- console.log(`Found ${structured.length} entries in 'patterns' namespace`);
170
-
171
- // Semantic query (goes to AgentDB)
172
- console.log('\n--- Semantic Query (AgentDB HNSW) ---');
173
- const semantic = await hybrid.querySemantic({
174
- content: 'object creation patterns',
175
- k: 5,
176
- threshold: 0.5,
177
- });
178
- console.log(`Found ${semantic.length} semantically similar entries`);
179
- semantic.forEach((entry, i) => {
180
- console.log(` ${i + 1}. ${entry.key}: ${entry.content.substring(0, 60)}...`);
181
- });
182
-
183
- // Hybrid query (combines both)
184
- console.log('\n--- Hybrid Query (Both Backends) ---');
185
- const hybridResults = await hybrid.queryHybrid({
186
- semantic: {
187
- content: 'design patterns for object creation',
188
- k: 10,
189
- threshold: 0.3,
190
- },
191
- structured: {
192
- namespace: 'patterns',
193
- },
194
- combineStrategy: 'semantic-first',
195
- });
196
- console.log(`Found ${hybridResults.length} entries (hybrid query)`);
197
-
198
- // Statistics from both backends
199
- console.log('\n--- Hybrid Statistics ---');
200
- const hybridStats = await hybrid.getStats();
201
- console.log('Total entries:', hybridStats.totalEntries);
202
- console.log('Entries by namespace:', hybridStats.entriesByNamespace);
203
- console.log('SQLite queries:', (hybrid as any).stats.sqliteQueries);
204
- console.log('AgentDB queries:', (hybrid as any).stats.agentdbQueries);
205
- console.log('Hybrid queries:', (hybrid as any).stats.hybridQueries);
206
-
207
- await hybrid.shutdown();
208
- console.log('\n✓ Hybrid backend shutdown complete');
209
- }
210
-
211
- // ===== Example 3: Vector Search Performance =====
212
-
213
- async function vectorSearchExample() {
214
- console.log('\n=== Vector Search Performance Example ===\n');
215
-
216
- const backend = new AgentDBBackend({
217
- dbPath: ':memory:',
218
- vectorDimension: 128, // Smaller for demo
219
- hnswM: 16,
220
- hnswEfConstruction: 100,
221
- hnswEfSearch: 50,
222
- });
223
-
224
- await backend.initialize();
225
-
226
- // Generate mock embeddings
227
- const generateEmbedding = (seed: number): Float32Array => {
228
- const embedding = new Float32Array(128);
229
- for (let i = 0; i < 128; i++) {
230
- embedding[i] = Math.sin((seed + i) * 0.1) * Math.cos(seed * 0.05);
231
- }
232
- return embedding;
233
- };
234
-
235
- // Insert many vectors
236
- console.log('Inserting 1000 vectors...');
237
- const startInsert = performance.now();
238
-
239
- for (let i = 0; i < 1000; i++) {
240
- const entry = createDefaultEntry({
241
- key: `vector-${i}`,
242
- content: `Content for vector ${i}`,
243
- namespace: 'vectors',
244
- });
245
- entry.embedding = generateEmbedding(i);
246
- await backend.store(entry);
247
- }
248
-
249
- const insertTime = performance.now() - startInsert;
250
- console.log(`Inserted 1000 vectors in ${insertTime.toFixed(2)}ms`);
251
-
252
- // Perform searches
253
- console.log('\nPerforming 100 searches...');
254
- const queryEmbedding = generateEmbedding(42);
255
-
256
- const startSearch = performance.now();
257
-
258
- for (let i = 0; i < 100; i++) {
259
- await backend.search(queryEmbedding, { k: 10 });
260
- }
261
-
262
- const searchTime = performance.now() - startSearch;
263
- console.log(`100 searches in ${searchTime.toFixed(2)}ms`);
264
- console.log(`Avg per search: ${(searchTime / 100).toFixed(2)}ms`);
265
-
266
- // Get final statistics
267
- const stats = await backend.getStats();
268
- console.log('\n--- Final Statistics ---');
269
- console.log('Total searches:', stats.avgSearchTime > 0 ? 'Yes' : 'No');
270
- console.log('Memory usage:', (stats.memoryUsage / 1024 / 1024).toFixed(2), 'MB');
271
-
272
- await backend.shutdown();
273
- console.log('\n✓ Performance test complete');
274
- }
275
-
276
- // ===== Example 4: Graceful Degradation =====
277
-
278
- async function gracefulDegradationExample() {
279
- console.log('\n=== Graceful Degradation Example ===\n');
280
-
281
- // Create backend that might not have agentdb
282
- const backend = new AgentDBBackend({
283
- dbPath: ':memory:',
284
- });
285
-
286
- await backend.initialize();
287
-
288
- // Check availability
289
- if (backend.isAvailable()) {
290
- console.log('✓ AgentDB available - using HNSW indexing');
291
- } else {
292
- console.log('⚠ AgentDB not available - using fallback in-memory storage');
293
- console.log(' (Install: npm install agentdb@2.0.0-alpha.3.4)');
294
- }
295
-
296
- // Store entries (works either way)
297
- const entry = createDefaultEntry({
298
- key: 'test',
299
- content: 'Test content',
300
- });
301
- entry.embedding = new Float32Array([0.1, 0.2, 0.3, 0.4]);
302
-
303
- await backend.store(entry);
304
-
305
- // Search (falls back to brute-force if needed)
306
- const results = await backend.search(new Float32Array([0.1, 0.2, 0.3, 0.4]), {
307
- k: 5,
308
- });
309
-
310
- console.log(`Search found ${results.length} results`);
311
- console.log('Fallback behavior: ', backend.isAvailable() ? 'HNSW' : 'Brute-force');
312
-
313
- await backend.shutdown();
314
- console.log('\n✓ Graceful degradation demonstrated');
315
- }
316
-
317
- // ===== Run All Examples =====
318
-
319
- async function main() {
320
- console.log('╔═══════════════════════════════════════════════════════════╗');
321
- console.log('║ AgentDB Integration Examples ║');
322
- console.log('║ V3 Memory Module with agentdb@2.0.0-alpha.3.4 ║');
323
- console.log('╚═══════════════════════════════════════════════════════════╝');
324
-
325
- try {
326
- await basicExample();
327
- await hybridExample();
328
- await vectorSearchExample();
329
- await gracefulDegradationExample();
330
-
331
- console.log('\n╔═══════════════════════════════════════════════════════════╗');
332
- console.log('║ All examples completed successfully! ║');
333
- console.log('╚═══════════════════════════════════════════════════════════╝\n');
334
- } catch (error) {
335
- console.error('\n❌ Error running examples:', error);
336
- process.exit(1);
337
- }
338
- }
339
-
340
- // Run if called directly
341
- if (import.meta.url === `file://${process.argv[1]}`) {
342
- main();
343
- }
344
-
345
- export { basicExample, hybridExample, vectorSearchExample, gracefulDegradationExample };
@@ -1,326 +0,0 @@
1
- /**
2
- * Cross-Platform Database Usage Examples
3
- *
4
- * Demonstrates how to use the database provider for Windows, macOS, and Linux
5
- */
6
-
7
- import {
8
- createDatabase,
9
- getPlatformInfo,
10
- getAvailableProviders,
11
- createDefaultEntry,
12
- } from '../src/index.js';
13
-
14
- /**
15
- * Example 1: Automatic Platform Detection
16
- */
17
- async function automaticProviderSelection() {
18
- console.log('=== Automatic Provider Selection ===\n');
19
-
20
- // Get platform information
21
- const platformInfo = getPlatformInfo();
22
- console.log('Platform Information:');
23
- console.log(` OS: ${platformInfo.os}`);
24
- console.log(` Windows: ${platformInfo.isWindows}`);
25
- console.log(` macOS: ${platformInfo.isMacOS}`);
26
- console.log(` Linux: ${platformInfo.isLinux}`);
27
- console.log(` Recommended: ${platformInfo.recommendedProvider}\n`);
28
-
29
- // Check available providers
30
- const available = await getAvailableProviders();
31
- console.log('Available Providers:');
32
- console.log(` better-sqlite3: ${available.betterSqlite3 ? '✓' : '✗'}`);
33
- console.log(` sql.js: ${available.sqlJs ? '✓' : '✗'}`);
34
- console.log(` JSON: ${available.json ? '✓' : '✗'}\n`);
35
-
36
- // Create database with automatic provider selection
37
- const db = await createDatabase('./data/auto-memory.db');
38
- console.log('✓ Database created with automatic provider selection\n');
39
-
40
- // Store some test data
41
- const entry = createDefaultEntry({
42
- key: 'platform-test',
43
- content: `Running on ${platformInfo.os}`,
44
- namespace: 'platform',
45
- tags: [platformInfo.os],
46
- });
47
-
48
- await db.store(entry);
49
- console.log('✓ Test entry stored');
50
-
51
- // Retrieve and verify
52
- const retrieved = await db.get(entry.id);
53
- console.log('✓ Entry retrieved:', retrieved?.content);
54
-
55
- await db.shutdown();
56
- console.log('✓ Database shutdown\n');
57
- }
58
-
59
- /**
60
- * Example 2: Windows-Specific Configuration
61
- */
62
- async function windowsConfiguration() {
63
- console.log('=== Windows-Specific Configuration ===\n');
64
-
65
- // On Windows, use sql.js for maximum compatibility
66
- const db = await createDatabase('./data/windows-memory.db', {
67
- provider: 'sql.js',
68
- verbose: true,
69
- autoPersistInterval: 10000, // Persist every 10 seconds
70
- });
71
-
72
- console.log('✓ Windows-compatible database created\n');
73
-
74
- // Store data
75
- const entries = [
76
- createDefaultEntry({
77
- key: 'windows-app-1',
78
- content: 'Windows application data',
79
- namespace: 'apps',
80
- tags: ['windows', 'production'],
81
- }),
82
- createDefaultEntry({
83
- key: 'windows-app-2',
84
- content: 'More Windows data',
85
- namespace: 'apps',
86
- tags: ['windows', 'staging'],
87
- }),
88
- ];
89
-
90
- await db.bulkInsert(entries);
91
- console.log('✓ Bulk inserted 2 entries');
92
-
93
- // Query by namespace
94
- const results = await db.query({
95
- type: 'hybrid',
96
- namespace: 'apps',
97
- limit: 10,
98
- });
99
-
100
- console.log(`✓ Found ${results.length} entries in 'apps' namespace`);
101
-
102
- await db.shutdown();
103
- console.log('✓ Database shutdown (changes persisted to disk)\n');
104
- }
105
-
106
- /**
107
- * Example 3: macOS/Linux Native SQLite
108
- */
109
- async function unixConfiguration() {
110
- console.log('=== macOS/Linux Native SQLite ===\n');
111
-
112
- // On Unix systems, use better-sqlite3 for best performance
113
- const available = await getAvailableProviders();
114
-
115
- if (!available.betterSqlite3) {
116
- console.log('⚠ better-sqlite3 not available, falling back to sql.js\n');
117
- }
118
-
119
- const db = await createDatabase('./data/unix-memory.db', {
120
- provider: available.betterSqlite3 ? 'better-sqlite3' : 'sql.js',
121
- verbose: true,
122
- walMode: true, // Enable WAL mode for better-sqlite3
123
- optimize: true,
124
- });
125
-
126
- console.log('✓ Unix-optimized database created\n');
127
-
128
- // Store data
129
- const entry = createDefaultEntry({
130
- key: 'unix-service',
131
- content: 'Unix service configuration',
132
- namespace: 'services',
133
- tags: ['unix', 'production'],
134
- });
135
-
136
- await db.store(entry);
137
- console.log('✓ Entry stored');
138
-
139
- // Health check
140
- const health = await db.healthCheck();
141
- console.log('✓ Health check:', health.status);
142
- console.log(' Storage:', health.components.storage.status);
143
- console.log(' Index:', health.components.index.status);
144
- console.log(' Cache:', health.components.cache.status);
145
-
146
- await db.shutdown();
147
- console.log('✓ Database shutdown\n');
148
- }
149
-
150
- /**
151
- * Example 4: Fallback to JSON
152
- */
153
- async function jsonFallback() {
154
- console.log('=== JSON Fallback Example ===\n');
155
-
156
- // JSON backend works everywhere, no native dependencies
157
- const db = await createDatabase('./data/json-memory.db', {
158
- provider: 'json',
159
- verbose: true,
160
- });
161
-
162
- console.log('✓ JSON database created (no native dependencies)\n');
163
-
164
- // Store data
165
- const entry = createDefaultEntry({
166
- key: 'json-data',
167
- content: 'This works everywhere!',
168
- namespace: 'portable',
169
- tags: ['cross-platform', 'json'],
170
- });
171
-
172
- await db.store(entry);
173
- console.log('✓ Entry stored');
174
-
175
- // Get statistics
176
- const stats = await db.getStats();
177
- console.log('✓ Statistics:', {
178
- totalEntries: stats.totalEntries,
179
- avgQueryTime: `${stats.avgQueryTime.toFixed(2)}ms`,
180
- });
181
-
182
- await db.shutdown();
183
- console.log('✓ Database shutdown\n');
184
- }
185
-
186
- /**
187
- * Example 5: Cross-Platform Application
188
- */
189
- async function crossPlatformApp() {
190
- console.log('=== Cross-Platform Application Example ===\n');
191
-
192
- const platformInfo = getPlatformInfo();
193
-
194
- // Use different optimizations based on platform
195
- const config = platformInfo.isWindows
196
- ? {
197
- // Windows: sql.js with frequent persistence
198
- provider: 'sql.js' as const,
199
- autoPersistInterval: 5000,
200
- }
201
- : {
202
- // Unix: better-sqlite3 with WAL mode
203
- provider: 'better-sqlite3' as const,
204
- walMode: true,
205
- };
206
-
207
- console.log(`Creating database for ${platformInfo.os}...`);
208
- const db = await createDatabase('./data/cross-platform.db', config);
209
- console.log('✓ Platform-optimized database created\n');
210
-
211
- // Store platform-specific configuration
212
- const configEntry = createDefaultEntry({
213
- key: 'app-config',
214
- content: JSON.stringify({
215
- platform: platformInfo.os,
216
- optimizations: config,
217
- timestamp: Date.now(),
218
- }),
219
- namespace: 'config',
220
- tags: ['platform', platformInfo.os],
221
- });
222
-
223
- await db.store(configEntry);
224
- console.log('✓ Platform configuration stored');
225
-
226
- // Retrieve and display
227
- const retrieved = await db.getByKey('config', 'app-config');
228
- if (retrieved) {
229
- const data = JSON.parse(retrieved.content);
230
- console.log('✓ Configuration:', JSON.stringify(data, null, 2));
231
- }
232
-
233
- await db.shutdown();
234
- console.log('✓ Database shutdown\n');
235
- }
236
-
237
- /**
238
- * Example 6: Migration Between Providers
239
- */
240
- async function providerMigration() {
241
- console.log('=== Provider Migration Example ===\n');
242
-
243
- // Create source database (JSON)
244
- console.log('Creating source database (JSON)...');
245
- const sourceDb = await createDatabase('./data/source.db', {
246
- provider: 'json',
247
- });
248
-
249
- // Add test data
250
- const testData = Array.from({ length: 5 }, (_, i) =>
251
- createDefaultEntry({
252
- key: `migrate-${i}`,
253
- content: `Migration test data ${i}`,
254
- namespace: 'migration',
255
- tags: ['test', 'migration'],
256
- })
257
- );
258
-
259
- await sourceDb.bulkInsert(testData);
260
- console.log('✓ Source database populated with 5 entries');
261
-
262
- // Get all entries from source
263
- const sourceEntries = await sourceDb.query({
264
- type: 'hybrid',
265
- namespace: 'migration',
266
- limit: 100,
267
- });
268
-
269
- await sourceDb.shutdown();
270
- console.log('✓ Source database shutdown\n');
271
-
272
- // Create destination database (best available provider)
273
- console.log('Creating destination database (auto provider)...');
274
- const destDb = await createDatabase('./data/destination.db');
275
-
276
- // Migrate data
277
- await destDb.bulkInsert(sourceEntries);
278
- console.log(`✓ Migrated ${sourceEntries.length} entries to destination`);
279
-
280
- // Verify migration
281
- const count = await destDb.count('migration');
282
- console.log(`✓ Verified: ${count} entries in destination database`);
283
-
284
- await destDb.shutdown();
285
- console.log('✓ Destination database shutdown\n');
286
- }
287
-
288
- /**
289
- * Main execution
290
- */
291
- async function main() {
292
- console.log('\n╔════════════════════════════════════════╗');
293
- console.log('║ Cross-Platform Database Examples ║');
294
- console.log('╚════════════════════════════════════════╝\n');
295
-
296
- try {
297
- // Run all examples
298
- await automaticProviderSelection();
299
- await windowsConfiguration();
300
- await unixConfiguration();
301
- await jsonFallback();
302
- await crossPlatformApp();
303
- await providerMigration();
304
-
305
- console.log('╔════════════════════════════════════════╗');
306
- console.log('║ All examples completed successfully! ║');
307
- console.log('╚════════════════════════════════════════╝\n');
308
- } catch (error) {
309
- console.error('Error:', error);
310
- process.exit(1);
311
- }
312
- }
313
-
314
- // Run examples if executed directly
315
- if (import.meta.url === `file://${process.argv[1]}`) {
316
- main().catch(console.error);
317
- }
318
-
319
- export {
320
- automaticProviderSelection,
321
- windowsConfiguration,
322
- unixConfiguration,
323
- jsonFallback,
324
- crossPlatformApp,
325
- providerMigration,
326
- };