cli-wechat-bridge 1.0.6 → 1.0.7
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 +111 -354
- package/dist/bridge/bridge-adapters.claude.js +94 -3
- package/dist/bridge/bridge-adapters.codex.js +4 -2
- package/dist/bridge/bridge-adapters.core.js +13 -5
- package/dist/bridge/bridge-adapters.opencode.js +65 -12
- package/dist/bridge/bridge-adapters.shared.js +3 -6
- package/dist/bridge/bridge-process-reaper.js +40 -1
- package/dist/bridge/bridge-state.js +6 -3
- package/dist/bridge/wechat-bridge.js +11 -1
- package/dist/commands/check-update.js +1 -1
- package/dist/companion/local-companion-start.js +27 -2
- package/dist/companion/local-companion.js +21 -4
- package/dist/daemon/wechat-daemon.js +276 -20
- package/package.json +2 -3
- package/dist/companion/codex-panel-link.js +0 -72
- package/dist/companion/codex-panel.js +0 -179
- package/dist/media/media-types.js +0 -1
- package/dist/wechat/standalone-bot.js +0 -355
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI WeChat Bridge
|
|
2
2
|
|
|
3
|
-
<p align='center'><img src='docs/images/logo.png' width=90%></p>
|
|
3
|
+
<p align='center'><img src='docs/images/logo.png' width=90%></p>
|
|
4
4
|
|
|
5
5
|
<p align="center"><img alt="Typing SVG" src="https://readme-typing-svg.herokuapp.com?font=JetBrains+Mono&weight=600&duration=4000&pause=500&color=06C763&center=true&vCenter=true&width=660&lines=CLI+WeChat+Bridge+%E5%BE%AE%E4%BF%A1%E6%A1%A5%E6%8E%A5;%E7%9C%9F%E6%AD%A3%E7%9A%84%E2%80%9C%E7%BB%88%E7%AB%AF-%E5%BE%AE%E4%BF%A1%E2%80%9D%E5%8E%9F%E7%94%9F%E5%8F%8C%E5%90%91%E4%BA%A4%E4%BA%92"></p>
|
|
6
6
|
|
|
@@ -14,24 +14,31 @@
|
|
|
14
14
|
</a>
|
|
15
15
|
</p>
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
**命令行工具的微信桥接**:本项目将微信消息桥接到本地运行的 [`Codex`](https://github.com/openai/codex)、[`Claude Code`](https://code.claude.com/docs/en/overview) 和 [`OpenCode`](https://github.com/anomalyco/opencode),同时把本地输出、审批请求与运行状态同步回微信。
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
项目围绕本地工作流设计,重点是保留**本地原生终端体验**:你仍然在本地使用原生 CLI 和高级启动参数,微信负责远程输入、结果回流与状态同步。
|
|
20
20
|
|
|
21
|
-
<p align='center'><img src='docs/images/animation.webp' width=90%></p>
|
|
21
|
+
<p align='center'><img src='docs/images/animation.webp' width=90%></p>
|
|
22
22
|
|
|
23
|
-
##
|
|
23
|
+
## 文档导航
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
- [问题排查](docs/troubleshooting.md):上下文 token、网络代理、本地 endpoint、已知限制等常见问题。
|
|
26
|
+
- [运行配置](docs/configuration.md):数据目录、上传大小限制、调试开关等环境变量。
|
|
27
|
+
- [开发说明](docs/development.md):源码运行、测试、构建、打包和全局 smoke 验证。
|
|
28
|
+
- [发布说明](docs/releases/README.md):各版本变更与升级说明。
|
|
29
|
+
|
|
30
|
+
## 这个项目解决什么问题?
|
|
31
|
+
|
|
32
|
+
本项目适合这样的使用场景:
|
|
26
33
|
|
|
27
34
|
- 你的主工作流仍在本地终端中进行;
|
|
28
|
-
-
|
|
29
|
-
-
|
|
35
|
+
- 你希望继续使用 Codex、Claude Code、OpenCode 等原生 CLI,而不是迁移到网页或托管机器人;
|
|
36
|
+
- 你希望离开电脑后,仍能通过微信向本地会话发送请求,并接收必要输出和状态更新。
|
|
30
37
|
|
|
31
|
-
|
|
38
|
+
本项目不试图把微信变成新的主工作界面。它的定位是:
|
|
32
39
|
|
|
33
40
|
- 本地 CLI 仍然是主工作界面,并保持原生的使用逻辑;
|
|
34
|
-
-
|
|
41
|
+
- 微信是远程入口,用来接入本地会话;
|
|
35
42
|
- 会话一致性、线程状态和审批流仍以**本地会话为中心**。
|
|
36
43
|
|
|
37
44
|
## 快速开始
|
|
@@ -39,111 +46,86 @@
|
|
|
39
46
|
### 1. 环境要求
|
|
40
47
|
|
|
41
48
|
- [Node.js](https://nodejs.org/en/download) `>= 24.0.0`(建议直接安装官网 LTS 版本)
|
|
42
|
-
-
|
|
43
|
-
- 已安装以下至少一种本地 CLI:(最好更新至最新版本)
|
|
49
|
+
- 已安装以下任意一种本地 CLI,并尽量保持最新版本:
|
|
44
50
|
- [Codex](https://github.com/openai/codex)
|
|
45
51
|
- [Claude Code](https://code.claude.com/docs/en/overview)
|
|
46
|
-
- OpenCode
|
|
47
|
-
- powershell.exe
|
|
52
|
+
- [OpenCode](https://github.com/anomalyco/opencode)
|
|
48
53
|
|
|
49
54
|
### 2. 安装
|
|
50
55
|
|
|
51
|
-
|
|
56
|
+
发布版本可以直接从 npm 安装:
|
|
52
57
|
|
|
53
58
|
```bash
|
|
54
59
|
npm install -g cli-wechat-bridge@latest
|
|
55
60
|
```
|
|
56
61
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
兼容说明:旧包名 `@unlinearity/cli-wechat-bridge` 会继续同步发布,已经安装旧包名的用户可以正常升级;新用户优先使用更短的 `cli-wechat-bridge`。
|
|
62
|
+
安装后,可以在任意项目目录中使用 `wechat-daemon`、`wechat-codex-start`、`wechat-claude-start`、`wechat-opencode-start` 等命令。
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
兼容性说明:旧包名 `@unlinearity/cli-wechat-bridge` 会继续同步发布,已经安装旧包名的用户可以正常升级;新用户优先使用更短的 `cli-wechat-bridge`。
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
git clone https://github.com/UNLINEARITY/CLI-WeChat-Bridge
|
|
65
|
-
cd CLI-WeChat-Bridge
|
|
66
|
-
bun install
|
|
67
|
-
```
|
|
66
|
+
### 3. 完成微信登录
|
|
68
67
|
|
|
69
|
-
|
|
68
|
+
全局安装后运行:
|
|
70
69
|
|
|
71
70
|
```bash
|
|
72
|
-
|
|
71
|
+
wechat-setup
|
|
73
72
|
```
|
|
74
73
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npm link
|
|
79
|
-
```
|
|
74
|
+
登录流程会:
|
|
80
75
|
|
|
81
|
-
|
|
76
|
+
1. 获取微信登录二维码;
|
|
77
|
+
2. 在终端打印二维码;
|
|
78
|
+
3. 等待你在微信中扫码并确认;
|
|
79
|
+
4. 保存本地登录凭据。
|
|
82
80
|
|
|
83
|
-
-
|
|
84
|
-
- `npm install -g .` 会安装一份当前仓库的复制版本;后续代码更新后需要重新执行一次。
|
|
81
|
+

|
|
85
82
|
|
|
86
|
-
|
|
83
|
+
登录成功后,程序会清理旧的同步游标和上下文 token,避免旧会话状态污染新的登录状态。数据目录、状态文件和旧版本迁移说明见 [问题排查](docs/troubleshooting.md#数据目录与状态文件)。
|
|
87
84
|
|
|
88
|
-
|
|
89
|
-
npm run smoke:global
|
|
90
|
-
```
|
|
85
|
+
首次安装或微信登录过期时,`wechat-codex-start`、`wechat-claude-start`、`wechat-opencode-start` 也会在前台提示扫码登录。
|
|
91
86
|
|
|
92
|
-
|
|
87
|
+
### 4. 先从微信发一条同步消息(重要)
|
|
93
88
|
|
|
94
|
-
|
|
95
|
-
npm run smoke:global -- --purge-global --clean-cache --full
|
|
96
|
-
```
|
|
89
|
+
启动 bridge 后,建议先在微信里向 Bot 发送一条消息,例如 `hello`、你要执行的任务,或任意一句话。这样 bridge 能拿到最新的微信会话 `context_token`,之后本地终端中的输入、最终回复和审批提示才能稳定同步回微信。
|
|
97
90
|
|
|
98
|
-
|
|
99
|
-
- `--purge-global`:先卸载当前真实全局包
|
|
100
|
-
- `--full`:额外执行 `npm run quality`
|
|
101
|
-
- `--keep-tarball`:保留生成的 tarball,方便排查
|
|
91
|
+
如果冷启动或长时间闲置后直接从本地终端先发消息,bridge 通常仍会捕获这条本地输入并交给 Codex / Claude Code / OpenCode 处理,但回发到微信时可能因为旧的 `context_token` 失效而失败。表现是:本地已经有回复,微信暂时收不到;等你先从微信发来一条消息后,后续双向同步就能恢复正常。
|
|
102
92
|
|
|
103
|
-
###
|
|
93
|
+
### 5. 单命令启动桥接(兼容模式)
|
|
104
94
|
|
|
105
|
-
|
|
95
|
+
先进入需要操作的项目目录:
|
|
106
96
|
|
|
107
97
|
```bash
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
如果是在 clone 的仓库目录下,也可以运行:
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
bun run setup # 绑定微信 ClawBot
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
该流程会:
|
|
118
|
-
|
|
119
|
-
1. 获取微信登录二维码;
|
|
120
|
-
2. 在终端打印二维码;
|
|
121
|
-
3. 等待你在微信中扫码并确认;
|
|
122
|
-
4. 将 bot 凭据写入本地数据目录。
|
|
123
|
-
|
|
124
|
-

|
|
125
|
-
|
|
126
|
-
默认凭据文件路径:
|
|
127
|
-
|
|
128
|
-
```text
|
|
129
|
-
~/.cli-bridge/account.json
|
|
98
|
+
cd D:\work\your-project
|
|
130
99
|
```
|
|
131
100
|
|
|
132
|
-
|
|
101
|
+
然后选择一个单命令入口:
|
|
133
102
|
|
|
134
|
-
|
|
103
|
+
| 使用的本地 CLI | 启动命令 |
|
|
104
|
+
| --- | --- |
|
|
105
|
+
| Codex | `wechat-codex-start` |
|
|
106
|
+
| Claude Code | `wechat-claude-start` |
|
|
107
|
+
| OpenCode | `wechat-opencode-start` |
|
|
135
108
|
|
|
136
|
-
|
|
109
|
+
这些启动器会自动完成以下动作:
|
|
137
110
|
|
|
138
|
-
|
|
111
|
+
1. 校验或刷新微信登录凭据;
|
|
112
|
+
2. 如果当前目录已有 `wechat-daemon`,则委托 daemon 切换到对应 CLI;
|
|
113
|
+
3. 如果没有 daemon,则复用当前目录中已运行的 bridge,或在当前目录启动新的 bridge;
|
|
114
|
+
4. 如果已有独立 bridge 正在服务其他目录,则停止旧 bridge 并切换到当前目录;
|
|
115
|
+
5. 等待当前目录对应的本地 companion endpoint 就绪;
|
|
116
|
+
6. 打开可见的本地 CLI 会话。
|
|
139
117
|
|
|
140
|
-
|
|
118
|
+
没有 daemon 时,`wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 仍按**单活工作区切换器**工作:
|
|
141
119
|
|
|
142
|
-
|
|
120
|
+
- 同一时间只有一个项目与微信对话;
|
|
121
|
+
- 在当前目录重复执行是幂等的;
|
|
122
|
+
- 如果当前目录已经有可见 companion / panel 在运行,则不会重复打开第二个窗口;
|
|
123
|
+
- 如果检测到可见端仍在运行但 worker 状态异常(如 `stopped` / `error`),会自动重启 bridge 再重新打开可见端;
|
|
124
|
+
- 在其他目录执行会显式切换活动工作区。
|
|
143
125
|
|
|
144
|
-
###
|
|
126
|
+
### 6. 常驻 daemon 模式(支持多 CLI 切换)
|
|
145
127
|
|
|
146
|
-
如果你希望微信连接长期保持在线,并在 Codex / Claude Code / OpenCode
|
|
128
|
+
如果你希望微信连接长期保持在线,并在 Codex / Claude Code / OpenCode 之间来回切换,可以在项目目录启动统一 daemon:
|
|
147
129
|
|
|
148
130
|
```bash
|
|
149
131
|
cd D:\work\your-project
|
|
@@ -160,7 +142,9 @@ wechat-daemon
|
|
|
160
142
|
|
|
161
143
|
daemon 启动后,后续切换都可以直接从微信发起;如果对应 CLI 还没有可见窗口,daemon 会自动打开或复用它,不需要再手动运行 `wechat-codex`、`wechat-claude` 或 `wechat-opencode`。
|
|
162
144
|
|
|
163
|
-
|
|
145
|
+

|
|
146
|
+
|
|
147
|
+
当前 daemon 行为如下:
|
|
164
148
|
|
|
165
149
|
- daemon 绑定启动时的工作目录;暂不支持在微信里切换工作目录;
|
|
166
150
|
- 启动时会自动接管并清理旧的单 bridge 进程、失效 lock 和旧 endpoint;
|
|
@@ -168,53 +152,20 @@ daemon 的 v1 行为是:
|
|
|
168
152
|
- 如果对应适配器已经有可见 CLI 在运行,则直接复用;
|
|
169
153
|
- 如果还没有对应 CLI,daemon 会自动打开一个新的可见终端;
|
|
170
154
|
- Codex / Claude / OpenCode 的重要输出都会带上 `[codex]`、`[claude]`、`[opencode]` 标签再发回微信;
|
|
171
|
-
-
|
|
155
|
+
- 可以在微信里发送 `/daemon-stop` 停止 daemon。
|
|
172
156
|
|
|
173
|
-
|
|
157
|
+
也可以在启动时指定初始 CLI:
|
|
174
158
|
|
|
175
159
|
```bash
|
|
176
160
|
wechat-daemon --adapter codex
|
|
177
161
|
wechat-daemon --adapter claude --profile work
|
|
178
162
|
```
|
|
179
163
|
|
|
180
|
-
当同一工作目录已有 `wechat-daemon` 在运行时,`wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 会自动委托给 daemon:请求 daemon 切到对应 CLI
|
|
181
|
-
|
|
182
|
-
### 6. 单命令启动桥接(兼容模式)
|
|
183
|
-
|
|
184
|
-
先进入你要操作的项目目录:
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
cd D:\work\your-project
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
推荐直接选择一个单命令入口:
|
|
191
|
-
|
|
192
|
-
| 使用的本地 CLI | 启动命令 |
|
|
193
|
-
| --- | --- |
|
|
194
|
-
| Codex | `wechat-codex-start` |
|
|
195
|
-
| Claude Code | `wechat-claude-start` |
|
|
196
|
-
| OpenCode | `wechat-opencode-start` |
|
|
197
|
-
|
|
198
|
-
三者会自动完成以下动作:
|
|
164
|
+
当同一工作目录已有 `wechat-daemon` 在运行时,`wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 会自动委托给 daemon:请求 daemon 切到对应 CLI,并在需要时打开可见终端,不会停止 daemon 或关闭其他 CLI。
|
|
199
165
|
|
|
200
|
-
|
|
201
|
-
2. 如果当前目录已有 `wechat-daemon`,则委托 daemon 切换到对应 CLI;
|
|
202
|
-
3. 如果没有 daemon,则复用当前目录已运行的 bridge,或在当前目录启动新的 bridge;
|
|
203
|
-
4. 如果独立 bridge 正在服务其他目录,则停止旧 bridge 并切换到当前目录;
|
|
204
|
-
5. 等待当前目录对应的本地 companion endpoint 就绪;
|
|
205
|
-
6. 打开可见的本地 CLI 会话。
|
|
166
|
+
### 7. 手动双终端模式(高级调试)
|
|
206
167
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
- 同一时间只有一个项目与微信对话;
|
|
210
|
-
- 在当前目录重复执行是幂等的;
|
|
211
|
-
- 如果当前目录已经有可见 companion / panel 在运行,则不会重复打开第二个窗口;
|
|
212
|
-
- 如果检测到可见端仍在但 worker 状态异常(如 `stopped` / `error`),会自动重启 bridge 再重新打开可见端;
|
|
213
|
-
- 在其他目录执行会显式切换活动工作区。
|
|
214
|
-
|
|
215
|
-
### 7. 手动双终端模式(调试开发)
|
|
216
|
-
|
|
217
|
-
如果你希望明确观察 bridge 与本地 CLI companion,也可以分两个终端启动。
|
|
168
|
+
如果你希望明确观察 bridge 与本地 CLI companion,也可以用两个终端分别启动。
|
|
218
169
|
|
|
219
170
|
| 适配器 | 终端 A:bridge | 终端 B:本地 companion |
|
|
220
171
|
| --- | --- | --- |
|
|
@@ -224,56 +175,30 @@ cd D:\work\your-project
|
|
|
224
175
|
|
|
225
176
|
## 适配器支持情况
|
|
226
177
|
|
|
227
|
-
>
|
|
178
|
+
> 目前支持将本地文件发送到微信,微信也允许发送文件给本地 cli 解析 (注意模型本身要具备处理对应文件的能力!)
|
|
228
179
|
|
|
229
180
|

|
|
230
181
|
|
|
231
|
-
|
|
182
|
+
微信发来的图片和普通文件也会被接收并保存到本地:
|
|
232
183
|
|
|
233
|
-
-
|
|
234
|
-
-
|
|
235
|
-
-
|
|
184
|
+
- bridge 会将本地路径追加到转发给 Codex / Claude Code / OpenCode 的 prompt 中,模型可按需读取或解析这些文件;
|
|
185
|
+
- 当前不会自动 OCR 图片,也不会自动抽取 PDF / DOCX 正文;如需解析,由本地 CLI 根据路径完成。
|
|
186
|
+
- 具体保存位置见 [问题排查](docs/troubleshooting.md#数据目录与状态文件)。
|
|
236
187
|
|
|
237
188
|
| 适配器 | 当前状态 | 说明 |
|
|
238
189
|
| --- | --- | --- |
|
|
239
|
-
| `codex` | 已接入 | 双终端模式;本地 companion
|
|
240
|
-
| `claude` | 已接入 | `wechat-bridge-claude` + `wechat-claude` 的双终端 companion
|
|
241
|
-
| `opencode` | 已接入 | `wechat-bridge-opencode` + `wechat-opencode` 的双终端 companion 模式;支持本地 session 切换跟随,微信侧支持 `/new` / `/new-session` |
|
|
242
|
-
| `shell` | 可用 | 持久 `powershell.exe` 会话;高风险命令支持审批 |
|
|
190
|
+
| `codex` | 已接入 | 双终端模式;本地 companion 作为线程权威;微信跟随本地线程 |
|
|
191
|
+
| `claude` | 已接入 | `wechat-bridge-claude` + `wechat-claude` 的双终端 companion 模式;会话切换、最终回复与审批元数据按 Claude session 语义同步 |
|
|
192
|
+
| `opencode` | 已接入 | [`OpenCode`](https://github.com/anomalyco/opencode) 适配器;`wechat-bridge-opencode` + `wechat-opencode` 的双终端 companion 模式;支持本地 session 切换跟随,微信侧支持 `/new` / `/new-session` |
|
|
243
193
|
|
|
244
194
|
### Codex 示例
|
|
245
195
|
|
|
246
|
-
终端 A:
|
|
247
|
-
|
|
248
|
-
```bash
|
|
249
|
-
wechat-bridge-codex
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-

|
|
253
|
-
|
|
254
|
-
终端 B:
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
wechat-codex
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-

|
|
261
|
-
|
|
262
|
-
然后即可:
|
|
263
|
-
|
|
264
|
-
- 在微信中发送普通文本;
|
|
265
|
-
- 在本地 `wechat-codex` 中继续原生交互;
|
|
266
|
-
- 在本地执行 `/resume` 切线程;
|
|
267
|
-
- 让微信自动跟随当前本地线程。
|
|
268
|
-
|
|
269
196
|

|
|
270
197
|
|
|
271
198
|

|
|
272
199
|
|
|
273
200
|
### Claude Code 示例
|
|
274
201
|
|
|
275
|
-
Claude Code 支持通过微信完成远程审批确认。
|
|
276
|
-
|
|
277
202
|

|
|
278
203
|
|
|
279
204
|

|
|
@@ -284,7 +209,7 @@ OpenCode 模式下,微信侧支持 `/new` 或 `/new-session` 创建新 session
|
|
|
284
209
|
|
|
285
210
|
## 命令说明
|
|
286
211
|
|
|
287
|
-
###
|
|
212
|
+
### 常用全局命令
|
|
288
213
|
|
|
289
214
|
| 类型 | 命令 |
|
|
290
215
|
| --- | --- |
|
|
@@ -293,27 +218,6 @@ OpenCode 模式下,微信侧支持 `/new` 或 `/new-session` 创建新 session
|
|
|
293
218
|
| Codex | `wechat-bridge-codex`、`wechat-codex`、`wechat-codex-start` |
|
|
294
219
|
| Claude Code | `wechat-bridge-claude`、`wechat-claude`、`wechat-claude-start` |
|
|
295
220
|
| OpenCode | `wechat-bridge-opencode`、`wechat-opencode`、`wechat-opencode-start` |
|
|
296
|
-
| Shell | `wechat-bridge-shell` |
|
|
297
|
-
|
|
298
|
-
### 仓库内开发入口
|
|
299
|
-
|
|
300
|
-
```bash
|
|
301
|
-
bun run setup
|
|
302
|
-
bun run daemon
|
|
303
|
-
bun run bridge:codex
|
|
304
|
-
bun run codex:panel
|
|
305
|
-
bun run codex:start
|
|
306
|
-
bun run bridge:claude
|
|
307
|
-
bun run claude:companion
|
|
308
|
-
bun run claude:start
|
|
309
|
-
bun run bridge:opencode
|
|
310
|
-
bun run opencode:panel
|
|
311
|
-
bun run opencode:start
|
|
312
|
-
bun run bridge:shell
|
|
313
|
-
bun run bridge:bun -- --adapter codex
|
|
314
|
-
bun run check
|
|
315
|
-
bun run test
|
|
316
|
-
```
|
|
317
221
|
|
|
318
222
|
### Daemon CLI 参数
|
|
319
223
|
|
|
@@ -333,7 +237,7 @@ wechat-daemon --adapter claude --profile work
|
|
|
333
237
|
|
|
334
238
|
- `--cwd <path>`:指定 daemon 绑定的工作目录;
|
|
335
239
|
- `--adapter <codex|claude|opencode>`:启动 daemon 后立即切换到指定 CLI;
|
|
336
|
-
- `--profile <name-or-path>`:传给 daemon
|
|
240
|
+
- `--profile <name-or-path>`:传给 daemon 创建的对应适配器;
|
|
337
241
|
- `--no-open`:只创建 bridge slot,不自动打开可见 CLI。
|
|
338
242
|
|
|
339
243
|
### Bridge CLI 参数
|
|
@@ -344,7 +248,6 @@ wechat-daemon --adapter claude --profile work
|
|
|
344
248
|
- `wechat-bridge-codex`
|
|
345
249
|
- `wechat-bridge-claude`
|
|
346
250
|
- `wechat-bridge-opencode`
|
|
347
|
-
- `wechat-bridge-shell`
|
|
348
251
|
|
|
349
252
|
示例:
|
|
350
253
|
|
|
@@ -353,15 +256,13 @@ wechat-bridge --adapter codex --cwd D:\work\my-project
|
|
|
353
256
|
wechat-bridge-codex --cwd D:\work\my-project
|
|
354
257
|
wechat-bridge-claude --profile work
|
|
355
258
|
wechat-bridge-opencode --cwd D:\work\my-project
|
|
356
|
-
wechat-bridge-shell --cmd pwsh.exe
|
|
357
259
|
wechat-bridge-codex --lifecycle companion_bound
|
|
358
260
|
```
|
|
359
261
|
|
|
360
262
|
支持参数:
|
|
361
263
|
|
|
362
|
-
- `--adapter <codex|claude|opencode
|
|
264
|
+
- `--adapter <codex|claude|opencode>`:通用入口 `wechat-bridge` 需要显式指定适配器;
|
|
363
265
|
- `--cwd <path>`:指定工作目录;
|
|
364
|
-
- `--cmd <executable>`:覆盖默认命令;
|
|
365
266
|
- `--profile <name-or-path>`:向适配器传入 profile;
|
|
366
267
|
- `--lifecycle <persistent|companion_bound>`:指定 bridge 生命周期;`wechat-*-start` 会使用 `companion_bound`。
|
|
367
268
|
|
|
@@ -381,7 +282,7 @@ wechat-opencode-start --cwd D:\work\my-project
|
|
|
381
282
|
- `--profile <name-or-path>`:转发给后台启动的 `wechat-bridge-codex` / `wechat-bridge-claude` / `wechat-bridge-opencode`;
|
|
382
283
|
- `--timeout-ms <ms>`:等待当前目录 endpoint 的最长时间,默认 `15000`。
|
|
383
284
|
|
|
384
|
-
高级用法:除上述启动器参数外,未知参数会继续透传给可见的底层 CLI
|
|
285
|
+
高级用法:除上述启动器参数外,未知参数会继续透传给可见的底层 CLI。这样既能保留微信登录、工作区切换与 bridge 生命周期管理,也能启用 Codex / Claude Code 自己的高级启动模式。
|
|
385
286
|
|
|
386
287
|
```bash
|
|
387
288
|
wechat-codex-start --yolo
|
|
@@ -390,22 +291,22 @@ wechat-claude-start --dangerously-skip-permissions
|
|
|
390
291
|
wechat-claude-start --model sonnet --dangerously-skip-permissions
|
|
391
292
|
```
|
|
392
293
|
|
|
393
|
-
|
|
294
|
+
其中,`--yolo` 会传给 Codex;`--dangerously-skip-permissions` 会传给 Claude Code。它们只影响本地可见 CLI,不会覆盖 bridge 托管的 Codex remote 连接参数、Claude settings、微信登录状态或当前工作区锁。由于这两类参数会降低审批保护,建议只在可信工作区中使用。
|
|
394
295
|
|
|
395
296
|
## 微信侧支持的指令
|
|
396
297
|
|
|
397
298
|
| 指令 | 说明 |
|
|
398
299
|
| --- | --- |
|
|
399
|
-
| 普通文本 |
|
|
300
|
+
| 普通文本 | 发送到当前活动会话 |
|
|
400
301
|
| `/codex` / `/claude` / `/opencode` | daemon 模式下切换活动 CLI;已有 CLI 会复用,没有则自动打开 |
|
|
401
302
|
| `/status` | 查看 bridge 当前状态 |
|
|
402
303
|
| `/stop` | 中断当前任务 |
|
|
403
304
|
| `/reset` | 重建当前本地会话 |
|
|
404
305
|
| `/new` 或 `/new-session` | OpenCode 模式下新建 session |
|
|
405
|
-
| `/confirm` / `/deny` | 处理
|
|
306
|
+
| `/confirm` / `/deny` | 处理 CLI 权限请求;需要一次性 code 的请求会在消息中提示具体确认格式 |
|
|
406
307
|
| `/daemon-stop` | daemon 模式下停止常驻进程 |
|
|
407
308
|
|
|
408
|
-
说明:微信侧 `/resume`
|
|
309
|
+
说明:微信侧 `/resume` 目前暂时保持禁用;需要切换 Codex / Claude / OpenCode 会话时,优先在本地 companion 中使用原生 `/resume`、`/new` 或对应 CLI 命令,微信会跟随本地活动会话。
|
|
409
310
|
|
|
410
311
|
## 工作区模型
|
|
411
312
|
|
|
@@ -413,9 +314,9 @@ wechat-claude-start --model sonnet --dangerously-skip-permissions
|
|
|
413
314
|
|
|
414
315
|
- 从哪个目录启动 `wechat-bridge-codex` / `wechat-bridge-claude` / `wechat-bridge-opencode`,哪个目录就是当前工作区;
|
|
415
316
|
- 对应的本地 companion 必须连接同一工作区;
|
|
416
|
-
-
|
|
317
|
+
- 不同工作区的运行状态相互隔离。
|
|
417
318
|
|
|
418
|
-
|
|
319
|
+
目前支持两种运行模型:
|
|
419
320
|
|
|
420
321
|
- 独立 bridge:单 owner、单 bridge、单活动工作区;
|
|
421
322
|
- `wechat-daemon`:单 owner、单 daemon、绑定一个启动工作区,但可在这个工作区内同时保留 Codex / Claude Code / OpenCode 三个 CLI slot。
|
|
@@ -423,48 +324,9 @@ wechat-claude-start --model sonnet --dangerously-skip-permissions
|
|
|
423
324
|
对 `wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 来说,这意味着:
|
|
424
325
|
|
|
425
326
|
- 如果同一工作区已有 daemon,它们会委托 daemon 切换 CLI;
|
|
426
|
-
- 如果没有 daemon
|
|
327
|
+
- 如果没有 daemon,它们会作为**单活工作区切换器**工作;
|
|
427
328
|
- 当前目录重复执行是幂等的;
|
|
428
|
-
-
|
|
429
|
-
|
|
430
|
-
## 数据目录与状态文件
|
|
431
|
-
|
|
432
|
-
默认数据目录:
|
|
433
|
-
|
|
434
|
-
```text
|
|
435
|
-
~/.cli-bridge
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
主要文件如下:
|
|
439
|
-
|
|
440
|
-
| 路径 | 作用 |
|
|
441
|
-
| --- | --- |
|
|
442
|
-
| `account.json` | 微信凭据 |
|
|
443
|
-
| `sync_buf.txt` | iLink 增量同步游标 |
|
|
444
|
-
| `context_tokens.json` | 微信上下文 token 缓存 |
|
|
445
|
-
| `bridge.log` | bridge 运行日志 |
|
|
446
|
-
| `bridge.lock.json` | bridge 运行锁 |
|
|
447
|
-
| `daemon-endpoint.json` | `wechat-daemon` 本地 IPC endpoint |
|
|
448
|
-
| `inbound-attachments/` | 微信入站图片和普通文件的本地保存目录 |
|
|
449
|
-
| `workspaces/<workspace-key>/bridge-state.json` | 当前工作区状态 |
|
|
450
|
-
| `workspaces/<workspace-key>/codex-panel-endpoint.json` | 当前工作区 companion endpoint;文件名保留历史兼容 |
|
|
451
|
-
| `workspaces/<workspace-key>/<adapter>-companion-endpoint.json` | daemon / 多适配器模式下的适配器独立 companion endpoint |
|
|
452
|
-
|
|
453
|
-
### 环境变量
|
|
454
|
-
|
|
455
|
-
| 变量名 | 说明 |
|
|
456
|
-
| --- | --- |
|
|
457
|
-
| `WECHAT_ILINK_BASE_URL` | 覆盖默认 iLink API 地址 |
|
|
458
|
-
| `CLI_BRIDGE_DATA_DIR` | 覆盖默认数据目录 |
|
|
459
|
-
| `WECHAT_MAX_IMAGE_MB` | 覆盖图片上传大小限制,默认 20 MB |
|
|
460
|
-
| `WECHAT_MAX_FILE_MB` | 覆盖普通文件上传大小限制,默认 50 MB |
|
|
461
|
-
| `WECHAT_MAX_VOICE_MB` | 覆盖语音上传大小限制,默认 20 MB |
|
|
462
|
-
| `WECHAT_MAX_VIDEO_MB` | 覆盖视频上传大小限制,默认 100 MB |
|
|
463
|
-
| `WECHAT_MAX_INBOUND_IMAGE_MB` | 覆盖微信入站图片下载大小限制,默认 20 MB |
|
|
464
|
-
| `WECHAT_MAX_INBOUND_FILE_MB` | 覆盖微信入站普通文件下载大小限制,默认 50 MB |
|
|
465
|
-
| `WECHAT_OPENCODE_DEBUG` | 开启 OpenCode 适配器调试输出 |
|
|
466
|
-
|
|
467
|
-
旧版 `CLAUDE_WECHAT_CHANNEL_DATA_DIR` 不再作为活动数据目录配置项;如旧环境中设置过该变量,它只会被视为一次性旧数据迁移来源。新的自定义目录请使用 `CLI_BRIDGE_DATA_DIR`。
|
|
329
|
+
- 在其他目录执行会触发工作区切换,而不是并行多开。
|
|
468
330
|
|
|
469
331
|
## 版本更新
|
|
470
332
|
|
|
@@ -486,7 +348,7 @@ wechat-check-update
|
|
|
486
348
|
|
|
487
349
|
### 获取最新版本
|
|
488
350
|
|
|
489
|
-
如果你使用 npm
|
|
351
|
+
如果你使用 npm 全局安装,建议直接执行:
|
|
490
352
|
|
|
491
353
|
```bash
|
|
492
354
|
npm install -g cli-wechat-bridge@latest
|
|
@@ -494,147 +356,42 @@ npm install -g cli-wechat-bridge@latest
|
|
|
494
356
|
|
|
495
357
|
升级后请重启正在运行的 bridge 和 companion 终端,确保它们加载同一版本。
|
|
496
358
|
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
```bash
|
|
500
|
-
cd CLI-WeChat-Bridge
|
|
501
|
-
git pull
|
|
502
|
-
bun install
|
|
503
|
-
npm install -g .
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
## 常见问题
|
|
507
|
-
|
|
508
|
-
### 1. `wechat-codex` / `wechat-claude` / `wechat-opencode` 提示找不到 bridge
|
|
509
|
-
|
|
510
|
-
通常原因如下:
|
|
511
|
-
|
|
512
|
-
- 还没有先启动对应的 `wechat-bridge-*`;
|
|
513
|
-
- bridge 与 companion 不在同一个目录;
|
|
514
|
-
- 当前工作区 endpoint 文件不存在或来自旧进程。
|
|
515
|
-
|
|
516
|
-
建议先确认两个终端在同一目录;如果不想手动分两个终端,可以改用对应的 `wechat-codex-start`、`wechat-claude-start` 或 `wechat-opencode-start`。
|
|
517
|
-
|
|
518
|
-
### 2. 全局命令不存在
|
|
519
|
-
|
|
520
|
-
请确认已经执行以下之一:
|
|
521
|
-
|
|
522
|
-
```bash
|
|
523
|
-
npm install -g cli-wechat-bridge@latest
|
|
524
|
-
npm install -g .
|
|
525
|
-
npm link
|
|
526
|
-
```
|
|
527
|
-
|
|
528
|
-
如果命令仍不存在,请检查 npm 全局 bin 目录是否已加入 `PATH`。
|
|
529
|
-
|
|
530
|
-
### 3. Windows 下出现 `codex.ps1` 或 PowerShell profile 警告
|
|
531
|
-
|
|
532
|
-
项目已经尽量规避 `codex.ps1`:
|
|
533
|
-
|
|
534
|
-
- 优先查找 vendor `codex.exe`;
|
|
535
|
-
- 必要时通过 `cmd.exe` 包装 `codex.cmd`。
|
|
536
|
-
|
|
537
|
-
如果本机 PowerShell profile 本身受执行策略限制,终端仍可能打印相关警告。这通常不是 bridge 本身故障。
|
|
538
|
-
|
|
539
|
-
### 4. 微信上提示没有 context token
|
|
540
|
-
|
|
541
|
-
通常表示当前联系人还没有建立可用的 iLink 上下文。一般先由 owner 账号发送一条普通消息即可建立上下文。
|
|
542
|
-
|
|
543
|
-
### 5. `codex is still working...`
|
|
544
|
-
|
|
545
|
-
该提示只应在当前确实存在活动任务时出现。
|
|
546
|
-
|
|
547
|
-
如果偶发出现:
|
|
548
|
-
|
|
549
|
-
1. 先确认本地 `wechat-codex` 是否真的仍在执行任务;
|
|
550
|
-
2. 必要时使用 `/stop`;
|
|
551
|
-
3. 检查:
|
|
552
|
-
|
|
553
|
-
```text
|
|
554
|
-
~/.cli-bridge/bridge.log
|
|
555
|
-
```
|
|
556
|
-
|
|
557
|
-
### 6. 本地 `/resume` 后微信不同步
|
|
558
|
-
|
|
559
|
-
请优先确认:`wechat-bridge-codex` 与 `wechat-codex` 是否都已重启到同一版本。
|
|
560
|
-
|
|
561
|
-
部分设备可能存在第一次本地输入不同步到微信的情况,可以先微信发送指令来建立连接。
|
|
562
|
-
|
|
563
|
-
### 7. `wechat_send_failed` 或 `UND_ERR_CONNECT_TIMEOUT`
|
|
564
|
-
|
|
565
|
-
如果 `bridge-state.json` 看起来正常,但微信仍然没有收到回复,优先检查:
|
|
566
|
-
|
|
567
|
-
```text
|
|
568
|
-
~/.cli-bridge/bridge.log
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
如果日志中出现 `wechat_send_failed`、`UND_ERR_CONNECT_TIMEOUT` 或 `ilinkai.weixin.qq.com:443`,通常是 bridge 到 iLink 的出站网络或代理问题,而不是本地 CLI 没有完成任务。请确认当前终端是否继承 `HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY`,以及 Node 是否需要 `NODE_OPTIONS=--use-env-proxy`。
|
|
572
|
-
|
|
573
|
-
## 已知限制
|
|
574
|
-
|
|
575
|
-
- 微信 `/resume` 暂时被禁用(可能导致对话双向不稳定)
|
|
576
|
-
- Codex 不支持底层任务的远程审批!建议给好权限,正常使用,几乎不会主动请求较为低级的远程审批;Claude Code 支持远程审批,但是测试的不够,如有问题可以提 issue。
|
|
577
|
-
- `wechat-daemon` v1 绑定启动工作区;暂不支持从微信切换到另一个本地目录。
|
|
578
|
-
|
|
579
|
-
## 开发说明
|
|
580
|
-
|
|
581
|
-
### 主要入口
|
|
582
|
-
|
|
583
|
-
| 文件 | 作用 |
|
|
584
|
-
| --- | --- |
|
|
585
|
-
| `src/bridge/wechat-bridge.ts` | bridge 主事件循环 |
|
|
586
|
-
| `src/daemon/wechat-daemon.ts` | 常驻 WeChat daemon 与多 CLI slot 管理 |
|
|
587
|
-
| `src/daemon/daemon-link.ts` | daemon 本地 IPC endpoint 与请求协议 |
|
|
588
|
-
| `src/bridge/bridge-adapters.ts` | `codex` / `claude` / `opencode` / `shell` 适配器入口 |
|
|
589
|
-
| `src/bridge/bridge-adapters.opencode.ts` | OpenCode 适配器实现 |
|
|
590
|
-
| `src/companion/local-companion.ts` | `wechat-claude` / `wechat-opencode` 本地 companion 入口 |
|
|
591
|
-
| `src/companion/codex-remote-client.ts` | `wechat-codex` 本地客户端入口 |
|
|
592
|
-
| `src/companion/local-companion-start.ts` | `wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 单命令启动入口 |
|
|
593
|
-
| `src/wechat/wechat-transport.ts` | iLink 消息收发 |
|
|
594
|
-
| `src/bridge/bridge-state.ts` | bridge 状态、锁与日志 |
|
|
595
|
-
| `src/wechat/setup.ts` | 登录与凭据初始化 |
|
|
596
|
-
|
|
597
|
-
### 测试
|
|
598
|
-
|
|
599
|
-
```bash
|
|
600
|
-
bun test
|
|
601
|
-
```
|
|
602
|
-
|
|
603
|
-
也可以按目录运行:
|
|
359
|
+
## 致谢
|
|
604
360
|
|
|
605
|
-
|
|
606
|
-
bun run test:bridge
|
|
607
|
-
bun run test:companion
|
|
608
|
-
bun run test:wechat
|
|
609
|
-
```
|
|
361
|
+
### 感谢支持
|
|
610
362
|
|
|
611
|
-
|
|
363
|
+
> 感谢 issue 反馈者和 PR 贡献者。
|
|
612
364
|
|
|
613
|
-
|
|
614
|
-
- Codex 线程跟随
|
|
615
|
-
- session log fallback
|
|
616
|
-
- panel / busy / completion recovery
|
|
617
|
-
- 工作区路径与状态隔离
|
|
365
|
+
创作不易,如果觉得它有帮助或有意思,可以请喝杯奶茶。❤️
|
|
618
366
|
|
|
619
|
-
|
|
367
|
+
<p align='center'><img src='docs/images/wechat-tip.png' width=60%></p>
|
|
620
368
|
|
|
621
369
|
### 相关链接
|
|
622
370
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
- [@
|
|
371
|
+
主要依赖:
|
|
372
|
+
|
|
373
|
+
- [@opencode-ai/sdk](https://www.npmjs.com/package/@opencode-ai/sdk):OpenCode session 和事件流客户端
|
|
374
|
+
- [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk):MCP server 入口使用的 TypeScript SDK
|
|
626
375
|
- [node-pty](https://github.com/microsoft/node-pty):本地 PTY / ConPTY 进程桥接
|
|
627
|
-
- [@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript):Anthropic TypeScript SDK
|
|
628
376
|
- [qrcode-terminal](https://github.com/gtanner/qrcode-terminal):终端二维码输出
|
|
629
377
|
|
|
630
|
-
|
|
378
|
+
运行与开发基础:
|
|
631
379
|
|
|
632
|
-
|
|
380
|
+
- [Node.js](https://nodejs.org/):运行发布包和 CLI 入口
|
|
381
|
+
- [TypeScript](https://www.typescriptlang.org/):源码语言和构建工具链
|
|
382
|
+
- [Bun](https://bun.sh/):源码模式运行与测试工具
|
|
383
|
+
- [ESLint](https://eslint.org/):代码检查
|
|
633
384
|
|
|
634
|
-
|
|
385
|
+
社区与参考:
|
|
635
386
|
|
|
636
|
-
|
|
387
|
+
- [Linux DO](https://linux.do/):学 AI,上 L 站!
|
|
388
|
+
- [@tencent-weixin/openclaw-weixin](https://www.npmjs.com/package/@tencent-weixin/openclaw-weixin):腾讯微信团队发布的 OpenClaw Weixin channel npm 包
|
|
389
|
+
- [openclaw-weixin](https://github.com/hao-ji-xing/openclaw-weixin):早期 WeChat / Claude Code Channel 参考项目。
|
|
637
390
|
|
|
638
391
|
## License
|
|
639
392
|
|
|
640
393
|
[MIT](LICENSE.txt)
|
|
394
|
+
|
|
395
|
+
<p align="center">
|
|
396
|
+
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=UNLINEARITY/CLI-WeChat-Bridge&type=timeline&legend=top-left">
|
|
397
|
+
</p>
|