@praxisui/page-builder 8.0.0-beta.0 → 8.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -28,6 +28,7 @@ Peer dependencies (Angular v20):
28
28
  - `@angular/forms` `^20.0.0`
29
29
  - `@angular/cdk` `^20.0.0`
30
30
  - `@angular/material` `^20.0.0`
31
+ - `@praxisui/ai` `*`
31
32
  - `@praxisui/core` `*`
32
33
  - `@praxisui/settings-panel` `*`
33
34
 
@@ -42,6 +43,10 @@ Este pacote expoe o shell ativo do builder canonico de pagina dinamica:
42
43
  Conexoes continuam pertencendo ao contrato `WidgetPageDefinition`, mas a criacao/manutencao delas nesta fase deve acontecer por JSON/configuracao canonica e nao por builder/graph/editor visual legado.
43
44
  O viewer ativo nesta fase existe apenas para inspecao contextual do contrato canonico e nao para editar links inline.
44
45
 
46
+ Nested component ports devem ser modeladas no mesmo contrato `composition.links`, usando `component-port + nestedPath`.
47
+ O viewer representa o endpoint nested como sub-identidade do owner top-level, sem criar um no de canvas separado para o widget filho.
48
+ Planos de IA (`UiCompositionPlan`) tambem devem usar `nestedPath` para widgets internos; nao gere `widgetEvent`, wrappers host-specific ou `bindingPath` profundo como caminho principal para nested ports.
49
+
45
50
  ## AI Capabilities Registration
46
51
 
47
52
  Para que o assistente de IA consiga configurar os inputs dos widgets, registre os catalogos de capacidades no bootstrap da aplicacao.
@@ -89,6 +94,47 @@ registerWidgetAiCatalogs({
89
94
  Registro via token:
90
95
  - Use o InjectionToken `PAGE_BUILDER_WIDGET_AI_CATALOGS` para fornecer o mapa no host.
91
96
 
97
+ ## Agentic Authoring
98
+
99
+ Para gerar uma página a partir de um prompt usando o backend canônico do `praxis-config-starter`, configure `PageBuilderAgenticAuthoringService` com o endpoint interno opt-in `/api/praxis/config/ai/authoring`.
100
+
101
+ O chrome conversacional do assistente usa `PraxisAiAssistantShellComponent` de `@praxisui/ai`. O Page Builder continua dono da semântica agentic de página: resolução de intenção, preview, apply, save, reopen e compilação do plano validado para `WidgetPageDefinition`.
102
+
103
+ ```ts
104
+ import { PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS } from '@praxisui/page-builder';
105
+
106
+ providers: [
107
+ {
108
+ provide: PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS,
109
+ useValue: {
110
+ baseUrl: '/api/praxis/config/ai/authoring',
111
+ headersFactory: () => ({
112
+ 'X-Tenant-ID': tenantId,
113
+ 'X-User-ID': userId,
114
+ 'X-Env': 'local',
115
+ }),
116
+ },
117
+ },
118
+ ]
119
+ ```
120
+
121
+ Fluxo canônico:
122
+
123
+ - `resolveIntent` envia todo prompt de authoring, pagina atual e widget selecionado para resolver operacao, recurso, schema, surface e elegibilidade no backend canonico. O Page Builder nao deve inferir intencao, recurso ou operacao por heuristica local antes dessa chamada.
124
+ - `previewPage` envia o prompt junto de `intentResolution` elegivel e recebe `MinimalFormPlan` + `CompiledFormPatch`.
125
+ - Hosts podem habilitar `[agenticAuthoringEnableStreaming]="true"` para usar `/api/praxis/config/ai/authoring/turn/stream/**`. O Page Builder consome eventos SSE de progresso e usa o `result` terminal como a mesma fonte de preview; se o endpoint de start ainda nao estiver disponivel, o fluxo pode voltar para `resolveIntent` + `previewPage`. Depois que a conexao SSE e iniciada, erros de transporte sao tolerados por uma janela curta de reconexao e, se persistirem, sao exibidos como falha do stream em vez de disparar uma segunda execucao sincrona silenciosa.
126
+ - Em streaming, a conversa deve refletir estados intermediarios do turno, como resolucao de intencao, selecao de recurso, planejamento e geracao de preview. Nao trate o SSE apenas como transporte do resultado final: cada `PraxisAssistantTurnViewState` emitido precisa atualizar status, mensagens, anexos, respostas rapidas, diagnosticos e preview disponivel.
127
+ - Para cenarios corporativos, mantenha streaming e diagnosticos como capacidades opt-in do host. Streaming melhora feedback percebido em prompts curtos ou ambiguos; diagnosticos exibem prompt/contexto/catalogos e devem ficar restritos a auditoria, suporte ou ambientes controlados.
128
+ - `resolveIntent` e `previewPage` tambem aceitam `sessionId`, `clientTurnId`, `conversationMessages`, `pendingClarification` e `attachmentSummaries` para que respostas curtas e contexto anexado continuem o turno sem reescrever o prompt no frontend.
129
+ - `attachmentSummaries` deve conter apenas metadados serializaveis (`id`, `name`, `kind`, `mimeType`, `sizeBytes`, `source`, `hasPreview`). O frontend nao envia `File`, bytes, base64 nem URLs locais `blob:`. Quando uma pergunta de clarificacao nasce de um turno com anexos, o backend pode ecoar esses resumos em `pendingClarification.diagnostics.attachmentSummaries`; o Page Builder reenvia esse estado no proximo turno.
130
+ - Quando `resolveIntent` retornar candidatos ambiguos, o Page Builder deve preservar `quickReplies` como chips clicaveis ricos. Campos como `description`, `icon`, `tone` e `contextHints` pertencem ao contrato do backend e nao devem ser recriados ou descartados no frontend.
131
+ - Hosts podem habilitar `[agenticAuthoringIncludeLlmDiagnostics]="true"` apenas em cenarios de auditoria/debug. O input adiciona `contextHints.includeLlmDiagnostics=true` nas chamadas `resolveIntent` e, quando o backend retorna `llmDiagnostics`, o Page Builder mostra esse JSON em um painel tecnico separado da conversa. O padrao permanece desligado para nao expor prompt/contexto operacional em fluxos comuns.
132
+ - Para criacao de dashboard apos escolha de recurso, `previewPage` pode retornar `uiCompositionPlan.layoutPreset=resource-dashboard`; o builder deve aplicar esse plano como preview de pagina, nao tratar o artefato como fluxo restrito a formulario.
133
+ - `PageBuilderAiAdapter.applyCompiledFormPatch` aplica somente `compiledFormPatch.patch.page` no runtime do builder, materializando uma cópia local antes de atualizar a página.
134
+ - `applyPage` persiste a página renderizável corrente após o preview local em `ui_user_config`, com `componentType`, `componentId`, `scope` e `If-Match` delegados ao backend canônico.
135
+
136
+ O frontend não deve persistir o envelope completo do patch como payload de runtime. O envelope fica para preview, auditoria e diagnóstico; o documento salvo é a página renderizável.
137
+
92
138
  ## Settings Panel Bridge
93
139
 
94
140
  Para abrir "Configuracoes da Pagina" e editores de shell no painel lateral, o host deve registrar o bridge do Settings Panel:
@@ -152,6 +198,9 @@ O builder canonico expoe authoring de shell/palette sobre `praxis-dynamic-page`.
152
198
 
153
199
  `page` e um `WidgetPageDefinition` (do `@praxisui/core`) contendo `widgets` e opcionalmente `composition.links`. O envelope `composition` e o caminho `composition.links` formam a superficie canonica persistida para wiring da pagina, com `condition` em Json Logic e `policy` para comportamento operacional.
154
200
 
201
+ Para conectar portas de widgets internos em containers como `praxis-tabs` ou `praxis-expansion`, use `composition.links[].from/to.ref.nestedPath`.
202
+ `ref.widget` continua sendo o owner top-level no canvas, e o ultimo segmento de `nestedPath` deve ser `kind: "widget"` com `key` estavel.
203
+
155
204
  Para conteudo editorial rico dentro da pagina, use um widget `praxis-rich-content`
156
205
  com `definition.inputs.document: RichContentDocument`. Isso evita criar uma DSL
157
206
  local de page-builder para cards, imagens, timelines ou blocos de apresentacao,
@@ -204,6 +253,8 @@ Exports deste pacote:
204
253
  - `WidgetShellEditorComponent`
205
254
  - `DynamicPageConfigEditorComponent`
206
255
  - `DynamicPageBuilderComponent`
256
+ - `PageBuilderAgenticAuthoringService`
257
+ - `PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS`
207
258
 
208
259
  Integracoes comuns:
209
260
  - `SettingsPanelService.open({ id, title, content: { component, inputs } })` para page settings e shell editors