botmux 2.9.1 → 2.11.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.
Files changed (42) hide show
  1. package/README.en.md +39 -3
  2. package/README.md +34 -2
  3. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  4. package/dist/adapters/cli/claude-code.js +46 -15
  5. package/dist/adapters/cli/claude-code.js.map +1 -1
  6. package/dist/adapters/cli/shared-hints.d.ts +2 -2
  7. package/dist/adapters/cli/shared-hints.js +2 -2
  8. package/dist/autostart.d.ts +14 -0
  9. package/dist/autostart.d.ts.map +1 -0
  10. package/dist/autostart.js +357 -0
  11. package/dist/autostart.js.map +1 -0
  12. package/dist/bot-registry.d.ts.map +1 -1
  13. package/dist/bot-registry.js +2 -3
  14. package/dist/bot-registry.js.map +1 -1
  15. package/dist/cli.js +32 -1
  16. package/dist/cli.js.map +1 -1
  17. package/dist/core/session-manager.d.ts.map +1 -1
  18. package/dist/core/session-manager.js +69 -62
  19. package/dist/core/session-manager.js.map +1 -1
  20. package/dist/core/worker-pool.js +1 -1
  21. package/dist/core/worker-pool.js.map +1 -1
  22. package/dist/daemon.d.ts.map +1 -1
  23. package/dist/daemon.js +69 -38
  24. package/dist/daemon.js.map +1 -1
  25. package/dist/im/lark/card-handler.js +1 -1
  26. package/dist/im/lark/card-handler.js.map +1 -1
  27. package/dist/im/lark/event-dispatcher.d.ts +1 -1
  28. package/dist/im/lark/event-dispatcher.js +1 -1
  29. package/dist/im/lark/forwarded-renderer.d.ts +23 -0
  30. package/dist/im/lark/forwarded-renderer.d.ts.map +1 -0
  31. package/dist/im/lark/forwarded-renderer.js +105 -0
  32. package/dist/im/lark/forwarded-renderer.js.map +1 -0
  33. package/dist/services/session-store.js +4 -4
  34. package/dist/skills/definitions.d.ts.map +1 -1
  35. package/dist/skills/definitions.js +22 -6
  36. package/dist/skills/definitions.js.map +1 -1
  37. package/dist/utils/logger.d.ts.map +1 -1
  38. package/dist/utils/logger.js +2 -3
  39. package/dist/utils/logger.js.map +1 -1
  40. package/dist/worker.js +8 -6
  41. package/dist/worker.js.map +1 -1
  42. package/package.json +3 -2
package/README.en.md CHANGED
@@ -48,7 +48,7 @@ Compared to OpenClaw-style approaches built on Agent SDKs:
48
48
  | Feature | botmux | OpenClaw-style |
49
49
  |---------|--------|---------------|
50
50
  | Architecture | Bridges full CLI processes directly | Rebuilds on Agent SDK |
51
- | CLI Capabilities | Full runtime (hooks, memory, plan mode, MCP ecosystem, `/` commands) | SDK API subset, missing features must be reimplemented |
51
+ | CLI Capabilities | Full runtime (hooks, memory, plan mode, skills, `/` commands) | SDK API subset, missing features must be reimplemented |
52
52
  | CLI Upgrades | Zero-adaptation automatic benefit | Must track SDK version changes |
53
53
  | Memory / Context | Reuses CLI's built-in memory system, improves as the CLI evolves | Must build custom memory system, duplicating CLI-native capabilities |
54
54
  | Multi-CLI Support | 4 CLIs, switch with one config (Claude Code / Codex / Gemini / OpenCode) | Tied to a single SDK, cannot switch CLIs |
@@ -158,6 +158,23 @@ Go to "Version Management & Release", click "Create Version" and publish. Set av
158
158
 
159
159
  ![Add bot to group](docs/setup/add-bot-to-group.png)
160
160
 
161
+ ### Step 8: Enable Boot-time Autostart (recommended)
162
+
163
+ Once the bot is sending and receiving messages cleanly, run:
164
+
165
+ ```bash
166
+ botmux autostart enable
167
+ ```
168
+
169
+ This registers the daemon with your user's init system (launchd on macOS, user systemd on Linux). **No sudo required.** After a reboot — or after logging back in — the daemon comes up on its own; you never need to remember `botmux start` again.
170
+
171
+ - The command only manages the "starts at boot" hook — it does **not** touch a running daemon.
172
+ - On a headless Linux box where you log out between sessions, also run `sudo loginctl enable-linger <your-user>` so user systemd survives logout. The command warns you if linger is off.
173
+ - To disable autostart: `botmux autostart disable` (also leaves the daemon alone). Check state: `botmux autostart status`.
174
+ - After switching nvm/fnm Node versions, re-run `botmux autostart enable` to refresh the embedded paths — `botmux start`/`restart` also detect path drift and refresh in place.
175
+
176
+ See [CLI Commands § Boot-time Autostart](#boot-time-autostart) below for the full reference.
177
+
161
178
  ---
162
179
 
163
180
  ## Features
@@ -251,8 +268,12 @@ When a CLI spawns inside a botmux session it automatically gets
251
268
  - `botmux schedule` — manage scheduled tasks
252
269
 
253
270
  These capabilities are wired via `--append-system-prompt` and Skill
254
- descriptions, so the agent picks them up automatically. The pre-April-2026
255
- MCP entry point has been removed (stale config is auto-cleaned on upgrade).
271
+ descriptions, so the agent picks them up automatically. Compared to
272
+ Anthropic's official Telegram channel which exposes each action as an
273
+ MCP tool — the Skill + CLI combo skips the MCP handshake on every CLI
274
+ launch, doesn't burn tool-list tokens, and works across every CLI that
275
+ can read a system prompt and shell out (Claude Code / Codex / Gemini /
276
+ OpenCode), with no MCP protocol support required.
256
277
 
257
278
  ---
258
279
 
@@ -400,6 +421,21 @@ botmux setup
400
421
  | `botmux delete <id>` | Close a session by ID prefix (alias: `del`/`rm`) |
401
422
  | `botmux delete all` | Close all active sessions |
402
423
  | `botmux delete stopped` | Clean up zombie sessions with dead processes |
424
+ | `botmux autostart enable` | Register boot-time autostart (macOS launchd / Linux user systemd, no sudo) |
425
+ | `botmux autostart disable` | Unregister boot-time autostart |
426
+ | `botmux autostart status` | Show autostart status |
427
+
428
+ ### Boot-time Autostart
429
+
430
+ `botmux autostart enable` registers the daemon with your user's init system so it comes back automatically after a reboot:
431
+
432
+ - **macOS**: writes `~/Library/LaunchAgents/com.botmux.daemon.plist` and loads it via `launchctl bootstrap`. **No sudo required.**
433
+ - **Linux**: writes `~/.config/systemd/user/botmux.service` and runs `systemctl --user enable --now`. **No sudo required.**
434
+ - On servers / headless boxes the user systemd manager stops when you log out. To survive logouts and reboots, also run `sudo loginctl enable-linger <your-user>` — `autostart enable` warns when linger is off.
435
+ - Containers / SSH-only sessions without a user DBus fall back to printing manual instructions.
436
+ - The `node` and `cli.js` paths baked into the unit come from `process.execPath` at install time. After switching nvm/fnm versions, run `botmux autostart enable` once to rewrite. `botmux start`/`restart` also detect path drift and refresh the unit in place — no manual step needed.
437
+ - `enable` / `disable` **only manage the autostart hook — they do not touch a running daemon**. To start the daemon right away run `botmux start`; to stop it run `botmux stop`. This avoids the "I just wanted to turn off autostart, why did my service also die" footgun.
438
+ - If you prefer letting systemd own the lifecycle (`systemctl --user start/stop botmux`), that works too — the unit declares `ExecStop=botmux stop` for a clean shutdown path.
403
439
 
404
440
  ### Agent-facing subcommands
405
441
 
package/README.md CHANGED
@@ -52,7 +52,7 @@ botmux 不重新实现 Agent 能力,而是直接桥接已有的 AI 编程 CLI
52
52
  | 特性 | botmux | OpenClaw 类方案 |
53
53
  |------|--------|----------------|
54
54
  | 底层架构 | 直接桥接完整 CLI 进程 | 基于 Agent SDK 重新构建 |
55
- | CLI 能力 | 完整运行时(hooks、memory、plan mode、MCP 生态、`/` 命令) | SDK API 子集,需手动实现缺失功能 |
55
+ | CLI 能力 | 完整运行时(hooks、memory、plan mode、Skill、`/` 命令) | SDK API 子集,需手动实现缺失功能 |
56
56
  | CLI 升级 | 零适配自动受益 | 需要跟进 SDK 版本变更 |
57
57
  | 记忆 / 上下文 | 直接复用 CLI 内建的记忆系统,随 CLI 迭代自动增强 | 需自建记忆系统,与 CLI 原生能力重复 |
58
58
  | 多 CLI 支持 | 4 种 CLI 一键切换(Claude Code / Codex / Gemini / OpenCode) | 绑定单一 SDK,无法切换 CLI |
@@ -150,7 +150,7 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
150
150
  - `botmux bots list` — 查询当前群聊的机器人及 open_id
151
151
  - `botmux schedule` — 增删改查定时任务
152
152
 
153
- 这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent 使用,老用户熟悉的 MCP 入口已移除(旧配置会被自动清理)。
153
+ 这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent 使用。Skill + CLI 的组合相比 Anthropic 官方 Telegram channel 那套 MCP 方案:CLI 启动不用做 MCP 握手、不占用工具列表 token,且对 Claude Code / Codex / Gemini / OpenCode 通用 —— 只要 CLI 能读 system prompt 跑 shell 命令就行,不依赖任何 MCP 协议支持。
154
154
 
155
155
  ---
156
156
 
@@ -253,6 +253,23 @@ botmux start
253
253
 
254
254
  ![添加机器人到群](docs/setup/add-bot-to-group.png)
255
255
 
256
+ ### Step 8: 开机自启(推荐)
257
+
258
+ 确认机器人能正常收发消息之后,跑一次:
259
+
260
+ ```bash
261
+ botmux autostart enable
262
+ ```
263
+
264
+ 把 daemon 注册到当前用户的 init 系统(macOS 用 launchd,Linux 用 user systemd),**不需要 sudo**。重启机器、退出再登录都不用再手动 `botmux start`。
265
+
266
+ - 这条命令只管"开机时自动起",不会动你**当前**正在跑的 daemon。
267
+ - Linux 服务器登出会话后想让服务继续跑:另跑一次 `sudo loginctl enable-linger <你的用户名>`,命令本身会在 linger 没开时主动提醒。
268
+ - 想关掉自启:`botmux autostart disable`(同样不会停 daemon);查状态:`botmux autostart status`。
269
+ - 切换 nvm/fnm Node 版本后跑一次 `botmux autostart enable` 重写路径即可——`botmux start`/`restart` 也会自动检测路径漂移。
270
+
271
+ 详见下方 [CLI 命令 § 开机自启](#开机自启)。
272
+
256
273
  ---
257
274
 
258
275
  ## 使用指南
@@ -337,6 +354,21 @@ botmux start
337
354
  | `botmux delete <id>` | 关闭指定会话,支持 ID 前缀匹配(别名 `del`/`rm`) |
338
355
  | `botmux delete all` | 关闭所有活跃会话 |
339
356
  | `botmux delete stopped` | 清理所有进程已退出的僵尸会话 |
357
+ | `botmux autostart enable` | 注册开机自启(macOS launchd / Linux user systemd,无需 sudo) |
358
+ | `botmux autostart disable` | 注销开机自启 |
359
+ | `botmux autostart status` | 查看自启状态 |
360
+
361
+ ### 开机自启
362
+
363
+ `botmux autostart enable` 把 daemon 注册到当前用户的 init 系统,重启机器后自动起来:
364
+
365
+ - **macOS**:写 `~/Library/LaunchAgents/com.botmux.daemon.plist`,用 `launchctl bootstrap` 加载,**不需要 sudo**。
366
+ - **Linux**:写 `~/.config/systemd/user/botmux.service`,用 `systemctl --user enable --now` 启用,**不需要 sudo**。
367
+ - 服务器/无桌面环境下,登出会话后 user systemd 默认会停服务。需要跨登出常驻请额外跑 `sudo loginctl enable-linger <你的用户名>`,autostart enable 会在 linger 未启用时提示。
368
+ - 容器或 SSH-only 没有 user DBus 的环境会回退到打印手动指令。
369
+ - 单元文件里的 `node` / `cli.js` 路径来自当前 `process.execPath`,nvm/fnm 切版本后跑一次 `botmux autostart enable` 重写即可。`botmux start`/`restart` 也会自动检测路径变化、原地刷新单元文件,无需手动操作。
370
+ - `enable` / `disable` **只管开机自启钩子,不动正在跑的 daemon**。需要立即启动跑 `botmux start`,需要停跑 `botmux stop`。这样就不会"我只是想关掉自启,结果服务也被一起干掉了"。
371
+ - 想用 systemd 管 daemon 生命周期(`systemctl --user start/stop botmux`)也行——unit 里写了 ExecStop 调用 `botmux stop`,是干净的关停路径。
340
372
 
341
373
  ### 会话内子命令(给 CLI agent 用)
342
374
 
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAExD;4EAC4E;AAC5E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhF;AAsCD,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAoGzE;AAED,eAAO,MAAM,MAAM,gCAA0B,CAAC"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAExD;4EAC4E;AAC5E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhF;AAsCD,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAoIzE;AAED,eAAO,MAAM,MAAM,gCAA0B,CAAC"}
@@ -70,12 +70,13 @@ export function createClaudeCodeAdapter(pathOverride) {
70
70
  }
71
71
  args.push('--dangerously-skip-permissions');
72
72
  args.push('--disallowed-tools', 'EnterPlanMode,ExitPlanMode');
73
- const identityLines = botName || botOpenId
73
+ const identityBlock = botName || botOpenId
74
74
  ? [
75
75
  '',
76
- '你的身份:',
77
- `- 名字:${botName ?? '(未知)'}`,
78
- `- open_id:${botOpenId ?? '(未知)'}`,
76
+ '<identity>',
77
+ ` <name>${botName ?? '(未知)'}</name>`,
78
+ ` <open_id>${botOpenId ?? '(未知)'}</open_id>`,
79
+ '</identity>',
79
80
  '同一群里可能有多个机器人同时被 @,消息里会以 `@名字` 和 `open_id` 区分。',
80
81
  '判断本条消息是不是分派给你:对照上面的名字和 open_id。',
81
82
  '- 只执行明确分给自己的那部分,别抢别的机器人的活',
@@ -84,6 +85,7 @@ export function createClaudeCodeAdapter(pathOverride) {
84
85
  ]
85
86
  : [];
86
87
  args.push('--append-system-prompt', [
88
+ '<botmux_routing>',
87
89
  '你连接到了飞书(Lark)话题群。用户在飞书上阅读,看不到你的终端输出。',
88
90
  '想让用户看到的内容必须通过 `botmux send` 命令发送,终端输出不会到达聊天。',
89
91
  '',
@@ -94,22 +96,35 @@ export function createClaudeCodeAdapter(pathOverride) {
94
96
  '- 附带文件:`botmux send --files /path/to/file.pdf "请查收"`',
95
97
  '- 需要上下文时用 `botmux thread messages` 读取之前的对话。',
96
98
  '- 查看可协作的机器人:`botmux bots list`',
97
- ...identityLines,
99
+ '</botmux_routing>',
100
+ ...identityBlock,
98
101
  ].join('\n'));
99
102
  return args;
100
103
  },
101
104
  injectsSessionContext: true,
102
105
  async writeInput(pty, content) {
103
- // Always use bracketed paste: Claude Code's paste-burst heuristic can
104
- // swallow a trailing Enter sent via send-keys -l + send-keys Enter,
105
- // leaving content in the input box. Bracketed paste marks an explicit
106
- // \x1b[201~ boundary so the post-paste Enter is unambiguously submit.
107
- // Past that, we still can't trust fixed-delay timing (slow disk, big
108
- // paste, image loading). The robust signal is Claude Code's session
109
- // JSONL: each real user submit appends a line if no new line appears,
110
- // Enter was swallowed and we re-send it.
106
+ // Type content like a human: literal text via send-keys -l, and each
107
+ // newline replaced by `\` + Enter (Claude Code's documented soft-newline
108
+ // idiom — keeps content in the input box without submitting). The final
109
+ // Enter at the bottom is the unambiguous submit. This sidesteps tmux
110
+ // bracketed-paste mode entirely, which was unreliable: Claude Code can
111
+ // toggle bracketed-paste off mid-session (after slash commands etc.),
112
+ // making tmux's paste-buffer drop the markers and turning embedded \r
113
+ // into Enters that fragment the message into multiple submits.
114
+ //
115
+ // Each tmux send-keys is throttled so the cumulative input rate stays
116
+ // below Claude Code's paste-burst threshold — otherwise on long messages
117
+ // (~1300+ chars / ~25+ lines) Ink flips into paste mode mid-stream and
118
+ // subsequent `\` + Enter pairs are kept as literal `\\\r` in the
119
+ // submitted content instead of being consumed as soft-newline markers.
120
+ //
121
+ // Trailing Enter is still subject to Claude Code's paste-burst heuristic
122
+ // (rapid input followed by Enter can be coalesced as paste), so we keep
123
+ // the JSONL retry loop below as the source of truth for "did it submit".
111
124
  const hasImagePath = /\.(jpe?g|png|gif|webp|svg|bmp)\b/i.test(content);
112
125
  const submitDelay = hasImagePath ? 800 : 500;
126
+ const TYPING_THROTTLE_MS = 30;
127
+ const tick = () => new Promise(r => setTimeout(r, TYPING_THROTTLE_MS));
113
128
  const sendEnter = () => {
114
129
  if (pty.sendSpecialKeys)
115
130
  pty.sendSpecialKeys('Enter');
@@ -117,10 +132,26 @@ export function createClaudeCodeAdapter(pathOverride) {
117
132
  pty.write('\r');
118
133
  };
119
134
  const baseByte = pty.claudeJsonlPath ? currentFileSize(pty.claudeJsonlPath) : 0;
120
- if (pty.pasteText && pty.sendSpecialKeys) {
121
- pty.pasteText(content);
135
+ if (pty.sendText && pty.sendSpecialKeys) {
136
+ const lines = content.split('\n');
137
+ for (let i = 0; i < lines.length; i++) {
138
+ if (lines[i].length > 0) {
139
+ pty.sendText(lines[i]);
140
+ await tick();
141
+ }
142
+ if (i < lines.length - 1) {
143
+ // Soft-newline: backslash + Enter inserts a newline in Claude
144
+ // Code's input box without submitting.
145
+ pty.sendText('\\');
146
+ await tick();
147
+ pty.sendSpecialKeys('Enter');
148
+ await tick();
149
+ }
150
+ }
122
151
  }
123
152
  else {
153
+ // Non-tmux fallback (raw PTY): bracketed paste is reliable here since
154
+ // we control the markers directly.
124
155
  pty.write('\x1b[200~' + content + '\x1b[201~');
125
156
  }
126
157
  await new Promise(r => setTimeout(r, submitDelay));
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@
5
5
  * `claude-code.ts`; this constant is only consumed by CLIs that don't expose
6
6
  * a system-prompt flag (coco / codex / gemini / opencode / aiden).
7
7
  *
8
- * Each array element becomes one bullet line when rendered by
9
- * `buildNewTopicPrompt` in `session-manager.ts`.
8
+ * Each array element becomes one line inside the `<botmux_routing>` XML block
9
+ * rendered by `buildNewTopicPrompt` in `session-manager.ts`.
10
10
  *
11
11
  * The phrasing emphasises that `botmux send` is a shell command (not an MCP
12
12
  * tool) to stop models — particularly CoCo — from searching the tool list,
@@ -5,8 +5,8 @@
5
5
  * `claude-code.ts`; this constant is only consumed by CLIs that don't expose
6
6
  * a system-prompt flag (coco / codex / gemini / opencode / aiden).
7
7
  *
8
- * Each array element becomes one bullet line when rendered by
9
- * `buildNewTopicPrompt` in `session-manager.ts`.
8
+ * Each array element becomes one line inside the `<botmux_routing>` XML block
9
+ * rendered by `buildNewTopicPrompt` in `session-manager.ts`.
10
10
  *
11
11
  * The phrasing emphasises that `botmux send` is a shell command (not an MCP
12
12
  * tool) to stop models — particularly CoCo — from searching the tool list,
@@ -0,0 +1,14 @@
1
+ export interface AutostartOpts {
2
+ /** Absolute path to the botmux package root (one level up from dist/). */
3
+ pkgRoot: string;
4
+ /** Absolute path to ~/.botmux. */
5
+ configDir: string;
6
+ /** Absolute path to the daemon log dir (used for launchd stdout/err). */
7
+ logDir: string;
8
+ }
9
+ export declare function enableAutostart(opts: AutostartOpts): void;
10
+ export declare function disableAutostart(_opts: AutostartOpts): void;
11
+ export declare function autostartStatus(_opts: AutostartOpts): void;
12
+ /** Re-render the unit/plist file from the current paths without touching enable/disable state. */
13
+ export declare function refreshAutostart(opts: AutostartOpts): boolean;
14
+ //# sourceMappingURL=autostart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autostart.d.ts","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;CAChB;AAoSD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAUzD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAQ3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAO1D;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CA2B7D"}