@oneuptime/common 14.0.8 → 14.0.10

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 (976) hide show
  1. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  2. package/Models/DatabaseModels/CephCluster.ts +213 -0
  3. package/Models/DatabaseModels/DatabaseServer.ts +213 -0
  4. package/Models/DatabaseModels/DockerHost.ts +213 -0
  5. package/Models/DatabaseModels/DockerSwarmCluster.ts +213 -0
  6. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  7. package/Models/DatabaseModels/Host.ts +213 -0
  8. package/Models/DatabaseModels/Index.ts +4 -0
  9. package/Models/DatabaseModels/KubernetesAiAgent.ts +364 -0
  10. package/Models/DatabaseModels/KubernetesCluster.ts +3 -3
  11. package/Models/DatabaseModels/PodmanHost.ts +213 -0
  12. package/Models/DatabaseModels/Project.ts +55 -5
  13. package/Models/DatabaseModels/ProxmoxCluster.ts +213 -0
  14. package/Models/DatabaseModels/ProxmoxResource.ts +49 -1
  15. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  16. package/Models/DatabaseModels/RunnerJob.ts +219 -0
  17. package/Models/DatabaseModels/TeamComplianceSetting.ts +143 -2
  18. package/Models/DatabaseModels/VMwareVCenter.ts +213 -0
  19. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +17 -0
  20. package/Server/API/AIChatAPI.ts +6 -3
  21. package/Server/API/AIInvestigationAPI.ts +17 -10
  22. package/Server/API/AutoRemediationAPI.ts +598 -25
  23. package/Server/API/KubernetesClusterAiAccessAPI.ts +623 -21
  24. package/Server/API/MicrosoftTeamsAPI.ts +93 -14
  25. package/Server/API/ProxmoxResourceAPI.ts +244 -14
  26. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  27. package/Server/Infrastructure/GlobalCache.ts +32 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.ts +99 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.ts +137 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.ts +42 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  33. package/Server/Infrastructure/Semaphore.ts +22 -0
  34. package/Server/Middleware/TelemetryIngest.ts +51 -18
  35. package/Server/Services/AIService.ts +70 -1
  36. package/Server/Services/AlertService.ts +352 -11
  37. package/Server/Services/AlertSeverityService.ts +65 -15
  38. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  39. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  40. package/Server/Services/AutoRemediationRuleService.ts +1 -1
  41. package/Server/Services/CephClusterService.ts +109 -1
  42. package/Server/Services/DatabaseServerService.ts +116 -1
  43. package/Server/Services/DockerHostService.ts +109 -1
  44. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  45. package/Server/Services/HostService.ts +126 -4
  46. package/Server/Services/IncidentService.ts +280 -104
  47. package/Server/Services/IncidentSeverityService.ts +66 -15
  48. package/Server/Services/KubernetesAiAgentJobService.ts +185 -0
  49. package/Server/Services/KubernetesAiAgentService.ts +1634 -0
  50. package/Server/Services/KubernetesClusterAiAccessService.ts +1118 -451
  51. package/Server/Services/KubernetesClusterService.ts +129 -21
  52. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  53. package/Server/Services/PodmanHostService.ts +109 -1
  54. package/Server/Services/ProjectService.ts +32 -0
  55. package/Server/Services/ProxmoxClusterService.ts +110 -1
  56. package/Server/Services/ProxmoxResourceService.ts +322 -5
  57. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  58. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  59. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  60. package/Server/Services/RunnerJobService.ts +852 -108
  61. package/Server/Services/RunnerService.ts +1 -1
  62. package/Server/Services/ScheduledMaintenanceService.ts +737 -1
  63. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +414 -56
  64. package/Server/Services/TeamComplianceSettingService.ts +1125 -9
  65. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  66. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  67. package/Server/Services/VMwareVCenterService.ts +110 -1
  68. package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +67 -9
  69. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +39 -10
  70. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +14 -3
  71. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1475 -51
  72. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +1000 -43
  73. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  74. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +577 -0
  75. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  76. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  77. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  78. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  79. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +873 -0
  80. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +120 -7
  81. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +72 -5
  82. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +72 -5
  83. package/Server/Utils/AI/SRE/IncidentPostmortemRunner.ts +40 -8
  84. package/Server/Utils/AI/SRE/InvestigationEligibility.ts +13 -2
  85. package/Server/Utils/AI/SRE/InvestigationGrader.ts +1 -1
  86. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +402 -14
  87. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  88. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  89. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  90. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  91. package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +133 -7
  92. package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +58 -4
  93. package/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.ts +447 -0
  94. package/Server/Utils/Telemetry/ProxmoxNativePush.ts +903 -0
  95. package/Server/Utils/Telemetry/TelemetryEntity.ts +87 -27
  96. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  97. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  98. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  99. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +298 -224
  100. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +35 -15
  101. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  102. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +1073 -213
  103. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  104. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  105. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  106. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  107. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  108. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  109. package/Tests/App/AdminDashboard/RowActionPlacementOverrides.test.tsx +278 -0
  110. package/Tests/App/Dashboard/AIChatChartWidgetZoom.test.tsx +738 -0
  111. package/Tests/App/Dashboard/AIFeaturesSettingsPointers.test.tsx +147 -0
  112. package/Tests/App/Dashboard/AIInsightsKubernetesClusterPage.test.tsx +1523 -0
  113. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +463 -3
  114. package/Tests/App/Dashboard/AffectedResourcesPickerDropdownPlacement.test.tsx +958 -0
  115. package/Tests/App/Dashboard/AffectedResourcesPickerFocusLeave.test.tsx +595 -0
  116. package/Tests/App/Dashboard/AskAiAvailability.test.ts +20 -3
  117. package/Tests/App/Dashboard/AskAiDisabled.test.tsx +8 -3
  118. package/Tests/App/Dashboard/CephRateChartReload.test.tsx +1456 -0
  119. package/Tests/App/Dashboard/CephTimeRangeZoom.test.tsx +1229 -0
  120. package/Tests/App/Dashboard/ChartCardTimeRangeZoom.test.tsx +151 -0
  121. package/Tests/App/Dashboard/ChartCardZoomAffordances.test.tsx +257 -0
  122. package/Tests/App/Dashboard/ChartRefetchFrame.test.tsx +141 -0
  123. package/Tests/App/Dashboard/ChartZoomHarness.tsx +249 -0
  124. package/Tests/App/Dashboard/ChartZoomStandIn.tsx +131 -0
  125. package/Tests/App/Dashboard/CloudServerlessSlowLoads.test.tsx +628 -0
  126. package/Tests/App/Dashboard/CloudServerlessTimeRangeZoom.test.tsx +607 -0
  127. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +184 -19
  128. package/Tests/App/Dashboard/CompanionMetricsTabZoom.test.tsx +632 -0
  129. package/Tests/App/Dashboard/ContainerChartZoomStandIn.tsx +195 -0
  130. package/Tests/App/Dashboard/ContainerHostOverviewSlowLoads.test.tsx +542 -0
  131. package/Tests/App/Dashboard/ContainerHostOverviewTimeRangeZoom.test.tsx +848 -0
  132. package/Tests/App/Dashboard/ContainerMetricsTimeRangeZoom.test.tsx +561 -0
  133. package/Tests/App/Dashboard/DashboardBoardWideZoomShell.test.tsx +1147 -0
  134. package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +3 -2
  135. package/Tests/App/Dashboard/DashboardHistogramWidgetDragCursor.test.tsx +399 -0
  136. package/Tests/App/Dashboard/DashboardHistogramWidgetZoom.test.tsx +985 -0
  137. package/Tests/App/Dashboard/DashboardHistogramWidgetZoomHint.test.tsx +803 -0
  138. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +1 -0
  139. package/Tests/App/Dashboard/DashboardSettingsPreviewZoom.test.tsx +679 -0
  140. package/Tests/App/Dashboard/DashboardSloAndDataSourceChartZoom.test.tsx +881 -0
  141. package/Tests/App/Dashboard/DashboardTraceStatusWidgets.test.tsx +878 -0
  142. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +18 -6
  143. package/Tests/App/Dashboard/DatabaseMetricChartModalTimeRangeZoom.test.tsx +442 -0
  144. package/Tests/App/Dashboard/DatabaseOverviewTimeRangeZoom.test.tsx +831 -0
  145. package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +43 -0
  146. package/Tests/App/Dashboard/DockerSwarmInsightsTimeRangeZoom.test.tsx +524 -0
  147. package/Tests/App/Dashboard/DockerSwarmRateChartRefresh.test.tsx +259 -0
  148. package/Tests/App/Dashboard/EdgeDetailPanelHistory.test.tsx +763 -0
  149. package/Tests/App/Dashboard/EdgeDetailPanelTimeRangeZoom.test.tsx +547 -0
  150. package/Tests/App/Dashboard/EdgeHistoryBucketsCases.tsx +565 -0
  151. package/Tests/App/Dashboard/EdgeHistoryBucketsKathmandu.test.tsx +73 -0
  152. package/Tests/App/Dashboard/EdgeHistoryBucketsKolkata.test.tsx +74 -0
  153. package/Tests/App/Dashboard/EdgeHistoryBucketsNewYork.test.tsx +72 -0
  154. package/Tests/App/Dashboard/EdgeHistoryBucketsUtc.test.tsx +72 -0
  155. package/Tests/App/Dashboard/EmbeddedMetricCardRefresh.test.tsx +310 -0
  156. package/Tests/App/Dashboard/EmbeddedMetricCardTimeRangeZoom.test.tsx +536 -0
  157. package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +3 -1
  158. package/Tests/App/Dashboard/EscalationRuleRowActions.test.tsx +660 -0
  159. package/Tests/App/Dashboard/EventNotes.test.tsx +2 -2
  160. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +587 -13
  161. package/Tests/App/Dashboard/EventOverviewSnapshotExplorerZoom.test.tsx +1139 -0
  162. package/Tests/App/Dashboard/EventOverviewSnapshotZoomAcrossTabs.test.tsx +1057 -0
  163. package/Tests/App/Dashboard/EventOverviewTelemetrySnapshotZoom.test.tsx +757 -0
  164. package/Tests/App/Dashboard/ExceptionOccurrenceTrendZoom.test.tsx +675 -0
  165. package/Tests/App/Dashboard/ExceptionOccurrencesZoomSurvivesViewSwitch.test.tsx +405 -0
  166. package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +67 -3
  167. package/Tests/App/Dashboard/ExceptionTablesSpanStatus.test.tsx +515 -0
  168. package/Tests/App/Dashboard/ExplorerOwnZoomRegression.test.tsx +739 -0
  169. package/Tests/App/Dashboard/FlowBandwidthAxisCases.tsx +461 -0
  170. package/Tests/App/Dashboard/FlowBandwidthAxisKathmandu.test.tsx +25 -0
  171. package/Tests/App/Dashboard/FlowBandwidthAxisKolkata.test.tsx +25 -0
  172. package/Tests/App/Dashboard/FlowBandwidthAxisNewYork.test.tsx +25 -0
  173. package/Tests/App/Dashboard/FlowBandwidthAxisUtc.test.tsx +24 -0
  174. package/Tests/App/Dashboard/FlowTopTalkersZoomRefetch.test.tsx +722 -0
  175. package/Tests/App/Dashboard/FlowViewportGuard.test.tsx +2526 -0
  176. package/Tests/App/Dashboard/HostPagesSlowLoads.test.tsx +872 -0
  177. package/Tests/App/Dashboard/HostPagesTimeRangeZoom.test.tsx +1208 -0
  178. package/Tests/App/Dashboard/IncidentRootCauseTimeRangeZoom.test.tsx +358 -0
  179. package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +100 -9
  180. package/Tests/App/Dashboard/InfrastructureMetricsTabTimeRangeZoom.test.tsx +485 -0
  181. package/Tests/App/Dashboard/InvestigationDrawerCompanionZoom.test.tsx +655 -0
  182. package/Tests/App/Dashboard/InvestigationDrawerZoom.test.tsx +830 -0
  183. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  184. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +338 -2
  185. package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +454 -16
  186. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +799 -819
  187. package/Tests/App/Dashboard/KubernetesClusterAiAgentOverviewCard.test.tsx +367 -0
  188. package/Tests/App/Dashboard/KubernetesClusterAiAgentStatus.test.ts +1202 -0
  189. package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +106 -0
  190. package/Tests/App/Dashboard/KubernetesClusterAiNavigation.test.tsx +354 -0
  191. package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +1884 -2054
  192. package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +478 -179
  193. package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +50 -0
  194. package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +2 -1
  195. package/Tests/App/Dashboard/KubernetesClusterOverviewZoom.test.tsx +1217 -0
  196. package/Tests/App/Dashboard/KubernetesClusterPagesZoom.test.tsx +731 -0
  197. package/Tests/App/Dashboard/KubernetesCostsLoadRecovery.test.tsx +869 -0
  198. package/Tests/App/Dashboard/KubernetesCostsZoom.test.tsx +1214 -0
  199. package/Tests/App/Dashboard/KubernetesCostsZoomExactHours.test.tsx +692 -0
  200. package/Tests/App/Dashboard/KubernetesNetworkThroughputReload.test.tsx +902 -0
  201. package/Tests/App/Dashboard/KubernetesNetworkZoomBucketEdges.test.tsx +571 -0
  202. package/Tests/App/Dashboard/KubernetesOverviewZoomBucketEdges.test.tsx +697 -0
  203. package/Tests/App/Dashboard/KubernetesResourceMetricsTabZoom.test.tsx +633 -0
  204. package/Tests/App/Dashboard/LogsExplorerTimeRangeZoom.test.tsx +470 -0
  205. package/Tests/App/Dashboard/LogsInsightsTimeRangeZoom.test.tsx +948 -0
  206. package/Tests/App/Dashboard/LogsViewerPinnedWindowZoom.test.tsx +486 -0
  207. package/Tests/App/Dashboard/MetricChartsBucketInspectorDoubleClick.test.tsx +1001 -0
  208. package/Tests/App/Dashboard/MetricExplorerInvestigationAutoRefresh.test.tsx +514 -0
  209. package/Tests/App/Dashboard/MetricExplorerSavedViewZoomRoundTrip.test.tsx +581 -0
  210. package/Tests/App/Dashboard/MetricExplorerTimeRangeZoom.test.tsx +1162 -0
  211. package/Tests/App/Dashboard/MetricMonitorPreviewZoomLabel.test.ts +72 -0
  212. package/Tests/App/Dashboard/MetricRowSparklineTimeRangeZoom.test.tsx +204 -0
  213. package/Tests/App/Dashboard/MetricViewFirstResultLands.test.tsx +408 -0
  214. package/Tests/App/Dashboard/MetricViewOwnZoomResetPlacement.test.tsx +952 -0
  215. package/Tests/App/Dashboard/MetricViewTimeRange.test.ts +139 -0
  216. package/Tests/App/Dashboard/MetricViewTimeRangeZoom.test.tsx +556 -0
  217. package/Tests/App/Dashboard/MonitorMetricsChartWrappersZoom.test.tsx +552 -0
  218. package/Tests/App/Dashboard/MonitorMetricsTabsTimeRangeZoom.test.tsx +740 -0
  219. package/Tests/App/Dashboard/MonitorOverviewChartsTimeRangeZoom.test.tsx +735 -0
  220. package/Tests/App/Dashboard/MonitorStepPreviewsTimeRangeZoom.test.tsx +835 -0
  221. package/Tests/App/Dashboard/NetworkDeviceTimeRangeZoom.test.tsx +1115 -0
  222. package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +186 -17
  223. package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +155 -46
  224. package/Tests/App/Dashboard/PasskeySettings.test.tsx +87 -2
  225. package/Tests/App/Dashboard/ProjectAISettingsPages.test.tsx +884 -0
  226. package/Tests/App/Dashboard/ProxmoxNodeRemove.test.tsx +621 -0
  227. package/Tests/App/Dashboard/ProxmoxOverviewSlowLoads.test.tsx +584 -0
  228. package/Tests/App/Dashboard/ProxmoxPagesTimeRangeZoom.test.tsx +823 -0
  229. package/Tests/App/Dashboard/ProxmoxRateChartReload.test.tsx +1253 -0
  230. package/Tests/App/Dashboard/PublicDashboardBoardWideZoom.test.tsx +605 -0
  231. package/Tests/App/Dashboard/RealRowsLineChart.tsx +250 -0
  232. package/Tests/App/Dashboard/RechartsHostsPlotCursor.test.tsx +513 -0
  233. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  234. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  235. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  236. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  237. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +1721 -0
  238. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1002 -0
  239. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  240. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  241. package/Tests/App/Dashboard/RowActionPlacementOverrides.test.tsx +865 -0
  242. package/Tests/App/Dashboard/RumOverviewTimeRangeZoom.test.tsx +877 -0
  243. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  244. package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +20 -4
  245. package/Tests/App/Dashboard/RunnerSupersededByAiAgentNote.test.tsx +296 -0
  246. package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +146 -36
  247. package/Tests/App/Dashboard/ServiceDatabaseSlowLoads.test.tsx +1166 -0
  248. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +1243 -104
  249. package/Tests/App/Dashboard/ServiceOverviewTimeRangeZoom.test.tsx +792 -0
  250. package/Tests/App/Dashboard/SloBudgetBurnDownZoom.test.tsx +771 -0
  251. package/Tests/App/Dashboard/SloBudgetBurnDownZoomAffordances.test.tsx +380 -0
  252. package/Tests/App/Dashboard/SloEventMetricsBarChartZoom.test.tsx +369 -0
  253. package/Tests/App/Dashboard/SloHistoryChartsTimeRangeZoom.test.tsx +694 -0
  254. package/Tests/App/Dashboard/SloHistoryChartsZoomAffordances.test.tsx +497 -0
  255. package/Tests/App/Dashboard/SloMetricsTimeRangeZoom.test.tsx +541 -0
  256. package/Tests/App/Dashboard/SlowLoadHarness.ts +123 -0
  257. package/Tests/App/Dashboard/SnapshotExplorerPrimaryZoom.test.tsx +1194 -0
  258. package/Tests/App/Dashboard/SnapshotViewerPinnedWindow.test.tsx +620 -0
  259. package/Tests/App/Dashboard/TelemetrySnapshotPanelTimeRangeZoom.test.tsx +765 -0
  260. package/Tests/App/Dashboard/TelemetrySnapshotZoom.test.tsx +516 -0
  261. package/Tests/App/Dashboard/TelemetrySnapshotZoomAcrossTabs.test.tsx +827 -0
  262. package/Tests/App/Dashboard/TimeRangeZoomPageHarness.tsx +463 -0
  263. package/Tests/App/Dashboard/TraceChartEditorStatusSplit.test.tsx +543 -0
  264. package/Tests/App/Dashboard/TraceStatusPresentation.test.tsx +967 -0
  265. package/Tests/App/Dashboard/TraceTimelineMinimapZoom.test.tsx +315 -0
  266. package/Tests/App/Dashboard/TracesAnalyticsStatusSplit.test.tsx +778 -0
  267. package/Tests/App/Dashboard/TracesAnalyticsViewZoom.test.tsx +349 -0
  268. package/Tests/App/Dashboard/TracesExplorerTimeRangeZoom.test.tsx +551 -0
  269. package/Tests/App/Dashboard/TracesStatusChartAndFacet.test.tsx +687 -0
  270. package/Tests/App/Dashboard/TracesViewerStaleResponses.test.tsx +458 -0
  271. package/Tests/App/Dashboard/UptimeStripsExcludedFromZoom.test.tsx +406 -0
  272. package/Tests/App/Dashboard/VMwareOverviewSlowLoads.test.tsx +535 -0
  273. package/Tests/App/Dashboard/VMwarePagesTimeRangeZoom.test.tsx +606 -0
  274. package/Tests/App/Dashboard/ValueWidgetSparklineStaleHover.test.tsx +1292 -0
  275. package/Tests/App/Dashboard/ValueWidgetSparklineZoom.test.tsx +765 -0
  276. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +98 -0
  277. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +33 -1
  278. package/Tests/Models/DatabaseModels/KubernetesAiAgentModel.test.ts +295 -0
  279. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  280. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  281. package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +347 -0
  282. package/Tests/Server/API/AIChatRouteAuthorization.test.ts +58 -0
  283. package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +1 -1
  284. package/Tests/Server/API/AIInvestigationAPI.test.ts +123 -45
  285. package/Tests/Server/API/AutoRemediationApproveClusterRound.test.ts +1329 -0
  286. package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +25 -2
  287. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  288. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -0
  289. package/Tests/Server/API/KubernetesClusterAiAccessAPIAgent.test.ts +903 -0
  290. package/Tests/Server/API/MicrosoftTeamsChatsRefreshRoute.test.ts +667 -0
  291. package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +294 -6
  292. package/Tests/Server/API/ProxmoxResourceAPIRemoveNode.test.ts +1932 -0
  293. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  294. package/Tests/Server/Infrastructure/GlobalCache.test.ts +195 -0
  295. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  296. package/Tests/Server/Infrastructure/Postgres/AddKubernetesAiAgentAndAiDefaultsMigration.test.ts +623 -0
  297. package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +87 -10
  298. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  299. package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleScopeMigration.test.ts +622 -0
  300. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  301. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +119 -4
  302. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +196 -2
  303. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +123 -2
  304. package/Tests/Server/Services/AIServiceBalanceBlocker.test.ts +282 -0
  305. package/Tests/Server/Services/AlertMonitorClearWritesNull.test.ts +409 -0
  306. package/Tests/Server/Services/AlertMonitorEditFeed.test.ts +474 -0
  307. package/Tests/Server/Services/AlertMonitorEditGuard.test.ts +610 -0
  308. package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +2 -0
  309. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  310. package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +2 -1
  311. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  312. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  313. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  314. package/Tests/Server/Services/IncidentAffectedMonitorsEdit.test.ts +1360 -0
  315. package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +3 -1
  316. package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +488 -0
  317. package/Tests/Server/Services/KubernetesAiAgentJobService.test.ts +329 -0
  318. package/Tests/Server/Services/KubernetesAiAgentServiceHelpers.test.ts +618 -0
  319. package/Tests/Server/Services/KubernetesAiAgentServiceLifecycle.test.ts +1444 -0
  320. package/Tests/Server/Services/KubernetesAiAgentServiceRegister.test.ts +1666 -0
  321. package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +140 -111
  322. package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +267 -105
  323. package/Tests/Server/Services/KubernetesClusterAiAccessLegacySuperseded.test.ts +440 -0
  324. package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +567 -411
  325. package/Tests/Server/Services/KubernetesClusterAiAccessTarget.test.ts +1168 -0
  326. package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +410 -12
  327. package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +55 -0
  328. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  329. package/Tests/Server/Services/ProjectServiceNewProjectAiDefaults.test.ts +288 -0
  330. package/Tests/Server/Services/ProxmoxResourcePostgres.test.ts +5633 -0
  331. package/Tests/Server/Services/ProxmoxResourceService.test.ts +6458 -5
  332. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  333. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  334. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  335. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  336. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  337. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  338. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  339. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  340. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  341. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  342. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +153 -15
  343. package/Tests/Server/Services/RunnerJobEnqueueKubectlAiAgent.test.ts +620 -0
  344. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  345. package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +170 -3
  346. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  347. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  348. package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +72 -0
  349. package/Tests/Server/Services/RunnerServiceAgentName.test.ts +6 -4
  350. package/Tests/Server/Services/ScheduledMaintenanceAttachmentEdit.test.ts +2113 -0
  351. package/Tests/Server/Services/ScheduledMaintenanceMonitorRelease.test.ts +972 -0
  352. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +2237 -0
  353. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +3988 -138
  354. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  355. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  356. package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +107 -1
  357. package/Tests/Server/Utils/AI/IncidentPostmortemRunner.test.ts +351 -0
  358. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +2 -0
  359. package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +310 -0
  360. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +453 -0
  361. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  362. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +70 -0
  363. package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +58 -0
  364. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  365. package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +2 -0
  366. package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +2 -0
  367. package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +2 -0
  368. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  369. package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +125 -1
  370. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +252 -3
  371. package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +2 -0
  372. package/Tests/Server/Utils/AI/RemediationExecutionRunnerProjectGates.test.ts +240 -0
  373. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1249 -0
  374. package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +2 -0
  375. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  376. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  377. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +722 -0
  378. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  379. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  380. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  381. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +830 -0
  382. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +2 -0
  383. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  384. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +2 -0
  385. package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +2 -0
  386. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  387. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  388. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  389. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  390. package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +68 -0
  391. package/Tests/Server/Utils/Telemetry/InventoryMirrorPostgres.test.ts +370 -0
  392. package/Tests/Server/Utils/Telemetry/NetworkDeviceInventoryAttributes.test.ts +522 -0
  393. package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +155 -0
  394. package/Tests/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.test.ts +8631 -0
  395. package/Tests/Server/Utils/Telemetry/ProxmoxNativePush.test.ts +2852 -0
  396. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +367 -1
  397. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +75 -3
  398. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  399. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  400. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  401. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  402. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  403. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  404. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  405. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  406. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  407. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  408. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  409. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  410. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  411. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  412. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +25 -0
  413. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  414. package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNames.test.ts +3119 -0
  415. package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNamesPostgres.test.ts +1721 -0
  416. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  417. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  418. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  419. package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +581 -113
  420. package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +510 -0
  421. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  422. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  423. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  424. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  425. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +517 -0
  426. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  427. package/Tests/Types/Team/ComplianceRule.test.ts +1029 -0
  428. package/Tests/Types/Team/TeamComplianceStatus.test.ts +176 -0
  429. package/Tests/UI/Components/ActionButton/RowActions.test.tsx +641 -0
  430. package/Tests/UI/Components/ActionButton/RowActionsAccessibility.test.tsx +414 -0
  431. package/Tests/UI/Components/ActionButton/SplitActionButtons.test.ts +565 -0
  432. package/Tests/UI/Components/Charts/BarChartDragToSelect.test.tsx +386 -0
  433. package/Tests/UI/Components/Charts/ChartDoubleClickResetWithoutDblclick.test.tsx +1025 -0
  434. package/Tests/UI/Components/Charts/ChartGroupPageZoomHint.test.tsx +196 -0
  435. package/Tests/UI/Components/Charts/ChartPlaceholdersTakeDoubleClick.test.tsx +1861 -0
  436. package/Tests/UI/Components/Charts/ChartPlotClicksWhileResetArmed.test.tsx +382 -0
  437. package/Tests/UI/Components/Charts/ChartRangeSelection.test.tsx +704 -0
  438. package/Tests/UI/Components/Charts/ChartRangeSelectionDoubleClickReset.test.tsx +1481 -0
  439. package/Tests/UI/Components/Charts/ChartRangeSelectionRealRecharts.test.tsx +918 -0
  440. package/Tests/UI/Components/Charts/ChartRowBucketStart.test.ts +350 -0
  441. package/Tests/UI/Components/Charts/DoubleClickReset.test.tsx +996 -0
  442. package/Tests/UI/Components/Charts/HistogramDoubleClickResetRealRecharts.test.tsx +965 -0
  443. package/Tests/UI/Components/Charts/HistogramDriftThenRefetch.test.tsx +277 -0
  444. package/Tests/UI/Components/Charts/HistogramRangeSelectionDataChange.test.tsx +1757 -0
  445. package/Tests/UI/Components/Charts/HistogramRangeSelectionRealRecharts.test.tsx +560 -0
  446. package/Tests/UI/Components/Charts/TimeRangeZoom/ChartPageTimeRangeZoom.test.tsx +513 -0
  447. package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.test.tsx +845 -0
  448. package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.test.tsx +119 -0
  449. package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHintTailwind.test.tsx +274 -0
  450. package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.test.ts +433 -0
  451. package/Tests/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.test.tsx +863 -0
  452. package/Tests/UI/Components/Charts/TimeRangeZoom/ZoomDocsPromises.test.tsx +1147 -0
  453. package/Tests/UI/Components/DisabledButtonTooltip.test.tsx +14 -3
  454. package/Tests/UI/Components/EntityDropdownEscape.test.tsx +454 -0
  455. package/Tests/UI/Components/EntityDropdownFocusLeave.test.tsx +420 -0
  456. package/Tests/UI/Components/Forms/FormFieldDropdownDisabled.test.tsx +233 -0
  457. package/Tests/UI/Components/Input.test.tsx +80 -1
  458. package/Tests/UI/Components/LogsAnalyticsViewZoom.test.tsx +947 -0
  459. package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +17 -5
  460. package/Tests/UI/Components/LogsViewerAnalyticsZoom.test.tsx +501 -0
  461. package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +1 -1
  462. package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +6 -4
  463. package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +60 -8
  464. package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +476 -0
  465. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +7 -5
  466. package/Tests/UI/Components/MoreMenuPortal.test.tsx +623 -0
  467. package/Tests/UI/Components/StatusPage/ResourceGridActions.test.tsx +538 -0
  468. package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +14 -4
  469. package/Tests/UI/Components/TableCellWrapping.test.tsx +3 -3
  470. package/Tests/UI/Components/TableRowActions.test.tsx +472 -0
  471. package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +1 -1
  472. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +1 -1
  473. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerZoomScope.test.tsx +470 -0
  474. package/Tests/UI/Components/TelemetryViewer/UseViewerTimeRangeZoom.test.tsx +571 -0
  475. package/Tests/UI/Components/TelemetryViewer/ViewerDoubleClickResetUnderDataChange.test.tsx +928 -0
  476. package/Tests/UI/Components/TelemetryViewer/ViewerFollowsEnclosingZoom.test.tsx +1569 -0
  477. package/Tests/UI/Components/Toggle.test.tsx +66 -0
  478. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardRefreshNames.test.tsx +1023 -0
  479. package/Tests/UI/Rum/ChunkLoader.test.ts +201 -0
  480. package/Tests/UI/Rum/FidelityNotices.test.ts +54 -0
  481. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  482. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +72 -0
  483. package/Tests/UI/Rum/ReplayFrameCapture.test.ts +1009 -9
  484. package/Tests/UI/Rum/ReplayRecordedAssets.test.ts +1069 -0
  485. package/Tests/UI/Rum/ReplayStage.test.tsx +913 -2
  486. package/Tests/UI/Rum/SessionReplayTable.test.tsx +443 -8
  487. package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +439 -9
  488. package/Tests/UI/Rum/UserFlowTablesRowActions.test.tsx +501 -0
  489. package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +47 -19
  490. package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +2 -0
  491. package/Tests/Utils/AiRemediation/KubernetesAiAgentPolicyCopyParity.test.ts +396 -0
  492. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  493. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  494. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  495. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  496. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  497. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  498. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  499. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  500. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  501. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  502. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  503. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  504. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  505. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  506. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  507. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  508. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  509. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  510. package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +104 -1
  511. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  512. package/Types/AI/AIRunType.ts +9 -4
  513. package/Types/AI/InvestigationNotStartedReason.ts +6 -0
  514. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  515. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  516. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +197 -18
  517. package/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.ts +28 -0
  518. package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +4 -2
  519. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +263 -32
  520. package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +20 -16
  521. package/Types/Kubernetes/KubernetesClusterAiInsights.ts +81 -0
  522. package/Types/Monitor/ProxmoxAlertTemplates.ts +4 -4
  523. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  524. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  525. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  526. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  527. package/Types/ResourceAiAgent/ResourceAiAccess.ts +574 -0
  528. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  529. package/Types/Runbook/RunbookStepType.ts +29 -0
  530. package/Types/Team/ComplianceNotificationChannel.ts +22 -0
  531. package/Types/Team/ComplianceRule.ts +434 -0
  532. package/Types/Team/ComplianceRuleType.ts +21 -0
  533. package/Types/Team/TeamComplianceStatus.ts +81 -0
  534. package/Types/Telemetry/TelemetryIngestSurface.ts +40 -0
  535. package/UI/Components/ActionButton/ActionButtonSchema.ts +21 -0
  536. package/UI/Components/ActionButton/RowActions.tsx +238 -0
  537. package/UI/Components/ActionButton/SplitActionButtons.ts +173 -0
  538. package/UI/Components/Charts/Area/AreaChart.tsx +32 -2
  539. package/UI/Components/Charts/Bar/BarChart.tsx +40 -3
  540. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +37 -11
  541. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +80 -243
  542. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +122 -31
  543. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +95 -244
  544. package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +214 -0
  545. package/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.ts +32 -0
  546. package/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.ts +599 -0
  547. package/UI/Components/Charts/Line/LineChart.tsx +32 -2
  548. package/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx +70 -0
  549. package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.tsx +226 -0
  550. package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.tsx +73 -0
  551. package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.ts +163 -0
  552. package/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.ts +215 -0
  553. package/UI/Components/Charts/Utils/DataPoint.ts +20 -8
  554. package/UI/Components/Charts/Utils/XAxis.ts +75 -0
  555. package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +493 -59
  556. package/UI/Components/EntityDropdown/EntityDropdown.tsx +107 -11
  557. package/UI/Components/Forms/Fields/FormField.tsx +10 -0
  558. package/UI/Components/Input/Input.tsx +90 -57
  559. package/UI/Components/List/ListRow.tsx +8 -74
  560. package/UI/Components/LogsViewer/LogsViewer.tsx +40 -11
  561. package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +22 -6
  562. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +209 -6
  563. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +127 -84
  564. package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +3 -0
  565. package/UI/Components/ModelTable/BaseModelTable.tsx +12 -1
  566. package/UI/Components/MoreMenu/MoreMenu.tsx +365 -30
  567. package/UI/Components/MoreMenu/MoreMenuItem.tsx +70 -17
  568. package/UI/Components/OrderedStatesList/Item.tsx +7 -72
  569. package/UI/Components/StatusPage/ResourceGrid.tsx +126 -77
  570. package/UI/Components/Table/TableBody.tsx +8 -2
  571. package/UI/Components/Table/TableRow.tsx +20 -140
  572. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +41 -10
  573. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +47 -9
  574. package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +25 -6
  575. package/UI/Components/TelemetryViewer/types.ts +2 -0
  576. package/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.ts +448 -0
  577. package/UI/Components/Toggle/Toggle.tsx +26 -0
  578. package/UI/Components/Tooltip/Tooltip.tsx +8 -1
  579. package/UI/Styles/Theme.css +14 -2
  580. package/Utils/AI/InvestigationReport.ts +121 -15
  581. package/Utils/AiRemediation/CommandPolicy.ts +1 -1
  582. package/Utils/AiRemediation/KubectlPolicy.ts +1 -1
  583. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  584. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  585. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  586. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  587. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  588. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  589. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  590. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  591. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  592. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  593. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  594. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  595. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  596. package/Utils/Dashboard/DashboardTimeRangeZoom.ts +46 -2
  597. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  598. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  599. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  600. package/build/dist/Models/DatabaseModels/CephCluster.js +219 -0
  601. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  602. package/build/dist/Models/DatabaseModels/DatabaseServer.js +219 -0
  603. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  604. package/build/dist/Models/DatabaseModels/DockerHost.js +219 -0
  605. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  606. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +219 -0
  607. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  608. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  609. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  610. package/build/dist/Models/DatabaseModels/Host.js +219 -0
  611. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  612. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  613. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  614. package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js +385 -0
  615. package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js.map +1 -0
  616. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +3 -3
  617. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  618. package/build/dist/Models/DatabaseModels/PodmanHost.js +219 -0
  619. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  620. package/build/dist/Models/DatabaseModels/Project.js +56 -5
  621. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  622. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +219 -0
  623. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  624. package/build/dist/Models/DatabaseModels/ProxmoxResource.js +51 -1
  625. package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -1
  626. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  627. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  628. package/build/dist/Models/DatabaseModels/RunnerJob.js +219 -0
  629. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  630. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +134 -3
  631. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
  632. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +219 -0
  633. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  634. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  635. package/build/dist/Server/API/AIChatAPI.js +6 -1
  636. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  637. package/build/dist/Server/API/AIInvestigationAPI.js +17 -10
  638. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  639. package/build/dist/Server/API/AutoRemediationAPI.js +374 -24
  640. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  641. package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +436 -22
  642. package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -1
  643. package/build/dist/Server/API/MicrosoftTeamsAPI.js +69 -13
  644. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  645. package/build/dist/Server/API/ProxmoxResourceAPI.js +187 -14
  646. package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -1
  647. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  648. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  649. package/build/dist/Server/Infrastructure/GlobalCache.js +27 -0
  650. package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
  651. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js +50 -0
  652. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js.map +1 -0
  653. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js +84 -0
  654. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js.map +1 -0
  655. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js +31 -0
  656. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js.map +1 -0
  657. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  658. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  659. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  660. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  661. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  662. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  663. package/build/dist/Server/Middleware/TelemetryIngest.js +41 -19
  664. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  665. package/build/dist/Server/Services/AIService.js +59 -1
  666. package/build/dist/Server/Services/AIService.js.map +1 -1
  667. package/build/dist/Server/Services/AlertService.js +248 -13
  668. package/build/dist/Server/Services/AlertService.js.map +1 -1
  669. package/build/dist/Server/Services/AlertSeverityService.js +51 -15
  670. package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
  671. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  672. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  673. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  674. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  675. package/build/dist/Server/Services/AutoRemediationRuleService.js +1 -1
  676. package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
  677. package/build/dist/Server/Services/CephClusterService.js +104 -0
  678. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  679. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  680. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  681. package/build/dist/Server/Services/DockerHostService.js +104 -0
  682. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  683. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  684. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  685. package/build/dist/Server/Services/HostService.js +114 -2
  686. package/build/dist/Server/Services/HostService.js.map +1 -1
  687. package/build/dist/Server/Services/IncidentService.js +199 -72
  688. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  689. package/build/dist/Server/Services/IncidentSeverityService.js +51 -15
  690. package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
  691. package/build/dist/Server/Services/KubernetesAiAgentJobService.js +158 -0
  692. package/build/dist/Server/Services/KubernetesAiAgentJobService.js.map +1 -0
  693. package/build/dist/Server/Services/KubernetesAiAgentService.js +1145 -0
  694. package/build/dist/Server/Services/KubernetesAiAgentService.js.map +1 -0
  695. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +842 -371
  696. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -1
  697. package/build/dist/Server/Services/KubernetesClusterService.js +86 -17
  698. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  699. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  700. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  701. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  702. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  703. package/build/dist/Server/Services/ProjectService.js +22 -0
  704. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  705. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  706. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  707. package/build/dist/Server/Services/ProxmoxResourceService.js +258 -3
  708. package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
  709. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  710. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  711. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  712. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  713. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  714. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  715. package/build/dist/Server/Services/RunnerJobService.js +522 -97
  716. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  717. package/build/dist/Server/Services/RunnerService.js +1 -1
  718. package/build/dist/Server/Services/RunnerService.js.map +1 -1
  719. package/build/dist/Server/Services/ScheduledMaintenanceService.js +535 -3
  720. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  721. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +316 -46
  722. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  723. package/build/dist/Server/Services/TeamComplianceSettingService.js +833 -7
  724. package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
  725. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  726. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  727. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  728. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  729. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  730. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  731. package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +52 -9
  732. package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -1
  733. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +13 -9
  734. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
  735. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +7 -3
  736. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
  737. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1056 -43
  738. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  739. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +683 -42
  740. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  741. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  742. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  743. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +330 -0
  744. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  745. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  746. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  747. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  748. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  749. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  750. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  751. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  752. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  753. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +600 -0
  754. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  755. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +89 -9
  756. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  757. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +55 -4
  758. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  759. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +55 -4
  760. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  761. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js +30 -3
  762. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -1
  763. package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +13 -2
  764. package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -1
  765. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +1 -1
  766. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +294 -15
  767. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  768. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  769. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  770. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  771. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  772. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  773. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  774. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  775. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  776. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +111 -6
  777. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
  778. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +40 -4
  779. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -1
  780. package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js +296 -0
  781. package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js.map +1 -0
  782. package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js +699 -0
  783. package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js.map +1 -0
  784. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +77 -19
  785. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  786. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  787. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  788. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  789. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  790. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  791. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  792. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +183 -209
  793. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  794. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +19 -15
  795. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  796. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  797. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  798. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +768 -152
  799. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  800. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  801. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  802. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  803. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  804. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  805. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  806. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  807. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  808. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  809. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  810. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  811. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  812. package/build/dist/Types/AI/AIRunType.js +9 -4
  813. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  814. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  815. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  816. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  817. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  818. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +126 -45
  819. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  820. package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js +28 -0
  821. package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js.map +1 -0
  822. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +72 -16
  823. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  824. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +20 -16
  825. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -1
  826. package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js +17 -0
  827. package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js.map +1 -0
  828. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +4 -4
  829. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
  830. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  831. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  832. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  833. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  834. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  835. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  836. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  837. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  838. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +275 -0
  839. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  840. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  841. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  842. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  843. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  844. package/build/dist/Types/Team/ComplianceNotificationChannel.js +23 -0
  845. package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -0
  846. package/build/dist/Types/Team/ComplianceRule.js +304 -0
  847. package/build/dist/Types/Team/ComplianceRule.js.map +1 -0
  848. package/build/dist/Types/Team/ComplianceRuleType.js +21 -0
  849. package/build/dist/Types/Team/ComplianceRuleType.js.map +1 -1
  850. package/build/dist/Types/Team/TeamComplianceStatus.js +2 -0
  851. package/build/dist/Types/Team/TeamComplianceStatus.js.map +1 -0
  852. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +36 -0
  853. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  854. package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js +20 -1
  855. package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js.map +1 -1
  856. package/build/dist/UI/Components/ActionButton/RowActions.js +113 -0
  857. package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -0
  858. package/build/dist/UI/Components/ActionButton/SplitActionButtons.js +71 -0
  859. package/build/dist/UI/Components/ActionButton/SplitActionButtons.js.map +1 -0
  860. package/build/dist/UI/Components/Charts/Area/AreaChart.js +16 -1
  861. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  862. package/build/dist/UI/Components/Charts/Bar/BarChart.js +16 -1
  863. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  864. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +27 -5
  865. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  866. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +61 -194
  867. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  868. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +84 -26
  869. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  870. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +75 -196
  871. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  872. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +133 -0
  873. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -1
  874. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js +26 -0
  875. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js.map +1 -0
  876. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js +371 -0
  877. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js.map +1 -0
  878. package/build/dist/UI/Components/Charts/Line/LineChart.js +16 -1
  879. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  880. package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js +35 -0
  881. package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js.map +1 -0
  882. package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js +107 -0
  883. package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js.map +1 -0
  884. package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js +41 -0
  885. package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js.map +1 -0
  886. package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js +117 -0
  887. package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js.map +1 -0
  888. package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js +121 -0
  889. package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js.map +1 -0
  890. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -7
  891. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  892. package/build/dist/UI/Components/Charts/Utils/XAxis.js +70 -0
  893. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  894. package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +305 -38
  895. package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -1
  896. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +89 -14
  897. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  898. package/build/dist/UI/Components/Forms/Fields/FormField.js +11 -2
  899. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  900. package/build/dist/UI/Components/Input/Input.js +69 -54
  901. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  902. package/build/dist/UI/Components/List/ListRow.js +4 -39
  903. package/build/dist/UI/Components/List/ListRow.js.map +1 -1
  904. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +31 -8
  905. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  906. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +10 -1
  907. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
  908. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +139 -21
  909. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  910. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +30 -8
  911. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  912. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +1 -1
  913. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
  914. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +10 -0
  915. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  916. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +253 -14
  917. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  918. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +43 -13
  919. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  920. package/build/dist/UI/Components/OrderedStatesList/Item.js +2 -38
  921. package/build/dist/UI/Components/OrderedStatesList/Item.js.map +1 -1
  922. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +53 -15
  923. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
  924. package/build/dist/UI/Components/Table/TableBody.js +6 -2
  925. package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
  926. package/build/dist/UI/Components/Table/TableRow.js +12 -75
  927. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  928. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +32 -7
  929. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  930. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +27 -9
  931. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  932. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +11 -1
  933. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
  934. package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js +272 -0
  935. package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js.map +1 -0
  936. package/build/dist/UI/Components/Toggle/Toggle.js +14 -1
  937. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  938. package/build/dist/UI/Components/Tooltip/Tooltip.js +1 -1
  939. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  940. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  941. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  942. package/build/dist/Utils/AiRemediation/CommandPolicy.js +1 -1
  943. package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -1
  944. package/build/dist/Utils/AiRemediation/KubectlPolicy.js +1 -1
  945. package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -1
  946. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  947. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  948. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  949. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  950. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  951. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  952. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  953. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  954. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  955. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  956. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  957. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  958. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  959. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  960. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  961. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  962. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  963. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  964. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  965. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  966. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  967. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  968. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  969. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  970. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  971. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  972. package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +27 -1
  973. package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -1
  974. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  975. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  976. package/package.json +1 -1
@@ -0,0 +1,1028 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import OneUptimeDate from "../../Types/Date";
11
+ import BadDataException from "../../Types/Exception/BadDataException";
12
+ import NotAuthenticatedException from "../../Types/Exception/NotAuthenticatedException";
13
+ import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
14
+ import ObjectID from "../../Types/ObjectID";
15
+ import AiResourceType, { AI_RESOURCE_TYPE_INFO, ALL_AI_RESOURCE_TYPES, isAiResourceType, } from "../../Types/ResourceAiAgent/AiResourceType";
16
+ import { RESOURCE_AI_AGENT_IMAGE_REPOSITORY, RESOURCE_AI_AGENT_RESOURCE_TYPE_ENV, RESOURCE_AI_ALLOW_WRITES_ENV, RESOURCE_AI_WRITE_TARGETS_ENV, ResourceAiRemediationMode, parseResourceAiRemediationMode, } from "../../Types/ResourceAiAgent/ResourceAiAccess";
17
+ import ModelPermission from "../Types/Database/Permissions/Index";
18
+ import QueryHelper from "../Types/Database/QueryHelper";
19
+ import MonitorResourceContextUtil from "../Utils/Monitor/MonitorResourceContext";
20
+ import logger from "../Utils/Logger";
21
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
22
+ import AlertService from "./AlertService";
23
+ import CephClusterService from "./CephClusterService";
24
+ import DatabaseServerService from "./DatabaseServerService";
25
+ import DockerHostService from "./DockerHostService";
26
+ import DockerSwarmClusterService from "./DockerSwarmClusterService";
27
+ import HostService from "./HostService";
28
+ import IncidentService from "./IncidentService";
29
+ import KubernetesClusterAiAccessService, { AI_BALANCE_INSUFFICIENT_NEXT_STEP, } from "./KubernetesClusterAiAccessService";
30
+ import MonitorService from "./MonitorService";
31
+ import PodmanHostService from "./PodmanHostService";
32
+ import ProxmoxClusterService from "./ProxmoxClusterService";
33
+ import ResourceAiAgentService from "./ResourceAiAgentService";
34
+ import VMwareVCenterService from "./VMwareVCenterService";
35
+ // The most resources one incident or alert offers an investigation.
36
+ export const MAX_RESOURCES_PER_SUBJECT = 10;
37
+ /*
38
+ * How many of a subject's linked resources are read per query while
39
+ * looking for its unarchived ones (getResourcesForSubject): one read covers
40
+ * any ordinary subject, and a subject linked to many archived resources is
41
+ * read on in batches until the cap is reached.
42
+ */
43
+ const SUBJECT_RESOURCE_READ_BATCH_SIZE = MAX_RESOURCES_PER_SUBJECT * 5;
44
+ // The columns every resource model carries for AI access.
45
+ const AI_ACCESS_COLUMNS = {
46
+ _id: true,
47
+ projectId: true,
48
+ name: true,
49
+ isArchived: true,
50
+ isAiInvestigationEnabled: true,
51
+ aiRemediationMode: true,
52
+ aiCommandAllowlist: true,
53
+ aiAccessConfiguredAt: true,
54
+ aiAccessLastVerifiedAt: true,
55
+ aiAccessLastError: true,
56
+ };
57
+ const MODEL_SPECS = {
58
+ [AiResourceType.DockerHost]: {
59
+ service: DockerHostService,
60
+ identityColumns: { hostIdentifier: true },
61
+ subjectRelation: "dockerHosts",
62
+ resolvedIdsKey: "dockerHostIds",
63
+ },
64
+ [AiResourceType.PodmanHost]: {
65
+ service: PodmanHostService,
66
+ identityColumns: { hostIdentifier: true },
67
+ subjectRelation: "podmanHosts",
68
+ resolvedIdsKey: "podmanHostIds",
69
+ },
70
+ [AiResourceType.DockerSwarmCluster]: {
71
+ service: DockerSwarmClusterService,
72
+ identityColumns: {},
73
+ subjectRelation: "dockerSwarmClusters",
74
+ resolvedIdsKey: "dockerSwarmClusterIds",
75
+ },
76
+ [AiResourceType.ProxmoxCluster]: {
77
+ service: ProxmoxClusterService,
78
+ identityColumns: {},
79
+ subjectRelation: "proxmoxClusters",
80
+ resolvedIdsKey: "proxmoxClusterIds",
81
+ },
82
+ [AiResourceType.VMwareVCenter]: {
83
+ service: VMwareVCenterService,
84
+ identityColumns: {},
85
+ subjectRelation: "vmwareVCenters",
86
+ resolvedIdsKey: "vmwareVCenterIds",
87
+ },
88
+ [AiResourceType.CephCluster]: {
89
+ service: CephClusterService,
90
+ identityColumns: {},
91
+ subjectRelation: "cephClusters",
92
+ resolvedIdsKey: "cephClusterIds",
93
+ },
94
+ [AiResourceType.DatabaseServer]: {
95
+ service: DatabaseServerService,
96
+ identityColumns: {
97
+ dbSystem: true,
98
+ serverAddress: true,
99
+ serverPort: true,
100
+ },
101
+ subjectRelation: "databaseServers",
102
+ resolvedIdsKey: "databaseServerIds",
103
+ },
104
+ [AiResourceType.Host]: {
105
+ service: HostService,
106
+ identityColumns: { hostIdentifier: true },
107
+ subjectRelation: "hosts",
108
+ resolvedIdsKey: "hostIds",
109
+ },
110
+ };
111
+ /*
112
+ * What an operator checks when the agent is online but cannot reach its
113
+ * resource: the one thing each agent needs besides the network.
114
+ */
115
+ const REACH_HINTS = {
116
+ [AiResourceType.DockerHost]: "that the Docker socket (/var/run/docker.sock) is mounted into the agent's container",
117
+ [AiResourceType.PodmanHost]: "that the Podman socket (/run/podman/podman.sock) is mounted into the agent's container",
118
+ [AiResourceType.DockerSwarmCluster]: "that the agent runs on a swarm MANAGER node with the Docker socket mounted",
119
+ [AiResourceType.ProxmoxCluster]: "PVE_HOST and the agent's Proxmox API token",
120
+ [AiResourceType.VMwareVCenter]: "the vCenter URL and the credentials in the agent's environment",
121
+ [AiResourceType.CephCluster]: "the Ceph config and keyring mounted into the agent's container",
122
+ [AiResourceType.DatabaseServer]: "the database address and the read-only credentials in the agent's environment",
123
+ [AiResourceType.Host]: "that the agent runs privileged with the host's PID namespace (pid: host)",
124
+ };
125
+ // "Docker host", but "host" and "database server" for the generic nouns.
126
+ export function describeResourceNoun(resourceType) {
127
+ if (resourceType === AiResourceType.Host) {
128
+ return "host";
129
+ }
130
+ if (resourceType === AiResourceType.DatabaseServer) {
131
+ return "database server";
132
+ }
133
+ return isAiResourceType(resourceType)
134
+ ? AI_RESOURCE_TYPE_INFO[resourceType].displayName
135
+ : "resource";
136
+ }
137
+ /*
138
+ * Where every next step sends an operator: the resource's AI agent page
139
+ * (AI → AI agent in its side menu). Shown verbatim in the investigation's
140
+ * report and panel, so it always names the page.
141
+ */
142
+ export function getResourceAiAgentPage(resourceType) {
143
+ return `the ${describeResourceNoun(resourceType)}'s AI agent page (AI → AI agent)`;
144
+ }
145
+ /*
146
+ * How to install the resource's agent, as one sentence: the image, the
147
+ * type, and the identity to register with — spelled with this resource's
148
+ * own identity when it is known, so the agent lands on THIS row.
149
+ */
150
+ export function getResourceAiAgentInstallNextStep(data) {
151
+ const info = AI_RESOURCE_TYPE_INFO[data.resourceType];
152
+ const noun = describeResourceNoun(data.resourceType);
153
+ let identity;
154
+ if (data.resourceType === AiResourceType.DatabaseServer) {
155
+ identity = data.resourceId
156
+ ? ` and DATABASE_SERVER_ID=${data.resourceId}`
157
+ : " and DATABASE_SERVER_ID set to this database server's id";
158
+ }
159
+ else {
160
+ const variable = info.identityEnvVars[0] || "the identity";
161
+ identity = data.identifier
162
+ ? ` and ${variable}=${data.identifier}`
163
+ : ` and ${variable} set to the name its collector reports`;
164
+ }
165
+ return `Install the ${info.agentDisplayName} next to this ${noun}'s telemetry collector: run the ${RESOURCE_AI_AGENT_IMAGE_REPOSITORY} image with ${RESOURCE_AI_AGENT_RESOURCE_TYPE_ENV}=${info.agentAlias}${identity}. The complete snippet is on ${getResourceAiAgentPage(data.resourceType)}.`;
166
+ }
167
+ function toDate(value) {
168
+ if (!value) {
169
+ return null;
170
+ }
171
+ const date = value instanceof Date ? value : new Date(value);
172
+ return Number.isNaN(date.getTime()) ? null : date;
173
+ }
174
+ function toIsoString(value) {
175
+ const date = toDate(value);
176
+ return date ? OneUptimeDate.toString(date) : undefined;
177
+ }
178
+ /*
179
+ * The allowlist column is jsonb; a client may save it as an array or as a
180
+ * JSON string. Anything unusable normalizes to empty — nothing risky
181
+ * auto-executes.
182
+ */
183
+ export function normalizeResourceAllowlist(value) {
184
+ let raw = value;
185
+ if (typeof raw === "string") {
186
+ try {
187
+ raw = JSON.parse(raw);
188
+ }
189
+ catch (_a) {
190
+ raw = [value];
191
+ }
192
+ }
193
+ if (!Array.isArray(raw)) {
194
+ return [];
195
+ }
196
+ return raw
197
+ .filter((pattern) => {
198
+ return typeof pattern === "string" && pattern.trim().length > 0;
199
+ })
200
+ .map((pattern) => {
201
+ return pattern.trim();
202
+ });
203
+ }
204
+ function refKey(resourceType, resourceId) {
205
+ return `${resourceType}:${resourceId.toLowerCase()}`;
206
+ }
207
+ function readString(value) {
208
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
209
+ }
210
+ export class ResourceAiAccessServiceClass {
211
+ /*
212
+ * ------------------------------------------------------------------
213
+ * Readiness
214
+ * ------------------------------------------------------------------
215
+ */
216
+ // The project-wide gates, read exactly as they are for clusters.
217
+ async getProjectGates(projectId) {
218
+ return await KubernetesClusterAiAccessService.getProjectGates(projectId);
219
+ }
220
+ async getStatusForResource(data) {
221
+ const statuses = await this.getStatusesForResources({
222
+ projectId: data.projectId,
223
+ resources: [
224
+ {
225
+ resourceType: data.resourceType,
226
+ resourceId: data.resourceId.toString(),
227
+ },
228
+ ],
229
+ gates: data.gates,
230
+ });
231
+ return statuses[0] || null;
232
+ }
233
+ /*
234
+ * The status of several resources of one project, in the order asked
235
+ * for, with every resource's agent row read in ONE query. A resource
236
+ * that does not exist in the project (or, with excludeArchived, is
237
+ * archived) has no status. When the agent read fails every status reads
238
+ * as having no agent, which can only make it say less is reachable.
239
+ */
240
+ async getStatusesForResources(data) {
241
+ const rows = await this.loadResources({
242
+ projectId: data.projectId,
243
+ resources: data.resources,
244
+ excludeArchived: data.excludeArchived,
245
+ });
246
+ if (rows.length === 0) {
247
+ return [];
248
+ }
249
+ const gates = data.gates || (await this.getProjectGates(data.projectId));
250
+ let agentRows = new Map();
251
+ try {
252
+ agentRows = await this.findAgentRows({
253
+ projectId: data.projectId,
254
+ resources: rows,
255
+ });
256
+ }
257
+ catch (error) {
258
+ logger.error(`ResourceAiAccess: could not read the resource AI agents of project ${data.projectId.toString()}; every resource reads as having none: ${error}`);
259
+ }
260
+ return rows.map((row) => {
261
+ return this.buildStatus({
262
+ resource: row,
263
+ agentRow: agentRows.get(refKey(row.resourceType, row.id.toString())) || null,
264
+ gates,
265
+ });
266
+ });
267
+ }
268
+ /*
269
+ * The readiness computation proper, for one resource row, its agent row
270
+ * (online or not; null when none ever registered) and the project gates.
271
+ * Pure: every read was done by the caller.
272
+ */
273
+ buildStatus(data) {
274
+ const { resource, agentRow, gates } = data;
275
+ const type = resource.resourceType;
276
+ const info = AI_RESOURCE_TYPE_INFO[type];
277
+ const noun = describeResourceNoun(type);
278
+ const page = getResourceAiAgentPage(type);
279
+ const gaps = [];
280
+ /*
281
+ * The agent as ResourceAiAgentService sees it: one online rule for the
282
+ * status and for the chokepoint (findOnlineAgentForResource).
283
+ */
284
+ const agent = agentRow
285
+ ? ResourceAiAgentService.getAgentSummary(agentRow, data.now)
286
+ : null;
287
+ const posture = (agent === null || agent === void 0 ? void 0 : agent.posture) || null;
288
+ const remediationMode = resource.aiRemediationMode;
289
+ if (!agent) {
290
+ gaps.push({
291
+ code: "ai_agent_not_connected",
292
+ title: `No ${info.agentDisplayName} is connected`,
293
+ nextStep: getResourceAiAgentInstallNextStep({
294
+ resourceType: type,
295
+ resourceId: resource.id.toString(),
296
+ identifier: resource.identifier,
297
+ }),
298
+ blocksInvestigation: true,
299
+ blocksRemediation: true,
300
+ });
301
+ }
302
+ else if (!agent.isOnline) {
303
+ const lastAliveAt = toDate(agentRow === null || agentRow === void 0 ? void 0 : agentRow.lastAliveAt);
304
+ const lastAliveText = lastAliveAt
305
+ ? OneUptimeDate.getDateAsFormattedString(lastAliveAt)
306
+ : "an unknown time";
307
+ gaps.push({
308
+ code: "ai_agent_offline",
309
+ title: `The ${info.agentDisplayName} is offline`,
310
+ nextStep: `It last reported in at ${lastAliveText}${agent.connectionStatus === "disconnected"
311
+ ? " and then signed off (it was stopped, restarted or reset)"
312
+ : ""}. Check that its container is running and can reach your OneUptime URL (its logs say why it cannot).`,
313
+ blocksInvestigation: true,
314
+ blocksRemediation: true,
315
+ });
316
+ }
317
+ else if (!posture || posture.resourceType !== type) {
318
+ /*
319
+ * The agent always reports a posture for the type it serves; one
320
+ * that is missing, unreadable or for another type is not trusted
321
+ * with commands (the enqueue chokepoint refuses the same case).
322
+ */
323
+ gaps.push({
324
+ code: "ai_agent_unreachable_resource",
325
+ title: `The ${info.agentDisplayName} has not reported that it can reach this ${noun}`,
326
+ nextStep: `Wait for its next report (within a minute), or reset the agent on ${page}.`,
327
+ blocksInvestigation: true,
328
+ blocksRemediation: true,
329
+ });
330
+ }
331
+ else if (posture.reachable !== true) {
332
+ gaps.push({
333
+ code: "ai_agent_unreachable_resource",
334
+ title: `The ${info.agentDisplayName} cannot reach this ${noun}`,
335
+ nextStep: `Its last check failed${posture.reachError ? `: ${posture.reachError}` : ""}. Check ${REACH_HINTS[type]}, then use "Test connection" on ${page}.`,
336
+ blocksInvestigation: true,
337
+ blocksRemediation: true,
338
+ });
339
+ }
340
+ if (!resource.isAiInvestigationEnabled) {
341
+ gaps.push({
342
+ code: "investigation_disabled",
343
+ title: `AI investigation is turned off for this ${noun}`,
344
+ nextStep: `Turn on AI investigation on ${page}.`,
345
+ blocksInvestigation: true,
346
+ blocksRemediation: false,
347
+ });
348
+ }
349
+ if (remediationMode === ResourceAiRemediationMode.Disabled) {
350
+ gaps.push({
351
+ code: "remediation_disabled",
352
+ title: `AI fixes are turned off for this ${noun}`,
353
+ nextStep: `Set "Fixes" to "Ask for approval", "Automatic" or "Bypass approval" on ${page}.`,
354
+ blocksInvestigation: false,
355
+ blocksRemediation: true,
356
+ });
357
+ }
358
+ else if (agent && (posture === null || posture === void 0 ? void 0 : posture.allowWrites) !== true) {
359
+ gaps.push({
360
+ code: "remediation_write_access_missing",
361
+ title: `The ${info.agentDisplayName} is read-only`,
362
+ nextStep: `Set ${RESOURCE_AI_ALLOW_WRITES_ENV}=true on the ${info.agentDisplayName} and restart it (${RESOURCE_AI_WRITE_TARGETS_ENV} limits what it may change).`,
363
+ blocksInvestigation: false,
364
+ blocksRemediation: true,
365
+ });
366
+ }
367
+ if (!gates.isAiEnabled) {
368
+ gaps.push({
369
+ code: "ai_disabled_for_project",
370
+ title: "AI is disabled for this project",
371
+ nextStep: "Enable AI under Project Settings → AI Features.",
372
+ blocksInvestigation: true,
373
+ blocksRemediation: true,
374
+ });
375
+ }
376
+ if (!gates.hasLlmProvider) {
377
+ gaps.push({
378
+ code: "llm_provider_missing",
379
+ title: "No AI provider is configured",
380
+ nextStep: "Add a provider under Project Settings → AI → LLM Providers (or use OneUptime AI credits).",
381
+ blocksInvestigation: true,
382
+ blocksRemediation: true,
383
+ });
384
+ }
385
+ if (gates.aiBalanceBlocker) {
386
+ gaps.push({
387
+ code: "ai_balance_insufficient",
388
+ title: "The project is out of AI credits",
389
+ nextStep: AI_BALANCE_INSUFFICIENT_NEXT_STEP,
390
+ blocksInvestigation: true,
391
+ blocksRemediation: true,
392
+ });
393
+ }
394
+ if (!gates.isAutoRemediationEnabled) {
395
+ gaps.push({
396
+ code: "auto_remediation_disabled_for_project",
397
+ title: "Auto-remediation is disabled for this project",
398
+ nextStep: "Enable auto-remediation under Project Settings → AI Features.",
399
+ blocksInvestigation: false,
400
+ blocksRemediation: true,
401
+ });
402
+ }
403
+ const blocksInvestigation = gaps.some((gap) => {
404
+ return gap.blocksInvestigation;
405
+ });
406
+ const blocksRemediation = gaps.some((gap) => {
407
+ return gap.blocksRemediation;
408
+ });
409
+ return {
410
+ resourceType: type,
411
+ resourceId: resource.id.toString(),
412
+ resourceName: resource.name,
413
+ isAiInvestigationEnabled: resource.isAiInvestigationEnabled,
414
+ aiRemediationMode: remediationMode,
415
+ aiCommandAllowlist: resource.aiCommandAllowlist,
416
+ aiAccessConfiguredAt: toIsoString(resource.aiAccessConfiguredAt) || null,
417
+ aiAccessLastVerifiedAt: toIsoString(resource.aiAccessLastVerifiedAt) || null,
418
+ aiAccessLastError: resource.aiAccessLastError || null,
419
+ agent,
420
+ gaps,
421
+ isInvestigationReady: resource.isAiInvestigationEnabled && !blocksInvestigation,
422
+ isRemediationReady: remediationMode !== ResourceAiRemediationMode.Disabled &&
423
+ !blocksRemediation,
424
+ };
425
+ }
426
+ /*
427
+ * ------------------------------------------------------------------
428
+ * Rows
429
+ * ------------------------------------------------------------------
430
+ */
431
+ /*
432
+ * One resource of the project (as root: the caller scopes by project),
433
+ * or null when it is not the project's. Lookup failures propagate: the
434
+ * enqueue chokepoint must fail closed on a resource it could not read.
435
+ */
436
+ async loadResource(data) {
437
+ if (!isAiResourceType(data.resourceType)) {
438
+ return null;
439
+ }
440
+ const rows = await this.loadResources({
441
+ projectId: data.projectId,
442
+ resources: [
443
+ {
444
+ resourceType: data.resourceType,
445
+ resourceId: data.resourceId.toString(),
446
+ },
447
+ ],
448
+ });
449
+ return rows[0] || null;
450
+ }
451
+ /*
452
+ * Several resources of one project, one query per resource type, in the
453
+ * order asked for (duplicates and unknown types dropped).
454
+ */
455
+ async loadResources(data) {
456
+ const wanted = [];
457
+ const seen = new Set();
458
+ for (const ref of data.resources) {
459
+ if (!ref ||
460
+ !isAiResourceType(ref.resourceType) ||
461
+ typeof ref.resourceId !== "string" ||
462
+ !ObjectID.isValidUUID(ref.resourceId)) {
463
+ continue;
464
+ }
465
+ const key = refKey(ref.resourceType, ref.resourceId);
466
+ if (seen.has(key)) {
467
+ continue;
468
+ }
469
+ seen.add(key);
470
+ wanted.push(ref);
471
+ }
472
+ const byKey = new Map();
473
+ for (const type of ALL_AI_RESOURCE_TYPES) {
474
+ const ids = wanted
475
+ .filter((ref) => {
476
+ return ref.resourceType === type;
477
+ })
478
+ .map((ref) => {
479
+ return ref.resourceId;
480
+ });
481
+ if (ids.length === 0) {
482
+ continue;
483
+ }
484
+ const spec = MODEL_SPECS[type];
485
+ const models = (await spec.service.findBy({
486
+ query: Object.assign({ projectId: data.projectId, _id: QueryHelper.any(ids.map((id) => {
487
+ return new ObjectID(id);
488
+ })) }, (data.excludeArchived ? { isArchived: false } : {})),
489
+ select: Object.assign(Object.assign({}, AI_ACCESS_COLUMNS), spec.identityColumns),
490
+ limit: ids.length,
491
+ skip: 0,
492
+ props: { isRoot: true },
493
+ }));
494
+ for (const model of models) {
495
+ const row = this.toRow(type, model, data);
496
+ if (row) {
497
+ byKey.set(refKey(type, row.id.toString()), row);
498
+ }
499
+ }
500
+ }
501
+ const rows = [];
502
+ for (const ref of wanted) {
503
+ const row = byKey.get(refKey(ref.resourceType, ref.resourceId));
504
+ if (row) {
505
+ rows.push(row);
506
+ }
507
+ }
508
+ return rows;
509
+ }
510
+ // A resource model read through its service, as the status reads it.
511
+ toRow(resourceType, model, scope) {
512
+ const idValue = model["_id"] || model["id"];
513
+ const id = idValue instanceof ObjectID
514
+ ? idValue.toString()
515
+ : readString(idValue);
516
+ if (!id || !ObjectID.isValidUUID(id)) {
517
+ return null;
518
+ }
519
+ const projectIdValue = model["projectId"];
520
+ const projectId = projectIdValue instanceof ObjectID
521
+ ? projectIdValue.toString()
522
+ : readString(projectIdValue);
523
+ // The query was project-scoped; a row that says otherwise is not used.
524
+ if (projectId && projectId !== scope.projectId.toString()) {
525
+ return null;
526
+ }
527
+ const isArchived = model["isArchived"] === true;
528
+ if (scope.excludeArchived && isArchived) {
529
+ return null;
530
+ }
531
+ const identifier = this.readIdentifier(resourceType, model);
532
+ return {
533
+ resourceType,
534
+ id: new ObjectID(id),
535
+ projectId: scope.projectId,
536
+ name: readString(model["name"]) ||
537
+ identifier ||
538
+ AI_RESOURCE_TYPE_INFO[resourceType].displayName,
539
+ identifier,
540
+ isAiInvestigationEnabled: model["isAiInvestigationEnabled"] === true,
541
+ aiRemediationMode: parseResourceAiRemediationMode(model["aiRemediationMode"]),
542
+ aiCommandAllowlist: normalizeResourceAllowlist(model["aiCommandAllowlist"]),
543
+ aiAccessConfiguredAt: toDate(model["aiAccessConfiguredAt"]) || undefined,
544
+ aiAccessLastVerifiedAt: toDate(model["aiAccessLastVerifiedAt"]) || undefined,
545
+ aiAccessLastError: readString(model["aiAccessLastError"]),
546
+ isArchived,
547
+ };
548
+ }
549
+ /*
550
+ * The identity the resource's collector reports: hostIdentifier for
551
+ * hosts, the name for clusters and vCenters, and system|host:port for a
552
+ * database server.
553
+ */
554
+ readIdentifier(resourceType, model) {
555
+ if (resourceType === AiResourceType.DockerHost ||
556
+ resourceType === AiResourceType.PodmanHost ||
557
+ resourceType === AiResourceType.Host) {
558
+ return readString(model["hostIdentifier"]);
559
+ }
560
+ if (resourceType === AiResourceType.DatabaseServer) {
561
+ const address = readString(model["serverAddress"]);
562
+ if (!address) {
563
+ return undefined;
564
+ }
565
+ const port = model["serverPort"];
566
+ const system = readString(model["dbSystem"]);
567
+ return `${system ? `${system}|` : ""}${address}${typeof port === "number" && Number.isFinite(port) ? `:${port}` : ""}`;
568
+ }
569
+ return readString(model["name"]);
570
+ }
571
+ /*
572
+ * The agent rows of these resources (online or not), keyed by
573
+ * type:resourceId — one query per resource type present
574
+ * (ResourceAiAgentService.findAgentsForResources). Never reads the key
575
+ * hash.
576
+ */
577
+ async findAgentRows(data) {
578
+ const byKey = new Map();
579
+ for (const type of ALL_AI_RESOURCE_TYPES) {
580
+ const ids = data.resources
581
+ .filter((resource) => {
582
+ return resource.resourceType === type;
583
+ })
584
+ .map((resource) => {
585
+ return resource.id;
586
+ });
587
+ if (ids.length === 0) {
588
+ continue;
589
+ }
590
+ const rows = await ResourceAiAgentService.findAgentsForResources({
591
+ projectId: data.projectId,
592
+ resourceType: type,
593
+ resourceIds: ids,
594
+ });
595
+ for (const [resourceId, row] of rows) {
596
+ byKey.set(refKey(type, resourceId), row);
597
+ }
598
+ }
599
+ return byKey;
600
+ }
601
+ /*
602
+ * ------------------------------------------------------------------
603
+ * The access target
604
+ * ------------------------------------------------------------------
605
+ */
606
+ /*
607
+ * The resource and the agent a command for it goes to NOW: its online
608
+ * agent, or null. Lookup failures propagate: the enqueue chokepoint must
609
+ * fail closed on a target it could not check.
610
+ */
611
+ async loadAccessTarget(data) {
612
+ const resource = await this.loadResource(data);
613
+ if (!resource) {
614
+ return { resource: null, agent: null };
615
+ }
616
+ const agent = await ResourceAiAgentService.findOnlineAgentForResource({
617
+ projectId: data.projectId,
618
+ resourceType: resource.resourceType,
619
+ resourceId: resource.id,
620
+ });
621
+ return { resource, agent: agent || null };
622
+ }
623
+ /*
624
+ * ------------------------------------------------------------------
625
+ * Subjects
626
+ * ------------------------------------------------------------------
627
+ */
628
+ /*
629
+ * The unarchived resources of the project an incident or alert is linked
630
+ * to, in the order ALL_AI_RESOURCE_TYPES lists the types, at most
631
+ * MAX_RESOURCES_PER_SUBJECT. Linked means the subject's resource
632
+ * relations (written when it was created, from its series labels and its
633
+ * monitors' configuration); when none of those is an unarchived resource
634
+ * of the project, the subject's monitors' step configuration is resolved
635
+ * again now (the resource may have appeared after the subject was
636
+ * created, or replaced an archived one), matching names
637
+ * case-insensitively like the linker does.
638
+ *
639
+ * Archived and missing resources are dropped BEFORE the cap: capping
640
+ * first would let ten archived links hide an active one behind them.
641
+ */
642
+ async getResourcesForSubject(data) {
643
+ const linked = new Map();
644
+ const monitorIds = [];
645
+ if (data.alertId || data.incidentId) {
646
+ const relations = await Promise.all(ALL_AI_RESOURCE_TYPES.map(async (type) => {
647
+ return {
648
+ type,
649
+ ids: await this.readSubjectRelation({
650
+ projectId: data.projectId,
651
+ incidentId: data.incidentId,
652
+ alertId: data.alertId,
653
+ relation: MODEL_SPECS[type].subjectRelation,
654
+ }),
655
+ };
656
+ }));
657
+ for (const relation of relations) {
658
+ linked.set(relation.type, relation.ids);
659
+ }
660
+ monitorIds.push(...(await this.readSubjectMonitorIds({
661
+ projectId: data.projectId,
662
+ incidentId: data.incidentId,
663
+ alertId: data.alertId,
664
+ })));
665
+ }
666
+ let refs = await this.keepUnarchivedRefs({
667
+ projectId: data.projectId,
668
+ refs: this.flattenRefs(linked),
669
+ });
670
+ if (refs.length === 0 && monitorIds.length > 0) {
671
+ refs = await this.keepUnarchivedRefs({
672
+ projectId: data.projectId,
673
+ refs: this.flattenRefs(await this.resolveMonitorResources({
674
+ projectId: data.projectId,
675
+ monitorIds,
676
+ })),
677
+ });
678
+ }
679
+ return refs;
680
+ }
681
+ /*
682
+ * The first MAX_RESOURCES_PER_SUBJECT of these refs (in their order) that
683
+ * are unarchived resources of the project, read in batches so a long
684
+ * list of archived links costs a few reads, not one per link.
685
+ */
686
+ async keepUnarchivedRefs(data) {
687
+ const kept = [];
688
+ for (let start = 0; start < data.refs.length && kept.length < MAX_RESOURCES_PER_SUBJECT; start += SUBJECT_RESOURCE_READ_BATCH_SIZE) {
689
+ const rows = await this.loadResources({
690
+ projectId: data.projectId,
691
+ resources: data.refs.slice(start, start + SUBJECT_RESOURCE_READ_BATCH_SIZE),
692
+ excludeArchived: true,
693
+ });
694
+ for (const row of rows) {
695
+ kept.push({
696
+ resourceType: row.resourceType,
697
+ resourceId: row.id.toString(),
698
+ });
699
+ }
700
+ }
701
+ return kept.slice(0, MAX_RESOURCES_PER_SUBJECT);
702
+ }
703
+ async getStatusesForSubject(data) {
704
+ const refs = await this.getResourcesForSubject(data);
705
+ if (refs.length === 0) {
706
+ return [];
707
+ }
708
+ return await this.getStatusesForResources({
709
+ projectId: data.projectId,
710
+ resources: refs,
711
+ excludeArchived: true,
712
+ });
713
+ }
714
+ // Types in priority order, each type's ids in relation order, deduped.
715
+ flattenRefs(byType) {
716
+ const refs = [];
717
+ const seen = new Set();
718
+ for (const type of ALL_AI_RESOURCE_TYPES) {
719
+ for (const id of byType.get(type) || []) {
720
+ const key = refKey(type, id);
721
+ if (!ObjectID.isValidUUID(id) || seen.has(key)) {
722
+ continue;
723
+ }
724
+ seen.add(key);
725
+ refs.push({ resourceType: type, resourceId: id });
726
+ }
727
+ }
728
+ return refs;
729
+ }
730
+ /*
731
+ * One of the subject's resource relations, read on its own: reading all
732
+ * eight many-to-many relations in one query would multiply their rows.
733
+ */
734
+ async readSubjectRelation(data) {
735
+ var _a;
736
+ const select = {
737
+ _id: true,
738
+ [data.relation]: { _id: true },
739
+ };
740
+ let linked = [];
741
+ if (data.alertId) {
742
+ const alert = await AlertService.findOneBy({
743
+ query: { _id: data.alertId.toString(), projectId: data.projectId },
744
+ select: select,
745
+ props: { isRoot: true },
746
+ });
747
+ linked = ((alert === null || alert === void 0 ? void 0 : alert[data.relation]) || []);
748
+ }
749
+ else if (data.incidentId) {
750
+ const incident = await IncidentService.findOneBy({
751
+ query: { _id: data.incidentId.toString(), projectId: data.projectId },
752
+ select: select,
753
+ props: { isRoot: true },
754
+ });
755
+ linked = ((incident === null || incident === void 0 ? void 0 : incident[data.relation]) || []);
756
+ }
757
+ const ids = [];
758
+ for (const resource of Array.isArray(linked) ? linked : []) {
759
+ const id = (_a = resource === null || resource === void 0 ? void 0 : resource.id) === null || _a === void 0 ? void 0 : _a.toString();
760
+ if (id) {
761
+ ids.push(id);
762
+ }
763
+ }
764
+ return ids;
765
+ }
766
+ async readSubjectMonitorIds(data) {
767
+ if (data.alertId) {
768
+ const alert = await AlertService.findOneBy({
769
+ query: { _id: data.alertId.toString(), projectId: data.projectId },
770
+ select: { _id: true, monitorId: true },
771
+ props: { isRoot: true },
772
+ });
773
+ return (alert === null || alert === void 0 ? void 0 : alert.monitorId) ? [alert.monitorId] : [];
774
+ }
775
+ if (data.incidentId) {
776
+ const incident = await IncidentService.findOneBy({
777
+ query: { _id: data.incidentId.toString(), projectId: data.projectId },
778
+ select: { _id: true, monitors: { _id: true } },
779
+ props: { isRoot: true },
780
+ });
781
+ return ((incident === null || incident === void 0 ? void 0 : incident.monitors) || [])
782
+ .map((monitor) => {
783
+ return monitor.id || undefined;
784
+ })
785
+ .filter((id) => {
786
+ return Boolean(id);
787
+ });
788
+ }
789
+ return [];
790
+ }
791
+ /*
792
+ * What the subject's monitors' step configuration names now, resolved
793
+ * the way the incident/alert creation path resolves it
794
+ * (MonitorResourceContext: MonitorStepResourceIdentity, then
795
+ * SeriesResourceLinker.resolveResourceRefs with case-insensitive
796
+ * names). Best effort per monitor: that resolution never throws.
797
+ */
798
+ async resolveMonitorResources(data) {
799
+ const byType = new Map();
800
+ const monitors = await MonitorService.findBy({
801
+ query: {
802
+ _id: QueryHelper.any(data.monitorIds.slice(0, MAX_RESOURCES_PER_SUBJECT)),
803
+ projectId: data.projectId,
804
+ },
805
+ select: {
806
+ _id: true,
807
+ projectId: true,
808
+ monitorType: true,
809
+ monitorSteps: true,
810
+ },
811
+ limit: MAX_RESOURCES_PER_SUBJECT,
812
+ skip: 0,
813
+ props: { isRoot: true },
814
+ });
815
+ for (const monitor of monitors) {
816
+ const resolved = await MonitorResourceContextUtil.resolveResourceContextForMonitor({
817
+ monitor,
818
+ });
819
+ for (const type of ALL_AI_RESOURCE_TYPES) {
820
+ const ids = resolved[MODEL_SPECS[type].resolvedIdsKey] || [];
821
+ if (ids.length > 0) {
822
+ byType.set(type, [...(byType.get(type) || []), ...ids]);
823
+ }
824
+ }
825
+ }
826
+ return byType;
827
+ }
828
+ /*
829
+ * ------------------------------------------------------------------
830
+ * Who may change a resource
831
+ * ------------------------------------------------------------------
832
+ */
833
+ /*
834
+ * Throws unless the caller may EDIT this resource: its update ACL, with
835
+ * label-scoped allow and block rows decided from the row's own labels,
836
+ * and the caller's Owned scope — exactly what a CRUD update of the row
837
+ * would check. Approving an AI plan runs its commands on the resource as
838
+ * root, so being allowed to start runbooks in the project is not enough
839
+ * on its own: someone blocked from editing (or reading) a resource must
840
+ * not be able to change it by approving a plan. Root and master admins
841
+ * are not gated. A resource that does not exist in the project is
842
+ * refused like one the caller may not edit.
843
+ */
844
+ async assertCallerMayChangeResource(data) {
845
+ if (data.props.isRoot || data.props.isMasterAdmin) {
846
+ return;
847
+ }
848
+ if (!isAiResourceType(data.resourceType)) {
849
+ throw new BadDataException(`"${String(data.resourceType)}" is not a resource type.`);
850
+ }
851
+ const noun = describeResourceNoun(data.resourceType);
852
+ const refusal = `You do not have permission to edit this ${noun}, so you cannot approve an AI plan that changes it. Ask someone who may edit the ${noun} to approve it, or dismiss the suggestion.`;
853
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
854
+ const service = MODEL_SPECS[data.resourceType].service;
855
+ const query = {
856
+ _id: data.resourceId.toString(),
857
+ projectId: data.projectId,
858
+ };
859
+ /*
860
+ * The caller's permissions are read for the resource's own project —
861
+ * the permission layer reads the rows of props.tenantId.
862
+ */
863
+ const callerProps = Object.assign(Object.assign({}, data.props), { tenantId: data.projectId, isMultiTenantRequest: false });
864
+ /*
865
+ * The row's labels, read as root: label-scoped allow and block rows are
866
+ * decided per row, from them (DatabaseService.updateOneById's read).
867
+ */
868
+ const select = { _id: true };
869
+ const accessControlColumn = service
870
+ .getModel()
871
+ .getAccessControlColumn();
872
+ if (accessControlColumn) {
873
+ select[accessControlColumn] = {
874
+ _id: true,
875
+ name: true,
876
+ };
877
+ }
878
+ const row = (await service.findOneBy({
879
+ query,
880
+ select,
881
+ props: { isRoot: true },
882
+ }));
883
+ if (!row) {
884
+ throw new NotAuthorizedException(refusal);
885
+ }
886
+ try {
887
+ // Readable to the caller at all (a label-scoped read block refuses).
888
+ const readable = (await service.findOneBy({
889
+ query,
890
+ select: { _id: true },
891
+ props: callerProps,
892
+ }));
893
+ if (!readable) {
894
+ throw new NotAuthorizedException(refusal);
895
+ }
896
+ await ModelPermission.checkUpdatePermissionByModel({
897
+ modelType: service.modelType,
898
+ fetchModelWithAccessControlIds: async () => {
899
+ return row;
900
+ },
901
+ props: callerProps,
902
+ });
903
+ /*
904
+ * The caller's whole update scope as a query (labels, Owned scope):
905
+ * the row must still be in it.
906
+ */
907
+ const permittedQuery = (await ModelPermission.checkUpdateQueryPermissions(service.modelType, query, {}, callerProps));
908
+ const permitted = (await service.findOneBy({
909
+ query: permittedQuery,
910
+ select: { _id: true },
911
+ props: { isRoot: true },
912
+ }));
913
+ if (!permitted) {
914
+ throw new NotAuthorizedException(refusal);
915
+ }
916
+ }
917
+ catch (error) {
918
+ if (error instanceof NotAuthorizedException ||
919
+ error instanceof NotAuthenticatedException) {
920
+ throw new NotAuthorizedException(refusal);
921
+ }
922
+ throw error;
923
+ }
924
+ }
925
+ /*
926
+ * ------------------------------------------------------------------
927
+ * Bookkeeping
928
+ * ------------------------------------------------------------------
929
+ */
930
+ /*
931
+ * Best effort: the resource's AI agent page shows "last verified" / "last
932
+ * error" from this. Written as root without the model's hooks — it is the
933
+ * server's own record of what a command did, not an operator's change to
934
+ * the resource's AI settings (the settings hooks stamp and police those).
935
+ */
936
+ async recordCommandOutcome(data) {
937
+ var _a;
938
+ try {
939
+ if (!isAiResourceType(data.resourceType)) {
940
+ throw new BadDataException(`"${String(data.resourceType)}" is not a resource type.`);
941
+ }
942
+ await MODEL_SPECS[data.resourceType].service.updateOneById({
943
+ id: data.resourceId,
944
+ data: (data.succeeded
945
+ ? {
946
+ aiAccessLastVerifiedAt: OneUptimeDate.getCurrentDate(),
947
+ aiAccessLastError: null,
948
+ }
949
+ : {
950
+ aiAccessLastError: (data.errorMessage || "Command failed.").slice(0, 2000),
951
+ }),
952
+ props: { isRoot: true, ignoreHooks: true },
953
+ });
954
+ }
955
+ catch (error) {
956
+ logger.error(`ResourceAiAccess: could not record a command outcome for ${String(data.resourceType)} ${(_a = data.resourceId) === null || _a === void 0 ? void 0 : _a.toString()}: ${error}`);
957
+ }
958
+ }
959
+ }
960
+ __decorate([
961
+ CaptureSpan(),
962
+ __metadata("design:type", Function),
963
+ __metadata("design:paramtypes", [ObjectID]),
964
+ __metadata("design:returntype", Promise)
965
+ ], ResourceAiAccessServiceClass.prototype, "getProjectGates", null);
966
+ __decorate([
967
+ CaptureSpan(),
968
+ __metadata("design:type", Function),
969
+ __metadata("design:paramtypes", [Object]),
970
+ __metadata("design:returntype", Promise)
971
+ ], ResourceAiAccessServiceClass.prototype, "getStatusForResource", null);
972
+ __decorate([
973
+ CaptureSpan(),
974
+ __metadata("design:type", Function),
975
+ __metadata("design:paramtypes", [Object]),
976
+ __metadata("design:returntype", Promise)
977
+ ], ResourceAiAccessServiceClass.prototype, "getStatusesForResources", null);
978
+ __decorate([
979
+ CaptureSpan(),
980
+ __metadata("design:type", Function),
981
+ __metadata("design:paramtypes", [Object]),
982
+ __metadata("design:returntype", Promise)
983
+ ], ResourceAiAccessServiceClass.prototype, "loadResource", null);
984
+ __decorate([
985
+ CaptureSpan(),
986
+ __metadata("design:type", Function),
987
+ __metadata("design:paramtypes", [Object]),
988
+ __metadata("design:returntype", Promise)
989
+ ], ResourceAiAccessServiceClass.prototype, "loadResources", null);
990
+ __decorate([
991
+ CaptureSpan(),
992
+ __metadata("design:type", Function),
993
+ __metadata("design:paramtypes", [Object]),
994
+ __metadata("design:returntype", Promise)
995
+ ], ResourceAiAccessServiceClass.prototype, "findAgentRows", null);
996
+ __decorate([
997
+ CaptureSpan(),
998
+ __metadata("design:type", Function),
999
+ __metadata("design:paramtypes", [Object]),
1000
+ __metadata("design:returntype", Promise)
1001
+ ], ResourceAiAccessServiceClass.prototype, "loadAccessTarget", null);
1002
+ __decorate([
1003
+ CaptureSpan(),
1004
+ __metadata("design:type", Function),
1005
+ __metadata("design:paramtypes", [Object]),
1006
+ __metadata("design:returntype", Promise)
1007
+ ], ResourceAiAccessServiceClass.prototype, "getResourcesForSubject", null);
1008
+ __decorate([
1009
+ CaptureSpan(),
1010
+ __metadata("design:type", Function),
1011
+ __metadata("design:paramtypes", [Object]),
1012
+ __metadata("design:returntype", Promise)
1013
+ ], ResourceAiAccessServiceClass.prototype, "getStatusesForSubject", null);
1014
+ __decorate([
1015
+ CaptureSpan(),
1016
+ __metadata("design:type", Function),
1017
+ __metadata("design:paramtypes", [Object]),
1018
+ __metadata("design:returntype", Promise)
1019
+ ], ResourceAiAccessServiceClass.prototype, "assertCallerMayChangeResource", null);
1020
+ __decorate([
1021
+ CaptureSpan(),
1022
+ __metadata("design:type", Function),
1023
+ __metadata("design:paramtypes", [Object]),
1024
+ __metadata("design:returntype", Promise)
1025
+ ], ResourceAiAccessServiceClass.prototype, "recordCommandOutcome", null);
1026
+ const ResourceAiAccessService = new ResourceAiAccessServiceClass();
1027
+ export default ResourceAiAccessService;
1028
+ //# sourceMappingURL=ResourceAiAccessService.js.map