fix(auth): configure OpenClaw default model when saving provider
- Add setOpenClawDefaultModel() to write the correct model to ~/.openclaw/openclaw.json based on the selected provider - Maps: openrouter -> openrouter/anthropic/claude-sonnet-4, anthropic -> anthropic/claude-sonnet-4, etc. - Call setOpenClawDefaultModel on provider:save IPC handler - Fixes "No API key found for provider anthropic" when user configured OpenRouter (wrong default model was being used)
This commit is contained in:
@@ -21,7 +21,7 @@ import {
|
|||||||
} from '../utils/secure-storage';
|
} from '../utils/secure-storage';
|
||||||
import { getOpenClawStatus } from '../utils/paths';
|
import { getOpenClawStatus } from '../utils/paths';
|
||||||
import { getSetting } from '../utils/store';
|
import { getSetting } from '../utils/store';
|
||||||
import { saveProviderKeyToOpenClaw } from '../utils/openclaw-auth';
|
import { saveProviderKeyToOpenClaw, setOpenClawDefaultModel } from '../utils/openclaw-auth';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register all IPC handlers
|
* Register all IPC handlers
|
||||||
@@ -228,6 +228,13 @@ function registerProviderHandlers(): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the default model in OpenClaw config based on provider type
|
||||||
|
try {
|
||||||
|
setOpenClawDefaultModel(config.type);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('Failed to set OpenClaw default model:', err);
|
||||||
|
}
|
||||||
|
|
||||||
return { success: true };
|
return { success: true };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return { success: false, error: String(error) };
|
return { success: false, error: String(error) };
|
||||||
|
|||||||
@@ -161,3 +161,61 @@ export function buildProviderEnvVars(providers: Array<{ type: string; apiKey: st
|
|||||||
|
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provider type to default model mapping
|
||||||
|
* Used to set the gateway's default model when the user selects a provider
|
||||||
|
*/
|
||||||
|
const PROVIDER_DEFAULT_MODELS: Record<string, string> = {
|
||||||
|
anthropic: 'anthropic/claude-sonnet-4-20250514',
|
||||||
|
openai: 'openai/gpt-4o',
|
||||||
|
google: 'google/gemini-2.5-pro-preview-06-05',
|
||||||
|
openrouter: 'openrouter/anthropic/claude-sonnet-4',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the OpenClaw config to use the given provider and model
|
||||||
|
* Writes to ~/.openclaw/openclaw.json
|
||||||
|
*/
|
||||||
|
export function setOpenClawDefaultModel(provider: string): void {
|
||||||
|
const configPath = join(homedir(), '.openclaw', 'openclaw.json');
|
||||||
|
|
||||||
|
let config: Record<string, unknown> = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (existsSync(configPath)) {
|
||||||
|
config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('Failed to read openclaw.json, creating fresh config:', err);
|
||||||
|
}
|
||||||
|
|
||||||
|
const model = PROVIDER_DEFAULT_MODELS[provider];
|
||||||
|
if (!model) {
|
||||||
|
console.warn(`No default model mapping for provider "${provider}"`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the default model for the agents
|
||||||
|
const agents = (config.agents || {}) as Record<string, unknown>;
|
||||||
|
const defaults = (agents.defaults || {}) as Record<string, unknown>;
|
||||||
|
defaults.model = model;
|
||||||
|
agents.defaults = defaults;
|
||||||
|
config.agents = agents;
|
||||||
|
|
||||||
|
// Ensure gateway mode is set
|
||||||
|
const gateway = (config.gateway || {}) as Record<string, unknown>;
|
||||||
|
if (!gateway.mode) {
|
||||||
|
gateway.mode = 'local';
|
||||||
|
}
|
||||||
|
config.gateway = gateway;
|
||||||
|
|
||||||
|
// Ensure directory exists
|
||||||
|
const dir = join(configPath, '..');
|
||||||
|
if (!existsSync(dir)) {
|
||||||
|
mkdirSync(dir, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
||||||
|
console.log(`Set OpenClaw default model to "${model}" for provider "${provider}"`);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user