Ampliando blocos de mensagens de chat

Olá a todos,

Gostaria de desenvolver um plugin para exibir notificações de atividade do GitLab/GitHub no Discourse Chat, ou, mais amplamente, qualquer tipo de evento periódico.

Para uma saída mais rica, gostaria de exibir a atividade como um cartão, e notei que as mensagens do chat possuem um campo JSON blocks, que parece útil para esse propósito. Infelizmente, no momento, os tipos de blocos não parecem ser extensíveis sem modificar os internals do Chat: o esquema, os serializadores e o renderizador do frontend enumeram todos os tipos de bloco/elemento suportados.

Seria possível tornar blocks um ponto de extensão para plugins, ou os plugins deveriam tratá-lo como um detalhe de implementação interno?

Concretamente, o Discourse estaria aberto a:

  1. um tipo de bloco genérico de evento/cartão no núcleo (core), ou
  2. uma API de plugin do tipo registerChatBlockType?

Posso recorrer à renderização de Markdown e à decoração das mensagens de chat processadas no lado do cliente, mas os blocos estruturados parecem um modelo mais limpo, caso essa direção seja considerada viável.

Não está no topo do nosso roteiro no momento, mas você pode descrever que tipo de API você acha que precisaria?

Principalmente, gostaria de ter uma API que permitisse a um plugin:

  1. Registrar um nome para um tipo de bloco de mensagem de chat, pertencente àquele plugin
  2. Opcionalmente, fornecer um validador de esquema JSON para esse bloco
  3. Registrar um renderizador para esse bloco

Tudo isso pode ser implementado por meio de patches, mas se houver uma API oficial, a estabilidade e a segurança seriam melhores. Meu caso de uso são notificações de atividade do Forge, mas imagino que existam outras aplicações (RSS como alternativa ao plugin RSS, feeds de redes sociais, etc).