hermes-agent/tests/gateway
Teknium 46176c8029
refactor: centralize slash command registry (#1603)
* refactor: centralize slash command registry

Replace 7+ scattered command definition sites with a single
CommandDef registry in hermes_cli/commands.py. All downstream
consumers now derive from this registry:

- CLI process_command() resolves aliases via resolve_command()
- Gateway _known_commands uses GATEWAY_KNOWN_COMMANDS frozenset
- Gateway help text generated by gateway_help_lines()
- Telegram BotCommands generated by telegram_bot_commands()
- Slack subcommand map generated by slack_subcommand_map()

Adding a command or alias is now a one-line change to
COMMAND_REGISTRY instead of touching 6+ files.

Bugfixes included:
- Telegram now registers /rollback, /background (were missing)
- Slack now has /voice, /update, /reload-mcp (were missing)
- Gateway duplicate 'reasoning' dispatch (dead code) removed
- Gateway help text can no longer drift from CLI help

Backwards-compatible: COMMANDS and COMMANDS_BY_CATEGORY dicts are
rebuilt from the registry, so existing imports work unchanged.

* docs: update developer docs for centralized command registry

Update AGENTS.md with full 'Slash Command Registry' and 'Adding a
Slash Command' sections covering CommandDef fields, registry helpers,
and the one-line alias workflow.

Also update:
- CONTRIBUTING.md: commands.py description
- website/docs/reference/slash-commands.md: reference central registry
- docs/plans/centralize-command-registry.md: mark COMPLETED
- plans/checkpoint-rollback.md: reference new pattern
- hermes-agent-dev skill: architecture table

* chore: remove stale plan docs
2026-03-16 23:21:03 -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_background_command.py refactor: centralize slash command registry (#1603) 2026-03-16 23:21:03 -07:00
test_background_process_notifications.py feat(gateway): configurable background process watcher notifications 2026-03-10 04:12:39 -07:00
test_base_topic_sessions.py fix(gateway): isolate telegram forum topic sessions 2026-03-11 09:15:34 +01:00
test_channel_directory.py fix: finish HERMES_HOME path cleanup 2026-03-13 21:35:07 -07:00
test_config.py Merge pull request #1495 from NousResearch/fix/814-group-session-isolation 2026-03-16 00:25:43 -07:00
test_config_cwd_bridge.py refactor(cli): implement approval locking mechanism to serialize concurrent requests 2026-03-13 23:59:18 -07:00
test_delivery.py fix: salvage gateway dedup and executor cleanup from PR #993 2026-03-14 11:03:20 -07:00
test_discord_bot_filter.py feat(discord): add DISCORD_ALLOW_BOTS config for bot message filtering (inspired by openclaw) 2026-03-09 02:20:57 -07:00
test_discord_free_response.py feat(discord): auto-thread on @mention + skip mention in bot threads 2026-03-15 07:59:55 -07:00
test_discord_imports.py fix: defer discord adapter annotations 2026-03-14 09:32:05 -07:00
test_discord_media_metadata.py feat(discord): add /thread command, auto_thread config, and media metadata fix (#1178) 2026-03-13 08:52:54 -07:00
test_discord_opus.py fix: add macOS Homebrew Opus fallback and fix shutdown dict iteration 2026-03-14 14:27:21 +03:00
test_discord_send.py fix: align salvaged Discord send test mock with current slash-command API 2026-03-14 21:44:50 -07:00
test_discord_slash_commands.py feat(discord): auto-thread on @mention + skip mention in bot threads 2026-03-15 07:59:55 -07: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_email.py fix: verify SMTP TLS in send_message_tool 2026-03-14 06:31:52 -07:00
test_gateway_shutdown.py fix(gateway): cancel active runs during shutdown 2026-03-15 04:21:50 -07:00
test_homeassistant.py fix: Home Assistant event filtering now closed by default (#1169) 2026-03-13 07:40:38 -07:00
test_honcho_lifecycle.py fix(honcho): isolate session routing for multi-user gateway (#1500) 2026-03-16 00:23:47 -07:00
test_hooks.py test: strengthen assertions across 7 test files (batch 1) 2026-03-05 18:39:37 -08:00
test_interrupt_key_match.py test(gateway): cover photo burst interrupt regressions 2026-03-15 03:50:45 -07: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 fix(gateway): isolate telegram forum topic sessions 2026-03-11 09:15:34 +01:00
test_pairing.py test: strengthen assertions across 7 test files (batch 1) 2026-03-05 18:39:37 -08:00
test_pii_redaction.py fix(privacy): skip PII redaction on Discord/Slack (mentions need real IDs) 2026-03-16 05:58:34 -07:00
test_plan_command.py fix: save /plan output in workspace (#1381) 2026-03-14 21:28:51 -07:00
test_platform_base.py fix: complete send_message MEDIA delivery salvage 2026-03-14 04:02:03 -07:00
test_reasoning_command.py feat(gateway): add reasoning hot reload 2026-03-14 02:42:47 -07:00
test_resume_command.py fix(honcho): isolate session routing for multi-user gateway (#1500) 2026-03-16 00:23:47 -07:00
test_retry_replacement.py test: lock retry replacement semantics 2026-03-14 21:19:22 -07:00
test_retry_response.py test(gateway): add regression test for /retry response fix 2026-03-10 23:34:52 -07:00
test_run_progress_topics.py fix(test): add missing _voice_mode attr to GatewayRunner test stubs 2026-03-14 14:27:20 +03:00
test_runner_fatal_adapter.py fix(gateway): harden Telegram polling conflict handling 2026-03-14 12:11:23 -07:00
test_runner_startup_failures.py fix(gateway): restart on retryable startup failures (#1517) 2026-03-16 05:26:31 -07:00
test_send_image_file.py fix(discord): preserve native document and video attachment support 2026-03-14 22:01:02 -07:00
test_session.py fix(gateway): make group session isolation configurable 2026-03-16 00:22:23 -07:00
test_session_env.py fix: preserve thread context for cronjob deliver=origin 2026-03-15 06:57:00 -07:00
test_session_hygiene.py fix(test): add missing _voice_mode attr to GatewayRunner test stubs 2026-03-14 14:27:20 +03:00
test_signal.py fix: Signal adapter parity pass — integration gaps, clawdbot features, env var simplification 2026-03-08 21:00:21 -07:00
test_slack.py test: fix gateway async test event loop usage 2026-03-14 02:52:47 -07:00
test_ssl_certs.py fix(gateway): SSL certificate auto-detection for NixOS and non-standard systems 2026-03-15 23:04:34 -07:00
test_status.py fix(honcho): isolate session routing for multi-user gateway (#1500) 2026-03-16 00:23:47 -07:00
test_status_command.py fix(gateway): make /status report live state and tokens (#1476) 2026-03-15 19:18:58 -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_stt_config.py fix: restore local STT fallback for gateway voice notes 2026-03-15 21:51:40 -07:00
test_telegram_conflict.py fix(gateway): restart on retryable startup failures (#1517) 2026-03-16 05:26:31 -07:00
test_telegram_documents.py test(gateway): cover photo burst interrupt regressions 2026-03-15 03:50:45 -07:00
test_telegram_format.py fix(telegram): escape chunk indicators in MarkdownV2 (#1478) 2026-03-15 19:27:15 -07:00
test_telegram_photo_interrupts.py test(gateway): cover photo burst interrupt regressions 2026-03-15 03:50:45 -07:00
test_title_command.py fix(test): add missing _voice_mode attr to GatewayRunner test stubs 2026-03-14 14:27:20 +03: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 fix(gateway): fall back to sys.executable -m hermes_cli.main when hermes not on PATH 2026-03-14 12:15:51 -07:00
test_voice_command.py refactor: centralize slash command registry (#1603) 2026-03-16 23:21:03 -07:00
test_whatsapp_connect.py fix(whatsapp): replace Linux-only fuser with cross-platform port cleanup 2026-03-05 17:13:14 +03:00