hermes-agent/tests/gateway
Teknium 5651a73331 fix(gateway): guard-match the finally-block _active_sessions delete
Before this, _process_message_background's finally did an unconditional
'del self._active_sessions[session_key]' — even if a /stop/ /new
command had already swapped in its own command_guard via
_dispatch_active_session_command and cancelled us.  The old task's
unwind would clobber the newer guard, opening a race for follow-ups.

Replace with _release_session_guard(session_key, guard=interrupt_event)
so the delete only fires when the guard we captured is still the one
installed.  The sibling _session_tasks pop already had equivalent
ownership matching via asyncio.current_task() identity; this closes the
asymmetry.

Adds two direct regressions in test_session_split_brain_11016:
- stale guard reference must not clobber a newer guard by identity
- guard=None default still releases unconditionally (for callers that
  don't have a captured guard to match against)

Refs #11016
2026-04-23 05:15:52 -07:00
..
__init__.py
conftest.py
restart_test_helpers.py fix(gateway): use persisted session origin for shutdown notifications 2026-04-20 05:15:54 -07:00
test_agent_cache.py
test_allowlist_startup_check.py
test_api_server_bind_guard.py
test_api_server_jobs.py refactor: remove redundant local imports already available at module level 2026-04-21 00:50:58 -07:00
test_api_server_multimodal.py feat(api-server): inline image inputs on /v1/chat/completions and /v1/responses (#12969) 2026-04-20 04:16:13 -07:00
test_api_server_normalize.py
test_api_server_toolset.py
test_api_server.py fix(gateway/api_server): deduplicate concurrent idempotent requests 2026-04-20 22:13:07 -07:00
test_approve_deny_commands.py
test_async_memory_flush.py
test_auto_continue.py
test_background_command.py
test_background_process_notifications.py
test_base_topic_sessions.py
test_bluebubbles.py
test_busy_session_ack.py
test_cancel_background_drain.py fix(gateway): cancel_background_tasks must drain late-arrivals (#12471) 2026-04-19 01:48:42 -07:00
test_channel_directory.py feat(discord): support forum channels 2026-04-17 20:25:48 -07:00
test_clean_shutdown_marker.py
test_command_bypass_active_session.py fix(gateway): slash commands never interrupt a running agent (#12334) 2026-04-18 18:53:22 -07:00
test_complete_path_at_filter.py fix(tui): @folder: only yields directories, @file: only yields files 2026-04-21 14:31:48 -05:00
test_compress_command.py
test_compress_focus.py
test_config_cwd_bridge.py
test_config.py
test_debug_command.py fix(debug): sweep expired pending pastes on slash debug paths 2026-04-22 11:59:39 -07:00
test_delivery.py
test_dingtalk.py feat(dingtalk): AI Cards streaming, emoji reactions, and media handling 2026-04-17 19:26:53 -07:00
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 refactor: remove smart_model_routing feature (#12732) 2026-04-19 18:12:55 -07:00
test_discord_channel_skills.py
test_discord_connect.py
test_discord_document_handling.py
test_discord_free_response.py
test_discord_imports.py
test_discord_media_metadata.py
test_discord_opus.py
test_discord_race_polish.py refactor(discord): slim down the race-polish fix (#12644) 2026-04-19 11:08:10 -07:00
test_discord_reactions.py
test_discord_reply_mode.py
test_discord_send.py fix(discord): forum channel media + polish 2026-04-17 20:25:48 -07:00
test_discord_slash_commands.py feat(gateway): expose plugin slash commands natively on all platforms + decision-capable command hook 2026-04-22 16:23:21 -07:00
test_discord_system_messages.py
test_discord_thread_persistence.py
test_display_config.py
test_dm_topics.py fix(gateway): make Telegram DM topic config writes atomic 2026-04-20 00:57:53 -07:00
test_document_cache.py
test_duplicate_reply_suppression.py
test_email.py
test_extract_local_files.py
test_fallback_eviction.py
test_fast_command.py refactor: remove smart_model_routing feature (#12732) 2026-04-19 18:12:55 -07:00
test_feishu_approval_buttons.py
test_feishu_comment_rules.py feat: add Feishu document comment intelligent reply with 3-tier access control 2026-04-17 19:04:11 -07:00
test_feishu_comment.py feat: add Feishu document comment intelligent reply with 3-tier access control 2026-04-17 19:04:11 -07:00
test_feishu_onboard.py
test_feishu.py fix(feishu): correct identity model docs and prefer tenant-scoped user_id 2026-04-22 18:06:22 -07:00
test_flush_memory_stale_guard.py
test_gateway_inactivity_timeout.py
test_gateway_shutdown.py
test_homeassistant.py
test_hooks.py feat(gateway): expose plugin slash commands natively on all platforms + decision-capable command hook 2026-04-22 16:23:21 -07:00
test_insights_unicode_flags.py
test_internal_event_bypass_pairing.py test(conftest): reset module-level state + unset platform allowlists (#13400) 2026-04-21 01:33:10 -07:00
test_interrupt_key_match.py
test_matrix_mention.py
test_matrix_voice.py
test_matrix.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_pairing.py
test_pending_drain_race.py fix(gateway): close pending-drain and late-arrival races in base adapter (#12371) 2026-04-18 19:32:26 -07:00
test_pending_event_none.py fix(gateway): stop typing loops on session interrupt 2026-04-19 03:03:57 -07:00
test_pii_redaction.py
test_plan_command.py
test_platform_base.py
test_platform_reconnect.py
test_proxy_mode.py fix(agent): normalize socks:// env proxies for httpx/anthropic 2026-04-21 05:52:46 -07:00
test_qqbot.py
test_queue_consumption.py
test_reasoning_command.py
test_reply_to_injection.py fix(gateway): always inject reply-to pointer, not just when quoted text is absent (#13676) 2026-04-21 13:33:02 -07:00
test_restart_drain.py fix(gateway): use persisted session origin for shutdown notifications 2026-04-20 05:15:54 -07:00
test_restart_notification.py
test_restart_redelivery_dedup.py fix(gateway): ignore redelivered /restart after PTB offset ACK fails (#11940) 2026-04-17 21:17:33 -07:00
test_restart_resume_pending.py fix(gateway): mark only still-running sessions resume_pending on drain timeout (#12332) 2026-04-18 17:40:34 -07:00
test_resume_command.py
test_retry_replacement.py
test_retry_response.py
test_run_progress_topics.py fix(gateway): stop typing loops on session interrupt 2026-04-19 03:03:57 -07:00
test_runner_fatal_adapter.py
test_runner_startup_failures.py fix(gateway): close --replace race completely by claiming PID before adapter startup 2026-04-21 00:43:50 -07:00
test_running_agent_session_toggles.py test(gateway): lock in /yolo /verbose bypass and /fast /reasoning catch-all 2026-04-20 03:03:07 -07:00
test_safe_adapter_disconnect.py fix(gateway): close adapter resources when connect() fails or raises (#12339) 2026-04-18 18:53:31 -07:00
test_send_image_file.py
test_send_retry.py
test_session_boundary_hooks.py
test_session_boundary_security_state.py fix(gateway): also clear session-scoped approval state on /new 2026-04-22 18:26:59 -07: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 fix(tui): narrow /resume sources to human adapters 2026-04-21 18:52:26 -05:00
test_session_model_override_routing.py
test_session_model_reset.py
test_session_race_guard.py fix(gateway): stop typing loops on session interrupt 2026-04-19 03:03:57 -07:00
test_session_reset_notify.py
test_session_split_brain_11016.py fix(gateway): guard-match the finally-block _active_sessions delete 2026-04-23 05:15:52 -07:00
test_session_state_cleanup.py
test_session_store_prune.py fix(gateway): pass session_key (not session_id) to active-process check during prune 2026-04-20 03:10:19 -07:00
test_session.py fix: preserve reasoning_content on Kimi replay 2026-04-22 04:31:59 -07:00
test_setup_feishu.py
test_shared_group_sender_prefix.py fix(gateway): preserve sender attribution in shared group sessions 2026-04-21 00:54:46 -07:00
test_signal.py test(conftest): reset module-level state + unset platform allowlists (#13400) 2026-04-21 01:33:10 -07:00
test_slack_approval_buttons.py
test_slack_mention.py
test_slack.py feat(gateway/slack): add SLACK_REACTIONS env toggle for reaction lifecycle 2026-04-22 08:49:24 -07:00
test_sms.py
test_sse_agent_cancel.py
test_ssl_certs.py
test_status_command.py fix: tighten gateway interrupt salvage follow-ups 2026-04-19 03:03:57 -07:00
test_status.py fix(gateway): also unlink stale PID + lock files on cleanup 2026-04-22 16:33:46 -07:00
test_steer_command.py feat(steer): /steer <prompt> injects a mid-run note after the next tool call (#12116) 2026-04-18 04:17:18 -07:00
test_step_callback_compat.py
test_sticker_cache.py
test_stream_consumer.py fix(gateway): accept finalize kwarg in all platform edit_message overrides 2026-04-19 22:46:47 -07:00
test_stt_config.py
test_stuck_loop.py
test_telegram_approval_buttons.py
test_telegram_caption_merge.py
test_telegram_conflict.py
test_telegram_documents.py fix(telegram): cache inbound videos and accept mp4 uploads 2026-04-20 05:10:23 -07:00
test_telegram_format.py
test_telegram_group_gating.py test(telegram): update /cmd@botname assertion for entity-only detection 2026-04-21 03:06:56 -07:00
test_telegram_mention_boundaries.py refactor(telegram): use entity-only mention detection 2026-04-20 00:10:22 -07:00
test_telegram_network_reconnect.py
test_telegram_network.py
test_telegram_photo_interrupts.py
test_telegram_reactions.py
test_telegram_reply_mode.py
test_telegram_text_batching.py
test_telegram_thread_fallback.py
test_telegram_webhook_secret.py fix(telegram): require TELEGRAM_WEBHOOK_SECRET in webhook mode (#13527) 2026-04-21 06:23:09 -07:00
test_text_batching.py fix(discord): shield text-batch flush from follow-up cancel (#12444) 2026-04-19 00:09:38 -07:00
test_title_command.py
test_transcript_offset.py
test_unauthorized_dm_behavior.py fix(gateway): include QQBOT in allowlist-aware unauthorized DM map 2026-04-19 22:16:37 -07:00
test_unknown_command.py feat(gateway): expose plugin slash commands natively on all platforms + decision-capable command hook 2026-04-22 16:23:21 -07:00
test_update_command.py
test_update_streaming.py
test_usage_command.py feat(/usage): append account limits section in CLI and gateway 2026-04-21 01:56:35 -07:00
test_verbose_command.py
test_voice_command.py test(voice): update existing voice_mode tests for platform-prefixed keys 2026-04-19 22:36:00 -07:00
test_voice_mode_platform_isolation.py test(voice): update existing voice_mode tests for platform-prefixed keys 2026-04-19 22:36:00 -07:00
test_weak_credential_guard.py
test_webhook_adapter.py
test_webhook_deliver_only.py feat(webhook): direct delivery mode for zero-LLM push notifications (#12473) 2026-04-19 05:18:19 -07:00
test_webhook_dynamic_routes.py
test_webhook_integration.py
test_webhook_signature_rate_limit.py fix(webhook): validate HMAC signature before rate limiting (#12544) 2026-04-19 22:45:08 -07:00
test_wecom_callback.py
test_wecom.py fix(wecom): bound req_id cache, revert undocumented is_group change, add tests 2026-04-17 19:03:29 -07:00
test_weixin.py
test_whatsapp_connect.py fix(whatsapp): kill bridge process tree on Windows disconnect 2026-04-20 20:49:32 -07:00
test_whatsapp_formatting.py
test_whatsapp_group_gating.py feat(whatsapp): add dm_policy and group_policy parity with WeCom/Weixin/QQ adapters 2026-04-20 11:56:19 -07:00
test_whatsapp_reply_prefix.py
test_ws_auth_retry.py
test_yolo_command.py