@oneuptime/common 11.5.4 → 11.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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/Models/DatabaseModels/User.ts +47 -0
- 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/1784048917994-AddCreatedByUserToUser.ts +23 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +32 -0
- package/Server/Infrastructure/Queue.ts +82 -4
- package/Server/Infrastructure/Semaphore.ts +62 -1
- package/Server/Middleware/MasterAdminAuthorization.ts +37 -0
- package/Server/Middleware/ProjectAuthorization.ts +40 -15
- 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/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/TeamMemberService.ts +2 -0
- package/Server/Services/TelemetryExceptionService.ts +323 -116
- package/Server/Services/TraceAggregationService.ts +176 -0
- package/Server/Services/UserService.ts +10 -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 +2 -1
- 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/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +16 -6
- package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +14 -3
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +130 -12
- 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/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +553 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +590 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageFormatterUnits.test.ts +254 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +821 -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/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/Models/DatabaseModels/User.js +46 -0
- package/build/dist/Models/DatabaseModels/User.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/1784048917994-AddCreatedByUserToUser.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784048917994-AddCreatedByUserToUser.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +32 -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/Middleware/MasterAdminAuthorization.js +26 -0
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +40 -14
- package/build/dist/Server/Middleware/ProjectAuthorization.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/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/TeamMemberService.js +2 -0
- package/build/dist/Server/Services/TeamMemberService.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/Services/UserService.js +8 -0
- package/build/dist/Server/Services/UserService.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.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/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +15 -7
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +12 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +8 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +96 -12
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.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,226 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import AIService, { AI_CONFIDENCE_CLASSIFICATION_FEATURE, } from "../../../Services/AIService";
|
|
11
|
+
import logger from "../../Logger";
|
|
12
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
13
|
+
/*
|
|
14
|
+
* AI SRE — the structured, server-verified confidence signal (G6).
|
|
15
|
+
*
|
|
16
|
+
* The vision's §6 threat model forbids deriving control flow from free-form
|
|
17
|
+
* model prose: adversarial telemetry can steer what the model writes, so a
|
|
18
|
+
* regex over the analysis (the old INCONCLUSIVE_RE) was forgeable by prompt
|
|
19
|
+
* injection. This module replaces it with a two-part signal:
|
|
20
|
+
*
|
|
21
|
+
* 1. Deterministic evidence floor (pure, no LLM): computed from the run's
|
|
22
|
+
* OWN recorded tool activity. Citations are minted server-side from
|
|
23
|
+
* validated tool arguments — never by the model — so prose cannot fake
|
|
24
|
+
* evidence that was never minted. Zero citations AND zero data-bearing
|
|
25
|
+
* tool calls → INCONCLUSIVE, regardless of anything the analysis says.
|
|
26
|
+
*
|
|
27
|
+
* 2. Constrained classification (only when the floor passes): ONE metered
|
|
28
|
+
* LLM call (temperature 0, tiny token cap, word-bounded single-token
|
|
29
|
+
* parse — the InvestigationGrader idiom) asking whether the analysis
|
|
30
|
+
* asserts a specific, evidenced root cause or is inconclusive. The
|
|
31
|
+
* classifier sees the analysis as DATA and can only emit one of two
|
|
32
|
+
* tokens — it cannot be steered into an arbitrary control decision.
|
|
33
|
+
*
|
|
34
|
+
* FAIL DIRECTIONS ARE PER-CONSUMER, and that is the point of the structured
|
|
35
|
+
* result: `{confident, source}` lets each consumer choose its own safe
|
|
36
|
+
* degradation when the classification itself failed (unparseable response or
|
|
37
|
+
* the call errored). As implemented:
|
|
38
|
+
*
|
|
39
|
+
* | source | confident | workspace ping | instrumentation PR |
|
|
40
|
+
* |-----------------------|-----------|----------------|--------------------|
|
|
41
|
+
* | deterministic-floor | false | no (quiet) | yes (enqueue) |
|
|
42
|
+
* | classification | true | yes | no |
|
|
43
|
+
* | classification | false | no (quiet) | yes (enqueue) |
|
|
44
|
+
* | classification-failed | false (*) | YES — louder | NO — no PR |
|
|
45
|
+
*
|
|
46
|
+
* - The workspace ping treats classification-failed as CONFIDENT: quiet
|
|
47
|
+
* mode's fail direction is "louder, not silent" (vision §6) — a broken
|
|
48
|
+
* classifier must never suppress the on-call ping.
|
|
49
|
+
* - The instrumentation trigger treats classification-failed as
|
|
50
|
+
* NOT-inconclusive: autonomous PR creation (G11 posture) requires a
|
|
51
|
+
* POSITIVE, verified inconclusive verdict — "we don't know" must fail
|
|
52
|
+
* toward doing nothing.
|
|
53
|
+
* - (*) When source is "classification-failed" the `confident` boolean is
|
|
54
|
+
* a placeholder, NOT a verdict — consumers must route decisions through
|
|
55
|
+
* the helpers below, never through the raw boolean.
|
|
56
|
+
*
|
|
57
|
+
* Budget accounting: the classification call runs AFTER the investigation's
|
|
58
|
+
* agent loop has finished, so it is deliberately OUTSIDE the engine's per-run
|
|
59
|
+
* caps (MAX_LLM_CALLS / MAX_OUTPUT_TOKENS govern the loop, whose counts are
|
|
60
|
+
* persisted at the Completed transition before this call fires). It is still
|
|
61
|
+
* metered per-call in LlmLog and its feature is in AUTONOMOUS_AI_FEATURES, so
|
|
62
|
+
* the G4 daily autonomous token budget covers it — and a budget rejection
|
|
63
|
+
* degrades the signal to "classification-failed", never a run failure.
|
|
64
|
+
*/
|
|
65
|
+
/*
|
|
66
|
+
* Persisted LlmLog label, and a member of AUTONOMOUS_AI_FEATURES (G4 budget).
|
|
67
|
+
* Owned by AIService so this writer and the budget match-list cannot drift —
|
|
68
|
+
* a drift would silently drop classification out of the budget forever.
|
|
69
|
+
*/
|
|
70
|
+
export const CONFIDENCE_CLASSIFICATION_FEATURE = AI_CONFIDENCE_CLASSIFICATION_FEATURE;
|
|
71
|
+
// Truncation cap keeps the classification call cheap and inside context limits.
|
|
72
|
+
const MAX_ANALYSIS_CHARS = 8000;
|
|
73
|
+
/*
|
|
74
|
+
* Word-bounded token matchers (hoisted: wrap-regex and prettier disagree
|
|
75
|
+
* inline). Word boundaries mean CONFIDENTLY / INCONCLUSIVELY do not parse.
|
|
76
|
+
*/
|
|
77
|
+
const CONFIDENT_RE = /\bCONFIDENT\b/;
|
|
78
|
+
const INCONCLUSIVE_RE = /\bINCONCLUSIVE\b/;
|
|
79
|
+
export default class AIConfidenceSignal {
|
|
80
|
+
/*
|
|
81
|
+
* THE single definition of "data-bearing" (shared with the eval harness in
|
|
82
|
+
* Utils/AI/Eval): a tool result that carried at least one row of data.
|
|
83
|
+
* rowCount 0 is still server-verified evidence — proof of absence ("checked,
|
|
84
|
+
* found nothing") — but it is not data-BEARING. Both the live confidence
|
|
85
|
+
* floor (over minted citations) and the offline corpus derivation (over
|
|
86
|
+
* recorded AIRunEvent resultSummary.rowCount) route through this helper so
|
|
87
|
+
* the two can never drift apart.
|
|
88
|
+
*/
|
|
89
|
+
static isDataBearingRowCount(rowCount) {
|
|
90
|
+
return (rowCount || 0) > 0;
|
|
91
|
+
}
|
|
92
|
+
// Derive the deterministic evidence inputs from the run's minted citations.
|
|
93
|
+
static evidenceFromCitations(citations) {
|
|
94
|
+
const dataBearingToolCallCount = citations.filter((citation) => {
|
|
95
|
+
return this.isDataBearingRowCount(citation.rowCount);
|
|
96
|
+
}).length;
|
|
97
|
+
return {
|
|
98
|
+
citationCount: citations.length,
|
|
99
|
+
dataBearingToolCallCount,
|
|
100
|
+
anyToolReturnedData: dataBearingToolCallCount > 0,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/*
|
|
104
|
+
* The deterministic floor (pure, exported for tests): zero citations AND
|
|
105
|
+
* zero successful data-bearing tool calls → no server-verified evidence
|
|
106
|
+
* exists, so the run is INCONCLUSIVE no matter what the prose claims.
|
|
107
|
+
* Prose cannot fake evidence that was never minted server-side.
|
|
108
|
+
*/
|
|
109
|
+
static hasVerifiableEvidence(evidence) {
|
|
110
|
+
return (evidence.citationCount > 0 ||
|
|
111
|
+
evidence.dataBearingToolCallCount > 0 ||
|
|
112
|
+
evidence.anyToolReturnedData);
|
|
113
|
+
}
|
|
114
|
+
/*
|
|
115
|
+
* Defensive one-token parse (pure, exported for tests). The prompt demands
|
|
116
|
+
* exactly one token, but models editorialize — accept the verdict when
|
|
117
|
+
* exactly ONE of the two tokens appears, word-bounded. Both found, neither
|
|
118
|
+
* found, or empty → null (classification failed; per-consumer fail
|
|
119
|
+
* directions apply).
|
|
120
|
+
*/
|
|
121
|
+
static parseClassificationToken(response) {
|
|
122
|
+
if (!response) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const text = response.toUpperCase();
|
|
126
|
+
const isConfident = CONFIDENT_RE.test(text);
|
|
127
|
+
const isInconclusive = INCONCLUSIVE_RE.test(text);
|
|
128
|
+
if (isConfident === isInconclusive) {
|
|
129
|
+
// Both or neither → unparseable.
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
return isConfident;
|
|
133
|
+
}
|
|
134
|
+
/*
|
|
135
|
+
* Consumer decision: should the analysis post ping the workspace/on-call?
|
|
136
|
+
* Fail direction: classification-failed → TRUE. Quiet mode fails LOUDER,
|
|
137
|
+
* not silent — a broken classifier must never suppress the ping (the old
|
|
138
|
+
* regex's fail direction, kept deliberately).
|
|
139
|
+
*/
|
|
140
|
+
static shouldSendWorkspaceNotification(signal) {
|
|
141
|
+
if (signal.source === "classification-failed") {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return signal.confident;
|
|
145
|
+
}
|
|
146
|
+
/*
|
|
147
|
+
* Consumer decision: should an ImproveInstrumentation fix task be enqueued
|
|
148
|
+
* (opted-in projects only — the trigger has its own gates)? Requires a
|
|
149
|
+
* POSITIVE inconclusive verdict: either the deterministic floor proved no
|
|
150
|
+
* evidence exists, or the classification said INCONCLUSIVE. Fail direction:
|
|
151
|
+
* classification-failed → FALSE — autonomous PR creation fails toward
|
|
152
|
+
* doing nothing (G11 posture).
|
|
153
|
+
*/
|
|
154
|
+
static shouldEnqueueInstrumentationTask(signal) {
|
|
155
|
+
if (signal.source === "classification-failed") {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
return !signal.confident;
|
|
159
|
+
}
|
|
160
|
+
/*
|
|
161
|
+
* Compute the full signal: deterministic floor first (no LLM call when it
|
|
162
|
+
* fails), then one constrained classification call. NEVER throws — an
|
|
163
|
+
* errored or unparseable classification returns "classification-failed"
|
|
164
|
+
* and each consumer applies its own fail direction.
|
|
165
|
+
*/
|
|
166
|
+
static async computeConfidenceSignal(data) {
|
|
167
|
+
if (!this.hasVerifiableEvidence(data.evidence)) {
|
|
168
|
+
/*
|
|
169
|
+
* No server-minted evidence exists — inconclusive by construction,
|
|
170
|
+
* regardless of the prose. No classification call is spent.
|
|
171
|
+
*/
|
|
172
|
+
return { confident: false, source: "deterministic-floor" };
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const response = await AIService.executeWithLogging({
|
|
176
|
+
projectId: data.projectId,
|
|
177
|
+
feature: CONFIDENCE_CLASSIFICATION_FEATURE,
|
|
178
|
+
aiRunId: data.aiRunId,
|
|
179
|
+
// The verdict drives control flow; no prompt previews in LlmLog.
|
|
180
|
+
storeContentPreviews: false,
|
|
181
|
+
temperature: 0,
|
|
182
|
+
maxTokens: 20,
|
|
183
|
+
messages: [
|
|
184
|
+
{
|
|
185
|
+
role: "system",
|
|
186
|
+
content: [
|
|
187
|
+
"You judge an AI incident investigation's own analysis.",
|
|
188
|
+
"Does this analysis assert a specific root cause with supporting evidence, or is it inconclusive?",
|
|
189
|
+
"Reply with exactly one token and nothing else:",
|
|
190
|
+
"CONFIDENT — the analysis asserts a specific root cause with supporting evidence.",
|
|
191
|
+
"INCONCLUSIVE — the analysis could not determine a cause, or asserts one without supporting evidence.",
|
|
192
|
+
].join("\n"),
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
role: "user",
|
|
196
|
+
content: [
|
|
197
|
+
"AI investigation analysis:",
|
|
198
|
+
'"""',
|
|
199
|
+
data.analysisMarkdown.substring(0, MAX_ANALYSIS_CHARS),
|
|
200
|
+
'"""',
|
|
201
|
+
"",
|
|
202
|
+
"One token only: CONFIDENT or INCONCLUSIVE.",
|
|
203
|
+
].join("\n"),
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
});
|
|
207
|
+
const verdict = this.parseClassificationToken(response.content);
|
|
208
|
+
if (verdict === null) {
|
|
209
|
+
logger.warn(`AI confidence: unparseable classification response for run ${data.aiRunId.toString()} — per-consumer fail directions apply.`);
|
|
210
|
+
return { confident: false, source: "classification-failed" };
|
|
211
|
+
}
|
|
212
|
+
return { confident: verdict, source: "classification" };
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
logger.error(`AI confidence: classification call failed for run ${data.aiRunId.toString()} — per-consumer fail directions apply: ${error}`);
|
|
216
|
+
return { confident: false, source: "classification-failed" };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
__decorate([
|
|
221
|
+
CaptureSpan(),
|
|
222
|
+
__metadata("design:type", Function),
|
|
223
|
+
__metadata("design:paramtypes", [Object]),
|
|
224
|
+
__metadata("design:returntype", Promise)
|
|
225
|
+
], AIConfidenceSignal, "computeConfidenceSignal", null);
|
|
226
|
+
//# sourceMappingURL=ConfidenceSignal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfidenceSignal.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/SRE/ConfidenceSignal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import AIRunType from "../../../../Types/AI/AIRunType";
|
|
11
|
+
import AIRunStatus from "../../../../Types/AI/AIRunStatus";
|
|
12
|
+
import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
|
|
13
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
14
|
+
import AIRunService from "../../../Services/AIRunService";
|
|
15
|
+
import SubjectCodeFixRun from "./SubjectCodeFixRun";
|
|
16
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
17
|
+
/*
|
|
18
|
+
* AI SRE — the FixFromIncident trigger (the roadmap's headline `code_fix`
|
|
19
|
+
* capability, vision §4.8, in human-triggered form).
|
|
20
|
+
*
|
|
21
|
+
* After a AI investigation posts a root-cause analysis on an incident
|
|
22
|
+
* or alert, the user can click "Open Fix PR from this analysis" on the
|
|
23
|
+
* investigation panel: the agent takes the posted analysis (the RootCause
|
|
24
|
+
* feed item) as its entire context and opens a fix pull request. Unlike the
|
|
25
|
+
* ImproveInstrumentation sibling this is NOT automatic — a human reads the
|
|
26
|
+
* analysis and decides a fix PR is worth opening, so no project opt-in flag
|
|
27
|
+
* is needed: the human in the loop IS the gate (G11 posture preserved).
|
|
28
|
+
*
|
|
29
|
+
* And unlike InstrumentationTaskTrigger (fire-and-forget inside the
|
|
30
|
+
* investigation's postAnalysis, never throws), this runs inside a
|
|
31
|
+
* user-facing endpoint (POST /ai-investigation/create-fix-task) and FAILS
|
|
32
|
+
* EARLY with a clear message when a gate is not met.
|
|
33
|
+
*/
|
|
34
|
+
export default class FixFromIncidentTaskTrigger {
|
|
35
|
+
/*
|
|
36
|
+
* Gate and enqueue a FixFromIncident CodeFix run for the subject. The
|
|
37
|
+
* caller must already have access-checked the subject under the USER's
|
|
38
|
+
* permissions — this method reads and writes as root. Exactly one of
|
|
39
|
+
* incidentId/alertId is expected; userId is the clicking user
|
|
40
|
+
* (attribution on the run).
|
|
41
|
+
*
|
|
42
|
+
* Throws BadDataException naming the failed gate: no completed
|
|
43
|
+
* investigation, no GitHub-App repository, or a duplicate active run.
|
|
44
|
+
*/
|
|
45
|
+
static async createFixTaskFromInvestigation(data) {
|
|
46
|
+
if (!data.incidentId && !data.alertId) {
|
|
47
|
+
throw new BadDataException("An incident or alert subject is required to create a fix task.");
|
|
48
|
+
}
|
|
49
|
+
const subjectLabel = data.incidentId
|
|
50
|
+
? "incident"
|
|
51
|
+
: "alert";
|
|
52
|
+
/*
|
|
53
|
+
* Gate 1: a COMPLETED investigation must exist for the subject — its
|
|
54
|
+
* posted analysis (the RootCause feed item) is the fix task's entire
|
|
55
|
+
* context. Without one the worker would have nothing to work from.
|
|
56
|
+
*/
|
|
57
|
+
const completedInvestigation = await AIRunService.findOneBy({
|
|
58
|
+
query: Object.assign({ runType: AIRunType.Investigation, status: AIRunStatus.Completed }, (data.incidentId
|
|
59
|
+
? { triggeredByIncidentId: data.incidentId }
|
|
60
|
+
: { triggeredByAlertId: data.alertId })),
|
|
61
|
+
select: { _id: true },
|
|
62
|
+
props: { isRoot: true },
|
|
63
|
+
});
|
|
64
|
+
if (!completedInvestigation) {
|
|
65
|
+
throw new BadDataException(`No completed AI investigation exists for this ${subjectLabel} — the fix task uses the investigation's posted analysis as its context. Wait for the investigation to complete, or enable AI investigations in the AI settings.`);
|
|
66
|
+
}
|
|
67
|
+
// Gate 2: a repository the agent can actually open a PR against.
|
|
68
|
+
const hasConnectedRepository = await SubjectCodeFixRun.hasGitHubAppConnectedRepository(data.projectId);
|
|
69
|
+
if (!hasConnectedRepository) {
|
|
70
|
+
throw new BadDataException("No GitHub-App-connected repository exists for this project, so the agent has nowhere to open the fix pull request. Connect one under AI > Code Repositories.");
|
|
71
|
+
}
|
|
72
|
+
/*
|
|
73
|
+
* Gate 3: per-subject dedupe — at most one non-terminal FixFromIncident
|
|
74
|
+
* run per incident/alert (repeated clicks must not fan out into
|
|
75
|
+
* duplicate PRs).
|
|
76
|
+
*/
|
|
77
|
+
const existingRun = await SubjectCodeFixRun.findNonTerminalRunForSubject({
|
|
78
|
+
taskType: CodeFixTaskType.FixFromIncident,
|
|
79
|
+
incidentId: data.incidentId,
|
|
80
|
+
alertId: data.alertId,
|
|
81
|
+
});
|
|
82
|
+
if (existingRun) {
|
|
83
|
+
throw new BadDataException(`A fix pull request task is already queued or running for this ${subjectLabel}. Track its progress on the AI > Tasks page.`);
|
|
84
|
+
}
|
|
85
|
+
return SubjectCodeFixRun.enqueueSubjectCodeFixRun({
|
|
86
|
+
projectId: data.projectId,
|
|
87
|
+
taskType: CodeFixTaskType.FixFromIncident,
|
|
88
|
+
incidentId: data.incidentId,
|
|
89
|
+
alertId: data.alertId,
|
|
90
|
+
userId: data.userId,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
__decorate([
|
|
95
|
+
CaptureSpan(),
|
|
96
|
+
__metadata("design:type", Function),
|
|
97
|
+
__metadata("design:paramtypes", [Object]),
|
|
98
|
+
__metadata("design:returntype", Promise)
|
|
99
|
+
], FixFromIncidentTaskTrigger, "createFixTaskFromInvestigation", null);
|
|
100
|
+
//# sourceMappingURL=FixFromIncidentTaskTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixFromIncidentTaskTrigger.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,SAAS,MAAM,gCAAgC,CAAC;AACvD,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAC3D,OAAO,eAAe,MAAM,sCAAsC,CAAC;AACnE,OAAO,gBAAgB,MAAM,8CAA8C,CAAC;AAE5E,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAC1D,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,WAAW,MAAM,6BAA6B,CAAC;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAC7C;;;;;;;;;OASG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,IAKlD;QACC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,gBAAgB,CACxB,gEAAgE,CACjE,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAyB,IAAI,CAAC,UAAU;YACxD,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,OAAO,CAAC;QAEZ;;;;WAIG;QACH,MAAM,sBAAsB,GAAiB,MAAM,YAAY,CAAC,SAAS,CAAC;YACxE,KAAK,kBACH,OAAO,EAAE,SAAS,CAAC,aAAa,EAChC,MAAM,EAAE,WAAW,CAAC,SAAS,IAC1B,CAAC,IAAI,CAAC,UAAU;gBACjB,CAAC,CAAC,EAAE,qBAAqB,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC5C,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAQ,EAAE,CAAC,CAC3C;YACD,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;YACrB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CACxB,iDAAiD,YAAY,kKAAkK,CAChO,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,MAAM,sBAAsB,GAC1B,MAAM,iBAAiB,CAAC,+BAA+B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE1E,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CACxB,8JAA8J,CAC/J,CAAC;QACJ,CAAC;QAED;;;;WAIG;QACH,MAAM,WAAW,GACf,MAAM,iBAAiB,CAAC,4BAA4B,CAAC;YACnD,QAAQ,EAAE,eAAe,CAAC,eAAe;YACzC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEL,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,gBAAgB,CACxB,iEAAiE,YAAY,8CAA8C,CAC5H,CAAC;QACJ,CAAC;QAED,OAAO,iBAAiB,CAAC,wBAAwB,CAAC;YAChD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,eAAe,CAAC,eAAe;YACzC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;CACF;AA3EqB;IADnB,WAAW,EAAE;;;;sEA2Eb"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import CodeFixTaskType from "../../../../Types/AI/CodeFixTaskType";
|
|
11
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
12
|
+
import SpanTreeAnalyzer from "../PerfEvidence/SpanTreeAnalyzer";
|
|
13
|
+
import SubjectCodeFixRun from "./SubjectCodeFixRun";
|
|
14
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
15
|
+
/*
|
|
16
|
+
* AI SRE — the FixPerformance trigger: from a slow trace, one click opens
|
|
17
|
+
* a performance-fix pull request grounded in the actual span-tree evidence.
|
|
18
|
+
*
|
|
19
|
+
* The gate that makes this recipe honest is DETERMINISTIC: the
|
|
20
|
+
* SpanTreeAnalyzer must find a mechanical performance pattern (N+1,
|
|
21
|
+
* dominant span, sequential-that-could-be-parallel) in the trace's spans,
|
|
22
|
+
* or the task is refused — the agent never goes hunting for "something
|
|
23
|
+
* slow" on vibes. Like FixFromIncident (b4) this is human-triggered from a
|
|
24
|
+
* user-facing endpoint (POST /ai-investigation/create-performance-fix-task),
|
|
25
|
+
* so there is no project opt-in flag — the human in the loop IS the gate —
|
|
26
|
+
* and every unmet gate FAILS EARLY with a clear message.
|
|
27
|
+
*
|
|
28
|
+
* The findings (plus best-effort service attribution and code.* locations
|
|
29
|
+
* for repository resolution) are serialized into AIRun.taskContext at
|
|
30
|
+
* enqueue time: ClickHouse span retention is short, so by the time the
|
|
31
|
+
* worker claims the run the spans may be gone. The stored evidence IS the
|
|
32
|
+
* task's context.
|
|
33
|
+
*/
|
|
34
|
+
// Max code.* locations stored — mirrors the resolver's own candidate cap.
|
|
35
|
+
const MAX_CODE_LOCATIONS = 10;
|
|
36
|
+
export default class FixPerformanceTaskTrigger {
|
|
37
|
+
/*
|
|
38
|
+
* Collect code.filepath/code.function/code.lineno (and their newer
|
|
39
|
+
* semconv spellings) from the spans a finding implicates, so the
|
|
40
|
+
* task-details endpoint can attempt stack-trace-style repository
|
|
41
|
+
* resolution. Best-effort: most instrumentations do not stamp code
|
|
42
|
+
* attributes on client spans, and an empty result just means the
|
|
43
|
+
* resolver falls back to name-match / only-repository.
|
|
44
|
+
*/
|
|
45
|
+
static collectCodeLocations(spans, findings) {
|
|
46
|
+
const implicatedSpanIds = new Set();
|
|
47
|
+
for (const finding of findings) {
|
|
48
|
+
for (const implicated of finding.implicatedSpans) {
|
|
49
|
+
implicatedSpanIds.add(implicated.spanId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const locations = [];
|
|
53
|
+
const seenFilePaths = new Set();
|
|
54
|
+
for (const span of spans) {
|
|
55
|
+
if (!implicatedSpanIds.has(span.spanId) || !span.attributes) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const filePath = span.attributes["code.filepath"] || span.attributes["code.file.path"];
|
|
59
|
+
if (!filePath || seenFilePaths.has(filePath)) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
seenFilePaths.add(filePath);
|
|
63
|
+
const functionName = span.attributes["code.function"] ||
|
|
64
|
+
span.attributes["code.function.name"];
|
|
65
|
+
const rawLineNumber = span.attributes["code.lineno"] || span.attributes["code.line.number"];
|
|
66
|
+
const lineNumber = rawLineNumber
|
|
67
|
+
? parseInt(rawLineNumber, 10)
|
|
68
|
+
: NaN;
|
|
69
|
+
locations.push({
|
|
70
|
+
filePath,
|
|
71
|
+
functionName,
|
|
72
|
+
lineNumber: Number.isFinite(lineNumber) ? lineNumber : undefined,
|
|
73
|
+
});
|
|
74
|
+
if (locations.length >= MAX_CODE_LOCATIONS) {
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return locations;
|
|
79
|
+
}
|
|
80
|
+
/*
|
|
81
|
+
* Gate and enqueue a FixPerformance CodeFix run for a trace. The caller
|
|
82
|
+
* must already have loaded the spans under the USER's telemetry-read
|
|
83
|
+
* permissions (the access check) — this method reads and writes as root.
|
|
84
|
+
*
|
|
85
|
+
* Throws BadDataException naming the failed gate: no deterministic
|
|
86
|
+
* finding, no GitHub-App repository, or a duplicate active run for the
|
|
87
|
+
* same trace.
|
|
88
|
+
*/
|
|
89
|
+
static async createPerformanceFixTaskFromTrace(data) {
|
|
90
|
+
if (!data.traceId) {
|
|
91
|
+
throw new BadDataException("A traceId is required to create a performance fix task.");
|
|
92
|
+
}
|
|
93
|
+
if (data.spans.length === 0) {
|
|
94
|
+
throw new BadDataException("This trace has no spans to analyze (or you do not have access to them).");
|
|
95
|
+
}
|
|
96
|
+
/*
|
|
97
|
+
* Gate 1 — the deterministic evidence gate, and the recipe's whole
|
|
98
|
+
* point: no mechanical pattern in the span tree means no fix task.
|
|
99
|
+
* This gate lives HERE, not in the findings entry point below: callers
|
|
100
|
+
* of that entry point (insight fix routing) hand over findings that
|
|
101
|
+
* were already computed — and gated on — at detect time.
|
|
102
|
+
*/
|
|
103
|
+
const findings = SpanTreeAnalyzer.analyzeTrace(data.spans);
|
|
104
|
+
if (findings.length === 0) {
|
|
105
|
+
throw new BadDataException("No deterministic performance pattern was found in this trace. The analyzer looks for N+1 patterns (5+ near-identical sibling spans), a dominant slow span (60%+ of the trace), and sequential same-operation siblings that could run in parallel (3+, 50%+ of their parent) — none matched, so the AI agent has no grounded evidence to fix.");
|
|
106
|
+
}
|
|
107
|
+
return this.createPerformanceFixTaskFromFindings({
|
|
108
|
+
projectId: data.projectId,
|
|
109
|
+
traceId: data.traceId,
|
|
110
|
+
serviceName: data.serviceName,
|
|
111
|
+
findings,
|
|
112
|
+
codeLocations: this.collectCodeLocations(data.spans, findings),
|
|
113
|
+
userId: data.userId,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/*
|
|
117
|
+
* The findings-based entry point: gate and enqueue a FixPerformance run
|
|
118
|
+
* for ALREADY-COMPUTED deterministic findings (the spans path above after
|
|
119
|
+
* its analyzer gate, and AI insight fix routing whose findings were
|
|
120
|
+
* drilled — and stored as evidence — at detect time, because the spans
|
|
121
|
+
* are likely gone by now). `userId` is attribution for human-triggered
|
|
122
|
+
* callers; automatic triggers pass none and the run stays system-authored.
|
|
123
|
+
*
|
|
124
|
+
* Throws BadDataException naming the failed gate: no GitHub-App
|
|
125
|
+
* repository, a duplicate active run for the same trace, or (via
|
|
126
|
+
* enqueueSubjectCodeFixRun) the daily fix-run budget.
|
|
127
|
+
*/
|
|
128
|
+
static async createPerformanceFixTaskFromFindings(data) {
|
|
129
|
+
if (!data.traceId) {
|
|
130
|
+
throw new BadDataException("A traceId is required to create a performance fix task.");
|
|
131
|
+
}
|
|
132
|
+
// Gate — a repository the agent can actually open a PR against.
|
|
133
|
+
const hasConnectedRepository = await SubjectCodeFixRun.hasGitHubAppConnectedRepository(data.projectId);
|
|
134
|
+
if (!hasConnectedRepository) {
|
|
135
|
+
throw new BadDataException("No GitHub-App-connected repository exists for this project, so the agent has nowhere to open the performance-fix pull request. Connect one under AI > Code Repositories.");
|
|
136
|
+
}
|
|
137
|
+
/*
|
|
138
|
+
* Gate — per-trace dedupe: at most one non-terminal FixPerformance
|
|
139
|
+
* run per trace (repeated clicks must not fan out into duplicate PRs).
|
|
140
|
+
*/
|
|
141
|
+
const existingRun = await SubjectCodeFixRun.findNonTerminalPerformanceFixRunForTrace({
|
|
142
|
+
projectId: data.projectId,
|
|
143
|
+
traceId: data.traceId,
|
|
144
|
+
});
|
|
145
|
+
if (existingRun) {
|
|
146
|
+
throw new BadDataException("A performance fix task is already queued or running for this trace. Track its progress on the AI > Tasks page.");
|
|
147
|
+
}
|
|
148
|
+
const taskContext = {
|
|
149
|
+
traceId: data.traceId,
|
|
150
|
+
serviceName: data.serviceName,
|
|
151
|
+
performanceFindings: data.findings,
|
|
152
|
+
codeLocations: data.codeLocations,
|
|
153
|
+
};
|
|
154
|
+
return SubjectCodeFixRun.enqueueSubjectCodeFixRun({
|
|
155
|
+
projectId: data.projectId,
|
|
156
|
+
taskType: CodeFixTaskType.FixPerformance,
|
|
157
|
+
userId: data.userId,
|
|
158
|
+
taskContext,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
__decorate([
|
|
163
|
+
CaptureSpan(),
|
|
164
|
+
__metadata("design:type", Function),
|
|
165
|
+
__metadata("design:paramtypes", [Object]),
|
|
166
|
+
__metadata("design:returntype", Promise)
|
|
167
|
+
], FixPerformanceTaskTrigger, "createPerformanceFixTaskFromTrace", null);
|
|
168
|
+
__decorate([
|
|
169
|
+
CaptureSpan(),
|
|
170
|
+
__metadata("design:type", Function),
|
|
171
|
+
__metadata("design:paramtypes", [Object]),
|
|
172
|
+
__metadata("design:returntype", Promise)
|
|
173
|
+
], FixPerformanceTaskTrigger, "createPerformanceFixTaskFromFindings", null);
|
|
174
|
+
//# sourceMappingURL=FixPerformanceTaskTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixPerformanceTaskTrigger.js","sourceRoot":"","sources":["../../../../../../Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,eAAe,MAAM,sCAAsC,CAAC;AAKnE,OAAO,gBAAgB,MAAM,8CAA8C,CAAC;AAE5E,OAAO,gBAEN,MAAM,kCAAkC,CAAC;AAC1C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,WAAW,MAAM,6BAA6B,CAAC;AAEtD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,0EAA0E;AAC1E,MAAM,kBAAkB,GAAW,EAAE,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,yBAAyB;IAC5C;;;;;;;OAOG;IACI,MAAM,CAAC,oBAAoB,CAChC,KAA4B,EAC5B,QAAmC;QAEnC,MAAM,iBAAiB,GAAgB,IAAI,GAAG,EAAE,CAAC;QAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;gBACjD,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAmC,EAAE,CAAC;QACrD,MAAM,aAAa,GAAgB,IAAI,GAAG,EAAE,CAAC;QAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YAExE,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,SAAS;YACX,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5B,MAAM,YAAY,GAChB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;YAExC,MAAM,aAAa,GACjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;YACxE,MAAM,UAAU,GAAW,aAAa;gBACtC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC;gBAC7B,CAAC,CAAC,GAAG,CAAC;YAER,SAAS,CAAC,IAAI,CAAC;gBACb,QAAQ;gBACR,YAAY;gBACZ,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;aACjE,CAAC,CAAC;YAEH,IAAI,SAAS,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;gBAC3C,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;;OAQG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,IAMrD;QACC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CACxB,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CACxB,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QAED;;;;;;WAMG;QACH,MAAM,QAAQ,GAA8B,gBAAgB,CAAC,YAAY,CACvE,IAAI,CAAC,KAAK,CACX,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,gBAAgB,CACxB,8UAA8U,CAC/U,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,oCAAoC,CAAC;YAC/C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;YAC9D,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IAEiB,AAAb,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,IAOxD;QACC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CACxB,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,gEAAgE;QAChE,MAAM,sBAAsB,GAC1B,MAAM,iBAAiB,CAAC,+BAA+B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE1E,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CACxB,0KAA0K,CAC3K,CAAC;QACJ,CAAC;QAED;;;WAGG;QACH,MAAM,WAAW,GACf,MAAM,iBAAiB,CAAC,wCAAwC,CAAC;YAC/D,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEL,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,gBAAgB,CACxB,gHAAgH,CACjH,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAuB;YACtC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,mBAAmB,EAAE,IAAI,CAAC,QAAQ;YAClC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;QAEF,OAAO,iBAAiB,CAAC,wBAAwB,CAAC;YAChD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,eAAe,CAAC,cAAc;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;CACF;AAjHqB;IADnB,WAAW,EAAE;;;;wEA6Cb;AAemB;IADnB,WAAW,EAAE;;;;2EAsDb"}
|