@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.
Files changed (837) hide show
  1. package/Models/DatabaseModels/AIConversation.ts +127 -1
  2. package/Models/DatabaseModels/CephCluster.ts +12 -0
  3. package/Models/DatabaseModels/CloudResource.ts +12 -0
  4. package/Models/DatabaseModels/DatabaseServer.ts +12 -0
  5. package/Models/DatabaseModels/DockerHost.ts +12 -0
  6. package/Models/DatabaseModels/DockerSwarmCluster.ts +12 -0
  7. package/Models/DatabaseModels/GlobalOidc.ts +0 -4
  8. package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
  9. package/Models/DatabaseModels/GlobalSso.ts +0 -4
  10. package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
  11. package/Models/DatabaseModels/Host.ts +12 -0
  12. package/Models/DatabaseModels/IncidentForm.ts +594 -0
  13. package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
  14. package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
  15. package/Models/DatabaseModels/Index.ts +14 -0
  16. package/Models/DatabaseModels/IoTFleet.ts +12 -0
  17. package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
  18. package/Models/DatabaseModels/MessageQueue.ts +1102 -0
  19. package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
  20. package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
  21. package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
  22. package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
  23. package/Models/DatabaseModels/PodmanHost.ts +12 -0
  24. package/Models/DatabaseModels/Project.ts +59 -0
  25. package/Models/DatabaseModels/ProjectOidc.ts +0 -4
  26. package/Models/DatabaseModels/ProjectSso.ts +0 -4
  27. package/Models/DatabaseModels/ProxmoxCluster.ts +12 -0
  28. package/Models/DatabaseModels/RumApplication.ts +12 -0
  29. package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
  30. package/Models/DatabaseModels/Service.ts +12 -0
  31. package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
  32. package/Models/DatabaseModels/StatusPageSso.ts +0 -4
  33. package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
  34. package/Models/DatabaseModels/VMwareVCenter.ts +12 -0
  35. package/Server/API/AIChatAPI.ts +13 -114
  36. package/Server/API/AIInvestigationAPI.ts +3 -3
  37. package/Server/API/AIInvestigationConversationAPI.ts +266 -0
  38. package/Server/API/IncidentFormAPI.ts +376 -0
  39. package/Server/API/ProjectOIDC.ts +16 -25
  40. package/Server/API/ProjectSSO.ts +16 -24
  41. package/Server/API/StatusPageAPI.ts +42 -77
  42. package/Server/Enterprise/EnterpriseEdition.ts +93 -28
  43. package/Server/Enterprise/EnterpriseFeature.ts +25 -3
  44. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
  45. package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
  46. package/Server/EnvironmentConfig.ts +1 -1
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
  51. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  52. package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
  53. package/Server/Middleware/UserAuthorization.ts +16 -38
  54. package/Server/Services/AIService.ts +10 -13
  55. package/Server/Services/IncidentCustomFieldService.ts +112 -2
  56. package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
  57. package/Server/Services/IncidentEpisodeService.ts +10 -1
  58. package/Server/Services/IncidentFormService.ts +1566 -0
  59. package/Server/Services/IncidentFormSubmissionService.ts +97 -0
  60. package/Server/Services/IncidentGroupingEngineService.ts +45 -8
  61. package/Server/Services/IncidentService.ts +123 -5
  62. package/Server/Services/IncidentTemplateService.ts +22 -0
  63. package/Server/Services/Index.ts +14 -0
  64. package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
  65. package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
  66. package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
  67. package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
  68. package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
  69. package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
  70. package/Server/Services/MessageQueueService.ts +1463 -0
  71. package/Server/Services/OpenTelemetryIngestService.ts +37 -4
  72. package/Server/Services/ProjectService.ts +0 -59
  73. package/Server/Services/StatusPagePrivateUserService.ts +1 -4
  74. package/Server/Services/StatusPageService.ts +1 -51
  75. package/Server/Services/TeamComplianceSettingService.ts +163 -42
  76. package/Server/Services/UserNotificationRuleService.ts +8 -1
  77. package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
  78. package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
  79. package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
  80. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
  81. package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
  82. package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
  83. package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
  84. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
  85. package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
  86. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
  87. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  88. package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
  89. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
  90. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
  91. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
  92. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
  93. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +7 -1
  94. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +34 -14
  95. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +69 -24
  96. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +9 -0
  97. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +53 -10
  98. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +27 -10
  99. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +27 -10
  100. package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
  101. package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
  102. package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
  103. package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
  104. package/Server/Utils/EditionEnforcement.ts +19 -202
  105. package/Server/Utils/LLM/LLMService.ts +259 -63
  106. package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
  107. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  108. package/Server/Utils/SameOriginRequest.ts +203 -0
  109. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  110. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
  111. package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
  112. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
  113. package/Server/Utils/VendorAssets.ts +3 -3
  114. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +3 -1
  115. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +3 -1
  116. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +10 -1
  117. package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
  118. package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
  119. package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
  120. package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
  121. package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
  122. package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
  123. package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
  124. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
  125. package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
  126. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
  127. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
  128. package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
  129. package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
  130. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
  131. package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
  132. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +174 -12
  133. package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
  134. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
  135. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
  136. package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
  137. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +5 -0
  138. package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
  139. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
  140. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
  141. package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
  142. package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
  143. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
  144. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
  145. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
  146. package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
  147. package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
  148. package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
  149. package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
  150. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
  151. package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
  152. package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
  153. package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
  154. package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
  155. package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
  156. package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
  157. package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
  158. package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
  159. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
  160. package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
  161. package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
  162. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
  163. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
  164. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
  165. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
  166. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
  167. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
  168. package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
  169. package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
  170. package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
  171. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
  172. package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
  173. package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
  174. package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
  175. package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
  176. package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
  177. package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
  178. package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
  179. package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
  180. package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
  181. package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
  182. package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
  183. package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
  184. package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
  185. package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
  186. package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
  187. package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
  188. package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
  189. package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
  190. package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
  191. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
  192. package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
  193. package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
  194. package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
  195. package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
  196. package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
  197. package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
  198. package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
  199. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
  200. package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
  201. package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
  202. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
  203. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
  204. package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
  205. package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
  206. package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
  207. package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
  208. package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
  209. package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
  210. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +298 -9
  211. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +453 -0
  212. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
  213. package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
  214. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
  215. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
  216. package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
  217. package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
  218. package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
  219. package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
  220. package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
  221. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
  222. package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
  223. package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
  224. package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
  225. package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
  226. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
  227. package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
  228. package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
  229. package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
  230. package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
  231. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
  232. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +28 -9
  233. package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
  234. package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
  235. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  236. package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
  237. package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
  238. package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
  239. package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
  240. package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
  241. package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
  242. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
  243. package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
  244. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
  245. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
  246. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
  247. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
  248. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
  249. package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
  250. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  251. package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
  252. package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
  253. package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
  254. package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
  255. package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
  256. package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
  257. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
  258. package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
  259. package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
  260. package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
  261. package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
  262. package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
  263. package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
  264. package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
  265. package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
  266. package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
  267. package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
  268. package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
  269. package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
  270. package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
  271. package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
  272. package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
  273. package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
  274. package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
  275. package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
  276. package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
  277. package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
  278. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  279. package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
  280. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
  281. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
  282. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
  283. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
  284. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
  285. package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
  286. package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
  287. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  288. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
  289. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
  290. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
  291. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
  292. package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
  293. package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
  294. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
  295. package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
  296. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
  297. package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
  298. package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
  299. package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
  300. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
  301. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
  302. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
  303. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
  304. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +266 -25
  305. package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
  306. package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
  307. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
  308. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
  309. package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
  310. package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
  311. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
  312. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +2 -0
  313. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +297 -15
  314. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +10 -6
  315. package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
  316. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
  317. package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
  318. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
  319. package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
  320. package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
  321. package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
  322. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
  323. package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
  324. package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
  325. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
  326. package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
  327. package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
  328. package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
  329. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
  330. package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
  331. package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
  332. package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
  333. package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
  334. package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
  335. package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
  336. package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
  337. package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
  338. package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
  339. package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
  340. package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
  341. package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
  342. package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
  343. package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
  344. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +5 -3
  345. package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
  346. package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
  347. package/Tests/Types/XML.test.ts +51 -0
  348. package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
  349. package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
  350. package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
  351. package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
  352. package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
  353. package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
  354. package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
  355. package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
  356. package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
  357. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
  358. package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
  359. package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
  360. package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
  361. package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
  362. package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
  363. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
  364. package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
  365. package/Tests/UI/Components/Icon.test.tsx +32 -0
  366. package/Tests/UI/Components/Input.test.tsx +31 -0
  367. package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
  368. package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
  369. package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
  370. package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
  371. package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
  372. package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
  373. package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
  374. package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
  375. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
  376. package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
  377. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  378. package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
  379. package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
  380. package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
  381. package/Tests/UI/Components/TextArea.test.tsx +19 -0
  382. package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
  383. package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
  384. package/Tests/UI/EsbuildConfig.test.ts +115 -39
  385. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
  386. package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
  387. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
  388. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
  389. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  390. package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
  391. package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
  392. package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
  393. package/Types/AI/AIAgentRunLimits.ts +146 -0
  394. package/Types/Code/CodeType.ts +2 -0
  395. package/Types/Code/JsonSyntax.ts +923 -0
  396. package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
  397. package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
  398. package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
  399. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
  400. package/Types/Icon/IconProp.ts +2 -0
  401. package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
  402. package/Types/Incident/IncidentFormPublic.ts +1145 -0
  403. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
  404. package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
  405. package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
  406. package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
  407. package/Types/MessageQueue/MessagingSystem.ts +518 -0
  408. package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
  409. package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
  410. package/Types/Permission.ts +310 -0
  411. package/Types/ResourceAiAgent/ResourceAiAccess.ts +10 -4
  412. package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
  413. package/Types/Rules/RuleRun.ts +4 -0
  414. package/Types/Team/ComplianceNotificationChannel.ts +4 -3
  415. package/Types/Team/ComplianceRule.ts +71 -18
  416. package/Types/Team/ComplianceRuleType.ts +2 -2
  417. package/Types/Team/TeamComplianceStatus.ts +6 -2
  418. package/Types/Telemetry/EntityType.ts +16 -0
  419. package/Types/Telemetry/LockedFilterDetail.ts +22 -0
  420. package/Types/XML.ts +26 -0
  421. package/UI/Components/CodeEditor/CodeEditor.css +379 -0
  422. package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
  423. package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
  424. package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
  425. package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
  426. package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
  427. package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
  428. package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
  429. package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
  430. package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
  431. package/UI/Components/Forms/Fields/FormField.tsx +8 -0
  432. package/UI/Components/Forms/Types/Field.ts +8 -0
  433. package/UI/Components/Icon/Icon.tsx +18 -0
  434. package/UI/Components/Input/Input.tsx +11 -4
  435. package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
  436. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
  437. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  438. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
  439. package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
  440. package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
  441. package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
  442. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
  443. package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
  444. package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
  445. package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
  446. package/UI/Components/Table/EmptyTableMessage.ts +81 -0
  447. package/UI/Components/Table/Table.tsx +50 -21
  448. package/UI/Components/Table/TableRow.tsx +9 -1
  449. package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
  450. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
  451. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
  452. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
  453. package/UI/Components/TextArea/TextArea.tsx +9 -2
  454. package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
  455. package/UI/Styles/Theme.css +8 -0
  456. package/UI/esbuild-config.js +2 -32
  457. package/Utils/LabelRuleImportExport.ts +2 -0
  458. package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
  459. package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
  460. package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
  461. package/Utils/Telemetry/EntityKey.ts +48 -0
  462. package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
  463. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
  464. package/build/dist/Models/DatabaseModels/CephCluster.js +12 -0
  465. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  466. package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
  467. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  468. package/build/dist/Models/DatabaseModels/DatabaseServer.js +12 -0
  469. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  470. package/build/dist/Models/DatabaseModels/DockerHost.js +12 -0
  471. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  472. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +12 -0
  473. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  474. package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
  475. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
  476. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
  477. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
  478. package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
  479. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
  480. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
  481. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
  482. package/build/dist/Models/DatabaseModels/Host.js +12 -0
  483. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  484. package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
  485. package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
  486. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
  487. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
  488. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
  489. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  490. package/build/dist/Models/DatabaseModels/Index.js +14 -0
  491. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  492. package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
  493. package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
  494. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
  495. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  496. package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
  497. package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
  498. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
  499. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
  500. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
  501. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
  502. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
  503. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
  504. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
  505. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
  506. package/build/dist/Models/DatabaseModels/PodmanHost.js +12 -0
  507. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  508. package/build/dist/Models/DatabaseModels/Project.js +61 -0
  509. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  510. package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
  511. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
  512. package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
  513. package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
  514. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +12 -0
  515. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  516. package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
  517. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  518. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
  519. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  520. package/build/dist/Models/DatabaseModels/Service.js +12 -0
  521. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  522. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
  523. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
  524. package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
  525. package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
  526. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
  527. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
  528. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +12 -0
  529. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  530. package/build/dist/Server/API/AIChatAPI.js +9 -103
  531. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  532. package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
  533. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  534. package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
  535. package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
  536. package/build/dist/Server/API/IncidentFormAPI.js +245 -0
  537. package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
  538. package/build/dist/Server/API/ProjectOIDC.js +16 -24
  539. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  540. package/build/dist/Server/API/ProjectSSO.js +16 -24
  541. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  542. package/build/dist/Server/API/StatusPageAPI.js +42 -75
  543. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  544. package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
  545. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
  546. package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
  547. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
  548. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
  549. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
  550. package/build/dist/Server/EnvironmentConfig.js +1 -1
  551. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
  552. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
  553. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
  554. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
  555. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
  556. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
  557. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
  558. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
  559. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  560. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  561. package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
  562. package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
  563. package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
  564. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  565. package/build/dist/Server/Services/AIService.js +10 -13
  566. package/build/dist/Server/Services/AIService.js.map +1 -1
  567. package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
  568. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  569. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
  570. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  571. package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
  572. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  573. package/build/dist/Server/Services/IncidentFormService.js +1202 -0
  574. package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
  575. package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
  576. package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
  577. package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
  578. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  579. package/build/dist/Server/Services/IncidentService.js +106 -4
  580. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  581. package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
  582. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  583. package/build/dist/Server/Services/Index.js +14 -0
  584. package/build/dist/Server/Services/Index.js.map +1 -1
  585. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
  586. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
  587. package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
  588. package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
  589. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
  590. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
  591. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
  592. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
  593. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
  594. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
  595. package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
  596. package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
  597. package/build/dist/Server/Services/MessageQueueService.js +1140 -0
  598. package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
  599. package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
  600. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  601. package/build/dist/Server/Services/ProjectService.js +0 -54
  602. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  603. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
  604. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  605. package/build/dist/Server/Services/StatusPageService.js +0 -46
  606. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  607. package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
  608. package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
  609. package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
  610. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  611. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
  612. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
  613. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
  614. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  615. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
  616. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  617. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
  618. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  619. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
  620. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
  621. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  622. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
  623. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
  624. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
  625. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  626. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
  627. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
  628. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
  629. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  630. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  631. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
  632. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
  633. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
  634. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
  635. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
  636. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
  637. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
  638. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  639. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
  640. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  641. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +7 -2
  642. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  643. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +29 -14
  644. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  645. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +38 -14
  646. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -1
  647. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +2 -0
  648. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -1
  649. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +40 -10
  650. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  651. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +19 -7
  652. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  653. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +19 -7
  654. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  655. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
  656. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  657. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
  658. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
  659. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
  660. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
  661. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
  662. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
  663. package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
  664. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
  665. package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
  666. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  667. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
  668. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
  669. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  670. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  671. package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
  672. package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
  673. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  674. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  675. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
  676. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  677. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
  678. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
  679. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
  680. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  681. package/build/dist/Server/Utils/VendorAssets.js +3 -3
  682. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +3 -1
  683. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  684. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +3 -1
  685. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  686. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +10 -1
  687. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  688. package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
  689. package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
  690. package/build/dist/Types/Code/CodeType.js +2 -0
  691. package/build/dist/Types/Code/CodeType.js.map +1 -1
  692. package/build/dist/Types/Code/JsonSyntax.js +604 -0
  693. package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
  694. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
  695. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
  696. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
  697. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
  698. package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
  699. package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
  700. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
  701. package/build/dist/Types/Icon/IconProp.js +2 -0
  702. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  703. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
  704. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
  705. package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
  706. package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
  707. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
  708. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  709. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
  710. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
  711. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
  712. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
  713. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
  714. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
  715. package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
  716. package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
  717. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
  718. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
  719. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
  720. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
  721. package/build/dist/Types/Permission.js +274 -0
  722. package/build/dist/Types/Permission.js.map +1 -1
  723. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +10 -4
  724. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -1
  725. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
  726. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  727. package/build/dist/Types/Rules/RuleRun.js +4 -0
  728. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  729. package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
  730. package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
  731. package/build/dist/Types/Team/ComplianceRule.js +48 -14
  732. package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
  733. package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
  734. package/build/dist/Types/Telemetry/EntityType.js +16 -0
  735. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  736. package/build/dist/Types/XML.js +23 -0
  737. package/build/dist/Types/XML.js.map +1 -1
  738. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
  739. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  740. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
  741. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
  742. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
  743. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
  744. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
  745. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
  746. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
  747. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
  748. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  749. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  750. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
  751. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
  752. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
  753. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  754. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
  755. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  756. package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
  757. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  758. package/build/dist/UI/Components/Icon/Icon.js +8 -0
  759. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  760. package/build/dist/UI/Components/Input/Input.js +11 -3
  761. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  762. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
  763. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  764. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
  765. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  766. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  767. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  768. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
  769. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  770. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
  771. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
  772. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
  773. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
  774. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
  775. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
  776. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
  777. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  778. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
  779. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
  780. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
  781. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  782. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
  783. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
  784. package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
  785. package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
  786. package/build/dist/UI/Components/Table/Table.js +30 -11
  787. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  788. package/build/dist/UI/Components/Table/TableRow.js +9 -2
  789. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  790. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
  791. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
  792. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
  793. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  794. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
  795. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
  796. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
  797. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  798. package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
  799. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  800. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
  801. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  802. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  803. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  804. package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
  805. package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
  806. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
  807. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
  808. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
  809. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
  810. package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
  811. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  812. package/package.json +1 -3
  813. package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
  814. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
  815. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
  816. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
  817. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
  818. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
  819. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
  820. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
  821. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
  822. package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
  823. package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
  824. package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
  825. package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
  826. package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
  827. package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
  828. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
  829. package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
  830. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
  831. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
  832. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
  833. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
  834. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
  835. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
  836. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
  837. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
@@ -139,6 +139,7 @@ jest.mock(
139
139
 
140
140
  import InvestigationPanel, {
141
141
  InvestigationSubjectType,
142
+ VERDICT_QUESTION,
142
143
  } from "../../../../App/FeatureSet/Dashboard/src/Components/AI/InvestigationPanel";
143
144
  import AIRunEvent from "../../../Models/DatabaseModels/AIRunEvent";
144
145
  import HTTPErrorResponse from "../../../Types/API/HTTPErrorResponse";
@@ -532,7 +533,7 @@ describe("InvestigationPanel report lifecycle", () => {
532
533
  renderPanel({ onAnalysisAvailable });
533
534
  await flush();
534
535
 
535
- expect(screen.getByText("Investigation complete")).toBeInTheDocument();
536
+ expect(screen.getByText("Completed")).toBeInTheDocument();
536
537
  expect(screen.getByLabelText("Investigation report")).toBeInTheDocument();
537
538
  expect(screen.getByTestId("investigation-markdown")).toHaveTextContent(
538
539
  "The database connection pool was exhausted.",
@@ -550,8 +551,12 @@ describe("InvestigationPanel report lifecycle", () => {
550
551
  renderEventReference: expect.any(Function),
551
552
  }),
552
553
  });
554
+ /*
555
+ * Sections sit directly under the card's title, so their headings are
556
+ * h3s, like the Summary's.
557
+ */
553
558
  expect(
554
- screen.getByRole("heading", { level: 4, name: "Root cause" }),
559
+ screen.getByRole("heading", { level: 3, name: "Root cause" }),
555
560
  ).toBeInTheDocument();
556
561
  /*
557
562
  * This report carries no evidence, so the section is only the activity
@@ -602,7 +607,7 @@ describe("InvestigationPanel report lifecycle", () => {
602
607
  renderPanel({ onAnalysisAvailable });
603
608
  await flush();
604
609
 
605
- expect(screen.getByText("Preparing investigation report…")).toBeVisible();
610
+ expect(screen.getByText("Preparing report…")).toBeVisible();
606
611
  expect(screen.getByText("Preparing the final report")).toBeVisible();
607
612
  expect(screen.queryByTestId("investigation-markdown")).toBeNull();
608
613
  // The steps can already be checked while the report is being written.
@@ -612,7 +617,7 @@ describe("InvestigationPanel report lifecycle", () => {
612
617
  /* Status, run id, events and recommendation remain identical. */
613
618
  await tick(POLL_INTERVAL_MS);
614
619
 
615
- expect(screen.getByText("Investigation complete")).toBeVisible();
620
+ expect(screen.getByText("Completed")).toBeVisible();
616
621
  expect(screen.getByTestId("investigation-markdown")).toHaveTextContent(
617
622
  "The database connection pool was exhausted.",
618
623
  );
@@ -652,7 +657,7 @@ describe("InvestigationPanel report lifecycle", () => {
652
657
  expect(postMock).toHaveBeenCalledTimes(2);
653
658
 
654
659
  await resolveDeferred(slowPoll, completedResponse());
655
- expect(screen.getByText("Investigation complete")).toBeVisible();
660
+ expect(screen.getByText("Completed")).toBeVisible();
656
661
  expect(postMock).toHaveBeenCalledTimes(2);
657
662
  });
658
663
 
@@ -682,7 +687,7 @@ describe("InvestigationPanel report lifecycle", () => {
682
687
  );
683
688
  await flush();
684
689
 
685
- expect(screen.getByText("Investigation complete")).toBeVisible();
690
+ expect(screen.getByText("Completed")).toBeVisible();
686
691
  expect(postRequestAt(1).data).toEqual({ alertId: ALERT_ID.toString() });
687
692
 
688
693
  await resolveDeferred(
@@ -690,7 +695,7 @@ describe("InvestigationPanel report lifecycle", () => {
690
695
  successfulResponse(investigationPayload({ status: AIRunStatus.Running })),
691
696
  );
692
697
 
693
- expect(screen.getByText("Investigation complete")).toBeVisible();
698
+ expect(screen.getByText("Completed")).toBeVisible();
694
699
  expect(screen.queryByText("Investigating…")).toBeNull();
695
700
  expect(statuses[statuses.length - 1]).toBe(AIRunStatus.Completed);
696
701
  });
@@ -749,9 +754,7 @@ describe("InvestigationPanel report lifecycle", () => {
749
754
  renderPanel();
750
755
  await flush();
751
756
 
752
- expect(
753
- screen.getByText("Investigation completed without a report"),
754
- ).toBeVisible();
757
+ expect(screen.getByText("No report")).toBeVisible();
755
758
  expect(
756
759
  screen.getByText("No investigation report was published."),
757
760
  ).toBeVisible();
@@ -770,7 +773,7 @@ describe("InvestigationPanel report lifecycle", () => {
770
773
  );
771
774
  expect(fixButton()).toBeDisabled();
772
775
  // There is no report to judge, so the rating row is left out entirely.
773
- expect(screen.queryByText("Rate this investigation")).toBeNull();
776
+ expect(screen.queryByText("Was this analysis correct?")).toBeNull();
774
777
  expect(screen.queryByRole("button", { name: "Confirmed" })).toBeNull();
775
778
  expect(screen.queryByRole("button", { name: "Rejected" })).toBeNull();
776
779
  });
@@ -789,7 +792,7 @@ describe("InvestigationPanel report lifecycle", () => {
789
792
  renderPanel();
790
793
  await flush();
791
794
 
792
- expect(screen.getByText("Investigation did not finish")).toBeVisible();
795
+ expect(screen.getByText("Did not finish")).toBeVisible();
793
796
  expect(screen.getByText("The model provider timed out.")).toBeVisible();
794
797
  expect(
795
798
  screen.getByText("The investigation stopped before it could report."),
@@ -804,7 +807,7 @@ describe("InvestigationPanel report lifecycle", () => {
804
807
  }),
805
808
  );
806
809
  expect(fixButton()).toBeNull();
807
- expect(screen.queryByText("Rate this investigation")).toBeNull();
810
+ expect(screen.queryByText("Was this analysis correct?")).toBeNull();
808
811
  });
809
812
 
810
813
  test("uses the alert endpoint and alert id", async () => {
@@ -1078,9 +1081,19 @@ describe("InvestigationPanel TL;DR", () => {
1078
1081
  renderPanel();
1079
1082
  await flush();
1080
1083
 
1084
+ /*
1085
+ * The summary is the card's first section, under the same kind of
1086
+ * heading as the rest, and the TL;DR is its lead line. There is no
1087
+ * "TL;DR" chip any more: the larger type says it is the answer.
1088
+ */
1081
1089
  const summary: HTMLElement = screen.getByLabelText("Investigation summary");
1082
- expect(summary).toHaveTextContent("TL;DR");
1083
- expect(summary).toHaveTextContent(TLDR);
1090
+ expect(
1091
+ within(summary).getByRole("heading", { level: 3, name: "Summary" }),
1092
+ ).toBeInTheDocument();
1093
+ expect(summary).not.toHaveTextContent("TL;DR");
1094
+ const lead: HTMLElement = within(summary).getByText(TLDR);
1095
+ expect(lead.tagName).toBe("P");
1096
+ expect(lead).toHaveClass("text-base", "font-semibold");
1084
1097
 
1085
1098
  // The summary is never routed through the markdown renderer.
1086
1099
  expect(markdownTexts().length).toBeGreaterThan(0);
@@ -1306,7 +1319,7 @@ describe("InvestigationPanel TL;DR", () => {
1306
1319
  */
1307
1320
  describe("InvestigationPanel verdict control", () => {
1308
1321
  function verdictGroup(): HTMLElement | null {
1309
- return screen.queryByRole("group", { name: "Rate this investigation" });
1322
+ return screen.queryByRole("group", { name: "Was this analysis correct?" });
1310
1323
  }
1311
1324
 
1312
1325
  test("offers both verdicts inside one labelled group", async () => {
@@ -1383,7 +1396,7 @@ describe("InvestigationPanel verdict control", () => {
1383
1396
  await flush();
1384
1397
 
1385
1398
  expect(screen.getByLabelText("Investigation status")).toHaveTextContent(
1386
- "Investigation complete",
1399
+ "Completed",
1387
1400
  );
1388
1401
  });
1389
1402
  });
@@ -1399,11 +1412,13 @@ describe("InvestigationPanel verdict control", () => {
1399
1412
  */
1400
1413
  describe("InvestigationPanel rating availability", () => {
1401
1414
  function ratingHeading(): HTMLElement | null {
1402
- return screen.queryByRole("heading", { name: "Rate this investigation" });
1415
+ return screen.queryByRole("heading", {
1416
+ name: "Was this analysis correct?",
1417
+ });
1403
1418
  }
1404
1419
 
1405
1420
  function ratingGroup(): HTMLElement | null {
1406
- return screen.queryByRole("group", { name: "Rate this investigation" });
1421
+ return screen.queryByRole("group", { name: "Was this analysis correct?" });
1407
1422
  }
1408
1423
 
1409
1424
  function actionsFrame(): HTMLElement | null {
@@ -1428,7 +1443,7 @@ describe("InvestigationPanel rating availability", () => {
1428
1443
 
1429
1444
  function expectNoRating(): void {
1430
1445
  expect(ratingHeading()).toBeNull();
1431
- expect(screen.queryByText("Rate this investigation")).toBeNull();
1446
+ expect(screen.queryByText("Was this analysis correct?")).toBeNull();
1432
1447
  expect(ratingGroup()).toBeNull();
1433
1448
  expect(verdictAnswers()).toEqual([]);
1434
1449
  expect(screen.queryByText(/You (confirmed|rejected) this/)).toBeNull();
@@ -1530,9 +1545,7 @@ describe("InvestigationPanel rating availability", () => {
1530
1545
  await flush();
1531
1546
 
1532
1547
  expect(requestPath(0)).toContain(path);
1533
- expect(
1534
- screen.getByText("Investigation completed without a report"),
1535
- ).toBeVisible();
1548
+ expect(screen.getByText("No report")).toBeVisible();
1536
1549
  expect(
1537
1550
  screen.getByText("No investigation report was published."),
1538
1551
  ).toBeVisible();
@@ -1592,7 +1605,7 @@ describe("InvestigationPanel rating availability", () => {
1592
1605
  await flush();
1593
1606
 
1594
1607
  expect(screen.getByLabelText("Investigation status")).toHaveTextContent(
1595
- "Investigation complete",
1608
+ "Completed",
1596
1609
  );
1597
1610
  expect(
1598
1611
  screen.getByText("No investigation report was published."),
@@ -1986,7 +1999,7 @@ describe("InvestigationPanel code-fix recommendation", () => {
1986
1999
 
1987
2000
  expect(fixButton()).toBeEnabled();
1988
2001
  expect(screen.getByText("Act on this investigation")).toBeVisible();
1989
- expect(screen.getByText("Rate this investigation")).toBeVisible();
2002
+ expect(screen.getByText("Was this analysis correct?")).toBeVisible();
1990
2003
  });
1991
2004
 
1992
2005
  test("hides every fix-task element for NotRecommended but retains verdict controls", async () => {
@@ -2002,7 +2015,7 @@ describe("InvestigationPanel code-fix recommendation", () => {
2002
2015
  expect(fixButton()).toBeNull();
2003
2016
  expect(screen.queryByText("Act on this investigation")).toBeNull();
2004
2017
  expect(screen.queryByText(/Fix task created/)).toBeNull();
2005
- expect(screen.getByText("Rate this investigation")).toBeVisible();
2018
+ expect(screen.getByText("Was this analysis correct?")).toBeVisible();
2006
2019
  expect(screen.getByRole("button", { name: "Confirmed" })).toBeEnabled();
2007
2020
  expect(screen.getByRole("button", { name: "Rejected" })).toBeEnabled();
2008
2021
  });
@@ -2019,7 +2032,7 @@ describe("InvestigationPanel code-fix recommendation", () => {
2019
2032
  await flush();
2020
2033
 
2021
2034
  expect(fixButton()).toBeNull();
2022
- expect(screen.getByText("Rate this investigation")).toBeVisible();
2035
+ expect(screen.getByText("Was this analysis correct?")).toBeVisible();
2023
2036
  expect(jest.getTimerCount()).toBe(1);
2024
2037
 
2025
2038
  await advanceFastPolls(4);
@@ -2055,7 +2068,7 @@ describe("InvestigationPanel code-fix recommendation", () => {
2055
2068
  await flush();
2056
2069
 
2057
2070
  expect(fixButton()).toBeNull();
2058
- expect(screen.getByText("Rate this investigation")).toBeVisible();
2071
+ expect(screen.getByText("Was this analysis correct?")).toBeVisible();
2059
2072
  expect(jest.getTimerCount()).toBe(2);
2060
2073
 
2061
2074
  await advanceFastPolls();
@@ -2077,7 +2090,7 @@ describe("InvestigationPanel code-fix recommendation", () => {
2077
2090
  renderPanel();
2078
2091
  await flush();
2079
2092
 
2080
- expect(screen.getByText("Investigation complete")).toBeVisible();
2093
+ expect(screen.getByText("Completed")).toBeVisible();
2081
2094
  expect(fixButton()).toBeNull();
2082
2095
  expect(postMock).toHaveBeenCalledTimes(1);
2083
2096
  expect(jest.getTimerCount()).toBe(2);
@@ -2099,7 +2112,7 @@ describe("InvestigationPanel code-fix recommendation", () => {
2099
2112
  renderPanel();
2100
2113
  await flush();
2101
2114
 
2102
- expect(screen.getByText("Investigation complete")).toBeVisible();
2115
+ expect(screen.getByText("Completed")).toBeVisible();
2103
2116
  expect(screen.queryByText("Investigating…")).toBeNull();
2104
2117
  expect(
2105
2118
  document.querySelector('[class~="motion-safe:animate-ping"]'),
@@ -2361,7 +2374,7 @@ describe("InvestigationPanel completed actions", () => {
2361
2374
 
2362
2375
  expect(screen.queryByRole("alert")).toBeNull();
2363
2376
  expect(fixButton()).toBeEnabled();
2364
- expect(screen.getByText("Investigation complete")).toBeVisible();
2377
+ expect(screen.getByText("Completed")).toBeVisible();
2365
2378
  });
2366
2379
 
2367
2380
  test("resets fix-task and verdict state when the same subject gets a new run", async () => {
@@ -2439,7 +2452,7 @@ describe("InvestigationPanel completed actions", () => {
2439
2452
  expect(fixButton()).toBeNull();
2440
2453
  expect(screen.getByText(/You confirmed this analysis/)).toBeVisible();
2441
2454
  expect(screen.getByText("Change")).toBeVisible();
2442
- expect(screen.getByText("Rate this investigation")).toBeVisible();
2455
+ expect(screen.getByText("Was this analysis correct?")).toBeVisible();
2443
2456
  });
2444
2457
 
2445
2458
  test("a GET started before verdict save cannot overwrite the saved verdict", async () => {
@@ -2709,7 +2722,7 @@ describe("InvestigationPanel structured report", () => {
2709
2722
  });
2710
2723
  expect(
2711
2724
  within(report)
2712
- .getAllByRole("heading", { level: 4 })
2725
+ .getAllByRole("heading", { level: 3 })
2713
2726
  .map((heading: HTMLElement): string => {
2714
2727
  return heading.textContent || "";
2715
2728
  }),
@@ -3360,7 +3373,7 @@ describe("InvestigationPanel structured report", () => {
3360
3373
  screen.getByRole("heading", { name: "Act on this investigation" }),
3361
3374
  ).toBeVisible();
3362
3375
  expect(
3363
- screen.getByRole("heading", { name: "Rate this investigation" }),
3376
+ screen.getByRole("heading", { name: "Was this analysis correct?" }),
3364
3377
  ).toBeVisible();
3365
3378
  expect(container.querySelectorAll("p div")).toHaveLength(0);
3366
3379
  });
@@ -4205,3 +4218,685 @@ describe("InvestigationPanel verdict callback", () => {
4205
4218
  expect(first).toHaveBeenCalledTimes(firstCallCount);
4206
4219
  });
4207
4220
  });
4221
+
4222
+ /*
4223
+ * A completed investigation used to stack a tinted summary box, a report box
4224
+ * with an amber callout inside it, a details box and an actions box inside
4225
+ * the card: a card inside a card inside a card. Every state is now the card
4226
+ * and plain content inside it, spaced apart and split by at most a hairline,
4227
+ * with the state named once, in the header's neutral pill.
4228
+ */
4229
+ describe("InvestigationPanel as one flat card", () => {
4230
+ const CLUSTER_ID: string = "0193c0de-1111-4aaa-8bbb-000000000001";
4231
+ const OTHER_CLUSTER_ID: string = "0193c0de-2222-4aaa-8bbb-000000000002";
4232
+
4233
+ const clusterAccess: JSONArray = [
4234
+ {
4235
+ clusterId: CLUSTER_ID,
4236
+ clusterName: "prod-east",
4237
+ isInvestigationReady: true,
4238
+ isRemediationReady: true,
4239
+ remediationMode: "RequireApproval",
4240
+ gaps: [],
4241
+ evaluatedAt: COMPLETED_AT,
4242
+ },
4243
+ {
4244
+ clusterId: OTHER_CLUSTER_ID,
4245
+ clusterName: "staging-west",
4246
+ isInvestigationReady: false,
4247
+ isRemediationReady: false,
4248
+ remediationMode: "Disabled",
4249
+ gaps: [
4250
+ {
4251
+ code: "investigation_disabled",
4252
+ title: "Investigation is off",
4253
+ description: "AI may not run kubectl on this cluster.",
4254
+ nextStep: "Turn on 'Investigate with kubectl'.",
4255
+ blocks: "investigation",
4256
+ },
4257
+ ],
4258
+ evaluatedAt: COMPLETED_AT,
4259
+ },
4260
+ ];
4261
+
4262
+ const structuredMarkdown: string = [
4263
+ "**Summary** — the connection pool ran dry after the 18:00 deploy [C1].",
4264
+ "",
4265
+ "**Most likely root cause** — the deploy halved the pool size [C1].",
4266
+ "",
4267
+ "**Suggested next steps**",
4268
+ "- Roll back the deploy",
4269
+ ].join("\n");
4270
+
4271
+ const evidenceItems: JSONArray = [
4272
+ {
4273
+ citationId: "C1",
4274
+ toolName: "search_logs",
4275
+ label: "Logs 17:20 – 18:20 (1 shown)",
4276
+ rowCount: 1,
4277
+ queryArguments: { bodySearchText: "pool timeout" },
4278
+ executedAt: "2026-08-07T11:59:00.000Z",
4279
+ canLoadRows: true,
4280
+ },
4281
+ ];
4282
+
4283
+ function withClusters(response: ApiResponse): ApiResponse {
4284
+ return { data: { ...response.data, clusterAccess } };
4285
+ }
4286
+
4287
+ function fullReportResponse(): ApiResponse {
4288
+ return withClusters(
4289
+ completedResponse({
4290
+ analysisMarkdown: structuredMarkdown,
4291
+ analysisTldr: TLDR,
4292
+ evidence: evidenceItems,
4293
+ }),
4294
+ );
4295
+ }
4296
+
4297
+ /*
4298
+ * Classes that turn an element into a panel of its own: a large rounded
4299
+ * frame, a shadow, a gradient or a tinted wash. Controls (buttons, links,
4300
+ * tabs and the verdict's two-answer group) are drawn as controls and are
4301
+ * left out.
4302
+ */
4303
+ const PANEL_CLASS: RegExp =
4304
+ /^(rounded-xl|rounded-2xl|shadow|shadow-(sm|md|lg)|bg-gradient-to-[a-z]+|bg-(indigo|amber|emerald|red|green|rose|violet)-50(\/\d+)?|bg-gray-50(\/\d+)?)$/;
4305
+ const CONTROL_SELECTOR: string =
4306
+ "button, a, [role='tab'], [role='group'], [data-testid='investigation-markdown']";
4307
+
4308
+ function classTokens(element: Element): Array<string> {
4309
+ return (element.getAttribute("class") || "").split(/\s+/);
4310
+ }
4311
+
4312
+ function panelsInsideTheCard(): Array<string> {
4313
+ const region: HTMLElement = screen.getByRole("region", {
4314
+ name: "AI Investigation",
4315
+ });
4316
+
4317
+ return Array.from(region.querySelectorAll("*"))
4318
+ .filter((element: Element): boolean => {
4319
+ if (element.closest(CONTROL_SELECTOR)) {
4320
+ return false;
4321
+ }
4322
+
4323
+ const tokens: Array<string> = classTokens(element);
4324
+ const isFramedBox: boolean =
4325
+ tokens.includes("border") &&
4326
+ tokens.some((token: string): boolean => {
4327
+ return token.startsWith("rounded");
4328
+ });
4329
+
4330
+ return (
4331
+ isFramedBox ||
4332
+ tokens.some((token: string): boolean => {
4333
+ return PANEL_CLASS.test(token);
4334
+ })
4335
+ );
4336
+ })
4337
+ .map((element: Element): string => {
4338
+ return `<${element.tagName.toLowerCase()} class="${element.getAttribute("class")}">`;
4339
+ });
4340
+ }
4341
+
4342
+ const STATES: Array<[string, () => ApiResponse]> = [
4343
+ [
4344
+ "a completed report with a TL;DR, evidence and cluster access",
4345
+ fullReportResponse,
4346
+ ],
4347
+ [
4348
+ "a running investigation",
4349
+ (): ApiResponse => {
4350
+ return withClusters(
4351
+ successfulResponse(
4352
+ investigationPayload({
4353
+ status: AIRunStatus.Running,
4354
+ events: [activityEvent],
4355
+ }),
4356
+ ),
4357
+ );
4358
+ },
4359
+ ],
4360
+ [
4361
+ "a queued investigation",
4362
+ (): ApiResponse => {
4363
+ return successfulResponse(
4364
+ investigationPayload({ status: AIRunStatus.Queued }),
4365
+ );
4366
+ },
4367
+ ],
4368
+ [
4369
+ "a run that stopped with an error",
4370
+ (): ApiResponse => {
4371
+ return withClusters(
4372
+ successfulResponse(
4373
+ investigationPayload({
4374
+ status: AIRunStatus.Error,
4375
+ errorMessage: "The model provider timed out.",
4376
+ events: [activityEvent],
4377
+ toolCallCount: 3,
4378
+ totalTokens: 900,
4379
+ }),
4380
+ ),
4381
+ );
4382
+ },
4383
+ ],
4384
+ [
4385
+ "a report that is still being prepared",
4386
+ (): ApiResponse => {
4387
+ return completedResponse({
4388
+ analysisMarkdown: null,
4389
+ isAnalysisPending: true,
4390
+ });
4391
+ },
4392
+ ],
4393
+ [
4394
+ "a run that finished without a report",
4395
+ (): ApiResponse => {
4396
+ return completedResponse({
4397
+ analysisMarkdown: null,
4398
+ isAnalysisPending: false,
4399
+ });
4400
+ },
4401
+ ],
4402
+ ];
4403
+
4404
+ test.each(STATES)(
4405
+ "draws %s as one card with no panel inside it",
4406
+ async (_state: string, response: () => ApiResponse) => {
4407
+ postMock.mockResolvedValue(response() as never);
4408
+
4409
+ renderPanel();
4410
+ await flush();
4411
+
4412
+ expect(screen.getAllByTestId("card")).toHaveLength(1);
4413
+ expect(panelsInsideTheCard()).toEqual([]);
4414
+ },
4415
+ );
4416
+
4417
+ test("still draws no panel once the details and an evidence row are open", async () => {
4418
+ routePosts({
4419
+ investigation: (): unknown => {
4420
+ return Promise.resolve(fullReportResponse());
4421
+ },
4422
+ evidence: (): unknown => {
4423
+ return Promise.resolve(
4424
+ evidenceRowsResponse("C1", "18:01 ERROR pool timeout"),
4425
+ );
4426
+ },
4427
+ });
4428
+
4429
+ renderPanel();
4430
+ await flush();
4431
+
4432
+ openDetails();
4433
+ fireEvent.click(
4434
+ within(evidenceList()).getByRole("button", { name: /Logs 17:20/ }),
4435
+ );
4436
+ await flush();
4437
+
4438
+ expect(screen.getByText("18:01 ERROR pool timeout")).toBeVisible();
4439
+ expect(panelsInsideTheCard()).toEqual([]);
4440
+ });
4441
+
4442
+ test.each([
4443
+ [
4444
+ "Investigating…",
4445
+ "live",
4446
+ (): ApiResponse => {
4447
+ return successfulResponse(
4448
+ investigationPayload({ status: AIRunStatus.Running }),
4449
+ );
4450
+ },
4451
+ ],
4452
+ [
4453
+ "Queued",
4454
+ "live",
4455
+ (): ApiResponse => {
4456
+ return successfulResponse(
4457
+ investigationPayload({ status: AIRunStatus.Queued }),
4458
+ );
4459
+ },
4460
+ ],
4461
+ [
4462
+ "Preparing report…",
4463
+ "live",
4464
+ (): ApiResponse => {
4465
+ return completedResponse({
4466
+ analysisMarkdown: null,
4467
+ isAnalysisPending: true,
4468
+ });
4469
+ },
4470
+ ],
4471
+ [
4472
+ "Completed",
4473
+ "done",
4474
+ (): ApiResponse => {
4475
+ return completedResponse();
4476
+ },
4477
+ ],
4478
+ [
4479
+ "No report",
4480
+ "attention",
4481
+ (): ApiResponse => {
4482
+ return completedResponse({
4483
+ analysisMarkdown: null,
4484
+ isAnalysisPending: false,
4485
+ });
4486
+ },
4487
+ ],
4488
+ [
4489
+ "Did not finish",
4490
+ "failed",
4491
+ (): ApiResponse => {
4492
+ return successfulResponse(
4493
+ investigationPayload({
4494
+ status: AIRunStatus.Error,
4495
+ errorMessage: "The provider timed out.",
4496
+ }),
4497
+ );
4498
+ },
4499
+ ],
4500
+ ])(
4501
+ 'names the state "%s" in the neutral header pill, marked %s',
4502
+ async (text: string, indicator: string, response: () => ApiResponse) => {
4503
+ postMock.mockResolvedValue(response() as never);
4504
+
4505
+ renderPanel();
4506
+ await flush();
4507
+
4508
+ const badge: HTMLElement = screen.getByLabelText("Investigation status");
4509
+ expect(badge).toHaveTextContent(text);
4510
+ expect(badge).toHaveAttribute("data-indicator", indicator);
4511
+ // The pill itself never changes colour with the state.
4512
+ expect(badge).toHaveClass("bg-gray-50", "text-gray-700", "ring-gray-200");
4513
+ expect(badge.className).not.toMatch(
4514
+ /(^|\s)(bg|text|ring)-(green|indigo|red|amber|rose|emerald)-/,
4515
+ );
4516
+ // It sits in the card's header, not in the body with the report.
4517
+ expect(
4518
+ screen.getByRole("region", { name: "AI Investigation" }),
4519
+ ).not.toContainElement(badge);
4520
+ },
4521
+ );
4522
+
4523
+ test("reads summary, report, cluster access, working, then actions, in that order", async () => {
4524
+ postMock.mockResolvedValue(fullReportResponse() as never);
4525
+
4526
+ renderPanel();
4527
+ await flush();
4528
+
4529
+ const order: Array<HTMLElement> = [
4530
+ screen.getByRole("region", { name: "Investigation summary" }),
4531
+ screen.getByRole("region", { name: "Investigation report" }),
4532
+ screen.getByTestId("cluster-access-notice"),
4533
+ runDetails(),
4534
+ screen.getByTestId("investigation-actions"),
4535
+ ];
4536
+
4537
+ for (let index: number = 1; index < order.length; index++) {
4538
+ expect(
4539
+ order[index - 1]!.compareDocumentPosition(order[index]!) &
4540
+ Node.DOCUMENT_POSITION_FOLLOWING,
4541
+ ).toBeTruthy();
4542
+ }
4543
+
4544
+ // The report comes first: nothing about clusters stands above the answer.
4545
+ const region: HTMLElement = screen.getByRole("region", {
4546
+ name: "AI Investigation",
4547
+ });
4548
+ expect(region.firstElementChild).toBe(
4549
+ screen.getByRole("region", { name: "Investigation summary" }),
4550
+ );
4551
+ });
4552
+
4553
+ test("separates the report from its working and its actions with hairlines, not boxes", async () => {
4554
+ postMock.mockResolvedValue(fullReportResponse() as never);
4555
+
4556
+ renderPanel();
4557
+ await flush();
4558
+
4559
+ expect(runDetails()).toHaveClass("border-t", "border-gray-200", "pt-5");
4560
+ expect(classTokens(runDetails())).not.toContain("border");
4561
+ expect(runDetails().className).not.toMatch(/rounded|shadow|bg-/);
4562
+
4563
+ const actions: HTMLElement = screen.getByTestId("investigation-actions");
4564
+ expect(actions).toHaveClass("border-t", "border-gray-200", "divide-y");
4565
+ expect(classTokens(actions)).not.toContain("border");
4566
+ expect(actions.className).not.toMatch(/rounded|shadow|bg-/);
4567
+ });
4568
+
4569
+ test("gives every heading inside the card the same weight and size", async () => {
4570
+ postMock.mockResolvedValue(fullReportResponse() as never);
4571
+
4572
+ renderPanel();
4573
+ await flush();
4574
+
4575
+ const region: HTMLElement = screen.getByRole("region", {
4576
+ name: "AI Investigation",
4577
+ });
4578
+ const headings: Array<HTMLElement> = within(region).getAllByRole("heading");
4579
+ expect(
4580
+ headings.map((heading: HTMLElement): string => {
4581
+ return heading.textContent || "";
4582
+ }),
4583
+ ).toEqual([
4584
+ "Summary",
4585
+ "Most likely root cause",
4586
+ "Suggested next steps",
4587
+ "Evidence and activity",
4588
+ "Act on this investigation",
4589
+ VERDICT_QUESTION,
4590
+ ]);
4591
+
4592
+ for (const heading of headings) {
4593
+ expect(heading.tagName).toBe("H3");
4594
+ expect(heading).toHaveClass("text-sm", "font-semibold", "text-gray-900");
4595
+ expect(heading.className).not.toMatch(/uppercase|amber|indigo/);
4596
+ }
4597
+ });
4598
+
4599
+ test("asks for the verdict in plain words", async () => {
4600
+ postMock.mockResolvedValue(completedResponse() as never);
4601
+
4602
+ renderPanel();
4603
+ await flush();
4604
+
4605
+ expect(VERDICT_QUESTION).toBe("Was this analysis correct?");
4606
+ expect(
4607
+ screen.getByRole("heading", { level: 3, name: VERDICT_QUESTION }),
4608
+ ).toBeVisible();
4609
+ const answers: HTMLElement = screen.getByRole("group", {
4610
+ name: VERDICT_QUESTION,
4611
+ });
4612
+ expect(
4613
+ within(answers)
4614
+ .getAllByRole("button")
4615
+ .map((button: HTMLElement): string => {
4616
+ return button.textContent || "";
4617
+ }),
4618
+ ).toEqual(["Confirmed", "Rejected"]);
4619
+ });
4620
+
4621
+ test("describes only a queued or running investigation as live", async () => {
4622
+ postMock.mockResolvedValue(
4623
+ successfulResponse(
4624
+ investigationPayload({ status: AIRunStatus.Running }),
4625
+ ) as never,
4626
+ );
4627
+ const view: ReturnType<typeof render> = renderPanel();
4628
+ await flush();
4629
+
4630
+ expect(screen.getByTestId("card-description")).toHaveTextContent(
4631
+ "OneUptime AI's live root-cause investigation for this incident.",
4632
+ );
4633
+ view.unmount();
4634
+
4635
+ postMock.mockReset();
4636
+ postMock.mockResolvedValue(
4637
+ successfulResponse(
4638
+ investigationPayload({
4639
+ status: AIRunStatus.Error,
4640
+ errorMessage: "The provider timed out.",
4641
+ }),
4642
+ ) as never,
4643
+ );
4644
+ renderPanel();
4645
+ await flush();
4646
+
4647
+ // A run that stopped is not live any more.
4648
+ expect(screen.getByTestId("card-description")).toHaveTextContent(
4649
+ "OneUptime AI's root-cause investigation for this incident.",
4650
+ );
4651
+ expect(screen.getByTestId("card-description")).not.toHaveTextContent(
4652
+ "live",
4653
+ );
4654
+ });
4655
+
4656
+ test("tells a live run's story without a frame or a progress bar of its own", async () => {
4657
+ postMock.mockResolvedValue(
4658
+ successfulResponse(
4659
+ investigationPayload({
4660
+ status: AIRunStatus.Running,
4661
+ events: [activityEvent],
4662
+ }),
4663
+ ) as never,
4664
+ );
4665
+
4666
+ renderPanel();
4667
+ await flush();
4668
+
4669
+ const live: HTMLElement = screen.getByRole("region", {
4670
+ name: "Live investigation",
4671
+ });
4672
+ expect(live.className).toBe("space-y-4");
4673
+ expect(
4674
+ within(live).getByRole("heading", {
4675
+ level: 3,
4676
+ name: "OneUptime AI is investigating",
4677
+ }),
4678
+ ).toBeVisible();
4679
+ expect(live).toContainElement(screen.getByTestId("investigation-activity"));
4680
+ // The header's pulsing badge says the run is moving; no hairline bar.
4681
+ expect(
4682
+ screen
4683
+ .getByRole("region", { name: "AI Investigation" })
4684
+ .querySelector(".h-0\\.5"),
4685
+ ).toBeNull();
4686
+ });
4687
+
4688
+ test("states a failure as a line with a red mark, not a red box", async () => {
4689
+ postMock.mockResolvedValue(
4690
+ successfulResponse(
4691
+ investigationPayload({
4692
+ status: AIRunStatus.Error,
4693
+ errorMessage: "The model provider timed out.",
4694
+ events: [activityEvent],
4695
+ }),
4696
+ ) as never,
4697
+ );
4698
+
4699
+ renderPanel();
4700
+ await flush();
4701
+
4702
+ const failure: HTMLElement = screen.getByTestId("investigation-error");
4703
+ expect(failure).toHaveTextContent(
4704
+ "The investigation stopped before it could report.",
4705
+ );
4706
+ expect(failure).toHaveTextContent("The model provider timed out.");
4707
+ expect(failure.className).toBe("flex items-start gap-3");
4708
+ expect(failure.querySelector("svg")?.getAttribute("class")).toContain(
4709
+ "text-red-600",
4710
+ );
4711
+ for (const paragraph of Array.from(failure.querySelectorAll("p"))) {
4712
+ expect(paragraph.className).not.toMatch(/red/);
4713
+ }
4714
+ });
4715
+
4716
+ test.each([
4717
+ [
4718
+ "Preparing the final report",
4719
+ (): ApiResponse => {
4720
+ return completedResponse({
4721
+ analysisMarkdown: null,
4722
+ isAnalysisPending: true,
4723
+ });
4724
+ },
4725
+ ],
4726
+ [
4727
+ "No investigation report was published.",
4728
+ (): ApiResponse => {
4729
+ return completedResponse({
4730
+ analysisMarkdown: null,
4731
+ isAnalysisPending: false,
4732
+ });
4733
+ },
4734
+ ],
4735
+ ])(
4736
+ 'stands "%s" in for the report as a plain line',
4737
+ async (title: string, response: () => ApiResponse) => {
4738
+ postMock.mockResolvedValue(response() as never);
4739
+
4740
+ renderPanel();
4741
+ await flush();
4742
+
4743
+ const line: HTMLElement = screen
4744
+ .getByText(title)
4745
+ .closest("div")!.parentElement!;
4746
+ expect(line.className).toBe("flex items-start gap-3");
4747
+ expect(screen.getByText(title)).toHaveClass(
4748
+ "text-sm",
4749
+ "font-medium",
4750
+ "text-gray-900",
4751
+ );
4752
+ expect(panelsInsideTheCard()).toEqual([]);
4753
+ },
4754
+ );
4755
+
4756
+ test("renders no block inside a paragraph in any state", async () => {
4757
+ const consoleError: ReturnType<typeof jest.spyOn> = jest.spyOn(
4758
+ console,
4759
+ "error",
4760
+ );
4761
+
4762
+ try {
4763
+ for (const [, response] of STATES) {
4764
+ postMock.mockReset();
4765
+ postMock.mockResolvedValue(response() as never);
4766
+ const view: ReturnType<typeof render> = renderPanel();
4767
+ await flush();
4768
+
4769
+ expect(view.container.querySelectorAll("p div")).toHaveLength(0);
4770
+ view.unmount();
4771
+ }
4772
+
4773
+ expect(
4774
+ consoleError.mock.calls.some((args: Array<unknown>): boolean => {
4775
+ return args.some((value: unknown): boolean => {
4776
+ return (
4777
+ typeof value === "string" && value.includes("validateDOMNesting")
4778
+ );
4779
+ });
4780
+ }),
4781
+ ).toBe(false);
4782
+ } finally {
4783
+ consoleError.mockRestore();
4784
+ }
4785
+ });
4786
+ });
4787
+
4788
+ /*
4789
+ * The conversation with OneUptime AI is supplied by the page and placed by
4790
+ * the panel: at the bottom of the investigation card while there is a run,
4791
+ * or as its own card under the "not investigated" explanation — the box is
4792
+ * two-way whether or not an automatic investigation ran.
4793
+ */
4794
+ describe("InvestigationPanel conversation slot", () => {
4795
+ const renderConversationMock: MockFunction = getJestMockFunction();
4796
+
4797
+ function renderWithConversation(): ReturnType<typeof render> {
4798
+ renderConversationMock.mockImplementation(((
4799
+ variant: "embedded" | "card",
4800
+ ): React.ReactElement => {
4801
+ return React.createElement(
4802
+ "div",
4803
+ { "data-testid": `conversation-${variant}` },
4804
+ "Ask OneUptime AI",
4805
+ );
4806
+ }) as never);
4807
+
4808
+ return render(
4809
+ <InvestigationPanel
4810
+ subjectType="incident"
4811
+ subjectId={INCIDENT_ID}
4812
+ renderConversation={(variant: "embedded" | "card") => {
4813
+ return renderConversationMock(variant) as React.ReactElement;
4814
+ }}
4815
+ />,
4816
+ );
4817
+ }
4818
+
4819
+ afterEach(() => {
4820
+ renderConversationMock.mockReset();
4821
+ });
4822
+
4823
+ test("closes a completed investigation card with the embedded conversation", async () => {
4824
+ postMock.mockResolvedValue(completedResponse() as never);
4825
+
4826
+ renderWithConversation();
4827
+ await flush();
4828
+
4829
+ const embedded: HTMLElement = screen.getByTestId("conversation-embedded");
4830
+ const region: HTMLElement = screen.getByRole("region", {
4831
+ name: "AI Investigation",
4832
+ });
4833
+
4834
+ expect(region).toContainElement(embedded);
4835
+ expect(screen.queryByTestId("conversation-card")).toBeNull();
4836
+
4837
+ // It is the last thing in the card, after the report and its actions.
4838
+ expect(region.lastElementChild).toBe(embedded);
4839
+ });
4840
+
4841
+ test("is embedded while the investigation is still running", async () => {
4842
+ postMock.mockResolvedValue(
4843
+ successfulResponse(
4844
+ investigationPayload({
4845
+ status: AIRunStatus.Running,
4846
+ events: [activityEvent],
4847
+ }),
4848
+ ) as never,
4849
+ );
4850
+
4851
+ renderWithConversation();
4852
+ await flush();
4853
+
4854
+ expect(screen.getByTestId("conversation-embedded")).toBeInTheDocument();
4855
+ expect(renderConversationMock).not.toHaveBeenCalledWith("card");
4856
+ });
4857
+
4858
+ test("stands as its own card when no investigation ran", async () => {
4859
+ postMock.mockResolvedValue(noInvestigationResponse() as never);
4860
+
4861
+ renderWithConversation();
4862
+ await flush();
4863
+
4864
+ expect(
4865
+ screen.getByText("No investigation has been recorded"),
4866
+ ).toBeVisible();
4867
+
4868
+ const card: HTMLElement = screen.getByTestId("conversation-card");
4869
+ expect(card).toBeInTheDocument();
4870
+ expect(screen.queryByTestId("conversation-embedded")).toBeNull();
4871
+ // Its own card, beside the explanation rather than inside it.
4872
+ expect(
4873
+ screen.getByRole("region", { name: "AI Investigation" }),
4874
+ ).not.toContainElement(card);
4875
+ });
4876
+
4877
+ test("waits for the investigation status before showing it", async () => {
4878
+ const deferred: Deferred<ApiResponse> = createDeferred<ApiResponse>();
4879
+ postMock.mockReturnValue(deferred.promise as never);
4880
+
4881
+ renderWithConversation();
4882
+ await flush();
4883
+
4884
+ expect(screen.getByText("Checking investigation status…")).toBeVisible();
4885
+ expect(screen.queryByTestId("conversation-card")).toBeNull();
4886
+ expect(screen.queryByTestId("conversation-embedded")).toBeNull();
4887
+
4888
+ await resolveDeferred(deferred, completedResponse());
4889
+
4890
+ expect(screen.getByTestId("conversation-embedded")).toBeInTheDocument();
4891
+ });
4892
+
4893
+ test("renders nothing extra when the page supplies no conversation", async () => {
4894
+ postMock.mockResolvedValue(noInvestigationResponse() as never);
4895
+
4896
+ renderPanel();
4897
+ await flush();
4898
+
4899
+ expect(screen.queryByTestId("conversation-card")).toBeNull();
4900
+ expect(screen.getAllByTestId("card")).toHaveLength(1);
4901
+ });
4902
+ });