Skip to content

v2.0.0-smartops.pre1

Latest

Choose a tag to compare

@CSCITech CSCITech released this 01 Sep 04:48
· 66 commits to main since this release
b709615

Warning

v2.0.0-smartops.pre1 的重大更新是面向管理员的 智能运维中心,包含活动告警、渠道性能、模型性能、系统信息和计费结算对账。渠道/模型结果中的请求量、错误量、消耗额度、估算成功率、重试和日志延迟来自既有 Consume/Error 日志聚合,并不是完整的 Relay Attempt 追踪;模型吞吐量和详情趋势来自 perf_metrics 聚合桶。日志缺失、错误日志未启用、历史重试标记未就绪、性能采集关闭或查询结果被截断时,部分指标可能不可用或不完整。

吞吐量与模型趋势属于桶级近似指标,当前默认桶粒度仍为 1 小时。非整点“最近 x 小时”查询可能与日志事件窗口存在桶边界差异,接口会返回请求窗口、实际桶覆盖、桶粒度和 approximate 标记。请勿仅依据这些预览指标自动禁用渠道、调整路由、执行账务对账或驱动自治 Agent;自动治理前仍需结合原始日志、告警和人工确认。

活动告警复用当前进程的 CPU、内存和磁盘采样以及管理员既有通知配置,只提供告警、恢复通知和只读查询,不执行自动修复。告警状态与通知队列均为进程内状态,重启后不会保留;多节点部署也不会在本版自动聚合为跨节点 Incident。渠道/模型性能列表默认最近 1 小时、最长 168 小时,仅在管理员点击“应用筛选”或“刷新”后执行,模型详情在打开抽屉后按最近 24 小时加载。生产部署应监控大日志库查询负载,并在发布前重新构建管理端资源。

本版还调整了账户安全和计费失败语义:用户表新增 session_generation,密码、Passkey、2FA、Telegram 绑定等安全事件会撤销其他登录会话;密码恢复还会撤销管理 Access Token 和全部 API Token。上游已经接受异步任务、但本地最终结算尚未完成时,接口会返回 409 billing_settlement_pendingtask_id,调用方不得自动重复提交,应继续按任务 ID 查询或交由管理员对账。对于已经存在 pending / manual 正向最终结算的用户,新付费请求是否返回 403 billing_reconciliation_pending,由根管理员默认策略和单条审阅覆盖共同决定;默认策略为允许。管理员“审阅并关闭”只关闭运维告警并留下审计记录,不会把结算标记为 applied、改动余额或停止持久化恢复。PreConsumedQuota 现在仅作为请求前的预留额度下限,不是最终收费下限。

Note

本稿以远端正式标签 v1.0.574a7ed3e)为基线,当前本地与 origin/cscitech 均为 7aa40757,相对基线新增 127 个提交、提交态差异涉及 256 个文件;工作树没有未提交的源代码变更。0114540d 之后新增的 27 个提交、34 个差异文件,主要补齐 SmartOps 计费结算对账证据、可配置用户阻断、管理员审阅/批量关闭、财务快照选择、并发冲突保护及六语言界面。此前截至 0114540d 的 CodeRabbit 全量审查与修复记录继续保留,但不把该审查结果误称为覆盖当前最新 HEAD。Passkey 首次注册仍遵循既定兼容契约:已有 2FA 或 Passkey 时必须使用强方式,没有强凭据的密码账户可使用现有密码,OAuth-only 且没有其他凭据的账户可使用刚完成 OAuth 登录授予的用途受限 grant。本稿位于 Git 忽略的 .tmpv1.0.5 已包含的既有能力和说明不在本版重复,正式创建 v2.0.0-smartops.pre1 标签前仍应按最终标签重新核对范围、审查状态与构建产物。

MAX API 2.0:开启智能运维时代

以全新的 智能运维中心 为核心,MAX API 2.0 将主机资源告警、渠道与模型性能分析、系统信息和计费结算对账整合为统一的管理员运维工作台。

GitHub 地址

https://github.com/MAX-API-Next/MAX-API/releases/tag/v2.0.0-smartops.pre1

Highlights

Major Update: 智能运维中心

智能运维中心v2.0.0-smartops.pre1 的核心重大更新。它把主机资源告警、渠道与模型生产性能、系统信息和计费结算对账集中到统一管理员入口,并以只读证据、显式数据质量边界、角色权限和人工审阅为基础,为后续可控运维自动化建立安全边界。

  • 智能运维中心升级为统一运维入口:后台集中提供“活动告警”“渠道性能”“模型性能”“系统信息”四个模块;告警与性能视图对管理员开放,系统信息继续仅对超级管理员开放。
  • 主机资源异常可主动通知管理员:CPU、内存或磁盘连续两个有效新样本超过配置阈值后触发告警,恢复时发送恢复通知,并在管理端活动告警页持续展示当前进程仍在触发的项目。
  • 渠道与模型提供独立生产性能视图:渠道性能按渠道/模型/分组定位问题,模型性能汇总所有模型的请求、错误、消耗额度、成功率、延迟、重试和吞吐量,均支持 1–168 小时自定义查询与独立排序。
  • 模型详情提供运维级性能证据:按需展示模型级 TPS、平均延迟、成功率、各分组性能,以及最近 24 小时延迟趋势和可用率趋势。
  • 模型级指标改为后端加权汇总:成功率按请求数、TTFT 按样本数、吞吐量按总输出 Token/总生成时间计算,避免流量不均衡时跨分组简单平均导致结果失真。
  • 大日志库默认不自动查询:页面初次进入不会加载数据,仅在“应用筛选”或“刷新”时计算;默认最近 1 小时,并允许输入 1–168 小时的自定义窗口。
  • 观测结论显式携带数据质量边界:除日志开关、历史回填、截断和弱关联标记外,吞吐量明确区分 availablecollection_disabledno_samplesquery_failed,并披露实际桶覆盖范围。
  • 不新增数据库表即可迁移接入:首阶段直接复用现有日志库和渠道元数据,通过只读聚合 API 提供能力,主库与独立日志库之间不执行跨库 JOIN,也不读取渠道密钥或上游配置。
  • 实际路由分组进入日志与计费上下文:自动路线、Token 多分组路线及 Affinity 命中后,会同步记录实际选中的分组,使生产性能中的分组维度与真实运行路线保持一致。
  • SmartOps 增加计费结算对账闭环:活动告警页集中展示仍处于 pending / manual 的正向最终结算、未结资金、重试与错误证据;根管理员可配置默认用户阻断策略,管理员可按当前 revision 原子批量审阅并关闭告警。审阅状态与真实资金结算状态严格分离,不会通过关闭告警伪造扣费成功或改动余额。
image-1 image-2 05b74ec8398cd5df72fccfdb155842c6 a7c7cef3b9c82d344ed9e770ef518370 image

Other Highlights

  • 充值结算增加事务化钱包上限保护与人工对账状态:Epay、Stripe、Creem、Waffo、Waffo Pancake 与管理员补单统一在本地事务内完成订单状态变更、额度入账和持久化缓存失效任务登记;外部已付款但钱包上限阻止入账时,订单会进入“已付款,待对账”,避免继续停留在待支付或重复触发回调重试。
  • Relay 兼容性集中补强:Responses 保留缓存键与惩罚参数,Claude 修复无参数工具转换,Ollama 补齐 reasoning 和工具上下文,Gemini 模型列表及阿里云映射模型路由也按实际上游协议处理。
  • 高风险账户操作统一增加分作用域重新验证:Passkey 注册或替换、2FA 初始化与启用、Telegram 绑定,以及 API Token 创建、单个明文查看和批量导出,均要求当前用户在 5 分钟内使用 2FA、Passkey 或受限密码回退完成对应 scope 的 step-up 验证;OAuth-only 账户仅在重新完成受支持 OAuth 登录后取得用途受限的 oauth_reauthentication grant,用于首次 Passkey、2FA 或 Telegram 绑定引导。
  • 安全凭据变化可立即撤销其他设备会话:Cookie 会携带并校验用户 session_generation;密码修改或恢复、Passkey 增删、2FA 启停或备用码重建、Telegram 绑定都会原子递增代次,同时保留当前操作会话并清除其旧 step-up 状态。
  • 预扣费与最终结算改为明确的可恢复生命周期:管理员预扣配置只作为完整估算后的预留下限,实际用量仍按原始最终额度结算;资金结算成功前不会提前写入成功消费日志、请求计数或渠道用量,失败结果由持久化结算记录和 effect 恢复。
  • 异步任务在结算恢复期间保持可查询:上游已接受的 Midjourney、Suno、视频及通用任务不会因本地最终结算暂时失败而伪装成功或直接转为失败;资金状态恢复前阻止终态切换,资金已应用而仅剩日志 effect 时继续正常轮询。

New Features

  • 新增管理员接口 GET /api/smart-ops/alerts 和管理端路由 /smart-ops/alerts,按 5 秒间隔读取当前进程活动告警,并提供加载、空、错误、手动刷新和窄屏横向滚动状态。
  • 新增 CPU、内存和磁盘持续超阈值检测:连续两个有效新样本才触发,活动期间去重,指标恢复后发送恢复事件;通知复用每位管理员已经配置的 Email、Webhook、Bark 或 Gotify 渠道。
  • 新增管理员接口 GET /api/smart-ops/channel-performance,支持 hourschannel_idmodelgroupstartendlimit 查询条件,并限制最大时间窗口和返回行数。
  • 新增管理员接口 GET /api/smart-ops/model-performanceGET /api/smart-ops/model-performance/detail;前者支持 hoursmodelgroupstartendlimit,后者按模型返回最近 24 小时的分组指标、加权汇总、趋势、桶覆盖和采集状态。
  • 新增管理端路由 /smart-ops/alerts/smart-ops/channel-performance/smart-ops/model-performance/smart-ops/system-info 及独立“智能运维中心”侧边栏视图。原用户侧数据看板继续保留,管理员模型性能作为独立运维视图追加,不替代用户功能。
  • 渠道性能新增摘要与明细展示,包括观测日志事件、消费日志、已记录错误日志、消耗额度、估算成功率、日志延迟、重试次数、探测延迟和最近观测时间。
  • 模型性能新增全模型结果,包括渠道数、观测日志事件、错误日志、消耗额度、估算成功率、日志延迟、吞吐量 TPS、重试次数和最近观测时间。
  • 渠道与模型表格的关键指标均支持独立升序或降序排序;无数据指标固定排在有效数值之后,不改变 API 原始结果顺序。
  • 模型性能详情抽屉复用并完善模型广场的性能展示方式,提供各分组性能、延迟趋势和可用率趋势,并仅在打开详情后请求数据。
  • 新增详情抽屉、结果截断提示、空状态、错误状态和数据质量标签;表格最多展示 200 行时,摘要卡片仍覆盖全部符合条件的日志。
  • 智能运维中心相关文案已同步至中文、英文、法文、日文、俄文和越南文。
  • 新增管理员只读接口 GET /api/smart-ops/billing-settlements,默认返回最早 100 条、最多 200 条未关闭对账告警,并同时提供 pending / manual 数量、阻断记录数、受影响用户数、最早创建时间和截断标记;返回字段排除 Token 密钥、effect payload、请求正文等敏感内容,错误文本在展示前会脱敏和清理。
  • 新增根管理员接口 PUT /api/smart-ops/billing-settlements/blocking-policy,可持久化“默认阻止受影响用户”策略;普通管理员可以查看当前策略但不能修改。
  • 新增管理员批量审阅接口 POST /api/smart-ops/billing-settlements/reviews,支持一次原子关闭 1–200 条当前告警;同时保留单条 POST /api/smart-ops/billing-settlements/:id/review,用于记录 3–1000 字审阅说明和单条用户阻断覆盖。两类操作都会记录执行管理员和目标记录审计信息,但不会改变财务结算状态。
  • 活动告警页新增计费对账摘要、只读证据表、全选/逐条选择、批量关闭、阻断策略开关、截断提示和独立错误状态;前端以 Zod 校验对账响应,详情加载失败或响应畸形时仍保留主 SmartOps 告警。
  • Ollama 渠道新增 reasoning_effort / Responses reasoning.effort 到原生 think 的映射,并在多轮工具调用中保留 assistant reasoning、tool call ID、工具名称和工具响应关联。
  • 充值订单新增 paid_reconciliation 状态:外部支付已确认但本地钱包容量校验无法入账时,系统持久化该状态并正常确认支付回调,管理员可在账单历史中识别并手动完成订单。
  • 新增 POST /api/user/sessions/revoke,允许用户在完成 credentials 安全验证后撤销其他设备会话,并保持当前设备继续登录。
  • 新增 credentialsapi_tokenpasskey_register 与仅由新鲜 OAuth 登录授予的 oauth_reauthentication 安全验证作用域;管理端使用全局安全验证 Provider,在受保护请求返回 VERIFICATION_REQUIRED 后弹出验证框,成功后自动继续原操作,取消或验证失败不会误执行后续请求。
  • Telegram 绑定新增 POST /api/oauth/telegram/bind/state 初始化接口和 POST 绑定流程;state 同时绑定当前浏览器会话、用户、provider 与 bind intent,默认 5 分钟有效并在成功绑定事务中一次性消费。

Improvements

  • SmartOps 告警通知改为 3 个固定、有界、按“节点 + 资源”确定性分片的异步 worker,总队列容量仍为 24;不同节点或资源的事件可并发投递,不再被单个慢重试阻塞,同一事件的 firingresolved 仍进入同一 worker 并保持顺序。收件人查询、通知限流及单个管理员发送失败均使用有限退避重试,已经成功送达的管理员不会因其他收件人失败而重复收到同一事件。
  • 告警通知限流键加入节点、资源和 firing / resolved 状态,避免不同节点或恢复事件互相占用同一个通知槽;队列满时记录丢弃事件,不阻塞系统采样和请求处理。
  • 聚合查询仅纳入具有渠道和模型标识的 Consume/Error 日志,并排除渠道测试、违规费用、任务账务调整等已知非生产调用记录,减少计费记录对渠道性能判断的干扰。
  • 估算成功率仅在消费日志和错误日志均启用时返回;重试指标仅在历史重试标记可确认就绪后返回,避免使用 0 伪装“不可观测”。
  • 日志延迟只使用非重试样本并保留现有整秒精度;渠道探测延迟单独来自渠道元数据,不会混入生产日志延迟或成功率计算。
  • perf_metrics 新增模型级加权汇总:成功率基于总成功数/总请求数,平均延迟基于请求样本,TTFT 基于独立 TTFT 样本数,TPS 基于总输出 Token/总生成时间;趋势同样按时间桶合并原始计数。
  • 性能指标查询新增请求窗口、实际桶起止、桶秒数和近似标记;非整点窗口不再被展示为与日志事件完全等价的精确窗口。
  • 性能采集状态明确区分正常可用、采集关闭、窗口无样本和查询失败;日志聚合仍可用时,吞吐量故障不会遮蔽其余模型结果。
  • 行级查询使用 limit + 1 判断截断,摘要使用独立聚合覆盖完整筛选范围,避免因表格行数限制低估总请求量和错误量。
  • 日志聚合与渠道标签查询保持分离,独立 LOG_DB 部署无需跨数据库关联;主库只返回渠道名称、类型、状态、探测延迟和探测时间等安全元数据。
  • 后端通过窄化的只读 Reader 接口隔离当前 legacy log 数据源,为后续替换为 Attempt/Evidence 观测模型保留稳定的控制器与前端契约。
  • 模型广场与智能运维详情共享的性能组件改为优先使用后端模型级汇总,不再由前端对分组指标二次平均;单分组旧响应仍保留兼容回退。
  • 智能运维列表改为完全手动查询,详情改为按需加载,避免页面进入、筛选输入变化或抽屉未打开时对大日志库和性能指标重复计算。
  • 智能运维导航按角色生成:管理员可访问渠道/模型性能,超级管理员额外访问系统信息;后台模块显隐设置新增智能运维中心控制项。
  • 计费结算积压现在作为独立 SmartOps 活动告警投影:关闭审阅后会立即刷新当前进程内告警,但不会把“告警已关闭”误发为“资金已恢复”;禁用主机性能监控也不会清除计费告警,较旧的周期采样不能覆盖更新的管理员审阅结果。
  • 对账查询在 MySQL/PostgreSQL 使用只读 Repeatable Read 事务获取摘要与明细快照,并以 limit + 1 判断截断;阻断记录数与受影响用户数按完整筛选范围统计,不会因表格最多 200 行而低估。
  • 管理员审阅以结算 id + revision 校验当前财务快照,批量操作在单一事务中全部成功或全部回滚;记录按 ID 升序取得更新锁,并在更新后以一次查询读回完整批次,降低重叠审阅的数据库死锁与 N+1 查询风险,读回失败时同样整体回滚。
  • 对账界面的状态、时间、数量、角色和计费术语已在中、英、法、日、俄、越六种语言中统一;前端 mutation 错误优先使用有效业务消息,空白或异常响应安全回退到本地化提示。
  • 充值入口在创建外部支付订单前按最终可入账额度检查钱包容量;结算阶段使用带余额上限谓词的条件更新,避免并发的不同订单分别通过预检查后共同把钱包推过上限。
  • 充值结算将订单成功状态、用户额度更新和持久化缓存失效任务置于同一数据库事务,提交后再派发缓存失效;支付金额、币种或支付渠道不匹配时不会提前完成本地订单。
  • Waffo 与 Waffo Pancake 在 Tokens 展示模式下统一容量预估与订单入账单位;Waffo 进一步从同一归一化额度快照推导订单 Amount、可入账额度和外部支付报价,避免报价与最终入账采用不同基数。
  • RelayInfo 会从 Chat、Responses、Claude 和 Gemini 请求读取 reasoning effort,并在 Param Override 修改或删除相关字段后同步最终状态,使日志与审计记录反映实际发送给上游的参数。
  • 控制台公告、FAQ、API 信息和 Uptime Kuma 配置的长度限制改用 JavaScript UTF-16 code unit 语义,前后端对 emoji、代理对等字符的计数保持一致;JSON 解析同时统一改用项目包装器。
  • 渠道编辑页传入模型抓取弹窗的当前模型列表改为稳定的 memoized 引用,减少父组件重渲染时无意义的派生数组变化;Turnstile 令牌消费 helper 同时补充显式返回类型,固定调用方可依赖的字段契约。
  • 分阶段计费本地估算器补齐 hourminuteweekdaymonthday 时区函数,并在无效时区时回退 UTC,使管理端试算与后端表达式运行环境保持一致;可视化编辑器现在也允许删除新建的兜底档位,并自动保证最后一档仍为兜底。
  • 前端测试入口改为统一发现 Bun 支持的测试文件,按文件过滤和 --shard 分片,隔离会修改浏览器全局状态的测试,并将子进程并发固定为串行,减少 JSDOM/React 全局污染;GitHub CI 现在会在类型检查与构建前执行前端测试。
  • 默认控制面限流在保持各自时间窗口不变的前提下放宽:Web 请求由 60 提升至 600、关键操作与关键路由由 20 提升至 200、账户级登录由 10 提升至 100、用户搜索由 10 提升至 100;所有现有环境变量覆盖仍然有效,并新增默认值回归测试。
  • PreConsumedQuota 统一作用于倍率、固定价格、按次任务、rate-card、分阶段表达式和 Alpha Search 等付费模式,并在模型/分组覆盖及确定性附加费汇总完成后只应用一次;免费分组继续保持零预留。
  • 预扣配置更新现在严格要求非负整数,并在写数据库前完成规范化;负数、小数、溢出值和解析失败不再静默变成零或污染运行时配置。
  • 任务跨渠道或分组重试时会根据新的完整估算幂等补足预留额度,任务占位记录保存实际已预留额度,最终任务额度与钱包/订阅、Token 额度在同一持久化结算事务中推进。
  • 用户、Token 和安全凭据缓存失效继续使用事务内持久化 outbox,并以待处理失效任务作为读取围栏;即使 Redis 删除暂时失败,也不会继续信任已确认过期的用户或 Token 缓存快照。
  • API Key 安全验证提升为页面级共享流程,创建、查看和批量导出可以在验证完成后恢复原操作;明文查看弹层关闭后会清除缓存,即使迟到请求随后返回,也不会把密钥重新写回已关闭的界面状态。
  • Passkey 普通登录使用计数只允许更新同一用户、同一 credential ID 的现存凭据,已被明确替换的旧凭据不会因迟到使用记录而重新覆盖当前 Passkey。
  • Passkey 认证结果改为单调合并:签名计数和最后使用时间不会被较旧完成结果回退,克隆警告一旦出现不会被后续旧状态清除;数据库更新字段同时通过 GORM schema 回归校验实际列名。
  • Passkey 删除的限定 2FA/Passkey 验证流程统一复用页面级安全验证 Provider,避免局部组件再创建第二个验证对话框;OAuth 登录只授予用途受限的重新认证 scope,Telegram 登录不再产生任何 step-up grant。
  • 正向最终结算积压查询新增 (status, funding_delta) 复合索引;索引由 GORM schema tag 创建,保持 SQLite、MySQL 与 PostgreSQL 迁移路径一致,减少阻断新付费请求和运维积压统计时的扫描成本。
  • 超时任务游标查询新增 (submit_time, id) 复合索引,并统一重置测试中的包级游标状态,减少周期性分页扫描的排序成本与跨用例污染。

Bug Fixes

  • 修复 CPU、内存或磁盘探针失败时零值可能被当作有效采样、进而误判恢复的问题;每项指标现在独立携带有效性和采样时间,无效或重复消费同一采样时不会累计触发次数或关闭活动告警。
  • 修复监控阈值设置为 0 时仍可能生成“阈值 0% 已恢复”通知的问题;0 现在明确表示禁用对应资源告警,并静默清除该资源的进程内活动状态。
  • 修复管理员通知中的一个收件人失败会导致已经成功的收件人再次收到同一告警,以及触发与恢复、不同节点和不同资源共用限流键的问题。
  • 修复活动告警页百分比始终使用英文小数点、API 未返回具体消息时错误兜底仍显示英文的问题;百分比现在按当前语言格式化,兜底错误通过 i18n 展示,法语“重试次数”译文也同步修正。
  • 修复外部支付已经成功、但最终钱包上限校验拒绝入账时订单仍保持待处理并让支付供应商重复回调的问题;本地事务现在在“不入账”的同时持久化待对账终态,后续重复回调保持幂等。
  • 修复分阶段计费表达式在管理端使用时间函数时本地估算失败、以及新建兜底档位无法删除的问题;编辑器切换模型时的状态与回调隔离测试也进一步加固。
  • 修复模型详情将不同流量规模分组的成功率、延迟、TTFT 和 TPS 直接做算术平均的问题;模型级结果现在由后端原始计数加权计算。
  • 修复非整点自定义窗口未披露性能桶实际覆盖范围、容易让吞吐量与日志指标被误认为同一精确时间窗的问题;接口和界面现在展示桶粒度及近似质量标记。
  • 修复性能采集关闭、窗口内无样本和指标查询失败均被表现为“无吞吐量”的问题;三种状态现在可分别识别并提示。
  • 修复模型可用率趋势纵轴固定为 95%–100%,导致严重故障时低可用率折线被截断或绘制越界的问题;纵轴会根据实际最低值动态扩展,不会把低值强行截断到 95%。
  • 修复自动路线、Token 多分组路线和 Affinity 命中后只更新自动分组上下文、未同步实际使用分组的问题;日志、计费和生产性能聚合现在可以读取真实选中的分组。
  • 修复主数据库与独立日志数据库使用不同方言时,日志表保留列 group / key 可能沿用主库引号规则的问题;PostgreSQL 使用双引号,MySQL 与 SQLite 使用反引号。
  • 修复“无重试指标”和“重试次数为 0”无法区分的问题;历史回填未完成或就绪状态不可确认时,API 返回空值并附带质量标记。
  • 修复明细排序中缺失值可能参与数值比较或扰乱原始顺序的问题;缺失值始终置后,相同指标保持稳定顺序。
  • 修复 Gemini 风格请求通过 /v1/models?key=...x-goog-api-key 认证后错误进入单模型查询、无法返回模型列表的问题。
  • 修复阿里云图片生成和编辑在配置模型映射后仍按客户端原始模型选择同步/异步端点的问题;路由、请求头和转换逻辑现在统一依据 UpstreamModelName
  • 修复 Claude 转换会丢弃无参数函数工具、对非字符串 schema type 发生类型断言 panic、发送空 tools、误将非 function 工具转换为函数,以及所有工具均被过滤后仍发送强制 tool_choice 的问题。
  • 修复 Chat Completions 与 Responses 双向转换遗漏 prompt_cache_keyfrequency_penaltypresence_penalty 的问题;惩罚参数现在使用可空数字类型,显式 0 仍会保留,字符串或对象等非数字 JSON 会在请求解码阶段被拒绝,Codex 渠道则继续移除其不支持的惩罚参数。
  • 修复 Ollama 请求转换丢失 assistant reasoning、tool call ID 与无显式名称的工具响应关联的问题;畸形 reasoning 或 JSON Schema 现在返回明确错误,不再静默忽略。
  • 修复 Param Override 改写 reasoning 参数后,日志仍记录覆盖前 effort 的问题;直通请求无法可靠解析最终正文时不再记录推断值。
  • 修复自定义 OAuth 绑定前端将数字 provider_id 当作字符串、读取不存在的 external_id,导致绑定状态、用户标识和解绑请求不一致的问题;现统一使用 provider_user_id 契约。
  • 修复 Turnstile 登录令牌在失败重试时被重复使用的问题;提交后立即消费令牌并重新挂载组件,令牌过期时同步清空本地状态。
  • 修复渠道编辑页抓取模型时仍以已保存模型列表去重、忽略表单内尚未保存修改的问题;新增与编辑场景现在都使用当前表单状态。
  • 修复 Waffo 与 Waffo Pancake 在 Tokens 展示模式下处理小于一个计价单位的请求时,可能按原始 Token 数量得到极小报价或错误拒绝、却按最少一个单位入账的问题;两条支付路径的报价、容量校验和订单入账现在均统一基于归一化后的实际最小入账单位。
  • 修复密码修改或密码恢复后其他浏览器 Cookie 仍可最长继续使用原会话的问题;认证中间件现在读取最新用户代次并拒绝旧代次 Cookie,密码恢复还会在同一事务中清空管理 Access Token、禁用全部 API Token 并登记缓存失效。
  • 修复仅凭普通登录 Cookie 即可注册或替换 Passkey、初始化 2FA、绑定 Telegram,或创建并导出长期 API Token 的问题;相关入口现在均绑定当前用户和明确的安全验证 scope,强验证方式存在时密码不再作为旁路。
  • 修复 Telegram 登录或绑定签名缺少新鲜度限制、绑定回调缺少会话 state 且可长期重放的问题;auth_date 现在只接受 5 分钟窗口并允许最多 1 分钟时钟偏差,绑定 state 对用户和浏览器会话校验并原子消费。
  • 修复安全凭据变化后旧 step-up 状态仍可能继续复用的问题;当前会话更新到新代次时会同步清除安全验证时间、方法、用户、scope 和 Passkey ready 标记,下一项敏感操作必须重新验证。
  • 修复 API Token 明文请求在弹层关闭后迟到返回、仍可能重新进入前端缓存的问题;关闭动作现在使当前 reveal generation 失效,后续响应只返回给原调用链而不再持久化到已关闭视图。
  • 修复最终补扣超过钱包或 Token 剩余额度时,使用量、请求计数、渠道统计和消费日志可能先于资金结算写入的问题;这些投影现在随持久化 settlement effect 在资金成功后精确执行一次,显式最终额度为零也不会被误当作“未提供”。
  • 修复异步任务已经被上游接受、但本地最终结算失败时仍可能向客户端释放成功响应或把任务标记为失败的问题;现在返回不可自动重试的 409 与任务 ID,并保留任务轮询。该用户后续新付费请求是否阻断,改由根管理员默认策略和单条结算审阅覆盖决定,不再把所有未决正向结算无条件视为阻断。
  • 修复异步任务、任务行与最终结算均已提交后,成功响应写入失败仍被静默吞掉的问题;现在返回 409 write_task_response_failed 和公开 task_id,明确阻止客户端重复创建,同时不会退款、重复结算或把已提交任务改为人工失败状态。
  • 修复任务重试切换到更高价格路由后仍沿用首次较小预留、以及任务行提前写入尚未支付的最终额度的问题;预留会按累计目标补足,最终额度通过任务 CAS 与资金分录原子更新,冲突时整组账务变更回滚。
  • 修复 Alpha Search 先应用预扣下限再叠加工具附加费、导致“下限 + 附加费”被误当作预留的问题;现在先组成完整估算,再计算 max(完整估算, PreConsumedQuota),结算仍以未抬高的真实估算为基础。
  • 修复资金已经应用、但消费日志或用量 effect 尚待重放时异步任务轮询被错误阻塞的问题;轮询只受 funding settlement 状态控制,effect-only pending 不会阻止供应商状态推进。
  • 修复登录成功被直接当作 credentials step-up 的问题:安全验证中间件只接受明确的 2fapasskey、受限 password 或重新完成的 OAuth 凭据确认,旧的 login:* 标记会被判定无效。
  • 修复 2FA 启用、禁用或备用码重建已经在数据库提交成功,但当前 Cookie 保存失败时仍返回操作失败、诱导用户重复执行的问题;现在保留已提交的成功结果并记录会话保存错误,当前设备后续可能需要重新登录。
  • 修复 Telegram 绑定对话框仅因 onSuccess / onOpenChange 回调引用变化就卸载并重新创建 Widget script 的问题;回调改由稳定 ref 转发,当前实例可跨 callback-only rerender 保持挂载。
  • 修复密码恢复成功消息未本地化、并以“如有需要”弱化 API Token 已撤销提示的问题;后端现在通过 i18n 返回明确消息,前端六种语言均要求用户登录后重新创建 Token。
  • 修复非持久化计费资金变更进入 outcome-unknown 状态后缺少即时运维可见性的问题;现有 SmartOps 管理员通知链路会收到只读告警,包含用户、Token、请求差额和已应用差额,系统仍停止自动重试且不推断实际资金结果。
  • 修复 nil context 记录消费日志时用户名为空的问题;无请求上下文时现在回退读取用户归属,同时保留上下文中已有用户名。
  • 修复 API Token 批量创建在中途异常后成功数量未收尾、造成用户无法确认已创建凭据的问题;现在保留已创建数量并完成提示、关闭和刷新流程,后续验证重试从首个未创建项继续。
  • 修复控制台复制 API Key、连接信息或带密钥的 Dashboard curl,以及打开聊天预设时可能提前读取明文、为公共链接不必要地读取 Token,或因异步安全验证而被浏览器拦截新窗口的问题;相关操作现在仅在用户明确执行时进入共享 api_token step-up,公共预设不读取密钥,受保护链接先同步打开无 opener 的占位页,取消或失败会关闭占位页,剪贴板写入失败也不再提示成功。
  • 修复 2FA 禁用和备用码重建入口缺少关键操作限流、资金结果不明确告警在会话锁内发送,以及普通前端错误可能直接暴露内部异常文本的问题;相关路由、告警发送顺序和错误兜底现已统一加固,并补充异步测试稳定性回归。
  • 修复安全验证方法与 scope 在 controller / middleware 间重复定义、任务轮询测试硬编码结算 operation key,以及聊天预设验证失败可能重复提示或展示内部错误的问题;共享契约、测试夹具和前端错误处理现与实际生产路径保持一致。
  • 修复超时任务清理只限制状态转换数量、却可能每 15 秒扫描并逐条查询大量 pending/manual 结算任务的问题;单轮现在同时限制最多转换 100 条和扫描 2000 条,并使用稳定的 (submit_time, id) 游标跨轮续扫。分页查询错误不再被误判为“扫描结束”,而是记录错误、保留当前游标并停止本轮扫描。
  • 修复订阅计费日志在资金结算前冻结 subscription_post_deltasubscription_usedsubscription_remain,导致持久化 effect 重放后仍显示预扣阶段数据的问题;effect 现在保存不可变订阅快照,在持久化前写入 billing_sourcebilling_preference 和订阅计划标识,并使用实际已应用差额生成最终日志元数据。
  • 修复自定义协议聊天预设测试将所有含密钥模板替换成 HTTPS、从而无法发现 desktop-chat:// 协议被破坏的问题;测试解析器现在只替换密钥占位符并保留原协议。
  • 修复 Passkey 删除遇到 403 VERIFICATION_REQUIRED 时被 hook 吞掉并返回 false,可能让安全验证续接误判操作已完成的问题;该错误现在会继续抛给共享 step-up 流程,普通删除传输异常也统一走安全的服务端错误兜底。
  • 修复 Passkey 删除路由缺少与注册入口一致的 IP/用户关键操作限流和禁缓存中间件,以及普通注册传输错误直接显示内部异常文本的问题;删除现已纳入凭据路由滥用控制,注册错误统一走安全的服务端错误兜底。
  • 修复 Telegram 绑定初始化或提交返回业务失败时,界面总是显示通用错误而丢失后端安全业务消息的问题;合法的 response.message 现在同时用于内联错误状态和共享通知,网络异常仍使用本地化通用兜底。
  • 将 API Token 专用安全验证 Hook 从通用续接状态机中拆分为独立模块,继续通过原 barrel 导出,降低长文件职责密度且不改变任何调用方导入;中文“退出其他设备”操作文案同时明确为“退出其他设备登录”。
  • 修复 Telegram 登录 OpenAPI 契约未声明签名或 state 失败时的 403 响应问题,并补充契约回归断言,文档现在与实际安全校验行为一致。
  • 修复密码恢复成功页复制密码按钮缺少可访问名称、图标被屏幕阅读器重复读取的问题;按钮现在提供本地化名称,装饰图标标记为隐藏,并补齐六种语言文案。
  • 修复密码恢复接口返回 success: false 时因前端跳过全局业务错误提示而无任何反馈的问题;页面现在优先展示后端安全消息,并在消息缺失时使用本地化“重置失败”兜底。
  • 修复分阶段计费在分组刷新时把 PreConsumedQuota 预留下限写入冻结估算、可能把预留 floor 误用为结算基数的问题;快照现在保留未抬高的分组估算,Alpha Search 附加费汇总完成后再统一计算最终预留额度。
  • 补齐 Passkey 删除接口的 DELETE step-up 路由回归、固定 Alpha Search 工具价格测试夹具,并修正前端安全验证 Hook、中文 API 令牌术语和异步测试环境初始化,降低全局配置与异步时序导致的测试漂移。
  • 修复已有结算记录未持久化 effect payload 时仍被误判为“由后台重放拥有消费日志”、从而丢失本次消费记录的问题;调用方现在仅在持久化记录确实拥有 effect 时跳过本地投影,资金结算失败或结果不明确时仍不会写入成功用量。
  • 修复 TryUserAuthTokenOrUserAuth 对会话代次采用两套重复判断、任务超时扫描游标 OR 条件依赖 ORM 隐式分组,以及测试清理可能删除其他用例用户的问题;认证、查询括号和测试数据边界现已统一并有回归覆盖。
  • 修复 OAuth grant 收窄后 OAuth-only 账户无法初始化首次 2FA 的兼容性回归;2FA setup/enable 只额外接受刚完成 OAuth 登录产生的 oauth_reauthentication,不会把该 grant 扩大到 API Token、Access Token、账户删除或其他敏感操作。
  • 修复密码修改事务已经递增 session_generation,但控制器仍可能把旧值写回当前 Cookie、导致用户改密后下一次请求立即被登出的问题;密码更新方法现在返回同一事务内读回的已提交代次,并由控制器保存该值。
  • 修复超时任务在 CAS 失败或竞争失败的 continue 分支中跳过预算终止检查、单轮可能超过 100 次转换尝试的问题;转换和扫描预算现在均在每条任务处理开始前检查。
  • 统一账户删除、管理 Access Token、会话撤销、Passkey 删除及 API Token 创建/查看/导出路由的 step-up scope 常量,避免字符串常量调整后部分路由静默使用旧值。
  • 修复安全验证 scope 列表首项为空时跳过后续真实 scope 匹配的问题;中间件现在忽略空项,并仅以是否存在有效非空 scope 决定受限密码/OAuth 验证的使用边界。
  • 修复零差额任务结算跳过任务额度漂移检查的问题;结算事务现在会先锁定并核对任务当前额度,非零差额继续使用条件更新,零差额不再依赖不同数据库对同值 UPDATERowsAffected 语义。
  • 修复 Axios 响应状态为 204 时后端 message 可能覆盖本地化“内容不存在”提示的问题;204 现在同时识别 response.status 与错误状态,并优先于响应 title/message 返回。
  • 修复 2FA 删除对象缺少有效用户 ID 时仍进入事务并尝试锁定 id = 0 用户的问题;非正用户 ID 现在会在事务开始前明确拒绝,合法用户仍保持原有行锁保护。
  • 修复异步任务提交的持久化结算 effect 未保存请求时 Token 名称、Token 随后删除或查询失败时消费日志名称可能为空的问题;日志投影现在同时携带 Token ID 与请求时名称,不改变资金差额、结算键或重试语义。
  • 修复 Access Token 自动生成等 fire-and-forget 安全验证调用在方法发现失败后可能产生未处理 Promise 拒绝的问题;共享验证流程会在保留显式调用方原始 reject 契约的同时观察后台拒绝,并继续通过既有安全错误路径报告失败。
  • 加固 Midjourney 结算回归:测试现在分别断言首次应用返回 alreadyApplied=false、同一 operation key 重放返回 true,并在重放前记录结算行基线,确保重复调用不会新增结算记录或重复扣退款。
  • 修复免费任务在没有创建 Billing 会话、因此实际未预留任何额度时仍可能把估算目标写入任务占位的问题;免费路由现在只记录实际预留的 0,既有付费尝试切换到免费重试时仍保留原预留,直到成功按零额度结算。
  • 修复 Midjourney 非终态响应与数据库中既有失败状态合并后,可能绕过 submission-finalize 的 pending / manual 门禁并提前退款的问题;终态判断、失败判断和退款现在统一基于同一份合并状态,资金结算应用后才原子进入失败终态,重复回调不会二次退款。
  • 修复 Suno 轮询在数据库已保存失败状态、但上游本次响应未重复携带失败字段时,可能把任务误判为非终态并绕过 submission-finalize pending / manual 门禁的问题;响应现在先合并到任务副本,再基于合并状态判断终态,资金结算应用前不会写回 100%、创建退款或返还额度。
  • 修复 settlement effect 因缺少稳定请求 ID 或不支持持久化的资金来源而无法建立幂等记录时,结算循环仍等待并重试三次、最终把原始 sentinel 包装为通用失败的问题;该确定性前置错误现在立即原样返回,不触发资金调用、成功状态或消费投影。
  • 统一法语“聊天客户端”和越南语“身份验证”的安全操作术语,并为 API Key 明文生命周期测试的 lifecycle 与 test callback 补齐显式 void / Promise<void> 返回类型。
  • 修复 Telegram 登录功能关闭后匿名调用方仍可创建 OAuth AuthFlow 的问题;state 创建现在与功能开关一致,禁用时不会留下可用或待清理的登录 state。
  • 修复 OAuth 登录在账户已有密码、已启用 2FA 或 Passkey 时仍授予 oauth_reauthentication 的范围过宽问题;grant 只用于无其他凭据账户的首次安全凭据引导,并在每次敏感操作前实时重新检查,凭据状态变化会立即清除旧 grant。
  • 修复 2FA setup 返回业务失败时丢弃服务端 response.message 的问题;业务失败直接展示后端安全消息,网络或异常失败仍使用共享本地化错误处理。
  • 固定 Passkey AAGUID 对应既有数据库列 aa_guid,并完善 Alpha Search 测试对共享工具价格 map 原始形状的恢复,避免列名推导歧义和测试后全局配置漂移。
  • 修复主机性能监控关闭或重新初始化时清空整个 SmartOps 活动告警 map、连同计费结算告警一起消失的问题;现在只清除 CPU、内存和磁盘告警,结算告警保持独立。
  • 修复对账详情请求失败或响应结构不完整时可能遮蔽主活动告警的问题;告警轮询与对账证据使用独立查询和错误状态,辅助查询失败不会抹掉已经确认的主要告警。
  • 修复管理员基于旧结算快照审阅、批量处理中部分记录先关闭后遇到冲突、以及重复 ID 可能产生不一致结果的问题;接口现在拒绝过期 revision 和重复目标,并以 HTTP 409 要求刷新,批量事务不会留下部分关闭。
  • 修复管理员在刷新前选中的对账记录发生 revision 变化后仍可能提交旧快照,以及部分选择状态不够明确的问题;选择项现在同时绑定 id + revision,刷新检测到财务快照变化时自动取消旧选择,全选框会明确显示部分选中状态。
  • 修复审阅结论可能被相同旧错误的后台重试无条件清空、或在出现新的失败证据后继续沿用的问题;相同证据保留管理员决定,错误或状态变化会重置审阅字段并重新打开告警,资金恢复为 applied 后则自然退出活动投影。
  • 修复旧数据库中空审阅说明为 NULL 时无法继续更新、同值更新在不同数据库 RowsAffected 语义下被误判冲突,以及多记录审阅锁顺序不稳定的问题;兼容路径与回归覆盖现已统一。

Compatibility Notes

  • 渠道/模型性能和主机活动告警仍不新增数据表;本轮计费对账闭环会在现有 billing_settlements 表新增 reconciliation_reviewed_atreconciliation_reviewed_byreconciliation_review_noteuser_blocking_override 字段及 idx_billing_settlement_reconciliation 复合索引。字段由 GORM AutoMigrate 按 SQLite、MySQL 和 PostgreSQL 兼容 tag 创建;生产升级前仍应备份主库与日志库,并在大表上评估加列和建索引时间。
  • 新增运行时选项 billing_reconciliation_setting.block_user_by_default,默认值为 false:升级后未显式配置时,未决正向最终结算仍会告警,但不会自动阻止该用户的新付费请求;若要保持此前的无条件阻断行为,根管理员需在 SmartOps 活动告警页启用该策略。持久化值无法解析时会失败关闭并按 true 处理。
  • 对账接口均受 AdminAuth 保护,默认阻断策略修改额外要求 RootAuth;修改与审阅接口还应用关键操作双重限流、请求体大小限制和禁缓存。批量审阅最多 200 条,任一记录 revision 已变化时整批返回 409,客户端应刷新后重新选择。
  • “审阅并关闭”只更新审阅元数据和单条阻断覆盖,不会修改 status、余额、已应用差额、effect 状态、updated_at 或财务 revision。仍需由持久化结算恢复或独立人工财务流程真正处理 pending / manual 记录;不能把告警关闭数量当作结算成功数量。
  • 活动告警依赖性能监控已启用及 CPU、内存、磁盘阈值配置;阈值 0 表示禁用对应资源。进程重启会清空活动告警和通知队列,随后必须重新取得两个连续有效样本才会再次触发;本版没有持久化 outbox、跨节点 Incident 聚合或自动修复。
  • 告警通知使用管理员各自既有的 Email、Webhook、Bark 或 Gotify 配置及通知限流。通知队列有界且重试次数有限,极端积压、进程退出或持续外部故障时不能保证送达;关键生产环境仍应保留外部主机监控与独立告警通道。
  • 默认性能桶粒度没有调整,仍沿用当前 1 小时配置;历史小时桶无法恢复为事件级精确数据。接口暴露覆盖元数据是为了说明近似边界,不代表旧数据已被重建。
  • 现有性能指标响应新增模型级 summary 字段,智能运维详情响应新增 coveragecollection_state;均为加法式扩展。使用严格响应结构校验的自建客户端需允许新增字段。
  • 管理端原 /smart-ops/production-performance 会重定向到 /smart-ops/channel-performance,原 /system-info 会重定向到 /smart-ops/system-info;旧书签可继续进入对应页面,但建议更新自定义导航。
  • 渠道性能和模型性能接口受 AdminAuth 保护;系统信息页面及其原有后端接口继续要求超级管理员权限。普通用户侧数据看板没有被迁走或取消。
  • ERROR_LOG_ENABLED=false 时,错误次数只能反映已记录数据,估算成功率会返回不可用;即使重新开启,开启前未采集的历史错误也不会自动恢复。消费日志关闭时同样无法形成完整估算。
  • “估算成功率”按符合条件的 Consume / (Consume + Error) 日志计算,只是日志层启发式指标,不等同于端到端 SLA、用户实际成功率或供应商官方可用性。
  • “日志延迟”来自日志中的 use_time,当前精度为整秒且排除重试样本;“探测延迟”来自渠道测试结果,两者的数据源、采样时点和含义不同。
  • 重试次数依赖现有 is_retryis_error_retryis_empty_retry 标记及其历史回填就绪状态。回填期间请求量和估算成功率仍可查看,但重试次数与日志延迟会暂时显示不可用。
  • 查询默认最近 1 小时,自定义范围会限制在 1–168 小时;接口最多返回 200 个渠道/模型/分组组合,超出时设置截断标记,但摘要仍统计全部匹配记录。
  • 渠道性能和模型性能不会自动刷新,只在“应用筛选”或“刷新”时重新执行只读统计;活动告警页每 5 秒轮询只读接口。智能运维不会主动执行渠道测试、禁用、优先级调整、路由变更或主机修复。
  • 独立日志数据库需要正确配置 LOG_SQL_DSN 与数据库类型。生产升级后应分别在 SQLite、MySQL 和 PostgreSQL 日志库验证保留列引用及聚合性能。
  • 当充值会使用户额度达到或超过当前 int32 钱包上限时,支付请求会在创建外部订单前被拒绝;即使预检查通过,回调或管理员补单仍会在事务内再次校验。接近上限的账号应先消耗或调整额度后再充值。
  • OpenAI-compatible Responses 上游现在可能收到此前在格式转换中被丢弃的 prompt_cache_keyfrequency_penaltypresence_penalty;依赖旧丢弃行为的自建上游应显式配置兼容策略。frequency_penaltypresence_penalty 现在严格要求 JSON 数字,过去可能被透传的字符串、对象或数组会在解码阶段失败;Codex 渠道仍会过滤其不支持的惩罚字段。
  • Waffo 与 Waffo Pancake 的 Tokens 展示模式现在按实际最小入账单位计算外部支付报价。小于一个计价单位的请求不再按原始 Token 数量产生极小报价;依赖旧报价结果的前端提示、支付金额断言或二次开发逻辑需要同步调整。
  • 充值记录状态新增 paid_reconciliation。严格枚举订单状态的二次开发客户端需要允许该值;它表示支付已由供应商确认、额度尚未入账并等待管理员核对,不能当作支付失败或普通 pending。管理员手动完成时仍会重新执行钱包上限条件更新。
  • 分阶段计费的后端表达式语义没有因本次管理端修复而改变;管理端本地估算现在支持后端既有的五个时间函数,无效时区按 UTC 估算。依赖旧版“时间函数试算失败”行为的自定义界面应同步更新。
  • Ollama 的 reasoning effort 仅接受 nonelowmediumhighmaxnone 映射为 think: false,其余映射为对应原生值;不支持的值和畸形 JSON Schema 会直接失败关闭。
  • Gemini 风格 /v1/models 现在接受查询参数 key 和请求头 x-goog-api-key,并返回 Gemini 模型列表结构;原 OpenAI Bearer 认证路径保持不变。
  • 自定义 OAuth 管理端按后端实际响应使用数字 provider_idprovider_user_id。二次开发的前端或 API 客户端若仍依赖字符串 ID / external_id,升级时需同步调整。
  • 管理端入口、路由、排序、对账证据与批量审阅、详情抽屉、动态图表纵轴和六语言文案属于前端构建产物;发布前必须在 web/default 使用 Bun 安装当前依赖并重新构建,不能复用旧 dist
  • bun run test 现在通过 scripts/run-tests.mjs 发现与调度测试,支持 Bun 参数、文件过滤和分片,但会将实际子进程 --max-concurrency 固定为 1 并对浏览器全局测试逐文件隔离。自定义 CI 若依赖旧的单进程并发顺序或直接位置参数行为,应先验证命令兼容性。
  • 用户表新增非空、默认值为 0session_generation 字段,需由现有 GORM 启动迁移完成。未携带该字段的旧 Cookie 仅在用户代次仍为 0 时兼容;用户发生任一受保护安全事件后,旧 Cookie 会被清除并要求重新登录。
  • 安全验证状态最长有效 5 分钟并严格绑定当前用户与 scope,credentials 不能直接用于 api_tokenaccess_token 或账户删除。已配置 2FA 或 Passkey 的用户必须使用强方式重新验证,密码仅在没有更强凭据且目标 scope 明确允许时作为回退;首次 Passkey 注册使用独立 passkey_register scope,OAuth-only 账户重新完成受支持 OAuth 登录后只取得 oauth_reauthentication,该 grant 仅被首次 Passkey、2FA 和 Telegram 绑定路由接受。
  • oauth_reauthentication 仅在账户没有密码、未启用 2FA 且没有 Passkey 时授予,用于首次安全凭据引导;一旦任一凭据在 grant 有效期内出现,旧 grant 会立即失效。AAGUID 的显式 GORM tag 继续使用既有 aa_guid 列,不新增列、不要求数据迁移。
  • Passkey 注册开始/完成、2FA setup/enable、Telegram state/绑定、API Token 创建/查看/批量导出均新增严格 step-up 中间件。直接调用这些接口的二次开发客户端需要处理 403 VERIFICATION_REQUIRED,先调用验证方法接口并携带相同 session 完成对应 scope。
  • Telegram 绑定由无 state 的直接回调改为“POST 初始化 state → Telegram Widget 授权 → POST 绑定”;旧的 GET 绑定调用不再适用。登录签名与绑定签名均要求新鲜 auth_date,缓存的历史 Telegram 签名 URL 将被拒绝。
  • 异步任务提交在“上游已接受、本地结算待恢复”时返回 HTTP 409、错误码 billing_settlement_pendingtask_id。客户端必须把它视为已存在的任务并继续查询,不能按普通 4xx 或网络错误重新创建任务。
  • 异步任务已经完成本地结算、但响应写入失败时返回 HTTP 409、错误码 write_task_response_failedtask_id;这同样表示任务已经存在,客户端应查询原任务,不能自动重建。若底层连接已部分写入,服务端对第二个错误体只能尽力发送,调用方仍应使用请求侧幂等策略和任务查询确认结果。
  • PreConsumedQuota 现在是所有付费定价模式统一的请求前预留下限,不是额外费用或最终收费下限;配置必须为非负整数。此前依赖固定价、按次任务或分阶段计费忽略该设置的部署,升级后可能在请求准入阶段预留更多额度,但最终仍按实际结果退补。
  • 默认限流值已调整为 GLOBAL_WEB_RATE_LIMIT=600CRITICAL_RATE_LIMIT=200CRITICAL_ROUTE_RATE_LIMIT=200LOGIN_RATE_LIMIT=100SEARCH_RATE_LIMIT=100,时间窗口保持原值。希望维持旧阈值的部署应显式设置对应环境变量。
  • 密码恢复现在会撤销管理 Access Token 和全部 API Token。依赖恢复后原 API Key 继续工作的自动化客户端必须重新创建凭据;普通已登录状态下修改密码只撤销其他 Cookie 会话,不会自动禁用 API Token。
  • go.mod 的 Heroku Go 版本覆盖已正式从 go1.18 调整为 go1.25,Heroku 将选择最新可用的 Go 1.25.x 补丁版本;自定义 Buildpack、GOVERSION 或其他构建链不应继续强制 Go 1.18。模块当前声明最低 Go 1.25.1,部署环境应按该要求或更高兼容版本重新构建。
  • tasks 表新增 (submit_time, id) 复合索引 idx_task_timeout_cursor,用于超时任务稳定游标扫描。大规模 MySQL/PostgreSQL 部署应在升级前于最大数据集测量建索引耗时;如启动期建索引不可接受,应使用对应数据库的在线/并发方式预建同名索引,使 GORM AutoMigrate 在启动时识别并跳过重复创建。SQLite 小型部署仍可沿用启动迁移,但同样应先备份。

Verification

  • 已确认远端 v1.0.5 标签指向 74a7ed3e;当前本地与 origin/cscitech 均为 7aa40757,相对基线新增 127 个提交、提交态差异涉及 256 个文件,工作树没有未提交的源代码变更。本稿把 0114540d..7aa40757 的 27 个提交、34 个差异文件作为最新增量核对,没有把已随 v1.0.5 发布的能力重新包装为本版新增功能。
  • CodeRabbit 对 70e621c0 完成的 full review 5059396519(Run ID bf3c06d6-9e7f-42e2-acb6-e8a60bf21440)明确选择 100 个文件并提出 7 条 actionable comments,另有 1 条 outside-diff 规范意见。本轮已修复会话代次回写、超时任务预算、结算查询索引、scope 常量、测试语义与前端显式类型/props 规范;aa_guid 建议经 GORM schema 与持久化回归确认是误报,非持久化结算失败时先写消费日志的重复建议会违反“资金结算未持久化不得投影成功用量/日志”的财务不变量,均未采纳。
  • CodeRabbit 对 f620d796 完成的 full review 5059494629(Run ID c919c6bd-9044-4f34-b119-c13146b0f605)同样明确选择 100 个文件并提出 6 条 actionable comments。提交 00c24e4a 已逐项修复测试导出断言、超时扫描查询错误、durable effect 计费元数据、共享 finalize operation key、密码恢复失败提示和 Passkey 状态展示;另 1 条 Passkey 注册评论为重复误报,生产路由的 begin/finish 均已在处理器前应用 passkey_registercredentialsoauth_reauthentication step-up scope。
  • CodeRabbit 对 00c24e4a 完成的 full review 5059579282(Run ID 48763e3c-a062-471b-a12a-1298fbbf1d6e)再次明确选择 100 个文件并提出 5 条 actionable comments。提交 2a0ba177 已修复空 scope 短路、零差额任务额度冲突、超时游标复合索引、测试游标隔离及 Axios 204 优先级;重复的 aa_guid 建议继续由 GORM schema 守卫和真实 Passkey 持久化测试证明为误报。
  • CodeRabbit 对 2a0ba177 完成的 full review 5059645078(Run ID 7e364985-4205-4e45-af06-5687c2b6c22d)明确选择 100 个文件并提出 4 条 actionable comments。提交 5ce3ee19 已补齐 Passkey remove callback 的显式返回类型、删除 2FA setup 不可达错误分支、移除两层嵌套三元,并等待 React 测试环境异步初始化完成后再执行测试。
  • CodeRabbit 对 5ce3ee19 完成的 full review 5059685917(Run ID 6653dfe3-da9e-4f8a-b545-ec5abb838cea)明确选择 100 个文件并提出 3 条 actionable comments。OAuth reauthentication scope 条目经 controller/secure_verification_test.gomiddleware/secure_verification_test.go 和 OAuth state/intent 流程复核为误报;提交 1e83f0a9 已补齐 API Key mutate drawer 与安全验证续接测试的显式 Promise<void> 返回类型。
  • CodeRabbit 对 1e83f0a9 完成的 full review 5059736071(Run ID 3e56de08-8c5c-4bb6-85a7-d28014735c4e)明确选择 100 个文件并提出 5 条 actionable comments。提交 6f5f0310 已修复空 Token 名称时保留请求时名称、违规费用 effectless finalize 记录改走本地一次性投影,以及 Passkey 卡片装饰图标的显式 aria-hidden;资金来源 sentinel 重试建议因无法证明数据库错误未提交而未采纳,复制 Hook 抽取属于 CodeRabbit 标注的低价值非必要重构,既有 Passkey bootstrap 评论为重复误报。
  • CodeRabbit 对 6f5f0310 完成的 full review 5059965579(Run ID 7ac911b4-c711-46cb-ba0c-7a1ce4f049e7)明确选择 100 个文件并提出 6 条 actionable comments。提交 3cacf45e 已补齐 2FA 删除用户 ID 校验、任务 durable effect 的请求时 Token 名称、React 19 ReactNode 类型导入、API Key drawer 显式回调签名,以及共享安全验证 Promise 的 fire-and-forget 拒绝观察;Midjourney 评论不能机械断言首次调用为重放,测试现分别证明首次应用与第二次重放语义,并在重放前建立行数基线。
  • CodeRabbit 对 3cacf45e 完成的 full review 5060021885(Run ID c0658e47-f07c-49f3-92d7-206705473732)明确选择 100 个文件并提出 5 条 actionable comments。提交 2abf152c 已修复未预留免费任务的占位额度、Midjourney 合并失败状态绕过提交结算门禁、法语与越南语安全验证术语,以及 API Key 测试 callback 显式返回类型;重复的 OAuth-only 首次 Passkey bootstrap 评论已由五分钟、用户绑定、scope 受限的 oauth_reauthentication grant 和相关中间件/控制器测试证明为误报。
  • CodeRabbit 对 2abf152c 完成的 full review 5060097100(Run ID 4ab27f9d-5386-403d-bb2c-13e93cc23232)明确选择 100 个文件,状态评论 5467031110 显示 Full review finished,并提出 1 条测试覆盖意见。提交 a0571f5d 已分别覆盖 Axios data.message 仅空白、data.title 仅空白和非对象 HTML 响应体,三种情况均回退到调用方提供的本地化提示;生产实现经复核无需修改。
  • CodeRabbit 对 a0571f5d 完成的 full review 5060163034(Run ID 50b54643-3f51-4e6f-924e-7062a74a8bfb)明确选择 100 个文件,状态回复 5467196449 显示 Full review finished,并提出 5 条有效意见。提交 9170acac 已澄清 OAuth 重新认证仅由完成的 OAuth 登录授予且不属于通用验证接口枚举,为每个预扣测试子用例创建独立 RelayInfo,按英文基准同步修正六语言键顺序,并补齐两个前端测试 mock 的显式类型;重复的 aa_guid 评论继续由 GORM schema 守卫和真实 SQLite 持久化回归证明为误报。
  • CodeRabbit 对 9170acac 完成的 full review 5060220147(Run ID 223b7028-eafc-43db-8906-4d51f6106ee9)明确选择 100 个文件并显示 Full review finished,提出 2 条 actionable comments 和 2 条重复意见。提交 4a762a08 已修复 Telegram 功能关闭时仍创建 state、Alpha Search 测试清理改变共享 map 形状、2FA setup 丢失业务消息,并将 Passkey AAGUID 显式固定到已由 schema 和 SQLite 持久化回归证明存在的 aa_guid 列;同时经重新审计把 OAuth grant 收窄到没有密码、已启用 2FA 或 Passkey 的首次凭据引导,并在消费时再次失败关闭。
  • CodeRabbit 对 4a762a08 完成的 full review 5060353434(Run ID e3563af2-770f-4c69-af78-ec3c4ca8e558)明确选择 100 个文件并显示 Full review finished,提出 4 条 inline actionable comments 和 2 条 outside-diff 建议。提交 47f0f966 已统一中简/中繁密码恢复消息中的“API 令牌”术语并同步回归断言,准确重命名既有任务额度预留测试,补齐前端 mock 参数/返回类型,把 Passkey 状态传输异常纳入共享错误处理,并为 2FA 禁用和备份码重生成补齐显式响应类型及敏感请求配置。大规模 tasks 表预建 idx_task_timeout_cursor 的升级风险已加入兼容性说明;两个未纳入当前 100 文件范围的 2FA 对话框保留既有业务失败消息与传输异常兜底,未为非必要重构突破全量审查文件上限。
  • CodeRabbit 对 47f0f966 完成的 full review 5060704388(Run ID 92d3bbe7-f5a1-4cfc-b876-475b376e17df)明确选择 100 个文件并显示 Full review finished,提出 2 条有效意见。提交 e6035c94ErrBillingSettlementEffectNotDurable 纳入不可重试错误,避免确定性前置失败被等待、重复和包装,并补齐无资金调用/无错误 settled 状态回归;分阶段免费转付费测试同时增加钱包与 Token 实际持久化扣减断言。OAuth-only 首次 Passkey bootstrap 建议经既有 grant 限制、实时凭据复核和 controller/middleware 测试确认是重复项。
  • CodeRabbit 对 e6035c94 完成的 full review 5060858886(Run ID 378e6275-3fa6-4fb0-8df1-c909cc4de753)审查最新基线到 HEAD 的完整 100 文件并提出 2 条 actionable comments。提交 6e4b2c04 已修复有效的 Suno 合并失败状态结算门禁缺陷,并用 pending / manual 双路径红灯回归证明旧实现会提前退款。要求 passkey_register 只允许 2FA/Passkey 的建议与既定首次注册契约冲突:它会锁死没有强凭据的密码账户和 OAuth-only bootstrap,因此未采纳;非持久化结算失败时先写消费日志的重复建议会违反资金未确认不得投影成功用量/日志的财务不变量,同样未采纳。
  • CodeRabbit 对 6e4b2c04 完成的 full review 5060981109(Run ID d9f70618-c4e2-4aef-aeaf-e79b2b98b067)明确选择 100 个文件并显示 Full review finished,提出 2 条有效意见。提交 0114540d 将任务成功响应写入失败改为携带 task_id 的本地不可重试 409,并显式阻止 defer 退款或把已提交任务标记为人工失败;同时移除 Task 主键 tag 中数据库方言相关的 AUTO_INCREMENT,保留 GORM 默认自增、主键语义和 (submit_time, id) 复合索引顺序。相关红灯回归覆盖结算只执行一次、不退款、不重试、不改坏任务状态,以及 SQLite 实际生成 ID 和 GORM schema/index 解析。
  • CodeRabbit 对阶段性 HEAD 0114540d 的全量审查 Run ID 为 6de7f8dc-82d7-4f00-bc12-fa6395c189c8,审查范围明确为 b3f9301d...0114540dFiles selected for processing (100);汇总评论报告 No actionable comments were generated in the recent review,状态回复 5469312046 显示 Full review finished,该提交的 CodeRabbit status 为 success / Review completed。该结果只证明截至 0114540d 的阶段性范围,不宣称覆盖之后新增的 27 个提交。
  • 47f0f966 的任务预留、密码恢复、Passkey 状态和 2FA 请求契约定向 Go/Bun 回归均通过;.test/run.ps1 -Profile quick 首轮准确发现术语变化后的旧断言,修正后第二轮完整通过全量后端测试、155 个共享前端测试、全部隔离浏览器测试、Go vet、JSON wrapper policy、TypeScript typecheck 及 .test Update/Check。bun run i18n:sync 未产生无关 locale 漂移,4 个相关前端文件的定向 ESLint/Prettier、git diff --check 均通过,测试目录保持 257 个测试源和 2 个 workflow 文件同步。
  • 6e4b2c04 的 Suno 红灯回归在旧实现上同时证明 pendingmanual 会提前改为 100%、创建退款并返还额度;0114540d 的响应写失败红灯回归证明旧实现会在结算和消费投影后返回 nil,数据库回归确认移除显式 AUTO_INCREMENT 后 GORM 仍识别主键默认自增及正确复合索引顺序。修复后定向 controller/model/service 测试和 .test/run.ps1 -Profile quick 均通过;最新 quick 再次完整通过全量后端测试、155 个共享前端测试、全部隔离浏览器测试、Go vet、JSON wrapper policy、TypeScript typecheck,以及 257 个测试源和 2 个 workflow 文件的 Update/Check。
  • 本轮在当前 7aa40757 上重新执行批量对账 Go 模型回归并通过;SmartOps 活动告警与格式化共 17 个 Bun 用例通过,bun run typecheck 同样通过。覆盖了批量读回失败回滚、revision 变化后清除旧选择及部分选择状态。
  • 最近一次 .test/run.ps1 -Profile quick 已在 9ea37591 完整通过:全量后端测试、165 个共享前端测试、全部隔离浏览器测试、Go vet、JSON wrapper policy、TypeScript typecheck,以及 261 个测试源和 2 个 workflow 文件的 Update/Check 均成功;之后 3 个提交的 SmartOps/对账增量由上述 7aa40757 定向回归覆盖,本轮没有重新执行完整 quick profile。
  • .test/run.ps1 -Profile full 已执行到全量 ESLint 阶段;其此前包含的后端/前端测试、Go vet、JSON policy 与类型检查均通过,但仓库既有 73 个 ESLint 错误导致 full 不能标记为通过,这些错误均不在本轮 8 个修改文件中。本轮 4 个相关前端文件的定向 ESLint/Prettier 已通过,未扩展范围清理无关 lint 债务。
  • nil-context 消费日志、Telegram OpenAPI 契约和安全验证续接定向测试均通过;API Token 批量部分成功、前端安全验证和相关对话框测试也通过,TypeScript 类型检查通过。
  • 截至阶段性提交 0114540d,对应 PR 审查范围保持恰好 100 个文件;e6035c946e4b2c040114540d 的修复均只修改既有 PR 文件,且没有删除原有测试文件或断言。之后新增的 SmartOps 计费对账范围已按当前本地提交重新统计,不沿用该阶段的 100 文件结论。
  • 本轮未执行真实 MySQL/PostgreSQL 独立矩阵、真实 Redis 故障与多节点缓存围栏演练、真实支付供应商回调、进程中断后的结算恢复、真实 Telegram Widget 浏览器 E2E、供应商 canary、Race 检测或大规模日志压测;也未在真实 MySQL/PostgreSQL 上演练大批量并发对账审阅、迁移建索引和锁竞争。这些环境级风险,尤其是跨数据库结算事务、异步任务恢复、session generation 与 billing_settlements 对账字段迁移,仍应在 Preview 标签发布前单独验证。
  • CodeRabbit 对更早的 0e83267b 全量审查中有 3 项有效意见已在 dbebfb32 修复;后续对 tiered floor 的意见已按“原始估算用于结算、floor 仅用于准入预留”的财务不变量实现并补充回归。阶段性全量审查已在 0114540d 以明确选择 100 个文件、Full review finished 且无 actionable comment 收口;当前最新 7aa40757 的新增对账提交需以其后续实际审查状态为准。
  • 最终发布验证仍应以实际 v2.0.0-smartops.pre1 标签、对应提交和重新构建的前后端产物为准;如标签前继续合入提交,应再次更新 HEAD、提交数、文件数、测试结果和 Full Changelog 范围。

Full Changelog: v1.0.5...v2.0.0-smartops.pre1