refactor(config): inline account capability resolution

Amp-Thread-ID: https://ampcode.com/threads/T-019ff438-3b93-77b8-9828-1d3c586cb127
This commit is contained in:
Amp
2026-08-12 07:04:55 +00:00
committed by Peter Steinberger
parent 6e71e9b156
commit c5e757e00a
+14 -28
View File
@@ -22,30 +22,6 @@ function normalizeCapabilities(capabilities: CapabilitiesConfig | undefined): st
return normalized.length > 0 ? normalized : undefined;
}
function resolveAccountCapabilities(params: {
cfg?: { accounts?: Record<string, { capabilities?: CapabilitiesConfig }> } & {
capabilities?: CapabilitiesConfig;
};
accountId?: string | null;
}): string[] | undefined {
const cfg = params.cfg;
if (!cfg) {
return undefined;
}
const normalizedAccountId = normalizeAccountId(params.accountId);
const accounts = cfg.accounts;
if (accounts && typeof accounts === "object") {
const match = resolveAccountEntry(accounts, normalizedAccountId);
if (match) {
// Account capabilities override provider capabilities; empty/object account values fall back.
return normalizeCapabilities(match.capabilities) ?? normalizeCapabilities(cfg.capabilities);
}
}
return normalizeCapabilities(cfg.capabilities);
}
/** Resolves normalized string capabilities for a channel/account config pair. */
export function resolveChannelCapabilities(params: {
cfg?: Partial<OpenClawConfig>;
@@ -65,8 +41,18 @@ export function resolveChannelCapabilities(params: {
capabilities?: CapabilitiesConfig;
}
| undefined;
return resolveAccountCapabilities({
cfg: channelConfig,
accountId: params.accountId,
});
if (!channelConfig) {
return undefined;
}
const normalizedAccountId = normalizeAccountId(params.accountId);
const accounts = channelConfig.accounts;
const accountConfig =
accounts && typeof accounts === "object"
? resolveAccountEntry(accounts, normalizedAccountId)
: undefined;
// Account capabilities override channel capabilities; empty/object account values fall back.
return (
normalizeCapabilities(accountConfig?.capabilities) ??
normalizeCapabilities(channelConfig.capabilities)
);
}