Repository navigation
v0.9.0
v0.9.0 新增第八个渠道 officeAce(华为云果办 / AgentArts),覆盖对话、模型、额度、签到、刷新与登录全链路。SCHEMA_VERSION 不变(28),升级必须重启后端。
- 新渠道 officeAce(
officeace):点「登录 officeAce」走华为云授权,回调由云端承接(/v1/claw/auth/callback),本服务不监听端口、用户不粘链接,后端按 2.5s 轮询/v1/claw/auth/code取码(与官方桌面端同一机制)。前端补齐渠道标签、缩写、配色、图标、登录入口与额度口径;OFFICEACE_*三个环境变量已透传到 compose。 - 两套凭据、两个面、两种签名(本渠道唯一的复杂度来源):聊天用永不过期的
Basic model_app_key:model_app_secret;控制面(积分 / 签到 / 费率)用约 2h 的临时 AK/SK +security_token+project_id,由预刷新任务续期。控制面/v1/claw/*走华为云SDK-HMAC-SHA256;模型网关/v1/subscription*、/v1/model-token-rates只认V11-HMAC-SHA256(多一层 region 作用域 + 密钥派生)。混用的回包是APIG.0303/APIG.0624/ 恒 401verify ak sk signature fail,不告诉你哪一步错。refresh_token与client_id=pdp5_for_agentarts+ DPoP 私钥三者绑定、一次性轮换,且与 CodeArts 的票不通用。 - 错误分类:限流走伪 200(HTTP 200 +
data:{"error":…}),并有「首帧正常、第二帧才是错误」的第二种形态,故不能在首帧成功后停止检查。81004(该号没这个模型)/81009(名字不认)归BLOCKED并登记模型级负缓存(成功一次即撤销,同渠道同模型的其它凭证一并跳过);81111/81112/81114归限流,只冷却「该凭据 × 该模型」;14018归欠费。 - 不做主动模型探活:目录 34 个里实测只有 11 个真能用,但探活要真发推理、消耗积分,而额度是稀缺资源。模型级拒绝改由真实请求的
BLOCKED负缓存处理,比开机烧 34 次推理省得多。同理不做 credit 估算:上游给了cost_coefficient与tokens_per_point,但二者的叠乘关系官方未说明,凭空折算会与真实扣点对不上、并让跨渠道额度排序整体失真。 max_tokens改写:可用模型里 9/11 是推理模型,给 64 会被思考预算吃光、正文为空。≥16一律追加 1024 余量再夹到模型硬上限(glm-5*131072 /qwen3*65536 /deepseek-v4.1-flash393216);<16原样透传(探活的精确请求);未给不补。max_completion_tokens归一成max_tokens。- 积分即主账:单位
officeace_points(新用户一次性 4000 + 每日签到 1000),没有并行的 token 池,remaining/total直接是积分。每笔奖励独立到期,故额度口径写「逐笔到期」,调度仍按到期阶梯「快过期的先用」。 - 每日签到:
POST {gateway}/v1/subscription/bonus/claim是写操作(调用即真发积分),body 必须给 {} + JSONContent-Type——官方调用点是空 body,但实测那样回 500OfficeAce.11020001。上游对当日重复领取幂等,故不需要本地记「今天领过」。收获按bonus_skus的剩余量增量算(points是活动累计发放量,由多个渠道共同贡献,拿它当本次收获会虚高)。封账到下个北京时间 0 点,次日新活动一出现自动补签。 - 登录状态按 username 分键:
AuthStateStore做 reservation(begin/owner/session_entry/touch/consume/cancel/cleanup,带 TTL 与 pending 上限)。单槽全局态会让两个管理员的并发登录互相覆盖、把 A 的凭证记到 B 名下;并发轮询同一 state 时consume只有一路成功,另一路抛错——否则同一账号会出现两条重复凭证。 - 网关地址归一:
client-permission-validate下发的api_base带/v2,models.json里存的不带;统一去掉尾部/v2再拼端点,否则聊天拼出/v2/v2/chat/completions。网关主机每账号一个,故不进OFFICEACE_ALLOWED_ENDPOINTS(白名单只管控制面,带临时 AK/SK 签名的请求只发往白名单主机)。 - 单账号单用户:官方《套餐管理》明确「个人版面向个人用户,限制单账号单用户使用」,故本渠道不做多人共用,每个使用者各自添加自己的凭证。
其他改动(v0.8.0 之后):
- CodeBuddy 国际站模型列表按套餐探活过滤:
11158/11102判定为「该套餐不含此模型」并从列表剔除,限流错误保留(限流是临时的,不该让模型消失)。 - 模型列表连续失败退避:连续失败时逐步拉长重试间隔,避免往一个已经坏掉的上游持续打请求刷日志。
- 读体断开回 499:客户端在读请求体时断开,此前落到通用异常处理回 500 并记
error级日志;现按 499 记录,不再污染错误率。 - 传输层异常归类 + 上游错误码补全:把连接重置 / TLS 失败这类传输层故障与「上游明确拒绝」分开归类,探针与日志相应降噪。
- 签到 / 预刷新跳过用户软暂停的凭证:
enabled=0的凭证不再参与签到与预刷新轮次,口径与调度器is_selectable一致。 - benchmarks 浮动别名取同族最新快照的分:OpenRouter 把浮动别名钉在旧快照、并把该条换成 Non-reasoning 变体,导致智力分「掉」15 分;现按
canonical_slug的-YYYYMMDD归族取最新快照,显式带日期戳的 id 仍用自己的分。 - 默认模型改
deepseek-v4.1-flash,默认黑名单与线上生效值对齐。 - 前端:套餐明细弹层按可用高度封顶,不再被顶出视口。
已知限制:officeAce 上游账号尚未开通模型网关(client-permission-validate 返回 subscription: null),故聊天、模型列表、积分与签到的端到端验证是按协议文档 + mock 完成的;开通后用真实账号复核。cache_control 透传在该渠道同样未验证。