@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
@@ -0,0 +1,521 @@
1
+ import ObjectID from "../../../../../../Types/ObjectID";
2
+ import OneUptimeDate from "../../../../../../Types/Date";
3
+ import SortOrder from "../../../../../../Types/BaseDatabase/SortOrder";
4
+ import InBetween from "../../../../../../Types/BaseDatabase/InBetween";
5
+ import AIInsightType from "../../../../../../Types/AI/AIInsightType";
6
+ import AIInsightSeverity from "../../../../../../Types/AI/AIInsightSeverity";
7
+ import {
8
+ PerformanceCodeLocation,
9
+ PerformanceFinding,
10
+ } from "../../../../../../Types/AI/CodeFixTaskContext";
11
+ import Span from "../../../../../../Models/AnalyticsModels/Span";
12
+ import Service from "../../../../../../Models/DatabaseModels/Service";
13
+ import SpanService from "../../../../../Services/SpanService";
14
+ import ServiceService from "../../../../../Services/ServiceService";
15
+ import TraceAggregationService, {
16
+ ServiceLatencyProfile,
17
+ ServiceLatencyProfileRow,
18
+ TraceAnalyticsTopItem,
19
+ } from "../../../../../Services/TraceAggregationService";
20
+ import SpanTreeAnalyzer, {
21
+ AnalyzableSpan,
22
+ } from "../../../PerfEvidence/SpanTreeAnalyzer";
23
+ import FixPerformanceTaskTrigger from "../../FixPerformanceTaskTrigger";
24
+ import logger from "../../../../Logger";
25
+ import {
26
+ InsightCandidate,
27
+ InsightDetector,
28
+ InsightScanContext,
29
+ } from "../Types";
30
+
31
+ /*
32
+ * TraceLatencyRegression — a service whose recent p99 span latency
33
+ * regressed to a multiple of its own 24-hour baseline, with the evidence
34
+ * drilled down to span-tree findings from a representative slow trace.
35
+ *
36
+ * Stage 1 is two per-service latency-profile queries (recent hour vs the
37
+ * prior 24h) via TraceAggregationService.getServiceLatencyProfile, which is
38
+ * served by the Span proj_agg_by_service aggregate projection: this runs
39
+ * unattended for every opted-in project every 15 minutes, so it must read
40
+ * pre-aggregated minute rows, not 25 hours of raw spans. p99 (not p95) on
41
+ * purpose: quantile(0.99) is the only percentile state that projection
42
+ * stores, and quantile states of different levels do not merge. The drill
43
+ * (slowest operation → representative trace → span-tree analysis → code
44
+ * locations) runs ONLY for services that regressed, and the resulting
45
+ * findings are stored on the insight because ClickHouse span retention is
46
+ * short — the stored evidence must outlive the spans (FixPerformance
47
+ * taskContext precedent). Deterministic — no LLM anywhere in this detector.
48
+ */
49
+
50
+ // The regression window, compared against the prior baseline window.
51
+ export const LATENCY_RECENT_WINDOW_HOURS: number = 1;
52
+
53
+ /*
54
+ * Baseline: the 24 hours before the regression window. Self-baselining
55
+ * per service — a chronically slow service does not alert on being its
56
+ * usual slow self.
57
+ */
58
+ export const LATENCY_BASELINE_WINDOW_HOURS: number = 24;
59
+
60
+ /*
61
+ * Absolute floor: a p99 under one second is not worth a human's attention
62
+ * even if it doubled — sub-second "regressions" are dominated by cache
63
+ * and GC noise.
64
+ */
65
+ export const LATENCY_MIN_RECENT_P99_MS: number = 1000;
66
+
67
+ // p99 multiplier over the service's own baseline that counts as regression.
68
+ export const LATENCY_MIN_REGRESSION_MULTIPLIER: number = 2;
69
+
70
+ // A >= 4x p99 regression is a step change — escalate to High.
71
+ export const LATENCY_HIGH_SEVERITY_MULTIPLIER: number = 4;
72
+
73
+ /*
74
+ * The baseline p99 is only trustworthy with enough prior samples; below
75
+ * this the "baseline" is a handful of requests and the multiplier is
76
+ * noise. Matches the cold-start posture of the metric baselines.
77
+ */
78
+ export const LATENCY_MIN_PRIOR_SAMPLE_COUNT: number = 100;
79
+
80
+ /*
81
+ * Per-service rows fetched per window. The profile query ranks by request
82
+ * volume, so this bounds the scan to the 25 busiest services — the ones a
83
+ * p99 regression actually hurts (and the prior-sample-count gate would
84
+ * reject quiet services anyway).
85
+ */
86
+ export const LATENCY_SERVICE_LIMIT: number = 25;
87
+
88
+ /*
89
+ * Span cap for the representative-trace fetch — mirrors the trace
90
+ * waterfall tools' cap; beyond this the analyzer's evidence quality
91
+ * degrades anyway.
92
+ */
93
+ export const LATENCY_MAX_TRACE_SPANS: number = 500;
94
+
95
+ /*
96
+ * The drill's top-list ranks operations by p99, and for a group of ONE span
97
+ * the p99 IS that span's own duration — so a single freak-slow request would
98
+ * take the top slot outright. Fetch a small candidate set instead of one row
99
+ * and let the sample floor below choose among them. Ten is enough: an
100
+ * operation that cannot beat ten rivals on p99 is not the story.
101
+ */
102
+ export const LATENCY_TOP_OPERATION_CANDIDATES: number = 10;
103
+
104
+ /*
105
+ * Minimum spans an operation must have in the recent window before its p99
106
+ * is treated as evidence — and, just as load-bearing, before its name is
107
+ * allowed into the fingerprint. The fingerprint embeds the operation, so a
108
+ * noisy winner does not merely mislabel one insight: it churns the dedupe
109
+ * key tick after tick, and each new key is a NEW insight row plus a NEW
110
+ * triage LLM run for one and the same ongoing regression. Deliberately far
111
+ * below LATENCY_MIN_PRIOR_SAMPLE_COUNT — this gate only asks "is this
112
+ * operation real traffic", not "is this baseline trustworthy".
113
+ */
114
+ export const LATENCY_MIN_OPERATION_SAMPLE_COUNT: number = 20;
115
+
116
+ export interface LatencyRegressionDecision {
117
+ isRegression: boolean;
118
+ // recent p99 / prior p99 (0 when the prior p99 is 0).
119
+ multiplier: number;
120
+ severity: AIInsightSeverity;
121
+ }
122
+
123
+ // One service's joined recent-vs-prior latency profile.
124
+ export interface ServiceLatencyWindows {
125
+ primaryEntityId: string;
126
+ recentP99Ms: number;
127
+ recentSampleCount: number;
128
+ priorP99Ms: number;
129
+ priorSampleCount: number;
130
+ }
131
+
132
+ export default class TraceLatencyRegressionDetector implements InsightDetector {
133
+ public insightType: AIInsightType = AIInsightType.TraceLatencyRegression;
134
+
135
+ /*
136
+ * Pure decision: regression ⇔ recent p99 >= LATENCY_MIN_RECENT_P99_MS
137
+ * AND prior window has >= LATENCY_MIN_PRIOR_SAMPLE_COUNT samples AND
138
+ * recent p99 >= LATENCY_MIN_REGRESSION_MULTIPLIER * prior p99 (> 0).
139
+ */
140
+ public static evaluateRegression(input: {
141
+ recentP99Ms: number;
142
+ priorP99Ms: number;
143
+ priorSampleCount: number;
144
+ }): LatencyRegressionDecision {
145
+ const multiplier: number =
146
+ input.priorP99Ms > 0 ? input.recentP99Ms / input.priorP99Ms : 0;
147
+
148
+ const isRegression: boolean =
149
+ input.recentP99Ms >= LATENCY_MIN_RECENT_P99_MS &&
150
+ input.priorSampleCount >= LATENCY_MIN_PRIOR_SAMPLE_COUNT &&
151
+ input.priorP99Ms > 0 &&
152
+ multiplier >= LATENCY_MIN_REGRESSION_MULTIPLIER;
153
+
154
+ return {
155
+ isRegression,
156
+ multiplier,
157
+ severity:
158
+ multiplier >= LATENCY_HIGH_SEVERITY_MULTIPLIER
159
+ ? AIInsightSeverity.High
160
+ : AIInsightSeverity.Medium,
161
+ };
162
+ }
163
+
164
+ /*
165
+ * Pure join of the two per-service profile query results on
166
+ * primaryEntityId. Services missing from the prior window join with a
167
+ * zero baseline (and are then rejected by the sample-count gate).
168
+ */
169
+ public static joinServiceWindows(
170
+ recentRows: Array<ServiceLatencyProfileRow>,
171
+ priorRows: Array<ServiceLatencyProfileRow>,
172
+ ): Array<ServiceLatencyWindows> {
173
+ const priorByEntity: Map<string, ServiceLatencyProfileRow> = new Map();
174
+ for (const row of priorRows) {
175
+ if (row.primaryEntityId) {
176
+ priorByEntity.set(row.primaryEntityId, row);
177
+ }
178
+ }
179
+
180
+ const joined: Array<ServiceLatencyWindows> = [];
181
+ for (const row of recentRows) {
182
+ const entityId: string = row.primaryEntityId || "";
183
+ if (!entityId) {
184
+ continue;
185
+ }
186
+ const prior: ServiceLatencyProfileRow | undefined =
187
+ priorByEntity.get(entityId);
188
+ joined.push({
189
+ primaryEntityId: entityId,
190
+ recentP99Ms: row.p99DurationMs,
191
+ recentSampleCount: row.count,
192
+ priorP99Ms: prior?.p99DurationMs || 0,
193
+ priorSampleCount: prior?.count || 0,
194
+ });
195
+ }
196
+ return joined;
197
+ }
198
+
199
+ /*
200
+ * Pure decision: the slowest operation whose p99 is backed by real
201
+ * traffic. Candidates below LATENCY_MIN_OPERATION_SAMPLE_COUNT are
202
+ * dropped outright — with n=1 the "p99" is just that one span, so an
203
+ * unfiltered ranking hands the top slot to whatever freak request the
204
+ * window happened to catch.
205
+ *
206
+ * Ranking is re-established here rather than trusting the query's row
207
+ * order: ClickHouse's ORDER BY val DESC is not a total order, and ties
208
+ * broken arbitrarily by the server would move the fingerprint (which
209
+ * embeds the operation name) from tick to tick. Ties fall to volume,
210
+ * then to the name — a total, deterministic order.
211
+ *
212
+ * Undefined when nothing clears the floor. The caller then emits
213
+ * service-level evidence under the stable service-scoped fingerprint,
214
+ * which is strictly better than naming an operation we do not believe.
215
+ */
216
+ public static pickSlowestOperation(
217
+ items: Array<TraceAnalyticsTopItem>,
218
+ ): string | undefined {
219
+ const credible: Array<TraceAnalyticsTopItem> = items.filter(
220
+ (item: TraceAnalyticsTopItem): boolean => {
221
+ return (
222
+ item.value.length > 0 &&
223
+ item.count >= LATENCY_MIN_OPERATION_SAMPLE_COUNT
224
+ );
225
+ },
226
+ );
227
+
228
+ credible.sort(
229
+ (a: TraceAnalyticsTopItem, b: TraceAnalyticsTopItem): number => {
230
+ if (b.metricValue !== a.metricValue) {
231
+ return b.metricValue - a.metricValue;
232
+ }
233
+ if (b.count !== a.count) {
234
+ return b.count - a.count;
235
+ }
236
+ return a.value.localeCompare(b.value);
237
+ },
238
+ );
239
+
240
+ return credible[0]?.value;
241
+ }
242
+
243
+ /*
244
+ * Nanoseconds → milliseconds conversion into the analyzer's input shape
245
+ * (the AIInvestigationAPI conversion, kept local because the API file
246
+ * does not export it). Pure — the ns→ms arithmetic is unit-tested.
247
+ */
248
+ public static toAnalyzableSpans(spans: Array<Span>): Array<AnalyzableSpan> {
249
+ return spans.map((span: Span): AnalyzableSpan => {
250
+ const attributes: Record<string, string> = {};
251
+
252
+ for (const [key, value] of Object.entries(span.attributes || {})) {
253
+ if (value !== null && value !== undefined) {
254
+ attributes[key] = String(value);
255
+ }
256
+ }
257
+
258
+ return {
259
+ spanId: span.spanId?.toString() || "",
260
+ parentSpanId: span.parentSpanId?.toString() || undefined,
261
+ name: span.name || "",
262
+ startMs: Number(span.startTimeUnixNano) / 1_000_000,
263
+ endMs: Number(span.endTimeUnixNano) / 1_000_000,
264
+ durationMs: Number(span.durationUnixNano) / 1_000_000,
265
+ attributes,
266
+ };
267
+ });
268
+ }
269
+
270
+ /*
271
+ * Stable dedupe key: service + NORMALIZED operation name (ids/digits
272
+ * collapsed), so the same regressing endpoint refreshes one insight no
273
+ * matter which concrete URL the representative trace hit.
274
+ */
275
+ public static buildFingerprint(
276
+ serviceEntityId: string,
277
+ operationName: string | undefined,
278
+ ): string {
279
+ return `latency:${serviceEntityId}:${SpanTreeAnalyzer.normalizeSpanName(
280
+ operationName || "",
281
+ )}`;
282
+ }
283
+
284
+ public async detect(
285
+ context: InsightScanContext,
286
+ ): Promise<Array<InsightCandidate>> {
287
+ const recentWindowStart: Date = OneUptimeDate.addRemoveHours(
288
+ context.now,
289
+ -1 * LATENCY_RECENT_WINDOW_HOURS,
290
+ );
291
+ const priorWindowStart: Date = OneUptimeDate.addRemoveHours(
292
+ recentWindowStart,
293
+ -1 * LATENCY_BASELINE_WINDOW_HOURS,
294
+ );
295
+
296
+ // Stage 1 — per-service latency profile: recent hour vs prior 24h.
297
+ const recentProfile: ServiceLatencyProfile =
298
+ await TraceAggregationService.getServiceLatencyProfile({
299
+ projectId: context.projectId,
300
+ startTime: recentWindowStart,
301
+ endTime: context.now,
302
+ limit: LATENCY_SERVICE_LIMIT,
303
+ });
304
+
305
+ const priorProfile: ServiceLatencyProfile =
306
+ await TraceAggregationService.getServiceLatencyProfile({
307
+ projectId: context.projectId,
308
+ startTime: priorWindowStart,
309
+ endTime: recentWindowStart,
310
+ limit: LATENCY_SERVICE_LIMIT,
311
+ });
312
+
313
+ /*
314
+ * A partial window is not "less data", it is WRONG data: a p99 and a
315
+ * span count computed over whatever fraction ClickHouse managed before
316
+ * the execution cap fired. Comparing a partial window against a
317
+ * complete one manufactures regressions that never happened (and hides
318
+ * ones that did). Skip this project's latency detection for the tick
319
+ * and let the next one, 15 minutes out, decide — a delayed insight is
320
+ * recoverable, a fabricated one (which may open a fix PR) is not.
321
+ */
322
+ if (recentProfile.isPartial || priorProfile.isPartial) {
323
+ logger.info(
324
+ `TraceLatencyRegressionDetector: skipping project ${context.projectId.toString()} for this scan — the service latency profile query returned a possibly partial result (execution cap reached).`,
325
+ );
326
+ return [];
327
+ }
328
+
329
+ const joined: Array<ServiceLatencyWindows> =
330
+ TraceLatencyRegressionDetector.joinServiceWindows(
331
+ recentProfile.rows,
332
+ priorProfile.rows,
333
+ );
334
+
335
+ const candidates: Array<InsightCandidate> = [];
336
+
337
+ for (const windows of joined) {
338
+ const decision: LatencyRegressionDecision =
339
+ TraceLatencyRegressionDetector.evaluateRegression({
340
+ recentP99Ms: windows.recentP99Ms,
341
+ priorP99Ms: windows.priorP99Ms,
342
+ priorSampleCount: windows.priorSampleCount,
343
+ });
344
+
345
+ if (!decision.isRegression) {
346
+ continue;
347
+ }
348
+
349
+ candidates.push(
350
+ await this.drillRegression({
351
+ context,
352
+ windows,
353
+ decision,
354
+ recentWindowStart,
355
+ }),
356
+ );
357
+ }
358
+
359
+ return candidates;
360
+ }
361
+
362
+ /*
363
+ * Drill one regressed service down to a concrete, code-shaped story:
364
+ * slowest CREDIBLE operation (p99 in the spike hour, sample floor
365
+ * applied) → the single slowest span of that operation → its whole trace
366
+ * → deterministic span-tree findings + code.* locations. When no
367
+ * operation clears the floor the insight stays at service level rather
368
+ * than pinning the blame — and the drill queries are skipped entirely.
369
+ */
370
+ private async drillRegression(input: {
371
+ context: InsightScanContext;
372
+ windows: ServiceLatencyWindows;
373
+ decision: LatencyRegressionDecision;
374
+ recentWindowStart: Date;
375
+ }): Promise<InsightCandidate> {
376
+ const serviceEntityId: ObjectID = new ObjectID(
377
+ input.windows.primaryEntityId,
378
+ );
379
+
380
+ /*
381
+ * Candidate operations for the service — the top-list ranks by the
382
+ * metric (p99) and returns each operation's span count alongside it,
383
+ * which is exactly what the sample floor needs. Bounded: one 1-hour
384
+ * query pinned to the one service that regressed.
385
+ */
386
+ const topOperations: Array<TraceAnalyticsTopItem> =
387
+ await TraceAggregationService.getAnalyticsTopList({
388
+ projectId: input.context.projectId,
389
+ startTime: input.recentWindowStart,
390
+ endTime: input.context.now,
391
+ bucketSizeInMinutes: LATENCY_RECENT_WINDOW_HOURS * 60,
392
+ chartType: "toplist",
393
+ metric: "p99Duration",
394
+ groupBy: ["name"],
395
+ serviceIds: [serviceEntityId],
396
+ limit: LATENCY_TOP_OPERATION_CANDIDATES,
397
+ });
398
+
399
+ const operationName: string | undefined =
400
+ TraceLatencyRegressionDetector.pickSlowestOperation(topOperations);
401
+
402
+ /*
403
+ * Representative trace: the slowest span of the slowest operation in
404
+ * the spike window, then that trace's full span set. Explicit
405
+ * projectId in every root query — the scanner never relies on ACL.
406
+ */
407
+ let sampleTraceId: string | undefined = undefined;
408
+ let findings: Array<PerformanceFinding> = [];
409
+ let codeLocations: Array<PerformanceCodeLocation> = [];
410
+
411
+ if (operationName) {
412
+ const slowestSpans: Array<Span> = await SpanService.findBy({
413
+ query: {
414
+ projectId: input.context.projectId,
415
+ primaryEntityId: serviceEntityId,
416
+ name: operationName,
417
+ startTime: new InBetween(input.recentWindowStart, input.context.now),
418
+ } as never,
419
+ select: {
420
+ traceId: true,
421
+ } as never,
422
+ sort: {
423
+ durationUnixNano: SortOrder.Descending,
424
+ } as never,
425
+ limit: 1,
426
+ skip: 0,
427
+ props: { isRoot: true },
428
+ });
429
+
430
+ sampleTraceId = slowestSpans[0]?.traceId?.toString() || undefined;
431
+ }
432
+
433
+ if (sampleTraceId) {
434
+ const traceSpans: Array<Span> = await SpanService.findBy({
435
+ query: {
436
+ projectId: input.context.projectId,
437
+ traceId: sampleTraceId,
438
+ } as never,
439
+ select: {
440
+ spanId: true,
441
+ parentSpanId: true,
442
+ name: true,
443
+ startTimeUnixNano: true,
444
+ endTimeUnixNano: true,
445
+ durationUnixNano: true,
446
+ attributes: true,
447
+ } as never,
448
+ sort: {
449
+ startTimeUnixNano: SortOrder.Ascending,
450
+ } as never,
451
+ limit: LATENCY_MAX_TRACE_SPANS,
452
+ skip: 0,
453
+ props: { isRoot: true },
454
+ });
455
+
456
+ const analyzableSpans: Array<AnalyzableSpan> =
457
+ TraceLatencyRegressionDetector.toAnalyzableSpans(traceSpans);
458
+
459
+ findings = SpanTreeAnalyzer.analyzeTrace(analyzableSpans);
460
+ codeLocations = FixPerformanceTaskTrigger.collectCodeLocations(
461
+ analyzableSpans,
462
+ findings,
463
+ );
464
+ }
465
+
466
+ const service: Service | null = await ServiceService.findOneById({
467
+ id: serviceEntityId,
468
+ select: { name: true },
469
+ props: { isRoot: true },
470
+ });
471
+ const serviceName: string | null = service?.name || null;
472
+
473
+ const detailLines: Array<string> = [
474
+ "**Trace latency regression detected**",
475
+ "",
476
+ `- Service: ${serviceName || input.windows.primaryEntityId}`,
477
+ `- Recent p99 (last ${LATENCY_RECENT_WINDOW_HOURS}h): ${input.windows.recentP99Ms.toFixed(0)} ms over ${input.windows.recentSampleCount} spans`,
478
+ `- Baseline p99 (prior ${LATENCY_BASELINE_WINDOW_HOURS}h): ${input.windows.priorP99Ms.toFixed(0)} ms over ${input.windows.priorSampleCount} spans`,
479
+ `- Regression multiplier: ${input.decision.multiplier.toFixed(1)}x`,
480
+ ];
481
+ if (operationName) {
482
+ detailLines.push(`- Slowest operation: \`${operationName}\``);
483
+ }
484
+ if (sampleTraceId) {
485
+ detailLines.push(`- Representative trace: \`${sampleTraceId}\``);
486
+ }
487
+ if (findings.length > 0) {
488
+ detailLines.push(
489
+ "",
490
+ "## Span-tree findings (representative trace)",
491
+ "",
492
+ SpanTreeAnalyzer.renderFindingsMarkdown(findings),
493
+ );
494
+ }
495
+
496
+ return {
497
+ insightType: AIInsightType.TraceLatencyRegression,
498
+ fingerprint: TraceLatencyRegressionDetector.buildFingerprint(
499
+ input.windows.primaryEntityId,
500
+ operationName,
501
+ ),
502
+ title: `Latency regression: p99 ${input.decision.multiplier.toFixed(1)}x${operationName ? ` on ${operationName}` : ""}${serviceName ? ` in ${serviceName}` : ""}`,
503
+ detailMarkdown: detailLines.join("\n"),
504
+ severity: input.decision.severity,
505
+ serviceName: serviceName || undefined,
506
+ telemetryServiceId: serviceName ? serviceEntityId : undefined,
507
+ traceId: sampleTraceId,
508
+ evidence: {
509
+ latency: {
510
+ recentP99Ms: input.windows.recentP99Ms,
511
+ baselineP99Ms: input.windows.priorP99Ms,
512
+ regressionMultiplier: input.decision.multiplier,
513
+ operationName,
514
+ sampleTraceId,
515
+ performanceFindings: findings.length > 0 ? findings : undefined,
516
+ codeLocations: codeLocations.length > 0 ? codeLocations : undefined,
517
+ },
518
+ },
519
+ };
520
+ }
521
+ }