@oneuptime/common 11.5.3 → 11.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +56 -45
  2. package/Models/DatabaseModels/AIInsight.ts +748 -0
  3. package/Models/DatabaseModels/AIRun.ts +262 -0
  4. package/Models/DatabaseModels/CodeRepository.ts +42 -0
  5. package/Models/DatabaseModels/Dashboard.ts +3 -3
  6. package/Models/DatabaseModels/GlobalConfig.ts +105 -0
  7. package/Models/DatabaseModels/Index.ts +4 -8
  8. package/Models/DatabaseModels/InstanceHealthLog.ts +277 -0
  9. package/Models/DatabaseModels/LlmLog.ts +33 -0
  10. package/Models/DatabaseModels/Project.ts +123 -6
  11. package/Models/DatabaseModels/Runbook.ts +1 -1
  12. package/Server/API/AIAgentDataAPI.ts +802 -140
  13. package/Server/API/AIAgentTaskAPI.ts +132 -69
  14. package/Server/API/AIAgentTaskLogAPI.ts +65 -41
  15. package/Server/API/AIAgentTaskPullRequestAPI.ts +41 -0
  16. package/Server/API/AIInsightAPI.ts +220 -0
  17. package/Server/API/AIInvestigationAPI.ts +363 -1
  18. package/Server/API/CodeFixRunAPI.ts +251 -0
  19. package/Server/API/GitHubAPI.ts +246 -3
  20. package/Server/API/TelemetryExceptionAPI.ts +193 -48
  21. package/Server/EnvironmentConfig.ts +1 -1
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.ts +26 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.ts +73 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.ts +29 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.ts +31 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.ts +51 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.ts +25 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.ts +47 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.ts +53 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.ts +31 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.ts +37 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.ts +25 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.ts +75 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.ts +37 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.ts +203 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.ts +163 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +30 -0
  38. package/Server/Infrastructure/Queue.ts +82 -4
  39. package/Server/Infrastructure/Semaphore.ts +62 -1
  40. package/Server/Services/AIAgentService.ts +32 -0
  41. package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
  42. package/Server/Services/AIInsightService.ts +174 -0
  43. package/Server/Services/AIRunEventService.ts +63 -0
  44. package/Server/Services/AIRunService.ts +259 -1
  45. package/Server/Services/AIService.ts +249 -7
  46. package/Server/Services/AlertService.ts +4 -4
  47. package/Server/Services/CodeRepositoryService.ts +209 -0
  48. package/Server/Services/DashboardService.ts +11 -2
  49. package/Server/Services/GlobalConfigService.ts +148 -0
  50. package/Server/Services/IncidentService.ts +183 -38
  51. package/Server/Services/IncidentStateTimelineService.ts +24 -4
  52. package/Server/Services/Index.ts +4 -4
  53. package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
  54. package/Server/Services/LlmLogService.ts +27 -0
  55. package/Server/Services/LlmProviderService.ts +108 -0
  56. package/Server/Services/MetricBaselineService.ts +123 -0
  57. package/Server/Services/MonitorService.ts +15 -0
  58. package/Server/Services/TelemetryExceptionService.ts +323 -116
  59. package/Server/Services/TraceAggregationService.ts +176 -0
  60. package/Server/Types/Workflow/ComponentCode.ts +6 -0
  61. package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
  62. package/Server/Types/Workflow/Components/Index.ts +2 -0
  63. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
  64. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
  65. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
  66. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
  67. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
  68. package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
  69. package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
  70. package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
  71. package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
  72. package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
  73. package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
  74. package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
  75. package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
  76. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
  77. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
  78. package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
  79. package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
  80. package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
  81. package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
  82. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
  83. package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
  84. package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
  85. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
  86. package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
  87. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
  88. package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
  89. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
  90. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
  91. package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
  92. package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
  93. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
  94. package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
  95. package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
  96. package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
  97. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
  98. package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
  99. package/Server/Utils/AI/Toolbox/Index.ts +2 -2
  100. package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
  101. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
  102. package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
  103. package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
  104. package/Server/Utils/Execute.ts +34 -13
  105. package/Server/Utils/LLM/LLMService.ts +160 -30
  106. package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
  107. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
  108. package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +225 -0
  109. package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
  110. package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
  111. package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
  112. package/Tests/Server/Services/AIInsightService.test.ts +324 -0
  113. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
  114. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
  115. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
  116. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
  117. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
  118. package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
  119. package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
  120. package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
  121. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
  122. package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
  123. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
  124. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
  125. package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
  126. package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
  127. package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
  128. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
  129. package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
  130. package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
  131. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
  132. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
  133. package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
  134. package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
  135. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
  136. package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
  137. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
  138. package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
  139. package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
  140. package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
  141. package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
  142. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
  143. package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
  144. package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
  145. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
  146. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
  147. package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
  148. package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
  149. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
  150. package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
  151. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
  152. package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
  153. package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
  154. package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
  155. package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
  156. package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
  157. package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
  158. package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
  159. package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
  160. package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
  161. package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
  162. package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
  163. package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
  164. package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
  165. package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
  166. package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
  167. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
  168. package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
  169. package/Types/AI/AIChatTypes.ts +8 -0
  170. package/Types/AI/AIInsightEvidence.ts +77 -0
  171. package/Types/AI/AIInsightHumanVerdict.ts +15 -0
  172. package/Types/AI/AIInsightSeverity.ts +13 -0
  173. package/Types/AI/AIInsightStatus.ts +38 -0
  174. package/Types/AI/AIInsightType.ts +41 -0
  175. package/Types/AI/AIRunAutoGrade.ts +18 -0
  176. package/Types/AI/AIRunEventType.ts +5 -0
  177. package/Types/AI/AIRunHumanVerdict.ts +17 -0
  178. package/Types/AI/AIRunType.ts +6 -0
  179. package/Types/AI/CodeFixTaskContext.ts +88 -0
  180. package/Types/AI/CodeFixTaskType.ts +132 -0
  181. package/Types/AI/FixPullRequestCiStatus.ts +132 -0
  182. package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
  183. package/Types/Incident/IncidentMetricType.ts +7 -0
  184. package/Types/Monitor/CriteriaFilter.ts +8 -0
  185. package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
  186. package/Types/Monitor/MonitorStep.ts +38 -0
  187. package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
  188. package/Types/Monitor/MonitorType.ts +17 -0
  189. package/Types/Monitor/SqlDatabaseType.ts +49 -0
  190. package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
  191. package/Types/Permission.ts +11 -95
  192. package/Types/Probe/ProbeMonitorResponse.ts +2 -0
  193. package/Types/Runbook/RunbookStep.ts +26 -2
  194. package/Types/Runbook/RunbookStepType.ts +1 -0
  195. package/Types/Workflow/Component.ts +13 -0
  196. package/Types/Workflow/ComponentID.ts +1 -0
  197. package/Types/Workflow/Components/AI.ts +148 -0
  198. package/Types/Workflow/Components.ts +8 -0
  199. package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
  200. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
  201. package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
  202. package/UI/Components/Table/Table.tsx +38 -2
  203. package/UI/Utils/TableColumnsToCsv.ts +385 -0
  204. package/Utils/Monitor/MonitorMetricType.ts +1 -0
  205. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
  206. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  207. package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
  208. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
  209. package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
  210. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  211. package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
  212. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/Dashboard.js +3 -3
  214. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
  216. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/Index.js +4 -8
  218. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
  220. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
  221. package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
  222. package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/Project.js +127 -6
  224. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  225. package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
  226. package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
  227. package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
  228. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  229. package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
  230. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  231. package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
  232. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  233. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
  234. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
  235. package/build/dist/Server/API/AIInsightAPI.js +140 -0
  236. package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
  237. package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
  238. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  239. package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
  240. package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
  241. package/build/dist/Server/API/GitHubAPI.js +164 -2
  242. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  243. package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
  244. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  245. package/build/dist/Server/EnvironmentConfig.js +1 -1
  246. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  247. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
  248. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
  249. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
  250. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
  251. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
  252. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
  253. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
  254. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
  255. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
  256. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
  257. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
  258. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
  259. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
  260. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
  261. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
  262. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
  263. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
  264. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
  265. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
  266. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
  267. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
  268. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
  269. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
  270. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
  271. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
  272. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
  273. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
  274. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
  275. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
  276. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
  277. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +30 -0
  278. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  279. package/build/dist/Server/Infrastructure/Queue.js +73 -3
  280. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  281. package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
  282. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  283. package/build/dist/Server/Services/AIAgentService.js +29 -0
  284. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  285. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
  286. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
  287. package/build/dist/Server/Services/AIInsightService.js +164 -0
  288. package/build/dist/Server/Services/AIInsightService.js.map +1 -0
  289. package/build/dist/Server/Services/AIRunEventService.js +49 -0
  290. package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
  291. package/build/dist/Server/Services/AIRunService.js +221 -0
  292. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  293. package/build/dist/Server/Services/AIService.js +198 -11
  294. package/build/dist/Server/Services/AIService.js.map +1 -1
  295. package/build/dist/Server/Services/AlertService.js +4 -4
  296. package/build/dist/Server/Services/AlertService.js.map +1 -1
  297. package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
  298. package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
  299. package/build/dist/Server/Services/DashboardService.js +8 -2
  300. package/build/dist/Server/Services/DashboardService.js.map +1 -1
  301. package/build/dist/Server/Services/GlobalConfigService.js +84 -0
  302. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  303. package/build/dist/Server/Services/IncidentService.js +149 -37
  304. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  305. package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
  306. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  307. package/build/dist/Server/Services/Index.js +4 -4
  308. package/build/dist/Server/Services/Index.js.map +1 -1
  309. package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
  310. package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
  311. package/build/dist/Server/Services/LlmLogService.js +23 -0
  312. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  313. package/build/dist/Server/Services/LlmProviderService.js +96 -0
  314. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  315. package/build/dist/Server/Services/MetricBaselineService.js +65 -0
  316. package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
  317. package/build/dist/Server/Services/MonitorService.js +9 -1
  318. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  319. package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
  320. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  321. package/build/dist/Server/Services/TraceAggregationService.js +124 -0
  322. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  323. package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
  324. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
  325. package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
  326. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  327. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  328. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
  329. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
  330. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
  331. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
  332. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
  333. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
  334. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
  335. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
  336. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
  337. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
  338. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
  339. package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
  340. package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
  341. package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
  342. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
  343. package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
  344. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
  345. package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
  346. package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
  347. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
  348. package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
  349. package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
  350. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
  351. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
  352. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
  353. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
  354. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
  355. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
  356. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
  357. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
  358. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
  359. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
  360. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
  361. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
  362. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
  363. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
  364. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
  365. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
  366. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
  367. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
  368. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
  369. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
  370. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
  371. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
  372. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
  373. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
  374. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
  375. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
  376. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
  377. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
  378. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
  379. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
  380. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
  381. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
  382. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
  383. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
  384. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
  385. package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
  386. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
  387. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
  388. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
  389. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
  390. package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
  391. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
  392. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
  393. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
  394. package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
  395. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
  396. package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
  397. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  398. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
  399. package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
  400. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
  401. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  402. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
  403. package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
  404. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
  405. package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
  406. package/build/dist/Server/Utils/Execute.js +21 -11
  407. package/build/dist/Server/Utils/Execute.js.map +1 -1
  408. package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
  409. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  410. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
  411. package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
  412. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
  413. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  414. package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
  415. package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
  416. package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
  417. package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
  418. package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
  419. package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
  420. package/build/dist/Types/AI/AIInsightStatus.js +36 -0
  421. package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
  422. package/build/dist/Types/AI/AIInsightType.js +42 -0
  423. package/build/dist/Types/AI/AIInsightType.js.map +1 -0
  424. package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
  425. package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
  426. package/build/dist/Types/AI/AIRunEventType.js +5 -0
  427. package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
  428. package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
  429. package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
  430. package/build/dist/Types/AI/AIRunType.js +6 -0
  431. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  432. package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
  433. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
  434. package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
  435. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
  436. package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
  437. package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
  438. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
  439. package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
  440. package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
  441. package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
  442. package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
  443. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  444. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
  445. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  446. package/build/dist/Types/Monitor/MonitorStep.js +28 -0
  447. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  448. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
  449. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
  450. package/build/dist/Types/Monitor/MonitorType.js +15 -0
  451. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  452. package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
  453. package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
  454. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
  455. package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
  456. package/build/dist/Types/Permission.js +10 -84
  457. package/build/dist/Types/Permission.js.map +1 -1
  458. package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
  459. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  460. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  461. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  462. package/build/dist/Types/Workflow/Components/AI.js +135 -0
  463. package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
  464. package/build/dist/Types/Workflow/Components.js +7 -0
  465. package/build/dist/Types/Workflow/Components.js.map +1 -1
  466. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
  467. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  468. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
  469. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  470. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
  471. package/build/dist/UI/Components/Table/Table.js +28 -2
  472. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  473. package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
  474. package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
  475. package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
  476. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  477. package/package.json +1 -1
  478. package/Models/DatabaseModels/AIAgentTask.ts +0 -660
  479. package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
  480. package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
  481. package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
  482. package/Server/Services/AIAgentTaskService.ts +0 -240
  483. package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
  484. package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
  485. package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
  486. package/Types/AI/AIAgentTaskMetadata.ts +0 -25
  487. package/Types/AI/AIAgentTaskType.ts +0 -40
  488. package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
  489. package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
  490. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
  491. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
  492. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
  493. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
  494. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
  495. package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
  496. package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
  497. package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
  498. package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
  499. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
  500. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
  501. package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
  502. package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
  503. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
  504. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
  505. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
  506. package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
  507. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
  508. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
  509. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
  510. package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
  511. package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
  512. package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
  513. package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
@@ -0,0 +1,209 @@
1
+ import EvalCorpus, {
2
+ CorpusEventInput,
3
+ GoldenCaseEvent,
4
+ } from "../../../../Server/Utils/AI/Eval/EvalCorpus";
5
+ import AIConfidenceSignal from "../../../../Server/Utils/AI/SRE/ConfidenceSignal";
6
+ import AIRunEventType from "../../../../Types/AI/AIRunEventType";
7
+ import { describe, expect, test } from "@jest/globals";
8
+
9
+ /*
10
+ * Golden-case stat derivation from recorded AIRunEvent trails. Under test:
11
+ * the deterministic evidence stats (citationsMinted / dataBearingToolCalls /
12
+ * toolCallsTotal / toolCallsFailed) computed from synthetic event lists, the
13
+ * shared "data-bearing" definition (the SAME helper the live confidence floor
14
+ * uses — the two must never drift), and the skeletal event projection.
15
+ */
16
+
17
+ function toolCompleted(data?: {
18
+ rowCount?: number | undefined;
19
+ citationId?: string | undefined;
20
+ toolName?: string | undefined;
21
+ sequence?: number | undefined;
22
+ }): CorpusEventInput {
23
+ return {
24
+ sequence: data?.sequence,
25
+ eventType: AIRunEventType.ToolCallCompleted,
26
+ toolName: data?.toolName || "search_logs",
27
+ citationId: data?.citationId,
28
+ resultSummary:
29
+ data?.rowCount === undefined ? undefined : { rowCount: data.rowCount },
30
+ };
31
+ }
32
+
33
+ function toolFailed(toolName?: string): CorpusEventInput {
34
+ return {
35
+ eventType: AIRunEventType.ToolCallFailed,
36
+ toolName: toolName || "query_metrics",
37
+ resultSummary: { errorMessage: "boom" },
38
+ };
39
+ }
40
+
41
+ function lifecycleEvent(eventType: AIRunEventType): CorpusEventInput {
42
+ return { eventType };
43
+ }
44
+
45
+ describe("AIConfidenceSignal.isDataBearingRowCount (the shared definition)", () => {
46
+ test("rowCount > 0 is data-bearing; 0 / null / undefined are not", () => {
47
+ expect(AIConfidenceSignal.isDataBearingRowCount(1)).toBe(true);
48
+ expect(AIConfidenceSignal.isDataBearingRowCount(250)).toBe(true);
49
+ expect(AIConfidenceSignal.isDataBearingRowCount(0)).toBe(false);
50
+ expect(AIConfidenceSignal.isDataBearingRowCount(null)).toBe(false);
51
+ expect(AIConfidenceSignal.isDataBearingRowCount(undefined)).toBe(false);
52
+ });
53
+ });
54
+
55
+ describe("EvalCorpus.deriveConfidenceStats", () => {
56
+ test("an empty trail yields all zeros", () => {
57
+ expect(EvalCorpus.deriveConfidenceStats([])).toEqual({
58
+ citationsMinted: 0,
59
+ dataBearingToolCalls: 0,
60
+ toolCallsTotal: 0,
61
+ toolCallsFailed: 0,
62
+ });
63
+ });
64
+
65
+ test("a realistic trail: lifecycle events do not count as tool calls", () => {
66
+ const events: Array<CorpusEventInput> = [
67
+ lifecycleEvent(AIRunEventType.RunStarted),
68
+ lifecycleEvent(AIRunEventType.LlmCallStarted),
69
+ lifecycleEvent(AIRunEventType.LlmCallCompleted),
70
+ toolCompleted({ rowCount: 12, citationId: "C1" }),
71
+ toolCompleted({ rowCount: 0, citationId: "C2" }),
72
+ toolFailed(),
73
+ lifecycleEvent(AIRunEventType.RunCompleted),
74
+ ];
75
+
76
+ expect(EvalCorpus.deriveConfidenceStats(events)).toEqual({
77
+ citationsMinted: 2,
78
+ dataBearingToolCalls: 1,
79
+ toolCallsTotal: 3,
80
+ toolCallsFailed: 1,
81
+ });
82
+ });
83
+
84
+ test("data-bearing means rowCount > 0 — a successful call with 0 rows (proof of absence) is counted as a call but not as data-bearing", () => {
85
+ const events: Array<CorpusEventInput> = [
86
+ toolCompleted({ rowCount: 0, citationId: "C1" }),
87
+ toolCompleted({ rowCount: 0, citationId: "C2" }),
88
+ ];
89
+
90
+ expect(EvalCorpus.deriveConfidenceStats(events)).toEqual({
91
+ citationsMinted: 2,
92
+ dataBearingToolCalls: 0,
93
+ toolCallsTotal: 2,
94
+ toolCallsFailed: 0,
95
+ });
96
+ });
97
+
98
+ test("a completed call with NO recorded resultSummary is not data-bearing (unknown is not evidence)", () => {
99
+ expect(EvalCorpus.deriveConfidenceStats([toolCompleted({})])).toEqual({
100
+ citationsMinted: 0,
101
+ dataBearingToolCalls: 0,
102
+ toolCallsTotal: 1,
103
+ toolCallsFailed: 0,
104
+ });
105
+ });
106
+
107
+ test("ToolCallStarted is deliberately not counted — a call that never finished has no outcome to score", () => {
108
+ const events: Array<CorpusEventInput> = [
109
+ { eventType: AIRunEventType.ToolCallStarted, toolName: "search_logs" },
110
+ toolCompleted({ rowCount: 3, citationId: "C1" }),
111
+ // Started but the pod died before completion.
112
+ { eventType: AIRunEventType.ToolCallStarted, toolName: "query_metrics" },
113
+ ];
114
+
115
+ expect(EvalCorpus.deriveConfidenceStats(events)).toEqual({
116
+ citationsMinted: 1,
117
+ dataBearingToolCalls: 1,
118
+ toolCallsTotal: 1,
119
+ toolCallsFailed: 0,
120
+ });
121
+ });
122
+
123
+ test("failed calls count toward the total and the failure count, and mint nothing", () => {
124
+ const events: Array<CorpusEventInput> = [
125
+ toolFailed(),
126
+ toolFailed(),
127
+ toolCompleted({ rowCount: 5, citationId: "C1" }),
128
+ ];
129
+
130
+ expect(EvalCorpus.deriveConfidenceStats(events)).toEqual({
131
+ citationsMinted: 1,
132
+ dataBearingToolCalls: 1,
133
+ toolCallsTotal: 3,
134
+ toolCallsFailed: 2,
135
+ });
136
+ });
137
+
138
+ test("citationsMinted counts citationId presence wherever it appears (defensive — the engine only mints on tool calls)", () => {
139
+ const events: Array<CorpusEventInput> = [
140
+ { eventType: AIRunEventType.LlmCallCompleted, citationId: "C1" },
141
+ toolCompleted({ rowCount: 1, citationId: "C2" }),
142
+ // Empty string is NOT a minted citation.
143
+ toolCompleted({ rowCount: 1, citationId: "" }),
144
+ ];
145
+
146
+ expect(EvalCorpus.deriveConfidenceStats(events).citationsMinted).toBe(2);
147
+ });
148
+ });
149
+
150
+ describe("EvalCorpus.toGoldenCaseEvents", () => {
151
+ test("tool outcomes map to ok true/false; everything else stays undefined", () => {
152
+ const events: Array<GoldenCaseEvent> = EvalCorpus.toGoldenCaseEvents([
153
+ {
154
+ sequence: 0,
155
+ eventType: AIRunEventType.RunStarted,
156
+ },
157
+ {
158
+ sequence: 1,
159
+ eventType: AIRunEventType.ToolCallCompleted,
160
+ toolName: "search_logs",
161
+ resultSummary: { rowCount: 4 },
162
+ },
163
+ {
164
+ sequence: 2,
165
+ eventType: AIRunEventType.ToolCallFailed,
166
+ toolName: "query_metrics",
167
+ },
168
+ {
169
+ sequence: 3,
170
+ eventType: AIRunEventType.RunCompleted,
171
+ },
172
+ ]);
173
+
174
+ expect(events).toEqual([
175
+ {
176
+ sequence: 0,
177
+ eventType: "RunStarted",
178
+ toolName: undefined,
179
+ ok: undefined,
180
+ },
181
+ {
182
+ sequence: 1,
183
+ eventType: "ToolCallCompleted",
184
+ toolName: "search_logs",
185
+ ok: true,
186
+ },
187
+ {
188
+ sequence: 2,
189
+ eventType: "ToolCallFailed",
190
+ toolName: "query_metrics",
191
+ ok: false,
192
+ },
193
+ {
194
+ sequence: 3,
195
+ eventType: "RunCompleted",
196
+ toolName: undefined,
197
+ ok: undefined,
198
+ },
199
+ ]);
200
+ });
201
+
202
+ test("a missing sequence defaults to 0 (defensive — the engine always writes one)", () => {
203
+ expect(
204
+ EvalCorpus.toGoldenCaseEvents([
205
+ { eventType: AIRunEventType.RunStarted },
206
+ ])[0]!.sequence,
207
+ ).toBe(0);
208
+ });
209
+ });
@@ -0,0 +1,343 @@
1
+ import EvalScores, {
2
+ EvalScoreReport,
3
+ MINIMUM_TRUSTWORTHY_CORPUS_SIZE,
4
+ } from "../../../../Server/Utils/AI/Eval/EvalScores";
5
+ import {
6
+ GoldenCase,
7
+ GoldenCaseConfidenceStats,
8
+ } from "../../../../Server/Utils/AI/Eval/EvalCorpus";
9
+ import AIRunHumanVerdict from "../../../../Types/AI/AIRunHumanVerdict";
10
+ import AIRunAutoGrade from "../../../../Types/AI/AIRunAutoGrade";
11
+ import { describe, expect, test } from "@jest/globals";
12
+
13
+ /*
14
+ * The G3 eval scores, computed purely from recorded labeled runs. Under test:
15
+ * each score's exact numerator/denominator definition, the honesty rule
16
+ * (value is NULL when the denominator is 0 — never a fake 0% or 100%), the
17
+ * no-blending rule (autoGrade precision vs human confirmed rate stay
18
+ * separate), aggregation semantics for tool selection, and the small-sample
19
+ * flag.
20
+ */
21
+
22
+ function stats(
23
+ data: Partial<GoldenCaseConfidenceStats>,
24
+ ): GoldenCaseConfidenceStats {
25
+ return {
26
+ citationsMinted: 0,
27
+ dataBearingToolCalls: 0,
28
+ toolCallsTotal: 0,
29
+ toolCallsFailed: 0,
30
+ ...data,
31
+ };
32
+ }
33
+
34
+ function goldenCase(data: {
35
+ humanVerdict?: AIRunHumanVerdict | undefined;
36
+ autoGrade?: AIRunAutoGrade | undefined;
37
+ analysisPosted?: boolean | undefined;
38
+ confidence?: Partial<GoldenCaseConfidenceStats> | undefined;
39
+ }): GoldenCase {
40
+ return {
41
+ runId: "run",
42
+ projectId: "project",
43
+ subjectType: "Incident",
44
+ completedAt: "2026-07-13T00:00:00.000Z",
45
+ label: {
46
+ humanVerdict: data.humanVerdict,
47
+ autoGrade: data.autoGrade,
48
+ },
49
+ confidence: stats(data.confidence || {}),
50
+ analysisPosted: data.analysisPosted ?? true,
51
+ events: [],
52
+ };
53
+ }
54
+
55
+ describe("EvalScores.makeScore (the honesty rule)", () => {
56
+ test("a zero denominator yields value null — never a fake 0 or 100", () => {
57
+ expect(EvalScores.makeScore(0, 0)).toEqual({
58
+ value: null,
59
+ numerator: 0,
60
+ denominator: 0,
61
+ });
62
+ });
63
+
64
+ test("a measurable score carries its exact fraction and both counts", () => {
65
+ expect(EvalScores.makeScore(2, 3)).toEqual({
66
+ value: 2 / 3,
67
+ numerator: 2,
68
+ denominator: 3,
69
+ });
70
+ expect(EvalScores.makeScore(0, 5)).toEqual({
71
+ value: 0,
72
+ numerator: 0,
73
+ denominator: 5,
74
+ });
75
+ });
76
+ });
77
+
78
+ describe("EvalScores.wouldDeterministicFloorFlagInconclusive", () => {
79
+ test("zero citations AND zero data-bearing calls → flagged (the floor's exact rule)", () => {
80
+ expect(EvalScores.wouldDeterministicFloorFlagInconclusive(stats({}))).toBe(
81
+ true,
82
+ );
83
+ expect(
84
+ EvalScores.wouldDeterministicFloorFlagInconclusive(
85
+ stats({ toolCallsTotal: 4, toolCallsFailed: 4 }),
86
+ ),
87
+ ).toBe(true);
88
+ });
89
+
90
+ test("a single minted citation clears the floor (rowCount 0 is proof of absence — still evidence)", () => {
91
+ expect(
92
+ EvalScores.wouldDeterministicFloorFlagInconclusive(
93
+ stats({ citationsMinted: 1 }),
94
+ ),
95
+ ).toBe(false);
96
+ });
97
+
98
+ test("a data-bearing tool call clears the floor even with zero citations", () => {
99
+ expect(
100
+ EvalScores.wouldDeterministicFloorFlagInconclusive(
101
+ stats({ dataBearingToolCalls: 1, toolCallsTotal: 1 }),
102
+ ),
103
+ ).toBe(false);
104
+ });
105
+ });
106
+
107
+ describe("EvalScores.computeScores — empty corpus", () => {
108
+ test("every score is null-valued with 0/0, and the sample is too small", () => {
109
+ const report: EvalScoreReport = EvalScores.computeScores([]);
110
+
111
+ expect(report.caseCount).toBe(0);
112
+ expect(report.sampleTooSmall).toBe(true);
113
+
114
+ for (const score of [
115
+ report.topHypothesisPrecision,
116
+ report.humanConfirmedRate,
117
+ report.citationGroundingRate,
118
+ report.toolSelectionAccuracy,
119
+ report.inconclusiveRecall,
120
+ ]) {
121
+ expect(score).toEqual({ value: null, numerator: 0, denominator: 0 });
122
+ }
123
+ });
124
+ });
125
+
126
+ describe("EvalScores.computeScores — topHypothesisPrecision (autoGrade only)", () => {
127
+ test("Match / (Match+Partial+Mismatch); ungraded cases are excluded from the denominator", () => {
128
+ const report: EvalScoreReport = EvalScores.computeScores([
129
+ goldenCase({ autoGrade: AIRunAutoGrade.Match }),
130
+ goldenCase({ autoGrade: AIRunAutoGrade.Partial }),
131
+ goldenCase({ autoGrade: AIRunAutoGrade.Mismatch }),
132
+ goldenCase({ autoGrade: AIRunAutoGrade.Match }),
133
+ // Human-labeled but ungraded: must not appear in this denominator.
134
+ goldenCase({ humanVerdict: AIRunHumanVerdict.Confirmed }),
135
+ ]);
136
+
137
+ expect(report.topHypothesisPrecision).toEqual({
138
+ value: 2 / 4,
139
+ numerator: 2,
140
+ denominator: 4,
141
+ });
142
+ });
143
+
144
+ test("Partial does NOT count as a match", () => {
145
+ const report: EvalScoreReport = EvalScores.computeScores([
146
+ goldenCase({ autoGrade: AIRunAutoGrade.Partial }),
147
+ ]);
148
+
149
+ expect(report.topHypothesisPrecision).toEqual({
150
+ value: 0,
151
+ numerator: 0,
152
+ denominator: 1,
153
+ });
154
+ });
155
+
156
+ test("no graded cases → null, even when human labels exist (no blending)", () => {
157
+ const report: EvalScoreReport = EvalScores.computeScores([
158
+ goldenCase({ humanVerdict: AIRunHumanVerdict.Confirmed }),
159
+ goldenCase({ humanVerdict: AIRunHumanVerdict.Rejected }),
160
+ ]);
161
+
162
+ expect(report.topHypothesisPrecision.value).toBeNull();
163
+ expect(report.topHypothesisPrecision.denominator).toBe(0);
164
+ });
165
+ });
166
+
167
+ describe("EvalScores.computeScores — humanConfirmedRate (humanVerdict only)", () => {
168
+ test("Confirmed / (Confirmed+Rejected); auto-graded-only cases are excluded", () => {
169
+ const report: EvalScoreReport = EvalScores.computeScores([
170
+ goldenCase({ humanVerdict: AIRunHumanVerdict.Confirmed }),
171
+ goldenCase({ humanVerdict: AIRunHumanVerdict.Confirmed }),
172
+ goldenCase({ humanVerdict: AIRunHumanVerdict.Rejected }),
173
+ // Graded but no human verdict: not in this denominator.
174
+ goldenCase({ autoGrade: AIRunAutoGrade.Match }),
175
+ ]);
176
+
177
+ expect(report.humanConfirmedRate).toEqual({
178
+ value: 2 / 3,
179
+ numerator: 2,
180
+ denominator: 3,
181
+ });
182
+ });
183
+
184
+ test("a case carrying BOTH labels counts once in each score, blended in neither", () => {
185
+ const report: EvalScoreReport = EvalScores.computeScores([
186
+ goldenCase({
187
+ humanVerdict: AIRunHumanVerdict.Rejected,
188
+ autoGrade: AIRunAutoGrade.Match,
189
+ }),
190
+ ]);
191
+
192
+ // The human said Rejected — the auto Match must not leak into this rate.
193
+ expect(report.humanConfirmedRate).toEqual({
194
+ value: 0,
195
+ numerator: 0,
196
+ denominator: 1,
197
+ });
198
+ // And the rejection must not drag the graded precision down.
199
+ expect(report.topHypothesisPrecision).toEqual({
200
+ value: 1,
201
+ numerator: 1,
202
+ denominator: 1,
203
+ });
204
+ });
205
+ });
206
+
207
+ describe("EvalScores.computeScores — citationGroundingRate", () => {
208
+ test("cases with >=1 minted citation among cases whose analysis was posted", () => {
209
+ const report: EvalScoreReport = EvalScores.computeScores([
210
+ goldenCase({
211
+ autoGrade: AIRunAutoGrade.Match,
212
+ analysisPosted: true,
213
+ confidence: { citationsMinted: 3 },
214
+ }),
215
+ goldenCase({
216
+ autoGrade: AIRunAutoGrade.Mismatch,
217
+ analysisPosted: true,
218
+ confidence: { citationsMinted: 0 },
219
+ }),
220
+ // Not posted: excluded from the denominator even though it has citations.
221
+ goldenCase({
222
+ humanVerdict: AIRunHumanVerdict.Rejected,
223
+ analysisPosted: false,
224
+ confidence: { citationsMinted: 2 },
225
+ }),
226
+ ]);
227
+
228
+ expect(report.citationGroundingRate).toEqual({
229
+ value: 1 / 2,
230
+ numerator: 1,
231
+ denominator: 2,
232
+ });
233
+ });
234
+
235
+ test("no posted analyses at all → null, not 0%", () => {
236
+ const report: EvalScoreReport = EvalScores.computeScores([
237
+ goldenCase({
238
+ humanVerdict: AIRunHumanVerdict.Rejected,
239
+ analysisPosted: false,
240
+ }),
241
+ ]);
242
+
243
+ expect(report.citationGroundingRate.value).toBeNull();
244
+ });
245
+ });
246
+
247
+ describe("EvalScores.computeScores — toolSelectionAccuracy", () => {
248
+ test("aggregated across the corpus: sum of data-bearing / sum of finished calls (NOT a mean of per-run rates)", () => {
249
+ const report: EvalScoreReport = EvalScores.computeScores([
250
+ // 1/1 data-bearing.
251
+ goldenCase({
252
+ autoGrade: AIRunAutoGrade.Match,
253
+ confidence: { dataBearingToolCalls: 1, toolCallsTotal: 1 },
254
+ }),
255
+ // 1/9 data-bearing.
256
+ goldenCase({
257
+ autoGrade: AIRunAutoGrade.Mismatch,
258
+ confidence: {
259
+ dataBearingToolCalls: 1,
260
+ toolCallsTotal: 9,
261
+ toolCallsFailed: 3,
262
+ },
263
+ }),
264
+ ]);
265
+
266
+ /*
267
+ * Aggregated: (1+1)/(1+9) = 20%. A mean of per-run rates would say
268
+ * (100% + 11.1%)/2 ≈ 55.6% — the tiny run must not dominate.
269
+ */
270
+ expect(report.toolSelectionAccuracy).toEqual({
271
+ value: 2 / 10,
272
+ numerator: 2,
273
+ denominator: 10,
274
+ });
275
+ });
276
+
277
+ test("a corpus whose runs made no tool calls → null", () => {
278
+ const report: EvalScoreReport = EvalScores.computeScores([
279
+ goldenCase({ autoGrade: AIRunAutoGrade.Match }),
280
+ ]);
281
+
282
+ expect(report.toolSelectionAccuracy.value).toBeNull();
283
+ });
284
+ });
285
+
286
+ describe("EvalScores.computeScores — inconclusiveRecall", () => {
287
+ test("among human-Rejected cases: fraction the deterministic floor would have flagged", () => {
288
+ const report: EvalScoreReport = EvalScores.computeScores([
289
+ // Rejected + zero evidence → the floor would have caught it.
290
+ goldenCase({
291
+ humanVerdict: AIRunHumanVerdict.Rejected,
292
+ confidence: { citationsMinted: 0, dataBearingToolCalls: 0 },
293
+ }),
294
+ // Rejected but evidence existed → the floor would NOT have caught it.
295
+ goldenCase({
296
+ humanVerdict: AIRunHumanVerdict.Rejected,
297
+ confidence: { citationsMinted: 2, dataBearingToolCalls: 1 },
298
+ }),
299
+ // Confirmed cases are not in this denominator at all.
300
+ goldenCase({
301
+ humanVerdict: AIRunHumanVerdict.Confirmed,
302
+ confidence: { citationsMinted: 0 },
303
+ }),
304
+ ]);
305
+
306
+ expect(report.inconclusiveRecall).toEqual({
307
+ value: 1 / 2,
308
+ numerator: 1,
309
+ denominator: 2,
310
+ });
311
+ });
312
+
313
+ test("no human-Rejected cases → null (a corpus of confirmations cannot measure recall)", () => {
314
+ const report: EvalScoreReport = EvalScores.computeScores([
315
+ goldenCase({ humanVerdict: AIRunHumanVerdict.Confirmed }),
316
+ goldenCase({ autoGrade: AIRunAutoGrade.Mismatch }),
317
+ ]);
318
+
319
+ expect(report.inconclusiveRecall.value).toBeNull();
320
+ });
321
+ });
322
+
323
+ describe("EvalScores.computeScores — the small-sample flag", () => {
324
+ test("below the minimum the report says so; at the minimum it does not", () => {
325
+ const smallCorpus: Array<GoldenCase> = Array.from(
326
+ { length: MINIMUM_TRUSTWORTHY_CORPUS_SIZE - 1 },
327
+ () => {
328
+ return goldenCase({ autoGrade: AIRunAutoGrade.Match });
329
+ },
330
+ );
331
+
332
+ expect(EvalScores.computeScores(smallCorpus).sampleTooSmall).toBe(true);
333
+
334
+ const justEnough: Array<GoldenCase> = Array.from(
335
+ { length: MINIMUM_TRUSTWORTHY_CORPUS_SIZE },
336
+ () => {
337
+ return goldenCase({ autoGrade: AIRunAutoGrade.Match });
338
+ },
339
+ );
340
+
341
+ expect(EvalScores.computeScores(justEnough).sampleTooSmall).toBe(false);
342
+ });
343
+ });