| """ |
| Shared platform registry for Hermes Agent. |
| |
| Single source of truth for platform metadata consumed by both |
| skills_config (label display) and tools_config (default toolset |
| resolution). Import ``PLATFORMS`` from here instead of maintaining |
| duplicate dicts in each module. |
| """ |
|
|
| from collections import OrderedDict |
| from typing import NamedTuple |
|
|
|
|
| class PlatformInfo(NamedTuple): |
| """Metadata for a single platform entry.""" |
| label: str |
| default_toolset: str |
|
|
|
|
| |
| PLATFORMS: OrderedDict[str, PlatformInfo] = OrderedDict([ |
| ("cli", PlatformInfo(label="π₯οΈ CLI", default_toolset="hermes-cli")), |
| ("telegram", PlatformInfo(label="π± Telegram", default_toolset="hermes-telegram")), |
| ("discord", PlatformInfo(label="π¬ Discord", default_toolset="hermes-discord")), |
| ("slack", PlatformInfo(label="πΌ Slack", default_toolset="hermes-slack")), |
| ("whatsapp", PlatformInfo(label="π± WhatsApp", default_toolset="hermes-whatsapp")), |
| ("signal", PlatformInfo(label="π‘ Signal", default_toolset="hermes-signal")), |
| ("bluebubbles", PlatformInfo(label="π BlueBubbles", default_toolset="hermes-bluebubbles")), |
| ("email", PlatformInfo(label="π§ Email", default_toolset="hermes-email")), |
| ("homeassistant", PlatformInfo(label="π Home Assistant", default_toolset="hermes-homeassistant")), |
| ("mattermost", PlatformInfo(label="π¬ Mattermost", default_toolset="hermes-mattermost")), |
| ("matrix", PlatformInfo(label="π¬ Matrix", default_toolset="hermes-matrix")), |
| ("dingtalk", PlatformInfo(label="π¬ DingTalk", default_toolset="hermes-dingtalk")), |
| ("feishu", PlatformInfo(label="πͺ½ Feishu", default_toolset="hermes-feishu")), |
| ("wecom", PlatformInfo(label="π¬ WeCom", default_toolset="hermes-wecom")), |
| ("wecom_callback", PlatformInfo(label="π¬ WeCom Callback", default_toolset="hermes-wecom-callback")), |
| ("weixin", PlatformInfo(label="π¬ Weixin", default_toolset="hermes-weixin")), |
| ("qqbot", PlatformInfo(label="π¬ QQBot", default_toolset="hermes-qqbot")), |
| ("webhook", PlatformInfo(label="π Webhook", default_toolset="hermes-webhook")), |
| ("api_server", PlatformInfo(label="π API Server", default_toolset="hermes-api-server")), |
| ("cron", PlatformInfo(label="β° Cron", default_toolset="hermes-cron")), |
| ]) |
|
|
|
|
| def platform_label(key: str, default: str = "") -> str: |
| """Return the display label for a platform key, or *default*.""" |
| info = PLATFORMS.get(key) |
| return info.label if info is not None else default |
|
|