botmux 是一个薄编排层,把"飞书事件"翻译成"CLI 进程的输入/输出"。核心进程与模块:
生产形态是一个 bot 一个 daemon 进程。多机器人 = 多 daemon,进程完全隔离,互不干扰。
| 模块 | 职责 |
|---|---|
daemon.ts |
薄编排层,组装各模块并启动 |
worker.ts |
Worker 子进程,通过适配器管理 CLI + PTY |
server.ts |
Web 终端 HTTP 服务(xterm.js) |
bot-registry.ts |
多机器人配置加载 + 状态管理 |
adapters/cli/ |
CLI 适配器(参数构建、输入写入、Skill 目录),每种 CLI 一个文件 |
adapters/backend/ |
会话后端:PtyBackend、TmuxPipeBackend |
im/lark/ |
飞书:事件路由、卡片构建/处理、API client、消息解析 |
core/ |
worker-pool、command-handler、session-manager、cost-calculator、scheduler |
skills/ |
开箱即用的 Skill(botmux-send / botmux-schedule / botmux-bots / botmux-history / botmux-quoted) |
utils/ |
idle-detector(CLI 空闲检测)、terminal-renderer(xterm.js 截屏)、logger |
im.message.receive_v1 → event-dispatcher 解析、判断归属(@mention / 话题 / 群权限)。/xxx 斜杠命令;非命令消息交给会话。botmux send 等 Skill / 命令主动往话题发消息。关键点:worker 与 CLI 通过后端(PTY 或 tmux)解耦。tmux 后端下,daemon/worker 重启时 CLI 进程仍在 tmux 里活着,下次消息自动 re-attach,无需 --resume 重载上下文。详见 tmux 会话常驻。