@oneuptime/common 14.0.9 → 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 (1146) hide show
  1. package/Models/DatabaseModels/AIConversation.ts +127 -1
  2. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  3. package/Models/DatabaseModels/CephCluster.ts +225 -0
  4. package/Models/DatabaseModels/CloudResource.ts +12 -0
  5. package/Models/DatabaseModels/DatabaseServer.ts +225 -0
  6. package/Models/DatabaseModels/DockerHost.ts +225 -0
  7. package/Models/DatabaseModels/DockerSwarmCluster.ts +225 -0
  8. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  9. package/Models/DatabaseModels/GlobalOidc.ts +0 -4
  10. package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
  11. package/Models/DatabaseModels/GlobalSso.ts +0 -4
  12. package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
  13. package/Models/DatabaseModels/Host.ts +225 -0
  14. package/Models/DatabaseModels/IncidentForm.ts +594 -0
  15. package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
  16. package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
  17. package/Models/DatabaseModels/Index.ts +16 -0
  18. package/Models/DatabaseModels/IoTFleet.ts +12 -0
  19. package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
  20. package/Models/DatabaseModels/MessageQueue.ts +1102 -0
  21. package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
  22. package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
  23. package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
  24. package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
  25. package/Models/DatabaseModels/PodmanHost.ts +225 -0
  26. package/Models/DatabaseModels/Project.ts +59 -0
  27. package/Models/DatabaseModels/ProjectOidc.ts +0 -4
  28. package/Models/DatabaseModels/ProjectSso.ts +0 -4
  29. package/Models/DatabaseModels/ProxmoxCluster.ts +225 -0
  30. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  31. package/Models/DatabaseModels/RumApplication.ts +12 -0
  32. package/Models/DatabaseModels/RunnerJob.ts +144 -0
  33. package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
  34. package/Models/DatabaseModels/Service.ts +12 -0
  35. package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
  36. package/Models/DatabaseModels/StatusPageSso.ts +0 -4
  37. package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
  38. package/Models/DatabaseModels/VMwareVCenter.ts +225 -0
  39. package/Server/API/AIChatAPI.ts +13 -114
  40. package/Server/API/AIInvestigationAPI.ts +3 -3
  41. package/Server/API/AIInvestigationConversationAPI.ts +266 -0
  42. package/Server/API/AutoRemediationAPI.ts +392 -1
  43. package/Server/API/IncidentFormAPI.ts +376 -0
  44. package/Server/API/ProjectOIDC.ts +16 -25
  45. package/Server/API/ProjectSSO.ts +16 -24
  46. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  47. package/Server/API/StatusPageAPI.ts +42 -77
  48. package/Server/Enterprise/EnterpriseEdition.ts +93 -28
  49. package/Server/Enterprise/EnterpriseFeature.ts +25 -3
  50. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
  51. package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
  52. package/Server/EnvironmentConfig.ts +1 -1
  53. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  54. package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
  55. package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
  56. package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
  57. package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
  58. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  59. package/Server/Infrastructure/Semaphore.ts +22 -0
  60. package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
  61. package/Server/Middleware/TelemetryIngest.ts +15 -5
  62. package/Server/Middleware/UserAuthorization.ts +16 -38
  63. package/Server/Services/AIService.ts +10 -13
  64. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  65. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  66. package/Server/Services/CephClusterService.ts +109 -1
  67. package/Server/Services/DatabaseServerService.ts +116 -1
  68. package/Server/Services/DockerHostService.ts +109 -1
  69. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  70. package/Server/Services/HostService.ts +126 -4
  71. package/Server/Services/IncidentCustomFieldService.ts +112 -2
  72. package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
  73. package/Server/Services/IncidentEpisodeService.ts +10 -1
  74. package/Server/Services/IncidentFormService.ts +1566 -0
  75. package/Server/Services/IncidentFormSubmissionService.ts +97 -0
  76. package/Server/Services/IncidentGroupingEngineService.ts +45 -8
  77. package/Server/Services/IncidentService.ts +123 -5
  78. package/Server/Services/IncidentTemplateService.ts +22 -0
  79. package/Server/Services/Index.ts +14 -0
  80. package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
  81. package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
  82. package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
  83. package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
  84. package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
  85. package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
  86. package/Server/Services/MessageQueueService.ts +1463 -0
  87. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  88. package/Server/Services/OpenTelemetryIngestService.ts +37 -4
  89. package/Server/Services/PodmanHostService.ts +109 -1
  90. package/Server/Services/ProjectService.ts +0 -59
  91. package/Server/Services/ProxmoxClusterService.ts +110 -1
  92. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  93. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  94. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  95. package/Server/Services/RunnerJobService.ts +611 -4
  96. package/Server/Services/StatusPagePrivateUserService.ts +1 -4
  97. package/Server/Services/StatusPageService.ts +1 -51
  98. package/Server/Services/TeamComplianceSettingService.ts +163 -42
  99. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  100. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  101. package/Server/Services/UserNotificationRuleService.ts +8 -1
  102. package/Server/Services/VMwareVCenterService.ts +110 -1
  103. package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
  104. package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
  105. package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
  106. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
  107. package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
  108. package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
  109. package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
  110. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
  111. package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
  112. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
  113. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  114. package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
  115. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
  116. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
  117. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
  118. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
  119. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1442 -34
  120. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +968 -34
  121. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  122. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +622 -0
  123. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  124. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  125. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  126. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  127. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +882 -0
  128. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +125 -12
  129. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +99 -15
  130. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +99 -15
  131. package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
  132. package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
  133. package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
  134. package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
  135. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
  136. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  137. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  138. package/Server/Utils/EditionEnforcement.ts +19 -202
  139. package/Server/Utils/LLM/LLMService.ts +259 -63
  140. package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
  141. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  142. package/Server/Utils/SameOriginRequest.ts +203 -0
  143. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  144. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  145. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  146. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
  147. package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
  148. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
  149. package/Server/Utils/VendorAssets.ts +3 -3
  150. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  151. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  152. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  153. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +301 -225
  154. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +38 -16
  155. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  156. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +376 -144
  157. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  158. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  159. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  160. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  161. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  162. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  163. package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
  164. package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
  165. package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
  166. package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
  167. package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
  168. package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
  169. package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
  170. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
  171. package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
  172. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
  173. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
  174. package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
  175. package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
  176. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
  177. package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
  178. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +267 -12
  179. package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
  180. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
  181. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
  182. package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
  183. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +23 -6
  184. package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
  185. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
  186. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
  187. package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
  188. package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
  189. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
  190. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
  191. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
  192. package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
  193. package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
  194. package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
  195. package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
  196. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
  197. package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
  198. package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
  199. package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
  200. package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
  201. package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
  202. package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
  203. package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
  204. package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
  205. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
  206. package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
  207. package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
  208. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
  209. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
  210. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  211. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
  212. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
  213. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
  214. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
  215. package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
  216. package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
  217. package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
  218. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
  219. package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
  220. package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
  221. package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
  222. package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
  223. package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
  224. package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
  225. package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
  226. package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
  227. package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
  228. package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
  229. package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
  230. package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
  231. package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
  232. package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
  233. package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
  234. package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
  235. package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
  236. package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
  237. package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
  238. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
  239. package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
  240. package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
  241. package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
  242. package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
  243. package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
  244. package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
  245. package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
  246. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
  247. package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
  248. package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
  249. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
  250. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
  251. package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
  252. package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
  253. package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
  254. package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
  255. package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
  256. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  257. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  258. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  259. package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
  260. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  261. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +2010 -0
  262. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1455 -0
  263. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  264. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  265. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
  266. package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
  267. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
  268. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
  269. package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
  270. package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
  271. package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
  272. package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
  273. package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
  274. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  275. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
  276. package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
  277. package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
  278. package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
  279. package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
  280. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
  281. package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
  282. package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
  283. package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
  284. package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
  285. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
  286. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +61 -10
  287. package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
  288. package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
  289. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  290. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  291. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  292. package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
  293. package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
  294. package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
  295. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  296. package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
  297. package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
  298. package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
  299. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
  300. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  301. package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
  302. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
  303. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
  304. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
  305. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
  306. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
  307. package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
  308. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  309. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  310. package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
  311. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  312. package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
  313. package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
  314. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  315. package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
  316. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
  317. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
  318. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
  319. package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
  320. package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
  321. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
  322. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  323. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  324. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  325. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  326. package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
  327. package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
  328. package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
  329. package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
  330. package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
  331. package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
  332. package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
  333. package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
  334. package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
  335. package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
  336. package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
  337. package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
  338. package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
  339. package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
  340. package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
  341. package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
  342. package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
  343. package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
  344. package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
  345. package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
  346. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  347. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  348. package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
  349. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
  350. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
  351. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
  352. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  353. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  354. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  355. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  356. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  357. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  358. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  359. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  360. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  361. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  362. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
  363. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
  364. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
  365. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  366. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  367. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  368. package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
  369. package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
  370. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  371. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
  372. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
  373. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
  374. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  375. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  376. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
  377. package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
  378. package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
  379. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
  380. package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
  381. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
  382. package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
  383. package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
  384. package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
  385. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
  386. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
  387. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
  388. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
  389. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +694 -0
  390. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  391. package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
  392. package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
  393. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
  394. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
  395. package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
  396. package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
  397. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  398. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  399. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
  400. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1251 -0
  401. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  402. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  403. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +1004 -0
  404. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  405. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  406. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  407. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +834 -0
  408. package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
  409. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
  410. package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
  411. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
  412. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  413. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  414. package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
  415. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  416. package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
  417. package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
  418. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  419. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  420. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
  421. package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
  422. package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
  423. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
  424. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
  425. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  426. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  427. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  428. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  429. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  430. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  431. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  432. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  433. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  434. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  435. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  436. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  437. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  438. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  439. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  440. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  441. package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
  442. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  443. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  444. package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
  445. package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
  446. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
  447. package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
  448. package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
  449. package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
  450. package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
  451. package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
  452. package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
  453. package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
  454. package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
  455. package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
  456. package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
  457. package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
  458. package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
  459. package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
  460. package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
  461. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  462. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  463. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  464. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  465. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +519 -0
  466. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  467. package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
  468. package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
  469. package/Tests/Types/XML.test.ts +51 -0
  470. package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
  471. package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
  472. package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
  473. package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
  474. package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
  475. package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
  476. package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
  477. package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
  478. package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
  479. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
  480. package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
  481. package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
  482. package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
  483. package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
  484. package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
  485. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
  486. package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
  487. package/Tests/UI/Components/Icon.test.tsx +32 -0
  488. package/Tests/UI/Components/Input.test.tsx +31 -0
  489. package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
  490. package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
  491. package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
  492. package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
  493. package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
  494. package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
  495. package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
  496. package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
  497. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
  498. package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
  499. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  500. package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
  501. package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
  502. package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
  503. package/Tests/UI/Components/TextArea.test.tsx +19 -0
  504. package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
  505. package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
  506. package/Tests/UI/EsbuildConfig.test.ts +115 -39
  507. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
  508. package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
  509. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  510. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
  511. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
  512. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  513. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  514. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  515. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  516. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  517. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  518. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  519. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  520. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  521. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  522. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  523. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  524. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  525. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  526. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  527. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  528. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  529. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  530. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  531. package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
  532. package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
  533. package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
  534. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  535. package/Types/AI/AIAgentRunLimits.ts +146 -0
  536. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  537. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  538. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
  539. package/Types/Code/CodeType.ts +2 -0
  540. package/Types/Code/JsonSyntax.ts +923 -0
  541. package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
  542. package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
  543. package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
  544. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
  545. package/Types/Icon/IconProp.ts +2 -0
  546. package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
  547. package/Types/Incident/IncidentFormPublic.ts +1145 -0
  548. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
  549. package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
  550. package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
  551. package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
  552. package/Types/MessageQueue/MessagingSystem.ts +518 -0
  553. package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
  554. package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
  555. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  556. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  557. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  558. package/Types/Permission.ts +310 -0
  559. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  560. package/Types/ResourceAiAgent/ResourceAiAccess.ts +580 -0
  561. package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
  562. package/Types/Rules/RuleRun.ts +4 -0
  563. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  564. package/Types/Runbook/RunbookStepType.ts +29 -0
  565. package/Types/Team/ComplianceNotificationChannel.ts +4 -3
  566. package/Types/Team/ComplianceRule.ts +71 -18
  567. package/Types/Team/ComplianceRuleType.ts +2 -2
  568. package/Types/Team/TeamComplianceStatus.ts +6 -2
  569. package/Types/Telemetry/EntityType.ts +16 -0
  570. package/Types/Telemetry/LockedFilterDetail.ts +22 -0
  571. package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
  572. package/Types/XML.ts +26 -0
  573. package/UI/Components/CodeEditor/CodeEditor.css +379 -0
  574. package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
  575. package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
  576. package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
  577. package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
  578. package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
  579. package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
  580. package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
  581. package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
  582. package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
  583. package/UI/Components/Forms/Fields/FormField.tsx +8 -0
  584. package/UI/Components/Forms/Types/Field.ts +8 -0
  585. package/UI/Components/Icon/Icon.tsx +18 -0
  586. package/UI/Components/Input/Input.tsx +11 -4
  587. package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
  588. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
  589. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  590. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
  591. package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
  592. package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
  593. package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
  594. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
  595. package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
  596. package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
  597. package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
  598. package/UI/Components/Table/EmptyTableMessage.ts +81 -0
  599. package/UI/Components/Table/Table.tsx +50 -21
  600. package/UI/Components/Table/TableRow.tsx +9 -1
  601. package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
  602. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
  603. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
  604. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
  605. package/UI/Components/TextArea/TextArea.tsx +9 -2
  606. package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
  607. package/UI/Styles/Theme.css +8 -0
  608. package/UI/esbuild-config.js +2 -32
  609. package/Utils/AI/InvestigationReport.ts +121 -15
  610. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  611. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  612. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  613. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  614. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  615. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  616. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  617. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  618. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  619. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  620. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  621. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  622. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  623. package/Utils/LabelRuleImportExport.ts +2 -0
  624. package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
  625. package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
  626. package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
  627. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  628. package/Utils/Telemetry/EntityKey.ts +48 -0
  629. package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
  630. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
  631. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  632. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  633. package/build/dist/Models/DatabaseModels/CephCluster.js +231 -0
  634. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  635. package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
  636. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  637. package/build/dist/Models/DatabaseModels/DatabaseServer.js +231 -0
  638. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  639. package/build/dist/Models/DatabaseModels/DockerHost.js +231 -0
  640. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  641. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +231 -0
  642. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  643. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  644. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  645. package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
  646. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
  647. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
  648. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
  649. package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
  650. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
  651. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
  652. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
  653. package/build/dist/Models/DatabaseModels/Host.js +231 -0
  654. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  655. package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
  656. package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
  657. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
  658. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
  659. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
  660. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  661. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  662. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  663. package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
  664. package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
  665. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
  666. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  667. package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
  668. package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
  669. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
  670. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
  671. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
  672. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
  673. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
  674. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
  675. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
  676. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
  677. package/build/dist/Models/DatabaseModels/PodmanHost.js +231 -0
  678. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  679. package/build/dist/Models/DatabaseModels/Project.js +61 -0
  680. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  681. package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
  682. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
  683. package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
  684. package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
  685. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +231 -0
  686. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  687. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  688. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  689. package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
  690. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  691. package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
  692. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  693. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
  694. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  695. package/build/dist/Models/DatabaseModels/Service.js +12 -0
  696. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  697. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
  698. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
  699. package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
  700. package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
  701. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
  702. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
  703. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +231 -0
  704. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  705. package/build/dist/Server/API/AIChatAPI.js +9 -103
  706. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  707. package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
  708. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  709. package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
  710. package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
  711. package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
  712. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  713. package/build/dist/Server/API/IncidentFormAPI.js +245 -0
  714. package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
  715. package/build/dist/Server/API/ProjectOIDC.js +16 -24
  716. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  717. package/build/dist/Server/API/ProjectSSO.js +16 -24
  718. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  719. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  720. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  721. package/build/dist/Server/API/StatusPageAPI.js +42 -75
  722. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  723. package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
  724. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
  725. package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
  726. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
  727. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
  728. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
  729. package/build/dist/Server/EnvironmentConfig.js +1 -1
  730. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  731. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  732. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
  733. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
  734. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
  735. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
  736. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
  737. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
  738. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
  739. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
  740. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  741. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  742. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  743. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  744. package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
  745. package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
  746. package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
  747. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  748. package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
  749. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  750. package/build/dist/Server/Services/AIService.js +10 -13
  751. package/build/dist/Server/Services/AIService.js.map +1 -1
  752. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  753. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  754. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  755. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  756. package/build/dist/Server/Services/CephClusterService.js +104 -0
  757. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  758. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  759. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  760. package/build/dist/Server/Services/DockerHostService.js +104 -0
  761. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  762. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  763. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  764. package/build/dist/Server/Services/HostService.js +114 -2
  765. package/build/dist/Server/Services/HostService.js.map +1 -1
  766. package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
  767. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  768. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
  769. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  770. package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
  771. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  772. package/build/dist/Server/Services/IncidentFormService.js +1202 -0
  773. package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
  774. package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
  775. package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
  776. package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
  777. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  778. package/build/dist/Server/Services/IncidentService.js +106 -4
  779. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  780. package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
  781. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  782. package/build/dist/Server/Services/Index.js +14 -0
  783. package/build/dist/Server/Services/Index.js.map +1 -1
  784. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
  785. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
  786. package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
  787. package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
  788. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
  789. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
  790. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
  791. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
  792. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
  793. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
  794. package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
  795. package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
  796. package/build/dist/Server/Services/MessageQueueService.js +1140 -0
  797. package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
  798. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  799. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  800. package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
  801. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  802. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  803. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  804. package/build/dist/Server/Services/ProjectService.js +0 -54
  805. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  806. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  807. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  808. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  809. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  810. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  811. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  812. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  813. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  814. package/build/dist/Server/Services/RunnerJobService.js +344 -5
  815. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  816. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
  817. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  818. package/build/dist/Server/Services/StatusPageService.js +0 -46
  819. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  820. package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
  821. package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
  822. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  823. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  824. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  825. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  826. package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
  827. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  828. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  829. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  830. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
  831. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
  832. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
  833. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  834. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
  835. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  836. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
  837. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  838. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
  839. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
  840. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  841. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
  842. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
  843. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
  844. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  845. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
  846. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
  847. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
  848. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  849. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  850. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
  851. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
  852. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
  853. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
  854. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
  855. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
  856. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
  857. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  858. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
  859. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  860. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1036 -32
  861. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  862. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +661 -41
  863. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  864. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  865. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  866. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +354 -0
  867. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  868. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  869. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  870. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  871. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  872. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  873. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  874. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  875. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  876. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +602 -0
  877. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  878. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +90 -14
  879. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  880. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +73 -10
  881. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  882. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +73 -10
  883. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  884. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
  885. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  886. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
  887. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
  888. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
  889. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
  890. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
  891. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
  892. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
  893. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  894. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  895. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  896. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  897. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  898. package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
  899. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
  900. package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
  901. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  902. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
  903. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
  904. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  905. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  906. package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
  907. package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
  908. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  909. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  910. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  911. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  912. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  913. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  914. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
  915. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  916. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
  917. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
  918. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
  919. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  920. package/build/dist/Server/Utils/VendorAssets.js +3 -3
  921. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  922. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  923. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  924. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  925. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  926. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  927. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +186 -210
  928. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  929. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +22 -16
  930. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  931. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  932. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  933. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +273 -111
  934. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  935. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  936. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  937. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  938. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  939. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  940. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  941. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  942. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  943. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  944. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  945. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  946. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  947. package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
  948. package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
  949. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  950. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  951. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  952. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  953. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
  954. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  955. package/build/dist/Types/Code/CodeType.js +2 -0
  956. package/build/dist/Types/Code/CodeType.js.map +1 -1
  957. package/build/dist/Types/Code/JsonSyntax.js +604 -0
  958. package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
  959. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
  960. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
  961. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
  962. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
  963. package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
  964. package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
  965. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
  966. package/build/dist/Types/Icon/IconProp.js +2 -0
  967. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  968. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
  969. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
  970. package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
  971. package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
  972. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
  973. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  974. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
  975. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
  976. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
  977. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
  978. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
  979. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
  980. package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
  981. package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
  982. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
  983. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
  984. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
  985. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
  986. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  987. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  988. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  989. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  990. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  991. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  992. package/build/dist/Types/Permission.js +274 -0
  993. package/build/dist/Types/Permission.js.map +1 -1
  994. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  995. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  996. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +281 -0
  997. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  998. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
  999. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  1000. package/build/dist/Types/Rules/RuleRun.js +4 -0
  1001. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  1002. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  1003. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  1004. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  1005. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  1006. package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
  1007. package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
  1008. package/build/dist/Types/Team/ComplianceRule.js +48 -14
  1009. package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
  1010. package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
  1011. package/build/dist/Types/Telemetry/EntityType.js +16 -0
  1012. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  1013. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
  1014. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  1015. package/build/dist/Types/XML.js +23 -0
  1016. package/build/dist/Types/XML.js.map +1 -1
  1017. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
  1018. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  1019. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
  1020. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
  1021. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
  1022. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
  1023. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
  1024. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
  1025. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
  1026. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
  1027. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  1028. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  1029. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
  1030. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
  1031. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
  1032. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1033. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
  1034. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  1035. package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
  1036. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1037. package/build/dist/UI/Components/Icon/Icon.js +8 -0
  1038. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1039. package/build/dist/UI/Components/Input/Input.js +11 -3
  1040. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  1041. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
  1042. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1043. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
  1044. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1045. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  1046. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  1047. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
  1048. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  1049. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
  1050. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
  1051. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
  1052. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
  1053. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
  1054. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
  1055. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
  1056. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  1057. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
  1058. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
  1059. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
  1060. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1061. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
  1062. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
  1063. package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
  1064. package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
  1065. package/build/dist/UI/Components/Table/Table.js +30 -11
  1066. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  1067. package/build/dist/UI/Components/Table/TableRow.js +9 -2
  1068. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1069. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
  1070. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
  1071. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
  1072. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1073. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
  1074. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
  1075. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
  1076. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1077. package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
  1078. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  1079. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
  1080. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  1081. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  1082. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  1083. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  1084. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  1085. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  1086. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  1087. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  1088. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  1089. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  1090. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  1091. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  1092. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  1093. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  1094. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  1095. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  1096. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  1097. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  1098. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  1099. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  1100. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  1101. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  1102. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  1103. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  1104. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  1105. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  1106. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  1107. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  1108. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  1109. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  1110. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  1111. package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
  1112. package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
  1113. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
  1114. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
  1115. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
  1116. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
  1117. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  1118. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  1119. package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
  1120. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  1121. package/package.json +1 -3
  1122. package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
  1123. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
  1124. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
  1125. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
  1126. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
  1127. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
  1128. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
  1129. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
  1130. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
  1131. package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
  1132. package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
  1133. package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
  1134. package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
  1135. package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
  1136. package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
  1137. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
  1138. package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
  1139. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
  1140. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
  1141. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
  1142. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
  1143. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
  1144. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
  1145. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
  1146. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
@@ -0,0 +1,1532 @@
1
+ /*
2
+ * The db catalog: the CLOSED set of diagnostic operations OneUptime AI may
3
+ * run against a database server through the Database AI agent, the grammar
4
+ * that reads a `db` argv into exactly one of them, and which engine supports
5
+ * what.
6
+ *
7
+ * `db` is not a real CLI and never runs text the model wrote. A command is
8
+ *
9
+ * db <operation> [argument] [--flag value | --flag=value]...
10
+ *
11
+ * and the agent's DatabaseExecutor maps the parsed operation to a query it
12
+ * owns (the `implementation` notes below), through the engine's Node driver
13
+ * (pg, mysql2, ioredis, mongodb), in a read-only session with a statement
14
+ * timeout. Free SQL, Redis commands, Mongo shell code and scripts are
15
+ * unavailable on purpose: a SQL policy is not tractable (a SELECT can call
16
+ * a function that writes, take locks or read a secret), a catalog is.
17
+ *
18
+ * The grammar is deliberately strict, the way KubectlPolicy reads pflag —
19
+ * so a flag or value the policy refuses can never hide inside one it
20
+ * allows:
21
+ * - the operation is argv[1], spelled exactly (lowercase, dashes);
22
+ * - flags are LONG only (`--limit 20` or `--limit=20`); a single-dash
23
+ * word is refused, so there are no short-flag clusters to unpack;
24
+ * - every flag takes a value; `--flag value` never takes a value that
25
+ * starts with "-" (it would be another flag the check would skip), and
26
+ * `--flag=` with nothing after it is refused;
27
+ * - a flag the operation does not take, an unknown flag, a flag given
28
+ * twice, a value outside its type or bounds, a missing or extra
29
+ * argument: all refused;
30
+ * - "--" ends the flags (what follows is the argument), as in any CLI;
31
+ * - values are typed: whole numbers with bounds and no leading zeros,
32
+ * identifiers [A-Za-z0-9_.$-] (not starting with "-"), fixed choices,
33
+ * setting names, numeric session ids.
34
+ * The parse yields a canonical argv (operation, argument, then flags in
35
+ * catalog order as `--flag value`), which re-parses to itself; the policy
36
+ * returns it as the command's args, so what the agent receives, what a
37
+ * human approves and what the executor runs are one thing.
38
+ *
39
+ * Tiers: every operation is Read except cancel-query (SafeWrite: it
40
+ * cancels one session's running statement and the session stays
41
+ * connected) and terminate-session (RiskyWrite: it disconnects one session
42
+ * and rolls back its open transaction). A write's target is
43
+ * `session:<id>`. Nothing else changes the database.
44
+ *
45
+ * Engines: PostgreSQL, MySQL (MariaDB and Percona too), Redis (Valkey,
46
+ * KeyDB and Dragonfly too) and MongoDB. The policy tiers an operation
47
+ * without knowing the engine; the executor refuses one its engine does not
48
+ * support (getDatabaseEngineRefusal), and the guides can be written for one
49
+ * engine (getDatabaseReadCommandGuide(engine)).
50
+ *
51
+ * Part of the import-closed resource policy directory the resource AI agent
52
+ * carries a byte-identical copy of (see ResourceCommandPolicyCore): pure,
53
+ * total (nothing here throws), relative imports of that set only.
54
+ */
55
+
56
+ import { ResourceCommandTier } from "../../../Types/ResourceAiAgent/ResourceAiAccess";
57
+
58
+ // The program every database command starts with.
59
+ export const DATABASE_PROGRAM: string = "db";
60
+
61
+ // The engine families the Database AI agent can talk to.
62
+ export enum DatabaseEngine {
63
+ PostgreSQL = "postgresql",
64
+ MySQL = "mysql",
65
+ Redis = "redis",
66
+ MongoDB = "mongodb",
67
+ }
68
+
69
+ export const ALL_DATABASE_ENGINES: ReadonlyArray<DatabaseEngine> = [
70
+ DatabaseEngine.PostgreSQL,
71
+ DatabaseEngine.MySQL,
72
+ DatabaseEngine.Redis,
73
+ DatabaseEngine.MongoDB,
74
+ ];
75
+
76
+ export const DATABASE_ENGINE_DISPLAY_NAMES: Readonly<
77
+ Record<DatabaseEngine, string>
78
+ > = {
79
+ [DatabaseEngine.PostgreSQL]: "PostgreSQL",
80
+ [DatabaseEngine.MySQL]: "MySQL/MariaDB",
81
+ [DatabaseEngine.Redis]: "Redis",
82
+ [DatabaseEngine.MongoDB]: "MongoDB",
83
+ };
84
+
85
+ /*
86
+ * DATABASE_SYSTEM spellings (the Database Agent's normalize_engine, and the
87
+ * semconv `db.system.name` values) read as each family. A fork or drop-in
88
+ * speaks its family's protocol and diagnostic views.
89
+ */
90
+ const DATABASE_ENGINE_ALIASES: Readonly<Record<string, DatabaseEngine>> = {
91
+ postgresql: DatabaseEngine.PostgreSQL,
92
+ postgres: DatabaseEngine.PostgreSQL,
93
+ pg: DatabaseEngine.PostgreSQL,
94
+ pgsql: DatabaseEngine.PostgreSQL,
95
+ mysql: DatabaseEngine.MySQL,
96
+ mariadb: DatabaseEngine.MySQL,
97
+ percona: DatabaseEngine.MySQL,
98
+ redis: DatabaseEngine.Redis,
99
+ valkey: DatabaseEngine.Redis,
100
+ keydb: DatabaseEngine.Redis,
101
+ dragonfly: DatabaseEngine.Redis,
102
+ dragonflydb: DatabaseEngine.Redis,
103
+ mongodb: DatabaseEngine.MongoDB,
104
+ mongo: DatabaseEngine.MongoDB,
105
+ };
106
+
107
+ /*
108
+ * The engine family a DATABASE_SYSTEM value (or posture detail) names, or
109
+ * null for anything else — SQL Server, Oracle, Elasticsearch and memcached
110
+ * included: the catalog has no operations for them.
111
+ */
112
+ export function parseDatabaseEngine(value: unknown): DatabaseEngine | null {
113
+ if (typeof value !== "string") {
114
+ return null;
115
+ }
116
+
117
+ const folded: string = value.trim().toLowerCase();
118
+
119
+ if (
120
+ !folded ||
121
+ !Object.prototype.hasOwnProperty.call(DATABASE_ENGINE_ALIASES, folded)
122
+ ) {
123
+ return null;
124
+ }
125
+
126
+ return DATABASE_ENGINE_ALIASES[folded] || null;
127
+ }
128
+
129
+ // How a parameter's value is read.
130
+ export enum DatabaseParamKind {
131
+ // A whole number within [minimum, maximum], written without leading zeros.
132
+ Integer = "Integer",
133
+ // A user, database or schema name: [A-Za-z0-9_.$-]{1,128}, not starting with "-".
134
+ Identifier = "Identifier",
135
+ // One of a fixed set of words, compared exactly.
136
+ Choice = "Choice",
137
+ // A server setting's name: [A-Za-z0-9_.-]{1,64}, not starting with "-" or ".", never a credential setting.
138
+ SettingName = "SettingName",
139
+ // A session, connection, client or operation id: a positive whole number.
140
+ SessionId = "SessionId",
141
+ }
142
+
143
+ export interface DatabaseParamSpec {
144
+ // The flag's name without dashes, or the argument's placeholder ("name", "section", "id").
145
+ name: string;
146
+ kind: DatabaseParamKind;
147
+ // How the guide writes the value ("N", "NAME", "SECTION", "ID").
148
+ valueLabel: string;
149
+ description: string;
150
+ // Integer only.
151
+ minimum?: number | undefined;
152
+ maximum?: number | undefined;
153
+ // What the executor uses when the flag is not given (Integer only).
154
+ defaultValue?: number | undefined;
155
+ // Choice only: every value accepted on some engine.
156
+ choices?: ReadonlyArray<string> | undefined;
157
+ // Choice only: the values each engine accepts, when they differ by engine.
158
+ choicesByEngine?:
159
+ | Readonly<Partial<Record<DatabaseEngine, ReadonlyArray<string>>>>
160
+ | undefined;
161
+ // The engines it applies to; absent means every engine the operation supports.
162
+ engines?: ReadonlyArray<DatabaseEngine> | undefined;
163
+ }
164
+
165
+ export interface DatabaseArgumentSpec extends DatabaseParamSpec {
166
+ required: boolean;
167
+ }
168
+
169
+ export interface DatabaseOperationSpec {
170
+ // Canonical name: lowercase words joined by dashes.
171
+ name: string;
172
+ // Other spellings that name the same operation.
173
+ aliases: ReadonlyArray<string>;
174
+ tier: ResourceCommandTier;
175
+ // One line: what it shows or does (for the guides and the policy's reason).
176
+ summary: string;
177
+ engines: ReadonlyArray<DatabaseEngine>;
178
+ // What the agent runs on each engine it supports (for the executor and the guides).
179
+ implementation: Readonly<Partial<Record<DatabaseEngine, string>>>;
180
+ // The one positional argument it takes, if any.
181
+ argument: DatabaseArgumentSpec | null;
182
+ // The flags it takes, in canonical order.
183
+ flags: ReadonlyArray<DatabaseParamSpec>;
184
+ }
185
+
186
+ export const DATABASE_MAX_ROW_LIMIT: number = 200;
187
+ export const DATABASE_DEFAULT_ROW_LIMIT: number = 50;
188
+ export const DATABASE_MAX_MIN_SECONDS: number = 86400;
189
+ export const DATABASE_MAX_IDENTIFIER_LENGTH: number = 128;
190
+ export const DATABASE_MAX_SETTING_NAME_LENGTH: number = 64;
191
+ // Fifteen digits: every id fits a JavaScript number exactly.
192
+ export const DATABASE_MAX_SESSION_ID_DIGITS: number = 15;
193
+
194
+ const ALL_ENGINES: ReadonlyArray<DatabaseEngine> = ALL_DATABASE_ENGINES;
195
+ const SQL_AND_MONGO: ReadonlyArray<DatabaseEngine> = [
196
+ DatabaseEngine.PostgreSQL,
197
+ DatabaseEngine.MySQL,
198
+ DatabaseEngine.MongoDB,
199
+ ];
200
+
201
+ function limitFlag(defaultValue: number): DatabaseParamSpec {
202
+ return {
203
+ name: "limit",
204
+ kind: DatabaseParamKind.Integer,
205
+ valueLabel: "N",
206
+ description: `at most N rows (1-${DATABASE_MAX_ROW_LIMIT}, default ${defaultValue})`,
207
+ minimum: 1,
208
+ maximum: DATABASE_MAX_ROW_LIMIT,
209
+ defaultValue,
210
+ };
211
+ }
212
+
213
+ const SESSION_STATES: ReadonlyArray<string> = [
214
+ "active",
215
+ "idle",
216
+ "idle-in-transaction",
217
+ ];
218
+
219
+ /*
220
+ * Redis INFO sections worth reading while investigating. `all` and
221
+ * `everything` are left out (use the sections), and so is nothing that
222
+ * would print a credential: INFO never prints requirepass or masterauth.
223
+ */
224
+ export const REDIS_INFO_SECTIONS: ReadonlyArray<string> = [
225
+ "server",
226
+ "clients",
227
+ "memory",
228
+ "persistence",
229
+ "stats",
230
+ "replication",
231
+ "cpu",
232
+ "commandstats",
233
+ "latencystats",
234
+ "errorstats",
235
+ "cluster",
236
+ "keyspace",
237
+ "modules",
238
+ ];
239
+
240
+ // MongoDB serverStatus top-level sections, exactly as serverStatus names them.
241
+ export const MONGODB_SERVER_STATUS_SECTIONS: ReadonlyArray<string> = [
242
+ "asserts",
243
+ "connections",
244
+ "extra_info",
245
+ "flowControl",
246
+ "globalLock",
247
+ "locks",
248
+ "logicalSessionRecordCache",
249
+ "mem",
250
+ "metrics",
251
+ "network",
252
+ "opLatencies",
253
+ "opcounters",
254
+ "opcountersRepl",
255
+ "repl",
256
+ "storageEngine",
257
+ "tcmalloc",
258
+ "transactions",
259
+ "wiredTiger",
260
+ ];
261
+
262
+ function uniqueWords(
263
+ lists: ReadonlyArray<ReadonlyArray<string>>,
264
+ ): ReadonlyArray<string> {
265
+ const seen: Array<string> = [];
266
+
267
+ for (const list of lists) {
268
+ for (const word of list) {
269
+ if (!seen.includes(word)) {
270
+ seen.push(word);
271
+ }
272
+ }
273
+ }
274
+
275
+ return seen;
276
+ }
277
+
278
+ const SESSION_ID_ARGUMENT: DatabaseArgumentSpec = {
279
+ name: "id",
280
+ kind: DatabaseParamKind.SessionId,
281
+ valueLabel: "ID",
282
+ description:
283
+ "the numeric id `db sessions` prints: the PostgreSQL pid, the MySQL processlist id, the Redis client id or the MongoDB opid",
284
+ required: true,
285
+ };
286
+
287
+ /*
288
+ * The whole catalog. Order is the guides' order: health first, then who is
289
+ * doing what, then where the space and time go, then settings and engine
290
+ * internals, then the two changes.
291
+ */
292
+ export const DATABASE_DIAGNOSTIC_OPERATIONS: ReadonlyArray<DatabaseOperationSpec> =
293
+ [
294
+ {
295
+ name: "ping",
296
+ aliases: [],
297
+ tier: ResourceCommandTier.Read,
298
+ summary: "checks that the server answers",
299
+ engines: ALL_ENGINES,
300
+ implementation: {
301
+ [DatabaseEngine.PostgreSQL]: "SELECT 1",
302
+ [DatabaseEngine.MySQL]: "SELECT 1",
303
+ [DatabaseEngine.Redis]: "PING",
304
+ [DatabaseEngine.MongoDB]: "{ ping: 1 } on admin",
305
+ },
306
+ argument: null,
307
+ flags: [],
308
+ },
309
+ {
310
+ name: "version",
311
+ aliases: [],
312
+ tier: ResourceCommandTier.Read,
313
+ summary: "shows the server's version and build",
314
+ engines: ALL_ENGINES,
315
+ implementation: {
316
+ [DatabaseEngine.PostgreSQL]:
317
+ "SELECT version(), current_setting('server_version')",
318
+ [DatabaseEngine.MySQL]: "SELECT VERSION(), @@version_comment",
319
+ [DatabaseEngine.Redis]:
320
+ "INFO server (redis_version, redis_mode, os, uptime_in_seconds)",
321
+ [DatabaseEngine.MongoDB]: "buildInfo (version, gitVersion, modules)",
322
+ },
323
+ argument: null,
324
+ flags: [],
325
+ },
326
+ {
327
+ name: "sessions",
328
+ aliases: ["current-ops"],
329
+ tier: ResourceCommandTier.Read,
330
+ summary:
331
+ "lists the sessions (connections, clients or operations) and what each one is running",
332
+ engines: ALL_ENGINES,
333
+ implementation: {
334
+ [DatabaseEngine.PostgreSQL]:
335
+ "pg_stat_activity (pid, usename, datname, application_name, client_addr, state, wait_event_type, wait_event, backend_start, xact_start, query_start, query), without the agent's own backend",
336
+ [DatabaseEngine.MySQL]:
337
+ "information_schema.PROCESSLIST (ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO), without the agent's own connection",
338
+ [DatabaseEngine.Redis]:
339
+ "CLIENT LIST (id, addr, name, age, idle, db, cmd, user)",
340
+ [DatabaseEngine.MongoDB]:
341
+ "$currentOp with allUsers (opid, active, secs_running, ns, op, command, client, appName, effectiveUsers); idle connections only for --state idle",
342
+ },
343
+ argument: null,
344
+ flags: [
345
+ limitFlag(DATABASE_DEFAULT_ROW_LIMIT),
346
+ {
347
+ name: "state",
348
+ kind: DatabaseParamKind.Choice,
349
+ valueLabel: SESSION_STATES.join("|"),
350
+ description: "only sessions in this state",
351
+ choices: SESSION_STATES,
352
+ engines: SQL_AND_MONGO,
353
+ },
354
+ {
355
+ name: "user",
356
+ kind: DatabaseParamKind.Identifier,
357
+ valueLabel: "NAME",
358
+ description: "only this user's sessions",
359
+ },
360
+ {
361
+ name: "database",
362
+ kind: DatabaseParamKind.Identifier,
363
+ valueLabel: "NAME",
364
+ description:
365
+ "only sessions on this database (a Redis database number)",
366
+ },
367
+ ],
368
+ },
369
+ {
370
+ name: "long-queries",
371
+ aliases: [],
372
+ tier: ResourceCommandTier.Read,
373
+ summary:
374
+ "lists the statements that have been running for at least --min-seconds, longest first",
375
+ engines: SQL_AND_MONGO,
376
+ implementation: {
377
+ [DatabaseEngine.PostgreSQL]:
378
+ "pg_stat_activity where state <> 'idle' and now() - query_start >= min-seconds",
379
+ [DatabaseEngine.MySQL]:
380
+ "information_schema.PROCESSLIST where COMMAND <> 'Sleep' and TIME >= min-seconds",
381
+ [DatabaseEngine.MongoDB]:
382
+ "$currentOp with active: true and secs_running >= min-seconds",
383
+ },
384
+ argument: null,
385
+ flags: [
386
+ {
387
+ name: "min-seconds",
388
+ kind: DatabaseParamKind.Integer,
389
+ valueLabel: "N",
390
+ description: `running at least N seconds (0-${DATABASE_MAX_MIN_SECONDS}, default 5)`,
391
+ minimum: 0,
392
+ maximum: DATABASE_MAX_MIN_SECONDS,
393
+ defaultValue: 5,
394
+ },
395
+ limitFlag(DATABASE_DEFAULT_ROW_LIMIT),
396
+ ],
397
+ },
398
+ {
399
+ name: "blocking",
400
+ aliases: [],
401
+ tier: ResourceCommandTier.Read,
402
+ summary: "shows which sessions are blocked and which session blocks them",
403
+ engines: SQL_AND_MONGO,
404
+ implementation: {
405
+ [DatabaseEngine.PostgreSQL]:
406
+ "pg_stat_activity joined with pg_blocking_pids(pid)",
407
+ [DatabaseEngine.MySQL]:
408
+ "sys.innodb_lock_waits (performance_schema.data_lock_waits; information_schema.INNODB_LOCK_WAITS on MariaDB)",
409
+ [DatabaseEngine.MongoDB]:
410
+ "$currentOp with waitingForLock: true, with each operation's locks",
411
+ },
412
+ argument: null,
413
+ flags: [limitFlag(DATABASE_DEFAULT_ROW_LIMIT)],
414
+ },
415
+ {
416
+ name: "locks",
417
+ aliases: [],
418
+ tier: ResourceCommandTier.Read,
419
+ summary: "lists the locks held and awaited, with their sessions",
420
+ engines: SQL_AND_MONGO,
421
+ implementation: {
422
+ [DatabaseEngine.PostgreSQL]:
423
+ "pg_locks joined with pg_stat_activity (locktype, relation, mode, granted, pid)",
424
+ [DatabaseEngine.MySQL]:
425
+ "performance_schema.data_locks (information_schema.INNODB_LOCKS on MariaDB)",
426
+ [DatabaseEngine.MongoDB]: "$currentOp with each operation's locks",
427
+ },
428
+ argument: null,
429
+ flags: [limitFlag(DATABASE_DEFAULT_ROW_LIMIT)],
430
+ },
431
+ {
432
+ name: "replication",
433
+ aliases: [],
434
+ tier: ResourceCommandTier.Read,
435
+ summary: "shows the replication role, replicas and lag",
436
+ engines: ALL_ENGINES,
437
+ implementation: {
438
+ [DatabaseEngine.PostgreSQL]:
439
+ "pg_is_in_recovery(), pg_stat_replication and pg_replication_slots on a primary, pg_stat_wal_receiver and replay lag on a standby",
440
+ [DatabaseEngine.MySQL]:
441
+ "SHOW REPLICA STATUS (SHOW SLAVE STATUS before MySQL 8.0.22 and on MariaDB) and SHOW BINARY LOG STATUS / SHOW MASTER STATUS",
442
+ [DatabaseEngine.Redis]: "INFO replication",
443
+ [DatabaseEngine.MongoDB]:
444
+ "replSetGetStatus (members, state, optime lag); says so when the server is not in a replica set",
445
+ },
446
+ argument: null,
447
+ flags: [],
448
+ },
449
+ {
450
+ name: "connections",
451
+ aliases: [],
452
+ tier: ResourceCommandTier.Read,
453
+ summary:
454
+ "counts connections by state, user and database against the connection limit",
455
+ engines: ALL_ENGINES,
456
+ implementation: {
457
+ [DatabaseEngine.PostgreSQL]:
458
+ "pg_stat_activity grouped by state, usename, datname, with max_connections",
459
+ [DatabaseEngine.MySQL]:
460
+ "information_schema.PROCESSLIST grouped by USER, DB, COMMAND, with Threads_connected and max_connections",
461
+ [DatabaseEngine.Redis]:
462
+ "INFO clients and CLIENT LIST grouped by user and db, with maxclients",
463
+ [DatabaseEngine.MongoDB]:
464
+ "serverStatus.connections, and $currentOp grouped by client application",
465
+ },
466
+ argument: null,
467
+ flags: [],
468
+ },
469
+ {
470
+ name: "database-sizes",
471
+ aliases: [],
472
+ tier: ResourceCommandTier.Read,
473
+ summary: "lists each database's size on disk, largest first",
474
+ engines: SQL_AND_MONGO,
475
+ implementation: {
476
+ [DatabaseEngine.PostgreSQL]: "pg_database_size() of every database",
477
+ [DatabaseEngine.MySQL]:
478
+ "information_schema.TABLES summed per TABLE_SCHEMA",
479
+ [DatabaseEngine.MongoDB]: "listDatabases (sizeOnDisk)",
480
+ },
481
+ argument: null,
482
+ flags: [],
483
+ },
484
+ {
485
+ name: "table-sizes",
486
+ aliases: [],
487
+ tier: ResourceCommandTier.Read,
488
+ summary:
489
+ "lists the largest tables (collections on MongoDB) with their index sizes and row counts",
490
+ engines: SQL_AND_MONGO,
491
+ implementation: {
492
+ [DatabaseEngine.PostgreSQL]:
493
+ "pg_total_relation_size, pg_relation_size and pg_indexes_size per table of the connected database (--database must name it)",
494
+ [DatabaseEngine.MySQL]:
495
+ "information_schema.TABLES (DATA_LENGTH, INDEX_LENGTH, TABLE_ROWS)",
496
+ [DatabaseEngine.MongoDB]:
497
+ "$collStats storageStats (size, storageSize, totalIndexSize, count) per collection of --database",
498
+ },
499
+ argument: null,
500
+ flags: [
501
+ {
502
+ name: "database",
503
+ kind: DatabaseParamKind.Identifier,
504
+ valueLabel: "NAME",
505
+ description: "the database (schema on MySQL) to look in",
506
+ },
507
+ limitFlag(DATABASE_DEFAULT_ROW_LIMIT),
508
+ ],
509
+ },
510
+ {
511
+ name: "top-statements",
512
+ aliases: [],
513
+ tier: ResourceCommandTier.Read,
514
+ summary:
515
+ "lists the statements that took the most total time, with calls and mean time; their text is normalized, without values",
516
+ engines: [DatabaseEngine.PostgreSQL, DatabaseEngine.MySQL],
517
+ implementation: {
518
+ [DatabaseEngine.PostgreSQL]:
519
+ "pg_stat_statements ordered by total_exec_time (says so when the extension is not installed)",
520
+ [DatabaseEngine.MySQL]:
521
+ "performance_schema.events_statements_summary_by_digest ordered by SUM_TIMER_WAIT",
522
+ },
523
+ argument: null,
524
+ flags: [limitFlag(20)],
525
+ },
526
+ {
527
+ name: "settings",
528
+ aliases: [],
529
+ tier: ResourceCommandTier.Read,
530
+ summary:
531
+ "shows one server setting, or every setting when no name is given (credential settings are never shown)",
532
+ engines: ALL_ENGINES,
533
+ implementation: {
534
+ [DatabaseEngine.PostgreSQL]:
535
+ "pg_settings (name, setting, unit, source, pending_restart)",
536
+ [DatabaseEngine.MySQL]: "SHOW GLOBAL VARIABLES",
537
+ [DatabaseEngine.Redis]:
538
+ "CONFIG GET NAME (every parameter when no name is given)",
539
+ [DatabaseEngine.MongoDB]:
540
+ "getParameter NAME (allParameters when no name is given)",
541
+ },
542
+ argument: {
543
+ name: "name",
544
+ kind: DatabaseParamKind.SettingName,
545
+ valueLabel: "NAME",
546
+ description:
547
+ "the setting's exact name (work_mem, max_connections, maxmemory-policy, ...)",
548
+ required: false,
549
+ },
550
+ flags: [],
551
+ },
552
+ {
553
+ name: "slowlog",
554
+ aliases: [],
555
+ tier: ResourceCommandTier.Read,
556
+ summary: "shows the most recent slow commands the server logged",
557
+ engines: [DatabaseEngine.Redis, DatabaseEngine.MySQL],
558
+ implementation: {
559
+ [DatabaseEngine.Redis]: "SLOWLOG GET N",
560
+ [DatabaseEngine.MySQL]:
561
+ "mysql.slow_log (only when log_output includes TABLE; says so otherwise)",
562
+ },
563
+ argument: null,
564
+ flags: [limitFlag(20)],
565
+ },
566
+ {
567
+ name: "info",
568
+ aliases: [],
569
+ tier: ResourceCommandTier.Read,
570
+ summary:
571
+ "shows the server's INFO / serverStatus report, or one section of it",
572
+ engines: [DatabaseEngine.Redis, DatabaseEngine.MongoDB],
573
+ implementation: {
574
+ [DatabaseEngine.Redis]: "INFO [SECTION]",
575
+ [DatabaseEngine.MongoDB]:
576
+ "serverStatus, or one top-level section of it",
577
+ },
578
+ argument: {
579
+ name: "section",
580
+ kind: DatabaseParamKind.Choice,
581
+ valueLabel: "SECTION",
582
+ description: "one section of the report",
583
+ choices: uniqueWords([
584
+ REDIS_INFO_SECTIONS,
585
+ MONGODB_SERVER_STATUS_SECTIONS,
586
+ ]),
587
+ choicesByEngine: {
588
+ [DatabaseEngine.Redis]: REDIS_INFO_SECTIONS,
589
+ [DatabaseEngine.MongoDB]: MONGODB_SERVER_STATUS_SECTIONS,
590
+ },
591
+ required: false,
592
+ },
593
+ flags: [],
594
+ },
595
+ {
596
+ name: "innodb-status",
597
+ aliases: [],
598
+ tier: ResourceCommandTier.Read,
599
+ summary:
600
+ "shows InnoDB's status report: latest deadlock, transactions, buffer pool, I/O",
601
+ engines: [DatabaseEngine.MySQL],
602
+ implementation: {
603
+ [DatabaseEngine.MySQL]: "SHOW ENGINE INNODB STATUS",
604
+ },
605
+ argument: null,
606
+ flags: [],
607
+ },
608
+ {
609
+ name: "memory",
610
+ aliases: [],
611
+ tier: ResourceCommandTier.Read,
612
+ summary: "shows memory use, limits and fragmentation or cache pressure",
613
+ engines: [DatabaseEngine.Redis, DatabaseEngine.MongoDB],
614
+ implementation: {
615
+ [DatabaseEngine.Redis]: "INFO memory and MEMORY STATS",
616
+ [DatabaseEngine.MongoDB]: "serverStatus mem and wiredTiger.cache",
617
+ },
618
+ argument: null,
619
+ flags: [],
620
+ },
621
+ {
622
+ name: "keyspace",
623
+ aliases: [],
624
+ tier: ResourceCommandTier.Read,
625
+ summary:
626
+ "shows the key count, expiring keys and average TTL of each database",
627
+ engines: [DatabaseEngine.Redis],
628
+ implementation: {
629
+ [DatabaseEngine.Redis]: "INFO keyspace and DBSIZE",
630
+ },
631
+ argument: null,
632
+ flags: [],
633
+ },
634
+ {
635
+ name: "cancel-query",
636
+ aliases: [],
637
+ tier: ResourceCommandTier.SafeWrite,
638
+ summary:
639
+ "cancels the statement one session is running; the session stays connected and its client can retry",
640
+ engines: SQL_AND_MONGO,
641
+ implementation: {
642
+ [DatabaseEngine.PostgreSQL]: "SELECT pg_cancel_backend(ID)",
643
+ [DatabaseEngine.MySQL]: "KILL QUERY ID",
644
+ [DatabaseEngine.MongoDB]: "killOp { op: ID }",
645
+ },
646
+ argument: SESSION_ID_ARGUMENT,
647
+ flags: [],
648
+ },
649
+ {
650
+ name: "terminate-session",
651
+ aliases: [],
652
+ tier: ResourceCommandTier.RiskyWrite,
653
+ summary:
654
+ "disconnects one session, rolling back its open transaction; its client must reconnect",
655
+ engines: [
656
+ DatabaseEngine.PostgreSQL,
657
+ DatabaseEngine.MySQL,
658
+ DatabaseEngine.Redis,
659
+ ],
660
+ implementation: {
661
+ [DatabaseEngine.PostgreSQL]: "SELECT pg_terminate_backend(ID)",
662
+ [DatabaseEngine.MySQL]: "KILL CONNECTION ID",
663
+ [DatabaseEngine.Redis]: "CLIENT KILL ID ID",
664
+ },
665
+ argument: SESSION_ID_ARGUMENT,
666
+ flags: [],
667
+ },
668
+ ];
669
+
670
+ // The canonical operation names, in catalog order.
671
+ export const DATABASE_OPERATION_NAMES: ReadonlyArray<string> =
672
+ DATABASE_DIAGNOSTIC_OPERATIONS.map((operation: DatabaseOperationSpec) => {
673
+ return operation.name;
674
+ });
675
+
676
+ // The operation a word names exactly (canonical name or alias), or null.
677
+ export function getDatabaseOperation(
678
+ word: unknown,
679
+ ): DatabaseOperationSpec | null {
680
+ if (typeof word !== "string" || !word) {
681
+ return null;
682
+ }
683
+
684
+ for (const operation of DATABASE_DIAGNOSTIC_OPERATIONS) {
685
+ if (operation.name === word || operation.aliases.includes(word)) {
686
+ return operation;
687
+ }
688
+ }
689
+
690
+ return null;
691
+ }
692
+
693
+ /*
694
+ * Setting names that hold (or name) a credential: Redis requirepass and
695
+ * masterauth — which Valkey 8 and later name primaryauth, and list under
696
+ * both names — and any other *auth setting, MySQL/PostgreSQL password
697
+ * settings, anything with a secret or token in its name. `db settings`
698
+ * refuses them by name, and the executor leaves them out when it lists
699
+ * every setting.
700
+ */
701
+ const CREDENTIAL_SETTING_NAME_REGEX: RegExp =
702
+ /pass|pwd|secret|token|credential|masterauth|primaryauth|auth$|private[-_.]?key|api[-_.]?key|keyfile|key[-_.]?file/i;
703
+
704
+ export function isDatabaseCredentialSettingName(name: unknown): boolean {
705
+ return typeof name === "string" && CREDENTIAL_SETTING_NAME_REGEX.test(name);
706
+ }
707
+
708
+ // A parameter's value, as the executor receives it.
709
+ export type DatabaseParamValue = string | number;
710
+
711
+ // One `db` command, read.
712
+ export interface ParsedDatabaseCommand {
713
+ operation: DatabaseOperationSpec;
714
+ // The argument's value (a number for a session id), or null.
715
+ argument: DatabaseParamValue | null;
716
+ // Each given flag's value by flag name (numbers for Integer flags).
717
+ flags: Record<string, DatabaseParamValue>;
718
+ // The canonical argv WITHOUT the program: operation, argument, flags in catalog order.
719
+ canonicalArgs: Array<string>;
720
+ }
721
+
722
+ export type DatabaseCommandParse =
723
+ | { ok: true; command: ParsedDatabaseCommand }
724
+ | { ok: false; errorMessage: string };
725
+
726
+ const INTEGER_REGEX: RegExp = /^(?:0|[1-9][0-9]{0,8})$/;
727
+ const IDENTIFIER_REGEX: RegExp = /^[A-Za-z0-9_.$][A-Za-z0-9_.$-]{0,127}$/;
728
+ const SETTING_NAME_REGEX: RegExp = /^[A-Za-z0-9_][A-Za-z0-9_.-]{0,63}$/;
729
+ const SESSION_ID_REGEX: RegExp = /^[1-9][0-9]{0,14}$/;
730
+ const FLAG_NAME_REGEX: RegExp = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
731
+
732
+ // The longest word quoted back in a refusal.
733
+ const MAX_QUOTED_WORD_LENGTH: number = 64;
734
+
735
+ // A word as a refusal quotes it: JSON-escaped, and cut when it is long.
736
+ function quoteWord(word: string): string {
737
+ const shown: string =
738
+ word.length > MAX_QUOTED_WORD_LENGTH
739
+ ? `${word.slice(0, MAX_QUOTED_WORD_LENGTH)}...`
740
+ : word;
741
+
742
+ return JSON.stringify(shown);
743
+ }
744
+
745
+ function joinWords(words: ReadonlyArray<string>, conjunction: string): string {
746
+ if (words.length <= 1) {
747
+ return words.join("");
748
+ }
749
+
750
+ return `${words.slice(0, -1).join(", ")} ${conjunction} ${
751
+ words[words.length - 1]
752
+ }`;
753
+ }
754
+
755
+ // "db sessions [--limit N] [--state active|idle|...] ..." for one operation.
756
+ export function describeDatabaseOperationUsage(
757
+ operation: DatabaseOperationSpec,
758
+ engine: DatabaseEngine | null = null,
759
+ ): string {
760
+ const words: Array<string> = [DATABASE_PROGRAM, operation.name];
761
+
762
+ if (operation.argument) {
763
+ const label: string = describeValueLabel(operation.argument, engine);
764
+ words.push(operation.argument.required ? label : `[${label}]`);
765
+ }
766
+
767
+ for (const flag of operation.flags) {
768
+ if (engine && flag.engines && !flag.engines.includes(engine)) {
769
+ continue;
770
+ }
771
+
772
+ words.push(`[--${flag.name} ${describeValueLabel(flag, engine)}]`);
773
+ }
774
+
775
+ return words.join(" ");
776
+ }
777
+
778
+ function describeValueLabel(
779
+ param: DatabaseParamSpec,
780
+ engine: DatabaseEngine | null,
781
+ ): string {
782
+ if (param.kind !== DatabaseParamKind.Choice) {
783
+ return param.valueLabel;
784
+ }
785
+
786
+ const choices: ReadonlyArray<string> = choicesFor(param, engine);
787
+
788
+ // A long list reads better in the parameter's description.
789
+ return choices.length <= 4 ? choices.join("|") : param.valueLabel;
790
+ }
791
+
792
+ function choicesFor(
793
+ param: DatabaseParamSpec,
794
+ engine: DatabaseEngine | null,
795
+ ): ReadonlyArray<string> {
796
+ if (engine && param.choicesByEngine && param.choicesByEngine[engine]) {
797
+ return param.choicesByEngine[engine] || [];
798
+ }
799
+
800
+ return param.choices || [];
801
+ }
802
+
803
+ // "takes --limit, --state, --user and --database" / "takes no flags".
804
+ function describeFlags(operation: DatabaseOperationSpec): string {
805
+ if (operation.flags.length === 0) {
806
+ return `db ${operation.name} takes no flags`;
807
+ }
808
+
809
+ return `db ${operation.name} takes ${joinWords(
810
+ operation.flags.map((flag: DatabaseParamSpec): string => {
811
+ return `--${flag.name}`;
812
+ }),
813
+ "and",
814
+ )}`;
815
+ }
816
+
817
+ function operationList(): string {
818
+ const reads: Array<string> = [];
819
+ const writes: Array<string> = [];
820
+
821
+ for (const operation of DATABASE_DIAGNOSTIC_OPERATIONS) {
822
+ const names: string = [operation.name, ...operation.aliases].join(", ");
823
+
824
+ if (operation.tier === ResourceCommandTier.Read) {
825
+ reads.push(names);
826
+ } else {
827
+ writes.push(names);
828
+ }
829
+ }
830
+
831
+ return `the db operations are ${reads.join(", ")} (read-only) and ${joinWords(
832
+ writes,
833
+ "and",
834
+ )} (changes)`;
835
+ }
836
+
837
+ /*
838
+ * Words a model reaches for that would run text it wrote: SQL, a Redis
839
+ * command, Mongo shell code, a script. None exists, whatever the spelling.
840
+ */
841
+ const FREE_TEXT_OPERATIONS: ReadonlyArray<string> = [
842
+ "sql",
843
+ "query",
844
+ "queries",
845
+ "exec",
846
+ "execute",
847
+ "eval",
848
+ "evalsha",
849
+ "script",
850
+ "run",
851
+ "shell",
852
+ "raw",
853
+ "command",
854
+ "cmd",
855
+ "statement",
856
+ "select",
857
+ "explain",
858
+ "call",
859
+ "function",
860
+ "psql",
861
+ "mysql",
862
+ "mongosh",
863
+ "mongo",
864
+ "redis-cli",
865
+ "cli",
866
+ "console",
867
+ "aggregate",
868
+ "find",
869
+ ];
870
+
871
+ /*
872
+ * Words for changes the catalog does not have. The agent changes nothing
873
+ * but one session at a time.
874
+ */
875
+ const CHANGE_OPERATIONS: ReadonlyArray<string> = [
876
+ "config",
877
+ "config-set",
878
+ "set",
879
+ "set-setting",
880
+ "alter",
881
+ "alter-system",
882
+ "reload",
883
+ "flushall",
884
+ "flushdb",
885
+ "flush",
886
+ "shutdown",
887
+ "restart",
888
+ "drop",
889
+ "truncate",
890
+ "delete",
891
+ "del",
892
+ "unlink",
893
+ "insert",
894
+ "update",
895
+ "create",
896
+ "grant",
897
+ "revoke",
898
+ "vacuum",
899
+ "analyze",
900
+ "reindex",
901
+ "optimize",
902
+ "repair",
903
+ "save",
904
+ "bgsave",
905
+ "bgrewriteaof",
906
+ "replicaof",
907
+ "slaveof",
908
+ "failover",
909
+ "stepdown",
910
+ "migrate",
911
+ "expire",
912
+ "debug",
913
+ "acl",
914
+ "client",
915
+ "module",
916
+ "compact",
917
+ "kill-all",
918
+ ];
919
+
920
+ // Words for the two changes the catalog does have, spelled another way.
921
+ const SESSION_CHANGE_SPELLINGS: ReadonlyArray<string> = [
922
+ "kill",
923
+ "killop",
924
+ "kill-op",
925
+ "kill-query",
926
+ "cancel",
927
+ "cancel-backend",
928
+ "pg-cancel-backend",
929
+ "terminate",
930
+ "terminate-backend",
931
+ "pg-terminate-backend",
932
+ "kill-session",
933
+ "kill-connection",
934
+ "disconnect",
935
+ "client-kill",
936
+ ];
937
+
938
+ // Why the word is not an operation, and what to write instead.
939
+ function describeUnknownOperation(word: string): string {
940
+ const folded: string = word.toLowerCase().replace(/_/g, "-");
941
+ const exact: DatabaseOperationSpec | null = getDatabaseOperation(folded);
942
+
943
+ if (exact) {
944
+ return `${quoteWord(word)} is not a db operation; operations are lowercase words joined by dashes, so write "db ${exact.name}"`;
945
+ }
946
+
947
+ if (SESSION_CHANGE_SPELLINGS.includes(folded)) {
948
+ return `${quoteWord(word)} is not a db operation: to stop one session's running statement write "db cancel-query ID", to disconnect it write "db terminate-session ID" (ID is the number db sessions prints)`;
949
+ }
950
+
951
+ if (FREE_TEXT_OPERATIONS.includes(folded)) {
952
+ return `${quoteWord(word)} is not a db operation: db never runs SQL, database commands or scripts the model writes, only operations from its fixed catalog; ${operationList()}`;
953
+ }
954
+
955
+ if (CHANGE_OPERATIONS.includes(folded)) {
956
+ return `${quoteWord(word)} is not a db operation: the only changes db makes are cancel-query and terminate-session (one session at a time); settings, data, schema, replication and the server itself are never changed; ${operationList()}`;
957
+ }
958
+
959
+ return `${quoteWord(word)} is not a db operation; ${operationList()}`;
960
+ }
961
+
962
+ /*
963
+ * Flags a real database CLI takes to pick the server, the login or TLS. The
964
+ * agent connects with its own configuration only, so none exists here.
965
+ */
966
+ const CONNECTION_FLAGS: ReadonlyArray<string> = [
967
+ "host",
968
+ "hostname",
969
+ "port",
970
+ "socket",
971
+ "password",
972
+ "pass",
973
+ "pwd",
974
+ "username",
975
+ "login",
976
+ "login-path",
977
+ "uri",
978
+ "url",
979
+ "dsn",
980
+ "conn",
981
+ "connection",
982
+ "connection-string",
983
+ "auth",
984
+ "authentication-database",
985
+ "auth-source",
986
+ "tls",
987
+ "ssl",
988
+ "ssl-mode",
989
+ "sslmode",
990
+ "cert",
991
+ "key",
992
+ "ca",
993
+ "config",
994
+ "config-file",
995
+ "defaults-file",
996
+ "defaults-extra-file",
997
+ "init-command",
998
+ "server",
999
+ "cluster",
1000
+ "role",
1001
+ ];
1002
+
1003
+ // Why a value is not what the parameter takes; null when it is.
1004
+ function describeValueProblem(
1005
+ param: DatabaseParamSpec,
1006
+ value: string,
1007
+ shownName: string,
1008
+ ): string | null {
1009
+ switch (param.kind) {
1010
+ case DatabaseParamKind.Integer: {
1011
+ const minimum: number = param.minimum === undefined ? 0 : param.minimum;
1012
+ const maximum: number =
1013
+ param.maximum === undefined ? DATABASE_MAX_ROW_LIMIT : param.maximum;
1014
+
1015
+ if (INTEGER_REGEX.test(value)) {
1016
+ const parsed: number = Number(value);
1017
+
1018
+ if (parsed >= minimum && parsed <= maximum) {
1019
+ return null;
1020
+ }
1021
+ }
1022
+
1023
+ return `${shownName} must be a whole number from ${minimum} to ${maximum}, written without leading zeros (got ${quoteWord(value)})`;
1024
+ }
1025
+
1026
+ case DatabaseParamKind.Identifier:
1027
+ return IDENTIFIER_REGEX.test(value)
1028
+ ? null
1029
+ : `${shownName} must be a name of 1-${DATABASE_MAX_IDENTIFIER_LENGTH} letters, digits and _ . $ - that does not start with "-" (got ${quoteWord(value)})`;
1030
+
1031
+ case DatabaseParamKind.Choice: {
1032
+ const choices: ReadonlyArray<string> = param.choices || [];
1033
+
1034
+ if (choices.includes(value)) {
1035
+ return null;
1036
+ }
1037
+
1038
+ const folded: string | undefined = choices.find(
1039
+ (choice: string): boolean => {
1040
+ return choice.toLowerCase() === value.toLowerCase();
1041
+ },
1042
+ );
1043
+
1044
+ return folded
1045
+ ? `${shownName} is case-sensitive: write ${quoteWord(folded)} (got ${quoteWord(value)})`
1046
+ : `${shownName} must be one of ${choices.join(", ")} (got ${quoteWord(value)})`;
1047
+ }
1048
+
1049
+ case DatabaseParamKind.SettingName:
1050
+ if (!SETTING_NAME_REGEX.test(value)) {
1051
+ return `${shownName} must be one setting's exact name: 1-${DATABASE_MAX_SETTING_NAME_LENGTH} letters, digits and _ . - (no wildcards; got ${quoteWord(value)})`;
1052
+ }
1053
+
1054
+ return isDatabaseCredentialSettingName(value)
1055
+ ? `${quoteWord(value)} is a credential setting, and db never reads credentials`
1056
+ : null;
1057
+
1058
+ case DatabaseParamKind.SessionId:
1059
+ if (SESSION_ID_REGEX.test(value)) {
1060
+ return null;
1061
+ }
1062
+
1063
+ return value.startsWith("session:")
1064
+ ? `${shownName} is the bare number: write ${quoteWord(value.slice("session:".length))}, not ${quoteWord(value)}`
1065
+ : `${shownName} must be the numeric session id db sessions prints: a positive whole number of at most ${DATABASE_MAX_SESSION_ID_DIGITS} digits, without leading zeros (got ${quoteWord(value)})`;
1066
+
1067
+ default:
1068
+ return `${shownName} has a type db does not know`;
1069
+ }
1070
+ }
1071
+
1072
+ function toParamValue(
1073
+ param: DatabaseParamSpec,
1074
+ value: string,
1075
+ ): DatabaseParamValue {
1076
+ return param.kind === DatabaseParamKind.Integer ||
1077
+ param.kind === DatabaseParamKind.SessionId
1078
+ ? Number(value)
1079
+ : value;
1080
+ }
1081
+
1082
+ function refuse(errorMessage: string): DatabaseCommandParse {
1083
+ return { ok: false, errorMessage };
1084
+ }
1085
+
1086
+ /*
1087
+ * Read one `db` argv (argv[0] is the program) into one catalog operation,
1088
+ * or say why it is not one. Total: anything that is not an array of
1089
+ * strings, however malformed, is refused, never thrown on.
1090
+ */
1091
+ export function parseDatabaseCommand(argv: unknown): DatabaseCommandParse {
1092
+ if (!Array.isArray(argv) || argv.length === 0) {
1093
+ return refuse("empty command");
1094
+ }
1095
+
1096
+ if (
1097
+ argv.some((word: unknown): boolean => {
1098
+ return typeof word !== "string";
1099
+ })
1100
+ ) {
1101
+ return refuse("every word of the command must be a string");
1102
+ }
1103
+
1104
+ const words: Array<string> = argv as Array<string>;
1105
+
1106
+ if (words[0] !== DATABASE_PROGRAM) {
1107
+ return refuse(
1108
+ `a database command starts with "${DATABASE_PROGRAM}" (got ${quoteWord(words[0] || "")})`,
1109
+ );
1110
+ }
1111
+
1112
+ const operationWord: string | undefined = words[1];
1113
+
1114
+ if (operationWord === undefined || operationWord === "") {
1115
+ return refuse(
1116
+ `name an operation: "db <operation> [argument] [--flag value]"; ${operationList()}`,
1117
+ );
1118
+ }
1119
+
1120
+ if (operationWord.startsWith("-")) {
1121
+ return refuse(
1122
+ `the operation comes right after "db", before any flag (got ${quoteWord(operationWord)}); ${operationList()}`,
1123
+ );
1124
+ }
1125
+
1126
+ const operation: DatabaseOperationSpec | null =
1127
+ getDatabaseOperation(operationWord);
1128
+
1129
+ if (!operation) {
1130
+ return refuse(describeUnknownOperation(operationWord));
1131
+ }
1132
+
1133
+ const usage: string = `usage: ${describeDatabaseOperationUsage(operation)}`;
1134
+ const flags: Record<string, DatabaseParamValue> = {};
1135
+ const given: Array<string> = [];
1136
+ let argument: DatabaseParamValue | null = null;
1137
+ let argumentWord: string | null = null;
1138
+ let afterDoubleDash: boolean = false;
1139
+
1140
+ for (let i: number = 2; i < words.length; i++) {
1141
+ const word: string = words[i]!;
1142
+
1143
+ if (!afterDoubleDash && word === "--") {
1144
+ afterDoubleDash = true;
1145
+ continue;
1146
+ }
1147
+
1148
+ if (!afterDoubleDash && word.startsWith("-") && word !== "-") {
1149
+ if (!word.startsWith("--")) {
1150
+ return refuse(
1151
+ `db takes long flags only, written like "--limit 20" or "--limit=20"; ${quoteWord(word)} is not one (${describeFlags(operation)}; ${usage})`,
1152
+ );
1153
+ }
1154
+
1155
+ const equals: number = word.indexOf("=");
1156
+ const rawName: string =
1157
+ equals >= 0 ? word.slice(2, equals) : word.slice(2);
1158
+
1159
+ if (!FLAG_NAME_REGEX.test(rawName)) {
1160
+ const lower: string = rawName.toLowerCase().replace(/_/g, "-");
1161
+ const known: DatabaseParamSpec | undefined = operation.flags.find(
1162
+ (flag: DatabaseParamSpec): boolean => {
1163
+ return flag.name === lower;
1164
+ },
1165
+ );
1166
+
1167
+ return refuse(
1168
+ known
1169
+ ? `flags are lowercase words joined by dashes: write --${known.name}, not ${quoteWord(`--${rawName}`)}`
1170
+ : `${quoteWord(word)} is not a flag db knows (${describeFlags(operation)}; ${usage})`,
1171
+ );
1172
+ }
1173
+
1174
+ const flag: DatabaseParamSpec | undefined = operation.flags.find(
1175
+ (candidate: DatabaseParamSpec): boolean => {
1176
+ return candidate.name === rawName;
1177
+ },
1178
+ );
1179
+
1180
+ if (!flag) {
1181
+ if (CONNECTION_FLAGS.includes(rawName)) {
1182
+ return refuse(
1183
+ `--${rawName} is not available: the Database AI agent connects to its own database with its own configuration, so a command cannot choose the server, the login or TLS (${describeFlags(operation)})`,
1184
+ );
1185
+ }
1186
+
1187
+ return refuse(
1188
+ `${describeFlags(operation)}, not --${rawName} (${usage})`,
1189
+ );
1190
+ }
1191
+
1192
+ if (given.includes(flag.name)) {
1193
+ return refuse(
1194
+ `--${flag.name} is given more than once; give each flag once (${usage})`,
1195
+ );
1196
+ }
1197
+
1198
+ let value: string;
1199
+
1200
+ if (equals >= 0) {
1201
+ value = word.slice(equals + 1);
1202
+ } else {
1203
+ const next: string | undefined = words[i + 1];
1204
+
1205
+ // Never take a flag-looking word as a value: it would skip that flag's check.
1206
+ if (next === undefined || next.startsWith("-")) {
1207
+ return refuse(
1208
+ `--${flag.name} needs a value${
1209
+ next === undefined
1210
+ ? ""
1211
+ : `, but the next word is ${quoteWord(next)}`
1212
+ } (${usage})`,
1213
+ );
1214
+ }
1215
+
1216
+ value = next;
1217
+ i++;
1218
+ }
1219
+
1220
+ if (value === "") {
1221
+ return refuse(`--${flag.name} needs a value (${usage})`);
1222
+ }
1223
+
1224
+ const problem: string | null = describeValueProblem(
1225
+ flag,
1226
+ value,
1227
+ `--${flag.name}`,
1228
+ );
1229
+
1230
+ if (problem) {
1231
+ return refuse(problem);
1232
+ }
1233
+
1234
+ given.push(flag.name);
1235
+ flags[flag.name] = toParamValue(flag, value);
1236
+ continue;
1237
+ }
1238
+
1239
+ // A positional word: the operation's one argument.
1240
+ if (!operation.argument) {
1241
+ return refuse(
1242
+ `db ${operation.name} takes no argument (got ${quoteWord(word)}; ${usage})`,
1243
+ );
1244
+ }
1245
+
1246
+ if (argumentWord !== null) {
1247
+ return refuse(
1248
+ `db ${operation.name} takes one ${operation.argument.valueLabel}, but got ${quoteWord(argumentWord)} and ${quoteWord(word)} (${usage})`,
1249
+ );
1250
+ }
1251
+
1252
+ const problem: string | null = describeValueProblem(
1253
+ operation.argument,
1254
+ word,
1255
+ operation.argument.valueLabel,
1256
+ );
1257
+
1258
+ if (problem) {
1259
+ return refuse(`${problem} (${usage})`);
1260
+ }
1261
+
1262
+ argumentWord = word;
1263
+ argument = toParamValue(operation.argument, word);
1264
+ }
1265
+
1266
+ if (
1267
+ operation.argument &&
1268
+ operation.argument.required &&
1269
+ argumentWord === null
1270
+ ) {
1271
+ return refuse(
1272
+ `db ${operation.name} needs ${operation.argument.valueLabel}: ${operation.argument.description} (${usage})`,
1273
+ );
1274
+ }
1275
+
1276
+ const canonicalArgs: Array<string> = [operation.name];
1277
+
1278
+ if (argumentWord !== null) {
1279
+ canonicalArgs.push(argumentWord);
1280
+ }
1281
+
1282
+ for (const flag of operation.flags) {
1283
+ if (Object.prototype.hasOwnProperty.call(flags, flag.name)) {
1284
+ canonicalArgs.push(`--${flag.name}`, String(flags[flag.name]));
1285
+ }
1286
+ }
1287
+
1288
+ return {
1289
+ ok: true,
1290
+ command: { operation, argument, flags, canonicalArgs },
1291
+ };
1292
+ }
1293
+
1294
+ /*
1295
+ * Why this engine cannot run the parsed command, or null when it can: an
1296
+ * unknown engine, an operation the engine lacks, a flag that does not apply
1297
+ * to it, a choice it does not have. The executor asks this before it runs
1298
+ * anything; the policy does not (it tiers without knowing the engine).
1299
+ */
1300
+ export function getDatabaseEngineRefusal(
1301
+ command: ParsedDatabaseCommand,
1302
+ engineValue: unknown,
1303
+ ): string | null {
1304
+ const engine: DatabaseEngine | null = parseDatabaseEngine(engineValue);
1305
+
1306
+ if (!engine) {
1307
+ return `the Database AI agent does not know the engine ${quoteWord(
1308
+ typeof engineValue === "string" ? engineValue : String(engineValue),
1309
+ )}: it runs its catalog on ${joinWords(
1310
+ ALL_DATABASE_ENGINES.map((known: DatabaseEngine): string => {
1311
+ return DATABASE_ENGINE_DISPLAY_NAMES[known];
1312
+ }),
1313
+ "and",
1314
+ )}`;
1315
+ }
1316
+
1317
+ const name: string = DATABASE_ENGINE_DISPLAY_NAMES[engine];
1318
+
1319
+ if (!command || !command.operation) {
1320
+ return "the command could not be read";
1321
+ }
1322
+
1323
+ const operation: DatabaseOperationSpec = command.operation;
1324
+
1325
+ if (!operation.engines.includes(engine)) {
1326
+ return `db ${operation.name} is not available on ${name}; on ${name} the operations are ${getDatabaseOperationsForEngine(
1327
+ engine,
1328
+ )
1329
+ .map((candidate: DatabaseOperationSpec): string => {
1330
+ return candidate.name;
1331
+ })
1332
+ .join(", ")}`;
1333
+ }
1334
+
1335
+ for (const flag of operation.flags) {
1336
+ if (
1337
+ Object.prototype.hasOwnProperty.call(command.flags || {}, flag.name) &&
1338
+ flag.engines &&
1339
+ !flag.engines.includes(engine)
1340
+ ) {
1341
+ return `--${flag.name} is not available for db ${operation.name} on ${name}`;
1342
+ }
1343
+ }
1344
+
1345
+ if (
1346
+ operation.argument &&
1347
+ operation.argument.kind === DatabaseParamKind.Choice &&
1348
+ command.argument !== null &&
1349
+ command.argument !== undefined
1350
+ ) {
1351
+ const choices: ReadonlyArray<string> = choicesFor(
1352
+ operation.argument,
1353
+ engine,
1354
+ );
1355
+
1356
+ if (!choices.includes(String(command.argument))) {
1357
+ return `${quoteWord(String(command.argument))} is not a ${operation.argument.valueLabel} on ${name}; ${name} has ${choices.join(", ")}`;
1358
+ }
1359
+ }
1360
+
1361
+ return null;
1362
+ }
1363
+
1364
+ // The operations one engine supports, in catalog order.
1365
+ export function getDatabaseOperationsForEngine(
1366
+ engine: DatabaseEngine,
1367
+ ): Array<DatabaseOperationSpec> {
1368
+ return DATABASE_DIAGNOSTIC_OPERATIONS.filter(
1369
+ (operation: DatabaseOperationSpec): boolean => {
1370
+ return operation.engines.includes(engine);
1371
+ },
1372
+ );
1373
+ }
1374
+
1375
+ function engineTag(
1376
+ engines: ReadonlyArray<DatabaseEngine>,
1377
+ engine: DatabaseEngine | null,
1378
+ ): string {
1379
+ if (engine || engines.length === ALL_DATABASE_ENGINES.length) {
1380
+ return "";
1381
+ }
1382
+
1383
+ return ` (${engines
1384
+ .map((candidate: DatabaseEngine): string => {
1385
+ return DATABASE_ENGINE_DISPLAY_NAMES[candidate];
1386
+ })
1387
+ .join(", ")})`;
1388
+ }
1389
+
1390
+ // Notes on the flags and choices that apply to only some engines, or have a long list.
1391
+ function paramNotes(
1392
+ operation: DatabaseOperationSpec,
1393
+ engine: DatabaseEngine | null,
1394
+ ): string {
1395
+ const notes: Array<string> = [];
1396
+
1397
+ for (const flag of operation.flags) {
1398
+ if (!engine && flag.engines) {
1399
+ notes.push(
1400
+ `--${flag.name} on ${flag.engines
1401
+ .map((candidate: DatabaseEngine): string => {
1402
+ return DATABASE_ENGINE_DISPLAY_NAMES[candidate];
1403
+ })
1404
+ .join(", ")} only`,
1405
+ );
1406
+ }
1407
+ }
1408
+
1409
+ const argumentSpec: DatabaseArgumentSpec | null = operation.argument;
1410
+
1411
+ if (
1412
+ argumentSpec &&
1413
+ argumentSpec.kind === DatabaseParamKind.Choice &&
1414
+ choicesFor(argumentSpec, engine).length > 4
1415
+ ) {
1416
+ if (engine) {
1417
+ notes.push(
1418
+ `${argumentSpec.valueLabel}: ${choicesFor(argumentSpec, engine).join(", ")}`,
1419
+ );
1420
+ } else if (argumentSpec.choicesByEngine) {
1421
+ for (const candidate of ALL_DATABASE_ENGINES) {
1422
+ const choices: ReadonlyArray<string> | undefined =
1423
+ argumentSpec.choicesByEngine[candidate];
1424
+
1425
+ if (choices) {
1426
+ notes.push(
1427
+ `${DATABASE_ENGINE_DISPLAY_NAMES[candidate]} ${argumentSpec.valueLabel}: ${choices.join(", ")}`,
1428
+ );
1429
+ }
1430
+ }
1431
+ }
1432
+ }
1433
+
1434
+ return notes.length ? `; ${notes.join("; ")}` : "";
1435
+ }
1436
+
1437
+ function operationBullet(
1438
+ operation: DatabaseOperationSpec,
1439
+ engine: DatabaseEngine | null,
1440
+ ): string {
1441
+ const aliases: string = operation.aliases.length
1442
+ ? ` (also \`${operation.aliases
1443
+ .map((alias: string): string => {
1444
+ return `db ${alias}`;
1445
+ })
1446
+ .join("`, `")}\`)`
1447
+ : "";
1448
+
1449
+ return `- \`${describeDatabaseOperationUsage(operation, engine)}\`${aliases}: ${
1450
+ operation.summary
1451
+ }${engineTag(operation.engines, engine)}${paramNotes(operation, engine)}.`;
1452
+ }
1453
+
1454
+ function guideOperations(
1455
+ engine: DatabaseEngine | null,
1456
+ isRead: boolean,
1457
+ ): Array<DatabaseOperationSpec> {
1458
+ return DATABASE_DIAGNOSTIC_OPERATIONS.filter(
1459
+ (operation: DatabaseOperationSpec): boolean => {
1460
+ return (
1461
+ (operation.tier === ResourceCommandTier.Read) === isRead &&
1462
+ (!engine || operation.engines.includes(engine))
1463
+ );
1464
+ },
1465
+ );
1466
+ }
1467
+
1468
+ /*
1469
+ * The read cheat-sheet for the investigation tool: compact markdown
1470
+ * bullets. With an engine (a DATABASE_SYSTEM value such as "postgresql" or
1471
+ * "mariadb"), only what that engine supports; otherwise every operation,
1472
+ * tagged with the engines it runs on.
1473
+ */
1474
+ export function getDatabaseReadCommandGuide(engineValue?: unknown): string {
1475
+ const engine: DatabaseEngine | null = parseDatabaseEngine(engineValue);
1476
+ const where: string = engine
1477
+ ? ` on this ${DATABASE_ENGINE_DISPLAY_NAMES[engine]} server`
1478
+ : "";
1479
+
1480
+ return [
1481
+ `- \`db\` runs one operation from a fixed diagnostic catalog${where} — never SQL, database commands or scripts you write: \`db <operation> [argument] [--flag value]\`, long flags only (\`--limit 20\` or \`--limit=20\`), each flag once.`,
1482
+ ...guideOperations(engine, true).map(
1483
+ (operation: DatabaseOperationSpec): string => {
1484
+ return operationBullet(operation, engine);
1485
+ },
1486
+ ),
1487
+ "- Query text in results is normalized: string and number literals show as ? (credentials are never shown).",
1488
+ ].join("\n");
1489
+ }
1490
+
1491
+ /*
1492
+ * The write cheat-sheet for the remediation tools: the two changes, their
1493
+ * tiers and targets, and what never changes.
1494
+ */
1495
+ export function getDatabaseWriteCommandGuide(engineValue?: unknown): string {
1496
+ const engine: DatabaseEngine | null = parseDatabaseEngine(engineValue);
1497
+ const lines: Array<string> = [];
1498
+
1499
+ for (const operation of guideOperations(engine, false)) {
1500
+ const tier: string =
1501
+ operation.tier === ResourceCommandTier.SafeWrite
1502
+ ? "safe: may run without approval in Automatic mode"
1503
+ : "risky: needs approval unless allowlisted or approvals are bypassed";
1504
+
1505
+ lines.push(
1506
+ `- \`${describeDatabaseOperationUsage(operation, engine)}\` (${tier}): ${
1507
+ operation.summary
1508
+ }${engineTag(operation.engines, engine)}.`,
1509
+ );
1510
+ }
1511
+
1512
+ if (lines.length === 0) {
1513
+ lines.push(
1514
+ `- No changes: db makes no change on ${
1515
+ engine ? DATABASE_ENGINE_DISPLAY_NAMES[engine] : "this engine"
1516
+ }.`,
1517
+ );
1518
+ } else {
1519
+ lines.push(
1520
+ `- ID is the number \`db sessions\` prints (${SESSION_ID_ARGUMENT.description.replace(
1521
+ /^the numeric id `db sessions` prints: /,
1522
+ "",
1523
+ )}); the change's target is \`session:ID\`, one session per command.`,
1524
+ );
1525
+ }
1526
+
1527
+ lines.push(
1528
+ "- Nothing else changes the database: no SQL, no setting changes (ALTER SYSTEM, SET GLOBAL, CONFIG SET), no FLUSHALL/FLUSHDB, no SHUTDOWN, no schema, data, user or replication changes.",
1529
+ );
1530
+
1531
+ return lines.join("\n");
1532
+ }