@praxisui/page-builder 8.0.0-beta.19 → 8.0.0-beta.20

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
@@ -11,10 +11,10 @@ Ferramentas de edicao para paginas dinamicas canonicas baseadas em `praxis-dynam
11
11
  ## When to use
12
12
 
13
13
  - Montar paginas dinamicas com widgets e layout visual sobre o runtime canonico
14
- - Entregar experiencia de configuracao de pagina/widget sem depender de editor visual de conexoes
14
+ - Entregar experiencia de configuracao de pagina/widget com editor visual canonico de conexoes
15
15
  - Integrar page composition com IA, settings panel e contratos compartilhados do Praxis UI
16
16
 
17
- O pacote permanece focado no shell canonico de authoring em torno de `praxis-dynamic-page`: palette, page settings, widget shell e catalogos de IA. A composicao declarativa de conexoes deve ser feita exclusivamente via JSON/configuracao canonica no `@praxisui/core`; os editores visuais legados de conexoes sairam do escopo ativo desta fase.
17
+ O pacote permanece focado no shell canonico de authoring em torno de `praxis-dynamic-page`: palette, page settings, widget shell, catalogos de IA e edicao visual de `composition.links`. A fonte de verdade das conexoes continua sendo o contrato `WidgetPageDefinition` do `@praxisui/core`; o editor visual apenas materializa esse contrato canonico.
18
18
 
19
19
  ## Instalacao
20
20
 
@@ -37,14 +37,15 @@ Peer dependencies (Angular v20):
37
37
  Este pacote expoe o shell ativo do builder canonico de pagina dinamica:
38
38
  - `ComponentPaletteDialogComponent` para adicionar widgets a pagina.
39
39
  - `FloatingToolbarComponent` e `TileToolbarComponent` para acoes rapidas de add/save/preview/configuracao.
40
- - visualizador inicial de conexoes somente leitura para inspecao de `composition.links`.
40
+ - `ConnectionEditorComponent` para inspecionar, criar e remover conexoes canonicas em `composition.links`.
41
41
  - `WidgetShellEditorComponent` e `DynamicPageConfigEditorComponent` para authoring de shell/canvas sem redefinir a semantica canonica de composicao.
42
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.
44
- O viewer ativo nesta fase existe apenas para inspecao contextual do contrato canonico e nao para editar links inline.
43
+ Conexoes continuam pertencendo ao contrato `WidgetPageDefinition`. O editor visual do Page Builder cria, remove e edita links inline preservando o envelope canonico `page.composition.links`, incluindo `condition` em Json Logic, `policy` operacional e `transform` canônico, sem introduzir modelo paralelo de grafo. O historico de desfazer/refazer do editor e transitorio: ele reemite snapshots canonicos por `pageChange`, mas nao persiste estado de historico dentro da pagina.
44
+
45
+ O roadmap tecnico para evoluir o editor radial esta registrado em [`connection-editor-reference-study.md`](./connection-editor-reference-study.md).
45
46
 
46
47
  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
+ O editor representa o endpoint nested como sub-identidade do owner top-level, sem criar um no de canvas separado para o widget filho.
48
49
  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
50
 
50
51
  ## AI Capabilities Registration
@@ -98,7 +99,7 @@ Registro via token:
98
99
 
99
100
  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
 
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
+ O chrome conversacional do assistente usa `PraxisAiAssistantShellComponent` de `@praxisui/ai`, mas a presença minimizada deve ser renderizada pelo shell da aplicação com `PraxisAiAssistantSessionHostComponent`, lendo o `PraxisAssistantSessionRegistryService`. O Page Builder apenas registra sua sessão com identidade estável e contexto `Page Builder`; a identidade pública continua sendo o copiloto semântico Praxis. 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
 
103
104
  ### Agentic Authoring Manifest
104
105
 
@@ -115,17 +116,30 @@ As fronteiras canônicas são:
115
116
 
116
117
  ```ts
117
118
  import { PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS } from '@praxisui/page-builder';
119
+ import { DomainKnowledgeService, DomainRuleService } from '@praxisui/core';
118
120
 
119
121
  providers: [
120
122
  {
121
123
  provide: PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS,
122
- useValue: {
123
- baseUrl: '/api/praxis/config/ai/authoring',
124
- headersFactory: () => ({
125
- 'X-Tenant-ID': tenantId,
126
- 'X-User-ID': userId,
127
- 'X-Env': 'local',
128
- }),
124
+ useFactory: () => {
125
+ const domainKnowledge = inject(DomainKnowledgeService);
126
+ const domainRules = inject(DomainRuleService);
127
+ return {
128
+ baseUrl: '/api/praxis/config/ai/authoring',
129
+ // Domain Knowledge change-sets stay governed by praxis-config-starter.
130
+ createProjectKnowledgeChangeSet: (request, options) => domainKnowledge.createChangeSet(request, options),
131
+ getProjectKnowledgeChangeSet: (changeSetId, options) => domainKnowledge.getChangeSet(changeSetId, options),
132
+ validateProjectKnowledgeChangeSet: (changeSetId, options) => domainKnowledge.validateChangeSet(changeSetId, options),
133
+ transitionProjectKnowledgeChangeSetStatus: (changeSetId, request, options) =>
134
+ domainKnowledge.transitionChangeSetStatus(changeSetId, request, options),
135
+ applyProjectKnowledgeChangeSet: (changeSetId, options) => domainKnowledge.applyChangeSet(changeSetId, options),
136
+ sharedRuleIntake: (request, options) => domainRules.intake(request, options),
137
+ headersFactory: () => ({
138
+ 'X-Tenant-ID': tenantId,
139
+ 'X-User-ID': userId,
140
+ 'X-Env': 'local',
141
+ }),
142
+ };
129
143
  },
130
144
  },
131
145
  ]
@@ -135,6 +149,7 @@ Fluxo canônico:
135
149
 
136
150
  - `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.
137
151
  - `previewPage` envia o prompt junto de `intentResolution` elegivel e recebe `MinimalFormPlan` + `CompiledFormPatch`.
152
+ - `DomainKnowledgeService` em `@praxisui/core` e o cliente canonico para continuar propostas de Project Knowledge como change-sets governados em `/api/praxis/config/domain-knowledge/change-sets`; o Page Builder pode acionar essa trilha como cockpit, mas nao deve materializar evidencias localmente nem tratar o frontend como fonte primaria da decisao.
138
153
  - 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.
139
154
  - 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.
140
155
  - 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.
@@ -255,7 +270,7 @@ this.settingsPanel.open({
255
270
 
256
271
  - Trate `composition.links` como parte do contrato canonico salvo no JSON da pagina.
257
272
  - Use `composition.links[].condition` para guardas semanticas em Json Logic e `composition.links[].policy` para debounce/distinct/missing-value.
258
- - Quando precisar revisar ligacoes, prefira inspecao textual/versionada do contrato e do runtime, nao um editor visual legado.
273
+ - Quando precisar revisar ligacoes, use o editor visual para interacao e mantenha a inspecao textual/versionada do contrato como fonte de auditoria.
259
274
 
260
275
  ## API (resumo)
261
276
 
@@ -264,10 +279,30 @@ Exports deste pacote:
264
279
  - `FloatingToolbarComponent`
265
280
  - `TileToolbarComponent`
266
281
  - `WidgetShellEditorComponent`
282
+ - `ConnectionEditorComponent`
267
283
  - `DynamicPageConfigEditorComponent`
268
284
  - `DynamicPageBuilderComponent`
269
285
  - `PageBuilderAgenticAuthoringService`
270
286
  - `PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS`
287
+ - `createProjectKnowledgeChangeSet`, `getProjectKnowledgeChangeSet`, `validateProjectKnowledgeChangeSet`, `transitionProjectKnowledgeChangeSetStatus` e `applyProjectKnowledgeChangeSet` permitem que o cockpit continue Project Knowledge citado como `Domain Knowledge` governado por change-set canonico, sempre com validacao, aprovacao, aplicacao e readback seguro no backend.
288
+ - `sharedRuleIntake` permite abrir a trilha governada de `domain-rules/intake` quando o backend devolver `recommendedAuthoringFlow=shared_rule_authoring`; o handoff exportado preserva `endpoint`, `intakeEndpoint`, `nextEndpoint`, `routeGateStatus`, `routeFailureCode`, `routeDecisionSource` e `previewDisposition` para que hosts mostrem a rota canonica completa sem reinterpretar localmente a decisao.
289
+
290
+ Campos de routing no handoff:
291
+ - `routeGateStatus` vem do gate de resolucao de intencao retornado pelo backend, como `route_required`.
292
+ - `routeFailureCode` preserva o motivo canonico, como `intent-resolution-shared-rule-route-required`.
293
+ - `routeDecisionSource` indica se a fonte foi `contextHints.domainCatalog.recommendedAuthoringFlow` ou o gate de resolucao.
294
+ - `previewDisposition` explicita que o preview visual foi bloqueado por rota governada, em vez de sugerir um `componentEditPlan`.
295
+
296
+ Checkpoint operacional de review/publicacao:
297
+ - O Page Builder emite o handoff canonico de `shared_rule_authoring` e oferece um cockpit governado para continuar a decisao sem assumir autoria primaria da regra de negocio.
298
+ - O cockpit chama, por cliente real, a sequencia `definition/intake -> simulation -> governed review -> status transition -> semantic publication confirmation -> publication/materializations -> enforcement validation`.
299
+ - Quando um preview traz `diagnostics.projectKnowledgeAudit`, o cockpit de Project Knowledge pode propor `add_evidence` via `/api/praxis/config/domain-knowledge/change-sets`, validar, aprovar, aplicar e reler a projecao segura sem expor o conteudo bruto da evidencia na UI.
300
+ - Quando o prompt de authoring trouxer um caminho explicito como `/api/helpdesk/chamados`, a validacao do cockpit deve confirmar que o backend preservou esse alvo canonico no handoff, sem re-grounding por vocabulario solto do prompt.
301
+ - Timeline e historico governado sao observabilidade derivada. O cockpit pode exibir indisponibilidade dessa projecao, mas nao deve tratar a timeline como fonte primaria ou bloquear create/simulate/approve/activate quando o backend antigo ainda nao expuser o endpoint.
302
+ - A revisao deve exibir readiness, approvals, warnings, diagnostics e predicted materializations vindos do backend; nao reconstrua heuristicas de publicacao no frontend.
303
+ - A publicacao deve ser uma acao deliberada e confirmada semanticamente antes de chamar `/domain-rules/publications`.
304
+ - Materializacoes resultantes devem ser apresentadas como projecoes derivadas irmas (`option_source`, `backend_validation`, `workflow_action`, `approval_policy` ou futuras camadas), nao como novas regras primarias.
305
+ - A validacao de enforcement no cockpit consulta materializacoes aplicadas e prepara a evidencia para o runtime consumidor; ela nao reimplementa localmente a politica publicada.
271
306
 
272
307
  Integracoes comuns:
273
308
  - `SettingsPanelService.open({ id, title, content: { component, inputs } })` para page settings e shell editors