diff --git a/docs-site/src/content/docs/guides/providers.md b/docs-site/src/content/docs/guides/providers.md
index e14f0d6e0..c71c9c0d1 100644
--- a/docs-site/src/content/docs/guides/providers.md
+++ b/docs-site/src/content/docs/guides/providers.md
@@ -185,7 +185,7 @@ selectors, then retry. Signing in from a machine with no existing `kiro-cli` ses
## 3. API-key catalog
-opencodex ships 53 built-in presets: 42 key-based, seven OAuth, three local, and the default
+opencodex ships 63 built-in presets: 52 key-based, seven OAuth, three local, and the default
ChatGPT-forward preset. The dashboard's **Add provider** picker opens a key provider's dashboard,
validates the key, and stores it. Notable entries:
@@ -212,6 +212,7 @@ validates the key, and stores it. Notable entries:
| Qwen Cloud | Token plan (default): `https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` · Pay as you go: `https://dashscope.aliyuncs.com/compatible-mode/v1` · or Custom |
| Tencent Cloud Coding Plan | `https://api.lkeap.cloud.tencent.com/coding/v3` |
| SiliconFlow | `https://api.siliconflow.cn/v1` |
+| Volcengine Ark · Coding Plan · Agent Plan | `https://ark.cn-beijing.volces.com/api/v3` · `https://ark.cn-beijing.volces.com/api/coding/v3` · `https://ark.cn-beijing.volces.com/api/plan/v3` |
| Xiaomi MiMo | `https://api.xiaomimimo.com/anthropic` |
| Kilo | `https://api.kilo.ai/api/gateway` |
| GitLab Duo | `https://cloud.gitlab.com/ai/v1/proxy/openai/v1` |
@@ -220,6 +221,18 @@ validates the key, and stores it. Notable entries:
Most use the `openai-chat` adapter with a bearer key; a few that expose only an Anthropic-compatible
endpoint (e.g. **Xiaomi MiMo**) use the `anthropic` adapter (`x-api-key`).
+Volcengine Agent Plan uses its native Responses endpoint through `openai-responses`.
+
+> **Three Volcengine billing routes:** `volcengine` is the pay-as-you-go Ark API,
+> `volcengine-coding-plan` consumes Coding Plan quota, and `volcengine-agent-plan` consumes Agent
+> Plan quota. Use the key and endpoint issued for the same product; the ordinary `/api/v3` endpoint
+> can incur pay-as-you-go charges even when a Plan subscription exists.
+> The presets use curated static model catalogs because Ark's `/models` response also includes
+> embedding, image, video, and 3D resources, the Coding gateway returns that same broad catalog,
+> and the Agent Plan gateway has no `/models` resource. Pay-as-you-go defaults to
+> `doubao-seed-2-1-pro-260628`; its curated catalog also includes current DeepSeek and GLM text
+> models. Coding Plan defaults to `ark-code-latest`, while Agent Plan defaults to
+> `deepseek-v4-pro`.
> **Tencent Cloud Coding Plan usage restriction:** Tencent documents this subscription for
> interactive coding tools only. General API automation, custom application backends, and
diff --git a/docs-site/src/content/docs/ja/guides/providers.md b/docs-site/src/content/docs/ja/guides/providers.md
index 67548d50e..098d8a2fe 100644
--- a/docs-site/src/content/docs/ja/guides/providers.md
+++ b/docs-site/src/content/docs/ja/guides/providers.md
@@ -116,7 +116,7 @@ Kiro のログインには Kiro CLI が必要です。`curl -fsSL https://cli.ki
## 3. API キーカタログ
-opencodex v2.7.1 には組み込みプリセットが 50 個含まれています。キー方式 40、OAuth 6、ローカル 3、
+opencodex には組み込みプリセットが 63 個含まれています。キー方式 52、OAuth 7、ローカル 3、
デフォルト ChatGPT 転送プリセット 1 です。ダッシュボードの **Add provider** ピッカーはキー発行ページを開き、
入力したキーを検証した後保存します。主な項目は以下のとおりです:
@@ -143,6 +143,7 @@ opencodex v2.7.1 には組み込みプリセットが 50 個含まれていま
| Qwen Cloud | トークンプラン(デフォルト): `https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` · 従量課金: `https://dashscope.aliyuncs.com/compatible-mode/v1` · またはカスタム |
| Tencent Cloud Coding Plan | `https://api.lkeap.cloud.tencent.com/coding/v3` |
| SiliconFlow | `https://api.siliconflow.cn/v1` |
+| Volcengine Ark · Coding Plan · Agent Plan | `https://ark.cn-beijing.volces.com/api/v3` · `https://ark.cn-beijing.volces.com/api/coding/v3` · `https://ark.cn-beijing.volces.com/api/plan/v3` |
| Xiaomi MiMo | `https://api.xiaomimimo.com/anthropic` |
| Kilo | `https://api.kilo.ai/api/gateway` |
| GitHub Copilot · GitLab Duo | `https://api.githubcopilot.com` · `https://cloud.gitlab.com/ai/v1/proxy/openai/v1` |
@@ -151,6 +152,18 @@ opencodex v2.7.1 には組み込みプリセットが 50 個含まれていま
大半は bearer キーと共に `openai-chat` アダプターを使い、Anthropic 互換エンドポイントのみを公開する一部
(例: **Xiaomi MiMo**)は `anthropic` アダプター(`x-api-key`)を使います。
+Volcengine Agent Plan は `openai-responses` アダプターでネイティブ Responses エンドポイントを使用します。
+
+> **Volcengine の 3 つの課金経路:** `volcengine` は従量課金 Ark API、
+> `volcengine-coding-plan` は Coding Plan の割り当て、`volcengine-agent-plan` は Agent Plan
+> の割り当てを使用します。同じ製品で発行されたキーとエンドポイントを組み合わせてください。
+> Plan 契約があっても通常の `/api/v3` 呼び出しには従量課金が発生する場合があります。
+> 3 つの preset は選別済みの静的モデルカタログを使用します。Ark の `/models` はテキストに加えて
+> Embedding、画像、動画、3D リソースも返し、Coding ゲートウェイも同じ広範なカタログを返します。
+> Agent Plan ゲートウェイには `/models` リソースがありません。従量課金のデフォルトは
+> `doubao-seed-2-1-pro-260628` で、静的カタログには現在の DeepSeek と GLM のテキストモデルも
+> 含まれます。Coding Plan のデフォルトは `ark-code-latest`、Agent Plan は
+> `deepseek-v4-pro` です。
> **Tencent Cloud Coding Plan の利用制限:** Tencent はこのサブスクリプションを対話型
> コーディングツール専用としています。一般的な API 自動化、カスタムアプリのバックエンド、
diff --git a/docs-site/src/content/docs/ko/guides/providers.md b/docs-site/src/content/docs/ko/guides/providers.md
index 8cdae100a..55862dfdd 100644
--- a/docs-site/src/content/docs/ko/guides/providers.md
+++ b/docs-site/src/content/docs/ko/guides/providers.md
@@ -116,7 +116,7 @@ Kiro 로그인에는 Kiro CLI가 필요합니다. `curl -fsSL https://cli.kiro.d
## 3. API 키 카탈로그
-opencodex v2.7.1에는 빌트인 프리셋이 50개 들어 있습니다. 키 방식 40개, OAuth 6개, 로컬 3개,
+opencodex에는 빌트인 프리셋이 63개 들어 있습니다. 키 방식 52개, OAuth 7개, 로컬 3개,
기본 ChatGPT 포워드 프리셋 1개입니다. 대시보드의 **Add provider** 선택기는 키 발급 페이지를 열고,
입력한 키를 검증한 뒤 저장합니다. 주요 항목은 다음과 같습니다:
@@ -143,6 +143,7 @@ opencodex v2.7.1에는 빌트인 프리셋이 50개 들어 있습니다. 키 방
| Qwen Cloud | Token plan(기본): `https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` · 종량제: `https://dashscope.aliyuncs.com/compatible-mode/v1` · 또는 사용자 지정 |
| Tencent Cloud Coding Plan | `https://api.lkeap.cloud.tencent.com/coding/v3` |
| SiliconFlow | `https://api.siliconflow.cn/v1` |
+| Volcengine Ark · Coding Plan · Agent Plan | `https://ark.cn-beijing.volces.com/api/v3` · `https://ark.cn-beijing.volces.com/api/coding/v3` · `https://ark.cn-beijing.volces.com/api/plan/v3` |
| Xiaomi MiMo | `https://api.xiaomimimo.com/anthropic` |
| Kilo | `https://api.kilo.ai/api/gateway` |
| GitHub Copilot · GitLab Duo | `https://api.githubcopilot.com` · `https://cloud.gitlab.com/ai/v1/proxy/openai/v1` |
@@ -151,6 +152,17 @@ opencodex v2.7.1에는 빌트인 프리셋이 50개 들어 있습니다. 키 방
대부분은 bearer 키와 함께 `openai-chat` 어댑터를 사용하며, Anthropic 호환 엔드포인트만 노출하는 일부
(예: **Xiaomi MiMo**)는 `anthropic` 어댑터(`x-api-key`)를 사용합니다.
+Volcengine Agent Plan은 `openai-responses` 어댑터로 네이티브 Responses 엔드포인트를 사용합니다.
+
+> **Volcengine의 세 가지 과금 경로:** `volcengine`은 종량제 Ark API,
+> `volcengine-coding-plan`은 Coding Plan 할당량, `volcengine-agent-plan`은 Agent Plan
+> 할당량을 사용합니다. 같은 상품에서 발급된 키와 엔드포인트를 함께 사용해야 하며, Plan 구독이
+> 있어도 일반 `/api/v3` 엔드포인트 호출에는 종량제 요금이 발생할 수 있습니다.
+> 세 preset은 선별된 정적 모델 카탈로그를 사용합니다. Ark의 `/models`는 텍스트와 함께
+> Embedding, 이미지, 비디오, 3D 리소스도 반환하고 Coding 게이트웨이도 같은 광범위한 카탈로그를
+> 반환합니다. Agent Plan 게이트웨이에는 `/models` 리소스가 없습니다. 종량제 기본값은
+> `doubao-seed-2-1-pro-260628`이며 정적 카탈로그에는 현재 DeepSeek와 GLM 텍스트 모델도
+> 포함됩니다. Coding Plan의 기본값은 `ark-code-latest`, Agent Plan은 `deepseek-v4-pro`입니다.
> **Tencent Cloud Coding Plan 사용 제한:** Tencent는 이 구독을 대화형 코딩 도구 전용으로
> 안내합니다. 일반 API 자동화, 사용자 애플리케이션 백엔드 및 비대화형 일괄 호출은 금지되며
diff --git a/docs-site/src/content/docs/ru/guides/providers.md b/docs-site/src/content/docs/ru/guides/providers.md
index f23e818d8..547e4c1d1 100644
--- a/docs-site/src/content/docs/ru/guides/providers.md
+++ b/docs-site/src/content/docs/ru/guides/providers.md
@@ -126,7 +126,7 @@ OAuth-провайдеры, чьи учётные данные содержат
## 3. Каталог API-ключей
-opencodex поставляется с 53 встроенными пресетами: 42 на основе ключей, семь OAuth, три локальных и
+opencodex поставляется с 63 встроенными пресетами: 52 на основе ключей, семь OAuth, три локальных и
пресет ChatGPT-форварда по умолчанию. Селектор **Add provider** в дашборде открывает страницу
выдачи ключей провайдера, проверяет ключ и сохраняет его. Наиболее заметные записи:
@@ -153,6 +153,7 @@ opencodex поставляется с 53 встроенными пресетам
| Qwen Cloud | Token plan (по умолчанию): `https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` · Pay as you go: `https://dashscope.aliyuncs.com/compatible-mode/v1` · или Custom |
| Tencent Cloud Coding Plan | `https://api.lkeap.cloud.tencent.com/coding/v3` |
| SiliconFlow | `https://api.siliconflow.cn/v1` |
+| Volcengine Ark · Coding Plan · Agent Plan | `https://ark.cn-beijing.volces.com/api/v3` · `https://ark.cn-beijing.volces.com/api/coding/v3` · `https://ark.cn-beijing.volces.com/api/plan/v3` |
| Xiaomi MiMo | `https://api.xiaomimimo.com/anthropic` |
| Kilo | `https://api.kilo.ai/api/gateway` |
| GitLab Duo | `https://cloud.gitlab.com/ai/v1/proxy/openai/v1` |
@@ -162,6 +163,18 @@ opencodex поставляется с 53 встроенными пресетам
Большинство использует адаптер `openai-chat` с bearer-ключом; немногие провайдеры, предоставляющие
только Anthropic-совместимую конечную точку (например, **Xiaomi MiMo**), используют адаптер
`anthropic` (`x-api-key`).
+Volcengine Agent Plan использует нативную конечную точку Responses через адаптер `openai-responses`.
+
+> **Три маршрута тарификации Volcengine:** `volcengine` — Ark API с оплатой по факту,
+> `volcengine-coding-plan` расходует квоту Coding Plan, а `volcengine-agent-plan` — квоту Agent
+> Plan. Используйте ключ и конечную точку одного продукта; обычный `/api/v3` может тарифицироваться
+> отдельно даже при активной подписке Plan.
+> Все три preset используют отобранные статические каталоги моделей. Ark `/models` возвращает
+> текстовые, embedding-, графические, видео- и 3D-ресурсы, а шлюз Coding выдаёт тот же широкий
+> каталог. У шлюза Agent Plan ресурса `/models` нет. Для pay-as-you-go модель по умолчанию —
+> `doubao-seed-2-1-pro-260628`; его статический каталог также включает актуальные текстовые модели
+> DeepSeek и GLM. Для Coding Plan модель по умолчанию — `ark-code-latest`, для Agent Plan —
+> `deepseek-v4-pro`.
> **Ограничение Tencent Cloud Coding Plan:** Tencent разрешает использовать эту подписку только
> в интерактивных инструментах программирования. Автоматизация общего API, серверы пользовательских
diff --git a/docs-site/src/content/docs/zh-cn/guides/providers.md b/docs-site/src/content/docs/zh-cn/guides/providers.md
index b749d3837..d19aec67d 100644
--- a/docs-site/src/content/docs/zh-cn/guides/providers.md
+++ b/docs-site/src/content/docs/zh-cn/guides/providers.md
@@ -108,7 +108,7 @@ Kiro 登录需要 Kiro CLI:使用 `curl -fsSL https://cli.kiro.dev/install | b
## 3. API 密钥目录
-opencodex v2.7.1 内置 50 个预设:40 个密钥预设、6 个 OAuth 预设、3 个本地预设,以及默认的
+opencodex 内置 63 个预设:52 个密钥预设、7 个 OAuth 预设、3 个本地预设,以及默认的
ChatGPT 转发预设。仪表盘的 **Add provider** 选择器会打开密钥提供商的控制台,验证并保存密钥。
主要条目包括:
@@ -135,6 +135,7 @@ ChatGPT 转发预设。仪表盘的 **Add provider** 选择器会打开密钥提
| Qwen Cloud | Token plan(默认): `https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` · 按量付费: `https://dashscope.aliyuncs.com/compatible-mode/v1` · 或自定义 |
| 腾讯云 Coding Plan | `https://api.lkeap.cloud.tencent.com/coding/v3` |
| SiliconFlow | `https://api.siliconflow.cn/v1` |
+| 火山方舟 · Coding Plan · Agent Plan | `https://ark.cn-beijing.volces.com/api/v3` · `https://ark.cn-beijing.volces.com/api/coding/v3` · `https://ark.cn-beijing.volces.com/api/plan/v3` |
| Xiaomi MiMo | `https://api.xiaomimimo.com/anthropic` |
| Kilo | `https://api.kilo.ai/api/gateway` |
| GitHub Copilot · GitLab Duo | `https://api.githubcopilot.com` · `https://cloud.gitlab.com/ai/v1/proxy/openai/v1` |
@@ -142,6 +143,16 @@ ChatGPT 转发预设。仪表盘的 **Add provider** 选择器会打开密钥提
| ……以及更多 | opencode zen、Vercel AI Gateway、Venice、NanoGPT、Synthetic、Qianfan、Alibaba、Parallel、ZenMux、LiteLLM |
大多数使用带 bearer 密钥的 `openai-chat` adapter;少数仅暴露 Anthropic 兼容端点的提供商(例如 **Xiaomi MiMo**)使用 `anthropic` adapter(`x-api-key`)。
+火山方舟 Agent Plan 通过 `openai-responses` adapter 使用原生 Responses 端点。
+
+> **三条火山方舟计费线路:**`volcengine` 是按量付费方舟 API,`volcengine-coding-plan`
+> 消耗 Coding Plan 额度,`volcengine-agent-plan` 消耗 Agent Plan 额度。密钥与端点需要属于
+> 同一产品;已经订阅 Plan 时调用普通 `/api/v3` 端点仍可能产生按量费用。
+> 三个 preset 使用经过筛选的静态模型目录:方舟 `/models` 同时返回文本、Embedding、图片、
+> 视频和 3D 资源,Coding 网关也会返回这份宽泛目录,Agent Plan 网关没有 `/models` 资源。
+> 按量付费默认使用 `doubao-seed-2-1-pro-260628`,静态目录还包含当前 DeepSeek 和 GLM
+> 文本模型。Coding Plan 默认使用 `ark-code-latest`,Agent Plan 默认使用
+> `deepseek-v4-pro`。
> **腾讯云 Coding Plan 使用限制:**腾讯将此订阅限定为交互式编程工具使用。禁止通用 API
> 自动化、自定义应用后端和非交互式批量调用;违规使用可能导致套餐密钥被停用。
diff --git a/gui/src/components/AddProviderModal.tsx b/gui/src/components/AddProviderModal.tsx
index 333971bbb..d723fd401 100644
--- a/gui/src/components/AddProviderModal.tsx
+++ b/gui/src/components/AddProviderModal.tsx
@@ -142,6 +142,7 @@ export default function AddProviderModal({
baseUrl: p.baseUrlChoices?.length
? baseUrlForChoice(p.baseUrlChoices, choiceId, p.baseUrl)
: p.baseUrl,
+ responsesPath: p.responsesPath,
authMode: p.auth,
apiKey: "",
apiKeyTransport: undefined,
diff --git a/gui/src/components/provider-catalog/provider-presets.ts b/gui/src/components/provider-catalog/provider-presets.ts
index dfe07b6ba..36f5231fa 100644
--- a/gui/src/components/provider-catalog/provider-presets.ts
+++ b/gui/src/components/provider-catalog/provider-presets.ts
@@ -15,6 +15,7 @@ export interface CatalogPreset {
label: string;
adapter: string;
baseUrl: string;
+ responsesPath?: string;
defaultModel?: string;
/** "oauth": account login · "forward": ChatGPT passthrough · "key": API key · "local": local scaffold. */
auth: "oauth" | "forward" | "key" | "local";
@@ -67,4 +68,3 @@ export function filterPresets(presets: CatalogPreset[], query: string): CatalogP
if (!q) return presets;
return presets.filter(p => p.label.toLowerCase().includes(q) || p.id.toLowerCase().includes(q));
}
-
diff --git a/gui/src/components/provider-workspace/ProviderDetails.tsx b/gui/src/components/provider-workspace/ProviderDetails.tsx
index e825dcee6..61ad0d096 100644
--- a/gui/src/components/provider-workspace/ProviderDetails.tsx
+++ b/gui/src/components/provider-workspace/ProviderDetails.tsx
@@ -149,7 +149,7 @@ export default function ProviderDetails({
- {formatProviderDisplayName(item.name)}
+ {formatProviderDisplayName(item.name, t)}
{local && {t("modal.badge.local")}}
{!local && free && {t("modal.badge.free")}}
diff --git a/gui/src/components/provider-workspace/ProviderOverviewDashboard.tsx b/gui/src/components/provider-workspace/ProviderOverviewDashboard.tsx
index ee86fab4f..b4d188da5 100644
--- a/gui/src/components/provider-workspace/ProviderOverviewDashboard.tsx
+++ b/gui/src/components/provider-workspace/ProviderOverviewDashboard.tsx
@@ -127,7 +127,7 @@ export default function ProviderOverviewDashboard({
>
- {formatProviderDisplayName(item.name)}
+ {formatProviderDisplayName(item.name, t)}
{localizeAttentionReason(item.reason)}
@@ -155,7 +155,7 @@ export default function ProviderOverviewDashboard({
>
-
{formatProviderDisplayName(item.name)}
+
{formatProviderDisplayName(item.name, t)}
{t("pws.dashboard.checkedAgo", { time: formatRelativeTime(report.updatedAt, timeLabels) })}
@@ -209,7 +209,7 @@ export default function ProviderOverviewDashboard({
onClick={() => onSelectProvider(provider.name)}
>
-
{formatProviderDisplayName(provider.name)}
+
{formatProviderDisplayName(provider.name, t)}
{t("pws.dashboard.requests", { count: formatRequestCount(provider.requests, locale) })}
diff --git a/gui/src/components/provider-workspace/ProviderRail.tsx b/gui/src/components/provider-workspace/ProviderRail.tsx
index 8b896e49d..4079e61a1 100644
--- a/gui/src/components/provider-workspace/ProviderRail.tsx
+++ b/gui/src/components/provider-workspace/ProviderRail.tsx
@@ -75,7 +75,7 @@ export function RailRow({ item, selected, tabbable, modelCount, isDefault, showC
const free = isFreeProvider(item);
const local = isLocalProvider(item);
const status = statusLabel(item, t);
- const displayName = formatProviderDisplayName(item.name);
+ const displayName = formatProviderDisplayName(item.name, t);
const nameTitle = showConfigId ? `${displayName} (${item.name})` : displayName;
const suffix = `${isDefault ? t("pws.rail.suffixDefault") : ""}${local ? t("pws.rail.suffixLocal") : free ? t("pws.rail.suffixFree") : ""}`;
const countLabel = modelCount !== undefined && modelCount > 0
diff --git a/gui/src/components/provider-workspace/ProviderWorkspaceShell.tsx b/gui/src/components/provider-workspace/ProviderWorkspaceShell.tsx
index 23acb434b..56045757b 100644
--- a/gui/src/components/provider-workspace/ProviderWorkspaceShell.tsx
+++ b/gui/src/components/provider-workspace/ProviderWorkspaceShell.tsx
@@ -308,7 +308,7 @@ export default function ProviderWorkspaceShell({
const duplicateDisplayNames = useMemo(() => {
const counts = new Map
();
for (const item of allItems) {
- const label = formatProviderDisplayName(item.name);
+ const label = formatProviderDisplayName(item.name, t);
counts.set(label, (counts.get(label) ?? 0) + 1);
}
const dups = new Set();
@@ -316,7 +316,7 @@ export default function ProviderWorkspaceShell({
if (n > 1) dups.add(label);
}
return dups;
- }, [allItems]);
+ }, [allItems, t]);
if (allItems.length === 0) {
return ;
@@ -479,7 +479,7 @@ export default function ProviderWorkspaceShell({
tabbable={railTabbableName === item.name}
modelCount={modelCounts[item.name]}
isDefault={defaultProvider === item.name}
- showConfigId={duplicateDisplayNames.has(formatProviderDisplayName(item.name))}
+ showConfigId={duplicateDisplayNames.has(formatProviderDisplayName(item.name, t))}
onClick={() => onSelect(item.name)}
onFocus={() => setRailFocusName(item.name)}
/>
@@ -532,7 +532,7 @@ export default function ProviderWorkspaceShell({
onRetryModels: retryModels,
}) ?? (
-
{formatProviderDisplayName(selectedItem.name)}
+
{formatProviderDisplayName(selectedItem.name, t)}
{t("pws.detailComingSoon")}