hermes-agent/tests/gateway
Teknium e26393ffc2
fix: Signal duplicate replies with streaming + per-platform tool_progress (#6348)
Fixes #4647 — Signal replies duplicated when gateway streaming is enabled.

Root cause: stream_consumer.py did not handle the case where send() returns
success=True but no message_id (Signal behavior). Every stream delta produced
a separate send() call (7+ messages instead of 2), plus the gateway sent
another full duplicate since already_sent was never set.

Changes:
- stream_consumer.py: Add elif branch for success-without-message_id — enters
  fallback mode (sets already_sent, disables editing, sends only continuation)
- signal.py send(): Extract timestamp from signal-cli RPC result as message_id
  so stream consumer follows normal edit→fallback path
- signal.py: Add public stop_typing() delegating to _stop_typing_indicator()
  so base adapter's _keep_typing finally block can clean up typing tasks
- gateway/run.py: Per-platform tool_progress_overrides (#6164) — lets users
  set e.g. signal: off while keeping telegram: all
- hermes_cli/config.py: Add tool_progress_overrides to DEFAULT_CONFIG

Refs: #4647, #6164
2026-04-08 17:39:45 -07:00
..
__init__.py
test_agent_cache.py
test_allowlist_startup_check.py
test_api_server.py fix(tests): update tool_progress_callback test calls to new 4-arg signature 2026-04-07 17:56:01 -07:00
test_api_server_jobs.py fix(gateway): wrap cron helpers with staticmethod to prevent self-binding 2026-04-05 12:31:10 -07:00
test_api_server_toolset.py refactor: remove browser_close tool — auto-cleanup handles it (#5792) 2026-04-07 03:28:44 -07:00
test_approve_deny_commands.py fix: remove stale test skips, fix regex backtracking, file search bug, and test flakiness 2026-04-04 10:18:57 -07:00
test_async_memory_flush.py
test_background_command.py
test_background_process_notifications.py
test_base_topic_sessions.py
test_channel_directory.py Ensure atomic writes for gateway channel directory cache to prevent truncation 2026-04-06 13:20:01 -07:00
test_command_bypass_active_session.py fix(gateway): /stop and /new bypass Level 1 active-session guard (#5765) 2026-04-07 00:53:45 -07:00
test_config.py feat: shared thread sessions by default — multi-user thread support (#5391) 2026-04-05 19:46:58 -07:00
test_config_cwd_bridge.py
test_delivery.py
test_dingtalk.py
test_discord_bot_filter.py
test_discord_channel_controls.py docs: add Discord channel controls and Telegram reactions documentation 2026-04-07 17:55:55 -07:00
test_discord_connect.py fix: add missing ButtonStyle.grey to discord mock for test compatibility 2026-04-05 12:42:47 -07:00
test_discord_document_handling.py feat: add .zip document support and auto-mount cache dirs into remote backends (#4846) 2026-04-03 13:16:26 -07:00
test_discord_free_response.py fix(discord): register /approve and /deny slash commands, wire up button-based approval UI (#4800) 2026-04-03 10:24:07 -07:00
test_discord_imports.py
test_discord_media_metadata.py
test_discord_opus.py
test_discord_reactions.py
test_discord_reply_mode.py feat(discord): add DISCORD_REPLY_TO_MODE setting (#6333) 2026-04-08 17:08:40 -07:00
test_discord_send.py fix(discord): register /approve and /deny slash commands, wire up button-based approval UI (#4800) 2026-04-03 10:24:07 -07:00
test_discord_slash_commands.py
test_discord_system_messages.py
test_discord_thread_persistence.py
test_dm_topics.py test+docs: add group_topics tests and documentation 2026-04-03 18:20:50 -07:00
test_document_cache.py feat: add .zip document support and auto-mount cache dirs into remote backends (#4846) 2026-04-03 13:16:26 -07:00
test_email.py
test_extract_local_files.py
test_feishu.py feat(gateway): add per-group access control for Feishu 2026-04-06 16:54:16 -07:00
test_feishu_approval_buttons.py feat(feishu): add interactive card approval buttons (#6043) 2026-04-07 22:45:14 -07:00
test_flush_memory_stale_guard.py fix(memory): profile-scoped memory isolation and clone support (#4845) 2026-04-03 13:10:11 -07:00
test_gateway_shutdown.py
test_homeassistant.py
test_hooks.py
test_interrupt_key_match.py
test_matrix.py fix: repair 57 failing CI tests across 14 files (#5823) 2026-04-07 09:58:45 -07:00
test_matrix_mention.py fix(gateway): match Discord mention-stripping behavior in Matrix adapter 2026-04-04 13:09:27 -07:00
test_matrix_voice.py fix: repair 57 failing CI tests across 14 files (#5823) 2026-04-07 09:58:45 -07:00
test_mattermost.py fix(security): consolidated security hardening — SSRF, timing attack, tar traversal, credential leakage (#5944) 2026-04-07 17:28:37 -07:00
test_media_download_retry.py fix(security): consolidated security hardening — SSRF, timing attack, tar traversal, credential leakage (#5944) 2026-04-07 17:28:37 -07:00
test_media_extraction.py
test_mirror.py
test_pairing.py
test_pii_redaction.py
test_plan_command.py
test_platform_base.py fix(gateway): sanitize media URLs in base platform logs 2026-04-06 16:50:05 -07:00
test_platform_reconnect.py fix: repair 57 failing CI tests across 14 files (#5823) 2026-04-07 09:58:45 -07:00
test_queue_consumption.py
test_reasoning_command.py fix: unify reasoning_effort to config.yaml only, remove HERMES_REASONING_EFFORT env var 2026-04-08 03:36:44 -07:00
test_resume_command.py fix: silent memory flush failure on /new and /resume commands 2026-04-06 16:49:42 -07:00
test_retry_replacement.py
test_retry_response.py
test_run_progress_topics.py fix(gateway): respect tool_preview_length in all/new progress modes (#5937) 2026-04-07 14:10:56 -07:00
test_runner_fatal_adapter.py
test_runner_startup_failures.py
test_send_image_file.py
test_send_retry.py fix(telegram): prevent duplicate message delivery on send timeout (#5153) 2026-04-04 19:05:34 -07:00
test_session.py feat: shared thread sessions by default — multi-user thread support (#5391) 2026-04-05 19:46:58 -07:00
test_session_boundary_hooks.py fix: add gateway coverage for session boundary hooks, move test to tests/cli/ 2026-04-08 04:27:34 -07:00
test_session_dm_thread_seeding.py
test_session_env.py
test_session_hygiene.py
test_session_info.py
test_session_model_reset.py fix: clear session-scoped model overrides during session reset 2026-04-06 13:20:01 -07:00
test_session_race_guard.py fix: repair 57 failing CI tests across 14 files (#5823) 2026-04-07 09:58:45 -07:00
test_session_reset_notify.py
test_signal.py fix: Signal duplicate replies with streaming + per-platform tool_progress (#6348) 2026-04-08 17:39:45 -07:00
test_slack.py feat(gateway): Enable Slack thread replies without explicit @mentions 2026-04-06 21:27:16 -07:00
test_slack_approval_buttons.py feat(slack): thread engagement — auto-respond in bot-started and mentioned threads (#5897) 2026-04-07 11:12:08 -07:00
test_sms.py
test_sse_agent_cancel.py
test_ssl_certs.py
test_status.py
test_status_command.py fix(gateway): show full session id and title in /status 2026-04-07 17:27:09 -07:00
test_step_callback_compat.py
test_sticker_cache.py
test_stream_consumer.py fix: Signal duplicate replies with streaming + per-platform tool_progress (#6348) 2026-04-08 17:39:45 -07:00
test_stt_config.py
test_telegram_approval_buttons.py refactor(tests): re-architect tests + fix CI failures (#5946) 2026-04-07 17:19:07 -07:00
test_telegram_caption_merge.py fix(telegram): replace substring caption check with exact line-by-line match 2026-04-07 14:08:59 -07:00
test_telegram_conflict.py refactor(tests): re-architect tests + fix CI failures (#5946) 2026-04-07 17:19:07 -07:00
test_telegram_documents.py feat: add .zip document support and auto-mount cache dirs into remote backends (#4846) 2026-04-03 13:16:26 -07:00
test_telegram_format.py
test_telegram_group_gating.py
test_telegram_network.py
test_telegram_network_reconnect.py
test_telegram_photo_interrupts.py
test_telegram_reactions.py docs: add Discord channel controls and Telegram reactions documentation 2026-04-07 17:55:55 -07:00
test_telegram_reply_mode.py
test_telegram_text_batching.py
test_telegram_thread_fallback.py Prevent Telegram polling handoffs and flood-control send failures 2026-04-05 11:59:28 -07:00
test_title_command.py
test_transcript_offset.py
test_unauthorized_dm_behavior.py
test_unknown_command.py fix(gateway): surface unknown /commands instead of leaking them to the LLM 2026-04-05 11:59:28 -07:00
test_update_command.py feat(gateway): live-stream /update output + interactive prompt buttons (#5180) 2026-04-05 00:28:58 -07:00
test_update_streaming.py feat(gateway): live-stream /update output + interactive prompt buttons (#5180) 2026-04-05 00:28:58 -07:00
test_verbose_command.py
test_voice_command.py fix(discord): register /approve and /deny slash commands, wire up button-based approval UI (#4800) 2026-04-03 10:24:07 -07:00
test_webhook_adapter.py fix(gateway/webhook): don't pop delivery_info on send 2026-04-07 17:27:09 -07:00
test_webhook_dynamic_routes.py
test_webhook_integration.py fix(gateway/webhook): don't pop delivery_info on send 2026-04-07 17:27:09 -07:00
test_wecom.py
test_whatsapp_connect.py
test_whatsapp_group_gating.py
test_whatsapp_reply_prefix.py
test_ws_auth_retry.py fix(gateway): stop Matrix/Mattermost reconnect on permanent auth failures 2026-04-05 11:07:47 -07:00