@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
@@ -1,9 +1,189 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
1
10
  import DatabaseService from "./DatabaseService";
2
11
  import Model from "../../Models/DatabaseModels/CodeRepository";
12
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
13
+ import CodeRepositoryType from "../../Types/CodeRepository/CodeRepositoryType";
14
+ import URL from "../../Types/API/URL";
15
+ import logger from "../Utils/Logger";
16
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
17
+ import { resolveRepositoryForExceptionFix, } from "../Utils/CodeRepository/StackTraceRepoResolver";
18
+ import GitHubUtil from "../Utils/CodeRepository/GitHub/GitHub";
3
19
  export class Service extends DatabaseService {
4
20
  constructor() {
5
21
  super(Model);
6
22
  }
23
+ /*
24
+ * Imports all repositories accessible to a GitHub App installation into a
25
+ * project. Repositories that already exist for the project (matched on
26
+ * organizationName + repositoryName) are skipped. Never deletes anything.
27
+ */
28
+ async importReposFromInstallation(data) {
29
+ const installationRepositories = await GitHubUtil.listRepositoriesForInstallation(data.installationId);
30
+ // Fetch existing repositories once so we can skip duplicates and de-dupe display names.
31
+ const existingRepositories = await this.findBy({
32
+ query: {
33
+ projectId: data.projectId,
34
+ },
35
+ select: {
36
+ _id: true,
37
+ name: true,
38
+ organizationName: true,
39
+ repositoryName: true,
40
+ },
41
+ limit: LIMIT_MAX,
42
+ skip: 0,
43
+ props: {
44
+ isRoot: true,
45
+ },
46
+ });
47
+ const existingRepositoryKeys = new Set(existingRepositories.map((repository) => {
48
+ var _a, _b;
49
+ return `${(_a = repository.organizationName) === null || _a === void 0 ? void 0 : _a.toLowerCase()}/${(_b = repository.repositoryName) === null || _b === void 0 ? void 0 : _b.toLowerCase()}`;
50
+ }));
51
+ const existingDisplayNames = new Set(existingRepositories
52
+ .map((repository) => {
53
+ var _a;
54
+ return ((_a = repository.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || "";
55
+ })
56
+ .filter((name) => {
57
+ return Boolean(name);
58
+ }));
59
+ let imported = 0;
60
+ let skipped = 0;
61
+ for (const repository of installationRepositories) {
62
+ const repositoryKey = `${repository.ownerLogin.toLowerCase()}/${repository.name.toLowerCase()}`;
63
+ if (existingRepositoryKeys.has(repositoryKey)) {
64
+ skipped++;
65
+ continue;
66
+ }
67
+ /*
68
+ * Display name is unique per project. If a repository with the same
69
+ * name exists (e.g. same repo name in a different org), fall back to
70
+ * the org-qualified name, then a numeric suffix.
71
+ */
72
+ let displayName = repository.name;
73
+ if (existingDisplayNames.has(displayName.toLowerCase())) {
74
+ displayName = repository.fullName;
75
+ }
76
+ let suffix = 2;
77
+ while (existingDisplayNames.has(displayName.toLowerCase())) {
78
+ displayName = `${repository.fullName} (${suffix})`;
79
+ suffix++;
80
+ }
81
+ const codeRepository = new Model();
82
+ codeRepository.projectId = data.projectId;
83
+ codeRepository.name = displayName;
84
+ codeRepository.repositoryHostedAt = CodeRepositoryType.GitHub;
85
+ codeRepository.organizationName = repository.ownerLogin;
86
+ codeRepository.repositoryName = repository.name;
87
+ codeRepository.mainBranchName = repository.defaultBranch || "main";
88
+ codeRepository.gitHubAppInstallationId = data.installationId;
89
+ if (repository.htmlUrl) {
90
+ codeRepository.repositoryUrl = URL.fromString(repository.htmlUrl);
91
+ }
92
+ if (repository.description) {
93
+ codeRepository.description = repository.description;
94
+ }
95
+ try {
96
+ await this.create({
97
+ data: codeRepository,
98
+ props: {
99
+ isRoot: true,
100
+ },
101
+ });
102
+ existingRepositoryKeys.add(repositoryKey);
103
+ existingDisplayNames.add(displayName.toLowerCase());
104
+ imported++;
105
+ }
106
+ catch (error) {
107
+ // One bad repository should not abort the whole import.
108
+ logger.error(`Failed to import repository ${repository.fullName} from GitHub App installation ${data.installationId} into project ${data.projectId.toString()}:`);
109
+ logger.error(error);
110
+ skipped++;
111
+ }
112
+ }
113
+ return { imported, skipped };
114
+ }
115
+ /*
116
+ * Resolve which of the project's repositories an exception's code lives
117
+ * in, AT RUNTIME — stack-trace path matching over cached git trees, with
118
+ * exact-name-match and only-repository fallbacks. This replaces the old
119
+ * manual ServiceCodeRepository mapping table.
120
+ */
121
+ async resolveRepositoryForException(data) {
122
+ const repositories = await this.findBy({
123
+ query: {
124
+ projectId: data.projectId,
125
+ },
126
+ select: {
127
+ _id: true,
128
+ name: true,
129
+ organizationName: true,
130
+ repositoryName: true,
131
+ mainBranchName: true,
132
+ gitHubAppInstallationId: true,
133
+ repositoryHostedAt: true,
134
+ },
135
+ skip: 0,
136
+ limit: LIMIT_MAX,
137
+ props: {
138
+ isRoot: true,
139
+ },
140
+ });
141
+ // Only GitHub-App-connected repos can be cloned/pushed by the agent.
142
+ const resolvable = repositories
143
+ .filter((repository) => {
144
+ return (repository.repositoryHostedAt === CodeRepositoryType.GitHub &&
145
+ Boolean(repository.gitHubAppInstallationId) &&
146
+ Boolean(repository.id));
147
+ })
148
+ .map((repository) => {
149
+ return {
150
+ id: repository.id.toString(),
151
+ name: repository.name || "",
152
+ organizationName: repository.organizationName || "",
153
+ repositoryName: repository.repositoryName || "",
154
+ mainBranchName: repository.mainBranchName || "main",
155
+ gitHubAppInstallationId: repository.gitHubAppInstallationId || null,
156
+ };
157
+ });
158
+ if (resolvable.length === 0) {
159
+ return null;
160
+ }
161
+ return resolveRepositoryForExceptionFix({
162
+ stackTrace: data.stackTrace,
163
+ serviceName: data.serviceName,
164
+ repositories: resolvable,
165
+ getTreePaths: (repository) => {
166
+ return GitHubUtil.getRepositoryTreePaths({
167
+ installationId: repository.gitHubAppInstallationId,
168
+ organizationName: repository.organizationName,
169
+ repositoryName: repository.repositoryName,
170
+ branchName: repository.mainBranchName,
171
+ });
172
+ },
173
+ });
174
+ }
7
175
  }
176
+ __decorate([
177
+ CaptureSpan(),
178
+ __metadata("design:type", Function),
179
+ __metadata("design:paramtypes", [Object]),
180
+ __metadata("design:returntype", Promise)
181
+ ], Service.prototype, "importReposFromInstallation", null);
182
+ __decorate([
183
+ CaptureSpan(),
184
+ __metadata("design:type", Function),
185
+ __metadata("design:paramtypes", [Object]),
186
+ __metadata("design:returntype", Promise)
187
+ ], Service.prototype, "resolveRepositoryForException", null);
8
188
  export default new Service();
9
189
  //# sourceMappingURL=CodeRepositoryService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CodeRepositoryService.js","sourceRoot":"","sources":["../../../../Server/Services/CodeRepositoryService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,4CAA4C,CAAC;AAE/D,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"CodeRepositoryService.js","sourceRoot":"","sources":["../../../../Server/Services/CodeRepositoryService.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import DatabaseService from "./DatabaseService";
11
11
  import Model from "../../Models/DatabaseModels/GlobalConfig";
12
12
  import InMemoryTTLCache from "../Infrastructure/InMemoryTTLCache";
13
13
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
14
+ import BadDataException from "../../Types/Exception/BadDataException";
14
15
  export class Service extends DatabaseService {
15
16
  constructor() {
16
17
  super(Model);
@@ -40,6 +41,83 @@ export class Service extends DatabaseService {
40
41
  this.requireSsoForLoginCache.set(key, value, 60000);
41
42
  return value;
42
43
  }
44
+ async onBeforeUpdate(updateBy) {
45
+ const capacitySettingKeys = [
46
+ "clickhouseCapacityNotificationEnabled",
47
+ "clickhouseCapacityNotificationThresholdPercent",
48
+ "clickhouseDataPruningEnabled",
49
+ "clickhouseDataPruningThresholdPercent",
50
+ "clickhouseDataPruningTargetPercent",
51
+ ];
52
+ const isCapacitySettingUpdate = capacitySettingKeys.some((key) => {
53
+ return updateBy.data[key] !== undefined;
54
+ });
55
+ if (!isCapacitySettingUpdate) {
56
+ return {
57
+ updateBy,
58
+ carryForward: null,
59
+ };
60
+ }
61
+ /*
62
+ * GlobalConfig updates are partial. Load the current singleton values so
63
+ * cross-field validation still compares the effective pruning threshold
64
+ * and target when the request changes only one of them.
65
+ */
66
+ const currentConfig = await this.findOneBy({
67
+ query: updateBy.query,
68
+ select: {
69
+ clickhouseCapacityNotificationThresholdPercent: true,
70
+ clickhouseDataPruningThresholdPercent: true,
71
+ clickhouseDataPruningTargetPercent: true,
72
+ },
73
+ props: {
74
+ isRoot: true,
75
+ },
76
+ });
77
+ const normalizePercent = (value, fieldName) => {
78
+ let normalizedValue = value;
79
+ if (typeof normalizedValue === "string") {
80
+ const trimmedValue = normalizedValue.trim();
81
+ normalizedValue =
82
+ trimmedValue === "" ? Number.NaN : Number(trimmedValue);
83
+ }
84
+ if (typeof normalizedValue !== "number" ||
85
+ !Number.isFinite(normalizedValue) ||
86
+ !Number.isInteger(normalizedValue) ||
87
+ normalizedValue < 1 ||
88
+ normalizedValue > 100) {
89
+ throw new BadDataException(`${fieldName} must be an integer between 1 and 100.`);
90
+ }
91
+ return normalizedValue;
92
+ };
93
+ if (updateBy.data.clickhouseCapacityNotificationThresholdPercent !== undefined) {
94
+ updateBy.data.clickhouseCapacityNotificationThresholdPercent =
95
+ normalizePercent(updateBy.data
96
+ .clickhouseCapacityNotificationThresholdPercent, "ClickHouse capacity notification threshold");
97
+ }
98
+ if (updateBy.data.clickhouseDataPruningThresholdPercent !== undefined) {
99
+ updateBy.data.clickhouseDataPruningThresholdPercent = normalizePercent(updateBy.data.clickhouseDataPruningThresholdPercent, "ClickHouse data pruning threshold");
100
+ }
101
+ if (updateBy.data.clickhouseDataPruningTargetPercent !== undefined) {
102
+ updateBy.data.clickhouseDataPruningTargetPercent = normalizePercent(updateBy.data.clickhouseDataPruningTargetPercent, "ClickHouse data pruning target");
103
+ }
104
+ const getEffectivePercent = (updatedValue, currentValue, defaultValue, fieldName) => {
105
+ const value = updatedValue !== undefined
106
+ ? updatedValue
107
+ : currentValue !== null && currentValue !== void 0 ? currentValue : defaultValue;
108
+ return normalizePercent(value, fieldName);
109
+ };
110
+ getEffectivePercent(updateBy.data.clickhouseCapacityNotificationThresholdPercent, currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.clickhouseCapacityNotificationThresholdPercent, 80, "ClickHouse capacity notification threshold");
111
+ const pruningThresholdPercent = getEffectivePercent(updateBy.data.clickhouseDataPruningThresholdPercent, currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.clickhouseDataPruningThresholdPercent, 90, "ClickHouse data pruning threshold");
112
+ const pruningTargetPercent = getEffectivePercent(updateBy.data.clickhouseDataPruningTargetPercent, currentConfig === null || currentConfig === void 0 ? void 0 : currentConfig.clickhouseDataPruningTargetPercent, 80, "ClickHouse data pruning target");
113
+ if (pruningTargetPercent >= pruningThresholdPercent) {
114
+ throw new BadDataException("ClickHouse data pruning target must be lower than the pruning threshold.");
115
+ }
116
+ return {
117
+ updateBy,
118
+ carryForward: null,
119
+ };
120
+ }
43
121
  async onUpdateSuccess(onUpdate, _updatedItemIds) {
44
122
  if (onUpdate.updateBy.data
45
123
  .requireSsoForLogin !== undefined) {
@@ -54,6 +132,12 @@ __decorate([
54
132
  __metadata("design:paramtypes", []),
55
133
  __metadata("design:returntype", Promise)
56
134
  ], Service.prototype, "getRequireSsoForLogin", null);
135
+ __decorate([
136
+ CaptureSpan(),
137
+ __metadata("design:type", Function),
138
+ __metadata("design:paramtypes", [Object]),
139
+ __metadata("design:returntype", Promise)
140
+ ], Service.prototype, "onBeforeUpdate", null);
57
141
  __decorate([
58
142
  CaptureSpan(),
59
143
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalConfigService.js","sourceRoot":"","sources":["../../../../Server/Services/GlobalConfigService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,0CAA0C,CAAC;AAC7D,OAAO,gBAAgB,MAAM,oCAAoC,CAAC;AAGlE,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IASjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;QATf;;;;WAIG;QACK,4BAAuB,GAC7B,IAAI,gBAAgB,CAAC,KAAM,CAAC,CAAC;IAI/B,CAAC;IAED;;;OAGG;IAEU,AAAN,KAAK,CAAC,qBAAqB;QAChC,MAAM,GAAG,GAAW,QAAQ,CAAC;QAC7B,MAAM,MAAM,GAAwB,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAiB,MAAM,IAAI,CAAC,SAAS,CAAC;YAChD,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAY,OAAO,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAM,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IAGwB,AAAN,KAAK,CAAC,eAAe,CACtC,QAAyB,EACzB,eAAgC;QAEhC,IACG,QAAQ,CAAC,QAAQ,CAAC,IAAyC;aACzD,kBAAkB,KAAK,SAAS,EACnC,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAhCc;IADZ,WAAW,EAAE;;;;oDAiBb;AAGwB;IADxB,WAAW,EAAE;;6CAGK,KAAK;;8CAUvB;AAGH,eAAe,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"GlobalConfigService.js","sourceRoot":"","sources":["../../../../Server/Services/GlobalConfigService.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import DatabaseConfig from "../DatabaseConfig";
11
11
  import QueryHelper from "../Types/Database/QueryHelper";
12
12
  import DatabaseService from "./DatabaseService";
13
+ import AIRunService from "./AIRunService";
14
+ import AIRunType from "../../Types/AI/AIRunType";
15
+ import AIRunStatus from "../../Types/AI/AIRunStatus";
13
16
  import IncidentOwnerTeamService from "./IncidentOwnerTeamService";
14
17
  import IncidentOwnerUserService from "./IncidentOwnerUserService";
15
18
  import IncidentStateService from "./IncidentStateService";
@@ -73,7 +76,7 @@ import OnCallDutyPolicy from "../../Models/DatabaseModels/OnCallDutyPolicy";
73
76
  import ProjectService from "./ProjectService";
74
77
  import IncidentTemplateService from "./IncidentTemplateService";
75
78
  import AIService from "./AIService";
76
- import SentinelIncidentInvestigationRunner from "../Utils/AI/Sentinel/IncidentInvestigationRunner";
79
+ import AIIncidentInvestigationRunner from "../Utils/AI/SRE/IncidentInvestigationRunner";
77
80
  import IncidentAIContextBuilder from "../Utils/AI/IncidentAIContextBuilder";
78
81
  export class Service extends DatabaseService {
79
82
  constructor() {
@@ -940,21 +943,21 @@ export class Service extends DatabaseService {
940
943
  .then(async () => {
941
944
  var _a, _b;
942
945
  /*
943
- * Sentinel (AI SRE): automatically investigate the new incident and post
946
+ * AI (AI SRE): automatically investigate the new incident and post
944
947
  * a cited root cause analysis to the incident timeline + Slack/Teams.
945
948
  * Runs last so the workspace channels already exist, and is gated per
946
949
  * project (opt-in) + requires a configured LLM provider. Read-only.
947
950
  */
948
951
  try {
949
952
  if (createdItem.projectId && createdItem.id) {
950
- await SentinelIncidentInvestigationRunner.investigateNewIncident({
953
+ await AIIncidentInvestigationRunner.investigateNewIncident({
951
954
  incidentId: createdItem.id,
952
955
  projectId: createdItem.projectId,
953
956
  });
954
957
  }
955
958
  }
956
959
  catch (error) {
957
- logger.error(`Sentinel incident investigation failed in IncidentService.onCreateSuccess: ${error}`, {
960
+ logger.error(`AI incident investigation failed in IncidentService.onCreateSuccess: ${error}`, {
958
961
  projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
959
962
  incidentId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
960
963
  });
@@ -2070,12 +2073,21 @@ ${incidentSeverity.name}
2070
2073
  }
2071
2074
  return Service.DEFAULT_METRIC_RETENTION_DAYS;
2072
2075
  }
2073
- async refreshIncidentMetrics(data) {
2074
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
2076
+ /*
2077
+ * Load the incident + its owners and build the attribute set shared by
2078
+ * every incident metric (all values strings for ClickHouse
2079
+ * Map(String, String) storage; arrays joined comma-separated). Factored
2080
+ * out of refreshIncidentMetrics so one-off metric writers — e.g. the
2081
+ * AI time-to-rca metric recorded when an investigation posts its
2082
+ * analysis — record the exact same attribute shape.
2083
+ */
2084
+ async getIncidentMetricContext(data) {
2085
+ var _a, _b, _c, _d, _e, _f;
2075
2086
  const incident = await this.findOneById({
2076
2087
  id: data.incidentId,
2077
2088
  select: {
2078
2089
  projectId: true,
2090
+ createdAt: true,
2079
2091
  declaredAt: true,
2080
2092
  postmortemPostedAt: true,
2081
2093
  monitors: {
@@ -2164,6 +2176,115 @@ ${incidentSeverity.name}
2164
2176
  .filter((name) => {
2165
2177
  return Boolean(name);
2166
2178
  });
2179
+ /*
2180
+ * common attributes shared by all incident metrics
2181
+ * All values must be strings for ClickHouse Map(String, String) storage.
2182
+ * Arrays are joined as comma-separated strings.
2183
+ */
2184
+ const baseMetricAttributes = {
2185
+ incidentId: data.incidentId.toString(),
2186
+ projectId: incident.projectId.toString(),
2187
+ monitorIds: (((_a = incident.monitors) === null || _a === void 0 ? void 0 : _a.map((monitor) => {
2188
+ var _a;
2189
+ return (_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString();
2190
+ }).filter(Boolean)) || []).join(", "),
2191
+ monitorNames: (((_b = incident.monitors) === null || _b === void 0 ? void 0 : _b.map((monitor) => {
2192
+ var _a;
2193
+ return (_a = monitor.name) === null || _a === void 0 ? void 0 : _a.toString();
2194
+ }).filter(Boolean)) || []).join(", "),
2195
+ incidentSeverityId: (_d = (_c = incident.incidentSeverity) === null || _c === void 0 ? void 0 : _c._id) === null || _d === void 0 ? void 0 : _d.toString(),
2196
+ incidentSeverityName: (_f = (_e = incident.incidentSeverity) === null || _e === void 0 ? void 0 : _e.name) === null || _f === void 0 ? void 0 : _f.toString(),
2197
+ ownerUserIds: ownerUserIds.join(", "),
2198
+ ownerUserNames: ownerUserNames.join(", "),
2199
+ ownerTeamIds: ownerTeamIds.join(", "),
2200
+ ownerTeamNames: ownerTeamNames.join(", "),
2201
+ };
2202
+ return { incident, baseMetricAttributes };
2203
+ }
2204
+ /*
2205
+ * AI measurement layer: record how long the incident waited for its
2206
+ * AI root-cause analysis — seconds from incident creation to now, written
2207
+ * once from IncidentInvestigationRunner.postAnalysis. Deliberately NOT
2208
+ * part of refreshIncidentMetrics: the refresh's replace-list excludes
2209
+ * this metric name, so refreshes never tombstone it.
2210
+ */
2211
+ async recordTimeToRootCausePostedMetric(data) {
2212
+ const { incident, baseMetricAttributes, } = await this.getIncidentMetricContext({ incidentId: data.incidentId });
2213
+ const now = OneUptimeDate.getCurrentDate();
2214
+ const incidentCreatedAt = incident.createdAt || incident.declaredAt || now;
2215
+ const metricRetentionDays = await this.getMetricRetentionDays();
2216
+ const retentionDate = OneUptimeDate.addRemoveDays(OneUptimeDate.getCurrentDate(), metricRetentionDays);
2217
+ const timeToRcaMetric = new MutableMetric();
2218
+ timeToRcaMetric.projectId = incident.projectId;
2219
+ timeToRcaMetric.primaryEntityId = incident.id;
2220
+ timeToRcaMetric.primaryEntityType = ServiceType.Incident;
2221
+ timeToRcaMetric.name = IncidentMetricType.TimeToRootCausePosted;
2222
+ timeToRcaMetric.metricPointId = IncidentMetricType.TimeToRootCausePosted;
2223
+ timeToRcaMetric.value = OneUptimeDate.getDifferenceInSeconds(now, incidentCreatedAt);
2224
+ timeToRcaMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), {
2225
+ // Every time-to-rca point is AI-posted by construction.
2226
+ aiInvestigated: "true" });
2227
+ timeToRcaMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeToRcaMetric.attributes);
2228
+ timeToRcaMetric.time = now;
2229
+ timeToRcaMetric.timeUnixNano = OneUptimeDate.toUnixNano(now);
2230
+ timeToRcaMetric.metricPointType = MetricPointType.Sum;
2231
+ timeToRcaMetric.retentionDate = retentionDate;
2232
+ await MutableMetricService.createMutableMetrics({
2233
+ metrics: [timeToRcaMetric],
2234
+ });
2235
+ // Register the metric type so it shows up in the type catalog.
2236
+ const metricType = new MetricType();
2237
+ metricType.name = IncidentMetricType.TimeToRootCausePosted;
2238
+ metricType.description =
2239
+ "Time from incident creation to the AI investigation's posted root-cause analysis";
2240
+ metricType.unit = "seconds";
2241
+ TelemetryUtil.indexMetricNameServiceNameMap({
2242
+ metricNameServiceNameMap: {
2243
+ [IncidentMetricType.TimeToRootCausePosted]: metricType,
2244
+ },
2245
+ projectId: incident.projectId,
2246
+ }).catch((err) => {
2247
+ var _a, _b;
2248
+ logger.error(err, {
2249
+ projectId: (_a = incident.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
2250
+ incidentId: (_b = incident.id) === null || _b === void 0 ? void 0 : _b.toString(),
2251
+ });
2252
+ });
2253
+ }
2254
+ async refreshIncidentMetrics(data) {
2255
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
2256
+ const { incident, baseMetricAttributes, } = await this.getIncidentMetricContext({ incidentId: data.incidentId });
2257
+ // getIncidentMetricContext guarantees this; re-checked for TS narrowing.
2258
+ if (!incident.projectId) {
2259
+ throw new BadDataException("Incident Project ID not found");
2260
+ }
2261
+ /*
2262
+ * aiInvestigated dimension for MTTA/MTTR (AI measurement layer):
2263
+ * did a completed AI investigation run for this incident? One
2264
+ * indexed countBy per metric refresh (triggeredByIncidentId is indexed)
2265
+ * — acceptable at refresh frequency. Failure must never break metric
2266
+ * recording, so this is best-effort false.
2267
+ */
2268
+ let aiInvestigated = false;
2269
+ try {
2270
+ const completedInvestigationCount = await AIRunService.countBy({
2271
+ query: {
2272
+ runType: AIRunType.Investigation,
2273
+ status: AIRunStatus.Completed,
2274
+ triggeredByIncidentId: data.incidentId,
2275
+ },
2276
+ props: {
2277
+ isRoot: true,
2278
+ },
2279
+ });
2280
+ aiInvestigated = completedInvestigationCount.toNumber() > 0;
2281
+ }
2282
+ catch (err) {
2283
+ logger.error(err, {
2284
+ projectId: (_a = incident.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
2285
+ incidentId: (_b = incident.id) === null || _b === void 0 ? void 0 : _b.toString(),
2286
+ });
2287
+ }
2167
2288
  // get incident state timeline
2168
2289
  const incidentStateTimelines = await IncidentStateTimelineService.findBy({
2169
2290
  query: {
@@ -2208,8 +2329,8 @@ ${incidentSeverity.name}
2208
2329
  }
2209
2330
  catch (err) {
2210
2331
  logger.error(err, {
2211
- projectId: (_a = incident.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
2212
- incidentId: (_b = incident.id) === null || _b === void 0 ? void 0 : _b.toString(),
2332
+ projectId: (_c = incident.projectId) === null || _c === void 0 ? void 0 : _c.toString(),
2333
+ incidentId: (_d = incident.id) === null || _d === void 0 ? void 0 : _d.toString(),
2213
2334
  });
2214
2335
  }
2215
2336
  try {
@@ -2222,29 +2343,6 @@ ${incidentSeverity.name}
2222
2343
  incident.createdAt ||
2223
2344
  OneUptimeDate.getCurrentDate();
2224
2345
  const metricTypesMap = {};
2225
- /*
2226
- * common attributes shared by all incident metrics
2227
- * All values must be strings for ClickHouse Map(String, String) storage.
2228
- * Arrays are joined as comma-separated strings.
2229
- */
2230
- const baseMetricAttributes = {
2231
- incidentId: data.incidentId.toString(),
2232
- projectId: incident.projectId.toString(),
2233
- monitorIds: (((_c = incident.monitors) === null || _c === void 0 ? void 0 : _c.map((monitor) => {
2234
- var _a;
2235
- return (_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString();
2236
- }).filter(Boolean)) || []).join(", "),
2237
- monitorNames: (((_d = incident.monitors) === null || _d === void 0 ? void 0 : _d.map((monitor) => {
2238
- var _a;
2239
- return (_a = monitor.name) === null || _a === void 0 ? void 0 : _a.toString();
2240
- }).filter(Boolean)) || []).join(", "),
2241
- incidentSeverityId: (_f = (_e = incident.incidentSeverity) === null || _e === void 0 ? void 0 : _e._id) === null || _f === void 0 ? void 0 : _f.toString(),
2242
- incidentSeverityName: (_h = (_g = incident.incidentSeverity) === null || _g === void 0 ? void 0 : _g.name) === null || _h === void 0 ? void 0 : _h.toString(),
2243
- ownerUserIds: ownerUserIds.join(", "),
2244
- ownerUserNames: ownerUserNames.join(", "),
2245
- ownerTeamIds: ownerTeamIds.join(", "),
2246
- ownerTeamNames: ownerTeamNames.join(", "),
2247
- };
2248
2346
  const incidentCountMetric = new MutableMetric();
2249
2347
  incidentCountMetric.projectId = incident.projectId;
2250
2348
  incidentCountMetric.primaryEntityId = incident.id;
@@ -2292,7 +2390,8 @@ ${incidentSeverity.name}
2292
2390
  IncidentMetricType.TimeToAcknowledge;
2293
2391
  timeToAcknowledgeMetric.value = OneUptimeDate.getDifferenceInSeconds((ackIncidentStateTimeline === null || ackIncidentStateTimeline === void 0 ? void 0 : ackIncidentStateTimeline.startsAt) ||
2294
2392
  OneUptimeDate.getCurrentDate(), incidentStartsAt);
2295
- timeToAcknowledgeMetric.attributes = Object.assign({}, baseMetricAttributes);
2393
+ // aiInvestigated: the MTTA with/without-AI dimension.
2394
+ timeToAcknowledgeMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { aiInvestigated: aiInvestigated.toString() });
2296
2395
  timeToAcknowledgeMetric.attributeKeys =
2297
2396
  TelemetryUtil.getAttributeKeys(timeToAcknowledgeMetric.attributes);
2298
2397
  timeToAcknowledgeMetric.time =
@@ -2330,7 +2429,8 @@ ${incidentSeverity.name}
2330
2429
  timeToResolveMetric.metricPointId = IncidentMetricType.TimeToResolve;
2331
2430
  timeToResolveMetric.value = OneUptimeDate.getDifferenceInSeconds((resolvedIncidentStateTimeline === null || resolvedIncidentStateTimeline === void 0 ? void 0 : resolvedIncidentStateTimeline.startsAt) ||
2332
2431
  OneUptimeDate.getCurrentDate(), incidentStartsAt);
2333
- timeToResolveMetric.attributes = Object.assign({}, baseMetricAttributes);
2432
+ // aiInvestigated: the MTTR with/without-AI dimension.
2433
+ timeToResolveMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { aiInvestigated: aiInvestigated.toString() });
2334
2434
  timeToResolveMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeToResolveMetric.attributes);
2335
2435
  timeToResolveMetric.time =
2336
2436
  (resolvedIncidentStateTimeline === null || resolvedIncidentStateTimeline === void 0 ? void 0 : resolvedIncidentStateTimeline.startsAt) ||
@@ -2397,7 +2497,7 @@ ${incidentSeverity.name}
2397
2497
  if (!timeline.startsAt || !timeline.endsAt) {
2398
2498
  continue;
2399
2499
  }
2400
- const stateName = ((_k = (_j = timeline.incidentState) === null || _j === void 0 ? void 0 : _j.name) === null || _k === void 0 ? void 0 : _k.toString()) || "Unknown";
2500
+ const stateName = ((_f = (_e = timeline.incidentState) === null || _e === void 0 ? void 0 : _e.name) === null || _f === void 0 ? void 0 : _f.toString()) || "Unknown";
2401
2501
  const timeInStateMetric = new MutableMetric();
2402
2502
  timeInStateMetric.projectId = incident.projectId;
2403
2503
  timeInStateMetric.primaryEntityId = incident.id;
@@ -2405,7 +2505,7 @@ ${incidentSeverity.name}
2405
2505
  timeInStateMetric.name = IncidentMetricType.TimeInState;
2406
2506
  timeInStateMetric.metricPointId = `time-in-state:${timeline.id.toString()}`;
2407
2507
  timeInStateMetric.value = OneUptimeDate.getDifferenceInSeconds(timeline.endsAt, timeline.startsAt);
2408
- timeInStateMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { incidentStateName: stateName, incidentStateId: (_l = timeline.incidentStateId) === null || _l === void 0 ? void 0 : _l.toString(), isCreatedState: ((_o = (_m = timeline.incidentState) === null || _m === void 0 ? void 0 : _m.isCreatedState) === null || _o === void 0 ? void 0 : _o.toString()) || "false", isAcknowledgedState: ((_q = (_p = timeline.incidentState) === null || _p === void 0 ? void 0 : _p.isAcknowledgedState) === null || _q === void 0 ? void 0 : _q.toString()) || "false", isResolvedState: ((_s = (_r = timeline.incidentState) === null || _r === void 0 ? void 0 : _r.isResolvedState) === null || _s === void 0 ? void 0 : _s.toString()) || "false" });
2508
+ timeInStateMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { incidentStateName: stateName, incidentStateId: (_g = timeline.incidentStateId) === null || _g === void 0 ? void 0 : _g.toString(), isCreatedState: ((_j = (_h = timeline.incidentState) === null || _h === void 0 ? void 0 : _h.isCreatedState) === null || _j === void 0 ? void 0 : _j.toString()) || "false", isAcknowledgedState: ((_l = (_k = timeline.incidentState) === null || _k === void 0 ? void 0 : _k.isAcknowledgedState) === null || _l === void 0 ? void 0 : _l.toString()) || "false", isResolvedState: ((_o = (_m = timeline.incidentState) === null || _m === void 0 ? void 0 : _m.isResolvedState) === null || _o === void 0 ? void 0 : _o.toString()) || "false" });
2409
2509
  timeInStateMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeInStateMetric.attributes);
2410
2510
  timeInStateMetric.time = timeline.startsAt;
2411
2511
  timeInStateMetric.timeUnixNano = OneUptimeDate.toUnixNano(timeInStateMetric.time);
@@ -2457,8 +2557,8 @@ ${incidentSeverity.name}
2457
2557
  }
2458
2558
  catch (err) {
2459
2559
  logger.error(err, {
2460
- projectId: (_t = incident.projectId) === null || _t === void 0 ? void 0 : _t.toString(),
2461
- incidentId: (_u = incident.id) === null || _u === void 0 ? void 0 : _u.toString(),
2560
+ projectId: (_p = incident.projectId) === null || _p === void 0 ? void 0 : _p.toString(),
2561
+ incidentId: (_q = incident.id) === null || _q === void 0 ? void 0 : _q.toString(),
2462
2562
  });
2463
2563
  }
2464
2564
  }
@@ -2760,6 +2860,18 @@ __decorate([
2760
2860
  __metadata("design:paramtypes", [Object]),
2761
2861
  __metadata("design:returntype", Promise)
2762
2862
  ], Service.prototype, "changeIncidentState", null);
2863
+ __decorate([
2864
+ CaptureSpan(),
2865
+ __metadata("design:type", Function),
2866
+ __metadata("design:paramtypes", [Object]),
2867
+ __metadata("design:returntype", Promise)
2868
+ ], Service.prototype, "getIncidentMetricContext", null);
2869
+ __decorate([
2870
+ CaptureSpan(),
2871
+ __metadata("design:type", Function),
2872
+ __metadata("design:paramtypes", [Object]),
2873
+ __metadata("design:returntype", Promise)
2874
+ ], Service.prototype, "recordTimeToRootCausePostedMetric", null);
2763
2875
  __decorate([
2764
2876
  CaptureSpan(),
2765
2877
  __metadata("design:type", Function),