}
+ if (!parsed.env || typeof parsed.env !== 'object') return settings
+ for (const key of API_KEY_JSON_KEYS) {
+ if (parsed.env[key] === API_KEY_JSON_PLACEHOLDER) {
+ parsed.env[key] = apiKey
+ }
+ }
+ return settings
+}
+
function ProviderFormModal({ open, onClose, mode, provider, presets }: ProviderFormProps) {
const { createProvider, updateProvider, testConfig } = useProviderStore()
const fetchSettings = useSettingsStore((s) => s.fetchAll)
@@ -446,6 +479,9 @@ function ProviderFormModal({ open, onClose, mode, provider, presets }: ProviderF
const canSubmit = name.trim() && baseUrl.trim() && (mode === 'edit' || !requiresApiKey || apiKey.trim()) && models.main.trim() && !settingsJsonError
const apiKeyUrl = selectedPreset.apiKeyUrl?.trim()
const promoText = selectedPreset.promoText?.trim()
+ const displayedSettingsJson = showApiKey
+ ? settingsJson
+ : maskSettingsJsonSecrets(settingsJson, apiKey)
const apiFormatItems = [
{
value: 'anthropic' as const,
@@ -486,7 +522,7 @@ function ProviderFormModal({ open, onClose, mode, provider, presets }: ProviderF
// settings never conflict with the user's global ~/.claude/settings.json.
if (settingsJson.trim()) {
try {
- const parsed = JSON.parse(settingsJson)
+ const parsed = restoreSettingsJsonSecrets(JSON.parse(settingsJson), apiKey)
const { providersApi } = await import('../api/providers')
await providersApi.updateSettings(parsed)
} catch {
@@ -720,12 +756,12 @@ function ProviderFormModal({ open, onClose, mode, provider, presets }: ProviderF