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,567 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database initialization and connection management
|
|
3
|
+
*/
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync, unlinkSync } from 'fs';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
7
|
+
import { homedir } from 'os';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
let db = null;
|
|
12
|
+
let currentDbPath = null;
|
|
13
|
+
let lockFilePath = null;
|
|
14
|
+
// Anti-bloat: Database size limits
|
|
15
|
+
const MAX_DB_SIZE = 100 * 1024 * 1024; // 100MB hard limit
|
|
16
|
+
const WARN_DB_SIZE = 50 * 1024 * 1024; // 50MB warning threshold
|
|
17
|
+
/**
|
|
18
|
+
* Expand ~ to home directory
|
|
19
|
+
*/
|
|
20
|
+
function expandPath(path) {
|
|
21
|
+
if (path.startsWith('~')) {
|
|
22
|
+
return join(homedir(), path.slice(1));
|
|
23
|
+
}
|
|
24
|
+
return path;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the database path with legacy fallback
|
|
28
|
+
* - New installs use ~/.shieldcortex/
|
|
29
|
+
* - Existing users with ~/.claude-memory/ continue to work
|
|
30
|
+
*/
|
|
31
|
+
function getDefaultDbPath() {
|
|
32
|
+
const newPath = join(homedir(), '.shieldcortex', 'memories.db');
|
|
33
|
+
const legacyPath = join(homedir(), '.claude-memory', 'memories.db');
|
|
34
|
+
// Prefer new path if it exists, or if neither exists (new install)
|
|
35
|
+
if (existsSync(newPath) || !existsSync(legacyPath)) {
|
|
36
|
+
return newPath;
|
|
37
|
+
}
|
|
38
|
+
// Fall back to legacy path for existing users
|
|
39
|
+
return legacyPath;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize the database connection
|
|
43
|
+
*/
|
|
44
|
+
export function initDatabase(dbPath) {
|
|
45
|
+
// Use auto-detected path if not specified
|
|
46
|
+
const resolvedPath = dbPath || getDefaultDbPath();
|
|
47
|
+
if (db) {
|
|
48
|
+
return db;
|
|
49
|
+
}
|
|
50
|
+
const expandedPath = expandPath(resolvedPath);
|
|
51
|
+
const dir = dirname(expandedPath);
|
|
52
|
+
// Create directory if it doesn't exist
|
|
53
|
+
if (!existsSync(dir)) {
|
|
54
|
+
mkdirSync(dir, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
// Store path for size monitoring
|
|
57
|
+
currentDbPath = expandedPath;
|
|
58
|
+
// Create database connection
|
|
59
|
+
db = new Database(expandedPath);
|
|
60
|
+
// Enable WAL mode for better concurrency
|
|
61
|
+
db.pragma('journal_mode = WAL');
|
|
62
|
+
db.pragma('synchronous = NORMAL');
|
|
63
|
+
db.pragma('foreign_keys = ON');
|
|
64
|
+
// Race condition mitigation: wait up to 10 seconds for locks
|
|
65
|
+
db.pragma('busy_timeout = 10000');
|
|
66
|
+
// Auto-checkpoint every 100 pages (~400KB) to prevent WAL bloat
|
|
67
|
+
db.pragma('wal_autocheckpoint = 100');
|
|
68
|
+
// Create lock file to help detect concurrent instances
|
|
69
|
+
lockFilePath = expandedPath + '.lock';
|
|
70
|
+
const pid = process.pid;
|
|
71
|
+
try {
|
|
72
|
+
writeFileSync(lockFilePath, `${pid}\n${new Date().toISOString()}`);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Non-fatal - lock file is advisory
|
|
76
|
+
}
|
|
77
|
+
// Register cleanup handlers for graceful shutdown
|
|
78
|
+
registerShutdownHandlers();
|
|
79
|
+
// Run migrations FIRST for existing databases
|
|
80
|
+
// This ensures columns exist before schema tries to create indexes on them
|
|
81
|
+
runMigrations(db);
|
|
82
|
+
// Run schema (uses IF NOT EXISTS, safe for existing tables and indexes)
|
|
83
|
+
const schemaPath = join(__dirname, 'schema.sql');
|
|
84
|
+
if (existsSync(schemaPath)) {
|
|
85
|
+
const schema = readFileSync(schemaPath, 'utf-8');
|
|
86
|
+
db.exec(schema);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Inline schema if file not found (for bundled deployment)
|
|
90
|
+
db.exec(getInlineSchema());
|
|
91
|
+
}
|
|
92
|
+
return db;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Run database migrations for existing databases
|
|
96
|
+
*/
|
|
97
|
+
function runMigrations(database) {
|
|
98
|
+
// Check if memories table exists (skip migrations on fresh database)
|
|
99
|
+
const tableExists = database.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memories'").get();
|
|
100
|
+
if (!tableExists) {
|
|
101
|
+
// Fresh database - schema will create everything
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Check existing columns
|
|
105
|
+
const tableInfo = database.prepare("PRAGMA table_info(memories)").all();
|
|
106
|
+
const columnNames = new Set(tableInfo.map(col => col.name));
|
|
107
|
+
// Migration: decayed_score column
|
|
108
|
+
if (!columnNames.has('decayed_score')) {
|
|
109
|
+
database.exec('ALTER TABLE memories ADD COLUMN decayed_score REAL');
|
|
110
|
+
database.exec('CREATE INDEX IF NOT EXISTS idx_memories_decayed_score ON memories(decayed_score DESC)');
|
|
111
|
+
}
|
|
112
|
+
// Migration: embedding column for semantic search
|
|
113
|
+
if (!columnNames.has('embedding')) {
|
|
114
|
+
database.exec('ALTER TABLE memories ADD COLUMN embedding BLOB');
|
|
115
|
+
}
|
|
116
|
+
// Migration: scope column for cross-project knowledge
|
|
117
|
+
if (!columnNames.has('scope')) {
|
|
118
|
+
database.exec("ALTER TABLE memories ADD COLUMN scope TEXT DEFAULT 'project'");
|
|
119
|
+
}
|
|
120
|
+
// Migration: transferable column for cross-project sharing
|
|
121
|
+
if (!columnNames.has('transferable')) {
|
|
122
|
+
database.exec('ALTER TABLE memories ADD COLUMN transferable INTEGER DEFAULT 0');
|
|
123
|
+
}
|
|
124
|
+
// Migration: Defence columns on memories table
|
|
125
|
+
if (!columnNames.has('trust_score')) {
|
|
126
|
+
database.exec("ALTER TABLE memories ADD COLUMN trust_score REAL DEFAULT 1.0");
|
|
127
|
+
}
|
|
128
|
+
if (!columnNames.has('sensitivity_level')) {
|
|
129
|
+
database.exec("ALTER TABLE memories ADD COLUMN sensitivity_level TEXT DEFAULT 'INTERNAL'");
|
|
130
|
+
}
|
|
131
|
+
if (!columnNames.has('source')) {
|
|
132
|
+
database.exec("ALTER TABLE memories ADD COLUMN source TEXT DEFAULT 'user:direct'");
|
|
133
|
+
}
|
|
134
|
+
// Migration: Defence tables (defence_audit, quarantine, fragmentation_entities)
|
|
135
|
+
try {
|
|
136
|
+
database.exec(`
|
|
137
|
+
CREATE TABLE IF NOT EXISTS defence_audit (
|
|
138
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
139
|
+
memory_id INTEGER,
|
|
140
|
+
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
141
|
+
source_type TEXT NOT NULL,
|
|
142
|
+
source_identifier TEXT NOT NULL,
|
|
143
|
+
trust_score REAL NOT NULL,
|
|
144
|
+
sensitivity_level TEXT NOT NULL DEFAULT 'INTERNAL',
|
|
145
|
+
firewall_result TEXT NOT NULL CHECK(firewall_result IN ('ALLOW', 'BLOCK', 'QUARANTINE')),
|
|
146
|
+
anomaly_score REAL DEFAULT 0.0,
|
|
147
|
+
threat_indicators TEXT DEFAULT '[]',
|
|
148
|
+
blocked_patterns TEXT DEFAULT '[]',
|
|
149
|
+
reason TEXT,
|
|
150
|
+
fragmentation_score REAL,
|
|
151
|
+
pipeline_duration_ms INTEGER,
|
|
152
|
+
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL
|
|
153
|
+
);
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_audit_memory ON defence_audit(memory_id);
|
|
155
|
+
CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON defence_audit(timestamp DESC);
|
|
156
|
+
CREATE INDEX IF NOT EXISTS idx_audit_result ON defence_audit(firewall_result);
|
|
157
|
+
CREATE INDEX IF NOT EXISTS idx_audit_source ON defence_audit(source_type);
|
|
158
|
+
|
|
159
|
+
CREATE TABLE IF NOT EXISTS quarantine (
|
|
160
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
161
|
+
original_content TEXT NOT NULL,
|
|
162
|
+
original_title TEXT,
|
|
163
|
+
source_type TEXT NOT NULL,
|
|
164
|
+
source_identifier TEXT NOT NULL,
|
|
165
|
+
reason TEXT NOT NULL,
|
|
166
|
+
threat_indicators TEXT DEFAULT '[]',
|
|
167
|
+
anomaly_score REAL DEFAULT 0.0,
|
|
168
|
+
firewall_result TEXT NOT NULL CHECK(firewall_result IN ('BLOCK', 'QUARANTINE')),
|
|
169
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'approved', 'rejected', 'expired')),
|
|
170
|
+
reviewed_at TIMESTAMP,
|
|
171
|
+
reviewed_by TEXT,
|
|
172
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
173
|
+
expires_at TIMESTAMP,
|
|
174
|
+
audit_id INTEGER,
|
|
175
|
+
FOREIGN KEY (audit_id) REFERENCES defence_audit(id) ON DELETE SET NULL
|
|
176
|
+
);
|
|
177
|
+
CREATE INDEX IF NOT EXISTS idx_quarantine_status ON quarantine(status);
|
|
178
|
+
CREATE INDEX IF NOT EXISTS idx_quarantine_created ON quarantine(created_at DESC);
|
|
179
|
+
|
|
180
|
+
CREATE TABLE IF NOT EXISTS fragmentation_entities (
|
|
181
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
182
|
+
memory_id INTEGER NOT NULL,
|
|
183
|
+
entity_value TEXT NOT NULL,
|
|
184
|
+
entity_type TEXT NOT NULL,
|
|
185
|
+
context_snippet TEXT,
|
|
186
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
187
|
+
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
188
|
+
);
|
|
189
|
+
CREATE INDEX IF NOT EXISTS idx_frag_entities_memory ON fragmentation_entities(memory_id);
|
|
190
|
+
CREATE INDEX IF NOT EXISTS idx_frag_entities_text ON fragmentation_entities(entity_value);
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_frag_entities_type ON fragmentation_entities(entity_type);
|
|
192
|
+
`);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Tables may already exist - safe to ignore
|
|
196
|
+
}
|
|
197
|
+
// Migration: Ontology tables (entities, triples, memory_entities)
|
|
198
|
+
try {
|
|
199
|
+
database.exec(`
|
|
200
|
+
CREATE TABLE IF NOT EXISTS entities (
|
|
201
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
202
|
+
name TEXT NOT NULL,
|
|
203
|
+
type TEXT NOT NULL,
|
|
204
|
+
aliases TEXT DEFAULT '[]',
|
|
205
|
+
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
206
|
+
memory_count INTEGER DEFAULT 0,
|
|
207
|
+
UNIQUE(name, type)
|
|
208
|
+
);
|
|
209
|
+
CREATE INDEX IF NOT EXISTS idx_entities_name ON entities(name);
|
|
210
|
+
CREATE INDEX IF NOT EXISTS idx_entities_type ON entities(type);
|
|
211
|
+
|
|
212
|
+
CREATE TABLE IF NOT EXISTS triples (
|
|
213
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
214
|
+
subject_id INTEGER NOT NULL,
|
|
215
|
+
predicate TEXT NOT NULL,
|
|
216
|
+
object_id INTEGER NOT NULL,
|
|
217
|
+
source_memory_id INTEGER,
|
|
218
|
+
confidence REAL DEFAULT 0.8,
|
|
219
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
220
|
+
FOREIGN KEY (subject_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
221
|
+
FOREIGN KEY (object_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
222
|
+
FOREIGN KEY (source_memory_id) REFERENCES memories(id) ON DELETE SET NULL,
|
|
223
|
+
UNIQUE(subject_id, predicate, object_id)
|
|
224
|
+
);
|
|
225
|
+
CREATE INDEX IF NOT EXISTS idx_triples_subject ON triples(subject_id);
|
|
226
|
+
CREATE INDEX IF NOT EXISTS idx_triples_object ON triples(object_id);
|
|
227
|
+
CREATE INDEX IF NOT EXISTS idx_triples_predicate ON triples(predicate);
|
|
228
|
+
|
|
229
|
+
CREATE TABLE IF NOT EXISTS memory_entities (
|
|
230
|
+
memory_id INTEGER NOT NULL,
|
|
231
|
+
entity_id INTEGER NOT NULL,
|
|
232
|
+
role TEXT DEFAULT 'mention',
|
|
233
|
+
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE,
|
|
234
|
+
FOREIGN KEY (entity_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
235
|
+
PRIMARY KEY (memory_id, entity_id)
|
|
236
|
+
);
|
|
237
|
+
`);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Tables may already exist - safe to ignore
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get the current database instance
|
|
245
|
+
*/
|
|
246
|
+
export function getDatabase() {
|
|
247
|
+
if (!db) {
|
|
248
|
+
throw new Error('Database not initialized. Call initDatabase() first.');
|
|
249
|
+
}
|
|
250
|
+
return db;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Close the database connection with proper cleanup
|
|
254
|
+
*/
|
|
255
|
+
export function closeDatabase() {
|
|
256
|
+
if (db) {
|
|
257
|
+
try {
|
|
258
|
+
// Checkpoint WAL before closing to flush all changes
|
|
259
|
+
db.pragma('wal_checkpoint(TRUNCATE)');
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
// Ignore checkpoint errors on close
|
|
263
|
+
}
|
|
264
|
+
db.close();
|
|
265
|
+
db = null;
|
|
266
|
+
currentDbPath = null;
|
|
267
|
+
// Remove lock file
|
|
268
|
+
if (lockFilePath && existsSync(lockFilePath)) {
|
|
269
|
+
try {
|
|
270
|
+
unlinkSync(lockFilePath);
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Non-fatal
|
|
274
|
+
}
|
|
275
|
+
lockFilePath = null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Register handlers for graceful shutdown
|
|
281
|
+
*/
|
|
282
|
+
let shutdownRegistered = false;
|
|
283
|
+
function registerShutdownHandlers() {
|
|
284
|
+
if (shutdownRegistered)
|
|
285
|
+
return;
|
|
286
|
+
shutdownRegistered = true;
|
|
287
|
+
const cleanup = () => {
|
|
288
|
+
closeDatabase();
|
|
289
|
+
};
|
|
290
|
+
// Handle various termination signals
|
|
291
|
+
process.on('exit', cleanup);
|
|
292
|
+
process.on('SIGINT', () => { cleanup(); process.exit(0); });
|
|
293
|
+
process.on('SIGTERM', () => { cleanup(); process.exit(0); });
|
|
294
|
+
process.on('uncaughtException', (err) => {
|
|
295
|
+
console.error('Uncaught exception:', err);
|
|
296
|
+
cleanup();
|
|
297
|
+
process.exit(1);
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Manually checkpoint the WAL file (call periodically for long-running processes)
|
|
302
|
+
*/
|
|
303
|
+
export function checkpointWal() {
|
|
304
|
+
const database = getDatabase();
|
|
305
|
+
const result = database.pragma('wal_checkpoint(PASSIVE)');
|
|
306
|
+
return {
|
|
307
|
+
walPages: result[0]?.log || 0,
|
|
308
|
+
checkpointed: result[0]?.checkpointed || 0,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
export function checkDatabaseSize() {
|
|
312
|
+
if (!currentDbPath || !existsSync(currentDbPath)) {
|
|
313
|
+
return {
|
|
314
|
+
size: 0,
|
|
315
|
+
sizeFormatted: '0 KB',
|
|
316
|
+
warning: false,
|
|
317
|
+
blocked: false,
|
|
318
|
+
message: 'Database not initialized',
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
const stats = statSync(currentDbPath);
|
|
322
|
+
const size = stats.size;
|
|
323
|
+
const sizeKB = size / 1024;
|
|
324
|
+
const sizeMB = sizeKB / 1024;
|
|
325
|
+
let sizeFormatted;
|
|
326
|
+
if (sizeMB >= 1) {
|
|
327
|
+
sizeFormatted = `${sizeMB.toFixed(2)} MB`;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
sizeFormatted = `${sizeKB.toFixed(2)} KB`;
|
|
331
|
+
}
|
|
332
|
+
const warning = size > WARN_DB_SIZE;
|
|
333
|
+
const blocked = size > MAX_DB_SIZE;
|
|
334
|
+
let message = `Database size: ${sizeFormatted}`;
|
|
335
|
+
if (blocked) {
|
|
336
|
+
message = `DATABASE BLOCKED: ${sizeFormatted} exceeds 100MB limit. Run consolidation and vacuum.`;
|
|
337
|
+
}
|
|
338
|
+
else if (warning) {
|
|
339
|
+
message = `WARNING: ${sizeFormatted} approaching 100MB limit. Consider running consolidation.`;
|
|
340
|
+
}
|
|
341
|
+
return { size, sizeFormatted, warning, blocked, message };
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Check if database operations should be blocked due to size
|
|
345
|
+
*/
|
|
346
|
+
export function isDatabaseBlocked() {
|
|
347
|
+
return checkDatabaseSize().blocked;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Inline schema for bundled deployment
|
|
351
|
+
*/
|
|
352
|
+
function getInlineSchema() {
|
|
353
|
+
return `
|
|
354
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
355
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
356
|
+
type TEXT NOT NULL CHECK(type IN ('short_term', 'long_term', 'episodic')),
|
|
357
|
+
category TEXT NOT NULL DEFAULT 'note',
|
|
358
|
+
title TEXT NOT NULL,
|
|
359
|
+
content TEXT NOT NULL,
|
|
360
|
+
project TEXT,
|
|
361
|
+
tags TEXT DEFAULT '[]',
|
|
362
|
+
salience REAL DEFAULT 0.5 CHECK(salience >= 0 AND salience <= 1),
|
|
363
|
+
decayed_score REAL,
|
|
364
|
+
access_count INTEGER DEFAULT 0,
|
|
365
|
+
last_accessed TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
366
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
367
|
+
metadata TEXT DEFAULT '{}',
|
|
368
|
+
embedding BLOB,
|
|
369
|
+
scope TEXT DEFAULT 'project',
|
|
370
|
+
transferable INTEGER DEFAULT 0,
|
|
371
|
+
trust_score REAL DEFAULT 1.0,
|
|
372
|
+
sensitivity_level TEXT DEFAULT 'INTERNAL',
|
|
373
|
+
source TEXT DEFAULT 'user:direct'
|
|
374
|
+
);
|
|
375
|
+
|
|
376
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
|
|
377
|
+
title,
|
|
378
|
+
content,
|
|
379
|
+
tags,
|
|
380
|
+
content='memories',
|
|
381
|
+
content_rowid='id',
|
|
382
|
+
tokenize='porter unicode61'
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
|
|
386
|
+
INSERT INTO memories_fts(rowid, title, content, tags)
|
|
387
|
+
VALUES (new.id, new.title, new.content, new.tags);
|
|
388
|
+
END;
|
|
389
|
+
|
|
390
|
+
CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
|
|
391
|
+
INSERT INTO memories_fts(memories_fts, rowid, title, content, tags)
|
|
392
|
+
VALUES('delete', old.id, old.title, old.content, old.tags);
|
|
393
|
+
END;
|
|
394
|
+
|
|
395
|
+
CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
|
|
396
|
+
INSERT INTO memories_fts(memories_fts, rowid, title, content, tags)
|
|
397
|
+
VALUES('delete', old.id, old.title, old.content, old.tags);
|
|
398
|
+
INSERT INTO memories_fts(rowid, title, content, tags)
|
|
399
|
+
VALUES (new.id, new.title, new.content, new.tags);
|
|
400
|
+
END;
|
|
401
|
+
|
|
402
|
+
CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type);
|
|
403
|
+
CREATE INDEX IF NOT EXISTS idx_memories_project ON memories(project);
|
|
404
|
+
CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(category);
|
|
405
|
+
CREATE INDEX IF NOT EXISTS idx_memories_salience ON memories(salience DESC);
|
|
406
|
+
CREATE INDEX IF NOT EXISTS idx_memories_decayed_score ON memories(decayed_score DESC);
|
|
407
|
+
CREATE INDEX IF NOT EXISTS idx_memories_last_accessed ON memories(last_accessed DESC);
|
|
408
|
+
|
|
409
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
410
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
411
|
+
project TEXT,
|
|
412
|
+
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
413
|
+
ended_at TIMESTAMP,
|
|
414
|
+
summary TEXT,
|
|
415
|
+
memories_created INTEGER DEFAULT 0,
|
|
416
|
+
memories_accessed INTEGER DEFAULT 0
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
CREATE TABLE IF NOT EXISTS memory_links (
|
|
420
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
421
|
+
source_id INTEGER NOT NULL,
|
|
422
|
+
target_id INTEGER NOT NULL,
|
|
423
|
+
relationship TEXT NOT NULL,
|
|
424
|
+
strength REAL DEFAULT 0.5,
|
|
425
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
426
|
+
FOREIGN KEY (source_id) REFERENCES memories(id) ON DELETE CASCADE,
|
|
427
|
+
FOREIGN KEY (target_id) REFERENCES memories(id) ON DELETE CASCADE,
|
|
428
|
+
UNIQUE(source_id, target_id)
|
|
429
|
+
);
|
|
430
|
+
|
|
431
|
+
-- Events table for cross-process IPC (MCP → Dashboard)
|
|
432
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
433
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
434
|
+
type TEXT NOT NULL,
|
|
435
|
+
data TEXT,
|
|
436
|
+
timestamp TEXT NOT NULL,
|
|
437
|
+
processed INTEGER DEFAULT 0
|
|
438
|
+
);
|
|
439
|
+
|
|
440
|
+
CREATE INDEX IF NOT EXISTS idx_events_processed ON events(processed, id);
|
|
441
|
+
|
|
442
|
+
CREATE TABLE IF NOT EXISTS entities (
|
|
443
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
444
|
+
name TEXT NOT NULL,
|
|
445
|
+
type TEXT NOT NULL,
|
|
446
|
+
aliases TEXT DEFAULT '[]',
|
|
447
|
+
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
448
|
+
memory_count INTEGER DEFAULT 0,
|
|
449
|
+
UNIQUE(name, type)
|
|
450
|
+
);
|
|
451
|
+
|
|
452
|
+
CREATE INDEX IF NOT EXISTS idx_entities_name ON entities(name);
|
|
453
|
+
CREATE INDEX IF NOT EXISTS idx_entities_type ON entities(type);
|
|
454
|
+
|
|
455
|
+
CREATE TABLE IF NOT EXISTS triples (
|
|
456
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
457
|
+
subject_id INTEGER NOT NULL,
|
|
458
|
+
predicate TEXT NOT NULL,
|
|
459
|
+
object_id INTEGER NOT NULL,
|
|
460
|
+
source_memory_id INTEGER,
|
|
461
|
+
confidence REAL DEFAULT 0.8,
|
|
462
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
463
|
+
FOREIGN KEY (subject_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
464
|
+
FOREIGN KEY (object_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
465
|
+
FOREIGN KEY (source_memory_id) REFERENCES memories(id) ON DELETE SET NULL,
|
|
466
|
+
UNIQUE(subject_id, predicate, object_id)
|
|
467
|
+
);
|
|
468
|
+
|
|
469
|
+
CREATE INDEX IF NOT EXISTS idx_triples_subject ON triples(subject_id);
|
|
470
|
+
CREATE INDEX IF NOT EXISTS idx_triples_object ON triples(object_id);
|
|
471
|
+
CREATE INDEX IF NOT EXISTS idx_triples_predicate ON triples(predicate);
|
|
472
|
+
|
|
473
|
+
CREATE TABLE IF NOT EXISTS memory_entities (
|
|
474
|
+
memory_id INTEGER NOT NULL,
|
|
475
|
+
entity_id INTEGER NOT NULL,
|
|
476
|
+
role TEXT DEFAULT 'mention',
|
|
477
|
+
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE,
|
|
478
|
+
FOREIGN KEY (entity_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
479
|
+
PRIMARY KEY (memory_id, entity_id)
|
|
480
|
+
);
|
|
481
|
+
|
|
482
|
+
CREATE TABLE IF NOT EXISTS defence_audit (
|
|
483
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
484
|
+
memory_id INTEGER,
|
|
485
|
+
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
486
|
+
source_type TEXT NOT NULL,
|
|
487
|
+
source_identifier TEXT NOT NULL,
|
|
488
|
+
trust_score REAL NOT NULL,
|
|
489
|
+
sensitivity_level TEXT NOT NULL DEFAULT 'INTERNAL',
|
|
490
|
+
firewall_result TEXT NOT NULL CHECK(firewall_result IN ('ALLOW', 'BLOCK', 'QUARANTINE')),
|
|
491
|
+
anomaly_score REAL DEFAULT 0.0,
|
|
492
|
+
threat_indicators TEXT DEFAULT '[]',
|
|
493
|
+
blocked_patterns TEXT DEFAULT '[]',
|
|
494
|
+
reason TEXT,
|
|
495
|
+
fragmentation_score REAL,
|
|
496
|
+
pipeline_duration_ms INTEGER,
|
|
497
|
+
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL
|
|
498
|
+
);
|
|
499
|
+
|
|
500
|
+
CREATE INDEX IF NOT EXISTS idx_audit_memory ON defence_audit(memory_id);
|
|
501
|
+
CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON defence_audit(timestamp DESC);
|
|
502
|
+
CREATE INDEX IF NOT EXISTS idx_audit_result ON defence_audit(firewall_result);
|
|
503
|
+
CREATE INDEX IF NOT EXISTS idx_audit_source ON defence_audit(source_type);
|
|
504
|
+
|
|
505
|
+
CREATE TABLE IF NOT EXISTS quarantine (
|
|
506
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
507
|
+
original_content TEXT NOT NULL,
|
|
508
|
+
original_title TEXT,
|
|
509
|
+
source_type TEXT NOT NULL,
|
|
510
|
+
source_identifier TEXT NOT NULL,
|
|
511
|
+
reason TEXT NOT NULL,
|
|
512
|
+
threat_indicators TEXT DEFAULT '[]',
|
|
513
|
+
anomaly_score REAL DEFAULT 0.0,
|
|
514
|
+
firewall_result TEXT NOT NULL CHECK(firewall_result IN ('BLOCK', 'QUARANTINE')),
|
|
515
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'approved', 'rejected', 'expired')),
|
|
516
|
+
reviewed_at TIMESTAMP,
|
|
517
|
+
reviewed_by TEXT,
|
|
518
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
519
|
+
expires_at TIMESTAMP,
|
|
520
|
+
audit_id INTEGER,
|
|
521
|
+
FOREIGN KEY (audit_id) REFERENCES defence_audit(id) ON DELETE SET NULL
|
|
522
|
+
);
|
|
523
|
+
|
|
524
|
+
CREATE INDEX IF NOT EXISTS idx_quarantine_status ON quarantine(status);
|
|
525
|
+
CREATE INDEX IF NOT EXISTS idx_quarantine_created ON quarantine(created_at DESC);
|
|
526
|
+
|
|
527
|
+
CREATE TABLE IF NOT EXISTS fragmentation_entities (
|
|
528
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
529
|
+
memory_id INTEGER NOT NULL,
|
|
530
|
+
entity_value TEXT NOT NULL,
|
|
531
|
+
entity_type TEXT NOT NULL,
|
|
532
|
+
context_snippet TEXT,
|
|
533
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
534
|
+
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
535
|
+
);
|
|
536
|
+
|
|
537
|
+
CREATE INDEX IF NOT EXISTS idx_frag_entities_memory ON fragmentation_entities(memory_id);
|
|
538
|
+
CREATE INDEX IF NOT EXISTS idx_frag_entities_text ON fragmentation_entities(entity_value);
|
|
539
|
+
CREATE INDEX IF NOT EXISTS idx_frag_entities_type ON fragmentation_entities(entity_type);
|
|
540
|
+
`;
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Execute a function within a transaction (auto-commits on success, rollback on error)
|
|
544
|
+
* Use this for batch operations that need atomicity
|
|
545
|
+
*/
|
|
546
|
+
export function withTransaction(fn) {
|
|
547
|
+
const database = getDatabase();
|
|
548
|
+
return database.transaction(fn)();
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Execute a function within an IMMEDIATE transaction (acquires write lock immediately)
|
|
552
|
+
* Use this for critical operations that must not conflict with concurrent writes
|
|
553
|
+
*/
|
|
554
|
+
export function withImmediateTransaction(fn) {
|
|
555
|
+
const database = getDatabase();
|
|
556
|
+
database.exec('BEGIN IMMEDIATE');
|
|
557
|
+
try {
|
|
558
|
+
const result = fn();
|
|
559
|
+
database.exec('COMMIT');
|
|
560
|
+
return result;
|
|
561
|
+
}
|
|
562
|
+
catch (e) {
|
|
563
|
+
database.exec('ROLLBACK');
|
|
564
|
+
throw e;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/database/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firewall.test.d.ts","sourceRoot":"","sources":["../../../src/defence/__tests__/firewall.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|