@oneuptime/common 9.2.27 → 9.3.1
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/AIAgent.ts +589 -0
- package/Models/DatabaseModels/AIAgentOwnerTeam.ts +434 -0
- package/Models/DatabaseModels/AIAgentOwnerUser.ts +433 -0
- package/Models/DatabaseModels/AIAgentTask.ts +549 -0
- package/Models/DatabaseModels/AIAgentTaskLog.ts +417 -0
- package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +731 -0
- package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +388 -0
- package/Models/DatabaseModels/Index.ts +15 -0
- package/Models/DatabaseModels/Monitor.ts +33 -0
- package/Models/DatabaseModels/Project.ts +25 -0
- package/Models/DatabaseModels/TelemetryException.ts +1 -1
- package/Server/API/AIAgentAPI.ts +200 -0
- package/Server/API/AIAgentDataAPI.ts +692 -0
- package/Server/API/AIAgentTaskAPI.ts +286 -0
- package/Server/API/AIAgentTaskLogAPI.ts +165 -0
- package/Server/API/AIAgentTaskPullRequestAPI.ts +14 -0
- package/Server/API/GitHubAPI.ts +25 -7
- package/Server/API/TelemetryExceptionAPI.ts +169 -0
- package/Server/EnvironmentConfig.ts +3 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.ts +195 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.ts +63 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.ts +75 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.ts +157 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.ts +37 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +22 -0
- package/Server/Services/AIAgentOwnerTeamService.ts +10 -0
- package/Server/Services/AIAgentOwnerUserService.ts +10 -0
- package/Server/Services/AIAgentService.ts +564 -0
- package/Server/Services/AIAgentTaskLogService.ts +10 -0
- package/Server/Services/AIAgentTaskPullRequestService.ts +10 -0
- package/Server/Services/AIAgentTaskService.ts +178 -0
- package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +39 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/TelemetryExceptionService.ts +162 -0
- package/Server/Utils/Monitor/MonitorResource.ts +228 -0
- package/Server/Utils/PushNotificationUtil.ts +29 -0
- package/Server/Utils/WhatsAppTemplateUtil.ts +6 -0
- package/Tests/UI/Components/Badge.test.tsx +5 -5
- package/Tests/UI/Components/Card.test.tsx +4 -8
- package/Tests/UI/Components/HiddenText.test.tsx +2 -5
- package/Tests/UI/Components/SideMenuItem.test.tsx +4 -2
- package/Types/AI/AIAgentTaskMetadata.ts +25 -0
- package/Types/AI/AIAgentTaskStatus.ts +65 -0
- package/Types/AI/AIAgentTaskType.ts +40 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/Monitor/MonitorEvaluationSummary.ts +2 -1
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/Permission.ts +176 -0
- package/Types/WhatsApp/WhatsAppTemplates.ts +9 -0
- package/UI/Components/AIAgent/AIAgent.tsx +69 -0
- package/UI/Components/Badge/Badge.tsx +9 -5
- package/UI/Components/Banner/Banner.tsx +1 -1
- package/UI/Components/Card/Card.tsx +14 -12
- package/UI/Components/CodeBlock/CodeBlock.tsx +47 -4
- package/UI/Components/Detail/Detail.tsx +239 -49
- package/UI/Components/Detail/FieldLabel.tsx +35 -11
- package/UI/Components/Detail/PlaceholderText.tsx +18 -1
- package/UI/Components/Footer/Footer.tsx +9 -7
- package/UI/Components/Header/Header.tsx +4 -3
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +13 -11
- package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +3 -3
- package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +1 -1
- package/UI/Components/Header/ProjectPicker/CreateNewProjectButton.tsx +4 -4
- package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -6
- package/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.tsx +3 -3
- package/UI/Components/Header/ProjectPicker/ProjectPickerMenu.tsx +1 -1
- package/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.tsx +4 -4
- package/UI/Components/HeaderAlert/HeaderAlert.tsx +32 -32
- package/UI/Components/HeaderAlert/HeaderAlertGroup.tsx +1 -7
- package/UI/Components/HiddenText/HiddenText.tsx +98 -27
- package/UI/Components/Icon/Icon.tsx +12 -9
- package/UI/Components/InfoCard/InfoCard.tsx +7 -3
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/ObjectID/ObjectIDView.tsx +73 -0
- package/UI/Components/Page/Page.tsx +3 -5
- package/UI/Components/SideMenu/SideMenu.tsx +175 -40
- package/UI/Components/SideMenu/SideMenuDivider.tsx +17 -0
- package/UI/Components/SideMenu/SideMenuItem.tsx +111 -158
- package/UI/Components/SideMenu/SideMenuSection.tsx +53 -3
- package/UI/Components/Table/Table.tsx +1 -1
- package/UI/Components/Types/FieldType.ts +2 -0
- package/UI/Config.ts +5 -0
- package/build/dist/Models/DatabaseModels/AIAgent.js +614 -0
- package/build/dist/Models/DatabaseModels/AIAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js +452 -0
- package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js +451 -0
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentTask.js +580 -0
- package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +438 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +771 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +404 -0
- package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +14 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +34 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +26 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryException.js +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Server/API/AIAgentAPI.js +141 -0
- package/build/dist/Server/API/AIAgentAPI.js.map +1 -0
- package/build/dist/Server/API/AIAgentDataAPI.js +415 -0
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -0
- package/build/dist/Server/API/AIAgentTaskAPI.js +199 -0
- package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -0
- package/build/dist/Server/API/AIAgentTaskLogAPI.js +106 -0
- package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -0
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +9 -0
- package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -0
- package/build/dist/Server/API/GitHubAPI.js +23 -8
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryExceptionAPI.js +120 -0
- package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +2 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.js +74 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.js +28 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AIAgentOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/AIAgentOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/AIAgentOwnerUserService.js +9 -0
- package/build/dist/Server/Services/AIAgentOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/AIAgentService.js +471 -0
- package/build/dist/Server/Services/AIAgentService.js.map +1 -0
- package/build/dist/Server/Services/AIAgentTaskLogService.js +9 -0
- package/build/dist/Server/Services/AIAgentTaskLogService.js.map +1 -0
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +9 -0
- package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -0
- package/build/dist/Server/Services/AIAgentTaskService.js +158 -0
- package/build/dist/Server/Services/AIAgentTaskService.js.map +1 -0
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +36 -0
- package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +1 -0
- package/build/dist/Server/Services/Index.js +10 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/TelemetryExceptionService.js +137 -0
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +168 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/PushNotificationUtil.js +21 -0
- package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +4 -0
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
- package/build/dist/Tests/UI/Components/Badge.test.js +5 -5
- package/build/dist/Tests/UI/Components/Badge.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Card.test.js +4 -8
- package/build/dist/Tests/UI/Components/Card.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/HiddenText.test.js +2 -3
- package/build/dist/Tests/UI/Components/HiddenText.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/SideMenuItem.test.js +3 -2
- package/build/dist/Tests/UI/Components/SideMenuItem.test.js.map +1 -1
- package/build/dist/Types/AI/AIAgentTaskMetadata.js +6 -0
- package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +1 -0
- package/build/dist/Types/AI/AIAgentTaskStatus.js +51 -0
- package/build/dist/Types/AI/AIAgentTaskStatus.js.map +1 -0
- package/build/dist/Types/AI/AIAgentTaskType.js +29 -0
- package/build/dist/Types/AI/AIAgentTaskType.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +2 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/Permission.js +160 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +6 -0
- package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
- package/build/dist/UI/Components/AIAgent/AIAgent.js +32 -0
- package/build/dist/UI/Components/AIAgent/AIAgent.js.map +1 -0
- package/build/dist/UI/Components/Badge/Badge.js +9 -5
- package/build/dist/UI/Components/Badge/Badge.js.map +1 -1
- package/build/dist/UI/Components/Banner/Banner.js +1 -1
- package/build/dist/UI/Components/Banner/Banner.js.map +1 -1
- package/build/dist/UI/Components/Card/Card.js +12 -12
- package/build/dist/UI/Components/Card/Card.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js +22 -2
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
- package/build/dist/UI/Components/Detail/Detail.js +117 -37
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/Detail/FieldLabel.js +12 -7
- package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
- package/build/dist/UI/Components/Detail/PlaceholderText.js +4 -1
- package/build/dist/UI/Components/Detail/PlaceholderText.js.map +1 -1
- package/build/dist/UI/Components/Footer/Footer.js +6 -6
- package/build/dist/UI/Components/Footer/Footer.js.map +1 -1
- package/build/dist/UI/Components/Header/Header.js +4 -3
- package/build/dist/UI/Components/Header/Header.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +7 -7
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +3 -3
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js +4 -4
- package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +6 -6
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js +2 -2
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenu.js +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenu.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.js +4 -4
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js +31 -29
- package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/HeaderAlertGroup.js +1 -3
- package/build/dist/UI/Components/HeaderAlert/HeaderAlertGroup.js.map +1 -1
- package/build/dist/UI/Components/HiddenText/HiddenText.js +33 -14
- package/build/dist/UI/Components/HiddenText/HiddenText.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +3 -4
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js +3 -3
- package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ObjectID/ObjectIDView.js +30 -0
- package/build/dist/UI/Components/ObjectID/ObjectIDView.js.map +1 -0
- package/build/dist/UI/Components/Page/Page.js +3 -3
- package/build/dist/UI/Components/Page/Page.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +82 -17
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuDivider.js +7 -0
- package/build/dist/UI/Components/SideMenu/SideMenuDivider.js.map +1 -0
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +68 -97
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +18 -3
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +1 -1
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Types/FieldType.js +2 -0
- package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
- package/build/dist/UI/Config.js +2 -0
- package/build/dist/UI/Config.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import AIAgentService from "../Services/AIAgentService";
|
|
2
|
+
import LlmProviderService from "../Services/LlmProviderService";
|
|
3
|
+
import TelemetryExceptionService from "../Services/TelemetryExceptionService";
|
|
4
|
+
import ServiceCatalogTelemetryServiceService from "../Services/ServiceCatalogTelemetryServiceService";
|
|
5
|
+
import ServiceCatalogCodeRepositoryService from "../Services/ServiceCatalogCodeRepositoryService";
|
|
6
|
+
import CodeRepositoryService from "../Services/CodeRepositoryService";
|
|
7
|
+
import AIAgentTaskPullRequestService from "../Services/AIAgentTaskPullRequestService";
|
|
8
|
+
import AIAgentTaskService from "../Services/AIAgentTaskService";
|
|
9
|
+
import Express from "../Utils/Express";
|
|
10
|
+
import Response from "../Utils/Response";
|
|
11
|
+
import AIAgentTaskPullRequest from "../../Models/DatabaseModels/AIAgentTaskPullRequest";
|
|
12
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
13
|
+
import ObjectID from "../../Types/ObjectID";
|
|
14
|
+
import GitHubUtil from "../Utils/CodeRepository/GitHub/GitHub";
|
|
15
|
+
import CodeRepositoryType from "../../Types/CodeRepository/CodeRepositoryType";
|
|
16
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
17
|
+
import URL from "../../Types/API/URL";
|
|
18
|
+
import PullRequestState from "../../Types/CodeRepository/PullRequestState";
|
|
19
|
+
import logger from "../Utils/Logger";
|
|
20
|
+
export default class AIAgentDataAPI {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.router = Express.getRouter();
|
|
23
|
+
this.initRoutes();
|
|
24
|
+
}
|
|
25
|
+
getRouter() {
|
|
26
|
+
return this.router;
|
|
27
|
+
}
|
|
28
|
+
initRoutes() {
|
|
29
|
+
// Get LLM configuration for a project
|
|
30
|
+
this.router.post("/ai-agent-data/get-llm-config", async (req, res, next) => {
|
|
31
|
+
try {
|
|
32
|
+
const data = req.body;
|
|
33
|
+
// Validate AI Agent credentials
|
|
34
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
35
|
+
if (!aiAgent) {
|
|
36
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
37
|
+
}
|
|
38
|
+
// Get project ID
|
|
39
|
+
if (!data["projectId"]) {
|
|
40
|
+
return Response.sendErrorResponse(req, res, new BadDataException("projectId is required"));
|
|
41
|
+
}
|
|
42
|
+
const projectId = new ObjectID(data["projectId"]);
|
|
43
|
+
// Check if this is a Project AI Agent (has a projectId)
|
|
44
|
+
const isProjectAIAgent = aiAgent.projectId !== null && aiAgent.projectId !== undefined;
|
|
45
|
+
// Get LLM provider for the project
|
|
46
|
+
const llmProvider = await LlmProviderService.getLLMProviderForProject(projectId);
|
|
47
|
+
if (!llmProvider) {
|
|
48
|
+
return Response.sendErrorResponse(req, res, new BadDataException("No LLM provider configured for this project"));
|
|
49
|
+
}
|
|
50
|
+
/*
|
|
51
|
+
* Security check: Project AI Agents cannot access Global LLM Providers
|
|
52
|
+
* Only Global AI Agents (projectId is null) can access Global LLM Providers
|
|
53
|
+
*/
|
|
54
|
+
const isGlobalLLMProvider = llmProvider.isGlobalLlm === true;
|
|
55
|
+
if (isProjectAIAgent && isGlobalLLMProvider) {
|
|
56
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Project AI Agents cannot access Global LLM Providers. Please configure a project-specific LLM Provider."));
|
|
57
|
+
}
|
|
58
|
+
logger.debug(`LLM config fetched for project ${projectId.toString()}: ${llmProvider.llmType}`);
|
|
59
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
60
|
+
llmType: llmProvider.llmType,
|
|
61
|
+
apiKey: llmProvider.apiKey,
|
|
62
|
+
baseUrl: llmProvider.baseUrl,
|
|
63
|
+
modelName: llmProvider.modelName,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
next(err);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// Get exception details with telemetry service info
|
|
71
|
+
this.router.post("/ai-agent-data/get-exception-details", async (req, res, next) => {
|
|
72
|
+
var _a, _b, _c, _d;
|
|
73
|
+
try {
|
|
74
|
+
const data = req.body;
|
|
75
|
+
// Validate AI Agent credentials
|
|
76
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
77
|
+
if (!aiAgent) {
|
|
78
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
79
|
+
}
|
|
80
|
+
// Get exception ID
|
|
81
|
+
if (!data["exceptionId"]) {
|
|
82
|
+
return Response.sendErrorResponse(req, res, new BadDataException("exceptionId is required"));
|
|
83
|
+
}
|
|
84
|
+
const exceptionId = new ObjectID(data["exceptionId"]);
|
|
85
|
+
// Get exception with telemetry service
|
|
86
|
+
const exception = await TelemetryExceptionService.findOneById({
|
|
87
|
+
id: exceptionId,
|
|
88
|
+
select: {
|
|
89
|
+
_id: true,
|
|
90
|
+
message: true,
|
|
91
|
+
stackTrace: true,
|
|
92
|
+
exceptionType: true,
|
|
93
|
+
fingerprint: true,
|
|
94
|
+
telemetryServiceId: true,
|
|
95
|
+
telemetryService: {
|
|
96
|
+
_id: true,
|
|
97
|
+
name: true,
|
|
98
|
+
description: true,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
props: {
|
|
102
|
+
isRoot: true,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
if (!exception) {
|
|
106
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Exception not found"));
|
|
107
|
+
}
|
|
108
|
+
logger.debug(`Exception details fetched: ${exception._id} - ${(_a = exception.message) === null || _a === void 0 ? void 0 : _a.substring(0, 100)}`);
|
|
109
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
110
|
+
exception: {
|
|
111
|
+
id: (_b = exception._id) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
112
|
+
message: exception.message,
|
|
113
|
+
stackTrace: exception.stackTrace,
|
|
114
|
+
exceptionType: exception.exceptionType,
|
|
115
|
+
fingerprint: exception.fingerprint,
|
|
116
|
+
},
|
|
117
|
+
telemetryService: exception.telemetryServiceId
|
|
118
|
+
? {
|
|
119
|
+
id: exception.telemetryServiceId.toString(),
|
|
120
|
+
name: (_c = exception.telemetryService) === null || _c === void 0 ? void 0 : _c.name,
|
|
121
|
+
description: (_d = exception.telemetryService) === null || _d === void 0 ? void 0 : _d.description,
|
|
122
|
+
}
|
|
123
|
+
: null,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
next(err);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
// Get code repositories linked to a telemetry service via ServiceCatalog
|
|
131
|
+
this.router.post("/ai-agent-data/get-code-repositories", async (req, res, next) => {
|
|
132
|
+
var _a;
|
|
133
|
+
try {
|
|
134
|
+
const data = req.body;
|
|
135
|
+
// Validate AI Agent credentials
|
|
136
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
137
|
+
if (!aiAgent) {
|
|
138
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
139
|
+
}
|
|
140
|
+
// Get telemetry service ID
|
|
141
|
+
if (!data["telemetryServiceId"]) {
|
|
142
|
+
return Response.sendErrorResponse(req, res, new BadDataException("telemetryServiceId is required"));
|
|
143
|
+
}
|
|
144
|
+
const telemetryServiceId = new ObjectID(data["telemetryServiceId"]);
|
|
145
|
+
// Step 1: Find ServiceCatalogs linked to this TelemetryService
|
|
146
|
+
const serviceCatalogTelemetryServices = await ServiceCatalogTelemetryServiceService.findBy({
|
|
147
|
+
query: {
|
|
148
|
+
telemetryServiceId: telemetryServiceId,
|
|
149
|
+
},
|
|
150
|
+
select: {
|
|
151
|
+
serviceCatalogId: true,
|
|
152
|
+
},
|
|
153
|
+
skip: 0,
|
|
154
|
+
limit: LIMIT_MAX,
|
|
155
|
+
props: {
|
|
156
|
+
isRoot: true,
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
if (serviceCatalogTelemetryServices.length === 0) {
|
|
160
|
+
logger.debug(`No service catalogs found for telemetry service ${telemetryServiceId.toString()}`);
|
|
161
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
162
|
+
repositories: [],
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// Extract service catalog IDs
|
|
166
|
+
const serviceCatalogIds = serviceCatalogTelemetryServices
|
|
167
|
+
.filter((s) => {
|
|
168
|
+
return s.serviceCatalogId;
|
|
169
|
+
})
|
|
170
|
+
.map((s) => {
|
|
171
|
+
return s.serviceCatalogId;
|
|
172
|
+
});
|
|
173
|
+
// Step 2: Find CodeRepositories linked to these ServiceCatalogs
|
|
174
|
+
const repositories = [];
|
|
175
|
+
for (const serviceCatalogId of serviceCatalogIds) {
|
|
176
|
+
const serviceCatalogCodeRepositories = await ServiceCatalogCodeRepositoryService.findBy({
|
|
177
|
+
query: {
|
|
178
|
+
serviceCatalogId: serviceCatalogId,
|
|
179
|
+
},
|
|
180
|
+
select: {
|
|
181
|
+
codeRepositoryId: true,
|
|
182
|
+
servicePathInRepository: true,
|
|
183
|
+
codeRepository: {
|
|
184
|
+
_id: true,
|
|
185
|
+
name: true,
|
|
186
|
+
repositoryHostedAt: true,
|
|
187
|
+
organizationName: true,
|
|
188
|
+
repositoryName: true,
|
|
189
|
+
mainBranchName: true,
|
|
190
|
+
gitHubAppInstallationId: true,
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
skip: 0,
|
|
194
|
+
limit: LIMIT_MAX,
|
|
195
|
+
props: {
|
|
196
|
+
isRoot: true,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
for (const scr of serviceCatalogCodeRepositories) {
|
|
200
|
+
if (scr.codeRepository) {
|
|
201
|
+
// Check if we already have this repository
|
|
202
|
+
const existingRepo = repositories.some((r) => {
|
|
203
|
+
var _a, _b;
|
|
204
|
+
return r.id === ((_b = (_a = scr.codeRepository) === null || _a === void 0 ? void 0 : _a._id) === null || _b === void 0 ? void 0 : _b.toString());
|
|
205
|
+
});
|
|
206
|
+
if (!existingRepo) {
|
|
207
|
+
repositories.push({
|
|
208
|
+
id: ((_a = scr.codeRepository._id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
|
|
209
|
+
name: scr.codeRepository.name || "",
|
|
210
|
+
repositoryHostedAt: scr.codeRepository.repositoryHostedAt || "",
|
|
211
|
+
organizationName: scr.codeRepository.organizationName || "",
|
|
212
|
+
repositoryName: scr.codeRepository.repositoryName || "",
|
|
213
|
+
mainBranchName: scr.codeRepository.mainBranchName || "main",
|
|
214
|
+
servicePathInRepository: scr.servicePathInRepository || null,
|
|
215
|
+
gitHubAppInstallationId: scr.codeRepository.gitHubAppInstallationId || null,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
logger.debug(`Found ${repositories.length} code repositories for telemetry service ${telemetryServiceId.toString()}`);
|
|
222
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
223
|
+
repositories: repositories,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
next(err);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
// Get access token for a code repository
|
|
231
|
+
this.router.post("/ai-agent-data/get-repository-token", async (req, res, next) => {
|
|
232
|
+
try {
|
|
233
|
+
const data = req.body;
|
|
234
|
+
// Validate AI Agent credentials
|
|
235
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
236
|
+
if (!aiAgent) {
|
|
237
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
238
|
+
}
|
|
239
|
+
// Get code repository ID
|
|
240
|
+
if (!data["codeRepositoryId"]) {
|
|
241
|
+
return Response.sendErrorResponse(req, res, new BadDataException("codeRepositoryId is required"));
|
|
242
|
+
}
|
|
243
|
+
const codeRepositoryId = new ObjectID(data["codeRepositoryId"]);
|
|
244
|
+
// Get code repository
|
|
245
|
+
const codeRepository = await CodeRepositoryService.findOneById({
|
|
246
|
+
id: codeRepositoryId,
|
|
247
|
+
select: {
|
|
248
|
+
_id: true,
|
|
249
|
+
repositoryHostedAt: true,
|
|
250
|
+
organizationName: true,
|
|
251
|
+
repositoryName: true,
|
|
252
|
+
gitHubAppInstallationId: true,
|
|
253
|
+
},
|
|
254
|
+
props: {
|
|
255
|
+
isRoot: true,
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
if (!codeRepository) {
|
|
259
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Code repository not found"));
|
|
260
|
+
}
|
|
261
|
+
// Currently only supporting GitHub
|
|
262
|
+
if (codeRepository.repositoryHostedAt !== CodeRepositoryType.GitHub) {
|
|
263
|
+
return Response.sendErrorResponse(req, res, new BadDataException(`Repository type ${codeRepository.repositoryHostedAt} is not yet supported`));
|
|
264
|
+
}
|
|
265
|
+
// Check if we have a GitHub App installation ID
|
|
266
|
+
if (!codeRepository.gitHubAppInstallationId) {
|
|
267
|
+
return Response.sendErrorResponse(req, res, new BadDataException("No GitHub App installation ID found for this repository"));
|
|
268
|
+
}
|
|
269
|
+
// Generate GitHub installation access token
|
|
270
|
+
const tokenData = await GitHubUtil.getInstallationAccessToken(codeRepository.gitHubAppInstallationId);
|
|
271
|
+
const repositoryUrl = `https://github.com/${codeRepository.organizationName}/${codeRepository.repositoryName}.git`;
|
|
272
|
+
logger.debug(`Generated access token for repository ${codeRepository.organizationName}/${codeRepository.repositoryName}`);
|
|
273
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
274
|
+
token: tokenData.token,
|
|
275
|
+
expiresAt: tokenData.expiresAt,
|
|
276
|
+
repositoryUrl: repositoryUrl,
|
|
277
|
+
organizationName: codeRepository.organizationName,
|
|
278
|
+
repositoryName: codeRepository.repositoryName,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
next(err);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
// Record a pull request created by the AI Agent
|
|
286
|
+
this.router.post("/ai-agent-data/record-pull-request", async (req, res, next) => {
|
|
287
|
+
var _a;
|
|
288
|
+
try {
|
|
289
|
+
const data = req.body;
|
|
290
|
+
// Validate AI Agent credentials
|
|
291
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
292
|
+
if (!aiAgent) {
|
|
293
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
294
|
+
}
|
|
295
|
+
// Validate required fields
|
|
296
|
+
if (!data["taskId"]) {
|
|
297
|
+
return Response.sendErrorResponse(req, res, new BadDataException("taskId is required"));
|
|
298
|
+
}
|
|
299
|
+
if (!data["codeRepositoryId"]) {
|
|
300
|
+
return Response.sendErrorResponse(req, res, new BadDataException("codeRepositoryId is required"));
|
|
301
|
+
}
|
|
302
|
+
if (!data["pullRequestUrl"]) {
|
|
303
|
+
return Response.sendErrorResponse(req, res, new BadDataException("pullRequestUrl is required"));
|
|
304
|
+
}
|
|
305
|
+
if (!data["title"]) {
|
|
306
|
+
return Response.sendErrorResponse(req, res, new BadDataException("title is required"));
|
|
307
|
+
}
|
|
308
|
+
const taskId = new ObjectID(data["taskId"]);
|
|
309
|
+
const codeRepositoryId = new ObjectID(data["codeRepositoryId"]);
|
|
310
|
+
const pullRequestUrl = data["pullRequestUrl"];
|
|
311
|
+
const pullRequestNumber = data["pullRequestNumber"];
|
|
312
|
+
const pullRequestId = data["pullRequestId"];
|
|
313
|
+
const title = data["title"];
|
|
314
|
+
const description = data["description"];
|
|
315
|
+
const headRefName = data["headRefName"];
|
|
316
|
+
const baseRefName = data["baseRefName"];
|
|
317
|
+
// Get the task to get the project ID
|
|
318
|
+
const task = await AIAgentTaskService.findOneById({
|
|
319
|
+
id: taskId,
|
|
320
|
+
select: {
|
|
321
|
+
_id: true,
|
|
322
|
+
projectId: true,
|
|
323
|
+
},
|
|
324
|
+
props: {
|
|
325
|
+
isRoot: true,
|
|
326
|
+
},
|
|
327
|
+
});
|
|
328
|
+
if (!task) {
|
|
329
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Task not found"));
|
|
330
|
+
}
|
|
331
|
+
// Get code repository for organization and repo name
|
|
332
|
+
const codeRepository = await CodeRepositoryService.findOneById({
|
|
333
|
+
id: codeRepositoryId,
|
|
334
|
+
select: {
|
|
335
|
+
_id: true,
|
|
336
|
+
organizationName: true,
|
|
337
|
+
repositoryName: true,
|
|
338
|
+
},
|
|
339
|
+
props: {
|
|
340
|
+
isRoot: true,
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
// Create the pull request record
|
|
344
|
+
const pullRequest = new AIAgentTaskPullRequest();
|
|
345
|
+
if (task.projectId) {
|
|
346
|
+
pullRequest.projectId = task.projectId;
|
|
347
|
+
}
|
|
348
|
+
pullRequest.aiAgentTaskId = taskId;
|
|
349
|
+
pullRequest.aiAgentId = aiAgent.id;
|
|
350
|
+
pullRequest.codeRepositoryId = codeRepositoryId;
|
|
351
|
+
pullRequest.pullRequestUrl = URL.fromString(pullRequestUrl);
|
|
352
|
+
if (pullRequestNumber !== undefined) {
|
|
353
|
+
pullRequest.pullRequestNumber = pullRequestNumber;
|
|
354
|
+
}
|
|
355
|
+
if (pullRequestId !== undefined) {
|
|
356
|
+
pullRequest.pullRequestId = pullRequestId;
|
|
357
|
+
}
|
|
358
|
+
pullRequest.title = title;
|
|
359
|
+
if (description) {
|
|
360
|
+
pullRequest.description = description;
|
|
361
|
+
}
|
|
362
|
+
pullRequest.pullRequestState = PullRequestState.Open;
|
|
363
|
+
if (headRefName) {
|
|
364
|
+
pullRequest.headRefName = headRefName;
|
|
365
|
+
}
|
|
366
|
+
if (baseRefName) {
|
|
367
|
+
pullRequest.baseRefName = baseRefName;
|
|
368
|
+
}
|
|
369
|
+
if (codeRepository === null || codeRepository === void 0 ? void 0 : codeRepository.organizationName) {
|
|
370
|
+
pullRequest.repoOrganizationName = codeRepository.organizationName;
|
|
371
|
+
}
|
|
372
|
+
if (codeRepository === null || codeRepository === void 0 ? void 0 : codeRepository.repositoryName) {
|
|
373
|
+
pullRequest.repoName = codeRepository.repositoryName;
|
|
374
|
+
}
|
|
375
|
+
const createdPullRequest = await AIAgentTaskPullRequestService.create({
|
|
376
|
+
data: pullRequest,
|
|
377
|
+
props: {
|
|
378
|
+
isRoot: true,
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
logger.debug(`Recorded pull request ${pullRequestUrl} for task ${taskId.toString()}`);
|
|
382
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
383
|
+
success: true,
|
|
384
|
+
pullRequestId: (_a = createdPullRequest._id) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
next(err);
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
// Validate AI Agent credentials from request body
|
|
393
|
+
async validateAIAgent(data) {
|
|
394
|
+
if (!data["aiAgentId"] || !data["aiAgentKey"]) {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
const aiAgentId = new ObjectID(data["aiAgentId"]);
|
|
398
|
+
const aiAgentKey = data["aiAgentKey"];
|
|
399
|
+
const aiAgent = await AIAgentService.findOneBy({
|
|
400
|
+
query: {
|
|
401
|
+
_id: aiAgentId.toString(),
|
|
402
|
+
key: aiAgentKey,
|
|
403
|
+
},
|
|
404
|
+
select: {
|
|
405
|
+
_id: true,
|
|
406
|
+
projectId: true, // Fetch projectId to check if this is a global or project AI agent
|
|
407
|
+
},
|
|
408
|
+
props: {
|
|
409
|
+
isRoot: true,
|
|
410
|
+
},
|
|
411
|
+
});
|
|
412
|
+
return aiAgent;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=AIAgentDataAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentDataAPI.js","sourceRoot":"","sources":["../../../../Server/API/AIAgentDataAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import AIAgentService from "../Services/AIAgentService";
|
|
2
|
+
import AIAgentTaskService from "../Services/AIAgentTaskService";
|
|
3
|
+
import Response from "../Utils/Response";
|
|
4
|
+
import BaseAPI from "./BaseAPI";
|
|
5
|
+
import AIAgentTask from "../../Models/DatabaseModels/AIAgentTask";
|
|
6
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
7
|
+
import ObjectID from "../../Types/ObjectID";
|
|
8
|
+
import OneUptimeDate from "../../Types/Date";
|
|
9
|
+
import AIAgentTaskStatus from "../../Types/AI/AIAgentTaskStatus";
|
|
10
|
+
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
11
|
+
export default class AIAgentTaskAPI extends BaseAPI {
|
|
12
|
+
constructor() {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
super(AIAgentTask, AIAgentTaskService);
|
|
15
|
+
/*
|
|
16
|
+
* Get the next pending (scheduled) task for processing
|
|
17
|
+
* Validates aiAgentId and aiAgentKey before returning task
|
|
18
|
+
*/
|
|
19
|
+
this.router.post(`${(_a = new this.entityType().getCrudApiPath()) === null || _a === void 0 ? void 0 : _a.toString()}/get-pending-task`, async (req, res, next) => {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
try {
|
|
22
|
+
const data = req.body;
|
|
23
|
+
/* Validate AI Agent credentials */
|
|
24
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
25
|
+
if (!aiAgent) {
|
|
26
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
27
|
+
}
|
|
28
|
+
/* Fetch one scheduled task, sorted by createdAt (oldest first) */
|
|
29
|
+
const task = await AIAgentTaskService.findOneBy({
|
|
30
|
+
query: {
|
|
31
|
+
status: AIAgentTaskStatus.Scheduled,
|
|
32
|
+
},
|
|
33
|
+
sort: {
|
|
34
|
+
createdAt: SortOrder.Ascending,
|
|
35
|
+
},
|
|
36
|
+
select: {
|
|
37
|
+
_id: true,
|
|
38
|
+
projectId: true,
|
|
39
|
+
taskType: true,
|
|
40
|
+
metadata: true,
|
|
41
|
+
createdAt: true,
|
|
42
|
+
},
|
|
43
|
+
props: {
|
|
44
|
+
isRoot: true,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
if (!task) {
|
|
48
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
49
|
+
task: null,
|
|
50
|
+
message: "No pending tasks available",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
54
|
+
task: {
|
|
55
|
+
_id: (_a = task._id) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
56
|
+
projectId: (_b = task.projectId) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
57
|
+
taskType: task.taskType,
|
|
58
|
+
metadata: task.metadata,
|
|
59
|
+
createdAt: task.createdAt,
|
|
60
|
+
},
|
|
61
|
+
message: "Task fetched successfully",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
next(err);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
/*
|
|
69
|
+
* Get the count of pending (scheduled) tasks for KEDA autoscaling
|
|
70
|
+
* Validates aiAgentId and aiAgentKey before returning count
|
|
71
|
+
*/
|
|
72
|
+
this.router.post(`${(_b = new this.entityType().getCrudApiPath()) === null || _b === void 0 ? void 0 : _b.toString()}/get-pending-task-count`, async (req, res, next) => {
|
|
73
|
+
try {
|
|
74
|
+
const data = req.body;
|
|
75
|
+
/* Validate AI Agent credentials */
|
|
76
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
77
|
+
if (!aiAgent) {
|
|
78
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
79
|
+
}
|
|
80
|
+
/* Count scheduled tasks */
|
|
81
|
+
const count = await AIAgentTaskService.countBy({
|
|
82
|
+
query: {
|
|
83
|
+
status: AIAgentTaskStatus.Scheduled,
|
|
84
|
+
},
|
|
85
|
+
props: {
|
|
86
|
+
isRoot: true,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
90
|
+
count: count,
|
|
91
|
+
message: "Pending task count fetched successfully",
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
next(err);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
/*
|
|
99
|
+
* Update task status (InProgress, Completed, Error)
|
|
100
|
+
* Validates aiAgentId and aiAgentKey before updating
|
|
101
|
+
*/
|
|
102
|
+
this.router.post(`${(_c = new this.entityType().getCrudApiPath()) === null || _c === void 0 ? void 0 : _c.toString()}/update-task-status`, async (req, res, next) => {
|
|
103
|
+
try {
|
|
104
|
+
const data = req.body;
|
|
105
|
+
/* Validate AI Agent credentials */
|
|
106
|
+
const aiAgent = await this.validateAIAgent(data);
|
|
107
|
+
if (!aiAgent) {
|
|
108
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Invalid AI Agent ID or AI Agent Key"));
|
|
109
|
+
}
|
|
110
|
+
/* Validate required fields */
|
|
111
|
+
if (!data["taskId"]) {
|
|
112
|
+
return Response.sendErrorResponse(req, res, new BadDataException("taskId is required"));
|
|
113
|
+
}
|
|
114
|
+
if (!data["status"]) {
|
|
115
|
+
return Response.sendErrorResponse(req, res, new BadDataException("status is required"));
|
|
116
|
+
}
|
|
117
|
+
const taskId = new ObjectID(data["taskId"]);
|
|
118
|
+
const status = data["status"];
|
|
119
|
+
const statusMessage = data["statusMessage"];
|
|
120
|
+
/* Validate status value */
|
|
121
|
+
const validStatuses = [
|
|
122
|
+
AIAgentTaskStatus.InProgress,
|
|
123
|
+
AIAgentTaskStatus.Completed,
|
|
124
|
+
AIAgentTaskStatus.Error,
|
|
125
|
+
];
|
|
126
|
+
if (!validStatuses.includes(status)) {
|
|
127
|
+
return Response.sendErrorResponse(req, res, new BadDataException(`Invalid status. Must be one of: ${validStatuses.join(", ")}`));
|
|
128
|
+
}
|
|
129
|
+
/* Check if task exists */
|
|
130
|
+
const existingTask = await AIAgentTaskService.findOneById({
|
|
131
|
+
id: taskId,
|
|
132
|
+
select: {
|
|
133
|
+
_id: true,
|
|
134
|
+
status: true,
|
|
135
|
+
},
|
|
136
|
+
props: {
|
|
137
|
+
isRoot: true,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
if (!existingTask) {
|
|
141
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Task not found"));
|
|
142
|
+
}
|
|
143
|
+
/* Update the task based on status */
|
|
144
|
+
if (status === AIAgentTaskStatus.InProgress) {
|
|
145
|
+
await AIAgentTaskService.updateOneById({
|
|
146
|
+
id: taskId,
|
|
147
|
+
data: Object.assign(Object.assign(Object.assign({ status: status }, (aiAgent.id && { aiAgentId: aiAgent.id })), { startedAt: OneUptimeDate.getCurrentDate() }), (statusMessage && { statusMessage: statusMessage })),
|
|
148
|
+
props: {
|
|
149
|
+
isRoot: true,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else if (status === AIAgentTaskStatus.Completed ||
|
|
154
|
+
status === AIAgentTaskStatus.Error) {
|
|
155
|
+
await AIAgentTaskService.updateOneById({
|
|
156
|
+
id: taskId,
|
|
157
|
+
data: Object.assign({ status: status, completedAt: OneUptimeDate.getCurrentDate() }, (statusMessage && { statusMessage: statusMessage })),
|
|
158
|
+
props: {
|
|
159
|
+
isRoot: true,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
164
|
+
taskId: taskId.toString(),
|
|
165
|
+
status: status,
|
|
166
|
+
message: "Task status updated successfully",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
next(err);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/*
|
|
175
|
+
* Validate AI Agent credentials from request body
|
|
176
|
+
* Returns AIAgent if valid, null otherwise
|
|
177
|
+
*/
|
|
178
|
+
async validateAIAgent(data) {
|
|
179
|
+
if (!data["aiAgentId"] || !data["aiAgentKey"]) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
const aiAgentId = new ObjectID(data["aiAgentId"]);
|
|
183
|
+
const aiAgentKey = data["aiAgentKey"];
|
|
184
|
+
const aiAgent = await AIAgentService.findOneBy({
|
|
185
|
+
query: {
|
|
186
|
+
_id: aiAgentId.toString(),
|
|
187
|
+
key: aiAgentKey,
|
|
188
|
+
},
|
|
189
|
+
select: {
|
|
190
|
+
_id: true,
|
|
191
|
+
},
|
|
192
|
+
props: {
|
|
193
|
+
isRoot: true,
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
return aiAgent;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=AIAgentTaskAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentTaskAPI.js","sourceRoot":"","sources":["../../../../Server/API/AIAgentTaskAPI.ts"],"names":[],"mappings":"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"}
|