Files
orca/config/scripts/ssh-relay-node-pty-windows-settlement.mjs
T
2026-07-14 11:20:42 -04:00

33 lines
1.3 KiB
JavaScript

import { readFile, writeFile } from 'node:fs/promises'
import { join } from 'node:path'
const conptyDllKillSequence = ` this._ptyNative.kill(this._pty, this._useConptyDll);
this._outSocket.on('data', function () {
_this._conoutSocketWorker.dispose();
});`
const settledConptyDllKillSequence = ` this._ptyNative.kill(this._pty, this._useConptyDll);
// Why: quiet ConPTY output cannot retrigger disposal, so start its bounded drain now.
this._conoutSocketWorker.dispose();
this._outSocket.on('data', function () {
_this._conoutSocketWorker.dispose();
});`
export async function applyWindowsNodePtySettlement({ nodePtyLibraryDirectory, tuple }) {
if (!tuple.startsWith('win32-')) {
return { applied: false }
}
const agentPath = join(nodePtyLibraryDirectory, 'windowsPtyAgent.js')
const source = await readFile(agentPath, 'utf8')
const matchCount = source.split(conptyDllKillSequence).length - 1
if (matchCount !== 1) {
throw new Error(
`expected exactly one DLL-mode ConPTY worker settlement sequence; found ${matchCount}`
)
}
await writeFile(agentPath, source.replace(conptyDllKillSequence, settledConptyDllKillSequence))
return { applied: true }
}