hermes-agent/tests/hermes_cli
teknium1 199f558058 fix(windows): verify rebuilt Hermes.exe integrity before shipping it as an update (#69179)
The desktop self-update chain (Desktop -> hermes-setup --update ->
hermes update -> hermes desktop --build-only -> relaunch) rebuilds
Hermes.exe on the user's machine and declared success on bare file
EXISTENCE. A truncated PE (corrupt cached Electron zip / interrupted
extraction or rcedit rewrite / full disk) or a wrong-architecture
unpacked tree therefore shipped as the 'updated' app, which Windows
refuses to load with 'This app can't run on your computer'
(此应用无法在你的电脑上运行) — and the previous working build had
already been wiped by before-pack.mjs, leaving nothing to fall back to.

Fix, in three parts:

- hermes_cli/main.py: post-build integrity gate on Windows
  (_ensure_desktop_exe_launchable). Parses the PE header of the freshly
  built Hermes.exe — MZ/PE magic, section-table completeness vs file
  size (catches truncation), and COFF machine vs the host arch (catches
  arm64/x64 mixups). On failure it purges the (likely corrupt) cached
  Electron zip, invalidates the content-hash build stamp so the
  updater's retry-once genuinely re-downloads and rebuilds, restores
  the previous build from the .bak tree when one exists (keeping the
  corrupt tree as .corrupt for diagnostics), tells the user the update
  was aborted and their old version kept, and exits nonzero.
  _desktop_packaged_executable also now prefers a host-loadable PE over
  pure newest-mtime when multiple win-*-unpacked trees coexist.

- apps/desktop/scripts/before-pack.mjs: on win32, the previous unpacked
  tree is preserved as <appOutDir>.bak (only when it holds the product
  exe — partial/corrupt trees still get the plain wipe) instead of
  being destroyed, providing the rollback material for the gate above.
  Non-Windows behavior is unchanged.

- Behavior-contract tests: tests/hermes_cli/test_desktop_exe_integrity.py
  (23 tests — synthetic PE fixtures for truncation/non-PE/arch-mismatch,
  rollback semantics, and the build-only exit contract) and 6 new vitest
  cases in before-pack.test.mjs for the .bak preservation rules.

Progresses #69179
2026-07-24 19:11:35 -07:00
..
__init__.py
conftest.py test(hermes_cli): harden concurrent-gate fixture against partial-import race (#42626) 2026-06-08 22:54:25 -07:00
conftest_dashboard_auth.py fix(dashboard-auth): use fixed-length sig suffix in stub token framing 2026-05-27 02:12:27 -07:00
test_25106_global_switch_persists_base_url_api_mode.py fix(cli): persist provider on global model switch 2026-07-22 21:18:50 -07:00
test_active_sessions.py test: make active session cross-process race deterministic (#54248) 2026-06-28 05:49:21 -07:00
test_anthropic_model_flow_stale_oauth.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_anthropic_oauth_flow.py fix(cli): show masked feedback for secret prompts 2026-05-25 01:20:33 -07:00
test_anthropic_oauth_routes_to_messages_api.py test(runtime): pin Anthropic OAuth → /v1/messages routing across runtime branches 2026-07-01 02:18:56 -07:00
test_anthropic_picker_curated.py feat(models): add Claude Sonnet 5 support 2026-07-20 02:25:44 -07:00
test_anthropic_provider_persistence.py
test_api_key_providers.py fix(ci): make tests, workflows, and attribution reliable under load (#66373) 2026-07-17 20:55:24 +00:00
test_apply_model_switch_result_context.py fix(providers): scope route-owned runtime settings 2026-07-22 11:19:37 +05:30
test_apply_profile_override.py fix(s6): reserved default gateway must not follow sticky active_profile (#46483) 2026-06-15 05:36:20 +00:00
test_arcee_provider.py remove Vercel AI Gateway and Vercel Sandbox (#33067) 2026-05-27 00:43:32 -07:00
test_argparse_flag_propagation.py fix(cli): preserve -t/-m/--provider/--tui/--dev before chat subcommand 2026-07-11 03:51:43 -07:00
test_at_context_completion_filter.py
test_atomic_json_write.py fix(utils): guard os.fchmod for Windows in atomic_json_write 2026-06-01 09:57:10 -07:00
test_atomic_yaml_write.py fix(config): write config.yaml as UTF-8 to stop emoji/personality corruption (#51676) 2026-06-23 23:28:21 -07:00
test_auth_codex_provider.py fix(auth): retry Codex device-code login on 429 with clear rate-limit message (#47860) 2026-06-17 05:48:35 -07:00
test_auth_codex_quota_probe.py fix(auth): detect upstream Codex quota resets and lift stale pool cooldowns (#69494) 2026-07-22 10:58:22 -07:00
test_auth_codex_self_heal.py fix(auth): self-heal missing Codex access tokens 2026-06-13 05:15:26 -07:00
test_auth_commands.py fix(auth): make xAI OAuth pools multi-account resilient 2026-07-17 11:37:25 +05:30
test_auth_loopback_ssh_hint.py fix(auth): remove stale loopback_pkce reference in xAI quarantine removal list 2026-07-02 13:17:41 -07:00
test_auth_nous_provider.py test(auth): pin runtime routing persistence on failure 2026-07-10 17:50:43 +05:30
test_auth_profile_fallback.py fix(credential-pool): stop lost-update cooldown erasure and wrong-key quarantine 2026-07-23 09:22:02 -07:00
test_auth_provider_gate.py fix(auth): count MoA preset slots as explicit provider configuration 2026-07-23 11:21:13 -07:00
test_auth_qwen_provider.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_auth_ssl_macos.py
test_auth_toctou_file_modes.py
test_auth_usable_secret.py security: harden API server key placeholder handling (#30738) 2026-05-24 04:25:32 -07:00
test_auth_xai_oauth_provider.py feat(auth): make xAI Grok OAuth device-code-only, drop loopback login 2026-07-02 13:17:41 -07:00
test_authenticated_providers_exhausted_pool.py fix(model-picker): show exhausted-pool providers in interactive /model picker (#66584) 2026-07-17 19:16:48 -04:00
test_aux_config.py fix: honor disabled title generation config 2026-07-16 22:24:45 -07:00
test_azure_detect.py fix(security): secure Azure catalog probes 2026-07-11 12:28:55 +05:30
test_azure_foundry_entra.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_backup.py fix(discord): harden reconnect message recovery 2026-07-18 14:01:33 -07:00
test_banner.py fix(model): show MoA preset picker on selection and label MoA in the banner 2026-06-27 11:45:07 -07:00
test_banner_git_state.py fix(docker): bake build-time git SHA into the image 2026-05-28 15:14:05 +10:00
test_banner_skills.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_banner_skills_width.py feat(banner): size skills display to terminal width instead of fixed 8/47 2026-07-06 11:17:41 -07:00
test_bedrock_model_picker.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_bedrock_region_scoped_picker.py fix(bedrock): region-scoped model picker + geo-aware recommendations (#28156) 2026-07-15 09:59:38 -07:00
test_billing_cli.py feat(cli): plan catalog on Free + plan= deep link + top-up/auto-refill copy split (#68689) 2026-07-22 08:11:09 +05:30
test_billing_portal_url.py feat(billing): /billing terminal billing — interactive TUI + CLI client (#45449) 2026-06-19 01:53:32 +05:30
test_billing_scope_stepup.py feat(billing): /billing terminal billing — interactive TUI + CLI client (#45449) 2026-06-19 01:53:32 +05:30
test_bitwarden_status.py fix(secrets): validate bitwarden status token 2026-07-22 03:20:09 -07:00
test_browser_connect_dual_stack.py fix: /browser connect times out when another app squats the CDP port 2026-07-18 02:49:28 -07:00
test_build_info.py fix(docker): bake build-time git SHA into the image 2026-05-28 15:14:05 +10:00
test_bundles.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_certifi_repair.py fix(ssl): detect and repair a missing certifi cacert.pem via existing venv-repair infra 2026-07-24 15:53:38 -07:00
test_chat_skills_flag.py
test_checkpoints_prune.py fix(checkpoints): bind an empty orphan preview to an empty deletion allowlist 2026-07-24 16:01:06 -07:00
test_claw.py revert(windows): roll back terminal-popup PRs #53791 #53810 #53829 (#53853) 2026-06-27 15:59:00 -07:00
test_clear_stale_base_url.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_cli_active_session_limit.py feat(sessions): add optional max session cap 2026-06-08 15:12:12 -07:00
test_cli_custom_provider_vision.py fix: preserve named custom provider vision overrides 2026-07-23 17:57:33 +05:30
test_cli_model_once.py feat: add /model --once one-turn model override (#29914) 2026-07-18 14:01:56 -07:00
test_cli_output.py fix(cli): show masked feedback for secret prompts 2026-05-25 01:20:33 -07:00
test_cmd_update.py fix(runtime): preserve cutover lifecycle on retry (E-949) 2026-07-24 16:00:03 -07:00
test_cmd_update_docker.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_coalesce_session_args.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_codex_cli_model_picker.py test(codex-picker): raise max_models so count invariant survives catalog growth 2026-07-10 00:47:51 +05:30
test_codex_models.py test(codex): cover ChatGPT-Account-Id header on /models probe 2026-07-21 05:27:13 -07:00
test_codex_runtime_plugin_migration.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_codex_runtime_switch.py fix(codex-runtime): re-running /codex-runtime codex_app_server when already enabled now triggers migration 2026-07-01 23:51:54 +05:30
test_commands.py Reapply "Merge pull request #30179 from NousResearch/feat/iron-proxy" 2026-07-24 09:49:00 -07:00
test_completion.py
test_config.py fix(config): preserve opaque .env values 2026-07-24 16:02:08 -07:00
test_config_drift.py
test_config_env_expansion.py fix(cli): ignore empty config sections 2026-07-09 18:23:18 -07:00
test_config_env_ref_parity.py feat(config): resolve ${env:VAR} SecretRefs in config.yaml, matching MCP config (#69267) 2026-07-22 04:39:57 -07:00
test_config_env_refs.py
test_config_validation.py fix(config): remove unknown-top-level-key warning — top-level keys bridge to env (#67924) 2026-07-20 02:25:33 -07:00
test_configured_builtin_models.py fix(model): merge configured models into picker rows (#63055) 2026-07-12 03:05:12 -07:00
test_console_engine.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_container_aware_cli.py
test_container_boot.py fix(container): keep named multiplex gateway slots down (#65368) 2026-07-16 14:30:05 +10:00
test_context_switch_guard.py test(cli): cover custom provider false shrink warning 2026-07-22 21:17:21 -07:00
test_copilot_auth.py fix(copilot): set x-initiator per turn so user prompts bill as premium requests (salvage #4097) (#58544) 2026-07-05 00:44:15 -07:00
test_copilot_catalog_oauth_fallback.py
test_copilot_context.py
test_copilot_in_model_list.py test: remove low-value model-catalog mirror tests 2026-05-29 23:45:05 -07:00
test_copilot_model_api_mode.py fix(moa): route Copilot slots by target model 2026-07-23 08:26:57 -07:00
test_copilot_runtime_api_mode.py fix(moa): route every Copilot credential path by target 2026-07-23 08:26:57 -07:00
test_copilot_token_exchange.py fix(copilot): switch to VS Code client ID and derive enterprise base URL 2026-06-30 03:27:41 -07:00
test_credential_lifecycle.py fix(credentials): unified provider key delete/update across .env, auth.json, config.yaml (#67213) 2026-07-19 03:02:21 -07:00
test_cron.py test(cron): cover cron_list/status/tick/create CLI helpers 2026-07-06 02:21:32 -07:00
test_cron_dashboard_off_loop.py test(dashboard): pin cron fire + blueprint handlers off the event loop 2026-07-09 14:30:16 +05:30
test_cron_fire_dashboard.py fix(cron): complete plugins.cron_providers rename in 2 missed test files 2026-06-23 23:39:22 -07:00
test_cron_parser_builder.py fix(cron): harden execution attempt ledger 2026-07-17 04:58:35 -07:00
test_ctrlg_editor_submit.py feat(cli): Ctrl+G submits the edited draft on save (TUI parity) (#50560) 2026-06-21 22:43:55 -07:00
test_curator_archive_prune.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_curator_recent_run_notice.py
test_curator_run.py
test_curator_status.py
test_curator_usage.py feat(curator): add hermes curator usage — all-skills usage view 2026-07-06 12:26:21 -07:00
test_curses_arrow_keys.py test: skip curses tests on Windows where _curses is unavailable (#40611) 2026-06-07 18:21:03 -07:00
test_curses_color_compat.py test: skip curses tests on Windows where _curses is unavailable (#40611) 2026-06-07 18:21:03 -07:00
test_curses_ui_fuzzy_rank.py feat(cli): ranked fuzzy search in the curses model picker 2026-06-01 16:58:58 -07:00
test_curses_ui_search.py feat(cli): add fuzzy search helpers for curses pickers 2026-06-01 16:58:58 -07:00
test_custom_provider_context_length.py fix(providers): scope route-owned runtime settings 2026-07-22 11:19:37 +05:30
test_custom_provider_extra_headers.py fix(providers): scope route-owned runtime settings 2026-07-22 11:19:37 +05:30
test_custom_provider_identity.py Fix custom provider identity loss in session persistence 2026-06-13 05:51:05 -07:00
test_custom_provider_model_switch.py fix(auth): prune stale custom model credentials 2026-07-05 00:55:51 -07:00
test_custom_provider_tls.py fix(providers): scope route-owned runtime settings 2026-07-22 11:19:37 +05:30
test_dashboard_admin_endpoints.py fix(credentials): suppress re-seeding when a pool entry is deleted via API (#55217) (#67429) 2026-07-19 03:48:48 -07:00
test_dashboard_auth_401_reauth.py fix(auth): preserve provider fallback during refresh 2026-07-14 07:02:05 -07:00
test_dashboard_auth_audit.py feat(dashboard-auth): json-lines audit log at $HERMES_HOME/logs/dashboard-auth.log 2026-05-27 02:12:27 -07:00
test_dashboard_auth_cookies.py fix(auth): preserve provider fallback during refresh 2026-07-14 07:02:05 -07:00
test_dashboard_auth_gate.py fix(ci): rip out some xdist legacy stuff... how did these ever work?? 2026-06-26 19:15:18 -07:00
test_dashboard_auth_middleware.py fix(dashboard): add lightweight /api/health liveness endpoint 2026-07-24 19:43:44 -05:00
test_dashboard_auth_native_flow.py fix(dashboard-auth): harden the public native-authorize surface 2026-07-22 06:50:50 -07:00
test_dashboard_auth_password_login.py fix(dashboard): support mobile OAuth login 2026-07-09 12:21:16 +05:30
test_dashboard_auth_plugin_hook.py feat(plugins): add register_dashboard_auth_provider hook on PluginContext 2026-05-27 02:12:27 -07:00
test_dashboard_auth_prefix.py fix(dashboard): accept HA ingress prefix paths 2026-07-06 03:18:02 -07:00
test_dashboard_auth_provider_base.py test(dashboard-auth): cover registry register/get/list/clear semantics 2026-05-27 02:12:27 -07:00
test_dashboard_auth_status_endpoint.py fix(dashboard): add lightweight /api/health liveness endpoint 2026-07-24 19:43:44 -05:00
test_dashboard_auth_stub_provider.py test(dashboard-auth): stub auth provider for E2E gate testing 2026-05-27 02:12:27 -07:00
test_dashboard_auth_ws_auth.py Add dashboard Hermes console websocket 2026-07-03 20:18:00 +05:30
test_dashboard_auth_ws_tickets.py test(dashboard): direct unit coverage for internal WS credential + docstring fix 2026-06-02 23:43:27 -07:00
test_dashboard_basic_auth_plugin_enable.py fix(dashboard): unblock basic auth plugin when setting password interactively (#54489) (#63786) 2026-07-16 19:49:39 -04:00
test_dashboard_browser_safe_imports.py
test_dashboard_lifecycle_flags.py feat(dashboard): always enable embedded chat; remove dashboard --tui flag 2026-06-04 03:03:35 -07:00
test_dashboard_oauth_endpoints_server_gate.py test(dashboard): assert server still gates OAuth endpoints without cookie 2026-07-09 12:21:16 +05:30
test_dashboard_profiles_nav_label.py
test_dashboard_register.py fix(cli): persist custom --portal-url to .env on dashboard register (#42435) 2026-06-09 13:56:33 +10:00
test_dashboard_token_auth.py fix(dashboard-auth): exclude non-interactive providers from interactive login surfaces (#53239) 2026-06-27 10:08:13 +10:00
test_dashboard_tui_backcompat.py fix(ci): map @TheGardenGallery email + drop unused pytest import 2026-06-06 12:43:28 -05:00
test_dashboard_unified_launch.py fix(dashboard): pin machine-dashboard reroute to the machine root, not $HOME/.hermes (#46487) 2026-06-15 15:33:15 +10:00
test_dashboard_web_dist_validation.py fix(dashboard): isolate Desktop-inherited env from standalone launch (#69891) 2026-07-23 00:31:23 -05:00
test_debug.py fix(security): require explicit consent before uploading debug logs 2026-07-01 00:38:17 -07:00
test_default_interface_resolution.py fix(kanban): no-TTY gate in _wants_tui_early — the actual worker-crash fix 2026-07-09 16:13:59 -05:00
test_dep_ensure.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_deprecated_cwd_warning.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_desktop_exe_integrity.py fix(windows): verify rebuilt Hermes.exe integrity before shipping it as an update (#69179) 2026-07-24 19:11:35 -07:00
test_desktop_repo_discovery_config.py feat(desktop): configure repository discovery (supersedes #67630) (#68642) 2026-07-21 10:09:31 -04:00
test_destructive_slash_confirm_gate.py
test_detect_api_mode_for_url.py test(provider): pin api.anthropic.com → anthropic_messages URL detection 2026-07-01 02:18:56 -07:00
test_determine_api_mode_hostname.py
test_diagnostics_upload.py feat(debug): drop dead confirm step from --nous upload (stateless NAS) 2026-06-30 17:29:23 -07:00
test_dingtalk_auth.py
test_discord_skill_clamp_warning.py
test_doctor.py fix(doctor): UTF-8/latin-1 fallback when scanning .env 2026-07-24 17:10:39 -07:00
test_doctor_command_install.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_doctor_dedicated_provider_skip.py
test_dump_env_visibility.py fix(dump): flag API keys visible only to the shell, not the managed backend 2026-07-02 19:52:18 -05:00
test_dump_git_commit.py fix(dump): show commit date instead of release date in hermes debug (#48104) 2026-06-17 16:53:42 -07:00
test_dump_terminal_backend.py test(dump): cover terminal backend override reporting 2026-06-15 12:31:23 -07:00
test_early_recovery.py fix(update): stdlib-only early recovery before hermes_cli.main imports 2026-07-23 07:33:16 -07:00
test_ensure_hermes_home_memo.py perf: fast model picker + dialogs — config-load hot path, model.options off the reader thread, off-screen turns skip rendering 2026-07-17 15:01:54 -04:00
test_ensure_hermes_home_uid_34107.py fix(config): chown ensure_hermes_home dirs to HERMES_UID/GID in Docker (#34107) (#34268) 2026-06-01 13:27:30 +10:00
test_ensure_utf8_locale.py fix(cli): repair non-UTF-8 stdout/stderr on all platforms, not just Windows (#43439) 2026-06-10 02:21:00 -07:00
test_env_custom_keys.py feat(dashboard): list & add arbitrary custom .env keys on the Keys page 2026-06-28 22:53:56 -07:00
test_env_export_line_lifecycle.py fix(credentials): unified provider key delete/update across .env, auth.json, config.yaml (#67213) 2026-07-19 03:02:21 -07:00
test_env_export_prefix.py test: cover export-prefix stripping in .env parsers (PR #6659) 2026-06-28 18:53:00 -07:00
test_env_load_cache.py
test_env_loader.py fix(config): preserve opaque .env values 2026-07-24 16:02:08 -07:00
test_env_sanitize_on_load.py fix(config): preserve opaque .env values 2026-07-24 16:02:08 -07:00
test_fallback_cmd.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_fallback_config.py fix(auth): honor per-entry key_env when resolving fallback providers 2026-07-16 07:19:36 -07:00
test_fireworks_provider.py fix(providers): align Fireworks integration with project policy 2026-07-11 05:43:35 -07:00
test_gateway.py fix(gateway): hard-exit on KeyboardInterrupt path too 2026-07-22 09:53:51 +05:30
test_gateway_external_supervisor.py fix(gateway): preserve external supervisor ownership 2026-07-16 05:08:56 -07:00
test_gateway_linger.py fix(gateway): refuse to write service definitions with a temp-dir HERMES_HOME (#44267) 2026-06-11 06:10:08 -07:00
test_gateway_platform_gating.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_gateway_proc_fallback.py fix(gateway): track no-systemd restart runtimes 2026-06-23 23:29:28 -07:00
test_gateway_restart_loop.py fix(gateway,cron): guard cron model-tool path + add auto-resume loop breaker (#30719) 2026-07-01 02:48:36 -07:00
test_gateway_run_hard_exit.py fix(gateway): hard-exit on KeyboardInterrupt path too 2026-07-22 09:53:51 +05:30
test_gateway_runtime_health.py test(gateway): cover stale gateway_state.json detection (TTL + PID liveness) 2026-07-21 12:39:59 -07:00
test_gateway_s6_dispatch.py fix(gateway): fall back to in-process heartbeat when s6 sleep is missing (#36208) (#37120) 2026-06-02 11:59:27 +10:00
test_gateway_service.py fix(gateway): deregister transient reload label after one-shot job + test 2026-07-24 15:49:29 -07:00
test_gateway_service_paths.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_gateway_windows.py fix(windows): hidden-console daemons — extend the parent-console fix to every detached spawn path (#70205) 2026-07-23 11:13:14 -07:00
test_gateway_wsl.py fix(gateway,windows): reliability — JOB breakaway + status --deep probes + test-leak fix (#40909) 2026-06-06 19:53:58 -07:00
test_gemini_free_tier_setup_block.py
test_gemini_provider.py fix(gemini): strip native self prefixes before generateContent (#36141) 2026-06-13 13:47:08 -07:00
test_gmi_provider.py test(gmi): stub profile fetch_models in static-fallback test 2026-06-28 18:05:28 -05:00
test_goals.py fix(goals): update judge consumers for transport result 2026-07-20 05:38:25 -07:00
test_gpt56_registration.py feat(openai): complete gpt-5.6 E2E — codex catalog + 272K compaction auto-raise 2026-07-10 00:47:51 +05:30
test_graphical_browser_detection.py fix(auth): don't launch a text-mode browser inside the terminal for OAuth (#34479) 2026-05-29 01:23:06 -07:00
test_gui_command.py fix(desktop): put Hermes-managed Node on PATH for install/rebuild (#66002) 2026-07-16 20:45:05 -04:00
test_gui_uninstall.py feat: uninstall the Chat GUI without removing the agent (CLI + desktop UI) (#40355) 2026-06-06 18:22:38 -07:00
test_hooks_cli.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_ignore_user_config_flags.py test: deflake CI and dev-machine flaky tests in bulk (11 tests, 10 files) (#61816) 2026-07-09 20:03:11 -07:00
test_image_gen_picker.py fix(auth): refresh Nous entitlement in tool menus 2026-05-28 00:19:31 -07:00
test_input_sanitize.py test(input): preservation regressions and prompt.submit boundary (#62557) 2026-07-15 07:39:42 -07:00
test_install_cua_driver.py fix(cli): drop shell=True from cua-driver installer — download to mkstemp, exec as argv (#58796) 2026-07-05 05:35:44 -07:00
test_inventory.py fix: speed up CLI /model picker by skipping non-current custom provider probing (#65652) 2026-07-19 19:33:49 -04:00
test_inventory_pricing.py Nous portal model pricing (#69579) 2026-07-22 16:47:06 -04:00
test_jobs_json_utf8_bom.py fix(cron): accept UTF-8 BOM when reading jobs.json 2026-07-18 02:31:20 -07:00
test_journey_render.py fix(cli): render /journey color instead of leaking raw ANSI 2026-07-01 16:25:48 -05:00
test_kanban_block_kinds.py feat(kanban): typed block reasons + unblock-loop breaker (#52848) 2026-06-25 21:46:58 -07:00
test_kanban_blocked_sticky.py fix(kanban): align recompute_ready guard with breaker's configured failure_limit 2026-05-30 01:40:57 -07:00
test_kanban_boards.py fix(kanban): align board_exists with board discovery rules 2026-05-18 20:17:10 -07:00
test_kanban_cli.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
test_kanban_cli_dispatch_passthrough.py fix(kanban): CLI dispatch honors max_in_progress/max_spawn from config; swap missing 'avoid-ai-writing' skill for bundled humanizer (#33488, #29415) (#34337) 2026-05-28 21:00:46 -07:00
test_kanban_core_functionality.py feat(kanban): attachment toolset + CLI to match the dashboard surface 2026-07-16 07:33:14 -07:00
test_kanban_db.py fix(kanban): harden durable artifact handoff 2026-07-12 23:09:41 -07:00
test_kanban_db_init.py fix(kanban): rebuild legacy TEXT-PK tables to INTEGER AUTOINCREMENT on open 2026-05-30 01:40:49 -07:00
test_kanban_db_repair.py feat(kanban): add hermes kanban repair CLI verb 2026-07-21 12:41:14 -07:00
test_kanban_decompose.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
test_kanban_decompose_db.py fix(kanban): decompose children inherit root workspace instead of forcing scratch (#37172) 2026-06-01 20:26:57 -07:00
test_kanban_default_assignee.py feat(kanban): default_assignee fallback + per-profile concurrency cap (#27145, #21582) (#34244) 2026-05-28 19:02:55 -07:00
test_kanban_diagnostics.py fix(kanban): clear failure/crash diagnostics while a retry is in flight 2026-07-09 16:13:59 -05:00
test_kanban_dispatch_lock.py fix(kanban): single-writer dispatch lock to prevent orphan-dispatcher DB corruption (#50331) 2026-06-21 12:06:24 -07:00
test_kanban_goal_mode.py fix: migrate CLI kanban gate + remaining mocks to 5-value judge contract 2026-07-20 05:38:25 -07:00
test_kanban_init_lock_bounded.py fix(kanban): bound the cross-process init lock so connect() can't hang forever (#50353) 2026-06-21 12:43:41 -07:00
test_kanban_lifecycle_hooks.py feat(kanban): add task lifecycle plugin hooks (claimed/completed/blocked) (#50349) 2026-06-21 12:38:14 -07:00
test_kanban_notify.py feat(kanban): typed block reasons + unblock-loop breaker (#52848) 2026-06-25 21:46:58 -07:00
test_kanban_per_profile_cap.py feat(kanban): default_assignee fallback + per-profile concurrency cap (#27145, #21582) (#34244) 2026-05-28 19:02:55 -07:00
test_kanban_project_link.py feat(kanban): link tasks to project worktrees 2026-06-25 16:40:26 -05:00
test_kanban_promote.py feat(kanban): --ids bulk promote + AUTHOR_MAP entry for #29464 2026-05-23 23:10:36 -07:00
test_kanban_reclaim_claim_lock_guard.py fix(kanban): make reclaim claim-lock-aware to stop task/run status desync (#50366) 2026-06-21 12:49:07 -07:00
test_kanban_specify.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
test_kanban_specify_db.py
test_kanban_swarm.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_kanban_worker_image_extraction.py feat(kanban): attach images referenced in task bodies to worker vision (#34210) 2026-05-28 17:50:42 -07:00
test_kanban_worker_spawn_toolsets.py fix(cli): preserve -t/-m/--provider/--tui/--dev before chat subcommand 2026-07-11 03:51:43 -07:00
test_kanban_worker_terminal_cwd.py fix(kanban): pin worker TERMINAL_CWD to the task workspace (#50348) 2026-06-21 12:43:37 -07:00
test_kanban_worktree_isolation.py fix(kanban): stop decompose siblings sharing one worktree checkout 2026-07-23 09:27:13 -07:00
test_kanban_write_txn_busy_retry.py fix(kanban): retry write_txn on transient SQLITE_BUSY 2026-06-28 02:44:04 -07:00
test_kimi_cn_provider_listing.py fix: preserve kimi-coding-cn provider identity 2026-07-20 10:17:57 -07:00
test_launcher.py
test_lazy_refresh_venv_repair.py fix(update): split core vs lazy markers; probes cannot false-clear 2026-07-23 07:33:16 -07:00
test_list_picker_providers.py fix(model): collapse kimi alias/canonical to one /model picker row 2026-07-20 10:17:57 -07:00
test_logs.py refactor(gateway): migrate slack/dingtalk/whatsapp/matrix/feishu/telegram/wecom/email/sms adapters to bundled plugins 2026-06-20 10:26:45 -07:00
test_main_model_custom_provider_normalization.py fix(web): preserve declared providers in model writes (#63058) 2026-07-12 03:08:08 -07:00
test_managed_installs.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_managed_scope.py feat(managed-scope): add managed_scope module (resolver, loaders, key helpers) 2026-06-19 07:46:33 -07:00
test_managed_scope_cli_config.py fix(managed-scope): apply managed layer in cli.py's standalone config loader 2026-06-19 07:46:33 -07:00
test_managed_scope_config.py feat(managed-scope): managed config layer wins over user config 2026-06-19 07:46:33 -07:00
test_managed_scope_env.py feat(managed-scope): apply managed .env last with override 2026-06-19 07:46:33 -07:00
test_managed_scope_loaders.py fix(managed-scope): honor managed scope in config→env bridges too 2026-06-19 07:46:33 -07:00
test_managed_scope_overlay.py fix(managed-scope): honor managed scope in all standalone config loaders 2026-06-19 07:46:33 -07:00
test_managed_scope_regression.py test(config): pin config/env load behavior before managed scope 2026-06-19 07:46:33 -07:00
test_managed_scope_surfacing.py feat(managed-scope): surface managed scope in config show and doctor 2026-06-19 07:46:33 -07:00
test_managed_scope_writeguard.py feat(managed-scope): guard writes to managed config/env keys 2026-06-19 07:46:33 -07:00
test_managed_uv.py fix(runtime): request minor line for SQLite runtime repair + tests 2026-07-24 16:00:03 -07:00
test_mcp_add_command_dest.py feat(cli): add --connect-timeout flag to hermes mcp add 2026-07-05 19:10:00 -07:00
test_mcp_catalog.py feat(mcp): enforce exact version pins across the whole MCP catalog 2026-07-15 04:56:25 -07:00
test_mcp_config.py fix(mcp): close hosted OAuth lifecycle gaps 2026-07-17 04:50:47 -07:00
test_mcp_dashboard_oauth.py fix(mcp): close hosted OAuth lifecycle gaps 2026-07-17 04:50:47 -07:00
test_mcp_reload_confirm_gate.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_mcp_security.py fix(security): close hermes-0day MCP-persistence attack surface 2026-06-21 19:05:27 -07:00
test_mcp_startup.py fix(mcp): allow background discovery retry after a run that connected nothing 2026-07-21 12:43:27 -07:00
test_mcp_tools_config.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_memory_reset.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_memory_setup.py fix(memory-setup): sanitize .env values in the core writer too 2026-07-24 13:00:53 +05:30
test_memory_setup_provider_arg.py refactor(setup): route dependency installs through the canonical uv→pip→ensurepip ladder 2026-07-07 04:09:35 -07:00
test_memory_status.py fix: use canonical _get_platform_tools resolver for memory tool status 2026-07-23 17:50:20 +05:30
test_migrate_xai.py fix(config): guard xai migration writer + drop gratuitous annotation 2026-07-05 23:00:34 +05:30
test_moa_config.py feat(moa): default advisor fanout to user_turn — the cheapest cadence 2026-07-23 21:07:18 -07:00
test_moa_set_models_preserves_extra_keys.py fix(moa): preserve save_traces/trace_dir on GUI config save 2026-07-23 16:55:41 -07:00
test_model_catalog.py feat(models): catalog-labeled silent default — GLM-5.2 marked "default": true in the model catalog 2026-07-15 00:10:31 -07:00
test_model_cost_guard.py fix(model): require confirmation for expensive model selections 2026-06-10 00:24:06 -07:00
test_model_normalize.py fix(gemini): strip native self prefixes before generateContent (#36141) 2026-06-13 13:47:08 -07:00
test_model_picker_excluded_providers.py feat(model-switch): excluded_providers config to hide providers from /model picker 2026-07-20 03:06:02 -07:00
test_model_picker_expensive_confirm.py test(cli): cover custom provider false shrink warning 2026-07-22 21:17:21 -07:00
test_model_picker_viewport.py
test_model_provider_persistence.py fix(model): preserve named custom provider slug 2026-07-03 03:33:06 -07:00
test_model_switch_configured_provider_routing.py fix(model_switch): route typed configured models off openai-codex (#45006) 2026-06-23 02:03:21 +05:30
test_model_switch_context_display.py fix(providers): scope route-owned runtime settings 2026-07-22 11:19:37 +05:30
test_model_switch_copilot_api_mode.py
test_model_switch_custom_providers.py feat(model-switch): excluded_providers config to hide providers from /model picker 2026-07-20 03:06:02 -07:00
test_model_switch_filter_unresolved.py refactor(model): gate picker rows by runtime capability 2026-07-12 03:04:07 -07:00
test_model_switch_once_flags.py feat: add /model --once one-turn model override (#29914) 2026-07-18 14:01:56 -07:00
test_model_switch_openai_api_mode.py fix(model-switch): override stale api_mode with host-mandated mode on OpenAI-direct switch 2026-07-17 15:47:08 -07:00
test_model_switch_opencode_anthropic.py
test_model_switch_persist_default.py fix(model): default /model switches to session scope everywhere 2026-07-20 02:22:22 -07:00
test_model_switch_variant_tags.py
test_model_validation.py fix(tests): patch catalog urlopen wrapper in gemini probe tests (#64318) 2026-07-14 03:11:19 -07:00
test_models.py fix(models): add Claude Sonnet 5 to curated model lists 2026-07-20 02:25:44 -07:00
test_models_dev_preferred_merge.py fix(models): complete kimi-k3 rollout across Kimi-direct catalog surfaces 2026-07-20 08:47:55 -07:00
test_non_ascii_credential.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_nous_account.py feat(billing): /credits command — balance + portal top-up handoff (#44776) 2026-06-12 08:51:10 +00:00
test_nous_auth_keepalive.py fix Nous auth refresh for idle agents 2026-06-21 22:43:48 -07:00
test_nous_auth_status_cache.py fix(desktop): route global remote profile REST calls (#47011) 2026-06-15 23:24:55 -05:00
test_nous_billing_request.py Terminal-billing client hardening: shared wire types, wire-layer tests, dead RPC removal (#61067) 2026-07-18 07:05:58 -07:00
test_nous_hermes_non_agentic.py
test_nous_inference_url_validation.py test(auth): mock new source-aware Nous state read boundary 2026-07-01 05:06:00 -07:00
test_nous_portal_staging_allowlist.py fix(auth): make HERMES_PORTAL_BASE_URL/NOUS_PORTAL_BASE_URL bypass the Portal host allowlist (#56864) 2026-07-02 06:52:46 +00:00
test_nous_session_validity.py feat(status): expose nous_session_valid on /api/status for hosted-agent self-heal 2026-07-07 00:53:56 -07:00
test_nous_subscription.py fix(whatsapp-cloud): review follow-ups for #43921 2026-06-11 07:51:01 -07:00
test_ollama_cloud_auth.py fix(completion): remove /model <arg> autocomplete from CLI/TUI (#39727) 2026-06-05 06:43:51 -07:00
test_ollama_cloud_provider.py test: remove low-value model-catalog mirror tests 2026-05-29 23:45:05 -07:00
test_oneshot_usage_file.py feat(oneshot): add --usage-file JSON usage report to hermes -z (#59615) 2026-07-06 11:10:51 -07:00
test_openai_codex_model_validation_fallback.py
test_openai_picker_curated.py fix(model-picker): OpenAI shows curated models; OpenRouter no longer phantom-shows (#37404) 2026-06-02 06:31:37 -07:00
test_opencode_go_flat_namespace.py
test_opencode_go_in_model_list.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_opencode_go_validation_fallback.py
test_opencode_zen_model_limit.py fix(models): live-first merge + update opencode-zen catalog + uncap aggregator picker 2026-06-27 21:23:25 -07:00
test_overlay_slug_resolution.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_path_completion.py test(cli): URL tokens must not trigger filesystem path completion 2026-06-17 12:33:56 +05:30
test_pet_toggle.py feat(pets): CLI pet pane + /pet command 2026-06-20 14:18:33 -05:00
test_picker_prewarm.py perf(/model): prewarm picker provider-models cache in background (#39847) 2026-06-05 06:55:09 -07:00
test_pin_kanban_board_env.py
test_pip_install_detection.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_placeholder_usage.py test(config): update placeholder usage assertion for --force flag 2026-07-20 05:38:59 -07:00
test_plugin_auxiliary_tasks.py feat(plugins): add register_auxiliary_task() to PluginContext API 2026-05-23 17:49:47 -07:00
test_plugin_cli_registration.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_plugin_runtime_disable_gate.py fix(dashboard): run plugin gate after auth + enable example fixture 2026-07-01 04:05:15 -07:00
test_plugin_scanner_recursion.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_plugins.py feat(plugins): pass approve rule keys to approval gate 2026-07-07 15:14:30 -07:00
test_plugins_cmd.py fix(plugins): normalize browser-pasted GitHub repo URLs (#33539) 2026-06-13 13:23:59 -07:00
test_plugins_cmd_category_discovery.py fix(plugins): discover nested category plugins in 'plugins list' (issue #41066) 2026-06-07 08:02:55 +00:00
test_plugins_cmd_enable_disable_nested.py fix(web): correct 'disabled plugin' diagnosis for web backends (#59573) 2026-07-06 04:38:17 -07:00
test_plugins_cmd_list.py feat(plugins): surface entry-point plugins in hermes plugins list 2026-07-06 11:20:47 -07:00
test_plugins_transcription_registration.py feat(stt): add register_transcription_provider() plugin hook 2026-05-25 01:41:19 -07:00
test_plugins_tts_registration.py feat(tts): add register_tts_provider() plugin hook (closes #30398) 2026-05-24 18:04:54 -07:00
test_post_setup_gating.py
test_profile_describer.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
test_profile_distribution.py fix(dist): stop USER_OWNED_EXCLUDE from filtering nested directories 2026-06-07 21:50:57 -07:00
test_profile_export_credentials.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_profile_install_env_encoding.py fix(profile): read .env as utf-8-sig in the distribution-install preview 2026-07-24 17:10:39 -07:00
test_profiles.py fix(profiles): allowlist default-export paths + preserve symlinks (#58394) 2026-07-05 00:48:50 -07:00
test_profiles_s6_hooks.py fix(s6): register profile gateways without auto-starting (#46266) 2026-06-15 11:43:23 +10:00
test_project_plugin_rce_bypass.py revert(plugins): restore user dashboard plugin backend API auto-import (#43719) (#51950) 2026-06-24 07:46:54 -07:00
test_projects_cli.py feat(projects): add per-profile project store 2026-06-25 16:40:26 -05:00
test_projects_db.py feat(desktop): configure repository discovery (supersedes #67630) (#68642) 2026-07-21 10:09:31 -04:00
test_prompt_api_key.py fix(cli): show masked feedback for secret prompts 2026-05-25 01:20:33 -07:00
test_prompt_compose_command.py feat(cli): /prompt — compose your next prompt in $EDITOR (#50509) 2026-06-21 20:21:33 -07:00
test_prompt_size.py test(prompt-size): cover resolved-toolset parity and blank-slate minimal count 2026-07-05 19:13:20 -07:00
test_provider_catalog.py feat(providers): remove google-gemini-cli + google-antigravity OAuth providers (#50492) 2026-06-21 19:53:27 -07:00
test_provider_config_validation.py fix(config): stop provider-key warn-storm that stalls Windows logging 2026-07-05 11:44:53 +05:30
test_provider_groups.py feat(model-picker): show short description on grouped provider rows 2026-05-31 15:02:26 -07:00
test_provider_live_curated_merge.py fix(models): scope live-first picker merge to opencode aggregators only 2026-06-27 21:23:25 -07:00
test_provider_parity.py feat(moa): expose MoA presets as selectable virtual models (#46081) 2026-06-25 13:52:06 -07:00
test_provider_precedence.py fix(auth): explicit provider intent beats stale OAuth active_provider (#29285) 2026-06-27 19:49:02 -07:00
test_provider_section3_grouping.py fix: section-3 grouping follow-ups for salvaged PR #36998 2026-07-20 00:41:21 -07:00
test_proxy.py refactor(auth): remove vestigial Nous min_key_ttl/inference_auth_mode params 2026-05-29 02:24:48 -07:00
test_psutil_android_extract.py revert(windows): roll back terminal-popup PRs #53791 #53810 #53829 (#53853) 2026-06-27 15:59:00 -07:00
test_pty_bridge.py fix(pty-bridge): terminate PTY process groups on teardown 2026-06-08 07:03:12 -07:00
test_quarantine_forensic_logging.py test: drop worktree-path sanity guard that fails in CI 2026-07-07 00:53:48 -07:00
test_reasoning_effort_menu.py fix(cli): migrate setup model/provider pickers off simple_term_menu to curses 2026-05-31 03:19:37 -07:00
test_reasoning_full_command.py feat(cli): make reasoning effort session-scoped 2026-07-20 02:22:22 -07:00
test_redact_config_bridge.py
test_regression_16767.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_relaunch.py
test_remote_spending_gate_contract.py feat(tui+cli): change your Nous plan from the terminal (/subscription, /topup, terminal-billing UX) (#51639) 2026-07-18 14:30:24 +05:30
test_resolve_last_session.py
test_resolve_provider_openrouter_pool.py fix(auth): auto-detect OpenRouter credential from the pool, not just env (#42263) 2026-06-08 10:01:47 -07:00
test_run_with_idle_timeout.py fix(update): stream + idle-kill npm run build so a stalled webui-build can't soft-brick the install (#33803) 2026-05-28 03:34:47 -07:00
test_runtime_provider_resolution.py fix: preserve named custom provider vision overrides 2026-07-23 17:57:33 +05:30
test_safe_mode.py fix(cli): safe mode also skips shell-hook registration 2026-07-07 02:32:32 -07:00
test_sale_pricing.py Nous portal model pricing (#69579) 2026-07-22 16:47:06 -04:00
test_secret_prompt.py feat(memory): improve OpenViking setup UX 2026-06-17 01:04:26 +08:00
test_secrets_bitwarden_non_tty.py fix(secrets): fail early with clear error when bitwarden setup runs without TTY (#40571) 2026-06-06 18:36:40 -07:00
test_secrets_token_rotation.py feat(secrets): one-command token rotation + actionable startup errors for all secret sources (#68605) 2026-07-21 06:41:04 -07:00
test_security_advisories.py
test_security_audit.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_security_audit_startup.py feat(security): startup security posture audit (warn-on-load) 2026-06-21 19:05:27 -07:00
test_send_cmd.py fix(send): helpful error when --file gets a binary; document MEDIA: attachments (#45116) 2026-06-12 11:48:06 -07:00
test_serve_command.py feat(cli): make hermes serve a real headless backend 2026-06-30 17:58:52 -05:00
test_service_manager.py fix(s6): dot-prefix gateway staging dir so svscan ignores it mid-build (#54834) 2026-06-29 21:33:00 +10:00
test_session_browse.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_session_export.py fix(session-export): escape html tool call names 2026-07-09 19:54:02 -07:00
test_session_export_html.py fix(export): escape tool-call name in HTML session export 2026-07-09 16:46:07 -07:00
test_session_export_html_escape.py fix(cli): normalize role into a single CSS token for the message class 2026-07-09 19:54:02 -07:00
test_session_export_md.py feat(sessions): export sessions to markdown 2026-07-07 12:36:41 -07:00
test_session_filters.py feat(sessions): full filter surface for prune + bulk archive subcommand (#59327) 2026-07-05 22:04:52 -07:00
test_session_handoff.py
test_session_listing.py feat(gateway): add /sessions search <query> (#57685) 2026-07-03 13:44:00 -07:00
test_session_recap.py fix(cli): sanitize terminal escapes when replaying stored history (/resume recap, /status recap) 2026-07-17 04:53:38 -07:00
test_sessions_delete.py feat(sessions): any prune filter matches all ages; preview shows age span (#59415) 2026-07-05 23:01:10 -07:00
test_sessions_export_md_cli.py feat(sessions): trace export + HF upload via 'sessions export --format trace' (#60507) 2026-07-07 15:12:49 -07:00
test_set_config_value.py fix(themes): re-affirming the active skin repaints surfaces that missed the activation 2026-07-22 13:29:56 -05:00
test_setup.py test(cli): cover non-interactive prompt_yes_no fallback 2026-06-24 17:56:30 +05:30
test_setup_agent_settings.py
test_setup_blank_slate.py test(setup): blank-slate disabled list must not overlap kept tools 2026-07-05 14:51:49 -07:00
test_setup_hermes_script.py
test_setup_irc.py test: deflake CI and dev-machine flaky tests in bulk (11 tests, 10 files) (#61816) 2026-07-09 20:03:11 -07:00
test_setup_matrix_e2ee.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_setup_menu_curses_migration.py Nous portal model pricing (#69579) 2026-07-22 16:47:06 -04:00
test_setup_model_provider.py fix(cli): require Chromium for local browser readiness in setup/status surfaces 2026-06-05 04:06:17 -07:00
test_setup_noninteractive.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_setup_ollama_cloud_force_refresh.py refactor(cli): extract 18 model-flow wizard functions into model_setup_flows (god-file Phase 2) 2026-06-08 09:42:44 -07:00
test_setup_openclaw_migration.py fix(tests): catch up 25 stale tests after recent merges (#28626) 2026-05-19 01:28:32 -07:00
test_setup_prompt_menus.py fix(cli): show masked feedback for secret prompts 2026-05-25 01:20:33 -07:00
test_setup_reconfigure.py feat(setup): thin out setup — Quick Setup via Nous Portal + Full Setup defaults (#35723) 2026-05-31 09:13:06 -07:00
test_signal_handler_kanban_worker.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
test_skills_config.py fix(cli): normalize malformed skills config in get_disabled_skills (#61797) 2026-07-09 19:57:54 -07:00
test_skills_hub.py feat(skills): show live per-source progress while browsing (#43398) 2026-06-10 01:02:40 -07:00
test_skills_install_flags.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skills_skip_confirm.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skills_subparser.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skin_cmd.py feat(themes): hermes skin set — deterministic one-color tweak, bg untouched 2026-07-21 21:00:43 -05:00
test_skin_engine.py feat(ui-tui): background-aware theme adaptation + paired palettes + /theme pin 2026-07-21 16:36:57 -05:00
test_skin_palettes.py fix(ui-tui): light mode renders the vivid palette RAW, not WCAG-darkened 2026-07-21 16:36:57 -05:00
test_slack_cli.py feat(slack): support long app descriptions in the manifest generator 2026-07-23 12:01:24 -07:00
test_spotify_auth.py fix(spotify): quarantine dead tokens on terminal refresh failure 2026-06-20 23:23:47 -07:00
test_sqlite_runtime.py test(runtime): cover managed SQLite cutover (E-949) 2026-07-24 16:00:03 -07:00
test_ssh_ownership_endpoint.py feat(serve): add secure Desktop SSH bootstrap contract 2026-07-16 14:43:14 +02:00
test_ssh_session_token_parser.py feat(serve): add Windows remote backend runtime for Desktop SSH 2026-07-17 18:23:22 +02:00
test_startup_plugin_gating.py
test_state_db_guard.py fix(update): correct integrity-guard bugs from #70553 salvage + tests 2026-07-24 15:59:32 -07:00
test_status.py fix(cli): redact status API keys with --all 2026-06-30 04:38:43 -07:00
test_status_model_provider.py Merge commit '6110aed9b' into feat/whatsapp-cloud-api 2026-06-10 21:39:22 -04:00
test_status_provider_label.py fix(status): label provider as custom when config.yaml model.base_url is set 2026-07-02 04:59:02 -07:00
test_subcommands_batch.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_subcommands_followup.py refactor(cli): promote 9 closure handlers to top-level + extract their parsers (god-file Phase 2 follow-up) 2026-06-07 22:56:23 -07:00
test_subcommands_profile_gateway.py fix(gateway): preserve external supervisor ownership 2026-07-16 05:08:56 -07:00
test_subparser_routing_fallback.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_subprocess_timeouts.py
test_subscription_cli.py feat(cli): plan catalog on Free + plan= deep link + top-up/auto-refill copy split (#68689) 2026-07-22 08:11:09 +05:30
test_suppress_eio_on_interrupt.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_system_stats_platform.py fix(dashboard): show Windows 11 in host panel (#44511) 2026-06-11 19:06:29 -04:00
test_systemd_optional_directives.py fix(gateway): stop systemd retries on fatal config 2026-07-16 01:19:29 -07:00
test_systemd_watchdog_unit.py fix(gateway): recover Discord websocket and event-loop stalls 2026-07-18 20:01:55 +05:30
test_teams_pipeline_plugin_cli.py
test_telegram_managed_bot.py fix(desktop): keep profile homes out of bootstrap (#46073) 2026-06-14 03:08:52 -07:00
test_tencent_tokenhub_provider.py feat(models): swap curated Tencent Hy3 Preview for GA tencent/hy3, drop owl-alpha (#60943) 2026-07-08 07:09:08 -07:00
test_terminal_menu_fallbacks.py fix(model): require confirmation for expensive model selections 2026-06-10 00:24:06 -07:00
test_timeouts.py fix(codex): size and propagate timeouts for Responses-API requests; lower stale defaults 2026-05-25 01:47:55 -07:00
test_timestamps_command.py feat(cli): /timestamps command + timestamps in /history (#50506) 2026-06-21 22:44:25 -07:00
test_tips.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_tool_token_estimation.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_tools_config.py fix(computer_use): probe resolved cua-driver path in post_setup 2026-07-23 00:44:27 -05:00
test_tools_disable_enable.py fix(tools): don't report platform-restricted toolsets as enabled 2026-07-16 01:17:11 -07:00
test_toolset_validation.py fix(config): surface invalid platform_toolsets instead of silently dropping tools (#38798) 2026-06-26 14:07:43 +05:30
test_tts_picker.py feat(tts): add register_tts_provider() plugin hook (closes #30398) 2026-05-24 18:04:54 -07:00
test_tui_bundled.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_tui_heap_sizing.py fix(tui): cgroup-aware V8 heap cap so memory-limited containers stop dying silently (#38541) 2026-06-03 16:40:28 -07:00
test_tui_mouse_residue_suppression.py fix(tui): suppress mouse-residue leaks during Python launcher startup (#31213) 2026-05-27 22:03:45 -05:00
test_tui_npm_install.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_tui_resume_flow.py test: use shutil.copy2 instead of os.link for cross-device tmp fixtures 2026-07-20 09:21:08 -07:00
test_uninstall_dry_run.py feat: add uninstall dry-run mode 2026-07-07 05:12:24 -07:00
test_uninstall_node_symlinks.py fix(installer): symlink bundled node/npm into command bin dir for FHS root installs 2026-06-04 02:31:49 -07:00
test_update_autostash.py test: accept kwargs in managed_uv fixture fakes 2026-07-24 16:00:03 -07:00
test_update_check.py rip out brew + pip/PyPI wheel support (#68217) 2026-07-22 16:51:01 -04:00
test_update_concurrent_quarantine.py fix(gateway): cold-start installed Windows gateway after update when none was running (#50804) 2026-06-22 06:02:31 -07:00
test_update_config_clears_custom_fields.py fix(model): clear stale endpoint credentials across switches 2026-06-19 19:58:26 -07:00
test_update_fleet_restart_timeout.py test(update): cover fleet restart timeout isolation (#68523) 2026-07-22 10:35:50 +05:30
test_update_hangup_protection.py fix(update): route loud build/installer output to update.log instead of the terminal (#53616) 2026-06-27 11:43:01 -07:00
test_update_interrupted_recovery.py fix(update): split core vs lazy markers; probes cannot false-clear 2026-07-23 07:33:16 -07:00
test_update_modified_notice.py refactor(skills): dedupe file-listing, share user-modified predicate, trim diff contract 2026-06-18 12:42:58 +05:30
test_update_post_pull_syntax_guard.py fix(install): guard Windows desktop installs against broken web_server 2026-07-05 19:35:30 -07:00
test_update_stale_dashboard.py fix(cli): restart managed dashboard service after update (#39166) 2026-07-22 09:01:19 -04:00
test_update_venv_health.py fix(update): harden #57659 follow-ups — task restore on failure, --force-venv split, trampoline detection, managed-install health (#57680) 2026-07-03 04:08:37 -07:00
test_update_yes_flag.py
test_update_zip_atomic_replace.py fix(cli): make ZIP-update directory replace atomic so it can't delete ui-tui 2026-06-21 13:10:22 -07:00
test_update_zip_symlink_reject.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_upstage_provider.py fix(upstage): collapse unknown future efforts to high; behavior-contract tests 2026-07-15 00:09:24 +05:30
test_urllib_security.py fix(security): order sanitizer after installed hooks 2026-07-11 12:28:55 +05:30
test_user_providers_model_switch.py feat(desktop): custom endpoint settings (supersedes #42745) (#67759) 2026-07-19 19:59:46 -04:00
test_verify_console_scripts.py fix(windows): verify launchers after primary install 2026-06-28 17:02:05 -05:00
test_verify_core_dependencies.py fix(cli): quarantine running hermes.exe during update dep-verification repair on Windows (#40409) 2026-06-06 12:50:58 -05:00
test_vertex_model_picker.py fix(vertex): surface vertex in the /model picker — credential gate + curated model list 2026-07-23 16:55:41 -07:00
test_vertex_provider.py fix(vertex,moa): register vertex in PROVIDER_REGISTRY and HERMES_OVERLAYS 2026-07-23 16:55:41 -07:00
test_video_gen_picker.py
test_voice_wrapper.py
test_web_oauth_dispatch.py fix(dashboard): support mobile OAuth login 2026-07-09 12:21:16 +05:30
test_web_server.py test(web): pin per-profile gateway state scoping on /api/status 2026-07-24 16:02:39 -07:00
test_web_server_boot_handshake.py test(web_server): add integration tests for desktop boot handshake fix 2026-06-21 12:29:18 -07:00
test_web_server_console_ws.py refactor(console): remove hosted-context command blocking from Hermes Console (#66144) 2026-07-17 04:33:34 -07:00
test_web_server_cron_profiles.py fix(cron): resolve provider with the job's effective model; default dashboard cron creates to the backend's own profile 2026-07-19 09:57:21 -07:00
test_web_server_files.py fix(secrets): harden encrypted Bitwarden cache 2026-07-22 04:40:07 -07:00
test_web_server_fs.py fix(desktop): scope remote workspace defaults 2026-06-11 09:41:35 -07:00
test_web_server_gateway_topology.py feat(dashboard): expose profile names + gateway_mode on gated /api/status (#60585) 2026-07-08 00:20:13 +00:00
test_web_server_git.py test(web_git): assert default branch invariant, not hardcoded main 2026-06-28 16:29:52 -05:00
test_web_server_host_header.py fix(dashboard): validate WebSocket Host and Origin 2026-05-24 15:00:44 -07:00
test_web_server_messaging_profiles.py test: valid-shape Telegram token in port-binding guard fixture 2026-07-16 07:17:55 -07:00
test_web_server_oauth_write.py fix(web-server): close OAuth token TOCTOU by writing 0o600 atomically 2026-07-07 13:54:07 -07:00
test_web_server_profile_unification.py test: accept the new profile-scoped kwargs in status fakes 2026-07-24 16:02:39 -07:00
test_web_server_pty_import.py feat(windows): enable dashboard /chat tab via ConPTY (win_pty_bridge) + tests (#42251) 2026-06-08 11:32:43 -07:00
test_web_server_pty_reconnect.py fix(dashboard): reap PTY bridge on child EOF, not only in writer finally (#54190) 2026-06-28 03:58:18 -07:00
test_web_server_session_search.py perf(desktop): make session-id search SQL-bounded, not O(n) 2026-06-04 07:49:34 -07:00
test_web_server_skill_editor.py feat(dashboard): SKILL.md editor on Skills page + attach-skill selector in cron modals (#44231) 2026-06-11 06:10:27 -07:00
test_web_server_skills_profiles.py fix(desktop,gateway,mcp): post-merge — CI contract, review corrections, hub search 2026-07-03 15:22:43 -05:00
test_web_server_speak_stream.py fix(voice): speak the whole turn, not just its first bubble; idle-flush held narration 2026-07-23 01:53:37 -05:00
test_web_ui_build.py test(cli): cover the web UI build flock contention paths 2026-07-21 12:42:07 -07:00
test_webhook_cli.py fix(webhook): make dual-stack bind exclusive 2026-07-16 12:36:51 +05:30
test_whatsapp_cloud_setup.py feat(whatsapp): add WhatsApp Business Cloud API adapter 2026-05-23 01:07:01 -04:00
test_whatsapp_onboarding.py Add WhatsApp dashboard pairing flow 2026-07-07 17:45:51 -07:00
test_whatsapp_setup_ordering.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_win_pty_bridge.py feat(windows): enable dashboard /chat tab via ConPTY (win_pty_bridge) + tests (#42251) 2026-06-08 11:32:43 -07:00
test_windows_native_docs.py docs(windows): fix Get-Command PATH guidance to venv\Scripts\hermes.exe (#40613) 2026-06-07 18:28:23 -07:00
test_xai_curated_models.py chore: add AUTHOR_MAP entry for #47904 salvage 2026-06-17 09:49:46 -07:00
test_xai_model_flow.py feat(auth): make xAI Grok OAuth device-code-only, drop loopback login 2026-07-02 13:17:41 -07:00
test_xai_oauth_profile_auth.py fix(auth): resolve xAI OAuth credentials across profiles 2026-06-15 17:03:35 +05:30
test_xai_oauth_refresh.py feat(auth): make xAI Grok OAuth device-code-only, drop loopback login 2026-07-02 13:17:41 -07:00
test_xai_oauth_writethrough.py fix(auth): write rotated xAI OAuth tokens back to global root (#43589) 2026-06-15 17:08:19 +05:30
test_xai_provider_labels.py fix(model): include Premium+ in xAI OAuth label 2026-05-24 18:12:16 -07:00
test_xai_retirement.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_xiaomi_provider.py fix(secrets): scope BWS-injected provider keys 2026-07-22 04:39:17 -07:00
test_yolo_startup_order.py fix(cli): set HERMES_YOLO_MODE before plugin discovery at startup 2026-07-09 16:58:37 -07:00