Skip to content

Gateway

O Gateway e o plano de controle central do Triggerfish -- um servico local de longa execucao que coordena sessoes, canais, ferramentas, eventos e processos de agentes por meio de um unico endpoint WebSocket. Tudo o que acontece no Triggerfish flui pelo Gateway.

Arquitetura

Arquitetura do Gateway: os canais a esquerda se conectam pelo Gateway central aos servicos a direita

O Gateway escuta em uma porta configuravel (padrao 18789) e aceita conexoes de adaptadores de canal, comandos CLI, apps complementares e servicos internos. Toda a comunicacao usa JSON-RPC sobre WebSocket.

Servicos do Gateway

O Gateway fornece estes servicos por meio de seus endpoints WebSocket e HTTP:

ServicoDescricaoIntegracao de seguranca
SessoesCriar, listar, obter historico, enviar entre sessoes, gerar tarefas em segundo planoTaint de sessao rastreado por sessao
CanaisRotear mensagens, gerenciar conexoes, retentar entregas falhas, dividir mensagens grandesVerificacao de classificacao em toda saida
CronAgendar tarefas recorrentes e disparar ativacoes a partir do TRIGGER.mdAcoes cron passam por hooks de politicas
WebhooksAceitar eventos de entrada de servicos externos via POST /webhooks/:sourceIdDados de entrada classificados na ingestao
RippleRastrear status online e indicadores de digitacao entre canaisSem dados sensiveis expostos
ConfiguracaoRecarga a quente de configuracoes sem reinicioApenas administrador no nivel empresarial
UI de controlePainel web para saude e gerenciamento do GatewayAutenticado por token
Tide PoolHospedar workspace visual A2UI dirigido pelo agenteConteudo sujeito a hooks de saida
NotificacoesEntrega de notificacoes multicanal com roteamento por prioridadeRegras de classificacao se aplicam

Protocolo WebSocket JSON-RPC

Os clientes se conectam ao Gateway via WebSocket e trocam mensagens JSON-RPC 2.0. Cada mensagem e uma chamada de metodo com parametros tipados e uma resposta tipada.

typescript
// O cliente envia:
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sessions.list",
  "params": { "filter": "active" }
}

// O Gateway responde:
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": [
    { "id": "sess_abc", "taint": "CONFIDENTIAL", "channel": "telegram" },
    { "id": "sess_def", "taint": "PUBLIC", "channel": "cli" }
  ]
}

O Gateway tambem serve endpoints HTTP para ingestao de webhooks. Quando um SchedulerService e acoplado, as rotas POST /webhooks/:sourceId ficam disponiveis para eventos de webhook de entrada.

Interface do servidor

typescript
interface GatewayServerOptions {
  /** Porta para escutar. Use 0 para uma porta disponivel aleatoria. */
  readonly port?: number;
  /** Token de autenticacao para conexoes. */
  readonly authToken?: string;
  /** Servico de agendamento opcional para endpoints de webhook. */
  readonly schedulerService?: SchedulerService;
}

interface GatewayAddr {
  readonly port: number;
  readonly hostname: string;
}

interface GatewayServer {
  /** Iniciar o servidor. Retorna o endereco vinculado. */
  start(): Promise<GatewayAddr>;
  /** Parar o servidor de forma controlada. */
  stop(): Promise<void>;
}

Autenticacao

As conexoes ao Gateway sao autenticadas com um token. O token e gerado durante a configuracao (triggerfish dive) e armazenado localmente.

SEGURANCA O Gateway se vincula a 127.0.0.1 por padrao e nao e

exposto a rede. O acesso remoto requer configuracao explicita de tunel. Nunca exponha o WebSocket do Gateway a internet publica sem autenticacao. :::

Gerenciamento de sessoes

O Gateway gerencia o ciclo de vida completo das sessoes. As sessoes sao a unidade fundamental do estado de conversa, cada uma com rastreamento de taint independente.

Tipos de sessoes

TipoPadrao de chaveDescricao
PrincipalmainConversa direta principal com o proprietario. Persiste entre reinicializacoes.
Canalchannel:<type>:<id>Uma por canal conectado. Taint isolado por canal.
Segundo planobg:<task_id>Gerada para jobs cron e tarefas disparadas por webhook. Inicia com taint PUBLIC.
Agenteagent:<agent_id>Sessoes por agente para roteamento multiagente.
Grupogroup:<channel>:<group_id>Sessoes de chat em grupo.

Ferramentas de sessao

O agente interage com as sessoes por meio destas ferramentas, todas roteadas pelo Gateway:

FerramentaDescricaoImplicacoes de taint
sessions_listListar sessoes ativas com filtros opcionaisSem mudanca de taint
sessions_historyObter transcricao de uma sessaoTaint herda da sessao referenciada
sessions_sendEnviar mensagem para outra sessaoSujeito a verificacao de write-down
sessions_spawnCriar sessao de tarefa em segundo planoNova sessao inicia com taint PUBLIC
session_statusVerificar estado atual, modelo e custo da sessaoSem mudanca de taint

A comunicacao entre sessoes via sessions_send esta sujeita as mesmas

regras de write-down que qualquer outra saida. Uma sessao CONFIDENTIAL nao pode enviar dados para uma sessao conectada a um canal PUBLIC. :::

Roteamento de canais

O Gateway roteia mensagens entre canais e sessoes por meio do roteador de canais. O roteador gerencia:

  • Portao de classificacao: Cada mensagem de saida passa por PRE_OUTPUT antes da entrega
  • Retentativa com backoff: Entregas falhas sao retentadas com backoff exponencial via sendWithRetry()
  • Divisao de mensagens: Mensagens grandes sao divididas em blocos apropriados para a plataforma (ex.: o limite de 4096 caracteres do Telegram)
  • Streaming: Respostas sao transmitidas em streaming para canais que suportam
  • Gerenciamento de conexoes: connectAll() e disconnectAll() para gerenciamento do ciclo de vida

Servico de notificacoes

O Gateway integra um servico de notificacoes de primeira classe que substitui os padroes ad-hoc de "notificar o proprietario" em toda a plataforma. Todas as notificacoes fluem por um unico NotificationService.

typescript
interface NotificationService {
  notify(recipient: UserId, notification: Notification): Promise<void>;
  getPreferences(userId: UserId): Promise<NotificationPreference>;
  setPreferences(userId: UserId, prefs: NotificationPreference): Promise<void>;
  getPending(userId: UserId): Promise<Notification[]>;
}

Roteamento por prioridade

PrioridadeComportamento
CRITICALIgnora horarios de silencio, entrega em TODOS os canais conectados imediatamente
HIGHEntrega no canal preferido imediatamente, enfileira se offline
NORMALEntrega na sessao ativa, ou enfileira para o proximo inicio de sessao
LOWEnfileira, entrega em lotes durante sessoes ativas

Fontes de notificacoes

FonteCategoriaPrioridade padrao
Violacoes de politicassecurityCRITICAL
Alertas de inteligencia de ameacassecurityCRITICAL
Solicitacoes de aprovacao de skillsapprovalHIGH
Falhas de jobs cronsystemHIGH
Avisos de saude do sistemasystemHIGH
Disparadores de eventos webhookinfoNORMAL
Atualizacoes disponiveis no The ReefinfoLOW

As notificacoes sao persistidas via StorageProvider (namespace: notifications:) e sobrevivem a reinicializacoes. Notificacoes nao entregues sao retentadas no proximo inicio do Gateway ou conexao de sessao.

Preferencias de entrega

Os usuarios configuram preferencias de notificacao por canal:

yaml
notifications:
  preferred_channel: telegram
  quiet_hours:
    start: "22:00"
    end: "07:00"
    timezone: "America/Chicago"
  overrides:
    security: all_channels
    approval: preferred_channel
    info: active_session

Integracao com o agendador

O Gateway hospeda o servico de agendamento, que gerencia:

  • Loop de tick cron: Avaliacao periodica de tarefas agendadas
  • Ativacoes de trigger: Ativacoes do agente definidas em TRIGGER.md
  • Endpoints HTTP de webhook: POST /webhooks/:sourceId para eventos de entrada
  • Isolamento de orquestrador: Cada tarefa agendada roda em seu proprio OrchestratorFactory com estado de sessao isolado

As tarefas disparadas por cron e por webhook geram sessoes em segundo

plano com taint PUBLIC limpo. Elas nao herdam o taint de nenhuma sessao existente, garantindo que tarefas autonomas iniciem com um estado de classificacao limpo. :::

Saude e diagnosticos

O comando triggerfish patrol se conecta ao Gateway e executa verificacoes de saude diagnosticas, conferindo:

  • O Gateway esta rodando e respondendo
  • Todos os canais configurados estao conectados
  • O armazenamento esta acessivel
  • As tarefas agendadas estao sendo executadas no horario
  • Nao ha notificacoes criticas nao entregues presas na fila