@oneuptime/common 12.0.7 → 12.0.9
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/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts +1 -1
- package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +1 -1
- package/Models/DatabaseModels/AIConversation.ts +32 -0
- package/Models/DatabaseModels/AIConversationMessage.ts +41 -0
- package/Models/DatabaseModels/AlertEpisodeMember.ts +27 -0
- package/Models/DatabaseModels/IncidentEpisodeMember.ts +28 -0
- package/Models/DatabaseModels/Index.ts +12 -4
- package/Models/DatabaseModels/{TelemetryEntity.ts → InventoryItem.ts} +184 -9
- package/Models/DatabaseModels/InventoryItemCustomField.ts +434 -0
- package/Models/DatabaseModels/{TelemetryEntityRelationship.ts → InventoryItemRelationship.ts} +33 -7
- package/Models/DatabaseModels/NetworkDevice.ts +141 -0
- package/Models/DatabaseModels/NetworkDeviceLink.ts +699 -0
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +467 -0
- package/Models/DatabaseModels/NetworkTopologySuppression.ts +429 -0
- package/Models/DatabaseModels/OnCallDutyPolicyFeed.ts +9 -0
- package/Models/DatabaseModels/Project.ts +78 -0
- package/Models/DatabaseModels/UserCall.ts +42 -0
- package/Models/DatabaseModels/UserEmail.ts +44 -0
- package/Models/DatabaseModels/UserNotificationRule.ts +425 -55
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +24 -2
- package/Models/DatabaseModels/UserPush.ts +49 -0
- package/Models/DatabaseModels/UserSMS.ts +43 -0
- package/Models/DatabaseModels/UserTelegram.ts +59 -0
- package/Models/DatabaseModels/UserWebhook.ts +52 -0
- package/Models/DatabaseModels/UserWhatsApp.ts +41 -0
- package/Models/DatabaseModels/WorkflowLog.ts +38 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +12 -0
- package/Server/API/AIChatAPI.ts +315 -1
- package/Server/API/DashboardAPI.ts +217 -1
- package/Server/API/OnCallReadinessAPI.ts +841 -0
- package/Server/API/TeamComplianceAPI.ts +69 -17
- package/Server/API/TelemetryAPI.ts +220 -12
- package/Server/API/UserAPI.ts +16 -1
- package/Server/EnvironmentConfig.ts +52 -0
- package/Server/Infrastructure/Postgres/DataSourceOptions.ts +22 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +4 -4
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +5 -5
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.ts +41 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.ts +82 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.ts +91 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.ts +255 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.ts +107 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.ts +90 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.ts +39 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +24 -0
- package/Server/Infrastructure/Queue.ts +78 -13
- package/Server/Middleware/MasterAdminAuthorization.ts +11 -6
- package/Server/Middleware/PublicDashboardRateLimit.ts +593 -0
- package/Server/Services/AIService.ts +7 -0
- package/Server/Services/AlertEpisodeStateTimelineService.ts +29 -0
- package/Server/Services/AlertSeverityService.ts +63 -0
- package/Server/Services/DashboardService.ts +9 -10
- package/Server/Services/DatabaseService.ts +32 -2
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +29 -0
- package/Server/Services/IncidentSeverityService.ts +76 -0
- package/Server/Services/Index.ts +12 -4
- package/Server/Services/InventoryItemCustomFieldService.ts +9 -0
- package/Server/Services/{TelemetryEntityRelationshipService.ts → InventoryItemRelationshipService.ts} +7 -4
- package/Server/Services/{TelemetryEntityService.ts → InventoryItemService.ts} +203 -21
- package/Server/Services/LogAggregationService.ts +45 -8
- package/Server/Services/MetricAggregationService.ts +121 -0
- package/Server/Services/MetricService.ts +7 -7
- package/Server/Services/NetworkDeviceLinkRuleService.ts +10 -0
- package/Server/Services/NetworkDeviceLinkService.ts +84 -0
- package/Server/Services/NetworkDeviceService.ts +140 -0
- package/Server/Services/NetworkSiteService.ts +77 -25
- package/Server/Services/NetworkTopologySuppressionService.ts +84 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +41 -29
- package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +8 -0
- package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +62 -13
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +61 -1
- package/Server/Services/OnCallNotificationAlertingService.ts +742 -0
- package/Server/Services/OnCallReadinessService.ts +2803 -0
- package/Server/Services/OnCallSetupReminderService.ts +955 -0
- package/Server/Services/ProfileAggregationService.ts +123 -0
- package/Server/Services/StatusPageService.ts +9 -10
- package/Server/Services/TeamComplianceService.ts +429 -252
- package/Server/Services/UserCallService.ts +26 -1
- package/Server/Services/UserEmailService.ts +26 -1
- package/Server/Services/UserNotificationRuleAdminService.ts +1183 -0
- package/Server/Services/UserNotificationRuleService.ts +3812 -333
- package/Server/Services/UserOnCallLogService.ts +561 -48
- package/Server/Services/UserPushService.ts +29 -0
- package/Server/Services/UserService.ts +11 -0
- package/Server/Services/UserSmsService.ts +26 -1
- package/Server/Services/UserTelegramService.ts +24 -1
- package/Server/Services/UserWebhookService.ts +28 -1
- package/Server/Services/UserWhatsAppService.ts +24 -1
- package/Server/Types/Database/Permissions/BasePermission.ts +19 -0
- package/Server/Types/Database/Permissions/CreatePermission.ts +164 -0
- package/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.ts +340 -0
- package/Server/Types/Database/Permissions/QueryPermission.ts +48 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +8 -1
- package/Server/Types/Workflow/Components/API/Delete.ts +1 -1
- package/Server/Types/Workflow/Components/API/Get.ts +1 -1
- package/Server/Types/Workflow/Components/API/Patch.ts +1 -1
- package/Server/Types/Workflow/Components/API/Post.ts +1 -1
- package/Server/Types/Workflow/Components/API/Put.ts +1 -1
- package/Server/Types/Workflow/Components/API/Utils.ts +44 -1
- package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +29 -5
- package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +18 -10
- package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +55 -0
- package/Server/Types/Workflow/Components/Conditions/IfElse.ts +3 -17
- package/Server/Types/Workflow/Components/Email.ts +25 -7
- package/Server/Types/Workflow/Components/JavaScript.ts +10 -3
- package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +1 -1
- package/Server/Types/Workflow/TriggerCode.ts +12 -0
- package/Server/Types/Workflow/Workflow.ts +5 -0
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +643 -48
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +32 -3
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +20 -6
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +7 -0
- package/Server/Utils/AI/Toolbox/AIActionTools.ts +2 -2
- package/Server/Utils/AI/Toolbox/AIMetaTools.ts +863 -0
- package/Server/Utils/AI/Toolbox/AlertTools.ts +177 -15
- package/Server/Utils/AI/Toolbox/IncidentTools.ts +191 -10
- package/Server/Utils/AI/Toolbox/Index.ts +48 -0
- package/Server/Utils/AI/Toolbox/MonitorTools.ts +298 -11
- package/Server/Utils/AI/Toolbox/NoteWriteTools.ts +295 -0
- package/Server/Utils/AI/Toolbox/OnCallTools.ts +1246 -0
- package/Server/Utils/AI/Toolbox/RunbookTools.ts +424 -0
- package/Server/Utils/AI/Toolbox/SloTools.ts +456 -0
- package/Server/Utils/AI/Toolbox/StatusPageTools.ts +559 -0
- package/Server/Utils/AI/Toolbox/TeamTools.ts +327 -0
- package/Server/Utils/AI/Toolbox/TimelineTools.ts +615 -0
- package/Server/Utils/AI/Toolbox/WorkflowProbeTools.ts +664 -0
- package/Server/Utils/ClientIp.ts +221 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +47 -0
- package/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.ts +163 -0
- package/Server/Utils/Dashboard/PublicDashboardSloWidget.ts +147 -0
- package/Server/Utils/Express.ts +12 -17
- package/Server/Utils/LLM/LLMService.ts +85 -8
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +204 -10
- package/Server/Utils/SSRFProtection.ts +98 -23
- package/Server/Utils/StartServer.ts +12 -3
- package/Server/Utils/Telemetry/EntityRegistry.ts +205 -18
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +689 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +160 -52
- package/Server/Utils/VM/VMAPI.ts +56 -8
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +7 -3
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +2146 -0
- package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +561 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +2470 -0
- package/Tests/App/Dashboard/MonitorCriteriaAttributeFilter.test.tsx +574 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +1897 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3606 -0
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +784 -0
- package/Tests/App/Dashboard/OnCallRulesTable.test.tsx +1119 -0
- package/Tests/App/Dashboard/SloWidgetFetching.test.tsx +531 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +1312 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistPage.test.tsx +1390 -0
- package/Tests/Models/InventoryItemModel.test.ts +174 -0
- package/Tests/Models/InventoryItemNaming.test.ts +302 -0
- package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +437 -0
- package/Tests/Server/API/DashboardPublicRateLimit.test.ts +659 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +18 -0
- package/Tests/Server/API/DashboardPublicSloAPI.test.ts +880 -0
- package/Tests/Server/API/Helpers.ts +24 -15
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +2680 -0
- package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +915 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +478 -4
- package/Tests/Server/Infrastructure/Postgres/EpisodeMemberNotifyIndexesMigration.test.ts +533 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +213 -0
- package/Tests/Server/Infrastructure/Postgres/RenameInventoryItemMigration.test.ts +432 -0
- package/Tests/Server/Infrastructure/Queue.test.ts +293 -0
- package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +1645 -0
- package/Tests/Server/Services/AdminRuleEditGuards.test.ts +2848 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1393 -0
- package/Tests/Server/Services/EpisodeRuleSeverityRepair.test.ts +1802 -0
- package/Tests/Server/Services/EpisodeStateTimelineNote.test.ts +304 -0
- package/Tests/Server/Services/InventoryItemDisplayName.test.ts +339 -0
- package/Tests/Server/Services/InventoryItemManualCreate.test.ts +248 -0
- package/Tests/Server/Services/IpAllowlistSpoofing.test.ts +450 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +235 -1
- package/Tests/Server/Services/MetricAggregationService.test.ts +231 -0
- package/Tests/Server/Services/MetricEntityMVKeyParity.test.ts +80 -29
- package/Tests/Server/Services/MetricServiceAggregate.test.ts +30 -30
- package/Tests/Server/Services/NetworkSiteService.test.ts +18 -3
- package/Tests/Server/Services/NotificationChannelEventCoverage.test.ts +1728 -0
- package/Tests/Server/Services/NotificationDeletionImpact.test.ts +2402 -0
- package/Tests/Server/Services/OnCallDutyPolicyExecutionLogTimelineGapFeed.test.ts +394 -0
- package/Tests/Server/Services/OnCallNotificationFallback.test.ts +1744 -0
- package/Tests/Server/Services/OnCallReadinessService.test.ts +4295 -0
- package/Tests/Server/Services/OnCallSetupReminder.test.ts +1272 -0
- package/Tests/Server/Services/OnCallWeeklyReadinessDigest.test.ts +1021 -0
- package/Tests/Server/Services/ProfileAggregationService.test.ts +296 -0
- package/Tests/Server/Services/SeverityCreationRuleBackfill.test.ts +1536 -0
- package/Tests/Server/Services/SeverityRuleBackfill.test.ts +1818 -0
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +1845 -0
- package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +1394 -0
- package/Tests/Server/Services/UserNotificationRuleDefaultCreation.test.ts +1166 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1468 -0
- package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1457 -0
- package/Tests/Server/Types/Database/Permissions/AdminNotificationRuleAccess.test.ts +1546 -0
- package/Tests/Server/Types/Database/Permissions/CreateOwnershipScoping.test.ts +529 -0
- package/Tests/Server/Types/Database/Permissions/OwnerOnlyColumns.test.ts +1219 -0
- package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1089 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +2 -1
- package/Tests/Server/Types/Workflow/Components/ApiComponentHeaders.test.ts +192 -0
- package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +190 -0
- package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +44 -14
- package/Tests/Server/Types/Workflow/Components/Email.test.ts +151 -0
- package/Tests/Server/Types/Workflow/Components/IfElse.test.ts +98 -0
- package/Tests/Server/Types/Workflow/Components/JavaScript.test.ts +51 -0
- package/Tests/Server/Utils/AI/AIMetaTools.test.ts +586 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +582 -0
- package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +726 -0
- package/Tests/Server/Utils/AI/IncidentToolsFilters.test.ts +315 -0
- package/Tests/Server/Utils/AI/LLMServiceStopReason.test.ts +314 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +26 -3
- package/Tests/Server/Utils/AI/NoteWriteTools.test.ts +268 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +169 -0
- package/Tests/Server/Utils/AI/OnCallTools.test.ts +664 -0
- package/Tests/Server/Utils/AI/RunbookTools.test.ts +325 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +306 -0
- package/Tests/Server/Utils/AI/StatusPageTools.test.ts +391 -0
- package/Tests/Server/Utils/AI/TeamTools.test.ts +257 -0
- package/Tests/Server/Utils/AI/TimelineTools.test.ts +472 -0
- package/Tests/Server/Utils/AI/WorkflowProbeTools.test.ts +428 -0
- package/Tests/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.test.ts +152 -0
- package/Tests/Server/Utils/ClientIp.test.ts +438 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +171 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.test.ts +383 -0
- package/Tests/Server/Utils/EntityRegistryRowFence.test.ts +23 -25
- package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnssecMonitorCriteria.test.ts +307 -0
- package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +468 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorTelemetryDeepLinks.test.ts +460 -0
- package/Tests/Server/Utils/ResponseRateLimitStatusCodes.test.ts +137 -0
- package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +40 -8
- package/Tests/Server/Utils/SSRFProtectionUserInfo.test.ts +351 -0
- package/Tests/Server/Utils/Telemetry/EntityRegistryRetirement.test.ts +531 -0
- package/Tests/Server/Utils/Telemetry/InventoryEntityRegistry.test.ts +322 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +356 -39
- package/Tests/Server/Utils/VM/VMAPISubstitution.test.ts +243 -0
- package/Tests/Types/IP/IP.test.ts +263 -0
- package/Tests/Types/IP/IPWhitelist.test.ts +197 -0
- package/Tests/Types/IP/IPv6.test.ts +12 -1
- package/Tests/Types/Monitor/SnmpOid.test.ts +64 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +110 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeAudit.test.ts +106 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeDifferential.test.ts +511 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageEndToEnd.test.ts +489 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageGapTolerance.test.ts +479 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageState.test.ts +822 -0
- package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +197 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +140 -0
- package/Tests/Types/Workflow/BaseModelComponents.test.ts +429 -0
- package/Tests/Types/Workflow/Components/BaseModel.test.ts +225 -0
- package/Tests/Types/Workflow/IntegrationCredentialMetadata.test.ts +100 -0
- package/Tests/Types/Workflow/StepTrace.test.ts +235 -0
- package/Tests/Types/Workflow/TemplateSyntax.test.ts +491 -0
- package/Tests/Types/Workflow/Templates.test.ts +1218 -0
- package/Tests/UI/Components/ActiveFilterChipsOpenRoute.test.tsx +82 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +564 -7
- package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +459 -0
- package/Tests/UI/Components/DictionaryAttributeFilterRow.test.tsx +477 -0
- package/Tests/UI/Components/Forms/AnchoredFieldPopupKeyboard.test.tsx +382 -0
- package/Tests/UI/Components/Forms/ColorPickerPicking.test.tsx +569 -0
- package/Tests/UI/Components/Forms/ValidationJSON.test.ts +241 -0
- package/Tests/UI/Components/KeyboardShortcut.test.tsx +95 -0
- package/Tests/UI/Components/LogDetailsPanelCrossSignal.test.tsx +448 -0
- package/Tests/UI/Components/LogTimeRangePicker.test.tsx +42 -0
- package/Tests/UI/Components/LogsTableCrossLinks.test.tsx +263 -0
- package/Tests/UI/Components/ModalPortalDismissal.test.tsx +90 -0
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +913 -0
- package/Tests/UI/Components/SimpleLogViewer.test.tsx +228 -0
- package/Tests/UI/Components/TableRowSelectability.test.tsx +312 -0
- package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +49 -7
- package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +325 -0
- package/Tests/UI/Components/Workflow/GraphLint.test.ts +893 -0
- package/Tests/UI/Components/Workflow/GraphLintSummary.test.ts +755 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +522 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +193 -0
- package/Tests/UI/Components/Workflow/ModelSchema.test.ts +388 -0
- package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +210 -0
- package/Tests/UI/Components/Workflow/StepTraceViewer.test.tsx +256 -0
- package/Tests/UI/Components/Workflow/UseRunWatch.test.tsx +665 -0
- package/Tests/UI/Components/Workflow/Utils.test.ts +192 -0
- package/Tests/UI/Components/Workflow/WorkflowIssuesModal.test.tsx +485 -0
- package/Tests/UI/Components/Workflow/WorkflowLogModal.test.tsx +478 -0
- package/Tests/UI/Components/Workflow/WorkflowStatusBar.test.tsx +379 -0
- package/Tests/UI/EsbuildConfig.test.ts +607 -0
- package/Tests/UI/Monitor/MonitorStepCriteriaView.test.tsx +432 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +5 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +11 -4
- package/Tests/UI/Utils/ModelAPICreateMiscData.test.ts +94 -0
- package/Tests/UI/Utils/Platform.test.ts +147 -0
- package/Tests/UI/Utils/ProjectInvitationDisplay.test.ts +357 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +198 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleUtil.test.ts +514 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +727 -0
- package/Tests/Utils/Schema/AnalyticsModelSchema.test.ts +469 -0
- package/Tests/Utils/Schema/ModelSchema.test.ts +268 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +698 -0
- package/Tests/Utils/Telemetry/EntityKeyNonTelemetry.test.ts +193 -0
- package/Tests/__mocks__/bullmq.js +55 -0
- package/Types/AI/AIChatMessageStatus.ts +8 -1
- package/Types/AI/AIChatTypes.ts +12 -0
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +88 -0
- package/Types/Exception/ExceptionCode.ts +2 -0
- package/Types/Exception/ServiceUnavailableException.ts +8 -0
- package/Types/Exception/TooManyRequestsException.ts +8 -0
- package/Types/IP/IP.ts +93 -47
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +80 -3
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +55 -0
- package/Types/OnCallDutyPolicy/Layer.ts +203 -149
- package/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.ts +13 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +155 -10
- package/Types/Permission.ts +193 -0
- package/Types/SerializableObjectDictionary.ts +133 -39
- package/Types/Telemetry/EntityRelationshipType.ts +1 -1
- package/Types/Telemetry/EntitySource.ts +40 -0
- package/Types/Telemetry/EntityType.ts +28 -1
- package/Types/Telemetry/EntityTypeGroups.ts +65 -0
- package/Types/Workflow/Component.ts +29 -0
- package/Types/Workflow/Components/API.ts +35 -0
- package/Types/Workflow/Components/BaseModel.ts +77 -27
- package/Types/Workflow/Components/Discord.ts +1 -0
- package/Types/Workflow/Components/Email.ts +12 -3
- package/Types/Workflow/Components/JavaScript.ts +7 -0
- package/Types/Workflow/Components/MicrosoftTeams.ts +3 -2
- package/Types/Workflow/Components/Slack.ts +1 -0
- package/Types/Workflow/Components/Telegram.ts +1 -0
- package/Types/Workflow/StepTrace.ts +181 -0
- package/Types/Workflow/TemplateSyntax.ts +543 -0
- package/Types/Workflow/Templates.ts +2368 -0
- package/UI/Components/Calendar/Calendar.css +43 -0
- package/UI/Components/Calendar/Calendar.tsx +8 -0
- package/UI/Components/Card/Card.tsx +2 -2
- package/UI/Components/Checkbox/Checkbox.tsx +16 -0
- package/UI/Components/Date/CustomTimeRangeModal.tsx +278 -0
- package/UI/Components/Date/TimeRangePickerDropdown.tsx +250 -0
- package/UI/Components/Dictionary/Dictionary.tsx +71 -15
- package/UI/Components/FormModal/BasicFormModal.tsx +2 -1
- package/UI/Components/Forms/Fields/ColorPicker.tsx +66 -10
- package/UI/Components/Forms/Fields/IconPicker.tsx +48 -10
- package/UI/Components/Forms/Types/Field.ts +7 -0
- package/UI/Components/Forms/Validation.ts +63 -1
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +53 -3
- package/UI/Components/Input/Input.tsx +32 -3
- package/UI/Components/KeyboardShortcut/KeyboardKey.ts +185 -0
- package/UI/Components/KeyboardShortcut/KeyboardShortcut.tsx +87 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +28 -0
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +31 -0
- package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +18 -18
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +363 -14
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +11 -216
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +11 -0
- package/UI/Components/LogsViewer/components/LogsTable.tsx +155 -12
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +29 -0
- package/UI/Components/LogsViewer/types.ts +23 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +9 -2
- package/UI/Components/Modal/Modal.tsx +37 -4
- package/UI/Components/Navbar/NavBarMenuModal.tsx +15 -30
- package/UI/Components/ProjectInvitations/PendingProjectInvitations.tsx +442 -0
- package/UI/Components/SimpleLogViewer/SimpleLogViewer.tsx +23 -1
- package/UI/Components/Table/Table.tsx +49 -16
- package/UI/Components/Table/TableBody.tsx +53 -28
- package/UI/Components/Table/TableHeader.tsx +13 -0
- package/UI/Components/Table/TableRow.tsx +58 -26
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +11 -210
- package/UI/Components/Workflow/ArgumentsForm.tsx +341 -8
- package/UI/Components/Workflow/Component.tsx +28 -26
- package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +26 -0
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +79 -9
- package/UI/Components/Workflow/ComponentValuePickerModal.tsx +135 -7
- package/UI/Components/Workflow/ComponentsModal.tsx +116 -22
- package/UI/Components/Workflow/DocumentationViewer.tsx +59 -9
- package/UI/Components/Workflow/GraphLint.ts +628 -0
- package/UI/Components/Workflow/GraphLintSummary.ts +390 -0
- package/UI/Components/Workflow/ModelColumnEditor.tsx +528 -0
- package/UI/Components/Workflow/ModelSchema.ts +278 -0
- package/UI/Components/Workflow/RunForm.tsx +41 -7
- package/UI/Components/Workflow/RunStatusWatcher.ts +122 -0
- package/UI/Components/Workflow/StepTraceViewer.tsx +186 -0
- package/UI/Components/Workflow/UseRunWatch.ts +212 -0
- package/UI/Components/Workflow/Utils.ts +93 -1
- package/UI/Components/Workflow/VariableModal.tsx +6 -2
- package/UI/Components/Workflow/Workflow.tsx +126 -7
- package/UI/Components/Workflow/WorkflowIssuesModal.tsx +255 -0
- package/UI/Components/Workflow/WorkflowLogModal.tsx +128 -0
- package/UI/Components/Workflow/WorkflowStatusBar.tsx +224 -0
- package/UI/Types/LayeredDismissal.ts +31 -0
- package/UI/Types/UseAnchoredFieldPopup.ts +99 -0
- package/UI/Utils/AIChatExport/ConversationMarkdown.ts +10 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +7 -1
- package/UI/Utils/Platform.ts +149 -0
- package/UI/Utils/ProjectInvitationDisplay.ts +118 -0
- package/UI/esbuild-config.js +22 -1
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +187 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +533 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +917 -155
- package/Utils/Telemetry/CrossSignalScope.ts +502 -0
- package/Utils/Telemetry/EntityKey.ts +71 -5
- package/Utils/Telemetry/EntityRelationship.ts +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +1 -1
- package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +1 -1
- package/build/dist/Models/DatabaseModels/AIConversation.js +32 -0
- package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIConversationMessage.js +42 -0
- package/build/dist/Models/DatabaseModels/AIConversationMessage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +28 -0
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +29 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +12 -4
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/{TelemetryEntity.js → InventoryItem.js} +212 -29
- package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +454 -0
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{TelemetryEntityRelationship.js → InventoryItemRelationship.js} +52 -25
- package/build/dist/Models/DatabaseModels/InventoryItemRelationship.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +141 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js +719 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +475 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js +446 -0
- package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js.map +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js +9 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +80 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +46 -2
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +48 -2
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js +424 -55
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +24 -2
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +51 -1
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +47 -2
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTelegram.js +65 -3
- package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebhook.js +56 -2
- package/build/dist/Models/DatabaseModels/UserWebhook.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +45 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowLog.js +39 -0
- package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +12 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +237 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +165 -13
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js +599 -0
- package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -0
- package/build/dist/Server/API/TeamComplianceAPI.js +68 -9
- package/build/dist/Server/API/TeamComplianceAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +129 -18
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserAPI.js +16 -1
- package/build/dist/Server/API/UserAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +45 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +4 -4
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js +150 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js +57 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js +69 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js +48 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +72 -13
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -6
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +399 -0
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AIService.js +1 -0
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +24 -3
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +54 -0
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/DashboardService.js +10 -9
- package/build/dist/Server/Services/DashboardService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +24 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +24 -3
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +67 -0
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +12 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemCustomFieldService.js +9 -0
- package/build/dist/Server/Services/InventoryItemCustomFieldService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityRelationshipService.js → InventoryItemRelationshipService.js} +9 -6
- package/build/dist/Server/Services/InventoryItemRelationshipService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryEntityService.js → InventoryItemService.js} +158 -23
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -0
- package/build/dist/Server/Services/LogAggregationService.js +27 -8
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +80 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricService.js +6 -6
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js +9 -0
- package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceLinkService.js +71 -0
- package/build/dist/Server/Services/NetworkDeviceLinkService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +113 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +53 -13
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkTopologySuppressionService.js +85 -0
- package/build/dist/Server/Services/NetworkTopologySuppressionService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +48 -32
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +8 -0
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -12
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +57 -13
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js +548 -0
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -0
- package/build/dist/Server/Services/OnCallReadinessService.js +1961 -0
- package/build/dist/Server/Services/OnCallReadinessService.js.map +1 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js +738 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -0
- package/build/dist/Server/Services/ProfileAggregationService.js +68 -4
- package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +11 -10
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceService.js +312 -160
- package/build/dist/Server/Services/TeamComplianceService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +24 -1
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +24 -1
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js +858 -0
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +2830 -175
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallLogService.js +488 -43
- package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +26 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +24 -1
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserTelegramService.js +22 -1
- package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
- package/build/dist/Server/Services/UserWebhookService.js +25 -1
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +22 -1
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +12 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +126 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js +254 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js.map +1 -0
- package/build/dist/Server/Types/Database/Permissions/QueryPermission.js +47 -2
- package/build/dist/Server/Types/Database/Permissions/QueryPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +7 -0
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js +28 -0
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +21 -5
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +14 -10
- package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +31 -0
- package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js +3 -9
- package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Email.js +15 -4
- package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js +7 -2
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +1 -1
- package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
- package/build/dist/Server/Types/Workflow/TriggerCode.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +514 -56
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +20 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +19 -6
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +7 -0
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +2 -2
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js +692 -0
- package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +148 -12
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +157 -10
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +37 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js +259 -14
- package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js +235 -0
- package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +1000 -0
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js +356 -0
- package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +394 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js +465 -0
- package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js +280 -0
- package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +527 -0
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js +548 -0
- package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js.map +1 -0
- package/build/dist/Server/Utils/ClientIp.js +137 -0
- package/build/dist/Server/Utils/ClientIp.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +38 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js +89 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js +77 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js.map +1 -0
- package/build/dist/Server/Utils/Express.js +12 -12
- package/build/dist/Server/Utils/Express.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +70 -7
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +121 -11
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +82 -21
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +12 -4
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +165 -18
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +507 -0
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +122 -47
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMAPI.js +51 -4
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +7 -3
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIChatMessageStatus.js +8 -1
- package/build/dist/Types/AI/AIChatMessageStatus.js.map +1 -1
- package/build/dist/Types/AI/AIChatTypes.js +12 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +60 -0
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js +2 -0
- package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +8 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js +8 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -0
- package/build/dist/Types/IP/IP.js +87 -43
- package/build/dist/Types/IP/IP.js.map +1 -1
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +50 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +186 -123
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js +13 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +105 -11
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/Permission.js +174 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/SerializableObjectDictionary.js +133 -39
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityRelationshipType.js +1 -1
- package/build/dist/Types/Telemetry/EntitySource.js +39 -0
- package/build/dist/Types/Telemetry/EntitySource.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +28 -1
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityTypeGroups.js +57 -0
- package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -0
- package/build/dist/Types/Workflow/Component.js +21 -0
- package/build/dist/Types/Workflow/Component.js.map +1 -1
- package/build/dist/Types/Workflow/Components/API.js +35 -0
- package/build/dist/Types/Workflow/Components/API.js.map +1 -1
- package/build/dist/Types/Workflow/Components/BaseModel.js +68 -26
- package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Discord.js +1 -0
- package/build/dist/Types/Workflow/Components/Discord.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Email.js +12 -3
- package/build/dist/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Types/Workflow/Components/JavaScript.js +7 -0
- package/build/dist/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Types/Workflow/Components/MicrosoftTeams.js +3 -2
- package/build/dist/Types/Workflow/Components/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Slack.js +1 -0
- package/build/dist/Types/Workflow/Components/Slack.js.map +1 -1
- package/build/dist/Types/Workflow/Components/Telegram.js +1 -0
- package/build/dist/Types/Workflow/Components/Telegram.js.map +1 -1
- package/build/dist/Types/Workflow/StepTrace.js +104 -0
- package/build/dist/Types/Workflow/StepTrace.js.map +1 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js +338 -0
- package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -0
- package/build/dist/Types/Workflow/Templates.js +2111 -0
- package/build/dist/Types/Workflow/Templates.js.map +1 -0
- package/build/dist/UI/Components/Calendar/Calendar.js +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +126 -0
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +123 -0
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -0
- package/build/dist/UI/Components/Dictionary/Dictionary.js +47 -17
- package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +52 -13
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -12
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +44 -0
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +27 -4
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +13 -4
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js +163 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js.map +1 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js +47 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +4 -4
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +11 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +10 -8
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +227 -14
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +5 -108
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +5 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +69 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +8 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +9 -2
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +31 -5
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +8 -21
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js +251 -0
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js.map +1 -0
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js +9 -2
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +27 -15
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +24 -18
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +9 -1
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +29 -21
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +5 -105
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js +261 -14
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Component.js +20 -19
- package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +10 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +35 -7
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js +57 -7
- package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +53 -18
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js +19 -6
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/GraphLint.js +425 -0
- package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -0
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js +231 -0
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +320 -0
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js +156 -0
- package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -0
- package/build/dist/UI/Components/Workflow/RunForm.js +22 -6
- package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +76 -0
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +76 -0
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -0
- package/build/dist/UI/Components/Workflow/UseRunWatch.js +123 -0
- package/build/dist/UI/Components/Workflow/UseRunWatch.js.map +1 -0
- package/build/dist/UI/Components/Workflow/Utils.js +73 -1
- package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
- package/build/dist/UI/Components/Workflow/VariableModal.js +3 -2
- package/build/dist/UI/Components/Workflow/VariableModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Workflow.js +92 -7
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js +99 -0
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js.map +1 -0
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js +56 -0
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js.map +1 -0
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js +92 -0
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js.map +1 -0
- package/build/dist/UI/Types/LayeredDismissal.js +21 -0
- package/build/dist/UI/Types/LayeredDismissal.js.map +1 -0
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js +74 -1
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js +9 -0
- package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Platform.js +118 -0
- package/build/dist/UI/Utils/Platform.js.map +1 -0
- package/build/dist/UI/Utils/ProjectInvitationDisplay.js +106 -0
- package/build/dist/UI/Utils/ProjectInvitationDisplay.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +108 -0
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +386 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +661 -126
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +328 -0
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +57 -5
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +1 -1
- package/jest.config.json +1 -0
- package/package.json +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +0 -1
- package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +0 -1
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +0 -1
- package/build/dist/Server/Services/TelemetryEntityService.js.map +0 -1
|
@@ -0,0 +1,863 @@
|
|
|
1
|
+
import AIRun from "../../../../Models/DatabaseModels/AIRun";
|
|
2
|
+
import AIInsight from "../../../../Models/DatabaseModels/AIInsight";
|
|
3
|
+
import Incident from "../../../../Models/DatabaseModels/Incident";
|
|
4
|
+
import Alert from "../../../../Models/DatabaseModels/Alert";
|
|
5
|
+
import { JSONObject } from "../../../../Types/JSON";
|
|
6
|
+
import ObjectID from "../../../../Types/ObjectID";
|
|
7
|
+
import Permission from "../../../../Types/Permission";
|
|
8
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
9
|
+
import SortOrder from "../../../../Types/BaseDatabase/SortOrder";
|
|
10
|
+
import Query from "../../../../Types/BaseDatabase/Query";
|
|
11
|
+
import OneUptimeDate from "../../../../Types/Date";
|
|
12
|
+
import AIRunType from "../../../../Types/AI/AIRunType";
|
|
13
|
+
import AIRunStatus, {
|
|
14
|
+
AIRunStatusHelper,
|
|
15
|
+
} from "../../../../Types/AI/AIRunStatus";
|
|
16
|
+
import AIInsightStatus from "../../../../Types/AI/AIInsightStatus";
|
|
17
|
+
import { AIChatCitationTargetType } from "../../../../Types/AI/AIChatTypes";
|
|
18
|
+
import AIRunService from "../../../Services/AIRunService";
|
|
19
|
+
import AIInsightService from "../../../Services/AIInsightService";
|
|
20
|
+
import IncidentService from "../../../Services/IncidentService";
|
|
21
|
+
import AlertService from "../../../Services/AlertService";
|
|
22
|
+
import QueryHelper from "../../../Types/Database/QueryHelper";
|
|
23
|
+
import PostedRootCause from "../SRE/PostedRootCause";
|
|
24
|
+
import AIInvestigationQueue from "../SRE/InvestigationQueue";
|
|
25
|
+
import { DEFAULT_INCIDENT_DEDUPE_WINDOW_MINUTES } from "../SRE/IncidentInvestigationRunner";
|
|
26
|
+
import ToolResultSerializer, { SerializedResult } from "./Serializer";
|
|
27
|
+
import WidgetBuilder from "./WidgetBuilder";
|
|
28
|
+
import {
|
|
29
|
+
ObservabilityTool,
|
|
30
|
+
ToolArgs,
|
|
31
|
+
ToolContext,
|
|
32
|
+
ToolExecutionResult,
|
|
33
|
+
} from "./ToolTypes";
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* AI meta tools — make the chat aware of OneUptime's OTHER AI lanes.
|
|
37
|
+
*
|
|
38
|
+
* The platform already runs autonomous investigations (cited RCAs posted to
|
|
39
|
+
* incident/alert timelines) and preventive AI Insights (deterministic
|
|
40
|
+
* detector findings with AI triage), but the chat could neither see them nor
|
|
41
|
+
* start one — so it would happily re-derive a root cause from raw telemetry
|
|
42
|
+
* that an investigation had already analyzed. These tools close that gap:
|
|
43
|
+
* - get_ai_investigation reads the investigation run(s) for one subject,
|
|
44
|
+
* - query_ai_insights lists recent preventive findings,
|
|
45
|
+
* - start_investigation enqueues a run through the SAME durable queue the
|
|
46
|
+
* automatic lanes use (AIInvestigationQueue), for subjects the automatic
|
|
47
|
+
* gates skipped.
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
// How many investigation runs one get_ai_investigation call returns at most.
|
|
51
|
+
const MAX_INVESTIGATION_RUNS_RETURNED: number = 5;
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* Detects the analysis' own "the evidence was inconclusive" verdict in the
|
|
55
|
+
* posted prose/TL;DR. Purely informational (the note tells the model to be
|
|
56
|
+
* honest about the uncertainty) — nothing operational branches on it, so a
|
|
57
|
+
* false negative only omits a hint.
|
|
58
|
+
*/
|
|
59
|
+
const INCONCLUSIVE_RE: RegExp = /inconclusive/i;
|
|
60
|
+
|
|
61
|
+
/*
|
|
62
|
+
* Derived from the model ACLs so the tool gates can never drift from RBAC.
|
|
63
|
+
* Resolved lazily rather than at module load: this module is pulled in
|
|
64
|
+
* through the service import graph before the model classes are fully wired
|
|
65
|
+
* up, so calling a model method at import time throws a circular-dependency
|
|
66
|
+
* TypeError. By the time a tool actually executes, every module is loaded.
|
|
67
|
+
*/
|
|
68
|
+
let cachedAiRunReadPermissions: Array<Permission> | null = null;
|
|
69
|
+
const resolveAiRunReadPermissions: () => Array<Permission> =
|
|
70
|
+
(): Array<Permission> => {
|
|
71
|
+
if (!cachedAiRunReadPermissions) {
|
|
72
|
+
cachedAiRunReadPermissions = new AIRun().getReadPermissions();
|
|
73
|
+
}
|
|
74
|
+
return cachedAiRunReadPermissions;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
let cachedAiInsightReadPermissions: Array<Permission> | null = null;
|
|
78
|
+
const resolveAiInsightReadPermissions: () => Array<Permission> =
|
|
79
|
+
(): Array<Permission> => {
|
|
80
|
+
if (!cachedAiInsightReadPermissions) {
|
|
81
|
+
cachedAiInsightReadPermissions = new AIInsight().getReadPermissions();
|
|
82
|
+
}
|
|
83
|
+
return cachedAiInsightReadPermissions;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
* AIRun rows are server-authored (empty create ACL), so gating the mutation
|
|
88
|
+
* on AIRun.getCreatePermissions() would make it unrunnable. Starting an
|
|
89
|
+
* investigation operates on the incident/alert (it posts an RCA to that
|
|
90
|
+
* subject's timeline), so gate on the subject models' update ACLs — the same
|
|
91
|
+
* proxy AIActionTools uses for page_on_call_policy.
|
|
92
|
+
*/
|
|
93
|
+
let cachedStartInvestigationPermissions: Array<Permission> | null = null;
|
|
94
|
+
const resolveStartInvestigationPermissions: () => Array<Permission> =
|
|
95
|
+
(): Array<Permission> => {
|
|
96
|
+
if (!cachedStartInvestigationPermissions) {
|
|
97
|
+
const combined: Array<Permission> = [
|
|
98
|
+
...new Incident().getUpdatePermissions(),
|
|
99
|
+
...new Alert().getUpdatePermissions(),
|
|
100
|
+
];
|
|
101
|
+
cachedStartInvestigationPermissions = Array.from(new Set(combined));
|
|
102
|
+
}
|
|
103
|
+
return cachedStartInvestigationPermissions;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* The incident/alert an investigation tool call is about, resolved UNDER THE
|
|
108
|
+
* USER'S RBAC (ctx.props) — this is the tenancy + visibility check that lets
|
|
109
|
+
* the isRoot reads inside PostedRootCause stay safe, and it rejects a
|
|
110
|
+
* cross-project id outright.
|
|
111
|
+
*/
|
|
112
|
+
interface AIInvestigationSubject {
|
|
113
|
+
incidentId: ObjectID | undefined;
|
|
114
|
+
alertId: ObjectID | undefined;
|
|
115
|
+
// "Incident #12" / "Alert #7" — falls back to the raw id when no number exists.
|
|
116
|
+
label: string;
|
|
117
|
+
citationType: AIChatCitationTargetType;
|
|
118
|
+
citationParams: { [key: string]: string };
|
|
119
|
+
// First affected monitor — the dedupe key the automatic investigation lanes record.
|
|
120
|
+
monitorId: ObjectID | undefined;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const fetchInvestigationSubject: (
|
|
124
|
+
incidentId: ObjectID | undefined,
|
|
125
|
+
alertId: ObjectID | undefined,
|
|
126
|
+
ctx: ToolContext,
|
|
127
|
+
) => Promise<AIInvestigationSubject | null> = async (
|
|
128
|
+
incidentId: ObjectID | undefined,
|
|
129
|
+
alertId: ObjectID | undefined,
|
|
130
|
+
ctx: ToolContext,
|
|
131
|
+
): Promise<AIInvestigationSubject | null> => {
|
|
132
|
+
if (incidentId) {
|
|
133
|
+
const incident: Incident | null = await IncidentService.findOneById({
|
|
134
|
+
id: incidentId,
|
|
135
|
+
select: {
|
|
136
|
+
_id: true,
|
|
137
|
+
incidentNumber: true,
|
|
138
|
+
monitors: {
|
|
139
|
+
_id: true,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
props: ctx.props,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
if (!incident) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const firstMonitorIdString: string | undefined =
|
|
150
|
+
incident.monitors && incident.monitors.length > 0
|
|
151
|
+
? incident.monitors[0]?._id
|
|
152
|
+
: undefined;
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
incidentId: incidentId,
|
|
156
|
+
alertId: undefined,
|
|
157
|
+
label: incident.incidentNumber
|
|
158
|
+
? `Incident #${incident.incidentNumber}`
|
|
159
|
+
: `Incident ${incidentId.toString()}`,
|
|
160
|
+
citationType: AIChatCitationTargetType.IncidentView,
|
|
161
|
+
citationParams: { incidentId: incidentId.toString() },
|
|
162
|
+
monitorId: firstMonitorIdString
|
|
163
|
+
? new ObjectID(firstMonitorIdString)
|
|
164
|
+
: undefined,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (alertId) {
|
|
169
|
+
const alert: Alert | null = await AlertService.findOneById({
|
|
170
|
+
id: alertId,
|
|
171
|
+
select: {
|
|
172
|
+
_id: true,
|
|
173
|
+
alertNumber: true,
|
|
174
|
+
monitorId: true,
|
|
175
|
+
},
|
|
176
|
+
props: ctx.props,
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
if (!alert) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return {
|
|
184
|
+
incidentId: undefined,
|
|
185
|
+
alertId: alertId,
|
|
186
|
+
label: alert.alertNumber
|
|
187
|
+
? `Alert #${alert.alertNumber}`
|
|
188
|
+
: `Alert ${alertId.toString()}`,
|
|
189
|
+
citationType: AIChatCitationTargetType.AlertView,
|
|
190
|
+
citationParams: { alertId: alertId.toString() },
|
|
191
|
+
monitorId: alert.monitorId,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return null;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
/*
|
|
199
|
+
* The AIRun rows that ARE the investigation lane for one incident/alert.
|
|
200
|
+
* projectId is pinned to the tenant from ctx because the subject ids are
|
|
201
|
+
* untrusted model arguments — same defense IncidentTools uses for its
|
|
202
|
+
* owner join-table lookups.
|
|
203
|
+
*/
|
|
204
|
+
const buildSubjectRunQuery: (
|
|
205
|
+
incidentId: ObjectID | undefined,
|
|
206
|
+
alertId: ObjectID | undefined,
|
|
207
|
+
ctx: ToolContext,
|
|
208
|
+
) => Query<AIRun> = (
|
|
209
|
+
incidentId: ObjectID | undefined,
|
|
210
|
+
alertId: ObjectID | undefined,
|
|
211
|
+
ctx: ToolContext,
|
|
212
|
+
): Query<AIRun> => {
|
|
213
|
+
if (incidentId) {
|
|
214
|
+
return {
|
|
215
|
+
projectId: ctx.projectId,
|
|
216
|
+
runType: AIRunType.Investigation,
|
|
217
|
+
triggeredByIncidentId: incidentId,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (alertId) {
|
|
222
|
+
return {
|
|
223
|
+
projectId: ctx.projectId,
|
|
224
|
+
runType: AIRunType.Investigation,
|
|
225
|
+
triggeredByAlertId: alertId,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Callers validate "exactly one of" before building the query.
|
|
230
|
+
throw new BadDataException(
|
|
231
|
+
"An investigation subject requires an incidentId or an alertId.",
|
|
232
|
+
);
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
/*
|
|
236
|
+
* ---------------------------------------------------------------------------
|
|
237
|
+
* get_ai_investigation — the autonomous RCA for one incident/alert.
|
|
238
|
+
* ---------------------------------------------------------------------------
|
|
239
|
+
*/
|
|
240
|
+
export const GetAIInvestigationTool: ObservabilityTool = {
|
|
241
|
+
name: "get_ai_investigation",
|
|
242
|
+
description:
|
|
243
|
+
"Get the autonomous AI investigation (root cause analysis) for one incident or alert. ALWAYS call this FIRST — before re-deriving a root cause from raw telemetry — when the user asks about an incident or alert: an autonomous investigation may already have analyzed it and posted a cited RCA to its timeline. Pass exactly one of incidentId (from query_incidents) or alertId (from query_alerts). Returns the latest investigation runs with their status (Queued/Running/Completed/Error/Cancelled/Stale), the AI's TL;DR, the full posted root-cause analysis of the latest completed run, the code-fix recommendation, any human verdict and auto-grade, and started/completed timestamps. It also says honestly when the analysis was inconclusive (posted in quiet mode) or when no investigation exists — in which case you can offer start_investigation.",
|
|
244
|
+
inputSchema: {
|
|
245
|
+
type: "object",
|
|
246
|
+
properties: {
|
|
247
|
+
incidentId: {
|
|
248
|
+
type: "string",
|
|
249
|
+
description:
|
|
250
|
+
"The incident's ID (find it with query_incidents). Pass exactly one of incidentId or alertId.",
|
|
251
|
+
},
|
|
252
|
+
alertId: {
|
|
253
|
+
type: "string",
|
|
254
|
+
description:
|
|
255
|
+
"The alert's ID (find it with query_alerts). Pass exactly one of incidentId or alertId.",
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
get requiredPermissions(): Array<Permission> {
|
|
260
|
+
return resolveAiRunReadPermissions();
|
|
261
|
+
},
|
|
262
|
+
execute: async (
|
|
263
|
+
args: JSONObject,
|
|
264
|
+
ctx: ToolContext,
|
|
265
|
+
): Promise<ToolExecutionResult> => {
|
|
266
|
+
const incidentId: ObjectID | undefined = ToolArgs.getObjectID(
|
|
267
|
+
args,
|
|
268
|
+
"incidentId",
|
|
269
|
+
);
|
|
270
|
+
const alertId: ObjectID | undefined = ToolArgs.getObjectID(args, "alertId");
|
|
271
|
+
|
|
272
|
+
if ((incidentId && alertId) || (!incidentId && !alertId)) {
|
|
273
|
+
return {
|
|
274
|
+
dataForLlm:
|
|
275
|
+
"Error: pass exactly one of incidentId or alertId — an investigation belongs to a single incident OR a single alert.",
|
|
276
|
+
rowCount: 0,
|
|
277
|
+
citationLabel: "AI investigation (invalid arguments)",
|
|
278
|
+
redactionCount: 0,
|
|
279
|
+
isTruncated: false,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const subject: AIInvestigationSubject | null =
|
|
284
|
+
await fetchInvestigationSubject(incidentId, alertId, ctx);
|
|
285
|
+
|
|
286
|
+
if (!subject) {
|
|
287
|
+
return {
|
|
288
|
+
dataForLlm: `Error: ${incidentId ? "incident" : "alert"} not found (or you do not have access to it).`,
|
|
289
|
+
rowCount: 0,
|
|
290
|
+
citationLabel: "AI investigation (subject not found)",
|
|
291
|
+
redactionCount: 0,
|
|
292
|
+
isTruncated: false,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const runs: Array<AIRun> = await AIRunService.findBy({
|
|
297
|
+
query: buildSubjectRunQuery(incidentId, alertId, ctx),
|
|
298
|
+
select: {
|
|
299
|
+
_id: true,
|
|
300
|
+
status: true,
|
|
301
|
+
analysisTldr: true,
|
|
302
|
+
codeFixRecommendation: true,
|
|
303
|
+
humanVerdict: true,
|
|
304
|
+
autoGrade: true,
|
|
305
|
+
createdAt: true,
|
|
306
|
+
startedAt: true,
|
|
307
|
+
completedAt: true,
|
|
308
|
+
attemptCount: true,
|
|
309
|
+
errorMessage: true,
|
|
310
|
+
},
|
|
311
|
+
sort: {
|
|
312
|
+
createdAt: SortOrder.Descending,
|
|
313
|
+
},
|
|
314
|
+
limit: MAX_INVESTIGATION_RUNS_RETURNED,
|
|
315
|
+
skip: 0,
|
|
316
|
+
/*
|
|
317
|
+
* Root props by design: AIRunPrivacyFilter pins non-root reads to
|
|
318
|
+
* (runType=CodeFix OR userId=caller), and autonomous investigation
|
|
319
|
+
* runs carry no userId — under user props this query matches zero
|
|
320
|
+
* rows for every regular member, defeating the tool. Access is
|
|
321
|
+
* already authorized above: the subject incident/alert was fetched
|
|
322
|
+
* under the USER's props (honest not-found on no access), the query
|
|
323
|
+
* pins projectId to the authenticated tenant, and the analysis this
|
|
324
|
+
* returns is the same text the investigation posted to the incident
|
|
325
|
+
* feed, which project members can read.
|
|
326
|
+
*/
|
|
327
|
+
props: { isRoot: true },
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
if (runs.length === 0) {
|
|
331
|
+
return {
|
|
332
|
+
dataForLlm: `No AI investigation runs exist for ${subject.label}. The automatic gates may have skipped it (severity floor, dedupe window, the project's automatic-investigation opt-in, or the daily AI budget). You can offer to start one with start_investigation.`,
|
|
333
|
+
rowCount: 0,
|
|
334
|
+
citationLabel: `AI investigation for ${subject.label} (none found)`,
|
|
335
|
+
citationTarget: {
|
|
336
|
+
type: subject.citationType,
|
|
337
|
+
params: subject.citationParams,
|
|
338
|
+
},
|
|
339
|
+
redactionCount: 0,
|
|
340
|
+
isTruncated: false,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/*
|
|
345
|
+
* The posted RCA is the payload the model actually needs, and it lives
|
|
346
|
+
* on the subject's feed (PostedRootCause is its single reader). Subject
|
|
347
|
+
* visibility was already verified under the user's RBAC above, so the
|
|
348
|
+
* isRoot read inside PostedRootCause cannot cross a tenant boundary.
|
|
349
|
+
*/
|
|
350
|
+
const latestCompletedRun: AIRun | undefined = runs.find((run: AIRun) => {
|
|
351
|
+
return run.status === AIRunStatus.Completed;
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
let postedAnalysis: string | null = null;
|
|
355
|
+
if (latestCompletedRun && latestCompletedRun.id) {
|
|
356
|
+
postedAnalysis = await PostedRootCause.getForInvestigation({
|
|
357
|
+
incidentId: incidentId,
|
|
358
|
+
alertId: alertId,
|
|
359
|
+
aiRunId: latestCompletedRun.id,
|
|
360
|
+
runCompletedAt: latestCompletedRun.completedAt,
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const rows: Array<JSONObject> = runs.map((run: AIRun) => {
|
|
365
|
+
return {
|
|
366
|
+
runId: run.id?.toString(),
|
|
367
|
+
status: run.status,
|
|
368
|
+
queuedAt: run.createdAt,
|
|
369
|
+
startedAt: run.startedAt,
|
|
370
|
+
completedAt: run.completedAt,
|
|
371
|
+
attemptCount: run.attemptCount,
|
|
372
|
+
analysisTldr: run.analysisTldr,
|
|
373
|
+
codeFixRecommendation: run.codeFixRecommendation,
|
|
374
|
+
humanVerdict: run.humanVerdict,
|
|
375
|
+
autoGrade: run.autoGrade,
|
|
376
|
+
errorMessage: run.errorMessage,
|
|
377
|
+
};
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
// Tell the model plainly what state the LATEST run is in.
|
|
381
|
+
const latestRun: AIRun = runs[0] as AIRun;
|
|
382
|
+
let statusNote: string;
|
|
383
|
+
switch (latestRun.status) {
|
|
384
|
+
case AIRunStatus.Queued:
|
|
385
|
+
statusNote =
|
|
386
|
+
"The latest investigation is still QUEUED — no worker has claimed it yet. Check again shortly with get_ai_investigation.";
|
|
387
|
+
break;
|
|
388
|
+
case AIRunStatus.Running:
|
|
389
|
+
case AIRunStatus.WaitingForApproval:
|
|
390
|
+
statusNote =
|
|
391
|
+
"The latest investigation is still RUNNING — its analysis has not been posted yet. Check again in a minute or two.";
|
|
392
|
+
break;
|
|
393
|
+
case AIRunStatus.Completed:
|
|
394
|
+
statusNote = postedAnalysis
|
|
395
|
+
? "The latest investigation COMPLETED and posted the root cause analysis below. Use and cite it instead of re-deriving the analysis from raw telemetry (verify against current telemetry only where the user asks you to)."
|
|
396
|
+
: "The latest investigation COMPLETED, but no posted analysis could be found on the timeline.";
|
|
397
|
+
break;
|
|
398
|
+
default:
|
|
399
|
+
// Error / Cancelled / Stale — the row's errorMessage says why.
|
|
400
|
+
statusNote =
|
|
401
|
+
`The latest investigation did NOT produce an analysis (status: ${latestRun.status}). ${latestRun.errorMessage || ""}`.trim();
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/*
|
|
406
|
+
* Quiet-mode honesty: an inconclusive analysis is posted to the timeline
|
|
407
|
+
* WITHOUT the loud workspace/on-call ping. Surface that so the model
|
|
408
|
+
* repeats the uncertainty instead of presenting the hypothesis as fact.
|
|
409
|
+
*/
|
|
410
|
+
const isInconclusive: boolean = INCONCLUSIVE_RE.test(
|
|
411
|
+
`${latestCompletedRun?.analysisTldr || ""}\n${postedAnalysis || ""}`,
|
|
412
|
+
);
|
|
413
|
+
if (isInconclusive) {
|
|
414
|
+
statusNote = `${statusNote} NOTE: the investigation reported the evidence was INCONCLUSIVE — it was posted in quiet mode (timeline only, no loud workspace notification). Be honest about that uncertainty.`;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
const serializedRuns: SerializedResult =
|
|
418
|
+
ToolResultSerializer.serializeRows(rows);
|
|
419
|
+
|
|
420
|
+
const parts: Array<string> = [statusNote, serializedRuns.text];
|
|
421
|
+
|
|
422
|
+
let analysisRedactionCount: number = 0;
|
|
423
|
+
let analysisIsTruncated: boolean = false;
|
|
424
|
+
if (postedAnalysis && latestCompletedRun) {
|
|
425
|
+
const serializedAnalysis: SerializedResult =
|
|
426
|
+
ToolResultSerializer.serializeText(postedAnalysis, 1);
|
|
427
|
+
analysisRedactionCount = serializedAnalysis.redactionCount;
|
|
428
|
+
analysisIsTruncated = serializedAnalysis.isTruncated;
|
|
429
|
+
parts.push(
|
|
430
|
+
`--- Posted root cause analysis (run ${latestCompletedRun.id?.toString()}) ---\n${serializedAnalysis.text}`,
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
return {
|
|
435
|
+
dataForLlm: parts.join("\n\n"),
|
|
436
|
+
rowCount: serializedRuns.rowCount,
|
|
437
|
+
citationLabel: `AI investigation for ${subject.label} (${runs.length} ${runs.length === 1 ? "run" : "runs"})`,
|
|
438
|
+
citationTarget: {
|
|
439
|
+
type: subject.citationType,
|
|
440
|
+
params: subject.citationParams,
|
|
441
|
+
},
|
|
442
|
+
redactionCount: serializedRuns.redactionCount + analysisRedactionCount,
|
|
443
|
+
isTruncated: serializedRuns.isTruncated || analysisIsTruncated,
|
|
444
|
+
widget: WidgetBuilder.table({
|
|
445
|
+
title: `AI investigations — ${subject.label}`,
|
|
446
|
+
columns: [
|
|
447
|
+
{ key: "status", title: "Status" },
|
|
448
|
+
{ key: "analysisTldr", title: "TL;DR" },
|
|
449
|
+
{ key: "startedAt", title: "Started", type: "date" },
|
|
450
|
+
{ key: "completedAt", title: "Completed", type: "date" },
|
|
451
|
+
],
|
|
452
|
+
rows: rows,
|
|
453
|
+
link: {
|
|
454
|
+
type: subject.citationType,
|
|
455
|
+
params: subject.citationParams,
|
|
456
|
+
},
|
|
457
|
+
}),
|
|
458
|
+
};
|
|
459
|
+
},
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
/*
|
|
463
|
+
* ---------------------------------------------------------------------------
|
|
464
|
+
* query_ai_insights — recent preventive findings ("any early warnings?").
|
|
465
|
+
* ---------------------------------------------------------------------------
|
|
466
|
+
*/
|
|
467
|
+
export const QueryAIInsightsTool: ObservabilityTool = {
|
|
468
|
+
name: "query_ai_insights",
|
|
469
|
+
description:
|
|
470
|
+
"List recent AI Insights — preventive findings from OneUptime AI's deterministic telemetry sensors (new/spiking exceptions, error-log spikes, trace-latency regressions, metric drift), each optionally triaged by AI. Use this to answer 'any early warnings for this service?' or to correlate an incident with warnings that pre-dated it. Optional filters: serviceId (a telemetry service id) and status (Detected, ActionRequired, FixOpened, Resolved, Dismissed). Returns each insight's type, severity, status, AI triage classification and summary, affected service and first/last-seen times, most recently seen first (default: seen in the last 7 days).",
|
|
471
|
+
inputSchema: {
|
|
472
|
+
type: "object",
|
|
473
|
+
properties: {
|
|
474
|
+
serviceId: {
|
|
475
|
+
type: "string",
|
|
476
|
+
description:
|
|
477
|
+
"Only insights about this telemetry service (optional). Find service ids with lookup_context.",
|
|
478
|
+
},
|
|
479
|
+
status: {
|
|
480
|
+
type: "string",
|
|
481
|
+
description:
|
|
482
|
+
"Only insights in this status (optional). One of: Detected, ActionRequired, FixOpened, Resolved, Dismissed.",
|
|
483
|
+
},
|
|
484
|
+
lookbackDays: {
|
|
485
|
+
type: "number",
|
|
486
|
+
description:
|
|
487
|
+
"Only insights last seen within this many days (default 7, max 90).",
|
|
488
|
+
},
|
|
489
|
+
limit: {
|
|
490
|
+
type: "number",
|
|
491
|
+
description: "Maximum insights to return (default 10, max 25).",
|
|
492
|
+
},
|
|
493
|
+
skip: {
|
|
494
|
+
type: "number",
|
|
495
|
+
description: "Rows to skip for pagination (default 0).",
|
|
496
|
+
},
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
|
+
get requiredPermissions(): Array<Permission> {
|
|
500
|
+
return resolveAiInsightReadPermissions();
|
|
501
|
+
},
|
|
502
|
+
execute: async (
|
|
503
|
+
args: JSONObject,
|
|
504
|
+
ctx: ToolContext,
|
|
505
|
+
): Promise<ToolExecutionResult> => {
|
|
506
|
+
const statusArg: string | undefined = ToolArgs.getString(args, "status");
|
|
507
|
+
let statusFilter: AIInsightStatus | undefined = undefined;
|
|
508
|
+
|
|
509
|
+
if (statusArg) {
|
|
510
|
+
statusFilter = Object.values(AIInsightStatus).find(
|
|
511
|
+
(value: AIInsightStatus) => {
|
|
512
|
+
return value.toLowerCase() === statusArg.toLowerCase();
|
|
513
|
+
},
|
|
514
|
+
);
|
|
515
|
+
|
|
516
|
+
if (!statusFilter) {
|
|
517
|
+
return {
|
|
518
|
+
dataForLlm: `Error: status "${statusArg}" is not a valid AI insight status. Valid statuses: ${Object.values(
|
|
519
|
+
AIInsightStatus,
|
|
520
|
+
).join(", ")}.`,
|
|
521
|
+
rowCount: 0,
|
|
522
|
+
citationLabel: "AI insights (invalid status filter)",
|
|
523
|
+
redactionCount: 0,
|
|
524
|
+
isTruncated: false,
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
const serviceId: ObjectID | undefined = ToolArgs.getObjectID(
|
|
530
|
+
args,
|
|
531
|
+
"serviceId",
|
|
532
|
+
);
|
|
533
|
+
const lookbackDays: number = ToolArgs.getNumber(args, "lookbackDays", {
|
|
534
|
+
defaultValue: 7,
|
|
535
|
+
min: 1,
|
|
536
|
+
max: 90,
|
|
537
|
+
});
|
|
538
|
+
const limit: number = ToolArgs.getNumber(args, "limit", {
|
|
539
|
+
defaultValue: 10,
|
|
540
|
+
min: 1,
|
|
541
|
+
max: 25,
|
|
542
|
+
});
|
|
543
|
+
const skip: number = ToolArgs.getNumber(args, "skip", {
|
|
544
|
+
defaultValue: 0,
|
|
545
|
+
min: 0,
|
|
546
|
+
max: 500,
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
const endTime: Date = OneUptimeDate.getCurrentDate();
|
|
550
|
+
const startTime: Date = OneUptimeDate.getSomeDaysAgo(lookbackDays);
|
|
551
|
+
|
|
552
|
+
/*
|
|
553
|
+
* lastSeenAt (not createdAt): a finding first detected weeks ago that
|
|
554
|
+
* the scanner is STILL re-detecting today is exactly the live early
|
|
555
|
+
* warning this tool exists to surface.
|
|
556
|
+
*/
|
|
557
|
+
const query: Query<AIInsight> = {
|
|
558
|
+
projectId: ctx.projectId,
|
|
559
|
+
lastSeenAt: QueryHelper.inBetween(startTime, endTime),
|
|
560
|
+
};
|
|
561
|
+
if (serviceId) {
|
|
562
|
+
query.telemetryServiceId = serviceId;
|
|
563
|
+
}
|
|
564
|
+
if (statusFilter) {
|
|
565
|
+
query.status = statusFilter;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
const totalCount: number = (
|
|
569
|
+
await AIInsightService.countBy({
|
|
570
|
+
query: query,
|
|
571
|
+
props: ctx.props,
|
|
572
|
+
})
|
|
573
|
+
).toNumber();
|
|
574
|
+
|
|
575
|
+
const insights: Array<AIInsight> = await AIInsightService.findBy({
|
|
576
|
+
query: query,
|
|
577
|
+
select: {
|
|
578
|
+
_id: true,
|
|
579
|
+
insightType: true,
|
|
580
|
+
status: true,
|
|
581
|
+
severity: true,
|
|
582
|
+
classification: true,
|
|
583
|
+
title: true,
|
|
584
|
+
serviceName: true,
|
|
585
|
+
telemetryServiceId: true,
|
|
586
|
+
metricName: true,
|
|
587
|
+
occurrenceCount: true,
|
|
588
|
+
firstSeenAt: true,
|
|
589
|
+
lastSeenAt: true,
|
|
590
|
+
triageSummaryMarkdown: true,
|
|
591
|
+
humanVerdict: true,
|
|
592
|
+
},
|
|
593
|
+
sort: {
|
|
594
|
+
lastSeenAt: SortOrder.Descending,
|
|
595
|
+
},
|
|
596
|
+
limit: limit,
|
|
597
|
+
skip: skip,
|
|
598
|
+
props: ctx.props,
|
|
599
|
+
});
|
|
600
|
+
|
|
601
|
+
const rows: Array<JSONObject> = insights.map((insight: AIInsight) => {
|
|
602
|
+
return {
|
|
603
|
+
id: insight.id?.toString(),
|
|
604
|
+
insightType: insight.insightType,
|
|
605
|
+
status: insight.status,
|
|
606
|
+
severity: insight.severity,
|
|
607
|
+
classification: insight.classification,
|
|
608
|
+
title: insight.title,
|
|
609
|
+
serviceName: insight.serviceName,
|
|
610
|
+
telemetryServiceId: insight.telemetryServiceId?.toString(),
|
|
611
|
+
metricName: insight.metricName,
|
|
612
|
+
occurrenceCount: insight.occurrenceCount,
|
|
613
|
+
firstSeenAt: insight.firstSeenAt,
|
|
614
|
+
lastSeenAt: insight.lastSeenAt,
|
|
615
|
+
humanVerdict: insight.humanVerdict,
|
|
616
|
+
triageSummary: insight.triageSummaryMarkdown,
|
|
617
|
+
};
|
|
618
|
+
});
|
|
619
|
+
|
|
620
|
+
const serialized: SerializedResult =
|
|
621
|
+
ToolResultSerializer.serializeRows(rows);
|
|
622
|
+
|
|
623
|
+
let dataForLlm: string = serialized.text;
|
|
624
|
+
if (rows.length > 0 && totalCount > rows.length) {
|
|
625
|
+
dataForLlm = `Showing rows ${skip + 1}–${skip + rows.length} of ${totalCount} total. Pass skip to page further.\n${dataForLlm}`;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
// No dedicated dashboard page target exists for insights — no deep link.
|
|
629
|
+
return {
|
|
630
|
+
dataForLlm: dataForLlm,
|
|
631
|
+
rowCount: serialized.rowCount,
|
|
632
|
+
citationLabel: `AI insights, last ${lookbackDays}d (${totalCount} found)`,
|
|
633
|
+
redactionCount: serialized.redactionCount,
|
|
634
|
+
isTruncated: serialized.isTruncated,
|
|
635
|
+
widget:
|
|
636
|
+
rows.length > 0
|
|
637
|
+
? WidgetBuilder.table({
|
|
638
|
+
title: `AI insights (${totalCount})`,
|
|
639
|
+
description: `Preventive findings seen in the last ${lookbackDays}d`,
|
|
640
|
+
columns: [
|
|
641
|
+
{ key: "severity", title: "Severity" },
|
|
642
|
+
{ key: "title", title: "Finding" },
|
|
643
|
+
{ key: "serviceName", title: "Service" },
|
|
644
|
+
{ key: "status", title: "Status" },
|
|
645
|
+
{ key: "classification", title: "Triage" },
|
|
646
|
+
{ key: "lastSeenAt", title: "Last seen", type: "date" },
|
|
647
|
+
],
|
|
648
|
+
rows: rows,
|
|
649
|
+
})
|
|
650
|
+
: undefined,
|
|
651
|
+
};
|
|
652
|
+
},
|
|
653
|
+
};
|
|
654
|
+
|
|
655
|
+
/*
|
|
656
|
+
* ---------------------------------------------------------------------------
|
|
657
|
+
* start_investigation — enqueue an AI RCA the automatic gates skipped.
|
|
658
|
+
* ---------------------------------------------------------------------------
|
|
659
|
+
*/
|
|
660
|
+
export const StartInvestigationTool: ObservabilityTool = {
|
|
661
|
+
name: "start_investigation",
|
|
662
|
+
description:
|
|
663
|
+
"Start (enqueue) an autonomous AI investigation for one incident or alert. Use this when get_ai_investigation shows no investigation exists — the automatic gates (severity floor, dedupe window) may have skipped the subject — and the user wants an AI root cause analysis. Pass exactly one of incidentId (from query_incidents) or alertId (from query_alerts). The run is queued durably, usually completes within a few minutes, and posts a cited RCA to the subject's timeline. If an investigation is already queued/running for the subject, or one was started within the last 30 minutes, no duplicate is started and the result says so. Read the outcome with get_ai_investigation.",
|
|
664
|
+
inputSchema: {
|
|
665
|
+
type: "object",
|
|
666
|
+
properties: {
|
|
667
|
+
incidentId: {
|
|
668
|
+
type: "string",
|
|
669
|
+
description:
|
|
670
|
+
"The incident's ID to investigate (find it with query_incidents). Pass exactly one of incidentId or alertId.",
|
|
671
|
+
},
|
|
672
|
+
alertId: {
|
|
673
|
+
type: "string",
|
|
674
|
+
description:
|
|
675
|
+
"The alert's ID to investigate (find it with query_alerts). Pass exactly one of incidentId or alertId.",
|
|
676
|
+
},
|
|
677
|
+
},
|
|
678
|
+
},
|
|
679
|
+
get requiredPermissions(): Array<Permission> {
|
|
680
|
+
return resolveStartInvestigationPermissions();
|
|
681
|
+
},
|
|
682
|
+
isMutation: true,
|
|
683
|
+
buildActionTitle: (args: JSONObject): string => {
|
|
684
|
+
const incidentId: string | undefined = ToolArgs.getString(
|
|
685
|
+
args,
|
|
686
|
+
"incidentId",
|
|
687
|
+
);
|
|
688
|
+
if (incidentId) {
|
|
689
|
+
return `Start AI investigation for incident ${incidentId}`;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
const alertId: string | undefined = ToolArgs.getString(args, "alertId");
|
|
693
|
+
if (alertId) {
|
|
694
|
+
return `Start AI investigation for alert ${alertId}`;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
return "Start AI investigation";
|
|
698
|
+
},
|
|
699
|
+
execute: async (
|
|
700
|
+
args: JSONObject,
|
|
701
|
+
ctx: ToolContext,
|
|
702
|
+
): Promise<ToolExecutionResult> => {
|
|
703
|
+
const incidentId: ObjectID | undefined = ToolArgs.getObjectID(
|
|
704
|
+
args,
|
|
705
|
+
"incidentId",
|
|
706
|
+
);
|
|
707
|
+
const alertId: ObjectID | undefined = ToolArgs.getObjectID(args, "alertId");
|
|
708
|
+
|
|
709
|
+
if ((incidentId && alertId) || (!incidentId && !alertId)) {
|
|
710
|
+
throw new BadDataException(
|
|
711
|
+
"Pass exactly one of incidentId or alertId — an investigation belongs to a single incident OR a single alert.",
|
|
712
|
+
);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
const subject: AIInvestigationSubject | null =
|
|
716
|
+
await fetchInvestigationSubject(incidentId, alertId, ctx);
|
|
717
|
+
|
|
718
|
+
if (!subject) {
|
|
719
|
+
throw new BadDataException(
|
|
720
|
+
`${incidentId ? "Incident" : "Alert"} not found (or you do not have access to it).`,
|
|
721
|
+
);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
const subjectRunQuery: Query<AIRun> = buildSubjectRunQuery(
|
|
725
|
+
incidentId,
|
|
726
|
+
alertId,
|
|
727
|
+
ctx,
|
|
728
|
+
);
|
|
729
|
+
|
|
730
|
+
/*
|
|
731
|
+
* Per-subject dedupe, mirrored from the automatic lanes but keyed on the
|
|
732
|
+
* exact entity: never stack a second live run on the same subject.
|
|
733
|
+
* (The severity floor is deliberately NOT applied — an explicit user
|
|
734
|
+
* request overrides that automatic cost gate.)
|
|
735
|
+
*/
|
|
736
|
+
const activeRunCount: number = (
|
|
737
|
+
await AIRunService.countBy({
|
|
738
|
+
query: {
|
|
739
|
+
...subjectRunQuery,
|
|
740
|
+
status: QueryHelper.notIn(AIRunStatusHelper.terminalStatuses()),
|
|
741
|
+
},
|
|
742
|
+
/*
|
|
743
|
+
* Root props: investigation runs carry no userId, so the AIRun
|
|
744
|
+
* privacy pin would zero this count for regular members and the
|
|
745
|
+
* dedupe guard would never fire (see get_ai_investigation for the
|
|
746
|
+
* full rationale — subject access was checked under user props and
|
|
747
|
+
* the query pins projectId).
|
|
748
|
+
*/
|
|
749
|
+
props: { isRoot: true },
|
|
750
|
+
})
|
|
751
|
+
).toNumber();
|
|
752
|
+
|
|
753
|
+
if (activeRunCount > 0) {
|
|
754
|
+
return {
|
|
755
|
+
dataForLlm: `An AI investigation is already queued or running for ${subject.label} — not starting another. Follow it with get_ai_investigation.`,
|
|
756
|
+
rowCount: 0,
|
|
757
|
+
citationLabel: `Investigation already in progress for ${subject.label}`,
|
|
758
|
+
citationTarget: {
|
|
759
|
+
type: subject.citationType,
|
|
760
|
+
params: subject.citationParams,
|
|
761
|
+
},
|
|
762
|
+
redactionCount: 0,
|
|
763
|
+
isTruncated: false,
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/*
|
|
768
|
+
* Cooldown: reuse the automatic lane's default dedupe window (30
|
|
769
|
+
* minutes). A run that recently settled for this exact subject already
|
|
770
|
+
* answered — or errored on — the same question; point the model at it
|
|
771
|
+
* instead of double-spending the budget.
|
|
772
|
+
*/
|
|
773
|
+
const cooldownStart: Date = OneUptimeDate.getSomeMinutesAgo(
|
|
774
|
+
DEFAULT_INCIDENT_DEDUPE_WINDOW_MINUTES,
|
|
775
|
+
);
|
|
776
|
+
const recentRunCount: number = (
|
|
777
|
+
await AIRunService.countBy({
|
|
778
|
+
query: {
|
|
779
|
+
...subjectRunQuery,
|
|
780
|
+
createdAt: QueryHelper.greaterThan(cooldownStart),
|
|
781
|
+
},
|
|
782
|
+
// Root props for the same reason as the active-run guard above.
|
|
783
|
+
props: { isRoot: true },
|
|
784
|
+
})
|
|
785
|
+
).toNumber();
|
|
786
|
+
|
|
787
|
+
if (recentRunCount > 0) {
|
|
788
|
+
return {
|
|
789
|
+
dataForLlm: `A recent AI investigation already exists for ${subject.label} (started within the last ${DEFAULT_INCIDENT_DEDUPE_WINDOW_MINUTES} minutes) — not starting a duplicate. Read it with get_ai_investigation.`,
|
|
790
|
+
rowCount: 0,
|
|
791
|
+
citationLabel: `Recent investigation exists for ${subject.label}`,
|
|
792
|
+
citationTarget: {
|
|
793
|
+
type: subject.citationType,
|
|
794
|
+
params: subject.citationParams,
|
|
795
|
+
},
|
|
796
|
+
redactionCount: 0,
|
|
797
|
+
isTruncated: false,
|
|
798
|
+
};
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/*
|
|
802
|
+
* The SAME durable enqueue path the automatic lanes use: an AIRun in
|
|
803
|
+
* status Queued that the worker poller claims (with an inline kick for
|
|
804
|
+
* happy-path latency). projectId comes from ctx — never from an
|
|
805
|
+
* argument. enqueue never throws; null means the daily autonomous AI
|
|
806
|
+
* budget quiet-skipped it or the enqueue failed.
|
|
807
|
+
*/
|
|
808
|
+
const enqueuedRunId: ObjectID | null = await AIInvestigationQueue.enqueue({
|
|
809
|
+
projectId: ctx.projectId,
|
|
810
|
+
subjectIncidentId: incidentId,
|
|
811
|
+
subjectAlertId: alertId,
|
|
812
|
+
subjectMonitorId: subject.monitorId,
|
|
813
|
+
});
|
|
814
|
+
|
|
815
|
+
if (!enqueuedRunId) {
|
|
816
|
+
return {
|
|
817
|
+
dataForLlm: `The investigation for ${subject.label} could not be enqueued — the project's daily autonomous AI token budget may be exhausted, or the enqueue failed. Try again later.`,
|
|
818
|
+
rowCount: 0,
|
|
819
|
+
citationLabel: `Investigation not enqueued for ${subject.label}`,
|
|
820
|
+
citationTarget: {
|
|
821
|
+
type: subject.citationType,
|
|
822
|
+
params: subject.citationParams,
|
|
823
|
+
},
|
|
824
|
+
redactionCount: 0,
|
|
825
|
+
isTruncated: false,
|
|
826
|
+
};
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
const serialized: SerializedResult = ToolResultSerializer.serializeRows([
|
|
830
|
+
{
|
|
831
|
+
runId: enqueuedRunId.toString(),
|
|
832
|
+
subject: subject.label,
|
|
833
|
+
status: AIRunStatus.Queued,
|
|
834
|
+
},
|
|
835
|
+
]);
|
|
836
|
+
|
|
837
|
+
return {
|
|
838
|
+
dataForLlm: `Queued AI investigation run ${enqueuedRunId.toString()} for ${subject.label}. It usually completes within a few minutes and posts a cited root-cause analysis to the ${incidentId ? "incident" : "alert"} timeline. Read the result with get_ai_investigation.\n${serialized.text}`,
|
|
839
|
+
rowCount: 1,
|
|
840
|
+
citationLabel: `AI investigation queued for ${subject.label}`,
|
|
841
|
+
citationTarget: {
|
|
842
|
+
type: subject.citationType,
|
|
843
|
+
params: subject.citationParams,
|
|
844
|
+
},
|
|
845
|
+
redactionCount: serialized.redactionCount,
|
|
846
|
+
isTruncated: false,
|
|
847
|
+
widget: WidgetBuilder.resourceCard({
|
|
848
|
+
title: "AI investigation queued",
|
|
849
|
+
resourceType: "AIRun",
|
|
850
|
+
heading: subject.label,
|
|
851
|
+
subheading: "Investigation queued",
|
|
852
|
+
fields: [
|
|
853
|
+
{ label: "Run", value: enqueuedRunId.toString() },
|
|
854
|
+
{ label: "Subject", value: subject.label },
|
|
855
|
+
],
|
|
856
|
+
link: {
|
|
857
|
+
type: subject.citationType,
|
|
858
|
+
params: subject.citationParams,
|
|
859
|
+
},
|
|
860
|
+
}),
|
|
861
|
+
};
|
|
862
|
+
},
|
|
863
|
+
};
|