Skip to content

fix(vfox): resolve GitHub token lazily inside Lua plugins#9816

Merged
jdx merged 5 commits into
mainfrom
claude/beautiful-williams-10fb31
May 12, 2026
Merged

fix(vfox): resolve GitHub token lazily inside Lua plugins#9816
jdx merged 5 commits into
mainfrom
claude/beautiful-williams-10fb31

Conversation

@jdx

@jdx jdx commented May 12, 2026

Copy link
Copy Markdown
Owner

Summary

mise hook-env, mise completion, and other commands that build the toolset env call VfoxBackend::exec_env() for every installed Vfox tool. That eventually goes through VfoxPlugin::vfox(), which was eagerly resolving the GitHub token on every call — spawning github.credential_command (e.g. unlocking a password manager) even when no Lua plugin would ever issue an HTTP request.

This change passes a closure to vfox instead of a pre-resolved string. The vfox crate registers it as a Lua function that the http module only calls when actually sending a request to a GitHub API URL.

End result: mise hook-env / mise activate / mise completion / mise --help no longer trigger credential_command. It only runs when a Lua plugin really needs to talk to the GitHub API (e.g. during an install).

Fixes #9797.

Test plan

  • New unit tests in crates/vfox/src/lua_mod/http.rs cover lazy invocation, precedence over the eager string, and the empty-string fallback path.
  • New vfox::tests::test_github_token_resolver_not_called_for_local_hooks runs env_keys + pre_uninstall on the dummy plugin and asserts the resolver is never called.
  • Existing e2e cli/test_github_credential_shim_recursion still passes (still exercises real-credential-command path via github: backend).
  • mise run lint / mise run test:unit clean.

🤖 Generated with Claude Code


Note

Medium Risk
Medium risk because it changes GitHub token resolution flow and caching behavior (including credential_command invocation) for both Lua plugin HTTP and core GitHub token lookup, which could affect authenticated requests or prompt behavior.

Overview
vfox Lua plugins now resolve GitHub auth lazily. Instead of eagerly resolving and storing a GitHub token when constructing Vfox, the PR wires an optional github_token_resolver closure through Vfox/Plugin into the Lua registry as github_token_fn, and the Lua http module only calls it when sending requests to GitHub API URLs (with resolver precedence over the string token and fallback behavior).

GitHub credential-command invocation is reduced. resolve_token now runs github.credential_command only once per canonical host (avoiding double-spawns for api.github.com vs github.com), and token caching docs/tests are updated accordingly.

Adds targeted regression/unit tests to ensure the resolver is only invoked for GitHub API HTTP calls and is not triggered by local vfox hooks like env_keys/pre_uninstall.

Reviewed by Cursor Bugbot for commit 29aa1a3. Bugbot is set up for automated code reviews on this repo. Configure here.

`mise hook-env`, `mise completion`, and other commands that build the
toolset env trigger `VfoxBackend::exec_env()` for every installed Vfox
tool, which calls `VfoxPlugin::vfox()` and was eagerly resolving the
GitHub token — spawning `github.credential_command` (e.g. unlocking a
password manager) even when no Lua plugin would ever make an HTTP
request.

Pass a closure to vfox instead of a pre-resolved string; vfox registers
it as a Lua function that the http module calls only when sending a
request to a GitHub API URL.

Fixes #9797.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes eager GitHub token resolution in vfox-backed commands by introducing a lazy github_token_resolver closure that is only invoked when a Lua plugin actually issues an HTTP request to a GitHub API URL. It also tightens credential_command to call the helper once per canonical host, eliminating double password-manager prompts when resolving api.github.com.

  • Lazy resolver path: VfoxPlugin::vfox() now sets github_token_resolver (an Arc<Fn>) instead of calling resolve_token eagerly; Plugin::set_github_token_resolver wraps it as a Lua function stored in the named registry; github_token() in the HTTP module checks the function before the static string, falling back when the resolver returns empty.
  • credential_command deduplication (src/github.rs): resolution now passes only lookup_hosts.first() (the canonical host, e.g. \"github.com\" for both github.com and api.github.com) to get_credential_command_token, rather than iterating all hosts.
  • Tests: new unit tests in http.rs and vfox.rs cover lazy invocation, resolver-over-string precedence, empty-string fallback, and a regression check that local hooks never trigger the resolver.

Confidence Score: 5/5

Safe to merge — the lazy-resolver plumbing is well-encapsulated, the fallback chain (resolver → static string → env vars) is explicitly tested, and the credential_command host-deduplication aligns with the documented canonical-host mapping.

The change is narrowly scoped: token resolution moves from eager to lazy with a clean fallback chain, and the credential_command simplification only removes a redundant second spawn for hosts that share a canonical form. All affected paths have unit and integration test coverage.

No files require special attention.

Important Files Changed

Filename Overview
src/plugins/vfox_plugin.rs Replaces eager resolve_token call with a lazy Arc closure set on github_token_resolver, so mise hook-env/completion never invoke the credential command.
crates/vfox/src/lua_mod/http.rs Extends github_token() to check a github_token_fn Lua registry function first; adds three unit tests covering lazy invocation, resolver precedence, and empty-string fallback.
crates/vfox/src/vfox.rs Adds github_token_resolver field with manual Debug impl that redacts secrets; set_github_token now registers both the string and the closure resolver; integration test verifies the resolver is never called for non-network hooks.
crates/vfox/src/plugin.rs Adds set_github_token_resolver wrapping the Arc<Fn> closure in a Lua function and storing it as github_token_fn in the named Lua registry.
src/github.rs Tightens credential_command resolution to call the helper once with only the canonical host, preventing double prompts when resolving api.github.com; behavior is unchanged for hosts that are their own canonical form.
src/tokens.rs Documentation clarification and a new test_get_credential_command_token_caches_per_host test confirming one subprocess spawn per distinct host.
settings.toml Docs for forgejo, github, and gitlab credential_command settings updated: $1 phrasing replaced with MISE_CREDENTIAL_HOST, and the "Results are cached per host per session" sentence removed.
docs/dev-tools/github-tokens.md Trailing "Results are cached per host per session." sentence removed from the credential_command paragraph to match the stripped settings.toml docs.

Reviews (4): Last reviewed commit: "docs(github): drop misleading "duration ..." | Re-trigger Greptile

Comment thread crates/vfox/src/vfox.rs
Comment thread crates/vfox/src/vfox.rs Outdated

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request implements lazy resolution for GitHub tokens to prevent unnecessary execution of credential commands during operations that do not require network access. Key changes include adding a github_token_resolver to the Vfox and Plugin structs and updating the Lua HTTP module to invoke this resolver only when needed. Feedback was provided regarding the manual Debug implementation for the Vfox struct, specifically suggesting the inclusion of the log_tx field for completeness.

Comment thread crates/vfox/src/vfox.rs
Comment on lines +69 to +87
impl std::fmt::Debug for Vfox {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Vfox")
.field("runtime_version", &self.runtime_version)
.field("install_dir", &self.install_dir)
.field("plugin_dir", &self.plugin_dir)
.field("cache_dir", &self.cache_dir)
.field("download_dir", &self.download_dir)
.field("skip_verification", &self.skip_verification)
.field("cmd_env", &self.cmd_env)
.field("github_token", &self.github_token.as_deref().map(|_| "***"))
.field(
"github_token_resolver",
&self.github_token_resolver.as_ref().map(|_| "<closure>"),
)
.field("runtime_env_type", &self.runtime_env_type)
.finish()
}
}

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.

medium

The manual Debug implementation for Vfox omits the log_tx field. While log_tx is a private field and its content (an mpsc::Sender) might not be highly informative, it is generally best practice for a manual Debug implementation to include all fields of the struct to provide a complete view of the object's state during debugging, especially since it was previously included via the derived Debug trait.

Suggested change
impl std::fmt::Debug for Vfox {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Vfox")
.field("runtime_version", &self.runtime_version)
.field("install_dir", &self.install_dir)
.field("plugin_dir", &self.plugin_dir)
.field("cache_dir", &self.cache_dir)
.field("download_dir", &self.download_dir)
.field("skip_verification", &self.skip_verification)
.field("cmd_env", &self.cmd_env)
.field("github_token", &self.github_token.as_deref().map(|_| "***"))
.field(
"github_token_resolver",
&self.github_token_resolver.as_ref().map(|_| "<closure>"),
)
.field("runtime_env_type", &self.runtime_env_type)
.finish()
}
}
impl std::fmt::Debug for Vfox {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Vfox")
.field("runtime_version", &self.runtime_version)
.field("install_dir", &self.install_dir)
.field("plugin_dir", &self.plugin_dir)
.field("cache_dir", &self.cache_dir)
.field("download_dir", &self.download_dir)
.field("skip_verification", &self.skip_verification)
.field("cmd_env", &self.cmd_env)
.field("github_token", &self.github_token.as_deref().map(|_| "***"))
.field(
"github_token_resolver",
&self.github_token_resolver.as_ref().map(|_| "<closure>"),
)
.field("runtime_env_type", &self.runtime_env_type)
.field("log_tx", &self.log_tx.as_ref().map(|_| "Sender"))
.finish()
}
}

The cache key was `{provider}:{host}`, so when `resolve_token()` walks
both `github.com` and `api.github.com` for an API request, a helper that
returns nothing for the first host gets respawned for the second. Even
in the success case, a fresh `resolve_token("api.github.com")` call
without a prior `github.com` lookup still spawns the helper twice if the
first canonical-host call happens to miss.

Key the cache on `{provider}:{cmd}` so the helper is invoked at most
once per mise process. A host-aware `cmd` that consults
`$MISE_CREDENTIAL_HOST` now sees only the first host's value — that's
the explicit trade-off: one invocation per run, period.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 46ea0e7. Configure here.

Comment thread src/tokens.rs Outdated
@github-actions

github-actions Bot commented May 12, 2026

Copy link
Copy Markdown

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 x -- echo 18.5 ± 0.7 16.8 21.6 1.00
mise x -- echo 19.4 ± 2.7 17.0 36.6 1.05 ± 0.15

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 env 18.5 ± 0.9 16.3 23.4 1.00
mise env 18.7 ± 1.1 16.9 23.6 1.01 ± 0.08

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 hook-env 19.5 ± 0.8 17.6 22.6 1.00
mise hook-env 19.5 ± 0.8 17.7 22.5 1.00 ± 0.06

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 ls 15.9 ± 0.7 14.3 19.7 1.00
mise ls 15.9 ± 0.7 14.4 19.0 1.00 ± 0.06

xtasks/test/perf

Command mise-2026.5.6 mise Variance
install (cached) 125ms 128ms -2%
ls (cached) 59ms 59ms +0%
bin-paths (cached) 64ms 63ms +1%
task-ls (cached) 489ms 490ms +0%

jdx and others added 3 commits May 12, 2026 12:52
- Use `finish_non_exhaustive()` in the manual `Vfox` Debug impl so the
  redacted output makes clear there are hidden fields (`log_tx`).
- Register the static `github_token` *and* the lazy resolver on the
  plugin when both are set, instead of falling through one path. The
  Lua-side `github_token()` already prefers the resolver and falls back
  to the string, but the wiring previously short-circuited so the
  string-token fallback was unreachable via the public API.
- Reword the `credential_command` docs (settings.toml + github-tokens
  guide) to reflect the new cache key. The cmd is spawned at most once
  per process; multi-host setups should use the tokens-file or per-host
  env vars rather than `MISE_CREDENTIAL_HOST` switching inside one cmd.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The original cmd-keyed cache traded correctness for simplicity — a
host-aware credential_command lost its host differentiation. Real fix:
keep the per-host cache, but stop walking `lookup_hosts` for
`credential_command`. The walk would spawn the helper twice within a
single `resolve_token("api.github.com")` whenever the first host
returned `None`; the only reason to walk was to fall through `github.com`
→ `api.github.com`, but those are the same instance, so calling once with
the canonical host (the first element of `lookup_hosts`) is correct and
costs one spawn.

Result:
- `github.com` and `api.github.com` share a cache entry → 1 spawn total.
- A separate GHE instance (`ghe.example.com`) still gets its own spawn,
  same as before.
- `MISE_CREDENTIAL_HOST` is again meaningful for host-aware cmds.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
mise is a CLI that exits in milliseconds; "session" implies persistence
that doesn't exist. The within-process cache is an implementation
detail — users just expect repeated lookups not to thrash.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jdx jdx enabled auto-merge (squash) May 12, 2026 18:15
@jdx jdx merged commit 36793b3 into main May 12, 2026
35 checks passed
@jdx jdx deleted the claude/beautiful-williams-10fb31 branch May 12, 2026 18:21
mise-en-dev added a commit that referenced this pull request May 13, 2026
### 🐛 Bug Fixes

- **(backend)** use runtime paths for backend bin dirs by @risu729 in
[#9606](#9606)
- **(ci)** preserve vendor/aqua-registry/ in PPA publish workflow by
@jdx in [#9782](#9782)
- **(ci)** set UTF-8 locale in e2e Docker image by @jdx in
[#9820](#9820)
- **(ci)** pass UTF-8 locale through to e2e tests by @jdx in
[#9823](#9823)
- **(conda)** dedup repodata by archive identifier instead of URL by
@jdx in [#9831](#9831)
- **(github)** use default shell for credential command by @risu729 in
[#9664](#9664)
- **(settings)** distinguish unset known settings from unknown ones by
@jdx in [#9818](#9818)
- **(upgrade)** remove completed progress jobs to prevent duplicate
output by @jdx in [#9779](#9779)
- **(vfox)** resolve GitHub token lazily inside Lua plugins by @jdx in
[#9816](#9816)

### 🚜 Refactor

- **(config)** separate core and backend tool options by @risu729 in
[#9753](#9753)
- **(schema)** reuse env directive property schemas by @risu729 in
[#9651](#9651)

### 📚 Documentation

- **(aliases)** fix Aliased Versions example and drop stale asdf callout
by @jdx in [#9830](#9830)

### ⚡ Performance

- **(aqua)** use phf for baked registry lookups by @risu729 in
[#9763](#9763)
- **(task)** cache per-file content hashes for
source_freshness_hash_contents by @jdx in
[#9819](#9819)

### 🧪 Testing

- **(e2e)** pin aube to known-good version in npm package_manager test
by @jdx in [#9794](#9794)

### 📦 Registry

- replace unsupported exe options by @risu729 in
[#9587](#9587)
- update pi by @garysassano in
[#9792](#9792)

### Chore

- **(ci)** use non-large runners for release builds by @jdx in
[#9786](#9786)
- **(ci)** compare registry PRs from fork point by @risu729 in
[#9643](#9643)
- **(ci)** make build-copr.sh the single source of truth for COPR
chroots by @jdx in [#9788](#9788)
- **(ci)** use crates.io trusted publishing in release-plz by @jdx in
[#9793](#9793)
- **(ci)** remove autofix.ci workflow by @jdx in
[#9801](#9801)
- **(ci)** restore -large runner for Linux release builds by @jdx in
[#9815](#9815)
- **(ci)** add zizmor workflow for github actions security analysis by
@jdx in [#9804](#9804)
- **(ci)** assert mise run render produces no diff by @jdx in
[#9803](#9803)
- **(copr)** publish EL9 builds via centos-stream+epel-next-9 chroot by
@jdx in [#9787](#9787)

### Ci

- remove pull_request_target workflow by @jdx in
[#9799](#9799)
- remove caching from publishing workflows by @jdx in
[#9800](#9800)

### Security

- reject shell metacharacters in version strings and CI inputs by @jdx
in [#9814](#9814)

## 📦 Aqua Registry Updates

### New Packages (11)

- [`Code-Hex/Neo-cowsay`](https://github.com/Code-Hex/Neo-cowsay)
-
[`SonarSource/sonarqube-cli`](https://github.com/SonarSource/sonarqube-cli)
- [`earendil-works/pi`](https://github.com/earendil-works/pi)
- [`hylo-lang/hylo-new`](https://github.com/hylo-lang/hylo-new)
- [`jfernandez/bpftop`](https://github.com/jfernandez/bpftop)
- [`modem-dev/hunk`](https://github.com/modem-dev/hunk)
- [`npm/cli`](https://github.com/npm/cli)
- [`racket/racket/minimal`](https://github.com/racket/racket)
- [`slackapi/slack-cli`](https://github.com/slackapi/slack-cli)
- [`vectordotdev/vector`](https://github.com/vectordotdev/vector)
- [`wasilibs/go-yamllint`](https://github.com/wasilibs/go-yamllint)

### Updated Packages (10)

- [`DataDog/pup`](https://github.com/DataDog/pup)
- [`aquasecurity/trivy`](https://github.com/aquasecurity/trivy)
- [`astral-sh/uv`](https://github.com/astral-sh/uv)
- [`caarlos0/svu`](https://github.com/caarlos0/svu)
-
[`cargo-bins/cargo-binstall`](https://github.com/cargo-bins/cargo-binstall)
- [`foundry-rs/foundry`](https://github.com/foundry-rs/foundry)
- [`gastownhall/beads`](https://github.com/gastownhall/beads)
-
[`gruntwork-io/terragrunt`](https://github.com/gruntwork-io/terragrunt)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`santosr2/TerraTidy`](https://github.com/santosr2/TerraTidy)
3PeatVR pushed a commit to 3PeatVR/mise that referenced this pull request May 14, 2026
### 🐛 Bug Fixes

- **(backend)** use runtime paths for backend bin dirs by @risu729 in
[jdx#9606](jdx#9606)
- **(ci)** preserve vendor/aqua-registry/ in PPA publish workflow by
@jdx in [jdx#9782](jdx#9782)
- **(ci)** set UTF-8 locale in e2e Docker image by @jdx in
[jdx#9820](jdx#9820)
- **(ci)** pass UTF-8 locale through to e2e tests by @jdx in
[jdx#9823](jdx#9823)
- **(conda)** dedup repodata by archive identifier instead of URL by
@jdx in [jdx#9831](jdx#9831)
- **(github)** use default shell for credential command by @risu729 in
[jdx#9664](jdx#9664)
- **(settings)** distinguish unset known settings from unknown ones by
@jdx in [jdx#9818](jdx#9818)
- **(upgrade)** remove completed progress jobs to prevent duplicate
output by @jdx in [jdx#9779](jdx#9779)
- **(vfox)** resolve GitHub token lazily inside Lua plugins by @jdx in
[jdx#9816](jdx#9816)

### 🚜 Refactor

- **(config)** separate core and backend tool options by @risu729 in
[jdx#9753](jdx#9753)
- **(schema)** reuse env directive property schemas by @risu729 in
[jdx#9651](jdx#9651)

### 📚 Documentation

- **(aliases)** fix Aliased Versions example and drop stale asdf callout
by @jdx in [jdx#9830](jdx#9830)

### ⚡ Performance

- **(aqua)** use phf for baked registry lookups by @risu729 in
[jdx#9763](jdx#9763)
- **(task)** cache per-file content hashes for
source_freshness_hash_contents by @jdx in
[jdx#9819](jdx#9819)

### 🧪 Testing

- **(e2e)** pin aube to known-good version in npm package_manager test
by @jdx in [jdx#9794](jdx#9794)

### 📦 Registry

- replace unsupported exe options by @risu729 in
[jdx#9587](jdx#9587)
- update pi by @garysassano in
[jdx#9792](jdx#9792)

### Chore

- **(ci)** use non-large runners for release builds by @jdx in
[jdx#9786](jdx#9786)
- **(ci)** compare registry PRs from fork point by @risu729 in
[jdx#9643](jdx#9643)
- **(ci)** make build-copr.sh the single source of truth for COPR
chroots by @jdx in [jdx#9788](jdx#9788)
- **(ci)** use crates.io trusted publishing in release-plz by @jdx in
[jdx#9793](jdx#9793)
- **(ci)** remove autofix.ci workflow by @jdx in
[jdx#9801](jdx#9801)
- **(ci)** restore -large runner for Linux release builds by @jdx in
[jdx#9815](jdx#9815)
- **(ci)** add zizmor workflow for github actions security analysis by
@jdx in [jdx#9804](jdx#9804)
- **(ci)** assert mise run render produces no diff by @jdx in
[jdx#9803](jdx#9803)
- **(copr)** publish EL9 builds via centos-stream+epel-next-9 chroot by
@jdx in [jdx#9787](jdx#9787)

### Ci

- remove pull_request_target workflow by @jdx in
[jdx#9799](jdx#9799)
- remove caching from publishing workflows by @jdx in
[jdx#9800](jdx#9800)

### Security

- reject shell metacharacters in version strings and CI inputs by @jdx
in [jdx#9814](jdx#9814)

## 📦 Aqua Registry Updates

### New Packages (11)

- [`Code-Hex/Neo-cowsay`](https://github.com/Code-Hex/Neo-cowsay)
-
[`SonarSource/sonarqube-cli`](https://github.com/SonarSource/sonarqube-cli)
- [`earendil-works/pi`](https://github.com/earendil-works/pi)
- [`hylo-lang/hylo-new`](https://github.com/hylo-lang/hylo-new)
- [`jfernandez/bpftop`](https://github.com/jfernandez/bpftop)
- [`modem-dev/hunk`](https://github.com/modem-dev/hunk)
- [`npm/cli`](https://github.com/npm/cli)
- [`racket/racket/minimal`](https://github.com/racket/racket)
- [`slackapi/slack-cli`](https://github.com/slackapi/slack-cli)
- [`vectordotdev/vector`](https://github.com/vectordotdev/vector)
- [`wasilibs/go-yamllint`](https://github.com/wasilibs/go-yamllint)

### Updated Packages (10)

- [`DataDog/pup`](https://github.com/DataDog/pup)
- [`aquasecurity/trivy`](https://github.com/aquasecurity/trivy)
- [`astral-sh/uv`](https://github.com/astral-sh/uv)
- [`caarlos0/svu`](https://github.com/caarlos0/svu)
-
[`cargo-bins/cargo-binstall`](https://github.com/cargo-bins/cargo-binstall)
- [`foundry-rs/foundry`](https://github.com/foundry-rs/foundry)
- [`gastownhall/beads`](https://github.com/gastownhall/beads)
-
[`gruntwork-io/terragrunt`](https://github.com/gruntwork-io/terragrunt)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`santosr2/TerraTidy`](https://github.com/santosr2/TerraTidy)
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