diff --git a/drizzle/0074_wide_retro_girl.sql b/drizzle/0074_wide_retro_girl.sql
new file mode 100644
index 000000000..df9235243
--- /dev/null
+++ b/drizzle/0074_wide_retro_girl.sql
@@ -0,0 +1,3 @@
+ALTER TABLE "providers" ADD COLUMN "allowed_clients" jsonb DEFAULT '[]'::jsonb NOT NULL;--> statement-breakpoint
+ALTER TABLE "providers" ADD COLUMN "blocked_clients" jsonb DEFAULT '[]'::jsonb NOT NULL;--> statement-breakpoint
+ALTER TABLE "users" ADD COLUMN "blocked_clients" jsonb DEFAULT '[]'::jsonb NOT NULL;
\ No newline at end of file
diff --git a/drizzle/0075_faithful_speed_demon.sql b/drizzle/0075_faithful_speed_demon.sql
new file mode 100644
index 000000000..671525977
--- /dev/null
+++ b/drizzle/0075_faithful_speed_demon.sql
@@ -0,0 +1,5 @@
+DROP INDEX IF EXISTS "idx_usage_ledger_key_cost";--> statement-breakpoint
+CREATE INDEX IF NOT EXISTS "idx_message_request_session_user_info" ON "message_request" USING btree ("session_id","created_at","user_id","key") WHERE "message_request"."deleted_at" IS NULL;--> statement-breakpoint
+CREATE INDEX IF NOT EXISTS "idx_usage_ledger_user_cost_cover" ON "usage_ledger" USING btree ("user_id","created_at","cost_usd") WHERE "usage_ledger"."blocked_by" IS NULL;--> statement-breakpoint
+CREATE INDEX IF NOT EXISTS "idx_usage_ledger_provider_cost_cover" ON "usage_ledger" USING btree ("final_provider_id","created_at","cost_usd") WHERE "usage_ledger"."blocked_by" IS NULL;--> statement-breakpoint
+CREATE INDEX IF NOT EXISTS "idx_usage_ledger_key_cost" ON "usage_ledger" USING btree ("key","created_at","cost_usd") WHERE "usage_ledger"."blocked_by" IS NULL;
\ No newline at end of file
diff --git a/drizzle/meta/0074_snapshot.json b/drizzle/meta/0074_snapshot.json
new file mode 100644
index 000000000..ca17a71b0
--- /dev/null
+++ b/drizzle/meta/0074_snapshot.json
@@ -0,0 +1,3723 @@
+{
+ "id": "132bc4b6-86f3-43e1-b980-5ff62835bd1d",
+ "prevId": "0a7b1169-a126-4a17-a3e5-ce96ffcb0d59",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.error_rules": {
+ "name": "error_rules",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "pattern": {
+ "name": "pattern",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "match_type": {
+ "name": "match_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'regex'"
+ },
+ "category": {
+ "name": "category",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "override_response": {
+ "name": "override_response",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "override_status_code": {
+ "name": "override_status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "is_default": {
+ "name": "is_default",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_error_rules_enabled": {
+ "name": "idx_error_rules_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "priority",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "unique_pattern": {
+ "name": "unique_pattern",
+ "columns": [
+ {
+ "expression": "pattern",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_category": {
+ "name": "idx_category",
+ "columns": [
+ {
+ "expression": "category",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_match_type": {
+ "name": "idx_match_type",
+ "columns": [
+ {
+ "expression": "match_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.keys": {
+ "name": "keys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "can_login_web_ui": {
+ "name": "can_login_web_ui",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "limit_5h_usd": {
+ "name": "limit_5h_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_daily_usd": {
+ "name": "limit_daily_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "type": "daily_reset_mode",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'fixed'"
+ },
+ "daily_reset_time": {
+ "name": "daily_reset_time",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'00:00'"
+ },
+ "limit_weekly_usd": {
+ "name": "limit_weekly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_monthly_usd": {
+ "name": "limit_monthly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_total_usd": {
+ "name": "limit_total_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_concurrent_sessions": {
+ "name": "limit_concurrent_sessions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "provider_group": {
+ "name": "provider_group",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'default'"
+ },
+ "cache_ttl_preference": {
+ "name": "cache_ttl_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_keys_user_id": {
+ "name": "idx_keys_user_id",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_keys_key": {
+ "name": "idx_keys_key",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_keys_created_at": {
+ "name": "idx_keys_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_keys_deleted_at": {
+ "name": "idx_keys_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.message_request": {
+ "name": "message_request",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "model": {
+ "name": "model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "duration_ms": {
+ "name": "duration_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cost_usd": {
+ "name": "cost_usd",
+ "type": "numeric(21, 15)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0'"
+ },
+ "cost_multiplier": {
+ "name": "cost_multiplier",
+ "type": "numeric(10, 4)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "session_id": {
+ "name": "session_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "request_sequence": {
+ "name": "request_sequence",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 1
+ },
+ "provider_chain": {
+ "name": "provider_chain",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status_code": {
+ "name": "status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "api_type": {
+ "name": "api_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "original_model": {
+ "name": "original_model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "input_tokens": {
+ "name": "input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "output_tokens": {
+ "name": "output_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ttfb_ms": {
+ "name": "ttfb_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_input_tokens": {
+ "name": "cache_creation_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_read_input_tokens": {
+ "name": "cache_read_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_5m_input_tokens": {
+ "name": "cache_creation_5m_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_1h_input_tokens": {
+ "name": "cache_creation_1h_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_ttl_applied": {
+ "name": "cache_ttl_applied",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "context_1m_applied": {
+ "name": "context_1m_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "swap_cache_ttl_applied": {
+ "name": "swap_cache_ttl_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "special_settings": {
+ "name": "special_settings",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_message": {
+ "name": "error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_stack": {
+ "name": "error_stack",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_cause": {
+ "name": "error_cause",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blocked_by": {
+ "name": "blocked_by",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blocked_reason": {
+ "name": "blocked_reason",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_agent": {
+ "name": "user_agent",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "messages_count": {
+ "name": "messages_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_message_request_user_date_cost": {
+ "name": "idx_message_request_user_date_cost",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_user_created_at_cost_stats": {
+ "name": "idx_message_request_user_created_at_cost_stats",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_user_query": {
+ "name": "idx_message_request_user_query",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_provider_created_at_active": {
+ "name": "idx_message_request_provider_created_at_active",
+ "columns": [
+ {
+ "expression": "provider_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_session_id": {
+ "name": "idx_message_request_session_id",
+ "columns": [
+ {
+ "expression": "session_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_session_id_prefix": {
+ "name": "idx_message_request_session_id_prefix",
+ "columns": [
+ {
+ "expression": "\"session_id\" varchar_pattern_ops",
+ "asc": true,
+ "isExpression": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_session_seq": {
+ "name": "idx_message_request_session_seq",
+ "columns": [
+ {
+ "expression": "session_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "request_sequence",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_endpoint": {
+ "name": "idx_message_request_endpoint",
+ "columns": [
+ {
+ "expression": "endpoint",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_blocked_by": {
+ "name": "idx_message_request_blocked_by",
+ "columns": [
+ {
+ "expression": "blocked_by",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_provider_id": {
+ "name": "idx_message_request_provider_id",
+ "columns": [
+ {
+ "expression": "provider_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_user_id": {
+ "name": "idx_message_request_user_id",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key": {
+ "name": "idx_message_request_key",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_created_at_id": {
+ "name": "idx_message_request_key_created_at_id",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_model_active": {
+ "name": "idx_message_request_key_model_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "model",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"model\" IS NOT NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_endpoint_active": {
+ "name": "idx_message_request_key_endpoint_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "endpoint",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"endpoint\" IS NOT NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_created_at_id_active": {
+ "name": "idx_message_request_created_at_id_active",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_model_active": {
+ "name": "idx_message_request_model_active",
+ "columns": [
+ {
+ "expression": "model",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"model\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_status_code_active": {
+ "name": "idx_message_request_status_code_active",
+ "columns": [
+ {
+ "expression": "status_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"status_code\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_created_at": {
+ "name": "idx_message_request_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_deleted_at": {
+ "name": "idx_message_request_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_last_active": {
+ "name": "idx_message_request_key_last_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_cost_active": {
+ "name": "idx_message_request_key_cost_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.model_prices": {
+ "name": "model_prices",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "model_name": {
+ "name": "model_name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "price_data": {
+ "name": "price_data",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "source": {
+ "name": "source",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'litellm'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_model_prices_latest": {
+ "name": "idx_model_prices_latest",
+ "columns": [
+ {
+ "expression": "model_name",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_model_prices_model_name": {
+ "name": "idx_model_prices_model_name",
+ "columns": [
+ {
+ "expression": "model_name",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_model_prices_created_at": {
+ "name": "idx_model_prices_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_model_prices_source": {
+ "name": "idx_model_prices_source",
+ "columns": [
+ {
+ "expression": "source",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.notification_settings": {
+ "name": "notification_settings",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "use_legacy_mode": {
+ "name": "use_legacy_mode",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "circuit_breaker_enabled": {
+ "name": "circuit_breaker_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "circuit_breaker_webhook": {
+ "name": "circuit_breaker_webhook",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_leaderboard_enabled": {
+ "name": "daily_leaderboard_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "daily_leaderboard_webhook": {
+ "name": "daily_leaderboard_webhook",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_leaderboard_time": {
+ "name": "daily_leaderboard_time",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'09:00'"
+ },
+ "daily_leaderboard_top_n": {
+ "name": "daily_leaderboard_top_n",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 5
+ },
+ "cost_alert_enabled": {
+ "name": "cost_alert_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "cost_alert_webhook": {
+ "name": "cost_alert_webhook",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cost_alert_threshold": {
+ "name": "cost_alert_threshold",
+ "type": "numeric(5, 2)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.80'"
+ },
+ "cost_alert_check_interval": {
+ "name": "cost_alert_check_interval",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 60
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.notification_target_bindings": {
+ "name": "notification_target_bindings",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "notification_type": {
+ "name": "notification_type",
+ "type": "notification_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_id": {
+ "name": "target_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "schedule_cron": {
+ "name": "schedule_cron",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "schedule_timezone": {
+ "name": "schedule_timezone",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "template_override": {
+ "name": "template_override",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "unique_notification_target_binding": {
+ "name": "unique_notification_target_binding",
+ "columns": [
+ {
+ "expression": "notification_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "target_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_notification_bindings_type": {
+ "name": "idx_notification_bindings_type",
+ "columns": [
+ {
+ "expression": "notification_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_notification_bindings_target": {
+ "name": "idx_notification_bindings_target",
+ "columns": [
+ {
+ "expression": "target_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "notification_target_bindings_target_id_webhook_targets_id_fk": {
+ "name": "notification_target_bindings_target_id_webhook_targets_id_fk",
+ "tableFrom": "notification_target_bindings",
+ "tableTo": "webhook_targets",
+ "columnsFrom": [
+ "target_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.provider_endpoint_probe_logs": {
+ "name": "provider_endpoint_probe_logs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "endpoint_id": {
+ "name": "endpoint_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "source": {
+ "name": "source",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'scheduled'"
+ },
+ "ok": {
+ "name": "ok",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status_code": {
+ "name": "status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "latency_ms": {
+ "name": "latency_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_type": {
+ "name": "error_type",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_message": {
+ "name": "error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_provider_endpoint_probe_logs_endpoint_created_at": {
+ "name": "idx_provider_endpoint_probe_logs_endpoint_created_at",
+ "columns": [
+ {
+ "expression": "endpoint_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoint_probe_logs_created_at": {
+ "name": "idx_provider_endpoint_probe_logs_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "provider_endpoint_probe_logs_endpoint_id_provider_endpoints_id_fk": {
+ "name": "provider_endpoint_probe_logs_endpoint_id_provider_endpoints_id_fk",
+ "tableFrom": "provider_endpoint_probe_logs",
+ "tableTo": "provider_endpoints",
+ "columnsFrom": [
+ "endpoint_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.provider_endpoints": {
+ "name": "provider_endpoints",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "vendor_id": {
+ "name": "vendor_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_type": {
+ "name": "provider_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'claude'"
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "last_probed_at": {
+ "name": "last_probed_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_ok": {
+ "name": "last_probe_ok",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_status_code": {
+ "name": "last_probe_status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_latency_ms": {
+ "name": "last_probe_latency_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_error_type": {
+ "name": "last_probe_error_type",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_error_message": {
+ "name": "last_probe_error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "uniq_provider_endpoints_vendor_type_url": {
+ "name": "uniq_provider_endpoints_vendor_type_url",
+ "columns": [
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "url",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_vendor_type": {
+ "name": "idx_provider_endpoints_vendor_type",
+ "columns": [
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_enabled": {
+ "name": "idx_provider_endpoints_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_pick_enabled": {
+ "name": "idx_provider_endpoints_pick_enabled",
+ "columns": [
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_created_at": {
+ "name": "idx_provider_endpoints_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_deleted_at": {
+ "name": "idx_provider_endpoints_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "provider_endpoints_vendor_id_provider_vendors_id_fk": {
+ "name": "provider_endpoints_vendor_id_provider_vendors_id_fk",
+ "tableFrom": "provider_endpoints",
+ "tableTo": "provider_vendors",
+ "columnsFrom": [
+ "vendor_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.provider_vendors": {
+ "name": "provider_vendors",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "website_domain": {
+ "name": "website_domain",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "website_url": {
+ "name": "website_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "favicon_url": {
+ "name": "favicon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "uniq_provider_vendors_website_domain": {
+ "name": "uniq_provider_vendors_website_domain",
+ "columns": [
+ {
+ "expression": "website_domain",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_vendors_created_at": {
+ "name": "idx_provider_vendors_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.providers": {
+ "name": "providers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_vendor_id": {
+ "name": "provider_vendor_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "weight": {
+ "name": "weight",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 1
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "group_priorities": {
+ "name": "group_priorities",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'null'::jsonb"
+ },
+ "cost_multiplier": {
+ "name": "cost_multiplier",
+ "type": "numeric(10, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'1.0'"
+ },
+ "group_tag": {
+ "name": "group_tag",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "provider_type": {
+ "name": "provider_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'claude'"
+ },
+ "preserve_client_ip": {
+ "name": "preserve_client_ip",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "model_redirects": {
+ "name": "model_redirects",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "allowed_models": {
+ "name": "allowed_models",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'null'::jsonb"
+ },
+ "allowed_clients": {
+ "name": "allowed_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'::jsonb"
+ },
+ "blocked_clients": {
+ "name": "blocked_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'::jsonb"
+ },
+ "join_claude_pool": {
+ "name": "join_claude_pool",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "codex_instructions_strategy": {
+ "name": "codex_instructions_strategy",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'auto'"
+ },
+ "mcp_passthrough_type": {
+ "name": "mcp_passthrough_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "mcp_passthrough_url": {
+ "name": "mcp_passthrough_url",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_5h_usd": {
+ "name": "limit_5h_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_daily_usd": {
+ "name": "limit_daily_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "type": "daily_reset_mode",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'fixed'"
+ },
+ "daily_reset_time": {
+ "name": "daily_reset_time",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'00:00'"
+ },
+ "limit_weekly_usd": {
+ "name": "limit_weekly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_monthly_usd": {
+ "name": "limit_monthly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_total_usd": {
+ "name": "limit_total_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "total_cost_reset_at": {
+ "name": "total_cost_reset_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_concurrent_sessions": {
+ "name": "limit_concurrent_sessions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "max_retry_attempts": {
+ "name": "max_retry_attempts",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "circuit_breaker_failure_threshold": {
+ "name": "circuit_breaker_failure_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 5
+ },
+ "circuit_breaker_open_duration": {
+ "name": "circuit_breaker_open_duration",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 1800000
+ },
+ "circuit_breaker_half_open_success_threshold": {
+ "name": "circuit_breaker_half_open_success_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 2
+ },
+ "proxy_url": {
+ "name": "proxy_url",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "proxy_fallback_to_direct": {
+ "name": "proxy_fallback_to_direct",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "first_byte_timeout_streaming_ms": {
+ "name": "first_byte_timeout_streaming_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "streaming_idle_timeout_ms": {
+ "name": "streaming_idle_timeout_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "request_timeout_non_streaming_ms": {
+ "name": "request_timeout_non_streaming_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "website_url": {
+ "name": "website_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "favicon_url": {
+ "name": "favicon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_ttl_preference": {
+ "name": "cache_ttl_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "swap_cache_ttl_billing": {
+ "name": "swap_cache_ttl_billing",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "context_1m_preference": {
+ "name": "context_1m_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_reasoning_effort_preference": {
+ "name": "codex_reasoning_effort_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_reasoning_summary_preference": {
+ "name": "codex_reasoning_summary_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_text_verbosity_preference": {
+ "name": "codex_text_verbosity_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_parallel_tool_calls_preference": {
+ "name": "codex_parallel_tool_calls_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "anthropic_max_tokens_preference": {
+ "name": "anthropic_max_tokens_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "anthropic_thinking_budget_preference": {
+ "name": "anthropic_thinking_budget_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "anthropic_adaptive_thinking": {
+ "name": "anthropic_adaptive_thinking",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'null'::jsonb"
+ },
+ "gemini_google_search_preference": {
+ "name": "gemini_google_search_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "tpm": {
+ "name": "tpm",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "rpm": {
+ "name": "rpm",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "rpd": {
+ "name": "rpd",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "cc": {
+ "name": "cc",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_providers_enabled_priority": {
+ "name": "idx_providers_enabled_priority",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "priority",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "weight",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_group": {
+ "name": "idx_providers_group",
+ "columns": [
+ {
+ "expression": "group_tag",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_vendor_type_url_active": {
+ "name": "idx_providers_vendor_type_url_active",
+ "columns": [
+ {
+ "expression": "provider_vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "url",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_created_at": {
+ "name": "idx_providers_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_deleted_at": {
+ "name": "idx_providers_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_vendor_type": {
+ "name": "idx_providers_vendor_type",
+ "columns": [
+ {
+ "expression": "provider_vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_enabled_vendor_type": {
+ "name": "idx_providers_enabled_vendor_type",
+ "columns": [
+ {
+ "expression": "provider_vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL AND \"providers\".\"is_enabled\" = true AND \"providers\".\"provider_vendor_id\" IS NOT NULL AND \"providers\".\"provider_vendor_id\" > 0",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "providers_provider_vendor_id_provider_vendors_id_fk": {
+ "name": "providers_provider_vendor_id_provider_vendors_id_fk",
+ "tableFrom": "providers",
+ "tableTo": "provider_vendors",
+ "columnsFrom": [
+ "provider_vendor_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.request_filters": {
+ "name": "request_filters",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action": {
+ "name": "action",
+ "type": "varchar(30)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "match_type": {
+ "name": "match_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target": {
+ "name": "target",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "replacement": {
+ "name": "replacement",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "binding_type": {
+ "name": "binding_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'global'"
+ },
+ "provider_ids": {
+ "name": "provider_ids",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "group_tags": {
+ "name": "group_tags",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_request_filters_enabled": {
+ "name": "idx_request_filters_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "priority",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_request_filters_scope": {
+ "name": "idx_request_filters_scope",
+ "columns": [
+ {
+ "expression": "scope",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_request_filters_action": {
+ "name": "idx_request_filters_action",
+ "columns": [
+ {
+ "expression": "action",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_request_filters_binding": {
+ "name": "idx_request_filters_binding",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "binding_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.sensitive_words": {
+ "name": "sensitive_words",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "word": {
+ "name": "word",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "match_type": {
+ "name": "match_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'contains'"
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_sensitive_words_enabled": {
+ "name": "idx_sensitive_words_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "match_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_sensitive_words_created_at": {
+ "name": "idx_sensitive_words_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.system_settings": {
+ "name": "system_settings",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "site_title": {
+ "name": "site_title",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'Claude Code Hub'"
+ },
+ "allow_global_usage_view": {
+ "name": "allow_global_usage_view",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "currency_display": {
+ "name": "currency_display",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'USD'"
+ },
+ "billing_model_source": {
+ "name": "billing_model_source",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'original'"
+ },
+ "timezone": {
+ "name": "timezone",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "enable_auto_cleanup": {
+ "name": "enable_auto_cleanup",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "cleanup_retention_days": {
+ "name": "cleanup_retention_days",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 30
+ },
+ "cleanup_schedule": {
+ "name": "cleanup_schedule",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0 2 * * *'"
+ },
+ "cleanup_batch_size": {
+ "name": "cleanup_batch_size",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 10000
+ },
+ "enable_client_version_check": {
+ "name": "enable_client_version_check",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "verbose_provider_error": {
+ "name": "verbose_provider_error",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "enable_http2": {
+ "name": "enable_http2",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "intercept_anthropic_warmup_requests": {
+ "name": "intercept_anthropic_warmup_requests",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "enable_thinking_signature_rectifier": {
+ "name": "enable_thinking_signature_rectifier",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_thinking_budget_rectifier": {
+ "name": "enable_thinking_budget_rectifier",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_billing_header_rectifier": {
+ "name": "enable_billing_header_rectifier",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_codex_session_id_completion": {
+ "name": "enable_codex_session_id_completion",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_claude_metadata_user_id_injection": {
+ "name": "enable_claude_metadata_user_id_injection",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_response_fixer": {
+ "name": "enable_response_fixer",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "response_fixer_config": {
+ "name": "response_fixer_config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'{\"fixTruncatedJson\":true,\"fixSseFormat\":true,\"fixEncoding\":true,\"maxJsonDepth\":200,\"maxFixSize\":1048576}'::jsonb"
+ },
+ "quota_db_refresh_interval_seconds": {
+ "name": "quota_db_refresh_interval_seconds",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 10
+ },
+ "quota_lease_percent_5h": {
+ "name": "quota_lease_percent_5h",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_percent_daily": {
+ "name": "quota_lease_percent_daily",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_percent_weekly": {
+ "name": "quota_lease_percent_weekly",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_percent_monthly": {
+ "name": "quota_lease_percent_monthly",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_cap_usd": {
+ "name": "quota_lease_cap_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.usage_ledger": {
+ "name": "usage_ledger",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "request_id": {
+ "name": "request_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "final_provider_id": {
+ "name": "final_provider_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "model": {
+ "name": "model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "original_model": {
+ "name": "original_model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "api_type": {
+ "name": "api_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "session_id": {
+ "name": "session_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status_code": {
+ "name": "status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_success": {
+ "name": "is_success",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "blocked_by": {
+ "name": "blocked_by",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cost_usd": {
+ "name": "cost_usd",
+ "type": "numeric(21, 15)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0'"
+ },
+ "cost_multiplier": {
+ "name": "cost_multiplier",
+ "type": "numeric(10, 4)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "input_tokens": {
+ "name": "input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "output_tokens": {
+ "name": "output_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_input_tokens": {
+ "name": "cache_creation_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_read_input_tokens": {
+ "name": "cache_read_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_5m_input_tokens": {
+ "name": "cache_creation_5m_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_1h_input_tokens": {
+ "name": "cache_creation_1h_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_ttl_applied": {
+ "name": "cache_ttl_applied",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "context_1m_applied": {
+ "name": "context_1m_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "swap_cache_ttl_applied": {
+ "name": "swap_cache_ttl_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "duration_ms": {
+ "name": "duration_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ttfb_ms": {
+ "name": "ttfb_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "idx_usage_ledger_request_id": {
+ "name": "idx_usage_ledger_request_id",
+ "columns": [
+ {
+ "expression": "request_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_user_created_at": {
+ "name": "idx_usage_ledger_user_created_at",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_key_created_at": {
+ "name": "idx_usage_ledger_key_created_at",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_provider_created_at": {
+ "name": "idx_usage_ledger_provider_created_at",
+ "columns": [
+ {
+ "expression": "final_provider_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_created_at_minute": {
+ "name": "idx_usage_ledger_created_at_minute",
+ "columns": [
+ {
+ "expression": "date_trunc('minute', \"created_at\" AT TIME ZONE 'UTC')",
+ "asc": true,
+ "isExpression": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_created_at_desc_id": {
+ "name": "idx_usage_ledger_created_at_desc_id",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_session_id": {
+ "name": "idx_usage_ledger_session_id",
+ "columns": [
+ {
+ "expression": "session_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"session_id\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_model": {
+ "name": "idx_usage_ledger_model",
+ "columns": [
+ {
+ "expression": "model",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"model\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_key_cost": {
+ "name": "idx_usage_ledger_key_cost",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "role": {
+ "name": "role",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'user'"
+ },
+ "rpm_limit": {
+ "name": "rpm_limit",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_limit_usd": {
+ "name": "daily_limit_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "provider_group": {
+ "name": "provider_group",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'default'"
+ },
+ "tags": {
+ "name": "tags",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'[]'::jsonb"
+ },
+ "limit_5h_usd": {
+ "name": "limit_5h_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_weekly_usd": {
+ "name": "limit_weekly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_monthly_usd": {
+ "name": "limit_monthly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_total_usd": {
+ "name": "limit_total_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_concurrent_sessions": {
+ "name": "limit_concurrent_sessions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "type": "daily_reset_mode",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'fixed'"
+ },
+ "daily_reset_time": {
+ "name": "daily_reset_time",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'00:00'"
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "allowed_clients": {
+ "name": "allowed_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'[]'::jsonb"
+ },
+ "allowed_models": {
+ "name": "allowed_models",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'[]'::jsonb"
+ },
+ "blocked_clients": {
+ "name": "blocked_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'::jsonb"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_users_active_role_sort": {
+ "name": "idx_users_active_role_sort",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "role",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"users\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_users_enabled_expires_at": {
+ "name": "idx_users_enabled_expires_at",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "expires_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"users\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_users_tags_gin": {
+ "name": "idx_users_tags_gin",
+ "columns": [
+ {
+ "expression": "tags",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"users\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "gin",
+ "with": {}
+ },
+ "idx_users_created_at": {
+ "name": "idx_users_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_users_deleted_at": {
+ "name": "idx_users_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.webhook_targets": {
+ "name": "webhook_targets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_type": {
+ "name": "provider_type",
+ "type": "webhook_provider_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "webhook_url": {
+ "name": "webhook_url",
+ "type": "varchar(1024)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "telegram_bot_token": {
+ "name": "telegram_bot_token",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "telegram_chat_id": {
+ "name": "telegram_chat_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "dingtalk_secret": {
+ "name": "dingtalk_secret",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "custom_template": {
+ "name": "custom_template",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "custom_headers": {
+ "name": "custom_headers",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "proxy_url": {
+ "name": "proxy_url",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "proxy_fallback_to_direct": {
+ "name": "proxy_fallback_to_direct",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "last_test_at": {
+ "name": "last_test_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_test_result": {
+ "name": "last_test_result",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "schema": "public",
+ "values": [
+ "fixed",
+ "rolling"
+ ]
+ },
+ "public.notification_type": {
+ "name": "notification_type",
+ "schema": "public",
+ "values": [
+ "circuit_breaker",
+ "daily_leaderboard",
+ "cost_alert"
+ ]
+ },
+ "public.webhook_provider_type": {
+ "name": "webhook_provider_type",
+ "schema": "public",
+ "values": [
+ "wechat",
+ "feishu",
+ "dingtalk",
+ "telegram",
+ "custom"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/drizzle/meta/0075_snapshot.json b/drizzle/meta/0075_snapshot.json
new file mode 100644
index 000000000..72868bccc
--- /dev/null
+++ b/drizzle/meta/0075_snapshot.json
@@ -0,0 +1,3819 @@
+{
+ "id": "61c4da35-57cf-4629-88de-a1af77c8ae3b",
+ "prevId": "132bc4b6-86f3-43e1-b980-5ff62835bd1d",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.error_rules": {
+ "name": "error_rules",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "pattern": {
+ "name": "pattern",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "match_type": {
+ "name": "match_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'regex'"
+ },
+ "category": {
+ "name": "category",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "override_response": {
+ "name": "override_response",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "override_status_code": {
+ "name": "override_status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "is_default": {
+ "name": "is_default",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_error_rules_enabled": {
+ "name": "idx_error_rules_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "priority",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "unique_pattern": {
+ "name": "unique_pattern",
+ "columns": [
+ {
+ "expression": "pattern",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_category": {
+ "name": "idx_category",
+ "columns": [
+ {
+ "expression": "category",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_match_type": {
+ "name": "idx_match_type",
+ "columns": [
+ {
+ "expression": "match_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.keys": {
+ "name": "keys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "can_login_web_ui": {
+ "name": "can_login_web_ui",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "limit_5h_usd": {
+ "name": "limit_5h_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_daily_usd": {
+ "name": "limit_daily_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "type": "daily_reset_mode",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'fixed'"
+ },
+ "daily_reset_time": {
+ "name": "daily_reset_time",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'00:00'"
+ },
+ "limit_weekly_usd": {
+ "name": "limit_weekly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_monthly_usd": {
+ "name": "limit_monthly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_total_usd": {
+ "name": "limit_total_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_concurrent_sessions": {
+ "name": "limit_concurrent_sessions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "provider_group": {
+ "name": "provider_group",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'default'"
+ },
+ "cache_ttl_preference": {
+ "name": "cache_ttl_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_keys_user_id": {
+ "name": "idx_keys_user_id",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_keys_key": {
+ "name": "idx_keys_key",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_keys_created_at": {
+ "name": "idx_keys_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_keys_deleted_at": {
+ "name": "idx_keys_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.message_request": {
+ "name": "message_request",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "model": {
+ "name": "model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "duration_ms": {
+ "name": "duration_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cost_usd": {
+ "name": "cost_usd",
+ "type": "numeric(21, 15)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0'"
+ },
+ "cost_multiplier": {
+ "name": "cost_multiplier",
+ "type": "numeric(10, 4)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "session_id": {
+ "name": "session_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "request_sequence": {
+ "name": "request_sequence",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 1
+ },
+ "provider_chain": {
+ "name": "provider_chain",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status_code": {
+ "name": "status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "api_type": {
+ "name": "api_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "original_model": {
+ "name": "original_model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "input_tokens": {
+ "name": "input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "output_tokens": {
+ "name": "output_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ttfb_ms": {
+ "name": "ttfb_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_input_tokens": {
+ "name": "cache_creation_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_read_input_tokens": {
+ "name": "cache_read_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_5m_input_tokens": {
+ "name": "cache_creation_5m_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_1h_input_tokens": {
+ "name": "cache_creation_1h_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_ttl_applied": {
+ "name": "cache_ttl_applied",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "context_1m_applied": {
+ "name": "context_1m_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "swap_cache_ttl_applied": {
+ "name": "swap_cache_ttl_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "special_settings": {
+ "name": "special_settings",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_message": {
+ "name": "error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_stack": {
+ "name": "error_stack",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_cause": {
+ "name": "error_cause",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blocked_by": {
+ "name": "blocked_by",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "blocked_reason": {
+ "name": "blocked_reason",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_agent": {
+ "name": "user_agent",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "messages_count": {
+ "name": "messages_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_message_request_user_date_cost": {
+ "name": "idx_message_request_user_date_cost",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_user_created_at_cost_stats": {
+ "name": "idx_message_request_user_created_at_cost_stats",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_user_query": {
+ "name": "idx_message_request_user_query",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_provider_created_at_active": {
+ "name": "idx_message_request_provider_created_at_active",
+ "columns": [
+ {
+ "expression": "provider_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_session_id": {
+ "name": "idx_message_request_session_id",
+ "columns": [
+ {
+ "expression": "session_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_session_id_prefix": {
+ "name": "idx_message_request_session_id_prefix",
+ "columns": [
+ {
+ "expression": "\"session_id\" varchar_pattern_ops",
+ "asc": true,
+ "isExpression": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_session_seq": {
+ "name": "idx_message_request_session_seq",
+ "columns": [
+ {
+ "expression": "session_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "request_sequence",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_endpoint": {
+ "name": "idx_message_request_endpoint",
+ "columns": [
+ {
+ "expression": "endpoint",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_blocked_by": {
+ "name": "idx_message_request_blocked_by",
+ "columns": [
+ {
+ "expression": "blocked_by",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_provider_id": {
+ "name": "idx_message_request_provider_id",
+ "columns": [
+ {
+ "expression": "provider_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_user_id": {
+ "name": "idx_message_request_user_id",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key": {
+ "name": "idx_message_request_key",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_created_at_id": {
+ "name": "idx_message_request_key_created_at_id",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_model_active": {
+ "name": "idx_message_request_key_model_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "model",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"model\" IS NOT NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_endpoint_active": {
+ "name": "idx_message_request_key_endpoint_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "endpoint",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"endpoint\" IS NOT NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_created_at_id_active": {
+ "name": "idx_message_request_created_at_id_active",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_model_active": {
+ "name": "idx_message_request_model_active",
+ "columns": [
+ {
+ "expression": "model",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"model\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_status_code_active": {
+ "name": "idx_message_request_status_code_active",
+ "columns": [
+ {
+ "expression": "status_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND \"message_request\".\"status_code\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_created_at": {
+ "name": "idx_message_request_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_deleted_at": {
+ "name": "idx_message_request_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_last_active": {
+ "name": "idx_message_request_key_last_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_key_cost_active": {
+ "name": "idx_message_request_key_cost_active",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL AND (\"message_request\".\"blocked_by\" IS NULL OR \"message_request\".\"blocked_by\" <> 'warmup')",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_message_request_session_user_info": {
+ "name": "idx_message_request_session_user_info",
+ "columns": [
+ {
+ "expression": "session_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"message_request\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.model_prices": {
+ "name": "model_prices",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "model_name": {
+ "name": "model_name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "price_data": {
+ "name": "price_data",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "source": {
+ "name": "source",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'litellm'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_model_prices_latest": {
+ "name": "idx_model_prices_latest",
+ "columns": [
+ {
+ "expression": "model_name",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_model_prices_model_name": {
+ "name": "idx_model_prices_model_name",
+ "columns": [
+ {
+ "expression": "model_name",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_model_prices_created_at": {
+ "name": "idx_model_prices_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_model_prices_source": {
+ "name": "idx_model_prices_source",
+ "columns": [
+ {
+ "expression": "source",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.notification_settings": {
+ "name": "notification_settings",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "use_legacy_mode": {
+ "name": "use_legacy_mode",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "circuit_breaker_enabled": {
+ "name": "circuit_breaker_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "circuit_breaker_webhook": {
+ "name": "circuit_breaker_webhook",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_leaderboard_enabled": {
+ "name": "daily_leaderboard_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "daily_leaderboard_webhook": {
+ "name": "daily_leaderboard_webhook",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_leaderboard_time": {
+ "name": "daily_leaderboard_time",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'09:00'"
+ },
+ "daily_leaderboard_top_n": {
+ "name": "daily_leaderboard_top_n",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 5
+ },
+ "cost_alert_enabled": {
+ "name": "cost_alert_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "cost_alert_webhook": {
+ "name": "cost_alert_webhook",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cost_alert_threshold": {
+ "name": "cost_alert_threshold",
+ "type": "numeric(5, 2)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.80'"
+ },
+ "cost_alert_check_interval": {
+ "name": "cost_alert_check_interval",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 60
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.notification_target_bindings": {
+ "name": "notification_target_bindings",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "notification_type": {
+ "name": "notification_type",
+ "type": "notification_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_id": {
+ "name": "target_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "schedule_cron": {
+ "name": "schedule_cron",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "schedule_timezone": {
+ "name": "schedule_timezone",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "template_override": {
+ "name": "template_override",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "unique_notification_target_binding": {
+ "name": "unique_notification_target_binding",
+ "columns": [
+ {
+ "expression": "notification_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "target_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_notification_bindings_type": {
+ "name": "idx_notification_bindings_type",
+ "columns": [
+ {
+ "expression": "notification_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_notification_bindings_target": {
+ "name": "idx_notification_bindings_target",
+ "columns": [
+ {
+ "expression": "target_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "notification_target_bindings_target_id_webhook_targets_id_fk": {
+ "name": "notification_target_bindings_target_id_webhook_targets_id_fk",
+ "tableFrom": "notification_target_bindings",
+ "tableTo": "webhook_targets",
+ "columnsFrom": [
+ "target_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.provider_endpoint_probe_logs": {
+ "name": "provider_endpoint_probe_logs",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "endpoint_id": {
+ "name": "endpoint_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "source": {
+ "name": "source",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'scheduled'"
+ },
+ "ok": {
+ "name": "ok",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status_code": {
+ "name": "status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "latency_ms": {
+ "name": "latency_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_type": {
+ "name": "error_type",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_message": {
+ "name": "error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_provider_endpoint_probe_logs_endpoint_created_at": {
+ "name": "idx_provider_endpoint_probe_logs_endpoint_created_at",
+ "columns": [
+ {
+ "expression": "endpoint_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoint_probe_logs_created_at": {
+ "name": "idx_provider_endpoint_probe_logs_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "provider_endpoint_probe_logs_endpoint_id_provider_endpoints_id_fk": {
+ "name": "provider_endpoint_probe_logs_endpoint_id_provider_endpoints_id_fk",
+ "tableFrom": "provider_endpoint_probe_logs",
+ "tableTo": "provider_endpoints",
+ "columnsFrom": [
+ "endpoint_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.provider_endpoints": {
+ "name": "provider_endpoints",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "vendor_id": {
+ "name": "vendor_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_type": {
+ "name": "provider_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'claude'"
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "last_probed_at": {
+ "name": "last_probed_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_ok": {
+ "name": "last_probe_ok",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_status_code": {
+ "name": "last_probe_status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_latency_ms": {
+ "name": "last_probe_latency_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_error_type": {
+ "name": "last_probe_error_type",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_probe_error_message": {
+ "name": "last_probe_error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "uniq_provider_endpoints_vendor_type_url": {
+ "name": "uniq_provider_endpoints_vendor_type_url",
+ "columns": [
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "url",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_vendor_type": {
+ "name": "idx_provider_endpoints_vendor_type",
+ "columns": [
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_enabled": {
+ "name": "idx_provider_endpoints_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_pick_enabled": {
+ "name": "idx_provider_endpoints_pick_enabled",
+ "columns": [
+ {
+ "expression": "vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"provider_endpoints\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_created_at": {
+ "name": "idx_provider_endpoints_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_endpoints_deleted_at": {
+ "name": "idx_provider_endpoints_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "provider_endpoints_vendor_id_provider_vendors_id_fk": {
+ "name": "provider_endpoints_vendor_id_provider_vendors_id_fk",
+ "tableFrom": "provider_endpoints",
+ "tableTo": "provider_vendors",
+ "columnsFrom": [
+ "vendor_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.provider_vendors": {
+ "name": "provider_vendors",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "website_domain": {
+ "name": "website_domain",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "display_name": {
+ "name": "display_name",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "website_url": {
+ "name": "website_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "favicon_url": {
+ "name": "favicon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "uniq_provider_vendors_website_domain": {
+ "name": "uniq_provider_vendors_website_domain",
+ "columns": [
+ {
+ "expression": "website_domain",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_provider_vendors_created_at": {
+ "name": "idx_provider_vendors_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.providers": {
+ "name": "providers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_vendor_id": {
+ "name": "provider_vendor_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "weight": {
+ "name": "weight",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 1
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "group_priorities": {
+ "name": "group_priorities",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'null'::jsonb"
+ },
+ "cost_multiplier": {
+ "name": "cost_multiplier",
+ "type": "numeric(10, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'1.0'"
+ },
+ "group_tag": {
+ "name": "group_tag",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "provider_type": {
+ "name": "provider_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'claude'"
+ },
+ "preserve_client_ip": {
+ "name": "preserve_client_ip",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "model_redirects": {
+ "name": "model_redirects",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "allowed_models": {
+ "name": "allowed_models",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'null'::jsonb"
+ },
+ "allowed_clients": {
+ "name": "allowed_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'::jsonb"
+ },
+ "blocked_clients": {
+ "name": "blocked_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'::jsonb"
+ },
+ "join_claude_pool": {
+ "name": "join_claude_pool",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "codex_instructions_strategy": {
+ "name": "codex_instructions_strategy",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'auto'"
+ },
+ "mcp_passthrough_type": {
+ "name": "mcp_passthrough_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "mcp_passthrough_url": {
+ "name": "mcp_passthrough_url",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_5h_usd": {
+ "name": "limit_5h_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_daily_usd": {
+ "name": "limit_daily_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "type": "daily_reset_mode",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'fixed'"
+ },
+ "daily_reset_time": {
+ "name": "daily_reset_time",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'00:00'"
+ },
+ "limit_weekly_usd": {
+ "name": "limit_weekly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_monthly_usd": {
+ "name": "limit_monthly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_total_usd": {
+ "name": "limit_total_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "total_cost_reset_at": {
+ "name": "total_cost_reset_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_concurrent_sessions": {
+ "name": "limit_concurrent_sessions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "max_retry_attempts": {
+ "name": "max_retry_attempts",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "circuit_breaker_failure_threshold": {
+ "name": "circuit_breaker_failure_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 5
+ },
+ "circuit_breaker_open_duration": {
+ "name": "circuit_breaker_open_duration",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 1800000
+ },
+ "circuit_breaker_half_open_success_threshold": {
+ "name": "circuit_breaker_half_open_success_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 2
+ },
+ "proxy_url": {
+ "name": "proxy_url",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "proxy_fallback_to_direct": {
+ "name": "proxy_fallback_to_direct",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "first_byte_timeout_streaming_ms": {
+ "name": "first_byte_timeout_streaming_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "streaming_idle_timeout_ms": {
+ "name": "streaming_idle_timeout_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "request_timeout_non_streaming_ms": {
+ "name": "request_timeout_non_streaming_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "website_url": {
+ "name": "website_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "favicon_url": {
+ "name": "favicon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_ttl_preference": {
+ "name": "cache_ttl_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "swap_cache_ttl_billing": {
+ "name": "swap_cache_ttl_billing",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "context_1m_preference": {
+ "name": "context_1m_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_reasoning_effort_preference": {
+ "name": "codex_reasoning_effort_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_reasoning_summary_preference": {
+ "name": "codex_reasoning_summary_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_text_verbosity_preference": {
+ "name": "codex_text_verbosity_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "codex_parallel_tool_calls_preference": {
+ "name": "codex_parallel_tool_calls_preference",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "anthropic_max_tokens_preference": {
+ "name": "anthropic_max_tokens_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "anthropic_thinking_budget_preference": {
+ "name": "anthropic_thinking_budget_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "anthropic_adaptive_thinking": {
+ "name": "anthropic_adaptive_thinking",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'null'::jsonb"
+ },
+ "gemini_google_search_preference": {
+ "name": "gemini_google_search_preference",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "tpm": {
+ "name": "tpm",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "rpm": {
+ "name": "rpm",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "rpd": {
+ "name": "rpd",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "cc": {
+ "name": "cc",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_providers_enabled_priority": {
+ "name": "idx_providers_enabled_priority",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "priority",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "weight",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_group": {
+ "name": "idx_providers_group",
+ "columns": [
+ {
+ "expression": "group_tag",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_vendor_type_url_active": {
+ "name": "idx_providers_vendor_type_url_active",
+ "columns": [
+ {
+ "expression": "provider_vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "url",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_created_at": {
+ "name": "idx_providers_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_deleted_at": {
+ "name": "idx_providers_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_vendor_type": {
+ "name": "idx_providers_vendor_type",
+ "columns": [
+ {
+ "expression": "provider_vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_providers_enabled_vendor_type": {
+ "name": "idx_providers_enabled_vendor_type",
+ "columns": [
+ {
+ "expression": "provider_vendor_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "provider_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"providers\".\"deleted_at\" IS NULL AND \"providers\".\"is_enabled\" = true AND \"providers\".\"provider_vendor_id\" IS NOT NULL AND \"providers\".\"provider_vendor_id\" > 0",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "providers_provider_vendor_id_provider_vendors_id_fk": {
+ "name": "providers_provider_vendor_id_provider_vendors_id_fk",
+ "tableFrom": "providers",
+ "tableTo": "provider_vendors",
+ "columnsFrom": [
+ "provider_vendor_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.request_filters": {
+ "name": "request_filters",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action": {
+ "name": "action",
+ "type": "varchar(30)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "match_type": {
+ "name": "match_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target": {
+ "name": "target",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "replacement": {
+ "name": "replacement",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "binding_type": {
+ "name": "binding_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'global'"
+ },
+ "provider_ids": {
+ "name": "provider_ids",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "group_tags": {
+ "name": "group_tags",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_request_filters_enabled": {
+ "name": "idx_request_filters_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "priority",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_request_filters_scope": {
+ "name": "idx_request_filters_scope",
+ "columns": [
+ {
+ "expression": "scope",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_request_filters_action": {
+ "name": "idx_request_filters_action",
+ "columns": [
+ {
+ "expression": "action",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_request_filters_binding": {
+ "name": "idx_request_filters_binding",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "binding_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.sensitive_words": {
+ "name": "sensitive_words",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "word": {
+ "name": "word",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "match_type": {
+ "name": "match_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'contains'"
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "idx_sensitive_words_enabled": {
+ "name": "idx_sensitive_words_enabled",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "match_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_sensitive_words_created_at": {
+ "name": "idx_sensitive_words_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.system_settings": {
+ "name": "system_settings",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "site_title": {
+ "name": "site_title",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'Claude Code Hub'"
+ },
+ "allow_global_usage_view": {
+ "name": "allow_global_usage_view",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "currency_display": {
+ "name": "currency_display",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'USD'"
+ },
+ "billing_model_source": {
+ "name": "billing_model_source",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'original'"
+ },
+ "timezone": {
+ "name": "timezone",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "enable_auto_cleanup": {
+ "name": "enable_auto_cleanup",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "cleanup_retention_days": {
+ "name": "cleanup_retention_days",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 30
+ },
+ "cleanup_schedule": {
+ "name": "cleanup_schedule",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0 2 * * *'"
+ },
+ "cleanup_batch_size": {
+ "name": "cleanup_batch_size",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 10000
+ },
+ "enable_client_version_check": {
+ "name": "enable_client_version_check",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "verbose_provider_error": {
+ "name": "verbose_provider_error",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "enable_http2": {
+ "name": "enable_http2",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "intercept_anthropic_warmup_requests": {
+ "name": "intercept_anthropic_warmup_requests",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "enable_thinking_signature_rectifier": {
+ "name": "enable_thinking_signature_rectifier",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_thinking_budget_rectifier": {
+ "name": "enable_thinking_budget_rectifier",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_billing_header_rectifier": {
+ "name": "enable_billing_header_rectifier",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_codex_session_id_completion": {
+ "name": "enable_codex_session_id_completion",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_claude_metadata_user_id_injection": {
+ "name": "enable_claude_metadata_user_id_injection",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "enable_response_fixer": {
+ "name": "enable_response_fixer",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "response_fixer_config": {
+ "name": "response_fixer_config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'{\"fixTruncatedJson\":true,\"fixSseFormat\":true,\"fixEncoding\":true,\"maxJsonDepth\":200,\"maxFixSize\":1048576}'::jsonb"
+ },
+ "quota_db_refresh_interval_seconds": {
+ "name": "quota_db_refresh_interval_seconds",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 10
+ },
+ "quota_lease_percent_5h": {
+ "name": "quota_lease_percent_5h",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_percent_daily": {
+ "name": "quota_lease_percent_daily",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_percent_weekly": {
+ "name": "quota_lease_percent_weekly",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_percent_monthly": {
+ "name": "quota_lease_percent_monthly",
+ "type": "numeric(5, 4)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0.05'"
+ },
+ "quota_lease_cap_usd": {
+ "name": "quota_lease_cap_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.usage_ledger": {
+ "name": "usage_ledger",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "request_id": {
+ "name": "request_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "final_provider_id": {
+ "name": "final_provider_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "model": {
+ "name": "model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "original_model": {
+ "name": "original_model",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "endpoint": {
+ "name": "endpoint",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "api_type": {
+ "name": "api_type",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "session_id": {
+ "name": "session_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status_code": {
+ "name": "status_code",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_success": {
+ "name": "is_success",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "blocked_by": {
+ "name": "blocked_by",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cost_usd": {
+ "name": "cost_usd",
+ "type": "numeric(21, 15)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'0'"
+ },
+ "cost_multiplier": {
+ "name": "cost_multiplier",
+ "type": "numeric(10, 4)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "input_tokens": {
+ "name": "input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "output_tokens": {
+ "name": "output_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_input_tokens": {
+ "name": "cache_creation_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_read_input_tokens": {
+ "name": "cache_read_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_5m_input_tokens": {
+ "name": "cache_creation_5m_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_creation_1h_input_tokens": {
+ "name": "cache_creation_1h_input_tokens",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cache_ttl_applied": {
+ "name": "cache_ttl_applied",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "context_1m_applied": {
+ "name": "context_1m_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "swap_cache_ttl_applied": {
+ "name": "swap_cache_ttl_applied",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "duration_ms": {
+ "name": "duration_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "ttfb_ms": {
+ "name": "ttfb_ms",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "idx_usage_ledger_request_id": {
+ "name": "idx_usage_ledger_request_id",
+ "columns": [
+ {
+ "expression": "request_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_user_created_at": {
+ "name": "idx_usage_ledger_user_created_at",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_key_created_at": {
+ "name": "idx_usage_ledger_key_created_at",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_provider_created_at": {
+ "name": "idx_usage_ledger_provider_created_at",
+ "columns": [
+ {
+ "expression": "final_provider_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_created_at_minute": {
+ "name": "idx_usage_ledger_created_at_minute",
+ "columns": [
+ {
+ "expression": "date_trunc('minute', \"created_at\" AT TIME ZONE 'UTC')",
+ "asc": true,
+ "isExpression": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_created_at_desc_id": {
+ "name": "idx_usage_ledger_created_at_desc_id",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": false,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_session_id": {
+ "name": "idx_usage_ledger_session_id",
+ "columns": [
+ {
+ "expression": "session_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"session_id\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_model": {
+ "name": "idx_usage_ledger_model",
+ "columns": [
+ {
+ "expression": "model",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"model\" IS NOT NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_key_cost": {
+ "name": "idx_usage_ledger_key_cost",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_user_cost_cover": {
+ "name": "idx_usage_ledger_user_cost_cover",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_usage_ledger_provider_cost_cover": {
+ "name": "idx_usage_ledger_provider_cost_cover",
+ "columns": [
+ {
+ "expression": "final_provider_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "cost_usd",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"usage_ledger\".\"blocked_by\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "role": {
+ "name": "role",
+ "type": "varchar",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'user'"
+ },
+ "rpm_limit": {
+ "name": "rpm_limit",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_limit_usd": {
+ "name": "daily_limit_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "provider_group": {
+ "name": "provider_group",
+ "type": "varchar(200)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'default'"
+ },
+ "tags": {
+ "name": "tags",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'[]'::jsonb"
+ },
+ "limit_5h_usd": {
+ "name": "limit_5h_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_weekly_usd": {
+ "name": "limit_weekly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_monthly_usd": {
+ "name": "limit_monthly_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_total_usd": {
+ "name": "limit_total_usd",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "limit_concurrent_sessions": {
+ "name": "limit_concurrent_sessions",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "type": "daily_reset_mode",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'fixed'"
+ },
+ "daily_reset_time": {
+ "name": "daily_reset_time",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'00:00'"
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "allowed_clients": {
+ "name": "allowed_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'[]'::jsonb"
+ },
+ "allowed_models": {
+ "name": "allowed_models",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'[]'::jsonb"
+ },
+ "blocked_clients": {
+ "name": "blocked_clients",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'::jsonb"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "idx_users_active_role_sort": {
+ "name": "idx_users_active_role_sort",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "role",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"users\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_users_enabled_expires_at": {
+ "name": "idx_users_enabled_expires_at",
+ "columns": [
+ {
+ "expression": "is_enabled",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "expires_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"users\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_users_tags_gin": {
+ "name": "idx_users_tags_gin",
+ "columns": [
+ {
+ "expression": "tags",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"users\".\"deleted_at\" IS NULL",
+ "concurrently": false,
+ "method": "gin",
+ "with": {}
+ },
+ "idx_users_created_at": {
+ "name": "idx_users_created_at",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "idx_users_deleted_at": {
+ "name": "idx_users_deleted_at",
+ "columns": [
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.webhook_targets": {
+ "name": "webhook_targets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "serial",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_type": {
+ "name": "provider_type",
+ "type": "webhook_provider_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "webhook_url": {
+ "name": "webhook_url",
+ "type": "varchar(1024)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "telegram_bot_token": {
+ "name": "telegram_bot_token",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "telegram_chat_id": {
+ "name": "telegram_chat_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "dingtalk_secret": {
+ "name": "dingtalk_secret",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "custom_template": {
+ "name": "custom_template",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "custom_headers": {
+ "name": "custom_headers",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "proxy_url": {
+ "name": "proxy_url",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "proxy_fallback_to_direct": {
+ "name": "proxy_fallback_to_direct",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false,
+ "default": false
+ },
+ "is_enabled": {
+ "name": "is_enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "last_test_at": {
+ "name": "last_test_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_test_result": {
+ "name": "last_test_result",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.daily_reset_mode": {
+ "name": "daily_reset_mode",
+ "schema": "public",
+ "values": [
+ "fixed",
+ "rolling"
+ ]
+ },
+ "public.notification_type": {
+ "name": "notification_type",
+ "schema": "public",
+ "values": [
+ "circuit_breaker",
+ "daily_leaderboard",
+ "cost_alert"
+ ]
+ },
+ "public.webhook_provider_type": {
+ "name": "webhook_provider_type",
+ "schema": "public",
+ "values": [
+ "wechat",
+ "feishu",
+ "dingtalk",
+ "telegram",
+ "custom"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json
index 4540079c8..e477b9578 100644
--- a/drizzle/meta/_journal.json
+++ b/drizzle/meta/_journal.json
@@ -519,6 +519,20 @@
"when": 1771527016184,
"tag": "0073_magical_manta",
"breakpoints": true
+ },
+ {
+ "idx": 74,
+ "version": "7",
+ "when": 1771600203231,
+ "tag": "0074_wide_retro_girl",
+ "breakpoints": true
+ },
+ {
+ "idx": 75,
+ "version": "7",
+ "when": 1771688588623,
+ "tag": "0075_faithful_speed_demon",
+ "breakpoints": true
}
]
}
\ No newline at end of file
diff --git a/messages/en/dashboard.json b/messages/en/dashboard.json
index 1b21eca95..084d29071 100644
--- a/messages/en/dashboard.json
+++ b/messages/en/dashboard.json
@@ -1824,7 +1824,15 @@
"label": "Client Restrictions",
"description": "Restrict which CLI/IDE clients can use this account. Empty = no restriction.",
"customLabel": "Custom Client Pattern",
- "customPlaceholder": "Enter pattern (e.g., 'xcode', 'my-ide')"
+ "customPlaceholder": "Enter pattern (e.g., 'xcode', 'my-ide')",
+ "customHelp": "Custom patterns match User-Agent by case-insensitive substring. '-' and '_' are treated as equivalent."
+ },
+ "blockedClients": {
+ "label": "Blocked Clients",
+ "description": "Clients matching these patterns will be rejected, even if they match allowed clients.",
+ "customLabel": "Custom Block Pattern",
+ "customPlaceholder": "Enter pattern (e.g., 'xcode', 'my-ide')",
+ "customHelp": "Custom patterns match User-Agent by case-insensitive substring. '-' and '_' are treated as equivalent."
},
"allowedModels": {
"label": "Model Restrictions",
@@ -1845,11 +1853,22 @@
"processing": "Processing..."
}
},
+ "actions": {
+ "allow": "Allow",
+ "block": "Block"
+ },
"presetClients": {
"claude-cli": "Claude Code CLI",
"gemini-cli": "Gemini CLI",
"factory-cli": "Droid CLI",
- "codex-cli": "Codex CLI"
+ "codex-cli": "Codex CLI",
+ "claude-code": "Claude Code (all)",
+ "claude-code-cli": "Claude Code CLI (builtin)",
+ "claude-code-cli-sdk": "Claude Code CLI SDK",
+ "claude-code-vscode": "Claude Code VSCode",
+ "claude-code-sdk-ts": "Claude Code SDK (TypeScript)",
+ "claude-code-sdk-py": "Claude Code SDK (Python)",
+ "claude-code-gh-action": "Claude Code GitHub Action"
}
},
"keyEditSection": {
diff --git a/messages/en/provider-chain.json b/messages/en/provider-chain.json
index ba9d4c47f..67ba8dd64 100644
--- a/messages/en/provider-chain.json
+++ b/messages/en/provider-chain.json
@@ -55,7 +55,8 @@
"session_reuse": "Session Reuse",
"initial_selection": "Initial Selection",
"endpoint_pool_exhausted": "Endpoint Pool Exhausted",
- "vendor_type_all_timeout": "Vendor-Type All Endpoints Timeout"
+ "vendor_type_all_timeout": "Vendor-Type All Endpoints Timeout",
+ "client_restriction_filtered": "Client Restricted"
},
"filterReasons": {
"rate_limited": "Rate Limited",
@@ -70,13 +71,21 @@
"group_mismatch": "Group Mismatch",
"health_check_failed": "Health Check Failed",
"endpoint_circuit_open": "Endpoint Circuit Open",
- "endpoint_disabled": "Endpoint Disabled"
+ "endpoint_disabled": "Endpoint Disabled",
+ "client_restriction": "Client Restriction"
},
"filterDetails": {
"vendor_type_circuit_open": "Vendor-type temporarily circuit-broken",
"circuit_open": "Circuit breaker open",
"circuit_half_open": "Circuit breaker half-open",
- "rate_limited": "Rate limited"
+ "rate_limited": "Rate limited",
+ "provider_client_restriction": "Provider skipped due to client restriction",
+ "session_reuse_client_restriction": "Session reuse rejected: client restriction",
+ "blocklist_hit": "Blocked by pattern: {pattern}",
+ "allowlist_miss": "Not in allowed list",
+ "detectedClient": "Detected: {client}",
+ "providerAllowlist": "Allowlist: {list}",
+ "providerBlocklist": "Blocklist: {list}"
},
"details": {
"selectionMethod": "Selection",
diff --git a/messages/en/settings/providers/form/sections.json b/messages/en/settings/providers/form/sections.json
index 135d192bc..315d2b860 100644
--- a/messages/en/settings/providers/form/sections.json
+++ b/messages/en/settings/providers/form/sections.json
@@ -305,6 +305,25 @@
"selectedOnly": "Only the selected {count} models are allowed. Other models will not be routed to this provider.",
"title": "Model Allowlist"
},
+ "clientRestrictions": {
+ "allowedLabel": "Allowed Clients",
+ "allowedPlaceholder": "e.g. claude-code-cli",
+ "blockedLabel": "Blocked Clients",
+ "blockedPlaceholder": "e.g. gemini-cli",
+ "allowAction": "Allow",
+ "blockAction": "Block",
+ "customAllowedLabel": "Custom Allowed Patterns",
+ "customAllowedPlaceholder": "e.g. my-ide, internal-tool",
+ "customBlockedLabel": "Custom Blocked Patterns",
+ "customBlockedPlaceholder": "e.g. legacy-client",
+ "customHelp": "Custom patterns use case-insensitive User-Agent contains matching. '-' and '_' are treated as equivalent.",
+ "presetClients": {
+ "claude-code": "Claude Code (all)",
+ "gemini-cli": "Gemini CLI",
+ "factory-cli": "Droid CLI",
+ "codex-cli": "Codex CLI"
+ }
+ },
"preserveClientIp": {
"desc": "Pass x-forwarded-for / x-real-ip to upstream providers (may expose real client IP)",
"help": "Keep off by default for privacy. Enable only when upstream must see the end-user IP.",
diff --git a/messages/ja/dashboard.json b/messages/ja/dashboard.json
index 795ecc363..d6776bb09 100644
--- a/messages/ja/dashboard.json
+++ b/messages/ja/dashboard.json
@@ -1760,7 +1760,15 @@
"label": "クライアント制限",
"description": "このアカウントを使用できるCLI/IDEクライアントを制限します。空欄は制限なし。",
"customLabel": "カスタムクライアントパターン",
- "customPlaceholder": "パターンを入力(例:'xcode', 'my-ide')"
+ "customPlaceholder": "パターンを入力(例:'xcode', 'my-ide')",
+ "customHelp": "カスタムパターンは User-Agent の部分一致で判定されます(大文字小文字を区別しません)。'-' と '_' は同等として扱います。"
+ },
+ "blockedClients": {
+ "label": "ブロックするクライアント",
+ "description": "これらのパターンに一致するクライアントは、許可リストに一致しても拒否されます。",
+ "customLabel": "カスタムブロックパターン",
+ "customPlaceholder": "パターンを入力(例: 'xcode'、'my-ide')",
+ "customHelp": "カスタムパターンは User-Agent の部分一致で判定されます(大文字小文字を区別しません)。'-' と '_' は同等として扱います。"
},
"allowedModels": {
"label": "モデル制限",
@@ -1781,11 +1789,22 @@
"processing": "処理中..."
}
},
+ "actions": {
+ "allow": "許可",
+ "block": "ブロック"
+ },
"presetClients": {
"claude-cli": "Claude Code CLI",
"gemini-cli": "Gemini CLI",
"factory-cli": "Droid CLI",
- "codex-cli": "Codex CLI"
+ "codex-cli": "Codex CLI",
+ "claude-code": "Claude Code (全て)",
+ "claude-code-cli": "Claude Code CLI (厳密検出)",
+ "claude-code-cli-sdk": "Claude Code CLI SDK",
+ "claude-code-vscode": "Claude Code VSCode",
+ "claude-code-sdk-ts": "Claude Code SDK (TypeScript)",
+ "claude-code-sdk-py": "Claude Code SDK (Python)",
+ "claude-code-gh-action": "Claude Code GitHub Action"
}
},
"keyEditSection": {
diff --git a/messages/ja/provider-chain.json b/messages/ja/provider-chain.json
index e8793c5fc..701a2a4b9 100644
--- a/messages/ja/provider-chain.json
+++ b/messages/ja/provider-chain.json
@@ -55,7 +55,8 @@
"session_reuse": "セッション再利用",
"initial_selection": "初期選択",
"endpoint_pool_exhausted": "エンドポイントプール枯渇",
- "vendor_type_all_timeout": "ベンダータイプ全エンドポイントタイムアウト"
+ "vendor_type_all_timeout": "ベンダータイプ全エンドポイントタイムアウト",
+ "client_restriction_filtered": "クライアント制限"
},
"filterReasons": {
"rate_limited": "レート制限",
@@ -70,13 +71,21 @@
"group_mismatch": "グループ不一致",
"health_check_failed": "ヘルスチェック失敗",
"endpoint_circuit_open": "エンドポイントサーキットオープン",
- "endpoint_disabled": "エンドポイント無効"
+ "endpoint_disabled": "エンドポイント無効",
+ "client_restriction": "クライアント制限"
},
"filterDetails": {
"vendor_type_circuit_open": "ベンダータイプ一時サーキットブレイク",
"circuit_open": "サーキットブレーカーオープン",
"circuit_half_open": "サーキットブレーカーハーフオープン",
- "rate_limited": "レート制限"
+ "rate_limited": "レート制限",
+ "provider_client_restriction": "クライアント制限によりプロバイダーをスキップ",
+ "session_reuse_client_restriction": "Session reuse rejected: client restriction",
+ "blocklist_hit": "Blocked by pattern: {pattern}",
+ "allowlist_miss": "Not in allowed list",
+ "detectedClient": "Detected: {client}",
+ "providerAllowlist": "Allowlist: {list}",
+ "providerBlocklist": "Blocklist: {list}"
},
"details": {
"selectionMethod": "選択方法",
diff --git a/messages/ja/settings/providers/form/sections.json b/messages/ja/settings/providers/form/sections.json
index 1356c87e4..d7d23a3c2 100644
--- a/messages/ja/settings/providers/form/sections.json
+++ b/messages/ja/settings/providers/form/sections.json
@@ -306,6 +306,25 @@
"selectedOnly": "選択した {count} 件のモデルのみ許可します。他のモデルはこのプロバイダーにルーティングされません。",
"title": "モデル許可リスト"
},
+ "clientRestrictions": {
+ "allowedLabel": "許可クライアント",
+ "allowedPlaceholder": "例: claude-code-cli",
+ "blockedLabel": "ブロッククライアント",
+ "blockedPlaceholder": "例: gemini-cli",
+ "allowAction": "許可",
+ "blockAction": "ブロック",
+ "customAllowedLabel": "カスタム許可パターン",
+ "customAllowedPlaceholder": "例: my-ide、internal-tool",
+ "customBlockedLabel": "カスタムブロックパターン",
+ "customBlockedPlaceholder": "例: legacy-client",
+ "customHelp": "カスタムパターンは User-Agent の部分一致で判定されます(大文字小文字を区別しません)。'-' と '_' は同等として扱います。",
+ "presetClients": {
+ "claude-code": "Claude Code(すべて)",
+ "gemini-cli": "Gemini CLI",
+ "factory-cli": "Droid CLI",
+ "codex-cli": "Codex CLI"
+ }
+ },
"preserveClientIp": {
"desc": "x-forwarded-for / x-real-ip を上流に渡します(実際の IP が露出する可能性)",
"help": "プライバシー保護のためデフォルトはオフ。上流側で端末 IP が必要な場合のみ有効化してください。",
diff --git a/messages/ru/dashboard.json b/messages/ru/dashboard.json
index 7634ae3fa..c98716709 100644
--- a/messages/ru/dashboard.json
+++ b/messages/ru/dashboard.json
@@ -1808,7 +1808,15 @@
"label": "Ограничения клиентов",
"description": "Ограничьте, какие CLI/IDE клиенты могут использовать эту учетную запись. Пусто = без ограничений.",
"customLabel": "Пользовательские шаблоны клиентов",
- "customPlaceholder": "Введите шаблон (например, 'xcode', 'my-ide')"
+ "customPlaceholder": "Введите шаблон (например, 'xcode', 'my-ide')",
+ "customHelp": "Пользовательские шаблоны проверяются по вхождению в User-Agent без учёта регистра. '-' и '_' считаются эквивалентными."
+ },
+ "blockedClients": {
+ "label": "Заблокированные клиенты",
+ "description": "Клиенты, соответствующие этим шаблонам, будут отклонены, даже если они соответствуют разрешённым.",
+ "customLabel": "Пользовательский шаблон блокировки",
+ "customPlaceholder": "Введите шаблон (например, 'xcode', 'my-ide')",
+ "customHelp": "Пользовательские шаблоны проверяются по вхождению в User-Agent без учёта регистра. '-' и '_' считаются эквивалентными."
},
"allowedModels": {
"label": "Ограничения моделей",
@@ -1829,11 +1837,22 @@
"processing": "Обработка..."
}
},
+ "actions": {
+ "allow": "Разрешить",
+ "block": "Блокировать"
+ },
"presetClients": {
"claude-cli": "Claude Code CLI",
"gemini-cli": "Gemini CLI",
"factory-cli": "Droid CLI",
- "codex-cli": "Codex CLI"
+ "codex-cli": "Codex CLI",
+ "claude-code": "Claude Code (все)",
+ "claude-code-cli": "Claude Code CLI (точное обнаружение)",
+ "claude-code-cli-sdk": "Claude Code CLI SDK",
+ "claude-code-vscode": "Claude Code VSCode",
+ "claude-code-sdk-ts": "Claude Code SDK (TypeScript)",
+ "claude-code-sdk-py": "Claude Code SDK (Python)",
+ "claude-code-gh-action": "Claude Code GitHub Action"
}
},
"keyEditSection": {
diff --git a/messages/ru/provider-chain.json b/messages/ru/provider-chain.json
index 0e86f022f..ebe5d8629 100644
--- a/messages/ru/provider-chain.json
+++ b/messages/ru/provider-chain.json
@@ -55,7 +55,8 @@
"session_reuse": "Повторное использование сессии",
"initial_selection": "Первоначальный выбор",
"endpoint_pool_exhausted": "Пул конечных точек исчерпан",
- "vendor_type_all_timeout": "Тайм-аут всех конечных точек типа поставщика"
+ "vendor_type_all_timeout": "Тайм-аут всех конечных точек типа поставщика",
+ "client_restriction_filtered": "Клиент ограничен"
},
"filterReasons": {
"rate_limited": "Ограничение скорости",
@@ -70,13 +71,21 @@
"group_mismatch": "Несоответствие группы",
"health_check_failed": "Проверка состояния не пройдена",
"endpoint_circuit_open": "Автомат конечной точки открыт",
- "endpoint_disabled": "Эндпоинт отключен"
+ "endpoint_disabled": "Эндпоинт отключен",
+ "client_restriction": "Ограничение клиента"
},
"filterDetails": {
"vendor_type_circuit_open": "Временное размыкание типа поставщика",
"circuit_open": "Размыкатель открыт",
"circuit_half_open": "Размыкатель полуоткрыт",
- "rate_limited": "Ограничение скорости"
+ "rate_limited": "Ограничение скорости",
+ "provider_client_restriction": "Провайдер пропущен из-за ограничения клиента",
+ "session_reuse_client_restriction": "Session reuse rejected: client restriction",
+ "blocklist_hit": "Blocked by pattern: {pattern}",
+ "allowlist_miss": "Not in allowed list",
+ "detectedClient": "Detected: {client}",
+ "providerAllowlist": "Allowlist: {list}",
+ "providerBlocklist": "Blocklist: {list}"
},
"details": {
"selectionMethod": "Метод выбора",
diff --git a/messages/ru/settings/providers/form/sections.json b/messages/ru/settings/providers/form/sections.json
index b59ec1a4f..aac6a6fea 100644
--- a/messages/ru/settings/providers/form/sections.json
+++ b/messages/ru/settings/providers/form/sections.json
@@ -306,6 +306,25 @@
"selectedOnly": "Разрешены только выбранные {count} моделей. Другие модели не будут направляться к этому провайдеру.",
"title": "Список разрешённых моделей"
},
+ "clientRestrictions": {
+ "allowedLabel": "Разрешённые клиенты",
+ "allowedPlaceholder": "напр. claude-code-cli",
+ "blockedLabel": "Заблокированные клиенты",
+ "blockedPlaceholder": "напр. gemini-cli",
+ "allowAction": "Разрешить",
+ "blockAction": "Блокировать",
+ "customAllowedLabel": "Пользовательские разрешённые шаблоны",
+ "customAllowedPlaceholder": "напр. my-ide, internal-tool",
+ "customBlockedLabel": "Пользовательские шаблоны блокировки",
+ "customBlockedPlaceholder": "напр. legacy-client",
+ "customHelp": "Пользовательские шаблоны проверяются по вхождению в User-Agent без учёта регистра. '-' и '_' считаются эквивалентными.",
+ "presetClients": {
+ "claude-code": "Claude Code (все)",
+ "gemini-cli": "Gemini CLI",
+ "factory-cli": "Droid CLI",
+ "codex-cli": "Codex CLI"
+ }
+ },
"preserveClientIp": {
"desc": "Передавать x-forwarded-for / x-real-ip в апстрим (может раскрыть реальный IP клиента)",
"help": "По умолчанию выключено для приватности. Включайте только если апстриму нужен IP пользователя.",
diff --git a/messages/zh-CN/dashboard.json b/messages/zh-CN/dashboard.json
index a641a3aca..740766f85 100644
--- a/messages/zh-CN/dashboard.json
+++ b/messages/zh-CN/dashboard.json
@@ -1783,7 +1783,15 @@
"label": "客户端限制",
"description": "限制哪些 CLI/IDE 客户端可以使用此账户。留空表示无限制。",
"customLabel": "自定义客户端模式",
- "customPlaceholder": "输入自定义模式(如:'xcode', 'my-ide')"
+ "customPlaceholder": "输入自定义模式(如:'xcode', 'my-ide')",
+ "customHelp": "自定义模式按 User-Agent 包含匹配(不区分大小写),并将 '-' 与 '_' 视为等价。"
+ },
+ "blockedClients": {
+ "label": "黑名单客户端",
+ "description": "匹配这些模式的客户端将被拒绝,即使它们也匹配白名单。",
+ "customLabel": "自定义黑名单模式",
+ "customPlaceholder": "输入模式(如 'xcode'、'my-ide')",
+ "customHelp": "自定义模式按 User-Agent 包含匹配(不区分大小写),并将 '-' 与 '_' 视为等价。"
},
"allowedModels": {
"label": "模型限制",
@@ -1804,11 +1812,22 @@
"processing": "处理中..."
}
},
+ "actions": {
+ "allow": "允许",
+ "block": "阻止"
+ },
"presetClients": {
"claude-cli": "Claude Code CLI",
"gemini-cli": "Gemini CLI",
"factory-cli": "Droid CLI",
- "codex-cli": "Codex CLI"
+ "codex-cli": "Codex CLI",
+ "claude-code": "Claude Code(全部)",
+ "claude-code-cli": "Claude Code CLI (精确检测)",
+ "claude-code-cli-sdk": "Claude Code CLI SDK",
+ "claude-code-vscode": "Claude Code VSCode",
+ "claude-code-sdk-ts": "Claude Code SDK(TypeScript)",
+ "claude-code-sdk-py": "Claude Code SDK(Python)",
+ "claude-code-gh-action": "Claude Code GitHub Action"
}
},
"keyEditSection": {
diff --git a/messages/zh-CN/provider-chain.json b/messages/zh-CN/provider-chain.json
index c1b287503..eecf293af 100644
--- a/messages/zh-CN/provider-chain.json
+++ b/messages/zh-CN/provider-chain.json
@@ -55,7 +55,8 @@
"session_reuse": "会话复用",
"initial_selection": "首次选择",
"endpoint_pool_exhausted": "端点池耗尽",
- "vendor_type_all_timeout": "供应商类型全端点超时"
+ "vendor_type_all_timeout": "供应商类型全端点超时",
+ "client_restriction_filtered": "客户端受限"
},
"filterReasons": {
"rate_limited": "速率限制",
@@ -70,13 +71,21 @@
"group_mismatch": "分组不匹配",
"health_check_failed": "健康检查失败",
"endpoint_circuit_open": "端点已熔断",
- "endpoint_disabled": "端点已禁用"
+ "endpoint_disabled": "端点已禁用",
+ "client_restriction": "客户端限制"
},
"filterDetails": {
"vendor_type_circuit_open": "供应商类型临时熔断",
"circuit_open": "熔断器打开",
"circuit_half_open": "熔断器半开",
- "rate_limited": "速率限制"
+ "rate_limited": "速率限制",
+ "provider_client_restriction": "供应商因客户端限制被跳过",
+ "session_reuse_client_restriction": "Session reuse rejected: client restriction",
+ "blocklist_hit": "Blocked by pattern: {pattern}",
+ "allowlist_miss": "Not in allowed list",
+ "detectedClient": "Detected: {client}",
+ "providerAllowlist": "Allowlist: {list}",
+ "providerBlocklist": "Blocklist: {list}"
},
"details": {
"selectionMethod": "选择方式",
diff --git a/messages/zh-CN/settings/providers/form/sections.json b/messages/zh-CN/settings/providers/form/sections.json
index 3e54ef4ab..59ecf6d46 100644
--- a/messages/zh-CN/settings/providers/form/sections.json
+++ b/messages/zh-CN/settings/providers/form/sections.json
@@ -49,6 +49,25 @@
"selectedOnly": "仅允许选中的 {count} 个模型。其他模型的请求不会调度到此供应商。",
"moreModels": "+{count} 更多"
},
+ "clientRestrictions": {
+ "allowedLabel": "白名单客户端",
+ "allowedPlaceholder": "例如 claude-code-cli",
+ "blockedLabel": "黑名单客户端",
+ "blockedPlaceholder": "例如 gemini-cli",
+ "allowAction": "允许",
+ "blockAction": "阻止",
+ "customAllowedLabel": "自定义白名单模式",
+ "customAllowedPlaceholder": "例如 my-ide、internal-tool",
+ "customBlockedLabel": "自定义黑名单模式",
+ "customBlockedPlaceholder": "例如 legacy-client",
+ "customHelp": "自定义模式使用 User-Agent 包含匹配(不区分大小写),并将 '-' 与 '_' 视为等价。",
+ "presetClients": {
+ "claude-code": "Claude Code(全部)",
+ "gemini-cli": "Gemini CLI",
+ "factory-cli": "Droid CLI",
+ "codex-cli": "Codex CLI"
+ }
+ },
"scheduleParams": {
"title": "调度参数",
"priority": {
diff --git a/messages/zh-TW/dashboard.json b/messages/zh-TW/dashboard.json
index eabcac79d..96e47b627 100644
--- a/messages/zh-TW/dashboard.json
+++ b/messages/zh-TW/dashboard.json
@@ -1768,7 +1768,15 @@
"label": "用戶端限制",
"description": "限制哪些 CLI/IDE 用戶端可以使用此帳戶。留空表示無限制。",
"customLabel": "自訂用戶端模式",
- "customPlaceholder": "輸入自訂模式(如:'xcode', 'my-ide')"
+ "customPlaceholder": "輸入自訂模式(如:'xcode', 'my-ide')",
+ "customHelp": "自訂模式會以 User-Agent 包含比對(不區分大小寫),並將 '-' 與 '_' 視為等價。"
+ },
+ "blockedClients": {
+ "label": "黑名單客戶端",
+ "description": "符合這些模式的客戶端將被拒絕,即使它們也符合白名單。",
+ "customLabel": "自訂黑名單模式",
+ "customPlaceholder": "輸入模式(如 'xcode'、'my-ide')",
+ "customHelp": "自訂模式會以 User-Agent 包含比對(不區分大小寫),並將 '-' 與 '_' 視為等價。"
},
"allowedModels": {
"label": "Model 限制",
@@ -1789,11 +1797,22 @@
"processing": "處理中..."
}
},
+ "actions": {
+ "allow": "允許",
+ "block": "封鎖"
+ },
"presetClients": {
"claude-cli": "Claude Code CLI",
"gemini-cli": "Gemini CLI",
"factory-cli": "Droid CLI",
- "codex-cli": "Codex CLI"
+ "codex-cli": "Codex CLI",
+ "claude-code": "Claude Code(全部)",
+ "claude-code-cli": "Claude Code CLI (精確檢測)",
+ "claude-code-cli-sdk": "Claude Code CLI SDK",
+ "claude-code-vscode": "Claude Code VSCode",
+ "claude-code-sdk-ts": "Claude Code SDK(TypeScript)",
+ "claude-code-sdk-py": "Claude Code SDK(Python)",
+ "claude-code-gh-action": "Claude Code GitHub Action"
}
},
"keyEditSection": {
diff --git a/messages/zh-TW/provider-chain.json b/messages/zh-TW/provider-chain.json
index 847d0bbd5..9ce531b7e 100644
--- a/messages/zh-TW/provider-chain.json
+++ b/messages/zh-TW/provider-chain.json
@@ -55,7 +55,8 @@
"session_reuse": "會話複用",
"initial_selection": "首次選擇",
"endpoint_pool_exhausted": "端點池耗盡",
- "vendor_type_all_timeout": "供應商類型全端點逾時"
+ "vendor_type_all_timeout": "供應商類型全端點逾時",
+ "client_restriction_filtered": "客戶端受限"
},
"filterReasons": {
"rate_limited": "速率限制",
@@ -70,13 +71,21 @@
"group_mismatch": "分組不匹配",
"health_check_failed": "健康檢查失敗",
"endpoint_circuit_open": "端點已熔斷",
- "endpoint_disabled": "端點已停用"
+ "endpoint_disabled": "端點已停用",
+ "client_restriction": "客戶端限制"
},
"filterDetails": {
"vendor_type_circuit_open": "供應商類型臨時熔斷",
"circuit_open": "熔斷器打開",
"circuit_half_open": "熔斷器半開",
- "rate_limited": "速率限制"
+ "rate_limited": "速率限制",
+ "provider_client_restriction": "供應商因客戶端限制被跳過",
+ "session_reuse_client_restriction": "Session reuse rejected: client restriction",
+ "blocklist_hit": "Blocked by pattern: {pattern}",
+ "allowlist_miss": "Not in allowed list",
+ "detectedClient": "Detected: {client}",
+ "providerAllowlist": "Allowlist: {list}",
+ "providerBlocklist": "Blocklist: {list}"
},
"details": {
"selectionMethod": "選擇方式",
diff --git a/messages/zh-TW/settings/providers/form/sections.json b/messages/zh-TW/settings/providers/form/sections.json
index c007c3941..70cd5707e 100644
--- a/messages/zh-TW/settings/providers/form/sections.json
+++ b/messages/zh-TW/settings/providers/form/sections.json
@@ -306,6 +306,25 @@
"selectedOnly": "僅允許所選的 {count} 個模型。其他模型將不會被路由到此供應商。",
"title": "模型允許清單"
},
+ "clientRestrictions": {
+ "allowedLabel": "白名單客戶端",
+ "allowedPlaceholder": "例如 claude-code-cli",
+ "blockedLabel": "黑名單客戶端",
+ "blockedPlaceholder": "例如 gemini-cli",
+ "allowAction": "允許",
+ "blockAction": "封鎖",
+ "customAllowedLabel": "自訂白名單模式",
+ "customAllowedPlaceholder": "例如 my-ide、internal-tool",
+ "customBlockedLabel": "自訂黑名單模式",
+ "customBlockedPlaceholder": "例如 legacy-client",
+ "customHelp": "自訂模式使用 User-Agent 包含比對(不區分大小寫),並將 '-' 與 '_' 視為等價。",
+ "presetClients": {
+ "claude-code": "Claude Code(全部)",
+ "gemini-cli": "Gemini CLI",
+ "factory-cli": "Droid CLI",
+ "codex-cli": "Codex CLI"
+ }
+ },
"preserveClientIp": {
"desc": "向上游轉發 x-forwarded-for / x-real-ip,可能暴露真實來源 IP",
"help": "預設關閉以保護隱私;僅在需要上游感知終端 IP 時開啟。",
diff --git a/src/actions/providers.ts b/src/actions/providers.ts
index 181093158..a18e93980 100644
--- a/src/actions/providers.ts
+++ b/src/actions/providers.ts
@@ -273,6 +273,8 @@ export async function getProviders(): Promise
+ {translations.fields.allowedClients.label}
{translations.fields.allowedClients.description}
{tForm("allowedClients.description")}{translations.sections.accessRestrictions}
+ {translations.sections.accessRestrictions}
+ {t("sections.routing.clientRestrictions.customHelp")} +
++ {t("sections.routing.clientRestrictions.customHelp")} +
+