hermes-agent/tests/gateway
Wesley Simplicio 246c676c2b fix(gateway): degrade gracefully when all platform adapters are missing
When connected_count == 0 AND enabled_platform_count > 0, the gateway
treated 'all adapters returned None' identically to 'all adapters
failed to connect' — both as fatal startup errors. The 'returned None'
case happens when imports fail silently or when adapters are present
in config but their dependencies aren't installed (e.g. discord.py
missing). Cron jobs and other gateway-runtime work would unnecessarily
fail to start.

Split: only return False when startup_retryable_errors is non-empty
(real connection attempt failed). When the list is empty AND enabled
> 0, log a warning and continue running, matching the 'no platforms
enabled' cron path.

Salvage of #22642's gateway slice. Drops the bundled run_agent.py
memory-nudge counter hydration block (issue #22357 territory) which
wasn't mentioned in the PR description.

Closes #5196.
2026-05-09 17:53:46 -07:00
..
__init__.py
_plugin_adapter_loader.py
conftest.py
feishu_helpers.py
restart_test_helpers.py fix(gateway): cap cached session sources with LRU eviction 2026-05-07 05:16:38 -07:00
test_7100_transient_failure_transcript.py
test_agent_cache.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_allowed_channels_widening.py feat(gateway): add Telegram guest mention mode 2026-05-09 11:54:04 -07:00
test_allowlist_startup_check.py
test_api_server.py fix(api-server): emit length/error finish_reason for truncation/failure (#22775) 2026-05-09 12:48:08 -07:00
test_api_server_bind_guard.py
test_api_server_jobs.py
test_api_server_multimodal.py
test_api_server_normalize.py
test_api_server_runs.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_api_server_toolset.py
test_approve_deny_commands.py
test_auth_fallback.py
test_auto_continue.py
test_background_command.py fix(telegram): preserve DM topic routing via reply fallback 2026-05-09 01:39:37 -07:00
test_background_process_notifications.py fix(gateway): preserve thread routing from cached live session sources 2026-05-07 05:16:38 -07:00
test_base_topic_sessions.py feat(gateway): add Telegram notification mode to suppress intermediate push notifications 2026-05-09 13:38:25 -07:00
test_bluebubbles.py
test_busy_session_ack.py
test_busy_session_auth_bypass.py
test_cancel_background_drain.py
test_channel_directory.py
test_clean_shutdown_marker.py
test_command_bypass_active_session.py
test_complete_path_at_filter.py
test_compress_command.py
test_compress_focus.py
test_compress_plugin_engine.py
test_config.py feat(gateway): per-platform gateway_restart_notification flag 2026-05-06 13:39:43 -07:00
test_config_cwd_bridge.py
test_config_env_bridge_authority.py
test_debug_command.py
test_delivery.py
test_destructive_slash_confirm.py feat: confirm prompt for destructive slash commands (#4069) (#22687) 2026-05-09 11:04:46 -07:00
test_dingtalk.py fix(dingtalk): align override signatures with base + guard Optional[error] in tests 2026-05-09 11:11:10 -07:00
test_discord_allowed_channels.py
test_discord_allowed_mentions.py
test_discord_attachment_download.py
test_discord_bot_auth_bypass.py
test_discord_bot_filter.py
test_discord_channel_controls.py
test_discord_channel_prompts.py
test_discord_channel_skills.py
test_discord_component_auth.py
test_discord_connect.py fix(discord): narrow rate-limit catch and move sync state under gateway/ 2026-05-06 18:12:35 -07:00
test_discord_document_handling.py
test_discord_free_response.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_discord_imports.py
test_discord_media_metadata.py
test_discord_model_picker.py
test_discord_opus.py
test_discord_race_polish.py
test_discord_reactions.py
test_discord_reply_mode.py fix(gateway): load reply_to_mode from config.yaml for Discord and Telegram 2026-05-05 04:58:23 -07:00
test_discord_roles_dm_scope.py fix(discord): route DM role-auth opt-in through config.yaml (not env var) 2026-05-07 05:51:56 -07:00
test_discord_send.py
test_discord_slash_auth.py fix(discord): extend role-scope fix to slash surface + fixture update 2026-05-07 05:51:56 -07:00
test_discord_slash_commands.py
test_discord_system_messages.py
test_discord_thread_persistence.py fix(gateway): ensure deterministic thread eviction in helpers 2026-05-05 10:13:55 -07:00
test_display_config.py feat(gateway): opt-in cleanup of temporary progress bubbles (#21186) 2026-05-07 05:04:37 -07:00
test_dm_topics.py
test_document_cache.py
test_duplicate_reply_suppression.py
test_email.py fix(email): send IMAP ID extension to support 163/NetEase mailbox 2026-05-09 13:35:50 -07:00
test_ephemeral_reply.py
test_extract_local_files.py
test_fallback_eviction.py
test_fast_command.py
test_feishu.py fix(feishu): keep topic replies in threads 2026-05-06 10:52:51 -07:00
test_feishu_approval_buttons.py feat(feishu): add native update prompt cards 2026-05-09 02:32:55 -07:00
test_feishu_bot_admission.py
test_feishu_bot_auth_bypass.py
test_feishu_comment.py
test_feishu_comment_rules.py
test_feishu_onboard.py fix(gateway): use monotonic deadlines in QR onboarding flows 2026-05-07 05:09:39 -07:00
test_fresh_reset_skill_injection.py
test_gateway_command_help.py
test_gateway_inactivity_timeout.py
test_gateway_shutdown.py
test_goal_max_turns_config.py fix(gateway): honor configured goal turn budget 2026-05-07 06:31:08 -07:00
test_goal_status_notice.py fix(gateway): defer goal status notices until after response delivery 2026-05-07 17:33:09 -07:00
test_goal_verdict_send.py fix(goals): auto-pause when judge model returns unparseable output 2026-05-07 17:33:09 -07:00
test_google_chat.py feat(plugins): add standalone_sender_fn for out-of-process cron delivery 2026-05-09 02:56:29 -07:00
test_home_target_env_var.py
test_homeassistant.py
test_hooks.py
test_insights_unicode_flags.py
test_internal_event_bypass_pairing.py
test_interrupt_key_match.py
test_irc_adapter.py feat(plugins): add standalone_sender_fn for out-of-process cron delivery 2026-05-09 02:56:29 -07:00
test_keep_typing_timeout.py
test_matrix.py fix(matrix): defer reaction cleanup redactions 2026-05-07 06:05:44 -07:00
test_matrix_exec_approval.py
test_matrix_mention.py
test_matrix_voice.py
test_mattermost.py
test_media_download_retry.py
test_media_extraction.py
test_message_deduplicator.py
test_mirror.py
test_model_command_custom_providers.py
test_model_switch_persistence.py
test_msgraph_webhook.py fix(msgraph_webhook): harden auth surface + IP allowlisting + response hygiene 2026-05-08 10:29:58 -07:00
test_native_image_buffer_isolation.py
test_notice_delivery.py
test_pairing.py fix(pairing): enforce lockout on approve_code, not just generate_code (#10195) (#21325) 2026-05-07 07:18:21 -07:00
test_pending_drain_no_recursion.py
test_pending_drain_race.py
test_pending_event_none.py
test_pii_redaction.py
test_platform_base.py feat(gateway): support [[as_document]] directive for skill media routing 2026-05-07 05:20:10 -07:00
test_platform_connected_checkers.py feat(msgraph): add webhook listener platform 2026-05-08 10:29:58 -07:00
test_platform_http_client_limits.py
test_platform_reconnect.py
test_platform_registry.py
test_plugin_platform_interface.py
test_post_delivery_callback_chaining.py feat(gateway): opt-in cleanup of temporary progress bubbles (#21186) 2026-05-07 05:04:37 -07:00
test_pre_gateway_dispatch.py
test_proxy_mode.py
test_qqbot.py feat(qqbot): wire native tool-approval UX via inline keyboards 2026-05-07 07:48:15 -07:00
test_queue_consumption.py
test_reasoning_command.py
test_reload_skills_command.py
test_reload_skills_discord_resync.py
test_replay_entry_fields.py fix(gateway): preserve reasoning_content, codex_message_items, finish_reason on transcript replay (#22839) 2026-05-09 14:47:33 -07:00
test_reply_to_injection.py
test_restart_drain.py feat(gateway): also gate pre-restart "Gateway restarting" notification 2026-05-06 13:39:43 -07:00
test_restart_notification.py fix(gateway): preserve thread routing from cached live session sources 2026-05-07 05:16:38 -07:00
test_restart_redelivery_dedup.py
test_restart_resume_pending.py refactor(gateway): simplify auto-resume + extend to crash recovery 2026-05-07 05:05:34 -07:00
test_resume_command.py
test_retry_replacement.py
test_retry_response.py
test_run_cleanup_progress.py feat(gateway): opt-in cleanup of temporary progress bubbles (#21186) 2026-05-07 05:04:37 -07:00
test_run_progress_interrupt.py
test_run_progress_topics.py fix(feishu): keep topic replies in threads 2026-05-06 10:52:51 -07:00
test_runner_fatal_adapter.py
test_runner_startup_failures.py fix(gateway): degrade gracefully when all platform adapters are missing 2026-05-09 17:53:46 -07:00
test_running_agent_session_toggles.py
test_runtime_env_reload_config_authority.py fix(gateway): preserve max turns after env reload 2026-05-07 05:49:16 -07:00
test_runtime_footer.py
test_safe_adapter_disconnect.py fix(gateway): cap adapter disconnect during stop 2026-05-08 18:50:25 -07:00
test_send_image_file.py
test_send_multiple_images.py
test_send_retry.py
test_session.py
test_session_boundary_hooks.py
test_session_boundary_security_state.py fix(gateway): clear slash-confirm state during session boundary cleanup 2026-05-09 14:18:20 +03:00
test_session_dm_thread_seeding.py
test_session_env.py
test_session_hygiene.py
test_session_info.py
test_session_list_allowed_sources.py
test_session_model_override_routing.py fix: use configured model for gateway auth fallback 2026-05-07 06:29:27 -07:00
test_session_model_reset.py
test_session_race_guard.py
test_session_reset_notify.py
test_session_split_brain_11016.py
test_session_state_cleanup.py
test_session_store_prune.py
test_setup_feishu.py
test_shared_group_sender_prefix.py
test_shutdown_cache_cleanup.py
test_shutdown_memory_provider_messages.py
test_signal.py
test_signal_format.py
test_signal_rate_limit.py
test_slack.py
test_slack_approval_buttons.py
test_slack_channel_skills.py
test_slack_mention.py feat(slack): add allowed_channels whitelist config 2026-05-07 06:54:29 -07:00
test_sms.py
test_sse_agent_cancel.py
test_ssl_certs.py
test_status.py fix(gateway): refresh runtime argv metadata 2026-05-09 11:08:23 -07:00
test_status_command.py
test_steer_command.py
test_step_callback_compat.py
test_sticker_cache.py
test_stream_consumer.py
test_stream_consumer_fresh_final.py
test_stt_config.py
test_stuck_loop.py
test_teams.py feat(plugins): add standalone_sender_fn for out-of-process cron delivery 2026-05-09 02:56:29 -07:00
test_teams_pipeline_runtime_wiring.py fix(teams-pipeline): drop-scheduler fallback + test wiring for enablement gate 2026-05-08 11:18:14 -07:00
test_telegram_approval_buttons.py
test_telegram_caption_merge.py
test_telegram_conflict.py
test_telegram_documents.py fix: route Telegram image documents through photo handling 2026-05-07 04:51:46 -07:00
test_telegram_format.py fix: follow-up for salvaged PR #22263 2026-05-09 11:54:04 -07:00
test_telegram_group_gating.py fix: follow-up for salvaged PR #22263 2026-05-09 11:54:04 -07:00
test_telegram_mention_boundaries.py
test_telegram_network.py fix(gateway): keep DoH-confirmed Telegram IPs that match system DNS (#14520) 2026-05-05 04:42:59 -07:00
test_telegram_network_reconnect.py
test_telegram_photo_interrupts.py
test_telegram_reactions.py
test_telegram_reply_mode.py fix(gateway): load reply_to_mode from config.yaml for Discord and Telegram 2026-05-05 04:58:23 -07:00
test_telegram_reply_quote.py fix(telegram): honor message.quote for partial-quote reply context 2026-05-09 11:10:36 -07:00
test_telegram_text_batching.py
test_telegram_thread_fallback.py fix(telegram): skip send_chat_action for DM topic reply-fallback lanes 2026-05-09 01:39:37 -07:00
test_telegram_topic_mode.py feat: confirm prompt for destructive slash commands (#4069) (#22687) 2026-05-09 11:04:46 -07:00
test_telegram_webhook_secret.py
test_text_batching.py
test_title_command.py
test_transcript_offset.py
test_tts_media_routing.py
test_unauthorized_dm_behavior.py
test_unavailable_skill_hint.py
test_unknown_command.py
test_update_command.py
test_update_streaming.py feat: confirm prompt for destructive slash commands (#4069) (#22687) 2026-05-09 11:04:46 -07:00
test_usage_command.py
test_verbose_command.py
test_vision_memory_leak.py
test_voice_command.py fix(telegram): preserve DM topic routing via reply fallback 2026-05-09 01:39:37 -07:00
test_voice_mode_platform_isolation.py
test_weak_credential_guard.py
test_webhook_adapter.py fix(webhook): widen INSECURE_NO_AUTH loopback check + tests + docs 2026-05-07 07:38:43 -07:00
test_webhook_deliver_only.py fix(webhook): widen INSECURE_NO_AUTH loopback check + tests + docs 2026-05-07 07:38:43 -07:00
test_webhook_dynamic_routes.py
test_webhook_integration.py
test_webhook_signature_rate_limit.py
test_wecom.py fix(gateway): use monotonic deadlines in QR onboarding flows 2026-05-07 05:09:39 -07:00
test_wecom_callback.py
test_weixin.py fix(weixin): wrap long copy-unfriendly lines 2026-05-07 06:08:06 -07:00
test_whatsapp_connect.py
test_whatsapp_formatting.py Fix WhatsApp long message splitting 2026-05-07 06:27:47 -07:00
test_whatsapp_group_gating.py
test_whatsapp_reply_prefix.py
test_ws_auth_retry.py
test_yolo_command.py