Skip to content

v0.1.12

Choose a tag to compare

@github-actions github-actions released this 23 Oct 13:09
· 90 commits to main since this release

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