@unlinearity/cli-wechat-bridge 1.0.3 → 1.0.4
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 +221 -223
- package/dist/bridge/bridge-adapter-common.js +95 -0
- package/dist/bridge/bridge-adapters.claude.js +1 -1
- package/dist/bridge/bridge-adapters.codex.js +18 -3
- package/dist/bridge/bridge-adapters.core.js +5 -1
- package/dist/bridge/bridge-adapters.opencode.js +220 -22
- package/dist/bridge/bridge-adapters.shared.js +4 -97
- package/dist/bridge/bridge-final-reply.js +18 -3
- package/dist/bridge/bridge-state.js +9 -3
- package/dist/bridge/bridge-utils.js +38 -7
- package/dist/bridge/claude-hooks.js +2 -2
- package/dist/bridge/wechat-bridge.js +97 -27
- package/dist/companion/codex-remote-client.js +3 -0
- package/dist/companion/local-companion-start.js +6 -1
- package/dist/companion/local-companion.js +3 -0
- package/dist/utils/version-checker.js +1 -1
- package/dist/wechat/wechat-transport.js +46 -2
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -1,66 +1,62 @@
|
|
|
1
|
-
# CLI WeChat Bridge
|
|
1
|
+
# CLI WeChat Bridge
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align='center'><img src='docs/images/logo.png' width=90%></p>
|
|
4
|
+
|
|
5
|
+
**命令行工具的微信桥接**:本项目用于桥接微信消息与本地运行的 [`Codex`](https://github.com/openai/codex)、[`Claude Code`](https://code.claude.com/docs/en/overview)、`OpenCode` 或持久化 `powershell.exe` 会话,并将本地输出、审批请求与运行状态同步回微信。
|
|
4
6
|
|
|
5
7
|
当前实现以本地工作流为中心展开,重点是保留本地原生终端体验,并在此基础上提供微信侧的远程输入、结果回流与状态同步能力。
|
|
6
8
|
|
|
9
|
+
<p align='center'><img src='docs/images/animation.webp' width=90%></p>
|
|
10
|
+
|
|
7
11
|
## 这个项目解决什么问题
|
|
8
12
|
|
|
9
13
|
本项目面向这样一类使用场景:
|
|
10
14
|
|
|
11
|
-
-
|
|
12
|
-
- 你希望继续使用原生 `codex` 或其他 CLI
|
|
13
|
-
-
|
|
15
|
+
- 你的主工作流仍在本地终端中进行;
|
|
16
|
+
- 你希望继续使用原生 `codex` 或其他 CLI 工具,而不是迁移到网页或托管机器人;
|
|
17
|
+
- 你希望在离开电脑时,仍能通过微信向本地会话发送请求,并接收必要的输出、与状态同步。
|
|
14
18
|
|
|
15
19
|
当前项目并不试图把微信变成新的主工作界面。相反,它的定位是:
|
|
16
20
|
|
|
17
|
-
- 本地 CLI
|
|
18
|
-
-
|
|
19
|
-
-
|
|
21
|
+
- 本地 CLI 仍然是主工作界面,并保持原生的使用逻辑;
|
|
22
|
+
- 微信是远程入口,允许远程接入;
|
|
23
|
+
- 会话一致性、线程状态和审批流仍以**本地会话为中心**。
|
|
20
24
|
|
|
21
25
|
## 快速开始
|
|
22
26
|
|
|
23
|
-
### 环境要求
|
|
27
|
+
### 1. 环境要求
|
|
24
28
|
|
|
25
29
|
- Windows 为当前主要验证环境
|
|
26
30
|
- [Node.js](https://nodejs.org/en/download) `>= 24.0.0`(建议直接安装官网 LTS 版本)
|
|
27
31
|
- [Bun](https://bun.sh/docs/installation) `>= 1.0.0`
|
|
28
32
|
- 已安装以下至少一种本地 CLI:(最好更新至最新版本)
|
|
29
|
-
- [Codex](https://github.com/openai/codex)
|
|
33
|
+
- [Codex](https://github.com/openai/codex)
|
|
30
34
|
- [Claude Code](https://code.claude.com/docs/en/overview)
|
|
35
|
+
- OpenCode
|
|
31
36
|
- powershell.exe
|
|
32
37
|
|
|
38
|
+
### 2. 安装
|
|
39
|
+
|
|
40
|
+
正式版本可以直接从 npm 安装:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install -g @unlinearity/cli-wechat-bridge@latest
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
安装后可在任意项目目录中直接使用 `wechat-codex-start`、`wechat-claude-start`、`wechat-opencode-start` 等命令。
|
|
33
47
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
安装后可在任意项目目录中直接使用 `wechat-codex-start`、`wechat-claude-start`、`wechat-opencode-start` 等命令。
|
|
43
|
-
|
|
44
|
-
如果你希望从源码运行或参与开发,也可以克隆仓库并安装依赖:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
git clone https://github.com/UNLINEARITY/CLI-WeChat-Bridge
|
|
48
|
-
cd CLI-WeChat-Bridge
|
|
49
|
-
bun install
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 2. 源码安装全局命令
|
|
53
|
-
|
|
54
|
-
如果使用源码仓库,希望将当前工作区安装为全局命令:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
npm install -g . #将命令下载到全局
|
|
48
|
+
如果你希望从源码运行或参与开发,也可以克隆仓库并安装依赖:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git clone https://github.com/UNLINEARITY/CLI-WeChat-Bridge
|
|
52
|
+
cd CLI-WeChat-Bridge
|
|
53
|
+
bun install
|
|
58
54
|
```
|
|
59
55
|
|
|
60
|
-
|
|
56
|
+
如果使用源码仓库,希望将当前工作区安装为全局命令:
|
|
61
57
|
|
|
62
58
|
```bash
|
|
63
|
-
npm install -g .
|
|
59
|
+
npm install -g .
|
|
64
60
|
```
|
|
65
61
|
|
|
66
62
|
开发阶段也可以使用:
|
|
@@ -71,12 +67,35 @@ npm link
|
|
|
71
67
|
|
|
72
68
|
说明:
|
|
73
69
|
|
|
74
|
-
- `npm link`
|
|
75
|
-
- `npm install -g .`
|
|
70
|
+
- `npm link` 会让全局命令直接指向当前仓库源码;
|
|
71
|
+
- `npm install -g .` 会安装一份当前仓库的复制版本;后续代码更新后需要重新执行一次。
|
|
72
|
+
|
|
73
|
+
如果你想把当前本地源码构建出的包安装到真实全局环境,并在任意目录人工验证,可以直接运行:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run smoke:global
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
这个脚本会先用当前源码打出真实 npm tarball,再执行 `npm install -g <tarball>` 安装到真实全局环境;脚本结束后,你可以离开仓库目录运行 `wechat-codex-start` 等命令。如果你想先清理缓存、卸载当前全局包,或者顺便跑完整质量门禁,可以加上这些参数:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm run smoke:global -- --purge-global --clean-cache --full
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- `--clean-cache`:先执行 `npm cache clean --force`
|
|
86
|
+
- `--purge-global`:先卸载当前真实全局包
|
|
87
|
+
- `--full`:额外执行 `npm run quality`
|
|
88
|
+
- `--keep-tarball`:保留生成的 tarball,方便排查
|
|
76
89
|
|
|
77
90
|
### 3. 完成微信登录
|
|
78
91
|
|
|
79
|
-
|
|
92
|
+
npm 全局安装后可以直接运行:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
wechat-setup
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
如果是在 clone 的仓库目录下,也可以运行:
|
|
80
99
|
|
|
81
100
|
```bash
|
|
82
101
|
bun run setup # 绑定微信 ClawBot
|
|
@@ -84,10 +103,10 @@ bun run setup # 绑定微信 ClawBot
|
|
|
84
103
|
|
|
85
104
|
该流程会:
|
|
86
105
|
|
|
87
|
-
1.
|
|
88
|
-
2.
|
|
89
|
-
3.
|
|
90
|
-
4. 将 bot
|
|
106
|
+
1. 获取微信登录二维码;
|
|
107
|
+
2. 在终端打印二维码;
|
|
108
|
+
3. 等待你在微信中扫码并确认;
|
|
109
|
+
4. 将 bot 凭据写入本地数据目录。
|
|
91
110
|
|
|
92
111
|

|
|
93
112
|
|
|
@@ -97,119 +116,117 @@ bun run setup # 绑定微信 ClawBot
|
|
|
97
116
|
~/.claude/channels/wechat/account.json
|
|
98
117
|
```
|
|
99
118
|
|
|
100
|
-
|
|
119
|
+
登录成功后会清理旧的 `sync_buf.txt` 和 `context_tokens.json`,避免旧会话状态污染新的登录状态。
|
|
101
120
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
cd D:\work\your-project
|
|
106
|
-
```
|
|
107
|
-
> 当你下载到全局`npm install -g .`后,可以在任意的路径运行桥接!
|
|
121
|
+
如果是首次安装或微信登录已过期,`wechat-codex-start`、`wechat-claude-start`、`wechat-opencode-start` 也会在前台提示扫码登录。
|
|
108
122
|
|
|
123
|
+
### 4. 单命令启动桥接(优先推荐)
|
|
109
124
|
|
|
110
|
-
|
|
125
|
+
先进入你要操作的项目目录:
|
|
111
126
|
|
|
112
127
|
```bash
|
|
113
|
-
|
|
128
|
+
cd D:\work\your-project
|
|
114
129
|
```
|
|
115
|
-

|
|
116
130
|
|
|
117
|
-
|
|
131
|
+
推荐直接选择一个单命令入口:
|
|
118
132
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
133
|
+
| 使用的本地 CLI | 启动命令 |
|
|
134
|
+
| --- | --- |
|
|
135
|
+
| Codex | `wechat-codex-start` |
|
|
136
|
+
| Claude Code | `wechat-claude-start` |
|
|
137
|
+
| OpenCode | `wechat-opencode-start` |
|
|
122
138
|
|
|
123
|
-
|
|
139
|
+
三者会自动完成以下动作:
|
|
124
140
|
|
|
125
|
-
|
|
141
|
+
1. 校验或刷新微信登录凭据;
|
|
142
|
+
2. 复用当前目录已运行的 bridge,或在当前目录启动新的 bridge;
|
|
143
|
+
3. 如果 bridge 正在服务其他目录,则停止旧 bridge 并切换到当前目录;
|
|
144
|
+
4. 等待当前目录对应的本地 companion endpoint 就绪;
|
|
145
|
+
5. 打开可见的本地 CLI 会话。
|
|
126
146
|
|
|
127
|
-
-
|
|
128
|
-
- 在本地 `wechat-codex` 中继续原生交互
|
|
129
|
-
- 在本地执行 `/resume` 切线程
|
|
130
|
-
- 让微信自动跟随当前本地线程
|
|
147
|
+
`wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 现在按**单活工作区切换器**工作:
|
|
131
148
|
|
|
132
|
-
|
|
149
|
+
- 同一时间只有一个项目与微信对话;
|
|
150
|
+
- 在当前目录重复执行是幂等的;
|
|
151
|
+
- 如果当前目录已经有可见 companion / panel 在运行,则不会重复打开第二个窗口;
|
|
152
|
+
- 如果检测到可见端仍在但 worker 状态异常(如 `stopped` / `error`),会自动重启 bridge 再重新打开可见端;
|
|
153
|
+
- 在其他目录执行会显式切换活动工作区。
|
|
133
154
|
|
|
134
|
-
|
|
155
|
+
### 5. 手动双终端模式(调试开发)
|
|
135
156
|
|
|
136
|
-
|
|
157
|
+
如果你希望明确观察 bridge 与本地 CLI companion,也可以分两个终端启动。
|
|
137
158
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
159
|
+
| 适配器 | 终端 A:bridge | 终端 B:本地 companion |
|
|
160
|
+
| --- | --- | --- |
|
|
161
|
+
| Codex | `wechat-bridge-codex` | `wechat-codex` |
|
|
162
|
+
| Claude Code | `wechat-bridge-claude` | `wechat-claude` |
|
|
163
|
+
| OpenCode | `wechat-bridge-opencode` | `wechat-opencode` |
|
|
141
164
|
|
|
142
|
-
|
|
165
|
+
## 适配器支持情况
|
|
143
166
|
|
|
144
|
-
|
|
145
|
-
2. 如果 bridge 正在服务其他目录,则停止旧 bridge 并切换到当前目录
|
|
146
|
-
3. 等待当前目录对应的本地 companion endpoint 就绪
|
|
147
|
-
4. 打开可见的 `wechat-codex` 会话
|
|
148
|
-
|
|
149
|
-
`wechat-codex-start` 现在按**单活工作区切换器**工作:
|
|
150
|
-
|
|
151
|
-
- 同一时间只有一个项目与微信对话
|
|
152
|
-
- 在当前目录重复执行是幂等的
|
|
153
|
-
- 如果当前目录已经有可见 companion / panel 在运行,则不会重复打开第二个窗口
|
|
154
|
-
- 如果检测到可见端仍在但 worker 状态异常(如 `stopped` / `error`),会自动重启 bridge 再重新打开可见端
|
|
155
|
-
- 在其他目录执行会显式切换活动工作区
|
|
156
|
-
|
|
157
|
-
### 5. 启动 Claude Code (不走Channels)
|
|
167
|
+
> 目前支持将本地文件传输至微信
|
|
158
168
|
|
|
159
|
-
|
|
169
|
+

|
|
160
170
|
|
|
161
|
-
|
|
171
|
+
| 适配器 | 当前状态 | 说明 |
|
|
172
|
+
| --- | --- | --- |
|
|
173
|
+
| `codex` | 已接入 | 双终端模式;本地 companion 为线程权威;微信跟随本地线程 |
|
|
174
|
+
| `claude` | 已接入 | `wechat-bridge-claude` + `wechat-claude` 的双终端 companion 模式;会话切换、最终回复与审批元数据已按 Claude session 语义同步 |
|
|
175
|
+
| `opencode` | 已接入 | `wechat-bridge-opencode` + `wechat-opencode` 的双终端 companion 模式;支持本地 session 切换跟随,微信侧支持 `/new` / `/new-session` |
|
|
176
|
+
| `shell` | 可用 | 持久 `powershell.exe` 会话;高风险命令支持审批 |
|
|
162
177
|
|
|
163
|
-
|
|
164
|
-
wechat-bridge-claude
|
|
165
|
-
```
|
|
178
|
+
### Codex 示例
|
|
166
179
|
|
|
167
|
-
终端
|
|
180
|
+
终端 A:
|
|
168
181
|
|
|
169
182
|
```bash
|
|
170
|
-
wechat-
|
|
183
|
+
wechat-bridge-codex
|
|
171
184
|
```
|
|
172
185
|
|
|
173
|
-
|
|
186
|
+

|
|
187
|
+
|
|
188
|
+
终端 B:
|
|
174
189
|
|
|
175
190
|
```bash
|
|
176
|
-
wechat-
|
|
191
|
+
wechat-codex
|
|
177
192
|
```
|
|
178
193
|
|
|
179
|
-
|
|
194
|
+

|
|
180
195
|
|
|
181
|
-
|
|
196
|
+
然后即可:
|
|
182
197
|
|
|
183
|
-
|
|
198
|
+
- 在微信中发送普通文本;
|
|
199
|
+
- 在本地 `wechat-codex` 中继续原生交互;
|
|
200
|
+
- 在本地执行 `/resume` 切线程;
|
|
201
|
+
- 让微信自动跟随当前本地线程。
|
|
184
202
|
|
|
203
|
+

|
|
185
204
|
|
|
186
|
-
|
|
205
|
+

|
|
187
206
|
|
|
188
|
-
|
|
207
|
+
### Claude Code 示例
|
|
189
208
|
|
|
190
|
-
|
|
209
|
+
Claude Code 支持通过微信完成远程审批确认。
|
|
191
210
|
|
|
211
|
+

|
|
192
212
|
|
|
193
|
-
|
|
194
|
-
| --- | --- | --- |
|
|
195
|
-
| `codex` | 已接入 | 双终端模式;本地 panel 为线程权威;微信跟随本地线程 |
|
|
196
|
-
| `claude` | 已接入 | 当前采用 `wechat-bridge-claude` + `wechat-claude` 的双终端 companion 模式;会话切换、最终回复与审批元数据已按 Claude session 语义同步 |
|
|
197
|
-
| `shell` | 可用 | 持久 `powershell.exe` 会话;高风险命令支持审批 |
|
|
213
|
+

|
|
198
214
|
|
|
215
|
+
### OpenCode 示例
|
|
216
|
+
|
|
217
|
+
OpenCode 模式下,微信侧支持 `/new` 或 `/new-session` 创建新 session;如果在本地 OpenCode CLI 中创建新 session,微信消息也会跟随新的 session。
|
|
199
218
|
|
|
200
219
|
## 命令说明
|
|
201
220
|
|
|
202
221
|
### 推荐全局命令
|
|
203
222
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
wechat-codex-start
|
|
208
|
-
wechat-bridge-claude
|
|
209
|
-
|
|
210
|
-
wechat-
|
|
211
|
-
wechat-bridge-shell # 终端桥接,headless 进程
|
|
212
|
-
```
|
|
223
|
+
| 类型 | 命令 |
|
|
224
|
+
| --- | --- |
|
|
225
|
+
| 登录与更新 | `wechat-setup`、`wechat-check-update` |
|
|
226
|
+
| Codex | `wechat-bridge-codex`、`wechat-codex`、`wechat-codex-start` |
|
|
227
|
+
| Claude Code | `wechat-bridge-claude`、`wechat-claude`、`wechat-claude-start` |
|
|
228
|
+
| OpenCode | `wechat-bridge-opencode`、`wechat-opencode`、`wechat-opencode-start` |
|
|
229
|
+
| Shell | `wechat-bridge-shell` |
|
|
213
230
|
|
|
214
231
|
### 仓库内开发入口
|
|
215
232
|
|
|
@@ -221,8 +238,12 @@ bun run codex:start
|
|
|
221
238
|
bun run bridge:claude
|
|
222
239
|
bun run claude:companion
|
|
223
240
|
bun run claude:start
|
|
241
|
+
bun run bridge:opencode
|
|
242
|
+
bun run opencode:panel
|
|
243
|
+
bun run opencode:start
|
|
224
244
|
bun run bridge:shell
|
|
225
245
|
bun run bridge:bun -- --adapter codex
|
|
246
|
+
bun run check
|
|
226
247
|
bun run test
|
|
227
248
|
```
|
|
228
249
|
|
|
@@ -230,60 +251,46 @@ bun run test
|
|
|
230
251
|
|
|
231
252
|
适用于:
|
|
232
253
|
|
|
254
|
+
- `wechat-bridge`
|
|
233
255
|
- `wechat-bridge-codex`
|
|
234
256
|
- `wechat-bridge-claude`
|
|
257
|
+
- `wechat-bridge-opencode`
|
|
235
258
|
- `wechat-bridge-shell`
|
|
236
259
|
|
|
237
260
|
示例:
|
|
238
261
|
|
|
239
262
|
```bash
|
|
263
|
+
wechat-bridge --adapter codex --cwd D:\work\my-project
|
|
240
264
|
wechat-bridge-codex --cwd D:\work\my-project
|
|
241
265
|
wechat-bridge-claude --profile work
|
|
266
|
+
wechat-bridge-opencode --cwd D:\work\my-project
|
|
242
267
|
wechat-bridge-shell --cmd pwsh.exe
|
|
268
|
+
wechat-bridge-codex --lifecycle companion_bound
|
|
243
269
|
```
|
|
244
270
|
|
|
245
271
|
支持参数:
|
|
246
272
|
|
|
247
|
-
- `--
|
|
248
|
-
- `--
|
|
249
|
-
- `--
|
|
273
|
+
- `--adapter <codex|claude|opencode|shell>`:通用入口 `wechat-bridge` 需要显式指定适配器;
|
|
274
|
+
- `--cwd <path>`:指定工作目录;
|
|
275
|
+
- `--cmd <executable>`:覆盖默认命令;
|
|
276
|
+
- `--profile <name-or-path>`:向适配器传入 profile;
|
|
277
|
+
- `--lifecycle <persistent|companion_bound>`:指定 bridge 生命周期;`wechat-*-start` 会使用 `companion_bound`。
|
|
250
278
|
|
|
251
|
-
### `wechat
|
|
279
|
+
### `wechat-*-start` 参数
|
|
252
280
|
|
|
253
281
|
示例:
|
|
254
282
|
|
|
255
283
|
```bash
|
|
256
284
|
wechat-codex-start --cwd D:\work\my-project
|
|
257
|
-
wechat-codex-start --profile work
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
支持参数:
|
|
261
|
-
|
|
262
|
-
- `--cwd <path>`:显式指定 bridge / companion 对应的工作目录
|
|
263
|
-
- `--profile <name-or-path>`:转发给后台启动的 `wechat-bridge-codex`
|
|
264
|
-
- `--timeout-ms <ms>`:等待当前目录 endpoint 的最长时间,默认 `15000`
|
|
265
|
-
|
|
266
|
-
行为说明:
|
|
267
|
-
|
|
268
|
-
- 同目录重复执行:复用当前目录 bridge;如果可见 companion / panel 已经在线,则只提示当前工作区已激活,不会重复打开第二个窗口
|
|
269
|
-
- 同目录检测到可见端仍在但 worker 状态异常(如 `stopped` / `error`)时:会自动回收旧 bridge 并重新启动
|
|
270
|
-
- 不同目录执行:会停止旧目录的临时 bridge,并切换到新的活动工作区
|
|
271
|
-
- 关闭可见 companion / panel 后,后台 `companion_bound` bridge 会一起退出;异常断开时会保留短暂重连窗口
|
|
272
|
-
|
|
273
|
-
### `wechat-claude-start` 参数
|
|
274
|
-
|
|
275
|
-
示例:
|
|
276
|
-
|
|
277
|
-
```bash
|
|
278
|
-
wechat-claude-start --cwd D:\work\my-project
|
|
279
285
|
wechat-claude-start --profile work
|
|
286
|
+
wechat-opencode-start --cwd D:\work\my-project
|
|
280
287
|
```
|
|
281
288
|
|
|
282
289
|
支持参数:
|
|
283
290
|
|
|
284
|
-
- `--cwd <path>`:显式指定 bridge / companion
|
|
285
|
-
- `--profile <name-or-path>`:转发给后台启动的 `wechat-bridge-claude`
|
|
286
|
-
- `--timeout-ms <ms>`:等待当前目录 endpoint 的最长时间,默认 `15000
|
|
291
|
+
- `--cwd <path>`:显式指定 bridge / companion 对应的工作目录;
|
|
292
|
+
- `--profile <name-or-path>`:转发给后台启动的 `wechat-bridge-codex` / `wechat-bridge-claude` / `wechat-bridge-opencode`;
|
|
293
|
+
- `--timeout-ms <ms>`:等待当前目录 endpoint 的最长时间,默认 `15000`。
|
|
287
294
|
|
|
288
295
|
## 微信侧支持的指令
|
|
289
296
|
|
|
@@ -293,28 +300,32 @@ wechat-claude-start --profile work
|
|
|
293
300
|
| `/status` | 查看 bridge 当前状态 |
|
|
294
301
|
| `/stop` | 中断当前任务 |
|
|
295
302
|
| `/reset` | 重建当前本地会话 |
|
|
303
|
+
| `/new` 或 `/new-session` | OpenCode 模式下新建 session |
|
|
304
|
+
| `/confirm` / `/deny` | 处理 Claude Code 权限请求;shell 等需要一次性 code 的请求会在消息中提示具体确认格式 |
|
|
305
|
+
|
|
306
|
+
说明:微信侧 `/resume` 目前仍保持禁用;需要切换 Codex / Claude / OpenCode 会话时,优先在本地 companion 中使用原生 `/resume`、`/new` 或对应 CLI 命令,微信会跟随本地活动会话。
|
|
296
307
|
|
|
297
308
|
## 工作区模型
|
|
298
309
|
|
|
299
310
|
本项目采用“当前目录即当前工作区”的模型:
|
|
300
311
|
|
|
301
|
-
- 从哪个目录启动 `wechat-bridge-codex
|
|
302
|
-
-
|
|
303
|
-
-
|
|
312
|
+
- 从哪个目录启动 `wechat-bridge-codex` / `wechat-bridge-claude` / `wechat-bridge-opencode`,哪个目录就是当前工作区;
|
|
313
|
+
- 对应的本地 companion 必须连接同一工作区;
|
|
314
|
+
- 不同工作区的状态文件相互隔离。
|
|
304
315
|
|
|
305
316
|
当前不是“一个全局守护进程同时管理多个仓库”的架构,而是:
|
|
306
317
|
|
|
307
|
-
- 单 owner
|
|
308
|
-
- 单 bridge
|
|
309
|
-
- 单活动工作区
|
|
310
|
-
|
|
311
|
-
对 `wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 来说,这意味着:
|
|
312
|
-
|
|
313
|
-
-
|
|
314
|
-
-
|
|
315
|
-
-
|
|
316
|
-
|
|
317
|
-
## 数据目录与状态文件
|
|
318
|
+
- 单 owner
|
|
319
|
+
- 单 bridge
|
|
320
|
+
- 单活动工作区
|
|
321
|
+
|
|
322
|
+
对 `wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 来说,这意味着:
|
|
323
|
+
|
|
324
|
+
- 它们是**单活工作区切换器**;
|
|
325
|
+
- 当前目录重复执行是幂等的;
|
|
326
|
+
- 其他目录重复执行会触发工作区切换,而不是并行多开。
|
|
327
|
+
|
|
328
|
+
## 数据目录与状态文件
|
|
318
329
|
|
|
319
330
|
默认数据目录:
|
|
320
331
|
|
|
@@ -332,7 +343,7 @@ wechat-claude-start --profile work
|
|
|
332
343
|
| `bridge.log` | bridge 运行日志 |
|
|
333
344
|
| `bridge.lock.json` | bridge 运行锁 |
|
|
334
345
|
| `workspaces/<workspace-key>/bridge-state.json` | 当前工作区状态 |
|
|
335
|
-
| `workspaces/<workspace-key>/codex-panel-endpoint.json` | 当前工作区
|
|
346
|
+
| `workspaces/<workspace-key>/codex-panel-endpoint.json` | 当前工作区 companion endpoint;文件名保留历史兼容 |
|
|
336
347
|
|
|
337
348
|
### 环境变量
|
|
338
349
|
|
|
@@ -340,6 +351,11 @@ wechat-claude-start --profile work
|
|
|
340
351
|
| --- | --- |
|
|
341
352
|
| `WECHAT_ILINK_BASE_URL` | 覆盖默认 iLink API 地址 |
|
|
342
353
|
| `CLAUDE_WECHAT_CHANNEL_DATA_DIR` | 覆盖默认数据目录 |
|
|
354
|
+
| `WECHAT_MAX_IMAGE_MB` | 覆盖图片上传大小限制,默认 20 MB |
|
|
355
|
+
| `WECHAT_MAX_FILE_MB` | 覆盖普通文件上传大小限制,默认 50 MB |
|
|
356
|
+
| `WECHAT_MAX_VOICE_MB` | 覆盖语音上传大小限制,默认 20 MB |
|
|
357
|
+
| `WECHAT_MAX_VIDEO_MB` | 覆盖视频上传大小限制,默认 100 MB |
|
|
358
|
+
| `WECHAT_OPENCODE_DEBUG` | 开启 OpenCode 适配器调试输出 |
|
|
343
359
|
|
|
344
360
|
## 版本更新
|
|
345
361
|
|
|
@@ -352,82 +368,51 @@ wechat-check-update
|
|
|
352
368
|
```
|
|
353
369
|
|
|
354
370
|
该命令会显示:
|
|
355
|
-
- 当前安装的版本
|
|
356
|
-
- 远程仓库的最新版本
|
|
357
|
-
- 如果有更新,会提供详细的更新指引
|
|
358
371
|
|
|
359
|
-
|
|
372
|
+
- 当前安装的版本;
|
|
373
|
+
- 远程仓库的最新版本;
|
|
374
|
+
- 如果有更新,会提供详细的更新指引。
|
|
360
375
|
|
|
361
|
-
当启动 `wechat-bridge` 相关命令时(如 `wechat-bridge-codex`、`wechat-bridge-claude
|
|
376
|
+
当启动 `wechat-bridge` 相关命令时(如 `wechat-bridge-codex`、`wechat-bridge-claude`),程序也会自动检查更新(每 24 小时一次)。自动检查在后台异步执行,不影响启动速度。
|
|
362
377
|
|
|
363
|
-
|
|
364
|
-
- 检查结果会被缓存,避免频繁查询
|
|
365
|
-
- 如果发现新版本,会在终端显示更新提示
|
|
378
|
+
### 获取最新版本
|
|
366
379
|
|
|
367
|
-
|
|
380
|
+
如果你使用 npm 全局安装,当前推荐直接执行:
|
|
368
381
|
|
|
369
|
-
|
|
370
|
-
-
|
|
371
|
-
|
|
382
|
+
```bash
|
|
383
|
+
npm install -g @unlinearity/cli-wechat-bridge@latest
|
|
384
|
+
```
|
|
372
385
|
|
|
373
|
-
|
|
386
|
+
升级后请重启正在运行的 bridge 和 companion 终端,确保它们加载同一版本。
|
|
374
387
|
|
|
375
|
-
|
|
388
|
+
如果你使用源码仓库,可以使用以下命令更新:
|
|
376
389
|
|
|
377
390
|
```bash
|
|
378
|
-
# 进入项目目录
|
|
379
391
|
cd CLI-WeChat-Bridge
|
|
380
|
-
|
|
381
|
-
# 拉取最新代码
|
|
382
392
|
git pull
|
|
383
|
-
|
|
384
|
-
# 安装依赖
|
|
385
393
|
bun install
|
|
386
|
-
|
|
387
|
-
# 重新安装全局命令
|
|
388
394
|
npm install -g .
|
|
389
395
|
```
|
|
390
396
|
|
|
391
|
-
### 未来计划(还未发布)
|
|
392
|
-
|
|
393
|
-
当项目达到 **1.0.0** 稳定版本后,将发布到 npm,届时可以使用更简便的更新方式:
|
|
394
|
-
|
|
395
|
-
```bash
|
|
396
|
-
npm install -g @unlinearity/cli-wechat-bridge@latest
|
|
397
|
-
```
|
|
398
|
-
|
|
399
397
|
## 常见问题
|
|
400
398
|
|
|
401
|
-
### 1. `wechat-codex` 提示找不到 bridge
|
|
399
|
+
### 1. `wechat-codex` / `wechat-claude` / `wechat-opencode` 提示找不到 bridge
|
|
402
400
|
|
|
403
401
|
通常原因如下:
|
|
404
402
|
|
|
405
|
-
-
|
|
406
|
-
- bridge 与
|
|
407
|
-
- 当前工作区 endpoint
|
|
408
|
-
|
|
409
|
-
建议:
|
|
410
|
-
|
|
411
|
-
1. 先在目标目录启动 `wechat-bridge-codex`
|
|
412
|
-
2. 再在同一目录启动 `wechat-codex`
|
|
403
|
+
- 还没有先启动对应的 `wechat-bridge-*`;
|
|
404
|
+
- bridge 与 companion 不在同一个目录;
|
|
405
|
+
- 当前工作区 endpoint 文件不存在或来自旧进程。
|
|
413
406
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
```bash
|
|
417
|
-
wechat-codex-start
|
|
418
|
-
```
|
|
407
|
+
建议先确认两个终端在同一目录;如果不想手动分两个终端,可以改用对应的 `wechat-codex-start`、`wechat-claude-start` 或 `wechat-opencode-start`。
|
|
419
408
|
|
|
420
409
|
### 2. 全局命令不存在
|
|
421
410
|
|
|
422
411
|
请确认已经执行以下之一:
|
|
423
412
|
|
|
424
413
|
```bash
|
|
414
|
+
npm install -g @unlinearity/cli-wechat-bridge@latest
|
|
425
415
|
npm install -g .
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
或:
|
|
429
|
-
|
|
430
|
-
```bash
|
|
431
416
|
npm link
|
|
432
417
|
```
|
|
433
418
|
|
|
@@ -437,8 +422,8 @@ npm link
|
|
|
437
422
|
|
|
438
423
|
项目已经尽量规避 `codex.ps1`:
|
|
439
424
|
|
|
440
|
-
- 优先查找 vendor `codex.exe
|
|
441
|
-
- 必要时通过 `cmd.exe` 包装 `codex.cmd
|
|
425
|
+
- 优先查找 vendor `codex.exe`;
|
|
426
|
+
- 必要时通过 `cmd.exe` 包装 `codex.cmd`。
|
|
442
427
|
|
|
443
428
|
如果本机 PowerShell profile 本身受执行策略限制,终端仍可能打印相关警告。这通常不是 bridge 本身故障。
|
|
444
429
|
|
|
@@ -452,8 +437,8 @@ npm link
|
|
|
452
437
|
|
|
453
438
|
如果偶发出现:
|
|
454
439
|
|
|
455
|
-
1. 先确认本地 `wechat-codex`
|
|
456
|
-
2. 必要时使用 `/stop
|
|
440
|
+
1. 先确认本地 `wechat-codex` 是否真的仍在执行任务;
|
|
441
|
+
2. 必要时使用 `/stop`;
|
|
457
442
|
3. 检查:
|
|
458
443
|
|
|
459
444
|
```text
|
|
@@ -462,16 +447,25 @@ npm link
|
|
|
462
447
|
|
|
463
448
|
### 6. 本地 `/resume` 后微信不同步
|
|
464
449
|
|
|
465
|
-
|
|
450
|
+
请优先确认:`wechat-bridge-codex` 与 `wechat-codex` 是否都已重启到同一版本。
|
|
466
451
|
|
|
467
452
|
部分设备可能存在第一次本地输入不同步到微信的情况,可以先微信发送指令来建立连接。
|
|
468
453
|
|
|
454
|
+
### 7. `wechat_send_failed` 或 `UND_ERR_CONNECT_TIMEOUT`
|
|
455
|
+
|
|
456
|
+
如果 `bridge-state.json` 看起来正常,但微信仍然没有收到回复,优先检查:
|
|
457
|
+
|
|
458
|
+
```text
|
|
459
|
+
~/.claude/channels/wechat/bridge.log
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
如果日志中出现 `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`。
|
|
463
|
+
|
|
469
464
|
## 已知限制
|
|
470
465
|
|
|
471
466
|
- 微信 `/resume` 暂时被禁用(可能导致对话双向不稳定)
|
|
472
467
|
- Codex 不支持底层任务的远程审批!建议给好权限,正常使用,几乎不会主动请求较为低级的远程审批;Claude Code 支持远程审批,但是测试的不够,如有问题可以提 issue。
|
|
473
|
-
- 当前模型是单 owner、单 bridge
|
|
474
|
-
|
|
468
|
+
- 当前模型是单 owner、单 bridge、单活动工作区。
|
|
475
469
|
|
|
476
470
|
## 开发说明
|
|
477
471
|
|
|
@@ -480,10 +474,11 @@ npm link
|
|
|
480
474
|
| 文件 | 作用 |
|
|
481
475
|
| --- | --- |
|
|
482
476
|
| `src/bridge/wechat-bridge.ts` | bridge 主事件循环 |
|
|
483
|
-
| `src/bridge/bridge-adapters.ts` | `codex` / `claude` / `shell`
|
|
484
|
-
| `src/
|
|
485
|
-
| `src/companion/
|
|
486
|
-
| `src/companion/codex-
|
|
477
|
+
| `src/bridge/bridge-adapters.ts` | `codex` / `claude` / `opencode` / `shell` 适配器入口 |
|
|
478
|
+
| `src/bridge/bridge-adapters.opencode.ts` | OpenCode 适配器实现 |
|
|
479
|
+
| `src/companion/local-companion.ts` | `wechat-claude` / `wechat-opencode` 本地 companion 入口 |
|
|
480
|
+
| `src/companion/codex-remote-client.ts` | `wechat-codex` 本地客户端入口 |
|
|
481
|
+
| `src/companion/local-companion-start.ts` | `wechat-codex-start` / `wechat-claude-start` / `wechat-opencode-start` 单命令启动入口 |
|
|
487
482
|
| `src/wechat/wechat-transport.ts` | iLink 消息收发 |
|
|
488
483
|
| `src/bridge/bridge-state.ts` | bridge 状态、锁与日志 |
|
|
489
484
|
| `src/wechat/setup.ts` | 登录与凭据初始化 |
|
|
@@ -494,6 +489,14 @@ npm link
|
|
|
494
489
|
bun test
|
|
495
490
|
```
|
|
496
491
|
|
|
492
|
+
也可以按目录运行:
|
|
493
|
+
|
|
494
|
+
```bash
|
|
495
|
+
bun run test:bridge
|
|
496
|
+
bun run test:companion
|
|
497
|
+
bun run test:wechat
|
|
498
|
+
```
|
|
499
|
+
|
|
497
500
|
当前测试主要覆盖:
|
|
498
501
|
|
|
499
502
|
- Windows 启动解析
|
|
@@ -505,26 +508,21 @@ bun test
|
|
|
505
508
|
## 致谢
|
|
506
509
|
|
|
507
510
|
### 相关链接
|
|
508
|
-
- [Linux DO](https://linux.do/):学AI,上L站!
|
|
509
511
|
|
|
512
|
+
- [Linux DO](https://linux.do/):学AI,上L站!
|
|
510
513
|
- [openclaw-weixin](https://github.com/hao-ji-xing/openclaw-weixin):支持Claude Code Channel,感谢如此迅速的开源。
|
|
511
|
-
|
|
512
514
|
- [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk):TypeScript 版 MCP SDK
|
|
513
|
-
|
|
514
515
|
- [node-pty](https://github.com/microsoft/node-pty):本地 PTY / ConPTY 进程桥接
|
|
515
|
-
|
|
516
516
|
- [@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript):Anthropic TypeScript SDK
|
|
517
|
-
|
|
518
517
|
- [qrcode-terminal](https://github.com/gtanner/qrcode-terminal):终端二维码输出
|
|
519
518
|
|
|
520
|
-
|
|
521
519
|
### 感谢支持
|
|
522
520
|
|
|
523
521
|
> 感谢 issue 反馈者 和 pr 贡献者。
|
|
524
522
|
|
|
525
523
|
创作不易,如感觉对您有帮助、觉得有意思,可以请喝杯奶茶。❤️
|
|
526
524
|
|
|
527
|
-
<p align='center'><img src='docs\images\wechat-tip.png' width=60%></p>
|
|
525
|
+
<p align='center'><img src='docs\images\wechat-tip.png' width=60%></p>
|
|
528
526
|
|
|
529
527
|
## License
|
|
530
528
|
|