@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
|
@@ -155,19 +155,32 @@ export const AI_REMEDIATION_EXECUTION_FEATURE: string =
|
|
|
155
155
|
* (SQL `= ANY`, and an `.includes()` gate on the write path that no writer can
|
|
156
156
|
* trip because no writer emits these strings any more).
|
|
157
157
|
*/
|
|
158
|
+
const LEGACY_SENTINEL_INCIDENT_INVESTIGATION_FEATURE: string =
|
|
159
|
+
"Sentinel Incident Investigation";
|
|
160
|
+
const LEGACY_SENTINEL_ALERT_INVESTIGATION_FEATURE: string =
|
|
161
|
+
"Sentinel Alert Investigation";
|
|
162
|
+
const LEGACY_SENTINEL_INVESTIGATION_GRADING_FEATURE: string =
|
|
163
|
+
"Sentinel Investigation Grading";
|
|
164
|
+
const LEGACY_SENTINEL_CONFIDENCE_CLASSIFICATION_FEATURE: string =
|
|
165
|
+
"Sentinel Confidence Classification";
|
|
166
|
+
const LEGACY_SENTINEL_CODE_FIX_FEATURE: string = "Sentinel Code Fix";
|
|
167
|
+
const LEGACY_SENTINEL_INSIGHT_TRIAGE_FEATURE: string =
|
|
168
|
+
"Sentinel Insight Triage";
|
|
169
|
+
|
|
158
170
|
export const LEGACY_AUTONOMOUS_AI_FEATURES: Array<string> = [
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
171
|
+
LEGACY_SENTINEL_INCIDENT_INVESTIGATION_FEATURE,
|
|
172
|
+
LEGACY_SENTINEL_ALERT_INVESTIGATION_FEATURE,
|
|
173
|
+
LEGACY_SENTINEL_INVESTIGATION_GRADING_FEATURE,
|
|
174
|
+
LEGACY_SENTINEL_CONFIDENCE_CLASSIFICATION_FEATURE,
|
|
175
|
+
LEGACY_SENTINEL_CODE_FIX_FEATURE,
|
|
176
|
+
LEGACY_SENTINEL_INSIGHT_TRIAGE_FEATURE,
|
|
165
177
|
];
|
|
166
178
|
|
|
167
179
|
/*
|
|
168
|
-
* Features that run WITHOUT a human in the loop.
|
|
169
|
-
*
|
|
170
|
-
*
|
|
180
|
+
* Features that run WITHOUT a human in the loop. Incident-linked and
|
|
181
|
+
* alert-linked calls use their respective daily token limits; subjectless
|
|
182
|
+
* calls use Project.aiDailyAutonomousTokenLimit. Interactive chat and
|
|
183
|
+
* explicitly user-triggered AI are never budget-blocked.
|
|
171
184
|
* Auto-postmortem is deliberately excluded for now: it is one call per
|
|
172
185
|
* resolved incident, not storm-shaped; include it when it moves to the queue.
|
|
173
186
|
*
|
|
@@ -188,7 +201,7 @@ export const AUTONOMOUS_AI_FEATURES: Array<string> = [
|
|
|
188
201
|
* user-triggered, but the tool loop then runs unattended for up to ~40
|
|
189
202
|
* calls — storm-shaped enough that the daily budget must cover it. The
|
|
190
203
|
* per-run loop budgets (CodeFixAgentCompletion) cap a single run; this
|
|
191
|
-
* daily
|
|
204
|
+
* daily subject lane caps all of them together.
|
|
192
205
|
*/
|
|
193
206
|
AI_CODE_FIX_FEATURE,
|
|
194
207
|
/*
|
|
@@ -215,7 +228,7 @@ export const AUTONOMOUS_AI_FEATURES: Array<string> = [
|
|
|
215
228
|
/*
|
|
216
229
|
* Auto-remediation command composition/execution
|
|
217
230
|
* (RemediationExecutionRunner). Same trigger shape as planning, with a
|
|
218
|
-
* larger per-run tool budget — the daily
|
|
231
|
+
* larger per-run tool budget — the daily subject lane must cover it.
|
|
219
232
|
*/
|
|
220
233
|
AI_REMEDIATION_EXECUTION_FEATURE,
|
|
221
234
|
/*
|
|
@@ -226,6 +239,23 @@ export const AUTONOMOUS_AI_FEATURES: Array<string> = [
|
|
|
226
239
|
...LEGACY_AUTONOMOUS_AI_FEATURES,
|
|
227
240
|
];
|
|
228
241
|
|
|
242
|
+
/*
|
|
243
|
+
* Before subject-lane accounting shipped, the main investigation calls did
|
|
244
|
+
* not persist incidentId/alertId (or aiRunId). Their feature label is the only
|
|
245
|
+
* durable lane signal left on those rows. Keep these lists so a deployment
|
|
246
|
+
* does not reset today's incident/alert spend or charge it to background work.
|
|
247
|
+
*/
|
|
248
|
+
const LEGACY_INCIDENT_LANE_FEATURES: Array<string> = [
|
|
249
|
+
AI_INCIDENT_INVESTIGATION_FEATURE,
|
|
250
|
+
AI_INVESTIGATION_GRADING_FEATURE,
|
|
251
|
+
LEGACY_SENTINEL_INCIDENT_INVESTIGATION_FEATURE,
|
|
252
|
+
LEGACY_SENTINEL_INVESTIGATION_GRADING_FEATURE,
|
|
253
|
+
];
|
|
254
|
+
const LEGACY_ALERT_LANE_FEATURES: Array<string> = [
|
|
255
|
+
AI_ALERT_INVESTIGATION_FEATURE,
|
|
256
|
+
LEGACY_SENTINEL_ALERT_INVESTIGATION_FEATURE,
|
|
257
|
+
];
|
|
258
|
+
|
|
229
259
|
export interface AutonomousBudgetStatus {
|
|
230
260
|
exhausted: boolean;
|
|
231
261
|
// null when the project has no limit configured.
|
|
@@ -237,10 +267,10 @@ export interface AILogRequest {
|
|
|
237
267
|
projectId: ObjectID;
|
|
238
268
|
userId?: ObjectID | undefined;
|
|
239
269
|
feature: string; // e.g., "IncidentPostmortem", "IncidentNote"
|
|
240
|
-
incidentId?: ObjectID;
|
|
241
|
-
alertId?: ObjectID;
|
|
242
|
-
scheduledMaintenanceId?: ObjectID;
|
|
243
|
-
aiRunId?: ObjectID;
|
|
270
|
+
incidentId?: ObjectID | undefined;
|
|
271
|
+
alertId?: ObjectID | undefined;
|
|
272
|
+
scheduledMaintenanceId?: ObjectID | undefined;
|
|
273
|
+
aiRunId?: ObjectID | undefined;
|
|
244
274
|
/*
|
|
245
275
|
* When set, use this specific provider (validated against the project) rather
|
|
246
276
|
* than the project default. Powers the in-chat provider/model switcher.
|
|
@@ -337,23 +367,40 @@ export class Service extends BaseService {
|
|
|
337
367
|
}
|
|
338
368
|
|
|
339
369
|
/*
|
|
340
|
-
* G4 daily budget: has this project consumed
|
|
341
|
-
* allowance (UTC day)? Counts only
|
|
342
|
-
* usage neither eats the autonomous
|
|
370
|
+
* G4 daily budget: has this project consumed the selected subject lane's
|
|
371
|
+
* daily autonomous-token allowance (UTC day)? Counts only that lane's
|
|
372
|
+
* AUTONOMOUS_AI_FEATURES tokens, so chat usage neither eats the autonomous
|
|
373
|
+
* budget nor is blocked by it.
|
|
343
374
|
*/
|
|
344
375
|
@CaptureSpan()
|
|
345
376
|
public async getAutonomousDailyBudgetStatus(
|
|
346
377
|
projectId: ObjectID,
|
|
378
|
+
subject?: {
|
|
379
|
+
incidentId?: ObjectID | undefined;
|
|
380
|
+
alertId?: ObjectID | undefined;
|
|
381
|
+
},
|
|
347
382
|
): Promise<AutonomousBudgetStatus> {
|
|
383
|
+
this.assertSingleSubject(subject);
|
|
384
|
+
|
|
348
385
|
const project: Project | null = await ProjectService.findOneById({
|
|
349
386
|
id: projectId,
|
|
350
|
-
select: {
|
|
387
|
+
select: {
|
|
388
|
+
aiDailyAutonomousTokenLimit: true,
|
|
389
|
+
incidentAiDailyAutonomousTokenLimit: true,
|
|
390
|
+
alertAiDailyAutonomousTokenLimit: true,
|
|
391
|
+
},
|
|
351
392
|
props: { isRoot: true },
|
|
352
393
|
});
|
|
353
394
|
|
|
354
|
-
|
|
395
|
+
let limitInTokens: number | null =
|
|
355
396
|
project?.aiDailyAutonomousTokenLimit ?? null;
|
|
356
397
|
|
|
398
|
+
if (subject?.incidentId) {
|
|
399
|
+
limitInTokens = project?.incidentAiDailyAutonomousTokenLimit ?? null;
|
|
400
|
+
} else if (subject?.alertId) {
|
|
401
|
+
limitInTokens = project?.alertAiDailyAutonomousTokenLimit ?? null;
|
|
402
|
+
}
|
|
403
|
+
|
|
357
404
|
if (limitInTokens === null) {
|
|
358
405
|
return { exhausted: false, limitInTokens: null, usedTokensToday: 0 };
|
|
359
406
|
}
|
|
@@ -374,6 +421,10 @@ export class Service extends BaseService {
|
|
|
374
421
|
"UTC",
|
|
375
422
|
),
|
|
376
423
|
features: AUTONOMOUS_AI_FEATURES,
|
|
424
|
+
incidentId: subject?.incidentId,
|
|
425
|
+
alertId: subject?.alertId,
|
|
426
|
+
legacyIncidentFeatures: LEGACY_INCIDENT_LANE_FEATURES,
|
|
427
|
+
legacyAlertFeatures: LEGACY_ALERT_LANE_FEATURES,
|
|
377
428
|
},
|
|
378
429
|
);
|
|
379
430
|
|
|
@@ -388,6 +439,8 @@ export class Service extends BaseService {
|
|
|
388
439
|
public async executeWithLogging(
|
|
389
440
|
request: AILogRequest,
|
|
390
441
|
): Promise<AILogResponse> {
|
|
442
|
+
this.assertSingleSubject(request);
|
|
443
|
+
|
|
391
444
|
const startTime: Date = new Date();
|
|
392
445
|
|
|
393
446
|
// Get LLM provider for the project (honoring an explicit per-chat choice).
|
|
@@ -503,10 +556,18 @@ export class Service extends BaseService {
|
|
|
503
556
|
*/
|
|
504
557
|
if (AUTONOMOUS_AI_FEATURES.includes(request.feature)) {
|
|
505
558
|
const budget: AutonomousBudgetStatus =
|
|
506
|
-
await this.getAutonomousDailyBudgetStatus(request.projectId
|
|
559
|
+
await this.getAutonomousDailyBudgetStatus(request.projectId, {
|
|
560
|
+
incidentId: request.incidentId,
|
|
561
|
+
alertId: request.alertId,
|
|
562
|
+
});
|
|
507
563
|
|
|
508
564
|
if (budget.exhausted) {
|
|
509
|
-
const
|
|
565
|
+
const settingsLocation: string = request.incidentId
|
|
566
|
+
? "Incidents > Settings > AI"
|
|
567
|
+
: request.alertId
|
|
568
|
+
? "Alerts > Settings > AI"
|
|
569
|
+
: "Project Settings > AI > AI Guardrails";
|
|
570
|
+
const budgetMessage: string = `Daily autonomous AI token budget exhausted (${budget.usedTokensToday.toLocaleString()} of ${budget.limitInTokens?.toLocaleString()} tokens used today). Autonomous AI requests resume tomorrow (UTC) — raise or unset the limit under ${settingsLocation}.`;
|
|
510
571
|
|
|
511
572
|
logEntry.status = LlmLogStatus.BudgetExceeded;
|
|
512
573
|
logEntry.statusMessage = budgetMessage.substring(0, 490);
|
|
@@ -658,6 +719,17 @@ export class Service extends BaseService {
|
|
|
658
719
|
}
|
|
659
720
|
}
|
|
660
721
|
|
|
722
|
+
private assertSingleSubject(subject?: {
|
|
723
|
+
incidentId?: ObjectID | undefined;
|
|
724
|
+
alertId?: ObjectID | undefined;
|
|
725
|
+
}): void {
|
|
726
|
+
if (subject?.incidentId && subject.alertId) {
|
|
727
|
+
throw new BadDataException(
|
|
728
|
+
"An AI request cannot belong to both an incident and an alert.",
|
|
729
|
+
);
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
|
|
661
733
|
/*
|
|
662
734
|
* Set gen_ai.* attributes (OpenTelemetry GenAI semantic conventions) on the
|
|
663
735
|
* currently-active span. The @CaptureSpan()-wrapped caller owns that span, so
|
|
@@ -84,6 +84,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
84
84
|
displayColor?: Color | undefined;
|
|
85
85
|
userId?: ObjectID | undefined;
|
|
86
86
|
postedAt?: Date | undefined;
|
|
87
|
+
aiRunId?: ObjectID | undefined;
|
|
87
88
|
workspaceNotification?:
|
|
88
89
|
| {
|
|
89
90
|
notifyUserId?: ObjectID | undefined; // this is oneuptime user id.
|
|
@@ -126,6 +127,10 @@ export class Service extends DatabaseService<Model> {
|
|
|
126
127
|
alertFeed.alertFeedEventType = data.alertFeedEventType;
|
|
127
128
|
alertFeed.projectId = data.projectId;
|
|
128
129
|
|
|
130
|
+
if (data.aiRunId) {
|
|
131
|
+
alertFeed.aiRunId = data.aiRunId;
|
|
132
|
+
}
|
|
133
|
+
|
|
129
134
|
if (!data.postedAt) {
|
|
130
135
|
alertFeed.postedAt = OneUptimeDate.getCurrentDate();
|
|
131
136
|
}
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
TimeoutOverflowMode,
|
|
35
35
|
} from "../Utils/AnalyticsDatabase/QuerySettingsHelper";
|
|
36
36
|
import {
|
|
37
|
+
getDistributedDdlTaskTimeoutSeconds,
|
|
37
38
|
getStorageTableName,
|
|
38
39
|
onClusterClause,
|
|
39
40
|
} from "../Utils/AnalyticsDatabase/ClusterConfig";
|
|
@@ -137,6 +138,34 @@ export const MigrationExecuteOptions: ClickhouseExecuteOptions = {
|
|
|
137
138
|
* migration pool's 30-minute idle ceiling.
|
|
138
139
|
*/
|
|
139
140
|
http_headers_progress_interval_ms: "10000",
|
|
141
|
+
/*
|
|
142
|
+
* ON CLUSTER DDL is queued in Keeper and executed by each host's DDLWorker
|
|
143
|
+
* sequentially, so on a busy or backlogged cluster a host can be healthy
|
|
144
|
+
* yet not reach the task within the wait window. The server default output
|
|
145
|
+
* mode (`throw`) turns that into TIMEOUT_EXCEEDED (code 159) and aborts
|
|
146
|
+
* the whole migrate run — even though the task stays queued and the hosts
|
|
147
|
+
* execute it in the background (until the DDL queue evicts it:
|
|
148
|
+
* task_max_lifetime, one week, or falling more than max_tasks_in_queue
|
|
149
|
+
* entries behind). `null_status_on_timeout` returns NULL for the hosts
|
|
150
|
+
* that haven't finished yet instead of throwing, while a real DDL failure
|
|
151
|
+
* on any host that did run it within the window still throws. Safe because
|
|
152
|
+
* every schema statement here is idempotent (IF NOT EXISTS / OR REPLACE)
|
|
153
|
+
* and, with the default `distributed_ddl.pool_size = 1`, later DDL queues
|
|
154
|
+
* strictly behind earlier DDL on each host. Migrate.ts additionally warns
|
|
155
|
+
* at end of run when the DDL queue still has unfinished tasks. Note these
|
|
156
|
+
* options are also reused by runtime ALTER ... DELETE mutations (session
|
|
157
|
+
* erasure / pin materialization); timeout-as-success is acceptable there
|
|
158
|
+
* too since a mutation is durable once enqueued. Requires ClickHouse >=
|
|
159
|
+
* 21.4 (older servers reject the setting as unknown).
|
|
160
|
+
*/
|
|
161
|
+
distributed_ddl_output_mode: "null_status_on_timeout",
|
|
162
|
+
/*
|
|
163
|
+
* Int64 settings are typed as strings by @clickhouse/client. Read at
|
|
164
|
+
* module load; env is static for the life of the process. The migration
|
|
165
|
+
* pool's socket-idle ceiling scales with this value (ClickhouseConfig.ts)
|
|
166
|
+
* so a raised wait isn't killed client-side.
|
|
167
|
+
*/
|
|
168
|
+
distributed_ddl_task_timeout: String(getDistributedDdlTaskTimeoutSeconds()),
|
|
140
169
|
},
|
|
141
170
|
};
|
|
142
171
|
|
|
@@ -1440,6 +1469,75 @@ export default class AnalyticsDatabaseService<
|
|
|
1440
1469
|
return { statement, columns: select.columns };
|
|
1441
1470
|
}
|
|
1442
1471
|
|
|
1472
|
+
/**
|
|
1473
|
+
* Append the unique `_id` as a final sort key so the ORDER BY is a TOTAL
|
|
1474
|
+
* order.
|
|
1475
|
+
*
|
|
1476
|
+
* `ORDER BY time DESC` alone is not: rows tying on `time` may come back
|
|
1477
|
+
* in any order, and ClickHouse is free to order them differently between
|
|
1478
|
+
* two executions of the same query (part order, thread scheduling and
|
|
1479
|
+
* `optimize_read_in_order` all feed into it). Paging with LIMIT/OFFSET on
|
|
1480
|
+
* top of a non-total order silently drops rows at page boundaries and
|
|
1481
|
+
* repeats others: a row that sat at offset 49 on page 1 can shift to
|
|
1482
|
+
* offset 50 before page 2 is fetched, so nobody ever sees it.
|
|
1483
|
+
*
|
|
1484
|
+
* Ties are the normal case, not an edge case — a service emitting a burst
|
|
1485
|
+
* of logs writes many rows with an identical timestamp.
|
|
1486
|
+
*
|
|
1487
|
+
* `_id` is stamped per row with `ObjectID.generateTimeOrdered()`, so it is
|
|
1488
|
+
* unique and its ordering agrees with time order.
|
|
1489
|
+
*
|
|
1490
|
+
* Two cases must NOT get the tiebreaker:
|
|
1491
|
+
* - GROUP BY queries, where `_id` is neither a grouping key nor an
|
|
1492
|
+
* aggregate, so referencing it is an error.
|
|
1493
|
+
* - Models with no `_id` column: derived aggregate targets deliberately
|
|
1494
|
+
* omit it because the aggregation key is the row identity (see _findBy).
|
|
1495
|
+
*/
|
|
1496
|
+
private toPaginationStableSort(
|
|
1497
|
+
sort: Sort<TBaseModel>,
|
|
1498
|
+
options: { hasGroupBy: boolean },
|
|
1499
|
+
): Sort<TBaseModel> {
|
|
1500
|
+
if (options.hasGroupBy) {
|
|
1501
|
+
return sort;
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
const sortKeys: Array<string> = Object.keys(sort || {});
|
|
1505
|
+
|
|
1506
|
+
// Already a total order; adding `_id` again would be a no-op term.
|
|
1507
|
+
if (sortKeys.includes("_id")) {
|
|
1508
|
+
return sort;
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1511
|
+
const hasIdColumn: boolean = this.model.tableColumns.some(
|
|
1512
|
+
(column: AnalyticsTableColumn): boolean => {
|
|
1513
|
+
return column.key === "_id";
|
|
1514
|
+
},
|
|
1515
|
+
);
|
|
1516
|
+
|
|
1517
|
+
if (!hasIdColumn) {
|
|
1518
|
+
return sort;
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1521
|
+
/*
|
|
1522
|
+
* Tie-break in the same direction as the last declared sort key, so a
|
|
1523
|
+
* newest-first list stays newest-first within a single timestamp.
|
|
1524
|
+
*/
|
|
1525
|
+
const lastSortKey: string | undefined = sortKeys[sortKeys.length - 1];
|
|
1526
|
+
|
|
1527
|
+
const direction: SortOrder =
|
|
1528
|
+
(lastSortKey
|
|
1529
|
+
? ((sort as Record<string, SortOrder | undefined>)[lastSortKey] as
|
|
1530
|
+
| SortOrder
|
|
1531
|
+
| undefined)
|
|
1532
|
+
: undefined) ?? SortOrder.Descending;
|
|
1533
|
+
|
|
1534
|
+
/*
|
|
1535
|
+
* `_id` is absent from `sort` (checked above), so spreading appends it
|
|
1536
|
+
* last and the caller's own keys keep their relative order.
|
|
1537
|
+
*/
|
|
1538
|
+
return { ...sort, _id: direction } as Sort<TBaseModel>;
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1443
1541
|
public toFindStatement(findBy: FindBy<TBaseModel>): {
|
|
1444
1542
|
statement: Statement;
|
|
1445
1543
|
columns: Array<string>;
|
|
@@ -1470,7 +1568,9 @@ export default class AnalyticsDatabaseService<
|
|
|
1470
1568
|
);
|
|
1471
1569
|
|
|
1472
1570
|
const sortStatement: Statement = this.statementGenerator.toSortStatement(
|
|
1473
|
-
findBy.sort!,
|
|
1571
|
+
this.toPaginationStableSort(findBy.sort!, {
|
|
1572
|
+
hasGroupBy: Boolean(groupByStatement),
|
|
1573
|
+
}),
|
|
1474
1574
|
);
|
|
1475
1575
|
|
|
1476
1576
|
const statement: Statement = SQL``;
|
|
@@ -14,6 +14,11 @@ import {
|
|
|
14
14
|
import GitHubUtil, {
|
|
15
15
|
GitHubRepository,
|
|
16
16
|
} from "../Utils/CodeRepository/GitHub/GitHub";
|
|
17
|
+
import GitHubInstallationBinding from "../Utils/CodeRepository/GitHub/GitHubInstallationBinding";
|
|
18
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
19
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
20
|
+
import UpdateBy from "../Types/Database/UpdateBy";
|
|
21
|
+
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
17
22
|
|
|
18
23
|
export interface ImportReposFromInstallationResult {
|
|
19
24
|
imported: number;
|
|
@@ -25,6 +30,93 @@ export class Service extends DatabaseService<Model> {
|
|
|
25
30
|
super(Model);
|
|
26
31
|
}
|
|
27
32
|
|
|
33
|
+
/*
|
|
34
|
+
* Last line of defence for the installation-to-project binding.
|
|
35
|
+
*
|
|
36
|
+
* gitHubAppInstallationId is already closed to API callers at the column
|
|
37
|
+
* level, but that only stops requests that go through permission checks —
|
|
38
|
+
* every write here is made with `props: { isRoot: true }`, which skips them
|
|
39
|
+
* entirely. This hook runs regardless of isRoot, so any route (including one
|
|
40
|
+
* added later) that writes a row carrying another tenant's installation ID
|
|
41
|
+
* is refused at the service boundary rather than at the token endpoint.
|
|
42
|
+
*
|
|
43
|
+
* The legitimate writer is importReposFromInstallation, which the install
|
|
44
|
+
* callback and the installation webhooks only ever call for a project the
|
|
45
|
+
* installation is already bound to — so this check passes for them.
|
|
46
|
+
*/
|
|
47
|
+
@CaptureSpan()
|
|
48
|
+
protected override async onBeforeCreate(
|
|
49
|
+
createBy: CreateBy<Model>,
|
|
50
|
+
): Promise<OnCreate<Model>> {
|
|
51
|
+
const installationId: string | undefined =
|
|
52
|
+
createBy.data.gitHubAppInstallationId;
|
|
53
|
+
|
|
54
|
+
if (installationId) {
|
|
55
|
+
const projectId: ObjectID | undefined =
|
|
56
|
+
createBy.data.projectId || createBy.props.tenantId;
|
|
57
|
+
|
|
58
|
+
if (!projectId) {
|
|
59
|
+
throw new BadDataException(
|
|
60
|
+
"A project is required to connect a GitHub App installation to a repository.",
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
await GitHubInstallationBinding.assertInstallationBoundToProject({
|
|
65
|
+
projectId: projectId,
|
|
66
|
+
installationId: installationId,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return { createBy, carryForward: null };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/*
|
|
74
|
+
* Same rule on the update path. Clearing the installation ID is always
|
|
75
|
+
* allowed — that is how the `installation.deleted` webhook tears a
|
|
76
|
+
* disconnected installation out of the database.
|
|
77
|
+
*/
|
|
78
|
+
@CaptureSpan()
|
|
79
|
+
protected override async onBeforeUpdate(
|
|
80
|
+
updateBy: UpdateBy<Model>,
|
|
81
|
+
): Promise<OnUpdate<Model>> {
|
|
82
|
+
const installationId: string | undefined = updateBy.data
|
|
83
|
+
.gitHubAppInstallationId as string | undefined;
|
|
84
|
+
|
|
85
|
+
if (installationId) {
|
|
86
|
+
/*
|
|
87
|
+
* updateBy matches by query rather than by id, so check every row the
|
|
88
|
+
* write would touch: one unbound row is enough to leak a token.
|
|
89
|
+
*/
|
|
90
|
+
const repositories: Array<Model> = await this.findBy({
|
|
91
|
+
query: updateBy.query,
|
|
92
|
+
select: {
|
|
93
|
+
_id: true,
|
|
94
|
+
projectId: true,
|
|
95
|
+
},
|
|
96
|
+
limit: LIMIT_MAX,
|
|
97
|
+
skip: 0,
|
|
98
|
+
props: {
|
|
99
|
+
isRoot: true,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
for (const repository of repositories) {
|
|
104
|
+
if (!repository.projectId) {
|
|
105
|
+
throw new BadDataException(
|
|
106
|
+
"A project is required to connect a GitHub App installation to a repository.",
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
await GitHubInstallationBinding.assertInstallationBoundToProject({
|
|
111
|
+
projectId: repository.projectId,
|
|
112
|
+
installationId: installationId,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return { updateBy, carryForward: null };
|
|
118
|
+
}
|
|
119
|
+
|
|
28
120
|
/*
|
|
29
121
|
* Imports all repositories accessible to a GitHub App installation into a
|
|
30
122
|
* project. Repositories that already exist for the project (matched on
|
|
@@ -174,13 +266,24 @@ export class Service extends DatabaseService<Model> {
|
|
|
174
266
|
},
|
|
175
267
|
});
|
|
176
268
|
|
|
177
|
-
|
|
269
|
+
/*
|
|
270
|
+
* Only GitHub-App-connected repos can be cloned/pushed by the agent — and
|
|
271
|
+
* only ones whose installation this project actually owns. Resolution
|
|
272
|
+
* probes EVERY candidate's file tree, so an unbound row here would have
|
|
273
|
+
* the server read another tenant's private repository on its own
|
|
274
|
+
* initiative (GHSA-xx95-gmcf-7q86).
|
|
275
|
+
*/
|
|
276
|
+
const boundInstallationId: string | null =
|
|
277
|
+
await GitHubInstallationBinding.getBoundInstallationId(data.projectId);
|
|
278
|
+
|
|
178
279
|
const resolvable: Array<ResolvableRepository> = repositories
|
|
179
280
|
.filter((repository: Model) => {
|
|
180
281
|
return (
|
|
181
282
|
repository.repositoryHostedAt === CodeRepositoryType.GitHub &&
|
|
182
283
|
Boolean(repository.gitHubAppInstallationId) &&
|
|
183
|
-
Boolean(repository.id)
|
|
284
|
+
Boolean(repository.id) &&
|
|
285
|
+
Boolean(boundInstallationId) &&
|
|
286
|
+
repository.gitHubAppInstallationId === boundInstallationId
|
|
184
287
|
);
|
|
185
288
|
})
|
|
186
289
|
.map((repository: Model) => {
|