Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,6 @@ See [SPONSORS.md](./SPONSORS.md).
<td>Thanks to <a href="https://www.orcarouter.ai/?utm_source=opencodex&utm_medium=readme">OrcaRouter</a> for sponsoring this project! OrcaRouter is one OpenAI-compatible AI gateway for production AI: adaptive routing that grades every prompt and sends it to the model that clears your bar, automatic failover, routing rules as code, zero-markup provider pricing with prompt caching, and guardrails, an agent firewall, and request logs on every call across 200+ models. Pick <code>OrcaRouter</code> in the Add provider picker or run <code>ocx provider add orcarouter</code>; <code>orcarouter/auto</code> is the adaptive router.</td>
</tr>
<tr>
<td width="180"><a href="https://www.packyapi.com/register?aff=k5KT"><img src="assets/sponsors/packycode.png" alt="PackyCode" width="150"></a></td>
<td>Thanks to <a href="https://www.packyapi.com/register?aff=k5KT">PackyCode</a> for sponsoring this project! PackyCode is a stable, high-performance API relay provider, offering relay services for Claude Code, Codex, Gemini, and more. With automatic failover, smart routing, and unlimited concurrency, it turns AI into a real productivity tool. <a href="https://www.packyapi.com/register?aff=k5KT">Register via this link</a> and get started! Pick <code>PackyCode</code> in the Add provider picker or run <code>ocx provider add packycode</code>.<br><sub>PackyCode 是一家稳定、高效的 API 中转服务商,提供 Claude Code、Codex、Gemini 等多种中转服务。具备自动故障转移、智能路由和无限并发等多种功能,让 AI 编程成为真正的生产力工具。<a href="https://www.packyapi.com/register?aff=k5KT">点此链接注册</a>,立即开始使用!</sub></td>
</tr>
<tr>
<td width="180"><a href="https://tokenlab.sh/r/OPENCODEX"><picture><source media="(prefers-color-scheme: dark)" srcset="assets/sponsors/tokenlab-dark.png"><img src="assets/sponsors/tokenlab-light.png" alt="TokenLab" width="150"></picture></a></td>
<td>Thanks to <a href="https://tokenlab.sh/r/OPENCODEX">TokenLab</a> for sponsoring this project! TokenLab gives coding agents one API key for leading models, supporting OpenAI Responses and Chat Completions, Anthropic Messages, and Gemini's native API formats, with streaming and tool calling. It also provides an MCP server and agent Skills for easy integration. Choose your delivery mode and pay as you go. Pick <code>TokenLab</code> in the Add provider picker or run <code>ocx provider add tokenlab</code>.<br><sub>TokenLab 为编程智能体提供统一的多模型 API,一枚 API Key 即可接入主流模型,支持 OpenAI Responses、Chat Completions、Anthropic Messages 和 Gemini 原生 API 格式,以及流式输出和工具调用。同时提供 MCP 服务器和 Agent Skills,方便接入现有工作流;交付模式可选,按量付费。</sub></td>
</tr>
Expand Down
Binary file removed assets/sponsors/packycode-overview-mobile.png
Binary file not shown.
Binary file removed assets/sponsors/packycode-overview.png
Binary file not shown.
Binary file removed assets/sponsors/packycode-picker.png
Binary file not shown.
Binary file removed assets/sponsors/packycode-readme.png
Binary file not shown.
Binary file removed assets/sponsors/packycode.png
Binary file not shown.
6 changes: 2 additions & 4 deletions docs-site/src/content/docs/guides/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -546,13 +546,11 @@ router, `orcarouter/auto`, that grades each prompt and picks the model. Create a
[OrcaRouter console](https://www.orcarouter.ai/console); the preset pins the row near the top of the
Add provider picker and marks it as a sponsor, and nothing else about routing or defaults changes.

**PackyCode** ([sponsor](https://github.com/lidge-jun/opencodex/blob/main/SPONSORS.md)) is an API
**PackyCode** is an API
relay for Claude Code, Codex, Gemini and more. The preset targets their OpenAI-compatible Chat
Completions endpoint, `https://cf.api.fan/v1`, with live model discovery narrowed to what your
token group allows (`gpt-5.5` and `gpt-5.1-codex` are seeded). Register at
[packyapi.com](https://www.packyapi.com/register?aff=k5KT) and create a Codex-group token; the preset
pins the row near the top of the Add provider picker and marks it as a sponsor, and nothing else about
routing or defaults changes.
[packyapi.com](https://www.packyapi.com) and create a Codex-group token.

**Opper** is the EU-hosted AI gateway from Opper AI (Stockholm): one key (created at
[platform.opper.ai](https://platform.opper.ai)) and one OpenAI-compatible endpoint in front of 700+
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ const ORCAROUTER: SponsorBrand = {
const SPONSOR_BRANDS: Readonly<Record<string, SponsorBrand>> = {
orcarouter: ORCAROUTER,
"orcarouter-oauth": ORCAROUTER,
packycode: { name: "PackyCode", title: "pws.sponsor.packyTitle", description: "pws.sponsor.packyDescription" },
tokenlab: { name: "TokenLab", title: "pws.sponsor.tokenlabTitle", description: "pws.sponsor.tokenlabDescription" },
};

Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2669,8 +2669,6 @@ export const de: Record<TKey, string> = {
"modal.badge.subscriptionCli": "Abo-CLI",
"pws.sponsor.orcaTitle": "Das passende Modell für jede Anfrage",
"pws.sponsor.orcaDescription": "Ein OpenAI-kompatibles Gateway mit adaptivem Routing und automatischem Failover.",
"pws.sponsor.packyTitle": "Claude Code, Codex und Gemini an einem Ort",
"pws.sponsor.packyDescription": "Ein API-Relay für Ihre KI-Programmierwerkzeuge. Starten Sie mit einem Token der Codex-Gruppe.",
"pws.sponsor.tokenlabTitle": "Ein API-Schlüssel für führende Modelle",
"pws.sponsor.tokenlabDescription": "Responses, Chat Completions, Streaming und Tool-Aufrufe für Coding-Agenten, mit wählbarem Bereitstellungsmodus und nutzungsbasierter Abrechnung.",
"pws.sponsor.visit": "{provider} entdecken",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1564,8 +1564,6 @@ export const en = {
"modal.badge.subscriptionCli": "Subscription CLI",
"pws.sponsor.orcaTitle": "A model for every prompt",
"pws.sponsor.orcaDescription": "An OpenAI-compatible gateway with adaptive routing and automatic failover.",
"pws.sponsor.packyTitle": "Claude Code, Codex and Gemini in one place",
"pws.sponsor.packyDescription": "An API relay for your AI coding tools. Start with a Codex-group token.",
"pws.sponsor.tokenlabTitle": "One API key for leading models",
"pws.sponsor.tokenlabDescription": "Responses, Chat Completions, streaming and tool calling for coding agents, with your choice of delivery mode and pay-as-you-go billing.",
"pws.sponsor.visit": "Explore {provider}",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1537,8 +1537,6 @@ export const fr: Record<TKey, string> = {
"modal.badge.subscriptionCli": "CLI d'abonnement",
"pws.sponsor.orcaTitle": "Un modèle adapté à chaque requête",
"pws.sponsor.orcaDescription": "Une passerelle compatible OpenAI avec routage adaptatif et basculement automatique.",
"pws.sponsor.packyTitle": "Claude Code, Codex et Gemini au même endroit",
"pws.sponsor.packyDescription": "Un relais API pour vos outils de développement IA. Commencez avec un jeton du groupe Codex.",
"pws.sponsor.tokenlabTitle": "Une seule clé API pour les principaux modèles",
"pws.sponsor.tokenlabDescription": "Responses, Chat Completions, streaming et appels d’outils pour les agents de code, avec le mode de livraison de votre choix et un paiement à l’usage.",
"pws.sponsor.visit": "Découvrir {provider}",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1447,8 +1447,6 @@ export const ja: Record<TKey, string> = {
"modal.badge.subscriptionCli": "サブスク CLI",
"pws.sponsor.orcaTitle": "プロンプトに合うモデルを一か所で",
"pws.sponsor.orcaDescription": "自動ルーティングとフェイルオーバーに対応したOpenAI互換ゲートウェイです。",
"pws.sponsor.packyTitle": "Claude Code、Codex、Geminiを一か所で",
"pws.sponsor.packyDescription": "AIコーディングツール向けAPIリレーです。Codexグループのトークンで始められます。",
"pws.sponsor.tokenlabTitle": "主要モデルを1つのAPIキーで",
"pws.sponsor.tokenlabDescription": "コーディングエージェント向けにResponses、Chat Completions、ストリーミング、ツール呼び出しに対応し、配信モードを選んで従量課金で使えます。",
"pws.sponsor.visit": "{provider}を見る",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2716,8 +2716,6 @@ export const ko: Record<TKey, string> = {
"modal.badge.subscriptionCli": "구독 CLI",
"pws.sponsor.orcaTitle": "요청에 맞는 모델을 한곳에서",
"pws.sponsor.orcaDescription": "자동 라우팅과 대체 모델 연결을 지원하는 OpenAI 호환 게이트웨이입니다.",
"pws.sponsor.packyTitle": "Claude Code, Codex, Gemini를 한곳에서",
"pws.sponsor.packyDescription": "여러 AI 코딩 도구에 연결하는 API 릴레이입니다. Codex 그룹 토큰으로 시작하세요.",
"pws.sponsor.tokenlabTitle": "주요 모델을 API 키 하나로",
"pws.sponsor.tokenlabDescription": "코딩 에이전트를 위한 Responses, Chat Completions, 스트리밍, 도구 호출을 지원하며 전달 방식을 골라 쓴 만큼 결제합니다.",
"pws.sponsor.visit": "{provider} 살펴보기",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/pt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1548,8 +1548,6 @@ export const pt: Record<TKey, string> = {
"modal.badge.subscriptionCli": "CLI por assinatura",
"pws.sponsor.orcaTitle": "Um modelo para cada prompt",
"pws.sponsor.orcaDescription": "Um gateway compatível com OpenAI com roteamento adaptativo e failover automático.",
"pws.sponsor.packyTitle": "Claude Code, Codex e Gemini em um só lugar",
"pws.sponsor.packyDescription": "Um relay de API para suas ferramentas de programação com IA. Comece com um token do grupo Codex.",
"pws.sponsor.tokenlabTitle": "Uma chave de API para os principais modelos",
"pws.sponsor.tokenlabDescription": "Responses, Chat Completions, streaming e chamada de ferramentas para agentes de programação, com modo de entrega à sua escolha e cobrança conforme o uso.",
"pws.sponsor.visit": "Conhecer {provider}",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1523,8 +1523,6 @@ export const ru: Record<TKey, string> = {
"modal.badge.subscriptionCli": "CLI по подписке",
"pws.sponsor.orcaTitle": "Подходящая модель для каждого запроса",
"pws.sponsor.orcaDescription": "Совместимый с OpenAI шлюз с адаптивной маршрутизацией и автоматическим переключением.",
"pws.sponsor.packyTitle": "Claude Code, Codex и Gemini в одном месте",
"pws.sponsor.packyDescription": "API-ретранслятор для инструментов ИИ-разработки. Начните с токена группы Codex.",
"pws.sponsor.tokenlabTitle": "Один API-ключ для ведущих моделей",
"pws.sponsor.tokenlabDescription": "Responses, Chat Completions, потоковая передача и вызов инструментов для ИИ-агентов разработки с выбором режима доставки и оплатой по факту использования.",
"pws.sponsor.visit": "Подробнее о {provider}",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1550,8 +1550,6 @@ export const tr: Record<TKey, string> = {
"modal.badge.subscriptionCli": "Abonelik CLI",
"pws.sponsor.orcaTitle": "Her istem için uygun model",
"pws.sponsor.orcaDescription": "Uyarlanabilir yönlendirme ve otomatik yük devretme sunan OpenAI uyumlu bir ağ geçidi.",
"pws.sponsor.packyTitle": "Claude Code, Codex ve Gemini tek yerde",
"pws.sponsor.packyDescription": "Yapay zekâ kodlama araçlarınız için API aktarma hizmeti. Codex grubu belirteciyle başlayın.",
"pws.sponsor.tokenlabTitle": "Önde gelen modeller için tek API anahtarı",
"pws.sponsor.tokenlabDescription": "Kodlama ajanları için Responses, Chat Completions, akış ve araç çağırma desteği; teslim modunu seçip kullandıkça ödersiniz.",
"pws.sponsor.visit": "{provider} hakkında",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/vi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1536,8 +1536,6 @@ export const vi: Record<TKey, string> = {
"modal.badge.subscriptionCli": "CLI gói đăng ký",
"pws.sponsor.orcaTitle": "Một model cho mọi prompt",
"pws.sponsor.orcaDescription": "Gateway tương thích OpenAI với tính năng định tuyến thích ứng và tự động chuyển đổi dự phòng.",
"pws.sponsor.packyTitle": "Claude Code, Codex và Gemini tại một nơi",
"pws.sponsor.packyDescription": "Relay API cho các công cụ AI lập trình của bạn. Bắt đầu với token nhóm Codex.",
"pws.sponsor.tokenlabTitle": "Một API key cho các model hàng đầu",
"pws.sponsor.tokenlabDescription": "Hỗ trợ Responses, Chat Completions, streaming và gọi công cụ cho coding agent, với chế độ phân phối tùy chọn và trả theo mức sử dụng.",
"pws.sponsor.visit": "Khám phá {provider}",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1235,8 +1235,6 @@ export const zhTW: Record<TKey, string> = {
"modal.badge.subscriptionCli": "訂閱 CLI",
"pws.sponsor.orcaTitle": "為每個提示選擇合適的模型",
"pws.sponsor.orcaDescription": "相容 OpenAI 的閘道,支援自適應路由和自動容錯移轉。",
"pws.sponsor.packyTitle": "一站連接 Claude Code、Codex 和 Gemini",
"pws.sponsor.packyDescription": "適用於 AI 程式開發工具的 API 中轉服務。使用 Codex 群組權杖開始。",
"pws.sponsor.tokenlabTitle": "一個 API 金鑰,連接主流模型",
"pws.sponsor.tokenlabDescription": "為程式開發代理提供 Responses、Chat Completions、串流輸出和工具呼叫,可選擇交付模式並按用量付費。",
"pws.sponsor.visit": "了解 {provider}",
Expand Down
2 changes: 0 additions & 2 deletions gui/src/i18n/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2689,8 +2689,6 @@ export const zh: Record<TKey, string> = {
"modal.badge.subscriptionCli": "订阅 CLI",
"pws.sponsor.orcaTitle": "为每个提示选择合适的模型",
"pws.sponsor.orcaDescription": "兼容 OpenAI 的网关,支持自适应路由和自动故障转移。",
"pws.sponsor.packyTitle": "一站连接 Claude Code、Codex 和 Gemini",
"pws.sponsor.packyDescription": "面向 AI 编程工具的 API 中转服务。使用 Codex 分组令牌开始。",
"pws.sponsor.tokenlabTitle": "一个 API 密钥,连接主流模型",
"pws.sponsor.tokenlabDescription": "为编程智能体提供 Responses、Chat Completions、流式输出和工具调用,可选择交付模式并按量付费。",
"pws.sponsor.visit": "了解 {provider}",
Expand Down
4 changes: 2 additions & 2 deletions gui/tests/provider-catalog-sponsor-pinning.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ const row = (id: string, label: string, sponsor?: CatalogPreset["sponsor"]): Cat
test("sponsors are pinned first, Main before Standard, alphabetical within a tier", () => {
const input = [
row("zeta", "Zeta"),
row("packycode", "PackyCode", "standard"),
row("lumen", "Lumen", "standard"),
row("alpha", "Alpha"),
row("tokenlab", "TokenLab", "standard"),
row("orcarouter", "OrcaRouter", "standard"),
row("moon", "Moon Labs", "main"),
];
expect(pinSponsors(input).map(p => p.id)).toEqual(["moon", "orcarouter", "packycode", "tokenlab", "zeta", "alpha"]);
expect(pinSponsors(input).map(p => p.id)).toEqual(["moon", "lumen", "orcarouter", "tokenlab", "zeta", "alpha"]);
});

test("alphabetical among sponsors ignores registry position and case", () => {
Expand Down
13 changes: 4 additions & 9 deletions gui/tests/provider-sponsor-overview.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,6 @@ const orca: CatalogPreset = {
sponsorUrl: "https://www.orcarouter.ai/?utm_source=opencodex&utm_medium=readme",
dashboardUrl: "https://www.orcarouter.ai/console",
};
const packy: CatalogPreset = {
id: "packycode", label: "PackyCode", adapter: "openai-chat", auth: "key",
baseUrl: "https://cf.api.fan/v1", sponsor: "standard",
sponsorUrl: "https://www.packyapi.com/register?aff=k5KT",
dashboardUrl: "https://www.packyapi.com/register?aff=k5KT",
};
const tokenlab: CatalogPreset = {
id: "tokenlab", label: "TokenLab", adapter: "openai-chat", auth: "key",
baseUrl: "https://api.tokenlab.sh/v1", sponsor: "standard",
Expand Down Expand Up @@ -60,9 +54,10 @@ test("key and OAuth sponsor presets render disclosed links, keeping affiliate pa
}
});

test("Packy preserves its affiliate link and does not repeat an identical console link", () => {
const html = render(packy, configured(packy));
expect(html).toContain('href="https://www.packyapi.com/register?aff=k5KT"');
test("a sponsor link identical to the console link is not repeated", () => {
const sameLink = { ...tokenlab, dashboardUrl: tokenlab.sponsorUrl };
const html = render(sameLink, configured(sameLink));
expect(html).toContain('href="https://tokenlab.sh/r/OPENCODEX"');
expect(html.match(/<a /g)).toHaveLength(1);
});

Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
"assets/claude-code-models.gif",
"assets/codex-app-picker.png",
"assets/sponsors/orcarouter.png",
"assets/sponsors/packycode.png",
"assets/sponsors/tokenlab-light.png",
"assets/sponsors/tokenlab-dark.png",
"README.md",
Expand Down
4 changes: 0 additions & 4 deletions readme/README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,10 +158,6 @@ Voir [SPONSORS.md](../SPONSORS.md).
<td>Merci à <a href="https://www.orcarouter.ai/?utm_source=opencodex&utm_medium=readme">OrcaRouter</a> pour son soutien à ce projet ! OrcaRouter est une passerelle d'IA compatible OpenAI pour la production : un routage adaptatif qui évalue chaque prompt et l'envoie au modèle qui atteint votre seuil, un basculement automatique, des règles de routage sous forme de code, une tarification fournisseur sans marge avec mise en cache des prompts, ainsi que des garde-fous, un pare-feu d'agents et des journaux de requêtes sur chaque appel, parmi plus de 200 modèles. Choisissez <code>OrcaRouter</code> dans le sélecteur Add provider ou exécutez <code>ocx provider add orcarouter</code> ; <code>orcarouter/auto</code> est le routeur adaptatif.</td>
</tr>
<tr>
<td width="180"><a href="https://www.packyapi.com/register?aff=k5KT"><img src="../assets/sponsors/packycode.png" alt="PackyCode" width="150"></a></td>
<td>Merci à <a href="https://www.packyapi.com/register?aff=k5KT">PackyCode</a> pour son soutien à ce projet ! PackyCode est un fournisseur de relais API stable et performant, qui propose des services de relais pour Claude Code, Codex, Gemini et d'autres. Grâce au basculement automatique, au routage intelligent et à une concurrence illimitée, il fait de l'IA un véritable outil de productivité. <a href="https://www.packyapi.com/register?aff=k5KT">Inscrivez-vous via ce lien</a> et commencez ! Choisissez <code>PackyCode</code> dans le sélecteur Add provider ou exécutez <code>ocx provider add packycode</code>.<br><sub>PackyCode 是一家稳定、高效的 API 中转服务商,提供 Claude Code、Codex、Gemini 等多种中转服务。具备自动故障转移、智能路由和无限并发等多种功能,让 AI 编程成为真正的生产力工具。<a href="https://www.packyapi.com/register?aff=k5KT">点此链接注册</a>,立即开始使用!</sub></td>
</tr>
<tr>
<td width="180"><a href="https://tokenlab.sh/r/OPENCODEX"><picture><source media="(prefers-color-scheme: dark)" srcset="../assets/sponsors/tokenlab-dark.png"><img src="../assets/sponsors/tokenlab-light.png" alt="TokenLab" width="150"></picture></a></td>
<td>Merci à <a href="https://tokenlab.sh/r/OPENCODEX">TokenLab</a> pour son soutien à ce projet ! TokenLab donne aux agents de code une seule clé API pour les principaux modèles, avec les formats OpenAI Responses et Chat Completions, Anthropic Messages et l'API native de Gemini, streaming et appel d'outils compris. Il fournit aussi un serveur MCP et des Skills pour agents afin de faciliter l'intégration. Choisissez votre mode de livraison et payez à l'usage. Choisissez <code>TokenLab</code> dans le sélecteur Add provider ou exécutez <code>ocx provider add tokenlab</code>.<br><sub>TokenLab 为编程智能体提供统一的多模型 API,一枚 API Key 即可接入主流模型,支持 OpenAI Responses、Chat Completions、Anthropic Messages 和 Gemini 原生 API 格式,以及流式输出和工具调用。同时提供 MCP 服务器和 Agent Skills,方便接入现有工作流;交付模式可选,按量付费。</sub></td>
</tr>
Expand Down
Loading
Loading