Commit Graph

3 Commits

Author SHA1 Message Date
kshitij d002167390 fix: delete stale top-level route keys on /model persist
patch_session_model_config merges key-level and only deletes on explicit
None. Dropping falsy values from the top-level patch let a previous
switch's api_mode/base_url survive the next switch — TUI/desktop resume
then restored e.g. openrouter with anthropic_messages wire mode, and a
failed bare-custom heal produced a stale-provider/new-endpoint route.
Write absent top-level values as explicit None so each switch fully
replaces the persisted route. Regression test against a real SessionDB;
mutation-checked. Also correct the heal comment (CLI is deliberately
stricter than the TUI recovery, which keeps bare custom with a base_url).
2026-08-14 02:15:22 +05:30
kshitij dbe24dfc12 fix: heal bare-custom provider at persist AND restore; persist --global switches to the row
- Bare 'custom' from ModelSwitchResult.target_provider is the resolved
  billing class, not a routable identity; persisting it verbatim made a
  later --resume hard-fail once the config default moved off the custom
  endpoint. Heal to custom:<name> via canonical_custom_identity at
  persist time, and again on restore for rows written by older builds
  (mirrors tui_gateway's _stored_session_runtime_overrides recovery).
- --global switches now also update the session row: the row records
  what THIS session runs, otherwise resume restored the stale
  creation-time model over the user's new global choice.
- Only adopt resolved credential_pool alongside its api_key (don't null
  the ambient pool when resolution returns no credentials).
- 3 new tests; healing path mutation-checked.
2026-08-14 02:15:22 +05:30
kshitij b8f85f18e8 refactor: shared /model persist helper, canonical gateway_runtime reader, cross-surface route persistence, tests
- Extract the two duplicated /model session-persist blocks into
  _persist_model_switch_to_session; persist the route BOTH nested
  (gateway_runtime, CLI reader) and top-level (TUI gateway's
  _stored_session_runtime_overrides reader) so a CLI switch also
  survives a desktop/TUI session.resume.
- Add SessionDB.session_gateway_runtime as the canonical tolerant
  row-level route reader (session_yolo_enabled precedent); use it in
  _restore_session_model instead of hand-rolled JSON parsing.
- Clear stale launch-time _explicit_api_key/_explicit_base_url when
  resume restores a different provider (same leak guard
  _apply_model_switch_result already has).
- 12 new tests incl. a real-SessionDB round trip; mutation-checked.
2026-08-14 02:15:22 +05:30