@oneuptime/common 11.5.3 → 11.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +56 -45
  2. package/Models/DatabaseModels/AIInsight.ts +748 -0
  3. package/Models/DatabaseModels/AIRun.ts +262 -0
  4. package/Models/DatabaseModels/CodeRepository.ts +42 -0
  5. package/Models/DatabaseModels/Dashboard.ts +3 -3
  6. package/Models/DatabaseModels/GlobalConfig.ts +105 -0
  7. package/Models/DatabaseModels/Index.ts +4 -8
  8. package/Models/DatabaseModels/InstanceHealthLog.ts +277 -0
  9. package/Models/DatabaseModels/LlmLog.ts +33 -0
  10. package/Models/DatabaseModels/Project.ts +123 -6
  11. package/Models/DatabaseModels/Runbook.ts +1 -1
  12. package/Server/API/AIAgentDataAPI.ts +802 -140
  13. package/Server/API/AIAgentTaskAPI.ts +132 -69
  14. package/Server/API/AIAgentTaskLogAPI.ts +65 -41
  15. package/Server/API/AIAgentTaskPullRequestAPI.ts +41 -0
  16. package/Server/API/AIInsightAPI.ts +220 -0
  17. package/Server/API/AIInvestigationAPI.ts +363 -1
  18. package/Server/API/CodeFixRunAPI.ts +251 -0
  19. package/Server/API/GitHubAPI.ts +246 -3
  20. package/Server/API/TelemetryExceptionAPI.ts +193 -48
  21. package/Server/EnvironmentConfig.ts +1 -1
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.ts +26 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.ts +73 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.ts +29 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.ts +31 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.ts +51 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.ts +25 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.ts +47 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.ts +53 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.ts +31 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.ts +37 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.ts +25 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.ts +75 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.ts +37 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.ts +203 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.ts +163 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +30 -0
  38. package/Server/Infrastructure/Queue.ts +82 -4
  39. package/Server/Infrastructure/Semaphore.ts +62 -1
  40. package/Server/Services/AIAgentService.ts +32 -0
  41. package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
  42. package/Server/Services/AIInsightService.ts +174 -0
  43. package/Server/Services/AIRunEventService.ts +63 -0
  44. package/Server/Services/AIRunService.ts +259 -1
  45. package/Server/Services/AIService.ts +249 -7
  46. package/Server/Services/AlertService.ts +4 -4
  47. package/Server/Services/CodeRepositoryService.ts +209 -0
  48. package/Server/Services/DashboardService.ts +11 -2
  49. package/Server/Services/GlobalConfigService.ts +148 -0
  50. package/Server/Services/IncidentService.ts +183 -38
  51. package/Server/Services/IncidentStateTimelineService.ts +24 -4
  52. package/Server/Services/Index.ts +4 -4
  53. package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
  54. package/Server/Services/LlmLogService.ts +27 -0
  55. package/Server/Services/LlmProviderService.ts +108 -0
  56. package/Server/Services/MetricBaselineService.ts +123 -0
  57. package/Server/Services/MonitorService.ts +15 -0
  58. package/Server/Services/TelemetryExceptionService.ts +323 -116
  59. package/Server/Services/TraceAggregationService.ts +176 -0
  60. package/Server/Types/Workflow/ComponentCode.ts +6 -0
  61. package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
  62. package/Server/Types/Workflow/Components/Index.ts +2 -0
  63. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
  64. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
  65. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
  66. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
  67. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
  68. package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
  69. package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
  70. package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
  71. package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
  72. package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
  73. package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
  74. package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
  75. package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
  76. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
  77. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
  78. package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
  79. package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
  80. package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
  81. package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
  82. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
  83. package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
  84. package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
  85. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
  86. package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
  87. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
  88. package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
  89. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
  90. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
  91. package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
  92. package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
  93. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
  94. package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
  95. package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
  96. package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
  97. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
  98. package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
  99. package/Server/Utils/AI/Toolbox/Index.ts +2 -2
  100. package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
  101. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
  102. package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
  103. package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
  104. package/Server/Utils/Execute.ts +34 -13
  105. package/Server/Utils/LLM/LLMService.ts +160 -30
  106. package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
  107. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
  108. package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +225 -0
  109. package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
  110. package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
  111. package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
  112. package/Tests/Server/Services/AIInsightService.test.ts +324 -0
  113. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
  114. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
  115. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
  116. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
  117. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
  118. package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
  119. package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
  120. package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
  121. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
  122. package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
  123. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
  124. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
  125. package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
  126. package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
  127. package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
  128. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
  129. package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
  130. package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
  131. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
  132. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
  133. package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
  134. package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
  135. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
  136. package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
  137. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
  138. package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
  139. package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
  140. package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
  141. package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
  142. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
  143. package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
  144. package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
  145. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
  146. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
  147. package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
  148. package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
  149. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
  150. package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
  151. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
  152. package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
  153. package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
  154. package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
  155. package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
  156. package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
  157. package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
  158. package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
  159. package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
  160. package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
  161. package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
  162. package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
  163. package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
  164. package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
  165. package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
  166. package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
  167. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
  168. package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
  169. package/Types/AI/AIChatTypes.ts +8 -0
  170. package/Types/AI/AIInsightEvidence.ts +77 -0
  171. package/Types/AI/AIInsightHumanVerdict.ts +15 -0
  172. package/Types/AI/AIInsightSeverity.ts +13 -0
  173. package/Types/AI/AIInsightStatus.ts +38 -0
  174. package/Types/AI/AIInsightType.ts +41 -0
  175. package/Types/AI/AIRunAutoGrade.ts +18 -0
  176. package/Types/AI/AIRunEventType.ts +5 -0
  177. package/Types/AI/AIRunHumanVerdict.ts +17 -0
  178. package/Types/AI/AIRunType.ts +6 -0
  179. package/Types/AI/CodeFixTaskContext.ts +88 -0
  180. package/Types/AI/CodeFixTaskType.ts +132 -0
  181. package/Types/AI/FixPullRequestCiStatus.ts +132 -0
  182. package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
  183. package/Types/Incident/IncidentMetricType.ts +7 -0
  184. package/Types/Monitor/CriteriaFilter.ts +8 -0
  185. package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
  186. package/Types/Monitor/MonitorStep.ts +38 -0
  187. package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
  188. package/Types/Monitor/MonitorType.ts +17 -0
  189. package/Types/Monitor/SqlDatabaseType.ts +49 -0
  190. package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
  191. package/Types/Permission.ts +11 -95
  192. package/Types/Probe/ProbeMonitorResponse.ts +2 -0
  193. package/Types/Runbook/RunbookStep.ts +26 -2
  194. package/Types/Runbook/RunbookStepType.ts +1 -0
  195. package/Types/Workflow/Component.ts +13 -0
  196. package/Types/Workflow/ComponentID.ts +1 -0
  197. package/Types/Workflow/Components/AI.ts +148 -0
  198. package/Types/Workflow/Components.ts +8 -0
  199. package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
  200. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
  201. package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
  202. package/UI/Components/Table/Table.tsx +38 -2
  203. package/UI/Utils/TableColumnsToCsv.ts +385 -0
  204. package/Utils/Monitor/MonitorMetricType.ts +1 -0
  205. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
  206. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  207. package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
  208. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
  209. package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
  210. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  211. package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
  212. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/Dashboard.js +3 -3
  214. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
  216. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/Index.js +4 -8
  218. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
  220. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
  221. package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
  222. package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/Project.js +127 -6
  224. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  225. package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
  226. package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
  227. package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
  228. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  229. package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
  230. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  231. package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
  232. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  233. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
  234. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
  235. package/build/dist/Server/API/AIInsightAPI.js +140 -0
  236. package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
  237. package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
  238. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  239. package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
  240. package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
  241. package/build/dist/Server/API/GitHubAPI.js +164 -2
  242. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  243. package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
  244. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  245. package/build/dist/Server/EnvironmentConfig.js +1 -1
  246. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  247. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
  248. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
  249. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
  250. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
  251. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
  252. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
  253. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
  254. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
  255. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
  256. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
  257. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
  258. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
  259. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
  260. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
  261. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
  262. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
  263. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
  264. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
  265. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
  266. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
  267. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
  268. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
  269. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
  270. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
  271. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
  272. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
  273. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
  274. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
  275. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
  276. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
  277. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +30 -0
  278. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  279. package/build/dist/Server/Infrastructure/Queue.js +73 -3
  280. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  281. package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
  282. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  283. package/build/dist/Server/Services/AIAgentService.js +29 -0
  284. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  285. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
  286. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
  287. package/build/dist/Server/Services/AIInsightService.js +164 -0
  288. package/build/dist/Server/Services/AIInsightService.js.map +1 -0
  289. package/build/dist/Server/Services/AIRunEventService.js +49 -0
  290. package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
  291. package/build/dist/Server/Services/AIRunService.js +221 -0
  292. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  293. package/build/dist/Server/Services/AIService.js +198 -11
  294. package/build/dist/Server/Services/AIService.js.map +1 -1
  295. package/build/dist/Server/Services/AlertService.js +4 -4
  296. package/build/dist/Server/Services/AlertService.js.map +1 -1
  297. package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
  298. package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
  299. package/build/dist/Server/Services/DashboardService.js +8 -2
  300. package/build/dist/Server/Services/DashboardService.js.map +1 -1
  301. package/build/dist/Server/Services/GlobalConfigService.js +84 -0
  302. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  303. package/build/dist/Server/Services/IncidentService.js +149 -37
  304. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  305. package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
  306. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  307. package/build/dist/Server/Services/Index.js +4 -4
  308. package/build/dist/Server/Services/Index.js.map +1 -1
  309. package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
  310. package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
  311. package/build/dist/Server/Services/LlmLogService.js +23 -0
  312. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  313. package/build/dist/Server/Services/LlmProviderService.js +96 -0
  314. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  315. package/build/dist/Server/Services/MetricBaselineService.js +65 -0
  316. package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
  317. package/build/dist/Server/Services/MonitorService.js +9 -1
  318. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  319. package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
  320. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  321. package/build/dist/Server/Services/TraceAggregationService.js +124 -0
  322. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  323. package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
  324. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
  325. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
  326. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  327. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  328. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
  329. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
  330. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
  331. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
  332. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
  333. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
  334. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
  335. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
  336. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
  337. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
  338. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
  339. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
  340. package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
  341. package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
  342. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
  343. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
  344. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
  345. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
  346. package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
  347. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
  348. package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
  349. package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
  350. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
  351. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
  352. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
  353. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
  354. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
  355. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
  356. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
  357. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
  358. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
  359. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
  360. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
  361. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
  362. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
  363. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
  364. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
  365. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
  366. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
  367. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
  368. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
  369. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
  370. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
  371. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
  372. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
  373. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
  374. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
  375. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
  376. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
  377. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
  378. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
  379. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
  380. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
  381. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
  382. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
  383. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
  384. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
  385. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
  386. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
  387. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
  388. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
  389. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
  390. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
  391. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
  392. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
  393. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
  394. package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
  395. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
  396. package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
  397. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  398. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
  399. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
  400. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
  401. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  402. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
  403. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
  404. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
  405. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
  406. package/build/dist/Server/Utils/Execute.js +21 -11
  407. package/build/dist/Server/Utils/Execute.js.map +1 -1
  408. package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
  409. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  410. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
  411. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
  412. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
  413. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  414. package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
  415. package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
  416. package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
  417. package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
  418. package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
  419. package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
  420. package/build/dist/Types/AI/AIInsightStatus.js +36 -0
  421. package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
  422. package/build/dist/Types/AI/AIInsightType.js +42 -0
  423. package/build/dist/Types/AI/AIInsightType.js.map +1 -0
  424. package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
  425. package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
  426. package/build/dist/Types/AI/AIRunEventType.js +5 -0
  427. package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
  428. package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
  429. package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
  430. package/build/dist/Types/AI/AIRunType.js +6 -0
  431. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  432. package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
  433. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
  434. package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
  435. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
  436. package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
  437. package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
  438. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
  439. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
  440. package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
  441. package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
  442. package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
  443. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  444. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
  445. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  446. package/build/dist/Types/Monitor/MonitorStep.js +28 -0
  447. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  448. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
  449. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
  450. package/build/dist/Types/Monitor/MonitorType.js +15 -0
  451. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  452. package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
  453. package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
  454. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
  455. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
  456. package/build/dist/Types/Permission.js +10 -84
  457. package/build/dist/Types/Permission.js.map +1 -1
  458. package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
  459. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  460. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  461. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  462. package/build/dist/Types/Workflow/Components/AI.js +135 -0
  463. package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
  464. package/build/dist/Types/Workflow/Components.js +7 -0
  465. package/build/dist/Types/Workflow/Components.js.map +1 -1
  466. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
  467. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  468. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
  469. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  470. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
  471. package/build/dist/UI/Components/Table/Table.js +28 -2
  472. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  473. package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
  474. package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
  475. package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
  476. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  477. package/package.json +1 -1
  478. package/Models/DatabaseModels/AIAgentTask.ts +0 -660
  479. package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
  480. package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
  481. package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
  482. package/Server/Services/AIAgentTaskService.ts +0 -240
  483. package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
  484. package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
  485. package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
  486. package/Types/AI/AIAgentTaskMetadata.ts +0 -25
  487. package/Types/AI/AIAgentTaskType.ts +0 -40
  488. package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
  489. package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
  490. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
  491. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
  492. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
  493. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
  494. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
  495. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
  496. package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
  497. package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
  498. package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
  499. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
  500. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
  501. package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
  502. package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
  503. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
  504. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
  505. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
  506. package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
  507. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
  508. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
  509. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
  510. package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
  511. package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
  512. package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
  513. package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
@@ -1,6 +1,16 @@
1
1
  import PositiveNumber from "../../Types/PositiveNumber";
2
2
  import ObjectID from "../../Types/ObjectID";
3
+ import OneUptimeDate from "../../Types/Date";
3
4
  import AIRunStatus from "../../Types/AI/AIRunStatus";
5
+ import AIRunType from "../../Types/AI/AIRunType";
6
+ import AIRunHumanVerdict from "../../Types/AI/AIRunHumanVerdict";
7
+ import BadDataException from "../../Types/Exception/BadDataException";
8
+ import CodeFixTaskType, {
9
+ CodeFixContextKind,
10
+ CodeFixTaskTypeHelper,
11
+ } from "../../Types/AI/CodeFixTaskType";
12
+ import SortOrder from "../../Types/BaseDatabase/SortOrder";
13
+ import QueryHelper from "../Types/Database/QueryHelper";
4
14
  import CountBy from "../Types/Database/CountBy";
5
15
  import FindBy from "../Types/Database/FindBy";
6
16
  import { OnFind } from "../Types/Database/Hooks";
@@ -14,7 +24,8 @@ import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity
14
24
  /*
15
25
  * The fields a status transition may set. Primitives only — the query-builder
16
26
  * update below bypasses column transformers, so ObjectID fields must not be
17
- * set through this path.
27
+ * set through this path. ObjectID-backed columns may be set via their
28
+ * pre-transformed string form (what the transformer would have written).
18
29
  */
19
30
  export interface AIRunTransitionSet {
20
31
  status: AIRunStatus;
@@ -26,6 +37,8 @@ export interface AIRunTransitionSet {
26
37
  llmCallCount?: number | undefined;
27
38
  toolCallCount?: number | undefined;
28
39
  totalTokens?: number | undefined;
40
+ // The claiming agent's id as a string (ObjectID.toString()) — see above.
41
+ aiAgentId?: string | undefined;
29
42
  }
30
43
 
31
44
  export class Service extends DatabaseService<Model> {
@@ -70,6 +83,251 @@ export class Service extends DatabaseService<Model> {
70
83
  return result.affected || 0;
71
84
  }
72
85
 
86
+ /*
87
+ * Atomically claim the oldest Queued code-fix run for an external agent
88
+ * worker (the /ai-agent-task/get-pending-task route). The Queued -> Running
89
+ * transition is the same status+attemptCount-guarded CAS the investigation
90
+ * queue uses, so concurrent agents can never receive the same run. The
91
+ * returned run is already Running, heartbeated, and owned by the agent.
92
+ *
93
+ * A claimed run missing its recipe's trigger record cannot be executed —
94
+ * it is finalized as Error and the loop moves on to the next candidate.
95
+ * Which record that is depends on the recipe's context kind:
96
+ * exception-based recipes need triggeredByTelemetryExceptionId,
97
+ * ImproveInstrumentation / FixFromIncident run against the incident/alert
98
+ * whose investigation triggered them, and FixPerformance carries its
99
+ * trace evidence in taskContext (no subject row at all).
100
+ */
101
+ @CaptureSpan()
102
+ public async claimNextQueuedCodeFixRun(data: {
103
+ aiAgentId: ObjectID;
104
+ }): Promise<Model | null> {
105
+ const maxClaimAttempts: number = 5;
106
+
107
+ for (let attempt: number = 0; attempt < maxClaimAttempts; attempt++) {
108
+ const run: Model | null = await this.findOneBy({
109
+ query: {
110
+ runType: AIRunType.CodeFix,
111
+ status: AIRunStatus.Queued,
112
+ },
113
+ sort: {
114
+ createdAt: SortOrder.Ascending,
115
+ },
116
+ select: {
117
+ _id: true,
118
+ projectId: true,
119
+ triggeredByTelemetryExceptionId: true,
120
+ triggeredByIncidentId: true,
121
+ triggeredByAlertId: true,
122
+ attemptCount: true,
123
+ codeFixTaskType: true,
124
+ taskContext: true,
125
+ },
126
+ props: {
127
+ isRoot: true,
128
+ },
129
+ });
130
+
131
+ if (!run || !run.id) {
132
+ return null;
133
+ }
134
+
135
+ const claimedCount: number = await this.attemptStatusTransition({
136
+ aiRunId: run.id,
137
+ fromStatus: AIRunStatus.Queued,
138
+ expectedAttemptCount: run.attemptCount || 0,
139
+ set: {
140
+ status: AIRunStatus.Running,
141
+ startedAt: OneUptimeDate.getCurrentDate(),
142
+ lastHeartbeatAt: OneUptimeDate.getCurrentDate(),
143
+ attemptCount: (run.attemptCount || 0) + 1,
144
+ aiAgentId: data.aiAgentId.toString(),
145
+ },
146
+ });
147
+
148
+ if (claimedCount === 0) {
149
+ // Another agent won this run — try the next candidate.
150
+ continue;
151
+ }
152
+
153
+ /*
154
+ * Normalize the task recipe BEFORE the executability guard: a null
155
+ * codeFixTaskType means FixException (rows created before task
156
+ * recipes existed), the worker dispatches on this value, and the
157
+ * guard below is recipe-dependent.
158
+ */
159
+ run.codeFixTaskType = CodeFixTaskTypeHelper.fromDatabaseValue(
160
+ run.codeFixTaskType,
161
+ );
162
+
163
+ /*
164
+ * Recipe-dependent executability guard, grouped by the recipe's
165
+ * context kind: exception-based recipes are unexecutable without
166
+ * their telemetry exception; recipes whose subject is an
167
+ * incident/alert (ImproveInstrumentation, FixFromIncident)
168
+ * legitimately carry NO exception id; and FixPerformance carries
169
+ * neither — its trace evidence lives in taskContext. Rejecting a
170
+ * kind for lacking another kind's record would Error every run its
171
+ * trigger enqueues.
172
+ */
173
+ const contextKind: CodeFixContextKind =
174
+ CodeFixTaskTypeHelper.getContextKind(run.codeFixTaskType);
175
+
176
+ let missingContextMessage: string | null = null;
177
+
178
+ if (contextKind === CodeFixContextKind.TelemetryException) {
179
+ missingContextMessage = run.triggeredByTelemetryExceptionId
180
+ ? null
181
+ : "Queued code-fix run has no telemetry exception to fix.";
182
+ } else if (contextKind === CodeFixContextKind.IncidentOrAlertSubject) {
183
+ missingContextMessage =
184
+ run.triggeredByIncidentId || run.triggeredByAlertId
185
+ ? null
186
+ : "Queued code-fix run has no incident or alert subject.";
187
+ } else {
188
+ missingContextMessage = run.taskContext?.traceId
189
+ ? null
190
+ : "Queued code-fix run has no trace evidence in its task context.";
191
+ }
192
+
193
+ if (missingContextMessage) {
194
+ await this.attemptStatusTransition({
195
+ aiRunId: run.id,
196
+ fromStatus: AIRunStatus.Running,
197
+ set: {
198
+ status: AIRunStatus.Error,
199
+ completedAt: OneUptimeDate.getCurrentDate(),
200
+ errorMessage: missingContextMessage,
201
+ },
202
+ });
203
+ continue;
204
+ }
205
+
206
+ return run;
207
+ }
208
+
209
+ return null;
210
+ }
211
+
212
+ /*
213
+ * The latest CodeFix run of EACH task recipe for an exception — at most
214
+ * one run per CodeFixTaskType, newest first (so the first element is the
215
+ * latest run overall). Backs /telemetry-exception/get-ai-agent-task: the
216
+ * exception page must show a FixException run and a WriteRegressionTest
217
+ * run side by side, not just whichever was created last.
218
+ *
219
+ * codeFixTaskType is normalized on the returned models: legacy null rows
220
+ * come back as FixException.
221
+ */
222
+ @CaptureSpan()
223
+ public async getLatestCodeFixRunPerTaskType(data: {
224
+ telemetryExceptionId: ObjectID;
225
+ }): Promise<Array<Model>> {
226
+ const taskTypes: Array<CodeFixTaskType> = Object.values(CodeFixTaskType);
227
+
228
+ const latestRuns: Array<Model | null> = await Promise.all(
229
+ taskTypes.map((taskType: CodeFixTaskType): Promise<Model | null> => {
230
+ return this.findOneBy({
231
+ query: {
232
+ runType: AIRunType.CodeFix,
233
+ triggeredByTelemetryExceptionId: data.telemetryExceptionId,
234
+ // Null means FixException — see the class comment above.
235
+ codeFixTaskType:
236
+ taskType === CodeFixTaskType.FixException
237
+ ? QueryHelper.equalToOrNull(CodeFixTaskType.FixException)
238
+ : taskType,
239
+ },
240
+ select: {
241
+ _id: true,
242
+ status: true,
243
+ errorMessage: true,
244
+ createdAt: true,
245
+ codeFixTaskType: true,
246
+ },
247
+ sort: {
248
+ createdAt: SortOrder.Descending,
249
+ },
250
+ props: {
251
+ isRoot: true,
252
+ },
253
+ });
254
+ }),
255
+ );
256
+
257
+ const runs: Array<Model> = latestRuns.filter(
258
+ (run: Model | null): boolean => {
259
+ return Boolean(run);
260
+ },
261
+ ) as Array<Model>;
262
+
263
+ for (const run of runs) {
264
+ run.codeFixTaskType = CodeFixTaskTypeHelper.fromDatabaseValue(
265
+ run.codeFixTaskType,
266
+ );
267
+ }
268
+
269
+ runs.sort((a: Model, b: Model): number => {
270
+ return (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0);
271
+ });
272
+
273
+ return runs;
274
+ }
275
+
276
+ /*
277
+ * Measurement layer (Phase 2): record a human's one-click verdict
278
+ * (Confirmed / Rejected) on the LATEST COMPLETED investigation run for an
279
+ * incident or alert. Overwriting an existing verdict is deliberate — a
280
+ * user may change their mind; the verdict is per-run state, not an audit
281
+ * trail. Throws when no completed investigation exists for the subject.
282
+ * Callers must have already access-checked the subject under the USER's
283
+ * permissions — this method reads and writes as root (investigation runs
284
+ * are system-authored, so the per-user privacy pin would hide them).
285
+ */
286
+ @CaptureSpan()
287
+ public async applyHumanVerdictToLatestInvestigation(data: {
288
+ incidentId?: ObjectID | undefined;
289
+ alertId?: ObjectID | undefined;
290
+ verdict: AIRunHumanVerdict;
291
+ verdictByUserId: ObjectID;
292
+ }): Promise<{ runId: ObjectID; verdict: AIRunHumanVerdict }> {
293
+ if (!data.incidentId && !data.alertId) {
294
+ throw new BadDataException(
295
+ "An incident or alert subject is required to record a verdict.",
296
+ );
297
+ }
298
+
299
+ const run: Model | null = await this.findOneBy({
300
+ query: {
301
+ runType: AIRunType.Investigation,
302
+ status: AIRunStatus.Completed,
303
+ ...(data.incidentId
304
+ ? { triggeredByIncidentId: data.incidentId }
305
+ : { triggeredByAlertId: data.alertId! }),
306
+ },
307
+ select: { _id: true },
308
+ sort: { createdAt: SortOrder.Descending },
309
+ props: { isRoot: true },
310
+ });
311
+
312
+ if (!run || !run.id) {
313
+ throw new BadDataException(
314
+ "No completed AI investigation exists for this subject yet — a verdict can only be recorded on a completed investigation.",
315
+ );
316
+ }
317
+
318
+ await this.updateOneById({
319
+ id: run.id,
320
+ data: {
321
+ humanVerdict: data.verdict,
322
+ humanVerdictAt: OneUptimeDate.getCurrentDate(),
323
+ humanVerdictByUserId: data.verdictByUserId,
324
+ },
325
+ props: { isRoot: true },
326
+ });
327
+
328
+ return { runId: run.id, verdict: data.verdict };
329
+ }
330
+
73
331
  protected override async onBeforeFind(
74
332
  findBy: FindBy<Model>,
75
333
  ): Promise<OnFind<Model>> {
@@ -1,4 +1,4 @@
1
- import { IsBillingEnabled } from "../EnvironmentConfig";
1
+ import { getAllEnvVars, IsBillingEnabled } from "../EnvironmentConfig";
2
2
  import BaseService from "./BaseService";
3
3
  import LlmProviderService from "./LlmProviderService";
4
4
  import LlmLogService from "./LlmLogService";
@@ -21,19 +21,179 @@ import LlmLogStatus from "../../Types/LlmLogStatus";
21
21
  import ObjectID from "../../Types/ObjectID";
22
22
  import OneUptimeDate from "../../Types/Date";
23
23
  import BadDataException from "../../Types/Exception/BadDataException";
24
+ import PaymentRequiredException from "../../Types/Exception/PaymentRequiredException";
25
+ import SubscriptionPlan, {
26
+ PlanType,
27
+ } from "../../Types/Billing/SubscriptionPlan";
24
28
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
25
29
  import logger, { LogAttributes } from "../Utils/Logger";
26
30
 
31
+ /*
32
+ * ============================ LlmLog feature labels ==========================
33
+ *
34
+ * EVERY constant below is a PERSISTED VALUE, not just a display string. Each
35
+ * one is written verbatim into LlmLog.feature by the call site that owns it,
36
+ * and the G4 daily autonomous token budget reads it back by matching those
37
+ * PERSISTED STRINGS against AUTONOMOUS_AI_FEATURES:
38
+ *
39
+ * SELECT SUM("totalTokens") FROM "LlmLog"
40
+ * WHERE "projectId" = $1 AND "createdAt" >= $2 AND "feature" = ANY($3)
41
+ * -- LlmLogService.getTotalTokensUsedSince, $3 = AUTONOMOUS_AI_FEATURES
42
+ *
43
+ * So a label is a piece of the budget's ledger. Renaming one rewrites history:
44
+ * rows written under the old label stop matching, usedTokensToday collapses
45
+ * toward zero, and a project that had already exhausted its daily budget
46
+ * silently gets a fresh full one — unbounded overspend, with no error anywhere.
47
+ *
48
+ * RENAMING A LABEL THEREFORE REQUIRES BOTH:
49
+ * 1. a backfill migration rewriting LlmLog.feature on existing rows, and
50
+ * 2. an entry in LEGACY_AUTONOMOUS_AI_FEATURES (below), so rows written
51
+ * under the old label during the deploy window still count.
52
+ * Changing a value on its own is never safe.
53
+ *
54
+ * Every autonomous write site imports its label from here — no call site may
55
+ * hardcode the literal. The list and the writers cannot drift apart, which
56
+ * would otherwise leave a feature permanently outside the budget.
57
+ */
58
+
59
+ /*
60
+ * The LlmLog feature name for incident investigations (AIInvestigationEngine,
61
+ * driven by IncidentInvestigationRunner) — fired automatically when an incident
62
+ * is declared, so a monitor storm is a run storm.
63
+ */
64
+ export const AI_INCIDENT_INVESTIGATION_FEATURE: string =
65
+ "AI Incident Investigation";
66
+
67
+ /*
68
+ * The LlmLog feature name for alert investigations (AlertInvestigationRunner).
69
+ * Same engine as incidents, fired on alert creation.
70
+ */
71
+ export const AI_ALERT_INVESTIGATION_FEATURE: string = "AI Alert Investigation";
72
+
73
+ /*
74
+ * The LlmLog feature name for on-resolve investigation grading
75
+ * (InvestigationGrader) — one constrained call per resolved incident, but
76
+ * autonomous, so the budget covers it.
77
+ */
78
+ export const AI_INVESTIGATION_GRADING_FEATURE: string =
79
+ "AI Investigation Grading";
80
+
81
+ /*
82
+ * The LlmLog feature name for the G6 structured confidence signal
83
+ * (ConfidenceSignal) — one constrained call per completed investigation,
84
+ * outside the per-run caps but inside this daily budget. A budget rejection
85
+ * degrades the signal to "classification-failed" (per-consumer fail
86
+ * directions), never a run failure.
87
+ */
88
+ export const AI_CONFIDENCE_CLASSIFICATION_FEATURE: string =
89
+ "AI Confidence Classification";
90
+
91
+ /*
92
+ * The LlmLog feature name for server-mediated code-fix agent completions
93
+ * (B4 Tier 0) — the in-house coding agent's tool loop routes every LLM call
94
+ * through /ai-agent-data/llm-completion, which executes under this feature.
95
+ */
96
+ export const AI_CODE_FIX_FEATURE: string = "AI Code Fix";
97
+
98
+ /** Metering and autonomous-budget feature name for workflow AI components. */
99
+ export const WORKFLOW_AI_FEATURE: string = "Workflow AI";
100
+
101
+ /*
102
+ * The LlmLog feature name for AI runbook steps. Runbooks are triggered by
103
+ * incident/alert/maintenance rules, so these calls are storm-shaped: one
104
+ * flapping monitor can start many executions.
105
+ */
106
+ export const RUNBOOK_AI_STEP_FEATURE: string = "Runbook AI Step";
107
+
108
+ /*
109
+ * The LlmLog feature name for per-insight triage: the budgeted, read-only
110
+ * Investigation AIRun a newly filed AIInsight enqueues. Insights are filed by
111
+ * deterministic detectors on a scheduled scan, so these runs are storm-shaped
112
+ * by construction and fully autonomous.
113
+ */
114
+ export const AI_INSIGHT_TRIAGE_FEATURE: string = "AI Insight Triage";
115
+
116
+ /*
117
+ * The pre-rename values of the six labels that carried the "Sentinel" codename.
118
+ * These are NOT written by anything any more — they exist only so the daily
119
+ * budget keeps counting rows that ALREADY carry them:
120
+ *
121
+ * - rows written by the old code during the deploy window (old and new pods
122
+ * serve traffic side by side, and the budget is a UTC-day sum, so the same
123
+ * day contains both labels); and
124
+ * - any row the backfill migration missed (it runs once, and rows can be
125
+ * written between the migration and the last old pod draining).
126
+ *
127
+ * Without them, the first deploy day hands every project a second full budget.
128
+ *
129
+ * SAFE TO DELETE once no LlmLog row carries an old label. Retention is the
130
+ * clock: LlmLogService hard-deletes rows older than 3 days by createdAt — but
131
+ * ONLY when billing is enabled. So on OneUptime cloud these entries are dead
132
+ * weight 3 days after the deploy; on a self-hosted instance (no billing, no
133
+ * retention sweep) LlmLog rows live forever, so they must stay until the
134
+ * backfill migration has demonstrably rewritten every row.
135
+ *
136
+ * Carrying them costs nothing: AUTONOMOUS_AI_FEATURES is a pure match-list
137
+ * (SQL `= ANY`, and an `.includes()` gate on the write path that no writer can
138
+ * trip because no writer emits these strings any more).
139
+ */
140
+ export const LEGACY_AUTONOMOUS_AI_FEATURES: Array<string> = [
141
+ "Sentinel Incident Investigation",
142
+ "Sentinel Alert Investigation",
143
+ "Sentinel Investigation Grading",
144
+ "Sentinel Confidence Classification",
145
+ "Sentinel Code Fix",
146
+ "Sentinel Insight Triage",
147
+ ];
148
+
27
149
  /*
28
150
  * Features that run WITHOUT a human in the loop. The per-project daily token
29
151
  * budget (Project.aiDailyAutonomousTokenLimit, G4) applies only to these —
30
152
  * interactive chat and explicitly user-triggered AI are never budget-blocked.
31
153
  * Auto-postmortem is deliberately excluded for now: it is one call per
32
154
  * resolved incident, not storm-shaped; include it when it moves to the queue.
155
+ *
156
+ * THE ENTRIES ARE PERSISTED STRINGS — see the header comment above before
157
+ * touching any of them. Built from the constants (never raw literals) so the
158
+ * budget list and the write sites cannot drift.
33
159
  */
34
160
  export const AUTONOMOUS_AI_FEATURES: Array<string> = [
35
- "Sentinel Incident Investigation",
36
- "Sentinel Alert Investigation",
161
+ // Investigations: fired by incident/alert creation, fully unattended.
162
+ AI_INCIDENT_INVESTIGATION_FEATURE,
163
+ AI_ALERT_INVESTIGATION_FEATURE,
164
+ // One constrained call per resolved incident (InvestigationGrader).
165
+ AI_INVESTIGATION_GRADING_FEATURE,
166
+ // One constrained call per completed investigation (ConfidenceSignal).
167
+ AI_CONFIDENCE_CLASSIFICATION_FEATURE,
168
+ /*
169
+ * Server-mediated code-fix agent completions (B4 Tier 0). Fix runs are
170
+ * user-triggered, but the tool loop then runs unattended for up to ~40
171
+ * calls — storm-shaped enough that the daily budget must cover it. The
172
+ * per-run loop budgets (CodeFixAgentCompletion) cap a single run; this
173
+ * daily pool caps all of them together.
174
+ */
175
+ AI_CODE_FIX_FEATURE,
176
+ /*
177
+ * AI runbook steps run unattended once the runbook starts, and rule
178
+ * triggers make them storm-shaped (see the constant above) — even
179
+ * manually started runs proceed without a human approving each LLM call.
180
+ */
181
+ RUNBOOK_AI_STEP_FEATURE,
182
+ // Workflow components also execute without per-request human approval.
183
+ WORKFLOW_AI_FEATURE,
184
+ /*
185
+ * Per-insight preventive triage (InsightTriageRunner). One read-only
186
+ * Investigation run per new AIInsight, with no human in the loop —
187
+ * a noisy scan tick can file several insights at once, so the daily
188
+ * budget must cover these runs too.
189
+ */
190
+ AI_INSIGHT_TRIAGE_FEATURE,
191
+ /*
192
+ * Pre-rename labels. Keeps the budget honest for rows already persisted
193
+ * under the old names — read the LEGACY_AUTONOMOUS_AI_FEATURES comment
194
+ * before removing.
195
+ */
196
+ ...LEGACY_AUTONOMOUS_AI_FEATURES,
37
197
  ];
38
198
 
39
199
  export interface AutonomousBudgetStatus {
@@ -60,6 +220,23 @@ export interface AILogRequest {
60
220
  tools?: Array<LLMToolDefinition> | undefined;
61
221
  maxTokens?: number | undefined;
62
222
  temperature?: number | undefined;
223
+ /** Per-attempt provider request timeout. */
224
+ requestTimeoutInMs?: number | undefined;
225
+ /** Provider retry count. A workflow uses zero to avoid duplicate billing. */
226
+ requestRetries?: number | undefined;
227
+ /**
228
+ * Re-apply caller-owned model inputs and bounds after provider-level
229
+ * additional parameters. This prevents unattended callers from having their
230
+ * messages, tools, choice count, or output cap overridden centrally.
231
+ */
232
+ protectRequestParameters?: boolean | undefined;
233
+ /**
234
+ * When false, errors from the provider-execution phase are replaced with a
235
+ * generic message before they reach application logs, traces, persisted LLM
236
+ * logs, or the caller. Use this when a provider could echo private request
237
+ * content in an error response.
238
+ */
239
+ storeErrorDetails?: boolean | undefined;
63
240
  /*
64
241
  * When false, prompt/response previews are NOT persisted to LlmLog.
65
242
  * Use for features whose content is private to a single user (e.g. AI
@@ -79,6 +256,56 @@ export class Service extends BaseService {
79
256
  super();
80
257
  }
81
258
 
259
+ /**
260
+ * Assert the project-level feature, subscription, and payment gates shared by
261
+ * background AI entry points. Provider availability, balance, and token
262
+ * budgets are checked later by executeWithLogging so those failures are
263
+ * captured in the metered LLM log.
264
+ */
265
+ @CaptureSpan()
266
+ public async assertProjectCanUseAI(projectId: ObjectID): Promise<void> {
267
+ const [project, planStatus]: [
268
+ Project | null,
269
+ { plan: PlanType | null; isSubscriptionUnpaid: boolean },
270
+ ] = await Promise.all([
271
+ ProjectService.findOneById({
272
+ id: projectId,
273
+ select: { enableAi: true },
274
+ props: { isRoot: true },
275
+ }),
276
+ ProjectService.getCurrentPlan(projectId),
277
+ ]);
278
+
279
+ if (!project) {
280
+ throw new BadDataException("Project not found.");
281
+ }
282
+
283
+ if (project.enableAi === false) {
284
+ throw new BadDataException(
285
+ "AI features are disabled for this project. Enable AI in Project Settings before running this workflow.",
286
+ );
287
+ }
288
+
289
+ if (planStatus.isSubscriptionUnpaid) {
290
+ throw new PaymentRequiredException(
291
+ "Your subscription is unpaid. Please update your payment method to use AI in workflows.",
292
+ );
293
+ }
294
+
295
+ if (
296
+ planStatus.plan &&
297
+ !SubscriptionPlan.isFeatureAccessibleOnCurrentPlan(
298
+ PlanType.Growth,
299
+ planStatus.plan,
300
+ getAllEnvVars(),
301
+ )
302
+ ) {
303
+ throw new PaymentRequiredException(
304
+ "Please upgrade your plan to Growth to use AI in workflows.",
305
+ );
306
+ }
307
+ }
308
+
82
309
  /*
83
310
  * G4 daily budget: has this project consumed its daily autonomous-token
84
311
  * allowance (UTC day)? Counts only AUTONOMOUS_AI_FEATURES tokens, so chat
@@ -249,7 +476,7 @@ export class Service extends BaseService {
249
476
  await this.getAutonomousDailyBudgetStatus(request.projectId);
250
477
 
251
478
  if (budget.exhausted) {
252
- const budgetMessage: string = `Daily autonomous AI token budget exhausted (${budget.usedTokensToday.toLocaleString()} of ${budget.limitInTokens?.toLocaleString()} tokens used today). Autonomous investigations resume tomorrow (UTC) — raise or unset the limit in the AI settings pages.`;
479
+ const budgetMessage: string = `Daily autonomous AI token budget exhausted (${budget.usedTokensToday.toLocaleString()} of ${budget.limitInTokens?.toLocaleString()} tokens used today). Autonomous AI requests resume tomorrow (UTC) — raise or unset the limit in the AI settings pages.`;
253
480
 
254
481
  logEntry.status = LlmLogStatus.BudgetExceeded;
255
482
  logEntry.statusMessage = budgetMessage.substring(0, 490);
@@ -290,6 +517,10 @@ export class Service extends BaseService {
290
517
  temperature: request.temperature ?? 0.7,
291
518
  maxTokens: request.maxTokens,
292
519
  tools: request.tools,
520
+ requestTimeoutInMs: request.requestTimeoutInMs,
521
+ requestRetries: request.requestRetries,
522
+ protectRequestParameters: request.protectRequestParameters,
523
+ includeProviderErrorDetails: request.storeErrorDetails !== false,
293
524
  ...(llmProvider.additionalParams
294
525
  ? { additionalParams: llmProvider.additionalParams }
295
526
  : {}),
@@ -300,6 +531,7 @@ export class Service extends BaseService {
300
531
  // Update log with success info
301
532
  logEntry.status = LlmLogStatus.Success;
302
533
  logEntry.totalTokens = response.usage?.totalTokens || 0;
534
+ logEntry.completionTokens = response.usage?.completionTokens || 0;
303
535
  logEntry.cachedInputTokens = response.usage?.cachedInputTokens || 0;
304
536
  logEntry.cacheCreationTokens = response.usage?.cacheCreationTokens || 0;
305
537
  logEntry.responsePreview = storeContentPreviews
@@ -370,10 +602,16 @@ export class Service extends BaseService {
370
602
  llmLog: savedLog,
371
603
  };
372
604
  } catch (error) {
373
- // Log the error
374
- logEntry.status = LlmLogStatus.Error;
375
- logEntry.statusMessage =
605
+ const rawErrorMessage: string =
376
606
  error instanceof Error ? error.message : String(error);
607
+ const errorMessage: string =
608
+ request.storeErrorDetails === false
609
+ ? "The AI provider request failed. Review the provider configuration and try again."
610
+ : rawErrorMessage;
611
+
612
+ // Log the error without persisting private provider details when asked.
613
+ logEntry.status = LlmLogStatus.Error;
614
+ logEntry.statusMessage = errorMessage;
377
615
  logEntry.requestCompletedAt = new Date();
378
616
  logEntry.durationMs = new Date().getTime() - startTime.getTime();
379
617
 
@@ -382,6 +620,10 @@ export class Service extends BaseService {
382
620
  props: { isRoot: true },
383
621
  });
384
622
 
623
+ if (request.storeErrorDetails === false) {
624
+ throw new BadDataException(errorMessage);
625
+ }
626
+
385
627
  throw error;
386
628
  }
387
629
  }
@@ -67,7 +67,7 @@ import AlertLabelRuleEngineService from "./AlertLabelRuleEngineService";
67
67
  import AlertOnCallRuleEngineService from "./AlertOnCallRuleEngineService";
68
68
  import AlertOwnerRuleEngineService from "./AlertOwnerRuleEngineService";
69
69
  import RunbookRuleEngineService from "./RunbookRuleEngineService";
70
- import SentinelAlertInvestigationRunner from "../Utils/AI/Sentinel/AlertInvestigationRunner";
70
+ import AIAlertInvestigationRunner from "../Utils/AI/SRE/AlertInvestigationRunner";
71
71
  import AlertPrivacyRuleEngineService from "./AlertPrivacyRuleEngineService";
72
72
  import ProjectService from "./ProjectService";
73
73
 
@@ -561,21 +561,21 @@ export class Service extends DatabaseService<Model> {
561
561
  })
562
562
  .then(async () => {
563
563
  /*
564
- * Sentinel (AI SRE): automatically investigate the new alert and post a
564
+ * AI (AI SRE): automatically investigate the new alert and post a
565
565
  * cited root cause analysis to the alert timeline + Slack/Teams. Runs
566
566
  * last, is gated per project (opt-in) + requires an LLM provider, and is
567
567
  * read-only.
568
568
  */
569
569
  try {
570
570
  if (createdItem.projectId && createdItem.id) {
571
- await SentinelAlertInvestigationRunner.investigateNewAlert({
571
+ await AIAlertInvestigationRunner.investigateNewAlert({
572
572
  alertId: createdItem.id,
573
573
  projectId: createdItem.projectId,
574
574
  });
575
575
  }
576
576
  } catch (error) {
577
577
  logger.error(
578
- `Sentinel alert investigation failed in AlertService.onCreateSuccess: ${error}`,
578
+ `AI alert investigation failed in AlertService.onCreateSuccess: ${error}`,
579
579
  {
580
580
  projectId: createdItem.projectId?.toString(),
581
581
  alertId: createdItem.id?.toString(),