fix(#3750): preserve LM Studio auth on reasoning probe (self-rebased #3837 + credential hardening) (#4202)
* fix(#3750): preserve LM Studio auth on reasoning probe Rebased rodboev's #3837 onto current master (master reworked resolve_model_reasoning_efforts via #3431 with a combined hermes_cli import + _nested_route_reasoning_denied guard). Threaded the api_key resolution + the _lmstudio_model_reasoning_options wrapper + the HTTP-fallback probe into master's current structure; intent preserved byte-identically (+164/-24, same as the original PR diff). Co-authored-by: Rod Boev <rod.boev@gmail.com> * fix(#3837): gate LM Studio probe credential to configured endpoint + no-redirect opener Codex security review (CORE) on the rebased #3837: GET /api/reasoning accepts a caller-supplied base_url, and the new probe attached the configured LM Studio API key as a Bearer token; urllib also re-sends Authorization across redirects. Together that could exfiltrate the stored credential to an attacker-controlled host. (master only escalates here because master probed WITHOUT a key.) Fixes: 1. Only forward the LM Studio credential when the probe target normalizes to the configured LM Studio base URL (reuses _normalize_base_url_for_match); a caller-supplied non-matching base_url is probed keyless. 2. _lmstudio_reasoning_probe_options_fallback uses a no-redirect opener (_NoRedirectHandler) so a 3xx can't forward the Authorization header onward. 3. Two regression tests: caller-supplied base_url drops the key; redirect is not followed (credential never reaches the redirect target). Co-authored-by: Rod Boev <rod.boev@gmail.com> * fix(#3837): route ALL credentialed LM Studio probes through the no-redirect probe Codex re-gate caught that the first fix only hardened the built-in fallback; in production hermes_cli IS importable, so the preferred path called hermes_cli.models.lmstudio_model_reasoning_options(..., api_key=...) which uses plain urlopen and still follows redirects with the credential. Fix: _lmstudio_model_reasoning_options now short-circuits to the built-in no-redirect probe whenever api_key is set; the hermes_cli path is used ONLY for keyless probes (no credential to leak). Reworked tests accordingly: - test_credentialed_probe_never_calls_hermes_cli: credentialed probe bypasses CLI - test_keyless_probe_logs_signature_mismatch_before_fallback: keyless CLI degrade - test_credentialed_probe_does_not_follow_redirects_end_to_end: E2E through resolve_model_reasoning_efforts with real hermes_cli; redirect target never hit Verified both security tests fail without the guard and pass with it. Co-authored-by: Rod Boev <rod.boev@gmail.com> * chore(release): stamp v0.51.420 (Release OG) in CHANGELOG --------- Co-authored-by: nesquena-hermes <agent@nesquena-hermes> Co-authored-by: Rod Boev <rod.boev@gmail.com>
This commit is contained in:
3 files changed
+850
-25
No files matched your search
@@ -3,6 +3,12 @@
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [v0.51.420] — 2026-06-14 — Release OG (LM Studio reasoning-probe auth, #3750/#3837)
|
||||
|
||||
### Fixed
|
||||
|
||||
- **LM Studio reasoning-effort probes now keep their auth and work without the bundled CLI.** When the active model is an LM Studio provider, the WebUI reasoning-effort probe now resolves an LM Studio API key (active model key → `providers.lmstudio.api_key` → `LM_API_KEY` → `LMSTUDIO_API_KEY`) and forwards it as a Bearer token, so authenticated LM Studio servers no longer 401 the probe and silently report "no reasoning support." If `hermes_cli` is unavailable (or its `lmstudio_model_reasoning_options` signature changes), the probe falls back to a built-in HTTP query of the LM Studio `/api/v1/models` capabilities endpoint instead of skipping reasoning detection entirely. The configured LM Studio credential is only ever sent to the configured LM Studio endpoint (a caller-supplied `base_url` that does not match is probed without the key), and the probe refuses HTTP redirects so the credential can never be forwarded to another host. (#3750, #3837)
|
||||
|
||||
## [v0.51.419] — 2026-06-14 — Release OF (settled-stream message-count consistency, #4192)
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in new issue
Block a user