Skip to content

Releases: xucux/i-code

i-code v0.1.10

Choose a tag to compare

@github-actions github-actions released this 09 Aug 10:27

[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

Choose a tag to compare

@github-actions github-actions released this 09 Aug 00:58

[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_fix JSON 配置列(enabled / keyword / matchMode,默认关键字 deepseek、默认匹配模式 contains),网关设置页新增配置卡片:开关 + 模型匹配关键字输入 + 匹配模式下拉(contains / equals / prefix / suffix),附帮助气泡说明
    • 开启后,网关转发器在请求体预处理之后、协议桥接之前,为匹配模型的 assistant 消息补注入空 reasoning_content 兜底(忽略大小写匹配,仅对 Chat Completions 协议生效)
  • 供应商网络检测新增「按供应商配置」模式:供应商列表网络检测下拉新增第三种模式,按各供应商自身代理配置发起检测
    • gateway_provider_ping Command 支持 config 模式:按供应商 proxy_json 配置应用代理(未配置或 global 类型回退到全局代理,direct 类型直连,socks / http 类型使用各自代理),与既有「直连」「代理」模式并列

🐞修复

  • DeepSeek V4 思考模式多轮对话报错(聊天侧):聊天模块回传历史消息时,将助手消息的 thinking 思考内容作为 reasoning_content 字段一并回传。此前思考模式下缺少该字段会导致多轮对话被上游拒绝、对话中断

🔄变更

  • 内置供应商列表排序调整:内置供应商列表改为按 sortOrder 倒序排列(值越大越靠前),推荐供应商优先展示
  • 网关认证界面调整:API Key 管理卡片移除头部描述文字,卡片右侧新增网关启动后的访问地址,点击一键复制带 /v1 的完整 URL
  • 网关访问地址记忆:接口文档弹窗中最后选中的访问地址会持久化,网关配置状态卡片、仪表盘与 API Key 管理处的地址展示均优先跟随该选择;未选择时仍按排序规则展示

i-code v0.1.8

Choose a tag to compare

@github-actions github-actions released this 08 Aug 04:03

[0.1.8] - 2026-08-08

🚀新增

  • 聊天界面支持多网关协议选择:会话支持 Chat / Messages / Responses 三种网关协议类型,可在聊天界面切换,适配不同厂商 API 格式
    • 后端按协议构造请求体:ChatPOST /v1/chat/completionsMessagesPOST /v1/messages(Anthropic 原生)、ResponsesPOST /v1/responses(OpenAI Responses)
    • 流式与非流式响应按协议分别解析:extract_stream_deltas 统一按协议提取内容 / 思考 / usage / 结束标记;message_stopresponse.completed 判定流结束,response.completed 同时携带完整 usage(先合并 usage 再判结束,避免丢用量)
  • 聊天记录消息模型 ID 追踪:助手消息与 chat:stream-done 事件新增 model 字段,存储实际生成该条消息的模型 ID(provider_slug/model_id),避免会话内切换模型后历史气泡被改写
  • 单条聊天消息删除:新增 chat_message_delete Command,从会话 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

Pre-release

Choose a tag to compare

Note

🚨该版本为预览版(Beta),可能包含未完善的功能🚧

🚨 This version is a preview (Beta) and may contain incomplete features 🚧.

[0.1.8] - 2026-08-08

🚀新增

  • 聊天界面支持多网关协议选择:会话支持 Chat / Messages / Responses 三种网关协议类型,可在聊天界面切换,适配不同厂商 API 格式
    • 后端按协议构造请求体:ChatPOST /v1/chat/completionsMessagesPOST /v1/messages(Anthropic 原生)、ResponsesPOST /v1/responses(OpenAI Responses)
    • 流式与非流式响应按协议分别解析:extract_stream_deltas 统一按协议提取内容 / 思考 / usage / 结束标记;message_stopresponse.completed 判定流结束,response.completed 同时携带完整 usage(先合并 usage 再判结束,避免丢用量)
  • 聊天记录消息模型 ID 追踪:助手消息与 chat:stream-done 事件新增 model 字段,存储实际生成该条消息的模型 ID(provider_slug/model_id),避免会话内切换模型后历史气泡被改写
  • 单条聊天消息删除:新增 chat_message_delete Command,从会话 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

Choose a tag to compare

@github-actions github-actions released this 07 Aug 08:05

[0.1.7] - 2026-08-07

🚀新增

  • 按协议拉取官方模型:供应商表单「拉取官方模型」按钮升级为分裂按钮(split button),主按钮执行默认拉取策略,右侧下拉菜单支持按指定协议拉取
    • 主按钮:沿用原有默认策略(按供应商 provider_type 自动匹配)
    • 下拉菜单:支持显式选择「OpenAI 兼容协议(/models)」或「Anthropic 原生协议(/v1/models)」拉取
    • 前端通过新增 gateway_fetch_models_by_protocol Command 调用,传入 providerIdprotocol 参数

🐞修复

  • Gemini 模型拉取不兼容 OAuthfetch_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 Tokengoogle-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 地址列表缺失 loopbackuseLocalIps 在通配符监听(0.0.0.0 / ::)场景下返回的 hosts 列表仅包含 LAN IP,本机无法直接通过 127.0.0.1 访问网关。现于 LAN 地址列表末尾追加 127.0.0.1(若未包含),追加在排序之后确保始终位于列表最末尾,方便本机直接通过本地环回地址访问网关

i-code v0.1.6

Choose a tag to compare

@github-actions github-actions released this 06 Aug 07:32

[0.1.6] - 2026-08-06

新增

  • 模型调用统计展示总 token:模型统计页面的统计描述新增「总 token」展示(随当前「明细 / 汇总」Tab 联动,取当前视图数据求和)
    • 新增 formatTokenKMB token 格式化工具函数,支持 K(千)/ M(百万)/ B(十亿)西式紧凑单位转换;非法输入兜底返回 0
    • ModelList 新增 activeTab 状态追踪当前激活 Tab,据此计算对应视图的 totalTokens 并参与统计描述 totalTokens 占位符渲染

修复

  • 模型列表默认视图模式改为滚动模式ModelList 表格视图模式默认由 compact(自适应换行)改为 scroll(固定列宽横向滚动),避免列宽撑开导致布局溢出
  • 日志 URL 与实际请求 URL 不一致:重构 build_log_urlforwarding/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

Choose a tag to compare

@github-actions github-actions released this 05 Aug 14:51

[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 实际协议;forwarderexecute_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 / VarSourceRemoteCatalogItemMarketplaceItemSummary 透传 var_list
    • 前端 MarketplaceItemSummary 新增 varList;脚本模板市场详情面板移除 tag 标签展示,改为渲染变量列表(变量名 / 来源徽章 system=蓝 custom=琥珀 / 必填徽章 / 描述),无变量时显示占位
  • 供应商协议类型桥接帮助提示:供应商表单「协议类型」标签新增 HelpIcon 帮助气泡(popover / side=top),说明协议桥接行为;i18n 补充 providerTypeBridge 帮助文案

变更

  • 日志协议标签 websocket 更名为 wsprotocol_tags / detect_response_tags / LogEntry 注释统一将 websocket 标签更名为 ws,前端日志筛选器与展示同步迁移
  • 桥接转发新增 bridge 日志标签protocol_tags 签名新增 BridgeKind 参数,桥接转发额外标记 bridge,便于日志按桥接场景筛选

测试

  • 协议桥接模块新增 13 个单元测试(bridge/tests.rs,共 1773 行):覆盖请求 / 响应 / 流式转换规则、容错策略、工具调用 ID 透传等;全部 290 个测试通过

备注

  • 方案文档:docs/proposals/protocol-bridge.mddocs/gateway-runtime.md 已同步桥接模块说明与实现状态

i-code v0.1.4

Choose a tag to compare

@github-actions github-actions released this 04 Aug 16:10

[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::sse target,确保 chunk 只进专属文件

变更

  • 日志分段大小写入加固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

Choose a tag to compare

@github-actions github-actions released this 04 Aug 07:37

[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_percentcurrentPeriod / current_periodproductUsage / product_usagemonthlyLimit / monthly_limit 等);新增「月度用量百分比」指标(used / monthlyLimit × 100,仅额度上限 > 0 时输出)
  • 脚本模板重命名:公益 Grok 监控 snippet 更名「公益Grok监控(第三方)」(id grok-usagegrok-usage-thirdparty),与官方 Grok Build 订阅监控区分
  • 隐藏「测试数据」内置监控方法:余额配置表单中的 synthetic(测试数据)选项不再展示

i-code v0.1.2

Choose a tag to compare

@github-actions github-actions released this 03 Aug 13:56

[0.1.2] - 2026-08-04

新增

  • 日语与繁体中文语言支持:应用语言新增「日本語」「繁體中文」选项,i18n 模块、日期组件(date-fns / react-day-picker)、设置页面语言列表、后端 Locale 枚举同步扩展;翻译文件 ja.json / zh-TW.json 新增
  • 转发重试事件双通道日志:网关转发器(forwarder)的重试事件(首次请求、退避重试、状态码判定、重试耗尽、网络错误等)同时写入 tracing(tauri-plugin-log,终端/日志文件)和自研内存 logger(应用内「日志」页面可见),便于运行时诊断与开发调试