@oneuptime/common 14.0.9 → 14.0.10

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 (383) hide show
  1. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  2. package/Models/DatabaseModels/CephCluster.ts +213 -0
  3. package/Models/DatabaseModels/DatabaseServer.ts +213 -0
  4. package/Models/DatabaseModels/DockerHost.ts +213 -0
  5. package/Models/DatabaseModels/DockerSwarmCluster.ts +213 -0
  6. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  7. package/Models/DatabaseModels/Host.ts +213 -0
  8. package/Models/DatabaseModels/Index.ts +2 -0
  9. package/Models/DatabaseModels/PodmanHost.ts +213 -0
  10. package/Models/DatabaseModels/ProxmoxCluster.ts +213 -0
  11. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  12. package/Models/DatabaseModels/RunnerJob.ts +144 -0
  13. package/Models/DatabaseModels/VMwareVCenter.ts +213 -0
  14. package/Server/API/AutoRemediationAPI.ts +392 -1
  15. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  18. package/Server/Infrastructure/Semaphore.ts +22 -0
  19. package/Server/Middleware/TelemetryIngest.ts +15 -5
  20. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  21. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  22. package/Server/Services/CephClusterService.ts +109 -1
  23. package/Server/Services/DatabaseServerService.ts +116 -1
  24. package/Server/Services/DockerHostService.ts +109 -1
  25. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  26. package/Server/Services/HostService.ts +126 -4
  27. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  28. package/Server/Services/PodmanHostService.ts +109 -1
  29. package/Server/Services/ProxmoxClusterService.ts +110 -1
  30. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  31. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  32. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  33. package/Server/Services/RunnerJobService.ts +611 -4
  34. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  35. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  36. package/Server/Services/VMwareVCenterService.ts +110 -1
  37. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1434 -32
  38. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +935 -21
  39. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  40. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +577 -0
  41. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  42. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  43. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  44. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  45. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +873 -0
  46. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +72 -2
  47. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +72 -5
  48. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +72 -5
  49. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
  50. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  51. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  52. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  53. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  54. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  55. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  56. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  57. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +298 -224
  58. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +35 -15
  59. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  60. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +366 -143
  61. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  62. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  63. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  64. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  65. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  66. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  67. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +93 -0
  68. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +18 -6
  69. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  70. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  71. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  72. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  73. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  74. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +1721 -0
  75. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1002 -0
  76. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  77. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  78. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  79. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +33 -1
  80. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  81. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  82. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  83. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  84. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  85. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  86. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  87. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
  88. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
  89. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
  90. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  91. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  92. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  93. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  94. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  95. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  96. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  97. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  98. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  99. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  100. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  101. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  102. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  103. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  104. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  105. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
  106. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  107. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  108. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  109. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  110. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  111. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +453 -0
  112. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  113. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  114. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  115. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1249 -0
  116. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  117. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  118. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +722 -0
  119. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  120. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  121. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  122. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +830 -0
  123. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  124. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  125. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  126. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  127. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  128. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
  129. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  130. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  131. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  132. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  133. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  134. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  135. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  136. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  137. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  138. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  139. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  140. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  141. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  142. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  143. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  144. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  145. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  146. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  147. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  148. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  149. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  150. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  151. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +517 -0
  152. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  153. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  154. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  155. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  156. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  157. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  158. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  159. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  160. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  161. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  162. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  163. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  164. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  165. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  166. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  167. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  168. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  169. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  170. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  171. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  172. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  173. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  174. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  175. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
  176. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  177. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  178. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  179. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  180. package/Types/ResourceAiAgent/ResourceAiAccess.ts +574 -0
  181. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  182. package/Types/Runbook/RunbookStepType.ts +29 -0
  183. package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
  184. package/Utils/AI/InvestigationReport.ts +121 -15
  185. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  186. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  187. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  188. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  189. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  190. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  191. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  192. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  193. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  194. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  195. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  196. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  197. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  198. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  199. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  200. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  201. package/build/dist/Models/DatabaseModels/CephCluster.js +219 -0
  202. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  203. package/build/dist/Models/DatabaseModels/DatabaseServer.js +219 -0
  204. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  205. package/build/dist/Models/DatabaseModels/DockerHost.js +219 -0
  206. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  207. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +219 -0
  208. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  209. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  210. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  211. package/build/dist/Models/DatabaseModels/Host.js +219 -0
  212. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  214. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/PodmanHost.js +219 -0
  216. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +219 -0
  218. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  220. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  221. package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
  222. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +219 -0
  224. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  225. package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
  226. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  227. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  228. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  229. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  230. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  231. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  232. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  233. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  234. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  235. package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
  236. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  237. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  238. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  239. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  240. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  241. package/build/dist/Server/Services/CephClusterService.js +104 -0
  242. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  243. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  244. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  245. package/build/dist/Server/Services/DockerHostService.js +104 -0
  246. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  247. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  248. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  249. package/build/dist/Server/Services/HostService.js +114 -2
  250. package/build/dist/Server/Services/HostService.js.map +1 -1
  251. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  252. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  253. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  254. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  255. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  256. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  257. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  258. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  259. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  260. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  261. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  262. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  263. package/build/dist/Server/Services/RunnerJobService.js +344 -5
  264. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  265. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  266. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  267. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  268. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  269. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  270. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  271. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1029 -30
  272. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  273. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +633 -28
  274. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  275. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  276. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  277. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +330 -0
  278. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  279. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  280. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  281. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  282. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  283. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  284. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  285. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  286. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  287. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +600 -0
  288. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  289. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +50 -4
  290. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  291. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +55 -4
  292. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  293. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +55 -4
  294. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  295. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
  296. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  297. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  298. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  299. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  300. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  301. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  302. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  303. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  304. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  305. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  306. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  307. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  308. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  309. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  310. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  311. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +183 -209
  312. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  313. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +19 -15
  314. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  315. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  316. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  317. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +263 -110
  318. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  319. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  320. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  321. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  322. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  323. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  324. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  325. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  326. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  327. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  328. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  329. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  330. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  331. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  332. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  333. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  334. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  335. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
  336. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  337. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  338. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  339. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  340. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  341. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  342. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  343. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  344. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  345. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +275 -0
  346. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  347. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  348. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  349. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  350. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  351. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
  352. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  353. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  354. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  355. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  356. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  357. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  358. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  359. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  360. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  361. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  362. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  363. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  364. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  365. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  366. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  367. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  368. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  369. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  370. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  371. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  372. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  373. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  374. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  375. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  376. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  377. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  378. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  379. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  380. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  381. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  382. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  383. package/package.json +1 -1
@@ -0,0 +1,419 @@
1
+ import Project from "./Project";
2
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
3
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
4
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
5
+ import ColumnLength from "../../Types/Database/ColumnLength";
6
+ import ColumnType from "../../Types/Database/ColumnType";
7
+ import TableColumn from "../../Types/Database/TableColumn";
8
+ import TableColumnType from "../../Types/Database/TableColumnType";
9
+ import TableMetadata from "../../Types/Database/TableMetadata";
10
+ import TenantColumn from "../../Types/Database/TenantColumn";
11
+ import IconProp from "../../Types/Icon/IconProp";
12
+ import { JSONObject } from "../../Types/JSON";
13
+ import ObjectID from "../../Types/ObjectID";
14
+ import Permission from "../../Types/Permission";
15
+ import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
16
+ import {
17
+ ResourceAiAgentConnectionStatus,
18
+ ResourceAiAgentRegistrationRefusalReason,
19
+ } from "../../Types/ResourceAiAgent/ResourceAiAccess";
20
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
21
+
22
+ /*
23
+ * Who may see a resource's AI agent: whoever may read a resource of any of
24
+ * the AiResourceType models (DockerHost, PodmanHost, DockerSwarmCluster,
25
+ * ProxmoxCluster, VMwareVCenter, CephCluster, DatabaseServer, Host) — the
26
+ * roles every one of their read lists shares, plus each model's own Read
27
+ * permission. The table is polymorphic, so no one list can be "exactly the
28
+ * resource's readers" the way KubernetesAiAgent's is the cluster's: the
29
+ * per-type check (the caller may read THIS resource) is the resource AI
30
+ * access API's, which reads the row as root after loading the resource
31
+ * with the caller's permissions. Nobody writes a row through the API — the
32
+ * agent registers and heartbeats through /resource-ai-agent-ingest, and an
33
+ * admin reset goes through the resource AI access API, both as root.
34
+ */
35
+ const RESOURCE_READERS: Array<Permission> = [
36
+ Permission.ProjectOwner,
37
+ Permission.ProjectAdmin,
38
+ Permission.ProjectMember,
39
+ Permission.Viewer,
40
+ Permission.SettingsAdmin,
41
+ Permission.SettingsMember,
42
+ Permission.SettingsViewer,
43
+ Permission.ReadDockerHost,
44
+ Permission.ReadPodmanHost,
45
+ Permission.ReadDockerSwarmCluster,
46
+ Permission.ReadProxmoxCluster,
47
+ Permission.ReadVMwareVCenter,
48
+ Permission.ReadCephCluster,
49
+ Permission.ReadDatabaseServer,
50
+ Permission.ReadHost,
51
+ ];
52
+
53
+ /*
54
+ * The resource AI agent of one infrastructure resource (a Docker or Podman
55
+ * host, a Docker Swarm, Proxmox or Ceph cluster, a vCenter, a database
56
+ * server or a host): the slim executor installed next to the resource's
57
+ * telemetry collector (image oneuptime/resource-ai-agent). Like the
58
+ * Kubernetes AI agent it is deliberately NOT a Runner: it never appears on
59
+ * the Runners page, is never handed a credential (it uses only credentials
60
+ * from its own environment and mounts) and runs nothing but AI resource
61
+ * commands — RunnerJob rows of step type ResourceCommand targeted at it
62
+ * through RunnerJob.targetResourceAiAgentId.
63
+ *
64
+ * One row per resource, keyed by (resourceType, resourceId). resourceId has
65
+ * no foreign key on purpose: it points into a different table for every
66
+ * resourceType. The row goes with its project (ON DELETE CASCADE); nothing
67
+ * ties it to the resource row in the database, so removing it with its
68
+ * resource is the server's job.
69
+ *
70
+ * The agent registers with the project's telemetry ingestion key and
71
+ * receives an agent key; only the key's sha256 is kept (keyHash), and no
72
+ * user can read it. The dashboard reads the row through the resource's AI
73
+ * access status, which is why there is no CRUD API and no API documentation
74
+ * for this table (KubernetesAiAgent and UserProjectSsoConsent are the
75
+ * precedent).
76
+ */
77
+ @TenantColumn("projectId")
78
+ @TableAccessControl({
79
+ create: [],
80
+ read: RESOURCE_READERS,
81
+ delete: [],
82
+ update: [],
83
+ })
84
+ /*
85
+ * One agent per live resource, enforced by the database: two agents
86
+ * registering for the same new resource at once must not both create a
87
+ * row. Named, and declared here rather than only in a migration, so
88
+ * TypeORM's schema builder recognises it and never generates a DROP for it.
89
+ */
90
+ @Index(
91
+ "IDX_ResourceAiAgent_projectId_resourceType_resourceId",
92
+ ["projectId", "resourceType", "resourceId"],
93
+ {
94
+ unique: true,
95
+ where: '"deletedAt" IS NULL',
96
+ },
97
+ )
98
+ @TableMetadata({
99
+ tableName: "ResourceAiAgent",
100
+ singularName: "Resource AI Agent",
101
+ pluralName: "Resource AI Agents",
102
+ icon: IconProp.ServerStack,
103
+ tableDescription:
104
+ "The AI agent installed next to an infrastructure resource (a Docker or Podman host, a Docker Swarm, Proxmox or Ceph cluster, a VMware vCenter, a database server or a host): the executor OneUptime AI uses to investigate (and, when allowed, fix) that resource. One per resource. Managed by the server; not user-writable.",
105
+ })
106
+ @Entity({
107
+ name: "ResourceAiAgent",
108
+ })
109
+ export default class ResourceAiAgent extends BaseModel {
110
+ @ColumnAccessControl({
111
+ create: [],
112
+ read: RESOURCE_READERS,
113
+ update: [],
114
+ })
115
+ @TableColumn({
116
+ manyToOneRelationColumn: "projectId",
117
+ type: TableColumnType.Entity,
118
+ modelType: Project,
119
+ title: "Project",
120
+ description: "Relation to Project Resource in which this object belongs",
121
+ })
122
+ @ManyToOne(
123
+ () => {
124
+ return Project;
125
+ },
126
+ {
127
+ eager: false,
128
+ nullable: false,
129
+ onDelete: "CASCADE",
130
+ orphanedRowAction: "nullify",
131
+ },
132
+ )
133
+ @JoinColumn({ name: "projectId" })
134
+ public project?: Project = undefined;
135
+
136
+ @ColumnAccessControl({
137
+ create: [],
138
+ read: RESOURCE_READERS,
139
+ update: [],
140
+ })
141
+ @Index()
142
+ @TableColumn({
143
+ type: TableColumnType.ObjectID,
144
+ required: true,
145
+ canReadOnRelationQuery: true,
146
+ title: "Project ID",
147
+ description: "ID of your OneUptime Project in which this object belongs",
148
+ })
149
+ @Column({
150
+ type: ColumnType.ObjectID,
151
+ nullable: false,
152
+ transformer: ObjectID.getDatabaseTransformer(),
153
+ })
154
+ public projectId?: ObjectID = undefined;
155
+
156
+ /*
157
+ * Which model resourceId points into: an AiResourceType value, stored as
158
+ * spelled (the enum values are the database contract).
159
+ */
160
+ @ColumnAccessControl({
161
+ create: [],
162
+ read: RESOURCE_READERS,
163
+ update: [],
164
+ })
165
+ @Index()
166
+ @TableColumn({
167
+ type: TableColumnType.ShortText,
168
+ required: true,
169
+ canReadOnRelationQuery: true,
170
+ title: "Resource Type",
171
+ description:
172
+ "The kind of resource this AI agent runs next to: DockerHost, PodmanHost, DockerSwarmCluster, ProxmoxCluster, VMwareVCenter, CephCluster, DatabaseServer or Host.",
173
+ example: AiResourceType.DockerHost,
174
+ })
175
+ @Column({
176
+ type: ColumnType.ShortText,
177
+ length: ColumnLength.ShortText,
178
+ nullable: false,
179
+ })
180
+ public resourceType?: AiResourceType = undefined;
181
+
182
+ /*
183
+ * The resource row (in the table resourceType names). No foreign key: a
184
+ * column can reference only one table.
185
+ */
186
+ @ColumnAccessControl({
187
+ create: [],
188
+ read: RESOURCE_READERS,
189
+ update: [],
190
+ })
191
+ @Index()
192
+ @TableColumn({
193
+ type: TableColumnType.ObjectID,
194
+ required: true,
195
+ canReadOnRelationQuery: true,
196
+ title: "Resource ID",
197
+ description:
198
+ "ID of the resource this AI agent runs next to, in the table its resource type names. A resource has at most one agent.",
199
+ })
200
+ @Column({
201
+ type: ColumnType.ObjectID,
202
+ nullable: false,
203
+ transformer: ObjectID.getDatabaseTransformer(),
204
+ })
205
+ public resourceId?: ObjectID = undefined;
206
+
207
+ /*
208
+ * The identity the agent registered with — the one its resource's
209
+ * collector reports (a host name, a cluster name, a database endpoint) —
210
+ * as it last presented it.
211
+ */
212
+ @ColumnAccessControl({
213
+ create: [],
214
+ read: RESOURCE_READERS,
215
+ update: [],
216
+ })
217
+ @TableColumn({
218
+ type: TableColumnType.LongText,
219
+ required: false,
220
+ title: "Resource Identifier",
221
+ description:
222
+ "The identity the agent registered its resource with (the host name, cluster name or database endpoint its telemetry collector reports). Set by the server.",
223
+ })
224
+ @Column({
225
+ type: ColumnType.LongText,
226
+ length: ColumnLength.LongText,
227
+ nullable: true,
228
+ })
229
+ public resourceIdentifier?: string = undefined;
230
+
231
+ /*
232
+ * sha256 (hex) of the agent key the agent presents on every request after
233
+ * registration. The key itself is never stored. Null after an admin reset:
234
+ * no key matches, so the running agent fails authentication and registers
235
+ * again. Unreadable by every role — even a hash of a bearer credential is
236
+ * nothing the dashboard or the API should hand out.
237
+ */
238
+ @ColumnAccessControl({
239
+ create: [],
240
+ read: [],
241
+ update: [],
242
+ })
243
+ @TableColumn({
244
+ type: TableColumnType.ShortText,
245
+ required: false,
246
+ title: "Key Hash",
247
+ description:
248
+ "SHA-256 of the key the agent authenticates with. Set by the server; never readable.",
249
+ })
250
+ @Column({
251
+ type: ColumnType.ShortText,
252
+ length: ColumnLength.ShortText,
253
+ nullable: true,
254
+ })
255
+ public keyHash?: string = undefined;
256
+
257
+ @ColumnAccessControl({
258
+ create: [],
259
+ read: RESOURCE_READERS,
260
+ update: [],
261
+ })
262
+ @TableColumn({
263
+ type: TableColumnType.ShortText,
264
+ required: false,
265
+ title: "Agent Version",
266
+ description:
267
+ "Self-reported version of the resource AI agent. Updated on registration and every heartbeat.",
268
+ })
269
+ @Column({
270
+ type: ColumnType.ShortText,
271
+ length: ColumnLength.ShortText,
272
+ nullable: true,
273
+ })
274
+ public agentVersion?: string = undefined;
275
+
276
+ /*
277
+ * The agent's last reported posture (ResourceAiAgentPosture), always read
278
+ * back through parseResourceAiAgentPosture. The server forces
279
+ * resourceType and resourceIdentifier before storing it.
280
+ */
281
+ @ColumnAccessControl({
282
+ create: [],
283
+ read: RESOURCE_READERS,
284
+ update: [],
285
+ })
286
+ @TableColumn({
287
+ type: TableColumnType.JSON,
288
+ required: false,
289
+ title: "Posture",
290
+ description:
291
+ "What the agent last reported about itself: whether it may write, the targets it may write to, the targets it never changes, whether it could reach its resource and the resource's version. Set by the server.",
292
+ })
293
+ @Column({
294
+ type: ColumnType.JSON,
295
+ nullable: true,
296
+ })
297
+ public posture?: JSONObject = undefined;
298
+
299
+ @ColumnAccessControl({
300
+ create: [],
301
+ read: RESOURCE_READERS,
302
+ update: [],
303
+ })
304
+ @TableColumn({
305
+ type: TableColumnType.Date,
306
+ required: false,
307
+ canReadOnRelationQuery: true,
308
+ title: "Last Alive At",
309
+ description: "Most recent registration or heartbeat from this agent.",
310
+ })
311
+ @Column({
312
+ type: ColumnType.Date,
313
+ nullable: true,
314
+ })
315
+ public lastAliveAt?: Date = undefined;
316
+
317
+ @ColumnAccessControl({
318
+ create: [],
319
+ read: RESOURCE_READERS,
320
+ update: [],
321
+ })
322
+ @TableColumn({
323
+ type: TableColumnType.ShortText,
324
+ required: true,
325
+ isDefaultValueColumn: true,
326
+ canReadOnRelationQuery: true,
327
+ title: "Connection Status",
328
+ description:
329
+ "connected while the agent registers and heartbeats; disconnected once it signs off or is reset. It is online only when connected AND its last heartbeat is recent.",
330
+ defaultValue: "disconnected",
331
+ })
332
+ @Column({
333
+ type: ColumnType.ShortText,
334
+ length: ColumnLength.ShortText,
335
+ nullable: false,
336
+ default: "disconnected",
337
+ })
338
+ public connectionStatus?: ResourceAiAgentConnectionStatus = undefined;
339
+
340
+ @ColumnAccessControl({
341
+ create: [],
342
+ read: RESOURCE_READERS,
343
+ update: [],
344
+ })
345
+ @TableColumn({
346
+ type: TableColumnType.Date,
347
+ required: false,
348
+ title: "Last Registered At",
349
+ description: "When the agent last registered and was issued a key.",
350
+ })
351
+ @Column({
352
+ type: ColumnType.Date,
353
+ nullable: true,
354
+ })
355
+ public lastRegisteredAt?: Date = undefined;
356
+
357
+ /*
358
+ * The TelemetryIngestionKey whose request last minted this agent's key
359
+ * (TelemetryRequest.ingestionKeyPolicy.ingestionKeyId), so an operator
360
+ * who revokes a leaked key can tell which agents it registered. No foreign
361
+ * key: deleting an ingestion key must not delete or re-key an agent.
362
+ */
363
+ @ColumnAccessControl({
364
+ create: [],
365
+ read: RESOURCE_READERS,
366
+ update: [],
367
+ })
368
+ @TableColumn({
369
+ type: TableColumnType.ObjectID,
370
+ required: false,
371
+ title: "Registered With Ingestion Key ID",
372
+ description:
373
+ "ID of the telemetry ingestion key the agent last registered with.",
374
+ })
375
+ @Column({
376
+ type: ColumnType.ObjectID,
377
+ nullable: true,
378
+ transformer: ObjectID.getDatabaseTransformer(),
379
+ })
380
+ public registeredWithIngestionKeyId?: ObjectID = undefined;
381
+
382
+ @ColumnAccessControl({
383
+ create: [],
384
+ read: RESOURCE_READERS,
385
+ update: [],
386
+ })
387
+ @TableColumn({
388
+ type: TableColumnType.Date,
389
+ required: false,
390
+ title: "Last Refused Registration At",
391
+ description:
392
+ "When another agent last tried to register for this resource and was refused.",
393
+ })
394
+ @Column({
395
+ type: ColumnType.Date,
396
+ nullable: true,
397
+ })
398
+ public lastRefusedRegistrationAt?: Date = undefined;
399
+
400
+ @ColumnAccessControl({
401
+ create: [],
402
+ read: RESOURCE_READERS,
403
+ update: [],
404
+ })
405
+ @TableColumn({
406
+ type: TableColumnType.ShortText,
407
+ required: false,
408
+ title: "Last Refused Registration Reason",
409
+ description:
410
+ "Why that registration was refused, for example previous_instance_online.",
411
+ })
412
+ @Column({
413
+ type: ColumnType.ShortText,
414
+ length: ColumnLength.ShortText,
415
+ nullable: true,
416
+ })
417
+ public lastRefusedRegistrationReason?: ResourceAiAgentRegistrationRefusalReason =
418
+ undefined;
419
+ }
@@ -1,6 +1,7 @@
1
1
  import KubernetesAiAgent from "./KubernetesAiAgent";
2
2
  import KubernetesCluster from "./KubernetesCluster";
3
3
  import Project from "./Project";
4
+ import ResourceAiAgent from "./ResourceAiAgent";
4
5
  import Runner from "./Runner";
5
6
  import RunbookExecution from "./RunbookExecution";
6
7
  import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
@@ -17,6 +18,7 @@ import TenantColumn from "../../Types/Database/TenantColumn";
17
18
  import IconProp from "../../Types/Icon/IconProp";
18
19
  import ObjectID from "../../Types/ObjectID";
19
20
  import Permission from "../../Types/Permission";
21
+ import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
20
22
  import { JSONObject } from "../../Types/JSON";
21
23
  import RunnerJobStatus from "../../Types/Runbook/RunnerJobStatus";
22
24
  import RunnerJobOrigin from "../../Types/Runbook/RunnerJobOrigin";
@@ -342,6 +344,72 @@ export default class RunnerJob extends BaseModel {
342
344
  })
343
345
  public kubernetesClusterId?: ObjectID = undefined;
344
346
 
347
+ /*
348
+ * The resource a ResourceCommand job ran against, so a resource's AI page
349
+ * can list every command OneUptime AI ran on it (what kubernetesClusterId
350
+ * is for a Kubectl job). Two columns, not a relation: resourceId points
351
+ * into the table resourceType names, so it can have no foreign key.
352
+ */
353
+ @ColumnAccessControl({
354
+ create: [],
355
+ read: [
356
+ Permission.ProjectOwner,
357
+ Permission.ProjectAdmin,
358
+ Permission.ProjectMember,
359
+ Permission.Viewer,
360
+ Permission.RunbookAdmin,
361
+ Permission.RunbookMember,
362
+ Permission.RunbookViewer,
363
+ Permission.ReadRunbookExecution,
364
+ ],
365
+ update: [],
366
+ })
367
+ @Index()
368
+ @TableColumn({
369
+ type: TableColumnType.ShortText,
370
+ required: false,
371
+ canReadOnRelationQuery: true,
372
+ title: "Resource Type",
373
+ description:
374
+ "The kind of resource a ResourceCommand job ran against (DockerHost, PodmanHost, DockerSwarmCluster, ProxmoxCluster, VMwareVCenter, CephCluster, DatabaseServer or Host). Set on ResourceCommand jobs only.",
375
+ })
376
+ @Column({
377
+ type: ColumnType.ShortText,
378
+ length: ColumnLength.ShortText,
379
+ nullable: true,
380
+ })
381
+ public resourceType?: AiResourceType = undefined;
382
+
383
+ @ColumnAccessControl({
384
+ create: [],
385
+ read: [
386
+ Permission.ProjectOwner,
387
+ Permission.ProjectAdmin,
388
+ Permission.ProjectMember,
389
+ Permission.Viewer,
390
+ Permission.RunbookAdmin,
391
+ Permission.RunbookMember,
392
+ Permission.RunbookViewer,
393
+ Permission.ReadRunbookExecution,
394
+ ],
395
+ update: [],
396
+ })
397
+ @Index()
398
+ @TableColumn({
399
+ type: TableColumnType.ObjectID,
400
+ required: false,
401
+ canReadOnRelationQuery: true,
402
+ title: "Resource ID",
403
+ description:
404
+ "ID of the resource a ResourceCommand job ran against, in the table its resource type names.",
405
+ })
406
+ @Column({
407
+ type: ColumnType.ObjectID,
408
+ nullable: true,
409
+ transformer: ObjectID.getDatabaseTransformer(),
410
+ })
411
+ public resourceId?: ObjectID = undefined;
412
+
345
413
  @ColumnAccessControl({
346
414
  create: [],
347
415
  read: [
@@ -535,6 +603,82 @@ export default class RunnerJob extends BaseModel {
535
603
  })
536
604
  public targetKubernetesAiAgentId?: ObjectID = undefined;
537
605
 
606
+ /*
607
+ * The resource AI agent an AI resource command (step type ResourceCommand)
608
+ * is targeted at: the agent next to a Docker or Podman host, a Docker
609
+ * Swarm, Proxmox or Ceph cluster, a vCenter, a database server or a host.
610
+ * A job sets exactly one of targetAgentId (a Runner),
611
+ * targetKubernetesAiAgentId and this; only the named agent may claim it.
612
+ * As for the Kubernetes AI agent, the agent's id is also written to
613
+ * assignedAgentId on claim, so the job heartbeat and result paths are the
614
+ * Runner's own. Deleting the agent row nulls this, which leaves the job
615
+ * claimable by nobody.
616
+ */
617
+ @ColumnAccessControl({
618
+ create: [],
619
+ read: [
620
+ Permission.ProjectOwner,
621
+ Permission.ProjectAdmin,
622
+ Permission.ProjectMember,
623
+ Permission.Viewer,
624
+ Permission.RunbookAdmin,
625
+ Permission.RunbookMember,
626
+ Permission.RunbookViewer,
627
+ Permission.ReadRunbookExecution,
628
+ ],
629
+ update: [],
630
+ })
631
+ @TableColumn({
632
+ manyToOneRelationColumn: "targetResourceAiAgentId",
633
+ type: TableColumnType.Entity,
634
+ modelType: ResourceAiAgent,
635
+ title: "Target Resource AI Agent",
636
+ description:
637
+ "The resource AI agent this AI resource command runs on (the agent installed next to the resource). Only this agent may claim the job.",
638
+ })
639
+ @ManyToOne(
640
+ () => {
641
+ return ResourceAiAgent;
642
+ },
643
+ {
644
+ eager: false,
645
+ nullable: true,
646
+ onDelete: "SET NULL",
647
+ orphanedRowAction: "nullify",
648
+ },
649
+ )
650
+ @JoinColumn({ name: "targetResourceAiAgentId" })
651
+ public targetResourceAiAgent?: ResourceAiAgent = undefined;
652
+
653
+ @ColumnAccessControl({
654
+ create: [],
655
+ read: [
656
+ Permission.ProjectOwner,
657
+ Permission.ProjectAdmin,
658
+ Permission.ProjectMember,
659
+ Permission.Viewer,
660
+ Permission.RunbookAdmin,
661
+ Permission.RunbookMember,
662
+ Permission.RunbookViewer,
663
+ Permission.ReadRunbookExecution,
664
+ ],
665
+ update: [],
666
+ })
667
+ @Index()
668
+ @TableColumn({
669
+ type: TableColumnType.ObjectID,
670
+ required: false,
671
+ title: "Target Resource AI Agent ID",
672
+ description:
673
+ "ID of the resource AI agent that should claim and execute this job.",
674
+ })
675
+ @Column({
676
+ type: ColumnType.ObjectID,
677
+ nullable: true,
678
+ transformer: ObjectID.getDatabaseTransformer(),
679
+ })
680
+ public targetResourceAiAgentId?: ObjectID = undefined;
681
+
538
682
  @ColumnAccessControl({
539
683
  create: [],
540
684
  read: [