import Database from 'better-sqlite3'; import { dirname, join } from 'path'; import { fileURLToPath } from 'url'; import { mkdirSync, existsSync } from 'fs'; const __dirname = dirname(fileURLToPath(import.meta.url)); const dbPath = process.env.DATABASE_PATH || join(__dirname, '../../data/agora.db'); // Ensure data directory exists const dataDir = dirname(dbPath); if (!existsSync(dataDir)) { mkdirSync(dataDir, { recursive: true }); } const db = new Database(dbPath); // Enable foreign keys db.pragma('foreign_keys = ON'); // Create collaborative sessions table db.exec(` CREATE TABLE IF NOT EXISTS collaborative_sessions ( id INTEGER PRIMARY KEY AUTOINCREMENT, initial_prompt TEXT NOT NULL, document_format TEXT DEFAULT 'md' CHECK(document_format IN ('md', 'txt')), status TEXT CHECK(status IN ('created', 'ongoing', 'completed', 'failed')) DEFAULT 'created', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, completed_at TIMESTAMP, final_document TEXT ) `); // Create document versions table db.exec(` CREATE TABLE IF NOT EXISTS document_versions ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id INTEGER NOT NULL, version_number INTEGER NOT NULL, content TEXT NOT NULL, modified_by TEXT NOT NULL, modification_reason TEXT, round_number INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (session_id) REFERENCES collaborative_sessions(id) ON DELETE CASCADE ) `); // Create document rounds table (track each round of agents) db.exec(` CREATE TABLE IF NOT EXISTS document_rounds ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id INTEGER NOT NULL, round_number INTEGER NOT NULL, agents_in_round TEXT NOT NULL, agents_made_changes TEXT DEFAULT '', completed_at TIMESTAMP, FOREIGN KEY (session_id) REFERENCES collaborative_sessions(id) ON DELETE CASCADE ) `); console.log('Database initialized successfully'); export default db;