@oneuptime/common 11.5.3 → 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 (513) 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/Dashboard.ts +3 -3
  6. package/Models/DatabaseModels/GlobalConfig.ts +105 -0
  7. package/Models/DatabaseModels/Index.ts +4 -8
  8. package/Models/DatabaseModels/InstanceHealthLog.ts +277 -0
  9. package/Models/DatabaseModels/LlmLog.ts +33 -0
  10. package/Models/DatabaseModels/Project.ts +123 -6
  11. package/Models/DatabaseModels/Runbook.ts +1 -1
  12. package/Server/API/AIAgentDataAPI.ts +802 -140
  13. package/Server/API/AIAgentTaskAPI.ts +132 -69
  14. package/Server/API/AIAgentTaskLogAPI.ts +65 -41
  15. package/Server/API/AIAgentTaskPullRequestAPI.ts +41 -0
  16. package/Server/API/AIInsightAPI.ts +220 -0
  17. package/Server/API/AIInvestigationAPI.ts +363 -1
  18. package/Server/API/CodeFixRunAPI.ts +251 -0
  19. package/Server/API/GitHubAPI.ts +246 -3
  20. package/Server/API/TelemetryExceptionAPI.ts +193 -48
  21. package/Server/EnvironmentConfig.ts +1 -1
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.ts +26 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.ts +73 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.ts +29 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.ts +31 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.ts +51 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.ts +25 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.ts +47 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.ts +53 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.ts +31 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.ts +37 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.ts +25 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.ts +75 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.ts +37 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.ts +203 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.ts +163 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +30 -0
  38. package/Server/Infrastructure/Queue.ts +82 -4
  39. package/Server/Infrastructure/Semaphore.ts +62 -1
  40. package/Server/Services/AIAgentService.ts +32 -0
  41. package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
  42. package/Server/Services/AIInsightService.ts +174 -0
  43. package/Server/Services/AIRunEventService.ts +63 -0
  44. package/Server/Services/AIRunService.ts +259 -1
  45. package/Server/Services/AIService.ts +249 -7
  46. package/Server/Services/AlertService.ts +4 -4
  47. package/Server/Services/CodeRepositoryService.ts +209 -0
  48. package/Server/Services/DashboardService.ts +11 -2
  49. package/Server/Services/GlobalConfigService.ts +148 -0
  50. package/Server/Services/IncidentService.ts +183 -38
  51. package/Server/Services/IncidentStateTimelineService.ts +24 -4
  52. package/Server/Services/Index.ts +4 -4
  53. package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
  54. package/Server/Services/LlmLogService.ts +27 -0
  55. package/Server/Services/LlmProviderService.ts +108 -0
  56. package/Server/Services/MetricBaselineService.ts +123 -0
  57. package/Server/Services/MonitorService.ts +15 -0
  58. package/Server/Services/TelemetryExceptionService.ts +323 -116
  59. package/Server/Services/TraceAggregationService.ts +176 -0
  60. package/Server/Types/Workflow/ComponentCode.ts +6 -0
  61. package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
  62. package/Server/Types/Workflow/Components/Index.ts +2 -0
  63. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
  64. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
  65. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
  66. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
  67. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
  68. package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
  69. package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
  70. package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
  71. package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
  72. package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
  73. package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
  74. package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
  75. package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
  76. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
  77. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
  78. package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
  79. package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
  80. package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
  81. package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
  82. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
  83. package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
  84. package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
  85. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
  86. package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
  87. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
  88. package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
  89. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
  90. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
  91. package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
  92. package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
  93. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
  94. package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
  95. package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
  96. package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
  97. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
  98. package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
  99. package/Server/Utils/AI/Toolbox/Index.ts +2 -2
  100. package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
  101. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
  102. package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
  103. package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
  104. package/Server/Utils/Execute.ts +34 -13
  105. package/Server/Utils/LLM/LLMService.ts +160 -30
  106. package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
  107. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
  108. package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +225 -0
  109. package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
  110. package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
  111. package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
  112. package/Tests/Server/Services/AIInsightService.test.ts +324 -0
  113. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
  114. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
  115. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
  116. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
  117. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
  118. package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
  119. package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
  120. package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
  121. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
  122. package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
  123. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
  124. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
  125. package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
  126. package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
  127. package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
  128. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
  129. package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
  130. package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
  131. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
  132. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
  133. package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
  134. package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
  135. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
  136. package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
  137. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
  138. package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
  139. package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
  140. package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
  141. package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
  142. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
  143. package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
  144. package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
  145. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
  146. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
  147. package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
  148. package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
  149. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
  150. package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
  151. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
  152. package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
  153. package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
  154. package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
  155. package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
  156. package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
  157. package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
  158. package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
  159. package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
  160. package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
  161. package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
  162. package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
  163. package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
  164. package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
  165. package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
  166. package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
  167. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
  168. package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
  169. package/Types/AI/AIChatTypes.ts +8 -0
  170. package/Types/AI/AIInsightEvidence.ts +77 -0
  171. package/Types/AI/AIInsightHumanVerdict.ts +15 -0
  172. package/Types/AI/AIInsightSeverity.ts +13 -0
  173. package/Types/AI/AIInsightStatus.ts +38 -0
  174. package/Types/AI/AIInsightType.ts +41 -0
  175. package/Types/AI/AIRunAutoGrade.ts +18 -0
  176. package/Types/AI/AIRunEventType.ts +5 -0
  177. package/Types/AI/AIRunHumanVerdict.ts +17 -0
  178. package/Types/AI/AIRunType.ts +6 -0
  179. package/Types/AI/CodeFixTaskContext.ts +88 -0
  180. package/Types/AI/CodeFixTaskType.ts +132 -0
  181. package/Types/AI/FixPullRequestCiStatus.ts +132 -0
  182. package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
  183. package/Types/Incident/IncidentMetricType.ts +7 -0
  184. package/Types/Monitor/CriteriaFilter.ts +8 -0
  185. package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
  186. package/Types/Monitor/MonitorStep.ts +38 -0
  187. package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
  188. package/Types/Monitor/MonitorType.ts +17 -0
  189. package/Types/Monitor/SqlDatabaseType.ts +49 -0
  190. package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
  191. package/Types/Permission.ts +11 -95
  192. package/Types/Probe/ProbeMonitorResponse.ts +2 -0
  193. package/Types/Runbook/RunbookStep.ts +26 -2
  194. package/Types/Runbook/RunbookStepType.ts +1 -0
  195. package/Types/Workflow/Component.ts +13 -0
  196. package/Types/Workflow/ComponentID.ts +1 -0
  197. package/Types/Workflow/Components/AI.ts +148 -0
  198. package/Types/Workflow/Components.ts +8 -0
  199. package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
  200. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
  201. package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
  202. package/UI/Components/Table/Table.tsx +38 -2
  203. package/UI/Utils/TableColumnsToCsv.ts +385 -0
  204. package/Utils/Monitor/MonitorMetricType.ts +1 -0
  205. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
  206. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  207. package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
  208. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
  209. package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
  210. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  211. package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
  212. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/Dashboard.js +3 -3
  214. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
  216. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/Index.js +4 -8
  218. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
  220. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
  221. package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
  222. package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/Project.js +127 -6
  224. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  225. package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
  226. package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
  227. package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
  228. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  229. package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
  230. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  231. package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
  232. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  233. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
  234. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
  235. package/build/dist/Server/API/AIInsightAPI.js +140 -0
  236. package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
  237. package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
  238. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  239. package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
  240. package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
  241. package/build/dist/Server/API/GitHubAPI.js +164 -2
  242. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  243. package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
  244. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  245. package/build/dist/Server/EnvironmentConfig.js +1 -1
  246. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  247. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
  248. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
  249. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
  250. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
  251. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
  252. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
  253. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
  254. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
  255. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
  256. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
  257. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
  258. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
  259. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
  260. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
  261. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
  262. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
  263. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
  264. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
  265. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
  266. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
  267. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
  268. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
  269. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
  270. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
  271. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
  272. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
  273. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
  274. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
  275. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
  276. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
  277. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +30 -0
  278. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  279. package/build/dist/Server/Infrastructure/Queue.js +73 -3
  280. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  281. package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
  282. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  283. package/build/dist/Server/Services/AIAgentService.js +29 -0
  284. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  285. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
  286. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
  287. package/build/dist/Server/Services/AIInsightService.js +164 -0
  288. package/build/dist/Server/Services/AIInsightService.js.map +1 -0
  289. package/build/dist/Server/Services/AIRunEventService.js +49 -0
  290. package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
  291. package/build/dist/Server/Services/AIRunService.js +221 -0
  292. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  293. package/build/dist/Server/Services/AIService.js +198 -11
  294. package/build/dist/Server/Services/AIService.js.map +1 -1
  295. package/build/dist/Server/Services/AlertService.js +4 -4
  296. package/build/dist/Server/Services/AlertService.js.map +1 -1
  297. package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
  298. package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
  299. package/build/dist/Server/Services/DashboardService.js +8 -2
  300. package/build/dist/Server/Services/DashboardService.js.map +1 -1
  301. package/build/dist/Server/Services/GlobalConfigService.js +84 -0
  302. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  303. package/build/dist/Server/Services/IncidentService.js +149 -37
  304. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  305. package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
  306. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  307. package/build/dist/Server/Services/Index.js +4 -4
  308. package/build/dist/Server/Services/Index.js.map +1 -1
  309. package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
  310. package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
  311. package/build/dist/Server/Services/LlmLogService.js +23 -0
  312. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  313. package/build/dist/Server/Services/LlmProviderService.js +96 -0
  314. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  315. package/build/dist/Server/Services/MetricBaselineService.js +65 -0
  316. package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
  317. package/build/dist/Server/Services/MonitorService.js +9 -1
  318. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  319. package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
  320. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  321. package/build/dist/Server/Services/TraceAggregationService.js +124 -0
  322. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  323. package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
  324. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
  325. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
  326. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  327. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  328. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
  329. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
  330. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
  331. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
  332. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
  333. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
  334. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
  335. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
  336. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
  337. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
  338. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
  339. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
  340. package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
  341. package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
  342. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
  343. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
  344. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
  345. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
  346. package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
  347. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
  348. package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
  349. package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
  350. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
  351. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
  352. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
  353. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
  354. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
  355. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
  356. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
  357. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
  358. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
  359. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
  360. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
  361. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
  362. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
  363. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
  364. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
  365. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
  366. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
  367. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
  368. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
  369. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
  370. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
  371. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
  372. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
  373. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
  374. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
  375. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
  376. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
  377. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
  378. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
  379. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
  380. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
  381. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
  382. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
  383. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
  384. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
  385. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
  386. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
  387. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
  388. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
  389. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
  390. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
  391. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
  392. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
  393. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
  394. package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
  395. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
  396. package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
  397. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  398. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
  399. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
  400. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
  401. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  402. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
  403. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
  404. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
  405. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
  406. package/build/dist/Server/Utils/Execute.js +21 -11
  407. package/build/dist/Server/Utils/Execute.js.map +1 -1
  408. package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
  409. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  410. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
  411. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
  412. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
  413. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  414. package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
  415. package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
  416. package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
  417. package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
  418. package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
  419. package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
  420. package/build/dist/Types/AI/AIInsightStatus.js +36 -0
  421. package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
  422. package/build/dist/Types/AI/AIInsightType.js +42 -0
  423. package/build/dist/Types/AI/AIInsightType.js.map +1 -0
  424. package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
  425. package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
  426. package/build/dist/Types/AI/AIRunEventType.js +5 -0
  427. package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
  428. package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
  429. package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
  430. package/build/dist/Types/AI/AIRunType.js +6 -0
  431. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  432. package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
  433. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
  434. package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
  435. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
  436. package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
  437. package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
  438. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
  439. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
  440. package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
  441. package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
  442. package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
  443. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  444. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
  445. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  446. package/build/dist/Types/Monitor/MonitorStep.js +28 -0
  447. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  448. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
  449. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
  450. package/build/dist/Types/Monitor/MonitorType.js +15 -0
  451. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  452. package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
  453. package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
  454. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
  455. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
  456. package/build/dist/Types/Permission.js +10 -84
  457. package/build/dist/Types/Permission.js.map +1 -1
  458. package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
  459. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  460. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  461. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  462. package/build/dist/Types/Workflow/Components/AI.js +135 -0
  463. package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
  464. package/build/dist/Types/Workflow/Components.js +7 -0
  465. package/build/dist/Types/Workflow/Components.js.map +1 -1
  466. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
  467. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  468. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
  469. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  470. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
  471. package/build/dist/UI/Components/Table/Table.js +28 -2
  472. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  473. package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
  474. package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
  475. package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
  476. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  477. package/package.json +1 -1
  478. package/Models/DatabaseModels/AIAgentTask.ts +0 -660
  479. package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
  480. package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
  481. package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
  482. package/Server/Services/AIAgentTaskService.ts +0 -240
  483. package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
  484. package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
  485. package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
  486. package/Types/AI/AIAgentTaskMetadata.ts +0 -25
  487. package/Types/AI/AIAgentTaskType.ts +0 -40
  488. package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
  489. package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
  490. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
  491. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
  492. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
  493. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
  494. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
  495. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
  496. package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
  497. package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
  498. package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
  499. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
  500. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
  501. package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
  502. package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
  503. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
  504. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
  505. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
  506. package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
  507. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
  508. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
  509. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
  510. package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
  511. package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
  512. package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
  513. package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ import ObjectID from "../../../../../Types/ObjectID";
2
+ import AIInsightType from "../../../../../Types/AI/AIInsightType";
3
+ import AIInsightSeverity from "../../../../../Types/AI/AIInsightSeverity";
4
+ import AIInsightEvidence from "../../../../../Types/AI/AIInsightEvidence";
5
+
6
+ /*
7
+ * AI Insights — detector contracts.
8
+ *
9
+ * THE RULE: no LLM in the watch loop. Detectors are deterministic
10
+ * statistical sensors — they compare counts, percentiles and means against
11
+ * the project's own baselines and emit candidates with the evidence already
12
+ * computed. The LLM only engages per-finding AFTERWARDS (budgeted, read-only
13
+ * triage), and the decision to open a fix task is deterministic too
14
+ * (readiness/evidence-based, never LLM-decided).
15
+ */
16
+
17
+ // What the scanner hands every detector for one project's scan tick.
18
+ export interface InsightScanContext {
19
+ projectId: ObjectID;
20
+ // The scan tick's single clock — all windows are computed from this.
21
+ now: Date;
22
+ }
23
+
24
+ /*
25
+ * One deterministic finding a detector emits. The scanner turns candidates
26
+ * into AIInsight rows (or refreshes the existing non-terminal insight
27
+ * with the same fingerprint).
28
+ */
29
+ export interface InsightCandidate {
30
+ insightType: AIInsightType;
31
+ // Stable dedupe key, e.g. "new-exception:<telemetryExceptionId>".
32
+ fingerprint: string;
33
+ title: string;
34
+ // The evidence rendered as markdown — real numbers, no LLM output.
35
+ detailMarkdown: string;
36
+ severity: AIInsightSeverity;
37
+ serviceName?: string | undefined;
38
+ telemetryServiceId?: ObjectID | undefined;
39
+ telemetryExceptionId?: ObjectID | undefined;
40
+ traceId?: string | undefined;
41
+ metricName?: string | undefined;
42
+ evidence: AIInsightEvidence;
43
+ }
44
+
45
+ // One deterministic sensor. Implementations live in ./Detectors/.
46
+ export interface InsightDetector {
47
+ insightType: AIInsightType;
48
+ detect(context: InsightScanContext): Promise<Array<InsightCandidate>>;
49
+ }
@@ -0,0 +1,212 @@
1
+ import ObjectID from "../../../../Types/ObjectID";
2
+ import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
3
+ import AIRun from "../../../../Models/DatabaseModels/AIRun";
4
+ import Project from "../../../../Models/DatabaseModels/Project";
5
+ import ProjectService from "../../../Services/ProjectService";
6
+ import SubjectCodeFixRun from "./SubjectCodeFixRun";
7
+ import FixRunBudget, { FixRunBudgetDecision } from "../CodeFix/FixRunBudget";
8
+ import logger from "../../Logger";
9
+ import CaptureSpan from "../../Telemetry/CaptureSpan";
10
+
11
+ /*
12
+ * AI SRE — the ImproveInstrumentation trigger.
13
+ *
14
+ * When an investigation finishes INCONCLUSIVE — per the structured G6
15
+ * confidence signal (ConfidenceSignal.ts), never the analysis prose — the
16
+ * telemetry itself is the bug: the code paths involved were not observable
17
+ * enough to diagnose. For projects that opted in
18
+ * (Project.enableInstrumentationFixTasks, default FALSE — G11 posture:
19
+ * autonomous PR creation is opt-in only), the inconclusive analysis becomes
20
+ * the input to a CodeFix AIRun (codeFixTaskType: ImproveInstrumentation)
21
+ * that the agent worker turns into a pull request adding the missing
22
+ * observability — so the NEXT investigation of a similar signal can reach a
23
+ * conclusion.
24
+ *
25
+ * Called from the investigation runners' postAnalysis, strictly AFTER the
26
+ * analysis is posted; this trigger never throws, so a failed enqueue can
27
+ * never fail (or duplicate) the investigation itself.
28
+ */
29
+
30
+ export interface InstrumentationTaskGateInput {
31
+ // The project row with enableAi + enableInstrumentationFixTasks selected.
32
+ project: Project | null;
33
+ // Whether the project has at least one GitHub-App-connected repository.
34
+ hasConnectedRepository: boolean;
35
+ // A non-terminal ImproveInstrumentation run for the same subject, if any.
36
+ existingRun: AIRun | null;
37
+ }
38
+
39
+ export interface InstrumentationTaskGateDecision {
40
+ enqueue: boolean;
41
+ // Human-readable reason recorded in the debug log when skipping.
42
+ reason: string;
43
+ }
44
+
45
+ export default class InstrumentationTaskTrigger {
46
+ /*
47
+ * The pure trigger decision, separated from IO so it can be tested
48
+ * directly: opt-in (default FALSE), a repository the agent can actually
49
+ * open a PR against, and the per-subject dedupe guard.
50
+ */
51
+ public static shouldEnqueueInstrumentationTask(
52
+ input: InstrumentationTaskGateInput,
53
+ ): InstrumentationTaskGateDecision {
54
+ if (!input.project) {
55
+ return { enqueue: false, reason: "project not found" };
56
+ }
57
+
58
+ if (input.project.enableAi === false) {
59
+ return { enqueue: false, reason: "AI is disabled for the project" };
60
+ }
61
+
62
+ /*
63
+ * Strict opt-in — the column defaults to false, so unset/legacy rows
64
+ * never enqueue. Autonomous PR creation must never be default-on.
65
+ */
66
+ if (input.project.enableInstrumentationFixTasks !== true) {
67
+ return {
68
+ enqueue: false,
69
+ reason: "project has not opted in to instrumentation fix tasks",
70
+ };
71
+ }
72
+
73
+ if (!input.hasConnectedRepository) {
74
+ return {
75
+ enqueue: false,
76
+ reason: "project has no GitHub-App-connected repository",
77
+ };
78
+ }
79
+
80
+ /*
81
+ * Dedupe: at most one non-terminal ImproveInstrumentation run per
82
+ * incident/alert — repeated inconclusive attempts on the same subject
83
+ * must not fan out into duplicate PRs.
84
+ */
85
+ if (input.existingRun) {
86
+ return {
87
+ enqueue: false,
88
+ reason:
89
+ "a non-terminal ImproveInstrumentation run already exists for this subject",
90
+ };
91
+ }
92
+
93
+ return {
94
+ enqueue: true,
95
+ reason: "passed opt-in, repository and dedupe gates",
96
+ };
97
+ }
98
+
99
+ /*
100
+ * Record the durable intent as a Queued CodeFix AIRun that the external
101
+ * agent worker claims via /ai-agent-task/get-pending-task. Exactly one of
102
+ * incidentId/alertId is expected (the investigation's subject). NEVER
103
+ * throws — every failure is logged and swallowed, because this runs
104
+ * inside the investigation's postAnalysis and must not fail it.
105
+ */
106
+ @CaptureSpan()
107
+ public static async enqueueForInconclusiveInvestigation(data: {
108
+ projectId: ObjectID;
109
+ incidentId?: ObjectID | undefined;
110
+ alertId?: ObjectID | undefined;
111
+ }): Promise<void> {
112
+ const { projectId } = data;
113
+
114
+ try {
115
+ if (!data.incidentId && !data.alertId) {
116
+ return;
117
+ }
118
+
119
+ const project: Project | null = await ProjectService.findOneById({
120
+ id: projectId,
121
+ select: {
122
+ enableAi: true,
123
+ enableInstrumentationFixTasks: true,
124
+ },
125
+ props: { isRoot: true },
126
+ });
127
+
128
+ /*
129
+ * Cheapest gate first: skip the repository count for the (default)
130
+ * not-opted-in case.
131
+ */
132
+ const optInDecision: InstrumentationTaskGateDecision =
133
+ this.shouldEnqueueInstrumentationTask({
134
+ project,
135
+ hasConnectedRepository: true,
136
+ existingRun: null,
137
+ });
138
+
139
+ if (!optInDecision.enqueue) {
140
+ logger.debug(
141
+ `AI: not enqueueing instrumentation task for project ${projectId.toString()} — ${optInDecision.reason}.`,
142
+ );
143
+ return;
144
+ }
145
+
146
+ /*
147
+ * G11 guardrail: the per-project daily fix-run budget. For this
148
+ * AUTOMATIC trigger, over-budget is a logged skip — never an error
149
+ * thrown into the investigation (enqueueSubjectCodeFixRun would
150
+ * throw the same rejection, but that lands in the catch below as an
151
+ * error log; a budget skip is expected behavior, not a failure).
152
+ */
153
+ const budget: FixRunBudgetDecision =
154
+ await FixRunBudget.getBudgetStatus(projectId);
155
+
156
+ if (!budget.allowed) {
157
+ logger.debug(
158
+ `AI: not enqueueing instrumentation task for project ${projectId.toString()} — ${FixRunBudget.describeRejection(budget)}`,
159
+ );
160
+ return;
161
+ }
162
+
163
+ /*
164
+ * Repository + per-subject dedupe checks are the enqueue idiom shared
165
+ * with the FixFromIncident sibling — see SubjectCodeFixRun.
166
+ */
167
+ const hasConnectedRepository: boolean =
168
+ await SubjectCodeFixRun.hasGitHubAppConnectedRepository(projectId);
169
+
170
+ const existingRun: AIRun | null =
171
+ await SubjectCodeFixRun.findNonTerminalRunForSubject({
172
+ taskType: CodeFixTaskType.ImproveInstrumentation,
173
+ incidentId: data.incidentId,
174
+ alertId: data.alertId,
175
+ });
176
+
177
+ const decision: InstrumentationTaskGateDecision =
178
+ this.shouldEnqueueInstrumentationTask({
179
+ project,
180
+ hasConnectedRepository,
181
+ existingRun,
182
+ });
183
+
184
+ if (!decision.enqueue) {
185
+ logger.debug(
186
+ `AI: not enqueueing instrumentation task for project ${projectId.toString()} — ${decision.reason}.`,
187
+ );
188
+ return;
189
+ }
190
+
191
+ const createdRun: AIRun =
192
+ await SubjectCodeFixRun.enqueueSubjectCodeFixRun({
193
+ projectId,
194
+ taskType: CodeFixTaskType.ImproveInstrumentation,
195
+ incidentId: data.incidentId,
196
+ alertId: data.alertId,
197
+ });
198
+
199
+ logger.debug(
200
+ `AI: enqueued ImproveInstrumentation run ${createdRun.id?.toString()} for ${
201
+ data.incidentId
202
+ ? `incident ${data.incidentId.toString()}`
203
+ : `alert ${data.alertId?.toString()}`
204
+ } after an inconclusive investigation.`,
205
+ );
206
+ } catch (error) {
207
+ logger.error(
208
+ `AI: failed to enqueue instrumentation task for project ${projectId.toString()}: ${error}`,
209
+ );
210
+ }
211
+ }
212
+ }
@@ -0,0 +1,282 @@
1
+ import ObjectID from "../../../../Types/ObjectID";
2
+ import OneUptimeDate from "../../../../Types/Date";
3
+ import AIRunType from "../../../../Types/AI/AIRunType";
4
+ import AIRunStatus from "../../../../Types/AI/AIRunStatus";
5
+ import AIRunAutoGrade from "../../../../Types/AI/AIRunAutoGrade";
6
+ import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
7
+ import AIRun from "../../../../Models/DatabaseModels/AIRun";
8
+ import Incident from "../../../../Models/DatabaseModels/Incident";
9
+ import IncidentFeed, {
10
+ IncidentFeedEventType,
11
+ } from "../../../../Models/DatabaseModels/IncidentFeed";
12
+ import AIRunService from "../../../Services/AIRunService";
13
+ import IncidentService from "../../../Services/IncidentService";
14
+ import IncidentFeedService from "../../../Services/IncidentFeedService";
15
+ import AIService, {
16
+ AILogResponse,
17
+ AI_INVESTIGATION_GRADING_FEATURE,
18
+ } from "../../../Services/AIService";
19
+ import logger from "../../Logger";
20
+ import CaptureSpan from "../../Telemetry/CaptureSpan";
21
+
22
+ /*
23
+ * AI SRE — on-resolve investigation grading (Phase 2 measurement layer).
24
+ *
25
+ * When an incident resolves with a human-recorded root cause AND a completed
26
+ * AI investigation exists for it, ONE constrained LLM call compares the
27
+ * investigation's posted analysis (the RootCause feed item — the only
28
+ * persisted copy, the same source the fix recipes read) with
29
+ * Incident.rootCause and stores MATCH / PARTIAL / MISMATCH on the run
30
+ * (AIRun.autoGrade + autoGradeAt). This feeds the vision §8 accuracy metrics
31
+ * and the G3 eval work.
32
+ *
33
+ * Trigger idiom mirrors IncidentPostmortemRunner: fired (fire-and-forget)
34
+ * from IncidentStateTimelineService when the incident enters a resolved
35
+ * state; never throws, never blocks the resolve. Deduped via autoGrade — a
36
+ * run is graded at most once. Budgeted: the feature is in
37
+ * AUTONOMOUS_AI_FEATURES, so the daily autonomous token budget covers it.
38
+ *
39
+ * Incidents only for now: alerts do have a rootCause column, but no
40
+ * human-authored resolution flow populates it the way incident resolution
41
+ * does — grade quality there is unproven, so the alert side is deliberately
42
+ * skipped (noted in the roadmap).
43
+ */
44
+
45
+ /*
46
+ * Persisted LlmLog label. Owned by AIService so this writer and the G4 budget
47
+ * match-list (AUTONOMOUS_AI_FEATURES) can never drift — a drift here would
48
+ * silently drop grading out of the daily budget forever.
49
+ */
50
+ const FEATURE_NAME: string = AI_INVESTIGATION_GRADING_FEATURE;
51
+
52
+ // Truncation caps keep the comparison call cheap and inside context limits.
53
+ const MAX_ANALYSIS_CHARS: number = 8000;
54
+ const MAX_ROOT_CAUSE_CHARS: number = 2000;
55
+
56
+ // Word-bounded token matchers (hoisted: wrap-regex and prettier disagree inline).
57
+ const MISMATCH_RE: RegExp = /\bMISMATCH\b/;
58
+ const PARTIAL_RE: RegExp = /\bPARTIAL\b/;
59
+ const MATCH_RE: RegExp = /\bMATCH\b/;
60
+
61
+ export interface GradeGateInput {
62
+ run: {
63
+ id?: ObjectID | null | undefined;
64
+ autoGrade?: AIRunAutoGrade | undefined;
65
+ } | null;
66
+ rootCause: string | null | undefined;
67
+ }
68
+
69
+ export default class InvestigationGrader {
70
+ /*
71
+ * Pure gating decision (exported for tests): grade only when a completed
72
+ * investigation run exists, it has not been graded yet (dedupe), and the
73
+ * incident carries a non-empty human-recorded root cause to grade against.
74
+ */
75
+ public static shouldGradeInvestigation(data: GradeGateInput): boolean {
76
+ if (!data.run || !data.run.id) {
77
+ return false;
78
+ }
79
+
80
+ if (data.run.autoGrade) {
81
+ // Dedupe: a run is graded at most once.
82
+ return false;
83
+ }
84
+
85
+ if (!data.rootCause || data.rootCause.trim().length === 0) {
86
+ return false;
87
+ }
88
+
89
+ return true;
90
+ }
91
+
92
+ /*
93
+ * Defensive one-token parse (pure, exported for tests). The prompt demands
94
+ * exactly one token, but models editorialize — accept the verdict when
95
+ * exactly ONE of the three tokens appears in the response, word-bounded so
96
+ * the MATCH inside MISMATCH does not double-count. None found, or more
97
+ * than one distinct token → unparseable → null (no grade stored).
98
+ */
99
+ public static parseAutoGradeToken(
100
+ response: string | null | undefined,
101
+ ): AIRunAutoGrade | null {
102
+ if (!response) {
103
+ return null;
104
+ }
105
+
106
+ const text: string = response.toUpperCase();
107
+
108
+ const found: Array<AIRunAutoGrade> = [];
109
+
110
+ if (MISMATCH_RE.test(text)) {
111
+ found.push(AIRunAutoGrade.Mismatch);
112
+ }
113
+
114
+ if (PARTIAL_RE.test(text)) {
115
+ found.push(AIRunAutoGrade.Partial);
116
+ }
117
+
118
+ if (MATCH_RE.test(text)) {
119
+ found.push(AIRunAutoGrade.Match);
120
+ }
121
+
122
+ if (found.length !== 1) {
123
+ return null;
124
+ }
125
+
126
+ return found[0]!;
127
+ }
128
+
129
+ /*
130
+ * Entry point called (fire-and-forget) from IncidentStateTimelineService
131
+ * when an incident enters a resolved state. Never throws — all failures
132
+ * are logged and swallowed so the resolve flow can never be affected.
133
+ */
134
+ @CaptureSpan()
135
+ public static async gradeInvestigationOnResolve(data: {
136
+ incidentId: ObjectID;
137
+ projectId: ObjectID;
138
+ }): Promise<void> {
139
+ const { incidentId, projectId } = data;
140
+
141
+ try {
142
+ // The latest completed investigation for this incident (if any).
143
+ const run: AIRun | null = await AIRunService.findOneBy({
144
+ query: {
145
+ runType: AIRunType.Investigation,
146
+ status: AIRunStatus.Completed,
147
+ triggeredByIncidentId: incidentId,
148
+ },
149
+ select: {
150
+ _id: true,
151
+ autoGrade: true,
152
+ },
153
+ sort: { createdAt: SortOrder.Descending },
154
+ props: { isRoot: true },
155
+ });
156
+
157
+ if (!run) {
158
+ // Nothing to grade — skip before loading anything else.
159
+ return;
160
+ }
161
+
162
+ const incident: Incident | null = await IncidentService.findOneById({
163
+ id: incidentId,
164
+ select: {
165
+ _id: true,
166
+ rootCause: true,
167
+ },
168
+ props: { isRoot: true },
169
+ });
170
+
171
+ if (
172
+ !this.shouldGradeInvestigation({
173
+ run,
174
+ rootCause: incident?.rootCause,
175
+ })
176
+ ) {
177
+ return;
178
+ }
179
+
180
+ /*
181
+ * The posted analysis: the latest RootCause feed item — the AI's
182
+ * postAnalysis is its only writer, and it is the only persisted copy
183
+ * of the analysis (the same source the fix recipes read).
184
+ */
185
+ const feedItem: IncidentFeed | null = await IncidentFeedService.findOneBy(
186
+ {
187
+ query: {
188
+ incidentId: incidentId,
189
+ incidentFeedEventType: IncidentFeedEventType.RootCause,
190
+ },
191
+ select: {
192
+ feedInfoInMarkdown: true,
193
+ },
194
+ sort: {
195
+ createdAt: SortOrder.Descending,
196
+ },
197
+ props: { isRoot: true },
198
+ },
199
+ );
200
+
201
+ const analysisMarkdown: string = (
202
+ feedItem?.feedInfoInMarkdown || ""
203
+ ).trim();
204
+
205
+ if (!analysisMarkdown) {
206
+ logger.debug(
207
+ `AI grading: no posted analysis found for incident ${incidentId.toString()} — skipping.`,
208
+ );
209
+ return;
210
+ }
211
+
212
+ const rootCause: string = incident!.rootCause!.trim();
213
+
214
+ const response: AILogResponse = await AIService.executeWithLogging({
215
+ projectId,
216
+ feature: FEATURE_NAME,
217
+ incidentId,
218
+ aiRunId: run.id!,
219
+ // Grades are stored on the run; no need to persist prompt previews.
220
+ storeContentPreviews: false,
221
+ temperature: 0,
222
+ maxTokens: 20,
223
+ messages: [
224
+ {
225
+ role: "system",
226
+ content: [
227
+ "You grade an AI incident investigation against the root cause humans recorded when they resolved the incident.",
228
+ "Respond with EXACTLY one token and nothing else:",
229
+ "MATCH — the investigation identified the same root cause.",
230
+ "PARTIAL — the investigation identified part of the cause, or a closely related cause.",
231
+ "MISMATCH — the investigation pointed somewhere else.",
232
+ ].join("\n"),
233
+ },
234
+ {
235
+ role: "user",
236
+ content: [
237
+ "Human-recorded root cause:",
238
+ '"""',
239
+ rootCause.substring(0, MAX_ROOT_CAUSE_CHARS),
240
+ '"""',
241
+ "",
242
+ "AI investigation analysis:",
243
+ '"""',
244
+ analysisMarkdown.substring(0, MAX_ANALYSIS_CHARS),
245
+ '"""',
246
+ "",
247
+ "One token only: MATCH, PARTIAL, or MISMATCH.",
248
+ ].join("\n"),
249
+ },
250
+ ],
251
+ });
252
+
253
+ const grade: AIRunAutoGrade | null = this.parseAutoGradeToken(
254
+ response.content,
255
+ );
256
+
257
+ if (!grade) {
258
+ logger.warn(
259
+ `AI grading: unparseable grade response for incident ${incidentId.toString()} (run ${run.id!.toString()}) — no grade stored.`,
260
+ );
261
+ return;
262
+ }
263
+
264
+ await AIRunService.updateOneById({
265
+ id: run.id!,
266
+ data: {
267
+ autoGrade: grade,
268
+ autoGradeAt: OneUptimeDate.getCurrentDate(),
269
+ },
270
+ props: { isRoot: true },
271
+ });
272
+
273
+ logger.debug(
274
+ `AI grading: incident ${incidentId.toString()} investigation graded ${grade}.`,
275
+ );
276
+ } catch (error) {
277
+ logger.error(
278
+ `AI grading: failed for incident ${incidentId.toString()}: ${error}`,
279
+ );
280
+ }
281
+ }
282
+ }