claude-flow-novice 2.0.3 ā 2.0.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.
- package/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -1,287 +1,225 @@
|
|
|
1
1
|
// memory-consolidation.js - Database consolidation utility
|
|
2
|
-
import { printSuccess, printError, printWarning, printInfo } from
|
|
3
|
-
import { promises as fs } from
|
|
4
|
-
import path from
|
|
5
|
-
import { existsSync } from
|
|
2
|
+
import { printSuccess, printError, printWarning, printInfo } from "../utils.js";
|
|
3
|
+
import { promises as fs } from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { existsSync } from "../node-compat.js";
|
|
6
6
|
// Dynamic imports for optional dependencies
|
|
7
7
|
let sqlite3;
|
|
8
8
|
let sqliteOpen;
|
|
9
|
-
|
|
10
9
|
async function loadSqliteModules() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
try {
|
|
11
|
+
const sqlite3Module = await import("sqlite3");
|
|
12
|
+
sqlite3 = sqlite3Module.default;
|
|
13
|
+
const sqliteModule = await import("sqlite");
|
|
14
|
+
sqliteOpen = sqliteModule.open;
|
|
15
|
+
return true;
|
|
16
|
+
} catch (err) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
20
19
|
}
|
|
21
|
-
|
|
22
20
|
/**
|
|
23
21
|
* Memory database consolidation strategy
|
|
24
22
|
* Consolidates multiple memory storage locations into a unified structure
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
constructor() {
|
|
28
|
-
this.primaryLocations = {
|
|
29
|
-
json: './memory/memory-store.json',
|
|
30
|
-
sqlite: './.claude-flow/memory/unified-memory.db',
|
|
31
|
-
backup: './.claude-flow/memory/backups/',
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
this.knownLocations = [
|
|
35
|
-
// JSON stores
|
|
36
|
-
'./memory/memory-store.json',
|
|
37
|
-
'./.claude-flow/memory/store.json',
|
|
38
|
-
|
|
39
|
-
// SQLite databases
|
|
40
|
-
'./.swarm/memory.db',
|
|
41
|
-
'./.hive-mind/memory.db',
|
|
42
|
-
'./.hive-mind/hive.db',
|
|
43
|
-
'./.ruv-swarm/swarm.db',
|
|
44
|
-
'./data/hive-mind.db',
|
|
45
|
-
|
|
46
|
-
// Legacy locations
|
|
47
|
-
'./memory.json',
|
|
48
|
-
'./data/memory.json',
|
|
49
|
-
];
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
23
|
+
*/ export class MemoryConsolidator {
|
|
24
|
+
/**
|
|
53
25
|
* Scan for all memory storage locations
|
|
54
|
-
*/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
found.total++;
|
|
76
|
-
found.sizeBytes += stats.size;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Scan for additional .db files
|
|
81
|
-
try {
|
|
82
|
-
const dbFiles = await this.findDatabaseFiles('.');
|
|
83
|
-
for (const dbFile of dbFiles) {
|
|
84
|
-
if (!this.knownLocations.includes(dbFile)) {
|
|
85
|
-
const stats = await fs.stat(dbFile);
|
|
86
|
-
found.sqlite.push({
|
|
87
|
-
path: dbFile,
|
|
88
|
-
size: stats.size,
|
|
89
|
-
modified: stats.mtime,
|
|
90
|
-
});
|
|
91
|
-
found.total++;
|
|
92
|
-
found.sizeBytes += stats.size;
|
|
26
|
+
*/ async scanMemoryLocations() {
|
|
27
|
+
const found = {
|
|
28
|
+
json: [],
|
|
29
|
+
sqlite: [],
|
|
30
|
+
total: 0,
|
|
31
|
+
sizeBytes: 0
|
|
32
|
+
};
|
|
33
|
+
// Check known locations
|
|
34
|
+
for (const location of this.knownLocations){
|
|
35
|
+
if (existsSync(location)) {
|
|
36
|
+
const stats = await fs.stat(location);
|
|
37
|
+
const type = location.endsWith('.db') ? 'sqlite' : 'json';
|
|
38
|
+
found[type].push({
|
|
39
|
+
path: location,
|
|
40
|
+
size: stats.size,
|
|
41
|
+
modified: stats.mtime
|
|
42
|
+
});
|
|
43
|
+
found.total++;
|
|
44
|
+
found.sizeBytes += stats.size;
|
|
45
|
+
}
|
|
93
46
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
47
|
+
// Scan for additional .db files
|
|
48
|
+
try {
|
|
49
|
+
const dbFiles = await this.findDatabaseFiles('.');
|
|
50
|
+
for (const dbFile of dbFiles){
|
|
51
|
+
if (!this.knownLocations.includes(dbFile)) {
|
|
52
|
+
const stats = await fs.stat(dbFile);
|
|
53
|
+
found.sqlite.push({
|
|
54
|
+
path: dbFile,
|
|
55
|
+
size: stats.size,
|
|
56
|
+
modified: stats.mtime
|
|
57
|
+
});
|
|
58
|
+
found.total++;
|
|
59
|
+
found.sizeBytes += stats.size;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} catch (err) {
|
|
63
|
+
// Ignore scan errors
|
|
64
|
+
}
|
|
65
|
+
return found;
|
|
97
66
|
}
|
|
98
|
-
|
|
99
|
-
return found;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
67
|
+
/**
|
|
103
68
|
* Find all .db files recursively
|
|
104
|
-
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
69
|
+
*/ async findDatabaseFiles(dir, files = []) {
|
|
70
|
+
try {
|
|
71
|
+
const items = await fs.readdir(dir);
|
|
72
|
+
for (const item of items){
|
|
73
|
+
// Skip node_modules and hidden directories
|
|
74
|
+
if (item === 'node_modules' || item.startsWith('.git')) continue;
|
|
75
|
+
const fullPath = path.join(dir, item);
|
|
76
|
+
const stat = await fs.stat(fullPath);
|
|
77
|
+
if (stat.isDirectory() && item.startsWith('.')) {
|
|
78
|
+
// Check hidden directories for db files
|
|
79
|
+
await this.findDatabaseFiles(fullPath, files);
|
|
80
|
+
} else if (item.endsWith('.db')) {
|
|
81
|
+
files.push(fullPath);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
} catch (err) {
|
|
85
|
+
// Ignore permission errors
|
|
121
86
|
}
|
|
122
|
-
|
|
123
|
-
} catch (err) {
|
|
124
|
-
// Ignore permission errors
|
|
87
|
+
return files;
|
|
125
88
|
}
|
|
126
|
-
|
|
127
|
-
return files;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
89
|
+
/**
|
|
131
90
|
* Create consolidation plan
|
|
132
|
-
*/
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
91
|
+
*/ async createConsolidationPlan(locations) {
|
|
92
|
+
const plan = {
|
|
93
|
+
steps: [],
|
|
94
|
+
estimatedTime: 0,
|
|
95
|
+
totalData: locations.sizeBytes,
|
|
96
|
+
backupRequired: locations.total > 0
|
|
97
|
+
};
|
|
98
|
+
// Step 1: Backup existing data
|
|
99
|
+
if (plan.backupRequired) {
|
|
100
|
+
plan.steps.push({
|
|
101
|
+
action: 'backup',
|
|
102
|
+
description: 'Create backups of all existing memory stores',
|
|
103
|
+
sources: [
|
|
104
|
+
...locations.json,
|
|
105
|
+
...locations.sqlite
|
|
106
|
+
].map((l)=>l.path),
|
|
107
|
+
destination: this.primaryLocations.backup
|
|
108
|
+
});
|
|
109
|
+
plan.estimatedTime += 2; // seconds
|
|
110
|
+
}
|
|
111
|
+
// Step 2: Convert JSON stores to unified format
|
|
112
|
+
if (locations.json.length > 0) {
|
|
113
|
+
plan.steps.push({
|
|
114
|
+
action: 'convert-json',
|
|
115
|
+
description: 'Convert JSON memory stores to unified format',
|
|
116
|
+
sources: locations.json.map((l)=>l.path),
|
|
117
|
+
destination: this.primaryLocations.sqlite
|
|
118
|
+
});
|
|
119
|
+
plan.estimatedTime += locations.json.length * 1;
|
|
120
|
+
}
|
|
121
|
+
// Step 3: Merge SQLite databases
|
|
122
|
+
if (locations.sqlite.length > 0) {
|
|
123
|
+
plan.steps.push({
|
|
124
|
+
action: 'merge-sqlite',
|
|
125
|
+
description: 'Merge SQLite databases into unified store',
|
|
126
|
+
sources: locations.sqlite.map((l)=>l.path),
|
|
127
|
+
destination: this.primaryLocations.sqlite
|
|
128
|
+
});
|
|
129
|
+
plan.estimatedTime += locations.sqlite.length * 2;
|
|
130
|
+
}
|
|
131
|
+
// Step 4: Create indices for performance
|
|
132
|
+
plan.steps.push({
|
|
133
|
+
action: 'optimize',
|
|
134
|
+
description: 'Create indices and optimize unified database',
|
|
135
|
+
destination: this.primaryLocations.sqlite
|
|
136
|
+
});
|
|
137
|
+
plan.estimatedTime += 1;
|
|
138
|
+
// Step 5: Update configuration
|
|
139
|
+
plan.steps.push({
|
|
140
|
+
action: 'update-config',
|
|
141
|
+
description: 'Update memory configuration to use unified store',
|
|
142
|
+
config: {
|
|
143
|
+
memoryStore: this.primaryLocations.sqlite,
|
|
144
|
+
backupLocation: this.primaryLocations.backup,
|
|
145
|
+
legacySupport: true
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return plan;
|
|
172
149
|
}
|
|
173
|
-
|
|
174
|
-
// Step 4: Create indices for performance
|
|
175
|
-
plan.steps.push({
|
|
176
|
-
action: 'optimize',
|
|
177
|
-
description: 'Create indices and optimize unified database',
|
|
178
|
-
destination: this.primaryLocations.sqlite,
|
|
179
|
-
});
|
|
180
|
-
plan.estimatedTime += 1;
|
|
181
|
-
|
|
182
|
-
// Step 5: Update configuration
|
|
183
|
-
plan.steps.push({
|
|
184
|
-
action: 'update-config',
|
|
185
|
-
description: 'Update memory configuration to use unified store',
|
|
186
|
-
config: {
|
|
187
|
-
memoryStore: this.primaryLocations.sqlite,
|
|
188
|
-
backupLocation: this.primaryLocations.backup,
|
|
189
|
-
legacySupport: true,
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
return plan;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
150
|
+
/**
|
|
197
151
|
* Execute consolidation plan
|
|
198
|
-
*/
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
152
|
+
*/ async executeConsolidation(plan, options = {}) {
|
|
153
|
+
const results = {
|
|
154
|
+
success: false,
|
|
155
|
+
stepsCompleted: 0,
|
|
156
|
+
errors: [],
|
|
157
|
+
backupPath: null,
|
|
158
|
+
newStorePath: null
|
|
159
|
+
};
|
|
160
|
+
try {
|
|
161
|
+
for (const step of plan.steps){
|
|
162
|
+
printInfo(`Executing: ${step.description}`);
|
|
163
|
+
switch(step.action){
|
|
164
|
+
case 'backup':
|
|
165
|
+
results.backupPath = await this.createBackups(step.sources, step.destination);
|
|
166
|
+
break;
|
|
167
|
+
case 'convert-json':
|
|
168
|
+
await this.convertJsonToSqlite(step.sources, step.destination);
|
|
169
|
+
break;
|
|
170
|
+
case 'merge-sqlite':
|
|
171
|
+
await this.mergeSqliteDatabases(step.sources, step.destination);
|
|
172
|
+
break;
|
|
173
|
+
case 'optimize':
|
|
174
|
+
await this.optimizeDatabase(step.destination);
|
|
175
|
+
break;
|
|
176
|
+
case 'update-config':
|
|
177
|
+
await this.updateConfiguration(step.config);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
results.stepsCompleted++;
|
|
181
|
+
printSuccess(`ā ${step.description}`);
|
|
182
|
+
}
|
|
183
|
+
results.success = true;
|
|
184
|
+
results.newStorePath = this.primaryLocations.sqlite;
|
|
185
|
+
} catch (err) {
|
|
186
|
+
results.errors.push(err.message);
|
|
187
|
+
printError(`Failed at step ${results.stepsCompleted + 1}: ${err.message}`);
|
|
232
188
|
}
|
|
233
|
-
|
|
234
|
-
results.stepsCompleted++;
|
|
235
|
-
printSuccess(`ā ${step.description}`);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
results.success = true;
|
|
239
|
-
results.newStorePath = this.primaryLocations.sqlite;
|
|
240
|
-
} catch (err) {
|
|
241
|
-
results.errors.push(err.message);
|
|
242
|
-
printError(`Failed at step ${results.stepsCompleted + 1}: ${err.message}`);
|
|
189
|
+
return results;
|
|
243
190
|
}
|
|
244
|
-
|
|
245
|
-
return results;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
191
|
+
/**
|
|
249
192
|
* Create backups of all memory stores
|
|
250
|
-
*/
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
193
|
+
*/ async createBackups(sources, backupDir) {
|
|
194
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
195
|
+
const backupPath = path.join(backupDir, `backup-${timestamp}`);
|
|
196
|
+
await fs.mkdir(backupPath, {
|
|
197
|
+
recursive: true
|
|
198
|
+
});
|
|
199
|
+
for (const source of sources){
|
|
200
|
+
if (existsSync(source)) {
|
|
201
|
+
const filename = path.basename(source);
|
|
202
|
+
const dest = path.join(backupPath, filename);
|
|
203
|
+
await fs.copyFile(source, dest);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return backupPath;
|
|
263
207
|
}
|
|
264
|
-
|
|
265
|
-
return backupPath;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/**
|
|
208
|
+
/**
|
|
269
209
|
* Convert JSON memory stores to SQLite
|
|
270
|
-
*/
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
// Create unified schema
|
|
284
|
-
await db.exec(`
|
|
210
|
+
*/ async convertJsonToSqlite(jsonFiles, dbPath) {
|
|
211
|
+
if (!sqlite3 || !sqliteOpen) {
|
|
212
|
+
throw new Error('SQLite modules not available. Install sqlite3 and sqlite packages.');
|
|
213
|
+
}
|
|
214
|
+
await fs.mkdir(path.dirname(dbPath), {
|
|
215
|
+
recursive: true
|
|
216
|
+
});
|
|
217
|
+
const db = await sqliteOpen({
|
|
218
|
+
filename: dbPath,
|
|
219
|
+
driver: sqlite3.Database
|
|
220
|
+
});
|
|
221
|
+
// Create unified schema
|
|
222
|
+
await db.exec(`
|
|
285
223
|
CREATE TABLE IF NOT EXISTS memory_entries (
|
|
286
224
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
287
225
|
key TEXT NOT NULL,
|
|
@@ -296,72 +234,53 @@ export class MemoryConsolidator {
|
|
|
296
234
|
CREATE INDEX IF NOT EXISTS idx_timestamp ON memory_entries(timestamp);
|
|
297
235
|
CREATE INDEX IF NOT EXISTS idx_key ON memory_entries(key);
|
|
298
236
|
`);
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
const data = JSON.parse(content);
|
|
307
|
-
|
|
308
|
-
const stmt = await db.prepare(`
|
|
237
|
+
// Import each JSON file
|
|
238
|
+
for (const jsonFile of jsonFiles){
|
|
239
|
+
if (!existsSync(jsonFile)) continue;
|
|
240
|
+
try {
|
|
241
|
+
const content = await fs.readFile(jsonFile, 'utf8');
|
|
242
|
+
const data = JSON.parse(content);
|
|
243
|
+
const stmt = await db.prepare(`
|
|
309
244
|
INSERT OR REPLACE INTO memory_entries (key, value, namespace, timestamp, source)
|
|
310
245
|
VALUES (?, ?, ?, ?, ?)
|
|
311
246
|
`);
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
);
|
|
322
|
-
}
|
|
247
|
+
for (const [namespace, entries] of Object.entries(data)){
|
|
248
|
+
for (const entry of entries){
|
|
249
|
+
await stmt.run(entry.key, entry.value, entry.namespace || namespace, entry.timestamp, jsonFile);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
await stmt.finalize();
|
|
253
|
+
} catch (err) {
|
|
254
|
+
printWarning(`Failed to import ${jsonFile}: ${err.message}`);
|
|
255
|
+
}
|
|
323
256
|
}
|
|
324
|
-
|
|
325
|
-
await stmt.finalize();
|
|
326
|
-
} catch (err) {
|
|
327
|
-
printWarning(`Failed to import ${jsonFile}: ${err.message}`);
|
|
328
|
-
}
|
|
257
|
+
await db.close();
|
|
329
258
|
}
|
|
330
|
-
|
|
331
|
-
await db.close();
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/**
|
|
259
|
+
/**
|
|
335
260
|
* Merge multiple SQLite databases
|
|
336
|
-
*/
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
const alias = `db_${path.basename(dbFile, '.db')}`;
|
|
353
|
-
await db.exec(`ATTACH DATABASE '${dbFile}' AS ${alias}`);
|
|
354
|
-
|
|
355
|
-
// Get tables from source database
|
|
356
|
-
const tables = await db.all(`
|
|
261
|
+
*/ async mergeSqliteDatabases(dbFiles, targetDb) {
|
|
262
|
+
if (!sqlite3 || !sqliteOpen) {
|
|
263
|
+
throw new Error('SQLite modules not available. Install sqlite3 and sqlite packages.');
|
|
264
|
+
}
|
|
265
|
+
const db = await sqliteOpen({
|
|
266
|
+
filename: targetDb,
|
|
267
|
+
driver: sqlite3.Database
|
|
268
|
+
});
|
|
269
|
+
for (const dbFile of dbFiles){
|
|
270
|
+
if (!existsSync(dbFile) || dbFile === targetDb) continue;
|
|
271
|
+
try {
|
|
272
|
+
// Attach the source database
|
|
273
|
+
const alias = `db_${path.basename(dbFile, '.db')}`;
|
|
274
|
+
await db.exec(`ATTACH DATABASE '${dbFile}' AS ${alias}`);
|
|
275
|
+
// Get tables from source database
|
|
276
|
+
const tables = await db.all(`
|
|
357
277
|
SELECT name FROM ${alias}.sqlite_master
|
|
358
278
|
WHERE type='table' AND name LIKE '%memory%'
|
|
359
279
|
`);
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
await db.exec(`
|
|
280
|
+
// Copy data from each memory-related table
|
|
281
|
+
for (const table of tables){
|
|
282
|
+
try {
|
|
283
|
+
await db.exec(`
|
|
365
284
|
INSERT OR IGNORE INTO memory_entries (key, value, namespace, timestamp, source)
|
|
366
285
|
SELECT
|
|
367
286
|
COALESCE(key, ''),
|
|
@@ -372,35 +291,29 @@ export class MemoryConsolidator {
|
|
|
372
291
|
FROM ${alias}.${table.name}
|
|
373
292
|
WHERE key IS NOT NULL AND value IS NOT NULL
|
|
374
293
|
`);
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
294
|
+
} catch (err) {
|
|
295
|
+
// Table structure might be different, skip
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
await db.exec(`DETACH DATABASE ${alias}`);
|
|
299
|
+
} catch (err) {
|
|
300
|
+
printWarning(`Failed to merge ${dbFile}: ${err.message}`);
|
|
301
|
+
}
|
|
378
302
|
}
|
|
379
|
-
|
|
380
|
-
await db.exec(`DETACH DATABASE ${alias}`);
|
|
381
|
-
} catch (err) {
|
|
382
|
-
printWarning(`Failed to merge ${dbFile}: ${err.message}`);
|
|
383
|
-
}
|
|
303
|
+
await db.close();
|
|
384
304
|
}
|
|
385
|
-
|
|
386
|
-
await db.close();
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
/**
|
|
305
|
+
/**
|
|
390
306
|
* Optimize the unified database
|
|
391
|
-
*/
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
// Add performance optimizations
|
|
403
|
-
await db.exec(`
|
|
307
|
+
*/ async optimizeDatabase(dbPath) {
|
|
308
|
+
if (!sqlite3 || !sqliteOpen) {
|
|
309
|
+
throw new Error('SQLite modules not available. Install sqlite3 and sqlite packages.');
|
|
310
|
+
}
|
|
311
|
+
const db = await sqliteOpen({
|
|
312
|
+
filename: dbPath,
|
|
313
|
+
driver: sqlite3.Database
|
|
314
|
+
});
|
|
315
|
+
// Add performance optimizations
|
|
316
|
+
await db.exec(`
|
|
404
317
|
-- Enable Write-Ahead Logging for better performance
|
|
405
318
|
PRAGMA journal_mode = WAL;
|
|
406
319
|
PRAGMA synchronous = NORMAL;
|
|
@@ -413,219 +326,195 @@ export class MemoryConsolidator {
|
|
|
413
326
|
CREATE INDEX IF NOT EXISTS idx_key_value ON memory_entries(key, value);
|
|
414
327
|
CREATE INDEX IF NOT EXISTS idx_namespace_timestamp ON memory_entries(namespace, timestamp);
|
|
415
328
|
`);
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
/**
|
|
329
|
+
await db.close();
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
421
332
|
* Update configuration to use unified store
|
|
422
|
-
*/
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
333
|
+
*/ async updateConfiguration(config) {
|
|
334
|
+
const configPath = './.claude-flow/memory-config.json';
|
|
335
|
+
await fs.mkdir(path.dirname(configPath), {
|
|
336
|
+
recursive: true
|
|
337
|
+
});
|
|
338
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
339
|
+
// Create symlinks for backward compatibility
|
|
340
|
+
if (config.legacySupport) {
|
|
341
|
+
try {
|
|
342
|
+
// Create symlink from old JSON location to new
|
|
343
|
+
if (existsSync('./memory/memory-store.json')) {
|
|
344
|
+
await fs.rename('./memory/memory-store.json', './memory/memory-store.json.old');
|
|
345
|
+
}
|
|
346
|
+
// Note: We don't create actual symlinks to SQLite as JSON/SQLite formats differ
|
|
347
|
+
// Instead, the memory manager will check the config and use the unified store
|
|
348
|
+
} catch (err) {
|
|
349
|
+
// Ignore symlink errors
|
|
350
|
+
}
|
|
435
351
|
}
|
|
436
|
-
// Note: We don't create actual symlinks to SQLite as JSON/SQLite formats differ
|
|
437
|
-
// Instead, the memory manager will check the config and use the unified store
|
|
438
|
-
} catch (err) {
|
|
439
|
-
// Ignore symlink errors
|
|
440
|
-
}
|
|
441
352
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
/**
|
|
353
|
+
/**
|
|
445
354
|
* Generate consolidation report
|
|
446
|
-
*/
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
report.push('š Consolidation Plan:');
|
|
459
|
-
for (const step of plan.steps) {
|
|
460
|
-
report.push(` ā ${step.description}`);
|
|
461
|
-
}
|
|
462
|
-
report.push(` ⢠Estimated time: ${plan.estimatedTime} seconds\n`);
|
|
463
|
-
|
|
464
|
-
if (executionResults) {
|
|
465
|
-
report.push('ā
Execution Results:');
|
|
466
|
-
report.push(` ⢠Success: ${executionResults.success ? 'Yes' : 'No'}`);
|
|
467
|
-
report.push(` ⢠Steps completed: ${executionResults.stepsCompleted}/${plan.steps.length}`);
|
|
468
|
-
|
|
469
|
-
if (executionResults.backupPath) {
|
|
470
|
-
report.push(` ⢠Backup location: ${executionResults.backupPath}`);
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
if (executionResults.newStorePath) {
|
|
474
|
-
report.push(` ⢠Unified store: ${executionResults.newStorePath}`);
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
if (executionResults.errors.length > 0) {
|
|
478
|
-
report.push('\nā Errors:');
|
|
479
|
-
for (const error of executionResults.errors) {
|
|
480
|
-
report.push(` ⢠${error}`);
|
|
355
|
+
*/ generateReport(scanResults, plan, executionResults) {
|
|
356
|
+
const report = [];
|
|
357
|
+
report.push('š Memory Consolidation Report');
|
|
358
|
+
report.push('================================\n');
|
|
359
|
+
report.push('š Discovered Memory Stores:');
|
|
360
|
+
report.push(` ⢠JSON files: ${scanResults.json.length}`);
|
|
361
|
+
report.push(` ⢠SQLite databases: ${scanResults.sqlite.length}`);
|
|
362
|
+
report.push(` ⢠Total size: ${(scanResults.sizeBytes / 1024 / 1024).toFixed(2)} MB\n`);
|
|
363
|
+
report.push('š Consolidation Plan:');
|
|
364
|
+
for (const step of plan.steps){
|
|
365
|
+
report.push(` ā ${step.description}`);
|
|
481
366
|
}
|
|
482
|
-
|
|
367
|
+
report.push(` ⢠Estimated time: ${plan.estimatedTime} seconds\n`);
|
|
368
|
+
if (executionResults) {
|
|
369
|
+
report.push('ā
Execution Results:');
|
|
370
|
+
report.push(` ⢠Success: ${executionResults.success ? 'Yes' : 'No'}`);
|
|
371
|
+
report.push(` ⢠Steps completed: ${executionResults.stepsCompleted}/${plan.steps.length}`);
|
|
372
|
+
if (executionResults.backupPath) {
|
|
373
|
+
report.push(` ⢠Backup location: ${executionResults.backupPath}`);
|
|
374
|
+
}
|
|
375
|
+
if (executionResults.newStorePath) {
|
|
376
|
+
report.push(` ⢠Unified store: ${executionResults.newStorePath}`);
|
|
377
|
+
}
|
|
378
|
+
if (executionResults.errors.length > 0) {
|
|
379
|
+
report.push('\nā Errors:');
|
|
380
|
+
for (const error of executionResults.errors){
|
|
381
|
+
report.push(` ⢠${error}`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return report.join('\n');
|
|
386
|
+
}
|
|
387
|
+
constructor(){
|
|
388
|
+
this.primaryLocations = {
|
|
389
|
+
json: './memory/memory-store.json',
|
|
390
|
+
sqlite: './.claude-flow/memory/unified-memory.db',
|
|
391
|
+
backup: './.claude-flow/memory/backups/'
|
|
392
|
+
};
|
|
393
|
+
this.knownLocations = [
|
|
394
|
+
// JSON stores
|
|
395
|
+
'./memory/memory-store.json',
|
|
396
|
+
'./.claude-flow/memory/store.json',
|
|
397
|
+
// SQLite databases
|
|
398
|
+
'./.swarm/memory.db',
|
|
399
|
+
'./.hive-mind/memory.db',
|
|
400
|
+
'./.hive-mind/hive.db',
|
|
401
|
+
'./.ruv-swarm/swarm.db',
|
|
402
|
+
'./data/hive-mind.db',
|
|
403
|
+
// Legacy locations
|
|
404
|
+
'./memory.json',
|
|
405
|
+
'./data/memory.json'
|
|
406
|
+
];
|
|
483
407
|
}
|
|
484
|
-
|
|
485
|
-
return report.join('\n');
|
|
486
|
-
}
|
|
487
408
|
}
|
|
488
|
-
|
|
489
409
|
/**
|
|
490
410
|
* Memory consolidation command
|
|
491
|
-
*/
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
case 'report':
|
|
513
|
-
await generateConsolidationReport(consolidator);
|
|
514
|
-
break;
|
|
515
|
-
|
|
516
|
-
default:
|
|
517
|
-
showConsolidationHelp();
|
|
518
|
-
}
|
|
411
|
+
*/ export async function memoryConsolidationCommand(subArgs, flags) {
|
|
412
|
+
// Load SQLite modules if available
|
|
413
|
+
const sqliteAvailable = await loadSqliteModules();
|
|
414
|
+
const consolidator = new MemoryConsolidator();
|
|
415
|
+
const action = subArgs[0];
|
|
416
|
+
switch(action){
|
|
417
|
+
case 'scan':
|
|
418
|
+
await scanMemoryStores(consolidator);
|
|
419
|
+
break;
|
|
420
|
+
case 'plan':
|
|
421
|
+
await createConsolidationPlan(consolidator);
|
|
422
|
+
break;
|
|
423
|
+
case 'execute':
|
|
424
|
+
await executeConsolidation(consolidator, flags);
|
|
425
|
+
break;
|
|
426
|
+
case 'report':
|
|
427
|
+
await generateConsolidationReport(consolidator);
|
|
428
|
+
break;
|
|
429
|
+
default:
|
|
430
|
+
showConsolidationHelp();
|
|
431
|
+
}
|
|
519
432
|
}
|
|
520
|
-
|
|
521
433
|
async function scanMemoryStores(consolidator) {
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
for (const store of results.json) {
|
|
531
|
-
console.log(` ⢠${store.path} (${(store.size / 1024).toFixed(1)} KB)`);
|
|
434
|
+
printInfo('Scanning for memory storage locations...');
|
|
435
|
+
const results = await consolidator.scanMemoryLocations();
|
|
436
|
+
printSuccess(`Found ${results.total} memory storage locations:`);
|
|
437
|
+
if (results.json.length > 0) {
|
|
438
|
+
console.log('\nš JSON Stores:');
|
|
439
|
+
for (const store of results.json){
|
|
440
|
+
console.log(` ⢠${store.path} (${(store.size / 1024).toFixed(1)} KB)`);
|
|
441
|
+
}
|
|
532
442
|
}
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
console.log(` ⢠${db.path} (${(db.size / 1024).toFixed(1)} KB)`);
|
|
443
|
+
if (results.sqlite.length > 0) {
|
|
444
|
+
console.log('\nšļø SQLite Databases:');
|
|
445
|
+
for (const db of results.sqlite){
|
|
446
|
+
console.log(` ⢠${db.path} (${(db.size / 1024).toFixed(1)} KB)`);
|
|
447
|
+
}
|
|
539
448
|
}
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
console.log(`\nš¾ Total size: ${(results.sizeBytes / 1024 / 1024).toFixed(2)} MB`);
|
|
449
|
+
console.log(`\nš¾ Total size: ${(results.sizeBytes / 1024 / 1024).toFixed(2)} MB`);
|
|
543
450
|
}
|
|
544
|
-
|
|
545
451
|
async function createConsolidationPlan(consolidator) {
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
if (step.destination) {
|
|
563
|
-
console.log(` Destination: ${step.destination}`);
|
|
452
|
+
const scanResults = await consolidator.scanMemoryLocations();
|
|
453
|
+
const plan = await consolidator.createConsolidationPlan(scanResults);
|
|
454
|
+
printSuccess('š Consolidation Plan Created:');
|
|
455
|
+
for(let i = 0; i < plan.steps.length; i++){
|
|
456
|
+
const step = plan.steps[i];
|
|
457
|
+
console.log(`\n${i + 1}. ${step.description}`);
|
|
458
|
+
if (step.sources) {
|
|
459
|
+
console.log(' Sources:');
|
|
460
|
+
for (const source of step.sources){
|
|
461
|
+
console.log(` ⢠${source}`);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (step.destination) {
|
|
465
|
+
console.log(` Destination: ${step.destination}`);
|
|
466
|
+
}
|
|
564
467
|
}
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
console.log(`\nā±ļø Estimated time: ${plan.estimatedTime} seconds`);
|
|
568
|
-
console.log('\nRun "memory-consolidate execute" to perform consolidation');
|
|
468
|
+
console.log(`\nā±ļø Estimated time: ${plan.estimatedTime} seconds`);
|
|
469
|
+
console.log('\nRun "memory-consolidate execute" to perform consolidation');
|
|
569
470
|
}
|
|
570
|
-
|
|
571
471
|
async function executeConsolidation(consolidator, flags) {
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
if (results.success) {
|
|
603
|
-
printSuccess('\nā
Memory consolidation completed successfully!');
|
|
604
|
-
console.log(`Unified store location: ${results.newStorePath}`);
|
|
605
|
-
} else {
|
|
606
|
-
printError('\nā Memory consolidation failed');
|
|
607
|
-
console.log('Check the errors above and try again');
|
|
608
|
-
}
|
|
472
|
+
const sqliteAvailable = await loadSqliteModules();
|
|
473
|
+
if (!sqliteAvailable) {
|
|
474
|
+
printError('SQLite modules not available.');
|
|
475
|
+
printInfo('Install required packages: npm install sqlite3 sqlite');
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
const scanResults = await consolidator.scanMemoryLocations();
|
|
479
|
+
if (scanResults.total === 0) {
|
|
480
|
+
printWarning('No memory stores found to consolidate');
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
const plan = await consolidator.createConsolidationPlan(scanResults);
|
|
484
|
+
if (!flags.force) {
|
|
485
|
+
printWarning('This will consolidate all memory stores into a unified database.');
|
|
486
|
+
printWarning('A backup will be created before any changes are made.');
|
|
487
|
+
console.log('\nUse --force flag to proceed without confirmation');
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
printInfo('Starting memory consolidation...');
|
|
491
|
+
const results = await consolidator.executeConsolidation(plan);
|
|
492
|
+
const report = consolidator.generateReport(scanResults, plan, results);
|
|
493
|
+
console.log('\n' + report);
|
|
494
|
+
if (results.success) {
|
|
495
|
+
printSuccess('\nā
Memory consolidation completed successfully!');
|
|
496
|
+
console.log(`Unified store location: ${results.newStorePath}`);
|
|
497
|
+
} else {
|
|
498
|
+
printError('\nā Memory consolidation failed');
|
|
499
|
+
console.log('Check the errors above and try again');
|
|
500
|
+
}
|
|
609
501
|
}
|
|
610
|
-
|
|
611
502
|
async function generateConsolidationReport(consolidator) {
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
console.log(report);
|
|
503
|
+
const scanResults = await consolidator.scanMemoryLocations();
|
|
504
|
+
const plan = await consolidator.createConsolidationPlan(scanResults);
|
|
505
|
+
const report = consolidator.generateReport(scanResults, plan);
|
|
506
|
+
console.log(report);
|
|
617
507
|
}
|
|
618
|
-
|
|
619
508
|
function showConsolidationHelp() {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
509
|
+
console.log('Memory consolidation commands:');
|
|
510
|
+
console.log(' scan Scan for all memory storage locations');
|
|
511
|
+
console.log(' plan Create a consolidation plan');
|
|
512
|
+
console.log(' execute Execute the consolidation (use --force to skip confirmation)');
|
|
513
|
+
console.log(' report Generate a consolidation report');
|
|
514
|
+
console.log();
|
|
515
|
+
console.log('Examples:');
|
|
516
|
+
console.log(' memory-consolidate scan');
|
|
517
|
+
console.log(' memory-consolidate plan');
|
|
518
|
+
console.log(' memory-consolidate execute --force');
|
|
519
|
+
console.log(' memory-consolidate report');
|
|
631
520
|
}
|