mirror of
https://github.com/morluto/rea
synced 2026-10-27 22:45:19 -04:00
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
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<ProcessCaptureCapability> => {
|
|
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<void>((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",
|
|
};
|
|
}
|
|
};
|