Repository navigation
v0.1.7
通过 CPA 插件商店安装(推荐)
在 CPA 的 config.yaml 里把本仓库的 registry.json 加为三方源:
plugins:
enabled: true
store-sources:
- "https://raw.githubusercontent.com/jiandanc/CLIProxyAPI-freetier2api-plugin/main/registry.json"重启 CPA 后,在管理面板的插件商店里搜 FreeTier 2API 一键安装。
手动安装
下载对应平台的文件,重命名成宿主认识的插件名后放进 CPA 的 plugins/ 目录:
| 平台 | 下载文件 | 放进去时改名为 |
|---|---|---|
| Linux x86_64 | freetier2api-linux-amd64.so |
freetier2api.so |
| Linux arm64 | freetier2api-linux-arm64.so |
freetier2api.so |
| macOS Apple Silicon | freetier2api-darwin-arm64.dylib |
freetier2api.dylib |
| macOS Intel | freetier2api-darwin-amd64.dylib |
freetier2api.dylib |
| Windows x64 | freetier2api-windows-amd64.dll |
freetier2api.dll |
SHA256SUMS.txt 可用于校验完整性;配置与账号导入见仓库 README。
本版要点
fix: 响应归一化去掉逐分片整包解码;Trae 目录按功能命名空间;额度状态不再反推
本版集中修复三个上报问题:响应钩子的 CPU 放大(#9)、扫不到 Trae 的
deepseek-v4.1-flash(#10)、以及额度列「永远查询中 / 0 0」的错误状态
(与 #11 的签到假性成功闭环配套)。
响应归一化(#9)
- v0.1.6 注册的全局 response.normalize_before 被宿主对每一条 SSE 行调用
一次,RPC 参数里带着完整客户端请求与完整上游请求(长上下文下各可达数 MB,
且都以 base64 出现在 JSON 中)。插件此前整包 json.Unmarshal 成
ResponseTransformRequest,把这两份大字段全部 base64 解码——实测 12 秒
735 次调用、累计 5.24 GB 入参,占 CPA 用户态 CPU 采样的 73%。 - 新增 internal/app/responsegate.go:单次线性扫描只取
Stream / FromFormat / ToFormat / Body,两个大字段用 bytes.IndexByte
做字符串跳过,既不 base64 解码也不分配。三个标量一旦凑齐且判定「不需要
补 data: 信封」,立即返回,不再扫后面的大字段。 - 扫描器只依赖 JSON 语法、不假设字段顺序;遇到转义或结构异常时退回
encoding/json 的窄结构体解码(不声明两个大字段,同样不会解码它们),
宁可慢一次也不误判成「无需处理」。 - 跨协议流式转换行为不变:Claude / Gemini / openai-responses 目标格式仍补
一层 data: 前缀,#5 / #8 的修复保留。未命中时返回空 PayloadResponse,
宿主按 no-op 保留原 body。 - 宿主侧逐分片的请求体 clone 与 base64 序列化开销仍在,需上游侧优化,
本改动只消除插件内的重复解码。
Trae 模型目录(#10)
- 目录请求的 function 改为跟随 cfg.Function。上游按 function 维护两套
wire id 命名空间(chat_v3: DeepSeek-V4-Pro__dev;solo_work_lite:
deepseek_v4_pro__dev),此前目录固定用 solo_work_lite、对话用 chat_v3,
取到的 wire id 会被判 4023 model is unknown;同时请求体与
X-App-Function / X-Ide-Function 三处保持一致。 - 国内版构建号抬到 3.3.104 / 20260922:上游按 X-Ide-Version-Code 下发
模型目录,构建号低于 20260806 拿不到 deepseek-v4.1-flash。 - 新增按实例区分的配置覆盖 <实例ID>_ide_version / _ide_version_code
(traecn / traeglobal / traesolo 三条产品线版本体系不同,不共用族级键),
版本在运行期可改,所有读取点统一走 profile() 快照。 - 模型目录缓存键加入 function 与构建号,避免版本被配置改写后仍命中旧清单。
- 目录拉取失败时记录状态码/响应摘要/过滤后为空的条目摘要,便于区分
「结构变更」与「版本号被降级」。
额度与签到状态(#11 配套)
- 账号概览新增静态能力 supports_quota(接口断言)。此前页面用「额度结果
里有没有这条」反推状态,导致不提供额度接口的供应商(OpenCode ZEN 等)
永久停在「查询中…」,与「还没查」无法区分。 - 额度缓存改为成功与失败都写入:失败结论(如上游无额度接口)同样确定,
不该每次刷新都丢回「没有结果」。 - 认证层 Totals 改为返回 QuotaTotals 并识别 unit=unlimited / 负值,展示层
显示「无限」;Trae 额度键统一到 credit_remain / credit_total / credit_used
词表(原 remaining_credit 等不在白名单,会静默显示 0 / 0)。 - 控制台额度列只读后端 /status 的 account.quota 一个数据源,删掉页面自己
再存一份的 quotaByAuth 与多键猜测逻辑。
另:Qoder 的任务中心能力仍需上游提供可自动推进的任务接口,本版未接入
TaskRunner;签到侧的假性成功已由前一次提交修复。
Closes #9
Closes #10
Closes #11
Co-Authored-By: Claude Code noreply@anthropic.com
Full Changelog: v0.1.6...v0.1.7