@oneuptime/common 14.0.10 → 14.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/AIConversation.ts +127 -1
- package/Models/DatabaseModels/CephCluster.ts +12 -0
- package/Models/DatabaseModels/CloudResource.ts +12 -0
- package/Models/DatabaseModels/DatabaseServer.ts +12 -0
- package/Models/DatabaseModels/DockerHost.ts +12 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +12 -0
- package/Models/DatabaseModels/GlobalOidc.ts +0 -4
- package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
- package/Models/DatabaseModels/GlobalSso.ts +0 -4
- package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
- package/Models/DatabaseModels/Host.ts +12 -0
- package/Models/DatabaseModels/IncidentForm.ts +594 -0
- package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
- package/Models/DatabaseModels/Index.ts +14 -0
- package/Models/DatabaseModels/IoTFleet.ts +12 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
- package/Models/DatabaseModels/MessageQueue.ts +1102 -0
- package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
- package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
- package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
- package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
- package/Models/DatabaseModels/PodmanHost.ts +12 -0
- package/Models/DatabaseModels/Project.ts +59 -0
- package/Models/DatabaseModels/ProjectOidc.ts +0 -4
- package/Models/DatabaseModels/ProjectSso.ts +0 -4
- package/Models/DatabaseModels/ProxmoxCluster.ts +12 -0
- package/Models/DatabaseModels/RumApplication.ts +12 -0
- package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
- package/Models/DatabaseModels/Service.ts +12 -0
- package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
- package/Models/DatabaseModels/StatusPageSso.ts +0 -4
- package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
- package/Models/DatabaseModels/VMwareVCenter.ts +12 -0
- package/Server/API/AIChatAPI.ts +13 -114
- package/Server/API/AIInvestigationAPI.ts +3 -3
- package/Server/API/AIInvestigationConversationAPI.ts +266 -0
- package/Server/API/IncidentFormAPI.ts +376 -0
- package/Server/API/ProjectOIDC.ts +16 -25
- package/Server/API/ProjectSSO.ts +16 -24
- package/Server/API/StatusPageAPI.ts +42 -77
- package/Server/Enterprise/EnterpriseEdition.ts +93 -28
- package/Server/Enterprise/EnterpriseFeature.ts +25 -3
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
- package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
- package/Server/EnvironmentConfig.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
- package/Server/Middleware/UserAuthorization.ts +16 -38
- package/Server/Services/AIService.ts +10 -13
- package/Server/Services/IncidentCustomFieldService.ts +112 -2
- package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
- package/Server/Services/IncidentEpisodeService.ts +10 -1
- package/Server/Services/IncidentFormService.ts +1566 -0
- package/Server/Services/IncidentFormSubmissionService.ts +97 -0
- package/Server/Services/IncidentGroupingEngineService.ts +45 -8
- package/Server/Services/IncidentService.ts +123 -5
- package/Server/Services/IncidentTemplateService.ts +22 -0
- package/Server/Services/Index.ts +14 -0
- package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
- package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
- package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
- package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
- package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
- package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
- package/Server/Services/MessageQueueService.ts +1463 -0
- package/Server/Services/OpenTelemetryIngestService.ts +37 -4
- package/Server/Services/ProjectService.ts +0 -59
- package/Server/Services/StatusPagePrivateUserService.ts +1 -4
- package/Server/Services/StatusPageService.ts +1 -51
- package/Server/Services/TeamComplianceSettingService.ts +163 -42
- package/Server/Services/UserNotificationRuleService.ts +8 -1
- package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
- package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
- package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
- package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
- package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
- package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
- package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
- package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
- package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +7 -1
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +34 -14
- package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +69 -24
- package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +9 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +53 -10
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +27 -10
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +27 -10
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
- package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
- package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
- package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
- package/Server/Utils/EditionEnforcement.ts +19 -202
- package/Server/Utils/LLM/LLMService.ts +259 -63
- package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
- package/Server/Utils/SameOriginRequest.ts +203 -0
- package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
- package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
- package/Server/Utils/VendorAssets.ts +3 -3
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +3 -1
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +3 -1
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +10 -1
- package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
- package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
- package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
- package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
- package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
- package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
- package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
- package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
- package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
- package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
- package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +174 -12
- package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
- package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
- package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
- package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +5 -0
- package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
- package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
- package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
- package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
- package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
- package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
- package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
- package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
- package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
- package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
- package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
- package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
- package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
- package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
- package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
- package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
- package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
- package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
- package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
- package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
- package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
- package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
- package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
- package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
- package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
- package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
- package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
- package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
- package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
- package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
- package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
- package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
- package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
- package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
- package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
- package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
- package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
- package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
- package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
- package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
- package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
- package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
- package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
- package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
- package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
- package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
- package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
- package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
- package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
- package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
- package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
- package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
- package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
- package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
- package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
- package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
- package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
- package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
- package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
- package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
- package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
- package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +298 -9
- package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +453 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
- package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
- package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
- package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
- package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
- package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
- package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
- package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
- package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
- package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
- package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
- package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
- package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
- package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
- package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
- package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
- package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
- package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
- package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +28 -9
- package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
- package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
- package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
- package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
- package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
- package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
- package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
- package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
- package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
- package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
- package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
- package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
- package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
- package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
- package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
- package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
- package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
- package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
- package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
- package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
- package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
- package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
- package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
- package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
- package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
- package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
- package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
- package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
- package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
- package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
- package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
- package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
- package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
- package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
- package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
- package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
- package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
- package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
- package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
- package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
- package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
- package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
- package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
- package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
- package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
- package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
- package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +266 -25
- package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
- package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
- package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
- package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
- package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +2 -0
- package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +297 -15
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +10 -6
- package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
- package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
- package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
- package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
- package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
- package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
- package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
- package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
- package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
- package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
- package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
- package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
- package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
- package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
- package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
- package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
- package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
- package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
- package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
- package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
- package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
- package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
- package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
- package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
- package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
- package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
- package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
- package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
- package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +5 -3
- package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
- package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
- package/Tests/Types/XML.test.ts +51 -0
- package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
- package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
- package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
- package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
- package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
- package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
- package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
- package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
- package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
- package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
- package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
- package/Tests/UI/Components/Icon.test.tsx +32 -0
- package/Tests/UI/Components/Input.test.tsx +31 -0
- package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
- package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
- package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
- package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
- package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
- package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
- package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
- package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
- package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
- package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
- package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
- package/Tests/UI/Components/TextArea.test.tsx +19 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
- package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
- package/Tests/UI/EsbuildConfig.test.ts +115 -39
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
- package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
- package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
- package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
- package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
- package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
- package/Types/AI/AIAgentRunLimits.ts +146 -0
- package/Types/Code/CodeType.ts +2 -0
- package/Types/Code/JsonSyntax.ts +923 -0
- package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
- package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
- package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
- package/Types/Icon/IconProp.ts +2 -0
- package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
- package/Types/Incident/IncidentFormPublic.ts +1145 -0
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
- package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
- package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
- package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
- package/Types/MessageQueue/MessagingSystem.ts +518 -0
- package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
- package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
- package/Types/Permission.ts +310 -0
- package/Types/ResourceAiAgent/ResourceAiAccess.ts +10 -4
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
- package/Types/Rules/RuleRun.ts +4 -0
- package/Types/Team/ComplianceNotificationChannel.ts +4 -3
- package/Types/Team/ComplianceRule.ts +71 -18
- package/Types/Team/ComplianceRuleType.ts +2 -2
- package/Types/Team/TeamComplianceStatus.ts +6 -2
- package/Types/Telemetry/EntityType.ts +16 -0
- package/Types/Telemetry/LockedFilterDetail.ts +22 -0
- package/Types/XML.ts +26 -0
- package/UI/Components/CodeEditor/CodeEditor.css +379 -0
- package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
- package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
- package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
- package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
- package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
- package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
- package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
- package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
- package/UI/Components/Forms/Fields/FormField.tsx +8 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/Icon/Icon.tsx +18 -0
- package/UI/Components/Input/Input.tsx +11 -4
- package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
- package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
- package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
- package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
- package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
- package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
- package/UI/Components/Table/EmptyTableMessage.ts +81 -0
- package/UI/Components/Table/Table.tsx +50 -21
- package/UI/Components/Table/TableRow.tsx +9 -1
- package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
- package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
- package/UI/Components/TextArea/TextArea.tsx +9 -2
- package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
- package/UI/Styles/Theme.css +8 -0
- package/UI/esbuild-config.js +2 -32
- package/Utils/LabelRuleImportExport.ts +2 -0
- package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
- package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
- package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
- package/Utils/Telemetry/EntityKey.ts +48 -0
- package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
- package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseServer.js +12 -0
- package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +12 -0
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Host.js +12 -0
- package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
- package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
- package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +14 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
- package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
- package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
- package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js +12 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +61 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
- package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
- package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
- package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Service.js +12 -0
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
- package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +12 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +9 -103
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
- package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
- package/build/dist/Server/API/IncidentFormAPI.js +245 -0
- package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
- package/build/dist/Server/API/ProjectOIDC.js +16 -24
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +16 -24
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +42 -75
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
- package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +10 -13
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFormService.js +1202 -0
- package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
- package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
- package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +106 -4
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +14 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
- package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
- package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
- package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
- package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueService.js +1140 -0
- package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +0 -54
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +0 -46
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
- package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
- package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
- package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
- package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
- package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +7 -2
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +29 -14
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +38 -14
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +2 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +40 -10
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +19 -7
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +19 -7
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
- package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
- package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
- package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
- package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
- package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
- package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +3 -3
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +3 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +3 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +10 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
- package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
- package/build/dist/Types/Code/CodeType.js +2 -0
- package/build/dist/Types/Code/CodeType.js.map +1 -1
- package/build/dist/Types/Code/JsonSyntax.js +604 -0
- package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
- package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
- package/build/dist/Types/Icon/IconProp.js +2 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
- package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
- package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
- package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
- package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
- package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
- package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
- package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
- package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
- package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
- package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
- package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
- package/build/dist/Types/Permission.js +274 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +10 -4
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rules/RuleRun.js +4 -0
- package/build/dist/Types/Rules/RuleRun.js.map +1 -1
- package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
- package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
- package/build/dist/Types/Team/ComplianceRule.js +48 -14
- package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
- package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
- package/build/dist/Types/Telemetry/EntityType.js +16 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/XML.js +23 -0
- package/build/dist/Types/XML.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +8 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +11 -3
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
- package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
- package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +30 -11
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +9 -2
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
- package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
- package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
- package/build/dist/Utils/LabelRuleImportExport.js +2 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
- package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
- package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
- package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
- package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/package.json +1 -3
- package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
- package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
- package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
- package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
- package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
- package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
- package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
- package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
- package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
- package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
- package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
|
@@ -264,7 +264,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
264
264
|
await waitFor(() => {
|
|
265
265
|
expect(onStatusChange).toHaveBeenLastCalledWith(AIRunStatus.Completed);
|
|
266
266
|
});
|
|
267
|
-
expect(screen.getByText("
|
|
267
|
+
expect(screen.getByText("Completed")).toBeInTheDocument();
|
|
268
268
|
expect(jest.getTimerCount()).toBe(0);
|
|
269
269
|
|
|
270
270
|
advance();
|
|
@@ -339,9 +339,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
339
339
|
onStatusChange={onStatusChange}
|
|
340
340
|
/>,
|
|
341
341
|
);
|
|
342
|
-
expect(
|
|
343
|
-
await screen.findByText("Preparing investigation report…"),
|
|
344
|
-
).toBeInTheDocument();
|
|
342
|
+
expect(await screen.findByText("Preparing report…")).toBeInTheDocument();
|
|
345
343
|
expect(onStatusChange).toHaveBeenLastCalledWith(AIRunStatus.Completed);
|
|
346
344
|
|
|
347
345
|
const toggle: HTMLElement = screen.getByRole("button", {
|
|
@@ -356,9 +354,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
356
354
|
expect(jest.getTimerCount()).toBe(1);
|
|
357
355
|
|
|
358
356
|
advance();
|
|
359
|
-
expect(
|
|
360
|
-
await screen.findByText("Investigation complete"),
|
|
361
|
-
).toBeInTheDocument();
|
|
357
|
+
expect(await screen.findByText("Completed")).toBeInTheDocument();
|
|
362
358
|
expect(postMock).toHaveBeenCalledTimes(2);
|
|
363
359
|
|
|
364
360
|
// Same button, still open, renamed for what it now holds.
|
|
@@ -392,9 +388,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
392
388
|
render(
|
|
393
389
|
<InvestigationPanel subjectType="incident" subjectId={SUBJECT_ID} />,
|
|
394
390
|
);
|
|
395
|
-
expect(
|
|
396
|
-
await screen.findByText("Investigation complete"),
|
|
397
|
-
).toBeInTheDocument();
|
|
391
|
+
expect(await screen.findByText("Completed")).toBeInTheDocument();
|
|
398
392
|
expect(jest.getTimerCount()).toBe(0);
|
|
399
393
|
advance();
|
|
400
394
|
expect(postMock).toHaveBeenCalledTimes(1);
|
|
@@ -422,9 +416,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
422
416
|
expect(await screen.findByText("Investigating…")).toBeInTheDocument();
|
|
423
417
|
|
|
424
418
|
advance();
|
|
425
|
-
expect(
|
|
426
|
-
await screen.findByText("Investigation complete"),
|
|
427
|
-
).toBeInTheDocument();
|
|
419
|
+
expect(await screen.findByText("Completed")).toBeInTheDocument();
|
|
428
420
|
|
|
429
421
|
expect(onReportSummaryChange).toHaveBeenCalled();
|
|
430
422
|
for (const call of onReportSummaryChange.mock.calls) {
|
|
@@ -516,9 +508,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
516
508
|
onStatusChange={onStatusChange}
|
|
517
509
|
/>,
|
|
518
510
|
);
|
|
519
|
-
expect(
|
|
520
|
-
await screen.findByText("Investigation complete"),
|
|
521
|
-
).toBeInTheDocument();
|
|
511
|
+
expect(await screen.findByText("Completed")).toBeInTheDocument();
|
|
522
512
|
|
|
523
513
|
rerender(
|
|
524
514
|
<InvestigationPanel
|
|
@@ -602,9 +592,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
602
592
|
onStatusChange={onStatusChange}
|
|
603
593
|
/>,
|
|
604
594
|
);
|
|
605
|
-
expect(
|
|
606
|
-
await screen.findByText("Investigation complete"),
|
|
607
|
-
).toBeInTheDocument();
|
|
595
|
+
expect(await screen.findByText("Completed")).toBeInTheDocument();
|
|
608
596
|
await waitFor(() => {
|
|
609
597
|
expect(onStatusChange).toHaveBeenLastCalledWith(AIRunStatus.Completed);
|
|
610
598
|
});
|
|
@@ -613,7 +601,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
613
601
|
await Promise.resolve();
|
|
614
602
|
await Promise.resolve();
|
|
615
603
|
|
|
616
|
-
expect(screen.getByText("
|
|
604
|
+
expect(screen.getByText("Completed")).toBeInTheDocument();
|
|
617
605
|
expect(screen.queryByText("Investigating…")).not.toBeInTheDocument();
|
|
618
606
|
expect(onStatusChange).not.toHaveBeenCalledWith(AIRunStatus.Running);
|
|
619
607
|
expect(onStatusChange).toHaveBeenLastCalledWith(AIRunStatus.Completed);
|
|
@@ -659,7 +647,7 @@ describe("InvestigationPanel status reporting", () => {
|
|
|
659
647
|
expect(onStatusChange).toHaveBeenLastCalledWith(AIRunStatus.Completed);
|
|
660
648
|
});
|
|
661
649
|
|
|
662
|
-
expect(screen.getByText("
|
|
650
|
+
expect(screen.getByText("Completed")).toBeInTheDocument();
|
|
663
651
|
expect(jest.getTimerCount()).toBe(0);
|
|
664
652
|
});
|
|
665
653
|
});
|
|
@@ -11,8 +11,9 @@ import * as React from "react";
|
|
|
11
11
|
import getJestMockFunction, { MockFunction } from "../../MockType";
|
|
12
12
|
|
|
13
13
|
/*
|
|
14
|
-
* The completed investigation, laid out for a responder
|
|
15
|
-
* and the report split into its own sections
|
|
14
|
+
* The completed investigation, laid out for a responder as one plain
|
|
15
|
+
* document: a Summary section and the report split into its own sections,
|
|
16
|
+
* every one under the same kind of heading and none of them in a box. The queries behind the report
|
|
16
17
|
* ("Evidence checked") are the host's to show (InvestigationRunDetails), so a
|
|
17
18
|
* citation chip here only hands its id to the host through
|
|
18
19
|
* onCitationActivate. The report is untrusted model output, so beyond layout
|
|
@@ -91,6 +92,9 @@ jest.mock("../../../UI/Components/Markdown.tsx/LazyMarkdownViewer", () => {
|
|
|
91
92
|
|
|
92
93
|
import InvestigationReportView, {
|
|
93
94
|
ComponentProps as ReportViewProps,
|
|
95
|
+
REPORT_CAVEAT_TEXT,
|
|
96
|
+
REPORT_SECTION_BODY_CLASS_NAME,
|
|
97
|
+
REPORT_SECTION_HEADING_CLASS_NAME,
|
|
94
98
|
} from "../../../../App/FeatureSet/Dashboard/src/Components/AI/InvestigationReport/InvestigationReportView";
|
|
95
99
|
import {
|
|
96
100
|
MAX_EVIDENCE_ITEMS,
|
|
@@ -232,7 +236,7 @@ function lastRenderers(): MarkdownInlineReferenceRenderers {
|
|
|
232
236
|
function reportSectionHeadings(): Array<string> {
|
|
233
237
|
const report: HTMLElement = screen.getByLabelText("Investigation report");
|
|
234
238
|
return within(report)
|
|
235
|
-
.queryAllByRole("heading", { level:
|
|
239
|
+
.queryAllByRole("heading", { level: 3 })
|
|
236
240
|
.map((heading: HTMLElement): string => {
|
|
237
241
|
return heading.textContent || "";
|
|
238
242
|
});
|
|
@@ -269,9 +273,13 @@ describe("InvestigationReportView summary section", () => {
|
|
|
269
273
|
name: "Investigation summary",
|
|
270
274
|
});
|
|
271
275
|
expect(
|
|
272
|
-
within(summary).getByRole("heading", { name: "Summary" }),
|
|
276
|
+
within(summary).getByRole("heading", { level: 3, name: "Summary" }),
|
|
273
277
|
).toBeInTheDocument();
|
|
274
|
-
|
|
278
|
+
/*
|
|
279
|
+
* The TL;DR is the section's lead line, set larger than the prose under
|
|
280
|
+
* it. It used to wear a "TL;DR" chip inside a tinted box.
|
|
281
|
+
*/
|
|
282
|
+
expect(summary).not.toHaveTextContent("TL;DR");
|
|
275
283
|
|
|
276
284
|
const tldr: HTMLElement = within(summary).getByText(TLDR);
|
|
277
285
|
expect(tldr.tagName).toBe("P");
|
|
@@ -399,7 +407,7 @@ describe("InvestigationReportView report section", () => {
|
|
|
399
407
|
const headingId: string = subSection.getAttribute("aria-labelledby")!;
|
|
400
408
|
const heading: HTMLElement | null = document.getElementById(headingId);
|
|
401
409
|
expect(heading).not.toBeNull();
|
|
402
|
-
expect(heading!.tagName).toBe("
|
|
410
|
+
expect(heading!.tagName).toBe("H3");
|
|
403
411
|
expect(subSection).toContainElement(heading);
|
|
404
412
|
}
|
|
405
413
|
|
|
@@ -408,27 +416,43 @@ describe("InvestigationReportView report section", () => {
|
|
|
408
416
|
).toHaveTextContent("Roll back the deploy");
|
|
409
417
|
});
|
|
410
418
|
|
|
411
|
-
|
|
419
|
+
/*
|
|
420
|
+
* The root cause used to be an amber callout box with an uppercase amber
|
|
421
|
+
* title, inside the report's own box. It is now found by its title, like
|
|
422
|
+
* every other section: same heading, same body, no frame, no colour.
|
|
423
|
+
*/
|
|
424
|
+
test("gives the most likely root cause the same plain section as the rest", () => {
|
|
412
425
|
renderView();
|
|
413
426
|
|
|
414
427
|
const rootCause: HTMLElement = screen.getByRole("region", {
|
|
415
428
|
name: "Most likely root cause",
|
|
416
429
|
});
|
|
417
|
-
expect(rootCause).
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
).toHaveClass("uppercase", "text-amber-700");
|
|
430
|
+
expect(rootCause).toHaveAttribute(
|
|
431
|
+
"data-section-kind",
|
|
432
|
+
InvestigationReportSectionKind.RootCause,
|
|
433
|
+
);
|
|
434
|
+
expect(rootCause.getAttribute("class") || "").toBe("");
|
|
423
435
|
expect(rootCause).toHaveTextContent("the deploy halved the pool size");
|
|
436
|
+
|
|
437
|
+
const rootCauseHeading: HTMLElement = within(rootCause).getByRole(
|
|
438
|
+
"heading",
|
|
439
|
+
{ level: 3, name: "Most likely root cause" },
|
|
440
|
+
);
|
|
441
|
+
const nextStepsHeading: HTMLElement = within(
|
|
442
|
+
screen.getByRole("region", { name: "Suggested next steps" }),
|
|
443
|
+
).getByRole("heading", { level: 3, name: "Suggested next steps" });
|
|
444
|
+
expect(rootCauseHeading.className).toBe(REPORT_SECTION_HEADING_CLASS_NAME);
|
|
445
|
+
expect(nextStepsHeading.className).toBe(rootCauseHeading.className);
|
|
446
|
+
expect(rootCauseHeading).not.toHaveClass("uppercase");
|
|
447
|
+
expect(rootCauseHeading.className).not.toMatch(/amber/);
|
|
424
448
|
});
|
|
425
449
|
|
|
426
450
|
/*
|
|
427
451
|
* Models often open the root cause with its own sub-heading. That heading
|
|
428
|
-
* belongs to the root cause, so the
|
|
452
|
+
* belongs to the root cause, so the section (and its title) must survive
|
|
429
453
|
* rather than the body turning into an unrelated section.
|
|
430
454
|
*/
|
|
431
|
-
test("keeps a root cause that opens with a sub-heading inside its
|
|
455
|
+
test("keeps a root cause that opens with a sub-heading inside its section", () => {
|
|
432
456
|
const markdown: string = [
|
|
433
457
|
"## Summary",
|
|
434
458
|
"Pool exhausted.",
|
|
@@ -449,17 +473,16 @@ describe("InvestigationReportView report section", () => {
|
|
|
449
473
|
"data-section-kind",
|
|
450
474
|
InvestigationReportSectionKind.RootCause,
|
|
451
475
|
);
|
|
452
|
-
expect(rootCause).toHaveClass("border-amber-200", "bg-amber-50/60");
|
|
453
476
|
expect(rootCause).toHaveTextContent("Connection pool exhaustion");
|
|
454
477
|
expect(rootCause).toHaveTextContent("The pool hit 100% after the deploy");
|
|
455
|
-
// Its citation still becomes a chip inside the
|
|
478
|
+
// Its citation still becomes a chip inside the section.
|
|
456
479
|
expect(
|
|
457
480
|
within(rootCause).getByRole("button", {
|
|
458
481
|
name: "Citation C1: Active incidents (7 total)",
|
|
459
482
|
}),
|
|
460
483
|
).toBeInTheDocument();
|
|
461
484
|
|
|
462
|
-
// The sub-heading is part of the
|
|
485
|
+
// The sub-heading is part of the root cause, not a section of its own.
|
|
463
486
|
expect(reportSectionHeadings()).toEqual([
|
|
464
487
|
"Most likely root cause",
|
|
465
488
|
"Evidence",
|
|
@@ -476,7 +499,7 @@ describe("InvestigationReportView report section", () => {
|
|
|
476
499
|
).toBeNull();
|
|
477
500
|
});
|
|
478
501
|
|
|
479
|
-
test("keeps a root cause that is only a sub-heading inside its
|
|
502
|
+
test("keeps a root cause that is only a sub-heading inside its section", () => {
|
|
480
503
|
const markdown: string = [
|
|
481
504
|
"## Summary",
|
|
482
505
|
"Pool exhausted.",
|
|
@@ -492,7 +515,10 @@ describe("InvestigationReportView report section", () => {
|
|
|
492
515
|
const rootCause: HTMLElement = screen.getByRole("region", {
|
|
493
516
|
name: "Most likely root cause",
|
|
494
517
|
});
|
|
495
|
-
expect(rootCause).
|
|
518
|
+
expect(rootCause).toHaveAttribute(
|
|
519
|
+
"data-section-kind",
|
|
520
|
+
InvestigationReportSectionKind.RootCause,
|
|
521
|
+
);
|
|
496
522
|
expect(rootCause).toHaveTextContent("Inconclusive");
|
|
497
523
|
expect(reportSectionHeadings()).toEqual([
|
|
498
524
|
"Most likely root cause",
|
|
@@ -618,40 +644,100 @@ describe("InvestigationReportView report section", () => {
|
|
|
618
644
|
expect(viewerTexts()).toEqual(["Nothing conclusive was found."]);
|
|
619
645
|
});
|
|
620
646
|
|
|
621
|
-
|
|
647
|
+
/*
|
|
648
|
+
* The report used to be its own box, which drew empty here and needed a
|
|
649
|
+
* sentence to explain the gap. Without a box there is no gap: the summary
|
|
650
|
+
* is followed directly by the report's closing line.
|
|
651
|
+
*/
|
|
652
|
+
test("adds no filler when a structured report has nothing beyond its summary", () => {
|
|
622
653
|
renderView({ analysisMarkdown: "**Summary** — Pool exhausted." });
|
|
623
654
|
|
|
655
|
+
const report: HTMLElement = screen.getByLabelText("Investigation report");
|
|
656
|
+
expect(report).not.toHaveTextContent("summary above");
|
|
657
|
+
expect(report).not.toHaveTextContent("no further details");
|
|
658
|
+
expect(Array.from(report.children)).toEqual([
|
|
659
|
+
screen.getByTestId("investigation-report-footer"),
|
|
660
|
+
]);
|
|
661
|
+
expect(screen.getByLabelText("Investigation summary")).toHaveTextContent(
|
|
662
|
+
"Pool exhausted.",
|
|
663
|
+
);
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
test("says so when a report is nothing but its chrome", () => {
|
|
667
|
+
renderView({
|
|
668
|
+
analysisMarkdown: [
|
|
669
|
+
"## \u{1F9E0} AI — Automated Root Cause Analysis",
|
|
670
|
+
"",
|
|
671
|
+
"---",
|
|
672
|
+
"*Investigated automatically by OneUptime AI — read-only, 0 queries run across your own telemetry.*",
|
|
673
|
+
].join("\n"),
|
|
674
|
+
evidence: [],
|
|
675
|
+
});
|
|
676
|
+
|
|
677
|
+
expect(
|
|
678
|
+
screen.queryByRole("region", { name: "Investigation summary" }),
|
|
679
|
+
).toBeNull();
|
|
624
680
|
expect(screen.getByLabelText("Investigation report")).toHaveTextContent(
|
|
625
|
-
"The report
|
|
681
|
+
"The report has no further details.",
|
|
682
|
+
);
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
test("a report with only a TL;DR adds no filler under it", () => {
|
|
686
|
+
renderView({
|
|
687
|
+
analysisMarkdown: [
|
|
688
|
+
"## \u{1F9E0} AI — Automated Root Cause Analysis",
|
|
689
|
+
"",
|
|
690
|
+
"---",
|
|
691
|
+
"*Investigated automatically by OneUptime AI — read-only, 0 queries run across your own telemetry.*",
|
|
692
|
+
].join("\n"),
|
|
693
|
+
analysisTldr: TLDR,
|
|
694
|
+
evidence: [],
|
|
695
|
+
});
|
|
696
|
+
|
|
697
|
+
expect(screen.getByLabelText("Investigation summary")).toHaveTextContent(
|
|
698
|
+
TLDR,
|
|
699
|
+
);
|
|
700
|
+
expect(screen.getByLabelText("Investigation report")).not.toHaveTextContent(
|
|
701
|
+
"no further details",
|
|
626
702
|
);
|
|
627
703
|
});
|
|
628
704
|
|
|
629
705
|
/*
|
|
630
|
-
* The
|
|
631
|
-
*
|
|
632
|
-
*
|
|
633
|
-
*
|
|
706
|
+
* The caveat a responder needs before acting on model output closes the
|
|
707
|
+
* report it qualifies, with Copy report beside it. The report used to
|
|
708
|
+
* carry its own header bar (an icon, an "Investigation report" title, the
|
|
709
|
+
* caveat and the button) as a box inside the card. Copy report still
|
|
710
|
+
* copies the report as published, not the sections rendered above it.
|
|
634
711
|
*/
|
|
635
|
-
test("
|
|
712
|
+
test("closes the report with the verify-first caveat and Copy report, which copies the original markdown", async () => {
|
|
636
713
|
renderView();
|
|
637
714
|
|
|
638
715
|
const report: HTMLElement = screen.getByRole("region", {
|
|
639
716
|
name: "Investigation report",
|
|
640
717
|
});
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
718
|
+
// No second title: the card's own title already names the report.
|
|
719
|
+
expect(
|
|
720
|
+
within(report).queryByRole("heading", { name: "Investigation report" }),
|
|
721
|
+
).toBeNull();
|
|
722
|
+
|
|
723
|
+
const footer: HTMLElement = within(report).getByTestId(
|
|
724
|
+
"investigation-report-footer",
|
|
725
|
+
);
|
|
726
|
+
expect(report.lastElementChild).toBe(footer);
|
|
727
|
+
const caveat: HTMLElement = within(footer).getByText(REPORT_CAVEAT_TEXT);
|
|
728
|
+
expect(REPORT_CAVEAT_TEXT).toBe(
|
|
645
729
|
"AI-generated first pass — verify before acting.",
|
|
646
730
|
);
|
|
647
|
-
expect(heading.parentElement).toContainElement(caveat);
|
|
648
|
-
expect(
|
|
649
|
-
heading.compareDocumentPosition(caveat) &
|
|
650
|
-
Node.DOCUMENT_POSITION_FOLLOWING,
|
|
651
|
-
).toBeTruthy();
|
|
652
731
|
expect(report).not.toHaveTextContent("AI generated");
|
|
732
|
+
// Every section comes before the caveat that qualifies it.
|
|
733
|
+
for (const heading of within(report).getAllByRole("heading")) {
|
|
734
|
+
expect(
|
|
735
|
+
heading.compareDocumentPosition(caveat) &
|
|
736
|
+
Node.DOCUMENT_POSITION_FOLLOWING,
|
|
737
|
+
).toBeTruthy();
|
|
738
|
+
}
|
|
653
739
|
|
|
654
|
-
const copyButton: HTMLElement = within(
|
|
740
|
+
const copyButton: HTMLElement = within(footer).getByRole("button", {
|
|
655
741
|
name: "Copy report",
|
|
656
742
|
});
|
|
657
743
|
expect(copyButton).toHaveAttribute("type", "button");
|
|
@@ -666,6 +752,157 @@ describe("InvestigationReportView report section", () => {
|
|
|
666
752
|
});
|
|
667
753
|
});
|
|
668
754
|
|
|
755
|
+
/*
|
|
756
|
+
* The card used to nest a tinted summary box, a report box with its own
|
|
757
|
+
* header bar and an amber root-cause callout inside it. These pin the flat
|
|
758
|
+
* layout that replaced it: one heading style, one body style, no frame.
|
|
759
|
+
*/
|
|
760
|
+
describe("InvestigationReportView layout", () => {
|
|
761
|
+
/*
|
|
762
|
+
* Classes that give an element a frame or a tint of its own. Controls
|
|
763
|
+
* (Copy report, citation chips, reference links) and the markdown the
|
|
764
|
+
* viewer draws are not layout, so they are left out.
|
|
765
|
+
*/
|
|
766
|
+
const FRAME_CLASS: RegExp =
|
|
767
|
+
/^(border|border-[a-z]+-\d+|ring-\d|ring-[a-z]+-\d+|shadow(-[a-z]+)?|rounded(-[a-z0-9]+)?|bg-(?!transparent)[a-z0-9/-]+)$/;
|
|
768
|
+
|
|
769
|
+
function framedElements(root: HTMLElement): Array<Element> {
|
|
770
|
+
return Array.from(root.querySelectorAll("*")).filter(
|
|
771
|
+
(element: Element): boolean => {
|
|
772
|
+
if (
|
|
773
|
+
element.closest("[data-testid='report-markdown']") ||
|
|
774
|
+
element.closest("button") ||
|
|
775
|
+
element.closest("a")
|
|
776
|
+
) {
|
|
777
|
+
return false;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
return (element.getAttribute("class") || "")
|
|
781
|
+
.split(/\s+/)
|
|
782
|
+
.some((className: string): boolean => {
|
|
783
|
+
return FRAME_CLASS.test(className);
|
|
784
|
+
});
|
|
785
|
+
},
|
|
786
|
+
);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
test("gives every section, the summary included, one heading style and one body style", () => {
|
|
790
|
+
renderView({ analysisTldr: TLDR });
|
|
791
|
+
|
|
792
|
+
const headings: Array<HTMLElement> = screen.getAllByRole("heading");
|
|
793
|
+
expect(
|
|
794
|
+
headings.map((heading: HTMLElement): string => {
|
|
795
|
+
return heading.textContent || "";
|
|
796
|
+
}),
|
|
797
|
+
).toEqual([
|
|
798
|
+
"Summary",
|
|
799
|
+
"Most likely root cause",
|
|
800
|
+
"Evidence",
|
|
801
|
+
"Suggested next steps",
|
|
802
|
+
]);
|
|
803
|
+
|
|
804
|
+
for (const heading of headings) {
|
|
805
|
+
expect(heading.tagName).toBe("H3");
|
|
806
|
+
expect(heading.className).toBe(REPORT_SECTION_HEADING_CLASS_NAME);
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
for (const name of [
|
|
810
|
+
"Most likely root cause",
|
|
811
|
+
"Evidence",
|
|
812
|
+
"Suggested next steps",
|
|
813
|
+
]) {
|
|
814
|
+
const section: HTMLElement = screen.getByRole("region", { name });
|
|
815
|
+
const body: HTMLElement =
|
|
816
|
+
within(section).getByTestId("report-markdown").parentElement!;
|
|
817
|
+
expect(body.className).toBe(REPORT_SECTION_BODY_CLASS_NAME);
|
|
818
|
+
}
|
|
819
|
+
});
|
|
820
|
+
|
|
821
|
+
test("draws no frame or tint of its own around any section", () => {
|
|
822
|
+
const { container } = renderView({ analysisTldr: TLDR });
|
|
823
|
+
|
|
824
|
+
expect(framedElements(container)).toEqual([]);
|
|
825
|
+
expect(container.querySelectorAll("section")).toHaveLength(5);
|
|
826
|
+
});
|
|
827
|
+
|
|
828
|
+
test("draws no frame for a report without a TL;DR, an unstructured one or a legacy one", () => {
|
|
829
|
+
for (const overrides of [
|
|
830
|
+
{},
|
|
831
|
+
{
|
|
832
|
+
analysisMarkdown:
|
|
833
|
+
"## Alert root cause\n\nThe upstream dependency rejected requests.",
|
|
834
|
+
},
|
|
835
|
+
{ evidence: [] },
|
|
836
|
+
] as Array<Partial<ReportViewProps>>) {
|
|
837
|
+
const { container, unmount } = renderView(overrides);
|
|
838
|
+
|
|
839
|
+
expect(framedElements(container)).toEqual([]);
|
|
840
|
+
unmount();
|
|
841
|
+
}
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
test("reads top to bottom: summary, the report's sections, then the caveat line", () => {
|
|
845
|
+
renderView({ analysisTldr: TLDR });
|
|
846
|
+
|
|
847
|
+
const order: Array<HTMLElement> = [
|
|
848
|
+
screen.getByRole("region", { name: "Investigation summary" }),
|
|
849
|
+
screen.getByRole("region", { name: "Most likely root cause" }),
|
|
850
|
+
screen.getByRole("region", { name: "Evidence" }),
|
|
851
|
+
screen.getByRole("region", { name: "Suggested next steps" }),
|
|
852
|
+
screen.getByTestId("investigation-report-footer"),
|
|
853
|
+
];
|
|
854
|
+
|
|
855
|
+
for (let index: number = 1; index < order.length; index++) {
|
|
856
|
+
expect(
|
|
857
|
+
order[index - 1]!.compareDocumentPosition(order[index]!) &
|
|
858
|
+
Node.DOCUMENT_POSITION_FOLLOWING,
|
|
859
|
+
).toBeTruthy();
|
|
860
|
+
}
|
|
861
|
+
});
|
|
862
|
+
|
|
863
|
+
test("keeps the summary and report regions named for assistive technology", () => {
|
|
864
|
+
renderView({ analysisTldr: TLDR });
|
|
865
|
+
|
|
866
|
+
// Both still exist as landmarks even though neither draws a box.
|
|
867
|
+
expect(
|
|
868
|
+
screen.getByRole("region", { name: "Investigation summary" }),
|
|
869
|
+
).toHaveAttribute(
|
|
870
|
+
"data-section-kind",
|
|
871
|
+
InvestigationReportSectionKind.Summary,
|
|
872
|
+
);
|
|
873
|
+
expect(
|
|
874
|
+
screen.getByRole("region", { name: "Investigation report" }).tagName,
|
|
875
|
+
).toBe("SECTION");
|
|
876
|
+
});
|
|
877
|
+
|
|
878
|
+
test("never nests a p inside the caveat line, since the icon renders a div", () => {
|
|
879
|
+
const consoleError: ReturnType<typeof jest.spyOn> = jest.spyOn(
|
|
880
|
+
console,
|
|
881
|
+
"error",
|
|
882
|
+
);
|
|
883
|
+
|
|
884
|
+
try {
|
|
885
|
+
renderView({ analysisTldr: TLDR });
|
|
886
|
+
|
|
887
|
+
const footer: HTMLElement = screen.getByTestId(
|
|
888
|
+
"investigation-report-footer",
|
|
889
|
+
);
|
|
890
|
+
expect(footer.querySelectorAll("p div")).toHaveLength(0);
|
|
891
|
+
expect(
|
|
892
|
+
consoleError.mock.calls.some((args: Array<unknown>): boolean => {
|
|
893
|
+
return args.some((value: unknown): boolean => {
|
|
894
|
+
return (
|
|
895
|
+
typeof value === "string" && value.includes("validateDOMNesting")
|
|
896
|
+
);
|
|
897
|
+
});
|
|
898
|
+
}),
|
|
899
|
+
).toBe(false);
|
|
900
|
+
} finally {
|
|
901
|
+
consoleError.mockRestore();
|
|
902
|
+
}
|
|
903
|
+
});
|
|
904
|
+
});
|
|
905
|
+
|
|
669
906
|
describe("InvestigationReportView inline references", () => {
|
|
670
907
|
test("turns a recorded citation into a chip", () => {
|
|
671
908
|
renderView();
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { afterEach, describe, expect, test } from "@jest/globals";
|
|
3
|
+
import { cleanup, render, screen } from "@testing-library/react";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import InvestigationStatusBadge, {
|
|
6
|
+
InvestigationStatusIndicator,
|
|
7
|
+
renderInvestigationStatusIndicator,
|
|
8
|
+
} from "../../../../App/FeatureSet/Dashboard/src/Components/AI/InvestigationStatusBadge";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* The AI Investigation card names its state once, in its header, in the same
|
|
12
|
+
* neutral pill for every state (and for the not-started card too). The pill
|
|
13
|
+
* used to change colour with the state, which added one more tinted shape
|
|
14
|
+
* to a card that already had several. Only the small mark in front of the
|
|
15
|
+
* words carries colour now, and what it looks like depends on what it means.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const INDICATORS: Array<InvestigationStatusIndicator> = [
|
|
19
|
+
"live",
|
|
20
|
+
"checking",
|
|
21
|
+
"done",
|
|
22
|
+
"idle",
|
|
23
|
+
"attention",
|
|
24
|
+
"failed",
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
function badge(): HTMLElement {
|
|
28
|
+
return screen.getByLabelText("Investigation status");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function markClass(): string {
|
|
32
|
+
return badge().querySelector("svg")?.getAttribute("class") || "";
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
afterEach(() => {
|
|
36
|
+
cleanup();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe("InvestigationStatusBadge", () => {
|
|
40
|
+
test("names the state as text, labelled for the header and marked for its meaning", () => {
|
|
41
|
+
render(<InvestigationStatusBadge text="Completed" indicator="done" />);
|
|
42
|
+
|
|
43
|
+
expect(badge()).toHaveTextContent("Completed");
|
|
44
|
+
// A div, since the icon inside it renders a div of its own.
|
|
45
|
+
expect(badge().tagName).toBe("DIV");
|
|
46
|
+
expect(badge()).toHaveAttribute("data-indicator", "done");
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test("draws the same neutral pill whatever the state", () => {
|
|
50
|
+
const classNames: Array<string> = INDICATORS.map(
|
|
51
|
+
(indicator: InvestigationStatusIndicator): string => {
|
|
52
|
+
const view: ReturnType<typeof render> = render(
|
|
53
|
+
<InvestigationStatusBadge text="State" indicator={indicator} />,
|
|
54
|
+
);
|
|
55
|
+
const className: string = badge().className;
|
|
56
|
+
view.unmount();
|
|
57
|
+
return className;
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
expect(new Set(classNames).size).toBe(1);
|
|
62
|
+
expect(classNames[0]).toContain("bg-gray-50");
|
|
63
|
+
expect(classNames[0]).toContain("text-gray-700");
|
|
64
|
+
expect(classNames[0]).toContain("ring-gray-200");
|
|
65
|
+
expect(classNames[0]).toContain("rounded-full");
|
|
66
|
+
expect(classNames[0]).toContain("whitespace-nowrap");
|
|
67
|
+
expect(classNames[0]).not.toMatch(/green|indigo|red|amber|rose|emerald/);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("pulses a small dot while the run can still move", () => {
|
|
71
|
+
render(<InvestigationStatusBadge text="Investigating…" indicator="live" />);
|
|
72
|
+
|
|
73
|
+
expect(badge().querySelector("svg")).toBeNull();
|
|
74
|
+
const dot: HTMLElement = badge().querySelector(
|
|
75
|
+
"span[aria-hidden='true']",
|
|
76
|
+
) as HTMLElement;
|
|
77
|
+
expect(dot).not.toBeNull();
|
|
78
|
+
const ping: HTMLElement = dot.firstElementChild as HTMLElement;
|
|
79
|
+
expect(ping).toHaveClass("motion-safe:animate-ping", "bg-indigo-500");
|
|
80
|
+
expect(dot.lastElementChild).toHaveClass("bg-indigo-500");
|
|
81
|
+
// Reduced motion keeps the dot and drops only the ping.
|
|
82
|
+
expect(ping.className).not.toMatch(/(^|\s)animate-ping/);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test("spins a gray refresh mark while it checks", () => {
|
|
86
|
+
render(<InvestigationStatusBadge text="Checking" indicator="checking" />);
|
|
87
|
+
|
|
88
|
+
expect(markClass()).toContain("motion-safe:animate-spin");
|
|
89
|
+
expect(markClass()).toContain("text-gray-400");
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test.each([
|
|
93
|
+
["done", "text-green-600"],
|
|
94
|
+
["failed", "text-red-600"],
|
|
95
|
+
["attention", "text-amber-500"],
|
|
96
|
+
["idle", "text-gray-400"],
|
|
97
|
+
] as Array<[InvestigationStatusIndicator, string]>)(
|
|
98
|
+
"marks %s with a %s icon",
|
|
99
|
+
(indicator: InvestigationStatusIndicator, colour: string) => {
|
|
100
|
+
render(<InvestigationStatusBadge text="State" indicator={indicator} />);
|
|
101
|
+
|
|
102
|
+
expect(markClass()).toContain(colour);
|
|
103
|
+
expect(markClass()).toContain("h-3.5");
|
|
104
|
+
expect(markClass()).toContain("w-3.5");
|
|
105
|
+
expect(markClass()).not.toContain("animate");
|
|
106
|
+
},
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
test("gives every settled state a different mark from a live one", () => {
|
|
110
|
+
for (const indicator of INDICATORS) {
|
|
111
|
+
const view: ReturnType<typeof render> = render(
|
|
112
|
+
renderInvestigationStatusIndicator(indicator),
|
|
113
|
+
);
|
|
114
|
+
const hasIcon: boolean = view.container.querySelector("svg") !== null;
|
|
115
|
+
expect(hasIcon).toBe(indicator !== "live");
|
|
116
|
+
view.unmount();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
test("keeps the mark in front of the words", () => {
|
|
121
|
+
render(
|
|
122
|
+
<InvestigationStatusBadge text="Did not finish" indicator="failed" />,
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
const children: Array<Element> = Array.from(badge().children);
|
|
126
|
+
expect(children).toHaveLength(2);
|
|
127
|
+
expect(children[0]!.querySelector("svg")).not.toBeNull();
|
|
128
|
+
expect(children[1]).toHaveTextContent("Did not finish");
|
|
129
|
+
});
|
|
130
|
+
});
|