@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
|
@@ -6,6 +6,9 @@ import FindBy from "../Types/Database/FindBy";
|
|
|
6
6
|
import { OnCreate, OnDelete, OnFind, OnUpdate } from "../Types/Database/Hooks";
|
|
7
7
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
8
8
|
import DatabaseService from "./DatabaseService";
|
|
9
|
+
import AIRunService from "./AIRunService";
|
|
10
|
+
import AIRunType from "../../Types/AI/AIRunType";
|
|
11
|
+
import AIRunStatus from "../../Types/AI/AIRunStatus";
|
|
9
12
|
import IncidentOwnerTeamService from "./IncidentOwnerTeamService";
|
|
10
13
|
import IncidentOwnerUserService from "./IncidentOwnerUserService";
|
|
11
14
|
import IncidentStateService from "./IncidentStateService";
|
|
@@ -84,7 +87,7 @@ import ProjectService from "./ProjectService";
|
|
|
84
87
|
import IncidentTemplateService from "./IncidentTemplateService";
|
|
85
88
|
import IncidentTemplate from "../../Models/DatabaseModels/IncidentTemplate";
|
|
86
89
|
import AIService, { AILogResponse } from "./AIService";
|
|
87
|
-
import
|
|
90
|
+
import AIIncidentInvestigationRunner from "../Utils/AI/SRE/IncidentInvestigationRunner";
|
|
88
91
|
import IncidentAIContextBuilder, {
|
|
89
92
|
AIGenerationContext,
|
|
90
93
|
IncidentContextData,
|
|
@@ -1239,21 +1242,21 @@ export class Service extends DatabaseService<Model> {
|
|
|
1239
1242
|
})
|
|
1240
1243
|
.then(async () => {
|
|
1241
1244
|
/*
|
|
1242
|
-
*
|
|
1245
|
+
* AI (AI SRE): automatically investigate the new incident and post
|
|
1243
1246
|
* a cited root cause analysis to the incident timeline + Slack/Teams.
|
|
1244
1247
|
* Runs last so the workspace channels already exist, and is gated per
|
|
1245
1248
|
* project (opt-in) + requires a configured LLM provider. Read-only.
|
|
1246
1249
|
*/
|
|
1247
1250
|
try {
|
|
1248
1251
|
if (createdItem.projectId && createdItem.id) {
|
|
1249
|
-
await
|
|
1252
|
+
await AIIncidentInvestigationRunner.investigateNewIncident({
|
|
1250
1253
|
incidentId: createdItem.id,
|
|
1251
1254
|
projectId: createdItem.projectId,
|
|
1252
1255
|
});
|
|
1253
1256
|
}
|
|
1254
1257
|
} catch (error) {
|
|
1255
1258
|
logger.error(
|
|
1256
|
-
`
|
|
1259
|
+
`AI incident investigation failed in IncidentService.onCreateSuccess: ${error}`,
|
|
1257
1260
|
{
|
|
1258
1261
|
projectId: createdItem.projectId?.toString(),
|
|
1259
1262
|
incidentId: createdItem.id?.toString(),
|
|
@@ -2795,14 +2798,23 @@ ${incidentSeverity.name}
|
|
|
2795
2798
|
return Service.DEFAULT_METRIC_RETENTION_DAYS;
|
|
2796
2799
|
}
|
|
2797
2800
|
|
|
2801
|
+
/*
|
|
2802
|
+
* Load the incident + its owners and build the attribute set shared by
|
|
2803
|
+
* every incident metric (all values strings for ClickHouse
|
|
2804
|
+
* Map(String, String) storage; arrays joined comma-separated). Factored
|
|
2805
|
+
* out of refreshIncidentMetrics so one-off metric writers — e.g. the
|
|
2806
|
+
* AI time-to-rca metric recorded when an investigation posts its
|
|
2807
|
+
* analysis — record the exact same attribute shape.
|
|
2808
|
+
*/
|
|
2798
2809
|
@CaptureSpan()
|
|
2799
|
-
public async
|
|
2810
|
+
public async getIncidentMetricContext(data: {
|
|
2800
2811
|
incidentId: ObjectID;
|
|
2801
|
-
}): Promise<
|
|
2812
|
+
}): Promise<{ incident: Model; baseMetricAttributes: JSONObject }> {
|
|
2802
2813
|
const incident: Model | null = await this.findOneById({
|
|
2803
2814
|
id: data.incidentId,
|
|
2804
2815
|
select: {
|
|
2805
2816
|
projectId: true,
|
|
2817
|
+
createdAt: true,
|
|
2806
2818
|
declaredAt: true,
|
|
2807
2819
|
postmortemPostedAt: true,
|
|
2808
2820
|
monitors: {
|
|
@@ -2898,6 +2910,161 @@ ${incidentSeverity.name}
|
|
|
2898
2910
|
return Boolean(name);
|
|
2899
2911
|
}) as Array<string>;
|
|
2900
2912
|
|
|
2913
|
+
/*
|
|
2914
|
+
* common attributes shared by all incident metrics
|
|
2915
|
+
* All values must be strings for ClickHouse Map(String, String) storage.
|
|
2916
|
+
* Arrays are joined as comma-separated strings.
|
|
2917
|
+
*/
|
|
2918
|
+
const baseMetricAttributes: JSONObject = {
|
|
2919
|
+
incidentId: data.incidentId.toString(),
|
|
2920
|
+
projectId: incident.projectId.toString(),
|
|
2921
|
+
monitorIds: (
|
|
2922
|
+
incident.monitors
|
|
2923
|
+
?.map((monitor: Monitor) => {
|
|
2924
|
+
return monitor._id?.toString();
|
|
2925
|
+
})
|
|
2926
|
+
.filter(Boolean) || []
|
|
2927
|
+
).join(", "),
|
|
2928
|
+
monitorNames: (
|
|
2929
|
+
incident.monitors
|
|
2930
|
+
?.map((monitor: Monitor) => {
|
|
2931
|
+
return monitor.name?.toString();
|
|
2932
|
+
})
|
|
2933
|
+
.filter(Boolean) || []
|
|
2934
|
+
).join(", "),
|
|
2935
|
+
incidentSeverityId: incident.incidentSeverity?._id?.toString(),
|
|
2936
|
+
incidentSeverityName: incident.incidentSeverity?.name?.toString(),
|
|
2937
|
+
ownerUserIds: ownerUserIds.join(", "),
|
|
2938
|
+
ownerUserNames: ownerUserNames.join(", "),
|
|
2939
|
+
ownerTeamIds: ownerTeamIds.join(", "),
|
|
2940
|
+
ownerTeamNames: ownerTeamNames.join(", "),
|
|
2941
|
+
};
|
|
2942
|
+
|
|
2943
|
+
return { incident, baseMetricAttributes };
|
|
2944
|
+
}
|
|
2945
|
+
|
|
2946
|
+
/*
|
|
2947
|
+
* AI measurement layer: record how long the incident waited for its
|
|
2948
|
+
* AI root-cause analysis — seconds from incident creation to now, written
|
|
2949
|
+
* once from IncidentInvestigationRunner.postAnalysis. Deliberately NOT
|
|
2950
|
+
* part of refreshIncidentMetrics: the refresh's replace-list excludes
|
|
2951
|
+
* this metric name, so refreshes never tombstone it.
|
|
2952
|
+
*/
|
|
2953
|
+
@CaptureSpan()
|
|
2954
|
+
public async recordTimeToRootCausePostedMetric(data: {
|
|
2955
|
+
incidentId: ObjectID;
|
|
2956
|
+
}): Promise<void> {
|
|
2957
|
+
const {
|
|
2958
|
+
incident,
|
|
2959
|
+
baseMetricAttributes,
|
|
2960
|
+
}: { incident: Model; baseMetricAttributes: JSONObject } =
|
|
2961
|
+
await this.getIncidentMetricContext({ incidentId: data.incidentId });
|
|
2962
|
+
|
|
2963
|
+
const now: Date = OneUptimeDate.getCurrentDate();
|
|
2964
|
+
const incidentCreatedAt: Date =
|
|
2965
|
+
incident.createdAt || incident.declaredAt || now;
|
|
2966
|
+
|
|
2967
|
+
const metricRetentionDays: number = await this.getMetricRetentionDays();
|
|
2968
|
+
const retentionDate: Date = OneUptimeDate.addRemoveDays(
|
|
2969
|
+
OneUptimeDate.getCurrentDate(),
|
|
2970
|
+
metricRetentionDays,
|
|
2971
|
+
);
|
|
2972
|
+
|
|
2973
|
+
const timeToRcaMetric: MutableMetric = new MutableMetric();
|
|
2974
|
+
|
|
2975
|
+
timeToRcaMetric.projectId = incident.projectId!;
|
|
2976
|
+
timeToRcaMetric.primaryEntityId = incident.id!;
|
|
2977
|
+
timeToRcaMetric.primaryEntityType = ServiceType.Incident;
|
|
2978
|
+
timeToRcaMetric.name = IncidentMetricType.TimeToRootCausePosted;
|
|
2979
|
+
timeToRcaMetric.metricPointId = IncidentMetricType.TimeToRootCausePosted;
|
|
2980
|
+
timeToRcaMetric.value = OneUptimeDate.getDifferenceInSeconds(
|
|
2981
|
+
now,
|
|
2982
|
+
incidentCreatedAt,
|
|
2983
|
+
);
|
|
2984
|
+
timeToRcaMetric.attributes = {
|
|
2985
|
+
...baseMetricAttributes,
|
|
2986
|
+
// Every time-to-rca point is AI-posted by construction.
|
|
2987
|
+
aiInvestigated: "true",
|
|
2988
|
+
};
|
|
2989
|
+
timeToRcaMetric.attributeKeys = TelemetryUtil.getAttributeKeys(
|
|
2990
|
+
timeToRcaMetric.attributes,
|
|
2991
|
+
);
|
|
2992
|
+
timeToRcaMetric.time = now;
|
|
2993
|
+
timeToRcaMetric.timeUnixNano = OneUptimeDate.toUnixNano(now);
|
|
2994
|
+
timeToRcaMetric.metricPointType = MetricPointType.Sum;
|
|
2995
|
+
timeToRcaMetric.retentionDate = retentionDate;
|
|
2996
|
+
|
|
2997
|
+
await MutableMetricService.createMutableMetrics({
|
|
2998
|
+
metrics: [timeToRcaMetric],
|
|
2999
|
+
});
|
|
3000
|
+
|
|
3001
|
+
// Register the metric type so it shows up in the type catalog.
|
|
3002
|
+
const metricType: MetricType = new MetricType();
|
|
3003
|
+
metricType.name = IncidentMetricType.TimeToRootCausePosted;
|
|
3004
|
+
metricType.description =
|
|
3005
|
+
"Time from incident creation to the AI investigation's posted root-cause analysis";
|
|
3006
|
+
metricType.unit = "seconds";
|
|
3007
|
+
|
|
3008
|
+
TelemetryUtil.indexMetricNameServiceNameMap({
|
|
3009
|
+
metricNameServiceNameMap: {
|
|
3010
|
+
[IncidentMetricType.TimeToRootCausePosted]: metricType,
|
|
3011
|
+
},
|
|
3012
|
+
projectId: incident.projectId!,
|
|
3013
|
+
}).catch((err: Error) => {
|
|
3014
|
+
logger.error(err, {
|
|
3015
|
+
projectId: incident.projectId?.toString(),
|
|
3016
|
+
incidentId: incident.id?.toString(),
|
|
3017
|
+
} as LogAttributes);
|
|
3018
|
+
});
|
|
3019
|
+
}
|
|
3020
|
+
|
|
3021
|
+
@CaptureSpan()
|
|
3022
|
+
public async refreshIncidentMetrics(data: {
|
|
3023
|
+
incidentId: ObjectID;
|
|
3024
|
+
}): Promise<void> {
|
|
3025
|
+
const {
|
|
3026
|
+
incident,
|
|
3027
|
+
baseMetricAttributes,
|
|
3028
|
+
}: { incident: Model; baseMetricAttributes: JSONObject } =
|
|
3029
|
+
await this.getIncidentMetricContext({ incidentId: data.incidentId });
|
|
3030
|
+
|
|
3031
|
+
// getIncidentMetricContext guarantees this; re-checked for TS narrowing.
|
|
3032
|
+
if (!incident.projectId) {
|
|
3033
|
+
throw new BadDataException("Incident Project ID not found");
|
|
3034
|
+
}
|
|
3035
|
+
|
|
3036
|
+
/*
|
|
3037
|
+
* aiInvestigated dimension for MTTA/MTTR (AI measurement layer):
|
|
3038
|
+
* did a completed AI investigation run for this incident? One
|
|
3039
|
+
* indexed countBy per metric refresh (triggeredByIncidentId is indexed)
|
|
3040
|
+
* — acceptable at refresh frequency. Failure must never break metric
|
|
3041
|
+
* recording, so this is best-effort false.
|
|
3042
|
+
*/
|
|
3043
|
+
let aiInvestigated: boolean = false;
|
|
3044
|
+
try {
|
|
3045
|
+
const completedInvestigationCount: PositiveNumber =
|
|
3046
|
+
await AIRunService.countBy({
|
|
3047
|
+
query: {
|
|
3048
|
+
runType: AIRunType.Investigation,
|
|
3049
|
+
status: AIRunStatus.Completed,
|
|
3050
|
+
triggeredByIncidentId: data.incidentId,
|
|
3051
|
+
},
|
|
3052
|
+
props: {
|
|
3053
|
+
isRoot: true,
|
|
3054
|
+
},
|
|
3055
|
+
});
|
|
3056
|
+
|
|
3057
|
+
aiInvestigated = completedInvestigationCount.toNumber() > 0;
|
|
3058
|
+
} catch (err) {
|
|
3059
|
+
logger.error(
|
|
3060
|
+
err as Error,
|
|
3061
|
+
{
|
|
3062
|
+
projectId: incident.projectId?.toString(),
|
|
3063
|
+
incidentId: incident.id?.toString(),
|
|
3064
|
+
} as LogAttributes,
|
|
3065
|
+
);
|
|
3066
|
+
}
|
|
3067
|
+
|
|
2901
3068
|
// get incident state timeline
|
|
2902
3069
|
|
|
2903
3070
|
const incidentStateTimelines: Array<IncidentStateTimeline> =
|
|
@@ -2973,36 +3140,6 @@ ${incidentSeverity.name}
|
|
|
2973
3140
|
|
|
2974
3141
|
const metricTypesMap: Dictionary<MetricType> = {};
|
|
2975
3142
|
|
|
2976
|
-
/*
|
|
2977
|
-
* common attributes shared by all incident metrics
|
|
2978
|
-
* All values must be strings for ClickHouse Map(String, String) storage.
|
|
2979
|
-
* Arrays are joined as comma-separated strings.
|
|
2980
|
-
*/
|
|
2981
|
-
const baseMetricAttributes: JSONObject = {
|
|
2982
|
-
incidentId: data.incidentId.toString(),
|
|
2983
|
-
projectId: incident.projectId.toString(),
|
|
2984
|
-
monitorIds: (
|
|
2985
|
-
incident.monitors
|
|
2986
|
-
?.map((monitor: Monitor) => {
|
|
2987
|
-
return monitor._id?.toString();
|
|
2988
|
-
})
|
|
2989
|
-
.filter(Boolean) || []
|
|
2990
|
-
).join(", "),
|
|
2991
|
-
monitorNames: (
|
|
2992
|
-
incident.monitors
|
|
2993
|
-
?.map((monitor: Monitor) => {
|
|
2994
|
-
return monitor.name?.toString();
|
|
2995
|
-
})
|
|
2996
|
-
.filter(Boolean) || []
|
|
2997
|
-
).join(", "),
|
|
2998
|
-
incidentSeverityId: incident.incidentSeverity?._id?.toString(),
|
|
2999
|
-
incidentSeverityName: incident.incidentSeverity?.name?.toString(),
|
|
3000
|
-
ownerUserIds: ownerUserIds.join(", "),
|
|
3001
|
-
ownerUserNames: ownerUserNames.join(", "),
|
|
3002
|
-
ownerTeamIds: ownerTeamIds.join(", "),
|
|
3003
|
-
ownerTeamNames: ownerTeamNames.join(", "),
|
|
3004
|
-
};
|
|
3005
|
-
|
|
3006
3143
|
const incidentCountMetric: MutableMetric = new MutableMetric();
|
|
3007
3144
|
|
|
3008
3145
|
incidentCountMetric.projectId = incident.projectId;
|
|
@@ -3068,7 +3205,11 @@ ${incidentSeverity.name}
|
|
|
3068
3205
|
OneUptimeDate.getCurrentDate(),
|
|
3069
3206
|
incidentStartsAt,
|
|
3070
3207
|
);
|
|
3071
|
-
|
|
3208
|
+
// aiInvestigated: the MTTA with/without-AI dimension.
|
|
3209
|
+
timeToAcknowledgeMetric.attributes = {
|
|
3210
|
+
...baseMetricAttributes,
|
|
3211
|
+
aiInvestigated: aiInvestigated.toString(),
|
|
3212
|
+
};
|
|
3072
3213
|
timeToAcknowledgeMetric.attributeKeys =
|
|
3073
3214
|
TelemetryUtil.getAttributeKeys(timeToAcknowledgeMetric.attributes);
|
|
3074
3215
|
|
|
@@ -3119,7 +3260,11 @@ ${incidentSeverity.name}
|
|
|
3119
3260
|
OneUptimeDate.getCurrentDate(),
|
|
3120
3261
|
incidentStartsAt,
|
|
3121
3262
|
);
|
|
3122
|
-
|
|
3263
|
+
// aiInvestigated: the MTTR with/without-AI dimension.
|
|
3264
|
+
timeToResolveMetric.attributes = {
|
|
3265
|
+
...baseMetricAttributes,
|
|
3266
|
+
aiInvestigated: aiInvestigated.toString(),
|
|
3267
|
+
};
|
|
3123
3268
|
timeToResolveMetric.attributeKeys = TelemetryUtil.getAttributeKeys(
|
|
3124
3269
|
timeToResolveMetric.attributes,
|
|
3125
3270
|
);
|
|
@@ -27,7 +27,8 @@ import IncidentRole from "../../Models/DatabaseModels/IncidentRole";
|
|
|
27
27
|
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
28
28
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
29
29
|
import IncidentFeedService from "./IncidentFeedService";
|
|
30
|
-
import
|
|
30
|
+
import AIIncidentPostmortemRunner from "../Utils/AI/SRE/IncidentPostmortemRunner";
|
|
31
|
+
import InvestigationGrader from "../Utils/AI/SRE/InvestigationGrader";
|
|
31
32
|
import { IncidentFeedEventType } from "../../Models/DatabaseModels/IncidentFeed";
|
|
32
33
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
33
34
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
@@ -558,14 +559,33 @@ ${createdItem.rootCause}`,
|
|
|
558
559
|
}
|
|
559
560
|
|
|
560
561
|
/*
|
|
561
|
-
*
|
|
562
|
+
* AI: auto-draft a postmortem now that the incident is resolved
|
|
562
563
|
* (gated per project; never overwrites an existing postmortem).
|
|
563
564
|
*/
|
|
564
|
-
|
|
565
|
+
AIIncidentPostmortemRunner.draftPostmortemOnResolve({
|
|
565
566
|
incidentId: createdItem.incidentId!,
|
|
566
567
|
projectId: createdItem.projectId!,
|
|
567
568
|
}).catch((error: Error) => {
|
|
568
|
-
logger.error(`
|
|
569
|
+
logger.error(`AI auto-postmortem failed on resolve:`, {
|
|
570
|
+
projectId: createdItem.projectId?.toString(),
|
|
571
|
+
incidentId: createdItem.incidentId?.toString(),
|
|
572
|
+
} as LogAttributes);
|
|
573
|
+
logger.error(error, {
|
|
574
|
+
projectId: createdItem.projectId?.toString(),
|
|
575
|
+
incidentId: createdItem.incidentId?.toString(),
|
|
576
|
+
} as LogAttributes);
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
/*
|
|
580
|
+
* AI measurement layer: grade the completed investigation (if
|
|
581
|
+
* any) against the human-recorded root cause. Fire-and-forget like
|
|
582
|
+
* the postmortem draft above — must never block or fail the resolve.
|
|
583
|
+
*/
|
|
584
|
+
InvestigationGrader.gradeInvestigationOnResolve({
|
|
585
|
+
incidentId: createdItem.incidentId!,
|
|
586
|
+
projectId: createdItem.projectId!,
|
|
587
|
+
}).catch((error: Error) => {
|
|
588
|
+
logger.error(`AI investigation grading failed on resolve:`, {
|
|
569
589
|
projectId: createdItem.projectId?.toString(),
|
|
570
590
|
incidentId: createdItem.incidentId?.toString(),
|
|
571
591
|
} as LogAttributes);
|
package/Server/Services/Index.ts
CHANGED
|
@@ -13,6 +13,7 @@ import CallLogService from "./CallLogService";
|
|
|
13
13
|
import CallService from "./CallService";
|
|
14
14
|
import DataMigrationService from "./DataMigrationService";
|
|
15
15
|
import MigrationFailureService from "./MigrationFailureService";
|
|
16
|
+
import InstanceHealthLogService from "./InstanceHealthLogService";
|
|
16
17
|
import DomainService from "./DomainService";
|
|
17
18
|
import EmailLogService from "./EmailLogService";
|
|
18
19
|
import EmailVerificationTokenService from "./EmailVerificationTokenService";
|
|
@@ -81,6 +82,7 @@ import MonitorOwnerUserService from "./MonitorOwnerUserService";
|
|
|
81
82
|
import MonitorProbeService from "./MonitorProbeService";
|
|
82
83
|
import MonitorSecretService from "./MonitorSecretService";
|
|
83
84
|
import RunbookSecretService from "./RunbookSecretService";
|
|
85
|
+
import AIInsightService from "./AIInsightService";
|
|
84
86
|
|
|
85
87
|
// Monitors
|
|
86
88
|
import MonitorService from "./MonitorService";
|
|
@@ -104,7 +106,6 @@ import ProbeService from "./ProbeService";
|
|
|
104
106
|
import AIAgentService from "./AIAgentService";
|
|
105
107
|
import AIAgentOwnerUserService from "./AIAgentOwnerUserService";
|
|
106
108
|
import AIAgentOwnerTeamService from "./AIAgentOwnerTeamService";
|
|
107
|
-
import AIAgentTaskLogService from "./AIAgentTaskLogService";
|
|
108
109
|
import AIAgentTaskPullRequestService from "./AIAgentTaskPullRequestService";
|
|
109
110
|
import ProjectCallSMSConfigService from "./ProjectCallSMSConfigService";
|
|
110
111
|
import ProjectService from "./ProjectService";
|
|
@@ -137,7 +138,6 @@ import ScheduledMaintenanceStateTimelineService from "./ScheduledMaintenanceStat
|
|
|
137
138
|
import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
|
|
138
139
|
import ServiceOwnerUserService from "./ServiceOwnerUserService";
|
|
139
140
|
import ServiceService from "./ServiceService";
|
|
140
|
-
import ServiceCodeRepositoryService from "./ServiceCodeRepositoryService";
|
|
141
141
|
import ShortLinkService from "./ShortLinkService";
|
|
142
142
|
// SMS Log Service
|
|
143
143
|
import SmsLogService from "./SmsLogService";
|
|
@@ -282,6 +282,7 @@ const services: Array<BaseService> = [
|
|
|
282
282
|
|
|
283
283
|
DataMigrationService,
|
|
284
284
|
MigrationFailureService,
|
|
285
|
+
InstanceHealthLogService,
|
|
285
286
|
DomainService,
|
|
286
287
|
|
|
287
288
|
EmailLogService,
|
|
@@ -346,6 +347,7 @@ const services: Array<BaseService> = [
|
|
|
346
347
|
MonitorStatusTimelineService,
|
|
347
348
|
MonitorSecretService,
|
|
348
349
|
RunbookSecretService,
|
|
350
|
+
AIInsightService,
|
|
349
351
|
MonitorFeedService,
|
|
350
352
|
|
|
351
353
|
NotificationService,
|
|
@@ -365,7 +367,6 @@ const services: Array<BaseService> = [
|
|
|
365
367
|
AIAgentService,
|
|
366
368
|
AIAgentOwnerUserService,
|
|
367
369
|
AIAgentOwnerTeamService,
|
|
368
|
-
AIAgentTaskLogService,
|
|
369
370
|
AIAgentTaskPullRequestService,
|
|
370
371
|
ProjectSsoService,
|
|
371
372
|
ProjectOidcService,
|
|
@@ -456,7 +457,6 @@ const services: Array<BaseService> = [
|
|
|
456
457
|
ServiceService,
|
|
457
458
|
ServiceOwnerTeamService,
|
|
458
459
|
ServiceOwnerUserService,
|
|
459
|
-
ServiceCodeRepositoryService,
|
|
460
460
|
|
|
461
461
|
TelemetryExceptionService,
|
|
462
462
|
TelemetryEntityService,
|
|
@@ -35,6 +35,33 @@ export class Service extends DatabaseService<Model> {
|
|
|
35
35
|
|
|
36
36
|
return Number(rows[0]?.total || 0);
|
|
37
37
|
}
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* Per-run LLM usage for the server-mediated code-fix agent loop budgets
|
|
41
|
+
* (B4 Tier 0): how many completion calls a run has made and how many
|
|
42
|
+
* output tokens they produced. One SQL aggregate over the run's LlmLog
|
|
43
|
+
* rows — executeWithLogging writes exactly one row per call (success,
|
|
44
|
+
* error, or budget rejection), so the count is the honest call count and
|
|
45
|
+
* errored calls conservatively consume a slot. Runs are bounded to ~30
|
|
46
|
+
* minutes, far inside the 3-day cloud LlmLog retention.
|
|
47
|
+
*/
|
|
48
|
+
@CaptureSpan()
|
|
49
|
+
public async getRunCompletionUsage(data: {
|
|
50
|
+
aiRunId: ObjectID;
|
|
51
|
+
}): Promise<{ completionCalls: number; outputTokens: number }> {
|
|
52
|
+
const rows: Array<{
|
|
53
|
+
calls: string | number | null;
|
|
54
|
+
outputTokens: string | number | null;
|
|
55
|
+
}> = await this.getRepository().manager.query(
|
|
56
|
+
`SELECT COUNT(*) AS "calls", COALESCE(SUM("completionTokens"), 0) AS "outputTokens" FROM "LlmLog" WHERE "aiRunId" = $1 AND "deletedAt" IS NULL`,
|
|
57
|
+
[data.aiRunId.toString()],
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
completionCalls: Number(rows[0]?.calls || 0),
|
|
62
|
+
outputTokens: Number(rows[0]?.outputTokens || 0),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
38
65
|
}
|
|
39
66
|
|
|
40
67
|
export default new Service();
|
|
@@ -157,6 +157,114 @@ export class Service extends DatabaseService<Model> {
|
|
|
157
157
|
return null;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
/*
|
|
161
|
+
* Resolve a provider the project OWNS — never the global fallback.
|
|
162
|
+
* Callers that may also use the shared global provider layer that
|
|
163
|
+
* fallback themselves (see getLlmProviderForMeteredAgentPath). Prefers
|
|
164
|
+
* the project default, else any project-owned provider.
|
|
165
|
+
*/
|
|
166
|
+
@CaptureSpan()
|
|
167
|
+
public async getProjectOwnedLlmProvider(
|
|
168
|
+
projectId: ObjectID,
|
|
169
|
+
): Promise<Model | null> {
|
|
170
|
+
const select: {
|
|
171
|
+
_id: boolean;
|
|
172
|
+
name: boolean;
|
|
173
|
+
llmType: boolean;
|
|
174
|
+
apiKey: boolean;
|
|
175
|
+
baseUrl: boolean;
|
|
176
|
+
modelName: boolean;
|
|
177
|
+
additionalParams: boolean;
|
|
178
|
+
isGlobalLlm: boolean;
|
|
179
|
+
costPerMillionTokensInUSDCents: boolean;
|
|
180
|
+
} = {
|
|
181
|
+
_id: true,
|
|
182
|
+
name: true,
|
|
183
|
+
llmType: true,
|
|
184
|
+
apiKey: true,
|
|
185
|
+
baseUrl: true,
|
|
186
|
+
modelName: true,
|
|
187
|
+
additionalParams: true,
|
|
188
|
+
isGlobalLlm: true,
|
|
189
|
+
costPerMillionTokensInUSDCents: true,
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
const defaultProvider: Model | null = await this.findOneBy({
|
|
193
|
+
query: {
|
|
194
|
+
projectId: projectId,
|
|
195
|
+
isDefault: true,
|
|
196
|
+
},
|
|
197
|
+
select,
|
|
198
|
+
props: {
|
|
199
|
+
isRoot: true,
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
if (defaultProvider) {
|
|
204
|
+
return defaultProvider;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return this.findOneBy({
|
|
208
|
+
query: {
|
|
209
|
+
projectId: projectId,
|
|
210
|
+
},
|
|
211
|
+
sort: {
|
|
212
|
+
createdAt: SortOrder.Ascending,
|
|
213
|
+
},
|
|
214
|
+
select,
|
|
215
|
+
props: {
|
|
216
|
+
isRoot: true,
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/*
|
|
222
|
+
* Resolve the provider for the METERED agent path (B4 Tier 0): the
|
|
223
|
+
* server-mediated /ai-agent-data/llm-completion endpoint, whose calls run
|
|
224
|
+
* through AIService.executeWithLogging — logged to LlmLog, billed when the
|
|
225
|
+
* global provider is costed, and inside the daily autonomous token budget.
|
|
226
|
+
*
|
|
227
|
+
* Because metering is universal on this path, a project-owned provider
|
|
228
|
+
* still wins, but when the project owns none the shared global provider
|
|
229
|
+
* is returned ON CLOUD TOO — its usage is billed as metered AI tokens.
|
|
230
|
+
* Cloud zero-config completes: fix tasks work with no per-project
|
|
231
|
+
* provider. (The old raw-key path — get-llm-config handing the provider
|
|
232
|
+
* apiKey to the worker for unmetered direct calls — is removed; this is
|
|
233
|
+
* the only agent provider resolution left.)
|
|
234
|
+
*/
|
|
235
|
+
@CaptureSpan()
|
|
236
|
+
public async getLlmProviderForMeteredAgentPath(
|
|
237
|
+
projectId: ObjectID,
|
|
238
|
+
): Promise<Model | null> {
|
|
239
|
+
const projectOwnedProvider: Model | null =
|
|
240
|
+
await this.getProjectOwnedLlmProvider(projectId);
|
|
241
|
+
|
|
242
|
+
if (projectOwnedProvider) {
|
|
243
|
+
return projectOwnedProvider;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return this.findOneBy({
|
|
247
|
+
query: {
|
|
248
|
+
projectId: QueryHelper.isNull(),
|
|
249
|
+
isGlobalLlm: true,
|
|
250
|
+
},
|
|
251
|
+
select: {
|
|
252
|
+
_id: true,
|
|
253
|
+
name: true,
|
|
254
|
+
llmType: true,
|
|
255
|
+
apiKey: true,
|
|
256
|
+
baseUrl: true,
|
|
257
|
+
modelName: true,
|
|
258
|
+
additionalParams: true,
|
|
259
|
+
isGlobalLlm: true,
|
|
260
|
+
costPerMillionTokensInUSDCents: true,
|
|
261
|
+
},
|
|
262
|
+
props: {
|
|
263
|
+
isRoot: true,
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
160
268
|
/*
|
|
161
269
|
* Resolve the provider to use for a chat turn. When the user has explicitly
|
|
162
270
|
* chosen a provider (llmProviderId), use it — but only if it is actually
|