From 89836141b1f3a46bf584116e803f2d54f56adac5 Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 05:17:42 +0900 Subject: [PATCH 01/10] docs: generate the client support matrix from the client registries Adds scripts/generate-client-support-matrix.ts, which builds a reference page for every docs locale from the export roster, the managed file integrations and the native integration union, and re-checks curated protocol and test claims against the code. A Bun test fails when a committed page drifts or a claim stops holding. --- docs-site/astro.config.mjs | 1 + .../docs/fr/reference/client-support.md | 59 +++ .../docs/ja/reference/client-support.md | 59 +++ .../docs/ko/reference/client-support.md | 59 +++ .../content/docs/reference/client-support.md | 59 +++ .../docs/ru/reference/client-support.md | 59 +++ .../docs/tr/reference/client-support.md | 59 +++ .../docs/zh-cn/reference/client-support.md | 59 +++ .../docs/zh-tw/reference/client-support.md | 59 +++ package.json | 2 + scripts/client-support-matrix/locales.ts | 283 ++++++++++++ scripts/client-support-matrix/metadata.ts | 248 +++++++++++ scripts/generate-client-support-matrix.ts | 402 ++++++++++++++++++ scripts/test-layout/layout.json | 2 +- structure/INDEX.md | 9 +- structure/clients/client-support-matrix.md | 42 ++ structure/manifest.json | 12 + .../client-support-matrix.test.ts | 129 ++++++ tests/fixtures/test-layout-expected.json | 1 + 19 files changed, 1598 insertions(+), 5 deletions(-) create mode 100644 docs-site/src/content/docs/fr/reference/client-support.md create mode 100644 docs-site/src/content/docs/ja/reference/client-support.md create mode 100644 docs-site/src/content/docs/ko/reference/client-support.md create mode 100644 docs-site/src/content/docs/reference/client-support.md create mode 100644 docs-site/src/content/docs/ru/reference/client-support.md create mode 100644 docs-site/src/content/docs/tr/reference/client-support.md create mode 100644 docs-site/src/content/docs/zh-cn/reference/client-support.md create mode 100644 docs-site/src/content/docs/zh-tw/reference/client-support.md create mode 100644 scripts/client-support-matrix/locales.ts create mode 100644 scripts/client-support-matrix/metadata.ts create mode 100644 scripts/generate-client-support-matrix.ts create mode 100644 structure/clients/client-support-matrix.md create mode 100644 tests/ci-workflows/client-support-matrix.test.ts diff --git a/docs-site/astro.config.mjs b/docs-site/astro.config.mjs index 89ccd0728d6..d4fb8509e9f 100644 --- a/docs-site/astro.config.mjs +++ b/docs-site/astro.config.mjs @@ -160,6 +160,7 @@ export default defineConfig({ { label: "Server & Runtime", translations: { fr: "Serveur et environnement d’exécution", ko: "서버 & 런타임", "zh-CN": "服务器与运行时", "zh-TW": "伺服器與執行階段", ru: "Сервер и рантайм", ja: "サーバー & ランタイム", tr: "Sunucu ve Çalışma Zamanı" }, slug: "reference/configuration/server" }, ], }, + { label: "Client Support", translations: { fr: "Clients pris en charge", ko: "클라이언트 지원", "zh-CN": "客户端支持", "zh-TW": "用戶端支援", ru: "Поддержка клиентов", ja: "クライアント対応", tr: "İstemci desteği" }, slug: "reference/client-support" }, { label: "Adapters", translations: { fr: "Adaptateurs", ko: "어댑터", "zh-CN": "适配器", "zh-TW": "適配器", ru: "Адаптеры", ja: "アダプター", tr: "Adaptörler" }, slug: "reference/adapters" }, { label: "Architecture", translations: { fr: "Architecture", ko: "아키텍처", "zh-CN": "架构", "zh-TW": "架構", ru: "Архитектура", ja: "アーキテクチャ", tr: "Mimari" }, slug: "reference/architecture" }, { label: "Platform Support", translations: { fr: "Prise en charge des plateformes", ko: "플랫폼 지원", "zh-CN": "平台支持", "zh-TW": "平台支援", ru: "Поддержка платформ", ja: "プラットフォーム対応", tr: "Platform Desteği" }, link: `${SITE_URL}/reference/platform-support` }, diff --git a/docs-site/src/content/docs/fr/reference/client-support.md b/docs-site/src/content/docs/fr/reference/client-support.md new file mode 100644 index 00000000000..03a0d7a1707 --- /dev/null +++ b/docs-site/src/content/docs/fr/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "Clients pris en charge" +description: "Les outils de code auxquels opencodex se connecte, la façon dont chacun est relié et le protocole qu’il utilise." +--- + + + + +opencodex est une passerelle locale unique pour vos outils de code IA et vos modèles. Il configure certains outils nativement ; pour les autres, il exporte ou gère un fichier de configuration qui dirige l’outil vers le proxy local. Cette page est générée à partir des registres du code et reflète donc exactement ce que fournit la version actuelle. + +## Niveaux de prise en charge + +- **implemented**: le client figure dans le registre. Pour les configurations exportées, le protocole indiqué est lu dans la configuration générée par opencodex, et la génération échoue s’il change. Les protocoles marqués *revu* (clients natifs et clients qui choisissent eux-mêmes leur point de terminaison) proviennent d’une revue du code d’intégration, et le générateur vérifie que ce code est toujours en place. +- **test-covered**: implemented, et un cas de test choisi en revue qui exerce ce client est lié. Le générateur vérifie seulement que le test existe toujours et qu’il est actif ; lisez-le pour savoir ce qu’il vérifie. + +## Clients + +| Client | Natif | Export de configuration | Intégration de fichier gérée | Protocole entrant | Niveau | Remarques | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | Oui | — | — | Responses (revu) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | Configuré par opencodex lui-même ; aucun fichier de configuration exporté. [guide](/fr/guides/codex-integration/) | +| Claude Code | Oui | — | — | Anthropic Messages (revu) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | Configuré par opencodex lui-même ; aucun fichier de configuration exporté. [guide](/fr/guides/claude-code/) | +| Claude Desktop | Oui | — | — | Anthropic Messages (revu) | implemented | Configuré par opencodex lui-même ; aucun fichier de configuration exporté. | +| Grok Build | Oui | — | — | Responses (revu) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | Configuré par opencodex lui-même ; aucun fichier de configuration exporté. [guide](/fr/guides/grok-build/) | +| Qoder | — | JSON | Oui | Compatible OpenAI (point de terminaison choisi par le client) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | Écoute locale uniquement. | +| Qoder CN | — | JSON | Oui | Compatible OpenAI (point de terminaison choisi par le client) | implemented | Écoute locale uniquement. | +| WorkBuddy | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | Écoute locale uniquement. L’application exécute d’abord une vérification propre au client et peut refuser. | +| WorkBuddy AI | — | JSON | Oui | Chat Completions | implemented | Écoute locale uniquement. L’application exécute d’abord une vérification propre au client et peut refuser. | +| OpenCode | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | L’export prend aussi en charge une écoute distante (il ajoute l’en-tête de clé API). [guide](/fr/guides/opencode/) | +| Pi | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Écoute locale uniquement. [guide](/fr/guides/pi/) | +| Oh My Pi (omp) | — | YAML | Oui | Chat Completions; Responses (modèles OpenAI natifs uniquement) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Écoute locale uniquement. Ne modifie que son propre bloc YAML. | +| Hermes | — | YAML | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | L’export prend aussi en charge une écoute distante (il ajoute l’en-tête de clé API). Ne modifie que son propre bloc YAML. | +| OpenClaw | — | JSON5 | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | L’export prend aussi en charge une écoute distante (il ajoute l’en-tête de clé API). | +| Kimi CLI | — | TOML | Oui | Compatible OpenAI (point de terminaison choisi par le client) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | Écoute locale uniquement. | +| Gajae | — | YAML | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | Écoute locale uniquement. | +| DSH | — | YAML | Oui | Responses | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Écoute locale uniquement. Écrit dans le magasin de fournisseurs actuel du client. Ne modifie que son propre bloc YAML. Les écritures passent par un fichier de verrou placé à côté de la configuration. | +| MCode | — | YAML | Oui | Anthropic Messages | implemented | Écoute locale uniquement. Les écritures passent par un fichier de verrou placé à côté de la configuration. | +| ZCode | — | JSON | Oui | Responses (revu) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | Écoute locale uniquement. Écrit dans le magasin de fournisseurs actuel du client. Le client choisit le point de terminaison à partir de ce réglage (vérifié en revue d’après le comportement documenté du client). | +| Command Code | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | Écoute locale uniquement. Les écritures passent par un fichier de verrou placé à côté de la configuration. | +| Prime | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | Écoute locale uniquement. | +| Aside | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | Écoute locale uniquement. | +| Raycast | — | YAML | Oui | Chat Completions (revu) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | Écoute locale uniquement. Le client choisit le point de terminaison à partir de ce réglage (vérifié en revue d’après le comportement documenté du client). | +| omo | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | Écoute locale uniquement. | +| Cline | — | JSON | Oui | Responses | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | Écoute locale uniquement. Les écritures passent par un fichier de verrou placé à côté de la configuration. | +| Kilo Code | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | L’export prend aussi en charge une écoute distante (il ajoute l’en-tête de clé API). | +| Factory Droid | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | Écoute locale uniquement. [guide](/fr/guides/factory-droid/) | +| Gentle Shell | — | JSON | Oui | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | Écoute locale uniquement. | +| T3 Code | — | JSON | Oui | Anthropic Messages | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | Écoute locale uniquement. L’application exécute d’abord une vérification propre au client et peut refuser. | + +## Points de terminaison entrants + +Le proxy accepte ces protocoles. Un outil absent de la liste peut quand même se connecter s’il permet de définir un point de terminaison personnalisé pour l’un d’eux. + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## Tenir cette page à jour + +Cette page est générée par `scripts/generate-client-support-matrix.ts` à partir des registres d’export, d’intégration gérée et d’intégration native. Pour ajouter un client, ajoutez son entrée dans `scripts/client-support-matrix/metadata.ts` puis lancez `bun run docs:clients` ; `bun run docs:clients:check` échoue tant que la page validée est obsolète. diff --git a/docs-site/src/content/docs/ja/reference/client-support.md b/docs-site/src/content/docs/ja/reference/client-support.md new file mode 100644 index 00000000000..73261e92b31 --- /dev/null +++ b/docs-site/src/content/docs/ja/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "クライアント対応" +description: "opencodex が接続するコーディングツール、それぞれの接続方法、使用するプロトコル。" +--- + + + + +opencodex は、AI コーディングツールとモデルをつなぐ 1 つのローカルゲートウェイです。一部のツールはネイティブに設定し、それ以外はローカルプロキシを指す設定ファイルをエクスポートまたは管理します。このページはコードのレジストリから生成されるため、現在のリリースの内容と正確に一致します。 + +## サポートレベル + +- **implemented**: レジストリに登録されたクライアントです。エクスポートされる設定では、表のプロトコルは opencodex が生成する設定から読み取られ、変わると生成が失敗します。*レビュー済み*と付いたプロトコル(ネイティブクライアントと、エンドポイントを自分で選ぶクライアント)は連携コードのレビューに基づくもので、レビューしたコードが残っているかを生成時に確認します。 +- **test-covered**: implemented であり、レビューで選んだこのクライアントのテストケースへのリンクがあります。生成時に確認するのはテストが存在し無効化されていないことだけです。何を検証しているかはテストを読んでください。 + +## クライアント + +| クライアント | ネイティブ | 設定エクスポート | 管理ファイル連携 | 受信プロトコル | サポートレベル | 備考 | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | はい | — | — | Responses (レビュー済み) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | opencodex が直接設定します。エクスポートされる設定ファイルはありません。 [ガイド](/ja/guides/codex-integration/) | +| Claude Code | はい | — | — | Anthropic Messages (レビュー済み) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | opencodex が直接設定します。エクスポートされる設定ファイルはありません。 [ガイド](/ja/guides/claude-code/) | +| Claude Desktop | はい | — | — | Anthropic Messages (レビュー済み) | implemented | opencodex が直接設定します。エクスポートされる設定ファイルはありません。 | +| Grok Build | はい | — | — | Responses (レビュー済み) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | opencodex が直接設定します。エクスポートされる設定ファイルはありません。 [ガイド](/ja/guides/grok-build/) | +| Qoder | — | JSON | はい | OpenAI 互換(エンドポイントはクライアントが選択) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | ローカルリスナーのみ。 | +| Qoder CN | — | JSON | はい | OpenAI 互換(エンドポイントはクライアントが選択) | implemented | ローカルリスナーのみ。 | +| WorkBuddy | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | ローカルリスナーのみ。適用前にクライアント固有のチェックを実行し、拒否することがあります。 | +| WorkBuddy AI | — | JSON | はい | Chat Completions | implemented | ローカルリスナーのみ。適用前にクライアント固有のチェックを実行し、拒否することがあります。 | +| OpenCode | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | リモートリスナーにも対応します(API キーヘッダーを追加)。 [ガイド](/ja/guides/opencode/) | +| Pi | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | ローカルリスナーのみ。 [ガイド](/ja/guides/pi/) | +| Oh My Pi (omp) | — | YAML | はい | Chat Completions; Responses (ネイティブ OpenAI モデルのみ) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | ローカルリスナーのみ。自分の YAML ブロックだけを編集します。 | +| Hermes | — | YAML | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | リモートリスナーにも対応します(API キーヘッダーを追加)。自分の YAML ブロックだけを編集します。 | +| OpenClaw | — | JSON5 | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | リモートリスナーにも対応します(API キーヘッダーを追加)。 | +| Kimi CLI | — | TOML | はい | OpenAI 互換(エンドポイントはクライアントが選択) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | ローカルリスナーのみ。 | +| Gajae | — | YAML | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | ローカルリスナーのみ。 | +| DSH | — | YAML | はい | Responses | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | ローカルリスナーのみ。クライアントの現在のプロバイダーストアに書き込みます。自分の YAML ブロックだけを編集します。設定ファイル横のロックファイルで書き込みを調整します。 | +| MCode | — | YAML | はい | Anthropic Messages | implemented | ローカルリスナーのみ。設定ファイル横のロックファイルで書き込みを調整します。 | +| ZCode | — | JSON | はい | Responses (レビュー済み) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | ローカルリスナーのみ。クライアントの現在のプロバイダーストアに書き込みます。クライアントがこの設定からエンドポイントを選びます(クライアントの文書化された動作に基づきレビュー済み)。 | +| Command Code | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | ローカルリスナーのみ。設定ファイル横のロックファイルで書き込みを調整します。 | +| Prime | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | ローカルリスナーのみ。 | +| Aside | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | ローカルリスナーのみ。 | +| Raycast | — | YAML | はい | Chat Completions (レビュー済み) | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | ローカルリスナーのみ。クライアントがこの設定からエンドポイントを選びます(クライアントの文書化された動作に基づきレビュー済み)。 | +| omo | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | ローカルリスナーのみ。 | +| Cline | — | JSON | はい | Responses | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | ローカルリスナーのみ。設定ファイル横のロックファイルで書き込みを調整します。 | +| Kilo Code | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | リモートリスナーにも対応します(API キーヘッダーを追加)。 | +| Factory Droid | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | ローカルリスナーのみ。 [ガイド](/ja/guides/factory-droid/) | +| Gentle Shell | — | JSON | はい | Chat Completions | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | ローカルリスナーのみ。 | +| T3 Code | — | JSON | はい | Anthropic Messages | test-covered ([テスト](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | ローカルリスナーのみ。適用前にクライアント固有のチェックを実行し、拒否することがあります。 | + +## 受信エンドポイント + +プロキシは次のプロトコルを受け付けます。上の表にないツールでも、いずれかのカスタムエンドポイントを設定できれば接続できます。 + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## このページを最新に保つ + +このページは `scripts/generate-client-support-matrix.ts` がエクスポート・管理連携・ネイティブ連携のレジストリから生成します。クライアントを追加するには `scripts/client-support-matrix/metadata.ts` にエントリを追加し、`bun run docs:clients` を実行してください。コミット済みのページが古いと `bun run docs:clients:check` が失敗します。 diff --git a/docs-site/src/content/docs/ko/reference/client-support.md b/docs-site/src/content/docs/ko/reference/client-support.md new file mode 100644 index 00000000000..a96f6b2e2e4 --- /dev/null +++ b/docs-site/src/content/docs/ko/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "클라이언트 지원" +description: "opencodex가 연결하는 코딩 도구, 각 도구의 연결 방식, 사용하는 프로토콜." +--- + + + + +opencodex는 AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨이입니다. 일부 도구는 직접(네이티브로) 설정하고, 나머지는 로컬 프록시를 가리키는 설정 파일을 내보내거나 관리합니다. 이 페이지는 코드 레지스트리에서 생성되므로 현재 릴리스가 제공하는 내용과 정확히 일치합니다. + +## 지원 수준 + +- **implemented**: 레지스트리에 등록된 클라이언트입니다. 내보내는 설정의 경우 표의 프로토콜은 opencodex가 생성하는 설정에서 읽으며, 바뀌면 생성이 실패합니다. *검토됨* 표시가 있는 프로토콜(네이티브 클라이언트, 엔드포인트를 스스로 고르는 클라이언트)은 연동 코드를 리뷰한 결과이며, 생성기는 리뷰한 코드가 그대로 있는지 확인합니다. +- **test-covered**: implemented이면서, 리뷰로 고른 이 클라이언트의 테스트 케이스가 링크되어 있습니다. 생성기는 테스트가 존재하고 비활성화되지 않았는지만 확인하므로, 무엇을 검증하는지는 테스트를 직접 읽어 보세요. + +## 클라이언트 + +| 클라이언트 | 네이티브 | 설정 내보내기 | 관리형 파일 연동 | 수신 프로토콜 | 지원 수준 | 참고 | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | 예 | — | — | Responses (검토됨) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | opencodex가 직접 설정하며 내보내는 설정 파일은 없습니다. [가이드](/ko/guides/codex-integration/) | +| Claude Code | 예 | — | — | Anthropic Messages (검토됨) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | opencodex가 직접 설정하며 내보내는 설정 파일은 없습니다. [가이드](/ko/guides/claude-code/) | +| Claude Desktop | 예 | — | — | Anthropic Messages (검토됨) | implemented | opencodex가 직접 설정하며 내보내는 설정 파일은 없습니다. | +| Grok Build | 예 | — | — | Responses (검토됨) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | opencodex가 직접 설정하며 내보내는 설정 파일은 없습니다. [가이드](/ko/guides/grok-build/) | +| Qoder | — | JSON | 예 | OpenAI 호환(엔드포인트는 클라이언트가 선택) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | 로컬 리스너 전용. | +| Qoder CN | — | JSON | 예 | OpenAI 호환(엔드포인트는 클라이언트가 선택) | implemented | 로컬 리스너 전용. | +| WorkBuddy | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | 로컬 리스너 전용. 적용 전에 클라이언트별 검사를 실행하며 거부할 수 있습니다. | +| WorkBuddy AI | — | JSON | 예 | Chat Completions | implemented | 로컬 리스너 전용. 적용 전에 클라이언트별 검사를 실행하며 거부할 수 있습니다. | +| OpenCode | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 원격 리스너도 지원합니다(API 키 헤더를 추가). [가이드](/ko/guides/opencode/) | +| Pi | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 로컬 리스너 전용. [가이드](/ko/guides/pi/) | +| Oh My Pi (omp) | — | YAML | 예 | Chat Completions; Responses (네이티브 OpenAI 모델만) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 로컬 리스너 전용. 자기 YAML 블록만 수정합니다. | +| Hermes | — | YAML | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | 원격 리스너도 지원합니다(API 키 헤더를 추가). 자기 YAML 블록만 수정합니다. | +| OpenClaw | — | JSON5 | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | 원격 리스너도 지원합니다(API 키 헤더를 추가). | +| Kimi CLI | — | TOML | 예 | OpenAI 호환(엔드포인트는 클라이언트가 선택) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | 로컬 리스너 전용. | +| Gajae | — | YAML | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | 로컬 리스너 전용. | +| DSH | — | YAML | 예 | Responses | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 로컬 리스너 전용. 클라이언트의 현재 provider 저장소에 씁니다. 자기 YAML 블록만 수정합니다. 설정 파일 옆 잠금 파일로 쓰기를 조율합니다. | +| MCode | — | YAML | 예 | Anthropic Messages | implemented | 로컬 리스너 전용. 설정 파일 옆 잠금 파일로 쓰기를 조율합니다. | +| ZCode | — | JSON | 예 | Responses (검토됨) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | 로컬 리스너 전용. 클라이언트의 현재 provider 저장소에 씁니다. 클라이언트가 이 설정값으로 엔드포인트를 고릅니다(클라이언트 문서 동작 기준으로 리뷰함). | +| Command Code | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | 로컬 리스너 전용. 설정 파일 옆 잠금 파일로 쓰기를 조율합니다. | +| Prime | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | 로컬 리스너 전용. | +| Aside | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | 로컬 리스너 전용. | +| Raycast | — | YAML | 예 | Chat Completions (검토됨) | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | 로컬 리스너 전용. 클라이언트가 이 설정값으로 엔드포인트를 고릅니다(클라이언트 문서 동작 기준으로 리뷰함). | +| omo | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | 로컬 리스너 전용. | +| Cline | — | JSON | 예 | Responses | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | 로컬 리스너 전용. 설정 파일 옆 잠금 파일로 쓰기를 조율합니다. | +| Kilo Code | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | 원격 리스너도 지원합니다(API 키 헤더를 추가). | +| Factory Droid | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | 로컬 리스너 전용. [가이드](/ko/guides/factory-droid/) | +| Gentle Shell | — | JSON | 예 | Chat Completions | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | 로컬 리스너 전용. | +| T3 Code | — | JSON | 예 | Anthropic Messages | test-covered ([테스트](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | 로컬 리스너 전용. 적용 전에 클라이언트별 검사를 실행하며 거부할 수 있습니다. | + +## 수신 엔드포인트 + +프록시는 아래 프로토콜을 받습니다. 위 목록에 없는 도구도 이 중 하나로 사용자 지정 엔드포인트를 설정할 수 있으면 연결할 수 있습니다. + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## 이 페이지 최신 상태 유지 + +이 페이지는 `scripts/generate-client-support-matrix.ts`가 내보내기·관리형 연동·네이티브 연동 레지스트리로부터 생성합니다. 클라이언트를 추가하려면 `scripts/client-support-matrix/metadata.ts`에 항목을 넣고 `bun run docs:clients`를 실행하세요. 커밋된 페이지가 오래되면 `bun run docs:clients:check`가 실패합니다. diff --git a/docs-site/src/content/docs/reference/client-support.md b/docs-site/src/content/docs/reference/client-support.md new file mode 100644 index 00000000000..7b228756f7a --- /dev/null +++ b/docs-site/src/content/docs/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "Client support" +description: "Which coding tools opencodex connects to, how each one is wired, and which protocol it speaks." +--- + + + + +opencodex is one local gateway for your AI coding tools and models. Some tools it configures natively; for the others it exports or manages a config file that points the tool at the local proxy. This page is generated from the code registries, so it lists exactly what the current release ships. + +## Support levels + +- **implemented**: the client is in the registry. For exported configs, the protocol shown is read from the config opencodex generates, and generation fails if it changes. Protocols marked *curated* (native clients, and clients that pick their own endpoint) come from a review of the integration code, and the generator checks that the reviewed code is still in place. +- **test-covered**: implemented, and a test case chosen in review that exercises this client is linked. The generator checks only that the test still exists and is enabled; read it to see what it asserts. + +## Clients + +| Client | Native | Config export | Managed file integration | Inbound protocol | Support level | Notes | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | Yes | — | — | Responses (curated) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | Set up by opencodex itself; no exported config file. [guide](/guides/codex-integration/) | +| Claude Code | Yes | — | — | Anthropic Messages (curated) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | Set up by opencodex itself; no exported config file. [guide](/guides/claude-code/) | +| Claude Desktop | Yes | — | — | Anthropic Messages (curated) | implemented | Set up by opencodex itself; no exported config file. | +| Grok Build | Yes | — | — | Responses (curated) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | Set up by opencodex itself; no exported config file. [guide](/guides/grok-build/) | +| Qoder | — | JSON | Yes | OpenAI-compatible (endpoint chosen by the client) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | Local listener only. | +| Qoder CN | — | JSON | Yes | OpenAI-compatible (endpoint chosen by the client) | implemented | Local listener only. | +| WorkBuddy | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | Local listener only. Apply runs a client-specific check first and can refuse. | +| WorkBuddy AI | — | JSON | Yes | Chat Completions | implemented | Local listener only. Apply runs a client-specific check first and can refuse. | +| OpenCode | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | The exporter also supports a remote listener (it adds the API key header). [guide](/guides/opencode/) | +| Pi | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Local listener only. [guide](/guides/pi/) | +| Oh My Pi (omp) | — | YAML | Yes | Chat Completions; Responses (native OpenAI models only) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Local listener only. Edits only its own YAML block. | +| Hermes | — | YAML | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | The exporter also supports a remote listener (it adds the API key header). Edits only its own YAML block. | +| OpenClaw | — | JSON5 | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | The exporter also supports a remote listener (it adds the API key header). | +| Kimi CLI | — | TOML | Yes | OpenAI-compatible (endpoint chosen by the client) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | Local listener only. | +| Gajae | — | YAML | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | Local listener only. | +| DSH | — | YAML | Yes | Responses | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Local listener only. Writes the client's current provider store. Edits only its own YAML block. Writes are coordinated through a lock file next to the config. | +| MCode | — | YAML | Yes | Anthropic Messages | implemented | Local listener only. Writes are coordinated through a lock file next to the config. | +| ZCode | — | JSON | Yes | Responses (curated) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | Local listener only. Writes the client's current provider store. The client picks the endpoint from this setting (reviewed against the client's documented behavior). | +| Command Code | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | Local listener only. Writes are coordinated through a lock file next to the config. | +| Prime | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | Local listener only. | +| Aside | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | Local listener only. | +| Raycast | — | YAML | Yes | Chat Completions (curated) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | Local listener only. The client picks the endpoint from this setting (reviewed against the client's documented behavior). | +| omo | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | Local listener only. | +| Cline | — | JSON | Yes | Responses | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | Local listener only. Writes are coordinated through a lock file next to the config. | +| Kilo Code | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | The exporter also supports a remote listener (it adds the API key header). | +| Factory Droid | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | Local listener only. [guide](/guides/factory-droid/) | +| Gentle Shell | — | JSON | Yes | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | Local listener only. | +| T3 Code | — | JSON | Yes | Anthropic Messages | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | Local listener only. Apply runs a client-specific check first and can refuse. | + +## Inbound endpoints + +The proxy accepts these protocols. A tool that is not listed above can still connect if it lets you set a custom endpoint for one of them. + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## Keeping this page current + +This page is generated by `scripts/generate-client-support-matrix.ts` from the export, managed-integration and native-integration registries. To add a client, add its entry in `scripts/client-support-matrix/metadata.ts` and run `bun run docs:clients`; `bun run docs:clients:check` fails while the committed page is stale. diff --git a/docs-site/src/content/docs/ru/reference/client-support.md b/docs-site/src/content/docs/ru/reference/client-support.md new file mode 100644 index 00000000000..cbbae2244e6 --- /dev/null +++ b/docs-site/src/content/docs/ru/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "Поддержка клиентов" +description: "К каким инструментам для кода подключается opencodex, как подключён каждый из них и какой протокол он использует." +--- + + + + +opencodex — единый локальный шлюз для ваших ИИ-инструментов для кода и моделей. Часть инструментов он настраивает нативно; для остальных он экспортирует или ведёт файл конфигурации, который направляет инструмент на локальный прокси. Страница сгенерирована из реестров в коде и поэтому в точности соответствует текущему релизу. + +## Уровни поддержки + +- **implemented**: клиент есть в реестре. Для экспортируемых конфигураций протокол берётся из конфигурации, которую генерирует opencodex, и генерация падает, если он меняется. Протоколы с пометкой *проверено* (нативные клиенты и клиенты, сами выбирающие эндпоинт) взяты из ревью кода интеграции, а генератор проверяет, что этот код на месте. +- **test-covered**: implemented, и есть ссылка на выбранный при ревью тест, который задействует этого клиента. Генератор проверяет только, что тест существует и не отключён; что именно он проверяет, смотрите в самом тесте. + +## Клиенты + +| Клиент | Нативно | Экспорт конфигурации | Управляемая интеграция файла | Входящий протокол | Уровень | Примечания | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | Да | — | — | Responses (проверено) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | Настраивается самим opencodex, без экспортируемого файла конфигурации. [руководство](/ru/guides/codex-integration/) | +| Claude Code | Да | — | — | Anthropic Messages (проверено) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | Настраивается самим opencodex, без экспортируемого файла конфигурации. [руководство](/ru/guides/claude-code/) | +| Claude Desktop | Да | — | — | Anthropic Messages (проверено) | implemented | Настраивается самим opencodex, без экспортируемого файла конфигурации. | +| Grok Build | Да | — | — | Responses (проверено) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | Настраивается самим opencodex, без экспортируемого файла конфигурации. [руководство](/ru/guides/grok-build/) | +| Qoder | — | JSON | Да | Совместим с OpenAI (эндпоинт выбирает клиент) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | Только локальный слушатель. | +| Qoder CN | — | JSON | Да | Совместим с OpenAI (эндпоинт выбирает клиент) | implemented | Только локальный слушатель. | +| WorkBuddy | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | Только локальный слушатель. Перед применением выполняется проверка, специфичная для клиента, и возможен отказ. | +| WorkBuddy AI | — | JSON | Да | Chat Completions | implemented | Только локальный слушатель. Перед применением выполняется проверка, специфичная для клиента, и возможен отказ. | +| OpenCode | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Экспорт поддерживает и удалённого слушателя (добавляет заголовок API-ключа). [руководство](/ru/guides/opencode/) | +| Pi | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Только локальный слушатель. [руководство](/ru/guides/pi/) | +| Oh My Pi (omp) | — | YAML | Да | Chat Completions; Responses (только нативные модели OpenAI) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Только локальный слушатель. Изменяет только свой YAML-блок. | +| Hermes | — | YAML | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | Экспорт поддерживает и удалённого слушателя (добавляет заголовок API-ключа). Изменяет только свой YAML-блок. | +| OpenClaw | — | JSON5 | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | Экспорт поддерживает и удалённого слушателя (добавляет заголовок API-ключа). | +| Kimi CLI | — | TOML | Да | Совместим с OpenAI (эндпоинт выбирает клиент) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | Только локальный слушатель. | +| Gajae | — | YAML | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | Только локальный слушатель. | +| DSH | — | YAML | Да | Responses | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Только локальный слушатель. Пишет в текущее хранилище провайдеров клиента. Изменяет только свой YAML-блок. Запись согласуется через файл блокировки рядом с конфигурацией. | +| MCode | — | YAML | Да | Anthropic Messages | implemented | Только локальный слушатель. Запись согласуется через файл блокировки рядом с конфигурацией. | +| ZCode | — | JSON | Да | Responses (проверено) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | Только локальный слушатель. Пишет в текущее хранилище провайдеров клиента. Клиент выбирает эндпоинт по этой настройке (проверено при ревью по документированному поведению клиента). | +| Command Code | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | Только локальный слушатель. Запись согласуется через файл блокировки рядом с конфигурацией. | +| Prime | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | Только локальный слушатель. | +| Aside | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | Только локальный слушатель. | +| Raycast | — | YAML | Да | Chat Completions (проверено) | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | Только локальный слушатель. Клиент выбирает эндпоинт по этой настройке (проверено при ревью по документированному поведению клиента). | +| omo | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | Только локальный слушатель. | +| Cline | — | JSON | Да | Responses | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | Только локальный слушатель. Запись согласуется через файл блокировки рядом с конфигурацией. | +| Kilo Code | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | Экспорт поддерживает и удалённого слушателя (добавляет заголовок API-ключа). | +| Factory Droid | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | Только локальный слушатель. [руководство](/ru/guides/factory-droid/) | +| Gentle Shell | — | JSON | Да | Chat Completions | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | Только локальный слушатель. | +| T3 Code | — | JSON | Да | Anthropic Messages | test-covered ([тест](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | Только локальный слушатель. Перед применением выполняется проверка, специфичная для клиента, и возможен отказ. | + +## Входящие эндпоинты + +Прокси принимает эти протоколы. Инструмент, которого нет в таблице, всё равно может подключиться, если позволяет задать собственный эндпоинт для одного из них. + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## Актуальность страницы + +Страница генерируется скриптом `scripts/generate-client-support-matrix.ts` из реестров экспорта, управляемых и нативных интеграций. Чтобы добавить клиента, добавьте запись в `scripts/client-support-matrix/metadata.ts` и выполните `bun run docs:clients`; `bun run docs:clients:check` падает, пока закоммиченная страница устарела. diff --git a/docs-site/src/content/docs/tr/reference/client-support.md b/docs-site/src/content/docs/tr/reference/client-support.md new file mode 100644 index 00000000000..156a58ec5fd --- /dev/null +++ b/docs-site/src/content/docs/tr/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "İstemci desteği" +description: "opencodex'in bağlandığı kodlama araçları, her birinin nasıl bağlandığı ve hangi protokolü kullandığı." +--- + + + + +opencodex, yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçididir. Bazı araçları yerel olarak yapılandırır; diğerleri için aracı yerel proxy'ye yönlendiren bir yapılandırma dosyasını dışa aktarır veya yönetir. Bu sayfa koddaki kayıtlardan üretilir; bu yüzden mevcut sürümün sunduğu şeyle birebir aynıdır. + +## Destek düzeyleri + +- **implemented**: istemci kayıtta yer alır. Dışa aktarılan yapılandırmalarda gösterilen protokol, opencodex'in ürettiği yapılandırmadan okunur ve değişirse üretim başarısız olur. *İncelendi* işaretli protokoller (yerel istemciler ve uç noktasını kendisi seçen istemciler) entegrasyon kodunun incelemesinden gelir; üretici, incelenen kodun hâlâ yerinde olduğunu denetler. +- **test-covered**: implemented olmanın yanında, incelemede seçilmiş ve bu istemciyi çalıştıran bir test durumuna bağlantı verilir. Üretici yalnızca testin hâlâ var ve etkin olduğunu denetler; neyi doğruladığını görmek için testi okuyun. + +## İstemciler + +| İstemci | Yerel | Yapılandırma dışa aktarımı | Yönetilen dosya entegrasyonu | Gelen protokol | Destek düzeyi | Notlar | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | Evet | — | — | Responses (incelendi) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | opencodex tarafından doğrudan kurulur; dışa aktarılan yapılandırma dosyası yoktur. [kılavuz](/tr/guides/codex-integration/) | +| Claude Code | Evet | — | — | Anthropic Messages (incelendi) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | opencodex tarafından doğrudan kurulur; dışa aktarılan yapılandırma dosyası yoktur. [kılavuz](/tr/guides/claude-code/) | +| Claude Desktop | Evet | — | — | Anthropic Messages (incelendi) | implemented | opencodex tarafından doğrudan kurulur; dışa aktarılan yapılandırma dosyası yoktur. | +| Grok Build | Evet | — | — | Responses (incelendi) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | opencodex tarafından doğrudan kurulur; dışa aktarılan yapılandırma dosyası yoktur. [kılavuz](/tr/guides/grok-build/) | +| Qoder | — | JSON | Evet | OpenAI uyumlu (uç noktayı istemci seçer) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | Yalnızca yerel dinleyici. | +| Qoder CN | — | JSON | Evet | OpenAI uyumlu (uç noktayı istemci seçer) | implemented | Yalnızca yerel dinleyici. | +| WorkBuddy | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | Yalnızca yerel dinleyici. Uygulamadan önce istemciye özgü bir denetim çalışır ve reddedebilir. | +| WorkBuddy AI | — | JSON | Evet | Chat Completions | implemented | Yalnızca yerel dinleyici. Uygulamadan önce istemciye özgü bir denetim çalışır ve reddedebilir. | +| OpenCode | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Dışa aktarım uzak dinleyiciyi de destekler (API anahtarı başlığını ekler). [kılavuz](/tr/guides/opencode/) | +| Pi | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Yalnızca yerel dinleyici. [kılavuz](/tr/guides/pi/) | +| Oh My Pi (omp) | — | YAML | Evet | Chat Completions; Responses (yalnızca yerel OpenAI modelleri) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Yalnızca yerel dinleyici. Yalnızca kendi YAML bloğunu düzenler. | +| Hermes | — | YAML | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | Dışa aktarım uzak dinleyiciyi de destekler (API anahtarı başlığını ekler). Yalnızca kendi YAML bloğunu düzenler. | +| OpenClaw | — | JSON5 | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | Dışa aktarım uzak dinleyiciyi de destekler (API anahtarı başlığını ekler). | +| Kimi CLI | — | TOML | Evet | OpenAI uyumlu (uç noktayı istemci seçer) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | Yalnızca yerel dinleyici. | +| Gajae | — | YAML | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | Yalnızca yerel dinleyici. | +| DSH | — | YAML | Evet | Responses | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | Yalnızca yerel dinleyici. İstemcinin güncel sağlayıcı deposuna yazar. Yalnızca kendi YAML bloğunu düzenler. Yazmalar yapılandırmanın yanındaki bir kilit dosyasıyla eşgüdümlenir. | +| MCode | — | YAML | Evet | Anthropic Messages | implemented | Yalnızca yerel dinleyici. Yazmalar yapılandırmanın yanındaki bir kilit dosyasıyla eşgüdümlenir. | +| ZCode | — | JSON | Evet | Responses (incelendi) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | Yalnızca yerel dinleyici. İstemcinin güncel sağlayıcı deposuna yazar. İstemci uç noktayı bu ayardan seçer (istemcinin belgelenmiş davranışına göre incelendi). | +| Command Code | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | Yalnızca yerel dinleyici. Yazmalar yapılandırmanın yanındaki bir kilit dosyasıyla eşgüdümlenir. | +| Prime | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | Yalnızca yerel dinleyici. | +| Aside | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | Yalnızca yerel dinleyici. | +| Raycast | — | YAML | Evet | Chat Completions (incelendi) | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | Yalnızca yerel dinleyici. İstemci uç noktayı bu ayardan seçer (istemcinin belgelenmiş davranışına göre incelendi). | +| omo | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | Yalnızca yerel dinleyici. | +| Cline | — | JSON | Evet | Responses | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | Yalnızca yerel dinleyici. Yazmalar yapılandırmanın yanındaki bir kilit dosyasıyla eşgüdümlenir. | +| Kilo Code | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | Dışa aktarım uzak dinleyiciyi de destekler (API anahtarı başlığını ekler). | +| Factory Droid | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | Yalnızca yerel dinleyici. [kılavuz](/tr/guides/factory-droid/) | +| Gentle Shell | — | JSON | Evet | Chat Completions | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | Yalnızca yerel dinleyici. | +| T3 Code | — | JSON | Evet | Anthropic Messages | test-covered ([test](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | Yalnızca yerel dinleyici. Uygulamadan önce istemciye özgü bir denetim çalışır ve reddedebilir. | + +## Gelen uç noktalar + +Proxy bu protokolleri kabul eder. Yukarıda listelenmeyen bir araç, bunlardan biri için özel uç nokta ayarlamaya izin veriyorsa yine de bağlanabilir. + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## Bu sayfayı güncel tutmak + +Bu sayfa `scripts/generate-client-support-matrix.ts` tarafından dışa aktarma, yönetilen entegrasyon ve yerel entegrasyon kayıtlarından üretilir. İstemci eklemek için `scripts/client-support-matrix/metadata.ts` dosyasına kaydını ekleyip `bun run docs:clients` çalıştırın; işlenmiş sayfa eskidiğinde `bun run docs:clients:check` başarısız olur. diff --git a/docs-site/src/content/docs/zh-cn/reference/client-support.md b/docs-site/src/content/docs/zh-cn/reference/client-support.md new file mode 100644 index 00000000000..036915a30c2 --- /dev/null +++ b/docs-site/src/content/docs/zh-cn/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "客户端支持" +description: "opencodex 能连接哪些编程工具、每个工具如何接入,以及它使用的协议。" +--- + + + + +opencodex 是一个本地网关,连接你的 AI 编程工具与模型。部分工具由它原生配置;其余工具则通过导出或托管一个指向本地代理的配置文件来接入。本页由代码中的注册表生成,因此与当前版本实际提供的内容完全一致。 + +## 支持级别 + +- **implemented**: 客户端已在注册表中。对于导出的配置,表中协议读取自 opencodex 生成的配置,一旦变化生成就会失败。标有*已审阅*的协议(原生客户端以及自行选择端点的客户端)来自对集成代码的审阅,生成器会检查被审阅的代码是否仍然存在。 +- **test-covered**: 满足 implemented,并链接了一个经评审选定、覆盖该客户端的测试用例。生成器只检查该测试仍然存在且未被禁用;它具体断言了什么,请阅读测试本身。 + +## 客户端 + +| 客户端 | 原生 | 配置导出 | 托管文件集成 | 入站协议 | 支持级别 | 说明 | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | 是 | — | — | Responses (已审阅) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | 由 opencodex 直接配置,没有导出的配置文件。 [指南](/zh-cn/guides/codex-integration/) | +| Claude Code | 是 | — | — | Anthropic Messages (已审阅) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | 由 opencodex 直接配置,没有导出的配置文件。 [指南](/zh-cn/guides/claude-code/) | +| Claude Desktop | 是 | — | — | Anthropic Messages (已审阅) | implemented | 由 opencodex 直接配置,没有导出的配置文件。 | +| Grok Build | 是 | — | — | Responses (已审阅) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | 由 opencodex 直接配置,没有导出的配置文件。 [指南](/zh-cn/guides/grok-build/) | +| Qoder | — | JSON | 是 | OpenAI 兼容(端点由客户端选择) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | 仅限本地监听。 | +| Qoder CN | — | JSON | 是 | OpenAI 兼容(端点由客户端选择) | implemented | 仅限本地监听。 | +| WorkBuddy | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | 仅限本地监听。应用前先运行针对该客户端的检查,可能拒绝。 | +| WorkBuddy AI | — | JSON | 是 | Chat Completions | implemented | 仅限本地监听。应用前先运行针对该客户端的检查,可能拒绝。 | +| OpenCode | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 导出的配置也支持远程监听(会添加 API 密钥请求头)。 [指南](/zh-cn/guides/opencode/) | +| Pi | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 仅限本地监听。 [指南](/zh-cn/guides/pi/) | +| Oh My Pi (omp) | — | YAML | 是 | Chat Completions; Responses (仅原生 OpenAI 模型) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 仅限本地监听。只修改自己的 YAML 区块。 | +| Hermes | — | YAML | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | 导出的配置也支持远程监听(会添加 API 密钥请求头)。只修改自己的 YAML 区块。 | +| OpenClaw | — | JSON5 | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | 导出的配置也支持远程监听(会添加 API 密钥请求头)。 | +| Kimi CLI | — | TOML | 是 | OpenAI 兼容(端点由客户端选择) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | 仅限本地监听。 | +| Gajae | — | YAML | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | 仅限本地监听。 | +| DSH | — | YAML | 是 | Responses | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 仅限本地监听。写入客户端当前的提供商存储。只修改自己的 YAML 区块。通过配置文件旁的锁文件协调写入。 | +| MCode | — | YAML | 是 | Anthropic Messages | implemented | 仅限本地监听。通过配置文件旁的锁文件协调写入。 | +| ZCode | — | JSON | 是 | Responses (已审阅) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | 仅限本地监听。写入客户端当前的提供商存储。客户端根据此设置选择端点(已依据客户端的文档行为评审)。 | +| Command Code | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | 仅限本地监听。通过配置文件旁的锁文件协调写入。 | +| Prime | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | 仅限本地监听。 | +| Aside | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | 仅限本地监听。 | +| Raycast | — | YAML | 是 | Chat Completions (已审阅) | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | 仅限本地监听。客户端根据此设置选择端点(已依据客户端的文档行为评审)。 | +| omo | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | 仅限本地监听。 | +| Cline | — | JSON | 是 | Responses | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | 仅限本地监听。通过配置文件旁的锁文件协调写入。 | +| Kilo Code | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | 导出的配置也支持远程监听(会添加 API 密钥请求头)。 | +| Factory Droid | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | 仅限本地监听。 [指南](/zh-cn/guides/factory-droid/) | +| Gentle Shell | — | JSON | 是 | Chat Completions | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | 仅限本地监听。 | +| T3 Code | — | JSON | 是 | Anthropic Messages | test-covered ([测试](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | 仅限本地监听。应用前先运行针对该客户端的检查,可能拒绝。 | + +## 入站端点 + +代理接受以下协议。未列在上表中的工具,只要能为其中之一设置自定义端点,也可以接入。 + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## 保持本页最新 + +本页由 `scripts/generate-client-support-matrix.ts` 根据导出、托管集成和原生集成注册表生成。要添加客户端,请在 `scripts/client-support-matrix/metadata.ts` 中添加条目并运行 `bun run docs:clients`;已提交的页面过期时,`bun run docs:clients:check` 会失败。 diff --git a/docs-site/src/content/docs/zh-tw/reference/client-support.md b/docs-site/src/content/docs/zh-tw/reference/client-support.md new file mode 100644 index 00000000000..2f4ad0f3c7b --- /dev/null +++ b/docs-site/src/content/docs/zh-tw/reference/client-support.md @@ -0,0 +1,59 @@ +--- +title: "用戶端支援" +description: "opencodex 能連接哪些程式開發工具、每個工具如何接入,以及它使用的協定。" +--- + + + + +opencodex 是一個本機閘道,連接你的 AI 程式開發工具與模型。部分工具由它原生設定;其餘工具則透過匯出或代管一個指向本機代理的設定檔來接入。本頁由程式碼中的登錄表產生,因此與目前版本實際提供的內容完全一致。 + +## 支援等級 + +- **implemented**: 用戶端已在登錄表中。對於匯出的設定,表中協定讀取自 opencodex 產生的設定,一旦變更產生就會失敗。標示*已審查*的協定(原生用戶端以及自行選擇端點的用戶端)來自對整合程式碼的審查,產生器會檢查被審查的程式碼是否仍然存在。 +- **test-covered**: 符合 implemented,並連結了一個經審查選定、涵蓋該用戶端的測試案例。產生器只檢查該測試仍然存在且未被停用;它實際驗證什麼,請閱讀測試本身。 + +## 用戶端 + +| 用戶端 | 原生 | 設定匯出 | 代管檔案整合 | 入站協定 | 支援等級 | 說明 | +| --- | --- | --- | --- | --- | --- | --- | +| Codex (CLI, app, SDK) | 是 | — | — | Responses (已審查) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/codex-integration/codex-inject-missing-config.test.ts)) | 由 opencodex 直接設定,沒有匯出的設定檔。 [指南](/zh-tw/guides/codex-integration/) | +| Claude Code | 是 | — | — | Anthropic Messages (已審查) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/claude-integration/claude-cli.test.ts)) | 由 opencodex 直接設定,沒有匯出的設定檔。 [指南](/zh-tw/guides/claude-code/) | +| Claude Desktop | 是 | — | — | Anthropic Messages (已審查) | implemented | 由 opencodex 直接設定,沒有匯出的設定檔。 | +| Grok Build | 是 | — | — | Responses (已審查) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/providers/xai/grok-config-inject.test.ts)) | 由 opencodex 直接設定,沒有匯出的設定檔。 [指南](/zh-tw/guides/grok-build/) | +| Qoder | — | JSON | 是 | OpenAI 相容(端點由用戶端選擇) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/qoder-client.test.ts)) | 僅限本機監聽。 | +| Qoder CN | — | JSON | 是 | OpenAI 相容(端點由用戶端選擇) | implemented | 僅限本機監聽。 | +| WorkBuddy | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/agent-clients.test.ts)) | 僅限本機監聽。套用前先執行該用戶端專屬的檢查,可能拒絕。 | +| WorkBuddy AI | — | JSON | 是 | Chat Completions | implemented | 僅限本機監聽。套用前先執行該用戶端專屬的檢查,可能拒絕。 | +| OpenCode | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 匯出的設定也支援遠端監聽(會加入 API 金鑰標頭)。 [指南](/zh-tw/guides/opencode/) | +| Pi | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 僅限本機監聽。 [指南](/zh-tw/guides/pi/) | +| Oh My Pi (omp) | — | YAML | 是 | Chat Completions; Responses (僅原生 OpenAI 模型) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 僅限本機監聽。只修改自己的 YAML 區塊。 | +| Hermes | — | YAML | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/hermes-catalog-refresh.test.ts)) | 匯出的設定也支援遠端監聽(會加入 API 金鑰標頭)。只修改自己的 YAML 區塊。 | +| OpenClaw | — | JSON5 | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/gui/integrations-invariants.test.ts)) | 匯出的設定也支援遠端監聽(會加入 API 金鑰標頭)。 | +| Kimi CLI | — | TOML | 是 | OpenAI 相容(端點由用戶端選擇) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export-new-clients.test.ts)) | 僅限本機監聽。 | +| Gajae | — | YAML | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-modality-enum.test.ts)) | 僅限本機監聽。 | +| DSH | — | YAML | 是 | Responses | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/config/client-config-export.test.ts)) | 僅限本機監聽。寫入用戶端目前的供應商儲存區。只修改自己的 YAML 區塊。透過設定檔旁的鎖定檔協調寫入。 | +| MCode | — | YAML | 是 | Anthropic Messages | implemented | 僅限本機監聽。透過設定檔旁的鎖定檔協調寫入。 | +| ZCode | — | JSON | 是 | Responses (已審查) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/integrations-current-store.test.ts)) | 僅限本機監聽。寫入用戶端目前的供應商儲存區。用戶端依此設定選擇端點(已依用戶端的文件行為審查)。 | +| Command Code | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/command-code-client.test.ts)) | 僅限本機監聽。透過設定檔旁的鎖定檔協調寫入。 | +| Prime | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/prime-client.test.ts)) | 僅限本機監聽。 | +| Aside | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/aside-profiles-catalog-refresh.test.ts)) | 僅限本機監聽。 | +| Raycast | — | YAML | 是 | Chat Completions (已審查) | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/raycast-client.test.ts)) | 僅限本機監聽。用戶端依此設定選擇端點(已依用戶端的文件行為審查)。 | +| omo | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/omo-client.test.ts)) | 僅限本機監聽。 | +| Cline | — | JSON | 是 | Responses | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/cline-client.test.ts)) | 僅限本機監聽。透過設定檔旁的鎖定檔協調寫入。 | +| Kilo Code | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/client-export-reasoning-controls.test.ts)) | 匯出的設定也支援遠端監聽(會加入 API 金鑰標頭)。 | +| Factory Droid | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/droid-client.test.ts)) | 僅限本機監聽。 [指南](/zh-tw/guides/factory-droid/) | +| Gentle Shell | — | JSON | 是 | Chat Completions | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/gentle-shell-client.test.ts)) | 僅限本機監聽。 | +| T3 Code | — | JSON | 是 | Anthropic Messages | test-covered ([測試](https://github.com/lidge-jun/opencodex/blob/main/tests/clients/t3code-client.test.ts)) | 僅限本機監聽。套用前先執行該用戶端專屬的檢查,可能拒絕。 | + +## 入站端點 + +代理接受以下協定。未列在上表中的工具,只要能為其中之一設定自訂端點,也可以接入。 + +- `POST /v1/responses`: Responses +- `POST /v1/chat/completions`: Chat Completions +- `POST /v1/messages`: Anthropic Messages + +## 保持本頁最新 + +本頁由 `scripts/generate-client-support-matrix.ts` 根據匯出、代管整合與原生整合登錄表產生。要新增用戶端,請在 `scripts/client-support-matrix/metadata.ts` 中加入項目並執行 `bun run docs:clients`;已提交的頁面過期時,`bun run docs:clients:check` 會失敗。 diff --git a/package.json b/package.json index c8072e12dbc..6fe62b4200b 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,8 @@ "privacy:scan": "bun scripts/privacy-scan.ts", "favicons": "bun scripts/brand-favicons.ts", "favicons:check": "bun scripts/brand-favicons.ts --check", + "docs:clients": "bun scripts/generate-client-support-matrix.ts", + "docs:clients:check": "bun scripts/generate-client-support-matrix.ts --check", "skill:surface": "bun scripts/generate-ocx-skill-surface.ts", "skill:surface:check": "bun scripts/generate-ocx-skill-surface.ts --check", "structure:index": "bun scripts/structure-ssot.ts --fix", diff --git a/scripts/client-support-matrix/locales.ts b/scripts/client-support-matrix/locales.ts new file mode 100644 index 00000000000..ba35ffc9401 --- /dev/null +++ b/scripts/client-support-matrix/locales.ts @@ -0,0 +1,283 @@ +/** + * Page chrome and note phrases for the generated client support page, one block per docs locale. + * English is canonical; every locale must define every key (enforced by the Strings type). + * Product names, protocol names and the level keywords stay in English on every page. + */ + +export interface Strings { + title: string; + description: string; + intro: string; + levelsHeading: string; + implementedDefinition: string; + testCoveredDefinition: string; + clientsHeading: string; + columns: { client: string; native: string; configExport: string; managed: string; protocol: string; level: string; notes: string }; + yes: string; + curated: string; + nativeOpenaiCondition: string; + openaiCompatible: string; + testLink: string; + guideLink: string; + notes: { + native: string; + loopbackOnly: string; + remoteWithKey: string; + currentStore: string; + sourcePreservingYaml: string; + writerLock: string; + validateApply: string; + clientSelected: string; + }; + endpointsHeading: string; + endpointsIntro: string; + maintenanceHeading: string; + maintenance: string; +} + +export const LOCALES = { + root: { + title: "Client support", + description: "Which coding tools opencodex connects to, how each one is wired, and which protocol it speaks.", + intro: "opencodex is one local gateway for your AI coding tools and models. Some tools it configures natively; for the others it exports or manages a config file that points the tool at the local proxy. This page is generated from the code registries, so it lists exactly what the current release ships.", + levelsHeading: "Support levels", + implementedDefinition: "the client is in the registry. For exported configs, the protocol shown is read from the config opencodex generates, and generation fails if it changes. Protocols marked *curated* (native clients, and clients that pick their own endpoint) come from a review of the integration code, and the generator checks that the reviewed code is still in place.", + testCoveredDefinition: "implemented, and a test case chosen in review that exercises this client is linked. The generator checks only that the test still exists and is enabled; read it to see what it asserts.", + clientsHeading: "Clients", + columns: { client: "Client", native: "Native", configExport: "Config export", managed: "Managed file integration", protocol: "Inbound protocol", level: "Support level", notes: "Notes" }, + yes: "Yes", + curated: "curated", + nativeOpenaiCondition: "native OpenAI models only", + openaiCompatible: "OpenAI-compatible (endpoint chosen by the client)", + testLink: "test", + guideLink: "guide", + notes: { + native: "Set up by opencodex itself; no exported config file.", + loopbackOnly: "Local listener only.", + remoteWithKey: "The exporter also supports a remote listener (it adds the API key header).", + currentStore: "Writes the client's current provider store.", + sourcePreservingYaml: "Edits only its own YAML block.", + writerLock: "Writes are coordinated through a lock file next to the config.", + validateApply: "Apply runs a client-specific check first and can refuse.", + clientSelected: "The client picks the endpoint from this setting (reviewed against the client's documented behavior).", + }, + endpointsHeading: "Inbound endpoints", + endpointsIntro: "The proxy accepts these protocols. A tool that is not listed above can still connect if it lets you set a custom endpoint for one of them.", + maintenanceHeading: "Keeping this page current", + maintenance: "This page is generated by `scripts/generate-client-support-matrix.ts` from the export, managed-integration and native-integration registries. To add a client, add its entry in `scripts/client-support-matrix/metadata.ts` and run `bun run docs:clients`; `bun run docs:clients:check` fails while the committed page is stale.", + }, + fr: { + title: "Clients pris en charge", + description: "Les outils de code auxquels opencodex se connecte, la façon dont chacun est relié et le protocole qu’il utilise.", + intro: "opencodex est une passerelle locale unique pour vos outils de code IA et vos modèles. Il configure certains outils nativement ; pour les autres, il exporte ou gère un fichier de configuration qui dirige l’outil vers le proxy local. Cette page est générée à partir des registres du code et reflète donc exactement ce que fournit la version actuelle.", + levelsHeading: "Niveaux de prise en charge", + implementedDefinition: "le client figure dans le registre. Pour les configurations exportées, le protocole indiqué est lu dans la configuration générée par opencodex, et la génération échoue s’il change. Les protocoles marqués *revu* (clients natifs et clients qui choisissent eux-mêmes leur point de terminaison) proviennent d’une revue du code d’intégration, et le générateur vérifie que ce code est toujours en place.", + testCoveredDefinition: "implemented, et un cas de test choisi en revue qui exerce ce client est lié. Le générateur vérifie seulement que le test existe toujours et qu’il est actif ; lisez-le pour savoir ce qu’il vérifie.", + clientsHeading: "Clients", + columns: { client: "Client", native: "Natif", configExport: "Export de configuration", managed: "Intégration de fichier gérée", protocol: "Protocole entrant", level: "Niveau", notes: "Remarques" }, + yes: "Oui", + curated: "revu", + nativeOpenaiCondition: "modèles OpenAI natifs uniquement", + openaiCompatible: "Compatible OpenAI (point de terminaison choisi par le client)", + testLink: "test", + guideLink: "guide", + notes: { + native: "Configuré par opencodex lui-même ; aucun fichier de configuration exporté.", + loopbackOnly: "Écoute locale uniquement.", + remoteWithKey: "L’export prend aussi en charge une écoute distante (il ajoute l’en-tête de clé API).", + currentStore: "Écrit dans le magasin de fournisseurs actuel du client.", + sourcePreservingYaml: "Ne modifie que son propre bloc YAML.", + writerLock: "Les écritures passent par un fichier de verrou placé à côté de la configuration.", + validateApply: "L’application exécute d’abord une vérification propre au client et peut refuser.", + clientSelected: "Le client choisit le point de terminaison à partir de ce réglage (vérifié en revue d’après le comportement documenté du client).", + }, + endpointsHeading: "Points de terminaison entrants", + endpointsIntro: "Le proxy accepte ces protocoles. Un outil absent de la liste peut quand même se connecter s’il permet de définir un point de terminaison personnalisé pour l’un d’eux.", + maintenanceHeading: "Tenir cette page à jour", + maintenance: "Cette page est générée par `scripts/generate-client-support-matrix.ts` à partir des registres d’export, d’intégration gérée et d’intégration native. Pour ajouter un client, ajoutez son entrée dans `scripts/client-support-matrix/metadata.ts` puis lancez `bun run docs:clients` ; `bun run docs:clients:check` échoue tant que la page validée est obsolète.", + }, + ko: { + title: "클라이언트 지원", + description: "opencodex가 연결하는 코딩 도구, 각 도구의 연결 방식, 사용하는 프로토콜.", + intro: "opencodex는 AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨이입니다. 일부 도구는 직접(네이티브로) 설정하고, 나머지는 로컬 프록시를 가리키는 설정 파일을 내보내거나 관리합니다. 이 페이지는 코드 레지스트리에서 생성되므로 현재 릴리스가 제공하는 내용과 정확히 일치합니다.", + levelsHeading: "지원 수준", + implementedDefinition: "레지스트리에 등록된 클라이언트입니다. 내보내는 설정의 경우 표의 프로토콜은 opencodex가 생성하는 설정에서 읽으며, 바뀌면 생성이 실패합니다. *검토됨* 표시가 있는 프로토콜(네이티브 클라이언트, 엔드포인트를 스스로 고르는 클라이언트)은 연동 코드를 리뷰한 결과이며, 생성기는 리뷰한 코드가 그대로 있는지 확인합니다.", + testCoveredDefinition: "implemented이면서, 리뷰로 고른 이 클라이언트의 테스트 케이스가 링크되어 있습니다. 생성기는 테스트가 존재하고 비활성화되지 않았는지만 확인하므로, 무엇을 검증하는지는 테스트를 직접 읽어 보세요.", + clientsHeading: "클라이언트", + columns: { client: "클라이언트", native: "네이티브", configExport: "설정 내보내기", managed: "관리형 파일 연동", protocol: "수신 프로토콜", level: "지원 수준", notes: "참고" }, + yes: "예", + curated: "검토됨", + nativeOpenaiCondition: "네이티브 OpenAI 모델만", + openaiCompatible: "OpenAI 호환(엔드포인트는 클라이언트가 선택)", + testLink: "테스트", + guideLink: "가이드", + notes: { + native: "opencodex가 직접 설정하며 내보내는 설정 파일은 없습니다.", + loopbackOnly: "로컬 리스너 전용.", + remoteWithKey: "원격 리스너도 지원합니다(API 키 헤더를 추가).", + currentStore: "클라이언트의 현재 provider 저장소에 씁니다.", + sourcePreservingYaml: "자기 YAML 블록만 수정합니다.", + writerLock: "설정 파일 옆 잠금 파일로 쓰기를 조율합니다.", + validateApply: "적용 전에 클라이언트별 검사를 실행하며 거부할 수 있습니다.", + clientSelected: "클라이언트가 이 설정값으로 엔드포인트를 고릅니다(클라이언트 문서 동작 기준으로 리뷰함).", + }, + endpointsHeading: "수신 엔드포인트", + endpointsIntro: "프록시는 아래 프로토콜을 받습니다. 위 목록에 없는 도구도 이 중 하나로 사용자 지정 엔드포인트를 설정할 수 있으면 연결할 수 있습니다.", + maintenanceHeading: "이 페이지 최신 상태 유지", + maintenance: "이 페이지는 `scripts/generate-client-support-matrix.ts`가 내보내기·관리형 연동·네이티브 연동 레지스트리로부터 생성합니다. 클라이언트를 추가하려면 `scripts/client-support-matrix/metadata.ts`에 항목을 넣고 `bun run docs:clients`를 실행하세요. 커밋된 페이지가 오래되면 `bun run docs:clients:check`가 실패합니다.", + }, + "zh-cn": { + title: "客户端支持", + description: "opencodex 能连接哪些编程工具、每个工具如何接入,以及它使用的协议。", + intro: "opencodex 是一个本地网关,连接你的 AI 编程工具与模型。部分工具由它原生配置;其余工具则通过导出或托管一个指向本地代理的配置文件来接入。本页由代码中的注册表生成,因此与当前版本实际提供的内容完全一致。", + levelsHeading: "支持级别", + implementedDefinition: "客户端已在注册表中。对于导出的配置,表中协议读取自 opencodex 生成的配置,一旦变化生成就会失败。标有*已审阅*的协议(原生客户端以及自行选择端点的客户端)来自对集成代码的审阅,生成器会检查被审阅的代码是否仍然存在。", + testCoveredDefinition: "满足 implemented,并链接了一个经评审选定、覆盖该客户端的测试用例。生成器只检查该测试仍然存在且未被禁用;它具体断言了什么,请阅读测试本身。", + clientsHeading: "客户端", + columns: { client: "客户端", native: "原生", configExport: "配置导出", managed: "托管文件集成", protocol: "入站协议", level: "支持级别", notes: "说明" }, + yes: "是", + curated: "已审阅", + nativeOpenaiCondition: "仅原生 OpenAI 模型", + openaiCompatible: "OpenAI 兼容(端点由客户端选择)", + testLink: "测试", + guideLink: "指南", + notes: { + native: "由 opencodex 直接配置,没有导出的配置文件。", + loopbackOnly: "仅限本地监听。", + remoteWithKey: "导出的配置也支持远程监听(会添加 API 密钥请求头)。", + currentStore: "写入客户端当前的提供商存储。", + sourcePreservingYaml: "只修改自己的 YAML 区块。", + writerLock: "通过配置文件旁的锁文件协调写入。", + validateApply: "应用前先运行针对该客户端的检查,可能拒绝。", + clientSelected: "客户端根据此设置选择端点(已依据客户端的文档行为评审)。", + }, + endpointsHeading: "入站端点", + endpointsIntro: "代理接受以下协议。未列在上表中的工具,只要能为其中之一设置自定义端点,也可以接入。", + maintenanceHeading: "保持本页最新", + maintenance: "本页由 `scripts/generate-client-support-matrix.ts` 根据导出、托管集成和原生集成注册表生成。要添加客户端,请在 `scripts/client-support-matrix/metadata.ts` 中添加条目并运行 `bun run docs:clients`;已提交的页面过期时,`bun run docs:clients:check` 会失败。", + }, + "zh-tw": { + title: "用戶端支援", + description: "opencodex 能連接哪些程式開發工具、每個工具如何接入,以及它使用的協定。", + intro: "opencodex 是一個本機閘道,連接你的 AI 程式開發工具與模型。部分工具由它原生設定;其餘工具則透過匯出或代管一個指向本機代理的設定檔來接入。本頁由程式碼中的登錄表產生,因此與目前版本實際提供的內容完全一致。", + levelsHeading: "支援等級", + implementedDefinition: "用戶端已在登錄表中。對於匯出的設定,表中協定讀取自 opencodex 產生的設定,一旦變更產生就會失敗。標示*已審查*的協定(原生用戶端以及自行選擇端點的用戶端)來自對整合程式碼的審查,產生器會檢查被審查的程式碼是否仍然存在。", + testCoveredDefinition: "符合 implemented,並連結了一個經審查選定、涵蓋該用戶端的測試案例。產生器只檢查該測試仍然存在且未被停用;它實際驗證什麼,請閱讀測試本身。", + clientsHeading: "用戶端", + columns: { client: "用戶端", native: "原生", configExport: "設定匯出", managed: "代管檔案整合", protocol: "入站協定", level: "支援等級", notes: "說明" }, + yes: "是", + curated: "已審查", + nativeOpenaiCondition: "僅原生 OpenAI 模型", + openaiCompatible: "OpenAI 相容(端點由用戶端選擇)", + testLink: "測試", + guideLink: "指南", + notes: { + native: "由 opencodex 直接設定,沒有匯出的設定檔。", + loopbackOnly: "僅限本機監聽。", + remoteWithKey: "匯出的設定也支援遠端監聽(會加入 API 金鑰標頭)。", + currentStore: "寫入用戶端目前的供應商儲存區。", + sourcePreservingYaml: "只修改自己的 YAML 區塊。", + writerLock: "透過設定檔旁的鎖定檔協調寫入。", + validateApply: "套用前先執行該用戶端專屬的檢查,可能拒絕。", + clientSelected: "用戶端依此設定選擇端點(已依用戶端的文件行為審查)。", + }, + endpointsHeading: "入站端點", + endpointsIntro: "代理接受以下協定。未列在上表中的工具,只要能為其中之一設定自訂端點,也可以接入。", + maintenanceHeading: "保持本頁最新", + maintenance: "本頁由 `scripts/generate-client-support-matrix.ts` 根據匯出、代管整合與原生整合登錄表產生。要新增用戶端,請在 `scripts/client-support-matrix/metadata.ts` 中加入項目並執行 `bun run docs:clients`;已提交的頁面過期時,`bun run docs:clients:check` 會失敗。", + }, + ru: { + title: "Поддержка клиентов", + description: "К каким инструментам для кода подключается opencodex, как подключён каждый из них и какой протокол он использует.", + intro: "opencodex — единый локальный шлюз для ваших ИИ-инструментов для кода и моделей. Часть инструментов он настраивает нативно; для остальных он экспортирует или ведёт файл конфигурации, который направляет инструмент на локальный прокси. Страница сгенерирована из реестров в коде и поэтому в точности соответствует текущему релизу.", + levelsHeading: "Уровни поддержки", + implementedDefinition: "клиент есть в реестре. Для экспортируемых конфигураций протокол берётся из конфигурации, которую генерирует opencodex, и генерация падает, если он меняется. Протоколы с пометкой *проверено* (нативные клиенты и клиенты, сами выбирающие эндпоинт) взяты из ревью кода интеграции, а генератор проверяет, что этот код на месте.", + testCoveredDefinition: "implemented, и есть ссылка на выбранный при ревью тест, который задействует этого клиента. Генератор проверяет только, что тест существует и не отключён; что именно он проверяет, смотрите в самом тесте.", + clientsHeading: "Клиенты", + columns: { client: "Клиент", native: "Нативно", configExport: "Экспорт конфигурации", managed: "Управляемая интеграция файла", protocol: "Входящий протокол", level: "Уровень", notes: "Примечания" }, + yes: "Да", + curated: "проверено", + nativeOpenaiCondition: "только нативные модели OpenAI", + openaiCompatible: "Совместим с OpenAI (эндпоинт выбирает клиент)", + testLink: "тест", + guideLink: "руководство", + notes: { + native: "Настраивается самим opencodex, без экспортируемого файла конфигурации.", + loopbackOnly: "Только локальный слушатель.", + remoteWithKey: "Экспорт поддерживает и удалённого слушателя (добавляет заголовок API-ключа).", + currentStore: "Пишет в текущее хранилище провайдеров клиента.", + sourcePreservingYaml: "Изменяет только свой YAML-блок.", + writerLock: "Запись согласуется через файл блокировки рядом с конфигурацией.", + validateApply: "Перед применением выполняется проверка, специфичная для клиента, и возможен отказ.", + clientSelected: "Клиент выбирает эндпоинт по этой настройке (проверено при ревью по документированному поведению клиента).", + }, + endpointsHeading: "Входящие эндпоинты", + endpointsIntro: "Прокси принимает эти протоколы. Инструмент, которого нет в таблице, всё равно может подключиться, если позволяет задать собственный эндпоинт для одного из них.", + maintenanceHeading: "Актуальность страницы", + maintenance: "Страница генерируется скриптом `scripts/generate-client-support-matrix.ts` из реестров экспорта, управляемых и нативных интеграций. Чтобы добавить клиента, добавьте запись в `scripts/client-support-matrix/metadata.ts` и выполните `bun run docs:clients`; `bun run docs:clients:check` падает, пока закоммиченная страница устарела.", + }, + ja: { + title: "クライアント対応", + description: "opencodex が接続するコーディングツール、それぞれの接続方法、使用するプロトコル。", + intro: "opencodex は、AI コーディングツールとモデルをつなぐ 1 つのローカルゲートウェイです。一部のツールはネイティブに設定し、それ以外はローカルプロキシを指す設定ファイルをエクスポートまたは管理します。このページはコードのレジストリから生成されるため、現在のリリースの内容と正確に一致します。", + levelsHeading: "サポートレベル", + implementedDefinition: "レジストリに登録されたクライアントです。エクスポートされる設定では、表のプロトコルは opencodex が生成する設定から読み取られ、変わると生成が失敗します。*レビュー済み*と付いたプロトコル(ネイティブクライアントと、エンドポイントを自分で選ぶクライアント)は連携コードのレビューに基づくもので、レビューしたコードが残っているかを生成時に確認します。", + testCoveredDefinition: "implemented であり、レビューで選んだこのクライアントのテストケースへのリンクがあります。生成時に確認するのはテストが存在し無効化されていないことだけです。何を検証しているかはテストを読んでください。", + clientsHeading: "クライアント", + columns: { client: "クライアント", native: "ネイティブ", configExport: "設定エクスポート", managed: "管理ファイル連携", protocol: "受信プロトコル", level: "サポートレベル", notes: "備考" }, + yes: "はい", + curated: "レビュー済み", + nativeOpenaiCondition: "ネイティブ OpenAI モデルのみ", + openaiCompatible: "OpenAI 互換(エンドポイントはクライアントが選択)", + testLink: "テスト", + guideLink: "ガイド", + notes: { + native: "opencodex が直接設定します。エクスポートされる設定ファイルはありません。", + loopbackOnly: "ローカルリスナーのみ。", + remoteWithKey: "リモートリスナーにも対応します(API キーヘッダーを追加)。", + currentStore: "クライアントの現在のプロバイダーストアに書き込みます。", + sourcePreservingYaml: "自分の YAML ブロックだけを編集します。", + writerLock: "設定ファイル横のロックファイルで書き込みを調整します。", + validateApply: "適用前にクライアント固有のチェックを実行し、拒否することがあります。", + clientSelected: "クライアントがこの設定からエンドポイントを選びます(クライアントの文書化された動作に基づきレビュー済み)。", + }, + endpointsHeading: "受信エンドポイント", + endpointsIntro: "プロキシは次のプロトコルを受け付けます。上の表にないツールでも、いずれかのカスタムエンドポイントを設定できれば接続できます。", + maintenanceHeading: "このページを最新に保つ", + maintenance: "このページは `scripts/generate-client-support-matrix.ts` がエクスポート・管理連携・ネイティブ連携のレジストリから生成します。クライアントを追加するには `scripts/client-support-matrix/metadata.ts` にエントリを追加し、`bun run docs:clients` を実行してください。コミット済みのページが古いと `bun run docs:clients:check` が失敗します。", + }, + tr: { + title: "İstemci desteği", + description: "opencodex'in bağlandığı kodlama araçları, her birinin nasıl bağlandığı ve hangi protokolü kullandığı.", + intro: "opencodex, yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçididir. Bazı araçları yerel olarak yapılandırır; diğerleri için aracı yerel proxy'ye yönlendiren bir yapılandırma dosyasını dışa aktarır veya yönetir. Bu sayfa koddaki kayıtlardan üretilir; bu yüzden mevcut sürümün sunduğu şeyle birebir aynıdır.", + levelsHeading: "Destek düzeyleri", + implementedDefinition: "istemci kayıtta yer alır. Dışa aktarılan yapılandırmalarda gösterilen protokol, opencodex'in ürettiği yapılandırmadan okunur ve değişirse üretim başarısız olur. *İncelendi* işaretli protokoller (yerel istemciler ve uç noktasını kendisi seçen istemciler) entegrasyon kodunun incelemesinden gelir; üretici, incelenen kodun hâlâ yerinde olduğunu denetler.", + testCoveredDefinition: "implemented olmanın yanında, incelemede seçilmiş ve bu istemciyi çalıştıran bir test durumuna bağlantı verilir. Üretici yalnızca testin hâlâ var ve etkin olduğunu denetler; neyi doğruladığını görmek için testi okuyun.", + clientsHeading: "İstemciler", + columns: { client: "İstemci", native: "Yerel", configExport: "Yapılandırma dışa aktarımı", managed: "Yönetilen dosya entegrasyonu", protocol: "Gelen protokol", level: "Destek düzeyi", notes: "Notlar" }, + yes: "Evet", + curated: "incelendi", + nativeOpenaiCondition: "yalnızca yerel OpenAI modelleri", + openaiCompatible: "OpenAI uyumlu (uç noktayı istemci seçer)", + testLink: "test", + guideLink: "kılavuz", + notes: { + native: "opencodex tarafından doğrudan kurulur; dışa aktarılan yapılandırma dosyası yoktur.", + loopbackOnly: "Yalnızca yerel dinleyici.", + remoteWithKey: "Dışa aktarım uzak dinleyiciyi de destekler (API anahtarı başlığını ekler).", + currentStore: "İstemcinin güncel sağlayıcı deposuna yazar.", + sourcePreservingYaml: "Yalnızca kendi YAML bloğunu düzenler.", + writerLock: "Yazmalar yapılandırmanın yanındaki bir kilit dosyasıyla eşgüdümlenir.", + validateApply: "Uygulamadan önce istemciye özgü bir denetim çalışır ve reddedebilir.", + clientSelected: "İstemci uç noktayı bu ayardan seçer (istemcinin belgelenmiş davranışına göre incelendi).", + }, + endpointsHeading: "Gelen uç noktalar", + endpointsIntro: "Proxy bu protokolleri kabul eder. Yukarıda listelenmeyen bir araç, bunlardan biri için özel uç nokta ayarlamaya izin veriyorsa yine de bağlanabilir.", + maintenanceHeading: "Bu sayfayı güncel tutmak", + maintenance: "Bu sayfa `scripts/generate-client-support-matrix.ts` tarafından dışa aktarma, yönetilen entegrasyon ve yerel entegrasyon kayıtlarından üretilir. İstemci eklemek için `scripts/client-support-matrix/metadata.ts` dosyasına kaydını ekleyip `bun run docs:clients` çalıştırın; işlenmiş sayfa eskidiğinde `bun run docs:clients:check` başarısız olur.", + }, +} as const satisfies Record; + +export type MatrixLocale = keyof typeof LOCALES; + + diff --git a/scripts/client-support-matrix/metadata.ts b/scripts/client-support-matrix/metadata.ts new file mode 100644 index 00000000000..85174957a50 --- /dev/null +++ b/scripts/client-support-matrix/metadata.ts @@ -0,0 +1,248 @@ +/** + * Curated facts the client registries do not carry, consumed by + * scripts/generate-client-support-matrix.ts. Every claim here is re-checked against the code + * when the page is generated, so a stale entry fails generation instead of shipping: + * + * - protocolFields: the config field(s) that carry each client's wire protocol. The generator + * builds the client's real export with a fixture catalog, reads every value at each path, and + * fails when a path yields nothing or a value is missing from the map. + * - clientSelected: the exported field names a protocol family and the client picks the endpoint. + * These are reviewed claims; reviewedSha pins the exporter file, so any edit to it asks for a + * fresh review (update the hash after re-reading the builder). + * - test: a reviewed test case that asserts this client's generated config or integration + * behavior. The generator only checks that the case exists, is not disabled, and names the + * client; it does not prove what the case asserts. + * + * Adding a client: add an entry here, then run `bun run docs:clients`. + */ + +export type MatrixProtocol = "responses" | "chat-completions" | "anthropic-messages" | "openai-compatible"; + +export interface ProtocolField { + /** Dotted path into the built config; `*` matches any key or array index. */ + path: string; + /** Exact value -> protocol, or (match: "suffix") a value suffix -> protocol. */ + values: Readonly>; + match?: "exact" | "suffix"; +} + +export interface TestReference { + file: string; + title: string; + /** At least one of these must appear in the test case body. */ + mentions: readonly string[]; +} + +export interface ExportClientMetadata { + label: string; + protocolFields: readonly ProtocolField[]; + nativeOpenaiOverride?: NativeOpenaiOverride; + clientSelected?: { file: string; anchor: string; reviewedSha: string }; + test?: TestReference; + guide?: string; +} + +/** A sentence or statement that must still be present in the implementing file. */ +export interface SourceAnchor { + file: string; + text: string; +} + +/** + * The provider default applies to every model except the native OpenAI model, whose entry + * carries this override. Checked model by model against the fixture catalog. + */ +export interface NativeOpenaiOverride { + modelsPath: string; + idKey: string; + field: string; + value: string; + protocol: MatrixProtocol; +} + +export interface NativeClientMetadata { + label: string; + /** Curated from the native integration; each anchor must still be present in its file. */ + protocols: readonly MatrixProtocol[]; + anchors: readonly SourceAnchor[]; + test?: TestReference; + guide?: string; +} + +const CHAT_API = { "openai-completions": "chat-completions" } as const; +const providersApi = (path = "providers.opencodex.api"): ProtocolField[] => [{ path, values: CHAT_API }]; +const OPENAI_FAMILY = { "openai-compatible": "openai-compatible", openai: "openai-compatible" } as const; +const AI_SDK = { "@ai-sdk/openai-compatible": "chat-completions" } as const; + +export const EXPORT_CLIENT_METADATA: Readonly> = { + qoder: { + label: "Qoder", + protocolFields: [{ path: "providers.opencodex.type", values: OPENAI_FAMILY }, { path: "providers.opencodex.protocol", values: OPENAI_FAMILY }], + test: { file: "tests/clients/qoder-client.test.ts", title: "exports only the provider catalog with normalized model order and context limits", mentions: ["qoder"] }, + }, + "qoder-cn": { + label: "Qoder CN", + protocolFields: [{ path: "providers.opencodex.type", values: OPENAI_FAMILY }, { path: "providers.opencodex.protocol", values: OPENAI_FAMILY }], + }, + workbuddy: { + label: "WorkBuddy", + protocolFields: [{ path: "models.*.url", values: { "/chat/completions": "chat-completions" }, match: "suffix" }], + test: { file: "tests/clients/agent-clients.test.ts", title: "WorkBuddy exports canonical selectors, full chat URL and declared capabilities only", mentions: ["workbuddy"] }, + }, + "workbuddy-ai": { + label: "WorkBuddy AI", + protocolFields: [{ path: "models.*.url", values: { "/chat/completions": "chat-completions" }, match: "suffix" }], + }, + opencode: { + label: "OpenCode", + protocolFields: [{ path: "provider.opencodex.npm", values: AI_SDK }], + test: { file: "tests/config/client-config-export.test.ts", title: "carries the V1 schema and only the opencodex provider key", mentions: ["opencode"] }, + guide: "guides/opencode", + }, + pi: { + label: "Pi", + protocolFields: providersApi(), + test: { file: "tests/config/client-config-export.test.ts", title: "tells Pi to send system instead of developer, on export and contribution alike (#5664)", mentions: ["\"pi\""] }, + guide: "guides/pi", + }, + omp: { + label: "Oh My Pi (omp)", + protocolFields: providersApi(), + nativeOpenaiOverride: { modelsPath: "providers.opencodex.models", idKey: "id", field: "api", value: "openai-responses", protocol: "responses" }, + test: { file: "tests/config/client-config-export.test.ts", title: "keeps the provider on completions while opting native OpenAI models into Responses", mentions: ["omp"] }, + }, + hermes: { + label: "Hermes", + protocolFields: [{ path: "providers.opencodex.api_mode", values: { chat_completions: "chat-completions" } }], + test: { file: "tests/clients/hermes-catalog-refresh.test.ts", title: "a connected Hermes block refreshes its models and keeps unrelated YAML bytes and comments", mentions: ["hermes"] }, + }, + openclaw: { + label: "OpenClaw", + protocolFields: providersApi("models.providers.opencodex.api"), + test: { file: "tests/gui/integrations-invariants.test.ts", title: "OPENCLAW_CONFIG_PATH is where apply writes and disable removes", mentions: ["openclaw"] }, + }, + kimi: { + label: "Kimi CLI", + protocolFields: [{ path: "providers.opencodex.type", values: OPENAI_FAMILY }], + test: { file: "tests/config/client-config-export-new-clients.test.ts", title: "uses the loopback placeholder because Kimi reads no environment", mentions: ["kimi"] }, + }, + gajae: { + label: "Gajae", + protocolFields: providersApi(), + test: { file: "tests/clients/client-export-modality-enum.test.ts", title: "audio is dropped from a mixed Gajae entry rather than written through", mentions: ["gajae"] }, + }, + dsh: { + label: "DSH", + protocolFields: [{ path: "llm-pi-ai.providers.opencodex.api", values: { "openai-responses": "responses" } }], + test: { file: "tests/config/client-config-export.test.ts", title: "owns only llm-pi-ai.providers.opencodex with a loopback Responses profile", mentions: ["dsh"] }, + }, + mcode: { + label: "MCode", + protocolFields: [{ path: "custom_provider.opencodex.api", values: { "anthropic-messages": "anthropic-messages" } }], + }, + zcode: { + label: "ZCode", + protocolFields: [{ path: "provider.opencodex.kind", values: { openai: "responses" } }], + clientSelected: { + file: "src/clients/config-export/zcode.ts", + anchor: "`kind: \"openai\"` selects the OpenAI Responses protocol", + reviewedSha: "3b2c3e6eefb5e382510db754920fe5bc9ba47c2c9db8a6a17e715b04eeb070c5", + }, + test: { file: "tests/clients/integrations-current-store.test.ts", title: "enable puts the intended provider in the store, and leaves the config file alone", mentions: ["zcode"] }, + }, + commandcode: { + label: "Command Code", + protocolFields: providersApi("provider.opencodex.api"), + test: { file: "tests/clients/command-code-client.test.ts", title: "adds only provider.opencodex, wired to the loopback proxy", mentions: ["commandcode", "CommandCode"] }, + }, + prime: { + label: "Prime", + protocolFields: providersApi(), + test: { file: "tests/clients/prime-client.test.ts", title: "adds only providers.opencodex, wired to the loopback proxy", mentions: ["prime", "Prime"] }, + }, + aside: { + label: "Aside", + protocolFields: providersApi(), + test: { file: "tests/clients/aside-profiles-catalog-refresh.test.ts", title: "catalog refreshOnly updates the owned Aside profile and leaves its unowned peer alone", mentions: ["aside", "Aside"] }, + }, + raycast: { + label: "Raycast", + protocolFields: [{ path: "providers.*.base_url", values: { "/v1": "chat-completions" }, match: "suffix" }], + clientSelected: { + file: "src/clients/config-export/raycast.ts", + anchor: "Raycast appends `/chat/completions` to `base_url`", + reviewedSha: "624cf5c2acf9e5ad9fb2da54e8a3b80a6ec3c2dfc0303c1724497788d51d222c", + }, + test: { file: "tests/clients/raycast-client.test.ts", title: "emits one provider element with the documented field vocabulary", mentions: ["raycast", "Raycast"] }, + }, + omo: { + label: "omo", + protocolFields: providersApi(), + test: { file: "tests/clients/omo-client.test.ts", title: "adds only providers.opencodex, wired to the loopback proxy", mentions: ["omo"] }, + }, + cline: { + label: "Cline", + protocolFields: [ + { path: "settings.providers.opencodex.settings.protocol", values: { "openai-responses": "responses" } }, + { path: "catalog.providers.opencodex.provider.protocol", values: { "openai-responses": "responses" } }, + ], + test: { file: "tests/clients/cline-client.test.ts", title: "emits separate native documents with canonical selectors and no invented limits", mentions: ["cline", "Cline"] }, + }, + kilo: { + label: "Kilo Code", + protocolFields: [{ path: "provider.opencodex.npm", values: AI_SDK }], + test: { file: "tests/clients/client-export-reasoning-controls.test.ts", title: "both generations and Kilo preserve limits, defaults, capabilities and exact effort choices", mentions: ["kilo"] }, + }, + droid: { + label: "Factory Droid", + protocolFields: [{ path: "customModels.*.provider", values: { "generic-chat-completion-api": "chat-completions" } }], + test: { file: "tests/clients/droid-client.test.ts", title: "exports only supported fields with a keyless loopback gateway", mentions: ["droid", "Droid"] }, + guide: "guides/factory-droid", + }, + "gentle-shell": { + label: "Gentle Shell", + protocolFields: providersApi(), + test: { file: "tests/clients/gentle-shell-client.test.ts", title: "Gentle Shell export reuses Pi protocol and stamps independent ownership", mentions: ["gentle-shell"] }, + }, + t3code: { + label: "T3 Code", + protocolFields: [{ path: "providerInstances.opencodex.driver", values: { claudeAgent: "anthropic-messages" } }], + test: { file: "tests/clients/t3code-client.test.ts", title: "the provider instance routes T3 Code's Claude driver through the proxy origin with a non-secret marker", mentions: ["t3code", "T3"] }, + }, +}; + +/** + * Native owners. Keys must equal the NativeIntegrationClientId union in + * src/server/management/native-integration-routes.ts; the generator parses that declaration and + * fails on any difference in either direction. + */ +export const NATIVE_CLIENT_METADATA: Readonly> = { + codex: { + label: "Codex (CLI, app, SDK)", + protocols: ["responses"], + anchors: [{ file: "src/codex/inject.ts", text: "openai_base_url" }], + test: { file: "tests/codex-integration/codex-inject-missing-config.test.ts", title: "a Codex home without config.toml is bootstrapped and routed", mentions: ["runInject"] }, + guide: "guides/codex-integration", + }, + claude: { + label: "Claude Code", + protocols: ["anthropic-messages"], + anchors: [{ file: "src/cli/claude.ts", text: 'setDefault("ANTHROPIC_BASE_URL", managedBaseUrl);' }], + test: { file: "tests/claude-integration/claude-cli.test.ts", title: "routes unless configured or live Claude routing is explicitly disabled", mentions: ["Claude", "claude"] }, + guide: "guides/claude-code", + }, + "claude-desktop": { + label: "Claude Desktop", + protocols: ["anthropic-messages"], + anchors: [{ file: "src/claude/desktop-3p.ts", text: 'inferenceProvider: "gateway",' }], + }, + grok: { + label: "Grok Build", + protocols: ["responses"], + anchors: [{ file: "src/grok/inject.ts", text: "'api_backend = \"responses\"'," }], + test: { file: "tests/providers/xai/grok-config-inject.test.ts", title: "creates and strips a fresh config", mentions: ["injectGrokConfig", "grok"] }, + guide: "guides/grok-build", + }, +}; + + diff --git a/scripts/generate-client-support-matrix.ts b/scripts/generate-client-support-matrix.ts new file mode 100644 index 00000000000..1fbab318a0a --- /dev/null +++ b/scripts/generate-client-support-matrix.ts @@ -0,0 +1,402 @@ +/** + * Generate the client support matrix pages under docs-site/ from the client registries. + * + * bun scripts/generate-client-support-matrix.ts # write every locale page + * bun scripts/generate-client-support-matrix.ts --check # exit 1 when a committed page is stale + * + * Rows come from three registries: the export roster (EXPORT_CLIENT_IDS / EXPORT_CLIENTS), the + * managed file integrations (INTEGRATION_CLIENTS) and the native owners (the + * NativeIntegrationClientId union, parsed from its declaration). Curated facts live in + * scripts/client-support-matrix/metadata.ts and are re-checked against the code here, so a stale + * claim fails generation instead of shipping. Rendering is pure; I/O stays in the CLI entry point. + */ +import { createHash } from "node:crypto"; +import { existsSync, readFileSync, writeFileSync } from "node:fs"; +import { join } from "node:path"; +import { EXPORT_CLIENT_IDS } from "../src/clients/client-ids"; +import { EXPORT_CLIENTS, buildClientConfigText, type ExportContext, type ExportModel } from "../src/clients/config-export"; +import { INTEGRATION_CLIENTS } from "../src/integrations/registry"; +import { CONFIGURABLE_JSON_BODY_ROUTES } from "../src/server/inbound-body-admission"; +import type { OcxConfig } from "../src/types"; +import { + EXPORT_CLIENT_METADATA, + NATIVE_CLIENT_METADATA, + type ExportClientMetadata, + type MatrixProtocol, + type NativeClientMetadata, + type TestReference, +} from "./client-support-matrix/metadata"; +import { LOCALES, type MatrixLocale, type Strings } from "./client-support-matrix/locales"; + +export const NATIVE_ROSTER_FILE = "src/server/management/native-integration-routes.ts"; +const PAGE = "reference/client-support.md"; +const OWNER = "GENERATED by scripts/generate-client-support-matrix.ts"; +const REPO_BLOB = "https://github.com/lidge-jun/opencodex/blob/main/"; +const REPO_ROOT = join(import.meta.dir, ".."); + +const PROTOCOL_NAMES: Record, string> = { + responses: "Responses", + "chat-completions": "Chat Completions", + "anthropic-messages": "Anthropic Messages", +}; +/** Inbound endpoint per protocol; each must be a route the proxy admits. */ +const ENDPOINTS: ReadonlyArray<{ protocol: Exclude; route: string }> = [ + { protocol: "responses", route: "/v1/responses" }, + { protocol: "chat-completions", route: "/v1/chat/completions" }, + { protocol: "anthropic-messages", route: "/v1/messages" }, +]; + +// Fixture catalog for protocol checks: one routed model and one native OpenAI model, no secrets, +// loopback listener. Never used to resolve a destination or touch a client's files. +export const FIXTURE_NATIVE_MODEL_ID = "gpt-5.5"; +const FIXTURE_MODELS: ExportModel[] = [ + { namespaced: "anthropic/claude-opus-4-8", provider: "anthropic", id: "claude-opus-4-8", contextWindow: 200_000, inputModalities: ["text"] }, + { namespaced: FIXTURE_NATIVE_MODEL_ID, provider: "openai", id: FIXTURE_NATIVE_MODEL_ID, native: true, contextWindow: 400_000, inputModalities: ["text"] }, +]; +const FIXTURE_CONFIG = { port: 10100, hostname: "127.0.0.1", defaultProvider: "fixture", providers: {} } as unknown as OcxConfig; +const FIXTURE_CONTEXT: ExportContext = { baseUrl: "http://127.0.0.1:10100/v1", models: FIXTURE_MODELS, config: FIXTURE_CONFIG }; + +export interface ExportSpecFacts { + format: string; + loopbackOnly: boolean; + validateApply?: unknown; +} +export interface IntegrationSpecFacts { + currentStore?: unknown; + sourcePreservingYaml?: unknown; + writerLock?: unknown; +} + +/** Everything the generator reads, injectable so tests can mutate one input at a time. */ +export interface MatrixInputs { + exportIds: readonly string[]; + exportSpecs: Readonly>; + integrationSpecs: Readonly>; + inboundRoutes: ReadonlySet; + buildDocument: (id: string) => unknown; + readRepoFile: (path: string) => string | undefined; + exportMetadata: Readonly>; + nativeMetadata: Readonly>; +} + +export function defaultInputs(): MatrixInputs { + return { + exportIds: EXPORT_CLIENT_IDS, + exportSpecs: EXPORT_CLIENTS, + integrationSpecs: INTEGRATION_CLIENTS, + inboundRoutes: CONFIGURABLE_JSON_BODY_ROUTES, + buildDocument: id => buildClientConfigText(id as (typeof EXPORT_CLIENT_IDS)[number], FIXTURE_CONTEXT).document, + readRepoFile: path => { + const file = join(REPO_ROOT, path); + return existsSync(file) ? readFileSync(file, "utf8") : undefined; + }, + exportMetadata: EXPORT_CLIENT_METADATA, + nativeMetadata: NATIVE_CLIENT_METADATA, + }; +} + +type NoteKey = keyof Strings["notes"]; +type ProtocolCell = { protocol: MatrixProtocol; nativeOpenaiOnly?: boolean }; +export interface MatrixRow { + id: string; + label: string; + native: boolean; + configExport?: string; + managed: boolean; + protocols: ProtocolCell[]; + curated: boolean; + test?: TestReference; + notes: NoteKey[]; + guide?: string; +} + +export class MatrixError extends Error { + constructor(readonly problems: readonly string[]) { + super(`Client support matrix cannot be generated:\n${problems.map(p => ` - ${p}`).join("\n")}\n` + + "Fix scripts/client-support-matrix/metadata.ts (or the code it describes), then run: bun run docs:clients"); + } +} + +/** Parse `export type NativeIntegrationClientId = "a" | "b";`. Any other shape is refused. */ +export function parseNativeRoster(source: string): string[] { + const match = /^export type NativeIntegrationClientId = ([^;\n]+);$/m.exec(source); + if (!match) throw new MatrixError([`${NATIVE_ROSTER_FILE} no longer declares NativeIntegrationClientId as a one-line union; update parseNativeRoster`]); + const members = match[1]!.split("|").map(part => part.trim()); + const ids = members.map(member => /^"([a-z0-9-]+)"$/.exec(member)?.[1]); + if (ids.some(id => id === undefined)) { + throw new MatrixError([`NativeIntegrationClientId is not a pure string-literal union: ${match[1]}`]); + } + return ids as string[]; +} + +/** Values at a dotted path; `*` matches every key or array index. */ +export function valuesAt(document: unknown, path: string): unknown[] { + let current: unknown[] = [document]; + for (const segment of path.split(".")) { + const next: unknown[] = []; + for (const value of current) { + if (value === null || typeof value !== "object") continue; + if (segment === "*") next.push(...Object.values(value as Record)); + else if (Object.prototype.hasOwnProperty.call(value, segment)) next.push((value as Record)[segment]); + } + current = next; + } + return current; +} + +function sha256(text: string): string { + return createHash("sha256").update(text).digest("hex"); +} + +function exportProtocols(id: string, meta: ExportClientMetadata, inputs: MatrixInputs, problems: string[]): ProtocolCell[] { + let document: unknown; + try { + document = inputs.buildDocument(id); + } catch (error) { + problems.push(`${id}: building the fixture export failed: ${(error as Error).message}`); + return []; + } + const seen = new Set(); + for (const field of meta.protocolFields) { + const values = valuesAt(document, field.path); + if (values.length === 0) { + problems.push(`${id}: protocol field ${field.path} is missing from the generated config`); + continue; + } + for (const value of values) { + const text = String(value); + const key = field.match === "suffix" + ? Object.keys(field.values).find(suffix => text.endsWith(suffix)) + : Object.prototype.hasOwnProperty.call(field.values, text) ? text : undefined; + if (key === undefined) problems.push(`${id}: ${field.path} = ${JSON.stringify(text)} is not a protocol value this matrix knows`); + else seen.add(field.values[key]!); + } + } + const cells: ProtocolCell[] = [...seen].map(protocol => ({ protocol })); + const override = meta.nativeOpenaiOverride; + if (override) { + const entries = valuesAt(document, override.modelsPath).flatMap(list => Array.isArray(list) ? list : Object.values(list as object)); + const entryId = (entry: unknown) => (entry as Record)?.[override.idKey]; + const nativeEntry = entries.find(entry => entryId(entry) === FIXTURE_NATIVE_MODEL_ID); + if (!nativeEntry) problems.push(`${id}: no model entry for the native OpenAI fixture model at ${override.modelsPath}`); + else if ((nativeEntry as Record)[override.field] !== override.value) { + problems.push(`${id}: the native OpenAI model no longer carries ${override.field} = ${override.value}`); + } + for (const entry of entries) { + if (entryId(entry) === FIXTURE_NATIVE_MODEL_ID) continue; + if ((entry as Record)?.[override.field] !== undefined) { + problems.push(`${id}: model ${String(entryId(entry))} carries ${override.field}; the override is documented for native OpenAI models only`); + } + } + cells.push({ protocol: override.protocol, nativeOpenaiOnly: true }); + } + if (cells.length === 0 && !problems.some(problem => problem.startsWith(`${id}:`))) { + problems.push(`${id}: no protocol could be established`); + } + return cells; +} + +/** Find `test("title"` / `it("title"` exactly once and return its body up to the next case. */ +function testCaseBody(source: string, title: string): string | undefined { + const quoted = JSON.stringify(title); + const starts = [`test(${quoted}`, `it(${quoted}`].flatMap(opener => { + const found: number[] = []; + for (let at = source.indexOf(opener); at >= 0; at = source.indexOf(opener, at + 1)) { + const before = source[at - 1]; + if (before === undefined || /[\s(;{]/.test(before)) found.push(at); + } + return found; + }); + if (starts.length !== 1) return undefined; + const start = starts[0]!; + const rest = source.slice(start + 1); + const next = rest.search(/\n\s*(test|it|describe)(\.\w+)?\(/); + return next < 0 ? rest : rest.slice(0, next); +} + +const DISABLING_MODIFIER = /\b(?:test|it|describe)\.(?:skip|todo|only|skipIf|if|failing|todoIf)\b/; + +export function checkTestReference(owner: string, ref: TestReference, readRepoFile: MatrixInputs["readRepoFile"], problems: string[]): void { + const source = readRepoFile(ref.file); + if (source === undefined) { + problems.push(`${owner}: test file ${ref.file} does not exist`); + return; + } + if (DISABLING_MODIFIER.test(source)) { + problems.push(`${owner}: ${ref.file} uses skip/todo/only/conditional modifiers; link a test from a file without them`); + return; + } + const body = testCaseBody(source, ref.title); + if (body === undefined) { + problems.push(`${owner}: ${ref.file} has no single test titled ${JSON.stringify(ref.title)}`); + return; + } + if (!ref.mentions.some(mention => body.includes(mention))) { + problems.push(`${owner}: test ${JSON.stringify(ref.title)} does not mention ${ref.mentions.join(" or ")}`); + } +} + +export function collectRows(inputs: MatrixInputs = defaultInputs()): MatrixRow[] { + const problems: string[] = []; + const exportIds = [...inputs.exportIds]; + const integrationIds = Object.keys(inputs.integrationSpecs); + for (const id of integrationIds) { + if (!exportIds.includes(id)) problems.push(`${id}: managed file integration without an export registry entry; the matrix has no row shape for it`); + } + for (const id of Object.keys(inputs.exportMetadata)) { + if (!exportIds.includes(id)) problems.push(`${id}: metadata exists for a client that is no longer in EXPORT_CLIENT_IDS; remove it`); + } + + const nativeSource = inputs.readRepoFile(NATIVE_ROSTER_FILE); + let nativeIds: string[] = []; + if (nativeSource === undefined) problems.push(`${NATIVE_ROSTER_FILE} is missing`); + else { + try { + nativeIds = parseNativeRoster(nativeSource); + } catch (error) { + problems.push(...(error as MatrixError).problems); + } + } + for (const id of nativeIds) if (!inputs.nativeMetadata[id]) problems.push(`${id}: native integration owner without metadata; add it to NATIVE_CLIENT_METADATA`); + for (const id of Object.keys(inputs.nativeMetadata)) { + if (nativeSource !== undefined && !nativeIds.includes(id)) problems.push(`${id}: native metadata for an owner that is no longer in NativeIntegrationClientId; remove it`); + } + + for (const { route } of ENDPOINTS) { + if (!inputs.inboundRoutes.has(route)) problems.push(`inbound route ${route} is no longer admitted; update ENDPOINTS`); + } + + const rows: MatrixRow[] = []; + // Metadata order is the display order; the parsed union decides membership. + for (const id of Object.keys(inputs.nativeMetadata).filter(id => nativeIds.includes(id))) { + const meta = inputs.nativeMetadata[id]!; + for (const anchor of meta.anchors) { + const source = inputs.readRepoFile(anchor.file); + if (source === undefined || !source.includes(anchor.text)) { + problems.push(`${id}: reviewed code ${JSON.stringify(anchor.text)} is no longer in ${anchor.file}; re-review the curated protocol`); + } + } + if (meta.test) checkTestReference(id, meta.test, inputs.readRepoFile, problems); + rows.push({ id, label: meta.label, native: true, managed: false, protocols: meta.protocols.map(protocol => ({ protocol })), curated: true, test: meta.test, notes: ["native"], guide: meta.guide }); + } + + for (const id of exportIds) { + const meta = inputs.exportMetadata[id]; + const spec = inputs.exportSpecs[id]; + if (!meta) { + problems.push(`${id}: export client without metadata; add it to EXPORT_CLIENT_METADATA`); + continue; + } + if (!spec) { + problems.push(`${id}: listed in EXPORT_CLIENT_IDS but missing from EXPORT_CLIENTS`); + continue; + } + const protocols = exportProtocols(id, meta, inputs, problems); + if (meta.clientSelected) { + const source = inputs.readRepoFile(meta.clientSelected.file); + if (source === undefined || !source.includes(meta.clientSelected.anchor)) { + problems.push(`${id}: the reviewed sentence is no longer in ${meta.clientSelected.file}; re-review the client-selected protocol`); + } else if (sha256(source) !== meta.clientSelected.reviewedSha) { + problems.push(`${id}: ${meta.clientSelected.file} changed since its protocol was reviewed (sha256 ${sha256(source)}); re-review the client-selected protocol, then update reviewedSha`); + } + } + if (meta.test) checkTestReference(id, meta.test, inputs.readRepoFile, problems); + const integration = inputs.integrationSpecs[id]; + const notes: NoteKey[] = [spec.loopbackOnly ? "loopbackOnly" : "remoteWithKey"]; + if (integration?.currentStore) notes.push("currentStore"); + if (integration?.sourcePreservingYaml) notes.push("sourcePreservingYaml"); + if (integration?.writerLock) notes.push("writerLock"); + if (spec.validateApply) notes.push("validateApply"); + if (meta.clientSelected) notes.push("clientSelected"); + rows.push({ id, label: meta.label, native: false, configExport: spec.format.toUpperCase(), managed: integration !== undefined, protocols, curated: meta.clientSelected !== undefined, test: meta.test, notes, guide: meta.guide }); + } + + if (problems.length > 0) throw new MatrixError(problems); + return rows; +} + +function cell(text: string): string { + return text.replace(/\|/g, "\\|").replace(/\n/g, " "); +} + +function localePrefix(locale: MatrixLocale): string { + return locale === "root" ? "/" : `/${locale}/`; +} + +function protocolText(entry: ProtocolCell, strings: Strings): string { + const name = entry.protocol === "openai-compatible" ? strings.openaiCompatible : PROTOCOL_NAMES[entry.protocol]; + return entry.nativeOpenaiOnly ? `${name} (${strings.nativeOpenaiCondition})` : name; +} + +export function renderPage(rows: readonly MatrixRow[], locale: MatrixLocale): string { + const s: Strings = LOCALES[locale]; + const c = s.columns; + const lines = [ + "---", + `title: ${JSON.stringify(s.title)}`, + `description: ${JSON.stringify(s.description)}`, + "---", + "", + ``, + "", + "", + s.intro, + "", + `## ${s.levelsHeading}`, + "", + `- **implemented**: ${s.implementedDefinition}`, + `- **test-covered**: ${s.testCoveredDefinition}`, + "", + `## ${s.clientsHeading}`, + "", + `| ${c.client} | ${c.native} | ${c.configExport} | ${c.managed} | ${c.protocol} | ${c.level} | ${c.notes} |`, + "| --- | --- | --- | --- | --- | --- | --- |", + ]; + for (const row of rows) { + const protocol = row.protocols.map(entry => protocolText(entry, s)).join("; ") + (row.curated ? ` (${s.curated})` : ""); + const level = row.test ? `test-covered ([${s.testLink}](${REPO_BLOB}${row.test.file}))` : "implemented"; + const separator = locale === "zh-cn" || locale === "zh-tw" || locale === "ja" ? "" : " "; + const notes = row.notes.map(key => s.notes[key]).join(separator) + (row.guide ? ` [${s.guideLink}](${localePrefix(locale)}${row.guide}/)` : ""); + lines.push(`| ${cell(row.label)} | ${row.native ? s.yes : "—"} | ${row.configExport ?? "—"} | ${row.managed ? s.yes : "—"} | ${cell(protocol)} | ${level} | ${cell(notes)} |`); + } + lines.push("", `## ${s.endpointsHeading}`, "", s.endpointsIntro, ""); + for (const { protocol, route } of ENDPOINTS) lines.push(`- \`POST ${route}\`: ${PROTOCOL_NAMES[protocol]}`); + lines.push("", `## ${s.maintenanceHeading}`, "", s.maintenance, ""); + return lines.join("\n"); +} + +export function pagePath(locale: MatrixLocale): string { + return join("docs-site", "src", "content", "docs", ...(locale === "root" ? [] : [locale]), PAGE).split("\\").join("/"); +} + +/** Expected bytes for every owned page, keyed by repository-relative path. */ +export function renderAll(inputs: MatrixInputs = defaultInputs()): Record { + const rows = collectRows(inputs); + const pages: Record = {}; + for (const locale of Object.keys(LOCALES) as MatrixLocale[]) pages[pagePath(locale)] = renderPage(rows, locale); + return pages; +} + +if (import.meta.main) { + const check = process.argv.includes("--check"); + let pages: Record; + try { + pages = renderAll(); + } catch (error) { + console.error(error instanceof MatrixError ? error.message : error); + process.exit(1); + } + const stale: string[] = []; + for (const [path, text] of Object.entries(pages)) { + const file = join(REPO_ROOT, path); + const current = existsSync(file) ? readFileSync(file, "utf8") : undefined; + if (current === text) continue; + if (check) stale.push(path); + else writeFileSync(file, text); + } + if (check && stale.length > 0) { + console.error(`Client support pages are stale: ${stale.join(", ")}\nRun: bun run docs:clients`); + process.exit(1); + } + console.log(check ? "Client support pages are current." : `Wrote ${Object.keys(pages).length} client support pages.`); +} diff --git a/scripts/test-layout/layout.json b/scripts/test-layout/layout.json index f32c120378d..ef9f1b516c5 100644 --- a/scripts/test-layout/layout.json +++ b/scripts/test-layout/layout.json @@ -44,7 +44,7 @@ "cli-provider-result.test.ts": "cli", "cli-provider-sync-result.test.ts": "cli", "cli-capability-integration-workflows.test.ts": "cli", "cli-capability-account-workflows.test.ts": "cli", "cli-capability-agent-workflows.test.ts": "cli", "cli-capability-operation-workflows.test.ts": "cli", "cli-capability-provider-workflows.test.ts": "cli", "cli-capability-access-workflows.test.ts": "cli", "cli-capability-lab-workflows.test.ts": "cli", "skill-ocx-workflows.test.ts": "ci-workflows", - "cli-capability-data.test.ts": "cli", "skill-ocx-generated.test.ts": "ci-workflows", + "cli-capability-data.test.ts": "cli", "skill-ocx-generated.test.ts": "ci-workflows", "client-support-matrix.test.ts": "ci-workflows", "cli-update-restart.test.ts": "cli", "cli-update-restart-child.test.ts": "cli", "cli-update-restart-transport.test.ts": "cli", "cli-update-restart-home.test.ts": "cli", "cli-update-restart-service-record.test.ts": "cli", "cli-update-restart-supervision.test.ts": "cli", "cli-update-restart-admission.test.ts": "cli", "cli-update-restart-desktop-service.test.ts": "cli", "update-reclaim-authorizer.test.ts": "update", "update-windows-wrapper-authority.test.ts": "update", "update-mutation-scanner.test.ts": "update", "update-mutation-boundaries.test.ts": "update", "update-mutation-guard.test.ts": "update", "update-home-launcher.test.ts": "update", "update-home-recovery.test.ts": "update", "update-recovery-authority.test.ts": "update", "update-recovery-boundaries.test.ts": "update", "update-home-worker.test.ts": "update", "update-service-home-policy.test.ts": "update", "update-service-home.test.ts": "update", "update-guarded-ops.test.ts": "update", "update-effect-authority.test.ts": "update", "update-capability-policy.test.ts": "update", "codex-shim-overlay.test.ts": "codex-integration", "codex-shim-migration.test.ts": "codex-integration", diff --git a/structure/INDEX.md b/structure/INDEX.md index 64a46707c70..47339cbdf98 100644 --- a/structure/INDEX.md +++ b/structure/INDEX.md @@ -130,6 +130,7 @@ The dashboard, the management API, and third-party client config ownership. | [`clients/claude-desktop-config-reads.md`](clients/claude-desktop-config-reads.md) | Verified regular-file reads of Claude Desktop config-library metadata, profiles and snapshots. | | [`clients/hermes.md`](clients/hermes.md) | Hermes profile discovery, per-profile selection, ownership stores, and boundaries. | | [`clients/qoder.md`](clients/qoder.md) | Qoder settings.json provider and custom-model ownership, export and loopback placeholder rules. | +| [`clients/client-support-matrix.md`](clients/client-support-matrix.md) | Generated client support page: registry sources, curated protocol and test claims, drift checks. | | [`clients/t3code.md`](clients/t3code.md) | T3 Code settings.json Claude provider-instance ownership, proxy environment, custom models and loopback marker rules. | | [`companion.md`](companion.md) | Shared timeline filtering, usage/quotas, native and web tray title, and WidgetKit display contracts. | | [`codex-account-controls.md`](codex-account-controls.md) | Account selection order, custom usage thresholds, and stable account-card editing. | @@ -186,12 +187,12 @@ A source area can be described by more than one doc, because these docs are orga | `desktop/src-tauri/src/tray_login.rs` | [`desktop-start-at-login.md`](desktop-start-at-login.md) | | `desktop/ui/cli.html` | [`desktop-terminal-command.md`](desktop-terminal-command.md) | | `desktop/ui/cli.js` | [`desktop-terminal-command.md`](desktop-terminal-command.md) | -| `docs-site/` | [`ops/docs-and-release.md`](ops/docs-and-release.md) | +| `docs-site/` | [`clients/client-support-matrix.md`](clients/client-support-matrix.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | | `gui/` | [`overview.md`](overview.md)
[`transports/native-reasoning-retention.md`](transports/native-reasoning-retention.md)
[`gui-and-management-api.md`](gui-and-management-api.md)
[`provider-completion-diagnostic.md`](provider-completion-diagnostic.md)
[`dashboard-and-usage.md`](dashboard-and-usage.md)
[`fallback-policy.md`](fallback-policy.md)
[`design-methodology.md`](design-methodology.md)
[`companion.md`](companion.md) | | `gui/src/account-pause-display.ts` | [`account-auto-pause.md`](account-auto-pause.md) | | `gui/src/components/ModelPriceDialog.tsx` | [`pricing.md`](pricing.md) | | `gui/src/hooks/useProviderAccountPools.ts` | [`account-auto-pause.md`](account-auto-pause.md) | -| `scripts/` | [`overview.md`](overview.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | +| `scripts/` | [`overview.md`](overview.md)
[`clients/client-support-matrix.md`](clients/client-support-matrix.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | | `scripts/generate-ocx-skill-surface.ts` | [`cli-management.md`](cli-management.md) | | `scripts/test-run-lock-gate.ts` | [`ops/test-sandbox-cleanup.md`](ops/test-sandbox-cleanup.md) | | `scripts/test-run-lock.ts` | [`ops/test-sandbox-cleanup.md`](ops/test-sandbox-cleanup.md) | @@ -239,7 +240,7 @@ A source area can be described by more than one doc, because these docs are orga | `src/client/link-home.ts` | [`remote-link.md`](remote-link.md) | | `src/client/link-parity-reporter.ts` | [`remote-link.md`](remote-link.md) | | `src/client/runtime-restart.ts` | [`remote-link.md`](remote-link.md) | -| `src/clients/` | [`clients/integrations.md`](clients/integrations.md)
[`clients/qoder.md`](clients/qoder.md)
[`clients/t3code.md`](clients/t3code.md) | +| `src/clients/` | [`clients/integrations.md`](clients/integrations.md)
[`clients/qoder.md`](clients/qoder.md)
[`clients/client-support-matrix.md`](clients/client-support-matrix.md)
[`clients/t3code.md`](clients/t3code.md) | | `src/clients/config-export.ts` | [`transports/timeouts.md`](transports/timeouts.md)
[`clients/export-model-names.md`](clients/export-model-names.md) | | `src/clients/config-export/` | [`clients/export-model-names.md`](clients/export-model-names.md) | | `src/codex/` | [`runtime.md`](runtime.md)
[`config.md`](config.md)
[`codex-home.md`](codex-home.md)
[`codex-prompts.md`](codex-prompts.md)
[`catalog.md`](catalog.md)
[`subagents.md`](subagents.md)
[`subagent-capacity.md`](subagent-capacity.md)
[`transports/responses-failover.md`](transports/responses-failover.md)
[`providers/openai-tiers.md`](providers/openai-tiers.md)
[`providers/openai-accounts.md`](providers/openai-accounts.md)
[`gui-and-management-api.md`](gui-and-management-api.md)
[`dashboard-and-usage.md`](dashboard-and-usage.md)
[`fallback-policy.md`](fallback-policy.md)
[`clients/codex-desktop.md`](clients/codex-desktop.md)
[`clients/chatgpt-desktop.md`](clients/chatgpt-desktop.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | @@ -300,7 +301,7 @@ A source area can be described by more than one doc, because these docs are orga | `src/grok/` | [`runtime.md`](runtime.md) | | `src/images/` | [`runtime.md`](runtime.md)
[`transports/inventory.md`](transports/inventory.md)
[`providers/anthropic-progress.md`](providers/anthropic-progress.md) | | `src/index.ts` | [`runtime.md`](runtime.md) | -| `src/integrations/` | [`clients/export-model-names.md`](clients/export-model-names.md)
[`clients/integrations.md`](clients/integrations.md)
[`clients/hermes.md`](clients/hermes.md)
[`clients/qoder.md`](clients/qoder.md)
[`clients/t3code.md`](clients/t3code.md) | +| `src/integrations/` | [`clients/export-model-names.md`](clients/export-model-names.md)
[`clients/integrations.md`](clients/integrations.md)
[`clients/hermes.md`](clients/hermes.md)
[`clients/qoder.md`](clients/qoder.md)
[`clients/client-support-matrix.md`](clients/client-support-matrix.md)
[`clients/t3code.md`](clients/t3code.md) | | `src/lab/` | [`runtime.md`](runtime.md)
[`adapters/compatibility-lab.md`](adapters/compatibility-lab.md) | | `src/lib/` | [`overview.md`](overview.md)
[`runtime.md`](runtime.md)
[`transports/byte-accounting.md`](transports/byte-accounting.md)
[`transports/responses-wire-shapes.md`](transports/responses-wire-shapes.md)
[`transports/responses-failover.md`](transports/responses-failover.md)
[`transports/responses-spend.md`](transports/responses-spend.md)
[`transports/inventory.md`](transports/inventory.md)
[`gui-and-management-api.md`](gui-and-management-api.md)
[`dashboard-and-usage.md`](dashboard-and-usage.md)
[`clients/integrations.md`](clients/integrations.md)
[`ops/service-and-sidecars.md`](ops/service-and-sidecars.md)
[`ops/docs-and-release.md`](ops/docs-and-release.md) | | `src/lib/abort.ts` | [`transports/timeouts.md`](transports/timeouts.md) | diff --git a/structure/clients/client-support-matrix.md b/structure/clients/client-support-matrix.md new file mode 100644 index 00000000000..2b7d4764420 --- /dev/null +++ b/structure/clients/client-support-matrix.md @@ -0,0 +1,42 @@ +# Client Support Matrix + +The public client support page (`docs-site/src/content/docs/reference/client-support.md` and its +copy under each docs locale) is generated, never edited by hand. It is the one place users read which coding tools +opencodex connects to natively, which it exports or manages a config file for, and which inbound +protocol each speaks. + +## Sources + +`scripts/generate-client-support-matrix.ts` builds the rows from three registries: + +- the export roster, `EXPORT_CLIENT_IDS` and `EXPORT_CLIENTS` in `src/clients/`; +- the managed file integrations, `INTEGRATION_CLIENTS` in `src/integrations/registry.ts`, which must + stay a subset of the export roster (an integration-only id fails generation instead of vanishing); +- the native owners, parsed from the one-line `NativeIntegrationClientId` union in + `src/server/management/native-integration-routes.ts`. The scripts are outside the typecheck, so the + parse refuses any other declaration shape and compares the members with the metadata both ways. + +## Curated facts and how they stay true + +`scripts/client-support-matrix/metadata.ts` carries what the registries do not: labels, protocol +fields, reviewed claims and linked tests. Generation fails when one no longer holds: + +- An export client's protocol is read from its own config, built through `buildClientConfigText` + with a no-secret loopback fixture. Every named field must be present and every value must map to a + known protocol. OMP's Responses override is checked per model: the native OpenAI fixture model + carries it and no other model does. +- Rows whose client picks the endpoint (ZCode, Raycast) and native rows are curated. Each keeps a + source anchor; the client-selected rows also pin the exporter file's sha256, so any edit asks for a + fresh review. +- `test-covered` links a reviewed test case. The generator checks that the case exists once, names + the client, and sits in a file without skip/todo/only/conditional modifiers. It does not prove what + the case asserts, and the page says so. + +Locale chrome lives in `scripts/client-support-matrix/locales.ts`; every locale defines every string. + +## Changing a client + +Adding or removing a client means adding or removing its metadata and running `bun run docs:clients`. +`bun run docs:clients:check` and `tests/ci-workflows/client-support-matrix.test.ts` fail on a stale +page or a broken claim. Two branches that each pass alone can still fail together, so the check is +re-run on the integration base before merge. diff --git a/structure/manifest.json b/structure/manifest.json index e9f91347b63..4833242bf0b 100644 --- a/structure/manifest.json +++ b/structure/manifest.json @@ -978,6 +978,18 @@ "src/integrations/" ] }, + { + "path": "clients/client-support-matrix.md", + "tier": 5, + "title": "Client Support Matrix", + "scope": "Generated client support page: registry sources, curated protocol and test claims, drift checks.", + "documents": [ + "scripts/", + "docs-site/", + "src/clients/", + "src/integrations/" + ] + }, { "path": "clients/t3code.md", "tier": 5, diff --git a/tests/ci-workflows/client-support-matrix.test.ts b/tests/ci-workflows/client-support-matrix.test.ts new file mode 100644 index 00000000000..e0ee95ea9d3 --- /dev/null +++ b/tests/ci-workflows/client-support-matrix.test.ts @@ -0,0 +1,129 @@ +import { describe, expect, test } from "bun:test"; +import { readFileSync } from "node:fs"; +import { EXPORT_CLIENT_IDS } from "../../src/clients/client-ids"; +import { INTEGRATION_CLIENTS } from "../../src/integrations/registry"; +import { + MatrixError, + NATIVE_ROSTER_FILE, + collectRows, + defaultInputs, + parseNativeRoster, + renderAll, + type MatrixInputs, +} from "../../scripts/generate-client-support-matrix"; +import { EXPORT_CLIENT_METADATA, NATIVE_CLIENT_METADATA } from "../../scripts/client-support-matrix/metadata"; +import { repoPath } from "../helpers/repo-root"; + +const BASE = defaultInputs(); + +/** Collect with one input replaced and return the reported problems ([] when generation succeeds). */ +function problemsWith(change: Partial): string[] { + try { + collectRows({ ...BASE, ...change }); + return []; + } catch (error) { + if (!(error instanceof MatrixError)) throw error; + return [...error.problems]; + } +} + +function withFile(path: string, rewrite: (text: string) => string): MatrixInputs["readRepoFile"] { + return file => { + const text = BASE.readRepoFile(file); + return file === path && text !== undefined ? rewrite(text) : text; + }; +} + +function withDocument(id: string, rewrite: (document: any) => unknown): MatrixInputs["buildDocument"] { + return client => { + const document = BASE.buildDocument(client); + return client === id ? rewrite(structuredClone(document)) : document; + }; +} + +describe("client support matrix", () => { + test("every committed locale page matches the generator", () => { + for (const [path, expected] of Object.entries(renderAll())) { + expect(readFileSync(repoPath(path), "utf8"), `${path} is stale; run bun run docs:clients`).toBe(expected); + } + }); + + test("rows cover the export roster, the managed integrations and the native union", () => { + const rows = collectRows(); + const nativeIds = parseNativeRoster(readFileSync(repoPath(NATIVE_ROSTER_FILE), "utf8")); + expect(rows.map(row => row.id).sort()).toEqual([...EXPORT_CLIENT_IDS, ...nativeIds].sort()); + expect(rows.filter(row => row.managed).map(row => row.id).sort()).toEqual(Object.keys(INTEGRATION_CLIENTS).sort()); + expect(rows.filter(row => row.native).map(row => row.id).sort()).toEqual([...nativeIds].sort()); + }); + + test("a new export client without metadata fails with its id", () => { + const problems = problemsWith({ + exportIds: [...EXPORT_CLIENT_IDS, "newtool"], + exportSpecs: { ...BASE.exportSpecs, newtool: { format: "json", loopbackOnly: true } }, + }); + expect(problems).toContain("newtool: export client without metadata; add it to EXPORT_CLIENT_METADATA"); + }); + + test("a managed integration outside the export roster cannot drop out of the page", () => { + const problems = problemsWith({ integrationSpecs: { ...BASE.integrationSpecs, orphan: {} } }); + expect(problems.some(problem => problem.startsWith("orphan: managed file integration without an export registry entry"))).toBe(true); + }); + + test("native union additions, removals and reshapes all fail", () => { + const declaration = /^export type NativeIntegrationClientId = .+;$/m; + const added = problemsWith({ readRepoFile: withFile(NATIVE_ROSTER_FILE, text => text.replace(declaration, m => m.replace(";", ' | "newnative";'))) }); + expect(added).toContain("newnative: native integration owner without metadata; add it to NATIVE_CLIENT_METADATA"); + const removed = problemsWith({ readRepoFile: withFile(NATIVE_ROSTER_FILE, text => text.replace(declaration, m => m.replace(' | "grok"', ""))) }); + expect(removed).toContain("grok: native metadata for an owner that is no longer in NativeIntegrationClientId; remove it"); + const reshaped = problemsWith({ readRepoFile: withFile(NATIVE_ROSTER_FILE, text => text.replace(declaration, "export type NativeIntegrationClientId = (typeof NATIVE_IDS)[number];")) }); + expect(reshaped.some(problem => problem.includes("not a pure string-literal union"))).toBe(true); + }); + + test("protocol fields must exist and carry a known value", () => { + const changed = problemsWith({ buildDocument: withDocument("mcode", doc => { doc.custom_provider.opencodex.api = "openai-responses-next"; return doc; }) }); + expect(changed).toContain('mcode: custom_provider.opencodex.api = "openai-responses-next" is not a protocol value this matrix knows'); + const moved = problemsWith({ buildDocument: withDocument("cline", doc => { delete doc.catalog; return doc; }) }); + expect(moved).toContain("cline: protocol field catalog.providers.opencodex.provider.protocol is missing from the generated config"); + }); + + test("the OMP Responses override is checked model by model", () => { + const swapped = problemsWith({ + buildDocument: withDocument("omp", doc => { + for (const model of doc.providers.opencodex.models) { + if (model.api) delete model.api; + else model.api = "openai-responses"; + } + return doc; + }), + }); + expect(swapped).toContain("omp: the native OpenAI model no longer carries api = openai-responses"); + expect(swapped.some(problem => problem.startsWith("omp: model anthropic/claude-opus-4-8 carries api"))).toBe(true); + }); + + test("curated claims fail when the reviewed source changes", () => { + const raycast = EXPORT_CLIENT_METADATA.raycast!.clientSelected!; + const edited = problemsWith({ readRepoFile: withFile(raycast.file, text => text + "\n// edited\n") }); + expect(edited.some(problem => problem.startsWith("raycast: src/clients/config-export/raycast.ts changed since its protocol was reviewed"))).toBe(true); + const grok = NATIVE_CLIENT_METADATA.grok!.anchors[0]!; + const gone = problemsWith({ readRepoFile: withFile(grok.file, text => text.replace(grok.text, "")) }); + expect(gone.some(problem => problem.startsWith("grok: reviewed code"))).toBe(true); + }); + + test("a test reference must be a single enabled case that names the client", () => { + const ref = EXPORT_CLIENT_METADATA.prime!.test!; + const quoted = JSON.stringify(ref.title); + const renamed = problemsWith({ readRepoFile: withFile(ref.file, text => text.replace(quoted, JSON.stringify(ref.title + " (renamed)"))) }); + expect(renamed).toContain(`prime: ${ref.file} has no single test titled ${quoted}`); + const skipped = problemsWith({ readRepoFile: withFile(ref.file, text => `describe.skip("hidden", () => {});\n${text}`) }); + expect(skipped).toContain(`prime: ${ref.file} uses skip/todo/only/conditional modifiers; link a test from a file without them`); + const incidental = `// prime is only mentioned in this comment\ntest(${quoted}, () => {\n expect(1).toBe(1);\n});\n`; + const comment = problemsWith({ readRepoFile: file => (file === ref.file ? incidental : BASE.readRepoFile(file)) }); + expect(comment).toContain(`prime: test ${quoted} does not mention prime or Prime`); + }); + + test("the inbound endpoints listed on the page are admitted routes", () => { + const routes = new Set(BASE.inboundRoutes); + routes.delete("/v1/messages"); + expect(problemsWith({ inboundRoutes: routes })).toContain("inbound route /v1/messages is no longer admitted; update ENDPOINTS"); + }); +}); diff --git a/tests/fixtures/test-layout-expected.json b/tests/fixtures/test-layout-expected.json index fbc1ca048ec..c6fca6464eb 100644 --- a/tests/fixtures/test-layout-expected.json +++ b/tests/fixtures/test-layout-expected.json @@ -174,6 +174,7 @@ "skill-ocx-workflows.test.ts": "ci-workflows", "cli-capability-data.test.ts": "cli", "skill-ocx-generated.test.ts": "ci-workflows", + "client-support-matrix.test.ts": "ci-workflows", "cli-update-restart.test.ts": "cli", "cli-update-restart-child.test.ts": "cli", "cli-update-restart-transport.test.ts": "cli", From 7203736615c1f9053322deb427cc6887d63a403b Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 05:20:55 +0900 Subject: [PATCH 02/10] docs: tighten client support matrix evidence checks Test references ignore comments, every wildcard protocol branch must carry the field, native anchors must sit on code lines (Codex now anchors on the emitted base URL), and the curated definition says which rows make an endpoint claim. --- .../docs/fr/reference/client-support.md | 2 +- .../docs/ja/reference/client-support.md | 2 +- .../docs/ko/reference/client-support.md | 2 +- .../content/docs/reference/client-support.md | 2 +- .../docs/ru/reference/client-support.md | 2 +- .../docs/tr/reference/client-support.md | 2 +- .../docs/zh-cn/reference/client-support.md | 2 +- .../docs/zh-tw/reference/client-support.md | 2 +- scripts/client-support-matrix/locales.ts | 17 +++++---- scripts/client-support-matrix/metadata.ts | 2 +- scripts/generate-client-support-matrix.ts | 37 +++++++++++++------ .../client-support-matrix.test.ts | 10 ++++- 12 files changed, 52 insertions(+), 30 deletions(-) diff --git a/docs-site/src/content/docs/fr/reference/client-support.md b/docs-site/src/content/docs/fr/reference/client-support.md index 03a0d7a1707..b7c21876ab4 100644 --- a/docs-site/src/content/docs/fr/reference/client-support.md +++ b/docs-site/src/content/docs/fr/reference/client-support.md @@ -10,7 +10,7 @@ opencodex est une passerelle locale unique pour vos outils de code IA et vos mod ## Niveaux de prise en charge -- **implemented**: le client figure dans le registre. Pour les configurations exportées, le protocole indiqué est lu dans la configuration générée par opencodex, et la génération échoue s’il change. Les protocoles marqués *revu* (clients natifs et clients qui choisissent eux-mêmes leur point de terminaison) proviennent d’une revue du code d’intégration, et le générateur vérifie que ce code est toujours en place. +- **implemented**: le client figure dans le registre. Pour les configurations exportées, le protocole indiqué est lu dans la configuration générée par opencodex, et la génération échoue s’il change. Un protocole marqué *revu* désigne un point de terminaison issu d’une revue plutôt que de la configuration elle-même (clients natifs, et clients qui déduisent un point de terminaison précis d’un réglage) ; le générateur vérifie que le code revu est toujours en place. Les lignes « Compatible OpenAI » n’affirment aucun point de terminaison. - **test-covered**: implemented, et un cas de test choisi en revue qui exerce ce client est lié. Le générateur vérifie seulement que le test existe toujours et qu’il est actif ; lisez-le pour savoir ce qu’il vérifie. ## Clients diff --git a/docs-site/src/content/docs/ja/reference/client-support.md b/docs-site/src/content/docs/ja/reference/client-support.md index 73261e92b31..d87c84ade3c 100644 --- a/docs-site/src/content/docs/ja/reference/client-support.md +++ b/docs-site/src/content/docs/ja/reference/client-support.md @@ -10,7 +10,7 @@ opencodex は、AI コーディングツールとモデルをつなぐ 1 つの ## サポートレベル -- **implemented**: レジストリに登録されたクライアントです。エクスポートされる設定では、表のプロトコルは opencodex が生成する設定から読み取られ、変わると生成が失敗します。*レビュー済み*と付いたプロトコル(ネイティブクライアントと、エンドポイントを自分で選ぶクライアント)は連携コードのレビューに基づくもので、レビューしたコードが残っているかを生成時に確認します。 +- **implemented**: レジストリに登録されたクライアントです。エクスポートされる設定では、表のプロトコルは opencodex が生成する設定から読み取られ、変わると生成が失敗します。*レビュー済み*は、エンドポイントが設定そのものではなくレビューに基づくことを示します(ネイティブクライアントと、設定を特定のエンドポイントに変換するクライアント)。レビューしたコードが残っているかを生成時に確認します。「OpenAI 互換」の行は特定のエンドポイントを主張しません。 - **test-covered**: implemented であり、レビューで選んだこのクライアントのテストケースへのリンクがあります。生成時に確認するのはテストが存在し無効化されていないことだけです。何を検証しているかはテストを読んでください。 ## クライアント diff --git a/docs-site/src/content/docs/ko/reference/client-support.md b/docs-site/src/content/docs/ko/reference/client-support.md index a96f6b2e2e4..0f4c1462941 100644 --- a/docs-site/src/content/docs/ko/reference/client-support.md +++ b/docs-site/src/content/docs/ko/reference/client-support.md @@ -10,7 +10,7 @@ opencodex는 AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨 ## 지원 수준 -- **implemented**: 레지스트리에 등록된 클라이언트입니다. 내보내는 설정의 경우 표의 프로토콜은 opencodex가 생성하는 설정에서 읽으며, 바뀌면 생성이 실패합니다. *검토됨* 표시가 있는 프로토콜(네이티브 클라이언트, 엔드포인트를 스스로 고르는 클라이언트)은 연동 코드를 리뷰한 결과이며, 생성기는 리뷰한 코드가 그대로 있는지 확인합니다. +- **implemented**: 레지스트리에 등록된 클라이언트입니다. 내보내는 설정의 경우 표의 프로토콜은 opencodex가 생성하는 설정에서 읽으며, 바뀌면 생성이 실패합니다. *검토됨* 표시는 설정 자체가 아니라 리뷰에서 나온 특정 엔드포인트를 뜻합니다(네이티브 클라이언트, 설정값을 특정 엔드포인트로 바꾸는 클라이언트). 생성기는 리뷰한 코드가 그대로 있는지 확인합니다. 'OpenAI 호환' 행은 엔드포인트를 단정하지 않습니다. - **test-covered**: implemented이면서, 리뷰로 고른 이 클라이언트의 테스트 케이스가 링크되어 있습니다. 생성기는 테스트가 존재하고 비활성화되지 않았는지만 확인하므로, 무엇을 검증하는지는 테스트를 직접 읽어 보세요. ## 클라이언트 diff --git a/docs-site/src/content/docs/reference/client-support.md b/docs-site/src/content/docs/reference/client-support.md index 7b228756f7a..cfebf129b24 100644 --- a/docs-site/src/content/docs/reference/client-support.md +++ b/docs-site/src/content/docs/reference/client-support.md @@ -10,7 +10,7 @@ opencodex is one local gateway for your AI coding tools and models. Some tools i ## Support levels -- **implemented**: the client is in the registry. For exported configs, the protocol shown is read from the config opencodex generates, and generation fails if it changes. Protocols marked *curated* (native clients, and clients that pick their own endpoint) come from a review of the integration code, and the generator checks that the reviewed code is still in place. +- **implemented**: the client is in the registry. For exported configs, the protocol shown is read from the config opencodex generates, and generation fails if it changes. A protocol marked *curated* names an endpoint that comes from a review instead of the config itself (native clients, and clients that turn a setting into a specific endpoint); the generator checks that the reviewed code is still in place. "OpenAI-compatible" rows make no endpoint claim. - **test-covered**: implemented, and a test case chosen in review that exercises this client is linked. The generator checks only that the test still exists and is enabled; read it to see what it asserts. ## Clients diff --git a/docs-site/src/content/docs/ru/reference/client-support.md b/docs-site/src/content/docs/ru/reference/client-support.md index cbbae2244e6..6724ebe7016 100644 --- a/docs-site/src/content/docs/ru/reference/client-support.md +++ b/docs-site/src/content/docs/ru/reference/client-support.md @@ -10,7 +10,7 @@ opencodex — единый локальный шлюз для ваших ИИ-и ## Уровни поддержки -- **implemented**: клиент есть в реестре. Для экспортируемых конфигураций протокол берётся из конфигурации, которую генерирует opencodex, и генерация падает, если он меняется. Протоколы с пометкой *проверено* (нативные клиенты и клиенты, сами выбирающие эндпоинт) взяты из ревью кода интеграции, а генератор проверяет, что этот код на месте. +- **implemented**: клиент есть в реестре. Для экспортируемых конфигураций протокол берётся из конфигурации, которую генерирует opencodex, и генерация падает, если он меняется. Пометка *проверено* означает, что эндпоинт взят из ревью, а не из самой конфигурации (нативные клиенты и клиенты, которые превращают настройку в конкретный эндпоинт); генератор проверяет, что проверенный код на месте. Строки «Совместим с OpenAI» не утверждают конкретный эндпоинт. - **test-covered**: implemented, и есть ссылка на выбранный при ревью тест, который задействует этого клиента. Генератор проверяет только, что тест существует и не отключён; что именно он проверяет, смотрите в самом тесте. ## Клиенты diff --git a/docs-site/src/content/docs/tr/reference/client-support.md b/docs-site/src/content/docs/tr/reference/client-support.md index 156a58ec5fd..cb1a8db2887 100644 --- a/docs-site/src/content/docs/tr/reference/client-support.md +++ b/docs-site/src/content/docs/tr/reference/client-support.md @@ -10,7 +10,7 @@ opencodex, yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yere ## Destek düzeyleri -- **implemented**: istemci kayıtta yer alır. Dışa aktarılan yapılandırmalarda gösterilen protokol, opencodex'in ürettiği yapılandırmadan okunur ve değişirse üretim başarısız olur. *İncelendi* işaretli protokoller (yerel istemciler ve uç noktasını kendisi seçen istemciler) entegrasyon kodunun incelemesinden gelir; üretici, incelenen kodun hâlâ yerinde olduğunu denetler. +- **implemented**: istemci kayıtta yer alır. Dışa aktarılan yapılandırmalarda gösterilen protokol, opencodex'in ürettiği yapılandırmadan okunur ve değişirse üretim başarısız olur. *İncelendi* işareti, uç noktanın yapılandırmanın kendisinden değil bir incelemeden geldiğini belirtir (yerel istemciler ve bir ayarı belirli bir uç noktaya çeviren istemciler); üretici, incelenen kodun hâlâ yerinde olduğunu denetler. "OpenAI uyumlu" satırlar belirli bir uç nokta iddia etmez. - **test-covered**: implemented olmanın yanında, incelemede seçilmiş ve bu istemciyi çalıştıran bir test durumuna bağlantı verilir. Üretici yalnızca testin hâlâ var ve etkin olduğunu denetler; neyi doğruladığını görmek için testi okuyun. ## İstemciler diff --git a/docs-site/src/content/docs/zh-cn/reference/client-support.md b/docs-site/src/content/docs/zh-cn/reference/client-support.md index 036915a30c2..2391c33ee69 100644 --- a/docs-site/src/content/docs/zh-cn/reference/client-support.md +++ b/docs-site/src/content/docs/zh-cn/reference/client-support.md @@ -10,7 +10,7 @@ opencodex 是一个本地网关,连接你的 AI 编程工具与模型。部分 ## 支持级别 -- **implemented**: 客户端已在注册表中。对于导出的配置,表中协议读取自 opencodex 生成的配置,一旦变化生成就会失败。标有*已审阅*的协议(原生客户端以及自行选择端点的客户端)来自对集成代码的审阅,生成器会检查被审阅的代码是否仍然存在。 +- **implemented**: 客户端已在注册表中。对于导出的配置,表中协议读取自 opencodex 生成的配置,一旦变化生成就会失败。标有*已审阅*的协议表示其端点来自审阅而非配置本身(原生客户端,以及会把某个设置转换为特定端点的客户端);生成器会检查被审阅的代码是否仍然存在。“OpenAI 兼容”的行不声明具体端点。 - **test-covered**: 满足 implemented,并链接了一个经评审选定、覆盖该客户端的测试用例。生成器只检查该测试仍然存在且未被禁用;它具体断言了什么,请阅读测试本身。 ## 客户端 diff --git a/docs-site/src/content/docs/zh-tw/reference/client-support.md b/docs-site/src/content/docs/zh-tw/reference/client-support.md index 2f4ad0f3c7b..8ea833b89ac 100644 --- a/docs-site/src/content/docs/zh-tw/reference/client-support.md +++ b/docs-site/src/content/docs/zh-tw/reference/client-support.md @@ -10,7 +10,7 @@ opencodex 是一個本機閘道,連接你的 AI 程式開發工具與模型。 ## 支援等級 -- **implemented**: 用戶端已在登錄表中。對於匯出的設定,表中協定讀取自 opencodex 產生的設定,一旦變更產生就會失敗。標示*已審查*的協定(原生用戶端以及自行選擇端點的用戶端)來自對整合程式碼的審查,產生器會檢查被審查的程式碼是否仍然存在。 +- **implemented**: 用戶端已在登錄表中。對於匯出的設定,表中協定讀取自 opencodex 產生的設定,一旦變更產生就會失敗。標示*已審查*的協定表示其端點來自審查而非設定本身(原生用戶端,以及會把某個設定轉換為特定端點的用戶端);產生器會檢查被審查的程式碼是否仍然存在。「OpenAI 相容」的列不聲明具體端點。 - **test-covered**: 符合 implemented,並連結了一個經審查選定、涵蓋該用戶端的測試案例。產生器只檢查該測試仍然存在且未被停用;它實際驗證什麼,請閱讀測試本身。 ## 用戶端 diff --git a/scripts/client-support-matrix/locales.ts b/scripts/client-support-matrix/locales.ts index ba35ffc9401..962f961555b 100644 --- a/scripts/client-support-matrix/locales.ts +++ b/scripts/client-support-matrix/locales.ts @@ -41,7 +41,7 @@ export const LOCALES = { description: "Which coding tools opencodex connects to, how each one is wired, and which protocol it speaks.", intro: "opencodex is one local gateway for your AI coding tools and models. Some tools it configures natively; for the others it exports or manages a config file that points the tool at the local proxy. This page is generated from the code registries, so it lists exactly what the current release ships.", levelsHeading: "Support levels", - implementedDefinition: "the client is in the registry. For exported configs, the protocol shown is read from the config opencodex generates, and generation fails if it changes. Protocols marked *curated* (native clients, and clients that pick their own endpoint) come from a review of the integration code, and the generator checks that the reviewed code is still in place.", + implementedDefinition: "the client is in the registry. For exported configs, the protocol shown is read from the config opencodex generates, and generation fails if it changes. A protocol marked *curated* names an endpoint that comes from a review instead of the config itself (native clients, and clients that turn a setting into a specific endpoint); the generator checks that the reviewed code is still in place. \"OpenAI-compatible\" rows make no endpoint claim.", testCoveredDefinition: "implemented, and a test case chosen in review that exercises this client is linked. The generator checks only that the test still exists and is enabled; read it to see what it asserts.", clientsHeading: "Clients", columns: { client: "Client", native: "Native", configExport: "Config export", managed: "Managed file integration", protocol: "Inbound protocol", level: "Support level", notes: "Notes" }, @@ -71,7 +71,7 @@ export const LOCALES = { description: "Les outils de code auxquels opencodex se connecte, la façon dont chacun est relié et le protocole qu’il utilise.", intro: "opencodex est une passerelle locale unique pour vos outils de code IA et vos modèles. Il configure certains outils nativement ; pour les autres, il exporte ou gère un fichier de configuration qui dirige l’outil vers le proxy local. Cette page est générée à partir des registres du code et reflète donc exactement ce que fournit la version actuelle.", levelsHeading: "Niveaux de prise en charge", - implementedDefinition: "le client figure dans le registre. Pour les configurations exportées, le protocole indiqué est lu dans la configuration générée par opencodex, et la génération échoue s’il change. Les protocoles marqués *revu* (clients natifs et clients qui choisissent eux-mêmes leur point de terminaison) proviennent d’une revue du code d’intégration, et le générateur vérifie que ce code est toujours en place.", + implementedDefinition: "le client figure dans le registre. Pour les configurations exportées, le protocole indiqué est lu dans la configuration générée par opencodex, et la génération échoue s’il change. Un protocole marqué *revu* désigne un point de terminaison issu d’une revue plutôt que de la configuration elle-même (clients natifs, et clients qui déduisent un point de terminaison précis d’un réglage) ; le générateur vérifie que le code revu est toujours en place. Les lignes « Compatible OpenAI » n’affirment aucun point de terminaison.", testCoveredDefinition: "implemented, et un cas de test choisi en revue qui exerce ce client est lié. Le générateur vérifie seulement que le test existe toujours et qu’il est actif ; lisez-le pour savoir ce qu’il vérifie.", clientsHeading: "Clients", columns: { client: "Client", native: "Natif", configExport: "Export de configuration", managed: "Intégration de fichier gérée", protocol: "Protocole entrant", level: "Niveau", notes: "Remarques" }, @@ -101,7 +101,7 @@ export const LOCALES = { description: "opencodex가 연결하는 코딩 도구, 각 도구의 연결 방식, 사용하는 프로토콜.", intro: "opencodex는 AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨이입니다. 일부 도구는 직접(네이티브로) 설정하고, 나머지는 로컬 프록시를 가리키는 설정 파일을 내보내거나 관리합니다. 이 페이지는 코드 레지스트리에서 생성되므로 현재 릴리스가 제공하는 내용과 정확히 일치합니다.", levelsHeading: "지원 수준", - implementedDefinition: "레지스트리에 등록된 클라이언트입니다. 내보내는 설정의 경우 표의 프로토콜은 opencodex가 생성하는 설정에서 읽으며, 바뀌면 생성이 실패합니다. *검토됨* 표시가 있는 프로토콜(네이티브 클라이언트, 엔드포인트를 스스로 고르는 클라이언트)은 연동 코드를 리뷰한 결과이며, 생성기는 리뷰한 코드가 그대로 있는지 확인합니다.", + implementedDefinition: "레지스트리에 등록된 클라이언트입니다. 내보내는 설정의 경우 표의 프로토콜은 opencodex가 생성하는 설정에서 읽으며, 바뀌면 생성이 실패합니다. *검토됨* 표시는 설정 자체가 아니라 리뷰에서 나온 특정 엔드포인트를 뜻합니다(네이티브 클라이언트, 설정값을 특정 엔드포인트로 바꾸는 클라이언트). 생성기는 리뷰한 코드가 그대로 있는지 확인합니다. 'OpenAI 호환' 행은 엔드포인트를 단정하지 않습니다.", testCoveredDefinition: "implemented이면서, 리뷰로 고른 이 클라이언트의 테스트 케이스가 링크되어 있습니다. 생성기는 테스트가 존재하고 비활성화되지 않았는지만 확인하므로, 무엇을 검증하는지는 테스트를 직접 읽어 보세요.", clientsHeading: "클라이언트", columns: { client: "클라이언트", native: "네이티브", configExport: "설정 내보내기", managed: "관리형 파일 연동", protocol: "수신 프로토콜", level: "지원 수준", notes: "참고" }, @@ -131,7 +131,7 @@ export const LOCALES = { description: "opencodex 能连接哪些编程工具、每个工具如何接入,以及它使用的协议。", intro: "opencodex 是一个本地网关,连接你的 AI 编程工具与模型。部分工具由它原生配置;其余工具则通过导出或托管一个指向本地代理的配置文件来接入。本页由代码中的注册表生成,因此与当前版本实际提供的内容完全一致。", levelsHeading: "支持级别", - implementedDefinition: "客户端已在注册表中。对于导出的配置,表中协议读取自 opencodex 生成的配置,一旦变化生成就会失败。标有*已审阅*的协议(原生客户端以及自行选择端点的客户端)来自对集成代码的审阅,生成器会检查被审阅的代码是否仍然存在。", + implementedDefinition: "客户端已在注册表中。对于导出的配置,表中协议读取自 opencodex 生成的配置,一旦变化生成就会失败。标有*已审阅*的协议表示其端点来自审阅而非配置本身(原生客户端,以及会把某个设置转换为特定端点的客户端);生成器会检查被审阅的代码是否仍然存在。“OpenAI 兼容”的行不声明具体端点。", testCoveredDefinition: "满足 implemented,并链接了一个经评审选定、覆盖该客户端的测试用例。生成器只检查该测试仍然存在且未被禁用;它具体断言了什么,请阅读测试本身。", clientsHeading: "客户端", columns: { client: "客户端", native: "原生", configExport: "配置导出", managed: "托管文件集成", protocol: "入站协议", level: "支持级别", notes: "说明" }, @@ -161,7 +161,7 @@ export const LOCALES = { description: "opencodex 能連接哪些程式開發工具、每個工具如何接入,以及它使用的協定。", intro: "opencodex 是一個本機閘道,連接你的 AI 程式開發工具與模型。部分工具由它原生設定;其餘工具則透過匯出或代管一個指向本機代理的設定檔來接入。本頁由程式碼中的登錄表產生,因此與目前版本實際提供的內容完全一致。", levelsHeading: "支援等級", - implementedDefinition: "用戶端已在登錄表中。對於匯出的設定,表中協定讀取自 opencodex 產生的設定,一旦變更產生就會失敗。標示*已審查*的協定(原生用戶端以及自行選擇端點的用戶端)來自對整合程式碼的審查,產生器會檢查被審查的程式碼是否仍然存在。", + implementedDefinition: "用戶端已在登錄表中。對於匯出的設定,表中協定讀取自 opencodex 產生的設定,一旦變更產生就會失敗。標示*已審查*的協定表示其端點來自審查而非設定本身(原生用戶端,以及會把某個設定轉換為特定端點的用戶端);產生器會檢查被審查的程式碼是否仍然存在。「OpenAI 相容」的列不聲明具體端點。", testCoveredDefinition: "符合 implemented,並連結了一個經審查選定、涵蓋該用戶端的測試案例。產生器只檢查該測試仍然存在且未被停用;它實際驗證什麼,請閱讀測試本身。", clientsHeading: "用戶端", columns: { client: "用戶端", native: "原生", configExport: "設定匯出", managed: "代管檔案整合", protocol: "入站協定", level: "支援等級", notes: "說明" }, @@ -191,7 +191,7 @@ export const LOCALES = { description: "К каким инструментам для кода подключается opencodex, как подключён каждый из них и какой протокол он использует.", intro: "opencodex — единый локальный шлюз для ваших ИИ-инструментов для кода и моделей. Часть инструментов он настраивает нативно; для остальных он экспортирует или ведёт файл конфигурации, который направляет инструмент на локальный прокси. Страница сгенерирована из реестров в коде и поэтому в точности соответствует текущему релизу.", levelsHeading: "Уровни поддержки", - implementedDefinition: "клиент есть в реестре. Для экспортируемых конфигураций протокол берётся из конфигурации, которую генерирует opencodex, и генерация падает, если он меняется. Протоколы с пометкой *проверено* (нативные клиенты и клиенты, сами выбирающие эндпоинт) взяты из ревью кода интеграции, а генератор проверяет, что этот код на месте.", + implementedDefinition: "клиент есть в реестре. Для экспортируемых конфигураций протокол берётся из конфигурации, которую генерирует opencodex, и генерация падает, если он меняется. Пометка *проверено* означает, что эндпоинт взят из ревью, а не из самой конфигурации (нативные клиенты и клиенты, которые превращают настройку в конкретный эндпоинт); генератор проверяет, что проверенный код на месте. Строки «Совместим с OpenAI» не утверждают конкретный эндпоинт.", testCoveredDefinition: "implemented, и есть ссылка на выбранный при ревью тест, который задействует этого клиента. Генератор проверяет только, что тест существует и не отключён; что именно он проверяет, смотрите в самом тесте.", clientsHeading: "Клиенты", columns: { client: "Клиент", native: "Нативно", configExport: "Экспорт конфигурации", managed: "Управляемая интеграция файла", protocol: "Входящий протокол", level: "Уровень", notes: "Примечания" }, @@ -221,7 +221,7 @@ export const LOCALES = { description: "opencodex が接続するコーディングツール、それぞれの接続方法、使用するプロトコル。", intro: "opencodex は、AI コーディングツールとモデルをつなぐ 1 つのローカルゲートウェイです。一部のツールはネイティブに設定し、それ以外はローカルプロキシを指す設定ファイルをエクスポートまたは管理します。このページはコードのレジストリから生成されるため、現在のリリースの内容と正確に一致します。", levelsHeading: "サポートレベル", - implementedDefinition: "レジストリに登録されたクライアントです。エクスポートされる設定では、表のプロトコルは opencodex が生成する設定から読み取られ、変わると生成が失敗します。*レビュー済み*と付いたプロトコル(ネイティブクライアントと、エンドポイントを自分で選ぶクライアント)は連携コードのレビューに基づくもので、レビューしたコードが残っているかを生成時に確認します。", + implementedDefinition: "レジストリに登録されたクライアントです。エクスポートされる設定では、表のプロトコルは opencodex が生成する設定から読み取られ、変わると生成が失敗します。*レビュー済み*は、エンドポイントが設定そのものではなくレビューに基づくことを示します(ネイティブクライアントと、設定を特定のエンドポイントに変換するクライアント)。レビューしたコードが残っているかを生成時に確認します。「OpenAI 互換」の行は特定のエンドポイントを主張しません。", testCoveredDefinition: "implemented であり、レビューで選んだこのクライアントのテストケースへのリンクがあります。生成時に確認するのはテストが存在し無効化されていないことだけです。何を検証しているかはテストを読んでください。", clientsHeading: "クライアント", columns: { client: "クライアント", native: "ネイティブ", configExport: "設定エクスポート", managed: "管理ファイル連携", protocol: "受信プロトコル", level: "サポートレベル", notes: "備考" }, @@ -251,7 +251,7 @@ export const LOCALES = { description: "opencodex'in bağlandığı kodlama araçları, her birinin nasıl bağlandığı ve hangi protokolü kullandığı.", intro: "opencodex, yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçididir. Bazı araçları yerel olarak yapılandırır; diğerleri için aracı yerel proxy'ye yönlendiren bir yapılandırma dosyasını dışa aktarır veya yönetir. Bu sayfa koddaki kayıtlardan üretilir; bu yüzden mevcut sürümün sunduğu şeyle birebir aynıdır.", levelsHeading: "Destek düzeyleri", - implementedDefinition: "istemci kayıtta yer alır. Dışa aktarılan yapılandırmalarda gösterilen protokol, opencodex'in ürettiği yapılandırmadan okunur ve değişirse üretim başarısız olur. *İncelendi* işaretli protokoller (yerel istemciler ve uç noktasını kendisi seçen istemciler) entegrasyon kodunun incelemesinden gelir; üretici, incelenen kodun hâlâ yerinde olduğunu denetler.", + implementedDefinition: "istemci kayıtta yer alır. Dışa aktarılan yapılandırmalarda gösterilen protokol, opencodex'in ürettiği yapılandırmadan okunur ve değişirse üretim başarısız olur. *İncelendi* işareti, uç noktanın yapılandırmanın kendisinden değil bir incelemeden geldiğini belirtir (yerel istemciler ve bir ayarı belirli bir uç noktaya çeviren istemciler); üretici, incelenen kodun hâlâ yerinde olduğunu denetler. \"OpenAI uyumlu\" satırlar belirli bir uç nokta iddia etmez.", testCoveredDefinition: "implemented olmanın yanında, incelemede seçilmiş ve bu istemciyi çalıştıran bir test durumuna bağlantı verilir. Üretici yalnızca testin hâlâ var ve etkin olduğunu denetler; neyi doğruladığını görmek için testi okuyun.", clientsHeading: "İstemciler", columns: { client: "İstemci", native: "Yerel", configExport: "Yapılandırma dışa aktarımı", managed: "Yönetilen dosya entegrasyonu", protocol: "Gelen protokol", level: "Destek düzeyi", notes: "Notlar" }, @@ -281,3 +281,4 @@ export const LOCALES = { export type MatrixLocale = keyof typeof LOCALES; + diff --git a/scripts/client-support-matrix/metadata.ts b/scripts/client-support-matrix/metadata.ts index 85174957a50..37f1b2f0e37 100644 --- a/scripts/client-support-matrix/metadata.ts +++ b/scripts/client-support-matrix/metadata.ts @@ -220,7 +220,7 @@ export const NATIVE_CLIENT_METADATA: Readonly)); else if (Object.prototype.hasOwnProperty.call(value, segment)) next.push((value as Record)[segment]); + else missing++; } current = next; } - return current; + return { values: current, missing }; } function sha256(text: string): string { @@ -158,9 +166,9 @@ function exportProtocols(id: string, meta: ExportClientMetadata, inputs: MatrixI } const seen = new Set(); for (const field of meta.protocolFields) { - const values = valuesAt(document, field.path); - if (values.length === 0) { - problems.push(`${id}: protocol field ${field.path} is missing from the generated config`); + const { values, missing } = valuesAt(document, field.path); + if (values.length === 0 || missing > 0) { + problems.push(`${id}: protocol field ${field.path} is missing from ${values.length === 0 ? "the generated config" : `${missing} matched entr${missing === 1 ? "y" : "ies"}`}`); continue; } for (const value of values) { @@ -175,7 +183,7 @@ function exportProtocols(id: string, meta: ExportClientMetadata, inputs: MatrixI const cells: ProtocolCell[] = [...seen].map(protocol => ({ protocol })); const override = meta.nativeOpenaiOverride; if (override) { - const entries = valuesAt(document, override.modelsPath).flatMap(list => Array.isArray(list) ? list : Object.values(list as object)); + const entries = valuesAt(document, override.modelsPath).values.flatMap(list => Array.isArray(list) ? list : Object.values(list as object)); const entryId = (entry: unknown) => (entry as Record)?.[override.idKey]; const nativeEntry = entries.find(entry => entryId(entry) === FIXTURE_NATIVE_MODEL_ID); if (!nativeEntry) problems.push(`${id}: no model entry for the native OpenAI fixture model at ${override.modelsPath}`); @@ -208,10 +216,15 @@ function testCaseBody(source: string, title: string): string | undefined { return found; }); if (starts.length !== 1) return undefined; - const start = starts[0]!; - const rest = source.slice(start + 1); + const afterTitle = source.indexOf(quoted, starts[0]!) + quoted.length; + const rest = source.slice(afterTitle); const next = rest.search(/\n\s*(test|it|describe)(\.\w+)?\(/); - return next < 0 ? rest : rest.slice(0, next); + return withoutComments(next < 0 ? rest : rest.slice(0, next)); +} + +/** Drop line and block comments so a mention in a comment cannot stand in for code. */ +function withoutComments(code: string): string { + return code.replace(/\/\*[\s\S]*?\*\//g, "").replace(/(^|[^:\\])\/\/.*$/gm, "$1"); } const DISABLING_MODIFIER = /\b(?:test|it|describe)\.(?:skip|todo|only|skipIf|if|failing|todoIf)\b/; @@ -272,7 +285,7 @@ export function collectRows(inputs: MatrixInputs = defaultInputs()): MatrixRow[] const meta = inputs.nativeMetadata[id]!; for (const anchor of meta.anchors) { const source = inputs.readRepoFile(anchor.file); - if (source === undefined || !source.includes(anchor.text)) { + if (source === undefined || !withoutComments(source).includes(anchor.text)) { problems.push(`${id}: reviewed code ${JSON.stringify(anchor.text)} is no longer in ${anchor.file}; re-review the curated protocol`); } } diff --git a/tests/ci-workflows/client-support-matrix.test.ts b/tests/ci-workflows/client-support-matrix.test.ts index e0ee95ea9d3..615f1e4c308 100644 --- a/tests/ci-workflows/client-support-matrix.test.ts +++ b/tests/ci-workflows/client-support-matrix.test.ts @@ -86,6 +86,11 @@ describe("client support matrix", () => { expect(moved).toContain("cline: protocol field catalog.providers.opencodex.provider.protocol is missing from the generated config"); }); + test("a protocol field missing on one matched entry fails even when another entry has it", () => { + const partial = problemsWith({ buildDocument: withDocument("workbuddy", doc => { delete doc.models[0].url; return doc; }) }); + expect(partial).toContain("workbuddy: protocol field models.*.url is missing from 1 matched entry"); + }); + test("the OMP Responses override is checked model by model", () => { const swapped = problemsWith({ buildDocument: withDocument("omp", doc => { @@ -107,6 +112,9 @@ describe("client support matrix", () => { const grok = NATIVE_CLIENT_METADATA.grok!.anchors[0]!; const gone = problemsWith({ readRepoFile: withFile(grok.file, text => text.replace(grok.text, "")) }); expect(gone.some(problem => problem.startsWith("grok: reviewed code"))).toBe(true); + const codex = NATIVE_CLIENT_METADATA.codex!.anchors[0]!; + const commentedOut = problemsWith({ readRepoFile: withFile(codex.file, text => text.replace(codex.text, `"replaced"; // ${codex.text}`)) }); + expect(commentedOut.some(problem => problem.startsWith("codex: reviewed code"))).toBe(true); }); test("a test reference must be a single enabled case that names the client", () => { @@ -116,7 +124,7 @@ describe("client support matrix", () => { expect(renamed).toContain(`prime: ${ref.file} has no single test titled ${quoted}`); const skipped = problemsWith({ readRepoFile: withFile(ref.file, text => `describe.skip("hidden", () => {});\n${text}`) }); expect(skipped).toContain(`prime: ${ref.file} uses skip/todo/only/conditional modifiers; link a test from a file without them`); - const incidental = `// prime is only mentioned in this comment\ntest(${quoted}, () => {\n expect(1).toBe(1);\n});\n`; + const incidental = `test(${quoted}, () => {\n // exercises prime\n /* Prime */\n expect(1).toBe(1);\n});\n`; const comment = problemsWith({ readRepoFile: file => (file === ref.file ? incidental : BASE.readRepoFile(file)) }); expect(comment).toContain(`prime: test ${quoted} does not mention prime or Prime`); }); From 2c293edfbbd1ea9879a6676a0d62247b6656cdd1 Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 05:36:03 +0900 Subject: [PATCH 03/10] test: build the disabled-suite fixture at runtime --- tests/ci-workflows/client-support-matrix.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/ci-workflows/client-support-matrix.test.ts b/tests/ci-workflows/client-support-matrix.test.ts index 615f1e4c308..ae420c1d60d 100644 --- a/tests/ci-workflows/client-support-matrix.test.ts +++ b/tests/ci-workflows/client-support-matrix.test.ts @@ -122,7 +122,9 @@ describe("client support matrix", () => { const quoted = JSON.stringify(ref.title); const renamed = problemsWith({ readRepoFile: withFile(ref.file, text => text.replace(quoted, JSON.stringify(ref.title + " (renamed)"))) }); expect(renamed).toContain(`prime: ${ref.file} has no single test titled ${quoted}`); - const skipped = problemsWith({ readRepoFile: withFile(ref.file, text => `describe.skip("hidden", () => {});\n${text}`) }); + // Assembled at runtime: the PR hygiene gate rejects a literal disabled-suite call in an added line. + const disabledSuite = ["describe", "skip"].join("."); + const skipped = problemsWith({ readRepoFile: withFile(ref.file, text => `${disabledSuite}("hidden", () => {});\n${text}`) }); expect(skipped).toContain(`prime: ${ref.file} uses skip/todo/only/conditional modifiers; link a test from a file without them`); const incidental = `test(${quoted}, () => {\n // exercises prime\n /* Prime */\n expect(1).toBe(1);\n});\n`; const comment = problemsWith({ readRepoFile: file => (file === ref.file ? incidental : BASE.readRepoFile(file)) }); From 5f832e7034f610b73127310fe24fe18e129526cf Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 05:47:28 +0900 Subject: [PATCH 04/10] test: check that every client support locale defines the root strings --- scripts/client-support-matrix/locales.ts | 3 ++- tests/ci-workflows/client-support-matrix.test.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/scripts/client-support-matrix/locales.ts b/scripts/client-support-matrix/locales.ts index 962f961555b..814c2ca9def 100644 --- a/scripts/client-support-matrix/locales.ts +++ b/scripts/client-support-matrix/locales.ts @@ -1,6 +1,7 @@ /** * Page chrome and note phrases for the generated client support page, one block per docs locale. - * English is canonical; every locale must define every key (enforced by the Strings type). + * English is canonical; every locale must define every key. The repository typecheck does not cover + * scripts/, so tests/ci-workflows/client-support-matrix.test.ts compares each locale's key set with root. * Product names, protocol names and the level keywords stay in English on every page. */ diff --git a/tests/ci-workflows/client-support-matrix.test.ts b/tests/ci-workflows/client-support-matrix.test.ts index ae420c1d60d..9acce499dff 100644 --- a/tests/ci-workflows/client-support-matrix.test.ts +++ b/tests/ci-workflows/client-support-matrix.test.ts @@ -12,6 +12,7 @@ import { type MatrixInputs, } from "../../scripts/generate-client-support-matrix"; import { EXPORT_CLIENT_METADATA, NATIVE_CLIENT_METADATA } from "../../scripts/client-support-matrix/metadata"; +import { LOCALES } from "../../scripts/client-support-matrix/locales"; import { repoPath } from "../helpers/repo-root"; const BASE = defaultInputs(); @@ -48,6 +49,21 @@ describe("client support matrix", () => { } }); + test("every locale defines exactly the root locale's strings", () => { + const keys = (value: unknown, prefix = ""): string[] => + value !== null && typeof value === "object" + ? Object.entries(value).flatMap(([key, child]) => keys(child, prefix ? `${prefix}.${key}` : key)) + : [prefix]; + const root = keys(LOCALES.root).sort(); + for (const [locale, strings] of Object.entries(LOCALES)) { + expect(keys(strings).sort(), locale).toEqual(root); + for (const key of keys(strings)) { + const value = key.split(".").reduce((node, part) => (node as Record)[part], strings); + expect(typeof value === "string" && value.trim().length > 0, `${locale}.${key}`).toBe(true); + } + } + }); + test("rows cover the export roster, the managed integrations and the native union", () => { const rows = collectRows(); const nativeIds = parseNativeRoster(readFileSync(repoPath(NATIVE_ROSTER_FILE), "utf8")); From 10641ca4c09ea8bc3bbf1a0199d5b4b974819327 Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 06:44:27 +0900 Subject: [PATCH 05/10] docs: lead with one local gateway for every coding tool README hero and Connect your tool table, client-neutral docs home titles and JSON-LD in every locale, landing install scene and supported-tools link, and an English and Simplified Chinese quickstart that splits into a branch per tool. --- README.md | 35 ++++++++--- docs-site/src/components/Landing.astro | 21 ++++--- docs-site/src/components/SiteJsonLd.astro | 27 +++++---- docs-site/src/content/docs/fr/index.mdx | 6 +- .../docs/getting-started/quickstart.md | 59 +++++++++++++++++-- docs-site/src/content/docs/index.mdx | 6 +- docs-site/src/content/docs/ja/index.mdx | 6 +- docs-site/src/content/docs/ko/index.mdx | 6 +- docs-site/src/content/docs/ru/index.mdx | 6 +- docs-site/src/content/docs/tr/index.mdx | 6 +- .../docs/zh-cn/getting-started/quickstart.md | 44 ++++++++++++-- docs-site/src/content/docs/zh-cn/index.mdx | 6 +- docs-site/src/content/docs/zh-tw/index.mdx | 6 +- 13 files changed, 173 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 5fba47f1840..cf4e52b2d24 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@

- opencodex — universal provider proxy for Codex, Claude Code, Claude Desktop and Grok Build + opencodex — one local gateway for Codex, Claude Code, Claude Desktop, Grok Build and more

-

make codex open!

-

Universal provider proxy for OpenAI Codex, Claude Code, Claude Desktop & Grok Build
-Two commands, and every one of them runs any LLM you point it at.

+

One local gateway for your AI coding tools and models.

+

Use the models you choose with Codex, Claude Code, Claude Desktop and Grok Build,
+and connect OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code and more through managed configs.

+See every supported tool →

Follow @claudeebum on X @@ -80,10 +81,12 @@ Sol drives the session and calls a Kimi K3 subagent. English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 Full documentation →

-opencodex is a lightweight local proxy that translates Codex's Responses API into whatever your -provider speaks — streaming, tool calls, reasoning tokens, images, in both directions. Use Claude, -Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama, or any other LLM with Codex, Claude Code, Claude -Desktop, and Grok Build. It can also manage a **ChatGPT account pool** for Codex auth: add accounts, +opencodex is a lightweight local gateway between your coding tools and your model providers. It +accepts the Responses, Chat Completions and Anthropic Messages APIs and translates each request into +whatever your provider speaks, carrying streaming, tool calls, reasoning and images where the client, +model and provider support them. Use Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama and other +providers with Codex, Claude Code, Claude Desktop, Grok Build and the tools listed on the +[client support page](https://opencodex.me/reference/client-support/). It can also manage a **ChatGPT account pool** for Codex auth: add accounts, refresh their quotas in the dashboard, and let new sessions auto-route to the lowest-usage healthy account while existing threads stay pinned to the account that started them. @@ -102,6 +105,22 @@ Open **http://localhost:10100** and configure everything in the web dashboard (40+ built-ins, or any OpenAI-compatible endpoint), pick models, manage accounts. `ocx gui` re-opens the dashboard at any time. +### Connect your tool + +Add a provider first, then connect the tool you already use: + +| Tool | How to connect | +|---|---| +| Codex | Run `ocx init` and accept the Codex prompt. On a local listener this points Codex's built-in provider at the proxy; then run `codex` as usual. Already set up? The Codex switch on the dashboard's **Connect** page turns routing on or off. | +| Claude Code | With the `claude` CLI installed, run `ocx claude`. It starts the proxy if needed and launches Claude Code through it. | +| Claude Desktop | Run `ocx claude desktop`. By default it installs the gateway profile for the whole app; see the [Claude Code guide](https://opencodex.me/guides/claude-code/) for the first-party mode. | +| Grok Build | On a local listener, `ocx start` registers the models when `~/.grok` exists; pick an `ocx-*` model in Grok Build. Remote setups: see the [Grok Build guide](https://opencodex.me/guides/grok-build/). | +| Tools with a managed integration | Use the dashboard **Connect** page, or `ocx integration client enable --client `. | +| Any other tool | Set a custom OpenAI-compatible base URL of `http://localhost:10100/v1`, or an Anthropic base URL of `http://localhost:10100`. | + +The [client support page](https://opencodex.me/reference/client-support/) lists which path each tool has +and which protocol it speaks. +
Desktop app (beta) diff --git a/docs-site/src/components/Landing.astro b/docs-site/src/components/Landing.astro index 8944272605e..a9f64a18a68 100644 --- a/docs-site/src/components/Landing.astro +++ b/docs-site/src/components/Landing.astro @@ -34,8 +34,10 @@ const prefix = locale ? `${base}${locale}/` : base; const fr = { 'Install': 'Installer', 'Start the proxy': 'Démarrer le proxy', - 'Inject a provider into Codex': 'Ajouter un fournisseur à Codex', + 'Add a provider and connect Codex': 'Ajouter un fournisseur et connecter Codex', + 'Launch Claude Code through ocx': 'Lancer Claude Code via ocx', 'Codex now routes through ocx': 'Codex passe maintenant par ocx', + 'See supported tools': 'Voir les outils pris en charge', 'Getting Started': 'Démarrage', 'Installation': 'Installation', 'Quickstart': 'Démarrage rapide', @@ -62,15 +64,15 @@ const fr = { 'Contributing': 'Contribuer', 'Run ': 'Exécutez ', ' on any LLM.': ' sur n’importe quel LLM.', - 'opencodex is a local proxy that serves Codex and Claude Code from one port — translating each wire format to any provider, with streaming, tool calls, reasoning, and images in both directions. Zero client patches.': 'opencodex est un proxy local qui fournit Codex et Claude Code sur un même port. Il traduit chaque format de protocole vers n’importe quel fournisseur, dans les deux sens, avec la diffusion en continu, les appels d’outils, le raisonnement et les images. Aucune modification des clients.', + 'opencodex is one local gateway for your AI coding tools and models. It serves Codex, Claude Code, Claude Desktop and Grok Build from one port and connects more tools through managed configs, translating each wire format to the provider you choose, with streaming, tool calls, reasoning and images where the model supports them. Zero client patches.': 'opencodex est une passerelle locale unique pour vos outils de code IA et vos modèles. Il sert Codex, Claude Code, Claude Desktop et Grok Build sur un même port et connecte d’autres outils via des configurations gérées, en traduisant chaque format de protocole vers le fournisseur de votre choix, avec la diffusion en continu, les appels d’outils, le raisonnement et les images lorsque le modèle les prend en charge. Aucune modification des clients.', 'Get Started': 'Commencer', 'Supported providers': 'Fournisseurs pris en charge', '40+ providers': 'Plus de 40 fournisseurs', 'The opencodex dashboard — live proxy status, routed providers, and available models': 'Le tableau de bord opencodex : état du proxy en direct, fournisseurs routés et modèles disponibles', - 'Install. Start. Codex, rerouted.': 'Installez. Démarrez. Codex est redirigé.', + 'Install. Start. Connect your tool.': 'Installez. Démarrez. Connectez votre outil.', 'Install.': 'Installez.', 'Start.': 'Démarrez.', - 'Codex, rerouted.': 'Codex est redirigé.', + 'Connect your tool.': 'Connectez votre outil.', 'Full quickstart': 'Démarrage rapide complet', 'Watch Codex run on a routed model.': 'Regardez Codex exécuter une tâche sur un modèle routé.', 'Codex App running a task on a routed non-OpenAI model': 'Codex App exécutant une tâche sur un modèle routé autre qu’OpenAI', @@ -165,11 +167,13 @@ const providers: { label: string; path?: string }[] = [ const quickstartMini = [ { cmd: 'npm install -g @bitkyc08/opencodex', note: t('Install', '설치', '安装', 'Установка', 'インストール', '安裝', 'Kurulum') }, { cmd: 'ocx start', note: t('Start the proxy', '프록시 시작', '启动代理', 'Запуск прокси', 'プロキシを起動', '啟動代理', "Proxy'yi başlatın") }, + { cmd: 'ocx init', note: t('Add a provider and connect Codex', '프로바이더 추가 후 Codex 연결', '添加提供商并连接 Codex', 'Добавьте провайдера и подключите Codex', 'プロバイダーを追加して Codex を接続', '新增供應商並連接 Codex', 'Sağlayıcı ekleyip Codex’i bağlayın') }, + { cmd: 'ocx claude', note: t('Launch Claude Code through ocx', 'ocx를 거쳐 Claude Code 실행', '通过 ocx 启动 Claude Code', 'Запуск Claude Code через ocx', 'ocx 経由で Claude Code を起動', '透過 ocx 啟動 Claude Code', 'Claude Code’u ocx üzerinden başlatın') }, ]; const quickstart = [ { cmd: 'npm install -g @bitkyc08/opencodex', note: t('Install', '설치', '安装', 'Установка', 'インストール', '安裝', 'Kurulum') }, - { cmd: 'ocx init', note: t('Inject a provider into Codex', 'Codex에 프로바이더 주입', '向 Codex 注入 provider', 'Внедрение провайдера в Codex', 'プロバイダーを Codex に注入', '向 Codex 注入供應商', "Codex'e bir sağlayıcı ekleyin") }, + { cmd: 'ocx init', note: t('Add a provider and connect Codex', '프로바이더 추가 후 Codex 연결', '添加提供商并连接 Codex', 'Добавьте провайдера и подключите Codex', 'プロバイダーを追加して Codex を接続', '新增供應商並連接 Codex', 'Sağlayıcı ekleyip Codex’i bağlayın') }, { cmd: 'ocx start', note: t('Start the proxy', '프록시 시작', '启动代理', 'Запуск прокси', 'プロキシを起動', '啟動代理', "Proxy'yi başlatın") }, { cmd: 'codex "Write a hello world in Rust"', note: t('Codex now routes through ocx', 'Codex가 ocx를 경유', 'Codex 现在经由 ocx 路由', 'Codex теперь работает через ocx', 'Codex は ocx 経由に', 'Codex 現在經由 ocx 路由', 'Codex artık ocx üzerinden yönlendirilir') }, ]; @@ -264,7 +268,7 @@ const docsMap = [ {t(' on any LLM.', '를 어떤 LLM 위에서든.', ' 跑在任意 LLM 上。', ' на любой LLM.', ' を任意の LLM 上で。', ' 跑在任意 LLM 上。', ' dilediğiniz LLM ile çalıştırın.')}

- {t('opencodex is a local proxy that serves Codex and Claude Code from one port — translating each wire format to any provider, with streaming, tool calls, reasoning, and images in both directions. Zero client patches.', 'opencodex는 포트 하나로 Codex와 Claude Code를 함께 서빙하는 로컬 프록시입니다 — 각 wire 포맷을 어떤 프로바이더로든 양방향 변환하고, 스트리밍·tool call·reasoning·이미지까지 그대로 통과시킵니다. 클라이언트 패치는 없습니다.', 'opencodex 是一个本地代理,用同一个端口同时服务 Codex 与 Claude Code —— 将各自的线路格式双向翻译为任意 provider,支持流式、工具调用、推理与图像。无需修补客户端。', 'opencodex — локальный прокси, который обслуживает Codex и Claude Code через один порт: транслирует каждый wire-формат под любого провайдера, пропуская стриминг, вызовы инструментов, рассуждения и изображения в обе стороны. Никаких патчей на стороне клиента.', 'opencodex は 1 つのポートで Codex と Claude Code をまとめて提供するローカルプロキシです — 各 wire フォーマットを任意のプロバイダーへ双方向に変換し、ストリーミング・ツール呼び出し・推論・画像までそのまま通します。クライアントのパッチは不要です。', 'opencodex 是一個本機代理,用同一個連接埠同時服務 Codex 與 Claude Code —— 將各自的線路格式雙向翻譯為任意供應商,支援流式、工具呼叫、推理與圖像。無需修補用戶端。', 'opencodex, Codex ve Claude Code’u tek bir port üzerinden sunan yerel bir proxy’dir — her bir hat formatını dilediğiniz sağlayıcıya dönüştürür; akış (streaming), araç çağrıları (tool calls), akıl yürütme (reasoning) ve görseller her iki yönde de sorunsuz iletilir. İstemci tarafında sıfır yama.')} + {t('opencodex is one local gateway for your AI coding tools and models. It serves Codex, Claude Code, Claude Desktop and Grok Build from one port and connects more tools through managed configs, translating each wire format to the provider you choose, with streaming, tool calls, reasoning and images where the model supports them. Zero client patches.', 'opencodex는 AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨이입니다. 포트 하나로 Codex, Claude Code, Claude Desktop, Grok Build를 서빙하고 관리형 설정으로 더 많은 도구를 연결하며, 각 wire 포맷을 원하는 프로바이더로 변환합니다. 모델이 지원하면 스트리밍·tool call·reasoning·이미지도 그대로 통과합니다. 클라이언트 패치는 없습니다.', 'opencodex 是一个本地网关,连接你的 AI 编程工具与模型。它用同一个端口服务 Codex、Claude Code、Claude Desktop 和 Grok Build,并通过托管配置连接更多工具,把各自的线路格式翻译为你选择的提供商;在模型支持时,流式、工具调用、推理与图像都会保留。无需修补客户端。', 'opencodex — единый локальный шлюз для ваших ИИ-инструментов для кода и моделей. Он обслуживает Codex, Claude Code, Claude Desktop и Grok Build через один порт и подключает другие инструменты через управляемые конфигурации, транслируя каждый wire-формат для выбранного провайдера; стриминг, вызовы инструментов, рассуждения и изображения проходят, если их поддерживает модель. Никаких патчей на стороне клиента.', 'opencodex は、AI コーディングツールとモデルをつなぐ 1 つのローカルゲートウェイです。1 つのポートで Codex、Claude Code、Claude Desktop、Grok Build を提供し、管理された設定でほかのツールも接続します。各 wire フォーマットを選んだプロバイダーへ変換し、モデルが対応していればストリーミング・ツール呼び出し・推論・画像もそのまま通します。クライアントのパッチは不要です。', 'opencodex 是一個本機閘道,連接你的 AI 程式開發工具與模型。它用同一個連接埠服務 Codex、Claude Code、Claude Desktop 和 Grok Build,並透過代管設定連接更多工具,把各自的線路格式翻譯為你選擇的供應商;在模型支援時,串流、工具呼叫、推理與圖像都會保留。無需修補用戶端。', 'opencodex, yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçididir. Codex, Claude Code, Claude Desktop ve Grok Build’i tek bir port üzerinden sunar, diğer araçları yönetilen yapılandırmalarla bağlar ve her hat formatını seçtiğiniz sağlayıcıya dönüştürür; model destekliyorsa akış, araç çağrıları, akıl yürütme ve görseller korunur. İstemci tarafında sıfır yama.')}

diff --git a/docs-site/src/components/SiteJsonLd.astro b/docs-site/src/components/SiteJsonLd.astro index 18e2403d9bd..d84049e2f13 100644 --- a/docs-site/src/components/SiteJsonLd.astro +++ b/docs-site/src/components/SiteJsonLd.astro @@ -22,14 +22,14 @@ const homeUrl = locale ? `${SITE_URL}/${locale}/` : `${SITE_URL}/`; const inLanguage = locale ? langs[locale] : 'en'; const descriptions = { - en: 'Universal provider proxy for OpenAI Codex & Claude Code — use any LLM with Codex CLI, App, SDK, and Claude Code.', - fr: 'Proxy universel de fournisseurs pour OpenAI Codex et Claude Code — utilisez n’importe quel LLM avec Codex CLI, App, SDK et Claude Code.', - ko: 'OpenAI Codex & Claude Code를 위한 범용 프로바이더 프록시 — Codex CLI, App, SDK와 Claude Code에서 어떤 LLM이든 사용하세요.', - 'zh-CN': '面向 OpenAI Codex 与 Claude Code 的通用 provider 代理 —— 在 Codex CLI、App、SDK 和 Claude Code 中使用任意 LLM。', - 'zh-TW': '適用於 OpenAI Codex 與 Claude Code 的通用 provider 代理 —— 在 Codex CLI、App、SDK 和 Claude Code 中使用任意 LLM。', - ru: 'Универсальный прокси провайдеров для OpenAI Codex и Claude Code — используйте любую LLM с Codex CLI, App, SDK и Claude Code.', - ja: 'OpenAI Codex & Claude Code 向けの汎用プロバイダープロキシ — Codex CLI、App、SDK と Claude Code で任意の LLM を使えます。', - tr: 'OpenAI Codex ve Claude Code için evrensel sağlayıcı proxy’si — Codex CLI, App, SDK ve Claude Code ile dilediğiniz LLM’i kullanın.', + en: 'One local gateway for your AI coding tools and models: use the providers you choose with Codex, Claude Code, Claude Desktop and Grok Build, and connect more tools through managed configs.', + fr: 'Une passerelle locale unique pour vos outils de code IA et vos modèles : utilisez les fournisseurs de votre choix avec Codex, Claude Code, Claude Desktop et Grok Build, et connectez d’autres outils via des configurations gérées.', + ko: 'AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨이: Codex, Claude Code, Claude Desktop, Grok Build에서 원하는 프로바이더를 쓰고, 관리형 설정으로 더 많은 도구를 연결하세요.', + 'zh-CN': '一个本地网关,连接你的 AI 编程工具与模型:在 Codex、Claude Code、Claude Desktop 和 Grok Build 中使用你选择的提供商,并通过托管配置连接更多工具。', + 'zh-TW': '一個本機閘道,連接你的 AI 程式開發工具與模型:在 Codex、Claude Code、Claude Desktop 和 Grok Build 中使用你選擇的供應商,並透過代管設定連接更多工具。', + ru: 'Единый локальный шлюз для ваших ИИ-инструментов для кода и моделей: используйте выбранных провайдеров в Codex, Claude Code, Claude Desktop и Grok Build и подключайте другие инструменты через управляемые конфигурации.', + ja: 'AI コーディングツールとモデルをつなぐ 1 つのローカルゲートウェイ。Codex、Claude Code、Claude Desktop、Grok Build で好きなプロバイダーを使い、管理された設定でほかのツールも接続できます。', + tr: 'Yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçidi: Codex, Claude Code, Claude Desktop ve Grok Build ile seçtiğiniz sağlayıcıları kullanın, diğer araçları yönetilen yapılandırmalarla bağlayın.', } as const; type GraphNode = Record; @@ -59,14 +59,15 @@ if (!locale) { name: 'opencodex', alternateName: 'ocx', description: - 'Local LLM proxy that lets OpenAI Codex (CLI, App, SDK) and Claude Code run on any model — Claude, Gemini, Grok, DeepSeek, Kimi, Qwen, Ollama, OpenRouter, and more — with streaming, tool calls, reasoning tokens, and images working in both directions.', + 'Local gateway that connects AI coding tools — OpenAI Codex (CLI, App, SDK), Claude Code, Claude Desktop, Grok Build and tools with managed configs — to the model providers you choose: Claude, Gemini, Grok, DeepSeek, Kimi, Qwen, Ollama, OpenRouter, and more, with streaming, tool calls, reasoning tokens, and images where the client, model and provider support them.', keywords: - 'codex, claude code, openai codex proxy, claude code proxy, llm proxy, ai gateway, anthropic, gemini, grok, deepseek, ollama, openrouter, responses api, codex cli', + 'codex, claude code, claude desktop, grok build, ai coding tools gateway, openai codex proxy, claude code proxy, llm proxy, ai gateway, anthropic, gemini, grok, deepseek, ollama, openrouter, responses api, codex cli', featureList: [ - 'Run Codex CLI/App/SDK on any LLM provider', - 'Run Claude Code on any LLM via the Anthropic Messages API', + 'Connect Codex CLI/App/SDK, Claude Code, Claude Desktop and Grok Build to the providers you choose', + 'Managed config integrations for OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code and more', + 'Accepts the Responses, Chat Completions and Anthropic Messages APIs', 'ChatGPT account pool with quota-aware routing', - 'Streaming, tool calls, reasoning tokens, and vision in both directions', + 'Streaming, tool calls, reasoning tokens, and vision where the client, model and provider support them', 'Web dashboard on localhost:10100', ], applicationCategory: 'DeveloperApplication', diff --git a/docs-site/src/content/docs/fr/index.mdx b/docs-site/src/content/docs/fr/index.mdx index f482f1fe671..52182d87459 100644 --- a/docs-site/src/content/docs/fr/index.mdx +++ b/docs-site/src/content/docs/fr/index.mdx @@ -1,12 +1,12 @@ --- -title: "opencodex — Exécutez Codex sur n’importe quel LLM" -description: Proxy universel de fournisseurs pour OpenAI Codex et Claude Code — utilisez n’importe quel LLM avec Codex CLI, App, SDK et Claude Code. +title: "opencodex — Une passerelle locale pour Codex, Claude Code et plus" +description: "Une passerelle locale unique pour vos outils de code IA et vos modèles : utilisez les fournisseurs de votre choix avec Codex, Claude Code, Claude Desktop et Grok Build, et connectez d’autres outils via des configurations gérées." template: splash head: # La marque d'abord, pas de suffixe « | opencodex » : Google compare le nom du site avec # le titre de la page d'accueil, donc le mot-symbole mène et n'est pas dupliqué. - tag: title - content: "opencodex — Exécutez Codex sur n’importe quel LLM" + content: "opencodex — Une passerelle locale pour Codex, Claude Code et plus" - tag: meta attrs: property: og:locale diff --git a/docs-site/src/content/docs/getting-started/quickstart.md b/docs-site/src/content/docs/getting-started/quickstart.md index 77657a8a563..b39f1d19e11 100644 --- a/docs-site/src/content/docs/getting-started/quickstart.md +++ b/docs-site/src/content/docs/getting-started/quickstart.md @@ -1,9 +1,11 @@ --- title: Quickstart -description: Configure your first provider and route OpenAI Codex through opencodex in three commands. +description: Install opencodex, add your first provider, and connect the coding tool you already use, whether that is Codex, Claude Code, Claude Desktop, Grok Build or another supported tool. --- -This guide takes you from a fresh install to running Codex against a non-OpenAI model. +This guide takes you from a fresh install to the first request from the coding tool you already +use. Steps 1 and 2 are the same for every tool; step 3 has one short branch per tool. The +[client support page](/reference/client-support/) lists every tool and how it connects. ## Standalone binary (no npm) @@ -103,9 +105,16 @@ ocx status ocx gui # open the dashboard on the live port ``` -## 3. Use Codex +## 3. Connect your tool -Codex now talks to opencodex transparently: +Pick the branch for the tool you use. You can connect more than one; they share the same +providers and models. + +### Codex + +If you accepted the Codex prompt in step 1, Codex now talks to opencodex transparently. If setup +exited because a config already existed, use the Codex switch on the dashboard's **Connect** page; +[Codex Integration](/guides/codex-integration/) explains what it changes and how to restore. ```bash codex "Refactor this function for readability" @@ -118,6 +127,48 @@ codex -m "anthropic/claude-opus-5" "Explain this stack trace" codex -m "ollama-cloud/glm-5.2" "Write a SQL migration" ``` +### Claude Code + +With the `claude` CLI installed: + +```bash +ocx claude +``` + +`ocx claude` starts the proxy if it is not running and launches Claude Code with its environment +pointed at opencodex. Extra arguments pass through. See [Claude Code](/guides/claude-code/) for +tier defaults, other launchers and how to opt out. + +### Claude Desktop + +```bash +ocx claude desktop +``` + +By default this installs the gateway profile for the whole app. The first-party mode, which keeps +Desktop on claude.ai and routes only its Code tab, is described under +[Claude Desktop modes](/guides/claude-code/#claude-desktop-modes-gateway-default-and-first-party). + +### Grok Build + +On a local listener, `ocx start` registers the visible models in `~/.grok/config.toml` when +`~/.grok` exists. Pick an `ocx-*` model in Grok Build. Remote setups and the managed block are +covered in [Grok Build](/guides/grok-build/). + +### Other tools + +Tools with a managed integration (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code and more) are +connected from the dashboard's **Connect** page or with: + +```bash +ocx integration client enable --client +``` + +Each tool's config file and when the change takes effect are listed in +[Integrations](/guides/integrations/). Any other tool that accepts a custom endpoint can use the +OpenAI-compatible base URL `http://localhost:10100/v1` or the Anthropic base URL +`http://localhost:10100`. + ## Choose sub-agent models (optional) A fresh config features five native models in Codex's sub-agent picker: `gpt-5.5`, diff --git a/docs-site/src/content/docs/index.mdx b/docs-site/src/content/docs/index.mdx index 985cbde406f..fcdddab345b 100644 --- a/docs-site/src/content/docs/index.mdx +++ b/docs-site/src/content/docs/index.mdx @@ -1,12 +1,12 @@ --- -title: "opencodex — Run Codex on any LLM" -description: Universal provider proxy for OpenAI Codex & Claude Code — use any LLM with Codex CLI, App, SDK, and Claude Code. +title: "opencodex — One local gateway for Codex, Claude Code and more" +description: "One local gateway for your AI coding tools and models: use the providers you choose with Codex, Claude Code, Claude Desktop and Grok Build, and connect more tools through managed configs." template: splash head: # Brand-first, no " | opencodex" suffix: Google matches the site name against # the home page title, so the wordmark leads and is not duplicated. - tag: title - content: "opencodex — Run Codex on any LLM" + content: "opencodex — One local gateway for Codex, Claude Code and more" - tag: meta attrs: property: og:locale diff --git a/docs-site/src/content/docs/ja/index.mdx b/docs-site/src/content/docs/ja/index.mdx index 7c44164ceab..03759a3dd05 100644 --- a/docs-site/src/content/docs/ja/index.mdx +++ b/docs-site/src/content/docs/ja/index.mdx @@ -1,10 +1,10 @@ --- -title: "opencodex — Codex を任意の LLM 上で" -description: OpenAI Codex & Claude Code 向けの汎用プロバイダープロキシ — Codex CLI、App、SDK と Claude Code で任意の LLM を使えます。 +title: "opencodex — Codex、Claude Code などをつなぐローカルゲートウェイ" +description: "AI コーディングツールとモデルをつなぐ 1 つのローカルゲートウェイ。Codex、Claude Code、Claude Desktop、Grok Build で好きなプロバイダーを使い、管理された設定でほかのツールも接続できます。" template: splash head: - tag: title - content: "opencodex — Codex を任意の LLM 上で" + content: "opencodex — Codex、Claude Code などをつなぐローカルゲートウェイ" - tag: meta attrs: property: og:locale diff --git a/docs-site/src/content/docs/ko/index.mdx b/docs-site/src/content/docs/ko/index.mdx index f1182e8c0df..471cafd7070 100644 --- a/docs-site/src/content/docs/ko/index.mdx +++ b/docs-site/src/content/docs/ko/index.mdx @@ -1,10 +1,10 @@ --- -title: "opencodex — Codex를 어떤 LLM 위에서든" -description: OpenAI Codex & Claude Code를 위한 범용 프로바이더 프록시 — Codex CLI, App, SDK와 Claude Code에서 어떤 LLM이든 사용하세요. +title: "opencodex — Codex, Claude Code 등을 잇는 로컬 게이트웨이" +description: "AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨이: Codex, Claude Code, Claude Desktop, Grok Build에서 원하는 프로바이더를 쓰고, 관리형 설정으로 더 많은 도구를 연결하세요." template: splash head: - tag: title - content: "opencodex — Codex를 어떤 LLM 위에서든" + content: "opencodex — Codex, Claude Code 등을 잇는 로컬 게이트웨이" - tag: meta attrs: property: og:locale diff --git a/docs-site/src/content/docs/ru/index.mdx b/docs-site/src/content/docs/ru/index.mdx index 7203f756db3..9e1930709af 100644 --- a/docs-site/src/content/docs/ru/index.mdx +++ b/docs-site/src/content/docs/ru/index.mdx @@ -1,10 +1,10 @@ --- -title: "opencodex — Запускайте Codex на любой LLM" -description: Универсальный прокси провайдеров для OpenAI Codex и Claude Code — используйте любую LLM с Codex CLI, App, SDK и Claude Code. +title: "opencodex — локальный шлюз для Codex, Claude Code и других инструментов" +description: "Единый локальный шлюз для ваших ИИ-инструментов для кода и моделей: используйте выбранных провайдеров в Codex, Claude Code, Claude Desktop и Grok Build и подключайте другие инструменты через управляемые конфигурации." template: splash head: - tag: title - content: "opencodex — Запускайте Codex на любой LLM" + content: "opencodex — локальный шлюз для Codex, Claude Code и других инструментов" - tag: meta attrs: property: og:locale diff --git a/docs-site/src/content/docs/tr/index.mdx b/docs-site/src/content/docs/tr/index.mdx index 0c622164c48..fa1c883d930 100644 --- a/docs-site/src/content/docs/tr/index.mdx +++ b/docs-site/src/content/docs/tr/index.mdx @@ -1,10 +1,10 @@ --- -title: "opencodex — Codex ve Claude'u dilediğiniz LLM ile çalıştırın" -description: OpenAI Codex ve Claude Code için evrensel sağlayıcı proxy’si — Codex CLI, App, SDK ve Claude Code ile dilediğiniz LLM’i kullanın. +title: "opencodex — Codex, Claude Code ve daha fazlası için yerel ağ geçidi" +description: "Yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçidi: Codex, Claude Code, Claude Desktop ve Grok Build ile seçtiğiniz sağlayıcıları kullanın, diğer araçları yönetilen yapılandırmalarla bağlayın." template: splash head: - tag: title - content: "opencodex — Codex ve Claude'u dilediğiniz LLM ile çalıştırın" + content: "opencodex — Codex, Claude Code ve daha fazlası için yerel ağ geçidi" - tag: meta attrs: property: og:locale diff --git a/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md b/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md index 76d866052f8..bb5dadc7978 100644 --- a/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md +++ b/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md @@ -1,9 +1,9 @@ --- title: 快速开始 -description: 配置你的第一个 provider,并在三条命令内让 OpenAI Codex 通过 opencodex 路由。 +description: 安装 opencodex,添加第一个提供商,再连接你正在使用的编程工具:Codex、Claude Code、Claude Desktop、Grok Build 或其他受支持的工具。 --- -本指南将带你从全新安装,一路走到用一个非 OpenAI 模型运行 Codex。 +本指南将带你从全新安装,一路走到在你正在使用的编程工具中发出第一次请求。第 1、2 步对所有工具都相同;第 3 步按工具分成几个简短的分支。[客户端支持](/zh-cn/reference/client-support/)页面列出了每个工具及其接入方式。 ## 独立二进制文件(无需 npm) @@ -53,9 +53,13 @@ ocx status ocx gui # open the dashboard on the live port ``` -## 3. 使用 Codex +## 3. 连接你的工具 -Codex 现在会透明地通过 opencodex 通信: +选择你所用工具对应的分支。可以同时连接多个工具,它们共用同一组提供商和模型。 + +### Codex + +如果你在第 1 步中接受了 Codex 提示,Codex 现在会透明地通过 opencodex 通信。如果因为已有配置而跳过了设置,请使用仪表盘 **Connect** 页面上的 Codex 开关;[Codex 集成](/zh-cn/guides/codex-integration/)说明了它会修改什么以及如何恢复。 ```bash codex "Refactor this function for readability" @@ -68,6 +72,38 @@ codex -m "anthropic/claude-opus-5" "Explain this stack trace" codex -m "ollama-cloud/glm-5.2" "Write a SQL migration" ``` +### Claude Code + +先安装 `claude` CLI,然后运行: + +```bash +ocx claude +``` + +`ocx claude` 会在代理未运行时启动它,并以指向 opencodex 的环境启动 Claude Code。额外参数会原样传递。层级默认值、其他启动器以及如何退出,请参见 [Claude Code](/zh-cn/guides/claude-code/)。 + +### Claude Desktop + +```bash +ocx claude desktop +``` + +默认会为整个应用安装网关配置。first-party 模式会让 Desktop 继续使用 claude.ai,只路由其 Code 标签页,详见 [Claude Code](/zh-cn/guides/claude-code/) 中的 Claude Desktop 模式一节。 + +### Grok Build + +在本地监听下,当 `~/.grok` 存在时,`ocx start` 会把可见模型注册到 `~/.grok/config.toml`。在 Grok Build 中选择一个 `ocx-*` 模型即可。远程配置和托管区块见 [Grok Build](/zh-cn/guides/grok-build/)。 + +### 其他工具 + +有托管集成的工具(OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code 等)可在仪表盘的 **Connect** 页面连接,或使用: + +```bash +ocx integration client enable --client +``` + +各工具的配置文件以及何时生效,见 [集成](/zh-cn/guides/integrations/)。其他支持自定义端点的工具,可以使用 OpenAI 兼容的 base URL `http://localhost:10100/v1`,或 Anthropic 的 base URL `http://localhost:10100`。 + ## 选择 sub-agent 模型(可选) 全新配置会在 Codex 的 sub-agent 选择器中提供五个原生模型:`gpt-5.5`、`gpt-5.6-sol`、`gpt-5.6-terra`、`gpt-5.6-luna` 和 `gpt-6-astra`。打开 `ocx gui`,可以替换或重新排序最多五个原生或已路由模型。仪表盘还可以设置一个首选 sub-agent 模型和 reasoning effort。参见 [Sub-agent Surface](/guides/sub-agent-surface/) 以选择 v1/base/v2,并了解何时适用 guidance、原生默认值和 fallback。 diff --git a/docs-site/src/content/docs/zh-cn/index.mdx b/docs-site/src/content/docs/zh-cn/index.mdx index 49f2e95c6bc..da6c9ca9a0b 100644 --- a/docs-site/src/content/docs/zh-cn/index.mdx +++ b/docs-site/src/content/docs/zh-cn/index.mdx @@ -1,10 +1,10 @@ --- -title: "opencodex — 让 Codex 跑在任意 LLM 上" -description: 面向 OpenAI Codex 与 Claude Code 的通用 provider 代理 —— 在 Codex CLI、App、SDK 和 Claude Code 中使用任意 LLM。 +title: "opencodex — 连接 Codex、Claude Code 与更多编程工具的本地网关" +description: "一个本地网关,连接你的 AI 编程工具与模型:在 Codex、Claude Code、Claude Desktop 和 Grok Build 中使用你选择的提供商,并通过托管配置连接更多工具。" template: splash head: - tag: title - content: "opencodex — 让 Codex 跑在任意 LLM 上" + content: "opencodex — 连接 Codex、Claude Code 与更多编程工具的本地网关" - tag: meta attrs: property: og:locale diff --git a/docs-site/src/content/docs/zh-tw/index.mdx b/docs-site/src/content/docs/zh-tw/index.mdx index bceb54865c8..8f5fc5f7917 100644 --- a/docs-site/src/content/docs/zh-tw/index.mdx +++ b/docs-site/src/content/docs/zh-tw/index.mdx @@ -1,10 +1,10 @@ --- -title: "opencodex — 讓 Codex 跑在任意 LLM 上" -description: 適用於 OpenAI Codex 與 Claude Code 的通用供應商代理 —— 在 Codex CLI、App、SDK 和 Claude Code 中使用任意 LLM。 +title: "opencodex — 連接 Codex、Claude Code 與更多程式開發工具的本機閘道" +description: "一個本機閘道,連接你的 AI 程式開發工具與模型:在 Codex、Claude Code、Claude Desktop 和 Grok Build 中使用你選擇的供應商,並透過代管設定連接更多工具。" template: splash head: - tag: title - content: "opencodex — 讓 Codex 跑在任意 LLM 上" + content: "opencodex — 連接 Codex、Claude Code 與更多程式開發工具的本機閘道" - tag: meta attrs: property: og:locale From d2882fa5a6a61192dd02c5b364845b0ffb9d3666 Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 07:00:39 +0900 Subject: [PATCH 06/10] docs: translate the client-first README and quickstart --- .../docs/fr/getting-started/quickstart.md | 44 ++++++++++++++++-- .../docs/ja/getting-started/quickstart.md | 44 ++++++++++++++++-- .../docs/ko/getting-started/quickstart.md | 44 ++++++++++++++++-- .../docs/ru/getting-started/quickstart.md | 44 ++++++++++++++++-- .../docs/tr/getting-started/quickstart.md | 45 ++++++++++++++++--- .../docs/zh-tw/getting-started/quickstart.md | 44 ++++++++++++++++-- readme/README.fr.md | 31 ++++++++----- readme/README.ja.md | 30 ++++++++----- readme/README.ko.md | 30 ++++++++----- readme/README.ru.md | 32 ++++++++----- readme/README.tr.md | 30 ++++++++----- readme/README.zh-CN.md | 29 ++++++++---- readme/README.zh-TW.md | 28 ++++++++---- readme/i18n-manifest.json | 14 +++--- 14 files changed, 387 insertions(+), 102 deletions(-) diff --git a/docs-site/src/content/docs/fr/getting-started/quickstart.md b/docs-site/src/content/docs/fr/getting-started/quickstart.md index fa96c775b52..02e67eddcd9 100644 --- a/docs-site/src/content/docs/fr/getting-started/quickstart.md +++ b/docs-site/src/content/docs/fr/getting-started/quickstart.md @@ -1,9 +1,9 @@ --- title: Démarrage rapide -description: Configurez votre premier fournisseur et acheminez OpenAI Codex via opencodex en trois commandes. +description: "Installez opencodex, ajoutez votre premier fournisseur et connectez votre outil de programmation : Codex, Claude Code, Claude Desktop, Grok Build ou un autre outil pris en charge." --- -Ce guide part d’une installation neuve et vous conduit jusqu’à l’exécution de Codex sur un modèle autre qu’OpenAI. +Ce guide vous mène d’une nouvelle installation à la première requête de votre outil de programmation. Les étapes 1 et 2 sont communes ; l’étape 3 propose une branche par outil. La [page des clients pris en charge](/fr/reference/client-support/) présente les outils et leurs connexions. ## 1. Exécutez l'assistant de configuration @@ -58,9 +58,13 @@ ocx status ocx gui # ouvre le tableau de bord sur le port actif ``` -## 3. Utiliser Codex +## 3. Connectez votre outil -Codex parle maintenant à opencodex de manière transparente : +Choisissez la branche correspondant à votre outil. Vous pouvez en connecter plusieurs : ils partagent les mêmes fournisseurs et modèles. + +### Codex + +Si vous avez accepté l’invite Codex à l’étape 1, Codex communique maintenant avec opencodex de manière transparente. Si la configuration s’est arrêtée parce qu’un fichier existait déjà, utilisez le commutateur Codex de la page **Connect** ; [Intégration Codex](/fr/guides/codex-integration/) explique les modifications et leur restauration. ```bash codex "Refactor this function for readability" @@ -73,6 +77,38 @@ codex -m "anthropic/claude-opus-5" "Explain this stack trace" codex -m "ollama-cloud/glm-5.2" "Write a SQL migration" ``` +### Claude Code + +Avec le CLI `claude` installé : + +```bash +ocx claude +``` + +`ocx claude` démarre le proxy s’il ne fonctionne pas et lance Claude Code avec un environnement dirigé vers opencodex. Les arguments supplémentaires sont transmis. Consultez [Claude Code](/fr/guides/claude-code/) pour les valeurs par défaut des niveaux, les autres lanceurs et la désactivation. + +### Claude Desktop + +```bash +ocx claude desktop +``` + +Par défaut, cette commande installe le profil de passerelle pour toute l’application. Le mode first-party conserve claude.ai pour Desktop et ne route que son onglet Code ; consultez la section sur les modes Claude Desktop dans [Claude Code](/fr/guides/claude-code/). + +### Grok Build + +Sur une écoute locale, si `~/.grok` existe, `ocx start` enregistre les modèles visibles dans `~/.grok/config.toml`. Choisissez un modèle `ocx-*` dans Grok Build. Les configurations distantes et le bloc géré sont décrits dans [Grok Build](/fr/guides/grok-build/). + +### Autres outils + +Les outils avec intégration gérée (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code et d’autres) se connectent depuis la page **Connect** du tableau de bord ou avec : + +```bash +ocx integration client enable --client +``` + +Les fichiers de configuration et les délais de prise d’effet sont décrits dans [Intégrations](/fr/guides/integrations/). Tout autre outil acceptant un point de terminaison personnalisé peut utiliser l’URL de base compatible OpenAI `http://localhost:10100/v1` ou l’URL de base Anthropic `http://localhost:10100`. + ## Choisissez des modèles de sous-agents (facultatif) Une nouvelle configuration propose cinq modèles natifs dans le sélecteur de sous-agents de Codex : `gpt-5.5`, diff --git a/docs-site/src/content/docs/ja/getting-started/quickstart.md b/docs-site/src/content/docs/ja/getting-started/quickstart.md index 216e3891dac..ab2404ae574 100644 --- a/docs-site/src/content/docs/ja/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ja/getting-started/quickstart.md @@ -1,9 +1,9 @@ --- title: クイックスタート -description: 最初のプロバイダーを構成し、3 つのコマンドで OpenAI Codex を opencodex 経由でルーティングします。 +description: "opencodex をインストールして最初のプロバイダーを追加し、Codex、Claude Code、Claude Desktop、Grok Build など、普段使う対応コーディングツールを接続します。" --- -このガイドでは、新規インストールから非 OpenAI モデルに対して Codex を実行するまでを説明します。 +このガイドでは、新規インストールから普段使うコーディングツールで最初のリクエストを送るまでを説明します。手順 1 と 2 は全ツール共通で、手順 3 はツール別です。[クライアント対応ページ](/ja/reference/client-support/)に各ツールと接続方法を記載しています。 ## スタンドアロンバイナリ(npm 不要) @@ -55,9 +55,13 @@ ocx status ocx gui # open the dashboard on the live port ``` -## 3.Codexを使用する +## 3. ツールを接続する -Codex は透過的に opencodex と通信するようになりました。 +使用するツールの手順を選んでください。複数のツールを接続でき、プロバイダーとモデルを共有します。 + +### Codex + +手順 1 で Codex の確認に同意した場合、Codex は透過的に opencodex と通信します。既存の設定があるためにセットアップが終了した場合は、ダッシュボードの **Connect** ページにある Codex スイッチを使います。[Codex 統合](/ja/guides/codex-integration/)では変更内容と復元方法を説明しています。 ```bash codex "Refactor this function for readability" @@ -70,6 +74,38 @@ codex -m "anthropic/claude-opus-5" "Explain this stack trace" codex -m "ollama-cloud/glm-5.2" "Write a SQL migration" ``` +### Claude Code + +`claude` CLI をインストールした状態で実行します。 + +```bash +ocx claude +``` + +`ocx claude` はプロキシが停止中なら起動し、opencodex を指す環境で Claude Code を起動します。追加の引数はそのまま渡されます。階層のデフォルト、他のランチャー、無効化の方法は [Claude Code](/ja/guides/claude-code/)を参照してください。 + +### Claude Desktop + +```bash +ocx claude desktop +``` + +デフォルトではアプリ全体にゲートウェイプロファイルをインストールします。Desktop を claude.ai のままにして Code タブのみをルーティングする first-party モードは、[Claude Code](/ja/guides/claude-code/)の Claude Desktop モードの節を参照してください。 + +### Grok Build + +ローカルリスナーでは、`~/.grok` が存在すると `ocx start` が表示対象のモデルを `~/.grok/config.toml` に登録します。Grok Build で `ocx-*` モデルを選択します。リモート設定と管理対象ブロックは [Grok Build](/ja/guides/grok-build/)を参照してください。 + +### その他のツール + +管理対象の統合があるツール(OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code など)は、ダッシュボードの **Connect** ページまたは次のコマンドで接続します。 + +```bash +ocx integration client enable --client +``` + +各ツールの設定ファイルと変更の反映時期は[統合](/ja/guides/integrations/)を参照してください。カスタムエンドポイントに対応するその他のツールでは、OpenAI 互換ベース URL `http://localhost:10100/v1` または Anthropic ベース URL `http://localhost:10100` を使えます。 + ## サブエージェント モデルの選択 (オプション) 新しい設定には、Codex のサブエージェント ピッカーの 5 つのネイティブ モデル、`gpt-5.5`、`gpt-5.6-sol`、`gpt-5.6-terra`、`gpt-5.6-luna`、および `gpt-6-astra` が含まれています。 `ocx gui` を開いて、最大 5 つのネイティブ モデルまたはルーティング モデルを置換または並べ替えます。ダッシュボードでは、優先サブエージェント モデルと推論負荷を 1 つ設定することもできます。 v1/base/v2 を選択し、ガイダンス、ネイティブのデフォルト、およびフォールバックがいつ適用されるかを理解するには、[サブエージェントサーフェス](/guides/sub-agent-surface/) を参照してください。 diff --git a/docs-site/src/content/docs/ko/getting-started/quickstart.md b/docs-site/src/content/docs/ko/getting-started/quickstart.md index 77cc5a35d1e..e90615e6bc7 100644 --- a/docs-site/src/content/docs/ko/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ko/getting-started/quickstart.md @@ -1,9 +1,9 @@ --- title: 빠른 시작 -description: 첫 프로바이더를 설정하고 명령어 세 개로 OpenAI Codex를 opencodex로 라우팅합니다. +description: "opencodex를 설치하고 첫 프로바이더를 추가한 뒤 Codex, Claude Code, Claude Desktop, Grok Build 또는 다른 지원 코딩 도구를 연결합니다." --- -이 가이드는 새로 설치한 상태에서 OpenAI가 아닌 모델로 Codex를 실행하기까지의 과정을 안내합니다. +이 가이드는 새 설치부터 사용 중인 코딩 도구의 첫 요청까지 안내합니다. 1, 2단계는 모든 도구에 공통이며 3단계는 도구별로 나뉩니다. [클라이언트 지원 페이지](/ko/reference/client-support/)에서 도구와 연결 방법을 확인하세요. ## 독립 실행형 바이너리(npm 없음) @@ -53,9 +53,13 @@ ocx status ocx gui # open the dashboard on the live port ``` -## 3. Codex 사용 +## 3. 도구 연결 -이제 Codex는 opencodex와 투명하게 연결됩니다: +사용하는 도구에 해당하는 안내를 선택하세요. 여러 도구를 연결할 수 있으며 프로바이더와 모델은 공유됩니다. + +### Codex + +1단계에서 Codex 프롬프트를 수락했다면 이제 Codex가 opencodex와 투명하게 통신합니다. 기존 설정이 있어 설정이 종료됐다면 대시보드 **Connect** 페이지의 Codex 스위치를 사용하세요. [Codex 통합](/ko/guides/codex-integration/)에서 변경 내용과 복원 방법을 설명합니다. ```bash codex "Refactor this function for readability" @@ -68,6 +72,38 @@ codex -m "anthropic/claude-opus-5" "Explain this stack trace" codex -m "ollama-cloud/glm-5.2" "Write a SQL migration" ``` +### Claude Code + +`claude` CLI가 설치된 상태에서: + +```bash +ocx claude +``` + +`ocx claude`는 프록시가 실행 중이 아니면 시작하고 opencodex를 가리키는 환경으로 Claude Code를 실행합니다. 추가 인수는 그대로 전달됩니다. 계층 기본값, 다른 실행기와 사용 중지 방법은 [Claude Code](/ko/guides/claude-code/)를 참조하세요. + +### Claude Desktop + +```bash +ocx claude desktop +``` + +기본적으로 앱 전체에 게이트웨이 프로필을 설치합니다. Desktop은 claude.ai를 유지하고 Code 탭만 라우팅하는 first-party 모드는 [Claude Code](/ko/guides/claude-code/)의 Claude Desktop 모드 항목을 참조하세요. + +### Grok Build + +로컬 리스너에서 `~/.grok`이 존재하면 `ocx start`가 표시되는 모델을 `~/.grok/config.toml`에 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정과 관리 블록은 [Grok Build](/ko/guides/grok-build/)를 참조하세요. + +### 다른 도구 + +관리형 통합이 있는 도구(OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code 등)는 대시보드의 **Connect** 페이지에서 연결하거나 다음을 사용하세요: + +```bash +ocx integration client enable --client +``` + +각 도구의 설정 파일과 적용 시점은 [통합](/ko/guides/integrations/)을 참조하세요. 사용자 지정 엔드포인트를 지원하는 다른 도구는 OpenAI 호환 기본 URL `http://localhost:10100/v1` 또는 Anthropic 기본 URL `http://localhost:10100`을 사용할 수 있습니다. + ## Sub-agent 모델 선택(선택 사항) 새 구성에는 Codex의 sub-agent 선택기에 네이티브 모델 다섯 개인 `gpt-5.5`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-6-astra`가 표시됩니다. `ocx gui`를 열어 네이티브 또는 라우팅 모델을 최대 다섯 개까지 바꾸거나 순서를 다시 정할 수 있습니다. 대시보드에서는 선호하는 sub-agent 모델과 추론 강도도 설정할 수 있습니다. [Sub-agent Surface](/guides/sub-agent-surface/)에서 v1/base/v2를 고르고, guidance, 네이티브 기본값, fallback이 언제 적용되는지 확인합니다. diff --git a/docs-site/src/content/docs/ru/getting-started/quickstart.md b/docs-site/src/content/docs/ru/getting-started/quickstart.md index 99d6cdb2a1b..cbde76b6c63 100644 --- a/docs-site/src/content/docs/ru/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ru/getting-started/quickstart.md @@ -1,9 +1,9 @@ --- title: Быстрый старт -description: Настройте первого провайдера и направьте OpenAI Codex через opencodex тремя командами. +description: "Установите opencodex, добавьте первого провайдера и подключите используемый инструмент: Codex, Claude Code, Claude Desktop, Grok Build или другой поддерживаемый инструмент." --- -Это руководство проводит от чистой установки до запуска Codex с моделью не от OpenAI. +Это руководство проведёт вас от новой установки до первого запроса из используемого инструмента программирования. Шаги 1 и 2 общие для всех, а шаг 3 содержит отдельные инструкции для каждого инструмента. На [странице поддержки клиентов](/ru/reference/client-support/) перечислены инструменты и способы их подключения. ## Автономный бинарный файл (без npm) @@ -67,9 +67,13 @@ ocx status ocx gui # open the dashboard on the live port ``` -## 3. Используйте Codex +## 3. Подключите свой инструмент -Теперь Codex прозрачно общается с opencodex: +Выберите инструкции для своего инструмента. Можно подключить несколько инструментов: они используют общие провайдеры и модели. + +### Codex + +Если на шаге 1 вы приняли приглашение Codex, теперь он прозрачно взаимодействует с opencodex. Если настройка завершилась из-за существующей конфигурации, используйте переключатель Codex на странице **Connect** панели; в разделе [Интеграция Codex](/ru/guides/codex-integration/) описаны изменения и их отмена. ```bash codex "Refactor this function for readability" @@ -83,6 +87,38 @@ codex -m "anthropic/claude-opus-5" "Explain this stack trace" codex -m "ollama-cloud/glm-5.2" "Write a SQL migration" ``` +### Claude Code + +При установленном CLI `claude`: + +```bash +ocx claude +``` + +`ocx claude` запускает прокси, если он не работает, и запускает Claude Code с окружением, направленным на opencodex. Дополнительные аргументы передаются дальше. Значения уровней по умолчанию, другие способы запуска и отключение описаны в [Claude Code](/ru/guides/claude-code/). + +### Claude Desktop + +```bash +ocx claude desktop +``` + +По умолчанию команда устанавливает профиль шлюза для всего приложения. Режим first-party сохраняет подключение Desktop к claude.ai и маршрутизирует только вкладку Code; см. раздел о режимах Claude Desktop в [Claude Code](/ru/guides/claude-code/). + +### Grok Build + +При локальном прослушивании, если существует `~/.grok`, команда `ocx start` регистрирует видимые модели в `~/.grok/config.toml`. Выберите модель `ocx-*` в Grok Build. Удалённые конфигурации и управляемый блок описаны в [Grok Build](/ru/guides/grok-build/). + +### Другие инструменты + +Инструменты с управляемой интеграцией (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code и другие) подключаются на странице **Connect** панели или командой: + +```bash +ocx integration client enable --client +``` + +Файлы конфигурации инструментов и время вступления изменений в силу описаны в разделе [Интеграции](/ru/guides/integrations/). Любой другой инструмент с поддержкой пользовательского адреса может использовать совместимый с OpenAI базовый URL `http://localhost:10100/v1` или базовый URL Anthropic `http://localhost:10100`. + ## Выбор моделей подагентов (опционально) В свежей конфигурации в селекторе подагентов Codex представлены пять нативных моделей: `gpt-5.5`, diff --git a/docs-site/src/content/docs/tr/getting-started/quickstart.md b/docs-site/src/content/docs/tr/getting-started/quickstart.md index 27e9f1d95a7..7b253573068 100644 --- a/docs-site/src/content/docs/tr/getting-started/quickstart.md +++ b/docs-site/src/content/docs/tr/getting-started/quickstart.md @@ -1,10 +1,9 @@ --- title: Hızlı Başlangıç -description: İlk sağlayıcınızı yapılandırın ve OpenAI Codex'i üç komutta opencodex üzerinden yönlendirin. +description: "opencodex’i kurun, ilk sağlayıcınızı ekleyin ve kullandığınız kodlama aracını bağlayın: Codex, Claude Code, Claude Desktop, Grok Build veya desteklenen başka bir araç." --- -Bu kılavuz, yeni bir kurulumdan başlayarak Codex'i OpenAI harici bir model -üzerinde çalıştırmanızı sağlar. +Bu kılavuz, yeni kurulumdan kullandığınız kodlama aracındaki ilk isteğe kadar size yol gösterir. 1. ve 2. adımlar tüm araçlar için aynıdır; 3. adımda her araç için kısa bir bölüm vardır. [İstemci desteği sayfası](/tr/reference/client-support/) araçları ve bağlantı yöntemlerini listeler. ## 1. Kurulum sihirbazını çalıştırın @@ -67,9 +66,13 @@ ocx status ocx gui # kontrol panelini canlı port üzerinde açın ``` -## 3. Codex'i kullanın +## 3. Aracınızı bağlayın -Codex artık opencodex ile şeffaf bir şekilde konuşur: +Kullandığınız araca ait bölümü seçin. Birden fazla araç bağlayabilirsiniz; bunlar aynı sağlayıcıları ve modelleri paylaşır. + +### Codex + +1. adımda Codex istemini kabul ettiyseniz Codex artık opencodex ile şeffaf biçimde iletişim kurar. Mevcut yapılandırma nedeniyle kurulum sona erdiyse panelin **Connect** sayfasındaki Codex anahtarını kullanın; [Codex Entegrasyonu](/tr/guides/codex-integration/) değişiklikleri ve nasıl geri alınacağını açıklar. ```bash codex "Okunabilirlik için bu fonksiyonu yeniden düzenle" @@ -83,6 +86,38 @@ codex -m "anthropic/claude-opus-5" "Bu yığın izini (stack trace) açıkla" codex -m "ollama-cloud/glm-5.2" "Bir SQL geçişi yaz" ``` +### Claude Code + +`claude` CLI kuruluysa: + +```bash +ocx claude +``` + +`ocx claude`, çalışmıyorsa proxy’yi başlatır ve Claude Code’u ortamı opencodex’e yönlendirilmiş olarak açar. Ek argümanlar aynen iletilir. Katman varsayılanları, diğer başlatıcılar ve devre dışı bırakma için [Claude Code](/tr/guides/claude-code/) sayfasına bakın. + +### Claude Desktop + +```bash +ocx claude desktop +``` + +Varsayılan olarak tüm uygulama için ağ geçidi profilini kurar. Desktop’ı claude.ai üzerinde tutup yalnızca Code sekmesini yönlendiren first-party modu, [Claude Code](/tr/guides/claude-code/) sayfasındaki Claude Desktop modları bölümünde açıklanır. + +### Grok Build + +Yerel dinleyicide `~/.grok` varsa `ocx start` görünür modelleri `~/.grok/config.toml` dosyasına kaydeder. Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar ve yönetilen blok [Grok Build](/tr/guides/grok-build/) sayfasında anlatılır. + +### Diğer araçlar + +Yönetilen entegrasyonu olan araçlar (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code ve diğerleri) panelin **Connect** sayfasından veya şu komutla bağlanır: + +```bash +ocx integration client enable --client +``` + +Her aracın yapılandırma dosyası ve değişikliğin ne zaman geçerli olacağı [Entegrasyonlar](/tr/guides/integrations/) sayfasında listelenir. Özel uç noktayı kabul eden diğer araçlar OpenAI uyumlu temel URL `http://localhost:10100/v1` veya Anthropic temel URL `http://localhost:10100` kullanabilir. + ## Alt ajan modellerini seçin (isteğe bağlı) Yeni bir yapılandırma, Codex'in alt ajan seçicisinde beş yerel model sunar: diff --git a/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md b/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md index ea72d3cfcae..851875b4663 100644 --- a/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md +++ b/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md @@ -1,9 +1,9 @@ --- title: 快速入門 -description: 設定你的第一個 provider,用三條命令讓 OpenAI Codex 透過 opencodex 進行路由。 +description: "安裝 opencodex、新增第一個供應商,再連接你使用的程式開發工具:Codex、Claude Code、Claude Desktop、Grok Build 或其他支援的工具。" --- -本指南將帶你從全新安裝,一路走到用一個非 OpenAI 模型執行 Codex。 +本指南帶你從全新安裝到在現有程式開發工具中送出第一個請求。步驟 1 和 2 適用所有工具;步驟 3 依工具分成簡短分支。[用戶端支援頁面](/zh-tw/reference/client-support/)列出各工具及連接方式。 ## 1. 執行設定嚮導 @@ -56,9 +56,13 @@ ocx status ocx gui # 在實際監聽埠開啟儀表板 ``` -## 3. 使用 Codex +## 3. 連接你的工具 -Codex 現在會透明地與 opencodex 通訊: +選擇你使用的工具對應的分支。你可以連接多個工具,它們共用供應商與模型。 + +### Codex + +如果你在步驟 1 接受了 Codex 提示,Codex 現在會透明地透過 opencodex 通訊。如果設定因已有設定檔而結束,請使用儀表板 **Connect** 頁面的 Codex 開關;[Codex 整合](/zh-tw/guides/codex-integration/)說明修改內容與還原方式。 ```bash codex "Refactor this function for readability" @@ -71,6 +75,38 @@ codex -m "anthropic/claude-opus-5" "Explain this stack trace" codex -m "ollama-cloud/glm-5.2" "Write a SQL migration" ``` +### Claude Code + +安裝 `claude` CLI 後: + +```bash +ocx claude +``` + +`ocx claude` 會在代理未執行時啟動它,並以指向 opencodex 的環境啟動 Claude Code。額外參數會原樣傳遞。層級預設值、其他啟動器和停用方式請參閱 [Claude Code](/zh-tw/guides/claude-code/)。 + +### Claude Desktop + +```bash +ocx claude desktop +``` + +預設會為整個應用程式安裝閘道設定檔。first-party 模式讓 Desktop 繼續使用 claude.ai,只路由其 Code 分頁;詳見 [Claude Code](/zh-tw/guides/claude-code/) 的 Claude Desktop 模式一節。 + +### Grok Build + +在本機監聽時,若 `~/.grok` 存在,`ocx start` 會將可見模型註冊至 `~/.grok/config.toml`。在 Grok Build 選擇 `ocx-*` 模型。遠端設定和受管理區塊請參閱 [Grok Build](/zh-tw/guides/grok-build/)。 + +### 其他工具 + +具備受管理整合的工具(OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code 等)可從儀表板的 **Connect** 頁面連接,或使用: + +```bash +ocx integration client enable --client +``` + +各工具的設定檔及生效時間請參閱[整合](/zh-tw/guides/integrations/)。其他接受自訂端點的工具可使用 OpenAI 相容基本 URL `http://localhost:10100/v1` 或 Anthropic 基本 URL `http://localhost:10100`。 + ## 選擇 sub-agent 模型(可選) 新設定會讓 Codex 的 sub-agent 選擇器包含五個原生模型:`gpt-5.5`、`gpt-5.6-sol`、 diff --git a/readme/README.fr.md b/readme/README.fr.md index d73cbc11b45..cafb3b7b4ff 100644 --- a/readme/README.fr.md +++ b/readme/README.fr.md @@ -1,10 +1,10 @@

- opencodex — proxy universel de fournisseurs pour Codex, Claude Code, Claude Desktop et Grok Build + opencodex — une passerelle locale pour Codex, Claude Code, Claude Desktop, Grok Build et plus

-

make codex open!

-

Proxy universel de fournisseurs pour OpenAI Codex, Claude Code, Claude Desktop & Grok Build
-Deux commandes suffisent pour que chacun d'eux exécute le LLM de votre choix.

+

Une passerelle locale pour vos outils de programmation IA et vos modèles.

+

Utilisez les modèles de votre choix avec Codex, Claude Code, Claude Desktop et Grok Build,
et connectez OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code et d’autres outils grâce aux configurations gérées.

+Voir tous les outils pris en charge →

Suivre @claudeebum sur X @@ -80,13 +80,7 @@ Sol pilote la session et appelle un sous-agent Kimi K3. English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 Documentation complète →

-opencodex est un proxy local léger qui traduit l'API Responses de Codex vers le protocole utilisé -par votre fournisseur — streaming, appels d'outils, jetons de raisonnement, images, dans les deux -sens. Utilisez Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama ou tout autre LLM avec Codex, -Claude Code, Claude Desktop et Grok Build. Il peut également gérer un **groupe de comptes ChatGPT** -pour l'authentification Codex : ajoutez des comptes, actualisez leurs quotas dans le tableau de bord -et laissez les nouvelles sessions être automatiquement routées vers le compte opérationnel le moins utilisé, -tandis que les fils existants restent associés au compte qui les a démarrés. +opencodex est une passerelle locale légère entre vos outils de programmation et vos fournisseurs de modèles. Elle accepte les API Responses, Chat Completions et Anthropic Messages et traduit chaque requête pour votre fournisseur, en prenant en charge le streaming, les appels d’outils, le raisonnement et les images lorsque le client, le modèle et le fournisseur le permettent. Utilisez Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama et d’autres fournisseurs avec Codex, Claude Code, Claude Desktop, Grok Build et les outils de la [page des clients pris en charge](https://opencodex.me/fr/reference/client-support/). Elle peut aussi gérer un **pool de comptes ChatGPT** pour l’authentification Codex : ajoutez des comptes et actualisez leurs quotas dans le tableau de bord ; les nouvelles sessions sont dirigées vers le compte sain le moins utilisé, tandis que les conversations existantes restent liées à leur compte initial. ## Démarrage rapide @@ -104,6 +98,21 @@ fournisseurs (plus de 40 intégrés, ou n'importe quel point de terminaison comp choisissez les modèles, gérez les comptes. `ocx gui` rouvre le tableau de bord à tout moment. +### Connectez votre outil + +Ajoutez d’abord un fournisseur, puis connectez l’outil que vous utilisez : + +| Outil | Connexion | +|---|---| +| Codex | Exécutez `ocx init` et acceptez l’invite Codex. Sur une écoute locale, cela dirige le fournisseur intégré de Codex vers le proxy ; lancez ensuite `codex` comme d’habitude. Déjà configuré ? Le commutateur Codex de la page **Connect** du tableau de bord active ou désactive le routage. | +| Claude Code | Avec le CLI `claude` installé, exécutez `ocx claude`. Il démarre le proxy si nécessaire et lance Claude Code à travers celui-ci. | +| Claude Desktop | Exécutez `ocx claude desktop`. Par défaut, le profil de passerelle est installé pour toute l’application ; consultez le [guide Claude Code](https://opencodex.me/fr/guides/claude-code/) pour le mode first-party. | +| Grok Build | Sur une écoute locale, `ocx start` enregistre les modèles si `~/.grok` existe ; choisissez un modèle `ocx-*` dans Grok Build. Configurations distantes : consultez le [guide Grok Build](https://opencodex.me/fr/guides/grok-build/). | +| Outils avec intégration gérée | Utilisez la page **Connect** du tableau de bord ou `ocx integration client enable --client `. | +| Tout autre outil | Définissez l’URL de base compatible OpenAI `http://localhost:10100/v1` ou l’URL de base Anthropic `http://localhost:10100`. | + +La [page des clients pris en charge](https://opencodex.me/fr/reference/client-support/) indique la méthode de connexion et le protocole de chaque outil. +
Application de bureau (bêta) diff --git a/readme/README.ja.md b/readme/README.ja.md index 471f203c9e3..93ff54d3bd2 100644 --- a/readme/README.ja.md +++ b/readme/README.ja.md @@ -1,10 +1,10 @@

- opencodex — Codex、Claude Code、Claude Desktop、Grok Build のための汎用プロバイダープロキシ + opencodex — Codex、Claude Code、Claude Desktop、Grok Build などのための一つのローカルゲートウェイ

-

make codex open!

-

OpenAI Codex、Claude Code、Claude Desktop、Grok Build のための汎用プロバイダープロキシ
-コマンド 2 つで、そのすべてが好きな LLM で動きます。

+

AI コーディングツールとモデルをつなぐ、一つのローカルゲートウェイ。

+

Codex、Claude Code、Claude Desktop、Grok Build で好きなモデルを使い、
管理対象の設定で OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code などを接続できます。

+対応ツールをすべて見る →

X で @claudeebum をフォロー @@ -80,12 +80,7 @@ Sol がセッションを進め、Kimi K3 のサブエージェントを呼び English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 完全なドキュメント →

-opencodex は、Codex の Responses API をプロバイダーが話すプロトコルへ変換する軽量なローカルプロキシ -です。ストリーミング、ツール呼び出し、reasoning トークン、画像を双方向で扱います。Claude、Gemini、 -Grok、GLM、DeepSeek、Kimi、Qwen、Ollama をはじめとするどの LLM でも、Codex、Claude Code、Claude -Desktop、Grok Build から使えます。Codex 認証用の **ChatGPT アカウントプール**も管理できます。アカウント -を追加し、ダッシュボードでクォータを更新すれば、新しいセッションは使用量が最も少ない健全なアカウント -へ自動的に振り分けられ、既存のスレッドは開始したアカウントに固定されたままになります。 +opencodex は、コーディングツールとモデルプロバイダーをつなぐ軽量なローカルゲートウェイです。Responses、Chat Completions、Anthropic Messages API のリクエストを受け取り、プロバイダーのプロトコルに変換します。クライアント、モデル、プロバイダーが対応する場合は、ストリーミング、ツール呼び出し、推論、画像を中継します。Claude、Gemini、Grok、GLM、DeepSeek、Kimi、Qwen、Ollama などのプロバイダーを、Codex、Claude Code、Claude Desktop、Grok Build や[クライアント対応ページ](https://opencodex.me/ja/reference/client-support/)に記載のツールで使えます。Codex 認証用の **ChatGPT アカウントプール**も管理できます。アカウントを追加し、ダッシュボードでクォータを更新すると、新規セッションは使用量が最も少ない正常なアカウントに自動振り分けされ、既存のスレッドは開始時のアカウントに固定されます。 ## クイックスタート @@ -102,6 +97,21 @@ ocx start # プロキシとダッシュボードが loca 組み込み、または任意の OpenAI 互換エンドポイント)、モデルの選択、アカウントの管理はここで行います。 `ocx gui` でいつでもダッシュボードを開き直せます。 +### ツールを接続する + +まずプロバイダーを追加し、普段使うツールを接続します。 + +| ツール | 接続方法 | +|---|---| +| Codex | `ocx init` を実行し、Codex の確認に同意します。ローカルリスナーでは Codex の組み込みプロバイダーがプロキシを指すようになります。その後は通常どおり `codex` を実行します。設定済みの場合は、ダッシュボードの **Connect** ページにある Codex スイッチでルーティングを切り替えられます。 | +| Claude Code | `claude` CLI をインストールした状態で `ocx claude` を実行します。必要に応じてプロキシを起動し、そこを経由して Claude Code を起動します。 | +| Claude Desktop | `ocx claude desktop` を実行します。デフォルトではアプリ全体にゲートウェイプロファイルをインストールします。first-party モードは [Claude Code ガイド](https://opencodex.me/ja/guides/claude-code/)を参照してください。 | +| Grok Build | ローカルリスナーでは、`~/.grok` が存在すると `ocx start` がモデルを登録します。Grok Build で `ocx-*` モデルを選択します。リモート設定は [Grok Build ガイド](https://opencodex.me/ja/guides/grok-build/)を参照してください。 | +| 管理対象の統合があるツール | ダッシュボードの **Connect** ページか `ocx integration client enable --client ` を使います。 | +| その他のツール | カスタムの OpenAI 互換ベース URL に `http://localhost:10100/v1` を、または Anthropic ベース URL に `http://localhost:10100` を設定します。 | + +各ツールの接続方法と対応プロトコルは[クライアント対応ページ](https://opencodex.me/ja/reference/client-support/)に記載しています。 +
デスクトップアプリ(ベータ版) diff --git a/readme/README.ko.md b/readme/README.ko.md index 18b095a6854..e936ea051c0 100644 --- a/readme/README.ko.md +++ b/readme/README.ko.md @@ -1,10 +1,10 @@

- opencodex — Codex, Claude Code, Claude Desktop, Grok Build를 위한 범용 프로바이더 프록시 + opencodex — Codex, Claude Code, Claude Desktop, Grok Build 등을 위한 하나의 로컬 게이트웨이

-

make codex open!

-

OpenAI Codex, Claude Code, Claude Desktop, Grok Build를 위한 범용 프로바이더 프록시
-명령어 두 줄이면, 그 모두가 지정한 LLM으로 돌아갑니다.

+

AI 코딩 도구와 모델을 연결하는 하나의 로컬 게이트웨이.

+

Codex, Claude Code, Claude Desktop, Grok Build에서 원하는 모델을 사용하고,
관리형 설정으로 OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code 등을 연결하세요.

+지원하는 모든 도구 보기 →

X에서 @claudeebum 팔로우 @@ -80,12 +80,7 @@ Sol이 세션을 이끌고 Kimi K3 서브에이전트를 호출합니다. English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 전체 문서 →

-opencodex는 Codex의 Responses API를 프로바이더가 쓰는 프로토콜로 변환하는 가벼운 로컬 프록시입니다. -streaming, tool 호출, reasoning 토큰, 이미지를 양방향으로 모두 처리합니다. Claude, Gemini, Grok, GLM, -DeepSeek, Kimi, Qwen, Ollama를 비롯한 어떤 LLM이든 Codex, Claude Code, Claude Desktop, Grok Build에서 -쓸 수 있습니다. Codex 인증용 **ChatGPT 계정 풀**도 관리합니다. 계정을 추가하고 대시보드에서 쿼터를 -갱신하면, 새 세션은 사용량이 가장 적은 정상 계정으로 자동 라우팅되고 기존 스레드는 시작한 계정에 -그대로 고정됩니다. +opencodex는 코딩 도구와 모델 프로바이더를 연결하는 가벼운 로컬 게이트웨이입니다. Responses, Chat Completions, Anthropic Messages API 요청을 받아 프로바이더의 프로토콜로 변환하며, 클라이언트와 모델, 프로바이더가 지원하는 경우 스트리밍, 도구 호출, 추론과 이미지를 전달합니다. Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama 등의 프로바이더를 Codex, Claude Code, Claude Desktop, Grok Build 및 [클라이언트 지원 페이지](https://opencodex.me/ko/reference/client-support/)에 나열된 도구와 함께 사용하세요. Codex 인증용 **ChatGPT 계정 풀**도 관리할 수 있습니다. 계정을 추가하고 대시보드에서 쿼터를 갱신하면 새 세션은 사용량이 가장 적은 정상 계정으로 자동 라우팅되고 기존 스레드는 시작한 계정에 고정됩니다. ## 빠른 시작 @@ -101,6 +96,21 @@ ocx start # 프록시 + 대시보드: localhost:10100 **http://localhost:10100**을 열고 웹 대시보드에서 전부 설정하세요. 프로바이더 추가(내장 40개 이상, 또는 OpenAI 호환 엔드포인트), 모델 선택, 계정 관리까지 모두 여기서 합니다. `ocx gui`로 대시보드를 언제든 다시 엽니다. +### 도구 연결 + +먼저 프로바이더를 추가한 다음 사용 중인 도구를 연결하세요: + +| 도구 | 연결 방법 | +|---|---| +| Codex | `ocx init`을 실행하고 Codex 프롬프트를 수락하세요. 로컬 리스너에서는 Codex 내장 프로바이더가 프록시를 가리킵니다. 이후 평소처럼 `codex`를 실행하세요. 이미 설정했다면 대시보드 **Connect** 페이지의 Codex 스위치로 라우팅을 켜거나 끌 수 있습니다. | +| Claude Code | `claude` CLI가 설치된 상태에서 `ocx claude`를 실행하세요. 필요하면 프록시를 시작하고 이를 통해 Claude Code를 실행합니다. | +| Claude Desktop | `ocx claude desktop`을 실행하세요. 기본적으로 앱 전체에 게이트웨이 프로필을 설치합니다. first-party 모드는 [Claude Code 가이드](https://opencodex.me/ko/guides/claude-code/)를 참조하세요. | +| Grok Build | 로컬 리스너에서 `~/.grok`이 있으면 `ocx start`가 모델을 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정은 [Grok Build 가이드](https://opencodex.me/ko/guides/grok-build/)를 참조하세요. | +| 관리형 통합이 있는 도구 | 대시보드의 **Connect** 페이지 또는 `ocx integration client enable --client `를 사용하세요. | +| 그 밖의 도구 | OpenAI 호환 기본 URL을 `http://localhost:10100/v1`로, 또는 Anthropic 기본 URL을 `http://localhost:10100`으로 설정하세요. | + +[클라이언트 지원 페이지](https://opencodex.me/ko/reference/client-support/)에서 각 도구의 연결 방식과 프로토콜을 확인할 수 있습니다. +
데스크톱 앱 (베타) diff --git a/readme/README.ru.md b/readme/README.ru.md index f1e26370a0a..b41c8dfa39a 100644 --- a/readme/README.ru.md +++ b/readme/README.ru.md @@ -1,10 +1,10 @@

- opencodex — универсальный прокси провайдеров для Codex, Claude Code, Claude Desktop и Grok Build + opencodex — один локальный шлюз для Codex, Claude Code, Claude Desktop, Grok Build и других инструментов

-

make codex open!

-

Универсальный прокси провайдеров для OpenAI Codex, Claude Code, Claude Desktop и Grok Build
-Две команды — и каждый из них работает на любой LLM, которую вы укажете.

+

Один локальный шлюз для ваших инструментов программирования с ИИ и моделей.

+

Используйте выбранные модели с Codex, Claude Code, Claude Desktop и Grok Build,
а OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code и другие подключайте через управляемые конфигурации.

+Все поддерживаемые инструменты →

Подписывайтесь на @claudeebum в X @@ -80,14 +80,7 @@ Sol ведёт сессию и вызывает подагента Kimi K3. English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 Полная документация →

-opencodex — лёгкий локальный прокси, который транслирует Responses API Codex в протокол, -понятный вашему провайдеру: потоковая передача, вызовы инструментов, токены рассуждений и -изображения — в обе стороны. Используйте Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, -Ollama или любую другую LLM с Codex, Claude Code, Claude Desktop и Grok Build. Кроме того, -он умеет управлять **пулом аккаунтов ChatGPT** для аутентификации Codex: добавляйте аккаунты, -обновляйте их квоты в панели управления, и новые сессии будут автоматически направляться -на работоспособный аккаунт с наименьшим использованием, а существующие треды останутся -закреплёнными за аккаунтом, с которого они начались. +opencodex — лёгкий локальный шлюз между вашими инструментами программирования и поставщиками моделей. Он принимает запросы API Responses, Chat Completions и Anthropic Messages и переводит их в протокол провайдера, передавая потоковые ответы, вызовы инструментов, рассуждения и изображения там, где это поддерживают клиент, модель и провайдер. Используйте Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama и других провайдеров с Codex, Claude Code, Claude Desktop, Grok Build и инструментами со [страницы поддержки клиентов](https://opencodex.me/ru/reference/client-support/). Он также управляет **пулом аккаунтов ChatGPT** для аутентификации Codex: добавляйте аккаунты и обновляйте их квоты в панели; новые сеансы автоматически направляются на исправный аккаунт с наименьшим использованием, а существующие треды остаются привязаны к исходному аккаунту. ## Быстрый старт @@ -104,6 +97,21 @@ ocx start # прокси + панель управлен (40+ встроенных или любой OpenAI-совместимый endpoint), выберите модели, управляйте аккаунтами. `ocx gui` в любой момент снова откроет панель. +### Подключите свой инструмент + +Сначала добавьте провайдера, затем подключите используемый инструмент: + +| Инструмент | Как подключить | +|---|---| +| Codex | Выполните `ocx init` и примите приглашение Codex. При локальном прослушивании встроенный провайдер Codex будет направлен на прокси; затем запускайте `codex` как обычно. Уже настроено? Переключатель Codex на странице **Connect** панели включает и выключает маршрутизацию. | +| Claude Code | Установив CLI `claude`, выполните `ocx claude`. Команда при необходимости запускает прокси и запускает через него Claude Code. | +| Claude Desktop | Выполните `ocx claude desktop`. По умолчанию профиль шлюза устанавливается для всего приложения; о режиме first-party см. [руководство Claude Code](https://opencodex.me/ru/guides/claude-code/). | +| Grok Build | При локальном прослушивании `ocx start` регистрирует модели, если существует `~/.grok`; выберите модель `ocx-*` в Grok Build. Удалённые конфигурации описаны в [руководстве Grok Build](https://opencodex.me/ru/guides/grok-build/). | +| Инструменты с управляемой интеграцией | Используйте страницу **Connect** панели или `ocx integration client enable --client `. | +| Любой другой инструмент | Укажите пользовательский базовый URL, совместимый с OpenAI: `http://localhost:10100/v1`, либо базовый URL Anthropic: `http://localhost:10100`. | + +На [странице поддержки клиентов](https://opencodex.me/ru/reference/client-support/) указаны способы подключения и протоколы каждого инструмента. +
Настольное приложение (бета) diff --git a/readme/README.tr.md b/readme/README.tr.md index 85eb9cb03f2..db1e9b7220b 100644 --- a/readme/README.tr.md +++ b/readme/README.tr.md @@ -1,10 +1,10 @@

- opencodex — Codex, Claude Code, Claude Desktop ve Grok Build için evrensel sağlayıcı proxy'si + opencodex — Codex, Claude Code, Claude Desktop, Grok Build ve diğerleri için tek bir yerel ağ geçidi

-

make codex open!

-

OpenAI Codex, Claude Code, Claude Desktop ve Grok Build için evrensel sağlayıcı proxy'si
-İki komut, ve hepsi işaret ettiğiniz LLM ile çalışır.

+

AI kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçidi.

+

Seçtiğiniz modelleri Codex, Claude Code, Claude Desktop ve Grok Build ile kullanın;
OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code ve diğerlerini yönetilen yapılandırmalarla bağlayın.

+Desteklenen tüm araçları görün →

X üzerinde @claudeebum hesabını takip et @@ -80,12 +80,7 @@ Sol oturumu yürütüyor ve bir Kimi K3 alt ajanını çağırıyor. English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 Tüm dokümantasyon →

-opencodex, Codex'in Responses API'sini sağlayıcınızın konuştuğu protokole çeviren hafif bir yerel -proxy'dir — akış, araç çağrıları, akıl yürütme belirteçleri ve görseller, iki yönde de. Claude, Gemini, -Grok, GLM, DeepSeek, Kimi, Qwen, Ollama ya da başka herhangi bir LLM'i Codex, Claude Code, Claude -Desktop ve Grok Build ile kullanın. Codex kimlik doğrulaması için bir **ChatGPT hesap havuzu** da -yönetebilir: hesapları ekleyin, kotalarını kontrol panelinden tazeleyin ve yeni oturumlar en az -kullanılan sağlıklı hesaba kendiliğinden gitsin; mevcut dizilerse onları başlatan hesaba bağlı kalsın. +opencodex, kodlama araçlarınızla model sağlayıcılarınız arasında çalışan hafif bir yerel ağ geçididir. Responses, Chat Completions ve Anthropic Messages API isteklerini kabul edip sağlayıcınızın protokolüne çevirir; istemci, model ve sağlayıcı desteklediğinde akış, araç çağrıları, akıl yürütme ve görselleri aktarır. Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama ve diğer sağlayıcıları Codex, Claude Code, Claude Desktop, Grok Build ve [istemci desteği sayfasındaki](https://opencodex.me/tr/reference/client-support/) araçlarla kullanın. Codex kimlik doğrulaması için bir **ChatGPT hesap havuzunu** da yönetebilir: hesap ekleyip kotalarını panelde yenileyin; yeni oturumlar kullanımı en düşük sağlıklı hesaba otomatik yönlendirilirken mevcut diziler başladıkları hesaba bağlı kalır. ## Hızlı başlangıç @@ -102,6 +97,21 @@ Arka planda çalıştırmak için `ocx service` kullanın. ekleyin (40'tan fazla hazır sağlayıcı ya da herhangi bir OpenAI uyumlu uç nokta), model seçin, hesap yönetin. `ocx gui` paneli istediğiniz zaman yeniden açar. +### Aracınızı bağlayın + +Önce bir sağlayıcı ekleyin, ardından kullandığınız aracı bağlayın: + +| Araç | Bağlantı yöntemi | +|---|---| +| Codex | `ocx init` çalıştırın ve Codex istemini kabul edin. Yerel dinleyicide bu, Codex’in yerleşik sağlayıcısını proxy’ye yönlendirir; ardından `codex` komutunu her zamanki gibi çalıştırın. Zaten kuruluysa panelin **Connect** sayfasındaki Codex anahtarı yönlendirmeyi açar veya kapatır. | +| Claude Code | `claude` CLI kuruluysa `ocx claude` çalıştırın. Gerekirse proxy’yi başlatır ve Claude Code’u onun üzerinden açar. | +| Claude Desktop | `ocx claude desktop` çalıştırın. Varsayılan olarak ağ geçidi profilini tüm uygulama için kurar; first-party modu için [Claude Code kılavuzuna](https://opencodex.me/tr/guides/claude-code/) bakın. | +| Grok Build | Yerel dinleyicide `~/.grok` varsa `ocx start` modelleri kaydeder; Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar için [Grok Build kılavuzuna](https://opencodex.me/tr/guides/grok-build/) bakın. | +| Yönetilen entegrasyonu olan araçlar | Panelin **Connect** sayfasını veya `ocx integration client enable --client ` komutunu kullanın. | +| Diğer tüm araçlar | Özel OpenAI uyumlu temel URL’yi `http://localhost:10100/v1` veya Anthropic temel URL’sini `http://localhost:10100` olarak ayarlayın. | + +[İstemci desteği sayfası](https://opencodex.me/tr/reference/client-support/), her aracın bağlantı yolunu ve kullandığı protokolü listeler. +
Masaüstü uygulaması (beta) diff --git a/readme/README.zh-CN.md b/readme/README.zh-CN.md index 982cd296b8c..361c60949c6 100644 --- a/readme/README.zh-CN.md +++ b/readme/README.zh-CN.md @@ -1,10 +1,10 @@

- opencodex —— 面向 Codex、Claude Code、Claude Desktop 和 Grok Build 的通用提供商代理 + opencodex — 连接 Codex、Claude Code、Claude Desktop、Grok Build 等工具的本地网关

-

make codex open!

-

面向 OpenAI Codex、Claude Code、Claude Desktop 和 Grok Build 的通用提供商代理
-两条命令,它们就都能跑你指定的任意 LLM。

+

一个本地网关,连接你的 AI 编程工具与模型。

+

在 Codex、Claude Code、Claude Desktop 和 Grok Build 中使用你选择的模型,
并通过托管配置连接 OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code 等工具。

+查看所有受支持的工具 →

在 X 上关注 @claudeebum @@ -80,11 +80,7 @@ Sol 驱动会话,并调用 Kimi K3 子代理。 English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 完整文档 →

-opencodex 是一个轻量级本地代理,把 Codex 的 Responses API 翻译成你的提供商所讲的协议 —— -流式传输、工具调用、推理令牌、图片,双向都通。用 Claude、Gemini、Grok、GLM、DeepSeek、Kimi、 -Qwen、Ollama 或任意其他 LLM 搭配 Codex、Claude Code、Claude Desktop 和 Grok Build。它还能为 -Codex 认证管理一个 **ChatGPT 账户池**:添加账户,在仪表板中刷新配额,让新会话自动路由到 -使用量最低的健康账户,而已有线程则固定在启动它们的账户上。 +opencodex 是连接编程工具与模型提供商的轻量级本地网关。它接受 Responses、Chat Completions 和 Anthropic Messages API 请求,并将请求转换为提供商使用的协议;在客户端、模型和提供商支持的情况下,传递流式输出、工具调用、推理和图像。你可以在 Codex、Claude Code、Claude Desktop、Grok Build 及[客户端支持页面](https://opencodex.me/zh-cn/reference/client-support/)列出的工具中使用 Claude、Gemini、Grok、GLM、DeepSeek、Kimi、Qwen、Ollama 等提供商。它还能管理用于 Codex 认证的 **ChatGPT 账号池**:添加账号并在仪表盘刷新配额,新会话会自动路由到用量最低的健康账号,现有线程则保持绑定到启动它们的账号。 ## 快速开始 @@ -101,6 +97,21 @@ ocx start # 代理 + 仪表板:localhost:10100 (40 多个内置,或任意 OpenAI 兼容端点)、选择模型、管理账户。随时运行 `ocx gui` 可重新打开仪表板。 +### 连接你的工具 + +先添加提供商,再连接你正在使用的工具: + +| 工具 | 连接方式 | +|---|---| +| Codex | 运行 `ocx init` 并接受 Codex 提示。在本地监听下,这会让 Codex 内置提供商指向代理;然后照常运行 `codex`。已经设置过?仪表盘 **Connect** 页面的 Codex 开关可以开启或关闭路由。 | +| Claude Code | 安装 `claude` CLI 后运行 `ocx claude`。它会在需要时启动代理,并通过代理启动 Claude Code。 | +| Claude Desktop | 运行 `ocx claude desktop`。默认会为整个应用安装网关配置;first-party 模式请参见 [Claude Code 指南](https://opencodex.me/zh-cn/guides/claude-code/)。 | +| Grok Build | 在本地监听下,若 `~/.grok` 存在,`ocx start` 会注册模型;在 Grok Build 中选择 `ocx-*` 模型。远程配置请参见 [Grok Build 指南](https://opencodex.me/zh-cn/guides/grok-build/)。 | +| 有托管集成的工具 | 使用仪表盘 **Connect** 页面,或运行 `ocx integration client enable --client `。 | +| 其他工具 | 将自定义 OpenAI 兼容 base URL 设为 `http://localhost:10100/v1`,或将 Anthropic base URL 设为 `http://localhost:10100`。 | + +[客户端支持页面](https://opencodex.me/zh-cn/reference/client-support/)列出了各工具的接入方式及所用协议。 +
桌面应用(测试版) diff --git a/readme/README.zh-TW.md b/readme/README.zh-TW.md index d95d97db590..3438d05006d 100644 --- a/readme/README.zh-TW.md +++ b/readme/README.zh-TW.md @@ -1,10 +1,10 @@

- opencodex——適用於 Codex、Claude Code、Claude Desktop 與 Grok Build 的通用供應商代理 + opencodex — 連接 Codex、Claude Code、Claude Desktop、Grok Build 等工具的本機閘道

-

make codex open!

-

適用於 OpenAI Codex、Claude Code、Claude Desktop 與 Grok Build 的通用供應商代理
-兩條命令,這四個就都能跑你指定的任何 LLM。

+

一個本機閘道,連接你的 AI 程式開發工具與模型。

+

在 Codex、Claude Code、Claude Desktop 和 Grok Build 中使用你選擇的模型,
並透過受管理的設定連接 OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code 等工具。

+查看所有支援的工具 →

在 X 上關注 @claudeebum @@ -80,10 +80,7 @@ Sol 主導會話,並呼叫 Kimi K3 子代理。 English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 完整文件 →

-opencodex 是輕量級本機代理,把 Codex 的 Responses API 翻譯成你的供應商所用的協議——串流、工具呼叫、 -reasoning token、圖片,雙向皆可。在 Codex、Claude Code、Claude Desktop 與 Grok Build 上使用 Claude、 -Gemini、Grok、GLM、DeepSeek、Kimi、Qwen、Ollama 或任何其他 LLM。它也能為 Codex 認證管理 -**ChatGPT 帳號池**:新增帳號、在儀表板重新整理配額,讓新會話自動路由到使用量最低的健康帳號,既有執行緒則固定在啟動它的帳號上。 +opencodex 是連接程式開發工具與模型供應商的輕量級本機閘道。它接收 Responses、Chat Completions 和 Anthropic Messages API 請求,並轉換成供應商使用的協定;在用戶端、模型和供應商支援的情況下,傳遞串流、工具呼叫、推理和影像。你可以在 Codex、Claude Code、Claude Desktop、Grok Build 及[用戶端支援頁面](https://opencodex.me/zh-tw/reference/client-support/)列出的工具中使用 Claude、Gemini、Grok、GLM、DeepSeek、Kimi、Qwen、Ollama 等供應商。它也能管理 Codex 驗證用的 **ChatGPT 帳號池**:新增帳號並在儀表板重新整理配額,新工作階段會自動路由至用量最低的健康帳號,既有對話則保持綁定原始帳號。 ## 快速開始 @@ -100,6 +97,21 @@ ocx start # 代理 + 儀表板位於 localhost:10100 (40+ 內建,或任何 OpenAI 相容端點)、挑選模型、管理帳號。隨時可用 `ocx gui` 重新開啟儀表板。 +### 連接你的工具 + +先新增供應商,再連接你正在使用的工具: + +| 工具 | 連接方式 | +|---|---| +| Codex | 執行 `ocx init` 並接受 Codex 提示。在本機監聽時,這會讓 Codex 內建供應商指向代理;接著照常執行 `codex`。已經設定過?儀表板 **Connect** 頁面的 Codex 開關可啟用或停用路由。 | +| Claude Code | 安裝 `claude` CLI 後執行 `ocx claude`。它會在需要時啟動代理,並透過代理啟動 Claude Code。 | +| Claude Desktop | 執行 `ocx claude desktop`。預設會為整個應用程式安裝閘道設定檔;first-party 模式請參閱 [Claude Code 指南](https://opencodex.me/zh-tw/guides/claude-code/)。 | +| Grok Build | 在本機監聽時,若 `~/.grok` 存在,`ocx start` 會註冊模型;在 Grok Build 選擇 `ocx-*` 模型。遠端設定請參閱 [Grok Build 指南](https://opencodex.me/zh-tw/guides/grok-build/)。 | +| 具備受管理整合的工具 | 使用儀表板的 **Connect** 頁面,或執行 `ocx integration client enable --client `。 | +| 其他工具 | 將自訂 OpenAI 相容基本 URL 設為 `http://localhost:10100/v1`,或將 Anthropic 基本 URL 設為 `http://localhost:10100`。 | + +[用戶端支援頁面](https://opencodex.me/zh-tw/reference/client-support/)列出各工具的連接方式與使用的協定。 +
桌面應用程式(Beta) diff --git a/readme/i18n-manifest.json b/readme/i18n-manifest.json index 524fa9832d3..0f7fa73e014 100644 --- a/readme/i18n-manifest.json +++ b/readme/i18n-manifest.json @@ -6,43 +6,43 @@ "file": "readme/README.fr.md", "label": "Français", "docsPath": "fr", - "sourceSha256": "7de59d49abc8ebc0220c914af9edd6d45699178bc93e1e45c5da30f6a05a5203" + "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" }, "ko": { "file": "readme/README.ko.md", "label": "한국어", "docsPath": "ko", - "sourceSha256": "7de59d49abc8ebc0220c914af9edd6d45699178bc93e1e45c5da30f6a05a5203" + "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" }, "zh-CN": { "file": "readme/README.zh-CN.md", "label": "简体中文", "docsPath": "zh-cn", - "sourceSha256": "7de59d49abc8ebc0220c914af9edd6d45699178bc93e1e45c5da30f6a05a5203" + "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" }, "zh-TW": { "file": "readme/README.zh-TW.md", "label": "繁體中文", "docsPath": "zh-tw", - "sourceSha256": "7de59d49abc8ebc0220c914af9edd6d45699178bc93e1e45c5da30f6a05a5203" + "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" }, "ru": { "file": "readme/README.ru.md", "label": "Русский", "docsPath": "ru", - "sourceSha256": "7de59d49abc8ebc0220c914af9edd6d45699178bc93e1e45c5da30f6a05a5203" + "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" }, "ja": { "file": "readme/README.ja.md", "label": "日本語", "docsPath": "ja", - "sourceSha256": "7de59d49abc8ebc0220c914af9edd6d45699178bc93e1e45c5da30f6a05a5203" + "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" }, "tr": { "file": "readme/README.tr.md", "label": "Türkçe", "docsPath": "tr", - "sourceSha256": "7de59d49abc8ebc0220c914af9edd6d45699178bc93e1e45c5da30f6a05a5203" + "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" } } } From e5ee0a88505df42854d8836450ae378bce452a44 Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 07:14:54 +0900 Subject: [PATCH 07/10] docs: fix the Codex, Claude Desktop and landing connection steps --- README.md | 4 ++-- docs-site/src/components/Landing.astro | 10 +++++----- .../src/content/docs/getting-started/quickstart.md | 12 +++++++----- .../content/docs/zh-cn/getting-started/quickstart.md | 4 ++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index cf4e52b2d24..ed1eb32d709 100644 --- a/README.md +++ b/README.md @@ -111,9 +111,9 @@ Add a provider first, then connect the tool you already use: | Tool | How to connect | |---|---| -| Codex | Run `ocx init` and accept the Codex prompt. On a local listener this points Codex's built-in provider at the proxy; then run `codex` as usual. Already set up? The Codex switch on the dashboard's **Connect** page turns routing on or off. | +| Codex | Turn on the Codex switch on the dashboard's **Connect** page, then run `codex` as usual. On a local listener this points Codex's built-in provider at the proxy. From the terminal, run `ocx init` before adding providers in the dashboard and accept its Codex prompt. | | Claude Code | With the `claude` CLI installed, run `ocx claude`. It starts the proxy if needed and launches Claude Code through it. | -| Claude Desktop | Run `ocx claude desktop`. By default it installs the gateway profile for the whole app; see the [Claude Code guide](https://opencodex.me/guides/claude-code/) for the first-party mode. | +| Claude Desktop | Run `ocx claude desktop`. On a new install it sets up the gateway profile for the whole app; an existing first-party setup is kept, and `ocx claude desktop apply --gateway` switches explicitly. See the [Claude Code guide](https://opencodex.me/guides/claude-code/). | | Grok Build | On a local listener, `ocx start` registers the models when `~/.grok` exists; pick an `ocx-*` model in Grok Build. Remote setups: see the [Grok Build guide](https://opencodex.me/guides/grok-build/). | | Tools with a managed integration | Use the dashboard **Connect** page, or `ocx integration client enable --client `. | | Any other tool | Set a custom OpenAI-compatible base URL of `http://localhost:10100/v1`, or an Anthropic base URL of `http://localhost:10100`. | diff --git a/docs-site/src/components/Landing.astro b/docs-site/src/components/Landing.astro index a9f64a18a68..99a3f92abb8 100644 --- a/docs-site/src/components/Landing.astro +++ b/docs-site/src/components/Landing.astro @@ -35,7 +35,7 @@ const fr = { 'Install': 'Installer', 'Start the proxy': 'Démarrer le proxy', 'Add a provider and connect Codex': 'Ajouter un fournisseur et connecter Codex', - 'Launch Claude Code through ocx': 'Lancer Claude Code via ocx', + 'In another terminal: launch Claude Code through ocx': 'Dans un autre terminal : lancer Claude Code via ocx', 'Codex now routes through ocx': 'Codex passe maintenant par ocx', 'See supported tools': 'Voir les outils pris en charge', 'Getting Started': 'Démarrage', @@ -63,7 +63,7 @@ const fr = { 'Project': 'Projet', 'Contributing': 'Contribuer', 'Run ': 'Exécutez ', - ' on any LLM.': ' sur n’importe quel LLM.', + ' on the models you choose.': ' sur les modèles de votre choix.', 'opencodex is one local gateway for your AI coding tools and models. It serves Codex, Claude Code, Claude Desktop and Grok Build from one port and connects more tools through managed configs, translating each wire format to the provider you choose, with streaming, tool calls, reasoning and images where the model supports them. Zero client patches.': 'opencodex est une passerelle locale unique pour vos outils de code IA et vos modèles. Il sert Codex, Claude Code, Claude Desktop et Grok Build sur un même port et connecte d’autres outils via des configurations gérées, en traduisant chaque format de protocole vers le fournisseur de votre choix, avec la diffusion en continu, les appels d’outils, le raisonnement et les images lorsque le modèle les prend en charge. Aucune modification des clients.', 'Get Started': 'Commencer', 'Supported providers': 'Fournisseurs pris en charge', @@ -166,9 +166,9 @@ const providers: { label: string; path?: string }[] = [ const quickstartMini = [ { cmd: 'npm install -g @bitkyc08/opencodex', note: t('Install', '설치', '安装', 'Установка', 'インストール', '安裝', 'Kurulum') }, - { cmd: 'ocx start', note: t('Start the proxy', '프록시 시작', '启动代理', 'Запуск прокси', 'プロキシを起動', '啟動代理', "Proxy'yi başlatın") }, { cmd: 'ocx init', note: t('Add a provider and connect Codex', '프로바이더 추가 후 Codex 연결', '添加提供商并连接 Codex', 'Добавьте провайдера и подключите Codex', 'プロバイダーを追加して Codex を接続', '新增供應商並連接 Codex', 'Sağlayıcı ekleyip Codex’i bağlayın') }, - { cmd: 'ocx claude', note: t('Launch Claude Code through ocx', 'ocx를 거쳐 Claude Code 실행', '通过 ocx 启动 Claude Code', 'Запуск Claude Code через ocx', 'ocx 経由で Claude Code を起動', '透過 ocx 啟動 Claude Code', 'Claude Code’u ocx üzerinden başlatın') }, + { cmd: 'ocx start', note: t('Start the proxy', '프록시 시작', '启动代理', 'Запуск прокси', 'プロキシを起動', '啟動代理', "Proxy'yi başlatın") }, + { cmd: 'ocx claude', note: t('In another terminal: launch Claude Code through ocx', '다른 터미널에서: ocx를 거쳐 Claude Code 실행', '在另一个终端中:通过 ocx 启动 Claude Code', 'В другом терминале: запуск Claude Code через ocx', '別のターミナルで: ocx 経由で Claude Code を起動', '在另一個終端機中:透過 ocx 啟動 Claude Code', 'Başka bir terminalde: Claude Code’u ocx üzerinden başlatın') }, ]; const quickstart = [ @@ -265,7 +265,7 @@ const docsMap = [ Claude - {t(' on any LLM.', '를 어떤 LLM 위에서든.', ' 跑在任意 LLM 上。', ' на любой LLM.', ' を任意の LLM 上で。', ' 跑在任意 LLM 上。', ' dilediğiniz LLM ile çalıştırın.')} + {t(' on the models you choose.', '를 원하는 모델로.', ' 跑在你选择的模型上。', ' на выбранных вами моделях.', ' を好きなモデルで。', ' 跑在你選擇的模型上。', ' seçtiğiniz modellerle çalıştırın.')}

{t('opencodex is one local gateway for your AI coding tools and models. It serves Codex, Claude Code, Claude Desktop and Grok Build from one port and connects more tools through managed configs, translating each wire format to the provider you choose, with streaming, tool calls, reasoning and images where the model supports them. Zero client patches.', 'opencodex는 AI 코딩 도구와 모델을 잇는 하나의 로컬 게이트웨이입니다. 포트 하나로 Codex, Claude Code, Claude Desktop, Grok Build를 서빙하고 관리형 설정으로 더 많은 도구를 연결하며, 각 wire 포맷을 원하는 프로바이더로 변환합니다. 모델이 지원하면 스트리밍·tool call·reasoning·이미지도 그대로 통과합니다. 클라이언트 패치는 없습니다.', 'opencodex 是一个本地网关,连接你的 AI 编程工具与模型。它用同一个端口服务 Codex、Claude Code、Claude Desktop 和 Grok Build,并通过托管配置连接更多工具,把各自的线路格式翻译为你选择的提供商;在模型支持时,流式、工具调用、推理与图像都会保留。无需修补客户端。', 'opencodex — единый локальный шлюз для ваших ИИ-инструментов для кода и моделей. Он обслуживает Codex, Claude Code, Claude Desktop и Grok Build через один порт и подключает другие инструменты через управляемые конфигурации, транслируя каждый wire-формат для выбранного провайдера; стриминг, вызовы инструментов, рассуждения и изображения проходят, если их поддерживает модель. Никаких патчей на стороне клиента.', 'opencodex は、AI コーディングツールとモデルをつなぐ 1 つのローカルゲートウェイです。1 つのポートで Codex、Claude Code、Claude Desktop、Grok Build を提供し、管理された設定でほかのツールも接続します。各 wire フォーマットを選んだプロバイダーへ変換し、モデルが対応していればストリーミング・ツール呼び出し・推論・画像もそのまま通します。クライアントのパッチは不要です。', 'opencodex 是一個本機閘道,連接你的 AI 程式開發工具與模型。它用同一個連接埠服務 Codex、Claude Code、Claude Desktop 和 Grok Build,並透過代管設定連接更多工具,把各自的線路格式翻譯為你選擇的供應商;在模型支援時,串流、工具呼叫、推理與圖像都會保留。無需修補用戶端。', 'opencodex, yapay zekâ kodlama araçlarınız ve modelleriniz için tek bir yerel ağ geçididir. Codex, Claude Code, Claude Desktop ve Grok Build’i tek bir port üzerinden sunar, diğer araçları yönetilen yapılandırmalarla bağlar ve her hat formatını seçtiğiniz sağlayıcıya dönüştürür; model destekliyorsa akış, araç çağrıları, akıl yürütme ve görseller korunur. İstemci tarafında sıfır yama.')} diff --git a/docs-site/src/content/docs/getting-started/quickstart.md b/docs-site/src/content/docs/getting-started/quickstart.md index b39f1d19e11..237303dfd9d 100644 --- a/docs-site/src/content/docs/getting-started/quickstart.md +++ b/docs-site/src/content/docs/getting-started/quickstart.md @@ -112,9 +112,10 @@ providers and models. ### Codex -If you accepted the Codex prompt in step 1, Codex now talks to opencodex transparently. If setup -exited because a config already existed, use the Codex switch on the dashboard's **Connect** page; -[Codex Integration](/guides/codex-integration/) explains what it changes and how to restore. +If you accepted the Codex prompt in step 1, Codex now talks to opencodex transparently. If you +declined it, or setup exited because a config already existed, turn on the Codex switch on the +dashboard's **Connect** page before running Codex. [Codex Integration](/guides/codex-integration/) +explains what it changes and how to restore. ```bash codex "Refactor this function for readability" @@ -145,8 +146,9 @@ tier defaults, other launchers and how to opt out. ocx claude desktop ``` -By default this installs the gateway profile for the whole app. The first-party mode, which keeps -Desktop on claude.ai and routes only its Code tab, is described under +On a new install this sets up the gateway profile for the whole app. An install that already uses +the first-party mode keeps it; run `ocx claude desktop apply --gateway` to switch explicitly. The +first-party mode, which keeps Desktop on claude.ai and routes only its Code tab, is described under [Claude Desktop modes](/guides/claude-code/#claude-desktop-modes-gateway-default-and-first-party). ### Grok Build diff --git a/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md b/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md index bb5dadc7978..827fe2ee066 100644 --- a/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md +++ b/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md @@ -59,7 +59,7 @@ ocx gui # open the dashboard on the live port ### Codex -如果你在第 1 步中接受了 Codex 提示,Codex 现在会透明地通过 opencodex 通信。如果因为已有配置而跳过了设置,请使用仪表盘 **Connect** 页面上的 Codex 开关;[Codex 集成](/zh-cn/guides/codex-integration/)说明了它会修改什么以及如何恢复。 +如果你在第 1 步中接受了 Codex 提示,Codex 现在会透明地通过 opencodex 通信。如果你拒绝了该提示,或因为已有配置而跳过了设置,请在运行 Codex 之前打开仪表盘 **Connect** 页面上的 Codex 开关;[Codex 集成](/zh-cn/guides/codex-integration/)说明了它会修改什么以及如何恢复。 ```bash codex "Refactor this function for readability" @@ -88,7 +88,7 @@ ocx claude ocx claude desktop ``` -默认会为整个应用安装网关配置。first-party 模式会让 Desktop 继续使用 claude.ai,只路由其 Code 标签页,详见 [Claude Code](/zh-cn/guides/claude-code/) 中的 Claude Desktop 模式一节。 +全新安装时会为整个应用设置网关配置;已经使用 first-party 模式的安装会保持原模式,可运行 `ocx claude desktop apply --gateway` 明确切换。first-party 模式会让 Desktop 继续使用 claude.ai,只路由其 Code 标签页,详见 [Claude Code](/zh-cn/guides/claude-code/) 中的 Claude Desktop 模式一节。 ### Grok Build From 132683c06397918e07f3157a40b2cc85802e20d0 Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 07:24:14 +0900 Subject: [PATCH 08/10] docs: sync translated connection steps --- .../content/docs/fr/getting-started/quickstart.md | 4 ++-- .../content/docs/ja/getting-started/quickstart.md | 4 ++-- .../content/docs/ko/getting-started/quickstart.md | 4 ++-- .../content/docs/ru/getting-started/quickstart.md | 4 ++-- .../content/docs/tr/getting-started/quickstart.md | 4 ++-- .../docs/zh-tw/getting-started/quickstart.md | 4 ++-- readme/README.fr.md | 4 ++-- readme/README.ja.md | 4 ++-- readme/README.ko.md | 4 ++-- readme/README.ru.md | 4 ++-- readme/README.tr.md | 4 ++-- readme/README.zh-CN.md | 4 ++-- readme/README.zh-TW.md | 4 ++-- readme/i18n-manifest.json | 14 +++++++------- 14 files changed, 33 insertions(+), 33 deletions(-) diff --git a/docs-site/src/content/docs/fr/getting-started/quickstart.md b/docs-site/src/content/docs/fr/getting-started/quickstart.md index 02e67eddcd9..9ff5e4acf94 100644 --- a/docs-site/src/content/docs/fr/getting-started/quickstart.md +++ b/docs-site/src/content/docs/fr/getting-started/quickstart.md @@ -64,7 +64,7 @@ Choisissez la branche correspondant à votre outil. Vous pouvez en connecter plu ### Codex -Si vous avez accepté l’invite Codex à l’étape 1, Codex communique maintenant avec opencodex de manière transparente. Si la configuration s’est arrêtée parce qu’un fichier existait déjà, utilisez le commutateur Codex de la page **Connect** ; [Intégration Codex](/fr/guides/codex-integration/) explique les modifications et leur restauration. +Si vous avez accepté l’invite Codex à l’étape 1, Codex communique maintenant avec opencodex de manière transparente. Si vous avez refusé cette invite ou si la configuration s’est arrêtée parce qu’une configuration existait déjà, activez le commutateur Codex sur la page **Connect** du tableau de bord avant de lancer Codex ; [Intégration Codex](/fr/guides/codex-integration/) explique les modifications et leur restauration. ```bash codex "Refactor this function for readability" @@ -93,7 +93,7 @@ ocx claude ocx claude desktop ``` -Par défaut, cette commande installe le profil de passerelle pour toute l’application. Le mode first-party conserve claude.ai pour Desktop et ne route que son onglet Code ; consultez la section sur les modes Claude Desktop dans [Claude Code](/fr/guides/claude-code/). +Lors d’une nouvelle installation, cette commande configure le profil de passerelle pour toute l’application. Une installation utilisant déjà le mode first-party le conserve ; exécutez `ocx claude desktop apply --gateway` pour changer explicitement. Le mode first-party conserve claude.ai pour Desktop et ne route que son onglet Code ; consultez la section sur les modes Claude Desktop dans [Claude Code](/fr/guides/claude-code/). ### Grok Build diff --git a/docs-site/src/content/docs/ja/getting-started/quickstart.md b/docs-site/src/content/docs/ja/getting-started/quickstart.md index ab2404ae574..37c9aa34b81 100644 --- a/docs-site/src/content/docs/ja/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ja/getting-started/quickstart.md @@ -61,7 +61,7 @@ ocx gui # open the dashboard on the live port ### Codex -手順 1 で Codex の確認に同意した場合、Codex は透過的に opencodex と通信します。既存の設定があるためにセットアップが終了した場合は、ダッシュボードの **Connect** ページにある Codex スイッチを使います。[Codex 統合](/ja/guides/codex-integration/)では変更内容と復元方法を説明しています。 +手順 1 で Codex の確認に同意した場合、Codex は透過的に opencodex と通信します。確認を拒否した場合、または既存の設定があるためにセットアップが終了した場合は、Codex を実行する前にダッシュボードの **Connect** ページにある Codex スイッチをオンにします。[Codex 統合](/ja/guides/codex-integration/)では変更内容と復元方法を説明しています。 ```bash codex "Refactor this function for readability" @@ -90,7 +90,7 @@ ocx claude ocx claude desktop ``` -デフォルトではアプリ全体にゲートウェイプロファイルをインストールします。Desktop を claude.ai のままにして Code タブのみをルーティングする first-party モードは、[Claude Code](/ja/guides/claude-code/)の Claude Desktop モードの節を参照してください。 +新規インストールではアプリ全体にゲートウェイプロファイルを設定します。すでに first-party モードを使用している場合はそのまま維持され、`ocx claude desktop apply --gateway` を実行すると明示的に切り替えられます。Desktop を claude.ai のままにして Code タブのみをルーティングする first-party モードは、[Claude Code](/ja/guides/claude-code/)の Claude Desktop モードの節を参照してください。 ### Grok Build diff --git a/docs-site/src/content/docs/ko/getting-started/quickstart.md b/docs-site/src/content/docs/ko/getting-started/quickstart.md index e90615e6bc7..5aafd2e3ef7 100644 --- a/docs-site/src/content/docs/ko/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ko/getting-started/quickstart.md @@ -59,7 +59,7 @@ ocx gui # open the dashboard on the live port ### Codex -1단계에서 Codex 프롬프트를 수락했다면 이제 Codex가 opencodex와 투명하게 통신합니다. 기존 설정이 있어 설정이 종료됐다면 대시보드 **Connect** 페이지의 Codex 스위치를 사용하세요. [Codex 통합](/ko/guides/codex-integration/)에서 변경 내용과 복원 방법을 설명합니다. +1단계에서 Codex 프롬프트를 수락했다면 이제 Codex가 opencodex와 투명하게 통신합니다. 프롬프트를 거절했거나 기존 설정이 있어 설정이 종료됐다면 Codex를 실행하기 전에 대시보드 **Connect** 페이지의 Codex 스위치를 켜세요. [Codex 통합](/ko/guides/codex-integration/)에서 변경 내용과 복원 방법을 설명합니다. ```bash codex "Refactor this function for readability" @@ -88,7 +88,7 @@ ocx claude ocx claude desktop ``` -기본적으로 앱 전체에 게이트웨이 프로필을 설치합니다. Desktop은 claude.ai를 유지하고 Code 탭만 라우팅하는 first-party 모드는 [Claude Code](/ko/guides/claude-code/)의 Claude Desktop 모드 항목을 참조하세요. +새로 설치할 때는 앱 전체에 게이트웨이 프로필을 설정합니다. 이미 first-party 모드를 사용하는 설치는 해당 모드를 유지하며, `ocx claude desktop apply --gateway`를 실행해 명시적으로 전환할 수 있습니다. Desktop은 claude.ai를 유지하고 Code 탭만 라우팅하는 first-party 모드는 [Claude Code](/ko/guides/claude-code/)의 Claude Desktop 모드 항목을 참조하세요. ### Grok Build diff --git a/docs-site/src/content/docs/ru/getting-started/quickstart.md b/docs-site/src/content/docs/ru/getting-started/quickstart.md index cbde76b6c63..229d62dd14b 100644 --- a/docs-site/src/content/docs/ru/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ru/getting-started/quickstart.md @@ -73,7 +73,7 @@ ocx gui # open the dashboard on the live port ### Codex -Если на шаге 1 вы приняли приглашение Codex, теперь он прозрачно взаимодействует с opencodex. Если настройка завершилась из-за существующей конфигурации, используйте переключатель Codex на странице **Connect** панели; в разделе [Интеграция Codex](/ru/guides/codex-integration/) описаны изменения и их отмена. +Если на шаге 1 вы приняли приглашение Codex, теперь он прозрачно взаимодействует с opencodex. Если вы отклонили приглашение или настройка завершилась из-за существующей конфигурации, включите переключатель Codex на странице **Connect** панели перед запуском Codex; в разделе [Интеграция Codex](/ru/guides/codex-integration/) описаны изменения и их отмена. ```bash codex "Refactor this function for readability" @@ -103,7 +103,7 @@ ocx claude ocx claude desktop ``` -По умолчанию команда устанавливает профиль шлюза для всего приложения. Режим first-party сохраняет подключение Desktop к claude.ai и маршрутизирует только вкладку Code; см. раздел о режимах Claude Desktop в [Claude Code](/ru/guides/claude-code/). +При новой установке команда настраивает профиль шлюза для всего приложения. Если установка уже использует режим first-party, он сохраняется; выполните `ocx claude desktop apply --gateway`, чтобы явно переключить режим. Режим first-party сохраняет подключение Desktop к claude.ai и маршрутизирует только вкладку Code; см. раздел о режимах Claude Desktop в [Claude Code](/ru/guides/claude-code/). ### Grok Build diff --git a/docs-site/src/content/docs/tr/getting-started/quickstart.md b/docs-site/src/content/docs/tr/getting-started/quickstart.md index 7b253573068..0853207129e 100644 --- a/docs-site/src/content/docs/tr/getting-started/quickstart.md +++ b/docs-site/src/content/docs/tr/getting-started/quickstart.md @@ -72,7 +72,7 @@ Kullandığınız araca ait bölümü seçin. Birden fazla araç bağlayabilirsi ### Codex -1. adımda Codex istemini kabul ettiyseniz Codex artık opencodex ile şeffaf biçimde iletişim kurar. Mevcut yapılandırma nedeniyle kurulum sona erdiyse panelin **Connect** sayfasındaki Codex anahtarını kullanın; [Codex Entegrasyonu](/tr/guides/codex-integration/) değişiklikleri ve nasıl geri alınacağını açıklar. +1. adımda Codex istemini kabul ettiyseniz Codex artık opencodex ile şeffaf biçimde iletişim kurar. İstemi reddettiyseniz veya mevcut yapılandırma nedeniyle kurulum sona erdiyse Codex’i çalıştırmadan önce panelin **Connect** sayfasındaki Codex anahtarını açın; [Codex Entegrasyonu](/tr/guides/codex-integration/) değişiklikleri ve nasıl geri alınacağını açıklar. ```bash codex "Okunabilirlik için bu fonksiyonu yeniden düzenle" @@ -102,7 +102,7 @@ ocx claude ocx claude desktop ``` -Varsayılan olarak tüm uygulama için ağ geçidi profilini kurar. Desktop’ı claude.ai üzerinde tutup yalnızca Code sekmesini yönlendiren first-party modu, [Claude Code](/tr/guides/claude-code/) sayfasındaki Claude Desktop modları bölümünde açıklanır. +Yeni kurulumda tüm uygulama için ağ geçidi profilini ayarlar. Zaten first-party modunu kullanan bir kurulum bu modu korur; açıkça geçiş yapmak için `ocx claude desktop apply --gateway` çalıştırın. Desktop’ı claude.ai üzerinde tutup yalnızca Code sekmesini yönlendiren first-party modu, [Claude Code](/tr/guides/claude-code/) sayfasındaki Claude Desktop modları bölümünde açıklanır. ### Grok Build diff --git a/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md b/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md index 851875b4663..c185ca23376 100644 --- a/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md +++ b/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md @@ -62,7 +62,7 @@ ocx gui # 在實際監聽埠開啟儀表板 ### Codex -如果你在步驟 1 接受了 Codex 提示,Codex 現在會透明地透過 opencodex 通訊。如果設定因已有設定檔而結束,請使用儀表板 **Connect** 頁面的 Codex 開關;[Codex 整合](/zh-tw/guides/codex-integration/)說明修改內容與還原方式。 +如果你在步驟 1 接受了 Codex 提示,Codex 現在會透明地透過 opencodex 通訊。如果你拒絕了該提示,或設定因已有設定檔而結束,請在執行 Codex 之前開啟儀表板 **Connect** 頁面的 Codex 開關;[Codex 整合](/zh-tw/guides/codex-integration/)說明修改內容與還原方式。 ```bash codex "Refactor this function for readability" @@ -91,7 +91,7 @@ ocx claude ocx claude desktop ``` -預設會為整個應用程式安裝閘道設定檔。first-party 模式讓 Desktop 繼續使用 claude.ai,只路由其 Code 分頁;詳見 [Claude Code](/zh-tw/guides/claude-code/) 的 Claude Desktop 模式一節。 +全新安裝時會為整個應用程式設定閘道設定檔;已經使用 first-party 模式的安裝會保持原模式,可執行 `ocx claude desktop apply --gateway` 明確切換。first-party 模式讓 Desktop 繼續使用 claude.ai,只路由其 Code 分頁;詳見 [Claude Code](/zh-tw/guides/claude-code/) 的 Claude Desktop 模式一節。 ### Grok Build diff --git a/readme/README.fr.md b/readme/README.fr.md index cafb3b7b4ff..55b3b4e5b70 100644 --- a/readme/README.fr.md +++ b/readme/README.fr.md @@ -104,9 +104,9 @@ Ajoutez d’abord un fournisseur, puis connectez l’outil que vous utilisez : | Outil | Connexion | |---|---| -| Codex | Exécutez `ocx init` et acceptez l’invite Codex. Sur une écoute locale, cela dirige le fournisseur intégré de Codex vers le proxy ; lancez ensuite `codex` comme d’habitude. Déjà configuré ? Le commutateur Codex de la page **Connect** du tableau de bord active ou désactive le routage. | +| Codex | Activez le commutateur Codex sur la page **Connect** du tableau de bord, puis exécutez `codex` comme d’habitude. Sur une écoute locale, cela dirige le fournisseur intégré de Codex vers le proxy. Depuis le terminal, exécutez `ocx init` avant d’ajouter des fournisseurs dans le tableau de bord et acceptez son invite Codex. | | Claude Code | Avec le CLI `claude` installé, exécutez `ocx claude`. Il démarre le proxy si nécessaire et lance Claude Code à travers celui-ci. | -| Claude Desktop | Exécutez `ocx claude desktop`. Par défaut, le profil de passerelle est installé pour toute l’application ; consultez le [guide Claude Code](https://opencodex.me/fr/guides/claude-code/) pour le mode first-party. | +| Claude Desktop | Exécutez `ocx claude desktop`. Lors d’une nouvelle installation, cette commande configure le profil de passerelle pour toute l’application ; une configuration first-party existante est conservée et `ocx claude desktop apply --gateway` permet de changer explicitement. Consultez le [guide Claude Code](https://opencodex.me/fr/guides/claude-code/). | | Grok Build | Sur une écoute locale, `ocx start` enregistre les modèles si `~/.grok` existe ; choisissez un modèle `ocx-*` dans Grok Build. Configurations distantes : consultez le [guide Grok Build](https://opencodex.me/fr/guides/grok-build/). | | Outils avec intégration gérée | Utilisez la page **Connect** du tableau de bord ou `ocx integration client enable --client `. | | Tout autre outil | Définissez l’URL de base compatible OpenAI `http://localhost:10100/v1` ou l’URL de base Anthropic `http://localhost:10100`. | diff --git a/readme/README.ja.md b/readme/README.ja.md index 93ff54d3bd2..cd96f13c043 100644 --- a/readme/README.ja.md +++ b/readme/README.ja.md @@ -103,9 +103,9 @@ ocx start # プロキシとダッシュボードが loca | ツール | 接続方法 | |---|---| -| Codex | `ocx init` を実行し、Codex の確認に同意します。ローカルリスナーでは Codex の組み込みプロバイダーがプロキシを指すようになります。その後は通常どおり `codex` を実行します。設定済みの場合は、ダッシュボードの **Connect** ページにある Codex スイッチでルーティングを切り替えられます。 | +| Codex | ダッシュボードの **Connect** ページで Codex スイッチをオンにし、通常どおり `codex` を実行します。ローカルリスナーでは Codex の組み込みプロバイダーがプロキシを指すようになります。ターミナルからは、ダッシュボードでプロバイダーを追加する前に `ocx init` を実行し、Codex の確認に同意します。 | | Claude Code | `claude` CLI をインストールした状態で `ocx claude` を実行します。必要に応じてプロキシを起動し、そこを経由して Claude Code を起動します。 | -| Claude Desktop | `ocx claude desktop` を実行します。デフォルトではアプリ全体にゲートウェイプロファイルをインストールします。first-party モードは [Claude Code ガイド](https://opencodex.me/ja/guides/claude-code/)を参照してください。 | +| Claude Desktop | `ocx claude desktop` を実行します。新規インストールではアプリ全体にゲートウェイプロファイルを設定します。既存の first-party 設定は維持され、`ocx claude desktop apply --gateway` で明示的に切り替えられます。[Claude Code ガイド](https://opencodex.me/ja/guides/claude-code/)を参照してください。 | | Grok Build | ローカルリスナーでは、`~/.grok` が存在すると `ocx start` がモデルを登録します。Grok Build で `ocx-*` モデルを選択します。リモート設定は [Grok Build ガイド](https://opencodex.me/ja/guides/grok-build/)を参照してください。 | | 管理対象の統合があるツール | ダッシュボードの **Connect** ページか `ocx integration client enable --client ` を使います。 | | その他のツール | カスタムの OpenAI 互換ベース URL に `http://localhost:10100/v1` を、または Anthropic ベース URL に `http://localhost:10100` を設定します。 | diff --git a/readme/README.ko.md b/readme/README.ko.md index e936ea051c0..1a115a43351 100644 --- a/readme/README.ko.md +++ b/readme/README.ko.md @@ -102,9 +102,9 @@ ocx start # 프록시 + 대시보드: localhost:10100 | 도구 | 연결 방법 | |---|---| -| Codex | `ocx init`을 실행하고 Codex 프롬프트를 수락하세요. 로컬 리스너에서는 Codex 내장 프로바이더가 프록시를 가리킵니다. 이후 평소처럼 `codex`를 실행하세요. 이미 설정했다면 대시보드 **Connect** 페이지의 Codex 스위치로 라우팅을 켜거나 끌 수 있습니다. | +| Codex | 대시보드 **Connect** 페이지에서 Codex 스위치를 켠 다음 평소처럼 `codex`를 실행하세요. 로컬 리스너에서는 Codex 내장 프로바이더가 프록시를 가리킵니다. 터미널에서는 대시보드에 프로바이더를 추가하기 전에 `ocx init`을 실행하고 Codex 프롬프트를 수락하세요. | | Claude Code | `claude` CLI가 설치된 상태에서 `ocx claude`를 실행하세요. 필요하면 프록시를 시작하고 이를 통해 Claude Code를 실행합니다. | -| Claude Desktop | `ocx claude desktop`을 실행하세요. 기본적으로 앱 전체에 게이트웨이 프로필을 설치합니다. first-party 모드는 [Claude Code 가이드](https://opencodex.me/ko/guides/claude-code/)를 참조하세요. | +| Claude Desktop | `ocx claude desktop`을 실행하세요. 새로 설치할 때는 앱 전체에 게이트웨이 프로필을 설정합니다. 기존 first-party 설정은 유지되며, `ocx claude desktop apply --gateway`로 명시적으로 전환할 수 있습니다. [Claude Code 가이드](https://opencodex.me/ko/guides/claude-code/)를 참조하세요. | | Grok Build | 로컬 리스너에서 `~/.grok`이 있으면 `ocx start`가 모델을 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정은 [Grok Build 가이드](https://opencodex.me/ko/guides/grok-build/)를 참조하세요. | | 관리형 통합이 있는 도구 | 대시보드의 **Connect** 페이지 또는 `ocx integration client enable --client `를 사용하세요. | | 그 밖의 도구 | OpenAI 호환 기본 URL을 `http://localhost:10100/v1`로, 또는 Anthropic 기본 URL을 `http://localhost:10100`으로 설정하세요. | diff --git a/readme/README.ru.md b/readme/README.ru.md index b41c8dfa39a..e951cd597cf 100644 --- a/readme/README.ru.md +++ b/readme/README.ru.md @@ -103,9 +103,9 @@ ocx start # прокси + панель управлен | Инструмент | Как подключить | |---|---| -| Codex | Выполните `ocx init` и примите приглашение Codex. При локальном прослушивании встроенный провайдер Codex будет направлен на прокси; затем запускайте `codex` как обычно. Уже настроено? Переключатель Codex на странице **Connect** панели включает и выключает маршрутизацию. | +| Codex | Включите переключатель Codex на странице **Connect** панели, затем запускайте `codex` как обычно. При локальном прослушивании встроенный провайдер Codex будет направлен на прокси. В терминале выполните `ocx init` до добавления провайдеров в панели и примите приглашение Codex. | | Claude Code | Установив CLI `claude`, выполните `ocx claude`. Команда при необходимости запускает прокси и запускает через него Claude Code. | -| Claude Desktop | Выполните `ocx claude desktop`. По умолчанию профиль шлюза устанавливается для всего приложения; о режиме first-party см. [руководство Claude Code](https://opencodex.me/ru/guides/claude-code/). | +| Claude Desktop | Выполните `ocx claude desktop`. При новой установке команда настраивает профиль шлюза для всего приложения; существующая настройка first-party сохраняется, а `ocx claude desktop apply --gateway` явно переключает режим. См. [руководство Claude Code](https://opencodex.me/ru/guides/claude-code/). | | Grok Build | При локальном прослушивании `ocx start` регистрирует модели, если существует `~/.grok`; выберите модель `ocx-*` в Grok Build. Удалённые конфигурации описаны в [руководстве Grok Build](https://opencodex.me/ru/guides/grok-build/). | | Инструменты с управляемой интеграцией | Используйте страницу **Connect** панели или `ocx integration client enable --client `. | | Любой другой инструмент | Укажите пользовательский базовый URL, совместимый с OpenAI: `http://localhost:10100/v1`, либо базовый URL Anthropic: `http://localhost:10100`. | diff --git a/readme/README.tr.md b/readme/README.tr.md index db1e9b7220b..9437c487ce4 100644 --- a/readme/README.tr.md +++ b/readme/README.tr.md @@ -103,9 +103,9 @@ yönetin. `ocx gui` paneli istediğiniz zaman yeniden açar. | Araç | Bağlantı yöntemi | |---|---| -| Codex | `ocx init` çalıştırın ve Codex istemini kabul edin. Yerel dinleyicide bu, Codex’in yerleşik sağlayıcısını proxy’ye yönlendirir; ardından `codex` komutunu her zamanki gibi çalıştırın. Zaten kuruluysa panelin **Connect** sayfasındaki Codex anahtarı yönlendirmeyi açar veya kapatır. | +| Codex | Panelin **Connect** sayfasındaki Codex anahtarını açın, ardından `codex` komutunu her zamanki gibi çalıştırın. Yerel dinleyicide bu, Codex’in yerleşik sağlayıcısını proxy’ye yönlendirir. Terminalden, panelde sağlayıcı eklemeden önce `ocx init` çalıştırın ve Codex istemini kabul edin. | | Claude Code | `claude` CLI kuruluysa `ocx claude` çalıştırın. Gerekirse proxy’yi başlatır ve Claude Code’u onun üzerinden açar. | -| Claude Desktop | `ocx claude desktop` çalıştırın. Varsayılan olarak ağ geçidi profilini tüm uygulama için kurar; first-party modu için [Claude Code kılavuzuna](https://opencodex.me/tr/guides/claude-code/) bakın. | +| Claude Desktop | `ocx claude desktop` çalıştırın. Yeni kurulumda tüm uygulama için ağ geçidi profilini ayarlar; mevcut first-party yapılandırması korunur ve `ocx claude desktop apply --gateway` açıkça geçiş yapar. [Claude Code kılavuzuna](https://opencodex.me/tr/guides/claude-code/) bakın. | | Grok Build | Yerel dinleyicide `~/.grok` varsa `ocx start` modelleri kaydeder; Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar için [Grok Build kılavuzuna](https://opencodex.me/tr/guides/grok-build/) bakın. | | Yönetilen entegrasyonu olan araçlar | Panelin **Connect** sayfasını veya `ocx integration client enable --client ` komutunu kullanın. | | Diğer tüm araçlar | Özel OpenAI uyumlu temel URL’yi `http://localhost:10100/v1` veya Anthropic temel URL’sini `http://localhost:10100` olarak ayarlayın. | diff --git a/readme/README.zh-CN.md b/readme/README.zh-CN.md index 361c60949c6..d9b34b56c08 100644 --- a/readme/README.zh-CN.md +++ b/readme/README.zh-CN.md @@ -103,9 +103,9 @@ ocx start # 代理 + 仪表板:localhost:10100 | 工具 | 连接方式 | |---|---| -| Codex | 运行 `ocx init` 并接受 Codex 提示。在本地监听下,这会让 Codex 内置提供商指向代理;然后照常运行 `codex`。已经设置过?仪表盘 **Connect** 页面的 Codex 开关可以开启或关闭路由。 | +| Codex | 打开仪表盘 **Connect** 页面上的 Codex 开关,然后照常运行 `codex`。在本地监听下,这会让 Codex 内置提供商指向代理。使用终端时,请在仪表盘添加提供商之前运行 `ocx init` 并接受其 Codex 提示。 | | Claude Code | 安装 `claude` CLI 后运行 `ocx claude`。它会在需要时启动代理,并通过代理启动 Claude Code。 | -| Claude Desktop | 运行 `ocx claude desktop`。默认会为整个应用安装网关配置;first-party 模式请参见 [Claude Code 指南](https://opencodex.me/zh-cn/guides/claude-code/)。 | +| Claude Desktop | 运行 `ocx claude desktop`。全新安装时会为整个应用设置网关配置;已有的 first-party 设置会保持原样,可运行 `ocx claude desktop apply --gateway` 明确切换。详见 [Claude Code 指南](https://opencodex.me/zh-cn/guides/claude-code/)。 | | Grok Build | 在本地监听下,若 `~/.grok` 存在,`ocx start` 会注册模型;在 Grok Build 中选择 `ocx-*` 模型。远程配置请参见 [Grok Build 指南](https://opencodex.me/zh-cn/guides/grok-build/)。 | | 有托管集成的工具 | 使用仪表盘 **Connect** 页面,或运行 `ocx integration client enable --client `。 | | 其他工具 | 将自定义 OpenAI 兼容 base URL 设为 `http://localhost:10100/v1`,或将 Anthropic base URL 设为 `http://localhost:10100`。 | diff --git a/readme/README.zh-TW.md b/readme/README.zh-TW.md index 3438d05006d..bca92d3864a 100644 --- a/readme/README.zh-TW.md +++ b/readme/README.zh-TW.md @@ -103,9 +103,9 @@ ocx start # 代理 + 儀表板位於 localhost:10100 | 工具 | 連接方式 | |---|---| -| Codex | 執行 `ocx init` 並接受 Codex 提示。在本機監聽時,這會讓 Codex 內建供應商指向代理;接著照常執行 `codex`。已經設定過?儀表板 **Connect** 頁面的 Codex 開關可啟用或停用路由。 | +| Codex | 開啟儀表板 **Connect** 頁面的 Codex 開關,然後照常執行 `codex`。在本機監聽時,這會讓 Codex 內建供應商指向代理。使用終端機時,請在儀表板新增供應商之前執行 `ocx init` 並接受其 Codex 提示。 | | Claude Code | 安裝 `claude` CLI 後執行 `ocx claude`。它會在需要時啟動代理,並透過代理啟動 Claude Code。 | -| Claude Desktop | 執行 `ocx claude desktop`。預設會為整個應用程式安裝閘道設定檔;first-party 模式請參閱 [Claude Code 指南](https://opencodex.me/zh-tw/guides/claude-code/)。 | +| Claude Desktop | 執行 `ocx claude desktop`。全新安裝時會為整個應用程式設定閘道設定檔;既有的 first-party 設定會保留,可執行 `ocx claude desktop apply --gateway` 明確切換。詳見 [Claude Code 指南](https://opencodex.me/zh-tw/guides/claude-code/)。 | | Grok Build | 在本機監聽時,若 `~/.grok` 存在,`ocx start` 會註冊模型;在 Grok Build 選擇 `ocx-*` 模型。遠端設定請參閱 [Grok Build 指南](https://opencodex.me/zh-tw/guides/grok-build/)。 | | 具備受管理整合的工具 | 使用儀表板的 **Connect** 頁面,或執行 `ocx integration client enable --client `。 | | 其他工具 | 將自訂 OpenAI 相容基本 URL 設為 `http://localhost:10100/v1`,或將 Anthropic 基本 URL 設為 `http://localhost:10100`。 | diff --git a/readme/i18n-manifest.json b/readme/i18n-manifest.json index 0f7fa73e014..9177eed0bc8 100644 --- a/readme/i18n-manifest.json +++ b/readme/i18n-manifest.json @@ -6,43 +6,43 @@ "file": "readme/README.fr.md", "label": "Français", "docsPath": "fr", - "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" + "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" }, "ko": { "file": "readme/README.ko.md", "label": "한국어", "docsPath": "ko", - "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" + "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" }, "zh-CN": { "file": "readme/README.zh-CN.md", "label": "简体中文", "docsPath": "zh-cn", - "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" + "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" }, "zh-TW": { "file": "readme/README.zh-TW.md", "label": "繁體中文", "docsPath": "zh-tw", - "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" + "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" }, "ru": { "file": "readme/README.ru.md", "label": "Русский", "docsPath": "ru", - "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" + "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" }, "ja": { "file": "readme/README.ja.md", "label": "日本語", "docsPath": "ja", - "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" + "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" }, "tr": { "file": "readme/README.tr.md", "label": "Türkçe", "docsPath": "tr", - "sourceSha256": "95995e8351498547609319f88a284bc9e40c5b8ac37c647a8450aac9f653ad0f" + "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" } } } From 0a449520c1e9e266aff26236967e11d87647dffc Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 08:29:01 +0900 Subject: [PATCH 09/10] docs: drop the provider-first intro and add the Desktop and Grok refresh steps --- README.md | 6 +++--- .../content/docs/fr/getting-started/quickstart.md | 4 ++++ .../src/content/docs/getting-started/quickstart.md | 4 ++++ .../content/docs/ja/getting-started/quickstart.md | 4 ++++ .../content/docs/ko/getting-started/quickstart.md | 4 ++++ .../content/docs/ru/getting-started/quickstart.md | 4 ++++ .../content/docs/tr/getting-started/quickstart.md | 4 ++++ .../docs/zh-cn/getting-started/quickstart.md | 4 ++++ .../docs/zh-tw/getting-started/quickstart.md | 4 ++++ readme/README.fr.md | 6 +++--- readme/README.ja.md | 6 +++--- readme/README.ko.md | 6 +++--- readme/README.ru.md | 6 +++--- readme/README.tr.md | 6 +++--- readme/README.zh-CN.md | 6 +++--- readme/README.zh-TW.md | 6 +++--- readme/i18n-manifest.json | 14 +++++++------- 17 files changed, 63 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index ed1eb32d709..e7c43d104e8 100644 --- a/README.md +++ b/README.md @@ -107,14 +107,14 @@ re-opens the dashboard at any time. ### Connect your tool -Add a provider first, then connect the tool you already use: +Connect the tool you already use: | Tool | How to connect | |---|---| | Codex | Turn on the Codex switch on the dashboard's **Connect** page, then run `codex` as usual. On a local listener this points Codex's built-in provider at the proxy. From the terminal, run `ocx init` before adding providers in the dashboard and accept its Codex prompt. | | Claude Code | With the `claude` CLI installed, run `ocx claude`. It starts the proxy if needed and launches Claude Code through it. | -| Claude Desktop | Run `ocx claude desktop`. On a new install it sets up the gateway profile for the whole app; an existing first-party setup is kept, and `ocx claude desktop apply --gateway` switches explicitly. See the [Claude Code guide](https://opencodex.me/guides/claude-code/). | -| Grok Build | On a local listener, `ocx start` registers the models when `~/.grok` exists; pick an `ocx-*` model in Grok Build. Remote setups: see the [Grok Build guide](https://opencodex.me/guides/grok-build/). | +| Claude Desktop | Run `ocx claude desktop`. On a new install it sets up the gateway profile for the whole app; an existing first-party setup is kept, and `ocx claude desktop apply --gateway` switches explicitly. See the [Claude Code guide](https://opencodex.me/guides/claude-code/). Fully quit and reopen Claude Desktop after a switch. | +| Grok Build | On a local listener, `ocx start` registers the models when `~/.grok` exists; pick an `ocx-*` model in Grok Build. Remote setups: see the [Grok Build guide](https://opencodex.me/guides/grok-build/). After adding providers, run `ocx ensure` or restart the proxy to refresh the list. | | Tools with a managed integration | Use the dashboard **Connect** page, or `ocx integration client enable --client `. | | Any other tool | Set a custom OpenAI-compatible base URL of `http://localhost:10100/v1`, or an Anthropic base URL of `http://localhost:10100`. | diff --git a/docs-site/src/content/docs/fr/getting-started/quickstart.md b/docs-site/src/content/docs/fr/getting-started/quickstart.md index 9ff5e4acf94..986a1c11ef9 100644 --- a/docs-site/src/content/docs/fr/getting-started/quickstart.md +++ b/docs-site/src/content/docs/fr/getting-started/quickstart.md @@ -95,10 +95,14 @@ ocx claude desktop Lors d’une nouvelle installation, cette commande configure le profil de passerelle pour toute l’application. Une installation utilisant déjà le mode first-party le conserve ; exécutez `ocx claude desktop apply --gateway` pour changer explicitement. Le mode first-party conserve claude.ai pour Desktop et ne route que son onglet Code ; consultez la section sur les modes Claude Desktop dans [Claude Code](/fr/guides/claude-code/). +Quittez complètement puis rouvrez Claude Desktop après un changement de mode. + ### Grok Build Sur une écoute locale, si `~/.grok` existe, `ocx start` enregistre les modèles visibles dans `~/.grok/config.toml`. Choisissez un modèle `ocx-*` dans Grok Build. Les configurations distantes et le bloc géré sont décrits dans [Grok Build](/fr/guides/grok-build/). +Après avoir ajouté des fournisseurs ou des modèles, lancez `ocx ensure` ou redémarrez le proxy pour que Grok Build les voie. + ### Autres outils Les outils avec intégration gérée (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code et d’autres) se connectent depuis la page **Connect** du tableau de bord ou avec : diff --git a/docs-site/src/content/docs/getting-started/quickstart.md b/docs-site/src/content/docs/getting-started/quickstart.md index 237303dfd9d..910fb0e181e 100644 --- a/docs-site/src/content/docs/getting-started/quickstart.md +++ b/docs-site/src/content/docs/getting-started/quickstart.md @@ -151,12 +151,16 @@ the first-party mode keeps it; run `ocx claude desktop apply --gateway` to switc first-party mode, which keeps Desktop on claude.ai and routes only its Code tab, is described under [Claude Desktop modes](/guides/claude-code/#claude-desktop-modes-gateway-default-and-first-party). +Fully quit and reopen Claude Desktop after switching modes. + ### Grok Build On a local listener, `ocx start` registers the visible models in `~/.grok/config.toml` when `~/.grok` exists. Pick an `ocx-*` model in Grok Build. Remote setups and the managed block are covered in [Grok Build](/guides/grok-build/). +After you add providers or models, run `ocx ensure` or restart the proxy so Grok Build sees them. + ### Other tools Tools with a managed integration (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code and more) are diff --git a/docs-site/src/content/docs/ja/getting-started/quickstart.md b/docs-site/src/content/docs/ja/getting-started/quickstart.md index 37c9aa34b81..82f68cdf175 100644 --- a/docs-site/src/content/docs/ja/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ja/getting-started/quickstart.md @@ -92,10 +92,14 @@ ocx claude desktop 新規インストールではアプリ全体にゲートウェイプロファイルを設定します。すでに first-party モードを使用している場合はそのまま維持され、`ocx claude desktop apply --gateway` を実行すると明示的に切り替えられます。Desktop を claude.ai のままにして Code タブのみをルーティングする first-party モードは、[Claude Code](/ja/guides/claude-code/)の Claude Desktop モードの節を参照してください。 +モードを切り替えた後は、Claude Desktop を完全に終了してから開き直してください。 + ### Grok Build ローカルリスナーでは、`~/.grok` が存在すると `ocx start` が表示対象のモデルを `~/.grok/config.toml` に登録します。Grok Build で `ocx-*` モデルを選択します。リモート設定と管理対象ブロックは [Grok Build](/ja/guides/grok-build/)を参照してください。 +プロバイダーやモデルを追加した後は、`ocx ensure` を実行するかプロキシを再起動すると Grok Build に反映されます。 + ### その他のツール 管理対象の統合があるツール(OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code など)は、ダッシュボードの **Connect** ページまたは次のコマンドで接続します。 diff --git a/docs-site/src/content/docs/ko/getting-started/quickstart.md b/docs-site/src/content/docs/ko/getting-started/quickstart.md index 5aafd2e3ef7..8165688935d 100644 --- a/docs-site/src/content/docs/ko/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ko/getting-started/quickstart.md @@ -90,10 +90,14 @@ ocx claude desktop 새로 설치할 때는 앱 전체에 게이트웨이 프로필을 설정합니다. 이미 first-party 모드를 사용하는 설치는 해당 모드를 유지하며, `ocx claude desktop apply --gateway`를 실행해 명시적으로 전환할 수 있습니다. Desktop은 claude.ai를 유지하고 Code 탭만 라우팅하는 first-party 모드는 [Claude Code](/ko/guides/claude-code/)의 Claude Desktop 모드 항목을 참조하세요. +모드를 전환한 뒤에는 Claude Desktop을 완전히 종료했다가 다시 여세요. + ### Grok Build 로컬 리스너에서 `~/.grok`이 존재하면 `ocx start`가 표시되는 모델을 `~/.grok/config.toml`에 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정과 관리 블록은 [Grok Build](/ko/guides/grok-build/)를 참조하세요. +프로바이더나 모델을 추가한 뒤에는 `ocx ensure`를 실행하거나 프록시를 재시작해야 Grok Build에 반영됩니다. + ### 다른 도구 관리형 통합이 있는 도구(OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code 등)는 대시보드의 **Connect** 페이지에서 연결하거나 다음을 사용하세요: diff --git a/docs-site/src/content/docs/ru/getting-started/quickstart.md b/docs-site/src/content/docs/ru/getting-started/quickstart.md index 229d62dd14b..2769427a577 100644 --- a/docs-site/src/content/docs/ru/getting-started/quickstart.md +++ b/docs-site/src/content/docs/ru/getting-started/quickstart.md @@ -105,10 +105,14 @@ ocx claude desktop При новой установке команда настраивает профиль шлюза для всего приложения. Если установка уже использует режим first-party, он сохраняется; выполните `ocx claude desktop apply --gateway`, чтобы явно переключить режим. Режим first-party сохраняет подключение Desktop к claude.ai и маршрутизирует только вкладку Code; см. раздел о режимах Claude Desktop в [Claude Code](/ru/guides/claude-code/). +После смены режима полностью закройте и снова откройте Claude Desktop. + ### Grok Build При локальном прослушивании, если существует `~/.grok`, команда `ocx start` регистрирует видимые модели в `~/.grok/config.toml`. Выберите модель `ocx-*` в Grok Build. Удалённые конфигурации и управляемый блок описаны в [Grok Build](/ru/guides/grok-build/). +После добавления провайдеров или моделей выполните `ocx ensure` или перезапустите прокси, чтобы Grok Build их увидел. + ### Другие инструменты Инструменты с управляемой интеграцией (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code и другие) подключаются на странице **Connect** панели или командой: diff --git a/docs-site/src/content/docs/tr/getting-started/quickstart.md b/docs-site/src/content/docs/tr/getting-started/quickstart.md index 0853207129e..61a9c46577b 100644 --- a/docs-site/src/content/docs/tr/getting-started/quickstart.md +++ b/docs-site/src/content/docs/tr/getting-started/quickstart.md @@ -104,10 +104,14 @@ ocx claude desktop Yeni kurulumda tüm uygulama için ağ geçidi profilini ayarlar. Zaten first-party modunu kullanan bir kurulum bu modu korur; açıkça geçiş yapmak için `ocx claude desktop apply --gateway` çalıştırın. Desktop’ı claude.ai üzerinde tutup yalnızca Code sekmesini yönlendiren first-party modu, [Claude Code](/tr/guides/claude-code/) sayfasındaki Claude Desktop modları bölümünde açıklanır. +Mod değiştirdikten sonra Claude Desktop’tan tamamen çıkıp yeniden açın. + ### Grok Build Yerel dinleyicide `~/.grok` varsa `ocx start` görünür modelleri `~/.grok/config.toml` dosyasına kaydeder. Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar ve yönetilen blok [Grok Build](/tr/guides/grok-build/) sayfasında anlatılır. +Sağlayıcı veya model ekledikten sonra Grok Build’in görmesi için `ocx ensure` çalıştırın veya proxy’yi yeniden başlatın. + ### Diğer araçlar Yönetilen entegrasyonu olan araçlar (OpenCode, Pi, Qoder, WorkBuddy, Kilo, Cline, T3 Code ve diğerleri) panelin **Connect** sayfasından veya şu komutla bağlanır: diff --git a/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md b/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md index 827fe2ee066..66c4c0e6054 100644 --- a/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md +++ b/docs-site/src/content/docs/zh-cn/getting-started/quickstart.md @@ -90,10 +90,14 @@ ocx claude desktop 全新安装时会为整个应用设置网关配置;已经使用 first-party 模式的安装会保持原模式,可运行 `ocx claude desktop apply --gateway` 明确切换。first-party 模式会让 Desktop 继续使用 claude.ai,只路由其 Code 标签页,详见 [Claude Code](/zh-cn/guides/claude-code/) 中的 Claude Desktop 模式一节。 +切换模式后,请完全退出并重新打开 Claude Desktop。 + ### Grok Build 在本地监听下,当 `~/.grok` 存在时,`ocx start` 会把可见模型注册到 `~/.grok/config.toml`。在 Grok Build 中选择一个 `ocx-*` 模型即可。远程配置和托管区块见 [Grok Build](/zh-cn/guides/grok-build/)。 +添加提供商或模型后,运行 `ocx ensure` 或重启代理,Grok Build 才能看到它们。 + ### 其他工具 有托管集成的工具(OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code 等)可在仪表盘的 **Connect** 页面连接,或使用: diff --git a/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md b/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md index c185ca23376..f7591a8a0ea 100644 --- a/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md +++ b/docs-site/src/content/docs/zh-tw/getting-started/quickstart.md @@ -93,10 +93,14 @@ ocx claude desktop 全新安裝時會為整個應用程式設定閘道設定檔;已經使用 first-party 模式的安裝會保持原模式,可執行 `ocx claude desktop apply --gateway` 明確切換。first-party 模式讓 Desktop 繼續使用 claude.ai,只路由其 Code 分頁;詳見 [Claude Code](/zh-tw/guides/claude-code/) 的 Claude Desktop 模式一節。 +切換模式後,請完全結束並重新開啟 Claude Desktop。 + ### Grok Build 在本機監聽時,若 `~/.grok` 存在,`ocx start` 會將可見模型註冊至 `~/.grok/config.toml`。在 Grok Build 選擇 `ocx-*` 模型。遠端設定和受管理區塊請參閱 [Grok Build](/zh-tw/guides/grok-build/)。 +新增供應商或模型後,執行 `ocx ensure` 或重新啟動代理,Grok Build 才能看到它們。 + ### 其他工具 具備受管理整合的工具(OpenCode、Pi、Qoder、WorkBuddy、Kilo、Cline、T3 Code 等)可從儀表板的 **Connect** 頁面連接,或使用: diff --git a/readme/README.fr.md b/readme/README.fr.md index 55b3b4e5b70..9f726ccbc82 100644 --- a/readme/README.fr.md +++ b/readme/README.fr.md @@ -100,14 +100,14 @@ rouvre le tableau de bord à tout moment. ### Connectez votre outil -Ajoutez d’abord un fournisseur, puis connectez l’outil que vous utilisez : +Connectez l’outil que vous utilisez déjà : | Outil | Connexion | |---|---| | Codex | Activez le commutateur Codex sur la page **Connect** du tableau de bord, puis exécutez `codex` comme d’habitude. Sur une écoute locale, cela dirige le fournisseur intégré de Codex vers le proxy. Depuis le terminal, exécutez `ocx init` avant d’ajouter des fournisseurs dans le tableau de bord et acceptez son invite Codex. | | Claude Code | Avec le CLI `claude` installé, exécutez `ocx claude`. Il démarre le proxy si nécessaire et lance Claude Code à travers celui-ci. | -| Claude Desktop | Exécutez `ocx claude desktop`. Lors d’une nouvelle installation, cette commande configure le profil de passerelle pour toute l’application ; une configuration first-party existante est conservée et `ocx claude desktop apply --gateway` permet de changer explicitement. Consultez le [guide Claude Code](https://opencodex.me/fr/guides/claude-code/). | -| Grok Build | Sur une écoute locale, `ocx start` enregistre les modèles si `~/.grok` existe ; choisissez un modèle `ocx-*` dans Grok Build. Configurations distantes : consultez le [guide Grok Build](https://opencodex.me/fr/guides/grok-build/). | +| Claude Desktop | Exécutez `ocx claude desktop`. Lors d’une nouvelle installation, cette commande configure le profil de passerelle pour toute l’application ; une configuration first-party existante est conservée et `ocx claude desktop apply --gateway` permet de changer explicitement. Consultez le [guide Claude Code](https://opencodex.me/fr/guides/claude-code/). Quittez complètement puis rouvrez Claude Desktop après un changement. | +| Grok Build | Sur une écoute locale, `ocx start` enregistre les modèles si `~/.grok` existe ; choisissez un modèle `ocx-*` dans Grok Build. Configurations distantes : consultez le [guide Grok Build](https://opencodex.me/fr/guides/grok-build/). Après avoir ajouté des fournisseurs, lancez `ocx ensure` ou redémarrez le proxy pour actualiser la liste. | | Outils avec intégration gérée | Utilisez la page **Connect** du tableau de bord ou `ocx integration client enable --client `. | | Tout autre outil | Définissez l’URL de base compatible OpenAI `http://localhost:10100/v1` ou l’URL de base Anthropic `http://localhost:10100`. | diff --git a/readme/README.ja.md b/readme/README.ja.md index cd96f13c043..66fba874dc8 100644 --- a/readme/README.ja.md +++ b/readme/README.ja.md @@ -99,14 +99,14 @@ ocx start # プロキシとダッシュボードが loca ### ツールを接続する -まずプロバイダーを追加し、普段使うツールを接続します。 +いま使っているツールを接続します。 | ツール | 接続方法 | |---|---| | Codex | ダッシュボードの **Connect** ページで Codex スイッチをオンにし、通常どおり `codex` を実行します。ローカルリスナーでは Codex の組み込みプロバイダーがプロキシを指すようになります。ターミナルからは、ダッシュボードでプロバイダーを追加する前に `ocx init` を実行し、Codex の確認に同意します。 | | Claude Code | `claude` CLI をインストールした状態で `ocx claude` を実行します。必要に応じてプロキシを起動し、そこを経由して Claude Code を起動します。 | -| Claude Desktop | `ocx claude desktop` を実行します。新規インストールではアプリ全体にゲートウェイプロファイルを設定します。既存の first-party 設定は維持され、`ocx claude desktop apply --gateway` で明示的に切り替えられます。[Claude Code ガイド](https://opencodex.me/ja/guides/claude-code/)を参照してください。 | -| Grok Build | ローカルリスナーでは、`~/.grok` が存在すると `ocx start` がモデルを登録します。Grok Build で `ocx-*` モデルを選択します。リモート設定は [Grok Build ガイド](https://opencodex.me/ja/guides/grok-build/)を参照してください。 | +| Claude Desktop | `ocx claude desktop` を実行します。新規インストールではアプリ全体にゲートウェイプロファイルを設定します。既存の first-party 設定は維持され、`ocx claude desktop apply --gateway` で明示的に切り替えられます。[Claude Code ガイド](https://opencodex.me/ja/guides/claude-code/)を参照してください。 切り替えた後は Claude Desktop を完全に終了してから開き直してください。 | +| Grok Build | ローカルリスナーでは、`~/.grok` が存在すると `ocx start` がモデルを登録します。Grok Build で `ocx-*` モデルを選択します。リモート設定は [Grok Build ガイド](https://opencodex.me/ja/guides/grok-build/)を参照してください。 プロバイダーを追加した後は `ocx ensure` を実行するかプロキシを再起動して一覧を更新します。 | | 管理対象の統合があるツール | ダッシュボードの **Connect** ページか `ocx integration client enable --client ` を使います。 | | その他のツール | カスタムの OpenAI 互換ベース URL に `http://localhost:10100/v1` を、または Anthropic ベース URL に `http://localhost:10100` を設定します。 | diff --git a/readme/README.ko.md b/readme/README.ko.md index 1a115a43351..200ab1da8d9 100644 --- a/readme/README.ko.md +++ b/readme/README.ko.md @@ -98,14 +98,14 @@ ocx start # 프록시 + 대시보드: localhost:10100 ### 도구 연결 -먼저 프로바이더를 추가한 다음 사용 중인 도구를 연결하세요: +사용 중인 도구를 연결하세요: | 도구 | 연결 방법 | |---|---| | Codex | 대시보드 **Connect** 페이지에서 Codex 스위치를 켠 다음 평소처럼 `codex`를 실행하세요. 로컬 리스너에서는 Codex 내장 프로바이더가 프록시를 가리킵니다. 터미널에서는 대시보드에 프로바이더를 추가하기 전에 `ocx init`을 실행하고 Codex 프롬프트를 수락하세요. | | Claude Code | `claude` CLI가 설치된 상태에서 `ocx claude`를 실행하세요. 필요하면 프록시를 시작하고 이를 통해 Claude Code를 실행합니다. | -| Claude Desktop | `ocx claude desktop`을 실행하세요. 새로 설치할 때는 앱 전체에 게이트웨이 프로필을 설정합니다. 기존 first-party 설정은 유지되며, `ocx claude desktop apply --gateway`로 명시적으로 전환할 수 있습니다. [Claude Code 가이드](https://opencodex.me/ko/guides/claude-code/)를 참조하세요. | -| Grok Build | 로컬 리스너에서 `~/.grok`이 있으면 `ocx start`가 모델을 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정은 [Grok Build 가이드](https://opencodex.me/ko/guides/grok-build/)를 참조하세요. | +| Claude Desktop | `ocx claude desktop`을 실행하세요. 새로 설치할 때는 앱 전체에 게이트웨이 프로필을 설정합니다. 기존 first-party 설정은 유지되며, `ocx claude desktop apply --gateway`로 명시적으로 전환할 수 있습니다. [Claude Code 가이드](https://opencodex.me/ko/guides/claude-code/)를 참조하세요. 전환한 뒤에는 Claude Desktop을 완전히 종료했다가 다시 여세요. | +| Grok Build | 로컬 리스너에서 `~/.grok`이 있으면 `ocx start`가 모델을 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정은 [Grok Build 가이드](https://opencodex.me/ko/guides/grok-build/)를 참조하세요. 프로바이더를 추가한 뒤에는 `ocx ensure`를 실행하거나 프록시를 재시작해 목록을 갱신하세요. | | 관리형 통합이 있는 도구 | 대시보드의 **Connect** 페이지 또는 `ocx integration client enable --client `를 사용하세요. | | 그 밖의 도구 | OpenAI 호환 기본 URL을 `http://localhost:10100/v1`로, 또는 Anthropic 기본 URL을 `http://localhost:10100`으로 설정하세요. | diff --git a/readme/README.ru.md b/readme/README.ru.md index e951cd597cf..d902f7ceb57 100644 --- a/readme/README.ru.md +++ b/readme/README.ru.md @@ -99,14 +99,14 @@ ocx start # прокси + панель управлен ### Подключите свой инструмент -Сначала добавьте провайдера, затем подключите используемый инструмент: +Подключите инструмент, которым вы уже пользуетесь: | Инструмент | Как подключить | |---|---| | Codex | Включите переключатель Codex на странице **Connect** панели, затем запускайте `codex` как обычно. При локальном прослушивании встроенный провайдер Codex будет направлен на прокси. В терминале выполните `ocx init` до добавления провайдеров в панели и примите приглашение Codex. | | Claude Code | Установив CLI `claude`, выполните `ocx claude`. Команда при необходимости запускает прокси и запускает через него Claude Code. | -| Claude Desktop | Выполните `ocx claude desktop`. При новой установке команда настраивает профиль шлюза для всего приложения; существующая настройка first-party сохраняется, а `ocx claude desktop apply --gateway` явно переключает режим. См. [руководство Claude Code](https://opencodex.me/ru/guides/claude-code/). | -| Grok Build | При локальном прослушивании `ocx start` регистрирует модели, если существует `~/.grok`; выберите модель `ocx-*` в Grok Build. Удалённые конфигурации описаны в [руководстве Grok Build](https://opencodex.me/ru/guides/grok-build/). | +| Claude Desktop | Выполните `ocx claude desktop`. При новой установке команда настраивает профиль шлюза для всего приложения; существующая настройка first-party сохраняется, а `ocx claude desktop apply --gateway` явно переключает режим. См. [руководство Claude Code](https://opencodex.me/ru/guides/claude-code/). После переключения полностью закройте и снова откройте Claude Desktop. | +| Grok Build | При локальном прослушивании `ocx start` регистрирует модели, если существует `~/.grok`; выберите модель `ocx-*` в Grok Build. Удалённые конфигурации описаны в [руководстве Grok Build](https://opencodex.me/ru/guides/grok-build/). После добавления провайдеров выполните `ocx ensure` или перезапустите прокси, чтобы обновить список. | | Инструменты с управляемой интеграцией | Используйте страницу **Connect** панели или `ocx integration client enable --client `. | | Любой другой инструмент | Укажите пользовательский базовый URL, совместимый с OpenAI: `http://localhost:10100/v1`, либо базовый URL Anthropic: `http://localhost:10100`. | diff --git a/readme/README.tr.md b/readme/README.tr.md index 9437c487ce4..dc866fdadd4 100644 --- a/readme/README.tr.md +++ b/readme/README.tr.md @@ -99,14 +99,14 @@ yönetin. `ocx gui` paneli istediğiniz zaman yeniden açar. ### Aracınızı bağlayın -Önce bir sağlayıcı ekleyin, ardından kullandığınız aracı bağlayın: +Zaten kullandığınız aracı bağlayın: | Araç | Bağlantı yöntemi | |---|---| | Codex | Panelin **Connect** sayfasındaki Codex anahtarını açın, ardından `codex` komutunu her zamanki gibi çalıştırın. Yerel dinleyicide bu, Codex’in yerleşik sağlayıcısını proxy’ye yönlendirir. Terminalden, panelde sağlayıcı eklemeden önce `ocx init` çalıştırın ve Codex istemini kabul edin. | | Claude Code | `claude` CLI kuruluysa `ocx claude` çalıştırın. Gerekirse proxy’yi başlatır ve Claude Code’u onun üzerinden açar. | -| Claude Desktop | `ocx claude desktop` çalıştırın. Yeni kurulumda tüm uygulama için ağ geçidi profilini ayarlar; mevcut first-party yapılandırması korunur ve `ocx claude desktop apply --gateway` açıkça geçiş yapar. [Claude Code kılavuzuna](https://opencodex.me/tr/guides/claude-code/) bakın. | -| Grok Build | Yerel dinleyicide `~/.grok` varsa `ocx start` modelleri kaydeder; Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar için [Grok Build kılavuzuna](https://opencodex.me/tr/guides/grok-build/) bakın. | +| Claude Desktop | `ocx claude desktop` çalıştırın. Yeni kurulumda tüm uygulama için ağ geçidi profilini ayarlar; mevcut first-party yapılandırması korunur ve `ocx claude desktop apply --gateway` açıkça geçiş yapar. [Claude Code kılavuzuna](https://opencodex.me/tr/guides/claude-code/) bakın. Geçişten sonra Claude Desktop’tan tamamen çıkıp yeniden açın. | +| Grok Build | Yerel dinleyicide `~/.grok` varsa `ocx start` modelleri kaydeder; Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar için [Grok Build kılavuzuna](https://opencodex.me/tr/guides/grok-build/) bakın. Sağlayıcı ekledikten sonra listeyi yenilemek için `ocx ensure` çalıştırın veya proxy’yi yeniden başlatın. | | Yönetilen entegrasyonu olan araçlar | Panelin **Connect** sayfasını veya `ocx integration client enable --client ` komutunu kullanın. | | Diğer tüm araçlar | Özel OpenAI uyumlu temel URL’yi `http://localhost:10100/v1` veya Anthropic temel URL’sini `http://localhost:10100` olarak ayarlayın. | diff --git a/readme/README.zh-CN.md b/readme/README.zh-CN.md index d9b34b56c08..fe059dbb0c5 100644 --- a/readme/README.zh-CN.md +++ b/readme/README.zh-CN.md @@ -99,14 +99,14 @@ ocx start # 代理 + 仪表板:localhost:10100 ### 连接你的工具 -先添加提供商,再连接你正在使用的工具: +连接你正在使用的工具: | 工具 | 连接方式 | |---|---| | Codex | 打开仪表盘 **Connect** 页面上的 Codex 开关,然后照常运行 `codex`。在本地监听下,这会让 Codex 内置提供商指向代理。使用终端时,请在仪表盘添加提供商之前运行 `ocx init` 并接受其 Codex 提示。 | | Claude Code | 安装 `claude` CLI 后运行 `ocx claude`。它会在需要时启动代理,并通过代理启动 Claude Code。 | -| Claude Desktop | 运行 `ocx claude desktop`。全新安装时会为整个应用设置网关配置;已有的 first-party 设置会保持原样,可运行 `ocx claude desktop apply --gateway` 明确切换。详见 [Claude Code 指南](https://opencodex.me/zh-cn/guides/claude-code/)。 | -| Grok Build | 在本地监听下,若 `~/.grok` 存在,`ocx start` 会注册模型;在 Grok Build 中选择 `ocx-*` 模型。远程配置请参见 [Grok Build 指南](https://opencodex.me/zh-cn/guides/grok-build/)。 | +| Claude Desktop | 运行 `ocx claude desktop`。全新安装时会为整个应用设置网关配置;已有的 first-party 设置会保持原样,可运行 `ocx claude desktop apply --gateway` 明确切换。详见 [Claude Code 指南](https://opencodex.me/zh-cn/guides/claude-code/)。 切换后请完全退出并重新打开 Claude Desktop。 | +| Grok Build | 在本地监听下,若 `~/.grok` 存在,`ocx start` 会注册模型;在 Grok Build 中选择 `ocx-*` 模型。远程配置请参见 [Grok Build 指南](https://opencodex.me/zh-cn/guides/grok-build/)。 添加提供商后,运行 `ocx ensure` 或重启代理以刷新列表。 | | 有托管集成的工具 | 使用仪表盘 **Connect** 页面,或运行 `ocx integration client enable --client `。 | | 其他工具 | 将自定义 OpenAI 兼容 base URL 设为 `http://localhost:10100/v1`,或将 Anthropic base URL 设为 `http://localhost:10100`。 | diff --git a/readme/README.zh-TW.md b/readme/README.zh-TW.md index bca92d3864a..ec88758df18 100644 --- a/readme/README.zh-TW.md +++ b/readme/README.zh-TW.md @@ -99,14 +99,14 @@ ocx start # 代理 + 儀表板位於 localhost:10100 ### 連接你的工具 -先新增供應商,再連接你正在使用的工具: +連接你正在使用的工具: | 工具 | 連接方式 | |---|---| | Codex | 開啟儀表板 **Connect** 頁面的 Codex 開關,然後照常執行 `codex`。在本機監聽時,這會讓 Codex 內建供應商指向代理。使用終端機時,請在儀表板新增供應商之前執行 `ocx init` 並接受其 Codex 提示。 | | Claude Code | 安裝 `claude` CLI 後執行 `ocx claude`。它會在需要時啟動代理,並透過代理啟動 Claude Code。 | -| Claude Desktop | 執行 `ocx claude desktop`。全新安裝時會為整個應用程式設定閘道設定檔;既有的 first-party 設定會保留,可執行 `ocx claude desktop apply --gateway` 明確切換。詳見 [Claude Code 指南](https://opencodex.me/zh-tw/guides/claude-code/)。 | -| Grok Build | 在本機監聽時,若 `~/.grok` 存在,`ocx start` 會註冊模型;在 Grok Build 選擇 `ocx-*` 模型。遠端設定請參閱 [Grok Build 指南](https://opencodex.me/zh-tw/guides/grok-build/)。 | +| Claude Desktop | 執行 `ocx claude desktop`。全新安裝時會為整個應用程式設定閘道設定檔;既有的 first-party 設定會保留,可執行 `ocx claude desktop apply --gateway` 明確切換。詳見 [Claude Code 指南](https://opencodex.me/zh-tw/guides/claude-code/)。 切換後請完全結束並重新開啟 Claude Desktop。 | +| Grok Build | 在本機監聽時,若 `~/.grok` 存在,`ocx start` 會註冊模型;在 Grok Build 選擇 `ocx-*` 模型。遠端設定請參閱 [Grok Build 指南](https://opencodex.me/zh-tw/guides/grok-build/)。 新增供應商後,執行 `ocx ensure` 或重新啟動代理以更新清單。 | | 具備受管理整合的工具 | 使用儀表板的 **Connect** 頁面,或執行 `ocx integration client enable --client `。 | | 其他工具 | 將自訂 OpenAI 相容基本 URL 設為 `http://localhost:10100/v1`,或將 Anthropic 基本 URL 設為 `http://localhost:10100`。 | diff --git a/readme/i18n-manifest.json b/readme/i18n-manifest.json index 9177eed0bc8..3977c45f1ab 100644 --- a/readme/i18n-manifest.json +++ b/readme/i18n-manifest.json @@ -6,43 +6,43 @@ "file": "readme/README.fr.md", "label": "Français", "docsPath": "fr", - "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" + "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" }, "ko": { "file": "readme/README.ko.md", "label": "한국어", "docsPath": "ko", - "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" + "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" }, "zh-CN": { "file": "readme/README.zh-CN.md", "label": "简体中文", "docsPath": "zh-cn", - "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" + "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" }, "zh-TW": { "file": "readme/README.zh-TW.md", "label": "繁體中文", "docsPath": "zh-tw", - "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" + "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" }, "ru": { "file": "readme/README.ru.md", "label": "Русский", "docsPath": "ru", - "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" + "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" }, "ja": { "file": "readme/README.ja.md", "label": "日本語", "docsPath": "ja", - "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" + "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" }, "tr": { "file": "readme/README.tr.md", "label": "Türkçe", "docsPath": "tr", - "sourceSha256": "57a2241111770554e6165181018008dee1f32181611e50fad245a4b7d2cb05c2" + "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" } } } From 84836c044473458acfb4006cef68dc124bbe76d7 Mon Sep 17 00:00:00 2001 From: JUN Date: Thu, 29 Oct 2026 08:50:12 +0900 Subject: [PATCH 10/10] docs: note Grok integration and Codex autostart conditions for Grok Build refresh --- README.md | 2 +- readme/README.fr.md | 2 +- readme/README.ja.md | 2 +- readme/README.ko.md | 2 +- readme/README.ru.md | 2 +- readme/README.tr.md | 2 +- readme/README.zh-CN.md | 2 +- readme/README.zh-TW.md | 2 +- readme/i18n-manifest.json | 14 +++++++------- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index e7c43d104e8..8197f747220 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ Connect the tool you already use: | Codex | Turn on the Codex switch on the dashboard's **Connect** page, then run `codex` as usual. On a local listener this points Codex's built-in provider at the proxy. From the terminal, run `ocx init` before adding providers in the dashboard and accept its Codex prompt. | | Claude Code | With the `claude` CLI installed, run `ocx claude`. It starts the proxy if needed and launches Claude Code through it. | | Claude Desktop | Run `ocx claude desktop`. On a new install it sets up the gateway profile for the whole app; an existing first-party setup is kept, and `ocx claude desktop apply --gateway` switches explicitly. See the [Claude Code guide](https://opencodex.me/guides/claude-code/). Fully quit and reopen Claude Desktop after a switch. | -| Grok Build | On a local listener, `ocx start` registers the models when `~/.grok` exists; pick an `ocx-*` model in Grok Build. Remote setups: see the [Grok Build guide](https://opencodex.me/guides/grok-build/). After adding providers, run `ocx ensure` or restart the proxy to refresh the list. | +| Grok Build | On a local listener with Grok integration enabled, `ocx start` registers the models when `~/.grok` exists; pick an `ocx-*` model in Grok Build. Remote setups: see the [Grok Build guide](https://opencodex.me/guides/grok-build/). After adding providers, restart the proxy (or run `ocx ensure` when Codex autostart is enabled) to refresh the list. | | Tools with a managed integration | Use the dashboard **Connect** page, or `ocx integration client enable --client `. | | Any other tool | Set a custom OpenAI-compatible base URL of `http://localhost:10100/v1`, or an Anthropic base URL of `http://localhost:10100`. | diff --git a/readme/README.fr.md b/readme/README.fr.md index 9f726ccbc82..7613afe8b65 100644 --- a/readme/README.fr.md +++ b/readme/README.fr.md @@ -107,7 +107,7 @@ Connectez l’outil que vous utilisez déjà : | Codex | Activez le commutateur Codex sur la page **Connect** du tableau de bord, puis exécutez `codex` comme d’habitude. Sur une écoute locale, cela dirige le fournisseur intégré de Codex vers le proxy. Depuis le terminal, exécutez `ocx init` avant d’ajouter des fournisseurs dans le tableau de bord et acceptez son invite Codex. | | Claude Code | Avec le CLI `claude` installé, exécutez `ocx claude`. Il démarre le proxy si nécessaire et lance Claude Code à travers celui-ci. | | Claude Desktop | Exécutez `ocx claude desktop`. Lors d’une nouvelle installation, cette commande configure le profil de passerelle pour toute l’application ; une configuration first-party existante est conservée et `ocx claude desktop apply --gateway` permet de changer explicitement. Consultez le [guide Claude Code](https://opencodex.me/fr/guides/claude-code/). Quittez complètement puis rouvrez Claude Desktop après un changement. | -| Grok Build | Sur une écoute locale, `ocx start` enregistre les modèles si `~/.grok` existe ; choisissez un modèle `ocx-*` dans Grok Build. Configurations distantes : consultez le [guide Grok Build](https://opencodex.me/fr/guides/grok-build/). Après avoir ajouté des fournisseurs, lancez `ocx ensure` ou redémarrez le proxy pour actualiser la liste. | +| Grok Build | Sur une écoute locale avec l’intégration Grok activée, `ocx start` enregistre les modèles lorsque `~/.grok` existe ; choisissez un modèle `ocx-*` dans Grok Build. Pour une configuration distante, consultez le [guide Grok Build](https://opencodex.me/fr/guides/grok-build/). Après avoir ajouté des fournisseurs, redémarrez le proxy (ou lancez `ocx ensure` lorsque le démarrage automatique de Codex est activé) pour actualiser la liste. | | Outils avec intégration gérée | Utilisez la page **Connect** du tableau de bord ou `ocx integration client enable --client `. | | Tout autre outil | Définissez l’URL de base compatible OpenAI `http://localhost:10100/v1` ou l’URL de base Anthropic `http://localhost:10100`. | diff --git a/readme/README.ja.md b/readme/README.ja.md index 66fba874dc8..b396a9d0fa1 100644 --- a/readme/README.ja.md +++ b/readme/README.ja.md @@ -106,7 +106,7 @@ ocx start # プロキシとダッシュボードが loca | Codex | ダッシュボードの **Connect** ページで Codex スイッチをオンにし、通常どおり `codex` を実行します。ローカルリスナーでは Codex の組み込みプロバイダーがプロキシを指すようになります。ターミナルからは、ダッシュボードでプロバイダーを追加する前に `ocx init` を実行し、Codex の確認に同意します。 | | Claude Code | `claude` CLI をインストールした状態で `ocx claude` を実行します。必要に応じてプロキシを起動し、そこを経由して Claude Code を起動します。 | | Claude Desktop | `ocx claude desktop` を実行します。新規インストールではアプリ全体にゲートウェイプロファイルを設定します。既存の first-party 設定は維持され、`ocx claude desktop apply --gateway` で明示的に切り替えられます。[Claude Code ガイド](https://opencodex.me/ja/guides/claude-code/)を参照してください。 切り替えた後は Claude Desktop を完全に終了してから開き直してください。 | -| Grok Build | ローカルリスナーでは、`~/.grok` が存在すると `ocx start` がモデルを登録します。Grok Build で `ocx-*` モデルを選択します。リモート設定は [Grok Build ガイド](https://opencodex.me/ja/guides/grok-build/)を参照してください。 プロバイダーを追加した後は `ocx ensure` を実行するかプロキシを再起動して一覧を更新します。 | +| Grok Build | ローカルリスナーで Grok 連携が有効かつ `~/.grok` が存在する場合、`ocx start` がモデルを登録します。Grok Build で `ocx-*` モデルを選択してください。リモート設定は [Grok Build ガイド](https://opencodex.me/ja/guides/grok-build/)を参照してください。プロバイダーを追加した後は、プロキシを再起動する(または Codex 自動起動が有効なら `ocx ensure` を実行する)と一覧を更新できます。 | | 管理対象の統合があるツール | ダッシュボードの **Connect** ページか `ocx integration client enable --client ` を使います。 | | その他のツール | カスタムの OpenAI 互換ベース URL に `http://localhost:10100/v1` を、または Anthropic ベース URL に `http://localhost:10100` を設定します。 | diff --git a/readme/README.ko.md b/readme/README.ko.md index 200ab1da8d9..5a3530c674e 100644 --- a/readme/README.ko.md +++ b/readme/README.ko.md @@ -105,7 +105,7 @@ ocx start # 프록시 + 대시보드: localhost:10100 | Codex | 대시보드 **Connect** 페이지에서 Codex 스위치를 켠 다음 평소처럼 `codex`를 실행하세요. 로컬 리스너에서는 Codex 내장 프로바이더가 프록시를 가리킵니다. 터미널에서는 대시보드에 프로바이더를 추가하기 전에 `ocx init`을 실행하고 Codex 프롬프트를 수락하세요. | | Claude Code | `claude` CLI가 설치된 상태에서 `ocx claude`를 실행하세요. 필요하면 프록시를 시작하고 이를 통해 Claude Code를 실행합니다. | | Claude Desktop | `ocx claude desktop`을 실행하세요. 새로 설치할 때는 앱 전체에 게이트웨이 프로필을 설정합니다. 기존 first-party 설정은 유지되며, `ocx claude desktop apply --gateway`로 명시적으로 전환할 수 있습니다. [Claude Code 가이드](https://opencodex.me/ko/guides/claude-code/)를 참조하세요. 전환한 뒤에는 Claude Desktop을 완전히 종료했다가 다시 여세요. | -| Grok Build | 로컬 리스너에서 `~/.grok`이 있으면 `ocx start`가 모델을 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정은 [Grok Build 가이드](https://opencodex.me/ko/guides/grok-build/)를 참조하세요. 프로바이더를 추가한 뒤에는 `ocx ensure`를 실행하거나 프록시를 재시작해 목록을 갱신하세요. | +| Grok Build | 로컬 리스너에서 Grok 통합이 활성화되어 있고 `~/.grok`이 있으면 `ocx start`가 모델을 등록합니다. Grok Build에서 `ocx-*` 모델을 선택하세요. 원격 설정은 [Grok Build 가이드](https://opencodex.me/ko/guides/grok-build/)를 참조하세요. 프로바이더를 추가한 뒤에는 프록시를 재시작해(또는 Codex 자동 시작이 활성화된 경우 `ocx ensure`를 실행해) 목록을 갱신하세요. | | 관리형 통합이 있는 도구 | 대시보드의 **Connect** 페이지 또는 `ocx integration client enable --client `를 사용하세요. | | 그 밖의 도구 | OpenAI 호환 기본 URL을 `http://localhost:10100/v1`로, 또는 Anthropic 기본 URL을 `http://localhost:10100`으로 설정하세요. | diff --git a/readme/README.ru.md b/readme/README.ru.md index d902f7ceb57..0b8428934ce 100644 --- a/readme/README.ru.md +++ b/readme/README.ru.md @@ -106,7 +106,7 @@ ocx start # прокси + панель управлен | Codex | Включите переключатель Codex на странице **Connect** панели, затем запускайте `codex` как обычно. При локальном прослушивании встроенный провайдер Codex будет направлен на прокси. В терминале выполните `ocx init` до добавления провайдеров в панели и примите приглашение Codex. | | Claude Code | Установив CLI `claude`, выполните `ocx claude`. Команда при необходимости запускает прокси и запускает через него Claude Code. | | Claude Desktop | Выполните `ocx claude desktop`. При новой установке команда настраивает профиль шлюза для всего приложения; существующая настройка first-party сохраняется, а `ocx claude desktop apply --gateway` явно переключает режим. См. [руководство Claude Code](https://opencodex.me/ru/guides/claude-code/). После переключения полностью закройте и снова откройте Claude Desktop. | -| Grok Build | При локальном прослушивании `ocx start` регистрирует модели, если существует `~/.grok`; выберите модель `ocx-*` в Grok Build. Удалённые конфигурации описаны в [руководстве Grok Build](https://opencodex.me/ru/guides/grok-build/). После добавления провайдеров выполните `ocx ensure` или перезапустите прокси, чтобы обновить список. | +| Grok Build | При локальном прослушивании и включённой интеграции Grok команда `ocx start` регистрирует модели, если существует `~/.grok`; выберите модель `ocx-*` в Grok Build. Об удалённой настройке см. [руководство Grok Build](https://opencodex.me/ru/guides/grok-build/). После добавления провайдеров перезапустите прокси (или выполните `ocx ensure`, если включён автозапуск Codex), чтобы обновить список. | | Инструменты с управляемой интеграцией | Используйте страницу **Connect** панели или `ocx integration client enable --client `. | | Любой другой инструмент | Укажите пользовательский базовый URL, совместимый с OpenAI: `http://localhost:10100/v1`, либо базовый URL Anthropic: `http://localhost:10100`. | diff --git a/readme/README.tr.md b/readme/README.tr.md index dc866fdadd4..dd1eda9f03b 100644 --- a/readme/README.tr.md +++ b/readme/README.tr.md @@ -106,7 +106,7 @@ Zaten kullandığınız aracı bağlayın: | Codex | Panelin **Connect** sayfasındaki Codex anahtarını açın, ardından `codex` komutunu her zamanki gibi çalıştırın. Yerel dinleyicide bu, Codex’in yerleşik sağlayıcısını proxy’ye yönlendirir. Terminalden, panelde sağlayıcı eklemeden önce `ocx init` çalıştırın ve Codex istemini kabul edin. | | Claude Code | `claude` CLI kuruluysa `ocx claude` çalıştırın. Gerekirse proxy’yi başlatır ve Claude Code’u onun üzerinden açar. | | Claude Desktop | `ocx claude desktop` çalıştırın. Yeni kurulumda tüm uygulama için ağ geçidi profilini ayarlar; mevcut first-party yapılandırması korunur ve `ocx claude desktop apply --gateway` açıkça geçiş yapar. [Claude Code kılavuzuna](https://opencodex.me/tr/guides/claude-code/) bakın. Geçişten sonra Claude Desktop’tan tamamen çıkıp yeniden açın. | -| Grok Build | Yerel dinleyicide `~/.grok` varsa `ocx start` modelleri kaydeder; Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar için [Grok Build kılavuzuna](https://opencodex.me/tr/guides/grok-build/) bakın. Sağlayıcı ekledikten sonra listeyi yenilemek için `ocx ensure` çalıştırın veya proxy’yi yeniden başlatın. | +| Grok Build | Yerel bir dinleyicide Grok entegrasyonu etkinse ve `~/.grok` mevcutsa, `ocx start` modelleri kaydeder; Grok Build içinde bir `ocx-*` modeli seçin. Uzak kurulumlar için [Grok Build kılavuzuna](https://opencodex.me/tr/guides/grok-build/) bakın. Sağlayıcı ekledikten sonra listeyi yenilemek için proxy’yi yeniden başlatın (veya Codex otomatik başlatma etkinse `ocx ensure` çalıştırın). | | Yönetilen entegrasyonu olan araçlar | Panelin **Connect** sayfasını veya `ocx integration client enable --client ` komutunu kullanın. | | Diğer tüm araçlar | Özel OpenAI uyumlu temel URL’yi `http://localhost:10100/v1` veya Anthropic temel URL’sini `http://localhost:10100` olarak ayarlayın. | diff --git a/readme/README.zh-CN.md b/readme/README.zh-CN.md index fe059dbb0c5..a56eac15ba2 100644 --- a/readme/README.zh-CN.md +++ b/readme/README.zh-CN.md @@ -106,7 +106,7 @@ ocx start # 代理 + 仪表板:localhost:10100 | Codex | 打开仪表盘 **Connect** 页面上的 Codex 开关,然后照常运行 `codex`。在本地监听下,这会让 Codex 内置提供商指向代理。使用终端时,请在仪表盘添加提供商之前运行 `ocx init` 并接受其 Codex 提示。 | | Claude Code | 安装 `claude` CLI 后运行 `ocx claude`。它会在需要时启动代理,并通过代理启动 Claude Code。 | | Claude Desktop | 运行 `ocx claude desktop`。全新安装时会为整个应用设置网关配置;已有的 first-party 设置会保持原样,可运行 `ocx claude desktop apply --gateway` 明确切换。详见 [Claude Code 指南](https://opencodex.me/zh-cn/guides/claude-code/)。 切换后请完全退出并重新打开 Claude Desktop。 | -| Grok Build | 在本地监听下,若 `~/.grok` 存在,`ocx start` 会注册模型;在 Grok Build 中选择 `ocx-*` 模型。远程配置请参见 [Grok Build 指南](https://opencodex.me/zh-cn/guides/grok-build/)。 添加提供商后,运行 `ocx ensure` 或重启代理以刷新列表。 | +| Grok Build | 在本地监听且启用 Grok 集成时,若 `~/.grok` 存在,`ocx start` 会注册模型;在 Grok Build 中选择 `ocx-*` 模型。远程配置请参见 [Grok Build 指南](https://opencodex.me/zh-cn/guides/grok-build/)。添加提供商后,重启代理(或在启用 Codex 自启动时运行 `ocx ensure`)以刷新列表。 | | 有托管集成的工具 | 使用仪表盘 **Connect** 页面,或运行 `ocx integration client enable --client `。 | | 其他工具 | 将自定义 OpenAI 兼容 base URL 设为 `http://localhost:10100/v1`,或将 Anthropic base URL 设为 `http://localhost:10100`。 | diff --git a/readme/README.zh-TW.md b/readme/README.zh-TW.md index ec88758df18..78cacab3696 100644 --- a/readme/README.zh-TW.md +++ b/readme/README.zh-TW.md @@ -106,7 +106,7 @@ ocx start # 代理 + 儀表板位於 localhost:10100 | Codex | 開啟儀表板 **Connect** 頁面的 Codex 開關,然後照常執行 `codex`。在本機監聽時,這會讓 Codex 內建供應商指向代理。使用終端機時,請在儀表板新增供應商之前執行 `ocx init` 並接受其 Codex 提示。 | | Claude Code | 安裝 `claude` CLI 後執行 `ocx claude`。它會在需要時啟動代理,並透過代理啟動 Claude Code。 | | Claude Desktop | 執行 `ocx claude desktop`。全新安裝時會為整個應用程式設定閘道設定檔;既有的 first-party 設定會保留,可執行 `ocx claude desktop apply --gateway` 明確切換。詳見 [Claude Code 指南](https://opencodex.me/zh-tw/guides/claude-code/)。 切換後請完全結束並重新開啟 Claude Desktop。 | -| Grok Build | 在本機監聽時,若 `~/.grok` 存在,`ocx start` 會註冊模型;在 Grok Build 選擇 `ocx-*` 模型。遠端設定請參閱 [Grok Build 指南](https://opencodex.me/zh-tw/guides/grok-build/)。 新增供應商後,執行 `ocx ensure` 或重新啟動代理以更新清單。 | +| Grok Build | 在本機監聽且啟用 Grok 整合時,若 `~/.grok` 存在,`ocx start` 會註冊模型;在 Grok Build 中選擇 `ocx-*` 模型。遠端設定請參見 [Grok Build 指南](https://opencodex.me/zh-tw/guides/grok-build/)。新增供應商後,重新啟動代理(或在啟用 Codex 自動啟動時執行 `ocx ensure`)以更新清單。 | | 具備受管理整合的工具 | 使用儀表板的 **Connect** 頁面,或執行 `ocx integration client enable --client `。 | | 其他工具 | 將自訂 OpenAI 相容基本 URL 設為 `http://localhost:10100/v1`,或將 Anthropic 基本 URL 設為 `http://localhost:10100`。 | diff --git a/readme/i18n-manifest.json b/readme/i18n-manifest.json index 3977c45f1ab..80ed6b2aa0c 100644 --- a/readme/i18n-manifest.json +++ b/readme/i18n-manifest.json @@ -6,43 +6,43 @@ "file": "readme/README.fr.md", "label": "Français", "docsPath": "fr", - "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" + "sourceSha256": "f0f17270033cd0af45d92506a6386420b7e509eac18457dac050b8f689789230" }, "ko": { "file": "readme/README.ko.md", "label": "한국어", "docsPath": "ko", - "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" + "sourceSha256": "f0f17270033cd0af45d92506a6386420b7e509eac18457dac050b8f689789230" }, "zh-CN": { "file": "readme/README.zh-CN.md", "label": "简体中文", "docsPath": "zh-cn", - "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" + "sourceSha256": "f0f17270033cd0af45d92506a6386420b7e509eac18457dac050b8f689789230" }, "zh-TW": { "file": "readme/README.zh-TW.md", "label": "繁體中文", "docsPath": "zh-tw", - "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" + "sourceSha256": "f0f17270033cd0af45d92506a6386420b7e509eac18457dac050b8f689789230" }, "ru": { "file": "readme/README.ru.md", "label": "Русский", "docsPath": "ru", - "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" + "sourceSha256": "f0f17270033cd0af45d92506a6386420b7e509eac18457dac050b8f689789230" }, "ja": { "file": "readme/README.ja.md", "label": "日本語", "docsPath": "ja", - "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" + "sourceSha256": "f0f17270033cd0af45d92506a6386420b7e509eac18457dac050b8f689789230" }, "tr": { "file": "readme/README.tr.md", "label": "Türkçe", "docsPath": "tr", - "sourceSha256": "fc00b5313c8bc7caa455ff7d833c72e52e615a6651885e6386bf4e495c253eaf" + "sourceSha256": "f0f17270033cd0af45d92506a6386420b7e509eac18457dac050b8f689789230" } } }