Repository navigation
fix(models): key-rejected hint on model-list 401 + refresh bundled catalogs (fixes #269) - #271
Merged
Merged
Conversation
…talogs (fixes #269) The /models endpoints are a public catalog (anonymous 200; invalid bearer 401, verified live on both gateways), so a 401 there always means the stored key was rejected - never a list/gateway problem. Log an actionable hint pointing at Manage Provider; 401 stays non-transient (one attempt). Bundled fallbacks refreshed to the live gateway catalogs (2026-10-27): Go 27 -> 38 (adds deepseek-v4.1-flash etc, drops dead deepseek-v4-flash / -vision-exp - plain id still live on Zen, not blocklisted), Zen 42 -> 72 (live minus policy-hidden free tier, non-chat jev-*, junk ids). 2 new tests (561/561). Docs: docs/issues/117-20261027.
ltmoerdani
added a commit
that referenced
this pull request
Oct 27, 2026
…DME row Architecture map: modelList 185→235, definitions 238→364 (PR #271), new modelList401Hint.test row. Devlog: issue #269 entry with forensics and merge state. README: the freeOnly settings row still described the setting as functional — it has been deprecated and ignored since #265/#266 (0.7.10). Issue doc 117: PR #271 link + merge commit in Related.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Fixes #269.
Two changes:
401 hint. The
/modelsendpoints are a public catalog: anonymous requests get 200, an invalidAuthorization: Bearergets 401 (verified live on both gateways, deterministic across repeats). A 401 there always points at the stored key, soModelListFetchernow detects theModel list request failed (401)shape and logs an actionable hint next to the fallback notice:401 stays non-transient (one attempt, no retry) and the
retry.tsclassifier is untouched. The hint also fires when a fresh cached snapshot absorbs the failure, since the root cause is the same.Bundled catalog refresh (the offline fallback was a 2026-09-08 snapshot):
deepseek-v4.1-flash(the model the reporter couldn't find),gpt-6-luna,grok-4.7,kimi-k3.1-pro,mimo-v2.6-flash/pro,step-5-preview,beam-free,claude-haiku-5-5,gemini-4-argon,minimax-m2.5,minimax-m3.1-flash,iceman-contributor-free. Dropsdeepseek-v4-flashanddeepseek-v4-flash-vision-exp(dead upstream on Go; the plain id still appears on Zen, so it is deliberately not blocklisted).jev-*decision API, and junk entries (test,claude-opus-5-5-backup).Forensics from the issue
The reporter's Zen log filters exactly 38 models, which matches the pre-#266
freeOnlykeep-free filter rather than current main. Their session was running pre-0.7.10 code (VS Code swaps extensions only on reload). On current main the fallback shows stale models instead of a nearly-empty picker; the stale catalog was the problem either way. Details indocs/issues/117-20261027-issue269-models-401-hint-and-bundled-refresh.md.Verification
npm run compilecleannpm test561/561 (2 new tests insrc/test/modelList401Hint.test.ts)npm run lint7/7/modelsendpoints anonymous 200 / invalid bearer 401, ×3