@praxisui/page-builder 9.0.0-beta.76 → 9.0.0-beta.78
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 +364 -36
- 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
|
}
|
|
@@ -18910,6 +19046,8 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
18910
19046
|
return 'add_dashboard_kpis';
|
|
18911
19047
|
case 'dashboard-quality-bind-kpis':
|
|
18912
19048
|
return 'bind_dashboard_kpis';
|
|
19049
|
+
case 'dashboard-quality-add-filters':
|
|
19050
|
+
return 'add_dashboard_filters';
|
|
18913
19051
|
case 'dashboard-quality-add-chart':
|
|
18914
19052
|
return 'add_dashboard_chart';
|
|
18915
19053
|
case 'dashboard-quality-add-surfaces':
|
|
@@ -18947,6 +19085,9 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
18947
19085
|
case 'adicionar grafico':
|
|
18948
19086
|
case 'adicionar gráfico':
|
|
18949
19087
|
return 'add_dashboard_chart';
|
|
19088
|
+
case 'add filters':
|
|
19089
|
+
case 'adicionar filtros':
|
|
19090
|
+
return 'add_dashboard_filters';
|
|
18950
19091
|
case 'add surfaces':
|
|
18951
19092
|
case 'adicionar surfaces':
|
|
18952
19093
|
case 'adicionar superficies':
|
|
@@ -19011,8 +19152,13 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
19011
19152
|
}
|
|
19012
19153
|
const operationKind = intentResolution.operationKind;
|
|
19013
19154
|
const changeKind = intentResolution.changeKind;
|
|
19014
|
-
|
|
19015
|
-
|
|
19155
|
+
if (operationKind !== 'explore' && operationKind !== 'explain') {
|
|
19156
|
+
return false;
|
|
19157
|
+
}
|
|
19158
|
+
if (intentResolution.artifactKind === 'component') {
|
|
19159
|
+
return changeKind === 'answer_component_catalog_question';
|
|
19160
|
+
}
|
|
19161
|
+
return intentResolution.artifactKind === 'api_catalog'
|
|
19016
19162
|
&& (changeKind === 'answer_api_catalog_question'
|
|
19017
19163
|
|| changeKind === 'answer_catalog_question'
|
|
19018
19164
|
|| changeKind === 'api_catalog_followup'
|
|
@@ -19591,6 +19737,7 @@ class PageBuilderAgenticAuthoringTurnFlow {
|
|
|
19591
19737
|
userPrompt: prompt,
|
|
19592
19738
|
targetApp: this.context.targetApp,
|
|
19593
19739
|
targetComponentId: this.context.targetComponentId,
|
|
19740
|
+
currentRoute: this.context.currentRoute?.() ?? null,
|
|
19594
19741
|
currentPage: this.context.currentPage(),
|
|
19595
19742
|
selectedWidgetKey: this.resolveSelectedWidgetKey(selectedWidgetKey, authoringContext.contextHints),
|
|
19596
19743
|
provider: this.context.provider(),
|
|
@@ -19922,6 +20069,7 @@ class DynamicPageBuilderComponent {
|
|
|
19922
20069
|
agenticAuthoring = inject(PageBuilderAgenticAuthoringService);
|
|
19923
20070
|
agenticTurnOrchestrator = inject(PraxisAssistantTurnOrchestratorService);
|
|
19924
20071
|
assistantSessions = inject(PraxisAssistantSessionRegistryService);
|
|
20072
|
+
observabilityDashboard = inject(ObservabilityDashboardService);
|
|
19925
20073
|
runtimeObservationRegistry = inject(PraxisRuntimeComponentObservationRegistryService, { optional: true });
|
|
19926
20074
|
agenticAuthoringOptions = inject(PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS, { optional: true });
|
|
19927
20075
|
runtime;
|
|
@@ -19967,6 +20115,7 @@ class DynamicPageBuilderComponent {
|
|
|
19967
20115
|
agenticAuthoringOpen = signal(false, ...(ngDevMode ? [{ debugName: "agenticAuthoringOpen" }] : /* istanbul ignore next */ []));
|
|
19968
20116
|
agenticAuthoringPrompt = signal('', ...(ngDevMode ? [{ debugName: "agenticAuthoringPrompt" }] : /* istanbul ignore next */ []));
|
|
19969
20117
|
agenticAuthoringBusy = signal(false, ...(ngDevMode ? [{ debugName: "agenticAuthoringBusy" }] : /* istanbul ignore next */ []));
|
|
20118
|
+
agenticAuthoringTerminalState = signal(null, ...(ngDevMode ? [{ debugName: "agenticAuthoringTerminalState" }] : /* istanbul ignore next */ []));
|
|
19970
20119
|
agenticAuthoringStatus = signal('', ...(ngDevMode ? [{ debugName: "agenticAuthoringStatus" }] : /* istanbul ignore next */ []));
|
|
19971
20120
|
agenticAuthoringError = signal('', ...(ngDevMode ? [{ debugName: "agenticAuthoringError" }] : /* istanbul ignore next */ []));
|
|
19972
20121
|
agenticAuthoringPreviewResult = signal(null, ...(ngDevMode ? [{ debugName: "agenticAuthoringPreviewResult" }] : /* istanbul ignore next */ []));
|
|
@@ -19995,6 +20144,7 @@ class DynamicPageBuilderComponent {
|
|
|
19995
20144
|
projectKnowledgeCockpitValidation = signal(null, ...(ngDevMode ? [{ debugName: "projectKnowledgeCockpitValidation" }] : /* istanbul ignore next */ []));
|
|
19996
20145
|
projectKnowledgeCockpitTimeline = signal(null, ...(ngDevMode ? [{ debugName: "projectKnowledgeCockpitTimeline" }] : /* istanbul ignore next */ []));
|
|
19997
20146
|
agenticAuthoringLlmDiagnostics = signal(null, ...(ngDevMode ? [{ debugName: "agenticAuthoringLlmDiagnostics" }] : /* istanbul ignore next */ []));
|
|
20147
|
+
agenticTurnHealth = signal(this.emptyAgenticTurnHealth(), ...(ngDevMode ? [{ debugName: "agenticTurnHealth" }] : /* istanbul ignore next */ []));
|
|
19998
20148
|
agenticAuthoringLlmDiagnosticsCollapsed = signal(true, ...(ngDevMode ? [{ debugName: "agenticAuthoringLlmDiagnosticsCollapsed" }] : /* istanbul ignore next */ []));
|
|
19999
20149
|
sharedRuleCockpitCollapsed = signal(false, ...(ngDevMode ? [{ debugName: "sharedRuleCockpitCollapsed" }] : /* istanbul ignore next */ []));
|
|
20000
20150
|
projectKnowledgeCockpitCollapsed = signal(true, ...(ngDevMode ? [{ debugName: "projectKnowledgeCockpitCollapsed" }] : /* istanbul ignore next */ []));
|
|
@@ -20017,9 +20167,13 @@ class DynamicPageBuilderComponent {
|
|
|
20017
20167
|
agenticAuthoringTurnTerminalTimeoutMs = AGENTIC_AUTHORING_TURN_TERMINAL_TIMEOUT_MS;
|
|
20018
20168
|
sharedRuleHandoffRevision = 0;
|
|
20019
20169
|
agenticAuthoringPanelLayoutTouched = false;
|
|
20170
|
+
observabilityMetricsSubscription;
|
|
20020
20171
|
constructor(dialog, settingsPanel) {
|
|
20021
20172
|
this.dialog = dialog;
|
|
20022
20173
|
this.settingsPanel = settingsPanel;
|
|
20174
|
+
this.observabilityMetricsSubscription = this.observabilityDashboard.metrics$.subscribe((snapshot) => {
|
|
20175
|
+
this.agenticTurnHealth.set(snapshot.agenticTurns);
|
|
20176
|
+
});
|
|
20023
20177
|
effect(() => {
|
|
20024
20178
|
const activeSession = this.assistantSessions.activeSession();
|
|
20025
20179
|
if (activeSession?.id === this.resolveAgenticAuthoringSessionId() && !this.agenticAuthoringOpen()) {
|
|
@@ -20067,6 +20221,7 @@ class DynamicPageBuilderComponent {
|
|
|
20067
20221
|
ngOnDestroy() {
|
|
20068
20222
|
this.cancelActiveAgenticTurn();
|
|
20069
20223
|
this.agenticTurnCancel$.complete();
|
|
20224
|
+
this.observabilityMetricsSubscription.unsubscribe();
|
|
20070
20225
|
}
|
|
20071
20226
|
showSettings() {
|
|
20072
20227
|
return !!this.enableCustomization && !this.previewMode;
|
|
@@ -20147,6 +20302,40 @@ class DynamicPageBuilderComponent {
|
|
|
20147
20302
|
toggleAgenticAuthoringLlmDiagnostics() {
|
|
20148
20303
|
this.agenticAuthoringLlmDiagnosticsCollapsed.update((current) => !current);
|
|
20149
20304
|
}
|
|
20305
|
+
agenticAuthoringDiagnosticsAvailable() {
|
|
20306
|
+
return !!this.agenticAuthoringLlmDiagnosticsText() || this.agenticTurnHealth().started > 0;
|
|
20307
|
+
}
|
|
20308
|
+
agenticTurnHealthBuckets() {
|
|
20309
|
+
const health = this.agenticTurnHealth();
|
|
20310
|
+
return [
|
|
20311
|
+
...health.byProvider.map((bucket) => ({ dimension: 'provider', bucket })),
|
|
20312
|
+
...health.byModel.map((bucket) => ({ dimension: 'model', bucket })),
|
|
20313
|
+
];
|
|
20314
|
+
}
|
|
20315
|
+
formatAgenticMetricPercent(rate) {
|
|
20316
|
+
return `${Math.round(Math.max(0, rate) * 100)}%`;
|
|
20317
|
+
}
|
|
20318
|
+
formatAgenticDuration(durationMs) {
|
|
20319
|
+
const safeDurationMs = Math.max(0, Math.round(durationMs));
|
|
20320
|
+
return safeDurationMs < 1_000
|
|
20321
|
+
? `${safeDurationMs} ms`
|
|
20322
|
+
: `${(safeDurationMs / 1_000).toFixed(1)} s`;
|
|
20323
|
+
}
|
|
20324
|
+
emptyAgenticTurnHealth() {
|
|
20325
|
+
return {
|
|
20326
|
+
started: 0,
|
|
20327
|
+
completed: 0,
|
|
20328
|
+
succeeded: 0,
|
|
20329
|
+
timedOut: 0,
|
|
20330
|
+
successRate: 0,
|
|
20331
|
+
timeoutRate: 0,
|
|
20332
|
+
averageDurationMs: 0,
|
|
20333
|
+
p50DurationMs: 0,
|
|
20334
|
+
p95DurationMs: 0,
|
|
20335
|
+
byProvider: [],
|
|
20336
|
+
byModel: [],
|
|
20337
|
+
};
|
|
20338
|
+
}
|
|
20150
20339
|
toggleSharedRuleCockpit() {
|
|
20151
20340
|
this.sharedRuleCockpitCollapsed.update((current) => !current);
|
|
20152
20341
|
}
|
|
@@ -20737,6 +20926,8 @@ class DynamicPageBuilderComponent {
|
|
|
20737
20926
|
return 'review';
|
|
20738
20927
|
if (this.agenticAuthoringSharedRuleHandoffState())
|
|
20739
20928
|
return 'clarification';
|
|
20929
|
+
if (this.agenticAuthoringTerminalState() === 'clarification')
|
|
20930
|
+
return 'clarification';
|
|
20740
20931
|
if (this.agenticAuthoringConversation().length)
|
|
20741
20932
|
return 'listening';
|
|
20742
20933
|
return 'idle';
|
|
@@ -20756,6 +20947,7 @@ class DynamicPageBuilderComponent {
|
|
|
20756
20947
|
this.agenticTurnController = undefined;
|
|
20757
20948
|
this.sharedRuleHandoffRevision += 1;
|
|
20758
20949
|
this.agenticAuthoringBusy.set(false);
|
|
20950
|
+
this.agenticAuthoringTerminalState.set(null);
|
|
20759
20951
|
this.agenticAuthoringPrompt.set('');
|
|
20760
20952
|
this.agenticAuthoringStatus.set('');
|
|
20761
20953
|
this.agenticAuthoringError.set('');
|
|
@@ -21349,7 +21541,11 @@ class DynamicPageBuilderComponent {
|
|
|
21349
21541
|
await this.applyAgenticTurnState(await firstValueFrom(this.ensureAgenticTurnController().cancel()));
|
|
21350
21542
|
return;
|
|
21351
21543
|
}
|
|
21352
|
-
|
|
21544
|
+
const contextHints = reply.contextHints ? { ...reply.contextHints } : undefined;
|
|
21545
|
+
const activeSemanticDecision = reply.semanticDecision
|
|
21546
|
+
? { ...reply.semanticDecision }
|
|
21547
|
+
: undefined;
|
|
21548
|
+
if (replyKind === 'revise' && !this.isGovernedReviewRepairQuickReply(contextHints)) {
|
|
21353
21549
|
this.invalidateAgenticTerminalAuthorization();
|
|
21354
21550
|
this.agenticAuthoringEditingMessageId.set(null);
|
|
21355
21551
|
this.agenticAuthoringQuickReplies.set([]);
|
|
@@ -21357,7 +21553,6 @@ class DynamicPageBuilderComponent {
|
|
|
21357
21553
|
return;
|
|
21358
21554
|
}
|
|
21359
21555
|
this.agenticAuthoringEditingMessageId.set(null);
|
|
21360
|
-
const contextHints = reply.contextHints ? { ...reply.contextHints } : undefined;
|
|
21361
21556
|
const visiblePrompt = this.agenticQuickReplyVisiblePrompt(reply, contextHints);
|
|
21362
21557
|
const submittedPrompt = this.agenticQuickReplySubmittedPrompt(reply, contextHints, visiblePrompt, this.ensureAgenticTurnController().snapshot().pendingClarification);
|
|
21363
21558
|
if (this.promoteSharedRuleHandoffFromQuickReply(reply, contextHints, visiblePrompt)) {
|
|
@@ -21385,7 +21580,10 @@ class DynamicPageBuilderComponent {
|
|
|
21385
21580
|
id: reply.id,
|
|
21386
21581
|
value: reply.prompt,
|
|
21387
21582
|
displayPrompt: visiblePrompt,
|
|
21388
|
-
contextHints
|
|
21583
|
+
contextHints: activeSemanticDecision
|
|
21584
|
+
? { ...(contextHints ?? {}), semanticDecision: activeSemanticDecision }
|
|
21585
|
+
: contextHints,
|
|
21586
|
+
activeSemanticDecision,
|
|
21389
21587
|
}), turnRunId);
|
|
21390
21588
|
this.agenticAuthoringPrompt.set('');
|
|
21391
21589
|
}
|
|
@@ -21403,6 +21601,9 @@ class DynamicPageBuilderComponent {
|
|
|
21403
21601
|
}
|
|
21404
21602
|
}
|
|
21405
21603
|
}
|
|
21604
|
+
isGovernedReviewRepairQuickReply(contextHints) {
|
|
21605
|
+
return contextHints?.['kind'] === 'governed-review-repair';
|
|
21606
|
+
}
|
|
21406
21607
|
agenticQuickReplyVisiblePrompt(reply, contextHints) {
|
|
21407
21608
|
const prompt = (reply.prompt || '').trim();
|
|
21408
21609
|
if (this.isGovernedConfirmationQuickReply(reply, contextHints)) {
|
|
@@ -22573,6 +22774,8 @@ class DynamicPageBuilderComponent {
|
|
|
22573
22774
|
const flow = new PageBuilderAgenticAuthoringTurnFlow(this.agenticAuthoring, {
|
|
22574
22775
|
targetApp: 'praxis-ui-angular',
|
|
22575
22776
|
targetComponentId: 'praxis-dynamic-page-builder',
|
|
22777
|
+
currentRoute: () => this.pageIdentity?.routePath?.trim() || null,
|
|
22778
|
+
responseLocale: () => this.pageIdentity?.locale?.trim() || null,
|
|
22576
22779
|
currentPage: () => this.currentPage(),
|
|
22577
22780
|
selectedWidgetKey: () => this.resolveSelectedWidgetKey(),
|
|
22578
22781
|
provider: () => this.agenticAuthoringProvider,
|
|
@@ -22671,15 +22874,28 @@ class DynamicPageBuilderComponent {
|
|
|
22671
22874
|
};
|
|
22672
22875
|
}
|
|
22673
22876
|
async applyAgenticTurnState(state) {
|
|
22674
|
-
|
|
22877
|
+
// A terminal turn state is the canonical end of processing. Clear the local
|
|
22878
|
+
// interaction flag before projecting preview/review so the shell never
|
|
22879
|
+
// renders terminal actions alongside a stale loading indicator.
|
|
22880
|
+
if (this.isAgenticTurnTerminalState(state)) {
|
|
22881
|
+
this.agenticAuthoringBusy.set(false);
|
|
22882
|
+
this.agenticAuthoringTerminalState.set(state.state);
|
|
22883
|
+
}
|
|
22884
|
+
const receivedPreview = state.preview ?? null;
|
|
22885
|
+
const preview = receivedPreview?.valid ? receivedPreview : null;
|
|
22886
|
+
const invalidPreviewError = receivedPreview
|
|
22887
|
+
&& !receivedPreview.valid
|
|
22888
|
+
&& (state.state === 'error' || state.quickReplies.length === 0)
|
|
22889
|
+
? this.describeAgenticPreviewFailure(receivedPreview)
|
|
22890
|
+
: '';
|
|
22675
22891
|
const handoff = this.resolveAgenticSharedRuleHandoff(state);
|
|
22676
22892
|
const previousHandoff = this.agenticAuthoringSharedRuleHandoffState();
|
|
22677
22893
|
this.agenticAuthoringConversation.set(state.messages);
|
|
22678
22894
|
this.agenticAuthoringQuickReplies.set(state.quickReplies);
|
|
22679
|
-
this.agenticAuthoringStatus.set(handoff && !
|
|
22895
|
+
this.agenticAuthoringStatus.set(handoff && !receivedPreview?.valid
|
|
22680
22896
|
? this.tx('agentic.status.sharedRuleHandoff', 'Continue este pedido na revisão da regra.')
|
|
22681
22897
|
: state.statusText);
|
|
22682
|
-
this.agenticAuthoringError.set(state.errorText);
|
|
22898
|
+
this.agenticAuthoringError.set(state.errorText || invalidPreviewError);
|
|
22683
22899
|
this.agenticAuthoringPreviewResult.set(preview);
|
|
22684
22900
|
this.agenticAuthoringSemanticDecision.set(this.resolveAgenticSemanticDecision(state.diagnostics));
|
|
22685
22901
|
this.agenticAuthoringSemanticResourcePresentationLabel.set(this.resolveAgenticSemanticResourcePresentationLabel(state.diagnostics));
|
|
@@ -22891,7 +23107,11 @@ class DynamicPageBuilderComponent {
|
|
|
22891
23107
|
return Object.keys(merged).length ? merged : undefined;
|
|
22892
23108
|
}
|
|
22893
23109
|
consumeAgenticTurn(states$, turnRunId) {
|
|
22894
|
-
return firstValueFrom(states$.pipe(takeUntil(this.agenticTurnCancel$),
|
|
23110
|
+
return firstValueFrom(states$.pipe(takeUntil(this.agenticTurnCancel$), tap((state) => {
|
|
23111
|
+
if (this.isCurrentAgenticTurn(turnRunId) && this.isAgenticTurnTerminalState(state)) {
|
|
23112
|
+
this.agenticAuthoringBusy.set(false);
|
|
23113
|
+
}
|
|
23114
|
+
}), concatMap((state) => {
|
|
22895
23115
|
if (!this.isCurrentAgenticTurn(turnRunId)) {
|
|
22896
23116
|
return of(state);
|
|
22897
23117
|
}
|
|
@@ -23513,7 +23733,7 @@ class DynamicPageBuilderComponent {
|
|
|
23513
23733
|
/>
|
|
23514
23734
|
}
|
|
23515
23735
|
|
|
23516
|
-
@if (agenticAuthoringIncludeLlmDiagnostics &&
|
|
23736
|
+
@if (agenticAuthoringIncludeLlmDiagnostics && agenticAuthoringDiagnosticsAvailable()) {
|
|
23517
23737
|
<section
|
|
23518
23738
|
class="agentic-diagnostics-panel"
|
|
23519
23739
|
[class.agentic-diagnostics-panel--collapsed]="agenticAuthoringLlmDiagnosticsCollapsed()"
|
|
@@ -23545,7 +23765,61 @@ class DynamicPageBuilderComponent {
|
|
|
23545
23765
|
<p class="agentic-diagnostics-panel__description">
|
|
23546
23766
|
{{ tx('agentic.diagnostics.description', 'Informações usadas para explicar como o assistente chegou à resposta deste pedido.') }}
|
|
23547
23767
|
</p>
|
|
23548
|
-
|
|
23768
|
+
@if (agenticTurnHealth().started) {
|
|
23769
|
+
<section class="agentic-diagnostics-panel__health" data-testid="page-builder-agentic-turn-health">
|
|
23770
|
+
<h3>{{ tx('agentic.diagnostics.health.title', 'Assistant health') }}</h3>
|
|
23771
|
+
<p>{{ tx('agentic.diagnostics.health.description', 'Recent authoring turn reliability and response time.') }}</p>
|
|
23772
|
+
<dl class="agentic-diagnostics-panel__metrics">
|
|
23773
|
+
<div>
|
|
23774
|
+
<dt>{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</dt>
|
|
23775
|
+
<dd data-testid="page-builder-agentic-health-success">{{ formatAgenticMetricPercent(agenticTurnHealth().successRate) }}</dd>
|
|
23776
|
+
</div>
|
|
23777
|
+
<div>
|
|
23778
|
+
<dt>{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</dt>
|
|
23779
|
+
<dd data-testid="page-builder-agentic-health-timeout">{{ formatAgenticMetricPercent(agenticTurnHealth().timeoutRate) }}</dd>
|
|
23780
|
+
</div>
|
|
23781
|
+
<div>
|
|
23782
|
+
<dt>{{ tx('agentic.diagnostics.health.p50', 'Typical (P50)') }}</dt>
|
|
23783
|
+
<dd data-testid="page-builder-agentic-health-p50">{{ formatAgenticDuration(agenticTurnHealth().p50DurationMs) }}</dd>
|
|
23784
|
+
</div>
|
|
23785
|
+
<div>
|
|
23786
|
+
<dt>{{ tx('agentic.diagnostics.health.p95', 'Slow edge (P95)') }}</dt>
|
|
23787
|
+
<dd data-testid="page-builder-agentic-health-p95">{{ formatAgenticDuration(agenticTurnHealth().p95DurationMs) }}</dd>
|
|
23788
|
+
</div>
|
|
23789
|
+
</dl>
|
|
23790
|
+
@if (agenticTurnHealthBuckets().length) {
|
|
23791
|
+
<table class="agentic-diagnostics-panel__health-table" data-testid="page-builder-agentic-health-breakdown">
|
|
23792
|
+
<caption>{{ tx('agentic.diagnostics.health.breakdown', 'Provider and model breakdown') }}</caption>
|
|
23793
|
+
<thead>
|
|
23794
|
+
<tr>
|
|
23795
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.dimension', 'Dimension') }}</th>
|
|
23796
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.name', 'Name') }}</th>
|
|
23797
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</th>
|
|
23798
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</th>
|
|
23799
|
+
<th scope="col">P95</th>
|
|
23800
|
+
</tr>
|
|
23801
|
+
</thead>
|
|
23802
|
+
<tbody>
|
|
23803
|
+
@for (entry of agenticTurnHealthBuckets(); track entry.dimension + ':' + entry.bucket.key) {
|
|
23804
|
+
<tr>
|
|
23805
|
+
<td>{{ entry.dimension === 'provider' ? tx('agentic.diagnostics.health.provider', 'Provider') : tx('agentic.diagnostics.health.model', 'Model') }}</td>
|
|
23806
|
+
<th scope="row">{{ entry.bucket.key }}</th>
|
|
23807
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.successRate) }}</td>
|
|
23808
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.timeoutRate) }}</td>
|
|
23809
|
+
<td>{{ formatAgenticDuration(entry.bucket.p95DurationMs) }}</td>
|
|
23810
|
+
</tr>
|
|
23811
|
+
}
|
|
23812
|
+
</tbody>
|
|
23813
|
+
</table>
|
|
23814
|
+
}
|
|
23815
|
+
</section>
|
|
23816
|
+
}
|
|
23817
|
+
@if (agenticAuthoringLlmDiagnosticsText()) {
|
|
23818
|
+
<details class="agentic-diagnostics-panel__raw">
|
|
23819
|
+
<summary>{{ tx('agentic.diagnostics.raw', 'Turn details') }}</summary>
|
|
23820
|
+
<pre>{{ agenticAuthoringLlmDiagnosticsText() }}</pre>
|
|
23821
|
+
</details>
|
|
23822
|
+
}
|
|
23549
23823
|
}
|
|
23550
23824
|
</section>
|
|
23551
23825
|
}
|
|
@@ -23882,7 +24156,7 @@ class DynamicPageBuilderComponent {
|
|
|
23882
24156
|
}
|
|
23883
24157
|
</praxis-floating-toolbar>
|
|
23884
24158
|
</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"] }] });
|
|
24159
|
+
`, 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
24160
|
}
|
|
23887
24161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DynamicPageBuilderComponent, decorators: [{
|
|
23888
24162
|
type: Component,
|
|
@@ -24013,7 +24287,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
24013
24287
|
/>
|
|
24014
24288
|
}
|
|
24015
24289
|
|
|
24016
|
-
@if (agenticAuthoringIncludeLlmDiagnostics &&
|
|
24290
|
+
@if (agenticAuthoringIncludeLlmDiagnostics && agenticAuthoringDiagnosticsAvailable()) {
|
|
24017
24291
|
<section
|
|
24018
24292
|
class="agentic-diagnostics-panel"
|
|
24019
24293
|
[class.agentic-diagnostics-panel--collapsed]="agenticAuthoringLlmDiagnosticsCollapsed()"
|
|
@@ -24045,7 +24319,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
24045
24319
|
<p class="agentic-diagnostics-panel__description">
|
|
24046
24320
|
{{ tx('agentic.diagnostics.description', 'Informações usadas para explicar como o assistente chegou à resposta deste pedido.') }}
|
|
24047
24321
|
</p>
|
|
24048
|
-
|
|
24322
|
+
@if (agenticTurnHealth().started) {
|
|
24323
|
+
<section class="agentic-diagnostics-panel__health" data-testid="page-builder-agentic-turn-health">
|
|
24324
|
+
<h3>{{ tx('agentic.diagnostics.health.title', 'Assistant health') }}</h3>
|
|
24325
|
+
<p>{{ tx('agentic.diagnostics.health.description', 'Recent authoring turn reliability and response time.') }}</p>
|
|
24326
|
+
<dl class="agentic-diagnostics-panel__metrics">
|
|
24327
|
+
<div>
|
|
24328
|
+
<dt>{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</dt>
|
|
24329
|
+
<dd data-testid="page-builder-agentic-health-success">{{ formatAgenticMetricPercent(agenticTurnHealth().successRate) }}</dd>
|
|
24330
|
+
</div>
|
|
24331
|
+
<div>
|
|
24332
|
+
<dt>{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</dt>
|
|
24333
|
+
<dd data-testid="page-builder-agentic-health-timeout">{{ formatAgenticMetricPercent(agenticTurnHealth().timeoutRate) }}</dd>
|
|
24334
|
+
</div>
|
|
24335
|
+
<div>
|
|
24336
|
+
<dt>{{ tx('agentic.diagnostics.health.p50', 'Typical (P50)') }}</dt>
|
|
24337
|
+
<dd data-testid="page-builder-agentic-health-p50">{{ formatAgenticDuration(agenticTurnHealth().p50DurationMs) }}</dd>
|
|
24338
|
+
</div>
|
|
24339
|
+
<div>
|
|
24340
|
+
<dt>{{ tx('agentic.diagnostics.health.p95', 'Slow edge (P95)') }}</dt>
|
|
24341
|
+
<dd data-testid="page-builder-agentic-health-p95">{{ formatAgenticDuration(agenticTurnHealth().p95DurationMs) }}</dd>
|
|
24342
|
+
</div>
|
|
24343
|
+
</dl>
|
|
24344
|
+
@if (agenticTurnHealthBuckets().length) {
|
|
24345
|
+
<table class="agentic-diagnostics-panel__health-table" data-testid="page-builder-agentic-health-breakdown">
|
|
24346
|
+
<caption>{{ tx('agentic.diagnostics.health.breakdown', 'Provider and model breakdown') }}</caption>
|
|
24347
|
+
<thead>
|
|
24348
|
+
<tr>
|
|
24349
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.dimension', 'Dimension') }}</th>
|
|
24350
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.name', 'Name') }}</th>
|
|
24351
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.successRate', 'Success') }}</th>
|
|
24352
|
+
<th scope="col">{{ tx('agentic.diagnostics.health.timeoutRate', 'Timeouts') }}</th>
|
|
24353
|
+
<th scope="col">P95</th>
|
|
24354
|
+
</tr>
|
|
24355
|
+
</thead>
|
|
24356
|
+
<tbody>
|
|
24357
|
+
@for (entry of agenticTurnHealthBuckets(); track entry.dimension + ':' + entry.bucket.key) {
|
|
24358
|
+
<tr>
|
|
24359
|
+
<td>{{ entry.dimension === 'provider' ? tx('agentic.diagnostics.health.provider', 'Provider') : tx('agentic.diagnostics.health.model', 'Model') }}</td>
|
|
24360
|
+
<th scope="row">{{ entry.bucket.key }}</th>
|
|
24361
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.successRate) }}</td>
|
|
24362
|
+
<td>{{ formatAgenticMetricPercent(entry.bucket.timeoutRate) }}</td>
|
|
24363
|
+
<td>{{ formatAgenticDuration(entry.bucket.p95DurationMs) }}</td>
|
|
24364
|
+
</tr>
|
|
24365
|
+
}
|
|
24366
|
+
</tbody>
|
|
24367
|
+
</table>
|
|
24368
|
+
}
|
|
24369
|
+
</section>
|
|
24370
|
+
}
|
|
24371
|
+
@if (agenticAuthoringLlmDiagnosticsText()) {
|
|
24372
|
+
<details class="agentic-diagnostics-panel__raw">
|
|
24373
|
+
<summary>{{ tx('agentic.diagnostics.raw', 'Turn details') }}</summary>
|
|
24374
|
+
<pre>{{ agenticAuthoringLlmDiagnosticsText() }}</pre>
|
|
24375
|
+
</details>
|
|
24376
|
+
}
|
|
24049
24377
|
}
|
|
24050
24378
|
</section>
|
|
24051
24379
|
}
|
|
@@ -24382,7 +24710,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
24382
24710
|
}
|
|
24383
24711
|
</praxis-floating-toolbar>
|
|
24384
24712
|
</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"] }]
|
|
24713
|
+
`, 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
24714
|
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: undefined, decorators: [{
|
|
24387
24715
|
type: Optional
|
|
24388
24716
|
}, {
|