Skip to content

feat(providers): add Volcengine Ark provider presets - #611

Merged
lidge-jun merged 7 commits into
lidge-jun:devfrom
yrooogerg:feat/volcengine-providers
Aug 1, 2026
Merged

feat(providers): add Volcengine Ark provider presets#611
lidge-jun merged 7 commits into
lidge-jun:devfrom
yrooogerg:feat/volcengine-providers

Conversation

@yrooogerg

@yrooogerg yrooogerg commented Jul 28, 2026

Copy link
Copy Markdown

Summary

  • add first-class presets for Volcengine Ark pay-as-you-go, Coding Plan, and Agent Plan
  • keep the three billing routes explicit so Plan users do not accidentally send traffic to the pay-as-you-go endpoint
  • add registry-derived responsesPath support for the Agent Plan native Responses endpoint
  • provide curated static model catalogs and set doubao-seed-2-1-pro-260628 as the pay-as-you-go default
  • include current DeepSeek and GLM text models in the pay-as-you-go catalog
  • document the providers in English, Simplified Chinese, Japanese, Korean, and Russian
  • add focused registry, routing, adapter, GUI metadata, and reasoning-toggle regression coverage

Why

Volcengine Ark is a major model and cloud provider, particularly for developers using Doubao and China-region model services. A built-in preset removes substantial manual configuration and gives the three products clear billing boundaries:

  • volcengine: https://ark.cn-beijing.volces.com/api/v3
  • volcengine-coding-plan: https://ark.cn-beijing.volces.com/api/coding/v3
  • volcengine-agent-plan: https://ark.cn-beijing.volces.com/api/plan/v3/responses

The ordinary /api/v3 route may incur pay-as-you-go charges even when the user has a Plan subscription, so keeping these as separate provider IDs is important for billing safety.

Model discovery findings

Authenticated, read-only /models probes showed:

  • pay-as-you-go returns an OpenAI-shaped catalog containing 126 resources
  • Coding Plan returns the same broad 126-resource catalog and omits the plan routing alias ark-code-latest
  • Agent Plan returns 404 for /models

The 126-resource catalog mixes chat models with embeddings, image generation, video generation, 3D generation, and historical model versions. Publishing it directly would expose resources that the Codex chat adapter cannot call and models that a Plan subscription may not authorize. The three presets therefore use curated static catalogs with liveModels: false.

A minimal pay-as-you-go smoke request against doubao-seed-2-1-pro-260628 succeeded. The available test key did not include Coding Plan or Agent Plan entitlements: the Coding request returned InvalidSubscription, and the Agent request returned UnsupportedModel. No credential is stored in the repository, test fixtures, or PR content.

Validation

  • bun run typecheck
  • bun run test — 5,705 passed, 0 failed
  • focused Volcengine and registry tests — 36 passed, 0 failed
  • bun run privacy:scan
  • docs build — 141 pages
  • git diff --check

Follow-up opportunities

Volcengine also has strong multimodal generation products. Follow-up work can evaluate dedicated integrations for:

  • Seedream image generation
  • Seedance video generation

Those APIs have different request/response shapes and media lifecycle requirements, so they are intentionally outside this provider-preset PR and should be designed as explicit image/video capabilities.

Summary by CodeRabbit

  • New Features
    • Added Volcengine Ark, Coding Plan, and Agent Plan providers with plan-specific model catalogs and defaults, including native Responses routing.
    • Increased built-in provider preset catalog to 63.
  • UI / Localization
    • Added localized display names for Volcengine provider variants and made provider labels i18n-aware across provider UI surfaces.
  • Documentation
    • Updated Providers guides with expanded preset counts and a larger API-key provider catalog, plus clarified Volcengine billing routes and model-catalog behavior.
  • Tests
    • Expanded Volcengine provider, routing, model, and reasoning/thinking coverage.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds Volcengine Ark pay-as-you-go, Coding Plan, and Agent Plan provider presets with curated models, Responses routing metadata, localized GUI names, validation coverage, and multilingual documentation.

Changes

Volcengine provider integration

Layer / File(s) Summary
Registry contracts and provider catalog
src/providers/registry.ts
Adds responsesPath, curated Volcengine model catalogs, reasoning metadata, and three provider registry entries.
Configuration propagation and request routing
src/providers/derive.ts, src/router.ts, gui/src/provider-payload.ts, gui/src/components/AddProviderModal.tsx, tests/provider-registry-parity.test.ts
Carries Agent Plan’s /responses path through registry-derived configuration, GUI payloads, preset selection, and routing.
Localized provider display names
gui/src/provider-icons.ts, gui/src/i18n/*, gui/src/components/provider-workspace/*, gui/src/pages/*, tests/*
Adds translated Volcengine names, passes translators through GUI display-name calls, recognizes the new catalog IDs, and updates related tests.
Provider validation and documentation
tests/volcengine-providers.test.ts, docs-site/src/content/docs/**/guides/providers.md, structure/00_overview.md
Tests registry metadata, derived presets, routing, reasoning payloads, multimodal metadata, and GUI recognition; documents endpoints, billing routes, model catalogs, defaults, and preset counts.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant OcxConfig
  participant routeModel
  participant createResponsesPassthroughAdapter
  participant VolcengineAgentPlan
  OcxConfig->>routeModel: route volcengine-agent-plan model
  routeModel->>createResponsesPassthroughAdapter: use responsesPath /responses
  createResponsesPassthroughAdapter->>VolcengineAgentPlan: build request
Loading

Possibly related PRs

Suggested labels: enhancement, bug

Suggested reviewers: lidge-jun, wibias, ingwannu

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding Volcengine Ark provider presets, and it is concise and specific.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the enhancement New feature or request label Jul 28, 2026
@yrooogerg
yrooogerg marked this pull request as ready for review July 28, 2026 09:09

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@gui/src/provider-icons.ts`:
- Around line 90-92: Replace the hardcoded Volcengine labels in provider-icons
with stable provider/translation keys resolved through the existing GUI i18n
locale layer, while keeping catalog-ID detection separate from display-label
resolution. Update tests/volcengine-providers.test.ts lines 150-155 to use the
localized resolver with an English locale fixture and assert the resulting
labels.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8b47bc4c-9989-4cf7-9ded-8e1d769b17db

📥 Commits

Reviewing files that changed from the base of the PR and between 7710185 and 403cf31.

📒 Files selected for processing (12)
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/ja/guides/providers.md
  • docs-site/src/content/docs/ko/guides/providers.md
  • docs-site/src/content/docs/ru/guides/providers.md
  • docs-site/src/content/docs/zh-cn/guides/providers.md
  • gui/src/provider-icons.ts
  • src/providers/derive.ts
  • src/providers/registry.ts
  • src/router.ts
  • structure/00_overview.md
  • tests/provider-registry-parity.test.ts
  • tests/volcengine-providers.test.ts

Comment thread gui/src/provider-icons.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 403cf31a15

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/providers/registry.ts
Comment thread src/providers/registry.ts
Comment thread src/providers/registry.ts
Comment thread src/providers/registry.ts
Wibias
Wibias previously requested changes Jul 28, 2026

@Wibias Wibias left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maintainer review (bug + security)

Verdict: REQUEST CHANGES

Security

No medium+ findings on the new Volcengine presets (static catalog + key auth). No new secret handling.

Bug review / open bot threads

Item Status
Rabbit: localize Volcengine labels Fixed (i18n keys + locale files)
Codex P1: preserve DeepSeek reasoning on Coding Plan tool turns Still openvolcengine-coding-plan has no preserveReasoningContentModels for deepseek-v4-pro / deepseek-v4-flash
Codex P1: DeepSeek V4 effort mappings on Coding Plan Still open — no modelReasoningEfforts / modelReasoningEffortMap on that preset (will advertise/send raw Codex ladder)
Codex P2: image inputs for multimodal Coding Plan models Still openkimi-k2.6 / minimax-m3 lack modelInputModalities while liveModels: false
Codex P2: carry responsesPath on custom rename Partially fixed — Agent Plan declares responsesPath: "/responses" and derive seeds it by registry id; rename-away-from-id still needs confirmation

Please mirror the metadata already present on volcengine / Alibaba DeepSeek presets onto volcengine-coding-plan (and Agent Plan where applicable), with focused registry/parity tests.

Notes

  • Fork PR: CI surface incomplete on head SHA; blockers above are from code review of upstream/dev...HEAD.

@yrooogerg
yrooogerg requested a review from Wibias July 29, 2026 07:30
@Wibias
Wibias marked this pull request as draft July 29, 2026 07:35
@yrooogerg
yrooogerg marked this pull request as ready for review July 29, 2026 09:33

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: df46842c51

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread gui/src/components/AddProviderModal.tsx
Comment thread src/providers/registry.ts
Comment thread src/providers/registry.ts
@yrooogerg

Copy link
Copy Markdown
Author

@Wibias check this

@lidge-jun

Copy link
Copy Markdown
Owner

NEEDS-CHANGES — one of the items is a real credential-safety gap, not paperwork.

The conflict is smaller than it looks. GitHub shows 29 changed files, but git merge-tree against the current dev head reports exactly one conflicted file and one hunk: gui/src/pages/Providers.tsx, where two adjacent declarations collide. Current dev has buildAccountLoginStatus(config, oauthStatusWithCodex); this branch changes the preceding line to buildAddModalAccountRows(config, oauthProviders, t). Keep both:

const addModalAccountRows = buildAddModalAccountRows(config, oauthProviders, t);
const accountLoginStatus = buildAccountLoginStatus(config, oauthStatusWithCodex);

Everything else auto-merges.

The gap worth fixing regardless of the evidence question. None of the three presets sets preserveCustomDestination. I counted: this branch adds three new key-provider IDs with zero occurrences, while the comparable Chutes/Hyperbolic submission sets it four times and dev has two. Without it, a user who already saved a custom provider named volcengine with a matching adapter and auth shape can have their destination canonicalized onto Ark. That is someone's API key going somewhere they did not choose. The tests do not cover that case either.

Add preserveCustomDestination to all three and a regression that saves a same-name custom provider with a different base URL and asserts the host survives derivation.

The evidence gate. MAINTAINERS.md:33-42 treats a preset as a credential-destination change:

  • documented endpoints — the body states URLs and probe results, but a probe is not vendor documentation
  • authenticated GET /v1/models — not applicable, all three set liveModels: false
  • ToS and operating legal entity — missing
  • routing authorization — missing and applicable: the Coding and Agent plan catalogs bundle DeepSeek, GLM, Kimi and MiniMax models, not just first-party Doubao
  • named maintenance owner — missing
  • citable verification date — missing; the probe descriptions carry no date

If that evidence proves hard to assemble, the same clause points at an inert src/providers/free-directory.ts row as the preferred landing spot. Directory rows never become canonical login or routing presets, so they carry no credential-destination risk.

The three-way split (volcengine, volcengine-coding-plan, volcengine-agent-plan, the last on openai-responses with responsesPath: "/responses") is well constructed, and the tests bind real endpoint construction, thinking mapping, and responsesPath preservation under a custom name. The structure is not the problem.

What happens next: resolve the single GUI hunk, add preserveCustomDestination plus its regression, assemble the evidence package including routing authorization, then request explicit security review. dev CI is fully green now, so your checks will reflect this branch.

@lidge-jun lidge-jun left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Formalizing the disposition so it shows on your dashboard.

Two blocking items beyond the evidence gate:

  1. None of the three presets sets preserveCustomDestination. A user who already saved a custom provider named volcengine with a matching adapter and auth shape can have their destination canonicalized onto Ark — that is their API key going somewhere they did not choose. Add it to all three plus a regression.
  2. The merge conflict is one hunk in gui/src/pages/Providers.tsx; keep both the buildAddModalAccountRows and buildAccountLoginStatus declarations.

Evidence gate items still missing: primary-source endpoint documentation, ToS and operating legal entity, routing authorization (the Coding and Agent catalogs bundle DeepSeek, GLM, Kimi and MiniMax), a named maintenance owner, and a citable verification date.

Full reasoning in my earlier comment.

@Ingwannu Ingwannu left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Security review completed against bdfc05c230fde700e531ea2bae339a96ffb3df64.

Requesting changes because the canonical credential-destination evidence gate in MAINTAINERS.md:35-42 is still incomplete.

The earlier code-level credential-retargeting issue is fixed: all three presets now set preserveCustomDestination, and the focused regression covers a same-name custom destination. The requested DeepSeek reasoning metadata, multimodal declarations, localized labels, and Agent Plan responsesPath propagation are also present on the current head.

The remaining blocker is evidence, not implementation shape. The PR body still provides endpoint strings and private probe results, but no citable primary-source package for:

  • documented Ark pay-as-you-go, Coding Plan, and Agent Plan endpoints;
  • Volcengine's applicable terms and operating legal entity;
  • authorization for the Coding/Agent Plan routes to expose the bundled DeepSeek, GLM, Kimi, and MiniMax catalogs;
  • a named maintenance owner; and
  • a citable verification date.

Please add those sources to the PR description. If public routing authorization cannot be established, keep the entry inert/non-canonical as required by the repository policy. Do not merge the current head as a canonical preset.

@yrooogerg

Copy link
Copy Markdown
Author

Evidence package for the remaining security-review gate, verified on 2026-07-31 by @yrooogerg.

One boundary to call out: I found public Volcengine documentation that these Plan catalogs expose the listed third-party model families, but I did not find a separate public legal authorization document for Volcengine's third-party model routing beyond the product docs and Ark terms above.

@yrooogerg
yrooogerg requested a review from Ingwannu July 31, 2026 16:55
@lidge-jun
lidge-jun force-pushed the feat/volcengine-providers branch 2 times, most recently from 0a96a62 to 5c52f16 Compare July 31, 2026 21:52

@lidge-jun lidge-jun left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving after rebasing this onto current dev and re-running the gates myself.

What I changed on your branch

Rebased feat/volcengine-providers from its 234-commit-old base onto current dev (now 8c8832137), and resolved the conflicts:

  • Preset counts across five locales. Both sides had moved: dev was at 62/51 and this branch claimed 63/52 against an older base. Neither was right after the rebase, so I counted the registry directly (PROVIDER_REGISTRY.length = 65: 54 key, 7 OAuth, 3 local, 1 forward) and set en/ja/ko/ru/zh-cn to 65/54.
  • gui/src/pages/Providers.tsx. dev had switched buildAccountLoginStatus to oauthStatusWithCodex while this branch added the t argument to buildAddModalAccountRows. Kept both.

I also pushed one commit of my own:

  • glm-5.1glm-5.2 in VOLCENGINE_CODING_PLAN_MODELS and VOLCENGINE_AGENT_PLAN_MODELS, plus the matching assertions in tests/volcengine-providers.test.ts. Volcengine's current published Plan model list carries glm-5.2; glm-5.1 is not in it. Because both presets are liveModels: false, discovery cannot repair a stale id — it reaches the user as an upstream model error at request time. This is exactly the maintenance cost a static catalog takes on, so please keep an eye on that list going forward.

Verification on the rebased head

  • bun run typecheck
  • bun run test — 6415 pass, 4 skip, 0 fail across 463 files
  • gui: bun test tests — 463 pass, 0 fail
  • bun run lint:gui, bun run privacy:scan, bun run build:gui
  • Focused: volcengine-providers, provider-registry-parity, tencent-siliconflow-providers, provider-workspace-data — 92 pass

On the credential-destination policy

MAINTAINERS.md asks for an evidence ledger on any new preset. Your PR body documents the endpoints, the three-way billing split, and your authenticated /models probe results, which covers the substance. What it does not state explicitly is the operating legal entity, a citable verification date, and a named maintenance owner. Please add those to the description — for the record, the entity behind the Ark terms is 北京火山引擎科技有限公司.

The three presets keep discovery registry-owned, set liveModels: false against a mixed 126-resource catalog rather than publishing embeddings and video models into the picker, and use preserveCustomDestination so an existing same-name custom provider is not silently retargeted. That is the right shape for this integration.

One note on the Plan endpoints: Volcengine documents them as subscription routes for AI coding tools. That is precisely what opencodex is, so the preset is inside the documented use, and it matches how tencent-coding-plan already ships. The note field is the surface that tells users which route they are on — keep it accurate if Volcengine changes those terms.

@lidge-jun
lidge-jun force-pushed the feat/volcengine-providers branch from 5c52f16 to 983b7b6 Compare July 31, 2026 22:40
yrooogerg and others added 5 commits August 1, 2026 08:24
The Coding Plan and Agent Plan static catalogs advertised `glm-5.1`, which
is absent from Volcengine's current published Plan model list. Because both
presets are `liveModels: false`, a stale id cannot be corrected by discovery
and surfaces to the user as an upstream model error at request time.
Volcengine documents Coding Plan and Agent Plan quota as valid only inside
supported AI coding tools, and warns that using a plan key for general API calls
may suspend the subscription or ban the account. Routing Codex or Claude Code
through opencodex is the vendor's documented use, so the presets stay canonical —
but the user was never told about the boundary they must not cross.

`tencent-coding-plan` already ships this disclosure; these two entries did not.

- carry the restriction in both Plan `note` strings, worded per product so Agent
  Plan does not quote Coding-Plan-specific policy
- resolve the DTO note by DESTINATION rather than by provider name. The dashboard
  lets a preset be saved under any name, and a renamed row kept the credential
  destination while silently losing the warning about it
- declare the text-only Plan models so the vision sidecar cannot advertise image
  input for models that cannot accept it, matching the Tencent precedent
- document the restriction in the provider guide

The custom-name regression fails on the previous name-only lookup, verified by
reverting the resolver and re-running the test.
@lidge-jun
lidge-jun force-pushed the feat/volcengine-providers branch from 983b7b6 to 688fd77 Compare July 31, 2026 23:31
@lidge-jun

Copy link
Copy Markdown
Owner

Credential-destination evidence ledger

Posting this as owner because @Ingwannu's security review blocked on the MAINTAINERS.md evidence gate rather than on the code. I ran the research myself; sources below were opened, not read from search snippets. Verification date: 2026-08-01.

Gate requirement Result Primary source
Documented OpenAI-compatible endpoints satisfied /api/v3, /api/coding/v3 (82379/1528783, updated 2026-07-07), /api/plan/v3 native Responses (82379/2165245)
Authenticated GET /v1/models not applicable all three entries are liveModels: false; the clause is conditional on declaring live discovery
Terms of service + operating legal entity satisfied 北京火山引擎科技有限公司 — ToS 6256/64903, published 2024-06-14, effective 2024-06-21; ICP 京ICP备20018813号-3
Resale / routing authorization satisfied, see below Codex CLI integration guide 82379/2556056; supported-client list 82379/2188957
Named maintenance owner still open not in the PR description — @yrooogerg please add it
Citable verification date satisfied 2026-08-01, this comment

On routing authorization

The gate asks for "resale or routing authorization for aggregators". contributing.md defines that as a gateway selling access to third-party models. This is not that:

  1. Nothing is resold or pooled. Each user supplies their own Ark plan key and it serves only that user's session. The credential never leaves their machine.
  2. Volcengine documents the exact clients opencodex exists to serve. There is a first-party Codex CLI integration guide instructing users to put a plan key in ~/.codex/config.toml, and Claude Code, OpenCode, and OpenClaw appear in the supported-client list. The traffic opencodex forwards is a supported client's traffic.

I ran a deliberate counter-search for evidence against this — enforcement actions, key revocations, proxy crackdowns, and third-party model-owner objections across V2EX, 掘金, CSDN, Zhihu, GitHub, Reddit, and HN. No incident was found. Absence of a reported ban is not authorization on its own, which is why the disclosure below is part of this decision rather than optional.

The defect this review found

Volcengine states plainly that plan quota is valid only inside supported AI coding tools, and that other API use of the key may suspend the subscription or ban the account (article/37156, 2026-04-09; curl, Postman, and Dify are named exclusions in article/37935).

The presets did not say so. tencent-coding-plan already ships exactly this disclosure, so the two Volcengine Plan entries were inconsistent with an existing precedent, and a user could have lost their subscription without ever being warned. Fixed in 983b7b605:

  • both Plan note strings now carry the restriction, worded per product so Agent Plan does not quote Coding-Plan-specific policy as its own
  • the note is now resolved by destination, not by provider name. The dashboard lets a preset be saved under a custom name; a renamed row kept the credential destination but silently lost the warning about it. Verified by ablation — reverting the resolver makes the new regression fail, restoring it makes it pass
  • text-only Plan models are declared so the vision sidecar cannot advertise image input for models that cannot accept it, matching the Tencent precedent
  • the restriction is documented in the provider guide

Also landed on this branch

  • rebased from a 234-commit-old base onto current dev, resolving preset-count drift across five locales (counted from the registry: 65 presets — 54 key, 7 OAuth, 3 local, 1 forward) and a Providers.tsx collision between oauthStatusWithCodex and the new t argument
  • glm-5.1glm-5.2 in both Plan catalogs; the old id is absent from Volcengine's current published list, and liveModels: false means discovery cannot repair it
  • resolved a responsesPath duplicate-identifier collision introduced by the rebase

Verification

bun run typecheck clean · bun run test 6487 pass / 0 fail across 470 files · gui 463 pass / 0 fail · lint:gui, privacy:scan, build:gui green · CI 8/8 green on 688fd7715.

One note on CI history: an earlier head was cancelled on windows-latest at the Test step. That was a pre-existing dev defect — the dev tip reproduced the identical cancellation with no Volcengine code present — and it was fixed on dev by #813. Rebasing onto that cleared it. A later macOS Bun segfault in sidecar-tracker.test.ts and a Windows Kiro OAuth timeout were flakes in files this PR does not touch; both passed on rerun.

Merging. @yrooogerg — please add the maintenance owner line to the description; that is the one gate item still outstanding, and it is yours to own going forward since these catalogs are static and will need updating when Volcengine changes its plan model list.

@lidge-jun

Copy link
Copy Markdown
Owner

Owner decision on the credential-destination evidence gate, with the primary-source ledger it asks for. I also pushed one more commit to this branch; details below.

Evidence ledger (verification date 2026-08-01, sources opened)

MAINTAINERS.md requirement Result Primary source
Documented OpenAI-compatible endpoints satisfied /api/v3, /api/coding/v3 (82379/1528783, updated 2026-07-07), /api/plan/v3 native Responses (82379/2165245, 2026-05-28)
Authenticated GET /v1/models not applicable — all three entries are liveModels: false
Terms of service + operating legal entity satisfied 北京火山引擎科技有限公司, 6256/64903, published 2024-06-14, effective 2024-06-21; ICP 京ICP备20018813号-3
Routing authorization satisfied for the documented use — see below Codex CLI integration guide, supported-client list
Named maintenance owner still open — see the ask at the end
Citable verification date satisfied 2026-08-01 (this comment)

On routing authorization

@Ingwannu — this is the item your review blocked on, so here is the reasoning rather than an assertion.

Volcengine publishes a Codex CLI integration guide for Coding Plan that instructs users to put a plan key into ~/.codex/config.toml, and its supported-client list names Claude Code, Codex CLI, OpenCode, OpenClaw, Cline, Cursor, Kilo Code, Roo Code, and TRAE. opencodex exists to attach exactly those clients to a provider, so the traffic this preset carries is a documented supported-client's traffic.

The gate's phrase is "resale or routing authorization for aggregators", and contributing.md defines that as a gateway selling access to third-party models. This is not that: each user supplies their own Ark key, nothing is pooled, and nothing is resold. That distinction is what makes the canonical entry appropriate rather than the inert free-directory.ts fallback.

A counter-search across V2EX, 掘金, CSDN, Zhihu, GitHub, Reddit, and HN found no report of a plan key revoked for routing through a proxy. Absence of a reported ban is not authorization, which is why the restriction is now disclosed rather than assumed away.

The one real defect this review found

Volcengine states plainly that Plan quota is valid only inside supported AI coding tools, and that other API use of the key may suspend the subscription or ban the account (article 37156, 2026-04-09; curl, Postman, and Dify are named exclusions). The presets shipped without telling users that boundary exists, while tencent-coding-plan has carried the equivalent warning since it landed.

Commit 688fd77 fixes that:

  • both Plan note strings now carry the restriction, worded per product so Agent Plan does not quote Coding-Plan-specific policy
  • safeConfigDTO resolves the note by destination instead of by provider name. The dashboard lets a preset be saved under any name, and a renamed row previously kept the credential destination while silently losing the warning about it. New helper registryEntryForProviderDestination.
  • both Plan entries declare their text-only models via noVisionModels, so the vision sidecar cannot advertise image input for models that cannot accept it — matching the Tencent precedent
  • the restriction is documented in the provider guide

Earlier I also pushed glm-5.1glm-5.2; the old id is absent from Volcengine's current Plan model list, and with liveModels: false discovery cannot repair it.

Verification

Rebased onto current dev (this resolved preset counts across five locales to 65/54 counted from the registry, and a Providers.tsx conflict between oauthStatusWithCodex and the new t argument; it also removed a duplicate responsesPath field the rebase surfaced).

  • bun run typecheck — exit 0
  • bun run test6484 pass, 4 skip, 0 fail across 465 files
  • gui: bun test tests463 pass, 0 fail
  • bun run lint:gui, bun run privacy:scan, bun run build:gui — clean
  • CI on 688fd778/8 green

The custom-name regression was proven non-vacuous by ablation: reverting the resolver makes it fail (15 pass / 1 fail), restoring it returns 16/16.

Two CI jobs failed once before passing on rerun. Both were diagnosed rather than blind-retried, and neither file appears in this diff: macOS exited 133 on a Bun segfault immediately after tests/storage-worker-teardown-isolate.test.ts (added by #813), and Windows failed a single Kiro OAuth refresh test.

Ask for @yrooogerg

Please add a named maintenance owner line to the PR description — the person who owns this preset's evidence and breakage follow-up, as MAINTAINERS.md requires. Everything else in the gate is now satisfied, and I am recording that item as an outstanding follow-up rather than holding a green, evidence-backed preset on a line of prose. If Volcengine changes the Plan terms, the note strings and the provider guide are the two places that must be updated.

@lidge-jun
lidge-jun dismissed stale reviews from Wibias and themself August 1, 2026 00:03

Superseded by my own APPROVED review on the current head. The evidence gate I blocked on is answered in the ledger comment: endpoints, legal entity (北京火山引擎科技有限公司), ToS dates, and routing authorization for the documented coding-tool use are all cited from opened primary sources, with a 2026-08-01 verification date.

@lidge-jun
lidge-jun merged commit 4548310 into lidge-jun:dev Aug 1, 2026
13 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants