fix(coding-agent): resolve models.json auth per request closes #1835
This commit is contained in:
@@ -65,24 +65,50 @@ function executeWithDefaultShell(command: string): string | undefined {
|
||||
}
|
||||
}
|
||||
|
||||
function executeCommandUncached(commandConfig: string): string | undefined {
|
||||
const command = commandConfig.slice(1);
|
||||
return process.platform === "win32"
|
||||
? (() => {
|
||||
const configuredResult = executeWithConfiguredShell(command);
|
||||
return configuredResult.executed ? configuredResult.value : executeWithDefaultShell(command);
|
||||
})()
|
||||
: executeWithDefaultShell(command);
|
||||
}
|
||||
|
||||
function executeCommand(commandConfig: string): string | undefined {
|
||||
if (commandResultCache.has(commandConfig)) {
|
||||
return commandResultCache.get(commandConfig);
|
||||
}
|
||||
|
||||
const command = commandConfig.slice(1);
|
||||
const result =
|
||||
process.platform === "win32"
|
||||
? (() => {
|
||||
const configuredResult = executeWithConfiguredShell(command);
|
||||
return configuredResult.executed ? configuredResult.value : executeWithDefaultShell(command);
|
||||
})()
|
||||
: executeWithDefaultShell(command);
|
||||
|
||||
const result = executeCommandUncached(commandConfig);
|
||||
commandResultCache.set(commandConfig, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve all header values using the same resolution logic as API keys.
|
||||
*/
|
||||
export function resolveConfigValueUncached(config: string): string | undefined {
|
||||
if (config.startsWith("!")) {
|
||||
return executeCommandUncached(config);
|
||||
}
|
||||
const envValue = process.env[config];
|
||||
return envValue || config;
|
||||
}
|
||||
|
||||
export function resolveConfigValueOrThrow(config: string, description: string): string {
|
||||
const resolvedValue = resolveConfigValueUncached(config);
|
||||
if (resolvedValue !== undefined) {
|
||||
return resolvedValue;
|
||||
}
|
||||
|
||||
if (config.startsWith("!")) {
|
||||
throw new Error(`Failed to resolve ${description} from shell command: ${config.slice(1)}`);
|
||||
}
|
||||
|
||||
throw new Error(`Failed to resolve ${description}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve all header values using the same resolution logic as API keys.
|
||||
*/
|
||||
@@ -98,6 +124,18 @@ export function resolveHeaders(headers: Record<string, string> | undefined): Rec
|
||||
return Object.keys(resolved).length > 0 ? resolved : undefined;
|
||||
}
|
||||
|
||||
export function resolveHeadersOrThrow(
|
||||
headers: Record<string, string> | undefined,
|
||||
description: string,
|
||||
): Record<string, string> | undefined {
|
||||
if (!headers) return undefined;
|
||||
const resolved: Record<string, string> = {};
|
||||
for (const [key, value] of Object.entries(headers)) {
|
||||
resolved[key] = resolveConfigValueOrThrow(value, `${description} header "${key}"`);
|
||||
}
|
||||
return Object.keys(resolved).length > 0 ? resolved : undefined;
|
||||
}
|
||||
|
||||
/** Clear the config value command cache. Exported for testing. */
|
||||
export function clearConfigValueCache(): void {
|
||||
commandResultCache.clear();
|
||||
|
||||
Reference in New Issue
Block a user