# 版本日志（Tag Log）

<p>
  <a href="./tag-log.md">English</a> ·
  <a href="./tag-log.zh.md"><strong>简体中文</strong></a>
</p>

mimo2codex 的版本发布历史，按 tag 倒序排列。

**类别标签说明**

- **[new]** / **[feat]**：新增功能
- **[fix]**：bug 修复
- **[opt]** / **[refactor]**：优化 / 重构
- **[doc]**：文档相关
- **[test]**：测试用例

---

## (v0.4.10 — 2026-05-24)

- **[fix]** **Codex Desktop namespace 工具报 `unsupported call`（[PR #34](https://github.com/7as0nch/mimo2codex/pull/34)，[issue #33](https://github.com/7as0nch/mimo2codex/issues/33)，感谢 @meesii）**：Codex Desktop 调用 namespace 包装的工具（如 `multi_agent_v1` 下的 `spawn_agent`）走 mimo2codex 代理时报 `unsupported call` —— 客户端依赖每个 `function_call` output item 上的 `namespace` 字段来路由到对应的本地 handler，而代理之前在翻译响应时把这个字段丢了。修复：从请求的 `tools` 数组抽出 `toolName → namespaceName` 映射，在非流式（`respToResponses`）和流式（`streamToSse`）两条响应路径上按需附加 `namespace` 字段。不带 namespace 工具的请求（MiMo / DeepSeek / 普通 Codex CLI 等）行为字节级保持一致。

---

## (v0.4.8 — 2026-05-23)

- **[new]** **桌面预览（beta）—— Windows 系统托盘 / macOS 顶栏桌面端**：可选的 Electron 壳子，后台跑 mimo2codex，不用一直挂着终端窗口。首次启动会有个小设置窗让你选 provider 并粘贴 API Key；之后从系统托盘 / 顶栏图标一键打开内嵌的 admin UI（窗内或默认浏览器都行）。sidecar 生命周期（启动 / 停止 / 改设置时重启）完全托管，菜单 **Quit** 干净退出。提供可选的"开机自启"开关。命令行版（`npm install -g mimo2codex`）完全不变，两者可在同一台机器共存 —— 桌面版作为独立的 `v*-desktop` 制品发布。这是 **beta** —— 安装、启动、sidecar、自更新链路还需要真实环境的里程验证，遇到任何卡点请反馈。下载和安装指引：<https://mimodoc.chengj.online/download>。
- **[fix]** **CodeX Desktop string-input 被误判为 probe（[PR #31](https://github.com/7as0nch/mimo2codex/pull/31)，感谢 @85339098-afk）**：OpenAI Responses API 规范允许 `input` 是 string 或 items 数组两种形式；`handleResponses` 里的 probe 形状检测之前只认数组形式，导致 `{model, input: "write hello world"}` 这种 CodeX Desktop 的自然请求被短路成 synthetic 200 + 空 `output: []` —— 看起来像"模型啥也没说"，**完全没有错误信号**。现在 string `input` 非空也会正确通过。把判定逻辑抽成导出的 `isResponsesProbe()` 函数，配套单元测试套件（`test/server.probe.test.ts`），后续不会因为重构再次被回归。

---

## (v0.4.6 — 2026-05-23)

- **[fix]** **DeepSeek V4 400 `Invalid assistant message: content or tool_calls must be set` ([issue #29](https://github.com/7as0nch/mimo2codex/issues/29))**：当某个 assistant 回合由 reasoning + function_call 拼成、且没有可见 text 时（典型场景：Codex Chrome 插件），翻译产物形状是 `{role:"assistant", content: null, tool_calls:[…], reasoning_content:"…"}`。DeepSeek 的严格校验把显式 `null` 当成"两个字段都没有"于是 400。OpenAI Chat Completions 规范规定 `tool_calls` 存在时 `content` 是可选的，现在直接省略该字段而不是发 `null`。reasoning-only 兜底回合（少见：无 text 无 tools）回落到 `content: ""` 以满足"content 或 tool_calls 必须存在"。
- **[fix]** **Windows / pnpm 全局安装 / Node 22 启动崩溃 ([issue #30](https://github.com/7as0nch/mimo2codex/issues/30))**：admin sqlite 启动打开失败时 `mimo2codex` 不再退出。典型原因：pnpm 全局安装布局没拿到对应 Node ABI（`node-v127-win32-x64`）的 `better-sqlite3` prebuilt 二进制，于是 `new Database()` 报 `Could not locate the bindings file`。现在改成打印一段多行告警（包含原始错误信息和针对 Windows / pnpm 的修复建议）然后以 admin 关闭模式继续启动。代理核心（Codex ↔ Chat-Completions 翻译）本来就不依赖 DB —— 这次让命中 binding 缺失的安装方式也能开箱可用。

---

## v0.4.5 — 2026-05-22

- **[new]** **代理的支持**：mimo2codex 出站请求支持 `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` 环境变量，行为与 `curl` / `git` 一致。Docker 部署在 `docker-compose.yml` 的 `environment:` 段声明，本地在 shell / `.env` 里 `export` 都可以。启动 banner 多一行 `proxy:` 回显当前生效的代理，env 是否被识别一眼能看到。`MIMO2CODEX_NO_PROXY_FROM_ENV=1` 可让 mimo2codex 无视代理 env（适合 shell 里为 `curl` / `git` 常驻了代理、但不想让 mimo2codex 跟着走的场景）。
- **[opt]** 上游连接失败的日志补上 underlying cause 的 `code` 和 `message`（如 `ECONNREFUSED` / `ENOTFOUND` / `ETIMEDOUT`），同样的细节注入到 502 的 `UpstreamError.message`，代理端口写错、DNS 解析失败、超时这些情况一眼能分辨。
- **[doc]** proxy-faq §1 改写：明确"系统代理 ≠ 进程代理"——Clash / Surge 等 UI 里点的"系统代理"开关不会自动导出 env；新增 🩺 自检 callout 让用户从启动 banner 一眼看出当前代理状态。§5 新增 `ECONNREFUSED <代理-host>:<代理-port>` 一行（含 Docker 里 `127.0.0.1` 的坑）。

---

## v0.4.4 — 2026-05-21

- **[new]** **官网新增 AI 文档助手 ([mimodoc.chengj.online](https://mimodoc.chengj.online/))**：右下角机器人浮球 —— 常见配置问题（第一次怎么配、为什么 502、通用 provider 怎么接）点开就能问。助手在项目 `doc/*.md` 上跑 tool calling agent 循环检索文档，流式渲染 markdown 回答。思考过程展示在答案上方的可折叠面板里（开始出答案时自动收拢）。接通了 MiMo V2.5 多模态 —— 粘贴 / 拖拽 / 点回形针上传配置截图，AI 直接看图诊断。聊天历史按匿名 client_id 存 localStorage，drawer 头部有「清空对话」按钮。

---

## v0.4.2 — 2026-05-21

- **[new]** **Admin UI 一键迁移数据目录**：右上 ⚙️ 设置 → 本地数据目录 → 迁移到新目录。选目标路径 → 预览将复制的文件数和大小 → 进度条流式复制 SQLite + `.env` + `providers.json`。迁移期间服务进入维护模式（503），原目录保留待用户验证后手动清理；失败自动回滚（清空目标已写入的部分 + 重新打开原目录）。完成后顶部出现常驻提示 banner 提醒用户重启生效。解析优先级变为 CLI > env > 指针文件（`~/.mimo2codex-pointer.json`）> 默认 `~/.mimo2codex/`。
- **[doc]** **官方文档站上线 [mimodoc.chengj.online](https://mimodoc.chengj.online/)**：完整文档与教程的统一入口。admin 后台 footer 已加 📖 直达链接和悬浮提示，方便用户随时查阅。
- **[fix]** **本地代理模式隐藏 server-only Codex 入口**：「Codex 接入」页的「导出到本地」/「从本地导入」按钮和 `History` tab 只在 Docker 鉴权部署模式（`authMode=on`）下有意义 —— 多运维之间互传渲染好的 `auth.json` + `config.toml` 配置 bundle。本地单机模式下 mimo2codex 直接把这些文件写到 `~/.codex/`，按钮属于噪音。现已按 `authMode === "on"` 条件渲染。

---

## （v0.3.0）

- **[new]** **Docker 鉴权部署正式发布（GA）**：v0.2.17 作为预览验证后，**Docker 鉴权模式**作为稳定特性发布 —— 用户注册 / 登录系统、每用户独立的 m2c 代理 API key、BYOK（自带上游 key）、Gitee / GitHub OAuth、Codex 客户端配置 bundle 下载。把 mimo2codex 部署到 Docker / 内网 / 小圈子时不再泄漏上游 key。本地单机运行（`authMode` 默认 `off`）完全不受影响。完整教程：[doc/auth-deployment.zh.md](./auth-deployment.zh.md) —— 含 Docker compose、首次启动 bootstrap、OAuth 配置、故障排查。
- **[fix]** **工具列表去重防御（[issue #20](https://github.com/7as0nch/mimo2codex/issues/20)）**：新版 Codex CLI / Desktop / DeX 会发出重名工具（典型样例：顶层 `_fetch` 函数 + namespace 展平后再来一个 `_fetch`），导致 MiMo 上游 400 `"tools contains duplicate names: _fetch"`。reqToChat 在工具合并后按 `function.name` / 内置 `type` 二维 keep-first 去重；重复时记 `WARN` 日志告知用户这是客户端 bug。
- **[new]** **思考模式混合历史防御**：检测到会话历史里有 assistant 消息缺 `reasoning_content`（典型场景：用户在同会话切换"默认开启思考"开关），自动给这些历史消息回填占位符 `"(this turn ran without thinking mode)"`，**思考保留为开**，避免上游 MiMo / DeepSeek 400 `"reasoning_content must be passed back"`。配套 INFO 日志。
- **[opt]** 控制台日志降噪：`WARN client model rewritten on the way upstream` → `INFO model fallback applied — client sent unknown model id, request continues with provider default`。降级到 INFO + 改文案，不再让人误以为是错误（实际是 graceful fallback，请求正常完成）。
- **[doc]** 新增双语 [代理 / 网络 FAQ](./proxy-faq.zh.md)：mac & win 各自代理设置、502 / ECONNREFUSED / DNS / TLS-MITM 等错误码自查表、`gpt-5.4` placeholder 来源解释、思考模式混合历史现象说明。
- **[doc]** 新增双语 [版本日志](./tag-log.zh.md)：把 README 顶部 `<details>` changelog 块迁出，按 tag 倒序、`[new]/[fix]/[opt]/[doc]` 分类，含全部 44 个历史 tag。

---

## v0.2.17 — 2026-05-19

- **[new]** **Docker 鉴权模式预览版**：用户可注册登录，生成 mimo2codex 专属代理 API 的 key（m2c key）。在 Docker / 内网 / 小圈子部署时，把 `OPENAI_API_KEY` 字段的 `mimo2codex-local` 替换成生成的 m2c key，避免上游 key 被滥用。本地单机运行（`authMode` 默认 `off`）不受影响。

> ⚠️ **v0.2.17 是预览版本**，作为 Docker 鉴权部署的首发试用。**v0.3.0 是正式 GA 版本**，请生产环境使用 v0.3.0+。详见 [鉴权与部署](./auth-deployment.zh.md)。

## v0.2.16 — 2026-05-19

- **[opt]** Admin UI 紧凑化：内容更紧凑、删掉无用展示，减少视觉噪声。

## v0.2.15 — 2026-05-18

> 含 beta 系列 `v0.2.15-beta.0/1/2`（SenseNova 模型适配 + 思考微调 + Kimi 适配）。

- **[new]** **思考模式 admin UI 化**：「Codex 启用」页新增「思考模式」全局卡片。
  - **思考 开/关**：写入 settings 持久化，不用每次重启加 `--disable-thinking`；改完立即对新请求生效（无需重启）。关闭后所有 provider 都不思考（mimo / deepseek 发 `thinking:{type:"disabled"}`，sensenova / 其他 generic 发 `reasoning_effort:"none"`）。
  - **强制高强度思考**：Codex 没在请求里传 `reasoning.effort` 时，兜底注 `reasoning_effort:"high"`。默认关，开启时显示明显副作用警告（账单可能上涨）。CLI `--disable-thinking` 仍优先。
- **[new]** **Kimi (Moonshot) preset**：admin UI 输入 `https://api.moonshot.cn/v1`（或 `moonshot.ai`）自动识别为 Kimi，套上 `dropReasoningEffort: true`，避免 Kimi 不识别 `reasoning_effort` 时 400。覆盖 `kimi-k2.6` / `kimi-k2.5` / `kimi-k2-thinking` / `kimi-k2-thinking-turbo` / `moonshot-v1-{8k,32k,128k}`。详见 [doc/kimi.zh.md](./kimi.zh.md)。
- **[new]** **Docker 部署**：新增 `Dockerfile`（多阶段 alpine 构建，~70MB）+ `.dockerignore` + GitHub Actions workflow（**自动构建 `linux/amd64 / linux/arm64` 双架构镜像，推送到 ghcr.io/7as0nch/mimo2codex**）；`docker-compose.yml` 一键起，数据目录挂在本地 `./.mimo2codex/`（sqlite + providers.json + admin UI 配置跨容器重建持久化）；env 支持 `.env` 文件挂载或 `-e` / `environment:` 直传 key。mac / Windows / Linux 全平台通吃。基于 [#15](https://github.com/7as0nch/mimo2codex/pull/15)（感谢 @hufang360）。
- **[new]** **SenseNova (商汤) 模型适配**（来自 beta.0/1）。

## v0.2.14 — 2026-05-15

- **[fix]** `.env` 配置 example 文件新增注释，避免初次配置时漏看字段含义。

## v0.2.13 / v0.2.12 / v0.2.11 / v0.2.10 — 2026-05-15

- **[new]** 版本更新检查（check 上游 npm registry 是否有新版）。多次迭代修补（连发 4 个 patch）以打磨网络容错、缓存策略与提示文案。

## v0.2.9 — 2026-05-15

- **[new]** 新增 `.env` 通用配置方案：`mimo2codex init` 后填入 key 即可，跨平台一份配置。

## v0.2.8 — 2026-05-15

> MiniMax / 严格 OpenAI 兼容上游接入修补合集（PR #12）。

- **[fix]** `reqToChat`：不再发 `strict: null` 到上游（MiMo Pydantic schema 拒绝 null，会 400 `"Input should be a valid boolean"`）。修 [issue #11](https://github.com/7as0nch/mimo2codex/issues/11)。
- **[fix]** `minimax-compat`：一键预设不再默认删 `stream_options` / `parallel_tool_calls`。
- **[feat]** `minimax-compat`：响应侧 inline `<think>...</think>` 切到 `reasoning_content`。
- **[feat]** webui providers 表单加「严格 OpenAI 兼容」开关组（minimaxCompat 等）。
- **[feat]** generic provider 接 MiniMax 兼容补丁（[issue #7](https://github.com/7as0nch/mimo2codex/issues/7)）。

## v0.2.7 — 2026-05-15

- **[new]** 全新 webui（**Ant Design 5** 重写）：深浅主题、中英双语 i18n、视口锁定 sider + footer 固定布局、Token 趋势平滑曲线。
- **[new]** 新增 `.env.example` + **Bash / PowerShell 一行命令注入 key** 脚本（`.env` 已 gitignore）。
- **[new]** 「Codex 启用」每行加 **⚡探测** 按钮：发最小 ping 验证 key / baseUrl / 模型 id 是否通。
- **[new]** Token 趋势图融合**缓存命中柱**（绿柱 = 命中、灰柱 = 提示总量）+ 窗口聚合命中率。
- **[new]** 支持**修改 Codex 目录**：settings 配置或 `CODEX_HOME` 环境变量。

> 含 beta 系列 `v0.2.6-beta.1/2/3`：MiMo 全部模型 `contextWindow` 128K → 1M（对齐 DeepSeek，解 Codex 256K 配置 400）；webui 重构 PR #1~#6（antd 5 引入、Setup/Models/CodexEnable 主题化、Logs 表格化、Dashboard 缓存命中、视口高度锁定等）。

## v0.2.6 — 2026-05-14

- **[new]** **「Codex 启用」页面**（**替代 cc-switch**）：admin webui 一键写入 `~/.codex/auth.json` + `config.toml`。
- **[new]** **运行时覆盖**：无需重启 Codex 即可换上游 model。
- **[new]** Codex 备份永久保留 + 半残 pair 恢复 + 手动删除：原文件自动备份，**首次覆盖外部 auth.json 时的备份永久保留**——切换 100 次模型也找得回原始配置。
- **[fix]** `removeOrphanToolMessages`：DeepSeek V4 session 中断时丢弃孤儿 tool 消息，避免 400 `"Messages with role 'tool' must be a response to..."`（修 [PR #10](https://github.com/7as0nch/mimo2codex/pull/10) / [issue #8](https://github.com/7as0nch/mimo2codex/issues/8)）。
- 详见 [doc/codex-enable.zh.md](./codex-enable.zh.md)。

## v0.2.5 — 2026-05-14

> 含 beta `v0.2.5-beta.1`。

- **[feat]** MiMo / DeepSeek 文档对齐。
- **[fix]** DeepSeek `tool_calls` 400 修复。
- **[feat]** Friendly context overflow 错误提示：上游 context 超限时给可读的 `/compact` 引导，而不是裸 400。
- **[feat]** Beta 发版流程（`npm run release:beta`）。

## v0.2.4 — 2026-05-13

- **[test]** 补 `selectProvider` 两段优先级回归测试。
- **[doc]** 同步通用 provider 路由优先级文档。

## v0.2.3 — 2026-05-13

- **[fix]** 根据[小米官方公告](https://platform.xiaomimimo.com/docs/zh-CN/usage-guide/passing-back-reasoning_content)修复 MiMo `reasoning_content` 回传问题。

## v0.2.2 — 2026-05-13

- **[fix]** 工作流（GitHub Actions）修补。

## v0.2.1 — 2026-05-12

- **[new]** 添加 `mimoskill` 支持：图像生成、OCR 等能力（用 Python stdlib，无 pip 依赖）。

## v0.1.16 ~ v0.1.19 — 2026-05-12

- **[new]** `mimoskill` 早期迭代（v0.1.17 ~ v0.1.19）：图像生成、OCR、宠物生成功能逐步打磨。
- **[new]** v0.1.16：新增其他模型支持，默认 mimo / deepseek，同时支持 Responses API 原生对接（`wireApi="responses"`）。

## v0.1.15 — 2026-05-12

- **[fix]** 注册 `mimo-v2.5` 视觉模型为内置目录，避免静默降级到 `mimo-v2.5-pro`（导致用户传图时被丢弃）。

## v0.1.1 ~ v0.1.14 — 2026-05-09 ~ 2026-05-10

项目早期迭代版本（v0.1.1 = 2026-05-09 首次公开发布）。这一阶段没有详细 changelog，主要工作：

- 搭建 mimo / deepseek 双 provider 基础。
- Responses API ↔ Chat Completions 双向翻译核心（`reqToChat` / `respToResponses` / `streamToSse`）。
- 第一版 webui（Token / Logs / Settings 基础页）。
- SQLite 持久化（聊天日志、模型目录、runtime settings）。
- CLI 工具：`mimo2codex init` / `update` / `print-config` / `print-cc-switch`。

完整 commit 流水可通过 `git log v0.1.1..v0.1.14 --oneline` 查看。

---

## 发版流程

发版命令在 [package.json](../package.json) 里：

```bash
npm run release:patch    # x.y.Z+1
npm run release:minor    # x.Y+1.0
npm run release:major    # X+1.0.0
npm run release:beta     # 预发布
```

完整 runbook 见 [PUBLISHING.md](../PUBLISHING.md)（仓库根目录）。
