diff --git a/README.md b/README.md
index 966da243..7b193144 100644
--- a/README.md
+++ b/README.md
@@ -256,6 +256,13 @@ Codex support is powered by [musistudio/codexl](https://github.com/musistudio/co
Fenno.ai
+
+
+
+
+ Unity2.Ai
+
+ |
diff --git a/README_zh.md b/README_zh.md
index 2f2013b1..1aeaafb8 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -256,6 +256,13 @@ CCR 可以完全通过桌面 UI 完成配置。首次使用建议按下面顺序
Fenno.ai
+
+
+
+
+ Unity2.Ai
+
+ |
diff --git a/docs/public/provider-icons/unity2.jpg b/docs/public/provider-icons/unity2.jpg
new file mode 100644
index 00000000..e83c9e02
Binary files /dev/null and b/docs/public/provider-icons/unity2.jpg differ
diff --git a/docs/src/content/docs/en/configuration/provider-deeplink.md b/docs/src/content/docs/en/configuration/provider-deeplink.md
index 137d8d94..6399137d 100644
--- a/docs/src/content/docs/en/configuration/provider-deeplink.md
+++ b/docs/src/content/docs/en/configuration/provider-deeplink.md
@@ -78,6 +78,10 @@ Choose a provider below to get started. CCR shows what will be added before savi
TeamoRouterAnthropic / Chat / Responses
+
+
+ Unity2.AiOpenAI compatible gateway
+
code0.aiAnthropic / Chat / Responses
diff --git a/docs/src/content/docs/zh/configuration/provider-deeplink.md b/docs/src/content/docs/zh/configuration/provider-deeplink.md
index a2814711..6bcecfd5 100644
--- a/docs/src/content/docs/zh/configuration/provider-deeplink.md
+++ b/docs/src/content/docs/zh/configuration/provider-deeplink.md
@@ -78,6 +78,10 @@ lead: 快速添加常见模型供应商,确认无误后即可保存,减少
TeamoRouterAnthropic / Chat / Responses
+
+
+ Unity2.AiOpenAI 兼容网关
+
code0.aiAnthropic / Chat / Responses
diff --git a/docs/src/styles/global.css b/docs/src/styles/global.css
index 094438bf..25640e25 100644
--- a/docs/src/styles/global.css
+++ b/docs/src/styles/global.css
@@ -1318,6 +1318,12 @@ h1 {
--provider-brand-3: #f4f4f5;
}
+.doc-markdown a.provider-import-button.provider-unity2 {
+ --provider-brand: #050505;
+ --provider-brand-2: #7a7f85;
+ --provider-brand-3: #f4f5f6;
+}
+
.doc-markdown a.provider-import-button.provider-code0 {
--provider-brand: #101214;
--provider-brand-2: #267dff;
diff --git a/packages/core/src/providers/presets/index.ts b/packages/core/src/providers/presets/index.ts
index 2a56d91a..e607f39e 100644
--- a/packages/core/src/providers/presets/index.ts
+++ b/packages/core/src/providers/presets/index.ts
@@ -15,6 +15,7 @@ import { qiniuAiProviderPreset } from "@ccr/core/providers/presets/qiniu-ai/inde
import { runApiProviderPreset } from "@ccr/core/providers/presets/runapi/index";
import { siliconFlowProviderPreset } from "@ccr/core/providers/presets/siliconflow/index";
import { teamoRouterProviderPreset } from "@ccr/core/providers/presets/teamorouter/index";
+import { unity2ProviderPreset } from "@ccr/core/providers/presets/unity2/index";
import { zaiGlobalCodingProviderPreset } from "@ccr/core/providers/presets/zai-global-coding/index";
import { zaiGlobalGeneralProviderPreset } from "@ccr/core/providers/presets/zai-global-general/index";
import { zhipuCnCodingProviderPreset } from "@ccr/core/providers/presets/zhipu-cn-coding/index";
@@ -52,6 +53,7 @@ export const providerPresets: ProviderPreset[] = [
fennoProviderPreset,
runApiProviderPreset,
teamoRouterProviderPreset,
+ unity2ProviderPreset,
code0ProviderPreset,
claudeApiProviderPreset
];
diff --git a/packages/core/src/providers/presets/unity2/index.ts b/packages/core/src/providers/presets/unity2/index.ts
new file mode 100644
index 00000000..528b9b49
--- /dev/null
+++ b/packages/core/src/providers/presets/unity2/index.ts
@@ -0,0 +1,15 @@
+import { defaultProviderAccountConfig, type ProviderPreset } from "@ccr/core/providers/presets/types";
+
+export const unity2ProviderPreset: ProviderPreset = {
+ account: defaultProviderAccountConfig,
+ aliases: ["unity2", "unity2.ai", "unity2 ai", "unity 2"],
+ endpoints: [
+ {
+ baseUrl: "https://unity2.ai/v1",
+ protocols: ["openai_chat_completions"]
+ }
+ ],
+ id: "unity2",
+ name: "Unity2.Ai",
+ websiteUrl: "https://unity2.ai/register?source=claudecoderouter"
+};
diff --git a/packages/ui/src/assets/provider-icons/unity2.jpg b/packages/ui/src/assets/provider-icons/unity2.jpg
new file mode 100644
index 00000000..e83c9e02
Binary files /dev/null and b/packages/ui/src/assets/provider-icons/unity2.jpg differ
diff --git a/packages/ui/src/pages/home/shared/options.ts b/packages/ui/src/pages/home/shared/options.ts
index bb693555..2c6b74e8 100644
--- a/packages/ui/src/pages/home/shared/options.ts
+++ b/packages/ui/src/pages/home/shared/options.ts
@@ -55,6 +55,7 @@ import qiniuAiProviderIconUrl from "@/assets/provider-icons/qiniu-ai.png";
import runapiProviderIconUrl from "@/assets/provider-icons/runapi.jpg";
import siliconflowProviderIconUrl from "@/assets/provider-icons/siliconflow.png";
import teamorouterProviderIconUrl from "@/assets/provider-icons/teamorouter.png";
+import unity2ProviderIconUrl from "@/assets/provider-icons/unity2.jpg";
import zaiGlobalCodingProviderIconUrl from "@/assets/provider-icons/zai-global-coding.svg";
import zaiGlobalGeneralProviderIconUrl from "@/assets/provider-icons/zai-global-general.svg";
import zhipuCnCodingProviderIconUrl from "@/assets/provider-icons/zhipu-cn-coding.png";
@@ -339,6 +340,7 @@ export const providerPresetIconUrls: Record = {
runapi: runapiProviderIconUrl,
siliconflow: siliconflowProviderIconUrl,
teamorouter: teamorouterProviderIconUrl,
+ unity2: unity2ProviderIconUrl,
"zai-global-coding": zaiGlobalCodingProviderIconUrl,
"zai-global-general": zaiGlobalGeneralProviderIconUrl,
"zhipu-cn-coding": zhipuCnCodingProviderIconUrl,
diff --git a/tests/main/provider-preset-utils.test.mjs b/tests/main/provider-preset-utils.test.mjs
index 062f72e5..f8166e72 100644
--- a/tests/main/provider-preset-utils.test.mjs
+++ b/tests/main/provider-preset-utils.test.mjs
@@ -18,6 +18,9 @@ import {
import {
qiniuAiProviderPreset
} from "../../packages/core/src/providers/presets/qiniu-ai/index.ts";
+import {
+ unity2ProviderPreset
+} from "../../packages/core/src/providers/presets/unity2/index.ts";
const openAiPreset = {
aliases: ["OpenAI", "ChatGPT"],
@@ -85,6 +88,13 @@ test("sponsor provider presets expose requested endpoints and protocols", () =>
assert.deepEqual(qiniuAiProviderPreset.endpoints[0]?.protocols, [
"openai_chat_completions"
]);
+
+ assert.equal(unity2ProviderPreset.websiteUrl, "https://unity2.ai/register?source=claudecoderouter");
+ assert.equal(providerPresetMatchesBaseUrl(unity2ProviderPreset, "https://unity2.ai/v1/chat/completions"), true);
+ assert.equal(providerPresetMatchesBaseUrl(unity2ProviderPreset, "https://api.unity2.ai/v1"), false);
+ assert.deepEqual(unity2ProviderPreset.endpoints[0]?.protocols, [
+ "openai_chat_completions"
+ ]);
});
test("provider identity safety does not block branded third-party endpoints", () => {