Skip to content

fix(cli): odd osc sequences after killing vp run with ctrl-c#2079

Merged
fengmk2 merged 3 commits into
voidzero-dev:mainfrom
forehalo:fix/issue-2036
Jul 7, 2026
Merged

fix(cli): odd osc sequences after killing vp run with ctrl-c#2079
fengmk2 merged 3 commits into
voidzero-dev:mainfrom
forehalo:fix/issue-2036

Conversation

@forehalo

@forehalo forehalo commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

close #2036

the fix ignores the listening on ctrl-c by vp itself until child process exits.

Copilot AI review requested due to automatic review settings July 7, 2026 04:02
@netlify

netlify Bot commented Jul 7, 2026

Copy link
Copy Markdown

Deploy Preview for viteplus-preview canceled.

Name Link
🔨 Latest commit b9bf779
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a4c8eff18eb0b000819ddb2

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_guard for JS CLI delegation so terminal state is restored and SIGINT is ignored in the parent while the child exits.
  • Extend TerminalStateGuard to temporarily ignore SIGINT (Unix) and restore the prior signal disposition on drop.
  • Add a new snapshot fixture plus vpt report-orphan-on-ctrlc and vpt wait-file to 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.

Comment thread crates/vite_command/src/lib.rs
@fengmk2 fengmk2 self-assigned this Jul 7, 2026
@fengmk2 fengmk2 added test: e2e Auto run e2e tests test: install-e2e run vite install e2e test test: create-e2e Run `vp create` e2e tests test: sfw labels Jul 7, 2026
@fengmk2 fengmk2 merged commit cb3f95a into voidzero-dev:main Jul 7, 2026
123 of 151 checks passed
wan9chi added a commit that referenced this pull request Jul 7, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test: create-e2e Run `vp create` e2e tests test: e2e Auto run e2e tests test: install-e2e run vite install e2e test test: sfw

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Odd characters after killing vp run with fish

3 participants