From 090cbd3219c8081f200d8165c2b03fbd3b14b3eb Mon Sep 17 00:00:00 2001 From: Misaka Worst Date: Tue, 17 Mar 2026 12:13:41 +0000 Subject: [PATCH 1/2] fix: exclude flagged providers from export and backup --- internal/domain/backup.go | 1 + internal/domain/model.go | 3 ++ internal/handler/admin_import_export_test.go | 11 ++--- internal/repository/sqlite/migrations.go | 11 ++++- internal/repository/sqlite/models.go | 1 + internal/repository/sqlite/provider.go | 2 + internal/service/admin.go | 10 ++++- internal/service/backup.go | 4 ++ tests/e2e/backup_test.go | 32 +++++++++++++++ web/src/lib/transport/types.ts | 1 + web/src/locales/en.json | 4 +- web/src/locales/zh.json | 4 +- .../components/antigravity-provider-view.tsx | 6 ++- .../components/antigravity-token-import.tsx | 1 + .../components/claude-provider-view.tsx | 3 +- .../components/claude-token-import.tsx | 1 + .../components/codex-provider-view.tsx | 12 ++++-- .../components/codex-token-import.tsx | 1 + .../components/custom-config-step.tsx | 40 ++++++++++++++----- .../components/kiro-provider-view.tsx | 3 +- .../components/kiro-token-import.tsx | 1 + .../components/provider-edit-flow.tsx | 2 + .../context/provider-form-context.tsx | 1 + web/src/pages/providers/types.ts | 1 + 24 files changed, 127 insertions(+), 29 deletions(-) diff --git a/internal/domain/backup.go b/internal/domain/backup.go index d889fca4..5ed0cc12 100644 --- a/internal/domain/backup.go +++ b/internal/domain/backup.go @@ -40,6 +40,7 @@ type BackupProvider struct { Config *ProviderConfig `json:"config,omitempty"` SupportedClientTypes []ClientType `json:"supportedClientTypes,omitempty"` SupportModels []string `json:"supportModels,omitempty"` + ExcludeFromExport bool `json:"excludeFromExport,omitempty"` } // BackupProject represents a project for backup (using slug as identifier) diff --git a/internal/domain/model.go b/internal/domain/model.go index 8fb25564..edb1b103 100644 --- a/internal/domain/model.go +++ b/internal/domain/model.go @@ -238,6 +238,9 @@ type Provider struct { // 如果配置了,在 Route 匹配时会检查前置映射后的模型是否在支持列表中 // 空数组表示支持所有模型 SupportModels []string `json:"supportModels,omitempty"` + + // 为 true 时,该 provider 不参与导出/备份 + ExcludeFromExport bool `json:"excludeFromExport,omitempty"` } type Project struct { diff --git a/internal/handler/admin_import_export_test.go b/internal/handler/admin_import_export_test.go index a27254b8..81cacca6 100644 --- a/internal/handler/admin_import_export_test.go +++ b/internal/handler/admin_import_export_test.go @@ -123,9 +123,10 @@ func TestAdminHandler_ProvidersImport_WithTrailingSlash(t *testing.T) { func TestAdminHandler_ProvidersExport_WithTrailingSlash(t *testing.T) { providerRepo := &adminTestProviderRepo{ providers: []*domain.Provider{{ - ID: 1, - Name: "exported-provider", - Type: "custom", + ID: 1, + Name: "exported-provider", + Type: "custom", + ExcludeFromExport: true, }}, } h := newAdminHandlerForProviderImportExportTests(providerRepo) @@ -151,7 +152,7 @@ func TestAdminHandler_ProvidersExport_WithTrailingSlash(t *testing.T) { t.Fatalf("decode response: %v", err) } - if len(providers) != 1 || providers[0].Name != "exported-provider" { - t.Fatalf("providers = %+v, want one exported-provider", providers) + if len(providers) != 0 { + t.Fatalf("providers = %+v, want excluded providers to be omitted", providers) } } diff --git a/internal/repository/sqlite/migrations.go b/internal/repository/sqlite/migrations.go index 953d537e..6392d0c1 100644 --- a/internal/repository/sqlite/migrations.go +++ b/internal/repository/sqlite/migrations.go @@ -119,7 +119,7 @@ var migrations = []Migration{ // 2. Update all existing rows to belong to default tenant for _, table := range tenantScopedTables { - result := db.Exec("UPDATE "+table+" SET tenant_id = 1 WHERE tenant_id = 0 OR tenant_id IS NULL") + result := db.Exec("UPDATE " + table + " SET tenant_id = 1 WHERE tenant_id = 0 OR tenant_id IS NULL") if result.Error != nil { log.Printf("[Migration] Warning: Failed to update tenant_id for %s: %v", table, result.Error) // Continue with other tables @@ -207,6 +207,15 @@ var migrations = []Migration{ Down: func(db *gorm.DB) error { return nil }, + }, { + Version: 7, + Description: "Backfill providers.exclude_from_export defaults to 0", + Up: func(db *gorm.DB) error { + return db.Exec("UPDATE providers SET exclude_from_export = 0 WHERE exclude_from_export IS NULL").Error + }, + Down: func(db *gorm.DB) error { + return nil + }, }, } diff --git a/internal/repository/sqlite/models.go b/internal/repository/sqlite/models.go index 8e6aedef..02cc9932 100644 --- a/internal/repository/sqlite/models.go +++ b/internal/repository/sqlite/models.go @@ -95,6 +95,7 @@ type Provider struct { Config LongText SupportedClientTypes LongText SupportModels LongText + ExcludeFromExport int `gorm:"default:0"` } func (Provider) TableName() string { return "providers" } diff --git a/internal/repository/sqlite/provider.go b/internal/repository/sqlite/provider.go index 4f6727b1..d406a867 100644 --- a/internal/repository/sqlite/provider.go +++ b/internal/repository/sqlite/provider.go @@ -87,6 +87,7 @@ func (r *ProviderRepository) toModel(p *domain.Provider) *Provider { Config: LongText(toJSON(p.Config)), SupportedClientTypes: LongText(toJSON(p.SupportedClientTypes)), SupportModels: LongText(toJSON(p.SupportModels)), + ExcludeFromExport: boolToInt(p.ExcludeFromExport), } } @@ -104,5 +105,6 @@ func (r *ProviderRepository) toDomain(m *Provider) *domain.Provider { Config: fromJSON[*domain.ProviderConfig](string(m.Config)), SupportedClientTypes: fromJSON[[]domain.ClientType](string(m.SupportedClientTypes)), SupportModels: fromJSON[[]string](string(m.SupportModels)), + ExcludeFromExport: m.ExcludeFromExport != 0, } } diff --git a/internal/service/admin.go b/internal/service/admin.go index 9ac29a49..893bc34e 100644 --- a/internal/service/admin.go +++ b/internal/service/admin.go @@ -166,8 +166,14 @@ func (s *AdminService) ExportProviders(tenantID uint64) ([]*domain.Provider, err if err != nil { return nil, err } - // Return as-is, the handler will handle JSON serialization - return providers, nil + filtered := make([]*domain.Provider, 0, len(providers)) + for _, provider := range providers { + if provider.ExcludeFromExport { + continue + } + filtered = append(filtered, provider) + } + return filtered, nil } // ImportProviders imports providers from exported data diff --git a/internal/service/backup.go b/internal/service/backup.go index ff41475e..501444d5 100644 --- a/internal/service/backup.go +++ b/internal/service/backup.go @@ -108,6 +108,9 @@ func (s *BackupService) Export(tenantID uint64) (*domain.BackupFile, error) { return nil, fmt.Errorf("failed to export providers: %w", err) } for _, p := range providers { + if p.ExcludeFromExport { + continue + } providerIDToName[p.ID] = p.Name backup.Data.Providers = append(backup.Data.Providers, domain.BackupProvider{ Name: p.Name, @@ -116,6 +119,7 @@ func (s *BackupService) Export(tenantID uint64) (*domain.BackupFile, error) { Config: p.Config, SupportedClientTypes: p.SupportedClientTypes, SupportModels: p.SupportModels, + ExcludeFromExport: p.ExcludeFromExport, }) } diff --git a/tests/e2e/backup_test.go b/tests/e2e/backup_test.go index 5eceb13e..15f01f23 100644 --- a/tests/e2e/backup_test.go +++ b/tests/e2e/backup_test.go @@ -201,3 +201,35 @@ func TestBackupImport_SkipStrategy(t *testing.T) { t.Fatalf("Expected import with skip strategy to succeed, got %v", result["success"]) } } + +func TestBackupExport_ExcludedProviderIsOmitted(t *testing.T) { + env := NewTestEnv(t) + + provider := map[string]any{ + "name": "excluded-provider", + "type": "custom", + "excludeFromExport": true, + "config": map[string]any{ + "custom": map[string]any{ + "baseURL": "https://api.example.com", + "apiKey": "sk-hidden-key", + }, + }, + "supportedClientTypes": []string{"claude"}, + } + resp := env.AdminPost("/api/admin/providers", provider) + AssertStatus(t, resp, http.StatusCreated) + resp.Body.Close() + + resp = env.AdminGet("/api/admin/backup/export") + AssertStatus(t, resp, http.StatusOK) + + var backup map[string]any + DecodeJSON(t, resp, &backup) + + data := backup["data"].(map[string]any) + providers, _ := data["providers"].([]any) + if len(providers) != 0 { + t.Fatalf("expected excluded providers to be omitted from backup export, got %d entries", len(providers)) + } +} diff --git a/web/src/lib/transport/types.ts b/web/src/lib/transport/types.ts index 608231d4..578bbb34 100644 --- a/web/src/lib/transport/types.ts +++ b/web/src/lib/transport/types.ts @@ -100,6 +100,7 @@ export interface Provider { config: ProviderConfig | null; supportedClientTypes: ClientType[]; supportModels?: string[]; // 支持的模型列表(通配符模式),空数组表示支持所有模型 + excludeFromExport?: boolean; // 为 true 时不参与导出/备份 } // supportedClientTypes 可选,后端会根据 provider type 自动设置 diff --git a/web/src/locales/en.json b/web/src/locales/en.json index 258ce98e..a159cbe3 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -1218,7 +1218,9 @@ "endpointOverride": "Endpoint Override", "errorCooldownTitle": "3. Error Cooldown", "disableErrorCooldown": "Disable Error Cooldown", - "disableErrorCooldownDesc": "When enabled, errors won't trigger automatic cooldown. Manual freezes and explicit cooldown times still apply." + "disableErrorCooldownDesc": "When enabled, errors won't trigger automatic cooldown. Manual freezes and explicit cooldown times still apply.", + "excludeFromExport": "Exclude from export and backup", + "excludeFromExportDesc": "When enabled, this provider stays local to this system and will not be included in exported files or backup packages." }, "cooldown": { "title": "Cooldown Protection", diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json index ce56631b..2c5da93d 100644 --- a/web/src/locales/zh.json +++ b/web/src/locales/zh.json @@ -1218,7 +1218,9 @@ "endpointOverride": "端点覆盖", "errorCooldownTitle": "3. 错误冷冻", "disableErrorCooldown": "禁用错误冷冻", - "disableErrorCooldownDesc": "开启后,错误将不再触发自动冷冻;手动冷冻与上游明确冷冻时间仍会生效。" + "disableErrorCooldownDesc": "开启后,错误将不再触发自动冷冻;手动冷冻与上游明确冷冻时间仍会生效。", + "excludeFromExport": "从导出与备份中排除", + "excludeFromExportDesc": "开启后,该提供商仅保留在当前系统中,不会被写入导出文件或系统备份。" }, "cooldown": { "title": "冷却保护中", diff --git a/web/src/pages/providers/components/antigravity-provider-view.tsx b/web/src/pages/providers/components/antigravity-provider-view.tsx index 436d7e6c..d1715e94 100644 --- a/web/src/pages/providers/components/antigravity-provider-view.tsx +++ b/web/src/pages/providers/components/antigravity-provider-view.tsx @@ -305,7 +305,8 @@ export function AntigravityProviderView({ id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, antigravity: { ...antigravityConfig, @@ -329,7 +330,8 @@ export function AntigravityProviderView({ id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, disableErrorCooldown: checked, antigravity: { diff --git a/web/src/pages/providers/components/antigravity-token-import.tsx b/web/src/pages/providers/components/antigravity-token-import.tsx index 42526e77..43f36c17 100644 --- a/web/src/pages/providers/components/antigravity-token-import.tsx +++ b/web/src/pages/providers/components/antigravity-token-import.tsx @@ -174,6 +174,7 @@ export function AntigravityTokenImport() { const providerData: CreateProviderData = { type: 'antigravity', name: finalEmail || 'Antigravity Account', + excludeFromExport: false, config: { antigravity: { email: finalEmail, diff --git a/web/src/pages/providers/components/claude-provider-view.tsx b/web/src/pages/providers/components/claude-provider-view.tsx index 59209844..70f6afee 100644 --- a/web/src/pages/providers/components/claude-provider-view.tsx +++ b/web/src/pages/providers/components/claude-provider-view.tsx @@ -238,7 +238,8 @@ export function ClaudeProviderView({ provider, onDelete, onClose }: ClaudeProvid id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, disableErrorCooldown: checked, claude: config, diff --git a/web/src/pages/providers/components/claude-token-import.tsx b/web/src/pages/providers/components/claude-token-import.tsx index a4aff460..9f25b8a6 100644 --- a/web/src/pages/providers/components/claude-token-import.tsx +++ b/web/src/pages/providers/components/claude-token-import.tsx @@ -254,6 +254,7 @@ export function ClaudeTokenImport() { const providerData: CreateProviderData = { type: 'claude', name: oauthResult.email || 'Claude Account', + excludeFromExport: false, config: { claude: { email: oauthResult.email || '', diff --git a/web/src/pages/providers/components/codex-provider-view.tsx b/web/src/pages/providers/components/codex-provider-view.tsx index 7c74d679..9c8c26a5 100644 --- a/web/src/pages/providers/components/codex-provider-view.tsx +++ b/web/src/pages/providers/components/codex-provider-view.tsx @@ -385,7 +385,8 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, codex: { ...config, @@ -408,7 +409,8 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, disableErrorCooldown: checked, codex: { @@ -432,7 +434,8 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, codex: { ...config, @@ -455,7 +458,8 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, codex: { ...config, diff --git a/web/src/pages/providers/components/codex-token-import.tsx b/web/src/pages/providers/components/codex-token-import.tsx index 8047cf6e..704fb26c 100644 --- a/web/src/pages/providers/components/codex-token-import.tsx +++ b/web/src/pages/providers/components/codex-token-import.tsx @@ -236,6 +236,7 @@ export function CodexTokenImport() { const providerData: CreateProviderData = { type: 'codex', name: oauthResult.email || 'Codex Account', + excludeFromExport: false, config: { codex: { email: oauthResult.email || '', diff --git a/web/src/pages/providers/components/custom-config-step.tsx b/web/src/pages/providers/components/custom-config-step.tsx index 59f5d99c..82271c0d 100644 --- a/web/src/pages/providers/components/custom-config-step.tsx +++ b/web/src/pages/providers/components/custom-config-step.tsx @@ -80,6 +80,7 @@ export function CustomConfigStep() { }, }, supportedClientTypes, + excludeFromExport: !!formData.excludeFromExport, }; const provider = await createProvider.mutateAsync(data); @@ -224,19 +225,36 @@ export function CustomConfigStep() {

{t('provider.errorCooldownTitle')}

-
-
-
- {t('provider.disableErrorCooldown')} +
+
+
+
+ {t('provider.disableErrorCooldown')} +
+

+ {t('provider.disableErrorCooldownDesc')} +

-

- {t('provider.disableErrorCooldownDesc')} -

+ updateFormData({ disableErrorCooldown: checked })} + /> +
+ +
+
+
+ {t('provider.excludeFromExport')} +
+

+ {t('provider.excludeFromExportDesc')} +

+
+ updateFormData({ excludeFromExport: checked })} + />
- updateFormData({ disableErrorCooldown: checked })} - />
diff --git a/web/src/pages/providers/components/kiro-provider-view.tsx b/web/src/pages/providers/components/kiro-provider-view.tsx index aaa160d8..b670204f 100644 --- a/web/src/pages/providers/components/kiro-provider-view.tsx +++ b/web/src/pages/providers/components/kiro-provider-view.tsx @@ -287,7 +287,8 @@ export function KiroProviderView({ provider, onDelete, onClose }: KiroProviderVi id: provider.id, data: { ...provider, - config: { + excludeFromExport: !!provider.excludeFromExport, + config: { ...provider.config, disableErrorCooldown: checked, kiro: { diff --git a/web/src/pages/providers/components/kiro-token-import.tsx b/web/src/pages/providers/components/kiro-token-import.tsx index 91d1d27d..dca0a10f 100644 --- a/web/src/pages/providers/components/kiro-token-import.tsx +++ b/web/src/pages/providers/components/kiro-token-import.tsx @@ -76,6 +76,7 @@ export function KiroTokenImport() { const providerData: CreateProviderData = { type: 'kiro', name: finalEmail || 'Kiro Account', + excludeFromExport: false, config: { kiro: { authMethod: 'social', diff --git a/web/src/pages/providers/components/provider-edit-flow.tsx b/web/src/pages/providers/components/provider-edit-flow.tsx index d10aea74..ef58e1a0 100644 --- a/web/src/pages/providers/components/provider-edit-flow.tsx +++ b/web/src/pages/providers/components/provider-edit-flow.tsx @@ -385,6 +385,7 @@ export function ProviderEditFlow({ provider, onClose }: ProviderEditFlowProps) { }, supportedClientTypes, supportModels: formData.supportModels.length > 0 ? formData.supportModels : undefined, + excludeFromExport: !!provider.excludeFromExport, }; await updateProvider.mutateAsync({ id: Number(provider.id), data }); @@ -446,6 +447,7 @@ export function ProviderEditFlow({ provider, onClose }: ProviderEditFlowProps) { }, supportedClientTypes, supportModels: formData.supportModels.length > 0 ? formData.supportModels : undefined, + excludeFromExport: !!provider.excludeFromExport, }; const newProvider = await createProvider.mutateAsync(data); diff --git a/web/src/pages/providers/context/provider-form-context.tsx b/web/src/pages/providers/context/provider-form-context.tsx index 7a2edd6c..e4405677 100644 --- a/web/src/pages/providers/context/provider-form-context.tsx +++ b/web/src/pages/providers/context/provider-form-context.tsx @@ -41,6 +41,7 @@ const initialFormData: ProviderFormData = { cloakStrictMode: false, cloakSensitiveWords: '', disableErrorCooldown: false, + excludeFromExport: false, }; export function ProviderFormProvider({ children }: { children: ReactNode }) { diff --git a/web/src/pages/providers/types.ts b/web/src/pages/providers/types.ts index 9ed2a3c9..44fa6a07 100644 --- a/web/src/pages/providers/types.ts +++ b/web/src/pages/providers/types.ts @@ -234,6 +234,7 @@ export type ProviderFormData = { modelMappings?: TemplateModelMapping[]; // 模型映射 logo?: string; // Logo URL disableErrorCooldown?: boolean; + excludeFromExport?: boolean; }; // Create step type From ee663a665b92001d4f521ef155a676f2b01781b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=95=AA=E5=A4=96=E4=B8=AA=E4=BD=93?= Date: Tue, 17 Mar 2026 13:04:23 +0000 Subject: [PATCH 2/2] chore: trim redundant excludeFromExport wiring --- internal/domain/backup.go | 1 - internal/repository/sqlite/migrations.go | 2 +- internal/service/backup.go | 1 - .../components/antigravity-provider-view.tsx | 6 ++---- .../components/antigravity-token-import.tsx | 1 - .../providers/components/claude-provider-view.tsx | 3 +-- .../providers/components/claude-token-import.tsx | 1 - .../providers/components/codex-provider-view.tsx | 12 ++++-------- .../providers/components/codex-token-import.tsx | 1 - .../providers/components/kiro-provider-view.tsx | 3 +-- .../pages/providers/components/kiro-token-import.tsx | 1 - 11 files changed, 9 insertions(+), 23 deletions(-) diff --git a/internal/domain/backup.go b/internal/domain/backup.go index 5ed0cc12..d889fca4 100644 --- a/internal/domain/backup.go +++ b/internal/domain/backup.go @@ -40,7 +40,6 @@ type BackupProvider struct { Config *ProviderConfig `json:"config,omitempty"` SupportedClientTypes []ClientType `json:"supportedClientTypes,omitempty"` SupportModels []string `json:"supportModels,omitempty"` - ExcludeFromExport bool `json:"excludeFromExport,omitempty"` } // BackupProject represents a project for backup (using slug as identifier) diff --git a/internal/repository/sqlite/migrations.go b/internal/repository/sqlite/migrations.go index 6392d0c1..6020b36c 100644 --- a/internal/repository/sqlite/migrations.go +++ b/internal/repository/sqlite/migrations.go @@ -119,7 +119,7 @@ var migrations = []Migration{ // 2. Update all existing rows to belong to default tenant for _, table := range tenantScopedTables { - result := db.Exec("UPDATE " + table + " SET tenant_id = 1 WHERE tenant_id = 0 OR tenant_id IS NULL") + result := db.Exec("UPDATE "+table+" SET tenant_id = 1 WHERE tenant_id = 0 OR tenant_id IS NULL") if result.Error != nil { log.Printf("[Migration] Warning: Failed to update tenant_id for %s: %v", table, result.Error) // Continue with other tables diff --git a/internal/service/backup.go b/internal/service/backup.go index 501444d5..ad98de59 100644 --- a/internal/service/backup.go +++ b/internal/service/backup.go @@ -119,7 +119,6 @@ func (s *BackupService) Export(tenantID uint64) (*domain.BackupFile, error) { Config: p.Config, SupportedClientTypes: p.SupportedClientTypes, SupportModels: p.SupportModels, - ExcludeFromExport: p.ExcludeFromExport, }) } diff --git a/web/src/pages/providers/components/antigravity-provider-view.tsx b/web/src/pages/providers/components/antigravity-provider-view.tsx index d1715e94..436d7e6c 100644 --- a/web/src/pages/providers/components/antigravity-provider-view.tsx +++ b/web/src/pages/providers/components/antigravity-provider-view.tsx @@ -305,8 +305,7 @@ export function AntigravityProviderView({ id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, antigravity: { ...antigravityConfig, @@ -330,8 +329,7 @@ export function AntigravityProviderView({ id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, disableErrorCooldown: checked, antigravity: { diff --git a/web/src/pages/providers/components/antigravity-token-import.tsx b/web/src/pages/providers/components/antigravity-token-import.tsx index 43f36c17..42526e77 100644 --- a/web/src/pages/providers/components/antigravity-token-import.tsx +++ b/web/src/pages/providers/components/antigravity-token-import.tsx @@ -174,7 +174,6 @@ export function AntigravityTokenImport() { const providerData: CreateProviderData = { type: 'antigravity', name: finalEmail || 'Antigravity Account', - excludeFromExport: false, config: { antigravity: { email: finalEmail, diff --git a/web/src/pages/providers/components/claude-provider-view.tsx b/web/src/pages/providers/components/claude-provider-view.tsx index 70f6afee..59209844 100644 --- a/web/src/pages/providers/components/claude-provider-view.tsx +++ b/web/src/pages/providers/components/claude-provider-view.tsx @@ -238,8 +238,7 @@ export function ClaudeProviderView({ provider, onDelete, onClose }: ClaudeProvid id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, disableErrorCooldown: checked, claude: config, diff --git a/web/src/pages/providers/components/claude-token-import.tsx b/web/src/pages/providers/components/claude-token-import.tsx index 9f25b8a6..a4aff460 100644 --- a/web/src/pages/providers/components/claude-token-import.tsx +++ b/web/src/pages/providers/components/claude-token-import.tsx @@ -254,7 +254,6 @@ export function ClaudeTokenImport() { const providerData: CreateProviderData = { type: 'claude', name: oauthResult.email || 'Claude Account', - excludeFromExport: false, config: { claude: { email: oauthResult.email || '', diff --git a/web/src/pages/providers/components/codex-provider-view.tsx b/web/src/pages/providers/components/codex-provider-view.tsx index 9c8c26a5..7c74d679 100644 --- a/web/src/pages/providers/components/codex-provider-view.tsx +++ b/web/src/pages/providers/components/codex-provider-view.tsx @@ -385,8 +385,7 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, codex: { ...config, @@ -409,8 +408,7 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, disableErrorCooldown: checked, codex: { @@ -434,8 +432,7 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, codex: { ...config, @@ -458,8 +455,7 @@ export function CodexProviderView({ provider, onDelete, onClose }: CodexProvider id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, codex: { ...config, diff --git a/web/src/pages/providers/components/codex-token-import.tsx b/web/src/pages/providers/components/codex-token-import.tsx index 704fb26c..8047cf6e 100644 --- a/web/src/pages/providers/components/codex-token-import.tsx +++ b/web/src/pages/providers/components/codex-token-import.tsx @@ -236,7 +236,6 @@ export function CodexTokenImport() { const providerData: CreateProviderData = { type: 'codex', name: oauthResult.email || 'Codex Account', - excludeFromExport: false, config: { codex: { email: oauthResult.email || '', diff --git a/web/src/pages/providers/components/kiro-provider-view.tsx b/web/src/pages/providers/components/kiro-provider-view.tsx index b670204f..aaa160d8 100644 --- a/web/src/pages/providers/components/kiro-provider-view.tsx +++ b/web/src/pages/providers/components/kiro-provider-view.tsx @@ -287,8 +287,7 @@ export function KiroProviderView({ provider, onDelete, onClose }: KiroProviderVi id: provider.id, data: { ...provider, - excludeFromExport: !!provider.excludeFromExport, - config: { + config: { ...provider.config, disableErrorCooldown: checked, kiro: { diff --git a/web/src/pages/providers/components/kiro-token-import.tsx b/web/src/pages/providers/components/kiro-token-import.tsx index dca0a10f..91d1d27d 100644 --- a/web/src/pages/providers/components/kiro-token-import.tsx +++ b/web/src/pages/providers/components/kiro-token-import.tsx @@ -76,7 +76,6 @@ export function KiroTokenImport() { const providerData: CreateProviderData = { type: 'kiro', name: finalEmail || 'Kiro Account', - excludeFromExport: false, config: { kiro: { authMethod: 'social',