Releases: xucux/i-code
Releases · xucux/i-code
Release list
i-code v0.1.10
[0.1.10] - 2026-08-09
🚀新增
- 网关 Token 累计消耗图:网关总览页在「Token 消耗」与「请求趋势」卡片之间新增「Token 累计消耗」卡片,展示最近 31 天(按天聚合)的 Token 消耗柱状图
- 支持按模型 ID 筛选(默认全部模型,下拉选项来自统计期内实际出现过的模型)
- 双色柱:亮色为当天总 Token 消耗,深色为当天缓存命中 Token 消耗;颜色随主题主色自适应明暗
- 数据来自预聚合查询
model_call_stats_daily,随图表自动刷新周期更新
🐞修复
🔄变更
- 模型折线图配色升级:Token 消耗图与请求趋势图的模型配色表前两位固定为「主题色」与「主题深色」(与 Token 累计消耗柱状图的「总消耗 / 缓存命中」一致),其余模型色围绕主题色相由外圈向内圈交替渐变,全站图表配色与主题主色统一
i-code v0.1.9
[0.1.9] - 2026-08-09
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 管理处的地址展示均优先跟随该选择;未选择时仍按排序规则展示
i-code v0.1.8
[0.1.8] - 2026-08-08
🚀新增
- 聊天界面支持多网关协议选择:会话支持
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 预览版提示)
🐞修复
🔄变更
i-code v0.1.8-beta20260808
Note
🚨该版本为预览版(Beta),可能包含未完善的功能🚧
🚨 This version is a preview (Beta) and may contain incomplete features 🚧.
[0.1.8] - 2026-08-08
🚀新增
- 聊天界面支持多网关协议选择:会话支持
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 预览版提示)
🐞修复
🔄变更
i-code v0.1.7
[0.1.7] - 2026-08-07
🚀新增
- 按协议拉取官方模型:供应商表单「拉取官方模型」按钮升级为分裂按钮(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 写入
- API Key:同时写入
- 重构为支持三种认证方式:
- 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(若未包含),追加在排序之后确保始终位于列表最末尾,方便本机直接通过本地环回地址访问网关
i-code v0.1.6
[0.1.6] - 2026-08-06
新增
- 模型调用统计展示总 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
i-code v0.1.5
[0.1.5] - 2026-08-06
新增
- 协议桥接模块(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已同步桥接模块说明与实现状态
i-code v0.1.4
[0.1.4] - 2026-08-05
新增
- 自研 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 只进专属文件
- SSE 专属 fmt layer 使用
变更
- 日志分段大小写入加固(
SizeAwareFileAppender):写入超限时不只判断滚动,改为按max_size拆分 buffer——先写满当前文件、滚动到新分段后继续写剩余部分,保证每个分段不超过max_size(修复单块大写入出现 ~40MB 分段的隐患);使用create_new(O_EXCL)独占创建分段并跳过已被占用的序号,从根上避免多进程 / 多次重启把同一分段追加撑大或序号复用
修复
- 复制的网关 API 地址缺少
/v1路径:网关 API 文档弹窗与网关首页的「复制 API 地址」按钮此前只复制http://host:port,现统一补充/v1,复制完整的 OpenAI 兼容基础地址
i-code v0.1.3
[0.1.3] - 2026-08-04
新增
- 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(测试数据)选项不再展示
i-code v0.1.2
[0.1.2] - 2026-08-04
新增
- 日语与繁体中文语言支持:应用语言新增「日本語」「繁體中文」选项,i18n 模块、日期组件(date-fns / react-day-picker)、设置页面语言列表、后端
Locale枚举同步扩展;翻译文件ja.json/zh-TW.json新增 - 转发重试事件双通道日志:网关转发器(
forwarder)的重试事件(首次请求、退避重试、状态码判定、重试耗尽、网络错误等)同时写入tracing(tauri-plugin-log,终端/日志文件)和自研内存 logger(应用内「日志」页面可见),便于运行时诊断与开发调试