Uh oh!
There was an error while loading. Please reload this page.
fix(cli): odd osc sequences after killing vp run with ctrl-c - #2079
Conversation
✅ Deploy Preview for viteplus-preview canceled.
|
There was a problem hiding this comment.
Pull request overview
This PR addresses issue #2036 where terminating vp run with Ctrl+C can leave stray terminal escape sequences in fish by ensuring the global CLI doesn’t handle SIGINT itself while a delegated JS child is still shutting down, and by restoring terminal state around child execution. It also adds a CLI snapshot fixture and new vpt helpers to reproduce/assert Ctrl+C teardown behavior.
Changes:
- Use
vite_command::execute_with_terminal_guardfor JS CLI delegation so terminal state is restored and SIGINT is ignored in the parent while the child exits. - Extend
TerminalStateGuardto temporarily ignore SIGINT (Unix) and restore the prior signal disposition on drop. - Add a new snapshot fixture plus
vpt report-orphan-on-ctrlcandvpt wait-fileto validate Ctrl+C teardown timing.
Reviewed changes
Copilot reviewed 11 out of 12 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| crates/vite_global_cli/src/js_executor.rs | Switches JS delegation to execute_with_terminal_guard so Ctrl+C doesn’t tear down the parent before the JS child exits. |
| crates/vite_command/src/lib.rs | Enhances terminal guard to ignore SIGINT for the parent while waiting, restoring prior signal disposition afterward. |
| crates/vite_command/Cargo.toml | Enables nix signal feature for Unix builds. |
| crates/vite_cli_snapshots/tests/cli_snapshots/README.md | Documents new vpt subcommands used by snapshot fixtures. |
| crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/run_ctrlc_teardown/snapshots/run_ctrlc_exits_before_task_shutdown.md | Adds a snapshot case capturing Ctrl+C teardown behavior (expected output needs to reflect fixed behavior). |
| crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/run_ctrlc_teardown/snapshots.toml | Registers the new snapshot case and its steps. |
| crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/run_ctrlc_teardown/package.json | Adds a fixture script used by vp run dev in the snapshot. |
| crates/vite_cli_snapshots/src/bin/vpt/wait_file.rs | Adds vpt wait-file utility to poll for and print async-written files. |
| crates/vite_cli_snapshots/src/bin/vpt/report_orphan_on_ctrlc.rs | Adds a Unix-only helper to detect whether graceful shutdown completed after Ctrl+C. |
| crates/vite_cli_snapshots/src/bin/vpt/main.rs | Wires new vpt subcommands into the multitool binary. |
| crates/vite_cli_snapshots/Cargo.toml | Adds Unix-only nix deps needed by the new vpt helper. |
| Cargo.lock | Records the new nix dependency usage for the snapshots crate. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
…xes (#2081) Release vite-plus v0.2.3: config extraction, create, and `vp run` reliability fixes. A patch release that restores static config extraction for projects importing `defineConfig` from `vite`, fixes `vp create` for org templates on registries that strip custom package fields, cleans up terminal output after Ctrl-C during `vp run`, and updates bundled Vite to 8.1.3. ### Highlights - **Custom `VP_HOME` is honored on every run**: the global `vp` now respects a user-set `VP_HOME` for its home directory instead of falling back to `~/.vite-plus`, and persists it in the generated env files, so a custom install location no longer produces multiple instances or unusable packages ([#2029](#2029)), by @liangmiQwQ ### Features - Upgrade bundled Vite from `8.1.2` to `8.1.3` (inlined CSS after the shebang line, CSS preload for nested dynamic imports, SSR stacktrace column fix) ([#2042](#2042)), by @voidzero-guard[bot] ### Fixes & Enhancements - `vp run` no longer misreads a `vite.config.ts` when its `defineConfig` comes from a preset or a custom wrapper instead of `vite-plus` or `vite`. Such configs are now evaluated at runtime rather than assumed to be Vite+'s own, so projects that use them no longer wrongly report `Task "build" not found` ([#2060](#2060), [#2075](#2075)), by @liangmiQwQ and @fengmk2 - Killing a `vp run` task with Ctrl-C no longer leaves odd OSC escape sequences in the terminal; `vp` defers its own Ctrl-C handling until the child process exits ([#2079](#2079)), by @forehalo - `vp migrate`: rewriting a `package.json` prettier script now emits a single `--check`, so scripts that combined `--check` with `--list-different` / `-l` / `-c` no longer produce a duplicated `vp fmt --check --check` ([#2044](#2044)), by @shulaoda - `vp create @org:name`: read the org template catalog (`createConfig`) from the published tarball when the registry (e.g. GitHub Packages) strips custom fields from packument metadata ([#2063](#2063)), by @hiro-daikin - `vp run`: missing env vars requested through `@voidzero-dev/vite-task-client` now return `undefined` instead of `null`, preserving Vite production `NODE_ENV` semantics when builds run through `vp run` ([vite-task#508](voidzero-dev/vite-task#508), via [#2076](#2076)), by @wan9chi ### Refactor - `static_config`: drop the unreachable `vite.config.json` branch ([#2045](#2045)), and remove unused exported CLI helpers ([#2046](#2046)), by @shulaoda ### Docs - Update the announcement links and callout for the beta release ([#2027](#2027)), remove the stale `Dockerfile.alpine` comment ([#2068](#2068)), by @fengmk2 - Add the missing `pnpm-workspace.yaml` to the docs Dockerfile ([#2059](#2059)), by @wan-kong - Refresh the root agent guide ([#2072](#2072)), by @jong-kyung ### Chore - Cross-compile Windows tests and CLI binaries on Linux with cargo-xwin ([#1824](#1824)), install local vite-plus builds through a local npm registry ([#2021](#2021)), fast docs format check for docs-only PRs ([#2028](#2028)), pack local dirs for the registry bridge instead of pkg.pr.new ([#2038](#2038)), remove the stale create workflow updater ([#2061](#2061)), and add PTY-based interactive CLI snapshot tests ([#2052](#2052)), by @fengmk2 - Cache `vp run` output for docs builds ([#2006](#2006)), by @wan9chi - Remove legacy completion cleanup ([#2050](#2050)), by @nekomoyi - Update the crate-ci/typos action ([#2039](#2039)) and GitHub Actions ([#2055](#2055), [#1905](#1905)), by @renovate[bot] - Refresh the Node.js release keyring ([#2058](#2058)) and the docs trusted-stack stats ([#2064](#2064)), by @voidzero-guard[bot] ### Bundled Versions | Tool | Version | Source | | --- | --- | --- | | vite | `8.1.3` | [`578ffb8`](vitejs/vite@578ffb8) | | rolldown | `1.1.4` | [`6cbd233`](rolldown/rolldown@6cbd233) | | tsdown | `0.22.3` | [npm](https://npmx.dev/package/tsdown/v/0.22.3) | | vitest | `4.1.9` | [npm](https://npmx.dev/package/vitest/v/4.1.9) | | oxlint | `1.72.0` | [npm](https://npmx.dev/package/oxlint/v/1.72.0) | | oxlint-tsgolint | `0.24.0` | [npm](https://npmx.dev/package/oxlint-tsgolint/v/0.24.0) | | oxfmt | `0.57.0` | [npm](https://npmx.dev/package/oxfmt/v/0.57.0) | ### Upgrade ```bash vp upgrade ``` ### New Contributors @wan-kong and @hiro-daikin made their first contributions. **Full Changelog**: v0.2.2...v0.2.3 --- Merging this PR will trigger the release workflow. --------- Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com> Co-authored-by: wan9chi <dk4rest@gmail.com>
close#2036
the fix ignores the listening on
ctrl-cbyvpitself until child process exits.