Skip to content

cc one v2.0.1

Choose a tag to compare

@github-actions github-actions released this 17 Aug 18:05

Fixed

  • Switching to a login-state provider actually switches — Codex's controlled identity keys (model / model_providers / experimental_bearer_token) are now withdrawn when the incoming provider doesn't carry them (ADR-0010's "new provider wins"), so third-party → official (ChatGPT login) no longer leaves Codex CLI silently routing to the old vendor while the UI reports switched. Gemini gets the same treatment for its top-level model key.
  • No half-written Gemini config — merging and validation complete before any write; if the settings.json step fails, the already-written .env is rolled back, and both files get symmetric .bak backups.
  • Re-switching the same provider is a no-op everywhere — Claude and Gemini gain the unchanged-content check Codex / Grok / OpenCode already had: no file rewrite, no .bak refresh, no mtime touch. The write transaction (no-change check, backup, atomic write, side-file rollback) now lives in one shared implementation behind all five apps.
  • Missing-key confirmation covers every app — the pre-switch check used to read Claude's env keys only; it now derives the key set per app (Codex auth + TOML base_url, Gemini env, Grok TOML, OpenCode options), so switching to an incomplete provider asks first instead of writing a dead config.
  • Snippet hardening — extraction runs through the same validation as saving; Claude / Gemini snippets reject credential keys at the write layer too (not only at the save command); Gemini flat keys (e.g. {"GEMINI_MODEL":"m"}) are rejected with a reason instead of silently doing nothing; extracting a snippet no longer force-enables it.
  • Session pagination clamps its limit — the sessions query clamps limit to 1–1000 like the usage query (a zero or huge limit no longer materializes the whole table).
  • OpenCode display names agree between import and preview — an empty name falls back to the provider key on both paths.
  • Saving returns the real app — the internal shim that hard-coded Claude into save_provider's return value is gone; a saved Codex provider reads back as Codex.
  • Localization — Japanese regains 17 missing keys (no more English fallbacks), the "enabled" badge wording is consistent across languages, the Codex / Grok snippet hints speak plainly (internal key names only appear in validation errors), and the Grok hint notes custom model profiles ride along with the snippet.
  • UI fixes — transcript load failures get a retry action, a failed library scan no longer masquerades as "empty folder", library / providers loading states are centered skeletons with a retry on error, provider-row and session-detail controls align their heights, the turn-nav full-text tooltip is no longer clipped, long column headers no longer overflow at the minimum window width, and the snippet editor fills the viewport's remaining height.
  • Codex official presets renamed to be self-explanatory — "OpenAI (ChatGPT login)" vs "OpenAI (API Key)", distinguishable without reading the notes.

Changed

  • Internal refactors, behavior intact — the 2,084-line commands monolith is split into 13 domain modules; repeated frontend logic (source tags, device labels, copy buttons, state actions) and parser / write-layer helpers converge to single owners; the README's preset counts now cover all five pools (59 presets total).