Add Unity2.Ai provider preset and docs

This commit is contained in:
musi 2026-07-13 21:57:18 +08:00
parent f9525f469d
commit 21ab38dd47
11 changed files with 57 additions and 0 deletions

View file

@ -256,6 +256,13 @@ Codex support is powered by [musistudio/codexl](https://github.com/musistudio/co
<strong>Fenno.ai</strong>
</a>
</td>
<td align="center" width="330">
<a href="https://unity2.ai/register?source=claudecoderouter">
<img src="/docs/public/provider-icons/unity2.jpg" width="42" height="42" alt="Unity2.Ai icon" />
<br />
<strong>Unity2.Ai</strong>
</a>
</td>
</tr>
</table>

View file

@ -256,6 +256,13 @@ CCR 可以完全通过桌面 UI 完成配置。首次使用建议按下面顺序
<strong>Fenno.ai</strong>
</a>
</td>
<td align="center" width="330">
<a href="https://unity2.ai/register?source=claudecoderouter">
<img src="/docs/public/provider-icons/unity2.jpg" width="42" height="42" alt="Unity2.Ai 图标" />
<br />
<strong>Unity2.Ai</strong>
</a>
</td>
</tr>
</table>

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -78,6 +78,10 @@ Choose a provider below to get started. CCR shows what will be added before savi
<span class="provider-import-icon-shell"><img src="../../../provider-icons/teamorouter.png" alt="" loading="lazy" /></span>
<span class="provider-import-copy"><span class="provider-import-name">TeamoRouter</span><span class="provider-import-meta">Anthropic / Chat / Responses</span></span>
</a>
<a class="provider-import-button provider-unity2" href="ccr://provider?name=Unity2.Ai&amp;base_url=https%3A%2F%2Funity2.ai%2Fv1&amp;protocol=openai_chat_completions&amp;source=https%3A%2F%2Funity2.ai%2Fregister%3Fsource%3Dclaudecoderouter" aria-label="Import Unity2.Ai provider">
<span class="provider-import-icon-shell"><img src="../../../provider-icons/unity2.jpg" alt="" loading="lazy" /></span>
<span class="provider-import-copy"><span class="provider-import-name">Unity2.Ai</span><span class="provider-import-meta">OpenAI compatible gateway</span></span>
</a>
<a class="provider-import-button provider-code0" href="ccr://provider?name=code0.ai&amp;base_url=https%3A%2F%2Fconsole.code0.ai&amp;protocol=anthropic_messages&amp;source=https%3A%2F%2Fcode0.ai%2Fagent%2Fregister%2F9n9jOsSnYQoemIVL%3Futm_source%3Dclaudecoderouter%26utm_medium%3Dpartner%26utm_campaign%3Dclaudecoderouter_2026%26utm_content%3Ddefault" aria-label="Import code0.ai provider">
<span class="provider-import-icon-shell"><img src="../../../provider-icons/code0.png" alt="" loading="lazy" /></span>
<span class="provider-import-copy"><span class="provider-import-name">code0.ai</span><span class="provider-import-meta">Anthropic / Chat / Responses</span></span>

View file

@ -78,6 +78,10 @@ lead: 快速添加常见模型供应商,确认无误后即可保存,减少
<span class="provider-import-icon-shell"><img src="../../provider-icons/teamorouter.png" alt="" loading="lazy" /></span>
<span class="provider-import-copy"><span class="provider-import-name">TeamoRouter</span><span class="provider-import-meta">Anthropic / Chat / Responses</span></span>
</a>
<a class="provider-import-button provider-unity2" href="ccr://provider?name=Unity2.Ai&amp;base_url=https%3A%2F%2Funity2.ai%2Fv1&amp;protocol=openai_chat_completions&amp;source=https%3A%2F%2Funity2.ai%2Fregister%3Fsource%3Dclaudecoderouter" aria-label="导入 Unity2.Ai 供应商">
<span class="provider-import-icon-shell"><img src="../../provider-icons/unity2.jpg" alt="" loading="lazy" /></span>
<span class="provider-import-copy"><span class="provider-import-name">Unity2.Ai</span><span class="provider-import-meta">OpenAI 兼容网关</span></span>
</a>
<a class="provider-import-button provider-code0" href="ccr://provider?name=code0.ai&amp;base_url=https%3A%2F%2Fconsole.code0.ai&amp;protocol=anthropic_messages&amp;source=https%3A%2F%2Fcode0.ai%2Fagent%2Fregister%2F9n9jOsSnYQoemIVL%3Futm_source%3Dclaudecoderouter%26utm_medium%3Dpartner%26utm_campaign%3Dclaudecoderouter_2026%26utm_content%3Ddefault" aria-label="导入 code0.ai 供应商">
<span class="provider-import-icon-shell"><img src="../../provider-icons/code0.png" alt="" loading="lazy" /></span>
<span class="provider-import-copy"><span class="provider-import-name">code0.ai</span><span class="provider-import-meta">Anthropic / Chat / Responses</span></span>

View file

@ -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;

View file

@ -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
];

View file

@ -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"
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -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<string, string> = {
runapi: runapiProviderIconUrl,
siliconflow: siliconflowProviderIconUrl,
teamorouter: teamorouterProviderIconUrl,
unity2: unity2ProviderIconUrl,
"zai-global-coding": zaiGlobalCodingProviderIconUrl,
"zai-global-general": zaiGlobalGeneralProviderIconUrl,
"zhipu-cn-coding": zhipuCnCodingProviderIconUrl,

View file

@ -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", () => {