import { getDb } from "./index"; import { v4 as uuid } from "uuid"; export type Phase = "research" | "plan" | "implement"; export type PermissionMode = "acceptEdits" | "bypassPermissions"; export interface Session { id: string; project_id: string; name: string; phase: Phase; claude_session_id: string | null; permission_mode: PermissionMode; git_branch: string | null; created_at: number; updated_at: number; } export interface Message { id: string; session_id: string; role: "user" | "assistant"; content: string; created_at: number; } export function listSessions(projectId: string): Session[] { return getDb() .prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY updated_at DESC") .all(projectId) as Session[]; } export function getSession(id: string): Session | undefined { return getDb() .prepare("SELECT * FROM sessions WHERE id = ?") .get(id) as Session | undefined; } export function createSession(projectId: string, name: string, phase: Phase = "research"): Session { const db = getDb(); const id = uuid(); const now = Math.floor(Date.now() / 1000); db.prepare( `INSERT INTO sessions (id, project_id, name, phase, permission_mode, created_at, updated_at) VALUES (?, ?, ?, ?, 'acceptEdits', ?, ?)` ).run(id, projectId, name, phase, now, now); return { id, project_id: projectId, name, phase, claude_session_id: null, permission_mode: "acceptEdits", git_branch: null, created_at: now, updated_at: now, }; } export function updateSession( id: string, updates: Partial> ): void { const db = getDb(); const sets: string[] = []; const values: any[] = []; for (const [key, value] of Object.entries(updates)) { if (value !== undefined) { sets.push(`${key} = ?`); values.push(value); } } if (sets.length > 0) { sets.push("updated_at = ?"); values.push(Math.floor(Date.now() / 1000)); values.push(id); db.prepare(`UPDATE sessions SET ${sets.join(", ")} WHERE id = ?`).run(...values); } } export function deleteSession(id: string): void { getDb().prepare("DELETE FROM sessions WHERE id = ?").run(id); } // Messages export function listMessages(sessionId: string): Message[] { return getDb() .prepare("SELECT * FROM messages WHERE session_id = ? ORDER BY created_at ASC") .all(sessionId) as Message[]; } export function addMessage(sessionId: string, role: Message["role"], content: string): Message { const db = getDb(); const id = uuid(); const now = Math.floor(Date.now() / 1000); db.prepare( "INSERT INTO messages (id, session_id, role, content, created_at) VALUES (?, ?, ?, ?, ?)" ).run(id, sessionId, role, content, now); db.prepare("UPDATE sessions SET updated_at = ? WHERE id = ?").run(now, sessionId); return { id, session_id: sessionId, role, content, created_at: now }; }