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,330 +1,250 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SQLite-based memory store for MCP server
|
|
3
3
|
* Provides persistent storage that works with both local and remote npx execution
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
-
const __dirname = path.dirname(__filename);
|
|
15
|
-
|
|
16
|
-
class SqliteMemoryStore {
|
|
17
|
-
constructor(options = {}) {
|
|
18
|
-
this.options = {
|
|
19
|
-
dbName: options.dbName || 'memory.db',
|
|
20
|
-
directory: options.directory || this._getMemoryDirectory(),
|
|
21
|
-
...options,
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
this.db = null;
|
|
25
|
-
this.statements = new Map();
|
|
26
|
-
this.isInitialized = false;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
4
|
+
*/ import path from "path";
|
|
5
|
+
import { promises as fs } from "fs";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
import { createDatabase } from "./sqlite-wrapper.js";
|
|
8
|
+
import { sessionSerializer } from "./enhanced-session-serializer.js";
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
let SqliteMemoryStore = class SqliteMemoryStore {
|
|
12
|
+
/**
|
|
30
13
|
* Determine the best directory for memory storage
|
|
31
14
|
* Uses .swarm directory in current working directory (consistent with hive-mind approach)
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
`);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
throw error;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
async search(pattern, options = {}) {
|
|
273
|
-
await this.initialize();
|
|
274
|
-
|
|
275
|
-
const namespace = options.namespace || 'default';
|
|
276
|
-
const limit = options.limit || 50;
|
|
277
|
-
const searchPattern = `%${pattern}%`;
|
|
278
|
-
|
|
279
|
-
try {
|
|
280
|
-
const rows = this.statements
|
|
281
|
-
.get('search')
|
|
282
|
-
.all(namespace, searchPattern, searchPattern, limit);
|
|
283
|
-
|
|
284
|
-
return rows.map((row) => ({
|
|
285
|
-
key: row.key,
|
|
286
|
-
value: this._tryParseJson(row.value),
|
|
287
|
-
namespace: row.namespace,
|
|
288
|
-
score: row.access_count,
|
|
289
|
-
updatedAt: new Date(row.updated_at * 1000),
|
|
290
|
-
}));
|
|
291
|
-
} catch (error) {
|
|
292
|
-
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Search failed:`, error);
|
|
293
|
-
throw error;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
async cleanup() {
|
|
298
|
-
await this.initialize();
|
|
299
|
-
|
|
300
|
-
try {
|
|
301
|
-
const result = this.statements.get('cleanup').run();
|
|
302
|
-
return result.changes;
|
|
303
|
-
} catch (error) {
|
|
304
|
-
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Cleanup failed:`, error);
|
|
305
|
-
throw error;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
_tryParseJson(value) {
|
|
310
|
-
try {
|
|
311
|
-
return sessionSerializer.serializer.deserialize(value);
|
|
312
|
-
} catch {
|
|
313
|
-
return value;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
close() {
|
|
318
|
-
if (this.db) {
|
|
319
|
-
this.db.close();
|
|
320
|
-
this.db = null;
|
|
321
|
-
this.isInitialized = false;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// Export a singleton instance for MCP server
|
|
327
|
-
export const memoryStore = new SqliteMemoryStore();
|
|
328
|
-
|
|
329
|
-
export { SqliteMemoryStore };
|
|
330
|
-
export default SqliteMemoryStore;
|
|
15
|
+
*/ _getMemoryDirectory() {
|
|
16
|
+
// Always use .swarm directory in the current working directory
|
|
17
|
+
// This ensures consistency whether running locally or via npx
|
|
18
|
+
return path.join(process.cwd(), '.swarm');
|
|
19
|
+
}
|
|
20
|
+
_directoryExists(dir) {
|
|
21
|
+
try {
|
|
22
|
+
const stats = require('fs').statSync(dir);
|
|
23
|
+
return stats.isDirectory();
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async initialize() {
|
|
29
|
+
if (this.isInitialized) return;
|
|
30
|
+
try {
|
|
31
|
+
// Ensure directory exists
|
|
32
|
+
await fs.mkdir(this.options.directory, {
|
|
33
|
+
recursive: true
|
|
34
|
+
});
|
|
35
|
+
// Open database
|
|
36
|
+
const dbPath = path.join(this.options.directory, this.options.dbName);
|
|
37
|
+
this.db = await createDatabase(dbPath);
|
|
38
|
+
// Enable WAL mode for better concurrency
|
|
39
|
+
this.db.pragma('journal_mode = WAL');
|
|
40
|
+
this.db.pragma('synchronous = NORMAL');
|
|
41
|
+
// Create tables
|
|
42
|
+
this._createTables();
|
|
43
|
+
// Prepare statements
|
|
44
|
+
this._prepareStatements();
|
|
45
|
+
this.isInitialized = true;
|
|
46
|
+
console.error(`[${new Date().toISOString()}] INFO [memory-store] Initialized SQLite at: ${dbPath}`);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Failed to initialize:`, error);
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
_createTables() {
|
|
53
|
+
this.db.exec(`
|
|
54
|
+
CREATE TABLE IF NOT EXISTS memory_entries (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
key TEXT NOT NULL,
|
|
57
|
+
value TEXT NOT NULL,
|
|
58
|
+
namespace TEXT NOT NULL DEFAULT 'default',
|
|
59
|
+
metadata TEXT,
|
|
60
|
+
created_at INTEGER DEFAULT (strftime('%s', 'now')),
|
|
61
|
+
updated_at INTEGER DEFAULT (strftime('%s', 'now')),
|
|
62
|
+
accessed_at INTEGER DEFAULT (strftime('%s', 'now')),
|
|
63
|
+
access_count INTEGER DEFAULT 0,
|
|
64
|
+
ttl INTEGER,
|
|
65
|
+
expires_at INTEGER,
|
|
66
|
+
UNIQUE(key, namespace)
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_memory_namespace ON memory_entries(namespace);
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_memory_expires ON memory_entries(expires_at) WHERE expires_at IS NOT NULL;
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_memory_accessed ON memory_entries(accessed_at);
|
|
72
|
+
`);
|
|
73
|
+
}
|
|
74
|
+
_prepareStatements() {
|
|
75
|
+
// Store/update statement
|
|
76
|
+
this.statements.set('upsert', this.db.prepare(`
|
|
77
|
+
INSERT INTO memory_entries (key, value, namespace, metadata, ttl, expires_at)
|
|
78
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
79
|
+
ON CONFLICT(key, namespace) DO UPDATE SET
|
|
80
|
+
value = excluded.value,
|
|
81
|
+
metadata = excluded.metadata,
|
|
82
|
+
ttl = excluded.ttl,
|
|
83
|
+
expires_at = excluded.expires_at,
|
|
84
|
+
updated_at = strftime('%s', 'now'),
|
|
85
|
+
access_count = memory_entries.access_count + 1
|
|
86
|
+
`));
|
|
87
|
+
// Retrieve statement
|
|
88
|
+
this.statements.set('get', this.db.prepare(`
|
|
89
|
+
SELECT * FROM memory_entries
|
|
90
|
+
WHERE key = ? AND namespace = ? AND (expires_at IS NULL OR expires_at > strftime('%s', 'now'))
|
|
91
|
+
`));
|
|
92
|
+
// List statement
|
|
93
|
+
this.statements.set('list', this.db.prepare(`
|
|
94
|
+
SELECT * FROM memory_entries
|
|
95
|
+
WHERE namespace = ? AND (expires_at IS NULL OR expires_at > strftime('%s', 'now'))
|
|
96
|
+
ORDER BY updated_at DESC
|
|
97
|
+
LIMIT ?
|
|
98
|
+
`));
|
|
99
|
+
// Delete statement
|
|
100
|
+
this.statements.set('delete', this.db.prepare(`
|
|
101
|
+
DELETE FROM memory_entries WHERE key = ? AND namespace = ?
|
|
102
|
+
`));
|
|
103
|
+
// Search statement
|
|
104
|
+
this.statements.set('search', this.db.prepare(`
|
|
105
|
+
SELECT * FROM memory_entries
|
|
106
|
+
WHERE namespace = ? AND (key LIKE ? OR value LIKE ?)
|
|
107
|
+
AND (expires_at IS NULL OR expires_at > strftime('%s', 'now'))
|
|
108
|
+
ORDER BY access_count DESC, updated_at DESC
|
|
109
|
+
LIMIT ?
|
|
110
|
+
`));
|
|
111
|
+
// Cleanup statement
|
|
112
|
+
this.statements.set('cleanup', this.db.prepare(`
|
|
113
|
+
DELETE FROM memory_entries WHERE expires_at IS NOT NULL AND expires_at <= strftime('%s', 'now')
|
|
114
|
+
`));
|
|
115
|
+
// Update access statement
|
|
116
|
+
this.statements.set('updateAccess', this.db.prepare(`
|
|
117
|
+
UPDATE memory_entries
|
|
118
|
+
SET accessed_at = strftime('%s', 'now'), access_count = access_count + 1
|
|
119
|
+
WHERE key = ? AND namespace = ?
|
|
120
|
+
`));
|
|
121
|
+
}
|
|
122
|
+
async store(key, value, options = {}) {
|
|
123
|
+
await this.initialize();
|
|
124
|
+
const namespace = options.namespace || 'default';
|
|
125
|
+
const metadata = options.metadata ? JSON.stringify(options.metadata) : null;
|
|
126
|
+
const ttl = options.ttl || null;
|
|
127
|
+
const expiresAt = ttl ? Math.floor(Date.now() / 1000) + ttl : null;
|
|
128
|
+
const valueStr = typeof value === 'string' ? value : sessionSerializer.serializer.serialize(value);
|
|
129
|
+
try {
|
|
130
|
+
const result = this.statements.get('upsert').run(key, valueStr, namespace, metadata, ttl, expiresAt);
|
|
131
|
+
return {
|
|
132
|
+
success: true,
|
|
133
|
+
id: result.lastInsertRowid,
|
|
134
|
+
size: valueStr.length
|
|
135
|
+
};
|
|
136
|
+
} catch (error) {
|
|
137
|
+
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Store failed:`, error);
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async retrieve(key, options = {}) {
|
|
142
|
+
await this.initialize();
|
|
143
|
+
const namespace = options.namespace || 'default';
|
|
144
|
+
try {
|
|
145
|
+
const row = this.statements.get('get').get(key, namespace);
|
|
146
|
+
if (!row) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
// Update access stats
|
|
150
|
+
this.statements.get('updateAccess').run(key, namespace);
|
|
151
|
+
// Try to deserialize, fall back to raw string
|
|
152
|
+
try {
|
|
153
|
+
return sessionSerializer.serializer.deserialize(row.value);
|
|
154
|
+
} catch {
|
|
155
|
+
return row.value;
|
|
156
|
+
}
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Retrieve failed:`, error);
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async list(options = {}) {
|
|
163
|
+
await this.initialize();
|
|
164
|
+
const namespace = options.namespace || 'default';
|
|
165
|
+
const limit = options.limit || 100;
|
|
166
|
+
try {
|
|
167
|
+
const rows = this.statements.get('list').all(namespace, limit);
|
|
168
|
+
return rows.map((row)=>({
|
|
169
|
+
key: row.key,
|
|
170
|
+
value: this._tryParseJson(row.value),
|
|
171
|
+
namespace: row.namespace,
|
|
172
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : null,
|
|
173
|
+
createdAt: new Date(row.created_at * 1000),
|
|
174
|
+
updatedAt: new Date(row.updated_at * 1000),
|
|
175
|
+
accessCount: row.access_count
|
|
176
|
+
}));
|
|
177
|
+
} catch (error) {
|
|
178
|
+
console.error(`[${new Date().toISOString()}] ERROR [memory-store] List failed:`, error);
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async delete(key, options = {}) {
|
|
183
|
+
await this.initialize();
|
|
184
|
+
const namespace = options.namespace || 'default';
|
|
185
|
+
try {
|
|
186
|
+
const result = this.statements.get('delete').run(key, namespace);
|
|
187
|
+
return result.changes > 0;
|
|
188
|
+
} catch (error) {
|
|
189
|
+
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Delete failed:`, error);
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async search(pattern, options = {}) {
|
|
194
|
+
await this.initialize();
|
|
195
|
+
const namespace = options.namespace || 'default';
|
|
196
|
+
const limit = options.limit || 50;
|
|
197
|
+
const searchPattern = `%${pattern}%`;
|
|
198
|
+
try {
|
|
199
|
+
const rows = this.statements.get('search').all(namespace, searchPattern, searchPattern, limit);
|
|
200
|
+
return rows.map((row)=>({
|
|
201
|
+
key: row.key,
|
|
202
|
+
value: this._tryParseJson(row.value),
|
|
203
|
+
namespace: row.namespace,
|
|
204
|
+
score: row.access_count,
|
|
205
|
+
updatedAt: new Date(row.updated_at * 1000)
|
|
206
|
+
}));
|
|
207
|
+
} catch (error) {
|
|
208
|
+
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Search failed:`, error);
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async cleanup() {
|
|
213
|
+
await this.initialize();
|
|
214
|
+
try {
|
|
215
|
+
const result = this.statements.get('cleanup').run();
|
|
216
|
+
return result.changes;
|
|
217
|
+
} catch (error) {
|
|
218
|
+
console.error(`[${new Date().toISOString()}] ERROR [memory-store] Cleanup failed:`, error);
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
_tryParseJson(value) {
|
|
223
|
+
try {
|
|
224
|
+
return sessionSerializer.serializer.deserialize(value);
|
|
225
|
+
} catch {
|
|
226
|
+
return value;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
close() {
|
|
230
|
+
if (this.db) {
|
|
231
|
+
this.db.close();
|
|
232
|
+
this.db = null;
|
|
233
|
+
this.isInitialized = false;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
constructor(options = {}){
|
|
237
|
+
this.options = {
|
|
238
|
+
dbName: options.dbName || 'memory.db',
|
|
239
|
+
directory: options.directory || this._getMemoryDirectory(),
|
|
240
|
+
...options
|
|
241
|
+
};
|
|
242
|
+
this.db = null;
|
|
243
|
+
this.statements = new Map();
|
|
244
|
+
this.isInitialized = false;
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
// Export a singleton instance for MCP server
|
|
248
|
+
export const memoryStore = new SqliteMemoryStore();
|
|
249
|
+
export { SqliteMemoryStore };
|
|
250
|
+
export default SqliteMemoryStore;
|