hermes-agent/tests/hermes_cli
Ben Barclay 7857d8737c feat(dashboard-auth): RFC 8252 native desktop sign-in (system browser + PKCE, no webview/cookies)
The Desktop app can now sign in to a gated gateway using the user's SYSTEM
browser and OAuth 2.0 for Native Apps (RFC 8252) instead of an embedded
Electron BrowserWindow, and authenticates with bearer tokens it holds itself
instead of relying on HttpOnly browser session cookies.

Why brokered: the upstream IDP (Nous Portal) binds client_id to the gateway
instance and only permits redirect_uris on the gateway's own origin, so a
desktop loopback redirect can't be a direct Portal client. The gateway
therefore acts as the authorization server TO the desktop and an OAuth client
TO the Portal, reusing the existing PKCE start_login/complete_login provider
path unchanged.

Server (Ben's dashboard-auth lane):
- native_flow.py: in-memory broker — binds the desktop's PKCE challenge to a
  completed Session, mints a single-use, short-TTL, PKCE-verified gateway
  authorization code. Constant-time compare, single-use (consumed before the
  PKCE check so a wrong verifier can't be retried), capacity-bounded.
- routes.py: GET /auth/native/authorize (starts the brokered PKCE login,
  loopback-only redirect_uri, S256-only), POST /auth/native/token (loopback
  code + verifier -> tokens in the JSON body, never Set-Cookie), POST
  /auth/native/refresh (desktop-held RT rotation). /auth/callback branches to
  mint a loopback code + 302 to 127.0.0.1 when a broker_state rides the PKCE
  cookie; the cookie/SPA path is untouched.
- middleware.py: the gate accepts Authorization: Bearer <access_token>,
  verified via the same verify_session provider stack (no cookie set/read),
  with the same "provider unreachable -> 503, not logout" semantics.
- web_server.py /api/status: advertise auth_flows (["cookie","native_pkce"])
  so clients can detect the capability; native_pkce only when a brokerable
  OAuth provider is registered.

Desktop (Ben's lane):
- native-oauth.ts: pure PKCE/capability/URL/callback/token helpers.
- native-oauth-login.ts: loopback-listener orchestration (system browser via
  openExternal, ephemeral 127.0.0.1 listener, state/PKCE verification), all
  I/O injected for testability.
- main.ts: capability-gated oauth-login IPC — native flow when advertised,
  automatic fallback to the existing embedded-webview cookie flow otherwise;
  tokens stored encrypted (safeStorage/OS keychain), REST + ws-ticket
  authenticated by bearer, transparent refresh, logout clears both shapes.

Tests: 18 server pytest (broker unit + full authorize->callback->token E2E +
cookieless bearer auth of a gated route + ws-ticket mint + capability
advertisement + refresh); desktop node --test/vitest for both pure modules
(PKCE, capability detection, callback CSRF, loopback round trip, timeout,
browser-open failure). Electron project typechecks clean.

Docs: website/docs/guides/desktop-native-signin.md.
2026-07-22 06:50:50 -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 test(cli): cover picker-path persist_global=True in #25106 regression tests 2026-07-17 15:47:08 -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
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_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(auth): key reentrancy by auth store path 2026-07-16 06:14:56 -07:00
test_auth_provider_gate.py fix(auth): detect configured providers absent from registry (#66017) 2026-07-16 22:56:45 -04: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_pip_update.py
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_chat_skills_flag.py
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_model_once.py feat: add /model --once one-turn model override (#29914) 2026-07-18 14:01:56 -07:00
test_cli_output.py
test_cmd_update.py fix(desktop): force npm --include=dev so self-update rebuild can't be broken by NODE_ENV=production (#38416) 2026-07-16 15:45:07 +00:00
test_cmd_update_docker.py fix(ci): remove pytest-timeout, use per-file timeout only 2026-06-12 13:42:42 -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 feat(reasoning): add max and ultra effort levels (#62650) 2026-07-12 00:26:49 -07:00
test_completion.py test(cli): strengthen zsh completion regression coverage 2026-05-13 09:34:15 -07:00
test_config.py fix(providers): align custom route scoping 2026-07-22 11:19:37 +05:30
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 test(config): use schema-known key in config-set confirm-flow test 2026-07-20 05:38:59 -07:00
test_container_aware_cli.py fix(ci): stabilize main test suite regressions (#17660) 2026-04-29 23:18:55 -07:00
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 fix(providers): scope route-owned runtime settings 2026-07-22 11:19:37 +05:30
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 fix(copilot): require successful exchange when walking credential_pool catalog tokens 2026-04-28 01:18:09 -07:00
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_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 fix(curator): make manual runs synchronous 2026-05-07 05:27:47 -07:00
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 feat(dashboard): auto-initiate portal SSO redirect on unauthenticated load 2026-06-29 04:25:18 -07:00
test_dashboard_auth_native_flow.py feat(dashboard-auth): RFC 8252 native desktop sign-in (system browser + PKCE, no webview/cookies) 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(status): make gateway_updated_at a stable RFC3339-or-null contract (#68657) 2026-07-21 13:12:41 -07: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 Merge upstream/main and address Copilot review feedback 2026-04-30 06:43:22 -04:00
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): attempt one recovery build when --skip-build finds no dist 2026-07-21 12:41:41 -07: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_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(dingtalk): cover QR device-flow auth + OpenClaw branding disclosure 2026-04-17 05:08:07 -07:00
test_discord_skill_clamp_warning.py test: add tests for cmd_key preservation through name clamping 2026-05-03 03:25:45 -07:00
test_doctor.py feat(config): warn on unknown top-level keys + report deprecated keys/env in doctor 2026-07-19 01:09:04 -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 fix(doctor): skip pluggable provider profiles when a dedicated check exists (#22346) 2026-05-09 13:36:33 -07:00
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_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(cli): warn once per path for UTF-32 .env refuse-to-mangle 2026-07-18 19:01:10 -04:00
test_env_sanitize_on_load.py
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): recover Discord websocket and event-loop stalls 2026-07-18 20:01:55 +05:30
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 revert(windows): roll back terminal-popup PRs #53791 #53810 #53829 (#53853) 2026-06-27 15:59:00 -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 feat(gemini): block free-tier keys at setup + surface guidance on 429 (#15100) 2026-04-24 04:46:17 -07:00
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 Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05: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
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
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 feat(kanban): add specify — auxiliary LLM fleshes out triage tasks (#21435) 2026-05-07 13:04:41 -07:00
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_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_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
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(update/windows): don't return _UvResult on Windows (subprocess argv crash) (#39820) 2026-06-05 07:54:08 -05: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 feat(memory): improve OpenViking setup UX 2026-06-17 01:04:26 +08:00
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_migrate_xai.py fix(config): guard xai migration writer + drop gratuitous annotation 2026-07-05 23:00:34 +05:30
test_moa_config.py fix(moa): surface stale presets without retries 2026-07-17 13:49:12 -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 fix(model): persist /model switch by default across sessions 2026-06-19 07:07:06 -07:00
test_model_picker_viewport.py refactor(cli): align model picker viewport with PR #11260 vocabulary 2026-04-17 06:33:21 -07:00
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 fix: recompute Copilot api_mode after model switch 2026-04-16 01:16:14 -07:00
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 fix(opencode): derive api_mode from target model, not stale config default (#15106) 2026-04-24 04:58:46 -07:00
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 fix(models): preserve OpenRouter variant tags (:free, :extended, :fast) during model switch (#6383) 2026-04-08 19:58:16 -07:00
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 fix(cli): narrow Nous Hermes non-agentic warning to actual hermes-3/-4 models 2026-04-13 04:33:52 -07:00
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 fix(codex-spark): defensive 128k entry in DEFAULT_CONTEXT_LENGTHS + clarify validation test docstring 2026-05-09 23:17:25 -07:00
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
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(kanban): isolate HERMES_KANBAN_BOARD writes in pin-env tests 2026-05-05 04:37:47 -07:00
test_pip_install_detection.py feat(install): warn pip/Homebrew installs are unsupported (CLI, TUI, desktop) (#57225) 2026-07-07 21:13:19 -07: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
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
test_plugins_tts_registration.py
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_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
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 fix(windows): prefer npm.cmd over npm.ps1, skip .py argv0 in relaunch 2026-05-08 14:27:40 -07:00
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(providers): align custom route scoping 2026-07-22 11:19:37 +05:30
test_safe_mode.py fix(cli): safe mode also skips shell-hook registration 2026-07-07 02:32:32 -07: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(config): warn-after-write for unrecognized keys instead of refusing 2026-07-20 05:38:59 -07: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 fix(gateway): shutdown + restart hygiene (drain timeout, false-fatal, success log) (#18761) 2026-05-02 02:08:06 -07:00
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 feat(cli): ranked fuzzy search in the curses model picker 2026-06-01 16:58:58 -07: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
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 fix(slack): complete agent view workspace routing 2026-07-14 13:58:36 -07:00
test_spotify_auth.py fix(spotify): quarantine dead tokens on terminal refresh failure 2026-06-20 23:23:47 -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 perf(cli): skip eager plugin discovery on known built-in subcommands (#22120) 2026-05-08 16:07:23 -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 feat(config): add get and unset commands 2026-07-16 05:44:43 -07: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 fix(cli): add missing subprocess.run() timeouts in doctor and status (#4009) 2026-03-30 11:17:15 -07:00
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(desktop): Windows browser-setup journey — console flash, idempotent setup, Nous Portal activation (#67473) 2026-07-19 05:22:10 -07: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
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 fix(cli): try bundled TUI before requiring ui-tui workspace (#67116) 2026-07-18 17:17:25 -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 fix(cli,deps): clear esbuild audit loop 2026-06-15 06:18:27 -07:00
test_update_check.py fix(desktop): show remote backend updates without counts 2026-06-25 21:39:29 -06: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 test(cli): cover Windows self-lock recovery guard + cmd-quote its hint 2026-06-28 02:40:37 -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: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
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_uv_tool_update.py fix(install): scrap rebuild venv 2026-06-04 23:20:29 -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_provider.py feat(vertex): add Google Vertex AI provider for Gemini (OAuth2) 2026-07-01 05:25:33 -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 fix(status): make gateway_updated_at a stable RFC3339-or-null contract (#68657) 2026-07-21 13:12:41 -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 fix(dashboard): add HTTP MCP authentication (#65146) 2026-07-16 00:02:09 +05:30
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_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
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
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