hermes-agent/tests
homelab-ha-agent a5ea9a6fd4 fix(model): don't misroute named custom providers to openrouter on save
_normalize_main_model_assignment() (POST /api/model/set, the endpoint
Desktop's Settings -> Model page uses to persist the main model slot) has
a fallback for a specific analytics bug: an older session row with no
billing_provider sends the model's bare vendor prefix as "provider"
(e.g. "anthropic" from "anthropic/claude-opus-4.6"), so the code detects
an unrecognized provider paired with a slash-bearing model and treats it
as that stray-vendor-prefix case.

Named custom providers are represented as "custom:<name>" slugs
everywhere else in the codebase (runtime_provider.py, model_switch.py),
but _KNOWN_PROVIDER_NAMES only lists the bare "custom" bucket. So picking
a named custom provider (e.g. "custom:litellm", a LiteLLM proxy fronting
Ollama) together with a slash-bearing model ("ollama/glm-5.2") looked
identical to the stray-vendor-prefix case and got silently rewritten to
provider: openrouter in config.yaml on save -- reassigning the provider
entirely, not just mangling the model id.

Exclude anything starting with "custom" from the fallback, matching the
guard the same function already applies later for the actual
normalize_model_for_provider call.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 19:32:12 +05:30
..
acp fix(acp): pin the session cwd for slash-command handlers too 2026-07-25 18:06:32 -07:00
acp_adapter
…
agent refactor(fallback): single owner for backend identity and failure-scoped skips 2026-07-26 23:41:54 -07:00
ci fix(ci): report E2E evidence upload failures (#69901) 2026-07-23 05:45:17 +00:00
cli feat(cli): /focus — reduced-output view with hidden-line recovery and status indicator 2026-07-26 18:10:34 -07:00
computer_use fix(computer_use): stop the cua-driver child on exit 2026-07-26 03:38:23 -05:00
conformance feat(conformance): vector generator — native renderers as executable spec (#71666) 2026-07-26 16:52:25 +10:00
cron fix(delegation): route delegated-child API calls inline to avoid nested-pool wedge (#60203) 2026-07-26 20:37:51 -07:00
dashboard
…
docker fix(hermes_cli): heal root-owned logs/gateways on every stage2 boot 2026-07-27 19:19:01 +05:30
e2e
…
fakes
…
fixtures/plugins/example-dashboard/dashboard
…
gateway fix(relay): per-platform capability descriptors for multi-platform gateways (#70717) 2026-07-27 14:24:14 +10:00
hermes_cli fix(model): don't misroute named custom providers to openrouter on save 2026-07-27 19:32:12 +05:30
hermes_state
…
honcho_plugin fix(honcho): default device-code poll interval to 5s when AS omits it 2026-07-24 07:53:12 -07:00
integration
…
manual
…
openviking_plugin fix(openviking): cool down failed refreshes and publish conn identity atomically 2026-07-24 13:00:53 +05:30
plugins fix(deepseek): drop retired models from picker and provider defaults 2026-07-26 16:28:41 -07:00
providers fix(openrouter): give auxiliary calls the sticky routing key 2026-07-25 22:46:35 -07:00
run_agent test: update reasoning-only exhaustion siblings for the terminal excerpt 2026-07-26 20:59:21 -07:00
scripts fix(scripts): accept legacy consecutive-hyphen GitHub logins in add_contributor 2026-07-24 22:40:15 -07:00
secret_sources
…
skills fix(skills): parse stored GitHub credentials without scanner false positives 2026-07-26 20:59:26 -07:00
state fix(compression): recover rotated session lineage 2026-07-24 16:00:34 -07:00
stress
…
tools feat(tool_search): probe-validate blind tool_call args against the deferred schema 2026-07-26 20:59:36 -07:00
tui_gateway fix(kanban): snap notify-sub cursor to current MAX(task_events.id) at creation 2026-07-26 16:14:15 -07:00
website
…
__init__.py
…
conftest.py fix(kanban): preserve telegram dm topic metadata 2026-07-26 16:01:32 -07:00
run_interrupt_test.py
…
test_account_usage.py
…
test_atomic_replace_symlinks.py
…
test_background_review_list_shapes.py
…
test_background_review_session_isolation.py
…
test_base_url_hostname.py
…
test_batch_runner_checkpoint.py
…
test_bitwarden_secrets.py
…
test_cli_file_drop.py
…
test_cli_manual_compress.py test(cli): prove /compress type-ahead queue-drain; map contributor email 2026-07-23 07:24:46 -07:00
test_cli_skin_integration.py
…
test_code_skew.py
…
test_command_secret_source.py
…
test_conftest_wal_gate.py fix(tests): gate WAL-dependent tests on the linked SQLite's real capability 2026-07-25 07:17:52 -07:00
test_copilot_initiator.py
…
test_credential_file_permissions.py harden(slack): CDN-allowlist inbound file URLs, DNS-pin token downloads, widen token-file perms warning 2026-07-23 11:44:43 -07:00
test_ctx_halving_fix.py
…
test_delegate_cascade_49148.py
…
test_dispatch_session_id.py
…
test_empty_model_fallback.py
…
test_empty_session_hygiene.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_gateway_streaming_nested_config.py
…
test_get_tool_definitions_cache_isolation.py
…
test_hermes_bootstrap.py test(install): add UTF-8 regression guard for skills_sync child path 2026-07-24 17:10:39 -07:00
test_hermes_constants.py
…
test_hermes_home_profile_warning.py
…
test_hermes_logging.py
…
test_hermes_state.py fix(sessions): preserve recently active sessions during pruning 2026-07-26 19:30:21 -07:00
test_hermes_state_compression_locks.py fix(compression-lock): reclaim crashed holders instead of stranding the lease 2026-07-25 22:47:07 -07:00
test_hermes_state_wal_fallback.py fix(state): make the byte-probe guard atomic, path-correct, and fail-closed 2026-07-25 21:44:43 -07:00
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_diverged_update.py
…
test_install_lockfile_churn.py
…
test_install_macos_launcher.py fix(install): avoid realpath-dependent uv launcher on macOS 2026-07-26 19:30:32 -07:00
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_bootstrap_marker.py fix(install): stamp the bootstrap-complete marker from install.sh too 2026-07-26 16:06:50 -05:00
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 Reapply "Merge pull request #30179 from NousResearch/feat/iron-proxy" 2026-07-24 09:49:00 -07:00
test_iron_proxy_cli.py Reapply "Merge pull request #30179 from NousResearch/feat/iron-proxy" 2026-07-24 09:49:00 -07:00
test_iron_proxy_e2e.py Reapply "Merge pull request #30179 from NousResearch/feat/iron-proxy" 2026-07-24 09:49:00 -07:00
test_lazy_session_regressions.py fix(desktop): persist @image: refs instead of the vision-enrichment text 2026-07-24 21:20:52 -05:00
test_lint_config.py
…
test_live_system_guard_self_test.py
…
test_mcp_serve.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_ollama_num_ctx.py
…
test_onepassword_secrets.py
…
test_output_cap_parsing.py
…
test_packaging_build_guard.py
…
test_packaging_metadata.py fix(deps): move CVE pins to current fixed versions so update stops downgrading patched envs 2026-07-26 19:29:07 -07:00
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(deps): class invariant — every shared LAZY_DEPS exact pin must match uv.lock 2026-07-26 19:28:55 -07:00
test_pty_keepalive_ws.py
…
test_pty_session.py
…
test_retry_utils.py
…
test_run_tests_parallel.py fix(tests): a run that collects nothing can no longer look green 2026-07-25 07:09:22 -07:00
test_sanitize_tool_error.py
…
test_search_slow_query_log.py
…
test_session_skill_previews.py fix(sessions): keep the skill body out of session previews 2026-07-26 02:58:20 -05:00
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 fix(state): make the byte-probe guard atomic, path-correct, and fail-closed 2026-07-25 21:44:43 -07:00
test_sqlite_wal_reset_gate.py fix(state): make the byte-probe guard atomic, path-correct, and fail-closed 2026-07-25 21:44:43 -07:00
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 docs(xai): clarify x_search vs xurl routing without schema cross-refs 2026-07-23 21:06:47 -07:00
test_trajectory_compressor.py fix(compaction): skip compression when it can't reduce tokens 2026-07-23 16:21:03 -07:00
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 fix(tui_gateway): keep the original prompt when a redirect corrects a turn 2026-07-26 19:43:23 -05:00
test_tui_gateway_server.py feat(approvals): add cross-surface mode command 2026-07-26 21:13:03 -07:00
test_tui_gateway_ws.py fix(mcp): propagate profile HERMES_HOME override into shared discovery owner; restore stdio startup + WSTransport tests 2026-07-26 14:14:03 -07:00
test_tui_mcp_late_refresh.py
…
test_utils_truthy_values.py
…
test_wal_checkpoint_strategy.py
…
test_web_server.py
…
test_web_server_sessiondb_eventloop.py
…
test_windows_subprocess_no_window_flags.py fix(cron): respect the platform-conditional decode design in _run_job_script + taskkill kwarg snapshot 2026-07-24 11:45:57 -07:00
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 fix(state): quarantine lock fails closed when unacquireable (#68805) 2026-07-24 23:06:05 -07:00