@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,242 @@
|
|
|
1
|
+
import ObjectID from "../../../../../Types/ObjectID";
|
|
2
|
+
import AIInsightType from "../../../../../Types/AI/AIInsightType";
|
|
3
|
+
import CodeFixTaskType from "../../../../../Types/AI/CodeFixTaskType";
|
|
4
|
+
import {
|
|
5
|
+
PerformanceCodeLocation,
|
|
6
|
+
PerformanceFinding,
|
|
7
|
+
} from "../../../../../Types/AI/CodeFixTaskContext";
|
|
8
|
+
import AIInsight from "../../../../../Models/DatabaseModels/AIInsight";
|
|
9
|
+
import Project from "../../../../../Models/DatabaseModels/Project";
|
|
10
|
+
import AIRun from "../../../../../Models/DatabaseModels/AIRun";
|
|
11
|
+
import AIRunService from "../../../../Services/AIRunService";
|
|
12
|
+
import TelemetryExceptionService, {
|
|
13
|
+
AIFixReadiness,
|
|
14
|
+
} from "../../../../Services/TelemetryExceptionService";
|
|
15
|
+
import FixPerformanceTaskTrigger from "../FixPerformanceTaskTrigger";
|
|
16
|
+
import FixRunBudget, { FixRunBudgetDecision } from "../../CodeFix/FixRunBudget";
|
|
17
|
+
import logger from "../../../Logger";
|
|
18
|
+
import CaptureSpan from "../../../Telemetry/CaptureSpan";
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* Deterministic fix routing for newly created insights — gated on the
|
|
22
|
+
* Project.enableAi master switch AND on Project.enableInsightFixTasks
|
|
23
|
+
* (default FALSE): insights whose evidence points at code (new/spiking
|
|
24
|
+
* exceptions with a resolvable repository, latency regressions with
|
|
25
|
+
* span-tree findings) queue a CodeFix AIRun that opens a draft pull
|
|
26
|
+
* request. The decision is readiness/evidence-based, never LLM-decided.
|
|
27
|
+
*
|
|
28
|
+
* Everything downstream reuses the existing budgeted creation paths, so
|
|
29
|
+
* every guardrail comes free: the daily fix-run budget (G11, pre-checked
|
|
30
|
+
* here as a quiet skip AND enforced at creation), readiness/repository
|
|
31
|
+
* gates, per-(exception, recipe) and per-trace dedupe, and the open-PR cap
|
|
32
|
+
* at the repository-token gate.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
export interface InsightFixRoutingResult {
|
|
36
|
+
// Set when a fix task was queued for the insight.
|
|
37
|
+
fixAiRunId?: ObjectID | undefined;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default class InsightFixRouting {
|
|
41
|
+
/*
|
|
42
|
+
* NEVER throws — this runs inside the scanner's per-insight routing and a
|
|
43
|
+
* failed fix enqueue must not fail (or duplicate) the scan itself. Every
|
|
44
|
+
* failure is logged and swallowed; an empty result means "no fix opened"
|
|
45
|
+
* (the insight stays ActionRequired, where the manual fix paths remain
|
|
46
|
+
* available).
|
|
47
|
+
*/
|
|
48
|
+
@CaptureSpan()
|
|
49
|
+
public static async routeInsightFix(data: {
|
|
50
|
+
insight: AIInsight;
|
|
51
|
+
project: Project;
|
|
52
|
+
}): Promise<InsightFixRoutingResult> {
|
|
53
|
+
const { insight, project } = data;
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
if (!insight.id || !insight.projectId) {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
* The master AI kill switch, checked BEFORE the per-feature opt-in —
|
|
62
|
+
* the same order InstrumentationTaskTrigger and InsightTriage use. A
|
|
63
|
+
* project that turned AI off gets no autonomous agent work at all,
|
|
64
|
+
* whatever a legacy per-feature flag still says. `=== false` (not
|
|
65
|
+
* `!== true`) because the column defaults to TRUE: an unselected or
|
|
66
|
+
* undefined value must never be read as "AI disabled". The scanner
|
|
67
|
+
* selects enableAi onto the project row it hands us.
|
|
68
|
+
*/
|
|
69
|
+
if (project.enableAi === false) {
|
|
70
|
+
logger.debug(
|
|
71
|
+
`AI insights: not routing a fix for insight ${insight.id.toString()} — AI is disabled for the project.`,
|
|
72
|
+
);
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* Strict opt-in — the column defaults to false, so unset/legacy rows
|
|
78
|
+
* never enqueue. Autonomous PR creation must never be default-on.
|
|
79
|
+
*/
|
|
80
|
+
if (project.enableInsightFixTasks !== true) {
|
|
81
|
+
logger.debug(
|
|
82
|
+
`AI insights: not routing a fix for insight ${insight.id.toString()} — project has not opted in to insight fix tasks.`,
|
|
83
|
+
);
|
|
84
|
+
return {};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const isExceptionInsight: boolean =
|
|
88
|
+
insight.insightType === AIInsightType.NewException ||
|
|
89
|
+
insight.insightType === AIInsightType.ExceptionSpike;
|
|
90
|
+
|
|
91
|
+
const isLatencyInsight: boolean =
|
|
92
|
+
insight.insightType === AIInsightType.TraceLatencyRegression;
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
* ErrorLogSpike and MetricDrift are NEVER auto-fixed: neither carries
|
|
96
|
+
* evidence that points at a specific code path, so there is no
|
|
97
|
+
* grounded recipe to run — they route to triage + the human inbox.
|
|
98
|
+
*/
|
|
99
|
+
if (!isExceptionInsight && !isLatencyInsight) {
|
|
100
|
+
return {};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Exception insights are only fixable with the exception row to fix.
|
|
104
|
+
if (isExceptionInsight && !insight.telemetryExceptionId) {
|
|
105
|
+
logger.debug(
|
|
106
|
+
`AI insights: not routing a fix for insight ${insight.id.toString()} — no telemetryExceptionId on the insight.`,
|
|
107
|
+
);
|
|
108
|
+
return {};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/*
|
|
112
|
+
* Latency insights are only fixable with the deterministic span-tree
|
|
113
|
+
* findings (and the trace they came from) captured at detect time.
|
|
114
|
+
*/
|
|
115
|
+
const latencyFindings: Array<PerformanceFinding> =
|
|
116
|
+
insight.evidence?.latency?.performanceFindings || [];
|
|
117
|
+
const latencyCodeLocations: Array<PerformanceCodeLocation> =
|
|
118
|
+
insight.evidence?.latency?.codeLocations || [];
|
|
119
|
+
const latencyTraceId: string | undefined =
|
|
120
|
+
insight.traceId || insight.evidence?.latency?.sampleTraceId;
|
|
121
|
+
|
|
122
|
+
if (
|
|
123
|
+
isLatencyInsight &&
|
|
124
|
+
(latencyFindings.length === 0 || !latencyTraceId)
|
|
125
|
+
) {
|
|
126
|
+
logger.debug(
|
|
127
|
+
`AI insights: not routing a fix for insight ${insight.id.toString()} — the latency evidence has no span-tree findings or no trace id.`,
|
|
128
|
+
);
|
|
129
|
+
return {};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
* G11 guardrail: the per-project daily fix-run budget. For this
|
|
134
|
+
* AUTOMATIC trigger, over-budget is a logged skip — never an error
|
|
135
|
+
* (the creation paths below would throw the same rejection, but that
|
|
136
|
+
* lands in the catch as an unexpected failure; a budget skip is
|
|
137
|
+
* expected behavior, not a failure).
|
|
138
|
+
*/
|
|
139
|
+
const budget: FixRunBudgetDecision = await FixRunBudget.getBudgetStatus(
|
|
140
|
+
insight.projectId,
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
if (!budget.allowed) {
|
|
144
|
+
logger.debug(
|
|
145
|
+
`AI insights: not routing a fix for insight ${insight.id.toString()} — ${FixRunBudget.describeRejection(budget)}`,
|
|
146
|
+
);
|
|
147
|
+
return {};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
let createdRun: AIRun;
|
|
151
|
+
|
|
152
|
+
if (isExceptionInsight) {
|
|
153
|
+
/*
|
|
154
|
+
* Readiness precheck (provider payable, repository resolvable,
|
|
155
|
+
* agent alive) so an unready project gets a quiet skip instead of
|
|
156
|
+
* a thrown gate: the insight stays ActionRequired and the exception
|
|
157
|
+
* page's manual "Fix with AI Agent" button remains available once
|
|
158
|
+
* the project fixes its setup.
|
|
159
|
+
*/
|
|
160
|
+
const readiness: AIFixReadiness =
|
|
161
|
+
await TelemetryExceptionService.getAIFixReadiness({
|
|
162
|
+
telemetryExceptionId: insight.telemetryExceptionId!,
|
|
163
|
+
props: { isRoot: true },
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
if (!readiness.ready) {
|
|
167
|
+
logger.debug(
|
|
168
|
+
`AI insights: not routing a fix for insight ${insight.id.toString()} — AI fix readiness checks failed.`,
|
|
169
|
+
);
|
|
170
|
+
return {};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/*
|
|
174
|
+
* The exception-page creation path, system-triggered (no userId in
|
|
175
|
+
* props — the run stays system-authored): budget, readiness
|
|
176
|
+
* re-check and per-(exception, recipe) dedupe are enforced inside.
|
|
177
|
+
*/
|
|
178
|
+
createdRun =
|
|
179
|
+
await TelemetryExceptionService.createCodeFixRunForException({
|
|
180
|
+
telemetryExceptionId: insight.telemetryExceptionId!,
|
|
181
|
+
props: { isRoot: true },
|
|
182
|
+
taskType: CodeFixTaskType.FixException,
|
|
183
|
+
});
|
|
184
|
+
} else {
|
|
185
|
+
/*
|
|
186
|
+
* The findings-based FixPerformance path: the deterministic
|
|
187
|
+
* evidence gate already ran at detect time (the stored findings ARE
|
|
188
|
+
* its output); repo gate, per-trace dedupe and budget are enforced
|
|
189
|
+
* inside.
|
|
190
|
+
*/
|
|
191
|
+
createdRun =
|
|
192
|
+
await FixPerformanceTaskTrigger.createPerformanceFixTaskFromFindings({
|
|
193
|
+
projectId: insight.projectId,
|
|
194
|
+
traceId: latencyTraceId!,
|
|
195
|
+
serviceName: insight.serviceName,
|
|
196
|
+
findings: latencyFindings,
|
|
197
|
+
codeLocations: latencyCodeLocations,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (!createdRun.id) {
|
|
202
|
+
return {};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/*
|
|
206
|
+
* Provenance: stamp the created run with the insight that opened it,
|
|
207
|
+
* so the run's origin is queryable from either side. Best-effort —
|
|
208
|
+
* the fix run exists either way, and the scanner links insight ->
|
|
209
|
+
* run via the returned fixAiRunId.
|
|
210
|
+
*/
|
|
211
|
+
try {
|
|
212
|
+
await AIRunService.updateOneById({
|
|
213
|
+
id: createdRun.id,
|
|
214
|
+
data: {
|
|
215
|
+
triggeredByAiInsightId: insight.id,
|
|
216
|
+
},
|
|
217
|
+
props: { isRoot: true },
|
|
218
|
+
});
|
|
219
|
+
} catch (error) {
|
|
220
|
+
logger.error(
|
|
221
|
+
`AI insights: failed to stamp fix run ${createdRun.id.toString()} with insight ${insight.id.toString()}: ${error}`,
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
logger.debug(
|
|
226
|
+
`AI insights: queued ${isExceptionInsight ? "FixException" : "FixPerformance"} run ${createdRun.id.toString()} for insight ${insight.id.toString()}.`,
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
return { fixAiRunId: createdRun.id };
|
|
230
|
+
} catch (error) {
|
|
231
|
+
/*
|
|
232
|
+
* Creation-path throws are mostly EXPECTED quiet skips for this
|
|
233
|
+
* automatic trigger (dedupe hit, readiness re-check raced, budget
|
|
234
|
+
* raced) — log at debug and leave the insight on the human path.
|
|
235
|
+
*/
|
|
236
|
+
logger.debug(
|
|
237
|
+
`AI insights: fix routing skipped for insight ${insight.id?.toString()}: ${error}`,
|
|
238
|
+
);
|
|
239
|
+
return {};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import ObjectID from "../../../../../Types/ObjectID";
|
|
2
|
+
import OneUptimeDate from "../../../../../Types/Date";
|
|
3
|
+
import LIMIT_MAX from "../../../../../Types/Database/LimitMax";
|
|
4
|
+
import Project from "../../../../../Models/DatabaseModels/Project";
|
|
5
|
+
import AIInsight from "../../../../../Models/DatabaseModels/AIInsight";
|
|
6
|
+
import AIInsightStatus from "../../../../../Types/AI/AIInsightStatus";
|
|
7
|
+
import ProjectService from "../../../../Services/ProjectService";
|
|
8
|
+
import AIInsightService from "../../../../Services/AIInsightService";
|
|
9
|
+
import InsightDetectors from "./Detectors/Index";
|
|
10
|
+
import InsightStore, { UpsertCandidatesResult } from "./InsightStore";
|
|
11
|
+
import InsightFixRouting, { InsightFixRoutingResult } from "./FixRouting";
|
|
12
|
+
import InsightTriage, { InsightTriageResult } from "./Triage";
|
|
13
|
+
import { InsightCandidate, InsightDetector, InsightScanContext } from "./Types";
|
|
14
|
+
import logger from "../../../Logger";
|
|
15
|
+
import CaptureSpan from "../../../Telemetry/CaptureSpan";
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* AI Insights — the scan orchestration (the "watch loop").
|
|
19
|
+
*
|
|
20
|
+
* THE RULE: no LLM here. Detectors are deterministic statistical sensors;
|
|
21
|
+
* the LLM only engages per-finding AFTERWARDS through InsightTriage
|
|
22
|
+
* (budgeted, read-only), and the fix decision inside InsightFixRouting is
|
|
23
|
+
* deterministic and reuses the existing budgeted CodeFix creation paths.
|
|
24
|
+
*
|
|
25
|
+
* Everything is opt-in and quiet: only projects with the default-false
|
|
26
|
+
* enableAiInsights flag are scanned, insights never page and never
|
|
27
|
+
* open incidents, and every layer (project, detector, insight) fails in
|
|
28
|
+
* isolation — one broken tenant or sensor must not stop the sweep.
|
|
29
|
+
*/
|
|
30
|
+
export default class InsightScanner {
|
|
31
|
+
/*
|
|
32
|
+
* One scan tick across all opted-in projects. The flag query IS the gate:
|
|
33
|
+
* enableAiInsights defaults to false, so nothing runs for a project
|
|
34
|
+
* that never opted in. Runs as root with explicit projectId scoping
|
|
35
|
+
* (monitor-worker precedent), not per-user ACL. Never throws — the cron
|
|
36
|
+
* caller gets a clean resolve either way.
|
|
37
|
+
*/
|
|
38
|
+
@CaptureSpan()
|
|
39
|
+
public static async scanAllProjects(): Promise<void> {
|
|
40
|
+
let projects: Array<Project> = [];
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
projects = await ProjectService.findBy({
|
|
44
|
+
query: { enableAiInsights: true },
|
|
45
|
+
select: {
|
|
46
|
+
_id: true,
|
|
47
|
+
enableInsightFixTasks: true,
|
|
48
|
+
enableAi: true,
|
|
49
|
+
},
|
|
50
|
+
limit: LIMIT_MAX,
|
|
51
|
+
skip: 0,
|
|
52
|
+
props: { isRoot: true },
|
|
53
|
+
});
|
|
54
|
+
} catch (error) {
|
|
55
|
+
logger.error(
|
|
56
|
+
`AI Insights: failed to list opted-in projects for the scan tick: ${error}`,
|
|
57
|
+
);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
for (const project of projects) {
|
|
62
|
+
try {
|
|
63
|
+
await this.scanProjectForInsights(project);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
logger.error(
|
|
66
|
+
`AI Insights: scan failed for project ${project.id?.toString()}: ${error}`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* One project's scan: self-heal any insight an earlier tick left unrouted,
|
|
74
|
+
* run every registered detector (isolated — one failing sensor must not
|
|
75
|
+
* blind the others), dedupe/upsert the candidates through InsightStore,
|
|
76
|
+
* then route each NEWLY created insight to FixOpened or ActionRequired and
|
|
77
|
+
* enqueue its triage.
|
|
78
|
+
*/
|
|
79
|
+
@CaptureSpan()
|
|
80
|
+
public static async scanProjectForInsights(project: Project): Promise<void> {
|
|
81
|
+
const projectId: ObjectID | undefined = project.id || undefined;
|
|
82
|
+
|
|
83
|
+
if (!projectId) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* The self-heal sweep runs FIRST — before the detectors — so it can only
|
|
89
|
+
* ever see rows from EARLIER ticks: this tick's own new rows do not
|
|
90
|
+
* exist yet and therefore cannot be routed twice.
|
|
91
|
+
*/
|
|
92
|
+
await this.rerouteStrandedInsights({
|
|
93
|
+
projectId: projectId,
|
|
94
|
+
project: project,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// The tick's single clock — detectors compute all windows from it.
|
|
98
|
+
const now: Date = OneUptimeDate.getCurrentDate();
|
|
99
|
+
|
|
100
|
+
const context: InsightScanContext = {
|
|
101
|
+
projectId: projectId,
|
|
102
|
+
now: now,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const candidates: Array<InsightCandidate> = [];
|
|
106
|
+
const detectors: Array<InsightDetector> =
|
|
107
|
+
InsightDetectors.getAllDetectors();
|
|
108
|
+
|
|
109
|
+
for (const detector of detectors) {
|
|
110
|
+
try {
|
|
111
|
+
const detected: Array<InsightCandidate> =
|
|
112
|
+
await detector.detect(context);
|
|
113
|
+
candidates.push(...detected);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
logger.error(
|
|
116
|
+
`AI Insights: ${detector.insightType} detector failed for project ${projectId.toString()} — continuing with the remaining detectors: ${error}`,
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (candidates.length === 0) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const upsertResult: UpsertCandidatesResult =
|
|
126
|
+
await InsightStore.upsertCandidates({
|
|
127
|
+
projectId: projectId,
|
|
128
|
+
candidates: candidates,
|
|
129
|
+
now: now,
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
* Only NEWLY created insights are routed — refreshed rows were routed
|
|
134
|
+
* on the tick that created them and their status is owned by humans and
|
|
135
|
+
* the fix flow from then on.
|
|
136
|
+
*/
|
|
137
|
+
for (const insight of upsertResult.created) {
|
|
138
|
+
try {
|
|
139
|
+
await this.routeNewInsight({ insight: insight, project: project });
|
|
140
|
+
} catch (error) {
|
|
141
|
+
logger.error(
|
|
142
|
+
`AI Insights: routing failed for insight ${insight.id?.toString()} (project ${projectId.toString()}) — continuing with the remaining insights: ${error}`,
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/*
|
|
149
|
+
* Self-heal for insights stranded in the defensive Detected state.
|
|
150
|
+
*
|
|
151
|
+
* InsightStore CREATES rows as Detected and the routing status write is a
|
|
152
|
+
* SEPARATE, later write. If the pod dies in between (eviction, OOM,
|
|
153
|
+
* deploy) — or that write simply fails — the row is stranded: later ticks
|
|
154
|
+
* take the REFRESH path, which by contract never touches status and never
|
|
155
|
+
* re-routes, so the insight would stay Detected FOREVER: never triaged,
|
|
156
|
+
* never fix-routed, and its fingerprint permanently pinned (the dedupe
|
|
157
|
+
* lookup would keep refreshing the dead row instead of letting a fresh,
|
|
158
|
+
* routable insight be created for that finding).
|
|
159
|
+
*
|
|
160
|
+
* RE-ROUTING IS SAFE BY CONSTRUCTION — it cannot double-create work:
|
|
161
|
+
* - fix creation dedupes inside the creation paths (per (exception,
|
|
162
|
+
* recipe) for FixException, per trace for FixPerformance), so a row
|
|
163
|
+
* that DID get its fix run created before the pod died gets a rejected
|
|
164
|
+
* create here, which InsightFixRouting swallows into "no fix opened";
|
|
165
|
+
* - triage dedupes to one non-terminal run per insight, so a re-routed
|
|
166
|
+
* insight with a live triage run enqueues nothing;
|
|
167
|
+
* - both status writes are idempotent overwrites of the same row.
|
|
168
|
+
* NEVER throws: a sweep failure must not cost the project its scan.
|
|
169
|
+
*/
|
|
170
|
+
private static async rerouteStrandedInsights(data: {
|
|
171
|
+
projectId: ObjectID;
|
|
172
|
+
project: Project;
|
|
173
|
+
}): Promise<void> {
|
|
174
|
+
const { projectId, project } = data;
|
|
175
|
+
|
|
176
|
+
let stranded: Array<AIInsight> = [];
|
|
177
|
+
|
|
178
|
+
try {
|
|
179
|
+
stranded = await AIInsightService.findBy({
|
|
180
|
+
query: {
|
|
181
|
+
projectId: projectId,
|
|
182
|
+
status: AIInsightStatus.Detected,
|
|
183
|
+
},
|
|
184
|
+
// Exactly the fields routeNewInsight's collaborators read.
|
|
185
|
+
select: {
|
|
186
|
+
_id: true,
|
|
187
|
+
projectId: true,
|
|
188
|
+
insightType: true,
|
|
189
|
+
serviceName: true,
|
|
190
|
+
traceId: true,
|
|
191
|
+
telemetryExceptionId: true,
|
|
192
|
+
evidence: true,
|
|
193
|
+
},
|
|
194
|
+
limit: LIMIT_MAX,
|
|
195
|
+
skip: 0,
|
|
196
|
+
props: { isRoot: true },
|
|
197
|
+
});
|
|
198
|
+
} catch (error) {
|
|
199
|
+
logger.error(
|
|
200
|
+
`AI Insights: failed to sweep unrouted (Detected) insights for project ${projectId.toString()} — continuing with the scan: ${error}`,
|
|
201
|
+
);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
for (const insight of stranded) {
|
|
206
|
+
try {
|
|
207
|
+
await this.routeNewInsight({ insight: insight, project: project });
|
|
208
|
+
} catch (error) {
|
|
209
|
+
logger.error(
|
|
210
|
+
`AI Insights: re-routing failed for stranded insight ${insight.id?.toString()} (project ${projectId.toString()}) — continuing with the remaining stranded insights: ${error}`,
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/*
|
|
217
|
+
* Route one insight — newly created this tick, or swept up as stranded
|
|
218
|
+
* from an earlier one — out of the defensive Detected state:
|
|
219
|
+
* 1. deterministic fix routing (gated on enableAi + enableInsightFixTasks
|
|
220
|
+
* inside InsightFixRouting) → FixOpened + fixAiRunId, else
|
|
221
|
+
* ActionRequired;
|
|
222
|
+
* 2. triage enqueue for EVERY new insight — triage enriches fix and
|
|
223
|
+
* non-fix insights alike → triageAiRunId when a run was enqueued.
|
|
224
|
+
* Both collaborators are never-throws by contract, but they are wrapped
|
|
225
|
+
* anyway: a contract breach must degrade (no fix / no triage), not leave
|
|
226
|
+
* the insight stuck in Detected or fail the scan.
|
|
227
|
+
*/
|
|
228
|
+
private static async routeNewInsight(data: {
|
|
229
|
+
insight: AIInsight;
|
|
230
|
+
project: Project;
|
|
231
|
+
}): Promise<void> {
|
|
232
|
+
const { insight, project } = data;
|
|
233
|
+
|
|
234
|
+
let fixAiRunId: ObjectID | undefined = undefined;
|
|
235
|
+
|
|
236
|
+
try {
|
|
237
|
+
const fixResult: InsightFixRoutingResult =
|
|
238
|
+
await InsightFixRouting.routeInsightFix({
|
|
239
|
+
insight: insight,
|
|
240
|
+
project: project,
|
|
241
|
+
});
|
|
242
|
+
fixAiRunId = fixResult.fixAiRunId;
|
|
243
|
+
} catch (error) {
|
|
244
|
+
logger.error(
|
|
245
|
+
`AI Insights: fix routing threw for insight ${insight.id?.toString()} (treating as no fix opened): ${error}`,
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (fixAiRunId) {
|
|
250
|
+
await AIInsightService.updateOneById({
|
|
251
|
+
id: insight.id!,
|
|
252
|
+
data: {
|
|
253
|
+
status: AIInsightStatus.FixOpened,
|
|
254
|
+
fixAiRunId: fixAiRunId,
|
|
255
|
+
},
|
|
256
|
+
props: { isRoot: true },
|
|
257
|
+
});
|
|
258
|
+
} else {
|
|
259
|
+
await AIInsightService.updateOneById({
|
|
260
|
+
id: insight.id!,
|
|
261
|
+
data: {
|
|
262
|
+
status: AIInsightStatus.ActionRequired,
|
|
263
|
+
},
|
|
264
|
+
props: { isRoot: true },
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
let triageAiRunId: ObjectID | undefined = undefined;
|
|
269
|
+
|
|
270
|
+
try {
|
|
271
|
+
const triageResult: InsightTriageResult =
|
|
272
|
+
await InsightTriage.enqueueInsightTriage({ insight: insight });
|
|
273
|
+
triageAiRunId = triageResult.triageAiRunId;
|
|
274
|
+
} catch (error) {
|
|
275
|
+
logger.error(
|
|
276
|
+
`AI Insights: triage enqueue threw for insight ${insight.id?.toString()} (continuing without triage): ${error}`,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (triageAiRunId) {
|
|
281
|
+
await AIInsightService.updateOneById({
|
|
282
|
+
id: insight.id!,
|
|
283
|
+
data: {
|
|
284
|
+
triageAiRunId: triageAiRunId,
|
|
285
|
+
},
|
|
286
|
+
props: { isRoot: true },
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|