Núcleo del gateway
Responsabilidad
El gateway es el puente entre el agent y el mundo exterior: recibe mensajes de cada plataforma (Telegram/Discord/Slack/Signal/WeChat…), los convierte a un MessageEvent unificado que entrega al agent, y traduce la salida en streaming del agent en acciones de envío a cada plataforma. gateway/run.py es el proceso principal de esta capa (GatewayRunner), y coordina adaptadores, sesiones, consumo de streams, libro de entrega, hooks y latido de cron.
Archivos clave
class GatewayRunner:3029— clase principal del gateway, mezcla capacidades de auth/Kanban/Slash_handle_message:9947— entrada de despacho de mensajes entrantes_handle_message_with_agent:11956— entrega el mensaje al agent para correr un turno_start_one_profile_adapter / _start_secondary:9389-9947— arranca los adaptadores de plataforma de cada profile_start_stream_consumer:21218— arranca el consumidor de streams_start_gateway_housekeeping:22246— inspección periódica (60s)_start_cron_ticker:22335— latido de cron (60s)def main:22965— entrada del proceso gatewayexcepciones y redacción:276-340—_gateway_loop_exception_handler/_redact_gateway_user_facing_secretsPlatformEntry:39-162— dataclass de registro de plataformaclass PlatformRegistry:162-260— registro (register / register_deferred / unregister)
Flujo de datos
main()(gateway/run.py:22965) arrancaGatewayRunner._start_one_profile_adapter:9389levanta uno a uno los adaptadores de plataforma (ver Adaptadores de plataforma).- El adaptador recibe eventos nativos de la plataforma y los traduce a un
MessageEventunificado (vergateway/platforms/base.py:1759). _handle_message(gateway/run.py:9947) despacha: comprobación de autorización, resolución de sesión, enrutado de slash commands, o entrega a_handle_message_with_agent(gateway/run.py:11956).- Este último llama a
run_conversation:588del agent y conecta el callback de streaming alGatewayStreamConsumer:83. - La salida en streaming edita progresivamente el mensaje de la plataforma a través del consumidor; el estado final lo anota
delivery_ledgerpara que un crash no pierda la respuesta final. - La inspección y el latido de cron corren en segundo plano cada 60s (
gateway/run.py:22246/gateway/run.py:22335).
Resumen
El núcleo del gateway es «bus de eventos + puente de streaming»: la abstracción unificada de MessageEvent oculta las diferencias entre plataformas, GatewayStreamConsumer puentea el callback síncrono del agent al envío asíncrono en cada plataforma, y delivery_ledger garantiza que el estado final no se pierda. Está desacoplado del agent: el agent solo corre el bucle; los detalles de entrega viven todos en el gateway.