hermes-agent/tests
Shannon Sands f94425e586
feat: /model reset — clear a session's model pin without losing history (NS-563)
A session-scoped /model switch pins the session to that model. The pin is
durable: the gateway persists it via SessionStore.set_model_override and
re-applies it on restart (_rehydrate_session_model_override); the TUI
persists session["model_override"] to the session DB row and restores it
on resume. Changing the global default (dashboard 'main model', config.yaml,
or /model --global) therefore never moves pinned sessions, and before this
change the only escape was /new — throwing away the conversation (NS-563:
'bot stuck on deepseek even after switching model and restarting').

/model reset clears the session pin and returns to the configured default
while keeping history:

- hermes_cli/model_switch.py: single-owner parser recognizes reset|default|
  clear targets (MODEL_SWITCH_RESET_TOKENS), rejects flag combinations
  (MODEL_SWITCH_ERR_RESET_WITH_FLAGS), and exposes is_model_reset_request()
  so every surface shares one definition.
- gateway/slash_commands.py: _handle_model_reset clears the in-memory
  override, the persisted DB override, and a queued one-turn restore;
  evicts the cached agent so the next turn resolves fresh; reports the
  now-active default. Listed in /model usage help.
- tui_gateway/server.py: _reset_session_model_override clears the pin +
  one-turn restore, re-adopts the config default through the normal
  switch path (never creating a fresh pin, never persisting), and
  persists the cleared row so session.resume can't resurrect the pin.
- cli.py: _handle_model_reset_command re-derives the config.yaml default
  (fresh read, not the startup snapshot) and switches back session-scoped;
  clears a pending one-turn restore.
- locales/en.yaml: usage_reset/reset_done/reset_none strings.

Tests: parser-level reset detection, gateway handler behavior (clear +
persist + evict + no-op), TUI reset semantics (pin cleared, adopt-sync
rerun, no fresh pin, resume-safe persist), CLI reset (switch-back,
restore-queue cleared, no-op on default, never persists config).
2026-08-06 09:11:21 -07:00
..
acp
acp_adapter
agent feat: /refine — run the memory/skill self-improvement review on demand 2026-08-05 22:40:51 -07:00
ci fix(ci): follow artifact download redirect without auth 2026-08-05 11:16:18 -04:00
cli
computer_use
conformance
cron fix: close simplify-pass findings — scheduler sibling site + home-unresolvable totality 2026-08-06 17:36:40 +05:30
dashboard
docker
e2e
fakes
fixtures
gateway feat: /model reset — clear a session's model pin without losing history (NS-563) 2026-08-06 09:11:21 -07:00
hermes_cli feat: /model reset — clear a session's model pin without losing history (NS-563) 2026-08-06 09:11:21 -07:00
hermes_state fix(tests): fail hard when pytest resolves the production state.db (live-DB isolation guard) 2026-08-06 07:49:50 -07:00
honcho_plugin refactor(memory): single shared trivial-prompt classifier + gate tests 2026-08-03 17:53:55 +05:30
install test(install): prove updating from a release reaches this commit 2026-08-04 17:36:26 -04:00
integration
manual
monitoring
openviking_plugin fix(openviking): integrate reliability and configuration hardening 2026-08-03 20:35:47 +05:30
plugins Merge branch 'main' into feat/hermes-relay-model-metrics 2026-08-04 12:07:51 -04:00
providers fix(cache): scope prompt_cache_key by session to stop cross-session bucket sharing 2026-08-05 12:42:46 +05:30
run_agent refactor: fold /simplify-code findings 2026-08-06 17:03:10 +05:30
scripts
secret_sources
skills feat(skills): actual-setup optional skill + provider docs 2026-08-05 14:08:32 -07:00
state
stress
tools fix(read_extract): cap anydoc input size before conversion 2026-08-05 22:02:42 -07:00
tui_gateway feat: /model reset — clear a session's model pin without losing history (NS-563) 2026-08-06 09:11:21 -07:00
website
__init__.py
conftest.py fix(tests): fail hard when pytest resolves the production state.db (live-DB isolation guard) 2026-08-06 07:49:50 -07:00
run_interrupt_test.py
test_account_usage.py
test_atomic_replace_symlinks.py
test_atomic_write_text_metadata.py fix(utils): tighten create_mode semantics and close the yaml 0600 transit window 2026-08-06 05:00:17 +05:30
test_audio_playback_guard.py
test_background_review_list_shapes.py
test_background_review_session_isolation.py
test_base_url_hostname.py
test_batch_runner_checkpoint.py
test_batch_runner_durability.py
test_bitwarden_secrets.py
test_cli_manual_compress.py
test_cli_skin_integration.py
test_code_skew.py
test_command_secret_source.py
test_conftest_wal_gate.py
test_copilot_initiator.py
test_credential_file_permissions.py
test_ctx_halving_fix.py
test_delegate_cascade_49148.py
test_dispatch_session_id.py
test_empty_model_fallback.py feat(models): add qwen3.8-max to Nous portal + OpenRouter catalogs, replacing qwen3.7-max 2026-08-03 17:19:49 -07:00
test_empty_session_hygiene.py
test_engines_satisfiable.py
test_env_loader_applied_homes.py
test_env_loader_op_bootstrap.py
test_env_loader_secret_sources.py
test_evidence_store.py
test_fast_safe_load.py
test_fts_cjk_bigram.py
test_fts_update_of_narrowing.py fix(state): quarantine CJK when ensure soft-fails after OF migration 2026-08-03 20:30:32 +05:30
test_gateway_streaming_nested_config.py
test_get_tool_definitions_cache_isolation.py
test_hermes_bootstrap.py
test_hermes_constants.py
test_hermes_home_profile_warning.py
test_hermes_logging.py
test_hermes_state.py perf(tests): cut test_hermes_state.py 52s -> 10s — kill sleep throttle + per-row seeding 2026-08-06 05:38:04 +05:30
test_hermes_state_compression_busy_retry.py
test_hermes_state_compression_locks.py
test_hermes_state_readonly_preflight.py
test_hermes_state_wal_fallback.py
test_hermetic_side_effect_guards.py
test_honcho_client_concurrency.py
test_honcho_client_config.py
test_honcho_session_context.py
test_honcho_startup_fail_open.py
test_install_autostash_conflict_recovery.py
test_install_commit_pin_rollback.py
test_install_diverged_update.py
test_install_lockfile_churn.py
test_install_macos_launcher.py
test_install_no_initial_commit.py
test_install_ps1_ascii_only.py
test_install_ps1_native_stderr_eap.py
test_install_ps1_node_path_for_npm.py
test_install_ps1_python_fallback_venv.py
test_install_ps1_uv_powershell_host.py
test_install_ps1_web_server_syntax_probe.py
test_install_sh_acp_launcher.py
test_install_sh_bootstrap_marker.py
test_install_sh_browser_install.py
test_install_sh_install_method_stamp.py
test_install_sh_node_global_prefix.py
test_install_sh_pythonpath_sanitization.py
test_install_sh_root_fhs_uv_python_path.py
test_install_sh_setup_wizard_tty_probe.py
test_install_sh_symlink_stomp.py
test_install_sh_termux_network_prereqs.py
test_install_unmerged_index.py
test_ipv4_preference.py
test_iron_proxy.py
test_iron_proxy_cli.py
test_iron_proxy_e2e.py
test_journal_mode_config.py
test_lazy_session_regressions.py
test_live_system_guard.py
test_live_system_guard_self_test.py
test_log_isolation.py
test_managed_runtime_resolution.py
test_mcp_serve.py
test_message_reactions.py
test_mini_swe_runner.py
test_minimax_model_validation.py
test_minimax_oauth.py
test_minisweagent_path.py
test_model_forces_max_completion_tokens.py
test_model_picker_scroll.py
test_model_tools.py
test_model_tools_async_bridge.py
test_no_shadowed_test_definitions.py
test_ollama_num_ctx.py
test_onepassword_secrets.py
test_output_cap_parsing.py
test_packaging_build_guard.py
test_packaging_metadata.py
test_plugin_skills.py
test_plugin_utils.py
test_process_loop_event_loop_warning.py
test_profile_isolation_runtime.py
test_project_metadata.py
test_pty_keepalive_ws.py
test_pty_session.py
test_retry_utils.py
test_run_tests_parallel.py
test_run_tests_parallel_stdio.py
test_sanitize_tool_error.py
test_search_slow_query_log.py
test_secret_scope_plugin_families.py
test_session_db_read_path_split.py fix(state): route session-resume reads through the WAL read-only connection 2026-08-03 21:02:11 +05:30
test_session_skill_previews.py
test_session_system_prompt_dedup.py fix(state): deduplicate session system prompts 2026-08-03 20:37:17 +05:30
test_session_vacuum_config.py
test_session_workspace_binding.py
test_slack_thread_require_mention.py
test_slash_worker_watchdog.py
test_sql_injection.py
test_sqlite_lock_safe_inspection.py
test_sqlite_wal_reset_gate.py fix(db): never downgrade journal mode on a database with concurrent openers 2026-08-06 07:49:42 -07:00
test_stale_tool_call_marker_session_repair.py fix(cli): back up state.db before clean-markers writes by default 2026-08-04 11:26:15 +05:30
test_stale_utils_module_import.py
test_state_db_malformed_repair.py
test_subprocess_home_isolation.py
test_telegram_polling_progress_ptb.py
test_termux_all_extra_compat.py
test_timezone.py
test_tini_shim.py
test_toolset_distributions.py
test_toolsets.py
test_trajectory_compressor.py
test_trajectory_compressor_async.py
test_transform_llm_output_hook.py
test_transform_tool_result_hook.py
test_tui_entry_mcp_owner.py
test_tui_gateway_loop_noise.py
test_tui_gateway_queue_on_busy.py
test_tui_gateway_server.py fix(wake): address review on client-capture re-arm and feed queue 2026-08-05 10:03:55 -06:00
test_tui_gateway_ws.py
test_tui_mcp_late_refresh.py
test_utils_truthy_values.py
test_voice_max_recording_seconds.py
test_wal_checkpoint_strategy.py
test_web_server.py
test_web_server_sessiondb_eventloop.py
test_web_server_status_topology_cache.py
test_windows_subprocess_no_window_flags.py
test_yaml_indent_consistency_31999.py
test_yuanbao_integration.py
test_yuanbao_markdown.py
test_yuanbao_pipeline.py
test_yuanbao_proto.py
test_yuanbao_reconnect_set_active.py
test_yuanbao_shutdown.py
test_zeroed_state_db.py