@praxisui/page-builder 9.0.0-beta.77 → 9.0.0-beta.79
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/ai/component-registry.json +144 -24
- package/fesm2022/praxisui-page-builder.mjs +372 -38
- package/package.json +4 -4
- package/types/praxisui-page-builder.d.ts +15 -1
|
@@ -7,7 +7,7 @@ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
|
7
7
|
import * as i2$1 from '@angular/material/icon';
|
|
8
8
|
import { MatIconModule } from '@angular/material/icon';
|
|
9
9
|
import * as i2$2 from '@praxisui/core';
|
|
10
|
-
import { PraxisIconDirective, BUILTIN_SHELL_PRESETS, providePraxisI18n, PraxisI18nService, GLOBAL_ACTION_CATALOG, getGlobalActionCatalog, PRAXIS_GLOBAL_ACTION_CATALOG, SurfaceOpenActionEditorComponent, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, SETTINGS_PANEL_DATA as SETTINGS_PANEL_DATA$1, deepMerge, generateId, ComponentMetadataRegistry, PraxisRuntimeComponentObservationRegistryService, domainKnowledgeTimelineToRichContentDocument, DomainRuleService, DomainKnowledgeService, SETTINGS_PANEL_BRIDGE, DynamicWidgetPageComponent, DYNAMIC_PAGE_SHELL_EDITOR } from '@praxisui/core';
|
|
10
|
+
import { PraxisIconDirective, BUILTIN_SHELL_PRESETS, providePraxisI18n, PraxisI18nService, GLOBAL_ACTION_CATALOG, getGlobalActionCatalog, PRAXIS_GLOBAL_ACTION_CATALOG, SurfaceOpenActionEditorComponent, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, SETTINGS_PANEL_DATA as SETTINGS_PANEL_DATA$1, deepMerge, generateId, ComponentMetadataRegistry, ObservabilityDashboardService, PraxisRuntimeComponentObservationRegistryService, domainKnowledgeTimelineToRichContentDocument, DomainRuleService, DomainKnowledgeService, SETTINGS_PANEL_BRIDGE, DynamicWidgetPageComponent, DYNAMIC_PAGE_SHELL_EDITOR } from '@praxisui/core';
|
|
11
11
|
import * as i3 from '@angular/material/tooltip';
|
|
12
12
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
13
13
|
import * as i3$1 from '@angular/material/form-field';
|
|
@@ -24,7 +24,7 @@ import * as i6 from '@angular/material/divider';
|
|
|
24
24
|
import { MatDividerModule } from '@angular/material/divider';
|
|
25
25
|
import * as i6$1 from '@angular/material/select';
|
|
26
26
|
import { MatSelectModule } from '@angular/material/select';
|
|
27
|
-
import { BehaviorSubject, merge, timeout, map, catchError, throwError, from, firstValueFrom, share, concatMap, of, timer, takeUntil, Subject, filter, take } from 'rxjs';
|
|
27
|
+
import { BehaviorSubject, merge, timeout, map, catchError, throwError, from, firstValueFrom, share, concatMap, of, timer, takeUntil, Subject, tap, filter, take } from 'rxjs';
|
|
28
28
|
import { SETTINGS_PANEL_DATA } from '@praxisui/settings-panel';
|
|
29
29
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
30
30
|
import * as i7 from '@angular/material/tabs';
|
|
@@ -2828,6 +2828,18 @@ const PRAXIS_PAGE_BUILDER_EN_US = {
|
|
|
2828
2828
|
'praxis.pageBuilder.agentic.diagnostics.title': 'LLM diagnostics',
|
|
2829
2829
|
'praxis.pageBuilder.agentic.diagnostics.badge': 'Debug',
|
|
2830
2830
|
'praxis.pageBuilder.agentic.diagnostics.description': 'Prompt, context bundle, and tool catalog returned by the backend for this turn.',
|
|
2831
|
+
'praxis.pageBuilder.agentic.diagnostics.health.title': 'Assistant health',
|
|
2832
|
+
'praxis.pageBuilder.agentic.diagnostics.health.description': 'Recent authoring turn reliability and response time.',
|
|
2833
|
+
'praxis.pageBuilder.agentic.diagnostics.health.successRate': 'Success',
|
|
2834
|
+
'praxis.pageBuilder.agentic.diagnostics.health.timeoutRate': 'Timeouts',
|
|
2835
|
+
'praxis.pageBuilder.agentic.diagnostics.health.p50': 'Typical (P50)',
|
|
2836
|
+
'praxis.pageBuilder.agentic.diagnostics.health.p95': 'Slow edge (P95)',
|
|
2837
|
+
'praxis.pageBuilder.agentic.diagnostics.health.breakdown': 'Provider and model breakdown',
|
|
2838
|
+
'praxis.pageBuilder.agentic.diagnostics.health.dimension': 'Dimension',
|
|
2839
|
+
'praxis.pageBuilder.agentic.diagnostics.health.name': 'Name',
|
|
2840
|
+
'praxis.pageBuilder.agentic.diagnostics.health.provider': 'Provider',
|
|
2841
|
+
'praxis.pageBuilder.agentic.diagnostics.health.model': 'Model',
|
|
2842
|
+
'praxis.pageBuilder.agentic.diagnostics.raw': 'Turn details',
|
|
2831
2843
|
'praxis.pageBuilder.agentic.dragHandleAria': 'Move AI assistant',
|
|
2832
2844
|
'praxis.pageBuilder.agentic.resizeHandleAria': 'Resize AI assistant',
|
|
2833
2845
|
'praxis.pageBuilder.agentic.resizeHandleTooltip': 'Resize',
|
|
@@ -2892,8 +2904,26 @@ const PRAXIS_PAGE_BUILDER_EN_US = {
|
|
|
2892
2904
|
'praxis.pageBuilder.agentic.governedContinuation.sharedRule.open_timeline.label': 'View history',
|
|
2893
2905
|
'praxis.pageBuilder.agentic.governedContinuation.sharedRule.open_timeline.description': 'Open the safe history for this decision.',
|
|
2894
2906
|
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.timeline': 'Safe timeline',
|
|
2895
|
-
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.
|
|
2896
|
-
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.
|
|
2907
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.title': 'Project knowledge review',
|
|
2908
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.subtitle': 'Continue cited knowledge as a governed change.',
|
|
2909
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.description': 'Review the evidence before incorporating it into governed knowledge. This area displays safe summaries only and does not apply knowledge locally.',
|
|
2910
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.expand': 'Expand',
|
|
2911
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.collapse': 'Collapse',
|
|
2912
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.running': 'Running governed step',
|
|
2913
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.audit': 'Audit',
|
|
2914
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.cited': 'cited',
|
|
2915
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.changeSet': 'Proposal',
|
|
2916
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.validation': 'Validation',
|
|
2917
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.status': 'Status',
|
|
2918
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.safeOperations': 'Safe changes',
|
|
2919
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.noCandidate': 'I could not find cited evidence that can start this review.',
|
|
2920
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.created': 'Knowledge proposal created. The next governed step is validation.',
|
|
2921
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.validationPassed': 'Validation completed. The proposal is ready for explicit approval.',
|
|
2922
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.validationBlocked': 'Validation blocked the proposal. Review the safe findings before approval.',
|
|
2923
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.approved': 'Proposal approved. Apply it only after completing the governed review.',
|
|
2924
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.applied': 'Knowledge applied. The safe read model was refreshed by the governed flow.',
|
|
2925
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.timelineEmpty': 'No safe events have been published for this proposal yet.',
|
|
2926
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.rejected': 'Proposal rejected. No governed knowledge change was applied.',
|
|
2897
2927
|
'praxis.pageBuilder.agentic.errors.applyLocal': 'Preview could not be applied.',
|
|
2898
2928
|
'praxis.pageBuilder.agentic.errors.componentId': 'Configure a component id before saving.',
|
|
2899
2929
|
'praxis.pageBuilder.agentic.errors.invalidPreview': 'Generated preview is invalid.',
|
|
@@ -3418,6 +3448,18 @@ const PRAXIS_PAGE_BUILDER_PT_BR = {
|
|
|
3418
3448
|
'praxis.pageBuilder.agentic.diagnostics.title': 'Diagnóstico do LLM',
|
|
3419
3449
|
'praxis.pageBuilder.agentic.diagnostics.badge': 'Debug',
|
|
3420
3450
|
'praxis.pageBuilder.agentic.diagnostics.description': 'Prompt, pacote de contexto e catálogo de ferramentas retornados pelo backend para este turno.',
|
|
3451
|
+
'praxis.pageBuilder.agentic.diagnostics.health.title': 'Saúde do assistente',
|
|
3452
|
+
'praxis.pageBuilder.agentic.diagnostics.health.description': 'Confiabilidade e tempo de resposta dos turnos recentes de autoria.',
|
|
3453
|
+
'praxis.pageBuilder.agentic.diagnostics.health.successRate': 'Sucesso',
|
|
3454
|
+
'praxis.pageBuilder.agentic.diagnostics.health.timeoutRate': 'Timeouts',
|
|
3455
|
+
'praxis.pageBuilder.agentic.diagnostics.health.p50': 'Tempo típico (P50)',
|
|
3456
|
+
'praxis.pageBuilder.agentic.diagnostics.health.p95': 'Cauda lenta (P95)',
|
|
3457
|
+
'praxis.pageBuilder.agentic.diagnostics.health.breakdown': 'Detalhamento por provedor e modelo',
|
|
3458
|
+
'praxis.pageBuilder.agentic.diagnostics.health.dimension': 'Dimensão',
|
|
3459
|
+
'praxis.pageBuilder.agentic.diagnostics.health.name': 'Nome',
|
|
3460
|
+
'praxis.pageBuilder.agentic.diagnostics.health.provider': 'Provedor',
|
|
3461
|
+
'praxis.pageBuilder.agentic.diagnostics.health.model': 'Modelo',
|
|
3462
|
+
'praxis.pageBuilder.agentic.diagnostics.raw': 'Detalhes do turno',
|
|
3421
3463
|
'praxis.pageBuilder.agentic.dragHandleAria': 'Mover assistente de IA',
|
|
3422
3464
|
'praxis.pageBuilder.agentic.resizeHandleAria': 'Redimensionar assistente de IA',
|
|
3423
3465
|
'praxis.pageBuilder.agentic.resizeHandleTooltip': 'Redimensionar',
|
|
@@ -3481,9 +3523,27 @@ const PRAXIS_PAGE_BUILDER_PT_BR = {
|
|
|
3481
3523
|
'praxis.pageBuilder.agentic.governedContinuation.sharedRule.validate_enforcement.description': 'Verificar se as alterações publicadas já podem ser usadas.',
|
|
3482
3524
|
'praxis.pageBuilder.agentic.governedContinuation.sharedRule.open_timeline.label': 'Ver histórico',
|
|
3483
3525
|
'praxis.pageBuilder.agentic.governedContinuation.sharedRule.open_timeline.description': 'Abrir o histórico seguro desta decisão.',
|
|
3484
|
-
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.timeline': '
|
|
3485
|
-
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.
|
|
3486
|
-
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.
|
|
3526
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.timeline': 'Histórico seguro',
|
|
3527
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.title': 'Revisão do conhecimento do projeto',
|
|
3528
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.subtitle': 'Continue o conhecimento citado como uma alteração governada.',
|
|
3529
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.description': 'Revise as evidências antes de incorporá-las ao conhecimento governado. Esta área apresenta apenas resumos seguros e não aplica conhecimento localmente.',
|
|
3530
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.expand': 'Expandir',
|
|
3531
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.collapse': 'Recolher',
|
|
3532
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.running': 'Executando etapa governada',
|
|
3533
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.audit': 'Auditoria',
|
|
3534
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.cited': 'citadas',
|
|
3535
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.changeSet': 'Proposta',
|
|
3536
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.validation': 'Validação',
|
|
3537
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.status': 'Status',
|
|
3538
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.safeOperations': 'Alterações seguras',
|
|
3539
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.noCandidate': 'Não encontrei uma evidência citada que possa iniciar esta revisão.',
|
|
3540
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.created': 'Proposta de conhecimento criada. O próximo passo governado é a validação.',
|
|
3541
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.validationPassed': 'Validação concluída. A proposta está pronta para aprovação explícita.',
|
|
3542
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.validationBlocked': 'A validação bloqueou a proposta. Revise os pontos seguros antes da aprovação.',
|
|
3543
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.approved': 'Proposta aprovada. Aplique somente depois de concluir a revisão governada.',
|
|
3544
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.applied': 'Conhecimento aplicado. A leitura segura foi atualizada pelo fluxo governado.',
|
|
3545
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.timelineEmpty': 'Ainda não há eventos seguros publicados para esta proposta.',
|
|
3546
|
+
'praxis.pageBuilder.agentic.projectKnowledgeCockpit.rejected': 'Proposta rejeitada. Nenhuma alteração no conhecimento governado foi aplicada.',
|
|
3487
3547
|
'praxis.pageBuilder.agentic.errors.applyLocal': 'A pré-visualização não pôde ser aplicada.',
|
|
3488
3548
|
'praxis.pageBuilder.agentic.errors.componentId': 'Configure um id de componente antes de salvar.',
|
|
3489
3549
|
'praxis.pageBuilder.agentic.errors.invalidPreview': 'A pré-visualização gerada é inválida.',
|
|
@@ -15284,15 +15344,19 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
15284
15344
|
...previewAuthoringContext,
|
|
15285
15345
|
}));
|
|
15286
15346
|
if (!preview.valid) {
|
|
15287
|
-
const message =
|
|
15347
|
+
const message = intentResolution.assistantMessage?.trim()
|
|
15348
|
+
|| this.context.describePreviewFailure(preview);
|
|
15349
|
+
const quickReplies = this.resolveShellQuickReplies(intentResolution);
|
|
15288
15350
|
return {
|
|
15289
|
-
state: '
|
|
15290
|
-
phase: '
|
|
15351
|
+
state: quickReplies.length > 0 ? 'clarification' : 'success',
|
|
15352
|
+
phase: quickReplies.length > 0 ? 'clarify' : 'summarize',
|
|
15291
15353
|
assistantMessage: message,
|
|
15354
|
+
assistantContent: this.toJsonObject(intentResolution.assistantContent) ?? null,
|
|
15355
|
+
quickReplies,
|
|
15292
15356
|
canApply: false,
|
|
15293
15357
|
statusText: '',
|
|
15294
|
-
errorText:
|
|
15295
|
-
preview
|
|
15358
|
+
errorText: '',
|
|
15359
|
+
preview,
|
|
15296
15360
|
diagnostics: this.buildTurnDiagnostics(intentResolution, preview),
|
|
15297
15361
|
};
|
|
15298
15362
|
}
|
|
@@ -15343,7 +15407,11 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
15343
15407
|
}
|
|
15344
15408
|
submitWithTurnStream(request, prompt) {
|
|
15345
15409
|
const preparedRequest$ = from(this.buildTurnStreamRequest(request, prompt)).pipe(share());
|
|
15346
|
-
const stream$ = preparedRequest$.pipe(concatMap(({ streamRequest }) => this.service.streamTurn(streamRequest).pipe(map((event) => ({ event, contextHints: streamRequest.contextHints })))), concatMap(({ event, contextHints }) => from(this.toTurnResultFromStreamEvent(event, request, prompt, contextHints)))
|
|
15410
|
+
const stream$ = preparedRequest$.pipe(concatMap(({ streamRequest }) => this.service.streamTurn(streamRequest).pipe(map((event) => ({ event, contextHints: streamRequest.contextHints })))), concatMap(({ event, contextHints }) => from(this.toTurnResultFromStreamEvent(event, request, prompt, contextHints)).pipe(map((result) => ({
|
|
15411
|
+
...result,
|
|
15412
|
+
sessionId: event.threadId,
|
|
15413
|
+
clientTurnId: request.clientTurnId ?? event.turnId,
|
|
15414
|
+
})))), share());
|
|
15347
15415
|
return merge(of(this.toTurnStreamPreparationStatusResult()), preparedRequest$.pipe(map(({ diagnostics }) => this.toTurnStreamPreparedStatusResult(diagnostics))), timer(TURN_STREAM_PREPARATION_WAITING_MS).pipe(map(() => this.toTurnStreamPreparationWaitingResult()), takeUntil(stream$)), stream$).pipe(catchError((error) => {
|
|
15348
15416
|
if (this.shouldFailClosedFromTurnStreamError(request, prompt, error)) {
|
|
15349
15417
|
return of(this.toGovernedRouteFailClosedResult(request, prompt, error));
|
|
@@ -15502,6 +15570,7 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
15502
15570
|
if (![
|
|
15503
15571
|
'add_dashboard_kpis',
|
|
15504
15572
|
'bind_dashboard_kpis',
|
|
15573
|
+
'add_dashboard_filters',
|
|
15505
15574
|
'add_dashboard_chart',
|
|
15506
15575
|
'add_dashboard_surfaces',
|
|
15507
15576
|
'connect_dashboard_widgets',
|
|
@@ -15516,6 +15585,10 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
15516
15585
|
if (changeKind === 'add_dashboard_kpis' || changeKind === 'bind_dashboard_kpis') {
|
|
15517
15586
|
this.repairDashboardKpis(page, contextHints, repairLog);
|
|
15518
15587
|
}
|
|
15588
|
+
if (changeKind === 'add_dashboard_filters') {
|
|
15589
|
+
this.repairDashboardFilters(page, contextHints, repairLog);
|
|
15590
|
+
this.repairDashboardConnections(page, repairLog);
|
|
15591
|
+
}
|
|
15519
15592
|
if (changeKind === 'add_dashboard_chart') {
|
|
15520
15593
|
this.repairDashboardChart(page, contextHints, repairLog);
|
|
15521
15594
|
this.repairDashboardConnections(page, repairLog);
|
|
@@ -15645,6 +15718,60 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
15645
15718
|
repairLog.push('dashboard-kpis-bound');
|
|
15646
15719
|
}
|
|
15647
15720
|
}
|
|
15721
|
+
repairDashboardFilters(page, contextHints, repairLog) {
|
|
15722
|
+
if (this.dashboardPageWidgets(page).some((widget) => this.dashboardWidgetComponentId(widget) === 'praxis-filter')) {
|
|
15723
|
+
return;
|
|
15724
|
+
}
|
|
15725
|
+
const confirmedFields = this.dashboardConfirmedFilterFields(page);
|
|
15726
|
+
if (!confirmedFields.length) {
|
|
15727
|
+
return;
|
|
15728
|
+
}
|
|
15729
|
+
const resourcePath = this.dashboardRepairResourcePath(contextHints);
|
|
15730
|
+
const filterKey = this.uniqueDashboardWidgetKey(page, 'dashboard-filters');
|
|
15731
|
+
const selectedFieldIds = confirmedFields.slice(0, 4);
|
|
15732
|
+
this.insertDashboardWidget(page, {
|
|
15733
|
+
key: filterKey,
|
|
15734
|
+
shell: {
|
|
15735
|
+
kind: 'dashboard-card',
|
|
15736
|
+
title: 'Filtros',
|
|
15737
|
+
subtitle: 'Refine os dados usando campos confirmados da fonte',
|
|
15738
|
+
},
|
|
15739
|
+
definition: {
|
|
15740
|
+
id: 'praxis-filter',
|
|
15741
|
+
bindingOrder: ['resourcePath', 'selectedFieldIds', 'alwaysVisibleFields'],
|
|
15742
|
+
inputs: {
|
|
15743
|
+
resourcePath,
|
|
15744
|
+
selectedFieldIds,
|
|
15745
|
+
alwaysVisibleFields: selectedFieldIds.slice(0, 2),
|
|
15746
|
+
showFilterSettings: true,
|
|
15747
|
+
enableCustomization: true,
|
|
15748
|
+
},
|
|
15749
|
+
},
|
|
15750
|
+
}, 0, true);
|
|
15751
|
+
repairLog.push('dashboard-filters-added-from-confirmed-fields');
|
|
15752
|
+
}
|
|
15753
|
+
dashboardConfirmedFilterFields(page) {
|
|
15754
|
+
const fields = [];
|
|
15755
|
+
const add = (value) => {
|
|
15756
|
+
const field = typeof value === 'string' ? value.trim() : '';
|
|
15757
|
+
if (field && !fields.includes(field)) {
|
|
15758
|
+
fields.push(field);
|
|
15759
|
+
}
|
|
15760
|
+
};
|
|
15761
|
+
for (const widget of this.dashboardPageWidgets(page)) {
|
|
15762
|
+
const inputs = this.dashboardWidgetInputs(widget);
|
|
15763
|
+
this.arrayFromUnknown(inputs['selectedFieldIds']).forEach(add);
|
|
15764
|
+
for (const metadata of this.arrayFromUnknown(inputs['fieldMetadata'])) {
|
|
15765
|
+
const item = this.toJsonObject(metadata);
|
|
15766
|
+
add(this.readString(item, 'name') || this.readString(item, 'field') || this.readString(item, 'id'));
|
|
15767
|
+
}
|
|
15768
|
+
for (const column of this.arrayFromUnknown(inputs['columns'])) {
|
|
15769
|
+
const item = this.toJsonObject(column);
|
|
15770
|
+
add(this.readString(item, 'field') || this.readString(item, 'name') || this.readString(item, 'id'));
|
|
15771
|
+
}
|
|
15772
|
+
}
|
|
15773
|
+
return fields;
|
|
15774
|
+
}
|
|
15648
15775
|
repairRichContentKpiDocument(document) {
|
|
15649
15776
|
let repaired = false;
|
|
15650
15777
|
for (const node of this.arrayFromUnknown(document['nodes'])) {
|
|
@@ -16714,17 +16841,19 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
16714
16841
|
const runtimeObservationResult = await this.collectRuntimeComponentObservations(request);
|
|
16715
16842
|
const runtimeObservationsElapsedMs = Math.max(0, Date.now() - runtimeObservationsStartedAt);
|
|
16716
16843
|
const applyTarget = this.context.applyTarget?.() ?? null;
|
|
16717
|
-
const
|
|
16844
|
+
const responseLocale = this.context.responseLocale?.()?.trim() || null;
|
|
16845
|
+
const streamContextHints = applyTarget || responseLocale
|
|
16718
16846
|
? {
|
|
16719
16847
|
...(authoringContext.contextHints ?? {}),
|
|
16720
|
-
|
|
16848
|
+
...(responseLocale ? { responseLocale } : {}),
|
|
16849
|
+
...(applyTarget ? { agenticApplyTarget: applyTarget } : {}),
|
|
16721
16850
|
}
|
|
16722
16851
|
: authoringContext.contextHints ?? undefined;
|
|
16723
16852
|
const streamRequest = {
|
|
16724
16853
|
userPrompt: prompt,
|
|
16725
16854
|
targetApp: this.context.targetApp,
|
|
16726
16855
|
targetComponentId: this.context.targetComponentId,
|
|
16727
|
-
currentRoute: null,
|
|
16856
|
+
currentRoute: this.context.currentRoute?.() ?? null,
|
|
16728
16857
|
currentPage: this.context.currentPage(),
|
|
16729
16858
|
selectedWidgetKey: this.resolveSelectedWidgetKey(selectedWidgetKey, authoringContext.contextHints),
|
|
16730
16859
|
provider: this.context.provider(),
|
|
@@ -16732,6 +16861,9 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
16732
16861
|
apiKey: this.context.apiKey(),
|
|
16733
16862
|
...authoringContext,
|
|
16734
16863
|
contextHints: streamContextHints,
|
|
16864
|
+
...(request.activeSemanticDecision
|
|
16865
|
+
? { activeSemanticDecision: this.toJsonObject(request.activeSemanticDecision) }
|
|
16866
|
+
: {}),
|
|
16735
16867
|
...(this.runtimeRelatedSurfaceDisambiguationContext
|
|
16736
16868
|
? {
|
|
16737
16869
|
diagnostics: {
|
|
@@ -17060,15 +17192,19 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
17060
17192
|
...authoringContext,
|
|
17061
17193
|
}));
|
|
17062
17194
|
if (!preview.valid) {
|
|
17063
|
-
const message =
|
|
17195
|
+
const message = intentResolution.assistantMessage?.trim()
|
|
17196
|
+
|| this.context.describePreviewFailure(preview);
|
|
17197
|
+
const quickReplies = this.resolveShellQuickReplies(intentResolution);
|
|
17064
17198
|
return {
|
|
17065
|
-
state: '
|
|
17066
|
-
phase: '
|
|
17199
|
+
state: quickReplies.length > 0 ? 'clarification' : 'success',
|
|
17200
|
+
phase: quickReplies.length > 0 ? 'clarify' : 'summarize',
|
|
17067
17201
|
assistantMessage: message,
|
|
17202
|
+
assistantContent: this.toJsonObject(intentResolution.assistantContent) ?? null,
|
|
17203
|
+
quickReplies,
|
|
17068
17204
|
canApply: false,
|
|
17069
17205
|
statusText: '',
|
|
17070
|
-
errorText:
|
|
17071
|
-
preview
|
|
17206
|
+
errorText: '',
|
|
17207
|
+
preview,
|
|
17072
17208
|
diagnostics: this.buildTurnDiagnostics(intentResolution, preview),
|
|
17073
17209
|
};
|
|
17074
17210
|
}
|
|
@@ -17125,7 +17261,7 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
17125
17261
|
if (intentResolution.artifactKind !== 'dashboard') {
|
|
17126
17262
|
return false;
|
|
17127
17263
|
}
|
|
17128
|
-
if (preview.uiCompositionPlan) {
|
|
17264
|
+
if (this.hasCanonicalUiCompositionPlan(preview.uiCompositionPlan)) {
|
|
17129
17265
|
return false;
|
|
17130
17266
|
}
|
|
17131
17267
|
return true;
|
|
@@ -17219,11 +17355,17 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
17219
17355
|
if (!preview) {
|
|
17220
17356
|
return false;
|
|
17221
17357
|
}
|
|
17222
|
-
if (preview.uiCompositionPlan) {
|
|
17358
|
+
if (this.hasCanonicalUiCompositionPlan(preview.uiCompositionPlan)) {
|
|
17223
17359
|
return true;
|
|
17224
17360
|
}
|
|
17225
17361
|
return this.hasCompiledPagePatch(preview);
|
|
17226
17362
|
}
|
|
17363
|
+
hasCanonicalUiCompositionPlan(value) {
|
|
17364
|
+
const plan = this.toJsonObject(value);
|
|
17365
|
+
return plan?.['kind'] === 'praxis.ui-composition-plan'
|
|
17366
|
+
&& plan['version'] === '1.0'
|
|
17367
|
+
&& Array.isArray(plan['widgets']);
|
|
17368
|
+
}
|
|
17227
17369
|
hasCompiledPagePatch(preview) {
|
|
17228
17370
|
const patch = this.toJsonObject(preview?.compiledFormPatch)?.['patch'];
|
|
17229
17371
|
const page = this.toJsonObject(patch)?.['page'];
|
|
@@ -18910,6 +19052,8 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
18910
19052
|
return 'add_dashboard_kpis';
|
|
18911
19053
|
case 'dashboard-quality-bind-kpis':
|
|
18912
19054
|
return 'bind_dashboard_kpis';
|
|
19055
|
+
case 'dashboard-quality-add-filters':
|
|
19056
|
+
return 'add_dashboard_filters';
|
|
18913
19057
|
case 'dashboard-quality-add-chart':
|
|
18914
19058
|
return 'add_dashboard_chart';
|
|
18915
19059
|
case 'dashboard-quality-add-surfaces':
|
|
@@ -18947,6 +19091,9 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
18947
19091
|
case 'adicionar grafico':
|
|
18948
19092
|
case 'adicionar gráfico':
|
|
18949
19093
|
return 'add_dashboard_chart';
|
|
19094
|
+
case 'add filters':
|
|
19095
|
+
case 'adicionar filtros':
|
|
19096
|
+
return 'add_dashboard_filters';
|
|
18950
19097
|
case 'add surfaces':
|
|
18951
19098
|
case 'adicionar surfaces':
|
|
18952
19099
|
case 'adicionar superficies':
|
|
@@ -19011,8 +19158,13 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
19011
19158
|
}
|
|
19012
19159
|
const operationKind = intentResolution.operationKind;
|
|
19013
19160
|
const changeKind = intentResolution.changeKind;
|
|
19014
|
-
|
|
19015
|
-
|
|
19161
|
+
if (operationKind !== 'explore' && operationKind !== 'explain') {
|
|
19162
|
+
return false;
|
|
19163
|
+
}
|
|
19164
|
+
if (intentResolution.artifactKind === 'component') {
|
|
19165
|
+
return changeKind === 'answer_component_catalog_question';
|
|
19166
|
+
}
|
|
19167
|
+
return intentResolution.artifactKind === 'api_catalog'
|
|
19016
19168
|
&& (changeKind === 'answer_api_catalog_question'
|
|
19017
19169
|
|| changeKind === 'answer_catalog_question'
|
|
19018
19170
|
|| changeKind === 'api_catalog_followup'
|
|
@@ -19591,6 +19743,7 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
19591
19743
|
userPrompt: prompt,
|
|
19592
19744
|
targetApp: this.context.targetApp,
|
|
19593
19745
|
targetComponentId: this.context.targetComponentId,
|
|
19746
|
+
currentRoute: this.context.currentRoute?.() ?? null,
|
|
19594
19747
|
currentPage: this.context.currentPage(),
|
|
19595
19748
|
selectedWidgetKey: this.resolveSelectedWidgetKey(selectedWidgetKey, authoringContext.contextHints),
|
|
19596
19749
|
provider: this.context.provider(),
|
|
@@ -19922,6 +20075,7 @@ class DynamicPageBuilderComponent {
|
|
|
19922
20075
|
agenticAuthoring = inject(PageBuilderAgenticAuthoringService);
|
|
19923
20076
|
agenticTurnOrchestrator = inject(PraxisAssistantTurnOrchestratorService);
|
|
19924
20077
|
assistantSessions = inject(PraxisAssistantSessionRegistryService);
|
|
20078
|
+
observabilityDashboard = inject(ObservabilityDashboardService);
|
|
19925
20079
|
runtimeObservationRegistry = inject(PraxisRuntimeComponentObservationRegistryService, { optional: true });
|
|
19926
20080
|
agenticAuthoringOptions = inject(PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS, { optional: true });
|
|
19927
20081
|
runtime;
|
|
@@ -19967,6 +20121,7 @@ class DynamicPageBuilderComponent {
|
|
|
19967
20121
|
agenticAuthoringOpen = signal(false, ...(ngDevMode ? [{ debugName: "agenticAuthoringOpen" }] : /* istanbul ignore next */ []));
|
|
19968
20122
|
agenticAuthoringPrompt = signal('', ...(ngDevMode ? [{ debugName: "agenticAuthoringPrompt" }] : /* istanbul ignore next */ []));
|
|
19969
20123
|
agenticAuthoringBusy = signal(false, ...(ngDevMode ? [{ debugName: "agenticAuthoringBusy" }] : /* istanbul ignore next */ []));
|
|
20124
|
+
agenticAuthoringTerminalState = signal(null, ...(ngDevMode ? [{ debugName: "agenticAuthoringTerminalState" }] : /* istanbul ignore next */ []));
|
|
19970
20125
|
agenticAuthoringStatus = signal('', ...(ngDevMode ? [{ debugName: "agenticAuthoringStatus" }] : /* istanbul ignore next */ []));
|
|
19971
20126
|
agenticAuthoringError = signal('', ...(ngDevMode ? [{ debugName: "agenticAuthoringError" }] : /* istanbul ignore next */ []));
|
|
19972
20127
|
agenticAuthoringPreviewResult = signal(null, ...(ngDevMode ? [{ debugName: "agenticAuthoringPreviewResult" }] : /* istanbul ignore next */ []));
|
|
@@ -19995,6 +20150,7 @@ class DynamicPageBuilderComponent {
|
|
|
19995
20150
|
projectKnowledgeCockpitValidation = signal(null, ...(ngDevMode ? [{ debugName: "projectKnowledgeCockpitValidation" }] : /* istanbul ignore next */ []));
|
|
19996
20151
|
projectKnowledgeCockpitTimeline = signal(null, ...(ngDevMode ? [{ debugName: "projectKnowledgeCockpitTimeline" }] : /* istanbul ignore next */ []));
|
|
19997
20152
|
agenticAuthoringLlmDiagnostics = signal(null, ...(ngDevMode ? [{ debugName: "agenticAuthoringLlmDiagnostics" }] : /* istanbul ignore next */ []));
|
|
20153
|
+
agenticTurnHealth = signal(this.emptyAgenticTurnHealth(), ...(ngDevMode ? [{ debugName: "agenticTurnHealth" }] : /* istanbul ignore next */ []));
|
|
19998
20154
|
agenticAuthoringLlmDiagnosticsCollapsed = signal(true, ...(ngDevMode ? [{ debugName: "agenticAuthoringLlmDiagnosticsCollapsed" }] : /* istanbul ignore next */ []));
|
|
19999
20155
|
sharedRuleCockpitCollapsed = signal(false, ...(ngDevMode ? [{ debugName: "sharedRuleCockpitCollapsed" }] : /* istanbul ignore next */ []));
|
|
20000
20156
|
projectKnowledgeCockpitCollapsed = signal(true, ...(ngDevMode ? [{ debugName: "projectKnowledgeCockpitCollapsed" }] : /* istanbul ignore next */ []));
|
|
@@ -20017,9 +20173,13 @@ class DynamicPageBuilderComponent {
|
|
|
20017
20173
|
agenticAuthoringTurnTerminalTimeoutMs = AGENTIC_AUTHORING_TURN_TERMINAL_TIMEOUT_MS;
|
|
20018
20174
|
sharedRuleHandoffRevision = 0;
|
|
20019
20175
|
agenticAuthoringPanelLayoutTouched = false;
|
|
20176
|
+
observabilityMetricsSubscription;
|
|
20020
20177
|
constructor(dialog, settingsPanel) {
|
|
20021
20178
|
this.dialog = dialog;
|
|
20022
20179
|
this.settingsPanel = settingsPanel;
|
|
20180
|
+
this.observabilityMetricsSubscription = this.observabilityDashboard.metrics$.subscribe((snapshot) => {
|
|
20181
|
+
this.agenticTurnHealth.set(snapshot.agenticTurns);
|
|
20182
|
+
});
|
|
20023
20183
|
effect(() => {
|
|
20024
20184
|
const activeSession = this.assistantSessions.activeSession();
|
|
20025
20185
|
if (activeSession?.id === this.resolveAgenticAuthoringSessionId() && !this.agenticAuthoringOpen()) {
|
|
@@ -20067,6 +20227,7 @@ class DynamicPageBuilderComponent {
|
|
|
20067
20227
|
ngOnDestroy() {
|
|
20068
20228
|
this.cancelActiveAgenticTurn();
|
|
20069
20229
|
this.agenticTurnCancel$.complete();
|
|
20230
|
+
this.observabilityMetricsSubscription.unsubscribe();
|
|
20070
20231
|
}
|
|
20071
20232
|
showSettings() {
|
|
20072
20233
|
return !!this.enableCustomization && !this.previewMode;
|
|
@@ -20147,6 +20308,40 @@ class DynamicPageBuilderComponent {
|
|
|
20147
20308
|
toggleAgenticAuthoringLlmDiagnostics() {
|
|
20148
20309
|
this.agenticAuthoringLlmDiagnosticsCollapsed.update((current) => !current);
|
|
20149
20310
|
}
|
|
20311
|
+
agenticAuthoringDiagnosticsAvailable() {
|
|
20312
|
+
return !!this.agenticAuthoringLlmDiagnosticsText() || this.agenticTurnHealth().started > 0;
|
|
20313
|
+
}
|
|
20314
|
+
agenticTurnHealthBuckets() {
|
|
20315
|
+
const health = this.agenticTurnHealth();
|
|
20316
|
+
return [
|
|
20317
|
+
...health.byProvider.map((bucket) => ({ dimension: 'provider', bucket })),
|
|
20318
|
+
...health.byModel.map((bucket) => ({ dimension: 'model', bucket })),
|
|
20319
|
+
];
|
|
20320
|
+
}
|
|
20321
|
+
formatAgenticMetricPercent(rate) {
|
|
20322
|
+
return `${Math.round(Math.max(0, rate) * 100)}%`;
|
|
20323
|
+
}
|
|
20324
|
+
formatAgenticDuration(durationMs) {
|
|
20325
|
+
const safeDurationMs = Math.max(0, Math.round(durationMs));
|
|
20326
|
+
return safeDurationMs < 1_000
|
|
20327
|
+
? `${safeDurationMs} ms`
|
|
20328
|
+
: `${(safeDurationMs / 1_000).toFixed(1)} s`;
|
|
20329
|
+
}
|
|
20330
|
+
emptyAgenticTurnHealth() {
|
|
20331
|
+
return {
|
|
20332
|
+
started: 0,
|
|
20333
|
+
completed: 0,
|
|
20334
|
+
succeeded: 0,
|
|
20335
|
+
timedOut: 0,
|
|
20336
|
+
successRate: 0,
|
|
20337
|
+
timeoutRate: 0,
|
|
20338
|
+
averageDurationMs: 0,
|
|
20339
|
+
p50DurationMs: 0,
|
|
20340
|
+
p95DurationMs: 0,
|
|
20341
|
+
byProvider: [],
|
|
20342
|
+
byModel: [],
|
|
20343
|
+
};
|
|
20344
|
+
}
|
|
20150
20345
|
toggleSharedRuleCockpit() {
|
|
20151
20346
|
this.sharedRuleCockpitCollapsed.update((current) => !current);
|
|
20152
20347
|
}
|
|
@@ -20737,6 +20932,8 @@ class DynamicPageBuilderComponent {
|
|
|
20737
20932
|
return 'review';
|
|
20738
20933
|
if (this.agenticAuthoringSharedRuleHandoffState())
|
|
20739
20934
|
return 'clarification';
|
|
20935
|
+
if (this.agenticAuthoringTerminalState() === 'clarification')
|
|
20936
|
+
return 'clarification';
|
|
20740
20937
|
if (this.agenticAuthoringConversation().length)
|
|
20741
20938
|
return 'listening';
|
|
20742
20939
|
return 'idle';
|
|
@@ -20756,6 +20953,7 @@ class DynamicPageBuilderComponent {
|
|
|
20756
20953
|
this.agenticTurnController = undefined;
|
|
20757
20954
|
this.sharedRuleHandoffRevision += 1;
|
|
20758
20955
|
this.agenticAuthoringBusy.set(false);
|
|
20956
|
+
this.agenticAuthoringTerminalState.set(null);
|
|
20759
20957
|
this.agenticAuthoringPrompt.set('');
|
|
20760
20958
|
this.agenticAuthoringStatus.set('');
|
|
20761
20959
|
this.agenticAuthoringError.set('');
|
|
@@ -21349,7 +21547,11 @@ class DynamicPageBuilderComponent {
|
|
|
21349
21547
|
await this.applyAgenticTurnState(await firstValueFrom(this.ensureAgenticTurnController().cancel()));
|
|
21350
21548
|
return;
|
|
21351
21549
|
}
|
|
21352
|
-
|
|
21550
|
+
const contextHints = reply.contextHints ? { ...reply.contextHints } : undefined;
|
|
21551
|
+
const activeSemanticDecision = reply.semanticDecision
|
|
21552
|
+
? { ...reply.semanticDecision }
|
|
21553
|
+
: undefined;
|
|
21554
|
+
if (replyKind === 'revise' && !this.isGovernedReviewRepairQuickReply(contextHints)) {
|
|
21353
21555
|
this.invalidateAgenticTerminalAuthorization();
|
|
21354
21556
|
this.agenticAuthoringEditingMessageId.set(null);
|
|
21355
21557
|
this.agenticAuthoringQuickReplies.set([]);
|
|
@@ -21357,7 +21559,6 @@ class DynamicPageBuilderComponent {
|
|
|
21357
21559
|
return;
|
|
21358
21560
|
}
|
|
21359
21561
|
this.agenticAuthoringEditingMessageId.set(null);
|
|
21360
|
-
const contextHints = reply.contextHints ? { ...reply.contextHints } : undefined;
|
|
21361
21562
|
const visiblePrompt = this.agenticQuickReplyVisiblePrompt(reply, contextHints);
|
|
21362
21563
|
const submittedPrompt = this.agenticQuickReplySubmittedPrompt(reply, contextHints, visiblePrompt, this.ensureAgenticTurnController().snapshot().pendingClarification);
|
|
21363
21564
|
if (this.promoteSharedRuleHandoffFromQuickReply(reply, contextHints, visiblePrompt)) {
|
|
@@ -21385,7 +21586,10 @@ class DynamicPageBuilderComponent {
|
|
|
21385
21586
|
id: reply.id,
|
|
21386
21587
|
value: reply.prompt,
|
|
21387
21588
|
displayPrompt: visiblePrompt,
|
|
21388
|
-
contextHints
|
|
21589
|
+
contextHints: activeSemanticDecision
|
|
21590
|
+
? { ...(contextHints ?? {}), semanticDecision: activeSemanticDecision }
|
|
21591
|
+
: contextHints,
|
|
21592
|
+
activeSemanticDecision,
|
|
21389
21593
|
}), turnRunId);
|
|
21390
21594
|
this.agenticAuthoringPrompt.set('');
|
|
21391
21595
|
}
|
|
@@ -21403,6 +21607,9 @@ class DynamicPageBuilderComponent {
|
|
|
21403
21607
|
}
|
|
21404
21608
|
}
|
|
21405
21609
|
}
|
|
21610
|
+
isGovernedReviewRepairQuickReply(contextHints) {
|
|
21611
|
+
return contextHints?.['kind'] === 'governed-review-repair';
|
|
21612
|
+
}
|
|
21406
21613
|
agenticQuickReplyVisiblePrompt(reply, contextHints) {
|
|
21407
21614
|
const prompt = (reply.prompt || '').trim();
|
|
21408
21615
|
if (this.isGovernedConfirmationQuickReply(reply, contextHints)) {
|
|
@@ -22573,6 +22780,8 @@ class DynamicPageBuilderComponent {
|
|
|
22573
22780
|
const flow = new PageBuilderAgenticAuthoringTurnFlow(this.agenticAuthoring, {
|
|
22574
22781
|
targetApp: 'praxis-ui-angular',
|
|
22575
22782
|
targetComponentId: 'praxis-dynamic-page-builder',
|
|
22783
|
+
currentRoute: () => this.pageIdentity?.routePath?.trim() || null,
|
|
22784
|
+
responseLocale: () => this.pageIdentity?.locale?.trim() || null,
|
|
22576
22785
|
currentPage: () => this.currentPage(),
|
|
22577
22786
|
selectedWidgetKey: () => this.resolveSelectedWidgetKey(),
|
|
22578
22787
|
provider: () => this.agenticAuthoringProvider,
|
|
@@ -22671,15 +22880,28 @@ class DynamicPageBuilderComponent {
|
|
|
22671
22880
|
};
|
|
22672
22881
|
}
|
|
22673
22882
|
async applyAgenticTurnState(state) {
|
|
22674
|
-
|
|
22883
|
+
// A terminal turn state is the canonical end of processing. Clear the local
|
|
22884
|
+
// interaction flag before projecting preview/review so the shell never
|
|
22885
|
+
// renders terminal actions alongside a stale loading indicator.
|
|
22886
|
+
if (this.isAgenticTurnTerminalState(state)) {
|
|
22887
|
+
this.agenticAuthoringBusy.set(false);
|
|
22888
|
+
this.agenticAuthoringTerminalState.set(state.state);
|
|
22889
|
+
}
|
|
22890
|
+
const receivedPreview = state.preview ?? null;
|
|
22891
|
+
const preview = receivedPreview?.valid ? receivedPreview : null;
|
|
22892
|
+
const invalidPreviewError = receivedPreview
|
|
22893
|
+
&& !receivedPreview.valid
|
|
22894
|
+
&& (state.state === 'error' || state.quickReplies.length === 0)
|
|
22895
|
+
? this.describeAgenticPreviewFailure(receivedPreview)
|
|
22896
|
+
: '';
|
|
22675
22897
|
const handoff = this.resolveAgenticSharedRuleHandoff(state);
|
|
22676
22898
|
const previousHandoff = this.agenticAuthoringSharedRuleHandoffState();
|
|
22677
22899
|
this.agenticAuthoringConversation.set(state.messages);
|
|
22678
22900
|
this.agenticAuthoringQuickReplies.set(state.quickReplies);
|
|
22679
|
-
this.agenticAuthoringStatus.set(handoff && !
|
|
22901
|
+
this.agenticAuthoringStatus.set(handoff && !receivedPreview?.valid
|
|
22680
22902
|
? this.tx('agentic.status.sharedRuleHandoff', 'Continue este pedido na revisão da regra.')
|
|
22681
22903
|
: state.statusText);
|
|
22682
|
-
this.agenticAuthoringError.set(state.errorText);
|
|
22904
|
+
this.agenticAuthoringError.set(state.errorText || invalidPreviewError);
|
|
22683
22905
|
this.agenticAuthoringPreviewResult.set(preview);
|
|
22684
22906
|
this.agenticAuthoringSemanticDecision.set(this.resolveAgenticSemanticDecision(state.diagnostics));
|
|
22685
22907
|
this.agenticAuthoringSemanticResourcePresentationLabel.set(this.resolveAgenticSemanticResourcePresentationLabel(state.diagnostics));
|
|
@@ -22891,7 +23113,11 @@ class DynamicPageBuilderComponent {
|
|
|
22891
23113
|
return Object.keys(merged).length ? merged : undefined;
|
|
22892
23114
|
}
|
|
22893
23115
|
consumeAgenticTurn(states$, turnRunId) {
|
|
22894
|
-
return firstValueFrom(states$.pipe(takeUntil(this.agenticTurnCancel$),
|
|
23116
|
+
return firstValueFrom(states$.pipe(takeUntil(this.agenticTurnCancel$), tap((state) => {
|
|
23117
|
+
if (this.isCurrentAgenticTurn(turnRunId) && this.isAgenticTurnTerminalState(state)) {
|
|
23118
|
+
this.agenticAuthoringBusy.set(false);
|
|
23119
|
+
}
|
|
23120
|
+
}), concatMap((state) => {
|
|
22895
23121
|
if (!this.isCurrentAgenticTurn(turnRunId)) {
|
|
22896
23122
|
return of(state);
|
|
22897
23123
|
}
|
|
@@ -23513,7 +23739,7 @@ class DynamicPageBuilderComponent {
|
|
|
23513
23739
|
/>
|
|
23514
23740
|
}
|
|
23515
23741
|
|
|
23516
|
-
@if (agenticAuthoringIncludeLlmDiagnostics &&
|
|
23742
|
+
@if (agenticAuthoringIncludeLlmDiagnostics && agenticAuthoringDiagnosticsAvailable()) {
|
|
23517
23743
|
<section
|
|
23518
23744
|
class="agentic-diagnostics-panel"
|
|
23519
23745
|
[class.agentic-diagnostics-panel--collapsed]="agenticAuthoringLlmDiagnosticsCollapsed()"
|
|
@@ -23545,7 +23771,61 @@ class DynamicPageBuilderComponent {
|
|
|
23545
23771
|
<p class="agentic-diagnostics-panel__description">
|
|
23546
23772
|
{{ tx('agentic.diagnostics.description', 'Informações usadas para explicar como o assistente chegou à resposta deste pedido.') }}
|
|
23547
23773
|
</p>
|
|
23548
|
-
|
|
23774
|
+
@if (agenticTurnHealth().started) {
|
|
23775
|
+
<section class="agentic-diagnostics-panel__health" data-testid="page-builder-agentic-turn-health">
|
|
23776
|
+
<h3>{{ tx('agentic.diagnostics.health.title', 'Assistant health') }}</h3>
|
|
23777
|
+
<p>{{ tx('agentic.diagnostics.health.description', 'Recent authoring turn reliability and response time.') }}</p>
|
|
23778
|
+
<dl class="agentic-diagnostics-panel__metrics">
|
|
23779
|
+
<div>
|
|
23780
|
+
<dt>{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</dt>
|
|
23781
|
+
<dd data-testid="page-builder-agentic-health-success">{{ formatAgenticMetricPercent(agenticTurnHealth().successRate) }}</dd>
|
|
23782
|
+
</div>
|
|
23783
|
+
<div>
|
|
23784
|
+
<dt>{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</dt>
|
|
23785
|
+
<dd data-testid="page-builder-agentic-health-timeout">{{ formatAgenticMetricPercent(agenticTurnHealth().timeoutRate) }}</dd>
|
|
23786
|
+
</div>
|
|
23787
|
+
<div>
|
|
23788
|
+
<dt>{{ tx('agentic.diagnostics.health.p50', 'Typical (P50)') }}</dt>
|
|
23789
|
+
<dd data-testid="page-builder-agentic-health-p50">{{ formatAgenticDuration(agenticTurnHealth().p50DurationMs) }}</dd>
|
|
23790
|
+
</div>
|
|
23791
|
+
<div>
|
|
23792
|
+
<dt>{{ tx('agentic.diagnostics.health.p95', 'Slow edge (P95)') }}</dt>
|
|
23793
|
+
<dd data-testid="page-builder-agentic-health-p95">{{ formatAgenticDuration(agenticTurnHealth().p95DurationMs) }}</dd>
|
|
23794
|
+
</div>
|
|
23795
|
+
</dl>
|
|
23796
|
+
@if (agenticTurnHealthBuckets().length) {
|
|
23797
|
+
<table class="agentic-diagnostics-panel__health-table" data-testid="page-builder-agentic-health-breakdown">
|
|
23798
|
+
<caption>{{ tx('agentic.diagnostics.health.breakdown', 'Provider and model breakdown') }}</caption>
|
|
23799
|
+
<thead>
|
|
23800
|
+
<tr>
|
|
23801
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.dimension', 'Dimension') }}</th>
|
|
23802
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.name', 'Name') }}</th>
|
|
23803
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</th>
|
|
23804
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</th>
|
|
23805
|
+
<th scope="col">P95</th>
|
|
23806
|
+
</tr>
|
|
23807
|
+
</thead>
|
|
23808
|
+
<tbody>
|
|
23809
|
+
@for (entry of agenticTurnHealthBuckets(); track entry.dimension + ':' + entry.bucket.key) {
|
|
23810
|
+
<tr>
|
|
23811
|
+
<td>{{ entry.dimension === 'provider' ? tx('agentic.diagnostics.health.provider', 'Provider') : tx('agentic.diagnostics.health.model', 'Model') }}</td>
|
|
23812
|
+
<th scope="row">{{ entry.bucket.key }}</th>
|
|
23813
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.successRate) }}</td>
|
|
23814
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.timeoutRate) }}</td>
|
|
23815
|
+
<td>{{ formatAgenticDuration(entry.bucket.p95DurationMs) }}</td>
|
|
23816
|
+
</tr>
|
|
23817
|
+
}
|
|
23818
|
+
</tbody>
|
|
23819
|
+
</table>
|
|
23820
|
+
}
|
|
23821
|
+
</section>
|
|
23822
|
+
}
|
|
23823
|
+
@if (agenticAuthoringLlmDiagnosticsText()) {
|
|
23824
|
+
<details class="agentic-diagnostics-panel__raw">
|
|
23825
|
+
<summary>{{ tx('agentic.diagnostics.raw', 'Turn details') }}</summary>
|
|
23826
|
+
<pre>{{ agenticAuthoringLlmDiagnosticsText() }}</pre>
|
|
23827
|
+
</details>
|
|
23828
|
+
}
|
|
23549
23829
|
}
|
|
23550
23830
|
</section>
|
|
23551
23831
|
}
|
|
@@ -23882,7 +24162,7 @@ class DynamicPageBuilderComponent {
|
|
|
23882
24162
|
}
|
|
23883
24163
|
</praxis-floating-toolbar>
|
|
23884
24164
|
</div>
|
|
23885
|
-
`, isInline: true, styles: [":host{display:block;position:relative;min-height:var(--pdx-page-builder-min-height, 420px)}.builder-shell{display:block;position:relative;min-height:inherit;height:100%}.builder-shell:has(.pdx-shell.fullscreen) praxis-floating-toolbar{display:none}.builder-premium-readiness{display:grid;grid-template-columns:minmax(220px,.72fr) minmax(0,1.28fr);gap:12px;width:100%;margin:0 0 14px;padding:14px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 72%,transparent);border-radius:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 10%,transparent),transparent 36%),color-mix(in srgb,var(--md-sys-color-surface-container-lowest, #fff) 96%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-on-surface, #1d1b20) 5%,transparent)}.builder-premium-readiness__header{display:flex;align-items:flex-start;gap:10px;min-width:0}.builder-premium-readiness__header strong{display:block;font-size:13px;line-height:1.25}.builder-premium-readiness__header p,.builder-premium-readiness__item p{margin:2px 0 0;color:var(--md-sys-color-on-surface-variant, #49454f);font-size:11px;line-height:1.35}.builder-premium-readiness__icon{color:var(--md-sys-color-primary, #6750a4);font-size:20px;line-height:1}.builder-premium-readiness__list{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin:0;padding:0;list-style:none}.builder-premium-readiness__item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;min-width:0;padding:9px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 64%,transparent);border-radius:10px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low, #f7f2fa) 84%,transparent)}.builder-premium-readiness__item strong{display:block;font-size:12px;line-height:1.25}.builder-premium-readiness__action{appearance:none;display:inline-flex;align-items:center;justify-content:center;min-height:26px;margin-top:7px;padding:4px 8px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 34%,transparent);border-radius:7px;background:color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 9%,var(--md-sys-color-surface, #fff));color:var(--md-sys-color-primary, #6750a4);cursor:pointer;font:inherit;font-size:11px;font-weight:700;line-height:1.2;text-align:left}.builder-premium-readiness__severity{width:8px;height:8px;margin-top:4px;border-radius:999px;background:var(--md-sys-color-primary, #6750a4)}.builder-premium-readiness__item[data-severity=warning] .builder-premium-readiness__severity{background:var(--praxis-warning, #b26a00)}.builder-premium-readiness__item[data-severity=error] .builder-premium-readiness__severity{background:var(--md-sys-color-error, #b3261e)}@media(max-width:760px){.builder-premium-readiness{grid-template-columns:1fr}}.agentic-diagnostics-panel{position:absolute;z-index:21;right:16px;width:min(520px,calc(100% - 32px));max-height:min(440px,calc(100% - 32px));overflow:auto;padding:12px;border:1px solid rgba(107,114,128,.28);border-radius:8px;background:#fffffff5;color:#111827;box-shadow:0 14px 36px #0000003d}.agentic-diagnostics-panel--collapsed{width:min(280px,calc(100% - 32px));max-height:58px;overflow:hidden;padding:10px 12px;pointer-events:auto}.agentic-diagnostics-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px;font-weight:700}.agentic-diagnostics-panel__header-actions{display:flex;align-items:center;gap:8px}.agentic-diagnostics-panel__badge{padding:2px 6px;border:1px solid rgba(107,114,128,.28);border-radius:8px;font-size:11px;font-weight:600;color:#4b5563}.agentic-diagnostics-panel__toggle,.shared-rule-cockpit__toggle{appearance:none;border:1px solid rgba(30,64,175,.18);border-radius:999px;background:#ffffffd6;color:#1e3a8a;cursor:pointer;font-size:11px;font-weight:700;line-height:1;padding:6px 9px;white-space:nowrap}.agentic-diagnostics-panel__description{margin:8px 0 10px;color:#4b5563;font-size:12px;line-height:1.4}.agentic-diagnostics-panel pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.45;color:#1f2937}praxis-ai-assistant-shell{position:fixed;inset:0;z-index:140;pointer-events:none}@media(min-width:1100px){.builder-shell--agentic-review-rail{box-sizing:border-box;padding-right:464px}}.builder-shell__agentic-toggle{position:relative}.builder-shell__agentic-toggle--open,.builder-shell__agentic-toggle--minimized{outline:2px solid rgba(96,165,250,.52);outline-offset:2px}.builder-shell__agentic-toggle--minimized:after{content:\"\";position:absolute;top:6px;right:6px;width:8px;height:8px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#34d399}.builder-shell__connections-toggle--open{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 52%,transparent);outline-offset:2px}.builder-shell__connections-toggle{position:relative}.builder-shell__connections-toggle--recommended:not(.builder-shell__connections-toggle--open){outline:2px solid rgba(34,211,238,.48);outline-offset:2px}.builder-shell__connections-toggle-badge{position:absolute;top:5px;right:5px;width:9px;height:9px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#22d3ee;box-shadow:0 0 0 3px #22d3ee2e}.shared-rule-cockpit{position:absolute;z-index:120;left:16px;bottom:88px;width:min(720px,calc(100% - 32px));max-height:min(560px,calc(100vh - 140px));padding:14px;border:1px solid rgba(30,64,175,.22);border-radius:12px;background:linear-gradient(135deg,#eff6fffa,#fffbebf5);color:#172554;box-shadow:0 18px 46px #0f172a38;overflow:auto;overscroll-behavior:contain}.shared-rule-cockpit--collapsed{width:min(360px,calc(100% - 32px));max-height:72px;overflow:hidden;padding:10px 12px}.shared-rule-cockpit__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.shared-rule-cockpit__header-actions{display:flex;align-items:center;gap:8px}.shared-rule-cockpit__header div{display:grid;gap:2px}.shared-rule-cockpit__header strong{font-size:14px;line-height:1.2}.shared-rule-cockpit__header span{color:#475569;font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__badge{flex:0 0 auto;max-width:220px;padding:3px 8px;border:1px solid rgba(30,64,175,.2);border-radius:999px;background:#ffffffbd;color:#1e3a8a;font-size:11px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shared-rule-cockpit__description,.shared-rule-cockpit__status,.shared-rule-cockpit__error{margin:10px 0 0;color:#334155;font-size:12px;line-height:1.45}.shared-rule-cockpit__error{color:#991b1b;font-weight:600}.shared-rule-cockpit__actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.shared-rule-cockpit__facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0 0}.shared-rule-cockpit__facts div{min-width:0;padding:8px;border-radius:10px;background:#ffffffb8}.shared-rule-cockpit__facts dt{color:#64748b;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.shared-rule-cockpit__facts dd{margin:4px 0 0;color:#0f172a;font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__enforcement-matrix{display:grid;gap:10px;margin-top:12px;padding:10px;border:1px solid rgba(30,64,175,.14);border-radius:12px;background:#ffffff94}.shared-rule-cockpit__matrix-header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.shared-rule-cockpit__matrix-header div{display:grid;gap:2px}.shared-rule-cockpit__matrix-header strong{color:#0f172a;font-size:12px}.shared-rule-cockpit__matrix-header span,.shared-rule-cockpit__matrix-source{color:#475569;font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-badge{flex:0 0 auto;padding:3px 8px;border-radius:999px;background:#16a34a1f;color:#166534;font-weight:800;white-space:nowrap}.shared-rule-cockpit__projection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.shared-rule-cockpit__projection{display:grid;gap:3px;min-width:0;padding:9px;border:1px solid rgba(15,23,42,.08);border-radius:11px;background:#f8fafcd1}.shared-rule-cockpit__projection[data-status=ready]{border-color:#16a34a33;background:#f0fdf4d1}.shared-rule-cockpit__projection span{color:#1d4ed8;font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;overflow-wrap:anywhere}.shared-rule-cockpit__projection strong{color:#0f172a;font-size:12px}.shared-rule-cockpit__projection small,.shared-rule-cockpit__projection em{color:#475569;font-size:11px;font-style:normal;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-source{margin:0}.shared-rule-cockpit__timeline{display:grid;gap:8px;max-height:190px;margin:12px 0 0;padding:0;overflow:auto;list-style:none}.shared-rule-cockpit__timeline-item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;padding:10px;border:1px solid rgba(30,64,175,.12);border-radius:12px;background:#ffffffc2}.shared-rule-cockpit__timeline-icon{display:grid;width:24px;height:24px;place-items:center;border-radius:999px;background:#1e40af1a;color:#1e3a8a;font-family:Material Icons;font-size:16px;line-height:1}.shared-rule-cockpit__timeline-item strong{color:#0f172a;font-size:12px;line-height:1.35}.shared-rule-cockpit__timeline-item p,.shared-rule-cockpit__timeline-item small,.shared-rule-cockpit__timeline-item time,.shared-rule-cockpit__timeline-empty{display:block;margin:3px 0 0;color:#475569;font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__timeline-badge{display:inline-flex;margin-left:6px;padding:2px 6px;border-radius:999px;background:#0ea5e91f;color:#075985;font-size:10px;font-weight:700}.shared-rule-cockpit__timeline-empty{padding:10px;border-radius:12px;background:#ffffffa3}@media(max-width:720px){.shared-rule-cockpit{bottom:72px;max-height:calc(100vh - 112px)}.shared-rule-cockpit__facts,.shared-rule-cockpit__projection-grid{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: DynamicWidgetPageComponent, selector: "praxis-dynamic-page", inputs: ["page", "context", "strictValidation", "enableCustomization", "showPageSettingsButton", "shellEditorComponent", "pageEditorComponent", "autoPersist", "pageIdentity", "componentInstanceId", "showWidgetAssistantButton"], outputs: ["pageChange", "widgetEvent", "widgetSelectionChange", "widgetAssistantRequested", "widgetDiagnosticsChange"] }, { kind: "component", type: FloatingToolbarComponent, selector: "praxis-floating-toolbar", inputs: ["visible", "canUndo", "canRedo", "showSave", "showPreview", "editingEnabled", "previewActive", "connectionMode", "modeLabel", "previewLabel", "exitPreviewLabel"], outputs: ["add", "undo", "redo", "settings", "preview", "save"] }, { kind: "component", type: ConnectionEditorComponent, selector: "praxis-connection-editor", inputs: ["open", "page"], outputs: ["pageChange", "focusWidget", "openPageSettings", "close"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }] });
|
|
24165
|
+
`, isInline: true, styles: [":host{display:block;position:relative;min-height:var(--pdx-page-builder-min-height, 420px)}.builder-shell{display:block;position:relative;min-height:inherit;height:100%}.builder-shell:has(.pdx-shell.fullscreen) praxis-floating-toolbar{display:none}.builder-premium-readiness{display:grid;grid-template-columns:minmax(220px,.72fr) minmax(0,1.28fr);gap:12px;width:100%;margin:0 0 14px;padding:14px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 72%,transparent);border-radius:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 10%,transparent),transparent 36%),color-mix(in srgb,var(--md-sys-color-surface-container-lowest, #fff) 96%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-on-surface, #1d1b20) 5%,transparent)}.builder-premium-readiness__header{display:flex;align-items:flex-start;gap:10px;min-width:0}.builder-premium-readiness__header strong{display:block;font-size:13px;line-height:1.25}.builder-premium-readiness__header p,.builder-premium-readiness__item p{margin:2px 0 0;color:var(--md-sys-color-on-surface-variant, #49454f);font-size:11px;line-height:1.35}.builder-premium-readiness__icon{color:var(--md-sys-color-primary, #6750a4);font-size:20px;line-height:1}.builder-premium-readiness__list{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin:0;padding:0;list-style:none}.builder-premium-readiness__item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;min-width:0;padding:9px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 64%,transparent);border-radius:10px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low, #f7f2fa) 84%,transparent)}.builder-premium-readiness__item strong{display:block;font-size:12px;line-height:1.25}.builder-premium-readiness__action{appearance:none;display:inline-flex;align-items:center;justify-content:center;min-height:26px;margin-top:7px;padding:4px 8px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 34%,transparent);border-radius:7px;background:color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 9%,var(--md-sys-color-surface, #fff));color:var(--md-sys-color-primary, #6750a4);cursor:pointer;font:inherit;font-size:11px;font-weight:700;line-height:1.2;text-align:left}.builder-premium-readiness__severity{width:8px;height:8px;margin-top:4px;border-radius:999px;background:var(--md-sys-color-primary, #6750a4)}.builder-premium-readiness__item[data-severity=warning] .builder-premium-readiness__severity{background:var(--praxis-warning, #b26a00)}.builder-premium-readiness__item[data-severity=error] .builder-premium-readiness__severity{background:var(--md-sys-color-error, #b3261e)}@media(max-width:760px){.builder-premium-readiness{grid-template-columns:1fr}}.agentic-diagnostics-panel{position:absolute;z-index:21;right:16px;width:min(520px,calc(100% - 32px));max-height:min(440px,calc(100% - 32px));overflow:auto;padding:12px;border:1px solid rgba(107,114,128,.28);border-radius:8px;background:#fffffff5;color:#111827;box-shadow:0 14px 36px #0000003d}.agentic-diagnostics-panel--collapsed{width:min(280px,calc(100% - 32px));max-height:58px;overflow:hidden;padding:10px 12px;pointer-events:auto}.agentic-diagnostics-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px;font-weight:700}.agentic-diagnostics-panel__header-actions{display:flex;align-items:center;gap:8px}.agentic-diagnostics-panel__badge{padding:2px 6px;border:1px solid rgba(107,114,128,.28);border-radius:8px;font-size:11px;font-weight:600;color:#4b5563}.agentic-diagnostics-panel__toggle,.shared-rule-cockpit__toggle{appearance:none;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 18%,transparent);border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 84%,transparent);color:var(--md-sys-color-primary);cursor:pointer;font-size:11px;font-weight:700;line-height:1;padding:6px 9px;white-space:nowrap}.agentic-diagnostics-panel__description{margin:8px 0 10px;color:#4b5563;font-size:12px;line-height:1.4}.agentic-diagnostics-panel pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.45;color:#1f2937}.agentic-diagnostics-panel__health{display:grid;gap:8px;margin-bottom:12px}.agentic-diagnostics-panel__health h3,.agentic-diagnostics-panel__health p{margin:0}.agentic-diagnostics-panel__health h3{font-size:13px}.agentic-diagnostics-panel__health p{color:#4b5563;font-size:11px}.agentic-diagnostics-panel__metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:0}.agentic-diagnostics-panel__metrics div{padding:8px;border-radius:8px;background:#f3f4f6}.agentic-diagnostics-panel__metrics dt{color:#4b5563;font-size:10px}.agentic-diagnostics-panel__metrics dd{margin:3px 0 0;font-size:14px;font-weight:700}.agentic-diagnostics-panel__health-table{width:100%;border-collapse:collapse;font-size:10px}.agentic-diagnostics-panel__health-table caption{margin-bottom:4px;text-align:left;font-weight:700}.agentic-diagnostics-panel__health-table th,.agentic-diagnostics-panel__health-table td{padding:5px 4px;border-bottom:1px solid #e5e7eb;text-align:left}.agentic-diagnostics-panel__raw summary{margin-bottom:8px;cursor:pointer;font-size:11px;font-weight:700}@media(max-width:520px){.agentic-diagnostics-panel__metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}praxis-ai-assistant-shell{position:fixed;inset:0;z-index:140;pointer-events:none}@media(min-width:1100px){.builder-shell--agentic-review-rail{box-sizing:border-box;padding-right:464px}}.builder-shell__agentic-toggle{position:relative}.builder-shell__agentic-toggle--open,.builder-shell__agentic-toggle--minimized{outline:2px solid rgba(96,165,250,.52);outline-offset:2px}.builder-shell__agentic-toggle--minimized:after{content:\"\";position:absolute;top:6px;right:6px;width:8px;height:8px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#34d399}.builder-shell__connections-toggle--open{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 52%,transparent);outline-offset:2px}.builder-shell__connections-toggle{position:relative}.builder-shell__connections-toggle--recommended:not(.builder-shell__connections-toggle--open){outline:2px solid rgba(34,211,238,.48);outline-offset:2px}.builder-shell__connections-toggle-badge{position:absolute;top:5px;right:5px;width:9px;height:9px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#22d3ee;box-shadow:0 0 0 3px #22d3ee2e}.shared-rule-cockpit{position:absolute;z-index:120;left:16px;bottom:88px;width:min(720px,calc(100% - 32px));max-height:min(560px,calc(100vh - 140px));padding:14px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 24%,transparent);border-radius:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary-container) 24%,var(--md-sys-color-surface-container-high) 76%),color-mix(in srgb,var(--md-sys-color-tertiary-container) 18%,var(--md-sys-color-surface-container) 82%));color:var(--md-sys-color-on-surface);box-shadow:0 18px 46px color-mix(in srgb,var(--md-sys-color-shadow, #000) 24%,transparent);overflow:auto;overscroll-behavior:contain}.shared-rule-cockpit--collapsed{width:min(360px,calc(100% - 32px));max-height:72px;overflow:hidden;padding:10px 12px}.shared-rule-cockpit__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.shared-rule-cockpit__header-actions{display:flex;align-items:center;gap:8px}.shared-rule-cockpit__header div{display:grid;gap:2px}.shared-rule-cockpit__header strong{font-size:14px;line-height:1.2}.shared-rule-cockpit__header span{color:var(--md-sys-color-on-surface-variant);font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__badge{flex:0 0 auto;max-width:220px;padding:3px 8px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 20%,transparent);border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 74%,transparent);color:var(--md-sys-color-primary);font-size:11px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shared-rule-cockpit__description,.shared-rule-cockpit__status,.shared-rule-cockpit__error{margin:10px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.45}.shared-rule-cockpit__error{color:var(--md-sys-color-error);font-weight:600}.shared-rule-cockpit__actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.shared-rule-cockpit__facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0 0}.shared-rule-cockpit__facts div{min-width:0;padding:8px;border-radius:10px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 72%,transparent)}.shared-rule-cockpit__facts dt{color:var(--md-sys-color-on-surface-variant);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.shared-rule-cockpit__facts dd{margin:4px 0 0;color:var(--md-sys-color-on-surface);font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__enforcement-matrix{display:grid;gap:10px;margin-top:12px;padding:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,transparent);border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 58%,transparent)}.shared-rule-cockpit__matrix-header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.shared-rule-cockpit__matrix-header div{display:grid;gap:2px}.shared-rule-cockpit__matrix-header strong{color:var(--md-sys-color-on-surface);font-size:12px}.shared-rule-cockpit__matrix-header span,.shared-rule-cockpit__matrix-source{color:var(--md-sys-color-on-surface-variant);font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-badge{flex:0 0 auto;padding:3px 8px;border-radius:999px;background:#16a34a1f;color:#166534;font-weight:800;white-space:nowrap}.shared-rule-cockpit__projection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.shared-rule-cockpit__projection{display:grid;gap:3px;min-width:0;padding:9px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 52%,transparent);border-radius:11px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 82%,transparent)}.shared-rule-cockpit__projection[data-status=ready]{border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 24%,transparent);background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 32%,var(--md-sys-color-surface-container-low) 68%)}.shared-rule-cockpit__projection span{color:var(--md-sys-color-primary);font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;overflow-wrap:anywhere}.shared-rule-cockpit__projection strong{color:var(--md-sys-color-on-surface);font-size:12px}.shared-rule-cockpit__projection small,.shared-rule-cockpit__projection em{color:var(--md-sys-color-on-surface-variant);font-size:11px;font-style:normal;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-source{margin:0}.shared-rule-cockpit__timeline{display:grid;gap:8px;max-height:190px;margin:12px 0 0;padding:0;overflow:auto;list-style:none}.shared-rule-cockpit__timeline-item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;padding:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent);border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 76%,transparent)}.shared-rule-cockpit__timeline-icon{display:grid;width:24px;height:24px;place-items:center;border-radius:999px;background:#1e40af1a;color:var(--md-sys-color-primary);font-family:Material Icons;font-size:16px;line-height:1}.shared-rule-cockpit__timeline-item strong{color:var(--md-sys-color-on-surface);font-size:12px;line-height:1.35}.shared-rule-cockpit__timeline-item p,.shared-rule-cockpit__timeline-item small,.shared-rule-cockpit__timeline-item time,.shared-rule-cockpit__timeline-empty{display:block;margin:3px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__timeline-badge{display:inline-flex;margin-left:6px;padding:2px 6px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-secondary-container) 42%,transparent);color:var(--md-sys-color-on-secondary-container);font-size:10px;font-weight:700}.shared-rule-cockpit__timeline-empty{padding:10px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 64%,transparent)}@media(max-width:720px){.shared-rule-cockpit{bottom:72px;max-height:calc(100vh - 112px)}.shared-rule-cockpit__facts,.shared-rule-cockpit__projection-grid{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: DynamicWidgetPageComponent, selector: "praxis-dynamic-page", inputs: ["page", "context", "strictValidation", "enableCustomization", "showPageSettingsButton", "shellEditorComponent", "pageEditorComponent", "autoPersist", "pageIdentity", "componentInstanceId", "showWidgetAssistantButton"], outputs: ["pageChange", "widgetEvent", "widgetSelectionChange", "widgetAssistantRequested", "widgetDiagnosticsChange"] }, { kind: "component", type: FloatingToolbarComponent, selector: "praxis-floating-toolbar", inputs: ["visible", "canUndo", "canRedo", "showSave", "showPreview", "editingEnabled", "previewActive", "connectionMode", "modeLabel", "previewLabel", "exitPreviewLabel"], outputs: ["add", "undo", "redo", "settings", "preview", "save"] }, { kind: "component", type: ConnectionEditorComponent, selector: "praxis-connection-editor", inputs: ["open", "page"], outputs: ["pageChange", "focusWidget", "openPageSettings", "close"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }] });
|
|
23886
24166
|
}
|
|
23887
24167
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DynamicPageBuilderComponent, decorators: [{
|
|
23888
24168
|
type: Component,
|
|
@@ -24013,7 +24293,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
24013
24293
|
/>
|
|
24014
24294
|
}
|
|
24015
24295
|
|
|
24016
|
-
@if (agenticAuthoringIncludeLlmDiagnostics &&
|
|
24296
|
+
@if (agenticAuthoringIncludeLlmDiagnostics && agenticAuthoringDiagnosticsAvailable()) {
|
|
24017
24297
|
<section
|
|
24018
24298
|
class="agentic-diagnostics-panel"
|
|
24019
24299
|
[class.agentic-diagnostics-panel--collapsed]="agenticAuthoringLlmDiagnosticsCollapsed()"
|
|
@@ -24045,7 +24325,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
24045
24325
|
<p class="agentic-diagnostics-panel__description">
|
|
24046
24326
|
{{ tx('agentic.diagnostics.description', 'Informações usadas para explicar como o assistente chegou à resposta deste pedido.') }}
|
|
24047
24327
|
</p>
|
|
24048
|
-
|
|
24328
|
+
@if (agenticTurnHealth().started) {
|
|
24329
|
+
<section class="agentic-diagnostics-panel__health" data-testid="page-builder-agentic-turn-health">
|
|
24330
|
+
<h3>{{ tx('agentic.diagnostics.health.title', 'Assistant health') }}</h3>
|
|
24331
|
+
<p>{{ tx('agentic.diagnostics.health.description', 'Recent authoring turn reliability and response time.') }}</p>
|
|
24332
|
+
<dl class="agentic-diagnostics-panel__metrics">
|
|
24333
|
+
<div>
|
|
24334
|
+
<dt>{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</dt>
|
|
24335
|
+
<dd data-testid="page-builder-agentic-health-success">{{ formatAgenticMetricPercent(agenticTurnHealth().successRate) }}</dd>
|
|
24336
|
+
</div>
|
|
24337
|
+
<div>
|
|
24338
|
+
<dt>{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</dt>
|
|
24339
|
+
<dd data-testid="page-builder-agentic-health-timeout">{{ formatAgenticMetricPercent(agenticTurnHealth().timeoutRate) }}</dd>
|
|
24340
|
+
</div>
|
|
24341
|
+
<div>
|
|
24342
|
+
<dt>{{ tx('agentic.diagnostics.health.p50', 'Typical (P50)') }}</dt>
|
|
24343
|
+
<dd data-testid="page-builder-agentic-health-p50">{{ formatAgenticDuration(agenticTurnHealth().p50DurationMs) }}</dd>
|
|
24344
|
+
</div>
|
|
24345
|
+
<div>
|
|
24346
|
+
<dt>{{ tx('agentic.diagnostics.health.p95', 'Slow edge (P95)') }}</dt>
|
|
24347
|
+
<dd data-testid="page-builder-agentic-health-p95">{{ formatAgenticDuration(agenticTurnHealth().p95DurationMs) }}</dd>
|
|
24348
|
+
</div>
|
|
24349
|
+
</dl>
|
|
24350
|
+
@if (agenticTurnHealthBuckets().length) {
|
|
24351
|
+
<table class="agentic-diagnostics-panel__health-table" data-testid="page-builder-agentic-health-breakdown">
|
|
24352
|
+
<caption>{{ tx('agentic.diagnostics.health.breakdown', 'Provider and model breakdown') }}</caption>
|
|
24353
|
+
<thead>
|
|
24354
|
+
<tr>
|
|
24355
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.dimension', 'Dimension') }}</th>
|
|
24356
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.name', 'Name') }}</th>
|
|
24357
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</th>
|
|
24358
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</th>
|
|
24359
|
+
<th scope="col">P95</th>
|
|
24360
|
+
</tr>
|
|
24361
|
+
</thead>
|
|
24362
|
+
<tbody>
|
|
24363
|
+
@for (entry of agenticTurnHealthBuckets(); track entry.dimension + ':' + entry.bucket.key) {
|
|
24364
|
+
<tr>
|
|
24365
|
+
<td>{{ entry.dimension === 'provider' ? tx('agentic.diagnostics.health.provider', 'Provider') : tx('agentic.diagnostics.health.model', 'Model') }}</td>
|
|
24366
|
+
<th scope="row">{{ entry.bucket.key }}</th>
|
|
24367
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.successRate) }}</td>
|
|
24368
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.timeoutRate) }}</td>
|
|
24369
|
+
<td>{{ formatAgenticDuration(entry.bucket.p95DurationMs) }}</td>
|
|
24370
|
+
</tr>
|
|
24371
|
+
}
|
|
24372
|
+
</tbody>
|
|
24373
|
+
</table>
|
|
24374
|
+
}
|
|
24375
|
+
</section>
|
|
24376
|
+
}
|
|
24377
|
+
@if (agenticAuthoringLlmDiagnosticsText()) {
|
|
24378
|
+
<details class="agentic-diagnostics-panel__raw">
|
|
24379
|
+
<summary>{{ tx('agentic.diagnostics.raw', 'Turn details') }}</summary>
|
|
24380
|
+
<pre>{{ agenticAuthoringLlmDiagnosticsText() }}</pre>
|
|
24381
|
+
</details>
|
|
24382
|
+
}
|
|
24049
24383
|
}
|
|
24050
24384
|
</section>
|
|
24051
24385
|
}
|
|
@@ -24382,7 +24716,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
24382
24716
|
}
|
|
24383
24717
|
</praxis-floating-toolbar>
|
|
24384
24718
|
</div>
|
|
24385
|
-
`, styles: [":host{display:block;position:relative;min-height:var(--pdx-page-builder-min-height, 420px)}.builder-shell{display:block;position:relative;min-height:inherit;height:100%}.builder-shell:has(.pdx-shell.fullscreen) praxis-floating-toolbar{display:none}.builder-premium-readiness{display:grid;grid-template-columns:minmax(220px,.72fr) minmax(0,1.28fr);gap:12px;width:100%;margin:0 0 14px;padding:14px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 72%,transparent);border-radius:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 10%,transparent),transparent 36%),color-mix(in srgb,var(--md-sys-color-surface-container-lowest, #fff) 96%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-on-surface, #1d1b20) 5%,transparent)}.builder-premium-readiness__header{display:flex;align-items:flex-start;gap:10px;min-width:0}.builder-premium-readiness__header strong{display:block;font-size:13px;line-height:1.25}.builder-premium-readiness__header p,.builder-premium-readiness__item p{margin:2px 0 0;color:var(--md-sys-color-on-surface-variant, #49454f);font-size:11px;line-height:1.35}.builder-premium-readiness__icon{color:var(--md-sys-color-primary, #6750a4);font-size:20px;line-height:1}.builder-premium-readiness__list{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin:0;padding:0;list-style:none}.builder-premium-readiness__item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;min-width:0;padding:9px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 64%,transparent);border-radius:10px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low, #f7f2fa) 84%,transparent)}.builder-premium-readiness__item strong{display:block;font-size:12px;line-height:1.25}.builder-premium-readiness__action{appearance:none;display:inline-flex;align-items:center;justify-content:center;min-height:26px;margin-top:7px;padding:4px 8px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 34%,transparent);border-radius:7px;background:color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 9%,var(--md-sys-color-surface, #fff));color:var(--md-sys-color-primary, #6750a4);cursor:pointer;font:inherit;font-size:11px;font-weight:700;line-height:1.2;text-align:left}.builder-premium-readiness__severity{width:8px;height:8px;margin-top:4px;border-radius:999px;background:var(--md-sys-color-primary, #6750a4)}.builder-premium-readiness__item[data-severity=warning] .builder-premium-readiness__severity{background:var(--praxis-warning, #b26a00)}.builder-premium-readiness__item[data-severity=error] .builder-premium-readiness__severity{background:var(--md-sys-color-error, #b3261e)}@media(max-width:760px){.builder-premium-readiness{grid-template-columns:1fr}}.agentic-diagnostics-panel{position:absolute;z-index:21;right:16px;width:min(520px,calc(100% - 32px));max-height:min(440px,calc(100% - 32px));overflow:auto;padding:12px;border:1px solid rgba(107,114,128,.28);border-radius:8px;background:#fffffff5;color:#111827;box-shadow:0 14px 36px #0000003d}.agentic-diagnostics-panel--collapsed{width:min(280px,calc(100% - 32px));max-height:58px;overflow:hidden;padding:10px 12px;pointer-events:auto}.agentic-diagnostics-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px;font-weight:700}.agentic-diagnostics-panel__header-actions{display:flex;align-items:center;gap:8px}.agentic-diagnostics-panel__badge{padding:2px 6px;border:1px solid rgba(107,114,128,.28);border-radius:8px;font-size:11px;font-weight:600;color:#4b5563}.agentic-diagnostics-panel__toggle,.shared-rule-cockpit__toggle{appearance:none;border:1px solid rgba(30,64,175,.18);border-radius:999px;background:#ffffffd6;color:#1e3a8a;cursor:pointer;font-size:11px;font-weight:700;line-height:1;padding:6px 9px;white-space:nowrap}.agentic-diagnostics-panel__description{margin:8px 0 10px;color:#4b5563;font-size:12px;line-height:1.4}.agentic-diagnostics-panel pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.45;color:#1f2937}praxis-ai-assistant-shell{position:fixed;inset:0;z-index:140;pointer-events:none}@media(min-width:1100px){.builder-shell--agentic-review-rail{box-sizing:border-box;padding-right:464px}}.builder-shell__agentic-toggle{position:relative}.builder-shell__agentic-toggle--open,.builder-shell__agentic-toggle--minimized{outline:2px solid rgba(96,165,250,.52);outline-offset:2px}.builder-shell__agentic-toggle--minimized:after{content:\"\";position:absolute;top:6px;right:6px;width:8px;height:8px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#34d399}.builder-shell__connections-toggle--open{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 52%,transparent);outline-offset:2px}.builder-shell__connections-toggle{position:relative}.builder-shell__connections-toggle--recommended:not(.builder-shell__connections-toggle--open){outline:2px solid rgba(34,211,238,.48);outline-offset:2px}.builder-shell__connections-toggle-badge{position:absolute;top:5px;right:5px;width:9px;height:9px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#22d3ee;box-shadow:0 0 0 3px #22d3ee2e}.shared-rule-cockpit{position:absolute;z-index:120;left:16px;bottom:88px;width:min(720px,calc(100% - 32px));max-height:min(560px,calc(100vh - 140px));padding:14px;border:1px solid rgba(30,64,175,.22);border-radius:12px;background:linear-gradient(135deg,#eff6fffa,#fffbebf5);color:#172554;box-shadow:0 18px 46px #0f172a38;overflow:auto;overscroll-behavior:contain}.shared-rule-cockpit--collapsed{width:min(360px,calc(100% - 32px));max-height:72px;overflow:hidden;padding:10px 12px}.shared-rule-cockpit__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.shared-rule-cockpit__header-actions{display:flex;align-items:center;gap:8px}.shared-rule-cockpit__header div{display:grid;gap:2px}.shared-rule-cockpit__header strong{font-size:14px;line-height:1.2}.shared-rule-cockpit__header span{color:#475569;font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__badge{flex:0 0 auto;max-width:220px;padding:3px 8px;border:1px solid rgba(30,64,175,.2);border-radius:999px;background:#ffffffbd;color:#1e3a8a;font-size:11px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shared-rule-cockpit__description,.shared-rule-cockpit__status,.shared-rule-cockpit__error{margin:10px 0 0;color:#334155;font-size:12px;line-height:1.45}.shared-rule-cockpit__error{color:#991b1b;font-weight:600}.shared-rule-cockpit__actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.shared-rule-cockpit__facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0 0}.shared-rule-cockpit__facts div{min-width:0;padding:8px;border-radius:10px;background:#ffffffb8}.shared-rule-cockpit__facts dt{color:#64748b;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.shared-rule-cockpit__facts dd{margin:4px 0 0;color:#0f172a;font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__enforcement-matrix{display:grid;gap:10px;margin-top:12px;padding:10px;border:1px solid rgba(30,64,175,.14);border-radius:12px;background:#ffffff94}.shared-rule-cockpit__matrix-header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.shared-rule-cockpit__matrix-header div{display:grid;gap:2px}.shared-rule-cockpit__matrix-header strong{color:#0f172a;font-size:12px}.shared-rule-cockpit__matrix-header span,.shared-rule-cockpit__matrix-source{color:#475569;font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-badge{flex:0 0 auto;padding:3px 8px;border-radius:999px;background:#16a34a1f;color:#166534;font-weight:800;white-space:nowrap}.shared-rule-cockpit__projection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.shared-rule-cockpit__projection{display:grid;gap:3px;min-width:0;padding:9px;border:1px solid rgba(15,23,42,.08);border-radius:11px;background:#f8fafcd1}.shared-rule-cockpit__projection[data-status=ready]{border-color:#16a34a33;background:#f0fdf4d1}.shared-rule-cockpit__projection span{color:#1d4ed8;font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;overflow-wrap:anywhere}.shared-rule-cockpit__projection strong{color:#0f172a;font-size:12px}.shared-rule-cockpit__projection small,.shared-rule-cockpit__projection em{color:#475569;font-size:11px;font-style:normal;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-source{margin:0}.shared-rule-cockpit__timeline{display:grid;gap:8px;max-height:190px;margin:12px 0 0;padding:0;overflow:auto;list-style:none}.shared-rule-cockpit__timeline-item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;padding:10px;border:1px solid rgba(30,64,175,.12);border-radius:12px;background:#ffffffc2}.shared-rule-cockpit__timeline-icon{display:grid;width:24px;height:24px;place-items:center;border-radius:999px;background:#1e40af1a;color:#1e3a8a;font-family:Material Icons;font-size:16px;line-height:1}.shared-rule-cockpit__timeline-item strong{color:#0f172a;font-size:12px;line-height:1.35}.shared-rule-cockpit__timeline-item p,.shared-rule-cockpit__timeline-item small,.shared-rule-cockpit__timeline-item time,.shared-rule-cockpit__timeline-empty{display:block;margin:3px 0 0;color:#475569;font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__timeline-badge{display:inline-flex;margin-left:6px;padding:2px 6px;border-radius:999px;background:#0ea5e91f;color:#075985;font-size:10px;font-weight:700}.shared-rule-cockpit__timeline-empty{padding:10px;border-radius:12px;background:#ffffffa3}@media(max-width:720px){.shared-rule-cockpit{bottom:72px;max-height:calc(100vh - 112px)}.shared-rule-cockpit__facts,.shared-rule-cockpit__projection-grid{grid-template-columns:1fr}}\n"] }]
|
|
24719
|
+
`, styles: [":host{display:block;position:relative;min-height:var(--pdx-page-builder-min-height, 420px)}.builder-shell{display:block;position:relative;min-height:inherit;height:100%}.builder-shell:has(.pdx-shell.fullscreen) praxis-floating-toolbar{display:none}.builder-premium-readiness{display:grid;grid-template-columns:minmax(220px,.72fr) minmax(0,1.28fr);gap:12px;width:100%;margin:0 0 14px;padding:14px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 72%,transparent);border-radius:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 10%,transparent),transparent 36%),color-mix(in srgb,var(--md-sys-color-surface-container-lowest, #fff) 96%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-on-surface, #1d1b20) 5%,transparent)}.builder-premium-readiness__header{display:flex;align-items:flex-start;gap:10px;min-width:0}.builder-premium-readiness__header strong{display:block;font-size:13px;line-height:1.25}.builder-premium-readiness__header p,.builder-premium-readiness__item p{margin:2px 0 0;color:var(--md-sys-color-on-surface-variant, #49454f);font-size:11px;line-height:1.35}.builder-premium-readiness__icon{color:var(--md-sys-color-primary, #6750a4);font-size:20px;line-height:1}.builder-premium-readiness__list{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin:0;padding:0;list-style:none}.builder-premium-readiness__item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;min-width:0;padding:9px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #cac4d0) 64%,transparent);border-radius:10px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low, #f7f2fa) 84%,transparent)}.builder-premium-readiness__item strong{display:block;font-size:12px;line-height:1.25}.builder-premium-readiness__action{appearance:none;display:inline-flex;align-items:center;justify-content:center;min-height:26px;margin-top:7px;padding:4px 8px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 34%,transparent);border-radius:7px;background:color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 9%,var(--md-sys-color-surface, #fff));color:var(--md-sys-color-primary, #6750a4);cursor:pointer;font:inherit;font-size:11px;font-weight:700;line-height:1.2;text-align:left}.builder-premium-readiness__severity{width:8px;height:8px;margin-top:4px;border-radius:999px;background:var(--md-sys-color-primary, #6750a4)}.builder-premium-readiness__item[data-severity=warning] .builder-premium-readiness__severity{background:var(--praxis-warning, #b26a00)}.builder-premium-readiness__item[data-severity=error] .builder-premium-readiness__severity{background:var(--md-sys-color-error, #b3261e)}@media(max-width:760px){.builder-premium-readiness{grid-template-columns:1fr}}.agentic-diagnostics-panel{position:absolute;z-index:21;right:16px;width:min(520px,calc(100% - 32px));max-height:min(440px,calc(100% - 32px));overflow:auto;padding:12px;border:1px solid rgba(107,114,128,.28);border-radius:8px;background:#fffffff5;color:#111827;box-shadow:0 14px 36px #0000003d}.agentic-diagnostics-panel--collapsed{width:min(280px,calc(100% - 32px));max-height:58px;overflow:hidden;padding:10px 12px;pointer-events:auto}.agentic-diagnostics-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px;font-weight:700}.agentic-diagnostics-panel__header-actions{display:flex;align-items:center;gap:8px}.agentic-diagnostics-panel__badge{padding:2px 6px;border:1px solid rgba(107,114,128,.28);border-radius:8px;font-size:11px;font-weight:600;color:#4b5563}.agentic-diagnostics-panel__toggle,.shared-rule-cockpit__toggle{appearance:none;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 18%,transparent);border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 84%,transparent);color:var(--md-sys-color-primary);cursor:pointer;font-size:11px;font-weight:700;line-height:1;padding:6px 9px;white-space:nowrap}.agentic-diagnostics-panel__description{margin:8px 0 10px;color:#4b5563;font-size:12px;line-height:1.4}.agentic-diagnostics-panel pre{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.45;color:#1f2937}.agentic-diagnostics-panel__health{display:grid;gap:8px;margin-bottom:12px}.agentic-diagnostics-panel__health h3,.agentic-diagnostics-panel__health p{margin:0}.agentic-diagnostics-panel__health h3{font-size:13px}.agentic-diagnostics-panel__health p{color:#4b5563;font-size:11px}.agentic-diagnostics-panel__metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:0}.agentic-diagnostics-panel__metrics div{padding:8px;border-radius:8px;background:#f3f4f6}.agentic-diagnostics-panel__metrics dt{color:#4b5563;font-size:10px}.agentic-diagnostics-panel__metrics dd{margin:3px 0 0;font-size:14px;font-weight:700}.agentic-diagnostics-panel__health-table{width:100%;border-collapse:collapse;font-size:10px}.agentic-diagnostics-panel__health-table caption{margin-bottom:4px;text-align:left;font-weight:700}.agentic-diagnostics-panel__health-table th,.agentic-diagnostics-panel__health-table td{padding:5px 4px;border-bottom:1px solid #e5e7eb;text-align:left}.agentic-diagnostics-panel__raw summary{margin-bottom:8px;cursor:pointer;font-size:11px;font-weight:700}@media(max-width:520px){.agentic-diagnostics-panel__metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}praxis-ai-assistant-shell{position:fixed;inset:0;z-index:140;pointer-events:none}@media(min-width:1100px){.builder-shell--agentic-review-rail{box-sizing:border-box;padding-right:464px}}.builder-shell__agentic-toggle{position:relative}.builder-shell__agentic-toggle--open,.builder-shell__agentic-toggle--minimized{outline:2px solid rgba(96,165,250,.52);outline-offset:2px}.builder-shell__agentic-toggle--minimized:after{content:\"\";position:absolute;top:6px;right:6px;width:8px;height:8px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#34d399}.builder-shell__connections-toggle--open{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary, #6750a4) 52%,transparent);outline-offset:2px}.builder-shell__connections-toggle{position:relative}.builder-shell__connections-toggle--recommended:not(.builder-shell__connections-toggle--open){outline:2px solid rgba(34,211,238,.48);outline-offset:2px}.builder-shell__connections-toggle-badge{position:absolute;top:5px;right:5px;width:9px;height:9px;border:2px solid var(--md-sys-color-surface, #111827);border-radius:999px;background:#22d3ee;box-shadow:0 0 0 3px #22d3ee2e}.shared-rule-cockpit{position:absolute;z-index:120;left:16px;bottom:88px;width:min(720px,calc(100% - 32px));max-height:min(560px,calc(100vh - 140px));padding:14px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 24%,transparent);border-radius:12px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary-container) 24%,var(--md-sys-color-surface-container-high) 76%),color-mix(in srgb,var(--md-sys-color-tertiary-container) 18%,var(--md-sys-color-surface-container) 82%));color:var(--md-sys-color-on-surface);box-shadow:0 18px 46px color-mix(in srgb,var(--md-sys-color-shadow, #000) 24%,transparent);overflow:auto;overscroll-behavior:contain}.shared-rule-cockpit--collapsed{width:min(360px,calc(100% - 32px));max-height:72px;overflow:hidden;padding:10px 12px}.shared-rule-cockpit__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.shared-rule-cockpit__header-actions{display:flex;align-items:center;gap:8px}.shared-rule-cockpit__header div{display:grid;gap:2px}.shared-rule-cockpit__header strong{font-size:14px;line-height:1.2}.shared-rule-cockpit__header span{color:var(--md-sys-color-on-surface-variant);font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__badge{flex:0 0 auto;max-width:220px;padding:3px 8px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 20%,transparent);border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 74%,transparent);color:var(--md-sys-color-primary);font-size:11px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shared-rule-cockpit__description,.shared-rule-cockpit__status,.shared-rule-cockpit__error{margin:10px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.45}.shared-rule-cockpit__error{color:var(--md-sys-color-error);font-weight:600}.shared-rule-cockpit__actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.shared-rule-cockpit__facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0 0}.shared-rule-cockpit__facts div{min-width:0;padding:8px;border-radius:10px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 72%,transparent)}.shared-rule-cockpit__facts dt{color:var(--md-sys-color-on-surface-variant);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.shared-rule-cockpit__facts dd{margin:4px 0 0;color:var(--md-sys-color-on-surface);font-size:12px;overflow-wrap:anywhere}.shared-rule-cockpit__enforcement-matrix{display:grid;gap:10px;margin-top:12px;padding:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,transparent);border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 58%,transparent)}.shared-rule-cockpit__matrix-header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.shared-rule-cockpit__matrix-header div{display:grid;gap:2px}.shared-rule-cockpit__matrix-header strong{color:var(--md-sys-color-on-surface);font-size:12px}.shared-rule-cockpit__matrix-header span,.shared-rule-cockpit__matrix-source{color:var(--md-sys-color-on-surface-variant);font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-badge{flex:0 0 auto;padding:3px 8px;border-radius:999px;background:#16a34a1f;color:#166534;font-weight:800;white-space:nowrap}.shared-rule-cockpit__projection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.shared-rule-cockpit__projection{display:grid;gap:3px;min-width:0;padding:9px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 52%,transparent);border-radius:11px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 82%,transparent)}.shared-rule-cockpit__projection[data-status=ready]{border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 24%,transparent);background:color-mix(in srgb,var(--md-sys-color-tertiary-container) 32%,var(--md-sys-color-surface-container-low) 68%)}.shared-rule-cockpit__projection span{color:var(--md-sys-color-primary);font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;overflow-wrap:anywhere}.shared-rule-cockpit__projection strong{color:var(--md-sys-color-on-surface);font-size:12px}.shared-rule-cockpit__projection small,.shared-rule-cockpit__projection em{color:var(--md-sys-color-on-surface-variant);font-size:11px;font-style:normal;overflow-wrap:anywhere}.shared-rule-cockpit__matrix-source{margin:0}.shared-rule-cockpit__timeline{display:grid;gap:8px;max-height:190px;margin:12px 0 0;padding:0;overflow:auto;list-style:none}.shared-rule-cockpit__timeline-item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;padding:10px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent);border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 76%,transparent)}.shared-rule-cockpit__timeline-icon{display:grid;width:24px;height:24px;place-items:center;border-radius:999px;background:#1e40af1a;color:var(--md-sys-color-primary);font-family:Material Icons;font-size:16px;line-height:1}.shared-rule-cockpit__timeline-item strong{color:var(--md-sys-color-on-surface);font-size:12px;line-height:1.35}.shared-rule-cockpit__timeline-item p,.shared-rule-cockpit__timeline-item small,.shared-rule-cockpit__timeline-item time,.shared-rule-cockpit__timeline-empty{display:block;margin:3px 0 0;color:var(--md-sys-color-on-surface-variant);font-size:11px;line-height:1.35;overflow-wrap:anywhere}.shared-rule-cockpit__timeline-badge{display:inline-flex;margin-left:6px;padding:2px 6px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-secondary-container) 42%,transparent);color:var(--md-sys-color-on-secondary-container);font-size:10px;font-weight:700}.shared-rule-cockpit__timeline-empty{padding:10px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 64%,transparent)}@media(max-width:720px){.shared-rule-cockpit{bottom:72px;max-height:calc(100vh - 112px)}.shared-rule-cockpit__facts,.shared-rule-cockpit__projection-grid{grid-template-columns:1fr}}\n"] }]
|
|
24386
24720
|
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: undefined, decorators: [{
|
|
24387
24721
|
type: Optional
|
|
24388
24722
|
}, {
|