@oneuptime/common 12.0.4 → 12.0.6

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 (838) hide show
  1. package/Models/DatabaseModels/AIRun.ts +71 -1
  2. package/Models/DatabaseModels/AlertFeed.ts +30 -0
  3. package/Models/DatabaseModels/Dashboard.ts +28 -0
  4. package/Models/DatabaseModels/DataSource.ts +744 -0
  5. package/Models/DatabaseModels/Incident.ts +2 -0
  6. package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
  7. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
  8. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
  9. package/Models/DatabaseModels/IncidentFeed.ts +30 -0
  10. package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
  11. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  12. package/Models/DatabaseModels/Index.ts +3 -0
  13. package/Models/DatabaseModels/LogSavedView.ts +33 -0
  14. package/Models/DatabaseModels/Project.ts +231 -9
  15. package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
  16. package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
  17. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
  18. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
  19. package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
  20. package/Models/DatabaseModels/StatusPage.ts +28 -0
  21. package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
  22. package/Models/DatabaseModels/User.ts +2 -0
  23. package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
  24. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
  25. package/Models/DatabaseModels/UserSession.ts +2 -0
  26. package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
  27. package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
  28. package/Server/API/AIAgentDataAPI.ts +44 -55
  29. package/Server/API/AIInsightAPI.ts +47 -4
  30. package/Server/API/AIInvestigationAPI.ts +200 -17
  31. package/Server/API/DashboardAPI.ts +186 -502
  32. package/Server/API/DataSourceAPI.ts +268 -0
  33. package/Server/API/StatusPageAPI.ts +49 -20
  34. package/Server/API/UserAPI.ts +119 -0
  35. package/Server/EnvironmentConfig.ts +16 -0
  36. package/Server/Infrastructure/ClickhouseConfig.ts +74 -1
  37. package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
  47. package/Server/Infrastructure/Queue.ts +26 -0
  48. package/Server/Infrastructure/QueueWorker.ts +17 -0
  49. package/Server/Middleware/TelemetryIngest.ts +8 -3
  50. package/Server/Services/AIInsightService.ts +132 -12
  51. package/Server/Services/AIRunService.ts +112 -10
  52. package/Server/Services/AIService.ts +109 -22
  53. package/Server/Services/AlertFeedService.ts +5 -0
  54. package/Server/Services/AlertService.ts +38 -32
  55. package/Server/Services/AnalyticsDatabaseService.ts +37 -4
  56. package/Server/Services/DataSourceService.ts +200 -0
  57. package/Server/Services/DatabaseService.ts +43 -2
  58. package/Server/Services/HostService.ts +92 -0
  59. package/Server/Services/IncidentFeedService.ts +5 -0
  60. package/Server/Services/IncidentService.ts +45 -0
  61. package/Server/Services/Index.ts +2 -0
  62. package/Server/Services/LlmLogService.ts +46 -2
  63. package/Server/Services/MonitorService.ts +49 -0
  64. package/Server/Services/MonitorStatusService.ts +166 -0
  65. package/Server/Services/OpenTelemetryIngestService.ts +255 -184
  66. package/Server/Services/RumSessionPinService.ts +7 -21
  67. package/Server/Services/StatusPageSubscriberService.ts +13 -0
  68. package/Server/Services/UserService.ts +280 -9
  69. package/Server/Static/Vendor/README.md +62 -0
  70. package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
  71. package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
  72. package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
  73. package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
  74. package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
  75. package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
  76. package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
  77. package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
  78. package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
  79. package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
  80. package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
  81. package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
  82. package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
  83. package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
  84. package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
  85. package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
  86. package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
  87. package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
  88. package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
  89. package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
  90. package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
  91. package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
  92. package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
  93. package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
  94. package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
  95. package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
  96. package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
  97. package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
  98. package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
  99. package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
  100. package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
  101. package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
  102. package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
  103. package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
  104. package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
  105. package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
  106. package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
  107. package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
  108. package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
  109. package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
  110. package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
  111. package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
  112. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
  113. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
  114. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
  115. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
  116. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
  117. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
  118. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +311 -31
  119. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +26 -24
  120. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
  121. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
  122. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +26 -24
  123. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
  124. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
  125. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
  126. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
  127. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
  128. package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
  129. package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
  130. package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
  131. package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
  132. package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
  133. package/Server/Utils/AI/SRE/README.md +1 -1
  134. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
  135. package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
  136. package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
  137. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
  138. package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
  139. package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
  140. package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
  141. package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
  142. package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
  143. package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
  144. package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
  145. package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
  146. package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
  147. package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
  148. package/Server/Utils/DataSource/EgressGuard.ts +446 -0
  149. package/Server/Utils/DataSource/HttpFetch.ts +221 -0
  150. package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
  151. package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
  152. package/Server/Utils/DataSource/Types.ts +93 -0
  153. package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
  154. package/Server/Utils/InProcessMemo.ts +141 -0
  155. package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
  156. package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
  157. package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
  158. package/Server/Utils/Monitor/MonitorMetricUtil.ts +104 -0
  159. package/Server/Utils/Monitor/MonitorResource.ts +14 -0
  160. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
  161. package/Server/Utils/PasswordHash.ts +28 -4
  162. package/Server/Utils/Response.ts +12 -1
  163. package/Server/Utils/SSRFProtection.ts +237 -0
  164. package/Server/Utils/StartServer.ts +8 -0
  165. package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
  166. package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
  167. package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
  168. package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
  169. package/Server/Utils/Telemetry/Telemetry.ts +112 -1
  170. package/Server/Utils/Telemetry.ts +104 -3
  171. package/Server/Utils/VendorAssets.ts +165 -0
  172. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +28 -5
  173. package/Server/Utils/Workspace/Slack/Slack.ts +5 -0
  174. package/Server/Views/Partials/Head.ejs +21 -7
  175. package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
  176. package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
  177. package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
  178. package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
  179. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
  180. package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
  181. package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
  182. package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
  183. package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
  184. package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
  185. package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
  186. package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
  187. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
  188. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
  189. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
  190. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1695 -0
  191. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
  192. package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
  193. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
  194. package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
  195. package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
  196. package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
  197. package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
  198. package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
  199. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
  200. package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
  201. package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
  202. package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
  203. package/Tests/Server/API/AIInvestigationAPI.test.ts +781 -0
  204. package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
  205. package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
  206. package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
  207. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
  208. package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
  209. package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
  210. package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
  211. package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
  212. package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
  213. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
  214. package/Tests/Server/Services/AIInsightService.test.ts +266 -11
  215. package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -0
  216. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
  217. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
  218. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +400 -20
  219. package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
  220. package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
  221. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +25 -1
  222. package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
  223. package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +45 -35
  224. package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
  225. package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
  226. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
  227. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +397 -0
  228. package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
  229. package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
  230. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
  231. package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
  232. package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
  233. package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
  234. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
  235. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
  236. package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
  237. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
  238. package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
  239. package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
  240. package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
  241. package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
  242. package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -0
  243. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
  244. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
  245. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
  246. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
  247. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
  248. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
  249. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
  250. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +6 -1
  251. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
  252. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
  253. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
  254. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
  255. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
  256. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +605 -20
  257. package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
  258. package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
  259. package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
  260. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
  261. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
  262. package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
  263. package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
  264. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +857 -0
  265. package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
  266. package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
  267. package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
  268. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +645 -0
  269. package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
  270. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
  271. package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
  272. package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
  273. package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
  274. package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
  275. package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
  276. package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
  277. package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
  278. package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
  279. package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
  280. package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
  281. package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
  282. package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -0
  283. package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
  284. package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
  285. package/Tests/Server/Utils/Monitor/MonitorMetricResourceAttributes.test.ts +336 -0
  286. package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
  287. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
  288. package/Tests/Server/Utils/PasswordHash.test.ts +30 -0
  289. package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
  290. package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
  291. package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
  292. package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
  293. package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
  294. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
  295. package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
  296. package/Tests/Server/Utils/Telemetry.test.ts +87 -0
  297. package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
  298. package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
  299. package/Tests/Server/Views/OfflineRender.test.ts +297 -0
  300. package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
  301. package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
  302. package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
  303. package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
  304. package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
  305. package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
  306. package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
  307. package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
  308. package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
  309. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
  310. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
  311. package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
  312. package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
  313. package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
  314. package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
  315. package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
  316. package/Tests/Types/Password.test.ts +363 -0
  317. package/Tests/Types/Permission.test.ts +137 -0
  318. package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
  319. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
  320. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
  321. package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
  322. package/Tests/UI/Components/ErrorBoundary.test.tsx +211 -0
  323. package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
  324. package/Tests/UI/Components/Modal.test.tsx +281 -1
  325. package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
  326. package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
  327. package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
  328. package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
  329. package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
  330. package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
  331. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
  332. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  333. package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
  334. package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
  335. package/Tests/UI/Utils/Project.test.ts +31 -0
  336. package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
  337. package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
  338. package/Tests/Utils/Analytics.test.ts +23 -0
  339. package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
  340. package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
  341. package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
  342. package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +138 -0
  343. package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
  344. package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
  345. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
  346. package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
  347. package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -0
  348. package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
  349. package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
  350. package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
  351. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +931 -0
  352. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
  353. package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
  354. package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
  355. package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
  356. package/Types/AI/AIInsightEvidence.ts +6 -0
  357. package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
  358. package/Types/AI/CodeFixTaskContext.ts +63 -3
  359. package/Types/AI/CodeFixTaskType.ts +3 -3
  360. package/Types/Analytics/RevenueEvent.ts +31 -0
  361. package/Types/Dashboard/DashboardComponentType.ts +31 -0
  362. package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
  363. package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
  364. package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
  365. package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
  366. package/Types/DataSource/DataSourceLimits.ts +62 -0
  367. package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
  368. package/Types/DataSource/DataSourceTableResult.ts +38 -0
  369. package/Types/DataSource/DataSourceType.ts +213 -0
  370. package/Types/Date.ts +43 -3
  371. package/Types/HashedString.ts +4 -3
  372. package/Types/Monitor/CriteriaFilter.ts +4 -0
  373. package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
  374. package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
  375. package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
  376. package/Types/Monitor/MonitorMetricType.ts +8 -0
  377. package/Types/Monitor/MonitorStep.ts +10 -1
  378. package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
  379. package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
  380. package/Types/Password.ts +64 -0
  381. package/Types/Permission.ts +69 -175
  382. package/Types/Probe/ProbeMonitorResponse.ts +6 -0
  383. package/Types/UserAuthenticationStatus.ts +34 -0
  384. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
  385. package/UI/Components/Button/Button.tsx +1 -1
  386. package/UI/Components/ErrorBoundary.tsx +549 -71
  387. package/UI/Components/Feed/FeedItem.tsx +9 -2
  388. package/UI/Components/Icon/Icon.tsx +10 -9
  389. package/UI/Components/Modal/ConfirmModal.tsx +6 -1
  390. package/UI/Components/Modal/Modal.tsx +267 -35
  391. package/UI/Components/Modal/ModalFooter.tsx +6 -1
  392. package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
  393. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  394. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
  395. package/UI/Components/MoreMenu/MoreMenu.tsx +301 -98
  396. package/UI/Components/MoreMenu/MoreMenuItem.tsx +13 -5
  397. package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
  398. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
  399. package/UI/Components/StatusPage/ResourceList.tsx +570 -0
  400. package/UI/Styles/Theme.css +18 -0
  401. package/UI/Utils/API/RequestOptions.ts +7 -0
  402. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
  403. package/UI/Utils/DownloadFile.ts +16 -8
  404. package/UI/Utils/ErrorSupportBundle.ts +805 -0
  405. package/UI/Utils/ModelAPI/ModelAPI.ts +20 -8
  406. package/UI/Utils/Project.ts +4 -0
  407. package/UI/Utils/StatusPage.ts +8 -2
  408. package/UI/Utils/TestDataSource.ts +61 -0
  409. package/UI/Utils/UseDashboardGridDnd.ts +917 -0
  410. package/UI/esbuild-config.js +45 -0
  411. package/Utils/Analytics.ts +15 -0
  412. package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
  413. package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
  414. package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
  415. package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
  416. package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
  417. package/Utils/Dashboard/Components/Index.ts +28 -0
  418. package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
  419. package/Utils/Dashboard/GridLayout.ts +523 -0
  420. package/Utils/DataSource/DataSourceQueryText.ts +94 -0
  421. package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
  422. package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
  423. package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
  424. package/Utils/Monitor/MonitorMetricType.ts +44 -2
  425. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
  426. package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
  427. package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
  428. package/Utils/StatusPage/GroupTree.ts +157 -66
  429. package/Utils/StatusPage/ResourceExplorer.ts +853 -0
  430. package/Utils/StatusPage/ResourceUptime.ts +37 -2
  431. package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
  432. package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
  433. package/build/dist/Models/DatabaseModels/AIRun.js +73 -1
  434. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  435. package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
  436. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  437. package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
  438. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  439. package/build/dist/Models/DatabaseModels/DataSource.js +774 -0
  440. package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
  441. package/build/dist/Models/DatabaseModels/Incident.js +2 -0
  442. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  443. package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
  444. package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
  445. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
  446. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  447. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
  448. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  449. package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
  450. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  451. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
  452. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  453. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  454. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  455. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  456. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  457. package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
  458. package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
  459. package/build/dist/Models/DatabaseModels/Project.js +241 -11
  460. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  461. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +14 -4
  462. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
  463. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
  464. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  465. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
  466. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  467. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
  468. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  469. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
  470. package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
  471. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  472. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
  473. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  474. package/build/dist/Models/DatabaseModels/User.js +2 -0
  475. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  476. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
  477. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  478. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
  479. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  480. package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
  481. package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
  482. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
  483. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  484. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
  485. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  486. package/build/dist/Server/API/AIAgentDataAPI.js +28 -46
  487. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  488. package/build/dist/Server/API/AIInsightAPI.js +34 -4
  489. package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
  490. package/build/dist/Server/API/AIInvestigationAPI.js +134 -11
  491. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  492. package/build/dist/Server/API/DashboardAPI.js +127 -438
  493. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  494. package/build/dist/Server/API/DataSourceAPI.js +173 -0
  495. package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
  496. package/build/dist/Server/API/StatusPageAPI.js +40 -12
  497. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  498. package/build/dist/Server/API/UserAPI.js +94 -2
  499. package/build/dist/Server/API/UserAPI.js.map +1 -1
  500. package/build/dist/Server/EnvironmentConfig.js +14 -0
  501. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  502. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +61 -1
  503. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  504. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
  505. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
  506. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
  507. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
  508. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
  509. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
  510. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
  511. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
  512. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js +20 -0
  513. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js.map +1 -0
  514. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
  515. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
  516. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
  517. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
  518. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
  519. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
  520. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
  521. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
  522. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
  523. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  524. package/build/dist/Server/Infrastructure/Queue.js +27 -0
  525. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  526. package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
  527. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  528. package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
  529. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  530. package/build/dist/Server/Services/AIInsightService.js +110 -10
  531. package/build/dist/Server/Services/AIInsightService.js.map +1 -1
  532. package/build/dist/Server/Services/AIRunService.js +92 -12
  533. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  534. package/build/dist/Server/Services/AIService.js +88 -21
  535. package/build/dist/Server/Services/AIService.js.map +1 -1
  536. package/build/dist/Server/Services/AlertFeedService.js +3 -0
  537. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  538. package/build/dist/Server/Services/AlertService.js +28 -35
  539. package/build/dist/Server/Services/AlertService.js.map +1 -1
  540. package/build/dist/Server/Services/AnalyticsDatabaseService.js +37 -5
  541. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  542. package/build/dist/Server/Services/DataSourceService.js +159 -0
  543. package/build/dist/Server/Services/DataSourceService.js.map +1 -0
  544. package/build/dist/Server/Services/DatabaseService.js +21 -2
  545. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  546. package/build/dist/Server/Services/HostService.js +74 -0
  547. package/build/dist/Server/Services/HostService.js.map +1 -1
  548. package/build/dist/Server/Services/IncidentFeedService.js +3 -0
  549. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  550. package/build/dist/Server/Services/IncidentService.js +35 -24
  551. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  552. package/build/dist/Server/Services/Index.js +2 -0
  553. package/build/dist/Server/Services/Index.js.map +1 -1
  554. package/build/dist/Server/Services/LlmLogService.js +22 -1
  555. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  556. package/build/dist/Server/Services/MonitorService.js +45 -0
  557. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  558. package/build/dist/Server/Services/MonitorStatusService.js +129 -0
  559. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  560. package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
  561. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  562. package/build/dist/Server/Services/RumSessionPinService.js +7 -15
  563. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  564. package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
  565. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  566. package/build/dist/Server/Services/UserService.js +241 -10
  567. package/build/dist/Server/Services/UserService.js.map +1 -1
  568. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
  569. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  570. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
  571. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
  572. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
  573. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
  574. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
  575. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
  576. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
  577. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  578. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
  579. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  580. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
  581. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  582. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
  583. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  584. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
  585. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  586. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
  587. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  588. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +222 -34
  589. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  590. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +22 -19
  591. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  592. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
  593. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
  594. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
  595. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  596. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +22 -19
  597. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  598. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
  599. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
  600. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
  601. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  602. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
  603. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  604. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
  605. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -1
  606. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
  607. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
  608. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
  609. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  610. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
  611. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  612. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
  613. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
  614. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js +303 -0
  615. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
  616. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
  617. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
  618. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
  619. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  620. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
  621. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
  622. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
  623. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
  624. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
  625. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
  626. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
  627. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
  628. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
  629. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
  630. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
  631. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
  632. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
  633. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
  634. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
  635. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
  636. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
  637. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
  638. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
  639. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
  640. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
  641. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
  642. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
  643. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
  644. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
  645. package/build/dist/Server/Utils/DataSource/EgressGuard.js +305 -0
  646. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
  647. package/build/dist/Server/Utils/DataSource/HttpFetch.js +134 -0
  648. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
  649. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
  650. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
  651. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
  652. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
  653. package/build/dist/Server/Utils/DataSource/Types.js +2 -0
  654. package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
  655. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
  656. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
  657. package/build/dist/Server/Utils/InProcessMemo.js +113 -0
  658. package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
  659. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
  660. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js.map +1 -0
  661. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
  662. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
  663. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
  664. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
  665. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +67 -0
  666. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  667. package/build/dist/Server/Utils/Monitor/MonitorResource.js +14 -0
  668. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  669. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
  670. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  671. package/build/dist/Server/Utils/PasswordHash.js +25 -4
  672. package/build/dist/Server/Utils/PasswordHash.js.map +1 -1
  673. package/build/dist/Server/Utils/Response.js +9 -1
  674. package/build/dist/Server/Utils/Response.js.map +1 -1
  675. package/build/dist/Server/Utils/SSRFProtection.js +192 -0
  676. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
  677. package/build/dist/Server/Utils/StartServer.js +7 -0
  678. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  679. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
  680. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  681. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
  682. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  683. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
  684. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
  685. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
  686. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
  687. package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
  688. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  689. package/build/dist/Server/Utils/Telemetry.js +93 -6
  690. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  691. package/build/dist/Server/Utils/VendorAssets.js +121 -0
  692. package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
  693. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -4
  694. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  695. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +5 -0
  696. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  697. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
  698. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
  699. package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
  700. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
  701. package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
  702. package/build/dist/Types/Analytics/RevenueEvent.js +26 -0
  703. package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
  704. package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
  705. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  706. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
  707. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
  708. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
  709. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
  710. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
  711. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
  712. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
  713. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
  714. package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
  715. package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
  716. package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
  717. package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
  718. package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
  719. package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
  720. package/build/dist/Types/DataSource/DataSourceType.js +183 -0
  721. package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
  722. package/build/dist/Types/Date.js +38 -3
  723. package/build/dist/Types/Date.js.map +1 -1
  724. package/build/dist/Types/HashedString.js +4 -3
  725. package/build/dist/Types/HashedString.js.map +1 -1
  726. package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
  727. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  728. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
  729. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
  730. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
  731. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  732. package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
  733. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  734. package/build/dist/Types/Monitor/MonitorStep.js +6 -1
  735. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  736. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
  737. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
  738. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
  739. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
  740. package/build/dist/Types/Password.js +56 -0
  741. package/build/dist/Types/Password.js.map +1 -0
  742. package/build/dist/Types/Permission.js +65 -155
  743. package/build/dist/Types/Permission.js.map +1 -1
  744. package/build/dist/Types/UserAuthenticationStatus.js +2 -0
  745. package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
  746. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
  747. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  748. package/build/dist/UI/Components/ErrorBoundary.js +427 -52
  749. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  750. package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
  751. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  752. package/build/dist/UI/Components/Icon/Icon.js +10 -4
  753. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  754. package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
  755. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  756. package/build/dist/UI/Components/Modal/Modal.js +178 -19
  757. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  758. package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
  759. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  760. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
  761. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  762. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  763. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  764. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
  765. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  766. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +197 -66
  767. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  768. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
  769. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  770. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
  771. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
  772. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
  773. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
  774. package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
  775. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
  776. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
  777. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
  778. package/build/dist/UI/Utils/DownloadFile.js +15 -8
  779. package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
  780. package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
  781. package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
  782. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +20 -15
  783. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  784. package/build/dist/UI/Utils/Project.js +3 -0
  785. package/build/dist/UI/Utils/Project.js.map +1 -1
  786. package/build/dist/UI/Utils/StatusPage.js +4 -4
  787. package/build/dist/UI/Utils/StatusPage.js.map +1 -1
  788. package/build/dist/UI/Utils/TestDataSource.js +39 -0
  789. package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
  790. package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
  791. package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
  792. package/build/dist/Utils/Analytics.js +4 -0
  793. package/build/dist/Utils/Analytics.js.map +1 -1
  794. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
  795. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
  796. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
  797. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
  798. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
  799. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
  800. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
  801. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
  802. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
  803. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
  804. package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
  805. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  806. package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
  807. package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
  808. package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
  809. package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
  810. package/build/dist/Utils/DataSource/DataSourceQueryText.js +64 -0
  811. package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
  812. package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
  813. package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
  814. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
  815. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js.map +1 -0
  816. package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
  817. package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
  818. package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
  819. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  820. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +8 -6
  821. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
  822. package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
  823. package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
  824. package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
  825. package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
  826. package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
  827. package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
  828. package/build/dist/Utils/StatusPage/ResourceExplorer.js +519 -0
  829. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
  830. package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
  831. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  832. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
  833. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
  834. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
  835. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
  836. package/jest.config.json +1 -0
  837. package/package.json +5 -1
  838. package/tsconfig.json +12 -10
@@ -1,7 +1,13 @@
1
1
  import ObjectID from "../../../../Types/ObjectID";
2
2
  import AIRunType from "../../../../Types/AI/AIRunType";
3
3
  import AIRunStatus from "../../../../Types/AI/AIRunStatus";
4
+ import AIRunCodeFixRecommendation from "../../../../Types/AI/AIRunCodeFixRecommendation";
5
+ import CodeFixTaskContext, {
6
+ getInvestigationCodeFixTaskSnapshot,
7
+ InvestigationCodeFixTaskSnapshot,
8
+ } from "../../../../Types/AI/CodeFixTaskContext";
4
9
  import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
10
+ import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
5
11
  import BadDataException from "../../../../Types/Exception/BadDataException";
6
12
  import AIRun from "../../../../Models/DatabaseModels/AIRun";
7
13
  import Project from "../../../../Models/DatabaseModels/Project";
@@ -9,6 +15,7 @@ import AIRunService from "../../../Services/AIRunService";
9
15
  import ProjectService from "../../../Services/ProjectService";
10
16
  import FixRunBudget, { FixRunBudgetDecision } from "../CodeFix/FixRunBudget";
11
17
  import SubjectCodeFixRun from "./SubjectCodeFixRun";
18
+ import PostedRootCause from "./PostedRootCause";
12
19
  import logger from "../../Logger";
13
20
  import CaptureSpan from "../../Telemetry/CaptureSpan";
14
21
 
@@ -17,28 +24,32 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
17
24
  * capability, vision §4.8), in two forms:
18
25
  *
19
26
  * HUMAN-TRIGGERED: after an AI investigation posts a root-cause analysis on
20
- * an incident or alert, the user can click "Open Fix PR from this analysis"
21
- * on the investigation panel: the agent takes the posted analysis (the
22
- * RootCause feed item) as its entire context and opens a fix pull request.
23
- * No project opt-in flag is needed for this form: the human in the loop IS
24
- * the gate (G11 posture preserved). It runs inside a user-facing endpoint
25
- * (POST /ai-investigation/create-fix-task) and FAILS EARLY with a clear
26
- * message when a gate is not met.
27
+ * an incident or alert and records a Recommended code-fix decision, the user
28
+ * can click "Open Fix PR from this analysis" on the investigation panel: the
29
+ * agent takes the immutable stored copy of that posted analysis as its
30
+ * context and opens a fix pull request. No project opt-in flag is needed for
31
+ * this form, but the durable recommendation remains a server-side gate so a
32
+ * stale or forged client cannot turn a non-code investigation into a PR.
27
33
  *
28
- * AUTOMATIC: for projects that opted in (Project.enableAutomaticCodeFixes,
29
- * default FALSE — G11 posture: autonomous PR creation is opt-in only), an
30
- * investigation that ends with a POSITIVE confident classification (per the
31
- * structured G6 confidence signal, never the analysis prose) enqueues the
32
- * same FixFromIncident task with no human click. Like its
33
- * InstrumentationTaskTrigger sibling it is fire-and-forget inside the
34
- * investigation's postAnalysis and never throws. The PR still opens as a
34
+ * AUTOMATIC: for projects that opted in through the subject lane's incident
35
+ * or alert automatic-code-fix setting (default FALSE — G11 posture:
36
+ * autonomous PR creation is opt-in only), an
37
+ * investigation that ends with a POSITIVE code-fix classification (per the
38
+ * structured G6 signal, never a regex over the analysis prose) enqueues the
39
+ * same FixFromIncident task with no human click. Confidence alone is not
40
+ * sufficient: operational and other non-code causes do not open PRs. Like its
41
+ * InstrumentationTaskTrigger sibling it runs only after the Recommended
42
+ * decision and snapshot are durable, and it never throws. The PR still opens as a
35
43
  * DRAFT and is always human-reviewed — the opt-in moves the human gate from
36
44
  * PR creation to PR review, never past it.
37
45
  */
38
46
 
39
47
  export interface AutoFixTaskGateInput {
40
- // The project row with enableAi + enableAutomaticCodeFixes selected.
48
+ // The project row with enableAi + the subject lane's opt-in selected.
41
49
  project: Project | null;
50
+ // Exactly one subject selects the incident or alert opt-in.
51
+ incidentId?: ObjectID | undefined;
52
+ alertId?: ObjectID | undefined;
42
53
  // Whether the project has at least one GitHub-App-connected repository.
43
54
  hasConnectedRepository: boolean;
44
55
  // A non-terminal FixFromIncident run for the same subject, if any.
@@ -59,19 +70,27 @@ export default class FixFromIncidentTaskTrigger {
59
70
  * incidentId/alertId is expected; userId is the clicking user
60
71
  * (attribution on the run).
61
72
  *
62
- * Throws BadDataException naming the failed gate: no completed
63
- * investigation, no GitHub-App repository, or a duplicate active run.
73
+ * Throws BadDataException naming the failed gate: no latest
74
+ * completed/recommended investigation, no GitHub-App repository, or a
75
+ * duplicate active run.
64
76
  */
65
77
  @CaptureSpan()
66
78
  public static async createFixTaskFromInvestigation(data: {
67
79
  projectId: ObjectID;
80
+ investigationRunId: ObjectID;
68
81
  incidentId?: ObjectID | undefined;
69
82
  alertId?: ObjectID | undefined;
70
83
  userId: ObjectID;
71
84
  }): Promise<AIRun> {
72
- if (!data.incidentId && !data.alertId) {
85
+ if (!data.investigationRunId) {
73
86
  throw new BadDataException(
74
- "An incident or alert subject is required to create a fix task.",
87
+ "An investigation run id is required to create a fix task.",
88
+ );
89
+ }
90
+
91
+ if (Boolean(data.incidentId) === Boolean(data.alertId)) {
92
+ throw new BadDataException(
93
+ "Exactly one incident or alert subject is required to create a fix task.",
75
94
  );
76
95
  }
77
96
 
@@ -80,28 +99,119 @@ export default class FixFromIncidentTaskTrigger {
80
99
  : "alert";
81
100
 
82
101
  /*
83
- * Gate 1: a COMPLETED investigation must exist for the subject its
84
- * posted analysis (the RootCause feed item) is the fix task's entire
85
- * context. Without one the worker would have nothing to work from.
102
+ * Gate 1: inspect the LATEST investigation for the subject, matching the
103
+ * run shown by the dashboard panel. Its durable recommendation is the
104
+ * server-authored decision about whether a code fix is appropriate, and
105
+ * its taskContext carries the exact posted analysis that decision covered.
106
+ * An older Recommended run must never override a newer NotRecommended,
107
+ * Running or failed result.
86
108
  */
87
- const completedInvestigation: AIRun | null = await AIRunService.findOneBy({
109
+ const latestInvestigation: AIRun | null = await AIRunService.findOneBy({
88
110
  query: {
111
+ projectId: data.projectId,
89
112
  runType: AIRunType.Investigation,
90
- status: AIRunStatus.Completed,
91
113
  ...(data.incidentId
92
114
  ? { triggeredByIncidentId: data.incidentId }
93
115
  : { triggeredByAlertId: data.alertId! }),
94
116
  },
95
- select: { _id: true },
117
+ select: {
118
+ _id: true,
119
+ completedAt: true,
120
+ status: true,
121
+ codeFixRecommendation: true,
122
+ taskContext: true,
123
+ },
124
+ sort: { createdAt: SortOrder.Descending },
96
125
  props: { isRoot: true },
97
126
  });
98
127
 
99
- if (!completedInvestigation) {
128
+ if (!latestInvestigation) {
100
129
  throw new BadDataException(
101
130
  `No completed AI investigation exists for this ${subjectLabel} — the fix task uses the investigation's posted analysis as its context. Wait for the investigation to complete, or enable AI investigations in the AI settings.`,
102
131
  );
103
132
  }
104
133
 
134
+ if (
135
+ latestInvestigation.id?.toString() !== data.investigationRunId.toString()
136
+ ) {
137
+ throw new BadDataException(
138
+ `A newer AI investigation is now available for this ${subjectLabel}. Refresh the page before creating a fix task.`,
139
+ );
140
+ }
141
+
142
+ if (latestInvestigation.status !== AIRunStatus.Completed) {
143
+ throw new BadDataException(
144
+ `The latest AI investigation for this ${subjectLabel} has not completed, so a fix task cannot be created from an older analysis. Wait for the latest investigation to complete successfully.`,
145
+ );
146
+ }
147
+
148
+ if (
149
+ latestInvestigation.codeFixRecommendation ===
150
+ AIRunCodeFixRecommendation.Pending
151
+ ) {
152
+ throw new BadDataException(
153
+ `The latest AI investigation for this ${subjectLabel} is still deciding whether a code fix is appropriate. Wait for that recommendation to finish before creating a fix task.`,
154
+ );
155
+ }
156
+
157
+ if (
158
+ latestInvestigation.codeFixRecommendation !==
159
+ AIRunCodeFixRecommendation.Recommended
160
+ ) {
161
+ throw new BadDataException(
162
+ `The latest AI investigation for this ${subjectLabel} did not recommend a code fix, so a fix pull request task cannot be created from it.`,
163
+ );
164
+ }
165
+
166
+ /*
167
+ * Gate the same immutable pair the worker will consume. A Recommended
168
+ * row without a complete snapshot (or whose snapshot names another run)
169
+ * is unsafe: looking up the subject's latest feed item would allow a
170
+ * later investigation to change the task after this authorization check.
171
+ */
172
+ const investigationSnapshot: InvestigationCodeFixTaskSnapshot | null =
173
+ getInvestigationCodeFixTaskSnapshot(latestInvestigation.taskContext);
174
+
175
+ if (
176
+ !latestInvestigation.id ||
177
+ !investigationSnapshot ||
178
+ investigationSnapshot.investigationRunId !==
179
+ latestInvestigation.id.toString()
180
+ ) {
181
+ throw new BadDataException(
182
+ `The latest AI investigation for this ${subjectLabel} has no complete stored analysis snapshot, so a fix task cannot be created safely. Run a new investigation and try again.`,
183
+ );
184
+ }
185
+
186
+ /*
187
+ * The feed item is the published report the user actually saw. Resolve
188
+ * it by the exact run association added to the feed model, then require
189
+ * it to match the durable recommendation snapshot. A missing or
190
+ * mismatched report fails closed instead of silently borrowing a newer
191
+ * subject-level RootCause.
192
+ */
193
+ const analysisMarkdown: string | null =
194
+ await PostedRootCause.getForInvestigation({
195
+ incidentId: data.incidentId,
196
+ alertId: data.alertId,
197
+ aiRunId: data.investigationRunId,
198
+ runCompletedAt: latestInvestigation.completedAt,
199
+ });
200
+
201
+ if (!analysisMarkdown) {
202
+ throw new BadDataException(
203
+ `No posted investigation analysis exists for this ${subjectLabel} and investigation run. Refresh the page and wait for the report to finish publishing before creating a fix task.`,
204
+ );
205
+ }
206
+
207
+ if (
208
+ analysisMarkdown !== investigationSnapshot.investigationAnalysisMarkdown
209
+ ) {
210
+ throw new BadDataException(
211
+ `The posted investigation analysis for this ${subjectLabel} does not match its durable recommendation snapshot. Run a new investigation before creating a fix task.`,
212
+ );
213
+ }
214
+
105
215
  // Gate 2: a repository the agent can actually open a PR against.
106
216
  const hasConnectedRepository: boolean =
107
217
  await SubjectCodeFixRun.hasGitHubAppConnectedRepository(data.projectId);
@@ -136,6 +246,10 @@ export default class FixFromIncidentTaskTrigger {
136
246
  incidentId: data.incidentId,
137
247
  alertId: data.alertId,
138
248
  userId: data.userId,
249
+ taskContext: {
250
+ sourceInvestigationRunId: data.investigationRunId.toString(),
251
+ sourceInvestigationAnalysisMarkdown: analysisMarkdown,
252
+ },
139
253
  });
140
254
  }
141
255
 
@@ -143,9 +257,8 @@ export default class FixFromIncidentTaskTrigger {
143
257
  * The pure trigger decision for the AUTOMATIC form, separated from IO so
144
258
  * it can be tested directly: strict opt-in (default FALSE), a repository
145
259
  * the agent can actually open a PR against, and the per-subject dedupe
146
- * guard. The caller has already established the confident-investigation
147
- * prerequisite (this runs inside the investigation's postAnalysis, gated
148
- * by AIConfidenceSignal.shouldAutoEnqueueCodeFixTask).
260
+ * guard. The caller has already established and durably persisted the
261
+ * code-fix-recommended investigation prerequisite.
149
262
  */
150
263
  public static shouldAutoEnqueueFixTask(
151
264
  input: AutoFixTaskGateInput,
@@ -162,10 +275,21 @@ export default class FixFromIncidentTaskTrigger {
162
275
  * Strict opt-in — the column defaults to false, so unset/legacy rows
163
276
  * never enqueue. Autonomous PR creation must never be default-on.
164
277
  */
165
- if (input.project.enableAutomaticCodeFixes !== true) {
278
+ if (Boolean(input.incidentId) === Boolean(input.alertId)) {
279
+ return {
280
+ enqueue: false,
281
+ reason: "exactly one incident or alert subject is required",
282
+ };
283
+ }
284
+
285
+ const automaticCodeFixesEnabled: boolean = input.incidentId
286
+ ? input.project.enableAutomaticIncidentCodeFixes === true
287
+ : input.project.enableAutomaticAlertCodeFixes === true;
288
+
289
+ if (!automaticCodeFixesEnabled) {
166
290
  return {
167
291
  enqueue: false,
168
- reason: "project has not opted in to automatic code fixes",
292
+ reason: `project has not opted in to automatic ${input.incidentId ? "incident" : "alert"} code fixes`,
169
293
  };
170
294
  }
171
295
 
@@ -197,31 +321,52 @@ export default class FixFromIncidentTaskTrigger {
197
321
 
198
322
  /*
199
323
  * The AUTOMATIC form: enqueue a FixFromIncident run for a subject whose
200
- * investigation just posted a CONFIDENT analysis. Exactly one of
324
+ * latest investigation durably recommends a repository code fix. Exactly one of
201
325
  * incidentId/alertId is expected. NEVER throws — every failure is logged
202
- * and swallowed, because this runs inside the investigation's
203
- * postAnalysis and must not fail it. No userId: the run stays
326
+ * and swallowed, because this is a best-effort post-recommendation
327
+ * follow-up and must not fail the investigation. No userId: the run stays
204
328
  * system-authored.
205
329
  */
206
330
  @CaptureSpan()
207
- public static async autoEnqueueFromConfidentInvestigation(data: {
331
+ public static async autoEnqueueFromRecommendedInvestigation(data: {
208
332
  projectId: ObjectID;
333
+ investigationRunId: ObjectID;
334
+ analysisMarkdown: string;
209
335
  incidentId?: ObjectID | undefined;
210
336
  alertId?: ObjectID | undefined;
211
337
  }): Promise<void> {
212
338
  const { projectId } = data;
213
339
 
214
340
  try {
215
- if (!data.incidentId && !data.alertId) {
341
+ if (Boolean(data.incidentId) === Boolean(data.alertId)) {
342
+ return;
343
+ }
344
+
345
+ const taskContext: CodeFixTaskContext = {
346
+ sourceInvestigationRunId: data.investigationRunId?.toString(),
347
+ sourceInvestigationAnalysisMarkdown: data.analysisMarkdown,
348
+ };
349
+ const investigationSnapshot: InvestigationCodeFixTaskSnapshot | null =
350
+ getInvestigationCodeFixTaskSnapshot(taskContext);
351
+
352
+ if (!investigationSnapshot) {
353
+ logger.error(
354
+ `AI: not auto-enqueueing fix task for project ${projectId.toString()} — the recommended investigation has no complete stored analysis snapshot.`,
355
+ );
216
356
  return;
217
357
  }
218
358
 
219
359
  const project: Project | null = await ProjectService.findOneById({
220
360
  id: projectId,
221
- select: {
222
- enableAi: true,
223
- enableAutomaticCodeFixes: true,
224
- },
361
+ select: data.incidentId
362
+ ? {
363
+ enableAi: true,
364
+ enableAutomaticIncidentCodeFixes: true,
365
+ }
366
+ : {
367
+ enableAi: true,
368
+ enableAutomaticAlertCodeFixes: true,
369
+ },
225
370
  props: { isRoot: true },
226
371
  });
227
372
 
@@ -232,6 +377,8 @@ export default class FixFromIncidentTaskTrigger {
232
377
  const optInDecision: AutoFixTaskGateDecision =
233
378
  this.shouldAutoEnqueueFixTask({
234
379
  project,
380
+ incidentId: data.incidentId,
381
+ alertId: data.alertId,
235
382
  hasConnectedRepository: true,
236
383
  existingRun: null,
237
384
  });
@@ -243,17 +390,73 @@ export default class FixFromIncidentTaskTrigger {
243
390
  return;
244
391
  }
245
392
 
393
+ /*
394
+ * Re-read the authoritative latest source after the engine has durably
395
+ * settled it. This prevents an older overlapping investigation from
396
+ * auto-authorizing a task after a newer run became authoritative, and
397
+ * guarantees a task is never claimable while its source is Pending.
398
+ */
399
+ const latestInvestigation: AIRun | null = await AIRunService.findOneBy({
400
+ query: {
401
+ projectId,
402
+ runType: AIRunType.Investigation,
403
+ ...(data.incidentId
404
+ ? { triggeredByIncidentId: data.incidentId }
405
+ : { triggeredByAlertId: data.alertId! }),
406
+ },
407
+ select: {
408
+ _id: true,
409
+ status: true,
410
+ codeFixRecommendation: true,
411
+ taskContext: true,
412
+ },
413
+ sort: { createdAt: SortOrder.Descending },
414
+ props: { isRoot: true },
415
+ });
416
+ const persistedSnapshot: InvestigationCodeFixTaskSnapshot | null =
417
+ getInvestigationCodeFixTaskSnapshot(latestInvestigation?.taskContext);
418
+
419
+ if (
420
+ !latestInvestigation?.id ||
421
+ latestInvestigation.id.toString() !==
422
+ data.investigationRunId.toString() ||
423
+ latestInvestigation.status !== AIRunStatus.Completed ||
424
+ latestInvestigation.codeFixRecommendation !==
425
+ AIRunCodeFixRecommendation.Recommended ||
426
+ !persistedSnapshot ||
427
+ persistedSnapshot.investigationRunId !==
428
+ data.investigationRunId.toString() ||
429
+ persistedSnapshot.investigationAnalysisMarkdown !==
430
+ investigationSnapshot.investigationAnalysisMarkdown
431
+ ) {
432
+ logger.debug(
433
+ `AI: not auto-enqueueing fix task for project ${projectId.toString()} — the source is no longer the latest durably Recommended investigation.`,
434
+ );
435
+ return;
436
+ }
437
+
246
438
  /*
247
439
  * G11 guardrail: the per-project daily fix-run budget. For this
248
440
  * AUTOMATIC trigger, over-budget is a logged skip — never an error
249
441
  * thrown into the investigation.
250
442
  */
251
- const budget: FixRunBudgetDecision =
252
- await FixRunBudget.getBudgetStatus(projectId);
443
+ const budget: FixRunBudgetDecision = await FixRunBudget.getBudgetStatus(
444
+ projectId,
445
+ {
446
+ incidentId: data.incidentId,
447
+ alertId: data.alertId,
448
+ },
449
+ );
253
450
 
254
451
  if (!budget.allowed) {
255
452
  logger.debug(
256
- `AI: not auto-enqueueing fix task for project ${projectId.toString()} — ${FixRunBudget.describeRejection(budget)}`,
453
+ `AI: not auto-enqueueing fix task for project ${projectId.toString()} — ${FixRunBudget.describeRejection(
454
+ budget,
455
+ {
456
+ incidentId: data.incidentId,
457
+ alertId: data.alertId,
458
+ },
459
+ )}`,
257
460
  );
258
461
  return;
259
462
  }
@@ -270,6 +473,8 @@ export default class FixFromIncidentTaskTrigger {
270
473
 
271
474
  const decision: AutoFixTaskGateDecision = this.shouldAutoEnqueueFixTask({
272
475
  project,
476
+ incidentId: data.incidentId,
477
+ alertId: data.alertId,
273
478
  hasConnectedRepository,
274
479
  existingRun,
275
480
  });
@@ -287,6 +492,10 @@ export default class FixFromIncidentTaskTrigger {
287
492
  taskType: CodeFixTaskType.FixFromIncident,
288
493
  incidentId: data.incidentId,
289
494
  alertId: data.alertId,
495
+ taskContext: {
496
+ sourceInvestigationRunId: data.investigationRunId.toString(),
497
+ sourceInvestigationAnalysisMarkdown: data.analysisMarkdown,
498
+ },
290
499
  });
291
500
 
292
501
  logger.debug(
@@ -216,6 +216,8 @@ export default class AIIncidentInvestigationRunner {
216
216
  projectId,
217
217
  monitorId: QueryHelper.any(monitorIds),
218
218
  runType: AIRunType.Investigation,
219
+ triggeredByIncidentId: QueryHelper.notNull(),
220
+ triggeredByAlertId: QueryHelper.isNull(),
219
221
  createdAt: QueryHelper.greaterThan(windowStart),
220
222
  },
221
223
  props: { isRoot: true },
@@ -349,7 +351,10 @@ export default class AIIncidentInvestigationRunner {
349
351
  request: {
350
352
  // Persisted LlmLog label — owned by AIService (G4 budget list).
351
353
  feature: AI_INCIDENT_INVESTIGATION_FEATURE,
354
+ incidentId,
352
355
  contextSummary,
356
+ persistCodeFixRecommendation: true,
357
+ persistAnalysisTldr: true,
353
358
  postAnalysis: async (postData: {
354
359
  analysisMarkdown: string;
355
360
  confidence: ConfidenceSignal;
@@ -358,6 +363,7 @@ export default class AIIncidentInvestigationRunner {
358
363
  await IncidentFeedService.createIncidentFeedItem({
359
364
  incidentId,
360
365
  projectId,
366
+ aiRunId,
361
367
  incidentFeedEventType: IncidentFeedEventType.RootCause,
362
368
  displayColor: Blue500,
363
369
  feedInfoInMarkdown: postData.analysisMarkdown,
@@ -421,7 +427,7 @@ export default class AIIncidentInvestigationRunner {
421
427
 
422
428
  /*
423
429
  * Inconclusive means the telemetry was insufficient — for
424
- * opted-in projects (Project.enableInstrumentationFixTasks,
430
+ * opted-in projects (the incident instrumentation-fix setting,
425
431
  * default false), queue an ImproveInstrumentation fix task that
426
432
  * opens a PR adding the missing observability. Runs strictly
427
433
  * AFTER the analysis is posted, and the trigger never throws, so
@@ -442,29 +448,25 @@ export default class AIIncidentInvestigationRunner {
442
448
  },
443
449
  );
444
450
  }
445
-
446
- /*
447
- * The confident twin: a POSITIVE confident classification means
448
- * the posted analysis asserts an evidenced root cause — for
449
- * opted-in projects (Project.enableAutomaticCodeFixes, default
450
- * false), automatically queue the FixFromIncident task that
451
- * opens a draft fix PR from this analysis (the automatic form
452
- * of the "Open Fix PR from this analysis" button). Runs strictly
453
- * AFTER the analysis is posted because the posted RootCause feed
454
- * item IS the fix task's entire context, and the trigger never
455
- * throws. Fail direction (G6): the deterministic floor and a
456
- * failed classification never auto-open a PR.
457
- */
458
- if (
459
- AIConfidenceSignal.shouldAutoEnqueueCodeFixTask(postData.confidence)
460
- ) {
461
- await FixFromIncidentTaskTrigger.autoEnqueueFromConfidentInvestigation(
462
- {
463
- projectId,
464
- incidentId,
465
- },
466
- );
467
- }
451
+ },
452
+ /*
453
+ * The engine calls this only after it atomically persists Recommended
454
+ * with the exact posted analysis snapshot. That durable decision is
455
+ * the prerequisite for the optional automatic FixFromIncident task;
456
+ * the trigger then applies the incident lane's independent opt-in and
457
+ * remaining repository, budget and dedupe gates.
458
+ */
459
+ onCodeFixRecommended: async (data: {
460
+ analysisMarkdown: string;
461
+ }): Promise<void> => {
462
+ await FixFromIncidentTaskTrigger.autoEnqueueFromRecommendedInvestigation(
463
+ {
464
+ projectId,
465
+ investigationRunId: aiRunId,
466
+ analysisMarkdown: data.analysisMarkdown,
467
+ incidentId,
468
+ },
469
+ );
468
470
  },
469
471
  /*
470
472
  * RCA-first ordering: auto-remediation for this incident was
@@ -0,0 +1,125 @@
1
+ import ObjectID from "../../../../../../Types/ObjectID";
2
+ import Crypto from "../../../../../../Utils/Crypto";
3
+ import { normalizeExceptionText } from "../../../../Telemetry/ExceptionSanitizer";
4
+
5
+ /*
6
+ * Shared exception identity for the two exception detectors (NewException and
7
+ * ExceptionSpike).
8
+ *
9
+ * THE PROBLEM THIS SOLVES. A TelemetryException GROUP is keyed at ingest on
10
+ * sha256(projectId + primaryEntityId + normalizedMessage + normalizedStackTrace
11
+ * + exceptionType) — the STACK TRACE is part of that key. One logical failure
12
+ * raised from several call sites is therefore several groups, and a detector
13
+ * that emits one insight per group files the same finding several times over.
14
+ * Worse, the insight TITLE used to be the exceptionType alone, so those rows
15
+ * were not merely duplicated, they were indistinguishable: a service whose
16
+ * instrumentation reports `exception.type = "401"` produced a wall of
17
+ * identical "New exception: 401 in api" rows.
18
+ *
19
+ * THE FAILURE MODE is the unit a human actually triages: one service, one
20
+ * exception type, one normalized message. Everything below that (which call
21
+ * stack it surfaced on) is detail that belongs inside the insight, not a
22
+ * separate row in the inbox.
23
+ */
24
+
25
+ /*
26
+ * How much of the message rides in the insight title. Titles must stay
27
+ * scannable in a list, but they must also carry enough of the message to tell
28
+ * two findings apart — the type alone frequently cannot (HTTP status codes,
29
+ * bare `Error`, `Exception`).
30
+ */
31
+ export const EXCEPTION_LABEL_MESSAGE_MAX_LENGTH: number = 80;
32
+
33
+ /*
34
+ * Human label for an exception: the type AND the message, because either one
35
+ * alone collides. `TypeError` is not a finding; `TypeError: Cannot read
36
+ * properties of undefined (reading 'user')` is.
37
+ *
38
+ * Only the message is truncated (the type is short by construction), so a
39
+ * label is never longer than the type plus the cap plus the separator.
40
+ */
41
+ export function buildExceptionLabel(
42
+ exceptionType: string | undefined,
43
+ message: string | undefined,
44
+ messageMaxLength: number = EXCEPTION_LABEL_MESSAGE_MAX_LENGTH,
45
+ ): string {
46
+ const type: string = (exceptionType || "").trim();
47
+ const fullMessage: string = (message || "").trim();
48
+
49
+ if (!type && !fullMessage) {
50
+ return "Unknown exception";
51
+ }
52
+
53
+ if (!fullMessage) {
54
+ return type;
55
+ }
56
+
57
+ const shortMessage: string =
58
+ fullMessage.length <= messageMaxLength
59
+ ? fullMessage
60
+ : `${fullMessage.slice(0, messageMaxLength)}…`;
61
+
62
+ if (!type) {
63
+ return shortMessage;
64
+ }
65
+
66
+ /*
67
+ * Runtimes routinely prefix the message with the type ("Error: connect
68
+ * ECONNREFUSED", "ValueError: invalid literal"), and some SDKs report the
69
+ * message as the type verbatim. Saying it twice reads as a bug.
70
+ */
71
+ const lowerType: string = type.toLowerCase();
72
+ const lowerMessage: string = fullMessage.toLowerCase();
73
+
74
+ if (
75
+ lowerMessage === lowerType ||
76
+ lowerMessage.startsWith(`${lowerType}:`) ||
77
+ lowerMessage.startsWith(`${lowerType} `)
78
+ ) {
79
+ return shortMessage;
80
+ }
81
+
82
+ return `${type}: ${shortMessage}`;
83
+ }
84
+
85
+ /*
86
+ * Stable identity of a FAILURE MODE — the dedupe key insights are filed under.
87
+ *
88
+ * (entity, type, normalized message) and deliberately NOT the stack trace:
89
+ * collapsing stack-trace-only variants of one failure into one insight is the
90
+ * entire point. The entity id stays in the clear so a fingerprint is greppable
91
+ * back to a service, and it guarantees the key can never collide across
92
+ * services; the type+message half is hashed so an unbounded telemetry string
93
+ * cannot blow past the fingerprint column.
94
+ *
95
+ * `${exceptionType}|${normalizeExceptionText(message)}` is the SAME signature
96
+ * TelemetryExceptionService.validateNoOpenFixForSimilarException already uses
97
+ * to stop the fix lane opening near-identical pull requests for one throw site
98
+ * ("observed: 15 near-identical PRs for one invalid-uuid throw site"). The
99
+ * insight lane had no equivalent — this is that same rule, applied one stage
100
+ * earlier so the duplicates never reach the inbox in the first place.
101
+ *
102
+ * The RAW message is normalized here rather than the sanitized one: the
103
+ * fingerprint is an identity that MUST stay byte-for-byte stable across ticks
104
+ * and releases (a key that drifts files a duplicate on every drift), and
105
+ * normalizeExceptionText carries exactly that stability contract, while the
106
+ * secret redactor layered on top of it for display does not.
107
+ */
108
+ export function buildExceptionFailureModeKey(data: {
109
+ primaryEntityId: ObjectID | undefined;
110
+ exceptionType: string | undefined;
111
+ message: string | undefined;
112
+ }): string {
113
+ const entityId: string =
114
+ data.primaryEntityId?.toString() || "unattributed-entity";
115
+ const type: string = (data.exceptionType || "").trim();
116
+ const normalizedMessage: string = normalizeExceptionText(
117
+ (data.message || "").trim(),
118
+ );
119
+
120
+ const contentHash: string = Crypto.getSha256Hash(
121
+ `${type}|${normalizedMessage}`,
122
+ );
123
+
124
+ return `${entityId}:${contentHash}`;
125
+ }