CREATE TABLE repo_mergefix_settings ( repo_id TEXT PRIMARY KEY REFERENCES repos(id) ON DELETE CASCADE, queue_enabled INTEGER NOT NULL DEFAULT 0, allow_private INTEGER NOT NULL DEFAULT 0, min_confidence REAL NOT NULL DEFAULT 0.8, min_margin REAL NOT NULL DEFAULT 0.3, updated_at INTEGER NOT NULL ); CREATE TABLE account_ai_keys ( account_id TEXT PRIMARY KEY REFERENCES accounts(id) ON DELETE CASCADE, provider TEXT NOT NULL, model TEXT NOT NULL, key_ciphertext TEXT NOT NULL, key_iv TEXT NOT NULL, updated_by TEXT, updated_at INTEGER NOT NULL ); CREATE TABLE ai_usage ( account_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE, month TEXT NOT NULL, calls INTEGER NOT NULL DEFAULT 0, input_tokens INTEGER NOT NULL DEFAULT 0, output_tokens INTEGER NOT NULL DEFAULT 0, byok_calls INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (account_id, month) ); CREATE TABLE mergefix_runs ( id TEXT PRIMARY KEY, pull_issue_id TEXT NOT NULL REFERENCES issues(id) ON DELETE CASCADE, repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE, account_id TEXT NOT NULL, actor_id TEXT NOT NULL, trigger TEXT NOT NULL CHECK (trigger IN ('button', 'queue')), status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'applying', 'applied', 'suggested', 'failed')), head_sha TEXT NOT NULL, base_sha TEXT, commit_sha TEXT, calls INTEGER NOT NULL DEFAULT 0, result_json TEXT, error TEXT, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL ); CREATE INDEX mergefix_runs_pull ON mergefix_runs (pull_issue_id, created_at DESC); CREATE UNIQUE INDEX mergefix_runs_one_active ON mergefix_runs (pull_issue_id) WHERE status IN ('queued', 'running', 'applying');