Adaptadores de plataforma
Responsabilidad
Cada plataforma (Telegram, Discord, Slack, Signal, WhatsApp, WeChat, QQ…) tiene un adaptador que traduce los eventos nativos de la plataforma a un MessageEvent unificado, y las acciones de envío unificadas de vuelta a la API de la plataforma. Los adaptadores heredan de BasePlatformAdapter e implementan un puñado de métodos abstractos. Pueden venir del gateway/platforms/ integrado o de plugins en plugins/platforms/; todos se registran a través de PlatformRegistry.
Archivos clave
class BasePlatformAdapter(ABC):2317— clase base abstracta del adaptadormétodos abstractos send / send_draft:2983-3015— interfaz de envío que las subclases deben implementarMessageType / ProcessingOutcome / MessageEvent:1737-1759— modelo unificado de eventosCachedMedia:1638-1737— caché de medios (evita reuploads)SendResult / EphemeralReply:1898-2068— resultado de envío y respuesta efímerahelpers de envío comunes:3173-3326—send_slash_confirm/send_clarify/send_typing/send_multiple_imagesdirectorio gateway/platforms/— signal / whatsapp_cloud / weixin / bluebubbles / yuanbao / qqbot…directorio plugins/platforms/— Telegram / Discord / Slack (como plugins)ADDING_A_PLATFORM.md— guía para añadir plataformasPlatformRegistry:162— registro (register / register_deferred / unregister)
Flujo de datos
- En el arranque,
GatewayRunner(gateway/run.py:3029) levanta los adaptadores vía_start_one_profile_adapter:9389. - El adaptador se consulta en
PlatformRegistry(gateway/platform_registry.py:162) por nombre, soportando carga diferida (registro de placeholder barato, import real solo cuando se usa). - El adaptador escucha eventos de la plataforma, los traduce a
MessageEvent:1759y los entrega a_handle_message:9947. - El agent produce streaming; el adaptador lo entrega de vuelta a la plataforma vía las interfaces unificadas (
send:3008/send_draft); los medios pasan por la cachéCachedMedia:1638. - Las diferencias entre plataformas (longitud de mensaje, texto enriquecido, límites de imágenes) las absorbe internamente el adaptador; el núcleo del gateway no se entera.
Resumen
Adaptador = traductor entre «dialecto de plataforma ↔ evento unificado». Añadir una plataforma solo requiere heredar de BasePlatformAdapter, implementar unos pocos métodos abstractos y registrarse; ver gateway/platforms/ADDING_A_PLATFORM.md. Telegram/Discord/Slack van por la vía de plugins, tratados igual que los adaptadores integrados.