UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

127 lines (126 loc) 5.39 kB
import { c as normalizeOptionalString, s as normalizeOptionalLowercaseString } from "./string-coerce-mnp54Vah.js"; import { r as DEFAULT_PROVIDER } from "./defaults-mDjiWzE5.js"; import { i as resolvePluginSetupProvider } from "./setup-registry-HspW94zx.js"; import { n as resolvePluginProviders } from "./providers.runtime-DOSqHxyZ.js"; import { o as normalizeProviderId } from "./model-selection-normalize-roKDxQ9_.js"; import "./model-selection-CA_65iXi.js"; //#region src/plugins/provider-wizard.ts /** Provider setup wizard helpers shared by provider plugins and CLI setup flows. */ const PROVIDER_PLUGIN_CHOICE_PREFIX = "provider-plugin:"; function resolveWizardSetupChoiceId(provider, wizard) { const explicit = normalizeOptionalString(wizard.choiceId); if (explicit) return explicit; const explicitMethodId = normalizeOptionalString(wizard.methodId); if (explicitMethodId) return buildProviderPluginMethodChoice(provider.id, explicitMethodId); if (provider.auth.length === 1) return provider.id; return buildProviderPluginMethodChoice(provider.id, provider.auth[0]?.id ?? "default"); } function resolveMethodById(provider, methodId) { const normalizedMethodId = normalizeOptionalLowercaseString(methodId); if (!normalizedMethodId) return provider.auth[0]; return provider.auth.find((method) => normalizeOptionalLowercaseString(method.id) === normalizedMethodId); } function listMethodWizardSetups(provider) { return provider.auth.map((method) => method.wizard ? { method, wizard: method.wizard } : null).filter((entry) => Boolean(entry)); } function buildProviderPluginMethodChoice(providerId, methodId) { return `${PROVIDER_PLUGIN_CHOICE_PREFIX}${normalizeOptionalString(providerId) ?? ""}:${normalizeOptionalString(methodId) ?? ""}`; } function resolveProviderWizardProviders(params) { return resolvePluginProviders({ config: params.config, workspaceDir: params.workspaceDir, env: params.env, mode: "setup" }); } function resolveModelPickerChoiceValue(provider, modelPicker) { const explicitMethodId = normalizeOptionalString(modelPicker.methodId); if (explicitMethodId) return buildProviderPluginMethodChoice(provider.id, explicitMethodId); if (provider.auth.length === 1) return provider.id; return buildProviderPluginMethodChoice(provider.id, provider.auth[0]?.id ?? "default"); } function resolveProviderModelPickerEntries(params) { const providers = resolveProviderWizardProviders(params); const entries = []; for (const provider of providers) { const modelPicker = provider.wizard?.modelPicker; if (!modelPicker) continue; entries.push({ value: resolveModelPickerChoiceValue(provider, modelPicker), label: normalizeOptionalString(modelPicker.label) || `${provider.label} (custom)`, hint: normalizeOptionalString(modelPicker.hint) }); } return entries; } function resolveProviderPluginChoice(params) { const choice = normalizeOptionalString(params.choice) ?? ""; if (!choice) return null; if (choice.startsWith(PROVIDER_PLUGIN_CHOICE_PREFIX)) { const payload = choice.slice(16); const separator = payload.indexOf(":"); const providerId = separator >= 0 ? payload.slice(0, separator) : payload; const methodId = separator >= 0 ? payload.slice(separator + 1) : void 0; const provider = params.providers.find((entry) => normalizeProviderId(entry.id) === normalizeProviderId(providerId)); if (!provider) return null; const method = resolveMethodById(provider, methodId); return method ? { provider, method } : null; } for (const provider of params.providers) { for (const { method, wizard } of listMethodWizardSetups(provider)) if ((normalizeOptionalString(normalizeOptionalString(wizard.choiceId) || buildProviderPluginMethodChoice(provider.id, method.id)) ?? "") === choice) return { provider, method, wizard }; const setup = provider.wizard?.setup; if (setup) { if ((normalizeOptionalString(resolveWizardSetupChoiceId(provider, setup)) ?? "") === choice) { const method = resolveMethodById(provider, setup.methodId); if (method) return { provider, method, wizard: setup }; } } if (normalizeProviderId(provider.id) === normalizeProviderId(choice) && provider.auth.length > 0) return { provider, method: provider.auth[0] }; } return null; } async function runProviderModelSelectedHook(params) { const rawModel = params.model.trim(); if (!rawModel) return; const slashIndex = rawModel.indexOf("/"); const selectedProviderId = slashIndex === -1 ? DEFAULT_PROVIDER : normalizeProviderId(rawModel.slice(0, slashIndex).trim()); if (!selectedProviderId || slashIndex !== -1 && !rawModel.slice(slashIndex + 1).trim()) return; const provider = resolvePluginSetupProvider({ provider: selectedProviderId, config: params.config, workspaceDir: params.workspaceDir, env: params.env }) ?? resolveProviderWizardProviders({ config: params.config, workspaceDir: params.workspaceDir, env: params.env }).find((entry) => normalizeProviderId(entry.id) === selectedProviderId); if (!provider?.onModelSelected) return; await provider.onModelSelected({ config: params.config, model: params.model, prompter: params.prompter, agentDir: params.agentDir, workspaceDir: params.workspaceDir }); } //#endregion export { resolveProviderPluginChoice as n, runProviderModelSelectedHook as r, resolveProviderModelPickerEntries as t };