mimo2codex 0.1.14 → 0.1.16

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 (39) hide show
  1. package/AGENTS.md +24 -5
  2. package/README.md +46 -6
  3. package/README.zh.md +46 -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/mimo.js +31 -0
  17. package/dist/providers/mimo.js.map +1 -1
  18. package/dist/providers/registry.js +48 -10
  19. package/dist/providers/registry.js.map +1 -1
  20. package/dist/server.js +269 -15
  21. package/dist/server.js.map +1 -1
  22. package/dist/setup/snippets.js +187 -0
  23. package/dist/setup/snippets.js.map +1 -0
  24. package/dist/translate/reqToChat.js +1 -1
  25. package/dist/translate/reqToChat.js.map +1 -1
  26. package/dist/upstream/openaiCompatClient.js +32 -11
  27. package/dist/upstream/openaiCompatClient.js.map +1 -1
  28. package/dist/web/assets/index-D19ffnSJ.css +1 -0
  29. package/dist/web/assets/index-DPLJprJ4.js +67 -0
  30. package/dist/web/index.html +2 -2
  31. package/doc/generic-providers.md +399 -0
  32. package/doc/generic-providers.zh.md +399 -0
  33. package/mimoskill/SKILL.md +69 -8
  34. package/mimoskill/references/ocr_workflow.md +216 -0
  35. package/mimoskill/scripts/generate_image.py +163 -0
  36. package/mimoskill/scripts/ocr.py +396 -0
  37. package/package.json +5 -4
  38. package/dist/web/assets/index-BoykBCnY.js +0 -67
  39. 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,12 @@
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
+
9
11
  ## Why
10
12
 
11
13
  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,12 +18,12 @@ Conceptually a sibling of [openrouter](https://openrouter.ai), [claude-code-rout
16
18
 
17
19
  - ✅ Codex CLI `wire_api = "responses"` and Codex desktop app
18
20
  - ✅ Multi-provider — **MiMo** + **DeepSeek**, mixed within one process (per-request routing by `model` field)
21
+ - ✅ **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
22
  - ✅ MiMo models: `mimo-v2.5-pro` / `mimo-v2.5-pro[1m]` / `mimo-v2-flash`
20
23
  - ✅ DeepSeek models: `deepseek-v4-pro` (default) / `deepseek-v4-flash` / `deepseek-chat` / `deepseek-reasoner`
21
24
  - ✅ Tool calling — function tools, parallel calls, `local_shell`, `custom`, MCP `namespace`
22
25
  - ✅ Web search — translated to MiMo's native `web_search` builtin (requires plugin activation); auto-skipped on DeepSeek
23
26
  - ✅ Vision — only `mimo-v2.5` and `mimo-v2-omni`; pro/flash auto-strip images with a placeholder
24
- - ✅ 1M context — pass `mimo-v2.5-pro[1m]`
25
27
  - ✅ Reasoning passthrough (with `--no-reasoning` to hide)
26
28
  - ✅ MiMo host auto-routing — `tp-*` keys → token-plan host, `sk-*` keys → pay-as-you-go host
27
29
  - ✅ Local admin web UI at `http://127.0.0.1:8788/admin/` — model catalog, alias mgmt, chat logs, token stats, provider config
@@ -92,9 +94,10 @@ mimo2codex --model ds # default fallback: ds (unknown model field
92
94
 
93
95
  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.
94
96
 
95
- > **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:
97
+ > **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:
96
98
  > 1. Only one provider's key is configured — `--model` must point at it, otherwise startup errors out.
97
99
  > 2. The client sends a model id that no provider recognizes (e.g. `gpt-4o`) — it falls back to the `--model` provider's `defaultModel`.
100
+ > 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.
98
101
 
99
102
  ### 3. Configure Codex
100
103
 
@@ -182,6 +185,41 @@ After writing to `~/.codex/config.toml`, **fully quit and relaunch Codex** (desk
182
185
 
183
186
  > 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.
184
187
 
188
+ ### Plugging in third-party OpenAI-compatible upstreams
189
+
190
+ 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.
191
+
192
+ **Simplest path** — one env trio:
193
+
194
+ ```bash
195
+ export GENERIC_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
196
+ export GENERIC_API_KEY=sk-your-qwen-key
197
+ export GENERIC_DEFAULT_MODEL=qwen3-max
198
+ mimo2codex --model generic
199
+ ```
200
+
201
+ **Multi-instance** — write `~/.mimo2codex/providers.json`:
202
+
203
+ ```json
204
+ {
205
+ "providers": [
206
+ {
207
+ "id": "qwen",
208
+ "displayName": "Qwen (DashScope)",
209
+ "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
210
+ "envKey": "QWEN_API_KEY",
211
+ "defaultModel": "qwen3-max"
212
+ }
213
+ ]
214
+ }
215
+ ```
216
+
217
+ Then `QWEN_API_KEY=sk-... mimo2codex --model qwen`.
218
+
219
+ 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)**.
220
+
221
+ > Existing mimo / deepseek users with no `providers.json` **are not affected** — default provider stays `mimo` and behavior is byte-identical.
222
+
185
223
  ## CLI flags
186
224
 
187
225
  | Flag | Env | Default | Notes |
@@ -397,14 +435,16 @@ For higher quality, set `PET_OPENAI_API_KEY=sk-real-openai-key` (separate from `
397
435
  ```
398
436
  src/
399
437
  cli.ts, server.ts, config.ts # entry, routing, multi-provider config
400
- providers/{types,mimo,deepseek,registry}.ts # Provider abstraction + MiMo / DeepSeek impls
401
- upstream/openaiCompatClient.ts # generic Chat Completions client + provider error hook
438
+ providers/{types,mimo,deepseek,generic,genericLoader,registry}.ts # Provider abstraction + built-ins + generic factory
439
+ setup/snippets.ts # shared print-config / admin /setup-snippets generator
440
+ upstream/openaiCompatClient.ts # chat + responses passthrough upstream clients
402
441
  translate/ # Responses ↔ Chat Completions translation
403
442
  admin/router.ts # /admin/api/* REST + /admin/* SPA static hosting
404
443
  db/{index,logs,settings,models}.ts # better-sqlite3 layer + migrations + seed
405
- test/ # 100 vitest cases
444
+ test/ # 136 vitest cases
406
445
  web/ # Vite + React 18 admin console (builds to dist/web/)
407
446
  mimoskill/ # MiMo helpers + pet generation workaround
447
+ doc/ # extended docs (generic providers, etc.) — referenced from README
408
448
  scripts/install.{sh,ps1} # one-liner bootstrap
409
449
  dist/ # tsc + vite output (generated)
410
450
  AGENTS.md # Codex-agent instructions (don't import openai, use mimoskill)
package/README.zh.md CHANGED
@@ -2,10 +2,12 @@
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
+
9
11
  ## 解决什么问题
10
12
 
11
13
  小米米莫官方 [Codex 集成文档](https://platform.xiaomimimo.com/docs/zh-CN/integration/codex) 只支持 `wire_api = "chat"`,而最新版 Codex 已经把这个开关变成硬错误。官方建议是降级 Codex 到 0.80.0——但会丢掉 pet 宠物、桌面端新功能、新工具。mimo2codex 在中间挂个本地代理,**Codex 用最新版、MiMo 服务端不变**,两边都不用改。
@@ -16,12 +18,12 @@
16
18
 
17
19
  - ✅ Codex CLI 0.x(`wire_api = "responses"`)+ 桌面端
18
20
  - ✅ 多 provider:**MiMo** + **DeepSeek**,同实例混用(按 `model` 字段路由)
21
+ - ✅ **通用 OpenAI 兼容 provider**——Qwen / GLM / Kimi / Ollama / OpenAI 原生 Responses 等,写 `providers.json` 即可接入,详见 [doc/generic-providers.zh.md](./doc/generic-providers.zh.md)
19
22
  - ✅ MiMo 模型:`mimo-v2.5-pro` / `mimo-v2.5-pro[1m]` / `mimo-v2-flash`
20
23
  - ✅ DeepSeek 模型:`deepseek-v4-pro`(默认)/ `deepseek-v4-flash` / `deepseek-chat` / `deepseek-reasoner`
21
24
  - ✅ 工具调用——function tools、并行调用、`local_shell`、`custom`、MCP `namespace`
22
25
  - ✅ 联网搜索——翻译成 MiMo 原生 `web_search` builtin(需在控制台激活 Web Search Plugin);DeepSeek 路径自动跳过
23
26
  - ✅ 视觉——`mimo-v2.5` / `mimo-v2-omni` 走视觉路径;pro/flash 自动剥图 + 占位文本
24
- - ✅ 1M 长上下文——传 `mimo-v2.5-pro[1m]`
25
27
  - ✅ 思维链透传(`--no-reasoning` 隐藏)
26
28
  - ✅ MiMo 主机自动切换:`tp-*` key → token-plan 主机,`sk-*` key → pay-as-you-go 主机
27
29
  - ✅ 本地 Admin Web UI(`http://127.0.0.1:8788/admin/`):模型清单 / 别名管理 / 聊天日志 / Token 统计 / Provider 配置
@@ -92,9 +94,10 @@ mimo2codex --model ds # 默认 ds(未匹配的 model 字段走
92
94
 
93
95
  启动横幅会直接打印好该贴到 `~/.codex/` 的 `auth.json` 和 `config.toml` 内容,并显示已启用的 provider、admin UI 地址、数据目录。默认走 auth.json 方式——CLI 和桌面端都能用,不依赖任何环境变量。
94
96
 
95
- > **`--model` 的语义**:决定**默认 / fallback** provider,不是硬开关。当客户端发的 `model` 字段命中任一已启用 provider 的目录(含别名)时,**自动按该 provider 路由**,与 `--model` 无关。`--model` 只在两种情况下生效:
97
+ > **`--model` 的语义**:决定**默认 / fallback** provider,不是硬开关。当客户端发的 `model` 字段命中任一**已启用**(有 key)provider 的目录(含别名)时,**自动按该 provider 路由**,与 `--model` 无关。`--model` 只在以下情况生效:
96
98
  > 1. 只配了一个 provider 的 key——必须把 `--model` 指到那个 provider,否则启动报错
97
99
  > 2. 客户端发了未知的 model 字段(如 `gpt-4o`)——走 `--model` 指定 provider 的 `defaultModel`
100
+ > 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` 映射
98
101
 
99
102
  ### 3. 配置 Codex
100
103
 
@@ -182,6 +185,41 @@ model_context_window = 128000
182
185
 
183
186
  > MiMo 的 `tp-*` key 自动用 token-plan 主机(`https://token-plan-cn.xiaomimimo.com/v1`),`sk-*` key 自动用 pay-as-you-go 主机。如果你显式设了 `MIMO_BASE_URL` / `--base-url`,那就以你的为准;启动横幅在 key 前缀和主机不匹配时会打 ⚠ 警告。
184
187
 
188
+ ### 接入第三方 OpenAI 兼容上游
189
+
190
+ 除了内置的 MiMo / DeepSeek,**任何 OpenAI Chat Completions 兼容**(Qwen / GLM / Kimi / Ollama / vLLM …)或**原生 Responses API**(OpenAI 自家、未来其他)的上游都能在不改代码的前提下接到 Codex。
191
+
192
+ **最简方式**——一个 env 三件套:
193
+
194
+ ```bash
195
+ export GENERIC_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
196
+ export GENERIC_API_KEY=sk-your-qwen-key
197
+ export GENERIC_DEFAULT_MODEL=qwen3-max
198
+ mimo2codex --model generic
199
+ ```
200
+
201
+ **多实例方式**——写 `~/.mimo2codex/providers.json`:
202
+
203
+ ```json
204
+ {
205
+ "providers": [
206
+ {
207
+ "id": "qwen",
208
+ "displayName": "Qwen (DashScope)",
209
+ "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
210
+ "envKey": "QWEN_API_KEY",
211
+ "defaultModel": "qwen3-max"
212
+ }
213
+ ]
214
+ }
215
+ ```
216
+
217
+ 然后 `QWEN_API_KEY=sk-... mimo2codex --model qwen`。
218
+
219
+ 完整字段说明、`wireApi: "responses"` 直透模式、Qwen / GLM / Kimi / Ollama / OpenAI 五种主流上游的可粘贴示例、路由规则、故障排查,全部在 **[doc/generic-providers.zh.md](./doc/generic-providers.zh.md)**。
220
+
221
+ > 既有 mimo / deepseek 用户不写 `providers.json` 时**完全不受影响**——默认仍是 mimo,所有行为字节级一致。
222
+
185
223
  ## CLI 参数速查
186
224
 
187
225
  | 参数 | 环境变量 | 默认 | 说明 |
@@ -388,14 +426,16 @@ bash mimoskill/scripts/install_pet.sh pet.png shiba
388
426
  ```
389
427
  src/
390
428
  cli.ts, server.ts, config.ts # 入口 + 路由 + 多 provider 配置
391
- providers/{types,mimo,deepseek,registry}.ts # Provider 抽象 + MiMo / DeepSeek 实现
392
- upstream/openaiCompatClient.ts # 通用 Chat Completions 客户端 + provider error hook
429
+ providers/{types,mimo,deepseek,generic,genericLoader,registry}.ts # Provider 抽象 + 内置 + 通用工厂
430
+ setup/snippets.ts # print-config admin /setup-snippets 共享的 snippet 生成器
431
+ upstream/openaiCompatClient.ts # chat + responses 直透两套上游客户端
393
432
  translate/ # Responses API ↔ Chat Completions API 翻译
394
433
  admin/router.ts # /admin/api/* REST + /admin/* SPA 静态托管
395
434
  db/{index,logs,settings,models}.ts # better-sqlite3 持久化层 + migrations + seed
396
- test/ # 100 个 vitest 用例
435
+ test/ # 136 个 vitest 用例
397
436
  web/ # Vite + React 18 控制台(构建产物 dist/web/)
398
437
  mimoskill/ # MiMo 辅助工具 + 宠物生成绕路方案
438
+ doc/ # 扩展文档(通用 provider 等),README 里引用
399
439
  scripts/install.{sh,ps1} # 一键安装脚本
400
440
  dist/ # tsc + vite 编译产物
401
441
  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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"}