@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,471 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import DatabaseService from "./DatabaseService";
|
|
11
|
+
import ObjectID from "../../Types/ObjectID";
|
|
12
|
+
import Version from "../../Types/Version";
|
|
13
|
+
import Model, { AIAgentConnectionStatus, } from "../../Models/DatabaseModels/AIAgent";
|
|
14
|
+
import AIAgentOwnerUserService from "./AIAgentOwnerUserService";
|
|
15
|
+
import LIMIT_MAX, { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
16
|
+
import AIAgentOwnerTeamService from "./AIAgentOwnerTeamService";
|
|
17
|
+
import TeamMemberService from "./TeamMemberService";
|
|
18
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
19
|
+
import ProjectService from "./ProjectService";
|
|
20
|
+
import OneUptimeDate from "../../Types/Date";
|
|
21
|
+
import UserNotificationSettingService from "./UserNotificationSettingService";
|
|
22
|
+
import NotificationSettingEventType from "../../Types/NotificationSetting/NotificationSettingEventType";
|
|
23
|
+
import logger from "../Utils/Logger";
|
|
24
|
+
import EmailTemplateType from "../../Types/Email/EmailTemplateType";
|
|
25
|
+
import DatabaseConfig from "../DatabaseConfig";
|
|
26
|
+
import URL from "../../Types/API/URL";
|
|
27
|
+
import PushNotificationUtil from "../Utils/PushNotificationUtil";
|
|
28
|
+
import { createWhatsAppMessageFromTemplate } from "../Utils/WhatsAppTemplateUtil";
|
|
29
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
30
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
31
|
+
import GlobalCache from "../Infrastructure/GlobalCache";
|
|
32
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
33
|
+
export class Service extends DatabaseService {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(Model);
|
|
36
|
+
}
|
|
37
|
+
async saveLastAliveInCache(aiAgentId, lastAlive) {
|
|
38
|
+
if (!aiAgentId) {
|
|
39
|
+
throw new BadDataException("aiAgentId is required");
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
await GlobalCache.setString("ai-agent-last-alive", aiAgentId.toString(), OneUptimeDate.toString(lastAlive));
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
logger.error("Error in saving last alive in cache");
|
|
46
|
+
logger.error(err);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async shouldSaveLastAlive(aiAgentId) {
|
|
50
|
+
const now = OneUptimeDate.getCurrentDate();
|
|
51
|
+
try {
|
|
52
|
+
// before we hit the database, we need to check if the lastAlive was updated in Global Cache.
|
|
53
|
+
const previousLastAliveCheck = await GlobalCache.getString("ai-agent-last-alive", aiAgentId.toString());
|
|
54
|
+
if (!previousLastAliveCheck) {
|
|
55
|
+
await this.saveLastAliveInCache(aiAgentId, now);
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
const previousLastAliveCheckDate = OneUptimeDate.fromString(previousLastAliveCheck);
|
|
59
|
+
// if this date is within 30 seconds of current date, then we will not update the last alive.
|
|
60
|
+
if (previousLastAliveCheckDate) {
|
|
61
|
+
const diff = OneUptimeDate.getDifferenceInSeconds(now, previousLastAliveCheckDate);
|
|
62
|
+
if (diff < 30) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
await this.saveLastAliveInCache(aiAgentId, now);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
// failed to hit the cache, so we will hit the database
|
|
70
|
+
logger.error("Error in getting last alive from cache");
|
|
71
|
+
logger.error(err);
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
async updateLastAlive(aiAgentId) {
|
|
76
|
+
if (!aiAgentId) {
|
|
77
|
+
throw new BadDataException("aiAgentId is required");
|
|
78
|
+
}
|
|
79
|
+
const shouldSaveLastAlive = await this.shouldSaveLastAlive(aiAgentId);
|
|
80
|
+
if (!shouldSaveLastAlive) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const now = OneUptimeDate.getCurrentDate();
|
|
84
|
+
await this.updateOneById({
|
|
85
|
+
id: aiAgentId,
|
|
86
|
+
data: {
|
|
87
|
+
lastAlive: now,
|
|
88
|
+
},
|
|
89
|
+
props: {
|
|
90
|
+
isRoot: true,
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
async onBeforeCreate(createBy) {
|
|
95
|
+
if (!createBy.data.key) {
|
|
96
|
+
createBy.data.key = ObjectID.generate().toString();
|
|
97
|
+
}
|
|
98
|
+
if (!createBy.data.aiAgentVersion) {
|
|
99
|
+
createBy.data.aiAgentVersion = new Version("1.0.0");
|
|
100
|
+
}
|
|
101
|
+
// When creating a new AI Agent, set it as default by default
|
|
102
|
+
if (createBy.data.isDefault === undefined) {
|
|
103
|
+
createBy.data.isDefault = true;
|
|
104
|
+
}
|
|
105
|
+
// If this agent is being set as default, unset other defaults in the same project
|
|
106
|
+
if (createBy.data.isDefault && createBy.data.projectId) {
|
|
107
|
+
await this.updateBy({
|
|
108
|
+
query: {
|
|
109
|
+
projectId: createBy.data.projectId,
|
|
110
|
+
isDefault: true,
|
|
111
|
+
},
|
|
112
|
+
data: {
|
|
113
|
+
isDefault: false,
|
|
114
|
+
},
|
|
115
|
+
props: {
|
|
116
|
+
isRoot: true,
|
|
117
|
+
},
|
|
118
|
+
limit: LIMIT_MAX,
|
|
119
|
+
skip: 0,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return { createBy: createBy, carryForward: [] };
|
|
123
|
+
}
|
|
124
|
+
async getOwners(aiAgentId) {
|
|
125
|
+
if (!aiAgentId) {
|
|
126
|
+
throw new BadDataException("aiAgentId is required");
|
|
127
|
+
}
|
|
128
|
+
const ownerUsers = await AIAgentOwnerUserService.findBy({
|
|
129
|
+
query: {
|
|
130
|
+
aiAgentId: aiAgentId,
|
|
131
|
+
},
|
|
132
|
+
select: {
|
|
133
|
+
_id: true,
|
|
134
|
+
user: {
|
|
135
|
+
_id: true,
|
|
136
|
+
email: true,
|
|
137
|
+
name: true,
|
|
138
|
+
timezone: true,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
props: {
|
|
142
|
+
isRoot: true,
|
|
143
|
+
},
|
|
144
|
+
limit: LIMIT_PER_PROJECT,
|
|
145
|
+
skip: 0,
|
|
146
|
+
});
|
|
147
|
+
const ownerTeams = await AIAgentOwnerTeamService.findBy({
|
|
148
|
+
query: {
|
|
149
|
+
aiAgentId: aiAgentId,
|
|
150
|
+
},
|
|
151
|
+
select: {
|
|
152
|
+
_id: true,
|
|
153
|
+
teamId: true,
|
|
154
|
+
},
|
|
155
|
+
skip: 0,
|
|
156
|
+
limit: LIMIT_PER_PROJECT,
|
|
157
|
+
props: {
|
|
158
|
+
isRoot: true,
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
const users = ownerUsers.map((ownerUser) => {
|
|
162
|
+
return ownerUser.user;
|
|
163
|
+
}) || [];
|
|
164
|
+
if (ownerTeams.length > 0) {
|
|
165
|
+
const teamIds = ownerTeams.map((ownerTeam) => {
|
|
166
|
+
return ownerTeam.teamId;
|
|
167
|
+
}) || [];
|
|
168
|
+
const teamUsers = await TeamMemberService.getUsersInTeams(teamIds);
|
|
169
|
+
for (const teamUser of teamUsers) {
|
|
170
|
+
//check if the user is already added.
|
|
171
|
+
const isUserAlreadyAdded = users.find((user) => {
|
|
172
|
+
return user.id.toString() === teamUser.id.toString();
|
|
173
|
+
});
|
|
174
|
+
if (!isUserAlreadyAdded) {
|
|
175
|
+
users.push(teamUser);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return users;
|
|
180
|
+
}
|
|
181
|
+
async onBeforeUpdate(updateBy) {
|
|
182
|
+
const carryForward = {
|
|
183
|
+
aiAgentsToNotifyOwners: [],
|
|
184
|
+
};
|
|
185
|
+
if (updateBy.data.connectionStatus && updateBy.query._id) {
|
|
186
|
+
const aiAgents = await this.findBy({
|
|
187
|
+
query: updateBy.query,
|
|
188
|
+
props: {
|
|
189
|
+
isRoot: true,
|
|
190
|
+
},
|
|
191
|
+
select: {
|
|
192
|
+
_id: true,
|
|
193
|
+
connectionStatus: true,
|
|
194
|
+
},
|
|
195
|
+
skip: 0,
|
|
196
|
+
limit: LIMIT_MAX,
|
|
197
|
+
});
|
|
198
|
+
const aiAgentsToNotifyOwners = aiAgents.filter((aiAgent) => {
|
|
199
|
+
return (aiAgent.connectionStatus &&
|
|
200
|
+
aiAgent.connectionStatus !== updateBy.data.connectionStatus);
|
|
201
|
+
});
|
|
202
|
+
carryForward.aiAgentsToNotifyOwners = aiAgentsToNotifyOwners;
|
|
203
|
+
}
|
|
204
|
+
// If setting isDefault to true, we need to unset other defaults in the same project
|
|
205
|
+
if (updateBy.data.isDefault === true) {
|
|
206
|
+
// Get the items being updated to find their project IDs
|
|
207
|
+
const itemsToUpdate = await this.findBy({
|
|
208
|
+
query: updateBy.query,
|
|
209
|
+
select: {
|
|
210
|
+
_id: true,
|
|
211
|
+
projectId: true,
|
|
212
|
+
},
|
|
213
|
+
props: {
|
|
214
|
+
isRoot: true,
|
|
215
|
+
},
|
|
216
|
+
limit: LIMIT_MAX,
|
|
217
|
+
skip: 0,
|
|
218
|
+
});
|
|
219
|
+
// Collect unique project IDs
|
|
220
|
+
const projectIds = new Set();
|
|
221
|
+
const itemIds = new Set();
|
|
222
|
+
for (const item of itemsToUpdate) {
|
|
223
|
+
if (item.projectId) {
|
|
224
|
+
projectIds.add(item.projectId.toString());
|
|
225
|
+
}
|
|
226
|
+
if (item._id) {
|
|
227
|
+
itemIds.add(item._id);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// For each project, unset the default on other agents
|
|
231
|
+
for (const projectIdStr of projectIds) {
|
|
232
|
+
const projectId = new ObjectID(projectIdStr);
|
|
233
|
+
await this.updateBy({
|
|
234
|
+
query: {
|
|
235
|
+
projectId: projectId,
|
|
236
|
+
isDefault: true,
|
|
237
|
+
_id: QueryHelper.notInOrNull(Array.from(itemIds)),
|
|
238
|
+
},
|
|
239
|
+
data: {
|
|
240
|
+
isDefault: false,
|
|
241
|
+
},
|
|
242
|
+
props: {
|
|
243
|
+
isRoot: true,
|
|
244
|
+
},
|
|
245
|
+
limit: LIMIT_MAX,
|
|
246
|
+
skip: 0,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return { updateBy: updateBy, carryForward };
|
|
251
|
+
}
|
|
252
|
+
async onUpdateSuccess(onUpdate, _updatedItemIds) {
|
|
253
|
+
if (onUpdate.carryForward &&
|
|
254
|
+
onUpdate.carryForward.aiAgentsToNotifyOwners.length > 0) {
|
|
255
|
+
for (const aiAgent of onUpdate.carryForward.aiAgentsToNotifyOwners) {
|
|
256
|
+
await this.notifyOwnersOnStatusChange({
|
|
257
|
+
aiAgentId: aiAgent.id,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return Promise.resolve(onUpdate);
|
|
262
|
+
}
|
|
263
|
+
async notifyOwnersOnStatusChange(data) {
|
|
264
|
+
var _a, _b;
|
|
265
|
+
const aiAgent = await this.findOneById({
|
|
266
|
+
id: data.aiAgentId,
|
|
267
|
+
props: {
|
|
268
|
+
isRoot: true,
|
|
269
|
+
},
|
|
270
|
+
select: {
|
|
271
|
+
_id: true,
|
|
272
|
+
lastAlive: true,
|
|
273
|
+
connectionStatus: true,
|
|
274
|
+
isGlobalAIAgent: true,
|
|
275
|
+
name: true,
|
|
276
|
+
description: true,
|
|
277
|
+
projectId: true,
|
|
278
|
+
project: {
|
|
279
|
+
name: true,
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
if (!aiAgent || !aiAgent.id) {
|
|
284
|
+
throw new BadDataException("AI Agent not found");
|
|
285
|
+
}
|
|
286
|
+
if (!aiAgent.projectId) {
|
|
287
|
+
return; // might be global AI agent. Do not notify.
|
|
288
|
+
}
|
|
289
|
+
if (aiAgent.isGlobalAIAgent && IsBillingEnabled) {
|
|
290
|
+
return; // do not notify for global AI agents.
|
|
291
|
+
}
|
|
292
|
+
// notify the AI agent owner
|
|
293
|
+
let owners = await this.getOwners(aiAgent.id);
|
|
294
|
+
let doesResourceHasOwners = true;
|
|
295
|
+
if (owners.length === 0) {
|
|
296
|
+
doesResourceHasOwners = false;
|
|
297
|
+
// find project owners.
|
|
298
|
+
owners = await ProjectService.getOwners(aiAgent.projectId);
|
|
299
|
+
}
|
|
300
|
+
if (owners.length === 0) {
|
|
301
|
+
return; // no owners to notify.
|
|
302
|
+
}
|
|
303
|
+
const connectionStatus = aiAgent.connectionStatus === AIAgentConnectionStatus.Connected
|
|
304
|
+
? "Connected"
|
|
305
|
+
: "Disconnected";
|
|
306
|
+
for (const user of owners) {
|
|
307
|
+
try {
|
|
308
|
+
const vars = {
|
|
309
|
+
title: `${aiAgent.name} is ${connectionStatus}`,
|
|
310
|
+
aiAgentName: aiAgent.name || "AI Agent",
|
|
311
|
+
aiAgentDescription: aiAgent.description || "No description provided",
|
|
312
|
+
projectName: ((_a = aiAgent.project) === null || _a === void 0 ? void 0 : _a.name) || "Project",
|
|
313
|
+
aiAgentStatus: connectionStatus || "Unknown",
|
|
314
|
+
lastAlive: OneUptimeDate.getDateAsFormattedHTMLInMultipleTimezones({
|
|
315
|
+
date: aiAgent.lastAlive || OneUptimeDate.getCurrentDate(),
|
|
316
|
+
timezones: user.timezone ? [user.timezone] : [],
|
|
317
|
+
}),
|
|
318
|
+
viewAIAgentsLink: (await this.getLinkInDashboard(aiAgent.projectId, aiAgent.id)).toString(),
|
|
319
|
+
};
|
|
320
|
+
if (doesResourceHasOwners === true) {
|
|
321
|
+
vars["isOwner"] = "true";
|
|
322
|
+
}
|
|
323
|
+
const emailMessage = {
|
|
324
|
+
templateType: EmailTemplateType.AIAgentConnectionStatusChange,
|
|
325
|
+
vars: vars,
|
|
326
|
+
subject: `[AI Agent ${connectionStatus}] ${aiAgent.name}`,
|
|
327
|
+
};
|
|
328
|
+
const sms = {
|
|
329
|
+
message: `This is a message from OneUptime. AI Agent ${aiAgent.name} is ${connectionStatus}. To unsubscribe from this notification go to User Settings in OneUptime Dashboard.`,
|
|
330
|
+
};
|
|
331
|
+
const callMessage = {
|
|
332
|
+
data: [
|
|
333
|
+
{
|
|
334
|
+
sayMessage: `This is a message from OneUptime. AI Agent ${aiAgent.name} is ${connectionStatus}. To unsubscribe from this notification go to User Settings in OneUptime Dashboard. Good bye.`,
|
|
335
|
+
},
|
|
336
|
+
],
|
|
337
|
+
};
|
|
338
|
+
const pushMessageParams = {
|
|
339
|
+
aiAgentName: aiAgent.name,
|
|
340
|
+
projectName: ((_b = aiAgent.project) === null || _b === void 0 ? void 0 : _b.name) || "Project",
|
|
341
|
+
connectionStatus: connectionStatus,
|
|
342
|
+
};
|
|
343
|
+
if (vars["viewAIAgentsLink"]) {
|
|
344
|
+
pushMessageParams.clickAction = vars["viewAIAgentsLink"];
|
|
345
|
+
}
|
|
346
|
+
const pushMessage = PushNotificationUtil.createAIAgentStatusChangedNotification(pushMessageParams);
|
|
347
|
+
const eventType = NotificationSettingEventType.SEND_AI_AGENT_STATUS_CHANGED_OWNER_NOTIFICATION;
|
|
348
|
+
const whatsAppMessage = createWhatsAppMessageFromTemplate({
|
|
349
|
+
eventType,
|
|
350
|
+
templateVariables: {
|
|
351
|
+
ai_agent_name: aiAgent.name,
|
|
352
|
+
ai_agent_status: connectionStatus,
|
|
353
|
+
ai_agent_link: vars["viewAIAgentsLink"] || "",
|
|
354
|
+
},
|
|
355
|
+
});
|
|
356
|
+
await UserNotificationSettingService.sendUserNotification({
|
|
357
|
+
userId: user.id,
|
|
358
|
+
projectId: aiAgent.projectId,
|
|
359
|
+
emailEnvelope: emailMessage,
|
|
360
|
+
smsMessage: sms,
|
|
361
|
+
callRequestMessage: callMessage,
|
|
362
|
+
pushNotificationMessage: pushMessage,
|
|
363
|
+
whatsAppMessage,
|
|
364
|
+
eventType,
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
catch (e) {
|
|
368
|
+
logger.error("Error in sending AI agent status changed resource notification");
|
|
369
|
+
logger.error(e);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
async getLinkInDashboard(projectId, aiAgentId) {
|
|
374
|
+
const dashboardUrl = await DatabaseConfig.getDashboardUrl();
|
|
375
|
+
return URL.fromString(dashboardUrl.toString()).addRoute(`/${projectId.toString()}/settings/ai-agents/${aiAgentId.toString()}`);
|
|
376
|
+
}
|
|
377
|
+
async getAIAgentForProject(projectId) {
|
|
378
|
+
// First try to get the default AI agent for the project
|
|
379
|
+
let agent = await this.findOneBy({
|
|
380
|
+
query: {
|
|
381
|
+
projectId: projectId,
|
|
382
|
+
isDefault: true,
|
|
383
|
+
},
|
|
384
|
+
select: {
|
|
385
|
+
_id: true,
|
|
386
|
+
name: true,
|
|
387
|
+
description: true,
|
|
388
|
+
key: true,
|
|
389
|
+
aiAgentVersion: true,
|
|
390
|
+
connectionStatus: true,
|
|
391
|
+
isGlobalAIAgent: true,
|
|
392
|
+
lastAlive: true,
|
|
393
|
+
},
|
|
394
|
+
props: {
|
|
395
|
+
isRoot: true,
|
|
396
|
+
},
|
|
397
|
+
});
|
|
398
|
+
if (agent) {
|
|
399
|
+
return agent;
|
|
400
|
+
}
|
|
401
|
+
// If no default agent, get any global AI agent
|
|
402
|
+
agent = await this.findOneBy({
|
|
403
|
+
query: {
|
|
404
|
+
projectId: QueryHelper.isNull(),
|
|
405
|
+
isGlobalAIAgent: true,
|
|
406
|
+
},
|
|
407
|
+
select: {
|
|
408
|
+
_id: true,
|
|
409
|
+
name: true,
|
|
410
|
+
description: true,
|
|
411
|
+
key: true,
|
|
412
|
+
aiAgentVersion: true,
|
|
413
|
+
connectionStatus: true,
|
|
414
|
+
isGlobalAIAgent: true,
|
|
415
|
+
lastAlive: true,
|
|
416
|
+
},
|
|
417
|
+
props: {
|
|
418
|
+
isRoot: true,
|
|
419
|
+
},
|
|
420
|
+
});
|
|
421
|
+
if (agent) {
|
|
422
|
+
return agent;
|
|
423
|
+
}
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
__decorate([
|
|
428
|
+
CaptureSpan(),
|
|
429
|
+
__metadata("design:type", Function),
|
|
430
|
+
__metadata("design:paramtypes", [Object]),
|
|
431
|
+
__metadata("design:returntype", Promise)
|
|
432
|
+
], Service.prototype, "onBeforeCreate", null);
|
|
433
|
+
__decorate([
|
|
434
|
+
CaptureSpan(),
|
|
435
|
+
__metadata("design:type", Function),
|
|
436
|
+
__metadata("design:paramtypes", [ObjectID]),
|
|
437
|
+
__metadata("design:returntype", Promise)
|
|
438
|
+
], Service.prototype, "getOwners", null);
|
|
439
|
+
__decorate([
|
|
440
|
+
CaptureSpan(),
|
|
441
|
+
__metadata("design:type", Function),
|
|
442
|
+
__metadata("design:paramtypes", [Object]),
|
|
443
|
+
__metadata("design:returntype", Promise)
|
|
444
|
+
], Service.prototype, "onBeforeUpdate", null);
|
|
445
|
+
__decorate([
|
|
446
|
+
CaptureSpan(),
|
|
447
|
+
__metadata("design:type", Function),
|
|
448
|
+
__metadata("design:paramtypes", [Object, Array]),
|
|
449
|
+
__metadata("design:returntype", Promise)
|
|
450
|
+
], Service.prototype, "onUpdateSuccess", null);
|
|
451
|
+
__decorate([
|
|
452
|
+
CaptureSpan(),
|
|
453
|
+
__metadata("design:type", Function),
|
|
454
|
+
__metadata("design:paramtypes", [Object]),
|
|
455
|
+
__metadata("design:returntype", Promise)
|
|
456
|
+
], Service.prototype, "notifyOwnersOnStatusChange", null);
|
|
457
|
+
__decorate([
|
|
458
|
+
CaptureSpan(),
|
|
459
|
+
__metadata("design:type", Function),
|
|
460
|
+
__metadata("design:paramtypes", [ObjectID,
|
|
461
|
+
ObjectID]),
|
|
462
|
+
__metadata("design:returntype", Promise)
|
|
463
|
+
], Service.prototype, "getLinkInDashboard", null);
|
|
464
|
+
__decorate([
|
|
465
|
+
CaptureSpan(),
|
|
466
|
+
__metadata("design:type", Function),
|
|
467
|
+
__metadata("design:paramtypes", [ObjectID]),
|
|
468
|
+
__metadata("design:returntype", Promise)
|
|
469
|
+
], Service.prototype, "getAIAgentForProject", null);
|
|
470
|
+
export default new Service();
|
|
471
|
+
//# sourceMappingURL=AIAgentService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentService.js","sourceRoot":"","sources":["../../../../Server/Services/AIAgentService.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,KAAK,EAAE,EACZ,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAChE,OAAO,SAAS,EAAE,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAE7E,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAChE,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,8BAA8B,MAAM,kCAAkC,CAAC;AAC9E,OAAO,4BAA4B,MAAM,8DAA8D,CAAC;AACxG,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAIrC,OAAO,iBAAiB,MAAM,qCAAqC,CAAC;AACpE,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,GAAG,MAAM,qBAAqB,CAAC;AAGtC,OAAO,oBAAoB,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAElF,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,WAAW,MAAM,+BAA+B,CAAC;AAExD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAC/B,SAAmB,EACnB,SAAe;QAEf,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,SAAS,CACzB,qBAAqB,EACrB,SAAS,CAAC,QAAQ,EAAE,EACpB,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAClC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,SAAmB;QAClD,MAAM,GAAG,GAAS,aAAa,CAAC,cAAc,EAAE,CAAC;QAEjD,IAAI,CAAC;YACH,6FAA6F;YAC7F,MAAM,sBAAsB,GAAkB,MAAM,WAAW,CAAC,SAAS,CACvE,qBAAqB,EACrB,SAAS,CAAC,QAAQ,EAAE,CACrB,CAAC;YAEF,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,0BAA0B,GAAgB,aAAa,CAAC,UAAU,CACtE,sBAAsB,CACvB,CAAC;YAEF,6FAA6F;YAC7F,IAAI,0BAA0B,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAW,aAAa,CAAC,sBAAsB,CACvD,GAAG,EACH,0BAA0B,CAC3B,CAAC;gBAEF,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;oBACd,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uDAAuD;YACvD,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAmB;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,mBAAmB,GACvB,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAS,aAAa,CAAC,cAAc,EAAE,CAAC;QAEjD,MAAM,IAAI,CAAC,aAAa,CAAC;YACvB,EAAE,EAAE,SAAS;YACb,IAAI,EAAE;gBACJ,SAAS,EAAE,GAAG;aACf;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAGwB,AAAN,KAAK,CAAC,cAAc,CACrC,QAAyB;QAEzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,6DAA6D;QAC7D,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,kFAAkF;QAClF,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACvD,MAAM,IAAI,CAAC,QAAQ,CAAC;gBAClB,KAAK,EAAE;oBACL,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;oBAClC,SAAS,EAAE,IAAI;iBAChB;gBACD,IAAI,EAAE;oBACJ,SAAS,EAAE,KAAK;iBACjB;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;gBACD,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAClD,CAAC;IAGY,AAAN,KAAK,CAAC,SAAS,CAAC,SAAmB;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,UAAU,GACd,MAAM,uBAAuB,CAAC,MAAM,CAAC;YACnC,KAAK,EAAE;gBACL,SAAS,EAAE,SAAS;aACrB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE;oBACJ,GAAG,EAAE,IAAI;oBACT,KAAK,EAAE,IAAI;oBACX,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;YACD,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,CAAC;SACR,CAAC,CAAC;QAEL,MAAM,UAAU,GACd,MAAM,uBAAuB,CAAC,MAAM,CAAC;YACnC,KAAK,EAAE;gBACL,SAAS,EAAE,SAAS;aACrB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,IAAI;aACb;YACD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEL,MAAM,KAAK,GACT,UAAU,CAAC,GAAG,CAAC,CAAC,SAA2B,EAAE,EAAE;YAC7C,OAAO,SAAS,CAAC,IAAK,CAAC;QACzB,CAAC,CAAC,IAAI,EAAE,CAAC;QAEX,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GACX,UAAU,CAAC,GAAG,CAAC,CAAC,SAA2B,EAAE,EAAE;gBAC7C,OAAO,SAAS,CAAC,MAAO,CAAC;YAC3B,CAAC,CAAC,IAAI,EAAE,CAAC;YAEX,MAAM,SAAS,GACb,MAAM,iBAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAEnD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,qCAAqC;gBACrC,MAAM,kBAAkB,GAAqB,KAAK,CAAC,IAAI,CACrD,CAAC,IAAU,EAAE,EAAE;oBACb,OAAO,IAAI,CAAC,EAAG,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,EAAG,CAAC,QAAQ,EAAE,CAAC;gBACzD,CAAC,CACF,CAAC;gBAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAGwB,AAAN,KAAK,CAAC,cAAc,CACrC,QAAyB;QAEzB,MAAM,YAAY,GAAQ;YACxB,sBAAsB,EAAE,EAAE;SAC3B,CAAC;QAEF,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAiB,MAAM,IAAI,CAAC,MAAM,CAAC;gBAC/C,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;gBACD,MAAM,EAAE;oBACN,GAAG,EAAE,IAAI;oBACT,gBAAgB,EAAE,IAAI;iBACvB;gBACD,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,MAAM,sBAAsB,GAAiB,QAAQ,CAAC,MAAM,CAC1D,CAAC,OAAc,EAAE,EAAE;gBACjB,OAAO,CACL,OAAO,CAAC,gBAAgB;oBACxB,OAAO,CAAC,gBAAgB,KAAK,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAC5D,CAAC;YACJ,CAAC,CACF,CAAC;YAEF,YAAY,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QAC/D,CAAC;QAED,oFAAoF;QACpF,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACrC,wDAAwD;YACxD,MAAM,aAAa,GAAiB,MAAM,IAAI,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE;oBACN,GAAG,EAAE,IAAI;oBACT,SAAS,EAAE,IAAI;iBAChB;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;gBACD,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC;aACR,CAAC,CAAC;YAEH,6BAA6B;YAC7B,MAAM,UAAU,GAAgB,IAAI,GAAG,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,KAAK,MAAM,YAAY,IAAI,UAAU,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAa,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,QAAQ,CAAC;oBAClB,KAAK,EAAE;wBACL,SAAS,EAAE,SAAS;wBACpB,SAAS,EAAE,IAAI;wBACf,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAClD;oBACD,IAAI,EAAE;wBACJ,SAAS,EAAE,KAAK;qBACjB;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;oBACD,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,CAAC;iBACR,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAC9C,CAAC;IAGwB,AAAN,KAAK,CAAC,eAAe,CACtC,QAAyB,EACzB,eAAgC;QAEhC,IACE,QAAQ,CAAC,YAAY;YACrB,QAAQ,CAAC,YAAY,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EACvD,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;gBACnE,MAAM,IAAI,CAAC,0BAA0B,CAAC;oBACpC,SAAS,EAAE,OAAO,CAAC,EAAG;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAGY,AAAN,KAAK,CAAC,0BAA0B,CAAC,IAEvC;;QACC,MAAM,OAAO,GAAiB,MAAM,IAAI,CAAC,WAAW,CAAC;YACnD,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,SAAS,EAAE,IAAI;gBACf,gBAAgB,EAAE,IAAI;gBACtB,eAAe,EAAE,IAAI;gBACrB,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE;oBACP,IAAI,EAAE,IAAI;iBACX;aACF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,2CAA2C;QACrD,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,IAAI,gBAAgB,EAAE,CAAC;YAChD,OAAO,CAAC,sCAAsC;QAChD,CAAC;QAED,4BAA4B;QAC5B,IAAI,MAAM,GAAgB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAG,CAAC,CAAC;QAE5D,IAAI,qBAAqB,GAAY,IAAI,CAAC;QAE1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,qBAAqB,GAAG,KAAK,CAAC;YAE9B,uBAAuB;YACvB,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,uBAAuB;QACjC,CAAC;QAED,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,KAAK,uBAAuB,CAAC,SAAS;YAC5D,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,cAAc,CAAC;QAErB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAuB;oBAC/B,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,OAAO,gBAAgB,EAAE;oBAC/C,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,UAAU;oBACvC,kBAAkB,EAAE,OAAO,CAAC,WAAW,IAAI,yBAAyB;oBACpE,WAAW,EAAE,CAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,IAAI,KAAI,SAAS;oBAC/C,aAAa,EAAE,gBAAgB,IAAI,SAAS;oBAC5C,SAAS,EAAE,aAAa,CAAC,yCAAyC,CAAC;wBACjE,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,cAAc,EAAE;wBACzD,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;qBAChD,CAAC;oBACF,gBAAgB,EAAE,CAChB,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAU,EAAE,OAAO,CAAC,EAAG,CAAC,CAC/D,CAAC,QAAQ,EAAE;iBACb,CAAC;gBAEF,IAAI,qBAAqB,KAAK,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;gBAC3B,CAAC;gBAED,MAAM,YAAY,GAAkB;oBAClC,YAAY,EAAE,iBAAiB,CAAC,6BAA6B;oBAC7D,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,aAAa,gBAAgB,KAAK,OAAO,CAAC,IAAI,EAAE;iBAC1D,CAAC;gBAEF,MAAM,GAAG,GAAe;oBACtB,OAAO,EAAE,8CAA8C,OAAO,CAAC,IAAI,OAAO,gBAAgB,qFAAqF;iBAChL,CAAC;gBAEF,MAAM,WAAW,GAAuB;oBACtC,IAAI,EAAE;wBACJ;4BACE,UAAU,EAAE,8CAA8C,OAAO,CAAC,IAAI,OAAO,gBAAgB,+FAA+F;yBAC7L;qBACF;iBACF,CAAC;gBAEF,MAAM,iBAAiB,GAKnB;oBACF,WAAW,EAAE,OAAO,CAAC,IAAK;oBAC1B,WAAW,EAAE,CAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,IAAI,KAAI,SAAS;oBAC/C,gBAAgB,EAAE,gBAAgB;iBACnC,CAAC;gBAEF,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC7B,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC3D,CAAC;gBAED,MAAM,WAAW,GACf,oBAAoB,CAAC,sCAAsC,CACzD,iBAAiB,CAClB,CAAC;gBAEJ,MAAM,SAAS,GACb,4BAA4B,CAAC,+CAA+C,CAAC;gBAE/E,MAAM,eAAe,GACnB,iCAAiC,CAAC;oBAChC,SAAS;oBACT,iBAAiB,EAAE;wBACjB,aAAa,EAAE,OAAO,CAAC,IAAK;wBAC5B,eAAe,EAAE,gBAAgB;wBACjC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;qBAC9C;iBACF,CAAC,CAAC;gBAEL,MAAM,8BAA8B,CAAC,oBAAoB,CAAC;oBACxD,MAAM,EAAE,IAAI,CAAC,EAAG;oBAChB,SAAS,EAAE,OAAO,CAAC,SAAU;oBAC7B,aAAa,EAAE,YAAY;oBAC3B,UAAU,EAAE,GAAG;oBACf,kBAAkB,EAAE,WAAW;oBAC/B,uBAAuB,EAAE,WAAW;oBACpC,eAAe;oBACf,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CACV,gEAAgE,CACjE,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,kBAAkB,CAC7B,SAAmB,EACnB,SAAmB;QAEnB,MAAM,YAAY,GAAQ,MAAM,cAAc,CAAC,eAAe,EAAE,CAAC;QAEjE,OAAO,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CACrD,IAAI,SAAS,CAAC,QAAQ,EAAE,uBAAuB,SAAS,CAAC,QAAQ,EAAE,EAAE,CACtE,CAAC;IACJ,CAAC;IAGY,AAAN,KAAK,CAAC,oBAAoB,CAC/B,SAAmB;QAEnB,wDAAwD;QACxD,IAAI,KAAK,GAAiB,MAAM,IAAI,CAAC,SAAS,CAAC;YAC7C,KAAK,EAAE;gBACL,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,IAAI;aAChB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;gBACjB,GAAG,EAAE,IAAI;gBACT,cAAc,EAAE,IAAI;gBACpB,gBAAgB,EAAE,IAAI;gBACtB,eAAe,EAAE,IAAI;gBACrB,SAAS,EAAE,IAAI;aAChB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;YAC3B,KAAK,EAAE;gBACL,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE;gBAC/B,eAAe,EAAE,IAAI;aACtB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;gBACjB,GAAG,EAAE,IAAI;gBACT,cAAc,EAAE,IAAI;gBACpB,gBAAgB,EAAE,IAAI;gBACtB,eAAe,EAAE,IAAI;gBACrB,SAAS,EAAE,IAAI;aAChB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA/a0B;IADxB,WAAW,EAAE;;;;6CAoCb;AAGY;IADZ,WAAW,EAAE;;qCACoB,QAAQ;;wCAuEzC;AAGwB;IADxB,WAAW,EAAE;;;;6CAoFb;AAGwB;IADxB,WAAW,EAAE;;6CAGK,KAAK;;8CAcvB;AAGY;IADZ,WAAW,EAAE;;;;yDAiJb;AAGY;IADZ,WAAW,EAAE;;qCAED,QAAQ;QACR,QAAQ;;iDAOpB;AAGY;IADZ,WAAW,EAAE;;qCAED,QAAQ;;mDAqDpB;AAGH,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/AIAgentTaskLog";
|
|
3
|
+
export class Service extends DatabaseService {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(Model);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default new Service();
|
|
9
|
+
//# sourceMappingURL=AIAgentTaskLogService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentTaskLogService.js","sourceRoot":"","sources":["../../../../Server/Services/AIAgentTaskLogService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,4CAA4C,CAAC;AAE/D,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/AIAgentTaskPullRequest";
|
|
3
|
+
export class Service extends DatabaseService {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(Model);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default new Service();
|
|
9
|
+
//# sourceMappingURL=AIAgentTaskPullRequestService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentTaskPullRequestService.js","sourceRoot":"","sources":["../../../../Server/Services/AIAgentTaskPullRequestService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,oDAAoD,CAAC;AAEvE,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import DatabaseService from "./DatabaseService";
|
|
11
|
+
import Model from "../../Models/DatabaseModels/AIAgentTask";
|
|
12
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
13
|
+
import AIAgentService from "./AIAgentService";
|
|
14
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
|
+
import Semaphore from "../Infrastructure/Semaphore";
|
|
16
|
+
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
17
|
+
import logger from "../Utils/Logger";
|
|
18
|
+
import OneUptimeDate from "../../Types/Date";
|
|
19
|
+
export class Service extends DatabaseService {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(Model);
|
|
22
|
+
}
|
|
23
|
+
async onBeforeCreate(createBy) {
|
|
24
|
+
// If no aiAgentId is provided, assign one automatically
|
|
25
|
+
if (!createBy.data.aiAgentId) {
|
|
26
|
+
createBy.data.aiAgentId = await this.getDefaultAgentId(createBy);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Validate the provided aiAgentId
|
|
30
|
+
await this.validateAgentBelongsToProject(createBy);
|
|
31
|
+
}
|
|
32
|
+
// Generate task number
|
|
33
|
+
if (!createBy.data.projectId) {
|
|
34
|
+
throw new BadDataException("Project ID is required to create an AI Agent Task");
|
|
35
|
+
}
|
|
36
|
+
const projectId = createBy.data.projectId;
|
|
37
|
+
let mutex = null;
|
|
38
|
+
try {
|
|
39
|
+
mutex = await Semaphore.lock({
|
|
40
|
+
key: projectId.toString(),
|
|
41
|
+
namespace: "AIAgentTaskService.task-create",
|
|
42
|
+
lockTimeout: 15000,
|
|
43
|
+
acquireTimeout: 20000,
|
|
44
|
+
});
|
|
45
|
+
logger.debug("Mutex acquired - AIAgentTaskService.task-create " +
|
|
46
|
+
projectId.toString() +
|
|
47
|
+
" at " +
|
|
48
|
+
OneUptimeDate.getCurrentDateAsFormattedString());
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
logger.debug("Mutex acquire failed - AIAgentTaskService.task-create " +
|
|
52
|
+
projectId.toString() +
|
|
53
|
+
" at " +
|
|
54
|
+
OneUptimeDate.getCurrentDateAsFormattedString());
|
|
55
|
+
logger.error(err);
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const taskNumberForThisTask = (await this.getExistingTaskNumberForProject({
|
|
59
|
+
projectId: projectId,
|
|
60
|
+
})) + 1;
|
|
61
|
+
createBy.data.taskNumber = taskNumberForThisTask;
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
if (mutex) {
|
|
65
|
+
await Semaphore.release(mutex);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { createBy, carryForward: null };
|
|
69
|
+
}
|
|
70
|
+
async getExistingTaskNumberForProject(data) {
|
|
71
|
+
// get last task number.
|
|
72
|
+
const lastTask = await this.findOneBy({
|
|
73
|
+
query: {
|
|
74
|
+
projectId: data.projectId,
|
|
75
|
+
},
|
|
76
|
+
select: {
|
|
77
|
+
taskNumber: true,
|
|
78
|
+
},
|
|
79
|
+
sort: {
|
|
80
|
+
createdAt: SortOrder.Descending,
|
|
81
|
+
},
|
|
82
|
+
props: {
|
|
83
|
+
isRoot: true,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
if (!lastTask) {
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
return lastTask.taskNumber ? Number(lastTask.taskNumber) : 0;
|
|
90
|
+
}
|
|
91
|
+
async getDefaultAgentId(createBy) {
|
|
92
|
+
if (!createBy.data.projectId) {
|
|
93
|
+
throw new BadDataException("Project ID is required to assign an AI Agent");
|
|
94
|
+
}
|
|
95
|
+
// Try to get the default agent for the project (or global fallback)
|
|
96
|
+
const agent = await AIAgentService.getAIAgentForProject(createBy.data.projectId);
|
|
97
|
+
if (!agent || !agent.id) {
|
|
98
|
+
throw new BadDataException("No AI Agent available. Please configure an AI Agent for this project or ensure a global AI Agent is available.");
|
|
99
|
+
}
|
|
100
|
+
return agent.id;
|
|
101
|
+
}
|
|
102
|
+
async validateAgentBelongsToProject(createBy) {
|
|
103
|
+
if (!createBy.data.aiAgentId || !createBy.data.projectId) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const agent = await AIAgentService.findOneById({
|
|
107
|
+
id: createBy.data.aiAgentId,
|
|
108
|
+
select: {
|
|
109
|
+
_id: true,
|
|
110
|
+
projectId: true,
|
|
111
|
+
isGlobalAIAgent: true,
|
|
112
|
+
},
|
|
113
|
+
props: {
|
|
114
|
+
isRoot: true,
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
if (!agent) {
|
|
118
|
+
throw new BadDataException("AI Agent not found");
|
|
119
|
+
}
|
|
120
|
+
// Allow if it's a global agent
|
|
121
|
+
if (agent.isGlobalAIAgent) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Allow if the agent belongs to the same project
|
|
125
|
+
if (agent.projectId &&
|
|
126
|
+
agent.projectId.toString() === createBy.data.projectId.toString()) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Reject if the agent belongs to a different project
|
|
130
|
+
throw new BadDataException("The specified AI Agent does not belong to this project. Please use an AI Agent from your project or a global AI Agent.");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
__decorate([
|
|
134
|
+
CaptureSpan(),
|
|
135
|
+
__metadata("design:type", Function),
|
|
136
|
+
__metadata("design:paramtypes", [Object]),
|
|
137
|
+
__metadata("design:returntype", Promise)
|
|
138
|
+
], Service.prototype, "onBeforeCreate", null);
|
|
139
|
+
__decorate([
|
|
140
|
+
CaptureSpan(),
|
|
141
|
+
__metadata("design:type", Function),
|
|
142
|
+
__metadata("design:paramtypes", [Object]),
|
|
143
|
+
__metadata("design:returntype", Promise)
|
|
144
|
+
], Service.prototype, "getExistingTaskNumberForProject", null);
|
|
145
|
+
__decorate([
|
|
146
|
+
CaptureSpan(),
|
|
147
|
+
__metadata("design:type", Function),
|
|
148
|
+
__metadata("design:paramtypes", [Object]),
|
|
149
|
+
__metadata("design:returntype", Promise)
|
|
150
|
+
], Service.prototype, "getDefaultAgentId", null);
|
|
151
|
+
__decorate([
|
|
152
|
+
CaptureSpan(),
|
|
153
|
+
__metadata("design:type", Function),
|
|
154
|
+
__metadata("design:paramtypes", [Object]),
|
|
155
|
+
__metadata("design:returntype", Promise)
|
|
156
|
+
], Service.prototype, "validateAgentBelongsToProject", null);
|
|
157
|
+
export default new Service();
|
|
158
|
+
//# sourceMappingURL=AIAgentTaskService.js.map
|