mimo2codex 0.1.15 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/AGENTS.md +24 -5
  2. package/README.md +70 -6
  3. package/README.zh.md +69 -6
  4. package/dist/admin/router.js +117 -2
  5. package/dist/admin/router.js.map +1 -1
  6. package/dist/cli.js +67 -147
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.js +16 -10
  9. package/dist/config.js.map +1 -1
  10. package/dist/db/logs.js +80 -0
  11. package/dist/db/logs.js.map +1 -1
  12. package/dist/providers/generic.js +96 -0
  13. package/dist/providers/generic.js.map +1 -0
  14. package/dist/providers/genericLoader.js +229 -0
  15. package/dist/providers/genericLoader.js.map +1 -0
  16. package/dist/providers/registry.js +48 -10
  17. package/dist/providers/registry.js.map +1 -1
  18. package/dist/server.js +201 -1
  19. package/dist/server.js.map +1 -1
  20. package/dist/setup/snippets.js +187 -0
  21. package/dist/setup/snippets.js.map +1 -0
  22. package/dist/translate/reqToChat.js +42 -2
  23. package/dist/translate/reqToChat.js.map +1 -1
  24. package/dist/upstream/openaiCompatClient.js +32 -11
  25. package/dist/upstream/openaiCompatClient.js.map +1 -1
  26. package/dist/web/assets/index-D19ffnSJ.css +1 -0
  27. package/dist/web/assets/index-DPLJprJ4.js +67 -0
  28. package/dist/web/index.html +2 -2
  29. package/doc/generic-providers.md +399 -0
  30. package/doc/generic-providers.zh.md +399 -0
  31. package/doc/mimoskill.md +295 -0
  32. package/doc/mimoskill.zh.md +295 -0
  33. package/mimoskill/SKILL.md +80 -13
  34. package/mimoskill/references/ocr_workflow.md +240 -0
  35. package/mimoskill/scripts/generate_image.py +163 -0
  36. package/mimoskill/scripts/mimo_chat.py +111 -42
  37. package/mimoskill/scripts/ocr.py +445 -0
  38. package/package.json +5 -4
  39. package/dist/web/assets/index-BoykBCnY.js +0 -67
  40. package/dist/web/assets/index-DAJbSznk.css +0 -1
package/AGENTS.md CHANGED
@@ -29,6 +29,18 @@ adjust your assumptions accordingly.
29
29
  dependency, say so explicitly with the user before adding code that
30
30
  depends on it.
31
31
 
32
+ 4. **Non-vision model + image input → don't give up, OCR it.** When the
33
+ active chat model is `mimo-v2.5-pro`, `mimo-v2.5-pro[1m]`, `mimo-v2-flash`,
34
+ or any third-party model without vision, the proxy strips image
35
+ attachments in `src/translate/reqToChat.ts:48-72` and leaves a
36
+ `[N image attachment(s) omitted: this model does not support image input …]`
37
+ placeholder. When you see that placeholder, **or** when the user asks to
38
+ "read / describe / OCR / 识别 / 提取" an image, run
39
+ `python3 mimoskill/scripts/ocr.py <image>` and feed the result back into
40
+ the conversation. The script always uses `mimo-v2.5` internally — do
41
+ **not** ask the user to switch chat models, the OCR fallback is
42
+ transparent.
43
+
32
44
  ## Where things are
33
45
 
34
46
  - `src/` — TypeScript source for the proxy (Node 18+). Compiled to `dist/`
@@ -98,10 +110,15 @@ is in `mimoskill/references/models.md`. Quick rules:
98
110
 
99
111
  - **Image input (vision)** — only `mimo-v2.5` and `mimo-v2-omni` accept it.
100
112
  `mimo-v2.5-pro` does NOT. mimo2codex auto-strips images on non-vision
101
- models.
113
+ models. **If you need the image content anyway, run
114
+ `mimoskill/scripts/ocr.py` to extract text / description via `mimo-v2.5`
115
+ without changing the chat model.** Modes: `text` (default, verbatim OCR),
116
+ `describe` (prose), `structured` (JSON regions), `markdown` (re-render).
102
117
  - **Image generation** — none of MiMo's models do this. Use
103
- `mimoskill/scripts/generate_pet.py` (works for any image-gen task, not
104
- just pets).
118
+ `mimoskill/scripts/generate_image.py` for general image gen (free
119
+ Pollinations by default, or higher-quality `gpt-image-1` when
120
+ `PET_OPENAI_API_KEY` is set), or `mimoskill/scripts/generate_pet.py` +
121
+ `install_pet.sh` for Codex `/hatch` pets specifically.
105
122
  - **TTS / ASR** — separate MiMo endpoints (`mimo-v2.5-tts`, `mimo-v2.5-asr`).
106
123
  Out of scope for the chat completions proxy; call them directly.
107
124
  - **Code interpreter / sandboxed Python** — not provided by MiMo. Run code
@@ -135,5 +152,7 @@ For the canonical reference, hit
135
152
  emit ready-to-paste config snippets — prefer those over hand-crafting
136
153
  TOML / JSON.
137
154
  - If you find yourself writing a new `import openai` or `pip install
138
- openai` line, stop and use `mimoskill/scripts/mimo_chat.py` (chat) or
139
- `mimoskill/scripts/generate_pet.py` (image gen) instead.
155
+ openai` line, stop and use `mimoskill/scripts/mimo_chat.py` (chat),
156
+ `mimoskill/scripts/ocr.py` (OCR / image recognition), or
157
+ `mimoskill/scripts/generate_image.py` / `generate_pet.py` (image gen)
158
+ instead.
package/README.md CHANGED
@@ -2,10 +2,33 @@
2
2
 
3
3
  > English · [中文文档](./README.zh.md)
4
4
 
5
- Local proxy that lets the **latest OpenAI Codex CLI / desktop** talk to **Xiaomi MiMo V2.5** and **DeepSeek V4 Pro**, by translating Codex's Responses API ↔ upstream Chat Completions on the fly. Per-request routing by `model` field, optional admin web console, runs on `127.0.0.1`.
5
+ Local proxy that lets the **latest OpenAI Codex CLI / desktop** talk to virtually any modern LLM. Built-in support for **Xiaomi MiMo V2.5** and **DeepSeek V4 Pro**, plus a **generic provider mechanism** that connects any **OpenAI Chat Completions-compatible** (Qwen / GLM / Kimi / vLLM / Ollama / LM Studio …) or **native Responses API** (OpenAI itself) upstream — no code changes, no re-publish needed. Translates Codex's Responses API ↔ upstream Chat Completions on the fly, per-request routing by `model` field, optional admin web console, runs on `127.0.0.1`.
6
6
 
7
7
  ![mimo2codex install + run](https://raw.githubusercontent.com/7as0nch/mimo2codex/main/images/npminstall.jpg)
8
8
 
9
+ ![Admin console · dashboard](https://raw.githubusercontent.com/7as0nch/mimo2codex/main/images/admin-dashboard.png)
10
+
11
+ ## Contents
12
+
13
+ - [Why](#why) — what problem this solves
14
+ - [What works](#what-works) — feature matrix
15
+ - [Install — pick one](#install--pick-one) — npm / curl / clone
16
+ - [Use](#use) — get a key, start the proxy, configure Codex
17
+ - [Use with cc-switch](#use-with-cc-switch)
18
+ - [Admin console](#admin-console) — dashboard, logs, models, settings
19
+ - [Enabling 1M long context](#enabling-1m-long-context)
20
+ - [Providers and model ids](#providers-and-model-ids)
21
+ - [Plugging in third-party OpenAI-compatible upstreams](#plugging-in-third-party-openai-compatible-upstreams) — Qwen / GLM / Kimi / Ollama / OpenAI
22
+ - [CLI flags](#cli-flags)
23
+ - [Built-in defaults (no flag needed)](#built-in-defaults-no-flag-needed)
24
+ - [Troubleshooting](#troubleshooting)
25
+ - [mimoskill — fill MiMo's gaps](#mimoskill--fill-mimos-gaps) — image gen / OCR fallback / pet generation
26
+ - [Project layout](#project-layout)
27
+ - [Develop](#develop)
28
+ - [License](#license)
29
+
30
+ **Detailed guides:** [Generic providers](./doc/generic-providers.md) · [mimoskill](./doc/mimoskill.md)
31
+
9
32
  ## Why
10
33
 
11
34
  MiMo's [official Codex doc](https://platform.xiaomimimo.com/docs/zh-CN/integration/codex) only supports `wire_api = "chat"`, but newer Codex versions hard-error on it (the official workaround is to downgrade Codex, losing pets, the new desktop release and tool fixes). mimo2codex fixes this without touching either side: keep Codex on latest, run mimo2codex locally, Codex thinks it's talking to a native Responses backend.
@@ -16,6 +39,7 @@ Conceptually a sibling of [openrouter](https://openrouter.ai), [claude-code-rout
16
39
 
17
40
  - ✅ Codex CLI `wire_api = "responses"` and Codex desktop app
18
41
  - ✅ Multi-provider — **MiMo** + **DeepSeek**, mixed within one process (per-request routing by `model` field)
42
+ - ✅ **Generic OpenAI-compatible providers** — Qwen / GLM / Kimi / Ollama / native-Responses OpenAI, declare in `providers.json` and they just work. See [doc/generic-providers.md](./doc/generic-providers.md)
19
43
  - ✅ MiMo models: `mimo-v2.5-pro` / `mimo-v2.5-pro[1m]` / `mimo-v2-flash`
20
44
  - ✅ DeepSeek models: `deepseek-v4-pro` (default) / `deepseek-v4-flash` / `deepseek-chat` / `deepseek-reasoner`
21
45
  - ✅ Tool calling — function tools, parallel calls, `local_shell`, `custom`, MCP `namespace`
@@ -91,9 +115,10 @@ mimo2codex --model ds # default fallback: ds (unknown model field
91
115
 
92
116
  The startup banner prints the `auth.json` + `config.toml` snippets, the enabled providers, the admin UI URL and the data directory. Default works for both Codex CLI and desktop without any env-var dance.
93
117
 
94
- > **What `--model` actually does**: it picks the **default / fallback** provider — not a hard switch. When the client-supplied `model` field matches any enabled provider's catalog (including aliases), the request is routed to that provider regardless of `--model`. `--model` only matters when:
118
+ > **What `--model` actually does**: it picks the **default / fallback** provider — not a hard switch. When the client-supplied `model` field matches any **enabled** (key configured) provider's catalog (including aliases), the request is routed to that provider regardless of `--model`. `--model` only matters when:
95
119
  > 1. Only one provider's key is configured — `--model` must point at it, otherwise startup errors out.
96
120
  > 2. The client sends a model id that no provider recognizes (e.g. `gpt-4o`) — it falls back to the `--model` provider's `defaultModel`.
121
+ > 3. **The client sends a model that matches some provider's catalog, but that provider has no key configured** — also falls back to the `--model` provider's `defaultModel`, logged in admin as `client_model_rewritten`. E.g. if you only set `MIMO_API_KEY` (not `QWEN_API_KEY`), sending `qwen3-max` is silently rewritten to `mimo-v2.5-pro` and forwarded to MiMo. The admin "model mappings" table will show this `qwen3-max → mimo-v2.5-pro` rewrite.
97
122
 
98
123
  ### 3. Configure Codex
99
124
 
@@ -181,6 +206,41 @@ After writing to `~/.codex/config.toml`, **fully quit and relaunch Codex** (desk
181
206
 
182
207
  > MiMo's `tp-*` keys auto-route to the token-plan host (`https://token-plan-cn.xiaomimimo.com/v1`); `sk-*` keys use the pay-as-you-go host. Setting `MIMO_BASE_URL` / `--base-url` explicitly overrides this; the startup banner prints a ⚠ warning if your key prefix and host don't match.
183
208
 
209
+ ### Plugging in third-party OpenAI-compatible upstreams
210
+
211
+ Beyond the built-in MiMo / DeepSeek, **any OpenAI Chat Completions-compatible** (Qwen / GLM / Kimi / Ollama / vLLM …) or **native Responses API** (OpenAI itself, future-leaning providers) upstream can connect to Codex with zero code changes.
212
+
213
+ **Simplest path** — one env trio:
214
+
215
+ ```bash
216
+ export GENERIC_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
217
+ export GENERIC_API_KEY=sk-your-qwen-key
218
+ export GENERIC_DEFAULT_MODEL=qwen3-max
219
+ mimo2codex --model generic
220
+ ```
221
+
222
+ **Multi-instance** — write `~/.mimo2codex/providers.json`:
223
+
224
+ ```json
225
+ {
226
+ "providers": [
227
+ {
228
+ "id": "qwen",
229
+ "displayName": "Qwen (DashScope)",
230
+ "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
231
+ "envKey": "QWEN_API_KEY",
232
+ "defaultModel": "qwen3-max"
233
+ }
234
+ ]
235
+ }
236
+ ```
237
+
238
+ Then `QWEN_API_KEY=sk-... mimo2codex --model qwen`.
239
+
240
+ Full field reference, `wireApi: "responses"` passthrough mode, copy-pasteable examples for Qwen / GLM / Kimi / Ollama / OpenAI, routing rules and troubleshooting all live in **[doc/generic-providers.md](./doc/generic-providers.md)**.
241
+
242
+ > Existing mimo / deepseek users with no `providers.json` **are not affected** — default provider stays `mimo` and behavior is byte-identical.
243
+
184
244
  ## CLI flags
185
245
 
186
246
  | Flag | Env | Default | Notes |
@@ -331,7 +391,9 @@ This pattern (concrete instruction + explicit tool name + "don't explain") is mu
331
391
 
332
392
  ## mimoskill — fill MiMo's gaps
333
393
 
334
- [mimoskill/](./mimoskill/) is a bundle of helper scripts + reference docs at the project root. It exists because some things MiMo just doesn't do natively (mainly: image generation), and Codex hardcodes a few capability assumptions on the client side that the proxy can't override.
394
+ > 📖 **Full reference:** [doc/mimoskill.md](./doc/mimoskill.md) per-script docs, env vars, triggering rules, three usage modes, recipes, troubleshooting. The section below is a quick summary.
395
+
396
+ [mimoskill/](./mimoskill/) is a bundle of helper scripts + reference docs at the project root. It exists because some things MiMo just doesn't do natively (mainly: image generation, OCR fallback when the chat model is text-only), and Codex hardcodes a few capability assumptions on the client side that the proxy can't override.
335
397
 
336
398
  ### Why it exists
337
399
 
@@ -396,14 +458,16 @@ For higher quality, set `PET_OPENAI_API_KEY=sk-real-openai-key` (separate from `
396
458
  ```
397
459
  src/
398
460
  cli.ts, server.ts, config.ts # entry, routing, multi-provider config
399
- providers/{types,mimo,deepseek,registry}.ts # Provider abstraction + MiMo / DeepSeek impls
400
- upstream/openaiCompatClient.ts # generic Chat Completions client + provider error hook
461
+ providers/{types,mimo,deepseek,generic,genericLoader,registry}.ts # Provider abstraction + built-ins + generic factory
462
+ setup/snippets.ts # shared print-config / admin /setup-snippets generator
463
+ upstream/openaiCompatClient.ts # chat + responses passthrough upstream clients
401
464
  translate/ # Responses ↔ Chat Completions translation
402
465
  admin/router.ts # /admin/api/* REST + /admin/* SPA static hosting
403
466
  db/{index,logs,settings,models}.ts # better-sqlite3 layer + migrations + seed
404
- test/ # 100 vitest cases
467
+ test/ # 136 vitest cases
405
468
  web/ # Vite + React 18 admin console (builds to dist/web/)
406
469
  mimoskill/ # MiMo helpers + pet generation workaround
470
+ doc/ # extended docs (generic providers, etc.) — referenced from README
407
471
  scripts/install.{sh,ps1} # one-liner bootstrap
408
472
  dist/ # tsc + vite output (generated)
409
473
  AGENTS.md # Codex-agent instructions (don't import openai, use mimoskill)
package/README.zh.md CHANGED
@@ -2,10 +2,32 @@
2
2
 
3
3
  > [English](./README.md) · 中文
4
4
 
5
- 让**最新版** OpenAI Codex CLI / Codex 桌面端无缝接入**小米 MiMo V2.5** 与 **DeepSeek V4 Pro** 的本地代理。把 Codex 的 Responses API 实时翻译成上游的 Chat Completions API,按客户端发的 `model` 字段在 provider 之间自动路由。可配 admin Web 控制台。
5
+ 让**最新版** OpenAI Codex CLI / Codex 桌面端接入主流大模型的本地代理。内置 **小米 MiMo V2.5** 与 **DeepSeek V4 Pro**,并提供**通用 provider 机制**——不改任何代码、不重新发包,就能把任何 **OpenAI Chat Completions 兼容**(Qwen / GLM / Kimi / 本地 vLLM / Ollama / LM Studio …)或**原生 Responses API**(OpenAI 自家)的上游接到新版 Codex。把 Codex 的 Responses API 实时翻译成上游的 Chat Completions API,按客户端发的 `model` 字段在 provider 之间自动路由。可配 admin Web 控制台。
6
6
 
7
7
  ![mimo2codex 安装与启动](https://raw.githubusercontent.com/7as0nch/mimo2codex/main/images/npminstall.jpg)
8
8
 
9
+ ![Admin 控制台 · 概览](https://raw.githubusercontent.com/7as0nch/mimo2codex/main/images/admin-dashboard.png)
10
+
11
+ ## 目录
12
+
13
+ - [解决什么问题](#解决什么问题) —— 这玩意儿到底是干啥的
14
+ - [支持](#支持) —— 能力对照表
15
+ - [安装——任选一种](#安装任选一种) —— npm / 一键脚本 / 手动构建
16
+ - [使用](#使用) —— 拿 key、启动代理、配置 Codex
17
+ - [配合 cc-switch 使用](#配合-cc-switch-使用)
18
+ - [Admin 控制台](#admin-控制台) —— 概览 / 日志 / 模型 / 设置
19
+ - [1M 长上下文怎么用](#1m-长上下文怎么用)
20
+ - [Provider 与模型 ID](#provider-与模型-id)
21
+ - [接入第三方 OpenAI 兼容上游](#接入第三方-openai-兼容上游) —— Qwen / GLM / Kimi / Ollama / OpenAI
22
+ - [CLI 参数速查](#cli-参数速查)
23
+ - [故障排查](#故障排查)
24
+ - [mimoskill——填补 MiMo 的能力缺口](#mimoskill填补-mimo-的能力缺口) —— 图像生成 / OCR 兜底 / 宠物
25
+ - [项目结构](#项目结构)
26
+ - [开发](#开发)
27
+ - [许可证](#许可证)
28
+
29
+ **详细文档:** [通用 provider](./doc/generic-providers.zh.md) · [mimoskill](./doc/mimoskill.zh.md)
30
+
9
31
  ## 解决什么问题
10
32
 
11
33
  小米米莫官方 [Codex 集成文档](https://platform.xiaomimimo.com/docs/zh-CN/integration/codex) 只支持 `wire_api = "chat"`,而最新版 Codex 已经把这个开关变成硬错误。官方建议是降级 Codex 到 0.80.0——但会丢掉 pet 宠物、桌面端新功能、新工具。mimo2codex 在中间挂个本地代理,**Codex 用最新版、MiMo 服务端不变**,两边都不用改。
@@ -16,6 +38,7 @@
16
38
 
17
39
  - ✅ Codex CLI 0.x(`wire_api = "responses"`)+ 桌面端
18
40
  - ✅ 多 provider:**MiMo** + **DeepSeek**,同实例混用(按 `model` 字段路由)
41
+ - ✅ **通用 OpenAI 兼容 provider**——Qwen / GLM / Kimi / Ollama / OpenAI 原生 Responses 等,写 `providers.json` 即可接入,详见 [doc/generic-providers.zh.md](./doc/generic-providers.zh.md)
19
42
  - ✅ MiMo 模型:`mimo-v2.5-pro` / `mimo-v2.5-pro[1m]` / `mimo-v2-flash`
20
43
  - ✅ DeepSeek 模型:`deepseek-v4-pro`(默认)/ `deepseek-v4-flash` / `deepseek-chat` / `deepseek-reasoner`
21
44
  - ✅ 工具调用——function tools、并行调用、`local_shell`、`custom`、MCP `namespace`
@@ -91,9 +114,10 @@ mimo2codex --model ds # 默认 ds(未匹配的 model 字段走
91
114
 
92
115
  启动横幅会直接打印好该贴到 `~/.codex/` 的 `auth.json` 和 `config.toml` 内容,并显示已启用的 provider、admin UI 地址、数据目录。默认走 auth.json 方式——CLI 和桌面端都能用,不依赖任何环境变量。
93
116
 
94
- > **`--model` 的语义**:决定**默认 / fallback** provider,不是硬开关。当客户端发的 `model` 字段命中任一已启用 provider 的目录(含别名)时,**自动按该 provider 路由**,与 `--model` 无关。`--model` 只在两种情况下生效:
117
+ > **`--model` 的语义**:决定**默认 / fallback** provider,不是硬开关。当客户端发的 `model` 字段命中任一**已启用**(有 key)provider 的目录(含别名)时,**自动按该 provider 路由**,与 `--model` 无关。`--model` 只在以下情况生效:
95
118
  > 1. 只配了一个 provider 的 key——必须把 `--model` 指到那个 provider,否则启动报错
96
119
  > 2. 客户端发了未知的 model 字段(如 `gpt-4o`)——走 `--model` 指定 provider 的 `defaultModel`
120
+ > 3. **客户端发的 model 命中了某个 provider 的 catalog,但那个 provider 没设 key**——也走默认 provider 的 `defaultModel`,admin 日志里会记一条 `client_model_rewritten` 标记。比如你只设了 `MIMO_API_KEY` 没设 `QWEN_API_KEY`,发 `qwen3-max` 会被静默重写成 `mimo-v2.5-pro` 发给 MiMo。在 admin 的「模型映射记录」表里能看到这条 `qwen3-max → mimo-v2.5-pro` 映射
97
121
 
98
122
  ### 3. 配置 Codex
99
123
 
@@ -181,6 +205,41 @@ model_context_window = 128000
181
205
 
182
206
  > MiMo 的 `tp-*` key 自动用 token-plan 主机(`https://token-plan-cn.xiaomimimo.com/v1`),`sk-*` key 自动用 pay-as-you-go 主机。如果你显式设了 `MIMO_BASE_URL` / `--base-url`,那就以你的为准;启动横幅在 key 前缀和主机不匹配时会打 ⚠ 警告。
183
207
 
208
+ ### 接入第三方 OpenAI 兼容上游
209
+
210
+ 除了内置的 MiMo / DeepSeek,**任何 OpenAI Chat Completions 兼容**(Qwen / GLM / Kimi / Ollama / vLLM …)或**原生 Responses API**(OpenAI 自家、未来其他)的上游都能在不改代码的前提下接到 Codex。
211
+
212
+ **最简方式**——一个 env 三件套:
213
+
214
+ ```bash
215
+ export GENERIC_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
216
+ export GENERIC_API_KEY=sk-your-qwen-key
217
+ export GENERIC_DEFAULT_MODEL=qwen3-max
218
+ mimo2codex --model generic
219
+ ```
220
+
221
+ **多实例方式**——写 `~/.mimo2codex/providers.json`:
222
+
223
+ ```json
224
+ {
225
+ "providers": [
226
+ {
227
+ "id": "qwen",
228
+ "displayName": "Qwen (DashScope)",
229
+ "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
230
+ "envKey": "QWEN_API_KEY",
231
+ "defaultModel": "qwen3-max"
232
+ }
233
+ ]
234
+ }
235
+ ```
236
+
237
+ 然后 `QWEN_API_KEY=sk-... mimo2codex --model qwen`。
238
+
239
+ 完整字段说明、`wireApi: "responses"` 直透模式、Qwen / GLM / Kimi / Ollama / OpenAI 五种主流上游的可粘贴示例、路由规则、故障排查,全部在 **[doc/generic-providers.zh.md](./doc/generic-providers.zh.md)**。
240
+
241
+ > 既有 mimo / deepseek 用户不写 `providers.json` 时**完全不受影响**——默认仍是 mimo,所有行为字节级一致。
242
+
184
243
  ## CLI 参数速查
185
244
 
186
245
  | 参数 | 环境变量 | 默认 | 说明 |
@@ -322,7 +381,9 @@ MiMo 在多步 agentic 编码任务上的弱点——模型把 token 花在"叙
322
381
 
323
382
  ## mimoskill——填补 MiMo 的能力缺口
324
383
 
325
- [mimoskill/](./mimoskill/) 是仓库根目录下一捆**辅助脚本 + 参考文档**。它存在的原因是有些事 MiMo 原生不支持(主要是图像生成),而 Codex 在客户端硬编码了一些能力假设,代理层压根改不动。
384
+ > 📖 **完整文档:** [doc/mimoskill.zh.md](./doc/mimoskill.zh.md) —— 单脚本详解、环境变量、触发规则、三种用法、常用组合、故障排查。本节是速览。
385
+
386
+ [mimoskill/](./mimoskill/) 是仓库根目录下一捆**辅助脚本 + 参考文档**。它存在的原因是有些事 MiMo 原生不支持(主要是图像生成、纯文本模型场景下的 OCR 兜底),而 Codex 在客户端硬编码了一些能力假设,代理层压根改不动。
326
387
 
327
388
  ### 为啥要这玩意
328
389
 
@@ -387,14 +448,16 @@ bash mimoskill/scripts/install_pet.sh pet.png shiba
387
448
  ```
388
449
  src/
389
450
  cli.ts, server.ts, config.ts # 入口 + 路由 + 多 provider 配置
390
- providers/{types,mimo,deepseek,registry}.ts # Provider 抽象 + MiMo / DeepSeek 实现
391
- upstream/openaiCompatClient.ts # 通用 Chat Completions 客户端 + provider error hook
451
+ providers/{types,mimo,deepseek,generic,genericLoader,registry}.ts # Provider 抽象 + 内置 + 通用工厂
452
+ setup/snippets.ts # print-config admin /setup-snippets 共享的 snippet 生成器
453
+ upstream/openaiCompatClient.ts # chat + responses 直透两套上游客户端
392
454
  translate/ # Responses API ↔ Chat Completions API 翻译
393
455
  admin/router.ts # /admin/api/* REST + /admin/* SPA 静态托管
394
456
  db/{index,logs,settings,models}.ts # better-sqlite3 持久化层 + migrations + seed
395
- test/ # 100 个 vitest 用例
457
+ test/ # 136 个 vitest 用例
396
458
  web/ # Vite + React 18 控制台(构建产物 dist/web/)
397
459
  mimoskill/ # MiMo 辅助工具 + 宠物生成绕路方案
460
+ doc/ # 扩展文档(通用 provider 等),README 里引用
398
461
  scripts/install.{sh,ps1} # 一键安装脚本
399
462
  dist/ # tsc + vite 编译产物
400
463
  AGENTS.md # Codex agent 说明(不要装 openai,用 mimoskill)
@@ -2,11 +2,13 @@ import { existsSync, readFileSync, statSync } from "node:fs";
2
2
  import { dirname, extname, join, normalize, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { PROVIDER_LIST } from "../providers/registry.js";
5
- import { aggregateMappings, aggregateStats, deleteLogsBefore, getLogById, queryLogs, } from "../db/logs.js";
5
+ import { aggregateMappings, aggregateStats, aggregateTokensTimeseries, deleteLogsBefore, getLogById, queryLogs, } from "../db/logs.js";
6
6
  import { deleteModel, insertCustomModel, listAliases, listModels, patchModel, upsertAlias, deleteAlias, } from "../db/models.js";
7
7
  import { deleteSetting, ForbiddenSettingError, isForbiddenSettingKey, listSettings, setSetting, } from "../db/settings.js";
8
8
  import { isProviderId } from "../providers/registry.js";
9
9
  import { log } from "../util/log.js";
10
+ import { buildSnippetBundle } from "../setup/snippets.js";
11
+ import { GenericLoaderError, locateProvidersFile, readSpecsFromFile, writeSpecsToFile, } from "../providers/genericLoader.js";
10
12
  // Locate dist/web/ relative to THIS module's location, not process.cwd().
11
13
  // When mimo2codex is installed globally (`npm install -g`), the user invokes
12
14
  // it from any working directory, so cwd is never the install root.
@@ -104,11 +106,115 @@ async function handleApi(ctx) {
104
106
  const { cfg, req, res, pathname, query } = ctx;
105
107
  // GET /admin/api/health — quick liveness probe for the UI
106
108
  if (req.method === "GET" && pathname === "/admin/api/health") {
107
- return sendJson(res, 200, { ok: true, dataDir: cfg.dataDir });
109
+ // userAgent is "mimo2codex/<version>"; split out the version part for
110
+ // the footer (cli.ts is the only place that has the package.json version
111
+ // and it stashes it on cfg.userAgent during startup).
112
+ const version = cfg.userAgent.startsWith("mimo2codex/")
113
+ ? cfg.userAgent.slice("mimo2codex/".length)
114
+ : cfg.userAgent;
115
+ return sendJson(res, 200, { ok: true, dataDir: cfg.dataDir, version });
108
116
  }
109
117
  if (req.method === "GET" && pathname === "/admin/api/providers") {
110
118
  return sendJson(res, 200, { providers: providerStateFor(cfg) });
111
119
  }
120
+ // GET /admin/api/generic-providers
121
+ // Returns the raw spec list from providers.json + metadata about where
122
+ // the file lives. The admin UI uses this to populate its editor.
123
+ if (req.method === "GET" && pathname === "/admin/api/generic-providers") {
124
+ const loc = locateProvidersFile(process.env, cfg.dataDir);
125
+ if (!loc) {
126
+ // dataDir is unset (admin runs without persistence) — no canonical
127
+ // path to edit. UI surfaces this as a read-only banner.
128
+ return sendJson(res, 200, {
129
+ specs: [],
130
+ path: null,
131
+ source: null,
132
+ exists: false,
133
+ editable: false,
134
+ notice: "no providers.json location available — admin UI cannot edit when --no-admin is set",
135
+ });
136
+ }
137
+ let specs = [];
138
+ if (loc.exists) {
139
+ try {
140
+ specs = readSpecsFromFile(loc.path);
141
+ }
142
+ catch (err) {
143
+ if (err instanceof GenericLoaderError) {
144
+ return sendJson(res, 200, {
145
+ specs: [],
146
+ path: loc.path,
147
+ source: loc.source,
148
+ exists: true,
149
+ editable: true,
150
+ error: err.message,
151
+ });
152
+ }
153
+ throw err;
154
+ }
155
+ }
156
+ return sendJson(res, 200, {
157
+ specs,
158
+ path: loc.path,
159
+ source: loc.source,
160
+ exists: loc.exists,
161
+ editable: true,
162
+ });
163
+ }
164
+ // PUT /admin/api/generic-providers
165
+ // Body: { providers: GenericProviderSpec[] }
166
+ // Validates every spec, then atomically writes to providers.json. A
167
+ // restart is still required for the change to take effect (the in-memory
168
+ // registry is initialized once at startup).
169
+ if (req.method === "PUT" && pathname === "/admin/api/generic-providers") {
170
+ const loc = locateProvidersFile(process.env, cfg.dataDir);
171
+ if (!loc) {
172
+ return sendError(res, 400, "no_writable_location", "no providers.json path is available — set MIMO2CODEX_DATA_DIR or restart without --no-admin");
173
+ }
174
+ let body;
175
+ try {
176
+ body = await readJsonBody(req);
177
+ }
178
+ catch (err) {
179
+ return sendError(res, 400, "invalid_json", err.message);
180
+ }
181
+ if (!Array.isArray(body.providers)) {
182
+ return sendError(res, 400, "invalid_body", "body must include providers: array");
183
+ }
184
+ try {
185
+ writeSpecsToFile(loc.path, body.providers);
186
+ }
187
+ catch (err) {
188
+ if (err instanceof GenericLoaderError) {
189
+ return sendError(res, 400, "validation_failed", err.message);
190
+ }
191
+ return sendError(res, 500, "write_failed", err.message);
192
+ }
193
+ log.info(`providers.json updated via admin UI (${body.providers.length} entries, restart required)`);
194
+ return sendJson(res, 200, {
195
+ ok: true,
196
+ path: loc.path,
197
+ restartRequired: true,
198
+ });
199
+ }
200
+ // GET /admin/api/setup-snippets?provider=<id>
201
+ // Returns every Codex-integration snippet variant (default auth.json,
202
+ // env-key, cc-switch) so the Setup page can render all three tabs in one
203
+ // round-trip. When `provider` is omitted, defaults to the configured
204
+ // default provider — same fallback the CLI uses.
205
+ if (req.method === "GET" && pathname === "/admin/api/setup-snippets") {
206
+ const hint = query.get("provider") ?? cfg.defaultProviderId;
207
+ const bundle = buildSnippetBundle(hint, { host: cfg.host, port: cfg.port });
208
+ return sendJson(res, 200, {
209
+ bundle,
210
+ defaultProviderId: cfg.defaultProviderId,
211
+ providers: PROVIDER_LIST.map((p) => ({
212
+ id: p.id,
213
+ shortcut: p.shortcut,
214
+ display_name: p.displayName,
215
+ })),
216
+ });
217
+ }
112
218
  // /admin/api/providers/:id/models
113
219
  const provModels = pathname.match(/^\/admin\/api\/providers\/([^/]+)\/models$/);
114
220
  if (provModels) {
@@ -226,6 +332,15 @@ async function handleApi(ctx) {
226
332
  const range = query.get("range") ?? "24h";
227
333
  return sendJson(res, 200, aggregateStats(range));
228
334
  }
335
+ // Per-bucket token timeseries for the dashboard chart. Dense (every
336
+ // bucket in the window appears in `buckets`, zero-filled). Bucket size
337
+ // is `?bucket=day` (default) or `?bucket=hour`.
338
+ if (req.method === "GET" && pathname === "/admin/api/stats/timeseries") {
339
+ const range = query.get("range") ?? "7d";
340
+ const bucketParam = query.get("bucket");
341
+ const bucket = bucketParam === "hour" ? "hour" : "day";
342
+ return sendJson(res, 200, aggregateTokensTimeseries(range, bucket));
343
+ }
229
344
  if (req.method === "GET" && pathname === "/admin/api/settings") {
230
345
  return sendJson(res, 200, { settings: listSettings() });
231
346
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/admin/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/admin/router.ts"],"names":[],"mappings":"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"}