@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
|
@@ -44,6 +44,20 @@ export interface BandPoint {
|
|
|
44
44
|
expectedLow: number;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* One (metric, entity) cell's finalized mean/sample-count for one of the
|
|
49
|
+
* two week-over-week drift windows. The AI MetricDrift detector
|
|
50
|
+
* joins the "recent" and "prior" rows in JS (the join stays app-side so
|
|
51
|
+
* the drift decision is a pure, unit-testable function).
|
|
52
|
+
*/
|
|
53
|
+
export interface MetricDriftWindowRow {
|
|
54
|
+
name: string;
|
|
55
|
+
primaryEntityId: string;
|
|
56
|
+
mean: number;
|
|
57
|
+
sampleCount: number;
|
|
58
|
+
window: "recent" | "prior";
|
|
59
|
+
}
|
|
60
|
+
|
|
47
61
|
/**
|
|
48
62
|
* Read-side service for the `MetricBaselineHourly` MV target table.
|
|
49
63
|
*
|
|
@@ -96,6 +110,14 @@ export class MetricBaselineService extends AnalyticsDatabaseService<MetricBaseli
|
|
|
96
110
|
public static readonly WINDOW_DAYS_OPTIONS: ReadonlyArray<number> = [
|
|
97
111
|
14, 28, 60, 90,
|
|
98
112
|
];
|
|
113
|
+
/**
|
|
114
|
+
* Hard cap on rows returned per drift window. Params travel in the
|
|
115
|
+
* ClickHouse HTTP URI and the detector joins both windows in JS, so an
|
|
116
|
+
* unbounded GROUP BY over a high-cardinality tenant would be both a
|
|
117
|
+
* memory and a transfer problem. Ranked by sampleCount so the busiest
|
|
118
|
+
* (most statistically trustworthy) cells always make the cut.
|
|
119
|
+
*/
|
|
120
|
+
public static readonly DRIFT_MAX_ROWS_PER_WINDOW: number = 500;
|
|
99
121
|
|
|
100
122
|
/**
|
|
101
123
|
* Fetch the rolling-window baseline for one (metric, [entity],
|
|
@@ -285,6 +307,107 @@ export class MetricBaselineService extends AnalyticsDatabaseService<MetricBaseli
|
|
|
285
307
|
return { totalSamples, oldestDay };
|
|
286
308
|
}
|
|
287
309
|
|
|
310
|
+
/**
|
|
311
|
+
* Week-over-week drift feed for the AI MetricDrift detector: the
|
|
312
|
+
* finalized mean + sample count per (metric name, entity) cell for two
|
|
313
|
+
* adjacent 7-day windows — "recent" (last 7 days including today) and
|
|
314
|
+
* "prior" (the 7 days before that). Two GROUP BY finalization queries
|
|
315
|
+
* over the MetricBaselineHourly states (same *Merge idiom as
|
|
316
|
+
* getBaseline); the recent/prior JOIN deliberately happens in the
|
|
317
|
+
* caller's pure decision function, not in SQL, so it is unit-testable.
|
|
318
|
+
* Each window is capped at `limitPerWindow` rows (≤
|
|
319
|
+
* DRIFT_MAX_ROWS_PER_WINDOW) ranked by sampleCount descending.
|
|
320
|
+
*/
|
|
321
|
+
public async getWeekOverWeekDrift(data: {
|
|
322
|
+
projectId: ObjectID;
|
|
323
|
+
limitPerWindow: number;
|
|
324
|
+
}): Promise<Array<MetricDriftWindowRow>> {
|
|
325
|
+
const projectIdStr: string = this.escapeString(data.projectId.toString());
|
|
326
|
+
const limit: number = Math.max(
|
|
327
|
+
1,
|
|
328
|
+
Math.min(
|
|
329
|
+
Math.floor(data.limitPerWindow),
|
|
330
|
+
MetricBaselineService.DRIFT_MAX_ROWS_PER_WINDOW,
|
|
331
|
+
),
|
|
332
|
+
);
|
|
333
|
+
|
|
334
|
+
const windows: Array<{ window: "recent" | "prior"; dayFilter: string }> = [
|
|
335
|
+
{
|
|
336
|
+
window: "recent",
|
|
337
|
+
dayFilter: "day >= today() - INTERVAL 7 DAY",
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
window: "prior",
|
|
341
|
+
dayFilter:
|
|
342
|
+
"day BETWEEN today() - INTERVAL 14 DAY AND today() - INTERVAL 8 DAY",
|
|
343
|
+
},
|
|
344
|
+
];
|
|
345
|
+
|
|
346
|
+
const out: Array<MetricDriftWindowRow> = [];
|
|
347
|
+
|
|
348
|
+
for (const windowSpec of windows) {
|
|
349
|
+
const sql: string = `
|
|
350
|
+
SELECT
|
|
351
|
+
name,
|
|
352
|
+
primaryEntityId,
|
|
353
|
+
avgMerge(meanState) AS mean,
|
|
354
|
+
countMerge(sampleCountState) AS sampleCount
|
|
355
|
+
FROM MetricBaselineHourly
|
|
356
|
+
WHERE projectId = '${projectIdStr}'
|
|
357
|
+
AND ${windowSpec.dayFilter}
|
|
358
|
+
GROUP BY name, primaryEntityId
|
|
359
|
+
ORDER BY sampleCount DESC
|
|
360
|
+
LIMIT ${limit}
|
|
361
|
+
`;
|
|
362
|
+
|
|
363
|
+
const resultSet: {
|
|
364
|
+
json: () => Promise<{
|
|
365
|
+
data: Array<{
|
|
366
|
+
name: string;
|
|
367
|
+
primaryEntityId: string;
|
|
368
|
+
mean: number | string;
|
|
369
|
+
sampleCount: number | string;
|
|
370
|
+
}>;
|
|
371
|
+
}>;
|
|
372
|
+
} = (await this.executeQuery(sql)) as unknown as {
|
|
373
|
+
json: () => Promise<{
|
|
374
|
+
data: Array<{
|
|
375
|
+
name: string;
|
|
376
|
+
primaryEntityId: string;
|
|
377
|
+
mean: number | string;
|
|
378
|
+
sampleCount: number | string;
|
|
379
|
+
}>;
|
|
380
|
+
}>;
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
const parsed: {
|
|
384
|
+
data: Array<{
|
|
385
|
+
name: string;
|
|
386
|
+
primaryEntityId: string;
|
|
387
|
+
mean: number | string;
|
|
388
|
+
sampleCount: number | string;
|
|
389
|
+
}>;
|
|
390
|
+
} = await resultSet.json();
|
|
391
|
+
|
|
392
|
+
for (const row of parsed.data) {
|
|
393
|
+
out.push({
|
|
394
|
+
name: String(row.name || ""),
|
|
395
|
+
primaryEntityId: String(row.primaryEntityId || ""),
|
|
396
|
+
mean: this.toNumber(row.mean),
|
|
397
|
+
sampleCount: this.toNumber(row.sampleCount),
|
|
398
|
+
window: windowSpec.window,
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
logger.debug("MetricBaselineService.getWeekOverWeekDrift", {
|
|
404
|
+
projectId: projectIdStr,
|
|
405
|
+
rowCount: out.length,
|
|
406
|
+
} as LogAttributes);
|
|
407
|
+
|
|
408
|
+
return out;
|
|
409
|
+
}
|
|
410
|
+
|
|
288
411
|
/**
|
|
289
412
|
* Build a series of (time, mean, expectedHigh, expectedLow) points
|
|
290
413
|
* spanning [startTime, endTime] in `intervalMinutes` steps. Each
|
|
@@ -148,6 +148,21 @@ export class Service extends DatabaseService<Model> {
|
|
|
148
148
|
monitorDestination =
|
|
149
149
|
firstStep.data.externalStatusPageMonitor.statusPageUrl || "";
|
|
150
150
|
}
|
|
151
|
+
|
|
152
|
+
// For SQL monitors, show host:port/database (never the credentials).
|
|
153
|
+
if (
|
|
154
|
+
monitorType === MonitorType.SQLQuery &&
|
|
155
|
+
firstStep?.data?.sqlMonitor
|
|
156
|
+
) {
|
|
157
|
+
const sql: {
|
|
158
|
+
host: string;
|
|
159
|
+
port: number;
|
|
160
|
+
databaseName: string;
|
|
161
|
+
} = firstStep.data.sqlMonitor;
|
|
162
|
+
if (sql.host) {
|
|
163
|
+
monitorDestination = `${sql.host}:${sql.port}/${sql.databaseName}`;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
151
166
|
}
|
|
152
167
|
}
|
|
153
168
|
|
|
@@ -147,6 +147,8 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
147
147
|
user = await UserService.createByEmail({
|
|
148
148
|
email,
|
|
149
149
|
name: nameValue ? new Name(nameValue) : undefined,
|
|
150
|
+
// Record who invited this brand-new user, so it can be surfaced later.
|
|
151
|
+
createdByUserId: createBy.props.userId,
|
|
150
152
|
props: {
|
|
151
153
|
isRoot: true,
|
|
152
154
|
},
|
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
import DatabaseService from "./DatabaseService";
|
|
2
2
|
import Model from "../../Models/DatabaseModels/TelemetryException";
|
|
3
3
|
import ServiceType from "../../Types/Telemetry/ServiceType";
|
|
4
|
-
import
|
|
5
|
-
import AIAgentTaskTelemetryException from "../../Models/DatabaseModels/AIAgentTaskTelemetryException";
|
|
4
|
+
import AIRun from "../../Models/DatabaseModels/AIRun";
|
|
6
5
|
import ObjectID from "../../Types/ObjectID";
|
|
7
6
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
8
7
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
8
|
+
import AIRunType from "../../Types/AI/AIRunType";
|
|
9
|
+
import AIRunStatus from "../../Types/AI/AIRunStatus";
|
|
10
|
+
import CodeFixTaskType, {
|
|
11
|
+
CodeFixTaskTypeHelper,
|
|
12
|
+
} from "../../Types/AI/CodeFixTaskType";
|
|
12
13
|
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
13
|
-
import
|
|
14
|
-
import
|
|
14
|
+
import AIRunService from "./AIRunService";
|
|
15
|
+
import FixRunBudget from "../Utils/AI/CodeFix/FixRunBudget";
|
|
16
|
+
import AIAgentService from "./AIAgentService";
|
|
17
|
+
import LlmProviderService from "./LlmProviderService";
|
|
18
|
+
import ProjectService from "./ProjectService";
|
|
19
|
+
import ServiceService from "./ServiceService";
|
|
20
|
+
import CodeRepositoryService from "./CodeRepositoryService";
|
|
21
|
+
import { RepoResolution } from "../Utils/CodeRepository/StackTraceRepoResolver";
|
|
22
|
+
import AIAgent from "../../Models/DatabaseModels/AIAgent";
|
|
23
|
+
import LlmProvider from "../../Models/DatabaseModels/LlmProvider";
|
|
24
|
+
import Project from "../../Models/DatabaseModels/Project";
|
|
25
|
+
import TelemetryService from "../../Models/DatabaseModels/Service";
|
|
15
26
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
16
27
|
import ModelPermission from "../Types/Database/Permissions/Index";
|
|
17
28
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
29
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
18
30
|
import Query from "../Types/Database/Query";
|
|
19
31
|
import Includes from "../../Types/BaseDatabase/Includes";
|
|
20
32
|
import logger from "../Utils/Logger";
|
|
@@ -27,9 +39,29 @@ import logger from "../Utils/Logger";
|
|
|
27
39
|
*/
|
|
28
40
|
export const EXCLUDED_FINGERPRINT_LIMIT: number = 5000;
|
|
29
41
|
|
|
30
|
-
export interface
|
|
42
|
+
export interface CreateCodeFixRunForExceptionParams {
|
|
31
43
|
telemetryExceptionId: ObjectID;
|
|
32
44
|
props: DatabaseCommonInteractionProps;
|
|
45
|
+
// Which task recipe to run. Defaults to FixException.
|
|
46
|
+
taskType?: CodeFixTaskType | undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type AIFixReadinessCheckId =
|
|
50
|
+
| "llmProvider"
|
|
51
|
+
| "repositoryResolved"
|
|
52
|
+
| "agentAvailable";
|
|
53
|
+
|
|
54
|
+
export interface AIFixReadinessCheck {
|
|
55
|
+
id: AIFixReadinessCheckId;
|
|
56
|
+
ok: boolean;
|
|
57
|
+
title: string;
|
|
58
|
+
// Shown to the user when ok is false — says exactly what to do next.
|
|
59
|
+
detail: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface AIFixReadiness {
|
|
63
|
+
ready: boolean;
|
|
64
|
+
checks: Array<AIFixReadinessCheck>;
|
|
33
65
|
}
|
|
34
66
|
|
|
35
67
|
export interface DashboardServiceSummary {
|
|
@@ -58,122 +90,323 @@ export class Service extends DatabaseService<Model> {
|
|
|
58
90
|
super(Model);
|
|
59
91
|
}
|
|
60
92
|
|
|
93
|
+
/*
|
|
94
|
+
* Everything "Fix with AI Agent" needs, checked BEFORE a task is created
|
|
95
|
+
* (and consumed by the dashboard to render a setup checklist instead of a
|
|
96
|
+
* button that fails minutes later inside the agent container).
|
|
97
|
+
*/
|
|
61
98
|
@CaptureSpan()
|
|
62
|
-
public async
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
99
|
+
public async getAIFixReadiness(params: {
|
|
100
|
+
telemetryExceptionId: ObjectID;
|
|
101
|
+
props: DatabaseCommonInteractionProps;
|
|
102
|
+
/*
|
|
103
|
+
* Overrides the IsBillingEnabled env flag for the balance check — exists
|
|
104
|
+
* so tests can exercise both modes without mocking the module.
|
|
105
|
+
*/
|
|
106
|
+
billingEnabled?: boolean;
|
|
107
|
+
}): Promise<AIFixReadiness> {
|
|
68
108
|
const telemetryException: Model | null = await this.findOneById({
|
|
69
|
-
id: telemetryExceptionId,
|
|
109
|
+
id: params.telemetryExceptionId,
|
|
70
110
|
select: {
|
|
71
111
|
_id: true,
|
|
72
112
|
projectId: true,
|
|
73
|
-
message: true,
|
|
74
113
|
stackTrace: true,
|
|
75
114
|
primaryEntityId: true,
|
|
76
|
-
|
|
115
|
+
primaryEntityType: true,
|
|
77
116
|
},
|
|
78
|
-
props,
|
|
117
|
+
props: params.props,
|
|
79
118
|
});
|
|
80
119
|
|
|
81
120
|
if (!telemetryException || !telemetryException.projectId) {
|
|
82
121
|
throw new BadDataException("Telemetry Exception not found");
|
|
83
122
|
}
|
|
84
123
|
|
|
85
|
-
|
|
86
|
-
await this.validateNoActiveTaskExists(telemetryExceptionId);
|
|
124
|
+
const projectId: ObjectID = telemetryException.projectId;
|
|
87
125
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
126
|
+
/*
|
|
127
|
+
* 1. An LLM provider the agent may use. Agent completions are
|
|
128
|
+
* server-mediated and metered (B4 Tier 0), so the shared global
|
|
129
|
+
* provider is a valid fallback on cloud too — a project-owned provider
|
|
130
|
+
* simply wins when one exists.
|
|
131
|
+
*/
|
|
132
|
+
const llmProvider: LlmProvider | null =
|
|
133
|
+
await LlmProviderService.getLlmProviderForMeteredAgentPath(projectId);
|
|
94
134
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
135
|
+
let llmOk: boolean = Boolean(llmProvider);
|
|
136
|
+
let llmDetail: string = llmOk
|
|
137
|
+
? ""
|
|
138
|
+
: "AI fix tasks need an LLM provider. Add one in Project Settings > AI > LLM Providers. Self-hosted instances can alternatively set the GLOBAL_LLM_PROVIDER_* environment variables to register a global provider for every project.";
|
|
139
|
+
|
|
140
|
+
/*
|
|
141
|
+
* A resolved provider must also be PAYABLE, or the run passes readiness
|
|
142
|
+
* here and dies at its first completion call instead. Mirrors the
|
|
143
|
+
* billing gate in AIService.executeWithLogging: only a COSTED global
|
|
144
|
+
* provider on cloud bills the project's AI balance per call —
|
|
145
|
+
* project-owned and free-global providers consume no balance and must
|
|
146
|
+
* not require one.
|
|
147
|
+
*/
|
|
148
|
+
const billingEnabled: boolean = params.billingEnabled ?? IsBillingEnabled;
|
|
149
|
+
|
|
150
|
+
if (
|
|
151
|
+
llmProvider &&
|
|
152
|
+
billingEnabled &&
|
|
153
|
+
(llmProvider.isGlobalLlm || false) &&
|
|
154
|
+
(llmProvider.costPerMillionTokensInUSDCents || 0) > 0
|
|
155
|
+
) {
|
|
156
|
+
const project: Project | null = await ProjectService.findOneById({
|
|
157
|
+
id: projectId,
|
|
158
|
+
select: { aiCurrentBalanceInUSDCents: true },
|
|
159
|
+
props: { isRoot: true },
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
if (!project || (project.aiCurrentBalanceInUSDCents || 0) <= 0) {
|
|
163
|
+
llmOk = false;
|
|
164
|
+
llmDetail =
|
|
165
|
+
"AI fix tasks would use the OneUptime-hosted LLM provider, which is billed against your AI balance — and the project's balance is empty. Recharge it in Project Settings > AI Credits, or add your own LLM provider in Project Settings > AI > LLM Providers.";
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const llmCheck: AIFixReadinessCheck = {
|
|
170
|
+
id: "llmProvider",
|
|
171
|
+
ok: llmOk,
|
|
172
|
+
title: "LLM provider",
|
|
173
|
+
detail: llmDetail,
|
|
174
|
+
};
|
|
102
175
|
|
|
103
|
-
|
|
176
|
+
/*
|
|
177
|
+
* 2. A repository must RESOLVE for this exception — computed at runtime
|
|
178
|
+
* from the stack trace (path matching over connected repos), falling
|
|
179
|
+
* back to service-name matching and the only-repository rule. No manual
|
|
180
|
+
* mapping table, no Service Catalog prerequisite.
|
|
181
|
+
*/
|
|
182
|
+
const service: TelemetryService | null = telemetryException.primaryEntityId
|
|
183
|
+
? await ServiceService.findOneById({
|
|
184
|
+
id: telemetryException.primaryEntityId,
|
|
185
|
+
select: {
|
|
186
|
+
_id: true,
|
|
187
|
+
name: true,
|
|
188
|
+
},
|
|
189
|
+
props: {
|
|
190
|
+
isRoot: true,
|
|
191
|
+
},
|
|
192
|
+
})
|
|
193
|
+
: null;
|
|
194
|
+
|
|
195
|
+
let repoCheck: AIFixReadinessCheck;
|
|
196
|
+
|
|
197
|
+
try {
|
|
198
|
+
const resolution: RepoResolution | null =
|
|
199
|
+
await CodeRepositoryService.resolveRepositoryForException({
|
|
200
|
+
projectId,
|
|
201
|
+
stackTrace: telemetryException.stackTrace || null,
|
|
202
|
+
serviceName: service?.name || null,
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
repoCheck = {
|
|
206
|
+
id: "repositoryResolved",
|
|
207
|
+
ok: Boolean(resolution),
|
|
208
|
+
title: resolution
|
|
209
|
+
? `Repository resolved: ${resolution.organizationName}/${resolution.repositoryName}`
|
|
210
|
+
: "Repository resolved",
|
|
211
|
+
detail: resolution
|
|
212
|
+
? ""
|
|
213
|
+
: "No connected repository could be matched to this exception — its stack-trace files were not found in any connected repository, no repository name matches the service, and the project has more than one repository. Connect the right repository through the GitHub App (installing it imports all its repositories automatically).",
|
|
214
|
+
};
|
|
215
|
+
} catch (err) {
|
|
216
|
+
repoCheck = {
|
|
217
|
+
id: "repositoryResolved",
|
|
218
|
+
ok: false,
|
|
219
|
+
title: "Repository resolved",
|
|
220
|
+
detail: `Could not check the connected repositories: ${
|
|
221
|
+
err instanceof Error ? err.message : "unknown error"
|
|
222
|
+
}`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// 4. An agent must be alive to pick the task up.
|
|
227
|
+
const anyAgent: AIAgent | null =
|
|
228
|
+
await AIAgentService.getAIAgentForProject(projectId);
|
|
229
|
+
const connectedAgent: AIAgent | null = anyAgent
|
|
230
|
+
? AIAgentService.isAgentAlive(anyAgent)
|
|
231
|
+
? anyAgent
|
|
232
|
+
: null
|
|
233
|
+
: null;
|
|
234
|
+
|
|
235
|
+
const agentCheck: AIFixReadinessCheck = {
|
|
236
|
+
id: "agentAvailable",
|
|
237
|
+
ok: Boolean(connectedAgent),
|
|
238
|
+
title: "AI agent online",
|
|
239
|
+
detail: connectedAgent
|
|
240
|
+
? ""
|
|
241
|
+
: anyAgent
|
|
242
|
+
? `The AI agent "${anyAgent.name || "agent"}" has not reported in — check that its container is running.`
|
|
243
|
+
: "No AI agent is available for this project. Self-hosted: create an agent under Settings > AI > AI Agents and run its container. Cloud: the shared fleet appears here automatically once enabled.",
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const checks: Array<AIFixReadinessCheck> = [
|
|
247
|
+
llmCheck,
|
|
248
|
+
repoCheck,
|
|
249
|
+
agentCheck,
|
|
250
|
+
];
|
|
251
|
+
|
|
252
|
+
return {
|
|
253
|
+
ready: checks.every((check: AIFixReadinessCheck) => {
|
|
254
|
+
return check.ok;
|
|
255
|
+
}),
|
|
256
|
+
checks,
|
|
257
|
+
};
|
|
104
258
|
}
|
|
105
259
|
|
|
260
|
+
/*
|
|
261
|
+
* "Fix with AI Agent": record the durable intent as a Queued CodeFix
|
|
262
|
+
* AIRun (the unified run substrate — same enqueue semantics as the
|
|
263
|
+
* investigation queue: attemptCount defaults to 0 and no events are
|
|
264
|
+
* written until a worker claims the run). An external agent container
|
|
265
|
+
* claims it via /ai-agent-task/get-pending-task and dispatches on the
|
|
266
|
+
* run's task recipe (codeFixTaskType).
|
|
267
|
+
*/
|
|
106
268
|
@CaptureSpan()
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
): Promise<
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
aiAgentTask: {
|
|
115
|
-
status: QueryHelper.notIn([
|
|
116
|
-
AIAgentTaskStatus.Completed,
|
|
117
|
-
AIAgentTaskStatus.Error,
|
|
118
|
-
]),
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
select: {
|
|
122
|
-
_id: true,
|
|
123
|
-
aiAgentTaskId: true,
|
|
124
|
-
},
|
|
125
|
-
props: {
|
|
126
|
-
isRoot: true,
|
|
127
|
-
},
|
|
128
|
-
});
|
|
269
|
+
public async createCodeFixRunForException(
|
|
270
|
+
params: CreateCodeFixRunForExceptionParams,
|
|
271
|
+
): Promise<AIRun> {
|
|
272
|
+
const { telemetryExceptionId, props } = params;
|
|
273
|
+
|
|
274
|
+
const taskType: CodeFixTaskType =
|
|
275
|
+
params.taskType || CodeFixTaskType.FixException;
|
|
129
276
|
|
|
130
|
-
|
|
277
|
+
/*
|
|
278
|
+
* Recipes beyond FixException / WriteRegressionTest are declared in the
|
|
279
|
+
* enum (so workers and the UI can already dispatch on them) but their
|
|
280
|
+
* recipes have not shipped — creating a run for them would queue work no
|
|
281
|
+
* agent can execute.
|
|
282
|
+
*/
|
|
283
|
+
if (!CodeFixTaskTypeHelper.isUserTriggerable(taskType)) {
|
|
131
284
|
throw new BadDataException(
|
|
132
|
-
|
|
285
|
+
`Task type "${taskType}" is not user-triggerable yet. Supported task types: ${CodeFixTaskTypeHelper.getUserTriggerableTaskTypes().join(
|
|
286
|
+
", ",
|
|
287
|
+
)}.`,
|
|
133
288
|
);
|
|
134
289
|
}
|
|
135
|
-
}
|
|
136
290
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
291
|
+
// Get the telemetry exception (also the caller's access check).
|
|
292
|
+
const telemetryException: Model | null = await this.findOneById({
|
|
293
|
+
id: telemetryExceptionId,
|
|
294
|
+
select: {
|
|
295
|
+
_id: true,
|
|
296
|
+
projectId: true,
|
|
297
|
+
},
|
|
298
|
+
props,
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
if (!telemetryException || !telemetryException.projectId) {
|
|
302
|
+
throw new BadDataException("Telemetry Exception not found");
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/*
|
|
306
|
+
* G11 guardrail: the per-project daily fix-run budget. Checked before
|
|
307
|
+
* the (more expensive) readiness probes — an over-budget project gets
|
|
308
|
+
* the budget message, not a readiness one.
|
|
309
|
+
*/
|
|
310
|
+
await FixRunBudget.assertWithinBudget(telemetryException.projectId);
|
|
311
|
+
|
|
312
|
+
/*
|
|
313
|
+
* Fail early with everything that's missing, instead of creating a run
|
|
314
|
+
* that dies minutes later inside the agent container.
|
|
315
|
+
*/
|
|
316
|
+
const readiness: AIFixReadiness = await this.getAIFixReadiness({
|
|
162
317
|
telemetryExceptionId,
|
|
318
|
+
props,
|
|
163
319
|
});
|
|
164
320
|
|
|
165
|
-
|
|
166
|
-
|
|
321
|
+
if (!readiness.ready) {
|
|
322
|
+
const missing: string = readiness.checks
|
|
323
|
+
.filter((check: AIFixReadinessCheck) => {
|
|
324
|
+
return !check.ok;
|
|
325
|
+
})
|
|
326
|
+
.map((check: AIFixReadinessCheck) => {
|
|
327
|
+
return check.title;
|
|
328
|
+
})
|
|
329
|
+
.join(", ");
|
|
330
|
+
|
|
331
|
+
throw new BadDataException(
|
|
332
|
+
`Cannot start the AI fix — missing prerequisites: ${missing}.`,
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/*
|
|
337
|
+
* Duplicate guard is per (exception, taskType): an active FixException
|
|
338
|
+
* run must not block queuing a WriteRegressionTest run and vice versa.
|
|
339
|
+
*/
|
|
340
|
+
await this.validateNoActiveCodeFixRunExists(telemetryExceptionId, taskType);
|
|
341
|
+
|
|
342
|
+
const run: AIRun = new AIRun();
|
|
343
|
+
run.projectId = telemetryException.projectId;
|
|
344
|
+
run.runType = AIRunType.CodeFix;
|
|
345
|
+
run.codeFixTaskType = taskType;
|
|
346
|
+
run.status = AIRunStatus.Queued;
|
|
347
|
+
run.triggeredByTelemetryExceptionId = telemetryExceptionId;
|
|
348
|
+
|
|
349
|
+
// Attribution: the user who clicked "Fix with AI Agent".
|
|
350
|
+
if (props.userId) {
|
|
351
|
+
run.userId = props.userId;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/*
|
|
355
|
+
* Created as root: AIRun rows are server-written only (empty create
|
|
356
|
+
* ACL); the user's access was already checked by the exception read.
|
|
357
|
+
*/
|
|
358
|
+
const createdRun: AIRun = await AIRunService.create({
|
|
359
|
+
data: run,
|
|
167
360
|
props: {
|
|
168
|
-
|
|
361
|
+
isRoot: true,
|
|
169
362
|
},
|
|
170
363
|
});
|
|
171
364
|
|
|
172
|
-
if (!
|
|
173
|
-
throw new BadDataException("Failed to create AI
|
|
365
|
+
if (!createdRun.id) {
|
|
366
|
+
throw new BadDataException("Failed to create the AI fix run");
|
|
174
367
|
}
|
|
175
368
|
|
|
176
|
-
return
|
|
369
|
+
return createdRun;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
@CaptureSpan()
|
|
373
|
+
private async validateNoActiveCodeFixRunExists(
|
|
374
|
+
telemetryExceptionId: ObjectID,
|
|
375
|
+
taskType: CodeFixTaskType,
|
|
376
|
+
): Promise<void> {
|
|
377
|
+
const existingRun: AIRun | null = await AIRunService.findOneBy({
|
|
378
|
+
query: {
|
|
379
|
+
runType: AIRunType.CodeFix,
|
|
380
|
+
triggeredByTelemetryExceptionId: telemetryExceptionId,
|
|
381
|
+
/*
|
|
382
|
+
* A null codeFixTaskType means FixException (rows created before
|
|
383
|
+
* task recipes existed), so the FixException guard must also match
|
|
384
|
+
* legacy null rows.
|
|
385
|
+
*/
|
|
386
|
+
codeFixTaskType:
|
|
387
|
+
taskType === CodeFixTaskType.FixException
|
|
388
|
+
? QueryHelper.equalToOrNull(CodeFixTaskType.FixException)
|
|
389
|
+
: taskType,
|
|
390
|
+
status: QueryHelper.notIn([
|
|
391
|
+
AIRunStatus.Completed,
|
|
392
|
+
AIRunStatus.Error,
|
|
393
|
+
AIRunStatus.Cancelled,
|
|
394
|
+
AIRunStatus.Stale,
|
|
395
|
+
]),
|
|
396
|
+
},
|
|
397
|
+
select: {
|
|
398
|
+
_id: true,
|
|
399
|
+
},
|
|
400
|
+
props: {
|
|
401
|
+
isRoot: true,
|
|
402
|
+
},
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
if (existingRun) {
|
|
406
|
+
throw new BadDataException(
|
|
407
|
+
`An AI agent task (${taskType}) is already in progress for this exception. Please wait for it to complete before creating a new one.`,
|
|
408
|
+
);
|
|
409
|
+
}
|
|
177
410
|
}
|
|
178
411
|
|
|
179
412
|
@CaptureSpan()
|
|
@@ -467,32 +700,6 @@ export class Service extends DatabaseService<Model> {
|
|
|
467
700
|
|
|
468
701
|
return summaries;
|
|
469
702
|
}
|
|
470
|
-
|
|
471
|
-
private buildFixExceptionMetadata(params: {
|
|
472
|
-
telemetryException: Model;
|
|
473
|
-
telemetryExceptionId: ObjectID;
|
|
474
|
-
}): FixExceptionTaskMetadata {
|
|
475
|
-
const { telemetryException, telemetryExceptionId } = params;
|
|
476
|
-
|
|
477
|
-
const metadata: FixExceptionTaskMetadata = {
|
|
478
|
-
taskType: AIAgentTaskType.FixException,
|
|
479
|
-
exceptionId: telemetryExceptionId.toString(),
|
|
480
|
-
};
|
|
481
|
-
|
|
482
|
-
if (telemetryException.stackTrace) {
|
|
483
|
-
metadata.stackTrace = telemetryException.stackTrace;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
if (telemetryException.message) {
|
|
487
|
-
metadata.errorMessage = telemetryException.message;
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
if (telemetryException.primaryEntityId) {
|
|
491
|
-
metadata.serviceId = telemetryException.primaryEntityId.toString();
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
return metadata;
|
|
495
|
-
}
|
|
496
703
|
}
|
|
497
704
|
|
|
498
705
|
export default new Service();
|