Skip to content

Releases: jiandanc/CLIProxyAPI-freetier2api-plugin

v0.1.16

Choose a tag to compare

@github-actions github-actions released this 24 Oct 17:18

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

  • AutoClaw 国际版登录接通:控制台页面内完成阿里云人机验证后,直接拿到真实的 Zai / Google 授权链接;登录后粘贴 localhost 回调即可换码入库,不再是一张 data:text/html 指引页。
  • OAuth 405 修复:两跳改用官方桌面端指纹与 UA(AutoClaw/1.18.5、X-Client-Type: pc 等),绕开阿里云 WAF 对 Go 默认 UA 的拦截——这是 Zai 取链接失败、Google 正常的根因。
  • 模型列表恢复:修正 autoclaw-model-config 的响应解析(上游返回顶层 models 数组),模型页与 /v1/models 都能看到上游模型,并带图片输入能力标记。
  • 额度显示修正:上游只提供积分余额、没有总额/已用概念,账号表改为「余额 / —」,不再出现 10000 / 0 与红色空槽。
  • CI 稳定:qoder 签到用例钉住时钟,消除每天 8 小时的必挂窗口。

What's Changed

  • fix(autoclaw): 国际版登录改为页面内人机验证 + 真实 OAuth 链接;修复模型清单与额度展示 by @jiandanc in #29
  • fix(zcode): Start Plan 通道按凭据串行化出站,遵守上游并发上限 by @ArmedHelicopter in #27
  • refactor(zcode): Start Plan 闸门改为实例级,按账号隔离并只作用于 Plan 通道 by @jiandanc in #28

Full Changelog: v0.1.15...v0.1.16

v0.1.15

Choose a tag to compare

@github-actions github-actions released this 24 Oct 13:39

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

Merge commit '0286665'

What's Changed

  • fix(workbuddy): 对齐正版 5.8.3 客户端协议(端点/UA/归属头/会话 ID/trace 族) by @ArmedHelicopter in #23
  • feat(vendors): 新增 AutoClaw 国内/国际版与小浣熊骨架实现 by @jiandanc in #25

Full Changelog: v0.1.14...v0.1.15

v0.1.14

Choose a tag to compare

@github-actions github-actions released this 24 Oct 07:52

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

feat: 修复 ZCode 对话调用、新增单供应商 10 账号限制、精简中英文 README 并切换 MIT 许可(v0.1.14)

What's Changed

  • fix(workbuddy): 企业账号额度走企业用量接口,签到按账号判定 by @jiandanc in #22
  • fix(admin): 额度缓存按供应商与账号隔离,修复 OpenCode ZEN 显示 WorkBuddy 额度 by @jiandanc in #21

Full Changelog: v0.1.13...v0.1.14

v0.1.13

Choose a tag to compare

@github-actions github-actions released this 24 Oct 05:14

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

refactor: 提示词过滤回归全局单份配置

提示词过滤不再按供应商配置:模式(passthrough/custom/append)与提示词文件
是插件级设置,控制台恢复成原来的单个下拉框,实现方(当前 WorkBuddy)读同一
组全局键。

  • 配置:新增全局 prompt_mode / prompt_file,模式在解析与校验阶段就把关;
    旧键 workbuddy_prompt_mode / workbuddy_prompt_file 归一化到新键,老配置
    不会静默失效。
  • 状态:state.json 的 vendor_settings 换成单值 prompt_mode(页面覆盖 > YAML)。
  • 管理端:/settings 收 prompt_mode,/status 的 settings 回生效值;删除上一版
    按供应商声明字段的汇总/渲染/校验代码与 core.RuntimeFieldsProvider。
  • 控制台:恢复「提示词防御模式」下拉与摘要行,保存即写全局模式。
  • 测试:模式取值集合、生效值回显、旧键兼容、App 间状态隔离。

What's Changed

New Contributors

Full Changelog: v0.1.12...v0.1.13

v0.1.12

Choose a tag to compare

@github-actions github-actions released this 23 Oct 13:09

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

fix: ZCode 套餐领取补上活跃上报,持有判读改用 billing/balance,提升至 0.1.12

问题:官方 ZCode 客户端显示账号有可领套餐且能领,插件控制台却把按钮永久
置灰成「已领取」,实际上一个套餐都没领到。控制台的按钮状态只由
ClaimStatus.Claimable(= offered − held)决定,因此问题出在对上游的两处读数
上,而非领取链路本身。

根因一:preview 之前缺少年度活跃上报(主因)

  • 活动套餐的投放以「当日活跃」为资格信号,而不是纯粹的账号权益快照。
    官方桌面端每次启动发 app_launch、每个自然日发一次 app_daily_active
    (packages/services/src/telemetry/telemetryCore.ts),缺这两条事件的账号
    billing/preview 恒空。
  • 插件从不发送,于是 offered 为空 → claimable=0 → 页面显示「已领取」。
    这解释了为什么表现为「客户端有、插件没有」且不报错。

根因二:持有集合读了已废弃接口

  • billing/current 已被官方标注废弃(codingPlanProviderAvailability.ts、
    bigmodelUsageQuotaProvider.ts),持有套餐的权威来源是 billing/balance 的
    data.plans。旧接口返回空时 held 恒空,会朝相反方向出错(全部误列为可领)。
  • 同时补齐官方对 plans[] 的过期归一:status=active 但 ends_at 早于服务端时间
    应视为 expired,否则活动结束后按钮会一直灰在「已领取」。

改动:

  • 新增 internal/vendors/zcode/activation.go:按官方 sendReport 的 16 字段上报
    app_launch / app_daily_active,每账号每自然日一次(进程内去重,与 claimGate
    同一套「状态属于实例」约定,不引入 state 依赖)。仅凭 JWT 解出的 user_id
    归属,不带 Authorization(官方该端点同样匿名)。上报失败不阻断 preview,
    但会记录原因。
  • 重写 fetchPlanSnapshot:先上报活跃 → billing/balance(一次拿齐 plans +
    balances + server_time)→ billing/preview。删除废弃的 PathBillingCurrent,
    额度查询由 3 次请求降为 2 次,balance 不再重复取数。
  • heldPlanIDs 改从 balance 的 data.plans 判定,并接受服务端时间做过期归一。
  • claimStatusOf:preview 成功且确实无投放才是「已领取」;活跃上报失败导致的
    空列表改为携带 Error,页面保持按钮可点并显示原因,不再谎报。
  • FetchQuota/PreviewPlans 收敛为 adapter 方法(上报去重需要实例状态)。

其他:

  • 控制台模型表状态列文案「已禁用」→「禁用」(账号表不变)。

测试:新增 activation_test.go(事件体 16 字段逐项校验、每日去重与失败撤销、
账号时区下的自然日)与 heldPlanIDs 过期归一等用例,全部不触网。

Co-Authored-By: Claude Code noreply@anthropic.com

Full Changelog: v0.1.11...v0.1.12

v0.1.11

Choose a tag to compare

@github-actions github-actions released this 23 Oct 12:41

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

fix: 整修合并 #14/#15 后的删除、额度与管理接口,修复 Qoder 余额显示 0/0

两个社区 PR(#14 相对路径删除、#15 管理接口与上游响应加固)已合入,但对
合并结果做完整审查后,发现若干处在既有结构上叠补丁而不是修到根因,本次
统一收敛。另修复 #14 引入的 Qoder 剩余/总额恒为 0/0 的回归。

额度折算(用户可见回归)

  • #14 的 presence 标志把「第一个出现的额度族」永久锁定。Qoder 同时输出
    user_quota_(套餐)与 addon_quota_(拓展包),Free 计划的套餐是合法的
    {used:0,total:0,remaining:0},于是拓展包额度永远覆盖不上,页面恒为 0/0。
    改为按族分组、选「真有容量」的族;所有族都无容量时才回落到第一族
    (此时 0/0 是真实语义)。「只报 used」的反推保留,显式 total=0 不反推。
  • 三份必须手工同步的键白名单(remaining/total/used 各一个 switch)合并成
    一张 quotaKeyRoles 表:族与角色收敛成一处知识,避免同类静默 0/0。
  • 新增回归用例:Qoder Free+拓展包让位、全 0/0 保留第一族、显式 total=0
    不反推。

凭证路径与删除(#14 的根因修复)

  • 相对路径归一化上移到宿主边界 hostbridge.ResolveAuthPath,在
    ListAuths / AuthJSONAndPath 出口统一处理;删除、stat 取修改时间、读文件
    兜底、续期写回四条路径共用同一份绝对路径。删除入口不再各自换算。
  • 删除校验收敛为 safeAuthFileForDelete:归属校验 → 运行时凭证 → 必须绝对
    路径 → 必须存在 → .json / 符号链接 / 目录 → 目标文件身份比对。
  • 修掉 #14 的两个行为问题:
    • 文件不存在时原先 Lstat 返回 nil、Remove 命中 IsNotExist 也返回 nil,
      页面会显示「已删除」而账号其实还在;现在如实报错。
    • 路径基准不一致时同名文件可能属于另一个账号;删除前比对目标文件的
      vendor 与 UID(只比身份字段,不涉及 token)。
  • deleteAuthFile 精简为「取凭证 → 校验 → 删除」。

管理接口请求体

  • 泛型 decodeRequest[T] / decodeRequestInto 取代逐 handler 的解码样板,
    覆盖 11 个管理入口;models 两处重复的错误文案统一。
  • /tasks/run 原先在 tasks 包内用 _ = json.Unmarshal 吞掉畸形 JSON,
    #15 声称覆盖任务入口但实际漏掉;解析上移到 admin,tasks 只接收
    QueueRequest,缺省值由 DefaultQueueRequest 提供。
  • login/callback 保留 {ok,status,message} 契约:页面按 AuthLoginStatus
    读字段,#15 改成 {ok,error} 会丢掉「请刷新页面后重试」这句提示。

供应商

  • WorkBuddy 领奖:#15 修好了解析但调用方仍吞错并返回 (0,0),用户看到的
    仍是「任务已达标」。claimGrowthReward 改为返回 error 并上抛到
    AutoTaskResult;parseClaimResult 改用指针字段一次解码(原实现解两遍)。
  • Qoder 短响应上限:三个重复的 1<<20 合并为 shortResponseMaxBytes,并把
    仍在无界读的 FetchUserInfoWithToken 纳入;签到读失败不再静默当成空正文。

宿主流读取

  • 空分片退避去掉 time.NewTimer 与 if !timer.Stop() { <-timer.C } 排空写法
    (Go 1.23+ 的 unbuffered timer 下会阻塞),改用仓库既有的 time.After;
    保留 32 次上限与指数退避。

测试与守卫

  • 删除集成用例改用 t.TempDir 构造 core/oauth 平级布局,真正传
    ../oauth/<name>.json 形态;新增绝对路径(标准 CPI 部署)与文件不存在
    两条用例。
  • 合并重复的 managementCall / managementCallWithBody helper。
  • 架构守卫补反向检查:layerRules 里的非 vendor 包必须同时出现在
    internalPackages。

验证(容器 golang:1.24,与 CI 一致)

gofmt / go vet ./... 通过
go test ./... -count=1 全部包通过
go test -race <core,state,auth,tasks,admin> 通过
go test -tags live ./tests/live -run '^$' 通过
go build -buildmode=c-shared(linux/amd64) 通过

版本保持 0.1.11:本次修复与 Qoder 设备身份改动一起发布。

Co-Authored-By: Claude Code noreply@anthropic.com

What's Changed

  • fix: 宿主返回相对凭证路径时账号删除失效(EasyCLIProxyAPI 默认 ../oauth) by @ArmedHelicopter in #14
  • fix: 加固管理请求与上游响应处理(stacked on #14) by @ArmedHelicopter in #15

New Contributors

Full Changelog: v0.1.10...v0.1.11

v0.1.10

Choose a tag to compare

@github-actions github-actions released this 22 Oct 09:59

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

feat: 模型费用倍率展示与控制台列偏好,Qoder 国际版补齐客户端设备身份,提升至 0.1.10

关联并关闭: Closes #12, Closes #13

模型费用/额度倍率展示 (Closes #12)

  • 控制台模型列表新增「费用倍率」列,紧挨模型名显示,方便按成本选型。
  • 费用倍率统一归一化为始终保留两位小数的格式(如 0.50X、0.05X),支持
    非数值文案(如 Cline 的「免费」/「订阅」);上游未提供时显示「—」,
    不臆测为免费。
  • 新增 core.CreditsProvider 接口;倍率随模型清单缓存一同落盘到 state.json,
    插件重载或重启后立即呈现,无需等待重新打上游探测。
  • 控制台表格支持「列展示」偏好配置:可按需显示/隐藏输出上限、推理档位、
    能力标签等,选项保存在浏览器本地存储。
  • 优化模型别名编辑交互体验:支持点击模型名或 ✎ 图标直接行内编辑,
    按回车或点选外部保存,按 Esc 取消,未设置别名时直接显示官方 ID。

Qoder 国际版签到客户端设备身份 (Closes #13)

  • 国际版活动列表要求请求头必须成对携带 cosy-machinetoken 与 cosy-machinetype,
    缺失任一值时上游接口虽返回 200,但会静默过滤「每日领取 100 Credits」等
    CLAIM_BENEFIT 活动,导致误判为无活动或无资格。
  • 新增 internal/vendors/qoder/identity.go,基于账号凭证种子确定性派生稳定
    设备身份(88 字符 token、18 字符 type、machineos、hostname、version),
    与 cosy 会话保持同源同口径,无需读取用户文件或依赖外部官方客户端。
  • 签到流程中的活动查询、活动领取(claim)、奖励发放回查(reward)三条链路
    统一携带原生设备身份头。
  • 增加 qoder_desktop_version 配置项支持自定义桌面端版本覆盖。

版本

  • 默认版本号提升至 0.1.10。

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

Full Changelog: v0.1.9...v0.1.10

v0.1.9

Choose a tag to compare

@github-actions github-actions released this 22 Oct 02:33

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

fix: 凭证临时冷却不再被当作「没有凭证」;模型清单守卫与落盘,提升至 0.1.9

问题

  • 供应商整家从控制台模型列表消失,账号概览的「剩余/总额」永远停在
    「查询中…」。宿主日志证实:上游限流(WorkBuddy code:6004)或超时后,
    宿主路由层把凭证标记为 unavailable,而插件把它和用户显式禁用的
    disabled 混为一个判断,四处重复:
    entry.Disabled || entry.Unavailable
    于是该供应商被跳过模型探测、跳过额度查询——凭证文件本身完好无损。

修复

  • core.HostAuth 新增 Usable():只看 Disabled。Unavailable 是宿主路由层的
    临时状态(暂时别把对话流量打到这条凭证),不代表凭证不存在或不可读。
    auth/pool.go、core/vendor.go、hostbridge/auth.go、workbuddy/adapter.go
    四处调用点各收敛为一行 if !entry.Usable()。

模型清单

  • 新增 CacheProbedModels:探测失败返回的空清单不覆盖既有缓存。供应商在
    探测失败时按契约返回空结果(让宿主淘汰坏凭证),若照样写缓存,一次瞬时
    401 就会让整家供应商从控制台抹掉。
  • 清单写入后落盘到 state.json,插件重载由 LoadCachedState 回灌,控制台
    不必再等一轮上游探测。落盘复用 Catalog 自己持有的 store,批量路径
    (StaticModels / RefreshFromUpstream)整轮只写一次,内容未变不写盘——
    不为去抖另造定时器或关闭期 flush 的生命周期。
  • 补探测失败才记冷却,成功不再把接下来 30 秒的补探测全部挡掉。

控制台

  • 「读取模型清单」按钮此前绑定 loadModels(只重读本地缓存),缓存为空时
    点了永远没反应。改为真正 POST /models/refresh,失败时把上游错误显示出来。
  • 文案对齐为「读取模型清单」,与服务端提示一致。

测试

  • TestUnavailableCredentialStillServesConsole / ...StillQueried:临时冷却
    仍要出现在模型列表、仍要查额度。
  • TestCooldownWithFailingUpstreamKeepsConsole:冷却的真实形态——上游同时
    在失败时,已缓存清单必须保留,失败额度必须缓存成 ok=false(页面显示
    「-- / --」而非永远「查询中…」)。
  • TestDisabledCredentialSkipsQuota:用户显式禁用仍必须排除。
  • TestForAuthFailureDoesNotWipeModelCache、TestRefreshZeroDoesNotWipeCache、
    TestCacheProbedModelsKeepsPreviousOnEmpty、TestModelCachePersistsToState:
    空结果不覆盖缓存、清单落盘可回灌。
  • 上述用例均已用「把 Usable() 改回旧语义」验证过确实失败,不是恒真断言。

Co-Authored-By: Claude Code noreply@anthropic.com

Full Changelog: v0.1.8...v0.1.9

v0.1.8

Choose a tag to compare

@github-actions github-actions released this 21 Oct 10:30

通过 CPA 插件商店安装(推荐)

本插件已收录进 CPA 官方插件源,无需额外配置三方源。
在管理面板的插件商店里直接搜 FreeTier 2API 一键安装即可。

手动安装

下载对应平台的 freetier2api_<版本>_<goos>_<goarch>.zip,解压后把其中的
freetier2api 动态库放进 CPA 的 plugins/ 目录。
归档里已经用的是宿主要求的 freetier2api{ext} 文件名,解压后无需改名。

平台 下载归档
Linux x86_64 freetier2api_<版本>_linux_amd64.zip
Linux arm64 freetier2api_<版本>_linux_arm64.zip
macOS Apple Silicon freetier2api_<版本>_darwin_arm64.zip
macOS Intel freetier2api_<版本>_darwin_amd64.zip
Windows x64 freetier2api_<版本>_windows_amd64.zip

checksums.txt 可用于核对归档完整性;配置与账号导入见仓库 README。

本版要点

feat: Qoder 模型 ID 规范化为 display_name slug,提升至 0.1.8

模型 ID 与别名

  • Qoder 国内版/国际版的对外模型 ID 改为上游 display_name 的规范化形式
    (小写、空白折叠为 "-"):DeepSeek-V4-Pro -> deepseek-v4-pro、
    GLM-5.3 -> glm-5.3、Qwen3.8-Max -> qwen3.8-max。
  • slug -> 上游 key 的对应关系不写死在代码里:每次拿到上游 model/list
    就在 adapter 实例内重建索引(国内版/国际版各自独立),出站时精确还原
    为 model_config.key / x-model-key。旧上游 key 仍可直接请求。
  • 移除 Qoder 内置兜底模型清单:写死的目录会随上游过时,探测失败改为
    返回错误,由宿主跳过该凭证。

陈旧键不再误伤新模型

  • 供应商换掉对外 ID 后,state.json 里按旧 ID 保存的别名与禁用项会失效。
    此前它们会让请求被翻回旧 ID 再撞上禁用,报
    「model is disabled by plugin configuration」——而列表里该模型是启用的。
  • 现在别名与禁用判定都先对照当前清单:只对真实存在的模型 ID 生效。
    刻意不删除状态里的旧键——清单可能因探测失败暂时拿不到,删除会让用户
    配置永久丢失;清单恢复后旧键自动重新生效。

管理面韧性

  • 额度批量查询改到后台作用域并做单轮 singleflight:页面刷新取消管理 RPC
    时不再中断整轮查询,账号不会卡在「查询中…」。
  • 模型清单在缓存为空时按供应商补探测(singleflight + 冷却),
    控制台不再出现「整家供应商缺模型」,前端最多轮询两轮等待补齐。

文档

  • README 重排:安装提前到供应商表之后,添加账号合并为一张凭证字段总表,
    删除重复章节,已知限制每条压缩为一句话。

Co-Authored-By: Claude Code noreply@anthropic.com

Full Changelog: v0.1.7...v0.1.8

v0.1.7

Choose a tag to compare

@github-actions github-actions released this 21 Oct 07:00

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