pi-web-ui 0.26.0 → 0.26.2

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.zh-CN.md CHANGED
@@ -1,155 +1,230 @@
1
- # pi-web-ui
2
-
3
- [English](https://github.com/xing-shuyin/pi-web-ui/blob/main/README.md) | **简体中文**
4
-
5
- [pi 编码智能体](https://pi.dev) 的 Web 聊天界面 —— 智能体通过 pi SDK 在服务端进程内运行,
6
- 事件经 WebSocket 流式推送到浏览器。支持思考块与工具调用、附件与图片问答、内置终端、
7
- 模型管理,以及设置面板(自定义系统提示词、技能/插件开关、设置预设一键应用)等功能。
8
- 需要 Node.js ≥ 22.19 及配置好的 pi 环境。
9
-
10
- ## 功能特性
11
-
12
- **对话**
13
-
14
- - WebSocket 流式聊天 —— pi SDK 在服务端进程内运行,事件以快照(60ms 节流)推送,浏览器按快照渲染。
15
- - 思考块、工具调用卡片、bash 输出,实时显示状态(执行中 已结束 · 等模型 · 耗时)。
16
- - **补充(steer)** —— 回复流式中可排队发送跟进消息,当前回合工具结算后立即注入(对应 pi CLI 的 Enter 打断语义)。
17
- - **斜杠命令** —— 输入 `/` 弹出命令选择器(内置 / 扩展 / 模板 / 技能);内置 `/new /model /compact /cwd /thinking /resume`,另有 `/help`(命令清单)与 `/copy`(复制上一条回复)。
18
- - **每项目多对话并发** —— 每个对话独立 agent runtime,切走后仍在后台运行;「运行的对话」列表显示流式进度,可随时切回。
19
- - **编辑重问** —— 把任意历史问题 fork 成新分支重新提问,原对话不受影响。
20
- - 超过 30 条的消息自动折叠为摘要行(惰性渲染,点击展开)。
21
- - 问题导航 —— 右侧浮动导航条 + 每个问题顶部的序号标签,一键跳转。
22
-
23
- **文件、图片与附件**
24
-
25
- - 三种附件模式:`inline`(≤12KB 内联)、`reference`(仅路径引用)、`lines`(选中行),超限自动降级。
26
- - 粘贴 / 拖拽 / 上传图片 —— 浏览器端自动缩放,模型支持识图时作为图片内容发送(不支持时提示警告)。
27
- - **视觉桥** —— 当前模型不支持识图时,把图片交给自动发现的视觉模型转写成文字证据(按批次缓存,可在设置里指定模型/开关)。
28
- - 免工作区路径附加任意文件 —— 存入全局上传目录,小文件内联,其余以绝对路径引用。
29
- - 文件预览 —— 行号、点选/拖拽/Shift 选区(可添加到对话为 lines 附件)、GBK 回退解码、二进制十六进制视图、媒体 HTTP 预览(支持 Range)、下载按钮。
30
- - 实时文件树 —— 服务端对当前列出目录 fs.watch,改动即静默重列;超大目录显示截断提示。
31
-
32
- **终端与 Git**
33
-
34
- - 内置终端(xterm.js + node-pty),每客户端独立 PTY 管理;Windows 自动选择 Git Bash(busybox 兜底)。
35
- - **源代码管理(Git)面板** —— 经隐藏查询终端展示 status / branch / diff / 未跟踪文件;提交、切换分支、推送、拉取复用可见终端并自动切换到终端视图。
36
-
37
- **模型与设置**
38
-
39
- - 模型管理 —— UI 里编辑 models.json、按 provider 设置 API key(密钥/headers 永不下发浏览器)。
40
- - 思考强度(thinking level)按模型切换(只显示该模型实际支持的档位)。
41
- - 首次配置引导(PiSetupModal)。
42
- - 设置面板 —— 系统提示词(追加或整体替换)、技能/插件一键开关(即时生效)、设置预设保存/应用/删除、视觉桥模型与开关。
43
-
44
- **目标(Goal)模式**
45
-
46
- - GoalBar 目标栏 —— 设置目标 + 审查模型 + 最大轮数 + 锁定开关。
47
- - 目标调研向导(「AI 提炼」)—— 通过引导式问卷把原始需求收敛成明确目标。
48
- - 自动审查循环 —— 每轮结束后用独立审查会话核对「目标 + 最终文本 + git diff HEAD」;不达标就把审查意见作为 steer 注入重改,直到通过或达到轮数上限。
49
-
50
- **后台任务**
51
-
52
- - 后台任务面板 —— 通过端口快照检测 agent 启动的服务(端口/pid/名称),可单独停止或全部关闭。
53
- - 工具看门狗 —— 单个工具调用超过 20 分钟自动中断会话。
54
- - **只停止 bash 命令** —— 中止运行中的 bash 工具而不打断对话。
55
-
56
- **安全与运维**
57
-
58
- - 默认只绑 loopback;局域网 / 容器需显式 `PI_WEB_HOST=0.0.0.0`。
59
- - WebSocket Origin/Host 同权威校验 —— 跨源页面直接拒绝(403);反代场景用 `PI_WEB_ALLOW_ORIGINS` 白名单。
60
- - 本地控制 socket 提供 `server status|quiesce|unquiesce`(排空模式:拒绝新工作、存量跑完)。
61
- - 凭据不下发浏览器 —— provider headers(可能含 Authorization/API key)永不发送到前端。
62
- - 声音提醒、中英文界面、最近项目列表(点击即切换工作目录)。
63
-
64
- **部署与更新**
65
-
66
- - 前台运行 / 全局 npm 安装 / Docker(docker-compose)/ macOS launchd / Linux systemd / Windows 计划任务 / 桌面快捷方式(`server shortcut`)。
67
- - 界面内自更新 —— 对比 npm registry 版本,安装后自动重启服务。
68
-
69
- ## 界面截图
70
-
71
- ![pi-web-ui 主界面](https://cdn.jsdelivr.net/gh/xing-shuyin/pi-web-ui@main/assets/shot.jpeg)
72
-
73
- ## 安装
74
-
75
- ```bash
76
- npm i -g pi-web-ui # 全局安装(推荐)
77
- npx pi-web-ui # 或免安装直接跑(拉取最新版,启动在 :8787)
78
- npm i -g . # 或安装本地 checkout
79
- ```
80
-
81
- **npm 12?** npm 12+ 默认阻止依赖安装脚本(会看到 `npm warn install-scripts … blocked` 警告)。
82
- node-pty 是原生模块,需要放行其脚本(其余两个包只是 no-op/纯提示,一并放行可消除警告):
83
-
84
- ```bash
85
- npm i -g --allow-scripts=node-pty,@google/genai,protobufjs pi-web-ui@latest
86
- ```
87
-
88
- ## 启动
89
-
90
- ```bash
91
- pi-web-ui # 前台,http://localhost:8787
92
- PORT=9000 PI_WEB_CWD=/path/to/project pi-web-ui # 自定义端口 / 工作目录
93
- ```
94
-
95
- ## 停止
96
-
97
- - **前台**:在运行它的终端里按 `Ctrl+C`。
98
- - **作为服务**:`pi-web-ui server stop`(停止实例;开机自启保留,直到 `server uninstall`)。
99
-
100
- ## 更新
101
-
102
- ```bash
103
- npm i -g pi-web-ui@latest # 升级到最新发布版本
104
- pi-web-ui server restart # 重启服务使新版本生效(前台运行则手动重启)
105
- ```
106
-
107
- ## 卸载
108
-
109
- ```bash
110
- npm uninstall -g pi-web-ui
111
- ```
112
-
113
- 卸载**不会**删除你的聊天记录 —— 会话数据存放在 `<cwd>/.pi-web`(或 `PI_WEB_DATA_DIR`),
114
- 卸载/升级后依然保留。
115
-
116
- ## 作为系统服务(开机自启)
117
-
118
- ```bash
119
- pi-web-ui server install --port 9000 --cwd /path/to/project # 安装 + 启动
120
- pi-web-ui server status # 运行中?开机自启?
121
- pi-web-ui server restart # 重启(应用配置/版本变更)
122
- pi-web-ui server stop # 停止(开机自启保留)
123
- pi-web-ui server start # 再次启动
124
- pi-web-ui server uninstall # 彻底移除服务
125
- pi-web-ui server shortcut # 桌面一键启动图标
126
- pi-web-ui server quiesce # 排空:拒绝新的对话/消息,存量运行继续跑完
127
- pi-web-ui server unquiesce # 解除排空,恢复接收新工作
128
- ```
129
-
130
- `server status` 还会经本地控制 socket 显示实时状态(版本、PID、排空状态、
131
- 浏览器连接数、运行中对话数)——`quiesce`/`unquiesce` 也走同一个 socket。
132
-
133
- ## 安全
134
-
135
- - **默认只绑 loopback** —— 服务器只监听 `127.0.0.1`,不暴露到网络;需要局域网访问或
136
- Docker 端口映射时显式设置 `PI_WEB_HOST=0.0.0.0`(docker-compose.yml 已内置)。
137
- - **WebSocket Origin 校验** —— 浏览器页面连 `/ws` 时其 Origin 的 hostname **和端口**
138
- 必须与请求 Host 一致,跨源页面直接 403;无 Origin 的非浏览器客户端不受影响。
139
- 反向代理场景可用 `PI_WEB_ALLOW_ORIGINS=http://你的域名:端口` 放行。
140
- - **Quiesce 排空** —— `server quiesce` 后拒绝新的 prompt/编辑重问/会话恢复,存量运行
141
- 跑完为止(升级/备份前用);`server unquiesce` 恢复。
142
- - **凭据不下发浏览器** —— provider 的 `headers`(可能含 Authorization / API key)
143
- 永不发给浏览器;模型管理 UI 编辑其他字段,服务端自动保留 headers。
144
-
145
- - **macOS** → launchd 代理(无需 sudo),日志 `/tmp/pi-web-ui.log` / `.err`
146
- - **Linux** → systemd unit(`systemctl enable --now`),日志 `journalctl -u pi-web-ui -f`
147
- - **Windows** → 计划任务(登录自启,隐藏 PowerShell 窗口,无黑窗)
148
-
149
- 选项:`--port`(默认 8787)、`--cwd`(工作目录)、`--data-dir`(会话目录)、
150
- `--name`(自定义服务名)。重复执行 `server install` 并传入新选项即可重新生成配置
151
- 并重启服务 —— 这就是修改已装服务端口/工作目录的方式。
152
-
153
- ## License
154
-
155
- MIT
1
+ # pi-web-ui
2
+
3
+ [English](https://github.com/xing-shuyin/pi-web-ui/blob/main/README.md) | **简体中文**
4
+
5
+ [![npm 版本](https://img.shields.io/npm/v/pi-web-ui?color=cb3837&logo=npm)](https://www.npmjs.com/package/pi-web-ui)
6
+ [![Node.js](https://img.shields.io/node/v/pi-web-ui?logo=node.js&logoColor=white)](https://nodejs.org/)
7
+ [![许可证](https://img.shields.io/github/license/xing-shuyin/pi-web-ui)](LICENSE)
8
+
9
+ > 一个精致的 pi 浏览器界面:流式对话、查看工具调用、管理文件,
10
+ > 在一个工作台里完成开发任务。
11
+
12
+ [pi 编码智能体](https://pi.dev) 的 Web 聊天界面 —— 智能体通过 pi SDK 在服务端进程内运行,
13
+ 事件经 WebSocket 流式推送到浏览器。支持思考块与工具调用、附件与图片问答、内置终端、
14
+ 模型管理,以及设置面板(自定义系统提示词、技能/插件开关、设置预设一键应用)等功能。
15
+ 需要 Node.js 22.19 及配置好的 pi 环境。
16
+
17
+ ## 作者的其他项目
18
+
19
+ > **正在使用 DSH 构建工具?**
20
+ >
21
+ > [**dsh-ui-tools**](https://github.com/xing-shuyin/dsh-ui-tools) 是作者的配套项目,
22
+ > 用于在 DSH 生态中构建和扩展 UI 工具。
23
+
24
+ ## 功能特性
25
+
26
+ **对话**
27
+
28
+ - WebSocket 流式聊天 —— pi SDK 在服务端进程内运行,事件以快照(60ms 节流)推送,浏览器按快照渲染。
29
+ - 思考块、工具调用卡片、bash 输出,实时显示状态(执行中 已结束 · 等模型 · 耗时)。
30
+ - **补充(steer)** —— 回复流式中可排队发送跟进消息,当前回合工具结算后立即注入(对应 pi CLI 的 Enter 打断语义)。
31
+ - **斜杠命令** —— 输入 `/` 弹出命令选择器(内置 / 扩展 / 模板 / 技能);内置 `/new /model /compact /cwd /thinking /resume`,另有 `/help`(命令清单)与 `/copy`(复制上一条回复)。
32
+ - **每项目多对话并发** —— 每个对话独立 agent runtime,切走后仍在后台运行;「运行的对话」列表显示流式进度,可随时切回。
33
+ - **编辑重问** —— 把任意历史问题 fork 成新分支重新提问,原对话不受影响。
34
+ - 超过 30 条的消息自动折叠为摘要行(惰性渲染,点击展开)。
35
+ - 问题导航 —— 右侧浮动导航条 + 每个问题顶部的序号标签,一键跳转。
36
+
37
+ **文件、图片与附件**
38
+
39
+ - 三种附件模式:`inline`(≤12KB 内联)、`reference`(仅路径引用)、`lines`(选中行),超限自动降级。
40
+ - 粘贴 / 拖拽 / 上传图片 —— 浏览器端自动缩放,模型支持识图时作为图片内容发送(不支持时提示警告)。
41
+ - **视觉桥** —— 当前模型不支持识图时,把图片交给自动发现的视觉模型转写成文字证据(按批次缓存,可在设置里指定模型/开关)。
42
+ - 免工作区路径附加任意文件 —— 存入全局上传目录,小文件内联,其余以绝对路径引用。
43
+ - 文件预览 —— 行号、点选/拖拽/Shift 选区(可添加到对话为 lines 附件)、GBK 回退解码、二进制十六进制视图、媒体 HTTP 预览(支持 Range)、下载按钮。
44
+ - 实时文件树 —— 服务端对当前列出目录 fs.watch,改动即静默重列;超大目录显示截断提示。
45
+
46
+ **终端与 Git**
47
+
48
+ - 内置终端(xterm.js + node-pty),每客户端独立 PTY 管理;Windows 自动选择 Git Bash(busybox 兜底)。
49
+ - **源代码管理(Git)面板** —— 经隐藏查询终端展示 status / branch / diff / 未跟踪文件;提交、切换分支、推送、拉取复用可见终端并自动切换到终端视图。
50
+
51
+ **模型与设置**
52
+
53
+ - 模型管理 —— UI 里编辑 models.json、按 provider 设置 API key(密钥/headers 永不下发浏览器)。
54
+ - 思考强度(thinking level)按模型切换(只显示该模型实际支持的档位)。
55
+ - 首次配置引导(PiSetupModal)。
56
+ - 设置面板 —— 系统提示词(追加或整体替换)、技能/插件一键开关(即时生效)、设置预设保存/应用/删除、视觉桥模型与开关。
57
+
58
+ **目标(Goal)模式**
59
+
60
+ - GoalBar 目标栏 —— 设置目标 + 审查模型 + 最大轮数 + 锁定开关。
61
+ - 目标调研向导(「AI 提炼」)—— 通过引导式问卷把原始需求收敛成明确目标。
62
+ - 自动审查循环 —— 每轮结束后用独立审查会话核对「目标 + 最终文本 + git diff HEAD」;不达标就把审查意见作为 steer 注入重改,直到通过或达到轮数上限。
63
+
64
+ **后台任务**
65
+
66
+ - 后台任务面板 —— 通过端口快照检测 agent 启动的服务(端口/pid/名称),可单独停止或全部关闭。
67
+ - 工具看门狗 —— 单个工具调用超过 20 分钟自动中断会话。
68
+ - **只停止 bash 命令** —— 中止运行中的 bash 工具而不打断对话。
69
+
70
+ **安全与运维**
71
+
72
+ - 默认只绑 loopback;局域网 / 容器需显式 `PI_WEB_HOST=0.0.0.0`。
73
+ - WebSocket Origin/Host 同权威校验 —— 跨源页面直接拒绝(403);反代场景用 `PI_WEB_ALLOW_ORIGINS` 白名单。
74
+ - 本地控制 socket 提供 `server status|quiesce|unquiesce`(排空模式:拒绝新工作、存量跑完)。
75
+ - 凭据不下发浏览器 —— provider headers(可能含 Authorization/API key)永不发送到前端。
76
+ - 声音提醒、中英文界面、最近项目列表(点击即切换工作目录)。
77
+
78
+ **部署与更新**
79
+
80
+ - 前台运行 / 全局 npm 安装 / Docker(docker-compose)/ macOS launchd / Linux systemd / Windows 计划任务 / 桌面快捷方式(`server shortcut`)。
81
+ - 界面内自更新 —— 对比 npm registry 版本,安装后自动重启服务。
82
+
83
+ ## 界面截图
84
+
85
+ ![pi-web-ui 主界面](https://cdn.jsdelivr.net/gh/xing-shuyin/pi-web-ui@main/assets/shot.jpeg)
86
+
87
+ ## 安装
88
+
89
+ ```bash
90
+ npm i -g pi-web-ui # 全局安装(推荐)
91
+ npx pi-web-ui # 或免安装直接跑(拉取最新版,启动在 :8787
92
+ npm i -g . # 或安装本地 checkout
93
+ ```
94
+
95
+ **npm ≥ 12?** npm 12+ 默认阻止依赖安装脚本(会看到 `npm warn install-scripts … blocked` 警告)。
96
+ node-pty 是原生模块,需要放行其脚本(其余两个包只是 no-op/纯提示,一并放行可消除警告):
97
+
98
+ ```bash
99
+ npm i -g --allow-scripts=node-pty,@google/genai,protobufjs pi-web-ui@latest
100
+ ```
101
+
102
+ ## 启动
103
+
104
+ ```bash
105
+ pi-web-ui # 前台,http://localhost:8787
106
+ PORT=9000 PI_WEB_CWD=/path/to/project pi-web-ui # 自定义端口 / 工作目录
107
+ ```
108
+
109
+ ## 停止
110
+
111
+ - **前台**:在运行它的终端里按 `Ctrl+C`。
112
+ - **作为服务**:`pi-web-ui server stop`(停止实例;开机自启保留,直到 `server uninstall`)。
113
+
114
+ ## 更新
115
+
116
+ ```bash
117
+ npm i -g pi-web-ui@latest # 升级到最新发布版本
118
+ pi-web-ui server restart # 重启服务使新版本生效(前台运行则手动重启)
119
+ ```
120
+
121
+ ## 卸载
122
+
123
+ ```bash
124
+ npm uninstall -g pi-web-ui
125
+ ```
126
+
127
+ 卸载**不会**删除你的聊天记录 —— 会话数据存放在 `<cwd>/.pi-web`(或 `PI_WEB_DATA_DIR`),
128
+ 卸载/升级后依然保留。
129
+
130
+ ## 作为系统服务(开机自启)
131
+
132
+ ```bash
133
+ pi-web-ui server install --port 9000 --cwd /path/to/project # 安装 + 启动
134
+ pi-web-ui server status # 运行中?开机自启?
135
+ pi-web-ui server restart # 重启(应用配置/版本变更)
136
+ pi-web-ui server stop # 停止(开机自启保留)
137
+ pi-web-ui server start # 再次启动
138
+ pi-web-ui server uninstall # 彻底移除服务
139
+ pi-web-ui server shortcut # 桌面一键启动图标
140
+ pi-web-ui server quiesce # 排空:拒绝新的对话/消息,存量运行继续跑完
141
+ pi-web-ui server unquiesce # 解除排空,恢复接收新工作
142
+ ```
143
+
144
+ `server status` 还会经本地控制 socket 显示实时状态(版本、PID、排空状态、
145
+ 浏览器连接数、运行中对话数)——`quiesce`/`unquiesce` 也走同一个 socket。
146
+
147
+ - **macOS** → launchd 代理(无需 sudo),日志 `/tmp/pi-web-ui.log` / `.err`
148
+ - **Linux** → systemd unit(`systemctl enable --now`),日志 `journalctl -u pi-web-ui -f`
149
+ - **Windows** → 计划任务(登录自启,隐藏 PowerShell 窗口,无黑窗)
150
+
151
+ 选项:`--port`(默认 8787)、`--cwd`(工作目录)、`--data-dir`(会话目录)、
152
+ `--name`(自定义服务名)。重复执行 `server install` 并传入新选项即可重新生成配置
153
+ 并重启服务 —— 这就是修改已装服务端口/工作目录的方式。
154
+
155
+ ## 安全
156
+
157
+ - **默认只绑 loopback** —— 服务器只监听 `127.0.0.1`,不暴露到网络;需要局域网访问或
158
+ Docker 端口映射时显式设置 `PI_WEB_HOST=0.0.0.0`(docker-compose.yml 已内置)。
159
+ - **WebSocket Origin 校验** —— 浏览器页面连 `/ws` 时其 Origin 的 hostname **和端口**
160
+ 必须与请求 Host 一致,跨源页面直接 403;无 Origin 的非浏览器客户端不受影响。
161
+ 反向代理场景可用 `PI_WEB_ALLOW_ORIGINS=http://你的域名:端口` 放行。
162
+ - **Quiesce 排空** —— `server quiesce` 后拒绝新的 prompt/编辑重问/会话恢复,存量运行
163
+ 跑完为止(升级/备份前用);`server unquiesce` 恢复。
164
+ - **凭据不下发浏览器** —— provider 的 `headers`(可能含 Authorization / API key)
165
+ 永不发给浏览器;模型管理 UI 编辑其他字段,服务端自动保留 headers。
166
+
167
+ ## 反向代理(nginx)
168
+
169
+ pi-web-ui 默认只绑 loopback,同机 nginx 反代是官方支持的远程访问方式(无需
170
+ `PI_WEB_HOST=0.0.0.0`):
171
+
172
+ ```nginx
173
+ # pi-web-ui 在 127.0.0.1:8787,对外暴露为 https://your-host/pi/
174
+ server {
175
+ listen 443 ssl;
176
+ server_name your-host;
177
+ # ssl_certificate ... / ssl_certificate_key ...
178
+
179
+ # 应用入口(剥掉 /pi/ 前缀)
180
+ location /pi/ {
181
+ proxy_pass http://127.0.0.1:8787/;
182
+ proxy_http_version 1.1;
183
+ # 必须用 $http_host(保留端口)—— 服务端的 Origin 校验比较完整权威
184
+ # (hostname + 端口),$host 会丢掉端口导致 403
185
+ proxy_set_header Host $http_host;
186
+ proxy_set_header X-Real-IP $remote_addr;
187
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
188
+ proxy_set_header X-Forwarded-Proto $scheme;
189
+ }
190
+
191
+ # WebSocket —— 必须原样转发 Host,否则升级被 403(页面能开,
192
+ # 但对话/终端一直重连)
193
+ location /ws {
194
+ proxy_pass http://127.0.0.1:8787;
195
+ proxy_http_version 1.1;
196
+ proxy_set_header Host $http_host;
197
+ proxy_set_header Upgrade $http_upgrade;
198
+ proxy_set_header Connection "upgrade";
199
+ proxy_read_timeout 3600s;
200
+ proxy_send_timeout 3600s;
201
+ }
202
+
203
+ # 构建产物的绝对路径资源/API(根路径,不带 /pi/)
204
+ location /assets/ { proxy_pass http://127.0.0.1:8787; }
205
+ location = /favicon.svg { proxy_pass http://127.0.0.1:8787; }
206
+ location = /favicon-streaming.svg { proxy_pass http://127.0.0.1:8787; }
207
+ location = /api/file { proxy_pass http://127.0.0.1:8787; }
208
+ location = /api/health { proxy_pass http://127.0.0.1:8787; }
209
+ }
210
+ ```
211
+
212
+ 要点:
213
+
214
+ - **`Host` 必须用 `$http_host`**(保留端口),`/pi/` 和 `/ws` 都要 —— Origin 校验比较
215
+ hostname **和**端口。`proxy_set_header Host $host` 或不设置(默认上游地址
216
+ `127.0.0.1:8787`)都会 403。
217
+ - **同源自动通过**:只要浏览器 Origin 与转发后的 Host 一致(普通反代天然如此),
218
+ 就无需 `PI_WEB_ALLOW_ORIGINS`;仅当浏览器 Origin 与后端看到的 Host 不同
219
+ (如 TLS 终止代理改了端口)才需要设置。
220
+ - **不要开 `proxy_protocol`**(除非确实要真实客户端 IP):它会让 nginx 拒绝所有
221
+ 不带 PROXY 头的连接,局域网直连和 frp 以外的客户端全挂。用 frp 时同样去掉
222
+ `transport.proxyProtocolVersion`(除非 nginx 也 listen proxy_protocol)。
223
+ - **局域网免代理访问**:直接设 `PI_WEB_HOST=0.0.0.0`(加防火墙规则),
224
+ 或把上面的 server 块放到 80/443 端口。
225
+
226
+ 带 frp 内网穿透的完整可运行示例:`deploy/nginx-subpath.conf`。
227
+
228
+ ## License
229
+
230
+ MIT
package/bin/pi-web-ui.mjs CHANGED
File without changes
@@ -1,48 +1,48 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <!--
4
- pi-web-ui launchd agent — macOS auto-start at login.
5
-
6
- Install:
7
- npm i -g pi-web-ui
8
- cp deploy/com.xingshuyin.pi-web-ui.plist ~/Library/LaunchAgents/
9
- # edit ProgramArguments / WorkingDirectory / PI_WEB_CWD for your setup
10
- launchctl load ~/Library/LaunchAgents/com.xingshuyin.pi-web-ui.plist
11
- # (or: launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.xingshuyin.pi-web-ui.plist)
12
-
13
- Find the pi-web-ui binary path with: which pi-web-ui
14
- -->
15
- <plist version="1.0">
16
- <dict>
17
- <key>Label</key>
18
- <string>com.xingshuyin.pi-web-ui</string>
19
-
20
- <key>ProgramArguments</key>
21
- <array>
22
- <string>/usr/local/bin/pi-web-ui</string>
23
- </array>
24
-
25
- <key>RunAtLoad</key>
26
- <true/>
27
-
28
- <!-- Restart if it crashes -->
29
- <key>KeepAlive</key>
30
- <true/>
31
-
32
- <key>WorkingDirectory</key>
33
- <string>/Users/YOUR_USER</string>
34
-
35
- <key>EnvironmentVariables</key>
36
- <dict>
37
- <key>PORT</key>
38
- <string>8787</string>
39
- <key>PI_WEB_CWD</key>
40
- <string>/Users/YOUR_USER</string>
41
- </dict>
42
-
43
- <key>StandardOutPath</key>
44
- <string>/tmp/pi-web-ui.log</string>
45
- <key>StandardErrorPath</key>
46
- <string>/tmp/pi-web-ui.err</string>
47
- </dict>
48
- </plist>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <!--
4
+ pi-web-ui launchd agent — macOS auto-start at login.
5
+
6
+ Install:
7
+ npm i -g pi-web-ui
8
+ cp deploy/com.xingshuyin.pi-web-ui.plist ~/Library/LaunchAgents/
9
+ # edit ProgramArguments / WorkingDirectory / PI_WEB_CWD for your setup
10
+ launchctl load ~/Library/LaunchAgents/com.xingshuyin.pi-web-ui.plist
11
+ # (or: launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.xingshuyin.pi-web-ui.plist)
12
+
13
+ Find the pi-web-ui binary path with: which pi-web-ui
14
+ -->
15
+ <plist version="1.0">
16
+ <dict>
17
+ <key>Label</key>
18
+ <string>com.xingshuyin.pi-web-ui</string>
19
+
20
+ <key>ProgramArguments</key>
21
+ <array>
22
+ <string>/usr/local/bin/pi-web-ui</string>
23
+ </array>
24
+
25
+ <key>RunAtLoad</key>
26
+ <true/>
27
+
28
+ <!-- Restart if it crashes -->
29
+ <key>KeepAlive</key>
30
+ <true/>
31
+
32
+ <key>WorkingDirectory</key>
33
+ <string>/Users/YOUR_USER</string>
34
+
35
+ <key>EnvironmentVariables</key>
36
+ <dict>
37
+ <key>PORT</key>
38
+ <string>8787</string>
39
+ <key>PI_WEB_CWD</key>
40
+ <string>/Users/YOUR_USER</string>
41
+ </dict>
42
+
43
+ <key>StandardOutPath</key>
44
+ <string>/tmp/pi-web-ui.log</string>
45
+ <key>StandardErrorPath</key>
46
+ <string>/tmp/pi-web-ui.err</string>
47
+ </dict>
48
+ </plist>