hermes-agent/tests/cli
webtecnica 56a41715dc fix: persist provider on model switch and add billing_provider fallback
Salvage of #79604 (webtecnica) + #85721 (pierrenode), combined and
rebased onto current main with simplify-code findings folded in.

#79604: update_session_model() wrote the model name to sessions.model
but never persisted the provider into model_config. On resume, the
runtime recombined the persisted model with the config.yaml primary
provider (which may not serve that model), producing auth errors.
Fix: add optional provider parameter to update_session_model, merged
into model_config via the shared _merge_model_config_json helper (not
hand-rolled SQL). Wire both gateway /model call sites to pass
result.target_provider.

#85721: session_gateway_runtime() had no billing_provider fallback.
A CLI session that never ran /model has no gateway_runtime or
top-level provider in model_config — billing_provider (written on
every session's first accounted API call) is the only durable record.
Fix: add billing_provider as the last-resort fallback in
session_gateway_runtime(), filtering bare billing buckets (auto/custom)
that are not routable identities.

Simplify-code findings addressed:
- Use _merge_model_config_json instead of 40 lines of branched SQL
- Share _BARE_BILLING_PROVIDERS from hermes_state.py (was duplicated
  as a set in tui_gateway/server.py)
- Merge None-filtering from #85920 with the billing_provider fallback
  into one coherent return path

Co-authored-by: pierrenode <298902573+pierrenode@users.noreply.github.com>
2026-08-14 14:39:08 +05:30
..
__init__.py
conftest.py
test_bang_shell_mode.py
test_bracketed_paste_timeout.py
test_branch_command.py
test_busy_input_mode_command.py
test_chat_q_exit_clear.py
test_cli_active_agent_ref_wiring.py
test_cli_approval_ui.py
test_cli_async_delegation_delivery.py
test_cli_background_busy_path.py
test_cli_background_status_indicator.py
test_cli_background_tui_refresh.py
test_cli_bracketed_paste_sanitizer.py
test_cli_browser_connect.py
test_cli_cmd_backspace.py
test_cli_codex_context_reference.py
test_cli_context_warning.py
test_cli_copy_command.py
test_cli_delegate_background_notice.py
test_cli_extension_hooks.py
test_cli_external_editor.py
test_cli_file_drop.py
test_cli_first_run_setup.py
test_cli_force_redraw.py
test_cli_goal_interrupt.py
test_cli_image_command.py
test_cli_init.py
test_cli_insights_command.py
test_cli_interrupt_ack_race.py
test_cli_interrupt_drain_regression.py
test_cli_interrupt_subagent.py
test_cli_light_mode.py
test_cli_loading_indicator.py
test_cli_markdown_rendering.py
test_cli_mcp_config_watch.py
test_cli_new_session.py
test_cli_pet_pane.py
test_cli_prefix_matching.py
test_cli_preloaded_skills.py
test_cli_provider_resolution.py
test_cli_queue_paste.py
test_cli_reload_skills.py
test_cli_resume_command.py
test_cli_retry.py
test_cli_save_config_value.py
test_cli_secret_capture.py
test_cli_shift_enter_newline.py
test_cli_shutdown_memory_messages.py
test_cli_skin_integration.py
test_cli_status_bar.py
test_cli_status_bar_goal.py
test_cli_status_command.py
test_cli_steer_busy_path.py
test_cli_terminal_response_sanitizer.py
test_cli_terminal_shortcuts.py
test_cli_tools_command.py
test_cli_user_message_preview.py
test_cli_yolo_resume_persistence.py
test_cli_yolo_toggle.py
test_compress_flags.py
test_compress_focus.py
test_compress_here.py
test_compress_type_ahead.py
test_cpr_local_leak.py
test_cprint_bg_thread.py
test_ctrl_enter_newline.py
test_cwd_env_respect.py
test_destructive_slash_confirm.py
test_destructive_slash_inline_skip_e2e.py
test_exit_delete_session.py
test_exit_summary_resume_hint.py
test_exit_watchdog_signal_arm.py
test_fast_command.py
test_focus_view.py
test_indicator_command.py
test_manual_compress.py
test_moa_command.py
test_partial_compress.py
test_personality_none.py
test_prefill_config.py
test_prepend_note_to_message.py
test_prompt_stash.py
test_prompt_stash_cli.py
test_prompt_text_input_thread_safety.py
test_quick_commands.py
test_reasoning_command.py
test_resume_display.py fix(sessions): stabilize legacy reset lineage on resume 2026-08-13 23:45:21 +05:30
test_resume_model_restore.py fix: persist provider on model switch and add billing_provider fallback 2026-08-14 14:39:08 +05:30
test_resume_quiet_stderr.py
test_save_conversation_location.py
test_session_boundary_hooks.py
test_single_query_session_finalize.py
test_slash_command_interrupt.py
test_slash_confirm_windows.py
test_steer_inline_repaint_34569.py
test_stream_delta_think_tag.py
test_stream_flush_left.py
test_stream_partial_line_flush.py
test_surrogate_sanitization.py
test_terminal_interrupt_recovery.py
test_termios_drift_heal.py fix(cli): self-heal cooked-mode termios drift that freezes CLI input 2026-08-13 14:22:14 -07:00
test_tool_progress_scrollback.py
test_transformed_stream_output.py
test_tui_terminal_reset_on_exit.py
test_update_command.py
test_version_command.py
test_worktree.py
test_worktree_security.py
test_worktree_sync_base.py