mrexodia/toilet-pi
GitHub: mrexodia/toilet-pi
一个通过浏览器跨计算机集中管理和监控 pi 编码智能体会话的轻量级远程控制面板。
Stars: 12 | Forks: 2
# Toilet-Pi
从浏览器控制你的 [pi](https://github.com/earendil-works/pi) 会话。
Toilet-Pi 为你提供了一个跨计算机查看 pi 会话的移动端友好视图。你可以监视活跃的工作、发送 prompt、中止运行、在后台恢复非活跃会话,或者在项目中启动新会话。
## 工作原理
```
Browser
│
▼
Central Toilet-Pi server
▲ ▲
│ │
Host supervisor Pi extension
(one per machine) (one per running session)
│
└── starts background pi sessions on demand
```
中央服务器是一个轻量级的 WebSocket 枢纽:它维护着已连接机器的实时概览,并负责路由浏览器命令和会话事件。每台机器上运行的 supervisor 能够发现本地会话文件,并可以启动后台 pi 进程。常规的交互式 pi 会话通过 Toilet-Pi 扩展直接连接。
这种设计提供了一种跨多个计算机的统一 UI,而无需将本地会话文件或模型凭证移动到服务器。每台机器的连接均为出站连接,因此当 Toilet-Pi 不可用时,交互式 pi 仍能独立运行;并且随着机器和会话的重新连接,服务器状态也会自动重建。
## 功能特性
- 实时访问常规的交互式 pi 会话
- 按机器或项目对会话进行分组
- 远程发送 prompt 和中止运行
- 为非活跃会话提供后台恢复功能
- 从浏览器启动新的后台会话
- 无缝回切至本地 pi TUI
如果 Toilet-Pi 处于离线状态,交互式 pi 依然可以正常使用。后台会话在与服务器断开连接时会自动停止,从而防止隐藏的孤儿进程更改会话。
## 环境要求
- Node.js 22.19 或更高版本
- [`@earendil-works/pi-coding-agent`](https://www.npmjs.com/package/@earendil-works/pi-coding-agent)
- Git
## 快速开始
### 1. 安装 Toilet-Pi
克隆本仓库,安装相关依赖,并直接从 GitHub 安装 pi 包:
```
git clone https://github.com/mrexodia/toilet-pi.git
cd toilet-pi
npm run setup
pi install https://github.com/mrexodia/toilet-pi
```
如果之后需要更新已安装的扩展,请运行 `pi update --extensions`,然后重启 pi 或者运行 `/reload`。
### 2. 启动服务器
```
npm start
```
服务器会打印出一个 **Admin 登录 URL**。在浏览器中打开该 URL。
默认情况下,服务器运行在 `http://localhost:3457`。其生成的 admin token 保存在 `~/.pi/agent/toilet-pi-server.json` 中。
### 3. 连接你的机器
在 Web UI 中:
1. 打开 **Installation**。
2. 生成一个机器连接 URL。
3. 复制该 URL。
然后在目标机器上打开 pi 并运行:
```
/toilet-pi wss://your-server/ws?token=...
```
请使用 Web UI 生成的确切 `ws://` 或 `wss://` URL。不要使用浏览器的 Admin 登录 URL。
### 4. 启动 supervisor
在每台已连接的机器上保持以下程序运行:
```
npm run supervisor
```
supervisor 负责让本地会话和项目变得可见,并在收到浏览器请求时启动后台 pi 进程。
### 5. 使用 Toilet-Pi
打开 Web UI 即可执行以下操作:
- 检查跨已连接机器的各类会话
- 向活跃会话发送 prompt
- 通过发送 prompt 来恢复非活跃会话
- 从 **Projects** 视图中启动新会话
- 中止正在进行的运行
常规的本地 pi 会话会通过 `toilet-pi.ts` 自动连接。
## 常用 pi 命令
```
/toilet-pi
```
输入或替换该机器的连接 URL。
```
/ws
```
显示当前的 Toilet-Pi 连接状态。
若要在不永久安装扩展的情况下进行尝试:
```
pi -e https://github.com/mrexodia/toilet-pi
```
## 添加其他计算机
在每一台需要添加的计算机上:
1. 使用 `git clone https://github.com/mrexodia/toilet-pi.git` 克隆本仓库。
2. 进入仓库目录并运行 `npm run setup`。
3. 运行 `pi install https://github.com/mrexodia/toilet-pi`。
4. 从 Web UI 的 **Installation** 中生成一个新的机器 URL。
5. 在 pi 中运行 `/toilet-pi `。
6. 运行 `npm run supervisor` 启动 supervisor。
请为每台计算机生成独立的机器 URL。
## Cloudflare Workers 部署
首先生成一个高强度的服务器 token:
```
node --input-type=module -e "import { randomBytes } from 'node:crypto'; console.log(randomBytes(32).toString('base64url'))"
```
然后部署服务器和 Web UI。当 Wrangler 提示输入 secret 值时,请粘贴刚刚生成的 token:
```
cd server
npx wrangler login
npx wrangler secret put TOILET_PI_SERVER_TOKEN
cd ..
npm run deploy
```
部署完成后,打开:
```
https://your-worker.workers.dev/#token=YOUR_SERVER_TOKEN
```
supervisor 和 pi 扩展依然需要在每台已连接的计算机上本地运行。
## 配置说明
常用的环境变量:
| 变量 | 用途 |
| --- | --- |
| `PORT` | 本地服务器端口;默认为 `3457` |
| `TOILET_PI_PUBLIC_URL` | Node 服务器的公共 URL 覆盖 |
| `TOILET_PI_SERVER_TOKEN` | 固定的 admin token,用于替代本地自动生成的 token |
| `TOILET_PI_HOST_ID` | 机器的自定义名称 |
| `TOILET_PI_SESSION_DIR` | 自定义的 pi 会话目录 |
| `TOILET_PI_PI_COMMAND` | 用于启动 pi 的路径或命令 |
| `TOILET_PI_SERVER_URL` | 机器连接 URL 覆盖 |
| `PI_CODING_AGENT_DIR` | 覆盖 pi 的配置目录 |
机器配置通常存储在 `~/.pi/agent/toilet-pi.json` 中。
## 故障排除
- **机器不可见:** 确保该机器上正在运行 `npm run supervisor`。
- **交互式会话不可见:** 通过 `pi list` 确认已安装该包,然后重启 pi 或运行 `/reload`。
- **非活跃会话无法启动:** 该机器的 supervisor 必须处于已连接状态。
- **配置了错误的服务器:** 使用新生成的机器 URL 重新运行 `/toilet-pi`。
- **远程访问失败:** 当在外部网络(非本地网络)暴露 Toilet-Pi 时,请务必使用 HTTPS/WSS。
## 安全性与持久化
请将 Admin 登录 URL、服务器 token 和机器 URL 视为机密信息。在进行远程部署时请使用 HTTPS。
服务器会话状态保存在内存中,并会随着客户端的重新连接而重建。你实际的 pi 会话文件始终保留在各自的原始机器上。
## 许可证
MPL-2.0
标签:AI编程助手, GNU通用公共许可证, MITM代理, Node.js, SOC Prime, WebSocket, 依赖分析, 开发工具, 暗色界面, 程序员工具, 网络安全研究, 自动化攻击, 运维管理, 远程控制