Julius Marmingemigrate to single turn store1d975ad8 months agoHistory
153 lines · 3.9 KB · TypeScript
RawDownload
import * as SqlClient from "effect/unstable/sql/SqlClient";import * as Effect from "effect/Effect"; export default Effect.gen(function* () {  const sql = yield* SqlClient.SqlClient;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_projects (      project_id TEXT PRIMARY KEY,      title TEXT NOT NULL,      workspace_root TEXT NOT NULL,      default_model TEXT,      scripts_json TEXT NOT NULL,      created_at TEXT NOT NULL,      updated_at TEXT NOT NULL,      deleted_at TEXT    )  `;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_threads (      thread_id TEXT PRIMARY KEY,      project_id TEXT NOT NULL,      title TEXT NOT NULL,      model TEXT NOT NULL,      branch TEXT,      worktree_path TEXT,      latest_turn_id TEXT,      created_at TEXT NOT NULL,      updated_at TEXT NOT NULL,      deleted_at TEXT    )  `;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_thread_messages (      message_id TEXT PRIMARY KEY,      thread_id TEXT NOT NULL,      turn_id TEXT,      role TEXT NOT NULL,      text TEXT NOT NULL,      is_streaming INTEGER NOT NULL,      created_at TEXT NOT NULL,      updated_at TEXT NOT NULL    )  `;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_thread_activities (      activity_id TEXT PRIMARY KEY,      thread_id TEXT NOT NULL,      turn_id TEXT,      tone TEXT NOT NULL,      kind TEXT NOT NULL,      summary TEXT NOT NULL,      payload_json TEXT NOT NULL,      created_at TEXT NOT NULL    )  `;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_thread_sessions (      thread_id TEXT PRIMARY KEY,      status TEXT NOT NULL,      provider_name TEXT,      provider_session_id TEXT,      provider_thread_id TEXT,      active_turn_id TEXT,      last_error TEXT,      updated_at TEXT NOT NULL    )  `;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_turns (      row_id INTEGER PRIMARY KEY AUTOINCREMENT,      thread_id TEXT NOT NULL,      turn_id TEXT,      pending_message_id TEXT,      assistant_message_id TEXT,      state TEXT NOT NULL,      requested_at TEXT NOT NULL,      started_at TEXT,      completed_at TEXT,      checkpoint_turn_count INTEGER,      checkpoint_ref TEXT,      checkpoint_status TEXT,      checkpoint_files_json TEXT NOT NULL,      UNIQUE (thread_id, turn_id),      UNIQUE (thread_id, checkpoint_turn_count)    )  `;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_pending_approvals (      request_id TEXT PRIMARY KEY,      thread_id TEXT NOT NULL,      turn_id TEXT,      status TEXT NOT NULL,      decision TEXT,      created_at TEXT NOT NULL,      resolved_at TEXT    )  `;   yield* sql`    CREATE TABLE IF NOT EXISTS projection_state (      projector TEXT PRIMARY KEY,      last_applied_sequence INTEGER NOT NULL,      updated_at TEXT NOT NULL    )  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_projects_updated_at    ON projection_projects(updated_at)  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_threads_project_id    ON projection_threads(project_id)  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_thread_messages_thread_created    ON projection_thread_messages(thread_id, created_at)  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_thread_activities_thread_created    ON projection_thread_activities(thread_id, created_at)  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_thread_sessions_provider_session    ON projection_thread_sessions(provider_session_id)  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_turns_thread_requested    ON projection_turns(thread_id, requested_at)  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_turns_thread_checkpoint_completed    ON projection_turns(thread_id, checkpoint_turn_count, completed_at)  `;   yield* sql`    CREATE INDEX IF NOT EXISTS idx_projection_pending_approvals_thread_status    ON projection_pending_approvals(thread_id, status)  `;});