@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 CephClusterLabelRuleEngineService from "./CephClusterLabelRuleEngineServi
3
3
  import CephClusterOwnerRuleEngineService from "./CephClusterOwnerRuleEngineService";
4
4
  import Model from "../../Models/DatabaseModels/CephCluster";
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 CephClusterFeedService from "./CephClusterFeedService";
8
16
  import { CephClusterFeedEventType } from "../../Models/DatabaseModels/CephClusterFeed";
9
17
  import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
@@ -503,6 +511,79 @@ export class Service extends DatabaseService<Model> {
503
511
  });
504
512
  }
505
513
 
514
+ /*
515
+ * Deleting a Ceph cluster settles its in-flight AI remediation rounds and
516
+ * removes its resource AI agent — read before the delete, done after it for
517
+ * the Ceph clusters actually deleted (ResourceAiDeleteCleanup, shared by
518
+ * every resource AI agent's resource).
519
+ */
520
+ @CaptureSpan()
521
+ protected override async onBeforeDelete(
522
+ deleteBy: DeleteBy<Model>,
523
+ ): Promise<OnDelete<Model>> {
524
+ return {
525
+ deleteBy,
526
+ carryForward: await ResourceAiDeleteCleanup.beforeDelete({
527
+ resourceType: AiResourceType.CephCluster,
528
+ service: this,
529
+ deleteBy,
530
+ }),
531
+ };
532
+ }
533
+
534
+ @CaptureSpan()
535
+ protected override async onDeleteSuccess(
536
+ onDelete: OnDelete<Model>,
537
+ deletedItemIds: Array<ObjectID>,
538
+ ): Promise<OnDelete<Model>> {
539
+ await ResourceAiDeleteCleanup.afterDelete({
540
+ resourceType: AiResourceType.CephCluster,
541
+ onDelete,
542
+ deletedItemIds,
543
+ });
544
+
545
+ return onDelete;
546
+ }
547
+
548
+ /*
549
+ * A create is held to the same AI access rules as an update, judged
550
+ * against the never-configured defaults a new Ceph cluster starts from: an
551
+ * unusable mode or allowlist is refused for every caller, and the
552
+ * server-only aiAccess* columns for every caller but root (a master admin
553
+ * included, whom the create column ACLs never check).
554
+ */
555
+ @CaptureSpan()
556
+ protected override async onBeforeCreate(
557
+ createBy: CreateBy<Model>,
558
+ ): Promise<OnCreate<Model>> {
559
+ ResourceAiAccessSettings.checkCreate({
560
+ resourceType: AiResourceType.CephCluster,
561
+ createBy,
562
+ });
563
+
564
+ return { createBy, carryForward: null };
565
+ }
566
+
567
+ /*
568
+ * An operator's write of an AI access setting (the investigation switch, the
569
+ * remediation mode, the command allowlist) is validated and checked against
570
+ * who may make AI do more on this Ceph cluster — the rules every resource AI
571
+ * agent's resource shares (ResourceAiAccessSettings).
572
+ */
573
+ @CaptureSpan()
574
+ protected override async onBeforeUpdate(
575
+ updateBy: UpdateBy<Model>,
576
+ ): Promise<OnUpdate<Model>> {
577
+ return {
578
+ updateBy,
579
+ carryForward: await ResourceAiAccessSettings.checkUpdate({
580
+ resourceType: AiResourceType.CephCluster,
581
+ service: this,
582
+ updateBy,
583
+ }),
584
+ };
585
+ }
586
+
506
587
  @CaptureSpan()
507
588
  protected override async onUpdateSuccess(
508
589
  onUpdate: OnUpdate<Model>,
@@ -514,6 +595,33 @@ export class Service extends DatabaseService<Model> {
514
595
  },
515
596
  );
516
597
 
598
+ /*
599
+ * An operator's AI access write: recorded on the feed, and the Ceph cluster
600
+ * marked AI-configured.
601
+ */
602
+ await ResourceAiAccessSettings.afterUpdate({
603
+ service: this,
604
+ onUpdate,
605
+ updatedItemIds,
606
+ getResourceMarkdownLink: (
607
+ projectId: ObjectID,
608
+ cephClusterId: ObjectID,
609
+ ): Promise<string> => {
610
+ return this.getCephClusterMarkdownLink(projectId, cephClusterId);
611
+ },
612
+ createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
613
+ await CephClusterFeedService.createCephClusterFeedItem({
614
+ cephClusterId: item.resourceId,
615
+ projectId: item.projectId,
616
+ cephClusterFeedEventType: CephClusterFeedEventType.CephClusterUpdated,
617
+ displayColor: item.displayColor,
618
+ feedInfoInMarkdown: item.feedInfoInMarkdown,
619
+ moreInformationInMarkdown: item.moreInformationInMarkdown,
620
+ userId: item.userId,
621
+ });
622
+ },
623
+ });
624
+
517
625
  return onUpdate;
518
626
  }
519
627
 
@@ -22,10 +22,17 @@ import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
22
22
  import DatabaseConfig from "../DatabaseConfig";
23
23
  import GlobalCache from "../Infrastructure/GlobalCache";
24
24
  import CreateBy from "../Types/Database/CreateBy";
25
- import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
25
+ import DeleteBy from "../Types/Database/DeleteBy";
26
+ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
26
27
  import ModelPermission from "../Types/Database/Permissions/Index";
27
28
  import QueryHelper from "../Types/Database/QueryHelper";
28
29
  import Select from "../Types/Database/Select";
30
+ import UpdateBy from "../Types/Database/UpdateBy";
31
+ import ResourceAiAccessSettings, {
32
+ ResourceAiAccessFeedItem,
33
+ } from "../Utils/AI/ResourceAccess/ResourceAiAccessSettings";
34
+ import ResourceAiDeleteCleanup from "../Utils/AI/ResourceAccess/ResourceAiDeleteCleanup";
35
+ import AiResourceType from "../../Types/ResourceAiAgent/AiResourceType";
29
36
  import RelationIdUtil from "../Utils/Database/RelationIdUtil";
30
37
  import {
31
38
  truncateLongText,
@@ -335,6 +342,15 @@ export interface FindOrCreateDatabaseServerByEndpointData {
335
342
  * its Created feed item says whether the Database Agent found it.
336
343
  */
337
344
  collector?: DatabaseServerCollectorReport | undefined;
345
+ /*
346
+ * False when the caller only looks the row up and saw no traffic or
347
+ * telemetry: a resource AI agent registering names its database's
348
+ * endpoint without being evidence the database is in use. The owner is
349
+ * then returned as it is: its endpoint's lastMatchedAt does not move, its
350
+ * engine is not weighed, and a row discovery archived stays archived.
351
+ * Defaults to true.
352
+ */
353
+ isSighting?: boolean | undefined;
338
354
  }
339
355
 
340
356
  export interface DatabaseServerCollectorReport {
@@ -488,6 +504,19 @@ export class Service extends DatabaseService<Model> {
488
504
  protected override async onBeforeCreate(
489
505
  createBy: CreateBy<Model>,
490
506
  ): Promise<OnCreate<Model>> {
507
+ /*
508
+ * A create is held to the same AI access rules as an update, judged
509
+ * against the never-configured defaults a new database starts from: an
510
+ * unusable mode or allowlist is refused for every caller, root included,
511
+ * and the server-only aiAccess* columns for every caller but root (a
512
+ * master admin included, whom the create column ACLs never check). It
513
+ * looks nothing up, so it may run before the permission check.
514
+ */
515
+ ResourceAiAccessSettings.checkCreate({
516
+ resourceType: AiResourceType.DatabaseServer,
517
+ createBy,
518
+ });
519
+
491
520
  if (createBy.props.isRoot) {
492
521
  return { createBy: createBy, carryForward: null };
493
522
  }
@@ -631,6 +660,60 @@ export class Service extends DatabaseService<Model> {
631
660
  return createdItem;
632
661
  }
633
662
 
663
+ /*
664
+ * Deleting a database server settles its in-flight AI remediation rounds and
665
+ * removes its resource AI agent — read before the delete, done after it for
666
+ * the database servers actually deleted (ResourceAiDeleteCleanup, shared by
667
+ * every resource AI agent's resource).
668
+ */
669
+ @CaptureSpan()
670
+ protected override async onBeforeDelete(
671
+ deleteBy: DeleteBy<Model>,
672
+ ): Promise<OnDelete<Model>> {
673
+ return {
674
+ deleteBy,
675
+ carryForward: await ResourceAiDeleteCleanup.beforeDelete({
676
+ resourceType: AiResourceType.DatabaseServer,
677
+ service: this,
678
+ deleteBy,
679
+ }),
680
+ };
681
+ }
682
+
683
+ @CaptureSpan()
684
+ protected override async onDeleteSuccess(
685
+ onDelete: OnDelete<Model>,
686
+ deletedItemIds: Array<ObjectID>,
687
+ ): Promise<OnDelete<Model>> {
688
+ await ResourceAiDeleteCleanup.afterDelete({
689
+ resourceType: AiResourceType.DatabaseServer,
690
+ onDelete,
691
+ deletedItemIds,
692
+ });
693
+
694
+ return onDelete;
695
+ }
696
+
697
+ /*
698
+ * An operator's write of an AI access setting (the investigation switch, the
699
+ * remediation mode, the command allowlist) is validated and checked against
700
+ * who may make AI do more on this database — the rules every resource AI
701
+ * agent's resource shares (ResourceAiAccessSettings).
702
+ */
703
+ @CaptureSpan()
704
+ protected override async onBeforeUpdate(
705
+ updateBy: UpdateBy<Model>,
706
+ ): Promise<OnUpdate<Model>> {
707
+ return {
708
+ updateBy,
709
+ carryForward: await ResourceAiAccessSettings.checkUpdate({
710
+ resourceType: AiResourceType.DatabaseServer,
711
+ service: this,
712
+ updateBy,
713
+ }),
714
+ };
715
+ }
716
+
634
717
  @CaptureSpan()
635
718
  protected override async onUpdateSuccess(
636
719
  onUpdate: OnUpdate<Model>,
@@ -683,6 +766,34 @@ export class Service extends DatabaseService<Model> {
683
766
  },
684
767
  );
685
768
 
769
+ /*
770
+ * An operator's AI access write: recorded on the feed, and the database
771
+ * marked AI-configured.
772
+ */
773
+ await ResourceAiAccessSettings.afterUpdate({
774
+ service: this,
775
+ onUpdate,
776
+ updatedItemIds,
777
+ getResourceMarkdownLink: (
778
+ projectId: ObjectID,
779
+ databaseServerId: ObjectID,
780
+ ): Promise<string> => {
781
+ return this.getDatabaseServerMarkdownLink(projectId, databaseServerId);
782
+ },
783
+ createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
784
+ await DatabaseServerFeedService.createDatabaseServerFeedItem({
785
+ databaseServerId: item.resourceId,
786
+ projectId: item.projectId,
787
+ databaseServerFeedEventType:
788
+ DatabaseServerFeedEventType.DatabaseServerUpdated,
789
+ displayColor: item.displayColor,
790
+ feedInfoInMarkdown: item.feedInfoInMarkdown,
791
+ moreInformationInMarkdown: item.moreInformationInMarkdown,
792
+ userId: item.userId,
793
+ });
794
+ },
795
+ });
796
+
686
797
  return onUpdate;
687
798
  }
688
799
 
@@ -738,6 +849,10 @@ export class Service extends DatabaseService<Model> {
738
849
  return null;
739
850
  }
740
851
 
852
+ if (data.isSighting === false) {
853
+ return ownerRow;
854
+ }
855
+
741
856
  await DatabaseServerEndpointService.markEndpointMatched(owner);
742
857
 
743
858
  if (ownerRow) {
@@ -3,7 +3,15 @@ import DockerHostLabelRuleEngineService from "./DockerHostLabelRuleEngineService
3
3
  import DockerHostOwnerRuleEngineService from "./DockerHostOwnerRuleEngineService";
4
4
  import Model from "../../Models/DatabaseModels/DockerHost";
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 DockerHostFeedService from "./DockerHostFeedService";
8
16
  import { DockerHostFeedEventType } from "../../Models/DatabaseModels/DockerHostFeed";
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 Docker 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 Docker 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.DockerHost,
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.DockerHost,
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 Docker 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.DockerHost,
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 Docker 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.DockerHost,
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 Docker host
569
+ * marked AI-configured.
570
+ */
571
+ await ResourceAiAccessSettings.afterUpdate({
572
+ service: this,
573
+ onUpdate,
574
+ updatedItemIds,
575
+ getResourceMarkdownLink: (
576
+ projectId: ObjectID,
577
+ dockerHostId: ObjectID,
578
+ ): Promise<string> => {
579
+ return this.getDockerHostMarkdownLink(projectId, dockerHostId);
580
+ },
581
+ createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
582
+ await DockerHostFeedService.createDockerHostFeedItem({
583
+ dockerHostId: item.resourceId,
584
+ projectId: item.projectId,
585
+ dockerHostFeedEventType: DockerHostFeedEventType.DockerHostUpdated,
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 DockerSwarmClusterLabelRuleEngineService from "./DockerSwarmClusterLabelR
3
3
  import DockerSwarmClusterOwnerRuleEngineService from "./DockerSwarmClusterOwnerRuleEngineService";
4
4
  import Model from "../../Models/DatabaseModels/DockerSwarmCluster";
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 DockerSwarmClusterFeedService from "./DockerSwarmClusterFeedService";
8
16
  import { DockerSwarmClusterFeedEventType } from "../../Models/DatabaseModels/DockerSwarmClusterFeed";
9
17
  import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
@@ -508,6 +516,79 @@ export class Service extends DatabaseService<Model> {
508
516
  });
509
517
  }
510
518
 
519
+ /*
520
+ * Deleting a Docker Swarm cluster settles its in-flight AI remediation rounds
521
+ * and removes its resource AI agent — read before the delete, done after it
522
+ * for the Docker Swarm clusters actually deleted (ResourceAiDeleteCleanup,
523
+ * shared by every resource AI agent's resource).
524
+ */
525
+ @CaptureSpan()
526
+ protected override async onBeforeDelete(
527
+ deleteBy: DeleteBy<Model>,
528
+ ): Promise<OnDelete<Model>> {
529
+ return {
530
+ deleteBy,
531
+ carryForward: await ResourceAiDeleteCleanup.beforeDelete({
532
+ resourceType: AiResourceType.DockerSwarmCluster,
533
+ service: this,
534
+ deleteBy,
535
+ }),
536
+ };
537
+ }
538
+
539
+ @CaptureSpan()
540
+ protected override async onDeleteSuccess(
541
+ onDelete: OnDelete<Model>,
542
+ deletedItemIds: Array<ObjectID>,
543
+ ): Promise<OnDelete<Model>> {
544
+ await ResourceAiDeleteCleanup.afterDelete({
545
+ resourceType: AiResourceType.DockerSwarmCluster,
546
+ onDelete,
547
+ deletedItemIds,
548
+ });
549
+
550
+ return onDelete;
551
+ }
552
+
553
+ /*
554
+ * A create is held to the same AI access rules as an update, judged
555
+ * against the never-configured defaults a new Docker Swarm cluster starts from: an
556
+ * unusable mode or allowlist is refused for every caller, and the
557
+ * server-only aiAccess* columns for every caller but root (a master admin
558
+ * included, whom the create column ACLs never check).
559
+ */
560
+ @CaptureSpan()
561
+ protected override async onBeforeCreate(
562
+ createBy: CreateBy<Model>,
563
+ ): Promise<OnCreate<Model>> {
564
+ ResourceAiAccessSettings.checkCreate({
565
+ resourceType: AiResourceType.DockerSwarmCluster,
566
+ createBy,
567
+ });
568
+
569
+ return { createBy, carryForward: null };
570
+ }
571
+
572
+ /*
573
+ * An operator's write of an AI access setting (the investigation switch, the
574
+ * remediation mode, the command allowlist) is validated and checked against
575
+ * who may make AI do more on this Docker Swarm cluster — the rules every
576
+ * resource AI agent's resource shares (ResourceAiAccessSettings).
577
+ */
578
+ @CaptureSpan()
579
+ protected override async onBeforeUpdate(
580
+ updateBy: UpdateBy<Model>,
581
+ ): Promise<OnUpdate<Model>> {
582
+ return {
583
+ updateBy,
584
+ carryForward: await ResourceAiAccessSettings.checkUpdate({
585
+ resourceType: AiResourceType.DockerSwarmCluster,
586
+ service: this,
587
+ updateBy,
588
+ }),
589
+ };
590
+ }
591
+
511
592
  @CaptureSpan()
512
593
  protected override async onUpdateSuccess(
513
594
  onUpdate: OnUpdate<Model>,
@@ -519,6 +600,37 @@ export class Service extends DatabaseService<Model> {
519
600
  },
520
601
  );
521
602
 
603
+ /*
604
+ * An operator's AI access write: recorded on the feed, and the Docker Swarm
605
+ * cluster marked AI-configured.
606
+ */
607
+ await ResourceAiAccessSettings.afterUpdate({
608
+ service: this,
609
+ onUpdate,
610
+ updatedItemIds,
611
+ getResourceMarkdownLink: (
612
+ projectId: ObjectID,
613
+ dockerSwarmClusterId: ObjectID,
614
+ ): Promise<string> => {
615
+ return this.getDockerSwarmClusterMarkdownLink(
616
+ projectId,
617
+ dockerSwarmClusterId,
618
+ );
619
+ },
620
+ createFeedItem: async (item: ResourceAiAccessFeedItem): Promise<void> => {
621
+ await DockerSwarmClusterFeedService.createDockerSwarmClusterFeedItem({
622
+ dockerSwarmClusterId: item.resourceId,
623
+ projectId: item.projectId,
624
+ dockerSwarmClusterFeedEventType:
625
+ DockerSwarmClusterFeedEventType.DockerSwarmClusterUpdated,
626
+ displayColor: item.displayColor,
627
+ feedInfoInMarkdown: item.feedInfoInMarkdown,
628
+ moreInformationInMarkdown: item.moreInformationInMarkdown,
629
+ userId: item.userId,
630
+ });
631
+ },
632
+ });
633
+
522
634
  return onUpdate;
523
635
  }
524
636