claude-flow 2.7.0-alpha → 2.7.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 (86) hide show
  1. package/README.md +2 -32
  2. package/bin/claude-flow +8 -8
  3. package/dist/src/cli/help-formatter.js +5 -0
  4. package/dist/src/cli/help-formatter.js.map +1 -1
  5. package/dist/src/cli/simple-cli.js +172 -182
  6. package/dist/src/cli/simple-cli.js.map +1 -1
  7. package/dist/src/cli/simple-commands/init/index.js +45 -0
  8. package/dist/src/cli/simple-commands/init/index.js.map +1 -1
  9. package/dist/src/cli/simple-commands/memory.js +183 -31
  10. package/dist/src/cli/simple-commands/memory.js.map +1 -1
  11. package/dist/src/cli/simple-commands/performance-metrics.js +231 -1
  12. package/dist/src/cli/simple-commands/performance-metrics.js.map +1 -1
  13. package/dist/src/cli/validation-helper.js.map +1 -1
  14. package/dist/src/core/version.js +1 -1
  15. package/dist/src/reasoningbank/reasoningbank-adapter.js +283 -0
  16. package/dist/src/reasoningbank/reasoningbank-adapter.js.map +1 -0
  17. package/dist/src/utils/metrics-reader.js +0 -10
  18. package/docker-test/.claude-flow/metrics/agent-metrics.json +1 -0
  19. package/docker-test/.claude-flow/metrics/performance.json +87 -0
  20. package/docker-test/.claude-flow/metrics/task-metrics.json +10 -0
  21. package/docker-test/Dockerfile.reasoningbank-test +21 -0
  22. package/docker-test/reasoningbank-validation.mjs +201 -0
  23. package/docs/.claude-flow/metrics/agent-metrics.json +1 -0
  24. package/docs/.claude-flow/metrics/performance.json +9 -0
  25. package/docs/.claude-flow/metrics/task-metrics.json +10 -0
  26. package/docs/CLI-MEMORY-COMMANDS-WORKING.md +150 -0
  27. package/docs/INDEX.md +36 -5
  28. package/docs/PERFORMANCE-JSON-IMPROVEMENTS.md +277 -0
  29. package/docs/PERFORMANCE-METRICS-GUIDE.md +259 -0
  30. package/docs/RELEASE-NOTES-v2.7.0-alpha.10.md +309 -0
  31. package/docs/RELEASE-NOTES-v2.7.0-alpha.9.md +208 -0
  32. package/docs/integrations/README.md +61 -0
  33. package/docs/{AGENTIC_FLOW_SECURITY_TEST_REPORT.md → integrations/agentic-flow/AGENTIC_FLOW_SECURITY_TEST_REPORT.md} +7 -7
  34. package/docs/integrations/reasoningbank/MIGRATION-v1.5.13.md +189 -0
  35. package/docs/integrations/reasoningbank/REASONINGBANK-INTEGRATION-STATUS.md +179 -0
  36. package/docs/integrations/reasoningbank/REASONINGBANK-STATUS.md +219 -0
  37. package/docs/reports/README.md +49 -0
  38. package/docs/reports/REASONINGBANK_STATUS_UPDATE_v2_7_0_alpha_7.md +366 -0
  39. package/docs/reports/validation/DOCKER-VALIDATION-REPORT-v2.7.0-alpha.7.md +361 -0
  40. package/docs/reports/validation/DOCKER_SQL_FALLBACK_VALIDATION.md +398 -0
  41. package/docs/{MEMORY_REDACTION_TEST_REPORT.md → reports/validation/MEMORY_REDACTION_TEST_REPORT.md} +7 -7
  42. package/docs/reports/validation/PROCESS-EXIT-FIX-v2.7.0-alpha.9.md +154 -0
  43. package/docs/reports/validation/REASONINGBANK-v1.5.13-VALIDATION.md +235 -0
  44. package/docs/reports/validation/SQL_FALLBACK_VALIDATION_REPORT.md +405 -0
  45. package/docs/reports/validation/VALIDATION-SUMMARY.md +192 -0
  46. package/docs/setup/MCP-SETUP-GUIDE.md +154 -0
  47. package/docs/technical/README.md +36 -0
  48. package/docs/technical/fixes/WASM-ESM-FIX-SUMMARY.md +114 -0
  49. package/package.json +6 -6
  50. package/src/cli/simple-commands/init/index.js +70 -0
  51. package/src/cli/simple-commands/memory.js +236 -34
  52. package/src/cli/simple-commands/performance-metrics.js +268 -2
  53. package/src/reasoningbank/reasoningbank-adapter.js +403 -0
  54. /package/docs/{AGENT-BOOSTER-INTEGRATION.md → integrations/agent-booster/AGENT-BOOSTER-INTEGRATION.md} +0 -0
  55. /package/docs/{AGENTIC-FLOW-INTEGRATION-GUIDE.md → integrations/agentic-flow/AGENTIC-FLOW-INTEGRATION-GUIDE.md} +0 -0
  56. /package/docs/{AGENTIC_FLOW_EXECUTION_FIX_REPORT.md → integrations/agentic-flow/AGENTIC_FLOW_EXECUTION_FIX_REPORT.md} +0 -0
  57. /package/docs/{AGENTIC_FLOW_INTEGRATION_STATUS.md → integrations/agentic-flow/AGENTIC_FLOW_INTEGRATION_STATUS.md} +0 -0
  58. /package/docs/{AGENTIC_FLOW_MVP_COMPLETE.md → integrations/agentic-flow/AGENTIC_FLOW_MVP_COMPLETE.md} +0 -0
  59. /package/docs/{epic-sdk-integration.md → integrations/epic-sdk/epic-sdk-integration.md} +0 -0
  60. /package/docs/{REASONING-AGENTS.md → integrations/reasoningbank/REASONING-AGENTS.md} +0 -0
  61. /package/docs/{REASONINGBANK-AGENT-CREATION-GUIDE.md → integrations/reasoningbank/REASONINGBANK-AGENT-CREATION-GUIDE.md} +0 -0
  62. /package/docs/{REASONINGBANK-ANALYSIS-COMPLETE.md → integrations/reasoningbank/REASONINGBANK-ANALYSIS-COMPLETE.md} +0 -0
  63. /package/docs/{REASONINGBANK-BENCHMARK-RESULTS.md → integrations/reasoningbank/REASONINGBANK-BENCHMARK-RESULTS.md} +0 -0
  64. /package/docs/{REASONINGBANK-BENCHMARK.md → integrations/reasoningbank/REASONINGBANK-BENCHMARK.md} +0 -0
  65. /package/docs/{REASONINGBANK-CLI-INTEGRATION.md → integrations/reasoningbank/REASONINGBANK-CLI-INTEGRATION.md} +0 -0
  66. /package/docs/{REASONINGBANK-CORE-INTEGRATION.md → integrations/reasoningbank/REASONINGBANK-CORE-INTEGRATION.md} +0 -0
  67. /package/docs/{REASONINGBANK-COST-OPTIMIZATION.md → integrations/reasoningbank/REASONINGBANK-COST-OPTIMIZATION.md} +0 -0
  68. /package/docs/{REASONINGBANK-DEMO.md → integrations/reasoningbank/REASONINGBANK-DEMO.md} +0 -0
  69. /package/docs/{REASONINGBANK-INTEGRATION-COMPLETE.md → integrations/reasoningbank/REASONINGBANK-INTEGRATION-COMPLETE.md} +0 -0
  70. /package/docs/{REASONINGBANK-VALIDATION.md → integrations/reasoningbank/REASONINGBANK-VALIDATION.md} +0 -0
  71. /package/docs/{REASONINGBANK_ARCHITECTURE.md → integrations/reasoningbank/REASONINGBANK_ARCHITECTURE.md} +0 -0
  72. /package/docs/{REASONINGBANK_INTEGRATION_COMPLETE.md → integrations/reasoningbank/REASONINGBANK_INTEGRATION_COMPLETE.md} +0 -0
  73. /package/docs/{REASONINGBANK_INTEGRATION_PLAN.md → integrations/reasoningbank/REASONINGBANK_INTEGRATION_PLAN.md} +0 -0
  74. /package/docs/{DEEP_REVIEW_COMPREHENSIVE_REPORT.md → reports/analysis/DEEP_REVIEW_COMPREHENSIVE_REPORT.md} +0 -0
  75. /package/docs/{REGRESSION-ANALYSIS-REPORT.md → reports/analysis/REGRESSION-ANALYSIS-REPORT.md} +0 -0
  76. /package/docs/{COMMIT_SUMMARY.md → reports/releases/COMMIT_SUMMARY.md} +0 -0
  77. /package/docs/{INTEGRATION_COMPLETE.md → reports/releases/INTEGRATION_COMPLETE.md} +0 -0
  78. /package/docs/{PRE_RELEASE_FIXES_REPORT.md → reports/releases/PRE_RELEASE_FIXES_REPORT.md} +0 -0
  79. /package/docs/{RELEASE_v2.6.0-alpha.2.md → reports/releases/RELEASE_v2.6.0-alpha.2.md} +0 -0
  80. /package/docs/{COMMAND-VERIFICATION-REPORT.md → reports/validation/COMMAND-VERIFICATION-REPORT.md} +0 -0
  81. /package/docs/{DOCKER-VALIDATION-REPORT.md → reports/validation/DOCKER-VALIDATION-REPORT.md} +0 -0
  82. /package/docs/{FINAL_PRE_PUBLISH_VALIDATION.md → reports/validation/FINAL_PRE_PUBLISH_VALIDATION.md} +0 -0
  83. /package/docs/{FINAL_VALIDATION_REPORT.md → reports/validation/FINAL_VALIDATION_REPORT.md} +0 -0
  84. /package/docs/{ENV-SETUP-GUIDE.md → setup/ENV-SETUP-GUIDE.md} +0 -0
  85. /package/docs/{HOOKS-V2-MODIFICATION.md → technical/fixes/HOOKS-V2-MODIFICATION.md} +0 -0
  86. /package/docs/{PERFORMANCE-SYSTEMS-STATUS.md → technical/performance/PERFORMANCE-SYSTEMS-STATUS.md} +0 -0
@@ -0,0 +1,283 @@
1
+ import * as ReasoningBank from 'agentic-flow/reasoningbank';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ let backendInitialized = false;
4
+ let initPromise = null;
5
+ const queryCache = new Map();
6
+ const CACHE_SIZE = 100;
7
+ const CACHE_TTL = 60000;
8
+ async function ensureInitialized() {
9
+ if (backendInitialized) {
10
+ return true;
11
+ }
12
+ if (initPromise) {
13
+ return initPromise;
14
+ }
15
+ initPromise = (async ()=>{
16
+ try {
17
+ await ReasoningBank.initialize();
18
+ backendInitialized = true;
19
+ console.log('[ReasoningBank] Node.js backend initialized successfully');
20
+ return true;
21
+ } catch (error) {
22
+ console.error('[ReasoningBank] Backend initialization failed:', error);
23
+ throw new Error(`Failed to initialize ReasoningBank: ${error.message}`);
24
+ }
25
+ })();
26
+ return initPromise;
27
+ }
28
+ export async function initializeReasoningBank() {
29
+ await ensureInitialized();
30
+ return true;
31
+ }
32
+ export async function storeMemory(key, value, options = {}) {
33
+ await ensureInitialized();
34
+ try {
35
+ const memoryId = options.id || uuidv4();
36
+ const memory = {
37
+ id: memoryId,
38
+ type: 'reasoning_memory',
39
+ pattern_data: {
40
+ title: key,
41
+ content: value,
42
+ domain: options.namespace || 'default',
43
+ agent: options.agent || 'memory-agent',
44
+ task_type: options.type || 'fact',
45
+ original_key: key,
46
+ original_value: value,
47
+ namespace: options.namespace || 'default'
48
+ },
49
+ confidence: options.confidence || 0.8,
50
+ usage_count: 0
51
+ };
52
+ ReasoningBank.db.upsertMemory(memory);
53
+ try {
54
+ const embedding = await ReasoningBank.computeEmbedding(value);
55
+ ReasoningBank.db.upsertEmbedding({
56
+ id: memoryId,
57
+ model: 'text-embedding-3-small',
58
+ dims: embedding.length,
59
+ vector: embedding
60
+ });
61
+ } catch (embeddingError) {
62
+ console.warn('[ReasoningBank] Failed to generate embedding:', embeddingError.message);
63
+ }
64
+ queryCache.clear();
65
+ return memoryId;
66
+ } catch (error) {
67
+ console.error('[ReasoningBank] storeMemory failed:', error);
68
+ throw new Error(`Failed to store memory: ${error.message}`);
69
+ }
70
+ }
71
+ export async function queryMemories(searchQuery, options = {}) {
72
+ const cached = getCachedQuery(searchQuery, options);
73
+ if (cached) {
74
+ return cached;
75
+ }
76
+ await ensureInitialized();
77
+ const limit = options.limit || 10;
78
+ const namespace = options.namespace || options.domain || 'default';
79
+ try {
80
+ const results = await ReasoningBank.retrieveMemories(searchQuery, {
81
+ domain: namespace,
82
+ agent: options.agent || 'query-agent',
83
+ k: limit,
84
+ minConfidence: options.minConfidence || 0.3
85
+ });
86
+ const memories = results.map((memory)=>({
87
+ id: memory.id,
88
+ key: memory.title || 'unknown',
89
+ value: memory.content || memory.description || '',
90
+ namespace: namespace,
91
+ confidence: memory.components?.reliability || 0.8,
92
+ usage_count: memory.usage_count || 0,
93
+ created_at: memory.created_at || new Date().toISOString(),
94
+ score: memory.score || 0,
95
+ _pattern: memory
96
+ }));
97
+ if (memories.length === 0) {
98
+ console.warn('[ReasoningBank] Semantic search returned 0 results, trying database fallback');
99
+ const fallbackResults = ReasoningBank.db.fetchMemoryCandidates({
100
+ domain: namespace,
101
+ minConfidence: options.minConfidence || 0.3
102
+ });
103
+ const fallbackMemories = fallbackResults.slice(0, limit).map((memory)=>({
104
+ id: memory.id,
105
+ key: memory.pattern_data?.title || memory.pattern_data?.original_key || 'unknown',
106
+ value: memory.pattern_data?.content || memory.pattern_data?.original_value || '',
107
+ namespace: memory.pattern_data?.domain || memory.pattern_data?.namespace || 'default',
108
+ confidence: memory.confidence || 0.8,
109
+ usage_count: memory.usage_count || 0,
110
+ created_at: memory.created_at || new Date().toISOString()
111
+ }));
112
+ setCachedQuery(searchQuery, options, fallbackMemories);
113
+ return fallbackMemories;
114
+ }
115
+ setCachedQuery(searchQuery, options, memories);
116
+ return memories;
117
+ } catch (error) {
118
+ console.warn('[ReasoningBank] Query failed, trying database fallback:', error.message);
119
+ try {
120
+ const fallbackResults = ReasoningBank.db.fetchMemoryCandidates({
121
+ domain: namespace,
122
+ minConfidence: options.minConfidence || 0.3
123
+ });
124
+ const fallbackMemories = fallbackResults.slice(0, limit).map((memory)=>({
125
+ id: memory.id,
126
+ key: memory.pattern_data?.title || 'unknown',
127
+ value: memory.pattern_data?.content || '',
128
+ namespace: memory.pattern_data?.domain || 'default',
129
+ confidence: memory.confidence || 0.8,
130
+ usage_count: memory.usage_count || 0,
131
+ created_at: memory.created_at || new Date().toISOString()
132
+ }));
133
+ setCachedQuery(searchQuery, options, fallbackMemories);
134
+ return fallbackMemories;
135
+ } catch (fallbackError) {
136
+ console.error('[ReasoningBank] All query methods failed:', fallbackError);
137
+ return [];
138
+ }
139
+ }
140
+ }
141
+ export async function listMemories(options = {}) {
142
+ await ensureInitialized();
143
+ const limit = options.limit || 10;
144
+ const namespace = options.namespace;
145
+ try {
146
+ let memories;
147
+ if (namespace && namespace !== 'default') {
148
+ const allMemories = ReasoningBank.db.getAllActiveMemories();
149
+ memories = allMemories.filter((m)=>m.pattern_data?.domain === namespace).slice(0, limit);
150
+ } else {
151
+ memories = ReasoningBank.db.getAllActiveMemories().slice(0, limit);
152
+ }
153
+ return memories.map((memory)=>({
154
+ id: memory.id,
155
+ key: memory.pattern_data?.title || memory.pattern_data?.original_key || 'unknown',
156
+ value: memory.pattern_data?.content || memory.pattern_data?.original_value || '',
157
+ namespace: memory.pattern_data?.domain || memory.pattern_data?.namespace || 'default',
158
+ confidence: memory.confidence || 0.8,
159
+ usage_count: memory.usage_count || 0,
160
+ created_at: memory.created_at || new Date().toISOString()
161
+ }));
162
+ } catch (error) {
163
+ console.error('[ReasoningBank] listMemories failed:', error);
164
+ return [];
165
+ }
166
+ }
167
+ export async function getStatus() {
168
+ await ensureInitialized();
169
+ try {
170
+ const db = ReasoningBank.db.getDb();
171
+ const patterns = db.prepare("SELECT COUNT(*) as count FROM patterns WHERE type = 'reasoning_memory'").get();
172
+ const embeddings = db.prepare("SELECT COUNT(*) as count FROM pattern_embeddings").get();
173
+ const trajectories = db.prepare("SELECT COUNT(*) as count FROM task_trajectories").get();
174
+ const links = db.prepare("SELECT COUNT(*) as count FROM pattern_links").get();
175
+ const avgConf = db.prepare("SELECT AVG(confidence) as avg FROM patterns WHERE type = 'reasoning_memory'").get();
176
+ const domains = db.prepare("SELECT COUNT(DISTINCT json_extract(pattern_data, '$.domain')) as count FROM patterns WHERE type = 'reasoning_memory'").get();
177
+ return {
178
+ total_memories: patterns.count || 0,
179
+ total_categories: domains.count || 0,
180
+ storage_backend: 'SQLite (Node.js)',
181
+ database_path: process.env.CLAUDE_FLOW_DB_PATH || '.swarm/memory.db',
182
+ performance: 'SQLite with persistent storage',
183
+ avg_confidence: avgConf.avg || 0.8,
184
+ total_embeddings: embeddings.count || 0,
185
+ total_trajectories: trajectories.count || 0,
186
+ total_links: links.count || 0
187
+ };
188
+ } catch (error) {
189
+ console.error('[ReasoningBank] getStatus failed:', error);
190
+ return {
191
+ total_memories: 0,
192
+ error: error.message
193
+ };
194
+ }
195
+ }
196
+ export async function checkReasoningBankTables() {
197
+ try {
198
+ await ensureInitialized();
199
+ const db = ReasoningBank.db.getDb();
200
+ const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'pattern%'").all();
201
+ const tableNames = tables.map((t)=>t.name);
202
+ const requiredTables = [
203
+ 'patterns',
204
+ 'pattern_embeddings',
205
+ 'pattern_links',
206
+ 'task_trajectories'
207
+ ];
208
+ const missingTables = requiredTables.filter((t)=>!tableNames.includes(t));
209
+ return {
210
+ exists: true,
211
+ existingTables: tableNames,
212
+ missingTables: missingTables,
213
+ requiredTables: requiredTables,
214
+ backend: 'SQLite (Node.js)',
215
+ note: missingTables.length > 0 ? 'Some tables are missing - run migrations' : 'All tables present'
216
+ };
217
+ } catch (error) {
218
+ return {
219
+ exists: false,
220
+ existingTables: [],
221
+ missingTables: [],
222
+ requiredTables: [],
223
+ error: error.message
224
+ };
225
+ }
226
+ }
227
+ export async function migrateReasoningBank() {
228
+ try {
229
+ await ReasoningBank.db.runMigrations();
230
+ return {
231
+ success: true,
232
+ message: 'Database migrations completed successfully',
233
+ migrated: true,
234
+ database_path: process.env.CLAUDE_FLOW_DB_PATH || '.swarm/memory.db'
235
+ };
236
+ } catch (error) {
237
+ return {
238
+ success: false,
239
+ message: `Migration failed: ${error.message}`,
240
+ error: error.message
241
+ };
242
+ }
243
+ }
244
+ function getCachedQuery(searchQuery, options) {
245
+ const cacheKey = JSON.stringify({
246
+ searchQuery,
247
+ options
248
+ });
249
+ const cached = queryCache.get(cacheKey);
250
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
251
+ return cached.results;
252
+ }
253
+ return null;
254
+ }
255
+ function setCachedQuery(searchQuery, options, results) {
256
+ const cacheKey = JSON.stringify({
257
+ searchQuery,
258
+ options
259
+ });
260
+ if (queryCache.size >= CACHE_SIZE) {
261
+ const firstKey = queryCache.keys().next().value;
262
+ queryCache.delete(firstKey);
263
+ }
264
+ queryCache.set(cacheKey, {
265
+ results,
266
+ timestamp: Date.now()
267
+ });
268
+ }
269
+ export function cleanup() {
270
+ try {
271
+ if (backendInitialized) {
272
+ ReasoningBank.clearEmbeddingCache();
273
+ ReasoningBank.db.closeDb();
274
+ backendInitialized = false;
275
+ initPromise = null;
276
+ console.log('[ReasoningBank] Database connection closed');
277
+ }
278
+ } catch (error) {
279
+ console.error('[ReasoningBank] Cleanup failed:', error.message);
280
+ }
281
+ }
282
+
283
+ //# sourceMappingURL=reasoningbank-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/reasoningbank/reasoningbank-adapter.js"],"sourcesContent":["/**\n * ReasoningBank Adapter for Claude-Flow (Node.js Backend)\n *\n * Uses agentic-flow@1.5.13 Node.js backend with SQLite for persistent storage\n * Provides semantic search via embeddings and MMR ranking\n *\n * Backend: SQLite with better-sqlite3\n * Features: Persistent storage, semantic search, memory consolidation\n */\n\nimport * as ReasoningBank from 'agentic-flow/reasoningbank';\nimport { v4 as uuidv4 } from 'uuid';\n\n// Backend instance (singleton)\nlet backendInitialized = false;\nlet initPromise = null;\n\n// Query result cache (LRU)\nconst queryCache = new Map();\nconst CACHE_SIZE = 100;\nconst CACHE_TTL = 60000; // 60 seconds\n\n/**\n * Initialize ReasoningBank Node.js backend\n * @returns {Promise<boolean>}\n */\nasync function ensureInitialized() {\n if (backendInitialized) {\n return true;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = (async () => {\n try {\n // Initialize Node.js backend with SQLite database\n await ReasoningBank.initialize();\n backendInitialized = true;\n console.log('[ReasoningBank] Node.js backend initialized successfully');\n return true;\n } catch (error) {\n console.error('[ReasoningBank] Backend initialization failed:', error);\n throw new Error(`Failed to initialize ReasoningBank: ${error.message}`);\n }\n })();\n\n return initPromise;\n}\n\n/**\n * Initialize ReasoningBank database (Node.js version)\n */\nexport async function initializeReasoningBank() {\n // Initialize the Node.js backend\n await ensureInitialized();\n return true;\n}\n\n/**\n * Store a memory in ReasoningBank (Node.js backend with SQLite)\n *\n * Maps claude-flow memory model to ReasoningBank pattern model:\n * - key -> title\n * - value -> content (searchable text)\n * - namespace -> domain\n * - confidence -> confidence score\n */\nexport async function storeMemory(key, value, options = {}) {\n await ensureInitialized();\n\n try {\n const memoryId = options.id || uuidv4();\n\n // Map our memory model to ReasoningBank pattern model\n const memory = {\n id: memoryId,\n type: 'reasoning_memory',\n pattern_data: {\n title: key,\n content: value,\n domain: options.namespace || 'default',\n agent: options.agent || 'memory-agent',\n task_type: options.type || 'fact',\n // Store original values for compatibility\n original_key: key,\n original_value: value,\n namespace: options.namespace || 'default'\n },\n confidence: options.confidence || 0.8,\n usage_count: 0\n };\n\n // Store memory using Node.js backend\n ReasoningBank.db.upsertMemory(memory);\n\n // Generate and store embedding for semantic search\n try {\n const embedding = await ReasoningBank.computeEmbedding(value);\n ReasoningBank.db.upsertEmbedding({\n id: memoryId,\n model: 'text-embedding-3-small', // Default model\n dims: embedding.length,\n vector: embedding\n });\n } catch (embeddingError) {\n console.warn('[ReasoningBank] Failed to generate embedding:', embeddingError.message);\n // Continue without embedding - memory is still stored\n }\n\n // Invalidate query cache when new memory is added\n queryCache.clear();\n\n return memoryId;\n } catch (error) {\n console.error('[ReasoningBank] storeMemory failed:', error);\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n}\n\n/**\n * Query memories from ReasoningBank (Node.js backend with semantic search)\n *\n * Uses retrieveMemories for semantic search via embeddings and MMR ranking\n * Fallback to database query if semantic search fails\n */\nexport async function queryMemories(searchQuery, options = {}) {\n // Check cache first\n const cached = getCachedQuery(searchQuery, options);\n if (cached) {\n return cached;\n }\n\n await ensureInitialized();\n const limit = options.limit || 10;\n // Accept both 'namespace' and 'domain' for compatibility\n const namespace = options.namespace || options.domain || 'default';\n\n try {\n // Try semantic search first using retrieveMemories\n const results = await ReasoningBank.retrieveMemories(searchQuery, {\n domain: namespace,\n agent: options.agent || 'query-agent',\n k: limit,\n minConfidence: options.minConfidence || 0.3\n });\n\n // Map backend results to our memory format\n // retrieveMemories returns: { id, title, content, description, score, components }\n const memories = results.map(memory => ({\n id: memory.id,\n key: memory.title || 'unknown',\n value: memory.content || memory.description || '',\n namespace: namespace, // Use the namespace from our query\n confidence: memory.components?.reliability || 0.8,\n usage_count: memory.usage_count || 0,\n created_at: memory.created_at || new Date().toISOString(),\n score: memory.score || 0,\n // Include original pattern for debugging\n _pattern: memory\n }));\n\n // If no results, try direct database query as fallback\n if (memories.length === 0) {\n console.warn('[ReasoningBank] Semantic search returned 0 results, trying database fallback');\n const fallbackResults = ReasoningBank.db.fetchMemoryCandidates({\n domain: namespace,\n minConfidence: options.minConfidence || 0.3\n });\n\n const fallbackMemories = fallbackResults.slice(0, limit).map(memory => ({\n id: memory.id,\n key: memory.pattern_data?.title || memory.pattern_data?.original_key || 'unknown',\n value: memory.pattern_data?.content || memory.pattern_data?.original_value || '',\n namespace: memory.pattern_data?.domain || memory.pattern_data?.namespace || 'default',\n confidence: memory.confidence || 0.8,\n usage_count: memory.usage_count || 0,\n created_at: memory.created_at || new Date().toISOString()\n }));\n\n // Cache and return fallback results\n setCachedQuery(searchQuery, options, fallbackMemories);\n return fallbackMemories;\n }\n\n // Cache successful results\n setCachedQuery(searchQuery, options, memories);\n return memories;\n } catch (error) {\n console.warn('[ReasoningBank] Query failed, trying database fallback:', error.message);\n\n try {\n // Final fallback: direct database query\n const fallbackResults = ReasoningBank.db.fetchMemoryCandidates({\n domain: namespace,\n minConfidence: options.minConfidence || 0.3\n });\n\n const fallbackMemories = fallbackResults.slice(0, limit).map(memory => ({\n id: memory.id,\n key: memory.pattern_data?.title || 'unknown',\n value: memory.pattern_data?.content || '',\n namespace: memory.pattern_data?.domain || 'default',\n confidence: memory.confidence || 0.8,\n usage_count: memory.usage_count || 0,\n created_at: memory.created_at || new Date().toISOString()\n }));\n\n setCachedQuery(searchQuery, options, fallbackMemories);\n return fallbackMemories;\n } catch (fallbackError) {\n console.error('[ReasoningBank] All query methods failed:', fallbackError);\n return [];\n }\n }\n}\n\n/**\n * List all memories (using Node.js backend database query)\n */\nexport async function listMemories(options = {}) {\n await ensureInitialized();\n const limit = options.limit || 10;\n const namespace = options.namespace;\n\n try {\n let memories;\n\n if (namespace && namespace !== 'default') {\n // Filter by namespace/domain\n const allMemories = ReasoningBank.db.getAllActiveMemories();\n memories = allMemories\n .filter(m => m.pattern_data?.domain === namespace)\n .slice(0, limit);\n } else {\n // Get all active memories\n memories = ReasoningBank.db.getAllActiveMemories().slice(0, limit);\n }\n\n return memories.map(memory => ({\n id: memory.id,\n key: memory.pattern_data?.title || memory.pattern_data?.original_key || 'unknown',\n value: memory.pattern_data?.content || memory.pattern_data?.original_value || '',\n namespace: memory.pattern_data?.domain || memory.pattern_data?.namespace || 'default',\n confidence: memory.confidence || 0.8,\n usage_count: memory.usage_count || 0,\n created_at: memory.created_at || new Date().toISOString()\n }));\n } catch (error) {\n console.error('[ReasoningBank] listMemories failed:', error);\n return [];\n }\n}\n\n/**\n * Get ReasoningBank statistics (Node.js backend)\n */\nexport async function getStatus() {\n await ensureInitialized();\n\n try {\n const db = ReasoningBank.db.getDb();\n\n // Count patterns\n const patterns = db.prepare(\"SELECT COUNT(*) as count FROM patterns WHERE type = 'reasoning_memory'\").get();\n const embeddings = db.prepare(\"SELECT COUNT(*) as count FROM pattern_embeddings\").get();\n const trajectories = db.prepare(\"SELECT COUNT(*) as count FROM task_trajectories\").get();\n const links = db.prepare(\"SELECT COUNT(*) as count FROM pattern_links\").get();\n\n // Get average confidence\n const avgConf = db.prepare(\"SELECT AVG(confidence) as avg FROM patterns WHERE type = 'reasoning_memory'\").get();\n\n // Count unique domains\n const domains = db.prepare(\"SELECT COUNT(DISTINCT json_extract(pattern_data, '$.domain')) as count FROM patterns WHERE type = 'reasoning_memory'\").get();\n\n return {\n total_memories: patterns.count || 0,\n total_categories: domains.count || 0,\n storage_backend: 'SQLite (Node.js)',\n database_path: process.env.CLAUDE_FLOW_DB_PATH || '.swarm/memory.db',\n performance: 'SQLite with persistent storage',\n avg_confidence: avgConf.avg || 0.8,\n total_embeddings: embeddings.count || 0,\n total_trajectories: trajectories.count || 0,\n total_links: links.count || 0\n };\n } catch (error) {\n console.error('[ReasoningBank] getStatus failed:', error);\n return {\n total_memories: 0,\n error: error.message\n };\n }\n}\n\n/**\n * Check which ReasoningBank tables are present (Node.js backend)\n */\nexport async function checkReasoningBankTables() {\n try {\n await ensureInitialized();\n const db = ReasoningBank.db.getDb();\n\n const tables = db.prepare(\"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE 'pattern%'\").all();\n const tableNames = tables.map(t => t.name);\n\n const requiredTables = ['patterns', 'pattern_embeddings', 'pattern_links', 'task_trajectories'];\n const missingTables = requiredTables.filter(t => !tableNames.includes(t));\n\n return {\n exists: true,\n existingTables: tableNames,\n missingTables: missingTables,\n requiredTables: requiredTables,\n backend: 'SQLite (Node.js)',\n note: missingTables.length > 0 ? 'Some tables are missing - run migrations' : 'All tables present'\n };\n } catch (error) {\n return {\n exists: false,\n existingTables: [],\n missingTables: [],\n requiredTables: [],\n error: error.message\n };\n }\n}\n\n/**\n * Migrate existing database (Node.js backend - run migrations)\n */\nexport async function migrateReasoningBank() {\n try {\n await ReasoningBank.db.runMigrations();\n\n return {\n success: true,\n message: 'Database migrations completed successfully',\n migrated: true,\n database_path: process.env.CLAUDE_FLOW_DB_PATH || '.swarm/memory.db'\n };\n } catch (error) {\n return {\n success: false,\n message: `Migration failed: ${error.message}`,\n error: error.message\n };\n }\n}\n\n/**\n * Get cached query results\n */\nfunction getCachedQuery(searchQuery, options) {\n const cacheKey = JSON.stringify({ searchQuery, options });\n const cached = queryCache.get(cacheKey);\n\n if (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n return cached.results;\n }\n\n return null;\n}\n\n/**\n * Set cached query results (LRU eviction)\n */\nfunction setCachedQuery(searchQuery, options, results) {\n const cacheKey = JSON.stringify({ searchQuery, options });\n\n // LRU eviction\n if (queryCache.size >= CACHE_SIZE) {\n const firstKey = queryCache.keys().next().value;\n queryCache.delete(firstKey);\n }\n\n queryCache.set(cacheKey, {\n results,\n timestamp: Date.now()\n });\n}\n\n/**\n * Close database connection and cleanup resources\n * Should be called when done with ReasoningBank operations\n */\nexport function cleanup() {\n try {\n if (backendInitialized) {\n // Clear embedding cache (prevents memory leaks)\n ReasoningBank.clearEmbeddingCache();\n\n // Close database connection\n ReasoningBank.db.closeDb();\n backendInitialized = false;\n initPromise = null;\n console.log('[ReasoningBank] Database connection closed');\n }\n } catch (error) {\n console.error('[ReasoningBank] Cleanup failed:', error.message);\n }\n}\n"],"names":["ReasoningBank","v4","uuidv4","backendInitialized","initPromise","queryCache","Map","CACHE_SIZE","CACHE_TTL","ensureInitialized","initialize","console","log","error","Error","message","initializeReasoningBank","storeMemory","key","value","options","memoryId","id","memory","type","pattern_data","title","content","domain","namespace","agent","task_type","original_key","original_value","confidence","usage_count","db","upsertMemory","embedding","computeEmbedding","upsertEmbedding","model","dims","length","vector","embeddingError","warn","clear","queryMemories","searchQuery","cached","getCachedQuery","limit","results","retrieveMemories","k","minConfidence","memories","map","description","components","reliability","created_at","Date","toISOString","score","_pattern","fallbackResults","fetchMemoryCandidates","fallbackMemories","slice","setCachedQuery","fallbackError","listMemories","allMemories","getAllActiveMemories","filter","m","getStatus","getDb","patterns","prepare","get","embeddings","trajectories","links","avgConf","domains","total_memories","count","total_categories","storage_backend","database_path","process","env","CLAUDE_FLOW_DB_PATH","performance","avg_confidence","avg","total_embeddings","total_trajectories","total_links","checkReasoningBankTables","tables","all","tableNames","t","name","requiredTables","missingTables","includes","exists","existingTables","backend","note","migrateReasoningBank","runMigrations","success","migrated","cacheKey","JSON","stringify","now","timestamp","size","firstKey","keys","next","delete","set","cleanup","clearEmbeddingCache","closeDb"],"mappings":"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"}
@@ -166,14 +166,4 @@ export class MetricsReader {
166
166
  }
167
167
  }
168
168
 
169
- //# sourceMappingURL=metrics-reader.js.map processCount: 0,
170
- orchestratorRunning: false,
171
- port: null,
172
- connections: 0
173
- };
174
- }
175
- }
176
- };
177
- export { MetricsReader };
178
-
179
169
  //# sourceMappingURL=metrics-reader.js.map
@@ -0,0 +1,87 @@
1
+ {
2
+ "startTime": 1760388535754,
3
+ "sessionId": "session-1760388535754",
4
+ "lastActivity": 1760388535754,
5
+ "sessionDuration": 0,
6
+ "totalTasks": 1,
7
+ "successfulTasks": 1,
8
+ "failedTasks": 0,
9
+ "totalAgents": 0,
10
+ "activeAgents": 0,
11
+ "neuralEvents": 0,
12
+ "memoryMode": {
13
+ "reasoningbankOperations": 0,
14
+ "basicOperations": 0,
15
+ "autoModeSelections": 0,
16
+ "modeOverrides": 0,
17
+ "currentMode": "auto"
18
+ },
19
+ "operations": {
20
+ "store": {
21
+ "count": 0,
22
+ "totalDuration": 0,
23
+ "errors": 0
24
+ },
25
+ "retrieve": {
26
+ "count": 0,
27
+ "totalDuration": 0,
28
+ "errors": 0
29
+ },
30
+ "query": {
31
+ "count": 0,
32
+ "totalDuration": 0,
33
+ "errors": 0
34
+ },
35
+ "list": {
36
+ "count": 0,
37
+ "totalDuration": 0,
38
+ "errors": 0
39
+ },
40
+ "delete": {
41
+ "count": 0,
42
+ "totalDuration": 0,
43
+ "errors": 0
44
+ },
45
+ "search": {
46
+ "count": 0,
47
+ "totalDuration": 0,
48
+ "errors": 0
49
+ },
50
+ "init": {
51
+ "count": 0,
52
+ "totalDuration": 0,
53
+ "errors": 0
54
+ }
55
+ },
56
+ "performance": {
57
+ "avgOperationDuration": 0,
58
+ "minOperationDuration": null,
59
+ "maxOperationDuration": null,
60
+ "slowOperations": 0,
61
+ "fastOperations": 0,
62
+ "totalOperationTime": 0
63
+ },
64
+ "storage": {
65
+ "totalEntries": 0,
66
+ "reasoningbankEntries": 0,
67
+ "basicEntries": 0,
68
+ "databaseSize": 0,
69
+ "lastBackup": null,
70
+ "growthRate": 0
71
+ },
72
+ "errors": {
73
+ "total": 0,
74
+ "byType": {},
75
+ "byOperation": {},
76
+ "recent": []
77
+ },
78
+ "reasoningbank": {
79
+ "semanticSearches": 0,
80
+ "sqlFallbacks": 0,
81
+ "embeddingGenerated": 0,
82
+ "consolidations": 0,
83
+ "avgQueryTime": 0,
84
+ "cacheHits": 0,
85
+ "cacheMisses": 0
86
+ }
87
+ }
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "id": "cmd-hooks-1760388535858",
4
+ "type": "hooks",
5
+ "success": true,
6
+ "duration": 8.673302000000035,
7
+ "timestamp": 1760388535866,
8
+ "metadata": {}
9
+ }
10
+ ]
@@ -0,0 +1,21 @@
1
+ FROM node:20-slim
2
+
3
+ # Install dependencies
4
+ RUN apt-get update && apt-get install -y \
5
+ python3 \
6
+ make \
7
+ g++ \
8
+ sqlite3 \
9
+ && rm -rf /var/lib/apt/lists/*
10
+
11
+ # Set working directory
12
+ WORKDIR /test
13
+
14
+ # Install claude-flow@alpha from npm
15
+ RUN npm install -g claude-flow@alpha
16
+
17
+ # Create test script
18
+ COPY reasoningbank-validation.mjs /test/
19
+
20
+ # Run test
21
+ CMD ["node", "/test/reasoningbank-validation.mjs"]
@@ -0,0 +1,201 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Docker Validation Test for ReasoningBank Semantic Search
4
+ * Tests claude-flow@alpha with agentic-flow@1.5.13 Node.js backend
5
+ */
6
+
7
+ import { exec } from 'child_process';
8
+ import { promisify } from 'util';
9
+ import { existsSync } from 'fs';
10
+
11
+ const execAsync = promisify(exec);
12
+
13
+ async function validateReasoningBank() {
14
+ console.log('🐳 Docker Validation: ReasoningBank Semantic Search');
15
+ console.log('📦 Testing: claude-flow@alpha (from npm)\n');
16
+
17
+ const results = {
18
+ passed: [],
19
+ failed: [],
20
+ warnings: []
21
+ };
22
+
23
+ try {
24
+ // Test 1: Verify installation
25
+ console.log('1️⃣ Verifying installation...');
26
+ try {
27
+ const { stdout: version } = await execAsync('npx claude-flow@alpha --version');
28
+ console.log(` ✅ Version: ${version.trim()}`);
29
+ results.passed.push('Installation verified');
30
+ } catch (error) {
31
+ console.error(` ❌ Installation failed: ${error.message}`);
32
+ results.failed.push('Installation');
33
+ throw error;
34
+ }
35
+
36
+ // Test 2: Initialize ReasoningBank memory (explicit mode)
37
+ console.log('\n2️⃣ Initializing ReasoningBank memory...');
38
+ try {
39
+ const { stdout } = await execAsync('npx claude-flow@alpha memory init --reasoningbank');
40
+ console.log(` ${stdout.trim()}`);
41
+ results.passed.push('ReasoningBank initialization');
42
+ } catch (error) {
43
+ console.error(` ❌ Init failed: ${error.message}`);
44
+ results.failed.push('ReasoningBank initialization');
45
+ }
46
+
47
+ // Test 3: Store test memories (with ReasoningBank mode)
48
+ console.log('\n3️⃣ Storing test memories to ReasoningBank...');
49
+ const testMemories = [
50
+ { key: 'docker-auth', value: 'Implement JWT authentication with Docker secrets', namespace: 'security' },
51
+ { key: 'docker-api', value: 'Create containerized REST API with health checks', namespace: 'backend' },
52
+ { key: 'docker-db', value: 'Setup PostgreSQL database container with volumes', namespace: 'backend' }
53
+ ];
54
+
55
+ for (const mem of testMemories) {
56
+ try {
57
+ await execAsync(`npx claude-flow@alpha memory store "${mem.key}" "${mem.value}" --namespace ${mem.namespace} --reasoningbank`);
58
+ console.log(` ✅ Stored: ${mem.key}`);
59
+ } catch (error) {
60
+ console.error(` ❌ Failed to store ${mem.key}: ${error.message}`);
61
+ results.failed.push(`Store memory: ${mem.key}`);
62
+ }
63
+ }
64
+ results.passed.push('Memory storage with ReasoningBank (3 entries)');
65
+
66
+ // Test 4: Verify database exists
67
+ console.log('\n4️⃣ Verifying database creation...');
68
+ const dbPath = '.swarm/memory.db';
69
+ if (existsSync(dbPath)) {
70
+ console.log(` ✅ Database created: ${dbPath}`);
71
+ results.passed.push('Database persistence');
72
+ } else {
73
+ console.error(` ❌ Database not found: ${dbPath}`);
74
+ results.failed.push('Database persistence');
75
+ }
76
+
77
+ // Test 5: Query memories (semantic search with ReasoningBank)
78
+ console.log('\n5️⃣ Testing ReasoningBank semantic search...');
79
+ try {
80
+ const { stdout } = await execAsync('npx claude-flow@alpha memory query "authentication" --namespace security --limit 5 --reasoningbank');
81
+ if (stdout.includes('No results found')) {
82
+ console.warn(' ⚠️ No results from semantic search (embeddings may need API key)');
83
+ results.warnings.push('Semantic search returned no results');
84
+ } else {
85
+ console.log(' ✅ ReasoningBank semantic search working');
86
+ results.passed.push('ReasoningBank semantic search');
87
+ }
88
+ } catch (error) {
89
+ console.error(` ❌ Query failed: ${error.message}`);
90
+ results.failed.push('ReasoningBank semantic search');
91
+ }
92
+
93
+ // Test 6: List memories (ReasoningBank mode)
94
+ console.log('\n6️⃣ Listing ReasoningBank memories...');
95
+ try {
96
+ const { stdout } = await execAsync('npx claude-flow@alpha memory list --limit 10 --reasoningbank');
97
+ console.log(stdout.trim());
98
+ if (stdout.includes('security') || stdout.includes('backend')) {
99
+ console.log(' ✅ ReasoningBank memory listing working');
100
+ results.passed.push('ReasoningBank memory listing');
101
+ } else {
102
+ console.warn(' ⚠️ Unexpected list output');
103
+ results.warnings.push('ReasoningBank listing format');
104
+ }
105
+ } catch (error) {
106
+ console.error(` ❌ List failed: ${error.message}`);
107
+ results.failed.push('ReasoningBank memory listing');
108
+ }
109
+
110
+ // Test 7: ReasoningBank status
111
+ console.log('\n7️⃣ Checking ReasoningBank status...');
112
+ try {
113
+ const { stdout } = await execAsync('npx claude-flow@alpha memory status --reasoningbank');
114
+ console.log(stdout.trim());
115
+ if (stdout.includes('SQLite') || stdout.includes('memory.db') || stdout.includes('ReasoningBank')) {
116
+ console.log(' ✅ Status reporting ReasoningBank Node.js backend');
117
+ results.passed.push('ReasoningBank status (Node.js backend)');
118
+ } else {
119
+ console.warn(' ⚠️ Backend type unclear in status');
120
+ results.warnings.push('ReasoningBank backend detection');
121
+ }
122
+ } catch (error) {
123
+ console.error(` ❌ Status failed: ${error.message}`);
124
+ results.failed.push('ReasoningBank status');
125
+ }
126
+
127
+ // Test 8: Database inspection
128
+ console.log('\n8️⃣ Inspecting database structure...');
129
+ try {
130
+ const { stdout } = await execAsync('sqlite3 .swarm/memory.db "SELECT name FROM sqlite_master WHERE type=\'table\' ORDER BY name;"');
131
+ const tables = stdout.trim().split('\n');
132
+ console.log(` ✅ Found ${tables.length} tables: ${tables.join(', ')}`);
133
+
134
+ if (tables.includes('patterns') && tables.includes('pattern_embeddings')) {
135
+ console.log(' ✅ Required tables present');
136
+ results.passed.push('Database schema');
137
+ } else {
138
+ console.error(' ❌ Missing required tables');
139
+ results.failed.push('Database schema');
140
+ }
141
+ } catch (error) {
142
+ console.error(` ❌ Database inspection failed: ${error.message}`);
143
+ results.failed.push('Database inspection');
144
+ }
145
+
146
+ // Test 9: Count stored patterns
147
+ console.log('\n9️⃣ Counting stored patterns...');
148
+ try {
149
+ const { stdout } = await execAsync('sqlite3 .swarm/memory.db "SELECT COUNT(*) FROM patterns WHERE type=\'reasoning_memory\';"');
150
+ const count = parseInt(stdout.trim());
151
+ console.log(` ✅ Total patterns: ${count}`);
152
+ if (count >= 3) {
153
+ results.passed.push(`Pattern storage (${count} entries)`);
154
+ } else {
155
+ console.warn(` ⚠️ Expected 3+ patterns, found ${count}`);
156
+ results.warnings.push('Pattern count lower than expected');
157
+ }
158
+ } catch (error) {
159
+ console.error(` ❌ Count failed: ${error.message}`);
160
+ results.failed.push('Pattern counting');
161
+ }
162
+
163
+ } catch (error) {
164
+ console.error('\n❌ Fatal error during validation:', error.message);
165
+ }
166
+
167
+ // Print summary
168
+ console.log('\n' + '='.repeat(60));
169
+ console.log('📊 VALIDATION SUMMARY');
170
+ console.log('='.repeat(60));
171
+
172
+ console.log(`\n✅ Passed (${results.passed.length}):`);
173
+ results.passed.forEach(test => console.log(` • ${test}`));
174
+
175
+ if (results.warnings.length > 0) {
176
+ console.log(`\n⚠️ Warnings (${results.warnings.length}):`);
177
+ results.warnings.forEach(test => console.log(` • ${test}`));
178
+ }
179
+
180
+ if (results.failed.length > 0) {
181
+ console.log(`\n❌ Failed (${results.failed.length}):`);
182
+ results.failed.forEach(test => console.log(` • ${test}`));
183
+ }
184
+
185
+ const successRate = (results.passed.length / (results.passed.length + results.failed.length) * 100).toFixed(1);
186
+ console.log(`\n📈 Success Rate: ${successRate}%`);
187
+
188
+ if (results.failed.length === 0) {
189
+ console.log('\n✅ ALL TESTS PASSED! ReasoningBank semantic search is working!');
190
+ process.exit(0);
191
+ } else {
192
+ console.log('\n❌ SOME TESTS FAILED - Review errors above');
193
+ process.exit(1);
194
+ }
195
+ }
196
+
197
+ // Run validation
198
+ validateReasoningBank().catch(err => {
199
+ console.error('💥 Validation failed:', err);
200
+ process.exit(1);
201
+ });