Skip to content

MelisAICommunityExtensions

Injeta geração por IA nas superfícies de edição existentes do CMS — criador de mini-templates, criador de conteúdo de notícias e botões de IA nas zonas de arrastar e largar. No back-office React fornece um brick de extensão (injeção no host) sem página própria. Pacote melisplatform/melis-ai-community-extensions.

Objetivo

O MelisAICommunityExtensions é uma camada aplicacional sobre a suite MelisAI que integra a geração por IA diretamente nas superfícies de edição existentes. Regista duas instâncias pré-configuradas (minitemplatecreator e newscontentcreator), um conjunto de ferramentas MCP e um conjunto de listeners de eventos que gerem o ciclo de vida dos recursos de front-end gerados por IA (CSS, JS, imagens). Não tem ecrã de ferramenta autónomo; em vez disso, injeta botões Generate with AI e modais de chat no Gestor de Mini-Templates, no editor de Notícias e nas zonas de arrastar e largar das páginas. O chat de IA em si é servido pelo MelisAI / MelisAIEngine — este módulo fornece apenas a interface envolvente e a ligação de entrada/saída.

Como ativar

Adicione a config/melis.module.load.php:

php
return [
    'MelisAICommunityExtensions',
];

Requer melisplatform/melis-ai. Execute o dbdeploy após a ativação — o módulo insere as linhas de agente/instância minitemplatecreator e newscontentcreator nas tabelas do motor MelisAI (dbdeploy: true). Integra-se com o MelisCms e o MelisCmsNews.

Onde reside no back-office React

O brick React é um brick de extensão / injeção no host: não desenha nenhuma página e não adiciona nenhuma entrada na barra lateral. Ao carregar, regista dois pontos de extensão do host em window que as páginas React de outros módulos invocam para renderizar o botão Generate with AI inline, além de um widget Header sempre montado (MiniTemplateAiDialogHost) que ancora o diálogo de edição de página acima dos frames de edição legados.

Como não tem rota, não há nada para onde navegar — encontra-o dentro de outras ferramentas:

  • Editor de Notícias (MelisCmsNews) → separador Texts → botão por parágrafo.
  • Gestor de Mini-Templates (MelisCms) → campo Template's HTML → botão.
  • Edição de página (arrastar e largar do MelisCms) → botão da zona / do plugin de tag HTML.

Condicionado pela ativação de dois módulos. Os botões só aparecem se ambos o MelisAICommunityExtensions e o MelisAI estiverem ativos (verificado em tempo real através do __melisIsModuleActive do host, suportado por GET /melis/react-api/react-modules). O MelisAI é obrigatório porque serve o chat; se qualquer um dos módulos for desativado a meio da sessão, os botões desaparecem sem recarregar. O brick não contribui com nenhum nó de capacidade — a visibilidade é puramente esta verificação de dois módulos.

Superfícies de edição do back-office

São estendidas três superfícies de edição. Em cada uma, um botão de IA abre um chat com âmbito definido e o resultado é escrito de volta no campo correto.

AI Mini-Template Creator

No Gestor de Mini-Templates, o campo Template's HTML apresenta um botão Generate with AI renderizado pelo ponto de extensão renderHtmlActions(). Abre um diálogo em janela completa: chat de IA + lista de templates existentes à esquerda, pré-visualização em tempo real à direita (os dois painéis colapsam em separadores segmentados AI & Templates / Preview em larguras reduzidas). O chat usa a instância minitemplatecreator, começa do zero a cada abertura (clearSession) e volta a buscar o shell real do site a cada resultado da IA, para que o CSS/JS recém-escrito seja refletido.

O Gestor de Mini-Templates, lista por site com o ponto de entrada Generate with AI

O chat minitemplatecreator a gerar um template, pré-visualizado contra o shell real do site

Cada linha na lista de templates apresenta um ícone Melis-AI: clique nele para gerar um novo template usando esse como referência de base (o chat volta a correr semeado com a marcação do template selecionado). Insert captura uma miniatura PNG da pré-visualização (html2canvas) e preenche o formulário; o próprio submit do formulário guarda-o.

O ícone Melis-AI numa linha de template — variar ou duplicar um template existente com IA

O formulário Add mini-template — Generate with AI junto ao campo HTML

News Content Creator

No separador Texts do editor de Notícias, cada Paragraph recebe um botão Generate with AI (por idioma) renderizado pelo ponto de extensão renderParagraphActions(). Abre um modal compacto com o chat newscontentcreator, com âmbito no artigo (semeado com o título, o subtítulo, os restantes parágrafos e as imagens do artigo). A resposta substitui o texto desse parágrafo e marca-o como validado. As sessões são isoladas por artigo através de um id de instância newscontentcreator|<newsId>.

O separador Texts das Notícias — a barra de cabeçalho de cada parágrafo apresenta a ação Generate with AI

O chat newscontentcreator, consciente do contexto do artigo

Generate with AI nas zonas de arrastar e largar

Ao editar uma página CMS, as zonas de arrastar e largar vazias (e os plugins de tag HTML) recebem um botão Generate with AI injetado. Como a edição de página é um iframe legado abaixo do shell React, o botão pede ao host React que abra o mesmo diálogo de Mini-Template descrito acima. Ao aceitar, são oferecidas três opções de confirmação: Close, Insert (largar apenas nesta zona) ou Save & Insert (largar e também promover o bloco a mini-template reutilizável permanente).

Uma zona de arrastar e largar vazia com o botão Generate with AI injetado

Um bloco totalmente estilizado gerado diretamente na zona da página

A escolha de confirmação Close / Insert / Save & Insert para um bloco gerado

O brick

ui-react/ é uma biblioteca IIFE Vite (nome MelisAiCommunityExtensionsBrick, saída public/ui-react/brick.js). O React, o react-dom e o react-router-dom são externalizados para as variáveis globais do host; um alias @melis-ai-engine importa o componente de chat partilhado AiChatContainer.

FicheiroPapel
src/brick.tsxRegista os dois pontos de extensão + o Header; injeta o Tailwind uma vez.
src/NewsAiExtension.tsxrenderParagraphActions() → botão por parágrafo + modal (instância newscontentcreator).
src/MiniTemplateAiExtension.tsxrenderHtmlActions() → o MiniTemplateAiDialog em janela completa (chat + lista + pré-visualização; Insert / Save & Insert; miniatura html2canvas).
src/MiniTemplateAiDialogHost.tsxA âncora Header para a edição de página; escuta melis-ai-minitemplate-open e monta o diálogo.

O brick regista-se com nenhum Component e nenhuma Sidebar — apenas pontos de extensão protegidos e a âncora Header:

ts
window.__melisNewsExtensions.renderParagraphActions = /* guarded by isModuleActive() */
window.__melisMiniTemplateExtensions.renderHtmlActions = /* guarded by isModuleActive() */
window.__melisRegisterBrick?.({ id: 'melis-ai-community-extensions', Header: MiniTemplateAiDialogHost })

Endpoints que o brick invoca

O brick não tem config/react-api.php. Consome endpoints pertencentes a outros módulos, além de uma ação MVC legada própria:

ChamadaProprietário
GET /melis/react-api/cms-mini-templates?site=<m>&limit=9999MelisCms (lista de templates)
GET /melis/react-api/cms-mini-templates/item?site=<m>&name=<n>MelisCms (HTML de um template)
GET /melis/MelisAICommunityExtensions/MiniTemplate/getMiniTemplatePreviewShell?siteModule=<m>este módulo (MVC legado; devolve o HTML do shell do site)
Tráfego de execução/saída do AiChatContainerMelisAI / MelisAIEngine

A resposta do chat regressa ao campo do host através de um callback de window declarado nos parâmetros de saída (masse_exit_js_callback): __melisNewsAiCallback_<paraIdx> para as notícias, __melisMiniTemplateAiCallback para os mini-templates.

Integração com o host (ponte de edição de página)

A edição de página corre vários frames abaixo do shell React, pelo que o MiniTemplateAiDialogHost define window.__melisAiMiniTemplateDialogReady = true e escuta um evento melis-ai-minitemplate-open. A página editada executa public/js/minitemplate/react-bridge.js, que percorre a cadeia de frames para cima à procura de __melisAiMiniTemplateDialogReady; quando encontrado, despacha o evento de abertura com callbacks onInsert / onSaveInsert de mesma origem. Se não for encontrado nenhum host React (/melis legado), a ponte recua para o modal Bootstrap histórico — nada muda aí.

Para ferramentas legadas exibidas na vista React "Old", o config/module.config.php regista melis_react_override.toolpage_extensionsPluginViewToolPageExtension, que injeta o tool.js / style.css deste módulo para que os jsCallbacks enxertados nas ferramentas MelisCms / MelisCmsNews encontrem as suas variáveis globais.

Listeners de eventos

ListenerEventoEfeito
…TinyMCEConfigurationListenermeliscore_tinymce_configAponta o plugin minitemplate do TinyMCE para o JS deste módulo.
…CreateMiniTemplateListenermeliscms_mini_template_manager_create_endMove o CSS/JS/imagens temporários para armazenamento permanente; renomeia o JS de inicialização por template.
…PublishPageListenermeliscms_page_publish_startPromove os recursos temporários referenciados por uma página publicada; atualiza page_content.
…SanitizeSavedPluginHtmlListenermeliscms_page_savesession_plugin_startLimpa a marcação de runtime de carrossel/slider (artefactos Owl/Slick/Swiper) antes de guardar.
…DeleteMiniTemplateAssetsListenermeliscms_mini_template_manager_delete_endElimina o CSS/JS/imagens do template.
…AttachAIGeneratedCssListenerMvcEvent::EVENT_FINISH (front + back)Injeta o CSS/JS de IA nas páginas renderizadas.
…InjectDndAiButtonListenerMvcEvent::EVENT_FINISHInjeta o botão Generate with AI nas zonas de arrastar e largar legadas.

O módulo também regista um MelisPluginRendererOverride para que os recursos de IA sejam injetados corretamente durante a renderização de plugins.

Servidor MCP

Um servidor MCP stdio minitemplate_creator (ponto de entrada mcp/minitemplatecreator/bin/server.php) está registado em config['mcp']['servers']. As ferramentas abaixo são declaradas com mcp: true:

FerramentaParâmetrosObjetivo
readSiteAssetssiteModule, templateRequestDevolve os ficheiros CSS/JS/vista relevantes do site para que a IA corresponda ao design real.
getSitePublicUrlsiteModuleDevolve o URL/domínio público do site para inspeção visual antes de gerar.
uploadMinitemplateImagessiteModule, image, filenameGuarda uma imagem (base64/data-URL/HTTP) no diretório temporário de IA e devolve um caminho web para <img src>.
renderMinitemplatePreviewsiteModuleAciona a pré-visualização do template gerado no editor.

O agente minitemplatecreator também tem as ferramentas de sistema de ficheiros do motor (createFile / readFile / updateFiles / …) na sua allow-list. A meio da conversa, o diálogo React regista window.melisReactActionMap.preview_minitemplate para que o motor possa enviar o bloco html gerado para a pré-visualização em tempo real quando render_minitemplate_preview retorna.

Tabelas da base de dados

Este módulo não cria tabelas próprias. Os seus deltas de dbdeploy inserem linhas em tabelas pertencentes ao melis-ai:

TabelaContém
melis_ai_instancesAs instâncias semeadas minitemplatecreator e newscontentcreator.
melis_ai_agentsOs agentes semeados para as duas instâncias.

Em tempo de execução, os dados de notícias são acedidos através de NewsTable (getNewsData($newsId)), que faz o join com a tabela do site para resolver o siteModule necessário para colocar as imagens geradas.

Ficheiros-chave

AssuntoCaminho
Configuração do módulo (rota MVC, toolpage_extensions)vendor/melisplatform/melis-ai-community-extensions/config/module.config.php
Código-fonte do brickvendor/melisplatform/melis-ai-community-extensions/ui-react/src/
Brick compiladovendor/melisplatform/melis-ai-community-extensions/public/ui-react/{brick.js, brick.manifest.json}
Ponte de frames da edição de páginavendor/melisplatform/melis-ai-community-extensions/public/js/minitemplate/react-bridge.js
Declaração das ferramentas MCPvendor/melisplatform/melis-ai-community-extensions/config/mcp.tools.php
Controlador de mini-templatesvendor/melisplatform/melis-ai-community-extensions/src/Controller/MiniTemplateController.php
Controlador de notíciasvendor/melisplatform/melis-ai-community-extensions/src/Controller/NewsController.php
Injetor da vista "Old"vendor/melisplatform/melis-ai-community-extensions/src/Controller/React/PluginViewToolPageExtension.php
Listenersvendor/melisplatform/melis-ai-community-extensions/src/Listener/
Helper do botão Generate-with-AIvendor/melisplatform/melis-ai-community-extensions/src/View/Helper/MelisGenerateWithAIBtnHelper.php
Gateway da tabela de notíciasvendor/melisplatform/melis-ai-community-extensions/src/Model/Tables/NewsTable.php
Ponto de entrada do servidor MCPvendor/melisplatform/melis-ai-community-extensions/mcp/minitemplatecreator/bin/server.php
Diretório de recursos de IApublic/miniTemplatesTinyMce/AI/{siteModule}/{temp|css|js|images}/
Deltas de instalação (agentes semeados)vendor/melisplatform/melis-ai-community-extensions/install/dbdeploy/

Ver também: MelisAIEngine, MelisAI, MelisAIToolCreator, MelisCms, MelisCmsNews