import type { Database } from "./db-types.js"; export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS episodes (\n episode_id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n thread_id INTEGER NOT NULL,\n timestamp TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('operator_message','agent_action','system_event','operator_reaction')),\n modality TEXT NOT NULL CHECK(modality IN ('text','voice','photo','video_note','document','mixed','reaction')),\n content TEXT NOT NULL,\n topic_tags TEXT,\n importance REAL NOT NULL DEFAULT 0.5,\n consolidated INTEGER DEFAULT 0,\n accessed_count INTEGER DEFAULT 0,\n last_accessed TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_ep_thread_time ON episodes(thread_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_ep_importance ON episodes(importance DESC);\nCREATE INDEX IF NOT EXISTS idx_ep_uncons ON episodes(consolidated) WHERE consolidated = 0;\n\nCREATE TABLE IF NOT EXISTS semantic_notes (\n note_id TEXT PRIMARY KEY,\n type TEXT NOT NULL CHECK(type IN ('fact','preference','pattern','entity','relationship')),\n content TEXT NOT NULL,\n keywords TEXT NOT NULL,\n confidence REAL NOT NULL DEFAULT 0.5,\n source_episodes TEXT,\n linked_notes TEXT,\n link_reasons TEXT,\n valid_from TEXT NOT NULL,\n valid_to TEXT,\n superseded_by TEXT,\n access_count INTEGER DEFAULT 0,\n last_accessed TEXT,\n priority INTEGER NOT NULL DEFAULT 0,\n thread_id INTEGER,\n is_guardrail INTEGER NOT NULL DEFAULT 0,\n pinned INTEGER NOT NULL DEFAULT 0,\n quality_score INTEGER,\n expiry_reason TEXT,\n expires_at TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_sem_type ON semantic_notes(type);\nCREATE INDEX IF NOT EXISTS idx_sem_conf ON semantic_notes(confidence DESC);\nCREATE INDEX IF NOT EXISTS idx_sem_valid ON semantic_notes(valid_to) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_priority ON semantic_notes(priority DESC) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_thread ON semantic_notes(thread_id) WHERE valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_guardrail ON semantic_notes(is_guardrail) WHERE is_guardrail = 1 AND valid_to IS NULL;\nCREATE INDEX IF NOT EXISTS idx_sem_pinned ON semantic_notes(pinned) WHERE pinned = 1 AND valid_to IS NULL;\n-- NOTE: idx_sem_expiry_reason is intentionally NOT created here. It references\n-- the expiry_reason column, which is added by migration 28 (ALTER TABLE) for\n-- pre-existing DBs. Because SCHEMA_SQL runs before runMigrations(), creating the\n-- index here would throw \"no such column: expiry_reason\" on any DB created before\n-- migration 28 \u2014 crashing startup before the migration can add the column.\n-- Migration 28 creates this index itself, right after the ALTER, for both fresh\n-- and existing DBs. idx_sem_expires_at (migration 30) is omitted here for the\n-- identical reason: expires_at is added by migration 30 on pre-existing DBs.\n\nCREATE TABLE IF NOT EXISTS meta_consolidation_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n run_at TEXT NOT NULL,\n episodes_processed INTEGER,\n notes_created INTEGER,\n duration_ms INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS voice_signatures (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n episode_id TEXT NOT NULL,\n emotion TEXT,\n arousal REAL,\n dominance REAL,\n valence REAL,\n speech_rate REAL,\n mean_pitch_hz REAL,\n pitch_std_hz REAL,\n jitter REAL,\n shimmer REAL,\n hnr_db REAL,\n audio_events TEXT,\n duration_sec REAL,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_voice_ep ON voice_signatures(episode_id);\nCREATE INDEX IF NOT EXISTS idx_voice_time ON voice_signatures(created_at DESC);\n\nCREATE TABLE IF NOT EXISTS note_embeddings (\n note_id TEXT PRIMARY KEY,\n embedding BLOB NOT NULL,\n model TEXT NOT NULL DEFAULT 'text-embedding-3-small',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_emb_note ON note_embeddings(note_id);\n\nCREATE TABLE IF NOT EXISTS sent_messages (\n message_id INTEGER PRIMARY KEY,\n thread_id INTEGER NOT NULL,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_sent_messages_thread ON sent_messages(thread_id);\n\nCREATE TABLE IF NOT EXISTS topic_registry (\n chat_id TEXT NOT NULL,\n name TEXT NOT NULL COLLATE NOCASE,\n thread_id INTEGER NOT NULL,\n registered_at TEXT NOT NULL DEFAULT (datetime('now')),\n PRIMARY KEY (chat_id, name)\n);\n\nCREATE TABLE IF NOT EXISTS temporal_narratives (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n thread_id INTEGER NOT NULL,\n resolution TEXT NOT NULL CHECK(resolution IN ('day', 'week', 'month', 'quarter', 'half_year')),\n period_start TEXT NOT NULL,\n period_end TEXT NOT NULL,\n narrative TEXT NOT NULL,\n source_episode_count INTEGER NOT NULL DEFAULT 0,\n source_note_count INTEGER NOT NULL DEFAULT 0,\n model TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n UNIQUE(thread_id, resolution, period_start)\n);\nCREATE INDEX IF NOT EXISTS idx_narrative_thread_res ON temporal_narratives(thread_id, resolution, created_at DESC);\n\nCREATE TABLE IF NOT EXISTS thread_registry (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n thread_id INTEGER NOT NULL UNIQUE,\n name TEXT NOT NULL,\n type TEXT NOT NULL CHECK(type IN ('root','daily','branch','worker')),\n root_thread_id INTEGER,\n badge TEXT NOT NULL DEFAULT 'root',\n client TEXT DEFAULT 'claude',\n max_retries INTEGER DEFAULT 5,\n cooldown_ms INTEGER DEFAULT 300000,\n keep_alive INTEGER DEFAULT 0,\n created_at TEXT NOT NULL,\n last_active_at TEXT,\n session_reset_at TEXT,\n clean_shutdown INTEGER NOT NULL DEFAULT 1,\n status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active','archived','expired','exited')),\n daily_rotation INTEGER NOT NULL DEFAULT 0,\n autonomous_mode INTEGER NOT NULL DEFAULT 0,\n telegram_topic_id INTEGER,\n identity_prompt TEXT,\n working_directory TEXT,\n pid INTEGER,\n archived_at TEXT,\n summary TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_type ON thread_registry(type);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_root ON thread_registry(root_thread_id);\nCREATE INDEX IF NOT EXISTS idx_thread_reg_status ON thread_registry(status);\n\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL\n);\n"; export declare function cleanupOldSentMessages(db: Database): void; //# sourceMappingURL=schema-ddl.d.ts.map