@@ -146,7 +146,7 @@ CREATE TABLE IF NOT EXISTS assets (
146146CREATE TABLE IF NOT EXISTS packages (
147147 id uuid NOT NULL DEFAULT generate_uuidv7(),
148148 name TEXT NOT NULL CHECK (name <> ' ' AND CHAR_LENGTH(name) <= 100 ),
149-
149+
150150 title TEXT CHECK (title <> ' ' AND CHAR_LENGTH(title) <= 100 ),
151151 summary TEXT CHECK (summary <> ' ' AND CHAR_LENGTH(summary) <= 80 ),
152152 description_raw TEXT CHECK (description_raw <> ' ' AND CHAR_LENGTH(description_raw) <= 10000 ),
@@ -183,7 +183,7 @@ CREATE TABLE IF NOT EXISTS package_versions (
183183 id uuid NOT NULL DEFAULT generate_uuidv7(),
184184 package_id uuid NOT NULL ,
185185 deployment_id uuid NOT NULL ,
186-
186+
187187 visibility TEXT NOT NULL CHECK (visibility <> ' ' AND CHAR_LENGTH(visibility) <= 20 ),
188188 major BIGINT NOT NULL CHECK (major >= 0 AND major <= 32767 ),
189189 minor BIGINT NOT NULL CHECK (minor >= 0 AND minor <= 32767 ),
@@ -428,7 +428,7 @@ CREATE TABLE IF NOT EXISTS fly_apps (
428428 runner_version TEXT NOT NULL ,
429429 primary_region TEXT NOT NULL ,
430430 status TEXT NOT NULL , -- pending, ready, failed
431-
431+
432432 reaped_at timestamptz , -- when we deleted an app and its resources on fly.io
433433 reap_error TEXT , -- error message if reaping failed
434434
@@ -479,6 +479,23 @@ CREATE TABLE IF NOT EXISTS environment_entries (
479479 CONSTRAINT environments_entries_environment_id_fkey FOREIGN KEY (environment_id) REFERENCES environments (id) ON DELETE CASCADE
480480);
481481
482+ CREATE TABLE IF NOT EXISTS source_environments (
483+ id uuid NOT NULL DEFAULT generate_uuidv7(),
484+ source_kind TEXT NOT NULL ,
485+ source_slug TEXT NOT NULL ,
486+ project_id UUID NOT NULL ,
487+ environment_id UUID NOT NULL ,
488+
489+ created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
490+ updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
491+
492+ CONSTRAINT source_environments_pkey PRIMARY KEY (id),
493+ CONSTRAINT source_environments_environment_id_fkey FOREIGN KEY (environment_id) REFERENCES environments (id) ON DELETE CASCADE ,
494+ CONSTRAINT source_environments_project_id_fkey FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
495+ );
496+
497+ CREATE UNIQUE INDEX IF NOT EXISTS source_environments_source_kind_source_slug_idx ON source_environments (project_id, source_kind, source_slug);
498+
482499CREATE TABLE IF NOT EXISTS custom_domains (
483500 id uuid NOT NULL DEFAULT generate_uuidv7(),
484501 organization_id TEXT NOT NULL ,
@@ -491,9 +508,9 @@ CREATE TABLE IF NOT EXISTS custom_domains (
491508 updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
492509 deleted_at timestamptz ,
493510 deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL ) stored,
494-
511+
495512 CONSTRAINT custom_domains_pkey PRIMARY KEY (id)
496-
513+
497514);
498515
499516CREATE UNIQUE INDEX IF NOT EXISTS custom_domains_domain_key
@@ -508,15 +525,15 @@ WHERE deleted IS FALSE;
508525CREATE TABLE IF NOT EXISTS external_oauth_server_metadata (
509526 id uuid NOT NULL DEFAULT generate_uuidv7(),
510527 project_id uuid NOT NULL ,
511-
528+
512529 slug TEXT NOT NULL CHECK (slug <> ' ' AND CHAR_LENGTH(slug) <= 100 ),
513530 metadata JSONB NOT NULL ,
514-
531+
515532 created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
516533 updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
517534 deleted_at timestamptz ,
518535 deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL ) stored,
519-
536+
520537 CONSTRAINT external_oauth_server_metadata_pkey PRIMARY KEY (id),
521538 CONSTRAINT external_oauth_server_metadata_project_id_fkey FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
522539);
@@ -531,12 +548,12 @@ CREATE TABLE IF NOT EXISTS oauth_proxy_servers (
531548 project_id uuid NOT NULL ,
532549
533550 slug TEXT NOT NULL CHECK (slug <> ' ' AND CHAR_LENGTH(slug) <= 100 ),
534-
551+
535552 created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
536553 updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
537554 deleted_at timestamptz ,
538555 deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL ) stored,
539-
556+
540557 CONSTRAINT oauth_proxy_servers_pkey PRIMARY KEY (id),
541558 CONSTRAINT oauth_proxy_servers_project_id_fkey FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
542559);
@@ -550,27 +567,27 @@ CREATE TABLE IF NOT EXISTS oauth_proxy_providers (
550567 id uuid NOT NULL DEFAULT generate_uuidv7(),
551568 project_id uuid NOT NULL ,
552569 oauth_proxy_server_id uuid NOT NULL ,
553-
570+
554571 slug TEXT NOT NULL CHECK (slug <> ' ' AND CHAR_LENGTH(slug) <= 100 ),
555572 authorization_endpoint TEXT NOT NULL ,
556573 token_endpoint TEXT NOT NULL ,
557574 registration_endpoint TEXT ,
558-
575+
559576 -- OAuth server capabilities
560577 scopes_supported TEXT [] DEFAULT ARRAY[]::TEXT [],
561578 response_types_supported TEXT [] DEFAULT ARRAY[]::TEXT [],
562579 response_modes_supported TEXT [] DEFAULT ARRAY[]::TEXT [],
563580 grant_types_supported TEXT [] DEFAULT ARRAY[]::TEXT [],
564581 token_endpoint_auth_methods_supported TEXT [] DEFAULT ARRAY[]::TEXT [],
565-
582+
566583 security_key_names TEXT [] DEFAULT ARRAY[]::TEXT [],
567584 secrets JSONB,
568-
585+
569586 created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
570587 updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
571588 deleted_at timestamptz ,
572589 deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL ) stored,
573-
590+
574591 CONSTRAINT oauth_proxy_providers_pkey PRIMARY KEY (id),
575592 CONSTRAINT oauth_proxy_providers_project_id_fkey FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE ,
576593 CONSTRAINT oauth_proxy_providers_oauth_proxy_server_id_fkey FOREIGN KEY (oauth_proxy_server_id) REFERENCES oauth_proxy_servers (id) ON DELETE CASCADE
@@ -649,7 +666,7 @@ CREATE INDEX IF NOT EXISTS toolset_versions_toolset_id_version_idx ON toolset_ve
649666
650667CREATE TABLE IF NOT EXISTS http_security (
651668 id uuid NOT NULL DEFAULT generate_uuidv7(),
652-
669+
653670 deployment_id uuid NOT NULL ,
654671 project_id uuid,
655672 openapiv3_document_id uuid,
@@ -664,37 +681,37 @@ CREATE TABLE IF NOT EXISTS http_security (
664681 oauth_flows JSONB,
665682
666683 env_variables TEXT [] DEFAULT ARRAY[]::TEXT [],
667-
684+
668685 created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
669686 updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
670687 deleted_at timestamptz ,
671688 deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL ) stored,
672-
689+
673690 CONSTRAINT http_security_pkey PRIMARY KEY (id),
674691 CONSTRAINT http_security_deployment_id_fkey FOREIGN KEY (deployment_id) REFERENCES deployments (id) ON DELETE CASCADE ,
675692 CONSTRAINT http_security_project_id_fkey FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE ,
676693 CONSTRAINT http_security_openapiv3_document_id_fkey FOREIGN key (openapiv3_document_id) REFERENCES deployments_openapiv3_assets (id) ON DELETE RESTRICT
677694);
678695
679- CREATE INDEX IF NOT EXISTS http_security_deleted_idx
696+ CREATE INDEX IF NOT EXISTS http_security_deleted_idx
680697ON http_security (deleted);
681698
682- CREATE INDEX IF NOT EXISTS http_security_type_scheme_idx
699+ CREATE INDEX IF NOT EXISTS http_security_type_scheme_idx
683700ON http_security (type, scheme);
684701
685702CREATE TABLE IF NOT EXISTS openrouter_api_keys (
686703 organization_id TEXT NOT NULL ,
687-
704+
688705 key TEXT NOT NULL ,
689706 key_hash TEXT NOT NULL ,
690707 monthly_credits BIGINT NOT NULL DEFAULT 0 ,
691708 disabled BOOLEAN NOT NULL DEFAULT FALSE,
692-
709+
693710 created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
694711 updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
695712 deleted_at timestamptz ,
696713 deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL ) stored,
697-
714+
698715 CONSTRAINT openrouter_api_keys_pkey PRIMARY KEY (organization_id)
699716);
700717
@@ -710,15 +727,15 @@ CREATE TABLE IF NOT EXISTS chats (
710727 updated_at timestamptz NOT NULL DEFAULT clock_timestamp(),
711728 deleted_at timestamptz ,
712729 deleted boolean NOT NULL GENERATED ALWAYS AS (deleted_at IS NOT NULL ) stored,
713-
730+
714731 CONSTRAINT chats_pkey PRIMARY KEY (id),
715732 CONSTRAINT chats_project_id_fkey FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
716733);
717734
718735-- Create the chat_messages table to store individual messages in each chat
719736CREATE TABLE IF NOT EXISTS chat_messages (
720737 id uuid NOT NULL DEFAULT generate_uuidv7(),
721-
738+
722739 chat_id uuid NOT NULL ,
723740 project_id uuid,
724741 role TEXT NOT NULL CHECK (role IN (' user' , ' assistant' , ' system' , ' tool' )),
@@ -732,9 +749,9 @@ CREATE TABLE IF NOT EXISTS chat_messages (
732749 prompt_tokens BIGINT NOT NULL DEFAULT 0 ,
733750 completion_tokens BIGINT NOT NULL DEFAULT 0 ,
734751 total_tokens BIGINT NOT NULL DEFAULT 0 ,
735-
752+
736753 created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
737-
754+
738755 CONSTRAINT chat_messages_pkey PRIMARY KEY (id),
739756 CONSTRAINT chat_messages_chat_id_fkey FOREIGN KEY (chat_id) REFERENCES chats(id) ON DELETE CASCADE
740757);
0 commit comments