import { tmpdir } from "node:os"; import { spawn } from "node-pty"; export type ProcessCaptureCapability = | { readonly available: true; readonly backend: "node-pty" } | { readonly available: false; readonly backend: "node-pty"; readonly reason: string; }; /** Probe the actual native PTY seam instead of inferring support from the OS name. */ export const probeProcessCaptureCapability = async (): Promise => { try { const terminal = spawn( process.platform === "win32" ? "cmd.exe" : "/bin/sh", process.platform === "win32" ? ["/c", "exit", "0"] : ["-c", "exit 0"], { cwd: tmpdir(), env: { HOME: tmpdir(), TERM: "xterm-256color" }, cols: 80, rows: 24, name: "xterm-256color", }, ); await new Promise((resolveExit) => terminal.onExit(() => resolveExit()), ); return { available: true, backend: "node-pty" }; } catch { return { available: false, backend: "node-pty", reason: "the native PTY backend could not start a probe process", }; } };