feat(omo): integrate Oh My OpenCode profile management (#972)

* feat(omo): integrate Oh My OpenCode profile management into Provider system

Adds full-stack OMO support: backend config read/write/import, OMO-specific
provider CRUD with exclusive switching, frontend profile editor with
agent/category/model configuration, global config management, and i18n support.

* feat(omo): add model/variant dropdowns from enabled providers

Replace model text inputs with Select dropdowns sourced from enabled
OpenCode providers, add thinking-level variant selection, and prevent
auto-enabling newly added OMO providers.

* fix(omo): use standard provider action styles for OMO switch button

* fix(omo): replace hardcoded isZh strings with proper i18n t() calls
This commit is contained in:
Dex Miller
2026-02-09 12:18:20 +08:00
committed by GitHub
parent 5502c74a79
commit ed47480fc7
35 changed files with 4304 additions and 737 deletions
+14 -20
View File
@@ -1,7 +1,3 @@
/**
* OpenCode 预设供应商配置模板
* OpenCode 使用 AI SDK npm 包,配置结构与其他应用不同
*/
import type { ProviderCategory, OpenCodeProviderConfig } from "../types";
import type { PresetTheme, TemplateValueConfig } from "./claudeProviderPresets";
@@ -9,27 +5,18 @@ export interface OpenCodeProviderPreset {
name: string;
websiteUrl: string;
apiKeyUrl?: string;
/** OpenCode settings_config 结构 */
settingsConfig: OpenCodeProviderConfig;
isOfficial?: boolean;
isPartner?: boolean;
partnerPromotionKey?: string;
category?: ProviderCategory;
/** 模板变量定义 */
templateValues?: Record<string, TemplateValueConfig>;
/** 视觉主题配置 */
theme?: PresetTheme;
/** 图标名称 */
icon?: string;
/** 图标颜色 */
iconColor?: string;
/** 标记为自定义模板(用于 UI 区分) */
isCustomTemplate?: boolean;
}
/**
* OpenCode npm 包选项(AI SDK 生态)
*/
export const opencodeNpmPackages = [
{ value: "@ai-sdk/openai", label: "OpenAI" },
{ value: "@ai-sdk/openai-compatible", label: "OpenAI Compatible" },
@@ -37,11 +24,7 @@ export const opencodeNpmPackages = [
{ value: "@ai-sdk/google", label: "Google (Gemini)" },
] as const;
/**
* OpenCode 供应商预设列表
*/
export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
// ========== 国产官方 ==========
{
name: "DeepSeek",
websiteUrl: "https://platform.deepseek.com",
@@ -474,7 +457,6 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
},
// ========== 聚合网站 ==========
{
name: "AiHubMix",
websiteUrl: "https://aihubmix.com",
@@ -583,7 +565,6 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
},
// ========== 第三方合作伙伴 ==========
{
name: "PackyCode",
websiteUrl: "https://www.packyapi.com",
@@ -729,7 +710,6 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
},
// ========== 自定义模板 ==========
{
name: "OpenAI Compatible",
websiteUrl: "",
@@ -758,4 +738,18 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
},
},
{
name: "Oh My OpenCode",
websiteUrl: "https://github.com/code-yeongyu/oh-my-opencode",
settingsConfig: {
npm: "",
options: {},
models: {},
},
category: "omo" as ProviderCategory,
icon: "opencode",
iconColor: "#8B5CF6",
isCustomTemplate: true,
},
];