@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.
- package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +56 -45
- package/Models/DatabaseModels/AIInsight.ts +748 -0
- package/Models/DatabaseModels/AIRun.ts +262 -0
- package/Models/DatabaseModels/CodeRepository.ts +42 -0
- package/Models/DatabaseModels/Dashboard.ts +3 -3
- package/Models/DatabaseModels/GlobalConfig.ts +105 -0
- package/Models/DatabaseModels/Index.ts +4 -8
- package/Models/DatabaseModels/InstanceHealthLog.ts +277 -0
- package/Models/DatabaseModels/LlmLog.ts +33 -0
- package/Models/DatabaseModels/Project.ts +123 -6
- package/Models/DatabaseModels/Runbook.ts +1 -1
- package/Server/API/AIAgentDataAPI.ts +802 -140
- package/Server/API/AIAgentTaskAPI.ts +132 -69
- package/Server/API/AIAgentTaskLogAPI.ts +65 -41
- package/Server/API/AIAgentTaskPullRequestAPI.ts +41 -0
- package/Server/API/AIInsightAPI.ts +220 -0
- package/Server/API/AIInvestigationAPI.ts +363 -1
- package/Server/API/CodeFixRunAPI.ts +251 -0
- package/Server/API/GitHubAPI.ts +246 -3
- package/Server/API/TelemetryExceptionAPI.ts +193 -48
- package/Server/EnvironmentConfig.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.ts +73 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.ts +53 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.ts +75 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.ts +203 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.ts +163 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +30 -0
- package/Server/Infrastructure/Queue.ts +82 -4
- package/Server/Infrastructure/Semaphore.ts +62 -1
- package/Server/Services/AIAgentService.ts +32 -0
- package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
- package/Server/Services/AIInsightService.ts +174 -0
- package/Server/Services/AIRunEventService.ts +63 -0
- package/Server/Services/AIRunService.ts +259 -1
- package/Server/Services/AIService.ts +249 -7
- package/Server/Services/AlertService.ts +4 -4
- package/Server/Services/CodeRepositoryService.ts +209 -0
- package/Server/Services/DashboardService.ts +11 -2
- package/Server/Services/GlobalConfigService.ts +148 -0
- package/Server/Services/IncidentService.ts +183 -38
- package/Server/Services/IncidentStateTimelineService.ts +24 -4
- package/Server/Services/Index.ts +4 -4
- package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
- package/Server/Services/LlmLogService.ts +27 -0
- package/Server/Services/LlmProviderService.ts +108 -0
- package/Server/Services/MetricBaselineService.ts +123 -0
- package/Server/Services/MonitorService.ts +15 -0
- package/Server/Services/TelemetryExceptionService.ts +323 -116
- package/Server/Services/TraceAggregationService.ts +176 -0
- package/Server/Types/Workflow/ComponentCode.ts +6 -0
- package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
- package/Server/Types/Workflow/Components/Index.ts +2 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
- package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
- package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
- package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
- package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
- package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
- package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
- package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
- package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
- package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
- package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
- package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
- package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
- package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
- package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
- package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
- package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
- package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
- package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
- package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
- package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
- package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
- package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
- package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
- package/Server/Utils/AI/Toolbox/Index.ts +2 -2
- package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
- package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
- package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
- package/Server/Utils/Execute.ts +34 -13
- package/Server/Utils/LLM/LLMService.ts +160 -30
- package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
- package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +225 -0
- package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
- package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
- package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
- package/Tests/Server/Services/AIInsightService.test.ts +324 -0
- package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
- package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
- package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
- package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
- package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
- package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
- package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
- package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
- package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
- package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
- package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
- package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
- package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
- package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
- package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
- package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
- package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
- package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
- package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
- package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
- package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
- package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
- package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
- package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
- package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
- package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
- package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
- package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
- package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
- package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
- package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
- package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
- package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
- package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
- package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
- package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
- package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
- package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
- package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
- package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
- package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
- package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
- package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
- package/Types/AI/AIChatTypes.ts +8 -0
- package/Types/AI/AIInsightEvidence.ts +77 -0
- package/Types/AI/AIInsightHumanVerdict.ts +15 -0
- package/Types/AI/AIInsightSeverity.ts +13 -0
- package/Types/AI/AIInsightStatus.ts +38 -0
- package/Types/AI/AIInsightType.ts +41 -0
- package/Types/AI/AIRunAutoGrade.ts +18 -0
- package/Types/AI/AIRunEventType.ts +5 -0
- package/Types/AI/AIRunHumanVerdict.ts +17 -0
- package/Types/AI/AIRunType.ts +6 -0
- package/Types/AI/CodeFixTaskContext.ts +88 -0
- package/Types/AI/CodeFixTaskType.ts +132 -0
- package/Types/AI/FixPullRequestCiStatus.ts +132 -0
- package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
- package/Types/Incident/IncidentMetricType.ts +7 -0
- package/Types/Monitor/CriteriaFilter.ts +8 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
- package/Types/Monitor/MonitorStep.ts +38 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
- package/Types/Monitor/MonitorType.ts +17 -0
- package/Types/Monitor/SqlDatabaseType.ts +49 -0
- package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
- package/Types/Permission.ts +11 -95
- package/Types/Probe/ProbeMonitorResponse.ts +2 -0
- package/Types/Runbook/RunbookStep.ts +26 -2
- package/Types/Runbook/RunbookStepType.ts +1 -0
- package/Types/Workflow/Component.ts +13 -0
- package/Types/Workflow/ComponentID.ts +1 -0
- package/Types/Workflow/Components/AI.ts +148 -0
- package/Types/Workflow/Components.ts +8 -0
- package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
- package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
- package/UI/Components/Table/Table.tsx +38 -2
- package/UI/Utils/TableColumnsToCsv.ts +385 -0
- package/Utils/Monitor/MonitorMetricType.ts +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
- package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Dashboard.js +3 -3
- package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -8
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
- package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +127 -6
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
- package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
- package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
- package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +140 -0
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
- package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
- package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
- package/build/dist/Server/API/GitHubAPI.js +164 -2
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
- package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +1 -1
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +73 -3
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Services/AIAgentService.js +29 -0
- package/build/dist/Server/Services/AIAgentService.js.map +1 -1
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
- package/build/dist/Server/Services/AIInsightService.js +164 -0
- package/build/dist/Server/Services/AIInsightService.js.map +1 -0
- package/build/dist/Server/Services/AIRunEventService.js +49 -0
- package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +221 -0
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +198 -11
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +4 -4
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
- package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
- package/build/dist/Server/Services/DashboardService.js +8 -2
- package/build/dist/Server/Services/DashboardService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +84 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +149 -37
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
- package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
- package/build/dist/Server/Services/LlmLogService.js +23 -0
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Services/LlmProviderService.js +96 -0
- package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
- package/build/dist/Server/Services/MetricBaselineService.js +65 -0
- package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +9 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +124 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
- package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
- package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
- package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
- package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
- package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
- package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
- package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
- package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
- package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
- package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
- package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
- package/build/dist/Server/Utils/Execute.js +21 -11
- package/build/dist/Server/Utils/Execute.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
- package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
- package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
- package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
- package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
- package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
- package/build/dist/Types/AI/AIInsightStatus.js +36 -0
- package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
- package/build/dist/Types/AI/AIInsightType.js +42 -0
- package/build/dist/Types/AI/AIInsightType.js.map +1 -0
- package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
- package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
- package/build/dist/Types/AI/AIRunEventType.js +5 -0
- package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
- package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
- package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
- package/build/dist/Types/AI/AIRunType.js +6 -0
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
- package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
- package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
- package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
- package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +28 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +15 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
- package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
- package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
- package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
- package/build/dist/Types/Permission.js +10 -84
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
- package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
- package/build/dist/Types/Workflow/ComponentID.js +1 -0
- package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
- package/build/dist/Types/Workflow/Components/AI.js +135 -0
- package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
- package/build/dist/Types/Workflow/Components.js +7 -0
- package/build/dist/Types/Workflow/Components.js.map +1 -1
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
- package/build/dist/UI/Components/Table/Table.js +28 -2
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
- package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/package.json +1 -1
- package/Models/DatabaseModels/AIAgentTask.ts +0 -660
- package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
- package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
- package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
- package/Server/Services/AIAgentTaskService.ts +0 -240
- package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
- package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
- package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
- package/Types/AI/AIAgentTaskMetadata.ts +0 -25
- package/Types/AI/AIAgentTaskType.ts +0 -40
- package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
- package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
- package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
- package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
- package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
- package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
- package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
- package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
- package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
- package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import ObjectID from "../../../../../Types/ObjectID";
|
|
2
|
+
import AIInsightType from "../../../../../Types/AI/AIInsightType";
|
|
3
|
+
import AIInsightSeverity from "../../../../../Types/AI/AIInsightSeverity";
|
|
4
|
+
import AIInsightEvidence from "../../../../../Types/AI/AIInsightEvidence";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* AI Insights — detector contracts.
|
|
8
|
+
*
|
|
9
|
+
* THE RULE: no LLM in the watch loop. Detectors are deterministic
|
|
10
|
+
* statistical sensors — they compare counts, percentiles and means against
|
|
11
|
+
* the project's own baselines and emit candidates with the evidence already
|
|
12
|
+
* computed. The LLM only engages per-finding AFTERWARDS (budgeted, read-only
|
|
13
|
+
* triage), and the decision to open a fix task is deterministic too
|
|
14
|
+
* (readiness/evidence-based, never LLM-decided).
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// What the scanner hands every detector for one project's scan tick.
|
|
18
|
+
export interface InsightScanContext {
|
|
19
|
+
projectId: ObjectID;
|
|
20
|
+
// The scan tick's single clock — all windows are computed from this.
|
|
21
|
+
now: Date;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* One deterministic finding a detector emits. The scanner turns candidates
|
|
26
|
+
* into AIInsight rows (or refreshes the existing non-terminal insight
|
|
27
|
+
* with the same fingerprint).
|
|
28
|
+
*/
|
|
29
|
+
export interface InsightCandidate {
|
|
30
|
+
insightType: AIInsightType;
|
|
31
|
+
// Stable dedupe key, e.g. "new-exception:<telemetryExceptionId>".
|
|
32
|
+
fingerprint: string;
|
|
33
|
+
title: string;
|
|
34
|
+
// The evidence rendered as markdown — real numbers, no LLM output.
|
|
35
|
+
detailMarkdown: string;
|
|
36
|
+
severity: AIInsightSeverity;
|
|
37
|
+
serviceName?: string | undefined;
|
|
38
|
+
telemetryServiceId?: ObjectID | undefined;
|
|
39
|
+
telemetryExceptionId?: ObjectID | undefined;
|
|
40
|
+
traceId?: string | undefined;
|
|
41
|
+
metricName?: string | undefined;
|
|
42
|
+
evidence: AIInsightEvidence;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// One deterministic sensor. Implementations live in ./Detectors/.
|
|
46
|
+
export interface InsightDetector {
|
|
47
|
+
insightType: AIInsightType;
|
|
48
|
+
detect(context: InsightScanContext): Promise<Array<InsightCandidate>>;
|
|
49
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import ObjectID from "../../../../Types/ObjectID";
|
|
2
|
+
import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
|
|
3
|
+
import AIRun from "../../../../Models/DatabaseModels/AIRun";
|
|
4
|
+
import Project from "../../../../Models/DatabaseModels/Project";
|
|
5
|
+
import ProjectService from "../../../Services/ProjectService";
|
|
6
|
+
import SubjectCodeFixRun from "./SubjectCodeFixRun";
|
|
7
|
+
import FixRunBudget, { FixRunBudgetDecision } from "../CodeFix/FixRunBudget";
|
|
8
|
+
import logger from "../../Logger";
|
|
9
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* AI SRE — the ImproveInstrumentation trigger.
|
|
13
|
+
*
|
|
14
|
+
* When an investigation finishes INCONCLUSIVE — per the structured G6
|
|
15
|
+
* confidence signal (ConfidenceSignal.ts), never the analysis prose — the
|
|
16
|
+
* telemetry itself is the bug: the code paths involved were not observable
|
|
17
|
+
* enough to diagnose. For projects that opted in
|
|
18
|
+
* (Project.enableInstrumentationFixTasks, default FALSE — G11 posture:
|
|
19
|
+
* autonomous PR creation is opt-in only), the inconclusive analysis becomes
|
|
20
|
+
* the input to a CodeFix AIRun (codeFixTaskType: ImproveInstrumentation)
|
|
21
|
+
* that the agent worker turns into a pull request adding the missing
|
|
22
|
+
* observability — so the NEXT investigation of a similar signal can reach a
|
|
23
|
+
* conclusion.
|
|
24
|
+
*
|
|
25
|
+
* Called from the investigation runners' postAnalysis, strictly AFTER the
|
|
26
|
+
* analysis is posted; this trigger never throws, so a failed enqueue can
|
|
27
|
+
* never fail (or duplicate) the investigation itself.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
export interface InstrumentationTaskGateInput {
|
|
31
|
+
// The project row with enableAi + enableInstrumentationFixTasks selected.
|
|
32
|
+
project: Project | null;
|
|
33
|
+
// Whether the project has at least one GitHub-App-connected repository.
|
|
34
|
+
hasConnectedRepository: boolean;
|
|
35
|
+
// A non-terminal ImproveInstrumentation run for the same subject, if any.
|
|
36
|
+
existingRun: AIRun | null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface InstrumentationTaskGateDecision {
|
|
40
|
+
enqueue: boolean;
|
|
41
|
+
// Human-readable reason recorded in the debug log when skipping.
|
|
42
|
+
reason: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default class InstrumentationTaskTrigger {
|
|
46
|
+
/*
|
|
47
|
+
* The pure trigger decision, separated from IO so it can be tested
|
|
48
|
+
* directly: opt-in (default FALSE), a repository the agent can actually
|
|
49
|
+
* open a PR against, and the per-subject dedupe guard.
|
|
50
|
+
*/
|
|
51
|
+
public static shouldEnqueueInstrumentationTask(
|
|
52
|
+
input: InstrumentationTaskGateInput,
|
|
53
|
+
): InstrumentationTaskGateDecision {
|
|
54
|
+
if (!input.project) {
|
|
55
|
+
return { enqueue: false, reason: "project not found" };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (input.project.enableAi === false) {
|
|
59
|
+
return { enqueue: false, reason: "AI is disabled for the project" };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* Strict opt-in — the column defaults to false, so unset/legacy rows
|
|
64
|
+
* never enqueue. Autonomous PR creation must never be default-on.
|
|
65
|
+
*/
|
|
66
|
+
if (input.project.enableInstrumentationFixTasks !== true) {
|
|
67
|
+
return {
|
|
68
|
+
enqueue: false,
|
|
69
|
+
reason: "project has not opted in to instrumentation fix tasks",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!input.hasConnectedRepository) {
|
|
74
|
+
return {
|
|
75
|
+
enqueue: false,
|
|
76
|
+
reason: "project has no GitHub-App-connected repository",
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* Dedupe: at most one non-terminal ImproveInstrumentation run per
|
|
82
|
+
* incident/alert — repeated inconclusive attempts on the same subject
|
|
83
|
+
* must not fan out into duplicate PRs.
|
|
84
|
+
*/
|
|
85
|
+
if (input.existingRun) {
|
|
86
|
+
return {
|
|
87
|
+
enqueue: false,
|
|
88
|
+
reason:
|
|
89
|
+
"a non-terminal ImproveInstrumentation run already exists for this subject",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
enqueue: true,
|
|
95
|
+
reason: "passed opt-in, repository and dedupe gates",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/*
|
|
100
|
+
* Record the durable intent as a Queued CodeFix AIRun that the external
|
|
101
|
+
* agent worker claims via /ai-agent-task/get-pending-task. Exactly one of
|
|
102
|
+
* incidentId/alertId is expected (the investigation's subject). NEVER
|
|
103
|
+
* throws — every failure is logged and swallowed, because this runs
|
|
104
|
+
* inside the investigation's postAnalysis and must not fail it.
|
|
105
|
+
*/
|
|
106
|
+
@CaptureSpan()
|
|
107
|
+
public static async enqueueForInconclusiveInvestigation(data: {
|
|
108
|
+
projectId: ObjectID;
|
|
109
|
+
incidentId?: ObjectID | undefined;
|
|
110
|
+
alertId?: ObjectID | undefined;
|
|
111
|
+
}): Promise<void> {
|
|
112
|
+
const { projectId } = data;
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
if (!data.incidentId && !data.alertId) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const project: Project | null = await ProjectService.findOneById({
|
|
120
|
+
id: projectId,
|
|
121
|
+
select: {
|
|
122
|
+
enableAi: true,
|
|
123
|
+
enableInstrumentationFixTasks: true,
|
|
124
|
+
},
|
|
125
|
+
props: { isRoot: true },
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* Cheapest gate first: skip the repository count for the (default)
|
|
130
|
+
* not-opted-in case.
|
|
131
|
+
*/
|
|
132
|
+
const optInDecision: InstrumentationTaskGateDecision =
|
|
133
|
+
this.shouldEnqueueInstrumentationTask({
|
|
134
|
+
project,
|
|
135
|
+
hasConnectedRepository: true,
|
|
136
|
+
existingRun: null,
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
if (!optInDecision.enqueue) {
|
|
140
|
+
logger.debug(
|
|
141
|
+
`AI: not enqueueing instrumentation task for project ${projectId.toString()} — ${optInDecision.reason}.`,
|
|
142
|
+
);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/*
|
|
147
|
+
* G11 guardrail: the per-project daily fix-run budget. For this
|
|
148
|
+
* AUTOMATIC trigger, over-budget is a logged skip — never an error
|
|
149
|
+
* thrown into the investigation (enqueueSubjectCodeFixRun would
|
|
150
|
+
* throw the same rejection, but that lands in the catch below as an
|
|
151
|
+
* error log; a budget skip is expected behavior, not a failure).
|
|
152
|
+
*/
|
|
153
|
+
const budget: FixRunBudgetDecision =
|
|
154
|
+
await FixRunBudget.getBudgetStatus(projectId);
|
|
155
|
+
|
|
156
|
+
if (!budget.allowed) {
|
|
157
|
+
logger.debug(
|
|
158
|
+
`AI: not enqueueing instrumentation task for project ${projectId.toString()} — ${FixRunBudget.describeRejection(budget)}`,
|
|
159
|
+
);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/*
|
|
164
|
+
* Repository + per-subject dedupe checks are the enqueue idiom shared
|
|
165
|
+
* with the FixFromIncident sibling — see SubjectCodeFixRun.
|
|
166
|
+
*/
|
|
167
|
+
const hasConnectedRepository: boolean =
|
|
168
|
+
await SubjectCodeFixRun.hasGitHubAppConnectedRepository(projectId);
|
|
169
|
+
|
|
170
|
+
const existingRun: AIRun | null =
|
|
171
|
+
await SubjectCodeFixRun.findNonTerminalRunForSubject({
|
|
172
|
+
taskType: CodeFixTaskType.ImproveInstrumentation,
|
|
173
|
+
incidentId: data.incidentId,
|
|
174
|
+
alertId: data.alertId,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
const decision: InstrumentationTaskGateDecision =
|
|
178
|
+
this.shouldEnqueueInstrumentationTask({
|
|
179
|
+
project,
|
|
180
|
+
hasConnectedRepository,
|
|
181
|
+
existingRun,
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
if (!decision.enqueue) {
|
|
185
|
+
logger.debug(
|
|
186
|
+
`AI: not enqueueing instrumentation task for project ${projectId.toString()} — ${decision.reason}.`,
|
|
187
|
+
);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const createdRun: AIRun =
|
|
192
|
+
await SubjectCodeFixRun.enqueueSubjectCodeFixRun({
|
|
193
|
+
projectId,
|
|
194
|
+
taskType: CodeFixTaskType.ImproveInstrumentation,
|
|
195
|
+
incidentId: data.incidentId,
|
|
196
|
+
alertId: data.alertId,
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
logger.debug(
|
|
200
|
+
`AI: enqueued ImproveInstrumentation run ${createdRun.id?.toString()} for ${
|
|
201
|
+
data.incidentId
|
|
202
|
+
? `incident ${data.incidentId.toString()}`
|
|
203
|
+
: `alert ${data.alertId?.toString()}`
|
|
204
|
+
} after an inconclusive investigation.`,
|
|
205
|
+
);
|
|
206
|
+
} catch (error) {
|
|
207
|
+
logger.error(
|
|
208
|
+
`AI: failed to enqueue instrumentation task for project ${projectId.toString()}: ${error}`,
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import ObjectID from "../../../../Types/ObjectID";
|
|
2
|
+
import OneUptimeDate from "../../../../Types/Date";
|
|
3
|
+
import AIRunType from "../../../../Types/AI/AIRunType";
|
|
4
|
+
import AIRunStatus from "../../../../Types/AI/AIRunStatus";
|
|
5
|
+
import AIRunAutoGrade from "../../../../Types/AI/AIRunAutoGrade";
|
|
6
|
+
import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
|
|
7
|
+
import AIRun from "../../../../Models/DatabaseModels/AIRun";
|
|
8
|
+
import Incident from "../../../../Models/DatabaseModels/Incident";
|
|
9
|
+
import IncidentFeed, {
|
|
10
|
+
IncidentFeedEventType,
|
|
11
|
+
} from "../../../../Models/DatabaseModels/IncidentFeed";
|
|
12
|
+
import AIRunService from "../../../Services/AIRunService";
|
|
13
|
+
import IncidentService from "../../../Services/IncidentService";
|
|
14
|
+
import IncidentFeedService from "../../../Services/IncidentFeedService";
|
|
15
|
+
import AIService, {
|
|
16
|
+
AILogResponse,
|
|
17
|
+
AI_INVESTIGATION_GRADING_FEATURE,
|
|
18
|
+
} from "../../../Services/AIService";
|
|
19
|
+
import logger from "../../Logger";
|
|
20
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* AI SRE — on-resolve investigation grading (Phase 2 measurement layer).
|
|
24
|
+
*
|
|
25
|
+
* When an incident resolves with a human-recorded root cause AND a completed
|
|
26
|
+
* AI investigation exists for it, ONE constrained LLM call compares the
|
|
27
|
+
* investigation's posted analysis (the RootCause feed item — the only
|
|
28
|
+
* persisted copy, the same source the fix recipes read) with
|
|
29
|
+
* Incident.rootCause and stores MATCH / PARTIAL / MISMATCH on the run
|
|
30
|
+
* (AIRun.autoGrade + autoGradeAt). This feeds the vision §8 accuracy metrics
|
|
31
|
+
* and the G3 eval work.
|
|
32
|
+
*
|
|
33
|
+
* Trigger idiom mirrors IncidentPostmortemRunner: fired (fire-and-forget)
|
|
34
|
+
* from IncidentStateTimelineService when the incident enters a resolved
|
|
35
|
+
* state; never throws, never blocks the resolve. Deduped via autoGrade — a
|
|
36
|
+
* run is graded at most once. Budgeted: the feature is in
|
|
37
|
+
* AUTONOMOUS_AI_FEATURES, so the daily autonomous token budget covers it.
|
|
38
|
+
*
|
|
39
|
+
* Incidents only for now: alerts do have a rootCause column, but no
|
|
40
|
+
* human-authored resolution flow populates it the way incident resolution
|
|
41
|
+
* does — grade quality there is unproven, so the alert side is deliberately
|
|
42
|
+
* skipped (noted in the roadmap).
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Persisted LlmLog label. Owned by AIService so this writer and the G4 budget
|
|
47
|
+
* match-list (AUTONOMOUS_AI_FEATURES) can never drift — a drift here would
|
|
48
|
+
* silently drop grading out of the daily budget forever.
|
|
49
|
+
*/
|
|
50
|
+
const FEATURE_NAME: string = AI_INVESTIGATION_GRADING_FEATURE;
|
|
51
|
+
|
|
52
|
+
// Truncation caps keep the comparison call cheap and inside context limits.
|
|
53
|
+
const MAX_ANALYSIS_CHARS: number = 8000;
|
|
54
|
+
const MAX_ROOT_CAUSE_CHARS: number = 2000;
|
|
55
|
+
|
|
56
|
+
// Word-bounded token matchers (hoisted: wrap-regex and prettier disagree inline).
|
|
57
|
+
const MISMATCH_RE: RegExp = /\bMISMATCH\b/;
|
|
58
|
+
const PARTIAL_RE: RegExp = /\bPARTIAL\b/;
|
|
59
|
+
const MATCH_RE: RegExp = /\bMATCH\b/;
|
|
60
|
+
|
|
61
|
+
export interface GradeGateInput {
|
|
62
|
+
run: {
|
|
63
|
+
id?: ObjectID | null | undefined;
|
|
64
|
+
autoGrade?: AIRunAutoGrade | undefined;
|
|
65
|
+
} | null;
|
|
66
|
+
rootCause: string | null | undefined;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export default class InvestigationGrader {
|
|
70
|
+
/*
|
|
71
|
+
* Pure gating decision (exported for tests): grade only when a completed
|
|
72
|
+
* investigation run exists, it has not been graded yet (dedupe), and the
|
|
73
|
+
* incident carries a non-empty human-recorded root cause to grade against.
|
|
74
|
+
*/
|
|
75
|
+
public static shouldGradeInvestigation(data: GradeGateInput): boolean {
|
|
76
|
+
if (!data.run || !data.run.id) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (data.run.autoGrade) {
|
|
81
|
+
// Dedupe: a run is graded at most once.
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!data.rootCause || data.rootCause.trim().length === 0) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*
|
|
93
|
+
* Defensive one-token parse (pure, exported for tests). The prompt demands
|
|
94
|
+
* exactly one token, but models editorialize — accept the verdict when
|
|
95
|
+
* exactly ONE of the three tokens appears in the response, word-bounded so
|
|
96
|
+
* the MATCH inside MISMATCH does not double-count. None found, or more
|
|
97
|
+
* than one distinct token → unparseable → null (no grade stored).
|
|
98
|
+
*/
|
|
99
|
+
public static parseAutoGradeToken(
|
|
100
|
+
response: string | null | undefined,
|
|
101
|
+
): AIRunAutoGrade | null {
|
|
102
|
+
if (!response) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const text: string = response.toUpperCase();
|
|
107
|
+
|
|
108
|
+
const found: Array<AIRunAutoGrade> = [];
|
|
109
|
+
|
|
110
|
+
if (MISMATCH_RE.test(text)) {
|
|
111
|
+
found.push(AIRunAutoGrade.Mismatch);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (PARTIAL_RE.test(text)) {
|
|
115
|
+
found.push(AIRunAutoGrade.Partial);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (MATCH_RE.test(text)) {
|
|
119
|
+
found.push(AIRunAutoGrade.Match);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (found.length !== 1) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return found[0]!;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/*
|
|
130
|
+
* Entry point called (fire-and-forget) from IncidentStateTimelineService
|
|
131
|
+
* when an incident enters a resolved state. Never throws — all failures
|
|
132
|
+
* are logged and swallowed so the resolve flow can never be affected.
|
|
133
|
+
*/
|
|
134
|
+
@CaptureSpan()
|
|
135
|
+
public static async gradeInvestigationOnResolve(data: {
|
|
136
|
+
incidentId: ObjectID;
|
|
137
|
+
projectId: ObjectID;
|
|
138
|
+
}): Promise<void> {
|
|
139
|
+
const { incidentId, projectId } = data;
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
// The latest completed investigation for this incident (if any).
|
|
143
|
+
const run: AIRun | null = await AIRunService.findOneBy({
|
|
144
|
+
query: {
|
|
145
|
+
runType: AIRunType.Investigation,
|
|
146
|
+
status: AIRunStatus.Completed,
|
|
147
|
+
triggeredByIncidentId: incidentId,
|
|
148
|
+
},
|
|
149
|
+
select: {
|
|
150
|
+
_id: true,
|
|
151
|
+
autoGrade: true,
|
|
152
|
+
},
|
|
153
|
+
sort: { createdAt: SortOrder.Descending },
|
|
154
|
+
props: { isRoot: true },
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
if (!run) {
|
|
158
|
+
// Nothing to grade — skip before loading anything else.
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const incident: Incident | null = await IncidentService.findOneById({
|
|
163
|
+
id: incidentId,
|
|
164
|
+
select: {
|
|
165
|
+
_id: true,
|
|
166
|
+
rootCause: true,
|
|
167
|
+
},
|
|
168
|
+
props: { isRoot: true },
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
if (
|
|
172
|
+
!this.shouldGradeInvestigation({
|
|
173
|
+
run,
|
|
174
|
+
rootCause: incident?.rootCause,
|
|
175
|
+
})
|
|
176
|
+
) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/*
|
|
181
|
+
* The posted analysis: the latest RootCause feed item — the AI's
|
|
182
|
+
* postAnalysis is its only writer, and it is the only persisted copy
|
|
183
|
+
* of the analysis (the same source the fix recipes read).
|
|
184
|
+
*/
|
|
185
|
+
const feedItem: IncidentFeed | null = await IncidentFeedService.findOneBy(
|
|
186
|
+
{
|
|
187
|
+
query: {
|
|
188
|
+
incidentId: incidentId,
|
|
189
|
+
incidentFeedEventType: IncidentFeedEventType.RootCause,
|
|
190
|
+
},
|
|
191
|
+
select: {
|
|
192
|
+
feedInfoInMarkdown: true,
|
|
193
|
+
},
|
|
194
|
+
sort: {
|
|
195
|
+
createdAt: SortOrder.Descending,
|
|
196
|
+
},
|
|
197
|
+
props: { isRoot: true },
|
|
198
|
+
},
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
const analysisMarkdown: string = (
|
|
202
|
+
feedItem?.feedInfoInMarkdown || ""
|
|
203
|
+
).trim();
|
|
204
|
+
|
|
205
|
+
if (!analysisMarkdown) {
|
|
206
|
+
logger.debug(
|
|
207
|
+
`AI grading: no posted analysis found for incident ${incidentId.toString()} — skipping.`,
|
|
208
|
+
);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const rootCause: string = incident!.rootCause!.trim();
|
|
213
|
+
|
|
214
|
+
const response: AILogResponse = await AIService.executeWithLogging({
|
|
215
|
+
projectId,
|
|
216
|
+
feature: FEATURE_NAME,
|
|
217
|
+
incidentId,
|
|
218
|
+
aiRunId: run.id!,
|
|
219
|
+
// Grades are stored on the run; no need to persist prompt previews.
|
|
220
|
+
storeContentPreviews: false,
|
|
221
|
+
temperature: 0,
|
|
222
|
+
maxTokens: 20,
|
|
223
|
+
messages: [
|
|
224
|
+
{
|
|
225
|
+
role: "system",
|
|
226
|
+
content: [
|
|
227
|
+
"You grade an AI incident investigation against the root cause humans recorded when they resolved the incident.",
|
|
228
|
+
"Respond with EXACTLY one token and nothing else:",
|
|
229
|
+
"MATCH — the investigation identified the same root cause.",
|
|
230
|
+
"PARTIAL — the investigation identified part of the cause, or a closely related cause.",
|
|
231
|
+
"MISMATCH — the investigation pointed somewhere else.",
|
|
232
|
+
].join("\n"),
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
role: "user",
|
|
236
|
+
content: [
|
|
237
|
+
"Human-recorded root cause:",
|
|
238
|
+
'"""',
|
|
239
|
+
rootCause.substring(0, MAX_ROOT_CAUSE_CHARS),
|
|
240
|
+
'"""',
|
|
241
|
+
"",
|
|
242
|
+
"AI investigation analysis:",
|
|
243
|
+
'"""',
|
|
244
|
+
analysisMarkdown.substring(0, MAX_ANALYSIS_CHARS),
|
|
245
|
+
'"""',
|
|
246
|
+
"",
|
|
247
|
+
"One token only: MATCH, PARTIAL, or MISMATCH.",
|
|
248
|
+
].join("\n"),
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
const grade: AIRunAutoGrade | null = this.parseAutoGradeToken(
|
|
254
|
+
response.content,
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
if (!grade) {
|
|
258
|
+
logger.warn(
|
|
259
|
+
`AI grading: unparseable grade response for incident ${incidentId.toString()} (run ${run.id!.toString()}) — no grade stored.`,
|
|
260
|
+
);
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
await AIRunService.updateOneById({
|
|
265
|
+
id: run.id!,
|
|
266
|
+
data: {
|
|
267
|
+
autoGrade: grade,
|
|
268
|
+
autoGradeAt: OneUptimeDate.getCurrentDate(),
|
|
269
|
+
},
|
|
270
|
+
props: { isRoot: true },
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
logger.debug(
|
|
274
|
+
`AI grading: incident ${incidentId.toString()} investigation graded ${grade}.`,
|
|
275
|
+
);
|
|
276
|
+
} catch (error) {
|
|
277
|
+
logger.error(
|
|
278
|
+
`AI grading: failed for incident ${incidentId.toString()}: ${error}`,
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|