Skip to content

Respect provider installation ownership when updating - #461

Merged
Tryanks merged 1 commit into
mainfrom
fix/provider-installation-updates
Sep 18, 2026
Merged

Tryanks merged 1 commit into
mainfrom
fix/provider-installation-updates

Conversation

@Tryanks

@Tryanks Tryanks commented Sep 18, 2026 •

Copy link
Copy Markdown
Owner

When provider CLIs were managed by mise, Tcode still offered npm install -g or the provider’s self-updater. Resolve the selected executable’s installation owner before looking for updates, and use that owner’s package, registry/channel, version constraints, and execution context. Local Claude, Codex, Pi, and OpenCode installations now all resolve to their actual mise tool keys.

The services version-check module owns installation discovery and the structured update plan. It verifies manager metadata and executable/package identity for mise, Homebrew, JavaScript global package managers, Volta, supported system package managers, and known native installations. Unknown provenance and unsupported activation schemes remain manual; privileged commands require a terminal. Not every recognized manager has a reliable latest-version query, and those cases do not fall back to npm’s version feed.

Runtime retains the displayed plan, revalidates it before execution, rejects stale checks after configuration changes or update starts, and refreshes provider status after an update. Built-in update actions no longer appear on custom profiles that may launch another installation. The UI displays a compact command and copies its full execution context; both locales and the visual contract are updated. Protocol additions accept older serialized messages.

Regression coverage replaces the retired path-substring/source-guessing contract with ownership fixtures: mise aliases and shims, nested runtime installations, actual package manifests and Windows shims, package-manager roots and registries, pins/holds, native update policy, and unverified wrappers. Runtime tests protect stale-result invalidation, and literal older protocol input protects compatibility. Obsolete process/UI forwarding helpers are removed with their callers.

Validation performed on this commit’s contents:

  • cargo fmt --all --check
  • cargo clippy --workspace --all-targets --locked -- -D warnings
  • cargo build --workspace --locked
  • RUST_TEST_THREADS=1 cargo test --workspace --locked — 1,249 passed, 6 existing ignored
  • cargo test -p tcode-services --locked version_check::provider_updates — 20 passed
  • cargo machete
  • Web and iOS simulator checks using the workflow targets and RUSTFLAGS='-D warnings'
  • Read-only live resolution of this machine’s four mise-managed providers; all select the expected mise upgrade --yes -- <tool> command. No provider was upgraded.
  • git diff --check

A default-parallel workspace run hit the existing remote handshake watchdog test (upgrade_stall_uses_the_remaining_handshake_budget); its isolated rerun and the final serial workspace run passed. The macOS build emitted the existing linker unwind-table warning. The local Android check could not start because no NDK is installed; The final-commit CI run covers Android, Windows, and Linux successfully. Other package managers are covered by recorded/fake-runner fixtures, not live upgrades. No GUI end-to-end test was run.

Final commit d32ce43971e54452556645e6b3ec3765e03c2517: CI run 35352048990 passed all six checks: scope planning, dependency hygiene, macOS, Linux, Windows, and Mobile/Web (including iOS, Web, and Android). No CI rerun or code fix was needed.

@Tryanks
Tryanks merged commit 800e4b8 into main Sep 18, 2026
6 checks passed
@Tryanks
Tryanks deleted the fix/provider-installation-updates branch September 18, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant