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
|
@@ -0,0 +1,511 @@
|
|
|
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 { getDatabase, withTransaction } from '../database/init.js';
|
|
11
|
+
import { DEFAULT_CONFIG, } from './types.js';
|
|
12
|
+
import { getMemoriesByType, getRecentMemories, promoteMemory, deleteMemory, searchMemories, getMemoryStats, updateDecayScores, } from './store.js';
|
|
13
|
+
import { processDecay, } from './decay.js';
|
|
14
|
+
import { detectContradictions, linkContradictions, } from './contradiction.js';
|
|
15
|
+
import { jaccardSimilarity } from './similarity.js';
|
|
16
|
+
import { pruneActivationCache } from './activation.js';
|
|
17
|
+
/**
|
|
18
|
+
* Run full consolidation process
|
|
19
|
+
* This is like the brain's sleep consolidation - should be run periodically
|
|
20
|
+
*/
|
|
21
|
+
export function consolidate(config = DEFAULT_CONFIG) {
|
|
22
|
+
// Wrap entire consolidation in a transaction for atomicity
|
|
23
|
+
return withTransaction(() => {
|
|
24
|
+
const db = getDatabase();
|
|
25
|
+
let consolidated = 0;
|
|
26
|
+
let decayed = 0;
|
|
27
|
+
let deleted = 0;
|
|
28
|
+
// Get all short-term memories
|
|
29
|
+
const shortTermMemories = getMemoriesByType('short_term', config.maxShortTermMemories * 2);
|
|
30
|
+
// Process decay for all memories
|
|
31
|
+
const { toDelete, toPromote, updated } = processDecay(shortTermMemories, config);
|
|
32
|
+
// Promote worthy memories
|
|
33
|
+
for (const id of toPromote) {
|
|
34
|
+
promoteMemory(id);
|
|
35
|
+
consolidated++;
|
|
36
|
+
}
|
|
37
|
+
// Delete decayed memories (excluding those just promoted)
|
|
38
|
+
for (const id of toDelete) {
|
|
39
|
+
if (!toPromote.includes(id)) {
|
|
40
|
+
deleteMemory(id);
|
|
41
|
+
deleted++;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Update decayed scores in database
|
|
45
|
+
const updateStmt = db.prepare('UPDATE memories SET salience = ? WHERE id = ?');
|
|
46
|
+
for (const [id, score] of updated) {
|
|
47
|
+
if (!toDelete.includes(id)) {
|
|
48
|
+
updateStmt.run(score, id);
|
|
49
|
+
decayed++;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Enforce memory limits
|
|
53
|
+
deleted += enforceMemoryLimits(config);
|
|
54
|
+
// Persist updated decay scores for efficient sorting
|
|
55
|
+
updateDecayScores();
|
|
56
|
+
// Evolve salience based on structural importance
|
|
57
|
+
let salienceEvolved = 0;
|
|
58
|
+
try {
|
|
59
|
+
salienceEvolved = evolveSalience(db);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
console.error('[shieldcortex] Salience evolution failed:', e);
|
|
63
|
+
}
|
|
64
|
+
// ORGANIC FEATURE: Contradiction Detection (Phase 3)
|
|
65
|
+
// Detect and link contradicting memories during consolidation
|
|
66
|
+
let contradictionsFound = 0;
|
|
67
|
+
let contradictionsLinked = 0;
|
|
68
|
+
try {
|
|
69
|
+
const contradictions = detectContradictions({ minScore: 0.5, limit: 50 });
|
|
70
|
+
contradictionsFound = contradictions.length;
|
|
71
|
+
contradictionsLinked = linkContradictions(contradictions);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
console.error('[shieldcortex] Contradiction detection failed:', e);
|
|
75
|
+
}
|
|
76
|
+
// Prune activation cache to prevent unbounded growth
|
|
77
|
+
pruneActivationCache();
|
|
78
|
+
return { consolidated, decayed, deleted, contradictionsFound, contradictionsLinked, salienceEvolved };
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Adjust salience based on structural importance (link count, contradiction status).
|
|
83
|
+
* Called during consolidation.
|
|
84
|
+
*/
|
|
85
|
+
function evolveSalience(db) {
|
|
86
|
+
let updated = 0;
|
|
87
|
+
// Boost highly-linked memories (hub bonus)
|
|
88
|
+
const hubs = db.prepare(`
|
|
89
|
+
SELECT m.id, m.salience,
|
|
90
|
+
(SELECT COUNT(*) FROM memory_links WHERE source_id = m.id OR target_id = m.id) as link_count
|
|
91
|
+
FROM memories m
|
|
92
|
+
WHERE m.type IN ('long_term', 'episodic')
|
|
93
|
+
`).all();
|
|
94
|
+
for (const hub of hubs) {
|
|
95
|
+
if (hub.link_count < 2)
|
|
96
|
+
continue;
|
|
97
|
+
const linkBonus = Math.min(0.1, Math.log2(hub.link_count) * 0.03);
|
|
98
|
+
const newSalience = Math.min(1.0, hub.salience + linkBonus);
|
|
99
|
+
if (newSalience > hub.salience) {
|
|
100
|
+
db.prepare('UPDATE memories SET salience = ? WHERE id = ?').run(newSalience, hub.id);
|
|
101
|
+
updated++;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Penalize contradicted memories slightly (both sides)
|
|
105
|
+
const contradicted = db.prepare(`
|
|
106
|
+
SELECT DISTINCT source_id, target_id
|
|
107
|
+
FROM memory_links
|
|
108
|
+
WHERE relationship = 'contradicts'
|
|
109
|
+
`).all();
|
|
110
|
+
for (const pair of contradicted) {
|
|
111
|
+
for (const id of [pair.source_id, pair.target_id]) {
|
|
112
|
+
const mem = db.prepare('SELECT salience FROM memories WHERE id = ?').get(id);
|
|
113
|
+
if (mem && mem.salience > 0.3) {
|
|
114
|
+
db.prepare('UPDATE memories SET salience = ? WHERE id = ?')
|
|
115
|
+
.run(mem.salience - 0.02, id);
|
|
116
|
+
updated++;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return updated;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Enforce maximum memory limits
|
|
124
|
+
* Removes lowest-priority memories when limits are exceeded
|
|
125
|
+
*/
|
|
126
|
+
export function enforceMemoryLimits(config = DEFAULT_CONFIG) {
|
|
127
|
+
// Note: If called within consolidate(), this is already in a transaction
|
|
128
|
+
// If called standalone, we wrap it for safety
|
|
129
|
+
const db = getDatabase();
|
|
130
|
+
let deleted = 0;
|
|
131
|
+
// Check short-term memory limit
|
|
132
|
+
const shortTermCount = db.prepare("SELECT COUNT(*) as count FROM memories WHERE type = 'short_term'").get().count;
|
|
133
|
+
if (shortTermCount > config.maxShortTermMemories) {
|
|
134
|
+
const toRemove = shortTermCount - config.maxShortTermMemories;
|
|
135
|
+
const lowPriority = db.prepare(`
|
|
136
|
+
SELECT id FROM memories
|
|
137
|
+
WHERE type = 'short_term'
|
|
138
|
+
ORDER BY salience ASC, last_accessed ASC
|
|
139
|
+
LIMIT ?
|
|
140
|
+
`).all(toRemove);
|
|
141
|
+
for (const { id } of lowPriority) {
|
|
142
|
+
deleteMemory(id);
|
|
143
|
+
deleted++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Check long-term memory limit (more lenient)
|
|
147
|
+
const longTermCount = db.prepare("SELECT COUNT(*) as count FROM memories WHERE type = 'long_term'").get().count;
|
|
148
|
+
if (longTermCount > config.maxLongTermMemories) {
|
|
149
|
+
const toRemove = longTermCount - config.maxLongTermMemories;
|
|
150
|
+
const lowPriority = db.prepare(`
|
|
151
|
+
SELECT id FROM memories
|
|
152
|
+
WHERE type = 'long_term'
|
|
153
|
+
ORDER BY salience ASC, access_count ASC, last_accessed ASC
|
|
154
|
+
LIMIT ?
|
|
155
|
+
`).all(toRemove);
|
|
156
|
+
for (const { id } of lowPriority) {
|
|
157
|
+
deleteMemory(id);
|
|
158
|
+
deleted++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return deleted;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Find and merge similar short-term memories into coherent long-term entries.
|
|
165
|
+
* Groups memories by project|category, then clusters by Jaccard similarity
|
|
166
|
+
* on content (0.6 weight) + title (0.4 weight).
|
|
167
|
+
* Returns count of deleted (merged) memories.
|
|
168
|
+
*/
|
|
169
|
+
export function mergeSimilarMemories(project, similarityThreshold = 0.25) {
|
|
170
|
+
return withTransaction(() => {
|
|
171
|
+
const db = getDatabase();
|
|
172
|
+
let deleted = 0;
|
|
173
|
+
// Step 1: Get all short-term memories, optionally filtered by project
|
|
174
|
+
let sql = "SELECT * FROM memories WHERE type = 'short_term'";
|
|
175
|
+
const params = [];
|
|
176
|
+
if (project) {
|
|
177
|
+
sql += ' AND project = ?';
|
|
178
|
+
params.push(project);
|
|
179
|
+
}
|
|
180
|
+
sql += ' ORDER BY created_at ASC';
|
|
181
|
+
const memories = db.prepare(sql).all(...params);
|
|
182
|
+
// Step 2: Group by project|category
|
|
183
|
+
const groups = new Map();
|
|
184
|
+
for (const mem of memories) {
|
|
185
|
+
const key = `${mem.project || ''}|${mem.category || ''}`;
|
|
186
|
+
if (!groups.has(key))
|
|
187
|
+
groups.set(key, []);
|
|
188
|
+
groups.get(key).push(mem);
|
|
189
|
+
}
|
|
190
|
+
// Step 3: For each group with 2+ members, find clusters
|
|
191
|
+
for (const [, group] of groups) {
|
|
192
|
+
if (group.length < 2)
|
|
193
|
+
continue;
|
|
194
|
+
// Track which memories have been clustered
|
|
195
|
+
const clustered = new Set();
|
|
196
|
+
for (let i = 0; i < group.length; i++) {
|
|
197
|
+
if (clustered.has(i))
|
|
198
|
+
continue;
|
|
199
|
+
const cluster = [i]; // indices into group
|
|
200
|
+
const memA = group[i];
|
|
201
|
+
for (let j = i + 1; j < group.length; j++) {
|
|
202
|
+
if (clustered.has(j))
|
|
203
|
+
continue;
|
|
204
|
+
const memB = group[j];
|
|
205
|
+
const contentSim = jaccardSimilarity(memA.content, memB.content);
|
|
206
|
+
const titleSim = jaccardSimilarity(memA.title, memB.title);
|
|
207
|
+
const combinedSim = contentSim * 0.6 + titleSim * 0.4;
|
|
208
|
+
if (combinedSim >= similarityThreshold) {
|
|
209
|
+
cluster.push(j);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (cluster.length < 2)
|
|
213
|
+
continue;
|
|
214
|
+
// Mark all as clustered
|
|
215
|
+
for (const idx of cluster)
|
|
216
|
+
clustered.add(idx);
|
|
217
|
+
// Step 4: Merge cluster
|
|
218
|
+
// Sort by salience desc, pick highest as base
|
|
219
|
+
const clusterMems = cluster.map(idx => group[idx]);
|
|
220
|
+
clusterMems.sort((a, b) => b.salience - a.salience);
|
|
221
|
+
const base = clusterMems[0];
|
|
222
|
+
const others = clusterMems.slice(1);
|
|
223
|
+
// Merge content
|
|
224
|
+
const bulletPoints = others
|
|
225
|
+
.map(m => `- ${m.title}: ${m.content}`)
|
|
226
|
+
.join('\n');
|
|
227
|
+
const mergedContent = `${base.content}\n\nConsolidated context:\n${bulletPoints}`;
|
|
228
|
+
// Merge tags (union)
|
|
229
|
+
const allTags = new Set();
|
|
230
|
+
for (const m of clusterMems) {
|
|
231
|
+
try {
|
|
232
|
+
const tags = JSON.parse(m.tags || '[]');
|
|
233
|
+
for (const t of tags)
|
|
234
|
+
allTags.add(t);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// skip invalid tags
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Sum access counts
|
|
241
|
+
const totalAccessCount = clusterMems.reduce((sum, m) => sum + (m.access_count || 0), 0);
|
|
242
|
+
// New salience: base + 0.1, capped at 1.0
|
|
243
|
+
const newSalience = Math.min(1.0, base.salience + 0.1);
|
|
244
|
+
// Update base memory
|
|
245
|
+
db.prepare(`
|
|
246
|
+
UPDATE memories
|
|
247
|
+
SET type = 'long_term',
|
|
248
|
+
content = ?,
|
|
249
|
+
tags = ?,
|
|
250
|
+
salience = ?,
|
|
251
|
+
access_count = ?
|
|
252
|
+
WHERE id = ?
|
|
253
|
+
`).run(mergedContent, JSON.stringify([...allTags]), newSalience, totalAccessCount, base.id);
|
|
254
|
+
// Delete others
|
|
255
|
+
for (const other of others) {
|
|
256
|
+
deleteMemory(other.id);
|
|
257
|
+
deleted++;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return deleted;
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate a context summary for session start
|
|
266
|
+
* Provides a high-level view of relevant memories
|
|
267
|
+
*/
|
|
268
|
+
export async function generateContextSummary(project, config = DEFAULT_CONFIG) {
|
|
269
|
+
// Get recent memories
|
|
270
|
+
const recentMemories = getRecentMemories(10, project);
|
|
271
|
+
// Get key architecture decisions
|
|
272
|
+
const keyDecisions = (await searchMemories({
|
|
273
|
+
query: '',
|
|
274
|
+
project,
|
|
275
|
+
category: 'architecture',
|
|
276
|
+
minSalience: 0.6,
|
|
277
|
+
limit: 5,
|
|
278
|
+
}, config)).map(r => r.memory);
|
|
279
|
+
// Get active patterns
|
|
280
|
+
const activePatterns = (await searchMemories({
|
|
281
|
+
query: '',
|
|
282
|
+
project,
|
|
283
|
+
category: 'pattern',
|
|
284
|
+
minSalience: 0.5,
|
|
285
|
+
limit: 5,
|
|
286
|
+
}, config)).map(r => r.memory);
|
|
287
|
+
// Get pending items
|
|
288
|
+
const pendingItems = (await searchMemories({
|
|
289
|
+
query: '',
|
|
290
|
+
project,
|
|
291
|
+
category: 'todo',
|
|
292
|
+
limit: 10,
|
|
293
|
+
}, config)).map(r => r.memory);
|
|
294
|
+
return {
|
|
295
|
+
project,
|
|
296
|
+
recentMemories,
|
|
297
|
+
keyDecisions,
|
|
298
|
+
activePatterns,
|
|
299
|
+
pendingItems,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Format context summary as a readable string
|
|
304
|
+
*/
|
|
305
|
+
export function formatContextSummary(summary) {
|
|
306
|
+
const lines = [];
|
|
307
|
+
if (summary.project) {
|
|
308
|
+
lines.push(`## Project: ${summary.project}\n`);
|
|
309
|
+
}
|
|
310
|
+
if (summary.keyDecisions.length > 0) {
|
|
311
|
+
lines.push('### Key Decisions');
|
|
312
|
+
for (const memory of summary.keyDecisions) {
|
|
313
|
+
lines.push(`- **${memory.title}**: ${memory.content.slice(0, 100)}${memory.content.length > 100 ? '...' : ''}`);
|
|
314
|
+
}
|
|
315
|
+
lines.push('');
|
|
316
|
+
}
|
|
317
|
+
if (summary.activePatterns.length > 0) {
|
|
318
|
+
lines.push('### Active Patterns');
|
|
319
|
+
for (const memory of summary.activePatterns) {
|
|
320
|
+
lines.push(`- **${memory.title}**: ${memory.content.slice(0, 100)}${memory.content.length > 100 ? '...' : ''}`);
|
|
321
|
+
}
|
|
322
|
+
lines.push('');
|
|
323
|
+
}
|
|
324
|
+
if (summary.pendingItems.length > 0) {
|
|
325
|
+
lines.push('### Pending Items');
|
|
326
|
+
for (const memory of summary.pendingItems) {
|
|
327
|
+
lines.push(`- [ ] ${memory.title}`);
|
|
328
|
+
}
|
|
329
|
+
lines.push('');
|
|
330
|
+
}
|
|
331
|
+
if (summary.recentMemories.length > 0) {
|
|
332
|
+
lines.push('### Recent Context');
|
|
333
|
+
for (const memory of summary.recentMemories.slice(0, 5)) {
|
|
334
|
+
lines.push(`- ${memory.title} (${memory.category})`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return lines.join('\n');
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Start a new session
|
|
341
|
+
* Creates a session record and returns relevant context
|
|
342
|
+
*/
|
|
343
|
+
export async function startSession(project) {
|
|
344
|
+
const db = getDatabase();
|
|
345
|
+
// Create session record
|
|
346
|
+
const result = db.prepare(`
|
|
347
|
+
INSERT INTO sessions (project) VALUES (?)
|
|
348
|
+
`).run(project || null);
|
|
349
|
+
const sessionId = result.lastInsertRowid;
|
|
350
|
+
// Generate context summary
|
|
351
|
+
const context = await generateContextSummary(project);
|
|
352
|
+
return { sessionId, context };
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* End a session
|
|
356
|
+
* Updates session record with summary
|
|
357
|
+
*/
|
|
358
|
+
export function endSession(sessionId, summary) {
|
|
359
|
+
const db = getDatabase();
|
|
360
|
+
// Get counts from this session
|
|
361
|
+
const stats = db.prepare(`
|
|
362
|
+
SELECT
|
|
363
|
+
(SELECT COUNT(*) FROM memories WHERE created_at >= s.started_at) as created,
|
|
364
|
+
(SELECT COUNT(*) FROM memories WHERE last_accessed >= s.started_at) as accessed
|
|
365
|
+
FROM sessions s WHERE s.id = ?
|
|
366
|
+
`).get(sessionId);
|
|
367
|
+
db.prepare(`
|
|
368
|
+
UPDATE sessions
|
|
369
|
+
SET ended_at = CURRENT_TIMESTAMP,
|
|
370
|
+
summary = ?,
|
|
371
|
+
memories_created = ?,
|
|
372
|
+
memories_accessed = ?
|
|
373
|
+
WHERE id = ?
|
|
374
|
+
`).run(summary || null, stats?.created || 0, stats?.accessed || 0, sessionId);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Get suggested context for the current query
|
|
378
|
+
* Returns memories that might be relevant to what the user is working on
|
|
379
|
+
*/
|
|
380
|
+
export async function getSuggestedContext(currentContext, project, limit = 5) {
|
|
381
|
+
// Search for relevant memories based on current context
|
|
382
|
+
const results = await searchMemories({
|
|
383
|
+
query: currentContext,
|
|
384
|
+
project,
|
|
385
|
+
minSalience: 0.4,
|
|
386
|
+
limit,
|
|
387
|
+
includeDecayed: false,
|
|
388
|
+
});
|
|
389
|
+
return results.map(r => r.memory);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Export memories as JSON (for backup/transfer)
|
|
393
|
+
*/
|
|
394
|
+
export function exportMemories(project) {
|
|
395
|
+
const db = getDatabase();
|
|
396
|
+
let sql = 'SELECT * FROM memories';
|
|
397
|
+
const params = [];
|
|
398
|
+
if (project) {
|
|
399
|
+
sql += ' WHERE project = ?';
|
|
400
|
+
params.push(project);
|
|
401
|
+
}
|
|
402
|
+
sql += ' ORDER BY created_at ASC';
|
|
403
|
+
const rows = db.prepare(sql).all(...params);
|
|
404
|
+
return JSON.stringify(rows, null, 2);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Import memories from JSON
|
|
408
|
+
*/
|
|
409
|
+
export function importMemories(json) {
|
|
410
|
+
// Wrap in transaction for atomic import
|
|
411
|
+
return withTransaction(() => {
|
|
412
|
+
const db = getDatabase();
|
|
413
|
+
const memories = JSON.parse(json);
|
|
414
|
+
const stmt = db.prepare(`
|
|
415
|
+
INSERT INTO memories (type, category, title, content, project, tags, salience, metadata)
|
|
416
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
417
|
+
`);
|
|
418
|
+
let imported = 0;
|
|
419
|
+
for (const memory of memories) {
|
|
420
|
+
try {
|
|
421
|
+
stmt.run(memory.type, memory.category, memory.title, memory.content, memory.project || null, memory.tags || '[]', memory.salience || 0.5, memory.metadata || '{}');
|
|
422
|
+
imported++;
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
// Skip duplicates or invalid entries
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return imported;
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Vacuum database to reclaim space after deletions
|
|
433
|
+
* Run periodically or after major cleanup operations
|
|
434
|
+
*/
|
|
435
|
+
export function vacuumDatabase() {
|
|
436
|
+
try {
|
|
437
|
+
const db = getDatabase();
|
|
438
|
+
db.exec('VACUUM');
|
|
439
|
+
return { success: true, message: 'Database vacuumed successfully' };
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
return { success: false, message: `Vacuum failed: ${error}` };
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Preview what consolidation would do without actually doing it
|
|
447
|
+
* Useful for dry-run mode
|
|
448
|
+
*/
|
|
449
|
+
export function previewConsolidation(config = DEFAULT_CONFIG) {
|
|
450
|
+
const db = getDatabase();
|
|
451
|
+
// Get all short-term memories
|
|
452
|
+
const shortTermMemories = getMemoriesByType('short_term', config.maxShortTermMemories * 2);
|
|
453
|
+
// Get episodic memories too
|
|
454
|
+
const episodicMemories = getMemoriesByType('episodic', 100);
|
|
455
|
+
// Process decay to see what would happen
|
|
456
|
+
const { toDelete: deleteIds, toPromote: promoteIds } = processDecay([...shortTermMemories, ...episodicMemories], config);
|
|
457
|
+
// Map IDs back to memories
|
|
458
|
+
const allMemories = [...shortTermMemories, ...episodicMemories];
|
|
459
|
+
const toPromote = allMemories.filter(m => promoteIds.includes(m.id));
|
|
460
|
+
const toDelete = allMemories.filter(m => deleteIds.includes(m.id) && !promoteIds.includes(m.id));
|
|
461
|
+
// Get counts
|
|
462
|
+
const totalShortTerm = db.prepare("SELECT COUNT(*) as count FROM memories WHERE type = 'short_term'").get().count;
|
|
463
|
+
const totalLongTerm = db.prepare("SELECT COUNT(*) as count FROM memories WHERE type = 'long_term'").get().count;
|
|
464
|
+
return { toPromote, toDelete, totalShortTerm, totalLongTerm };
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Check if consolidation should be triggered based on memory state
|
|
468
|
+
* Returns true if consolidation is recommended
|
|
469
|
+
*/
|
|
470
|
+
export function shouldTriggerConsolidation(config = DEFAULT_CONFIG) {
|
|
471
|
+
const stats = getMemoryStats();
|
|
472
|
+
const stmFullness = stats.shortTerm / config.maxShortTermMemories;
|
|
473
|
+
// Trigger early when approaching capacity
|
|
474
|
+
if (stmFullness > 0.8) {
|
|
475
|
+
return {
|
|
476
|
+
shouldRun: true,
|
|
477
|
+
reason: `Short-term memory at ${Math.round(stmFullness * 100)}% capacity`,
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
// Check if many memories are below threshold
|
|
481
|
+
const db = getDatabase();
|
|
482
|
+
const lowScoreCount = db.prepare(`
|
|
483
|
+
SELECT COUNT(*) as count FROM memories
|
|
484
|
+
WHERE type = 'short_term' AND decayed_score < ?
|
|
485
|
+
`).get(config.salienceThreshold).count;
|
|
486
|
+
if (lowScoreCount > 10) {
|
|
487
|
+
return {
|
|
488
|
+
shouldRun: true,
|
|
489
|
+
reason: `${lowScoreCount} memories below salience threshold`,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
return { shouldRun: false, reason: 'No consolidation needed' };
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Full cleanup: consolidate + vacuum
|
|
496
|
+
* Best run periodically to keep database healthy
|
|
497
|
+
*/
|
|
498
|
+
export function fullCleanup(config = DEFAULT_CONFIG) {
|
|
499
|
+
// Run consolidation
|
|
500
|
+
const consolidation = consolidate(config);
|
|
501
|
+
// Merge similar memories
|
|
502
|
+
const merged = mergeSimilarMemories();
|
|
503
|
+
// Vacuum if we deleted anything
|
|
504
|
+
let vacuumed = false;
|
|
505
|
+
if (consolidation.deleted > 0 || merged > 0) {
|
|
506
|
+
const vacResult = vacuumDatabase();
|
|
507
|
+
vacuumed = vacResult.success;
|
|
508
|
+
}
|
|
509
|
+
return { consolidation, vacuumed, merged };
|
|
510
|
+
}
|
|
511
|
+
//# sourceMappingURL=consolidate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/memory/consolidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contradiction Detection System
|
|
3
|
+
*
|
|
4
|
+
* Detects potentially contradictory memories based on:
|
|
5
|
+
* - Opposite statements about the same topic
|
|
6
|
+
* - Different solutions to the same problem
|
|
7
|
+
* - Conflicting preferences or decisions
|
|
8
|
+
*
|
|
9
|
+
* Phase 3 Organic Brain Feature
|
|
10
|
+
*/
|
|
11
|
+
import { Memory } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Result of checking two memories for contradiction
|
|
14
|
+
*/
|
|
15
|
+
export interface ContradictionResult {
|
|
16
|
+
memoryA: Memory;
|
|
17
|
+
memoryB: Memory;
|
|
18
|
+
score: number;
|
|
19
|
+
reason: string;
|
|
20
|
+
sharedTopics: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if two memories might contradict each other
|
|
24
|
+
*
|
|
25
|
+
* @param memoryA - First memory to compare
|
|
26
|
+
* @param memoryB - Second memory to compare
|
|
27
|
+
* @returns ContradictionResult if contradiction detected, null otherwise
|
|
28
|
+
*/
|
|
29
|
+
export declare function checkContradiction(memoryA: Memory, memoryB: Memory): ContradictionResult | null;
|
|
30
|
+
/**
|
|
31
|
+
* Options for detecting contradictions
|
|
32
|
+
*/
|
|
33
|
+
export interface DetectContradictionsOptions {
|
|
34
|
+
project?: string;
|
|
35
|
+
category?: string;
|
|
36
|
+
minScore?: number;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Detect contradictions across all memories matching the filter
|
|
41
|
+
*
|
|
42
|
+
* @param options - Filtering and limit options
|
|
43
|
+
* @returns Array of ContradictionResults sorted by score
|
|
44
|
+
*/
|
|
45
|
+
export declare function detectContradictions(options?: DetectContradictionsOptions): ContradictionResult[];
|
|
46
|
+
/**
|
|
47
|
+
* Create 'contradicts' links between memories
|
|
48
|
+
* Called during consolidation to persist detected contradictions
|
|
49
|
+
*
|
|
50
|
+
* @param contradictions - Array of detected contradictions
|
|
51
|
+
* @returns Number of links created
|
|
52
|
+
*/
|
|
53
|
+
export declare function linkContradictions(contradictions: ContradictionResult[]): number;
|
|
54
|
+
/**
|
|
55
|
+
* Get all contradictions for a specific memory
|
|
56
|
+
*
|
|
57
|
+
* @param memoryId - ID of the memory to check
|
|
58
|
+
* @returns Array of ContradictionResults
|
|
59
|
+
*/
|
|
60
|
+
export declare function getContradictionsFor(memoryId: number): ContradictionResult[];
|
|
61
|
+
/**
|
|
62
|
+
* Check if a contradiction link already exists between two memories
|
|
63
|
+
*
|
|
64
|
+
* @param memoryAId - First memory ID
|
|
65
|
+
* @param memoryBId - Second memory ID
|
|
66
|
+
* @returns True if a contradiction link exists
|
|
67
|
+
*/
|
|
68
|
+
export declare function hasContradictionLink(memoryAId: number, memoryBId: number): boolean;
|
|
69
|
+
//# sourceMappingURL=contradiction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contradiction.d.ts","sourceRoot":"","sources":["../../src/memory/contradiction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAuDpC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAgFD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,mBAAmB,GAAG,IAAI,CA8D5B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,mBAAmB,EAAE,CAwCvB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAchF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAoB5E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAUlF"}
|