@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
@@ -0,0 +1,460 @@
1
+ /*
2
+ * Clipboard contents the MarkdownEditor's paste handler has to read, as real
3
+ * applications put them on the clipboard. Used by MarkdownPaste.test.ts and
4
+ * MarkdownEditor.test.tsx.
5
+ */
6
+
7
+ /*
8
+ * text/html that Outlook put on the clipboard for the body of issue #4114
9
+ * ("Improved Copy and Paste Handling") -- the report itself was pasted from
10
+ * it, nested lists and all. The <body> is verbatim. The <head> is shortened:
11
+ * Word's latent-style XML (one conditional comment of ~600 lines) is cut to
12
+ * its first block, and the <link>s to files in the copier's temp folder are
13
+ * left out.
14
+ */
15
+ export const WORD_OUTLOOK_ISSUE_4114_HTML: string = `<html xmlns:v="urn:schemas-microsoft-com:vml"
16
+ xmlns:o="urn:schemas-microsoft-com:office:office"
17
+ xmlns:w="urn:schemas-microsoft-com:office:word"
18
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
19
+ xmlns="http://www.w3.org/TR/REC-html40">
20
+
21
+ <head>
22
+
23
+ <meta name=ProgId content=Word.Document>
24
+ <meta name=Generator content="Microsoft Word 15">
25
+ <meta name=Originator content="Microsoft Word 15">
26
+ <!--[if !mso]>
27
+ <style>
28
+ v\\:* {behavior:url(#default#VML);}
29
+ o\\:* {behavior:url(#default#VML);}
30
+ w\\:* {behavior:url(#default#VML);}
31
+ .shape {behavior:url(#default#VML);}
32
+ </style>
33
+ <![endif]-->
34
+ <!--[if gte mso 9]><xml>
35
+ <o:OfficeDocumentSettings>
36
+ <o:AllowPNG/>
37
+ </o:OfficeDocumentSettings>
38
+ </xml><![endif]-->
39
+
40
+ </head>
41
+
42
+ <body lang=EN-CA style='tab-interval:36.0pt;word-wrap:break-word'>
43
+ <!--StartFragment-->
44
+
45
+ <p class=MsoNormal><b>Is your feature request related to a problem? Please
46
+ describe.<o:p></o:p></b></p>
47
+
48
+ <p class=MsoNormal>With the new custom fields available on incident requests,
49
+ we would like to further enhance how these fields are used with templates.<o:p></o:p></p>
50
+
51
+ <p class=MsoNormal>Currently, not every incident requires the same information.
52
+ Different incident/message templates may require different fields, and some
53
+ fields may need to be mandatory for one template but optional or completely
54
+ hidden for another.<o:p></o:p></p>
55
+
56
+ <p class=MsoNormal>Ideally, the template should determine exactly what
57
+ information the incident submitter needs to provide. The user should not have
58
+ to look through a large list of available custom fields and determine which
59
+ ones are relevant to the particular incident.<o:p></o:p></p>
60
+
61
+ <p class=MsoNormal>For example, one template may require:<o:p></o:p></p>
62
+
63
+ <ul style='margin-top:0cm' type=disc>
64
+ <li class=MsoNormal style='mso-list:l5 level1 lfo1;tab-stops:list 36.0pt'>Status<o:p></o:p></li>
65
+ <li class=MsoNormal style='mso-list:l5 level1 lfo1;tab-stops:list 36.0pt'>Severity<o:p></o:p></li>
66
+ <li class=MsoNormal style='mso-list:l5 level1 lfo1;tab-stops:list 36.0pt'>Affected
67
+ Location<o:p></o:p></li>
68
+ <li class=MsoNormal style='mso-list:l5 level1 lfo1;tab-stops:list 36.0pt'>Start
69
+ Time<o:p></o:p></li>
70
+ <li class=MsoNormal style='mso-list:l5 level1 lfo1;tab-stops:list 36.0pt'>Impact<o:p></o:p></li>
71
+ </ul>
72
+
73
+ <p class=MsoNormal>while another template may only require:<o:p></o:p></p>
74
+
75
+ <ul style='margin-top:0cm' type=disc>
76
+ <li class=MsoNormal style='mso-list:l1 level1 lfo2;tab-stops:list 36.0pt'>Status<o:p></o:p></li>
77
+ <li class=MsoNormal style='mso-list:l1 level1 lfo2;tab-stops:list 36.0pt'>Affected
78
+ Location<o:p></o:p></li>
79
+ <li class=MsoNormal style='mso-list:l1 level1 lfo2;tab-stops:list 36.0pt'>Expected
80
+ Resolution<o:p></o:p></li>
81
+ </ul>
82
+
83
+ <p class=MsoNormal>The template should be able to tailor the form accordingly.<o:p></o:p></p>
84
+
85
+ <p class=MsoNormal><b>Describe the solution you'd like<o:p></o:p></b></p>
86
+
87
+ <p class=MsoNormal><b>Template-Specific Custom Fields<o:p></o:p></b></p>
88
+
89
+ <p class=MsoNormal>When creating or editing a message template, administrators
90
+ should be able to configure each available custom field as:<o:p></o:p></p>
91
+
92
+ <ul style='margin-top:0cm' type=disc>
93
+ <li class=MsoNormal style='mso-list:l6 level1 lfo3;tab-stops:list 36.0pt'><b>Shown
94
+ / Hidden</b><o:p></o:p></li>
95
+ <li class=MsoNormal style='mso-list:l6 level1 lfo3;tab-stops:list 36.0pt'><b>Required
96
+ / Optional</b><o:p></o:p></li>
97
+ </ul>
98
+
99
+ <p class=MsoNormal>This configuration would be specific to the template.<o:p></o:p></p>
100
+
101
+ <p class=MsoNormal>For example:<o:p></o:p></p>
102
+
103
+
104
+ Custom Field | Template A | Template B
105
+ -- | -- | --
106
+ Status | Required | Required
107
+ Severity | Required | Hidden
108
+ Affected Location | Required | Required
109
+ Start Time | Required | Optional
110
+ Expected Resolution | Optional | Required
111
+ Additional Information | Optional | Hidden
112
+
113
+
114
+
115
+ <p class=MsoNormal>This would allow administrators to build templates that are
116
+ tailored to specific types of incidents or communications.<o:p></o:p></p>
117
+
118
+ <p class=MsoNormal>The goal is that when a user selects a template, they are
119
+ presented with <b>only the fields relevant to that template</b>, with required
120
+ fields clearly identified and enforced.<o:p></o:p></p>
121
+
122
+ <p class=MsoNormal>This would make the process more intuitive and reduce the
123
+ possibility of users submitting incomplete or unnecessary information.<o:p></o:p></p>
124
+
125
+ <div class=MsoNormal align=center style='text-align:center'>
126
+
127
+ <hr size=2 width="100%" align=center>
128
+
129
+ </div>
130
+
131
+ <p class=MsoNormal><b>Markdown Editor Enhancements<o:p></o:p></b></p>
132
+
133
+ <p class=MsoNormal>If a WYSIWYG editor is not possible, some additional
134
+ improvements to the existing Markdown editor would be very helpful.<o:p></o:p></p>
135
+
136
+ <p class=MsoNormal><b>Indent / Nested List Button<o:p></o:p></b></p>
137
+
138
+ <p class=MsoNormal>The Markdown editor supports nested bullet points, but there
139
+ is currently no visual control for creating them.<o:p></o:p></p>
140
+
141
+ <p class=MsoNormal>Adding an <b>Indent</b> button would allow users to indent
142
+ selected text or create a nested bullet point.<o:p></o:p></p>
143
+
144
+ <p class=MsoNormal>For example:<o:p></o:p></p>
145
+
146
+ <ul style='margin-top:0cm' type=disc>
147
+ <li class=MsoNormal style='mso-list:l2 level1 lfo4;tab-stops:list 36.0pt'>Main
148
+ item<o:p></o:p></li>
149
+ <ul style='margin-top:0cm' type=circle>
150
+ <li class=MsoNormal style='mso-list:l2 level2 lfo4;tab-stops:list 72.0pt'>Nested
151
+ item<o:p></o:p></li>
152
+ <ul style='margin-top:0cm' type=square>
153
+ <li class=MsoNormal style='mso-list:l2 level3 lfo4;tab-stops:list 108.0pt'>Further
154
+ nested item<o:p></o:p></li>
155
+ </ul>
156
+ </ul>
157
+ </ul>
158
+
159
+ <p class=MsoNormal>The underlying Markdown already supports this; the
160
+ enhancement would simply provide an easier visual/editor control for creating
161
+ them.<o:p></o:p></p>
162
+
163
+ <p class=MsoNormal><b>Improved Copy and Paste Handling<o:p></o:p></b></p>
164
+
165
+ <p class=MsoNormal>It would also be helpful for the Markdown editor to better
166
+ preserve formatting when copying and pasting content.<o:p></o:p></p>
167
+
168
+ <p class=MsoNormal>Multiple users may use the same template, but the actual
169
+ content of each incident can be similar to a previous submission with only
170
+ minor changes.<o:p></o:p></p>
171
+
172
+ <p class=MsoNormal>For example, a previous incident might contain:<o:p></o:p></p>
173
+
174
+ <ul style='margin-top:0cm' type=disc>
175
+ <li class=MsoNormal style='mso-list:l3 level1 lfo5;tab-stops:list 36.0pt'>Service
176
+ is currently unavailable<o:p></o:p></li>
177
+ <ul style='margin-top:0cm' type=circle>
178
+ <li class=MsoNormal style='mso-list:l3 level2 lfo5;tab-stops:list 72.0pt'>Users
179
+ are unable to log in<o:p></o:p></li>
180
+ <li class=MsoNormal style='mso-list:l3 level2 lfo5;tab-stops:list 72.0pt'>Users
181
+ are receiving an error message<o:p></o:p></li>
182
+ </ul>
183
+ <li class=MsoNormal style='mso-list:l3 level1 lfo5;tab-stops:list 36.0pt'>Investigation
184
+ is in progress<o:p></o:p></li>
185
+ <ul style='margin-top:0cm' type=circle>
186
+ <li class=MsoNormal style='mso-list:l3 level2 lfo5;tab-stops:list 72.0pt'>Technical
187
+ team has been notified<o:p></o:p></li>
188
+ <li class=MsoNormal style='mso-list:l3 level2 lfo5;tab-stops:list 72.0pt'>Vendor
189
+ has been contacted<o:p></o:p></li>
190
+ </ul>
191
+ </ul>
192
+
193
+ <p class=MsoNormal>A user may want to copy this content into a new incident and
194
+ simply change a few details.<o:p></o:p></p>
195
+
196
+ <p class=MsoNormal>Currently, if the formatting is not preserved properly, the
197
+ user may have to manually recreate the formatting. (Currently a pasted bullet
198
+ may show the dot visually, but markdown does not apply the bullet formatting
199
+ and nested lists become flat. Attempting to fix this with visual controls
200
+ created double bullet icons.) <br>
201
+ For example, they may have to:<o:p></o:p></p>
202
+
203
+ <ul style='margin-top:0cm' type=disc>
204
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'>Recreate
205
+ the bullet points<o:p></o:p></li>
206
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'>Re-indent
207
+ nested bullet points<o:p></o:p></li>
208
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'>Reapply
209
+ the correct nesting to each item<o:p></o:p></li>
210
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'>Recreate
211
+ or re-link web links<o:p></o:p></li>
212
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list 36.0pt'>Reapply
213
+ other supported Markdown formatting<o:p></o:p></li>
214
+ </ul>
215
+
216
+ <p class=MsoNormal>This becomes particularly cumbersome when copying a larger
217
+ formatted message.<o:p></o:p></p>
218
+
219
+ <p class=MsoNormal>Ideally, copying and pasting content from a previous
220
+ incident or message would preserve the existing Markdown formatting, including:<o:p></o:p></p>
221
+
222
+ <ul style='margin-top:0cm' type=disc>
223
+ <li class=MsoNormal style='mso-list:l0 level1 lfo7;tab-stops:list 36.0pt'>Bullet-point
224
+ lists<o:p></o:p></li>
225
+ <li class=MsoNormal style='mso-list:l0 level1 lfo7;tab-stops:list 36.0pt'>Nested
226
+ bullet points<o:p></o:p></li>
227
+ <li class=MsoNormal style='mso-list:l0 level1 lfo7;tab-stops:list 36.0pt'>Numbered
228
+ lists<o:p></o:p></li>
229
+ <li class=MsoNormal style='mso-list:l0 level1 lfo7;tab-stops:list 36.0pt'>Indentation<o:p></o:p></li>
230
+ <li class=MsoNormal style='mso-list:l0 level1 lfo7;tab-stops:list 36.0pt'>Links
231
+ and URLs<o:p></o:p></li>
232
+ <li class=MsoNormal style='mso-list:l0 level1 lfo7;tab-stops:list 36.0pt'>Basic
233
+ text formatting<o:p></o:p></li>
234
+ <li class=MsoNormal style='mso-list:l0 level1 lfo7;tab-stops:list 36.0pt'>Other
235
+ supported Markdown formatting<o:p></o:p></li>
236
+ </ul>
237
+
238
+ <p class=MsoNormal>For example, if a user copies a previously formatted list
239
+ containing nested bullets and links, the pasted content should retain that
240
+ structure rather than requiring the user to manually style, indent, and relink
241
+ each item again.<o:p></o:p></p>
242
+
243
+ <p class=MsoNormal>This would be especially useful when a new incident is very
244
+ similar to a previous incident and only requires a few changes to the existing
245
+ message.<o:p></o:p></p>
246
+
247
+ <p class=MsoNormal><b>Additional Context<o:p></o:p></b></p>
248
+
249
+ <p class=MsoNormal>The overall goal is to make templates more <b>purpose-built
250
+ and user-friendly</b>.<o:p></o:p></p>
251
+
252
+ <p class=MsoNormal>Ideally, an administrator creates a template and determines:<o:p></o:p></p>
253
+
254
+ <p class=MsoNormal><b>Which fields are displayed → Which fields are required →
255
+ What the message looks like</b><o:p></o:p></p>
256
+
257
+ <p class=MsoNormal>Then, when a user selects that template, they only need to
258
+ provide the information relevant to that specific type of incident.<o:p></o:p></p>
259
+
260
+ <p class=MsoNormal>The Markdown improvements would further reduce the amount of
261
+ repetitive formatting required when users create similar incident messages,
262
+ while the template-specific fields would ensure that users are only asked for
263
+ information relevant to that particular type of incident.<o:p></o:p></p>
264
+
265
+ <p class=MsoNormal><o:p>&nbsp;</o:p></p>
266
+
267
+ <!--EndFragment-->
268
+ </body>
269
+
270
+ </html>
271
+ `;
272
+
273
+ /*
274
+ * What Chromium puts on the clipboard for a MarkdownViewer rendering of
275
+ * VIEWER_COPY_SOURCE_MARKDOWN (below), selected whole and copied with
276
+ * Ctrl+C: captured from a paste event in Chromium 1243 (headless shell),
277
+ * with the real MarkdownViewer bundled by the repo's esbuild config. Chromium
278
+ * writes every top-level element's computed style inline; the Tailwind
279
+ * "--tw-*" custom properties in those styles are removed here for size, and
280
+ * everything else is verbatim -- including the node="[object Object]"
281
+ * attributes the viewer renders today.
282
+ */
283
+ export const CHROME_VIEWER_COPY_HTML: string = `<p class="text-sm mt-2 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin: 0.5rem 0px 0.25rem; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81); font-family: ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">Update at <time datetime="2026-04-20T11:21:00.000Z" title="2026-04-20T11:21:00.000Z (UTC)" class="text-xs px-1.5 py-0.5 bg-gray-100 border border-gray-200 rounded text-gray-800 font-mono whitespace-nowrap" style="box-sizing: border-box; border-width: 1px; border-style: solid; border-color: rgb(229, 231, 235); white-space: nowrap; border-radius: 0.25rem; background-color: rgb(243, 244, 246); padding: 0.125rem 0.375rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 0.75rem; line-height: 1rem; color: rgb(31, 41, 55);">Apr 20 2026, 11:21:00 AM GMT</time>:</p><ul class="list-disc pl-6 mt-0 mb-1" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); list-style: disc; margin: 0px 0px 0.25rem; padding: 0px 0px 0px 1.5rem; color: rgb(0, 0, 0); font-family: ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin-bottom: 0.25rem; margin-top: 0.25rem; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);">Service is currently unavailable<ul class="list-[circle] pl-6 mt-0 mb-1" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); list-style: circle; margin: 0px 0px 0.25rem; padding: 0px 0px 0px 1.5rem;"><li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin-bottom: 0.25rem; margin-top: 0.25rem; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);">Users are <strong class="text-sm font-semibold text-gray-900" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 600; font-size: 0.875rem; line-height: 1.25rem; color: rgb(17, 24, 39);">unable</strong> to log in<ul class="list-[square] pl-6 mt-0 mb-1" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); list-style: square; margin: 0px 0px 0.25rem; padding: 0px 0px 0px 1.5rem;"><li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin-bottom: 0.25rem; margin-top: 0.25rem; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);">See the <a class="underline text-blue-600 hover:text-blue-800 font-medium transition-colors" href="https://status.example.com/incidents?id=1" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(37, 99, 235); text-decoration-line: underline; text-decoration-thickness: inherit; text-decoration-style: inherit; text-decoration-color: inherit; font-weight: 500; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, -webkit-text-decoration-color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;">status page</a></li></ul></li></ul></li><li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin-bottom: 0.25rem; margin-top: 0.25rem; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);">Investigation is in progress</li></ul><ol class="list-decimal pl-6 mt-0 mb-1" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); list-style: decimal; margin: 0px 0px 0.25rem; padding: 0px 0px 0px 1.5rem; color: rgb(0, 0, 0); font-family: ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin-bottom: 0.25rem; margin-top: 0.25rem; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);">First step</li><li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin-bottom: 0.25rem; margin-top: 0.25rem; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);">Second step</li></ol><div class="relative rounded-lg mt-3 mb-3 overflow-hidden border border-gray-200 shadow-sm" data-markdown-code-block="true" data-language="typescript" style="box-sizing: border-box; border-width: 1px; border-style: solid; border-color: rgb(229, 231, 235); position: relative; margin-bottom: 0.75rem; margin-top: 0.75rem; overflow: hidden; border-radius: 0.5rem; box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px; color: rgb(0, 0, 0); font-family: ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><div class="flex items-center justify-between px-3 py-1.5 bg-gray-800 border-b border-gray-700" data-markdown-ignore="true" style="box-sizing: border-box; border-width: 0px 0px 1px; border-style: solid; border-color: rgb(55, 65, 81); display: flex; align-items: center; justify-content: space-between; background-color: rgb(31, 41, 55); padding: 0.375rem 0.75rem;"><button class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium transition-all duration-150 border-none cursor-pointer text-gray-400 hover:text-gray-200 hover:bg-white/10" aria-label="Copy code" type="button" style="box-sizing: border-box; border-width: 0px; border-style: none; border-color: rgb(229, 231, 235); font-family: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 11px; font-weight: 500; line-height: inherit; letter-spacing: inherit; color: rgb(156, 163, 175); margin: 0px; padding: 0.125rem 0.5rem; text-transform: none; appearance: button; background-color: transparent; background-image: none; cursor: pointer; display: inline-flex; align-items: center; gap: 0.375rem; border-radius: 0.25rem; transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms;"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg>Copy</button></div><div node="[object Object]" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="box-sizing: border-box; border-width: 0px !important; border-style: solid; border-color: rgb(229, 231, 235); margin: 0.5em 0px; border-radius: 0px !important; background: rgb(30, 30, 30); padding: 1em; font-size: 13px; line-height: 1.5; color: rgb(212, 212, 212); text-shadow: none; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; tab-size: 4; hyphens: none; overflow: auto;"><code class="font-mono" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 1em; white-space: pre;"><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(86, 156, 214);">const</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "> x </span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(212, 212, 212);">=</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "> </span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(181, 206, 168);">1</span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(212, 212, 212);">;</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); ">
284
+ </span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "></span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(86, 156, 214);">const</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "> y </span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(212, 212, 212);">=</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "> </span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(181, 206, 168);">2</span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(212, 212, 212);">;</span></code></div></div><blockquote class="rounded-lg border border-amber-200 bg-amber-50/50 my-4 not-italic overflow-hidden" node="[object Object]" style="box-sizing: border-box; border-width: 1px; border-style: solid; border-color: rgb(253, 230, 138); margin: 1rem 0px; overflow: hidden; border-radius: 0.5rem; background-color: rgba(255, 251, 235, 0.5); font-style: normal; color: rgb(0, 0, 0); font-family: ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: medium; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><div class="flex items-start gap-3 px-4 py-3" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); display: flex; align-items: flex-start; gap: 0.75rem; padding: 0.75rem 1rem;"><svg class="h-5 w-5 flex-shrink-0 text-amber-500 mt-0.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z"></path></svg><div class="text-sm text-gray-700 leading-relaxed [&amp;&gt;p]:mt-0 [&amp;&gt;p]:mb-0 [&amp;&gt;p&gt;strong:first-child]:text-amber-700 [&amp;&gt;p&gt;strong:first-child]:mr-1" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);"><p class="text-sm mt-2 mb-1 text-gray-700 leading-relaxed" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); margin: 0px; font-size: 0.875rem; line-height: 1.625; color: rgb(55, 65, 81);">Quoted <em style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); ">text</em></p></div></div></blockquote><ul class="contains-task-list" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><li class="task-list-item" node="[object Object]" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "><input type="checkbox" disabled="" aria-label="done item" checked="" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-family: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 16px; font-weight: inherit; line-height: inherit; letter-spacing: inherit; color: inherit; margin: 0px; padding: 0px; cursor: default;"> done item</li></ul>`;
285
+
286
+ export const CHROME_VIEWER_COPY_TEXT: string =
287
+ "Update at Apr 20 2026, 11:21:00 AM GMT:\n\nService is currently unavailable\nUsers are unable to log in\nSee the status page\nInvestigation is in progress\nFirst step\nSecond step\nCopy\nconst x = 1;\nconst y = 2;\nQuoted text\n\n done item";
288
+
289
+ /*
290
+ * The same copy in Firefox 1543 (Playwright build), verbatim. Firefox keeps
291
+ * the source's line breaks and indentation between elements and writes no
292
+ * computed styles; its plain text indents nested items by four spaces but
293
+ * drops their bullets.
294
+ */
295
+ export const FIREFOX_VIEWER_COPY_HTML: string = `<div class="max-w-none"><p class="text-sm mt-2 mb-1 text-gray-700 leading-relaxed" node="[object Object]">Update at <time datetime="2026-04-20T11:21:00.000Z" title="2026-04-20T11:21:00.000Z (UTC)" class="text-xs px-1.5 py-0.5 bg-gray-100 border border-gray-200 rounded text-gray-800 font-mono whitespace-nowrap">Apr 20 2026, 11:21:00 AM GMT</time>:</p>
296
+ <ul class="list-disc pl-6 mt-0 mb-1" node="[object Object]">
297
+ <li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]">Service is currently unavailable
298
+ <ul class="list-[circle] pl-6 mt-0 mb-1" node="[object Object]">
299
+ <li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]">Users are <strong class="text-sm font-semibold text-gray-900" node="[object Object]">unable</strong> to log in
300
+ <ul class="list-[square] pl-6 mt-0 mb-1" node="[object Object]">
301
+ <li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]">See the <a class="underline text-blue-600 hover:text-blue-800 font-medium transition-colors" href="https://status.example.com/incidents?id=1" node="[object Object]">status page</a></li>
302
+ </ul>
303
+ </li>
304
+ </ul>
305
+ </li>
306
+ <li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]">Investigation is in progress</li>
307
+ </ul>
308
+ <ol class="list-decimal pl-6 mt-0 mb-1" node="[object Object]">
309
+ <li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]">First step</li>
310
+ <li class="text-sm mt-1 mb-1 text-gray-700 leading-relaxed" node="[object Object]">Second step</li>
311
+ </ol>
312
+ <div class="relative rounded-lg mt-3 mb-3 overflow-hidden border border-gray-200 shadow-sm" data-markdown-code-block="true" data-language="typescript"><div class="flex items-center justify-between px-3 py-1.5 bg-gray-800 border-b border-gray-700" data-markdown-ignore="true"><button class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium transition-all duration-150 border-none cursor-pointer text-gray-400 hover:text-gray-200 hover:bg-white/10" aria-label="Copy code" type="button"><svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"></svg>Copy</button></div><div node="[object Object]" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="color: rgb(212, 212, 212); font-size: 13px; text-shadow: none; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none; padding: 1em; margin: 0.5em 0px; overflow: auto; background: rgb(30, 30, 30);"><code class="font-mono" style="white-space: pre;"><span class="token" style="color: rgb(86, 156, 214);">const</span><span> x </span><span class="token" style="color: rgb(212, 212, 212);">=</span><span> </span><span class="token" style="color: rgb(181, 206, 168);">1</span><span class="token" style="color: rgb(212, 212, 212);">;</span><span>
313
+ </span><span></span><span class="token" style="color: rgb(86, 156, 214);">const</span><span> y </span><span class="token" style="color: rgb(212, 212, 212);">=</span><span> </span><span class="token" style="color: rgb(181, 206, 168);">2</span><span class="token" style="color: rgb(212, 212, 212);">;</span></code></div></div>
314
+ <blockquote class="rounded-lg border border-amber-200 bg-amber-50/50 my-4 not-italic overflow-hidden" node="[object Object]"><div class="flex items-start gap-3 px-4 py-3"><svg class="h-5 w-5 flex-shrink-0 text-amber-500 mt-0.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"></svg><div class="text-sm text-gray-700 leading-relaxed [&amp;&gt;p]:mt-0 [&amp;&gt;p]:mb-0 [&amp;&gt;p&gt;strong:first-child]:text-amber-700 [&amp;&gt;p&gt;strong:first-child]:mr-1">
315
+ <p class="text-sm mt-2 mb-1 text-gray-700 leading-relaxed" node="[object Object]">Quoted <em>text</em></p>
316
+ </div></div></blockquote>
317
+ <ul class="contains-task-list" node="[object Object]">
318
+ <li class="task-list-item" node="[object Object]"><input type="checkbox" disabled="disabled" aria-label="done item" checked="checked"> done item</li>
319
+ </ul></div>`;
320
+
321
+ export const FIREFOX_VIEWER_COPY_TEXT: string =
322
+ "Update at Apr 20 2026, 11:21:00 AM GMT:\n\n Service is currently unavailable\n Users are unable to log in\n See the status page\n Investigation is in progress\n\n First step\n Second step\n\nCopy\nconst x = 1;\nconst y = 2;\n\n Quoted text\n\n done item\n";
323
+
324
+ // The markdown the viewer rendered for the two copies above.
325
+ export const VIEWER_COPY_SOURCE_MARKDOWN: string = [
326
+ "Update at `2026-04-20T11:21:00.000Z`:",
327
+ "",
328
+ "- Service is currently unavailable",
329
+ " - Users are **unable** to log in",
330
+ " - See the [status page](https://status.example.com/incidents?id=1)",
331
+ "- Investigation is in progress",
332
+ "",
333
+ "1. First step",
334
+ "2. Second step",
335
+ "",
336
+ "```typescript",
337
+ "const x = 1;",
338
+ "const y = 2;",
339
+ "```",
340
+ "",
341
+ "> Quoted *text*",
342
+ "",
343
+ "- [x] done item",
344
+ ].join("\n");
345
+
346
+ // The inline styles Google Docs writes on every list item and text run.
347
+ const DOCS_ITEM_STYLE: string =
348
+ "list-style-type:disc;font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre;";
349
+ const docsRun: (overrides: string) => string = (overrides: string): string => {
350
+ return `font-size:11pt;font-family:Arial,sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;${overrides}white-space:pre;white-space:pre-wrap;`;
351
+ };
352
+ const DOCS_PARAGRAPH: string =
353
+ '<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;" role="presentation">';
354
+
355
+ /*
356
+ * A bulleted list as Google Docs puts it on the clipboard, modelled on a
357
+ * live copy from Docs in Chromium 153 (September 2026); the text is made
358
+ * up. The whole copy sits in a docs-internal-guid <b>; every <li> ends its
359
+ * style with "white-space:pre;", each item's text is in a <p>, formatting
360
+ * is written as span styles, a nested list sits straight inside its parent
361
+ * <ul>, and a tab is Chromium's <span class="Apple-tab-span">.
362
+ */
363
+ export const GOOGLE_DOCS_LIST_COPY_HTML: string = [
364
+ '<meta charset="utf-8"><b style="font-weight:normal;" id="docs-internal-guid-6a0c3f1e-7fff-4d21-9c3b-0e5d2a8b7c41">',
365
+ '<p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;">',
366
+ `<span style="${docsRun("font-weight:700;")}">Owner:</span>`,
367
+ `<span style="${docsRun("")}"><span class="Apple-tab-span" style="white-space:pre;">\t</span>Payments on-call</span></p>`,
368
+ '<ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;">',
369
+ `<li dir="ltr" style="${DOCS_ITEM_STYLE}" aria-level="1">${DOCS_PARAGRAPH}`,
370
+ `<span style="${docsRun("")}">Checkout errors from 09:40 UTC, see </span>`,
371
+ `<a href="https://status.example.com/incidents/42" style="text-decoration:none;"><span style="${docsRun("color:#1155cc;text-decoration:underline;")}">the status page</span></a></p></li>`,
372
+ '<ul style="margin-top:0;margin-bottom:0;padding-inline-start:48px;">',
373
+ `<li dir="ltr" style="${DOCS_ITEM_STYLE.replace("disc", "circle")}" aria-level="2">${DOCS_PARAGRAPH}`,
374
+ `<span style="${docsRun("font-style:italic;")}">Card payments only</span></p></li></ul>`,
375
+ `<li dir="ltr" style="${DOCS_ITEM_STYLE}" aria-level="1">${DOCS_PARAGRAPH}`,
376
+ `<span style="${docsRun("text-decoration:line-through;")}">Rolled back release 3.2</span></p></li></ul>`,
377
+ "</b>",
378
+ ].join("");
379
+
380
+ // Docs' plain text for the same copy: the lines alone, no bullets, no indent.
381
+ export const GOOGLE_DOCS_LIST_COPY_TEXT: string =
382
+ "Owner:\tPayments on-call\nCheckout errors from 09:40 UTC, see the status page\nCard payments only\nRolled back release 3.2";
383
+
384
+ // The markdown that copy is.
385
+ export const GOOGLE_DOCS_LIST_COPY_MARKDOWN: string = [
386
+ "**Owner:** Payments on-call",
387
+ "",
388
+ "- Checkout errors from 09:40 UTC, see [the status page](https://status.example.com/incidents/42)",
389
+ " - *Card payments only*",
390
+ "- ~~Rolled back release 3.2~~",
391
+ ].join("\n");
392
+
393
+ /*
394
+ * Two lines of a MarkdownViewer code block (```yaml, the lines
395
+ * "replicas: 3" and "image: api_server:v2"), selected on their own and
396
+ * copied with Ctrl+C: what Chromium 1243 and Firefox 1543 put on the
397
+ * clipboard, captured from a paste event with the real viewer bundled by
398
+ * the repo's esbuild config. Neither keeps the block's <div> -- only the
399
+ * <pre> around the selected text, which carries the viewer's hints. The
400
+ * Tailwind "--tw-*" custom properties are removed from Chromium's computed
401
+ * styles for size; everything else is verbatim.
402
+ */
403
+ export const CHROME_VIEWER_CODE_LINES_COPY_HTML: string =
404
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="yaml" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="box-sizing: border-box; border-width: 0px !important; border-style: solid; border-color: rgb(229, 231, 235); font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 13px; margin: 0.5em 0px; border-radius: 0px !important; background: rgb(30, 30, 30); padding: 1em; line-height: 1.5; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: normal; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; color: rgb(212, 212, 212); text-shadow: none; direction: ltr; text-align: left; white-space: pre; word-break: normal; tab-size: 4; hyphens: none; overflow: auto;"><code class="font-mono" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 1em; white-space: pre;"><span class="token key" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(206, 145, 120);">replicas</span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(212, 212, 212);">:</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "> </span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(181, 206, 168);">3</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); ">\n</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "></span><span class="token key" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(206, 145, 120);">image</span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(212, 212, 212);">:</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); "> api_server</span><span class="token" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(212, 212, 212);">:</span><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); ">v2</span></code></pre>';
405
+
406
+ export const FIREFOX_VIEWER_CODE_LINES_COPY_HTML: string =
407
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="yaml" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="color: rgb(212, 212, 212); font-size: 13px; text-shadow: none; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none; padding: 1em; margin: 0.5em 0px; overflow: auto; background: rgb(30, 30, 30);"><code class="font-mono" style="white-space: pre;"><span></span><span></span><span class="token key" style="color: rgb(206, 145, 120);">replicas</span><span class="token" style="color: rgb(212, 212, 212);">:</span><span> </span><span class="token" style="color: rgb(181, 206, 168);">3</span><span>\n</span><span></span><span class="token key" style="color: rgb(206, 145, 120);">image</span><span class="token" style="color: rgb(212, 212, 212);">:</span><span> api_server</span><span class="token" style="color: rgb(212, 212, 212);">:</span><span>v2</span></code></pre>';
408
+
409
+ // The plain text both browsers put beside it.
410
+ export const VIEWER_CODE_LINES_COPY_TEXT: string =
411
+ "replicas: 3\nimage: api_server:v2";
412
+
413
+ /*
414
+ * Four lines of YAML, "metadata:" to " app: api", selected with a mouse
415
+ * drag in a code view drawn as a table -- the markup of the Dashboard's
416
+ * Kubernetes YAML tab (KubernetesYamlTab.tsx): a row per line, holding a
417
+ * select-none line number and a "whitespace-pre" code cell -- and copied
418
+ * with Ctrl+C: what Chromium 1243 and WebKit 2359 (Safari's engine) put on
419
+ * the clipboard, captured from a paste event. The line numbers stay out of
420
+ * the copy, and both write the code cell's "white-space: pre" on every cell
421
+ * they copy. The Tailwind "--tw-*" custom properties are removed from the
422
+ * computed styles for size; everything else is verbatim.
423
+ */
424
+ export const CHROME_CODE_VIEW_TABLE_COPY_HTML: string =
425
+ '<table class="w-full" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: inherit; text-indent: 0px; border-collapse: collapse; width: 1246px; color: rgb(0, 0, 0); font-family: ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><tbody style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67, 56, 202);">metadata</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107, 114, 128);">:</span></span></td></tr><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"> <span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67, 56, 202);">name</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107, 114, 128);">: </span><span class="text-emerald-700" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(4, 120, 87);">api</span></span></td></tr><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"> <span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67, 56, 202);">labels</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107, 114, 128);">:</span></span></td></tr><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); background-color: rgba(243, 244, 246, 0.5);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"> <span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67, 56, 202);">app</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107, 114, 128);">: </span><span class="text-emerald-700" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(4, 120, 87);">api</span></span></td></tr></tbody></table>';
426
+
427
+ export const WEBKIT_CODE_VIEW_TABLE_COPY_HTML: string =
428
+ '<table class="w-full" style="font-size: medium; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; box-sizing: border-box; border-width: 0px; border-style: solid; border-color: inherit; text-indent: 0px; border-collapse: collapse; width: 1246px; color: rgb(0, 0, 0); font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: rgb(249, 250, 251);"><tbody style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67 56 202 / var(--tw-text-opacity));">metadata</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107 114 128 / var(--tw-text-opacity));">:</span></span></td></tr><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"> <span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67 56 202 / var(--tw-text-opacity));">name</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107 114 128 / var(--tw-text-opacity));">: </span><span class="text-emerald-700" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(4 120 87 / var(--tw-text-opacity));">api</span></span></td></tr><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"> <span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67 56 202 / var(--tw-text-opacity));">labels</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107 114 128 / var(--tw-text-opacity));">:</span></span></td></tr><tr class="hover:bg-gray-100/50" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"><td class="px-4 py-0 text-sm font-mono whitespace-pre" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); white-space: pre; padding: 0px 1rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-size: 0.875rem; line-height: 1.25rem;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);"> <span class="text-indigo-700 font-medium" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-weight: 500; color: rgb(67 56 202 / var(--tw-text-opacity));">app</span><span class="text-gray-500" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(107 114 128 / var(--tw-text-opacity));">: </span><span class="text-emerald-700" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); color: rgb(4 120 87 / var(--tw-text-opacity));">api</span></span></td></tr></tbody></table>';
429
+
430
+ // The plain text both browsers put beside it.
431
+ export const CODE_VIEW_TABLE_COPY_TEXT: string =
432
+ "metadata:\n name: api\n labels:\n app: api";
433
+
434
+ /*
435
+ * Less than a line of a MarkdownViewer code block -- a block without a
436
+ * language holding "kubectl get pods -n prod" and "restart api_server now" --
437
+ * copied with Ctrl+C: "api_server" double-clicked, and "kubectl get pods"
438
+ * dragged over with the mouse. What Chromium 1243, Firefox 1543 and WebKit
439
+ * 2359 put on the clipboard, captured from a paste event with the real
440
+ * viewer. Every one of them keeps the viewer's hinted <pre> around even a
441
+ * word. The Tailwind "--tw-*" custom properties are removed from the computed
442
+ * styles for size; everything else is verbatim.
443
+ */
444
+ export const CHROME_VIEWER_CODE_WORD_COPY_HTML: string =
445
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="text" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="box-sizing: border-box; border-width: 0px !important; border-style: solid; border-color: rgb(229, 231, 235); font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 13px; margin: 0.5em 0px; border-radius: 0px !important; background: rgb(30, 30, 30); padding: 1em; line-height: 1.5; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: normal; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; color: rgb(212, 212, 212); text-shadow: none; direction: ltr; text-align: left; white-space: pre; word-break: normal; tab-size: 4; hyphens: none; overflow: auto;"><code class="font-mono" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 1em; white-space: pre;">api_server</code></pre>';
446
+
447
+ export const FIREFOX_VIEWER_CODE_WORD_COPY_HTML: string =
448
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="text" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="color: rgb(212, 212, 212); font-size: 13px; text-shadow: none; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none; padding: 1em; margin: 0.5em 0px; overflow: auto; background: rgb(30, 30, 30);"><code class="font-mono" style="white-space: pre;">api_server</code></pre>';
449
+
450
+ export const WEBKIT_VIEWER_CODE_WORD_COPY_HTML: string =
451
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="text" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: normal; -webkit-text-stroke-width: 0px; text-decoration: none; box-sizing: border-box; border-style: solid; border-color: rgb(229, 231, 235); font-family: Menlo, Monaco, Consolas, Andale Mono, Ubuntu Mono, Courier New, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 13px; margin: 0.5em 0px; background: rgb(30, 30, 30); padding: 1em; line-height: 1.5; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(212, 212, 212); text-shadow: none; direction: ltr; text-align: left; white-space: pre; word-break: normal; tab-size: 4; hyphens: none; overflow: auto; border-width: 0px !important; border-radius: 0px !important;"><code class="font-mono" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 1em; white-space: pre;">api_server</code></pre>';
452
+
453
+ export const CHROME_VIEWER_CODE_PART_OF_LINE_COPY_HTML: string =
454
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="text" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="box-sizing: border-box; border-width: 0px !important; border-style: solid; border-color: rgb(229, 231, 235); font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 13px; margin: 0.5em 0px; border-radius: 0px !important; background: rgb(30, 30, 30); padding: 1em; line-height: 1.5; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: normal; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; color: rgb(212, 212, 212); text-shadow: none; direction: ltr; text-align: left; white-space: pre; word-break: normal; tab-size: 4; hyphens: none; overflow: auto;"><code class="font-mono" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Courier New&quot;, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 1em; white-space: pre;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);">kubectl get pods</span></code></pre>';
455
+
456
+ export const FIREFOX_VIEWER_CODE_PART_OF_LINE_COPY_HTML: string =
457
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="text" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="color: rgb(212, 212, 212); font-size: 13px; text-shadow: none; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Courier New&quot;, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none; padding: 1em; margin: 0.5em 0px; overflow: auto; background: rgb(30, 30, 30);"><code class="font-mono" style="white-space: pre;"><span>kubectl get pods</span></code></pre>';
458
+
459
+ export const WEBKIT_VIEWER_CODE_PART_OF_LINE_COPY_HTML: string =
460
+ '<pre node="[object Object]" data-markdown-code-block="true" data-language="text" class="!rounded-none !mt-0 !mb-0 !bg-gray-900 !pt-3 !pb-3 !px-4 text-sm !border-0" style="font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: normal; -webkit-text-stroke-width: 0px; text-decoration: none; box-sizing: border-box; border-style: solid; border-color: rgb(229, 231, 235); font-family: Menlo, Monaco, Consolas, Andale Mono, Ubuntu Mono, Courier New, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 13px; margin: 0.5em 0px; background: rgb(30, 30, 30); padding: 1em; line-height: 1.5; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(212, 212, 212); text-shadow: none; direction: ltr; text-align: left; white-space: pre; word-break: normal; tab-size: 4; hyphens: none; overflow: auto; border-width: 0px !important; border-radius: 0px !important;"><code class="font-mono" style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; font-feature-settings: normal; font-variation-settings: normal; font-size: 1em; white-space: pre;"><span style="box-sizing: border-box; border-width: 0px; border-style: solid; border-color: rgb(229, 231, 235);">kubectl get pods</span></code></pre>';