0b62f2971b
The earlier exports/cleanup refactor removed @napi-rs/cli from packages/natives devDeps, breaking every native job. It also left two test files calling private symbols and a stale KeyId literal: - packages/natives: re-add @napi-rs/cli (catalog) so node_modules/.bin/napi exists for build-native.ts. - test/acp-agent.test.ts: import ACP_BOOTSTRAP_RACE_GUARD_MS from modes/acp/acp-agent (previously implicit via mass-export refactor). - test/silent-abort-overlay-render.test.ts: lowercase 'Ctrl+S' -> 'ctrl+s' to match the KeyId union.
@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
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/ # Native addon binaries
pi_natives.<platform>-<arch>-modern.node # x64 modern ISA (AVX2)
pi_natives.<platform>-<arch>-baseline.node # x64 baseline ISA
pi_natives.<platform>-<arch>.node # non-x64 build artifact
src/ # TypeScript wrappers
native.ts # Native addon loader
index.ts # Public API