| editRules |
|
|---|
-
内置供应商 Experiential:新增 Experiential(OpenAI 兼容模型网关)预设,同一密钥支持 Chat Completions / Responses / Anthropic Messages 三种协议,默认开启官方模型拉取,并预置 5 个 Promotional 免费模型(Qwen3.8-27B、DeepSeek V4 Flash、GPT-5.6 Luna、Claude Fable 5.1、GPT-6 Astra)
-
内置模型补充:新增 24 个新一代主力模型——Claude Fable 5.1 / Claude Opus 5、GPT-5.5 / GPT-5.5 pro / GPT-5.6 Pro 系 / GPT-6 Astra、Gemini 3.8 Flash / Gemini 3.1 Flash Lite、DeepSeek V4 Flash Vision Exp、Qwen3.8-2.4T-A95B / Qwen3.8-Flash / Qwen3.7-Flash / Qwen3.6-27B、Seed 2.0 Code、Hy4 Preview、KAT-Coder-Pro V2.5、Grok 4.20 / Grok Build 0.1、Nemotron 3.5 Lightning / Nemotron 3 Super、Mistral Medium 3.5 / Mistral Small 4
-
社区编辑器内置图床上传:社区 Markdown 编辑器工具栏新增「图床」下拉,列出内置图床,选择后弹出独立浏览器窗口完成上传,无需手动切换浏览器复制外链;发帖 / 编辑帖子 / 一级回复共用编辑器,全场景可用
-
内置图床 img.remit.ee 适配:上传窗口内注入增强脚本——粘贴 / 拖拽 / 选文件上传面板、结果卡片复制按钮;点击复制后外链自动回插编辑器光标处(剪贴板兜底)
-
内置图床 ooxx.ooo 适配:粘贴图片进入浮动面板后手动上传,上传后由站点结果区人工复制外链
Important
数据库结构变更:调用记录表新增幂等累加标记列,并自动从明细记录重建统计聚合表,升级后首次启动自动完成迁移。
- 模型调用统计聚合与明细不一致:修复流式请求被完成两次(估算 Token 收尾 + 真实 usage 收尾)导致同一调用在预聚合统计中被重复累加的问题;升级后聚合表将从明细记录全量重建,保证「聚合汇总」与「明细汇总」口径一致
-
更新弹窗下载中可关闭:更新包下载期间允许关闭弹窗,关闭时提供两种选择——「关闭并继续下载」(后台继续下载,完成后 toast 提醒)或「关闭并停止下载」(中止下载并清理临时文件)
-
Windows 安装器多语言:NSIS 安装界面支持简体中文/英文,按系统语言自动选择(不弹语言选择框,简体中文系统默认中文安装界面)
Important
数据库结构变更:新增视觉生成供应商标识与图像生成历史、视频任务两张表,升级后首次启动自动完成迁移。
-
视觉生成页(文生图):新增
/vision页面,提供参数工作台与结果画廊双 Tab——工作台支持选择视觉生成供应商 / 模型、提示词输入(含右键复制、粘贴系统剪贴板)、尺寸(2K 分辨率 11 种比例,如 16:9、21:9、1:1 等)、数量与水印开关;画布实时预览生成的图片,一键下载 / 复制到剪贴板;画廊展示全部生成历史,支持灯箱放大与删除 -
媒体产物本地化存储:生成成功后立即将供应商返回的临时图片下载到应用数据目录(供应商 URL 存在过期机制,如 SenseNova 固定 1 小时),数据库仅存相对路径,画廊缩略图与灯箱共享 Base64 缓存
-
内置视觉生成预设:内置「Sensenova Image」图像生成供应商(OpenAI 兼容协议,开箱即用填入密钥即可)
-
内置供应商对话框 Tab 切换:内置供应商弹窗新增「<常规 / 视觉生成>」选项卡,可分别浏览与应用两类预设
-
Windows 剪贴板复制偶发
os error 1418:修复复制图片到剪贴板偶发报「线程没有打开的剪贴板」错误——Windows 平台绕开 arboard 直接调 Win32 API(OLE STA 初始化 + message-only 窗口作为剪贴板 owner + 消息泵重试循环),非 Windows 沿用原路径 -
全局布局高度溢出:修复 AppLayout 容器
h-screen导致所有页面底部 36px 被裁切、视觉生成页参数面板与画布底部被推出窗口外的问题,改用h-full并直接测量内容 wrapper 实测高度支撑滚动容器
-
移除工作区(Workspace)模块:彻底下线工作区模块全部前后端实现(数据库表、路由、UI 组件、hooks 等)与相关设计文档,涉及配置档案生成能力一并清理
-
视觉生成供应商运行时隔离:供应商新增视觉生成标识(
providers.is_media_generation),网关转发 / 虚拟供应商逻辑按协议族识别并排除此类供应商——不参与 /v1/models 暴露与虚拟路由;虚拟供应商候选路由同样过滤视觉生成供应商
Important
数据库结构变更:模型配置表新增工具选择策略与请求参数字段,升级后首次启动自动完成迁移。
-
聊天「检测题目」工具:聊天工具栏新增检测题目入口,弹窗表格展示内置 21 道检测题(题目 + 参考答案),支持一键将题目发送到当前会话(仅发送题目、不含答案),模型回答是否正确由人工对照答案列核对
-
聊天思考强度子面板:模型下拉浮层改为「模型列表 + 思考强度面板」组合——左列支持本地搜索过滤、悬浮展示模型完整 ID;选中模型后右侧自动展示思考强度操作面板(开启思考开关、力度选项、自定义力度输入);选项优先读取模型配置的推荐枚举,模型配置声明思考默认值(如
{"type":"enabled","effort":"high"})时切换模型自动开启并套用对应力度 -
模型请求参数配置:模型编辑弹窗新增工具选择策略、回复数量 n、停止序列、随机种子、流式返回 usage 等配置项,随模型配置持久化
-
聊天请求推理力度注入:发送消息可携带推理力度(reasoning_effort),按协议注入请求体(Chat →
reasoning_effort,Responses →reasoning.effort) -
下拉选定值对齐方式:Select 触发器新增选定值水平对齐属性(靠左 / 居中 / 靠右),默认靠左
-
内置模型 SenseNova 6.8 Flash Lite:内置模型库新增 SenseNova 6.8 Flash Lite(OpenAI 兼容协议,含推荐思考力度与工具选择枚举)
-
聊天工具栏轻量化:SSE/HTTP 传输模式与协议下拉改用无边框、无胶囊的轻量化下拉组件,工具栏更紧凑
-
思考控件整合:移除工具栏独立的思考开关与推理力度下拉,交互整合进模型选择浮层的思考强度子面板
-
迁移版本合并:原 V009(工具选择策略)与 V010(请求参数)迁移合并为单个 V009,schema 版本号相应调整为 9
-
社区图片查看缩放控制:图片放大弹窗底部新增半透明按钮组(缩小 / 重置 / 放大,0.25 步进,0.5~4 倍),实时显示当前缩放比例;按钮悬浮于图片上层,图片放大至全屏后仍可继续操作
-
网关监听端口占用帮助引导:网关设置「监听端口」旁新增帮助弹层,按当前平台展示「查找占用进程 → 结束进程」命令(Windows / macOS / Linux),包含 Windows 系统保留端口时重启 winnat 服务的处理方式,命令支持一键复制
-
社区刷新同步个人资料:修复社区右上角刷新仅重拉帖子列表、个人栏统计(帖子 / 回复 / 积分 / 签到)与服务器不一致的问题,刷新时一并同步最新个人资料
-
仪表盘网关启动失败排查弹窗:修复仪表盘网关启动开关在端口被占用 / 权限不足 / 地址不可用时仅提示失败、缺少排查指引的问题,与网关页一致弹出端口占用帮助弹窗
Important
社区服务端新增账号体系并升级会话鉴权:旧版本客户端将无法访问社区,请升级到本版本;升级后首次进入社区需重新登录。
-
社区账号体系:支持匿名登录(本机机器码身份)与用户名密码登录两种模式;匿名用户可设置「唯一用户名 + 密码」绑定为账号,之后可在任意设备登录同一身份(帖子 / 回复 / 积分原样保留)
-
社区注册 / 登录:注册即创建与设备解耦的独立账号,重装系统或更换设备不丢失;登录后自动获得会话凭证,无需重复输入密码
-
账号规则约束:用户名须以英文字母开头(4~32 位字母 / 数字、区分大小写),密码至少 8 位;注册与绑定时服务端与客户端双重校验
-
会话鉴权机制:社区业务接口改用服务端签发的会话凭证(60 天有效)鉴权,不再依赖随源码分发的固定密钥,杜绝固定密钥泄露导致的身份伪装风险;凭证过期或失效后自动回到登录页重新登录
- 修复固定密钥泄露导致的身份冒充风险:社区服务端弃用随源码分发的固定访问密钥,旧版本客户端请求将被拦截并提示升级到最新版本
-
社区入口改版:进入社区由「一键开启」改为登录 / 注册 / 匿名进入三种入口;未登录或会话失效时展示登录卡
-
个人栏登录管理:个人资料卡新增登录模式徽章(匿名 / 账号);匿名用户可绑定用户名密码(一键升级账号),账号用户可退出登录,退出后需重新登录
-
新增 Cline Free (VSCode) 内置服务商:内置供应商列表新增「Cline Free (VSCode)」免费服务商(OpenAI 兼容协议),内置 GLM-5.3-Flash 与 DeepSeek V4 Flash 免费模型入口,并注明免费模型存在次数和 Token 限制
-
新增 DeepSeek V4 系列内置模型:内置模型库新增 DeepSeek V4 Flash 0731(284B MoE,激活 13B,智能体能力大幅提升,MIT 开源)与 DeepSeek V4 Pro 0813(1.6T MoE,GA 正式版取代预览版)两个模型,均支持 1M 上下文 / 384K 输出
-
内置模型背景简介悬浮展示:供应商表单的内置模型列表中,为 GLM、Grok、Gemini、腾讯混元、美团 LongCat、KAT-Coder、阶跃星辰、NVIDIA Nemotron 等模型补充背景简介(参数规模 / 能力特性 / 发布日期等),鼠标悬浮模型条目即可查看(仅展示不落库)
- 内置供应商模型条目更新:GLM-5.2 标记「(下架)」;DeepSeek V4 Flash 免费模型标记「(下架)」;Ox Alpha Free 替换为 Hy3 Free;Muse Spark 1.2 Contributor 添加「(美区)」标识
- 模型背景悬浮提示位置调整:内置模型列表的背景简介 Tooltip 由左侧改为顶部居中展示,避免遮挡内容
-
帖子点赞:帖子详情页新增点赞按钮(心形图标 + 计数),点击点赞、再次点击取消;作者不能给自己的帖子点赞(自己的帖子不展示点赞按钮);帖子列表卡片同步展示点赞数与已赞状态(已赞帖子心形高亮)
-
点赞为作者加积分:每次点赞为帖子作者 +1 积分并计入积分流水(可追溯);取消点赞时同步扣回,防止反复点赞刷分
-
点赞防刷与级联清理:点赞 / 取消点赞应用业务限流防连点刷分;帖子被删除时其全部点赞关系一并清理
-
帖子打赏:帖子详情页新增「打赏」按钮(非作者可见),弹窗支持快捷金额档位(1 / 6 / 18 / 66 积分)与自定义金额(1~66 积分),实时展示当前积分并在余额不足时禁止确认
-
打赏积分流转与通知:打赏金额实时从打赏者扣除并等额计入帖子作者积分,双向写入积分流水(可追溯);打赏同步为作者生成「被打赏」消息通知,点击可跳转到对应帖子
-
打赏信息折叠区域:存在打赏的帖子正文下方展示默认折叠的「打赏信息」区域(共打赏积分与人数),展开后实名展示打赏人列表(头像 / 昵称 / 金额 / 时间,分页加载);该信息不随分享直链展示
-
打赏防刷限制:每个用户每天最多打赏 3 次;不能打赏自己发布的帖子,也不能打赏同一设备 / 同一网络(发帖 IP 相同)发布的帖子;每人每帖仅可打赏一次且不可撤销;打赏操作应用业务限流
-
打赏级联清理:帖子被删除时,其全部打赏记录一并清理
Important
本版本社区新增外链分享;分享链接访问配额按档位消耗积分,发布前请知悉定价规则。
-
帖子外链分享:帖子详情页新增「分享」按钮(仅作者本人可见),弹窗可设置访问次数上限(默认 1000 次,1~10000 次)并生成公网直链,一键复制;弹窗内展示当前积分与本次发起所需积分,余额不足时无法发起
-
分享按档位计费:发起分享消耗的积分按次数档位收取——≤1000 次消耗 100 积分、1000
4000 次消耗 200 积分、400010000 次消耗 500 积分;撤销不返还积分,消耗计入积分流水便于追溯 -
直链浅色阅读页:浏览器打开分享直链返回浅色主题的 Markdown 渲染页(标题 / 作者 / 板块 / 正文,支持表格、任务列表、任务勾选、GitHub 风格提示引用块等),访问计数原子递增;达到次数上限后展示「访问次数已用完/链接失效」页面并延时跳转到 i-code 项目
-
管理端分享管理:社区管理员页面新增「分享」页签,可查看全站分享记录(发起人、帖子、次数用量、状态、直链,可按帖子筛选)并撤销任意分享(撤销后直链失效,积分不返还)
-
分享级联清理:帖子被删除时,其关联的外链分享一并失效
-
社区 Markdown 编辑器语法工具栏:发帖正文与一级评论编辑框顶部新增语法工具栏,支持粗体、斜体、删除线、标题、引用、行内代码、代码块、链接、图片、任务列表、无序 / 有序列表、表格、分隔线、换行,在光标处或选中处插入对应 Markdown 语法
-
社区换行与空格渲染:正文单换行直接渲染为换行(不再被折叠成空格),段落内多空格原样保留
-
社区代码块超长折叠:帖子正文与一级评论中超过 12 行的代码块默认折叠,显示「展开全部 N 行 / 收起」按钮,点击可展开查看完整内容
-
社区代码块操作菜单:渲染出的代码块右上角新增「⋯」菜单,点开提供复制(一键拷贝代码原文,临时绿色对勾反馈)与自动换行(软换行开关,联动菜单对勾指示)两项操作
-
社区代码块语法高亮:代码块按语言高亮(java / html / css / shell / powershell / bash / xml / yaml / javascript / typescript / python / go / rust / c / cpp 等,未标注语言自动探测),并提供与软件亮 / 暗主题联动的两套配色
-
发帖弹窗全屏放大(系统全屏 + 分屏预览):发帖 / 回复弹窗右上角(close 按钮旁)新增全屏放大入口,使用系统级全屏(Fullscreen API,参考脚本编辑器 / 模型统计)放大整个弹窗至全屏,ESC / 还原按钮退出;全屏态下 Markdown 编辑器自动切换为「左编辑 / 右预览」左右分屏,工具栏横跨顶部
-
发帖标题帮助提示:发帖标题右侧新增 helpicon 帮助图标,点击弹出字数限制说明(标题 80 字、正文 5000 字以内)
-
社区 Markdown 渲染器隔离:社区帖子正文、一级评论、发帖与回复预览改用独立的社区渲染器,与软件内全局渲染器解耦,代码块折叠等社区特有能力不再影响更新日志等场景
-
编辑帖子弹窗升级:「我的帖子」编辑与管理端编辑帖子弹窗对齐新建帖子弹窗——支持新 Markdown 编辑器(语法工具栏 / 编辑-预览 / 全屏分屏)、系统全屏放大、紧凑布局与标题帮助提示
-
发帖弹窗布局紧凑化:缩小发帖弹窗内板块选择、标题、正文等元素的间距,整体更紧凑
- 管理端举报治理:举报列表每条新增「详情」入口,可跳转到目标帖子并在详情内编辑 / 删除帖子与任意回复;「处理」改为措施弹窗,支持对被举报人封禁 / 禁言(禁言可选时长或永久)、修改内容(帖子标题 / 正文 / 板块,或回复正文)、忽略,任一处置完成后自动将该举报标记为已处理
-
社区消息通知:新增消息通知体系——他人回复你的帖子 / 评论、管理员对你封禁 / 禁言时都会生成通知记录;社区首页「发帖」右侧新增消息铃铛按钮(无文字),存在未读通知时展示小红点,点击进入通知列表并自动将全部通知标记为已读,回复类通知可点击跳转到对应帖子
-
一级评论 Markdown:帖子详情页一级评论(顶层评论)正文支持 Markdown 渲染;发表顶层评论 / 回复顶层评论改用支持 Markdown 编辑与预览的新回复弹窗,二级(楼中楼)评论保持纯文本并使用原回复弹窗
-
楼中楼 @昵称:楼中楼回复若回复的是另一条二级评论,会在其作者昵称后追加显示 @目标昵称,便于理清回复对象
-
社区签到排行:社区右侧个人栏在「积分排行」下方新增「签到排行」入口,支持累计签到与连续签到两套排行(各自分页、前三名高亮、可加载更多 / 刷新);封禁用户已过滤,禁言用户仍正常展示;连续签到按当前连续天数(今日或昨日仍连续)统计
-
预设模型扩充:内置模型预设新增 7 个模型——智谱
glm-5.3、Metamuse-spark-1.2-contributor、通义qwen3.8-max/qwen3.8-27b、谷歌gemini-3.7-flash/gemini-3.6-flash/gemini-3.5-flash-lite
-
Toast 位置与关闭:系统 Toast 弹窗默认移动到上方居中展示,新增常驻右上角「关闭」角标
-
Toast 滑动删除:toast 弹窗支持向左 / 右拖动删除
-
用户资料缓存:社区「我的信息」缓存有效期由 15 秒延长至 6 小时,降低社区接口调用频率
-
社区链接跳转:社区 md 文章中的外部链接(http/https/mailto/tel)点击后弹出选择菜单,支持「在应用内打开」或「在浏览器打开」,避免链接跳转打断应用
-
站内专属浏览器窗口:「在应用内打开」会新开一个专属浏览器窗口,顶部提供返回、刷新按钮与地址栏,下方以内嵌网页展示目标内容;目标站点禁止内嵌时可改用「在浏览器打开」兜底
-
全局右键菜单:应用内所有界面接管右键,弹出自定义菜单,提供粘贴、复制选中文本、刷新界面、回到主页操作(顶替 WebView2 原生右键菜单;粘贴通过后端读取系统剪贴板,兼容 Windows / macOS / Linux 各平台)
-
社区签到积分:社区新增每日签到获取积分功能,每次签到随机获得 10~50 积分(服务端加密随机源),连续满 5 天额外奖励 200 积分;积分流水单独落表(
points_ledger)便于追溯,用户信息接口同步返回累计积分,个人栏展示积分与连续签到天数 -
积分排行:社区右侧个人栏新增「积分排行」入口,展示全站用户按累计积分降序的排行榜(前三名高亮,支持加载更多 / 刷新);封禁用户已过滤,禁言用户仍正常展示
-
用户禁言:管理员可对用户设置指定时长或永久禁言(懒删除,到期自动失效,无需定时任务);禁言期间仅可浏览、无法发帖 / 回复;禁言徽章在个人栏与帖子、评论的作者昵称旁展示,禁言原因可选展示给用户
-
管理员登录保护:登录接口增加防爆破(按日历日累计凭证错误达阈值即永久封禁来源 IP,仅人工从数据库恢复);登录成功后前端缓存会话 6 小时,避免频繁重复登录
- 管理员会话有效期调整:服务端会话时长与前端缓存时长对齐并留有缓冲,避免会话提前失效导致重复登录
Note
本次更新新增社区(beta)模块,默认关闭
-
社区模块完整功能:新增社区入口导航与国际化配置,社区路由页与全量业务组件(帖子列表 / 详情 / 评论区 / 个人栏 / 发帖 / 点赞 / 签到 / 资料设置),后端新增社区服务、Rust Command 与类型定义,并引入设备身份(
MachineGuid加盐哈希)与 Worker REST 客户端 -
管理员帖子与回复管理:管理员页面新增「帖子管理」Tab,支持所有用户的帖子分页列表(游标分页 + 板块过滤)、帖子编辑 / 删除;进入详情可查看帖子全文与评论区,并对任意回复进行行内编辑 / 删除(删除顶层评论级联楼中楼)
-
站点治理与帖子锁定:管理员页面新增「站点治理」Tab,提供全站禁言 / 禁止发帖 / 禁止评论回复三开关(
muteAll优先级最高)+ 帖子级锁定(锁定后禁止新增评论回复、存量保留展示);用户端在治理或锁定命中时禁用发帖 / 回复入口并展示提示,帖子列表与详情展示锁定状态 -
帖子列表缓存:帖子列表新增 30 秒内板块切换缓存复用与缓存清空方法,发帖后刷新列表避免触发 API 限流
-
Markdown 组件泛化:将 Markdown 渲染组件重构为通用全局组件,供社区与更新检查等模块复用
-
回复弹窗交互:帖子详情以回复弹窗替换原底部固定输入区,优化评论交互体验
- 社区页面布局重构:统一使用原生滚动替换 ScrollPage 组件,调整列表容器样式;重构社区路由配置,修正路由路径;调整弹窗、表单、按钮样式与尺寸,统一 UI 风格
Important
本次更新包含数据库结构变更(V007 虚拟路由迭代:健康检查元数据列、路由权重列、路由尝试历史表),升级后自动应用迁移。
-
虚拟路由字段补全:
virtual_model_routes的timeout_ms/extra_headers_json/extra_body_json列真正可用;网关转发时合并路由级额外请求头与请求体(路由级覆盖供应商级);表单支持单独禁用某条路由、配置超时与高级 JSON 编辑器 -
虚拟路由主动健康检查:调度器新增
health_check_loop,每 60 秒对已降级或最近失败的路由发起轻量探活(GET /v1/models,5s 超时);探活成功恢复健康,连续失败 3 次自动降级;路由列表展示连续失败次数与失败原因 badge -
load_balance 策略实现:新增
RouteSelectortrait 与FallbackSelector/LoadBalanceSelector/OnAllSelector三个实现;load_balance策略按weight字段加权随机选择 1 条健康路由;on_all暂降级为 fallback 顺序尝试(并发实现留待后续迭代);路由表单在 load_balance 策略下显示权重输入框 -
虚拟路由尝试历史落库与可视化:新增
virtual_route_attempts表记录每次路由尝试(成功/失败、状态码、耗时、错误原因);VirtualForwarder在每条路由尝试结束后异步写入历史;调度器每 24 小时自动清理 30 天前历史;虚拟供应商详情页新增「路由历史」Tab,展示路由维度统计(成功率/平均耗时/最近失败原因)与选中路由的最近 50 次尝试明细 -
虚拟模型图节点 Tooltip:子级路由节点 hover 展示 Radix Tooltip,结构化显示优先级 / 权重 / 健康状态(颜色编码:健康=绿/不健康=红/禁用=灰/未知=主色)/ 上次探活时间 / 探活耗时 / 连续失败次数 / 失败原因
-
单条路由测试:
RouteSettingsList每行新增「测试」按钮(fa-bolt 图标),调用新增virtual_provider_route_testCommand 对目标供应商发起轻量探活请求(GET /v1/models,5s 超时),结果用 toast 展示(HTTP 状态码 + 耗时 + 错误信息);不写入virtual_route_attempts避免污染统计 -
alias 变更影响检查:新增
virtual_provider_check_alias_impactCommand,统计cli_model_mappings中gateway_model_id以旧别名为前缀的记录数;编辑虚拟供应商时别名变化后防抖 300ms 自动检查,有影响时在字段下方展示黄色警告提示 -
路由拖拽排序:
RouteSettingsList引入 @dnd-kit(core + sortable + utilities,合计约 19KB gzip)实现拖拽排序;行首新增 grip 拖拽把手(仅把手响应拖拽,避免与行内输入框/开关冲突),拖拽结束后按新顺序自动重算priority
- 虚拟模型路由图统计修复:「N 条路由 · 已启用 N」改为仅统计子级真实路由,不再误把父级虚拟模型节点计入路由数
-
数据库 schema 升级至 V007;本次迭代三块 schema 变更(探活元数据列、路由权重列、路由尝试历史表)合并为单个迁移
V007__virtual_route_iteration.sql -
VirtualForwarder::run路由解析入口由resolve_fallback_routes改为resolve_routes_by_strategy,按虚拟供应商策略选择路由 -
SaveVirtualModelRouteInput新增timeoutMs/extraHeaders/extraBody/weight字段;enabled由前端传入(原硬编码 true)
-
日期选择类组件支持清空:DatePicker / DateTimePicker / DateRangePicker / DateTimeRangePicker 新增清空按钮,仅在已有值时显示,点击后完全移除已选值并关闭弹窗
-
模型统计时间范围扩展:新增「12 小时」与「今天」两个快捷选项,时间范围选择逻辑重构为基于 ID 匹配,避免数组引用变化导致定时刷新节奏被打乱
-
端口占用弹窗 Windows winnat 指引:端口占用提示弹窗 Windows 部分新增第 3 步——重启 winnat 服务(
net stop winnat; net start winnat),用于解决 Hyper-V / WSL 保留端口导致固定端口无法绑定的问题 -
网关启动失败复用端口帮助弹窗:网关启动绑定端口失败(端口被占用 / 权限不足 / 地址不可用)时,复用 PortInUseDialog 展示分平台排查指引,而非仅展示一条失败 toast
-
供应商网络检测弹窗滚动布局修复:移除外层 Radix ScrollArea(其注入的
display: table包裹层导致固定高度失效),改用原生 div overflow-auto + min-h-0 + DialogContent max-h-[80vh] -
网络检测错误信息截断与详情查看:Ping 错误信息过长时默认截断(max-width 220px),点击展开 Popover 查看完整错误内容并支持复制
-
状态字段文字竖排修复:调整列宽(w-20)并添加 whitespace-nowrap,防止表头与单元格文字垂直换行
-
版本号升级至 0.2.1
-
PortInUseDialog 组件泛化:新增可选
title/descriptionprops,供 OAuth 授权与网关启动两个场景复用 -
供应商列表移除顶部「刷新」按钮,保留新增 / 导入 / 网络检测等操作
-
WebDAV 备份路径拼接错位修复:修复 WebDAV 备份在
base_url自带 path(如https://dav.jianguoyun.com/dav/的/dav)时,服务器返回的 href 与base_url同名前缀重复拼接(如/dav/dav/...),导致 PUT / GET / DELETE 请求路径错位触发 409 等错误- 新增
extract_path_from_url/href_to_remote_path路径归一化工具函数,将服务器返回的 href 转换为相对于base_url的路径(仅当剩余部分为空或以/开头时才去除前缀,避免/dav误匹配/dav-backup等场景)
- 新增
-
网关 Token 累计消耗图:网关总览页在「Token 消耗」与「请求趋势」卡片之间新增「Token 累计消耗」卡片,展示最近 31 天(按天聚合)的 Token 消耗柱状图
-
支持按模型 ID 筛选(默认全部模型,下拉选项来自统计期内实际出现过的模型)
-
双色柱:亮色为当天总 Token 消耗,深色为当天缓存命中 Token 消耗;颜色随主题主色自适应明暗
-
数据来自预聚合查询
model_call_stats_daily,随图表自动刷新周期更新
-
- 模型折线图配色升级:Token 消耗图与请求趋势图的模型配色表前两位固定为「主题色」与「主题深色」(与 Token 累计消耗柱状图的「总消耗 / 缓存命中」一致),其余模型色围绕主题色相由外圈向内圈交替渐变,全站图表配色与主题主色统一
Important
数据库结构变更:gateway_settings 表新增 DeepSeek 思考修复配置列(V006 迁移,应用启动时自动执行,无需手动操作)。
-
DeepSeek 思考修复(网关侧):网关设置新增「DeepSeek 思考修复」开关,解决 DeepSeek V4 思考模式下多轮对话报错(上游要求 assistant 消息必须携带
reasoning_content,但模型有时仅返回 tool_calls 而不产生该字段,导致下一轮请求被 400 拒绝)-
gateway_settings表新增deepseek_thinking_fixJSON 配置列(enabled/keyword/matchMode,默认关键字deepseek、默认匹配模式contains),网关设置页新增配置卡片:开关 + 模型匹配关键字输入 + 匹配模式下拉(contains/equals/prefix/suffix),附帮助气泡说明 -
开启后,网关转发器在请求体预处理之后、协议桥接之前,为匹配模型的 assistant 消息补注入空
reasoning_content兜底(忽略大小写匹配,仅对 Chat Completions 协议生效)
-
-
供应商网络检测新增「按供应商配置」模式:供应商列表网络检测下拉新增第三种模式,按各供应商自身代理配置发起检测
gateway_provider_pingCommand 支持config模式:按供应商proxy_json配置应用代理(未配置或global类型回退到全局代理,direct类型直连,socks/http类型使用各自代理),与既有「直连」「代理」模式并列
- DeepSeek V4 思考模式多轮对话报错(聊天侧):聊天模块回传历史消息时,将助手消息的 thinking 思考内容作为
reasoning_content字段一并回传。此前思考模式下缺少该字段会导致多轮对话被上游拒绝、对话中断
-
内置供应商列表排序调整:内置供应商列表改为按
sortOrder倒序排列(值越大越靠前),推荐供应商优先展示 -
网关认证界面调整:API Key 管理卡片移除头部描述文字,卡片右侧新增网关启动后的访问地址,点击一键复制带
/v1的完整 URL -
网关访问地址记忆:接口文档弹窗中最后选中的访问地址会持久化,网关配置状态卡片、仪表盘与 API Key 管理处的地址展示均优先跟随该选择;未选择时仍按排序规则展示
-
聊天界面支持多网关协议选择:会话支持
Chat/Messages/Responses三种网关协议类型,可在聊天界面切换,适配不同厂商 API 格式-
后端按协议构造请求体:
Chat走POST /v1/chat/completions、Messages走POST /v1/messages(Anthropic 原生)、Responses走POST /v1/responses(OpenAI Responses) -
流式与非流式响应按协议分别解析:
extract_stream_deltas统一按协议提取内容 / 思考 / usage / 结束标记;message_stop与response.completed判定流结束,response.completed同时携带完整 usage(先合并 usage 再判结束,避免丢用量)
-
-
聊天记录消息模型 ID 追踪:助手消息与
chat:stream-done事件新增model字段,存储实际生成该条消息的模型 ID(provider_slug/model_id),避免会话内切换模型后历史气泡被改写 -
单条聊天消息删除:新增
chat_message_deleteCommand,从会话 JSONL 中移除指定消息并回写会话摘要计数与会话更新时间(此时无 parent / 子消息引用,采用纯 retain 全量删除,注释预留未来引用关系级联校验说明) -
聊天记录 HTML 导出:新增
chat_export_html/chat_reveal_file后端命令,将会话导出为内联主题样式、可离线查看的 HTML 到配置目录exports/(文件名安全化,禁止路径越界),并支持在系统文件浏览器中定位导出文件-
前端完善导出模板:项目 Logo、页脚与响应式布局;导出成功后展示结果弹窗,支持「打开文件所在文件夹」
-
消息操作菜单重构为独立组件并内置到气泡内,助手消息支持复制、删除操作
-
-
供应商表单内置预设推荐标记:从内置预设创建供应商时,协议类型与认证方式下拉中由预设支持的选项右侧显示「拇指」推荐图标(
fa-thumbs-up),引导用户选择与预设匹配的配置builtin-providers.json新增providerTypes(支持的协议类型列表)与authMethods/defaultAuth(支持的认证方式与默认认证配置)字段,seed 逻辑与前端类型定义同步贯通
-
开机自启启动同步与优雅错误处理:应用启动时静默核对 DB 中
auto_start_enabled与系统实际注册状态,不一致时修正系统侧(覆盖软件更新后路径变更、注册项缺失等场景残留)-
关闭自启时若遇「系统找不到指定的文件(os error 2)」类错误,视为系统侧本就无注册项、与期望状态一致,静默处理不再报错
-
启用失败时回滚 UI 与 DB 状态,前置避免状态不一致
-
-
发布流程脚本:新增
latest.json(Tauri 自动更新)的notes更新脚本与 GitHub Actions workflow,支持手动指定或从 CHANGELOG 中提取对应版本章节作为 update notes(与 release body 同源,兼容 beta 预览版提示)
-
按协议拉取官方模型:供应商表单「拉取官方模型」按钮升级为分裂按钮(split button),主按钮执行默认拉取策略,右侧下拉菜单支持按指定协议拉取
-
主按钮:沿用原有默认策略(按供应商
provider_type自动匹配) -
下拉菜单:支持显式选择「OpenAI 兼容协议(
/models)」或「Anthropic 原生协议(/v1/models)」拉取 -
前端通过新增
gateway_fetch_models_by_protocolCommand 调用,传入providerId与protocol参数
-
-
Gemini 模型拉取不兼容 OAuth:
fetch_gemini_models此前仅通过?key=查询参数传递 API Key,既不兼容 OAuth Token 认证,也无法满足只认请求头的中转网关,导致部分供应商拉取返回401 API key is required in Authorization / x-api-key / x-goog-api-key header-
重构为支持三种认证方式:
-
API Key:同时写入
?key=查询参数与x-goog-api-key请求头,官方generativelanguage.googleapis.com与只认 header 的中转网关均可工作 -
OAuth Token(
google-gemini-oauth等):写入Authorization: Bearer {token} -
其他 OAuth 变体:token 为 JSON(含
accessToken)时解析后同样作为 Bearer 写入
-
-
-
OpenAI 兼容协议模型拉取认证头单写:
fetch_openai_compatible_models此前仅写入Authorization: Bearer {key},部分中转网关(Anthropic 风格 / Google Gemini 风格)无法识别。改为三通道写入,兼容官方 OpenAI 与各类中转网关:-
Authorization: Bearer {key}:OpenAI 标准 -
x-api-key:Anthropic 风格 / 部分中转网关 -
x-goog-api-key:Google Gemini 风格 / 部分中转网关 -
官方端点会忽略多余的请求头,无副作用
-
-
通配符监听时 LAN 地址列表缺失 loopback:
useLocalIps在通配符监听(0.0.0.0/::)场景下返回的hosts列表仅包含 LAN IP,本机无法直接通过127.0.0.1访问网关。现于 LAN 地址列表末尾追加127.0.0.1(若未包含),追加在排序之后确保始终位于列表最末尾,方便本机直接通过本地环回地址访问网关
-
模型调用统计展示总 token:模型统计页面的统计描述新增「总 token」展示(随当前「明细 / 汇总」Tab 联动,取当前视图数据求和)
-
新增
formatTokenKMBtoken 格式化工具函数,支持 K(千)/ M(百万)/ B(十亿)西式紧凑单位转换;非法输入兜底返回0 -
ModelList新增activeTab状态追踪当前激活 Tab,据此计算对应视图的totalTokens并参与统计描述totalTokens占位符渲染
-
-
模型列表默认视图模式改为滚动模式:
ModelList表格视图模式默认由compact(自适应换行)改为scroll(固定列宽横向滚动),避免列宽撑开导致布局溢出 -
日志 URL 与实际请求 URL 不一致:重构
build_log_url(forwarding/util.rs),改为通过bridge_upstream_protocol计算桥接后的上游协议再选路径,与AnthropicClient/OpenAiChatClient内部build_upstream_url的入参保持一致,解决桥接场景下入口协议(如ChatCompletions)与上游协议(如AnthropicMessages)不同导致日志展示路径误导排查的问题 -
流式桥接转换函数调用方向错误:修正
forwarder流式桥接(apply_stream_bridge)中两种桥接模式下的 SSE 转换函数调用方向——OpenaiToAnthropic(入口 O → 上游 A)响应需转换为入口 OpenAI SSE(anthropic_sse_to_openai),AnthropicToOpenai(入口 A → 上游 O)响应需转换为入口 Anthropic SSE(openai_sse_to_anthropic),即响应转换方向与请求转换方向相反,与apply_response_bridge/convert_error_body保持一致;同步更新注释说明转换逻辑细节
- Anthropic Client 凭证双写
Authorization头:配置ApiKey时,除写入x-api-key外,同步写入Authorization: Bearer {key},兼容需要双重认证的中转网关(如小米 token-plan 等);官方 Anthropic API 只认x-api-key,多出的Authorization头会被忽略无副作用,extra_headers仍可在最后覆盖x-api-key/Authorization/anthropic-version
-
协议桥接模块(Anthropic ↔ OpenAI Chat 双向转换):当网关入口协议与上游供应商协议不一致时,在转发前对请求 / 响应 / 流式事件做双向转换,支持 Anthropic Messages 与 OpenAI Chat Completions 协议互转
-
新增
gateway_runtime/bridge模块:BridgeKind枚举与detect_bridge触发判定、anthropic_to_openai_chat/openai_chat_to_anthropic请求体转换、非流式响应体双向转换、流式事件状态机双向转换(容错:畸形 chunk 透传并告警) -
关键约束:
max_tokens缺失时从model_configs.max_output_tokens读取,兜底MAX_TOKENS_FALLBACK = 200000;O→A 时移除response_format并在system末尾追加提示;工具调用 ID 原样透传不重命名 -
GatewayProtocol::to_upstream_with_bridge按桥接判定返回上游 Client 实际协议;forwarder在execute_and_finalize/apply_stream_bridge集成桥接,非桥接场景零开销 -
方案文档:
docs/proposals/protocol-bridge.md(P1–P4 全部落地,v1.0.0 released)
-
-
脚本模板变量依赖声明(
varList):公共仓catalog.json/meta.json新增varList字段,显式声明脚本依赖的系统变量(api_key/provider.base_url等)与供应商「扩展模板变量」(variables["cookie"]等)-
后端
marketplace/types.rs新增VarDef/VarSource,RemoteCatalogItem与MarketplaceItemSummary透传var_list -
前端
MarketplaceItemSummary新增varList;脚本模板市场详情面板移除 tag 标签展示,改为渲染变量列表(变量名 / 来源徽章 system=蓝 custom=琥珀 / 必填徽章 / 描述),无变量时显示占位
-
-
供应商协议类型桥接帮助提示:供应商表单「协议类型」标签新增
HelpIcon帮助气泡(popover/side=top),说明协议桥接行为;i18n 补充providerTypeBridge帮助文案
-
日志协议标签
websocket更名为ws:protocol_tags/detect_response_tags/LogEntry注释统一将websocket标签更名为ws,前端日志筛选器与展示同步迁移 -
桥接转发新增
bridge日志标签:protocol_tags签名新增BridgeKind参数,桥接转发额外标记bridge,便于日志按桥接场景筛选
- 协议桥接模块新增 13 个单元测试(
bridge/tests.rs,共 1773 行):覆盖请求 / 响应 / 流式转换规则、容错策略、工具调用 ID 透传等;全部 290 个测试通过
- 方案文档:
docs/proposals/protocol-bridge.md;docs/gateway-runtime.md已同步桥接模块说明与实现状态
-
自研 logger 请求头展示(去敏):网关(inbound 入站请求头)与供应商 API(outbound 出站请求头,缺失时回退到入站头)日志展示请求头 JSON(敏感头值替换为
***),位于「模型 ID」下方一行,随导出写入 CSV / JSON-
新增
request_headers_to_json去敏序列化(logging/headers.rs):将HeaderMap序列化为有序 JSON;头名称(不区分大小写、子串匹配)命中authorization / api-key / token / secret / credential / cookie / auth任一敏感片段时值替换为***;非 UTF-8 二进制值序列化为<binary>;无请求头时返回None -
UpstreamClient::execute签名改为&mut UpstreamContext,各 Client(openai_chat / anthropic / openai_responses / websocket)在发送前对真实出站请求头做去敏快照写入UpstreamContext.request_headers_json,供转发(provider-api)日志展示 -
网关四个对外 handler(
chat/responses/messages/models)捕获入站HeaderMap并透传到网关日志与转发日志 -
LogRecord/LogEntry新增request_headers: Option<String>字段;CSV 导出新增requestHeaders列 -
前端
LogViewer以 JSON 缩进格式展示请求头,i18n(zh-CN / en / ja / zh-TW)补充requestHeaders文案
-
-
SSE chunk 专属日志文件(按小时滚动):SSE chunk 日志通过独立 target
i_code::sse写入单独按小时滚动的i-code-sse.*.log(前缀i-code-sse),不混入主日志文件,避免高频 chunk 刷屏-
SSE 专属 fmt layer 使用
TraceIdFormat::without_location(),文件内不打印 target 与 file:line -
常规主日志过滤器(
MainLogFilter)排除i_code::ssetarget,确保 chunk 只进专属文件
-
- 日志分段大小写入加固(
SizeAwareFileAppender):写入超限时不只判断滚动,改为按max_size拆分 buffer——先写满当前文件、滚动到新分段后继续写剩余部分,保证每个分段不超过max_size(修复单块大写入出现 ~40MB 分段的隐患);使用create_new(O_EXCL)独占创建分段并跳过已被占用的序号,从根上避免多进程 / 多次重启把同一分段追加撑大或序号复用
- 复制的网关 API 地址缺少
/v1路径:网关 API 文档弹窗与网关首页的「复制 API 地址」按钮此前只复制http://host:port,现统一补充/v1,复制完整的 OpenAI 兼容基础地址
-
Grok Build(xAI 订阅)额度监控:新增
grok-build余额监控方法,调用 Grok CLI 内部 chat-proxy billing 端点查询周/月额度(GET /billing?format=credits/GET /billing)-
认证分支:
xai-grok-oauth(OAuth 账号,免费档 / SuperGrok)走cli-chat-proxy.grok.com/v1/billing;API Key 回退api.x.ai健康探测(/v1/me+/v1/chat/completions),仅提供可用性状态,无法给出精确剩余额度 -
请求头对齐
gateway_runtime/auth_resolver.rs的 xAI Grok OAuth 解析(x-grok-client-version/xai-grok-cli等);金额字段单位统一为分,输出转换为美元字符串传输,避免浮点精度问题 -
方案文档:
docs/proposals/grok-build-billing-monitoring.md
-
-
余额查询统一走全局代理:新增
build_balance_http_client()统一构造额度查询 HTTP 客户端,复用应用全局代理配置(shared::apply_global_proxy,对齐docs/proxy.md);全部 12 个内置 balance provider(DeepSeek、Codex、Kimi、MiniMax、Grok Build、OpenRouter 等)从reqwest::Client::new()切换为统一构造,全局代理未启用时按规范强制直连(不读系统环境变量代理),连接超时 10s、总超时 30s -
Grok Build 字段解析增强:金额/对象/百分比字段候选键兼容 camelCase / snake_case(
creditUsagePercent/credit_usage_percent、currentPeriod/current_period、productUsage/product_usage、monthlyLimit/monthly_limit等);新增「月度用量百分比」指标(used / monthlyLimit × 100,仅额度上限 > 0 时输出) -
脚本模板重命名:公益 Grok 监控 snippet 更名「公益Grok监控(第三方)」(id
grok-usage→grok-usage-thirdparty),与官方 Grok Build 订阅监控区分 -
隐藏「测试数据」内置监控方法:余额配置表单中的
synthetic(测试数据)选项不再展示
-
日语与繁体中文语言支持:应用语言新增「日本語」「繁體中文」选项,i18n 模块、日期组件(date-fns / react-day-picker)、设置页面语言列表、后端
Locale枚举同步扩展;翻译文件ja.json/zh-TW.json新增 -
转发重试事件双通道日志:网关转发器(
forwarder)的重试事件(首次请求、退避重试、状态码判定、重试耗尽、网络错误等)同时写入tracing(tauri-plugin-log,终端/日志文件)和自研内存 logger(应用内「日志」页面可见),便于运行时诊断与开发调试
-
内置预设自动关联默认模型:
builtin-providers.json新增defaultModels属性(modelId实际发送给供应商、matchModelId对应builtin-models.json中的模型 id、displayName展示名),从内置预设创建供应商(如 OpenCode Zen Free、Cline Free)时自动按matchModelId匹配内置模型并创建model_config+gateway_model(source = builtin),无需创建后再手动添加BuiltinProvider/CreateProviderInput两端新增defaultModels字段;后端匹配逻辑与前端findBuiltinByModelId一致(精确 > 前缀 > 包含回退),匹配不到时跳过该条目并告警,不阻断供应商创建
-
供应商导出丢失附加请求头:
gateway_provider_export此前将extra_headers硬编码为None直接丢弃。现改为读取provider_extra_headers表并写入导出数据(版本升至1.1,旧1.0数据导入兼容)-
导出(带密钥):
$SECRET引用解析为明文 -
导出(不带密钥):含
$SECRET引用的条目跳过,避免导入后悬空引用导致转发失败;普通明文与模板变量占位符(${uuid()}等)原样保留 -
导入侧逻辑原已就绪(
import_provider会将extraHeaders写入provider_extra_headers表),本次补齐导出侧后闭环
-
-
网关支持 OpenAI Responses API(
POST /v1/responses):本地网关新增对外端点与完整转发链路,支持 Agent 场景的 Responses 协议调用(SSE 事件流 / 非流式)-
新增
responseshandler(router.rs),错误体沿用 OpenAI 标准{error:{message,type,param,code}}格式,自动纳入 API Key 认证与网关日志 -
GatewayProtocol/UpstreamProtocol新增Responses变体,openai-responses供应商类型从 WebSocket 占位改为真实可用 -
新增
OpenAiResponsesClient(client/openai_responses_client.rs):默认走 HTTP/SSE 透传(路径/responses),认证复用 OpenAI 兼容解析(Bearer + extra headers) -
usage 提取支持 Responses 格式:非流式兼容
input_tokens/input_tokens_details.cached_tokens;流式解析response.completed事件中的response.usage -
estimate_prompt_tokens支持 Responses 请求体input字段(字符串 / item 数组),调用记录 token 估算不再缺失
-
-
Responses WebSocket 传输:
openai-responses供应商配置transport = websocket时,网关以 WebSocket 连接上游(wss://{base}/responses),支持response.create事件与热事件流-
引入
tokio-tungstenite依赖(rustls-tls-native-roots,与 reqwest 一致读取系统证书库) -
UpstreamResponse新增WebSocketStream变体:Client 将 WS 文本帧转换为 SSE 格式字节流(data: {json}\n\n),收到response.completed/response.failed/response.incomplete/error终止事件后发送 Close 帧 -
response_handler重构build_sse_from_stream统一 SSE 构造入口,Streaming与WebSocketStream共用字节流透传与 usage 拦截逻辑
-
-
供应商传输方式配置:
CreateProviderInput/UpdateProviderInput新增transport字段(auto/sse/websocket)并贯通 repository 读写;供应商表单新增「传输方式」下拉(仅openai-responses协议显示),auto/sse走 HTTP+SSE,websocket走 WebSocket -
网关接口文档更新:
GatewayApiDocsDialog新增POST /v1/responses端点条目,i18n(zh-CN / en)同步补充
-
日志协议标签修正:
protocol_tags增加transport参数,仅当供应商显式配置transport = websocket时才打websocket标签,HTTP 透传场景统一标记为sse,不再对openai-responses一律误标 -
WebSocket 客户端占位范围收窄:
openai-responses已由真实实现接管,WebSocketClient占位仅保留服务openai-codex/websocket类型
usage_extractor新增 5 个单元测试:Responses 非流式 usage、Chat Completions 回归、Responses 流式response.completed、中途事件不污染、缺失 usage 兜底
-
有状态 API(
previous_response_id、GET /v1/responses/{id}等)仅透传上游,网关不维护本地会话状态;WebSocket 传输暂不应用代理配置 -
方案文档:
docs/proposals/responses-api-support.md;docs/gateway-runtime.md已同步路由清单、协议标签与实现状态
-
供应商附加请求头编辑与管理:供应商表单「高级」页签新增「附加请求头」编辑器,支持增删改请求头,网关转发到上游时注入且可覆盖默认头
-
值支持模板变量:
${uuid()}(每次请求随机)、${uuid_by_day()}(当天固定)、${variables["key"]}(供应商扩展变量);$SECRET引用原样保存、转发时自动解密 -
新增
gateway_provider_extra_headers_listCommand,编辑供应商时加载并回填现有请求头 -
创建供应商时自动回填内置预设的默认附加请求头(如 OpenCode Zen Free 的
Authorization: Bearer public与x-opencode-*系列)
-
-
OAuth Token 续期原地更新:OAuth 续期成功时新 token 原地更新原 Secret 引用(保留 id),避免每次续期产生孤儿 Secret 记录
-
TLS 信任系统证书库:reqwest 切换为
rustls-tls-native-roots,TLS 校验读取系统证书存储(Windows 证书库),支持信任用户安装的代理 MITM 根证书(如 Proxypin CA)
-
附加请求头创建时丢失:修复从内置预设创建供应商时
defaultExtraHeaders未回填表单导致附加请求头被丢弃、网关无头可注入的问题 -
附加请求头无法编辑:修复编辑供应商时
UpdateProviderInput缺少extra_headers字段导致附加请求头保存被忽略的问题
UpdateProviderInput新增三态extra_headers字段(传对象=全量替换、传 null=清空、不传=不修改)