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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion docs-site/src/content/docs/guides/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: Connect opencodex to OpenCode, Pi, Gentle Shell, OMP, Hermes, OpenC
---

The **Connect** page writes opencodex's provider block into a client's own config
file, and removes it again. Twenty clients work this way, each with a switch:
file, and removes it again. Each client below has its own switch:

| Client | Config file | Format | When the change takes effect | Credential |
|---|---|---|---|---|
Expand All @@ -24,6 +24,9 @@ file, and removes it again. Twenty clients work this way, each with a switch:
| Raycast | `~/.config/raycast/ai/providers.yaml` | YAML | immediately on save — Raycast watches the file | none — loopback only |
| omo (Pi / senpi) | `~/.omo/agent/models.json` | JSON | new sessions | loopback placeholder |
| Qoder | `settings.json` in `$QODER_CONFIG_DIR`, default `~/.qoder` | JSON | new sessions | loopback placeholder |
| Qoder CN | `settings.json` in `$QODERCN_CONFIG_DIR`, default `~/.qoder-cn` | JSON | new sessions | loopback placeholder |
| WorkBuddy (CN) | `~/.workbuddy/models.json` | JSON | auto reload / new sessions | loopback placeholder |
| WorkBuddy AI | `~/.workbuddy-ai/models.json` | JSON | auto reload / new sessions | loopback placeholder |
| Cline CLI | `~/.cline/data/settings/providers.json` and sibling `models.json` | JSON pair | after stopping and restarting Cline | loopback placeholder |
| Kilo | first existing `kilo.jsonc`, `kilo.json`, `opencode.jsonc`, `opencode.json`, or `config.json` under `~/.config/kilo` | JSONC | new sessions | `OPENCODEX_KILO_API_KEY` |
| Command Code | `~/.commandcode/providers.json` (on Windows with the default home: use `HOME ?? USERPROFILE` only if nonblank and Windows-absolute, otherwise `homedir()`; a separately supplied home is preserved; append `.commandcode\providers.json`) | JSON | next launch of Command Code | none — keyless loopback (`apiKey: false`) |
Expand Down Expand Up @@ -65,6 +68,40 @@ This integration retains Pi’s loopback-only export policy and stores no real A
[omo (Codex / LazyCodex) role models](#omo-codex--lazycodex-role-models). OpenCode-based omo
(oh-my-opencode) keeps its own config under OpenCode; opencodex does not read or write it.

### Qoder CN and WorkBuddy editions

In **Connect**, enable **Qoder CN**, **WorkBuddy (CN)** or **WorkBuddy AI**, then choose
an OpenCodex model in the client's custom-model picker. The proxy must stay running.
The first enable saves a snapshot; disable removes only the generated contribution,
and Undo restores the snapshot. Existing models and unrelated settings remain intact.
These are separate connections from Global Qoder and from each other.

The same operations are available through the CLI (replace `workbuddy` with
`workbuddy-ai` or `qoder-cn` for the other editions):

```bash
ocx integration client enable --client workbuddy
ocx export --client workbuddy --json
ocx integration client disable --client workbuddy
```

Qoder CN honors `QODERCN_CONFIG_DIR`. Both WorkBuddy editions honor their native
`WORKBUDDY_CONFIG_DIR`, then `CODEBUDDY_CONFIG_DIR`; unset overrides keep the regional
roots in the table. Overrides must be absolute, `~`, or start with `~/` or `~\`. WorkBuddy's legacy
array configuration and its object-form `models` list are both supported. If an existing
`availableModels` restriction excludes OpenCodex models, remove that restriction in
WorkBuddy before enabling. Project-level settings can override user-level models.

Connections require an unauthenticated loopback listener; no upstream credentials are
copied into these clients. WorkBuddy receives the full Chat Completions URL and the
capabilities declared by the OpenCodex catalog. Restart the client or start a new session
if its model picker has not reloaded yet. Configuration/lifecycle tests do not establish
end-to-end compatibility with every upstream model or every client release.

Doubao Desktop and Devin currently have no verified arbitrary-provider configuration
contract in this integration. They have no enable switch; adding a local JSON file alone
would not make their model pickers consume it.

Comment thread
Flowershangfromthebranches marked this conversation as resolved.
Resolved
Qoder IDE / qodercli supports export and managed configuration through the Dashboard and CLI:

```bash
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/ja/guides/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: クライアント統合
description: ダッシュボードから opencodex を OpenCode、Pi、OMP、Hermes、OpenClaw、Kimi Code、gjc、DeepSeek Harness、MiniMax Code、ZCode、Prime Agent、Aside、Raycast、omo、Cline CLI、Kilo、Command Code、Factory Droid に接続します。クライアントごとにスイッチがあり、書き込み前には必ずバックアップを取ります。
---

**接続** タブは、各クライアントの設定ファイルに opencodex のプロバイダーブロックを書き込み、必要に応じて削除します。次の 18 クライアントは、それぞれのスイッチで管理できます。
**接続** タブは、各クライアントの設定ファイルに opencodex のプロバイダーブロックを書き込み、必要に応じて削除します。以下のクライアントは、それぞれのスイッチで管理できます。

| クライアント | 設定ファイル | 形式 | 変更が反映される時点 | 認証情報 |
|---|---|---|---|---|
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/ko/guides/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 연동
description: 대시보드에서 OpenCode, Pi, OMP, Hermes, OpenClaw, Kimi Code, gjc, DeepSeek Harness, MiniMax Code, ZCode, Prime Agent, Aside, Raycast, omo, Cline CLI, Kilo, Command Code와 Factory Droid를 opencodex에 연결합니다. 클라이언트마다 스위치가 하나씩 있으며 기록 전마다 백업합니다.
---

**연결** 페이지는 클라이언트의 설정 파일에 opencodex 프로바이더 블록을 쓰고 다시 제거합니다. 다음 18개 클라이언트는 각각 스위치로 관리합니다.
**연결** 페이지는 클라이언트의 설정 파일에 opencodex 프로바이더 블록을 쓰고 다시 제거합니다. 다음 클라이언트는 각각 스위치로 관리합니다.

| 클라이언트 | 설정 파일 | 형식 | 변경 적용 시점 | 자격 증명 |
|---|---|---|---|---|
Expand Down
4 changes: 2 additions & 2 deletions docs-site/src/content/docs/ru/guides/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ description: Подключайте opencodex к OpenCode, Pi, OMP, Hermes, Open
---

Вкладка **Подключение** записывает блок провайдера opencodex в собственный файл
конфигурации клиента и при необходимости удаляет его. Так работают восемнадцать
клиентов, у каждого свой переключатель:
конфигурации клиента и при необходимости удаляет его. Так работают следующие
клиенты, у каждого свой переключатель:

| Клиент | Файл конфигурации | Формат | Когда изменение начинает действовать | Учётные данные |
|---|---|---|---|---|
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/zh-cn/guides/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 集成
description: 从仪表盘将 opencodex 连接到 OpenCode、Pi、OMP、Hermes、OpenClaw、Kimi Code、gjc、DeepSeek Harness、MiniMax Code、ZCode、Prime Agent、Aside、Raycast、omo、Cline CLI、Kilo、Command Code 和 Factory Droid;每个客户端都有独立开关,且每次写入前都会备份。
---

**连接** 标签页可将 opencodex 的提供商配置块写入客户端自己的配置文件,也可再次移除。以下 18 个客户端都采用这种方式,各有独立开关:
**连接** 标签页可将 opencodex 的提供商配置块写入客户端自己的配置文件,也可再次移除。以下客户端都采用这种方式,各有独立开关:

| 客户端 | 配置文件 | 格式 | 变更生效时间 | 凭据 |
|---|---|---|---|---|
Expand Down
3 changes: 3 additions & 0 deletions gui/src/app-routing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,9 @@ export const INTEGRATION_TAB_HASHES = [
"integrations/kilo",
"integrations/droid",
"integrations/qoder",
"integrations/qoder-cn",
"integrations/workbuddy",
"integrations/workbuddy-ai",
] as const;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@
* with EXPORT_CLIENT_IDS by hand; adding a client server-side renders no row
* until this tuple changes.
*/
export const CLIENTS = ["qoder", "opencode", "pi", "omp", "hermes", "openclaw", "kimi", "gajae", "dsh", "mcode", "zcode", "commandcode", "prime", "aside", "raycast", "omo", "cline", "kilo", "droid", "gentle-shell"] as const;
export const CLIENTS = ["qoder", "qoder-cn", "workbuddy", "workbuddy-ai", "opencode", "pi", "omp", "hermes", "openclaw", "kimi", "gajae", "dsh", "mcode", "zcode", "commandcode", "prime", "aside", "raycast", "omo", "cline", "kilo", "droid", "gentle-shell"] as const;
export type ExportClientId = (typeof CLIENTS)[number];

export const CLIENT_LABEL_KEYS = {
qoder: "api.clientConfig.clientQoder",
"qoder-cn": "integrations.tab.qoderCn",
"workbuddy": "integrations.tab.workbuddy",
"workbuddy-ai": "integrations.tab.workbuddyAi",
opencode: "api.clientConfig.clientOpencode",
pi: "api.clientConfig.clientPi",
"gentle-shell": "integrations.tab.gentleShell",
Expand Down Expand Up @@ -67,6 +70,7 @@ export const CLIENT_LABEL_KEYS = {
*/
export const CLIENT_MARKS: Partial<Record<ExportClientId, string>> = {
qoder: "/provider-icons/qoder.svg",
"qoder-cn": "/provider-icons/qoder.svg",
opencode: "/provider-icons/opencode.svg",
pi: "/provider-icons/pi.svg",
omp: "/provider-icons/oh-my-pi.svg",
Expand Down
3 changes: 3 additions & 0 deletions gui/src/components/integration-marks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ export const INTEGRATION_MARKS: Record<OverviewClientId, string | null> = {
kilo: CLIENT_MARKS.kilo ?? null,
droid: CLIENT_MARKS.droid ?? null,
qoder: CLIENT_MARKS.qoder ?? null,
"qoder-cn": CLIENT_MARKS["qoder-cn"] ?? null,
workbuddy: null,
"workbuddy-ai": null,
};

/**
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1646,6 +1646,12 @@ export const de: Record<TKey, string> = {
"integrations.tab.aside": "Aside",
"integrations.tab.raycast": "Raycast",
"integrations.tab.omo": "omo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "Verwaltet OpenCodex-Modelle in ~/.qoder-cn/settings.json. Erfordert Loopback-Zugriff. Andere Einstellungen bleiben erhalten; Rückgängig stellt den Snapshot wieder her.",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "Verwaltet OpenCodex-Modelle in ~/.workbuddy/models.json. Erfordert Loopback-Zugriff. Andere Einstellungen bleiben erhalten; Rückgängig stellt den Snapshot wieder her.",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "Verwaltet OpenCodex-Modelle in ~/.workbuddy-ai/models.json. Erfordert Loopback-Zugriff. Andere Einstellungen bleiben erhalten; Rückgängig stellt den Snapshot wieder her.",
"integrations.tab.qoder": "Qoder",
"api.clientConfig.clientQoder": "Qoder",
"integrations.semantics.qoder": "Verwaltet OpenCodex-Anbieter und eigene Modelle in ~/.qoder/settings.json. Erfordert Loopback-Zugriff. Andere Einstellungen bleiben erhalten; Rückgängig stellt den Snapshot wieder her.",
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2232,6 +2232,12 @@ export const en = {
"integrations.tab.aside": "Aside",
"integrations.tab.raycast": "Raycast",
"integrations.tab.omo": "omo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "Manages OpenCodex models in ~/.qoder-cn/settings.json. Requires loopback access. Other settings are preserved; Undo restores the snapshot.",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "Manages OpenCodex models in ~/.workbuddy/models.json. Requires loopback access. Other settings are preserved; Undo restores the snapshot.",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "Manages OpenCodex models in ~/.workbuddy-ai/models.json. Requires loopback access. Other settings are preserved; Undo restores the snapshot.",
"integrations.tab.qoder": "Qoder",
"api.clientConfig.clientQoder": "Qoder",
"integrations.semantics.qoder": "Manages OpenCodex providers and custom models in ~/.qoder/settings.json. Requires loopback access. Other settings are preserved; Undo restores the snapshot.",
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2204,6 +2204,12 @@ export const fr: Record<TKey, string> = {
"integrations.tab.aside": "Aside",
"integrations.tab.raycast": "Raycast",
"integrations.tab.omo": "omo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "Gère les modèles OpenCodex dans ~/.qoder-cn/settings.json. Accès local requis. Les autres réglages sont conservés ; Annuler restaure la sauvegarde.",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "Gère les modèles OpenCodex dans ~/.workbuddy/models.json. Accès local requis. Les autres réglages sont conservés ; Annuler restaure la sauvegarde.",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "Gère les modèles OpenCodex dans ~/.workbuddy-ai/models.json. Accès local requis. Les autres réglages sont conservés ; Annuler restaure la sauvegarde.",
"integrations.tab.qoder": "Qoder",
"api.clientConfig.clientQoder": "Qoder",
"integrations.semantics.qoder": "Gère les fournisseurs OpenCodex et les modèles personnalisés dans ~/.qoder/settings.json. Nécessite qu’opencodex soit joignable sur une adresse de bouclage. Les autres paramètres sont conservés ; Annuler restaure la sauvegarde.",
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2099,6 +2099,12 @@ export const ja: Record<TKey, string> = {
"integrations.tab.aside": "Aside",
"integrations.tab.raycast": "Raycast",
"integrations.tab.omo": "omo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "~/.qoder-cn/settings.json の OpenCodex モデルを管理します。ループバック接続が必要です。他の設定を保持し、元に戻すとスナップショットを復元します。",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "~/.workbuddy/models.json の OpenCodex モデルを管理します。ループバック接続が必要です。他の設定を保持し、元に戻すとスナップショットを復元します。",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "~/.workbuddy-ai/models.json の OpenCodex モデルを管理します。ループバック接続が必要です。他の設定を保持し、元に戻すとスナップショットを復元します。",
"integrations.tab.qoder": "Qoder",
"api.clientConfig.clientQoder": "Qoder",
"integrations.semantics.qoder": "~/.qoder/settings.json の OpenCodex プロバイダーとカスタムモデルを管理します。ループバック接続が必要です。他の設定は保持され、元に戻すとスナップショットが復元されます。",
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1690,6 +1690,12 @@ export const ko: Record<TKey, string> = {
"integrations.tab.aside": "Aside",
"integrations.tab.raycast": "Raycast",
"integrations.tab.omo": "omo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "~/.qoder-cn/settings.json에서 OpenCodex 모델을 관리합니다. 루프백 연결이 필요합니다. 다른 설정은 유지되며 실행 취소로 스냅샷을 복원합니다.",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "~/.workbuddy/models.json에서 OpenCodex 모델을 관리합니다. 루프백 연결이 필요합니다. 다른 설정은 유지되며 실행 취소로 스냅샷을 복원합니다.",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "~/.workbuddy-ai/models.json에서 OpenCodex 모델을 관리합니다. 루프백 연결이 필요합니다. 다른 설정은 유지되며 실행 취소로 스냅샷을 복원합니다.",
"integrations.tab.qoder": "Qoder",
"api.clientConfig.clientQoder": "Qoder",
"integrations.semantics.qoder": "~/.qoder/settings.json의 OpenCodex 공급자와 사용자 지정 모델을 관리합니다. 루프백 접근이 필요합니다. 다른 설정은 유지되며 실행 취소 시 스냅샷을 복원합니다.",
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/pt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2218,6 +2218,12 @@ export const pt: Record<TKey, string> = {
"integrations.tab.cline": "Cline CLI",
"integrations.tab.commandcode": "Command Code",
"integrations.tab.kilo": "Kilo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "Gerencia modelos OpenCodex em ~/.qoder-cn/settings.json. Requer acesso local. Outras configurações são preservadas; Desfazer restaura o snapshot.",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "Gerencia modelos OpenCodex em ~/.workbuddy/models.json. Requer acesso local. Outras configurações são preservadas; Desfazer restaura o snapshot.",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "Gerencia modelos OpenCodex em ~/.workbuddy-ai/models.json. Requer acesso local. Outras configurações são preservadas; Desfazer restaura o snapshot.",
"integrations.tab.qoder": "Qoder",
"integrations.tab.droid": "Factory Droid",
"integrations.aside.profilesTitle": "Perfis do Aside",
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2190,6 +2190,12 @@ export const ru: Record<TKey, string> = {
"integrations.tab.aside": "Aside",
"integrations.tab.raycast": "Raycast",
"integrations.tab.omo": "omo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "Управляет моделями OpenCodex в ~/.qoder-cn/settings.json. Требуется loopback. Остальные настройки сохраняются; отмена восстанавливает снимок.",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "Управляет моделями OpenCodex в ~/.workbuddy/models.json. Требуется loopback. Остальные настройки сохраняются; отмена восстанавливает снимок.",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "Управляет моделями OpenCodex в ~/.workbuddy-ai/models.json. Требуется loopback. Остальные настройки сохраняются; отмена восстанавливает снимок.",
"integrations.tab.qoder": "Qoder",
"api.clientConfig.clientQoder": "Qoder",
"integrations.semantics.qoder": "Управляет провайдерами OpenCodex и пользовательскими моделями в ~/.qoder/settings.json. Требуется доступ через loopback. Остальные настройки сохраняются; отмена восстанавливает снимок.",
Expand Down
6 changes: 6 additions & 0 deletions gui/src/i18n/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2217,6 +2217,12 @@ export const tr: Record<TKey, string> = {
"integrations.tab.aside": "Aside",
"integrations.tab.raycast": "Raycast",
"integrations.tab.omo": "omo",
"integrations.tab.qoderCn": "Qoder CN",
"integrations.semantics.qoderCn": "~/.qoder-cn/settings.json içindeki OpenCodex modellerini yönetir. Yerel bağlantı gerekir. Diğer ayarlar korunur; Geri Al anlık görüntüyü geri yükler.",
"integrations.tab.workbuddy": "WorkBuddy (CN)",
"integrations.semantics.workbuddy": "~/.workbuddy/models.json içindeki OpenCodex modellerini yönetir. Yerel bağlantı gerekir. Diğer ayarlar korunur; Geri Al anlık görüntüyü geri yükler.",
"integrations.tab.workbuddyAi": "WorkBuddy AI",
"integrations.semantics.workbuddyAi": "~/.workbuddy-ai/models.json içindeki OpenCodex modellerini yönetir. Yerel bağlantı gerekir. Diğer ayarlar korunur; Geri Al anlık görüntüyü geri yükler.",
"integrations.tab.qoder": "Qoder",
"api.clientConfig.clientQoder": "Qoder",
"integrations.semantics.qoder": "~/.qoder/settings.json içindeki OpenCodex sağlayıcılarını ve özel modelleri yönetir. Loopback erişimi gerektirir. Diğer ayarlar korunur; Geri al, anlık görüntüyü geri yükler.",
Expand Down
Loading
Loading