claude-flow 2.7.1 → 2.7.3
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 +83 -22
- package/bin/claude-flow +1 -1
- package/dist/src/cli/commands/memory.js +272 -33
- package/dist/src/cli/commands/memory.js.map +1 -1
- package/dist/src/cli/help-formatter.js +3 -5
- package/dist/src/cli/help-formatter.js.map +1 -1
- package/dist/src/cli/simple-cli.js +0 -104
- package/dist/src/cli/simple-cli.js.map +1 -1
- package/dist/src/cli/simple-commands/config.js +257 -115
- package/dist/src/cli/simple-commands/config.js.map +1 -1
- package/dist/src/cli/validation-helper.js.map +1 -1
- package/dist/src/memory/agentdb-adapter.js +214 -0
- package/dist/src/memory/agentdb-adapter.js.map +1 -0
- package/dist/src/memory/backends/agentdb.js +234 -0
- package/dist/src/memory/backends/agentdb.js.map +1 -0
- package/dist/src/memory/index.js +11 -2
- package/dist/src/memory/index.js.map +1 -1
- package/dist/src/memory/migration/legacy-bridge.js +222 -0
- package/dist/src/memory/migration/legacy-bridge.js.map +1 -0
- package/dist/src/utils/metrics-reader.js +29 -41
- package/dist/src/utils/metrics-reader.js.map +1 -1
- package/docs/.claude-flow/metrics/performance.json +80 -2
- package/docs/.claude-flow/metrics/task-metrics.json +3 -3
- package/docs/INDEX.md +37 -12
- package/docs/README.md +92 -4
- package/docs/agentdb/AGENT3_FINAL_REPORT.md +643 -0
- package/docs/agentdb/AGENT3_SUMMARY.md +354 -0
- package/docs/agentdb/AGENTDB_INTEGRATION_PLAN.md +1258 -0
- package/docs/agentdb/BACKWARD_COMPATIBILITY_GUARANTEE.md +421 -0
- package/docs/agentdb/OPTIMIZATION_REPORT.md +360 -0
- package/docs/agentdb/PRODUCTION_READINESS.md +499 -0
- package/docs/agentdb/PUBLISHING_CHECKLIST.md +364 -0
- package/docs/agentdb/README.md +58 -0
- package/docs/agentdb/SWARM_COORDINATION.md +393 -0
- package/docs/agentdb/SWARM_IMPLEMENTATION_COMPLETE.md +538 -0
- package/docs/agentdb/agentdb-integration-summary.md +331 -0
- package/docs/agentdb/benchmarks/baseline-report.json +75 -0
- package/docs/development/AGENT1_COMPLETION_REPORT.md +466 -0
- package/docs/development/README.md +22 -0
- package/docs/fixes/PATTERN_FIX_CONFIRMATION.md +513 -0
- package/docs/fixes/README.md +33 -0
- package/docs/guides/README.md +29 -0
- package/docs/integrations/agentic-flow/INTEGRATION-TEST-v1.7.1.md +419 -0
- package/docs/integrations/agentic-flow/MIGRATION_v1.7.0.md +381 -0
- package/docs/integrations/agentic-flow/README.md +229 -0
- package/docs/integrations/agentic-flow/RELEASE-v1.7.0.md +348 -0
- package/docs/integrations/agentic-flow/RELEASE-v1.7.1.md +547 -0
- package/docs/integrations/agentic-flow/VERIFICATION-v1.7.4.md +556 -0
- package/docs/performance/README.md +31 -0
- package/docs/releases/ALPHA_TAG_UPDATE.md +150 -0
- package/docs/releases/README.md +25 -0
- package/docs/{RELEASE-NOTES-v2.7.0-alpha.10.md → releases/v2.7.0-alpha.10/RELEASE-NOTES-v2.7.0-alpha.10.md} +1 -1
- package/docs/releases/v2.7.1/RELEASE_SUMMARY_v2.7.1.md +340 -0
- package/docs/validation/DOCKER_VERIFICATION_REPORT.md +371 -0
- package/docs/validation/README.md +25 -0
- package/docs/validation/REGRESSION_ANALYSIS_v2.7.1.md +357 -0
- package/package.json +4 -3
- package/scripts/fix-agentdb-imports.sh +18 -0
- package/scripts/run-docker-regression.sh +101 -0
- package/scripts/verify-agentdb-integration.sh +220 -0
- package/src/cli/commands/memory.ts +347 -35
- package/src/memory/README-AGENTDB.md +366 -0
- package/src/memory/agentdb-adapter.js +373 -0
- package/src/memory/backends/agentdb.js +360 -0
- package/src/memory/index.js +32 -3
- package/src/memory/migration/legacy-bridge.js +330 -0
- /package/docs/{COMMANDS_TO_SKILLS_MIGRATION.md → development/COMMANDS_TO_SKILLS_MIGRATION.md} +0 -0
- /package/docs/{FINAL_INIT_STRUCTURE.md → development/FINAL_INIT_STRUCTURE.md} +0 -0
- /package/docs/{CLI-MEMORY-COMMANDS-WORKING.md → fixes/CLI-MEMORY-COMMANDS-WORKING.md} +0 -0
- /package/docs/{PATTERN_PERSISTENCE_FIX.md → fixes/PATTERN_PERSISTENCE_FIX.md} +0 -0
- /package/docs/{skills-tutorial.md → guides/skills-tutorial.md} +0 -0
- /package/docs/{PERFORMANCE-JSON-IMPROVEMENTS.md → performance/PERFORMANCE-JSON-IMPROVEMENTS.md} +0 -0
- /package/docs/{PERFORMANCE-METRICS-GUIDE.md → performance/PERFORMANCE-METRICS-GUIDE.md} +0 -0
- /package/docs/{RELEASE-NOTES-v2.7.0-alpha.9.md → releases/v2.7.0-alpha.9/RELEASE-NOTES-v2.7.0-alpha.9.md} +0 -0
- /package/docs/{RELEASE_v2.7.1.md → releases/v2.7.1/RELEASE_v2.7.1.md} +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { EnhancedMemory } from './enhanced-memory.js';
|
|
2
|
+
import { AgentDBBackend } from './backends/agentdb.js';
|
|
3
|
+
export class AgentDBMemoryAdapter extends EnhancedMemory {
|
|
4
|
+
constructor(options = {}){
|
|
5
|
+
super(options);
|
|
6
|
+
this.mode = options.mode || 'hybrid';
|
|
7
|
+
this.agentdb = null;
|
|
8
|
+
this.agentdbInitialized = false;
|
|
9
|
+
this.agentdbError = null;
|
|
10
|
+
}
|
|
11
|
+
async initialize() {
|
|
12
|
+
await super.initialize();
|
|
13
|
+
if (this.mode !== 'legacy') {
|
|
14
|
+
try {
|
|
15
|
+
this.agentdb = new AgentDBBackend({
|
|
16
|
+
dbPath: this.options.agentdbPath || '.agentdb/claude-flow.db',
|
|
17
|
+
quantization: this.options.quantization || 'scalar',
|
|
18
|
+
enableHNSW: this.options.enableHNSW !== false
|
|
19
|
+
});
|
|
20
|
+
await this.agentdb.initialize();
|
|
21
|
+
this.agentdbInitialized = true;
|
|
22
|
+
console.error(`[${new Date().toISOString()}] INFO [agentdb-adapter] AgentDB initialized in ${this.mode} mode`);
|
|
23
|
+
} catch (error) {
|
|
24
|
+
this.agentdbError = error;
|
|
25
|
+
if (this.mode === 'agentdb') {
|
|
26
|
+
throw new Error(`AgentDB initialization failed in agentdb-only mode: ${error.message}`);
|
|
27
|
+
}
|
|
28
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB initialization failed, using legacy mode: ${error.message}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
isAgentDBAvailable() {
|
|
33
|
+
return this.agentdbInitialized && this.agentdb !== null;
|
|
34
|
+
}
|
|
35
|
+
async storeWithEmbedding(key, value, options = {}) {
|
|
36
|
+
const legacyResult = await this.store(key, value, options);
|
|
37
|
+
if (options.embedding && this.isAgentDBAvailable()) {
|
|
38
|
+
try {
|
|
39
|
+
await this.agentdb.storeVector(key, options.embedding, {
|
|
40
|
+
value,
|
|
41
|
+
metadata: options.metadata,
|
|
42
|
+
namespace: options.namespace,
|
|
43
|
+
timestamp: Date.now()
|
|
44
|
+
});
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] Vector storage failed: ${error.message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return legacyResult;
|
|
50
|
+
}
|
|
51
|
+
async vectorSearch(query, options = {}) {
|
|
52
|
+
if (!this.isAgentDBAvailable()) {
|
|
53
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB unavailable, falling back to legacy search`);
|
|
54
|
+
const pattern = typeof query === 'string' ? query : '*';
|
|
55
|
+
return this.search(pattern, {
|
|
56
|
+
namespace: options.namespace,
|
|
57
|
+
limit: options.k || 10
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
return await this.agentdb.search(query, {
|
|
62
|
+
k: options.k || 10,
|
|
63
|
+
namespace: options.namespace,
|
|
64
|
+
filter: options.filter
|
|
65
|
+
});
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-adapter] Vector search failed: ${error.message}`);
|
|
68
|
+
if (this.mode === 'hybrid') {
|
|
69
|
+
const pattern = typeof query === 'string' ? query : '*';
|
|
70
|
+
return this.search(pattern, {
|
|
71
|
+
namespace: options.namespace,
|
|
72
|
+
limit: options.k || 10
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async semanticRetrieve(query, options = {}) {
|
|
79
|
+
if (!this.isAgentDBAvailable()) {
|
|
80
|
+
return this.retrieve(query, options);
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const results = await this.vectorSearch(query, {
|
|
84
|
+
k: 1,
|
|
85
|
+
namespace: options.namespace,
|
|
86
|
+
filter: options.filter
|
|
87
|
+
});
|
|
88
|
+
if (results.length === 0) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return results[0].value || results[0].metadata?.value;
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] Semantic retrieve failed: ${error.message}`);
|
|
94
|
+
return this.retrieve(query, options);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async storeKnowledgeWithEmbedding(domain, key, value, metadata = {}, embedding = null) {
|
|
98
|
+
const legacyResult = await this.storeKnowledge(domain, key, value, metadata);
|
|
99
|
+
if (embedding && this.isAgentDBAvailable()) {
|
|
100
|
+
try {
|
|
101
|
+
await this.agentdb.storeVector(`knowledge:${domain}:${key}`, embedding, {
|
|
102
|
+
domain,
|
|
103
|
+
key,
|
|
104
|
+
value,
|
|
105
|
+
metadata,
|
|
106
|
+
createdAt: Date.now()
|
|
107
|
+
});
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] Knowledge vector storage failed: ${error.message}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return legacyResult;
|
|
113
|
+
}
|
|
114
|
+
async searchKnowledgeSemantic(domain, queryEmbedding, options = {}) {
|
|
115
|
+
if (!this.isAgentDBAvailable()) {
|
|
116
|
+
return this.searchKnowledge(domain, '*');
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
return await this.agentdb.search(queryEmbedding, {
|
|
120
|
+
k: options.limit || 50,
|
|
121
|
+
filter: {
|
|
122
|
+
domain
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
} catch (error) {
|
|
126
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] Semantic knowledge search failed: ${error.message}`);
|
|
127
|
+
return this.searchKnowledge(domain, '*');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async getAgentDBStats() {
|
|
131
|
+
if (!this.isAgentDBAvailable()) {
|
|
132
|
+
return {
|
|
133
|
+
available: false,
|
|
134
|
+
error: this.agentdbError?.message || 'AgentDB not initialized'
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
return await this.agentdb.getStats();
|
|
139
|
+
} catch (error) {
|
|
140
|
+
return {
|
|
141
|
+
available: true,
|
|
142
|
+
error: error.message
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async optimizeAgentDB() {
|
|
147
|
+
if (!this.isAgentDBAvailable()) {
|
|
148
|
+
throw new Error('AgentDB not available for optimization');
|
|
149
|
+
}
|
|
150
|
+
return this.agentdb.optimize();
|
|
151
|
+
}
|
|
152
|
+
async exportDataWithVectors(namespace = null) {
|
|
153
|
+
const legacyData = await this.exportData(namespace);
|
|
154
|
+
if (!this.isAgentDBAvailable()) {
|
|
155
|
+
return {
|
|
156
|
+
legacy: legacyData,
|
|
157
|
+
vectors: null,
|
|
158
|
+
agentdbAvailable: false
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const vectorData = await this.agentdb.exportVectors(namespace);
|
|
163
|
+
return {
|
|
164
|
+
legacy: legacyData,
|
|
165
|
+
vectors: vectorData,
|
|
166
|
+
agentdbAvailable: true
|
|
167
|
+
};
|
|
168
|
+
} catch (error) {
|
|
169
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] Vector export failed: ${error.message}`);
|
|
170
|
+
return {
|
|
171
|
+
legacy: legacyData,
|
|
172
|
+
vectors: null,
|
|
173
|
+
agentdbAvailable: true,
|
|
174
|
+
error: error.message
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async cleanupAll() {
|
|
179
|
+
const legacyCleanup = await this.cleanupExpired();
|
|
180
|
+
if (!this.isAgentDBAvailable()) {
|
|
181
|
+
return {
|
|
182
|
+
legacy: legacyCleanup,
|
|
183
|
+
agentdb: null
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
const agentdbCleanup = await this.agentdb.cleanup();
|
|
188
|
+
return {
|
|
189
|
+
legacy: legacyCleanup,
|
|
190
|
+
agentdb: agentdbCleanup
|
|
191
|
+
};
|
|
192
|
+
} catch (error) {
|
|
193
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB cleanup failed: ${error.message}`);
|
|
194
|
+
return {
|
|
195
|
+
legacy: legacyCleanup,
|
|
196
|
+
agentdb: null,
|
|
197
|
+
error: error.message
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async close() {
|
|
202
|
+
await super.close?.();
|
|
203
|
+
if (this.isAgentDBAvailable()) {
|
|
204
|
+
try {
|
|
205
|
+
await this.agentdb.close();
|
|
206
|
+
} catch (error) {
|
|
207
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB close failed: ${error.message}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
export default AgentDBMemoryAdapter;
|
|
213
|
+
|
|
214
|
+
//# sourceMappingURL=agentdb-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/memory/agentdb-adapter.js"],"sourcesContent":["/**\n * AgentDB Memory Adapter - v1.3.9 Integration\n * Extends EnhancedMemory with vector search capabilities\n * 100% backward compatible with existing memory operations\n */\n\nimport { EnhancedMemory } from './enhanced-memory.js';\nimport { AgentDBBackend } from './backends/agentdb.js';\n\nexport class AgentDBMemoryAdapter extends EnhancedMemory {\n constructor(options = {}) {\n super(options);\n\n /**\n * Operational modes:\n * - 'hybrid': AgentDB for new features, fallback to legacy (default, recommended)\n * - 'agentdb': AgentDB only, fail if unavailable\n * - 'legacy': Legacy only, no AgentDB features\n */\n this.mode = options.mode || 'hybrid';\n\n /**\n * AgentDB instance for vector operations\n * Null if mode is 'legacy' or initialization fails\n */\n this.agentdb = null;\n\n /**\n * Track initialization state\n */\n this.agentdbInitialized = false;\n this.agentdbError = null;\n }\n\n async initialize() {\n // Always initialize legacy memory first\n await super.initialize();\n\n // Initialize AgentDB if mode allows\n if (this.mode !== 'legacy') {\n try {\n this.agentdb = new AgentDBBackend({\n dbPath: this.options.agentdbPath || '.agentdb/claude-flow.db',\n quantization: this.options.quantization || 'scalar',\n enableHNSW: this.options.enableHNSW !== false,\n });\n\n await this.agentdb.initialize();\n this.agentdbInitialized = true;\n\n console.error(\n `[${new Date().toISOString()}] INFO [agentdb-adapter] AgentDB initialized in ${this.mode} mode`,\n );\n } catch (error) {\n this.agentdbError = error;\n\n if (this.mode === 'agentdb') {\n // Fail hard if AgentDB-only mode\n throw new Error(`AgentDB initialization failed in agentdb-only mode: ${error.message}`);\n }\n\n // Hybrid mode: warn and continue with legacy\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB initialization failed, using legacy mode: ${error.message}`,\n );\n }\n }\n }\n\n /**\n * Check if AgentDB is available\n * @returns {boolean} True if AgentDB is initialized and ready\n */\n isAgentDBAvailable() {\n return this.agentdbInitialized && this.agentdb !== null;\n }\n\n /**\n * Store data with optional vector embedding\n * Backward compatible with legacy store() method\n *\n * @param {string} key - Storage key\n * @param {*} value - Value to store\n * @param {Object} options - Storage options\n * @param {string} options.embedding - Optional embedding vector for semantic search\n * @param {Object} options.metadata - Metadata for the entry\n * @param {string} options.namespace - Namespace for organization\n * @param {number} options.ttl - Time to live in seconds\n * @returns {Promise<*>} Storage result\n */\n async storeWithEmbedding(key, value, options = {}) {\n // Always store in legacy for backward compatibility\n const legacyResult = await this.store(key, value, options);\n\n // If embedding provided and AgentDB available, store vector\n if (options.embedding && this.isAgentDBAvailable()) {\n try {\n await this.agentdb.storeVector(key, options.embedding, {\n value,\n metadata: options.metadata,\n namespace: options.namespace,\n timestamp: Date.now(),\n });\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] Vector storage failed: ${error.message}`,\n );\n // Don't fail if vector storage fails in hybrid mode\n }\n }\n\n return legacyResult;\n }\n\n /**\n * Perform semantic vector search\n * Falls back to legacy search if AgentDB unavailable\n *\n * @param {Array<number>|string} query - Query vector or embedding\n * @param {Object} options - Search options\n * @param {number} options.k - Number of results (default: 10)\n * @param {string} options.namespace - Filter by namespace\n * @param {Object} options.filter - Additional filters\n * @returns {Promise<Array>} Search results with similarity scores\n */\n async vectorSearch(query, options = {}) {\n if (!this.isAgentDBAvailable()) {\n // Fallback to legacy pattern search\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB unavailable, falling back to legacy search`,\n );\n\n const pattern = typeof query === 'string' ? query : '*';\n return this.search(pattern, {\n namespace: options.namespace,\n limit: options.k || 10,\n });\n }\n\n try {\n return await this.agentdb.search(query, {\n k: options.k || 10,\n namespace: options.namespace,\n filter: options.filter,\n });\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-adapter] Vector search failed: ${error.message}`,\n );\n\n // Fallback to legacy in hybrid mode\n if (this.mode === 'hybrid') {\n const pattern = typeof query === 'string' ? query : '*';\n return this.search(pattern, {\n namespace: options.namespace,\n limit: options.k || 10,\n });\n }\n\n throw error;\n }\n }\n\n /**\n * Retrieve semantically similar data\n * Combines vector search with legacy retrieval\n *\n * @param {string} query - Query text or embedding\n * @param {Object} options - Retrieval options\n * @returns {Promise<*>} Retrieved value or null\n */\n async semanticRetrieve(query, options = {}) {\n if (!this.isAgentDBAvailable()) {\n // Fallback to exact key match\n return this.retrieve(query, options);\n }\n\n try {\n const results = await this.vectorSearch(query, {\n k: 1,\n namespace: options.namespace,\n filter: options.filter,\n });\n\n if (results.length === 0) {\n return null;\n }\n\n // Return the most similar result\n return results[0].value || results[0].metadata?.value;\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] Semantic retrieve failed: ${error.message}`,\n );\n\n // Fallback to exact match\n return this.retrieve(query, options);\n }\n }\n\n /**\n * Store knowledge with semantic embedding\n * Enhanced version of storeKnowledge with vector support\n */\n async storeKnowledgeWithEmbedding(domain, key, value, metadata = {}, embedding = null) {\n // Store in legacy knowledge base\n const legacyResult = await this.storeKnowledge(domain, key, value, metadata);\n\n // If embedding provided, store vector\n if (embedding && this.isAgentDBAvailable()) {\n try {\n await this.agentdb.storeVector(`knowledge:${domain}:${key}`, embedding, {\n domain,\n key,\n value,\n metadata,\n createdAt: Date.now(),\n });\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] Knowledge vector storage failed: ${error.message}`,\n );\n }\n }\n\n return legacyResult;\n }\n\n /**\n * Search knowledge semantically\n * Enhanced version of searchKnowledge with vector support\n */\n async searchKnowledgeSemantic(domain, queryEmbedding, options = {}) {\n if (!this.isAgentDBAvailable()) {\n // Fallback to legacy pattern search\n return this.searchKnowledge(domain, '*');\n }\n\n try {\n return await this.agentdb.search(queryEmbedding, {\n k: options.limit || 50,\n filter: { domain },\n });\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] Semantic knowledge search failed: ${error.message}`,\n );\n return this.searchKnowledge(domain, '*');\n }\n }\n\n /**\n * Get AgentDB statistics\n * @returns {Promise<Object>} Database statistics\n */\n async getAgentDBStats() {\n if (!this.isAgentDBAvailable()) {\n return {\n available: false,\n error: this.agentdbError?.message || 'AgentDB not initialized',\n };\n }\n\n try {\n return await this.agentdb.getStats();\n } catch (error) {\n return {\n available: true,\n error: error.message,\n };\n }\n }\n\n /**\n * Optimize AgentDB indices\n * @returns {Promise<Object>} Optimization results\n */\n async optimizeAgentDB() {\n if (!this.isAgentDBAvailable()) {\n throw new Error('AgentDB not available for optimization');\n }\n\n return this.agentdb.optimize();\n }\n\n /**\n * Export data including vectors\n * @param {string} namespace - Optional namespace filter\n * @returns {Promise<Object>} Exported data with vectors\n */\n async exportDataWithVectors(namespace = null) {\n const legacyData = await this.exportData(namespace);\n\n if (!this.isAgentDBAvailable()) {\n return {\n legacy: legacyData,\n vectors: null,\n agentdbAvailable: false,\n };\n }\n\n try {\n const vectorData = await this.agentdb.exportVectors(namespace);\n return {\n legacy: legacyData,\n vectors: vectorData,\n agentdbAvailable: true,\n };\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] Vector export failed: ${error.message}`,\n );\n return {\n legacy: legacyData,\n vectors: null,\n agentdbAvailable: true,\n error: error.message,\n };\n }\n }\n\n /**\n * Cleanup both legacy and AgentDB data\n * @returns {Promise<Object>} Cleanup results\n */\n async cleanupAll() {\n const legacyCleanup = await this.cleanupExpired();\n\n if (!this.isAgentDBAvailable()) {\n return {\n legacy: legacyCleanup,\n agentdb: null,\n };\n }\n\n try {\n const agentdbCleanup = await this.agentdb.cleanup();\n return {\n legacy: legacyCleanup,\n agentdb: agentdbCleanup,\n };\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB cleanup failed: ${error.message}`,\n );\n return {\n legacy: legacyCleanup,\n agentdb: null,\n error: error.message,\n };\n }\n }\n\n /**\n * Close both legacy and AgentDB connections\n * @returns {Promise<void>}\n */\n async close() {\n await super.close?.();\n\n if (this.isAgentDBAvailable()) {\n try {\n await this.agentdb.close();\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-adapter] AgentDB close failed: ${error.message}`,\n );\n }\n }\n }\n}\n\nexport default AgentDBMemoryAdapter;\n"],"names":["EnhancedMemory","AgentDBBackend","AgentDBMemoryAdapter","options","mode","agentdb","agentdbInitialized","agentdbError","initialize","dbPath","agentdbPath","quantization","enableHNSW","console","error","Date","toISOString","Error","message","isAgentDBAvailable","storeWithEmbedding","key","value","legacyResult","store","embedding","storeVector","metadata","namespace","timestamp","now","vectorSearch","query","pattern","search","limit","k","filter","semanticRetrieve","retrieve","results","length","storeKnowledgeWithEmbedding","domain","storeKnowledge","createdAt","searchKnowledgeSemantic","queryEmbedding","searchKnowledge","getAgentDBStats","available","getStats","optimizeAgentDB","optimize","exportDataWithVectors","legacyData","exportData","legacy","vectors","agentdbAvailable","vectorData","exportVectors","cleanupAll","legacyCleanup","cleanupExpired","agentdbCleanup","cleanup","close"],"mappings":"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"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
export class AgentDBBackend {
|
|
2
|
+
constructor(options = {}){
|
|
3
|
+
this.dbPath = options.dbPath || '.agentdb/claude-flow.db';
|
|
4
|
+
this.quantization = options.quantization || 'scalar';
|
|
5
|
+
this.enableHNSW = options.enableHNSW !== false;
|
|
6
|
+
this.db = null;
|
|
7
|
+
this.initialized = false;
|
|
8
|
+
}
|
|
9
|
+
async initialize() {
|
|
10
|
+
try {
|
|
11
|
+
const { default: AgentDB } = await import('agentdb');
|
|
12
|
+
this.db = new AgentDB({
|
|
13
|
+
path: this.dbPath,
|
|
14
|
+
quantization: this.quantization,
|
|
15
|
+
indexType: this.enableHNSW ? 'hnsw' : 'flat'
|
|
16
|
+
});
|
|
17
|
+
await this.db.init();
|
|
18
|
+
this.initialized = true;
|
|
19
|
+
console.error(`[${new Date().toISOString()}] INFO [agentdb-backend] AgentDB initialized at ${this.dbPath}`);
|
|
20
|
+
console.error(`[${new Date().toISOString()}] INFO [agentdb-backend] Quantization: ${this.quantization}, HNSW: ${this.enableHNSW}`);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Failed to initialize AgentDB: ${error.message}`);
|
|
23
|
+
throw new Error(`AgentDB initialization failed: ${error.message}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async storeVector(key, embedding, metadata = {}) {
|
|
27
|
+
if (!this.initialized) {
|
|
28
|
+
throw new Error('AgentDB not initialized');
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
await this.db.add({
|
|
32
|
+
id: key,
|
|
33
|
+
vector: embedding,
|
|
34
|
+
metadata: {
|
|
35
|
+
...metadata,
|
|
36
|
+
storedAt: Date.now()
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Failed to store vector: ${error.message}`);
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async search(query, options = {}) {
|
|
45
|
+
if (!this.initialized) {
|
|
46
|
+
throw new Error('AgentDB not initialized');
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const results = await this.db.search({
|
|
50
|
+
vector: query,
|
|
51
|
+
k: options.k || 10,
|
|
52
|
+
filter: this._buildFilter(options)
|
|
53
|
+
});
|
|
54
|
+
return results.map((result)=>({
|
|
55
|
+
id: result.id,
|
|
56
|
+
similarity: result.score,
|
|
57
|
+
metadata: result.metadata,
|
|
58
|
+
value: result.metadata?.value
|
|
59
|
+
}));
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Search failed: ${error.message}`);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async getVector(key) {
|
|
66
|
+
if (!this.initialized) {
|
|
67
|
+
throw new Error('AgentDB not initialized');
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
return await this.db.get(key);
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-backend] Get vector failed: ${error.message}`);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async deleteVector(key) {
|
|
77
|
+
if (!this.initialized) {
|
|
78
|
+
throw new Error('AgentDB not initialized');
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
await this.db.delete(key);
|
|
82
|
+
return true;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-backend] Delete vector failed: ${error.message}`);
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
_buildFilter(options) {
|
|
89
|
+
const filter = {};
|
|
90
|
+
if (options.namespace) {
|
|
91
|
+
filter['metadata.namespace'] = options.namespace;
|
|
92
|
+
}
|
|
93
|
+
if (options.filter) {
|
|
94
|
+
Object.entries(options.filter).forEach(([key, value])=>{
|
|
95
|
+
filter[`metadata.${key}`] = value;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return Object.keys(filter).length > 0 ? filter : undefined;
|
|
99
|
+
}
|
|
100
|
+
async getStats() {
|
|
101
|
+
if (!this.initialized) {
|
|
102
|
+
return {
|
|
103
|
+
initialized: false,
|
|
104
|
+
vectorCount: 0
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
const stats = await this.db.stats();
|
|
109
|
+
return {
|
|
110
|
+
initialized: true,
|
|
111
|
+
vectorCount: stats.count || 0,
|
|
112
|
+
indexType: this.enableHNSW ? 'hnsw' : 'flat',
|
|
113
|
+
quantization: this.quantization,
|
|
114
|
+
dbPath: this.dbPath,
|
|
115
|
+
...stats
|
|
116
|
+
};
|
|
117
|
+
} catch (error) {
|
|
118
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-backend] Stats failed: ${error.message}`);
|
|
119
|
+
return {
|
|
120
|
+
initialized: true,
|
|
121
|
+
error: error.message
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async optimize() {
|
|
126
|
+
if (!this.initialized) {
|
|
127
|
+
throw new Error('AgentDB not initialized');
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const startTime = Date.now();
|
|
131
|
+
if (this.enableHNSW && this.db.optimize) {
|
|
132
|
+
await this.db.optimize();
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
success: true,
|
|
136
|
+
duration: Date.now() - startTime,
|
|
137
|
+
timestamp: Date.now()
|
|
138
|
+
};
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Optimization failed: ${error.message}`);
|
|
141
|
+
return {
|
|
142
|
+
success: false,
|
|
143
|
+
error: error.message
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async exportVectors(namespace = null) {
|
|
148
|
+
if (!this.initialized) {
|
|
149
|
+
throw new Error('AgentDB not initialized');
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
const filter = namespace ? {
|
|
153
|
+
'metadata.namespace': namespace
|
|
154
|
+
} : undefined;
|
|
155
|
+
const results = await this.db.list({
|
|
156
|
+
filter
|
|
157
|
+
});
|
|
158
|
+
return results.map((result)=>({
|
|
159
|
+
id: result.id,
|
|
160
|
+
vector: result.vector,
|
|
161
|
+
metadata: result.metadata
|
|
162
|
+
}));
|
|
163
|
+
} catch (error) {
|
|
164
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Export failed: ${error.message}`);
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async importVectors(vectors) {
|
|
169
|
+
if (!this.initialized) {
|
|
170
|
+
throw new Error('AgentDB not initialized');
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
const startTime = Date.now();
|
|
174
|
+
let successCount = 0;
|
|
175
|
+
let errorCount = 0;
|
|
176
|
+
for (const vector of vectors){
|
|
177
|
+
try {
|
|
178
|
+
await this.storeVector(vector.id, vector.vector, vector.metadata);
|
|
179
|
+
successCount++;
|
|
180
|
+
} catch (error) {
|
|
181
|
+
errorCount++;
|
|
182
|
+
console.error(`[${new Date().toISOString()}] WARN [agentdb-backend] Import vector failed: ${error.message}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
success: true,
|
|
187
|
+
imported: successCount,
|
|
188
|
+
errors: errorCount,
|
|
189
|
+
total: vectors.length,
|
|
190
|
+
duration: Date.now() - startTime
|
|
191
|
+
};
|
|
192
|
+
} catch (error) {
|
|
193
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Import failed: ${error.message}`);
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async cleanup() {
|
|
198
|
+
if (!this.initialized) {
|
|
199
|
+
throw new Error('AgentDB not initialized');
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
const stats = await this.getStats();
|
|
203
|
+
return {
|
|
204
|
+
success: true,
|
|
205
|
+
vectorCount: stats.vectorCount,
|
|
206
|
+
timestamp: Date.now()
|
|
207
|
+
};
|
|
208
|
+
} catch (error) {
|
|
209
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Cleanup failed: ${error.message}`);
|
|
210
|
+
return {
|
|
211
|
+
success: false,
|
|
212
|
+
error: error.message
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async close() {
|
|
217
|
+
if (!this.initialized) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
try {
|
|
221
|
+
if (this.db && this.db.close) {
|
|
222
|
+
await this.db.close();
|
|
223
|
+
}
|
|
224
|
+
this.initialized = false;
|
|
225
|
+
console.error(`[${new Date().toISOString()}] INFO [agentdb-backend] AgentDB closed`);
|
|
226
|
+
} catch (error) {
|
|
227
|
+
console.error(`[${new Date().toISOString()}] ERROR [agentdb-backend] Close failed: ${error.message}`);
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export default AgentDBBackend;
|
|
233
|
+
|
|
234
|
+
//# sourceMappingURL=agentdb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/memory/backends/agentdb.js"],"sourcesContent":["/**\n * AgentDB Backend - Direct integration with AgentDB v1.3.9\n * Provides vector storage, HNSW search, and quantization\n */\n\nexport class AgentDBBackend {\n constructor(options = {}) {\n this.dbPath = options.dbPath || '.agentdb/claude-flow.db';\n this.quantization = options.quantization || 'scalar'; // scalar, binary, product\n this.enableHNSW = options.enableHNSW !== false;\n this.db = null;\n this.initialized = false;\n }\n\n async initialize() {\n try {\n // Dynamic import of AgentDB\n const { default: AgentDB } = await import('agentdb');\n\n // Initialize AgentDB instance\n this.db = new AgentDB({\n path: this.dbPath,\n quantization: this.quantization,\n indexType: this.enableHNSW ? 'hnsw' : 'flat',\n });\n\n await this.db.init();\n this.initialized = true;\n\n console.error(\n `[${new Date().toISOString()}] INFO [agentdb-backend] AgentDB initialized at ${this.dbPath}`,\n );\n console.error(\n `[${new Date().toISOString()}] INFO [agentdb-backend] Quantization: ${this.quantization}, HNSW: ${this.enableHNSW}`,\n );\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Failed to initialize AgentDB: ${error.message}`,\n );\n throw new Error(`AgentDB initialization failed: ${error.message}`);\n }\n }\n\n /**\n * Store a vector with metadata\n * @param {string} key - Unique identifier\n * @param {Array<number>} embedding - Vector embedding\n * @param {Object} metadata - Associated metadata\n * @returns {Promise<void>}\n */\n async storeVector(key, embedding, metadata = {}) {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n await this.db.add({\n id: key,\n vector: embedding,\n metadata: {\n ...metadata,\n storedAt: Date.now(),\n },\n });\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Failed to store vector: ${error.message}`,\n );\n throw error;\n }\n }\n\n /**\n * Search for similar vectors\n * @param {Array<number>|string} query - Query vector or text\n * @param {Object} options - Search options\n * @param {number} options.k - Number of results\n * @param {string} options.namespace - Filter by namespace\n * @param {Object} options.filter - Metadata filters\n * @returns {Promise<Array>} Results with similarity scores\n */\n async search(query, options = {}) {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n const results = await this.db.search({\n vector: query,\n k: options.k || 10,\n filter: this._buildFilter(options),\n });\n\n return results.map(result => ({\n id: result.id,\n similarity: result.score,\n metadata: result.metadata,\n value: result.metadata?.value,\n }));\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Search failed: ${error.message}`,\n );\n throw error;\n }\n }\n\n /**\n * Get a specific vector by key\n * @param {string} key - Vector identifier\n * @returns {Promise<Object|null>} Vector data or null\n */\n async getVector(key) {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n return await this.db.get(key);\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-backend] Get vector failed: ${error.message}`,\n );\n return null;\n }\n }\n\n /**\n * Delete a vector by key\n * @param {string} key - Vector identifier\n * @returns {Promise<boolean>} Success status\n */\n async deleteVector(key) {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n await this.db.delete(key);\n return true;\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-backend] Delete vector failed: ${error.message}`,\n );\n return false;\n }\n }\n\n /**\n * Build filter object from options\n * @private\n */\n _buildFilter(options) {\n const filter = {};\n\n if (options.namespace) {\n filter['metadata.namespace'] = options.namespace;\n }\n\n if (options.filter) {\n Object.entries(options.filter).forEach(([key, value]) => {\n filter[`metadata.${key}`] = value;\n });\n }\n\n return Object.keys(filter).length > 0 ? filter : undefined;\n }\n\n /**\n * Get database statistics\n * @returns {Promise<Object>} Statistics\n */\n async getStats() {\n if (!this.initialized) {\n return {\n initialized: false,\n vectorCount: 0,\n };\n }\n\n try {\n const stats = await this.db.stats();\n return {\n initialized: true,\n vectorCount: stats.count || 0,\n indexType: this.enableHNSW ? 'hnsw' : 'flat',\n quantization: this.quantization,\n dbPath: this.dbPath,\n ...stats,\n };\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-backend] Stats failed: ${error.message}`,\n );\n return {\n initialized: true,\n error: error.message,\n };\n }\n }\n\n /**\n * Optimize database indices\n * @returns {Promise<Object>} Optimization results\n */\n async optimize() {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n const startTime = Date.now();\n\n if (this.enableHNSW && this.db.optimize) {\n await this.db.optimize();\n }\n\n return {\n success: true,\n duration: Date.now() - startTime,\n timestamp: Date.now(),\n };\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Optimization failed: ${error.message}`,\n );\n return {\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Export all vectors\n * @param {string} namespace - Optional namespace filter\n * @returns {Promise<Array>} All vectors\n */\n async exportVectors(namespace = null) {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n const filter = namespace ? { 'metadata.namespace': namespace } : undefined;\n const results = await this.db.list({ filter });\n\n return results.map(result => ({\n id: result.id,\n vector: result.vector,\n metadata: result.metadata,\n }));\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Export failed: ${error.message}`,\n );\n throw error;\n }\n }\n\n /**\n * Import vectors in batch\n * @param {Array} vectors - Array of {id, vector, metadata}\n * @returns {Promise<Object>} Import results\n */\n async importVectors(vectors) {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n const startTime = Date.now();\n let successCount = 0;\n let errorCount = 0;\n\n for (const vector of vectors) {\n try {\n await this.storeVector(vector.id, vector.vector, vector.metadata);\n successCount++;\n } catch (error) {\n errorCount++;\n console.error(\n `[${new Date().toISOString()}] WARN [agentdb-backend] Import vector failed: ${error.message}`,\n );\n }\n }\n\n return {\n success: true,\n imported: successCount,\n errors: errorCount,\n total: vectors.length,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Import failed: ${error.message}`,\n );\n throw error;\n }\n }\n\n /**\n * Cleanup expired or invalid vectors\n * @returns {Promise<Object>} Cleanup results\n */\n async cleanup() {\n if (!this.initialized) {\n throw new Error('AgentDB not initialized');\n }\n\n try {\n // AgentDB handles its own cleanup internally\n // This is a placeholder for custom cleanup logic if needed\n const stats = await this.getStats();\n\n return {\n success: true,\n vectorCount: stats.vectorCount,\n timestamp: Date.now(),\n };\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Cleanup failed: ${error.message}`,\n );\n return {\n success: false,\n error: error.message,\n };\n }\n }\n\n /**\n * Close database connection\n * @returns {Promise<void>}\n */\n async close() {\n if (!this.initialized) {\n return;\n }\n\n try {\n if (this.db && this.db.close) {\n await this.db.close();\n }\n this.initialized = false;\n\n console.error(\n `[${new Date().toISOString()}] INFO [agentdb-backend] AgentDB closed`,\n );\n } catch (error) {\n console.error(\n `[${new Date().toISOString()}] ERROR [agentdb-backend] Close failed: ${error.message}`,\n );\n throw error;\n }\n }\n}\n\nexport default AgentDBBackend;\n"],"names":["AgentDBBackend","options","dbPath","quantization","enableHNSW","db","initialized","initialize","default","AgentDB","path","indexType","init","console","error","Date","toISOString","message","Error","storeVector","key","embedding","metadata","add","id","vector","storedAt","now","search","query","results","k","filter","_buildFilter","map","result","similarity","score","value","getVector","get","deleteVector","delete","namespace","Object","entries","forEach","keys","length","undefined","getStats","vectorCount","stats","count","optimize","startTime","success","duration","timestamp","exportVectors","list","importVectors","vectors","successCount","errorCount","imported","errors","total","cleanup","close"],"mappings":"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"}
|
package/dist/src/memory/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import SharedMemory from './shared-memory.js';
|
|
2
2
|
import { SwarmMemory, createSwarmMemory } from './swarm-memory.js';
|
|
3
|
-
|
|
3
|
+
import { AgentDBMemoryAdapter } from './agentdb-adapter.js';
|
|
4
|
+
import { AgentDBBackend } from './backends/agentdb.js';
|
|
5
|
+
import { LegacyDataBridge } from './migration/legacy-bridge.js';
|
|
6
|
+
export { SharedMemory, SwarmMemory, createSwarmMemory, AgentDBMemoryAdapter, AgentDBBackend, LegacyDataBridge };
|
|
4
7
|
export const SWARM_NAMESPACES = {
|
|
5
8
|
AGENTS: 'swarm:agents',
|
|
6
9
|
TASKS: 'swarm:tasks',
|
|
@@ -11,6 +14,9 @@ export const SWARM_NAMESPACES = {
|
|
|
11
14
|
COORDINATION: 'swarm:coordination'
|
|
12
15
|
};
|
|
13
16
|
export function createMemory(options = {}) {
|
|
17
|
+
if (options.type === 'agentdb' || options.mode) {
|
|
18
|
+
return new AgentDBMemoryAdapter(options);
|
|
19
|
+
}
|
|
14
20
|
if (options.type === 'swarm' || options.swarmId) {
|
|
15
21
|
return new SwarmMemory(options);
|
|
16
22
|
}
|
|
@@ -20,7 +26,10 @@ export default {
|
|
|
20
26
|
SharedMemory,
|
|
21
27
|
SwarmMemory,
|
|
22
28
|
createMemory,
|
|
23
|
-
SWARM_NAMESPACES
|
|
29
|
+
SWARM_NAMESPACES,
|
|
30
|
+
AgentDBMemoryAdapter,
|
|
31
|
+
AgentDBBackend,
|
|
32
|
+
LegacyDataBridge
|
|
24
33
|
};
|
|
25
34
|
|
|
26
35
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/memory/index.js"],"sourcesContent":["/**\n * Memory Module - Unified memory persistence for ruv-swarm\n *\n * Provides both generic SharedMemory and MCP-specific SwarmMemory implementations\n *\n * @module memory\n */\n\nimport SharedMemory from './shared-memory.js';\nimport { SwarmMemory, createSwarmMemory } from './swarm-memory.js';\n\nexport {
|
|
1
|
+
{"version":3,"sources":["../../../src/memory/index.js"],"sourcesContent":["/**\n * Memory Module - Unified memory persistence for ruv-swarm\n *\n * Provides both generic SharedMemory and MCP-specific SwarmMemory implementations\n * Now with AgentDB v1.3.9 vector database integration\n *\n * @module memory\n */\n\nimport SharedMemory from './shared-memory.js';\nimport { SwarmMemory, createSwarmMemory } from './swarm-memory.js';\nimport { AgentDBMemoryAdapter } from './agentdb-adapter.js';\nimport { AgentDBBackend } from './backends/agentdb.js';\nimport { LegacyDataBridge } from './migration/legacy-bridge.js';\n\nexport {\n SharedMemory,\n SwarmMemory,\n createSwarmMemory,\n AgentDBMemoryAdapter,\n AgentDBBackend,\n LegacyDataBridge,\n};\n\n// Re-export swarm namespaces for convenience\nexport const SWARM_NAMESPACES = {\n AGENTS: 'swarm:agents',\n TASKS: 'swarm:tasks',\n COMMUNICATIONS: 'swarm:communications',\n CONSENSUS: 'swarm:consensus',\n PATTERNS: 'swarm:patterns',\n METRICS: 'swarm:metrics',\n COORDINATION: 'swarm:coordination',\n};\n\n/**\n * Create memory instance based on context\n * @param {Object} options - Configuration options\n * @param {string} options.type - Memory type: 'swarm', 'agentdb', or default\n * @param {string} options.mode - AgentDB mode: 'hybrid', 'agentdb', or 'legacy'\n * @returns {SharedMemory|SwarmMemory|AgentDBMemoryAdapter} Memory instance\n */\nexport function createMemory(options = {}) {\n // Create AgentDB-enhanced memory if requested\n if (options.type === 'agentdb' || options.mode) {\n return new AgentDBMemoryAdapter(options);\n }\n\n // Create swarm-specific memory\n if (options.type === 'swarm' || options.swarmId) {\n return new SwarmMemory(options);\n }\n\n // Default to SharedMemory\n return new SharedMemory(options);\n}\n\n// Default export for backwards compatibility\nexport default {\n SharedMemory,\n SwarmMemory,\n createMemory,\n SWARM_NAMESPACES,\n AgentDBMemoryAdapter,\n AgentDBBackend,\n LegacyDataBridge,\n};\n"],"names":["SharedMemory","SwarmMemory","createSwarmMemory","AgentDBMemoryAdapter","AgentDBBackend","LegacyDataBridge","SWARM_NAMESPACES","AGENTS","TASKS","COMMUNICATIONS","CONSENSUS","PATTERNS","METRICS","COORDINATION","createMemory","options","type","mode","swarmId"],"mappings":"AASA,OAAOA,kBAAkB,qBAAqB;AAC9C,SAASC,WAAW,EAAEC,iBAAiB,QAAQ,oBAAoB;AACnE,SAASC,oBAAoB,QAAQ,uBAAuB;AAC5D,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,gBAAgB,QAAQ,+BAA+B;AAEhE,SACEL,YAAY,EACZC,WAAW,EACXC,iBAAiB,EACjBC,oBAAoB,EACpBC,cAAc,EACdC,gBAAgB,GAChB;AAGF,OAAO,MAAMC,mBAAmB;IAC9BC,QAAQ;IACRC,OAAO;IACPC,gBAAgB;IAChBC,WAAW;IACXC,UAAU;IACVC,SAAS;IACTC,cAAc;AAChB,EAAE;AASF,OAAO,SAASC,aAAaC,UAAU,CAAC,CAAC;IAEvC,IAAIA,QAAQC,IAAI,KAAK,aAAaD,QAAQE,IAAI,EAAE;QAC9C,OAAO,IAAId,qBAAqBY;IAClC;IAGA,IAAIA,QAAQC,IAAI,KAAK,WAAWD,QAAQG,OAAO,EAAE;QAC/C,OAAO,IAAIjB,YAAYc;IACzB;IAGA,OAAO,IAAIf,aAAae;AAC1B;AAGA,eAAe;IACbf;IACAC;IACAa;IACAR;IACAH;IACAC;IACAC;AACF,EAAE"}
|