@oneuptime/common 9.2.26 → 9.3.0

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.
Files changed (278) hide show
  1. package/Models/DatabaseModels/AIAgent.ts +589 -0
  2. package/Models/DatabaseModels/AIAgentOwnerTeam.ts +434 -0
  3. package/Models/DatabaseModels/AIAgentOwnerUser.ts +433 -0
  4. package/Models/DatabaseModels/AIAgentTask.ts +549 -0
  5. package/Models/DatabaseModels/AIAgentTaskLog.ts +417 -0
  6. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +731 -0
  7. package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +388 -0
  8. package/Models/DatabaseModels/Index.ts +15 -0
  9. package/Models/DatabaseModels/Monitor.ts +33 -0
  10. package/Models/DatabaseModels/Project.ts +25 -0
  11. package/Models/DatabaseModels/TelemetryException.ts +1 -1
  12. package/Server/API/AIAgentAPI.ts +200 -0
  13. package/Server/API/AIAgentDataAPI.ts +692 -0
  14. package/Server/API/AIAgentTaskAPI.ts +286 -0
  15. package/Server/API/AIAgentTaskLogAPI.ts +165 -0
  16. package/Server/API/AIAgentTaskPullRequestAPI.ts +14 -0
  17. package/Server/API/GitHubAPI.ts +25 -7
  18. package/Server/API/TelemetryExceptionAPI.ts +169 -0
  19. package/Server/EnvironmentConfig.ts +3 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.ts +195 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.ts +31 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.ts +17 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.ts +63 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.ts +75 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.ts +157 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.ts +33 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.ts +27 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.ts +37 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.ts +31 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.ts +35 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +22 -0
  32. package/Server/Services/AIAgentOwnerTeamService.ts +10 -0
  33. package/Server/Services/AIAgentOwnerUserService.ts +10 -0
  34. package/Server/Services/AIAgentService.ts +564 -0
  35. package/Server/Services/AIAgentTaskLogService.ts +10 -0
  36. package/Server/Services/AIAgentTaskPullRequestService.ts +10 -0
  37. package/Server/Services/AIAgentTaskService.ts +178 -0
  38. package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +39 -0
  39. package/Server/Services/Index.ts +10 -0
  40. package/Server/Services/TelemetryExceptionService.ts +162 -0
  41. package/Server/Types/Workflow/Components/Index.ts +2 -0
  42. package/Server/Types/Workflow/Components/Telegram/SendMessageToChat.ts +146 -0
  43. package/Server/Utils/Monitor/MonitorResource.ts +228 -0
  44. package/Server/Utils/PushNotificationUtil.ts +29 -0
  45. package/Server/Utils/WhatsAppTemplateUtil.ts +6 -0
  46. package/Tests/UI/Components/Badge.test.tsx +5 -5
  47. package/Tests/UI/Components/Card.test.tsx +4 -8
  48. package/Tests/UI/Components/HiddenText.test.tsx +2 -5
  49. package/Tests/UI/Components/SideMenuItem.test.tsx +4 -2
  50. package/Types/AI/AIAgentTaskMetadata.ts +25 -0
  51. package/Types/AI/AIAgentTaskStatus.ts +65 -0
  52. package/Types/AI/AIAgentTaskType.ts +40 -0
  53. package/Types/Email/EmailTemplateType.ts +2 -0
  54. package/Types/Monitor/MonitorEvaluationSummary.ts +2 -1
  55. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  56. package/Types/Permission.ts +176 -0
  57. package/Types/WhatsApp/WhatsAppTemplates.ts +9 -0
  58. package/Types/Workflow/ComponentID.ts +1 -0
  59. package/Types/Workflow/Components/Telegram.ts +76 -0
  60. package/Types/Workflow/Components.ts +7 -0
  61. package/UI/Components/AIAgent/AIAgent.tsx +69 -0
  62. package/UI/Components/Badge/Badge.tsx +9 -5
  63. package/UI/Components/Banner/Banner.tsx +1 -1
  64. package/UI/Components/Card/Card.tsx +14 -12
  65. package/UI/Components/CodeBlock/CodeBlock.tsx +47 -4
  66. package/UI/Components/Detail/Detail.tsx +239 -49
  67. package/UI/Components/Detail/FieldLabel.tsx +35 -11
  68. package/UI/Components/Detail/PlaceholderText.tsx +18 -1
  69. package/UI/Components/Footer/Footer.tsx +9 -7
  70. package/UI/Components/Header/Header.tsx +4 -3
  71. package/UI/Components/Header/HeaderIconDropdownButton.tsx +13 -11
  72. package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +3 -3
  73. package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +1 -1
  74. package/UI/Components/Header/ProjectPicker/CreateNewProjectButton.tsx +4 -4
  75. package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -6
  76. package/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.tsx +3 -3
  77. package/UI/Components/Header/ProjectPicker/ProjectPickerMenu.tsx +1 -1
  78. package/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.tsx +4 -4
  79. package/UI/Components/HeaderAlert/HeaderAlert.tsx +32 -32
  80. package/UI/Components/HeaderAlert/HeaderAlertGroup.tsx +1 -7
  81. package/UI/Components/HiddenText/HiddenText.tsx +98 -27
  82. package/UI/Components/Icon/Icon.tsx +12 -9
  83. package/UI/Components/InfoCard/InfoCard.tsx +7 -3
  84. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  85. package/UI/Components/ObjectID/ObjectIDView.tsx +73 -0
  86. package/UI/Components/Page/Page.tsx +3 -5
  87. package/UI/Components/SideMenu/SideMenu.tsx +175 -40
  88. package/UI/Components/SideMenu/SideMenuDivider.tsx +17 -0
  89. package/UI/Components/SideMenu/SideMenuItem.tsx +111 -158
  90. package/UI/Components/SideMenu/SideMenuSection.tsx +53 -3
  91. package/UI/Components/Table/Table.tsx +1 -1
  92. package/UI/Components/Types/FieldType.ts +2 -0
  93. package/UI/Config.ts +5 -0
  94. package/build/dist/Models/DatabaseModels/AIAgent.js +614 -0
  95. package/build/dist/Models/DatabaseModels/AIAgent.js.map +1 -0
  96. package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js +452 -0
  97. package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js.map +1 -0
  98. package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js +451 -0
  99. package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js.map +1 -0
  100. package/build/dist/Models/DatabaseModels/AIAgentTask.js +580 -0
  101. package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +1 -0
  102. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +438 -0
  103. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +1 -0
  104. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +771 -0
  105. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -0
  106. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +404 -0
  107. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +1 -0
  108. package/build/dist/Models/DatabaseModels/Index.js +14 -0
  109. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  110. package/build/dist/Models/DatabaseModels/Monitor.js +34 -0
  111. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  112. package/build/dist/Models/DatabaseModels/Project.js +26 -0
  113. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  114. package/build/dist/Models/DatabaseModels/TelemetryException.js +1 -1
  115. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  116. package/build/dist/Server/API/AIAgentAPI.js +141 -0
  117. package/build/dist/Server/API/AIAgentAPI.js.map +1 -0
  118. package/build/dist/Server/API/AIAgentDataAPI.js +415 -0
  119. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -0
  120. package/build/dist/Server/API/AIAgentTaskAPI.js +199 -0
  121. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -0
  122. package/build/dist/Server/API/AIAgentTaskLogAPI.js +106 -0
  123. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -0
  124. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +9 -0
  125. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -0
  126. package/build/dist/Server/API/GitHubAPI.js +23 -8
  127. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  128. package/build/dist/Server/API/TelemetryExceptionAPI.js +120 -0
  129. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -0
  130. package/build/dist/Server/EnvironmentConfig.js +2 -0
  131. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  132. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.js +74 -0
  133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.js.map +1 -0
  134. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.js +18 -0
  135. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.js.map +1 -0
  136. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.js +12 -0
  137. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.js.map +1 -0
  138. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.js +28 -0
  139. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.js.map +1 -0
  140. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.js +32 -0
  141. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.js.map +1 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.js +60 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.js.map +1 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.js +18 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.js.map +1 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.js +16 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.js.map +1 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.js +20 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.js.map +1 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.js +16 -0
  151. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.js.map +1 -0
  152. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.js +18 -0
  153. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.js.map +1 -0
  154. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +22 -0
  155. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  156. package/build/dist/Server/Services/AIAgentOwnerTeamService.js +9 -0
  157. package/build/dist/Server/Services/AIAgentOwnerTeamService.js.map +1 -0
  158. package/build/dist/Server/Services/AIAgentOwnerUserService.js +9 -0
  159. package/build/dist/Server/Services/AIAgentOwnerUserService.js.map +1 -0
  160. package/build/dist/Server/Services/AIAgentService.js +471 -0
  161. package/build/dist/Server/Services/AIAgentService.js.map +1 -0
  162. package/build/dist/Server/Services/AIAgentTaskLogService.js +9 -0
  163. package/build/dist/Server/Services/AIAgentTaskLogService.js.map +1 -0
  164. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +9 -0
  165. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -0
  166. package/build/dist/Server/Services/AIAgentTaskService.js +158 -0
  167. package/build/dist/Server/Services/AIAgentTaskService.js.map +1 -0
  168. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +36 -0
  169. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +1 -0
  170. package/build/dist/Server/Services/Index.js +10 -0
  171. package/build/dist/Server/Services/Index.js.map +1 -1
  172. package/build/dist/Server/Services/TelemetryExceptionService.js +137 -0
  173. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  174. package/build/dist/Server/Types/Workflow/Components/Index.js +2 -0
  175. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  176. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js +119 -0
  177. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js.map +1 -0
  178. package/build/dist/Server/Utils/Monitor/MonitorResource.js +168 -0
  179. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  180. package/build/dist/Server/Utils/PushNotificationUtil.js +21 -0
  181. package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
  182. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +4 -0
  183. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  184. package/build/dist/Tests/UI/Components/Badge.test.js +5 -5
  185. package/build/dist/Tests/UI/Components/Badge.test.js.map +1 -1
  186. package/build/dist/Tests/UI/Components/Card.test.js +4 -8
  187. package/build/dist/Tests/UI/Components/Card.test.js.map +1 -1
  188. package/build/dist/Tests/UI/Components/HiddenText.test.js +2 -3
  189. package/build/dist/Tests/UI/Components/HiddenText.test.js.map +1 -1
  190. package/build/dist/Tests/UI/Components/SideMenuItem.test.js +3 -2
  191. package/build/dist/Tests/UI/Components/SideMenuItem.test.js.map +1 -1
  192. package/build/dist/Types/AI/AIAgentTaskMetadata.js +6 -0
  193. package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +1 -0
  194. package/build/dist/Types/AI/AIAgentTaskStatus.js +51 -0
  195. package/build/dist/Types/AI/AIAgentTaskStatus.js.map +1 -0
  196. package/build/dist/Types/AI/AIAgentTaskType.js +29 -0
  197. package/build/dist/Types/AI/AIAgentTaskType.js.map +1 -0
  198. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  199. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  200. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  201. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  202. package/build/dist/Types/Permission.js +160 -0
  203. package/build/dist/Types/Permission.js.map +1 -1
  204. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +6 -0
  205. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
  206. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  207. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  208. package/build/dist/Types/Workflow/Components/Telegram.js +69 -0
  209. package/build/dist/Types/Workflow/Components/Telegram.js.map +1 -0
  210. package/build/dist/Types/Workflow/Components.js +7 -0
  211. package/build/dist/Types/Workflow/Components.js.map +1 -1
  212. package/build/dist/UI/Components/AIAgent/AIAgent.js +32 -0
  213. package/build/dist/UI/Components/AIAgent/AIAgent.js.map +1 -0
  214. package/build/dist/UI/Components/Badge/Badge.js +9 -5
  215. package/build/dist/UI/Components/Badge/Badge.js.map +1 -1
  216. package/build/dist/UI/Components/Banner/Banner.js +1 -1
  217. package/build/dist/UI/Components/Banner/Banner.js.map +1 -1
  218. package/build/dist/UI/Components/Card/Card.js +12 -12
  219. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  220. package/build/dist/UI/Components/CodeBlock/CodeBlock.js +22 -2
  221. package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
  222. package/build/dist/UI/Components/Detail/Detail.js +117 -37
  223. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  224. package/build/dist/UI/Components/Detail/FieldLabel.js +12 -7
  225. package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
  226. package/build/dist/UI/Components/Detail/PlaceholderText.js +4 -1
  227. package/build/dist/UI/Components/Detail/PlaceholderText.js.map +1 -1
  228. package/build/dist/UI/Components/Footer/Footer.js +6 -6
  229. package/build/dist/UI/Components/Footer/Footer.js.map +1 -1
  230. package/build/dist/UI/Components/Header/Header.js +4 -3
  231. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  232. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +7 -7
  233. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  234. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +3 -3
  235. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
  236. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +1 -1
  237. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
  238. package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js +4 -4
  239. package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js.map +1 -1
  240. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +6 -6
  241. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
  242. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js +2 -2
  243. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js.map +1 -1
  244. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenu.js +1 -1
  245. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenu.js.map +1 -1
  246. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.js +4 -4
  247. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.js.map +1 -1
  248. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js +31 -29
  249. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js.map +1 -1
  250. package/build/dist/UI/Components/HeaderAlert/HeaderAlertGroup.js +1 -3
  251. package/build/dist/UI/Components/HeaderAlert/HeaderAlertGroup.js.map +1 -1
  252. package/build/dist/UI/Components/HiddenText/HiddenText.js +33 -14
  253. package/build/dist/UI/Components/HiddenText/HiddenText.js.map +1 -1
  254. package/build/dist/UI/Components/Icon/Icon.js +3 -4
  255. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  256. package/build/dist/UI/Components/InfoCard/InfoCard.js +3 -3
  257. package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
  258. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  259. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  260. package/build/dist/UI/Components/ObjectID/ObjectIDView.js +30 -0
  261. package/build/dist/UI/Components/ObjectID/ObjectIDView.js.map +1 -0
  262. package/build/dist/UI/Components/Page/Page.js +3 -3
  263. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  264. package/build/dist/UI/Components/SideMenu/SideMenu.js +82 -17
  265. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  266. package/build/dist/UI/Components/SideMenu/SideMenuDivider.js +7 -0
  267. package/build/dist/UI/Components/SideMenu/SideMenuDivider.js.map +1 -0
  268. package/build/dist/UI/Components/SideMenu/SideMenuItem.js +68 -97
  269. package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
  270. package/build/dist/UI/Components/SideMenu/SideMenuSection.js +18 -3
  271. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  272. package/build/dist/UI/Components/Table/Table.js +1 -1
  273. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  274. package/build/dist/UI/Components/Types/FieldType.js +2 -0
  275. package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
  276. package/build/dist/UI/Config.js +2 -0
  277. package/build/dist/UI/Config.js.map +1 -1
  278. package/package.json +1 -1
@@ -40,6 +40,17 @@ import CaptureSpan from "../Telemetry/CaptureSpan";
40
40
  import ExceptionMessages from "../../../Types/Exception/ExceptionMessages";
41
41
  import MonitorEvaluationSummary from "../../../Types/Monitor/MonitorEvaluationSummary";
42
42
  import MonitorStatusService from "../../Services/MonitorStatusService";
43
+ import { ProbeConnectionStatus } from "../../../Models/DatabaseModels/Probe";
44
+ import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
45
+
46
+ interface ProbeAgreementResult {
47
+ hasAgreement: boolean;
48
+ agreementCount: number;
49
+ requiredCount: number;
50
+ totalActiveProbes: number;
51
+ agreedCriteriaId: string | null;
52
+ agreedRootCause: string | null;
53
+ }
43
54
 
44
55
  export default class MonitorResourceUtil {
45
56
  @CaptureSpan()
@@ -125,6 +136,7 @@ export default class MonitorResourceUtil {
125
136
  currentMonitorStatusId: true,
126
137
  _id: true,
127
138
  name: true,
139
+ minimumProbeAgreement: true,
128
140
  },
129
141
  props: {
130
142
  isRoot: true,
@@ -500,6 +512,62 @@ export default class MonitorResourceUtil {
500
512
  evaluationSummary: evaluationSummary,
501
513
  });
502
514
 
515
+ // Check probe agreement for probe-based monitors
516
+ if (
517
+ monitor.monitorType &&
518
+ MonitorTypeHelper.isProbableMonitor(monitor.monitorType)
519
+ ) {
520
+ const probeAgreementResult: ProbeAgreementResult =
521
+ await MonitorResourceUtil.checkProbeAgreement({
522
+ monitor: monitor,
523
+ monitorStep: monitorStep,
524
+ currentCriteriaMetId: response.criteriaMetId || null,
525
+ currentRootCause: response.rootCause || null,
526
+ });
527
+
528
+ // Add probe agreement event to evaluation summary
529
+ evaluationSummary.events.push({
530
+ type: "probe-agreement",
531
+ title: "Probe Agreement Check",
532
+ message: probeAgreementResult.hasAgreement
533
+ ? `Probe agreement reached: ${probeAgreementResult.agreementCount}/${probeAgreementResult.requiredCount} probes agree (${probeAgreementResult.totalActiveProbes} active probes total).`
534
+ : `Probe agreement not reached: ${probeAgreementResult.agreementCount}/${probeAgreementResult.requiredCount} probes agree (${probeAgreementResult.totalActiveProbes} active probes total). Skipping status change.`,
535
+ at: OneUptimeDate.getCurrentDate(),
536
+ });
537
+
538
+ if (!probeAgreementResult.hasAgreement) {
539
+ logger.debug(
540
+ `${dataToProcess.monitorId.toString()} - Probe agreement not met. ${probeAgreementResult.agreementCount}/${probeAgreementResult.requiredCount} probes agree. Skipping status change.`,
541
+ );
542
+
543
+ // Release lock and return early - no status change
544
+ if (mutex) {
545
+ try {
546
+ await Semaphore.release(mutex);
547
+ } catch (err) {
548
+ logger.error(err);
549
+ }
550
+ }
551
+
552
+ await persistLatestMonitorPayload();
553
+
554
+ MonitorLogUtil.saveMonitorLog({
555
+ monitorId: monitor.id!,
556
+ projectId: monitor.projectId!,
557
+ dataToProcess: dataToProcess,
558
+ });
559
+
560
+ response.evaluationSummary = evaluationSummary;
561
+ return response;
562
+ }
563
+
564
+ // Use the agreed criteria result
565
+ response.criteriaMetId = probeAgreementResult.agreedCriteriaId
566
+ ? probeAgreementResult.agreedCriteriaId
567
+ : undefined;
568
+ response.rootCause = probeAgreementResult.agreedRootCause;
569
+ }
570
+
503
571
  if (response.criteriaMetId && response.rootCause) {
504
572
  logger.debug(
505
573
  `${dataToProcess.monitorId.toString()} - Criteria met: ${
@@ -735,4 +803,164 @@ export default class MonitorResourceUtil {
735
803
 
736
804
  return response;
737
805
  }
806
+
807
+ @CaptureSpan()
808
+ private static async checkProbeAgreement(input: {
809
+ monitor: Monitor;
810
+ monitorStep: MonitorStep;
811
+ currentCriteriaMetId: string | null;
812
+ currentRootCause: string | null;
813
+ }): Promise<ProbeAgreementResult> {
814
+ const { monitor, monitorStep, currentCriteriaMetId, currentRootCause } =
815
+ input;
816
+
817
+ /*
818
+ * If minimumProbeAgreement is not set, all probes must agree
819
+ * Get all MonitorProbes for this monitor with their probe connection status
820
+ */
821
+ const monitorProbes: Array<MonitorProbe> = await MonitorProbeService.findBy(
822
+ {
823
+ query: {
824
+ monitorId: monitor.id!,
825
+ },
826
+ select: {
827
+ probeId: true,
828
+ isEnabled: true,
829
+ lastMonitoringLog: true,
830
+ probe: {
831
+ connectionStatus: true,
832
+ },
833
+ },
834
+ limit: LIMIT_PER_PROJECT,
835
+ skip: 0,
836
+ props: {
837
+ isRoot: true,
838
+ },
839
+ },
840
+ );
841
+
842
+ // Filter to only active probes (enabled AND connected)
843
+ const activeProbes: Array<MonitorProbe> = monitorProbes.filter(
844
+ (mp: MonitorProbe) => {
845
+ return (
846
+ mp.isEnabled &&
847
+ mp.probe?.connectionStatus === ProbeConnectionStatus.Connected
848
+ );
849
+ },
850
+ );
851
+
852
+ // If no active probes, treat as agreement met (nothing to compare)
853
+ if (activeProbes.length === 0) {
854
+ logger.debug(
855
+ `${monitor.id?.toString()} - No active probes found. Treating as agreement met.`,
856
+ );
857
+ return {
858
+ hasAgreement: true,
859
+ agreementCount: 0,
860
+ requiredCount: 0,
861
+ totalActiveProbes: 0,
862
+ agreedCriteriaId: currentCriteriaMetId,
863
+ agreedRootCause: currentRootCause,
864
+ };
865
+ }
866
+
867
+ // Determine required count for agreement
868
+ const requiredCount: number =
869
+ monitor.minimumProbeAgreement ?? activeProbes.length;
870
+ // Effective threshold cannot exceed number of active probes
871
+ const effectiveThreshold: number = Math.min(
872
+ requiredCount,
873
+ activeProbes.length,
874
+ );
875
+
876
+ /*
877
+ * Count how many probes agree on each criteria result
878
+ * Key: criteriaId or "none" for no criteria met
879
+ * Value: { count, rootCause }
880
+ */
881
+ const criteriaAgreements: Map<
882
+ string,
883
+ { count: number; rootCause: string | null }
884
+ > = new Map();
885
+
886
+ const stepId: string = monitorStep.id.toString();
887
+
888
+ for (const monitorProbe of activeProbes) {
889
+ const probeResponse: ProbeMonitorResponse | undefined =
890
+ monitorProbe.lastMonitoringLog?.[stepId];
891
+
892
+ if (!probeResponse) {
893
+ // No response yet for this step from this probe - skip
894
+ logger.debug(
895
+ `${monitor.id?.toString()} - Probe ${monitorProbe.probeId?.toString()} has no response for step ${stepId}. Skipping.`,
896
+ );
897
+ continue;
898
+ }
899
+
900
+ // Evaluate this probe's response against criteria
901
+ const tempResponse: ProbeApiIngestResponse = {
902
+ monitorId: monitor.id!,
903
+ criteriaMetId: undefined,
904
+ rootCause: null,
905
+ };
906
+
907
+ const tempEvaluationSummary: MonitorEvaluationSummary = {
908
+ evaluatedAt: OneUptimeDate.getCurrentDate(),
909
+ criteriaResults: [],
910
+ events: [],
911
+ };
912
+
913
+ const evaluatedResponse: ProbeApiIngestResponse =
914
+ await MonitorCriteriaEvaluator.processMonitorStep({
915
+ dataToProcess: probeResponse as DataToProcess,
916
+ monitorStep: monitorStep,
917
+ monitor: monitor,
918
+ probeApiIngestResponse: tempResponse,
919
+ evaluationSummary: tempEvaluationSummary,
920
+ });
921
+
922
+ // Record the result
923
+ const criteriaKey: string = evaluatedResponse.criteriaMetId || "none";
924
+ const existing: { count: number; rootCause: string | null } | undefined =
925
+ criteriaAgreements.get(criteriaKey);
926
+
927
+ if (existing) {
928
+ existing.count += 1;
929
+ } else {
930
+ criteriaAgreements.set(criteriaKey, {
931
+ count: 1,
932
+ rootCause: evaluatedResponse.rootCause,
933
+ });
934
+ }
935
+ }
936
+
937
+ // Find the criteria with the most agreement
938
+ let maxCount: number = 0;
939
+ let winningCriteriaId: string | null = null;
940
+ let winningRootCause: string | null = null;
941
+
942
+ for (const [criteriaId, data] of criteriaAgreements) {
943
+ if (data.count > maxCount) {
944
+ maxCount = data.count;
945
+ winningCriteriaId = criteriaId === "none" ? null : criteriaId;
946
+ winningRootCause = data.rootCause;
947
+ }
948
+ }
949
+
950
+ // Check if the winning criteria has reached the agreement threshold
951
+ const hasAgreement: boolean = maxCount >= effectiveThreshold;
952
+
953
+ logger.debug(
954
+ `${monitor.id?.toString()} - Probe agreement check: ${maxCount}/${effectiveThreshold} probes agree on criteria "${winningCriteriaId || "none"}". Agreement ${hasAgreement ? "reached" : "not reached"}.`,
955
+ );
956
+
957
+ return {
958
+ hasAgreement,
959
+ agreementCount: maxCount,
960
+ requiredCount: effectiveThreshold,
961
+ totalActiveProbes: activeProbes.length,
962
+ agreedCriteriaId: hasAgreement ? winningCriteriaId : null,
963
+ agreedRootCause: hasAgreement ? winningRootCause : null,
964
+ };
965
+ }
738
966
  }
@@ -327,4 +327,33 @@ export default class PushNotificationUtil {
327
327
 
328
328
  return PushNotificationUtil.applyDefaults(notification);
329
329
  }
330
+
331
+ public static createAIAgentStatusChangedNotification(params: {
332
+ aiAgentName: string;
333
+ projectName: string;
334
+ connectionStatus: string;
335
+ clickAction?: string;
336
+ }): PushNotificationMessage {
337
+ const { aiAgentName, projectName, connectionStatus, clickAction } = params;
338
+ const notification: Partial<PushNotificationMessage> = {
339
+ title: `AI Agent ${connectionStatus}: ${aiAgentName}`,
340
+ body: `AI Agent ${aiAgentName} is ${connectionStatus} in ${projectName}. Click to view details.`,
341
+ tag: "ai-agent-status-changed",
342
+ requireInteraction: true,
343
+ data: {
344
+ type: "ai-agent-status-changed",
345
+ aiAgentName: aiAgentName,
346
+ projectName: projectName,
347
+ connectionStatus: connectionStatus,
348
+ },
349
+ };
350
+
351
+ if (clickAction) {
352
+ notification.clickAction = clickAction;
353
+ notification.url = clickAction;
354
+ notification.data!["url"] = clickAction;
355
+ }
356
+
357
+ return PushNotificationUtil.applyDefaults(notification);
358
+ }
330
359
  }
@@ -42,6 +42,8 @@ const templateDashboardLinkVariableMap: Partial<
42
42
  [WhatsAppTemplateIds.StatusPageOwnerAddedNotification]: "status_page_link",
43
43
  [WhatsAppTemplateIds.ProbeStatusChangedOwnerNotification]: "probe_link",
44
44
  [WhatsAppTemplateIds.ProbeOwnerAddedNotification]: "probe_link",
45
+ [WhatsAppTemplateIds.AIAgentStatusChangedOwnerNotification]: "ai_agent_link",
46
+ [WhatsAppTemplateIds.AIAgentOwnerAddedNotification]: "ai_agent_link",
45
47
  [WhatsAppTemplateIds.OnCallUserIsOnRosterNotification]: "schedule_link",
46
48
  [WhatsAppTemplateIds.OnCallUserIsNextNotification]: "schedule_link",
47
49
  [WhatsAppTemplateIds.OnCallUserNoLongerActiveNotification]: "schedule_link",
@@ -98,6 +100,10 @@ const templateIdByEventType: Record<
98
100
  WhatsAppTemplateIds.ProbeStatusChangedOwnerNotification,
99
101
  [NotificationSettingEventType.SEND_PROBE_OWNER_ADDED_NOTIFICATION]:
100
102
  WhatsAppTemplateIds.ProbeOwnerAddedNotification,
103
+ [NotificationSettingEventType.SEND_AI_AGENT_STATUS_CHANGED_OWNER_NOTIFICATION]:
104
+ WhatsAppTemplateIds.AIAgentStatusChangedOwnerNotification,
105
+ [NotificationSettingEventType.SEND_AI_AGENT_OWNER_ADDED_NOTIFICATION]:
106
+ WhatsAppTemplateIds.AIAgentOwnerAddedNotification,
101
107
  [NotificationSettingEventType.SEND_WHEN_USER_IS_ON_CALL_ROSTER]:
102
108
  WhatsAppTemplateIds.OnCallUserIsOnRosterNotification,
103
109
  [NotificationSettingEventType.SEND_WHEN_USER_IS_NEXT_ON_CALL_ROSTER]:
@@ -15,27 +15,27 @@ describe("Badge", () => {
15
15
  const badge: HTMLElement = screen.getByTestId("badge");
16
16
  expect(badge).toBeInTheDocument();
17
17
  const testId: HTMLElement = screen.getByText(1);
18
- expect(testId).toHaveClass("text-emerald-600");
18
+ expect(testId).toHaveClass("text-emerald-700");
19
19
  });
20
20
  test("it should show success when badgetype is equal to success", () => {
21
21
  render(<Badge badgeCount={1} badgeType={BadgeType.SUCCESS} />);
22
22
  const testId: HTMLElement = screen.getByText(1);
23
- expect(testId).toHaveClass("text-emerald-600");
23
+ expect(testId).toHaveClass("text-emerald-700");
24
24
  });
25
25
  test("it should show danger when badgetype is equal to danger", () => {
26
26
  render(<Badge badgeCount={1} badgeType={BadgeType.DANGER} />);
27
27
  const testId: HTMLElement = screen.getByText(1);
28
- expect(testId).toHaveClass("text-red-600");
28
+ expect(testId).toHaveClass("text-red-700");
29
29
  });
30
30
  test("it should show warning when badgetype is equal to warning", () => {
31
31
  render(<Badge badgeCount={1} badgeType={BadgeType.WARNING} />);
32
32
  const testId: HTMLElement = screen.getByText(1);
33
- expect(testId).toHaveClass("text-yellow-600");
33
+ expect(testId).toHaveClass("text-amber-700");
34
34
  });
35
35
  test("it should show danger when badgetype is equal to danger", () => {
36
36
  render(<Badge badgeCount={1} badgeType={BadgeType.DANGER} />);
37
37
  const testId: HTMLElement = screen.getByText(1);
38
- expect(testId).toHaveClass("text-red-600");
38
+ expect(testId).toHaveClass("text-red-700");
39
39
  });
40
40
  test("it should badgeCount when badgetype is equal to success", () => {
41
41
  render(<Badge badgeCount={2} badgeType={BadgeType.SUCCESS} />);
@@ -28,7 +28,7 @@ describe("Card", () => {
28
28
 
29
29
  const title: HTMLElement = screen.getByText(props.title as string);
30
30
  expect(title).toBeInTheDocument();
31
- expect(title).toHaveClass("text-lg font-medium leading-6 text-gray-900");
31
+ expect(title).toHaveClass("text-lg font-semibold leading-6 text-gray-900");
32
32
  });
33
33
 
34
34
  test("should display card description", () => {
@@ -38,7 +38,7 @@ describe("Card", () => {
38
38
  props.description as string,
39
39
  );
40
40
  expect(description).toBeInTheDocument();
41
- expect(description).toHaveClass("mt-1 text-sm text-gray-500");
41
+ expect(description).toHaveClass("mt-1.5 text-sm text-gray-500");
42
42
  });
43
43
 
44
44
  test("should render rightElement passed in the props", () => {
@@ -76,14 +76,10 @@ describe("Card", () => {
76
76
  expect(button1).toBeInTheDocument();
77
77
  expect(button1).toHaveClass(buttons[0]?.className ?? "");
78
78
  expect(buttons[0]?.onClick).toHaveBeenCalled();
79
- // First button should have first:md:ml-0 class
80
- expect(button1.parentElement).toHaveClass("first:md:ml-0");
81
79
 
82
80
  const button2: HTMLElement = screen.getByText(buttons[1]?.title ?? "");
83
81
  expect(button2).toBeInTheDocument();
84
82
  expect(button2).toBeDisabled();
85
- // Second button should have md:ml-2 class
86
- expect(button2.parentElement).toHaveClass("md:ml-2");
87
83
  });
88
84
 
89
85
  test("should render component children passed in the props and their parent element should have bodyClassName value passed in the props as css class", () => {
@@ -99,7 +95,7 @@ describe("Card", () => {
99
95
  expect(childComponent.parentElement).toHaveClass(bodyClassName);
100
96
  });
101
97
 
102
- test("should render component children passed in the props and their parent element have css class 'mt-6'", () => {
98
+ test("should render component children passed in the props and their parent element have css class 'mt-4'", () => {
103
99
  const childElementText: string = "child element";
104
100
  const childElement: ReactElement = <div key={0}>{childElementText}</div>;
105
101
 
@@ -108,6 +104,6 @@ describe("Card", () => {
108
104
  const childComponent: HTMLElement = screen.getByText(childElementText);
109
105
 
110
106
  expect(childComponent).toBeInTheDocument();
111
- expect(childComponent.parentElement).toHaveClass("mt-6");
107
+ expect(childComponent.parentElement).toHaveClass("mt-4");
112
108
  });
113
109
  });
@@ -54,10 +54,7 @@ describe("tests for HiddenText component", () => {
54
54
  const copy: HTMLElement = screen.getByTestId("copy-to-clipboard-icon");
55
55
  fireEvent.click(copy);
56
56
 
57
- await waitFor(() => {
58
- expect(screen.getByRole("copy-to-clipboard")).toHaveTextContent(
59
- "Copied to Clipboard",
60
- );
61
- });
57
+ // Verify the copy icon is still present after clicking
58
+ expect(screen.getByTestId("copy-to-clipboard-icon")).toBeTruthy();
62
59
  });
63
60
  });
@@ -15,7 +15,9 @@ import React from "react";
15
15
  import getJestMockFunction from "../../../Tests/MockType";
16
16
 
17
17
  const highlightClassList: string =
18
- "bg-gray-100 text-indigo-600 hover:bg-white group rounded-md px-3 py-2 flex items-center text-sm font-medium";
18
+ "bg-gradient-to-r from-indigo-50 to-indigo-50/50 text-indigo-700 shadow-sm";
19
+
20
+ const subItemHighlightClassList: string = "bg-indigo-50/70 text-indigo-700";
19
21
 
20
22
  jest.mock("../../../UI/Utils/Navigation.ts", () => {
21
23
  return {
@@ -148,6 +150,6 @@ describe("Side Menu Item", () => {
148
150
  const subLinkElement: HTMLAnchorElement | null = screen
149
151
  .getByText(subLink.title)
150
152
  .closest("a");
151
- expect(subLinkElement).toHaveClass(highlightClassList);
153
+ expect(subLinkElement).toHaveClass(subItemHighlightClassList);
152
154
  });
153
155
  });
@@ -0,0 +1,25 @@
1
+ import AIAgentTaskType from "./AIAgentTaskType";
2
+
3
+ // Base interface for all task metadata
4
+ export interface AIAgentTaskMetadataBase {
5
+ taskType: AIAgentTaskType;
6
+ }
7
+
8
+ // Metadata for FixException task type
9
+ export interface FixExceptionTaskMetadata extends AIAgentTaskMetadataBase {
10
+ taskType: AIAgentTaskType.FixException;
11
+ exceptionId: string;
12
+ telemetryServiceId?: string;
13
+ stackTrace?: string;
14
+ errorMessage?: string;
15
+ }
16
+
17
+ // Union type for all task metadata types
18
+ export type AIAgentTaskMetadata = FixExceptionTaskMetadata; // More tasks can be added here in the future
19
+
20
+ // Type guard functions
21
+ export function isFixExceptionMetadata(
22
+ metadata: AIAgentTaskMetadata,
23
+ ): metadata is FixExceptionTaskMetadata {
24
+ return metadata.taskType === AIAgentTaskType.FixException;
25
+ }
@@ -0,0 +1,65 @@
1
+ enum AIAgentTaskStatus {
2
+ Scheduled = "Scheduled",
3
+ InProgress = "InProgress",
4
+ Completed = "Completed",
5
+ Error = "Error",
6
+ }
7
+
8
+ export default AIAgentTaskStatus;
9
+
10
+ export interface AIAgentTaskStatusProps {
11
+ status: AIAgentTaskStatus;
12
+ title: string;
13
+ description: string;
14
+ }
15
+
16
+ export class AIAgentTaskStatusHelper {
17
+ public static getAllStatusProps(): Array<AIAgentTaskStatusProps> {
18
+ return [
19
+ {
20
+ status: AIAgentTaskStatus.Scheduled,
21
+ title: "Scheduled",
22
+ description:
23
+ "Task is scheduled and waiting to be picked up by an agent.",
24
+ },
25
+ {
26
+ status: AIAgentTaskStatus.InProgress,
27
+ title: "In Progress",
28
+ description: "Task is currently being processed by an AI agent.",
29
+ },
30
+ {
31
+ status: AIAgentTaskStatus.Completed,
32
+ title: "Completed",
33
+ description: "Task has been completed successfully.",
34
+ },
35
+ {
36
+ status: AIAgentTaskStatus.Error,
37
+ title: "Error",
38
+ description: "Task encountered an error during execution.",
39
+ },
40
+ ];
41
+ }
42
+
43
+ public static getDescription(status: AIAgentTaskStatus): string {
44
+ const props: AIAgentTaskStatusProps | undefined =
45
+ this.getAllStatusProps().find((p: AIAgentTaskStatusProps) => {
46
+ return p.status === status;
47
+ });
48
+ return props?.description || "";
49
+ }
50
+
51
+ public static getTitle(status: AIAgentTaskStatus): string {
52
+ const props: AIAgentTaskStatusProps | undefined =
53
+ this.getAllStatusProps().find((p: AIAgentTaskStatusProps) => {
54
+ return p.status === status;
55
+ });
56
+ return props?.title || "";
57
+ }
58
+
59
+ public static isTerminalStatus(status: AIAgentTaskStatus): boolean {
60
+ return (
61
+ status === AIAgentTaskStatus.Completed ||
62
+ status === AIAgentTaskStatus.Error
63
+ );
64
+ }
65
+ }
@@ -0,0 +1,40 @@
1
+ enum AIAgentTaskType {
2
+ FixException = "FixException",
3
+ }
4
+
5
+ export default AIAgentTaskType;
6
+
7
+ export interface AIAgentTaskTypeProps {
8
+ taskType: AIAgentTaskType;
9
+ title: string;
10
+ description: string;
11
+ }
12
+
13
+ export class AIAgentTaskTypeHelper {
14
+ public static getAllTaskTypeProps(): Array<AIAgentTaskTypeProps> {
15
+ return [
16
+ {
17
+ taskType: AIAgentTaskType.FixException,
18
+ title: "Fix Exception",
19
+ description:
20
+ "Analyze and fix an exception that occurred in your application.",
21
+ },
22
+ ];
23
+ }
24
+
25
+ public static getDescription(taskType: AIAgentTaskType): string {
26
+ const props: AIAgentTaskTypeProps | undefined =
27
+ this.getAllTaskTypeProps().find((p: AIAgentTaskTypeProps) => {
28
+ return p.taskType === taskType;
29
+ });
30
+ return props?.description || "";
31
+ }
32
+
33
+ public static getTitle(taskType: AIAgentTaskType): string {
34
+ const props: AIAgentTaskTypeProps | undefined =
35
+ this.getAllTaskTypeProps().find((p: AIAgentTaskTypeProps) => {
36
+ return p.taskType === taskType;
37
+ });
38
+ return props?.title || "";
39
+ }
40
+ }
@@ -4,6 +4,8 @@ enum EmailTemplateType {
4
4
  ProbeOffline = "ProbeOffline.hbs",
5
5
  SignupWelcomeEmail = "SignupWelcomeEmail.hbs",
6
6
  ProbeConnectionStatusChange = "ProbeConnectionStatusChange.hbs",
7
+ AIAgentConnectionStatusChange = "AIAgentConnectionStatusChange.hbs",
8
+ AIAgentOwnerAdded = "AIAgentOwnerAdded.hbs",
7
9
  ConfirmStatusPageSubscription = "ConfirmStatusPageSubscription.hbs",
8
10
  EmailVerified = "EmailVerified.hbs",
9
11
  PasswordChanged = "PasswordChanged.hbs",
@@ -10,7 +10,8 @@ export type MonitorEvaluationEventType =
10
10
  | "alert-created"
11
11
  | "alert-resolved"
12
12
  | "alert-skipped"
13
- | "monitor-status-changed";
13
+ | "monitor-status-changed"
14
+ | "probe-agreement";
14
15
 
15
16
  export interface MonitorEvaluationFilterResult {
16
17
  checkOn: CheckOn;
@@ -34,6 +34,10 @@ enum NotificationSettingEventType {
34
34
  SEND_PROBE_STATUS_CHANGED_OWNER_NOTIFICATION = "Send probe status changed notification when I am the owner of the probe",
35
35
  SEND_PROBE_OWNER_ADDED_NOTIFICATION = "Send notification when I am added as a owner to the probe",
36
36
 
37
+ // AI Agent Status change Notification
38
+ SEND_AI_AGENT_STATUS_CHANGED_OWNER_NOTIFICATION = "Send AI agent status changed notification when I am the owner of the AI agent",
39
+ SEND_AI_AGENT_OWNER_ADDED_NOTIFICATION = "Send notification when I am added as a owner to the AI agent",
40
+
37
41
  // On Call Notifications
38
42
  SEND_WHEN_USER_IS_ON_CALL_ROSTER = "When user is on-call roster",
39
43
  SEND_WHEN_USER_IS_NEXT_ON_CALL_ROSTER = "When user is next on-call roster",