@oneuptime/common 12.0.3 → 12.0.5

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 (516) hide show
  1. package/Models/DatabaseModels/AIRun.ts +38 -1
  2. package/Models/DatabaseModels/AlertFeed.ts +30 -0
  3. package/Models/DatabaseModels/CephCluster.ts +14 -0
  4. package/Models/DatabaseModels/CodeRepository.ts +14 -6
  5. package/Models/DatabaseModels/Dashboard.ts +28 -0
  6. package/Models/DatabaseModels/DockerHost.ts +14 -0
  7. package/Models/DatabaseModels/GlobalOidcProject.ts +18 -0
  8. package/Models/DatabaseModels/GlobalSsoProject.ts +18 -0
  9. package/Models/DatabaseModels/Incident.ts +2 -0
  10. package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
  11. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
  12. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
  13. package/Models/DatabaseModels/IncidentFeed.ts +30 -0
  14. package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
  15. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  16. package/Models/DatabaseModels/IoTFleet.ts +14 -0
  17. package/Models/DatabaseModels/KubernetesCluster.ts +14 -0
  18. package/Models/DatabaseModels/LogSavedView.ts +33 -0
  19. package/Models/DatabaseModels/NetworkDevice.ts +14 -0
  20. package/Models/DatabaseModels/NetworkInterface.ts +18 -0
  21. package/Models/DatabaseModels/Project.ts +247 -11
  22. package/Models/DatabaseModels/ProxmoxCluster.ts +14 -0
  23. package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
  24. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
  25. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
  26. package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
  27. package/Models/DatabaseModels/Service.ts +30 -0
  28. package/Models/DatabaseModels/StatusPage.ts +28 -0
  29. package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
  30. package/Models/DatabaseModels/StatusPagePrivateUser.ts +30 -0
  31. package/Models/DatabaseModels/User.ts +30 -0
  32. package/Server/API/AIAgentDataAPI.ts +75 -55
  33. package/Server/API/AIInvestigationAPI.ts +175 -17
  34. package/Server/API/DashboardAPI.ts +429 -22
  35. package/Server/API/GitHubAPI.ts +119 -283
  36. package/Server/API/StatusPageAPI.ts +38 -19
  37. package/Server/API/UserAPI.ts +263 -1
  38. package/Server/EnvironmentConfig.ts +23 -3
  39. package/Server/Infrastructure/ClickhouseConfig.ts +15 -1
  40. package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
  41. package/Server/Infrastructure/GlobalCache.ts +37 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.ts +21 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.ts +68 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +100 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +214 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.ts +69 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
  51. package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
  52. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
  53. package/Server/Services/AIRunService.ts +78 -10
  54. package/Server/Services/AIService.ts +94 -22
  55. package/Server/Services/AlertFeedService.ts +5 -0
  56. package/Server/Services/AnalyticsDatabaseService.ts +101 -1
  57. package/Server/Services/CodeRepositoryService.ts +105 -2
  58. package/Server/Services/DatabaseService.ts +227 -3
  59. package/Server/Services/IncidentFeedService.ts +5 -0
  60. package/Server/Services/LlmLogService.ts +46 -2
  61. package/Server/Services/OpenTelemetryIngestService.ts +230 -26
  62. package/Server/Services/UserService.ts +184 -0
  63. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
  64. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
  65. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
  66. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
  67. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
  68. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
  69. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +223 -22
  70. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +25 -24
  71. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
  72. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
  73. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +25 -24
  74. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
  75. package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
  76. package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
  77. package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
  78. package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
  79. package/Server/Utils/AI/SRE/README.md +1 -1
  80. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
  81. package/Server/Utils/AI/Toolbox/CodeTools.ts +45 -4
  82. package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
  83. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +13 -0
  84. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +157 -4
  85. package/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.ts +130 -0
  86. package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
  87. package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
  88. package/Server/Utils/Monitor/MonitorMetricUtil.ts +46 -0
  89. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
  90. package/Server/Utils/PasswordHash.ts +330 -0
  91. package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
  92. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
  93. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
  94. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1184 -0
  95. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
  96. package/Tests/App/Dashboard/OverviewCustomFields.test.tsx +333 -0
  97. package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
  98. package/Tests/App/Dashboard/UserCustomFields.test.tsx +392 -0
  99. package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
  100. package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
  101. package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
  102. package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
  103. package/Tests/Server/API/AIAgentDataRepositoryToken.test.ts +381 -0
  104. package/Tests/Server/API/AIInvestigationAPI.test.ts +594 -0
  105. package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
  106. package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
  107. package/Tests/Server/API/DashboardPublicAttributeValuesAPI.test.ts +943 -0
  108. package/Tests/Server/API/DashboardPublicMetricsAggregateAPI.test.ts +1296 -0
  109. package/Tests/Server/API/DashboardPublicTemplatePayloads.test.ts +598 -0
  110. package/Tests/Server/API/GitHubAppInstallationBindingAPI.test.ts +539 -0
  111. package/Tests/Server/API/Helpers.ts +6 -1
  112. package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
  113. package/Tests/Server/API/UserProjectsAPI.test.ts +852 -0
  114. package/Tests/Server/Infrastructure/GlobalCache.test.ts +128 -0
  115. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +215 -0
  116. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
  117. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
  118. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +396 -20
  119. package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
  120. package/Tests/Server/Services/AddPerUserPasswordSaltMigration.test.ts +178 -0
  121. package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +582 -0
  122. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +30 -1
  123. package/Tests/Server/Services/CodeRepositoryInstallationBinding.test.ts +305 -0
  124. package/Tests/Server/Services/CodeRepositoryResolutionBinding.test.ts +147 -0
  125. package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +880 -0
  126. package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
  127. package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
  128. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
  129. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
  130. package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
  131. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +568 -0
  132. package/Tests/Server/Services/RestoreDroppedUniqueIndexesMigration.test.ts +386 -0
  133. package/Tests/Server/Services/RestoreServiceLowerNameIndexMigration.test.ts +240 -0
  134. package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
  135. package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +885 -0
  136. package/Tests/Server/Services/WidenHashedStringColumnsForScryptMigration.test.ts +220 -0
  137. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
  138. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
  139. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
  140. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
  141. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
  142. package/Tests/Server/Utils/AI/CodeTools.test.ts +47 -1
  143. package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +10 -0
  144. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
  145. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
  146. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
  147. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
  148. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
  149. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +313 -20
  150. package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
  151. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
  152. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
  153. package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
  154. package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
  155. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +120 -0
  156. package/Tests/Server/Utils/CodeRepository/GitHubInstallationBinding.test.ts +292 -0
  157. package/Tests/Server/Utils/GitHubInstallationOwnershipVerification.test.ts +340 -0
  158. package/Tests/Server/Utils/GitHubWebhookAndTreeCacheIsolation.test.ts +250 -0
  159. package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
  160. package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
  161. package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
  162. package/Tests/Server/Utils/PasswordHash.test.ts +585 -0
  163. package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
  164. package/Tests/Types/Database/ColumnLength.test.ts +7 -1
  165. package/Tests/Types/HashedStringPerUserSalt.test.ts +476 -0
  166. package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
  167. package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
  168. package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +293 -0
  169. package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
  170. package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
  171. package/Tests/Types/Monitor/HostAlertTemplates.test.ts +249 -0
  172. package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
  173. package/Tests/Types/Monitor/IotAlertTemplates.test.ts +320 -0
  174. package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
  175. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
  176. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
  177. package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
  178. package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
  179. package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +271 -0
  180. package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
  181. package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
  182. package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
  183. package/Tests/Types/Permission.test.ts +137 -0
  184. package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
  185. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
  186. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
  187. package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +696 -0
  188. package/Tests/UI/Components/ErrorBoundary.test.tsx +158 -0
  189. package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
  190. package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
  191. package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
  192. package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
  193. package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
  194. package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
  195. package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
  196. package/Tests/UI/Utils/Project.test.ts +31 -0
  197. package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
  198. package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
  199. package/Tests/UI/Utils/UserProjectsModelAPI.test.ts +714 -0
  200. package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
  201. package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
  202. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
  203. package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
  204. package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
  205. package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
  206. package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
  207. package/Tests/Utils/TeamMembersByProject.test.ts +655 -0
  208. package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
  209. package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
  210. package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
  211. package/Types/AI/CodeFixTaskContext.ts +63 -3
  212. package/Types/AI/CodeFixTaskType.ts +3 -3
  213. package/Types/Database/ColumnLength.ts +9 -1
  214. package/Types/Database/TableColumn.ts +11 -0
  215. package/Types/Database/UnsynchronizedIndex.ts +48 -0
  216. package/Types/HashedString.ts +140 -4
  217. package/Types/Monitor/CriteriaFilter.ts +4 -0
  218. package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
  219. package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
  220. package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
  221. package/Types/Monitor/MonitorMetricType.ts +8 -0
  222. package/Types/Monitor/MonitorStep.ts +10 -1
  223. package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
  224. package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
  225. package/Types/Permission.ts +23 -175
  226. package/Types/Probe/ProbeMonitorResponse.ts +6 -0
  227. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
  228. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +85 -11
  229. package/UI/Components/ErrorBoundary.tsx +138 -11
  230. package/UI/Components/Feed/FeedItem.tsx +9 -2
  231. package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
  232. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  233. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
  234. package/UI/Components/MoreMenu/MoreMenu.tsx +285 -97
  235. package/UI/Components/MoreMenu/MoreMenuItem.tsx +8 -5
  236. package/UI/Components/Navbar/NavBar.tsx +12 -2
  237. package/UI/Components/Navbar/NavBarMenuModal.tsx +19 -7
  238. package/UI/Utils/DownloadFile.ts +16 -8
  239. package/UI/Utils/ErrorSupportBundle.ts +805 -0
  240. package/UI/Utils/ModelAPI/ModelAPI.ts +19 -8
  241. package/UI/Utils/ModelAPI/UserProjectsModelAPI.ts +257 -0
  242. package/UI/Utils/Project.ts +4 -0
  243. package/UI/Utils/StatusPage.ts +8 -2
  244. package/UI/Utils/UseDashboardGridDnd.ts +917 -0
  245. package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
  246. package/Utils/Dashboard/GridLayout.ts +523 -0
  247. package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
  248. package/Utils/Monitor/MonitorMetricType.ts +44 -2
  249. package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
  250. package/Utils/StatusPage/GroupTree.ts +157 -66
  251. package/Utils/StatusPage/ResourceUptime.ts +37 -2
  252. package/Utils/TeamMembersByProject.ts +237 -0
  253. package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
  254. package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
  255. package/build/dist/Models/DatabaseModels/AIRun.js +39 -1
  256. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  257. package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
  258. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  259. package/build/dist/Models/DatabaseModels/CephCluster.js +16 -1
  260. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  261. package/build/dist/Models/DatabaseModels/CodeRepository.js +14 -6
  262. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  263. package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
  264. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  265. package/build/dist/Models/DatabaseModels/DockerHost.js +16 -1
  266. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  267. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +16 -1
  268. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
  269. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +16 -1
  270. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
  271. package/build/dist/Models/DatabaseModels/Incident.js +2 -0
  272. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  273. package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
  274. package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
  275. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
  276. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  277. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
  278. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  279. package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
  280. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  281. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
  282. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  283. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  284. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  285. package/build/dist/Models/DatabaseModels/IoTFleet.js +16 -1
  286. package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
  287. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +16 -1
  288. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  289. package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
  290. package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
  291. package/build/dist/Models/DatabaseModels/NetworkDevice.js +16 -1
  292. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  293. package/build/dist/Models/DatabaseModels/NetworkInterface.js +16 -1
  294. package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -1
  295. package/build/dist/Models/DatabaseModels/Project.js +257 -13
  296. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  297. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +16 -1
  298. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  299. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
  300. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  301. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
  302. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  303. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
  304. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  305. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
  306. package/build/dist/Models/DatabaseModels/Service.js +28 -1
  307. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  308. package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
  309. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  310. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
  311. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  312. package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +32 -0
  313. package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
  314. package/build/dist/Models/DatabaseModels/User.js +32 -0
  315. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  316. package/build/dist/Server/API/AIAgentDataAPI.js +49 -48
  317. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  318. package/build/dist/Server/API/AIInvestigationAPI.js +111 -11
  319. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  320. package/build/dist/Server/API/DashboardAPI.js +312 -15
  321. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  322. package/build/dist/Server/API/GitHubAPI.js +94 -167
  323. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  324. package/build/dist/Server/API/StatusPageAPI.js +29 -11
  325. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  326. package/build/dist/Server/API/UserAPI.js +187 -2
  327. package/build/dist/Server/API/UserAPI.js.map +1 -1
  328. package/build/dist/Server/EnvironmentConfig.js +21 -3
  329. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  330. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -1
  331. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  332. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
  333. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
  334. package/build/dist/Server/Infrastructure/GlobalCache.js +29 -0
  335. package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
  336. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js +14 -0
  337. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js.map +1 -0
  338. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js +59 -0
  339. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js.map +1 -0
  340. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
  341. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
  342. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +93 -0
  343. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js.map +1 -0
  344. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
  345. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
  346. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
  347. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
  348. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js +101 -0
  349. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js.map +1 -0
  350. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js +66 -0
  351. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js.map +1 -0
  352. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
  353. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
  354. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
  355. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
  356. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
  357. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  358. package/build/dist/Server/Services/AIRunService.js +58 -12
  359. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  360. package/build/dist/Server/Services/AIService.js +74 -21
  361. package/build/dist/Server/Services/AIService.js.map +1 -1
  362. package/build/dist/Server/Services/AlertFeedService.js +3 -0
  363. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  364. package/build/dist/Server/Services/AnalyticsDatabaseService.js +86 -2
  365. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  366. package/build/dist/Server/Services/CodeRepositoryService.js +90 -2
  367. package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
  368. package/build/dist/Server/Services/DatabaseService.js +180 -3
  369. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  370. package/build/dist/Server/Services/IncidentFeedService.js +3 -0
  371. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  372. package/build/dist/Server/Services/LlmLogService.js +22 -1
  373. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  374. package/build/dist/Server/Services/OpenTelemetryIngestService.js +155 -25
  375. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  376. package/build/dist/Server/Services/UserService.js +165 -0
  377. package/build/dist/Server/Services/UserService.js.map +1 -1
  378. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
  379. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  380. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
  381. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  382. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
  383. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  384. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
  385. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  386. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
  387. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  388. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
  389. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  390. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +156 -28
  391. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  392. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +21 -19
  393. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  394. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
  395. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
  396. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
  397. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  398. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +21 -19
  399. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  400. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
  401. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
  402. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
  403. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  404. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
  405. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  406. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
  407. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
  408. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
  409. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
  410. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
  411. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  412. package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js +31 -1
  413. package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js.map +1 -1
  414. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
  415. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
  416. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +13 -0
  417. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  418. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +126 -4
  419. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  420. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js +136 -0
  421. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js.map +1 -0
  422. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
  423. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
  424. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
  425. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
  426. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
  427. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  428. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
  429. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  430. package/build/dist/Server/Utils/PasswordHash.js +258 -0
  431. package/build/dist/Server/Utils/PasswordHash.js.map +1 -0
  432. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
  433. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
  434. package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
  435. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
  436. package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
  437. package/build/dist/Types/Database/ColumnLength.js +9 -1
  438. package/build/dist/Types/Database/ColumnLength.js.map +1 -1
  439. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  440. package/build/dist/Types/Database/UnsynchronizedIndex.js +46 -0
  441. package/build/dist/Types/Database/UnsynchronizedIndex.js.map +1 -0
  442. package/build/dist/Types/HashedString.js +96 -5
  443. package/build/dist/Types/HashedString.js.map +1 -1
  444. package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
  445. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  446. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
  447. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
  448. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
  449. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  450. package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
  451. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  452. package/build/dist/Types/Monitor/MonitorStep.js +6 -1
  453. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  454. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
  455. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
  456. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
  457. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
  458. package/build/dist/Types/Permission.js +23 -155
  459. package/build/dist/Types/Permission.js.map +1 -1
  460. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
  461. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  462. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +51 -10
  463. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  464. package/build/dist/UI/Components/ErrorBoundary.js +67 -8
  465. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  466. package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
  467. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  468. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
  469. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  470. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  471. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  472. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
  473. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  474. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +193 -65
  475. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  476. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +1 -1
  477. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  478. package/build/dist/UI/Components/Navbar/NavBar.js +3 -1
  479. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  480. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +19 -7
  481. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  482. package/build/dist/UI/Utils/DownloadFile.js +15 -8
  483. package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
  484. package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
  485. package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
  486. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -8
  487. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  488. package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js +156 -0
  489. package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js.map +1 -0
  490. package/build/dist/UI/Utils/Project.js +3 -0
  491. package/build/dist/UI/Utils/Project.js.map +1 -1
  492. package/build/dist/UI/Utils/StatusPage.js +4 -4
  493. package/build/dist/UI/Utils/StatusPage.js.map +1 -1
  494. package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
  495. package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
  496. package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
  497. package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
  498. package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
  499. package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
  500. package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
  501. package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
  502. package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
  503. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  504. package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
  505. package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
  506. package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
  507. package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
  508. package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
  509. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  510. package/build/dist/Utils/TeamMembersByProject.js +145 -0
  511. package/build/dist/Utils/TeamMembersByProject.js.map +1 -0
  512. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
  513. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
  514. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
  515. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
  516. package/package.json +1 -1
@@ -7,8 +7,7 @@ import AIRunService from "../Services/AIRunService";
7
7
  import AIRunEventService from "../Services/AIRunEventService";
8
8
  import IncidentService from "../Services/IncidentService";
9
9
  import AlertService from "../Services/AlertService";
10
- import IncidentFeedService from "../Services/IncidentFeedService";
11
- import AlertFeedService from "../Services/AlertFeedService";
10
+ import PostedRootCause from "../Utils/AI/SRE/PostedRootCause";
12
11
  import Express, {
13
12
  ExpressRequest,
14
13
  ExpressResponse,
@@ -27,12 +26,6 @@ import AIAgentTaskPullRequest from "../../Models/DatabaseModels/AIAgentTaskPullR
27
26
  import AIRun from "../../Models/DatabaseModels/AIRun";
28
27
  import Incident from "../../Models/DatabaseModels/Incident";
29
28
  import Alert from "../../Models/DatabaseModels/Alert";
30
- import IncidentFeed, {
31
- IncidentFeedEventType,
32
- } from "../../Models/DatabaseModels/IncidentFeed";
33
- import AlertFeed, {
34
- AlertFeedEventType,
35
- } from "../../Models/DatabaseModels/AlertFeed";
36
29
  import AIRunEventType from "../../Types/AI/AIRunEventType";
37
30
  import AIRunType from "../../Types/AI/AIRunType";
38
31
  import FixVerificationStatus from "../../Types/AI/FixVerificationStatus";
@@ -41,7 +34,9 @@ import CodeFixTaskType, {
41
34
  CodeFixTaskTypeHelper,
42
35
  } from "../../Types/AI/CodeFixTaskType";
43
36
  import CodeFixTaskContext, {
37
+ getInvestigationCodeFixTaskSnapshot,
44
38
  ImplicatedSpan,
39
+ InvestigationCodeFixTaskSnapshot,
45
40
  PerformanceCodeLocation,
46
41
  PerformanceFinding,
47
42
  } from "../../Types/AI/CodeFixTaskContext";
@@ -62,13 +57,13 @@ import {
62
57
  LLMToolCall,
63
58
  LLMToolDefinition,
64
59
  } from "../Utils/LLM/LLMService";
65
- import SortOrder from "../../Types/BaseDatabase/SortOrder";
66
60
  import BadDataException from "../../Types/Exception/BadDataException";
67
61
  import { JSONObject } from "../../Types/JSON";
68
62
  import ObjectID from "../../Types/ObjectID";
69
63
  import GitHubUtil, {
70
64
  GitHubInstallationToken,
71
65
  } from "../Utils/CodeRepository/GitHub/GitHub";
66
+ import GitHubInstallationBinding from "../Utils/CodeRepository/GitHub/GitHubInstallationBinding";
72
67
  import CodeRepositoryType from "../../Types/CodeRepository/CodeRepositoryType";
73
68
  import URL from "../../Types/API/URL";
74
69
  import PullRequestState from "../../Types/CodeRepository/PullRequestState";
@@ -495,14 +490,12 @@ export default class AIAgentDataAPI {
495
490
  * The route name predates the newer recipes and is kept for agent
496
491
  * compatibility. Two context kinds are served:
497
492
  *
498
- * - Incident/alert-subject recipes (ImproveInstrumentation,
499
- * FixFromIncident): the investigation's posted analysis + subject
500
- * metadata + the repository resolved without a stack trace. The
501
- * analysis text comes from the subject's latest RootCause feed item:
502
- * the AI's postAnalysis is the only writer of RootCause feed
503
- * events, it writes them for BOTH subjects and BOTH confidence
504
- * outcomes (quiet mode only mutes the workspace ping), so the feed
505
- * item IS the investigation run's persisted output.
493
+ * - Incident/alert-subject recipes: subject metadata + the repository
494
+ * resolved without a stack trace. ImproveInstrumentation reads the
495
+ * subject's latest RootCause feed item. FixFromIncident instead reads
496
+ * the immutable investigation snapshot captured in AIRun.taskContext;
497
+ * a later re-investigation must never replace the Recommended analysis
498
+ * that authorized a code-fix task.
506
499
  *
507
500
  * - Trace-evidence recipes (FixPerformance): the deterministic
508
501
  * span-tree findings stored on AIRun.taskContext at trigger time
@@ -580,6 +573,10 @@ export default class AIAgentDataAPI {
580
573
  CodeFixTaskTypeHelper.fromDatabaseValue(run.codeFixTaskType);
581
574
  const contextKind: CodeFixContextKind =
582
575
  CodeFixTaskTypeHelper.getContextKind(taskType);
576
+ const investigationSnapshot: InvestigationCodeFixTaskSnapshot | null =
577
+ taskType === CodeFixTaskType.FixFromIncident
578
+ ? getInvestigationCodeFixTaskSnapshot(run.taskContext)
579
+ : null;
583
580
 
584
581
  if (
585
582
  run.runType !== AIRunType.CodeFix ||
@@ -594,6 +591,25 @@ export default class AIAgentDataAPI {
594
591
  );
595
592
  }
596
593
 
594
+ /*
595
+ * FixFromIncident authorization covered one exact Recommended
596
+ * investigation. Never substitute the subject's current RootCause:
597
+ * a re-investigation may have posted a different, non-code analysis
598
+ * while this task waited in the queue.
599
+ */
600
+ if (
601
+ taskType === CodeFixTaskType.FixFromIncident &&
602
+ !investigationSnapshot
603
+ ) {
604
+ return Response.sendErrorResponse(
605
+ req,
606
+ res,
607
+ new BadDataException(
608
+ "This fix-from-incident task has no complete pinned investigation analysis snapshot — it cannot be executed safely.",
609
+ ),
610
+ );
611
+ }
612
+
597
613
  /*
598
614
  * Service-scoped instrumentation recipes (ImproveLogging /
599
615
  * ImproveTracing): the context is just the service — resolve the
@@ -863,7 +879,8 @@ export default class AIAgentDataAPI {
863
879
  * fine when the subject has no monitor.
864
880
  */
865
881
  let serviceName: string | null = null;
866
- let analysisMarkdown: string | null = null;
882
+ let analysisMarkdown: string | null =
883
+ investigationSnapshot?.investigationAnalysisMarkdown || null;
867
884
 
868
885
  if (run.triggeredByIncidentId) {
869
886
  const incident: Incident | null = await IncidentService.findOneById(
@@ -899,24 +916,11 @@ export default class AIAgentDataAPI {
899
916
  })
900
917
  .filter(Boolean)[0] || null;
901
918
 
902
- const feedItem: IncidentFeed | null =
903
- await IncidentFeedService.findOneBy({
904
- query: {
905
- incidentId: run.triggeredByIncidentId,
906
- incidentFeedEventType: IncidentFeedEventType.RootCause,
907
- },
908
- select: {
909
- feedInfoInMarkdown: true,
910
- },
911
- sort: {
912
- createdAt: SortOrder.Descending,
913
- },
914
- props: {
915
- isRoot: true,
916
- },
917
- });
918
-
919
- analysisMarkdown = feedItem?.feedInfoInMarkdown || null;
919
+ if (taskType !== CodeFixTaskType.FixFromIncident) {
920
+ analysisMarkdown = await PostedRootCause.getForIncident(
921
+ run.triggeredByIncidentId,
922
+ );
923
+ }
920
924
  } else {
921
925
  const alert: Alert | null = await AlertService.findOneById({
922
926
  id: run.triggeredByAlertId!,
@@ -944,25 +948,11 @@ export default class AIAgentDataAPI {
944
948
  subjectTitle = alert.title || "Untitled alert";
945
949
  serviceName = alert.monitor?.name || null;
946
950
 
947
- const feedItem: AlertFeed | null = await AlertFeedService.findOneBy(
948
- {
949
- query: {
950
- alertId: run.triggeredByAlertId!,
951
- alertFeedEventType: AlertFeedEventType.RootCause,
952
- },
953
- select: {
954
- feedInfoInMarkdown: true,
955
- },
956
- sort: {
957
- createdAt: SortOrder.Descending,
958
- },
959
- props: {
960
- isRoot: true,
961
- },
962
- },
963
- );
964
-
965
- analysisMarkdown = feedItem?.feedInfoInMarkdown || null;
951
+ if (taskType !== CodeFixTaskType.FixFromIncident) {
952
+ analysisMarkdown = await PostedRootCause.getForAlert(
953
+ run.triggeredByAlertId!,
954
+ );
955
+ }
966
956
  }
967
957
 
968
958
  if (!analysisMarkdown) {
@@ -1166,6 +1156,36 @@ export default class AIAgentDataAPI {
1166
1156
  );
1167
1157
  }
1168
1158
 
1159
+ /*
1160
+ * The project check above proves the ROW is in the agent's project.
1161
+ * It does not prove the INSTALLATION is — and those are different
1162
+ * questions, because the row's installation ID is just a number
1163
+ * stored on a record. Someone who could get an arbitrary
1164
+ * installation ID onto a row in a project they own would otherwise
1165
+ * pass every check to this point and be handed a live `ghs_` token
1166
+ * for another tenant's repositories. So re-derive the binding from
1167
+ * the project itself, right before minting.
1168
+ */
1169
+ if (
1170
+ !codeRepository.projectId ||
1171
+ !(await GitHubInstallationBinding.isInstallationBoundToProject({
1172
+ projectId: codeRepository.projectId,
1173
+ installationId: codeRepository.gitHubAppInstallationId,
1174
+ }))
1175
+ ) {
1176
+ logger.error(
1177
+ `Refusing to mint a GitHub token for code repository ${codeRepositoryId.toString()}: installation ${codeRepository.gitHubAppInstallationId} is not bound to project ${codeRepository.projectId?.toString()}.`,
1178
+ );
1179
+
1180
+ return Response.sendErrorResponse(
1181
+ req,
1182
+ res,
1183
+ new BadDataException(
1184
+ "This repository's GitHub App installation is not connected to its project. Please reconnect the GitHub App from Project Settings.",
1185
+ ),
1186
+ );
1187
+ }
1188
+
1169
1189
  /*
1170
1190
  * G11 guardrail: per-repo open-PR cap, enforced HERE because the
1171
1191
  * token is the agent's only way to clone and push — a repo at its
@@ -16,6 +16,8 @@ import Query from "../../Types/BaseDatabase/Query";
16
16
  import { JSONArray, JSONObject } from "../../Types/JSON";
17
17
  import AIRunType from "../../Types/AI/AIRunType";
18
18
  import AIRunHumanVerdict from "../../Types/AI/AIRunHumanVerdict";
19
+ import AIRunStatus from "../../Types/AI/AIRunStatus";
20
+ import AIRunEventType from "../../Types/AI/AIRunEventType";
19
21
  import AIRun from "../../Models/DatabaseModels/AIRun";
20
22
  import AIRunEvent from "../../Models/DatabaseModels/AIRunEvent";
21
23
  import Incident from "../../Models/DatabaseModels/Incident";
@@ -32,6 +34,7 @@ import SpanService from "../Services/SpanService";
32
34
  import FixFromIncidentTaskTrigger from "../Utils/AI/SRE/FixFromIncidentTaskTrigger";
33
35
  import FixPerformanceTaskTrigger from "../Utils/AI/SRE/FixPerformanceTaskTrigger";
34
36
  import TelemetryImprovementTaskTrigger from "../Utils/AI/SRE/TelemetryImprovementTaskTrigger";
37
+ import PostedRootCause from "../Utils/AI/SRE/PostedRootCause";
35
38
  import CodeFixTaskType from "../../Types/AI/CodeFixTaskType";
36
39
  import { AnalyzableSpan } from "../Utils/AI/PerfEvidence/SpanTreeAnalyzer";
37
40
 
@@ -47,6 +50,100 @@ const MAX_ANALYZED_TRACE_SPANS: number = 500;
47
50
 
48
51
  const MAX_EVENTS: number = 500;
49
52
 
53
+ /*
54
+ * `aiRunId` is the established dashboard API field. The investigation panel
55
+ * introduced the more explicit `investigationRunId` name while this feature
56
+ * was in flight, so accept either spelling without ever allowing two
57
+ * different ids in one request. Both names identify the exact displayed run.
58
+ */
59
+ function getDisplayedInvestigationRunId(req: ExpressRequest): ObjectID {
60
+ const aiRunId: string =
61
+ typeof req.body["aiRunId"] === "string"
62
+ ? (req.body["aiRunId"] as string).trim()
63
+ : "";
64
+ const investigationRunId: string =
65
+ typeof req.body["investigationRunId"] === "string"
66
+ ? (req.body["investigationRunId"] as string).trim()
67
+ : "";
68
+
69
+ if (!aiRunId && !investigationRunId) {
70
+ throw new BadDataException("investigationRunId (or aiRunId) is required.");
71
+ }
72
+
73
+ if (aiRunId && investigationRunId && aiRunId !== investigationRunId) {
74
+ throw new BadDataException(
75
+ "aiRunId and investigationRunId must identify the same displayed investigation.",
76
+ );
77
+ }
78
+
79
+ const selectedRunId: string = investigationRunId || aiRunId;
80
+ ObjectID.validateUUID(selectedRunId);
81
+ return new ObjectID(selectedRunId);
82
+ }
83
+
84
+ /*
85
+ * The run wins its Running -> Completed transition before it performs the
86
+ * confidence check and posts the RootCause feed item. A final RunCompleted or
87
+ * RunFailed event is emitted when that finalization settles; failures from
88
+ * retried attempts precede a later RunStarted. This upper bound is a crash
89
+ * failsafe and deliberately leaves ample margin above the bounded confidence
90
+ * classification deadline plus feed publication.
91
+ */
92
+ export const ANALYSIS_FINALIZATION_TIMEOUT_MS: number = 10 * 60 * 1000;
93
+ // Database/application clocks can differ briefly around the Completed write.
94
+ export const ANALYSIS_COMPLETION_CLOCK_SKEW_MS: number = 60 * 1000;
95
+
96
+ export function isAnalysisPendingForRun(data: {
97
+ run: AIRun;
98
+ events: Array<AIRunEvent>;
99
+ analysisMarkdown: string | null;
100
+ currentDate?: Date | undefined;
101
+ }): boolean {
102
+ if (
103
+ data.run.status !== AIRunStatus.Completed ||
104
+ data.analysisMarkdown ||
105
+ !data.run.completedAt
106
+ ) {
107
+ return false;
108
+ }
109
+
110
+ /*
111
+ * A retried run retains RunFailed from earlier attempts. Only a settlement
112
+ * event emitted after the latest RunStarted belongs to the attempt that won
113
+ * the Completed transition; an older failure must not stop report polling.
114
+ * sendLatestInvestigation supplies events in sequence order.
115
+ */
116
+ let latestRunStartedIndex: number = -1;
117
+ data.events.forEach((event: AIRunEvent, index: number): void => {
118
+ if (event.eventType === AIRunEventType.RunStarted) {
119
+ latestRunStartedIndex = index;
120
+ }
121
+ });
122
+
123
+ const hasFinalizationEvent: boolean = data.events.some(
124
+ (event: AIRunEvent, index: number): boolean => {
125
+ return (
126
+ index > latestRunStartedIndex &&
127
+ (event.eventType === AIRunEventType.RunCompleted ||
128
+ event.eventType === AIRunEventType.RunFailed)
129
+ );
130
+ },
131
+ );
132
+
133
+ if (hasFinalizationEvent) {
134
+ return false;
135
+ }
136
+
137
+ const currentDate: Date = data.currentDate || new Date();
138
+ const millisecondsSinceCompletion: number =
139
+ currentDate.getTime() - data.run.completedAt.getTime();
140
+
141
+ return (
142
+ millisecondsSinceCompletion >= -ANALYSIS_COMPLETION_CLOCK_SKEW_MS &&
143
+ millisecondsSinceCompletion < ANALYSIS_FINALIZATION_TIMEOUT_MS
144
+ );
145
+ }
146
+
50
147
  /*
51
148
  * Returns the latest AI investigation (the AIRun + its ordered
52
149
  * AIRunEvents) for an incident or alert, so the dashboard can render a live
@@ -80,6 +177,10 @@ async function sendLatestInvestigation(
80
177
  req: ExpressRequest,
81
178
  res: ExpressResponse,
82
179
  runQuery: Query<AIRun>,
180
+ subject: {
181
+ incidentId?: ObjectID | undefined;
182
+ alertId?: ObjectID | undefined;
183
+ },
83
184
  ): Promise<void> {
84
185
  const runs: Array<AIRun> = await AIRunService.findBy({
85
186
  query: runQuery,
@@ -93,6 +194,7 @@ async function sendLatestInvestigation(
93
194
  toolCallCount: true,
94
195
  totalTokens: true,
95
196
  createdAt: true,
197
+ codeFixRecommendation: true,
96
198
  // Measurement layer: the panel renders verdict/grade state from these.
97
199
  humanVerdict: true,
98
200
  humanVerdictAt: true,
@@ -111,6 +213,8 @@ async function sendLatestInvestigation(
111
213
  Response.sendJsonObjectResponse(req, res, {
112
214
  run: null,
113
215
  events: [],
216
+ analysisMarkdown: null,
217
+ isAnalysisPending: false,
114
218
  });
115
219
  return;
116
220
  }
@@ -138,9 +242,32 @@ async function sendLatestInvestigation(
138
242
 
139
243
  const eventsJson: JSONArray = BaseModel.toJSONArray(events, AIRunEvent);
140
244
 
245
+ /*
246
+ * RootCause is the canonical persisted investigation result. The explicit
247
+ * aiRunId association is immune to application/database clock skew and to
248
+ * overlapping investigations posting out of order.
249
+ */
250
+ let analysisMarkdown: string | null = null;
251
+
252
+ if (run.status === AIRunStatus.Completed && run.completedAt) {
253
+ analysisMarkdown = await PostedRootCause.getForInvestigation({
254
+ ...subject,
255
+ aiRunId: run.id!,
256
+ runCompletedAt: run.completedAt,
257
+ });
258
+ }
259
+
260
+ const isAnalysisPending: boolean = isAnalysisPendingForRun({
261
+ run,
262
+ events,
263
+ analysisMarkdown,
264
+ });
265
+
141
266
  Response.sendJsonObjectResponse(req, res, {
142
267
  run: runJson || null,
143
268
  events: eventsJson,
269
+ analysisMarkdown,
270
+ isAnalysisPending,
144
271
  });
145
272
  }
146
273
 
@@ -178,10 +305,17 @@ router.post(
178
305
  );
179
306
  }
180
307
 
181
- await sendLatestInvestigation(req, res, {
182
- triggeredByIncidentId: incidentId,
183
- runType: AIRunType.Investigation,
184
- });
308
+ await sendLatestInvestigation(
309
+ req,
310
+ res,
311
+ {
312
+ triggeredByIncidentId: incidentId,
313
+ runType: AIRunType.Investigation,
314
+ },
315
+ {
316
+ incidentId,
317
+ },
318
+ );
185
319
  return;
186
320
  } catch (err) {
187
321
  next(err);
@@ -224,10 +358,17 @@ router.post(
224
358
  );
225
359
  }
226
360
 
227
- await sendLatestInvestigation(req, res, {
228
- triggeredByAlertId: alertId,
229
- runType: AIRunType.Investigation,
230
- });
361
+ await sendLatestInvestigation(
362
+ req,
363
+ res,
364
+ {
365
+ triggeredByAlertId: alertId,
366
+ runType: AIRunType.Investigation,
367
+ },
368
+ {
369
+ alertId,
370
+ },
371
+ );
231
372
  return;
232
373
  } catch (err) {
233
374
  next(err);
@@ -238,14 +379,16 @@ router.post(
238
379
 
239
380
  /*
240
381
  * Human verdict capture (Phase 2 measurement layer): one-click Confirm /
241
- * Reject on the investigation panel. Applies to the LATEST COMPLETED
242
- * investigation run for the subject; overwriting is allowed (a user may
382
+ * Reject on the investigation panel. Applies to the exact COMPLETED
383
+ * investigation run displayed to the user; overwriting is allowed (a user may
243
384
  * change their mind), and the request is rejected when no completed
244
385
  * investigation exists. The subject is access-checked under the USER's
245
386
  * permissions first (same idiom as the read routes above); the run itself is
246
387
  * written as root because investigation runs are system-authored.
247
388
  * Body: { subjectType: "incident" | "alert", subjectId,
248
- * verdict: "Confirmed" | "Rejected" }. Response: { runId, verdict }.
389
+ * aiRunId (or its investigationRunId alias), verdict: "Confirmed" |
390
+ * "Rejected" }. The run id binds the mutation to the analysis currently
391
+ * displayed. Response: { runId, verdict }.
249
392
  */
250
393
  router.post(
251
394
  "/ai-investigation/verdict",
@@ -278,6 +421,8 @@ router.post(
278
421
 
279
422
  const subjectId: ObjectID = new ObjectID(subjectIdString);
280
423
 
424
+ const investigationRunId: ObjectID = getDisplayedInvestigationRunId(req);
425
+
281
426
  const verdict: string | undefined = req.body["verdict"] as
282
427
  | string
283
428
  | undefined;
@@ -292,34 +437,42 @@ router.post(
292
437
  }
293
438
 
294
439
  // Access check under the USER's permissions (null when not allowed).
440
+ let projectId: ObjectID | undefined = undefined;
441
+
295
442
  if (subjectType === "incident") {
296
443
  const incident: Incident | null = await IncidentService.findOneById({
297
444
  id: subjectId,
298
- select: { _id: true },
445
+ select: { _id: true, projectId: true },
299
446
  props,
300
447
  });
301
448
 
302
- if (!incident) {
449
+ if (!incident || !incident.projectId) {
303
450
  throw new BadDataException(
304
451
  "Incident not found (or you do not have access to it).",
305
452
  );
306
453
  }
454
+
455
+ projectId = incident.projectId;
307
456
  } else {
308
457
  const alert: Alert | null = await AlertService.findOneById({
309
458
  id: subjectId,
310
- select: { _id: true },
459
+ select: { _id: true, projectId: true },
311
460
  props,
312
461
  });
313
462
 
314
- if (!alert) {
463
+ if (!alert || !alert.projectId) {
315
464
  throw new BadDataException(
316
465
  "Alert not found (or you do not have access to it).",
317
466
  );
318
467
  }
468
+
469
+ projectId = alert.projectId;
319
470
  }
320
471
 
321
472
  const result: { runId: ObjectID; verdict: AIRunHumanVerdict } =
322
- await AIRunService.applyHumanVerdictToLatestInvestigation({
473
+ await AIRunService.applyHumanVerdictToInvestigation({
474
+ aiRunId: investigationRunId,
475
+ projectId,
323
476
  ...(subjectType === "incident"
324
477
  ? { incidentId: subjectId }
325
478
  : { alertId: subjectId }),
@@ -346,7 +499,9 @@ router.post(
346
499
  * access-checked under the USER's permissions first (same idiom as the read
347
500
  * routes above); the trigger's gates (completed investigation, GitHub-App
348
501
  * repository, per-subject dedupe) fail early with a clear message.
349
- * Body: { subjectType: "incident" | "alert", subjectId }. Response:
502
+ * Body: { subjectType: "incident" | "alert", subjectId,
503
+ * aiRunId (or its investigationRunId alias) }. The run id rejects stale
504
+ * clicks instead of silently switching to a newer analysis. Response:
350
505
  * { aiRunId } — the Queued CodeFix run the agent worker will claim.
351
506
  */
352
507
  router.post(
@@ -380,6 +535,8 @@ router.post(
380
535
 
381
536
  const subjectId: ObjectID = new ObjectID(subjectIdString);
382
537
 
538
+ const investigationRunId: ObjectID = getDisplayedInvestigationRunId(req);
539
+
383
540
  // Access check under the USER's permissions (null when not allowed).
384
541
  let projectId: ObjectID | undefined = undefined;
385
542
 
@@ -419,6 +576,7 @@ router.post(
419
576
  ...(subjectType === "incident"
420
577
  ? { incidentId: subjectId }
421
578
  : { alertId: subjectId }),
579
+ investigationRunId,
422
580
  userId: props.userId!,
423
581
  });
424
582