- SettingsViewModel 每次进程生成随机本机 Key,start 失败时暴露错误信息 - Settings 页显示 API Key 与错误提示
6.7 KiB
6.7 KiB
RainyToken 反代网关开发路线图(PROXY-ROADMAP)
分支:dev-proxy 目标:在雨晴Token App 内嵌一个多提供商 OpenAI 兼容反代网关,支持双区、签到、反代、多账号池,并尽量覆盖 agent2api / fleet-kit 等开源项目已支持的平台。
1. 最终目标
App 内启动一个本地 HTTP 服务(默认 127.0.0.1:8787),对外暴露:
GET /v1/modelsPOST /v1/chat/completions(OpenAI 兼容,流式/非流式)POST /v1/responses(Codex Responses API)POST /v1/messages(Anthropic Messages,Claude Code 直连)
请求按「模型名 → Provider + Region + 账号」路由,复用现有 CredentialRepository / SecureStorage / 各 Repository。
2. 架构
LocalProxyServer (127.0.0.1:8787)
│
├── /v1/chat/completions
├── /v1/responses
├── /v1/messages
└── /v1/models
│
▼
ProviderRouter(模型名 → Provider + Region + Account)
│
┌──────┼──────────┬─────────────┬──────────────┐
▼ ▼ ▼ ▼ ▼
WBAdpt TraeAdpt QoderAdpt RaccoonAdpt OfficialPassthrough
(CN/INTL)(CN/INTL)(CN) (CN) (DeepSeek/Gemini/Kimi…)
│
▼
AccountPool(多账号轮询 + 熔断冷却 + 会话粘性)
│
▼
StreamNormalizer(各家上游 SSE 分片 → 标准 OpenAI/Anthropic 流)
3. 已编码骨架(data/proxy)
ProviderKind.kt:全部计划支持的 Provider 枚举ProviderRegion.kt:CN / INTLProxyModels.kt:统一 Chat 请求 / 响应 / 模型 / 用量ProviderAdapter.kt:统一 Provider 适配器接口AccountPool.kt:账号池骨架(round-robin,后续加权)RegionRouter.kt:模型 → Provider/Region 路由骨架LocalProxyServer.kt:本地服务接口 + 配置
3.5 当前进度(dev-proxy 分支)
| 提交 | 内容 |
|---|---|
85c6cf4 |
M1a:Ktor 本地服务 + Sub2API 透传 |
11b9065 |
M1b:WorkBuddy CN / Trae CN 适配 + 设置页开关 |
a1605e6 |
M2:账号池轮询 + 会话粘性 + 双区域路由 |
1609e21 |
审计修复:鉴权头/401/模型前缀剥离 + 流式入口骨架 |
已打通:
- 设置页「代理网关」开关,默认 127.0.0.1:8787,本机 Key:rainytoken
- 路由前缀:wbcn- / workbuddy-cn / codebuddy- → WorkBuddy CN;wbintl- / workbuddy-intl → WorkBuddy INTL;traecn- / trae-cn / trae- → Trae CN;traeintl- / trae-intl → Trae INTL;其余 → Sub2API
- 账号池按区内匹配 + round-robin + 会话粘性(X-Conversation-Id / user)
- stream=true 已接实时字节流转发(respondOutputStream);各上游私有 SSE 信封仍待归一
未完成:
- 各家私有 SSE 信封 → 标准 OpenAI/Anthropic 流的 StreamNormalizer 仍待实现
- WorkBuddy INTL / Trae SOLO/Work 实际协议归一化
- M3 agent2api 全家桶(Qoder / 小浣熊 / CatPaw / AutoClaw / Cline / Accio / ZCode / CodeArts / Loomy)
- Qoder 需 COSY 请求签名/编码(ed25519 类原语),已列为攻坚项
- M4 长尾 + 官方透传 + 网关配置 UI 完善(已做:随机 API Key / 启动失败提示;待做:端口配置 / 状态持久化)
4. 里程碑
M0:地基(当前)
- 新增
data/proxy骨架,能编译 - 新增本路线图
- 验收:
./gradlew :app:assembleDebug绿
M1:先打通“已经有凭据体系”的三家
- WorkBuddy 国内版 Chat 适配器(参考 workbuddy2api / workbuddy-gateway)
- Trae CN Chat 适配器(参考 Trae2api-cn / trae2api)
- Sub2API 透传(本身是 OpenAI 兼容协议)
- 本地 HTTP 服务可用,任意 OpenAI 客户端可连
- 验收:真机 + 真凭据,WorkBuddy / Trae / Sub2API 各能回复一条消息
M2:双区 + 多账号治理
- WorkBuddy 国际版、Trae INTL/Solo/Work 适配器
- RegionRouter 按模型家族自动选区(glm/deepseek/kimi → CN,gpt/claude/gemini → INTL)
- AccountPool 加权轮询 + 429 熔断 + 会话粘性
- 验收:国内/国际账号混挂,同模型自动走对应区,单号故障自动换号
M3:覆盖 agent2api 全家桶
- Qoder CN、小浣熊、CatPaw、AutoClaw CN/INTL、Cline、Accio CN/INTL、ZCode CN/INTL、CodeArts、Loomy
- 每家一个 Adapter,抄 agent2api
providers/目录 - 验收:每家至少能在有凭据的情况下完成一次对话;签到/余额尽量复用现有页
M4:长尾 + 官方直连
- 灵犀、团结AI、TokenDance、Kimi Code、MiniMax、Gemini
- 官方 OpenAI 兼容平台统一走
OfficialPassthrough(配置 base_url + key) - 设置页新增「代理网关」管理:端口、启动/停止、API Key、运行状态
- 验收:所有支持平台可在 UI 中启用/禁用
5. Provider 支持矩阵(规划)
| Provider | 区域 | Chat | 签到 | 参考实现 |
|---|---|---|---|---|
| WorkBuddy | CN / INTL | ✅ | CN 有 | agent2api / fleet-kit / proxy-hub |
| Trae / SOLO / Work | CN / INTL | ✅ | CN 有 | agent2api / proxy-hub |
| Qoder | CN | ✅ | CN 有 | agent2api / proxy-hub |
| 小浣熊 | CN | ✅ | 桌面登录积分 | agent2api / fleet-kit |
| CatPaw | CN | ✅ | - | agent2api |
| AutoClaw | CN / INTL | ✅ | CN 有 | agent2api |
| Cline | INTL | ✅ | - | agent2api |
| Accio | CN / INTL | ✅ | - | agent2api |
| ZCode | CN / INTL | ✅ | - | agent2api |
| CodeArts | CN | ✅ | 每日福利 | agent2api |
| Loomy | CN | ✅ | 每日积分 | agent2api / fleet-kit |
| 灵犀 / 团结AI / TokenDance | CN | ✅ | 待确认 | fleet-kit |
| Kimi Code / MiniMax / Gemini | INTL/CN | ✅ | - | 官方 API 透传 |
6. 关键风险与对策
- 上游协议会变:所有解析做防御式多候选扫描(项目现有惯例);接口变动时快速适配。
- 设备指纹/风控:Trae 签到 9074、WorkBuddy 设备指纹;沿用现有
checkinDeviceId/derive_id思路。 - Token 单次轮换:WorkBuddy refresh 单次消费,沿用
RefreshWriteSession落库再用的机制。 - SSE 分片差异:各家流式事件格式不同,用统一
StreamNormalizer归一。 - Android 后台:若只给本机内客户端用,App 前台运行即可;若希望后台常驻,需前台服务 + 通知。
7. 参考仓库
- agent2api:https://github.com/aimod-cc/agent2api
- workbuddy2api-hub:https://github.com/ardeyouxipianyi/workbuddy2api-hub
- workbuddy-gateway:https://github.com/CangShui/workbuddy-gateway
- workbuddy2api-panel:https://github.com/linguo2625469/workbuddy2api-panel
- Trae2api-cn:https://github.com/autumnsentiment/Trae2api-cn
- trae2api (Go):https://github.com/JeffHu0912/trae2api
- proxy-hub:https://github.com/1416277987/proxy-hub
- fleet-kit:https://github.com/cpufreestyle/fleet-kit