From 19c70e2a292ca714f46aeaade7d341c664ea1f03 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Fri, 29 May 2026 14:27:15 +0200 Subject: [PATCH] refactor: share provider install choice fields --- src/plugins/provider-install-catalog.ts | 90 ++++++++++++++++--------- 1 file changed, 60 insertions(+), 30 deletions(-) diff --git a/src/plugins/provider-install-catalog.ts b/src/plugins/provider-install-catalog.ts index 1e3b5d968f1..c7cc391d854 100644 --- a/src/plugins/provider-install-catalog.ts +++ b/src/plugins/provider-install-catalog.ts @@ -47,6 +47,20 @@ type PreferredInstallSources = { installedPluginIds: ReadonlySet; installsByPluginId: Map; }; +type ProviderInstallCatalogChoiceFields = Pick< + ProviderAuthChoiceMetadata, + | "choiceHint" + | "assistantPriority" + | "assistantVisibility" + | "groupId" + | "groupLabel" + | "groupHint" + | "optionKey" + | "cliFlag" + | "cliOption" + | "cliDescription" + | "onboardingScopes" +>; const INSTALL_ORIGIN_PRIORITY: Readonly> = { config: 0, @@ -234,19 +248,19 @@ function resolveProviderIndexInstallCatalogEntries(params: { methodId: choice.method, choiceId: choice.choiceId, choiceLabel: choice.choiceLabel, - ...(choice.choiceHint ? { choiceHint: choice.choiceHint } : {}), - ...(choice.assistantPriority !== undefined - ? { assistantPriority: choice.assistantPriority } - : {}), - ...(choice.assistantVisibility ? { assistantVisibility: choice.assistantVisibility } : {}), - ...(choice.groupId ? { groupId: choice.groupId } : {}), - ...(choice.groupLabel ? { groupLabel: choice.groupLabel } : {}), - ...(choice.groupHint ? { groupHint: choice.groupHint } : {}), - ...(choice.optionKey ? { optionKey: choice.optionKey } : {}), - ...(choice.cliFlag ? { cliFlag: choice.cliFlag } : {}), - ...(choice.cliOption ? { cliOption: choice.cliOption } : {}), - ...(choice.cliDescription ? { cliDescription: choice.cliDescription } : {}), - ...(choice.onboardingScopes ? { onboardingScopes: [...choice.onboardingScopes] } : {}), + ...resolveProviderInstallCatalogChoiceFields({ + choiceHint: choice.choiceHint, + assistantPriority: choice.assistantPriority, + assistantVisibility: choice.assistantVisibility, + groupId: choice.groupId, + groupLabel: choice.groupLabel, + groupHint: choice.groupHint, + optionKey: choice.optionKey, + cliFlag: choice.cliFlag, + cliOption: choice.cliOption, + cliDescription: choice.cliDescription, + onboardingScopes: choice.onboardingScopes ? [...choice.onboardingScopes] : undefined, + }), label: provider.name, origin: "bundled", install, @@ -259,6 +273,26 @@ function resolveProviderIndexInstallCatalogEntries(params: { return entries; } +function resolveProviderInstallCatalogChoiceFields( + choice: ProviderInstallCatalogChoiceFields, +): Partial { + return { + ...(choice.choiceHint ? { choiceHint: choice.choiceHint } : {}), + ...(choice.assistantPriority !== undefined + ? { assistantPriority: choice.assistantPriority } + : {}), + ...(choice.assistantVisibility ? { assistantVisibility: choice.assistantVisibility } : {}), + ...(choice.groupId ? { groupId: choice.groupId } : {}), + ...(choice.groupLabel ? { groupLabel: choice.groupLabel } : {}), + ...(choice.groupHint ? { groupHint: choice.groupHint } : {}), + ...(choice.optionKey ? { optionKey: choice.optionKey } : {}), + ...(choice.cliFlag ? { cliFlag: choice.cliFlag } : {}), + ...(choice.cliOption ? { cliOption: choice.cliOption } : {}), + ...(choice.cliDescription ? { cliDescription: choice.cliDescription } : {}), + ...(choice.onboardingScopes ? { onboardingScopes: choice.onboardingScopes } : {}), + }; +} + function isProviderFlowScope( value: unknown, ): value is "text-inference" | "image-generation" | "music-generation" { @@ -309,23 +343,19 @@ function resolveOfficialExternalProviderInstallCatalogEntries(params: { methodId, choiceId, choiceLabel, - ...(choice.choiceHint ? { choiceHint: choice.choiceHint } : {}), - ...(choice.assistantPriority !== undefined - ? { assistantPriority: choice.assistantPriority } - : {}), - ...(choice.assistantVisibility - ? { assistantVisibility: choice.assistantVisibility } - : {}), - ...(choice.groupId ? { groupId: choice.groupId } : {}), - ...(choice.groupLabel ? { groupLabel: choice.groupLabel } : {}), - ...(choice.groupHint ? { groupHint: choice.groupHint } : {}), - ...(choice.optionKey ? { optionKey: choice.optionKey } : {}), - ...(choice.cliFlag ? { cliFlag: choice.cliFlag } : {}), - ...(choice.cliOption ? { cliOption: choice.cliOption } : {}), - ...(choice.cliDescription ? { cliDescription: choice.cliDescription } : {}), - ...(normalizeProviderAuthChoiceScopes(choice.onboardingScopes) - ? { onboardingScopes: normalizeProviderAuthChoiceScopes(choice.onboardingScopes) } - : {}), + ...resolveProviderInstallCatalogChoiceFields({ + choiceHint: choice.choiceHint, + assistantPriority: choice.assistantPriority, + assistantVisibility: choice.assistantVisibility, + groupId: choice.groupId, + groupLabel: choice.groupLabel, + groupHint: choice.groupHint, + optionKey: choice.optionKey, + cliFlag: choice.cliFlag, + cliOption: choice.cliOption, + cliDescription: choice.cliDescription, + onboardingScopes: normalizeProviderAuthChoiceScopes(choice.onboardingScopes), + }), label, origin: "bundled", install,