@oneuptime/common 12.0.3 → 12.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/AIRun.ts +38 -1
- package/Models/DatabaseModels/AlertFeed.ts +30 -0
- package/Models/DatabaseModels/CephCluster.ts +14 -0
- package/Models/DatabaseModels/CodeRepository.ts +14 -6
- package/Models/DatabaseModels/Dashboard.ts +28 -0
- package/Models/DatabaseModels/DockerHost.ts +14 -0
- package/Models/DatabaseModels/GlobalOidcProject.ts +18 -0
- package/Models/DatabaseModels/GlobalSsoProject.ts +18 -0
- package/Models/DatabaseModels/Incident.ts +2 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentFeed.ts +30 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IoTFleet.ts +14 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +14 -0
- package/Models/DatabaseModels/LogSavedView.ts +33 -0
- package/Models/DatabaseModels/NetworkDevice.ts +14 -0
- package/Models/DatabaseModels/NetworkInterface.ts +18 -0
- package/Models/DatabaseModels/Project.ts +247 -11
- package/Models/DatabaseModels/ProxmoxCluster.ts +14 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
- package/Models/DatabaseModels/Service.ts +30 -0
- package/Models/DatabaseModels/StatusPage.ts +28 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +30 -0
- package/Models/DatabaseModels/User.ts +30 -0
- package/Server/API/AIAgentDataAPI.ts +75 -55
- package/Server/API/AIInvestigationAPI.ts +175 -17
- package/Server/API/DashboardAPI.ts +429 -22
- package/Server/API/GitHubAPI.ts +119 -283
- package/Server/API/StatusPageAPI.ts +38 -19
- package/Server/API/UserAPI.ts +263 -1
- package/Server/EnvironmentConfig.ts +23 -3
- package/Server/Infrastructure/ClickhouseConfig.ts +15 -1
- package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
- package/Server/Infrastructure/GlobalCache.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.ts +21 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +100 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +214 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.ts +69 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
- package/Server/Services/AIRunService.ts +78 -10
- package/Server/Services/AIService.ts +94 -22
- package/Server/Services/AlertFeedService.ts +5 -0
- package/Server/Services/AnalyticsDatabaseService.ts +101 -1
- package/Server/Services/CodeRepositoryService.ts +105 -2
- package/Server/Services/DatabaseService.ts +227 -3
- package/Server/Services/IncidentFeedService.ts +5 -0
- package/Server/Services/LlmLogService.ts +46 -2
- package/Server/Services/OpenTelemetryIngestService.ts +230 -26
- package/Server/Services/UserService.ts +184 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
- package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
- package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +223 -22
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +25 -24
- package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +25 -24
- package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
- package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
- package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
- package/Server/Utils/AI/SRE/README.md +1 -1
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
- package/Server/Utils/AI/Toolbox/CodeTools.ts +45 -4
- package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +13 -0
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +157 -4
- package/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.ts +130 -0
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +46 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/PasswordHash.ts +330 -0
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1184 -0
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
- package/Tests/App/Dashboard/OverviewCustomFields.test.tsx +333 -0
- package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
- package/Tests/App/Dashboard/UserCustomFields.test.tsx +392 -0
- package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
- package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
- package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
- package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
- package/Tests/Server/API/AIAgentDataRepositoryToken.test.ts +381 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +594 -0
- package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
- package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
- package/Tests/Server/API/DashboardPublicAttributeValuesAPI.test.ts +943 -0
- package/Tests/Server/API/DashboardPublicMetricsAggregateAPI.test.ts +1296 -0
- package/Tests/Server/API/DashboardPublicTemplatePayloads.test.ts +598 -0
- package/Tests/Server/API/GitHubAppInstallationBindingAPI.test.ts +539 -0
- package/Tests/Server/API/Helpers.ts +6 -1
- package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +852 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +128 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +215 -0
- package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
- package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +396 -20
- package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
- package/Tests/Server/Services/AddPerUserPasswordSaltMigration.test.ts +178 -0
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +582 -0
- package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +30 -1
- package/Tests/Server/Services/CodeRepositoryInstallationBinding.test.ts +305 -0
- package/Tests/Server/Services/CodeRepositoryResolutionBinding.test.ts +147 -0
- package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +880 -0
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
- package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
- package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
- package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +568 -0
- package/Tests/Server/Services/RestoreDroppedUniqueIndexesMigration.test.ts +386 -0
- package/Tests/Server/Services/RestoreServiceLowerNameIndexMigration.test.ts +240 -0
- package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
- package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +885 -0
- package/Tests/Server/Services/WidenHashedStringColumnsForScryptMigration.test.ts +220 -0
- package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
- package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
- package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
- package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
- package/Tests/Server/Utils/AI/CodeTools.test.ts +47 -1
- package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +10 -0
- package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
- package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
- package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +313 -20
- package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
- package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
- package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +120 -0
- package/Tests/Server/Utils/CodeRepository/GitHubInstallationBinding.test.ts +292 -0
- package/Tests/Server/Utils/GitHubInstallationOwnershipVerification.test.ts +340 -0
- package/Tests/Server/Utils/GitHubWebhookAndTreeCacheIsolation.test.ts +250 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
- package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
- package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
- package/Tests/Server/Utils/PasswordHash.test.ts +585 -0
- package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
- package/Tests/Types/Database/ColumnLength.test.ts +7 -1
- package/Tests/Types/HashedStringPerUserSalt.test.ts +476 -0
- package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +293 -0
- package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +249 -0
- package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +320 -0
- package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
- package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
- package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +271 -0
- package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
- package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
- package/Tests/Types/Permission.test.ts +137 -0
- package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
- package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +696 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +158 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
- package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
- package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
- package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
- package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
- package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
- package/Tests/UI/Utils/Project.test.ts +31 -0
- package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
- package/Tests/UI/Utils/UserProjectsModelAPI.test.ts +714 -0
- package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
- package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
- package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
- package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
- package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
- package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
- package/Tests/Utils/TeamMembersByProject.test.ts +655 -0
- package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
- package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
- package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
- package/Types/AI/CodeFixTaskContext.ts +63 -3
- package/Types/AI/CodeFixTaskType.ts +3 -3
- package/Types/Database/ColumnLength.ts +9 -1
- package/Types/Database/TableColumn.ts +11 -0
- package/Types/Database/UnsynchronizedIndex.ts +48 -0
- package/Types/HashedString.ts +140 -4
- package/Types/Monitor/CriteriaFilter.ts +4 -0
- package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
- package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
- package/Types/Monitor/MonitorMetricType.ts +8 -0
- package/Types/Monitor/MonitorStep.ts +10 -1
- package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
- package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
- package/Types/Permission.ts +23 -175
- package/Types/Probe/ProbeMonitorResponse.ts +6 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +85 -11
- package/UI/Components/ErrorBoundary.tsx +138 -11
- package/UI/Components/Feed/FeedItem.tsx +9 -2
- package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
- package/UI/Components/MoreMenu/MoreMenu.tsx +285 -97
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +8 -5
- package/UI/Components/Navbar/NavBar.tsx +12 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +19 -7
- package/UI/Utils/DownloadFile.ts +16 -8
- package/UI/Utils/ErrorSupportBundle.ts +805 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +19 -8
- package/UI/Utils/ModelAPI/UserProjectsModelAPI.ts +257 -0
- package/UI/Utils/Project.ts +4 -0
- package/UI/Utils/StatusPage.ts +8 -2
- package/UI/Utils/UseDashboardGridDnd.ts +917 -0
- package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
- package/Utils/Dashboard/GridLayout.ts +523 -0
- package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
- package/Utils/Monitor/MonitorMetricType.ts +44 -2
- package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
- package/Utils/StatusPage/GroupTree.ts +157 -66
- package/Utils/StatusPage/ResourceUptime.ts +37 -2
- package/Utils/TeamMembersByProject.ts +237 -0
- package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
- package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +39 -1
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +14 -6
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
- package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +16 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +16 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +2 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js +16 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
- package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js +16 -1
- package/build/dist/Models/DatabaseModels/NetworkInterface.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +257 -13
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +16 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
- package/build/dist/Models/DatabaseModels/Service.js +28 -1
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +32 -0
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +32 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +49 -48
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +111 -11
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +312 -15
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +94 -167
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +29 -11
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +187 -2
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +21 -3
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js +12 -1
- package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
- package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +29 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786018109307-AddPerUserPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js +59 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786023262402-WidenHashedStringColumnsForScrypt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +93 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js +101 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js +66 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786300000000-QuarantineUnboundGitHubInstallations.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +58 -12
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +74 -21
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertFeedService.js +3 -0
- package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +86 -2
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/CodeRepositoryService.js +90 -2
- package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +180 -3
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFeedService.js +3 -0
- package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
- package/build/dist/Server/Services/LlmLogService.js +22 -1
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +155 -25
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +165 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +156 -28
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +21 -19
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +21 -19
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
- package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js +31 -1
- package/build/dist/Server/Utils/AI/Toolbox/CodeTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +13 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +126 -4
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js +136 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubInstallationBinding.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/PasswordHash.js +258 -0
- package/build/dist/Server/Utils/PasswordHash.js.map +1 -0
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
- package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
- package/build/dist/Types/Database/ColumnLength.js +9 -1
- package/build/dist/Types/Database/ColumnLength.js.map +1 -1
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Database/UnsynchronizedIndex.js +46 -0
- package/build/dist/Types/Database/UnsynchronizedIndex.js.map +1 -0
- package/build/dist/Types/HashedString.js +96 -5
- package/build/dist/Types/HashedString.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
- package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +6 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
- package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
- package/build/dist/Types/Permission.js +23 -155
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +51 -10
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +67 -8
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +193 -65
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +3 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +19 -7
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Utils/DownloadFile.js +15 -8
- package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
- package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
- package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -8
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js +156 -0
- package/build/dist/UI/Utils/ModelAPI/UserProjectsModelAPI.js.map +1 -0
- package/build/dist/UI/Utils/Project.js +3 -0
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/UI/Utils/StatusPage.js +4 -4
- package/build/dist/UI/Utils/StatusPage.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
- package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
- package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
- package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
- package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
- package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
- package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
- package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/TeamMembersByProject.js +145 -0
- package/build/dist/Utils/TeamMembersByProject.js.map +1 -0
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
- package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
- package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
- package/package.json +1 -1
|
@@ -7,8 +7,7 @@ import AIRunService from "../Services/AIRunService";
|
|
|
7
7
|
import AIRunEventService from "../Services/AIRunEventService";
|
|
8
8
|
import IncidentService from "../Services/IncidentService";
|
|
9
9
|
import AlertService from "../Services/AlertService";
|
|
10
|
-
import
|
|
11
|
-
import AlertFeedService from "../Services/AlertFeedService";
|
|
10
|
+
import PostedRootCause from "../Utils/AI/SRE/PostedRootCause";
|
|
12
11
|
import Express, {
|
|
13
12
|
ExpressRequest,
|
|
14
13
|
ExpressResponse,
|
|
@@ -27,12 +26,6 @@ import AIAgentTaskPullRequest from "../../Models/DatabaseModels/AIAgentTaskPullR
|
|
|
27
26
|
import AIRun from "../../Models/DatabaseModels/AIRun";
|
|
28
27
|
import Incident from "../../Models/DatabaseModels/Incident";
|
|
29
28
|
import Alert from "../../Models/DatabaseModels/Alert";
|
|
30
|
-
import IncidentFeed, {
|
|
31
|
-
IncidentFeedEventType,
|
|
32
|
-
} from "../../Models/DatabaseModels/IncidentFeed";
|
|
33
|
-
import AlertFeed, {
|
|
34
|
-
AlertFeedEventType,
|
|
35
|
-
} from "../../Models/DatabaseModels/AlertFeed";
|
|
36
29
|
import AIRunEventType from "../../Types/AI/AIRunEventType";
|
|
37
30
|
import AIRunType from "../../Types/AI/AIRunType";
|
|
38
31
|
import FixVerificationStatus from "../../Types/AI/FixVerificationStatus";
|
|
@@ -41,7 +34,9 @@ import CodeFixTaskType, {
|
|
|
41
34
|
CodeFixTaskTypeHelper,
|
|
42
35
|
} from "../../Types/AI/CodeFixTaskType";
|
|
43
36
|
import CodeFixTaskContext, {
|
|
37
|
+
getInvestigationCodeFixTaskSnapshot,
|
|
44
38
|
ImplicatedSpan,
|
|
39
|
+
InvestigationCodeFixTaskSnapshot,
|
|
45
40
|
PerformanceCodeLocation,
|
|
46
41
|
PerformanceFinding,
|
|
47
42
|
} from "../../Types/AI/CodeFixTaskContext";
|
|
@@ -62,13 +57,13 @@ import {
|
|
|
62
57
|
LLMToolCall,
|
|
63
58
|
LLMToolDefinition,
|
|
64
59
|
} from "../Utils/LLM/LLMService";
|
|
65
|
-
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
66
60
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
67
61
|
import { JSONObject } from "../../Types/JSON";
|
|
68
62
|
import ObjectID from "../../Types/ObjectID";
|
|
69
63
|
import GitHubUtil, {
|
|
70
64
|
GitHubInstallationToken,
|
|
71
65
|
} from "../Utils/CodeRepository/GitHub/GitHub";
|
|
66
|
+
import GitHubInstallationBinding from "../Utils/CodeRepository/GitHub/GitHubInstallationBinding";
|
|
72
67
|
import CodeRepositoryType from "../../Types/CodeRepository/CodeRepositoryType";
|
|
73
68
|
import URL from "../../Types/API/URL";
|
|
74
69
|
import PullRequestState from "../../Types/CodeRepository/PullRequestState";
|
|
@@ -495,14 +490,12 @@ export default class AIAgentDataAPI {
|
|
|
495
490
|
* The route name predates the newer recipes and is kept for agent
|
|
496
491
|
* compatibility. Two context kinds are served:
|
|
497
492
|
*
|
|
498
|
-
* - Incident/alert-subject recipes
|
|
499
|
-
*
|
|
500
|
-
*
|
|
501
|
-
*
|
|
502
|
-
*
|
|
503
|
-
*
|
|
504
|
-
* outcomes (quiet mode only mutes the workspace ping), so the feed
|
|
505
|
-
* item IS the investigation run's persisted output.
|
|
493
|
+
* - Incident/alert-subject recipes: subject metadata + the repository
|
|
494
|
+
* resolved without a stack trace. ImproveInstrumentation reads the
|
|
495
|
+
* subject's latest RootCause feed item. FixFromIncident instead reads
|
|
496
|
+
* the immutable investigation snapshot captured in AIRun.taskContext;
|
|
497
|
+
* a later re-investigation must never replace the Recommended analysis
|
|
498
|
+
* that authorized a code-fix task.
|
|
506
499
|
*
|
|
507
500
|
* - Trace-evidence recipes (FixPerformance): the deterministic
|
|
508
501
|
* span-tree findings stored on AIRun.taskContext at trigger time
|
|
@@ -580,6 +573,10 @@ export default class AIAgentDataAPI {
|
|
|
580
573
|
CodeFixTaskTypeHelper.fromDatabaseValue(run.codeFixTaskType);
|
|
581
574
|
const contextKind: CodeFixContextKind =
|
|
582
575
|
CodeFixTaskTypeHelper.getContextKind(taskType);
|
|
576
|
+
const investigationSnapshot: InvestigationCodeFixTaskSnapshot | null =
|
|
577
|
+
taskType === CodeFixTaskType.FixFromIncident
|
|
578
|
+
? getInvestigationCodeFixTaskSnapshot(run.taskContext)
|
|
579
|
+
: null;
|
|
583
580
|
|
|
584
581
|
if (
|
|
585
582
|
run.runType !== AIRunType.CodeFix ||
|
|
@@ -594,6 +591,25 @@ export default class AIAgentDataAPI {
|
|
|
594
591
|
);
|
|
595
592
|
}
|
|
596
593
|
|
|
594
|
+
/*
|
|
595
|
+
* FixFromIncident authorization covered one exact Recommended
|
|
596
|
+
* investigation. Never substitute the subject's current RootCause:
|
|
597
|
+
* a re-investigation may have posted a different, non-code analysis
|
|
598
|
+
* while this task waited in the queue.
|
|
599
|
+
*/
|
|
600
|
+
if (
|
|
601
|
+
taskType === CodeFixTaskType.FixFromIncident &&
|
|
602
|
+
!investigationSnapshot
|
|
603
|
+
) {
|
|
604
|
+
return Response.sendErrorResponse(
|
|
605
|
+
req,
|
|
606
|
+
res,
|
|
607
|
+
new BadDataException(
|
|
608
|
+
"This fix-from-incident task has no complete pinned investigation analysis snapshot — it cannot be executed safely.",
|
|
609
|
+
),
|
|
610
|
+
);
|
|
611
|
+
}
|
|
612
|
+
|
|
597
613
|
/*
|
|
598
614
|
* Service-scoped instrumentation recipes (ImproveLogging /
|
|
599
615
|
* ImproveTracing): the context is just the service — resolve the
|
|
@@ -863,7 +879,8 @@ export default class AIAgentDataAPI {
|
|
|
863
879
|
* fine when the subject has no monitor.
|
|
864
880
|
*/
|
|
865
881
|
let serviceName: string | null = null;
|
|
866
|
-
let analysisMarkdown: string | null =
|
|
882
|
+
let analysisMarkdown: string | null =
|
|
883
|
+
investigationSnapshot?.investigationAnalysisMarkdown || null;
|
|
867
884
|
|
|
868
885
|
if (run.triggeredByIncidentId) {
|
|
869
886
|
const incident: Incident | null = await IncidentService.findOneById(
|
|
@@ -899,24 +916,11 @@ export default class AIAgentDataAPI {
|
|
|
899
916
|
})
|
|
900
917
|
.filter(Boolean)[0] || null;
|
|
901
918
|
|
|
902
|
-
|
|
903
|
-
await
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
},
|
|
908
|
-
select: {
|
|
909
|
-
feedInfoInMarkdown: true,
|
|
910
|
-
},
|
|
911
|
-
sort: {
|
|
912
|
-
createdAt: SortOrder.Descending,
|
|
913
|
-
},
|
|
914
|
-
props: {
|
|
915
|
-
isRoot: true,
|
|
916
|
-
},
|
|
917
|
-
});
|
|
918
|
-
|
|
919
|
-
analysisMarkdown = feedItem?.feedInfoInMarkdown || null;
|
|
919
|
+
if (taskType !== CodeFixTaskType.FixFromIncident) {
|
|
920
|
+
analysisMarkdown = await PostedRootCause.getForIncident(
|
|
921
|
+
run.triggeredByIncidentId,
|
|
922
|
+
);
|
|
923
|
+
}
|
|
920
924
|
} else {
|
|
921
925
|
const alert: Alert | null = await AlertService.findOneById({
|
|
922
926
|
id: run.triggeredByAlertId!,
|
|
@@ -944,25 +948,11 @@ export default class AIAgentDataAPI {
|
|
|
944
948
|
subjectTitle = alert.title || "Untitled alert";
|
|
945
949
|
serviceName = alert.monitor?.name || null;
|
|
946
950
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
},
|
|
953
|
-
select: {
|
|
954
|
-
feedInfoInMarkdown: true,
|
|
955
|
-
},
|
|
956
|
-
sort: {
|
|
957
|
-
createdAt: SortOrder.Descending,
|
|
958
|
-
},
|
|
959
|
-
props: {
|
|
960
|
-
isRoot: true,
|
|
961
|
-
},
|
|
962
|
-
},
|
|
963
|
-
);
|
|
964
|
-
|
|
965
|
-
analysisMarkdown = feedItem?.feedInfoInMarkdown || null;
|
|
951
|
+
if (taskType !== CodeFixTaskType.FixFromIncident) {
|
|
952
|
+
analysisMarkdown = await PostedRootCause.getForAlert(
|
|
953
|
+
run.triggeredByAlertId!,
|
|
954
|
+
);
|
|
955
|
+
}
|
|
966
956
|
}
|
|
967
957
|
|
|
968
958
|
if (!analysisMarkdown) {
|
|
@@ -1166,6 +1156,36 @@ export default class AIAgentDataAPI {
|
|
|
1166
1156
|
);
|
|
1167
1157
|
}
|
|
1168
1158
|
|
|
1159
|
+
/*
|
|
1160
|
+
* The project check above proves the ROW is in the agent's project.
|
|
1161
|
+
* It does not prove the INSTALLATION is — and those are different
|
|
1162
|
+
* questions, because the row's installation ID is just a number
|
|
1163
|
+
* stored on a record. Someone who could get an arbitrary
|
|
1164
|
+
* installation ID onto a row in a project they own would otherwise
|
|
1165
|
+
* pass every check to this point and be handed a live `ghs_` token
|
|
1166
|
+
* for another tenant's repositories. So re-derive the binding from
|
|
1167
|
+
* the project itself, right before minting.
|
|
1168
|
+
*/
|
|
1169
|
+
if (
|
|
1170
|
+
!codeRepository.projectId ||
|
|
1171
|
+
!(await GitHubInstallationBinding.isInstallationBoundToProject({
|
|
1172
|
+
projectId: codeRepository.projectId,
|
|
1173
|
+
installationId: codeRepository.gitHubAppInstallationId,
|
|
1174
|
+
}))
|
|
1175
|
+
) {
|
|
1176
|
+
logger.error(
|
|
1177
|
+
`Refusing to mint a GitHub token for code repository ${codeRepositoryId.toString()}: installation ${codeRepository.gitHubAppInstallationId} is not bound to project ${codeRepository.projectId?.toString()}.`,
|
|
1178
|
+
);
|
|
1179
|
+
|
|
1180
|
+
return Response.sendErrorResponse(
|
|
1181
|
+
req,
|
|
1182
|
+
res,
|
|
1183
|
+
new BadDataException(
|
|
1184
|
+
"This repository's GitHub App installation is not connected to its project. Please reconnect the GitHub App from Project Settings.",
|
|
1185
|
+
),
|
|
1186
|
+
);
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1169
1189
|
/*
|
|
1170
1190
|
* G11 guardrail: per-repo open-PR cap, enforced HERE because the
|
|
1171
1191
|
* token is the agent's only way to clone and push — a repo at its
|
|
@@ -16,6 +16,8 @@ import Query from "../../Types/BaseDatabase/Query";
|
|
|
16
16
|
import { JSONArray, JSONObject } from "../../Types/JSON";
|
|
17
17
|
import AIRunType from "../../Types/AI/AIRunType";
|
|
18
18
|
import AIRunHumanVerdict from "../../Types/AI/AIRunHumanVerdict";
|
|
19
|
+
import AIRunStatus from "../../Types/AI/AIRunStatus";
|
|
20
|
+
import AIRunEventType from "../../Types/AI/AIRunEventType";
|
|
19
21
|
import AIRun from "../../Models/DatabaseModels/AIRun";
|
|
20
22
|
import AIRunEvent from "../../Models/DatabaseModels/AIRunEvent";
|
|
21
23
|
import Incident from "../../Models/DatabaseModels/Incident";
|
|
@@ -32,6 +34,7 @@ import SpanService from "../Services/SpanService";
|
|
|
32
34
|
import FixFromIncidentTaskTrigger from "../Utils/AI/SRE/FixFromIncidentTaskTrigger";
|
|
33
35
|
import FixPerformanceTaskTrigger from "../Utils/AI/SRE/FixPerformanceTaskTrigger";
|
|
34
36
|
import TelemetryImprovementTaskTrigger from "../Utils/AI/SRE/TelemetryImprovementTaskTrigger";
|
|
37
|
+
import PostedRootCause from "../Utils/AI/SRE/PostedRootCause";
|
|
35
38
|
import CodeFixTaskType from "../../Types/AI/CodeFixTaskType";
|
|
36
39
|
import { AnalyzableSpan } from "../Utils/AI/PerfEvidence/SpanTreeAnalyzer";
|
|
37
40
|
|
|
@@ -47,6 +50,100 @@ const MAX_ANALYZED_TRACE_SPANS: number = 500;
|
|
|
47
50
|
|
|
48
51
|
const MAX_EVENTS: number = 500;
|
|
49
52
|
|
|
53
|
+
/*
|
|
54
|
+
* `aiRunId` is the established dashboard API field. The investigation panel
|
|
55
|
+
* introduced the more explicit `investigationRunId` name while this feature
|
|
56
|
+
* was in flight, so accept either spelling without ever allowing two
|
|
57
|
+
* different ids in one request. Both names identify the exact displayed run.
|
|
58
|
+
*/
|
|
59
|
+
function getDisplayedInvestigationRunId(req: ExpressRequest): ObjectID {
|
|
60
|
+
const aiRunId: string =
|
|
61
|
+
typeof req.body["aiRunId"] === "string"
|
|
62
|
+
? (req.body["aiRunId"] as string).trim()
|
|
63
|
+
: "";
|
|
64
|
+
const investigationRunId: string =
|
|
65
|
+
typeof req.body["investigationRunId"] === "string"
|
|
66
|
+
? (req.body["investigationRunId"] as string).trim()
|
|
67
|
+
: "";
|
|
68
|
+
|
|
69
|
+
if (!aiRunId && !investigationRunId) {
|
|
70
|
+
throw new BadDataException("investigationRunId (or aiRunId) is required.");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (aiRunId && investigationRunId && aiRunId !== investigationRunId) {
|
|
74
|
+
throw new BadDataException(
|
|
75
|
+
"aiRunId and investigationRunId must identify the same displayed investigation.",
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const selectedRunId: string = investigationRunId || aiRunId;
|
|
80
|
+
ObjectID.validateUUID(selectedRunId);
|
|
81
|
+
return new ObjectID(selectedRunId);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* The run wins its Running -> Completed transition before it performs the
|
|
86
|
+
* confidence check and posts the RootCause feed item. A final RunCompleted or
|
|
87
|
+
* RunFailed event is emitted when that finalization settles; failures from
|
|
88
|
+
* retried attempts precede a later RunStarted. This upper bound is a crash
|
|
89
|
+
* failsafe and deliberately leaves ample margin above the bounded confidence
|
|
90
|
+
* classification deadline plus feed publication.
|
|
91
|
+
*/
|
|
92
|
+
export const ANALYSIS_FINALIZATION_TIMEOUT_MS: number = 10 * 60 * 1000;
|
|
93
|
+
// Database/application clocks can differ briefly around the Completed write.
|
|
94
|
+
export const ANALYSIS_COMPLETION_CLOCK_SKEW_MS: number = 60 * 1000;
|
|
95
|
+
|
|
96
|
+
export function isAnalysisPendingForRun(data: {
|
|
97
|
+
run: AIRun;
|
|
98
|
+
events: Array<AIRunEvent>;
|
|
99
|
+
analysisMarkdown: string | null;
|
|
100
|
+
currentDate?: Date | undefined;
|
|
101
|
+
}): boolean {
|
|
102
|
+
if (
|
|
103
|
+
data.run.status !== AIRunStatus.Completed ||
|
|
104
|
+
data.analysisMarkdown ||
|
|
105
|
+
!data.run.completedAt
|
|
106
|
+
) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/*
|
|
111
|
+
* A retried run retains RunFailed from earlier attempts. Only a settlement
|
|
112
|
+
* event emitted after the latest RunStarted belongs to the attempt that won
|
|
113
|
+
* the Completed transition; an older failure must not stop report polling.
|
|
114
|
+
* sendLatestInvestigation supplies events in sequence order.
|
|
115
|
+
*/
|
|
116
|
+
let latestRunStartedIndex: number = -1;
|
|
117
|
+
data.events.forEach((event: AIRunEvent, index: number): void => {
|
|
118
|
+
if (event.eventType === AIRunEventType.RunStarted) {
|
|
119
|
+
latestRunStartedIndex = index;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const hasFinalizationEvent: boolean = data.events.some(
|
|
124
|
+
(event: AIRunEvent, index: number): boolean => {
|
|
125
|
+
return (
|
|
126
|
+
index > latestRunStartedIndex &&
|
|
127
|
+
(event.eventType === AIRunEventType.RunCompleted ||
|
|
128
|
+
event.eventType === AIRunEventType.RunFailed)
|
|
129
|
+
);
|
|
130
|
+
},
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
if (hasFinalizationEvent) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const currentDate: Date = data.currentDate || new Date();
|
|
138
|
+
const millisecondsSinceCompletion: number =
|
|
139
|
+
currentDate.getTime() - data.run.completedAt.getTime();
|
|
140
|
+
|
|
141
|
+
return (
|
|
142
|
+
millisecondsSinceCompletion >= -ANALYSIS_COMPLETION_CLOCK_SKEW_MS &&
|
|
143
|
+
millisecondsSinceCompletion < ANALYSIS_FINALIZATION_TIMEOUT_MS
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
50
147
|
/*
|
|
51
148
|
* Returns the latest AI investigation (the AIRun + its ordered
|
|
52
149
|
* AIRunEvents) for an incident or alert, so the dashboard can render a live
|
|
@@ -80,6 +177,10 @@ async function sendLatestInvestigation(
|
|
|
80
177
|
req: ExpressRequest,
|
|
81
178
|
res: ExpressResponse,
|
|
82
179
|
runQuery: Query<AIRun>,
|
|
180
|
+
subject: {
|
|
181
|
+
incidentId?: ObjectID | undefined;
|
|
182
|
+
alertId?: ObjectID | undefined;
|
|
183
|
+
},
|
|
83
184
|
): Promise<void> {
|
|
84
185
|
const runs: Array<AIRun> = await AIRunService.findBy({
|
|
85
186
|
query: runQuery,
|
|
@@ -93,6 +194,7 @@ async function sendLatestInvestigation(
|
|
|
93
194
|
toolCallCount: true,
|
|
94
195
|
totalTokens: true,
|
|
95
196
|
createdAt: true,
|
|
197
|
+
codeFixRecommendation: true,
|
|
96
198
|
// Measurement layer: the panel renders verdict/grade state from these.
|
|
97
199
|
humanVerdict: true,
|
|
98
200
|
humanVerdictAt: true,
|
|
@@ -111,6 +213,8 @@ async function sendLatestInvestigation(
|
|
|
111
213
|
Response.sendJsonObjectResponse(req, res, {
|
|
112
214
|
run: null,
|
|
113
215
|
events: [],
|
|
216
|
+
analysisMarkdown: null,
|
|
217
|
+
isAnalysisPending: false,
|
|
114
218
|
});
|
|
115
219
|
return;
|
|
116
220
|
}
|
|
@@ -138,9 +242,32 @@ async function sendLatestInvestigation(
|
|
|
138
242
|
|
|
139
243
|
const eventsJson: JSONArray = BaseModel.toJSONArray(events, AIRunEvent);
|
|
140
244
|
|
|
245
|
+
/*
|
|
246
|
+
* RootCause is the canonical persisted investigation result. The explicit
|
|
247
|
+
* aiRunId association is immune to application/database clock skew and to
|
|
248
|
+
* overlapping investigations posting out of order.
|
|
249
|
+
*/
|
|
250
|
+
let analysisMarkdown: string | null = null;
|
|
251
|
+
|
|
252
|
+
if (run.status === AIRunStatus.Completed && run.completedAt) {
|
|
253
|
+
analysisMarkdown = await PostedRootCause.getForInvestigation({
|
|
254
|
+
...subject,
|
|
255
|
+
aiRunId: run.id!,
|
|
256
|
+
runCompletedAt: run.completedAt,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const isAnalysisPending: boolean = isAnalysisPendingForRun({
|
|
261
|
+
run,
|
|
262
|
+
events,
|
|
263
|
+
analysisMarkdown,
|
|
264
|
+
});
|
|
265
|
+
|
|
141
266
|
Response.sendJsonObjectResponse(req, res, {
|
|
142
267
|
run: runJson || null,
|
|
143
268
|
events: eventsJson,
|
|
269
|
+
analysisMarkdown,
|
|
270
|
+
isAnalysisPending,
|
|
144
271
|
});
|
|
145
272
|
}
|
|
146
273
|
|
|
@@ -178,10 +305,17 @@ router.post(
|
|
|
178
305
|
);
|
|
179
306
|
}
|
|
180
307
|
|
|
181
|
-
await sendLatestInvestigation(
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
308
|
+
await sendLatestInvestigation(
|
|
309
|
+
req,
|
|
310
|
+
res,
|
|
311
|
+
{
|
|
312
|
+
triggeredByIncidentId: incidentId,
|
|
313
|
+
runType: AIRunType.Investigation,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
incidentId,
|
|
317
|
+
},
|
|
318
|
+
);
|
|
185
319
|
return;
|
|
186
320
|
} catch (err) {
|
|
187
321
|
next(err);
|
|
@@ -224,10 +358,17 @@ router.post(
|
|
|
224
358
|
);
|
|
225
359
|
}
|
|
226
360
|
|
|
227
|
-
await sendLatestInvestigation(
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
361
|
+
await sendLatestInvestigation(
|
|
362
|
+
req,
|
|
363
|
+
res,
|
|
364
|
+
{
|
|
365
|
+
triggeredByAlertId: alertId,
|
|
366
|
+
runType: AIRunType.Investigation,
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
alertId,
|
|
370
|
+
},
|
|
371
|
+
);
|
|
231
372
|
return;
|
|
232
373
|
} catch (err) {
|
|
233
374
|
next(err);
|
|
@@ -238,14 +379,16 @@ router.post(
|
|
|
238
379
|
|
|
239
380
|
/*
|
|
240
381
|
* Human verdict capture (Phase 2 measurement layer): one-click Confirm /
|
|
241
|
-
* Reject on the investigation panel. Applies to the
|
|
242
|
-
* investigation run
|
|
382
|
+
* Reject on the investigation panel. Applies to the exact COMPLETED
|
|
383
|
+
* investigation run displayed to the user; overwriting is allowed (a user may
|
|
243
384
|
* change their mind), and the request is rejected when no completed
|
|
244
385
|
* investigation exists. The subject is access-checked under the USER's
|
|
245
386
|
* permissions first (same idiom as the read routes above); the run itself is
|
|
246
387
|
* written as root because investigation runs are system-authored.
|
|
247
388
|
* Body: { subjectType: "incident" | "alert", subjectId,
|
|
248
|
-
* verdict: "Confirmed" |
|
|
389
|
+
* aiRunId (or its investigationRunId alias), verdict: "Confirmed" |
|
|
390
|
+
* "Rejected" }. The run id binds the mutation to the analysis currently
|
|
391
|
+
* displayed. Response: { runId, verdict }.
|
|
249
392
|
*/
|
|
250
393
|
router.post(
|
|
251
394
|
"/ai-investigation/verdict",
|
|
@@ -278,6 +421,8 @@ router.post(
|
|
|
278
421
|
|
|
279
422
|
const subjectId: ObjectID = new ObjectID(subjectIdString);
|
|
280
423
|
|
|
424
|
+
const investigationRunId: ObjectID = getDisplayedInvestigationRunId(req);
|
|
425
|
+
|
|
281
426
|
const verdict: string | undefined = req.body["verdict"] as
|
|
282
427
|
| string
|
|
283
428
|
| undefined;
|
|
@@ -292,34 +437,42 @@ router.post(
|
|
|
292
437
|
}
|
|
293
438
|
|
|
294
439
|
// Access check under the USER's permissions (null when not allowed).
|
|
440
|
+
let projectId: ObjectID | undefined = undefined;
|
|
441
|
+
|
|
295
442
|
if (subjectType === "incident") {
|
|
296
443
|
const incident: Incident | null = await IncidentService.findOneById({
|
|
297
444
|
id: subjectId,
|
|
298
|
-
select: { _id: true },
|
|
445
|
+
select: { _id: true, projectId: true },
|
|
299
446
|
props,
|
|
300
447
|
});
|
|
301
448
|
|
|
302
|
-
if (!incident) {
|
|
449
|
+
if (!incident || !incident.projectId) {
|
|
303
450
|
throw new BadDataException(
|
|
304
451
|
"Incident not found (or you do not have access to it).",
|
|
305
452
|
);
|
|
306
453
|
}
|
|
454
|
+
|
|
455
|
+
projectId = incident.projectId;
|
|
307
456
|
} else {
|
|
308
457
|
const alert: Alert | null = await AlertService.findOneById({
|
|
309
458
|
id: subjectId,
|
|
310
|
-
select: { _id: true },
|
|
459
|
+
select: { _id: true, projectId: true },
|
|
311
460
|
props,
|
|
312
461
|
});
|
|
313
462
|
|
|
314
|
-
if (!alert) {
|
|
463
|
+
if (!alert || !alert.projectId) {
|
|
315
464
|
throw new BadDataException(
|
|
316
465
|
"Alert not found (or you do not have access to it).",
|
|
317
466
|
);
|
|
318
467
|
}
|
|
468
|
+
|
|
469
|
+
projectId = alert.projectId;
|
|
319
470
|
}
|
|
320
471
|
|
|
321
472
|
const result: { runId: ObjectID; verdict: AIRunHumanVerdict } =
|
|
322
|
-
await AIRunService.
|
|
473
|
+
await AIRunService.applyHumanVerdictToInvestigation({
|
|
474
|
+
aiRunId: investigationRunId,
|
|
475
|
+
projectId,
|
|
323
476
|
...(subjectType === "incident"
|
|
324
477
|
? { incidentId: subjectId }
|
|
325
478
|
: { alertId: subjectId }),
|
|
@@ -346,7 +499,9 @@ router.post(
|
|
|
346
499
|
* access-checked under the USER's permissions first (same idiom as the read
|
|
347
500
|
* routes above); the trigger's gates (completed investigation, GitHub-App
|
|
348
501
|
* repository, per-subject dedupe) fail early with a clear message.
|
|
349
|
-
* Body: { subjectType: "incident" | "alert", subjectId
|
|
502
|
+
* Body: { subjectType: "incident" | "alert", subjectId,
|
|
503
|
+
* aiRunId (or its investigationRunId alias) }. The run id rejects stale
|
|
504
|
+
* clicks instead of silently switching to a newer analysis. Response:
|
|
350
505
|
* { aiRunId } — the Queued CodeFix run the agent worker will claim.
|
|
351
506
|
*/
|
|
352
507
|
router.post(
|
|
@@ -380,6 +535,8 @@ router.post(
|
|
|
380
535
|
|
|
381
536
|
const subjectId: ObjectID = new ObjectID(subjectIdString);
|
|
382
537
|
|
|
538
|
+
const investigationRunId: ObjectID = getDisplayedInvestigationRunId(req);
|
|
539
|
+
|
|
383
540
|
// Access check under the USER's permissions (null when not allowed).
|
|
384
541
|
let projectId: ObjectID | undefined = undefined;
|
|
385
542
|
|
|
@@ -419,6 +576,7 @@ router.post(
|
|
|
419
576
|
...(subjectType === "incident"
|
|
420
577
|
? { incidentId: subjectId }
|
|
421
578
|
: { alertId: subjectId }),
|
|
579
|
+
investigationRunId,
|
|
422
580
|
userId: props.userId!,
|
|
423
581
|
});
|
|
424
582
|
|