feat(gui): Electron desktop with embedded core, tray, autostart, win/linux packaging

- cmd/gui: Electron shell (Clash-Verge style) embedding the full WebUI 1:1
  - embedded llmsproxy core (luajit) with auto-generated profile
  - key stored in keys[] (non-seed) so no replace-the-key warning
  - gw_key cookie injection: web UI works without login
  - side-rail toggles for autostart / silent start
  - system tray with status + controls, silent start (--silent)
  - win cross-build (mingw luajit exe + dll) / deb / AppImage via electron-builder
- Makefile: build / gui / gui-dist / gui-deb / gui-win targets
- README: desktop GUI section
- lua(adapter): opencode normalizes non-whitelisted roles to system
This commit is contained in:
2026-08-16 09:53:05 +08:00
parent 40e08b14d2
commit 47f3b44d92
16 changed files with 6102 additions and 2 deletions

View File

@ -16,12 +16,14 @@
## 核心优势
### 极致轻量
- **单二进制**:编译后约 10MB零运行时依赖仅依赖系统 libc部署即用
- **极低内存占用**:空闲状态仅 ~15MB RSS满载并发 100+ 请求时峰值 < 100MB
- **零运行时依赖** Go + LuaJIT 静态链接无需安装 Python/Node/Java 等运行时
- **启动极快**冷启动 < 200ms热重载配置 < 10ms
### 强大的多租户调度能力
- **多密钥多租户**支持无限密钥每个密钥独立角色模型范围Token 配额重置周期
- **AUTO 智能调度**基于优先级档位的分级调度同优先级源自动轮询负载均衡故障自动毫秒级故障转移
- **Token 配额管理**精确到模型级别的 Token 配额控制支持小时///自定义小时周期自动重置
@ -29,6 +31,7 @@
- **Source-Model 前缀路由**支持 `source-model`/`source:model`/`source/model` 精确指定上游源
### 生产级可靠性
- **热加载配置**WebUI 修改源/密钥/适配器/AUTO链即时生效无需重启
- **密钥加密落盘**AES-256-GCM 加密存储 `api_key`网关密钥请求头master.key 0600 权限保护
- **实时源探测**`GET {base}/models` 定期探测毫秒级感知上游状态不污染调度退避状态
@ -36,6 +39,7 @@
- **AES-256-GCM 加密存储**运行时文件敏感字段加密落盘master.key 0600 权限支持环境变量注入主密钥
### 灵活的协议适配
- **LuaJIT VM**每个适配器独立 VM + worker 安全并发Lua 脚本热加载无需重启
- **Lua 适配器协议**`transform_request` / `transform_response` / `transform_stream_chunk` 双向转换
- **动态请求头钩子**`build_headers(meta)` 支持 HMAC 签名动态 Header 注入
@ -297,10 +301,41 @@ zen 按 User-Agent 指纹识别官方客户端并分流——非官方 UA 的请
`meta.app_secret` 对时间戳+URL+请求体哈希做 HMAC 签名并附 `X-App-Sign` 等头。
配好 `sources[].meta.{app_id, app_secret, app_agent}` 即可。
## 桌面 GUIElectron
可选独立产物,面向内网桌面端用户:**内嵌 ModelRouter 核心**Clash Verge 形态),
一键启停、系统托盘常驻、开机自启、静默启动,内容区一比一内嵌完整 WebUI
(状态/对话/密钥/优先级/源/适配器 六个页面,免登录)。服务器用户继续使用纯 Go 二进制。
### 构建与运行
```bash
cd cmd/gui
npm install
make gui # 或 npm run dev —— 开发运行(需先 make build 生成 bin/llmsproxy
make gui-deb # 本机构建 deb分享给其它 Linux 用户)
make gui-dist # 构建 deb + AppImage
make gui-win # 构建 Windows nsis 安装包(需先 apt install gcc-mingw-w64-x86-64electron-builder 用 wine
```
产物在 `cmd/build/gui-dist/``ModelRouter-1.0.0.AppImage``modelrouter-gui_1.0.0_amd64.deb`
`modelrouter-gui Setup 1.0.0.exe`win需 mingw 交叉编译核心后。rpm 需系统 `rpmbuild`
### 特性
- **内嵌核心**:自动拉起捆绑的 `llmsproxy`LuaJIT 版),配置/密钥/adapter 存于
用户数据目录 `<userData>/profile/`,首次运行自动生成随机 admin key 写入 `keys`
(非 seed并自注入WebUI 免登录、不会提示"更换初始密钥"。端口可在设置中更改(默认 8787
- **系统托盘**:内核状态点、开机自启/静默启动开关、启停/重启内核、退出。
- **静默启动**`--silent` 参数或设置项,启动仅驻托盘不弹窗;首次运行始终显示窗口。
- **开机自启**Windows/macOS 用 `setLoginItemSettings`Linux 写
`~/.config/autostart/modelrouter-gui.desktop`,静默开启时自动附加 `--silent`
## 目录
```
cmd/llmsproxy # 入口
cmd/llmsproxy # 入口(纯 Go 服务端)
cmd/gui # Electron 桌面 GUI内嵌核心 + 托盘 + 打包)
internal/config # YAML 配置加载/校验
internal/lua # LuaJIT VM + worker 池 + AdapterCache + 内置适配器 (embed)
internal/provider # Provider(HTTP) + Registry(路由)
@ -315,4 +350,4 @@ go test -tags luajit ./...
```
覆盖:配置校验、适配器加载/变换、签名钩子、Gateway 鉴权、SDK 结算、SSE 流式、
模型路由、多模态透传与 disable_thinking。
模型路由、多模态透传与 disable_thinking。