Skip to content

feat: 支持多个 OpenAI 上游 API 的配置与管理 - #202

Merged
greyoak111 merged 1 commit into
greyoak111:mainfrom
chenshi723:feat/bridge-multi-upstream
Nov 9, 2026
Merged

greyoak111 merged 1 commit into
greyoak111:mainfrom
chenshi723:feat/bridge-multi-upstream

Conversation

@chenshi723

@chenshi723 chenshi723 commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

改了什么、为什么 / What and why

配套组件源 PR:chenshi723/cccodroid-openai-bridge#6 (5dd81d8,r19)。
配套市场配方 PR:greyoak111/cccodroid-components#69 (r17→r19,需与 App 一起合入)。

现有扩展页只能管理一个 OpenAI 上游 endpoint。本 PR 补齐多个 API 的实际配置界面和网关契约,仍使用一个受管回环桥接口:

  • capability 协商:新组件报告 multiUpstream 才启用多 API;旧组件保留原单地址流程,提示更新,不发送不支持字段。
  • 添加/选择/移除 API,分别编辑地址、替换 Key、模型、窗口及全局默认项;同名模型保留显式可见别名。移除需要确认,只暂存到用户全局保存,不切当前会话。
  • 切换 API 取消发现并丢弃迟到结果;许可/模型元数据/Key 按当前 API 隔离,改变地址重新确认;不读取已保存 Key。
  • 网关严格验证 full upstreams 拓扑、name+origin Key 复用、全局 ID 唯一/默认/primary/模型顺序、返回拓扑对应关系;仅持久化现有本机 provider 和窗口,不把远端配置变成其他接口。
  • raw model=id 时接受组件省略字段并规范化;保留旧表单隐藏模型后的空 API 状态;配置中断只显示已确认本地清单,不伪造未提交拓扑。
  • HTTP 配置上限512KiB容纳长 Unicode ID和窗口;发往组件时去窗口并按需省略重复raw model,检查原128KiB stdin边界;超限在执行前拒绝。所有新输入 Key 引用 finally 清空。
  • 无新依赖、无构建步骤、无二进制;新增文案使用t()/tz(),补英文和8份语言词条。更新受管桥说明。

怎么测的 / How it was tested

设备:HONOR PPG-AN00 / Android17 / aarch64 / Node26。

  • 已变基到最新 main(7721ad8,v0.6.13)并重新生成8份语言词典;合并上游 readBodyBuf 改为返回400的行为,超限阈值随本分支的512KiB配置上限调整。
  • node scripts/test.mjs bridge-config bridge-models managed-run:233项通过(网关、UI假DOM、模型、运行闸门);另补compact/status中断UI回归。
  • 与真实组件/真实私有CCR联调(组件仓库测试):OPENAI_BRIDGE_APP_SOURCE=<本App源码> node tests/test-gui-app.cjs --multi-upstream 通过,同源双账户分别Key、删除主API、别名/窗口/本地实例/恢复预算保留,远端连接数=0。
  • 同一实际App路由的 --configuring 中断恢复联调通过;无远端请求。
  • git diff --check、网关/UI JS语法检查通过。

仅隔离临时HOME、假配置、回环假服务,不改当前运行App/真实Key。不把假DOM/源码联调当作CI APK安装或原生WebView验收:未安装CI APK,不替换正式App,不清用户数据。合入后仍需维护者按配套版本做签名安装/界面验收;不自动合并或发版。

  • 新文案使用t()/tz()并补译文
  • 无新依赖或构建步骤
  • 无二进制、压缩、混淆或第三方代码变更

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

PR 安全初筛 / Safety pre-check

改动 25 个文件;高 0 项、中 8 项。

档 文件 行 为什么要看
中 gateway/tests/bridge-config-ui.test.mjs 1285 新出现的外部域名 one.example.com
中 gateway/tests/bridge-config-ui.test.mjs 1289 新出现的外部域名 two.example.com
中 gateway/tests/bridge-config-ui.test.mjs 1299 新出现的外部域名 three.example.com
中 gateway/tests/bridge-config-ui.test.mjs 1409 新出现的外部域名 changed.example.com
中 gateway/tests/bridge-config.test.mjs 34 读取密钥类环境变量
中 gateway/tests/bridge-config.test.mjs 785 新出现的外部域名 one.example.invalid
中 gateway/tests/bridge-config.test.mjs 789 新出现的外部域名 two.example.invalid
中 gateway/web/app/bridge-config.js 148 一行 1105 字(压缩 / 混淆过的代码看不出在干什么)

「高」不等于有问题,只是这些地方一旦被动手脚,后果最重(能拿到签名钥匙、改到用户手机上的权限、或藏进看不见的内容),合并前请逐行看过。

Stage per-API endpoints, keys and models behind capability negotiation; validate full topology and scoped credential reuse, preserve stable model aliases/windows and the existing local provider, cancel discovery on API switches, and clear replacement-key drafts. Cover legacy fallback, protocol bounds, runtime gates and UI isolation with focused regression tests.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@chenshi723
chenshi723 force-pushed the feat/bridge-multi-upstream branch from 60a6326 to 8e14108 Compare November 9, 2026 12:34
@greyoak111
greyoak111 merged commit ee3ee06 into greyoak111:main Nov 9, 2026
1 check passed
@chenshi723
chenshi723 deleted the feat/bridge-multi-upstream branch November 10, 2026 12:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants