@oneuptime/common 11.5.4 → 11.5.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 (505) hide show
  1. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +56 -45
  2. package/Models/DatabaseModels/AIInsight.ts +748 -0
  3. package/Models/DatabaseModels/AIRun.ts +262 -0
  4. package/Models/DatabaseModels/CodeRepository.ts +42 -0
  5. package/Models/DatabaseModels/GlobalConfig.ts +105 -0
  6. package/Models/DatabaseModels/Index.ts +4 -8
  7. package/Models/DatabaseModels/InstanceHealthLog.ts +277 -0
  8. package/Models/DatabaseModels/LlmLog.ts +33 -0
  9. package/Models/DatabaseModels/Project.ts +123 -6
  10. package/Models/DatabaseModels/Runbook.ts +1 -1
  11. package/Server/API/AIAgentDataAPI.ts +802 -140
  12. package/Server/API/AIAgentTaskAPI.ts +132 -69
  13. package/Server/API/AIAgentTaskLogAPI.ts +65 -41
  14. package/Server/API/AIAgentTaskPullRequestAPI.ts +41 -0
  15. package/Server/API/AIInsightAPI.ts +220 -0
  16. package/Server/API/AIInvestigationAPI.ts +363 -1
  17. package/Server/API/CodeFixRunAPI.ts +251 -0
  18. package/Server/API/GitHubAPI.ts +246 -3
  19. package/Server/API/TelemetryExceptionAPI.ts +193 -48
  20. package/Server/EnvironmentConfig.ts +1 -1
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.ts +26 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.ts +73 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.ts +29 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.ts +31 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.ts +51 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.ts +25 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.ts +47 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.ts +53 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.ts +31 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.ts +37 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.ts +25 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.ts +75 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.ts +37 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.ts +203 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.ts +163 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +30 -0
  37. package/Server/Infrastructure/Queue.ts +82 -4
  38. package/Server/Infrastructure/Semaphore.ts +62 -1
  39. package/Server/Services/AIAgentService.ts +32 -0
  40. package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
  41. package/Server/Services/AIInsightService.ts +174 -0
  42. package/Server/Services/AIRunEventService.ts +63 -0
  43. package/Server/Services/AIRunService.ts +259 -1
  44. package/Server/Services/AIService.ts +249 -7
  45. package/Server/Services/AlertService.ts +4 -4
  46. package/Server/Services/CodeRepositoryService.ts +209 -0
  47. package/Server/Services/GlobalConfigService.ts +148 -0
  48. package/Server/Services/IncidentService.ts +183 -38
  49. package/Server/Services/IncidentStateTimelineService.ts +24 -4
  50. package/Server/Services/Index.ts +4 -4
  51. package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
  52. package/Server/Services/LlmLogService.ts +27 -0
  53. package/Server/Services/LlmProviderService.ts +108 -0
  54. package/Server/Services/MetricBaselineService.ts +123 -0
  55. package/Server/Services/MonitorService.ts +15 -0
  56. package/Server/Services/TelemetryExceptionService.ts +323 -116
  57. package/Server/Services/TraceAggregationService.ts +176 -0
  58. package/Server/Types/Workflow/ComponentCode.ts +6 -0
  59. package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
  60. package/Server/Types/Workflow/Components/Index.ts +2 -0
  61. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
  62. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
  63. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
  64. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
  65. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
  66. package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
  67. package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
  68. package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
  69. package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
  70. package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
  71. package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
  72. package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
  73. package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
  74. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
  75. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
  76. package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
  77. package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
  78. package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
  79. package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
  80. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
  81. package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
  82. package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
  83. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
  84. package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
  85. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
  86. package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
  87. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
  88. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
  89. package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
  90. package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
  91. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
  92. package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
  93. package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
  94. package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
  95. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
  96. package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
  97. package/Server/Utils/AI/Toolbox/Index.ts +2 -2
  98. package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
  99. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
  100. package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
  101. package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
  102. package/Server/Utils/Execute.ts +2 -1
  103. package/Server/Utils/LLM/LLMService.ts +160 -30
  104. package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
  105. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
  106. package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
  107. package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
  108. package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
  109. package/Tests/Server/Services/AIInsightService.test.ts +324 -0
  110. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
  111. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
  112. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
  113. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
  114. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
  115. package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
  116. package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
  117. package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
  118. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
  119. package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
  120. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
  121. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
  122. package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
  123. package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
  124. package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
  125. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
  126. package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
  127. package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
  128. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
  129. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
  130. package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
  131. package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
  132. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
  133. package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
  134. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
  135. package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
  136. package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
  137. package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
  138. package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
  139. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
  140. package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
  141. package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
  142. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
  143. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
  144. package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
  145. package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
  146. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
  147. package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
  148. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
  149. package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
  150. package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
  151. package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
  152. package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
  153. package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
  154. package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
  155. package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
  156. package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
  157. package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
  158. package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
  159. package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
  160. package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
  161. package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
  162. package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
  163. package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
  164. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
  165. package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
  166. package/Types/AI/AIChatTypes.ts +8 -0
  167. package/Types/AI/AIInsightEvidence.ts +77 -0
  168. package/Types/AI/AIInsightHumanVerdict.ts +15 -0
  169. package/Types/AI/AIInsightSeverity.ts +13 -0
  170. package/Types/AI/AIInsightStatus.ts +38 -0
  171. package/Types/AI/AIInsightType.ts +41 -0
  172. package/Types/AI/AIRunAutoGrade.ts +18 -0
  173. package/Types/AI/AIRunEventType.ts +5 -0
  174. package/Types/AI/AIRunHumanVerdict.ts +17 -0
  175. package/Types/AI/AIRunType.ts +6 -0
  176. package/Types/AI/CodeFixTaskContext.ts +88 -0
  177. package/Types/AI/CodeFixTaskType.ts +132 -0
  178. package/Types/AI/FixPullRequestCiStatus.ts +132 -0
  179. package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
  180. package/Types/Incident/IncidentMetricType.ts +7 -0
  181. package/Types/Monitor/CriteriaFilter.ts +8 -0
  182. package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
  183. package/Types/Monitor/MonitorStep.ts +38 -0
  184. package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
  185. package/Types/Monitor/MonitorType.ts +17 -0
  186. package/Types/Monitor/SqlDatabaseType.ts +49 -0
  187. package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
  188. package/Types/Permission.ts +11 -95
  189. package/Types/Probe/ProbeMonitorResponse.ts +2 -0
  190. package/Types/Runbook/RunbookStep.ts +26 -2
  191. package/Types/Runbook/RunbookStepType.ts +1 -0
  192. package/Types/Workflow/Component.ts +13 -0
  193. package/Types/Workflow/ComponentID.ts +1 -0
  194. package/Types/Workflow/Components/AI.ts +148 -0
  195. package/Types/Workflow/Components.ts +8 -0
  196. package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
  197. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
  198. package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
  199. package/UI/Components/Table/Table.tsx +38 -2
  200. package/UI/Utils/TableColumnsToCsv.ts +385 -0
  201. package/Utils/Monitor/MonitorMetricType.ts +1 -0
  202. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
  203. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  204. package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
  205. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
  206. package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
  207. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  208. package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
  209. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  210. package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
  211. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  212. package/build/dist/Models/DatabaseModels/Index.js +4 -8
  213. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  214. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
  215. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
  216. package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
  217. package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
  218. package/build/dist/Models/DatabaseModels/Project.js +127 -6
  219. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  220. package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
  221. package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
  222. package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
  223. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  224. package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
  225. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  226. package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
  227. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  228. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
  229. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
  230. package/build/dist/Server/API/AIInsightAPI.js +140 -0
  231. package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
  232. package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
  233. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  234. package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
  235. package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
  236. package/build/dist/Server/API/GitHubAPI.js +164 -2
  237. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  238. package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
  239. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  240. package/build/dist/Server/EnvironmentConfig.js +1 -1
  241. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  242. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
  243. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
  244. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
  245. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
  246. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
  247. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
  248. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
  249. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
  250. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
  251. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
  252. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
  253. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
  254. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
  255. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
  256. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
  257. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
  258. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
  259. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
  260. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
  261. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
  262. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
  263. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
  264. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
  265. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
  266. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
  267. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
  268. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
  269. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
  270. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
  271. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
  272. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +30 -0
  273. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  274. package/build/dist/Server/Infrastructure/Queue.js +73 -3
  275. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  276. package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
  277. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  278. package/build/dist/Server/Services/AIAgentService.js +29 -0
  279. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  280. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
  281. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
  282. package/build/dist/Server/Services/AIInsightService.js +164 -0
  283. package/build/dist/Server/Services/AIInsightService.js.map +1 -0
  284. package/build/dist/Server/Services/AIRunEventService.js +49 -0
  285. package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
  286. package/build/dist/Server/Services/AIRunService.js +221 -0
  287. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  288. package/build/dist/Server/Services/AIService.js +198 -11
  289. package/build/dist/Server/Services/AIService.js.map +1 -1
  290. package/build/dist/Server/Services/AlertService.js +4 -4
  291. package/build/dist/Server/Services/AlertService.js.map +1 -1
  292. package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
  293. package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
  294. package/build/dist/Server/Services/GlobalConfigService.js +84 -0
  295. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  296. package/build/dist/Server/Services/IncidentService.js +149 -37
  297. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  298. package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
  299. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  300. package/build/dist/Server/Services/Index.js +4 -4
  301. package/build/dist/Server/Services/Index.js.map +1 -1
  302. package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
  303. package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
  304. package/build/dist/Server/Services/LlmLogService.js +23 -0
  305. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  306. package/build/dist/Server/Services/LlmProviderService.js +96 -0
  307. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  308. package/build/dist/Server/Services/MetricBaselineService.js +65 -0
  309. package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
  310. package/build/dist/Server/Services/MonitorService.js +9 -1
  311. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  312. package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
  313. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  314. package/build/dist/Server/Services/TraceAggregationService.js +124 -0
  315. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  316. package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
  317. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
  318. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
  319. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  320. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  321. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
  322. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
  323. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
  324. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
  325. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
  326. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
  327. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
  328. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
  329. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
  330. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
  331. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
  332. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
  333. package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
  334. package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
  335. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
  336. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
  337. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
  338. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
  339. package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
  340. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
  341. package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
  342. package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
  343. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
  344. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
  345. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
  346. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
  347. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
  348. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
  349. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
  350. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
  351. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
  352. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
  353. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
  354. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
  355. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
  356. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
  357. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
  358. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
  359. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
  360. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
  361. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
  362. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
  363. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
  364. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
  365. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
  366. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
  367. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
  368. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
  369. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
  370. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
  371. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
  372. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
  373. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
  374. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
  375. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
  376. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
  377. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
  378. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
  379. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
  380. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
  381. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
  382. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
  383. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
  384. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
  385. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
  386. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
  387. package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
  388. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
  389. package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
  390. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  391. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
  392. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
  393. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
  394. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  395. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
  396. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
  397. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
  398. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
  399. package/build/dist/Server/Utils/Execute.js.map +1 -1
  400. package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
  401. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  402. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
  403. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
  404. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
  405. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  406. package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
  407. package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
  408. package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
  409. package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
  410. package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
  411. package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
  412. package/build/dist/Types/AI/AIInsightStatus.js +36 -0
  413. package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
  414. package/build/dist/Types/AI/AIInsightType.js +42 -0
  415. package/build/dist/Types/AI/AIInsightType.js.map +1 -0
  416. package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
  417. package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
  418. package/build/dist/Types/AI/AIRunEventType.js +5 -0
  419. package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
  420. package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
  421. package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
  422. package/build/dist/Types/AI/AIRunType.js +6 -0
  423. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  424. package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
  425. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
  426. package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
  427. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
  428. package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
  429. package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
  430. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
  431. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
  432. package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
  433. package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
  434. package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
  435. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  436. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
  437. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  438. package/build/dist/Types/Monitor/MonitorStep.js +28 -0
  439. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  440. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
  441. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
  442. package/build/dist/Types/Monitor/MonitorType.js +15 -0
  443. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  444. package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
  445. package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
  446. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
  447. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
  448. package/build/dist/Types/Permission.js +10 -84
  449. package/build/dist/Types/Permission.js.map +1 -1
  450. package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
  451. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  452. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  453. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  454. package/build/dist/Types/Workflow/Components/AI.js +135 -0
  455. package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
  456. package/build/dist/Types/Workflow/Components.js +7 -0
  457. package/build/dist/Types/Workflow/Components.js.map +1 -1
  458. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
  459. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  460. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
  461. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  462. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
  463. package/build/dist/UI/Components/Table/Table.js +28 -2
  464. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  465. package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
  466. package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
  467. package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
  468. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  469. package/package.json +1 -1
  470. package/Models/DatabaseModels/AIAgentTask.ts +0 -660
  471. package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
  472. package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
  473. package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
  474. package/Server/Services/AIAgentTaskService.ts +0 -240
  475. package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
  476. package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
  477. package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
  478. package/Types/AI/AIAgentTaskMetadata.ts +0 -25
  479. package/Types/AI/AIAgentTaskType.ts +0 -40
  480. package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
  481. package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
  482. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
  483. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
  484. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
  485. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
  486. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
  487. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
  488. package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
  489. package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
  490. package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
  491. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
  492. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
  493. package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
  494. package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
  495. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
  496. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
  497. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
  498. package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
  499. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
  500. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
  501. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
  502. package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
  503. package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
  504. package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
  505. package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
@@ -13,24 +13,28 @@ import { IncidentFeedEventType } from "../../../../Models/DatabaseModels/Inciden
13
13
  import IncidentInternalNote from "../../../../Models/DatabaseModels/IncidentInternalNote";
14
14
  import IncidentFeedService from "../../../Services/IncidentFeedService";
15
15
  import IncidentInternalNoteService from "../../../Services/IncidentInternalNoteService";
16
+ import IncidentService from "../../../Services/IncidentService";
16
17
  import IncidentAIContextBuilder from "../IncidentAIContextBuilder";
17
- import SentinelInvestigationEngine from "./SentinelInvestigationEngine";
18
- import SentinelInvestigationQueue from "./InvestigationQueue";
19
- import SentinelMemory from "./SentinelMemory";
18
+ import { AI_INCIDENT_INVESTIGATION_FEATURE } from "../../../Services/AIService";
19
+ import AIInvestigationEngine from "./AIInvestigationEngine";
20
+ import AIInvestigationQueue from "./InvestigationQueue";
21
+ import AIConfidenceSignal from "./ConfidenceSignal";
22
+ import AIMemory from "./AIMemory";
23
+ import InstrumentationTaskTrigger from "./InstrumentationTaskTrigger";
20
24
  import logger from "../../Logger";
21
25
  import CaptureSpan from "../../Telemetry/CaptureSpan";
22
26
  /*
23
- * Sentinel — incident investigation.
27
+ * AI SRE — incident investigation.
24
28
  *
25
- * When a new incident is declared, wakes Sentinel to investigate it (read-only)
29
+ * When a new incident is declared, wakes AI to investigate it (read-only)
26
30
  * and post a cited root-cause analysis into the incident timeline + Slack/Teams
27
31
  * — before the on-call engineer has finished reading the page. The trigger only
28
- * records durable intent (a Queued AIRun via SentinelInvestigationQueue), so a
32
+ * records durable intent (a Queued AIRun via AIInvestigationQueue), so a
29
33
  * pod restart can no longer orphan an investigation; the heavy lifting (run
30
34
  * lifecycle, the agent loop, confidence gating) lives in the shared
31
- * SentinelInvestigationEngine. See Internal/Roadmap/AISentinelExecution.md.
35
+ * AIInvestigationEngine. See Internal/Roadmap/AISentinelExecution.md.
32
36
  */
33
- export default class SentinelIncidentInvestigationRunner {
37
+ export default class AIIncidentInvestigationRunner {
34
38
  /*
35
39
  * Entry point called (fire-and-forget) from IncidentService.onCreateSuccess.
36
40
  * Cheap: gates + a Queued AIRun row; execution happens via the queue.
@@ -39,21 +43,21 @@ export default class SentinelIncidentInvestigationRunner {
39
43
  static async investigateNewIncident(data) {
40
44
  const { incidentId, projectId } = data;
41
45
  try {
42
- if (!(await SentinelInvestigationEngine.isEnabledForProject(projectId, "Incident"))) {
46
+ if (!(await AIInvestigationEngine.isEnabledForProject(projectId, "Incident"))) {
43
47
  return;
44
48
  }
45
- await SentinelInvestigationQueue.enqueue({
49
+ await AIInvestigationQueue.enqueue({
46
50
  projectId,
47
51
  subjectIncidentId: incidentId,
48
52
  });
49
53
  }
50
54
  catch (error) {
51
- logger.error(`Sentinel: unexpected error enqueueing investigation for incident ${incidentId.toString()}: ${error}`);
55
+ logger.error(`AI: unexpected error enqueueing investigation for incident ${incidentId.toString()}: ${error}`);
52
56
  }
53
57
  }
54
58
  /*
55
59
  * Execute a claimed run: assemble incident context and hand it to the
56
- * engine. Called by SentinelInvestigationQueue after a successful claim.
60
+ * engine. Called by AIInvestigationQueue after a successful claim.
57
61
  * Never throws — failures are handed to the queue's retry policy so a
58
62
  * claimed run is always finalized or requeued.
59
63
  */
@@ -67,10 +71,10 @@ export default class SentinelIncidentInvestigationRunner {
67
71
  });
68
72
  /*
69
73
  * Recurrence memory: pull in past resolved incidents that share this
70
- * incident's monitors/labels so Sentinel can recognise "I've seen this
74
+ * incident's monitors/labels so AI can recognise "I've seen this
71
75
  * before" and reference the prior fix.
72
76
  */
73
- const priorCasesContext = await SentinelMemory.getPriorSimilarIncidentsContext({
77
+ const priorCasesContext = await AIMemory.getPriorSimilarIncidentsContext({
74
78
  projectId,
75
79
  currentIncidentId: incidentId,
76
80
  monitorNames: (contextData.incident.monitors || [])
@@ -92,7 +96,7 @@ export default class SentinelIncidentInvestigationRunner {
92
96
  * Context assembly failed — the run is claimed, so hand it to the
93
97
  * retry policy rather than leaving it Running until the sweeper.
94
98
  */
95
- await SentinelInvestigationQueue.failOrRequeue({
99
+ await AIInvestigationQueue.failOrRequeue({
96
100
  aiRunId,
97
101
  attemptCount,
98
102
  errorMessage: `Failed to build incident context: ${error instanceof Error ? error.message : String(error)}`,
@@ -100,12 +104,13 @@ export default class SentinelIncidentInvestigationRunner {
100
104
  });
101
105
  return;
102
106
  }
103
- await SentinelInvestigationEngine.executeRun({
107
+ await AIInvestigationEngine.executeRun({
104
108
  aiRunId,
105
109
  projectId,
106
110
  attemptCount,
107
111
  request: {
108
- feature: "Sentinel Incident Investigation",
112
+ // Persisted LlmLog label — owned by AIService (G4 budget list).
113
+ feature: AI_INCIDENT_INVESTIGATION_FEATURE,
109
114
  contextSummary,
110
115
  postAnalysis: async (postData) => {
111
116
  await IncidentFeedService.createIncidentFeedItem({
@@ -116,10 +121,12 @@ export default class SentinelIncidentInvestigationRunner {
116
121
  feedInfoInMarkdown: postData.analysisMarkdown,
117
122
  /*
118
123
  * Quiet mode: an inconclusive investigation posts to the timeline
119
- * but does NOT loudly ping the workspace / on-call.
124
+ * but does NOT loudly ping the workspace / on-call. Fail
125
+ * direction (G6): when the confidence classification itself
126
+ * failed, the ping SENDS — quiet mode fails louder, not silent.
120
127
  */
121
128
  workspaceNotification: {
122
- sendWorkspaceNotification: postData.isConfident,
129
+ sendWorkspaceNotification: AIConfidenceSignal.shouldSendWorkspaceNotification(postData.confidence),
123
130
  },
124
131
  });
125
132
  /*
@@ -145,7 +152,38 @@ export default class SentinelIncidentInvestigationRunner {
145
152
  });
146
153
  }
147
154
  catch (error) {
148
- logger.error(`Sentinel: failed to post RCA internal note for incident ${incidentId.toString()}: ${error}`);
155
+ logger.error(`AI: failed to post RCA internal note for incident ${incidentId.toString()}: ${error}`);
156
+ }
157
+ /*
158
+ * Measurement layer: record the time-to-rca metric (seconds from
159
+ * incident creation to this analysis post, with the same base
160
+ * attribute shape as every other incident metric). Best-effort —
161
+ * metrics must never break the RCA post.
162
+ */
163
+ try {
164
+ await IncidentService.recordTimeToRootCausePostedMetric({
165
+ incidentId,
166
+ });
167
+ }
168
+ catch (error) {
169
+ logger.error(`AI: failed to record time-to-rca metric for incident ${incidentId.toString()}: ${error}`);
170
+ }
171
+ /*
172
+ * Inconclusive means the telemetry was insufficient — for
173
+ * opted-in projects (Project.enableInstrumentationFixTasks,
174
+ * default false), queue an ImproveInstrumentation fix task that
175
+ * opens a PR adding the missing observability. Runs strictly
176
+ * AFTER the analysis is posted, and the trigger never throws, so
177
+ * the investigation can neither be blocked nor failed by it.
178
+ * Fail direction (G6): only a POSITIVE inconclusive verdict
179
+ * (deterministic floor or classification) enqueues — a failed
180
+ * classification does NOT create a PR.
181
+ */
182
+ if (AIConfidenceSignal.shouldEnqueueInstrumentationTask(postData.confidence)) {
183
+ await InstrumentationTaskTrigger.enqueueForInconclusiveInvestigation({
184
+ projectId,
185
+ incidentId,
186
+ });
149
187
  }
150
188
  },
151
189
  },
@@ -204,11 +242,11 @@ __decorate([
204
242
  __metadata("design:type", Function),
205
243
  __metadata("design:paramtypes", [Object]),
206
244
  __metadata("design:returntype", Promise)
207
- ], SentinelIncidentInvestigationRunner, "investigateNewIncident", null);
245
+ ], AIIncidentInvestigationRunner, "investigateNewIncident", null);
208
246
  __decorate([
209
247
  CaptureSpan(),
210
248
  __metadata("design:type", Function),
211
249
  __metadata("design:paramtypes", [Object]),
212
250
  __metadata("design:returntype", Promise)
213
- ], SentinelIncidentInvestigationRunner, "executeInvestigation", null);
251
+ ], AIIncidentInvestigationRunner, "executeInvestigation", null);
214
252
  //# sourceMappingURL=IncidentInvestigationRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncidentInvestigationRunner.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/SRE/IncidentInvestigationRunner.ts"],"names":[],"mappings":"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"}
@@ -11,13 +11,13 @@ import { Blue500 } from "../../../../Types/BrandColors";
11
11
  import { IncidentFeedEventType } from "../../../../Models/DatabaseModels/IncidentFeed";
12
12
  import IncidentService from "../../../Services/IncidentService";
13
13
  import IncidentFeedService from "../../../Services/IncidentFeedService";
14
- import SentinelInvestigationEngine from "./SentinelInvestigationEngine";
14
+ import AIInvestigationEngine from "./AIInvestigationEngine";
15
15
  import logger from "../../Logger";
16
16
  import CaptureSpan from "../../Telemetry/CaptureSpan";
17
17
  /*
18
- * Sentinel — auto-draft postmortem on resolve (Phase 3, "close the loop").
18
+ * AI SRE — auto-draft postmortem on resolve (Phase 3, "close the loop").
19
19
  *
20
- * When an incident moves to a resolved state, Sentinel drafts a postmortem from
20
+ * When an incident moves to a resolved state, AI drafts a postmortem from
21
21
  * the incident timeline + telemetry (reusing the existing
22
22
  * IncidentService.generatePostmortemFromAI) and saves it to the incident for a
23
23
  * human to review and edit — turning a ~90-minute manual writeup into a review.
@@ -27,11 +27,11 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
27
27
  * fire-and-forget: failures are logged, never surfaced to the resolve flow.
28
28
  */
29
29
  const MAX_FEED_PREVIEW_CHARS = 6000;
30
- export default class SentinelIncidentPostmortemRunner {
30
+ export default class AIIncidentPostmortemRunner {
31
31
  static async draftPostmortemOnResolve(data) {
32
32
  const { incidentId, projectId } = data;
33
33
  try {
34
- if (!(await SentinelInvestigationEngine.isEnabledForProject(projectId, "Incident"))) {
34
+ if (!(await AIInvestigationEngine.isEnabledForProject(projectId, "Incident"))) {
35
35
  return;
36
36
  }
37
37
  const incident = await IncidentService.findOneById({
@@ -69,7 +69,7 @@ export default class SentinelIncidentPostmortemRunner {
69
69
  projectId,
70
70
  incidentFeedEventType: IncidentFeedEventType.PostmortemNote,
71
71
  displayColor: Blue500,
72
- feedInfoInMarkdown: `## 🧠 Sentinel — Draft Postmortem\n\nSentinel drafted a postmortem for incident #${incident.incidentNumber} from the incident timeline and telemetry. It has been saved on the incident for you to review and edit.`,
72
+ feedInfoInMarkdown: `## 🧠 AI — Draft Postmortem\n\nOneUptime AI drafted a postmortem for incident #${incident.incidentNumber} from the incident timeline and telemetry. It has been saved on the incident for you to review and edit.`,
73
73
  moreInformationInMarkdown: draft.length > MAX_FEED_PREVIEW_CHARS
74
74
  ? `${draft.substring(0, MAX_FEED_PREVIEW_CHARS)}\n\n…(truncated — the full draft is saved on the incident.)`
75
75
  : draft,
@@ -77,10 +77,10 @@ export default class SentinelIncidentPostmortemRunner {
77
77
  sendWorkspaceNotification: true,
78
78
  },
79
79
  });
80
- logger.debug(`Sentinel: drafted postmortem for incident ${incidentId.toString()}.`);
80
+ logger.debug(`AI: drafted postmortem for incident ${incidentId.toString()}.`);
81
81
  }
82
82
  catch (error) {
83
- logger.error(`Sentinel: failed to draft postmortem for incident ${incidentId.toString()}: ${error}`);
83
+ logger.error(`AI: failed to draft postmortem for incident ${incidentId.toString()}: ${error}`);
84
84
  }
85
85
  }
86
86
  }
@@ -89,5 +89,5 @@ __decorate([
89
89
  __metadata("design:type", Function),
90
90
  __metadata("design:paramtypes", [Object]),
91
91
  __metadata("design:returntype", Promise)
92
- ], SentinelIncidentPostmortemRunner, "draftPostmortemOnResolve", null);
92
+ ], AIIncidentPostmortemRunner, "draftPostmortemOnResolve", null);
93
93
  //# sourceMappingURL=IncidentPostmortemRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncidentPostmortemRunner.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/SRE/IncidentPostmortemRunner.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,eAAe,MAAM,mCAAmC,CAAC;AAChE,OAAO,mBAAmB,MAAM,uCAAuC,CAAC;AACxE,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,WAAW,MAAM,6BAA6B,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,MAAM,sBAAsB,GAAW,IAAI,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAEzB,AAAb,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAG5C;QACC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEvC,IAAI,CAAC;YACH,IACE,CAAC,CAAC,MAAM,qBAAqB,CAAC,mBAAmB,CAC/C,SAAS,EACT,UAAU,CACX,CAAC,EACF,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAoB,MAAM,eAAe,CAAC,WAAW,CAAC;gBAClE,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE;oBACN,GAAG,EAAE,IAAI;oBACT,cAAc,EAAE,IAAI;oBACpB,cAAc,EAAE,IAAI;iBACrB;gBACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,sEAAsE;YACtE,IACE,QAAQ,CAAC,cAAc;gBACvB,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EACzC,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAW,MAAM,eAAe,CAAC,wBAAwB,CAAC;gBACnE,UAAU;aACX,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,eAAe,CAAC,aAAa,CAAC;gBAClC,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE;oBACJ,cAAc,EAAE,KAAK;iBACtB;gBACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aACxB,CAAC,CAAC;YAEH,MAAM,mBAAmB,CAAC,sBAAsB,CAAC;gBAC/C,UAAU;gBACV,SAAS;gBACT,qBAAqB,EAAE,qBAAqB,CAAC,cAAc;gBAC3D,YAAY,EAAE,OAAO;gBACrB,kBAAkB,EAAE,kFAAkF,QAAQ,CAAC,cAAc,0GAA0G;gBACvO,yBAAyB,EACvB,KAAK,CAAC,MAAM,GAAG,sBAAsB;oBACnC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,sBAAsB,CAAC,6DAA6D;oBAC5G,CAAC,CAAC,KAAK;gBACX,qBAAqB,EAAE;oBACrB,yBAAyB,EAAE,IAAI;iBAChC;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CACV,uCAAuC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAChE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,+CAA+C,UAAU,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA9EqB;IADnB,WAAW,EAAE;;;;gEA8Eb"}
@@ -0,0 +1,268 @@
1
+ import ObjectID from "../../../../../../Types/ObjectID";
2
+ import OneUptimeDate from "../../../../../../Types/Date";
3
+ import AIInsightType from "../../../../../../Types/AI/AIInsightType";
4
+ import AIInsightSeverity from "../../../../../../Types/AI/AIInsightSeverity";
5
+ import LogAggregationService from "../../../../../Services/LogAggregationService";
6
+ import ServiceService from "../../../../../Services/ServiceService";
7
+ /*
8
+ * ErrorLogSpike — the project's Error/Fatal log volume in the last hour
9
+ * spiked well above its own average hourly rate over the prior 24 hours.
10
+ *
11
+ * Two-stage on purpose (cost): stage 1 is ONE project-wide severity
12
+ * histogram, which ClickHouse serves from the proj_severity_histogram
13
+ * projection because severityText and the minute bucket are the
14
+ * projection's own keys. Only when stage 1 finds a spike does stage 2 run
15
+ * the service-attribution query — a top-list grouped by primaryEntityId,
16
+ * which falls back to a base-table scan but is bounded to the single spike
17
+ * hour. Deterministic — no LLM anywhere in this detector.
18
+ */
19
+ // The spike window, compared against the prior baseline window.
20
+ export const ERROR_LOG_SPIKE_RECENT_WINDOW_MINUTES = 60;
21
+ /*
22
+ * Baseline: the 24 hours before the spike window, averaged per hour.
23
+ * Self-baselining means chronically chatty projects don't alert on their
24
+ * normal error volume.
25
+ */
26
+ export const ERROR_LOG_SPIKE_BASELINE_WINDOW_HOURS = 24;
27
+ /*
28
+ * Absolute floor: below 100 errors/hour a "3x spike" can be 20→100 raw
29
+ * lines — routine flakiness, not an event worth a human's attention.
30
+ */
31
+ export const ERROR_LOG_SPIKE_MIN_RECENT_COUNT = 100;
32
+ /*
33
+ * Volume multiplier that counts as a spike. The baseline hourly average is
34
+ * floored at 1 (see evaluateSpike) so a silent project's first errors
35
+ * still register without producing infinite multipliers.
36
+ */
37
+ export const ERROR_LOG_SPIKE_MIN_MULTIPLIER = 3;
38
+ // A >= 10x spike is a step change, not a fluctuation — escalate to High.
39
+ export const ERROR_LOG_SPIKE_HIGH_SEVERITY_MULTIPLIER = 10;
40
+ /*
41
+ * Histogram bucket size. The projection is minute-grained, so any bucket
42
+ * size is projection-served; 5 minutes keeps the recent/prior split error
43
+ * bounded to one bucket (< 5 min of data) while returning only ~300 rows
44
+ * for the whole 25h window.
45
+ */
46
+ export const ERROR_LOG_SPIKE_HISTOGRAM_BUCKET_MINUTES = 5;
47
+ /*
48
+ * At most this many per-service insights per spike. More than 3 services
49
+ * spiking together is one platform event, not N service events — the
50
+ * project-wide evidence block carries the full attribution list anyway.
51
+ */
52
+ export const ERROR_LOG_SPIKE_MAX_ATTRIBUTED_SERVICES = 3;
53
+ // Severity levels that count as "errors" for this detector (OTel names).
54
+ export const ERROR_LOG_SEVERITIES = ["Error", "Fatal"];
55
+ /*
56
+ * A ClickHouse DateTime rendered with no zone designator: "YYYY-MM-DD
57
+ * hh:mm:ss" (the shape LogAggregationService.getHistogram reads out of the
58
+ * `bucket` column), optionally "T"-separated and/or fractional. Anchored on
59
+ * purpose — any string carrying a zone (…Z, …+05:30) must NOT match, because
60
+ * parseBucketTime appends a Z to whatever matches and a double-designator
61
+ * string parses to an Invalid Date (which splitHistogram would then skip,
62
+ * zeroing the bucket).
63
+ */
64
+ const ZONE_LESS_DATETIME_REGEX = /^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(\.\d+)?$/;
65
+ export default class ErrorLogSpikeDetector {
66
+ constructor() {
67
+ this.insightType = AIInsightType.ErrorLogSpike;
68
+ }
69
+ /*
70
+ * ClickHouse serves DateTime columns as a zone-less wall clock in the
71
+ * column's own zone — UTC in every OneUptime deployment. `new Date()` reads
72
+ * that shape as the PROCESS's LOCAL time, so on a worker whose TZ is not UTC
73
+ * every bucket silently slides by the UTC offset and the recent/prior
74
+ * boundary below lands in the wrong place: positive offsets push the spike's
75
+ * buckets into the baseline (suppressing every spike while inflating the
76
+ * average it is compared against), negative offsets drag hours of baseline
77
+ * into the "last 60 minutes" (fabricating spikes whose counts cannot even
78
+ * reconcile with stage 2, which binds real Date params and queries the true
79
+ * hour). Normalizing to an explicit UTC instant makes the split depend only
80
+ * on the data, never on the worker's clock configuration.
81
+ *
82
+ * Zone-carrying strings are parsed verbatim — see ZONE_LESS_DATETIME_REGEX.
83
+ * Anything else stays an Invalid Date so splitHistogram's isNaN guard still
84
+ * skips it. Same idiom as the dashboard's EdgeDetailPanel.parseBucketStart.
85
+ */
86
+ static parseBucketTime(time) {
87
+ const trimmedTime = time.trim();
88
+ if (ZONE_LESS_DATETIME_REGEX.test(trimmedTime)) {
89
+ return new Date(`${trimmedTime.replace(" ", "T")}Z`);
90
+ }
91
+ return new Date(trimmedTime);
92
+ }
93
+ /*
94
+ * Pure split of one histogram into the recent window and the prior
95
+ * baseline window. A bucket belongs to "recent" when it STARTS at or
96
+ * after the boundary; the boundary-straddling bucket therefore counts as
97
+ * prior — a deliberate conservative bias (understates the spike by at
98
+ * most one bucket of data rather than inflating it).
99
+ */
100
+ static splitHistogram(buckets, recentWindowStart) {
101
+ let recentCount = 0;
102
+ let priorCount = 0;
103
+ for (const bucket of buckets) {
104
+ const bucketTime = ErrorLogSpikeDetector.parseBucketTime(bucket.time);
105
+ if (isNaN(bucketTime.getTime())) {
106
+ continue;
107
+ }
108
+ if (bucketTime.getTime() >= recentWindowStart.getTime()) {
109
+ recentCount += bucket.count;
110
+ }
111
+ else {
112
+ priorCount += bucket.count;
113
+ }
114
+ }
115
+ return { recentCount, priorCount };
116
+ }
117
+ /*
118
+ * Pure decision: recent-hour error count vs the prior 24h window count.
119
+ * Spike ⇔ recent >= ERROR_LOG_SPIKE_MIN_RECENT_COUNT AND
120
+ * recent >= ERROR_LOG_SPIKE_MIN_MULTIPLIER * max(prior/24, 1).
121
+ */
122
+ static evaluateSpike(recentCount, priorWindowCount) {
123
+ const baselineHourlyAverage = priorWindowCount / ERROR_LOG_SPIKE_BASELINE_WINDOW_HOURS;
124
+ const effectiveBaseline = Math.max(baselineHourlyAverage, 1);
125
+ const multiplier = recentCount / effectiveBaseline;
126
+ const isSpike = recentCount >= ERROR_LOG_SPIKE_MIN_RECENT_COUNT &&
127
+ multiplier >= ERROR_LOG_SPIKE_MIN_MULTIPLIER;
128
+ return {
129
+ isSpike,
130
+ multiplier,
131
+ severity: multiplier >= ERROR_LOG_SPIKE_HIGH_SEVERITY_MULTIPLIER
132
+ ? AIInsightSeverity.High
133
+ : AIInsightSeverity.Medium,
134
+ recentCount,
135
+ baselineHourlyAverage,
136
+ };
137
+ }
138
+ /*
139
+ * Stable dedupe key: per attributed service, or "project" for the
140
+ * unattributed project-wide spike.
141
+ */
142
+ static buildFingerprint(serviceId) {
143
+ return `error-log-spike:${serviceId || "project"}`;
144
+ }
145
+ async detect(context) {
146
+ const recentWindowStart = OneUptimeDate.addRemoveMinutes(context.now, -1 * ERROR_LOG_SPIKE_RECENT_WINDOW_MINUTES);
147
+ const baselineWindowStart = OneUptimeDate.addRemoveHours(recentWindowStart, -1 * ERROR_LOG_SPIKE_BASELINE_WINDOW_HOURS);
148
+ /*
149
+ * Stage 1 — projection-fast project-wide severity histogram over the
150
+ * whole 25h (baseline + spike) range. severityTexts stays on the
151
+ * projection; adding any service/entity filter here would silently
152
+ * force a base-table scan (LogAggregationService.appendCommonFilters).
153
+ */
154
+ const buckets = await LogAggregationService.getHistogram({
155
+ projectId: context.projectId,
156
+ startTime: baselineWindowStart,
157
+ endTime: context.now,
158
+ bucketSizeInMinutes: ERROR_LOG_SPIKE_HISTOGRAM_BUCKET_MINUTES,
159
+ severityTexts: ERROR_LOG_SEVERITIES,
160
+ });
161
+ const { recentCount, priorCount } = ErrorLogSpikeDetector.splitHistogram(buckets, recentWindowStart);
162
+ const decision = ErrorLogSpikeDetector.evaluateSpike(recentCount, priorCount);
163
+ if (!decision.isSpike) {
164
+ return [];
165
+ }
166
+ /*
167
+ * Stage 2 — service attribution, only now that a spike exists. This
168
+ * top-list groups by primaryEntityId, which rejects the projection and
169
+ * scans the base table — acceptable because the scan is bounded to the
170
+ * single spike hour.
171
+ */
172
+ const topItems = await LogAggregationService.getAnalyticsTopList({
173
+ projectId: context.projectId,
174
+ startTime: recentWindowStart,
175
+ endTime: context.now,
176
+ bucketSizeInMinutes: ERROR_LOG_SPIKE_RECENT_WINDOW_MINUTES,
177
+ chartType: "toplist",
178
+ groupBy: ["primaryEntityId"],
179
+ aggregation: "count",
180
+ severityTexts: ERROR_LOG_SEVERITIES,
181
+ limit: ERROR_LOG_SPIKE_MAX_ATTRIBUTED_SERVICES,
182
+ });
183
+ /*
184
+ * Resolve entity ids to Service names. Non-Service entities (hosts,
185
+ * clusters) resolve to null and keep their raw id as the label — the
186
+ * evidence must stand alone even when attribution is imperfect.
187
+ */
188
+ const topServices = [];
189
+ for (const item of topItems) {
190
+ const service = await ServiceService.findOneById({
191
+ id: new ObjectID(item.value),
192
+ select: { name: true },
193
+ props: { isRoot: true },
194
+ });
195
+ topServices.push({
196
+ serviceId: item.value,
197
+ serviceName: (service === null || service === void 0 ? void 0 : service.name) || item.value,
198
+ isService: Boolean(service === null || service === void 0 ? void 0 : service.name),
199
+ count: item.count,
200
+ });
201
+ }
202
+ const detailLines = [
203
+ "**Error-log spike detected**",
204
+ "",
205
+ `- Error/Fatal logs in the last ${ERROR_LOG_SPIKE_RECENT_WINDOW_MINUTES} minutes: ${decision.recentCount}`,
206
+ `- Baseline: ${decision.baselineHourlyAverage.toFixed(2)}/hour over the prior ${ERROR_LOG_SPIKE_BASELINE_WINDOW_HOURS}h (${priorCount} total)`,
207
+ `- Spike multiplier: ${decision.multiplier.toFixed(1)}x`,
208
+ ];
209
+ if (topServices.length > 0) {
210
+ detailLines.push("", "Top contributing services in the spike window:");
211
+ for (const top of topServices) {
212
+ detailLines.push(`- ${top.serviceName}: ${top.count} error logs`);
213
+ }
214
+ }
215
+ const detailMarkdown = detailLines.join("\n");
216
+ const evidenceTopServices = topServices.map((top) => {
217
+ return { serviceName: top.serviceName, count: top.count };
218
+ });
219
+ /*
220
+ * One insight per top contributing service so each can be routed and
221
+ * triaged in its own context; when attribution found nothing, a single
222
+ * project-wide insight still surfaces the event.
223
+ */
224
+ if (topServices.length === 0) {
225
+ return [
226
+ {
227
+ insightType: AIInsightType.ErrorLogSpike,
228
+ fingerprint: ErrorLogSpikeDetector.buildFingerprint(undefined),
229
+ title: `Error-log spike: ${decision.multiplier.toFixed(1)}x normal volume across the project`,
230
+ detailMarkdown,
231
+ severity: decision.severity,
232
+ evidence: {
233
+ logSpike: {
234
+ recentErrorCount: decision.recentCount,
235
+ baselineHourlyAverage: decision.baselineHourlyAverage,
236
+ spikeMultiplier: decision.multiplier,
237
+ windowMinutes: ERROR_LOG_SPIKE_RECENT_WINDOW_MINUTES,
238
+ topServices: evidenceTopServices,
239
+ },
240
+ },
241
+ },
242
+ ];
243
+ }
244
+ return topServices.map((top) => {
245
+ return {
246
+ insightType: AIInsightType.ErrorLogSpike,
247
+ fingerprint: ErrorLogSpikeDetector.buildFingerprint(top.serviceId),
248
+ title: `Error-log spike: ${decision.multiplier.toFixed(1)}x normal volume in ${top.serviceName}`,
249
+ detailMarkdown,
250
+ severity: decision.severity,
251
+ serviceName: top.serviceName,
252
+ telemetryServiceId: top.isService
253
+ ? new ObjectID(top.serviceId)
254
+ : undefined,
255
+ evidence: {
256
+ logSpike: {
257
+ recentErrorCount: decision.recentCount,
258
+ baselineHourlyAverage: decision.baselineHourlyAverage,
259
+ spikeMultiplier: decision.multiplier,
260
+ windowMinutes: ERROR_LOG_SPIKE_RECENT_WINDOW_MINUTES,
261
+ topServices: evidenceTopServices,
262
+ },
263
+ },
264
+ };
265
+ });
266
+ }
267
+ }
268
+ //# sourceMappingURL=ErrorLogSpikeDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorLogSpikeDetector.js","sourceRoot":"","sources":["../../../../../../../../Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts"],"names":[],"mappings":"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"}