import { normalizeProviderId } from "../providers/registry.js"; import { normalizeAccountId } from "../routing/session-key.js"; import type { ClawdbotConfig } from "./config.js"; function normalizeCapabilities( capabilities: string[] | undefined, ): string[] | undefined { if (!capabilities) return undefined; const normalized = capabilities.map((entry) => entry.trim()).filter(Boolean); return normalized.length > 0 ? normalized : undefined; } function resolveAccountCapabilities(params: { cfg?: { accounts?: Record } & { capabilities?: string[]; }; 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 direct = accounts[normalizedAccountId]; if (direct) { return ( normalizeCapabilities(direct.capabilities) ?? normalizeCapabilities(cfg.capabilities) ); } const matchKey = Object.keys(accounts).find( (key) => key.toLowerCase() === normalizedAccountId.toLowerCase(), ); const match = matchKey ? accounts[matchKey] : undefined; if (match) { return ( normalizeCapabilities(match.capabilities) ?? normalizeCapabilities(cfg.capabilities) ); } } return normalizeCapabilities(cfg.capabilities); } export function resolveProviderCapabilities(params: { cfg?: ClawdbotConfig; provider?: string | null; accountId?: string | null; }): string[] | undefined { const cfg = params.cfg; const provider = normalizeProviderId(params.provider); if (!cfg || !provider) return undefined; const providerConfig = (cfg as Record)[provider] as | { accounts?: Record; capabilities?: string[]; } | undefined; return resolveAccountCapabilities({ cfg: providerConfig, accountId: params.accountId, }); }