claude-flow 2.7.0-alpha.1 → 2.7.0-alpha.4

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.
@@ -328,12 +328,39 @@ async function isReasoningBankInitialized() {
328
328
  }
329
329
  async function handleReasoningBankCommand(command, subArgs, flags) {
330
330
  const initialized = await isReasoningBankInitialized();
331
- const { initializeReasoningBank, storeMemory, queryMemories, listMemories, getStatus } = await import('../../reasoningbank/reasoningbank-adapter.js');
331
+ const { initializeReasoningBank, storeMemory, queryMemories, listMemories, getStatus, checkReasoningBankTables, migrateReasoningBank } = await import('../../reasoningbank/reasoningbank-adapter.js');
332
332
  if (command === 'init') {
333
+ const dbPath = '.swarm/memory.db';
333
334
  if (initialized) {
334
- printWarning('⚠️ ReasoningBank already initialized');
335
- console.log('Database: .swarm/memory.db');
336
- console.log('\nTo reinitialize, delete .swarm/memory.db first');
335
+ printInfo('🔍 Checking existing database for ReasoningBank schema...\n');
336
+ try {
337
+ process.env.CLAUDE_FLOW_DB_PATH = dbPath;
338
+ const tableCheck = await checkReasoningBankTables();
339
+ if (tableCheck.exists) {
340
+ printSuccess('✅ ReasoningBank already complete');
341
+ console.log('Database: .swarm/memory.db');
342
+ console.log('All ReasoningBank tables present\n');
343
+ console.log('Use --reasoningbank flag with memory commands to enable AI features');
344
+ return;
345
+ }
346
+ console.log(`🔄 Migrating database: ${tableCheck.missingTables.length} tables missing`);
347
+ console.log(` Missing: ${tableCheck.missingTables.join(', ')}\n`);
348
+ const migrationResult = await migrateReasoningBank();
349
+ if (migrationResult.success) {
350
+ printSuccess(`✓ Migration complete: added ${migrationResult.addedTables?.length || 0} tables`);
351
+ console.log('\nNext steps:');
352
+ console.log(' 1. Store memories: memory store key "value" --reasoningbank');
353
+ console.log(' 2. Query memories: memory query "search" --reasoningbank');
354
+ console.log(' 3. Check status: memory status --reasoningbank');
355
+ } else {
356
+ printError(`❌ Migration failed: ${migrationResult.message}`);
357
+ console.log('Try running: init --force to reinitialize');
358
+ }
359
+ } catch (error) {
360
+ printError('❌ Migration check failed');
361
+ console.error(error.message);
362
+ console.log('\nTry running: init --force to reinitialize');
363
+ }
337
364
  return;
338
365
  }
339
366
  printInfo('🧠 Initializing ReasoningBank...');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/simple-commands/memory.js"],"sourcesContent":["// memory.js - Memory management commands\nimport { printSuccess, printError, printWarning, printInfo } from '../utils.js';\nimport { promises as fs } from 'fs';\nimport { cwd, exit, existsSync } from '../node-compat.js';\nimport { getUnifiedMemory } from '../../memory/unified-memory-manager.js';\nimport { KeyRedactor } from '../../utils/key-redactor.js';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\nexport async function memoryCommand(subArgs, flags) {\n const memorySubcommand = subArgs[0];\n const memoryStore = './memory/memory-store.json';\n\n // Extract namespace from flags or subArgs\n const namespace = flags?.namespace || flags?.ns || getNamespaceFromArgs(subArgs) || 'default';\n\n // Check for redaction flag\n const enableRedaction = flags?.redact || subArgs.includes('--redact') || subArgs.includes('--secure');\n\n // NEW: Detect memory mode (basic, reasoningbank, auto)\n const mode = await detectMemoryMode(flags, subArgs);\n\n // Helper to load memory data\n async function loadMemory() {\n try {\n const content = await fs.readFile(memoryStore, 'utf8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n }\n\n // Helper to save memory data\n async function saveMemory(data) {\n await fs.mkdir('./memory', { recursive: true });\n await fs.writeFile(memoryStore, JSON.stringify(data, null, 2, 'utf8'));\n }\n\n // NEW: Handle ReasoningBank-specific commands\n if (mode === 'reasoningbank' && ['init', 'status', 'consolidate', 'demo', 'test', 'benchmark'].includes(memorySubcommand)) {\n return await handleReasoningBankCommand(memorySubcommand, subArgs, flags);\n }\n\n // NEW: Handle new mode management commands\n if (['detect', 'mode', 'migrate'].includes(memorySubcommand)) {\n return await handleModeCommand(memorySubcommand, subArgs, flags);\n }\n\n // NEW: Delegate to ReasoningBank for regular commands if mode is set\n if (mode === 'reasoningbank' && ['store', 'query', 'list'].includes(memorySubcommand)) {\n return await handleReasoningBankCommand(memorySubcommand, subArgs, flags);\n }\n\n switch (memorySubcommand) {\n case 'store':\n await storeMemory(subArgs, loadMemory, saveMemory, namespace, enableRedaction);\n break;\n\n case 'query':\n await queryMemory(subArgs, loadMemory, namespace, enableRedaction);\n break;\n\n case 'stats':\n await showMemoryStats(loadMemory);\n break;\n\n case 'export':\n await exportMemory(subArgs, loadMemory, namespace);\n break;\n\n case 'import':\n await importMemory(subArgs, saveMemory, loadMemory);\n break;\n\n case 'clear':\n await clearMemory(subArgs, saveMemory, namespace);\n break;\n\n case 'list':\n await listNamespaces(loadMemory);\n break;\n\n default:\n showMemoryHelp();\n }\n}\n\nasync function storeMemory(subArgs, loadMemory, saveMemory, namespace, enableRedaction = false) {\n const key = subArgs[1];\n let value = subArgs.slice(2).join(' ');\n\n if (!key || !value) {\n printError('Usage: memory store <key> <value> [--namespace <ns>] [--redact]');\n return;\n }\n\n try {\n // Apply redaction if enabled\n let redactedValue = value;\n let securityWarnings = [];\n\n if (enableRedaction) {\n redactedValue = KeyRedactor.redact(value, true);\n const validation = KeyRedactor.validate(value);\n\n if (!validation.safe) {\n securityWarnings = validation.warnings;\n printWarning('🔒 Redaction enabled: Sensitive data detected and redacted');\n securityWarnings.forEach(warning => console.log(` ⚠️ ${warning}`));\n }\n } else {\n // Even if redaction is not explicitly enabled, validate and warn\n const validation = KeyRedactor.validate(value);\n if (!validation.safe) {\n printWarning('⚠️ Potential sensitive data detected! Use --redact flag for automatic redaction');\n validation.warnings.forEach(warning => console.log(` ⚠️ ${warning}`));\n console.log(' 💡 Tip: Add --redact flag to automatically redact API keys');\n }\n }\n\n const data = await loadMemory();\n\n if (!data[namespace]) {\n data[namespace] = [];\n }\n\n // Remove existing entry with same key\n data[namespace] = data[namespace].filter((e) => e.key !== key);\n\n // Add new entry with redacted value\n data[namespace].push({\n key,\n value: redactedValue,\n namespace,\n timestamp: Date.now(),\n redacted: enableRedaction && securityWarnings.length > 0,\n });\n\n await saveMemory(data);\n printSuccess(enableRedaction && securityWarnings.length > 0 ? '🔒 Stored successfully (with redaction)' : '✅ Stored successfully');\n console.log(`📝 Key: ${key}`);\n console.log(`📦 Namespace: ${namespace}`);\n console.log(`💾 Size: ${new TextEncoder().encode(redactedValue).length} bytes`);\n if (enableRedaction && securityWarnings.length > 0) {\n console.log(`🔒 Security: ${securityWarnings.length} sensitive pattern(s) redacted`);\n }\n } catch (err) {\n printError(`Failed to store: ${err.message}`);\n }\n}\n\nasync function queryMemory(subArgs, loadMemory, namespace, enableRedaction = false) {\n const search = subArgs.slice(1).join(' ');\n\n if (!search) {\n printError('Usage: memory query <search> [--namespace <ns>] [--redact]');\n return;\n }\n\n try {\n const data = await loadMemory();\n const results = [];\n\n for (const [ns, entries] of Object.entries(data)) {\n if (namespace && ns !== namespace) continue;\n\n for (const entry of entries) {\n if (entry.key.includes(search) || entry.value.includes(search)) {\n results.push(entry);\n }\n }\n }\n\n if (results.length === 0) {\n printWarning('No results found');\n return;\n }\n\n printSuccess(`Found ${results.length} results:`);\n\n // Sort by timestamp (newest first)\n results.sort((a, b) => b.timestamp - a.timestamp);\n\n for (const entry of results.slice(0, 10)) {\n console.log(`\\n📌 ${entry.key}`);\n console.log(` Namespace: ${entry.namespace}`);\n\n // Apply redaction to displayed value if requested\n let displayValue = entry.value;\n if (enableRedaction) {\n displayValue = KeyRedactor.redact(displayValue, true);\n }\n\n console.log(\n ` Value: ${displayValue.substring(0, 100)}${displayValue.length > 100 ? '...' : ''}`,\n );\n console.log(` Stored: ${new Date(entry.timestamp).toLocaleString()}`);\n\n // Show redaction status\n if (entry.redacted) {\n console.log(` 🔒 Status: Redacted on storage`);\n } else if (enableRedaction) {\n console.log(` 🔒 Status: Redacted for display`);\n }\n }\n\n if (results.length > 10) {\n console.log(`\\n... and ${results.length - 10} more results`);\n }\n } catch (err) {\n printError(`Failed to query: ${err.message}`);\n }\n}\n\nasync function showMemoryStats(loadMemory) {\n try {\n const data = await loadMemory();\n let totalEntries = 0;\n const namespaceStats = {};\n\n for (const [namespace, entries] of Object.entries(data)) {\n namespaceStats[namespace] = entries.length;\n totalEntries += entries.length;\n }\n\n printSuccess('Memory Bank Statistics:');\n console.log(` Total Entries: ${totalEntries}`);\n console.log(` Namespaces: ${Object.keys(data).length}`);\n console.log(\n ` Size: ${(new TextEncoder().encode(JSON.stringify(data)).length / 1024).toFixed(2)} KB`,\n );\n\n if (Object.keys(data).length > 0) {\n console.log('\\n📁 Namespace Breakdown:');\n for (const [namespace, count] of Object.entries(namespaceStats)) {\n console.log(` ${namespace}: ${count} entries`);\n }\n }\n } catch (err) {\n printError(`Failed to get stats: ${err.message}`);\n }\n}\n\nasync function exportMemory(subArgs, loadMemory, namespace) {\n const filename = subArgs[1] || `memory-export-${Date.now()}.json`;\n\n try {\n const data = await loadMemory();\n\n let exportData = data;\n if (namespace) {\n exportData = { [namespace]: data[namespace] || [] };\n }\n\n await fs.writeFile(filename, JSON.stringify(exportData, null, 2, 'utf8'));\n printSuccess(`Memory exported to ${filename}`);\n\n let totalEntries = 0;\n for (const entries of Object.values(exportData)) {\n totalEntries += entries.length;\n }\n console.log(\n `📦 Exported ${totalEntries} entries from ${Object.keys(exportData).length} namespace(s)`,\n );\n } catch (err) {\n printError(`Failed to export memory: ${err.message}`);\n }\n}\n\nasync function importMemory(subArgs, saveMemory, loadMemory) {\n const filename = subArgs[1];\n\n if (!filename) {\n printError('Usage: memory import <filename>');\n return;\n }\n\n try {\n const importContent = await fs.readFile(filename, 'utf8');\n const importData = JSON.parse(importContent);\n\n // Load existing memory\n const existingData = await loadMemory();\n\n // Merge imported data\n let totalImported = 0;\n for (const [namespace, entries] of Object.entries(importData)) {\n if (!existingData[namespace]) {\n existingData[namespace] = [];\n }\n\n // Add entries that don't already exist (by key)\n const existingKeys = new Set(existingData[namespace].map((e) => e.key));\n const newEntries = entries.filter((e) => !existingKeys.has(e.key));\n\n existingData[namespace].push(...newEntries);\n totalImported += newEntries.length;\n }\n\n await saveMemory(existingData);\n printSuccess(`Imported ${totalImported} new entries from ${filename}`);\n } catch (err) {\n printError(`Failed to import memory: ${err.message}`);\n }\n}\n\nasync function clearMemory(subArgs, saveMemory, namespace) {\n if (!namespace || namespace === 'default') {\n const nsFromArgs = getNamespaceFromArgs(subArgs);\n if (!nsFromArgs) {\n printError('Usage: memory clear --namespace <namespace>');\n printWarning('This will clear all entries in the specified namespace');\n return;\n }\n namespace = nsFromArgs;\n }\n\n try {\n // Helper to load memory data\n async function loadMemory() {\n try {\n const content = await fs.readFile('./memory/memory-store.json', 'utf8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n }\n \n const data = await loadMemory();\n\n if (!data[namespace]) {\n printWarning(`Namespace '${namespace}' does not exist`);\n return;\n }\n\n const entryCount = data[namespace].length;\n delete data[namespace];\n\n await saveMemory(data);\n printSuccess(`Cleared ${entryCount} entries from namespace '${namespace}'`);\n } catch (err) {\n printError(`Failed to clear memory: ${err.message}`);\n }\n}\n\nasync function listNamespaces(loadMemory) {\n try {\n const data = await loadMemory();\n const namespaces = Object.keys(data);\n\n if (namespaces.length === 0) {\n printWarning('No namespaces found');\n return;\n }\n\n printSuccess('Available namespaces:');\n for (const namespace of namespaces) {\n const count = data[namespace].length;\n console.log(` ${namespace} (${count} entries)`);\n }\n } catch (err) {\n printError(`Failed to list namespaces: ${err.message}`);\n }\n}\n\nfunction getNamespaceFromArgs(subArgs) {\n const namespaceIndex = subArgs.indexOf('--namespace');\n if (namespaceIndex !== -1 && namespaceIndex + 1 < subArgs.length) {\n return subArgs[namespaceIndex + 1];\n }\n\n const nsIndex = subArgs.indexOf('--ns');\n if (nsIndex !== -1 && nsIndex + 1 < subArgs.length) {\n return subArgs[nsIndex + 1];\n }\n\n return null;\n}\n\n// Helper to load memory data (needed for import function)\nasync function loadMemory() {\n try {\n const content = await fs.readFile('./memory/memory-store.json', 'utf8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n}\n\n// NEW: Mode detection function\nasync function detectMemoryMode(flags, subArgs) {\n // Explicit ReasoningBank flag takes precedence\n if (flags?.reasoningbank || flags?.rb || subArgs.includes('--reasoningbank') || subArgs.includes('--rb')) {\n return 'reasoningbank';\n }\n\n // Auto mode: detect if ReasoningBank is initialized\n if (flags?.auto || subArgs.includes('--auto')) {\n const initialized = await isReasoningBankInitialized();\n return initialized ? 'reasoningbank' : 'basic';\n }\n\n // Default: basic mode (backward compatible)\n return 'basic';\n}\n\n// NEW: Check if ReasoningBank is initialized\nasync function isReasoningBankInitialized() {\n try {\n // Check if .swarm/memory.db exists\n const dbPath = '.swarm/memory.db';\n await fs.access(dbPath);\n return true;\n } catch {\n return false;\n }\n}\n\n// NEW: Handle ReasoningBank commands\nasync function handleReasoningBankCommand(command, subArgs, flags) {\n const initialized = await isReasoningBankInitialized();\n\n // Lazy load the adapter (ES modules)\n const { initializeReasoningBank, storeMemory, queryMemories, listMemories, getStatus } = await import('../../reasoningbank/reasoningbank-adapter.js');\n\n // Special handling for 'init' command\n if (command === 'init') {\n if (initialized) {\n printWarning('⚠️ ReasoningBank already initialized');\n console.log('Database: .swarm/memory.db');\n console.log('\\nTo reinitialize, delete .swarm/memory.db first');\n return;\n }\n\n printInfo('🧠 Initializing ReasoningBank...');\n console.log('This will create: .swarm/memory.db\\n');\n\n try {\n await initializeReasoningBank();\n printSuccess('✅ ReasoningBank initialized successfully!');\n console.log('\\nNext steps:');\n console.log(' 1. Store memories: memory store key \"value\" --reasoningbank');\n console.log(' 2. Query memories: memory query \"search\" --reasoningbank');\n console.log(' 3. Check status: memory status --reasoningbank');\n } catch (error) {\n printError('❌ Failed to initialize ReasoningBank');\n console.error(error.message);\n }\n return;\n }\n\n // All other commands require initialization\n if (!initialized) {\n printError('❌ ReasoningBank not initialized');\n console.log('\\nTo use ReasoningBank mode, first run:');\n console.log(' memory init --reasoningbank\\n');\n return;\n }\n\n printInfo(`🧠 Using ReasoningBank mode...`);\n\n try {\n // Handle different commands\n switch (command) {\n case 'store':\n await handleReasoningBankStore(subArgs, flags, storeMemory);\n break;\n\n case 'query':\n await handleReasoningBankQuery(subArgs, flags, queryMemories);\n break;\n\n case 'list':\n await handleReasoningBankList(subArgs, flags, listMemories);\n break;\n\n case 'status':\n await handleReasoningBankStatus(getStatus);\n break;\n\n case 'consolidate':\n case 'demo':\n case 'test':\n case 'benchmark':\n // These still use CLI commands\n const cmd = `npx agentic-flow reasoningbank ${command}`;\n const { stdout } = await execAsync(cmd, { timeout: 60000 });\n if (stdout) console.log(stdout);\n break;\n\n default:\n printError(`Unknown ReasoningBank command: ${command}`);\n }\n } catch (error) {\n printError(`❌ ReasoningBank command failed`);\n console.error(error.message);\n }\n}\n\n// NEW: Handle ReasoningBank store\nasync function handleReasoningBankStore(subArgs, flags, storeMemory) {\n const key = subArgs[1];\n const value = subArgs.slice(2).join(' ');\n\n if (!key || !value) {\n printError('Usage: memory store <key> <value> --reasoningbank');\n return;\n }\n\n try {\n const namespace = flags?.namespace || flags?.ns || getArgValue(subArgs, '--namespace') || 'default';\n\n const memoryId = await storeMemory(key, value, {\n namespace,\n agent: 'memory-agent',\n domain: namespace,\n });\n\n printSuccess('✅ Stored successfully in ReasoningBank');\n console.log(`📝 Key: ${key}`);\n console.log(`🧠 Memory ID: ${memoryId}`);\n console.log(`📦 Namespace: ${namespace}`);\n console.log(`💾 Size: ${new TextEncoder().encode(value).length} bytes`);\n console.log(`🔍 Semantic search: enabled`);\n } catch (error) {\n printError(`Failed to store: ${error.message}`);\n }\n}\n\n// NEW: Handle ReasoningBank query\nasync function handleReasoningBankQuery(subArgs, flags, queryMemories) {\n const search = subArgs.slice(1).join(' ');\n\n if (!search) {\n printError('Usage: memory query <search> --reasoningbank');\n return;\n }\n\n try {\n const namespace = flags?.namespace || flags?.ns || getArgValue(subArgs, '--namespace');\n const results = await queryMemories(search, {\n domain: namespace || 'general',\n limit: 10,\n });\n\n if (results.length === 0) {\n printWarning('No results found');\n return;\n }\n\n printSuccess(`Found ${results.length} results (semantic search):`);\n\n for (const entry of results) {\n console.log(`\\n📌 ${entry.key}`);\n console.log(` Namespace: ${entry.namespace}`);\n console.log(` Value: ${entry.value.substring(0, 100)}${entry.value.length > 100 ? '...' : ''}`);\n console.log(` Confidence: ${(entry.confidence * 100).toFixed(1)}%`);\n console.log(` Usage: ${entry.usage_count} times`);\n if (entry.score) {\n console.log(` Match Score: ${(entry.score * 100).toFixed(1)}%`);\n }\n console.log(` Stored: ${new Date(entry.created_at).toLocaleString()}`);\n }\n } catch (error) {\n printError(`Failed to query: ${error.message}`);\n }\n}\n\n// NEW: Handle ReasoningBank list\nasync function handleReasoningBankList(subArgs, flags, listMemories) {\n try {\n const sort = flags?.sort || getArgValue(subArgs, '--sort') || 'created_at';\n const limit = parseInt(flags?.limit || getArgValue(subArgs, '--limit') || '10');\n\n const results = await listMemories({ sort, limit });\n\n if (results.length === 0) {\n printWarning('No memories found');\n return;\n }\n\n printSuccess(`ReasoningBank memories (${results.length} shown):`);\n\n for (const entry of results) {\n console.log(`\\n📌 ${entry.key}`);\n console.log(` Value: ${entry.value.substring(0, 80)}${entry.value.length > 80 ? '...' : ''}`);\n console.log(` Confidence: ${(entry.confidence * 100).toFixed(1)}% | Usage: ${entry.usage_count}`);\n }\n } catch (error) {\n printError(`Failed to list: ${error.message}`);\n }\n}\n\n// NEW: Handle ReasoningBank status\nasync function handleReasoningBankStatus(getStatus) {\n try {\n const stats = await getStatus();\n\n printSuccess('📊 ReasoningBank Status:');\n console.log(` Total memories: ${stats.total_memories}`);\n console.log(` Average confidence: ${(stats.avg_confidence * 100).toFixed(1)}%`);\n console.log(` Total usage: ${stats.total_usage}`);\n console.log(` Embeddings: ${stats.total_embeddings}`);\n console.log(` Trajectories: ${stats.total_trajectories}`);\n } catch (error) {\n printError(`Failed to get status: ${error.message}`);\n }\n}\n\n// NEW: Build agentic-flow reasoningbank command\nfunction buildReasoningBankCommand(command, subArgs, flags) {\n const parts = ['npx', 'agentic-flow', 'reasoningbank'];\n\n // Map memory commands to reasoningbank commands\n const commandMap = {\n store: 'store',\n query: 'query',\n list: 'list',\n status: 'status',\n consolidate: 'consolidate',\n demo: 'demo',\n test: 'test',\n benchmark: 'benchmark',\n };\n\n parts.push(commandMap[command] || command);\n\n // Add arguments (skip the command itself)\n const args = subArgs.slice(1);\n args.forEach((arg) => {\n if (!arg.startsWith('--reasoningbank') && !arg.startsWith('--rb') && !arg.startsWith('--auto')) {\n parts.push(`\"${arg}\"`);\n }\n });\n\n // Add required --agent parameter\n parts.push('--agent', 'memory-agent');\n\n return parts.join(' ');\n}\n\n// NEW: Handle mode management commands\nasync function handleModeCommand(command, subArgs, flags) {\n switch (command) {\n case 'detect':\n await detectModes();\n break;\n\n case 'mode':\n await showCurrentMode();\n break;\n\n case 'migrate':\n await migrateMemory(subArgs, flags);\n break;\n\n default:\n printError(`Unknown mode command: ${command}`);\n }\n}\n\n// NEW: Detect and show available memory modes\nasync function detectModes() {\n printInfo('🔍 Detecting memory modes...\\n');\n\n // Check basic mode\n const basicAvailable = await checkBasicMode();\n console.log(basicAvailable ? '✅ Basic Mode (active)' : '❌ Basic Mode (unavailable)');\n if (basicAvailable) {\n console.log(' Location: ./memory/memory-store.json');\n console.log(' Features: Simple key-value storage, fast');\n }\n\n console.log('');\n\n // Check ReasoningBank mode\n const rbAvailable = await isReasoningBankInitialized();\n console.log(rbAvailable ? '✅ ReasoningBank Mode (available)' : '⚠️ ReasoningBank Mode (not initialized)');\n if (rbAvailable) {\n console.log(' Location: .swarm/memory.db');\n console.log(' Features: AI-powered semantic search, learning');\n } else {\n console.log(' To enable: memory init --reasoningbank');\n }\n\n console.log('\\n💡 Usage:');\n console.log(' Basic: memory store key \"value\"');\n console.log(' ReasoningBank: memory store key \"value\" --reasoningbank');\n console.log(' Auto-detect: memory query search --auto');\n}\n\n// NEW: Check if basic mode is available\nasync function checkBasicMode() {\n try {\n const memoryDir = './memory';\n await fs.access(memoryDir);\n return true;\n } catch {\n // Create directory if it doesn't exist\n try {\n await fs.mkdir(memoryDir, { recursive: true });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n// NEW: Show current default mode\nasync function showCurrentMode() {\n const rbInitialized = await isReasoningBankInitialized();\n\n printInfo('📊 Current Memory Configuration:\\n');\n console.log('Default Mode: Basic (backward compatible)');\n console.log('Available Modes:');\n console.log(' • Basic Mode: Always available');\n console.log(` • ReasoningBank Mode: ${rbInitialized ? 'Initialized ✅' : 'Not initialized ⚠️'}`);\n\n console.log('\\n💡 To use a specific mode:');\n console.log(' --reasoningbank or --rb → Use ReasoningBank');\n console.log(' --auto → Auto-detect best mode');\n console.log(' (no flag) → Use Basic mode');\n}\n\n// NEW: Migrate memory between modes\nasync function migrateMemory(subArgs, flags) {\n const targetMode = flags?.to || getArgValue(subArgs, '--to');\n\n if (!targetMode || !['basic', 'reasoningbank'].includes(targetMode)) {\n printError('Usage: memory migrate --to <basic|reasoningbank>');\n return;\n }\n\n printInfo(`🔄 Migrating to ${targetMode} mode...\\n`);\n\n if (targetMode === 'reasoningbank') {\n // Migrate basic → ReasoningBank\n const rbInitialized = await isReasoningBankInitialized();\n if (!rbInitialized) {\n printError('❌ ReasoningBank not initialized');\n console.log('First run: memory init --reasoningbank\\n');\n return;\n }\n\n printWarning('⚠️ Migration from basic to ReasoningBank is not yet implemented');\n console.log('This feature is coming in v2.7.1\\n');\n console.log('For now, you can:');\n console.log(' 1. Export basic memory: memory export backup.json');\n console.log(' 2. Manually import to ReasoningBank');\n } else {\n // Migrate ReasoningBank → basic\n printWarning('⚠️ Migration from ReasoningBank to basic is not yet implemented');\n console.log('This feature is coming in v2.7.1\\n');\n }\n}\n\n// Helper to get argument value\nfunction getArgValue(args, flag) {\n const index = args.indexOf(flag);\n if (index !== -1 && index + 1 < args.length) {\n return args[index + 1];\n }\n return null;\n}\n\nfunction showMemoryHelp() {\n console.log('Memory commands:');\n console.log(' store <key> <value> Store a key-value pair');\n console.log(' query <search> Search for entries');\n console.log(' stats Show memory statistics');\n console.log(' export [filename] Export memory to file');\n console.log(' import <filename> Import memory from file');\n console.log(' clear --namespace <ns> Clear a namespace');\n console.log(' list List all namespaces');\n console.log();\n console.log('🧠 ReasoningBank Commands (NEW in v2.7.0):');\n console.log(' init --reasoningbank Initialize ReasoningBank (AI-powered memory)');\n console.log(' status --reasoningbank Show ReasoningBank statistics');\n console.log(' detect Show available memory modes');\n console.log(' mode Show current memory configuration');\n console.log(' migrate --to <mode> Migrate between basic/reasoningbank');\n console.log();\n console.log('Options:');\n console.log(' --namespace <ns> Specify namespace for operations');\n console.log(' --ns <ns> Short form of --namespace');\n console.log(' --redact 🔒 Enable API key redaction (security feature)');\n console.log(' --secure Alias for --redact');\n console.log();\n console.log('🎯 Mode Selection (NEW):');\n console.log(' --reasoningbank, --rb Use ReasoningBank mode (AI-powered)');\n console.log(' --auto Auto-detect best available mode');\n console.log(' (no flag) Use Basic mode (default, backward compatible)');\n console.log();\n console.log('🔒 Security Features (v2.6.0):');\n console.log(' API Key Protection: Automatically detects and redacts sensitive data');\n console.log(' Patterns Detected: Anthropic, OpenRouter, Gemini, Bearer tokens, etc.');\n console.log(' Auto-Validation: Warns when storing unredacted sensitive data');\n console.log(' Display Redaction: Redact sensitive data when querying with --redact');\n console.log();\n console.log('Examples:');\n console.log(' # Basic mode (default - backward compatible)');\n console.log(' memory store previous_work \"Research findings from yesterday\"');\n console.log(' memory store api_config \"key=sk-ant-...\" --redact # 🔒 Redacts API key');\n console.log(' memory query research --namespace sparc');\n console.log();\n console.log(' # ReasoningBank mode (AI-powered, opt-in)');\n console.log(' memory init --reasoningbank # One-time setup');\n console.log(' memory store api_pattern \"Always use env vars\" --reasoningbank');\n console.log(' memory query \"API configuration\" --reasoningbank # Semantic search!');\n console.log(' memory status --reasoningbank # Show AI metrics');\n console.log();\n console.log(' # Auto-detect mode (smart selection)');\n console.log(' memory query config --auto # Uses ReasoningBank if available');\n console.log();\n console.log(' # Mode management');\n console.log(' memory detect # Show available modes');\n console.log(' memory mode # Show current configuration');\n console.log();\n console.log('💡 Tips:');\n console.log(' • Use Basic mode for simple key-value storage (fast, always available)');\n console.log(' • Use ReasoningBank for AI-powered semantic search (learns from patterns)');\n console.log(' • Use --auto to let claude-flow choose the best mode for you');\n console.log(' • Always use --redact when storing API keys or secrets!');\n}\n"],"names":["printSuccess","printError","printWarning","printInfo","promises","fs","KeyRedactor","exec","promisify","execAsync","memoryCommand","subArgs","flags","memorySubcommand","memoryStore","namespace","ns","getNamespaceFromArgs","enableRedaction","redact","includes","mode","detectMemoryMode","loadMemory","content","readFile","JSON","parse","saveMemory","data","mkdir","recursive","writeFile","stringify","handleReasoningBankCommand","handleModeCommand","storeMemory","queryMemory","showMemoryStats","exportMemory","importMemory","clearMemory","listNamespaces","showMemoryHelp","key","value","slice","join","redactedValue","securityWarnings","validation","validate","safe","warnings","forEach","warning","console","log","filter","e","push","timestamp","Date","now","redacted","length","TextEncoder","encode","err","message","search","results","entries","Object","entry","sort","a","b","displayValue","substring","toLocaleString","totalEntries","namespaceStats","keys","toFixed","count","filename","exportData","values","importContent","importData","existingData","totalImported","existingKeys","Set","map","newEntries","has","nsFromArgs","entryCount","namespaces","namespaceIndex","indexOf","nsIndex","reasoningbank","rb","auto","initialized","isReasoningBankInitialized","dbPath","access","command","initializeReasoningBank","queryMemories","listMemories","getStatus","error","handleReasoningBankStore","handleReasoningBankQuery","handleReasoningBankList","handleReasoningBankStatus","cmd","stdout","timeout","getArgValue","memoryId","agent","domain","limit","confidence","usage_count","score","created_at","parseInt","stats","total_memories","avg_confidence","total_usage","total_embeddings","total_trajectories","buildReasoningBankCommand","parts","commandMap","store","query","list","status","consolidate","demo","test","benchmark","args","arg","startsWith","detectModes","showCurrentMode","migrateMemory","basicAvailable","checkBasicMode","rbAvailable","memoryDir","rbInitialized","targetMode","to","flag","index"],"mappings":"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;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG;IACXD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG;IACXD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG;IACXD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG;IACXD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG;IACXD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG;IACXD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG;IACXD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;AACd"}
1
+ {"version":3,"sources":["../../../../src/cli/simple-commands/memory.js"],"sourcesContent":["// memory.js - Memory management commands\nimport { printSuccess, printError, printWarning, printInfo } from '../utils.js';\nimport { promises as fs } from 'fs';\nimport { cwd, exit, existsSync } from '../node-compat.js';\nimport { getUnifiedMemory } from '../../memory/unified-memory-manager.js';\nimport { KeyRedactor } from '../../utils/key-redactor.js';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\nexport async function memoryCommand(subArgs, flags) {\n const memorySubcommand = subArgs[0];\n const memoryStore = './memory/memory-store.json';\n\n // Extract namespace from flags or subArgs\n const namespace = flags?.namespace || flags?.ns || getNamespaceFromArgs(subArgs) || 'default';\n\n // Check for redaction flag\n const enableRedaction = flags?.redact || subArgs.includes('--redact') || subArgs.includes('--secure');\n\n // NEW: Detect memory mode (basic, reasoningbank, auto)\n const mode = await detectMemoryMode(flags, subArgs);\n\n // Helper to load memory data\n async function loadMemory() {\n try {\n const content = await fs.readFile(memoryStore, 'utf8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n }\n\n // Helper to save memory data\n async function saveMemory(data) {\n await fs.mkdir('./memory', { recursive: true });\n await fs.writeFile(memoryStore, JSON.stringify(data, null, 2, 'utf8'));\n }\n\n // NEW: Handle ReasoningBank-specific commands\n if (mode === 'reasoningbank' && ['init', 'status', 'consolidate', 'demo', 'test', 'benchmark'].includes(memorySubcommand)) {\n return await handleReasoningBankCommand(memorySubcommand, subArgs, flags);\n }\n\n // NEW: Handle new mode management commands\n if (['detect', 'mode', 'migrate'].includes(memorySubcommand)) {\n return await handleModeCommand(memorySubcommand, subArgs, flags);\n }\n\n // NEW: Delegate to ReasoningBank for regular commands if mode is set\n if (mode === 'reasoningbank' && ['store', 'query', 'list'].includes(memorySubcommand)) {\n return await handleReasoningBankCommand(memorySubcommand, subArgs, flags);\n }\n\n switch (memorySubcommand) {\n case 'store':\n await storeMemory(subArgs, loadMemory, saveMemory, namespace, enableRedaction);\n break;\n\n case 'query':\n await queryMemory(subArgs, loadMemory, namespace, enableRedaction);\n break;\n\n case 'stats':\n await showMemoryStats(loadMemory);\n break;\n\n case 'export':\n await exportMemory(subArgs, loadMemory, namespace);\n break;\n\n case 'import':\n await importMemory(subArgs, saveMemory, loadMemory);\n break;\n\n case 'clear':\n await clearMemory(subArgs, saveMemory, namespace);\n break;\n\n case 'list':\n await listNamespaces(loadMemory);\n break;\n\n default:\n showMemoryHelp();\n }\n}\n\nasync function storeMemory(subArgs, loadMemory, saveMemory, namespace, enableRedaction = false) {\n const key = subArgs[1];\n let value = subArgs.slice(2).join(' ');\n\n if (!key || !value) {\n printError('Usage: memory store <key> <value> [--namespace <ns>] [--redact]');\n return;\n }\n\n try {\n // Apply redaction if enabled\n let redactedValue = value;\n let securityWarnings = [];\n\n if (enableRedaction) {\n redactedValue = KeyRedactor.redact(value, true);\n const validation = KeyRedactor.validate(value);\n\n if (!validation.safe) {\n securityWarnings = validation.warnings;\n printWarning('🔒 Redaction enabled: Sensitive data detected and redacted');\n securityWarnings.forEach(warning => console.log(` ⚠️ ${warning}`));\n }\n } else {\n // Even if redaction is not explicitly enabled, validate and warn\n const validation = KeyRedactor.validate(value);\n if (!validation.safe) {\n printWarning('⚠️ Potential sensitive data detected! Use --redact flag for automatic redaction');\n validation.warnings.forEach(warning => console.log(` ⚠️ ${warning}`));\n console.log(' 💡 Tip: Add --redact flag to automatically redact API keys');\n }\n }\n\n const data = await loadMemory();\n\n if (!data[namespace]) {\n data[namespace] = [];\n }\n\n // Remove existing entry with same key\n data[namespace] = data[namespace].filter((e) => e.key !== key);\n\n // Add new entry with redacted value\n data[namespace].push({\n key,\n value: redactedValue,\n namespace,\n timestamp: Date.now(),\n redacted: enableRedaction && securityWarnings.length > 0,\n });\n\n await saveMemory(data);\n printSuccess(enableRedaction && securityWarnings.length > 0 ? '🔒 Stored successfully (with redaction)' : '✅ Stored successfully');\n console.log(`📝 Key: ${key}`);\n console.log(`📦 Namespace: ${namespace}`);\n console.log(`💾 Size: ${new TextEncoder().encode(redactedValue).length} bytes`);\n if (enableRedaction && securityWarnings.length > 0) {\n console.log(`🔒 Security: ${securityWarnings.length} sensitive pattern(s) redacted`);\n }\n } catch (err) {\n printError(`Failed to store: ${err.message}`);\n }\n}\n\nasync function queryMemory(subArgs, loadMemory, namespace, enableRedaction = false) {\n const search = subArgs.slice(1).join(' ');\n\n if (!search) {\n printError('Usage: memory query <search> [--namespace <ns>] [--redact]');\n return;\n }\n\n try {\n const data = await loadMemory();\n const results = [];\n\n for (const [ns, entries] of Object.entries(data)) {\n if (namespace && ns !== namespace) continue;\n\n for (const entry of entries) {\n if (entry.key.includes(search) || entry.value.includes(search)) {\n results.push(entry);\n }\n }\n }\n\n if (results.length === 0) {\n printWarning('No results found');\n return;\n }\n\n printSuccess(`Found ${results.length} results:`);\n\n // Sort by timestamp (newest first)\n results.sort((a, b) => b.timestamp - a.timestamp);\n\n for (const entry of results.slice(0, 10)) {\n console.log(`\\n📌 ${entry.key}`);\n console.log(` Namespace: ${entry.namespace}`);\n\n // Apply redaction to displayed value if requested\n let displayValue = entry.value;\n if (enableRedaction) {\n displayValue = KeyRedactor.redact(displayValue, true);\n }\n\n console.log(\n ` Value: ${displayValue.substring(0, 100)}${displayValue.length > 100 ? '...' : ''}`,\n );\n console.log(` Stored: ${new Date(entry.timestamp).toLocaleString()}`);\n\n // Show redaction status\n if (entry.redacted) {\n console.log(` 🔒 Status: Redacted on storage`);\n } else if (enableRedaction) {\n console.log(` 🔒 Status: Redacted for display`);\n }\n }\n\n if (results.length > 10) {\n console.log(`\\n... and ${results.length - 10} more results`);\n }\n } catch (err) {\n printError(`Failed to query: ${err.message}`);\n }\n}\n\nasync function showMemoryStats(loadMemory) {\n try {\n const data = await loadMemory();\n let totalEntries = 0;\n const namespaceStats = {};\n\n for (const [namespace, entries] of Object.entries(data)) {\n namespaceStats[namespace] = entries.length;\n totalEntries += entries.length;\n }\n\n printSuccess('Memory Bank Statistics:');\n console.log(` Total Entries: ${totalEntries}`);\n console.log(` Namespaces: ${Object.keys(data).length}`);\n console.log(\n ` Size: ${(new TextEncoder().encode(JSON.stringify(data)).length / 1024).toFixed(2)} KB`,\n );\n\n if (Object.keys(data).length > 0) {\n console.log('\\n📁 Namespace Breakdown:');\n for (const [namespace, count] of Object.entries(namespaceStats)) {\n console.log(` ${namespace}: ${count} entries`);\n }\n }\n } catch (err) {\n printError(`Failed to get stats: ${err.message}`);\n }\n}\n\nasync function exportMemory(subArgs, loadMemory, namespace) {\n const filename = subArgs[1] || `memory-export-${Date.now()}.json`;\n\n try {\n const data = await loadMemory();\n\n let exportData = data;\n if (namespace) {\n exportData = { [namespace]: data[namespace] || [] };\n }\n\n await fs.writeFile(filename, JSON.stringify(exportData, null, 2, 'utf8'));\n printSuccess(`Memory exported to ${filename}`);\n\n let totalEntries = 0;\n for (const entries of Object.values(exportData)) {\n totalEntries += entries.length;\n }\n console.log(\n `📦 Exported ${totalEntries} entries from ${Object.keys(exportData).length} namespace(s)`,\n );\n } catch (err) {\n printError(`Failed to export memory: ${err.message}`);\n }\n}\n\nasync function importMemory(subArgs, saveMemory, loadMemory) {\n const filename = subArgs[1];\n\n if (!filename) {\n printError('Usage: memory import <filename>');\n return;\n }\n\n try {\n const importContent = await fs.readFile(filename, 'utf8');\n const importData = JSON.parse(importContent);\n\n // Load existing memory\n const existingData = await loadMemory();\n\n // Merge imported data\n let totalImported = 0;\n for (const [namespace, entries] of Object.entries(importData)) {\n if (!existingData[namespace]) {\n existingData[namespace] = [];\n }\n\n // Add entries that don't already exist (by key)\n const existingKeys = new Set(existingData[namespace].map((e) => e.key));\n const newEntries = entries.filter((e) => !existingKeys.has(e.key));\n\n existingData[namespace].push(...newEntries);\n totalImported += newEntries.length;\n }\n\n await saveMemory(existingData);\n printSuccess(`Imported ${totalImported} new entries from ${filename}`);\n } catch (err) {\n printError(`Failed to import memory: ${err.message}`);\n }\n}\n\nasync function clearMemory(subArgs, saveMemory, namespace) {\n if (!namespace || namespace === 'default') {\n const nsFromArgs = getNamespaceFromArgs(subArgs);\n if (!nsFromArgs) {\n printError('Usage: memory clear --namespace <namespace>');\n printWarning('This will clear all entries in the specified namespace');\n return;\n }\n namespace = nsFromArgs;\n }\n\n try {\n // Helper to load memory data\n async function loadMemory() {\n try {\n const content = await fs.readFile('./memory/memory-store.json', 'utf8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n }\n \n const data = await loadMemory();\n\n if (!data[namespace]) {\n printWarning(`Namespace '${namespace}' does not exist`);\n return;\n }\n\n const entryCount = data[namespace].length;\n delete data[namespace];\n\n await saveMemory(data);\n printSuccess(`Cleared ${entryCount} entries from namespace '${namespace}'`);\n } catch (err) {\n printError(`Failed to clear memory: ${err.message}`);\n }\n}\n\nasync function listNamespaces(loadMemory) {\n try {\n const data = await loadMemory();\n const namespaces = Object.keys(data);\n\n if (namespaces.length === 0) {\n printWarning('No namespaces found');\n return;\n }\n\n printSuccess('Available namespaces:');\n for (const namespace of namespaces) {\n const count = data[namespace].length;\n console.log(` ${namespace} (${count} entries)`);\n }\n } catch (err) {\n printError(`Failed to list namespaces: ${err.message}`);\n }\n}\n\nfunction getNamespaceFromArgs(subArgs) {\n const namespaceIndex = subArgs.indexOf('--namespace');\n if (namespaceIndex !== -1 && namespaceIndex + 1 < subArgs.length) {\n return subArgs[namespaceIndex + 1];\n }\n\n const nsIndex = subArgs.indexOf('--ns');\n if (nsIndex !== -1 && nsIndex + 1 < subArgs.length) {\n return subArgs[nsIndex + 1];\n }\n\n return null;\n}\n\n// Helper to load memory data (needed for import function)\nasync function loadMemory() {\n try {\n const content = await fs.readFile('./memory/memory-store.json', 'utf8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n}\n\n// NEW: Mode detection function\nasync function detectMemoryMode(flags, subArgs) {\n // Explicit ReasoningBank flag takes precedence\n if (flags?.reasoningbank || flags?.rb || subArgs.includes('--reasoningbank') || subArgs.includes('--rb')) {\n return 'reasoningbank';\n }\n\n // Auto mode: detect if ReasoningBank is initialized\n if (flags?.auto || subArgs.includes('--auto')) {\n const initialized = await isReasoningBankInitialized();\n return initialized ? 'reasoningbank' : 'basic';\n }\n\n // Default: basic mode (backward compatible)\n return 'basic';\n}\n\n// NEW: Check if ReasoningBank is initialized\nasync function isReasoningBankInitialized() {\n try {\n // Check if .swarm/memory.db exists\n const dbPath = '.swarm/memory.db';\n await fs.access(dbPath);\n return true;\n } catch {\n return false;\n }\n}\n\n// NEW: Handle ReasoningBank commands\nasync function handleReasoningBankCommand(command, subArgs, flags) {\n const initialized = await isReasoningBankInitialized();\n\n // Lazy load the adapter (ES modules)\n const { initializeReasoningBank, storeMemory, queryMemories, listMemories, getStatus, checkReasoningBankTables, migrateReasoningBank } = await import('../../reasoningbank/reasoningbank-adapter.js');\n\n // Special handling for 'init' command\n if (command === 'init') {\n const dbPath = '.swarm/memory.db';\n\n if (initialized) {\n // Database exists - check if migration is needed\n printInfo('🔍 Checking existing database for ReasoningBank schema...\\n');\n\n try {\n // Set the database path for ReasoningBank\n process.env.CLAUDE_FLOW_DB_PATH = dbPath;\n\n const tableCheck = await checkReasoningBankTables();\n\n if (tableCheck.exists) {\n printSuccess('✅ ReasoningBank already complete');\n console.log('Database: .swarm/memory.db');\n console.log('All ReasoningBank tables present\\n');\n console.log('Use --reasoningbank flag with memory commands to enable AI features');\n return;\n }\n\n // Missing tables found - run migration\n console.log(`🔄 Migrating database: ${tableCheck.missingTables.length} tables missing`);\n console.log(` Missing: ${tableCheck.missingTables.join(', ')}\\n`);\n\n const migrationResult = await migrateReasoningBank();\n\n if (migrationResult.success) {\n printSuccess(`✓ Migration complete: added ${migrationResult.addedTables?.length || 0} tables`);\n console.log('\\nNext steps:');\n console.log(' 1. Store memories: memory store key \"value\" --reasoningbank');\n console.log(' 2. Query memories: memory query \"search\" --reasoningbank');\n console.log(' 3. Check status: memory status --reasoningbank');\n } else {\n printError(`❌ Migration failed: ${migrationResult.message}`);\n console.log('Try running: init --force to reinitialize');\n }\n } catch (error) {\n printError('❌ Migration check failed');\n console.error(error.message);\n console.log('\\nTry running: init --force to reinitialize');\n }\n return;\n }\n\n // Fresh initialization\n printInfo('🧠 Initializing ReasoningBank...');\n console.log('This will create: .swarm/memory.db\\n');\n\n try {\n await initializeReasoningBank();\n printSuccess('✅ ReasoningBank initialized successfully!');\n console.log('\\nNext steps:');\n console.log(' 1. Store memories: memory store key \"value\" --reasoningbank');\n console.log(' 2. Query memories: memory query \"search\" --reasoningbank');\n console.log(' 3. Check status: memory status --reasoningbank');\n } catch (error) {\n printError('❌ Failed to initialize ReasoningBank');\n console.error(error.message);\n }\n return;\n }\n\n // All other commands require initialization\n if (!initialized) {\n printError('❌ ReasoningBank not initialized');\n console.log('\\nTo use ReasoningBank mode, first run:');\n console.log(' memory init --reasoningbank\\n');\n return;\n }\n\n printInfo(`🧠 Using ReasoningBank mode...`);\n\n try {\n // Handle different commands\n switch (command) {\n case 'store':\n await handleReasoningBankStore(subArgs, flags, storeMemory);\n break;\n\n case 'query':\n await handleReasoningBankQuery(subArgs, flags, queryMemories);\n break;\n\n case 'list':\n await handleReasoningBankList(subArgs, flags, listMemories);\n break;\n\n case 'status':\n await handleReasoningBankStatus(getStatus);\n break;\n\n case 'consolidate':\n case 'demo':\n case 'test':\n case 'benchmark':\n // These still use CLI commands\n const cmd = `npx agentic-flow reasoningbank ${command}`;\n const { stdout } = await execAsync(cmd, { timeout: 60000 });\n if (stdout) console.log(stdout);\n break;\n\n default:\n printError(`Unknown ReasoningBank command: ${command}`);\n }\n } catch (error) {\n printError(`❌ ReasoningBank command failed`);\n console.error(error.message);\n }\n}\n\n// NEW: Handle ReasoningBank store\nasync function handleReasoningBankStore(subArgs, flags, storeMemory) {\n const key = subArgs[1];\n const value = subArgs.slice(2).join(' ');\n\n if (!key || !value) {\n printError('Usage: memory store <key> <value> --reasoningbank');\n return;\n }\n\n try {\n const namespace = flags?.namespace || flags?.ns || getArgValue(subArgs, '--namespace') || 'default';\n\n const memoryId = await storeMemory(key, value, {\n namespace,\n agent: 'memory-agent',\n domain: namespace,\n });\n\n printSuccess('✅ Stored successfully in ReasoningBank');\n console.log(`📝 Key: ${key}`);\n console.log(`🧠 Memory ID: ${memoryId}`);\n console.log(`📦 Namespace: ${namespace}`);\n console.log(`💾 Size: ${new TextEncoder().encode(value).length} bytes`);\n console.log(`🔍 Semantic search: enabled`);\n } catch (error) {\n printError(`Failed to store: ${error.message}`);\n }\n}\n\n// NEW: Handle ReasoningBank query\nasync function handleReasoningBankQuery(subArgs, flags, queryMemories) {\n const search = subArgs.slice(1).join(' ');\n\n if (!search) {\n printError('Usage: memory query <search> --reasoningbank');\n return;\n }\n\n try {\n const namespace = flags?.namespace || flags?.ns || getArgValue(subArgs, '--namespace');\n const results = await queryMemories(search, {\n domain: namespace || 'general',\n limit: 10,\n });\n\n if (results.length === 0) {\n printWarning('No results found');\n return;\n }\n\n printSuccess(`Found ${results.length} results (semantic search):`);\n\n for (const entry of results) {\n console.log(`\\n📌 ${entry.key}`);\n console.log(` Namespace: ${entry.namespace}`);\n console.log(` Value: ${entry.value.substring(0, 100)}${entry.value.length > 100 ? '...' : ''}`);\n console.log(` Confidence: ${(entry.confidence * 100).toFixed(1)}%`);\n console.log(` Usage: ${entry.usage_count} times`);\n if (entry.score) {\n console.log(` Match Score: ${(entry.score * 100).toFixed(1)}%`);\n }\n console.log(` Stored: ${new Date(entry.created_at).toLocaleString()}`);\n }\n } catch (error) {\n printError(`Failed to query: ${error.message}`);\n }\n}\n\n// NEW: Handle ReasoningBank list\nasync function handleReasoningBankList(subArgs, flags, listMemories) {\n try {\n const sort = flags?.sort || getArgValue(subArgs, '--sort') || 'created_at';\n const limit = parseInt(flags?.limit || getArgValue(subArgs, '--limit') || '10');\n\n const results = await listMemories({ sort, limit });\n\n if (results.length === 0) {\n printWarning('No memories found');\n return;\n }\n\n printSuccess(`ReasoningBank memories (${results.length} shown):`);\n\n for (const entry of results) {\n console.log(`\\n📌 ${entry.key}`);\n console.log(` Value: ${entry.value.substring(0, 80)}${entry.value.length > 80 ? '...' : ''}`);\n console.log(` Confidence: ${(entry.confidence * 100).toFixed(1)}% | Usage: ${entry.usage_count}`);\n }\n } catch (error) {\n printError(`Failed to list: ${error.message}`);\n }\n}\n\n// NEW: Handle ReasoningBank status\nasync function handleReasoningBankStatus(getStatus) {\n try {\n const stats = await getStatus();\n\n printSuccess('📊 ReasoningBank Status:');\n console.log(` Total memories: ${stats.total_memories}`);\n console.log(` Average confidence: ${(stats.avg_confidence * 100).toFixed(1)}%`);\n console.log(` Total usage: ${stats.total_usage}`);\n console.log(` Embeddings: ${stats.total_embeddings}`);\n console.log(` Trajectories: ${stats.total_trajectories}`);\n } catch (error) {\n printError(`Failed to get status: ${error.message}`);\n }\n}\n\n// NEW: Build agentic-flow reasoningbank command\nfunction buildReasoningBankCommand(command, subArgs, flags) {\n const parts = ['npx', 'agentic-flow', 'reasoningbank'];\n\n // Map memory commands to reasoningbank commands\n const commandMap = {\n store: 'store',\n query: 'query',\n list: 'list',\n status: 'status',\n consolidate: 'consolidate',\n demo: 'demo',\n test: 'test',\n benchmark: 'benchmark',\n };\n\n parts.push(commandMap[command] || command);\n\n // Add arguments (skip the command itself)\n const args = subArgs.slice(1);\n args.forEach((arg) => {\n if (!arg.startsWith('--reasoningbank') && !arg.startsWith('--rb') && !arg.startsWith('--auto')) {\n parts.push(`\"${arg}\"`);\n }\n });\n\n // Add required --agent parameter\n parts.push('--agent', 'memory-agent');\n\n return parts.join(' ');\n}\n\n// NEW: Handle mode management commands\nasync function handleModeCommand(command, subArgs, flags) {\n switch (command) {\n case 'detect':\n await detectModes();\n break;\n\n case 'mode':\n await showCurrentMode();\n break;\n\n case 'migrate':\n await migrateMemory(subArgs, flags);\n break;\n\n default:\n printError(`Unknown mode command: ${command}`);\n }\n}\n\n// NEW: Detect and show available memory modes\nasync function detectModes() {\n printInfo('🔍 Detecting memory modes...\\n');\n\n // Check basic mode\n const basicAvailable = await checkBasicMode();\n console.log(basicAvailable ? '✅ Basic Mode (active)' : '❌ Basic Mode (unavailable)');\n if (basicAvailable) {\n console.log(' Location: ./memory/memory-store.json');\n console.log(' Features: Simple key-value storage, fast');\n }\n\n console.log('');\n\n // Check ReasoningBank mode\n const rbAvailable = await isReasoningBankInitialized();\n console.log(rbAvailable ? '✅ ReasoningBank Mode (available)' : '⚠️ ReasoningBank Mode (not initialized)');\n if (rbAvailable) {\n console.log(' Location: .swarm/memory.db');\n console.log(' Features: AI-powered semantic search, learning');\n } else {\n console.log(' To enable: memory init --reasoningbank');\n }\n\n console.log('\\n💡 Usage:');\n console.log(' Basic: memory store key \"value\"');\n console.log(' ReasoningBank: memory store key \"value\" --reasoningbank');\n console.log(' Auto-detect: memory query search --auto');\n}\n\n// NEW: Check if basic mode is available\nasync function checkBasicMode() {\n try {\n const memoryDir = './memory';\n await fs.access(memoryDir);\n return true;\n } catch {\n // Create directory if it doesn't exist\n try {\n await fs.mkdir(memoryDir, { recursive: true });\n return true;\n } catch {\n return false;\n }\n }\n}\n\n// NEW: Show current default mode\nasync function showCurrentMode() {\n const rbInitialized = await isReasoningBankInitialized();\n\n printInfo('📊 Current Memory Configuration:\\n');\n console.log('Default Mode: Basic (backward compatible)');\n console.log('Available Modes:');\n console.log(' • Basic Mode: Always available');\n console.log(` • ReasoningBank Mode: ${rbInitialized ? 'Initialized ✅' : 'Not initialized ⚠️'}`);\n\n console.log('\\n💡 To use a specific mode:');\n console.log(' --reasoningbank or --rb → Use ReasoningBank');\n console.log(' --auto → Auto-detect best mode');\n console.log(' (no flag) → Use Basic mode');\n}\n\n// NEW: Migrate memory between modes\nasync function migrateMemory(subArgs, flags) {\n const targetMode = flags?.to || getArgValue(subArgs, '--to');\n\n if (!targetMode || !['basic', 'reasoningbank'].includes(targetMode)) {\n printError('Usage: memory migrate --to <basic|reasoningbank>');\n return;\n }\n\n printInfo(`🔄 Migrating to ${targetMode} mode...\\n`);\n\n if (targetMode === 'reasoningbank') {\n // Migrate basic → ReasoningBank\n const rbInitialized = await isReasoningBankInitialized();\n if (!rbInitialized) {\n printError('❌ ReasoningBank not initialized');\n console.log('First run: memory init --reasoningbank\\n');\n return;\n }\n\n printWarning('⚠️ Migration from basic to ReasoningBank is not yet implemented');\n console.log('This feature is coming in v2.7.1\\n');\n console.log('For now, you can:');\n console.log(' 1. Export basic memory: memory export backup.json');\n console.log(' 2. Manually import to ReasoningBank');\n } else {\n // Migrate ReasoningBank → basic\n printWarning('⚠️ Migration from ReasoningBank to basic is not yet implemented');\n console.log('This feature is coming in v2.7.1\\n');\n }\n}\n\n// Helper to get argument value\nfunction getArgValue(args, flag) {\n const index = args.indexOf(flag);\n if (index !== -1 && index + 1 < args.length) {\n return args[index + 1];\n }\n return null;\n}\n\nfunction showMemoryHelp() {\n console.log('Memory commands:');\n console.log(' store <key> <value> Store a key-value pair');\n console.log(' query <search> Search for entries');\n console.log(' stats Show memory statistics');\n console.log(' export [filename] Export memory to file');\n console.log(' import <filename> Import memory from file');\n console.log(' clear --namespace <ns> Clear a namespace');\n console.log(' list List all namespaces');\n console.log();\n console.log('🧠 ReasoningBank Commands (NEW in v2.7.0):');\n console.log(' init --reasoningbank Initialize ReasoningBank (AI-powered memory)');\n console.log(' status --reasoningbank Show ReasoningBank statistics');\n console.log(' detect Show available memory modes');\n console.log(' mode Show current memory configuration');\n console.log(' migrate --to <mode> Migrate between basic/reasoningbank');\n console.log();\n console.log('Options:');\n console.log(' --namespace <ns> Specify namespace for operations');\n console.log(' --ns <ns> Short form of --namespace');\n console.log(' --redact 🔒 Enable API key redaction (security feature)');\n console.log(' --secure Alias for --redact');\n console.log();\n console.log('🎯 Mode Selection (NEW):');\n console.log(' --reasoningbank, --rb Use ReasoningBank mode (AI-powered)');\n console.log(' --auto Auto-detect best available mode');\n console.log(' (no flag) Use Basic mode (default, backward compatible)');\n console.log();\n console.log('🔒 Security Features (v2.6.0):');\n console.log(' API Key Protection: Automatically detects and redacts sensitive data');\n console.log(' Patterns Detected: Anthropic, OpenRouter, Gemini, Bearer tokens, etc.');\n console.log(' Auto-Validation: Warns when storing unredacted sensitive data');\n console.log(' Display Redaction: Redact sensitive data when querying with --redact');\n console.log();\n console.log('Examples:');\n console.log(' # Basic mode (default - backward compatible)');\n console.log(' memory store previous_work \"Research findings from yesterday\"');\n console.log(' memory store api_config \"key=sk-ant-...\" --redact # 🔒 Redacts API key');\n console.log(' memory query research --namespace sparc');\n console.log();\n console.log(' # ReasoningBank mode (AI-powered, opt-in)');\n console.log(' memory init --reasoningbank # One-time setup');\n console.log(' memory store api_pattern \"Always use env vars\" --reasoningbank');\n console.log(' memory query \"API configuration\" --reasoningbank # Semantic search!');\n console.log(' memory status --reasoningbank # Show AI metrics');\n console.log();\n console.log(' # Auto-detect mode (smart selection)');\n console.log(' memory query config --auto # Uses ReasoningBank if available');\n console.log();\n console.log(' # Mode management');\n console.log(' memory detect # Show available modes');\n console.log(' memory mode # Show current configuration');\n console.log();\n console.log('💡 Tips:');\n console.log(' • Use Basic mode for simple key-value storage (fast, always available)');\n console.log(' • Use ReasoningBank for AI-powered semantic search (learns from patterns)');\n console.log(' • Use --auto to let claude-flow choose the best mode for you');\n console.log(' • Always use --redact when storing API keys or secrets!');\n}\n"],"names":["printSuccess","printError","printWarning","printInfo","promises","fs","KeyRedactor","exec","promisify","execAsync","memoryCommand","subArgs","flags","memorySubcommand","memoryStore","namespace","ns","getNamespaceFromArgs","enableRedaction","redact","includes","mode","detectMemoryMode","loadMemory","content","readFile","JSON","parse","saveMemory","data","mkdir","recursive","writeFile","stringify","handleReasoningBankCommand","handleModeCommand","storeMemory","queryMemory","showMemoryStats","exportMemory","importMemory","clearMemory","listNamespaces","showMemoryHelp","key","value","slice","join","redactedValue","securityWarnings","validation","validate","safe","warnings","forEach","warning","console","log","filter","e","push","timestamp","Date","now","redacted","length","TextEncoder","encode","err","message","search","results","entries","Object","entry","sort","a","b","displayValue","substring","toLocaleString","totalEntries","namespaceStats","keys","toFixed","count","filename","exportData","values","importContent","importData","existingData","totalImported","existingKeys","Set","map","newEntries","has","nsFromArgs","entryCount","namespaces","namespaceIndex","indexOf","nsIndex","reasoningbank","rb","auto","initialized","isReasoningBankInitialized","dbPath","access","command","initializeReasoningBank","queryMemories","listMemories","getStatus","checkReasoningBankTables","migrateReasoningBank","process","env","CLAUDE_FLOW_DB_PATH","tableCheck","exists","missingTables","migrationResult","success","addedTables","error","handleReasoningBankStore","handleReasoningBankQuery","handleReasoningBankList","handleReasoningBankStatus","cmd","stdout","timeout","getArgValue","memoryId","agent","domain","limit","confidence","usage_count","score","created_at","parseInt","stats","total_memories","avg_confidence","total_usage","total_embeddings","total_trajectories","buildReasoningBankCommand","parts","commandMap","store","query","list","status","consolidate","demo","test","benchmark","args","arg","startsWith","detectModes","showCurrentMode","migrateMemory","basicAvailable","checkBasicMode","rbAvailable","memoryDir","rbInitialized","targetMode","to","flag","index"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/validation-helper.js"],"sourcesContent":["/**\n * CLI Parameter Validation Helper\n * Provides standardized error messages for invalid parameters\n */\n\nimport { HelpFormatter } from './help-formatter.js';\n\nexport class ValidationHelper {\n /**\n * Validate enum parameter\n */\n static validateEnum(value, paramName, validOptions, commandPath) {\n if (!validOptions.includes(value)) {\n console.error(\n HelpFormatter.formatValidationError(value, paramName, validOptions, commandPath),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate numeric parameter\n */\n static validateNumber(value, paramName, min, max, commandPath) {\n const num = parseInt(value, 10);\n\n if (isNaN(num)) {\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid number for ${paramName}.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (min !== undefined && num < min) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at least ${min}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (max !== undefined && num > max) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at most ${max}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n return num;\n }\n\n /**\n * Validate required parameter\n */\n static validateRequired(value, paramName, commandPath) {\n if (!value || (typeof value === 'string' && value.trim() === '')) {\n console.error(\n HelpFormatter.formatError(\n `Missing required parameter: ${paramName}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate file path exists\n */\n static async validateFilePath(path, paramName, commandPath) {\n try {\n const fs = await import('fs/promises');\n await fs.access(path);\n } catch (error) {\n console.error(\n HelpFormatter.formatError(\n `File not found for ${paramName}: ${path}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate boolean flag\n */\n static validateBoolean(value, paramName, commandPath) {\n const lowerValue = value.toLowerCase();\n if (lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes') {\n return true;\n }\n if (lowerValue === 'false' || lowerValue === '0' || lowerValue === 'no') {\n return false;\n }\n\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid boolean for ${paramName}. Use: true, false, yes, no, 1, or 0.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n}\n"],"names":["HelpFormatter","ValidationHelper","validateEnum","value","paramName","validOptions","commandPath","includes","console","error","formatValidationError","process","exit","validateNumber","min","max","num","parseInt","isNaN","formatError","undefined","validateRequired","trim","validateFilePath","path","fs","access","validateBoolean","lowerValue","toLowerCase"],"mappings":"AAKA,SAASA,aAAa,QAAQ,sBAAsB;AAEpD,OAAO,MAAMC;IAIX,OAAOC,aAAaC,KAAK,EAAEC,SAAS,EAAEC,YAAY,EAAEC,WAAW,EAAE;QAC/D,IAAI,CAACD,aAAaE,QAAQ,CAACJ,QAAQ;YACjCK,QAAQC,KAAK,CACXT,cAAcU,qBAAqB,CAACP,OAAOC,WAAWC,cAAcC;YAEtEK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOC,eAAeV,KAAK,EAAEC,SAAS,EAAEU,GAAG,EAAEC,GAAG,EAAET,WAAW,EAAE;QAC7D,MAAMU,MAAMC,SAASd,OAAO;QAE5B,IAAIe,MAAMF,MAAM;YACdR,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,4BAA4B,EAAEC,UAAU,CAAC,CAAC,EACpDE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIE,QAAQM,aAAaJ,MAAMF,KAAK;YAClCN,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,kBAAkB,EAAEU,IAAI,OAAO,EAAEE,KAAK,EACnDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIG,QAAQK,aAAaJ,MAAMD,KAAK;YAClCP,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,iBAAiB,EAAEW,IAAI,OAAO,EAAEC,KAAK,EAClDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,OAAOI;IACT;IAKA,OAAOK,iBAAiBlB,KAAK,EAAEC,SAAS,EAAEE,WAAW,EAAE;QACrD,IAAI,CAACH,SAAU,OAAOA,UAAU,YAAYA,MAAMmB,IAAI,OAAO,IAAK;YAChEd,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,4BAA4B,EAAEf,WAAW,EAC1CE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,aAAaW,iBAAiBC,IAAI,EAAEpB,SAAS,EAAEE,WAAW,EAAE;QAC1D,IAAI;YACF,MAAMmB,KAAK,MAAM,MAAM,CAAC;YACxB,MAAMA,GAAGC,MAAM,CAACF;QAClB,EAAE,OAAOf,OAAO;YACdD,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,mBAAmB,EAAEf,UAAU,EAAE,EAAEoB,MAAM,EAC1ClB,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOe,gBAAgBxB,KAAK,EAAEC,SAAS,EAAEE,WAAW,EAAE;QACpD,MAAMsB,aAAazB,MAAM0B,WAAW;QACpC,IAAID,eAAe,UAAUA,eAAe,OAAOA,eAAe,OAAO;YACvE,OAAO;QACT;QACA,IAAIA,eAAe,WAAWA,eAAe,OAAOA,eAAe,MAAM;YACvE,OAAO;QACT;QAEApB,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,6BAA6B,EAAEC,UAAU,qCAAqC,CAAC,EACzFE,eAAe;QAGnBK,QAAQC,IAAI,CAAC;IACf;AACF"}MsB,aAAazB,MAAM0B,WAAW;QACpC,IAAID,eAAe,UAAUA,eAAe,OAAOA,eAAe,OAAO;YACvE,OAAO;QACT;QACA,IAAIA,eAAe,WAAWA,eAAe,OAAOA,eAAe,MAAM;YACvE,OAAO;QACT;QAEApB,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,6BAA6B,EAAEC,UAAU,qCAAqC,CAAC,EACzFE,eAAe;QAGnBK,QAAQC,IAAI,CAAC;IACf;AACF"}
1
+ {"version":3,"sources":["../../../src/cli/validation-helper.ts"],"sourcesContent":["/**\n * CLI Parameter Validation Helper\n * Provides standardized error messages for invalid parameters\n */\n\nimport { HelpFormatter } from './help-formatter.js';\n\nexport class ValidationHelper {\n /**\n * Validate enum parameter\n */\n static validateEnum(\n value: string,\n paramName: string,\n validOptions: string[],\n commandPath: string,\n ): void {\n if (!validOptions.includes(value)) {\n console.error(\n HelpFormatter.formatValidationError(value, paramName, validOptions, commandPath),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate numeric parameter\n */\n static validateNumber(\n value: string,\n paramName: string,\n min?: number,\n max?: number,\n commandPath?: string,\n ): number {\n const num = parseInt(value, 10);\n\n if (isNaN(num)) {\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid number for ${paramName}.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (min !== undefined && num < min) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at least ${min}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (max !== undefined && num > max) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at most ${max}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n return num;\n }\n\n /**\n * Validate required parameter\n */\n static validateRequired(value: any, paramName: string, commandPath?: string): void {\n if (!value || (typeof value === 'string' && value.trim() === '')) {\n console.error(\n HelpFormatter.formatError(\n `Missing required parameter: ${paramName}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate file path exists\n */\n static async validateFilePath(\n path: string,\n paramName: string,\n commandPath?: string,\n ): Promise<void> {\n try {\n const fs = await import('fs/promises');\n await fs.access(path);\n } catch (error) {\n console.error(\n HelpFormatter.formatError(\n `File not found for ${paramName}: ${path}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate boolean flag\n */\n static validateBoolean(value: string, paramName: string, commandPath?: string): boolean {\n const lowerValue = value.toLowerCase();\n if (lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes') {\n return true;\n }\n if (lowerValue === 'false' || lowerValue === '0' || lowerValue === 'no') {\n return false;\n }\n\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid boolean for ${paramName}. Use: true, false, yes, no, 1, or 0.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n}\n"],"names":["HelpFormatter","ValidationHelper","validateEnum","value","paramName","validOptions","commandPath","includes","console","error","formatValidationError","process","exit","validateNumber","min","max","num","parseInt","isNaN","formatError","undefined","validateRequired","trim","validateFilePath","path","fs","access","validateBoolean","lowerValue","toLowerCase"],"mappings":"AAKA,SAASA,aAAa,QAAQ,sBAAsB;AAEpD,OAAO,MAAMC;IAIX,OAAOC,aACLC,KAAa,EACbC,SAAiB,EACjBC,YAAsB,EACtBC,WAAmB,EACb;QACN,IAAI,CAACD,aAAaE,QAAQ,CAACJ,QAAQ;YACjCK,QAAQC,KAAK,CACXT,cAAcU,qBAAqB,CAACP,OAAOC,WAAWC,cAAcC;YAEtEK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOC,eACLV,KAAa,EACbC,SAAiB,EACjBU,GAAY,EACZC,GAAY,EACZT,WAAoB,EACZ;QACR,MAAMU,MAAMC,SAASd,OAAO;QAE5B,IAAIe,MAAMF,MAAM;YACdR,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,4BAA4B,EAAEC,UAAU,CAAC,CAAC,EACpDE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIE,QAAQM,aAAaJ,MAAMF,KAAK;YAClCN,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,kBAAkB,EAAEU,IAAI,OAAO,EAAEE,KAAK,EACnDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIG,QAAQK,aAAaJ,MAAMD,KAAK;YAClCP,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,iBAAiB,EAAEW,IAAI,OAAO,EAAEC,KAAK,EAClDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,OAAOI;IACT;IAKA,OAAOK,iBAAiBlB,KAAU,EAAEC,SAAiB,EAAEE,WAAoB,EAAQ;QACjF,IAAI,CAACH,SAAU,OAAOA,UAAU,YAAYA,MAAMmB,IAAI,OAAO,IAAK;YAChEd,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,4BAA4B,EAAEf,WAAW,EAC1CE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,aAAaW,iBACXC,IAAY,EACZpB,SAAiB,EACjBE,WAAoB,EACL;QACf,IAAI;YACF,MAAMmB,KAAK,MAAM,MAAM,CAAC;YACxB,MAAMA,GAAGC,MAAM,CAACF;QAClB,EAAE,OAAOf,OAAO;YACdD,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,mBAAmB,EAAEf,UAAU,EAAE,EAAEoB,MAAM,EAC1ClB,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOe,gBAAgBxB,KAAa,EAAEC,SAAiB,EAAEE,WAAoB,EAAW;QACtF,MAAMsB,aAAazB,MAAM0B,WAAW;QACpC,IAAID,eAAe,UAAUA,eAAe,OAAOA,eAAe,OAAO;YACvE,OAAO;QACT;QACA,IAAIA,eAAe,WAAWA,eAAe,OAAOA,eAAe,MAAM;YACvE,OAAO;QACT;QAEApB,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,6BAA6B,EAAEC,UAAU,qCAAqC,CAAC,EACzFE,eAAe;QAGnBK,QAAQC,IAAI,CAAC;IACf;AACF"}
@@ -12,7 +12,7 @@ try {
12
12
  BUILD_DATE = new Date().toISOString().split('T')[0];
13
13
  } catch (error) {
14
14
  console.warn('Warning: Could not read version from package.json, using fallback');
15
- VERSION = '2.0.0-alpha.91';
15
+ VERSION = '2.0.0-alpha.101';
16
16
  BUILD_DATE = new Date().toISOString().split('T')[0];
17
17
  }
18
18
  export { VERSION, BUILD_DATE };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/version.ts"],"sourcesContent":["/**\n * Centralized version management\n * Reads version from package.json to ensure consistency\n */\n\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\n// Get the directory of this module\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Read version from package.json\nlet VERSION: string;\nlet BUILD_DATE: string;\n\ntry {\n // Navigate to project root and read package.json\n const packageJsonPath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n VERSION = packageJson.version;\n BUILD_DATE = new Date().toISOString().split('T')[0];\n} catch (error) {\n // Fallback version if package.json can't be read\n console.warn('Warning: Could not read version from package.json, using fallback');\n VERSION = '2.0.0-alpha.91';\n BUILD_DATE = new Date().toISOString().split('T')[0];\n}\n\nexport { VERSION, BUILD_DATE };\n\n// Helper function to get formatted version string\nexport function getVersionString(includeV = true): string {\n return includeV ? `v${VERSION}` : VERSION;\n}\n\n// Helper function for version display in CLI\nexport function displayVersion(): void {\n console.log(getVersionString());\n}"],"names":["readFileSync","join","dirname","fileURLToPath","__filename","url","__dirname","VERSION","BUILD_DATE","packageJsonPath","packageJson","JSON","parse","version","Date","toISOString","split","error","console","warn","getVersionString","includeV","displayVersion","log"],"mappings":"AAKA,SAASA,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AACrC,SAASC,aAAa,QAAQ,MAAM;AAGpC,MAAMC,aAAaD,cAAc,YAAYE,GAAG;AAChD,MAAMC,YAAYJ,QAAQE;AAG1B,IAAIG;AACJ,IAAIC;AAEJ,IAAI;IAEF,MAAMC,kBAAkBR,KAAKK,WAAW;IACxC,MAAMI,cAAcC,KAAKC,KAAK,CAACZ,aAAaS,iBAAiB;IAC7DF,UAAUG,YAAYG,OAAO;IAC7BL,aAAa,IAAIM,OAAOC,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrD,EAAE,OAAOC,OAAO;IAEdC,QAAQC,IAAI,CAAC;IACbZ,UAAU;IACVC,aAAa,IAAIM,OAAOC,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrD;AAEA,SAAST,OAAO,EAAEC,UAAU,GAAG;AAG/B,OAAO,SAASY,iBAAiBC,WAAW,IAAI;IAC9C,OAAOA,WAAW,CAAC,CAAC,EAAEd,SAAS,GAAGA;AACpC;AAGA,OAAO,SAASe;IACdJ,QAAQK,GAAG,CAACH;AACd"}
1
+ {"version":3,"sources":["../../../src/core/version.js"],"sourcesContent":["/**\n * Centralized version management (JavaScript version)\n * Reads version from package.json to ensure consistency\n */\n\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\n// Get the directory of this module\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Read version from package.json\nlet VERSION;\nlet BUILD_DATE;\n\ntry {\n // Navigate to project root and read package.json\n const packageJsonPath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n VERSION = packageJson.version;\n BUILD_DATE = new Date().toISOString().split('T')[0];\n} catch (error) {\n // Fallback version if package.json can't be read\n console.warn('Warning: Could not read version from package.json, using fallback');\n VERSION = '2.0.0-alpha.101';\n BUILD_DATE = new Date().toISOString().split('T')[0];\n}\n\nexport { VERSION, BUILD_DATE };\n\n// Helper function to get formatted version string\nexport function getVersionString(includeV = true) {\n return includeV ? `v${VERSION}` : VERSION;\n}\n\n// Helper function for version display in CLI\nexport function displayVersion() {\n console.log(getVersionString());\n}"],"names":["readFileSync","join","dirname","fileURLToPath","__filename","url","__dirname","VERSION","BUILD_DATE","packageJsonPath","packageJson","JSON","parse","version","Date","toISOString","split","error","console","warn","getVersionString","includeV","displayVersion","log"],"mappings":"AAKA,SAASA,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AACrC,SAASC,aAAa,QAAQ,MAAM;AAGpC,MAAMC,aAAaD,cAAc,YAAYE,GAAG;AAChD,MAAMC,YAAYJ,QAAQE;AAG1B,IAAIG;AACJ,IAAIC;AAEJ,IAAI;IAEF,MAAMC,kBAAkBR,KAAKK,WAAW;IACxC,MAAMI,cAAcC,KAAKC,KAAK,CAACZ,aAAaS,iBAAiB;IAC7DF,UAAUG,YAAYG,OAAO;IAC7BL,aAAa,IAAIM,OAAOC,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrD,EAAE,OAAOC,OAAO;IAEdC,QAAQC,IAAI,CAAC;IACbZ,UAAU;IACVC,aAAa,IAAIM,OAAOC,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrD;AAEA,SAAST,OAAO,EAAEC,UAAU,GAAG;AAG/B,OAAO,SAASY,iBAAiBC,WAAW,IAAI;IAC9C,OAAOA,WAAW,CAAC,CAAC,EAAEd,SAAS,GAAGA;AACpC;AAGA,OAAO,SAASe;IACdJ,QAAQK,GAAG,CAACH;AACd"}
@@ -1,10 +1,40 @@
1
1
  import { db, initialize, retrieveMemories, computeEmbedding, loadConfig } from 'agentic-flow/dist/reasoningbank/index.js';
2
2
  import { v4 as uuidv4 } from 'uuid';
3
+ const queryCache = new Map();
4
+ const CACHE_SIZE = 100;
5
+ const CACHE_TTL = 60000;
6
+ const embeddingQueue = [];
7
+ let processingQueue = false;
3
8
  export async function initializeReasoningBank() {
4
9
  process.env.CLAUDE_FLOW_DB_PATH = '.swarm/memory.db';
5
10
  await initialize();
11
+ await optimizeDatabase();
6
12
  return true;
7
13
  }
14
+ async function optimizeDatabase() {
15
+ try {
16
+ const dbInstance = db.getDb();
17
+ dbInstance.exec(`
18
+ -- Index on confidence for sorting
19
+ CREATE INDEX IF NOT EXISTS idx_patterns_confidence
20
+ ON patterns(confidence DESC);
21
+
22
+ -- Index on usage_count for sorting
23
+ CREATE INDEX IF NOT EXISTS idx_patterns_usage
24
+ ON patterns(usage_count DESC);
25
+
26
+ -- Index on created_at for time-based queries
27
+ CREATE INDEX IF NOT EXISTS idx_patterns_created
28
+ ON patterns(created_at DESC);
29
+
30
+ -- Index on memory_id for embeddings lookup
31
+ CREATE INDEX IF NOT EXISTS idx_embeddings_memory
32
+ ON pattern_embeddings(memory_id);
33
+ `);
34
+ } catch (error) {
35
+ console.warn('[ReasoningBank] Failed to create indexes:', error.message);
36
+ }
37
+ }
8
38
  export async function storeMemory(key, value, options = {}) {
9
39
  const memoryId = `mem_${uuidv4()}`;
10
40
  const memory = {
@@ -22,6 +52,29 @@ export async function storeMemory(key, value, options = {}) {
22
52
  created_at: new Date().toISOString()
23
53
  };
24
54
  db.upsertMemory(memory);
55
+ queryCache.clear();
56
+ if (options.async !== false) {
57
+ embeddingQueue.push({
58
+ memoryId,
59
+ key,
60
+ value
61
+ });
62
+ processEmbeddingQueue();
63
+ } else {
64
+ await computeAndStoreEmbedding(memoryId, key, value);
65
+ }
66
+ return memoryId;
67
+ }
68
+ async function processEmbeddingQueue() {
69
+ if (processingQueue || embeddingQueue.length === 0) return;
70
+ processingQueue = true;
71
+ while(embeddingQueue.length > 0){
72
+ const batch = embeddingQueue.splice(0, 5);
73
+ await Promise.allSettled(batch.map(({ memoryId, key, value })=>computeAndStoreEmbedding(memoryId, key, value)));
74
+ }
75
+ processingQueue = false;
76
+ }
77
+ async function computeAndStoreEmbedding(memoryId, key, value) {
25
78
  try {
26
79
  const config = loadConfig();
27
80
  const embeddingModel = config.embeddings.provider || 'claude';
@@ -35,18 +88,25 @@ export async function storeMemory(key, value, options = {}) {
35
88
  created_at: new Date().toISOString()
36
89
  });
37
90
  } catch (error) {
38
- console.warn('[ReasoningBank] Warning: Could not compute embedding:', error.message);
91
+ console.warn(`[ReasoningBank] Failed to compute embedding for ${memoryId}:`, error.message);
39
92
  }
40
- return memoryId;
41
93
  }
42
94
  export async function queryMemories(searchQuery, options = {}) {
95
+ const cached = getCachedQuery(searchQuery, options);
96
+ if (cached) {
97
+ return cached;
98
+ }
99
+ const timeout = options.timeout || 3000;
43
100
  try {
44
- const memories = await retrieveMemories(searchQuery, {
45
- domain: options.domain || 'general',
46
- agent: options.agent || 'memory-agent',
47
- k: options.limit || 10
48
- });
49
- return memories.map((mem)=>{
101
+ const memories = await Promise.race([
102
+ retrieveMemories(searchQuery, {
103
+ domain: options.domain || 'general',
104
+ agent: options.agent || 'memory-agent',
105
+ k: options.limit || 10
106
+ }),
107
+ new Promise((_, reject)=>setTimeout(()=>reject(new Error('Query timeout')), timeout))
108
+ ]);
109
+ const results = memories.map((mem)=>{
50
110
  try {
51
111
  const data = JSON.parse(mem.pattern_data);
52
112
  return {
@@ -63,33 +123,90 @@ export async function queryMemories(searchQuery, options = {}) {
63
123
  return null;
64
124
  }
65
125
  }).filter(Boolean);
126
+ if (results.length === 0) {
127
+ console.warn('[ReasoningBank] Semantic search returned 0 results, trying SQL fallback');
128
+ const fallbackResults = await queryMemoriesFast(searchQuery, options);
129
+ setCachedQuery(searchQuery, options, fallbackResults);
130
+ return fallbackResults;
131
+ }
132
+ setCachedQuery(searchQuery, options, results);
133
+ return results;
66
134
  } catch (error) {
67
- console.warn('[ReasoningBank] Semantic search failed, using simple query:', error.message);
68
- const dbInstance = db.getDb();
69
- const rows = dbInstance.prepare(`
70
- SELECT * FROM patterns
71
- WHERE pattern_data LIKE ?
72
- ORDER BY confidence DESC, usage_count DESC
73
- LIMIT ?
74
- `).all(`%${searchQuery}%`, options.limit || 10);
75
- return rows.map((row)=>{
76
- try {
77
- const data = JSON.parse(row.pattern_data);
78
- return {
79
- id: row.id,
80
- key: data.key,
81
- value: data.value,
82
- namespace: data.namespace,
83
- confidence: row.confidence,
84
- usage_count: row.usage_count,
85
- created_at: row.created_at
86
- };
87
- } catch {
88
- return null;
89
- }
90
- }).filter(Boolean);
135
+ console.warn('[ReasoningBank] Using fast SQL fallback:', error.message);
136
+ const results = await queryMemoriesFast(searchQuery, options);
137
+ setCachedQuery(searchQuery, options, results);
138
+ return results;
91
139
  }
92
140
  }
141
+ async function queryMemoriesFast(searchQuery, options = {}) {
142
+ const dbInstance = db.getDb();
143
+ const limit = options.limit || 10;
144
+ const namespace = options.namespace;
145
+ let query = `
146
+ SELECT
147
+ id,
148
+ pattern_data,
149
+ confidence,
150
+ usage_count,
151
+ created_at
152
+ FROM patterns
153
+ WHERE 1=1
154
+ `;
155
+ const params = [];
156
+ if (namespace) {
157
+ query += ` AND pattern_data LIKE ?`;
158
+ params.push(`%"namespace":"${namespace}"%`);
159
+ }
160
+ query += ` AND (
161
+ pattern_data LIKE ? OR
162
+ pattern_data LIKE ?
163
+ )`;
164
+ params.push(`%"key":"%${searchQuery}%"%`, `%"value":"%${searchQuery}%"%`);
165
+ query += ` ORDER BY confidence DESC, usage_count DESC LIMIT ?`;
166
+ params.push(limit);
167
+ const rows = dbInstance.prepare(query).all(...params);
168
+ return rows.map((row)=>{
169
+ try {
170
+ const data = JSON.parse(row.pattern_data);
171
+ return {
172
+ id: row.id,
173
+ key: data.key,
174
+ value: data.value,
175
+ namespace: data.namespace,
176
+ confidence: row.confidence,
177
+ usage_count: row.usage_count,
178
+ created_at: row.created_at
179
+ };
180
+ } catch {
181
+ return null;
182
+ }
183
+ }).filter(Boolean);
184
+ }
185
+ function getCachedQuery(searchQuery, options) {
186
+ const cacheKey = JSON.stringify({
187
+ searchQuery,
188
+ options
189
+ });
190
+ const cached = queryCache.get(cacheKey);
191
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
192
+ return cached.results;
193
+ }
194
+ return null;
195
+ }
196
+ function setCachedQuery(searchQuery, options, results) {
197
+ const cacheKey = JSON.stringify({
198
+ searchQuery,
199
+ options
200
+ });
201
+ if (queryCache.size >= CACHE_SIZE) {
202
+ const firstKey = queryCache.keys().next().value;
203
+ queryCache.delete(firstKey);
204
+ }
205
+ queryCache.set(cacheKey, {
206
+ results,
207
+ timestamp: Date.now()
208
+ });
209
+ }
93
210
  export async function listMemories(options = {}) {
94
211
  const dbInstance = db.getDb();
95
212
  const limit = options.limit || 10;
@@ -140,5 +257,64 @@ export async function getStatus() {
140
257
  total_trajectories: trajectoryCount.count || 0
141
258
  };
142
259
  }
260
+ export async function checkReasoningBankTables() {
261
+ try {
262
+ const dbInstance = db.getDb();
263
+ const requiredTables = [
264
+ 'patterns',
265
+ 'pattern_embeddings',
266
+ 'pattern_links',
267
+ 'task_trajectories',
268
+ 'matts_runs',
269
+ 'consolidation_runs',
270
+ 'metrics_log'
271
+ ];
272
+ const existingTables = dbInstance.prepare(`
273
+ SELECT name FROM sqlite_master
274
+ WHERE type='table'
275
+ `).all().map((row)=>row.name);
276
+ const missingTables = requiredTables.filter((table)=>!existingTables.includes(table));
277
+ return {
278
+ exists: missingTables.length === 0,
279
+ existingTables,
280
+ missingTables,
281
+ requiredTables
282
+ };
283
+ } catch (error) {
284
+ return {
285
+ exists: false,
286
+ existingTables: [],
287
+ missingTables: [],
288
+ requiredTables: [],
289
+ error: error.message
290
+ };
291
+ }
292
+ }
293
+ export async function migrateReasoningBank() {
294
+ try {
295
+ const tableCheck = await checkReasoningBankTables();
296
+ if (tableCheck.exists) {
297
+ return {
298
+ success: true,
299
+ message: 'All ReasoningBank tables already exist',
300
+ migrated: false
301
+ };
302
+ }
303
+ await initializeReasoningBank();
304
+ const afterCheck = await checkReasoningBankTables();
305
+ return {
306
+ success: afterCheck.exists,
307
+ message: `Migration completed: ${tableCheck.missingTables.length} tables added`,
308
+ migrated: true,
309
+ addedTables: tableCheck.missingTables
310
+ };
311
+ } catch (error) {
312
+ return {
313
+ success: false,
314
+ message: `Migration failed: ${error.message}`,
315
+ error: error.message
316
+ };
317
+ }
318
+ }
143
319
 
144
320
  //# sourceMappingURL=reasoningbank-adapter.js.map