/** Resolve the native node-pty input used by the Python SDK runtime builder. */ import { existsSync } from 'node:fs' import { join } from 'node:path' /** * Prefer the workflow's manylinux build and fall back to node-pty's target prebuild. * @param packageDirectory - installed node-pty package directory. * @param arch - Linux target architecture. * @returns the existing addon path. */ export function resolveLinuxNodePtyAddon( packageDirectory: string, arch: 'x64' | 'arm64', ): string { const built = join(packageDirectory, 'build', 'Release', 'pty.node') if (existsSync(built)) return built const prebuilt = join(packageDirectory, 'prebuilds', `linux-${arch}`, 'pty.node') if (existsSync(prebuilt)) return prebuilt throw new Error( `build-exe-for-python-sdk: node-pty addon is absent from both ${built} and ${prebuilt}.`, ) } /** * Require both node-pty addons used by the Windows ConPTY backend. * @param packageDirectory - staged node-pty package directory. * @param arch - Windows target architecture. * @returns the existing addon paths in load order. */ export function resolveWindowsNodePtyAddons( packageDirectory: string, arch: 'x64', ): string[] { const directory = join(packageDirectory, 'prebuilds', `win32-${arch}`) const addons = [ join(directory, 'conpty.node'), join(directory, 'conpty_console_list.node'), ] const missing = addons.filter(path => !existsSync(path)) if (missing.length > 0) { throw new Error(`build-exe-for-python-sdk: Windows node-pty addons are missing: ${missing.join(', ')}.`) } return addons }