[!WARNING]
本版本修复 CVE-2026-111943,源码、Docker 和发行构建统一采用 Go 1.26.10。请及时升级,并重新构建、替换后端二进制或镜像。仅升级宿主 Go、重启旧容器或重新包装旧后端,无法使补丁生效。

本次升级包含任务插件目录表迁移,以及失败流结算、工具费用和订阅重置保护的行为修复。升级前请备份数据库与配置,完成待处理结算,并成套保留日志及 billing_log_receipts。使用 SQLite 归档工具时,必须先停止所有数据库写入。

[!NOTE]
v2.0.0-smartops.pre4 聚焦安全构建、SmartOps 渠道健康治理、Responses 协议兼容、结算一致性和运维恢复能力,同时完善管理界面的异步状态与编辑体验。

Task Plugin 在本版本提供内部 manifest、注册表、宿主与持久目录基础,尚不包含 JS 执行器、插件管理界面或真实插件任务入口。各项能力的适用范围与部署要求见下文。

MAX API 2.0 SmartOps pre4

GitHub 地址

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

Compatibility Notes

  • Go 安全升级与制品替换:构建基线升级至 Go 1.26.10,纳入 crypto/x509 对特定不再可信中间证书的拒绝校验。源码部署、容器和 Electron 后端均须重新构建并替换制品,可通过 go version -m 核对实际编译器版本。供应商 TLS 连接因证书链被拒绝时,应修正证书链,避免关闭校验。回退旧二进制会重新引入未修补的标准库。漏洞详情见 Go 官方公告 GO-2026-6809 / CVE-2026-111943。
  • 数据库迁移与启动顺序:新增 task_plugin_catalog_heads、task_plugin_versions 两张内部目录表,需随主库一致备份。主节点负责迁移;非主节点只读等待建表,最长 10 分钟并支持取消。目录恢复、完整性检查或 schema 等待失败时,服务不会开放流量,请为主节点迁移预留启动顺序。
  • 插件目录载荷兼容性:插件包以版本化 ASCII base64 封装保存于原有 LONGTEXT/TEXT 列,读取后还原原始字节并验证摘要;兼容旧目录的原始 JSON 记录。旧版目录读取器无法读取新封装,滚动升级期间应暂停插件安装及新版本写入,待全部节点升级后恢复。封装不提供加密或来源认证;回退需使用兼容程序与一致备份。
  • 插件版本与撤销语义:任务固定绑定插件 key/version、包摘要、用户/Token/渠道、模型与用量契约。停用仅阻止新绑定,历史任务继续使用固定版本;永久撤销会阻止当前节点上新旧 session 的后续使用。其他节点须显式 Refresh 才能观察目录变更。单包原文上限为 1 MiB,历史包原文总量上限为 64 MiB,存储封装另有体积开销。
  • 历史补载与版本激活:内部 Host 的 Retain 仅补载历史版本,不改变活动版本或路由;Install 表示显式激活所选版本,也支持操作员主动回退。由持久 Catalog 管理的 Host 拒绝直接 Install/Retain/Revoke,变更须通过目录事务与快照发布流程。
  • 独立 SQLite 日志文件:新增可选 LOG_SQLITE_PATH。默认同库及旧 LOG_SQL_DSN=local 行为保持;远程日志 DSN 与独立 SQLite 路径同时配置时拒绝启动。配置不会自动迁移历史日志,切换前应完成旧库待处理结算,并将日志与 receipt 一起保留。日志库打开或迁移失败会返回错误并清理连接。
  • SQLite 归档与回退:tools/sqliteops backup 必须显式指定 --quiesced,API、后台任务和结算恢复等写入均须停止。主库、独立日志库及现存 WAL/SHM 应成套归档;配置仅记录文件名、大小和摘要,不复制配置或密钥内容。恢复使用新目录,不覆盖已有数据。该工具不提供在线跨库原子快照;manual/unknown outcome、跨周期和外部已受理操作仍需对账,新版本写入不保证可直接降级。
  • 审核接口默认模型迁移:/v1/moderations 省略 model 时统一使用 omni-moderation-latest。受模型限制的 Token 及承接此类请求的渠道需允许该模型,原先只允许旧名称的配置应先调整。新增 omni-moderation-latest、omni-moderation-2024-09-26 的内置默认倍率 0;显式模型和管理员自定义定价保持,升级时仍需核对模型映射、倍率及免费模型预扣策略。
  • MySQL 可选证书指纹:设置进程级 MYSQL_TLS_CERT_SHA256 后,MySQL 连接使用完整叶证书 SHA-256 指纹与 TLS 1.2 下限,并覆盖 DSN 原有 tls 选项;未设置时沿用原连接配置。该模式以可信指纹替代默认 CA/主机名校验,证书轮换时需更新指纹,主库和日志库共用此设置。仅通过网络探测取得的指纹不能独立证明服务器身份。
  • 失败流的费用结算:已向客户端交付内容的失败 Responses 流,在用量可确认、计数合法且价格求值成功时,按已确认结果结算,包括明确的零费用;只有元数据、尚无生成且缺少真实终态的失败流使用原失败退款路径。已报告数字用量包含明确零值时保持原值,仅缺失用量采用估算。未知用量、非法计数和表达式失败仍遵循既有兜底规则。
  • 非文本输出与工具费用:原生 Responses 缺失用量时,已完整交付的工具参数、自定义输入、推理和拒绝内容纳入现有估算。完成的 web_search、web_search_preview 使用请求开始时冻结的对应价格;已交付成功结果的 File Search 在断流后仍保留独立工具费。明确零 token 不抵消合法工具费,仅声明、进行中、失败或取消的工具不作为成功结果计费。升级前请核对现有工具价格。
  • 订阅额度重置保护:周期锚点未变化时,未完成或身份无法核验的资金结算会阻止额度重置;批量重置遇阻时整批回滚。可证明属于更早周期的预扣不误阻塞当前周期;已完成资金结算、仅日志等副作用待补写的记录允许重置。跨周期延迟结算保留原 manual 对账机制,请先完成受阻请求的结算或核对,再重试重置。
  • Playground 钱包准入:钱包预扣使用稳定的服务端请求 ID,并在同一持久事务中绑定来源和实际金额。已有请求身份、查询失败或正额度请求缺少稳定 ID 时,在扣款前拒绝;Playground 不扣 API Token。追加预留、退款和结算继续以实际钱包预扣为依据,已拒绝请求不会由后台补扣。
  • 渠道治理默认关闭:自动降权、重复超时自动禁用与外部通知均需显式开启。流式首结果、非流式响应阈值默认 0,表示关闭对应阈值;首结果阈值不代表整段生成的最长时长。自动禁用仅累计符合门槛的首结果/非流式超时,首结果后的流空闲超时、客户端取消和渠道测试不计入处罚窗口。默认按流式/非流式分别计数,支持合并及附加样本量、超时比例门槛。
  • 运行态恢复与 Redis 回退:降权调整有效优先级,运行态禁用保存于 Redis,均不改写渠道基础优先级或数据库启用状态。“恢复渠道”只清除运行态限制,不会启用人工禁用或原有自动禁用的渠道。Redis 关闭或读取失败时,缺少可用运行态的渠道按基础优先级参与选择,短时有效缓存仍可能生效;该机制不适合作为强制隔离或凭证撤销手段。
  • 恢复探测与测试模式:到期仅表示允许探测,需满足连续成功次数后恢复路由。自动探测由 Master 节点执行,即使关闭全量定时测试,符合条件的被动恢复仍可能调用上游;禁用时长为 0 或选择人工恢复时不安排自动恢复。channel_test_mode 支持 scheduled_all/passive_recovery;有效正数 CHANNEL_TEST_FREQUENCY 强制使用全量模式,CHANNEL_TEST_ENABLED 再覆盖启用状态。
  • 渠道健康管理权限:管理员可读取健康页面与限定策略;策略保存和运行态恢复仅允许 Root 管理员,并保留限流与管理审计。策略批量校验,非法值会使整批保存失败,避免部分生效。
  • 首响应与首结果口径:OpenAI 原生 Chat/Responses、Chat↔Responses、Claude/Gemini→Responses 路径分开记录首帧和有效输出。角色、usage、created 等元数据及单纯缓冲释放不结束首结果等待;原 frt 指标保持,获得有效输出后补充 first_result_ms。已开始下游写入的超时请求不会透明重试。
  • 协议转换边界:全局 Chat→Responses 仅作用于具备 Responses 上游能力的适配器,Claude/Gemini 保留原生 Chat 路径;Advanced Custom 显式转换器保持配置路由。协议不匹配的请求在上游调用前拒绝,并按原预扣来源退款。custom 工具以单个字符串 input 参数转换并还原,含 custom 的同名工具定义因歧义被拒绝,请使用不同名称。
  • 终态与客户端错误处理:Responses 已开始输出后的错误使用 SSE;下游可写且尚无终态时补发失败或不完整事件,不伪造成功。成功写出并刷新终态后忽略迟到帧;写入、短写、刷新失败或客户端取消时停止追加,结束事件不保证送达。失败流保留原客户端协议和一次性结算,不透明重放已交付输出。
  • 前端会话隔离:GET 去重按前端会话代次隔离,迟到的旧会话读取和 401 不影响新登录状态。该机制不撤销服务端已接受的写操作,也不替代后端鉴权;写入结果仍以服务端为准。
  • 源码构建顺序:先用 Bun 构建 web/default,再用 Go 1.26.10 构建后端,确保内嵌页面与接口配套。相对 pre3,产品 Go 模块依赖版本及 go.sum 保持,Go 编译基线已更新;升级不能按“无数据库结构变化”处理。

Known Issues

  • 其他依赖安全告警:Go 工具链验证阶段的 Windows/Linux 二进制扫描未报告本次 CVE,但各有 15 个其他依赖 advisory,业务可达性与可利用性仍待核查。本次安全更新仅覆盖已明确修复的 Go 标准库问题,不代表全部依赖告警清零;容器运行身份、健康检查与 Electron 默认权限配置仍需按部署环境检查。
  • 提前用量报告的精度限制:上游在 response.created/response.in_progress 提前报告数字用量后又交付输出并断流时,保留已报告值,包括明确 0;仅缺失时估算。因此,过早或不完整的供应商快照仍可能低估实际生成量。
  • 历史资金记录维护:历史无操作键预扣不自动推断金额或补迁。孤立预扣回收、记录清理策略及 Playground 订阅全路径仍需独立验收;身份、资金来源或结果无法核实时,继续通过审计与对账处理。
  • 首结果观测范围:有效输出计时覆盖上述 OpenAI 原生、双向转换及 Claude/Gemini 转 Responses 路径,其他适配器沿用既有判定。未知供应商扩展可按原策略透传,但不作为已确认首结果;强制格式化仅保留既有 DTO 支持的字段。
  • 跨协议工具兼容性:custom 的 Lark/regex 格式以描述保留,未提供原生语法强制校验,调用方应校验工具输入。Gemini 尚未实现基于 JSON 路径的 partialArgs 增量协议;Claude hosted tools 及完整工具/多模态字段矩阵仍需专项验收。
  • 插件功能范围:当前提供 MAX API 内部插件封装、mock 和宿主基础,加载包不会执行 source;没有 JS VM、插件市场、管理界面或公开插件管理/转发入口,不支持直接安装上游 JS 插件。只读 HTTP 能力仅支持受控 HTTPS GET,不支持内网/明文上游或付费任务提交。
  • 插件运行与恢复范围:跨节点目录变更依赖显式 Refresh,未提供后台实时撤销传播。真实 JS 执行、真实供应商任务、故障后恢复责任与管理入口须在后续运行时集成中完成验收。
  • 环境验收边界:最新目录实现的 MySQL/PostgreSQL 实库矩阵、生产旧库滚动升级、混合日志引擎、Redis 故障与跨节点、真实渠道、浏览器、race、实际 Docker 及各平台原生/CGO 制品仍需按部署环境验证。较早版本的 MySQL 专项结果不替代最新实现验收;Windows 历史时序失败和前端间歇超时的根因尚未统一定位,独立通过结果不代表这些现象全部解决。

Highlights

  • 修复 CVE-2026-111943:统一使用 Go 1.26.10 构建源码、Docker 和发行制品,更新证书校验规则,并提供实际编译器版本核验信息。
  • SmartOps 渠道健康治理:集中配置超时阈值、运行态降权、重复超时禁用、恢复探测与通知,支持按有效优先级参与路由。
  • Responses 兼容性增强:新增 Claude Responses 转换,补齐 custom 工具历史与结果关联,完善 Gemini 参数快照、调用 ID 和终态处理。
  • 结算一致性改善:失败流保留已交付内容的有效用量,元数据失败退款,补齐搜索工具费,并加强 Playground 请求身份与订阅重置保护。
  • 内部任务插件基础:提供 manifest、原子注册表、版本固定宿主和持久目录,支持历史补载、启停、撤销及重启恢复。
  • SQLite 运维能力:支持独立日志文件、停写归档、完整性验证和隔离恢复,覆盖主库、日志库及 WAL 文件集。
  • 管理界面体验优化:隔离旧会话请求和对话框过期结果,保留未提交草稿,减少无用读取与加载状态竞争。
  • 审核默认模型统一:省略模型的 Moderation 请求统一使用 omni-moderation-latest,同步默认倍率、接口说明与迁移要求。

New Features

  • 渠道健康中心:新增 /smart-ops/channel-health,展示超时、降权、禁用告警及通知状态,支持策略编辑与运行态恢复,同步六种界面语言。提供流式首结果/非流式响应独立阈值、运行态降权、重复超时禁用、冷却、人工恢复及被动探测能力。
  • 渠道健康接口:新增 GET /api/smart-ops/channel-health/policy、PUT /api/smart-ops/channel-health/policy 和 POST /api/smart-ops/channel-health/channels/:id/recover。策略保存接收 updates: [{key, value}];写接口仅限 Root 管理员。
  • 健康事件通知:SmartOps 告警覆盖降权、重复超时禁用与恢复,支持可选外部通知、重复间隔及 Redis 送达状态记录。
  • Claude Responses 与 custom 工具:新增 Claude 请求、非流式和流式 Responses 转换。Responses→Chat 及 OpenAI 兼容 Chat、Claude、Gemini 路径支持 custom 工具定义、选择、调用与结果还原,保留调用 ID、自由文本输入、空字符串和 Unicode。
  • Task Plugin v1 内部接口:新增 manifest 与原子注册表,校验 API 版本、身份、模型、协议、路由、上游主机及用量 schema,拒绝同形路由冲突并隔离快照。该接口不直接注册公开 HTTP 路由。
  • 版本固定宿主与持久目录:支持安装、显式激活、启停、永久撤销和历史包恢复,同 key/version 不允许静默替换。历史任务恢复重新核对所有者、渠道、请求和冻结用量契约,不自动升级版本或重新提交任务。Retain 可补载多个历史版本,同时保留当前活动路由。
  • 受控只读 HTTP scope:每 hook 独立限制 HTTPS GET、精确渠道 origin 和额外主机白名单,拒绝私有/回环/链路本地/保留地址、环境代理与重定向;Authorization 只发往精确渠道 origin。每 scope 最多 4 次请求、总期限 30 秒、单次最长 15 秒,响应体/响应头上限分别为 1 MiB/64 KiB。
  • SQLite 独立日志与运维工具:新增 LOG_SQLITE_PATH 及 tools/sqliteops backup/verify/restore,配套中英文部署与运维指引。工具支持停写文件集、同库/分库、WAL/SHM、清单与 SHA-256 验证及隔离恢复,不打开数据库执行迁移或修改业务账本。
  • MySQL 连接与验收工具:新增可选叶证书指纹连接能力,以及只读 schema 兼容审计、隔离空库启动迁移和外部任务结算契约测试入口。验收需显式确认目标身份与空库条件,不自动清空或迁移任意数据库。

Improvements

  • 编辑状态稳定性:通知偏好、渠道亲和、标签编辑和钱包输入按用户、来源值或对话框打开批次管理草稿;同值配置或无关资料刷新保留未提交内容,切换来源时重新初始化。设置提交回调使用当前表单处理器。
  • 异步读取隔离:资料、充值、邀请、余额、Codex 用量、多 Key 和用户详情按会话与当前对象收尾,忽略关闭、切换后返回的过期结果。错误调试采用安全摘要,避免输出完整 Axios 错误对象。
  • 界面响应与加载状态:移除标签批量编辑中未使用的全量模型列表请求;移动端断点和主题圆角改用可清理的外部状态订阅;骨架屏按加载周期计时,避免旧定时器覆盖新状态。
  • 构建可追溯性:发行、Electron 与 Docker 构建输出 go version -m,CI 输出实际 Go 版本;前端测试按阶段记录退出码、文件数和耗时。完善定价面板、图表及 EOF/取消测试夹具,保持默认超时与资金断言。
  • 目录并发与恢复:revision CAS、版本状态在同一事务提交,成功后一次发布宿主快照。通过独立 mutation 身份处理 MySQL CLIENT_FOUND_ROWS 下并发首次安装;读取 revision 冲突时暂停旧宿主,最多重读三次,取得完整有效快照后恢复,不自动重试未知提交或任务操作。
  • 目录摘要复用:复用读取包时已校验的存储身份,在目录头加锁前计算新包身份,减少持锁路径中的重复摘要计算,保留事务内 revision、快照及状态转换校验。
  • 用量与结算职责:插件 session 提供经冻结契约校验的用量事实,区分缺失与明确零;ApplyTaskPluginUsage 复用既有计费计划、幂等 finalize 和日志/receipt effects,不自行定价、扣款、退款或写入任务终态。
  • 存储与归档完整性:插件文档使用 MySQL LONGTEXT/SQLite、PostgreSQL TEXT 映射与固定长度摘要索引,保留原始字节并拒绝坏编码、超限载荷。SQLite 归档与恢复先在同父目录暂存、核验,再 rename 发布;失败清理暂存结果。

渠道健康治理优化:

范围改进内容
观测与超时每次渠道尝试独立计时和去重;受支持路径以实际交付输出结束首结果等待。流式响应头纳入首结果预算,非流式正文使用剩余预算,SSE 正文保留原有流式计时方式。
路由选择内存缓存与数据库候选统一应用有效优先级和运行态禁用,保留档位重试与权重选择;Redis 查询在释放渠道缓存锁后执行。
状态竞争共享状态与观测去重共同更新,限制事务冲突重试;恢复水位阻止迟到观测重新处罚已恢复渠道,窗口与成功样本按配置采集。
读取与迁移批量读取运行态,加入短缓存与失败冷却;复用超时派生连接池,支持旧索引分批迁入、游标续扫及失效成员批量清理。
通知与诊断重启后从 Redis 恢复活动告警,清理过期项,共享重复通知约束并保护事件所有权。诊断和状态观测离开主响应路径处理,队列及存储等待均有上限。
管理体验仅返回页面所需策略并校验字段完整性,读取失败显示明确错误;人工与探测恢复同步清理对应限制及告警。

Responses 协议与用量处理优化:

  • Gemini 按 candidate 与稳定调用 ID 归一化完整参数快照,缓存 willContinue,仅在完成时交付最后一份参数;独立调用分别处理,冲突及未完成调用明确报错。
  • 工具名称晚于参数到达时先缓存输入,再建立具名 item;已完成工具忽略同 index 的迟到名称、ID 与参数,避免重开项目或改写终态。
  • 用量归一化区分缺省、null、空对象与数字零。Claude/Gemini 缺失计数沿用现有估算,已报告数字与明确零保持,估算附带来源标记;非流式输入、输出计数分别判断。
  • Chat、Claude、Gemini bridge 先交付收尾缓冲的 custom 输入,再估算未知用量并构建终态。未知部分用量累计完整交付的正文、推理、工具名与参数,写失败片段不参与估算,客户端计数与结算视图同步。
  • 分离用量收尾与流式发送收尾,扫描、取消和最终写入失败时保留已确认用量。Responses 写出入口维护终态、序号与首次发送错误,保留已有 sequence_number,仅为缺失序号的转换事件补号。

Bug Fixes

  • 修复 CVE-2026-111943:通过 Go 1.26.10 纳入 crypto/x509 补丁,在系统信任库未及时更新的特定场景中拒绝已知不再可信的中间证书。源码、Docker、CI/发行及 Electron 后端构建链路同步更新,部署须重新构建并替换旧后端。
  • 修复 Moderation 分发与校验使用不同旧默认模型的问题,统一为 omni-moderation-latest,同步内置 omni 零倍率、OpenAPI 与回归,保留显式模型及自定义定价。

管理界面

  • 修复旧会话 GET 去重结果被新会话复用、迟到 401 清除新登录状态或触发跳转的问题,保留当前会话真实 401 的处理。
  • 修复余额、Codex 用量、多 Key 和用户详情对话框在关闭、重开或切换对象后,被旧结果覆盖内容、错误或加载状态的问题。
  • 修复通知、渠道亲和及标签编辑在源值未变的刷新中丢失草稿的问题;切换来源和重新打开仍按当前数据初始化。

插件目录与运维

  • 修复历史包补载影响活动版本/路由的问题,使用 Retain 恢复历史;摘要冲突、撤销和容量检查失败时保留原宿主快照。
  • 修复非主节点早于主节点建表时立即恢复目录而失败的问题,增加有期限、可取消的只读 schema 等待。
  • 修复瞬时读取冲突导致宿主持续暂停、READ COMMITTED 下并发新版本被误判损坏的问题;受限重读区分 Conflict 与 Invalid,目录损坏仍拒绝服务。存储损坏保留 ErrCatalogInvalid,避免统一显示为不可用,并避免 SQL 错误日志携带插件源码参数。
  • 修复合法 Unicode 插件文档受三字节 utf8/GBK 等字符集影响而无法写入的问题,采用版本化 ASCII 封装并验证原摘要,兼容旧 JSON 行。
  • 修复模型名首尾空白、query 路由任务 ID 参数不在路径中,以及相同路由优先级依赖注册顺序的问题。
  • 修复 SQLite 归档/恢复失败暴露部分最终文件、符号链接造成源目标重叠及大小写路径身份判断问题;拒绝篡改、遗漏、额外文件和符号链接归档项。
  • 修复 MySQL 指纹身份截断和手工拆分 DSN 破坏合法格式的问题,改用完整指纹及驱动解析/格式化。

渠道超时与恢复

  • 修复慢响应头未受首结果阈值约束、非流式正文在响应头返回后仍可持续等待的问题。
  • 修复 Cohere/Cloudflare 无效事件、空 choices 或写出失败提前确认首结果的问题;重试使用新的尝试计时与观测身份。
  • 修复渠道测试污染生产超时计数、处罚和成功样本,以及缓存/数据库路由治理行为不一致、关闭自动禁用后仍排除渠道的问题。
  • 修复探测恢复误启用数据库禁用渠道、人工恢复后迟到观测重新施加限制,以及成功样本覆盖最近超时模式的问题。
  • 修复过期活动告警残留、仅降权告警误发禁用恢复通知、旧事件覆盖通知状态及重复间隔锁误删新事件约束的问题,保留发送失败后的重试能力。
  • 修复旧运行态索引迁移丢失进度、失效成员清理产生大量串行请求及误移除并发新状态的问题。

资金准入与订阅

  • 修复 Playground 钱包与同身份普通预扣竞争造成重复扣款,以及已结算钱包请求切换 Playground 模式再次预扣的问题;准入核对持久身份并在事务中绑定来源和金额,查询失败时拒绝扣款。
  • 修复 Playground 无 API Token 时遗漏钱包退款或误记 Token 占用的问题,退款和追加预留核对实际钱包预扣,Token 扣减保持为零。
  • 修复周期锚点未变化时,管理员重置清空未结算预扣的问题。重置核对请求及任务资金身份,保留 manual/pending 保护,区分资金完成与副作用待补写,并分批核对历史记录。

Responses 终态与协议转换

  • 修复供应商没有真实终态时,将 EOF/[DONE] 视为成功、Responses 转 Chat 解析失败仍补造正常 stop,以及流已开始后追加普通 JSON 错误的问题。可写下游补发符合协议的失败/不完整事件,已有终态不重复输出;尚未写出字节的错误响应正确恢复 Content-Type。
  • 修复合法 response.incomplete/兼容 response.done 被误报 EOF、遗漏终态快照正文或工具结果的问题;按原因映射 length/content_filter,保留 failed/cancelled/canceled 的真实错误。缺失用量的终态文本按实际交付估算,与匹配 delta 合并一次;矛盾快照保留 delta。
  • 修复终态成功交付后,迟到工具、元数据、输出或错误覆盖已接受状态与用量的问题;写入、短写及可获取的 Flush 错误保留并向上传播,阻止重复写出。无法交付的用量帧不覆盖此前已接受用量。
  • 修复全局 Chat→Responses 误用于不具备上游能力的适配器,以及影响 Advanced Custom Claude 显式转换路由的问题;补齐智谱/火山 coding-plan 地址守卫,标准端点保留 Responses 能力。
  • 修复 Gemini custom 历史丢失、响应被还原为普通 function、调用 ID 和原始 input 丢失的问题;custom 名称缺失明确拒绝,格式要求保留于描述。
  • 修复 Claude 多文本块汇总不完整、工具名称迟到时产生空名称调用、名称始终缺失仍报告 completed,以及完成工具被迟到片段重开的问题;缺失名称的未完成调用正确返回 incomplete。
  • 修复 Gemini 完整参数快照被拼接、完成事件重复、其他 candidate 的 STOP 掩盖未完成调用,以及续传依赖原始 part 位置的问题;带 ID 调用按 ID 关联,匿名调用仅在位置关联唯一时继承。
  • 修复出站 functionCall.id 已保留而 functionResponse.id 遗漏的问题,覆盖 Chat/Responses function 与 custom 历史,支持并行同名及乱序结果,保留原顺序、转义和无 ID 旧式消息兼容性。

用量、退款与工具计费

  • 修复原生 Responses 仅元数据后断流或转换收尾失败,仍返回可计费用量或误判成功的问题;无生成且无真实终态时使用原资金/Token 退款路径,禁止已写出请求透明重试。
  • 修复 Gemini Chat 交付失败的归类:仅角色元数据、未完成工具且尚无完整交付时按原资金/Token 预占退款,已完整交付文本(含空白)、推理或工具的失败保留部分结算,短写及时停止。订阅重置阻塞错误补充 subscription_id,保留原哨兵匹配与整批回滚。
  • 修复 File Search 成功结果被归为元数据、断流后全额退款的问题;完成结果只计一次工具费,失败、取消及未知状态不作为可计费交付。补齐现代 Web Search 生命周期、请求冻结价格和分类型费用审计。
  • 修复仅交付工具、非文本内容或空白后失败时,丢弃有效用量或将未知生成估算为零的问题。空白仍不结束有效首结果等待,但保留已交付部分结算;失败请求继续记录为失败。
  • 修复 EOF 补发 custom 输入后沿用旧完成用量,以及终态 output_tokens 与已确认账本不同步的问题;OpenAI 兼容 Chat、Claude、Gemini bridge 按完整交付输入收尾,部分写失败仅保留此前交付部分。
  • 修复已交付生成并收到最终数字用量后,纯收尾元数据写出失败丢弃最终用量的问题,覆盖 Chat 及 Gemini MAX_TOKENS/SAFETY,保留 STOP 原行为;新增缓冲输入仍须确认交付后再计入。
  • 修复空用量对象、Claude null 和 Gemini 缺失计数抑制估算或被当作明确零的问题;输入、输出分别补缺失项,数字零、缓存细节和已接受用量保持原语义。
  • 修复已知零价、明确零用量或成功求值为零的阶梯价格在失败 Responses 流中被预扣额覆盖的问题;保留未知用量、非法负计数及表达式失败的既有兜底,沿用原资金来源、订阅周期、Token 镜像与幂等结算。
  • 完善独立 SQLite 日志库初始化、连接清理、回填及新进程恢复回归,修正进程测试事务包装识别和前端图表/API 夹具隔离,保持真实事务断点、默认超时与业务断言。

Verification

本版本内容对应 b2745bbaa9113a11dbe55c03eb4faf0ee213195e,与已合并 main 的 17092f1f18bed391cd845fced8b2c3650bed6c1a 源码树一致。以下为该源码及相关专项的已记录结果,适用范围不扩展至未验证的发行制品或生产环境。

验证范围已记录结果
Linux CIGo 1.26.10 下 59 个有测试 Go 包通过;前端累计 576 项通过、0 失败;TypeScript、前端生产构建、go vet 与 JSON wrapper 检查通过。见 CI 39660505800。
Windows 后端同源码树完整后端 59 包通过、36 包无测试,vet、JSON、gofmt、YAML 与 diff 检查通过。历史时序失败的根因仍保留为待核查项。
前端专项相同前端源码树已有完整 ESLint、类型检查、格式检查及 576 项本地测试通过记录。
编译器与产物Windows/amd64、Linux/amd64 的 CGO=0 构建通过,go version -m 显示 Go 1.26.10;不包含各平台原生/CGO 与实际 Docker 运行验收。
恢复与账本回归覆盖 SQLite 历史 schema 启动、主/日志分库归档恢复、WAL 文件集、请求身份、订阅周期、进程中断、幂等重放、日志与 receipt,以及内部插件 mock/目录恢复和损坏拒绝。

较早目录版本的 MySQL 8.0.45 契约、并发、READ COMMITTED、utf8/GBK 往返专项已通过;后续目录身份复用优化尚未补跑实库,结果不代表 MySQL 5.7、PostgreSQL 或生产旧库的完整迁移与结算验收。真实供应商、跨节点、混合日志引擎、浏览器、race、容器及滚动升级仍应按实际部署环境验证。

升级检查清单

  1. 确认制品来源:记录当前部署提交、镜像/二进制摘要与 Go 编译版本,以实际制品确定升级及回退起点,避免仅依赖本地标签名称。
  2. 备份并完成待处理操作:备份数据库和配置,包含插件目录表;核对 pending/manual/unknown outcome 记录,完成可恢复结算。成套保留日志与 billing_log_receipts;SQLite 文件归档前停止全部写入,并保留现存 WAL/SHM。
  3. 核对配置与费用:检查新审核默认模型的 Token/渠道准入、模型映射和自定义倍率,核对 Web Search/File Search 工具价格、订阅重置保护及 MySQL 可信指纹与证书轮换安排。
  4. 构建并安排迁移:源码部署先构建前端,再以 Go 1.26.10 编译后端;容器与 Electron 使用重新构建的后端。先由主节点完成迁移,使用旧插件目录实现的节点升级期间暂停安装及新版本写入。
  5. 核验启动与恢复:检查实际产物 go version -m、目录恢复、日志连接与 receipt;配置独立日志路径时,确认历史数据迁移及结算切换安排,不将修改路径视为数据搬迁。
  6. 验证关键行为:在目标环境验证正常与失败请求、明确零/缺失用量、工具费用、订阅重置、Playground 退款及恢复重放;按需验证真实渠道 TLS、跨节点目录刷新、Redis 故障与渠道恢复。
  7. 逐步启用治理并准备回退:核对超时阈值、测试环境变量、探测调用和通知设置,观察真实负载后再启用降权/禁用。回退使用兼容程序与一致备份;已发生的外部调用、未知结果及跨周期资金操作需对账,避免直接覆盖数据库或重放请求。

Full Changelog

查看相对 pre3 发布提交的完整变更

Logo

中科创新烁智(CSCITech)

更多推荐