shieldcortex 2.0.0
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/LICENSE +21 -0
- package/README.md +282 -0
- package/dashboard/components.json +22 -0
- package/dashboard/eslint.config.mjs +42 -0
- package/dashboard/next.config.ts +7 -0
- package/dashboard/package-lock.json +8053 -0
- package/dashboard/package.json +44 -0
- package/dashboard/postcss.config.mjs +7 -0
- package/dashboard/public/file.svg +1 -0
- package/dashboard/public/globe.svg +1 -0
- package/dashboard/public/next.svg +1 -0
- package/dashboard/public/vercel.svg +1 -0
- package/dashboard/public/window.svg +1 -0
- package/dashboard/scripts/ensure-api.mjs +76 -0
- package/dashboard/src/app/error.tsx +49 -0
- package/dashboard/src/app/favicon.ico +0 -0
- package/dashboard/src/app/globals.css +130 -0
- package/dashboard/src/app/layout.tsx +35 -0
- package/dashboard/src/app/page.tsx +364 -0
- package/dashboard/src/components/Providers.tsx +27 -0
- package/dashboard/src/components/brain/ActivityPulseSystem.tsx +229 -0
- package/dashboard/src/components/brain/BrainMesh.tsx +133 -0
- package/dashboard/src/components/brain/BrainRegions.tsx +254 -0
- package/dashboard/src/components/brain/BrainScene.tsx +255 -0
- package/dashboard/src/components/brain/CategoryLabels.tsx +103 -0
- package/dashboard/src/components/brain/CoreSphere.tsx +215 -0
- package/dashboard/src/components/brain/DataFlowParticles.tsx +123 -0
- package/dashboard/src/components/brain/DataStreamRings.tsx +161 -0
- package/dashboard/src/components/brain/ElectronFlow.tsx +323 -0
- package/dashboard/src/components/brain/HolographicGrid.tsx +235 -0
- package/dashboard/src/components/brain/MemoryLinks.tsx +271 -0
- package/dashboard/src/components/brain/MemoryNode.tsx +245 -0
- package/dashboard/src/components/brain/NeuralPathways.tsx +441 -0
- package/dashboard/src/components/brain/SynapseNodes.tsx +312 -0
- package/dashboard/src/components/brain/TimelineControls.tsx +205 -0
- package/dashboard/src/components/chip/ChipScene.tsx +497 -0
- package/dashboard/src/components/chip/ChipSubstrate.tsx +238 -0
- package/dashboard/src/components/chip/CortexCore.tsx +210 -0
- package/dashboard/src/components/chip/DataBus.tsx +416 -0
- package/dashboard/src/components/chip/MemoryCell.tsx +225 -0
- package/dashboard/src/components/chip/MemoryGrid.tsx +328 -0
- package/dashboard/src/components/chip/QuantumCell.tsx +316 -0
- package/dashboard/src/components/chip/SectionLabel.tsx +113 -0
- package/dashboard/src/components/chip/index.ts +14 -0
- package/dashboard/src/components/controls/ControlPanel.tsx +106 -0
- package/dashboard/src/components/controls/VersionPanel.tsx +185 -0
- package/dashboard/src/components/dashboard/StatsPanel.tsx +164 -0
- package/dashboard/src/components/debug/ActivityLog.tsx +250 -0
- package/dashboard/src/components/debug/DebugPanel.tsx +101 -0
- package/dashboard/src/components/debug/QueryTester.tsx +192 -0
- package/dashboard/src/components/debug/RelationshipGraph.tsx +403 -0
- package/dashboard/src/components/debug/SqlConsole.tsx +319 -0
- package/dashboard/src/components/graph/KnowledgeGraph.tsx +230 -0
- package/dashboard/src/components/graph/OntologyGraph.tsx +631 -0
- package/dashboard/src/components/insights/ActivityHeatmap.tsx +131 -0
- package/dashboard/src/components/insights/InsightsView.tsx +46 -0
- package/dashboard/src/components/insights/KnowledgeMapPanel.tsx +80 -0
- package/dashboard/src/components/insights/QualityPanel.tsx +116 -0
- package/dashboard/src/components/memories/MemoriesView.tsx +150 -0
- package/dashboard/src/components/memories/MemoryCard.tsx +103 -0
- package/dashboard/src/components/memory/MemoryDetail.tsx +325 -0
- package/dashboard/src/components/nav/NavRail.tsx +54 -0
- package/dashboard/src/components/ui/button.tsx +62 -0
- package/dashboard/src/components/ui/card.tsx +92 -0
- package/dashboard/src/components/ui/input.tsx +21 -0
- package/dashboard/src/hooks/useDebouncedValue.ts +24 -0
- package/dashboard/src/hooks/useMemories.ts +458 -0
- package/dashboard/src/hooks/useSuggestions.ts +46 -0
- package/dashboard/src/lib/category-colors.ts +84 -0
- package/dashboard/src/lib/position-algorithm.ts +177 -0
- package/dashboard/src/lib/simplex-noise.ts +217 -0
- package/dashboard/src/lib/store.ts +88 -0
- package/dashboard/src/lib/utils.ts +6 -0
- package/dashboard/src/lib/websocket.ts +249 -0
- package/dashboard/src/types/memory.ts +73 -0
- package/dashboard/tsconfig.json +34 -0
- package/dist/__tests__/consolidation-merge.test.d.ts +9 -0
- package/dist/__tests__/consolidation-merge.test.d.ts.map +1 -0
- package/dist/__tests__/consolidation-merge.test.js +137 -0
- package/dist/__tests__/consolidation-merge.test.js.map +1 -0
- package/dist/__tests__/contradictions.test.d.ts +8 -0
- package/dist/__tests__/contradictions.test.d.ts.map +1 -0
- package/dist/__tests__/contradictions.test.js +78 -0
- package/dist/__tests__/contradictions.test.js.map +1 -0
- package/dist/__tests__/salience-evolution.test.d.ts +7 -0
- package/dist/__tests__/salience-evolution.test.d.ts.map +1 -0
- package/dist/__tests__/salience-evolution.test.js +151 -0
- package/dist/__tests__/salience-evolution.test.js.map +1 -0
- package/dist/__tests__/store.test.d.ts +7 -0
- package/dist/__tests__/store.test.d.ts.map +1 -0
- package/dist/__tests__/store.test.js +582 -0
- package/dist/__tests__/store.test.js.map +1 -0
- package/dist/api/control.d.ts +27 -0
- package/dist/api/control.d.ts.map +1 -0
- package/dist/api/control.js +60 -0
- package/dist/api/control.js.map +1 -0
- package/dist/api/events.d.ts +159 -0
- package/dist/api/events.d.ts.map +1 -0
- package/dist/api/events.js +155 -0
- package/dist/api/events.js.map +1 -0
- package/dist/api/version.d.ts +36 -0
- package/dist/api/version.d.ts.map +1 -0
- package/dist/api/version.js +146 -0
- package/dist/api/version.js.map +1 -0
- package/dist/api/visualization-server.d.ts +11 -0
- package/dist/api/visualization-server.d.ts.map +1 -0
- package/dist/api/visualization-server.js +1186 -0
- package/dist/api/visualization-server.js.map +1 -0
- package/dist/context/project-context.d.ts +57 -0
- package/dist/context/project-context.d.ts.map +1 -0
- package/dist/context/project-context.js +135 -0
- package/dist/context/project-context.js.map +1 -0
- package/dist/database/init.d.ts +49 -0
- package/dist/database/init.d.ts.map +1 -0
- package/dist/database/init.js +567 -0
- package/dist/database/init.js.map +1 -0
- package/dist/defence/__tests__/firewall.test.d.ts +8 -0
- package/dist/defence/__tests__/firewall.test.d.ts.map +1 -0
- package/dist/defence/__tests__/firewall.test.js +123 -0
- package/dist/defence/__tests__/firewall.test.js.map +1 -0
- package/dist/defence/__tests__/fragmentation.test.d.ts +7 -0
- package/dist/defence/__tests__/fragmentation.test.d.ts.map +1 -0
- package/dist/defence/__tests__/fragmentation.test.js +51 -0
- package/dist/defence/__tests__/fragmentation.test.js.map +1 -0
- package/dist/defence/__tests__/pipeline.test.d.ts +8 -0
- package/dist/defence/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/defence/__tests__/pipeline.test.js +61 -0
- package/dist/defence/__tests__/pipeline.test.js.map +1 -0
- package/dist/defence/__tests__/sensitivity.test.d.ts +7 -0
- package/dist/defence/__tests__/sensitivity.test.d.ts.map +1 -0
- package/dist/defence/__tests__/sensitivity.test.js +61 -0
- package/dist/defence/__tests__/sensitivity.test.js.map +1 -0
- package/dist/defence/__tests__/trust.test.d.ts +7 -0
- package/dist/defence/__tests__/trust.test.d.ts.map +1 -0
- package/dist/defence/__tests__/trust.test.js +49 -0
- package/dist/defence/__tests__/trust.test.js.map +1 -0
- package/dist/defence/audit/index.d.ts +4 -0
- package/dist/defence/audit/index.d.ts.map +1 -0
- package/dist/defence/audit/index.js +3 -0
- package/dist/defence/audit/index.js.map +1 -0
- package/dist/defence/audit/logger.d.ts +14 -0
- package/dist/defence/audit/logger.d.ts.map +1 -0
- package/dist/defence/audit/logger.js +54 -0
- package/dist/defence/audit/logger.js.map +1 -0
- package/dist/defence/audit/queries.d.ts +33 -0
- package/dist/defence/audit/queries.d.ts.map +1 -0
- package/dist/defence/audit/queries.js +103 -0
- package/dist/defence/audit/queries.js.map +1 -0
- package/dist/defence/firewall/anomaly-scorer.d.ts +8 -0
- package/dist/defence/firewall/anomaly-scorer.d.ts.map +1 -0
- package/dist/defence/firewall/anomaly-scorer.js +58 -0
- package/dist/defence/firewall/anomaly-scorer.js.map +1 -0
- package/dist/defence/firewall/encoding-detector.d.ts +13 -0
- package/dist/defence/firewall/encoding-detector.d.ts.map +1 -0
- package/dist/defence/firewall/encoding-detector.js +120 -0
- package/dist/defence/firewall/encoding-detector.js.map +1 -0
- package/dist/defence/firewall/index.d.ts +21 -0
- package/dist/defence/firewall/index.d.ts.map +1 -0
- package/dist/defence/firewall/index.js +133 -0
- package/dist/defence/firewall/index.js.map +1 -0
- package/dist/defence/firewall/instruction-detector.d.ts +12 -0
- package/dist/defence/firewall/instruction-detector.d.ts.map +1 -0
- package/dist/defence/firewall/instruction-detector.js +99 -0
- package/dist/defence/firewall/instruction-detector.js.map +1 -0
- package/dist/defence/firewall/privilege-detector.d.ts +13 -0
- package/dist/defence/firewall/privilege-detector.d.ts.map +1 -0
- package/dist/defence/firewall/privilege-detector.js +89 -0
- package/dist/defence/firewall/privilege-detector.js.map +1 -0
- package/dist/defence/fragmentation/assembly-detector.d.ts +18 -0
- package/dist/defence/fragmentation/assembly-detector.d.ts.map +1 -0
- package/dist/defence/fragmentation/assembly-detector.js +72 -0
- package/dist/defence/fragmentation/assembly-detector.js.map +1 -0
- package/dist/defence/fragmentation/entity-extractor.d.ts +19 -0
- package/dist/defence/fragmentation/entity-extractor.d.ts.map +1 -0
- package/dist/defence/fragmentation/entity-extractor.js +86 -0
- package/dist/defence/fragmentation/entity-extractor.js.map +1 -0
- package/dist/defence/fragmentation/index.d.ts +23 -0
- package/dist/defence/fragmentation/index.d.ts.map +1 -0
- package/dist/defence/fragmentation/index.js +49 -0
- package/dist/defence/fragmentation/index.js.map +1 -0
- package/dist/defence/fragmentation/temporal-analyzer.d.ts +28 -0
- package/dist/defence/fragmentation/temporal-analyzer.d.ts.map +1 -0
- package/dist/defence/fragmentation/temporal-analyzer.js +41 -0
- package/dist/defence/fragmentation/temporal-analyzer.js.map +1 -0
- package/dist/defence/index.d.ts +12 -0
- package/dist/defence/index.d.ts.map +1 -0
- package/dist/defence/index.js +18 -0
- package/dist/defence/index.js.map +1 -0
- package/dist/defence/pipeline.d.ts +9 -0
- package/dist/defence/pipeline.d.ts.map +1 -0
- package/dist/defence/pipeline.js +115 -0
- package/dist/defence/pipeline.js.map +1 -0
- package/dist/defence/scanner/index.d.ts +5 -0
- package/dist/defence/scanner/index.d.ts.map +1 -0
- package/dist/defence/scanner/index.js +5 -0
- package/dist/defence/scanner/index.js.map +1 -0
- package/dist/defence/scanner/scan-existing.d.ts +34 -0
- package/dist/defence/scanner/scan-existing.d.ts.map +1 -0
- package/dist/defence/scanner/scan-existing.js +136 -0
- package/dist/defence/scanner/scan-existing.js.map +1 -0
- package/dist/defence/sensitivity/classifier.d.ts +6 -0
- package/dist/defence/sensitivity/classifier.d.ts.map +1 -0
- package/dist/defence/sensitivity/classifier.js +50 -0
- package/dist/defence/sensitivity/classifier.js.map +1 -0
- package/dist/defence/sensitivity/index.d.ts +11 -0
- package/dist/defence/sensitivity/index.d.ts.map +1 -0
- package/dist/defence/sensitivity/index.js +13 -0
- package/dist/defence/sensitivity/index.js.map +1 -0
- package/dist/defence/sensitivity/patterns.d.ts +14 -0
- package/dist/defence/sensitivity/patterns.d.ts.map +1 -0
- package/dist/defence/sensitivity/patterns.js +67 -0
- package/dist/defence/sensitivity/patterns.js.map +1 -0
- package/dist/defence/sensitivity/redaction.d.ts +17 -0
- package/dist/defence/sensitivity/redaction.d.ts.map +1 -0
- package/dist/defence/sensitivity/redaction.js +47 -0
- package/dist/defence/sensitivity/redaction.js.map +1 -0
- package/dist/defence/trust/index.d.ts +3 -0
- package/dist/defence/trust/index.d.ts.map +1 -0
- package/dist/defence/trust/index.js +3 -0
- package/dist/defence/trust/index.js.map +1 -0
- package/dist/defence/trust/recall-filter.d.ts +10 -0
- package/dist/defence/trust/recall-filter.d.ts.map +1 -0
- package/dist/defence/trust/recall-filter.js +38 -0
- package/dist/defence/trust/recall-filter.js.map +1 -0
- package/dist/defence/trust/source-scorer.d.ts +6 -0
- package/dist/defence/trust/source-scorer.d.ts.map +1 -0
- package/dist/defence/trust/source-scorer.js +34 -0
- package/dist/defence/trust/source-scorer.js.map +1 -0
- package/dist/defence/types.d.ts +88 -0
- package/dist/defence/types.d.ts.map +1 -0
- package/dist/defence/types.js +15 -0
- package/dist/defence/types.js.map +1 -0
- package/dist/embeddings/generator.d.ts +20 -0
- package/dist/embeddings/generator.d.ts.map +1 -0
- package/dist/embeddings/generator.js +83 -0
- package/dist/embeddings/generator.js.map +1 -0
- package/dist/embeddings/index.d.ts +2 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +2 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/errors.d.ts +74 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +131 -0
- package/dist/errors.js.map +1 -0
- package/dist/graph/backfill.d.ts +6 -0
- package/dist/graph/backfill.d.ts.map +1 -0
- package/dist/graph/backfill.js +33 -0
- package/dist/graph/backfill.js.map +1 -0
- package/dist/graph/extract.d.ts +21 -0
- package/dist/graph/extract.d.ts.map +1 -0
- package/dist/graph/extract.js +231 -0
- package/dist/graph/extract.js.map +1 -0
- package/dist/graph/resolve.d.ts +6 -0
- package/dist/graph/resolve.d.ts.map +1 -0
- package/dist/graph/resolve.js +126 -0
- package/dist/graph/resolve.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +248 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/activation.d.ts +69 -0
- package/dist/memory/activation.d.ts.map +1 -0
- package/dist/memory/activation.js +168 -0
- package/dist/memory/activation.js.map +1 -0
- package/dist/memory/consolidate.d.ts +98 -0
- package/dist/memory/consolidate.d.ts.map +1 -0
- package/dist/memory/consolidate.js +511 -0
- package/dist/memory/consolidate.js.map +1 -0
- package/dist/memory/contradiction.d.ts +69 -0
- package/dist/memory/contradiction.d.ts.map +1 -0
- package/dist/memory/contradiction.js +286 -0
- package/dist/memory/contradiction.js.map +1 -0
- package/dist/memory/decay.d.ts +62 -0
- package/dist/memory/decay.d.ts.map +1 -0
- package/dist/memory/decay.js +184 -0
- package/dist/memory/decay.js.map +1 -0
- package/dist/memory/salience.d.ts +36 -0
- package/dist/memory/salience.d.ts.map +1 -0
- package/dist/memory/salience.js +216 -0
- package/dist/memory/salience.js.map +1 -0
- package/dist/memory/similarity.d.ts +57 -0
- package/dist/memory/similarity.d.ts.map +1 -0
- package/dist/memory/similarity.js +114 -0
- package/dist/memory/similarity.js.map +1 -0
- package/dist/memory/store.d.ts +179 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +1184 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/types.d.ts +97 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +30 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +568 -0
- package/dist/server.js.map +1 -0
- package/dist/service/install.d.ts +15 -0
- package/dist/service/install.d.ts.map +1 -0
- package/dist/service/install.js +178 -0
- package/dist/service/install.js.map +1 -0
- package/dist/service/templates.d.ts +13 -0
- package/dist/service/templates.d.ts.map +1 -0
- package/dist/service/templates.js +58 -0
- package/dist/service/templates.js.map +1 -0
- package/dist/setup/claude-md.d.ts +12 -0
- package/dist/setup/claude-md.d.ts.map +1 -0
- package/dist/setup/claude-md.js +68 -0
- package/dist/setup/claude-md.js.map +1 -0
- package/dist/setup/clawdbot.d.ts +15 -0
- package/dist/setup/clawdbot.d.ts.map +1 -0
- package/dist/setup/clawdbot.js +118 -0
- package/dist/setup/clawdbot.js.map +1 -0
- package/dist/setup/doctor.d.ts +5 -0
- package/dist/setup/doctor.d.ts.map +1 -0
- package/dist/setup/doctor.js +141 -0
- package/dist/setup/doctor.js.map +1 -0
- package/dist/setup/hooks.d.ts +6 -0
- package/dist/setup/hooks.d.ts.map +1 -0
- package/dist/setup/hooks.js +36 -0
- package/dist/setup/hooks.js.map +1 -0
- package/dist/setup/migrate.d.ts +16 -0
- package/dist/setup/migrate.d.ts.map +1 -0
- package/dist/setup/migrate.js +164 -0
- package/dist/setup/migrate.js.map +1 -0
- package/dist/setup/settings-hooks.d.ts +7 -0
- package/dist/setup/settings-hooks.d.ts.map +1 -0
- package/dist/setup/settings-hooks.js +83 -0
- package/dist/setup/settings-hooks.js.map +1 -0
- package/dist/setup/uninstall.d.ts +12 -0
- package/dist/setup/uninstall.d.ts.map +1 -0
- package/dist/setup/uninstall.js +125 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/tools/context.d.ts +135 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +273 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/forget.d.ts +53 -0
- package/dist/tools/forget.d.ts.map +1 -0
- package/dist/tools/forget.js +179 -0
- package/dist/tools/forget.js.map +1 -0
- package/dist/tools/graph.d.ts +46 -0
- package/dist/tools/graph.d.ts.map +1 -0
- package/dist/tools/graph.js +206 -0
- package/dist/tools/graph.js.map +1 -0
- package/dist/tools/recall.d.ts +79 -0
- package/dist/tools/recall.d.ts.map +1 -0
- package/dist/tools/recall.js +156 -0
- package/dist/tools/recall.js.map +1 -0
- package/dist/tools/remember.d.ts +83 -0
- package/dist/tools/remember.d.ts.map +1 -0
- package/dist/tools/remember.js +151 -0
- package/dist/tools/remember.js.map +1 -0
- package/dist/worker/brain-worker.d.ts +100 -0
- package/dist/worker/brain-worker.d.ts.map +1 -0
- package/dist/worker/brain-worker.js +283 -0
- package/dist/worker/brain-worker.js.map +1 -0
- package/dist/worker/link-discovery.d.ts +47 -0
- package/dist/worker/link-discovery.d.ts.map +1 -0
- package/dist/worker/link-discovery.js +103 -0
- package/dist/worker/link-discovery.js.map +1 -0
- package/dist/worker/predictive-consolidation.d.ts +46 -0
- package/dist/worker/predictive-consolidation.d.ts.map +1 -0
- package/dist/worker/predictive-consolidation.js +110 -0
- package/dist/worker/predictive-consolidation.js.map +1 -0
- package/dist/worker/types.d.ts +91 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +22 -0
- package/dist/worker/types.js.map +1 -0
- package/hooks/clawdbot/cortex-memory/HOOK.md +71 -0
- package/hooks/clawdbot/cortex-memory/handler.js +279 -0
- package/package.json +73 -0
- package/scripts/pre-compact-hook.mjs +716 -0
- package/scripts/session-end-hook.mjs +548 -0
- package/scripts/session-start-hook.mjs +221 -0
- package/scripts/start-dashboard.sh +41 -0
- package/scripts/stop-dashboard.sh +21 -0
- package/scripts/stop-hook.mjs +163 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ShieldCortex - Brain-like Memory System for Claude Code
|
|
4
|
+
*
|
|
5
|
+
* This server provides persistent, intelligent memory for Claude Code,
|
|
6
|
+
* solving the context compaction and session persistence problems.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx shieldcortex # Start MCP server (default)
|
|
10
|
+
* npx shieldcortex --mode mcp # Start MCP server
|
|
11
|
+
* npx shieldcortex --mode api # Start visualization API server
|
|
12
|
+
* npx shieldcortex --mode both # Start both servers
|
|
13
|
+
* npx shieldcortex --dashboard # Start API + Dashboard (admin panel)
|
|
14
|
+
* npx shieldcortex --db /path/to.db # Custom database path
|
|
15
|
+
* npx shieldcortex setup # Configure Claude for proactive memory use
|
|
16
|
+
* npx shieldcortex hook pre-compact # Run pre-compact hook (for settings.json)
|
|
17
|
+
* npx shieldcortex hook session-start # Run session-start hook (for settings.json)
|
|
18
|
+
* npx shieldcortex hook session-end # Run session-end hook (for settings.json)
|
|
19
|
+
* npx shieldcortex service install # Auto-start dashboard on login
|
|
20
|
+
* npx shieldcortex service uninstall # Remove auto-start
|
|
21
|
+
* npx shieldcortex service status # Check service status
|
|
22
|
+
* npx shieldcortex clawdbot install # Install OpenClaw/Clawdbot hook
|
|
23
|
+
* npx shieldcortex clawdbot uninstall # Remove OpenClaw/Clawdbot hook
|
|
24
|
+
* npx shieldcortex clawdbot status # Check OpenClaw hook status
|
|
25
|
+
* npx shieldcortex migrate # Migrate from Claude Cortex
|
|
26
|
+
* npx shieldcortex setup uninstall # Remove hooks + CLAUDE.md block
|
|
27
|
+
* npx shieldcortex uninstall # Full uninstall (service, hooks, CLAUDE.md)
|
|
28
|
+
* npx shieldcortex uninstall --keep-logs # Full uninstall but keep log files
|
|
29
|
+
*/
|
|
30
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
31
|
+
import { spawn } from 'child_process';
|
|
32
|
+
import { fileURLToPath } from 'url';
|
|
33
|
+
import path from 'path';
|
|
34
|
+
import { createServer } from './server.js';
|
|
35
|
+
import { startVisualizationServer } from './api/visualization-server.js';
|
|
36
|
+
import { handleServiceCommand } from './service/install.js';
|
|
37
|
+
import { setupClaudeMd } from './setup/claude-md.js';
|
|
38
|
+
import { handleHookCommand } from './setup/hooks.js';
|
|
39
|
+
import { handleClawdbotCommand } from './setup/clawdbot.js';
|
|
40
|
+
import { createRequire } from 'module';
|
|
41
|
+
const require = createRequire(import.meta.url);
|
|
42
|
+
const pkg = require('../package.json');
|
|
43
|
+
// Get the directory of this file for relative paths
|
|
44
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
45
|
+
const __dirname = path.dirname(__filename);
|
|
46
|
+
// Parse command line arguments
|
|
47
|
+
function parseArgs() {
|
|
48
|
+
const args = process.argv.slice(2);
|
|
49
|
+
const result = { mode: 'mcp' };
|
|
50
|
+
for (let i = 0; i < args.length; i++) {
|
|
51
|
+
if (args[i] === '--db' && args[i + 1]) {
|
|
52
|
+
result.dbPath = args[i + 1];
|
|
53
|
+
i++;
|
|
54
|
+
}
|
|
55
|
+
else if (args[i] === '--dashboard') {
|
|
56
|
+
result.mode = 'dashboard';
|
|
57
|
+
}
|
|
58
|
+
else if (args[i] === '--mode' && args[i + 1]) {
|
|
59
|
+
const mode = args[i + 1].toLowerCase();
|
|
60
|
+
if (mode === 'mcp' || mode === 'api' || mode === 'both' || mode === 'dashboard') {
|
|
61
|
+
result.mode = mode;
|
|
62
|
+
}
|
|
63
|
+
i++;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Start MCP server for Claude Code integration
|
|
70
|
+
*/
|
|
71
|
+
async function startMcpServer(dbPath) {
|
|
72
|
+
// Create the MCP server
|
|
73
|
+
const server = createServer(dbPath);
|
|
74
|
+
// Connect via stdio transport
|
|
75
|
+
const transport = new StdioServerTransport();
|
|
76
|
+
await server.connect(transport);
|
|
77
|
+
// Handle graceful shutdown
|
|
78
|
+
process.on('SIGINT', async () => {
|
|
79
|
+
await server.close();
|
|
80
|
+
process.exit(0);
|
|
81
|
+
});
|
|
82
|
+
process.on('SIGTERM', async () => {
|
|
83
|
+
await server.close();
|
|
84
|
+
process.exit(0);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Start the Next.js dashboard as a child process
|
|
89
|
+
*/
|
|
90
|
+
function startDashboard() {
|
|
91
|
+
// Dashboard is in the dashboard/ subdirectory relative to project root
|
|
92
|
+
// Since we're in dist/, go up one level to find dashboard/
|
|
93
|
+
const dashboardDir = path.resolve(__dirname, '..', 'dashboard');
|
|
94
|
+
console.log(`
|
|
95
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
96
|
+
║ 🧠 ShieldCortex Dashboard ║
|
|
97
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
98
|
+
║ Starting Next.js dashboard... ║
|
|
99
|
+
║ Dashboard: http://localhost:3030 ║
|
|
100
|
+
║ API: http://localhost:3001 ║
|
|
101
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
102
|
+
`);
|
|
103
|
+
// Start Next.js in production mode if built, otherwise dev mode
|
|
104
|
+
const dashboard = spawn('npm', ['run', 'start'], {
|
|
105
|
+
cwd: dashboardDir,
|
|
106
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
107
|
+
shell: true,
|
|
108
|
+
});
|
|
109
|
+
// Pipe dashboard output with prefix
|
|
110
|
+
dashboard.stdout?.on('data', (data) => {
|
|
111
|
+
const lines = data.toString().split('\n').filter((l) => l.trim());
|
|
112
|
+
for (const line of lines) {
|
|
113
|
+
console.log(`[dashboard] ${line}`);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
dashboard.stderr?.on('data', (data) => {
|
|
117
|
+
const lines = data.toString().split('\n').filter((l) => l.trim());
|
|
118
|
+
for (const line of lines) {
|
|
119
|
+
console.error(`[dashboard] ${line}`);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
dashboard.on('error', (error) => {
|
|
123
|
+
console.error('[dashboard] Failed to start:', error.message);
|
|
124
|
+
console.error('[dashboard] Make sure to run "npm run build" in the dashboard directory first.');
|
|
125
|
+
});
|
|
126
|
+
dashboard.on('exit', (code, signal) => {
|
|
127
|
+
if (signal) {
|
|
128
|
+
console.log(`[dashboard] Killed by signal ${signal}`);
|
|
129
|
+
}
|
|
130
|
+
else if (code !== 0) {
|
|
131
|
+
console.error(`[dashboard] Exited with code ${code}`);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
return dashboard;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Main entry point
|
|
138
|
+
*/
|
|
139
|
+
async function main() {
|
|
140
|
+
// Handle --version / -v
|
|
141
|
+
if (process.argv[2] === '--version' || process.argv[2] === '-v') {
|
|
142
|
+
console.log(pkg.version);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Handle "doctor" subcommand
|
|
146
|
+
if (process.argv[2] === 'doctor') {
|
|
147
|
+
const { handleDoctorCommand } = await import('./setup/doctor.js');
|
|
148
|
+
await handleDoctorCommand();
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Handle "setup" subcommand
|
|
152
|
+
if (process.argv[2] === 'setup') {
|
|
153
|
+
if (process.argv[3] === 'uninstall') {
|
|
154
|
+
const { uninstallSetup } = await import('./setup/uninstall.js');
|
|
155
|
+
await uninstallSetup();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const stopHook = process.argv.includes('--with-stop-hook');
|
|
159
|
+
await setupClaudeMd({ stopHook });
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Handle "migrate" subcommand
|
|
163
|
+
if (process.argv[2] === 'migrate') {
|
|
164
|
+
const { handleMigrateCommand } = await import('./setup/migrate.js');
|
|
165
|
+
await handleMigrateCommand();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// Handle "uninstall" subcommand
|
|
169
|
+
if (process.argv[2] === 'uninstall') {
|
|
170
|
+
const { uninstallAll } = await import('./setup/uninstall.js');
|
|
171
|
+
await uninstallAll({ keepLogs: process.argv.includes('--keep-logs') });
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Handle "hook" subcommand
|
|
175
|
+
if (process.argv[2] === 'hook') {
|
|
176
|
+
await handleHookCommand(process.argv[3] || '');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Handle "clawdbot" subcommand
|
|
180
|
+
if (process.argv[2] === 'clawdbot') {
|
|
181
|
+
await handleClawdbotCommand(process.argv[3] || '');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// Handle "service" subcommand before normal mode parsing
|
|
185
|
+
if (process.argv[2] === 'service') {
|
|
186
|
+
await handleServiceCommand(process.argv[3] || '');
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// Handle "graph" subcommand
|
|
190
|
+
if (process.argv[2] === 'graph') {
|
|
191
|
+
const action = process.argv[3];
|
|
192
|
+
if (action === 'backfill') {
|
|
193
|
+
const { initDatabase } = await import('./database/init.js');
|
|
194
|
+
const os = await import('os');
|
|
195
|
+
const dbPath = process.env.CLAUDE_MEMORY_DB || path.join(os.homedir(), '.shieldcortex', 'memories.db');
|
|
196
|
+
initDatabase(dbPath);
|
|
197
|
+
const { backfillGraph } = await import('./graph/backfill.js');
|
|
198
|
+
console.log('Backfilling knowledge graph from existing memories...');
|
|
199
|
+
const result = backfillGraph();
|
|
200
|
+
console.log(`Done! Extracted ${result.entities} new entities, ${result.triples} new triples from ${result.memoriesProcessed} memories.`);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
console.error('Unknown graph command. Available: backfill');
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const { dbPath, mode } = parseArgs();
|
|
209
|
+
let dashboardProcess = null;
|
|
210
|
+
if (mode === 'api') {
|
|
211
|
+
// API mode only - for dashboard visualization
|
|
212
|
+
console.log('Starting ShieldCortex in API mode...');
|
|
213
|
+
startVisualizationServer(dbPath);
|
|
214
|
+
}
|
|
215
|
+
else if (mode === 'dashboard') {
|
|
216
|
+
// Dashboard mode - API + Next.js dashboard
|
|
217
|
+
console.log('Starting ShieldCortex with Dashboard...');
|
|
218
|
+
startVisualizationServer(dbPath);
|
|
219
|
+
dashboardProcess = startDashboard();
|
|
220
|
+
// Graceful shutdown for dashboard mode
|
|
221
|
+
const shutdown = (signal) => {
|
|
222
|
+
console.log(`\nReceived ${signal}, shutting down...`);
|
|
223
|
+
if (dashboardProcess) {
|
|
224
|
+
dashboardProcess.kill('SIGTERM');
|
|
225
|
+
}
|
|
226
|
+
process.exit(0);
|
|
227
|
+
};
|
|
228
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
229
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
230
|
+
}
|
|
231
|
+
else if (mode === 'both') {
|
|
232
|
+
// Both modes - API in background, MCP in foreground
|
|
233
|
+
console.log('Starting ShieldCortex in both modes...');
|
|
234
|
+
startVisualizationServer(dbPath);
|
|
235
|
+
await startMcpServer(dbPath);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
// MCP mode (default) - for Claude Code integration
|
|
239
|
+
await startMcpServer(dbPath);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Run
|
|
243
|
+
main().catch((error) => {
|
|
244
|
+
// Log to stderr to avoid corrupting MCP protocol
|
|
245
|
+
console.error('Failed to start shieldcortex server:', error);
|
|
246
|
+
process.exit(1);
|
|
247
|
+
});
|
|
248
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spreading Activation System
|
|
3
|
+
*
|
|
4
|
+
* Implements brain-like spreading activation where accessing a memory
|
|
5
|
+
* "primes" related memories, making them easier to recall.
|
|
6
|
+
*
|
|
7
|
+
* EPHEMERAL: This cache is session-only and does not persist to disk.
|
|
8
|
+
* Each MCP server restart starts with a fresh activation state.
|
|
9
|
+
*
|
|
10
|
+
* Based on spreading activation theory in cognitive psychology:
|
|
11
|
+
* - Collins & Loftus (1975) semantic network model
|
|
12
|
+
* - Activation spreads through associative links
|
|
13
|
+
* - Activation decays over time (exponential decay)
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Activate a memory and spread activation to linked memories
|
|
17
|
+
*
|
|
18
|
+
* When a memory is accessed, it becomes fully activated (1.0).
|
|
19
|
+
* Linked memories receive partial activation based on link strength.
|
|
20
|
+
*
|
|
21
|
+
* @param memoryId - The ID of the memory being accessed
|
|
22
|
+
*/
|
|
23
|
+
export declare function activateMemory(memoryId: number): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get the activation boost for a memory in search scoring
|
|
26
|
+
*
|
|
27
|
+
* Returns 0 if memory is not activated or activation has fully decayed.
|
|
28
|
+
* Returns up to MAX_ACTIVATION_BOOST for fully activated memories.
|
|
29
|
+
*
|
|
30
|
+
* @param memoryId - The ID of the memory to check
|
|
31
|
+
* @returns Activation boost (0 to MAX_ACTIVATION_BOOST)
|
|
32
|
+
*/
|
|
33
|
+
export declare function getActivationBoost(memoryId: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* Get current activation level for a memory (for debugging/dashboard)
|
|
36
|
+
*
|
|
37
|
+
* @param memoryId - The ID of the memory to check
|
|
38
|
+
* @returns Current activation level (0-1) or null if not activated
|
|
39
|
+
*/
|
|
40
|
+
export declare function getActivationLevel(memoryId: number): number | null;
|
|
41
|
+
/**
|
|
42
|
+
* Get all currently activated memories with their levels
|
|
43
|
+
* Useful for dashboard visualization
|
|
44
|
+
*
|
|
45
|
+
* @returns Array of {memoryId, activationLevel} for all activated memories
|
|
46
|
+
*/
|
|
47
|
+
export declare function getActiveMemories(): Array<{
|
|
48
|
+
memoryId: number;
|
|
49
|
+
activationLevel: number;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Clear the activation cache
|
|
53
|
+
* Useful for testing or manual reset
|
|
54
|
+
*/
|
|
55
|
+
export declare function clearActivationCache(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Prune stale entries from the activation cache
|
|
58
|
+
* Call periodically to prevent memory bloat
|
|
59
|
+
*/
|
|
60
|
+
export declare function pruneActivationCache(): number;
|
|
61
|
+
/**
|
|
62
|
+
* Get activation cache statistics
|
|
63
|
+
*/
|
|
64
|
+
export declare function getActivationStats(): {
|
|
65
|
+
totalEntries: number;
|
|
66
|
+
activeEntries: number;
|
|
67
|
+
averageActivation: number;
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=activation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../src/memory/activation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyBH;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAqCrD;AAaD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe3D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQlE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAYxF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAWA"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spreading Activation System
|
|
3
|
+
*
|
|
4
|
+
* Implements brain-like spreading activation where accessing a memory
|
|
5
|
+
* "primes" related memories, making them easier to recall.
|
|
6
|
+
*
|
|
7
|
+
* EPHEMERAL: This cache is session-only and does not persist to disk.
|
|
8
|
+
* Each MCP server restart starts with a fresh activation state.
|
|
9
|
+
*
|
|
10
|
+
* Based on spreading activation theory in cognitive psychology:
|
|
11
|
+
* - Collins & Loftus (1975) semantic network model
|
|
12
|
+
* - Activation spreads through associative links
|
|
13
|
+
* - Activation decays over time (exponential decay)
|
|
14
|
+
*/
|
|
15
|
+
import { getRelatedMemories } from './store.js';
|
|
16
|
+
/**
|
|
17
|
+
* In-memory activation cache
|
|
18
|
+
* Ephemeral - cleared on process restart
|
|
19
|
+
*/
|
|
20
|
+
const activationCache = new Map();
|
|
21
|
+
// Configuration
|
|
22
|
+
const DECAY_HALF_LIFE_MINUTES = 30; // Activation halves every 30 minutes
|
|
23
|
+
const SPREAD_FACTOR = 0.5; // How much activation spreads (50% of link strength)
|
|
24
|
+
const MAX_SPREAD_DEPTH = 1; // Only spread to direct neighbors (not neighbors of neighbors)
|
|
25
|
+
const MAX_ACTIVATION_BOOST = 0.3; // Cap search boost at 30%
|
|
26
|
+
/**
|
|
27
|
+
* Activate a memory and spread activation to linked memories
|
|
28
|
+
*
|
|
29
|
+
* When a memory is accessed, it becomes fully activated (1.0).
|
|
30
|
+
* Linked memories receive partial activation based on link strength.
|
|
31
|
+
*
|
|
32
|
+
* @param memoryId - The ID of the memory being accessed
|
|
33
|
+
*/
|
|
34
|
+
export function activateMemory(memoryId) {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
// Fully activate the accessed memory
|
|
37
|
+
activationCache.set(memoryId, {
|
|
38
|
+
memoryId,
|
|
39
|
+
activationLevel: 1.0,
|
|
40
|
+
timestamp: now,
|
|
41
|
+
});
|
|
42
|
+
// Spread activation to linked memories
|
|
43
|
+
try {
|
|
44
|
+
const related = getRelatedMemories(memoryId);
|
|
45
|
+
for (const link of related) {
|
|
46
|
+
// Calculate spread amount: link strength * spread factor
|
|
47
|
+
const spreadAmount = link.strength * SPREAD_FACTOR;
|
|
48
|
+
// Get existing activation (if any)
|
|
49
|
+
const existing = activationCache.get(link.memory.id);
|
|
50
|
+
const existingLevel = existing
|
|
51
|
+
? getDecayedActivation(existing, now)
|
|
52
|
+
: 0;
|
|
53
|
+
// Add activation (cap at 1.0)
|
|
54
|
+
const newLevel = Math.min(1.0, existingLevel + spreadAmount);
|
|
55
|
+
activationCache.set(link.memory.id, {
|
|
56
|
+
memoryId: link.memory.id,
|
|
57
|
+
activationLevel: newLevel,
|
|
58
|
+
timestamp: now,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
// Don't fail memory access if spreading fails
|
|
64
|
+
console.error('[shieldcortex] Activation spreading failed:', e);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Calculate decayed activation level
|
|
69
|
+
*
|
|
70
|
+
* Uses exponential decay: level * 0.5^(minutes / half_life)
|
|
71
|
+
*/
|
|
72
|
+
function getDecayedActivation(entry, now) {
|
|
73
|
+
const ageMinutes = (now - entry.timestamp) / (1000 * 60);
|
|
74
|
+
const decayFactor = Math.pow(0.5, ageMinutes / DECAY_HALF_LIFE_MINUTES);
|
|
75
|
+
return entry.activationLevel * decayFactor;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the activation boost for a memory in search scoring
|
|
79
|
+
*
|
|
80
|
+
* Returns 0 if memory is not activated or activation has fully decayed.
|
|
81
|
+
* Returns up to MAX_ACTIVATION_BOOST for fully activated memories.
|
|
82
|
+
*
|
|
83
|
+
* @param memoryId - The ID of the memory to check
|
|
84
|
+
* @returns Activation boost (0 to MAX_ACTIVATION_BOOST)
|
|
85
|
+
*/
|
|
86
|
+
export function getActivationBoost(memoryId) {
|
|
87
|
+
const entry = activationCache.get(memoryId);
|
|
88
|
+
if (!entry)
|
|
89
|
+
return 0;
|
|
90
|
+
const now = Date.now();
|
|
91
|
+
const decayedLevel = getDecayedActivation(entry, now);
|
|
92
|
+
// If activation is negligible, clean up the entry
|
|
93
|
+
if (decayedLevel < 0.01) {
|
|
94
|
+
activationCache.delete(memoryId);
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
// Scale to max boost (e.g., 1.0 activation -> 0.2 boost)
|
|
98
|
+
return decayedLevel * MAX_ACTIVATION_BOOST;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get current activation level for a memory (for debugging/dashboard)
|
|
102
|
+
*
|
|
103
|
+
* @param memoryId - The ID of the memory to check
|
|
104
|
+
* @returns Current activation level (0-1) or null if not activated
|
|
105
|
+
*/
|
|
106
|
+
export function getActivationLevel(memoryId) {
|
|
107
|
+
const entry = activationCache.get(memoryId);
|
|
108
|
+
if (!entry)
|
|
109
|
+
return null;
|
|
110
|
+
const decayedLevel = getDecayedActivation(entry, Date.now());
|
|
111
|
+
if (decayedLevel < 0.01)
|
|
112
|
+
return null;
|
|
113
|
+
return decayedLevel;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get all currently activated memories with their levels
|
|
117
|
+
* Useful for dashboard visualization
|
|
118
|
+
*
|
|
119
|
+
* @returns Array of {memoryId, activationLevel} for all activated memories
|
|
120
|
+
*/
|
|
121
|
+
export function getActiveMemories() {
|
|
122
|
+
const now = Date.now();
|
|
123
|
+
const active = [];
|
|
124
|
+
for (const entry of activationCache.values()) {
|
|
125
|
+
const level = getDecayedActivation(entry, now);
|
|
126
|
+
if (level >= 0.01) {
|
|
127
|
+
active.push({ memoryId: entry.memoryId, activationLevel: level });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return active.sort((a, b) => b.activationLevel - a.activationLevel);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Clear the activation cache
|
|
134
|
+
* Useful for testing or manual reset
|
|
135
|
+
*/
|
|
136
|
+
export function clearActivationCache() {
|
|
137
|
+
activationCache.clear();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Prune stale entries from the activation cache
|
|
141
|
+
* Call periodically to prevent memory bloat
|
|
142
|
+
*/
|
|
143
|
+
export function pruneActivationCache() {
|
|
144
|
+
const now = Date.now();
|
|
145
|
+
let pruned = 0;
|
|
146
|
+
for (const [memoryId, entry] of activationCache) {
|
|
147
|
+
if (getDecayedActivation(entry, now) < 0.01) {
|
|
148
|
+
activationCache.delete(memoryId);
|
|
149
|
+
pruned++;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return pruned;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get activation cache statistics
|
|
156
|
+
*/
|
|
157
|
+
export function getActivationStats() {
|
|
158
|
+
const active = getActiveMemories();
|
|
159
|
+
const avgActivation = active.length > 0
|
|
160
|
+
? active.reduce((sum, a) => sum + a.activationLevel, 0) / active.length
|
|
161
|
+
: 0;
|
|
162
|
+
return {
|
|
163
|
+
totalEntries: activationCache.size,
|
|
164
|
+
activeEntries: active.length,
|
|
165
|
+
averageActivation: avgActivation,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=activation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation.js","sourceRoot":"","sources":["../../src/memory/activation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Consolidation System
|
|
3
|
+
*
|
|
4
|
+
* Like sleep consolidation in human brains, this system:
|
|
5
|
+
* - Moves worthy short-term memories to long-term storage
|
|
6
|
+
* - Strengthens frequently accessed memories
|
|
7
|
+
* - Cleans up decayed/irrelevant memories
|
|
8
|
+
* - Merges similar memories to reduce redundancy
|
|
9
|
+
*/
|
|
10
|
+
import { Memory, MemoryConfig, ConsolidationResult, ContextSummary } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Run full consolidation process
|
|
13
|
+
* This is like the brain's sleep consolidation - should be run periodically
|
|
14
|
+
*/
|
|
15
|
+
export declare function consolidate(config?: MemoryConfig): ConsolidationResult;
|
|
16
|
+
/**
|
|
17
|
+
* Enforce maximum memory limits
|
|
18
|
+
* Removes lowest-priority memories when limits are exceeded
|
|
19
|
+
*/
|
|
20
|
+
export declare function enforceMemoryLimits(config?: MemoryConfig): number;
|
|
21
|
+
/**
|
|
22
|
+
* Find and merge similar short-term memories into coherent long-term entries.
|
|
23
|
+
* Groups memories by project|category, then clusters by Jaccard similarity
|
|
24
|
+
* on content (0.6 weight) + title (0.4 weight).
|
|
25
|
+
* Returns count of deleted (merged) memories.
|
|
26
|
+
*/
|
|
27
|
+
export declare function mergeSimilarMemories(project?: string, similarityThreshold?: number): number;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a context summary for session start
|
|
30
|
+
* Provides a high-level view of relevant memories
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateContextSummary(project?: string, config?: MemoryConfig): Promise<ContextSummary>;
|
|
33
|
+
/**
|
|
34
|
+
* Format context summary as a readable string
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatContextSummary(summary: ContextSummary): string;
|
|
37
|
+
/**
|
|
38
|
+
* Start a new session
|
|
39
|
+
* Creates a session record and returns relevant context
|
|
40
|
+
*/
|
|
41
|
+
export declare function startSession(project?: string): Promise<{
|
|
42
|
+
sessionId: number;
|
|
43
|
+
context: ContextSummary;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* End a session
|
|
47
|
+
* Updates session record with summary
|
|
48
|
+
*/
|
|
49
|
+
export declare function endSession(sessionId: number, summary?: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get suggested context for the current query
|
|
52
|
+
* Returns memories that might be relevant to what the user is working on
|
|
53
|
+
*/
|
|
54
|
+
export declare function getSuggestedContext(currentContext: string, project?: string, limit?: number): Promise<Memory[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Export memories as JSON (for backup/transfer)
|
|
57
|
+
*/
|
|
58
|
+
export declare function exportMemories(project?: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Import memories from JSON
|
|
61
|
+
*/
|
|
62
|
+
export declare function importMemories(json: string): number;
|
|
63
|
+
/**
|
|
64
|
+
* Vacuum database to reclaim space after deletions
|
|
65
|
+
* Run periodically or after major cleanup operations
|
|
66
|
+
*/
|
|
67
|
+
export declare function vacuumDatabase(): {
|
|
68
|
+
success: boolean;
|
|
69
|
+
message: string;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Preview what consolidation would do without actually doing it
|
|
73
|
+
* Useful for dry-run mode
|
|
74
|
+
*/
|
|
75
|
+
export declare function previewConsolidation(config?: MemoryConfig): {
|
|
76
|
+
toPromote: Memory[];
|
|
77
|
+
toDelete: Memory[];
|
|
78
|
+
totalShortTerm: number;
|
|
79
|
+
totalLongTerm: number;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Check if consolidation should be triggered based on memory state
|
|
83
|
+
* Returns true if consolidation is recommended
|
|
84
|
+
*/
|
|
85
|
+
export declare function shouldTriggerConsolidation(config?: MemoryConfig): {
|
|
86
|
+
shouldRun: boolean;
|
|
87
|
+
reason: string;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Full cleanup: consolidate + vacuum
|
|
91
|
+
* Best run periodically to keep database healthy
|
|
92
|
+
*/
|
|
93
|
+
export declare function fullCleanup(config?: MemoryConfig): {
|
|
94
|
+
consolidation: ConsolidationResult;
|
|
95
|
+
vacuumed: boolean;
|
|
96
|
+
merged: number;
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=consolidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../src/memory/consolidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,MAAM,EACN,YAAY,EAEZ,mBAAmB,EACnB,cAAc,EACf,MAAM,YAAY,CAAC;AAyBpB;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,GAAE,YAA6B,GACpC,mBAAmB,CAqErB;AAgDD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,YAA6B,GAAG,MAAM,CA+CjF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,MAAM,EAChB,mBAAmB,GAAE,MAAa,GACjC,MAAM,CA4HR;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,GAAE,YAA6B,GACpC,OAAO,CAAC,cAAc,CAAC,CAqCzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAuCpE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC,CAcD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAwBN;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAavD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgCnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQtE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,GAAE,YAA6B,GACpC;IACD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CA8BA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,GAAE,YAA6B,GACpC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA2BxC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,GAAE,YAA6B,GACpC;IAAE,aAAa,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAe3E"}
|