Update database schema and backend services to properly track session lifecycle: - Sessions now start with 'created' status - Frontend auto-start logic works when status is 'created' - Status transitions to 'ongoing' when session actually starts - Prevents issues with premature round execution 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
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;
|