fix(run): switch node-pty to @lydell/node-pty for the plugin's --ignore-scripts install path
node-pty ships prebuilt binaries for darwin/win32 only — on Linux it needs a native build via its install script. The plugin's --ignore-scripts install (scripts/plugin-bootstrap.js, deliberately skipped to avoid requiring a build toolchain) silently left node-pty unusable: server/lib/pty-attach.js's require() threw "Cannot find module './prebuilds/linux-x64//pty.node'" the moment a terminal was attached, leaving TerminalView permanently blank with no visible error. @lydell/node-pty is an API-compatible fork that ships each platform's binary as a regular optionalDependency instead of a postinstall build step, so a plain --ignore-scripts install resolves a working native binding on Linux with no compiler needed. Verified by installing with the exact `npm install --omit=dev --ignore-scripts` invocation the plugin bootstrap uses and confirming require() succeeds.
This commit is contained in:
Generated
+93
-17
@@ -10,12 +10,12 @@
|
|||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@lydell/node-pty": "^1.2.0-beta.15",
|
||||||
"adm-zip": "^0.5.16",
|
"adm-zip": "^0.5.16",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"cross-spawn": "^7.0.6",
|
"cross-spawn": "^7.0.6",
|
||||||
"express": "^4.21.2",
|
"express": "^4.21.2",
|
||||||
"multer": "^2.0.0",
|
"multer": "^2.0.0",
|
||||||
"node-pty": "^1.1.0",
|
|
||||||
"redoc": "^2.5.3",
|
"redoc": "^2.5.3",
|
||||||
"swagger-ui-express": "^5.0.1",
|
"swagger-ui-express": "^5.0.1",
|
||||||
"tar": "^7.4.3",
|
"tar": "^7.4.3",
|
||||||
@@ -82,6 +82,98 @@
|
|||||||
"node": ">=18.0.0"
|
"node": ">=18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@lydell/node-pty": {
|
||||||
|
"version": "1.2.0-beta.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lydell/node-pty/-/node-pty-1.2.0-beta.15.tgz",
|
||||||
|
"integrity": "sha512-Br8wBxzbxFwdWgk9uQ+rdzE0xfoxOK4QuGH54swhRwc5IxP6H9Y1/bcyazRGvNUs6XkB5qNVkezuKSRxUwZe7A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@lydell/node-pty-darwin-arm64": "1.2.0-beta.15",
|
||||||
|
"@lydell/node-pty-darwin-x64": "1.2.0-beta.15",
|
||||||
|
"@lydell/node-pty-linux-arm64": "1.2.0-beta.15",
|
||||||
|
"@lydell/node-pty-linux-x64": "1.2.0-beta.15",
|
||||||
|
"@lydell/node-pty-win32-arm64": "1.2.0-beta.15",
|
||||||
|
"@lydell/node-pty-win32-x64": "1.2.0-beta.15"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@lydell/node-pty-darwin-arm64": {
|
||||||
|
"version": "1.2.0-beta.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-arm64/-/node-pty-darwin-arm64-1.2.0-beta.15.tgz",
|
||||||
|
"integrity": "sha512-6TSBbzdcLiNTHl1mTuzflqXrkmcC36USVGvERoDgvHk2ItEDaMaFZuAJ1CqPmwYj0DyhCS16TVS8OGK9xZnjyQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lydell/node-pty-darwin-x64": {
|
||||||
|
"version": "1.2.0-beta.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-x64/-/node-pty-darwin-x64-1.2.0-beta.15.tgz",
|
||||||
|
"integrity": "sha512-yDT2oqPqYMBScyuk1U9Rg5VKcrbMOD9o9jWYYamDADA3NSbUISroPChrqYRQ74Y7BQtNH4gqYAiWOZRi5uQZ0Q==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lydell/node-pty-linux-arm64": {
|
||||||
|
"version": "1.2.0-beta.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-arm64/-/node-pty-linux-arm64-1.2.0-beta.15.tgz",
|
||||||
|
"integrity": "sha512-wkbNF7dYAmtJv+o2+iztVlNwnUB4B0uX0wh/UD+mwMcmE2gNMnW9GChXO7fEE5XJokD0vB5idiHpGegaN+G/sg==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lydell/node-pty-linux-x64": {
|
||||||
|
"version": "1.2.0-beta.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-x64/-/node-pty-linux-x64-1.2.0-beta.15.tgz",
|
||||||
|
"integrity": "sha512-+U/5AVvHT6W+8OCYcnJgN0Qgc0ycO3TfD6aaFJHK+WHij797f8gsi5dV1HEO9l6YQmWCD+VL5gaLDhx3mxHwCA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lydell/node-pty-win32-arm64": {
|
||||||
|
"version": "1.2.0-beta.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-arm64/-/node-pty-win32-arm64-1.2.0-beta.15.tgz",
|
||||||
|
"integrity": "sha512-pyAk91w7wnnKrD4mrHXtIXRfmzSWV5bEzvRhurXcMCtCc2TJ424ciUskIgWMhAPP6y3KyUnqElj+U6kY3iOt0A==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@lydell/node-pty-win32-x64": {
|
||||||
|
"version": "1.2.0-beta.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-x64/-/node-pty-win32-x64-1.2.0-beta.15.tgz",
|
||||||
|
"integrity": "sha512-2f8twEmDVxZ7drchAXjtevpmSPhFok0avAnzXro4t5gmz0xsPNKkoZvymwtuIS3xo7PzQqZOPQ/YzwEMb7oIzQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/@nodable/entities": {
|
"node_modules/@nodable/entities": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.2.0.tgz",
|
||||||
@@ -1670,12 +1762,6 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-addon-api": {
|
|
||||||
"version": "7.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
|
|
||||||
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||||
@@ -1708,16 +1794,6 @@
|
|||||||
"node": "4.x || >=6.0.0"
|
"node": "4.x || >=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-pty": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"node-addon-api": "^7.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-readfiles": {
|
"node_modules/node-readfiles": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz",
|
||||||
|
|||||||
+1
-1
@@ -89,12 +89,12 @@
|
|||||||
"docker:down": "docker compose down"
|
"docker:down": "docker compose down"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@lydell/node-pty": "^1.2.0-beta.15",
|
||||||
"adm-zip": "^0.5.16",
|
"adm-zip": "^0.5.16",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"cross-spawn": "^7.0.6",
|
"cross-spawn": "^7.0.6",
|
||||||
"express": "^4.21.2",
|
"express": "^4.21.2",
|
||||||
"multer": "^2.0.0",
|
"multer": "^2.0.0",
|
||||||
"node-pty": "^1.1.0",
|
|
||||||
"redoc": "^2.5.3",
|
"redoc": "^2.5.3",
|
||||||
"swagger-ui-express": "^5.0.1",
|
"swagger-ui-express": "^5.0.1",
|
||||||
"tar": "^7.4.3",
|
"tar": "^7.4.3",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* @file pty-attach.js
|
* @file pty-attach.js
|
||||||
* @description Bridges one WebSocket connection to a `node-pty`-backed
|
* @description Bridges one WebSocket connection to an `@lydell/node-pty`-backed
|
||||||
* `tmux attach-session` process. Binary WS frames carry raw PTY bytes in
|
* `tmux attach-session` process. Binary WS frames carry raw PTY bytes in
|
||||||
* both directions; text WS frames carry small JSON control messages
|
* both directions; text WS frames carry small JSON control messages
|
||||||
* (`resize`, and an outbound `exit` sent once when the pane process/tmux
|
* (`resize`, and an outbound `exit` sent once when the pane process/tmux
|
||||||
@@ -98,7 +98,15 @@ function attach(ws, runId, { cols, rows }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Real spawn implementation — lazy-required so unit tests never load the
|
// Real spawn implementation — lazy-required so unit tests never load the
|
||||||
// native node-pty addon unless they explicitly opt in.
|
// native PTY addon unless they explicitly opt in. Uses @lydell/node-pty (a
|
||||||
__setSpawnImpl((...args) => require("node-pty").spawn(...args));
|
// drop-in-API-compatible fork of node-pty) rather than node-pty itself:
|
||||||
|
// node-pty ships prebuilt binaries for darwin/win32 only, so on Linux it
|
||||||
|
// needs a native build via its install script — but the plugin install path
|
||||||
|
// runs `npm install --ignore-scripts` deliberately (see plugin-bootstrap.js)
|
||||||
|
// to avoid requiring a build toolchain on the user's machine. @lydell/node-pty
|
||||||
|
// instead ships the platform binary as a regular optionalDependency
|
||||||
|
// (@lydell/node-pty-linux-x64 etc.), so a plain --ignore-scripts install still
|
||||||
|
// resolves a working native binding with no compiler needed.
|
||||||
|
__setSpawnImpl((...args) => require("@lydell/node-pty").spawn(...args));
|
||||||
|
|
||||||
module.exports = { attach, validateRunId, __setSpawnImpl };
|
module.exports = { attach, validateRunId, __setSpawnImpl };
|
||||||
|
|||||||
Reference in New Issue
Block a user