@oneuptime/common 11.5.4 → 11.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +56 -45
- package/Models/DatabaseModels/AIInsight.ts +748 -0
- package/Models/DatabaseModels/AIRun.ts +262 -0
- package/Models/DatabaseModels/CodeRepository.ts +42 -0
- package/Models/DatabaseModels/GlobalConfig.ts +105 -0
- package/Models/DatabaseModels/Index.ts +4 -8
- package/Models/DatabaseModels/InstanceHealthLog.ts +277 -0
- package/Models/DatabaseModels/LlmLog.ts +33 -0
- package/Models/DatabaseModels/Project.ts +123 -6
- package/Models/DatabaseModels/Runbook.ts +1 -1
- package/Server/API/AIAgentDataAPI.ts +802 -140
- package/Server/API/AIAgentTaskAPI.ts +132 -69
- package/Server/API/AIAgentTaskLogAPI.ts +65 -41
- package/Server/API/AIAgentTaskPullRequestAPI.ts +41 -0
- package/Server/API/AIInsightAPI.ts +220 -0
- package/Server/API/AIInvestigationAPI.ts +363 -1
- package/Server/API/CodeFixRunAPI.ts +251 -0
- package/Server/API/GitHubAPI.ts +246 -3
- package/Server/API/TelemetryExceptionAPI.ts +193 -48
- package/Server/EnvironmentConfig.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.ts +73 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.ts +53 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.ts +75 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.ts +203 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.ts +163 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +30 -0
- package/Server/Infrastructure/Queue.ts +82 -4
- package/Server/Infrastructure/Semaphore.ts +62 -1
- package/Server/Services/AIAgentService.ts +32 -0
- package/Server/Services/AIAgentTaskPullRequestService.ts +117 -0
- package/Server/Services/AIInsightService.ts +174 -0
- package/Server/Services/AIRunEventService.ts +63 -0
- package/Server/Services/AIRunService.ts +259 -1
- package/Server/Services/AIService.ts +249 -7
- package/Server/Services/AlertService.ts +4 -4
- package/Server/Services/CodeRepositoryService.ts +209 -0
- package/Server/Services/GlobalConfigService.ts +148 -0
- package/Server/Services/IncidentService.ts +183 -38
- package/Server/Services/IncidentStateTimelineService.ts +24 -4
- package/Server/Services/Index.ts +4 -4
- package/Server/Services/{AIAgentTaskLogService.ts → InstanceHealthLogService.ts} +1 -1
- package/Server/Services/LlmLogService.ts +27 -0
- package/Server/Services/LlmProviderService.ts +108 -0
- package/Server/Services/MetricBaselineService.ts +123 -0
- package/Server/Services/MonitorService.ts +15 -0
- package/Server/Services/TelemetryExceptionService.ts +323 -116
- package/Server/Services/TraceAggregationService.ts +176 -0
- package/Server/Types/Workflow/ComponentCode.ts +6 -0
- package/Server/Types/Workflow/Components/AI/GenerateText.ts +326 -0
- package/Server/Types/Workflow/Components/Index.ts +2 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +71 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +243 -0
- package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +131 -0
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +148 -0
- package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +117 -0
- package/Server/Utils/AI/Eval/EvalCorpus.ts +369 -0
- package/Server/Utils/AI/Eval/EvalScores.ts +172 -0
- package/Server/Utils/AI/Eval/ReplayInvestigation.ts +87 -0
- package/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.ts +676 -0
- package/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.ts → SRE/AIInvestigationEngine.ts} +58 -37
- package/Server/Utils/AI/{Sentinel/SentinelMemory.ts → SRE/AIMemory.ts} +3 -3
- package/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.ts +50 -20
- package/Server/Utils/AI/SRE/ConfidenceSignal.ts +293 -0
- package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +115 -0
- package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +223 -0
- package/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.ts +71 -21
- package/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.ts +8 -8
- package/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.ts +364 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +317 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/Index.ts +27 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.ts +221 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +238 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.ts +521 -0
- package/Server/Utils/AI/SRE/Insights/FixRouting.ts +242 -0
- package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +290 -0
- package/Server/Utils/AI/SRE/Insights/InsightStore.ts +283 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +242 -0
- package/Server/Utils/AI/SRE/Insights/Triage.ts +162 -0
- package/Server/Utils/AI/SRE/Insights/Types.ts +49 -0
- package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +212 -0
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +282 -0
- package/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.ts +114 -19
- package/Server/Utils/AI/{Sentinel → SRE}/README.md +4 -4
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +172 -0
- package/Server/Utils/AI/Toolbox/{SentinelActionTools.ts → AIActionTools.ts} +22 -1
- package/Server/Utils/AI/Toolbox/Index.ts +2 -2
- package/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.ts +526 -0
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +319 -1
- package/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.ts +221 -0
- package/Server/Utils/CodeRepository/StackTraceRepoResolver.ts +571 -0
- package/Server/Utils/Execute.ts +2 -1
- package/Server/Utils/LLM/LLMService.ts +160 -30
- package/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.ts +152 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +29 -0
- package/Tests/Server/Infrastructure/Queue.test.ts +227 -0
- package/Tests/Server/Infrastructure/SemaphorePermit.test.ts +159 -0
- package/Tests/Server/Services/AIAgentTaskPullRequestOutcomeStats.test.ts +154 -0
- package/Tests/Server/Services/AIInsightService.test.ts +324 -0
- package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +401 -0
- package/Tests/Server/Services/AIRunHumanVerdict.test.ts +161 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +95 -5
- package/Tests/Server/Services/AIServiceProjectAccess.test.ts +259 -0
- package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +249 -0
- package/Tests/Server/Services/FixPerformanceTaskTrigger.test.ts +274 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +80 -0
- package/Tests/Server/Services/IncidentInternalNoteAnnouncement.test.ts +1 -1
- package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +313 -0
- package/Tests/Server/Services/LlmProviderProjectOwned.test.ts +132 -0
- package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +405 -0
- package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +322 -0
- package/Tests/Server/Services/TraceServiceLatencyProfile.test.ts +278 -0
- package/Tests/Server/Types/Workflow/Components/AIGenerateText.test.ts +722 -0
- package/Tests/Server/Utils/AI/{SentinelAlertGating.test.ts → AIAlertGating.test.ts} +19 -19
- package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +362 -0
- package/Tests/Server/Utils/AI/{SentinelInvestigationQueue.test.ts → AIInvestigationQueue.test.ts} +19 -19
- package/Tests/Server/Utils/AI/CodeAgentWorkspaceGuard.test.ts +138 -0
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +335 -0
- package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +134 -0
- package/Tests/Server/Utils/AI/EvalCorpus.test.ts +209 -0
- package/Tests/Server/Utils/AI/EvalScores.test.ts +343 -0
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +218 -0
- package/Tests/Server/Utils/AI/Insights/ErrorLogSpikeDetector.test.ts +437 -0
- package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +287 -0
- package/Tests/Server/Utils/AI/Insights/InsightDetectorsIndex.test.ts +34 -0
- package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +572 -0
- package/Tests/Server/Utils/AI/Insights/InsightNeverThrowsHardening.test.ts +344 -0
- package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +720 -0
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +467 -0
- package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +370 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +210 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +221 -0
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +328 -0
- package/Tests/Server/Utils/AI/Insights/MetricBaselineDrift.test.ts +182 -0
- package/Tests/Server/Utils/AI/Insights/MetricDriftDetector.test.ts +280 -0
- package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +259 -0
- package/Tests/Server/Utils/AI/Insights/TraceLatencyRegressionDetector.test.ts +770 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +343 -0
- package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +307 -0
- package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +170 -0
- package/Tests/Server/Utils/AI/SpanTreeAnalyzer.test.ts +559 -0
- package/Tests/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.test.ts +158 -0
- package/Tests/Server/Utils/GitHubCheckRunsConclusion.test.ts +100 -0
- package/Tests/Server/Utils/GitHubPullRequestStateMapping.test.ts +50 -0
- package/Tests/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.test.ts +266 -0
- package/Tests/Server/Utils/ServiceRepoLinkSuggester.test.ts +167 -0
- package/Tests/Server/Utils/StackTraceRepoResolver.test.ts +527 -0
- package/Tests/Types/AI/AIChatPermissionMode.test.ts +112 -0
- package/Tests/Types/AI/CodeFixTaskType.test.ts +152 -0
- package/Tests/Types/AI/FixPullRequestCiStatus.test.ts +181 -0
- package/Tests/Types/Monitor/MonitorStepSqlMonitor.test.ts +110 -0
- package/Tests/Types/Monitor/SqlDatabaseType.test.ts +55 -0
- package/Tests/Types/Workflow/AIGenerateTextMetadata.test.ts +180 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +168 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +523 -0
- package/Types/AI/AIChatTypes.ts +8 -0
- package/Types/AI/AIInsightEvidence.ts +77 -0
- package/Types/AI/AIInsightHumanVerdict.ts +15 -0
- package/Types/AI/AIInsightSeverity.ts +13 -0
- package/Types/AI/AIInsightStatus.ts +38 -0
- package/Types/AI/AIInsightType.ts +41 -0
- package/Types/AI/AIRunAutoGrade.ts +18 -0
- package/Types/AI/AIRunEventType.ts +5 -0
- package/Types/AI/AIRunHumanVerdict.ts +17 -0
- package/Types/AI/AIRunType.ts +6 -0
- package/Types/AI/CodeFixTaskContext.ts +88 -0
- package/Types/AI/CodeFixTaskType.ts +132 -0
- package/Types/AI/FixPullRequestCiStatus.ts +132 -0
- package/Types/BaseDatabase/AggregationIntervalUtil.ts +67 -0
- package/Types/Incident/IncidentMetricType.ts +7 -0
- package/Types/Monitor/CriteriaFilter.ts +8 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
- package/Types/Monitor/MonitorStep.ts +38 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +141 -0
- package/Types/Monitor/MonitorType.ts +17 -0
- package/Types/Monitor/SqlDatabaseType.ts +49 -0
- package/Types/Monitor/SqlMonitor/SqlMonitorResponse.ts +28 -0
- package/Types/Permission.ts +11 -95
- package/Types/Probe/ProbeMonitorResponse.ts +2 -0
- package/Types/Runbook/RunbookStep.ts +26 -2
- package/Types/Runbook/RunbookStepType.ts +1 -0
- package/Types/Workflow/Component.ts +13 -0
- package/Types/Workflow/ComponentID.ts +1 -0
- package/Types/Workflow/Components/AI.ts +148 -0
- package/Types/Workflow/Components.ts +8 -0
- package/UI/Components/AI/GenerateFromAIModal.tsx +1 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +11 -0
- package/UI/Components/MoreMenu/MoreMenu.tsx +1 -1
- package/UI/Components/Table/Table.tsx +38 -2
- package/UI/Utils/TableColumnsToCsv.ts +385 -0
- package/Utils/Monitor/MonitorMetricType.ts +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +59 -45
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIInsight.js +795 -0
- package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIRun.js +274 -0
- package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +43 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +110 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -8
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +304 -0
- package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js +35 -0
- package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +127 -6
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Runbook.js +1 -1
- package/build/dist/Models/DatabaseModels/Runbook.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +568 -85
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskAPI.js +100 -44
- package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskLogAPI.js +49 -25
- package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +27 -0
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +140 -0
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -0
- package/build/dist/Server/API/AIInvestigationAPI.js +257 -1
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/CodeFixRunAPI.js +181 -0
- package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -0
- package/build/dist/Server/API/GitHubAPI.js +164 -2
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryExceptionAPI.js +148 -43
- package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +1 -1
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783943300000-DropServiceCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783947444597-CodeFixRunsOnAIRun.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783950962813-AddCodeFixTaskType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783954040984-AddInstrumentationFixTasksFlag.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783957160597-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783958542237-AddTaskContextToAIRun.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783965945957-AddInvestigationVerdictAndGrade.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619301-AddFixGuardrailColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783970619302-DropLegacyAIAgentTaskTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783977781677-AddCiStatusToFixPullRequests.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783990000000-AddCompletionTokensToLlmLog.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274993-AddSentinelInsight.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784010274994-AddSentinelInsightFlags.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js +125 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784030612266-RenameSentinelToAI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js +62 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784033837629-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Queue.js +73 -3
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +44 -1
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Services/AIAgentService.js +29 -0
- package/build/dist/Server/Services/AIAgentService.js.map +1 -1
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +78 -0
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -1
- package/build/dist/Server/Services/AIInsightService.js +164 -0
- package/build/dist/Server/Services/AIInsightService.js.map +1 -0
- package/build/dist/Server/Services/AIRunEventService.js +49 -0
- package/build/dist/Server/Services/AIRunEventService.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +221 -0
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +198 -11
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +4 -4
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/CodeRepositoryService.js +180 -0
- package/build/dist/Server/Services/CodeRepositoryService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +84 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +149 -37
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +24 -4
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/{AIAgentTaskLogService.js → InstanceHealthLogService.js} +2 -2
- package/build/dist/Server/Services/InstanceHealthLogService.js.map +1 -0
- package/build/dist/Server/Services/LlmLogService.js +23 -0
- package/build/dist/Server/Services/LlmLogService.js.map +1 -1
- package/build/dist/Server/Services/LlmProviderService.js +96 -0
- package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
- package/build/dist/Server/Services/MetricBaselineService.js +65 -0
- package/build/dist/Server/Services/MetricBaselineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +9 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryExceptionService.js +243 -82
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +124 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/Workflow/ComponentCode.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js +240 -0
- package/build/dist/Server/Types/Workflow/Components/AI/GenerateText.js.map +1 -0
- package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
- package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +48 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +174 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +126 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +131 -0
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +99 -0
- package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js +245 -0
- package/build/dist/Server/Utils/AI/Eval/EvalCorpus.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/EvalScores.js +83 -0
- package/build/dist/Server/Utils/AI/Eval/EvalScores.js.map +1 -0
- package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js +12 -0
- package/build/dist/Server/Utils/AI/Eval/ReplayInvestigation.js.map +1 -0
- package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js +439 -0
- package/build/dist/Server/Utils/AI/PerfEvidence/SpanTreeAnalyzer.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel/SentinelInvestigationEngine.js → SRE/AIInvestigationEngine.js} +47 -31
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel/SentinelMemory.js → SRE/AIMemory.js} +5 -5
- package/build/dist/Server/Utils/AI/SRE/AIMemory.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/AlertInvestigationRunner.js +42 -19
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +226 -0
- package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +100 -0
- package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +174 -0
- package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentInvestigationRunner.js +60 -22
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/IncidentPostmortemRunner.js +9 -9
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js +268 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ErrorLogSpikeDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +226 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js +26 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/Index.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js +159 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/MetricDriftDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +177 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js +384 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/TraceLatencyRegressionDetector.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +180 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +269 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +231 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +206 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +121 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Types.js +2 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Types.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +148 -0
- package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +231 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -0
- package/build/dist/Server/Utils/AI/{Sentinel → SRE}/InvestigationQueue.js +102 -23
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +167 -0
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/{SentinelActionTools.js → AIActionTools.js} +18 -2
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +2 -2
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js +301 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/ClickhouseCapacity.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +240 -2
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js +127 -0
- package/build/dist/Server/Utils/CodeRepository/ServiceRepoLinkSuggester.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js +336 -0
- package/build/dist/Server/Utils/CodeRepository/StackTraceRepoResolver.js.map +1 -0
- package/build/dist/Server/Utils/Execute.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +125 -25
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js +120 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SqlMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +21 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Types/AI/AIInsightEvidence.js +2 -0
- package/build/dist/Types/AI/AIInsightEvidence.js.map +1 -0
- package/build/dist/Types/AI/AIInsightHumanVerdict.js +16 -0
- package/build/dist/Types/AI/AIInsightHumanVerdict.js.map +1 -0
- package/build/dist/Types/AI/AIInsightSeverity.js +14 -0
- package/build/dist/Types/AI/AIInsightSeverity.js.map +1 -0
- package/build/dist/Types/AI/AIInsightStatus.js +36 -0
- package/build/dist/Types/AI/AIInsightStatus.js.map +1 -0
- package/build/dist/Types/AI/AIInsightType.js +42 -0
- package/build/dist/Types/AI/AIInsightType.js.map +1 -0
- package/build/dist/Types/AI/AIRunAutoGrade.js +19 -0
- package/build/dist/Types/AI/AIRunAutoGrade.js.map +1 -0
- package/build/dist/Types/AI/AIRunEventType.js +5 -0
- package/build/dist/Types/AI/AIRunEventType.js.map +1 -1
- package/build/dist/Types/AI/AIRunHumanVerdict.js +18 -0
- package/build/dist/Types/AI/AIRunHumanVerdict.js.map +1 -0
- package/build/dist/Types/AI/AIRunType.js +6 -0
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskContext.js +29 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskType.js +122 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -0
- package/build/dist/Types/AI/FixPullRequestCiStatus.js +102 -0
- package/build/dist/Types/AI/FixPullRequestCiStatus.js.map +1 -0
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +55 -0
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -1
- package/build/dist/Types/Incident/IncidentMetricType.js +7 -0
- package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +7 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +28 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js +93 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +15 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SqlDatabaseType.js +47 -0
- package/build/dist/Types/Monitor/SqlDatabaseType.js.map +1 -0
- package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js +2 -0
- package/build/dist/Types/Monitor/SqlMonitor/SqlMonitorResponse.js.map +1 -0
- package/build/dist/Types/Permission.js +10 -84
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Runbook/RunbookStepType.js +1 -0
- package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
- package/build/dist/Types/Workflow/ComponentID.js +1 -0
- package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
- package/build/dist/Types/Workflow/Components/AI.js +135 -0
- package/build/dist/Types/Workflow/Components/AI.js.map +1 -0
- package/build/dist/Types/Workflow/Components.js +7 -0
- package/build/dist/Types/Workflow/Components.js.map +1 -1
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -1
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +9 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +1 -1
- package/build/dist/UI/Components/Table/Table.js +28 -2
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Utils/TableColumnsToCsv.js +291 -0
- package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js +1 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/package.json +1 -1
- package/Models/DatabaseModels/AIAgentTask.ts +0 -660
- package/Models/DatabaseModels/AIAgentTaskLog.ts +0 -426
- package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +0 -399
- package/Models/DatabaseModels/ServiceCodeRepository.ts +0 -647
- package/Server/Services/AIAgentTaskService.ts +0 -240
- package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +0 -39
- package/Server/Services/ServiceCodeRepositoryService.ts +0 -55
- package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +0 -146
- package/Types/AI/AIAgentTaskMetadata.ts +0 -25
- package/Types/AI/AIAgentTaskType.ts +0 -40
- package/build/dist/Models/DatabaseModels/AIAgentTask.js +0 -691
- package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +0 -1
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +0 -447
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +0 -1
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +0 -415
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js +0 -665
- package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskLogService.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskService.js +0 -217
- package/build/dist/Server/Services/AIAgentTaskService.js.map +0 -1
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +0 -36
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCodeRepositoryService.js +0 -54
- package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/InvestigationQueue.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +0 -1
- package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +0 -1
- package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +0 -1
- package/build/dist/Types/AI/AIAgentTaskMetadata.js +0 -6
- package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +0 -1
- package/build/dist/Types/AI/AIAgentTaskType.js +0 -29
- package/build/dist/Types/AI/AIAgentTaskType.js.map +0 -1
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import DatabaseService from "./DatabaseService";
|
|
2
|
-
import Model from "../../Models/DatabaseModels/AIAgentTask";
|
|
3
|
-
import AIAgent from "../../Models/DatabaseModels/AIAgent";
|
|
4
|
-
import CreateBy from "../Types/Database/CreateBy";
|
|
5
|
-
import { OnCreate } from "../Types/Database/Hooks";
|
|
6
|
-
import BadDataException from "../../Types/Exception/BadDataException";
|
|
7
|
-
import AIAgentService from "./AIAgentService";
|
|
8
|
-
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
9
|
-
import ObjectID from "../../Types/ObjectID";
|
|
10
|
-
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
11
|
-
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
12
|
-
import logger from "../Utils/Logger";
|
|
13
|
-
import OneUptimeDate from "../../Types/Date";
|
|
14
|
-
import AIAgentTaskStatus from "../../Types/AI/AIAgentTaskStatus";
|
|
15
|
-
|
|
16
|
-
export class Service extends DatabaseService<Model> {
|
|
17
|
-
public constructor() {
|
|
18
|
-
super(Model);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@CaptureSpan()
|
|
22
|
-
protected override async onBeforeCreate(
|
|
23
|
-
createBy: CreateBy<Model>,
|
|
24
|
-
): Promise<OnCreate<Model>> {
|
|
25
|
-
// If no aiAgentId is provided, assign one automatically
|
|
26
|
-
if (!createBy.data.aiAgentId) {
|
|
27
|
-
createBy.data.aiAgentId = await this.getDefaultAgentId(createBy);
|
|
28
|
-
} else {
|
|
29
|
-
// Validate the provided aiAgentId
|
|
30
|
-
await this.validateAgentBelongsToProject(createBy);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Generate task number
|
|
34
|
-
if (!createBy.data.projectId) {
|
|
35
|
-
throw new BadDataException(
|
|
36
|
-
"Project ID is required to create an AI Agent Task",
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const projectId: ObjectID = createBy.data.projectId;
|
|
41
|
-
|
|
42
|
-
let mutex: SemaphoreMutex | null = null;
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
mutex = await Semaphore.lock({
|
|
46
|
-
key: projectId.toString(),
|
|
47
|
-
namespace: "AIAgentTaskService.task-create",
|
|
48
|
-
lockTimeout: 15000,
|
|
49
|
-
acquireTimeout: 20000,
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
logger.debug(
|
|
53
|
-
"Mutex acquired - AIAgentTaskService.task-create " +
|
|
54
|
-
projectId.toString() +
|
|
55
|
-
" at " +
|
|
56
|
-
OneUptimeDate.getCurrentDateAsFormattedString(),
|
|
57
|
-
);
|
|
58
|
-
} catch (err) {
|
|
59
|
-
logger.debug(
|
|
60
|
-
"Mutex acquire failed - AIAgentTaskService.task-create " +
|
|
61
|
-
projectId.toString() +
|
|
62
|
-
" at " +
|
|
63
|
-
OneUptimeDate.getCurrentDateAsFormattedString(),
|
|
64
|
-
);
|
|
65
|
-
logger.error(err);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
const taskNumberForThisTask: number =
|
|
70
|
-
(await this.getExistingTaskNumberForProject({
|
|
71
|
-
projectId: projectId,
|
|
72
|
-
})) + 1;
|
|
73
|
-
|
|
74
|
-
createBy.data.taskNumber = taskNumberForThisTask;
|
|
75
|
-
} finally {
|
|
76
|
-
if (mutex) {
|
|
77
|
-
await Semaphore.release(mutex);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return { createBy, carryForward: null };
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/*
|
|
85
|
-
* Atomically claim the oldest Scheduled task for a worker: the
|
|
86
|
-
* Scheduled -> InProgress transition is guarded on status, so when
|
|
87
|
-
* multiple workers poll concurrently only one claim succeeds
|
|
88
|
-
* (updateOneBy returns the number of rows changed — zero means another
|
|
89
|
-
* worker won the race, so we retry with the next candidate). The
|
|
90
|
-
* returned task is already InProgress and owned by the given agent.
|
|
91
|
-
*/
|
|
92
|
-
@CaptureSpan()
|
|
93
|
-
public async claimNextScheduledTask(data: {
|
|
94
|
-
aiAgentId: ObjectID;
|
|
95
|
-
}): Promise<Model | null> {
|
|
96
|
-
const maxClaimAttempts: number = 5;
|
|
97
|
-
|
|
98
|
-
for (let attempt: number = 0; attempt < maxClaimAttempts; attempt++) {
|
|
99
|
-
const task: Model | null = await this.findOneBy({
|
|
100
|
-
query: {
|
|
101
|
-
status: AIAgentTaskStatus.Scheduled,
|
|
102
|
-
},
|
|
103
|
-
sort: {
|
|
104
|
-
createdAt: SortOrder.Ascending,
|
|
105
|
-
},
|
|
106
|
-
select: {
|
|
107
|
-
_id: true,
|
|
108
|
-
projectId: true,
|
|
109
|
-
taskType: true,
|
|
110
|
-
metadata: true,
|
|
111
|
-
createdAt: true,
|
|
112
|
-
},
|
|
113
|
-
props: {
|
|
114
|
-
isRoot: true,
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
if (!task || !task.id) {
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const claimedCount: number = await this.updateOneBy({
|
|
123
|
-
query: {
|
|
124
|
-
_id: task.id.toString(),
|
|
125
|
-
status: AIAgentTaskStatus.Scheduled,
|
|
126
|
-
},
|
|
127
|
-
data: {
|
|
128
|
-
status: AIAgentTaskStatus.InProgress,
|
|
129
|
-
aiAgentId: data.aiAgentId,
|
|
130
|
-
startedAt: OneUptimeDate.getCurrentDate(),
|
|
131
|
-
},
|
|
132
|
-
props: {
|
|
133
|
-
isRoot: true,
|
|
134
|
-
},
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
if (claimedCount > 0) {
|
|
138
|
-
return task;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
@CaptureSpan()
|
|
146
|
-
public async getExistingTaskNumberForProject(data: {
|
|
147
|
-
projectId: ObjectID;
|
|
148
|
-
}): Promise<number> {
|
|
149
|
-
// get last task number.
|
|
150
|
-
const lastTask: Model | null = await this.findOneBy({
|
|
151
|
-
query: {
|
|
152
|
-
projectId: data.projectId,
|
|
153
|
-
},
|
|
154
|
-
select: {
|
|
155
|
-
taskNumber: true,
|
|
156
|
-
},
|
|
157
|
-
sort: {
|
|
158
|
-
createdAt: SortOrder.Descending,
|
|
159
|
-
},
|
|
160
|
-
props: {
|
|
161
|
-
isRoot: true,
|
|
162
|
-
},
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
if (!lastTask) {
|
|
166
|
-
return 0;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return lastTask.taskNumber ? Number(lastTask.taskNumber) : 0;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
@CaptureSpan()
|
|
173
|
-
private async getDefaultAgentId(
|
|
174
|
-
createBy: CreateBy<Model>,
|
|
175
|
-
): Promise<ObjectID> {
|
|
176
|
-
if (!createBy.data.projectId) {
|
|
177
|
-
throw new BadDataException(
|
|
178
|
-
"Project ID is required to assign an AI Agent",
|
|
179
|
-
);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Try to get the default agent for the project (or global fallback)
|
|
183
|
-
const agent: AIAgent | null = await AIAgentService.getAIAgentForProject(
|
|
184
|
-
createBy.data.projectId,
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
if (!agent || !agent.id) {
|
|
188
|
-
throw new BadDataException(
|
|
189
|
-
"No AI Agent available. Please configure an AI Agent for this project or ensure a global AI Agent is available.",
|
|
190
|
-
);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return agent.id!;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
@CaptureSpan()
|
|
197
|
-
private async validateAgentBelongsToProject(
|
|
198
|
-
createBy: CreateBy<Model>,
|
|
199
|
-
): Promise<void> {
|
|
200
|
-
if (!createBy.data.aiAgentId || !createBy.data.projectId) {
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
const agent: AIAgent | null = await AIAgentService.findOneById({
|
|
205
|
-
id: createBy.data.aiAgentId,
|
|
206
|
-
select: {
|
|
207
|
-
_id: true,
|
|
208
|
-
projectId: true,
|
|
209
|
-
isGlobalAIAgent: true,
|
|
210
|
-
},
|
|
211
|
-
props: {
|
|
212
|
-
isRoot: true,
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
if (!agent) {
|
|
217
|
-
throw new BadDataException("AI Agent not found");
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Allow if it's a global agent
|
|
221
|
-
if (agent.isGlobalAIAgent) {
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Allow if the agent belongs to the same project
|
|
226
|
-
if (
|
|
227
|
-
agent.projectId &&
|
|
228
|
-
agent.projectId.toString() === createBy.data.projectId.toString()
|
|
229
|
-
) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Reject if the agent belongs to a different project
|
|
234
|
-
throw new BadDataException(
|
|
235
|
-
"The specified AI Agent does not belong to this project. Please use an AI Agent from your project or a global AI Agent.",
|
|
236
|
-
);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
export default new Service();
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import DatabaseService from "./DatabaseService";
|
|
2
|
-
import Model from "../../Models/DatabaseModels/AIAgentTaskTelemetryException";
|
|
3
|
-
import ObjectID from "../../Types/ObjectID";
|
|
4
|
-
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
5
|
-
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
6
|
-
|
|
7
|
-
export interface LinkTaskToTelemetryExceptionParams {
|
|
8
|
-
projectId: ObjectID;
|
|
9
|
-
aiAgentTaskId: ObjectID;
|
|
10
|
-
telemetryExceptionId: ObjectID;
|
|
11
|
-
props: DatabaseCommonInteractionProps;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export class Service extends DatabaseService<Model> {
|
|
15
|
-
public constructor() {
|
|
16
|
-
super(Model);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
@CaptureSpan()
|
|
20
|
-
public async linkTaskToTelemetryException(
|
|
21
|
-
params: LinkTaskToTelemetryExceptionParams,
|
|
22
|
-
): Promise<Model> {
|
|
23
|
-
const { projectId, aiAgentTaskId, telemetryExceptionId, props } = params;
|
|
24
|
-
|
|
25
|
-
const taskExceptionLink: Model = new Model();
|
|
26
|
-
taskExceptionLink.projectId = projectId;
|
|
27
|
-
taskExceptionLink.aiAgentTaskId = aiAgentTaskId;
|
|
28
|
-
taskExceptionLink.telemetryExceptionId = telemetryExceptionId;
|
|
29
|
-
|
|
30
|
-
return await this.create({
|
|
31
|
-
data: taskExceptionLink,
|
|
32
|
-
props: {
|
|
33
|
-
...props,
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export default new Service();
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import BadDataException from "../../Types/Exception/BadDataException";
|
|
2
|
-
import CreateBy from "../Types/Database/CreateBy";
|
|
3
|
-
import { OnCreate } from "../Types/Database/Hooks";
|
|
4
|
-
import DatabaseService from "./DatabaseService";
|
|
5
|
-
import Model from "../../Models/DatabaseModels/ServiceCodeRepository";
|
|
6
|
-
import ObjectID from "../../Types/ObjectID";
|
|
7
|
-
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
|
-
|
|
9
|
-
export class Service extends DatabaseService<Model> {
|
|
10
|
-
public constructor() {
|
|
11
|
-
super(Model);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
@CaptureSpan()
|
|
15
|
-
protected override async onBeforeCreate(
|
|
16
|
-
createBy: CreateBy<Model>,
|
|
17
|
-
): Promise<OnCreate<Model>> {
|
|
18
|
-
if (!createBy.data.serviceId && !createBy.data.service) {
|
|
19
|
-
throw new BadDataException("service is required");
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (!createBy.data.codeRepository && !createBy.data.codeRepositoryId) {
|
|
23
|
-
throw new BadDataException("codeRepository is required");
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const serviceId: string | ObjectID | undefined =
|
|
27
|
-
createBy.data.serviceId || createBy.data.service?._id;
|
|
28
|
-
const codeRepositoryId: string | ObjectID | undefined =
|
|
29
|
-
createBy.data.codeRepositoryId || createBy.data.codeRepository?._id;
|
|
30
|
-
|
|
31
|
-
// check if this code repository is already added to the service for this service.
|
|
32
|
-
const existingCodeRepository: Model | null = await this.findOneBy({
|
|
33
|
-
query: {
|
|
34
|
-
serviceId: serviceId as ObjectID,
|
|
35
|
-
codeRepositoryId: codeRepositoryId as ObjectID,
|
|
36
|
-
},
|
|
37
|
-
props: {
|
|
38
|
-
isRoot: true,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
if (existingCodeRepository) {
|
|
43
|
-
throw new BadDataException(
|
|
44
|
-
"Code Repository already exists for this service",
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return {
|
|
49
|
-
carryForward: null,
|
|
50
|
-
createBy: createBy,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export default new Service();
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import AIAgentTaskService from "../../../Server/Services/AIAgentTaskService";
|
|
2
|
-
import Model from "../../../Models/DatabaseModels/AIAgentTask";
|
|
3
|
-
import AIAgentTaskStatus from "../../../Types/AI/AIAgentTaskStatus";
|
|
4
|
-
import ObjectID from "../../../Types/ObjectID";
|
|
5
|
-
import { describe, expect, test, afterEach } from "@jest/globals";
|
|
6
|
-
|
|
7
|
-
/*
|
|
8
|
-
* claimNextScheduledTask is the atomic-claim fix for the get-pending-task
|
|
9
|
-
* double-processing race: multiple KEDA-scaled AIAgent workers poll the same
|
|
10
|
-
* endpoint, and the old plain findOneBy returned the oldest Scheduled task
|
|
11
|
-
* without mutating it, so two workers could both receive — and both execute —
|
|
12
|
-
* the same task.
|
|
13
|
-
*
|
|
14
|
-
* The claim collapses the read-then-take into findOneBy + a status-guarded
|
|
15
|
-
* updateOneBy (Scheduled -> InProgress). updateOneBy returns the number of
|
|
16
|
-
* rows changed: 1 means this caller won the claim; 0 means another worker
|
|
17
|
-
* already took the task, and the loop retries with the next candidate.
|
|
18
|
-
*
|
|
19
|
-
* These tests mock the two inherited persistence helpers (no Postgres) to
|
|
20
|
-
* lock in:
|
|
21
|
-
* (a) a won claim returns the task, with the guard and the InProgress
|
|
22
|
-
* transition on the exact row that was read;
|
|
23
|
-
* (b) a lost claim (0 rows) is never returned — the loop moves to the
|
|
24
|
-
* next candidate;
|
|
25
|
-
* (c) no Scheduled tasks => null, with no write at all;
|
|
26
|
-
* (d) the retry loop is bounded, so a pathological all-losses storm
|
|
27
|
-
* terminates.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
function fakeTask(id: ObjectID): Model {
|
|
31
|
-
return {
|
|
32
|
-
id,
|
|
33
|
-
_id: id.toString(),
|
|
34
|
-
projectId: ObjectID.generate(),
|
|
35
|
-
taskType: "FixException",
|
|
36
|
-
} as unknown as Model;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
describe("AIAgentTaskService.claimNextScheduledTask", () => {
|
|
40
|
-
const aiAgentId: ObjectID = ObjectID.generate();
|
|
41
|
-
|
|
42
|
-
afterEach(() => {
|
|
43
|
-
jest.restoreAllMocks();
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
test("returns the task when the claim wins, guarding on Scheduled status", async () => {
|
|
47
|
-
const task: Model = fakeTask(ObjectID.generate());
|
|
48
|
-
|
|
49
|
-
const findOneBy: jest.SpyInstance = jest
|
|
50
|
-
.spyOn(AIAgentTaskService, "findOneBy")
|
|
51
|
-
.mockResolvedValue(task);
|
|
52
|
-
const updateOneBy: jest.SpyInstance = jest
|
|
53
|
-
.spyOn(AIAgentTaskService, "updateOneBy")
|
|
54
|
-
.mockResolvedValue(1);
|
|
55
|
-
|
|
56
|
-
const claimed: Model | null =
|
|
57
|
-
await AIAgentTaskService.claimNextScheduledTask({
|
|
58
|
-
aiAgentId: aiAgentId,
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
expect(claimed).toBe(task);
|
|
62
|
-
expect(findOneBy).toHaveBeenCalledTimes(1);
|
|
63
|
-
expect(findOneBy).toHaveBeenCalledWith(
|
|
64
|
-
expect.objectContaining({
|
|
65
|
-
query: { status: AIAgentTaskStatus.Scheduled },
|
|
66
|
-
}),
|
|
67
|
-
);
|
|
68
|
-
expect(updateOneBy).toHaveBeenCalledTimes(1);
|
|
69
|
-
expect(updateOneBy).toHaveBeenCalledWith(
|
|
70
|
-
expect.objectContaining({
|
|
71
|
-
query: {
|
|
72
|
-
_id: task.id!.toString(),
|
|
73
|
-
status: AIAgentTaskStatus.Scheduled,
|
|
74
|
-
},
|
|
75
|
-
data: expect.objectContaining({
|
|
76
|
-
status: AIAgentTaskStatus.InProgress,
|
|
77
|
-
aiAgentId: aiAgentId,
|
|
78
|
-
startedAt: expect.any(Date),
|
|
79
|
-
}),
|
|
80
|
-
}),
|
|
81
|
-
);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test("retries with the next candidate when another worker wins the race", async () => {
|
|
85
|
-
const lostTask: Model = fakeTask(ObjectID.generate());
|
|
86
|
-
const wonTask: Model = fakeTask(ObjectID.generate());
|
|
87
|
-
|
|
88
|
-
const findOneBy: jest.SpyInstance = jest
|
|
89
|
-
.spyOn(AIAgentTaskService, "findOneBy")
|
|
90
|
-
.mockResolvedValueOnce(lostTask)
|
|
91
|
-
.mockResolvedValueOnce(wonTask);
|
|
92
|
-
const updateOneBy: jest.SpyInstance = jest
|
|
93
|
-
.spyOn(AIAgentTaskService, "updateOneBy")
|
|
94
|
-
.mockResolvedValueOnce(0)
|
|
95
|
-
.mockResolvedValueOnce(1);
|
|
96
|
-
|
|
97
|
-
const claimed: Model | null =
|
|
98
|
-
await AIAgentTaskService.claimNextScheduledTask({
|
|
99
|
-
aiAgentId: aiAgentId,
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
expect(claimed).toBe(wonTask);
|
|
103
|
-
expect(findOneBy).toHaveBeenCalledTimes(2);
|
|
104
|
-
expect(updateOneBy).toHaveBeenCalledTimes(2);
|
|
105
|
-
expect(updateOneBy).toHaveBeenLastCalledWith(
|
|
106
|
-
expect.objectContaining({
|
|
107
|
-
query: {
|
|
108
|
-
_id: wonTask.id!.toString(),
|
|
109
|
-
status: AIAgentTaskStatus.Scheduled,
|
|
110
|
-
},
|
|
111
|
-
}),
|
|
112
|
-
);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
test("returns null without writing when no Scheduled task exists", async () => {
|
|
116
|
-
jest.spyOn(AIAgentTaskService, "findOneBy").mockResolvedValue(null);
|
|
117
|
-
const updateOneBy: jest.SpyInstance = jest
|
|
118
|
-
.spyOn(AIAgentTaskService, "updateOneBy")
|
|
119
|
-
.mockResolvedValue(1);
|
|
120
|
-
|
|
121
|
-
const claimed: Model | null =
|
|
122
|
-
await AIAgentTaskService.claimNextScheduledTask({
|
|
123
|
-
aiAgentId: aiAgentId,
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
expect(claimed).toBeNull();
|
|
127
|
-
expect(updateOneBy).not.toHaveBeenCalled();
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
test("gives up after a bounded number of lost claims", async () => {
|
|
131
|
-
const findOneBy: jest.SpyInstance = jest
|
|
132
|
-
.spyOn(AIAgentTaskService, "findOneBy")
|
|
133
|
-
.mockImplementation(async () => {
|
|
134
|
-
return fakeTask(ObjectID.generate());
|
|
135
|
-
});
|
|
136
|
-
jest.spyOn(AIAgentTaskService, "updateOneBy").mockResolvedValue(0);
|
|
137
|
-
|
|
138
|
-
const claimed: Model | null =
|
|
139
|
-
await AIAgentTaskService.claimNextScheduledTask({
|
|
140
|
-
aiAgentId: aiAgentId,
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
expect(claimed).toBeNull();
|
|
144
|
-
expect(findOneBy).toHaveBeenCalledTimes(5);
|
|
145
|
-
});
|
|
146
|
-
});
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import AIAgentTaskType from "./AIAgentTaskType";
|
|
2
|
-
|
|
3
|
-
// Base interface for all task metadata
|
|
4
|
-
export interface AIAgentTaskMetadataBase {
|
|
5
|
-
taskType: AIAgentTaskType;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
// Metadata for FixException task type
|
|
9
|
-
export interface FixExceptionTaskMetadata extends AIAgentTaskMetadataBase {
|
|
10
|
-
taskType: AIAgentTaskType.FixException;
|
|
11
|
-
exceptionId: string;
|
|
12
|
-
serviceId?: string;
|
|
13
|
-
stackTrace?: string;
|
|
14
|
-
errorMessage?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// Union type for all task metadata types
|
|
18
|
-
export type AIAgentTaskMetadata = FixExceptionTaskMetadata; // More tasks can be added here in the future
|
|
19
|
-
|
|
20
|
-
// Type guard functions
|
|
21
|
-
export function isFixExceptionMetadata(
|
|
22
|
-
metadata: AIAgentTaskMetadata,
|
|
23
|
-
): metadata is FixExceptionTaskMetadata {
|
|
24
|
-
return metadata.taskType === AIAgentTaskType.FixException;
|
|
25
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
enum AIAgentTaskType {
|
|
2
|
-
FixException = "FixException",
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export default AIAgentTaskType;
|
|
6
|
-
|
|
7
|
-
export interface AIAgentTaskTypeProps {
|
|
8
|
-
taskType: AIAgentTaskType;
|
|
9
|
-
title: string;
|
|
10
|
-
description: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class AIAgentTaskTypeHelper {
|
|
14
|
-
public static getAllTaskTypeProps(): Array<AIAgentTaskTypeProps> {
|
|
15
|
-
return [
|
|
16
|
-
{
|
|
17
|
-
taskType: AIAgentTaskType.FixException,
|
|
18
|
-
title: "Fix Exception",
|
|
19
|
-
description:
|
|
20
|
-
"Analyze and fix an exception that occurred in your application.",
|
|
21
|
-
},
|
|
22
|
-
];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public static getDescription(taskType: AIAgentTaskType): string {
|
|
26
|
-
const props: AIAgentTaskTypeProps | undefined =
|
|
27
|
-
this.getAllTaskTypeProps().find((p: AIAgentTaskTypeProps) => {
|
|
28
|
-
return p.taskType === taskType;
|
|
29
|
-
});
|
|
30
|
-
return props?.description || "";
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public static getTitle(taskType: AIAgentTaskType): string {
|
|
34
|
-
const props: AIAgentTaskTypeProps | undefined =
|
|
35
|
-
this.getAllTaskTypeProps().find((p: AIAgentTaskTypeProps) => {
|
|
36
|
-
return p.taskType === taskType;
|
|
37
|
-
});
|
|
38
|
-
return props?.title || "";
|
|
39
|
-
}
|
|
40
|
-
}
|