@wemind/cli 1.2.0 → 1.4.0
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 +29 -26
- package/dist/cli.js +4755 -2848
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
npm i -g @wemind/cli # 安装后得到 wemind 命令
|
|
13
|
-
wemind version # → wemind 1.
|
|
14
|
-
|
|
15
|
-
# 不安装、一次性运行(注意是包名 @wemind/cli,不是 wemind)
|
|
16
|
-
npx -y @wemind/cli list
|
|
13
|
+
wemind version # → wemind 1.4.0 (@wemind/cli, node …, win32-x64) # 版本以实际安装为准
|
|
14
|
+
wemind list # 查看账号与运行状态
|
|
17
15
|
```
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
不想全局安装、只想临时跑一次时:因为包名 ≠ 命令名,必须写全包名 `npx -y @wemind/cli <子命令>`(如 `npx -y @wemind/cli list`)。
|
|
18
|
+
|
|
19
|
+
要求:**Node.js >= 20.19**;想让它真的会「思考」,需要 PATH 上有一个支持 **ACP** 的 agent CLI(`kiro-cli` / `opencode` / `gemini` / 桌面端 `dsh` / `qodercli` / `cline` 等;未配置时自动探测 `opencode → cline → qoder → gemini → deepseek → kiro`;适配器类 `claude-code` / `codex` / `pi` 不参与探测,要显式 `wemind brain set|switch`)。Gemini CLI 用 `GEMINI_CLI_HOME` 指向沙箱根(它的配置目录是 `<沙箱>/.gemini`),MCP 与设置同在 `settings.json`,凭据会随沙箱同步(API key 用户的 `.env`,Google 登录用户的 `oauth_creds.json` / `google_accounts.json`)。kiro CLI 的 v2 / v3 引擎会自动识别(`--agent-engine` → `settings/cli.json` 的 `acp.agentEngine` → CLI 主版本 ≥3,最后一项是假设/待实测;`acp --help` 说明两者都没设时默认 v2);v3 不需要也不能带 `--trust-all-tools`,免审批由沙箱 `settings/permissions.yaml` 承担(真实设置已有则原样保留)。
|
|
20
20
|
|
|
21
21
|
## 升级
|
|
22
22
|
|
|
@@ -30,7 +30,7 @@ wemind stop <账号> && wemind start <账号> # 已在运行的 daemon 不会
|
|
|
30
30
|
```bash
|
|
31
31
|
wemind login --label 工作号 --start # ① 终端里出二维码,微信扫码 → 自动归档 + 启动常驻
|
|
32
32
|
wemind list # ② 看账号与运行状态
|
|
33
|
-
wemind brain check # ③
|
|
33
|
+
wemind brain check # ③ 验证大脑能实现 ACP(initialize + session/new 握手;失败退出码 1)
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
之后在微信里随便发一句话,就该收到回复。日志在 `~/.wemind/<账号>/daemon.log`。
|
|
@@ -42,28 +42,29 @@ wemind brain check # ③ 验证大脑能说 ACP(initialize +
|
|
|
42
42
|
| `wemind login [--label 名] [--start] [--runner builtin\|pm2]` | 扫码登录;`--start` 顺带拉起常驻 |
|
|
43
43
|
| `wemind list` | 账号、别名、运行状态、当前大脑、worker 池 |
|
|
44
44
|
| `wemind start / stop <key\|label>` | 启停某账号的常驻 |
|
|
45
|
-
| `wemind brain [show\|set\|unset\|check]` | 查看 / 设置(写入磁盘)/ 清除 / 自检大脑(`brain set deepseek --bin "<绝对路径>" --restart
|
|
45
|
+
| `wemind brain [show\|set\|unset\|check]` | 查看 / 设置(写入磁盘)/ 清除 / 自检大脑(`brain set deepseek --bin "<绝对路径>" --restart`);只加启动开关用 `--extra-args "…"`(追加,保留预设的 ACP 模式参数),`--args "…"` 是整段替换(漏掉 `acp` 会握手超时,`wemind brain` 会警告;`--args ""` 清空) |
|
|
46
46
|
| `wemind brain switch <agent 名\|auto>` | **热切换对话大脑**:daemon 在跑也不重启、不打断在途回合;失败自动回滚。`--worker` 设默认任务大脑;`wemind brain handoff` 生成交接摘要 |
|
|
47
|
-
| `wemind session new [名字] / list / resume <ref> / rename <ref> <名> / delete <ref
|
|
48
|
-
| `wemind task "<描述>" [--agent 名] [--cwd 目录]` | 派发任务给 worker
|
|
49
|
-
| `wemind task-list / task-reply <编号> "…" / task-stop [编号\|全部]` | 任务列表、回话续跑(`task-reply 继续`)、结束(在等回复的进程回池复用) |
|
|
47
|
+
| `wemind session new [名字] / list / resume <ref> / rename <ref> <名> / delete <ref> [<key\|label>]` | 会话管理:新建 / 列表 / 严格恢复 / 改名 / 删除(`ref` = 序号、名字或 id 前缀;省略账号 = 默认账号) |
|
|
48
|
+
| `wemind task "<描述>" [--agent 名] [--cwd 目录] [<key\|label>]` | 派发任务给 worker(多任务并行、按编号回话;`--cwd` 相对路径按当前终端目录解析) |
|
|
49
|
+
| `wemind task-list / task-reply <编号> "…" / task-stop [编号\|全部] [<key\|label>]` | 任务列表、回话续跑(`task-reply 继续`)、结束(在等回复的进程回池复用) |
|
|
50
50
|
| `wemind allow / revoke / allowlist` | 授权管理(谁能驱动这个 bot) |
|
|
51
|
-
| `wemind logout / delete / label / set-default` |
|
|
51
|
+
| `wemind logout / delete / label / set-default` | 账号运维(`delete` 停不掉 daemon 时会拒绝删目录,先 `stop`) |
|
|
52
52
|
| `wemind version` / `wemind help` | 版本、完整帮助 |
|
|
53
53
|
|
|
54
54
|
`key` = 由微信 botId 派生的目录名;`label` = 人类可读别名,多数命令两者都能用。
|
|
55
55
|
|
|
56
56
|
## 常驻怎么跑
|
|
57
57
|
|
|
58
|
-
`wemind start` 默认用**自带的跨平台后台守护进程**(builtin):detached 拉起 `wemind _watchdog`,它循环执行 `wemind daemon`,进程退出 5
|
|
58
|
+
`wemind start` 默认用**自带的跨平台后台守护进程**(builtin):detached 拉起 `wemind _watchdog`,它循环执行 `wemind daemon`,进程退出 5 秒后自动重拉(连续短暂崩溃超过 `WEMIND_MAX_RESTARTS`,默认 50,就停止重拉并提示看日志);单实例靠 `wrapper.pid` + 进程身份校验。也可以用 `--runner pm2`(或 `WEMIND_RUNNER=pm2`)交给 pm2——`wemind` 会在账号目录生成 `pm2.app.json`(5s 重拉、最多 50 次、退出码 78 与 75 停手、日志合并到 `daemon.log`,与 builtin 语义一致),再 `pm2 start` 它。
|
|
59
59
|
|
|
60
60
|
开机自启:让系统在登录时执行一次 `wemind start <账号>` 即可(Windows 计划任务/启动文件夹、Linux systemd user service、macOS launchd)。**同一账号只用一套常驻方案**——两种 runner 同时跑会抢同一个 bot token。
|
|
61
61
|
|
|
62
62
|
## 数据与安全
|
|
63
63
|
|
|
64
|
-
- 所有状态在 `~/.wemind/<账号>/`(可用 `WEMIND_HOME` 改根目录):`account.json` 登录凭证、`state.json` 游标(读到哪条消息了)、`allowFrom.json` 授权清单、`brain-home/` 大脑沙箱、`daemon.log` 日志。
|
|
65
|
-
-
|
|
66
|
-
- `
|
|
64
|
+
- 所有状态在 `~/.wemind/<账号>/`(可用 `WEMIND_HOME` 改根目录):`account.json` 登录凭证、`state.json` 游标(读到哪条消息了)、`allowFrom.json` 授权清单、`brain-home/` 大脑沙箱、`agent-sessions/`(agent 自己的会话库;目前 DSH 的 `deepseek/{brain,worker}` 在这里,不再写 `brain-home/sessions`)、`daemon.log` 日志。
|
|
65
|
+
- **适配器类大脑要单独装**(`claude-code` / `codex` / `pi`):先 `npm i -g <适配器包>`(npx 只作兜底,常驻 daemon / 每条 worker 任务起进程时它要每次联网且版本会漂)。Claude Code:`npm i -g @agentclientprotocol/claude-agent-acp`(**Node ≥22**;Windows 产出 `claude-agent-acp.cmd`)→ `wemind brain set claude-code`;沙箱用 `CLAUDE_CONFIG_DIR=<brain-home>/claude`(实测连 `~/.claude.json` 一起隔离),MCP 走 ACP `mcpServers`(目录取真实 `~/.claude.json`,`wechat` 永远排除),免审批走 `session/set_mode bypassPermissions`。Codex:`npm i -g @agentclientprotocol/codex-acp`(Windows 产出 `codex-acp.cmd`)→ `wemind brain set codex`;认证走 Codex 自己(`codex login` 或 `OPENAI_API_KEY`),免审批走 `session/set_mode agent-full-access`;**stdio MCP 不支持**(探针实测)→ 微信侧「加载/卸载 MCP」对 codex 无效;**没有沙箱配置目录**(只有 cwd 指向 `brain-home`,要在真实项目里干活请在消息里点明路径)。pi:`npm i -g @earendil-works/pi-coding-agent` + 终端 `pi` 登录 + `npm i -g pi-acp` → `wemind brain set pi`;沙箱用 `PI_CODING_AGENT_DIR=<brain-home>`(`settings.json` / `auth.json` / `models*.json` 同步),MCP 走 pi 自己的 `mcp.json`(kiro 格式),免审批无需开关,启动横幅用 pi 自己的 `quietStartup` 关掉(不进微信回复);**只装适配器不够**(`requiresBins` 会报 pi 本体缺失)。
|
|
66
|
+
- ⚠️ **daemon 会让大脑免确认执行工具**(**9 个内置预设默认都免审批**:kiro v2 `--trust-all-tools`(v3 用沙箱 `settings/permissions.yaml` 的 allow-all)、gemini `--approval-mode yolo`、qoder `--yolo`、cline `--auto-approve true`、opencode 沙箱 `permission: allow`、DSH `danger-full-access`、claude-code `bypassPermissions`、codex `agent-full-access`、pi 默认不逐次审批):能给这个 bot 发消息的人,即可让大脑在本机执行任意工具(shell / 写文件)。微信平台限制决定了只有扫码登录这个 bot 的**登录者**能发消息;另有一道**发件人授权(allowFrom)兜底**:登录者自动写入,**勿清空**。边缘权限请求默认拒绝,`WEMIND_ACP_AUTO_ALLOW=1` 才逐次放行。
|
|
67
|
+
- `account.json`(bot token)、`state.json`(`context_token`)、`qr_login.json` 在 POSIX 上统一 chmod 600;Windows 上都是明文,请用目录权限或磁盘加密。
|
|
67
68
|
- 同一个 bot token **只能有一个消费者**:`wemind` daemon 与 `@wemind/wechat-mcp` 二选一,否则互相抢消息。
|
|
68
69
|
|
|
69
70
|
## 环境变量(常用)
|
|
@@ -73,8 +74,10 @@ wemind brain check # ③ 验证大脑能说 ACP(initialize +
|
|
|
73
74
|
| `WEMIND_HOME` | 数据根目录,默认 `~/.wemind` |
|
|
74
75
|
| `WECHAT_ACCOUNT` / `WECHAT_DATA_DIR` | 指定账号 / 指定完整数据目录(多账号隔离) |
|
|
75
76
|
| `WEMIND_RUNNER` | `builtin`(默认)或 `pm2` |
|
|
76
|
-
| `WEMIND_BRAIN` / `WEMIND_BRAIN_BIN` / `WEMIND_BRAIN_ARGS` |
|
|
77
|
+
| `WEMIND_BRAIN` / `WEMIND_BRAIN_BIN` / `WEMIND_BRAIN_ARGS` / `WEMIND_BRAIN_EXTRA_ARGS` | 一次性覆盖大脑选择与启动参数(`ARGS` 整段替换、`EXTRA_ARGS` 追加;持久化请用 `wemind brain set`) |
|
|
77
78
|
| `WEMIND_ACP_AUTO_ALLOW=1` | 放行 ACP agent 的一次性权限请求(默认为拒绝) |
|
|
79
|
+
| `WEMIND_ACP_SESSION_MODE` | 覆盖/关闭预设的会话模式(`session/set_mode`):`0`/`false`/`off` 关闭,其它值 = 该 modeId |
|
|
80
|
+
| `WEMIND_LOG_MAX_MB` / `WEMIND_LOG_KEEP` | `daemon.log` 轮转:单文件上限(默认 10)/ 保留份数(默认 3,`0` = 不留历史);builtin 运行中轮转,pm2 用 `pm2-logrotate` |
|
|
78
81
|
|
|
79
82
|
## 与 MCP 形态的区别
|
|
80
83
|
|
|
@@ -87,12 +90,12 @@ wemind brain check # ③ 验证大脑能说 ACP(initialize +
|
|
|
87
90
|
## 文档
|
|
88
91
|
|
|
89
92
|
- 完整文档:<https://github.com/imwangpan/WeMind>
|
|
90
|
-
- 新手一步步教程:[docs
|
|
91
|
-
- 发布与版本规则:[docs
|
|
92
|
-
- AI 协作者入口:[AGENTS.md](
|
|
93
|
-
- 接入其它 ACP agent:[docs
|
|
94
|
-
- Qoder 接入:[docs
|
|
95
|
-
- Daemon 常驻原理:[docs/repowiki/10-部署与运维.md](
|
|
93
|
+
- 新手一步步教程:[docs/使用指南/新手教程.md](../../docs/使用指南/新手教程.md)
|
|
94
|
+
- 发布与版本规则:[docs/发布与变更记录/发布-wemind-npm.md](../../docs/发布与变更记录/发布-wemind-npm.md)
|
|
95
|
+
- AI 协作者入口:[AGENTS.md](../../AGENTS.md)
|
|
96
|
+
- 接入其它 ACP agent:[docs/接入方案/接入其它-ACP-Agent.md](../../docs/接入方案/接入其它-ACP-Agent.md)
|
|
97
|
+
- Qoder 接入:[docs/接入方案/接入-Qoder.md](../../docs/接入方案/接入-Qoder.md)
|
|
98
|
+
- Daemon 常驻原理:[docs/repowiki/10-部署与运维.md](../../docs/repowiki/10-部署与运维.md)
|
|
96
99
|
|
|
97
100
|
## 维护者:发布新版本
|
|
98
101
|
|
|
@@ -121,9 +124,9 @@ wemind brain check # ③ 验证大脑能说 ACP(initialize +
|
|
|
121
124
|
### 第三步:升版本号(一条命令)
|
|
122
125
|
|
|
123
126
|
```powershell
|
|
124
|
-
npm run release:patch # 1.
|
|
125
|
-
npm run release:minor # 1.
|
|
126
|
-
npm run release:major # 1.
|
|
127
|
+
npm run release:patch # 1.4.0 → 1.4.1(Bug 修复)
|
|
128
|
+
npm run release:minor # 1.4.0 → 1.5.0(向后兼容的新功能)
|
|
129
|
+
npm run release:major # 1.4.0 → 2.0.0(不兼容改动)
|
|
127
130
|
```
|
|
128
131
|
|
|
129
132
|
这三个脚本等价于:
|
|
@@ -157,7 +160,7 @@ npm pack --dry-run --workspace @wemind/cli # 应看到 5 个文件:LICENSE
|
|
|
157
160
|
```powershell
|
|
158
161
|
git add packages/wechat-daemon/package.json package-lock.json
|
|
159
162
|
git add packages/wechat-daemon/src packages/wechat-ilink-core/src # 有源码改动时
|
|
160
|
-
git commit -m "chore: release @wemind/cli 1.
|
|
163
|
+
git commit -m "chore: release @wemind/cli 1.4.0" # 换成当前要发的版本
|
|
161
164
|
git push origin main
|
|
162
165
|
```
|
|
163
166
|
|