hermes-agent/tests/gateway
teknium1 24f549a692 feat: add Signal messenger gateway platform (#405)
Complete Signal adapter using signal-cli daemon HTTP API.
Based on PR #268 by ibhagwan, rebuilt on current main with bug fixes.

Architecture:
- SSE streaming for inbound messages with exponential backoff (2s→60s)
- JSON-RPC 2.0 for outbound (send, typing, attachments, contacts)
- Health monitor detects stale SSE connections (120s threshold)
- Phone number redaction in all logs and global redact.py

Features:
- DM and group message support with separate access policies
- DM policies: pairing (default), allowlist, open
- Group policies: disabled (default), allowlist, open
- Attachment download with magic-byte type detection
- Typing indicators (8s refresh interval)
- 100MB attachment size limit, 8000 char message limit
- E.164 phone + UUID allowlist support

Integration:
- Platform.SIGNAL enum in gateway/config.py
- Signal in _is_user_authorized() allowlist maps (gateway/run.py)
- Adapter factory in _create_adapter() (gateway/run.py)
- user_id_alt/chat_id_alt fields in SessionSource for UUIDs
- send_message tool support via httpx JSON-RPC (not aiohttp)
- Interactive setup wizard in 'hermes gateway setup'
- Connectivity testing during setup (pings /api/v1/check)
- signal-cli detection and install guidance

Bug fixes from PR #268:
- Timestamp reads from envelope_data (not outer wrapper)
- Uses httpx consistently (not aiohttp in send_message tool)
- SIGNAL_DEBUG scoped to signal logger (not root)
- extract_images regex NOT modified (preserves group numbering)
- pairing.py NOT modified (no cross-platform side effects)
- No dual authorization (adapter defers to run.py for user auth)
- Wildcard uses set membership ('*' in set, not list equality)
- .zip default for PK magic bytes (not .docx)

No new Python dependencies — uses httpx (already core).
External requirement: signal-cli daemon (user-installed).

Tests: 30 new tests covering config, init, helpers, session source,
phone redaction, authorization, and send_message integration.

Co-authored-by: ibhagwan <ibhagwan@users.noreply.github.com>
2026-03-08 20:20:35 -07:00
..
__init__.py test: reorganize test structure and add missing unit tests 2026-02-26 03:20:08 +03:00
test_async_memory_flush.py feat(gateway): proactive async memory flush on session expiry 2026-03-07 11:27:50 -08:00
test_channel_directory.py test: add unit tests for 8 untested modules (batch 3) (#191) 2026-03-01 05:28:12 -08:00
test_config.py test: reorganize test structure and add missing unit tests 2026-02-26 03:20:08 +03:00
test_delivery.py test: reorganize test structure and add missing unit tests 2026-02-26 03:20:08 +03:00
test_document_cache.py fix(security): patch path traversal, size bypass, and prompt injection in document processing 2026-02-27 11:53:46 -05:00
test_homeassistant.py feat: enhance Home Assistant integration with service discovery and setup 2026-03-03 05:16:53 -08:00
test_hooks.py test: strengthen assertions across 7 test files (batch 1) 2026-03-05 18:39:37 -08:00
test_media_extraction.py fix(gateway): prevent TTS voice messages from accumulating across turns 2026-02-28 03:38:27 -05:00
test_mirror.py test: add unit tests for 8 untested modules (batch 3) (#191) 2026-03-01 05:28:12 -08:00
test_pairing.py test: strengthen assertions across 7 test files (batch 1) 2026-03-05 18:39:37 -08:00
test_platform_base.py test: strengthen assertions across 7 test files (batch 1) 2026-03-05 18:39:37 -08:00
test_resume_command.py feat: add /resume command to gateway for switching to named sessions 2026-03-08 17:09:00 -07:00
test_send_image_file.py feat: browser screenshot sharing via MEDIA: on all messaging platforms 2026-03-07 22:57:05 -08:00
test_session.py Merge PR #370: fix(session): use database session count for has_any_sessions 2026-03-04 05:37:15 -08:00
test_session_hygiene.py feat: auto-compress pathologically large gateway sessions (#628) 2026-03-07 20:09:48 -08:00
test_signal.py feat: add Signal messenger gateway platform (#405) 2026-03-08 20:20:35 -07:00
test_sticker_cache.py test: add unit tests for 8 untested modules (batch 3) (#191) 2026-03-01 05:28:12 -08:00
test_telegram_documents.py fix(security): patch path traversal, size bypass, and prompt injection in document processing 2026-02-27 11:53:46 -05:00
test_telegram_format.py fix: prevent italic regex from spanning newlines in Telegram formatter 2026-02-28 22:01:48 +03:00
test_title_command.py fix: add title validation — sanitize, length limit, control char stripping 2026-03-08 15:54:51 -07:00
test_transcript_offset.py fix(gateway): use filtered history length for transcript message extraction 2026-03-04 21:34:40 +03:00
test_update_command.py feat: add /update slash command for gateway platforms 2026-03-05 01:20:58 -08:00
test_whatsapp_connect.py fix(whatsapp): replace Linux-only fuser with cross-platform port cleanup 2026-03-05 17:13:14 +03:00