Skip to content

Vite Plus PATH shim can shadow external CLI upgrades (OpenCode example) #2181

Description

@ranjith7022

Summary

On Windows, a Vite Plus-owned executable in ~\.vite-plus\bin can remain ahead of a newer version installed by that CLI's own updater. The shell command then continues to run the stale Vite Plus executable.

OpenCode is the confirmed example below. This may affect any externally updatable CLI for which Vite Plus installs an executable with the same command name, but this report does not claim other packages are currently affected.

Environment

  • Windows
  • Vite Plus: 0.2.4
  • OpenCode before upgrade: 1.17.18

Reproduction

opencode --version
# 1.17.18

opencode upgrade --print-logs

The updater reported:

Using method: npm
From 1.17.18 → 1.18.1
Upgrade complete

But immediately afterwards:

opencode --version
# 1.17.18

Investigation

The command resolved to the Vite Plus-owned path:

C:\Users\<user>\.vite-plus\bin\opencode.exe

The updater had installed OpenCode 1.18.1 at:

C:\Users\<user>\.vite-plus\js_runtime\node\22.19.0\node_modules\opencode-ai\bin\opencode.exe

Running that executable directly returned 1.18.1; the PATH executable remained at 1.17.18.

Scope checked

  • Confirmed: opencode was shadowed by the stale Vite Plus executable.
  • Not implicated in this installation: npm, npx, and corepack resolve to NVM rather than ~\.vite-plus\bin.
  • Potentially affected pattern: any CLI that manages its own upgrades while Vite Plus also places a same-named executable earlier on PATH.

Expected behavior

After a CLI reports a successful self-upgrade, its normal shell command should run the upgraded version.

Workaround

Replacing the stale Vite Plus executable with the newly installed OpenCode executable made opencode --version report 1.18.1.

Suggested direction

Vite Plus could avoid installing static, same-named binaries for externally self-updating CLIs, make them forwarding shims, or provide a way to refresh the Vite Plus bin entry after an external upgrade.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions