@claude-flow/memory 3.0.0-alpha.1
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/.agentic-flow/intelligence.json +16 -0
- package/README.md +249 -0
- package/__tests__/coverage/base.css +224 -0
- package/__tests__/coverage/block-navigation.js +87 -0
- package/__tests__/coverage/coverage-final.json +19 -0
- package/__tests__/coverage/favicon.png +0 -0
- package/__tests__/coverage/index.html +206 -0
- package/__tests__/coverage/lcov-report/base.css +224 -0
- package/__tests__/coverage/lcov-report/block-navigation.js +87 -0
- package/__tests__/coverage/lcov-report/favicon.png +0 -0
- package/__tests__/coverage/lcov-report/index.html +206 -0
- package/__tests__/coverage/lcov-report/prettify.css +1 -0
- package/__tests__/coverage/lcov-report/prettify.js +2 -0
- package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/__tests__/coverage/lcov-report/sorter.js +210 -0
- package/__tests__/coverage/lcov-report/src/agentdb-adapter.ts.html +2737 -0
- package/__tests__/coverage/lcov-report/src/agentdb-backend.ts.html +3130 -0
- package/__tests__/coverage/lcov-report/src/application/commands/delete-memory.command.ts.html +601 -0
- package/__tests__/coverage/lcov-report/src/application/commands/index.html +131 -0
- package/__tests__/coverage/lcov-report/src/application/commands/store-memory.command.ts.html +394 -0
- package/__tests__/coverage/lcov-report/src/application/queries/index.html +116 -0
- package/__tests__/coverage/lcov-report/src/application/queries/search-memory.query.ts.html +796 -0
- package/__tests__/coverage/lcov-report/src/application/services/index.html +116 -0
- package/__tests__/coverage/lcov-report/src/application/services/memory-application-service.ts.html +793 -0
- package/__tests__/coverage/lcov-report/src/cache-manager.ts.html +1633 -0
- package/__tests__/coverage/lcov-report/src/database-provider.ts.html +1618 -0
- package/__tests__/coverage/lcov-report/src/domain/entities/index.html +116 -0
- package/__tests__/coverage/lcov-report/src/domain/entities/memory-entry.ts.html +952 -0
- package/__tests__/coverage/lcov-report/src/domain/services/index.html +116 -0
- package/__tests__/coverage/lcov-report/src/domain/services/memory-domain-service.ts.html +1294 -0
- package/__tests__/coverage/lcov-report/src/hnsw-index.ts.html +3124 -0
- package/__tests__/coverage/lcov-report/src/hybrid-backend.ts.html +2167 -0
- package/__tests__/coverage/lcov-report/src/index.html +266 -0
- package/__tests__/coverage/lcov-report/src/infrastructure/repositories/hybrid-memory-repository.ts.html +1633 -0
- package/__tests__/coverage/lcov-report/src/infrastructure/repositories/index.html +116 -0
- package/__tests__/coverage/lcov-report/src/migration.ts.html +2092 -0
- package/__tests__/coverage/lcov-report/src/query-builder.ts.html +1711 -0
- package/__tests__/coverage/lcov-report/src/sqlite-backend.ts.html +2281 -0
- package/__tests__/coverage/lcov-report/src/sqljs-backend.ts.html +2374 -0
- package/__tests__/coverage/lcov-report/src/types.ts.html +2266 -0
- package/__tests__/coverage/lcov.info +10238 -0
- package/__tests__/coverage/prettify.css +1 -0
- package/__tests__/coverage/prettify.js +2 -0
- package/__tests__/coverage/sort-arrow-sprite.png +0 -0
- package/__tests__/coverage/sorter.js +210 -0
- package/__tests__/coverage/src/agentdb-adapter.ts.html +2737 -0
- package/__tests__/coverage/src/agentdb-backend.ts.html +3130 -0
- package/__tests__/coverage/src/application/commands/delete-memory.command.ts.html +601 -0
- package/__tests__/coverage/src/application/commands/index.html +131 -0
- package/__tests__/coverage/src/application/commands/store-memory.command.ts.html +394 -0
- package/__tests__/coverage/src/application/queries/index.html +116 -0
- package/__tests__/coverage/src/application/queries/search-memory.query.ts.html +796 -0
- package/__tests__/coverage/src/application/services/index.html +116 -0
- package/__tests__/coverage/src/application/services/memory-application-service.ts.html +793 -0
- package/__tests__/coverage/src/cache-manager.ts.html +1633 -0
- package/__tests__/coverage/src/database-provider.ts.html +1618 -0
- package/__tests__/coverage/src/domain/entities/index.html +116 -0
- package/__tests__/coverage/src/domain/entities/memory-entry.ts.html +952 -0
- package/__tests__/coverage/src/domain/services/index.html +116 -0
- package/__tests__/coverage/src/domain/services/memory-domain-service.ts.html +1294 -0
- package/__tests__/coverage/src/hnsw-index.ts.html +3124 -0
- package/__tests__/coverage/src/hybrid-backend.ts.html +2167 -0
- package/__tests__/coverage/src/index.html +266 -0
- package/__tests__/coverage/src/infrastructure/repositories/hybrid-memory-repository.ts.html +1633 -0
- package/__tests__/coverage/src/infrastructure/repositories/index.html +116 -0
- package/__tests__/coverage/src/migration.ts.html +2092 -0
- package/__tests__/coverage/src/query-builder.ts.html +1711 -0
- package/__tests__/coverage/src/sqlite-backend.ts.html +2281 -0
- package/__tests__/coverage/src/sqljs-backend.ts.html +2374 -0
- package/__tests__/coverage/src/types.ts.html +2266 -0
- package/benchmarks/cache-hit-rate.bench.ts +535 -0
- package/benchmarks/hnsw-indexing.bench.ts +552 -0
- package/benchmarks/memory-write.bench.ts +469 -0
- package/benchmarks/vector-search.bench.ts +449 -0
- package/dist/agentdb-adapter.d.ts +146 -0
- package/dist/agentdb-adapter.d.ts.map +1 -0
- package/dist/agentdb-adapter.js +679 -0
- package/dist/agentdb-adapter.js.map +1 -0
- package/dist/agentdb-backend.d.ts +214 -0
- package/dist/agentdb-backend.d.ts.map +1 -0
- package/dist/agentdb-backend.js +827 -0
- package/dist/agentdb-backend.js.map +1 -0
- package/dist/agentdb-backend.test.d.ts +7 -0
- package/dist/agentdb-backend.test.d.ts.map +1 -0
- package/dist/agentdb-backend.test.js +258 -0
- package/dist/agentdb-backend.test.js.map +1 -0
- package/dist/application/commands/delete-memory.command.d.ts +65 -0
- package/dist/application/commands/delete-memory.command.d.ts.map +1 -0
- package/dist/application/commands/delete-memory.command.js +129 -0
- package/dist/application/commands/delete-memory.command.js.map +1 -0
- package/dist/application/commands/store-memory.command.d.ts +48 -0
- package/dist/application/commands/store-memory.command.d.ts.map +1 -0
- package/dist/application/commands/store-memory.command.js +72 -0
- package/dist/application/commands/store-memory.command.js.map +1 -0
- package/dist/application/index.d.ts +12 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +15 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/queries/search-memory.query.d.ts +72 -0
- package/dist/application/queries/search-memory.query.d.ts.map +1 -0
- package/dist/application/queries/search-memory.query.js +143 -0
- package/dist/application/queries/search-memory.query.js.map +1 -0
- package/dist/application/services/memory-application-service.d.ts +121 -0
- package/dist/application/services/memory-application-service.d.ts.map +1 -0
- package/dist/application/services/memory-application-service.js +190 -0
- package/dist/application/services/memory-application-service.js.map +1 -0
- package/dist/cache-manager.d.ts +134 -0
- package/dist/cache-manager.d.ts.map +1 -0
- package/dist/cache-manager.js +407 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/database-provider.d.ts +86 -0
- package/dist/database-provider.d.ts.map +1 -0
- package/dist/database-provider.js +385 -0
- package/dist/database-provider.js.map +1 -0
- package/dist/database-provider.test.d.ts +7 -0
- package/dist/database-provider.test.d.ts.map +1 -0
- package/dist/database-provider.test.js +285 -0
- package/dist/database-provider.test.js.map +1 -0
- package/dist/domain/entities/memory-entry.d.ts +143 -0
- package/dist/domain/entities/memory-entry.d.ts.map +1 -0
- package/dist/domain/entities/memory-entry.js +226 -0
- package/dist/domain/entities/memory-entry.js.map +1 -0
- package/dist/domain/index.d.ts +11 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +12 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/repositories/memory-repository.interface.d.ts +102 -0
- package/dist/domain/repositories/memory-repository.interface.d.ts.map +1 -0
- package/dist/domain/repositories/memory-repository.interface.js +11 -0
- package/dist/domain/repositories/memory-repository.interface.js.map +1 -0
- package/dist/domain/services/memory-domain-service.d.ts +105 -0
- package/dist/domain/services/memory-domain-service.d.ts.map +1 -0
- package/dist/domain/services/memory-domain-service.js +297 -0
- package/dist/domain/services/memory-domain-service.js.map +1 -0
- package/dist/hnsw-index.d.ts +111 -0
- package/dist/hnsw-index.d.ts.map +1 -0
- package/dist/hnsw-index.js +781 -0
- package/dist/hnsw-index.js.map +1 -0
- package/dist/hybrid-backend.d.ts +217 -0
- package/dist/hybrid-backend.d.ts.map +1 -0
- package/dist/hybrid-backend.js +491 -0
- package/dist/hybrid-backend.js.map +1 -0
- package/dist/hybrid-backend.test.d.ts +8 -0
- package/dist/hybrid-backend.test.d.ts.map +1 -0
- package/dist/hybrid-backend.test.js +320 -0
- package/dist/hybrid-backend.test.js.map +1 -0
- package/dist/index.d.ts +188 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +345 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +17 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +16 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/repositories/hybrid-memory-repository.d.ts +66 -0
- package/dist/infrastructure/repositories/hybrid-memory-repository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/hybrid-memory-repository.js +409 -0
- package/dist/infrastructure/repositories/hybrid-memory-repository.js.map +1 -0
- package/dist/migration.d.ts +68 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +513 -0
- package/dist/migration.js.map +1 -0
- package/dist/query-builder.d.ts +211 -0
- package/dist/query-builder.d.ts.map +1 -0
- package/dist/query-builder.js +438 -0
- package/dist/query-builder.js.map +1 -0
- package/dist/sqlite-backend.d.ts +121 -0
- package/dist/sqlite-backend.d.ts.map +1 -0
- package/dist/sqlite-backend.js +564 -0
- package/dist/sqlite-backend.js.map +1 -0
- package/dist/sqljs-backend.d.ts +128 -0
- package/dist/sqljs-backend.d.ts.map +1 -0
- package/dist/sqljs-backend.js +598 -0
- package/dist/sqljs-backend.js.map +1 -0
- package/dist/types.d.ts +481 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +58 -0
- package/dist/types.js.map +1 -0
- package/docs/AGENTDB-INTEGRATION.md +388 -0
- package/docs/CROSS_PLATFORM.md +505 -0
- package/docs/WINDOWS_SUPPORT.md +422 -0
- package/examples/agentdb-example.ts +345 -0
- package/examples/cross-platform-usage.ts +326 -0
- package/framework/benchmark.ts +112 -0
- package/package.json +31 -0
- package/src/agentdb-adapter.ts +884 -0
- package/src/agentdb-backend.test.ts +339 -0
- package/src/agentdb-backend.ts +1016 -0
- package/src/application/commands/delete-memory.command.ts +172 -0
- package/src/application/commands/store-memory.command.ts +103 -0
- package/src/application/index.ts +36 -0
- package/src/application/queries/search-memory.query.ts +237 -0
- package/src/application/services/memory-application-service.ts +236 -0
- package/src/cache-manager.ts +516 -0
- package/src/database-provider.test.ts +364 -0
- package/src/database-provider.ts +511 -0
- package/src/domain/entities/memory-entry.ts +289 -0
- package/src/domain/index.ts +35 -0
- package/src/domain/repositories/memory-repository.interface.ts +120 -0
- package/src/domain/services/memory-domain-service.ts +403 -0
- package/src/hnsw-index.ts +1013 -0
- package/src/hybrid-backend.test.ts +399 -0
- package/src/hybrid-backend.ts +694 -0
- package/src/index.ts +515 -0
- package/src/infrastructure/index.ts +23 -0
- package/src/infrastructure/repositories/hybrid-memory-repository.ts +516 -0
- package/src/migration.ts +669 -0
- package/src/query-builder.ts +542 -0
- package/src/sqlite-backend.ts +732 -0
- package/src/sqljs-backend.ts +763 -0
- package/src/types.ts +727 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/verify-cross-platform.ts +170 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
# Cross-Platform Database Support
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `@claude-flow/memory` module provides **universal cross-platform support** through intelligent database provider selection. This ensures your application works seamlessly on Windows, macOS, and Linux without code changes.
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────┐
|
|
11
|
+
│ createDatabase() Factory │
|
|
12
|
+
│ Platform-Aware Auto-Selection │
|
|
13
|
+
└──────────────┬──────────────────────────┘
|
|
14
|
+
│
|
|
15
|
+
┌───────┴────────┐
|
|
16
|
+
│ │
|
|
17
|
+
▼ ▼
|
|
18
|
+
┌─────────────┐ ┌─────────────┐
|
|
19
|
+
│ Windows │ │ macOS/Linux │
|
|
20
|
+
│ Detected │ │ Detected │
|
|
21
|
+
└──────┬──────┘ └──────┬──────┘
|
|
22
|
+
│ │
|
|
23
|
+
▼ ▼
|
|
24
|
+
┌─────────────┐ ┌─────────────┐
|
|
25
|
+
│ sql.js │ │better-sqlite│
|
|
26
|
+
│ (WASM) │ │ (Native) │
|
|
27
|
+
└──────┬──────┘ └──────┬──────┘
|
|
28
|
+
│ │
|
|
29
|
+
└────────┬────────┘
|
|
30
|
+
│
|
|
31
|
+
▼
|
|
32
|
+
┌─────────────┐
|
|
33
|
+
│JSON Fallback│
|
|
34
|
+
│ (Universal) │
|
|
35
|
+
└─────────────┘
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Supported Providers
|
|
39
|
+
|
|
40
|
+
### 1. better-sqlite3 (Native SQLite)
|
|
41
|
+
|
|
42
|
+
**Best for:** macOS, Linux
|
|
43
|
+
**Performance:** Fastest (native C++ bindings)
|
|
44
|
+
**Features:**
|
|
45
|
+
- WAL mode for concurrent reads
|
|
46
|
+
- ACID transactions
|
|
47
|
+
- Optimal performance
|
|
48
|
+
- Native compilation required
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
const db = await createDatabase('./data/memory.db', {
|
|
52
|
+
provider: 'better-sqlite3',
|
|
53
|
+
walMode: true,
|
|
54
|
+
optimize: true
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 2. sql.js (WASM SQLite)
|
|
59
|
+
|
|
60
|
+
**Best for:** Windows, environments without native compilation
|
|
61
|
+
**Performance:** Good (WebAssembly)
|
|
62
|
+
**Features:**
|
|
63
|
+
- Pure JavaScript/WASM (no native compilation)
|
|
64
|
+
- Works everywhere
|
|
65
|
+
- Auto-persistence to disk
|
|
66
|
+
- Slightly slower than native
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
const db = await createDatabase('./data/memory.db', {
|
|
70
|
+
provider: 'sql.js',
|
|
71
|
+
autoPersistInterval: 5000 // Persist every 5 seconds
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 3. JSON (Simple File Storage)
|
|
76
|
+
|
|
77
|
+
**Best for:** Maximum compatibility, small datasets
|
|
78
|
+
**Performance:** Slower (brute-force search)
|
|
79
|
+
**Features:**
|
|
80
|
+
- Zero dependencies
|
|
81
|
+
- Human-readable storage
|
|
82
|
+
- Works on all platforms
|
|
83
|
+
- Limited scalability
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const db = await createDatabase('./data/memory.db', {
|
|
87
|
+
provider: 'json'
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Platform-Specific Recommendations
|
|
92
|
+
|
|
93
|
+
### Windows
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// Recommended: sql.js (no native compilation issues)
|
|
97
|
+
const db = await createDatabase('./data/memory.db', {
|
|
98
|
+
provider: 'sql.js',
|
|
99
|
+
autoPersistInterval: 10000, // Auto-save every 10s
|
|
100
|
+
verbose: true
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Why sql.js on Windows?**
|
|
105
|
+
- No Visual Studio build tools required
|
|
106
|
+
- No Python dependency for node-gyp
|
|
107
|
+
- Pure JavaScript/WASM stack
|
|
108
|
+
- Reliable across Windows versions
|
|
109
|
+
|
|
110
|
+
### macOS
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Recommended: better-sqlite3 (native performance)
|
|
114
|
+
const db = await createDatabase('./data/memory.db', {
|
|
115
|
+
provider: 'better-sqlite3',
|
|
116
|
+
walMode: true, // Enable WAL mode
|
|
117
|
+
optimize: true // Performance optimizations
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Why better-sqlite3 on macOS?**
|
|
122
|
+
- Native compilation works reliably
|
|
123
|
+
- Maximum performance
|
|
124
|
+
- WAL mode for concurrent access
|
|
125
|
+
- Apple's SQLite optimizations
|
|
126
|
+
|
|
127
|
+
### Linux
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// Recommended: better-sqlite3 (native performance)
|
|
131
|
+
const db = await createDatabase('./data/memory.db', {
|
|
132
|
+
provider: 'better-sqlite3',
|
|
133
|
+
walMode: true,
|
|
134
|
+
optimize: true
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Why better-sqlite3 on Linux?**
|
|
139
|
+
- Native SQLite library widely available
|
|
140
|
+
- Excellent performance
|
|
141
|
+
- Production-ready
|
|
142
|
+
- Standard on most distributions
|
|
143
|
+
|
|
144
|
+
## Automatic Provider Selection
|
|
145
|
+
|
|
146
|
+
The `createDatabase()` function uses intelligent platform detection:
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
// Auto-select best provider for current platform
|
|
150
|
+
const db = await createDatabase('./data/memory.db');
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Selection Algorithm:**
|
|
154
|
+
|
|
155
|
+
1. **Detect platform** (Windows, macOS, Linux)
|
|
156
|
+
2. **Try recommended provider** for platform
|
|
157
|
+
3. **Test provider availability** (compilation check)
|
|
158
|
+
4. **Fallback to alternatives** if needed
|
|
159
|
+
5. **Final fallback** to JSON if all fail
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
// Example: Auto-selection with fallback chain
|
|
163
|
+
Windows: sql.js → JSON
|
|
164
|
+
macOS: better-sqlite3 → sql.js → JSON
|
|
165
|
+
Linux: better-sqlite3 → sql.js → JSON
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Usage Examples
|
|
169
|
+
|
|
170
|
+
### Example 1: Cross-Platform Application
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
import { createDatabase, getPlatformInfo } from '@claude-flow/memory';
|
|
174
|
+
|
|
175
|
+
async function initDatabase() {
|
|
176
|
+
const platform = getPlatformInfo();
|
|
177
|
+
console.log(`Running on ${platform.os}`);
|
|
178
|
+
console.log(`Recommended: ${platform.recommendedProvider}`);
|
|
179
|
+
|
|
180
|
+
// Auto-select best provider
|
|
181
|
+
const db = await createDatabase('./data/app.db', {
|
|
182
|
+
verbose: true
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
return db;
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Example 2: Windows-Specific Setup
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
import { createDatabase } from '@claude-flow/memory';
|
|
193
|
+
|
|
194
|
+
async function windowsSetup() {
|
|
195
|
+
// Force sql.js for Windows reliability
|
|
196
|
+
const db = await createDatabase('./data/windows.db', {
|
|
197
|
+
provider: 'sql.js',
|
|
198
|
+
autoPersistInterval: 5000,
|
|
199
|
+
verbose: true
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Store data
|
|
203
|
+
await db.store({
|
|
204
|
+
id: 'config-1',
|
|
205
|
+
key: 'app-config',
|
|
206
|
+
content: JSON.stringify({ theme: 'dark' }),
|
|
207
|
+
// ... other fields
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// Changes auto-persist every 5 seconds
|
|
211
|
+
// Or manually trigger:
|
|
212
|
+
await db.persist();
|
|
213
|
+
|
|
214
|
+
return db;
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Example 3: Unix Performance Optimization
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
import { createDatabase, getAvailableProviders } from '@claude-flow/memory';
|
|
222
|
+
|
|
223
|
+
async function unixSetup() {
|
|
224
|
+
const available = await getAvailableProviders();
|
|
225
|
+
|
|
226
|
+
if (available.betterSqlite3) {
|
|
227
|
+
// Use native SQLite with optimizations
|
|
228
|
+
const db = await createDatabase('./data/unix.db', {
|
|
229
|
+
provider: 'better-sqlite3',
|
|
230
|
+
walMode: true, // Concurrent reads
|
|
231
|
+
optimize: true, // Performance tuning
|
|
232
|
+
maxEntries: 1000000 // Large dataset support
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
return db;
|
|
236
|
+
} else {
|
|
237
|
+
// Fallback to sql.js
|
|
238
|
+
const db = await createDatabase('./data/unix.db', {
|
|
239
|
+
provider: 'sql.js'
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
return db;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Example 4: Migration Between Providers
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
import { createDatabase } from '@claude-flow/memory';
|
|
251
|
+
|
|
252
|
+
async function migrateDatabase() {
|
|
253
|
+
// Load from JSON
|
|
254
|
+
const sourceDb = await createDatabase('./old/data.db', {
|
|
255
|
+
provider: 'json'
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
const entries = await sourceDb.query({
|
|
259
|
+
type: 'hybrid',
|
|
260
|
+
limit: 10000
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
await sourceDb.shutdown();
|
|
264
|
+
|
|
265
|
+
// Migrate to SQLite
|
|
266
|
+
const destDb = await createDatabase('./new/data.db', {
|
|
267
|
+
provider: 'auto' // Auto-select best for platform
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
await destDb.bulkInsert(entries);
|
|
271
|
+
console.log(`Migrated ${entries.length} entries`);
|
|
272
|
+
|
|
273
|
+
await destDb.shutdown();
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## API Reference
|
|
278
|
+
|
|
279
|
+
### createDatabase()
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
async function createDatabase(
|
|
283
|
+
path: string,
|
|
284
|
+
options?: DatabaseOptions
|
|
285
|
+
): Promise<IMemoryBackend>
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Parameters:**
|
|
289
|
+
- `path` - Database file path (`:memory:` for in-memory)
|
|
290
|
+
- `options.provider` - Provider type (`'auto'`, `'better-sqlite3'`, `'sql.js'`, `'json'`)
|
|
291
|
+
- `options.verbose` - Enable logging
|
|
292
|
+
- `options.walMode` - Enable WAL mode (better-sqlite3 only)
|
|
293
|
+
- `options.optimize` - Enable optimizations
|
|
294
|
+
- `options.autoPersistInterval` - Auto-save interval in ms (sql.js only)
|
|
295
|
+
- `options.wasmPath` - Custom WASM file path (sql.js only)
|
|
296
|
+
|
|
297
|
+
**Returns:** Initialized `IMemoryBackend` instance
|
|
298
|
+
|
|
299
|
+
### getPlatformInfo()
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
function getPlatformInfo(): PlatformInfo
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Returns:**
|
|
306
|
+
```typescript
|
|
307
|
+
{
|
|
308
|
+
os: string; // 'win32', 'darwin', 'linux'
|
|
309
|
+
isWindows: boolean;
|
|
310
|
+
isMacOS: boolean;
|
|
311
|
+
isLinux: boolean;
|
|
312
|
+
recommendedProvider: DatabaseProvider;
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### getAvailableProviders()
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
async function getAvailableProviders(): Promise<{
|
|
320
|
+
betterSqlite3: boolean;
|
|
321
|
+
sqlJs: boolean;
|
|
322
|
+
json: boolean;
|
|
323
|
+
}>
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Returns:** Which providers are available and working
|
|
327
|
+
|
|
328
|
+
## Performance Comparison
|
|
329
|
+
|
|
330
|
+
| Provider | Read Speed | Write Speed | Memory | Compilation |
|
|
331
|
+
|----------|------------|-------------|--------|-------------|
|
|
332
|
+
| better-sqlite3 | ⚡⚡⚡⚡⚡ | ⚡⚡⚡⚡⚡ | Low | Required |
|
|
333
|
+
| sql.js | ⚡⚡⚡⚡ | ⚡⚡⚡⚡ | Medium | None |
|
|
334
|
+
| JSON | ⚡⚡ | ⚡⚡ | Low | None |
|
|
335
|
+
|
|
336
|
+
## Installation
|
|
337
|
+
|
|
338
|
+
### All Platforms
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
npm install @claude-flow/memory
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
Dependencies are installed automatically:
|
|
345
|
+
- `better-sqlite3` (tries to compile, fails gracefully)
|
|
346
|
+
- `sql.js` (pure JavaScript, always works)
|
|
347
|
+
|
|
348
|
+
### Windows-Specific
|
|
349
|
+
|
|
350
|
+
If you encounter compilation errors with `better-sqlite3`:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
# Skip better-sqlite3 compilation
|
|
354
|
+
npm install @claude-flow/memory --no-optional
|
|
355
|
+
|
|
356
|
+
# The module will automatically use sql.js
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Linux-Specific
|
|
360
|
+
|
|
361
|
+
Install SQLite development headers:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
# Debian/Ubuntu
|
|
365
|
+
sudo apt-get install libsqlite3-dev
|
|
366
|
+
|
|
367
|
+
# RHEL/Fedora
|
|
368
|
+
sudo yum install sqlite-devel
|
|
369
|
+
|
|
370
|
+
# Then install
|
|
371
|
+
npm install @claude-flow/memory
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
## Troubleshooting
|
|
375
|
+
|
|
376
|
+
### Windows: better-sqlite3 Compilation Fails
|
|
377
|
+
|
|
378
|
+
**Problem:** `node-gyp` errors, missing Visual Studio
|
|
379
|
+
|
|
380
|
+
**Solution:** Use sql.js provider (automatic fallback)
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
const db = await createDatabase('./data/memory.db', {
|
|
384
|
+
provider: 'sql.js'
|
|
385
|
+
});
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### macOS: Code Signing Issues
|
|
389
|
+
|
|
390
|
+
**Problem:** "cannot be opened because the developer cannot be verified"
|
|
391
|
+
|
|
392
|
+
**Solution:** Allow native module in System Preferences or use sql.js
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
# Allow native module
|
|
396
|
+
xattr -d com.apple.quarantine node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### Linux: Missing SQLite Headers
|
|
400
|
+
|
|
401
|
+
**Problem:** `sqlite3.h not found`
|
|
402
|
+
|
|
403
|
+
**Solution:** Install development headers
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
sudo apt-get install libsqlite3-dev
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
## Best Practices
|
|
410
|
+
|
|
411
|
+
### 1. Use Auto-Selection in Production
|
|
412
|
+
|
|
413
|
+
```typescript
|
|
414
|
+
// Let the library choose the best provider
|
|
415
|
+
const db = await createDatabase('./data/memory.db');
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### 2. Persist Regularly on Windows
|
|
419
|
+
|
|
420
|
+
```typescript
|
|
421
|
+
// sql.js is in-memory, persist frequently
|
|
422
|
+
const db = await createDatabase('./data/memory.db', {
|
|
423
|
+
provider: 'sql.js',
|
|
424
|
+
autoPersistInterval: 5000 // 5 seconds
|
|
425
|
+
});
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### 3. Enable WAL Mode on Unix
|
|
429
|
+
|
|
430
|
+
```typescript
|
|
431
|
+
// Better concurrency on macOS/Linux
|
|
432
|
+
const db = await createDatabase('./data/memory.db', {
|
|
433
|
+
provider: 'better-sqlite3',
|
|
434
|
+
walMode: true
|
|
435
|
+
});
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### 4. Check Health Regularly
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
const health = await db.healthCheck();
|
|
442
|
+
if (health.status !== 'healthy') {
|
|
443
|
+
console.warn('Database issues:', health.issues);
|
|
444
|
+
console.log('Recommendations:', health.recommendations);
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### 5. Handle Shutdown Gracefully
|
|
449
|
+
|
|
450
|
+
```typescript
|
|
451
|
+
// Always shutdown to persist changes
|
|
452
|
+
process.on('SIGINT', async () => {
|
|
453
|
+
await db.shutdown();
|
|
454
|
+
process.exit(0);
|
|
455
|
+
});
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
## Environment Variables
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
# Force specific provider
|
|
462
|
+
CLAUDE_FLOW_DB_PROVIDER=sql.js
|
|
463
|
+
|
|
464
|
+
# Enable verbose logging
|
|
465
|
+
CLAUDE_FLOW_DB_VERBOSE=true
|
|
466
|
+
|
|
467
|
+
# Set auto-persist interval (ms)
|
|
468
|
+
CLAUDE_FLOW_DB_PERSIST_INTERVAL=10000
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
## Docker Support
|
|
472
|
+
|
|
473
|
+
```dockerfile
|
|
474
|
+
FROM node:20-alpine
|
|
475
|
+
|
|
476
|
+
# Install SQLite for better-sqlite3 (optional)
|
|
477
|
+
RUN apk add --no-cache sqlite-dev python3 make g++
|
|
478
|
+
|
|
479
|
+
WORKDIR /app
|
|
480
|
+
COPY package*.json ./
|
|
481
|
+
RUN npm install
|
|
482
|
+
|
|
483
|
+
# Will use better-sqlite3 if compilation succeeds,
|
|
484
|
+
# otherwise falls back to sql.js automatically
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
## Testing
|
|
488
|
+
|
|
489
|
+
Run cross-platform tests:
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
# Run all tests
|
|
493
|
+
npm test
|
|
494
|
+
|
|
495
|
+
# Test specific provider
|
|
496
|
+
npm test -- --grep "sql.js"
|
|
497
|
+
npm test -- --grep "better-sqlite3"
|
|
498
|
+
|
|
499
|
+
# Test on current platform
|
|
500
|
+
npm test -- src/database-provider.test.ts
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
## License
|
|
504
|
+
|
|
505
|
+
MIT
|