@oneuptime/common 11.7.4 → 12.0.0

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 (872) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +67 -0
  2. package/Models/AnalyticsModels/Index.ts +10 -0
  3. package/Models/AnalyticsModels/Log.ts +60 -0
  4. package/Models/AnalyticsModels/RumSession.ts +1401 -0
  5. package/Models/AnalyticsModels/RumSessionChunk.ts +798 -0
  6. package/Models/AnalyticsModels/Span.ts +60 -0
  7. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +52 -0
  8. package/Models/DatabaseModels/AIRun.ts +31 -0
  9. package/Models/DatabaseModels/Alert.ts +29 -0
  10. package/Models/DatabaseModels/AlertCustomField.ts +1 -1
  11. package/Models/DatabaseModels/AlertFeed.ts +1 -0
  12. package/Models/DatabaseModels/AutoRemediationRule.ts +989 -0
  13. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +874 -0
  14. package/Models/DatabaseModels/CodeRepository.ts +129 -0
  15. package/Models/DatabaseModels/GlobalConfig.ts +312 -0
  16. package/Models/DatabaseModels/Incident.ts +29 -0
  17. package/Models/DatabaseModels/IncidentCustomField.ts +1 -1
  18. package/Models/DatabaseModels/IncidentFeed.ts +1 -0
  19. package/Models/DatabaseModels/Index.ts +21 -8
  20. package/Models/DatabaseModels/InstanceHealthLog.ts +8 -0
  21. package/Models/DatabaseModels/MonitorCustomField.ts +1 -1
  22. package/Models/DatabaseModels/MonitorStatus.ts +1 -1
  23. package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +2 -2
  24. package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +2 -2
  25. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +1 -1
  26. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +1 -1
  27. package/Models/DatabaseModels/Project.ts +231 -0
  28. package/Models/DatabaseModels/RumApplication.ts +906 -0
  29. package/Models/DatabaseModels/RumSessionErasureRequest.ts +561 -0
  30. package/Models/DatabaseModels/RumSessionPin.ts +457 -0
  31. package/Models/DatabaseModels/RumSessionReplayView.ts +406 -0
  32. package/Models/DatabaseModels/RunbookCredential.ts +673 -0
  33. package/Models/DatabaseModels/RunbookSecret.ts +7 -7
  34. package/Models/DatabaseModels/{RunbookAgent.ts → Runner.ts} +206 -46
  35. package/Models/DatabaseModels/{RunbookAgentJob.ts → RunnerJob.ts} +151 -18
  36. package/Models/DatabaseModels/{RunbookAgentOwnerTeam.ts → RunnerOwnerTeam.ts} +41 -43
  37. package/Models/DatabaseModels/{RunbookAgentOwnerUser.ts → RunnerOwnerUser.ts} +41 -43
  38. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +1 -1
  39. package/Models/DatabaseModels/StatusPageCustomField.ts +1 -1
  40. package/Models/DatabaseModels/TeamCustomField.ts +1 -1
  41. package/Models/DatabaseModels/TeamMemberCustomField.ts +1 -1
  42. package/Server/API/AIAgentDataAPI.ts +179 -48
  43. package/Server/API/AIAgentTaskAPI.ts +36 -37
  44. package/Server/API/AIAgentTaskLogAPI.ts +19 -33
  45. package/Server/API/AutoRemediationAPI.ts +557 -0
  46. package/Server/API/BaseAnalyticsAPI.ts +4 -1
  47. package/Server/API/CommonAPI.ts +35 -0
  48. package/Server/API/DashboardAPI.ts +340 -15
  49. package/Server/API/TelemetryAPI.ts +1622 -3
  50. package/Server/API/UserIncomingCallNumberAPI.ts +31 -0
  51. package/Server/DatabaseConfig.ts +26 -1
  52. package/Server/EnvironmentConfig.ts +13 -0
  53. package/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.ts +293 -0
  54. package/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.ts +67 -0
  55. package/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.ts +33 -0
  56. package/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.ts +40 -0
  57. package/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.ts +54 -0
  58. package/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.ts +104 -0
  59. package/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.ts +349 -0
  60. package/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.ts +67 -0
  61. package/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.ts +23 -0
  62. package/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.ts +42 -0
  63. package/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.ts +84 -0
  64. package/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.ts +152 -0
  65. package/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.ts +81 -0
  66. package/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.ts +151 -0
  67. package/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.ts +597 -0
  68. package/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.ts +71 -0
  69. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +32 -0
  70. package/Server/Services/AIRunService.ts +10 -0
  71. package/Server/Services/AIService.ts +30 -0
  72. package/Server/Services/AlertService.ts +41 -4
  73. package/Server/Services/AlertSeverityService.ts +25 -11
  74. package/Server/Services/AlertStateService.ts +25 -11
  75. package/Server/Services/AutoRemediationRuleEngineService.ts +1101 -0
  76. package/Server/Services/{RunbookAgentOwnerTeamService.ts → AutoRemediationRuleService.ts} +1 -1
  77. package/Server/Services/AutoRemediationSuggestionService.ts +183 -0
  78. package/Server/Services/BillingService.ts +50 -1
  79. package/Server/Services/DatabaseService.ts +92 -4
  80. package/Server/Services/IncidentService.ts +56 -4
  81. package/Server/Services/IncidentSeverityService.ts +25 -11
  82. package/Server/Services/IncidentStateService.ts +25 -11
  83. package/Server/Services/Index.ts +19 -0
  84. package/Server/Services/MonitorService.ts +24 -0
  85. package/Server/Services/MonitorStatusService.ts +25 -11
  86. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +18 -19
  87. package/Server/Services/NetworkDeviceLabelRuleService.ts +39 -0
  88. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +18 -19
  89. package/Server/Services/NetworkDeviceOwnerRuleService.ts +37 -0
  90. package/Server/Services/NetworkDeviceService.ts +172 -21
  91. package/Server/Services/NetworkSiteAssignmentRuleService.ts +92 -12
  92. package/Server/Services/NetworkSiteService.ts +27 -10
  93. package/Server/Services/ProjectService.ts +47 -0
  94. package/Server/Services/RumApplicationService.ts +240 -1
  95. package/Server/Services/RumSessionChunkService.ts +11 -0
  96. package/Server/Services/RumSessionErasureRequestService.ts +197 -0
  97. package/Server/Services/RumSessionPinService.ts +213 -0
  98. package/Server/Services/RumSessionReplayViewService.ts +201 -0
  99. package/Server/Services/RumSessionService.ts +123 -0
  100. package/Server/Services/RunbookCredentialService.ts +76 -0
  101. package/Server/Services/{RunbookAgentJobService.ts → RunnerJobService.ts} +202 -51
  102. package/Server/Services/{RunbookAgentOwnerUserService.ts → RunnerOwnerTeamService.ts} +1 -1
  103. package/Server/Services/RunnerOwnerUserService.ts +10 -0
  104. package/Server/Services/RunnerService.ts +172 -0
  105. package/Server/Services/ScheduledMaintenanceStateService.ts +25 -11
  106. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +15 -1
  107. package/Server/Services/ServiceService.ts +8 -2
  108. package/Server/Services/StatusPageService.ts +240 -36
  109. package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +20 -1
  110. package/Server/Services/TelemetryExceptionService.ts +3 -16
  111. package/Server/Services/TelemetryUsageBillingService.ts +33 -2
  112. package/Server/Services/TraceAggregationService.ts +196 -32
  113. package/Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts +17 -0
  114. package/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.ts +10 -0
  115. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +63 -7
  116. package/Server/Utils/AI/CodeFix/CodeFixAgentAuth.ts +128 -0
  117. package/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.ts +54 -0
  118. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +17 -10
  119. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +8 -6
  120. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +943 -0
  121. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +866 -0
  122. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +823 -0
  123. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +103 -12
  124. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +75 -17
  125. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +28 -6
  126. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +202 -12
  127. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +264 -14
  128. package/Server/Utils/AI/SRE/Insights/Triage.ts +2 -7
  129. package/Server/Utils/AI/SRE/InvestigationGrader.ts +5 -24
  130. package/Server/Utils/AI/SRE/InvestigationQueue.ts +259 -20
  131. package/Server/Utils/AI/SRE/PostedRootCause.ts +82 -0
  132. package/Server/Utils/AI/SRE/README.md +3 -2
  133. package/Server/Utils/AI/SRE/RemediationHandoff.ts +82 -0
  134. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +6 -19
  135. package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +2 -2
  136. package/Server/Utils/Alert/AlertPrivacyFilter.ts +58 -0
  137. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +604 -0
  138. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +619 -0
  139. package/Server/Utils/CorsOptions.ts +52 -0
  140. package/Server/Utils/Database/RelationIdUtil.ts +68 -0
  141. package/Server/Utils/Incident/IncidentPrivacyFilter.ts +60 -0
  142. package/Server/Utils/InstanceHealth/PostgresHealth.ts +286 -0
  143. package/Server/Utils/InstanceHealth/RedisHealth.ts +434 -0
  144. package/Server/Utils/Monitor/MonitorAlert.ts +20 -0
  145. package/Server/Utils/Monitor/MonitorIncident.ts +20 -0
  146. package/Server/Utils/Monitor/MonitorResource.ts +19 -0
  147. package/Server/Utils/Monitor/MonitorSummaryCapture.ts +104 -0
  148. package/Server/Utils/NetworkDevice/RulePatternValidator.ts +44 -0
  149. package/Server/Utils/OpenAPI.ts +2 -1
  150. package/Server/Utils/Runbook/RunbookExecutePermission.ts +94 -0
  151. package/Server/Utils/SessionReplay/SessionReplayErasureTombstone.ts +128 -0
  152. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +586 -0
  153. package/Server/Utils/SessionReplay/SessionReplayGateCacheStore.ts +188 -0
  154. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1449 -0
  155. package/Server/Utils/SessionReplay/SessionReplayRetention.ts +114 -0
  156. package/Server/Utils/SessionReplay/SessionReplayTargeting.ts +144 -0
  157. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +92 -0
  158. package/Server/Utils/StartServer.ts +47 -3
  159. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +44 -10
  160. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +557 -0
  161. package/Tests/App/Dashboard/WidgetCatalog.test.ts +479 -0
  162. package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +343 -0
  163. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +320 -0
  164. package/Tests/Models/AnalyticsModels/RumSessionSchema.test.ts +455 -0
  165. package/Tests/Models/AnalyticsModels/SessionIdCorrelation.test.ts +158 -0
  166. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +447 -0
  167. package/Tests/Models/RunnerVersionLabel.test.ts +223 -0
  168. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +1287 -0
  169. package/Tests/Server/API/LegacyRunbookAgentRoutes.test.ts +117 -0
  170. package/Tests/Server/API/SessionReplayAPI.test.ts +2093 -0
  171. package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +429 -0
  172. package/Tests/Server/API/UserSmsApi.test.ts +68 -2
  173. package/Tests/Server/DatabaseConfig.test.ts +150 -0
  174. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +2 -2
  175. package/Tests/Server/Infrastructure/ProcessSignalDelivery.test.ts +2 -3
  176. package/Tests/Server/Services/AIRunCodeFixClaimScoping.test.ts +100 -0
  177. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +8 -0
  178. package/Tests/Server/Services/AutoRemediationCommandRuleEngine.test.ts +334 -0
  179. package/Tests/Server/Services/AutoRemediationRuleEngineService.test.ts +517 -0
  180. package/Tests/Server/Services/BillingService.test.ts +158 -1
  181. package/Tests/Server/Services/DatabaseServiceEmptyUpdate.test.ts +24 -2
  182. package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +17 -10
  183. package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +128 -0
  184. package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +178 -0
  185. package/Tests/Server/Services/DatabaseServiceUpdateWriteRoutingMonitor.test.ts +206 -0
  186. package/Tests/Server/Services/MonitorServiceOperationalStatusSelection.test.ts +145 -0
  187. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +726 -0
  188. package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +570 -9
  189. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +94 -1
  190. package/Tests/Server/Services/NetworkSiteService.test.ts +85 -0
  191. package/Tests/Server/Services/RumApplicationReplayHealth.test.ts +114 -0
  192. package/Tests/Server/Services/RunbookCredentialService.test.ts +657 -0
  193. package/Tests/Server/Services/SessionReplayCreatePath.test.ts +376 -0
  194. package/Tests/Server/Services/SessionReplayGateCacheInvalidation.test.ts +211 -0
  195. package/Tests/Server/Services/SessionReplayMetering.test.ts +174 -0
  196. package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +555 -0
  197. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +25 -4
  198. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +17 -2
  199. package/Tests/Server/Services/TraceAggregationService.test.ts +48 -0
  200. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +855 -0
  201. package/Tests/Server/Services/UpdateOneByIdKeepsRowId.test.ts +38 -27
  202. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +44 -0
  203. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +475 -0
  204. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAuth.test.ts +257 -0
  205. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.test.ts +236 -0
  206. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +44 -6
  207. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +47 -1
  208. package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +2 -2
  209. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +294 -0
  210. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +2 -2
  211. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +47 -3
  212. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +233 -0
  213. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +463 -0
  214. package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
  215. package/Tests/Server/Utils/AI/RemediationAllowlistNormalization.test.ts +248 -0
  216. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +1008 -0
  217. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +887 -0
  218. package/Tests/Server/Utils/AI/RemediationHandoff.test.ts +306 -0
  219. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +745 -0
  220. package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +291 -0
  221. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +1050 -0
  222. package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +350 -0
  223. package/Tests/Server/Utils/AutoRemediation/RemediationVerifier.test.ts +341 -0
  224. package/Tests/Server/Utils/CorsOptions.test.ts +119 -0
  225. package/Tests/Server/Utils/Database/RelationIdUtil.test.ts +120 -0
  226. package/Tests/Server/Utils/Database/ResolveReferenceId.test.ts +60 -0
  227. package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +337 -0
  228. package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +671 -0
  229. package/Tests/Server/Utils/Monitor/MonitorSummaryCapture.test.ts +205 -0
  230. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +313 -0
  231. package/Tests/Server/Utils/PushNotificationUtil.test.ts +228 -0
  232. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +177 -0
  233. package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +108 -0
  234. package/Tests/Server/Utils/SessionReplay/SessionReplayRetention.test.ts +229 -0
  235. package/Tests/Server/Utils/SessionReplay/SessionReplayTargeting.test.ts +246 -0
  236. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +110 -0
  237. package/Tests/Types/AI/AIRunStatus.test.ts +25 -0
  238. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +1063 -0
  239. package/Tests/Types/BaseDatabase/AggregationType.test.ts +56 -0
  240. package/Tests/Types/CustomField/CustomFieldDropdownOption.test.ts +227 -0
  241. package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +811 -0
  242. package/Tests/Types/Dashboard/RumDashboardTemplate.test.ts +1238 -0
  243. package/Tests/Types/Day/DayOfWeek.test.ts +46 -0
  244. package/Tests/Types/Docker/DockerInventoryExtractor.test.ts +249 -0
  245. package/Tests/Types/Kubernetes/KubernetesInventoryExtractor.test.ts +231 -0
  246. package/Tests/Types/Kubernetes/KubernetesRightSizing.test.ts +323 -0
  247. package/Tests/Types/Metrics/MetricDownsamplingRetentionDays.test.ts +77 -0
  248. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +42 -14
  249. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +2 -2
  250. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +3 -2
  251. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +1 -1
  252. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +6 -3
  253. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +285 -0
  254. package/Tests/Types/Podman/PodmanInventoryExtractor.test.ts +159 -0
  255. package/Tests/Types/Runbook/RunbookExecutionDeadline.test.ts +268 -0
  256. package/Tests/Types/Runbook/RunbookStepType.test.ts +242 -0
  257. package/Tests/Types/Telemetry/TelemetryRetentionConfig.test.ts +225 -0
  258. package/Tests/Types/Text.test.ts +60 -0
  259. package/Tests/UI/Components/AutocompleteTextInputMenu.test.tsx +555 -0
  260. package/Tests/UI/Components/BulkLabelActions.test.tsx +1502 -0
  261. package/Tests/UI/Components/BulkOwnerActions.test.tsx +1255 -0
  262. package/Tests/UI/Components/CustomFields/DropdownOptionsInput.test.tsx +228 -0
  263. package/Tests/UI/Components/Detail/DropdownColors.test.tsx +128 -0
  264. package/Tests/UI/Components/Dropdown/DropdownValueBadge.test.tsx +60 -0
  265. package/Tests/UI/Components/FilterModalOperatorMenu.test.tsx +674 -0
  266. package/Tests/UI/Components/Forms/ColorPicker.test.tsx +48 -0
  267. package/Tests/UI/Components/Forms/ColorPickerPopup.test.tsx +222 -0
  268. package/Tests/UI/Components/Forms/IconPickerPopup.test.tsx +270 -0
  269. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +125 -6
  270. package/Tests/UI/Components/OperatorSelectorFilterTypes.test.tsx +1595 -0
  271. package/Tests/UI/Components/OperatorSelectorKeyboard.test.tsx +851 -0
  272. package/Tests/UI/Components/OperatorSelectorMenu.test.tsx +1229 -0
  273. package/Tests/UI/Components/Pagination.test.tsx +85 -0
  274. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +248 -0
  275. package/Tests/UI/Rum/ChunkLoader.test.ts +790 -0
  276. package/Tests/UI/Rum/ReplayScrubber.test.tsx +236 -0
  277. package/Tests/UI/Rum/ReplayStage.test.tsx +606 -0
  278. package/Tests/UI/Utils/Timezone.test.ts +86 -0
  279. package/Tests/UI/Utils/UseClockTick.test.tsx +276 -0
  280. package/Tests/Utils/AiRemediation/CommandPolicy.test.ts +1063 -0
  281. package/Tests/Utils/Dashboard/ClockWidgetFormat.test.ts +1374 -0
  282. package/Tests/Utils/Dashboard/DashboardClockComponent.test.ts +362 -0
  283. package/Tests/Utils/Dashboard/DashboardHtmlComponent.test.ts +217 -0
  284. package/Tests/Utils/Dashboard/HtmlWidgetDocument.test.ts +656 -0
  285. package/Tests/Utils/Dashboard/ValueWidgetLayout.test.ts +1007 -0
  286. package/Tests/Utils/Metrics/MetricSeriesScope.test.ts +1197 -0
  287. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +839 -0
  288. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +69 -0
  289. package/Tests/Utils/Rules/RulePatternMatchUtil.test.ts +274 -0
  290. package/Tests/Utils/Rum/ChunkMath.test.ts +286 -0
  291. package/Tests/Utils/Rum/Masking.test.ts +186 -0
  292. package/Tests/Utils/Rum/SessionIdentity.test.ts +272 -0
  293. package/Tests/Utils/Rum/SessionSampling.test.ts +164 -0
  294. package/Tests/Utils/Rum/UrlScrubber.test.ts +175 -0
  295. package/Tests/Utils/StatusPage/Report.test.ts +708 -0
  296. package/Tests/Utils/ValueFormatter.test.ts +299 -1
  297. package/Types/AI/AIRunStatus.ts +18 -7
  298. package/Types/AI/AIRunType.ts +18 -0
  299. package/Types/AI/FixVerificationStatus.ts +21 -0
  300. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +16 -0
  301. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +304 -0
  302. package/Types/AutoRemediation/AutoRemediationExecutionMode.ts +17 -0
  303. package/Types/AutoRemediation/AutoRemediationSuggestionStatus.ts +35 -0
  304. package/Types/AutoRemediation/AutoRemediationSuggestionType.ts +17 -0
  305. package/Types/AutoRemediation/AutoRemediationTriggerEntity.ts +11 -0
  306. package/Types/AutoRemediation/AutoRemediationVerificationStatus.ts +21 -0
  307. package/Types/CustomField/CustomFieldDropdownOption.ts +190 -0
  308. package/Types/Dashboard/DashboardComponentType.ts +2 -0
  309. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +4 -0
  310. package/Types/Dashboard/DashboardComponents/DashboardClockComponent.ts +45 -0
  311. package/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.ts +27 -0
  312. package/Types/Dashboard/DashboardComponents/DashboardValueComponent.ts +8 -0
  313. package/Types/Dashboard/DashboardTemplates.ts +516 -0
  314. package/Types/Date.ts +6 -0
  315. package/Types/Email/EmailTemplateType.ts +2 -0
  316. package/Types/Kubernetes/KubernetesRightSizing.ts +353 -0
  317. package/Types/MeteredPlan/ProductType.ts +1 -0
  318. package/Types/Monitor/MonitorStepMetricMonitor.ts +27 -1
  319. package/Types/Monitor/MonitorSteps.ts +5 -0
  320. package/Types/Monitor/MonitorSummarySnapshot.ts +88 -0
  321. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +52 -10
  322. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +7 -5
  323. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +101 -20
  324. package/Types/Monitor/RumAlertTemplates.ts +386 -0
  325. package/Types/Permission.ts +204 -24
  326. package/Types/Rum/SessionReplay.ts +452 -0
  327. package/Types/Rum/SessionReplayCaptureTrigger.ts +26 -0
  328. package/Types/Rum/SessionReplayConsentMode.ts +27 -0
  329. package/Types/Rum/SessionReplayMaskingMode.ts +86 -0
  330. package/Types/Rum/SessionReplayTriggerReason.ts +31 -0
  331. package/Types/Runbook/RunbookCredentialType.ts +6 -0
  332. package/Types/Runbook/RunbookStep.ts +66 -1
  333. package/Types/Runbook/RunbookStepType.ts +26 -0
  334. package/Types/Runbook/RunnerJobOrigin.ts +20 -0
  335. package/Types/Runbook/{RunbookAgentJobStatus.ts → RunnerJobStatus.ts} +2 -2
  336. package/Types/StatusPage/StatusPageReport.ts +99 -0
  337. package/Types/Telemetry/TelemetryRetentionConfig.ts +18 -1
  338. package/Types/Text.ts +33 -0
  339. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +260 -75
  340. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +99 -9
  341. package/UI/Components/BulkUpdate/BulkOwnerActions.tsx +11 -0
  342. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +19 -14
  343. package/UI/Components/CustomFields/DropdownOptionsInput.tsx +144 -54
  344. package/UI/Components/Detail/Detail.tsx +9 -22
  345. package/UI/Components/Dropdown/Dropdown.tsx +2 -5
  346. package/UI/Components/Dropdown/DropdownMenuZIndex.ts +7 -0
  347. package/UI/Components/Dropdown/DropdownValueBadge.tsx +61 -0
  348. package/UI/Components/Filters/OperatorSelector.tsx +350 -39
  349. package/UI/Components/Forms/Fields/ColorPicker.tsx +60 -27
  350. package/UI/Components/Forms/Fields/IconPicker.tsx +89 -60
  351. package/UI/Components/Forms/Validation.ts +9 -4
  352. package/UI/Components/List/List.tsx +1 -0
  353. package/UI/Components/ModelTable/CustomFieldColumns.tsx +41 -32
  354. package/UI/Components/Pagination/Pagination.tsx +33 -10
  355. package/UI/Components/Table/Table.tsx +1 -0
  356. package/UI/Types/UseAnchoredFieldPopup.ts +321 -0
  357. package/UI/Utils/Dropdown.ts +26 -0
  358. package/UI/Utils/Timezone.ts +18 -2
  359. package/UI/Utils/UseClockTick.ts +78 -0
  360. package/Utils/AiRemediation/CommandPolicy.ts +398 -0
  361. package/Utils/Dashboard/ClockWidgetFormat.ts +604 -0
  362. package/Utils/Dashboard/Components/DashboardClockComponent.ts +181 -0
  363. package/Utils/Dashboard/Components/DashboardHtmlComponent.ts +162 -0
  364. package/Utils/Dashboard/Components/DashboardValueComponent.ts +12 -1
  365. package/Utils/Dashboard/Components/Index.ts +14 -0
  366. package/Utils/Dashboard/HtmlWidgetDocument.ts +309 -0
  367. package/Utils/Dashboard/ValueWidgetLayout.ts +471 -0
  368. package/Utils/Metrics/MetricSeriesScope.ts +301 -0
  369. package/Utils/Monitor/MonitorSummarySnapshotUtil.ts +593 -0
  370. package/Utils/NetworkSite/CidrMatchUtil.ts +30 -17
  371. package/Utils/Rules/RulePatternMatchUtil.ts +103 -0
  372. package/Utils/Rum/ChunkMath.ts +211 -0
  373. package/Utils/Rum/Masking.ts +168 -0
  374. package/Utils/Rum/SessionIdentity.ts +230 -0
  375. package/Utils/Rum/SessionSampling.ts +108 -0
  376. package/Utils/Rum/UrlScrubber.ts +185 -0
  377. package/Utils/Schema/ModelSchema.ts +27 -3
  378. package/Utils/StatusPage/Report.ts +304 -0
  379. package/Utils/ValueFormatter.ts +300 -54
  380. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +63 -0
  381. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  382. package/build/dist/Models/AnalyticsModels/Index.js +10 -0
  383. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  384. package/build/dist/Models/AnalyticsModels/Log.js +56 -0
  385. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  386. package/build/dist/Models/AnalyticsModels/RumSession.js +1159 -0
  387. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -0
  388. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +670 -0
  389. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -0
  390. package/build/dist/Models/AnalyticsModels/Span.js +56 -0
  391. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  392. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +54 -0
  393. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  394. package/build/dist/Models/DatabaseModels/AIRun.js +32 -0
  395. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  396. package/build/dist/Models/DatabaseModels/Alert.js +30 -0
  397. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  398. package/build/dist/Models/DatabaseModels/AlertCustomField.js +1 -1
  399. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  400. package/build/dist/Models/DatabaseModels/AlertFeed.js +1 -0
  401. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  402. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js +998 -0
  403. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js.map +1 -0
  404. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +917 -0
  405. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -0
  406. package/build/dist/Models/DatabaseModels/CodeRepository.js +132 -0
  407. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  408. package/build/dist/Models/DatabaseModels/GlobalConfig.js +327 -0
  409. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  410. package/build/dist/Models/DatabaseModels/Incident.js +30 -0
  411. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  412. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +1 -1
  413. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  414. package/build/dist/Models/DatabaseModels/IncidentFeed.js +1 -0
  415. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  416. package/build/dist/Models/DatabaseModels/Index.js +20 -8
  417. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  418. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +8 -0
  419. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -1
  420. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +1 -1
  421. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  422. package/build/dist/Models/DatabaseModels/MonitorStatus.js +1 -1
  423. package/build/dist/Models/DatabaseModels/MonitorStatus.js.map +1 -1
  424. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +2 -2
  425. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -1
  426. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +2 -2
  427. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -1
  428. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +1 -1
  429. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
  430. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +1 -1
  431. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  432. package/build/dist/Models/DatabaseModels/Project.js +235 -0
  433. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  434. package/build/dist/Models/DatabaseModels/RumApplication.js +930 -0
  435. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  436. package/build/dist/Models/DatabaseModels/RumSessionErasureRequest.js +591 -0
  437. package/build/dist/Models/DatabaseModels/RumSessionErasureRequest.js.map +1 -0
  438. package/build/dist/Models/DatabaseModels/RumSessionPin.js +483 -0
  439. package/build/dist/Models/DatabaseModels/RumSessionPin.js.map +1 -0
  440. package/build/dist/Models/DatabaseModels/RumSessionReplayView.js +433 -0
  441. package/build/dist/Models/DatabaseModels/RumSessionReplayView.js.map +1 -0
  442. package/build/dist/Models/DatabaseModels/RunbookCredential.js +693 -0
  443. package/build/dist/Models/DatabaseModels/RunbookCredential.js.map +1 -0
  444. package/build/dist/Models/DatabaseModels/RunbookSecret.js +8 -8
  445. package/build/dist/Models/DatabaseModels/RunbookSecret.js.map +1 -1
  446. package/build/dist/Models/DatabaseModels/{RunbookAgent.js → Runner.js} +235 -70
  447. package/build/dist/Models/DatabaseModels/Runner.js.map +1 -0
  448. package/build/dist/Models/DatabaseModels/{RunbookAgentJob.js → RunnerJob.js} +173 -40
  449. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -0
  450. package/build/dist/Models/DatabaseModels/{RunbookAgentOwnerTeam.js → RunnerOwnerTeam.js} +57 -57
  451. package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js.map +1 -0
  452. package/build/dist/Models/DatabaseModels/{RunbookAgentOwnerUser.js → RunnerOwnerUser.js} +57 -57
  453. package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js.map +1 -0
  454. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +1 -1
  455. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  456. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +1 -1
  457. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  458. package/build/dist/Models/DatabaseModels/TeamCustomField.js +1 -1
  459. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  460. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +1 -1
  461. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  462. package/build/dist/Server/API/AIAgentDataAPI.js +130 -45
  463. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  464. package/build/dist/Server/API/AIAgentTaskAPI.js +26 -36
  465. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  466. package/build/dist/Server/API/AIAgentTaskLogAPI.js +11 -28
  467. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  468. package/build/dist/Server/API/AutoRemediationAPI.js +416 -0
  469. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -0
  470. package/build/dist/Server/API/BaseAnalyticsAPI.js +4 -1
  471. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  472. package/build/dist/Server/API/CommonAPI.js +24 -0
  473. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  474. package/build/dist/Server/API/DashboardAPI.js +265 -6
  475. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  476. package/build/dist/Server/API/TelemetryAPI.js +940 -3
  477. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  478. package/build/dist/Server/API/UserIncomingCallNumberAPI.js +18 -0
  479. package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
  480. package/build/dist/Server/DatabaseConfig.js +23 -4
  481. package/build/dist/Server/DatabaseConfig.js.map +1 -1
  482. package/build/dist/Server/EnvironmentConfig.js +8 -0
  483. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  484. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.js +106 -0
  485. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.js.map +1 -0
  486. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.js +37 -0
  487. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.js.map +1 -0
  488. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.js +18 -0
  489. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.js.map +1 -0
  490. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.js +29 -0
  491. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.js.map +1 -0
  492. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.js +35 -0
  493. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.js.map +1 -0
  494. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.js +40 -0
  495. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.js.map +1 -0
  496. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.js +128 -0
  497. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.js.map +1 -0
  498. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.js +28 -0
  499. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.js.map +1 -0
  500. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.js +14 -0
  501. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.js.map +1 -0
  502. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.js +27 -0
  503. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.js.map +1 -0
  504. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.js +44 -0
  505. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.js.map +1 -0
  506. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.js +88 -0
  507. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.js.map +1 -0
  508. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.js +59 -0
  509. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.js.map +1 -0
  510. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.js +76 -0
  511. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.js.map +1 -0
  512. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.js +214 -0
  513. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.js.map +1 -0
  514. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.js +44 -0
  515. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.js.map +1 -0
  516. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +32 -0
  517. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  518. package/build/dist/Server/Services/AIRunService.js +1 -4
  519. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  520. package/build/dist/Server/Services/AIService.js +26 -0
  521. package/build/dist/Server/Services/AIService.js.map +1 -1
  522. package/build/dist/Server/Services/AlertService.js +37 -4
  523. package/build/dist/Server/Services/AlertService.js.map +1 -1
  524. package/build/dist/Server/Services/AlertSeverityService.js +24 -11
  525. package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
  526. package/build/dist/Server/Services/AlertStateService.js +24 -11
  527. package/build/dist/Server/Services/AlertStateService.js.map +1 -1
  528. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +917 -0
  529. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -0
  530. package/build/dist/Server/Services/{RunbookAgentOwnerTeamService.js → AutoRemediationRuleService.js} +2 -2
  531. package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -0
  532. package/build/dist/Server/Services/AutoRemediationSuggestionService.js +127 -0
  533. package/build/dist/Server/Services/AutoRemediationSuggestionService.js.map +1 -0
  534. package/build/dist/Server/Services/BillingService.js +45 -1
  535. package/build/dist/Server/Services/BillingService.js.map +1 -1
  536. package/build/dist/Server/Services/DatabaseService.js +72 -4
  537. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  538. package/build/dist/Server/Services/IncidentService.js +52 -4
  539. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  540. package/build/dist/Server/Services/IncidentSeverityService.js +24 -11
  541. package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
  542. package/build/dist/Server/Services/IncidentStateService.js +24 -11
  543. package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
  544. package/build/dist/Server/Services/Index.js +18 -0
  545. package/build/dist/Server/Services/Index.js.map +1 -1
  546. package/build/dist/Server/Services/MonitorService.js +24 -0
  547. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  548. package/build/dist/Server/Services/MonitorStatusService.js +25 -11
  549. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  550. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +12 -11
  551. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  552. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js +43 -0
  553. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js.map +1 -1
  554. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +12 -11
  555. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  556. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js +41 -0
  557. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js.map +1 -1
  558. package/build/dist/Server/Services/NetworkDeviceService.js +129 -20
  559. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  560. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +67 -10
  561. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -1
  562. package/build/dist/Server/Services/NetworkSiteService.js +19 -8
  563. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  564. package/build/dist/Server/Services/ProjectService.js +43 -0
  565. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  566. package/build/dist/Server/Services/RumApplicationService.js +202 -0
  567. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  568. package/build/dist/Server/Services/RumSessionChunkService.js +9 -0
  569. package/build/dist/Server/Services/RumSessionChunkService.js.map +1 -0
  570. package/build/dist/Server/Services/RumSessionErasureRequestService.js +190 -0
  571. package/build/dist/Server/Services/RumSessionErasureRequestService.js.map +1 -0
  572. package/build/dist/Server/Services/RumSessionPinService.js +208 -0
  573. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -0
  574. package/build/dist/Server/Services/RumSessionReplayViewService.js +180 -0
  575. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -0
  576. package/build/dist/Server/Services/RumSessionService.js +102 -0
  577. package/build/dist/Server/Services/RumSessionService.js.map +1 -0
  578. package/build/dist/Server/Services/RunbookCredentialService.js +67 -0
  579. package/build/dist/Server/Services/RunbookCredentialService.js.map +1 -0
  580. package/build/dist/Server/Services/{RunbookAgentJobService.js → RunnerJobService.js} +158 -46
  581. package/build/dist/Server/Services/RunnerJobService.js.map +1 -0
  582. package/build/dist/Server/Services/{RunbookAgentOwnerUserService.js → RunnerOwnerTeamService.js} +2 -2
  583. package/build/dist/Server/Services/RunnerOwnerTeamService.js.map +1 -0
  584. package/build/dist/Server/Services/RunnerOwnerUserService.js +9 -0
  585. package/build/dist/Server/Services/RunnerOwnerUserService.js.map +1 -0
  586. package/build/dist/Server/Services/RunnerService.js +168 -0
  587. package/build/dist/Server/Services/RunnerService.js.map +1 -0
  588. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +24 -11
  589. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
  590. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +15 -1
  591. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  592. package/build/dist/Server/Services/ServiceService.js +8 -2
  593. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  594. package/build/dist/Server/Services/StatusPageService.js +173 -16
  595. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  596. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +17 -1
  597. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
  598. package/build/dist/Server/Services/TelemetryExceptionService.js +3 -16
  599. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  600. package/build/dist/Server/Services/TelemetryUsageBillingService.js +31 -3
  601. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  602. package/build/dist/Server/Services/TraceAggregationService.js +106 -2
  603. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  604. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js +16 -0
  605. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js.map +1 -1
  606. package/build/dist/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.js +9 -0
  607. package/build/dist/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.js.map +1 -1
  608. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +38 -6
  609. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  610. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js +104 -0
  611. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js.map +1 -0
  612. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.js +54 -0
  613. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.js.map +1 -0
  614. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +11 -7
  615. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  616. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +3 -4
  617. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -1
  618. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +724 -0
  619. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -0
  620. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +668 -0
  621. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -0
  622. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +657 -0
  623. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -0
  624. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +52 -7
  625. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  626. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +53 -5
  627. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  628. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +25 -6
  629. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
  630. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +131 -17
  631. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  632. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +200 -5
  633. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  634. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +2 -7
  635. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -1
  636. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +4 -17
  637. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  638. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +203 -19
  639. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  640. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +89 -0
  641. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -0
  642. package/build/dist/Server/Utils/AI/SRE/RemediationHandoff.js +82 -0
  643. package/build/dist/Server/Utils/AI/SRE/RemediationHandoff.js.map +1 -0
  644. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +4 -19
  645. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  646. package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +2 -2
  647. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js +36 -0
  648. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js.map +1 -1
  649. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +498 -0
  650. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -0
  651. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +492 -0
  652. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -0
  653. package/build/dist/Server/Utils/CorsOptions.js +47 -0
  654. package/build/dist/Server/Utils/CorsOptions.js.map +1 -0
  655. package/build/dist/Server/Utils/Database/RelationIdUtil.js +51 -0
  656. package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -0
  657. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js +38 -0
  658. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js.map +1 -1
  659. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +194 -0
  660. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +1 -0
  661. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +292 -0
  662. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -0
  663. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +9 -0
  664. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  665. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +9 -0
  666. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  667. package/build/dist/Server/Utils/Monitor/MonitorResource.js +16 -0
  668. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  669. package/build/dist/Server/Utils/Monitor/MonitorSummaryCapture.js +92 -0
  670. package/build/dist/Server/Utils/Monitor/MonitorSummaryCapture.js.map +1 -0
  671. package/build/dist/Server/Utils/NetworkDevice/RulePatternValidator.js +27 -0
  672. package/build/dist/Server/Utils/NetworkDevice/RulePatternValidator.js.map +1 -0
  673. package/build/dist/Server/Utils/OpenAPI.js +2 -1
  674. package/build/dist/Server/Utils/OpenAPI.js.map +1 -1
  675. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js +67 -0
  676. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js.map +1 -0
  677. package/build/dist/Server/Utils/SessionReplay/SessionReplayErasureTombstone.js +98 -0
  678. package/build/dist/Server/Utils/SessionReplay/SessionReplayErasureTombstone.js.map +1 -0
  679. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +378 -0
  680. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -0
  681. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js +137 -0
  682. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js.map +1 -0
  683. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +998 -0
  684. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -0
  685. package/build/dist/Server/Utils/SessionReplay/SessionReplayRetention.js +59 -0
  686. package/build/dist/Server/Utils/SessionReplay/SessionReplayRetention.js.map +1 -0
  687. package/build/dist/Server/Utils/SessionReplay/SessionReplayTargeting.js +98 -0
  688. package/build/dist/Server/Utils/SessionReplay/SessionReplayTargeting.js.map +1 -0
  689. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +69 -0
  690. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -0
  691. package/build/dist/Server/Utils/StartServer.js +40 -3
  692. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  693. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +27 -6
  694. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  695. package/build/dist/Types/AI/AIRunStatus.js +17 -5
  696. package/build/dist/Types/AI/AIRunStatus.js.map +1 -1
  697. package/build/dist/Types/AI/AIRunType.js +18 -0
  698. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  699. package/build/dist/Types/AI/FixVerificationStatus.js +22 -0
  700. package/build/dist/Types/AI/FixVerificationStatus.js.map +1 -0
  701. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +16 -0
  702. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  703. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +192 -0
  704. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -0
  705. package/build/dist/Types/AutoRemediation/AutoRemediationExecutionMode.js +18 -0
  706. package/build/dist/Types/AutoRemediation/AutoRemediationExecutionMode.js.map +1 -0
  707. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionStatus.js +31 -0
  708. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionStatus.js.map +1 -0
  709. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionType.js +18 -0
  710. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionType.js.map +1 -0
  711. package/build/dist/Types/AutoRemediation/AutoRemediationTriggerEntity.js +12 -0
  712. package/build/dist/Types/AutoRemediation/AutoRemediationTriggerEntity.js.map +1 -0
  713. package/build/dist/Types/AutoRemediation/AutoRemediationVerificationStatus.js +22 -0
  714. package/build/dist/Types/AutoRemediation/AutoRemediationVerificationStatus.js.map +1 -0
  715. package/build/dist/Types/CustomField/CustomFieldDropdownOption.js +110 -0
  716. package/build/dist/Types/CustomField/CustomFieldDropdownOption.js.map +1 -0
  717. package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
  718. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  719. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +4 -0
  720. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  721. package/build/dist/Types/Dashboard/DashboardComponents/DashboardClockComponent.js +19 -0
  722. package/build/dist/Types/Dashboard/DashboardComponents/DashboardClockComponent.js.map +1 -0
  723. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.js +2 -0
  724. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.js.map +1 -0
  725. package/build/dist/Types/Dashboard/DashboardTemplates.js +487 -0
  726. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  727. package/build/dist/Types/Date.js +6 -0
  728. package/build/dist/Types/Date.js.map +1 -1
  729. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  730. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  731. package/build/dist/Types/Kubernetes/KubernetesRightSizing.js +229 -0
  732. package/build/dist/Types/Kubernetes/KubernetesRightSizing.js.map +1 -0
  733. package/build/dist/Types/MeteredPlan/ProductType.js +1 -0
  734. package/build/dist/Types/MeteredPlan/ProductType.js.map +1 -1
  735. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +12 -2
  736. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
  737. package/build/dist/Types/Monitor/MonitorSteps.js +5 -0
  738. package/build/dist/Types/Monitor/MonitorSteps.js.map +1 -1
  739. package/build/dist/Types/Monitor/MonitorSummarySnapshot.js +13 -0
  740. package/build/dist/Types/Monitor/MonitorSummarySnapshot.js.map +1 -0
  741. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +40 -8
  742. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  743. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +4 -3
  744. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  745. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +50 -10
  746. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  747. package/build/dist/Types/Monitor/RumAlertTemplates.js +297 -0
  748. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -0
  749. package/build/dist/Types/Permission.js +184 -24
  750. package/build/dist/Types/Permission.js.map +1 -1
  751. package/build/dist/Types/Rum/SessionReplay.js +155 -0
  752. package/build/dist/Types/Rum/SessionReplay.js.map +1 -0
  753. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +26 -0
  754. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -0
  755. package/build/dist/Types/Rum/SessionReplayConsentMode.js +27 -0
  756. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -0
  757. package/build/dist/Types/Rum/SessionReplayMaskingMode.js +79 -0
  758. package/build/dist/Types/Rum/SessionReplayMaskingMode.js.map +1 -0
  759. package/build/dist/Types/Rum/SessionReplayTriggerReason.js +28 -0
  760. package/build/dist/Types/Rum/SessionReplayTriggerReason.js.map +1 -0
  761. package/build/dist/Types/Runbook/RunbookCredentialType.js +7 -0
  762. package/build/dist/Types/Runbook/RunbookCredentialType.js.map +1 -0
  763. package/build/dist/Types/Runbook/RunbookStep.js +20 -1
  764. package/build/dist/Types/Runbook/RunbookStep.js.map +1 -1
  765. package/build/dist/Types/Runbook/RunbookStepType.js +24 -0
  766. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  767. package/build/dist/Types/Runbook/RunnerJobOrigin.js +21 -0
  768. package/build/dist/Types/Runbook/RunnerJobOrigin.js.map +1 -0
  769. package/build/dist/Types/Runbook/RunnerJobStatus.js +22 -0
  770. package/build/dist/Types/Runbook/RunnerJobStatus.js.map +1 -0
  771. package/build/dist/Types/StatusPage/StatusPageReport.js +22 -0
  772. package/build/dist/Types/StatusPage/StatusPageReport.js.map +1 -0
  773. package/build/dist/Types/Telemetry/TelemetryRetentionConfig.js.map +1 -1
  774. package/build/dist/Types/Text.js +29 -0
  775. package/build/dist/Types/Text.js.map +1 -1
  776. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +143 -28
  777. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  778. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +82 -9
  779. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  780. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js +11 -0
  781. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js.map +1 -1
  782. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +11 -13
  783. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  784. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js +76 -45
  785. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js.map +1 -1
  786. package/build/dist/UI/Components/Detail/Detail.js +3 -8
  787. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  788. package/build/dist/UI/Components/Dropdown/Dropdown.js +2 -5
  789. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  790. package/build/dist/UI/Components/Dropdown/DropdownMenuZIndex.js +7 -0
  791. package/build/dist/UI/Components/Dropdown/DropdownMenuZIndex.js.map +1 -0
  792. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js +32 -0
  793. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js.map +1 -0
  794. package/build/dist/UI/Components/Filters/OperatorSelector.js +210 -20
  795. package/build/dist/UI/Components/Filters/OperatorSelector.js.map +1 -1
  796. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +26 -10
  797. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  798. package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -13
  799. package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
  800. package/build/dist/UI/Components/Forms/Validation.js +9 -5
  801. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  802. package/build/dist/UI/Components/List/List.js +1 -1
  803. package/build/dist/UI/Components/List/List.js.map +1 -1
  804. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +21 -19
  805. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
  806. package/build/dist/UI/Components/Pagination/Pagination.js +14 -3
  807. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  808. package/build/dist/UI/Components/Table/Table.js +1 -1
  809. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  810. package/build/dist/UI/Types/UseAnchoredFieldPopup.js +197 -0
  811. package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -0
  812. package/build/dist/UI/Utils/Dropdown.js +18 -0
  813. package/build/dist/UI/Utils/Dropdown.js.map +1 -1
  814. package/build/dist/UI/Utils/Timezone.js +13 -2
  815. package/build/dist/UI/Utils/Timezone.js.map +1 -1
  816. package/build/dist/UI/Utils/UseClockTick.js +41 -0
  817. package/build/dist/UI/Utils/UseClockTick.js.map +1 -0
  818. package/build/dist/Utils/AiRemediation/CommandPolicy.js +303 -0
  819. package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -0
  820. package/build/dist/Utils/Dashboard/ClockWidgetFormat.js +232 -0
  821. package/build/dist/Utils/Dashboard/ClockWidgetFormat.js.map +1 -0
  822. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js +146 -0
  823. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js.map +1 -0
  824. package/build/dist/Utils/Dashboard/Components/DashboardHtmlComponent.js +133 -0
  825. package/build/dist/Utils/Dashboard/Components/DashboardHtmlComponent.js.map +1 -0
  826. package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js +10 -1
  827. package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js.map +1 -1
  828. package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
  829. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  830. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js +198 -0
  831. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js.map +1 -0
  832. package/build/dist/Utils/Dashboard/ValueWidgetLayout.js +276 -0
  833. package/build/dist/Utils/Dashboard/ValueWidgetLayout.js.map +1 -0
  834. package/build/dist/Utils/Metrics/MetricSeriesScope.js +203 -0
  835. package/build/dist/Utils/Metrics/MetricSeriesScope.js.map +1 -0
  836. package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js +382 -0
  837. package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js.map +1 -0
  838. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +13 -7
  839. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
  840. package/build/dist/Utils/Rules/RulePatternMatchUtil.js +87 -0
  841. package/build/dist/Utils/Rules/RulePatternMatchUtil.js.map +1 -0
  842. package/build/dist/Utils/Rum/ChunkMath.js +147 -0
  843. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -0
  844. package/build/dist/Utils/Rum/Masking.js +143 -0
  845. package/build/dist/Utils/Rum/Masking.js.map +1 -0
  846. package/build/dist/Utils/Rum/SessionIdentity.js +161 -0
  847. package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -0
  848. package/build/dist/Utils/Rum/SessionSampling.js +91 -0
  849. package/build/dist/Utils/Rum/SessionSampling.js.map +1 -0
  850. package/build/dist/Utils/Rum/UrlScrubber.js +144 -0
  851. package/build/dist/Utils/Rum/UrlScrubber.js.map +1 -0
  852. package/build/dist/Utils/Schema/ModelSchema.js +28 -3
  853. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  854. package/build/dist/Utils/StatusPage/Report.js +194 -0
  855. package/build/dist/Utils/StatusPage/Report.js.map +1 -0
  856. package/build/dist/Utils/ValueFormatter.js +239 -46
  857. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  858. package/jest.config.json +3 -0
  859. package/package.json +1 -1
  860. package/tsconfig.json +19 -1
  861. package/Server/Services/RunbookAgentService.ts +0 -93
  862. package/build/dist/Models/DatabaseModels/RunbookAgent.js.map +0 -1
  863. package/build/dist/Models/DatabaseModels/RunbookAgentJob.js.map +0 -1
  864. package/build/dist/Models/DatabaseModels/RunbookAgentOwnerTeam.js.map +0 -1
  865. package/build/dist/Models/DatabaseModels/RunbookAgentOwnerUser.js.map +0 -1
  866. package/build/dist/Server/Services/RunbookAgentJobService.js.map +0 -1
  867. package/build/dist/Server/Services/RunbookAgentOwnerTeamService.js.map +0 -1
  868. package/build/dist/Server/Services/RunbookAgentOwnerUserService.js.map +0 -1
  869. package/build/dist/Server/Services/RunbookAgentService.js +0 -91
  870. package/build/dist/Server/Services/RunbookAgentService.js.map +0 -1
  871. package/build/dist/Types/Runbook/RunbookAgentJobStatus.js +0 -22
  872. package/build/dist/Types/Runbook/RunbookAgentJobStatus.js.map +0 -1
@@ -0,0 +1,1101 @@
1
+ import Alert from "../../Models/DatabaseModels/Alert";
2
+ import AutoRemediationRule from "../../Models/DatabaseModels/AutoRemediationRule";
3
+ import AutoRemediationSuggestion from "../../Models/DatabaseModels/AutoRemediationSuggestion";
4
+ import Incident from "../../Models/DatabaseModels/Incident";
5
+ import Label from "../../Models/DatabaseModels/Label";
6
+ import Monitor from "../../Models/DatabaseModels/Monitor";
7
+ import Project from "../../Models/DatabaseModels/Project";
8
+ import Runbook from "../../Models/DatabaseModels/Runbook";
9
+ import RunbookExecution from "../../Models/DatabaseModels/RunbookExecution";
10
+ import { AlertFeedEventType } from "../../Models/DatabaseModels/AlertFeed";
11
+ import { IncidentFeedEventType } from "../../Models/DatabaseModels/IncidentFeed";
12
+ import AlertSeverity from "../../Models/DatabaseModels/AlertSeverity";
13
+ import IncidentSeverity from "../../Models/DatabaseModels/IncidentSeverity";
14
+ import AIRunType from "../../Types/AI/AIRunType";
15
+ import AutoRemediationExecutionMode from "../../Types/AutoRemediation/AutoRemediationExecutionMode";
16
+ import AutoRemediationSuggestionStatus from "../../Types/AutoRemediation/AutoRemediationSuggestionStatus";
17
+ import AutoRemediationSuggestionType from "../../Types/AutoRemediation/AutoRemediationSuggestionType";
18
+ import AutoRemediationVerificationStatus from "../../Types/AutoRemediation/AutoRemediationVerificationStatus";
19
+ import AutoRemediationTriggerEntity from "../../Types/AutoRemediation/AutoRemediationTriggerEntity";
20
+ import { Indigo500 } from "../../Types/BrandColors";
21
+ import OneUptimeDate from "../../Types/Date";
22
+ import ObjectID from "../../Types/ObjectID";
23
+ import QueryHelper from "../Types/Database/QueryHelper";
24
+ import AlertService from "./AlertService";
25
+ import IncidentService from "./IncidentService";
26
+ import AlertFeedService from "./AlertFeedService";
27
+ import AutoRemediationRuleService from "./AutoRemediationRuleService";
28
+ import AutoRemediationSuggestionService from "./AutoRemediationSuggestionService";
29
+ import IncidentFeedService from "./IncidentFeedService";
30
+ import LlmProviderService from "./LlmProviderService";
31
+ import MonitorService from "./MonitorService";
32
+ import ProjectService from "./ProjectService";
33
+ import RunbookRuleEngineService from "./RunbookRuleEngineService";
34
+ import AIInvestigationQueue from "../Utils/AI/SRE/InvestigationQueue";
35
+ import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
36
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
37
+ import logger, { LogAttributes } from "../Utils/Logger";
38
+
39
+ /*
40
+ * Guardrails (minimal G1 for auto-remediation Phase 1):
41
+ * - At most this many suggestions per incident/alert, ever. Stops rule
42
+ * fan-out and repeated matching from flooding a subject with proposals.
43
+ */
44
+ export const MAX_SUGGESTIONS_PER_SUBJECT: number = 3;
45
+
46
+ /*
47
+ * - A FullAuto rule that has auto-executed this many times in the last hour
48
+ * is downgraded to Suggest for the next match (remediation-storm circuit
49
+ * breaker). A human gets pulled back into the loop instead of a runbook
50
+ * being started in a tight flap loop.
51
+ */
52
+ export const MAX_AUTO_EXECUTIONS_PER_RULE_PER_HOUR: number = 3;
53
+
54
+ /*
55
+ * How long the subject's monitors get to recover after a remediation
56
+ * runbook starts, when the rule does not set its own window. The verifier
57
+ * fails the remediation past this deadline — escalation continues as
58
+ * normal either way.
59
+ */
60
+ export const DEFAULT_VERIFICATION_WINDOW_MINUTES: number = 15;
61
+
62
+ type SubjectLinkage = {
63
+ incidentId?: ObjectID | undefined;
64
+ alertId?: ObjectID | undefined;
65
+ };
66
+
67
+ class AutoRemediationRuleEngineServiceClass {
68
+ /*
69
+ * Reload an incident and run the rules against it. Used by the
70
+ * post-investigation remediation hand-off (RemediationHandoff), which
71
+ * holds only the subject id: the create-hook's in-memory model is long
72
+ * gone by the time the investigation settles, and the reload also picks
73
+ * up edits made while the investigation ran. The select mirrors exactly
74
+ * what doesIncidentMatchRule reads — keep the two in sync.
75
+ */
76
+ @CaptureSpan()
77
+ public async applyRulesToIncidentById(data: {
78
+ incidentId: ObjectID;
79
+ projectId: ObjectID;
80
+ }): Promise<void> {
81
+ const incident: Incident | null = await IncidentService.findOneById({
82
+ id: data.incidentId,
83
+ select: {
84
+ _id: true,
85
+ projectId: true,
86
+ title: true,
87
+ description: true,
88
+ incidentSeverityId: true,
89
+ monitors: { _id: true },
90
+ labels: { _id: true },
91
+ },
92
+ props: { isRoot: true },
93
+ });
94
+
95
+ if (!incident) {
96
+ return;
97
+ }
98
+
99
+ await this.applyRulesToIncident(incident);
100
+ }
101
+
102
+ // The alert twin of applyRulesToIncidentById — mirrors doesAlertMatchRule.
103
+ @CaptureSpan()
104
+ public async applyRulesToAlertById(data: {
105
+ alertId: ObjectID;
106
+ projectId: ObjectID;
107
+ }): Promise<void> {
108
+ const alert: Alert | null = await AlertService.findOneById({
109
+ id: data.alertId,
110
+ select: {
111
+ _id: true,
112
+ projectId: true,
113
+ title: true,
114
+ description: true,
115
+ alertSeverityId: true,
116
+ monitorId: true,
117
+ labels: { _id: true },
118
+ },
119
+ props: { isRoot: true },
120
+ });
121
+
122
+ if (!alert) {
123
+ return;
124
+ }
125
+
126
+ await this.applyRulesToAlert(alert);
127
+ }
128
+
129
+ @CaptureSpan()
130
+ public async applyRulesToIncident(incident: Incident): Promise<void> {
131
+ if (!incident.id || !incident.projectId) {
132
+ return;
133
+ }
134
+
135
+ try {
136
+ await this.applyRules({
137
+ projectId: incident.projectId,
138
+ triggerEntityType: AutoRemediationTriggerEntity.Incident,
139
+ incident,
140
+ });
141
+ } catch (error) {
142
+ logger.error(`Error applying auto-remediation rules: ${error}`, {
143
+ projectId: incident.projectId?.toString(),
144
+ incidentId: incident.id?.toString(),
145
+ } as LogAttributes);
146
+ }
147
+ }
148
+
149
+ @CaptureSpan()
150
+ public async applyRulesToAlert(alert: Alert): Promise<void> {
151
+ if (!alert.id || !alert.projectId) {
152
+ return;
153
+ }
154
+
155
+ try {
156
+ await this.applyRules({
157
+ projectId: alert.projectId,
158
+ triggerEntityType: AutoRemediationTriggerEntity.Alert,
159
+ alert,
160
+ });
161
+ } catch (error) {
162
+ logger.error(`Error applying auto-remediation rules: ${error}`, {
163
+ projectId: alert.projectId?.toString(),
164
+ alertId: alert.id?.toString(),
165
+ } as LogAttributes);
166
+ }
167
+ }
168
+
169
+ @CaptureSpan()
170
+ private async applyRules(data: {
171
+ projectId: ObjectID;
172
+ triggerEntityType: AutoRemediationTriggerEntity;
173
+ incident?: Incident | undefined;
174
+ alert?: Alert | undefined;
175
+ }): Promise<void> {
176
+ /*
177
+ * Project-level kill switch. === false so a missing column (older rows,
178
+ * self-hosted defaults) counts as enabled — same semantics as enableAi.
179
+ */
180
+ const project: Project | null = await ProjectService.findOneById({
181
+ id: data.projectId,
182
+ select: {
183
+ enableAi: true,
184
+ enableAutoRemediation: true,
185
+ enableAiCommandExecution: true,
186
+ },
187
+ props: { isRoot: true },
188
+ });
189
+
190
+ if (!project || project.enableAutoRemediation === false) {
191
+ return;
192
+ }
193
+
194
+ const rules: Array<AutoRemediationRule> =
195
+ await AutoRemediationRuleService.findBy({
196
+ query: {
197
+ projectId: data.projectId,
198
+ isEnabled: true,
199
+ triggerEntityType: data.triggerEntityType,
200
+ },
201
+ props: { isRoot: true },
202
+ select: {
203
+ _id: true,
204
+ name: true,
205
+ executionMode: true,
206
+ aiSelectsRunbook: true,
207
+ aiComposesCommands: true,
208
+ verificationWindowMinutes: true,
209
+ autoResolveOnVerifiedRecovery: true,
210
+ titlePattern: true,
211
+ descriptionPattern: true,
212
+ monitors: { _id: true },
213
+ incidentSeverities: { _id: true },
214
+ alertSeverities: { _id: true },
215
+ labels: { _id: true },
216
+ monitorLabels: { _id: true },
217
+ runbooks: { _id: true, name: true },
218
+ },
219
+ limit: 100,
220
+ skip: 0,
221
+ });
222
+
223
+ if (rules.length === 0) {
224
+ return;
225
+ }
226
+
227
+ const matchedRules: Array<AutoRemediationRule> = [];
228
+
229
+ for (const rule of rules) {
230
+ const isMatch: boolean = data.incident
231
+ ? await this.doesIncidentMatchRule(data.incident, rule)
232
+ : data.alert
233
+ ? await this.doesAlertMatchRule(data.alert, rule)
234
+ : false;
235
+
236
+ if (isMatch) {
237
+ matchedRules.push(rule);
238
+ }
239
+ }
240
+
241
+ if (matchedRules.length === 0) {
242
+ return;
243
+ }
244
+
245
+ const linkage: SubjectLinkage = {
246
+ incidentId: data.incident?.id || undefined,
247
+ alertId: data.alert?.id || undefined,
248
+ };
249
+
250
+ /*
251
+ * Per-subject cap + per-rule dedupe. A rule that already produced a
252
+ * suggestion on this subject never produces another (a dismissal is a
253
+ * human "no" — do not re-ask).
254
+ */
255
+ const existingSuggestions: Array<AutoRemediationSuggestion> =
256
+ await AutoRemediationSuggestionService.findBy({
257
+ query: linkage.incidentId
258
+ ? { incidentId: linkage.incidentId }
259
+ : { alertId: linkage.alertId! },
260
+ props: { isRoot: true },
261
+ select: {
262
+ _id: true,
263
+ autoRemediationRuleId: true,
264
+ },
265
+ limit: MAX_SUGGESTIONS_PER_SUBJECT * 10,
266
+ skip: 0,
267
+ });
268
+
269
+ let remainingBudget: number =
270
+ MAX_SUGGESTIONS_PER_SUBJECT - existingSuggestions.length;
271
+
272
+ if (remainingBudget <= 0) {
273
+ logger.debug(
274
+ `AutoRemediationRuleEngine: suggestion cap reached for subject; skipping ${matchedRules.length} matched rule(s).`,
275
+ {
276
+ projectId: data.projectId.toString(),
277
+ incidentId: linkage.incidentId?.toString(),
278
+ alertId: linkage.alertId?.toString(),
279
+ } as LogAttributes,
280
+ );
281
+ return;
282
+ }
283
+
284
+ const ruleIdsWithExistingSuggestion: Set<string> = new Set<string>(
285
+ existingSuggestions
286
+ .map((s: AutoRemediationSuggestion) => {
287
+ return s.autoRemediationRuleId?.toString() || "";
288
+ })
289
+ .filter((id: string) => {
290
+ return id !== "";
291
+ }),
292
+ );
293
+
294
+ // Lazily evaluated once: AI rules need AI enabled and a provider.
295
+ let aiAvailable: boolean | null = null;
296
+
297
+ for (const rule of matchedRules) {
298
+ if (remainingBudget <= 0) {
299
+ break;
300
+ }
301
+
302
+ if (rule.id && ruleIdsWithExistingSuggestion.has(rule.id.toString())) {
303
+ continue;
304
+ }
305
+
306
+ /*
307
+ * Command composition wins over runbook selection when a rule has
308
+ * both flags — one run per rule, never two.
309
+ */
310
+ if (rule.aiComposesCommands) {
311
+ if (aiAvailable === null) {
312
+ aiAvailable =
313
+ project.enableAi !== false &&
314
+ (await LlmProviderService.getLLMProviderForProject(
315
+ data.projectId,
316
+ )) !== null;
317
+ }
318
+
319
+ if (!aiAvailable) {
320
+ logger.debug(
321
+ `AutoRemediationRuleEngine: skipping AI command rule ${rule.id?.toString()} — AI disabled or no LLM provider configured.`,
322
+ { projectId: data.projectId.toString() } as LogAttributes,
323
+ );
324
+ continue;
325
+ }
326
+
327
+ /*
328
+ * Opt-in semantics (=== true): the project must have explicitly
329
+ * enabled AI command execution, on top of the AI/auto-remediation
330
+ * kill switches.
331
+ */
332
+ if (project.enableAiCommandExecution !== true) {
333
+ logger.debug(
334
+ `AutoRemediationRuleEngine: skipping AI command rule ${rule.id?.toString()} — the project has not enabled AI command execution.`,
335
+ { projectId: data.projectId.toString() } as LogAttributes,
336
+ );
337
+ continue;
338
+ }
339
+
340
+ await this.startAiCommandRun({
341
+ projectId: data.projectId,
342
+ rule,
343
+ linkage,
344
+ });
345
+ remainingBudget -= 1;
346
+ continue;
347
+ }
348
+
349
+ if (rule.aiSelectsRunbook) {
350
+ if (aiAvailable === null) {
351
+ aiAvailable =
352
+ project.enableAi !== false &&
353
+ (await LlmProviderService.getLLMProviderForProject(
354
+ data.projectId,
355
+ )) !== null;
356
+ }
357
+
358
+ if (!aiAvailable) {
359
+ logger.debug(
360
+ `AutoRemediationRuleEngine: skipping AI rule ${rule.id?.toString()} — AI disabled or no LLM provider configured.`,
361
+ { projectId: data.projectId.toString() } as LogAttributes,
362
+ );
363
+ continue;
364
+ }
365
+
366
+ await this.startAiPlanning({
367
+ projectId: data.projectId,
368
+ rule,
369
+ linkage,
370
+ });
371
+ remainingBudget -= 1;
372
+ continue;
373
+ }
374
+
375
+ // Deterministic rule: propose or start every attached runbook.
376
+ const runbooks: Array<Runbook> = rule.runbooks || [];
377
+
378
+ if (runbooks.length === 0) {
379
+ logger.warn(
380
+ `AutoRemediationRuleEngine: rule ${rule.id?.toString()} matched but has no runbooks attached and does not use AI selection; skipping.`,
381
+ { projectId: data.projectId.toString() } as LogAttributes,
382
+ );
383
+ continue;
384
+ }
385
+
386
+ if (rule.executionMode === AutoRemediationExecutionMode.FullAuto) {
387
+ remainingBudget -= await this.applyFullAutoRule({
388
+ projectId: data.projectId,
389
+ rule,
390
+ runbooks,
391
+ linkage,
392
+ budget: remainingBudget,
393
+ });
394
+ continue;
395
+ }
396
+
397
+ for (const runbook of runbooks) {
398
+ if (remainingBudget <= 0) {
399
+ break;
400
+ }
401
+ if (!runbook.id) {
402
+ continue;
403
+ }
404
+
405
+ await this.suggestRunbook({
406
+ projectId: data.projectId,
407
+ rule,
408
+ runbook,
409
+ linkage,
410
+ downgradedByCircuitBreaker: false,
411
+ });
412
+ remainingBudget -= 1;
413
+ }
414
+ }
415
+ }
416
+
417
+ /*
418
+ * FullAuto with the hourly circuit breaker. The whole
419
+ * count-decide-execute-record section is serialized per rule through a
420
+ * distributed mutex: concurrent incident creations (flap storm, multiple
421
+ * App pods) would otherwise all read a stale count and blow past the cap
422
+ * together. The AutoExecuted suggestion rows are written inside the lock,
423
+ * so the next holder's count sees them. If the lock cannot be acquired
424
+ * (e.g. Redis unavailable) the engine degrades to the unserialized check
425
+ * rather than dropping remediation entirely — the breaker is
426
+ * defense-in-depth, not a correctness invariant.
427
+ *
428
+ * Returns how many suggestions were consumed from the per-subject budget.
429
+ */
430
+ private async applyFullAutoRule(data: {
431
+ projectId: ObjectID;
432
+ rule: AutoRemediationRule;
433
+ runbooks: Array<Runbook>;
434
+ linkage: SubjectLinkage;
435
+ budget: number;
436
+ }): Promise<number> {
437
+ let mutex: SemaphoreMutex | null = null;
438
+ try {
439
+ mutex = await Semaphore.lock({
440
+ key: `auto-remediation-rule-${data.rule.id?.toString()}`,
441
+ namespace: "AutoRemediationRuleEngine",
442
+ lockTimeout: 60 * 1000,
443
+ acquireTimeout: 20 * 1000,
444
+ });
445
+ } catch (error) {
446
+ logger.warn(
447
+ `AutoRemediationRuleEngine: could not acquire circuit-breaker lock for rule ${data.rule.id?.toString()} — continuing without cross-pod serialization: ${error}`,
448
+ { projectId: data.projectId.toString() } as LogAttributes,
449
+ );
450
+ }
451
+
452
+ let consumed: number = 0;
453
+
454
+ try {
455
+ /*
456
+ * Count inside the lock, and keep counting in-memory as this
457
+ * invocation executes — a rule with several attached runbooks must
458
+ * not execute all of them off one stale pre-loop count.
459
+ */
460
+ let executedInWindow: number = (
461
+ await AutoRemediationSuggestionService.countBy({
462
+ query: {
463
+ autoRemediationRuleId: data.rule.id!,
464
+ status: AutoRemediationSuggestionStatus.AutoExecuted,
465
+ createdAt: QueryHelper.greaterThan(
466
+ OneUptimeDate.getSomeHoursAgo(1),
467
+ ),
468
+ },
469
+ props: { isRoot: true },
470
+ })
471
+ ).toNumber();
472
+
473
+ for (const runbook of data.runbooks) {
474
+ if (consumed >= data.budget) {
475
+ break;
476
+ }
477
+ if (!runbook.id) {
478
+ continue;
479
+ }
480
+
481
+ if (executedInWindow >= MAX_AUTO_EXECUTIONS_PER_RULE_PER_HOUR) {
482
+ logger.warn(
483
+ `AutoRemediationRuleEngine: circuit breaker tripped for rule ${data.rule.id?.toString()} (${executedInWindow} auto-executions in the last hour); downgrading to Suggest.`,
484
+ { projectId: data.projectId.toString() } as LogAttributes,
485
+ );
486
+ await this.suggestRunbook({
487
+ projectId: data.projectId,
488
+ rule: data.rule,
489
+ runbook,
490
+ linkage: data.linkage,
491
+ downgradedByCircuitBreaker: true,
492
+ });
493
+ } else {
494
+ await this.autoExecuteRunbook({
495
+ projectId: data.projectId,
496
+ rule: data.rule,
497
+ runbook,
498
+ linkage: data.linkage,
499
+ });
500
+ /*
501
+ * Counted even when the start failed (no row written): within
502
+ * this invocation the fail direction of a breaker is to close
503
+ * early, never to keep firing.
504
+ */
505
+ executedInWindow += 1;
506
+ }
507
+ consumed += 1;
508
+ }
509
+ } finally {
510
+ if (mutex) {
511
+ try {
512
+ await Semaphore.release(mutex);
513
+ } catch (error) {
514
+ logger.error(
515
+ `AutoRemediationRuleEngine: failed to release circuit-breaker lock: ${error}`,
516
+ { projectId: data.projectId.toString() } as LogAttributes,
517
+ );
518
+ }
519
+ }
520
+ }
521
+
522
+ return consumed;
523
+ }
524
+
525
+ /*
526
+ * AI path: create a Planning suggestion and enqueue a RemediationPlan run
527
+ * on the durable AI queue. The planning runner fills in the picked runbook
528
+ * and rationale (or NoneApplicable). AI-picked runbooks are always
529
+ * suggest-only — never full-auto.
530
+ */
531
+ private async startAiPlanning(data: {
532
+ projectId: ObjectID;
533
+ rule: AutoRemediationRule;
534
+ linkage: SubjectLinkage;
535
+ }): Promise<void> {
536
+ const suggestion: AutoRemediationSuggestion =
537
+ new AutoRemediationSuggestion();
538
+ suggestion.projectId = data.projectId;
539
+ suggestion.autoRemediationRuleId = data.rule.id!;
540
+ suggestion.ruleNameSnapshot = data.rule.name || "Auto Remediation Rule";
541
+ suggestion.status = AutoRemediationSuggestionStatus.Planning;
542
+ suggestion.executionMode = AutoRemediationExecutionMode.Suggest;
543
+ suggestion.verificationWindowMinutes =
544
+ data.rule.verificationWindowMinutes ||
545
+ DEFAULT_VERIFICATION_WINDOW_MINUTES;
546
+ suggestion.autoResolveOnRecovery =
547
+ data.rule.autoResolveOnVerifiedRecovery === true;
548
+ if (data.linkage.incidentId) {
549
+ suggestion.incidentId = data.linkage.incidentId;
550
+ }
551
+ if (data.linkage.alertId) {
552
+ suggestion.alertId = data.linkage.alertId;
553
+ }
554
+
555
+ const created: AutoRemediationSuggestion =
556
+ await AutoRemediationSuggestionService.create({
557
+ data: suggestion,
558
+ props: { isRoot: true },
559
+ });
560
+
561
+ const aiRunId: ObjectID | null = await AIInvestigationQueue.enqueue({
562
+ projectId: data.projectId,
563
+ subjectIncidentId: data.linkage.incidentId,
564
+ subjectAlertId: data.linkage.alertId,
565
+ subjectAutoRemediationSuggestionId: created.id!,
566
+ });
567
+
568
+ if (!aiRunId) {
569
+ /*
570
+ * Budget exhausted or run creation failed — do not leave the
571
+ * suggestion stuck in Planning forever.
572
+ */
573
+ await AutoRemediationSuggestionService.updateOneById({
574
+ id: created.id!,
575
+ data: {
576
+ status: AutoRemediationSuggestionStatus.NoneApplicable,
577
+ rationaleMarkdown:
578
+ "AI planning could not be started — the daily autonomous AI budget is exhausted or no run could be queued. Re-enable by raising the budget or waiting for the daily reset.",
579
+ },
580
+ props: { isRoot: true },
581
+ });
582
+ return;
583
+ }
584
+
585
+ await AutoRemediationSuggestionService.updateOneById({
586
+ id: created.id!,
587
+ data: {
588
+ aiRunId,
589
+ },
590
+ props: { isRoot: true },
591
+ });
592
+
593
+ await this.postFeedItem({
594
+ projectId: data.projectId,
595
+ linkage: data.linkage,
596
+ markdown: `⚡ **Auto Remediation Rule "${data.rule.name}" matched.** AI is picking the most applicable runbook — a suggestion will appear here shortly.`,
597
+ pingWorkspace: false,
598
+ });
599
+ }
600
+
601
+ /*
602
+ * AI command path (rules with aiComposesCommands): create a Planning
603
+ * CommandPlan suggestion and enqueue a RemediationExecution run. The
604
+ * execution runner decides Suggest vs FullAuto from the rule's execution
605
+ * mode + allowlist + circuit breaker at run time; the suggestion's
606
+ * executionMode snapshots the rule's intent for display.
607
+ */
608
+ private async startAiCommandRun(data: {
609
+ projectId: ObjectID;
610
+ rule: AutoRemediationRule;
611
+ linkage: SubjectLinkage;
612
+ }): Promise<void> {
613
+ const suggestion: AutoRemediationSuggestion =
614
+ new AutoRemediationSuggestion();
615
+ suggestion.projectId = data.projectId;
616
+ suggestion.autoRemediationRuleId = data.rule.id!;
617
+ suggestion.ruleNameSnapshot = data.rule.name || "Auto Remediation Rule";
618
+ suggestion.status = AutoRemediationSuggestionStatus.Planning;
619
+ suggestion.suggestionType = AutoRemediationSuggestionType.CommandPlan;
620
+ suggestion.executionMode =
621
+ data.rule.executionMode === AutoRemediationExecutionMode.FullAuto
622
+ ? AutoRemediationExecutionMode.FullAuto
623
+ : AutoRemediationExecutionMode.Suggest;
624
+ suggestion.verificationWindowMinutes =
625
+ data.rule.verificationWindowMinutes ||
626
+ DEFAULT_VERIFICATION_WINDOW_MINUTES;
627
+ suggestion.autoResolveOnRecovery =
628
+ data.rule.autoResolveOnVerifiedRecovery === true;
629
+ if (data.linkage.incidentId) {
630
+ suggestion.incidentId = data.linkage.incidentId;
631
+ }
632
+ if (data.linkage.alertId) {
633
+ suggestion.alertId = data.linkage.alertId;
634
+ }
635
+
636
+ const created: AutoRemediationSuggestion =
637
+ await AutoRemediationSuggestionService.create({
638
+ data: suggestion,
639
+ props: { isRoot: true },
640
+ });
641
+
642
+ const aiRunId: ObjectID | null = await AIInvestigationQueue.enqueue({
643
+ projectId: data.projectId,
644
+ subjectIncidentId: data.linkage.incidentId,
645
+ subjectAlertId: data.linkage.alertId,
646
+ subjectAutoRemediationSuggestionId: created.id!,
647
+ remediationRunType: AIRunType.RemediationExecution,
648
+ });
649
+
650
+ if (!aiRunId) {
651
+ await AutoRemediationSuggestionService.updateOneById({
652
+ id: created.id!,
653
+ data: {
654
+ status: AutoRemediationSuggestionStatus.NoneApplicable,
655
+ rationaleMarkdown:
656
+ "The AI command run could not be started — the daily autonomous AI budget is exhausted or no run could be queued. Re-enable by raising the budget or waiting for the daily reset.",
657
+ },
658
+ props: { isRoot: true },
659
+ });
660
+ return;
661
+ }
662
+
663
+ await AutoRemediationSuggestionService.updateOneById({
664
+ id: created.id!,
665
+ data: {
666
+ aiRunId,
667
+ },
668
+ props: { isRoot: true },
669
+ });
670
+
671
+ await this.postFeedItem({
672
+ projectId: data.projectId,
673
+ linkage: data.linkage,
674
+ markdown: `⚡ **Auto Remediation Rule "${data.rule.name}" matched.** AI is diagnosing the signal and composing remediation commands — a suggestion will appear here shortly.`,
675
+ pingWorkspace: false,
676
+ });
677
+ }
678
+
679
+ // Deterministic Suggest path: propose the runbook for one-click approval.
680
+ private async suggestRunbook(data: {
681
+ projectId: ObjectID;
682
+ rule: AutoRemediationRule;
683
+ runbook: Runbook;
684
+ linkage: SubjectLinkage;
685
+ downgradedByCircuitBreaker: boolean;
686
+ }): Promise<void> {
687
+ const suggestion: AutoRemediationSuggestion =
688
+ new AutoRemediationSuggestion();
689
+ suggestion.projectId = data.projectId;
690
+ suggestion.autoRemediationRuleId = data.rule.id!;
691
+ suggestion.ruleNameSnapshot = data.rule.name || "Auto Remediation Rule";
692
+ suggestion.runbookId = data.runbook.id!;
693
+ suggestion.runbookNameSnapshot = data.runbook.name || "Runbook";
694
+ suggestion.status = AutoRemediationSuggestionStatus.Suggested;
695
+ suggestion.executionMode = AutoRemediationExecutionMode.Suggest;
696
+ suggestion.verificationWindowMinutes =
697
+ data.rule.verificationWindowMinutes ||
698
+ DEFAULT_VERIFICATION_WINDOW_MINUTES;
699
+ suggestion.autoResolveOnRecovery =
700
+ data.rule.autoResolveOnVerifiedRecovery === true;
701
+ suggestion.rationaleMarkdown = data.downgradedByCircuitBreaker
702
+ ? "Proposed by a FullAuto rule that was downgraded to suggest-only by the hourly circuit breaker (too many recent auto-executions). Approve to start the runbook."
703
+ : "Proposed by a matching auto-remediation rule. Approve to start the runbook.";
704
+ if (data.linkage.incidentId) {
705
+ suggestion.incidentId = data.linkage.incidentId;
706
+ }
707
+ if (data.linkage.alertId) {
708
+ suggestion.alertId = data.linkage.alertId;
709
+ }
710
+
711
+ await AutoRemediationSuggestionService.create({
712
+ data: suggestion,
713
+ props: { isRoot: true },
714
+ });
715
+
716
+ await this.postFeedItem({
717
+ projectId: data.projectId,
718
+ linkage: data.linkage,
719
+ markdown: `⚡ **Auto Remediation Rule "${data.rule.name}" proposed runbook "${data.runbook.name}".** Review and approve it with one click to start remediation.`,
720
+ pingWorkspace: true,
721
+ });
722
+ }
723
+
724
+ /*
725
+ * FullAuto path: start the runbook immediately. startRunbookFor re-checks
726
+ * project ownership, isEnabled and non-empty steps, so a stale or
727
+ * cross-project runbook reference can never execute.
728
+ */
729
+ private async autoExecuteRunbook(data: {
730
+ projectId: ObjectID;
731
+ rule: AutoRemediationRule;
732
+ runbook: Runbook;
733
+ linkage: SubjectLinkage;
734
+ }): Promise<void> {
735
+ const runbookLinkage: { incidentId?: ObjectID; alertId?: ObjectID } = {};
736
+ if (data.linkage.incidentId) {
737
+ runbookLinkage.incidentId = data.linkage.incidentId;
738
+ }
739
+ if (data.linkage.alertId) {
740
+ runbookLinkage.alertId = data.linkage.alertId;
741
+ }
742
+
743
+ const execution: RunbookExecution | null =
744
+ await RunbookRuleEngineService.startRunbookFor({
745
+ projectId: data.projectId,
746
+ runbookId: data.runbook.id!,
747
+ linkage: runbookLinkage,
748
+ });
749
+
750
+ if (!execution) {
751
+ logger.warn(
752
+ `AutoRemediationRuleEngine: FullAuto rule ${data.rule.id?.toString()} could not start runbook ${data.runbook.id?.toString()} (missing, disabled, cross-project or empty).`,
753
+ { projectId: data.projectId.toString() } as LogAttributes,
754
+ );
755
+ await this.postFeedItem({
756
+ projectId: data.projectId,
757
+ linkage: data.linkage,
758
+ markdown: `⚡ **Auto Remediation Rule "${data.rule.name}" matched, but runbook "${data.runbook.name}" could not be started** (it may be disabled or have no steps).`,
759
+ pingWorkspace: false,
760
+ });
761
+ return;
762
+ }
763
+
764
+ const suggestion: AutoRemediationSuggestion =
765
+ new AutoRemediationSuggestion();
766
+ suggestion.projectId = data.projectId;
767
+ suggestion.autoRemediationRuleId = data.rule.id!;
768
+ suggestion.ruleNameSnapshot = data.rule.name || "Auto Remediation Rule";
769
+ suggestion.runbookId = data.runbook.id!;
770
+ suggestion.runbookNameSnapshot = data.runbook.name || "Runbook";
771
+ suggestion.status = AutoRemediationSuggestionStatus.AutoExecuted;
772
+ suggestion.executionMode = AutoRemediationExecutionMode.FullAuto;
773
+ suggestion.runbookExecutionId = execution.id!;
774
+ suggestion.verificationWindowMinutes =
775
+ data.rule.verificationWindowMinutes ||
776
+ DEFAULT_VERIFICATION_WINDOW_MINUTES;
777
+ suggestion.autoResolveOnRecovery =
778
+ data.rule.autoResolveOnVerifiedRecovery === true;
779
+ // The runbook is already running — verification starts now.
780
+ suggestion.verificationStatus = AutoRemediationVerificationStatus.Pending;
781
+ suggestion.verificationDeadlineAt = OneUptimeDate.addRemoveMinutes(
782
+ OneUptimeDate.getCurrentDate(),
783
+ data.rule.verificationWindowMinutes ||
784
+ DEFAULT_VERIFICATION_WINDOW_MINUTES,
785
+ );
786
+ suggestion.rationaleMarkdown =
787
+ "Automatically executed by a FullAuto auto-remediation rule.";
788
+ if (data.linkage.incidentId) {
789
+ suggestion.incidentId = data.linkage.incidentId;
790
+ }
791
+ if (data.linkage.alertId) {
792
+ suggestion.alertId = data.linkage.alertId;
793
+ }
794
+
795
+ await AutoRemediationSuggestionService.create({
796
+ data: suggestion,
797
+ props: { isRoot: true },
798
+ });
799
+
800
+ await this.postFeedItem({
801
+ projectId: data.projectId,
802
+ linkage: data.linkage,
803
+ markdown: `⚡ **Auto Remediation Rule "${data.rule.name}" automatically started runbook "${data.runbook.name}".** Follow its progress on the runbook execution page.`,
804
+ pingWorkspace: true,
805
+ });
806
+ }
807
+
808
+ // Feed posting is best-effort observability — the feed services never throw.
809
+ private async postFeedItem(data: {
810
+ projectId: ObjectID;
811
+ linkage: SubjectLinkage;
812
+ markdown: string;
813
+ pingWorkspace: boolean;
814
+ }): Promise<void> {
815
+ try {
816
+ if (data.linkage.incidentId) {
817
+ await IncidentFeedService.createIncidentFeedItem({
818
+ incidentId: data.linkage.incidentId,
819
+ projectId: data.projectId,
820
+ incidentFeedEventType: IncidentFeedEventType.AutoRemediation,
821
+ displayColor: Indigo500,
822
+ feedInfoInMarkdown: data.markdown,
823
+ workspaceNotification: {
824
+ sendWorkspaceNotification: data.pingWorkspace,
825
+ },
826
+ });
827
+ } else if (data.linkage.alertId) {
828
+ await AlertFeedService.createAlertFeedItem({
829
+ alertId: data.linkage.alertId,
830
+ projectId: data.projectId,
831
+ alertFeedEventType: AlertFeedEventType.AutoRemediation,
832
+ displayColor: Indigo500,
833
+ feedInfoInMarkdown: data.markdown,
834
+ workspaceNotification: {
835
+ sendWorkspaceNotification: data.pingWorkspace,
836
+ },
837
+ });
838
+ }
839
+ } catch (error) {
840
+ logger.error(
841
+ `AutoRemediationRuleEngine: failed to create feed item: ${error}`,
842
+ {
843
+ projectId: data.projectId.toString(),
844
+ incidentId: data.linkage.incidentId?.toString(),
845
+ alertId: data.linkage.alertId?.toString(),
846
+ } as LogAttributes,
847
+ );
848
+ }
849
+ }
850
+
851
+ /*
852
+ * Matching. Every criterion is skip-if-empty with AND semantics across
853
+ * criteria — the same shape as IncidentOnCallRuleEngineService.
854
+ */
855
+ public async doesIncidentMatchRule(
856
+ incident: Incident,
857
+ rule: AutoRemediationRule,
858
+ ): Promise<boolean> {
859
+ // Monitors: incident must come from at least one of the rule's monitors.
860
+ if (rule.monitors && rule.monitors.length > 0) {
861
+ if (!incident.monitors || incident.monitors.length === 0) {
862
+ return false;
863
+ }
864
+ const ruleMonitorIds: Array<string> = rule.monitors.map((m: Monitor) => {
865
+ return m.id?.toString() || "";
866
+ });
867
+ const incidentMonitorIds: Array<string> = incident.monitors.map(
868
+ (m: Monitor) => {
869
+ return m.id?.toString() || "";
870
+ },
871
+ );
872
+ const hasMatch: boolean = ruleMonitorIds.some((id: string) => {
873
+ return incidentMonitorIds.includes(id);
874
+ });
875
+ if (!hasMatch) {
876
+ return false;
877
+ }
878
+ }
879
+
880
+ // Severity
881
+ if (rule.incidentSeverities && rule.incidentSeverities.length > 0) {
882
+ if (!incident.incidentSeverityId) {
883
+ return false;
884
+ }
885
+ const severityIds: Array<string> = rule.incidentSeverities.map(
886
+ (s: IncidentSeverity) => {
887
+ return s.id?.toString() || "";
888
+ },
889
+ );
890
+ if (!severityIds.includes(incident.incidentSeverityId.toString())) {
891
+ return false;
892
+ }
893
+ }
894
+
895
+ // Entity labels
896
+ if (rule.labels && rule.labels.length > 0) {
897
+ if (!incident.labels || incident.labels.length === 0) {
898
+ return false;
899
+ }
900
+ const ruleLabelIds: Array<string> = rule.labels.map((l: Label) => {
901
+ return l.id?.toString() || "";
902
+ });
903
+ const incidentLabelIds: Array<string> = incident.labels.map(
904
+ (l: Label) => {
905
+ return l.id?.toString() || "";
906
+ },
907
+ );
908
+ const hasMatch: boolean = ruleLabelIds.some((id: string) => {
909
+ return incidentLabelIds.includes(id);
910
+ });
911
+ if (!hasMatch) {
912
+ return false;
913
+ }
914
+ }
915
+
916
+ // Monitor labels: any of the incident's monitors carrying one is enough.
917
+ if (rule.monitorLabels && rule.monitorLabels.length > 0) {
918
+ if (!incident.monitors || incident.monitors.length === 0) {
919
+ return false;
920
+ }
921
+
922
+ let anyMonitorMatches: boolean = false;
923
+
924
+ for (const incidentMonitor of incident.monitors) {
925
+ if (!incidentMonitor.id) {
926
+ continue;
927
+ }
928
+
929
+ if (
930
+ await this.doesMonitorCarryAnyLabel(
931
+ incidentMonitor.id,
932
+ rule.monitorLabels,
933
+ )
934
+ ) {
935
+ anyMonitorMatches = true;
936
+ break;
937
+ }
938
+ }
939
+
940
+ if (!anyMonitorMatches) {
941
+ return false;
942
+ }
943
+ }
944
+
945
+ if (rule.titlePattern) {
946
+ if (
947
+ !incident.title ||
948
+ !this.testRegex(rule.titlePattern, incident.title, rule)
949
+ ) {
950
+ return false;
951
+ }
952
+ }
953
+
954
+ if (rule.descriptionPattern) {
955
+ if (
956
+ !incident.description ||
957
+ !this.testRegex(rule.descriptionPattern, incident.description, rule)
958
+ ) {
959
+ return false;
960
+ }
961
+ }
962
+
963
+ return true;
964
+ }
965
+
966
+ public async doesAlertMatchRule(
967
+ alert: Alert,
968
+ rule: AutoRemediationRule,
969
+ ): Promise<boolean> {
970
+ // Monitors: alerts carry a single scalar monitorId.
971
+ if (rule.monitors && rule.monitors.length > 0) {
972
+ if (!alert.monitorId) {
973
+ return false;
974
+ }
975
+ const monitorIds: Array<string> = rule.monitors.map((m: Monitor) => {
976
+ return m.id?.toString() || "";
977
+ });
978
+ if (!monitorIds.includes(alert.monitorId.toString())) {
979
+ return false;
980
+ }
981
+ }
982
+
983
+ // Severity
984
+ if (rule.alertSeverities && rule.alertSeverities.length > 0) {
985
+ if (!alert.alertSeverityId) {
986
+ return false;
987
+ }
988
+ const severityIds: Array<string> = rule.alertSeverities.map(
989
+ (s: AlertSeverity) => {
990
+ return s.id?.toString() || "";
991
+ },
992
+ );
993
+ if (!severityIds.includes(alert.alertSeverityId.toString())) {
994
+ return false;
995
+ }
996
+ }
997
+
998
+ // Entity labels
999
+ if (rule.labels && rule.labels.length > 0) {
1000
+ if (!alert.labels || alert.labels.length === 0) {
1001
+ return false;
1002
+ }
1003
+ const ruleLabelIds: Array<string> = rule.labels.map((l: Label) => {
1004
+ return l.id?.toString() || "";
1005
+ });
1006
+ const alertLabelIds: Array<string> = alert.labels.map((l: Label) => {
1007
+ return l.id?.toString() || "";
1008
+ });
1009
+ const hasMatch: boolean = ruleLabelIds.some((id: string) => {
1010
+ return alertLabelIds.includes(id);
1011
+ });
1012
+ if (!hasMatch) {
1013
+ return false;
1014
+ }
1015
+ }
1016
+
1017
+ // Monitor labels
1018
+ if (rule.monitorLabels && rule.monitorLabels.length > 0) {
1019
+ if (!alert.monitorId) {
1020
+ return false;
1021
+ }
1022
+ if (
1023
+ !(await this.doesMonitorCarryAnyLabel(
1024
+ alert.monitorId,
1025
+ rule.monitorLabels,
1026
+ ))
1027
+ ) {
1028
+ return false;
1029
+ }
1030
+ }
1031
+
1032
+ if (rule.titlePattern) {
1033
+ if (
1034
+ !alert.title ||
1035
+ !this.testRegex(rule.titlePattern, alert.title, rule)
1036
+ ) {
1037
+ return false;
1038
+ }
1039
+ }
1040
+
1041
+ if (rule.descriptionPattern) {
1042
+ if (
1043
+ !alert.description ||
1044
+ !this.testRegex(rule.descriptionPattern, alert.description, rule)
1045
+ ) {
1046
+ return false;
1047
+ }
1048
+ }
1049
+
1050
+ return true;
1051
+ }
1052
+
1053
+ private async doesMonitorCarryAnyLabel(
1054
+ monitorId: ObjectID,
1055
+ ruleMonitorLabels: Array<Label>,
1056
+ ): Promise<boolean> {
1057
+ const monitor: Monitor | null = await MonitorService.findOneById({
1058
+ id: monitorId,
1059
+ select: {
1060
+ labels: { _id: true },
1061
+ },
1062
+ props: { isRoot: true },
1063
+ });
1064
+
1065
+ if (!monitor || !monitor.labels || monitor.labels.length === 0) {
1066
+ return false;
1067
+ }
1068
+
1069
+ const ruleLabelIds: Array<string> = ruleMonitorLabels.map((l: Label) => {
1070
+ return l.id?.toString() || "";
1071
+ });
1072
+ const monitorLabelIds: Array<string> = monitor.labels.map((l: Label) => {
1073
+ return l.id?.toString() || "";
1074
+ });
1075
+
1076
+ return ruleLabelIds.some((id: string) => {
1077
+ return monitorLabelIds.includes(id);
1078
+ });
1079
+ }
1080
+
1081
+ private testRegex(
1082
+ pattern: string,
1083
+ value: string,
1084
+ rule: AutoRemediationRule,
1085
+ ): boolean {
1086
+ try {
1087
+ const regex: RegExp = new RegExp(pattern, "i");
1088
+ return regex.test(value);
1089
+ } catch {
1090
+ logger.warn(
1091
+ `Invalid regex pattern in auto-remediation rule ${rule.id}: ${pattern}`,
1092
+ );
1093
+ return false;
1094
+ }
1095
+ }
1096
+ }
1097
+
1098
+ const AutoRemediationRuleEngineService: AutoRemediationRuleEngineServiceClass =
1099
+ new AutoRemediationRuleEngineServiceClass();
1100
+
1101
+ export default AutoRemediationRuleEngineService;