@ganglion/xacpx 0.8.0 → 0.8.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.
Files changed (3) hide show
  1. package/README.md +264 -246
  2. package/dist/cli.js +3 -1
  3. package/package.json +6 -3
package/README.md CHANGED
@@ -1,144 +1,144 @@
1
1
  # xacpx
2
2
 
3
- > 用微信、飞书或元宝远程驱动 CodexClaude Code acpx 会话。
3
+ > Remotely drive Codex, Claude Code, and other acpx sessions from WeChat, Feishu, or Yuanbao.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/@ganglion/xacpx?style=flat-square)](https://www.npmjs.com/package/@ganglion/xacpx)
6
6
  [![Node.js Version](https://img.shields.io/node/v/@ganglion/xacpx?style=flat-square)](https://nodejs.org)
7
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/@ganglion/xacpx?style=flat-square)](./LICENSE)
9
9
 
10
- ![weacpx logo](assets/weacpx.jpg)
10
+ English · **[中文](./docs/zh/README_zh.md)**
11
11
 
12
- ## 这是什么
12
+ ## What is this
13
13
 
14
- `xacpx` 是一个可以通过微信、飞书或元宝直接控制 Codex / Claude Code / Gemini / OpenCode ACP Agent 的工具。它把聊天消息通过 `acpx` 连接到 Agent CLI 会话上,让你直接在手机里:
14
+ `xacpx` is a tool that lets you control ACP agents such as Codex / Claude Code / Gemini / OpenCode directly from WeChat, Feishu, or Yuanbao. It connects chat messages to your agent CLI sessions through `acpx`, so you can, right from your phone:
15
15
 
16
- - 新建和切换会话
17
- - Agent 继续在指定项目目录里工作
18
- - 查看流式回复、最终结果和工具调用摘要
19
- - 调整权限策略
20
- - 在需要时做多 Agent 编排
16
+ - Create and switch between sessions
17
+ - Have the agent keep working in a specific project directory
18
+ - View streaming replies, final results, and tool-call summaries
19
+ - Adjust permission policies
20
+ - Orchestrate multiple agents when needed
21
21
 
22
- 如果你需要临时远程编码或办公,`xacpx` 提供的是一个方便快捷的**远程入口**,让你在微信或飞书里就能随时随地干活。
22
+ If you need to code or work remotely on a temporary basis, `xacpx` gives you a fast, convenient **remote entry point** so you can get things done from WeChat or Feishu anytime, anywhere.
23
23
 
24
- ## 适合谁
24
+ ## Who it's for
25
25
 
26
- `xacpx` 适合轻量临时使用多 Agent 办公的用户。你可以用微信、飞书或元宝盯任务、发指令、看结果,并在同一个聊天里管理多个会话。
26
+ `xacpx` suits users who want lightweight, on-demand multi-agent work. You can watch tasks, send commands, and view results from WeChat, Feishu, or Yuanbao, and manage multiple sessions within the same chat.
27
27
 
28
- > 日常使用优先记 `/ss`:它负责创建或复用 xacpx 逻辑会话。如果你想接入本地 Codex Agent 已有的原生会话,再用 `/ssn`;进阶说明见 [docs/native-sessions.md](./docs/native-sessions.md)
28
+ > For everyday use, remember `/ss` first: it creates or reuses an xacpx logical session. If you want to attach to an existing native session of a local agent such as Codex, use `/ssn`; see [docs/native-sessions.md](./docs/native-sessions.md) for advanced details.
29
29
 
30
- ## 5 分钟快速开始
30
+ ## 5-minute quick start
31
31
 
32
- ### 前置条件
32
+ ### Prerequisites
33
33
 
34
- 开始前,你至少需要:
34
+ Before you start, you need at least:
35
35
 
36
- - Node.js 22+ Bun
37
- - 已可用的 Codex / Claude Code / Gemini / OpenCode 等你要使用的 Agent CLI
38
- - 一台装了微信、飞书或元宝的手机
36
+ - Node.js 22+ or Bun
37
+ - A working agent CLI you intend to use, such as Codex / Claude Code / Gemini / OpenCode
38
+ - A phone with WeChat, Feishu, or Yuanbao installed
39
39
 
40
- > 微信频道基于 `weixin-agent-sdk` 工作,飞书频道使用飞书自建应用凭据,元宝频道使用 `appKey` / `appSecret`;底层 Agent 会话由 `acpx` 驱动。正常情况下,你不需要额外全局安装 `acpx`。
40
+ > The WeChat channel works on top of `weixin-agent-sdk`, the Feishu channel uses Feishu custom-app credentials, and the Yuanbao channel uses `appKey` / `appSecret`; the underlying agent sessions are driven by `acpx`. Normally you don't need to install `acpx` globally.
41
41
 
42
- ### 安装
42
+ ### Install
43
43
 
44
44
  ```bash
45
45
  npm install -g @ganglion/xacpx --registry=https://registry.npmjs.org
46
- #
46
+ # or
47
47
  bun add -g @ganglion/xacpx
48
48
  ```
49
49
 
50
- ### 登录微信
50
+ ### Log in to WeChat
51
51
 
52
52
  ```bash
53
53
  xacpx login
54
54
  ```
55
55
 
56
- 终端会显示二维码,请继续用微信扫码登录。
56
+ The terminal will show a QR code; scan it with WeChat to log in.
57
57
 
58
- 如果你想使用飞书或元宝而不是微信,请先看下面的“切换/添加其它频道”。
58
+ If you want to use Feishu or Yuanbao instead of WeChat, see "Switch / add other channels" below first.
59
59
 
60
- ### 启动服务
60
+ ### Start the service
61
61
 
62
62
  ```bash
63
63
  xacpx start
64
64
  ```
65
65
 
66
- ### 在微信里创建第一个会话
66
+ ### Create your first session in WeChat
67
67
 
68
- 把下面两条消息发到微信:
68
+ Send these two messages in WeChat:
69
69
 
70
70
  ```text
71
71
  /ss codex -d /absolute/path/to/your/repo
72
72
  /help
73
73
  ```
74
74
 
75
- 然后直接发普通文本,例如:
75
+ Then just send plain text, for example:
76
76
 
77
77
  ```text
78
78
  hello
79
79
  ```
80
80
 
81
- 如果一切正常,普通文本会进入当前会话,Agent 的回复会回到微信。
81
+ If everything works, plain text goes into the current session and the agent's reply comes back to WeChat.
82
82
 
83
- ### 切换/添加其它频道
83
+ ### Switch / add other channels
84
84
 
85
- 微信是内置默认频道。飞书和元宝以官方插件包分发,第三方频道也走同样的插件流程。如果记不住包名,先看一眼官方插件清单:
85
+ WeChat is the built-in default channel. Feishu and Yuanbao are distributed as official plugin packages, and third-party channels follow the same plugin flow. If you can't remember the package names, check the official plugin list first:
86
86
 
87
87
  ```bash
88
88
  xacpx plugin known
89
- # 安装:xacpx plugin add <package>
89
+ # Install: xacpx plugin add <package>
90
90
  ```
91
91
 
92
92
  ```bash
93
- # 飞书
93
+ # Feishu
94
94
  xacpx plugin add @ganglion/xacpx-channel-feishu
95
- xacpx channel add feishu # 按提示输入 appId/appSecret
95
+ xacpx channel add feishu # enter appId/appSecret when prompted
96
96
  xacpx restart
97
97
 
98
- # 元宝
98
+ # Yuanbao
99
99
  xacpx plugin add @ganglion/xacpx-channel-yuanbao
100
- xacpx channel add yuanbao # 按提示输入 appKey/appSecret
100
+ xacpx channel add yuanbao # enter appKey/appSecret when prompted
101
101
  xacpx restart
102
102
  ```
103
103
 
104
- 完整的密钥配置、参数、`enable/disable/rm` 等管理命令见 [docs/channel-management.md](./docs/channel-management.md)。如果你想自己写一个频道插件,见 [docs/plugin-development.md](./docs/plugin-development.md)
104
+ For full credential configuration, parameters, and management commands such as `enable/disable/rm`, see [docs/channel-management.md](./docs/channel-management.md). If you want to write your own channel plugin, see [docs/plugin-development.md](./docs/plugin-development.md).
105
105
 
106
- ## 你的日常使用流程
106
+ ## Your everyday workflow
107
107
 
108
- 最常见的使用顺序只有四步:
108
+ The most common sequence is just four steps:
109
109
 
110
- 1. **启动后台服务**:`xacpx start`
111
- 2. **创建或切换会话**:`/ss ...`、`/use ...`
112
- 3. **直接发普通文本**:让当前会话继续工作
113
- 4. **必要时查看状态或取消当前任务**:`/status`、`/cancel`
110
+ 1. **Start the background service**: `xacpx start`
111
+ 2. **Create or switch sessions**: `/ss ...`, `/use ...`
112
+ 3. **Send plain text directly**: let the current session keep working
113
+ 4. **Check status or cancel the current task when needed**: `/status`, `/cancel`
114
114
 
115
- ### 1) 创建会话
115
+ ### 1) Create a session
116
116
 
117
- 最常用命令:
117
+ The most common command:
118
118
 
119
119
  ```text
120
120
  /ss codex -d /absolute/path/to/your/repo
121
121
  ```
122
122
 
123
- 它会使用 `codex`,绑定这个工作目录,并自动切换到新会话。
123
+ It uses `codex`, binds this working directory, and automatically switches to the new session.
124
124
 
125
- ### 2) 发普通消息
125
+ ### 2) Send plain messages
126
126
 
127
- `/` 开头的文本,都会发送到当前会话。
127
+ Any text not starting with `/` is sent to the current session.
128
128
 
129
129
  ```text
130
- 修一下最近这个接口超时问题
130
+ Fix this recent API timeout issue
131
131
  ```
132
132
 
133
- ### 3) 看回复
133
+ ### 3) View replies
134
134
 
135
- `xacpx` 支持三种常用回复模式:
135
+ `xacpx` supports three common reply modes:
136
136
 
137
- - `stream`:流式返回中间文本
138
- - `final`:只返回最终结果
139
- - `verbose`:默认,在流式文本之外,额外显示工具调用摘要
137
+ - `stream`: stream back intermediate text
138
+ - `final`: return only the final result
139
+ - `verbose`: the default; in addition to streaming text, also shows tool-call summaries
140
140
 
141
- 例如 `verbose` 模式下,你会看到:
141
+ For example, in `verbose` mode you'll see:
142
142
 
143
143
  ```text
144
144
  📖 sed -n '1,220p' README.md
@@ -147,47 +147,47 @@ xacpx restart
147
147
  ✏️ Edit parse-command.ts
148
148
  ```
149
149
 
150
- ### 4) 切换会话
150
+ ### 4) Switch sessions
151
151
 
152
152
  ```text
153
153
  /ss
154
154
  /use backend:codex
155
155
  ```
156
156
 
157
- 这样你可以在同一个微信聊天里切换不同项目、不同 agent 的会话。
157
+ This lets you switch between sessions for different projects and different agents within the same WeChat chat.
158
158
 
159
- ## 常用 CLI 命令
159
+ ## Common CLI commands
160
160
 
161
- 这些命令在电脑终端里运行。
161
+ These commands run in a terminal on your computer.
162
162
 
163
- | 命令 | 说明 |
163
+ | Command | Description |
164
164
  |------|------|
165
- | `xacpx login` | 登录微信 |
166
- | `xacpx logout` | 清除本机保存的微信登录凭证 |
167
- | `xacpx run` | 前台运行,适合调试 |
168
- | `xacpx start` | 后台启动服务 |
169
- | `xacpx status` | 查看后台状态、PID、配置路径、日志路径 |
170
- | `xacpx stop` | 停止后台实例 |
171
- | `xacpx restart` | 重启后台实例,让频道配置变更生效 |
172
- | `xacpx update [--all\|<name>]` | 检查并更新 xacpx 与已安装插件;安装了插件时会交互式选择更新项 |
173
- | `xacpx channel list` | 查看已配置的消息频道 |
174
- | `xacpx plugin known` | 查看官方插件清单(飞书/元宝包名) |
175
- | `xacpx plugin add @ganglion/xacpx-channel-feishu && xacpx channel add feishu` | 安装并添加飞书频道,会提示输入飞书应用凭据 |
176
- | `xacpx plugin add @ganglion/xacpx-channel-yuanbao && xacpx channel add yuanbao` | 安装并添加元宝频道,会提示输入元宝 appKey/appSecret |
177
- | `xacpx doctor` | 运行环境诊断 |
178
- | `xacpx version` | 查看当前版本 |
179
- | `xacpx agent list` | 查看本机已注册的 agent |
180
- | `xacpx agent add <name>` | 从内置模板添加 agent;已存在且配置不同的同名 agent 不会被覆盖 |
181
- | `xacpx agent rm <name>` | 删除 agent |
182
- | `xacpx workspace list` | 查看本机已注册的 workspace |
183
- | `xacpx workspace add [name] [--raw]` | 把当前目录注册成 workspace;不传 `name` 时使用当前目录名,含特殊字符的名称会被自动规范化 |
184
- | `xacpx workspace rm <name>` | 删除 workspace |
185
- | `xacpx later list` / `xacpx lt list` | 在终端查看本机待执行定时任务 |
186
- | `xacpx later cancel <id>` / `xacpx lt cancel <id>` | 在终端取消本机待执行定时任务 |
187
-
188
- 首次运行 `xacpx start` `xacpx run` 时,如果没有会话、workspace 和插件,CLI 会询问是否把当前目录创建为 workspace,并选择一个内置 agent 模板;服务启动后会通过正常会话创建流程创建初始 acpx 会话。
189
-
190
- `workspace` 也可以简写为 `ws`:
165
+ | `xacpx login` | Log in to WeChat |
166
+ | `xacpx logout` | Clear the WeChat login credentials saved on this machine |
167
+ | `xacpx run` | Run in the foreground, useful for debugging |
168
+ | `xacpx start` | Start the service in the background |
169
+ | `xacpx status` | Show background status, PID, config path, and log path |
170
+ | `xacpx stop` | Stop the background instance |
171
+ | `xacpx restart` | Restart the background instance so channel config changes take effect |
172
+ | `xacpx update [--all\|<name>]` | Check and update xacpx and installed plugins; when plugins are installed, it interactively lets you choose what to update |
173
+ | `xacpx channel list\|show\|add\|rm\|enable\|disable [--account <id>]` | Manage message channels; `--account <id>` targets one bot when several share a channel (multi-bot) |
174
+ | `xacpx plugin list\|add\|update\|remove\|enable\|disable\|doctor\|known` | Manage plugins: list/install/update/remove, toggle, run `doctor`, or list official packages with `known` |
175
+ | `xacpx plugin add @ganglion/xacpx-channel-feishu && xacpx channel add feishu` | Install and add the Feishu channel; prompts for Feishu app credentials |
176
+ | `xacpx plugin add @ganglion/xacpx-channel-yuanbao && xacpx channel add yuanbao` | Install and add the Yuanbao channel; prompts for Yuanbao appKey/appSecret |
177
+ | `xacpx doctor` | Run environment diagnostics |
178
+ | `xacpx version` | Show the current version |
179
+ | `xacpx agent list` | List agents registered on this machine |
180
+ | `xacpx agent add <name>` | Add an agent from a built-in template; an existing agent of the same name with a different config is not overwritten |
181
+ | `xacpx agent rm <name>` | Remove an agent |
182
+ | `xacpx workspace list` | List workspaces registered on this machine |
183
+ | `xacpx workspace add [name] [--raw]` | Register the current directory as a workspace; without `name`, uses the current directory name, and names with special characters are normalized automatically |
184
+ | `xacpx workspace rm <name>` | Remove a workspace |
185
+ | `xacpx later list` / `xacpx lt list` | List this machine's pending scheduled tasks in the terminal |
186
+ | `xacpx later cancel <id>` / `xacpx lt cancel <id>` | Cancel a pending scheduled task in the terminal |
187
+
188
+ The first time you run `xacpx start` or `xacpx run`, if there are no sessions, workspaces, or plugins, the CLI asks whether to register the current directory as a workspace and lets you choose a built-in agent template; after the service starts, it creates the initial acpx session through the normal session-creation flow.
189
+
190
+ `workspace` can also be abbreviated as `ws`:
191
191
 
192
192
  ```bash
193
193
  xacpx ws add
@@ -195,19 +195,19 @@ xacpx ws list
195
195
  xacpx ws rm backend
196
196
  ```
197
197
 
198
- ### `workspace` CLI 怎么用
198
+ ### How to use the `workspace` CLI
199
199
 
200
- `xacpx workspace` 用来在电脑本机维护 `~/.xacpx/config.json` 里的 `workspaces` 配置。它适合先在终端里注册常用项目目录,然后在微信里用 `--ws <name>` 直接引用。
200
+ `xacpx workspace` maintains the `workspaces` config in `~/.xacpx/config.json` on your local machine. It's good for registering frequently used project directories in the terminal first, then referencing them directly in WeChat with `--ws <name>`.
201
201
 
202
- | 命令 | 说明 |
202
+ | Command | Description |
203
203
  |------|------|
204
- | `xacpx workspace list` | 列出已注册的 workspace 及其路径 |
205
- | `xacpx workspace add` | 把当前目录注册为 workspace,名称默认取当前目录名(自动规范化) |
206
- | `xacpx workspace add <name>` | 把当前目录注册为指定名称(含特殊字符时自动规范化) |
207
- | `xacpx workspace add [name] --raw` | 保留原始名称(含空格等),后续命令需要用引号引用 |
208
- | `xacpx workspace rm <name>` | 删除指定 workspace |
204
+ | `xacpx workspace list` | List registered workspaces and their paths |
205
+ | `xacpx workspace add` | Register the current directory as a workspace, defaulting the name to the current directory name (normalized automatically) |
206
+ | `xacpx workspace add <name>` | Register the current directory under a specific name (normalized if it contains special characters) |
207
+ | `xacpx workspace add [name] --raw` | Keep the original name (including spaces, etc.); later commands must quote it |
208
+ | `xacpx workspace rm <name>` | Remove a specific workspace |
209
209
 
210
- 常见用法:
210
+ Common usage:
211
211
 
212
212
  ```bash
213
213
  cd /absolute/path/to/backend
@@ -220,27 +220,27 @@ xacpx ws list
220
220
  xacpx ws rm frontend
221
221
  ```
222
222
 
223
- 注册后,你可以在微信里直接使用:
223
+ Once registered, you can use it directly in WeChat:
224
224
 
225
225
  ```text
226
226
  /ss codex --ws backend
227
227
  /ss new claude --ws frontend
228
228
  ```
229
229
 
230
- 注意:`workspace add` 总是注册**当前终端所在目录**。如果不传名称,会用当前目录名作为 workspace 名称。含空格、中文等字符的名称会被自动规范化为 `[a-zA-Z0-9._-]+`(例如目录 `My Project` 会保存为 `My-Project`),重名时追加 `-2`、`-3`。如需保留原始名称,加 `--raw`;之后 `xacpx workspace rm`、`/ws rm`、`--ws <name>` 都需要用引号引用,例如 `xacpx workspace rm "My Project"`。
230
+ Note: `workspace add` always registers the **directory the terminal is currently in**. Without a name, it uses the current directory name as the workspace name. Names containing spaces, Chinese characters, etc. are normalized automatically to `[a-zA-Z0-9._-]+` (for example, the directory `My Project` is saved as `My-Project`), with `-2`, `-3` appended on collisions. To keep the original name, add `--raw`; afterwards `xacpx workspace rm`, `/ws rm`, and `--ws <name>` all need quoting, for example `xacpx workspace rm "My Project"`.
231
231
 
232
- ### `agent` CLI 怎么用
232
+ ### How to use the `agent` CLI
233
233
 
234
- `xacpx agent` 用来在电脑本机维护 `~/.xacpx/config.json` 里的 `agents` 配置;`agents` 是同等别名。
234
+ `xacpx agent` maintains the `agents` config in `~/.xacpx/config.json` on your local machine; `agents` is an equivalent alias.
235
235
 
236
- | 命令 | 说明 |
236
+ | Command | Description |
237
237
  |------|------|
238
- | `xacpx agent list` | 列出已注册的 agent |
239
- | `xacpx agent templates` | 列出可添加的内置模板 |
240
- | `xacpx agent add <name>` | 从内置模板添加 agent,例如 `kimi`、`opencode` |
241
- | `xacpx agent rm <name>` | 删除指定 agent |
238
+ | `xacpx agent list` | List registered agents |
239
+ | `xacpx agent templates` | List the built-in templates you can add |
240
+ | `xacpx agent add <name>` | Add an agent from a built-in template, e.g. `kimi`, `opencode` |
241
+ | `xacpx agent rm <name>` | Remove a specific agent |
242
242
 
243
- 常见用法:
243
+ Common usage:
244
244
 
245
245
  ```bash
246
246
  xacpx agent templates
@@ -249,7 +249,7 @@ xacpx agents list
249
249
  xacpx agent rm kimi
250
250
  ```
251
251
 
252
- ### `doctor` 怎么用
252
+ ### How to use `doctor`
253
253
 
254
254
  ```bash
255
255
  xacpx doctor
@@ -258,29 +258,47 @@ xacpx doctor --smoke
258
258
  xacpx doctor --smoke --agent codex --workspace backend
259
259
  ```
260
260
 
261
- 说明:
261
+ Notes:
262
262
 
263
- - `--verbose` 会展开每项检查的细节
264
- - `--smoke` 会额外执行一次真实 transport 级别的最小 prompt 检查
265
- - `--agent` / `--workspace` 只影响 `--smoke`
266
- - 如果不传 `--smoke`,相关检查会显示为 `SKIP`
263
+ - `--verbose` expands the details of each check
264
+ - `--smoke` additionally runs a minimal real transport-level prompt check
265
+ - `--agent` / `--workspace` only affect `--smoke`
266
+ - Without `--smoke`, the related checks show as `SKIP`
267
267
 
268
- ## 常用聊天命令
268
+ ### How to use `update`
269
269
 
270
- 这些命令在微信或飞书聊天里发送。完整命令参考见:[docs/commands.md](./docs/commands.md)。
270
+ `xacpx update` checks for and installs new versions of xacpx itself and your installed channel plugins.
271
271
 
272
- ### Agent 管理
272
+ ```bash
273
+ xacpx update # interactive: pick what to update
274
+ xacpx update --all # update everything (core + all plugins) non-interactively
275
+ xacpx update <name> # update a single target (the core, or a specific plugin package)
276
+ ```
277
+
278
+ Notes:
279
+
280
+ - When plugins are installed, the bare `xacpx update` is interactive and lets you choose which targets to update.
281
+ - In a non-interactive environment, updating the core or plugins needs explicit confirmation: use `xacpx update --all`, or name the target with `xacpx update <name>`.
282
+ - `update` covers the core package and channel plugins; to manage a single plugin's version directly, see `xacpx plugin update <name>` ([docs/plugin-development.md](./docs/plugin-development.md)).
283
+ - After updating, run `xacpx restart` so a running daemon loads the new version.
284
+ - Cross-package rename migration: once the project's renamed successor package is published, running `weacpx update` will offer to migrate you across to it automatically (you confirm the switch). Until then this is dormant and `update` behaves as a normal self-update.
285
+
286
+ ## Common chat commands
287
+
288
+ These commands are sent in a WeChat or Feishu chat. For the full command reference, see [docs/commands.md](./docs/commands.md).
289
+
290
+ ### Agent management
273
291
 
274
- 默认配置通常已包含 `codex` `claude`。如果你要使用其它 acpx 支持的 agent,可以先用 `/agent add <name>` 从内置模板添加。
292
+ The default config usually already includes `codex` and `claude`. If you want to use another acpx-supported agent, you can add it from a built-in template with `/agent add <name>`.
275
293
 
276
- | 命令 | 说明 |
294
+ | Command | Description |
277
295
  |------|------|
278
- | `/agents` | 查看 agent 列表 |
279
- | `/agent add gemini` | 添加 `Gemini` Agent |
280
- | `/agent add opencode` | 添加 `OpenCode` Agent |
281
- | `/agent rm <name>` | 删除 agent |
296
+ | `/agents` | List agents |
297
+ | `/agent add gemini` | Add the `Gemini` agent |
298
+ | `/agent add opencode` | Add the `OpenCode` agent |
299
+ | `/agent rm <name>` | Remove an agent |
282
300
 
283
- 当前内置模板与 acpx built-in agents 对齐:
301
+ The current built-in templates align with acpx's built-in agents:
284
302
 
285
303
  ```text
286
304
  codex, claude, pi, openclaw, gemini, cursor, copilot, droid,
@@ -288,37 +306,37 @@ factory-droid, factorydroid, iflow, kilocode, kimi, kiro,
288
306
  opencode, qoder, qwen, trae
289
307
  ```
290
308
 
291
- 这些模板只写入 `driver`,实际启动命令交给 acpx 解析;例如 `/agent add kimi` 会保存 `{ "driver": "kimi" }`。完整命令说明见 [docs/commands.md](./docs/commands.md),配置字段见 [docs/config-reference.md](./docs/config-reference.md)
309
+ These templates only write `driver`; the actual launch command is resolved by acpx. For example, `/agent add kimi` saves `{ "driver": "kimi" }`. For full command docs see [docs/commands.md](./docs/commands.md), and for config fields see [docs/config-reference.md](./docs/config-reference.md).
292
310
 
293
- ### Workspace 管理
311
+ ### Workspace management
294
312
 
295
- | 命令 | 说明 |
313
+ | Command | Description |
296
314
  |------|------|
297
- | `/workspaces` / `/workspace` / `/ws` | 查看 workspace 列表 |
298
- | `/ws new <name> -d <path> [--raw]` | 添加 workspace,`path` 是电脑上的绝对路径,Windows 不用区分正反斜杠;含空格/中文等特殊字符的名称会被自动规范化,--raw 保留原名 |
299
- | `/workspace rm <name>` | 删除 workspace |
315
+ | `/workspaces` / `/workspace` / `/ws` | List workspaces |
316
+ | `/ws new <name> -d <path> [--raw]` | Add a workspace; `path` is an absolute path on your computer, and Windows does not distinguish forward/back slashes; names with special characters such as spaces/Chinese are normalized automatically, and --raw keeps the original name |
317
+ | `/workspace rm <name>` | Remove a workspace |
300
318
 
301
- ### Session 会话
319
+ ### Sessions
302
320
 
303
- | 命令 | 说明 |
321
+ | Command | Description |
304
322
  |------|------|
305
- | `/sessions` / `/session` / `/ss` | 查看会话列表 |
306
- | `/ss <agent> (-d <path> \| --ws <name>)` | 创建或复用当前最常用的会话 |
307
- | `/ss new <agent> (-d <path> \| --ws <name>)` | 强制新建会话 |
308
- | `/ssn <agent> (-d <path> \| --ws <name>)` | 接入本地已有的 Agent 原生会话,详见 [native sessions](./docs/native-sessions.md) |
309
- | `/use <alias>` | 切换当前会话 |
310
- | `/status` | 查看当前会话状态 |
311
- | `/mode` / `/mode <id>` | 查看或设置底层 `acpx` mode |
312
- | `/replymode` | 查看当前回复模式 |
313
- | `/replymode stream` | 流式回复 |
314
- | `/replymode verbose` | 流式 + 工具调用摘要 |
315
- | `/replymode final` | 只返回最终结果 |
316
- | `/replymode reset` | 回退到全局默认 reply mode |
317
- | `/session reset` | 重置当前会话上下文 |
318
- | `/clear` | `/session reset` 的快捷别名 |
319
- | `/cancel` / `/stop` | 停止当前任务 |
320
-
321
- 建议你优先记住这三个:
323
+ | `/sessions` / `/session` / `/ss` | List sessions |
324
+ | `/ss <agent> (-d <path> \| --ws <name>)` | Create or reuse your current most-used session |
325
+ | `/ss new <agent> (-d <path> \| --ws <name>)` | Force-create a new session |
326
+ | `/ssn <agent> (-d <path> \| --ws <name>)` | Attach to an existing native session of a local agent; see [native sessions](./docs/native-sessions.md) |
327
+ | `/use <alias>` | Switch the current session |
328
+ | `/status` | Show the current session status |
329
+ | `/mode` / `/mode <id>` | View or set the underlying `acpx` mode |
330
+ | `/replymode` | Show the current reply mode |
331
+ | `/replymode stream` | Streaming replies |
332
+ | `/replymode verbose` | Streaming + tool-call summaries |
333
+ | `/replymode final` | Return only the final result |
334
+ | `/replymode reset` | Fall back to the global default reply mode |
335
+ | `/session reset` | Reset the current session context |
336
+ | `/clear` | Shortcut alias for `/session reset` |
337
+ | `/cancel` / `/stop` | Stop the current task |
338
+
339
+ We suggest remembering these three first:
322
340
 
323
341
  ```text
324
342
  /ss codex -d /absolute/path/to/repo
@@ -326,51 +344,51 @@ opencode, qoder, qwen, trae
326
344
  /cancel
327
345
  ```
328
346
 
329
- 如果要接入本地 Codex Agent 已有的原生会话,用 `/ssn codex -d /absolute/path/to/repo`;完整语义见 [docs/native-sessions.md](./docs/native-sessions.md)
347
+ To attach to an existing native session of a local agent such as Codex, use `/ssn codex -d /absolute/path/to/repo`; for full semantics see [docs/native-sessions.md](./docs/native-sessions.md).
330
348
 
331
- ### 定时任务(/later
349
+ ### Scheduled tasks (/later)
332
350
 
333
- agent 在未来某个时间自动收到一条消息。**默认在一个为该任务新建的临时会话里执行**(沿用创建时当前会话的 agent 与工作区,对话历史全新,跑完即销毁);加 `--bind` 则发送到创建时绑定的当前会话。到点后把消息作为普通 prompt 投递,结果推回原聊天。
351
+ Have the agent automatically receive a message at some point in the future. **By default it runs in a temporary session created just for that task** (inheriting the agent and workspace of the current session at creation time, with a fresh conversation history, destroyed once finished); adding `--bind` sends it to the current session bound at creation time. When the time comes, the message is delivered as a normal prompt and the result is pushed back to the original chat.
334
352
 
335
- | 命令 | 说明 |
353
+ | Command | Description |
336
354
  |------|------|
337
- | `/lt <时间> <消息>` | 创建定时任务(默认临时会话执行;`/later` 同义) |
338
- | `/lt --bind <时间> <消息>` | 改为发送到当前会话 |
339
- | `/lt list` | 查看全局待执行任务 |
340
- | `/lt cancel <id>` | 取消待执行任务 |
355
+ | `/lt <time> <message>` | Create a scheduled task (runs in a temporary session by default; `/later` is a synonym) |
356
+ | `/lt --bind <time> <message>` | Send to the current session instead |
357
+ | `/lt list` | List globally pending tasks |
358
+ | `/lt cancel <id>` | Cancel a pending task |
341
359
 
342
- 最常见例子:
360
+ The most common examples:
343
361
 
344
362
  ```text
345
- /lt in 2h 检查 CI 是否通过 # 临时会话(默认)
346
- /lt --bind 明天 09:00 PR # 绑定当前会话
363
+ /lt in 2h check whether CI passes # temporary session (default)
364
+ /lt --bind tomorrow 09:00 review the PR # bound to the current session
347
365
  /lt list
348
366
  ```
349
367
 
350
- 说明:
368
+ Notes:
351
369
 
352
- - 默认临时会话执行,`--bind` 绑定当前会话;默认模式可用配置 `later.defaultMode`(`temp` / `bind`,默认 `temp`)修改
353
- - 只支持一次性任务,时间必须在 10 秒之后、7 天之内
354
- - 时间格式是固定白名单(相对时间 / 今天·明天·后天 / 星期几 + 时刻),不支持自然语言
355
- - 普通对话中 agent 也可以通过当前会话内部工具创建、查看与取消定时任务(`scheduled_create` / `scheduled_list` / `scheduled_cancel`);路由和权限由 daemon 从当前聊天会话解析,外部 `mcp-stdio` 不暴露这些工具
356
- - 终端里也可以用 `xacpx later list` / `xacpx later cancel <id>` 管理待执行任务;CLI 只做查看和取消,不创建定时任务
357
- - 完整时间格式、临时/绑定模式、任务状态与限制见 [docs/later-command.md](./docs/later-command.md)
370
+ - Runs in a temporary session by default; `--bind` binds to the current session. The default mode can be changed via the config `later.defaultMode` (`temp` / `bind`, default `temp`)
371
+ - Only one-time tasks are supported; the time must be more than 10 seconds and within 7 days from now
372
+ - The time format is a fixed whitelist (relative time / today·tomorrow·day-after-tomorrow / weekday + time); natural language is not supported
373
+ - In normal conversation, the agent can also create, list, and cancel scheduled tasks via the current session's internal tools (`scheduled_create` / `scheduled_list` / `scheduled_cancel`); routing and permissions are resolved by the daemon from the current chat session, and the external `mcp-stdio` does not expose these tools
374
+ - You can also manage pending tasks from the terminal with `xacpx later list` / `xacpx later cancel <id>`; the CLI only lists and cancels, it does not create scheduled tasks
375
+ - For full time formats, temporary/bound modes, task status, and limits, see [docs/later-command.md](./docs/later-command.md)
358
376
 
359
- ### 配置与权限
377
+ ### Config and permissions
360
378
 
361
- | 命令 | 说明 |
379
+ | Command | Description |
362
380
  |------|------|
363
- | `/config` | 查看支持通过聊天命令修改的配置路径 |
364
- | `/config set <path> <value>` | 修改一个白名单配置项 |
365
- | `/pm` / `/permission` | 查看当前权限模式 |
366
- | `/pm set allow` | 切到 `approve-all` |
367
- | `/pm set read` | 切到 `approve-reads` |
368
- | `/pm set deny` | 切到 `deny-all` |
369
- | `/pm auto` | 查看当前非交互权限策略 |
370
- | `/pm auto deny` | 切到 `deny` |
371
- | `/pm auto fail` | 切到 `fail` |
372
-
373
- 最常见例子:
381
+ | `/config` | Show the config paths that can be changed via chat commands |
382
+ | `/config set <path> <value>` | Change a whitelisted config item |
383
+ | `/pm` / `/permission` | Show the current permission mode |
384
+ | `/pm set allow` | Switch to `approve-all` |
385
+ | `/pm set read` | Switch to `approve-reads` |
386
+ | `/pm set deny` | Switch to `deny-all` |
387
+ | `/pm auto` | Show the current non-interactive permission policy |
388
+ | `/pm auto deny` | Switch to `deny` |
389
+ | `/pm auto fail` | Switch to `fail` |
390
+
391
+ The most common examples:
374
392
 
375
393
  ```text
376
394
  /config set wechat.replyMode final
@@ -378,53 +396,53 @@ opencode, qoder, qwen, trae
378
396
  /pm auto deny
379
397
  ```
380
398
 
381
- ### Agent 编排
399
+ ### Multi-agent orchestration
382
400
 
383
- README 里只保留用户视角的最常用命令。
401
+ The README keeps only the most common user-facing commands.
384
402
 
385
- | 命令 | 说明 |
403
+ | Command | Description |
386
404
  |------|------|
387
- | `/dg <agent> <task>` | 快速委派一个子任务 |
388
- | `/tasks` | 查看当前主线下的任务 |
389
- | `/task <id>` | 查看单个任务详情 |
390
- | `/task approve <id>` | 批准 `needs_confirmation` 任务 |
391
- | `/task cancel <id>` | 取消任务;取消一个尚未批准的任务等同于拒绝 |
405
+ | `/dg <agent> <task>` | Quickly delegate a subtask |
406
+ | `/tasks` | List tasks under the current main line |
407
+ | `/task <id>` | Show details of a single task |
408
+ | `/task approve <id>` | Approve a `needs_confirmation` task |
409
+ | `/task cancel <id>` | Cancel a task; cancelling a not-yet-approved task is equivalent to rejecting it |
392
410
 
393
- 最常见例子:
411
+ The most common examples:
394
412
 
395
413
  ```text
396
- /dg claude 审查当前方案的 3 个高风险点
414
+ /dg claude review the 3 high-risk points of the current plan
397
415
  /tasks
398
416
  /task approve task_123
399
417
  ```
400
418
 
401
- 说明:
419
+ Notes:
402
420
 
403
- - 当前会话就是主控会话
404
- - 被委派出去的是独立子任务会话
405
- - agent 发起的委派请求默认需要人工确认
406
- - 如果你在用外部 MCP hostCodex / Claude Code),用 `delegate_batch` 一次派发多个并行子任务:传一个 `tasks` 数组,底层自动建组,全部结果一次性回注,无需手动维护 groupId
421
+ - The current session is the coordinator session
422
+ - What gets delegated out are independent subtask sessions
423
+ - Delegation requests initiated by the agent require human confirmation by default
424
+ - If you're using an external MCP host (Codex / Claude Code), use `delegate_batch` to dispatch multiple parallel subtasks at once: pass a `tasks` array, a group is created automatically under the hood, and all results are injected back at once with no need to maintain a groupId manually
407
425
 
408
- 如果你想先理解什么时候该用 delegate、什么时候应该并行派出多个子任务,请看:
426
+ If you want to first understand when to delegate and when to dispatch multiple subtasks in parallel, see:
409
427
 
410
428
  - [docs/weacpx-group-usage-guide.md](./docs/weacpx-group-usage-guide.md)
411
429
 
412
430
 
413
- ### MCP 集成:外部 coordinator
431
+ ### MCP integration: external coordinator
414
432
 
415
- 如果你想让 CodexClaude Code 等外部 MCP host 直接使用 xacpx 的多 Agent 编排能力,可以把 `xacpx mcp-stdio` 配成一个 stdio MCP server
433
+ If you want external MCP hosts such as Codex or Claude Code to use xacpx's multi-agent orchestration directly, you can configure `xacpx mcp-stdio` as a stdio MCP server.
416
434
 
417
- `delegate_request` 支持 MCP Tasks:支持该能力的 host 可以让委派请求立即返回原生 task handle,之后通过 `tasks/get` / `tasks/result` / `tasks/cancel` 获取状态、结果或取消任务;worker 输出的 `[PROGRESS] ...` 会显示在 `tasks/get` / `tasks/list` `statusMessage` 里;`input_required` 状态下的 `tasks/result` 会返回下一步操作提示并结束本次 result stream,而不是长时间阻塞;client 按提示调用 `task_get` / `task_approve` / `coordinator_answer_question` 等工具后,再继续 `tasks/get` / `tasks/result` 轮询。不支持 MCP Tasks host 仍可使用兼容工具 `task_get` / `task_list` / `task_watch` / `task_cancel`。
435
+ `delegate_request` supports MCP Tasks: a host that supports this capability can make the delegation request return a native task handle immediately, then get status, results, or cancel the task via `tasks/get` / `tasks/result` / `tasks/cancel`; the worker's `[PROGRESS] ...` output shows up in the `statusMessage` of `tasks/get` / `tasks/list`; in the `input_required` state, `tasks/result` returns a next-step hint and ends this result stream rather than blocking for a long time; after the client calls tools such as `task_get` / `task_approve` / `coordinator_answer_question` per the hint, it continues polling `tasks/get` / `tasks/result`. A host that does not support MCP Tasks can still use the compatibility tools `task_get` / `task_list` / `task_watch` / `task_cancel`.
418
436
 
419
- 定时任务的自然语言创建工具是 xacpx 当前会话内部能力,不会出现在外部 `xacpx mcp-stdio` 的工具列表里。
437
+ The natural-language creation tool for scheduled tasks is an internal capability of the xacpx current session and does not appear in the external `xacpx mcp-stdio` tool list.
420
438
 
421
- 先启动 daemon
439
+ Start the daemon first:
422
440
 
423
441
  ```bash
424
442
  xacpx start
425
443
  ```
426
444
 
427
- MCP 配置推荐保持简单,不要在启动参数里绑定 workspace
445
+ We recommend keeping the MCP config simple and not binding a workspace in the launch arguments:
428
446
 
429
447
  ```json
430
448
  {
@@ -437,17 +455,17 @@ MCP 配置推荐保持简单,不要在启动参数里绑定 workspace:
437
455
  }
438
456
  ```
439
457
 
440
- 外部 host 调用 `delegate_request` 时传 `workingDirectory`,xacpx 会让被委派的 worker 在这个目录工作:
458
+ When an external host calls `delegate_request`, pass `workingDirectory`, and xacpx will make the delegated worker work in that directory:
441
459
 
442
460
  ```json
443
461
  {
444
462
  "targetAgent": "claude",
445
- "task": "审查这个改动的风险点",
463
+ "task": "review the risks of this change",
446
464
  "workingDirectory": "/absolute/path/to/your/repo"
447
465
  }
448
466
  ```
449
467
 
450
- Windows 上如果 MCP host 不会帮你解析带参数的 `command`,把 `node.exe` 放在 `command`,把 xacpx 脚本和参数放在 `args`:
468
+ On Windows, if the MCP host won't resolve a `command` with arguments for you, put `node.exe` in `command` and the xacpx script and arguments in `args`:
451
469
 
452
470
  ```json
453
471
  {
@@ -460,18 +478,18 @@ Windows 上如果 MCP host 不会帮你解析带参数的 `command`,把 `node.
460
478
  }
461
479
  ```
462
480
 
463
- 更多身份规则、`workingDirectory` 语义、工具列表、流程图和故障排查见:[docs/external-mcp.md](./docs/external-mcp.md)
481
+ For more identity rules, `workingDirectory` semantics, the tool list, flow diagrams, and troubleshooting, see [docs/external-mcp.md](./docs/external-mcp.md).
464
482
 
465
- ## 常见场景
483
+ ## Common scenarios
466
484
 
467
- ### 在手机上继续盯一个本地项目
485
+ ### Keep watching a local project from your phone
468
486
 
469
487
  ```text
470
488
  /ss codex -d /absolute/path/to/backend
471
- 看一下今天这个接口超时问题
489
+ take a look at today's API timeout issue
472
490
  ```
473
491
 
474
- ### 同一个聊天里切换两个项目
492
+ ### Switch between two projects in the same chat
475
493
 
476
494
  ```text
477
495
  /ss codex -d /absolute/path/to/backend
@@ -481,62 +499,62 @@ Windows 上如果 MCP host 不会帮你解析带参数的 `command`,把 `node.
481
499
  /use frontend:codex
482
500
  ```
483
501
 
484
- ### 接入本地已有 Codex 原生会话
502
+ ### Attach to an existing local Codex native session
485
503
 
486
504
  ```text
487
505
  /ssn codex -d /absolute/path/to/backend
488
506
  /ssn 1
489
507
  ```
490
508
 
491
- 更多筛选、别名和故障排查见 [docs/native-sessions.md](./docs/native-sessions.md)
509
+ For more filtering, aliases, and troubleshooting, see [docs/native-sessions.md](./docs/native-sessions.md).
492
510
 
493
- ## 配置与运行文件
511
+ ## Config and runtime files
494
512
 
495
- 默认文件位置:
513
+ Default file locations:
496
514
 
497
- - 配置文件:`~/.xacpx/config.json`
498
- - 状态文件:`~/.xacpx/state.json`
499
- - 运行日志:`~/.xacpx/runtime/app.log`
515
+ - Config file: `~/.xacpx/config.json`
516
+ - State file: `~/.xacpx/state.json`
517
+ - Runtime log: `~/.xacpx/runtime/app.log`
500
518
 
501
- 更多运行时文件会放在 `~/.xacpx/runtime/` 下。
519
+ More runtime files are placed under `~/.xacpx/runtime/`.
502
520
 
503
- ## 常见问题
521
+ ## FAQ
504
522
 
505
- ### `/ss new` 失败怎么办?
523
+ ### What if `/ss new` fails?
506
524
 
507
- 如果你在微信里创建会话失败,最常见的情况不是 `xacpx` 命令格式错了,而是底层会话没有成功创建。
525
+ If session creation fails in WeChat, the most common cause is not a wrong `xacpx` command format, but that the underlying session was not created successfully.
508
526
 
509
- 你可以先试这两步:
527
+ You can try these two steps first:
510
528
 
511
- 1. 在终端里确认当前项目目录和 agent 本身可用
512
- 2. 如果你熟悉 `acpx`,先手动创建一个会话,再在微信里挂回去
529
+ 1. Confirm in the terminal that the current project directory and the agent itself work
530
+ 2. If you're familiar with `acpx`, manually create a session first, then attach to it from WeChat
513
531
 
514
- 例如,你可以先在本地创建一个会话:
532
+ For example, you can create a session locally first:
515
533
 
516
534
  ```bash
517
535
  ./node_modules/.bin/acpx --verbose --cwd /absolute/workspace/path codex sessions new --name existing-demo
518
536
  ```
519
537
 
520
- 然后在微信里把它挂回来:
538
+ Then attach to it from WeChat:
521
539
 
522
540
  ```text
523
541
  /ss attach demo -a codex --ws backend --name existing-demo
524
542
  ```
525
543
 
526
- ### `/mode <id>` 里的 `<id>` 是什么?
544
+ ### What is the `<id>` in `/mode <id>`?
527
545
 
528
- `/mode` 的可用值取决于你当前使用的 agent,`xacpx` 不会替你统一转换这些值。
546
+ The valid values for `/mode` depend on the agent you're currently using; `xacpx` does not normalize these values for you.
529
547
 
530
- 当前比较明确的已知值:
548
+ Currently the more clearly known values are:
531
549
 
532
550
  - `codex`: `plan`
533
- - `cursor`: `agent`、`plan`、`ask`
551
+ - `cursor`: `agent`, `plan`, `ask`
534
552
 
535
- 如果你不确定某个值能不能用,优先查对应 agent 的文档;如果填错,通常会直接收到无效参数之类的报错。
553
+ If you're unsure whether a value works, check the corresponding agent's docs first; if you get it wrong, you'll usually get an error such as an invalid argument.
536
554
 
537
- ## 从源码运行
555
+ ## Running from source
538
556
 
539
- 如果你是从仓库源码直接使用:
557
+ If you're using the repo source directly:
540
558
 
541
559
  ```bash
542
560
  bun install
@@ -544,27 +562,27 @@ bun run login
544
562
  bun run dev
545
563
  ```
546
564
 
547
- ## 更多文档
565
+ ## More docs
548
566
 
549
- 如果你现在要做的是下面这些事,可以直接从这里继续:
567
+ If what you're about to do is one of the following, you can continue from here:
550
568
 
551
- ### 安装与配置
569
+ ### Installation and configuration
552
570
 
553
- - 想配置微信、飞书、元宝、或第三方插件频道:[docs/channel-management.md](./docs/channel-management.md)
554
- - 想自己写一个频道插件:[docs/plugin-development.md](./docs/plugin-development.md)
555
- - 想看完整配置字段:[docs/config-reference.md](./docs/config-reference.md)
556
- - 想在微信里改配置:[docs/config-command.md](./docs/config-command.md)
571
+ - Want to configure WeChat, Feishu, Yuanbao, or a third-party plugin channel: [docs/channel-management.md](./docs/channel-management.md)
572
+ - Want to write your own channel plugin: [docs/plugin-development.md](./docs/plugin-development.md)
573
+ - Want the full config field reference: [docs/config-reference.md](./docs/config-reference.md)
574
+ - Want to change config from WeChat: [docs/config-command.md](./docs/config-command.md)
557
575
 
558
- ### 日常使用
576
+ ### Everyday use
559
577
 
560
- - 想查看完整聊天命令参考:[docs/commands.md](./docs/commands.md)
561
- - 想用定时任务(`/later`)安排一次性的未来消息:[docs/later-command.md](./docs/later-command.md)
562
- - 想理解什么时候该用 delegate、什么时候该开 group[docs/weacpx-group-usage-guide.md](./docs/weacpx-group-usage-guide.md)
578
+ - Want the full chat-command reference: [docs/commands.md](./docs/commands.md)
579
+ - Want to schedule a one-time future message with scheduled tasks (`/later`): [docs/later-command.md](./docs/later-command.md)
580
+ - Want to understand when to delegate and when to open a group: [docs/weacpx-group-usage-guide.md](./docs/weacpx-group-usage-guide.md)
563
581
 
564
- ### 排错与验证
582
+ ### Troubleshooting and verification
565
583
 
566
- - 想跑测试或了解测试分层:[docs/testing.md](./docs/testing.md)
584
+ - Want to run tests or understand the test layout: [docs/testing.md](./docs/testing.md)
567
585
 
568
- ### 开发与贡献
586
+ ### Development and contribution
569
587
 
570
- - 想从源码开发、调试或参与贡献:[docs/developments.md](./docs/developments.md)
588
+ - Want to develop, debug, or contribute from source: [docs/developments.md](./docs/developments.md)
package/dist/cli.js CHANGED
@@ -1811,7 +1811,7 @@ var require_cjs = __commonJS((exports) => {
1811
1811
 
1812
1812
  // node_modules/write-file-atomic/lib/index.js
1813
1813
  var require_lib = __commonJS((exports, module) => {
1814
- var __filename = "/home/runner/work/weacpx/weacpx/node_modules/write-file-atomic/lib/index.js";
1814
+ var __filename = "/home/runner/work/xacpx/xacpx/node_modules/write-file-atomic/lib/index.js";
1815
1815
  module.exports = writeFile;
1816
1816
  module.exports.sync = writeFileSync;
1817
1817
  module.exports._getTmpname = getTmpname;
@@ -46358,6 +46358,7 @@ async function addPlugin(packageSpec, rawArgs, deps) {
46358
46358
  });
46359
46359
  try {
46360
46360
  await install(installInput);
46361
+ await ensurePluginHome(pluginHome);
46361
46362
  } catch (error2) {
46362
46363
  deps.print(`插件 ${packageSpec} 安装失败:${describeError(error2)}`);
46363
46364
  return 1;
@@ -46468,6 +46469,7 @@ async function updatePlugins(args, deps) {
46468
46469
  const updateInput = nextVersion ? { packageName: existing.name, version: nextVersion } : { packageName: existing.name };
46469
46470
  try {
46470
46471
  await update(updateInput);
46472
+ await ensurePluginHome(pluginHome);
46471
46473
  } catch (error2) {
46472
46474
  deps.print(`插件 ${existing.name} 更新失败:${describeError(error2)}`);
46473
46475
  return 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ganglion/xacpx",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "随时随地通过聊天频道(微信 / 飞书 / 元宝等)远程控制 `acpx` 上的 Claude Code、Codex 等 Agents。",
5
5
  "keywords": [
6
6
  "acpx",
@@ -14,11 +14,11 @@
14
14
  "author": "gadzan",
15
15
  "license": "MIT",
16
16
  "bugs": {
17
- "url": "https://github.com/gadzan/weacpx/issues"
17
+ "url": "https://github.com/gadzan/xacpx/issues"
18
18
  },
19
19
  "repository": {
20
20
  "type": "git",
21
- "url": "git+https://github.com/gadzan/weacpx.git"
21
+ "url": "git+https://github.com/gadzan/xacpx.git"
22
22
  },
23
23
  "type": "module",
24
24
  "bin": {
@@ -53,6 +53,9 @@
53
53
  "publish:channel-feishu": "bun publish --cwd packages/channel-feishu --access public",
54
54
  "publish:channel-yuanbao": "bun publish --cwd packages/channel-yuanbao --access public",
55
55
  "publish:plugins": "bun run publish:channel-yuanbao && bun run publish:channel-feishu",
56
+ "docs:dev": "bun run --cwd packages/docs dev",
57
+ "docs:build": "bun run --cwd packages/docs build",
58
+ "docs:preview": "bun run --cwd packages/docs preview",
56
59
  "dev": "bun run ./src/cli.ts run",
57
60
  "dry-run": "bun run ./src/dry-run.ts",
58
61
  "login": "bun run ./src/cli.ts login",