@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,221 @@
1
+ import InsightTriageRunner from "../../../../../Server/Utils/AI/SRE/Insights/InsightTriageRunner";
2
+ import AIInvestigationEngine, {
3
+ InvestigationRequest,
4
+ } from "../../../../../Server/Utils/AI/SRE/AIInvestigationEngine";
5
+ import AIInvestigationQueue from "../../../../../Server/Utils/AI/SRE/InvestigationQueue";
6
+ import InstrumentationTaskTrigger from "../../../../../Server/Utils/AI/SRE/InstrumentationTaskTrigger";
7
+ import { ConfidenceSignal } from "../../../../../Server/Utils/AI/SRE/ConfidenceSignal";
8
+ import { ObservabilityAssistantResult } from "../../../../../Server/Utils/AI/Chat/ObservabilityAssistant";
9
+ import AIInsightService from "../../../../../Server/Services/AIInsightService";
10
+ import IncidentFeedService from "../../../../../Server/Services/IncidentFeedService";
11
+ import AlertFeedService from "../../../../../Server/Services/AlertFeedService";
12
+ import { AI_INSIGHT_TRIAGE_FEATURE } from "../../../../../Server/Services/AIService";
13
+ import AIInsight from "../../../../../Models/DatabaseModels/AIInsight";
14
+ import AIInsightType from "../../../../../Types/AI/AIInsightType";
15
+ import AIInsightSeverity from "../../../../../Types/AI/AIInsightSeverity";
16
+ import ObjectID from "../../../../../Types/ObjectID";
17
+ import { describe, expect, test, afterEach } from "@jest/globals";
18
+
19
+ /*
20
+ * The insight triage runner — the Preventive lane's quiet-inbox executor.
21
+ * The invariants these tests lock in:
22
+ * (a) a context-build failure (insight gone, db error) hands the CLAIMED
23
+ * run to the queue's retry policy as NON-permanent, and the engine
24
+ * never runs;
25
+ * (b) the engine request carries the dedicated budgeted feature label
26
+ * (AI_INSIGHT_TRIAGE_FEATURE — G4) and a context that recasts
27
+ * the run as preventive triage of the detector's finding;
28
+ * (c) postAnalysis writes triageSummaryMarkdown + triageCompletedAt onto
29
+ * the insight row and NOTHING else — no feed items, no workspace
30
+ * notification, no instrumentation-task trigger. Insights never page.
31
+ */
32
+
33
+ const aiRunId: ObjectID = ObjectID.generate();
34
+ const projectId: ObjectID = ObjectID.generate();
35
+ const sentinelInsightId: ObjectID = ObjectID.generate();
36
+
37
+ function makeInsight(): AIInsight {
38
+ return {
39
+ id: sentinelInsightId,
40
+ insightType: AIInsightType.ExceptionSpike,
41
+ severity: AIInsightSeverity.High,
42
+ title: "Spike: NullPointerException in checkout",
43
+ detailMarkdown: "Recent hour: 240 occurrences vs a baseline of 4/hour.",
44
+ serviceName: "checkout",
45
+ evidence: {
46
+ exception: {
47
+ exceptionMessage: "NullPointerException",
48
+ recentOccurrenceCount: 240,
49
+ baselineHourlyAverage: 4,
50
+ spikeMultiplier: 60,
51
+ },
52
+ },
53
+ } as unknown as AIInsight;
54
+ }
55
+
56
+ function makeConfidence(): ConfidenceSignal {
57
+ return { confident: true, source: "classification" };
58
+ }
59
+
60
+ describe("InsightTriageRunner.executeTriage", () => {
61
+ afterEach(() => {
62
+ jest.restoreAllMocks();
63
+ });
64
+
65
+ test("a context-build failure hands the claimed run to the retry policy (non-permanent)", async () => {
66
+ jest
67
+ .spyOn(AIInsightService, "findOneById")
68
+ .mockRejectedValue(new Error("db down"));
69
+ const failOrRequeue: jest.SpyInstance = jest
70
+ .spyOn(AIInvestigationQueue, "failOrRequeue")
71
+ .mockResolvedValue(undefined);
72
+ const executeRun: jest.SpyInstance = jest.spyOn(
73
+ AIInvestigationEngine,
74
+ "executeRun",
75
+ );
76
+
77
+ await InsightTriageRunner.executeTriage({
78
+ aiRunId,
79
+ projectId,
80
+ sentinelInsightId,
81
+ attemptCount: 1,
82
+ });
83
+
84
+ expect(failOrRequeue).toHaveBeenCalledWith(
85
+ expect.objectContaining({
86
+ aiRunId,
87
+ attemptCount: 1,
88
+ isPermanent: false,
89
+ }),
90
+ );
91
+ expect(executeRun).not.toHaveBeenCalled();
92
+ });
93
+
94
+ test("a deleted insight is also a non-permanent context failure", async () => {
95
+ jest.spyOn(AIInsightService, "findOneById").mockResolvedValue(null);
96
+ const failOrRequeue: jest.SpyInstance = jest
97
+ .spyOn(AIInvestigationQueue, "failOrRequeue")
98
+ .mockResolvedValue(undefined);
99
+
100
+ await InsightTriageRunner.executeTriage({
101
+ aiRunId,
102
+ projectId,
103
+ sentinelInsightId,
104
+ attemptCount: 1,
105
+ });
106
+
107
+ expect(failOrRequeue).toHaveBeenCalledWith(
108
+ expect.objectContaining({ isPermanent: false }),
109
+ );
110
+ });
111
+
112
+ test("the engine request carries the triage feature and a preventive-triage context built from the insight", async () => {
113
+ jest
114
+ .spyOn(AIInsightService, "findOneById")
115
+ .mockResolvedValue(makeInsight());
116
+ const executeRun: jest.SpyInstance = jest
117
+ .spyOn(AIInvestigationEngine, "executeRun")
118
+ .mockResolvedValue(undefined);
119
+
120
+ await InsightTriageRunner.executeTriage({
121
+ aiRunId,
122
+ projectId,
123
+ sentinelInsightId,
124
+ attemptCount: 1,
125
+ });
126
+
127
+ expect(executeRun).toHaveBeenCalledWith(
128
+ expect.objectContaining({
129
+ aiRunId,
130
+ projectId,
131
+ attemptCount: 1,
132
+ request: expect.objectContaining({
133
+ feature: AI_INSIGHT_TRIAGE_FEATURE,
134
+ }),
135
+ }),
136
+ );
137
+
138
+ const request: InvestigationRequest = (
139
+ executeRun.mock.calls[0]![0] as {
140
+ request: InvestigationRequest;
141
+ }
142
+ ).request;
143
+
144
+ // Recast as preventive triage — no incident exists, a sensor filed this.
145
+ expect(request.contextSummary).toContain("PREVENTIVE TRIAGE");
146
+ expect(request.contextSummary).toContain("ONE next action");
147
+ // The subject description: type, title and the detector's evidence.
148
+ expect(request.contextSummary).toContain(AIInsightType.ExceptionSpike);
149
+ expect(request.contextSummary).toContain(
150
+ "Spike: NullPointerException in checkout",
151
+ );
152
+ expect(request.contextSummary).toContain(
153
+ "Recent hour: 240 occurrences vs a baseline of 4/hour.",
154
+ );
155
+ // The raw evidence numbers rendered compactly.
156
+ expect(request.contextSummary).toContain('"spikeMultiplier":60');
157
+ });
158
+
159
+ test("postAnalysis writes the summary onto the insight row — and notifies NOTHING (quiet inbox)", async () => {
160
+ jest
161
+ .spyOn(AIInsightService, "findOneById")
162
+ .mockResolvedValue(makeInsight());
163
+ const persist: jest.SpyInstance = jest
164
+ .spyOn(AIInsightService, "updateOneById")
165
+ .mockResolvedValue(undefined);
166
+ const incidentFeed: jest.SpyInstance = jest
167
+ .spyOn(IncidentFeedService, "createIncidentFeedItem")
168
+ .mockResolvedValue(undefined);
169
+ const alertFeed: jest.SpyInstance = jest
170
+ .spyOn(AlertFeedService, "createAlertFeedItem")
171
+ .mockResolvedValue(undefined);
172
+ const instrumentationTrigger: jest.SpyInstance = jest
173
+ .spyOn(InstrumentationTaskTrigger, "enqueueForInconclusiveInvestigation")
174
+ .mockResolvedValue(undefined);
175
+
176
+ // Drive the engine's postAnalysis callback the way the real engine does.
177
+ jest
178
+ .spyOn(AIInvestigationEngine, "executeRun")
179
+ .mockImplementation(
180
+ async (data: {
181
+ aiRunId: ObjectID;
182
+ projectId: ObjectID;
183
+ attemptCount: number;
184
+ request: InvestigationRequest;
185
+ }): Promise<void> => {
186
+ await data.request.postAnalysis({
187
+ analysisMarkdown: "## 🧠 AI SRE — branded triage analysis",
188
+ confidence: makeConfidence(),
189
+ result: {} as unknown as ObservabilityAssistantResult,
190
+ });
191
+ },
192
+ );
193
+
194
+ await InsightTriageRunner.executeTriage({
195
+ aiRunId,
196
+ projectId,
197
+ sentinelInsightId,
198
+ attemptCount: 1,
199
+ });
200
+
201
+ expect(persist).toHaveBeenCalledWith(
202
+ expect.objectContaining({
203
+ id: sentinelInsightId,
204
+ data: expect.objectContaining({
205
+ triageSummaryMarkdown: "## 🧠 AI SRE — branded triage analysis",
206
+ triageCompletedAt: expect.any(Date),
207
+ }),
208
+ props: expect.objectContaining({ isRoot: true }),
209
+ }),
210
+ );
211
+
212
+ /*
213
+ * The quiet-inbox rule: insights never page and never enter the
214
+ * notification pipeline — zero feed items, zero workspace pings, zero
215
+ * autonomous follow-up tasks from triage (v1).
216
+ */
217
+ expect(incidentFeed).not.toHaveBeenCalled();
218
+ expect(alertFeed).not.toHaveBeenCalled();
219
+ expect(instrumentationTrigger).not.toHaveBeenCalled();
220
+ });
221
+ });
@@ -0,0 +1,328 @@
1
+ import AIInvestigationQueue, {
2
+ INSIGHT_TRIAGE_RESERVED_SLOTS,
3
+ } from "../../../../../Server/Utils/AI/SRE/InvestigationQueue";
4
+ import InsightTriageRunner from "../../../../../Server/Utils/AI/SRE/Insights/InsightTriageRunner";
5
+ import AIIncidentInvestigationRunner from "../../../../../Server/Utils/AI/SRE/IncidentInvestigationRunner";
6
+ import AIRunService from "../../../../../Server/Services/AIRunService";
7
+ import AIService from "../../../../../Server/Services/AIService";
8
+ import ProjectService from "../../../../../Server/Services/ProjectService";
9
+ import Project from "../../../../../Models/DatabaseModels/Project";
10
+ import AIRun from "../../../../../Models/DatabaseModels/AIRun";
11
+ import AIRunStatus from "../../../../../Types/AI/AIRunStatus";
12
+ import ObjectID from "../../../../../Types/ObjectID";
13
+ import PositiveNumber from "../../../../../Types/PositiveNumber";
14
+ import { describe, expect, test, afterEach, beforeEach } from "@jest/globals";
15
+
16
+ /*
17
+ * The investigation queue's AI-insight subject support. The
18
+ * invariants these tests lock in:
19
+ * (a) enqueue stamps subjectAIInsightId onto the run as
20
+ * triggeredByAiInsightId (provenance + the dispatch key) and
21
+ * returns the created run's id so the caller can link the insight;
22
+ * (b) the budget quiet-skip returns null and creates nothing — the
23
+ * existing enqueue-time gate applies to triage runs too;
24
+ * (c) dispatch recognizes insight runs as subject-BEARING and routes
25
+ * them to InsightTriageRunner.executeTriage with the claimed attempt;
26
+ * (d) a run with no subject at all is still failed at dispatch;
27
+ * (e) LANE PRIORITY: triage (the preventive lane) may hold at most
28
+ * (cap - INSIGHT_TRIAGE_RESERVED_SLOTS) of the project's concurrency
29
+ * slots, so a scan's triage backlog can never starve the interactive
30
+ * lane (incident/alert RCA, where a human is waiting) — while the
31
+ * interactive lane's own gating is left byte-for-byte unchanged.
32
+ */
33
+
34
+ function mockBudget(exhausted: boolean): void {
35
+ jest.spyOn(AIService, "getAutonomousDailyBudgetStatus").mockResolvedValue({
36
+ exhausted,
37
+ limitInTokens: exhausted ? 1000 : null,
38
+ usedTokensToday: exhausted ? 1000 : 0,
39
+ });
40
+ }
41
+
42
+ describe("AIInvestigationQueue — insight subject", () => {
43
+ beforeEach(() => {
44
+ // No per-project cap override; no investigations currently running.
45
+ jest
46
+ .spyOn(ProjectService, "findOneById")
47
+ .mockResolvedValue({ id: ObjectID.generate() } as unknown as Project);
48
+ jest
49
+ .spyOn(AIRunService, "countBy")
50
+ .mockResolvedValue(new PositiveNumber(0));
51
+ });
52
+
53
+ afterEach(() => {
54
+ jest.restoreAllMocks();
55
+ });
56
+
57
+ test("enqueue stamps triggeredByAiInsightId and returns the created run id", async () => {
58
+ mockBudget(false);
59
+ const insightId: ObjectID = ObjectID.generate();
60
+ const createdId: ObjectID = ObjectID.generate();
61
+
62
+ const create: jest.SpyInstance = jest
63
+ .spyOn(AIRunService, "create")
64
+ .mockResolvedValue({ id: createdId } as unknown as AIRun);
65
+ jest.spyOn(AIInvestigationQueue, "processRun").mockResolvedValue(undefined);
66
+
67
+ const returnedId: ObjectID | null = await AIInvestigationQueue.enqueue({
68
+ projectId: ObjectID.generate(),
69
+ subjectAIInsightId: insightId,
70
+ });
71
+
72
+ expect(returnedId).toEqual(createdId);
73
+ expect(create).toHaveBeenCalledWith(
74
+ expect.objectContaining({
75
+ data: expect.objectContaining({
76
+ status: AIRunStatus.Queued,
77
+ triggeredByAiInsightId: insightId,
78
+ }),
79
+ props: expect.objectContaining({ isRoot: true }),
80
+ }),
81
+ );
82
+ });
83
+
84
+ test("the budget quiet-skip returns null and creates no run", async () => {
85
+ mockBudget(true);
86
+ const create: jest.SpyInstance = jest.spyOn(AIRunService, "create");
87
+
88
+ const returnedId: ObjectID | null = await AIInvestigationQueue.enqueue({
89
+ projectId: ObjectID.generate(),
90
+ subjectAIInsightId: ObjectID.generate(),
91
+ });
92
+
93
+ expect(returnedId).toBeNull();
94
+ expect(create).not.toHaveBeenCalled();
95
+ });
96
+
97
+ test("a won claim on an insight run dispatches to the triage runner with the claimed attempt", async () => {
98
+ mockBudget(false);
99
+ const runId: ObjectID = ObjectID.generate();
100
+ const projectId: ObjectID = ObjectID.generate();
101
+ const insightId: ObjectID = ObjectID.generate();
102
+
103
+ jest.spyOn(AIRunService, "attemptStatusTransition").mockResolvedValue(1);
104
+ const executeTriage: jest.SpyInstance = jest
105
+ .spyOn(InsightTriageRunner, "executeTriage")
106
+ .mockResolvedValue(undefined);
107
+
108
+ await AIInvestigationQueue.processRun({
109
+ id: runId,
110
+ projectId,
111
+ attemptCount: 0,
112
+ triggeredByAiInsightId: insightId,
113
+ });
114
+
115
+ expect(executeTriage).toHaveBeenCalledWith(
116
+ expect.objectContaining({
117
+ aiRunId: runId,
118
+ projectId,
119
+ sentinelInsightId: insightId,
120
+ attemptCount: 1,
121
+ }),
122
+ );
123
+ });
124
+
125
+ test("a run with no subject at all is still failed at dispatch", async () => {
126
+ mockBudget(false);
127
+ const runId: ObjectID = ObjectID.generate();
128
+ const transition: jest.SpyInstance = jest
129
+ .spyOn(AIRunService, "attemptStatusTransition")
130
+ .mockResolvedValue(1);
131
+ const executeTriage: jest.SpyInstance = jest.spyOn(
132
+ InsightTriageRunner,
133
+ "executeTriage",
134
+ );
135
+
136
+ await AIInvestigationQueue.processRun({
137
+ id: runId,
138
+ projectId: ObjectID.generate(),
139
+ attemptCount: 0,
140
+ });
141
+
142
+ expect(executeTriage).not.toHaveBeenCalled();
143
+ expect(transition).toHaveBeenCalledWith(
144
+ expect.objectContaining({
145
+ aiRunId: runId,
146
+ fromStatus: AIRunStatus.Running,
147
+ set: expect.objectContaining({
148
+ status: AIRunStatus.Error,
149
+ }),
150
+ }),
151
+ );
152
+ });
153
+ });
154
+
155
+ /*
156
+ * The starvation scenario this locks down: a scan files 10 insights, so 10
157
+ * triage runs queue. Without the lane sub-cap they would fill every slot of
158
+ * the default cap of 3 and the incident that fires a minute later would wait
159
+ * behind them. With it, triage tops out at (cap - 1) and the incident's
160
+ * inline kick at enqueue always finds the reserved slot free.
161
+ */
162
+ describe("AIInvestigationQueue — lane priority (triage never starves RCA)", () => {
163
+ const projectId: ObjectID = ObjectID.generate();
164
+
165
+ // Per-project concurrency cap. The default is 3; make it explicit here.
166
+ function mockCap(cap: number): void {
167
+ jest.spyOn(ProjectService, "findOneById").mockResolvedValue({
168
+ id: projectId,
169
+ aiMaxConcurrentInvestigations: cap,
170
+ } as unknown as Project);
171
+ }
172
+
173
+ /*
174
+ * The claim gates count Running investigations twice: once globally, and
175
+ * once filtered to the triage lane (the query carrying
176
+ * triggeredByAiInsightId). Answer each query independently so the
177
+ * two caps can be driven apart.
178
+ */
179
+ function mockRunningCounts(counts: {
180
+ total: number;
181
+ triage: number;
182
+ }): jest.SpyInstance {
183
+ return jest
184
+ .spyOn(AIRunService, "countBy")
185
+ .mockImplementation((data: unknown): Promise<PositiveNumber> => {
186
+ const query: Record<string, unknown> =
187
+ ((data as { query?: Record<string, unknown> }).query as Record<
188
+ string,
189
+ unknown
190
+ >) || {};
191
+
192
+ const isTriageLaneQuery: boolean =
193
+ query["triggeredByAiInsightId"] !== undefined;
194
+
195
+ return Promise.resolve(
196
+ new PositiveNumber(isTriageLaneQuery ? counts.triage : counts.total),
197
+ );
198
+ });
199
+ }
200
+
201
+ beforeEach(() => {
202
+ mockBudget(false);
203
+ jest.spyOn(AIRunService, "attemptStatusTransition").mockResolvedValue(1);
204
+ });
205
+
206
+ afterEach(() => {
207
+ jest.restoreAllMocks();
208
+ });
209
+
210
+ test("the reserved slot is real: with the triage lane full (2 of cap 3), an incident investigation still claims and dispatches", async () => {
211
+ mockCap(3);
212
+ // Both running investigations are triage runs — the lane's sub-cap.
213
+ mockRunningCounts({ total: 2, triage: 2 });
214
+ const claim: jest.SpyInstance = jest.spyOn(
215
+ AIRunService,
216
+ "attemptStatusTransition",
217
+ );
218
+ const executeInvestigation: jest.SpyInstance = jest
219
+ .spyOn(AIIncidentInvestigationRunner, "executeInvestigation")
220
+ .mockResolvedValue(undefined);
221
+
222
+ const incidentId: ObjectID = ObjectID.generate();
223
+
224
+ await AIInvestigationQueue.processRun({
225
+ id: ObjectID.generate(),
226
+ projectId,
227
+ attemptCount: 0,
228
+ triggeredByIncidentId: incidentId,
229
+ });
230
+
231
+ expect(claim).toHaveBeenCalledWith(
232
+ expect.objectContaining({ fromStatus: AIRunStatus.Queued }),
233
+ );
234
+ expect(executeInvestigation).toHaveBeenCalledWith(
235
+ expect.objectContaining({ incidentId, attemptCount: 1 }),
236
+ );
237
+ });
238
+
239
+ test("a triage run at the lane sub-cap is left Queued — the claim is never even attempted", async () => {
240
+ mockCap(3);
241
+ // 2 triage running = cap(3) - RESERVED(1): the lane is full.
242
+ mockRunningCounts({ total: 2, triage: 3 - INSIGHT_TRIAGE_RESERVED_SLOTS });
243
+ const claim: jest.SpyInstance = jest.spyOn(
244
+ AIRunService,
245
+ "attemptStatusTransition",
246
+ );
247
+ const executeTriage: jest.SpyInstance = jest.spyOn(
248
+ InsightTriageRunner,
249
+ "executeTriage",
250
+ );
251
+
252
+ await AIInvestigationQueue.processRun({
253
+ id: ObjectID.generate(),
254
+ projectId,
255
+ attemptCount: 0,
256
+ triggeredByAiInsightId: ObjectID.generate(),
257
+ });
258
+
259
+ // Left Queued for the poller/TTL — never claimed, never executed.
260
+ expect(claim).not.toHaveBeenCalled();
261
+ expect(executeTriage).not.toHaveBeenCalled();
262
+ });
263
+
264
+ test("triage still runs while under the lane sub-cap — the sub-cap throttles, it does not disable", async () => {
265
+ mockCap(3);
266
+ mockRunningCounts({ total: 1, triage: 1 });
267
+ const executeTriage: jest.SpyInstance = jest
268
+ .spyOn(InsightTriageRunner, "executeTriage")
269
+ .mockResolvedValue(undefined);
270
+
271
+ await AIInvestigationQueue.processRun({
272
+ id: ObjectID.generate(),
273
+ projectId,
274
+ attemptCount: 0,
275
+ triggeredByAiInsightId: ObjectID.generate(),
276
+ });
277
+
278
+ expect(executeTriage).toHaveBeenCalledWith(
279
+ expect.objectContaining({ attemptCount: 1 }),
280
+ );
281
+ });
282
+
283
+ test("a project pinned to the minimum cap of 1 still triages — the lane floor is 1, not 0 (no deadlock)", async () => {
284
+ mockCap(1);
285
+ mockRunningCounts({ total: 0, triage: 0 });
286
+ const executeTriage: jest.SpyInstance = jest
287
+ .spyOn(InsightTriageRunner, "executeTriage")
288
+ .mockResolvedValue(undefined);
289
+
290
+ await AIInvestigationQueue.processRun({
291
+ id: ObjectID.generate(),
292
+ projectId,
293
+ attemptCount: 0,
294
+ triggeredByAiInsightId: ObjectID.generate(),
295
+ });
296
+
297
+ expect(executeTriage).toHaveBeenCalled();
298
+ });
299
+
300
+ test("interactive gating is unchanged when no insight runs exist: one global count query, no lane query, and the run claims", async () => {
301
+ mockCap(3);
302
+ const countBy: jest.SpyInstance = mockRunningCounts({
303
+ total: 0,
304
+ triage: 0,
305
+ });
306
+ const executeInvestigation: jest.SpyInstance = jest
307
+ .spyOn(AIIncidentInvestigationRunner, "executeInvestigation")
308
+ .mockResolvedValue(undefined);
309
+
310
+ await AIInvestigationQueue.processRun({
311
+ id: ObjectID.generate(),
312
+ projectId,
313
+ attemptCount: 0,
314
+ triggeredByIncidentId: ObjectID.generate(),
315
+ });
316
+
317
+ expect(executeInvestigation).toHaveBeenCalled();
318
+ // The lane sub-cap query is only paid for by the lane it caps.
319
+ expect(countBy).toHaveBeenCalledTimes(1);
320
+ expect(countBy).toHaveBeenCalledWith(
321
+ expect.objectContaining({
322
+ query: expect.not.objectContaining({
323
+ triggeredByAiInsightId: expect.anything(),
324
+ }),
325
+ }),
326
+ );
327
+ });
328
+ });