From 52d42ce34985f27f6c6deda7b1f03e10ff9ead70 Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Sun, 4 Jan 2026 01:07:05 +0800 Subject: [PATCH] feat(stage-ui): with sorted for providers --- .../stage-ui/src/libs/providers/providers/302-ai/index.ts | 1 + .../src/libs/providers/providers/anthropic/index.ts | 1 + .../src/libs/providers/providers/deepseek/index.ts | 1 + .../libs/providers/providers/google-generative-ai/index.ts | 1 + .../stage-ui/src/libs/providers/providers/ollama/index.ts | 1 + .../libs/providers/providers/openai-compatible/index.ts | 1 + .../stage-ui/src/libs/providers/providers/openai/index.ts | 1 + .../src/libs/providers/providers/openrouter-ai/index.ts | 1 + packages/stage-ui/src/libs/providers/providers/registry.ts | 7 ++++--- 9 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/stage-ui/src/libs/providers/providers/302-ai/index.ts b/packages/stage-ui/src/libs/providers/providers/302-ai/index.ts index cd0ddd90a..6fcf9af69 100644 --- a/packages/stage-ui/src/libs/providers/providers/302-ai/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/302-ai/index.ts @@ -17,6 +17,7 @@ type AI302Config = z.input export const provider302AI = defineProvider({ id: '302-ai', + order: 7, name: '302.AI', nameLocalize: ({ t }) => t('settings.pages.providers.provider.302-ai.title'), description: '302.ai', diff --git a/packages/stage-ui/src/libs/providers/providers/anthropic/index.ts b/packages/stage-ui/src/libs/providers/providers/anthropic/index.ts index 612b6fe32..d0dca18ec 100644 --- a/packages/stage-ui/src/libs/providers/providers/anthropic/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/anthropic/index.ts @@ -38,6 +38,7 @@ function createAnthropic(apiKey: string, baseURL: string = 'https://api.anthropi export const providerAnthropic = defineProvider({ id: 'anthropic', + order: 5, name: 'Anthropic', nameLocalize: ({ t }) => t('settings.pages.providers.provider.anthropic.title'), description: 'anthropic.com', diff --git a/packages/stage-ui/src/libs/providers/providers/deepseek/index.ts b/packages/stage-ui/src/libs/providers/providers/deepseek/index.ts index 125c6d783..f15076efc 100644 --- a/packages/stage-ui/src/libs/providers/providers/deepseek/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/deepseek/index.ts @@ -17,6 +17,7 @@ type DeepSeekConfig = z.input export const providerDeepSeek = defineProvider({ id: 'deepseek', + order: 4, name: 'DeepSeek', nameLocalize: ({ t }) => t('settings.pages.providers.provider.deepseek.title'), description: 'deepseek.com', diff --git a/packages/stage-ui/src/libs/providers/providers/google-generative-ai/index.ts b/packages/stage-ui/src/libs/providers/providers/google-generative-ai/index.ts index 0019be4c2..7792751f1 100644 --- a/packages/stage-ui/src/libs/providers/providers/google-generative-ai/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/google-generative-ai/index.ts @@ -17,6 +17,7 @@ type GoogleGenerativeConfig = z.input export const providerGoogleGenerativeAI = defineProvider({ id: 'google-generative-ai', + order: 6, name: 'Google Gemini', nameLocalize: ({ t }) => t('settings.pages.providers.provider.google-generative-ai.title'), description: 'ai.google.dev', diff --git a/packages/stage-ui/src/libs/providers/providers/ollama/index.ts b/packages/stage-ui/src/libs/providers/providers/ollama/index.ts index 4035f671b..2d16b9f92 100644 --- a/packages/stage-ui/src/libs/providers/providers/ollama/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/ollama/index.ts @@ -6,6 +6,7 @@ import { defineProvider } from '../registry' export const providerOllama = defineProvider({ id: 'ollama', + order: 2, name: 'Ollama', nameLocalize: ({ t }) => t('settings.pages.providers.provider.ollama.title'), description: 'Local Ollama server for fast model iteration.', diff --git a/packages/stage-ui/src/libs/providers/providers/openai-compatible/index.ts b/packages/stage-ui/src/libs/providers/providers/openai-compatible/index.ts index 6da9a4369..5332d4133 100644 --- a/packages/stage-ui/src/libs/providers/providers/openai-compatible/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/openai-compatible/index.ts @@ -18,6 +18,7 @@ type OpenAICompatibleConfig = z.input export const providerOpenAICompatible = defineProvider({ id: 'openai-compatible', + order: 3, name: 'OpenAI Compatible', nameLocalize: ({ t }) => t('settings.pages.providers.provider.openai-compatible.title'), description: 'OpenAI-compatible chat APIs with API key authentication.', diff --git a/packages/stage-ui/src/libs/providers/providers/openai/index.ts b/packages/stage-ui/src/libs/providers/providers/openai/index.ts index 6d6eeef98..b61f509e7 100644 --- a/packages/stage-ui/src/libs/providers/providers/openai/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/openai/index.ts @@ -17,6 +17,7 @@ type OpenAICompatibleConfig = z.input export const providerOpenAI = defineProvider({ id: 'openai', + order: 1, name: 'OpenAI', nameLocalize: ({ t }) => t('settings.pages.providers.provider.openai.title'), description: 'OpenAI', diff --git a/packages/stage-ui/src/libs/providers/providers/openrouter-ai/index.ts b/packages/stage-ui/src/libs/providers/providers/openrouter-ai/index.ts index f40c0492b..f365318dd 100644 --- a/packages/stage-ui/src/libs/providers/providers/openrouter-ai/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/openrouter-ai/index.ts @@ -17,6 +17,7 @@ type OpenRouterConfig = z.input export const providerOpenRouterAI = defineProvider({ id: 'openrouter-ai', + order: 0, name: 'OpenRouter', nameLocalize: ({ t }) => t('settings.pages.providers.provider.openrouter.title'), description: 'openrouter.ai', diff --git a/packages/stage-ui/src/libs/providers/providers/registry.ts b/packages/stage-ui/src/libs/providers/providers/registry.ts index 8d138fd4a..fb003abf1 100644 --- a/packages/stage-ui/src/libs/providers/providers/registry.ts +++ b/packages/stage-ui/src/libs/providers/providers/registry.ts @@ -3,13 +3,14 @@ import type { $ZodType } from 'zod/v4/core' import type { ProviderDefinition } from '../types' -import { sortBy } from 'es-toolkit' +import { orderBy } from 'es-toolkit' const providerRegistry = new Map() export function listProviders(): ProviderDefinition[] { - const providerDefs = Array.from(providerRegistry.values()) - return sortBy(providerDefs, [p => p.order, p => p.name.toLowerCase()]) + const providerDefs = Array.from(providerRegistry.values()).map(def => ({ order: 99999, ...def })) + const sorted = orderBy(providerDefs, [p => p.order, 'name'], ['asc', 'asc']) + return sorted } export function getDefinedProvider(id: string): ProviderDefinition | undefined {