pi-courier 0.1.11 → 0.1.13

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 CHANGED
@@ -82,7 +82,7 @@ It walks you through, prompting for each value (defaults in brackets; press Ente
82
82
 
83
83
  ```
84
84
  === pi-courier 首次配置向导 ===
85
- 将生成 ~/.pi/msg-bridge.json(权限 600)
85
+ 将生成 ~/.pi/pi-courier.json(权限 600)
86
86
 
87
87
  Matrix homeserver URL (如 https://matrix.example.com): ← 输入,如 https://matrix.example.com
88
88
  获取 token 方式 [1=用户名密码登录, 2=粘贴已有 token] (1): ← 1 或 2(Enter 默认 1)
@@ -94,14 +94,14 @@ Matrix homeserver URL (如 https://matrix.example.com): ← 输入,如 https:/
94
94
  启用 E2EE 加密? [y/N]: ← y/n(非加密房间也选 y 无妨)
95
95
  pi 工作目录 [默认 /home/you/Projects]: ← Enter 或输入其他目录
96
96
 
97
- ✅ 配置已写入 ~/.pi/msg-bridge.json
97
+ ✅ 配置已写入 ~/.pi/pi-courier.json
98
98
  账号: @test3:...
99
99
  信任用户: @barry:...
100
100
  E2EE: 开启
101
101
  工作目录: /home/you/Projects
102
102
  ```
103
103
 
104
- The wizard verifies the token and writes `~/.pi/msg-bridge.json`. To skip the wizard, create that file manually — the format is in the [FAQ](#4-faq).
104
+ The wizard verifies the token and writes `~/.pi/pi-courier.json`. To skip the wizard, create that file manually — the format is in the [FAQ](#4-faq).
105
105
 
106
106
  ### Step 2 — Start it
107
107
 
@@ -116,7 +116,7 @@ Startup success looks like:
116
116
  ```
117
117
  ✅ Matrix connected as @test3:... (2 rooms, E2EE enabled)
118
118
  ✅ pi RPC connected (model: deepseek-v4-flash, session: 019f...)
119
- 🚀 msg-bridge standalone ready. Waiting for messages...
119
+ 🚀 pi-courier ready. Waiting for messages...
120
120
  ```
121
121
 
122
122
  ### Step 3 — Use it from Matrix
@@ -124,7 +124,7 @@ Startup success looks like:
124
124
  **First contact (one-time pairing):**
125
125
 
126
126
  1. **DM the bot** from your account and send any message
127
- 2. The bot is not yet a trusted user, so the bridge prints a challenge code in its log (`pi-courier logs` or `journalctl --user -u pi-msg-bridge -f`):
127
+ 2. The bot is not yet a trusted user, so the bridge prints a challenge code in its log (`pi-courier logs` or `journalctl --user -u pi-courier -f`):
128
128
 
129
129
  ```
130
130
  🔐 Challenge code for @barry: 138949
@@ -230,7 +230,7 @@ A: Since v0.1.1 the bridge passes `--continue` to pi, resuming the most recent s
230
230
  **Q: Element (web client) intercepts `/`-prefixed messages?**
231
231
  A: Prefix with `//` to send a literal slash (`//compact` sends `/compact`).
232
232
 
233
- **Q: What exactly is in `~/.pi/msg-bridge.json`?**
233
+ **Q: What exactly is in `~/.pi/pi-courier.json`?**
234
234
  A: The wizard-generated config. Example:
235
235
 
236
236
  ```json
package/README.zh-CN.md CHANGED
@@ -82,7 +82,7 @@ pi-courier setup
82
82
 
83
83
  ```
84
84
  === pi-courier 首次配置向导 ===
85
- 将生成 ~/.pi/msg-bridge.json(权限 600)
85
+ 将生成 ~/.pi/pi-courier.json(权限 600)
86
86
 
87
87
  Matrix homeserver URL (如 https://matrix.example.com): ← 输入,如 https://matrix.example.com
88
88
  获取 token 方式 [1=用户名密码登录, 2=粘贴已有 token] (1): ← 1 或 2(回车默认 1)
@@ -94,14 +94,14 @@ Matrix homeserver URL (如 https://matrix.example.com): ← 输入,如 https:/
94
94
  启用 E2EE 加密? [y/N]: ← y/n(非加密房间选 y 也没问题)
95
95
  pi 工作目录 [默认 /home/你/Projects]: ← 回车或输入其他目录
96
96
 
97
- ✅ 配置已写入 ~/.pi/msg-bridge.json
97
+ ✅ 配置已写入 ~/.pi/pi-courier.json
98
98
  账号: @test3:...
99
99
  信任用户: @barry:...
100
100
  E2EE: 开启
101
101
  工作目录: /home/你/Projects
102
102
  ```
103
103
 
104
- 向导会验证 token 并写入 `~/.pi/msg-bridge.json`。不想用向导的话,手动创建这个文件也行 —— 格式见[常见问题](#4-常见问题)。
104
+ 向导会验证 token 并写入 `~/.pi/pi-courier.json`。不想用向导的话,手动创建这个文件也行 —— 格式见[常见问题](#4-常见问题)。
105
105
 
106
106
  ### 第 2 步 —— 启动
107
107
 
@@ -116,7 +116,7 @@ pi-courier enable # 安装 systemd 服务:开机自启 + 立即启动
116
116
  ```
117
117
  ✅ Matrix connected as @test3:... (2 rooms, E2EE enabled)
118
118
  ✅ pi RPC connected (model: deepseek-v4-flash, session: 019f...)
119
- 🚀 msg-bridge standalone ready. Waiting for messages...
119
+ 🚀 pi-courier ready. Waiting for messages...
120
120
  ```
121
121
 
122
122
  ### 第 3 步 —— 在 Matrix 里使用
@@ -124,7 +124,7 @@ pi-courier enable # 安装 systemd 服务:开机自启 + 立即启动
124
124
  **首次接触(一次性配对):**
125
125
 
126
126
  1. 用你的账号**给 bot 发私聊消息**(随便发什么都行)
127
- 2. 此时你还不是 trusted user,bridge 会在日志里打印验证码(`pi-courier logs` 或 `journalctl --user -u pi-msg-bridge -f`):
127
+ 2. 此时你还不是 trusted user,bridge 会在日志里打印验证码(`pi-courier logs` 或 `journalctl --user -u pi-courier -f`):
128
128
 
129
129
  ```
130
130
  🔐 Challenge code for @barry: 138949
@@ -227,7 +227,7 @@ A: 0.1.1 起 bridge 会给 pi 传 `--continue`,按 workdir 恢复最近会话。
227
227
  **Q: Element(网页客户端)拦截 `/` 开头的消息?**
228
228
  A: 用 `//` 转义发送字面文本(如 `//compact` 会发出 `/compact`)。
229
229
 
230
- **Q: `~/.pi/msg-bridge.json` 里到底有什么?**
230
+ **Q: `~/.pi/pi-courier.json` 里到底有什么?**
231
231
  A: 向导生成的配置,示例:
232
232
 
233
233
  ```json
@@ -0,0 +1,72 @@
1
+ # pi-courier — Matrix → pi 桥接服务
2
+ #
3
+ # 构建: docker compose build(只构建,不运行)
4
+ # 运行: docker compose up -d(见 docker-compose.yml 与 README.md)
5
+ #
6
+ # 说明:
7
+ # - 基于 node:24-slim(避开 Node 20 与 pi 的 undici 不兼容问题;glibc 标准
8
+ # 环境保证 agent 的 bash 工具与宿主行为一致)
9
+ # - 多阶段构建:builder 层装依赖后丢弃(npm 缓存/构建垃圾不进最终镜像),
10
+ # runtime 只带 node_modules + 运行时工具 → 体积约省 200-300MB
11
+ # - defaults/ 预置 LLM 三件套模板(entrypoint 首次启动自动拷贝到 /root/.pi/agent)
12
+ # - 构建期间 npm 会从 GitHub Releases 下载 E2EE 原生库(约 21MB),
13
+ # 网络受限时用 --build-arg HTTPS_PROXY/HTTP_PROXY 传代理
14
+
15
+ # ============================== builder ======================================
16
+ FROM node:24-slim AS builder
17
+
18
+ ARG HTTPS_PROXY=
19
+ ARG HTTP_PROXY=
20
+ ENV https_proxy=${HTTPS_PROXY} \
21
+ http_proxy=${HTTP_PROXY}
22
+
23
+ # 仅需要 ca-certificates(npm install 走 https;git 由 runtime 层负责)
24
+ RUN apt-get update \
25
+ && apt-get install -y --no-install-recommends ca-certificates \
26
+ && rm -rf /var/lib/apt/lists/*
27
+
28
+ # 安装 pi 与 pi-courier(pi 先装,pi-courier 的 peer 依赖即满足);
29
+ # 安装后清 npm 缓存(此层最终不会进入 runtime 镜像)
30
+ RUN npm install -g @earendil-works/pi-coding-agent pi-courier \
31
+ && npm cache clean --force
32
+
33
+ # ============================== runtime ======================================
34
+ FROM node:24-slim
35
+
36
+ ARG HTTPS_PROXY=
37
+ ARG HTTP_PROXY=
38
+ ENV https_proxy=${HTTPS_PROXY} \
39
+ http_proxy=${HTTP_PROXY}
40
+
41
+ # 系统依赖:
42
+ # - git:pi 的 bash 工具 / `pi install` 需要(slim 基础镜像没有)
43
+ # - ca-certificates:HTTPS 证书
44
+ # - curl:排查网络问题用(可选)
45
+ RUN apt-get update \
46
+ && apt-get install -y --no-install-recommends git ca-certificates curl \
47
+ && rm -rf /var/lib/apt/lists/*
48
+
49
+ # 从 builder 只带 node_modules,然后在 runtime 重建 bin 符号链接
50
+ # (docker COPY 会把符号链接解引用成普通文件,导致相对 import 解析错误,
51
+ # 所以不能直接 COPY /usr/local/bin/pi)
52
+ COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules
53
+ RUN ln -s /usr/local/lib/node_modules/@earendil-works/pi-coding-agent/dist/cli.js /usr/local/bin/pi \
54
+ && ln -s /usr/local/lib/node_modules/pi-courier/dist/cli.js /usr/local/bin/pi-courier
55
+
56
+ # 验证安装(失败则构建失败)
57
+ RUN pi --version \
58
+ && pi-courier help >/dev/null 2>&1 \
59
+ && echo "OK: node $(node --version), pi + pi-courier installed"
60
+
61
+ # 默认配置模板 + 首次启动初始化脚本
62
+ COPY defaults/ /opt/pi-courier/defaults/
63
+ COPY entrypoint.sh /entrypoint.sh
64
+ RUN chmod +x /entrypoint.sh
65
+
66
+ # 进程存活检查:pid 1 即 entrypoint exec 的 pi-courier run 主进程(kill -0 无需额外工具)
67
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
68
+ CMD kill -0 1 || exit 1
69
+
70
+ # entrypoint:首次启动把模板拷进 /root/.pi/agent;随后前台运行主进程
71
+ ENTRYPOINT ["/entrypoint.sh"]
72
+ CMD ["pi-courier", "run"]
@@ -0,0 +1,114 @@
1
+ # pi-courier Docker 部署说明
2
+
3
+ 在 VPS 上用 Docker 部署 pi-courier(Matrix → pi 桥接服务)。
4
+
5
+ ## 目录结构
6
+
7
+ ```
8
+ deploy/docker/
9
+ ├── Dockerfile # 镜像构建(装 pi + pi-courier + 默认配置模板)
10
+ ├── docker-compose.yml # 编排(数据卷 ./data ↔ 容器 /root/.pi)
11
+ ├── entrypoint.sh # 首次启动:自动把默认配置模板拷入数据目录
12
+ ├── defaults/ # 模板源(构建进镜像 /opt/pi-courier/defaults/)
13
+ │ └── agent/
14
+ │ ├── models.json # 完整模型数据(24 模型,开箱即用)
15
+ │ ├── auth.json # API key 占位(唯一需要你填的文件)
16
+ │ └── settings.json # 默认 provider + 模型
17
+ └── data/ # 运行时数据(自动创建;含 key/token,已 gitignore)
18
+ └── agent/ # 首次启动自动从模板填充
19
+ ```
20
+
21
+ ## 部署步骤
22
+
23
+ ### 1. 准备
24
+
25
+ ```bash
26
+ # VPS 上安装 Docker + Compose 插件(若未安装)
27
+ # Debian/Ubuntu:
28
+ curl -fsSL https://get.docker.com | sh
29
+ sudo apt-get install -y docker-compose-plugin
30
+ ```
31
+
32
+ ```bash
33
+ # 获取项目文件
34
+ git clone https://github.com/Hi-Barry/pi-courier.git && cd pi-courier/deploy/docker
35
+ ```
36
+
37
+ ### 2. 构建(只构建,不运行)
38
+
39
+ ```bash
40
+ # 如果 VPS 需要代理访问外网(GitHub 下载 21MB E2EE 库),先导出:
41
+ # export HTTPS_PROXY=http://<host>:<port>
42
+ # export HTTP_PROXY=http://<host>:<port>
43
+
44
+ docker compose build
45
+ ```
46
+
47
+ ### 3. 配置(只需填 API key)
48
+
49
+ 首次启动会自动把模板拷入 `./data/agent/`。先启动一次容器完成初始化,再填 key:
50
+
51
+ ```bash
52
+ docker compose up -d # 启动(entrypoint 自动初始化 ./data/agent/)
53
+ docker exec pi-courier ls /root/.pi/agent # 确认模板已拷入
54
+ ```
55
+
56
+ 然后编辑宿主 `./data/agent/auth.json`,把占位的 `sk-你的key` 换成真实 API key:
57
+
58
+ ```bash
59
+ # data/agent/auth.json
60
+ { "opencode-go": { "type": "api_key", "key": "sk-真实key" } }
61
+ ```
62
+
63
+ > 默认 provider 是 `opencode-go` / `deepseek-v4-flash`(settings.json)。用其他 provider 的话,改 settings.json 并确认 models.json 里有对应模型。
64
+
65
+ ### 4. Matrix 配置(向导)
66
+
67
+ ```bash
68
+ docker exec -it pi-courier pi-courier setup
69
+ ```
70
+
71
+ 按提示输入:homeserver → token(密码登录或粘贴)→ 信任用户 → E2EE → workdir。写入容器内 `/root/.pi/pi-courier.json`(宿主 `./data/pi-courier.json`)。
72
+
73
+ ```bash
74
+ docker compose restart # 让 Matrix 配置生效
75
+ docker logs pi-courier # 应看到 ✅ Matrix connected + ✅ pi RPC connected (model: deepseek-v4-flash)
76
+ ```
77
+
78
+ ### 5. 使用
79
+
80
+ - 给 bot 发消息 → 查看验证码: `docker logs pi-courier` → 回复验证码配对
81
+ - 查看日志: `docker logs -f pi-courier`(或 `docker exec pi-courier pi-courier logs --level debug`)
82
+ - 重启: `docker compose restart`
83
+ - 停止: `docker compose down`(数据保留在 ./data)
84
+
85
+ ### 6. 升级
86
+
87
+ ```bash
88
+ # 方式 A:容器内自更新(npm 全局方式)
89
+ docker exec pi-courier pi-courier update
90
+
91
+ # 方式 B:重建镜像
92
+ git pull && docker compose build && docker compose up -d
93
+ ```
94
+
95
+ ### 7. 映射宿主机项目目录(可选)
96
+
97
+ 让 pi 在容器里直接操作宿主机上的代码:
98
+
99
+ 1. compose 里取消注释 `- ./projects:/root/Projects`
100
+ 2. 配置 `workdir` 指向容器内路径(`docker exec -it pi-courier pi-courier setup` 的 workdir 填 `/root/Projects/<你的项目>`)
101
+ 3. 宿主机代码放 `./projects/<你的项目>`
102
+
103
+ ## 常见问题
104
+
105
+ | 问题 | 解决 |
106
+ |---|---|
107
+ | 构建很慢 / 卡在下载 | 构建期网络问题,设 `export HTTPS_PROXY` 再 build |
108
+ | 启动显示 `model: unknown` | `./data/agent/auth.json` 没填 key,或 settings.json 的模型不在 models.json |
109
+ | 发消息没有回复 | 按顺序查:`docker logs` 看 Matrix 连接、pi RPC 连接、模型是否 unknown |
110
+ | `M_BAD_JSON: device_id does not match` | 重登录过,删 `./data/msg-bridge-matrix-crypto` 重启 |
111
+ | 加密房间解不开新消息 | bot 无交叉签名,改用非加密房间 |
112
+ | 会话重启丢失 | 0.1.1+ 自动 `--continue`,确认 `./data` 卷没被删 |
113
+ | 想用新配置 | 改 `./data/pi-courier.json` → `docker compose restart` |
114
+ | workdir 文件丢失(容器重建后) | 未映射 projects 卷;取消注释 `- ./projects:/root/Projects` |
@@ -0,0 +1,4 @@
1
+ # 运行时数据目录(容器 /root/.pi 的宿主挂载点)
2
+ # 包含用户的 API key / token,禁止提交进 git
3
+ *
4
+ !.gitignore
@@ -0,0 +1 @@
1
+ { "opencode-go": { "type": "api_key", "key": "sk-你的key" } }