CREATE TABLE "actors" ( "actor_id" text NOT NULL, "user_id" text NOT NULL, "kind" text NOT NULL, "sub_type" text, "status" text DEFAULT 'idle' NOT NULL, "channel_id" text, "parent_actor_id" text, "last_activity_at" timestamp with time zone, "created_at" timestamp with time zone DEFAULT now() NOT NULL, CONSTRAINT "actors_user_id_actor_id_pk" PRIMARY KEY("user_id","actor_id") ); --> statement-breakpoint CREATE TABLE "events" ( "id" text PRIMARY KEY DEFAULT gen_random_uuid()::text NOT NULL, "user_id" text NOT NULL, "actor_id" text, "type" text NOT NULL, "payload" jsonb, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "opencode_sessions" ( "id" text PRIMARY KEY NOT NULL, "user_id" text NOT NULL, "actor_id" text, "title" text, "parent_id" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "repos" ( "id" text PRIMARY KEY NOT NULL, "user_id" text NOT NULL, "name" text NOT NULL, "role" text NOT NULL, "gitea_owner" text NOT NULL, "gitea_name" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "user_stacks" ( "user_id" text PRIMARY KEY NOT NULL, "status" text DEFAULT 'provisioning' NOT NULL, "gitea_container_id" text, "gitea_container_name" text, "gitea_host" text, "gitea_http_port" integer, "gitea_ssh_port" integer, "gitea_admin_user" text, "gitea_admin_token" text, "gitea_memory_repo" text, "opencode_container_id" text, "opencode_container_name" text, "opencode_host" text, "opencode_port" integer, "opencode_password" text, "workspace_path" text, "last_error" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "users" ( "id" text PRIMARY KEY NOT NULL, "email" text NOT NULL, "display_name" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint ALTER TABLE "actors" ADD CONSTRAINT "actors_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "opencode_sessions" ADD CONSTRAINT "opencode_sessions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "repos" ADD CONSTRAINT "repos_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "user_stacks" ADD CONSTRAINT "user_stacks_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint CREATE INDEX "actors_user_kind_idx" ON "actors" USING btree ("user_id","kind");--> statement-breakpoint CREATE INDEX "events_user_idx" ON "events" USING btree ("user_id","created_at");--> statement-breakpoint CREATE INDEX "opencode_sessions_user_idx" ON "opencode_sessions" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "repos_user_role_idx" ON "repos" USING btree ("user_id","role");--> statement-breakpoint CREATE INDEX "user_stacks_status_idx" ON "user_stacks" USING btree ("status");--> statement-breakpoint CREATE UNIQUE INDEX "users_email_idx" ON "users" USING btree ("email");