hermes-agent/tests/gateway
ethernet 48a7e137b1 Merge origin/main into ethie/oh-god (pluginify refactor reconciliation)
Reconciles the "pluginify everything" refactor (moving provider adapters,
platform adapters, and terminal backends out of core into plugins/) with
267 commits of main. main had 515 edits across 635 files; our branch moved
98 files into plugins/. The dangerous class was main editing files at OLD
paths that we relocated — handled below.

STRUCTURAL DECISIONS
- ai-gateway + vercel_sandbox: honored main's PR #33067 deletion. Dropped our
  orphaned plugins/terminals/vercel/ dir and all 3 stale vercel refs that
  survived in pyproject (workspace member, [all] entry, uv source).
- tools/lazy_deps.py: kept main's version. Our branch deleted it incompletely
  (WIP) while main has 30 live callers + active maintenance. main's intent won.
- agent/agent_runtime_helpers.py: COMBINED — main's atomic swap+rollback
  snapshot envelope wraps our pluginified registries-based anthropic imports.
- agent/credential_pool.py: took our plugin-hook indirection AND ported main's
  api_key_path_explicit OAuth-masquerade security fix INTO the anthropic
  credential_pool_hook (it was pluginified from a pre-fix base and would have
  been silently dropped otherwise).
- hermes_cli/model_switch.py, hermes_cli/models.py: took main's logic
  (cached_provider_model_ids, AI-gateway removal) then re-applied our pluginify
  import rewrites (agent.bedrock_adapter/anthropic_adapter -> registries
  namespace lookups) since those modules moved to plugins.
- tools/terminal_tool.py: took main's version (vercel_sandbox deletion) then
  restored our lazy registry resolution for modal + daytona environments
  (both moved to plugins; main's direct imports would crash at runtime).
- nix/checks.nix: kept both — our hermetic-boundary checks + main's
  messaging-variant discord.py guard.
- pyproject.toml: plugin extras as workspace members (ours) + main's new wecom
  extra; vercel removed throughout.
- uv.lock: regenerated with `uv lock` (not hand-merged); 233 packages.

VERIFICATION
- Zero conflict markers anywhere.
- Exhaustive 17-moved-module grep: no dead imports of relocated modules in core.
- Import smoke test: all hot core modules import clean.
- Targeted tests (21 files incl. credential_pool, anthropic plugin,
  run_agent, project_metadata): pass.
- 3 credential_pool security tests rewired to register the real plugin hook
  (core tests don't trigger plugin discovery): pass.
- Full suite: remaining failures are pre-existing on premerge-oh-god (telegram
  collection error: setUpModule MagicMock __code__) or environmental (matrix
  DNS/e2ee-deps, network) — NOT introduced by this merge. See PR notes.
2026-05-28 17:57:55 -04:00
..
platforms
…
__init__.py
…
_plugin_adapter_loader.py
…
conftest.py
…
restart_test_helpers.py
…
test_7100_transient_failure_transcript.py
…
test_active_session_text_merge.py
…
test_agent_cache.py
…
test_allowed_channels_widening.py
…
test_allowlist_startup_check.py
…
test_api_server.py
…
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_api_server_toolset.py
…
test_approve_deny_commands.py
…
test_auth_fallback.py
…
test_auto_continue.py
…
test_background_command.py
…
test_background_process_notifications.py
…
test_base_topic_sessions.py
…
test_bluebubbles.py
…
test_bundles_command.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_compression_session_id_persistence.py
…
test_config.py
…
test_config_cwd_bridge.py
…
test_config_env_bridge_authority.py
…
test_debug_command.py
…
test_delivery.py
…
test_destructive_slash_confirm.py
…
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_clarify_buttons.py
…
test_discord_component_auth.py
…
test_discord_connect.py
…
test_discord_document_handling.py
…
test_discord_free_response.py fix(discord): skip backfill for auto-created threads and update test fakes 2026-05-28 04:52:02 -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
…
test_discord_roles_dm_scope.py
…
test_discord_send.py
…
test_discord_slash_auth.py
…
test_discord_slash_commands.py fix(discord): skip backfill for auto-created threads and update test fakes 2026-05-28 04:52:02 -07:00
test_discord_system_messages.py
…
test_discord_thread_persistence.py
…
test_display_config.py
…
test_dm_topics.py Merge origin/main into ethie/oh-god (pluginify refactor reconciliation) 2026-05-28 17:57:55 -04:00
test_document_cache.py
…
test_duplicate_reply_suppression.py
…
test_email.py
…
test_ephemeral_reply.py
…
test_extract_local_files.py
…
test_fallback_eviction.py
…
test_fast_command.py
…
test_feishu_bot_auth_bypass.py
…
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
…
test_goal_status_notice.py
…
test_goal_verdict_send.py
…
test_google_chat.py
…
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
…
test_kanban_notifier.py
…
test_keep_typing_timeout.py
…
test_line_plugin.py
…
test_load_transcript_db_only.py
…
test_loop_exception_handler.py
…
test_mattermost.py
…
test_mcp_reload_refreshes_cached_agents.py
…
test_media_download_retry.py
…
test_media_extraction.py
…
test_memory_monitor.py
…
test_message_deduplicator.py
…
test_mirror.py
…
test_model_command_custom_providers.py
…
test_model_command_flat_string_config.py
…
test_model_switch_persistence.py
…
test_msgraph_webhook.py
…
test_native_image_buffer_isolation.py
…
test_notice_delivery.py
…
test_ntfy_plugin.py
…
test_pairing.py
…
test_pending_drain_no_recursion.py
…
test_pending_drain_race.py
…
test_pending_event_none.py
…
test_pii_redaction.py
…
test_planned_stop_watcher.py
…
test_platform_base.py fix(gateway): default media-delivery validation to denylist-only, restore .md delivery (#34022) 2026-05-28 11:32:36 -07:00
test_platform_connected_checkers.py
…
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
…
test_pre_gateway_dispatch.py
…
test_proxy_mode.py
…
test_qqbot.py
…
test_queue_consumption.py
…
test_reasoning_command.py
…
test_reload_skills_command.py
…
test_reload_skills_discord_resync.py
…
test_replay_entry_fields.py
…
test_reply_to_injection.py
…
test_restart_drain.py
…
test_restart_notification.py
…
test_restart_redelivery_dedup.py
…
test_restart_resume_pending.py
…
test_resume_command.py
…
test_retry_replacement.py
…
test_retry_response.py
…
test_run_cleanup_progress.py
…
test_run_progress_interrupt.py
…
test_run_progress_topics.py
…
test_runner_fatal_adapter.py
…
test_runner_startup_failures.py
…
test_running_agent_session_toggles.py
…
test_runtime_config_env_expansion.py
…
test_runtime_env_reload_config_authority.py
…
test_runtime_footer.py
…
test_safe_adapter_disconnect.py
…
test_send_image_file.py
…
test_send_multiple_images.py
…
test_send_retry.py
…
test_send_voice_reply_notify.py wipppppppppppppppppppppppppppppppp 2026-05-28 16:44:02 -04:00
test_session.py
…
test_session_api.py
…
test_session_boundary_hooks.py
…
test_session_boundary_security_state.py
…
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
…
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_shared_group_sender_prefix.py
…
test_shutdown_cache_cleanup.py
…
test_shutdown_forensics.py
…
test_shutdown_memory_provider_messages.py
…
test_signal.py
…
test_signal_format.py
…
test_signal_rate_limit.py
…
test_simplex_plugin.py
…
test_slash_access.py
…
test_slash_access_dispatch.py
…
test_sms.py
…
test_sse_agent_cancel.py
…
test_ssl_certs.py
…
test_status.py
…
test_status_command.py
…
test_steer_command.py
…
test_step_callback_compat.py
…
test_sticker_cache.py
…
test_stream_consumer.py
…
test_stream_consumer_draft.py
…
test_stream_consumer_fresh_final.py
…
test_stream_consumer_thread_routing.py
…
test_stt_config.py wipppppppppppppppppppppppppppppppp 2026-05-28 16:44:02 -04:00
test_stuck_loop.py
…
test_subagent_protection_30170.py
…
test_teams.py
…
test_teams_pipeline_runtime_wiring.py
…
test_text_batching.py wipppppppppppppppppppppppppppppppp 2026-05-28 16:44:02 -04:00
test_title_command.py
…
test_transcript_offset.py
…
test_tts_media_routing.py fix(gateway): default media-delivery validation to denylist-only, restore .md delivery (#34022) 2026-05-28 11:32:36 -07:00
test_unauthorized_dm_behavior.py
…
test_unavailable_skill_hint.py
…
test_unknown_command.py
…
test_update_command.py
…
test_update_streaming.py
…
test_usage_command.py
…
test_verbose_command.py
…
test_vision_memory_leak.py
…
test_voice_command.py wipppppppppppppppppppppppppppppppp 2026-05-28 16:44:02 -04:00
test_voice_mode_platform_isolation.py
…
test_weak_credential_guard.py
…
test_webhook_adapter.py
…
test_webhook_deliver_only.py
…
test_webhook_dynamic_routes.py
…
test_webhook_integration.py
…
test_webhook_signature_rate_limit.py
…
test_wecom.py
…
test_wecom_callback.py
…
test_weixin.py
…
test_whatsapp_connect.py
…
test_whatsapp_formatting.py
…
test_whatsapp_group_gating.py
…
test_whatsapp_reply_prefix.py
…
test_ws_auth_retry.py
…
test_yolo_command.py
…