@oneuptime/common 11.5.4 → 11.5.6

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 (539) 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/Models/DatabaseModels/User.ts +47 -0
  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/1784048917994-AddCreatedByUserToUser.ts +23 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +32 -0
  39. package/Server/Infrastructure/Queue.ts +82 -4
  40. package/Server/Infrastructure/Semaphore.ts +62 -1
  41. package/Server/Middleware/MasterAdminAuthorization.ts +37 -0
  42. package/Server/Middleware/ProjectAuthorization.ts +40 -15
  43. package/Server/Services/AIAgentService.ts +32 -0
  44. package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
  45. package/Server/Services/AIInsightService.ts +174 -0
  46. package/Server/Services/AIRunEventService.ts +63 -0
  47. package/Server/Services/AIRunService.ts +259 -1
  48. package/Server/Services/AIService.ts +249 -7
  49. package/Server/Services/AlertService.ts +4 -4
  50. package/Server/Services/CodeRepositoryService.ts +209 -0
  51. package/Server/Services/GlobalConfigService.ts +148 -0
  52. package/Server/Services/IncidentService.ts +183 -38
  53. package/Server/Services/IncidentStateTimelineService.ts +24 -4
  54. package/Server/Services/Index.ts +4 -4
  55. package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
  56. package/Server/Services/LlmLogService.ts +27 -0
  57. package/Server/Services/LlmProviderService.ts +108 -0
  58. package/Server/Services/MetricBaselineService.ts +123 -0
  59. package/Server/Services/MonitorService.ts +15 -0
  60. package/Server/Services/TeamMemberService.ts +2 -0
  61. package/Server/Services/TelemetryExceptionService.ts +323 -116
  62. package/Server/Services/TraceAggregationService.ts +176 -0
  63. package/Server/Services/UserService.ts +10 -0
  64. package/Server/Types/Workflow/ComponentCode.ts +6 -0
  65. package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
  66. package/Server/Types/Workflow/Components/Index.ts +2 -0
  67. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
  68. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
  69. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
  70. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
  71. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
  72. package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
  73. package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
  74. package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
  75. package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
  76. package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
  77. package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
  78. package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
  79. package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
  80. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
  81. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
  82. package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
  83. package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
  84. package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
  85. package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
  86. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
  87. package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
  88. package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
  89. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
  90. package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
  91. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
  92. package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
  93. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
  94. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
  95. package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
  96. package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
  97. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
  98. package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
  99. package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
  100. package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
  101. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
  102. package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
  103. package/Server/Utils/AI/Toolbox/Index.ts +2 -2
  104. package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
  105. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
  106. package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
  107. package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
  108. package/Server/Utils/Execute.ts +2 -1
  109. package/Server/Utils/LLM/LLMService.ts +160 -30
  110. package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
  111. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
  112. package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +16 -6
  113. package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +14 -0
  114. package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +14 -3
  115. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +130 -12
  116. package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
  117. package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
  118. package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
  119. package/Tests/Server/Services/AIInsightService.test.ts +324 -0
  120. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
  121. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
  122. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
  123. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
  124. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
  125. package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
  126. package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
  127. package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
  128. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
  129. package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
  130. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
  131. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
  132. package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
  133. package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
  134. package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
  135. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
  136. package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
  137. package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
  138. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
  139. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
  140. package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
  141. package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
  142. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
  143. package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
  144. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
  145. package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
  146. package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
  147. package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
  148. package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
  149. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
  150. package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
  151. package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
  152. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
  153. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
  154. package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
  155. package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
  156. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
  157. package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
  158. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
  159. package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
  160. package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
  161. package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
  162. package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
  163. package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
  164. package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
  165. package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
  166. package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +553 -0
  167. package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +590 -0
  168. package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageFormatterUnits.test.ts +254 -0
  169. package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +821 -0
  170. package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
  171. package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
  172. package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
  173. package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
  174. package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
  175. package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
  176. package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
  177. package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
  178. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
  179. package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
  180. package/Types/AI/AIChatTypes.ts +8 -0
  181. package/Types/AI/AIInsightEvidence.ts +77 -0
  182. package/Types/AI/AIInsightHumanVerdict.ts +15 -0
  183. package/Types/AI/AIInsightSeverity.ts +13 -0
  184. package/Types/AI/AIInsightStatus.ts +38 -0
  185. package/Types/AI/AIInsightType.ts +41 -0
  186. package/Types/AI/AIRunAutoGrade.ts +18 -0
  187. package/Types/AI/AIRunEventType.ts +5 -0
  188. package/Types/AI/AIRunHumanVerdict.ts +17 -0
  189. package/Types/AI/AIRunType.ts +6 -0
  190. package/Types/AI/CodeFixTaskContext.ts +88 -0
  191. package/Types/AI/CodeFixTaskType.ts +132 -0
  192. package/Types/AI/FixPullRequestCiStatus.ts +132 -0
  193. package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
  194. package/Types/Incident/IncidentMetricType.ts +7 -0
  195. package/Types/Monitor/CriteriaFilter.ts +8 -0
  196. package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
  197. package/Types/Monitor/MonitorStep.ts +38 -0
  198. package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
  199. package/Types/Monitor/MonitorType.ts +17 -0
  200. package/Types/Monitor/SqlDatabaseType.ts +49 -0
  201. package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
  202. package/Types/Permission.ts +11 -95
  203. package/Types/Probe/ProbeMonitorResponse.ts +2 -0
  204. package/Types/Runbook/RunbookStep.ts +26 -2
  205. package/Types/Runbook/RunbookStepType.ts +1 -0
  206. package/Types/Workflow/Component.ts +13 -0
  207. package/Types/Workflow/ComponentID.ts +1 -0
  208. package/Types/Workflow/Components/AI.ts +148 -0
  209. package/Types/Workflow/Components.ts +8 -0
  210. package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
  211. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
  212. package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
  213. package/UI/Components/Table/Table.tsx +38 -2
  214. package/UI/Utils/TableColumnsToCsv.ts +385 -0
  215. package/Utils/Monitor/MonitorMetricType.ts +1 -0
  216. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
  217. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  218. package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
  219. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
  220. package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
  221. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  222. package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
  223. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  224. package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
  225. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  226. package/build/dist/Models/DatabaseModels/Index.js +4 -8
  227. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  228. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
  229. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
  230. package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
  231. package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
  232. package/build/dist/Models/DatabaseModels/Project.js +127 -6
  233. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  234. package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
  235. package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
  236. package/build/dist/Models/DatabaseModels/User.js +46 -0
  237. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  238. package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
  239. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  240. package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
  241. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  242. package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
  243. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  244. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
  245. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
  246. package/build/dist/Server/API/AIInsightAPI.js +140 -0
  247. package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
  248. package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
  249. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  250. package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
  251. package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
  252. package/build/dist/Server/API/GitHubAPI.js +164 -2
  253. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  254. package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
  255. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  256. package/build/dist/Server/EnvironmentConfig.js +1 -1
  257. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  258. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
  259. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
  260. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
  261. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
  262. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
  263. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
  264. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
  265. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
  266. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
  267. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
  268. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
  269. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
  270. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
  271. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
  272. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
  273. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
  274. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
  275. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
  276. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
  277. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
  278. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
  279. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
  280. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
  281. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
  282. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
  283. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
  284. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
  285. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
  286. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
  287. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
  288. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784048917994-AddCreatedByUserToUser.js +18 -0
  289. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784048917994-AddCreatedByUserToUser.js.map +1 -0
  290. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +32 -0
  291. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  292. package/build/dist/Server/Infrastructure/Queue.js +73 -3
  293. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  294. package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
  295. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  296. package/build/dist/Server/Middleware/MasterAdminAuthorization.js +26 -0
  297. package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
  298. package/build/dist/Server/Middleware/ProjectAuthorization.js +40 -14
  299. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  300. package/build/dist/Server/Services/AIAgentService.js +29 -0
  301. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  302. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
  303. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
  304. package/build/dist/Server/Services/AIInsightService.js +164 -0
  305. package/build/dist/Server/Services/AIInsightService.js.map +1 -0
  306. package/build/dist/Server/Services/AIRunEventService.js +49 -0
  307. package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
  308. package/build/dist/Server/Services/AIRunService.js +221 -0
  309. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  310. package/build/dist/Server/Services/AIService.js +198 -11
  311. package/build/dist/Server/Services/AIService.js.map +1 -1
  312. package/build/dist/Server/Services/AlertService.js +4 -4
  313. package/build/dist/Server/Services/AlertService.js.map +1 -1
  314. package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
  315. package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
  316. package/build/dist/Server/Services/GlobalConfigService.js +84 -0
  317. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  318. package/build/dist/Server/Services/IncidentService.js +149 -37
  319. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  320. package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
  321. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  322. package/build/dist/Server/Services/Index.js +4 -4
  323. package/build/dist/Server/Services/Index.js.map +1 -1
  324. package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
  325. package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
  326. package/build/dist/Server/Services/LlmLogService.js +23 -0
  327. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  328. package/build/dist/Server/Services/LlmProviderService.js +96 -0
  329. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  330. package/build/dist/Server/Services/MetricBaselineService.js +65 -0
  331. package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
  332. package/build/dist/Server/Services/MonitorService.js +9 -1
  333. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  334. package/build/dist/Server/Services/TeamMemberService.js +2 -0
  335. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  336. package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
  337. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  338. package/build/dist/Server/Services/TraceAggregationService.js +124 -0
  339. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  340. package/build/dist/Server/Services/UserService.js +8 -0
  341. package/build/dist/Server/Services/UserService.js.map +1 -1
  342. package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
  343. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
  344. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
  345. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  346. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  347. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
  348. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
  349. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
  350. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
  351. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
  352. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
  353. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
  354. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
  355. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
  356. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
  357. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
  358. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
  359. package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
  360. package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
  361. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
  362. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
  363. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
  364. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
  365. package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
  366. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
  367. package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
  368. package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
  369. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
  370. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
  371. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
  372. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
  373. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
  374. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
  375. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
  376. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
  377. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
  378. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
  379. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
  380. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
  381. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
  382. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
  383. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
  384. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
  385. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
  386. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
  387. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
  388. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
  389. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
  390. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
  391. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
  392. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
  393. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
  394. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
  395. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
  396. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
  397. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
  398. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
  399. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
  400. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
  401. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
  402. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
  403. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
  404. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
  405. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
  406. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
  407. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
  408. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
  409. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
  410. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
  411. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
  412. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
  413. package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
  414. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
  415. package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
  416. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  417. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
  418. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
  419. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
  420. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  421. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
  422. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
  423. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
  424. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
  425. package/build/dist/Server/Utils/Execute.js.map +1 -1
  426. package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
  427. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  428. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
  429. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
  430. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
  431. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  432. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +15 -7
  433. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
  434. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +12 -1
  435. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
  436. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +8 -3
  437. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
  438. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +96 -12
  439. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  440. package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
  441. package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
  442. package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
  443. package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
  444. package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
  445. package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
  446. package/build/dist/Types/AI/AIInsightStatus.js +36 -0
  447. package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
  448. package/build/dist/Types/AI/AIInsightType.js +42 -0
  449. package/build/dist/Types/AI/AIInsightType.js.map +1 -0
  450. package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
  451. package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
  452. package/build/dist/Types/AI/AIRunEventType.js +5 -0
  453. package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
  454. package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
  455. package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
  456. package/build/dist/Types/AI/AIRunType.js +6 -0
  457. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  458. package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
  459. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
  460. package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
  461. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
  462. package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
  463. package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
  464. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
  465. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
  466. package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
  467. package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
  468. package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
  469. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  470. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
  471. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  472. package/build/dist/Types/Monitor/MonitorStep.js +28 -0
  473. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  474. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
  475. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
  476. package/build/dist/Types/Monitor/MonitorType.js +15 -0
  477. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  478. package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
  479. package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
  480. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
  481. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
  482. package/build/dist/Types/Permission.js +10 -84
  483. package/build/dist/Types/Permission.js.map +1 -1
  484. package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
  485. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  486. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  487. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  488. package/build/dist/Types/Workflow/Components/AI.js +135 -0
  489. package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
  490. package/build/dist/Types/Workflow/Components.js +7 -0
  491. package/build/dist/Types/Workflow/Components.js.map +1 -1
  492. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
  493. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  494. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
  495. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  496. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
  497. package/build/dist/UI/Components/Table/Table.js +28 -2
  498. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  499. package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
  500. package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
  501. package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
  502. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  503. package/package.json +1 -1
  504. package/Models/DatabaseModels/AIAgentTask.ts +0 -660
  505. package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
  506. package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
  507. package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
  508. package/Server/Services/AIAgentTaskService.ts +0 -240
  509. package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
  510. package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
  511. package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
  512. package/Types/AI/AIAgentTaskMetadata.ts +0 -25
  513. package/Types/AI/AIAgentTaskType.ts +0 -40
  514. package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
  515. package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
  516. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
  517. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
  518. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
  519. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
  520. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
  521. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
  522. package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
  523. package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
  524. package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
  525. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
  526. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
  527. package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
  528. package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
  529. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
  530. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
  531. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
  532. package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
  533. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
  534. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
  535. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
  536. package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
  537. package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
  538. package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
  539. package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
@@ -43,6 +43,18 @@ export interface LLMCompletionRequest {
43
43
  maxTokens?: number | undefined;
44
44
  additionalParams?: JSONObject | undefined;
45
45
  tools?: Array<LLMToolDefinition> | undefined;
46
+ /** Per-attempt HTTP timeout. Callers may lower the provider default. */
47
+ requestTimeoutInMs?: number | undefined;
48
+ /** Number of retries after the initial request. */
49
+ requestRetries?: number | undefined;
50
+ /** Re-apply caller-owned request fields after provider-level overrides. */
51
+ protectRequestParameters?: boolean | undefined;
52
+ /**
53
+ * When false, provider HTTP error bodies are neither logged nor included in
54
+ * the exception captured by telemetry. Use this for requests whose provider
55
+ * may echo private prompt content in an error response.
56
+ */
57
+ includeProviderErrorDetails?: boolean | undefined;
46
58
  llmProviderConfig: LLMProviderConfig;
47
59
  }
48
60
 
@@ -74,6 +86,36 @@ export interface LLMProviderConfig {
74
86
  }
75
87
 
76
88
  export default class LLMService {
89
+ /*
90
+ * Provider-level parameters allowed on protected, unattended completions.
91
+ * This is deliberately a generation-only allowlist: capability fields such
92
+ * as tools, web_search_options, data_sources, modalities, audio, or future
93
+ * agent extensions must fail closed instead of silently widening egress or
94
+ * output behavior.
95
+ */
96
+ private static readonly PROTECTED_ADDITIONAL_PARAMETER_ALLOWLIST: Set<string> =
97
+ new Set([
98
+ "frequency_penalty",
99
+ "length_penalty",
100
+ "logit_bias",
101
+ "logprobs",
102
+ "max_completion_tokens",
103
+ "min_p",
104
+ "min_tokens",
105
+ "presence_penalty",
106
+ "random_seed",
107
+ "reasoning_effort",
108
+ "repetition_penalty",
109
+ "response_format",
110
+ "safe_prompt",
111
+ "seed",
112
+ "stop",
113
+ "top_k",
114
+ "top_logprobs",
115
+ "top_p",
116
+ "verbosity",
117
+ ]);
118
+
77
119
  @CaptureSpan()
78
120
  public static async getCompletion(
79
121
  request: LLMCompletionRequest,
@@ -152,6 +194,20 @@ export default class LLMService {
152
194
  });
153
195
  }
154
196
 
197
+ private static getProtectedAdditionalParameters(
198
+ additionalParams: JSONObject,
199
+ ): JSONObject {
200
+ const protectedParams: JSONObject = {};
201
+
202
+ for (const key of Object.keys(additionalParams)) {
203
+ if (this.PROTECTED_ADDITIONAL_PARAMETER_ALLOWLIST.has(key)) {
204
+ protectedParams[key] = additionalParams[key]!;
205
+ }
206
+ }
207
+
208
+ return protectedParams;
209
+ }
210
+
155
211
  private static parseOpenAIToolCalls(
156
212
  message: JSONObject,
157
213
  ): Array<LLMToolCall> | undefined {
@@ -227,9 +283,52 @@ export default class LLMService {
227
283
  data["tools"] = this.toOpenAITools(request.tools);
228
284
  }
229
285
 
230
- // Provider-configured overrides are applied last so they win over defaults.
286
+ /*
287
+ * Provider-configured tuning overrides defaults unless the caller protects
288
+ * its request. Protected callers retain only generation-safe tuning fields
289
+ * so provider-native tools and future capability fields fail closed.
290
+ */
231
291
  if (request.additionalParams) {
232
- Object.assign(data, request.additionalParams);
292
+ Object.assign(
293
+ data,
294
+ request.protectRequestParameters
295
+ ? this.getProtectedAdditionalParameters(request.additionalParams)
296
+ : request.additionalParams,
297
+ );
298
+ }
299
+
300
+ if (request.protectRequestParameters) {
301
+ const usesMaxCompletionTokens: boolean =
302
+ data["max_completion_tokens"] !== undefined;
303
+
304
+ data["model"] = modelName;
305
+ data["messages"] = this.toOpenAIMessages(request.messages);
306
+ data["temperature"] = request.temperature ?? 0.7;
307
+ data["stream"] = false;
308
+ data["n"] = 1;
309
+
310
+ if (request.maxTokens) {
311
+ if (usesMaxCompletionTokens) {
312
+ data["max_completion_tokens"] = request.maxTokens;
313
+ delete data["max_tokens"];
314
+ } else {
315
+ data["max_tokens"] = request.maxTokens;
316
+ delete data["max_completion_tokens"];
317
+ }
318
+ }
319
+
320
+ if (request.tools && request.tools.length > 0) {
321
+ data["tools"] = this.toOpenAITools(request.tools);
322
+ } else {
323
+ delete data["tools"];
324
+ delete data["tool_choice"];
325
+ delete data["functions"];
326
+ delete data["function_call"];
327
+ delete data["parallel_tool_calls"];
328
+ }
329
+
330
+ // Legacy compatible APIs may accept this fan-out control separately.
331
+ delete data["best_of"];
233
332
  }
234
333
 
235
334
  /*
@@ -291,6 +390,33 @@ export default class LLMService {
291
390
  };
292
391
  }
293
392
 
393
+ /**
394
+ * Handle provider HTTP failures before the decorated provider method
395
+ * rejects. Sanitizing here is important: @CaptureSpan records the exception,
396
+ * so redacting it only in AIService would be too late for logs and traces.
397
+ */
398
+ private static throwProviderHTTPError(data: {
399
+ providerName: string;
400
+ response: HTTPErrorResponse;
401
+ logAttributes: LogAttributes;
402
+ includeProviderErrorDetails?: boolean | undefined;
403
+ }): never {
404
+ logger.error(`Error from ${data.providerName} API:`, data.logAttributes);
405
+
406
+ if (data.includeProviderErrorDetails !== false) {
407
+ logger.error(data.response, data.logAttributes);
408
+ throw new BadDataException(
409
+ `${data.providerName} API error: ${JSON.stringify(
410
+ data.response.jsonData,
411
+ )}`,
412
+ );
413
+ }
414
+
415
+ throw new BadDataException(
416
+ `${data.providerName} API request failed. Review the provider configuration and try again.`,
417
+ );
418
+ }
419
+
294
420
  /*
295
421
  * Build the chat completions URL for an OpenAI-compatible server from the
296
422
  * configured base URL. Users enter the base URL in a few different ways, and
@@ -436,9 +562,9 @@ export default class LLMService {
436
562
  : {}),
437
563
  },
438
564
  options: {
439
- retries: 2,
565
+ retries: request.requestRetries ?? 2,
440
566
  exponentialBackoff: true,
441
- timeout: 120000,
567
+ timeout: request.requestTimeoutInMs ?? 120000,
442
568
  },
443
569
  });
444
570
 
@@ -448,11 +574,12 @@ export default class LLMService {
448
574
  };
449
575
 
450
576
  if (response instanceof HTTPErrorResponse) {
451
- logger.error(`Error from ${config.llmType} API:`, logAttributes);
452
- logger.error(response, logAttributes);
453
- throw new BadDataException(
454
- `${config.llmType} API error: ${JSON.stringify(response.jsonData)}`,
455
- );
577
+ this.throwProviderHTTPError({
578
+ providerName: config.llmType.toString(),
579
+ response,
580
+ logAttributes,
581
+ includeProviderErrorDetails: request.includeProviderErrorDetails,
582
+ });
456
583
  }
457
584
 
458
585
  return this.parseOpenAIResponse(
@@ -513,9 +640,9 @@ export default class LLMService {
513
640
  "Content-Type": "application/json",
514
641
  },
515
642
  options: {
516
- retries: 2,
643
+ retries: request.requestRetries ?? 2,
517
644
  exponentialBackoff: true,
518
- timeout: 120000,
645
+ timeout: request.requestTimeoutInMs ?? 120000,
519
646
  },
520
647
  });
521
648
 
@@ -525,11 +652,12 @@ export default class LLMService {
525
652
  };
526
653
 
527
654
  if (response instanceof HTTPErrorResponse) {
528
- logger.error("Error from Azure OpenAI API:", logAttributes);
529
- logger.error(response, logAttributes);
530
- throw new BadDataException(
531
- `Azure OpenAI API error: ${JSON.stringify(response.jsonData)}`,
532
- );
655
+ this.throwProviderHTTPError({
656
+ providerName: "Azure OpenAI",
657
+ response,
658
+ logAttributes,
659
+ includeProviderErrorDetails: request.includeProviderErrorDetails,
660
+ });
533
661
  }
534
662
 
535
663
  return this.parseOpenAIResponse(
@@ -717,9 +845,9 @@ export default class LLMService {
717
845
  "Content-Type": "application/json",
718
846
  },
719
847
  options: {
720
- retries: 2,
848
+ retries: request.requestRetries ?? 2,
721
849
  exponentialBackoff: true,
722
- timeout: 120000,
850
+ timeout: request.requestTimeoutInMs ?? 120000,
723
851
  },
724
852
  });
725
853
 
@@ -729,11 +857,12 @@ export default class LLMService {
729
857
  };
730
858
 
731
859
  if (response instanceof HTTPErrorResponse) {
732
- logger.error("Error from Anthropic API:", anthropicLogAttributes);
733
- logger.error(response, anthropicLogAttributes);
734
- throw new BadDataException(
735
- `Anthropic API error: ${JSON.stringify(response.jsonData)}`,
736
- );
860
+ this.throwProviderHTTPError({
861
+ providerName: "Anthropic",
862
+ response,
863
+ logAttributes: anthropicLogAttributes,
864
+ includeProviderErrorDetails: request.includeProviderErrorDetails,
865
+ });
737
866
  }
738
867
 
739
868
  const jsonData: JSONObject = response.jsonData as JSONObject;
@@ -855,9 +984,9 @@ export default class LLMService {
855
984
  "Content-Type": "application/json",
856
985
  },
857
986
  options: {
858
- retries: 2,
987
+ retries: request.requestRetries ?? 2,
859
988
  exponentialBackoff: true,
860
- timeout: 300000, // 5 minutes for Ollama as it may be slower
989
+ timeout: request.requestTimeoutInMs ?? 300000, // Ollama may be slower
861
990
  },
862
991
  });
863
992
 
@@ -867,11 +996,12 @@ export default class LLMService {
867
996
  };
868
997
 
869
998
  if (response instanceof HTTPErrorResponse) {
870
- logger.error("Error from Ollama API:", ollamaLogAttributes);
871
- logger.error(response, ollamaLogAttributes);
872
- throw new BadDataException(
873
- `Ollama API error: ${JSON.stringify(response.jsonData)}`,
874
- );
999
+ this.throwProviderHTTPError({
1000
+ providerName: "Ollama",
1001
+ response,
1002
+ logAttributes: ollamaLogAttributes,
1003
+ includeProviderErrorDetails: request.includeProviderErrorDetails,
1004
+ });
875
1005
  }
876
1006
 
877
1007
  const jsonData: JSONObject = response.jsonData as JSONObject;
@@ -0,0 +1,152 @@
1
+ import DataToProcess from "../DataToProcess";
2
+ import CompareCriteria from "./CompareCriteria";
3
+ import {
4
+ CheckOn,
5
+ CriteriaFilter,
6
+ } from "../../../../Types/Monitor/CriteriaFilter";
7
+ import SqlMonitorResponse from "../../../../Types/Monitor/SqlMonitor/SqlMonitorResponse";
8
+ import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
9
+ import CaptureSpan from "../../Telemetry/CaptureSpan";
10
+
11
+ export default class SqlMonitorCriteria {
12
+ @CaptureSpan()
13
+ public static async isMonitorInstanceCriteriaFilterMet(input: {
14
+ dataToProcess: DataToProcess;
15
+ criteriaFilter: CriteriaFilter;
16
+ }): Promise<string | null> {
17
+ let threshold: number | string | undefined | null =
18
+ input.criteriaFilter.value;
19
+
20
+ const dataToProcess: ProbeMonitorResponse =
21
+ input.dataToProcess as ProbeMonitorResponse;
22
+
23
+ const sqlResponse: SqlMonitorResponse | undefined =
24
+ dataToProcess.sqlQueryMonitorResponse;
25
+
26
+ // Is the database reachable / did the check succeed?
27
+ if (input.criteriaFilter.checkOn === CheckOn.SqlIsOnline) {
28
+ return CompareCriteria.compareCriteriaBoolean({
29
+ value: dataToProcess.isOnline as boolean,
30
+ criteriaFilter: input.criteriaFilter,
31
+ });
32
+ }
33
+
34
+ // Number of rows the query returned.
35
+ if (input.criteriaFilter.checkOn === CheckOn.SqlQueryRowCount) {
36
+ threshold = CompareCriteria.convertToNumber(threshold);
37
+
38
+ if (threshold === null || threshold === undefined) {
39
+ return null;
40
+ }
41
+
42
+ if (
43
+ sqlResponse?.rowCount === null ||
44
+ sqlResponse?.rowCount === undefined
45
+ ) {
46
+ return null;
47
+ }
48
+
49
+ return CompareCriteria.compareCriteriaNumbers({
50
+ value: sqlResponse.rowCount,
51
+ threshold: threshold as number,
52
+ criteriaFilter: input.criteriaFilter,
53
+ });
54
+ }
55
+
56
+ // Query execution time (in ms).
57
+ if (input.criteriaFilter.checkOn === CheckOn.SqlQueryExecutionTime) {
58
+ threshold = CompareCriteria.convertToNumber(threshold);
59
+
60
+ if (threshold === null || threshold === undefined) {
61
+ return null;
62
+ }
63
+
64
+ const executionTime: number | undefined =
65
+ sqlResponse?.responseTimeInMs ?? dataToProcess.responseTimeInMs;
66
+
67
+ if (executionTime === null || executionTime === undefined) {
68
+ return null;
69
+ }
70
+
71
+ return CompareCriteria.compareCriteriaNumbers({
72
+ value: executionTime,
73
+ threshold: threshold as number,
74
+ criteriaFilter: input.criteriaFilter,
75
+ });
76
+ }
77
+
78
+ /*
79
+ * The first column of the first row — the natural target for a
80
+ * COUNT(*)-style query. Compared numerically when both sides look
81
+ * numeric, otherwise as strings.
82
+ */
83
+ if (input.criteriaFilter.checkOn === CheckOn.SqlQueryScalarValue) {
84
+ const scalarValue: string | number | boolean | null | undefined =
85
+ sqlResponse?.scalarValue;
86
+
87
+ if (scalarValue === null || scalarValue === undefined) {
88
+ return null;
89
+ }
90
+
91
+ const numericThreshold: number | null =
92
+ CompareCriteria.convertToNumber(threshold);
93
+ const scalarAsNumber: number = Number(scalarValue);
94
+
95
+ if (
96
+ numericThreshold !== null &&
97
+ typeof scalarValue !== "boolean" &&
98
+ !isNaN(scalarAsNumber)
99
+ ) {
100
+ const numericResult: string | null =
101
+ CompareCriteria.compareCriteriaNumbers({
102
+ value: scalarAsNumber,
103
+ threshold: numericThreshold,
104
+ criteriaFilter: input.criteriaFilter,
105
+ });
106
+
107
+ if (numericResult) {
108
+ return numericResult;
109
+ }
110
+ }
111
+
112
+ if (threshold !== null && threshold !== undefined) {
113
+ return CompareCriteria.compareCriteriaStrings({
114
+ value: String(scalarValue),
115
+ threshold: String(threshold),
116
+ criteriaFilter: input.criteriaFilter,
117
+ });
118
+ }
119
+
120
+ return null;
121
+ }
122
+
123
+ // The query error message (present when the query failed).
124
+ if (input.criteriaFilter.checkOn === CheckOn.SqlQueryError) {
125
+ const emptyNotEmptyResult: string | null =
126
+ CompareCriteria.compareEmptyAndNotEmpty({
127
+ value: sqlResponse?.queryError,
128
+ criteriaFilter: input.criteriaFilter,
129
+ });
130
+
131
+ if (emptyNotEmptyResult) {
132
+ return emptyNotEmptyResult;
133
+ }
134
+
135
+ if (
136
+ threshold !== null &&
137
+ threshold !== undefined &&
138
+ typeof sqlResponse?.queryError === "string"
139
+ ) {
140
+ return CompareCriteria.compareCriteriaStrings({
141
+ value: sqlResponse.queryError,
142
+ threshold: threshold.toString(),
143
+ criteriaFilter: input.criteriaFilter,
144
+ });
145
+ }
146
+
147
+ return null;
148
+ }
149
+
150
+ return null;
151
+ }
152
+ }
@@ -20,6 +20,7 @@ import SnmpMonitorCriteria from "./Criteria/SnmpMonitorCriteria";
20
20
  import DnsMonitorCriteria from "./Criteria/DnsMonitorCriteria";
21
21
  import DomainMonitorCriteria from "./Criteria/DomainMonitorCriteria";
22
22
  import DnssecMonitorCriteria from "./Criteria/DnssecMonitorCriteria";
23
+ import SqlMonitorCriteria from "./Criteria/SqlMonitorCriteria";
23
24
  import ExternalStatusPageMonitorCriteria from "./Criteria/ExternalStatusPageMonitorCriteria";
24
25
  import MonitorCriteriaMessageBuilder from "./MonitorCriteriaMessageBuilder";
25
26
  import MonitorCriteriaDataExtractor from "./MonitorCriteriaDataExtractor";
@@ -41,6 +42,7 @@ import ProbeApiIngestResponse, {
41
42
  import ProbeMonitorResponse from "../../../Types/Probe/ProbeMonitorResponse";
42
43
  import RequestFailedDetails from "../../../Types/Probe/RequestFailedDetails";
43
44
  import IncomingMonitorRequest from "../../../Types/Monitor/IncomingMonitor/IncomingMonitorRequest";
45
+ import SqlMonitorResponse from "../../../Types/Monitor/SqlMonitor/SqlMonitorResponse";
44
46
  import MonitorType from "../../../Types/Monitor/MonitorType";
45
47
  import { CheckOn, CriteriaFilter } from "../../../Types/Monitor/CriteriaFilter";
46
48
  import OneUptimeDate from "../../../Types/Date";
@@ -578,6 +580,21 @@ ${contextBlock}
578
580
  };
579
581
  }
580
582
 
583
+ if (input.monitor.monitorType === MonitorType.SQLQuery) {
584
+ const sqlResponse: SqlMonitorResponse | undefined = (
585
+ input.dataToProcess as ProbeMonitorResponse
586
+ ).sqlQueryMonitorResponse;
587
+
588
+ storageMap = {
589
+ rowCount: sqlResponse?.rowCount,
590
+ scalarValue: sqlResponse?.scalarValue,
591
+ firstRow: sqlResponse?.firstRow,
592
+ executionTimeInMs: sqlResponse?.responseTimeInMs,
593
+ queryError: sqlResponse?.queryError,
594
+ isOnline: (input.dataToProcess as ProbeMonitorResponse).isOnline,
595
+ };
596
+ }
597
+
581
598
  let expression: string = input.criteriaFilter.value as string;
582
599
  expression = VMUtil.replaceValueInPlace(storageMap, expression, false);
583
600
 
@@ -823,6 +840,18 @@ ${contextBlock}
823
840
  }
824
841
  }
825
842
 
843
+ if (input.monitor.monitorType === MonitorType.SQLQuery) {
844
+ const sqlMonitorResult: string | null =
845
+ await SqlMonitorCriteria.isMonitorInstanceCriteriaFilterMet({
846
+ dataToProcess: input.dataToProcess,
847
+ criteriaFilter: input.criteriaFilter,
848
+ });
849
+
850
+ if (sqlMonitorResult) {
851
+ return sqlMonitorResult;
852
+ }
853
+ }
854
+
826
855
  if (input.monitor.monitorType === MonitorType.ExternalStatusPage) {
827
856
  const externalStatusPageResult: string | null =
828
857
  await ExternalStatusPageMonitorCriteria.isMonitorInstanceCriteriaFilterMet(
@@ -22,6 +22,7 @@ export default class MonitorCriteriaExpectationBuilder {
22
22
 
23
23
  public static describeCriteriaExpectation(
24
24
  criteriaFilter: CriteriaFilter,
25
+ options?: { unit?: string | undefined },
25
26
  ): string | null {
26
27
  if (!criteriaFilter.filterType) {
27
28
  return null;
@@ -31,24 +32,33 @@ export default class MonitorCriteriaExpectationBuilder {
31
32
 
32
33
  const value: string | number | undefined = criteriaFilter.value;
33
34
 
35
+ /*
36
+ * Suffix numeric-threshold comparisons with the metric's display unit
37
+ * (e.g. "greater than 5 sec") so the threshold reads in the same unit
38
+ * as the observed value. Only the value-comparison filter types below
39
+ * carry a numeric threshold — the others (empty, boolean, heartbeat
40
+ * windows, …) supply their own wording and get no suffix.
41
+ */
42
+ const unitSuffix: string = options?.unit ? ` ${options.unit}` : "";
43
+
34
44
  switch (criteriaFilter.filterType) {
35
45
  case FilterType.GreaterThan:
36
- expectation = `to be greater than ${value}`;
46
+ expectation = `to be greater than ${value}${unitSuffix}`;
37
47
  break;
38
48
  case FilterType.GreaterThanOrEqualTo:
39
- expectation = `to be greater than or equal to ${value}`;
49
+ expectation = `to be greater than or equal to ${value}${unitSuffix}`;
40
50
  break;
41
51
  case FilterType.LessThan:
42
- expectation = `to be less than ${value}`;
52
+ expectation = `to be less than ${value}${unitSuffix}`;
43
53
  break;
44
54
  case FilterType.LessThanOrEqualTo:
45
- expectation = `to be less than or equal to ${value}`;
55
+ expectation = `to be less than or equal to ${value}${unitSuffix}`;
46
56
  break;
47
57
  case FilterType.EqualTo:
48
- expectation = `to equal ${value}`;
58
+ expectation = `to equal ${value}${unitSuffix}`;
49
59
  break;
50
60
  case FilterType.NotEqualTo:
51
- expectation = `to not equal ${value}`;
61
+ expectation = `to not equal ${value}${unitSuffix}`;
52
62
  break;
53
63
  case FilterType.Contains:
54
64
  expectation = `to contain ${value}`;
@@ -53,9 +53,23 @@ export default class MonitorCriteriaMessageBuilder {
53
53
  dataToProcess: DataToProcess;
54
54
  monitorStep: MonitorStep;
55
55
  }): string | null {
56
+ /*
57
+ * Resolve the metric's display unit (undefined for non-metric criteria)
58
+ * so the threshold in the expectation clause reads in the same unit as
59
+ * the observed value — "recorded latest 0.06 sec (expected to be greater
60
+ * than 5 sec)" rather than the unitless "0.06 (expected ... 5)".
61
+ */
62
+ const metricDisplayUnit: string | undefined =
63
+ MonitorCriteriaObservationBuilder.getMetricValueDisplayUnit({
64
+ criteriaFilter: input.criteriaFilter,
65
+ dataToProcess: input.dataToProcess,
66
+ monitorStep: input.monitorStep,
67
+ });
68
+
56
69
  const expectation: string | null =
57
70
  MonitorCriteriaExpectationBuilder.describeCriteriaExpectation(
58
71
  input.criteriaFilter,
72
+ { unit: metricDisplayUnit },
59
73
  );
60
74
 
61
75
  const observation: string | null =
@@ -136,7 +136,10 @@ export default class MonitorCriteriaMessageFormatter {
136
136
  return null;
137
137
  }
138
138
 
139
- public static summarizeNumericSeries(values: Array<number>): string | null {
139
+ public static summarizeNumericSeries(
140
+ values: Array<number>,
141
+ unit?: string | undefined,
142
+ ): string | null {
140
143
  if (!values.length) {
141
144
  return null;
142
145
  }
@@ -147,12 +150,18 @@ export default class MonitorCriteriaMessageFormatter {
147
150
  return null;
148
151
  }
149
152
 
153
+ /*
154
+ * Suffix each value with its unit (e.g. "0.06 sec") so the reader knows
155
+ * what the numbers mean. Empty when the metric has no known unit.
156
+ */
157
+ const unitSuffix: string = unit ? ` ${unit}` : "";
158
+
150
159
  const latestFormatted: string | null =
151
160
  MonitorCriteriaMessageFormatter.formatNumber(latest, {
152
161
  maximumFractionDigits: 2,
153
162
  });
154
163
 
155
- let summary: string = `latest ${latestFormatted ?? latest}`;
164
+ let summary: string = `latest ${latestFormatted ?? latest}${unitSuffix}`;
156
165
 
157
166
  if (values.length > 1) {
158
167
  const min: number = Math.min(...values);
@@ -167,7 +176,9 @@ export default class MonitorCriteriaMessageFormatter {
167
176
  maximumFractionDigits: 2,
168
177
  });
169
178
 
170
- summary += ` (min ${minFormatted ?? min}, max ${maxFormatted ?? max})`;
179
+ summary += ` (min ${minFormatted ?? min}${unitSuffix}, max ${
180
+ maxFormatted ?? max
181
+ }${unitSuffix})`;
171
182
  }
172
183
 
173
184
  summary += ` across ${values.length} data point${