ellm-proxy 0.0.7 → 0.0.8
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.
- package/README.md +29 -11
- package/bin/ellm-proxy.js +2 -63
- package/dist/cli.js +35780 -0
- package/dist/server.js +16723 -6451
- package/dist/web-ui/assets/{DashboardView-BCwrFrE2.js → DashboardView-3c_i_3VF.js} +1 -1
- package/dist/web-ui/assets/LayoutView-BhN1f8wo.js +1 -0
- package/dist/web-ui/assets/LayoutView-CNd_MJt2.css +1 -0
- package/dist/web-ui/assets/{LoginView-Dp7NmXtf.js → LoginView-J23vsMu2.js} +1 -1
- package/dist/web-ui/assets/{LogsView-Dyy_zkgg.js → LogsView-2h2Y0XE8.js} +1 -1
- package/dist/web-ui/assets/ProcessView-Bn8Ph7rh.css +1 -0
- package/dist/web-ui/assets/ProcessView-Bs2k6aAf.js +1 -0
- package/dist/web-ui/assets/{ProvidersView-CYFs76wJ.js → ProvidersView-bE1Hv9D-.js} +1 -1
- package/dist/web-ui/assets/SettingsView-BmLmC-_v.js +1 -0
- package/dist/web-ui/assets/SettingsView-Ceyj-ZDZ.css +1 -0
- package/dist/web-ui/assets/{SetupView-DX6S_KpK.js → SetupView-Cgj7ubNz.js} +1 -1
- package/dist/web-ui/assets/{config-CRWaUFQc.js → config-nvSp8hHp.js} +1 -1
- package/dist/web-ui/assets/{index-X5PdkJlA.js → index-sPrBBnf5.js} +2 -2
- package/dist/web-ui/assets/{providers-H_9x778D.js → providers-di7L8jy_.js} +1 -1
- package/dist/web-ui/assets/useManagerApi-qPjxfB0X.js +1 -0
- package/dist/web-ui/assets/useToast-D76qyWZg.js +1 -0
- package/dist/web-ui/config.js +3 -6
- package/dist/web-ui/index.html +1 -1
- package/docs/DESIGN.md +43 -14
- package/package.json +2 -17
- package/bin/commands/autostart.js +0 -37
- package/bin/commands/config.js +0 -8
- package/bin/commands/credentials.js +0 -100
- package/bin/commands/pm2.js +0 -28
- package/bin/commands/service.js +0 -107
- package/dist/web-ui/assets/LayoutView-BUA8-IzK.css +0 -1
- package/dist/web-ui/assets/LayoutView-BePJfgia.js +0 -1
- package/dist/web-ui/assets/ProcessView-CpPpMtFg.js +0 -1
- package/dist/web-ui/assets/ProcessView-DK0TvDpR.css +0 -1
- package/dist/web-ui/assets/SettingsView-BkwyoOUb.css +0 -1
- package/dist/web-ui/assets/SettingsView-mPcaVAD2.js +0 -1
- package/dist/web-ui/assets/useManagerApi-C1_COxKg.js +0 -1
- package/dist/web-ui/assets/useToast-MtbkGJiM.js +0 -1
- package/manager/api/harness/backup.js +0 -20
- package/manager/api/harness/claude-code.js +0 -54
- package/manager/api/harness/codex.js +0 -123
- package/manager/api/harness/dsh.js +0 -175
- package/manager/api/harness/index.js +0 -118
- package/manager/api/service-settings.js +0 -98
- package/manager/api/service.js +0 -147
- package/manager/index.js +0 -182
- package/utils/autostart.js +0 -219
- package/utils/interpreter.js +0 -14
- package/utils/paths.js +0 -45
- package/utils/pm2.js +0 -130
- package/utils/port.js +0 -35
- package/utils/service.js +0 -205
- package/utils/ui.js +0 -59
- package/utils/updater.js +0 -233
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# ellm-proxy
|
|
2
2
|
|
|
3
|
-
自研 LLM 网关(行为基准 litellm 1.100.0
|
|
3
|
+
自研 LLM 网关(行为基准 litellm 1.100.0),单进程后台常驻一键启停(跨平台,内置进程管理,无 pm2)。单端口提供全部能力:网关、管理台 API 与管理界面同端口(默认 29770)。
|
|
4
4
|
|
|
5
5
|
> 需求决策与架构设计详见 [docs/DESIGN.md](docs/DESIGN.md)。
|
|
6
6
|
|
|
7
7
|
- `/v1/*` — LLM 网关端点(OpenAI / Anthropic 协议互转,多供应商路由、压缩、鉴权)
|
|
8
|
-
- `/api/*` — 管理台 API
|
|
9
|
-
- `http://127.0.0.1
|
|
8
|
+
- `/api/*` — 管理台 API(登录鉴权、配置热更新、用量/日志)
|
|
9
|
+
- `http://127.0.0.1:<port>/` — 管理界面(服务进程托管 web-ui,同端口;远程访问靠登录保护)
|
|
10
10
|
|
|
11
11
|
## 安装
|
|
12
12
|
|
|
@@ -20,17 +20,28 @@ npm i -g ellm-proxy
|
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
ellm-proxy -h # 查看帮助
|
|
23
|
-
ellm-proxy start #
|
|
23
|
+
ellm-proxy start # 后台常驻启动(首次自动创建配置)
|
|
24
24
|
ellm-proxy stop # 停止服务
|
|
25
25
|
ellm-proxy restart # 重启(先 stop 后 start,保证最新参数生效,选项同 start)
|
|
26
|
-
ellm-proxy
|
|
26
|
+
ellm-proxy(无参数) # 已运行则显示服务信息,否则启动
|
|
27
|
+
ellm-proxy autostart on # 开机自启(登录时触发,免管理员权限)
|
|
27
28
|
ellm-proxy autostart off # 关闭开机自启
|
|
28
29
|
ellm-proxy config # 显示配置文件路径
|
|
30
|
+
ellm-proxy master-key # 查看/设置网关主密钥(--random / --clear)
|
|
31
|
+
ellm-proxy account # 查看/设置管理台登录账号(--reset)
|
|
29
32
|
```
|
|
30
33
|
|
|
31
|
-
|
|
34
|
+
**进程管理(内置,跨平台)**:CLI 启动时以 detached 方式拉起服务进程并写运行记录 `~/.ellm-proxy/run.json`,探活以「端口 HTTP 可达」为准。服务进程自持崩溃自愈(未捕获异常自动孵化后继进程接管端口,1 分钟窗口封顶 10 次,防端口占用无限循环),日志写 `<appDir>/logs/`。服务要求的 Node ≥22.13 由 CLI 解析(当前 node 满足则直接用,否则经 get-node 自动下载一次并缓存)。Windows、Linux、macOS 均可用;运行状态直接运行 `ellm-proxy`(无参数)查看。
|
|
32
35
|
|
|
33
|
-
|
|
36
|
+
**热重启**:管理台「进程管理」页的重启按钮(或配置变更)触发 self-respawn——服务先孵化新进程接管端口再退出,停机 1~2 秒。
|
|
37
|
+
|
|
38
|
+
**开机自启(跨平台)**:`ellm-proxy autostart on` 注册登录触发的自启项(内容为直接启动服务,含运行参数 env 快照),三平台均无需管理员权限——Windows 写启动文件夹 `.cmd`、macOS 写 LaunchAgent(`launchctl load`)、Linux 写 systemd user unit(`systemctl --user enable`,WSL/无 systemd 环境会报错提示);`autostart off` 移除。旧版(≤0.0.7,pm2 resurrect 内容)自启项会在下次 start 时自动迁移重写,旧版 pm2 托管的进程与守护也会被自动清理。
|
|
39
|
+
|
|
40
|
+
## 自动更新(可选开启)
|
|
41
|
+
|
|
42
|
+
- **手动更新**:管理台「设置 → 服务与更新」检查并一键更新——服务先回响应再自重启,新进程启动时执行 `npm i -g` 安装并自动换新代码生效(双跳),安装失败自动回滚旧版本继续服务。
|
|
43
|
+
- **自动更新**:看门狗每小时检查 npm 源(默认 npmjs,`ELLM_UPDATE_REGISTRY` 可覆盖),发现新版本自动走同一链路;开关存配置文件顶层 `autoUpdate`。
|
|
44
|
+
- 源码/本地构建运行时更新域自动关闭(仅 npm 全局安装的包支持)。
|
|
34
45
|
|
|
35
46
|
## 运行时布局(默认 `~/.ellm-proxy/`,均可被环境变量覆盖)
|
|
36
47
|
|
|
@@ -39,21 +50,28 @@ ellm-proxy config # 显示配置文件路径
|
|
|
39
50
|
| 配置文件 | `~/.ellm-proxy/ellm.config.json` | `ELLM_CONFIG`(或 `start --config <path>`) |
|
|
40
51
|
| 数据目录(sqlite 日志/缓存) | `~/.ellm-proxy/data/` | `ELLM_DATA_DIR`(或 `start --data-dir <path>`) |
|
|
41
52
|
| 应用目录(配置/数据基准) | `~/.ellm-proxy/` | `ELLM_APP_DIR`(CLI 按 `--working-dir` 自动注入) |
|
|
42
|
-
| web-ui 静态资源 | 包内 `dist/web-ui
|
|
53
|
+
| web-ui 静态资源 | 包内 `dist/web-ui/`(服务进程托管) | `ELLM_WEBUI_DIR`(可选覆盖) |
|
|
43
54
|
| 运行日志 | `~/.ellm-proxy/logs/` | `start --working-dir <path>`(见 `ellm-proxy -h`) |
|
|
55
|
+
| 运行记录 | `~/.ellm-proxy/run.json` | 随 `ELLM_APP_DIR` |
|
|
44
56
|
|
|
45
57
|
所有路径均支持相对路径(按当前工作目录展开)与绝对路径。服务端自身不加载任何 `.env` 文件;`ELLM_MASTER_KEY` 等环境变量直接在会话中导出即可。
|
|
46
58
|
|
|
47
59
|
首次执行 `ellm-proxy start` 会自动创建示例配置,之后两种方式修改:
|
|
48
60
|
|
|
49
61
|
1. 直接编辑配置文件;
|
|
50
|
-
2. 启动服务后访问管理界面 `http://127.0.0.1
|
|
62
|
+
2. 启动服务后访问管理界面 `http://127.0.0.1:29770/` 在线修改(实时热更新)。
|
|
63
|
+
|
|
64
|
+
其他环境变量:`ELLM_PORT`(服务监听端口,或 `start --port`)、`HOST`(监听地址)、`ELLM_MASTER_KEY`(网关主密钥,低于配置文件 `masterKey` 字段)。启动时端口若被占用会自动顺延到下一个空闲端口(仅本次运行生效,不改配置文件),顺延结果会打印在启动摘要中。
|
|
65
|
+
|
|
66
|
+
## 从 0.0.7 及更早版本升级
|
|
51
67
|
|
|
52
|
-
|
|
68
|
+
1. `npm i -g ellm-proxy@latest`(或等自动更新);
|
|
69
|
+
2. 直接 `ellm-proxy start`——旧版 pm2 托管的进程与守护会被自动清理,pm2 自启项自动迁移为直启模式;
|
|
70
|
+
3. 管理台地址从 `http://127.0.0.1:29771/` 变更为 `http://127.0.0.1:29770/`(单端口化,29771 退役)。
|
|
53
71
|
|
|
54
72
|
## 本地开发(仓库内)
|
|
55
73
|
|
|
56
|
-
本包是 `ellm` monorepo 的发布载体:发布版 `dist/server.js` 由 `scripts/build-server.mjs`
|
|
74
|
+
本包是 `ellm` monorepo 的发布载体:发布版 `dist/server.js` 与 `dist/cli.js` 由 `scripts/build-server.mjs` / `build-cli.mjs` 从 `server`(原 backend)源码直接构建(esbuild 全量内联,含管理域与 CLI),`web-ui` 产物由 `pnpm build:web` 生成后拷入 `dist/web-ui/`(服务进程托管):
|
|
57
75
|
|
|
58
76
|
```bash
|
|
59
77
|
pnpm pack:proxy # 构建 web-ui → 构建发布版 + 聚合 → npm pack 生成 tgz
|
package/bin/ellm-proxy.js
CHANGED
|
@@ -1,64 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// ellm-proxy CLI
|
|
3
|
-
|
|
4
|
-
// 命令:(无参数 = 默认启动)start / stop / restart / pm2 <args...> / autostart on|off / config /
|
|
5
|
-
// master-key / account / -h / --version(选项详见 -h)
|
|
6
|
-
//
|
|
7
|
-
// 运行时布局(默认 ~/.ellm-proxy/,均可被选项/环境变量覆盖):
|
|
8
|
-
// 配置: --config > ELLM_CONFIG 环境变量 > ~/.ellm-proxy/ellm.config.json(首次自动创建)
|
|
9
|
-
// 数据: ELLM_DATA_DIR 环境变量 > ~/.ellm-proxy/data
|
|
10
|
-
// 日志: <appDir>/logs/ellm-out.log · ellm-err.log(主服务)+ manager-out.log · manager-err.log(管理服务)
|
|
11
|
-
//
|
|
12
|
-
// 进程管理(跨平台,pm2 JS API 封装见 utils/pm2.js,编排核心见 utils/service.js):
|
|
13
|
-
// start 会一并托管两个进程——主服务 dist/server.js(name=ellm-proxy)与管理服务 manager/index.js
|
|
14
|
-
// (name=ellm-proxy-manager,启停/重启主服务 + Claude Code/Codex 代理开关)。
|
|
15
|
-
// 崩溃自动重启、日志落盘、dump/resurrect(开机自启一并恢复)。服务要求的 Node >=22.13.0 通过
|
|
16
|
-
// interpreter 保证(utils/interpreter.js),pm2 daemon 的 node 版本无关紧要。
|
|
17
|
-
// start/stop 成功后自动 pm2 dump,供开机自启 resurrect 恢复。`ellm-proxy pm2 <args>` 可透传
|
|
18
|
-
// 任意 pm2 子命令(list/logs/monit/...,用包内局部 pm2,无需自装全局)。
|
|
19
|
-
//
|
|
20
|
-
// 开机自启(commands/autostart.js,跨平台):登录时触发、无需管理员——Windows 写启动文件夹
|
|
21
|
-
// .cmd(shell:startup)、macOS 写 LaunchAgent plist(launchctl load)、Linux 写 systemd user
|
|
22
|
-
// unit(systemctl --user enable);内容一致 = pm2 resurrect 恢复最后一次 dump。
|
|
23
|
-
|
|
24
|
-
import { cac } from "cac";
|
|
25
|
-
import { pkg } from "../utils/paths.js";
|
|
26
|
-
import { error as uiError } from "../utils/ui.js";
|
|
27
|
-
import * as serviceCmd from "./commands/service.js";
|
|
28
|
-
import * as autostartCmd from "./commands/autostart.js";
|
|
29
|
-
import * as configCmd from "./commands/config.js";
|
|
30
|
-
import * as credentialsCmd from "./commands/credentials.js";
|
|
31
|
-
import * as pm2Cmd from "./commands/pm2.js";
|
|
32
|
-
|
|
33
|
-
const cli = cac("ellm-proxy");
|
|
34
|
-
|
|
35
|
-
/** 统一错误出口:命令实现抛错 → 打印中文错误信息并以退出码 1 结束 */
|
|
36
|
-
async function run(action) {
|
|
37
|
-
try {
|
|
38
|
-
await action();
|
|
39
|
-
} catch (err) {
|
|
40
|
-
console.error();
|
|
41
|
-
uiError(`错误:${err?.message ?? err}`);
|
|
42
|
-
process.exit(1);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
serviceCmd.register(cli, run);
|
|
47
|
-
autostartCmd.register(cli, run);
|
|
48
|
-
configCmd.register(cli);
|
|
49
|
-
credentialsCmd.register(cli, run);
|
|
50
|
-
pm2Cmd.register(cli, run);
|
|
51
|
-
|
|
52
|
-
// pm2 透传:在 cac 解析前拦截 `ellm-proxy pm2 <...args>`,pm2 的 -- 选项原样可达(cac 会吞掉未知 -- 选项)
|
|
53
|
-
if (process.argv[2] === "pm2") {
|
|
54
|
-
run(() => pm2Cmd.doPassthrough(process.argv.slice(3)));
|
|
55
|
-
} else {
|
|
56
|
-
// 默认命令(无参数):启动服务,已运行则显示服务信息(选项同 start)
|
|
57
|
-
serviceCmd
|
|
58
|
-
.withStartOptions(cli.command("", "启动服务(已运行则显示服务信息,选项同 start)"))
|
|
59
|
-
.action((opts) => run(() => serviceCmd.doStartOrInfo(opts)));
|
|
60
|
-
|
|
61
|
-
cli.help();
|
|
62
|
-
cli.version(pkg.version);
|
|
63
|
-
cli.parse();
|
|
64
|
-
}
|
|
2
|
+
// ellm-proxy CLI shim:实现由构建产物 dist/cli.js 承载(backend/src/cli 源码打包)。
|
|
3
|
+
import "../dist/cli.js";
|