@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,220 @@
1
+ import UserMiddleware from "../Middleware/UserAuthorization";
2
+ import CommonAPI from "./CommonAPI";
3
+ import Express, {
4
+ ExpressRequest,
5
+ ExpressResponse,
6
+ ExpressRouter,
7
+ NextFunction,
8
+ } from "../Utils/Express";
9
+ import Response from "../Utils/Response";
10
+ import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
11
+ import ObjectID from "../../Types/ObjectID";
12
+ import BadDataException from "../../Types/Exception/BadDataException";
13
+ import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
14
+ import { JSONArray, JSONObject } from "../../Types/JSON";
15
+ import AIInsightStatus from "../../Types/AI/AIInsightStatus";
16
+ import AIInsightHumanVerdict from "../../Types/AI/AIInsightHumanVerdict";
17
+ import AIInsight from "../../Models/DatabaseModels/AIInsight";
18
+ import AIRun from "../../Models/DatabaseModels/AIRun";
19
+ import AIRunEvent from "../../Models/DatabaseModels/AIRunEvent";
20
+ import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
21
+ import AIInsightService from "../Services/AIInsightService";
22
+
23
+ const router: ExpressRouter = Express.getRouter();
24
+
25
+ /*
26
+ * Human-action endpoints for the AI insights inbox. Insight rows are
27
+ * server-authored (empty create/update table permissions) — humans act on
28
+ * them only through these routes: a one-click Confirm / Dismiss verdict
29
+ * (the G11 precision measurement), Resolve, and the live triage panel
30
+ * read. Each route access-checks the insight under the USER's permissions
31
+ * first (project membership + the AIInsight read ACL), then the
32
+ * service performs the root read/write — the AIInvestigationAPI idiom.
33
+ */
34
+
35
+ async function getLoggedInProps(
36
+ req: ExpressRequest,
37
+ ): Promise<DatabaseCommonInteractionProps> {
38
+ const props: DatabaseCommonInteractionProps =
39
+ await CommonAPI.getDatabaseCommonInteractionProps(req);
40
+
41
+ if (!props.userId) {
42
+ throw new NotAuthorizedException("A logged-in user session is required.");
43
+ }
44
+
45
+ return props;
46
+ }
47
+
48
+ /*
49
+ * Access check under the USER's permissions: the user props enforce project
50
+ * membership and the model's read ACL, so a null result means "does not
51
+ * exist or is not yours" — reported identically so the route never leaks
52
+ * whether an insight id exists in another project.
53
+ */
54
+ async function findAccessibleInsight(
55
+ req: ExpressRequest,
56
+ props: DatabaseCommonInteractionProps,
57
+ ): Promise<AIInsight> {
58
+ const insightIdString: string | undefined = req.body["insightId"] as
59
+ | string
60
+ | undefined;
61
+
62
+ if (!insightIdString) {
63
+ throw new BadDataException("insightId is required.");
64
+ }
65
+
66
+ const insight: AIInsight | null = await AIInsightService.findOneById({
67
+ id: new ObjectID(insightIdString),
68
+ select: { _id: true },
69
+ props,
70
+ });
71
+
72
+ if (!insight || !insight.id) {
73
+ throw new BadDataException(
74
+ "AI insight not found (or you do not have access to it).",
75
+ );
76
+ }
77
+
78
+ return insight;
79
+ }
80
+
81
+ /*
82
+ * One-click human verdict (the G11 precision measurement — confirm/dismiss
83
+ * rates per insight type gate future automation). Overwriting an existing
84
+ * verdict is allowed: the latest verdict wins. Dismissed also closes the
85
+ * insight; Confirmed leaves its status untouched.
86
+ * Body: { insightId, verdict: "Confirmed" | "Dismissed" }.
87
+ * Response: { insightId, verdict }.
88
+ */
89
+ router.post(
90
+ "/ai-insight/verdict",
91
+ UserMiddleware.getUserMiddleware,
92
+ async (
93
+ req: ExpressRequest,
94
+ res: ExpressResponse,
95
+ next: NextFunction,
96
+ ): Promise<void> => {
97
+ try {
98
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
99
+
100
+ const verdict: string | undefined = req.body["verdict"] as
101
+ | string
102
+ | undefined;
103
+
104
+ if (
105
+ verdict !== AIInsightHumanVerdict.Confirmed &&
106
+ verdict !== AIInsightHumanVerdict.Dismissed
107
+ ) {
108
+ throw new BadDataException(
109
+ 'verdict must be "Confirmed" or "Dismissed".',
110
+ );
111
+ }
112
+
113
+ const insight: AIInsight = await findAccessibleInsight(req, props);
114
+
115
+ const result: {
116
+ insightId: ObjectID;
117
+ verdict: AIInsightHumanVerdict;
118
+ } = await AIInsightService.applyHumanVerdict({
119
+ insightId: insight.id!,
120
+ verdict: verdict as AIInsightHumanVerdict,
121
+ byUserId: props.userId!,
122
+ });
123
+
124
+ Response.sendJsonObjectResponse(req, res, {
125
+ insightId: result.insightId.toString(),
126
+ verdict: result.verdict,
127
+ });
128
+ return;
129
+ } catch (err) {
130
+ next(err);
131
+ return;
132
+ }
133
+ },
134
+ );
135
+
136
+ /*
137
+ * Marks the insight handled. Resolving implies the finding was real: when
138
+ * no verdict was recorded yet, the service also stamps Confirmed.
139
+ * Body: { insightId }. Response: { insightId, status }.
140
+ */
141
+ router.post(
142
+ "/ai-insight/resolve",
143
+ UserMiddleware.getUserMiddleware,
144
+ async (
145
+ req: ExpressRequest,
146
+ res: ExpressResponse,
147
+ next: NextFunction,
148
+ ): Promise<void> => {
149
+ try {
150
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
151
+
152
+ const insight: AIInsight = await findAccessibleInsight(req, props);
153
+
154
+ const result: { insightId: ObjectID; status: AIInsightStatus } =
155
+ await AIInsightService.resolveInsight({
156
+ insightId: insight.id!,
157
+ byUserId: props.userId!,
158
+ });
159
+
160
+ Response.sendJsonObjectResponse(req, res, {
161
+ insightId: result.insightId.toString(),
162
+ status: result.status,
163
+ });
164
+ return;
165
+ } catch (err) {
166
+ next(err);
167
+ return;
168
+ }
169
+ },
170
+ );
171
+
172
+ /*
173
+ * Live triage panel data: the insight's triage AIRun + its ordered event
174
+ * trail (capped — see MAX_TRIAGE_RUN_EVENTS on the service). Triage runs
175
+ * are system-authored and hidden by the per-user pin on the generic AIRun
176
+ * CRUD, so after the access check the service reads them as root — the
177
+ * sendLatestInvestigation idiom. An insight without a triage run responds
178
+ * { run: null, events: [] }, not an error.
179
+ * Body: { insightId }. Response: { run, events }.
180
+ */
181
+ router.post(
182
+ "/ai-insight/triage-run",
183
+ UserMiddleware.getUserMiddleware,
184
+ async (
185
+ req: ExpressRequest,
186
+ res: ExpressResponse,
187
+ next: NextFunction,
188
+ ): Promise<void> => {
189
+ try {
190
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
191
+
192
+ const insight: AIInsight = await findAccessibleInsight(req, props);
193
+
194
+ const result: { run: AIRun | null; events: Array<AIRunEvent> } =
195
+ await AIInsightService.getLatestTriageRunWithEvents({
196
+ insightId: insight.id!,
197
+ });
198
+
199
+ const runJson: JSONObject | undefined = result.run
200
+ ? BaseModel.toJSONArray([result.run], AIRun)[0]
201
+ : undefined;
202
+
203
+ const eventsJson: JSONArray = BaseModel.toJSONArray(
204
+ result.events,
205
+ AIRunEvent,
206
+ );
207
+
208
+ Response.sendJsonObjectResponse(req, res, {
209
+ run: runJson || null,
210
+ events: eventsJson,
211
+ });
212
+ return;
213
+ } catch (err) {
214
+ next(err);
215
+ return;
216
+ }
217
+ },
218
+ );
219
+
220
+ export default router;
@@ -15,22 +15,38 @@ import SortOrder from "../../Types/BaseDatabase/SortOrder";
15
15
  import Query from "../../Types/BaseDatabase/Query";
16
16
  import { JSONArray, JSONObject } from "../../Types/JSON";
17
17
  import AIRunType from "../../Types/AI/AIRunType";
18
+ import AIRunHumanVerdict from "../../Types/AI/AIRunHumanVerdict";
18
19
  import AIRun from "../../Models/DatabaseModels/AIRun";
19
20
  import AIRunEvent from "../../Models/DatabaseModels/AIRunEvent";
20
21
  import Incident from "../../Models/DatabaseModels/Incident";
21
22
  import Alert from "../../Models/DatabaseModels/Alert";
23
+ import Service from "../../Models/DatabaseModels/Service";
24
+ import Span from "../../Models/AnalyticsModels/Span";
22
25
  import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
23
26
  import IncidentService from "../Services/IncidentService";
24
27
  import AlertService from "../Services/AlertService";
25
28
  import AIRunService from "../Services/AIRunService";
26
29
  import AIRunEventService from "../Services/AIRunEventService";
30
+ import ServiceService from "../Services/ServiceService";
31
+ import SpanService from "../Services/SpanService";
32
+ import FixFromIncidentTaskTrigger from "../Utils/AI/SRE/FixFromIncidentTaskTrigger";
33
+ import FixPerformanceTaskTrigger from "../Utils/AI/SRE/FixPerformanceTaskTrigger";
34
+ import { AnalyzableSpan } from "../Utils/AI/PerfEvidence/SpanTreeAnalyzer";
27
35
 
28
36
  const router: ExpressRouter = Express.getRouter();
29
37
 
38
+ /*
39
+ * Upper bound on spans analyzed for one performance-fix trigger — mirrors
40
+ * the trace waterfall's own cap (TraceTools.MAX_TRACE_SPANS). Findings are
41
+ * computed over the first 500 spans by start time; a truncated giant trace
42
+ * still yields honest evidence about the loaded portion.
43
+ */
44
+ const MAX_ANALYZED_TRACE_SPANS: number = 500;
45
+
30
46
  const MAX_EVENTS: number = 500;
31
47
 
32
48
  /*
33
- * Returns the latest Sentinel investigation (the AIRun + its ordered
49
+ * Returns the latest AI investigation (the AIRun + its ordered
34
50
  * AIRunEvents) for an incident or alert, so the dashboard can render a live
35
51
  * "watch it think" panel.
36
52
  *
@@ -75,6 +91,11 @@ async function sendLatestInvestigation(
75
91
  toolCallCount: true,
76
92
  totalTokens: true,
77
93
  createdAt: true,
94
+ // Measurement layer: the panel renders verdict/grade state from these.
95
+ humanVerdict: true,
96
+ humanVerdictAt: true,
97
+ autoGrade: true,
98
+ autoGradeAt: true,
78
99
  },
79
100
  sort: { createdAt: SortOrder.Descending },
80
101
  limit: 1,
@@ -213,4 +234,345 @@ router.post(
213
234
  },
214
235
  );
215
236
 
237
+ /*
238
+ * Human verdict capture (Phase 2 measurement layer): one-click Confirm /
239
+ * Reject on the investigation panel. Applies to the LATEST COMPLETED
240
+ * investigation run for the subject; overwriting is allowed (a user may
241
+ * change their mind), and the request is rejected when no completed
242
+ * investigation exists. The subject is access-checked under the USER's
243
+ * permissions first (same idiom as the read routes above); the run itself is
244
+ * written as root because investigation runs are system-authored.
245
+ * Body: { subjectType: "incident" | "alert", subjectId,
246
+ * verdict: "Confirmed" | "Rejected" }. Response: { runId, verdict }.
247
+ */
248
+ router.post(
249
+ "/ai-investigation/verdict",
250
+ UserMiddleware.getUserMiddleware,
251
+ async (
252
+ req: ExpressRequest,
253
+ res: ExpressResponse,
254
+ next: NextFunction,
255
+ ): Promise<void> => {
256
+ try {
257
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
258
+
259
+ const subjectType: string | undefined = req.body["subjectType"] as
260
+ | string
261
+ | undefined;
262
+
263
+ if (subjectType !== "incident" && subjectType !== "alert") {
264
+ throw new BadDataException(
265
+ 'subjectType must be "incident" or "alert".',
266
+ );
267
+ }
268
+
269
+ const subjectIdString: string | undefined = req.body["subjectId"] as
270
+ | string
271
+ | undefined;
272
+
273
+ if (!subjectIdString) {
274
+ throw new BadDataException("subjectId is required.");
275
+ }
276
+
277
+ const subjectId: ObjectID = new ObjectID(subjectIdString);
278
+
279
+ const verdict: string | undefined = req.body["verdict"] as
280
+ | string
281
+ | undefined;
282
+
283
+ if (
284
+ verdict !== AIRunHumanVerdict.Confirmed &&
285
+ verdict !== AIRunHumanVerdict.Rejected
286
+ ) {
287
+ throw new BadDataException(
288
+ 'verdict must be "Confirmed" or "Rejected".',
289
+ );
290
+ }
291
+
292
+ // Access check under the USER's permissions (null when not allowed).
293
+ if (subjectType === "incident") {
294
+ const incident: Incident | null = await IncidentService.findOneById({
295
+ id: subjectId,
296
+ select: { _id: true },
297
+ props,
298
+ });
299
+
300
+ if (!incident) {
301
+ throw new BadDataException(
302
+ "Incident not found (or you do not have access to it).",
303
+ );
304
+ }
305
+ } else {
306
+ const alert: Alert | null = await AlertService.findOneById({
307
+ id: subjectId,
308
+ select: { _id: true },
309
+ props,
310
+ });
311
+
312
+ if (!alert) {
313
+ throw new BadDataException(
314
+ "Alert not found (or you do not have access to it).",
315
+ );
316
+ }
317
+ }
318
+
319
+ const result: { runId: ObjectID; verdict: AIRunHumanVerdict } =
320
+ await AIRunService.applyHumanVerdictToLatestInvestigation({
321
+ ...(subjectType === "incident"
322
+ ? { incidentId: subjectId }
323
+ : { alertId: subjectId }),
324
+ verdict: verdict as AIRunHumanVerdict,
325
+ verdictByUserId: props.userId!,
326
+ });
327
+
328
+ Response.sendJsonObjectResponse(req, res, {
329
+ runId: result.runId.toString(),
330
+ verdict: result.verdict,
331
+ });
332
+ return;
333
+ } catch (err) {
334
+ next(err);
335
+ return;
336
+ }
337
+ },
338
+ );
339
+
340
+ /*
341
+ * Human-triggered `code_fix` (the FixFromIncident recipe): after a AI
342
+ * investigation completes on an incident/alert, the user can ask the agent
343
+ * to open a fix pull request from the posted analysis. The subject is
344
+ * access-checked under the USER's permissions first (same idiom as the read
345
+ * routes above); the trigger's gates (completed investigation, GitHub-App
346
+ * repository, per-subject dedupe) fail early with a clear message.
347
+ * Body: { subjectType: "incident" | "alert", subjectId }. Response:
348
+ * { aiRunId } — the Queued CodeFix run the agent worker will claim.
349
+ */
350
+ router.post(
351
+ "/ai-investigation/create-fix-task",
352
+ UserMiddleware.getUserMiddleware,
353
+ async (
354
+ req: ExpressRequest,
355
+ res: ExpressResponse,
356
+ next: NextFunction,
357
+ ): Promise<void> => {
358
+ try {
359
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
360
+
361
+ const subjectType: string | undefined = req.body["subjectType"] as
362
+ | string
363
+ | undefined;
364
+
365
+ if (subjectType !== "incident" && subjectType !== "alert") {
366
+ throw new BadDataException(
367
+ 'subjectType must be "incident" or "alert".',
368
+ );
369
+ }
370
+
371
+ const subjectIdString: string | undefined = req.body["subjectId"] as
372
+ | string
373
+ | undefined;
374
+
375
+ if (!subjectIdString) {
376
+ throw new BadDataException("subjectId is required.");
377
+ }
378
+
379
+ const subjectId: ObjectID = new ObjectID(subjectIdString);
380
+
381
+ // Access check under the USER's permissions (null when not allowed).
382
+ let projectId: ObjectID | undefined = undefined;
383
+
384
+ if (subjectType === "incident") {
385
+ const incident: Incident | null = await IncidentService.findOneById({
386
+ id: subjectId,
387
+ select: { _id: true, projectId: true },
388
+ props,
389
+ });
390
+
391
+ if (!incident || !incident.projectId) {
392
+ throw new BadDataException(
393
+ "Incident not found (or you do not have access to it).",
394
+ );
395
+ }
396
+
397
+ projectId = incident.projectId;
398
+ } else {
399
+ const alert: Alert | null = await AlertService.findOneById({
400
+ id: subjectId,
401
+ select: { _id: true, projectId: true },
402
+ props,
403
+ });
404
+
405
+ if (!alert || !alert.projectId) {
406
+ throw new BadDataException(
407
+ "Alert not found (or you do not have access to it).",
408
+ );
409
+ }
410
+
411
+ projectId = alert.projectId;
412
+ }
413
+
414
+ const run: AIRun =
415
+ await FixFromIncidentTaskTrigger.createFixTaskFromInvestigation({
416
+ projectId,
417
+ ...(subjectType === "incident"
418
+ ? { incidentId: subjectId }
419
+ : { alertId: subjectId }),
420
+ userId: props.userId!,
421
+ });
422
+
423
+ Response.sendJsonObjectResponse(req, res, {
424
+ aiRunId: run.id!.toString(),
425
+ });
426
+ return;
427
+ } catch (err) {
428
+ next(err);
429
+ return;
430
+ }
431
+ },
432
+ );
433
+
434
+ /*
435
+ * Human-triggered FixPerformance: from a slow trace, one click opens a
436
+ * performance-fix PR grounded in deterministic span-tree evidence. The
437
+ * spans are loaded under the USER's permissions (the same telemetry-read
438
+ * ACL the trace explorer enforces — a user who cannot read the trace gets
439
+ * "not found"), the SpanTreeAnalyzer gates on a mechanical finding, and
440
+ * the trigger's remaining gates (GitHub-App repository, per-trace dedupe)
441
+ * fail early with a clear message. Body: { traceId }. Response:
442
+ * { aiRunId } — the Queued CodeFix run the agent worker will claim.
443
+ */
444
+ router.post(
445
+ "/ai-investigation/create-performance-fix-task",
446
+ UserMiddleware.getUserMiddleware,
447
+ async (
448
+ req: ExpressRequest,
449
+ res: ExpressResponse,
450
+ next: NextFunction,
451
+ ): Promise<void> => {
452
+ try {
453
+ const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
454
+
455
+ const traceId: string | undefined = req.body["traceId"] as
456
+ | string
457
+ | undefined;
458
+
459
+ if (!traceId) {
460
+ throw new BadDataException("traceId is required.");
461
+ }
462
+
463
+ const projectId: ObjectID | undefined = props.tenantId;
464
+
465
+ if (!projectId) {
466
+ throw new BadDataException("A project scope is required.");
467
+ }
468
+
469
+ /*
470
+ * Access check + data load in one: the analytics permission layer
471
+ * pins this query to the user's tenant and telemetry-read
472
+ * permissions (the Span model's read ACL — same enforcement the
473
+ * trace explorer's list API applies). No spans back means the trace
474
+ * does not exist or the user may not see it.
475
+ */
476
+ const spans: Array<Span> = await SpanService.findBy({
477
+ query: {
478
+ traceId: traceId,
479
+ } as never,
480
+ select: {
481
+ spanId: true,
482
+ parentSpanId: true,
483
+ name: true,
484
+ startTimeUnixNano: true,
485
+ endTimeUnixNano: true,
486
+ durationUnixNano: true,
487
+ attributes: true,
488
+ primaryEntityId: true,
489
+ } as never,
490
+ sort: {
491
+ startTimeUnixNano: SortOrder.Ascending,
492
+ } as never,
493
+ limit: MAX_ANALYZED_TRACE_SPANS,
494
+ skip: 0,
495
+ props: props,
496
+ });
497
+
498
+ if (spans.length === 0) {
499
+ throw new BadDataException(
500
+ "Trace not found (or you do not have access to it).",
501
+ );
502
+ }
503
+
504
+ // Nanoseconds -> milliseconds for the analyzer.
505
+ const analyzableSpans: Array<AnalyzableSpan> = spans.map(
506
+ (span: Span): AnalyzableSpan => {
507
+ const attributes: Record<string, string> = {};
508
+
509
+ for (const [key, value] of Object.entries(span.attributes || {})) {
510
+ if (value !== null && value !== undefined) {
511
+ attributes[key] = String(value);
512
+ }
513
+ }
514
+
515
+ return {
516
+ spanId: span.spanId?.toString() || "",
517
+ parentSpanId: span.parentSpanId?.toString() || undefined,
518
+ name: span.name || "",
519
+ startMs: Number(span.startTimeUnixNano) / 1_000_000,
520
+ endMs: Number(span.endTimeUnixNano) / 1_000_000,
521
+ durationMs: Number(span.durationUnixNano) / 1_000_000,
522
+ attributes,
523
+ };
524
+ },
525
+ );
526
+
527
+ /*
528
+ * Best-effort service attribution: the trace's most frequent
529
+ * primaryEntityId, resolved to a Service name when it IS a Service
530
+ * (findOneById returns null for hosts/clusters/unattributed ids).
531
+ * Only feeds the repository name-match fallback — null is fine.
532
+ */
533
+ const entityIdCounts: Map<string, number> = new Map();
534
+ for (const span of spans) {
535
+ const entityId: string | undefined = span.primaryEntityId?.toString();
536
+ if (entityId) {
537
+ entityIdCounts.set(entityId, (entityIdCounts.get(entityId) || 0) + 1);
538
+ }
539
+ }
540
+
541
+ let dominantEntityId: string | null = null;
542
+ let dominantEntityCount: number = 0;
543
+ for (const [entityId, count] of entityIdCounts) {
544
+ if (count > dominantEntityCount) {
545
+ dominantEntityId = entityId;
546
+ dominantEntityCount = count;
547
+ }
548
+ }
549
+
550
+ const service: Service | null = dominantEntityId
551
+ ? await ServiceService.findOneById({
552
+ id: new ObjectID(dominantEntityId),
553
+ select: { name: true },
554
+ props: { isRoot: true },
555
+ })
556
+ : null;
557
+
558
+ const run: AIRun =
559
+ await FixPerformanceTaskTrigger.createPerformanceFixTaskFromTrace({
560
+ projectId,
561
+ traceId,
562
+ spans: analyzableSpans,
563
+ serviceName: service?.name,
564
+ userId: props.userId!,
565
+ });
566
+
567
+ Response.sendJsonObjectResponse(req, res, {
568
+ aiRunId: run.id!.toString(),
569
+ });
570
+ return;
571
+ } catch (err) {
572
+ next(err);
573
+ return;
574
+ }
575
+ },
576
+ );
577
+
216
578
  export default router;