RMUX Python与TypeScript SDK入门:librmux与@rmux/sdk自动化实战
【免费下载链接】rmuxUniversal Rust multiplexer with a typed SDK — drive any CLI or TUI app from code. Native on Linux, macOS, and Windows.项目地址: https://gitcode.com/gh_mirrors/rm/rmux
RMUX是一款用 Rust 编写的通用终端复用器,原生支持 Linux、macOS 与 Windows。它不只是"另一个 tmux 替代品"——通过 Python SDKlibrmux和 TypeScript SDK@rmux/sdk,你可以直接从代码驱动任何 CLI 或 TUI 应用:创建会话、向面板发送输入、等待特定文字出现、截取屏幕快照。本文带你 10 分钟上手这两套 SDK,写出第一个自动化脚本。
为什么用 SDK,而不是解析命令行?
很多自动化工具靠"跑tmux命令 + 解析 stdout 文本"来工作,输出格式一改就全崩。RMUX 走的是另一条路:
- 类型化 IPC 契约:SDK 与本地 RMUX 守护进程(daemon)直接通信,走的是结构化接口,而不是 CLI 解析器或控制模式包装。
- 统一三语言能力:Rust(
rmux-sdk)、Python(librmux)、TypeScript(@rmux/sdk)共享同一套能力模型——会话、面板、流、等待、快照。 - 面向"代码即用户"的场景:CI 流水线、Agent 编排、无人值守部署,都适合用 SDK 编程式控制终端。
官方建议:交互式工作用 RMUX CLI,"代码是用户"时用 SDK。这个分工在 docs/scripting-sdk.md 中有完整说明。
一键安装步骤:三种语言各一条命令
前置条件:先安装 RMUX 本体(守护进程),SDK 会连接本地守护进程,连接时也可自动拉起它。
# Rust cargo add rmux-sdk # Python pip install librmux # TypeScript npm install @rmux/sdk三条命令对应三套 SDK,安装方式完全一致地简单。仓库文档在 README.md 的 "Scripting & API" 一节列出了全部入口。
5 个核心概念,读懂就能写脚本
无论用哪套 SDK,你打交道的都是下面这 5 个对象:
| 概念 | 作用 | 典型用途 |
|---|---|---|
| Rmux(客户端) | 连接/拉起本地守护进程的入口 | Rmux::builder().connect_or_start() |
| Session(会话) | 一个独立的终端工作区,可按名称复用 | 为 CI 任务创建ci会话 |
| Pane(面板) | 会话内的具体终端格,用坐标/handle 寻址 | session.pane(0, 0) |
| Send + Expect | 向面板发文本,并等待某段文字"真的渲染出来" | 发送命令后断言ready |
| Snapshot / Stream | 截取屏幕快照、流式读取输出 | 失败时保存现场、收集日志 |
其中expect(等待可见文本)是最核心的能力:它等的是"屏幕上真正渲染出的内容",而不是进程有没有退出——这正好解决了自动化里"命令发出去了,但程序还没打印完"的经典竞态问题。
第一个实战:Python/TypeScript 风格的自动化流程
下面展示 Rust SDK 的等价示例(Python 与 TypeScript SDK 提供相同的概念模型),对应仓库中的 crates/rmux-sdk/examples/quickstart.rs:
let rmux = Rmux::builder().connect_or_start().await?; // 1. 确保存在名为 ci 的会话(不存在就创建,存在就复用,且脱离终端运行) let session = rmux.ensure_session( EnsureSession::try_named(SessionName::new("ci")?)? .create_or_reuse() .detached(true), ).await?; // 2. 取第一个面板,发一条命令 let pane = session.pane(0, 0); pane.send_text("printf 'ready\\n'\n").await?; // 3. 等待屏幕上出现 "ready",最多等 5 秒 pane.expect_visible_text() .to_contain("ready") .timeout(Duration::from_secs(5)) .await?;翻译成白话:连上守护进程 → 拿到(或创建)会话 → 向面板发输入 → 等屏幕出现期望文字。把这四步套到pip install librmux或npm install @rmux/sdk装上之后,就是你语言里的同样四步。
进阶能力清单
- 能力协商:客户端可调用
capabilities检查守护进程支持的特性(如sdk.pane.state_events、sdk.pane.foreground),跨版本兼容更安全。 - 面板状态流:订阅面板生命周期事件,面板被杀、进程退出时流会收到
Closed终端事件;remain-on-exit保留的面板在流关闭后仍可截图取证。 - 输出收集:
collect_until_exit之类的模式可一直收集输出直到进程退出,适合跑批处理任务。 - 浏览器共享:
rmux web-share可把面板投到浏览器,且走混合抗量子端到端加密(X25519 + ML-KEM-768 → HKDF-SHA256 → ChaCha20-Poly1305 加密帧),自动化产出的现场可以直接分享给同事。
示例代码都在仓库里,建议按顺序跑一遍
SDK crate 自带 30+ 个可运行示例,全部位于 crates/rmux-sdk/examples/,覆盖从入门到进阶:
- quickstart.rs:最小可用示例
- wait_for_text.rs:等待可见文本
- assert_visible_text.rs:文本断言
- sdk_demo_snapshot.rs:屏幕快照
- collect_until_exit.rs:收集输出直到退出
- discover_panes.rs:发现并枚举面板
在仓库根目录执行即可:
cargo run -p rmux-sdk --example wait_for_text cargo run -p rmux-sdk --example assert_visible_text cargo run -p rmux-sdk --example sdk_demo_snapshot遇到排障问题,rmux diagnose --json会输出构建、平台与运行时支持详情,方便定位环境问题。
常见问题速查
| 问题 | 答案 |
|---|---|
| Python 和 TypeScript SDK 与 Rust SDK 能力一致吗? | 概念模型一致:会话、面板、流、等待、快照,均由同一守护进程提供 |
| SDK 会解析 CLI 输出吗? | 不会。它通过类型化 IPC 契约直连守护进程,解析文本只是兜底手段 |
| 会话名冲突怎么办? | 用create_or_reuse语义的 ensure 接口,存在即复用,不存在才创建 |
| Windows 上能跑吗? | 可以。RMUX 原生支持三大平台,Windows 前面板进程信息采用 ConPTY 根进程 + OSC7 等回退策略 |
| 守护进程没启动会怎样? | connect_or_start会自动拉起守护进程,无需手动管理 |
总结:终端自动化的下一步就是"写代码"
RMUX 的librmux与@rmux/sdk把终端复用从"命令行技巧"升级成了"可编程接口":等待渲染文本解决竞态、快照与状态流保障可观测、能力协商保障跨版本稳定。无论你是做 CI 自动化、多 Agent 编排,还是想把 TUI 应用纳入测试,这两套 SDK 都是目前跨平台体验最完整的选型之一。
延伸阅读:docs/scripting-sdk.md(SDK 总览)· docs/web-share.md(Web Share 加密模型)· docs/ARCHITECTURE.md(整体架构)
【免费下载链接】rmuxUniversal Rust multiplexer with a typed SDK — drive any CLI or TUI app from code. Native on Linux, macOS, and Windows.项目地址: https://gitcode.com/gh_mirrors/rm/rmux
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考