From 31066bb35786c495d690609ba22b3e40f0be135b Mon Sep 17 00:00:00 2001 From: n3wr1ch <40690535+n3wr1ch@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:33:54 +0900 Subject: [PATCH 01/10] feat(integrations): add OMP client support --- .../src/content/docs/guides/integrations.md | 14 +++-- .../content/docs/ja/reference/cli/agents.md | 12 ++-- .../docs/ja/reference/management-api.md | 2 +- .../content/docs/ko/reference/cli/agents.md | 12 ++-- .../docs/ko/reference/management-api.md | 2 +- .../src/content/docs/reference/cli/agents.md | 43 ++++++++----- .../content/docs/reference/management-api.md | 2 +- .../content/docs/ru/reference/cli/agents.md | 27 ++++---- .../docs/ru/reference/management-api.md | 2 +- .../docs/zh-cn/reference/cli/agents.md | 12 ++-- .../docs/zh-cn/reference/management-api.md | 2 +- gui/src/app-routing.ts | 1 + .../client-config-clients.ts | 3 +- gui/src/i18n/de.ts | 15 +++-- gui/src/i18n/en.ts | 15 +++-- gui/src/i18n/ja.ts | 15 +++-- gui/src/i18n/ko.ts | 15 +++-- gui/src/i18n/ru.ts | 15 +++-- gui/src/i18n/zh.ts | 15 +++-- gui/src/pages/Integrations.tsx | 2 + .../integrations/FileIntegrationPage.tsx | 2 + gui/src/pages/integrations/integration-api.ts | 1 + .../pages/integrations/overview-clients.ts | 3 +- gui/tests/client-config-panel.test.tsx | 12 ++-- gui/tests/integrations-overview-rows.test.ts | 6 +- src/cli/export-command.ts | 4 +- src/cli/help.ts | 10 +-- src/clients/config-export.ts | 62 +++++++++++++++++++ src/integrations/registry.ts | 7 +++ tests/cli-export-command.test.ts | 2 +- .../client-config-export-new-clients.test.ts | 4 +- tests/client-config-export.test.ts | 44 ++++++++++++- tests/integrations-invariants.test.ts | 9 +-- tests/integrations-state.test.ts | 4 +- tests/management-client-config-route.test.ts | 17 +++++ 35 files changed, 295 insertions(+), 118 deletions(-) diff --git a/docs-site/src/content/docs/guides/integrations.md b/docs-site/src/content/docs/guides/integrations.md index c917fd273a..a11ebd2fa2 100644 --- a/docs-site/src/content/docs/guides/integrations.md +++ b/docs-site/src/content/docs/guides/integrations.md @@ -1,23 +1,25 @@ --- title: Integrations -description: Connect opencodex to OpenCode, Pi, Hermes, OpenClaw, Kimi Code and Gajae Code from the dashboard — one switch per client, with a backup taken before every write. +description: Connect opencodex to OpenCode, Pi, OMP, Hermes, OpenClaw, Kimi Code and Gajae Code from the dashboard — one switch per client, with a backup taken before every write. --- The **Integrations** tab writes opencodex's provider block into a client's own config -file, and removes it again. Six clients work this way, each with a switch: +file, and removes it again. Seven clients work this way, each with a switch: | Client | Config file | Format | When the change takes effect | Credential | |---|---|---|---|---| | OpenCode | `~/.config/opencode/opencode.json` | JSON | next direct launch | `OPENCODEX_OPENCODE_API_KEY` | -| Pi | `~/.pi/agent/models.json` | JSON | new sessions | `OPENCODEX_API_KEY` | +| Pi | `~/.pi/agent/models.json` | JSON | new sessions | loopback placeholder | +| OMP | `~/.omp/agent/models.yml` | YAML | after restarting OMP | loopback placeholder | | Hermes | `~/.hermes/config.yaml` | YAML | new sessions | `OPENCODEX_HERMES_API_KEY` | | OpenClaw | `~/.openclaw/openclaw.json` | JSON5 | immediately, on a running gateway | `OPENCODEX_OPENCLAW_API_KEY` | | Kimi Code | `~/.kimi-code/config.toml` | TOML | on restart, or `/reload` | loopback placeholder | | Gajae Code | `~/.gjc/agent/models.yml` | YAML | new sessions, or when you open `/model` |`OPENCODEX_GAJAE_API_KEY` | Paths honor each client's own environment override where it has one, so a relocated -`HERMES_HOME`, `KIMI_CODE_HOME` or `XDG_CONFIG_HOME` is followed rather than guessed -at. The table lists each client's default; an override always wins. +`HERMES_HOME`, `KIMI_CODE_HOME`, `XDG_CONFIG_HOME`, `PI_CODING_AGENT_DIR`, `PI_CONFIG_DIR` +or active `OMP_PROFILE` is followed rather than guessed at. The table lists each client's +default; an override always wins. OpenClaw has several, and they do different jobs. `OPENCLAW_CONFIG_PATH` selects the file; `OPENCLAW_STATE_DIR`, `OPENCLAW_PROFILE` and `OPENCLAW_HOME` select the state @@ -75,7 +77,7 @@ changed value and calling it success. You will see the file named and nothing on disk will have moved. Editing that file by hand still works; it is only our automatic rewrite that declines. -**Pi, Kimi Code and Gajae Code only work against a loopback bind.** None of their config +**Pi, OMP, Kimi Code and Gajae Code only work against a loopback bind.** None of their config schemas has a place for the `x-opencodex-api-key` header that a non-loopback bind requires, so a generated config would simply be rejected — and writing one by hand does not help, because there is nowhere in the file to put the header either. Reaching a diff --git a/docs-site/src/content/docs/ja/reference/cli/agents.md b/docs-site/src/content/docs/ja/reference/cli/agents.md index c970804e7b..783e274529 100644 --- a/docs-site/src/content/docs/ja/reference/cli/agents.md +++ b/docs-site/src/content/docs/ja/reference/cli/agents.md @@ -125,7 +125,7 @@ Grok Build モデル フェンスを管理および適用します。 ## クライアント設定のエクスポート -### `ocx export --client ` +### `ocx export --client ` 実行中のプロキシに接続されているクライアント設定を出力します。 opencode と [円周率](/guides/pi/) は環境変数ではなく独自の JSON 設定からプロバイダーを読み取るため、このコマンドは `opencodex` プロバイダー ブロック (ベース URL、モデル リスト、クライアントの環境参照) をシリアル化し、そのファイルにマージできるようにします。 @@ -141,23 +141,25 @@ Grok Build モデル フェンスを管理および適用します。 ```bash ocx export --client opencode # config plus destination, merge warning, and counts ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff +ocx export --client omp --json > omp-models.yml # OMP models.yml provider block ocx export --client opencode --out ~/opencodex-opencode.json ``` -`--json` がない場合、JSON が先頭に続き、正規の宛先パス、マージ警告、環境エクスポート行、およびコンテキスト制限を省略する行数を含むモデル数が続きます (クライアントはこれらに対して独自のデフォルトを適用します)。 +`--json` がない場合、JSON が先頭に続き、正規の宛先パス、マージ警告、クライアント固有の起動前ガイダンス、およびコンテキスト制限を省略する行数を含むモデル数が続きます (クライアントはこれらに対して独自のデフォルトを適用します)。 |クライアント |正規の宛先 |ダウンロードファイル名 |環境変数 | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (設定すると `XDG_CONFIG_HOME` が勝ち) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | -| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | `OPENCODEX_API_KEY` | +| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | なし - ブロックにリテラル `opencodex-loopback` が入ります | +| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | なし - loopback placeholder | -2 つの環境変数名は異なり、各クライアントは独自の名前のみを補間します。 opencode は `{env:OPENCODEX_OPENCODE_API_KEY}` を読み取ります。 Pi は `$OPENCODEX_API_KEY` を読み取ります。 +opencode は `{env:OPENCODEX_OPENCODE_API_KEY}` を補間します。opencodex が生成する Pi のエクスポートには環境変数が不要で、リテラルのプレースホルダー `opencodex-loopback` が入ります。この値は必須です。Pi はモデル リストを構築する際に `apiKey` を解決し、既存の設定に未設定の環境変数参照がある場合はプロバイダー全体を隠すためです。ループバックでは、生成されたプレースホルダーをプロキシが検査することはありません。 :::caution[マージし、決して置き換えないでください] `ocx export` は実際のクライアント設定を書き込むことはありません。宛先は手動でマージできるように出力されます。`--out` は、`--force` なしで既存のファイルを上書きすることを拒否します。これは、設定を置き換えると、その中にすでに含まれている他のプロバイダー、エージェント、および MCP エントリが破壊されるためです。 ::: -キーはシリアル化されません。設定にはクライアントの環境参照のみが含まれるため、シークレットは環境内に残ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。参照は単に使用されないだけです。プロキシがループバックを超えてバインドする場合にのみ変数を設定します。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 +キーはシリアル化されません。opencode の設定には環境参照のみが含まれるためシークレットは環境内に残り、Pi の設定には認証情報ではなくプレースホルダーが入ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。opencode の変数は、プロキシがループバックを超えてバインドする場合にのみ設定します。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 同じペイロードが `GET /api/client-config` によって提供され、ダッシュボードの [API] タブにレンダリングされるため、CLI、API、および GUI は同じバイトを使用します。 diff --git a/docs-site/src/content/docs/ja/reference/management-api.md b/docs-site/src/content/docs/ja/reference/management-api.md index a2a8c1ddac..7e903d8749 100644 --- a/docs-site/src/content/docs/ja/reference/management-api.md +++ b/docs-site/src/content/docs/ja/reference/management-api.md @@ -130,7 +130,7 @@ Authorization: Bearer | --- | --- | --- | | `GET /api/catalog` |インストールされている Codex カタログ ドキュメントを返します | 404 カタログが見つかりません | | `GET /api/models` |ダッシュボード/CLI モデルの行を返す |収集が飽和したときの `catalog_busy` | -| `GET /api/client-config?client=...` |読み取り専用の OpenCode または Pi クライアント構成ドキュメントを作成する | 400 クライアントがサポートされていません。 503 カタログは利用できません | +| `GET /api/client-config?client=...` |サポートされているファイル連携の読み取り専用クライアント設定を作成する | 400 クライアントがサポートされていません。 503 カタログは利用できません | | `PUT /api/disabled-models` |共有の無効モデル リストを置き換える | 400 無効な JSON | | `PUT /api/model-visibility` |プロバイダーレベルまたはモデルレベルの可視性をアトミックに変更 | 400 プロバイダー、スコープ、ターゲット、または本文が無効です。 | `GET, POST /api/custom-models` |カスタム モデルをリストするか追加する | 400 個の無効なフィールド。 404 プロバイダーがありません。 409 複製モデル | diff --git a/docs-site/src/content/docs/ko/reference/cli/agents.md b/docs-site/src/content/docs/ko/reference/cli/agents.md index 13f95f948f..c45aea4674 100644 --- a/docs-site/src/content/docs/ko/reference/cli/agents.md +++ b/docs-site/src/content/docs/ko/reference/cli/agents.md @@ -131,7 +131,7 @@ Grok Build model fence를 관리하고 적용합니다. ## 클라이언트 설정 내보내기 -### `ocx export --client ` +### `ocx export --client ` 실행 중인 프록시에 연결된 client config를 출력합니다. opencode와 [Pi](/guides/pi/)는 environment variable이 아니라 각자의 JSON config에서 provider를 읽으므로, 이 명령은 `opencodex` provider block, 즉 base URL, model list, 그리고 client의 env reference를 직렬화해서 해당 파일에 병합할 수 있게 해줍니다. @@ -147,23 +147,25 @@ Grok Build model fence를 관리하고 적용합니다. ```bash ocx export --client opencode # config plus destination, merge warning, and counts ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff +ocx export --client omp --json > omp-models.yml # OMP models.yml provider block ocx export --client opencode --out ~/opencodex-opencode.json ``` -`--json`이 없으면 JSON이 먼저 나오고, 그다음 표준 대상 경로, merge 경고, env export 줄, 그리고 context limit을 생략한 row 수를 포함한 model count가 이어집니다(이 경우 client는 자체 기본값을 적용합니다). +`--json`이 없으면 JSON이 먼저 나오고, 그다음 표준 대상 경로, merge 경고, 해당 client에 env 변수가 있는 경우 env export 줄, 그리고 context limit을 생략한 row 수를 포함한 model count가 이어집니다(이 경우 client는 자체 기본값을 적용합니다). | 클라이언트 | 표준 대상 경로 | 다운로드 파일명 | 환경 변수 | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME`이 설정되어 있으면 우선합니다) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | -| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | `OPENCODEX_API_KEY` | +| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | 없음 - 블록에 리터럴 `opencodex-loopback`이 들어갑니다 | +| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | 없음 - loopback placeholder | -두 환경 변수 이름은 서로 다르며, 각 client는 자기 것만 보간합니다. opencode는 `{env:OPENCODEX_OPENCODE_API_KEY}`를 읽고, Pi는 `$OPENCODEX_API_KEY`를 읽습니다. +opencode는 `{env:OPENCODEX_OPENCODE_API_KEY}`를 보간합니다. opencodex가 생성한 Pi 블록에는 환경 변수가 필요 없으며, 리터럴 placeholder인 `opencodex-loopback`이 들어갑니다. 이 값은 필수입니다. Pi는 모델 목록을 만들 때 `apiKey`를 해석하고, 기존 config에 설정되지 않은 env 참조가 있으면 provider 전체를 숨기기 때문입니다. 루프백에서 proxy는 생성된 placeholder를 검사하지 않습니다. :::caution[Merge, never replace] `ocx export`는 실제 client config를 절대 쓰지 않습니다. 대상 경로는 손으로 병합하라고 출력되며, `--out`은 `--force` 없이 기존 파일을 덮어쓰지 않습니다. config를 바꾸어 덮어쓰면 이미 들어 있던 다른 provider, agent, MCP entry가 사라지기 때문입니다. ::: -어떤 key도 직렬화되지 않습니다. config에는 client의 env reference만 들어가므로 secret은 환경 변수에 남습니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. reference는 단지 사용되지 않을 뿐입니다. proxy가 loopback을 넘어 바인딩할 때만 변수를 설정하십시오. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. +어떤 key도 직렬화되지 않습니다. opencode config에는 env reference만 들어가므로 secret은 환경 변수에 남고, Pi config에는 인증 정보가 아니라 placeholder가 들어갑니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. opencode 변수는 proxy가 loopback을 넘어 바인딩할 때만 설정하십시오. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. 같은 payload는 `GET /api/client-config`로 제공되고 dashboard의 API 탭에도 렌더링되므로, CLI, API, GUI가 모두 같은 바이트를 사용합니다. diff --git a/docs-site/src/content/docs/ko/reference/management-api.md b/docs-site/src/content/docs/ko/reference/management-api.md index a0bcc78e1c..da0b170854 100644 --- a/docs-site/src/content/docs/ko/reference/management-api.md +++ b/docs-site/src/content/docs/ko/reference/management-api.md @@ -130,7 +130,7 @@ Authorization: Bearer | --- | --- | --- | | `GET /api/catalog` | 설치된 Codex catalog 문서를 반환합니다 | 404 catalog 없음 | | `GET /api/models` | 대시보드/CLI model 행을 반환합니다 | 수집이 포화 상태이면 `catalog_busy` | -| `GET /api/client-config?client=...` | 읽기 전용 OpenCode 또는 Pi client-config 문서를 만듭니다 | 400 지원되지 않는 client; 503 catalog 사용 불가 | +| `GET /api/client-config?client=...` | 지원되는 파일 연동의 읽기 전용 client config를 만듭니다 | 400 지원되지 않는 client; 503 catalog 사용 불가 | | `PUT /api/disabled-models` | 공유 disabled-model 목록을 교체합니다 | 400 잘못된 JSON | | `PUT /api/model-visibility` | provider 또는 model 수준의 visibility를 원자적으로 변경합니다 | 400 잘못된 provider, scope, target, 또는 본문 | | `GET, POST /api/custom-models` | custom model을 나열하거나 하나를 추가합니다 | 400 잘못된 필드; 404 provider 없음; 409 중복 model | diff --git a/docs-site/src/content/docs/reference/cli/agents.md b/docs-site/src/content/docs/reference/cli/agents.md index 4944a483d2..3b23b95a2d 100644 --- a/docs-site/src/content/docs/reference/cli/agents.md +++ b/docs-site/src/content/docs/reference/cli/agents.md @@ -146,40 +146,48 @@ Manage and apply the Grok Build model fence. ## Client config export -### `ocx export --client ` +### `ocx export --client ` -Print a client config wired to the running proxy. opencode and [Pi](/guides/pi/) read providers -from their own JSON config rather than environment variables, so this command serializes the -`opencodex` provider block — base URL, model list, and the client's env reference — for you to -merge into that file. +Print a client config wired to the running proxy. The command serializes the +`opencodex` provider block — base URL, model list, and the client's credential +reference or loopback placeholder — in the selected client's native format. The proxy must be running; the command resolves its live port, reads `/api/models`, and emits only models Codex can currently see. | Flag | Action | | --- | --- | -| `--client ` | Required. Selects the client dialect: opencode's keyed `provider` object or Pi's `providers` array. | -| `--json` | Print only the config JSON on stdout, so a redirect captures byte-exact output. Every diagnostic, including the `--out` write note, goes to stderr. | +| `--client ` | Required. Selects the client config dialect. | +| `--json` | Print only the generated config bytes on stdout, so a redirect captures byte-exact output. Every diagnostic, including the `--out` write note, goes to stderr. | | `--out ` | Write the config to ``. Refuses to replace an existing file. | | `--force` | Allow `--out` to replace an existing file. | ```bash ocx export --client opencode # config plus destination, merge warning, and counts ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff +ocx export --client omp --json > omp-models.yml # OMP models.yml provider block ocx export --client opencode --out ~/opencodex-opencode.json ``` -Without `--json` the JSON leads, then the canonical destination path, the merge warning, the env -export line, and a model count with how many rows omit context limits (the client applies its own -defaults for those). +Without `--json` the generated config leads, then the canonical destination path, the merge warning, the env +export line where the client has one, and a model count with how many rows omit context limits (the +client applies its own defaults for those). | Client | Canonical destination | Download filename | Env var | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME` wins when set) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | -| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | `OPENCODEX_API_KEY` | - -The two env var names are different, and each client only interpolates its own. opencode reads -`{env:OPENCODEX_OPENCODE_API_KEY}`; Pi reads `$OPENCODEX_API_KEY`. +| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | none — the block carries the literal `opencodex-loopback` | +| `omp` | `~/.omp/agent/models.yml` (`OMP_PROFILE`, `PI_CONFIG_DIR`, and `PI_CODING_AGENT_DIR` are honored) | `omp-models.yaml` | none — loopback placeholder | +| `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | +| `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | +| `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | none — loopback placeholder | +| `gajae` | `~/.gjc/agent/models.yml` | `gajae-models.yaml` | `OPENCODEX_GAJAE_API_KEY` | + +opencode interpolates `{env:OPENCODEX_OPENCODE_API_KEY}`. The generated Pi and OMP exports do +not require an environment variable: each carries the literal `opencodex-loopback` placeholder. +This is load-bearing because both clients resolve `apiKey` while building their model lists and +hide the whole provider when an existing config contains an unset env reference. The proxy never +checks the generated placeholder on loopback. :::caution[Merge, never replace] `ocx export` never writes your real client config. The destination is printed for you to merge by @@ -187,9 +195,10 @@ hand, and `--out` refuses to overwrite an existing file without `--force`, becau config destroys the other providers, agents, and MCP entries already in it. ::: -No key is ever serialized. The config carries only the client's env reference, so the secret stays -in your environment. A loopback proxy (`127.0.0.1`, the default) requires no admission key at all — -the reference is simply unused. Set the variable only when the proxy binds beyond loopback; see +No key is ever serialized. Configs carry either a documented environment reference or a +non-secret loopback placeholder. A loopback proxy (`127.0.0.1`, the default) requires no +admission key at all. Set a referenced variable only when the client schema supports it and +the proxy binds beyond loopback; see [Remote access](/reference/configuration/#remote-access) for how admission keys are issued. Keys for the upstream providers themselves are a separate thing entirely, configured per [Providers](/guides/providers/). diff --git a/docs-site/src/content/docs/reference/management-api.md b/docs-site/src/content/docs/reference/management-api.md index e6a7e385e8..dde75b2703 100644 --- a/docs-site/src/content/docs/reference/management-api.md +++ b/docs-site/src/content/docs/reference/management-api.md @@ -146,7 +146,7 @@ first and submit the returned digest. Prefer quarantine when recovery may be nee | --- | --- | --- | | `GET /api/catalog` | Return the installed Codex catalog document | 404 catalog not found | | `GET /api/models` | Return the dashboard/CLI model rows | `catalog_busy` when gathering is saturated | -| `GET /api/client-config?client=...` | Build a read-only OpenCode or Pi client-config document | 400 unsupported client; 503 catalog unavailable | +| `GET /api/client-config?client=...` | Build a read-only client config for any supported file integration | 400 unsupported client; 503 catalog unavailable | | `PUT /api/disabled-models` | Replace the shared disabled-model list | 400 invalid JSON | | `PUT /api/model-visibility` | Atomically change provider- or model-level visibility | 400 invalid provider, scope, target, or body | | `GET, POST /api/custom-models` | List custom models or add one | 400 invalid fields; 404 provider missing; 409 duplicate model | diff --git a/docs-site/src/content/docs/ru/reference/cli/agents.md b/docs-site/src/content/docs/ru/reference/cli/agents.md index 2d738ab9b4..6f69806235 100644 --- a/docs-site/src/content/docs/ru/reference/cli/agents.md +++ b/docs-site/src/content/docs/ru/reference/cli/agents.md @@ -152,7 +152,7 @@ override, но файлы на диске никогда не меняются. ## Экспорт client config -### `ocx export --client ` +### `ocx export --client ` Печатает client config, направленный на работающий прокси. opencode и [Pi](/guides/pi/) читают провайдеров из собственных JSON-конфигов, а не из переменных окружения, поэтому команда @@ -172,20 +172,25 @@ override, но файлы на диске никогда не меняются. ```bash ocx export --client opencode # config plus destination, merge warning, and counts ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff +ocx export --client omp --json > omp-models.yml # OMP models.yml provider block ocx export --client opencode --out ~/opencodex-opencode.json ``` -Без `--json` сначала идёт JSON, затем канонический путь назначения, предупреждение о merge, строка -экспорта переменной окружения и количество моделей с указанием, сколько строк не имеют context -limit'а (для них клиент применяет собственные default'ы). +Без `--json` сначала идёт JSON, затем канонический путь назначения, предупреждение о merge, +клиентская подсказка перед запуском и количество моделей с указанием, сколько строк не имеют +context limit'а (для них клиент применяет собственные default'ы). | Клиент | Канонический путь | Имя скачиваемого файла | Переменная окружения | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME` имеет приоритет, если задан) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | -| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | `OPENCODEX_API_KEY` | +| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | нет — блок несёт литерал `opencodex-loopback` | +| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | нет — loopback placeholder | -Имена этих двух env-переменных различаются, и каждый клиент интерполирует только свою. opencode -читает `{env:OPENCODEX_OPENCODE_API_KEY}`; Pi читает `$OPENCODEX_API_KEY`. +opencode интерполирует `{env:OPENCODEX_OPENCODE_API_KEY}`. Сгенерированный opencodex экспорт для +Pi не требует переменной окружения и несёт литеральную заглушку `opencodex-loopback`. Это значение +обязательно: Pi разрешает `apiKey`, когда строит список моделей, и прячет провайдера целиком, если +существующий конфиг содержит ссылку на незаданную переменную окружения. На loopback прокси не +проверяет сгенерированную заглушку. :::caution[Сливать, а не заменять] `ocx export` никогда не пишет в ваш реальный клиентский конфиг. Путь назначения лишь @@ -194,10 +199,10 @@ limit'а (для них клиент применяет собственные d MCP-записи. ::: -Никакой ключ никогда не сериализуется. Конфиг несёт только env-reference клиента, так что секрет -остаётся в вашем окружении. Loopback-прокси (`127.0.0.1`, по умолчанию) вообще не требует -admission key — ссылка просто остаётся неиспользованной. Задавайте переменную только если прокси -слушает не на loopback; как выдаются admission key, описано в +Никакой ключ никогда не сериализуется. Конфиг opencode несёт только env-reference, так что секрет +остаётся в вашем окружении, а конфиг Pi несёт заглушку вместо учётных данных. Loopback-прокси +(`127.0.0.1`, по умолчанию) вообще не требует admission key. Задавайте переменную opencode только +если прокси слушает не на loopback; как выдаются admission key, описано в [Удалённом доступе](/reference/configuration/#remote-access). Ключи upstream-провайдеров — это совсем отдельная история и настраиваются в [Провайдерах](/guides/providers/). diff --git a/docs-site/src/content/docs/ru/reference/management-api.md b/docs-site/src/content/docs/ru/reference/management-api.md index bac4b5de46..f6e8c74ae1 100644 --- a/docs-site/src/content/docs/ru/reference/management-api.md +++ b/docs-site/src/content/docs/ru/reference/management-api.md @@ -148,7 +148,7 @@ Endpoint'ы storage cleanup могут перемещать или навсег | --- | --- | --- | | `GET /api/catalog` | Вернуть установленный документ каталога Codex | 404 catalog not found | | `GET /api/models` | Вернуть model-row'ы для дашборда и CLI | `catalog_busy`, когда сборка перегружена | -| `GET /api/client-config?client=...` | Собрать read-only client-config document для OpenCode или Pi | 400 unsupported client; 503 catalog unavailable | +| `GET /api/client-config?client=...` | Собрать read-only client config для любой поддерживаемой файловой интеграции | 400 unsupported client; 503 catalog unavailable | | `PUT /api/disabled-models` | Полностью заменить общий список disabled-models | 400 invalid JSON | | `PUT /api/model-visibility` | Атомарно изменить видимость на уровне провайдера или модели | 400 invalid provider, scope, target or body | | `GET, POST /api/custom-models` | Показать список custom-моделей или добавить одну | 400 invalid fields; 404 provider missing; 409 duplicate model | diff --git a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md index dc1960adb3..ac29040be0 100644 --- a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md +++ b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md @@ -126,7 +126,7 @@ ocx claude desktop import [--apply] Validate and import JSON ## Client config export -### `ocx export --client ` +### `ocx export --client ` 输出连接到正在运行代理的客户端配置。opencode 和 [Pi](/guides/pi/) 不是从环境变量,而是从各自的 JSON 配置中读取 providers,因此此命令会序列化 `opencodex` provider 块——基础 URL、模型列表以及客户端的环境引用——供你合并进那个文件。 @@ -142,23 +142,25 @@ ocx claude desktop import [--apply] Validate and import JSON ```bash ocx export --client opencode # config plus destination, merge warning, and counts ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff +ocx export --client omp --json > omp-models.yml # OMP models.yml provider block ocx export --client opencode --out ~/opencodex-opencode.json ``` -不使用 `--json` 时,JSON 会先输出,随后是规范目标路径、合并警告、环境变量导出行,以及一个模型计数,并标明有多少行省略了上下文限制(客户端会对这些项应用自己的默认值)。 +不使用 `--json` 时,JSON 会先输出,随后是规范目标路径、合并警告、客户端专属的启动前提示,以及一个模型计数,并标明有多少行省略了上下文限制(客户端会对这些项应用自己的默认值)。 | 客户端 | 规范目标路径 | 下载文件名 | 环境变量 | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json`(设置了 `XDG_CONFIG_HOME` 时以其为准) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | -| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | `OPENCODEX_API_KEY` | +| `pi` | `~/.pi/agent/models.json` | `pi-models.json` | 无 - 块中携带字面值 `opencodex-loopback` | +| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | 无 - loopback placeholder | -这两个环境变量名称不同,而且每个客户端只会插入自己的那个。opencode 读取 `{env:OPENCODEX_OPENCODE_API_KEY}`;Pi 读取 `$OPENCODEX_API_KEY`。 +opencode 会插值 `{env:OPENCODEX_OPENCODE_API_KEY}`。opencodex 生成的 Pi 导出不需要环境变量,而是携带字面占位值 `opencodex-loopback`。这个值是必需的:Pi 在构建模型列表时会解析 `apiKey`,如果已有配置包含未设置的环境变量引用,它就会隐藏整个 provider。回环上的代理从不校验生成的占位值。 :::caution[合并,不要替换] `ocx export` 从不写入你的真实客户端配置。该命令只会打印目标路径供你手动合并,而 `--out` 在没有 `--force` 的情况下拒绝覆盖已有文件,因为替换配置会破坏其中已有的其他 providers、agents 和 MCP 条目。 ::: -任何密钥都不会被序列化。配置里只包含客户端的环境引用,因此密钥仍保留在你的环境中。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥——该引用只是不会被使用。只有当代理绑定到环回地址之外时才设置该变量;关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 +任何密钥都不会被序列化。opencode 配置里只包含环境引用,因此密钥仍保留在你的环境中;Pi 配置里携带的是占位值而不是任何凭据。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥。只有当代理绑定到环回地址之外时才需要设置 opencode 的那个变量;关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 同一份负载会通过 `GET /api/client-config` 提供,并在仪表盘的 API 选项卡中渲染,因此 CLI、API 和 GUI 使用的是同一字节内容。 diff --git a/docs-site/src/content/docs/zh-cn/reference/management-api.md b/docs-site/src/content/docs/zh-cn/reference/management-api.md index eb28876408..4e611356e4 100644 --- a/docs-site/src/content/docs/zh-cn/reference/management-api.md +++ b/docs-site/src/content/docs/zh-cn/reference/management-api.md @@ -130,7 +130,7 @@ Authorization: Bearer | --- | --- | --- | | `GET /api/catalog` | 返回已安装的 Codex 目录文档 | 404 未找到目录 | | `GET /api/models` | 返回仪表板/CLI 模型行 | 收集饱和时返回 `catalog_busy` | -| `GET /api/client-config?client=...` | 构建只读的 OpenCode 或 Pi client-config 文档 | 400 不支持的客户端;503 目录不可用 | +| `GET /api/client-config?client=...` | 为任意支持的文件集成构建只读客户端配置 | 400 不支持的客户端;503 目录不可用 | | `PUT /api/disabled-models` | 替换共享的禁用模型列表 | 400 无效 JSON | | `PUT /api/model-visibility` | 原子性地更改 provider 级或 model 级可见性 | 400 provider、scope、target 或请求体无效 | | `GET, POST /api/custom-models` | 列出自定义模型或添加一个 | 400 字段无效;404 provider 缺失;409 模型重复 | diff --git a/gui/src/app-routing.ts b/gui/src/app-routing.ts index 47a5362a08..55b59af85b 100644 --- a/gui/src/app-routing.ts +++ b/gui/src/app-routing.ts @@ -81,6 +81,7 @@ export const INTEGRATION_TAB_HASHES = [ "integrations/grok", "integrations/opencode", "integrations/pi", + "integrations/omp", "integrations/hermes", "integrations/openclaw", "integrations/kimi", diff --git a/gui/src/components/apikeys-workspace/client-config-clients.ts b/gui/src/components/apikeys-workspace/client-config-clients.ts index dca09d8566..dc98871dbf 100644 --- a/gui/src/components/apikeys-workspace/client-config-clients.ts +++ b/gui/src/components/apikeys-workspace/client-config-clients.ts @@ -8,12 +8,13 @@ * with EXPORT_CLIENT_IDS by hand; adding a client server-side renders no row * until this tuple changes. */ -export const CLIENTS = ["opencode", "pi", "hermes", "openclaw", "kimi", "gajae"] as const; +export const CLIENTS = ["opencode", "pi", "omp", "hermes", "openclaw", "kimi", "gajae"] as const; export type ExportClientId = (typeof CLIENTS)[number]; export const CLIENT_LABEL_KEYS = { opencode: "api.clientConfig.clientOpencode", pi: "api.clientConfig.clientPi", + omp: "api.clientConfig.clientOmp", hermes: "api.clientConfig.clientHermes", openclaw: "api.clientConfig.clientOpenclaw", kimi: "api.clientConfig.clientKimi", diff --git a/gui/src/i18n/de.ts b/gui/src/i18n/de.ts index 2e535c0c93..fa7f261978 100644 --- a/gui/src/i18n/de.ts +++ b/gui/src/i18n/de.ts @@ -764,6 +764,7 @@ export const de: Record = { "integrations.tab.grok": "Grok Build", "integrations.tab.opencode": "OpenCode", "integrations.tab.pi": "Pi", + "integrations.tab.omp": "OMP", "integrations.tab.hermes": "Hermes", "integrations.tab.openclaw": "OpenClaw", "integrations.tab.kimi": "Kimi Code", @@ -873,6 +874,7 @@ export const de: Record = { "integrations.kind.restore": "Wiederhergestellt", "integrations.semantics.opencode": "Gilt nur für direkte Starts von der Festplatte; die Umgebungsinjektion von ocx opencode hat Vorrang.", "integrations.semantics.pi": "Gilt für neue Sitzungen.", + "integrations.semantics.omp": "Starten Sie OMP neu, um den Katalog zu laden.", "integrations.semantics.hermes": "Gilt für neue Sitzungen.", "integrations.semantics.openclaw": "Wird sofort auf ein laufendes Gateway angewendet.", "integrations.semantics.kimi": "Zum Anwenden neu starten oder /reload ausführen (v2 überwacht die Datei).", @@ -1143,21 +1145,22 @@ export const de: Record = { "api.clientConfig.rowsLabel": "Client verbinden", "api.clientConfig.details": "Details", "api.clientConfig.detailsAria": "Details zur {client}-Konfiguration", - "api.clientConfig.copyAria": "{client}-Konfigurations-JSON kopieren", + "api.clientConfig.copyAria": "{client}-Konfiguration kopieren", "api.clientConfig.downloadAria": "{client}-Konfiguration herunterladen", "api.clientConfig.rowMeta": "{destination} · {count} Modell(e)", "api.clientConfig.rowError": "Die {client}-Konfiguration konnte nicht erstellt werden.", - "api.clientConfig.copiedAnnounceClient": "{client}-Konfigurations-JSON in die Zwischenablage kopiert.", + "api.clientConfig.copiedAnnounceClient": "{client}-Konfiguration in die Zwischenablage kopiert.", "api.clientConfig.clientOpencode": "OpenCode", "api.clientConfig.clientPi": "Pi", + "api.clientConfig.clientOmp": "OMP", "api.clientConfig.clientHermes": "Hermes", "api.clientConfig.clientOpenclaw": "OpenClaw", "api.clientConfig.clientKimi": "Kimi Code", "api.clientConfig.clientGajae": "Gajae Code", - "api.clientConfig.copy": "JSON kopieren", + "api.clientConfig.copy": "Konfiguration kopieren", "api.clientConfig.download": "Herunterladen", "api.clientConfig.loading": "Client-Konfiguration wird erstellt…", - "api.clientConfig.jsonLabel": "{client}-Konfigurations-JSON", + "api.clientConfig.jsonLabel": "{client}-Konfiguration", "api.clientConfig.destination": "Zieldatei", "api.clientConfig.envHint": "Schlüssel vor dem Start setzen", "api.clientConfig.mergeWarning": "Führe dies in die Zieldatei ein. Ein Ersetzen würde deine anderen Provider und MCP-Einstellungen entfernen.", @@ -1165,8 +1168,8 @@ export const de: Record = { "api.clientConfig.missingLimits": "{count} von {total} Modell(en) haben kein Kontextlimit; der Client verwendet dafür seine eigenen Vorgaben.", "api.clientConfig.noKeyYet": "Für {env} existiert noch kein Schlüssel. Erzeuge oben einen Schlüssel, bevor du diese Konfiguration außerhalb von Loopback nutzt.", "api.clientConfig.loadFailed": "Die Modellliste konnte nicht gelesen werden, daher wurde keine Client-Konfiguration erzeugt.", - "api.clientConfig.copiedAnnounce": "Client-Konfigurations-JSON in die Zwischenablage kopiert.", - "api.clientConfig.copyFailed": "Client-Konfigurations-JSON konnte nicht kopiert werden.", + "api.clientConfig.copiedAnnounce": "Client-Konfiguration in die Zwischenablage kopiert.", + "api.clientConfig.copyFailed": "Client-Konfiguration konnte nicht kopiert werden.", "api.clientConfig.downloadedAnnounce": "{filename} heruntergeladen. Es hat sich noch nichts geändert — führe die Datei selbst in {destination} ein.", "api.clientConfig.whereDisclosure": "Wohin diese Datei gehört", "api.clientConfig.whereBody": "Der Pfad oben ist der globale Speicherort. Eine projektlokale Konfigurationsdatei im Arbeitsverzeichnis hat Vorrang, und der Schlüssel wird aus der in der Konfiguration genannten Umgebungsvariable gelesen — nie aus dieser Datei.", diff --git a/gui/src/i18n/en.ts b/gui/src/i18n/en.ts index 9ad5d576d5..6f1d6bbbf6 100644 --- a/gui/src/i18n/en.ts +++ b/gui/src/i18n/en.ts @@ -1219,6 +1219,7 @@ export const en = { "integrations.tab.grok": "Grok Build", "integrations.tab.opencode": "OpenCode", "integrations.tab.pi": "Pi", + "integrations.tab.omp": "OMP", "integrations.tab.hermes": "Hermes", "integrations.tab.openclaw": "OpenClaw", "integrations.tab.kimi": "Kimi Code", @@ -1328,6 +1329,7 @@ export const en = { "integrations.kind.restore": "Restored", "integrations.semantics.opencode": "Direct disk launches only; ocx opencode environment injection takes precedence.", "integrations.semantics.pi": "Applies to new sessions.", + "integrations.semantics.omp": "Restart OMP to load the catalog.", "integrations.semantics.hermes": "Applies to new sessions.", "integrations.semantics.openclaw": "Applies immediately to a running gateway.", "integrations.semantics.kimi": "Restart or run /reload to apply it (v2 watches the file).", @@ -1606,21 +1608,22 @@ export const en = { "api.clientConfig.rowsLabel": "Connect a client", "api.clientConfig.details": "Details", "api.clientConfig.detailsAria": "{client} config details", - "api.clientConfig.copyAria": "Copy {client} config JSON", + "api.clientConfig.copyAria": "Copy {client} config", "api.clientConfig.downloadAria": "Download {client} config", "api.clientConfig.rowMeta": "{destination} · {count} model(s)", "api.clientConfig.rowError": "Could not build the {client} config.", - "api.clientConfig.copiedAnnounceClient": "{client} config JSON copied to the clipboard.", + "api.clientConfig.copiedAnnounceClient": "{client} config copied to the clipboard.", "api.clientConfig.clientOpencode": "OpenCode", "api.clientConfig.clientPi": "Pi", + "api.clientConfig.clientOmp": "OMP", "api.clientConfig.clientHermes": "Hermes", "api.clientConfig.clientOpenclaw": "OpenClaw", "api.clientConfig.clientKimi": "Kimi Code", "api.clientConfig.clientGajae": "Gajae Code", - "api.clientConfig.copy": "Copy JSON", + "api.clientConfig.copy": "Copy config", "api.clientConfig.download": "Download", "api.clientConfig.loading": "Building client config…", - "api.clientConfig.jsonLabel": "{client} config JSON", + "api.clientConfig.jsonLabel": "{client} config", "api.clientConfig.destination": "Destination file", "api.clientConfig.envHint": "Set the key before launching", "api.clientConfig.mergeWarning": "Merge this into the destination file. Replacing it would drop your other providers and MCP settings.", @@ -1628,8 +1631,8 @@ export const en = { "api.clientConfig.missingLimits": "{count} of {total} model(s) ship without a context limit; the client applies its own defaults.", "api.clientConfig.noKeyYet": "{env} has no key behind it yet. Generate a key above before using this config off loopback.", "api.clientConfig.loadFailed": "Could not read the model list, so no client config was produced.", - "api.clientConfig.copiedAnnounce": "Client config JSON copied to the clipboard.", - "api.clientConfig.copyFailed": "Could not copy the client config JSON.", + "api.clientConfig.copiedAnnounce": "Client config copied to the clipboard.", + "api.clientConfig.copyFailed": "Could not copy the client config.", "api.clientConfig.downloadedAnnounce": "Downloaded {filename}. Nothing changed yet — merge it into {destination} yourself.", "api.clientConfig.whereDisclosure": "Where this file goes", "api.clientConfig.whereBody": "The destination above is the global path. A project-local config file in the working directory takes precedence over it, and the client reads the key from the environment variable named in the config — never from this file.", diff --git a/gui/src/i18n/ja.ts b/gui/src/i18n/ja.ts index 12e1fb6e7b..83664d7589 100644 --- a/gui/src/i18n/ja.ts +++ b/gui/src/i18n/ja.ts @@ -1167,6 +1167,7 @@ export const ja: Record = { "integrations.tab.grok": "Grok Build", "integrations.tab.opencode": "OpenCode", "integrations.tab.pi": "Pi", + "integrations.tab.omp": "OMP", "integrations.tab.hermes": "Hermes", "integrations.tab.openclaw": "OpenClaw", "integrations.tab.kimi": "Kimi Code", @@ -1276,6 +1277,7 @@ export const ja: Record = { "integrations.kind.restore": "復元", "integrations.semantics.opencode": "ディスクから直接起動した場合にのみ適用されます。ocx opencode の環境注入が優先されます。", "integrations.semantics.pi": "新しいセッションから適用されます。", + "integrations.semantics.omp": "カタログを読み込むには OMP を再起動してください。", "integrations.semantics.hermes": "新しいセッションから適用されます。", "integrations.semantics.openclaw": "実行中のゲートウェイにすぐ適用されます。", "integrations.semantics.kimi": "再起動するか /reload を実行すると適用されます(v2 はファイルを監視します)。", @@ -1551,21 +1553,22 @@ export const ja: Record = { "api.clientConfig.rowsLabel": "クライアントを接続", "api.clientConfig.details": "詳細", "api.clientConfig.detailsAria": "{client} 設定の詳細", - "api.clientConfig.copyAria": "{client} 設定 JSON をコピー", + "api.clientConfig.copyAria": "{client} 設定をコピー", "api.clientConfig.downloadAria": "{client} 設定をダウンロード", "api.clientConfig.rowMeta": "{destination} · モデル {count} 件", "api.clientConfig.rowError": "{client} の設定を生成できませんでした。", - "api.clientConfig.copiedAnnounceClient": "{client} の設定 JSON をクリップボードにコピーしました。", + "api.clientConfig.copiedAnnounceClient": "{client} の設定をクリップボードにコピーしました。", "api.clientConfig.clientOpencode": "OpenCode", "api.clientConfig.clientPi": "Pi", + "api.clientConfig.clientOmp": "OMP", "api.clientConfig.clientHermes": "Hermes", "api.clientConfig.clientOpenclaw": "OpenClaw", "api.clientConfig.clientKimi": "Kimi Code", "api.clientConfig.clientGajae": "Gajae Code", - "api.clientConfig.copy": "JSON をコピー", + "api.clientConfig.copy": "設定をコピー", "api.clientConfig.download": "ダウンロード", "api.clientConfig.loading": "クライアント設定を生成中…", - "api.clientConfig.jsonLabel": "{client} 設定 JSON", + "api.clientConfig.jsonLabel": "{client} 設定", "api.clientConfig.destination": "配置先ファイル", "api.clientConfig.envHint": "起動前にキーを設定", "api.clientConfig.mergeWarning": "配置先ファイルにマージしてください。置き換えると既存のプロバイダーや MCP 設定が失われます。", @@ -1573,8 +1576,8 @@ export const ja: Record = { "api.clientConfig.missingLimits": "{total} 件中 {count} 件のモデルにコンテキスト上限がないため、クライアント側の既定値が使われます。", "api.clientConfig.noKeyYet": "{env} に対応するキーがまだありません。ループバック外で使う前に上でキーを発行してください。", "api.clientConfig.loadFailed": "モデル一覧を読み取れなかったため、クライアント設定を生成できませんでした。", - "api.clientConfig.copiedAnnounce": "クライアント設定 JSON をクリップボードにコピーしました。", - "api.clientConfig.copyFailed": "クライアント設定 JSON をコピーできませんでした。", + "api.clientConfig.copiedAnnounce": "クライアント設定をクリップボードにコピーしました。", + "api.clientConfig.copyFailed": "クライアント設定をコピーできませんでした。", "api.clientConfig.downloadedAnnounce": "{filename} をダウンロードしました。まだ何も変わっていません。{destination} に自分でマージしてください。", "api.clientConfig.whereDisclosure": "このファイルの置き場所", "api.clientConfig.whereBody": "上のパスはグローバル設定の場所です。作業ディレクトリのプロジェクト設定ファイルが優先され、キーは設定に書かれた環境変数から読み込まれ、このファイルには保存されません。", diff --git a/gui/src/i18n/ko.ts b/gui/src/i18n/ko.ts index bd17b27419..cdb8b41230 100644 --- a/gui/src/i18n/ko.ts +++ b/gui/src/i18n/ko.ts @@ -788,6 +788,7 @@ export const ko: Record = { "integrations.tab.grok": "Grok Build", "integrations.tab.opencode": "OpenCode", "integrations.tab.pi": "Pi", + "integrations.tab.omp": "OMP", "integrations.tab.hermes": "Hermes", "integrations.tab.openclaw": "OpenClaw", "integrations.tab.kimi": "Kimi Code", @@ -897,6 +898,7 @@ export const ko: Record = { "integrations.kind.restore": "복원", "integrations.semantics.opencode": "디스크에서 직접 실행할 때만 적용됩니다. ocx opencode의 환경 주입이 우선합니다.", "integrations.semantics.pi": "새 세션부터 적용됩니다.", + "integrations.semantics.omp": "카탈로그를 불러오려면 OMP를 재시작하세요.", "integrations.semantics.hermes": "새 세션부터 적용됩니다.", "integrations.semantics.openclaw": "실행 중인 게이트웨이에 즉시 반영됩니다.", "integrations.semantics.kimi": "재시작 또는 /reload 시 적용됩니다 (v2는 파일 변경을 감지합니다).", @@ -1170,21 +1172,22 @@ export const ko: Record = { "api.clientConfig.rowsLabel": "클라이언트 연결", "api.clientConfig.details": "자세히", "api.clientConfig.detailsAria": "{client} 설정 자세히 보기", - "api.clientConfig.copyAria": "{client} 설정 JSON 복사", + "api.clientConfig.copyAria": "{client} 설정 복사", "api.clientConfig.downloadAria": "{client} 설정 다운로드", "api.clientConfig.rowMeta": "{destination} · 모델 {count}개", "api.clientConfig.rowError": "{client} 설정을 만들지 못했습니다.", - "api.clientConfig.copiedAnnounceClient": "{client} 설정 JSON을 클립보드에 복사했습니다.", + "api.clientConfig.copiedAnnounceClient": "{client} 설정을 클립보드에 복사했습니다.", "api.clientConfig.clientOpencode": "OpenCode", "api.clientConfig.clientPi": "Pi", + "api.clientConfig.clientOmp": "OMP", "api.clientConfig.clientHermes": "Hermes", "api.clientConfig.clientOpenclaw": "OpenClaw", "api.clientConfig.clientKimi": "Kimi Code", "api.clientConfig.clientGajae": "Gajae Code", - "api.clientConfig.copy": "JSON 복사", + "api.clientConfig.copy": "설정 복사", "api.clientConfig.download": "다운로드", "api.clientConfig.loading": "클라이언트 설정 생성 중…", - "api.clientConfig.jsonLabel": "{client} 설정 JSON", + "api.clientConfig.jsonLabel": "{client} 설정", "api.clientConfig.destination": "대상 파일", "api.clientConfig.envHint": "실행 전 키 설정", "api.clientConfig.mergeWarning": "대상 파일에 병합하세요. 덮어쓰면 기존 프로바이더와 MCP 설정이 사라집니다.", @@ -1192,8 +1195,8 @@ export const ko: Record = { "api.clientConfig.missingLimits": "{total}개 중 {count}개 모델에 컨텍스트 한도가 없어 클라이언트 기본값이 적용됩니다.", "api.clientConfig.noKeyYet": "{env}에 연결된 키가 아직 없습니다. 루프백 밖에서 쓰려면 위에서 키를 발급하세요.", "api.clientConfig.loadFailed": "모델 목록을 읽지 못해 클라이언트 설정을 만들지 못했습니다.", - "api.clientConfig.copiedAnnounce": "클라이언트 설정 JSON을 클립보드에 복사했습니다.", - "api.clientConfig.copyFailed": "클라이언트 설정 JSON을 복사하지 못했습니다.", + "api.clientConfig.copiedAnnounce": "클라이언트 설정을 클립보드에 복사했습니다.", + "api.clientConfig.copyFailed": "클라이언트 설정을 복사하지 못했습니다.", "api.clientConfig.downloadedAnnounce": "{filename} 파일을 다운로드했습니다. 아직 아무것도 바뀌지 않았으니 {destination}에 직접 병합하세요.", "api.clientConfig.whereDisclosure": "이 파일이 들어갈 위치", "api.clientConfig.whereBody": "위 경로는 전역 설정 경로입니다. 작업 디렉터리의 프로젝트 설정 파일이 우선하며, 키는 설정에 적힌 환경 변수에서 읽고 이 파일에는 저장되지 않습니다.", diff --git a/gui/src/i18n/ru.ts b/gui/src/i18n/ru.ts index b02cb6e591..4941e40a55 100644 --- a/gui/src/i18n/ru.ts +++ b/gui/src/i18n/ru.ts @@ -1209,6 +1209,7 @@ export const ru: Record = { "integrations.tab.grok": "Grok Build", "integrations.tab.opencode": "OpenCode", "integrations.tab.pi": "Pi", + "integrations.tab.omp": "OMP", "integrations.tab.hermes": "Hermes", "integrations.tab.openclaw": "OpenClaw", "integrations.tab.kimi": "Kimi Code", @@ -1318,6 +1319,7 @@ export const ru: Record = { "integrations.kind.restore": "Восстановлено", "integrations.semantics.opencode": "Действует только при прямом запуске с диска; внедрение окружения через ocx opencode имеет приоритет.", "integrations.semantics.pi": "Применяется к новым сеансам.", + "integrations.semantics.omp": "Перезапустите OMP, чтобы загрузить каталог.", "integrations.semantics.hermes": "Применяется к новым сеансам.", "integrations.semantics.openclaw": "Немедленно применяется к работающему шлюзу.", "integrations.semantics.kimi": "Чтобы применить, перезапустите клиент или выполните /reload (v2 отслеживает файл).", @@ -1593,21 +1595,22 @@ export const ru: Record = { "api.clientConfig.rowsLabel": "Подключение клиента", "api.clientConfig.details": "Подробнее", "api.clientConfig.detailsAria": "Подробности конфигурации {client}", - "api.clientConfig.copyAria": "Скопировать JSON конфигурации {client}", + "api.clientConfig.copyAria": "Скопировать конфигурацию {client}", "api.clientConfig.downloadAria": "Скачать конфигурацию {client}", "api.clientConfig.rowMeta": "{destination} · моделей: {count}", "api.clientConfig.rowError": "Не удалось собрать конфигурацию {client}.", - "api.clientConfig.copiedAnnounceClient": "JSON конфигурации {client} скопирован в буфер обмена.", + "api.clientConfig.copiedAnnounceClient": "Конфигурация {client} скопирована в буфер обмена.", "api.clientConfig.clientOpencode": "OpenCode", "api.clientConfig.clientPi": "Pi", + "api.clientConfig.clientOmp": "OMP", "api.clientConfig.clientHermes": "Hermes", "api.clientConfig.clientOpenclaw": "OpenClaw", "api.clientConfig.clientKimi": "Kimi Code", "api.clientConfig.clientGajae": "Gajae Code", - "api.clientConfig.copy": "Копировать JSON", + "api.clientConfig.copy": "Копировать конфигурацию", "api.clientConfig.download": "Скачать", "api.clientConfig.loading": "Формируется конфигурация клиента…", - "api.clientConfig.jsonLabel": "JSON конфигурации {client}", + "api.clientConfig.jsonLabel": "Конфигурация {client}", "api.clientConfig.destination": "Целевой файл", "api.clientConfig.envHint": "Задайте ключ перед запуском", "api.clientConfig.mergeWarning": "Объедините это с целевым файлом. Замена удалит ваши другие провайдеры и настройки MCP.", @@ -1615,8 +1618,8 @@ export const ru: Record = { "api.clientConfig.missingLimits": "У {count} из {total} моделей нет лимита контекста; клиент применит свои значения по умолчанию.", "api.clientConfig.noKeyYet": "Для {env} пока нет ключа. Создайте ключ выше, прежде чем использовать конфигурацию вне loopback.", "api.clientConfig.loadFailed": "Не удалось прочитать список моделей, поэтому конфигурация клиента не создана.", - "api.clientConfig.copiedAnnounce": "JSON конфигурации клиента скопирован в буфер обмена.", - "api.clientConfig.copyFailed": "Не удалось скопировать JSON конфигурации клиента.", + "api.clientConfig.copiedAnnounce": "Конфигурация клиента скопирована в буфер обмена.", + "api.clientConfig.copyFailed": "Не удалось скопировать конфигурацию клиента.", "api.clientConfig.downloadedAnnounce": "Файл {filename} скачан. Пока ничего не изменилось — объедините его с {destination} самостоятельно.", "api.clientConfig.whereDisclosure": "Куда положить этот файл", "api.clientConfig.whereBody": "Путь выше — глобальное расположение. Файл конфигурации проекта в рабочем каталоге имеет приоритет, а ключ читается из переменной окружения, указанной в конфигурации, и никогда не хранится в этом файле.", diff --git a/gui/src/i18n/zh.ts b/gui/src/i18n/zh.ts index 83d42fb0ed..cd9fc19711 100644 --- a/gui/src/i18n/zh.ts +++ b/gui/src/i18n/zh.ts @@ -781,6 +781,7 @@ export const zh: Record = { "integrations.tab.grok": "Grok Build", "integrations.tab.opencode": "OpenCode", "integrations.tab.pi": "Pi", + "integrations.tab.omp": "OMP", "integrations.tab.hermes": "Hermes", "integrations.tab.openclaw": "OpenClaw", "integrations.tab.kimi": "Kimi Code", @@ -890,6 +891,7 @@ export const zh: Record = { "integrations.kind.restore": "已恢复", "integrations.semantics.opencode": "仅适用于直接从磁盘启动;ocx opencode 的环境注入优先。", "integrations.semantics.pi": "对新会话生效。", + "integrations.semantics.omp": "重启 OMP 以加载模型目录。", "integrations.semantics.hermes": "对新会话生效。", "integrations.semantics.openclaw": "立即应用到正在运行的网关。", "integrations.semantics.kimi": "重启或运行 /reload 以应用(v2 会监视该文件)。", @@ -1163,21 +1165,22 @@ export const zh: Record = { "api.clientConfig.rowsLabel": "连接客户端", "api.clientConfig.details": "详情", "api.clientConfig.detailsAria": "{client} 配置详情", - "api.clientConfig.copyAria": "复制 {client} 配置 JSON", + "api.clientConfig.copyAria": "复制 {client} 配置", "api.clientConfig.downloadAria": "下载 {client} 配置", "api.clientConfig.rowMeta": "{destination} · {count} 个模型", "api.clientConfig.rowError": "无法生成 {client} 配置。", - "api.clientConfig.copiedAnnounceClient": "已将 {client} 配置 JSON 复制到剪贴板。", + "api.clientConfig.copiedAnnounceClient": "已将 {client} 配置复制到剪贴板。", "api.clientConfig.clientOpencode": "OpenCode", "api.clientConfig.clientPi": "Pi", + "api.clientConfig.clientOmp": "OMP", "api.clientConfig.clientHermes": "Hermes", "api.clientConfig.clientOpenclaw": "OpenClaw", "api.clientConfig.clientKimi": "Kimi Code", "api.clientConfig.clientGajae": "Gajae Code", - "api.clientConfig.copy": "复制 JSON", + "api.clientConfig.copy": "复制配置", "api.clientConfig.download": "下载", "api.clientConfig.loading": "正在生成客户端配置…", - "api.clientConfig.jsonLabel": "{client} 配置 JSON", + "api.clientConfig.jsonLabel": "{client} 配置", "api.clientConfig.destination": "目标文件", "api.clientConfig.envHint": "启动前设置密钥", "api.clientConfig.mergeWarning": "请合并到目标文件中。直接替换会丢失你已有的其他提供商和 MCP 配置。", @@ -1185,8 +1188,8 @@ export const zh: Record = { "api.clientConfig.missingLimits": "{total} 个模型中有 {count} 个没有上下文上限,客户端将使用自己的默认值。", "api.clientConfig.noKeyYet": "{env} 目前还没有对应的密钥。离开回环地址使用前,请先在上方生成密钥。", "api.clientConfig.loadFailed": "无法读取模型列表,因此没有生成客户端配置。", - "api.clientConfig.copiedAnnounce": "客户端配置 JSON 已复制到剪贴板。", - "api.clientConfig.copyFailed": "无法复制客户端配置 JSON。", + "api.clientConfig.copiedAnnounce": "客户端配置已复制到剪贴板。", + "api.clientConfig.copyFailed": "无法复制客户端配置。", "api.clientConfig.downloadedAnnounce": "已下载 {filename}。目前还没有任何改动,请自行将其合并到 {destination}。", "api.clientConfig.whereDisclosure": "该文件应放在哪里", "api.clientConfig.whereBody": "上面的路径是全局配置位置。工作目录中的项目级配置文件优先级更高;密钥由配置中指定的环境变量读取,不会写入该文件。", diff --git a/gui/src/pages/Integrations.tsx b/gui/src/pages/Integrations.tsx index 772598af26..27584595dd 100644 --- a/gui/src/pages/Integrations.tsx +++ b/gui/src/pages/Integrations.tsx @@ -31,6 +31,7 @@ const TABS: readonly TabDefinition[] = [ { id: "grok", hash: "integrations/grok", labelKey: "integrations.tab.grok" }, { id: "opencode", hash: "integrations/opencode", labelKey: "integrations.tab.opencode" }, { id: "pi", hash: "integrations/pi", labelKey: "integrations.tab.pi" }, + { id: "omp", hash: "integrations/omp", labelKey: "integrations.tab.omp" }, { id: "hermes", hash: "integrations/hermes", labelKey: "integrations.tab.hermes" }, { id: "openclaw", hash: "integrations/openclaw", labelKey: "integrations.tab.openclaw" }, { id: "kimi", hash: "integrations/kimi", labelKey: "integrations.tab.kimi" }, @@ -40,6 +41,7 @@ const TABS: readonly TabDefinition[] = [ const FILE_CLIENTS = new Set([ "opencode", "pi", + "omp", "hermes", "openclaw", "kimi", diff --git a/gui/src/pages/integrations/FileIntegrationPage.tsx b/gui/src/pages/integrations/FileIntegrationPage.tsx index 32f408d80f..4783a4ef2e 100644 --- a/gui/src/pages/integrations/FileIntegrationPage.tsx +++ b/gui/src/pages/integrations/FileIntegrationPage.tsx @@ -19,6 +19,7 @@ export type { FileIntegrationClientId }; const SEMANTICS_KEY: Record = { opencode: "integrations.semantics.opencode", pi: "integrations.semantics.pi", + omp: "integrations.semantics.omp", hermes: "integrations.semantics.hermes", openclaw: "integrations.semantics.openclaw", kimi: "integrations.semantics.kimi", @@ -28,6 +29,7 @@ const SEMANTICS_KEY: Record = { const TAB_LABEL_KEY: Record = { opencode: "integrations.tab.opencode", pi: "integrations.tab.pi", + omp: "integrations.tab.omp", hermes: "integrations.tab.hermes", openclaw: "integrations.tab.openclaw", kimi: "integrations.tab.kimi", diff --git a/gui/src/pages/integrations/integration-api.ts b/gui/src/pages/integrations/integration-api.ts index 2d6830da67..0d7b0d3ad5 100644 --- a/gui/src/pages/integrations/integration-api.ts +++ b/gui/src/pages/integrations/integration-api.ts @@ -3,6 +3,7 @@ import { readJsonIfOk } from "../../fetch-json"; export const FILE_INTEGRATION_CLIENTS = [ "opencode", "pi", + "omp", "hermes", "openclaw", "kimi", diff --git a/gui/src/pages/integrations/overview-clients.ts b/gui/src/pages/integrations/overview-clients.ts index 73811976bf..c2894c3cd1 100644 --- a/gui/src/pages/integrations/overview-clients.ts +++ b/gui/src/pages/integrations/overview-clients.ts @@ -2,7 +2,7 @@ * One row model for every client the Integrations page can reach. * * The overview used to read a single route, `/api/client-integrations`, which - * answers only for the six file-toggle clients. A user with Claude Code + * answers only for the seven file-toggle clients. A user with Claude Code * connected and a Grok fence written was told "applied: 0" while three * integrations were live one tab away. Five more sources join the grid here, * each with its own payload shape, mapped to the badge vocabulary the file @@ -136,6 +136,7 @@ export interface OverviewSources { const FILE_LABEL_KEY: Record = { opencode: "integrations.tab.opencode", pi: "integrations.tab.pi", + omp: "integrations.tab.omp", hermes: "integrations.tab.hermes", openclaw: "integrations.tab.openclaw", kimi: "integrations.tab.kimi", diff --git a/gui/tests/client-config-panel.test.tsx b/gui/tests/client-config-panel.test.tsx index ce2336c7d6..c467a20b2e 100644 --- a/gui/tests/client-config-panel.test.tsx +++ b/gui/tests/client-config-panel.test.tsx @@ -190,7 +190,7 @@ test("each row fetches its own client and its dialog renders that client's exact await act(async () => { root.unmount(); }); }); -test("the config JSON is not rendered at rest", async () => { +test("the config bytes are not rendered at rest", async () => { // The core of the request: rows carry the actions, not the payload. stubRoute(client => Response.json(client === "pi" ? PI_ENVELOPE : OPENCODE_ENVELOPE)); const { root, container } = await mountPanel(); @@ -199,7 +199,7 @@ test("the config JSON is not rendered at rest", async () => { expect(container.querySelector(".awi-clientconfig-json")).toBeNull(); expect(container.querySelector("dialog")).toBeNull(); // Both transport actions stay on the surface; only inspection is demoted. - expect(rowButton(container, "OpenCode", "Copy JSON").disabled).toBe(false); + expect(rowButton(container, "OpenCode", "Copy config").disabled).toBe(false); expect(rowButton(container, "OpenCode", "Download").disabled).toBe(false); await act(async () => { rowButton(container, "OpenCode", "Details").click(); }); @@ -233,7 +233,7 @@ test("row actions carry client-qualified accessible names", async () => { stubRoute(client => Response.json(client === "pi" ? PI_ENVELOPE : OPENCODE_ENVELOPE)); const { root, container } = await mountPanel(); - expect(rowButton(container, "Pi", "Copy JSON").getAttribute("aria-label")).toBe("Copy Pi config JSON"); + expect(rowButton(container, "Pi", "Copy config").getAttribute("aria-label")).toBe("Copy Pi config"); expect(rowButton(container, "Pi", "Download").getAttribute("aria-label")).toBe("Download Pi config"); expect(rowButton(container, "Pi", "Details").getAttribute("aria-label")).toBe("Pi config details"); expect(container.querySelector(".awi-clientconfig-rows")?.getAttribute("aria-label")).toBe("Connect a client"); @@ -434,14 +434,14 @@ test("one client's failure isolates to its row, with no partial JSON and the bas .toEqual(["Retry"]); // The sibling row is untouched by its neighbour's 503. - expect(rowButton(container, "OpenCode", "Copy JSON").disabled).toBe(false); + expect(rowButton(container, "OpenCode", "Copy config").disabled).toBe(false); expect(rowButton(container, "OpenCode", "Download").disabled).toBe(false); await act(async () => { rowButton(container, "Pi", "Retry").click(); }); expect(piAttempts).toBe(2); expect(row(container, "Pi").textContent).toContain(PI_ENVELOPE.destination); - expect(rowButton(container, "Pi", "Copy JSON").disabled).toBe(false); + expect(rowButton(container, "Pi", "Copy config").disabled).toBe(false); await act(async () => { root.unmount(); }); }); @@ -468,7 +468,7 @@ test("no-key state is informational and leaves copy and download enabled", async // Row actions never block on a missing key: an agent may legitimately want the // shape first. - expect(rowButton(container, "OpenCode", "Copy JSON").disabled).toBe(false); + expect(rowButton(container, "OpenCode", "Copy config").disabled).toBe(false); expect(rowButton(container, "OpenCode", "Download").disabled).toBe(false); await act(async () => { rowButton(container, "OpenCode", "Details").click(); }); diff --git a/gui/tests/integrations-overview-rows.test.ts b/gui/tests/integrations-overview-rows.test.ts index 5410c9fd8a..92151ff369 100644 --- a/gui/tests/integrations-overview-rows.test.ts +++ b/gui/tests/integrations-overview-rows.test.ts @@ -137,7 +137,7 @@ test("file clients keep their existing badge and applied semantics", () => { expect(counts.stale).toBe(1); }); -test("every client counts toward the summary, not just the file six", () => { +test("every client counts toward the summary, not just the file seven", () => { const rows = buildOverviewRows(sources({ clients: [fileStatus({ clientId: "opencode", state: "current" })], codex: { routingInjected: true, status: "at-risk" }, @@ -178,7 +178,8 @@ test("every client counts toward the summary, not just the file six", () => { test("an unsettled file list renders unknown rows instead of dropping them", () => { const built = buildOverviewRows(sources({ clients: [], clientsSettled: false })); - expect(built.rows).toHaveLength(10); + expect(built.rows).toHaveLength(11); + expect(rowById(built, "omp").state).toBe("unknown"); expect(rowById(built, "kimi").state).toBe("unknown"); // Once settled, a client the server omitted is genuinely gone. @@ -194,4 +195,5 @@ test("each row points at its own tab", () => { expect(rowById(rows, "claudeDesktop").hash).toBe("integrations/claude/desktop"); expect(rowById(rows, "grok").hash).toBe("integrations/grok"); expect(rowById(rows, "hermes").hash).toBe("integrations/hermes"); + expect(rowById(rows, "omp").hash).toBe("integrations/omp"); }); diff --git a/src/cli/export-command.ts b/src/cli/export-command.ts index d7d074fb5f..64e3587a95 100644 --- a/src/cli/export-command.ts +++ b/src/cli/export-command.ts @@ -1,8 +1,8 @@ /** * `ocx export --client ` — print a client config for the live proxy. * - * Six clients, four formats: opencode and Pi are JSON, Hermes and Gajae YAML, - * OpenClaw JSON5, Kimi TOML. + * Seven clients, four formats: opencode and Pi are JSON, OMP, Hermes and Gajae + * are YAML, OpenClaw JSON5, Kimi TOML. * * Two consumers, one payload (devlog 260731_client_config_export/020): * diff --git a/src/cli/help.ts b/src/cli/help.ts index f768494478..79707bed79 100644 --- a/src/cli/help.ts +++ b/src/cli/help.ts @@ -173,12 +173,12 @@ const helpEntries: Record = { }, "api-key": { usage: "ocx api-key ...", summary: "Alias of ocx access key." }, export: { - usage: "ocx export --client [--json] [--out ] [--force]", - summary: "Print a client config (opencode, Pi, Hermes, OpenClaw, Kimi Code, Gajae Code) wired to the running proxy.", + usage: "ocx export --client [--json] [--out ] [--force]", + summary: "Print a client config (opencode, Pi, OMP, Hermes, OpenClaw, Kimi Code, Gajae Code) wired to the running proxy.", details: [ - "--json prints only the config JSON on stdout, so it is safe to redirect to a file.", + "--json prints only the generated config bytes on stdout, so it is safe to redirect to a file.", "--out writes the config there and refuses to replace an existing file without --force.", - "The config never contains a key; it references the client's env var, which you export before launching. Kimi cannot hold an env reference, so it carries a loopback placeholder instead.", + "The config never contains a real key; it carries a documented env reference or a non-secret loopback placeholder.", "The destination path is printed for merging by hand — ocx never writes your real client config.", ], }, @@ -313,7 +313,7 @@ Usage: ocx agent Subagents, injection, effort caps, and sidecars ocx observe Logs, usage, storage, memory, and debug data ocx access External API keys and endpoint information - ocx export --client Print a client config wired to the running proxy (6 clients) + ocx export --client Print a client config wired to the running proxy (7 clients) ocx integration client Enable, disable, inspect or roll back a client integration ocx grok Grok Build model selection and apply ocx system Runtime settings, startup, sync, and updates diff --git a/src/clients/config-export.ts b/src/clients/config-export.ts index 4d8ca366c1..065308ce0e 100644 --- a/src/clients/config-export.ts +++ b/src/clients/config-export.ts @@ -170,6 +170,49 @@ export function opencodeGlobalConfigPath( return join(xdg, "opencode", "opencode.json"); } +const OMP_PROFILE_NAME_RE = /^[a-z0-9][a-z0-9._-]{0,63}$/; +const OMP_WINDOWS_RESERVED_PROFILE_RE = /^(?:CON|PRN|AUX|NUL|COM[0-9]|LPT[0-9])(?:\..*)?$/i; + +function ompProfileName(env: OpencodeLaunchEnv): string | undefined { + const raw = env.OMP_PROFILE?.trim() || env.PI_PROFILE?.trim(); + const profile = raw?.trim(); + if (!profile || profile === "default") return undefined; + if ( + profile === "." + || profile === ".." + || profile.endsWith(".") + || !OMP_PROFILE_NAME_RE.test(profile) + || OMP_WINDOWS_RESERVED_PROFILE_RE.test(profile) + ) { + throw new ClientPathError(`Invalid OMP profile "${raw}"`); + } + return profile; +} + +/** Resolve the global Oh My Pi agent directory using OMP's own env precedence. */ +export function ompAgentDir(env: OpencodeLaunchEnv = process.env, home: string = homedir()): string { + const profile = ompProfileName(env); + if (!profile) { + const override = env.PI_CODING_AGENT_DIR?.trim(); + if (override) return absoluteClientPath(override, home, "PI_CODING_AGENT_DIR"); + } + const configDir = env.PI_CONFIG_DIR?.trim(); + const root = configDir + ? (isAbsolute(configDir) || configDir === "~" || configDir.startsWith("~/") || configDir.startsWith("~\\") + ? absoluteClientPath(configDir, home, "PI_CONFIG_DIR") + : join(home, configDir)) + : join(home, ".omp"); + return profile ? join(root, "profiles", profile, "agent") : join(root, "agent"); +} + +/** OMP's canonical custom-provider catalog. */ +export function ompModelsConfigPath(env: OpencodeLaunchEnv = process.env, home: string = homedir()): string { + const agentDir = ompAgentDir(env, home); + const yamlFallback = join(agentDir, "models.yaml"); + const canonical = join(agentDir, "models.yml"); + return !existsSync(canonical) && existsSync(yamlFallback) ? yamlFallback : canonical; +} + /** Compose the OpenAI-compatible proxy base URL from a live probe result. */ export function opencodeProxyBaseUrl(port: number, hostname?: string): string { return `http://${probeHostname(hostname)}:${port}/v1`; @@ -364,6 +407,7 @@ export interface ExportContext { export type ExportClientId = | "opencode" | "pi" + | "omp" | "hermes" | "openclaw" | "kimi" @@ -894,6 +938,11 @@ function buildPiContribution(ctx: ExportContext): ManagedContribution { return singleFragment("pi", ["providers", OPENCODE_PROVIDER_ID], doc.providers[OPENCODE_PROVIDER_ID]); } +function buildOmpContribution(ctx: ExportContext): ManagedContribution { + const doc = buildPiClientConfig(ctx); + return singleFragment("omp", ["providers", OPENCODE_PROVIDER_ID], doc.providers[OPENCODE_PROVIDER_ID]); +} + function buildHermesContribution(ctx: ExportContext): ManagedContribution { const doc = buildHermesClientConfig(ctx); return singleFragment("hermes", ["providers", OPENCODE_PROVIDER_ID], doc.providers[OPENCODE_PROVIDER_ID]); @@ -953,6 +1002,19 @@ export const EXPORT_CLIENTS: Record = { // dedicated admission header a remote bind requires. loopbackOnly: true, }, + omp: { + id: "omp", + filename: "omp-models.yaml", + destination: env => ompModelsConfigPath(env), + apiKeyEnv: "", + exportHint: "OMP reads credentials from models.yml; loopback needs no key.", + build: buildPiClientConfig, + format: "yaml", + summarize: summarizePi, + buildContribution: buildOmpContribution, + // OMP's provider block has no dedicated admission-header field. + loopbackOnly: true, + }, hermes: { id: "hermes", filename: "hermes-config.yaml", diff --git a/src/integrations/registry.ts b/src/integrations/registry.ts index b4c086bdd0..889909a5ad 100644 --- a/src/integrations/registry.ts +++ b/src/integrations/registry.ts @@ -18,6 +18,8 @@ import { hermesHomeDir, kimiConfigPath, kimiHomeDir, + ompAgentDir, + ompModelsConfigPath, opencodeGlobalConfigPath, openclawConfigPath, openclawHomeDir, @@ -68,6 +70,11 @@ export const INTEGRATION_CLIENTS: Record join(home, ".pi", "agent", "models.json"), detectDir: (_env = process.env, home = homedir()) => join(home, ".pi"), }, + omp: { + id: "omp", + configPath: (env = process.env, home = homedir()) => ompModelsConfigPath(env, home), + detectDir: (env = process.env, home = homedir()) => ompAgentDir(env, home), + }, hermes: { id: "hermes", configPath: (env = process.env, home = homedir()) => hermesConfigPath(env, home), diff --git a/tests/cli-export-command.test.ts b/tests/cli-export-command.test.ts index f793fc7e08..0518362fa7 100644 --- a/tests/cli-export-command.test.ts +++ b/tests/cli-export-command.test.ts @@ -206,7 +206,7 @@ describe("ocx export argument validation (accept criterion 4)", () => { const proxy = fakeProxy(); const result = await run(["--client", "cursor"], { baseUrl: proxy.baseUrl }); expect(result.code).toBe(2); - for (const id of ["opencode", "pi", "hermes", "openclaw", "kimi", "gajae"]) { + for (const id of ["opencode", "pi", "omp", "hermes", "openclaw", "kimi", "gajae"]) { expect(result.stderr).toContain(id); } expect(result.stdout).toBe(""); diff --git a/tests/client-config-export-new-clients.test.ts b/tests/client-config-export-new-clients.test.ts index 8f5173b14c..d509338050 100644 --- a/tests/client-config-export-new-clients.test.ts +++ b/tests/client-config-export-new-clients.test.ts @@ -63,7 +63,7 @@ describe("no secret reaches a client config", () => { // client whose schema has no header field cannot authenticate remotely at // all. Saying so beats exporting a config that 401s. const loopbackOnly = EXPORT_CLIENT_IDS.filter(id => EXPORT_CLIENTS[id].loopbackOnly); - expect(loopbackOnly).toEqual(["pi", "kimi", "gajae"]); + expect(loopbackOnly).toEqual(["pi", "omp", "kimi", "gajae"]); }); test("every client that is not loopback-only carries the header on a remote bind", () => { @@ -268,7 +268,7 @@ describe("gajae", () => { describe("contributions name every fragment we own", () => { test("single-entry clients own exactly one path", () => { - for (const id of ["opencode", "pi", "hermes", "openclaw", "gajae"] as const) { + for (const id of ["opencode", "pi", "omp", "hermes", "openclaw", "gajae"] as const) { expect(buildClientContribution(id, ctx()).fragments).toHaveLength(1); } }); diff --git a/tests/client-config-export.test.ts b/tests/client-config-export.test.ts index 3e8b8e881e..3e85040e17 100644 --- a/tests/client-config-export.test.ts +++ b/tests/client-config-export.test.ts @@ -12,6 +12,7 @@ import { buildClientConfigText, isExportClientId, normalizeExportModels, + ompModelsConfigPath, type ExportContext, type ExportModel, type OpencodeGeneratedConfig, @@ -73,6 +74,7 @@ function piConfig(context: ExportContext = ctx()): PiGeneratedConfig { return buildClientConfig("pi", context) as PiGeneratedConfig; } + describe("relocated OpenCode serializer (accept criterion 1)", () => { test("the moved builder reproduces the pre-refactor golden byte-for-byte", () => { const block = buildOpencodeProviderBlockFromCatalog(10100, FIXTURE, "127.0.0.1"); @@ -219,6 +221,23 @@ describe("Pi serializer (accept criterion 2)", () => { }); }); +describe("OMP serializer", () => { + test("writes the full routed catalog in OMP's models.yml provider shape", () => { + const built = buildClientConfigText("omp", ctx()); + expect(built.format).toBe("yaml"); + const document = buildClientConfig("omp", ctx()) as PiGeneratedConfig; + expect(document.providers.opencodex!.models.map(model => model.id)).toEqual([ + "anthropic/claude-opus-5", + "custom/no-context", + "gpt-5.6-luna", + "tiny/small-ctx", + ]); + expect(built.text).toContain("providers:"); + expect(built.text).toContain("anthropic/claude-opus-5"); + expect(built.text).toContain("apiKey: opencodex-loopback"); + }); +}); + describe("no credential ever reaches the output (accept criterion 3)", () => { const LIVE_KEY = "ocx_live_do_not_serialize_0123456789"; @@ -280,8 +299,8 @@ describe("stable ordering (accept criterion 4)", () => { }); describe("EXPORT_CLIENTS registry", () => { - test("covers exactly the six file-toggle clients", () => { - expect(EXPORT_CLIENT_IDS).toEqual(["opencode", "pi", "hermes", "openclaw", "kimi", "gajae"]); + test("covers exactly the seven file-toggle clients", () => { + expect(EXPORT_CLIENT_IDS).toEqual(["opencode", "pi", "omp", "hermes", "openclaw", "kimi", "gajae"]); for (const id of EXPORT_CLIENT_IDS) expect(isExportClientId(id)).toBe(true); // The exception clients keep their own surfaces and are not export clients. expect(isExportClientId("claude-desktop")).toBe(false); @@ -426,6 +445,7 @@ describe("EXPORT_CLIENTS registry", () => { test("filenames name the destination file, not the product", () => { expect(EXPORT_CLIENTS.opencode.filename).toBe("opencode.json"); expect(EXPORT_CLIENTS.pi.filename).toBe("pi-models.json"); + expect(EXPORT_CLIENTS.omp.filename).toBe("omp-models.yaml"); expect(EXPORT_CLIENTS.hermes.filename).toBe("hermes-config.yaml"); expect(EXPORT_CLIENTS.openclaw.filename).toBe("openclaw.json5"); expect(EXPORT_CLIENTS.kimi.filename).toBe("kimi-config.toml"); @@ -444,6 +464,26 @@ describe("EXPORT_CLIENTS registry", () => { expect(EXPORT_CLIENTS.pi.destination({} as NodeJS.ProcessEnv)).toBe(join(homedir(), ".pi", "agent", "models.json")); }); + test("the OMP destination follows its global agent directory and profile selectors", () => { + expect(EXPORT_CLIENTS.omp.destination({} as NodeJS.ProcessEnv)).toBe( + join(homedir(), ".omp", "agent", "models.yml"), + ); + const profiled = { OMP_PROFILE: "work", PI_CONFIG_DIR: ".custom-omp" } as NodeJS.ProcessEnv; + expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe( + join(homedir(), ".custom-omp", "profiles", "work", "agent", "models.yml"), + ); + expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe(ompModelsConfigPath(profiled)); + expect(EXPORT_CLIENTS.omp.destination({ PI_CONFIG_DIR: "/srv/omp" } as NodeJS.ProcessEnv)).toBe( + join("/srv/omp", "agent", "models.yml"), + ); + expect(EXPORT_CLIENTS.omp.destination({ + OMP_PROFILE: " ", + PI_PROFILE: "legacy", + } as NodeJS.ProcessEnv)).toBe( + join(homedir(), ".omp", "profiles", "legacy", "agent", "models.yml"), + ); + }); + test("apiKeyEnv and exportHint name the variable the config references", () => { expect(EXPORT_CLIENTS.opencode.apiKeyEnv).toBe(OPENCODE_API_KEY_ENV); expect(EXPORT_CLIENTS.opencode.exportHint).toContain(OPENCODE_API_KEY_ENV); diff --git a/tests/integrations-invariants.test.ts b/tests/integrations-invariants.test.ts index 4178b908bd..f7524214aa 100644 --- a/tests/integrations-invariants.test.ts +++ b/tests/integrations-invariants.test.ts @@ -66,9 +66,9 @@ afterEach(() => { }); describe("the client registries cannot drift apart", () => { - test("every list of clients holds exactly the same six ids", async () => { + test("every list of clients holds exactly the same seven ids", async () => { /* - * Five lists name the same six clients, and two of them are maintained by + * Five lists name the same seven clients, and two of them are maintained by * hand: the GUI cannot import the backend registry, because that would * pull node:os and node:path into the browser bundle. A client added * server-side renders no row until someone remembers the tuple, and the @@ -78,7 +78,7 @@ describe("the client registries cannot drift apart", () => { const guiIntegrations = await import("../gui/src/pages/integrations/integration-api"); const expected = [...EXPORT_CLIENT_IDS].sort(); - expect(expected).toHaveLength(6); + expect(expected).toHaveLength(7); expect([...INTEGRATION_CLIENT_IDS].sort()).toEqual(expected); expect([...gui.CLIENTS].sort()).toEqual(expected); @@ -125,6 +125,7 @@ describe("every client survives a full lifecycle", () => { const SEED: Record = { opencode: '{\n "provider": {\n "mine": { "npm": "keep-me" }\n }\n}\n', pi: '{\n "providers": {\n "mine": { "api": "http://keep-me" }\n }\n}\n', + omp: "providers:\n mine:\n api: http://keep-me\n", hermes: "providers:\n mine:\n api: http://keep-me\n", openclaw: '{\n models: {\n providers: {\n mine: { api: "http://keep-me" },\n },\n },\n}\n', kimi: '[providers.mine]\napi = "http://keep-me"\n', @@ -675,7 +676,7 @@ describe("the store's own root stays tidy", () => { describe("the CLI names every client it supports", () => { test("export help and the top-level list are not stuck on opencode and Pi", () => { /* - * The command has accepted six clients since WP1, but its help said two. + * The command has accepted several clients since WP1, but its help said two. * A user reading it concluded the feature did not support their client — * the one failure mode a help string has. * diff --git a/tests/integrations-state.test.ts b/tests/integrations-state.test.ts index 8ef851018f..ef45405827 100644 --- a/tests/integrations-state.test.ts +++ b/tests/integrations-state.test.ts @@ -381,9 +381,9 @@ describe("installation detection is independent of config state", () => { * from. Rationale and the per-client table: 020 §1 amendment. */ describe("the loopback-only set is one fact, read through one seam", () => { - test("pi, kimi and gajae are loopback-only and nobody else is", () => { + test("omp, pi, kimi and gajae are loopback-only and nobody else is", () => { const loopbackOnly = INTEGRATION_CLIENT_IDS.filter(id => isLoopbackOnly(id)); - expect(loopbackOnly).toEqual(["pi", "kimi", "gajae"]); + expect(loopbackOnly).toEqual(["pi", "omp", "kimi", "gajae"]); }); test("the registry restates nothing — it reads the export spec", () => { diff --git a/tests/management-client-config-route.test.ts b/tests/management-client-config-route.test.ts index 1e20c446ee..5b0fa3dad7 100644 --- a/tests/management-client-config-route.test.ts +++ b/tests/management-client-config-route.test.ts @@ -29,6 +29,8 @@ interface ClientConfigEnvelope { exportHint: string; modelCount: number; modelsWithoutLimits: number; + format: string; + text: string; config: unknown; } @@ -157,6 +159,21 @@ describe("GET /api/client-config", () => { expect(provider.models.map(model => model.id)).toContain("a/m1"); }, 15_000); + test("OMP returns the full routed catalog as models.yml YAML", async () => { + const response = await clientConfigApi(baseConfig(), "?client=omp"); + expect(response.status).toBe(200); + const body = await response.json() as ClientConfigEnvelope; + + expect(body.client).toBe("omp"); + expect(body.filename).toBe("omp-models.yaml"); + expect(body.format).toBe("yaml"); + expect(body.text).toContain("providers:"); + expect(body.text).toContain("a/m1"); + const provider = (body.config as PiGeneratedConfig).providers[OPENCODE_PROVIDER_ID]; + expect(provider.models.map(model => model.id)).toContain("a/m1"); + expect(provider.apiKey).toBe(LOOPBACK_API_KEY_PLACEHOLDER); + }, 15_000); + test("counts describe the emitted document, including models without limits", async () => { const config = baseConfig(); const opencode = await (await clientConfigApi(config, "?client=opencode")).json() as ClientConfigEnvelope; From c0ded0966dbf1599fc4beb1f3211d8746be7aa05 Mon Sep 17 00:00:00 2001 From: n3wr1ch <40690535+n3wr1ch@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:38:19 +0900 Subject: [PATCH 02/10] docs(gui): add OMP integration screenshot --- .../evidence/omp-dashboard.png | Bin 0 -> 185256 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 devlog/_plan/260806_omp_integration/evidence/omp-dashboard.png diff --git a/devlog/_plan/260806_omp_integration/evidence/omp-dashboard.png b/devlog/_plan/260806_omp_integration/evidence/omp-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..b132a5334b15beeaedaf59b44075d8cc8b06950b GIT binary patch literal 185256 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

2r4g)Hi7}T=$I()8{OoAxN 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

{whOTm(4yd=j*^4^CneEIMY~D2 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 literal 0 HcmV?d00001 From 059c2df36aac7b68c1a066c691cce49c5c37e895 Mon Sep 17 00:00:00 2001 From: n3wr1ch <40690535+n3wr1ch@users.noreply.github.com> Date: Fri, 7 Aug 2026 13:31:13 +0900 Subject: [PATCH 03/10] fix(omp): align profile and export docs --- docs-site/src/content/docs/guides/integrations.md | 9 +++++---- docs-site/src/content/docs/ja/reference/cli/agents.md | 10 +++++++--- docs-site/src/content/docs/ko/reference/cli/agents.md | 10 +++++++--- docs-site/src/content/docs/reference/cli/agents.md | 10 +++++----- docs-site/src/content/docs/ru/reference/cli/agents.md | 10 +++++++--- .../src/content/docs/zh-cn/reference/cli/agents.md | 10 +++++++--- src/cli/export-command.ts | 8 ++++---- src/cli/help.ts | 4 ++-- src/clients/config-export.ts | 4 +++- tests/client-config-export.test.ts | 4 +++- 10 files changed, 50 insertions(+), 29 deletions(-) diff --git a/docs-site/src/content/docs/guides/integrations.md b/docs-site/src/content/docs/guides/integrations.md index a11ebd2fa2..9822b186f7 100644 --- a/docs-site/src/content/docs/guides/integrations.md +++ b/docs-site/src/content/docs/guides/integrations.md @@ -16,10 +16,11 @@ file, and removes it again. Seven clients work this way, each with a switch: | Kimi Code | `~/.kimi-code/config.toml` | TOML | on restart, or `/reload` | loopback placeholder | | Gajae Code | `~/.gjc/agent/models.yml` | YAML | new sessions, or when you open `/model` |`OPENCODEX_GAJAE_API_KEY` | -Paths honor each client's own environment override where it has one, so a relocated -`HERMES_HOME`, `KIMI_CODE_HOME`, `XDG_CONFIG_HOME`, `PI_CODING_AGENT_DIR`, `PI_CONFIG_DIR` -or active `OMP_PROFILE` is followed rather than guessed at. The table lists each client's -default; an override always wins. +Paths honor each client's own environment override where it has one. For OMP, +`OMP_PROFILE` wins over `PI_PROFILE` by presence, even when explicitly empty. A named profile +uses `PI_CONFIG_DIR` as its root and ignores `PI_CODING_AGENT_DIR`; without a named profile, +`PI_CODING_AGENT_DIR` wins. Relocated `HERMES_HOME`, `KIMI_CODE_HOME`, and `XDG_CONFIG_HOME` +paths are likewise followed rather than guessed at. The table lists each client's default. OpenClaw has several, and they do different jobs. `OPENCLAW_CONFIG_PATH` selects the file; `OPENCLAW_STATE_DIR`, `OPENCLAW_PROFILE` and `OPENCLAW_HOME` select the state diff --git a/docs-site/src/content/docs/ja/reference/cli/agents.md b/docs-site/src/content/docs/ja/reference/cli/agents.md index 783e274529..224be41e8c 100644 --- a/docs-site/src/content/docs/ja/reference/cli/agents.md +++ b/docs-site/src/content/docs/ja/reference/cli/agents.md @@ -133,15 +133,15 @@ Grok Build モデル フェンスを管理および適用します。 |旗 |アクション | | --- | --- | -| `--client ` |必須。クライアント言語を選択します: opencode のキー付き `provider` オブジェクトまたは Pi の `providers` 配列。 | +| `--client ` |必須。クライアントの設定形式を選択します。 | | `--json` |構成 JSON のみを標準出力に出力するため、リダイレクトはバイト正確な出力をキャプチャします。 `--out` 書き込みメモを含むすべての診断は stderr に送られます。 | | `--out ` |設定を `` に書き込みます。既存のファイルの置き換えを拒否します。 | | `--force` | `--out` が既存のファイルを置き換えることを許可します。 | ```bash ocx export --client opencode # config plus destination, merge warning, and counts -ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff -ocx export --client omp --json > omp-models.yml # OMP models.yml provider block +ocx export --client pi --json > pi-models.json # JSON document for a pipe or a diff +ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` @@ -152,6 +152,10 @@ ocx export --client opencode --out ~/opencodex-opencode.json | `opencode` | `~/.config/opencode/opencode.json` (設定すると `XDG_CONFIG_HOME` が勝ち) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | なし - ブロックにリテラル `opencodex-loopback` が入ります | | `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | なし - loopback placeholder | +| `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | +| `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | +| `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | なし - loopback placeholder | +| `gajae` | `~/.gjc/agent/models.yml` | `gajae-models.yaml` | `OPENCODEX_GAJAE_API_KEY` | opencode は `{env:OPENCODEX_OPENCODE_API_KEY}` を補間します。opencodex が生成する Pi のエクスポートには環境変数が不要で、リテラルのプレースホルダー `opencodex-loopback` が入ります。この値は必須です。Pi はモデル リストを構築する際に `apiKey` を解決し、既存の設定に未設定の環境変数参照がある場合はプロバイダー全体を隠すためです。ループバックでは、生成されたプレースホルダーをプロキシが検査することはありません。 diff --git a/docs-site/src/content/docs/ko/reference/cli/agents.md b/docs-site/src/content/docs/ko/reference/cli/agents.md index c45aea4674..241d4ba6f0 100644 --- a/docs-site/src/content/docs/ko/reference/cli/agents.md +++ b/docs-site/src/content/docs/ko/reference/cli/agents.md @@ -139,15 +139,15 @@ Grok Build model fence를 관리하고 적용합니다. | 플래그 | 동작 | | --- | --- | -| `--client ` | 필수입니다. 클라이언트 방식을 선택합니다. opencode의 keyed `provider` object 또는 Pi의 `providers` array입니다. | +| `--client ` | 필수입니다. 클라이언트 설정 형식을 선택합니다. | | `--json` | config JSON만 stdout에 출력하므로, redirect가 byte-exact 출력을 캡처합니다. `--out` write note를 포함한 모든 진단 메시지는 stderr로 갑니다. | | `--out ` | config를 ``에 씁니다. 기존 파일이 있으면 덮어쓰지 않습니다. | | `--force` | `--out`이 기존 파일을 덮어쓰도록 허용합니다. | ```bash ocx export --client opencode # config plus destination, merge warning, and counts -ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff -ocx export --client omp --json > omp-models.yml # OMP models.yml provider block +ocx export --client pi --json > pi-models.json # JSON document for a pipe or a diff +ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` @@ -158,6 +158,10 @@ ocx export --client opencode --out ~/opencodex-opencode.json | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME`이 설정되어 있으면 우선합니다) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | 없음 - 블록에 리터럴 `opencodex-loopback`이 들어갑니다 | | `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | 없음 - loopback placeholder | +| `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | +| `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | +| `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | 없음 - loopback placeholder | +| `gajae` | `~/.gjc/agent/models.yml` | `gajae-models.yaml` | `OPENCODEX_GAJAE_API_KEY` | opencode는 `{env:OPENCODEX_OPENCODE_API_KEY}`를 보간합니다. opencodex가 생성한 Pi 블록에는 환경 변수가 필요 없으며, 리터럴 placeholder인 `opencodex-loopback`이 들어갑니다. 이 값은 필수입니다. Pi는 모델 목록을 만들 때 `apiKey`를 해석하고, 기존 config에 설정되지 않은 env 참조가 있으면 provider 전체를 숨기기 때문입니다. 루프백에서 proxy는 생성된 placeholder를 검사하지 않습니다. diff --git a/docs-site/src/content/docs/reference/cli/agents.md b/docs-site/src/content/docs/reference/cli/agents.md index 3b23b95a2d..cdf973bf74 100644 --- a/docs-site/src/content/docs/reference/cli/agents.md +++ b/docs-site/src/content/docs/reference/cli/agents.md @@ -158,14 +158,14 @@ models Codex can currently see. | Flag | Action | | --- | --- | | `--client ` | Required. Selects the client config dialect. | -| `--json` | Print only the generated config bytes on stdout, so a redirect captures byte-exact output. Every diagnostic, including the `--out` write note, goes to stderr. | -| `--out ` | Write the config to ``. Refuses to replace an existing file. | +| `--json` | Print the generated document as JSON on stdout for scripts. This is JSON even when the selected client's native format is YAML, TOML, or JSON5. | +| `--out ` | Write the client's native config format to ``. Refuses to replace an existing file. | | `--force` | Allow `--out` to replace an existing file. | ```bash ocx export --client opencode # config plus destination, merge warning, and counts -ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff -ocx export --client omp --json > omp-models.yml # OMP models.yml provider block +ocx export --client pi --json > pi-models.json # JSON document for a pipe or a diff +ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` @@ -177,7 +177,7 @@ client applies its own defaults for those). | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME` wins when set) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | none — the block carries the literal `opencodex-loopback` | -| `omp` | `~/.omp/agent/models.yml` (`OMP_PROFILE`, `PI_CONFIG_DIR`, and `PI_CODING_AGENT_DIR` are honored) | `omp-models.yaml` | none — loopback placeholder | +| `omp` | `~/.omp/agent/models.yml` (`OMP_PROFILE` wins over `PI_PROFILE`, even when empty; named profiles use `PI_CONFIG_DIR` and ignore `PI_CODING_AGENT_DIR`, while the default profile lets `PI_CODING_AGENT_DIR` win) | `omp-models.yaml` | none — loopback placeholder | | `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | | `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | | `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | none — loopback placeholder | diff --git a/docs-site/src/content/docs/ru/reference/cli/agents.md b/docs-site/src/content/docs/ru/reference/cli/agents.md index 6f69806235..a63462091f 100644 --- a/docs-site/src/content/docs/ru/reference/cli/agents.md +++ b/docs-site/src/content/docs/ru/reference/cli/agents.md @@ -164,15 +164,15 @@ override, но файлы на диске никогда не меняются. | Флаг | Действие | | --- | --- | -| `--client ` | Обязателен. Выбирает клиентский диалект: keyed-объект `provider` у opencode или массив `providers` у Pi. | +| `--client ` | Обязателен. Выбирает формат конфигурации клиента. | | `--json` | Печатать только JSON-конфиг в stdout, чтобы redirect сохранял побайтно точный вывод. Вся диагностика, включая заметку о записи через `--out`, идёт в stderr. | | `--out ` | Записать конфиг в ``. Перезаписывать существующий файл не позволит. | | `--force` | Разрешить `--out` заменить существующий файл. | ```bash ocx export --client opencode # config plus destination, merge warning, and counts -ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff -ocx export --client omp --json > omp-models.yml # OMP models.yml provider block +ocx export --client pi --json > pi-models.json # JSON document for a pipe or a diff +ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` @@ -185,6 +185,10 @@ context limit'а (для них клиент применяет собствен | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME` имеет приоритет, если задан) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | нет — блок несёт литерал `opencodex-loopback` | | `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | нет — loopback placeholder | +| `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | +| `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | +| `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | нет — loopback placeholder | +| `gajae` | `~/.gjc/agent/models.yml` | `gajae-models.yaml` | `OPENCODEX_GAJAE_API_KEY` | opencode интерполирует `{env:OPENCODEX_OPENCODE_API_KEY}`. Сгенерированный opencodex экспорт для Pi не требует переменной окружения и несёт литеральную заглушку `opencodex-loopback`. Это значение diff --git a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md index ac29040be0..9a4ba11937 100644 --- a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md +++ b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md @@ -134,15 +134,15 @@ ocx claude desktop import [--apply] Validate and import JSON | 标志 | 动作 | | --- | --- | -| `--client ` | 必需。选择客户端方言:opencode 的带键 `provider` 对象或 Pi 的 `providers` 数组。 | +| `--client ` | 必需。选择客户端配置格式。 | | `--json` | 仅在 stdout 打印配置 JSON,这样重定向即可捕获字节级精确输出。包括 `--out` 写入提示在内的所有诊断信息都会输出到 stderr。 | | `--out ` | 将配置写入 ``。拒绝替换已存在的文件。 | | `--force` | 允许 `--out` 替换已存在的文件。 | ```bash ocx export --client opencode # config plus destination, merge warning, and counts -ocx export --client pi --json > pi-models.json # byte-exact JSON for a pipe or a diff -ocx export --client omp --json > omp-models.yml # OMP models.yml provider block +ocx export --client pi --json > pi-models.json # JSON document for a pipe or a diff +ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` @@ -153,6 +153,10 @@ ocx export --client opencode --out ~/opencodex-opencode.json | `opencode` | `~/.config/opencode/opencode.json`(设置了 `XDG_CONFIG_HOME` 时以其为准) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | 无 - 块中携带字面值 `opencodex-loopback` | | `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | 无 - loopback placeholder | +| `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | +| `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | +| `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | 无 - loopback placeholder | +| `gajae` | `~/.gjc/agent/models.yml` | `gajae-models.yaml` | `OPENCODEX_GAJAE_API_KEY` | opencode 会插值 `{env:OPENCODEX_OPENCODE_API_KEY}`。opencodex 生成的 Pi 导出不需要环境变量,而是携带字面占位值 `opencodex-loopback`。这个值是必需的:Pi 在构建模型列表时会解析 `apiKey`,如果已有配置包含未设置的环境变量引用,它就会隐藏整个 provider。回环上的代理从不校验生成的占位值。 diff --git a/src/cli/export-command.ts b/src/cli/export-command.ts index 64e3587a95..96efbc4c28 100644 --- a/src/cli/export-command.ts +++ b/src/cli/export-command.ts @@ -179,13 +179,13 @@ export async function handleExportCommand(argv: string[], deps: ExportCommandDep // Every serializer already ends with exactly one newline. if (out !== undefined) writeExport(out, text, force); - // stderr, so `--json` stdout stays byte-exact for a redirect. + // stderr, so `--json` stdout stays a standalone JSON document. if (out !== undefined && wantsJson) console.error(`Wrote ${out}`); const degraded = models.filter(model => !hasContextLimit(model)).length; - // `--json` keeps emitting the DOCUMENT at the top level: a script that - // pipes it into a config file must not have to unwrap an envelope we added - // for our own convenience. Format metadata rides in the human lines below. + // `--json` keeps emitting the DOCUMENT at the top level as JSON for scripts; + // `--out` is the path that writes the selected client's native format. + // Format metadata rides in the human lines below. printData(clientConfig, wantsJson, [ text.trimEnd(), "", diff --git a/src/cli/help.ts b/src/cli/help.ts index 79707bed79..4737f9515a 100644 --- a/src/cli/help.ts +++ b/src/cli/help.ts @@ -176,8 +176,8 @@ const helpEntries: Record = { usage: "ocx export --client [--json] [--out ] [--force]", summary: "Print a client config (opencode, Pi, OMP, Hermes, OpenClaw, Kimi Code, Gajae Code) wired to the running proxy.", details: [ - "--json prints only the generated config bytes on stdout, so it is safe to redirect to a file.", - "--out writes the config there and refuses to replace an existing file without --force.", + "--json prints the generated document as JSON on stdout; use --out for the client's native format.", + "--out writes the native config there and refuses to replace an existing file without --force.", "The config never contains a real key; it carries a documented env reference or a non-secret loopback placeholder.", "The destination path is printed for merging by hand — ocx never writes your real client config.", ], diff --git a/src/clients/config-export.ts b/src/clients/config-export.ts index 065308ce0e..794f4bef42 100644 --- a/src/clients/config-export.ts +++ b/src/clients/config-export.ts @@ -174,7 +174,9 @@ const OMP_PROFILE_NAME_RE = /^[a-z0-9][a-z0-9._-]{0,63}$/; const OMP_WINDOWS_RESERVED_PROFILE_RE = /^(?:CON|PRN|AUX|NUL|COM[0-9]|LPT[0-9])(?:\..*)?$/i; function ompProfileName(env: OpencodeLaunchEnv): string | undefined { - const raw = env.OMP_PROFILE?.trim() || env.PI_PROFILE?.trim(); + // OMP_PROFILE wins by presence, even when explicitly empty; PI_PROFILE is + // only the legacy fallback when the canonical variable is undefined. + const raw = env.OMP_PROFILE !== undefined ? env.OMP_PROFILE : env.PI_PROFILE; const profile = raw?.trim(); if (!profile || profile === "default") return undefined; if ( diff --git a/tests/client-config-export.test.ts b/tests/client-config-export.test.ts index 3e85040e17..428700f1ab 100644 --- a/tests/client-config-export.test.ts +++ b/tests/client-config-export.test.ts @@ -476,11 +476,13 @@ describe("EXPORT_CLIENTS registry", () => { expect(EXPORT_CLIENTS.omp.destination({ PI_CONFIG_DIR: "/srv/omp" } as NodeJS.ProcessEnv)).toBe( join("/srv/omp", "agent", "models.yml"), ); + // OMP_PROFILE wins by presence, so an explicit blank selects the default + // profile instead of inheriting a legacy PI_PROFILE. expect(EXPORT_CLIENTS.omp.destination({ OMP_PROFILE: " ", PI_PROFILE: "legacy", } as NodeJS.ProcessEnv)).toBe( - join(homedir(), ".omp", "profiles", "legacy", "agent", "models.yml"), + join(homedir(), ".omp", "agent", "models.yml"), ); }); From ecb6be682f089a2a2273c3af918ce922aca160fb Mon Sep 17 00:00:00 2001 From: n3wr1ch <40690535+n3wr1ch@users.noreply.github.com> Date: Fri, 7 Aug 2026 21:18:40 +0900 Subject: [PATCH 04/10] fix(omp): keep initial integration loopback-only --- .../src/content/docs/guides/integrations.md | 6 ++- .../content/docs/ja/reference/cli/agents.md | 4 +- .../content/docs/ko/reference/cli/agents.md | 4 +- .../src/content/docs/reference/cli/agents.md | 3 +- .../content/docs/ru/reference/cli/agents.md | 9 ++-- .../docs/zh-cn/reference/cli/agents.md | 4 +- src/clients/config-export.ts | 14 ++--- tests/client-config-export.test.ts | 54 ++++++++++++------- tests/management-client-config-route.test.ts | 9 +++- 9 files changed, 66 insertions(+), 41 deletions(-) diff --git a/docs-site/src/content/docs/guides/integrations.md b/docs-site/src/content/docs/guides/integrations.md index 9822b186f7..3d473f4bd7 100644 --- a/docs-site/src/content/docs/guides/integrations.md +++ b/docs-site/src/content/docs/guides/integrations.md @@ -19,8 +19,10 @@ file, and removes it again. Seven clients work this way, each with a switch: Paths honor each client's own environment override where it has one. For OMP, `OMP_PROFILE` wins over `PI_PROFILE` by presence, even when explicitly empty. A named profile uses `PI_CONFIG_DIR` as its root and ignores `PI_CODING_AGENT_DIR`; without a named profile, -`PI_CODING_AGENT_DIR` wins. Relocated `HERMES_HOME`, `KIMI_CODE_HOME`, and `XDG_CONFIG_HOME` -paths are likewise followed rather than guessed at. The table lists each client's default. +`PI_CODING_AGENT_DIR` wins. OMP supports provider-level headers, but this initial integration +is deliberately loopback-only; remote `x-opencodex-api-key` wiring is deferred. Relocated +`HERMES_HOME`, `KIMI_CODE_HOME`, and `XDG_CONFIG_HOME` paths are likewise followed rather than +guessed at. The table lists each client's default. OpenClaw has several, and they do different jobs. `OPENCLAW_CONFIG_PATH` selects the file; `OPENCLAW_STATE_DIR`, `OPENCLAW_PROFILE` and `OPENCLAW_HOME` select the state diff --git a/docs-site/src/content/docs/ja/reference/cli/agents.md b/docs-site/src/content/docs/ja/reference/cli/agents.md index 224be41e8c..d2da34eab2 100644 --- a/docs-site/src/content/docs/ja/reference/cli/agents.md +++ b/docs-site/src/content/docs/ja/reference/cli/agents.md @@ -145,13 +145,13 @@ ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` -`--json` がない場合、JSON が先頭に続き、正規の宛先パス、マージ警告、クライアント固有の起動前ガイダンス、およびコンテキスト制限を省略する行数を含むモデル数が続きます (クライアントはこれらに対して独自のデフォルトを適用します)。 +`--json` がない場合、選択したクライアントのネイティブ形式で生成された設定が先頭に続き、正規の宛先パス、マージ警告、クライアント固有の起動前ガイダンス、およびコンテキスト制限を省略する行数を含むモデル数が続きます (クライアントはこれらに対して独自のデフォルトを適用します)。 |クライアント |正規の宛先 |ダウンロードファイル名 |環境変数 | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (設定すると `XDG_CONFIG_HOME` が勝ち) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | なし - ブロックにリテラル `opencodex-loopback` が入ります | -| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | なし - loopback placeholder | +| `omp` | `~/.omp/agent/models.yml` (デフォルト。空の場合も `OMP_PROFILE` が `PI_PROFILE` より優先されます) | `omp-models.yaml` | なし - リテラル `opencodex-loopback` | | `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | | `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | | `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | なし - loopback placeholder | diff --git a/docs-site/src/content/docs/ko/reference/cli/agents.md b/docs-site/src/content/docs/ko/reference/cli/agents.md index 241d4ba6f0..f66f151270 100644 --- a/docs-site/src/content/docs/ko/reference/cli/agents.md +++ b/docs-site/src/content/docs/ko/reference/cli/agents.md @@ -151,13 +151,13 @@ ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` -`--json`이 없으면 JSON이 먼저 나오고, 그다음 표준 대상 경로, merge 경고, 해당 client에 env 변수가 있는 경우 env export 줄, 그리고 context limit을 생략한 row 수를 포함한 model count가 이어집니다(이 경우 client는 자체 기본값을 적용합니다). +`--json`이 없으면 선택한 client의 네이티브 형식으로 생성된 config가 먼저 나오고, 그다음 표준 대상 경로, merge 경고, 해당 client에 env 변수가 있는 경우 env export 줄, 그리고 context limit을 생략한 row 수를 포함한 model count가 이어집니다(이 경우 client는 자체 기본값을 적용합니다). | 클라이언트 | 표준 대상 경로 | 다운로드 파일명 | 환경 변수 | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME`이 설정되어 있으면 우선합니다) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | 없음 - 블록에 리터럴 `opencodex-loopback`이 들어갑니다 | -| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | 없음 - loopback placeholder | +| `omp` | `~/.omp/agent/models.yml` (기본값. 빈 값이어도 `OMP_PROFILE`이 `PI_PROFILE`보다 우선합니다) | `omp-models.yaml` | 없음 - 리터럴 `opencodex-loopback` | | `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | | `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | | `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | 없음 - loopback placeholder | diff --git a/docs-site/src/content/docs/reference/cli/agents.md b/docs-site/src/content/docs/reference/cli/agents.md index cdf973bf74..d569d4f46e 100644 --- a/docs-site/src/content/docs/reference/cli/agents.md +++ b/docs-site/src/content/docs/reference/cli/agents.md @@ -187,7 +187,8 @@ opencode interpolates `{env:OPENCODEX_OPENCODE_API_KEY}`. The generated Pi and O not require an environment variable: each carries the literal `opencodex-loopback` placeholder. This is load-bearing because both clients resolve `apiKey` while building their model lists and hide the whole provider when an existing config contains an unset env reference. The proxy never -checks the generated placeholder on loopback. +checks the generated placeholder on loopback. OMP supports provider-level headers, but this initial +integration deliberately remains loopback-only; remote `x-opencodex-api-key` wiring is deferred. :::caution[Merge, never replace] `ocx export` never writes your real client config. The destination is printed for you to merge by diff --git a/docs-site/src/content/docs/ru/reference/cli/agents.md b/docs-site/src/content/docs/ru/reference/cli/agents.md index a63462091f..1c2d576511 100644 --- a/docs-site/src/content/docs/ru/reference/cli/agents.md +++ b/docs-site/src/content/docs/ru/reference/cli/agents.md @@ -176,15 +176,16 @@ ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` -Без `--json` сначала идёт JSON, затем канонический путь назначения, предупреждение о merge, -клиентская подсказка перед запуском и количество моделей с указанием, сколько строк не имеют -context limit'а (для них клиент применяет собственные default'ы). +Без `--json` сначала идёт сгенерированная конфигурация в нативном формате выбранного клиента, +затем канонический путь назначения, предупреждение о merge, клиентская подсказка перед запуском +и количество моделей с указанием, сколько строк не имеют context limit'а (для них клиент применяет +собственные default'ы). | Клиент | Канонический путь | Имя скачиваемого файла | Переменная окружения | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME` имеет приоритет, если задан) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | нет — блок несёт литерал `opencodex-loopback` | -| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | нет — loopback placeholder | +| `omp` | `~/.omp/agent/models.yml` (по умолчанию; `OMP_PROFILE` имеет приоритет над `PI_PROFILE`, даже если пуст) | `omp-models.yaml` | нет — литерал `opencodex-loopback` | | `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | | `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | | `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | нет — loopback placeholder | diff --git a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md index 9a4ba11937..422181c2eb 100644 --- a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md +++ b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md @@ -146,13 +146,13 @@ ocx export --client omp --out ./omp-models.yml # native OMP YAML ocx export --client opencode --out ~/opencodex-opencode.json ``` -不使用 `--json` 时,JSON 会先输出,随后是规范目标路径、合并警告、客户端专属的启动前提示,以及一个模型计数,并标明有多少行省略了上下文限制(客户端会对这些项应用自己的默认值)。 +不使用 `--json` 时,会先输出所选客户端原生格式的生成配置,随后是规范目标路径、合并警告、客户端专属的启动前提示,以及一个模型计数,并标明有多少行省略了上下文限制(客户端会对这些项应用自己的默认值)。 | 客户端 | 规范目标路径 | 下载文件名 | 环境变量 | | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json`(设置了 `XDG_CONFIG_HOME` 时以其为准) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | 无 - 块中携带字面值 `opencodex-loopback` | -| `omp` | `~/.omp/agent/models.yml` | `omp-models.yaml` | 无 - loopback placeholder | +| `omp` | `~/.omp/agent/models.yml`(默认路径;即使为空,`OMP_PROFILE` 也优先于 `PI_PROFILE`) | `omp-models.yaml` | 无 - 字面值 `opencodex-loopback` | | `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | | `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | | `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | 无 - loopback placeholder | diff --git a/src/clients/config-export.ts b/src/clients/config-export.ts index 794f4bef42..d874b0c9ff 100644 --- a/src/clients/config-export.ts +++ b/src/clients/config-export.ts @@ -445,14 +445,13 @@ export interface ExportClientSpec { */ buildContribution: BuildContribution; /** - * True when this client can only reach a loopback bind. + * True when the generated integration deliberately supports loopback only. * * `/v1/chat/completions` rejects bearer credentials and requires the * dedicated `x-opencodex-api-key` header (AUTH_MATRIX in - * src/server/auth-cors.ts). A client whose schema has no place to put that - * header therefore cannot authenticate against a remote bind at all — so we - * say so rather than exporting a config that 401s. Same reasoning as the - * Grok managed block's non-loopback refusal. + * src/server/auth-cors.ts). If this exporter cannot safely emit that header, + * it refuses a remote bind rather than generating a config that 401s. Same + * reasoning as the Grok managed block's non-loopback refusal. */ loopbackOnly: boolean; } @@ -1009,12 +1008,13 @@ export const EXPORT_CLIENTS: Record = { filename: "omp-models.yaml", destination: env => ompModelsConfigPath(env), apiKeyEnv: "", - exportHint: "OMP reads credentials from models.yml; loopback needs no key.", + exportHint: "OMP reads a non-secret placeholder from models.yml; loopback needs no key.", build: buildPiClientConfig, format: "yaml", summarize: summarizePi, buildContribution: buildOmpContribution, - // OMP's provider block has no dedicated admission-header field. + // OMP supports provider-level headers, but remote credential wiring is + // intentionally deferred from this initial loopback-only integration. loopbackOnly: true, }, hermes: { diff --git a/tests/client-config-export.test.ts b/tests/client-config-export.test.ts index 428700f1ab..52fa266fc4 100644 --- a/tests/client-config-export.test.ts +++ b/tests/client-config-export.test.ts @@ -1,5 +1,6 @@ import { describe, expect, test } from "bun:test"; -import { homedir } from "node:os"; +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { homedir, tmpdir } from "node:os"; import { join } from "node:path"; import { EXPORT_CLIENTS, @@ -465,25 +466,38 @@ describe("EXPORT_CLIENTS registry", () => { }); test("the OMP destination follows its global agent directory and profile selectors", () => { - expect(EXPORT_CLIENTS.omp.destination({} as NodeJS.ProcessEnv)).toBe( - join(homedir(), ".omp", "agent", "models.yml"), - ); - const profiled = { OMP_PROFILE: "work", PI_CONFIG_DIR: ".custom-omp" } as NodeJS.ProcessEnv; - expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe( - join(homedir(), ".custom-omp", "profiles", "work", "agent", "models.yml"), - ); - expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe(ompModelsConfigPath(profiled)); - expect(EXPORT_CLIENTS.omp.destination({ PI_CONFIG_DIR: "/srv/omp" } as NodeJS.ProcessEnv)).toBe( - join("/srv/omp", "agent", "models.yml"), - ); - // OMP_PROFILE wins by presence, so an explicit blank selects the default - // profile instead of inheriting a legacy PI_PROFILE. - expect(EXPORT_CLIENTS.omp.destination({ - OMP_PROFILE: " ", - PI_PROFILE: "legacy", - } as NodeJS.ProcessEnv)).toBe( - join(homedir(), ".omp", "agent", "models.yml"), - ); + const home = mkdtempSync(join(tmpdir(), "ocx-omp-destination-")); + try { + const defaultAgentDir = join(home, ".omp", "agent"); + expect(ompModelsConfigPath({} as NodeJS.ProcessEnv, home)).toBe(join(defaultAgentDir, "models.yml")); + + mkdirSync(defaultAgentDir, { recursive: true }); + writeFileSync(join(defaultAgentDir, "models.yaml"), "providers: {}\n"); + expect(ompModelsConfigPath({} as NodeJS.ProcessEnv, home)).toBe(join(defaultAgentDir, "models.yaml")); + writeFileSync(join(defaultAgentDir, "models.yml"), "providers: {}\n"); + expect(ompModelsConfigPath({} as NodeJS.ProcessEnv, home)).toBe(join(defaultAgentDir, "models.yml")); + + const configRoot = join(home, "custom-omp"); + const profiled = { OMP_PROFILE: "work", PI_CONFIG_DIR: configRoot } as NodeJS.ProcessEnv; + expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe( + join(configRoot, "profiles", "work", "agent", "models.yml"), + ); + expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe(ompModelsConfigPath(profiled)); + expect(EXPORT_CLIENTS.omp.destination({ PI_CONFIG_DIR: configRoot } as NodeJS.ProcessEnv)).toBe( + join(configRoot, "agent", "models.yml"), + ); + // OMP_PROFILE wins by presence, so an explicit blank selects the default + // profile instead of inheriting a legacy PI_PROFILE. + expect(EXPORT_CLIENTS.omp.destination({ + OMP_PROFILE: " ", + PI_PROFILE: "legacy", + PI_CONFIG_DIR: configRoot, + } as NodeJS.ProcessEnv)).toBe( + join(configRoot, "agent", "models.yml"), + ); + } finally { + rmSync(home, { recursive: true, force: true }); + } }); test("apiKeyEnv and exportHint name the variable the config references", () => { diff --git a/tests/management-client-config-route.test.ts b/tests/management-client-config-route.test.ts index 5b0fa3dad7..93001778bc 100644 --- a/tests/management-client-config-route.test.ts +++ b/tests/management-client-config-route.test.ts @@ -170,8 +170,15 @@ describe("GET /api/client-config", () => { expect(body.text).toContain("providers:"); expect(body.text).toContain("a/m1"); const provider = (body.config as PiGeneratedConfig).providers[OPENCODE_PROVIDER_ID]; - expect(provider.models.map(model => model.id)).toContain("a/m1"); + const routedIds = provider.models + .map(model => model.id) + .filter(id => id.startsWith("a/") || id.startsWith("b/")); + expect(routedIds).toEqual(["a/m1", "a/m2", "b/no-context"]); + expect(provider.models.find(model => model.id === "a/m1")?.contextWindow).toBe(128_000); + expect(provider.models.find(model => model.id === "b/no-context")?.contextWindow).toBeUndefined(); expect(provider.apiKey).toBe(LOOPBACK_API_KEY_PLACEHOLDER); + expect(body.text).not.toContain(REAL_LOOKING_KEY); + expect(JSON.stringify(body.config)).not.toContain(REAL_LOOKING_KEY); }, 15_000); test("counts describe the emitted document, including models without limits", async () => { From 70b03710b492316d2c51e06b1edc6b8ef8d481d9 Mon Sep 17 00:00:00 2001 From: n3wr1ch <40690535+n3wr1ch@users.noreply.github.com> Date: Sat, 8 Aug 2026 08:07:27 +0900 Subject: [PATCH 05/10] docs(omp): clarify loopback export scope --- docs-site/src/content/docs/guides/integrations.md | 15 +++++++++------ .../src/content/docs/ja/reference/cli/agents.md | 2 +- .../src/content/docs/ko/reference/cli/agents.md | 2 +- .../src/content/docs/ru/reference/cli/agents.md | 7 +++---- .../content/docs/zh-cn/reference/cli/agents.md | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/docs-site/src/content/docs/guides/integrations.md b/docs-site/src/content/docs/guides/integrations.md index 3d473f4bd7..3a8d15bdb6 100644 --- a/docs-site/src/content/docs/guides/integrations.md +++ b/docs-site/src/content/docs/guides/integrations.md @@ -80,12 +80,15 @@ changed value and calling it success. You will see the file named and nothing on disk will have moved. Editing that file by hand still works; it is only our automatic rewrite that declines. -**Pi, OMP, Kimi Code and Gajae Code only work against a loopback bind.** None of their config -schemas has a place for the `x-opencodex-api-key` header that a non-loopback bind -requires, so a generated config would simply be rejected — and writing one by hand does -not help, because there is nowhere in the file to put the header either. Reaching a -remote opencodex from these clients is not supported directly; give them loopback access -instead, through an SSH tunnel or a local forwarder that adds the header. +**Pi, Kimi Code and Gajae Code only work against a loopback bind.** Their config schemas +have no place for the `x-opencodex-api-key` header that a non-loopback bind requires, so a +generated config would simply be rejected. Give them loopback access instead, through an +SSH tunnel or a local forwarder that adds the header. + +**The generated OMP integration is also deliberately loopback-only.** OMP does support +provider-level headers, but this initial integration does not emit remote +`x-opencodex-api-key` credential wiring. Manual remote OMP configuration is outside the +managed integration for now. **Kimi Code cannot hold an environment reference,** so its config carries an `opencodex-loopback` placeholder rather than a key. No real credential is ever written diff --git a/docs-site/src/content/docs/ja/reference/cli/agents.md b/docs-site/src/content/docs/ja/reference/cli/agents.md index d2da34eab2..6d346dc099 100644 --- a/docs-site/src/content/docs/ja/reference/cli/agents.md +++ b/docs-site/src/content/docs/ja/reference/cli/agents.md @@ -127,7 +127,7 @@ Grok Build モデル フェンスを管理および適用します。 ### `ocx export --client ` -実行中のプロキシに接続されているクライアント設定を出力します。 opencode と [円周率](/guides/pi/) は環境変数ではなく独自の JSON 設定からプロバイダーを読み取るため、このコマンドは `opencodex` プロバイダー ブロック (ベース URL、モデル リスト、クライアントの環境参照) をシリアル化し、そのファイルにマージできるようにします。 +実行中のプロキシに接続するクライアント設定を出力します。このコマンドは、ベース URL、モデル一覧、およびクライアントに応じた認証情報参照または `opencodex-loopback` プレースホルダーを含む `opencodex` プロバイダーブロックを、選択したクライアントのネイティブ形式でシリアル化します。 プロキシが実行されている必要があります。このコマンドはライブ ポートを解決し、`/api/models` を読み取り、Codex が現在認識できるモデルのみを出力します。 diff --git a/docs-site/src/content/docs/ko/reference/cli/agents.md b/docs-site/src/content/docs/ko/reference/cli/agents.md index f66f151270..b97f74976c 100644 --- a/docs-site/src/content/docs/ko/reference/cli/agents.md +++ b/docs-site/src/content/docs/ko/reference/cli/agents.md @@ -133,7 +133,7 @@ Grok Build model fence를 관리하고 적용합니다. ### `ocx export --client ` -실행 중인 프록시에 연결된 client config를 출력합니다. opencode와 [Pi](/guides/pi/)는 environment variable이 아니라 각자의 JSON config에서 provider를 읽으므로, 이 명령은 `opencodex` provider block, 즉 base URL, model list, 그리고 client의 env reference를 직렬화해서 해당 파일에 병합할 수 있게 해줍니다. +실행 중인 프록시에 연결할 client config를 출력합니다. 이 명령은 base URL, model list, 그리고 client에 따라 credential reference 또는 `opencodex-loopback` placeholder를 포함한 `opencodex` provider block을 선택한 client의 네이티브 형식으로 직렬화합니다. 프록시는 실행 중이어야 합니다. 이 명령은 실제 포트를 확인하고, `/api/models`를 읽고, 현재 Codex가 볼 수 있는 model만 내보냅니다. diff --git a/docs-site/src/content/docs/ru/reference/cli/agents.md b/docs-site/src/content/docs/ru/reference/cli/agents.md index 1c2d576511..acaf703417 100644 --- a/docs-site/src/content/docs/ru/reference/cli/agents.md +++ b/docs-site/src/content/docs/ru/reference/cli/agents.md @@ -154,10 +154,9 @@ override, но файлы на диске никогда не меняются. ### `ocx export --client ` -Печатает client config, направленный на работающий прокси. opencode и [Pi](/guides/pi/) читают -провайдеров из собственных JSON-конфигов, а не из переменных окружения, поэтому команда -сериализует для вас блок провайдера `opencodex` — base URL, список моделей и env-reference -конкретного клиента. +Печатает client config, направленный на работающий прокси. Команда сериализует блок +провайдера `opencodex` в нативном формате выбранного клиента: base URL, список моделей и, +в зависимости от клиента, credential reference либо заглушку `opencodex-loopback`. Прокси должен быть запущен; команда определяет его живой порт, читает `/api/models` и выводит только те модели, которые сейчас видит Codex. diff --git a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md index 422181c2eb..a8e0bab7b1 100644 --- a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md +++ b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md @@ -128,7 +128,7 @@ ocx claude desktop import [--apply] Validate and import JSON ### `ocx export --client ` -输出连接到正在运行代理的客户端配置。opencode 和 [Pi](/guides/pi/) 不是从环境变量,而是从各自的 JSON 配置中读取 providers,因此此命令会序列化 `opencodex` provider 块——基础 URL、模型列表以及客户端的环境引用——供你合并进那个文件。 +输出连接到正在运行代理的客户端配置。此命令会以所选客户端的原生格式序列化 `opencodex` provider 块,其中包含基础 URL、模型列表,以及该客户端适用的凭据引用或 `opencodex-loopback` 占位值。 代理必须正在运行;该命令会解析其当前端口,读取 `/api/models`,并且只输出 Codex 当前可见的模型。 From 195c88532e6dc205651596e7ebbb39ae8106f56b Mon Sep 17 00:00:00 2001 From: n3wr1ch <40690535+n3wr1ch@users.noreply.github.com> Date: Sun, 9 Aug 2026 07:36:29 +0900 Subject: [PATCH 06/10] docs(omp): add live integration evidence --- .../evidence/omp-live-prompt.png | Bin 0 -> 51196 bytes .../evidence/omp-model-catalog.png | Bin 0 -> 168963 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 devlog/_plan/260806_omp_integration/evidence/omp-live-prompt.png create mode 100644 devlog/_plan/260806_omp_integration/evidence/omp-model-catalog.png diff --git a/devlog/_plan/260806_omp_integration/evidence/omp-live-prompt.png b/devlog/_plan/260806_omp_integration/evidence/omp-live-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..b131f7d9f35b166449bc6fdd2b87210213e8a7ad GIT binary patch literal 51196 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 C-v@sH literal 0 HcmV?d00001 diff --git a/devlog/_plan/260806_omp_integration/evidence/omp-model-catalog.png b/devlog/_plan/260806_omp_integration/evidence/omp-model-catalog.png new file mode 100644 index 0000000000000000000000000000000000000000..4292a63ce2a481fae1e343193350779d47187ebe GIT binary patch literal 168963 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%0DQ|k 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

KUR_%Mt5dZkbCxx0>MR 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 n4!KZkcBQ+1z7-aM- Date: Sun, 9 Aug 2026 08:05:45 +0900 Subject: [PATCH 07/10] fix(omp): align paths and refusal guidance --- .../src/content/docs/guides/integrations.md | 4 ++-- .../content/docs/ja/reference/cli/agents.md | 2 +- .../content/docs/ko/reference/cli/agents.md | 2 +- .../src/content/docs/reference/cli/agents.md | 2 +- .../content/docs/ru/reference/cli/agents.md | 14 ++++++----- .../docs/zh-cn/reference/cli/agents.md | 2 +- src/clients/config-export.ts | 10 ++++---- src/integrations/writer.ts | 2 +- .../client-config-export-new-clients.test.ts | 9 ++++---- tests/client-config-export.test.ts | 22 +++++++++++------- tests/integrations-writer.test.ts | 23 ++++++++++++------- 11 files changed, 52 insertions(+), 40 deletions(-) diff --git a/docs-site/src/content/docs/guides/integrations.md b/docs-site/src/content/docs/guides/integrations.md index 3a8d15bdb6..73214bb379 100644 --- a/docs-site/src/content/docs/guides/integrations.md +++ b/docs-site/src/content/docs/guides/integrations.md @@ -10,7 +10,7 @@ file, and removes it again. Seven clients work this way, each with a switch: |---|---|---|---|---| | OpenCode | `~/.config/opencode/opencode.json` | JSON | next direct launch | `OPENCODEX_OPENCODE_API_KEY` | | Pi | `~/.pi/agent/models.json` | JSON | new sessions | loopback placeholder | -| OMP | `~/.omp/agent/models.yml` | YAML | after restarting OMP | loopback placeholder | +| OMP | `~/.omp/agent/models.yml` | YAML | after restarting OMP | `opencodex-loopback` placeholder | | Hermes | `~/.hermes/config.yaml` | YAML | new sessions | `OPENCODEX_HERMES_API_KEY` | | OpenClaw | `~/.openclaw/openclaw.json` | JSON5 | immediately, on a running gateway | `OPENCODEX_OPENCLAW_API_KEY` | | Kimi Code | `~/.kimi-code/config.toml` | TOML | on restart, or `/reload` | loopback placeholder | @@ -18,7 +18,7 @@ file, and removes it again. Seven clients work this way, each with a switch: Paths honor each client's own environment override where it has one. For OMP, `OMP_PROFILE` wins over `PI_PROFILE` by presence, even when explicitly empty. A named profile -uses `PI_CONFIG_DIR` as its root and ignores `PI_CODING_AGENT_DIR`; without a named profile, +uses `PI_CONFIG_DIR` as a directory name relative to the user's home and ignores `PI_CODING_AGENT_DIR`; without a named profile, `PI_CODING_AGENT_DIR` wins. OMP supports provider-level headers, but this initial integration is deliberately loopback-only; remote `x-opencodex-api-key` wiring is deferred. Relocated `HERMES_HOME`, `KIMI_CODE_HOME`, and `XDG_CONFIG_HOME` paths are likewise followed rather than diff --git a/docs-site/src/content/docs/ja/reference/cli/agents.md b/docs-site/src/content/docs/ja/reference/cli/agents.md index 6d346dc099..0e52fa125f 100644 --- a/docs-site/src/content/docs/ja/reference/cli/agents.md +++ b/docs-site/src/content/docs/ja/reference/cli/agents.md @@ -163,7 +163,7 @@ opencode は `{env:OPENCODEX_OPENCODE_API_KEY}` を補間します。opencodex `ocx export` は実際のクライアント設定を書き込むことはありません。宛先は手動でマージできるように出力されます。`--out` は、`--force` なしで既存のファイルを上書きすることを拒否します。これは、設定を置き換えると、その中にすでに含まれている他のプロバイダー、エージェント、および MCP エントリが破壊されるためです。 ::: -キーはシリアル化されません。opencode の設定には環境参照のみが含まれるためシークレットは環境内に残り、Pi の設定には認証情報ではなくプレースホルダーが入ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。opencode の変数は、プロキシがループバックを超えてバインドする場合にのみ設定します。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 +キーはシリアル化されません。opencode、Hermes、OpenClaw の設定には環境参照のみが含まれるためシークレットは環境内に残り、Pi、OMP、Kimi、Gajae の設定には認証情報ではなくループバック用プレースホルダーが入ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。プロキシがループバックを超えてバインドする場合は、対応する `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY`、または `OPENCODEX_OPENCLAW_API_KEY` を設定します。生成される Pi、OMP、Kimi、Gajae 統合はループバック専用です。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 同じペイロードが `GET /api/client-config` によって提供され、ダッシュボードの [API] タブにレンダリングされるため、CLI、API、および GUI は同じバイトを使用します。 diff --git a/docs-site/src/content/docs/ko/reference/cli/agents.md b/docs-site/src/content/docs/ko/reference/cli/agents.md index b97f74976c..6b63616f66 100644 --- a/docs-site/src/content/docs/ko/reference/cli/agents.md +++ b/docs-site/src/content/docs/ko/reference/cli/agents.md @@ -169,7 +169,7 @@ opencode는 `{env:OPENCODEX_OPENCODE_API_KEY}`를 보간합니다. opencodex가 `ocx export`는 실제 client config를 절대 쓰지 않습니다. 대상 경로는 손으로 병합하라고 출력되며, `--out`은 `--force` 없이 기존 파일을 덮어쓰지 않습니다. config를 바꾸어 덮어쓰면 이미 들어 있던 다른 provider, agent, MCP entry가 사라지기 때문입니다. ::: -어떤 key도 직렬화되지 않습니다. opencode config에는 env reference만 들어가므로 secret은 환경 변수에 남고, Pi config에는 인증 정보가 아니라 placeholder가 들어갑니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. opencode 변수는 proxy가 loopback을 넘어 바인딩할 때만 설정하십시오. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. +어떤 key도 직렬화되지 않습니다. opencode, Hermes, OpenClaw config에는 env reference만 들어가므로 secret은 환경 변수에 남고, Pi, OMP, Kimi, Gajae config에는 인증 정보가 아니라 loopback placeholder가 들어갑니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. proxy가 loopback을 넘어 바인딩할 때는 해당하는 `OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY`, `OPENCODEX_OPENCLAW_API_KEY`를 설정하십시오. 생성되는 Pi, OMP, Kimi, Gajae 통합은 loopback 전용입니다. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. 같은 payload는 `GET /api/client-config`로 제공되고 dashboard의 API 탭에도 렌더링되므로, CLI, API, GUI가 모두 같은 바이트를 사용합니다. diff --git a/docs-site/src/content/docs/reference/cli/agents.md b/docs-site/src/content/docs/reference/cli/agents.md index d569d4f46e..da33134f3b 100644 --- a/docs-site/src/content/docs/reference/cli/agents.md +++ b/docs-site/src/content/docs/reference/cli/agents.md @@ -177,7 +177,7 @@ client applies its own defaults for those). | --- | --- | --- | --- | | `opencode` | `~/.config/opencode/opencode.json` (`XDG_CONFIG_HOME` wins when set) | `opencode.json` | `OPENCODEX_OPENCODE_API_KEY` | | `pi` | `~/.pi/agent/models.json` | `pi-models.json` | none — the block carries the literal `opencodex-loopback` | -| `omp` | `~/.omp/agent/models.yml` (`OMP_PROFILE` wins over `PI_PROFILE`, even when empty; named profiles use `PI_CONFIG_DIR` and ignore `PI_CODING_AGENT_DIR`, while the default profile lets `PI_CODING_AGENT_DIR` win) | `omp-models.yaml` | none — loopback placeholder | +| `omp` | `~/.omp/agent/models.yml` (`OMP_PROFILE` wins over `PI_PROFILE`, even when empty; named profiles use the home-relative `PI_CONFIG_DIR` directory name and ignore `PI_CODING_AGENT_DIR`, while the default profile lets `PI_CODING_AGENT_DIR` win) | `omp-models.yaml` | none — loopback placeholder | | `hermes` | `~/.hermes/config.yaml` | `hermes-config.yaml` | `OPENCODEX_HERMES_API_KEY` | | `openclaw` | `~/.openclaw/openclaw.json` | `openclaw.json5` | `OPENCODEX_OPENCLAW_API_KEY` | | `kimi` | `~/.kimi-code/config.toml` | `kimi-config.toml` | none — loopback placeholder | diff --git a/docs-site/src/content/docs/ru/reference/cli/agents.md b/docs-site/src/content/docs/ru/reference/cli/agents.md index acaf703417..c73ac0205b 100644 --- a/docs-site/src/content/docs/ru/reference/cli/agents.md +++ b/docs-site/src/content/docs/ru/reference/cli/agents.md @@ -203,12 +203,14 @@ Pi не требует переменной окружения и несёт л MCP-записи. ::: -Никакой ключ никогда не сериализуется. Конфиг opencode несёт только env-reference, так что секрет -остаётся в вашем окружении, а конфиг Pi несёт заглушку вместо учётных данных. Loopback-прокси -(`127.0.0.1`, по умолчанию) вообще не требует admission key. Задавайте переменную opencode только -если прокси слушает не на loopback; как выдаются admission key, описано в -[Удалённом доступе](/reference/configuration/#remote-access). Ключи upstream-провайдеров — это -совсем отдельная история и настраиваются в [Провайдерах](/guides/providers/). +Никакой ключ никогда не сериализуется. Конфиги opencode, Hermes и OpenClaw несут только +env-reference, так что секрет остаётся в вашем окружении, а конфиги Pi, OMP, Kimi и Gajae несут +loopback-заглушку вместо учётных данных. Loopback-прокси (`127.0.0.1`, по умолчанию) вообще не +требует admission key. Если прокси слушает не на loopback, задайте соответствующую переменную +`OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY` или `OPENCODEX_OPENCLAW_API_KEY`. +Сгенерированные интеграции Pi, OMP, Kimi и Gajae работают только через loopback. Как выдаются +admission key, описано в [Удалённом доступе](/reference/configuration/#remote-access). Ключи +upstream-провайдеров — это совсем отдельная история и настраиваются в [Провайдерах](/guides/providers/). Тот же payload отдаётся через `GET /api/client-config` и показывается на вкладке API в дашборде, поэтому CLI, API и GUI используют в точности одни и те же байты. diff --git a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md index a8e0bab7b1..065a16d05f 100644 --- a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md +++ b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md @@ -164,7 +164,7 @@ opencode 会插值 `{env:OPENCODEX_OPENCODE_API_KEY}`。opencodex 生成的 Pi `ocx export` 从不写入你的真实客户端配置。该命令只会打印目标路径供你手动合并,而 `--out` 在没有 `--force` 的情况下拒绝覆盖已有文件,因为替换配置会破坏其中已有的其他 providers、agents 和 MCP 条目。 ::: -任何密钥都不会被序列化。opencode 配置里只包含环境引用,因此密钥仍保留在你的环境中;Pi 配置里携带的是占位值而不是任何凭据。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥。只有当代理绑定到环回地址之外时才需要设置 opencode 的那个变量;关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 +任何密钥都不会被序列化。opencode、Hermes 和 OpenClaw 配置里只包含环境引用,因此密钥仍保留在你的环境中;Pi、OMP、Kimi 和 Gajae 配置里携带的是环回占位值而不是任何凭据。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥。当代理绑定到环回地址之外时,请设置对应的 `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY` 或 `OPENCODEX_OPENCLAW_API_KEY`。生成的 Pi、OMP、Kimi 和 Gajae 集成仅支持环回。关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 同一份负载会通过 `GET /api/client-config` 提供,并在仪表盘的 API 选项卡中渲染,因此 CLI、API 和 GUI 使用的是同一字节内容。 diff --git a/src/clients/config-export.ts b/src/clients/config-export.ts index d874b0c9ff..b5a4e386ba 100644 --- a/src/clients/config-export.ts +++ b/src/clients/config-export.ts @@ -198,12 +198,10 @@ export function ompAgentDir(env: OpencodeLaunchEnv = process.env, home: string = const override = env.PI_CODING_AGENT_DIR?.trim(); if (override) return absoluteClientPath(override, home, "PI_CODING_AGENT_DIR"); } - const configDir = env.PI_CONFIG_DIR?.trim(); - const root = configDir - ? (isAbsolute(configDir) || configDir === "~" || configDir.startsWith("~/") || configDir.startsWith("~\\") - ? absoluteClientPath(configDir, home, "PI_CONFIG_DIR") - : join(home, configDir)) - : join(home, ".omp"); + // OMP treats PI_CONFIG_DIR as a directory name relative to the user's home, + // even when the value starts with `/` or `~`. Mirror that path.join contract + // exactly instead of assigning those values different filesystem semantics. + const root = join(home, env.PI_CONFIG_DIR || ".omp"); return profile ? join(root, "profiles", profile, "agent") : join(root, "agent"); } diff --git a/src/integrations/writer.ts b/src/integrations/writer.ts index 3e9ce1f7dc..bdfd41aa96 100644 --- a/src/integrations/writer.ts +++ b/src/integrations/writer.ts @@ -233,7 +233,7 @@ export function applyIntegration(input: IntegrationWriteInput): WriteOutcome { } if (isLoopbackOnly(clientId) && !isLoopbackHostname(input.config.hostname)) { return refuse(clientId, "non_loopback", classified.state, - `${clientId} has nowhere to put the admission header a non-loopback bind requires, so a generated config would be rejected — and writing one by hand would not help either. Give it loopback access instead, through a tunnel or a local forwarder.`); + `The generated ${clientId} integration is loopback-only and does not emit the admission header a non-loopback bind requires. Give it loopback access instead, through a tunnel or a local forwarder.`); } if (classified.state === "conflict") { return refuse(clientId, "conflict", "conflict", diff --git a/tests/client-config-export-new-clients.test.ts b/tests/client-config-export-new-clients.test.ts index d509338050..81003fb5a5 100644 --- a/tests/client-config-export-new-clients.test.ts +++ b/tests/client-config-export-new-clients.test.ts @@ -57,11 +57,10 @@ function ctx(config: OcxConfig = LOOPBACK): ExportContext { } describe("no secret reaches a client config", () => { - test("a client is loopback-only exactly when it has nowhere to put the admission header", () => { - // /v1/chat/completions rejects bearer credentials and requires the - // dedicated x-opencodex-api-key header (AUTH_MATRIX in auth-cors.ts), so a - // client whose schema has no header field cannot authenticate remotely at - // all. Saying so beats exporting a config that 401s. + test("the generated client support policy identifies every loopback-only integration", () => { + // Pi, Kimi and Gajae cannot emit the dedicated admission header. OMP can + // carry provider headers, but remote credential wiring is deliberately + // deferred from this initial generated integration. const loopbackOnly = EXPORT_CLIENT_IDS.filter(id => EXPORT_CLIENTS[id].loopbackOnly); expect(loopbackOnly).toEqual(["pi", "omp", "kimi", "gajae"]); }); diff --git a/tests/client-config-export.test.ts b/tests/client-config-export.test.ts index 52fa266fc4..defce6a8a7 100644 --- a/tests/client-config-export.test.ts +++ b/tests/client-config-export.test.ts @@ -3,6 +3,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { homedir, tmpdir } from "node:os"; import { join } from "node:path"; import { + ClientPathError, EXPORT_CLIENTS, EXPORT_CLIENT_IDS, OPENCODE_API_KEY_ENV, @@ -477,24 +478,29 @@ describe("EXPORT_CLIENTS registry", () => { writeFileSync(join(defaultAgentDir, "models.yml"), "providers: {}\n"); expect(ompModelsConfigPath({} as NodeJS.ProcessEnv, home)).toBe(join(defaultAgentDir, "models.yml")); - const configRoot = join(home, "custom-omp"); - const profiled = { OMP_PROFILE: "work", PI_CONFIG_DIR: configRoot } as NodeJS.ProcessEnv; - expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe( + const configDir = "custom-omp"; + const configRoot = join(home, configDir); + const profiled = { OMP_PROFILE: "work", PI_CONFIG_DIR: configDir } as NodeJS.ProcessEnv; + expect(ompModelsConfigPath(profiled, home)).toBe( join(configRoot, "profiles", "work", "agent", "models.yml"), ); - expect(EXPORT_CLIENTS.omp.destination(profiled)).toBe(ompModelsConfigPath(profiled)); - expect(EXPORT_CLIENTS.omp.destination({ PI_CONFIG_DIR: configRoot } as NodeJS.ProcessEnv)).toBe( + expect(ompModelsConfigPath({ PI_CONFIG_DIR: configDir } as NodeJS.ProcessEnv, home)).toBe( join(configRoot, "agent", "models.yml"), ); + expect(ompModelsConfigPath({ PI_PROFILE: "legacy", PI_CONFIG_DIR: configDir } as NodeJS.ProcessEnv, home)).toBe( + join(configRoot, "profiles", "legacy", "agent", "models.yml"), + ); // OMP_PROFILE wins by presence, so an explicit blank selects the default // profile instead of inheriting a legacy PI_PROFILE. - expect(EXPORT_CLIENTS.omp.destination({ + expect(ompModelsConfigPath({ OMP_PROFILE: " ", PI_PROFILE: "legacy", - PI_CONFIG_DIR: configRoot, - } as NodeJS.ProcessEnv)).toBe( + PI_CONFIG_DIR: configDir, + } as NodeJS.ProcessEnv, home)).toBe( join(configRoot, "agent", "models.yml"), ); + expect(() => ompModelsConfigPath({ OMP_PROFILE: ".." } as NodeJS.ProcessEnv, home)).toThrow(ClientPathError); + expect(() => ompModelsConfigPath({ OMP_PROFILE: "NUL.txt" } as NodeJS.ProcessEnv, home)).toThrow(ClientPathError); } finally { rmSync(home, { recursive: true, force: true }); } diff --git a/tests/integrations-writer.test.ts b/tests/integrations-writer.test.ts index 8906477000..7e4f84b09c 100644 --- a/tests/integrations-writer.test.ts +++ b/tests/integrations-writer.test.ts @@ -148,14 +148,21 @@ describe("apply", () => { expect(readFileSync(configPath, "utf8")).toBe("{{{ not yaml\n"); }); - test("refuses a loopback-only client on a remote bind", () => { - mkdirSync(join(home, ".gjc"), { recursive: true }); - const result = applyIntegration(input({ - clientId: "gajae", - config: { ...CONFIG, hostname: "0.0.0.0" } as OcxConfig, - })); - expect(result.ok).toBe(false); - if (!result.ok) expect(result.reason).toBe("non_loopback"); + test("refuses a loopback-only client on a remote bind without denying manual OMP headers", () => { + for (const clientId of ["gajae", "omp"] as const) { + const spec = INTEGRATION_CLIENTS[clientId]; + mkdirSync(spec.detectDir(TEST_ENV, home), { recursive: true }); + const result = applyIntegration(input({ + clientId, + config: { ...CONFIG, hostname: "0.0.0.0" } as OcxConfig, + })); + expect(result.ok).toBe(false); + if (!result.ok) { + expect(result.reason).toBe("non_loopback"); + expect(result.message).toContain(`generated ${clientId} integration is loopback-only`); + expect(result.message).not.toContain("writing one by hand would not help"); + } + } }); test("a write failure reports the snapshot rather than claiming success", () => { From 60d2edc34490694fd93ae92b84e6158c5ce35f89 Mon Sep 17 00:00:00 2001 From: Wibias <37517432+Wibias@users.noreply.github.com> Date: Sun, 9 Aug 2026 02:12:37 +0200 Subject: [PATCH 08/10] test(omp): cover remaining path contract cases --- tests/omp-path-contract.test.ts | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/omp-path-contract.test.ts diff --git a/tests/omp-path-contract.test.ts b/tests/omp-path-contract.test.ts new file mode 100644 index 0000000000..fbff0682a5 --- /dev/null +++ b/tests/omp-path-contract.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, test } from "bun:test"; +import { mkdtempSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { ompModelsConfigPath } from "../src/clients/config-export"; + +describe("OMP path contract", () => { + test("keeps PI_CONFIG_DIR home-relative for slash and tilde prefixes", () => { + const home = mkdtempSync(join(tmpdir(), "ocx-omp-path-contract-")); + try { + expect(ompModelsConfigPath({ PI_CONFIG_DIR: "/custom-omp" } as NodeJS.ProcessEnv, home)).toBe( + join(home, "/custom-omp", "agent", "models.yml"), + ); + expect(ompModelsConfigPath({ PI_CONFIG_DIR: "~/.custom-omp" } as NodeJS.ProcessEnv, home)).toBe( + join(home, "~/.custom-omp", "agent", "models.yml"), + ); + } finally { + rmSync(home, { recursive: true, force: true }); + } + }); + + test("ignores PI_CODING_AGENT_DIR when an OMP profile is active", () => { + const home = mkdtempSync(join(tmpdir(), "ocx-omp-profile-contract-")); + try { + expect(ompModelsConfigPath({ + OMP_PROFILE: "work", + PI_CONFIG_DIR: "custom-omp", + PI_CODING_AGENT_DIR: join(home, "wrong-agent"), + } as NodeJS.ProcessEnv, home)).toBe( + join(home, "custom-omp", "profiles", "work", "agent", "models.yml"), + ); + } finally { + rmSync(home, { recursive: true, force: true }); + } + }); +}); From eae6ff466fe061aa3615d6e88635f369e47cbdee Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Sun, 9 Aug 2026 00:30:53 +0000 Subject: [PATCH 09/10] fix: apply CodeRabbit auto-fixes Fixed 10 file(s) based on 3 unresolved review comments. Co-authored-by: CodeRabbit --- docs-site/src/content/docs/ja/reference/cli/agents.md | 2 +- docs-site/src/content/docs/ko/reference/cli/agents.md | 2 +- docs-site/src/content/docs/ru/reference/cli/agents.md | 8 ++++---- docs-site/src/content/docs/zh-cn/reference/cli/agents.md | 2 +- gui/src/i18n/de.ts | 2 +- gui/src/i18n/en.ts | 2 +- gui/src/i18n/ja.ts | 2 +- gui/src/i18n/ko.ts | 2 +- gui/src/i18n/ru.ts | 2 +- gui/src/i18n/zh.ts | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs-site/src/content/docs/ja/reference/cli/agents.md b/docs-site/src/content/docs/ja/reference/cli/agents.md index 0e52fa125f..1bcefa5007 100644 --- a/docs-site/src/content/docs/ja/reference/cli/agents.md +++ b/docs-site/src/content/docs/ja/reference/cli/agents.md @@ -163,7 +163,7 @@ opencode は `{env:OPENCODEX_OPENCODE_API_KEY}` を補間します。opencodex `ocx export` は実際のクライアント設定を書き込むことはありません。宛先は手動でマージできるように出力されます。`--out` は、`--force` なしで既存のファイルを上書きすることを拒否します。これは、設定を置き換えると、その中にすでに含まれている他のプロバイダー、エージェント、および MCP エントリが破壊されるためです。 ::: -キーはシリアル化されません。opencode、Hermes、OpenClaw の設定には環境参照のみが含まれるためシークレットは環境内に残り、Pi、OMP、Kimi、Gajae の設定には認証情報ではなくループバック用プレースホルダーが入ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。プロキシがループバックを超えてバインドする場合は、対応する `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY`、または `OPENCODEX_OPENCLAW_API_KEY` を設定します。生成される Pi、OMP、Kimi、Gajae 統合はループバック専用です。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 +キーはシリアル化されません。opencode、Hermes、OpenClaw、Gajae の設定には環境参照のみが含まれるためシークレットは環境内に残り、Pi、OMP、Kimi の設定には認証情報ではなくループバック用プレースホルダーが入ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。プロキシがループバックを超えてバインドする場合は、対応する `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY`、`OPENCODEX_OPENCLAW_API_KEY`、または `OPENCODEX_GAJAE_API_KEY` を設定します。生成される Pi、OMP、Kimi 統合はループバック専用です。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 同じペイロードが `GET /api/client-config` によって提供され、ダッシュボードの [API] タブにレンダリングされるため、CLI、API、および GUI は同じバイトを使用します。 diff --git a/docs-site/src/content/docs/ko/reference/cli/agents.md b/docs-site/src/content/docs/ko/reference/cli/agents.md index 6b63616f66..52fd9aa5f6 100644 --- a/docs-site/src/content/docs/ko/reference/cli/agents.md +++ b/docs-site/src/content/docs/ko/reference/cli/agents.md @@ -169,7 +169,7 @@ opencode는 `{env:OPENCODEX_OPENCODE_API_KEY}`를 보간합니다. opencodex가 `ocx export`는 실제 client config를 절대 쓰지 않습니다. 대상 경로는 손으로 병합하라고 출력되며, `--out`은 `--force` 없이 기존 파일을 덮어쓰지 않습니다. config를 바꾸어 덮어쓰면 이미 들어 있던 다른 provider, agent, MCP entry가 사라지기 때문입니다. ::: -어떤 key도 직렬화되지 않습니다. opencode, Hermes, OpenClaw config에는 env reference만 들어가므로 secret은 환경 변수에 남고, Pi, OMP, Kimi, Gajae config에는 인증 정보가 아니라 loopback placeholder가 들어갑니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. proxy가 loopback을 넘어 바인딩할 때는 해당하는 `OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY`, `OPENCODEX_OPENCLAW_API_KEY`를 설정하십시오. 생성되는 Pi, OMP, Kimi, Gajae 통합은 loopback 전용입니다. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. +어떤 key도 직렬화되지 않습니다. opencode, Hermes, OpenClaw, Gajae config에는 env reference만 들어가므로 secret은 환경 변수에 남고, Pi, OMP, Kimi config에는 인증 정보가 아니라 loopback placeholder가 들어갑니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. proxy가 loopback을 넘어 바인딩할 때는 해당하는 `OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY`, `OPENCODEX_OPENCLAW_API_KEY`, `OPENCODEX_GAJAE_API_KEY`를 설정하십시오. 생성되는 Pi, OMP, Kimi 통합은 loopback 전용입니다. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. 같은 payload는 `GET /api/client-config`로 제공되고 dashboard의 API 탭에도 렌더링되므로, CLI, API, GUI가 모두 같은 바이트를 사용합니다. diff --git a/docs-site/src/content/docs/ru/reference/cli/agents.md b/docs-site/src/content/docs/ru/reference/cli/agents.md index c73ac0205b..18cb3fcfbe 100644 --- a/docs-site/src/content/docs/ru/reference/cli/agents.md +++ b/docs-site/src/content/docs/ru/reference/cli/agents.md @@ -203,12 +203,12 @@ Pi не требует переменной окружения и несёт л MCP-записи. ::: -Никакой ключ никогда не сериализуется. Конфиги opencode, Hermes и OpenClaw несут только -env-reference, так что секрет остаётся в вашем окружении, а конфиги Pi, OMP, Kimi и Gajae несут +Никакой ключ никогда не сериализуется. Конфиги opencode, Hermes, OpenClaw и Gajae несут только +env-reference, так что секрет остаётся в вашем окружении, а конфиги Pi, OMP и Kimi несут loopback-заглушку вместо учётных данных. Loopback-прокси (`127.0.0.1`, по умолчанию) вообще не требует admission key. Если прокси слушает не на loopback, задайте соответствующую переменную -`OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY` или `OPENCODEX_OPENCLAW_API_KEY`. -Сгенерированные интеграции Pi, OMP, Kimi и Gajae работают только через loopback. Как выдаются +`OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY`, `OPENCODEX_OPENCLAW_API_KEY` или `OPENCODEX_GAJAE_API_KEY`. +Сгенерированные интеграции Pi, OMP и Kimi работают только через loopback. Как выдаются admission key, описано в [Удалённом доступе](/reference/configuration/#remote-access). Ключи upstream-провайдеров — это совсем отдельная история и настраиваются в [Провайдерах](/guides/providers/). diff --git a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md index 065a16d05f..0f95bbdb87 100644 --- a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md +++ b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md @@ -164,7 +164,7 @@ opencode 会插值 `{env:OPENCODEX_OPENCODE_API_KEY}`。opencodex 生成的 Pi `ocx export` 从不写入你的真实客户端配置。该命令只会打印目标路径供你手动合并,而 `--out` 在没有 `--force` 的情况下拒绝覆盖已有文件,因为替换配置会破坏其中已有的其他 providers、agents 和 MCP 条目。 ::: -任何密钥都不会被序列化。opencode、Hermes 和 OpenClaw 配置里只包含环境引用,因此密钥仍保留在你的环境中;Pi、OMP、Kimi 和 Gajae 配置里携带的是环回占位值而不是任何凭据。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥。当代理绑定到环回地址之外时,请设置对应的 `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY` 或 `OPENCODEX_OPENCLAW_API_KEY`。生成的 Pi、OMP、Kimi 和 Gajae 集成仅支持环回。关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 +任何密钥都不会被序列化。opencode、Hermes、OpenClaw 和 Gajae 配置里只包含环境引用,因此密钥仍保留在你的环境中;Pi、OMP 和 Kimi 配置里携带的是环回占位值而不是任何凭据。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥。当代理绑定到环回地址之外时,请设置对应的 `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY`、`OPENCODEX_OPENCLAW_API_KEY` 或 `OPENCODEX_GAJAE_API_KEY`。生成的 Pi、OMP 和 Kimi 集成仅支持环回。关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 同一份负载会通过 `GET /api/client-config` 提供,并在仪表盘的 API 选项卡中渲染,因此 CLI、API 和 GUI 使用的是同一字节内容。 diff --git a/gui/src/i18n/de.ts b/gui/src/i18n/de.ts index fa7f261978..61654250f4 100644 --- a/gui/src/i18n/de.ts +++ b/gui/src/i18n/de.ts @@ -854,7 +854,7 @@ export const de: Record = { "integrations.error.conflict": "Die Konfiguration wurde geändert, nachdem opencodex sie geschrieben hatte. Es wurde nichts entfernt.", "integrations.error.unsafe": "Die Konfiguration kann nicht sicher geändert werden.", "integrations.error.generic": "Die Integrationsänderung ist fehlgeschlagen. Der vorherige Zustand wurde beibehalten.", - "integrations.error.nonLoopback": "{client} erreicht nur einen Proxy auf localhost. In seiner Konfiguration ist kein Platz für den Header, den eine Remote-Bindung verlangt — von Hand geschrieben hilft es also ebenso wenig. Ermöglichen Sie stattdessen Loopback-Zugriff, etwa über einen Tunnel oder lokalen Forwarder.", + "integrations.error.nonLoopback": "Die generierte {client}-Integration funktioniert nur über Loopback. Ermöglichen Sie Loopback-Zugriff über einen Tunnel oder lokalen Forwarder.", "integrations.status.installed": "Installiert", "integrations.status.notInstalled": "Nicht installiert", "integrations.status.appliedAt": "Angewendet", diff --git a/gui/src/i18n/en.ts b/gui/src/i18n/en.ts index 6f1d6bbbf6..9ad07b2852 100644 --- a/gui/src/i18n/en.ts +++ b/gui/src/i18n/en.ts @@ -1309,7 +1309,7 @@ export const en = { "integrations.error.conflict": "The config changed after opencodex wrote it. Nothing was removed.", "integrations.error.unsafe": "The config cannot be changed safely.", "integrations.error.generic": "The integration change failed. Your previous state was kept.", - "integrations.error.nonLoopback": "{client} can only reach a proxy on localhost — its config has nowhere to put the admission header a remote bind requires, so writing one by hand would not help either. Give it loopback access instead, through a tunnel or a local forwarder.", + "integrations.error.nonLoopback": "The generated {client} integration is loopback-only. Give it loopback access through a tunnel or a local forwarder.", "integrations.status.installed": "Installed", "integrations.status.notInstalled": "Not installed", "integrations.status.appliedAt": "Applied", diff --git a/gui/src/i18n/ja.ts b/gui/src/i18n/ja.ts index 83664d7589..d7a194131b 100644 --- a/gui/src/i18n/ja.ts +++ b/gui/src/i18n/ja.ts @@ -1257,7 +1257,7 @@ export const ja: Record = { "integrations.error.conflict": "opencodex の書き込み後に設定が変更されました。何も削除していません。", "integrations.error.unsafe": "設定を安全に変更できません。", "integrations.error.generic": "連携の変更に失敗しました。以前の状態は保持されています。", - "integrations.error.nonLoopback": "{client} は localhost のプロキシにしか接続できません。リモートバインドに必要な認証ヘッダーを置く場所が設定ファイルになく、手動で書いても同じです。トンネルやローカルフォワーダーで loopback 経路を用意してください。", + "integrations.error.nonLoopback": "生成された {client} 連携は loopback 専用です。トンネルやローカルフォワーダーで loopback 経路を用意してください。", "integrations.status.installed": "インストール済み", "integrations.status.notInstalled": "未インストール", "integrations.status.appliedAt": "適用", diff --git a/gui/src/i18n/ko.ts b/gui/src/i18n/ko.ts index cdb8b41230..d8542a4121 100644 --- a/gui/src/i18n/ko.ts +++ b/gui/src/i18n/ko.ts @@ -878,7 +878,7 @@ export const ko: Record = { "integrations.error.conflict": "opencodex가 쓴 뒤 설정이 변경되었습니다. 아무 내용도 제거하지 않았습니다.", "integrations.error.unsafe": "설정을 안전하게 변경할 수 없습니다.", "integrations.error.generic": "연동 변경에 실패했습니다. 이전 상태는 유지되었습니다.", - "integrations.error.nonLoopback": "{client}은(는) localhost 프록시에만 연결할 수 있습니다. 원격 바인드에 필요한 인증 헤더를 넣을 자리가 설정 파일에 없어 직접 작성해도 마찬가지입니다. 터널이나 로컬 포워더로 loopback 경로를 열어주세요.", + "integrations.error.nonLoopback": "생성된 {client} 연동은 loopback 전용입니다. 터널이나 로컬 포워더로 loopback 경로를 열어주세요.", "integrations.status.installed": "설치 감지됨", "integrations.status.notInstalled": "설치되지 않음", "integrations.status.appliedAt": "적용", diff --git a/gui/src/i18n/ru.ts b/gui/src/i18n/ru.ts index 4941e40a55..0d9c99f4e6 100644 --- a/gui/src/i18n/ru.ts +++ b/gui/src/i18n/ru.ts @@ -1299,7 +1299,7 @@ export const ru: Record = { "integrations.error.conflict": "После записи opencodex конфигурация изменилась. Ничего не было удалено.", "integrations.error.unsafe": "Конфигурацию нельзя изменить безопасно.", "integrations.error.generic": "Изменить интеграцию не удалось. Предыдущее состояние сохранено.", - "integrations.error.nonLoopback": "{client} может обращаться только к прокси на localhost: в его конфигурации негде разместить заголовок, который требуется при удалённой привязке, поэтому ручная настройка тоже не поможет. Обеспечьте доступ через loopback — туннелем или локальным форвардером.", + "integrations.error.nonLoopback": "Сгенерированная интеграция {client} работает только через loopback. Обеспечьте доступ через loopback — туннелем или локальным форвардером.", "integrations.status.installed": "Установлен", "integrations.status.notInstalled": "Не установлен", "integrations.status.appliedAt": "Применено", diff --git a/gui/src/i18n/zh.ts b/gui/src/i18n/zh.ts index cd9fc19711..bf710a75cb 100644 --- a/gui/src/i18n/zh.ts +++ b/gui/src/i18n/zh.ts @@ -871,7 +871,7 @@ export const zh: Record = { "integrations.error.conflict": "opencodex 写入后配置又发生了更改。未移除任何内容。", "integrations.error.unsafe": "无法安全地更改配置。", "integrations.error.generic": "集成更改失败。已保留之前的状态。", - "integrations.error.nonLoopback": "{client} 只能连接 localhost 上的代理:其配置没有位置放置远程绑定所需的准入标头,手动编写同样无效。请改用隧道或本地转发器提供 loopback 访问。", + "integrations.error.nonLoopback": "生成的 {client} 集成仅支持环回。请通过隧道或本地转发器提供 loopback 访问。", "integrations.status.installed": "已安装", "integrations.status.notInstalled": "未安装", "integrations.status.appliedAt": "已应用", From 6db1c8260fe8903f6729d9e4f2576c11d99790ca Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Sun, 9 Aug 2026 00:38:56 +0000 Subject: [PATCH 10/10] fix: apply CodeRabbit auto-fixes Fixed 4 file(s) based on 3 unresolved review comments. Co-authored-by: CodeRabbit --- .../src/content/docs/ja/reference/cli/agents.md | 2 +- .../src/content/docs/ko/reference/cli/agents.md | 2 +- .../src/content/docs/ru/reference/cli/agents.md | 12 +++++++----- .../src/content/docs/zh-cn/reference/cli/agents.md | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docs-site/src/content/docs/ja/reference/cli/agents.md b/docs-site/src/content/docs/ja/reference/cli/agents.md index 1bcefa5007..203644d96a 100644 --- a/docs-site/src/content/docs/ja/reference/cli/agents.md +++ b/docs-site/src/content/docs/ja/reference/cli/agents.md @@ -163,7 +163,7 @@ opencode は `{env:OPENCODEX_OPENCODE_API_KEY}` を補間します。opencodex `ocx export` は実際のクライアント設定を書き込むことはありません。宛先は手動でマージできるように出力されます。`--out` は、`--force` なしで既存のファイルを上書きすることを拒否します。これは、設定を置き換えると、その中にすでに含まれている他のプロバイダー、エージェント、および MCP エントリが破壊されるためです。 ::: -キーはシリアル化されません。opencode、Hermes、OpenClaw、Gajae の設定には環境参照のみが含まれるためシークレットは環境内に残り、Pi、OMP、Kimi の設定には認証情報ではなくループバック用プレースホルダーが入ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。プロキシがループバックを超えてバインドする場合は、対応する `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY`、`OPENCODEX_OPENCLAW_API_KEY`、または `OPENCODEX_GAJAE_API_KEY` を設定します。生成される Pi、OMP、Kimi 統合はループバック専用です。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 +キーはシリアル化されません。opencode、Hermes、OpenClaw の設定には環境参照のみが含まれるためシークレットは環境内に残り、Pi、OMP、Kimi の設定には認証情報ではなくループバック用プレースホルダーが入ります。ループバック プロキシ (`127.0.0.1`、デフォルト) にはアドミッション キーはまったく必要ありません。プロキシがループバックを超えてバインドする場合は、対応する `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY`、または `OPENCODEX_OPENCLAW_API_KEY` を設定します。生成される Pi、OMP、Kimi、Gajae 統合はループバック専用です。Gajae の設定には `OPENCODEX_GAJAE_API_KEY` への環境参照が含まれますが、厳格なスキーマには header フィールドがないため、この統合は loopback-only のままです。アドミッションキーの発行方法については、[リモートアクセス](/reference/configuration/#remote-access) を参照してください。上流プロバイダー自体のキーは完全に別のものであり、[プロバイダー](/guides/providers/) ごとに構成されます。 同じペイロードが `GET /api/client-config` によって提供され、ダッシュボードの [API] タブにレンダリングされるため、CLI、API、および GUI は同じバイトを使用します。 diff --git a/docs-site/src/content/docs/ko/reference/cli/agents.md b/docs-site/src/content/docs/ko/reference/cli/agents.md index 52fd9aa5f6..5a692cad10 100644 --- a/docs-site/src/content/docs/ko/reference/cli/agents.md +++ b/docs-site/src/content/docs/ko/reference/cli/agents.md @@ -169,7 +169,7 @@ opencode는 `{env:OPENCODEX_OPENCODE_API_KEY}`를 보간합니다. opencodex가 `ocx export`는 실제 client config를 절대 쓰지 않습니다. 대상 경로는 손으로 병합하라고 출력되며, `--out`은 `--force` 없이 기존 파일을 덮어쓰지 않습니다. config를 바꾸어 덮어쓰면 이미 들어 있던 다른 provider, agent, MCP entry가 사라지기 때문입니다. ::: -어떤 key도 직렬화되지 않습니다. opencode, Hermes, OpenClaw, Gajae config에는 env reference만 들어가므로 secret은 환경 변수에 남고, Pi, OMP, Kimi config에는 인증 정보가 아니라 loopback placeholder가 들어갑니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. proxy가 loopback을 넘어 바인딩할 때는 해당하는 `OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY`, `OPENCODEX_OPENCLAW_API_KEY`, `OPENCODEX_GAJAE_API_KEY`를 설정하십시오. 생성되는 Pi, OMP, Kimi 통합은 loopback 전용입니다. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. +어떤 key도 직렬화되지 않습니다. opencode, Hermes, OpenClaw config에는 env reference만 들어가므로 secret은 환경 변수에 남고, Pi, OMP, Kimi config에는 인증 정보가 아니라 loopback placeholder가 들어갑니다. loopback proxy(`127.0.0.1`, 기본값)는 admission key가 전혀 필요하지 않습니다. proxy가 loopback을 넘어 바인딩할 때는 해당하는 `OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY`, `OPENCODEX_OPENCLAW_API_KEY`를 설정하십시오. 생성되는 Pi, OMP, Kimi, Gajae 통합은 loopback 전용입니다. Gajae config에는 `OPENCODEX_GAJAE_API_KEY`에 대한 env reference가 들어가지만 엄격한 schema에 header 필드가 없어 이 통합은 loopback-only로 유지됩니다. admission key가 어떻게 발급되는지는 [Remote access](/reference/configuration/#remote-access)를 보십시오. upstream provider 자체의 key는 완전히 별개의 것으로, 각 [Providers](/guides/providers/)에 맞게 설정합니다. 같은 payload는 `GET /api/client-config`로 제공되고 dashboard의 API 탭에도 렌더링되므로, CLI, API, GUI가 모두 같은 바이트를 사용합니다. diff --git a/docs-site/src/content/docs/ru/reference/cli/agents.md b/docs-site/src/content/docs/ru/reference/cli/agents.md index 18cb3fcfbe..91333443c1 100644 --- a/docs-site/src/content/docs/ru/reference/cli/agents.md +++ b/docs-site/src/content/docs/ru/reference/cli/agents.md @@ -203,14 +203,16 @@ Pi не требует переменной окружения и несёт л MCP-записи. ::: -Никакой ключ никогда не сериализуется. Конфиги opencode, Hermes, OpenClaw и Gajae несут только +Никакой ключ никогда не сериализуется. Конфиги opencode, Hermes и OpenClaw несут только env-reference, так что секрет остаётся в вашем окружении, а конфиги Pi, OMP и Kimi несут loopback-заглушку вместо учётных данных. Loopback-прокси (`127.0.0.1`, по умолчанию) вообще не требует admission key. Если прокси слушает не на loopback, задайте соответствующую переменную -`OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY`, `OPENCODEX_OPENCLAW_API_KEY` или `OPENCODEX_GAJAE_API_KEY`. -Сгенерированные интеграции Pi, OMP и Kimi работают только через loopback. Как выдаются -admission key, описано в [Удалённом доступе](/reference/configuration/#remote-access). Ключи -upstream-провайдеров — это совсем отдельная история и настраиваются в [Провайдерах](/guides/providers/). +`OPENCODEX_OPENCODE_API_KEY`, `OPENCODEX_HERMES_API_KEY` или `OPENCODEX_OPENCLAW_API_KEY`. +Сгенерированные интеграции Pi, OMP, Kimi и Gajae работают только через loopback. Gajae несёт +env-reference на `OPENCODEX_GAJAE_API_KEY`, но строгая схема не имеет поля header, поэтому +интеграция остаётся loopback-only. Как выдаются admission key, описано в +[Удалённом доступе](/reference/configuration/#remote-access). Ключи upstream-провайдеров — это +совсем отдельная история и настраиваются в [Провайдерах](/guides/providers/). Тот же payload отдаётся через `GET /api/client-config` и показывается на вкладке API в дашборде, поэтому CLI, API и GUI используют в точности одни и те же байты. diff --git a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md index 0f95bbdb87..b0d12b470b 100644 --- a/docs-site/src/content/docs/zh-cn/reference/cli/agents.md +++ b/docs-site/src/content/docs/zh-cn/reference/cli/agents.md @@ -164,7 +164,7 @@ opencode 会插值 `{env:OPENCODEX_OPENCODE_API_KEY}`。opencodex 生成的 Pi `ocx export` 从不写入你的真实客户端配置。该命令只会打印目标路径供你手动合并,而 `--out` 在没有 `--force` 的情况下拒绝覆盖已有文件,因为替换配置会破坏其中已有的其他 providers、agents 和 MCP 条目。 ::: -任何密钥都不会被序列化。opencode、Hermes、OpenClaw 和 Gajae 配置里只包含环境引用,因此密钥仍保留在你的环境中;Pi、OMP 和 Kimi 配置里携带的是环回占位值而不是任何凭据。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥。当代理绑定到环回地址之外时,请设置对应的 `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY`、`OPENCODEX_OPENCLAW_API_KEY` 或 `OPENCODEX_GAJAE_API_KEY`。生成的 Pi、OMP 和 Kimi 集成仅支持环回。关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 +任何密钥都不会被序列化。opencode、Hermes 和 OpenClaw 配置里只包含环境引用,因此密钥仍保留在你的环境中;Pi、OMP 和 Kimi 配置里携带的是环回占位值而不是任何凭据。环回代理(`127.0.0.1`,默认值)根本不需要准入密钥。当代理绑定到环回地址之外时,请设置对应的 `OPENCODEX_OPENCODE_API_KEY`、`OPENCODEX_HERMES_API_KEY` 或 `OPENCODEX_OPENCLAW_API_KEY`。生成的 Pi、OMP、Kimi 和 Gajae 集成仅支持环回。Gajae 配置里包含对 `OPENCODEX_GAJAE_API_KEY` 的环境引用,但其严格的 schema 没有 header 字段,因此该集成仍保持 loopback-only。关于准入密钥如何签发,请参见 [远程访问](/reference/configuration/#remote-access)。上游 providers 自身的密钥则完全是另一回事,需要按 [Providers](/guides/providers/) 单独配置。 同一份负载会通过 `GET /api/client-config` 提供,并在仪表盘的 API 选项卡中渲染,因此 CLI、API 和 GUI 使用的是同一字节内容。