ezllm 0.0.36 → 0.0.38
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 +67 -21
- package/dist/cli.js +26 -28
- package/dist/daemon.js +10 -15
- package/dist/plugin-host.js +5 -0
- package/dist/server.js +86 -78
- package/dist/web-ui/assets/DashboardView-STI4Bkxw.js +1 -0
- package/dist/web-ui/assets/LayoutView-CQJN31vh.css +1 -0
- package/dist/web-ui/assets/LayoutView-DHXc1jcz.js +1 -0
- package/dist/web-ui/assets/{LoginView-Dh-JvmGC.js → LoginView-CwH6eISd.js} +1 -1
- package/dist/web-ui/assets/LogsView-CGgzVbGZ.js +5 -0
- package/dist/web-ui/assets/LogsView-u-0B5Xpc.css +1 -0
- package/dist/web-ui/assets/{ManagedServicesView-C5ZROVtT.js → ManagedServicesView-BvzeGhcb.js} +2 -2
- package/dist/web-ui/assets/PluginsView-CNDVeVj8.js +2 -0
- package/dist/web-ui/assets/PluginsView-zyTILSF1.css +1 -0
- package/dist/web-ui/assets/{ProvidersView-Dwc7I6G0.js → ProvidersView-DTIx2VSi.js} +3 -3
- package/dist/web-ui/assets/ServiceStatusView-BvuFCgT-.js +2 -0
- package/dist/web-ui/assets/SettingsView-CB_w0Y2E.css +1 -0
- package/dist/web-ui/assets/SettingsView-W9bjQ9ly.js +1 -0
- package/dist/web-ui/assets/SetupView-CSBKlfcJ.css +1 -0
- package/dist/web-ui/assets/SetupView-D5KYolFQ.js +1 -0
- package/dist/web-ui/assets/{config-DXHhKDw-.js → config-CX31TfJ4.js} +1 -1
- package/dist/web-ui/assets/format-7jzqzMS_.js +1 -0
- package/dist/web-ui/assets/{index-BKnCp9qM.js → index-D6ydfwRk.js} +1 -1
- package/dist/web-ui/assets/{index-wQvjidwN.css → index-s_h6GEbv.css} +1 -1
- package/dist/web-ui/assets/{message-C1fkA9sE.js → message-B022-tc2.js} +1 -1
- package/dist/web-ui/assets/providers-C6QKdfzy.js +1 -0
- package/dist/web-ui/assets/{router-DI9ZLaCn.js → router-Daxct41S.js} +2 -2
- package/dist/web-ui/assets/src-DLq1gsLr.js +1 -0
- package/dist/web-ui/assets/updateNote-CttDt8SZ.js +1 -0
- package/dist/web-ui/assets/useCopyToast-0dz9T4-H.js +1 -0
- package/dist/web-ui/assets/useManagerApi-DdgACgsq.js +1 -0
- package/dist/web-ui/assets/{useQuickRangeFilter-Crb6MDvU.js → useQuickRangeFilter-D8oTOMUp.js} +1 -1
- package/dist/web-ui/assets/useToast-nQZ8k6t7.js +1 -0
- package/dist/web-ui/index.html +4 -4
- package/package.json +4 -1
- package/dist/cpa.js +0 -15
- package/dist/web-ui/assets/DashboardView-4pju0xUn.js +0 -1
- package/dist/web-ui/assets/LayoutView-BLjO8ed9.css +0 -1
- package/dist/web-ui/assets/LayoutView-DjpChErJ.js +0 -1
- package/dist/web-ui/assets/LogsView-BLOCTdb6.js +0 -5
- package/dist/web-ui/assets/LogsView-D7FTeaYQ.css +0 -1
- package/dist/web-ui/assets/ServiceStatusView-fiaEQZNp.js +0 -2
- package/dist/web-ui/assets/SettingsView-DygfiGG8.css +0 -1
- package/dist/web-ui/assets/SettingsView-MrcC_nr9.js +0 -1
- package/dist/web-ui/assets/SetupView-BLl-ZFOA.css +0 -1
- package/dist/web-ui/assets/SetupView-vTCaewVk.js +0 -1
- package/dist/web-ui/assets/format-DbT9vkcP.js +0 -1
- package/dist/web-ui/assets/providers-BHK2eZZc.js +0 -1
- package/dist/web-ui/assets/useManagerApi-l9V9LoLa.js +0 -1
- package/dist/web-ui/assets/useToast-PFDoTWpf.js +0 -1
- package/dist/web-ui/assets/version-DegxwpkG.js +0 -1
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# ezllm
|
|
2
2
|
|
|
3
|
-
**轻量、安全的本地 LLM
|
|
3
|
+
**轻量、安全的本地 LLM 网关**——为个人本地使用设计:一条命令安装,一条命令启动,把你的 OpenAI / Anthropic 协议供应商和 API Key 统一收口为一个本地入口。
|
|
4
4
|
|
|
5
|
-
- **部署成本极低**:单进程、单端口(默认 29770
|
|
6
|
-
- **快速启动**:`
|
|
7
|
-
-
|
|
5
|
+
- **部署成本极低**:单进程、单端口(默认 29770),常驻内存约 50–60 MB,你的日常电脑就能跑,无需服务器
|
|
6
|
+
- **快速启动**:`npx ezllm install` 一条命令装好并自启动——默认装到用户目录下的 `~/.ezllm`(含自带托管 Node 运行时),首次启动自动创建示例配置,网页向导两分钟完成接入
|
|
7
|
+
- **特别安全**:无遥测、无上报、无云端组件——详见「安全与隐私」
|
|
8
8
|
|
|
9
9
|
## 安全与隐私
|
|
10
10
|
|
|
@@ -15,45 +15,76 @@
|
|
|
15
15
|
## 功能特性
|
|
16
16
|
|
|
17
17
|
- **协议互转**:客户端与上游可各用各的协议(OpenAI / Anthropic),网关自动转换
|
|
18
|
-
- **多供应商路由**:多家供应商 / 多个 API Key 统一管理,按模型路由、网页在线切换;内置 deepseek、kimi、zhipu、ark、openai 等 10 个供应商模板
|
|
19
|
-
- **管理界面**:供应商管理、连通性测试、用量统计、请求日志,开箱即用零学习成本
|
|
18
|
+
- **多供应商路由**:多家供应商 / 多个 API Key 统一管理,按模型路由、网页在线切换;内置 deepseek、kimi、zhipu、ark、dashscope、openai 等 10 个供应商模板
|
|
20
19
|
- **一键接入 AI 客户端**:网页上点一下,把 Claude Code、Codex、DeepSeek Harness(dsh)的流量指向本机网关(自动备份原配置、可还原)
|
|
21
|
-
-
|
|
22
|
-
-
|
|
20
|
+
- **额度快照**:内置多家供应商的额度查询(DeepSeek、智谱、火山方舟等),余量一目了然
|
|
21
|
+
- **订阅插件**:接社区 OpenCode 插件(订阅账号当供应商用:CodeBuddy、智谱 Coding Plan 等),插件目录与开关在管理台「插件」页维护
|
|
22
|
+
- **管理界面**:供应商管理、连通性测试、用量统计、请求日志,开箱即用零学习成本
|
|
23
|
+
- **配置即文件**:所有功能设置(供应商、路由、密钥、端口、界面与安全)集中在一个可读的 `ezllm.config.json`(应用目录内)——管理界面就是它的编辑器,改动内存热更新、无需重启;CLI 只管进程生命周期,没有散落在命令行的隐藏开关。配置可备份、可整份迁移,排障时直接看文件即可
|
|
24
|
+
- **开机自启**:三平台支持,登录即启动,免管理员权限。**默认不注册**——自启是显式动作:装的时候加 `--autostart`,或装完后在管理台设置页打开
|
|
25
|
+
- **自动更新**(手动触发):管理台发现新版本只**提示**,不代你应用——在终端执行 `npx ezllm update` 完成升级;安装失败或安装后版本与目标不符时**不自动回退**——清掉待更新标记、把原因记入 `lastApply.error`,服务以旧版本继续运行(日志里会给出回退用的命令)
|
|
23
26
|
|
|
24
27
|
## 安装
|
|
25
28
|
|
|
26
29
|
```bash
|
|
27
|
-
npx ezllm install #
|
|
30
|
+
npx ezllm install # 装配到用户目录下的 ~/.ezllm(幂等;装完自动启动)
|
|
28
31
|
```
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
装完即可用,之后**一律用 `npx ezllm <命令>`**——不需要全局安装,也不需要设置任何环境变量。
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
**为什么不用管 Node 版本**:服务启动**总是**用托管运行时(应用目录下的 `node/`,缺失时自动下载一次并缓存,之后复用),与本机已装的 node 无关;`npx ezllm install` 只把发布包产物铺进应用目录,跑它的那个 node(你的系统默认 node)仅用于完成这次装配——它要求 **Node 18 及以上**(`install` / `uninstall` / `update` 三条装配命令共享同一份 CLI 产物,下限见 `package.json` 的 `engines.node`)。
|
|
36
|
+
|
|
37
|
+
**谁跑在哪个 node 上**:服务、常驻主进程及其子进程一律走托管 `<应用目录>/node`(`node:sqlite` 需要 Node ≥ 22.13);`install` / `uninstall` / `update` 三条命令跑在你系统默认的 node 上——也就是 `npx` 拉起的那个。
|
|
38
|
+
|
|
39
|
+
**装到哪个目录**:默认**用户目录下的 `~/.ezllm`**,解析链只有两级(不做任何基于当前目录的推断;`runtime.json` 是归属标记文件,用来认出「这是 ezllm 装的应用目录」):
|
|
40
|
+
|
|
41
|
+
1. `--app-dir=<路径>` 参数 / `ELLM_APP_DIR` 环境变量
|
|
42
|
+
2. 缺省 `~/.ezllm`
|
|
43
|
+
|
|
44
|
+
不写全局命令、不改用户级 PATH、不写 Windows 注册表、不写转发 shim。
|
|
45
|
+
|
|
46
|
+
**启动参数**(四条各有命令行与环境变量两种写法,**命令行优先于环境变量**;appDir 与引导期两项解析后归一写回同名环境变量、供子进程继承;**port 不写回 env**——端口由 `start` / `install` 写入配置文件,见下):
|
|
35
47
|
|
|
36
|
-
|
|
48
|
+
| 参数 | 环境变量 | 说明 |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| `--app-dir=<路径>` | `ELLM_APP_DIR` | 应用目录(相对值按当前目录展开,归一后写回绝对路径) |
|
|
51
|
+
| `--port=<端口>` | `ELLM_PORT` | 监听端口。**配合 `start` / `install` 使用**:给了就**写入配置文件**(配置是端口的唯一数据源:这样显示、重启、自启、多实例区分全读同一处);不给则读配置文件。其余命令带它会被忽略并提示 |
|
|
52
|
+
| `--node-mirror=<url>` | `ELLM_NODE_MIRROR` | 引导期:托管 Node 的下载镜像(目录结构需同 nodejs.org/dist) |
|
|
53
|
+
| `--node-bin=<路径>` | `ELLM_NODE_BIN` | 引导期:跳过下载与解压,直接指定 node 可执行文件 |
|
|
54
|
+
|
|
55
|
+
例:装到别处 —— `npx ezllm install --app-dir=D:\work\ezllm`;换端口并顺便开机自启 —— `npx ezllm install --port=3001 --autostart`。
|
|
56
|
+
|
|
57
|
+
**端口怎么改**:`--port` 会把端口写进配置文件(配置是唯一数据源),所以在跑着的实例上改端口需要重启主进程——`npx ezllm start --port=3001` 会自动先停再起,之后所有命令(含状态显示)看到的都是新端口。也可以直接编辑配置文件里的 `port` 再 `npx ezllm restart`。(`--port` 只对 `start` / `install` 生效;`restart --port=…` 这类用法会被忽略并提示。另外:shell 里长期导出 `ELLM_PORT` 会在每次 `start` / `install` 时被写进配置文件——要长期以配置管理端口,请勿在 shell 里长期导出它。)
|
|
58
|
+
|
|
59
|
+
**国内网络友好**:运行时下载自带镜像回退(npmmirror → 官方源),装不上会自动换源重试。
|
|
60
|
+
|
|
61
|
+
**从旧版本过来**:旧版装在用户级 `~/.ezllm`,新版默认位置相同——跑 `npx ezllm install` 即原地接续(配置与数据都在)。旧版写进用户 PATH 的 `<旧应用目录>/bin` 条目要自己手工清理(新版不再写 PATH)。
|
|
37
62
|
|
|
38
63
|
## 使用方法
|
|
39
64
|
|
|
40
65
|
```bash
|
|
41
|
-
ezllm start # 后台常驻启动(首次自动创建示例配置)
|
|
66
|
+
npx ezllm start # 后台常驻启动(首次自动创建示例配置)
|
|
42
67
|
```
|
|
43
68
|
|
|
44
69
|
1. 打开管理界面 `http://127.0.0.1:29770/`,首次访问进入**首启向导**:选择部署形态(本机使用 / 局域网公开),设置主密钥与登录账号(本机使用可全部跳过)
|
|
45
70
|
2. 在「供应商」页添加你的供应商(选内置模板,填 API Key 即可)
|
|
46
|
-
3.
|
|
71
|
+
3. 接入客户端:推荐在「设置 → 代理开关」**一键接入**(Claude Code / Codex / dsh,自动备份原配置、可还原);手动接入则是 Claude Code 指向 `http://127.0.0.1:29770`、OpenAI SDK 指向 `http://127.0.0.1:29770/v1`
|
|
47
72
|
|
|
48
73
|
常用命令:
|
|
49
74
|
|
|
50
75
|
```bash
|
|
51
|
-
ezllm
|
|
52
|
-
ezllm stop
|
|
53
|
-
ezllm restart
|
|
54
|
-
ezllm
|
|
76
|
+
npx ezllm # 显示当前运行状态(服务地址、pid;只读,不启动服务)
|
|
77
|
+
npx ezllm stop # 停止
|
|
78
|
+
npx ezllm restart # 重启
|
|
79
|
+
npx ezllm update # 检查并安装新版本
|
|
80
|
+
npx ezllm install # 装配/修复运行环境(幂等)
|
|
81
|
+
npx ezllm uninstall # 卸载(停服 → 注销自启 → 备份应用目录 → 删除它)
|
|
55
82
|
```
|
|
56
83
|
|
|
84
|
+
**升级**:在终端执行 `npx ezllm update`——查最新版本并装配(由新版本自己完成装配,装配逻辑单点复用)。管理台「服务与更新」页只提示「有新版本」,不代你应用。
|
|
85
|
+
|
|
86
|
+
**卸载**:`npx ezllm uninstall`——停服 → 注销开机自启 → 备份应用目录 → 删除应用目录(配置与数据先备份到同级的 `<应用目录>.backup-<时间戳>`);**不再注销 PATH**(新版本来就不写它),只有旧版本留下的 PATH 条目才需要你手工清理。
|
|
87
|
+
|
|
57
88
|
环境坏掉时要「推倒重来」,加 `--force` 重装:它会先停服务、清空应用目录(清理日志与数据、
|
|
58
89
|
重置运行时记录),再重新装配。**保留** `ezllm.config.json` 与 `hook.*` 用户钩子,
|
|
59
90
|
故配置与自写逻辑不丢:
|
|
@@ -62,11 +93,26 @@ ezllm install # 装配/修复自带 Node 运行时的环境(幂等;自动
|
|
|
62
93
|
npx ezllm install --force # 重装(清理应用目录后重新装配)
|
|
63
94
|
```
|
|
64
95
|
|
|
96
|
+
## 应用目录里有什么
|
|
97
|
+
|
|
98
|
+
上面说的应用目录按下列布局放置(`dist/` 与 `node/` 由 `install` 装配;不再有 `node/node_modules/ezllm` 这层嵌套):
|
|
99
|
+
|
|
100
|
+
| 路径 | 说明 |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `dist/` | 程序产物(`server.js` / `daemon.js` / `cli.js` / `plugin-host.js` / `web-ui/`) |
|
|
103
|
+
| `node/` | 托管 Node 运行时(服务与常驻主进程一律用它启动) |
|
|
104
|
+
| `package.json` | 包清单(版本与包根定位靠它) |
|
|
105
|
+
| `runtime.json` | 归属标记(`install` 写入;命令层「尚未安装」判定与卸载护栏共用这一份判据) |
|
|
106
|
+
| `.gitignore` | 内容为 `*`——整个目录不进你的版本库(配置含真实 API Key、运行时上百 MB) |
|
|
107
|
+
| `ezllm.config.json` | 配置唯一数据源(首次启动据示例创建) |
|
|
108
|
+
| `data/` · `logs/` | 运行时数据与日志目录 |
|
|
109
|
+
| `ezllm.config.example.json` · `hook.example.cjs` | 示例配置与钩子示例 |
|
|
110
|
+
|
|
65
111
|
## 进阶:改写请求报文(可选)
|
|
66
112
|
|
|
67
113
|
如果某个客户端每轮都在请求里塞大量固定内容(工具描述里内嵌的 API 手册、注入的记忆索引等),可以在网关侧裁掉,从根上省 token。
|
|
68
114
|
|
|
69
|
-
把发布包里的
|
|
115
|
+
把发布包里的 **`hook.example.cjs`** 复制到应用目录(默认 `~/.ezllm/`,也可用 `--app-dir` 指定)即可,无需改名。按注释改里面的规则,然后 `npx ezllm restart`。
|
|
70
116
|
|
|
71
117
|
- **候选文件名**:`hook.cjs` → `hook.mjs` → `hook.js`,取第一个存在的。**推荐 `hook.cjs`**——`.js` 的解析模式(CJS 还是 ESM)取决于它祖先目录里最近的 `package.json`,不受你控制(比如家目录若有一份 `"type": "module"` 的 package.json,`hook.js` 里的 CJS 写法就会失效);`.cjs` 强制按 CJS 解析,任何环境都稳。
|
|
72
118
|
- **只有请求侧改写**一个钩子(`onModelRequest`):在发往上游前改请求体/请求头,**改不了响应**。
|