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,461 +1,380 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Unified Memory Manager
|
|
3
3
|
* Provides a single interface for all memory operations across the system
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export class UnifiedMemoryManager {
|
|
11
|
-
constructor(options = {}) {
|
|
12
|
-
this.config = {
|
|
13
|
-
primaryStore: './.claude-flow/memory/unified-memory.db',
|
|
14
|
-
fallbackStore: './memory/memory-store.json',
|
|
15
|
-
configPath: './.claude-flow/memory-config.json',
|
|
16
|
-
...options
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
this.isInitialized = false;
|
|
20
|
-
this.useSqlite = false;
|
|
21
|
-
this.db = null;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
4
|
+
*/ import { promises as fs } from "fs";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import { existsSync } from "../cli/node-compat.js";
|
|
7
|
+
export class UnifiedMemoryManager {
|
|
8
|
+
/**
|
|
25
9
|
* Initialize the memory manager
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
this.useSqlite = false;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
this.isInitialized = true;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
10
|
+
*/ async initialize() {
|
|
11
|
+
if (this.isInitialized) return;
|
|
12
|
+
// Check if we have a unified database
|
|
13
|
+
if (existsSync(this.config.primaryStore)) {
|
|
14
|
+
try {
|
|
15
|
+
// Try to load SQLite modules
|
|
16
|
+
const sqlite3Module = await import("sqlite3");
|
|
17
|
+
const sqliteModule = await import("sqlite");
|
|
18
|
+
this.sqlite3 = sqlite3Module.default;
|
|
19
|
+
this.sqliteOpen = sqliteModule.open;
|
|
20
|
+
this.useSqlite = true;
|
|
21
|
+
// Open database connection
|
|
22
|
+
this.db = await this.sqliteOpen({
|
|
23
|
+
filename: this.config.primaryStore,
|
|
24
|
+
driver: this.sqlite3.Database
|
|
25
|
+
});
|
|
26
|
+
// Enable WAL mode for better performance
|
|
27
|
+
await this.db.exec('PRAGMA journal_mode = WAL');
|
|
28
|
+
} catch (err) {
|
|
29
|
+
console.warn('SQLite not available, falling back to JSON store');
|
|
30
|
+
this.useSqlite = false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
this.isInitialized = true;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
60
36
|
* Store a key-value pair
|
|
61
|
-
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
37
|
+
*/ async store(key, value, namespace = 'default', metadata = {}) {
|
|
38
|
+
await this.initialize();
|
|
39
|
+
if (this.useSqlite) {
|
|
40
|
+
return await this.storeSqlite(key, value, namespace, metadata);
|
|
41
|
+
} else {
|
|
42
|
+
return await this.storeJson(key, value, namespace, metadata);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
73
46
|
* Store in SQLite database
|
|
74
|
-
*/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
47
|
+
*/ async storeSqlite(key, value, namespace, metadata) {
|
|
48
|
+
const timestamp = Date.now();
|
|
49
|
+
await this.db.run(`
|
|
50
|
+
INSERT OR REPLACE INTO memory_entries (key, value, namespace, timestamp, source)
|
|
51
|
+
VALUES (?, ?, ?, ?, ?)
|
|
52
|
+
`, key, value, namespace, timestamp, 'unified-manager');
|
|
53
|
+
return {
|
|
54
|
+
key,
|
|
55
|
+
value,
|
|
56
|
+
namespace,
|
|
57
|
+
timestamp
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
87
61
|
* Store in JSON file
|
|
88
|
-
*/
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
data[namespace].push(entry);
|
|
109
|
-
|
|
110
|
-
await this.saveJsonData(data);
|
|
111
|
-
return entry;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
62
|
+
*/ async storeJson(key, value, namespace, metadata) {
|
|
63
|
+
const data = await this.loadJsonData();
|
|
64
|
+
if (!data[namespace]) {
|
|
65
|
+
data[namespace] = [];
|
|
66
|
+
}
|
|
67
|
+
// Remove existing entry with same key
|
|
68
|
+
data[namespace] = data[namespace].filter((e)=>e.key !== key);
|
|
69
|
+
// Add new entry
|
|
70
|
+
const entry = {
|
|
71
|
+
key,
|
|
72
|
+
value,
|
|
73
|
+
namespace,
|
|
74
|
+
timestamp: Date.now(),
|
|
75
|
+
...metadata
|
|
76
|
+
};
|
|
77
|
+
data[namespace].push(entry);
|
|
78
|
+
await this.saveJsonData(data);
|
|
79
|
+
return entry;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
115
82
|
* Query memory entries
|
|
116
|
-
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
83
|
+
*/ async query(search, options = {}) {
|
|
84
|
+
await this.initialize();
|
|
85
|
+
if (this.useSqlite) {
|
|
86
|
+
return await this.querySqlite(search, options);
|
|
87
|
+
} else {
|
|
88
|
+
return await this.queryJson(search, options);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
128
92
|
* Query SQLite database
|
|
129
|
-
*/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return results;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
93
|
+
*/ async querySqlite(search, options) {
|
|
94
|
+
const { namespace, limit = 100, offset = 0 } = options;
|
|
95
|
+
let query = `
|
|
96
|
+
SELECT * FROM memory_entries
|
|
97
|
+
WHERE (key LIKE ? OR value LIKE ?)
|
|
98
|
+
`;
|
|
99
|
+
const params = [
|
|
100
|
+
`%${search}%`,
|
|
101
|
+
`%${search}%`
|
|
102
|
+
];
|
|
103
|
+
if (namespace) {
|
|
104
|
+
query += ' AND namespace = ?';
|
|
105
|
+
params.push(namespace);
|
|
106
|
+
}
|
|
107
|
+
query += ' ORDER BY timestamp DESC LIMIT ? OFFSET ?';
|
|
108
|
+
params.push(limit, offset);
|
|
109
|
+
const results = await this.db.all(query, ...params);
|
|
110
|
+
return results;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
153
113
|
* Query JSON store
|
|
154
|
-
*/
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
return results.slice(offset, offset + limit);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
114
|
+
*/ async queryJson(search, options) {
|
|
115
|
+
const data = await this.loadJsonData();
|
|
116
|
+
const { namespace, limit = 100, offset = 0 } = options;
|
|
117
|
+
const results = [];
|
|
118
|
+
const namespaces = namespace ? [
|
|
119
|
+
namespace
|
|
120
|
+
] : Object.keys(data);
|
|
121
|
+
for (const ns of namespaces){
|
|
122
|
+
if (data[ns]) {
|
|
123
|
+
for (const entry of data[ns]){
|
|
124
|
+
if (entry.key.includes(search) || entry.value.includes(search)) {
|
|
125
|
+
results.push(entry);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Sort by timestamp (newest first)
|
|
131
|
+
results.sort((a, b)=>b.timestamp - a.timestamp);
|
|
132
|
+
// Apply pagination
|
|
133
|
+
return results.slice(offset, offset + limit);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
180
136
|
* Get memory by exact key
|
|
181
|
-
*/
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
137
|
+
*/ async get(key, namespace = 'default') {
|
|
138
|
+
await this.initialize();
|
|
139
|
+
if (this.useSqlite) {
|
|
140
|
+
const result = await this.db.get(`
|
|
141
|
+
SELECT * FROM memory_entries
|
|
142
|
+
WHERE key = ? AND namespace = ?
|
|
143
|
+
ORDER BY timestamp DESC
|
|
144
|
+
LIMIT 1
|
|
145
|
+
`, key, namespace);
|
|
146
|
+
return result;
|
|
147
|
+
} else {
|
|
148
|
+
const data = await this.loadJsonData();
|
|
149
|
+
if (data[namespace]) {
|
|
150
|
+
const entry = data[namespace].find((e)=>e.key === key);
|
|
151
|
+
return entry;
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
205
157
|
* Delete memory entry
|
|
206
|
-
*/
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
158
|
+
*/ async delete(key, namespace = 'default') {
|
|
159
|
+
await this.initialize();
|
|
160
|
+
if (this.useSqlite) {
|
|
161
|
+
await this.db.run(`
|
|
162
|
+
DELETE FROM memory_entries
|
|
163
|
+
WHERE key = ? AND namespace = ?
|
|
164
|
+
`, key, namespace);
|
|
165
|
+
} else {
|
|
166
|
+
const data = await this.loadJsonData();
|
|
167
|
+
if (data[namespace]) {
|
|
168
|
+
data[namespace] = data[namespace].filter((e)=>e.key !== key);
|
|
169
|
+
await this.saveJsonData(data);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
225
174
|
* Clear namespace
|
|
226
|
-
*/
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
175
|
+
*/ async clearNamespace(namespace) {
|
|
176
|
+
await this.initialize();
|
|
177
|
+
if (this.useSqlite) {
|
|
178
|
+
const result = await this.db.run(`
|
|
179
|
+
DELETE FROM memory_entries
|
|
180
|
+
WHERE namespace = ?
|
|
181
|
+
`, namespace);
|
|
182
|
+
return result.changes;
|
|
183
|
+
} else {
|
|
184
|
+
const data = await this.loadJsonData();
|
|
185
|
+
const count = data[namespace] ? data[namespace].length : 0;
|
|
186
|
+
delete data[namespace];
|
|
187
|
+
await this.saveJsonData(data);
|
|
188
|
+
return count;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
247
192
|
* Get statistics
|
|
248
|
-
*/
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
namespaceStats,
|
|
296
|
-
sizeBytes: new TextEncoder().encode(JSON.stringify(data)).length,
|
|
297
|
-
storageType: 'json'
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
193
|
+
*/ async getStats() {
|
|
194
|
+
await this.initialize();
|
|
195
|
+
if (this.useSqlite) {
|
|
196
|
+
const stats = await this.db.get(`
|
|
197
|
+
SELECT
|
|
198
|
+
COUNT(*) as totalEntries,
|
|
199
|
+
COUNT(DISTINCT namespace) as namespaces
|
|
200
|
+
FROM memory_entries
|
|
201
|
+
`);
|
|
202
|
+
const namespaceStats = await this.db.all(`
|
|
203
|
+
SELECT namespace, COUNT(*) as count
|
|
204
|
+
FROM memory_entries
|
|
205
|
+
GROUP BY namespace
|
|
206
|
+
`);
|
|
207
|
+
// Get database size
|
|
208
|
+
const dbInfo = await this.db.get(`
|
|
209
|
+
SELECT page_count * page_size as sizeBytes
|
|
210
|
+
FROM pragma_page_count(), pragma_page_size()
|
|
211
|
+
`);
|
|
212
|
+
return {
|
|
213
|
+
totalEntries: stats.totalEntries,
|
|
214
|
+
namespaces: stats.namespaces,
|
|
215
|
+
namespaceStats: namespaceStats.reduce((acc, ns)=>{
|
|
216
|
+
acc[ns.namespace] = ns.count;
|
|
217
|
+
return acc;
|
|
218
|
+
}, {}),
|
|
219
|
+
sizeBytes: dbInfo.sizeBytes,
|
|
220
|
+
storageType: 'sqlite'
|
|
221
|
+
};
|
|
222
|
+
} else {
|
|
223
|
+
const data = await this.loadJsonData();
|
|
224
|
+
let totalEntries = 0;
|
|
225
|
+
const namespaceStats = {};
|
|
226
|
+
for (const [namespace, entries] of Object.entries(data)){
|
|
227
|
+
namespaceStats[namespace] = entries.length;
|
|
228
|
+
totalEntries += entries.length;
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
totalEntries,
|
|
232
|
+
namespaces: Object.keys(data).length,
|
|
233
|
+
namespaceStats,
|
|
234
|
+
sizeBytes: new TextEncoder().encode(JSON.stringify(data)).length,
|
|
235
|
+
storageType: 'json'
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
303
240
|
* List all namespaces
|
|
304
|
-
*/
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/**
|
|
241
|
+
*/ async listNamespaces() {
|
|
242
|
+
await this.initialize();
|
|
243
|
+
if (this.useSqlite) {
|
|
244
|
+
const namespaces = await this.db.all(`
|
|
245
|
+
SELECT DISTINCT namespace, COUNT(*) as count
|
|
246
|
+
FROM memory_entries
|
|
247
|
+
GROUP BY namespace
|
|
248
|
+
ORDER BY namespace
|
|
249
|
+
`);
|
|
250
|
+
return namespaces;
|
|
251
|
+
} else {
|
|
252
|
+
const data = await this.loadJsonData();
|
|
253
|
+
return Object.keys(data).map((namespace)=>({
|
|
254
|
+
namespace,
|
|
255
|
+
count: data[namespace].length
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
327
260
|
* Export data
|
|
328
|
-
*/
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
return {
|
|
366
|
-
namespaces: Object.keys(exportData).length,
|
|
367
|
-
entries: totalEntries,
|
|
368
|
-
size: new TextEncoder().encode(JSON.stringify(exportData)).length
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/**
|
|
261
|
+
*/ async export(filePath, namespace = null) {
|
|
262
|
+
await this.initialize();
|
|
263
|
+
let exportData;
|
|
264
|
+
if (this.useSqlite) {
|
|
265
|
+
let query = 'SELECT * FROM memory_entries';
|
|
266
|
+
const params = [];
|
|
267
|
+
if (namespace) {
|
|
268
|
+
query += ' WHERE namespace = ?';
|
|
269
|
+
params.push(namespace);
|
|
270
|
+
}
|
|
271
|
+
const entries = await this.db.all(query, ...params);
|
|
272
|
+
// Group by namespace
|
|
273
|
+
exportData = entries.reduce((acc, entry)=>{
|
|
274
|
+
if (!acc[entry.namespace]) {
|
|
275
|
+
acc[entry.namespace] = [];
|
|
276
|
+
}
|
|
277
|
+
acc[entry.namespace].push(entry);
|
|
278
|
+
return acc;
|
|
279
|
+
}, {});
|
|
280
|
+
} else {
|
|
281
|
+
const data = await this.loadJsonData();
|
|
282
|
+
exportData = namespace ? {
|
|
283
|
+
[namespace]: data[namespace] || []
|
|
284
|
+
} : data;
|
|
285
|
+
}
|
|
286
|
+
await fs.writeFile(filePath, JSON.stringify(exportData, null, 2));
|
|
287
|
+
let totalEntries = 0;
|
|
288
|
+
for (const entries of Object.values(exportData)){
|
|
289
|
+
totalEntries += entries.length;
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
namespaces: Object.keys(exportData).length,
|
|
293
|
+
entries: totalEntries,
|
|
294
|
+
size: new TextEncoder().encode(JSON.stringify(exportData)).length
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
373
298
|
* Import data
|
|
374
|
-
*/
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
return { imported };
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
299
|
+
*/ async import(filePath, options = {}) {
|
|
300
|
+
await this.initialize();
|
|
301
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
302
|
+
const importData = JSON.parse(content);
|
|
303
|
+
let imported = 0;
|
|
304
|
+
for (const [namespace, entries] of Object.entries(importData)){
|
|
305
|
+
for (const entry of entries){
|
|
306
|
+
await this.store(entry.key, entry.value, entry.namespace || namespace, {
|
|
307
|
+
timestamp: entry.timestamp,
|
|
308
|
+
source: filePath
|
|
309
|
+
});
|
|
310
|
+
imported++;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return {
|
|
314
|
+
imported
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
399
318
|
* Load JSON data
|
|
400
|
-
*/
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
/**
|
|
319
|
+
*/ async loadJsonData() {
|
|
320
|
+
try {
|
|
321
|
+
const content = await fs.readFile(this.config.fallbackStore, 'utf8');
|
|
322
|
+
return JSON.parse(content);
|
|
323
|
+
} catch {
|
|
324
|
+
return {};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
411
328
|
* Save JSON data
|
|
412
|
-
*/
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
329
|
+
*/ async saveJsonData(data) {
|
|
330
|
+
await fs.mkdir(path.dirname(this.config.fallbackStore), {
|
|
331
|
+
recursive: true
|
|
332
|
+
});
|
|
333
|
+
await fs.writeFile(this.config.fallbackStore, JSON.stringify(data, null, 2));
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
419
336
|
* Close database connection
|
|
420
|
-
*/
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
/**
|
|
337
|
+
*/ async close() {
|
|
338
|
+
if (this.db) {
|
|
339
|
+
await this.db.close();
|
|
340
|
+
this.db = null;
|
|
341
|
+
this.isInitialized = false;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
430
345
|
* Check if using unified store
|
|
431
|
-
*/
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
/**
|
|
346
|
+
*/ isUnified() {
|
|
347
|
+
return this.useSqlite;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
437
350
|
* Get storage info
|
|
438
|
-
*/
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
351
|
+
*/ getStorageInfo() {
|
|
352
|
+
return {
|
|
353
|
+
type: this.useSqlite ? 'sqlite' : 'json',
|
|
354
|
+
path: this.useSqlite ? this.config.primaryStore : this.config.fallbackStore,
|
|
355
|
+
unified: this.useSqlite
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
constructor(options = {}){
|
|
359
|
+
this.config = {
|
|
360
|
+
primaryStore: './.claude-flow/memory/unified-memory.db',
|
|
361
|
+
fallbackStore: './memory/memory-store.json',
|
|
362
|
+
configPath: './.claude-flow/memory-config.json',
|
|
363
|
+
...options
|
|
364
|
+
};
|
|
365
|
+
this.isInitialized = false;
|
|
366
|
+
this.useSqlite = false;
|
|
367
|
+
this.db = null;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// Singleton instance
|
|
371
|
+
let instance = null;
|
|
451
372
|
/**
|
|
452
373
|
* Get unified memory manager instance
|
|
453
|
-
*/
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
export default UnifiedMemoryManager;
|
|
374
|
+
*/ export function getUnifiedMemory(options = {}) {
|
|
375
|
+
if (!instance) {
|
|
376
|
+
instance = new UnifiedMemoryManager(options);
|
|
377
|
+
}
|
|
378
|
+
return instance;
|
|
379
|
+
}
|
|
380
|
+
export default UnifiedMemoryManager;
|