- Replaced the separate GUI-linked pi_natives.desktop.linux-x64 addon with a pure-Rust X11 backend (x11rb RustConnection capture via RandR/GetImage, XTest input with keysym mapping) compiled into the core addon on every published target; Linux arm64 and musl are now supported and headless hosts load the addon unaffected. - Removed the native-desktop-linux cargo feature, desktop_unsupported.rs, lazy desktop loader, second napi build, desktop packaging/CI steps, GUI build dependencies, and the now-unreferenced vendored libspa crate; reverted setup-system-deps to main. - Preserved the desktop input hardening semantics on the unified backend: XTest layouts reject negative origins and coordinates beyond 0..=32767, batch coordinates stay bound to the frame last returned to JS with intermediate screenshots deferred, coordinate input requires a previously returned frame, and failed chord releases still release every held key. - Enforced a 60s worker-side execute deadline (DESKTOP_DEADLINE_EXCEEDED): no input is emitted after expiry and wait-heavy batches are rejected upfront. - Added int32 fail-closed validation for coordinates, drag points, and scroll deltas at the JS ingress and gateway schema. - Exposed computer to models without native OpenAI computer-use support as a regular function tool with a typed GA action schema across OpenAI, Azure, and Codex Responses providers, including named forced choice. - Added the /computer slash command (on/off/status/toggle) for session-only enablement via runtime tool registration in SessionTools. - Updated docs, changelogs, and contract tests accordingly.
@oh-my-pi/pi-natives
Native Rust functionality via N-API.
What's Inside
- Grep: Regex-based search powered by ripgrep's engine with native file walking and matching
- Find: Glob-based file/directory discovery with gitignore support (pure TypeScript via
globPaths) - SIXEL: Terminal image encoding for SIXEL-capable terminals (decode, resize, encode in one pass)
General-purpose image processing (decode/resize/encode for files and buffers)
lives in Bun.Image on the JS side; this
crate only ships the SIXEL encoder because no built-in equivalent exists for
that terminal protocol.
Usage
import { grep, find, encodeSixel } from "@oh-my-pi/pi-natives";
// Grep for a pattern
const results = await grep({
pattern: "TODO",
path: "/path/to/project",
glob: "*.ts",
context: 2,
});
// Find files
const files = await find({
pattern: "*.rs",
path: "/path/to/project",
fileType: "file",
});
// SIXEL encode for a terminal cell box (px)
const sequence = encodeSixel(pngBytes, widthPx, heightPx);
Building
# Build native addon from workspace root (requires Rust)
bun run build
# Type check
bun run check
Architecture
@oh-my-pi/pi-natives publishes a small core package plus generated
platform-specific optional dependency packages:
crates/pi-natives/ # Rust source (workspace member)
src/lib.rs # N-API exports
src/sixel.rs # SIXEL terminal-image encoding
Cargo.toml # Rust dependencies
native/ # Core loader files and local/CI native build outputs
index.js # Public native export surface
loader-state.js # Platform, ISA variant, and addon resolution
embedded-addon.js # Standalone binary embed stub/generated metadata
pi_natives.<platform>-<arch>-modern.node # x64 modern ISA (local/CI artifact)
pi_natives.<platform>-<arch>-baseline.node # x64 baseline ISA (local/CI artifact)
pi_natives.<platform>-<arch>.node # non-x64 build artifact
npm/<platform>-<arch>/ # Generated at publish time, not committed
package.json # @oh-my-pi/pi-natives-<platform>-<arch>
*.node # Only that platform's addon binary or x64 ISA variants
src/ # TypeScript wrappers and generated declarations source
native.ts
index.ts
The published core package contains only the JS loader, declarations, README,
and package.json. Release publishing generates one leaf package per supported
os/cpu pair and injects those leaves into the core manifest as pinned
optionalDependencies, so package managers install only the host platform's
native addon. x64 leaves include every built ISA variant, and the loader keeps
choosing between baseline and modern at runtime.