Skip to content

v0.1.7

Choose a tag to compare

@github-actions github-actions released this 21 Oct 07:00
· 70 commits to main since this release

通过 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