8aa773af89
Review fixes (#105957): - A resumed one-shot ignored the session's stored model/provider runtime: _resolve_model_and_provider()/resolve_runtime_provider() ran before _load_resume_target(), which only loaded the session id + transcript, so an ambient config (e.g. openrouter/ambient-model) served the resumed transcript instead of the stored route (custom:stored/stored-model). The stored runtime is now applied before runtime resolution, with the same contract as the interactive _restore_session_model(): stored model/provider/base_url/api_mode replace the ambient choice unless --model was passed explicitly, and a changed provider drops the ambient api_key so resolution re-fetches credentials for the restored endpoint. - Passing the resumed id to AIAgent did not reopen the already-ended session row: end_session() only writes rows whose ended_at is null and the existing-row upsert never clears the end fields, so the resumed turn was recorded under a session that stayed closed and its new lifecycle boundary was lost. _load_resume_target() now reopens the row (best effort), same as the interactive resume does before continuing.