← Back to PRs

#13476: fix(sessions): show actual cron session model in sessions_list

by lailoo open 2026-02-10 15:26 View on GitHub →
gateway stale size: S trusted-contributor
## Summary Fixes #13429 ## Problem `sessions_list` shows the agent default model (e.g., `claude-opus-4-6`) for cron isolated sessions even when the job successfully ran with a different model (e.g., `gemini-3-pro-preview`). **Root cause:** `resolveSessionModelRef()` in `src/gateway/session-utils.ts` only checks `entry.modelOverride` (set by user via `session_status` tool) but ignores `entry.model` — the field written by `src/cron/isolated-agent/run.ts` after a successful run. When no user override exists, it falls back to the agent default model. ## Fix Add an `else if` branch in `resolveSessionModelRef()` to check `entry.model` / `entry.modelProvider` when no `modelOverride` is set. Priority order: 1. `modelOverride` / `providerOverride` (user-set override) — highest priority 2. `model` / `modelProvider` (written by cron run) — new fallback 3. Agent default model — lowest priority **Before:** ```typescript if (storedModelOverride) { provider = entry?.providerOverride?.trim() || provider; model = storedModelOverride; } ``` **After:** ```typescript if (storedModelOverride) { provider = entry?.providerOverride?.trim() || provider; model = storedModelOverride; } else if (entry?.model?.trim()) { provider = entry?.modelProvider?.trim() || provider; model = entry.model.trim(); } ``` ## Reproduction & Verification ### Unit-level (direct function call): **Before fix (main branch) — Bug reproduced:** ``` Cron session model: anthropic/claude-opus-4-6 Expected: google-gemini-cli/gemini-3-pro-preview ❌ FAIL: shows agent default instead of actual model ``` **After fix — All verified:** ``` Cron session model: google-gemini-cli/gemini-3-pro-preview ✅ PASS Override session model: anthropic/claude-haiku-4-5 ✅ PASS Empty session model: anthropic/claude-opus-4-6 (default) ✅ PASS ``` ### E2E-level (real gateway environment): Added an e2e test in `server.sessions.gateway-server-sessions-a.e2e.test.ts` that starts a real gateway server, writes a session store entry with `model: "gemini-3-pro-preview"` and `modelProvider: "google-gemini-cli"`, then calls `sessions.list` via WebSocket RPC and verifies the returned model fields: **Before fix (main branch) — Bug reproduced through real gateway:** ``` sessions.list RPC → cronSession.model: undefined (falls back to agent default) ❌ FAIL: shows agent default instead of actual model ``` **After fix — Gateway returns correct model:** ``` sessions.list RPC → cronSession.model: "gemini-3-pro-preview" sessions.list RPC → cronSession.modelProvider: "google-gemini-cli" ✅ PASS ``` ## Effect on User Experience **Before fix:** User configures a cron job with `google-gemini-cli/gemini-3-pro-preview` → job runs successfully → `sessions_list` shows `model: "claude-opus-4-6"` → user thinks the model override is broken. **After fix:** `sessions_list` correctly shows `model: "gemini-3-pro-preview"` for cron sessions that ran with a non-default model. ## Testing - ✅ 4 unit tests pass (`resolveSessionModelRef` in `session-utils.resolveSessionModelRef.test.ts`) - ✅ 1 e2e test passes (`sessions.list` RPC in `server.sessions.gateway-server-sessions-a.e2e.test.ts`) - ✅ Existing tests unaffected

Most Similar PRs