weacpx 0.2.2 → 0.3.1

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
@@ -1,341 +1,340 @@
1
- # Weacpx
1
+ # weacpx
2
2
 
3
- 连接微信与 acpx 协议,让 Claude Code / Codex 成为你口袋里的 24/7 伙伴。
3
+ > 用微信远程驱动 Codex、Claude Code acpx 会话。
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/weacpx?style=flat-square)](https://www.npmjs.com/package/weacpx)
6
6
  [![Node.js Version](https://img.shields.io/node/v/weacpx?style=flat-square)](https://nodejs.org)
7
- [![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat-square&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/gadzan/weacpx)
7
+ [![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat-square&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS42MDE1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/gadzan/weacpx)
8
8
  [![License](https://img.shields.io/npm/l/weacpx?style=flat-square)](./LICENSE)
9
9
 
10
10
  ![weacpx logo](assets/weacpx.jpg)
11
11
 
12
- ## Why Weacpx?
12
+ ## 这是什么
13
13
 
14
- Agent-First 的开发模式下,编码任务必须依托顶级 Agents,🙅‍♀️不要通过 openclaw 去开发,现在有一个更好的方案。Weacpx 通过微信提供一个轻量化的远程入口,随时随地通过手机驱动你的顶级 Agents。
14
+ `weacpx` 是一个微信控制台。它把微信消息接到 `acpx` 会话上,让你直接在手机里:
15
15
 
16
- Weacpx 的核心价值主张很简单:
16
+ - 新建和切换 Codex / Claude Code 会话
17
+ - 让 Agent 继续在指定项目目录里工作
18
+ - 查看流式回复、最终结果和工具调用摘要
19
+ - 调整权限策略
20
+ - 在需要时做最小可用的多 Agent 编排
17
21
 
18
- **随时随地访问** 只要你有微信,就能控制你的 Agent。无需 VPN、Web 界面或复杂的云服务配置。
22
+ 如果你已经习惯在本地终端里用 `acpx`,`weacpx` 提供的是一个**远程入口**,而不是另一套全新的工作流。
19
23
 
20
- **统一的会话管理** — 通过 acpx 协议,weacpx 让你在微信里管理多个 Agent 会话(Codex、Claude Code 等),就像在本地终端一样。创建、切换、查询状态,全部通过简单的斜杠命令完成,这是其它简单基于 ACP 实现的远控 agent 所不具备的。
24
+ ## 适合谁
21
25
 
22
- **轻量守护进程** weacpx 作为后台守护进程运行,资源占用极低。不用启动一个臃肿 openclaw,不用担心在工作机器上使用会占用资源。启动、停止、查看状态都通过简单的 CLI 命令完成。
26
+ `weacpx` 适合已经在用 Codex、Claude Code 或其他 `acpx` driver 的开发者。你可以用微信盯任务、发指令、看结果,并在同一个聊天里管理多个会话。
23
27
 
24
- **权限可控** — 可以即时通过微信修改 agent 的权限,无论是 YOLO 还是只读。
28
+ 它不是云端 IDE,也不是可视化编排平台。
25
29
 
26
- ## 安装前准备
30
+ ## 5 分钟快速开始
27
31
 
28
- 开始前,至少需要:
32
+ ### 前置条件
29
33
 
30
- - Node.js 22+ 或 Bun
31
- - Claude Code 或 Codex
32
- - 装了微信的手机
34
+ 开始前,你至少需要:
33
35
 
34
- > `weacpx` 基于 `weixin-agent-sdk` 与 `acpx` 实现。
35
- > 正常情况下,不需要再额外全局安装 `acpx`。
36
+ - Node.js 22+ Bun
37
+ - 已可用的 Codex、Claude Code 或其他 `acpx` driver
38
+ - 一台装了微信的手机
36
39
 
37
- ## 安装
40
+ > `weacpx` 基于 `weixin-agent-sdk` 和 `acpx` 工作。正常情况下,你不需要额外全局安装 `acpx`。
38
41
 
39
- 全局安装:
42
+ ### 安装
40
43
 
41
44
  ```bash
42
- # 使用 NPM 全局安装
43
45
  npm install -g weacpx
44
- # 或使用 Bun 全局安装
46
+ #
45
47
  bun add -g weacpx
46
48
  ```
47
49
 
48
- ## 快速开始
50
+ ### 登录微信
51
+
52
+ ```bash
53
+ weacpx login
54
+ ```
55
+
56
+ 终端会显示二维码。你用微信扫码登录。
49
57
 
50
- 第一次使用建议按这个顺序:
58
+ ### 启动服务
59
+
60
+ ```bash
61
+ weacpx start
62
+ ```
51
63
 
52
- 1. 登录微信 `weacpx login`
53
- 2. 启动服务 `weacpx start`
54
- 3. 在微信里创建会话并开始对话
64
+ ### 在微信里创建第一个会话
55
65
 
56
- `weacpx login` 会在终端里显示二维码,使用微信扫描登录。`weacpx start` 启动后,在微信里发:
66
+ 把下面两条消息发到微信:
57
67
 
58
68
  ```text
59
69
  /ss codex -d /absolute/path/to/your/repo
60
-
61
70
  /help
62
71
  ```
63
72
 
64
- `/ss codex -d /absolute/path/to/your/repo`:开启或挂在一个会话,并切换到该会话。使用 Codex,并指定工作目录为 `/absolute/path/to/your/repo`。
65
-
66
- `/help` 查看帮助信息。
67
-
68
- 然后就可以直接发普通消息,例如:
73
+ 然后直接发普通文本,例如:
69
74
 
70
75
  ```text
71
76
  hello
72
77
  ```
73
78
 
74
- 如果任务比较长,`weacpx` 在支持流式中间回复的 transport(当前主要是 `acpx-cli`)下,会优先把 Agent 的中间回复分段发回微信,而不是一直等到最后一条结果。
79
+ 如果一切正常,普通文本会进入当前会话,Agent 的回复会回到微信。
75
80
 
76
- 如果你更想要“一次性只回最终结果”,可以配置全局默认 `wechat.replyMode`,或在当前会话里用 `/replymode final` 临时覆盖。
81
+ ## 你的日常使用流程
77
82
 
78
- 如果你是从源码仓库直接使用:
83
+ 最常见的使用顺序只有四步:
79
84
 
80
- ```bash
81
- # 先安装依赖
82
- bun install
83
- # 登录微信
84
- bun run login
85
- # 启动服务
86
- bun run dev
85
+ 1. **启动后台服务**:`weacpx start`
86
+ 2. **创建或切换会话**:`/ss ...`、`/use ...`
87
+ 3. **直接发普通文本**:让当前会话继续工作
88
+ 4. **必要时查看状态或取消**:`/status`、`/cancel`
89
+
90
+ ### 1) 创建会话
91
+
92
+ 最常用命令:
93
+
94
+ ```text
95
+ /ss codex -d /absolute/path/to/your/repo
87
96
  ```
88
97
 
89
- 普通文本会默认发送到当前选中的 session。
98
+ 它会使用 `codex`,绑定这个目录,并自动切换到新会话。
90
99
 
91
- ## CLI 命令
100
+ ### 2) 发普通消息
92
101
 
93
- 常用命令:
102
+ 非 `/` 开头的文本,都会发送到当前会话。
94
103
 
95
- - `weacpx login`
96
- - `weacpx logout`
97
- - `weacpx run`
98
- - `weacpx start`
99
- - `weacpx status`
100
- - `weacpx stop`
101
- - `weacpx doctor`
102
- - `weacpx version`
104
+ ```text
105
+ 修一下最近这个接口超时问题
106
+ ```
103
107
 
104
- 其他说明:
108
+ ### 3) 看回复
105
109
 
106
- - `run` 前台运行,适合调试
107
- - `start` 后台启动
108
- - `status` 查看后台状态、PID、配置路径和日志路径
109
- - `stop` 停止后台实例
110
- - `logout` 清除本机已保存的微信登录凭证;如果当前没有已登录账号,会直接提示
111
- - `doctor` 运行诊断,默认检查 config / runtime / daemon / wechat / acpx / bridge
112
- - `version` 输出当前安装的 `weacpx` 版本号,可用于排查环境或确认升级是否生效
110
+ `weacpx` 支持三种常用回复模式:
113
111
 
114
- ### doctor 诊断
112
+ - `stream`:默认,流式返回中间文本
113
+ - `final`:只返回最终结果
114
+ - `verbose`:在流式文本之外,额外显示工具调用摘要
115
115
 
116
- `weacpx doctor` 用来快速检查本机环境是否能正常运行。
116
+ 例如 `verbose` 模式下,你会看到:
117
117
 
118
- ```bash
119
- weacpx doctor
120
- weacpx doctor --verbose
121
- weacpx doctor --smoke
122
- weacpx doctor --smoke --agent codex --workspace backend
118
+ ```text
119
+ 📖 sed -n '1,220p' README.md
120
+ 🔍 rg -n 'session new' src tests
121
+ 💻 bun test tests/unit/main.test.ts
122
+ ✏️ Edit parse-command.ts
123
123
  ```
124
124
 
125
- 说明:
125
+ ### 4) 切换会话
126
126
 
127
- - `--verbose` 会展开每个检查的技术细节,方便定位问题
128
- - `--smoke` 会额外执行一次真实 transport 级别的最小 prompt 检查
129
- - `--agent` / `--workspace` 只影响 `--smoke`,不会改变默认诊断检查
130
- - `--smoke` 可能留下一个临时的底层 `acpx` session;这是为了换取真实链路验证能力
131
- - 如果不传 `--smoke`,相关 smoke 检查会被标记为 `SKIP`
127
+ ```text
128
+ /ss
129
+ /use backend:codex
130
+ ```
132
131
 
133
- ### version 查看版本
132
+ 这样你可以在同一个微信聊天里切换不同项目、不同 agent 的会话。
134
133
 
135
- `weacpx version` 用来输出当前安装的 CLI 版本号。
134
+ ## 常用 CLI 命令
135
+
136
+ 这些命令在电脑终端里运行。
137
+
138
+ | 命令 | 说明 |
139
+ |------|------|
140
+ | `weacpx login` | 登录微信 |
141
+ | `weacpx logout` | 清除本机保存的微信登录凭证 |
142
+ | `weacpx run` | 前台运行,适合调试 |
143
+ | `weacpx start` | 后台启动服务 |
144
+ | `weacpx status` | 查看后台状态、PID、配置路径、日志路径 |
145
+ | `weacpx stop` | 停止后台实例 |
146
+ | `weacpx doctor` | 运行环境诊断 |
147
+ | `weacpx version` | 查看当前版本 |
148
+ | `weacpx workspace list` | 查看本机已注册的 workspace |
149
+ | `weacpx workspace add [name]` | 把当前目录注册成 workspace;不传 `name` 时使用当前目录名 |
150
+ | `weacpx workspace rm <name>` | 删除 workspace |
151
+
152
+ `workspace` 也可以简写为 `ws`:
136
153
 
137
154
  ```bash
138
- weacpx version
139
- weacpx --version
140
- weacpx -v
155
+ weacpx ws add
156
+ weacpx ws list
157
+ weacpx ws rm backend
141
158
  ```
142
159
 
143
- 说明:
160
+ ### `workspace` CLI 怎么用
144
161
 
145
- - 三种写法都会输出同一个版本号
146
- - 适合在升级后确认当前生效的是哪个版本
147
- - 排查用户环境问题时,建议先附上这里输出的版本信息
162
+ `weacpx workspace` 用来在电脑本机维护 `~/.weacpx/config.json` 里的 `workspaces` 配置。它适合先在终端里注册常用项目目录,然后在微信里用 `--ws <name>` 直接引用。
148
163
 
149
- ### logout 退出登录
164
+ | 命令 | 说明 |
165
+ |------|------|
166
+ | `weacpx workspace list` | 列出已注册的 workspace 及其路径 |
167
+ | `weacpx workspace add` | 把当前目录注册为 workspace,名称默认取当前目录名 |
168
+ | `weacpx workspace add <name>` | 把当前目录注册为指定名称 |
169
+ | `weacpx workspace rm <name>` | 删除指定 workspace |
150
170
 
151
- 说明:
171
+ 常见用法:
152
172
 
153
- - `weacpx logout` 只清理已保存的微信账号凭证
154
- - 它不会停止当前 daemon,也不会删除 `weacpx` 的 session/state 配置
173
+ ```bash
174
+ cd /absolute/path/to/backend
175
+ weacpx workspace add backend
155
176
 
156
- ## 微信中使用说明
177
+ cd /absolute/path/to/frontend
178
+ weacpx ws add frontend
157
179
 
158
- ### 管理 Agent
180
+ weacpx ws list
181
+ weacpx ws rm frontend
182
+ ```
159
183
 
160
- 内置 `codex` 与 `claude` 两个常见 agent,也支持添加你自己的 agents。
184
+ 注册后,你可以在微信里直接使用:
161
185
 
162
- | 命令 | 说明 |
163
- |------|------|
164
- | `/agents` | 查看当前已添加的 agent |
165
- | `/agent add codex` | 添加 codex agent |
166
- | `/agent add claude` | 添加 claude agent |
167
- | `/agent rm <name>` | 删除 agent |
186
+ ```text
187
+ /ss codex --ws backend
188
+ /ss new claude --ws frontend
189
+ ```
168
190
 
169
- 说明:
191
+ 注意:`workspace add` 总是注册**当前终端所在目录**;如果不传名称,会用当前目录名作为 workspace 名称。
170
192
 
171
- - 内置 `codex` 和 `claude` 走 `acpx` 的 driver alias,通常不需要额外写 `agent.command`
172
- - 如果你接入的是自定义 agent,再考虑显式配置 `agent.command`
193
+ ### `doctor` 怎么用
173
194
 
174
- `config.json` 中的 `agent.command` 用于显式指定 agent 的原始启动命令,完整字段如下:
195
+ ```bash
196
+ weacpx doctor
197
+ weacpx doctor --verbose
198
+ weacpx doctor --smoke
199
+ weacpx doctor --smoke --agent codex --workspace backend
200
+ ```
175
201
 
176
- | 字段 | 类型 | 必填 | 说明 |
177
- |------|------|------|------|
178
- | `driver` | `string` | 是 | agent 驱动类型,传递给 acpx 的第一位置参数 |
179
- | `command` | `string` | 否 | 显式指定自定义 agent 的原始命令。不填则使用 acpx 默认行为 |
202
+ 说明:
180
203
 
181
- 示例 配置一个自定义 agent:
204
+ - `--verbose` 会展开每项检查的细节
205
+ - `--smoke` 会额外执行一次真实 transport 级别的最小 prompt 检查
206
+ - `--agent` / `--workspace` 只影响 `--smoke`
207
+ - 如果不传 `--smoke`,相关检查会显示为 `SKIP`
182
208
 
183
- ```json
184
- {
185
- "agents": {
186
- "my-agent": {
187
- "driver": "codex",
188
- "command": "/path/to/acpx codex --arg1 value1"
189
- }
190
- }
191
- }
192
- ```
209
+ ## 常用微信命令
210
+
211
+ 下面这部分保留一份**中等长度**的日常手册。够你上手和日常使用,但不把 README 写成完整参考手册。
193
212
 
194
- - 内置 `codex` 和 `claude` 建议只写 `driver`,让 `acpx` 自己解析对应 alias
195
- - `command` 主要用于自定义 agent,不建议给内置 driver 手写原始命令
196
- - 旧版 `codex` raw command 配置会被自动忽略,回退为 `acpx codex ...`
213
+ 完整微信命令参考见:[docs/commands.md](./docs/commands.md)。
197
214
 
198
- ### Workspace 工作目录
215
+ ### Agent 管理
199
216
 
200
217
  | 命令 | 说明 |
201
218
  |------|------|
202
- | `/workspaces` / `/workspace` / `/ws` | 查看当前已添加的工作目录 |
203
- | `/ws new <name> -d <path>` | 添加工作目录,`-d` 后面接的是目录在电脑的绝对路径 |
204
- | `/workspace rm <name>` | 删除工作目录 |
219
+ | `/agents` | 查看 agent 列表 |
220
+ | `/agent add codex` | 添加 `codex` |
221
+ | `/agent add claude` | 添加 `claude` |
222
+ | `/agent rm <name>` | 删除 agent |
205
223
 
206
- 说明:
224
+ ### Workspace 管理
207
225
 
208
- - `/ws new` 会先校验路径是否存在
209
- - Windows 路径里如果有空格,请给 `-d` 或 `--cwd` 的值加引号,例如:`/ws new backend -d "E:\my projects\backend"`
226
+ | 命令 | 说明 |
227
+ |------|------|
228
+ | `/workspaces` / `/workspace` / `/ws` | 查看 workspace 列表 |
229
+ | `/ws new <name> -d <path>` | 添加 workspace,`path` 是电脑上的绝对路径 |
230
+ | `/workspace rm <name>` | 删除 workspace |
210
231
 
211
232
  ### Session 会话
212
233
 
213
234
  | 命令 | 说明 |
214
235
  |------|------|
215
- | `/sessions` / `/session` / `/ss` | 查看当前已添加的会话 |
216
- | `/ss <agent> (-d <path> | --ws <name>)` | 新建会话;传 `-d` 时按目录自动创建或复用 workspace,传 `--ws` 时复用已注册 workspace |
217
- | `/ss new <agent> (-d <path> | --ws <name>)` | 强制新建会话;`--ws` 只复用已注册 workspace |
218
- | `/ss new <alias> -a <name> --ws <name>` | 强制新建会话,并指定 agent 和 workspace |
219
- | `/ss attach <alias> -a <name> --ws <name> --name <transport-session>` | 恢复已存在的会话 |
236
+ | `/sessions` / `/session` / `/ss` | 查看会话列表 |
237
+ | `/ss <agent> (-d <path> \| --ws <name>)` | 创建或复用当前最常用的会话 |
238
+ | `/ss new <agent> (-d <path> \| --ws <name>)` | 强制新建会话 |
220
239
  | `/use <alias>` | 切换当前会话 |
221
240
  | `/status` | 查看当前会话状态 |
222
- | `/mode` | 查看当前会话已保存的 mode |
223
- | `/mode <id>` | 设置当前会话 mode,例如 `/mode plan` |
224
- | `/replymode` | 查看当前会话的回复输出模式(全局默认 / 当前覆盖 / 实际生效) |
225
- | `/replymode stream` | 当前逻辑会话使用流式回复 |
226
- | `/replymode final` | 当前逻辑会话只发送最终文本结果 |
227
- | `/replymode reset` | 清除当前逻辑会话覆盖,回退到全局默认 |
228
- | `/session reset` | 重置当前会话上下文,保留 alias/agent/workspace,但重新绑定到一个新的后端 session |
241
+ | `/mode` / `/mode <id>` | 查看或设置底层 `acpx` mode |
242
+ | `/replymode` | 查看当前回复模式 |
243
+ | `/replymode stream` | 流式回复 |
244
+ | `/replymode verbose` | 流式 + 工具调用摘要 |
245
+ | `/replymode final` | 只返回最终结果 |
246
+ | `/replymode reset` | 回退到全局默认 reply mode |
247
+ | `/session reset` | 重置当前会话上下文 |
229
248
  | `/clear` | `/session reset` 的快捷别名 |
230
- | `/cancel` | 取消当前会话 |
231
- | `/stop` | `/cancel` 的别名,用于取消当前会话 |
232
-
233
- 说明:
249
+ | `/cancel` / `/stop` | 取消当前会话 |
234
250
 
235
- - `/ss <agent> -d <path>` 是最常用入口,会自动按目录名推导并创建或复用 workspace,再创建或复用 session
236
- - `/ss <agent> --ws <name>` 会直接复用已注册 workspace,再创建或复用 session
237
- - `/ss new <agent> (-d <path> | --ws <name>)` 表示强制新建 session
238
- - `/use <alias>` 用来切换当前会话
239
- - `/mode` 会显示当前逻辑会话里保存的 mode;如果还没设置过,会显示“未设置”
240
- - `/mode <id>` 会把 mode 透传给底层 `acpx set-mode`,成功后再写回当前逻辑会话
241
- - `/replymode` 修改的是**当前逻辑会话**的 reply mode override,不是底层 transport session 的全局属性
242
- - `wechat.replyMode` 是全局默认值;`/replymode reset` 会回退到这个默认值
243
- - `final` 只影响微信侧是否实时发送文本流式片段,不改变 acpx transport 本身的生成方式
244
- - `/session reset` 和 `/clear` 会保留当前逻辑会话名,但重新创建一个新的后端 session,从空上下文重新开始
245
- - 非 `/` 开头的文本会发送到当前 session
251
+ 建议你优先记住这三个:
246
252
 
247
- ### 配置命令
253
+ ```text
254
+ /ss codex -d /absolute/path/to/repo
255
+ /use <alias>
256
+ /cancel
257
+ ```
248
258
 
249
- `/config` 用来查看和修改一小部分**受支持的配置字段**,不是任意 JSON 编辑器。
259
+ ### 配置与权限
250
260
 
251
261
  | 命令 | 说明 |
252
262
  |------|------|
253
- | `/config` | 查看当前支持通过微信修改的配置路径 |
254
- | `/config set <path> <value>` | 修改一个受支持的配置值 |
263
+ | `/config` | 查看支持通过微信修改的配置路径 |
264
+ | `/config set <path> <value>` | 修改一个白名单配置项 |
265
+ | `/pm` / `/permission` | 查看当前权限模式 |
266
+ | `/pm set allow` | 切到 `approve-all` |
267
+ | `/pm set read` | 切到 `approve-reads` |
268
+ | `/pm set deny` | 切到 `deny-all` |
269
+ | `/pm auto` | 查看当前非交互权限策略 |
270
+ | `/pm auto deny` | 切到 `deny` |
271
+ | `/pm auto fail` | 切到 `fail` |
255
272
 
256
- 常见示例:
273
+ 最常见例子:
257
274
 
258
275
  ```text
259
- /config
260
276
  /config set wechat.replyMode final
261
- /config set logging.level debug
262
- /config set transport.permissionMode approve-reads
263
- /config set workspaces.backend.description backend repo
277
+ /pm set read
278
+ /pm auto deny
264
279
  ```
265
280
 
266
- 说明:
267
-
268
- - `/config` 只允许修改白名单字段,不支持任意路径写入
269
- - `agents.<name>.*` / `workspaces.<name>.*` 这类动态路径要求目标已经存在,不会自动创建
270
- - `/config set wechat.replyMode final` 修改的是**全局默认回复模式**
271
- - `/replymode final` 修改的是**当前逻辑会话覆盖**
272
- - 成功修改后会立即写回 `~/.weacpx/config.json`
273
- - 更完整的边界和支持字段,请参考 [docs/config-command.md](./docs/config-command.md)
274
-
275
- ### 权限策略
281
+ ### 多 Agent 编排
276
282
 
277
- `weacpx` 支持直接在微信里查看和切换 `acpx` 的权限策略。
283
+ README 里只保留用户视角的最常用命令。
278
284
 
279
285
  | 命令 | 说明 |
280
286
  |------|------|
281
- | `/pm` / `/permission` | 查看当前权限模式 |
282
- | `/pm set allow` | 切到 `approve-all` |
283
- | `/pm set read` | 切到 `approve-reads` |
284
- | `/pm set deny` | 切到 `deny-all` |
285
- | `/pm auto` | 查看当前非交互策略 |
286
- | `/pm auto deny` | 切到 `deny` |
287
- | `/pm auto fail` | 切到 `fail` |
287
+ | `/dg <agent> <task>` | 快速委派一个子任务 |
288
+ | `/group new <title>` | 创建任务组 |
289
+ | `/group add <groupId> <agent> <task>` | 往任务组里加子任务 |
290
+ | `/groups` | 查看任务组列表 |
291
+ | `/group <id>` | 查看单个任务组 |
292
+ | `/group cancel <groupId>` | 取消组内未结束任务 |
293
+ | `/tasks` | 查看当前主线下的任务 |
294
+ | `/task <id>` | 查看单个任务详情 |
295
+ | `/task approve <id>` | 批准 `needs_confirmation` 任务 |
296
+ | `/task cancel <id>` | 取消任务 |
297
+
298
+ 最常见例子:
299
+
300
+ ```text
301
+ /dg claude 审查当前方案的 3 个高风险点
302
+ /group new review
303
+ /group add review claude 审查接口设计
304
+ /tasks
305
+ /task approve task_123
306
+ ```
288
307
 
289
308
  说明:
290
309
 
291
- - `allow` 对应 `approve-all`
292
- - `read` 对应 `approve-reads`
293
- - `deny` 对应 `deny-all`
294
- - `/pm auto ...` 修改的是 `transport.nonInteractivePermissions`
295
- - 这些命令会把结果写回 `config.json`
310
+ - 当前会话就是主控会话
311
+ - 被委派出去的是独立子任务会话
312
+ - agent 发起的委派请求默认需要人工确认
313
+ - group 适合把 2~3 个独立子任务并行派出去,再把结果汇总回主线
314
+
315
+ 如果你想先理解什么时候该用 delegate、什么时候该开 group,请看:
296
316
 
297
- ### 推荐工作流
317
+ - [docs/weacpx-group-usage-guide.md](./docs/weacpx-group-usage-guide.md)
298
318
 
299
- 新建一个可聊天的会话:
319
+ ## 常见场景
320
+
321
+ ### 在手机上继续盯一个本地项目
300
322
 
301
323
  ```text
302
324
  /ss codex -d /absolute/path/to/backend
303
- 修一下最近这个接口超时问题
325
+ 看一下今天这个接口超时问题
304
326
  ```
305
327
 
306
- 在同一个聊天里切换多个会话:
328
+ ### 同一个聊天里切换两个项目
307
329
 
308
330
  ```text
309
- /ss new codex -d /absolute/path/to/backend
331
+ /ss codex -d /absolute/path/to/backend
332
+ /ss new codex -d /absolute/path/to/frontend
310
333
  /ss
311
334
  /use backend:codex
312
- 看一下接口日志
313
- /use backend:codex-2
314
- 看一下前端报错
335
+ /use frontend:codex
315
336
  ```
316
337
 
317
- 删除不再需要的资源:
318
-
319
- ```text
320
- /agent rm claude
321
- /workspace rm old-repo
322
- ```
323
-
324
- ### 微信内置登录相关指令
325
-
326
- 除了 `weacpx login` / `weacpx logout` 这类 CLI 命令外,微信通道里还支持少量内置 slash 指令:
327
-
328
- | 命令 | 说明 |
329
- |------|------|
330
- | `/clear` | 重置当前聊天绑定的会话上下文,效果等同于 `/session reset` |
331
- | `/logout` | 清除当前机器上已保存的所有微信账号凭证 |
332
-
333
- 说明:
334
-
335
- - `/logout` 的语义和 CLI 的 `weacpx logout` 一致,都是清凭证
336
- - 如果当前没有已登录账号,会提示“当前没有已登录的账号”
337
- - `/logout` 不会停止后台服务,也不会删除 `weacpx` 的工作区、agent、session 状态
338
-
339
338
  ## 配置与运行文件
340
339
 
341
340
  默认文件位置:
@@ -344,97 +343,70 @@ weacpx -v
344
343
  - 状态文件:`~/.weacpx/state.json`
345
344
  - 运行日志:`~/.weacpx/runtime/app.log`
346
345
 
347
- 后台运行时还会使用:
346
+ 更多运行时文件会放在 `~/.weacpx/runtime/` 下。
348
347
 
349
- - `~/.weacpx/runtime/daemon.pid`
350
- - `~/.weacpx/runtime/status.json`
351
- - `~/.weacpx/runtime/stdout.log`
352
- - `~/.weacpx/runtime/stderr.log`
348
+ ## 常见问题
353
349
 
354
- ### Transport 权限配置
350
+ ### `/ss new` 失败怎么办?
355
351
 
356
- `config.json` 中的 `transport` 支持以下权限字段:
352
+ 如果你在微信里创建会话失败,最常见的情况不是 `weacpx` 命令格式错了,而是底层会话没有成功创建。
357
353
 
358
- ```json
359
- {
360
- "transport": {
361
- "type": "acpx-bridge",
362
- "sessionInitTimeoutMs": 120000,
363
- "permissionMode": "approve-all",
364
- "nonInteractivePermissions": "deny"
365
- }
366
- }
367
- ```
354
+ 你可以先试这两步:
368
355
 
369
- 说明:
356
+ 1. 在终端里确认当前项目目录和 agent 本身可用
357
+ 2. 如果你熟悉 `acpx`,先手动创建一个会话,再在微信里挂回去
370
358
 
371
- - `permissionMode`: `approve-all`、`approve-reads`、`deny-all`
372
- - `nonInteractivePermissions`: `deny`、`fail`
373
- - 默认值分别是 `approve-all` 和 `deny`
374
- - 也可以直接在微信里通过 `/pm` 和 `/pm auto` 修改
359
+ 例如,你可以先在本地创建一个会话:
375
360
 
376
- ### 日志配置
361
+ ```bash
362
+ ./node_modules/.bin/acpx --verbose --cwd /absolute/workspace/path codex sessions new --name existing-demo
363
+ ```
377
364
 
378
- `config.json` 支持可选的 `logging` 配置:
365
+ 然后在微信里把它挂回来:
379
366
 
380
- ```json
381
- {
382
- "logging": {
383
- "level": "info",
384
- "maxSizeBytes": 2097152,
385
- "maxFiles": 5,
386
- "retentionDays": 7
387
- }
388
- }
367
+ ```text
368
+ /ss attach demo -a codex --ws backend --name existing-demo
389
369
  ```
390
370
 
391
- 说明:
371
+ ### `/mode <id>` 里的 `<id>` 是什么?
392
372
 
393
- - `level`: `error`、`info`、`debug`
394
- - `maxSizeBytes`: 单个 `app.log` 文件达到上限后会轮转
395
- - `maxFiles`: 最多保留多少个轮转文件
396
- - `retentionDays`: 每次启动时会清理超过保留天数的旧轮转日志
373
+ `/mode` 的可用值取决于你当前使用的 agent,`weacpx` 不会替你统一转换这些值。
397
374
 
398
- ## 注意事项
375
+ 当前比较明确的已知值:
399
376
 
400
- ### Adapter mode 参考
377
+ - `codex`: `plan`
378
+ - `cursor`: `agent`、`plan`、`ask`
401
379
 
402
- `acpx set-mode` / 计划中的 `/mode <id>` 本质上都是给底层 ACP session 发送 `session/set_mode`。
403
- 这里的 `<id>` 不是 `weacpx` 或 `acpx` 统一规定的枚举,而是**各 adapter 自己定义**的值;填错时通常会收到 adapter 返回的 `Invalid params` 一类错误。
380
+ 如果你不确定某个值能不能用,优先查对应 agent 的文档;如果填错,通常会直接收到无效参数之类的报错。
404
381
 
405
- 基于 `acpx` 内置 adapter 文档和各上游公开文档,当前能确认的信息如下:
382
+ ## 从源码运行
406
383
 
407
- | adapter | 已确认可用的 mode id | 说明 |
408
- |------|------|------|
409
- | `codex` | `plan` | `acpx` 自身示例明确使用过 `acpx codex set-mode plan`。`codex-acp` 还暴露了 `mode` 运行时配置项,但上游目前没有公开一份完整、稳定的 mode id 列表。 |
410
- | `cursor` | `agent`、`plan`、`ask` | Cursor 官方文档/更新日志公开提到 `Plan mode`、`Ask mode`;Cursor 官方论坛在 ACP `session/configure` 示例中展示过 `availableModes` 为 `agent` / `plan` / `ask`。 |
411
- | 其他内置 adapter | 暂无公开、稳定的 mode id 列表 | 包括 `claude`、`copilot`、`gemini`、`qoder`、`qwen`、`kimi`、`kiro`、`iflow`、`opencode`、`trae`、`droid`、`kilocode` 等。即使某些产品本身有“Ask / Agent / Plan”之类概念,其 ACP `set-mode` 可接受的精确字符串也往往没有在官方文档中写死。 |
384
+ 如果你是从仓库源码直接使用:
412
385
 
413
- 建议:
386
+ ```bash
387
+ bun install
388
+ bun run login
389
+ bun run dev
390
+ ```
414
391
 
415
- - 对 `codex`,优先把 `plan` 当作已知可用值。
416
- - 对 `cursor`,优先使用 `agent`、`plan`、`ask`。
417
- - 对其他 adapter,不要在 `weacpx` 里写死候选值;最好把 `/mode <id>` 设计成透传,由 adapter 自己决定是否接受。
418
- - 如果某个 adapter 后续补充了官方 mode 文档,再把它们补进这里。
392
+ ## 更多文档
419
393
 
420
- ### 如果 `/ss new` 失败
394
+ 如果你现在要做的是下面这些事,可以直接从这里继续:
421
395
 
422
- 当前最常见的问题仍然是底层 `acpx` named session 的运行时恢复,不一定是 `weacpx` 本身的逻辑问题。
396
+ ### 安装与配置
423
397
 
424
- 可以先在本地创建一个 named session,再在微信里 attach:
398
+ - 想看完整配置字段:[docs/config-reference.md](./docs/config-reference.md)
399
+ - 想在微信里改配置:[docs/config-command.md](./docs/config-command.md)
425
400
 
426
- ```bash
427
- ./node_modules/.bin/acpx --verbose --cwd /absolute/workspace/path codex sessions new --name existing-demo
428
- ```
401
+ ### 日常使用
429
402
 
430
- 然后在微信里:
403
+ - 想查看完整微信命令参考:[docs/commands.md](./docs/commands.md)
404
+ - 想理解什么时候该用 delegate、什么时候该开 group:[docs/weacpx-group-usage-guide.md](./docs/weacpx-group-usage-guide.md)
431
405
 
432
- ```text
433
- /ss attach demo -a codex --ws backend --name existing-demo
434
- ```
406
+ ### 排错与验证
435
407
 
436
- ## 更多文档
408
+ - 想跑测试或了解测试分层:[docs/testing.md](./docs/testing.md)
409
+
410
+ ### 开发与贡献
437
411
 
438
- - 配置参考:[docs/config-reference.md](./docs/config-reference.md)
439
- - 测试说明:[docs/testing.md](./docs/testing.md)
440
- - 开发与贡献:[docs/development.md](./docs/development.md)
412
+ - 想从源码开发、调试或参与贡献:[docs/developments.md](./docs/developments.md)