Skip to content

Commit d0c58ce

Browse files
committed
feat: v1.1.0 — 重构插件架构,支持 WorkBuddy 模式,项目改名
- 新增 WorkBuddy (CodeBuddy OAuth + Centrifuge) 登录模式 - 交互式登录选择(QClaw / WorkBuddy) - 统一配置存储到 openclaw.json,删除独立 state-store - WeChat KF 消息收发(Centrifuge → AGP 转换 + HTTP COPILOT_RESPONSE) - 设备绑定分离到 openclaw wechat bind - QClaw 登录改为交互式输入(不再文件轮询) - 项目改名: wechat-access-unqclawed → wechat-openclaw-channel - 更新 README、configSchema、CLI 命令
1 parent e9b62ce commit d0c58ce

22 files changed

Lines changed: 1414 additions & 12765 deletions

.github/workflows/publish.yml

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,17 @@ name: Publish to npm
22

33
on:
44
push:
5-
branches: [main]
5+
tags: ["v*"]
66
workflow_dispatch:
77

88
permissions:
9-
contents: write
9+
contents: read
1010

1111
jobs:
1212
publish:
1313
runs-on: ubuntu-latest
14-
# skip release commits pushed by this workflow
15-
if: "!contains(github.event.head_commit.message || '', '[skip ci]')"
1614
steps:
1715
- uses: actions/checkout@v4
18-
with:
19-
fetch-depth: 0
20-
token: ${{ secrets.GITHUB_TOKEN }}
2116

2217
- uses: actions/setup-node@v4
2318
with:
@@ -27,20 +22,6 @@ jobs:
2722
- name: Install dependencies
2823
run: npm install --no-package-lock
2924

30-
- name: Configure git
31-
run: |
32-
git config user.name "github-actions[bot]"
33-
git config user.email "github-actions[bot]@users.noreply.github.com"
34-
35-
- name: Bump version, tag, and push
36-
run: |
37-
npm version patch --no-git-tag-version
38-
VERSION=$(node -p "require('./package.json').version")
39-
git add package.json package-lock.json
40-
git commit -m "release: v${VERSION} [skip ci]"
41-
git tag "v${VERSION}"
42-
git push origin main --follow-tags
43-
4425
- name: Build
4526
run: npm run build
4627

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ Thumbs.db
2323
.vscode/
2424
*.swp
2525
*.swo
26+
.ace-tool/

README.md

Lines changed: 75 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,118 +1,124 @@
1-
# wechat-access-unqclawed
1+
# wechat-openclaw-channel
22

3-
OpenClaw 微信通路插件 — 通过 WeChat OAuth 扫码登录获取 token,连接 AGP WebSocket 网关收发消息。
3+
> **v1.1.0 — 现已支持 WorkBuddy 模式!** 无需内测码,通过 WorkBuddy 账号即可登录使用。
4+
5+
OpenClaw 微信通路插件 — 支持 QClaw 和 WorkBuddy 双模式。
46

57
## 安装
68

79
```bash
8-
openclaw plugins install @henryxiaoyang/wechat-access-unqclawed
10+
openclaw plugins install @henryxiaoyang/wechat-openclaw-channel
911
```
1012

11-
启用渠道:
13+
## 快速开始
1214

13-
```bash
14-
openclaw config set channels.wechat-access-unqclawed.enabled true
15-
```
16-
17-
## 首次登录
15+
### 1. 登录
1816

1917
```bash
20-
openclaw channels login --channel wechat-access-unqclawed
18+
openclaw wechat login
2119
```
2220

23-
终端会显示微信二维码(或浏览器链接),用微信扫码并确认后,浏览器会跳转到新页面,地址栏 URL 形如
21+
交互式选择登录模式
2422

25-
```
26-
https://security.guanjia.qq.com/login?code=001j6y000...&state=64c077c4e078...
27-
```
23+
- **QClaw** — 微信扫码登录 **目前需要内测码。**
24+
- **WorkBuddy** — CodeBuddy OAuth 登录
2825

29-
复制 `code=` 后面的值(到 `&` 之前),在**另一个终端窗口**写入临时文件:
26+
### 2. 启动 Gateway
3027

3128
```bash
32-
echo "001j6y0000MiZV1uYB300cEYDG1j6y0x" > ~/.openclaw/wechat-auth-code.tmp
29+
openclaw gateway restart
3330
```
3431

35-
也可以直接粘贴完整 URL,会自动提取 `code`
32+
### 3. 设备绑定(首次使用)
3633

3734
```bash
38-
echo "https://security.guanjia.qq.com/login?code=001j6y0000MiZV1uYB300cEYDG1j6y0x&state=64c077..." > ~/.openclaw/wechat-auth-code.tmp
35+
openclaw wechat bind
3936
```
4037

41-
原窗口会自动检测并完成登录,token 自动保存。然后重启 Gateway:
38+
在微信中打开返回的链接完成绑定,绑定后即可通过微信对话。
4239

43-
```bash
44-
openclaw gateway restart
45-
```
40+
## 登录模式
41+
42+
### QClaw 模式
43+
44+
通过微信平台 OAuth 获取 token,连接 WebSocket 网关。**目前需要内测码。**
45+
46+
### WorkBuddy 模式 (推荐)
47+
48+
通过 CodeBuddy OAuth 获取 token,连接 WebSocket 网关。不需要内测码。
4649

47-
## 功能
50+
## CLI 命令
4851

49-
- 微信扫码登录(终端二维码 + 浏览器链接)
50-
- Token 自动持久化,重启免登录
51-
- AGP 协议 WebSocket 双向通信(流式文本、工具调用)
52-
- 邀请码验证(可配置跳过)
53-
- 支持生产/测试环境切换
52+
| 命令 | 说明 |
53+
|------|------|
54+
| `openclaw wechat login` | 交互式登录(选择 QClaw 或 WorkBuddy) |
55+
| `openclaw wechat logout` | 清除登录态 |
56+
| `openclaw wechat bind` | 获取设备绑定链接 |
5457

5558
## 配置
5659

57-
在 OpenClaw 配置文件的 `channels.wechat-access-unqclawed` 下:
60+
凭证统一存储在 `~/.openclaw/openclaw.json` `channels.wechat-openclaw-channel` 下:
5861

5962
```json
6063
{
6164
"channels": {
62-
"wechat-access-unqclawed": {
63-
"enabled": true,
64-
"token": "",
65-
"wsUrl": "",
66-
"bypassInvite": false,
67-
"environment": "production"
65+
"wechat-openclaw-channel": {
66+
"loginMode": "workbuddy",
67+
"environment": "production",
68+
"qclaw": {
69+
"jwtToken": "...",
70+
"channelToken": "...",
71+
"apiKey": "...",
72+
"guid": "...",
73+
"userId": "...",
74+
"wsUrl": "...",
75+
"userInfo": {}
76+
},
77+
"workbuddy": {
78+
"accessToken": "...",
79+
"refreshToken": "...",
80+
"userId": "...",
81+
"hostId": "...",
82+
"baseUrl": "https://copilot.tencent.com",
83+
"userInfo": {}
84+
}
6885
}
6986
}
7087
}
7188
```
7289

73-
| 字段 | 类型 | 说明 |
74-
|------|------|------|
75-
| `enabled` | boolean | 启用渠道(必须设为 `true`|
76-
| `token` | string | 手动指定 channel token(留空则走扫码登录) |
77-
| `wsUrl` | string | WebSocket 网关地址(留空使用环境默认值) |
78-
| `bypassInvite` | boolean | 跳过邀请码验证 |
79-
| `environment` | string | `production``test` |
80-
| `authStatePath` | string | 自定义 token 持久化路径 |
81-
82-
## Token 获取策略
83-
84-
1. 读取配置中的 `token` — 如果有,直接使用
85-
2. 读取本地保存的登录态(`~/.openclaw/wechat-access-auth.json`
86-
3. 以上都没有 — 运行 `openclaw channels login --channel wechat-access-unqclawed` 手动登录
90+
| 字段 | 说明 |
91+
|------|------|
92+
| `loginMode` | 当前登录模式:`qclaw``workbuddy` |
93+
| `environment` | 环境:`production`(默认)或 `test` |
94+
| `qclaw` | QClaw 模式凭证(登录后自动写入) |
95+
| `workbuddy` | WorkBuddy 模式凭证(登录后自动写入) |
8796

8897
## 项目结构
8998

9099
```
91-
index.ts # 插件入口,注册渠道、CLI、启停 WebSocket
100+
index.ts # 插件入口,注册渠道、CLI、启停 WebSocket
92101
auth/
93-
types.ts # 认证相关类型
94-
environments.ts # 生产/测试环境配置
95-
device-guid.ts # 设备 GUID 生成(随机,持久化)
96-
qclaw-api.ts # QClaw JPRX 网关 API 客户端
97-
state-store.ts # Token 持久化
98-
wechat-login.ts # 扫码登录流程编排(交互式)
99-
wechat-qr-poll.ts # QR 码生成与轮询
102+
types.ts # 认证相关类型(LoginMode, QClawCredentials, WorkBuddyCredentials)
103+
environments.ts # 生产/测试环境配置
104+
device-guid.ts # 设备 GUID 生成
105+
qclaw-api.ts # QClaw JPRX 网关 API 客户端
106+
codebuddy-api.ts # CodeBuddy (copilot.tencent.com) API 客户端
107+
wechat-login.ts # QClaw 扫码登录流程(交互式)
108+
wechat-qr-poll.ts # QR 码 URL 生成
109+
device-bind.ts # 设备绑定流程
100110
websocket/
101-
types.ts # AGP 协议类型
102-
websocket-client.ts # WebSocket 客户端(连接、心跳、重连)
103-
message-handler.ts # 消息处理(调用 Agent)
104-
message-adapter.ts # AGP <-> OpenClaw 消息适配
111+
types.ts # AGP 协议类型
112+
websocket-client.ts # QClaw WebSocket 客户端
113+
centrifuge-client.ts # WorkBuddy Centrifuge WebSocket 客户端
114+
message-handler.ts # 消息处理(调用 Agent)
115+
message-adapter.ts # AGP ↔ OpenClaw 消息适配
105116
common/
106-
runtime.ts # OpenClaw 运行时单例
107-
agent-events.ts # Agent 事件订阅
108-
message-context.ts # 消息上下文构建
109-
http/ # HTTP webhook 通道(备用)
117+
runtime.ts # OpenClaw 运行时单例
118+
agent-events.ts # Agent 事件订阅
119+
message-context.ts # 消息上下文构建
110120
```
111121

112-
## 协议
113-
114-
AGP (Agent Gateway Protocol) — 基于 WebSocket Text 帧的 JSON 消息协议,详见 `websocket.md`
115-
116122
## License
117123

118124
MIT

0 commit comments

Comments
 (0)