@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
@@ -155,19 +155,32 @@ export const AI_REMEDIATION_EXECUTION_FEATURE: string =
155
155
  * (SQL `= ANY`, and an `.includes()` gate on the write path that no writer can
156
156
  * trip because no writer emits these strings any more).
157
157
  */
158
+ const LEGACY_SENTINEL_INCIDENT_INVESTIGATION_FEATURE: string =
159
+ "Sentinel Incident Investigation";
160
+ const LEGACY_SENTINEL_ALERT_INVESTIGATION_FEATURE: string =
161
+ "Sentinel Alert Investigation";
162
+ const LEGACY_SENTINEL_INVESTIGATION_GRADING_FEATURE: string =
163
+ "Sentinel Investigation Grading";
164
+ const LEGACY_SENTINEL_CONFIDENCE_CLASSIFICATION_FEATURE: string =
165
+ "Sentinel Confidence Classification";
166
+ const LEGACY_SENTINEL_CODE_FIX_FEATURE: string = "Sentinel Code Fix";
167
+ const LEGACY_SENTINEL_INSIGHT_TRIAGE_FEATURE: string =
168
+ "Sentinel Insight Triage";
169
+
158
170
  export const LEGACY_AUTONOMOUS_AI_FEATURES: Array<string> = [
159
- "Sentinel Incident Investigation",
160
- "Sentinel Alert Investigation",
161
- "Sentinel Investigation Grading",
162
- "Sentinel Confidence Classification",
163
- "Sentinel Code Fix",
164
- "Sentinel Insight Triage",
171
+ LEGACY_SENTINEL_INCIDENT_INVESTIGATION_FEATURE,
172
+ LEGACY_SENTINEL_ALERT_INVESTIGATION_FEATURE,
173
+ LEGACY_SENTINEL_INVESTIGATION_GRADING_FEATURE,
174
+ LEGACY_SENTINEL_CONFIDENCE_CLASSIFICATION_FEATURE,
175
+ LEGACY_SENTINEL_CODE_FIX_FEATURE,
176
+ LEGACY_SENTINEL_INSIGHT_TRIAGE_FEATURE,
165
177
  ];
166
178
 
167
179
  /*
168
- * Features that run WITHOUT a human in the loop. The per-project daily token
169
- * budget (Project.aiDailyAutonomousTokenLimit, G4) applies only to these
170
- * interactive chat and explicitly user-triggered AI are never budget-blocked.
180
+ * Features that run WITHOUT a human in the loop. Incident-linked and
181
+ * alert-linked calls use their respective daily token limits; subjectless
182
+ * calls use Project.aiDailyAutonomousTokenLimit. Interactive chat and
183
+ * explicitly user-triggered AI are never budget-blocked.
171
184
  * Auto-postmortem is deliberately excluded for now: it is one call per
172
185
  * resolved incident, not storm-shaped; include it when it moves to the queue.
173
186
  *
@@ -188,7 +201,7 @@ export const AUTONOMOUS_AI_FEATURES: Array<string> = [
188
201
  * user-triggered, but the tool loop then runs unattended for up to ~40
189
202
  * calls — storm-shaped enough that the daily budget must cover it. The
190
203
  * per-run loop budgets (CodeFixAgentCompletion) cap a single run; this
191
- * daily pool caps all of them together.
204
+ * daily subject lane caps all of them together.
192
205
  */
193
206
  AI_CODE_FIX_FEATURE,
194
207
  /*
@@ -215,7 +228,7 @@ export const AUTONOMOUS_AI_FEATURES: Array<string> = [
215
228
  /*
216
229
  * Auto-remediation command composition/execution
217
230
  * (RemediationExecutionRunner). Same trigger shape as planning, with a
218
- * larger per-run tool budget — the daily pool must cover it.
231
+ * larger per-run tool budget — the daily subject lane must cover it.
219
232
  */
220
233
  AI_REMEDIATION_EXECUTION_FEATURE,
221
234
  /*
@@ -226,6 +239,23 @@ export const AUTONOMOUS_AI_FEATURES: Array<string> = [
226
239
  ...LEGACY_AUTONOMOUS_AI_FEATURES,
227
240
  ];
228
241
 
242
+ /*
243
+ * Before subject-lane accounting shipped, the main investigation calls did
244
+ * not persist incidentId/alertId (or aiRunId). Their feature label is the only
245
+ * durable lane signal left on those rows. Keep these lists so a deployment
246
+ * does not reset today's incident/alert spend or charge it to background work.
247
+ */
248
+ const LEGACY_INCIDENT_LANE_FEATURES: Array<string> = [
249
+ AI_INCIDENT_INVESTIGATION_FEATURE,
250
+ AI_INVESTIGATION_GRADING_FEATURE,
251
+ LEGACY_SENTINEL_INCIDENT_INVESTIGATION_FEATURE,
252
+ LEGACY_SENTINEL_INVESTIGATION_GRADING_FEATURE,
253
+ ];
254
+ const LEGACY_ALERT_LANE_FEATURES: Array<string> = [
255
+ AI_ALERT_INVESTIGATION_FEATURE,
256
+ LEGACY_SENTINEL_ALERT_INVESTIGATION_FEATURE,
257
+ ];
258
+
229
259
  export interface AutonomousBudgetStatus {
230
260
  exhausted: boolean;
231
261
  // null when the project has no limit configured.
@@ -237,10 +267,10 @@ export interface AILogRequest {
237
267
  projectId: ObjectID;
238
268
  userId?: ObjectID | undefined;
239
269
  feature: string; // e.g., "IncidentPostmortem", "IncidentNote"
240
- incidentId?: ObjectID;
241
- alertId?: ObjectID;
242
- scheduledMaintenanceId?: ObjectID;
243
- aiRunId?: ObjectID;
270
+ incidentId?: ObjectID | undefined;
271
+ alertId?: ObjectID | undefined;
272
+ scheduledMaintenanceId?: ObjectID | undefined;
273
+ aiRunId?: ObjectID | undefined;
244
274
  /*
245
275
  * When set, use this specific provider (validated against the project) rather
246
276
  * than the project default. Powers the in-chat provider/model switcher.
@@ -337,23 +367,40 @@ export class Service extends BaseService {
337
367
  }
338
368
 
339
369
  /*
340
- * G4 daily budget: has this project consumed its daily autonomous-token
341
- * allowance (UTC day)? Counts only AUTONOMOUS_AI_FEATURES tokens, so chat
342
- * usage neither eats the autonomous budget nor is blocked by it.
370
+ * G4 daily budget: has this project consumed the selected subject lane's
371
+ * daily autonomous-token allowance (UTC day)? Counts only that lane's
372
+ * AUTONOMOUS_AI_FEATURES tokens, so chat usage neither eats the autonomous
373
+ * budget nor is blocked by it.
343
374
  */
344
375
  @CaptureSpan()
345
376
  public async getAutonomousDailyBudgetStatus(
346
377
  projectId: ObjectID,
378
+ subject?: {
379
+ incidentId?: ObjectID | undefined;
380
+ alertId?: ObjectID | undefined;
381
+ },
347
382
  ): Promise<AutonomousBudgetStatus> {
383
+ this.assertSingleSubject(subject);
384
+
348
385
  const project: Project | null = await ProjectService.findOneById({
349
386
  id: projectId,
350
- select: { aiDailyAutonomousTokenLimit: true },
387
+ select: {
388
+ aiDailyAutonomousTokenLimit: true,
389
+ incidentAiDailyAutonomousTokenLimit: true,
390
+ alertAiDailyAutonomousTokenLimit: true,
391
+ },
351
392
  props: { isRoot: true },
352
393
  });
353
394
 
354
- const limitInTokens: number | null =
395
+ let limitInTokens: number | null =
355
396
  project?.aiDailyAutonomousTokenLimit ?? null;
356
397
 
398
+ if (subject?.incidentId) {
399
+ limitInTokens = project?.incidentAiDailyAutonomousTokenLimit ?? null;
400
+ } else if (subject?.alertId) {
401
+ limitInTokens = project?.alertAiDailyAutonomousTokenLimit ?? null;
402
+ }
403
+
357
404
  if (limitInTokens === null) {
358
405
  return { exhausted: false, limitInTokens: null, usedTokensToday: 0 };
359
406
  }
@@ -374,6 +421,10 @@ export class Service extends BaseService {
374
421
  "UTC",
375
422
  ),
376
423
  features: AUTONOMOUS_AI_FEATURES,
424
+ incidentId: subject?.incidentId,
425
+ alertId: subject?.alertId,
426
+ legacyIncidentFeatures: LEGACY_INCIDENT_LANE_FEATURES,
427
+ legacyAlertFeatures: LEGACY_ALERT_LANE_FEATURES,
377
428
  },
378
429
  );
379
430
 
@@ -388,6 +439,8 @@ export class Service extends BaseService {
388
439
  public async executeWithLogging(
389
440
  request: AILogRequest,
390
441
  ): Promise<AILogResponse> {
442
+ this.assertSingleSubject(request);
443
+
391
444
  const startTime: Date = new Date();
392
445
 
393
446
  // Get LLM provider for the project (honoring an explicit per-chat choice).
@@ -503,10 +556,18 @@ export class Service extends BaseService {
503
556
  */
504
557
  if (AUTONOMOUS_AI_FEATURES.includes(request.feature)) {
505
558
  const budget: AutonomousBudgetStatus =
506
- await this.getAutonomousDailyBudgetStatus(request.projectId);
559
+ await this.getAutonomousDailyBudgetStatus(request.projectId, {
560
+ incidentId: request.incidentId,
561
+ alertId: request.alertId,
562
+ });
507
563
 
508
564
  if (budget.exhausted) {
509
- const budgetMessage: string = `Daily autonomous AI token budget exhausted (${budget.usedTokensToday.toLocaleString()} of ${budget.limitInTokens?.toLocaleString()} tokens used today). Autonomous AI requests resume tomorrow (UTC) — raise or unset the limit in the AI settings pages.`;
565
+ const settingsLocation: string = request.incidentId
566
+ ? "Incidents > Settings > AI"
567
+ : request.alertId
568
+ ? "Alerts > Settings > AI"
569
+ : "Project Settings > AI > AI Guardrails";
570
+ const budgetMessage: string = `Daily autonomous AI token budget exhausted (${budget.usedTokensToday.toLocaleString()} of ${budget.limitInTokens?.toLocaleString()} tokens used today). Autonomous AI requests resume tomorrow (UTC) — raise or unset the limit under ${settingsLocation}.`;
510
571
 
511
572
  logEntry.status = LlmLogStatus.BudgetExceeded;
512
573
  logEntry.statusMessage = budgetMessage.substring(0, 490);
@@ -658,6 +719,17 @@ export class Service extends BaseService {
658
719
  }
659
720
  }
660
721
 
722
+ private assertSingleSubject(subject?: {
723
+ incidentId?: ObjectID | undefined;
724
+ alertId?: ObjectID | undefined;
725
+ }): void {
726
+ if (subject?.incidentId && subject.alertId) {
727
+ throw new BadDataException(
728
+ "An AI request cannot belong to both an incident and an alert.",
729
+ );
730
+ }
731
+ }
732
+
661
733
  /*
662
734
  * Set gen_ai.* attributes (OpenTelemetry GenAI semantic conventions) on the
663
735
  * currently-active span. The @CaptureSpan()-wrapped caller owns that span, so
@@ -84,6 +84,7 @@ export class Service extends DatabaseService<Model> {
84
84
  displayColor?: Color | undefined;
85
85
  userId?: ObjectID | undefined;
86
86
  postedAt?: Date | undefined;
87
+ aiRunId?: ObjectID | undefined;
87
88
  workspaceNotification?:
88
89
  | {
89
90
  notifyUserId?: ObjectID | undefined; // this is oneuptime user id.
@@ -126,6 +127,10 @@ export class Service extends DatabaseService<Model> {
126
127
  alertFeed.alertFeedEventType = data.alertFeedEventType;
127
128
  alertFeed.projectId = data.projectId;
128
129
 
130
+ if (data.aiRunId) {
131
+ alertFeed.aiRunId = data.aiRunId;
132
+ }
133
+
129
134
  if (!data.postedAt) {
130
135
  alertFeed.postedAt = OneUptimeDate.getCurrentDate();
131
136
  }
@@ -34,6 +34,7 @@ import {
34
34
  TimeoutOverflowMode,
35
35
  } from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
36
36
  import {
37
+ getDistributedDdlTaskTimeoutSeconds,
37
38
  getStorageTableName,
38
39
  onClusterClause,
39
40
  } from "../Utils/AnalyticsDatabase/ClusterConfig";
@@ -137,6 +138,34 @@ export const MigrationExecuteOptions: ClickhouseExecuteOptions = {
137
138
  * migration pool's 30-minute idle ceiling.
138
139
  */
139
140
  http_headers_progress_interval_ms: "10000",
141
+ /*
142
+ * ON CLUSTER DDL is queued in Keeper and executed by each host's DDLWorker
143
+ * sequentially, so on a busy or backlogged cluster a host can be healthy
144
+ * yet not reach the task within the wait window. The server default output
145
+ * mode (`throw`) turns that into TIMEOUT_EXCEEDED (code 159) and aborts
146
+ * the whole migrate run — even though the task stays queued and the hosts
147
+ * execute it in the background (until the DDL queue evicts it:
148
+ * task_max_lifetime, one week, or falling more than max_tasks_in_queue
149
+ * entries behind). `null_status_on_timeout` returns NULL for the hosts
150
+ * that haven't finished yet instead of throwing, while a real DDL failure
151
+ * on any host that did run it within the window still throws. Safe because
152
+ * every schema statement here is idempotent (IF NOT EXISTS / OR REPLACE)
153
+ * and, with the default `distributed_ddl.pool_size = 1`, later DDL queues
154
+ * strictly behind earlier DDL on each host. Migrate.ts additionally warns
155
+ * at end of run when the DDL queue still has unfinished tasks. Note these
156
+ * options are also reused by runtime ALTER ... DELETE mutations (session
157
+ * erasure / pin materialization); timeout-as-success is acceptable there
158
+ * too since a mutation is durable once enqueued. Requires ClickHouse >=
159
+ * 21.4 (older servers reject the setting as unknown).
160
+ */
161
+ distributed_ddl_output_mode: "null_status_on_timeout",
162
+ /*
163
+ * Int64 settings are typed as strings by @clickhouse/client. Read at
164
+ * module load; env is static for the life of the process. The migration
165
+ * pool's socket-idle ceiling scales with this value (ClickhouseConfig.ts)
166
+ * so a raised wait isn't killed client-side.
167
+ */
168
+ distributed_ddl_task_timeout: String(getDistributedDdlTaskTimeoutSeconds()),
140
169
  },
141
170
  };
142
171
 
@@ -1440,6 +1469,75 @@ export default class AnalyticsDatabaseService<
1440
1469
  return { statement, columns: select.columns };
1441
1470
  }
1442
1471
 
1472
+ /**
1473
+ * Append the unique `_id` as a final sort key so the ORDER BY is a TOTAL
1474
+ * order.
1475
+ *
1476
+ * `ORDER BY time DESC` alone is not: rows tying on `time` may come back
1477
+ * in any order, and ClickHouse is free to order them differently between
1478
+ * two executions of the same query (part order, thread scheduling and
1479
+ * `optimize_read_in_order` all feed into it). Paging with LIMIT/OFFSET on
1480
+ * top of a non-total order silently drops rows at page boundaries and
1481
+ * repeats others: a row that sat at offset 49 on page 1 can shift to
1482
+ * offset 50 before page 2 is fetched, so nobody ever sees it.
1483
+ *
1484
+ * Ties are the normal case, not an edge case — a service emitting a burst
1485
+ * of logs writes many rows with an identical timestamp.
1486
+ *
1487
+ * `_id` is stamped per row with `ObjectID.generateTimeOrdered()`, so it is
1488
+ * unique and its ordering agrees with time order.
1489
+ *
1490
+ * Two cases must NOT get the tiebreaker:
1491
+ * - GROUP BY queries, where `_id` is neither a grouping key nor an
1492
+ * aggregate, so referencing it is an error.
1493
+ * - Models with no `_id` column: derived aggregate targets deliberately
1494
+ * omit it because the aggregation key is the row identity (see _findBy).
1495
+ */
1496
+ private toPaginationStableSort(
1497
+ sort: Sort<TBaseModel>,
1498
+ options: { hasGroupBy: boolean },
1499
+ ): Sort<TBaseModel> {
1500
+ if (options.hasGroupBy) {
1501
+ return sort;
1502
+ }
1503
+
1504
+ const sortKeys: Array<string> = Object.keys(sort || {});
1505
+
1506
+ // Already a total order; adding `_id` again would be a no-op term.
1507
+ if (sortKeys.includes("_id")) {
1508
+ return sort;
1509
+ }
1510
+
1511
+ const hasIdColumn: boolean = this.model.tableColumns.some(
1512
+ (column: AnalyticsTableColumn): boolean => {
1513
+ return column.key === "_id";
1514
+ },
1515
+ );
1516
+
1517
+ if (!hasIdColumn) {
1518
+ return sort;
1519
+ }
1520
+
1521
+ /*
1522
+ * Tie-break in the same direction as the last declared sort key, so a
1523
+ * newest-first list stays newest-first within a single timestamp.
1524
+ */
1525
+ const lastSortKey: string | undefined = sortKeys[sortKeys.length - 1];
1526
+
1527
+ const direction: SortOrder =
1528
+ (lastSortKey
1529
+ ? ((sort as Record<string, SortOrder | undefined>)[lastSortKey] as
1530
+ | SortOrder
1531
+ | undefined)
1532
+ : undefined) ?? SortOrder.Descending;
1533
+
1534
+ /*
1535
+ * `_id` is absent from `sort` (checked above), so spreading appends it
1536
+ * last and the caller's own keys keep their relative order.
1537
+ */
1538
+ return { ...sort, _id: direction } as Sort<TBaseModel>;
1539
+ }
1540
+
1443
1541
  public toFindStatement(findBy: FindBy<TBaseModel>): {
1444
1542
  statement: Statement;
1445
1543
  columns: Array<string>;
@@ -1470,7 +1568,9 @@ export default class AnalyticsDatabaseService<
1470
1568
  );
1471
1569
 
1472
1570
  const sortStatement: Statement = this.statementGenerator.toSortStatement(
1473
- findBy.sort!,
1571
+ this.toPaginationStableSort(findBy.sort!, {
1572
+ hasGroupBy: Boolean(groupByStatement),
1573
+ }),
1474
1574
  );
1475
1575
 
1476
1576
  const statement: Statement = SQL``;
@@ -14,6 +14,11 @@ import {
14
14
  import GitHubUtil, {
15
15
  GitHubRepository,
16
16
  } from "../Utils/CodeRepository/GitHub/GitHub";
17
+ import GitHubInstallationBinding from "../Utils/CodeRepository/GitHub/GitHubInstallationBinding";
18
+ import BadDataException from "../../Types/Exception/BadDataException";
19
+ import CreateBy from "../Types/Database/CreateBy";
20
+ import UpdateBy from "../Types/Database/UpdateBy";
21
+ import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
17
22
 
18
23
  export interface ImportReposFromInstallationResult {
19
24
  imported: number;
@@ -25,6 +30,93 @@ export class Service extends DatabaseService<Model> {
25
30
  super(Model);
26
31
  }
27
32
 
33
+ /*
34
+ * Last line of defence for the installation-to-project binding.
35
+ *
36
+ * gitHubAppInstallationId is already closed to API callers at the column
37
+ * level, but that only stops requests that go through permission checks —
38
+ * every write here is made with `props: { isRoot: true }`, which skips them
39
+ * entirely. This hook runs regardless of isRoot, so any route (including one
40
+ * added later) that writes a row carrying another tenant's installation ID
41
+ * is refused at the service boundary rather than at the token endpoint.
42
+ *
43
+ * The legitimate writer is importReposFromInstallation, which the install
44
+ * callback and the installation webhooks only ever call for a project the
45
+ * installation is already bound to — so this check passes for them.
46
+ */
47
+ @CaptureSpan()
48
+ protected override async onBeforeCreate(
49
+ createBy: CreateBy<Model>,
50
+ ): Promise<OnCreate<Model>> {
51
+ const installationId: string | undefined =
52
+ createBy.data.gitHubAppInstallationId;
53
+
54
+ if (installationId) {
55
+ const projectId: ObjectID | undefined =
56
+ createBy.data.projectId || createBy.props.tenantId;
57
+
58
+ if (!projectId) {
59
+ throw new BadDataException(
60
+ "A project is required to connect a GitHub App installation to a repository.",
61
+ );
62
+ }
63
+
64
+ await GitHubInstallationBinding.assertInstallationBoundToProject({
65
+ projectId: projectId,
66
+ installationId: installationId,
67
+ });
68
+ }
69
+
70
+ return { createBy, carryForward: null };
71
+ }
72
+
73
+ /*
74
+ * Same rule on the update path. Clearing the installation ID is always
75
+ * allowed — that is how the `installation.deleted` webhook tears a
76
+ * disconnected installation out of the database.
77
+ */
78
+ @CaptureSpan()
79
+ protected override async onBeforeUpdate(
80
+ updateBy: UpdateBy<Model>,
81
+ ): Promise<OnUpdate<Model>> {
82
+ const installationId: string | undefined = updateBy.data
83
+ .gitHubAppInstallationId as string | undefined;
84
+
85
+ if (installationId) {
86
+ /*
87
+ * updateBy matches by query rather than by id, so check every row the
88
+ * write would touch: one unbound row is enough to leak a token.
89
+ */
90
+ const repositories: Array<Model> = await this.findBy({
91
+ query: updateBy.query,
92
+ select: {
93
+ _id: true,
94
+ projectId: true,
95
+ },
96
+ limit: LIMIT_MAX,
97
+ skip: 0,
98
+ props: {
99
+ isRoot: true,
100
+ },
101
+ });
102
+
103
+ for (const repository of repositories) {
104
+ if (!repository.projectId) {
105
+ throw new BadDataException(
106
+ "A project is required to connect a GitHub App installation to a repository.",
107
+ );
108
+ }
109
+
110
+ await GitHubInstallationBinding.assertInstallationBoundToProject({
111
+ projectId: repository.projectId,
112
+ installationId: installationId,
113
+ });
114
+ }
115
+ }
116
+
117
+ return { updateBy, carryForward: null };
118
+ }
119
+
28
120
  /*
29
121
  * Imports all repositories accessible to a GitHub App installation into a
30
122
  * project. Repositories that already exist for the project (matched on
@@ -174,13 +266,24 @@ export class Service extends DatabaseService<Model> {
174
266
  },
175
267
  });
176
268
 
177
- // Only GitHub-App-connected repos can be cloned/pushed by the agent.
269
+ /*
270
+ * Only GitHub-App-connected repos can be cloned/pushed by the agent — and
271
+ * only ones whose installation this project actually owns. Resolution
272
+ * probes EVERY candidate's file tree, so an unbound row here would have
273
+ * the server read another tenant's private repository on its own
274
+ * initiative (GHSA-xx95-gmcf-7q86).
275
+ */
276
+ const boundInstallationId: string | null =
277
+ await GitHubInstallationBinding.getBoundInstallationId(data.projectId);
278
+
178
279
  const resolvable: Array<ResolvableRepository> = repositories
179
280
  .filter((repository: Model) => {
180
281
  return (
181
282
  repository.repositoryHostedAt === CodeRepositoryType.GitHub &&
182
283
  Boolean(repository.gitHubAppInstallationId) &&
183
- Boolean(repository.id)
284
+ Boolean(repository.id) &&
285
+ Boolean(boundInstallationId) &&
286
+ repository.gitHubAppInstallationId === boundInstallationId
184
287
  );
185
288
  })
186
289
  .map((repository: Model) => {