Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 20 additions & 9 deletions drizzle.config.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
import { defineConfig } from 'drizzle-kit';
import { defineConfig } from "drizzle-kit";

export default defineConfig({
schema: './src/db/schema.ts',
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
verbose: true,
// Only manage our app tables — Better Auth manages its own tables
tablesFilter: ['workspaces', 'chat_sessions', 'skills', 'sources', 'user_settings', 'sandbox_snapshots'],
schema: "./src/db/schema.ts",
dialect: "postgresql",
dbCredentials: {
url: process.env.DATABASE_URL!,
},
verbose: true,
// Only manage our app tables — Better Auth manages its own tables
tablesFilter: [
"workspaces",
"chat_sessions",
"skills",
"sources",
"user_settings",
"sandbox_snapshots",
"archived_sessions",
"archived_messages",
"archived_parts",
"archived_todos",
],
});
36 changes: 30 additions & 6 deletions drizzle/0002_nervous_wither.sql
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
ALTER TABLE "user_settings" ADD COLUMN "voice_enabled" boolean DEFAULT false;--> statement-breakpoint
ALTER TABLE "user_settings" ADD COLUMN "voice_model" text DEFAULT 'gpt-4o-mini-tts';--> statement-breakpoint
ALTER TABLE "user_settings" ADD COLUMN "voice_name" text DEFAULT 'alloy';--> statement-breakpoint
ALTER TABLE "user_settings" ADD COLUMN "voice_auto_speak" boolean DEFAULT true;--> statement-breakpoint
ALTER TABLE "user_settings" ADD COLUMN "voice_speed" text DEFAULT '1.0';--> statement-breakpoint
ALTER TABLE "user_settings" ADD COLUMN "preferred_mic" text;
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='user_settings' AND column_name='voice_enabled') THEN
ALTER TABLE "user_settings" ADD COLUMN "voice_enabled" boolean DEFAULT false;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='user_settings' AND column_name='voice_model') THEN
ALTER TABLE "user_settings" ADD COLUMN "voice_model" text DEFAULT 'gpt-4o-mini-tts';
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='user_settings' AND column_name='voice_name') THEN
ALTER TABLE "user_settings" ADD COLUMN "voice_name" text DEFAULT 'alloy';
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='user_settings' AND column_name='voice_auto_speak') THEN
ALTER TABLE "user_settings" ADD COLUMN "voice_auto_speak" boolean DEFAULT true;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='user_settings' AND column_name='voice_speed') THEN
ALTER TABLE "user_settings" ADD COLUMN "voice_speed" text DEFAULT '1.0';
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='user_settings' AND column_name='preferred_mic') THEN
ALTER TABLE "user_settings" ADD COLUMN "preferred_mic" text;
END IF;
END $$;
6 changes: 5 additions & 1 deletion drizzle/0003_open_titania.sql
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
ALTER TABLE "user_settings" ALTER COLUMN "voice_name" SET DEFAULT 'coral';--> statement-breakpoint
ALTER TABLE "chat_sessions" ADD COLUMN "forked_from_session_id" uuid;
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='chat_sessions' AND column_name='forked_from_session_id') THEN
ALTER TABLE "chat_sessions" ADD COLUMN "forked_from_session_id" uuid;
END IF;
END $$;
8 changes: 6 additions & 2 deletions drizzle/0004_wonderful_silver_surfer.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
CREATE TABLE "sandbox_snapshots" (
CREATE TABLE IF NOT EXISTS "sandbox_snapshots" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"workspace_id" uuid NOT NULL,
"created_by" text NOT NULL,
Expand All @@ -10,4 +10,8 @@ CREATE TABLE "sandbox_snapshots" (
"created_at" timestamp with time zone DEFAULT now()
);
--> statement-breakpoint
ALTER TABLE "sandbox_snapshots" ADD CONSTRAINT "sandbox_snapshots_workspace_id_workspaces_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."workspaces"("id") ON DELETE cascade ON UPDATE no action;
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'sandbox_snapshots_workspace_id_workspaces_id_fk') THEN
ALTER TABLE "sandbox_snapshots" ADD CONSTRAINT "sandbox_snapshots_workspace_id_workspaces_id_fk" FOREIGN KEY ("workspace_id") REFERENCES "public"."workspaces"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;
6 changes: 5 additions & 1 deletion drizzle/0005_mixed_alex_wilder.sql
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
ALTER TABLE "user_settings" ADD COLUMN "default_command" text DEFAULT '';
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='user_settings' AND column_name='default_command') THEN
ALTER TABLE "user_settings" ADD COLUMN "default_command" text DEFAULT '';
END IF;
END $$;
86 changes: 86 additions & 0 deletions drizzle/0006_fancy_sally_floyd.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
CREATE TABLE IF NOT EXISTS "archived_messages" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"archived_session_id" uuid NOT NULL,
"opencode_message_id" text NOT NULL,
"role" text NOT NULL,
"agent" text,
"model" text,
"cost" double precision,
"tokens" jsonb,
"error" text,
"data" jsonb,
"time_created" timestamp with time zone,
"time_updated" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "archived_parts" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"archived_message_id" uuid NOT NULL,
"archived_session_id" uuid NOT NULL,
"opencode_part_id" text NOT NULL,
"type" text NOT NULL,
"data" jsonb NOT NULL,
"time_created" timestamp with time zone,
"time_updated" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "archived_sessions" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"chat_session_id" uuid NOT NULL,
"opencode_session_id" text NOT NULL,
"parent_session_id" text,
"title" text,
"project_id" text,
"total_cost" double precision DEFAULT 0,
"total_tokens" integer DEFAULT 0,
"input_tokens" integer DEFAULT 0,
"output_tokens" integer DEFAULT 0,
"reasoning_tokens" integer DEFAULT 0,
"cache_read" integer DEFAULT 0,
"cache_write" integer DEFAULT 0,
"message_count" integer DEFAULT 0,
"time_created" timestamp with time zone,
"time_updated" timestamp with time zone,
"metadata" jsonb DEFAULT '{}'::jsonb,
"created_at" timestamp with time zone DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "archived_todos" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"archived_session_id" uuid NOT NULL,
"content" text NOT NULL,
"status" text NOT NULL,
"priority" text NOT NULL,
"position" integer NOT NULL
);
--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='chat_sessions' AND column_name='archive_status') THEN
ALTER TABLE "chat_sessions" ADD COLUMN "archive_status" text DEFAULT 'none' NOT NULL;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'archived_messages_archived_session_id_archived_sessions_id_fk') THEN
ALTER TABLE "archived_messages" ADD CONSTRAINT "archived_messages_archived_session_id_archived_sessions_id_fk" FOREIGN KEY ("archived_session_id") REFERENCES "public"."archived_sessions"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'archived_parts_archived_message_id_archived_messages_id_fk') THEN
ALTER TABLE "archived_parts" ADD CONSTRAINT "archived_parts_archived_message_id_archived_messages_id_fk" FOREIGN KEY ("archived_message_id") REFERENCES "public"."archived_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'archived_parts_archived_session_id_archived_sessions_id_fk') THEN
ALTER TABLE "archived_parts" ADD CONSTRAINT "archived_parts_archived_session_id_archived_sessions_id_fk" FOREIGN KEY ("archived_session_id") REFERENCES "public"."archived_sessions"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'archived_sessions_chat_session_id_chat_sessions_id_fk') THEN
ALTER TABLE "archived_sessions" ADD CONSTRAINT "archived_sessions_chat_session_id_chat_sessions_id_fk" FOREIGN KEY ("chat_session_id") REFERENCES "public"."chat_sessions"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'archived_todos_archived_session_id_archived_sessions_id_fk') THEN
ALTER TABLE "archived_todos" ADD CONSTRAINT "archived_todos_archived_session_id_archived_sessions_id_fk" FOREIGN KEY ("archived_session_id") REFERENCES "public"."archived_sessions"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;
5 changes: 5 additions & 0 deletions drizzle/0007_ancient_grandmaster.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
CREATE INDEX IF NOT EXISTS "idx_archived_messages_session_id" ON "archived_messages" USING btree ("archived_session_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "idx_archived_parts_session_id" ON "archived_parts" USING btree ("archived_session_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "idx_archived_parts_message_id" ON "archived_parts" USING btree ("archived_message_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "idx_archived_sessions_chat_session_id" ON "archived_sessions" USING btree ("chat_session_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "idx_archived_todos_session_id" ON "archived_todos" USING btree ("archived_session_id");
5 changes: 5 additions & 0 deletions drizzle/0008_proactive_archive_sync.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='chat_sessions' AND column_name='last_archived_at') THEN
ALTER TABLE "chat_sessions" ADD COLUMN "last_archived_at" TIMESTAMP WITH TIME ZONE;
END IF;
END $$;
Loading