fix(core): pipe plugin stdout to avoid inconsistent terminal state #33369
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Current Behavior
After running commands which spawn plugin workers on the main process (
nx show project, or any command with the daemon disabled) some users (and notably @FrozenPandaz) experienced terminal issues that resulted in ↑ / ↓ printing escape codes instead of scrolling command history.Expected Behavior
This pull request updates how plugin worker processes handle their input/output streams to improve terminal behavior and debugging capabilities. The main change is switching the worker's stdio from
inherittopipe, and then manually piping the worker's stdout and stderr to the main process. This avoids terminal state issues and enables better debugging.Plugin worker process I/O handling:
stdiooption from'inherit'to'pipe'instartPluginWorker, preventing terminal state issues (such as broken arrow key functionality) after Nx execution.stdoutandstderrto the main process, making it easier to debug and allowing plugins to communicate metrics. Increased the max listener count onprocess.stdoutandprocess.stderrto avoid warnings from multiple listeners.Related Issue(s)
Fixes #