|
| 1 | + |
| 2 | +-- Claude Flow V3 Memory Database |
| 3 | +-- Version: 3.0.0 |
| 4 | +-- Features: Pattern learning, vector embeddings, temporal decay, migration tracking |
| 5 | + |
| 6 | +PRAGMA journal_mode = WAL; |
| 7 | +PRAGMA synchronous = NORMAL; |
| 8 | +PRAGMA foreign_keys = ON; |
| 9 | + |
| 10 | +-- ============================================ |
| 11 | +-- CORE MEMORY TABLES |
| 12 | +-- ============================================ |
| 13 | + |
| 14 | +-- Memory entries (main storage) |
| 15 | +CREATE TABLE IF NOT EXISTS memory_entries ( |
| 16 | + id TEXT PRIMARY KEY, |
| 17 | + key TEXT NOT NULL, |
| 18 | + namespace TEXT DEFAULT 'default', |
| 19 | + content TEXT NOT NULL, |
| 20 | + type TEXT DEFAULT 'semantic' CHECK(type IN ('semantic', 'episodic', 'procedural', 'working', 'pattern')), |
| 21 | + |
| 22 | + -- Vector embedding for semantic search (stored as JSON array) |
| 23 | + embedding TEXT, |
| 24 | + embedding_model TEXT DEFAULT 'local', |
| 25 | + embedding_dimensions INTEGER, |
| 26 | + |
| 27 | + -- Metadata |
| 28 | + tags TEXT, -- JSON array |
| 29 | + metadata TEXT, -- JSON object |
| 30 | + owner_id TEXT, |
| 31 | + |
| 32 | + -- Timestamps |
| 33 | + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 34 | + updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 35 | + expires_at INTEGER, |
| 36 | + last_accessed_at INTEGER, |
| 37 | + |
| 38 | + -- Access tracking for hot/cold detection |
| 39 | + access_count INTEGER DEFAULT 0, |
| 40 | + |
| 41 | + -- Status |
| 42 | + status TEXT DEFAULT 'active' CHECK(status IN ('active', 'archived', 'deleted')), |
| 43 | + |
| 44 | + UNIQUE(namespace, key) |
| 45 | +); |
| 46 | + |
| 47 | +-- Indexes for memory entries |
| 48 | +CREATE INDEX IF NOT EXISTS idx_memory_namespace ON memory_entries(namespace); |
| 49 | +CREATE INDEX IF NOT EXISTS idx_memory_key ON memory_entries(key); |
| 50 | +CREATE INDEX IF NOT EXISTS idx_memory_type ON memory_entries(type); |
| 51 | +CREATE INDEX IF NOT EXISTS idx_memory_status ON memory_entries(status); |
| 52 | +CREATE INDEX IF NOT EXISTS idx_memory_created ON memory_entries(created_at); |
| 53 | +CREATE INDEX IF NOT EXISTS idx_memory_accessed ON memory_entries(last_accessed_at); |
| 54 | +CREATE INDEX IF NOT EXISTS idx_memory_owner ON memory_entries(owner_id); |
| 55 | + |
| 56 | +-- ============================================ |
| 57 | +-- PATTERN LEARNING TABLES |
| 58 | +-- ============================================ |
| 59 | + |
| 60 | +-- Learned patterns with confidence scoring and versioning |
| 61 | +CREATE TABLE IF NOT EXISTS patterns ( |
| 62 | + id TEXT PRIMARY KEY, |
| 63 | + |
| 64 | + -- Pattern identification |
| 65 | + name TEXT NOT NULL, |
| 66 | + pattern_type TEXT NOT NULL CHECK(pattern_type IN ( |
| 67 | + 'task-routing', 'error-recovery', 'optimization', 'learning', |
| 68 | + 'coordination', 'prediction', 'code-pattern', 'workflow' |
| 69 | + )), |
| 70 | + |
| 71 | + -- Pattern definition |
| 72 | + condition TEXT NOT NULL, -- Regex or semantic match |
| 73 | + action TEXT NOT NULL, -- What to do when pattern matches |
| 74 | + description TEXT, |
| 75 | + |
| 76 | + -- Confidence scoring (0.0 - 1.0) |
| 77 | + confidence REAL DEFAULT 0.5, |
| 78 | + success_count INTEGER DEFAULT 0, |
| 79 | + failure_count INTEGER DEFAULT 0, |
| 80 | + |
| 81 | + -- Temporal decay |
| 82 | + decay_rate REAL DEFAULT 0.01, -- How fast confidence decays |
| 83 | + half_life_days INTEGER DEFAULT 30, -- Days until confidence halves without use |
| 84 | + |
| 85 | + -- Vector embedding for semantic pattern matching |
| 86 | + embedding TEXT, |
| 87 | + embedding_dimensions INTEGER, |
| 88 | + |
| 89 | + -- Versioning |
| 90 | + version INTEGER DEFAULT 1, |
| 91 | + parent_id TEXT REFERENCES patterns(id), |
| 92 | + |
| 93 | + -- Metadata |
| 94 | + tags TEXT, -- JSON array |
| 95 | + metadata TEXT, -- JSON object |
| 96 | + source TEXT, -- Where the pattern was learned from |
| 97 | + |
| 98 | + -- Timestamps |
| 99 | + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 100 | + updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 101 | + last_matched_at INTEGER, |
| 102 | + last_success_at INTEGER, |
| 103 | + last_failure_at INTEGER, |
| 104 | + |
| 105 | + -- Status |
| 106 | + status TEXT DEFAULT 'active' CHECK(status IN ('active', 'archived', 'deprecated', 'experimental')) |
| 107 | +); |
| 108 | + |
| 109 | +-- Indexes for patterns |
| 110 | +CREATE INDEX IF NOT EXISTS idx_patterns_type ON patterns(pattern_type); |
| 111 | +CREATE INDEX IF NOT EXISTS idx_patterns_confidence ON patterns(confidence DESC); |
| 112 | +CREATE INDEX IF NOT EXISTS idx_patterns_status ON patterns(status); |
| 113 | +CREATE INDEX IF NOT EXISTS idx_patterns_last_matched ON patterns(last_matched_at); |
| 114 | + |
| 115 | +-- Pattern evolution history (for versioning) |
| 116 | +CREATE TABLE IF NOT EXISTS pattern_history ( |
| 117 | + id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 118 | + pattern_id TEXT NOT NULL REFERENCES patterns(id), |
| 119 | + version INTEGER NOT NULL, |
| 120 | + |
| 121 | + -- Snapshot of pattern state |
| 122 | + confidence REAL, |
| 123 | + success_count INTEGER, |
| 124 | + failure_count INTEGER, |
| 125 | + condition TEXT, |
| 126 | + action TEXT, |
| 127 | + |
| 128 | + -- What changed |
| 129 | + change_type TEXT CHECK(change_type IN ('created', 'updated', 'success', 'failure', 'decay', 'merged', 'split')), |
| 130 | + change_reason TEXT, |
| 131 | + |
| 132 | + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000) |
| 133 | +); |
| 134 | + |
| 135 | +CREATE INDEX IF NOT EXISTS idx_pattern_history_pattern ON pattern_history(pattern_id); |
| 136 | + |
| 137 | +-- ============================================ |
| 138 | +-- LEARNING & TRAJECTORY TABLES |
| 139 | +-- ============================================ |
| 140 | + |
| 141 | +-- Learning trajectories (SONA integration) |
| 142 | +CREATE TABLE IF NOT EXISTS trajectories ( |
| 143 | + id TEXT PRIMARY KEY, |
| 144 | + session_id TEXT, |
| 145 | + |
| 146 | + -- Trajectory state |
| 147 | + status TEXT DEFAULT 'active' CHECK(status IN ('active', 'completed', 'failed', 'abandoned')), |
| 148 | + verdict TEXT CHECK(verdict IN ('success', 'failure', 'partial', NULL)), |
| 149 | + |
| 150 | + -- Context |
| 151 | + task TEXT, |
| 152 | + context TEXT, -- JSON object |
| 153 | + |
| 154 | + -- Metrics |
| 155 | + total_steps INTEGER DEFAULT 0, |
| 156 | + total_reward REAL DEFAULT 0, |
| 157 | + |
| 158 | + -- Timestamps |
| 159 | + started_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 160 | + ended_at INTEGER, |
| 161 | + |
| 162 | + -- Reference to extracted pattern (if any) |
| 163 | + extracted_pattern_id TEXT REFERENCES patterns(id) |
| 164 | +); |
| 165 | + |
| 166 | +-- Trajectory steps |
| 167 | +CREATE TABLE IF NOT EXISTS trajectory_steps ( |
| 168 | + id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 169 | + trajectory_id TEXT NOT NULL REFERENCES trajectories(id), |
| 170 | + step_number INTEGER NOT NULL, |
| 171 | + |
| 172 | + -- Step data |
| 173 | + action TEXT NOT NULL, |
| 174 | + observation TEXT, |
| 175 | + reward REAL DEFAULT 0, |
| 176 | + |
| 177 | + -- Metadata |
| 178 | + metadata TEXT, -- JSON object |
| 179 | + |
| 180 | + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000) |
| 181 | +); |
| 182 | + |
| 183 | +CREATE INDEX IF NOT EXISTS idx_steps_trajectory ON trajectory_steps(trajectory_id); |
| 184 | + |
| 185 | +-- ============================================ |
| 186 | +-- MIGRATION STATE TRACKING |
| 187 | +-- ============================================ |
| 188 | + |
| 189 | +-- Migration state (for resume capability) |
| 190 | +CREATE TABLE IF NOT EXISTS migration_state ( |
| 191 | + id TEXT PRIMARY KEY, |
| 192 | + migration_type TEXT NOT NULL, -- 'v2-to-v3', 'pattern', 'memory', etc. |
| 193 | + |
| 194 | + -- Progress tracking |
| 195 | + status TEXT DEFAULT 'pending' CHECK(status IN ('pending', 'in_progress', 'completed', 'failed', 'rolled_back')), |
| 196 | + total_items INTEGER DEFAULT 0, |
| 197 | + processed_items INTEGER DEFAULT 0, |
| 198 | + failed_items INTEGER DEFAULT 0, |
| 199 | + skipped_items INTEGER DEFAULT 0, |
| 200 | + |
| 201 | + -- Current position (for resume) |
| 202 | + current_batch INTEGER DEFAULT 0, |
| 203 | + last_processed_id TEXT, |
| 204 | + |
| 205 | + -- Source/destination info |
| 206 | + source_path TEXT, |
| 207 | + source_type TEXT, |
| 208 | + destination_path TEXT, |
| 209 | + |
| 210 | + -- Backup info |
| 211 | + backup_path TEXT, |
| 212 | + backup_created_at INTEGER, |
| 213 | + |
| 214 | + -- Error tracking |
| 215 | + last_error TEXT, |
| 216 | + errors TEXT, -- JSON array of errors |
| 217 | + |
| 218 | + -- Timestamps |
| 219 | + started_at INTEGER, |
| 220 | + completed_at INTEGER, |
| 221 | + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 222 | + updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000) |
| 223 | +); |
| 224 | + |
| 225 | +-- ============================================ |
| 226 | +-- SESSION MANAGEMENT |
| 227 | +-- ============================================ |
| 228 | + |
| 229 | +-- Sessions for context persistence |
| 230 | +CREATE TABLE IF NOT EXISTS sessions ( |
| 231 | + id TEXT PRIMARY KEY, |
| 232 | + |
| 233 | + -- Session state |
| 234 | + state TEXT NOT NULL, -- JSON object with full session state |
| 235 | + status TEXT DEFAULT 'active' CHECK(status IN ('active', 'paused', 'completed', 'expired')), |
| 236 | + |
| 237 | + -- Context |
| 238 | + project_path TEXT, |
| 239 | + branch TEXT, |
| 240 | + |
| 241 | + -- Metrics |
| 242 | + tasks_completed INTEGER DEFAULT 0, |
| 243 | + patterns_learned INTEGER DEFAULT 0, |
| 244 | + |
| 245 | + -- Timestamps |
| 246 | + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 247 | + updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 248 | + expires_at INTEGER |
| 249 | +); |
| 250 | + |
| 251 | +-- ============================================ |
| 252 | +-- VECTOR INDEX METADATA (for HNSW) |
| 253 | +-- ============================================ |
| 254 | + |
| 255 | +-- Track HNSW index state |
| 256 | +CREATE TABLE IF NOT EXISTS vector_indexes ( |
| 257 | + id TEXT PRIMARY KEY, |
| 258 | + name TEXT NOT NULL UNIQUE, |
| 259 | + |
| 260 | + -- Index configuration |
| 261 | + dimensions INTEGER NOT NULL, |
| 262 | + metric TEXT DEFAULT 'cosine' CHECK(metric IN ('cosine', 'euclidean', 'dot')), |
| 263 | + |
| 264 | + -- HNSW parameters |
| 265 | + hnsw_m INTEGER DEFAULT 16, |
| 266 | + hnsw_ef_construction INTEGER DEFAULT 200, |
| 267 | + hnsw_ef_search INTEGER DEFAULT 100, |
| 268 | + |
| 269 | + -- Quantization |
| 270 | + quantization_type TEXT CHECK(quantization_type IN ('none', 'scalar', 'product')), |
| 271 | + quantization_bits INTEGER DEFAULT 8, |
| 272 | + |
| 273 | + -- Statistics |
| 274 | + total_vectors INTEGER DEFAULT 0, |
| 275 | + last_rebuild_at INTEGER, |
| 276 | + |
| 277 | + created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000), |
| 278 | + updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000) |
| 279 | +); |
| 280 | + |
| 281 | +-- ============================================ |
| 282 | +-- SYSTEM METADATA |
| 283 | +-- ============================================ |
| 284 | + |
| 285 | +CREATE TABLE IF NOT EXISTS metadata ( |
| 286 | + key TEXT PRIMARY KEY, |
| 287 | + value TEXT NOT NULL, |
| 288 | + updated_at INTEGER DEFAULT (strftime('%s', 'now') * 1000) |
| 289 | +); |
| 290 | + |
| 291 | + |
| 292 | +INSERT OR REPLACE INTO metadata (key, value) VALUES |
| 293 | + ('schema_version', '3.0.0'), |
| 294 | + ('backend', 'hybrid'), |
| 295 | + ('created_at', '2026-02-28T16:04:25.842Z'), |
| 296 | + ('sql_js', 'true'), |
| 297 | + ('vector_embeddings', 'enabled'), |
| 298 | + ('pattern_learning', 'enabled'), |
| 299 | + ('temporal_decay', 'enabled'), |
| 300 | + ('hnsw_indexing', 'enabled'); |
| 301 | + |
| 302 | +-- Create default vector index configuration |
| 303 | +INSERT OR IGNORE INTO vector_indexes (id, name, dimensions) VALUES |
| 304 | + ('default', 'default', 768), |
| 305 | + ('patterns', 'patterns', 768); |
0 commit comments