You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Warn when a live provider CLI catalog diverges from the snapshot #745
Parent: #738
Ship after the snapshot updates (#740, #741, #742). Does not block adding Sol / ultra / ultracode.
Why
electron/providers.js is a handwritten snapshot of each CLI catalogue. It goes stale the moment a model ships. That is how GPT-5.6 Sol, Codex ultra, Claude ultracode, and the OpenCode Zen churn (#742) went missing from the picker even though Custom... already accepts the id.
Keep snapshots as the offline default (no network at picker open). Add a divergence warning so the next miss is visible in-app instead of a research thread.
What to ship
When providers.list (or the config doctor) can cheaply read a local CLI cache, compare live ids to the snapshot:
Kimi: ~/.kimi-code/config.toml[models."..."] alias keys
Claude: only if a logged-in CLI has a cheap /model listing; claude --help does not enumerate models. Skip rather than guess.
Surface a doctor row or a providers.list note when live has ids the snapshot lacks, or the snapshot still lists ids the CLI no longer does. One line per harness, not a toast on every composer open.
Do not auto-merge live ids into the picker in this issue. Merging would also pull visibility=hide models, paid OpenCode providers, and Cursor's 200-id explosion into the default list. Snapshot remains the curated picker; Custom... remains the escape hatch.
Never probe the network. Local cache / local models command only. Missing cache = no warning.
Out of scope
Live-refreshing the picker (optional later, not this issue).
Treating Cursor's baked-in effort suffixes as a separate effort pill.
Closing the custom-id path. setProvider must keep accepting any non-empty id up to 100 chars; the snapshot is a suggestion.
Files
electron/providers.js, electron/doctor.js / electron/configDoctor.js (whichever already lists provider CLIs), electron/test/ for the comparison helper.
Shipped on coder/fork-warn-when-a-live-provider-cli-catal-c916c9:
Cheap file compares at providers.list: Codex ~/.codex/models_cache.json (visibility=list only), Grok ~/.grok/models_cache.json, Kimi ~/.kimi-code/config.toml alias keys.
OpenCode (opencode models) and Cursor (cursor-agent --list-models) run in the background after the first list so boot stays cheap; the next list (model picker open already refreshes) awaits the inflight probe.
Claude is skipped (no cheap listing). Missing cache / failed local command = no warning. Snapshot models are never merged.
One line per harness on ProviderInfo.catalogNote, shown in Settings → Threads and in the model picker detail pane (not a toast). Custom... is unchanged.
listProviders (via providers.list / listProvidersForApi) attaches catalogNote when catalogHome is set and a local cache diverges. Codex: ~/.codex/models_cache.json visibility=list. Grok: ~/.grok/models_cache.json keys. Kimi: ~/.kimi-code/config.toml[models."..."]. Claude skipped (no cheap listing). OpenCode skipped in the default probe because ~/.cache/opencode/models.json is the full paid catalog, not the Zen list; tests inject opencodeModelsText. Missing cache = no warning. Snapshot is not auto-merged.
Activity
currentbits commentedon Aug 28, 2026
Shipped on
coder/fork-warn-when-a-live-provider-cli-catal-c916c9:providers.list: Codex~/.codex/models_cache.json(visibility=listonly), Grok~/.grok/models_cache.json, Kimi~/.kimi-code/config.tomlalias keys.opencode models) and Cursor (cursor-agent --list-models) run in the background after the first list so boot stays cheap; the next list (model picker open already refreshes) awaits the inflight probe.modelsare never merged.ProviderInfo.catalogNote, shown in Settings → Threads and in the model picker detail pane (not a toast). Custom... is unchanged.Helper:
electron/catalogDivergence.js. Tests:electron/test/catalog-divergence.test.js.currentbits commentedon Aug 28, 2026
listProviders(viaproviders.list/listProvidersForApi) attachescatalogNotewhencatalogHomeis set and a local cache diverges. Codex:~/.codex/models_cache.jsonvisibility=list. Grok:~/.grok/models_cache.jsonkeys. Kimi:~/.kimi-code/config.toml[models."..."]. Claude skipped (no cheap listing). OpenCode skipped in the default probe because~/.cache/opencode/models.jsonis the full paid catalog, not the Zen list; tests injectopencodeModelsText. Missing cache = no warning. Snapshot is not auto-merged.currentbits commentedon Aug 28, 2026
Shipped on this thread as part of #738.