@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
@@ -3,7 +3,15 @@ import HostLabelRuleEngineService from "./HostLabelRuleEngineService";
3
3
  import HostOwnerRuleEngineService from "./HostOwnerRuleEngineService";
4
4
  import Model from "../../Models/DatabaseModels/Host";
5
5
  import Label from "../../Models/DatabaseModels/Label";
6
- import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
6
+ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
7
+ import CreateBy from "../Types/Database/CreateBy";
8
+ import DeleteBy from "../Types/Database/DeleteBy";
9
+ import UpdateBy from "../Types/Database/UpdateBy";
10
+ import ResourceAiAccessSettings, {
11
+ ResourceAiAccessFeedItem,
12
+ } from "../Utils/AI/ResourceAccess/ResourceAiAccessSettings";
13
+ import ResourceAiDeleteCleanup from "../Utils/AI/ResourceAccess/ResourceAiDeleteCleanup";
14
+ import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
7
15
  import HostFeedService from "./HostFeedService";
8
16
  import { HostFeedEventType } from "../../Models/DatabaseModels/HostFeed";
9
17
  import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
@@ -119,6 +127,13 @@ export class Service extends DatabaseService<Model> {
119
127
  public async findOrCreateByHostIdentifier(data: {
120
128
  projectId: ObjectID;
121
129
  hostIdentifier: string;
130
+ /*
131
+ * Skip the in-process memo and look the row up (the memo is then
132
+ * refreshed with what was found or created). For a caller that learned
133
+ * the memoed id names a host deleted since: the memo is never
134
+ * invalidated by a delete, so it keeps that id for up to its TTL.
135
+ */
136
+ bypassMemo?: boolean | undefined;
122
137
  }): Promise<Model> {
123
138
  /*
124
139
  * Canonicalize the identifier (trim + lowercase, matching
@@ -141,8 +156,9 @@ export class Service extends DatabaseService<Model> {
141
156
  * the resolving call performed within the last minute.
142
157
  */
143
158
  const memoKey: string = `${data.projectId.toString()}:${hostIdentifier}`;
144
- const memoedResolution: HostResolution | undefined =
145
- hostResolutionInProcessMemo.get(memoKey);
159
+ const memoedResolution: HostResolution | undefined = data.bypassMemo
160
+ ? undefined
161
+ : hostResolutionInProcessMemo.get(memoKey);
146
162
  if (memoedResolution) {
147
163
  const memoedHost: Model = new Model();
148
164
  memoedHost._id = memoedResolution.hostIdStr;
@@ -464,8 +480,14 @@ export class Service extends DatabaseService<Model> {
464
480
  cloudAccountId: extra?.cloudAccountId ?? null,
465
481
  };
466
482
 
483
+ /*
484
+ * Change detection only, but the payload carries the cloud account id,
485
+ * so it is hashed with SHA-256 rather than SHA-1. The value lives in the
486
+ * heartbeat throttle's cache, so the switch costs each host one extra
487
+ * metadata write after a deploy, nothing more.
488
+ */
467
489
  return crypto
468
- .createHash("sha1")
490
+ .createHash("sha256")
469
491
  .update(JSON.stringify(normalized))
470
492
  .digest("hex");
471
493
  }
@@ -739,6 +761,79 @@ export class Service extends DatabaseService<Model> {
739
761
  });
740
762
  }
741
763
 
764
+ /*
765
+ * Deleting a host settles its in-flight AI remediation rounds and removes its
766
+ * resource AI agent — read before the delete, done after it for the hosts
767
+ * actually deleted (ResourceAiDeleteCleanup, shared by every resource AI
768
+ * agent's resource).
769
+ */
770
+ @CaptureSpan()
771
+ protected override async onBeforeDelete(
772
+ deleteBy: DeleteBy<Model>,
773
+ ): Promise<OnDelete<Model>> {
774
+ return {
775
+ deleteBy,
776
+ carryForward: await ResourceAiDeleteCleanup.beforeDelete({
777
+ resourceType: AiResourceType.Host,
778
+ service: this,
779
+ deleteBy,
780
+ }),
781
+ };
782
+ }
783
+
784
+ @CaptureSpan()
785
+ protected override async onDeleteSuccess(
786
+ onDelete: OnDelete<Model>,
787
+ deletedItemIds: Array<ObjectID>,
788
+ ): Promise<OnDelete<Model>> {
789
+ await ResourceAiDeleteCleanup.afterDelete({
790
+ resourceType: AiResourceType.Host,
791
+ onDelete,
792
+ deletedItemIds,
793
+ });
794
+
795
+ return onDelete;
796
+ }
797
+
798
+ /*
799
+ * A create is held to the same AI access rules as an update, judged
800
+ * against the never-configured defaults a new host starts from: an
801
+ * unusable mode or allowlist is refused for every caller, and the
802
+ * server-only aiAccess* columns for every caller but root (a master admin
803
+ * included, whom the create column ACLs never check).
804
+ */
805
+ @CaptureSpan()
806
+ protected override async onBeforeCreate(
807
+ createBy: CreateBy<Model>,
808
+ ): Promise<OnCreate<Model>> {
809
+ ResourceAiAccessSettings.checkCreate({
810
+ resourceType: AiResourceType.Host,
811
+ createBy,
812
+ });
813
+
814
+ return { createBy, carryForward: null };
815
+ }
816
+
817
+ /*
818
+ * An operator's write of an AI access setting (the investigation switch, the
819
+ * remediation mode, the command allowlist) is validated and checked against
820
+ * who may make AI do more on this host — the rules every resource AI agent's
821
+ * resource shares (ResourceAiAccessSettings).
822
+ */
823
+ @CaptureSpan()
824
+ protected override async onBeforeUpdate(
825
+ updateBy: UpdateBy<Model>,
826
+ ): Promise<OnUpdate<Model>> {
827
+ return {
828
+ updateBy,
829
+ carryForward: await ResourceAiAccessSettings.checkUpdate({
830
+ resourceType: AiResourceType.Host,
831
+ service: this,
832
+ updateBy,
833
+ }),
834
+ };
835
+ }
836
+
742
837
  @CaptureSpan()
743
838
  protected override async onUpdateSuccess(
744
839
  onUpdate: OnUpdate<Model>,
@@ -750,6 +845,33 @@ export class Service extends DatabaseService<Model> {
750
845
  },
751
846
  );
752
847
 
848
+ /*
849
+ * An operator's AI access write: recorded on the feed, and the host marked
850
+ * AI-configured.
851
+ */
852
+ await ResourceAiAccessSettings.afterUpdate({
853
+ service: this,
854
+ onUpdate,
855
+ updatedItemIds,
856
+ getResourceMarkdownLink: (
857
+ projectId: ObjectID,
858
+ hostId: ObjectID,
859
+ ): Promise<string> => {
860
+ return this.getHostMarkdownLink(projectId, hostId);
861
+ },
862
+ createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
863
+ await HostFeedService.createHostFeedItem({
864
+ hostId: item.resourceId,
865
+ projectId: item.projectId,
866
+ hostFeedEventType: HostFeedEventType.HostUpdated,
867
+ displayColor: item.displayColor,
868
+ feedInfoInMarkdown: item.feedInfoInMarkdown,
869
+ moreInformationInMarkdown: item.moreInformationInMarkdown,
870
+ userId: item.userId,
871
+ });
872
+ },
873
+ });
874
+
753
875
  return onUpdate;
754
876
  }
755
877
 
@@ -1,10 +1,57 @@
1
1
  import DatabaseService from "./DatabaseService";
2
2
  import Model from "../../Models/DatabaseModels/MetricRecordingRule";
3
+ import CreateBy from "../Types/Database/CreateBy";
4
+ import UpdateBy from "../Types/Database/UpdateBy";
5
+ import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
6
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
7
+ import BadDataException from "../../Types/Exception/BadDataException";
8
+ import SessionReplayBudgetMetricTypeUtil, {
9
+ SESSION_REPLAY_METRIC_NAME_PREFIX,
10
+ } from "../../Utils/SessionReplay/SessionReplayBudgetMetricType";
3
11
 
4
12
  export class Service extends DatabaseService<Model> {
5
13
  public constructor() {
6
14
  super(Model);
7
15
  }
16
+
17
+ /*
18
+ * A recording rule writes its output straight into the metric store, past
19
+ * OTLP ingest, so the reserved session replay names have to be refused
20
+ * here too: those series open budget incidents and are left out of
21
+ * telemetry billing by name, so nothing but the budget sweep may write
22
+ * them (see SessionReplayBudgetMetricTypeUtil.isReservedMetricName).
23
+ */
24
+ public static assertOutputMetricNameAllowed(name: unknown): void {
25
+ if (
26
+ typeof name === "string" &&
27
+ SessionReplayBudgetMetricTypeUtil.isReservedMetricName(name.trim())
28
+ ) {
29
+ throw new BadDataException(
30
+ `Metric names that start with "${SESSION_REPLAY_METRIC_NAME_PREFIX}" are reserved for OneUptime's session replay budget metrics. Choose another output metric name.`,
31
+ );
32
+ }
33
+ }
34
+
35
+ @CaptureSpan()
36
+ protected override async onBeforeCreate(
37
+ createBy: CreateBy<Model>,
38
+ ): Promise<OnCreate<Model>> {
39
+ Service.assertOutputMetricNameAllowed(createBy.data.outputMetricName);
40
+
41
+ return { createBy, carryForward: null };
42
+ }
43
+
44
+ @CaptureSpan()
45
+ protected override async onBeforeUpdate(
46
+ updateBy: UpdateBy<Model>,
47
+ ): Promise<OnUpdate<Model>> {
48
+ // Only an update that sets the name can make it reserved.
49
+ Service.assertOutputMetricNameAllowed(
50
+ (updateBy.data as unknown as Record<string, unknown>)["outputMetricName"],
51
+ );
52
+
53
+ return { updateBy, carryForward: null };
54
+ }
8
55
  }
9
56
 
10
57
  export default new Service();
@@ -3,7 +3,15 @@ import PodmanHostLabelRuleEngineService from "./PodmanHostLabelRuleEngineService
3
3
  import PodmanHostOwnerRuleEngineService from "./PodmanHostOwnerRuleEngineService";
4
4
  import Model from "../../Models/DatabaseModels/PodmanHost";
5
5
  import Label from "../../Models/DatabaseModels/Label";
6
- import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
6
+ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
7
+ import CreateBy from "../Types/Database/CreateBy";
8
+ import DeleteBy from "../Types/Database/DeleteBy";
9
+ import UpdateBy from "../Types/Database/UpdateBy";
10
+ import ResourceAiAccessSettings, {
11
+ ResourceAiAccessFeedItem,
12
+ } from "../Utils/AI/ResourceAccess/ResourceAiAccessSettings";
13
+ import ResourceAiDeleteCleanup from "../Utils/AI/ResourceAccess/ResourceAiDeleteCleanup";
14
+ import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
7
15
  import PodmanHostFeedService from "./PodmanHostFeedService";
8
16
  import { PodmanHostFeedEventType } from "../../Models/DatabaseModels/PodmanHostFeed";
9
17
  import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
@@ -472,6 +480,79 @@ export class Service extends DatabaseService<Model> {
472
480
  });
473
481
  }
474
482
 
483
+ /*
484
+ * Deleting a Podman host settles its in-flight AI remediation rounds and
485
+ * removes its resource AI agent — read before the delete, done after it for
486
+ * the Podman hosts actually deleted (ResourceAiDeleteCleanup, shared by every
487
+ * resource AI agent's resource).
488
+ */
489
+ @CaptureSpan()
490
+ protected override async onBeforeDelete(
491
+ deleteBy: DeleteBy<Model>,
492
+ ): Promise<OnDelete<Model>> {
493
+ return {
494
+ deleteBy,
495
+ carryForward: await ResourceAiDeleteCleanup.beforeDelete({
496
+ resourceType: AiResourceType.PodmanHost,
497
+ service: this,
498
+ deleteBy,
499
+ }),
500
+ };
501
+ }
502
+
503
+ @CaptureSpan()
504
+ protected override async onDeleteSuccess(
505
+ onDelete: OnDelete<Model>,
506
+ deletedItemIds: Array<ObjectID>,
507
+ ): Promise<OnDelete<Model>> {
508
+ await ResourceAiDeleteCleanup.afterDelete({
509
+ resourceType: AiResourceType.PodmanHost,
510
+ onDelete,
511
+ deletedItemIds,
512
+ });
513
+
514
+ return onDelete;
515
+ }
516
+
517
+ /*
518
+ * A create is held to the same AI access rules as an update, judged
519
+ * against the never-configured defaults a new Podman host starts from: an
520
+ * unusable mode or allowlist is refused for every caller, and the
521
+ * server-only aiAccess* columns for every caller but root (a master admin
522
+ * included, whom the create column ACLs never check).
523
+ */
524
+ @CaptureSpan()
525
+ protected override async onBeforeCreate(
526
+ createBy: CreateBy<Model>,
527
+ ): Promise<OnCreate<Model>> {
528
+ ResourceAiAccessSettings.checkCreate({
529
+ resourceType: AiResourceType.PodmanHost,
530
+ createBy,
531
+ });
532
+
533
+ return { createBy, carryForward: null };
534
+ }
535
+
536
+ /*
537
+ * An operator's write of an AI access setting (the investigation switch, the
538
+ * remediation mode, the command allowlist) is validated and checked against
539
+ * who may make AI do more on this Podman host — the rules every resource AI
540
+ * agent's resource shares (ResourceAiAccessSettings).
541
+ */
542
+ @CaptureSpan()
543
+ protected override async onBeforeUpdate(
544
+ updateBy: UpdateBy<Model>,
545
+ ): Promise<OnUpdate<Model>> {
546
+ return {
547
+ updateBy,
548
+ carryForward: await ResourceAiAccessSettings.checkUpdate({
549
+ resourceType: AiResourceType.PodmanHost,
550
+ service: this,
551
+ updateBy,
552
+ }),
553
+ };
554
+ }
555
+
475
556
  @CaptureSpan()
476
557
  protected override async onUpdateSuccess(
477
558
  onUpdate: OnUpdate<Model>,
@@ -483,6 +564,33 @@ export class Service extends DatabaseService<Model> {
483
564
  },
484
565
  );
485
566
 
567
+ /*
568
+ * An operator's AI access write: recorded on the feed, and the Podman host
569
+ * marked AI-configured.
570
+ */
571
+ await ResourceAiAccessSettings.afterUpdate({
572
+ service: this,
573
+ onUpdate,
574
+ updatedItemIds,
575
+ getResourceMarkdownLink: (
576
+ projectId: ObjectID,
577
+ podmanHostId: ObjectID,
578
+ ): Promise<string> => {
579
+ return this.getPodmanHostMarkdownLink(projectId, podmanHostId);
580
+ },
581
+ createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
582
+ await PodmanHostFeedService.createPodmanHostFeedItem({
583
+ podmanHostId: item.resourceId,
584
+ projectId: item.projectId,
585
+ podmanHostFeedEventType: PodmanHostFeedEventType.PodmanHostUpdated,
586
+ displayColor: item.displayColor,
587
+ feedInfoInMarkdown: item.feedInfoInMarkdown,
588
+ moreInformationInMarkdown: item.moreInformationInMarkdown,
589
+ userId: item.userId,
590
+ });
591
+ },
592
+ });
593
+
486
594
  return onUpdate;
487
595
  }
488
596
 
@@ -3,7 +3,15 @@ import ProxmoxClusterLabelRuleEngineService from "./ProxmoxClusterLabelRuleEngin
3
3
  import ProxmoxClusterOwnerRuleEngineService from "./ProxmoxClusterOwnerRuleEngineService";
4
4
  import Model from "../../Models/DatabaseModels/ProxmoxCluster";
5
5
  import Label from "../../Models/DatabaseModels/Label";
6
- import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
6
+ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
7
+ import CreateBy from "../Types/Database/CreateBy";
8
+ import DeleteBy from "../Types/Database/DeleteBy";
9
+ import UpdateBy from "../Types/Database/UpdateBy";
10
+ import ResourceAiAccessSettings, {
11
+ ResourceAiAccessFeedItem,
12
+ } from "../Utils/AI/ResourceAccess/ResourceAiAccessSettings";
13
+ import ResourceAiDeleteCleanup from "../Utils/AI/ResourceAccess/ResourceAiDeleteCleanup";
14
+ import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
7
15
  import ProxmoxClusterFeedService from "./ProxmoxClusterFeedService";
8
16
  import { ProxmoxClusterFeedEventType } from "../../Models/DatabaseModels/ProxmoxClusterFeed";
9
17
  import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
@@ -485,6 +493,79 @@ export class Service extends DatabaseService<Model> {
485
493
  });
486
494
  }
487
495
 
496
+ /*
497
+ * Deleting a Proxmox cluster settles its in-flight AI remediation rounds and
498
+ * removes its resource AI agent — read before the delete, done after it for
499
+ * the Proxmox clusters actually deleted (ResourceAiDeleteCleanup, shared by
500
+ * every resource AI agent's resource).
501
+ */
502
+ @CaptureSpan()
503
+ protected override async onBeforeDelete(
504
+ deleteBy: DeleteBy<Model>,
505
+ ): Promise<OnDelete<Model>> {
506
+ return {
507
+ deleteBy,
508
+ carryForward: await ResourceAiDeleteCleanup.beforeDelete({
509
+ resourceType: AiResourceType.ProxmoxCluster,
510
+ service: this,
511
+ deleteBy,
512
+ }),
513
+ };
514
+ }
515
+
516
+ @CaptureSpan()
517
+ protected override async onDeleteSuccess(
518
+ onDelete: OnDelete<Model>,
519
+ deletedItemIds: Array<ObjectID>,
520
+ ): Promise<OnDelete<Model>> {
521
+ await ResourceAiDeleteCleanup.afterDelete({
522
+ resourceType: AiResourceType.ProxmoxCluster,
523
+ onDelete,
524
+ deletedItemIds,
525
+ });
526
+
527
+ return onDelete;
528
+ }
529
+
530
+ /*
531
+ * A create is held to the same AI access rules as an update, judged
532
+ * against the never-configured defaults a new Proxmox cluster starts from: an
533
+ * unusable mode or allowlist is refused for every caller, and the
534
+ * server-only aiAccess* columns for every caller but root (a master admin
535
+ * included, whom the create column ACLs never check).
536
+ */
537
+ @CaptureSpan()
538
+ protected override async onBeforeCreate(
539
+ createBy: CreateBy<Model>,
540
+ ): Promise<OnCreate<Model>> {
541
+ ResourceAiAccessSettings.checkCreate({
542
+ resourceType: AiResourceType.ProxmoxCluster,
543
+ createBy,
544
+ });
545
+
546
+ return { createBy, carryForward: null };
547
+ }
548
+
549
+ /*
550
+ * An operator's write of an AI access setting (the investigation switch, the
551
+ * remediation mode, the command allowlist) is validated and checked against
552
+ * who may make AI do more on this Proxmox cluster — the rules every resource
553
+ * AI agent's resource shares (ResourceAiAccessSettings).
554
+ */
555
+ @CaptureSpan()
556
+ protected override async onBeforeUpdate(
557
+ updateBy: UpdateBy<Model>,
558
+ ): Promise<OnUpdate<Model>> {
559
+ return {
560
+ updateBy,
561
+ carryForward: await ResourceAiAccessSettings.checkUpdate({
562
+ resourceType: AiResourceType.ProxmoxCluster,
563
+ service: this,
564
+ updateBy,
565
+ }),
566
+ };
567
+ }
568
+
488
569
  @CaptureSpan()
489
570
  protected override async onUpdateSuccess(
490
571
  onUpdate: OnUpdate<Model>,
@@ -496,6 +577,34 @@ export class Service extends DatabaseService<Model> {
496
577
  },
497
578
  );
498
579
 
580
+ /*
581
+ * An operator's AI access write: recorded on the feed, and the Proxmox
582
+ * cluster marked AI-configured.
583
+ */
584
+ await ResourceAiAccessSettings.afterUpdate({
585
+ service: this,
586
+ onUpdate,
587
+ updatedItemIds,
588
+ getResourceMarkdownLink: (
589
+ projectId: ObjectID,
590
+ proxmoxClusterId: ObjectID,
591
+ ): Promise<string> => {
592
+ return this.getProxmoxClusterMarkdownLink(projectId, proxmoxClusterId);
593
+ },
594
+ createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
595
+ await ProxmoxClusterFeedService.createProxmoxClusterFeedItem({
596
+ proxmoxClusterId: item.resourceId,
597
+ projectId: item.projectId,
598
+ proxmoxClusterFeedEventType:
599
+ ProxmoxClusterFeedEventType.ProxmoxClusterUpdated,
600
+ displayColor: item.displayColor,
601
+ feedInfoInMarkdown: item.feedInfoInMarkdown,
602
+ moreInformationInMarkdown: item.moreInformationInMarkdown,
603
+ userId: item.userId,
604
+ });
605
+ },
606
+ });
607
+
499
608
  return onUpdate;
500
609
  }
501
610