Skip to content

UniPty v1 · PTY 平台

面向 Node、Bun、Deno 的运行时无关 PTY 契约

用于伪终端的单一 Core API。自带原生底层——node-pty、zigpty、Bun.Terminal 或 @sigma/pty-ffi——经由开发者显式选择、可替换的 Backend 接入。支持声明只来自发布证据目录,绝不来自元数据。

单一 Core API可替换 Backend证据门控支持MIT
unipty — /bin/sh -i

$node quick-start.mjs

backend ready: @unipty/backend-node-pty

spawn: /bin/sh -i · 80x24 cells

stream: utf8 text · bootstrap buffered

exit: code 0 · signal null

快速开始

获取一个 Backend。启动一个 shell。

先获取就绪的 Backend,交给 Core,再用结构化 argv 启动 shell——没有字符串命令,没有隐式 shell。同一套 Core 契约运行在每条官方 Backend 路由上:更换路由只是更换你获取的 Backend,其余一切不变。

quick-start.mjs
import { UniPty } from "unipty";
import { createNodePtyBackend } from "@unipty/backend-node-pty";

// 1. Acquire a ready Backend (one-time, asynchronous).
const backend = await createNodePtyBackend();

// 2. Core accepts only a structurally ready Backend.
const unipty = new UniPty({ backend });

// 3. Spawn: argv is non-empty, argv[0] is the executable.
const pty = unipty.spawn(["/bin/sh", "-i"], {
  terminal: { cols: 80, rows: 24 },
});

// 4. Consume Terminal Text (or Terminal Bytes with "bytes").
for await (const chunk of pty.stream({ encoding: "utf8" })) {
  process.stdout.write(chunk);
}

// 5. Write with boolean readiness; drain when Core says pause.
if (!pty.write("echo hello\r")) {
  await pty.drain();
}

// 6. Observe process exit independently of the stream.
const { exitCode, signal } = await pty.exited;

完整的契约漫游——流、背压、生命周期、能力——请看 文档页面

内置什么

01

一套契约,三个运行时

Core 拥有流、bootstrap 缓冲、UTF-8 转换、背压、公共错误与生命周期。你的代码在 Node、Bun、Deno 之上保持运行时无关。

02

Backend 可替换

原生底层——node-pty、zigpty、Bun.Terminal、@sigma/pty-ffi——藏在 Backend Endpoint 接缝之后。持久化或远程主机以 Backend 的形式到来,而不是第二套插件生命周期。

03

带诚实背压的流

write() 返回布尔就绪,drain() 等待恢复,队列保持有界。饱和时以类型化失败拒绝整个值——绝不部分接受、绝不静默丢弃、绝无无界队列。

04

证据,而非承诺

元数据只声明目标,绝不宣称支持。只有对已安装包制品在精确运行时/平台元组上的完整一致性通过,才会成为发布目录中的 verified。

官方路由

每个包都如实声明自己的底层实现

官方 Backend 包统一使用 @unipty/backend-* 命名空间;provenance 描述实现种类与底层实现,这些声明都不是支持宣称。

运行时底层实现说明
@unipty/backend-node-ptyNodenode-pty (via @lydell/node-pty prebuilds)第三方原生插件,随包附带预构建二进制。Node 没有原生 PTY API;本路由如实封装生态标准底层——绝不宣称适配的是 Node 运行时原生 API。
@unipty/backend-zigptyNodezigpty (Zig-built NAPI prebuilds)第二条 Node 路由,底层为 Zig 实现:八个元组的预编译直接随 tarball 分发、零安装脚本,并有硬性原生门禁——绝不回退到管道伪 PTY。
@unipty/backend-bunBunBun.TerminalBun 内建终端 API:Linux/macOS 自 Bun 1.3.13 起,Windows 经 ConPTY 自 1.3.14 起。支持是带版本的证据,不是笼统宣称。
@unipty/backend-deno-sigma__pty-ffiDeno@sigma/pty-ffi (Rust portable-pty)仅以 npm 发布的包,构建期内嵌 @sigma/pty-ffi/noinit 闭包与目标动态库。需要显式 Deno FFI 权限。

当前发布实际验证了哪些元组?查看 兼容性目录