fix(model): claw-x header (#198)
Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Haze <hazeone@users.noreply.github.com>
This commit is contained in:
@@ -122,16 +122,6 @@ async function initialize(): Promise<void> {
|
|||||||
// Create system tray
|
// Create system tray
|
||||||
createTray(mainWindow);
|
createTray(mainWindow);
|
||||||
|
|
||||||
// Inject OpenRouter site headers (HTTP-Referer & X-Title) for rankings on openrouter.ai
|
|
||||||
session.defaultSession.webRequest.onBeforeSendHeaders(
|
|
||||||
{ urls: ['https://openrouter.ai/*'] },
|
|
||||||
(details, callback) => {
|
|
||||||
details.requestHeaders['HTTP-Referer'] = 'https://claw-x.com';
|
|
||||||
details.requestHeaders['X-Title'] = 'ClawX';
|
|
||||||
callback({ requestHeaders: details.requestHeaders });
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
// Override security headers ONLY for the OpenClaw Gateway Control UI
|
// Override security headers ONLY for the OpenClaw Gateway Control UI
|
||||||
session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
|
session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
|
||||||
const isGatewayUrl = details.url.includes('127.0.0.1:18789') || details.url.includes('localhost:18789');
|
const isGatewayUrl = details.url.includes('127.0.0.1:18789') || details.url.includes('localhost:18789');
|
||||||
|
|||||||
@@ -878,6 +878,7 @@ function registerProviderHandlers(gatewayManager: GatewayManager): void {
|
|||||||
baseUrl: config.baseUrl || meta?.baseUrl,
|
baseUrl: config.baseUrl || meta?.baseUrl,
|
||||||
api,
|
api,
|
||||||
apiKeyEnv: meta?.apiKeyEnv,
|
apiKeyEnv: meta?.apiKeyEnv,
|
||||||
|
headers: meta?.headers,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (config.type === 'custom' || config.type === 'ollama') {
|
if (config.type === 'custom' || config.type === 'ollama') {
|
||||||
@@ -1003,6 +1004,7 @@ function registerProviderHandlers(gatewayManager: GatewayManager): void {
|
|||||||
baseUrl: nextConfig.baseUrl || meta?.baseUrl,
|
baseUrl: nextConfig.baseUrl || meta?.baseUrl,
|
||||||
api,
|
api,
|
||||||
apiKeyEnv: meta?.apiKeyEnv,
|
apiKeyEnv: meta?.apiKeyEnv,
|
||||||
|
headers: meta?.headers,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (nextConfig.type === 'custom' || nextConfig.type === 'ollama') {
|
if (nextConfig.type === 'custom' || nextConfig.type === 'ollama') {
|
||||||
|
|||||||
@@ -396,13 +396,17 @@ export function setOpenClawDefaultModel(provider: string, modelOverride?: string
|
|||||||
mergedModels.push({ id: modelId, name: modelId });
|
mergedModels.push({ id: modelId, name: modelId });
|
||||||
}
|
}
|
||||||
|
|
||||||
providers[provider] = {
|
const providerEntry: Record<string, unknown> = {
|
||||||
...existingProvider,
|
...existingProvider,
|
||||||
baseUrl: providerCfg.baseUrl,
|
baseUrl: providerCfg.baseUrl,
|
||||||
api: providerCfg.api,
|
api: providerCfg.api,
|
||||||
apiKey: providerCfg.apiKeyEnv,
|
apiKey: providerCfg.apiKeyEnv,
|
||||||
models: mergedModels,
|
models: mergedModels,
|
||||||
};
|
};
|
||||||
|
if (providerCfg.headers && Object.keys(providerCfg.headers).length > 0) {
|
||||||
|
providerEntry.headers = providerCfg.headers;
|
||||||
|
}
|
||||||
|
providers[provider] = providerEntry;
|
||||||
console.log(`Configured models.providers.${provider} with baseUrl=${providerCfg.baseUrl}, model=${modelId}`);
|
console.log(`Configured models.providers.${provider} with baseUrl=${providerCfg.baseUrl}, model=${modelId}`);
|
||||||
|
|
||||||
models.providers = providers;
|
models.providers = providers;
|
||||||
@@ -442,6 +446,7 @@ interface RuntimeProviderConfigOverride {
|
|||||||
baseUrl?: string;
|
baseUrl?: string;
|
||||||
api?: string;
|
api?: string;
|
||||||
apiKeyEnv?: string;
|
apiKeyEnv?: string;
|
||||||
|
headers?: Record<string, string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -481,6 +486,9 @@ export function syncProviderConfigToOpenClaw(
|
|||||||
if (override.apiKeyEnv) {
|
if (override.apiKeyEnv) {
|
||||||
nextProvider.apiKey = override.apiKeyEnv;
|
nextProvider.apiKey = override.apiKeyEnv;
|
||||||
}
|
}
|
||||||
|
if (override.headers && Object.keys(override.headers).length > 0) {
|
||||||
|
nextProvider.headers = override.headers;
|
||||||
|
}
|
||||||
|
|
||||||
providers[provider] = nextProvider;
|
providers[provider] = nextProvider;
|
||||||
models.providers = providers;
|
models.providers = providers;
|
||||||
@@ -562,6 +570,9 @@ export function setOpenClawDefaultModelWithOverride(
|
|||||||
if (override.apiKeyEnv) {
|
if (override.apiKeyEnv) {
|
||||||
nextProvider.apiKey = override.apiKeyEnv;
|
nextProvider.apiKey = override.apiKeyEnv;
|
||||||
}
|
}
|
||||||
|
if (override.headers && Object.keys(override.headers).length > 0) {
|
||||||
|
nextProvider.headers = override.headers;
|
||||||
|
}
|
||||||
|
|
||||||
providers[provider] = nextProvider;
|
providers[provider] = nextProvider;
|
||||||
models.providers = providers;
|
models.providers = providers;
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ interface ProviderBackendMeta {
|
|||||||
api: string;
|
api: string;
|
||||||
apiKeyEnv: string;
|
apiKeyEnv: string;
|
||||||
models?: ProviderModelEntry[];
|
models?: ProviderModelEntry[];
|
||||||
|
headers?: Record<string, string>;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,6 +66,10 @@ const REGISTRY: Record<string, ProviderBackendMeta> = {
|
|||||||
baseUrl: 'https://openrouter.ai/api/v1',
|
baseUrl: 'https://openrouter.ai/api/v1',
|
||||||
api: 'openai-completions',
|
api: 'openai-completions',
|
||||||
apiKeyEnv: 'OPENROUTER_API_KEY',
|
apiKeyEnv: 'OPENROUTER_API_KEY',
|
||||||
|
headers: {
|
||||||
|
'HTTP-Referer': 'https://claw-x.com',
|
||||||
|
'X-Title': 'ClawX',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
moonshot: {
|
moonshot: {
|
||||||
@@ -135,10 +140,10 @@ export function getProviderDefaultModel(type: string): string | undefined {
|
|||||||
return REGISTRY[type]?.defaultModel;
|
return REGISTRY[type]?.defaultModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get the OpenClaw provider config (baseUrl, api, apiKeyEnv, models) */
|
/** Get the OpenClaw provider config (baseUrl, api, apiKeyEnv, models, headers) */
|
||||||
export function getProviderConfig(
|
export function getProviderConfig(
|
||||||
type: string
|
type: string
|
||||||
): { baseUrl: string; api: string; apiKeyEnv: string; models?: ProviderModelEntry[] } | undefined {
|
): { baseUrl: string; api: string; apiKeyEnv: string; models?: ProviderModelEntry[]; headers?: Record<string, string> } | undefined {
|
||||||
return REGISTRY[type]?.providerConfig;
|
return REGISTRY[type]?.providerConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user