AGENTS.md@packages/pty · git:20260831.a99450d · 2026-08-31 · sha256 5ee50a366d3d8c57
AGENTS.md@packages/pty git:20260831.a99450dA
Immutable. This exact content is served forever at /api/v1/blob/5ee50a366d3d8c57.
# packages/pty `@earendil-works/pi-pty` is the TypeScript PTY facade: native loader, sessions, detached registry, headless screen, and non-PTY pipe fallback. ## STRUCTURE ```text src/index.ts Public barrel; ".", "./screen", "./registry", "./native" exports src/loader.ts, native-loader.ts Native prebuild discovery and ABI checks src/session.ts Public session lifecycle src/session-native.ts Native backend adapter src/pipe-fallback.ts child_process fallback when native is absent src/session-exit.ts Exit settlement helpers src/registry*.ts Session registry and detached ownership src/screen.ts Headless terminal screen state src/quarantine.ts macOS quarantine detection for prebuilds native/prebuilds/ Shipped platform binaries native/check-prebuild-fresh.mjs Prebuild freshness gate test/fixtures/*.mjs Native-addon child processes for callback/worker races ``` ## INVARIANTS - The native ABI constant is intentionally independent of package CalVer. Keep it aligned with `crates/senpi-pty` exports. - macOS quarantine is probed via `xattr -p` before loading a prebuild. Detection must never clear the attribute; an unreadable attribute is non-rejecting. - Unsupported or missing native bindings select the pipe fallback with a diagnostic; fallback behavior must never be presented as a real PTY. - Exit notification settles exactly once across native exit, child exit, startup failure, kill, and disposal races. - `kill()` is idempotent and detached-child cleanup owns the full process tree. - Bound retained raw output/tails; persistent sessions must not grow memory without limit. - Registry IDs, detached process metadata, stop, and removal remain explicit. The current registry has no caller-authorization model; do not claim owner isolation without adding one. ## WHERE TO LOOK | Task | Path | |---|---| | Public API / subpath exports | `src/index.ts` | | Native loading/ABI | `src/loader.ts`, `src/native-loader.ts` | | Session lifecycle | `src/session.ts`, `src/session-exit.ts` | | Fallback process behavior | `src/pipe-fallback.ts` | | Detached sessions | `src/registry.ts`, `src/registry-detached.ts` | | Screen parsing | `src/screen.ts` | | Native implementation | `crates/senpi-pty/` | ## VALIDATION - Run `bun run test` from this package. - Run `bun run check:prebuild` when native artifacts or ABI loading changes. - Lifecycle changes need focused race tests for exactly-once exit, idempotent kill, and process-tree cleanup. - Run root `bun run check` for repository integration.