cli-wechat-bridge 1.1.3 → 1.1.5

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.
Files changed (50) hide show
  1. package/README.md +110 -140
  2. package/bin/wechat-claude.mjs +1 -1
  3. package/bin/wechat-codex.mjs +1 -1
  4. package/bin/wechat-opencode.mjs +1 -1
  5. package/bin/wechat-pi.mjs +1 -1
  6. package/dist/bridge/bridge-adapters.claude.js +448 -11
  7. package/dist/bridge/bridge-adapters.codex.js +262 -11
  8. package/dist/bridge/bridge-adapters.core.js +76 -4
  9. package/dist/bridge/bridge-adapters.js +0 -3
  10. package/dist/bridge/bridge-adapters.opencode.js +497 -49
  11. package/dist/bridge/bridge-adapters.pi.js +44 -8
  12. package/dist/bridge/bridge-adapters.shared.js +13 -100
  13. package/dist/bridge/bridge-controller.js +3 -0
  14. package/dist/bridge/bridge-final-reply.js +17 -2
  15. package/dist/bridge/bridge-process-reaper.js +14 -4
  16. package/dist/bridge/bridge-session-resume.js +151 -0
  17. package/dist/bridge/bridge-state.js +41 -6
  18. package/dist/bridge/bridge-utils.js +63 -229
  19. package/dist/bridge/claude-hooks.js +1 -0
  20. package/dist/bridge/wechat-bridge.js +93 -140
  21. package/dist/bridge/wechat-forwarding.js +58 -0
  22. package/dist/companion/codex-remote-client.js +309 -36
  23. package/dist/companion/codex-visible-client-link.js +122 -0
  24. package/dist/companion/local-companion-link.js +33 -2
  25. package/dist/companion/local-companion-start.js +44 -13
  26. package/dist/companion/local-companion.js +6 -3
  27. package/dist/companion/opencode-tui-bridge-plugin.js +73 -0
  28. package/dist/companion/pi-tui-bridge-extension.js +42 -3
  29. package/dist/daemon/daemon-link.js +25 -3
  30. package/dist/daemon/wechat-daemon.js +168 -56
  31. package/dist/i18n/index.js +0 -3
  32. package/dist/i18n/messages-en.js +2 -3
  33. package/dist/i18n/messages-zh.js +2 -3
  34. package/dist/utils/atomic-file.js +15 -0
  35. package/dist/utils/doctor.js +23 -11
  36. package/dist/wechat/channel-config.js +0 -2
  37. package/dist/wechat/setup.js +5 -11
  38. package/dist/wechat/wechat-transport.js +14 -8
  39. package/package.json +2 -13
  40. package/bin/wechat-bridge-claude.mjs +0 -5
  41. package/bin/wechat-bridge-codex.mjs +0 -5
  42. package/bin/wechat-bridge-opencode.mjs +0 -5
  43. package/bin/wechat-bridge-pi.mjs +0 -5
  44. package/bin/wechat-bridge-shell.mjs +0 -5
  45. package/bin/wechat-bridge.mjs +0 -5
  46. package/bin/wechat-claude-start.mjs +0 -5
  47. package/bin/wechat-codex-start.mjs +0 -5
  48. package/bin/wechat-opencode-start.mjs +0 -5
  49. package/bin/wechat-pi-start.mjs +0 -5
  50. package/dist/bridge/bridge-adapters.shell.js +0 -363
package/README.md CHANGED
@@ -62,7 +62,7 @@
62
62
  npm install -g cli-wechat-bridge@latest
63
63
  ```
64
64
 
65
- 安装后,可以在任意项目目录中使用 `wechat-daemon`、`wechat-codex-start`、`wechat-claude-start`、`wechat-opencode-start`、`wechat-pi-start` 等命令。
65
+ 安装后,可以在任意项目目录中直接运行 `wechat-codex`、`wechat-claude`、`wechat-opencode`、`wechat-pi`,或使用 `wechat-daemon` 保持长期连接。
66
66
 
67
67
  兼容性说明:旧包名 `@unlinearity/cli-wechat-bridge` 会继续同步发布,已经安装旧包名的用户可以正常升级;新用户优先使用更短的 `cli-wechat-bridge`。
68
68
 
@@ -114,7 +114,7 @@ wechat-setup
114
114
 
115
115
  登录成功后,程序会清理旧的同步游标和上下文 token,避免旧会话状态污染新的登录状态。数据目录、状态文件和旧版本迁移说明见 [问题排查](docs/troubleshooting.md#数据目录与状态文件)。
116
116
 
117
- 首次安装或微信登录过期时,`wechat-codex-start`、`wechat-claude-start`、`wechat-opencode-start`、`wechat-pi-start` 也会在前台提示扫码登录。
117
+ 首次安装或微信登录过期时,四个直接启动命令也会在前台提示扫码登录。
118
118
 
119
119
  ### 4. 先从微信发一条同步消息(重要)
120
120
 
@@ -122,7 +122,7 @@ wechat-setup
122
122
 
123
123
  如果冷启动或长时间闲置后直接从本地终端先发消息,bridge 通常仍会捕获这条本地输入并交给 Codex / Claude Code / OpenCode / Pi 处理,但回发到微信时可能因为旧的 `context_token` 失效而失败。表现是:本地已经有回复,微信暂时收不到;等你先从微信发来一条消息后,后续双向同步就能恢复正常。
124
124
 
125
- ### 5. 单命令启动桥接(兼容模式)
125
+ ### 5. 直接启动本地 CLI
126
126
 
127
127
  先进入需要操作的项目目录:
128
128
 
@@ -134,30 +134,30 @@ cd D:\work\your-project
134
134
 
135
135
  | 使用的本地 CLI | 启动命令 |
136
136
  | --- | --- |
137
- | Codex | `wechat-codex-start` |
138
- | Claude Code | `wechat-claude-start` |
139
- | OpenCode | `wechat-opencode-start` |
140
- | Pi | `wechat-pi-start` |
137
+ | Codex | `wechat-codex` |
138
+ | Claude Code | `wechat-claude` |
139
+ | OpenCode | `wechat-opencode` |
140
+ | Pi | `wechat-pi` |
141
141
 
142
- 这些启动器会自动完成以下动作:
142
+ 这些命令会自动完成以下动作:
143
143
 
144
144
  1. 校验或刷新微信登录凭据;
145
- 2. 如果当前目录已有 `wechat-daemon`,则委托 daemon 切换到对应 CLI;
146
- 3. 如果没有 daemon,则复用当前目录中已运行的 bridge,或在当前目录启动新的 bridge;
147
- 4. 如果已有独立 bridge 正在服务其他目录,则停止旧 bridge 并切换到当前目录;
148
- 5. 等待当前目录对应的本地 companion endpoint 就绪;
149
- 6. 打开可见的本地 CLI 会话。
150
-
151
- 没有 daemon 时,`wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` / `wechat-pi-start` 仍按**单活工作区切换器**工作:
145
+ 2. 如果当前目录已有 `wechat-daemon`,则委托 daemon 切换到对应 CLI;
146
+ 3. 如果没有 daemon,则创建或复用内部 transient bridge runtime;
147
+ 4. 如果旧 runtime 正在服务其他目录,则安全停止旧 runtime 并切换到当前目录;
148
+ 5. 等待当前目录对应的本地 endpoint 就绪;
149
+ 6. 打开可见的本地 CLI 会话。
150
+
151
+ 没有 daemon 时,四个直接命令按**单活工作区切换器**工作:
152
152
 
153
153
  - 同一时间只有一个项目与微信对话;
154
154
  - Codex 在当前目录重复执行时会复用已有会话;Claude Code、OpenCode 和 Pi 启动器默认新建会话;
155
- - Pi 如需显式恢复上一次会话,可使用 `wechat-pi-start --session-start-mode restore`;
155
+ - Pi 如需显式恢复上一次会话,可使用 `wechat-pi --session-start-mode restore`;
156
156
  - 如果当前目录已经有可见 companion / panel 在运行,则不会重复打开第二个窗口;
157
157
  - 如果检测到可见端仍在运行但 worker 状态异常(如 `stopped` / `error`),会自动重启 bridge 再重新打开可见端;
158
- - 在其他目录执行会显式切换活动工作区。
159
-
160
- ### 6. 常驻 daemon 模式(支持多 CLI 切换)
158
+ - 在其他目录执行会显式切换活动工作区。
159
+
160
+ ### 6. 常驻 daemon 模式(支持多 CLI 切换)
161
161
 
162
162
  如果你希望微信连接长期保持在线,并在 Codex / Claude Code / OpenCode / Pi 之间来回切换,可以在项目目录启动统一 daemon:
163
163
 
@@ -197,20 +197,9 @@ wechat-daemon --adapter codex
197
197
  wechat-daemon --adapter claude --profile work
198
198
  ```
199
199
 
200
- 当同一工作目录已有 `wechat-daemon` 在运行时,`wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` / `wechat-pi-start` 会自动委托给 daemon:请求 daemon 切到对应 CLI,并在需要时打开可见终端,不会停止 daemon 或关闭其他 CLI。
200
+ 当同一工作目录已有 `wechat-daemon` 在运行时,四个直接启动命令会自动委托给 daemon:请求 daemon 切到对应 CLI,并在需要时打开可见终端,不会停止 daemon 或关闭其他 CLI。
201
201
 
202
- 其中 `wechat-pi-start` 仍表示启动一个新的 Pi session;如果 Pi TUI 已经可见,daemon 会在现有窗口中创建新 session。微信中的 `/pi` 仅用于切换适配器,仍会复用已经连接的 Pi TUI。
203
-
204
- ### 7. 手动双终端模式(高级调试)
205
-
206
- 如果你希望明确观察 bridge 与本地 CLI companion,也可以用两个终端分别启动。
207
-
208
- | 适配器 | 终端 A:bridge | 终端 B:本地 companion |
209
- | --- | --- | --- |
210
- | Codex | `wechat-bridge-codex` | `wechat-codex` |
211
- | Claude Code | `wechat-bridge-claude` | `wechat-claude` |
212
- | OpenCode | `wechat-bridge-opencode` | `wechat-opencode` |
213
- | Pi | `wechat-bridge-pi` | `wechat-pi` |
202
+ 其中 `wechat-pi` 默认表示启动一个新的 Pi session;如果 Pi TUI 已经可见,daemon 会在现有窗口中创建新 session。微信中的 `/pi` 仅用于切换适配器,仍会复用已经连接的 Pi TUI。
214
203
 
215
204
  ## 适配器支持情况
216
205
 
@@ -224,12 +213,12 @@ wechat-daemon --adapter claude --profile work
224
213
  - 当前不会自动 OCR 图片,也不会自动抽取 PDF / DOCX 正文;如需解析,由本地 CLI 根据路径完成。
225
214
  - 具体保存位置见 [问题排查](docs/troubleshooting.md#数据目录与状态文件)。
226
215
 
227
- | 适配器 | 当前状态 | 说明 |
228
- | --- | --- | --- |
229
- | `codex` | 已接入 | 双终端模式;本地 companion 作为线程权威;微信跟随本地线程 |
230
- | `claude` | 已接入 | `wechat-bridge-claude` + `wechat-claude` 的双终端 companion 模式;会话切换、最终回复与审批元数据按 Claude session 语义同步 |
231
- | `opencode` | 已接入 | [`OpenCode`](https://github.com/anomalyco/opencode) 适配器;`wechat-bridge-opencode` + `wechat-opencode` 的双终端 companion 模式;支持本地 session 切换跟随,微信侧支持 `/new` / `/new-session` |
232
- | `pi` | 已接入 | `wechat-bridge-pi` + `wechat-pi`;`wechat-pi` 启动用户原生 Pi TUI,并通过本地 extension 让微信接管同一 session,支持最终回复、停止、新建和恢复 session |
216
+ | 适配器 | 当前状态 | 说明 |
217
+ | --- | --- | --- |
218
+ | `codex` | 已接入 | `wechat-codex` 自动确保内部 runtime 并打开可见 Codex;微信跟随本地 thread |
219
+ | `claude` | 已接入 | `wechat-claude` 自动启动或复用 Claude Code;会话、最终回复与审批按 Claude session 语义同步 |
220
+ | `opencode` | 已接入 | `wechat-opencode` 自动启动或复用 OpenCode;支持本地 session 跟随及微信 `/new` / `/new-session` |
221
+ | `pi` | 已接入 | `wechat-pi` 启动用户原生 Pi TUI,并通过本地 extension 让微信接管同一 session,支持最终回复、停止、新建和恢复 session |
233
222
 
234
223
  Pi 按全权限本地代理运行:bridge 不增加工具审批层,并传入 `--approve` 信任当前项目;读写文件和执行命令均使用启动 `wechat-pi` 的本地用户权限。原生 TUI 的主题、快捷键、模型选择和 extension UI 都会保留。`wechat-pi` 本身就是被微信接管的 Pi TUI;不要再启动第二个 Pi 进程同时写入同一个 session 文件。
235
224
 
@@ -249,97 +238,69 @@ Pi 按全权限本地代理运行:bridge 不增加工具审批层,并传入
249
238
 
250
239
  OpenCode 模式下,微信侧支持 `/new` 或 `/new-session` 创建新 session;如果在本地 OpenCode CLI 中创建新 session,微信消息也会跟随新的 session。
251
240
 
252
- ## 命令说明
253
-
254
- ### 常用全局命令
255
-
256
- | 类型 | 命令 |
257
- | --- | --- |
258
- | 登录与更新 | `wechat-setup`、`wechat-check-update` |
259
- | 常驻 daemon | `wechat-daemon` |
260
- | Codex | `wechat-bridge-codex`、`wechat-codex`、`wechat-codex-start` |
261
- | Claude Code | `wechat-bridge-claude`、`wechat-claude`、`wechat-claude-start` |
262
- | OpenCode | `wechat-bridge-opencode`、`wechat-opencode`、`wechat-opencode-start` |
263
- | Pi | `wechat-bridge-pi`、`wechat-pi`、`wechat-pi-start` |
264
-
265
- ### Daemon CLI 参数
266
-
267
- 适用于:
268
-
269
- - `wechat-daemon`
270
-
271
- 示例:
272
-
273
- ```bash
274
- wechat-daemon --cwd D:\work\my-project
275
- wechat-daemon --adapter codex
276
- wechat-daemon --adapter claude --profile work
277
- ```
278
-
279
- 支持参数:
280
-
281
- - `--cwd <path>`:指定 daemon 绑定的工作目录;
241
+ ## 命令说明
242
+
243
+ ### 常用全局命令
244
+
245
+ | 类型 | 命令 |
246
+ | --- | --- |
247
+ | 登录与更新 | `wechat-setup`、`wechat-check-update` |
248
+ | 常驻 daemon | `wechat-daemon` |
249
+ | Codex | `wechat-codex` |
250
+ | Claude Code | `wechat-claude` |
251
+ | OpenCode | `wechat-opencode` |
252
+ | Pi | `wechat-pi` |
253
+
254
+ 1.1.5 已移除完成弃用周期的 `wechat-*-start` 别名;请直接使用 `wechat-codex`、`wechat-claude`、`wechat-opencode` 或 `wechat-pi`。公开的 `wechat-bridge*` 命令和 Shell adapter 也已移除;内部 bridge runtime 仍由直接命令和 daemon 自动管理。
255
+
256
+ ### Daemon CLI 参数
257
+
258
+ 示例:
259
+
260
+ ```bash
261
+ wechat-daemon --cwd D:\work\my-project
262
+ wechat-daemon --adapter codex
263
+ wechat-daemon --adapter claude --profile work
264
+ ```
265
+
266
+ 支持参数:
267
+
268
+ - `--cwd <path>`:指定 daemon 绑定的工作目录;
282
269
  - `--adapter <codex|claude|opencode|pi>`:启动 daemon 后立即切换到指定 CLI;
283
- - `--profile <name-or-path>`:传给 daemon 创建的对应适配器;
284
- - `--no-open`:只创建 bridge slot,不自动打开可见 CLI。
285
-
286
- ### Bridge CLI 参数
287
-
288
- 适用于:
289
-
290
- - `wechat-bridge`
291
- - `wechat-bridge-codex`
292
- - `wechat-bridge-claude`
293
- - `wechat-bridge-opencode`
294
- - `wechat-bridge-pi`
295
-
296
- 示例:
297
-
298
- ```bash
299
- wechat-bridge --adapter codex --cwd D:\work\my-project
300
- wechat-bridge-codex --cwd D:\work\my-project
301
- wechat-bridge-claude --profile work
302
- wechat-bridge-opencode --cwd D:\work\my-project
303
- wechat-bridge-pi --cwd D:\work\my-project
304
- wechat-bridge-codex --lifecycle companion_bound
305
- ```
306
-
307
- 支持参数:
308
-
309
- - `--adapter <codex|claude|opencode|pi>`:通用入口 `wechat-bridge` 需要显式指定适配器;
310
- - `--cwd <path>`:指定工作目录;
311
- - `--profile <name-or-path>`:向适配器传入 profile;
312
- - `--lifecycle <persistent|companion_bound>`:指定 bridge 生命周期;`wechat-*-start` 会使用 `companion_bound`。
313
-
314
- ### `wechat-*-start` 参数
315
-
316
- 示例:
317
-
318
- ```bash
319
- wechat-codex-start --cwd D:\work\my-project
320
- wechat-claude-start --profile work
321
- wechat-opencode-start --cwd D:\work\my-project
322
- wechat-pi-start --cwd D:\work\my-project --model openai/gpt-5.6-sol
323
- ```
324
-
325
- 支持参数:
326
-
327
- - `--cwd <path>`:显式指定 bridge / companion 对应的工作目录;
328
- - `--profile <name-or-path>`:转发给后台启动的 `wechat-bridge-codex` / `wechat-bridge-claude` / `wechat-bridge-opencode` / `wechat-bridge-pi`;
329
- - `--timeout-ms <ms>`:等待当前目录 endpoint 的最长时间,默认 `15000`。
330
- - `--session-start-mode <restore|new>`:显式选择恢复或新建会话;Pi 启动器默认 `new`。
331
-
332
- 高级用法:除上述启动器参数外,未知参数会继续透传给可见的底层 CLI。这样既能保留微信登录、工作区切换与 bridge 生命周期管理,也能启用 Codex / Claude Code / OpenCode / Pi 自己的高级启动模式。
333
-
334
- ```bash
335
- wechat-codex-start --yolo
336
- wechat-codex-start --model gpt-5.2 --yolo
337
- wechat-claude-start --dangerously-skip-permissions
338
- wechat-claude-start --model sonnet --dangerously-skip-permissions
339
- ```
340
-
341
- 其中,`--yolo` 会传给 Codex;`--dangerously-skip-permissions` 会传给 Claude Code。它们只影响本地可见 CLI,不会覆盖 bridge 托管的 Codex remote 连接参数、Claude settings、微信登录状态或当前工作区锁。由于这两类参数会降低审批保护,建议只在可信工作区中使用。
342
-
270
+ - `--profile <name-or-path>`:传给 daemon 创建的对应适配器;
271
+ - `--no-open`:只创建 runtime slot,不自动打开可见 CLI;
272
+ - `--doctor`:检查环境、CLI、锁、endpoint 和 daemon 状态。
273
+
274
+ ### 直接启动命令参数
275
+
276
+ 适用于 `wechat-codex`、`wechat-claude`、`wechat-opencode`、`wechat-pi`。
277
+
278
+ ```bash
279
+ wechat-codex --cwd D:\work\my-project
280
+ wechat-claude --profile work
281
+ wechat-opencode --cwd D:\work\my-project
282
+ wechat-pi --cwd D:\work\my-project --model openai/gpt-5.6-sol
283
+ ```
284
+
285
+ 支持参数:
286
+
287
+ - `--cwd <path>`:指定 runtime 与可见 CLI 对应的工作目录;
288
+ - `--profile <name-or-path>`:传给内部 runtime;
289
+ - `--timeout-ms <ms>`:等待当前目录 endpoint 的最长时间,默认 `15000`;
290
+ - `--session-start-mode <restore|new>`:显式选择恢复或新建会话;
291
+ - 其他未知参数会继续透传给可见的底层 CLI。
292
+
293
+ 默认会话策略:Codex 恢复当前会话;Claude Code、OpenCode 和 Pi 新建会话。
294
+
295
+ ```bash
296
+ wechat-codex --yolo
297
+ wechat-codex --model gpt-5.2 --yolo
298
+ wechat-claude --dangerously-skip-permissions
299
+ wechat-claude --model sonnet --dangerously-skip-permissions
300
+ ```
301
+
302
+ 其中,`--yolo` 会传给 Codex;`--dangerously-skip-permissions` 会传给 Claude Code。它们只影响本地可见 CLI,不会覆盖内部 runtime 的连接参数、微信登录状态或工作区锁。由于这两类参数会降低审批保护,建议只在可信工作区中使用。
303
+
343
304
  ## 微信侧支持的指令
344
305
 
345
306
  | 指令 | 说明 |
@@ -348,15 +309,24 @@ wechat-claude-start --model sonnet --dangerously-skip-permissions
348
309
  | `/codex [prompt]` / `/claude [prompt]` / `/opencode [prompt]` / `/pi [prompt]` | daemon 模式下切换活动 CLI;已有 CLI 会复用,没有则自动打开;可选 prompt 会在切换成功后立即转发 |
349
310
  | `/status` | 查看 bridge 当前状态 |
350
311
  | `/stop` | 中断当前任务 |
351
- | `/reset` | 重建当前本地会话 |
312
+ | `/reset` | 重建当前本地会话 |
352
313
  | `/new` 或 `/new-session` | OpenCode 或 Pi 模式下新建 session |
353
- | `/confirm` / `/deny` | 处理 CLI 权限请求;需要一次性 code 的请求会在消息中提示具体确认格式 |
314
+ | `/resume` / `/resume <编号或 ID 前缀>` | Codex、Claude Code、OpenCode 或 Pi 模式下列出并恢复当前工作目录的最近 thread/session;编号在列表显示后 5 分钟内有效 |
315
+ | `/confirm` / `/deny` | 处理 CLI 权限请求;需要一次性 code 的请求会在消息中提示具体确认格式 |
354
316
  | `/daemon-stop` | daemon 模式下停止常驻进程 |
355
317
  | `/bindings` | 查看当前所有表情绑定 |
356
318
  | `/bind [表情] /命令` | 绑定表情到指定命令 |
357
319
  | `/unbind [表情]` | 解除指定表情的绑定 |
358
320
 
359
- 说明:微信侧 `/resume` 目前暂时保持禁用;需要切换 Codex / Claude / OpenCode / Pi 会话时,优先在本地 companion 中使用 `/new` 或对应 CLI 的会话命令,微信会跟随本地活动会话。
321
+ 说明:微信侧 `/resume` 当前支持 Codex、Claude Code、OpenCode 和 Pi,并且只列出 daemon/bridge 启动目录内的最近 root thread/session。实际恢复会等待当前任务进入 idle;有任务、审批或待回答问题时请先处理,或使用 `/stop`。仍处于 active 状态的 Codex thread,以及仍在运行的 Claude background session,不允许从微信接管。
322
+
323
+ OpenCode 和 Pi 的本地可见 TUI 会反向同步 session:在电脑端通过 picker、`/resume` 或新建会话切换后,微信自动跟随新的 session,并使之前显示的 `/resume` 编号列表失效。如果本地切换发生在微信任务仍在执行时,bridge 会中断旧任务、报告中断原因,再确认已经跟随新的本地 session,避免回复继续落入不可见的旧会话。
324
+
325
+ Codex 通过 bridge 持有的持久 app-server 恢复 thread:`/resume` 使用 `thread/list` 获取同 cwd 的 CLI/VS Code 根 thread,选择后依次执行 `thread/read`、`thread/resume` 预检,再通过带随机 token 的 localhost supervisor 只替换可见 TUI 子进程。只有目标 `codex resume <thread-id> --remote ...` 客户端稳定启动后才提交 shared thread;失败时保持或恢复原可见 thread。电脑端 Codex picker 或 `/resume` 仍由 app-server 事件反向同步微信。
326
+
327
+ Claude Code 使用官方 Hook 完成同样的双向确认:微信恢复会向当前 PTY提交精确 `/resume <UUID>`,并等待 `SessionEnd(reason=resume)` 与目标 `SessionStart(source=resume)`;电脑端 picker 或 `/resume` 产生相同 Hook 序列,bridge 会跟随新的 transcript。Claude 的本地输入和最终回答继续同步微信。
328
+
329
+ Pi 的电脑端输入和最终回答都会同步到微信:微信先显示本地输入提示,再在 Pi `agent_settled` 后收到该 turn 的最终结果;微信发起的 Pi turn 仍只发送一次最终回复。
360
330
 
361
331
  ### 表情绑定
362
332
 
@@ -392,18 +362,18 @@ Daemon 模式支持将微信表情映射为命令,在微信中发送表情即
392
362
 
393
363
  ## 工作区模型
394
364
 
395
- 本项目采用“当前目录即当前工作区”的模型:
396
-
397
- - 从哪个目录启动 `wechat-bridge-codex` / `wechat-bridge-claude` / `wechat-bridge-opencode` / `wechat-bridge-pi`,哪个目录就是当前工作区;
398
- - 对应的本地 companion 必须连接同一工作区;
399
- - 不同工作区的运行状态相互隔离。
365
+ 本项目采用“当前目录即当前工作区”的模型:
366
+
367
+ - 从哪个目录启动 `wechat-codex` / `wechat-claude` / `wechat-opencode` / `wechat-pi`,哪个目录就是当前工作区;
368
+ - 直接命令会自动管理同一工作区的内部 runtime 与可见 CLI;
369
+ - 不同工作区的运行状态相互隔离。
400
370
 
401
371
  目前支持两种运行模型:
402
372
 
403
- - 独立 bridge:单 owner、单 bridge、单活动工作区;
373
+ - 直接启动模式:单 owner、内部 transient runtime、单活动工作区;
404
374
  - `wechat-daemon`:单 owner、单 daemon、绑定一个启动工作区,但可在这个工作区内同时保留 Codex / Claude Code / OpenCode / Pi 四个 CLI slot。
405
-
406
- 对 `wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` / `wechat-pi-start` 来说,这意味着:
375
+
376
+ 对四个直接启动命令来说,这意味着:
407
377
 
408
378
  - 如果同一工作区已有 daemon,它们会委托 daemon 切换 CLI;
409
379
  - 如果没有 daemon,它们会作为**单活工作区切换器**工作;
@@ -426,7 +396,7 @@ wechat-check-update
426
396
  - 远程仓库的最新版本;
427
397
  - 如果有更新,会提供详细的更新指引。
428
398
 
429
- 当启动 `wechat-bridge` 相关命令时(如 `wechat-bridge-codex`、`wechat-bridge-claude`),程序也会自动检查更新(每 24 小时一次)。自动检查在后台异步执行,不影响启动速度。
399
+ 没有 daemon 时,四个直接命令启动的内部 runtime 会按现有缓存策略检查更新。自动检查在后台异步执行,不影响启动速度。
430
400
 
431
401
  ### 获取最新版本
432
402
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  import { runJsEntry } from "./_run-entry.mjs";
4
4
 
5
- runJsEntry("dist/companion/local-companion.js", ["--adapter", "claude"]);
5
+ runJsEntry("dist/companion/local-companion-start.js", ["--adapter", "claude"]);
@@ -2,4 +2,4 @@
2
2
 
3
3
  import { runJsEntry } from "./_run-entry.mjs";
4
4
 
5
- runJsEntry("dist/companion/codex-remote-client.js");
5
+ runJsEntry("dist/companion/local-companion-start.js", ["--adapter", "codex"]);
@@ -2,4 +2,4 @@
2
2
 
3
3
  import { runJsEntry } from "./_run-entry.mjs";
4
4
 
5
- runJsEntry("dist/companion/local-companion.js", ["--adapter", "opencode"]);
5
+ runJsEntry("dist/companion/local-companion-start.js", ["--adapter", "opencode"]);
package/bin/wechat-pi.mjs CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  import { runJsEntry } from "./_run-entry.mjs";
4
4
 
5
- runJsEntry("dist/companion/local-companion.js", ["--adapter", "pi"]);
5
+ runJsEntry("dist/companion/local-companion-start.js", ["--adapter", "pi"]);