import type { DatabaseAdapter } from './adapters'; export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS agent_variants (\n id TEXT PRIMARY KEY,\n parent_id TEXT,\n agent_id TEXT NOT NULL,\n task_type TEXT NOT NULL,\n genome_hash TEXT NOT NULL,\n genome_json TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'active',\n sample_count INTEGER NOT NULL DEFAULT 0,\n rep_score REAL NOT NULL DEFAULT 0,\n notes TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch()),\n promoted_at INTEGER,\n archived_at INTEGER\n);\n\nCREATE INDEX IF NOT EXISTS idx_agent_variants_agent_task ON agent_variants(agent_id, task_type);\nCREATE INDEX IF NOT EXISTS idx_agent_variants_status ON agent_variants(task_type, status);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_agent_variants_genome ON agent_variants(agent_id, task_type, genome_hash);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_agent_variants_one_promoted\n ON agent_variants(task_type) WHERE status = 'promoted';\n\nCREATE TABLE IF NOT EXISTS variant_tournaments (\n id TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n status TEXT NOT NULL,\n max_participants INTEGER NOT NULL,\n budget_cap REAL NOT NULL,\n policy_json TEXT,\n receipt_id TEXT,\n winner_variant_id TEXT,\n promotion_event_id TEXT,\n started_at INTEGER NOT NULL DEFAULT (unixepoch()),\n completed_at INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS variant_tournament_entries (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n tournament_id TEXT NOT NULL,\n variant_id TEXT NOT NULL,\n performance_event_id TEXT,\n quality_score REAL,\n cost REAL,\n latency_ms INTEGER,\n outcome TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_variant_entries_tournament ON variant_tournament_entries(tournament_id);\nCREATE INDEX IF NOT EXISTS idx_variant_entries_variant ON variant_tournament_entries(variant_id);\nCREATE INDEX IF NOT EXISTS idx_variant_entries_variant_time ON variant_tournament_entries(variant_id, created_at);\n\nCREATE TABLE IF NOT EXISTS variant_events (\n id TEXT PRIMARY KEY,\n variant_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n payload_json TEXT,\n receipt_id TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_variant_events_variant ON variant_events(variant_id, created_at);\n\nCREATE TABLE IF NOT EXISTS task_rubrics (\n task_type TEXT PRIMARY KEY,\n rubric TEXT NOT NULL,\n weights_json TEXT,\n model_id TEXT NOT NULL DEFAULT 'claude-haiku-4-5-20251001',\n daily_budget_usd REAL NOT NULL DEFAULT 5.0,\n updated_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE TABLE IF NOT EXISTS judge_cache (\n cache_key TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n score REAL NOT NULL,\n rationale TEXT,\n model_id TEXT NOT NULL,\n cost_usd REAL NOT NULL DEFAULT 0,\n latency_ms INTEGER,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_judge_cache_task ON judge_cache(task_type, created_at);\n\nCREATE TABLE IF NOT EXISTS judge_runs (\n id TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n variant_id TEXT,\n cache_hit INTEGER NOT NULL DEFAULT 0,\n status TEXT NOT NULL,\n score REAL,\n cost_usd REAL NOT NULL DEFAULT 0,\n latency_ms INTEGER,\n error TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_judge_runs_task_day ON judge_runs(task_type, created_at);\n\nCREATE TABLE IF NOT EXISTS pairwise_matches (\n id TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n variant_a TEXT NOT NULL,\n variant_b TEXT NOT NULL,\n winner TEXT NOT NULL CHECK (winner IN ('a','b','tie')),\n input_hash TEXT,\n elo_a_before REAL NOT NULL,\n elo_b_before REAL NOT NULL,\n elo_a_after REAL NOT NULL,\n elo_b_after REAL NOT NULL,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_pairwise_matches_task ON pairwise_matches(task_type, created_at);\nCREATE INDEX IF NOT EXISTS idx_pairwise_matches_variants ON pairwise_matches(variant_a, variant_b);\n\nCREATE TABLE IF NOT EXISTS pairwise_cache (\n cache_key TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n winner TEXT NOT NULL CHECK (winner IN ('a','b','tie')),\n rationale TEXT,\n model_id TEXT NOT NULL,\n cost_usd REAL NOT NULL DEFAULT 0,\n latency_ms INTEGER,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_pairwise_cache_task ON pairwise_cache(task_type, created_at);\n\nCREATE TABLE IF NOT EXISTS genome_proposals (\n id TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n parent_variant_id TEXT NOT NULL,\n proposed_variant_id TEXT NOT NULL,\n kind TEXT NOT NULL CHECK (kind IN ('llm','jitter','crossover')),\n rationale TEXT,\n cost_usd REAL NOT NULL DEFAULT 0,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_genome_proposals_task ON genome_proposals(task_type, created_at);\nCREATE INDEX IF NOT EXISTS idx_genome_proposals_parent ON genome_proposals(parent_variant_id);\n\nCREATE TABLE IF NOT EXISTS coldstart_evals (\n id TEXT PRIMARY KEY,\n variant_id TEXT NOT NULL,\n task_type TEXT NOT NULL,\n sample_count INTEGER NOT NULL,\n mean_score REAL NOT NULL,\n errors INTEGER NOT NULL DEFAULT 0,\n total_cost_usd REAL NOT NULL DEFAULT 0,\n payload_json TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_coldstart_evals_variant ON coldstart_evals(variant_id, created_at);\nCREATE INDEX IF NOT EXISTS idx_coldstart_evals_task ON coldstart_evals(task_type, created_at);\n\nCREATE TABLE IF NOT EXISTS shadow_runs (\n id TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n variant_id TEXT NOT NULL,\n primary_variant_id TEXT NOT NULL,\n batch_id TEXT NOT NULL,\n input_hash TEXT NOT NULL,\n input_text TEXT,\n output_text TEXT,\n quality_score REAL,\n cost_usd REAL NOT NULL DEFAULT 0,\n latency_ms INTEGER,\n is_primary INTEGER NOT NULL DEFAULT 0,\n error TEXT,\n created_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n\nCREATE INDEX IF NOT EXISTS idx_shadow_runs_task ON shadow_runs(task_type, created_at);\nCREATE INDEX IF NOT EXISTS idx_shadow_runs_variant ON shadow_runs(variant_id, created_at);\nCREATE INDEX IF NOT EXISTS idx_shadow_runs_batch ON shadow_runs(batch_id);\nCREATE INDEX IF NOT EXISTS idx_shadow_runs_input_hash ON shadow_runs(task_type, input_hash);\n\nCREATE TABLE IF NOT EXISTS canary_rollouts (\n id TEXT PRIMARY KEY,\n task_type TEXT NOT NULL,\n canary_variant_id TEXT NOT NULL,\n baseline_variant_id TEXT NOT NULL,\n traffic_pct REAL NOT NULL DEFAULT 0.1,\n status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active','promoted','rolled_back')),\n min_samples INTEGER NOT NULL DEFAULT 50,\n rollback_threshold REAL NOT NULL DEFAULT 0.05,\n started_at INTEGER NOT NULL DEFAULT (unixepoch()),\n decided_at INTEGER,\n decision TEXT,\n decision_event_id TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_canary_rollouts_task ON canary_rollouts(task_type, status);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_canary_rollouts_active\n ON canary_rollouts(task_type) WHERE status = 'active';\n"; export declare function applySchema(db: DatabaseAdapter): void;