feat: keep provider records on switch, only mark active; filter on save

This commit is contained in:
KimiSwitch Dev
2026-07-08 14:25:05 +08:00
parent 8c515f42dc
commit 155efdf9f3
6 changed files with 32 additions and 20 deletions
+6 -16
View File
@@ -194,37 +194,27 @@ export default function App() {
const handleSwitchProvider = (name: string) => {
updateConfig((cfg) => {
const target = cfg.providers[name];
if (!target) return cfg;
if (!target || target.managed) return cfg;
const isKimiNative = (p: Provider) => p.managed === true;
// Keep Kimi native (managed) providers and the selected provider only.
// Mark the selected provider as active and deactivate other custom providers.
// Kimi native providers are left untouched. No provider/model records are deleted.
const providers: Record<string, Provider> = {};
for (const [key, p] of Object.entries(cfg.providers)) {
if (isKimiNative(p)) {
providers[key] = p;
}
}
providers[name] = { ...target, enabled: true };
// Drop models whose provider was removed.
const models: Record<string, Model> = {};
for (const [key, m] of Object.entries(cfg.models)) {
if (providers[m.provider]) {
models[key] = m;
}
providers[key] = { ...p, active: isKimiNative(p) ? undefined : key === name };
}
// Set default model to the first model of the selected provider.
let default_model: string | null = null;
for (const [key, m] of Object.entries(models)) {
for (const [key, m] of Object.entries(cfg.models)) {
if (m.provider === name) {
default_model = key;
break;
}
}
return { ...cfg, providers, models, default_model };
return { ...cfg, providers, default_model };
});
};
+1 -4
View File
@@ -93,10 +93,7 @@ export function ProviderList({
? models[defaultModel]?.display_name || defaultModel
: null;
const isKimiNative = provider.managed === true;
const isActive =
!isKimiNative &&
defaultModel !== null &&
models[defaultModel]?.provider === provider.name;
const isActive = !isKimiNative && provider.active === true;
return (
<div
+2
View File
@@ -22,6 +22,8 @@ export interface Provider {
managed?: boolean;
/** Whether the provider is enabled/activated. */
enabled?: boolean;
/** Whether this provider is the currently active one for Kimi Code. */
active?: boolean;
/** Extra agent-specific provider fields preserved across edits. */
raw_other?: unknown;
}