@oneuptime/common 14.0.9 → 14.0.11

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 (1146) hide show
  1. package/Models/DatabaseModels/AIConversation.ts +127 -1
  2. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  3. package/Models/DatabaseModels/CephCluster.ts +225 -0
  4. package/Models/DatabaseModels/CloudResource.ts +12 -0
  5. package/Models/DatabaseModels/DatabaseServer.ts +225 -0
  6. package/Models/DatabaseModels/DockerHost.ts +225 -0
  7. package/Models/DatabaseModels/DockerSwarmCluster.ts +225 -0
  8. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  9. package/Models/DatabaseModels/GlobalOidc.ts +0 -4
  10. package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
  11. package/Models/DatabaseModels/GlobalSso.ts +0 -4
  12. package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
  13. package/Models/DatabaseModels/Host.ts +225 -0
  14. package/Models/DatabaseModels/IncidentForm.ts +594 -0
  15. package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
  16. package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
  17. package/Models/DatabaseModels/Index.ts +16 -0
  18. package/Models/DatabaseModels/IoTFleet.ts +12 -0
  19. package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
  20. package/Models/DatabaseModels/MessageQueue.ts +1102 -0
  21. package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
  22. package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
  23. package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
  24. package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
  25. package/Models/DatabaseModels/PodmanHost.ts +225 -0
  26. package/Models/DatabaseModels/Project.ts +59 -0
  27. package/Models/DatabaseModels/ProjectOidc.ts +0 -4
  28. package/Models/DatabaseModels/ProjectSso.ts +0 -4
  29. package/Models/DatabaseModels/ProxmoxCluster.ts +225 -0
  30. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  31. package/Models/DatabaseModels/RumApplication.ts +12 -0
  32. package/Models/DatabaseModels/RunnerJob.ts +144 -0
  33. package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
  34. package/Models/DatabaseModels/Service.ts +12 -0
  35. package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
  36. package/Models/DatabaseModels/StatusPageSso.ts +0 -4
  37. package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
  38. package/Models/DatabaseModels/VMwareVCenter.ts +225 -0
  39. package/Server/API/AIChatAPI.ts +13 -114
  40. package/Server/API/AIInvestigationAPI.ts +3 -3
  41. package/Server/API/AIInvestigationConversationAPI.ts +266 -0
  42. package/Server/API/AutoRemediationAPI.ts +392 -1
  43. package/Server/API/IncidentFormAPI.ts +376 -0
  44. package/Server/API/ProjectOIDC.ts +16 -25
  45. package/Server/API/ProjectSSO.ts +16 -24
  46. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  47. package/Server/API/StatusPageAPI.ts +42 -77
  48. package/Server/Enterprise/EnterpriseEdition.ts +93 -28
  49. package/Server/Enterprise/EnterpriseFeature.ts +25 -3
  50. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
  51. package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
  52. package/Server/EnvironmentConfig.ts +1 -1
  53. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  54. package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
  55. package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
  56. package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
  57. package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
  58. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  59. package/Server/Infrastructure/Semaphore.ts +22 -0
  60. package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
  61. package/Server/Middleware/TelemetryIngest.ts +15 -5
  62. package/Server/Middleware/UserAuthorization.ts +16 -38
  63. package/Server/Services/AIService.ts +10 -13
  64. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  65. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  66. package/Server/Services/CephClusterService.ts +109 -1
  67. package/Server/Services/DatabaseServerService.ts +116 -1
  68. package/Server/Services/DockerHostService.ts +109 -1
  69. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  70. package/Server/Services/HostService.ts +126 -4
  71. package/Server/Services/IncidentCustomFieldService.ts +112 -2
  72. package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
  73. package/Server/Services/IncidentEpisodeService.ts +10 -1
  74. package/Server/Services/IncidentFormService.ts +1566 -0
  75. package/Server/Services/IncidentFormSubmissionService.ts +97 -0
  76. package/Server/Services/IncidentGroupingEngineService.ts +45 -8
  77. package/Server/Services/IncidentService.ts +123 -5
  78. package/Server/Services/IncidentTemplateService.ts +22 -0
  79. package/Server/Services/Index.ts +14 -0
  80. package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
  81. package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
  82. package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
  83. package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
  84. package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
  85. package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
  86. package/Server/Services/MessageQueueService.ts +1463 -0
  87. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  88. package/Server/Services/OpenTelemetryIngestService.ts +37 -4
  89. package/Server/Services/PodmanHostService.ts +109 -1
  90. package/Server/Services/ProjectService.ts +0 -59
  91. package/Server/Services/ProxmoxClusterService.ts +110 -1
  92. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  93. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  94. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  95. package/Server/Services/RunnerJobService.ts +611 -4
  96. package/Server/Services/StatusPagePrivateUserService.ts +1 -4
  97. package/Server/Services/StatusPageService.ts +1 -51
  98. package/Server/Services/TeamComplianceSettingService.ts +163 -42
  99. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  100. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  101. package/Server/Services/UserNotificationRuleService.ts +8 -1
  102. package/Server/Services/VMwareVCenterService.ts +110 -1
  103. package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
  104. package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
  105. package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
  106. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
  107. package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
  108. package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
  109. package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
  110. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
  111. package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
  112. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
  113. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  114. package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
  115. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
  116. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
  117. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
  118. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
  119. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1442 -34
  120. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +968 -34
  121. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  122. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +622 -0
  123. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  124. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  125. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  126. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  127. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +882 -0
  128. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +125 -12
  129. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +99 -15
  130. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +99 -15
  131. package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
  132. package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
  133. package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
  134. package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
  135. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
  136. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  137. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  138. package/Server/Utils/EditionEnforcement.ts +19 -202
  139. package/Server/Utils/LLM/LLMService.ts +259 -63
  140. package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
  141. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  142. package/Server/Utils/SameOriginRequest.ts +203 -0
  143. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  144. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  145. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  146. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
  147. package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
  148. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
  149. package/Server/Utils/VendorAssets.ts +3 -3
  150. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  151. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  152. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  153. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +301 -225
  154. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +38 -16
  155. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  156. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +376 -144
  157. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  158. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  159. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  160. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  161. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  162. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  163. package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
  164. package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
  165. package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
  166. package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
  167. package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
  168. package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
  169. package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
  170. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
  171. package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
  172. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
  173. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
  174. package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
  175. package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
  176. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
  177. package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
  178. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +267 -12
  179. package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
  180. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
  181. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
  182. package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
  183. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +23 -6
  184. package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
  185. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
  186. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
  187. package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
  188. package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
  189. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
  190. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
  191. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
  192. package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
  193. package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
  194. package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
  195. package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
  196. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
  197. package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
  198. package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
  199. package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
  200. package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
  201. package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
  202. package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
  203. package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
  204. package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
  205. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
  206. package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
  207. package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
  208. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
  209. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
  210. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  211. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
  212. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
  213. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
  214. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
  215. package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
  216. package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
  217. package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
  218. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
  219. package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
  220. package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
  221. package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
  222. package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
  223. package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
  224. package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
  225. package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
  226. package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
  227. package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
  228. package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
  229. package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
  230. package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
  231. package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
  232. package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
  233. package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
  234. package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
  235. package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
  236. package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
  237. package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
  238. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
  239. package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
  240. package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
  241. package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
  242. package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
  243. package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
  244. package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
  245. package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
  246. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
  247. package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
  248. package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
  249. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
  250. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
  251. package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
  252. package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
  253. package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
  254. package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
  255. package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
  256. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  257. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  258. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  259. package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
  260. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  261. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +2010 -0
  262. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1455 -0
  263. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  264. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  265. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
  266. package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
  267. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
  268. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
  269. package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
  270. package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
  271. package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
  272. package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
  273. package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
  274. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  275. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
  276. package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
  277. package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
  278. package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
  279. package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
  280. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
  281. package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
  282. package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
  283. package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
  284. package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
  285. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
  286. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +61 -10
  287. package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
  288. package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
  289. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  290. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  291. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  292. package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
  293. package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
  294. package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
  295. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  296. package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
  297. package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
  298. package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
  299. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
  300. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  301. package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
  302. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
  303. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
  304. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
  305. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
  306. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
  307. package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
  308. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  309. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  310. package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
  311. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  312. package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
  313. package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
  314. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  315. package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
  316. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
  317. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
  318. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
  319. package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
  320. package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
  321. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
  322. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  323. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  324. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  325. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  326. package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
  327. package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
  328. package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
  329. package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
  330. package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
  331. package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
  332. package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
  333. package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
  334. package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
  335. package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
  336. package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
  337. package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
  338. package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
  339. package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
  340. package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
  341. package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
  342. package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
  343. package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
  344. package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
  345. package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
  346. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  347. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  348. package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
  349. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
  350. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
  351. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
  352. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  353. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  354. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  355. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  356. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  357. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  358. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  359. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  360. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  361. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  362. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
  363. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
  364. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
  365. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  366. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  367. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  368. package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
  369. package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
  370. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  371. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
  372. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
  373. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
  374. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  375. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  376. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
  377. package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
  378. package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
  379. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
  380. package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
  381. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
  382. package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
  383. package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
  384. package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
  385. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
  386. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
  387. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
  388. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
  389. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +694 -0
  390. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  391. package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
  392. package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
  393. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
  394. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
  395. package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
  396. package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
  397. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  398. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  399. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
  400. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1251 -0
  401. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  402. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  403. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +1004 -0
  404. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  405. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  406. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  407. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +834 -0
  408. package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
  409. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
  410. package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
  411. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
  412. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  413. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  414. package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
  415. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  416. package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
  417. package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
  418. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  419. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  420. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
  421. package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
  422. package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
  423. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
  424. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
  425. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  426. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  427. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  428. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  429. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  430. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  431. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  432. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  433. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  434. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  435. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  436. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  437. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  438. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  439. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  440. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  441. package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
  442. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  443. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  444. package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
  445. package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
  446. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
  447. package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
  448. package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
  449. package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
  450. package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
  451. package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
  452. package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
  453. package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
  454. package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
  455. package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
  456. package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
  457. package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
  458. package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
  459. package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
  460. package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
  461. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  462. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  463. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  464. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  465. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +519 -0
  466. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  467. package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
  468. package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
  469. package/Tests/Types/XML.test.ts +51 -0
  470. package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
  471. package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
  472. package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
  473. package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
  474. package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
  475. package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
  476. package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
  477. package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
  478. package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
  479. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
  480. package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
  481. package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
  482. package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
  483. package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
  484. package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
  485. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
  486. package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
  487. package/Tests/UI/Components/Icon.test.tsx +32 -0
  488. package/Tests/UI/Components/Input.test.tsx +31 -0
  489. package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
  490. package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
  491. package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
  492. package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
  493. package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
  494. package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
  495. package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
  496. package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
  497. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
  498. package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
  499. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  500. package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
  501. package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
  502. package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
  503. package/Tests/UI/Components/TextArea.test.tsx +19 -0
  504. package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
  505. package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
  506. package/Tests/UI/EsbuildConfig.test.ts +115 -39
  507. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
  508. package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
  509. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  510. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
  511. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
  512. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  513. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  514. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  515. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  516. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  517. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  518. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  519. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  520. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  521. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  522. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  523. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  524. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  525. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  526. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  527. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  528. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  529. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  530. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  531. package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
  532. package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
  533. package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
  534. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  535. package/Types/AI/AIAgentRunLimits.ts +146 -0
  536. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  537. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  538. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
  539. package/Types/Code/CodeType.ts +2 -0
  540. package/Types/Code/JsonSyntax.ts +923 -0
  541. package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
  542. package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
  543. package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
  544. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
  545. package/Types/Icon/IconProp.ts +2 -0
  546. package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
  547. package/Types/Incident/IncidentFormPublic.ts +1145 -0
  548. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
  549. package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
  550. package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
  551. package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
  552. package/Types/MessageQueue/MessagingSystem.ts +518 -0
  553. package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
  554. package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
  555. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  556. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  557. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  558. package/Types/Permission.ts +310 -0
  559. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  560. package/Types/ResourceAiAgent/ResourceAiAccess.ts +580 -0
  561. package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
  562. package/Types/Rules/RuleRun.ts +4 -0
  563. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  564. package/Types/Runbook/RunbookStepType.ts +29 -0
  565. package/Types/Team/ComplianceNotificationChannel.ts +4 -3
  566. package/Types/Team/ComplianceRule.ts +71 -18
  567. package/Types/Team/ComplianceRuleType.ts +2 -2
  568. package/Types/Team/TeamComplianceStatus.ts +6 -2
  569. package/Types/Telemetry/EntityType.ts +16 -0
  570. package/Types/Telemetry/LockedFilterDetail.ts +22 -0
  571. package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
  572. package/Types/XML.ts +26 -0
  573. package/UI/Components/CodeEditor/CodeEditor.css +379 -0
  574. package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
  575. package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
  576. package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
  577. package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
  578. package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
  579. package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
  580. package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
  581. package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
  582. package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
  583. package/UI/Components/Forms/Fields/FormField.tsx +8 -0
  584. package/UI/Components/Forms/Types/Field.ts +8 -0
  585. package/UI/Components/Icon/Icon.tsx +18 -0
  586. package/UI/Components/Input/Input.tsx +11 -4
  587. package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
  588. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
  589. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  590. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
  591. package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
  592. package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
  593. package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
  594. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
  595. package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
  596. package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
  597. package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
  598. package/UI/Components/Table/EmptyTableMessage.ts +81 -0
  599. package/UI/Components/Table/Table.tsx +50 -21
  600. package/UI/Components/Table/TableRow.tsx +9 -1
  601. package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
  602. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
  603. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
  604. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
  605. package/UI/Components/TextArea/TextArea.tsx +9 -2
  606. package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
  607. package/UI/Styles/Theme.css +8 -0
  608. package/UI/esbuild-config.js +2 -32
  609. package/Utils/AI/InvestigationReport.ts +121 -15
  610. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  611. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  612. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  613. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  614. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  615. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  616. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  617. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  618. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  619. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  620. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  621. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  622. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  623. package/Utils/LabelRuleImportExport.ts +2 -0
  624. package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
  625. package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
  626. package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
  627. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  628. package/Utils/Telemetry/EntityKey.ts +48 -0
  629. package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
  630. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
  631. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  632. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  633. package/build/dist/Models/DatabaseModels/CephCluster.js +231 -0
  634. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  635. package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
  636. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  637. package/build/dist/Models/DatabaseModels/DatabaseServer.js +231 -0
  638. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  639. package/build/dist/Models/DatabaseModels/DockerHost.js +231 -0
  640. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  641. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +231 -0
  642. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  643. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  644. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  645. package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
  646. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
  647. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
  648. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
  649. package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
  650. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
  651. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
  652. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
  653. package/build/dist/Models/DatabaseModels/Host.js +231 -0
  654. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  655. package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
  656. package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
  657. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
  658. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
  659. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
  660. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  661. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  662. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  663. package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
  664. package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
  665. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
  666. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  667. package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
  668. package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
  669. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
  670. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
  671. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
  672. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
  673. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
  674. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
  675. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
  676. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
  677. package/build/dist/Models/DatabaseModels/PodmanHost.js +231 -0
  678. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  679. package/build/dist/Models/DatabaseModels/Project.js +61 -0
  680. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  681. package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
  682. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
  683. package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
  684. package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
  685. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +231 -0
  686. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  687. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  688. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  689. package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
  690. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  691. package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
  692. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  693. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
  694. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  695. package/build/dist/Models/DatabaseModels/Service.js +12 -0
  696. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  697. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
  698. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
  699. package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
  700. package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
  701. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
  702. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
  703. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +231 -0
  704. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  705. package/build/dist/Server/API/AIChatAPI.js +9 -103
  706. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  707. package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
  708. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  709. package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
  710. package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
  711. package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
  712. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  713. package/build/dist/Server/API/IncidentFormAPI.js +245 -0
  714. package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
  715. package/build/dist/Server/API/ProjectOIDC.js +16 -24
  716. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  717. package/build/dist/Server/API/ProjectSSO.js +16 -24
  718. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  719. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  720. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  721. package/build/dist/Server/API/StatusPageAPI.js +42 -75
  722. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  723. package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
  724. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
  725. package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
  726. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
  727. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
  728. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
  729. package/build/dist/Server/EnvironmentConfig.js +1 -1
  730. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  731. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  732. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
  733. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
  734. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
  735. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
  736. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
  737. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
  738. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
  739. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
  740. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  741. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  742. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  743. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  744. package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
  745. package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
  746. package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
  747. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  748. package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
  749. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  750. package/build/dist/Server/Services/AIService.js +10 -13
  751. package/build/dist/Server/Services/AIService.js.map +1 -1
  752. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  753. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  754. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  755. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  756. package/build/dist/Server/Services/CephClusterService.js +104 -0
  757. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  758. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  759. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  760. package/build/dist/Server/Services/DockerHostService.js +104 -0
  761. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  762. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  763. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  764. package/build/dist/Server/Services/HostService.js +114 -2
  765. package/build/dist/Server/Services/HostService.js.map +1 -1
  766. package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
  767. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  768. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
  769. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  770. package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
  771. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  772. package/build/dist/Server/Services/IncidentFormService.js +1202 -0
  773. package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
  774. package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
  775. package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
  776. package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
  777. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  778. package/build/dist/Server/Services/IncidentService.js +106 -4
  779. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  780. package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
  781. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  782. package/build/dist/Server/Services/Index.js +14 -0
  783. package/build/dist/Server/Services/Index.js.map +1 -1
  784. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
  785. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
  786. package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
  787. package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
  788. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
  789. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
  790. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
  791. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
  792. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
  793. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
  794. package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
  795. package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
  796. package/build/dist/Server/Services/MessageQueueService.js +1140 -0
  797. package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
  798. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  799. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  800. package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
  801. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  802. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  803. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  804. package/build/dist/Server/Services/ProjectService.js +0 -54
  805. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  806. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  807. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  808. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  809. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  810. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  811. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  812. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  813. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  814. package/build/dist/Server/Services/RunnerJobService.js +344 -5
  815. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  816. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
  817. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  818. package/build/dist/Server/Services/StatusPageService.js +0 -46
  819. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  820. package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
  821. package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
  822. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  823. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  824. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  825. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  826. package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
  827. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  828. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  829. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  830. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
  831. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
  832. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
  833. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  834. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
  835. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  836. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
  837. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  838. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
  839. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
  840. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  841. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
  842. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
  843. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
  844. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  845. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
  846. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
  847. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
  848. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  849. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  850. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
  851. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
  852. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
  853. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
  854. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
  855. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
  856. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
  857. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  858. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
  859. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  860. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1036 -32
  861. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  862. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +661 -41
  863. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  864. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  865. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  866. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +354 -0
  867. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  868. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  869. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  870. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  871. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  872. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  873. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  874. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  875. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  876. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +602 -0
  877. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  878. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +90 -14
  879. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  880. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +73 -10
  881. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  882. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +73 -10
  883. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  884. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
  885. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  886. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
  887. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
  888. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
  889. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
  890. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
  891. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
  892. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
  893. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  894. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  895. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  896. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  897. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  898. package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
  899. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
  900. package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
  901. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  902. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
  903. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
  904. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  905. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  906. package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
  907. package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
  908. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  909. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  910. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  911. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  912. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  913. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  914. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
  915. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  916. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
  917. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
  918. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
  919. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  920. package/build/dist/Server/Utils/VendorAssets.js +3 -3
  921. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  922. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  923. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  924. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  925. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  926. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  927. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +186 -210
  928. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  929. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +22 -16
  930. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  931. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  932. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  933. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +273 -111
  934. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  935. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  936. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  937. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  938. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  939. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  940. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  941. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  942. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  943. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  944. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  945. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  946. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  947. package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
  948. package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
  949. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  950. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  951. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  952. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  953. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
  954. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  955. package/build/dist/Types/Code/CodeType.js +2 -0
  956. package/build/dist/Types/Code/CodeType.js.map +1 -1
  957. package/build/dist/Types/Code/JsonSyntax.js +604 -0
  958. package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
  959. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
  960. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
  961. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
  962. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
  963. package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
  964. package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
  965. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
  966. package/build/dist/Types/Icon/IconProp.js +2 -0
  967. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  968. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
  969. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
  970. package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
  971. package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
  972. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
  973. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  974. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
  975. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
  976. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
  977. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
  978. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
  979. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
  980. package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
  981. package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
  982. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
  983. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
  984. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
  985. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
  986. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  987. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  988. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  989. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  990. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  991. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  992. package/build/dist/Types/Permission.js +274 -0
  993. package/build/dist/Types/Permission.js.map +1 -1
  994. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  995. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  996. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +281 -0
  997. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  998. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
  999. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  1000. package/build/dist/Types/Rules/RuleRun.js +4 -0
  1001. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  1002. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  1003. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  1004. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  1005. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  1006. package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
  1007. package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
  1008. package/build/dist/Types/Team/ComplianceRule.js +48 -14
  1009. package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
  1010. package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
  1011. package/build/dist/Types/Telemetry/EntityType.js +16 -0
  1012. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  1013. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
  1014. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  1015. package/build/dist/Types/XML.js +23 -0
  1016. package/build/dist/Types/XML.js.map +1 -1
  1017. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
  1018. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  1019. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
  1020. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
  1021. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
  1022. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
  1023. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
  1024. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
  1025. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
  1026. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
  1027. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  1028. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  1029. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
  1030. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
  1031. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
  1032. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1033. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
  1034. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  1035. package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
  1036. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1037. package/build/dist/UI/Components/Icon/Icon.js +8 -0
  1038. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1039. package/build/dist/UI/Components/Input/Input.js +11 -3
  1040. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  1041. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
  1042. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1043. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
  1044. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1045. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  1046. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  1047. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
  1048. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  1049. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
  1050. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
  1051. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
  1052. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
  1053. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
  1054. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
  1055. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
  1056. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  1057. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
  1058. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
  1059. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
  1060. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1061. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
  1062. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
  1063. package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
  1064. package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
  1065. package/build/dist/UI/Components/Table/Table.js +30 -11
  1066. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  1067. package/build/dist/UI/Components/Table/TableRow.js +9 -2
  1068. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1069. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
  1070. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
  1071. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
  1072. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1073. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
  1074. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
  1075. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
  1076. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1077. package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
  1078. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  1079. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
  1080. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  1081. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  1082. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  1083. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  1084. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  1085. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  1086. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  1087. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  1088. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  1089. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  1090. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  1091. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  1092. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  1093. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  1094. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  1095. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  1096. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  1097. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  1098. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  1099. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  1100. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  1101. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  1102. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  1103. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  1104. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  1105. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  1106. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  1107. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  1108. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  1109. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  1110. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  1111. package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
  1112. package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
  1113. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
  1114. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
  1115. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
  1116. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
  1117. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  1118. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  1119. package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
  1120. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  1121. package/package.json +1 -3
  1122. package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
  1123. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
  1124. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
  1125. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
  1126. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
  1127. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
  1128. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
  1129. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
  1130. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
  1131. package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
  1132. package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
  1133. package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
  1134. package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
  1135. package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
  1136. package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
  1137. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
  1138. package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
  1139. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
  1140. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
  1141. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
  1142. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
  1143. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
  1144. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
  1145. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
  1146. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
@@ -0,0 +1,1129 @@
1
+ /*
2
+ * The pvesh command policy: what OneUptime AI may ask the Proxmox AI agent
3
+ * to do on a Proxmox VE cluster.
4
+ *
5
+ * There is no pvesh binary in the agent. A command is written in pvesh's
6
+ * grammar, because that is what models know —
7
+ *
8
+ * pvesh <get|ls|create> <api-path> [--name value | --name=value]...
9
+ * [--output-format json|json-pretty|text]
10
+ *
11
+ * — and the agent turns it into ONE call to the Proxmox VE HTTPS API
12
+ * (https://PVE_HOST:8006/api2/json<path>) with its own API token: get and
13
+ * ls are a GET, create is a POST. parseProxmoxCommand, exported below, is
14
+ * that translation, and it is the SAME analysis this policy tiers: it only
15
+ * ever returns a request for a command evaluateArgv does not deny, so there
16
+ * is no second parser (and no real pvesh) whose reading of the words could
17
+ * differ from the one that was judged.
18
+ *
19
+ * ---- Grammar ---------------------------------------------------------------
20
+ *
21
+ * A strict subset of what the real pvesh (Perl, Getopt::Long) accepts, so a
22
+ * command copied from the Proxmox docs either works as written or is
23
+ * refused with a reason that says what to write instead:
24
+ * - The command word comes right after "pvesh" (pvesh picks its command
25
+ * from the first word, before it parses any option). get and ls read,
26
+ * create acts; set (a PUT: configuration), delete, usage and help are
27
+ * refused.
28
+ * - Exactly one API path, anywhere after the command word. It starts with
29
+ * "/" and has no query string (?a=b), fragment, percent-encoding,
30
+ * whitespace, or empty, "." or ".." segment; a single trailing "/" is
31
+ * dropped. Paths are compared case-sensitively, as the API does.
32
+ * - Every option is "--name value" or "--name=value", and EVERY option
33
+ * takes a value: booleans are written 0 or 1 ("--online 1"), never bare.
34
+ * So which word is a value never depends on which option it follows,
35
+ * and a value never starts with "-": "--timeout --forceStop 1" is
36
+ * refused rather than read as a timeout of "--forceStop", so a flag can
37
+ * never hide inside another flag's value.
38
+ * - Single-dash options ("-timeout", Getopt::Long's other spelling),
39
+ * combined short options ("-abc"), unique-prefix abbreviations
40
+ * ("--time"), "--" and an option given twice are refused: each would be
41
+ * a second spelling of something the policy has to see exactly once.
42
+ * - Options are checked per path against a closed list, and every value
43
+ * against its own pattern; an option that is not listed is Denied.
44
+ *
45
+ * ---- Tiers -----------------------------------------------------------------
46
+ *
47
+ * Read (get, ls) is an ALLOWLIST of path shapes (READ_ROUTES) whose
48
+ * variable segments are validated: a node name, a VMID (a leading zero
49
+ * would be a second spelling of the same guest, so it is refused), a task
50
+ * UPID, a storage or a service id. Everything under /access (users, API
51
+ * tokens, ACLs, two-factor, tickets) is Denied, as are consoles (vncproxy,
52
+ * termproxy, spiceproxy, ...: the Proxmox equivalent of exec), the QEMU
53
+ * monitor and the guest agent's exec, file and password calls. A guest's
54
+ * config and pending changes (cloud-init passwords) and the cluster storage
55
+ * list are readable because ResourceOutputRedactor masks their secrets.
56
+ *
57
+ * create (POST) is Denied except:
58
+ * SafeWrite /nodes/{node}/{qemu|lxc}/{vmid}/status/{start|resume|reboot}
59
+ * — one named guest; shutting it down again undoes it.
60
+ * RiskyWrite .../status/{shutdown|stop|suspend}, /nodes/{node}/qemu/
61
+ * {vmid}/status/reset, and /nodes/{node}/services/{service}/
62
+ * {start|restart|reload} for RESTARTABLE_SERVICES.
63
+ * RiskyWrite + requiresHuman
64
+ * .../migrate (it moves a guest between nodes and, offline,
65
+ * stops it while it moves), and a start, restart or reload of
66
+ * corosync or pve-cluster (cluster membership, quorum and
67
+ * /etc/pve) — never unattended, whatever the mode.
68
+ * A write must name its node: "localhost" (whichever node the agent's API
69
+ * endpoint happens to be) is refused, because the node the change lands on
70
+ * — and so the service target it touches — would be unknown.
71
+ *
72
+ * Targets (what ONEUPTIME_AI_WRITE_TARGETS and the agent's protected targets
73
+ * are compared with): a guest write targets its VMID ("101"), which is
74
+ * unique across the cluster and stays the guest's name on whichever node it
75
+ * runs; a node-service write targets "<node>/<service>" ("pve1/pveproxy").
76
+ *
77
+ * Part of the import-closed resource policy directory that the resource AI
78
+ * agent carries a byte-identical copy of: relative imports of that set only,
79
+ * nothing from Node. Total: evaluateArgv and parseProxmoxCommand never
80
+ * throw, whatever they are handed.
81
+ */
82
+ import { ResourceCommandTier } from "../../../Types/ResourceAiAgent/ResourceAiAccess";
83
+ import { MAX_COMMAND_LENGTH_CHARS } from "../../../Types/AutoRemediation/AiRemediationCommandPolicyVerdict";
84
+ import { MAX_RESOURCE_COMMAND_TOKENS, deniedResult, renderResourceDisplayCommand, } from "./ResourceCommandPolicyCore";
85
+ export const PVESH_PROGRAM = "pvesh";
86
+ export const PROXMOX_OUTPUT_FORMATS = [
87
+ "json",
88
+ "json-pretty",
89
+ "text",
90
+ ];
91
+ // The one option every path takes: how the agent prints the API's answer.
92
+ export const PROXMOX_OUTPUT_FORMAT_OPTION = "output-format";
93
+ // The longest API path this policy reads.
94
+ export const MAX_PROXMOX_API_PATH_CHARS = 512;
95
+ function enumRule(values, expected) {
96
+ return {
97
+ expected: expected ||
98
+ (values.length === 1
99
+ ? `exactly ${values[0]}`
100
+ : `one of ${values.join(", ")}`),
101
+ accepts: (value) => {
102
+ return values.includes(value);
103
+ },
104
+ };
105
+ }
106
+ const DECIMAL_REGEX = /^(?:0|[1-9][0-9]{0,9})$/;
107
+ // A whole number written plainly (no sign, no leading zero) within [min, max].
108
+ function integerRule(min, max) {
109
+ return {
110
+ expected: `a whole number from ${min} to ${max}`,
111
+ accepts: (value) => {
112
+ if (!DECIMAL_REGEX.test(value)) {
113
+ return false;
114
+ }
115
+ const parsed = Number(value);
116
+ return parsed >= min && parsed <= max;
117
+ },
118
+ };
119
+ }
120
+ function patternRule(pattern, expected) {
121
+ return {
122
+ expected,
123
+ accepts: (value) => {
124
+ return pattern.test(value);
125
+ },
126
+ };
127
+ }
128
+ // PVE's own boolean spellings are many; 0 and 1 are the ones it always takes.
129
+ const BOOLEAN_RULE = enumRule(["0", "1"], "0 or 1");
130
+ /*
131
+ * A node name as PVE writes it: a hostname label (dots allowed, as some
132
+ * clusters use FQDNs).
133
+ */
134
+ const NODE_NAME_REGEX = /^[A-Za-z0-9][A-Za-z0-9.-]{0,62}$/;
135
+ /*
136
+ * The API's alias for "the node that answers this request" — for the agent,
137
+ * whichever node PVE_HOST points at.
138
+ */
139
+ const LOCAL_NODE_ALIAS = "localhost";
140
+ /*
141
+ * A guest id. PVE's own range is 100 to 999999999; a leading zero is
142
+ * refused because "0101" and "101" would be two spellings of one guest, and
143
+ * write targets are compared as text.
144
+ */
145
+ const VMID_REGEX = /^[1-9][0-9]{1,8}$/;
146
+ /*
147
+ * A task id as PVE::Tools::upid_decode reads it:
148
+ * UPID:<node>:<pid>:<pstart>:<starttime>:<type>:<id>:<user>: (hex numbers;
149
+ * the id may be empty; the user may carry an API token's "!name").
150
+ */
151
+ const UPID_REGEX = /^UPID:[A-Za-z0-9][A-Za-z0-9.-]{0,62}:[0-9A-Fa-f]{8}:[0-9A-Fa-f]{8,9}:[0-9A-Fa-f]{8}:[A-Za-z0-9_-]{1,64}:[A-Za-z0-9_.@!-]{0,128}:[A-Za-z0-9_.@!-]{1,128}:$/;
152
+ // PVE's pve-storage-id: a letter, then letters, digits, "-", "_" or ".".
153
+ const STORAGE_ID_REGEX = /^[A-Za-z](?:[A-Za-z0-9._-]{0,62}[A-Za-z0-9])?$/;
154
+ // A systemd service name as /nodes/{node}/services lists them.
155
+ const SERVICE_ID_REGEX = /^[a-z][a-z0-9-]{0,63}$/;
156
+ // A block device, as /nodes/{node}/disks/list prints it.
157
+ const DISK_PATH_REGEX = /^\/dev\/[A-Za-z0-9][A-Za-z0-9._:-]{0,127}(?:\/[A-Za-z0-9][A-Za-z0-9._:-]{0,127}){0,3}$/;
158
+ const VMID_RULE = patternRule(VMID_REGEX, "a guest id (VMID) such as 101");
159
+ const NODE_NAME_RULE = patternRule(NODE_NAME_REGEX, "a node name such as pve2");
160
+ // A UNIX timestamp in seconds.
161
+ const EPOCH_RULE = integerRule(0, 9999999999);
162
+ const COUNT_RULE = integerRule(1, 5000);
163
+ const OFFSET_RULE = integerRule(0, 1000000);
164
+ // /nodes/{node}/syslog reads journal times, not timestamps.
165
+ const SYSLOG_TIME_RULE = patternRule(/^[0-9]{4}-[0-9]{2}-[0-9]{2}(?: [0-9]{2}:[0-9]{2}(?::[0-9]{2})?)?$/, "a time such as 2025-01-31 or '2025-01-31 14:05' (quote it)");
166
+ // A guest's own timeout (seconds) for start, reboot and shutdown.
167
+ const GUEST_TIMEOUT_RULE = integerRule(0, 3600);
168
+ const RRD_TIMEFRAME_RULE = enumRule(["hour", "day", "week"]);
169
+ const RRD_CF_RULE = enumRule(["AVERAGE", "MAX"]);
170
+ const RRD_PARAMS = {
171
+ timeframe: RRD_TIMEFRAME_RULE,
172
+ cf: RRD_CF_RULE,
173
+ };
174
+ const STORAGE_CONTENT_TYPES = [
175
+ "images",
176
+ "rootdir",
177
+ "vztmpl",
178
+ "iso",
179
+ "backup",
180
+ "snippets",
181
+ "import",
182
+ ];
183
+ const STORAGE_CONTENT_RULE = {
184
+ expected: `a comma-separated list of ${STORAGE_CONTENT_TYPES.join(", ")}`,
185
+ accepts: (value) => {
186
+ const parts = value.split(",");
187
+ return (parts.length <= STORAGE_CONTENT_TYPES.length &&
188
+ parts.every((part) => {
189
+ return STORAGE_CONTENT_TYPES.includes(part);
190
+ }));
191
+ },
192
+ };
193
+ const GUEST_TYPES = ["qemu", "lxc"];
194
+ // The guest-agent reads OneUptime AI may make (each is its own GET).
195
+ const GUEST_AGENT_READS = [
196
+ "info",
197
+ "get-osinfo",
198
+ "get-fsinfo",
199
+ "network-get-interfaces",
200
+ "get-host-name",
201
+ "get-time",
202
+ ];
203
+ /*
204
+ * The variable segments of READ_ROUTES, written "{name}" in a route. A
205
+ * segment that fails its pattern names the route as a near miss, so the
206
+ * refusal says which segment is wrong instead of listing every path.
207
+ */
208
+ const SEGMENT_RULES = {
209
+ "{node}": {
210
+ pattern: NODE_NAME_REGEX,
211
+ expected: "a node name such as pve1",
212
+ },
213
+ "{guest}": {
214
+ pattern: /^(?:qemu|lxc)$/,
215
+ expected: "qemu (a VM) or lxc (a container)",
216
+ },
217
+ "{vmid}": {
218
+ pattern: VMID_REGEX,
219
+ expected: "a guest id (VMID) such as 101, without leading zeros",
220
+ },
221
+ "{upid}": {
222
+ pattern: UPID_REGEX,
223
+ expected: "a task id (UPID) exactly as /nodes/{node}/tasks lists it, such as UPID:pve1:0001A2B3:0C4D5E6F:65A1B2C3:qmstart:101:root@pam:",
224
+ },
225
+ "{storage}": {
226
+ pattern: STORAGE_ID_REGEX,
227
+ expected: "a storage id such as local-lvm",
228
+ },
229
+ "{service}": {
230
+ pattern: SERVICE_ID_REGEX,
231
+ expected: "a service name such as pveproxy",
232
+ },
233
+ "{agent}": {
234
+ pattern: new RegExp(`^(?:${GUEST_AGENT_READS.join("|")})$`),
235
+ expected: `one of ${GUEST_AGENT_READS.join(", ")}`,
236
+ },
237
+ };
238
+ const NO_PARAMS = {};
239
+ /*
240
+ * Every path get and ls may read, with its options. Anything else is Denied.
241
+ */
242
+ const READ_ROUTES = [
243
+ { path: "/version", params: NO_PARAMS },
244
+ { path: "/cluster/status", params: NO_PARAMS },
245
+ {
246
+ path: "/cluster/resources",
247
+ params: { type: enumRule(["vm", "storage", "node", "sdn"]) },
248
+ },
249
+ { path: "/cluster/ha/status/current", params: NO_PARAMS },
250
+ {
251
+ path: "/cluster/ha/resources",
252
+ params: { type: enumRule(["vm", "ct"]) },
253
+ },
254
+ { path: "/cluster/log", params: { max: COUNT_RULE } },
255
+ { path: "/cluster/tasks", params: NO_PARAMS },
256
+ { path: "/cluster/replication", params: NO_PARAMS },
257
+ { path: "/cluster/backup", params: NO_PARAMS },
258
+ { path: "/nodes", params: NO_PARAMS },
259
+ { path: "/nodes/{node}/status", params: NO_PARAMS },
260
+ { path: "/nodes/{node}/version", params: NO_PARAMS },
261
+ {
262
+ path: "/nodes/{node}/tasks",
263
+ params: {
264
+ errors: BOOLEAN_RULE,
265
+ limit: COUNT_RULE,
266
+ vmid: VMID_RULE,
267
+ source: enumRule(["archive", "active", "all"]),
268
+ start: OFFSET_RULE,
269
+ typefilter: patternRule(/^[A-Za-z0-9_-]{1,64}$/, "a task type such as qmstart or vzdump"),
270
+ userfilter: patternRule(/^[A-Za-z0-9_.@!-]{1,128}$/, "a user such as root@pam"),
271
+ since: EPOCH_RULE,
272
+ until: EPOCH_RULE,
273
+ },
274
+ },
275
+ { path: "/nodes/{node}/tasks/{upid}/status", params: NO_PARAMS },
276
+ {
277
+ path: "/nodes/{node}/tasks/{upid}/log",
278
+ params: { limit: COUNT_RULE, start: OFFSET_RULE },
279
+ },
280
+ {
281
+ path: "/nodes/{node}/syslog",
282
+ params: {
283
+ limit: COUNT_RULE,
284
+ start: OFFSET_RULE,
285
+ since: SYSLOG_TIME_RULE,
286
+ until: SYSLOG_TIME_RULE,
287
+ service: patternRule(/^[A-Za-z0-9_.@-]{1,128}$/, "a systemd unit such as pveproxy"),
288
+ },
289
+ },
290
+ {
291
+ path: "/nodes/{node}/journal",
292
+ params: { lastentries: COUNT_RULE, since: EPOCH_RULE, until: EPOCH_RULE },
293
+ },
294
+ { path: "/nodes/{node}/services", params: NO_PARAMS },
295
+ { path: "/nodes/{node}/services/{service}/state", params: NO_PARAMS },
296
+ {
297
+ path: "/nodes/{node}/storage",
298
+ params: { content: STORAGE_CONTENT_RULE, enabled: BOOLEAN_RULE },
299
+ },
300
+ { path: "/nodes/{node}/storage/{storage}/status", params: NO_PARAMS },
301
+ {
302
+ path: "/nodes/{node}/disks/list",
303
+ params: { skipsmart: BOOLEAN_RULE, "include-partitions": BOOLEAN_RULE },
304
+ },
305
+ {
306
+ path: "/nodes/{node}/disks/smart",
307
+ params: {
308
+ disk: patternRule(DISK_PATH_REGEX, "a block device such as /dev/sda"),
309
+ healthonly: BOOLEAN_RULE,
310
+ },
311
+ required: ["disk"],
312
+ },
313
+ {
314
+ path: "/nodes/{node}/network",
315
+ params: {
316
+ type: enumRule([
317
+ "bridge",
318
+ "bond",
319
+ "eth",
320
+ "alias",
321
+ "vlan",
322
+ "OVSBridge",
323
+ "OVSBond",
324
+ "OVSPort",
325
+ "OVSIntPort",
326
+ "any_bridge",
327
+ "any_local_bridge",
328
+ ]),
329
+ },
330
+ },
331
+ { path: "/nodes/{node}/netstat", params: NO_PARAMS },
332
+ {
333
+ path: "/nodes/{node}/rrddata",
334
+ params: RRD_PARAMS,
335
+ required: ["timeframe"],
336
+ },
337
+ { path: "/nodes/{node}/qemu", params: { full: BOOLEAN_RULE } },
338
+ { path: "/nodes/{node}/lxc", params: NO_PARAMS },
339
+ { path: "/nodes/{node}/{guest}/{vmid}/status/current", params: NO_PARAMS },
340
+ {
341
+ path: "/nodes/{node}/{guest}/{vmid}/config",
342
+ params: { current: BOOLEAN_RULE },
343
+ redacted: true,
344
+ },
345
+ {
346
+ path: "/nodes/{node}/{guest}/{vmid}/pending",
347
+ params: NO_PARAMS,
348
+ redacted: true,
349
+ },
350
+ {
351
+ path: "/nodes/{node}/{guest}/{vmid}/rrddata",
352
+ params: RRD_PARAMS,
353
+ required: ["timeframe"],
354
+ },
355
+ { path: "/nodes/{node}/{guest}/{vmid}/snapshot", params: NO_PARAMS },
356
+ { path: "/nodes/{node}/qemu/{vmid}/agent/{agent}", params: NO_PARAMS },
357
+ { path: "/nodes/{node}/replication", params: { guest: VMID_RULE } },
358
+ { path: "/nodes/{node}/apt/update", params: NO_PARAMS },
359
+ { path: "/nodes/{node}/ceph/status", params: NO_PARAMS },
360
+ { path: "/pools", params: NO_PARAMS },
361
+ { path: "/storage", params: NO_PARAMS, redacted: true },
362
+ ];
363
+ // What get and ls may read, for refusals (the read guide has the options).
364
+ export const PROXMOX_READABLE_PATHS_SUMMARY = "Readable paths: /version; /cluster/status, /cluster/resources, /cluster/tasks, /cluster/log, /cluster/replication, /cluster/backup, /cluster/ha/status/current, /cluster/ha/resources; /pools; /storage; /nodes; /nodes/{node}/ followed by status, version, tasks, tasks/{upid}/status, tasks/{upid}/log, syslog, journal, services, services/{service}/state, storage, storage/{storage}/status, disks/list, disks/smart, network, netstat, rrddata, replication, apt/update or ceph/status; /nodes/{node}/qemu and /nodes/{node}/lxc; /nodes/{node}/{qemu|lxc}/{vmid}/ followed by status/current, config, pending, rrddata or snapshot; /nodes/{node}/qemu/{vmid}/agent/ followed by info, get-osinfo, get-fsinfo, network-get-interfaces, get-host-name or get-time";
365
+ // ---- Writes ------------------------------------------------------------------
366
+ /*
367
+ * Node services OneUptime AI may start, restart or reload (RiskyWrite): the
368
+ * PVE daemons whose restart is the documented fix for a hung API, web UI,
369
+ * statistics, HA agent, scheduler or firewall, and the node's time, cron
370
+ * and mail daemons.
371
+ */
372
+ export const PROXMOX_RESTARTABLE_SERVICES = [
373
+ "pveproxy",
374
+ "pvedaemon",
375
+ "pvestatd",
376
+ "pve-ha-lrm",
377
+ "pve-ha-crm",
378
+ "spiceproxy",
379
+ "pvescheduler",
380
+ "pve-firewall",
381
+ "chrony",
382
+ "cron",
383
+ "postfix",
384
+ ];
385
+ /*
386
+ * Node services a restart of which can take the node out of the cluster
387
+ * (corosync: membership and quorum) or freeze /etc/pve cluster-wide
388
+ * (pve-cluster: pmxcfs) — RiskyWrite, and always a human's call.
389
+ */
390
+ export const PROXMOX_CLUSTER_CRITICAL_SERVICES = [
391
+ "corosync",
392
+ "pve-cluster",
393
+ ];
394
+ const SERVICE_ACTIONS = ["start", "restart", "reload"];
395
+ const TIMEOUT_ONLY = {
396
+ timeout: GUEST_TIMEOUT_RULE,
397
+ };
398
+ /*
399
+ * The guest power actions pvesh create may take
400
+ * (/nodes/{node}/{qemu|lxc}/{vmid}/status/{action}), with the options the
401
+ * API gives each one that OneUptime AI may use. A guest type an action is
402
+ * not listed for (an lxc reset) does not have it.
403
+ */
404
+ const GUEST_STATUS_ACTIONS = {
405
+ start: {
406
+ tier: ResourceCommandTier.SafeWrite,
407
+ params: { qemu: TIMEOUT_ONLY, lxc: NO_PARAMS },
408
+ describe: "starts",
409
+ because: "one named guest, and shutting it down again undoes it",
410
+ },
411
+ resume: {
412
+ tier: ResourceCommandTier.SafeWrite,
413
+ params: { qemu: NO_PARAMS, lxc: NO_PARAMS },
414
+ describe: "resumes the paused",
415
+ because: "one named guest, and suspending it again undoes it",
416
+ },
417
+ reboot: {
418
+ tier: ResourceCommandTier.SafeWrite,
419
+ params: { qemu: TIMEOUT_ONLY, lxc: TIMEOUT_ONLY },
420
+ describe: "cleanly reboots",
421
+ because: "one named guest, shut down cleanly and started again on its own",
422
+ },
423
+ shutdown: {
424
+ tier: ResourceCommandTier.RiskyWrite,
425
+ params: {
426
+ qemu: {
427
+ timeout: GUEST_TIMEOUT_RULE,
428
+ forceStop: enumRule(["0"]),
429
+ },
430
+ lxc: {
431
+ timeout: GUEST_TIMEOUT_RULE,
432
+ forceStop: enumRule(["0"]),
433
+ },
434
+ },
435
+ describe: "shuts down",
436
+ because: "the guest stays down, serving nothing, until someone starts it",
437
+ },
438
+ stop: {
439
+ tier: ResourceCommandTier.RiskyWrite,
440
+ params: { qemu: NO_PARAMS, lxc: NO_PARAMS },
441
+ describe: "hard-stops",
442
+ because: "it is pulling the plug: what the guest had not written is lost, and it stays down until someone starts it",
443
+ },
444
+ suspend: {
445
+ tier: ResourceCommandTier.RiskyWrite,
446
+ params: { qemu: NO_PARAMS, lxc: NO_PARAMS },
447
+ describe: "pauses",
448
+ because: "the guest serves nothing until someone resumes it",
449
+ },
450
+ reset: {
451
+ tier: ResourceCommandTier.RiskyWrite,
452
+ params: { qemu: NO_PARAMS },
453
+ describe: "hard-resets",
454
+ because: "it is pressing the reset button: what the VM had not written is lost",
455
+ },
456
+ };
457
+ const MIGRATE_PARAMS = {
458
+ qemu: { target: NODE_NAME_RULE, online: BOOLEAN_RULE },
459
+ lxc: {
460
+ target: NODE_NAME_RULE,
461
+ online: BOOLEAN_RULE,
462
+ restart: BOOLEAN_RULE,
463
+ },
464
+ };
465
+ // What pvesh create may do, for refusals.
466
+ export const PROXMOX_CREATE_PATHS_SUMMARY = "pvesh create may only start, resume, reboot, shut down, stop or suspend one guest (/nodes/{node}/{qemu|lxc}/{vmid}/status/ followed by start, resume, reboot, shutdown, stop or suspend), reset one VM (/nodes/{node}/qemu/{vmid}/status/reset), migrate one guest (/nodes/{node}/{qemu|lxc}/{vmid}/migrate --target {node}), or start, restart or reload one node service (/nodes/{node}/services/{service}/ followed by start, restart or reload)";
467
+ // ---- Never -------------------------------------------------------------------
468
+ const ACCESS_REASON = "everything under /access (users, groups, roles, API tokens, ACLs, two-factor, tickets and passwords) is off-limits to OneUptime AI, to read or to change";
469
+ const CONSOLE_REASON = "console and terminal proxies (vncproxy, vncwebsocket, termproxy, spiceproxy, vncshell, spiceshell, mtunnel) hand out an interactive shell or screen, the Proxmox equivalent of exec, so they are never allowed";
470
+ const GUEST_EXEC_REASON = "the QEMU monitor and the guest agent's exec, file and password calls run commands in, read files from or change passwords of a guest, so they are never allowed; the guest agent reads OneUptime AI may make are info, get-osinfo, get-fsinfo, network-get-interfaces, get-host-name and get-time";
471
+ const NODE_EXECUTE_REASON = "/nodes/{node}/execute runs a batch of arbitrary API calls, so it is never allowed; run each read on its own";
472
+ // Console proxies, at /nodes/{node}/<this>.
473
+ const NODE_CONSOLE_SEGMENTS = [
474
+ "vncshell",
475
+ "spiceshell",
476
+ "termproxy",
477
+ "vncwebsocket",
478
+ ];
479
+ // Console and tunnel proxies, at /nodes/{node}/{qemu|lxc}/{vmid}/<this>.
480
+ const GUEST_CONSOLE_SEGMENTS = [
481
+ "vncproxy",
482
+ "vncwebsocket",
483
+ "termproxy",
484
+ "spiceproxy",
485
+ "mtunnel",
486
+ "mtunnelwebsocket",
487
+ ];
488
+ // Guest-agent calls, at /nodes/{node}/qemu/{vmid}/agent/<this>.
489
+ const GUEST_AGENT_EXEC_SEGMENTS = [
490
+ "exec",
491
+ "exec-status",
492
+ "file-read",
493
+ "file-write",
494
+ "set-user-password",
495
+ ];
496
+ // Node-wide bulk actions, at /nodes/{node}/<this>.
497
+ const NODE_BULK_SEGMENTS = [
498
+ "startall",
499
+ "stopall",
500
+ "suspendall",
501
+ "migrateall",
502
+ ];
503
+ /*
504
+ * Why a path is never allowed, whatever the command word, or null. Checked
505
+ * before anything else about the command, so the model hears the real
506
+ * reason rather than a complaint about an option.
507
+ */
508
+ function describeForbiddenPath(segments) {
509
+ if (segments[0] === "access") {
510
+ return ACCESS_REASON;
511
+ }
512
+ if (segments[0] !== "nodes") {
513
+ return null;
514
+ }
515
+ const third = segments[2] || "";
516
+ const fifth = segments[4] || "";
517
+ if (segments.length === 3 && NODE_CONSOLE_SEGMENTS.includes(third)) {
518
+ return CONSOLE_REASON;
519
+ }
520
+ if (third === "execute") {
521
+ return NODE_EXECUTE_REASON;
522
+ }
523
+ if (!GUEST_TYPES.includes(third)) {
524
+ return null;
525
+ }
526
+ if (segments.length === 5 && GUEST_CONSOLE_SEGMENTS.includes(fifth)) {
527
+ return CONSOLE_REASON;
528
+ }
529
+ if (third === "qemu" && fifth === "monitor") {
530
+ return GUEST_EXEC_REASON;
531
+ }
532
+ if (fifth === "agent" &&
533
+ GUEST_AGENT_EXEC_SEGMENTS.includes(segments[5] || "")) {
534
+ return GUEST_EXEC_REASON;
535
+ }
536
+ return null;
537
+ }
538
+ /*
539
+ * Why a create on this path is refused, when it is a well-known action with
540
+ * a better answer than the generic list, or null.
541
+ */
542
+ function describeRefusedAction(segments) {
543
+ if (segments[0] !== "nodes" || segments.length < 3) {
544
+ return null;
545
+ }
546
+ const third = segments[2] || "";
547
+ if (segments.length === 3 && third === "status") {
548
+ return "rebooting or shutting down a node takes every guest on it down, so it is never allowed";
549
+ }
550
+ if (segments.length === 3 && NODE_BULK_SEGMENTS.includes(third)) {
551
+ return `/nodes/{node}/${third} acts on every guest on the node at once, so it is never allowed; act on one guest at a time`;
552
+ }
553
+ if (GUEST_TYPES.includes(third) &&
554
+ segments[4] === "snapshot" &&
555
+ segments.length >= 5) {
556
+ return "creating, rolling back or deleting snapshots is never allowed: a rollback discards everything written since the snapshot";
557
+ }
558
+ return null;
559
+ }
560
+ // "--output-format", "--forceStop", "--include-partitions".
561
+ const OPTION_NAME_REGEX = /^[A-Za-z][A-Za-z0-9-]*$/;
562
+ /*
563
+ * Split the words after the command word into the API path and the
564
+ * options (see the Grammar section). Never stops early: it records the
565
+ * first problem and keeps going, so the path is still found for a better
566
+ * refusal.
567
+ */
568
+ function splitWords(words) {
569
+ const positionals = [];
570
+ const options = [];
571
+ const seen = [];
572
+ let problem = null;
573
+ const note = (text) => {
574
+ if (problem === null) {
575
+ problem = text;
576
+ }
577
+ };
578
+ for (let i = 0; i < words.length; i++) {
579
+ const word = words[i] || "";
580
+ if (word === "--") {
581
+ note('pvesh commands never need "--": write the API path, then each option as --name value');
582
+ continue;
583
+ }
584
+ if (word.startsWith("--")) {
585
+ const equals = word.indexOf("=");
586
+ const name = equals >= 0 ? word.slice(2, equals) : word.slice(2);
587
+ let value;
588
+ if (equals >= 0) {
589
+ value = word.slice(equals + 1);
590
+ }
591
+ else {
592
+ const next = words[i + 1];
593
+ if (next === undefined || next.startsWith("-")) {
594
+ note(`--${shorten(name)} needs a value right after it (--${shorten(name)} VALUE or --${shorten(name)}=VALUE${next === undefined ? "" : `; got the option "${shorten(next)}"`}); booleans are written 0 or 1`);
595
+ continue;
596
+ }
597
+ value = next;
598
+ i++;
599
+ }
600
+ if (!OPTION_NAME_REGEX.test(name)) {
601
+ note(`"${shorten(word)}" is not an option pvesh understands: options are written --name value`);
602
+ continue;
603
+ }
604
+ if (seen.includes(name)) {
605
+ note(`--${name} is given more than once: give each option once`);
606
+ continue;
607
+ }
608
+ seen.push(name);
609
+ options.push({ name, value });
610
+ continue;
611
+ }
612
+ if (word.startsWith("-")) {
613
+ note(`"${shorten(word)}" is not supported: pvesh options are written with two dashes and a value (--name value or --name=value), never as single-dash or combined short options`);
614
+ continue;
615
+ }
616
+ positionals.push(word);
617
+ }
618
+ return { positionals, options, problem };
619
+ }
620
+ // A word shown inside a refusal, cut so a huge argument cannot flood it.
621
+ function shorten(text) {
622
+ return text.length > 80 ? `${text.slice(0, 77)}...` : text;
623
+ }
624
+ // Characters an API path OneUptime AI may use can hold (see UPID_REGEX).
625
+ const PATH_CHARACTERS_REGEX = /^[A-Za-z0-9._:@!/-]+$/;
626
+ // The API path, canonical, or why it cannot be one.
627
+ function readPath(raw) {
628
+ if (!raw) {
629
+ return "the API path is empty: name one, such as /cluster/status";
630
+ }
631
+ if (raw.length > MAX_PROXMOX_API_PATH_CHARS) {
632
+ return `the API path is longer than ${MAX_PROXMOX_API_PATH_CHARS} characters`;
633
+ }
634
+ if (raw.includes("?") || raw.includes("&") || raw.includes("#")) {
635
+ return `"${shorten(raw)}" carries a query string: write each parameter as an option after the path instead (pvesh get /nodes/pve1/tasks --errors 1 --limit 20)`;
636
+ }
637
+ if (raw.includes("%")) {
638
+ return `"${shorten(raw)}" is percent-encoded: write the path plainly (a UPID with its colons as they are)`;
639
+ }
640
+ if (!raw.startsWith("/")) {
641
+ return `"${shorten(raw)}" is not an API path: paths start with "/", such as /nodes/pve1/status`;
642
+ }
643
+ if (!PATH_CHARACTERS_REGEX.test(raw)) {
644
+ return `"${shorten(raw)}" holds a character no API path OneUptime AI may read has (paths use letters, digits and . _ - : @ !)`;
645
+ }
646
+ if (raw === "/") {
647
+ return `"/" is the root of the API, not a path OneUptime AI may read. ${PROXMOX_READABLE_PATHS_SUMMARY}`;
648
+ }
649
+ const trimmed = raw.endsWith("/") ? raw.slice(0, -1) : raw;
650
+ const segments = trimmed.slice(1).split("/");
651
+ if (segments.some((segment) => {
652
+ return segment === "" || segment === "." || segment === "..";
653
+ })) {
654
+ return `"${shorten(raw)}" has an empty, "." or ".." segment: write the path out plainly`;
655
+ }
656
+ return { path: `/${segments.join("/")}`, segments };
657
+ }
658
+ // The read route this path is, or the closest one and what is wrong.
659
+ function findReadRoute(segments) {
660
+ let nearMiss = null;
661
+ let nearMissFailures = Number.MAX_SAFE_INTEGER;
662
+ for (const route of READ_ROUTES) {
663
+ const pattern = route.path.slice(1).split("/");
664
+ if (pattern.length !== segments.length) {
665
+ continue;
666
+ }
667
+ const values = {};
668
+ let literalsMatch = true;
669
+ let failures = 0;
670
+ let firstFailure = null;
671
+ for (let i = 0; i < pattern.length; i++) {
672
+ const expected = pattern[i] || "";
673
+ const actual = segments[i] || "";
674
+ const rule = Object.prototype.hasOwnProperty.call(SEGMENT_RULES, expected)
675
+ ? SEGMENT_RULES[expected]
676
+ : undefined;
677
+ if (!rule) {
678
+ if (expected !== actual) {
679
+ literalsMatch = false;
680
+ break;
681
+ }
682
+ continue;
683
+ }
684
+ if (!rule.pattern.test(actual)) {
685
+ failures++;
686
+ if (firstFailure === null) {
687
+ firstFailure = `"${shorten(actual)}" in ${route.path} must be ${rule.expected}`;
688
+ }
689
+ continue;
690
+ }
691
+ values[expected.slice(1, -1)] = actual;
692
+ }
693
+ if (!literalsMatch) {
694
+ continue;
695
+ }
696
+ if (failures === 0) {
697
+ return { match: { route, values }, nearMiss: null };
698
+ }
699
+ if (failures < nearMissFailures) {
700
+ nearMissFailures = failures;
701
+ nearMiss = firstFailure;
702
+ }
703
+ }
704
+ return { match: null, nearMiss };
705
+ }
706
+ function listOptions(allowed) {
707
+ const names = Object.keys(allowed).map((name) => {
708
+ return `--${name}`;
709
+ });
710
+ return names.length === 0
711
+ ? `it takes no options besides --${PROXMOX_OUTPUT_FORMAT_OPTION}`
712
+ : `its options are ${names.join(", ")} and --${PROXMOX_OUTPUT_FORMAT_OPTION}`;
713
+ }
714
+ /*
715
+ * Check every option against the ones `where` takes, and the required ones
716
+ * against those given: the API parameters and the output format, or why
717
+ * not.
718
+ */
719
+ function checkOptions(options, allowed, required, where) {
720
+ const params = {};
721
+ let outputFormat = null;
722
+ for (const option of options) {
723
+ if (option.name === PROXMOX_OUTPUT_FORMAT_OPTION) {
724
+ const format = PROXMOX_OUTPUT_FORMATS.find((candidate) => {
725
+ return candidate === option.value;
726
+ });
727
+ if (!format) {
728
+ return `--${PROXMOX_OUTPUT_FORMAT_OPTION} must be one of ${PROXMOX_OUTPUT_FORMATS.join(", ")} (got "${shorten(option.value)}")`;
729
+ }
730
+ outputFormat = format;
731
+ continue;
732
+ }
733
+ const rule = Object.prototype.hasOwnProperty.call(allowed, option.name)
734
+ ? allowed[option.name]
735
+ : undefined;
736
+ if (!rule) {
737
+ return `--${option.name} is not an option OneUptime AI may pass to ${where}: ${listOptions(allowed)}`;
738
+ }
739
+ if (!rule.accepts(option.value)) {
740
+ return `--${option.name} on ${where} must be ${rule.expected} (got "${shorten(option.value)}")`;
741
+ }
742
+ params[option.name] = option.value;
743
+ }
744
+ for (const name of required) {
745
+ if (!Object.prototype.hasOwnProperty.call(params, name)) {
746
+ const rule = allowed[name];
747
+ return `${where} needs --${name}${rule ? ` (${rule.expected})` : ""}`;
748
+ }
749
+ }
750
+ return { params, outputFormat };
751
+ }
752
+ function deny(reason) {
753
+ return { allowed: false, reason };
754
+ }
755
+ const READ_COMMANDS = ["get", "ls"];
756
+ const CREATE_COMMAND = "create";
757
+ const WHAT_IS_ALLOWED = "read with pvesh get <path> (or pvesh ls <path>) and act with pvesh create <path>";
758
+ // Why each pvesh command word OneUptime AI may not use is refused.
759
+ const REFUSED_COMMANDS = {
760
+ set: `pvesh set changes configuration (an HTTP PUT), which OneUptime AI never does; ${PROXMOX_CREATE_PATHS_SUMMARY}`,
761
+ delete: `pvesh delete removes objects (an HTTP DELETE), which OneUptime AI never does; ${PROXMOX_CREATE_PATHS_SUMMARY}`,
762
+ usage: `pvesh usage is not available: the agent calls the Proxmox VE API directly, and only the paths it allows. ${PROXMOX_READABLE_PATHS_SUMMARY}`,
763
+ help: `pvesh help is not available: the agent calls the Proxmox VE API directly, and only the paths it allows. ${PROXMOX_READABLE_PATHS_SUMMARY}`,
764
+ };
765
+ function guestNoun(guest, vmid) {
766
+ return guest === "lxc" ? `container ${vmid}` : `VM ${vmid}`;
767
+ }
768
+ /*
769
+ * The whole judgement of one argv (program included): what it may do, or
770
+ * why it may not. Both evaluateArgv and parseProxmoxCommand are views of
771
+ * this, so the request the agent sends is exactly what was tiered.
772
+ */
773
+ function analyzeProxmoxArgv(rawArgv) {
774
+ if (!Array.isArray(rawArgv) || rawArgv.length === 0) {
775
+ return deny("Empty command.");
776
+ }
777
+ if (rawArgv.some((word) => {
778
+ return typeof word !== "string";
779
+ })) {
780
+ return deny("Every word of the command must be a string.");
781
+ }
782
+ const argv = rawArgv;
783
+ if (argv.length > MAX_RESOURCE_COMMAND_TOKENS) {
784
+ return deny(`A command may have at most ${MAX_RESOURCE_COMMAND_TOKENS} words.`);
785
+ }
786
+ const totalLength = argv.reduce((sum, word) => {
787
+ return sum + word.length;
788
+ }, 0);
789
+ if (totalLength > MAX_COMMAND_LENGTH_CHARS) {
790
+ return deny(`Command exceeds the ${MAX_COMMAND_LENGTH_CHARS}-character limit.`);
791
+ }
792
+ if (argv.some((word) => {
793
+ return word.includes("\n") || word.includes("\r") || word.includes("\0");
794
+ })) {
795
+ return deny("A command must be a single line: no word may hold a newline or a NUL character.");
796
+ }
797
+ if (argv[0] !== PVESH_PROGRAM) {
798
+ return deny(`a Proxmox command starts with "${PVESH_PROGRAM}": ${WHAT_IS_ALLOWED}`);
799
+ }
800
+ const command = argv[1] || "";
801
+ if (!command) {
802
+ return deny(`name what pvesh should do: ${WHAT_IS_ALLOWED}, such as pvesh get /cluster/status`);
803
+ }
804
+ if (command.startsWith("-")) {
805
+ return deny(`the pvesh command (get, ls or create) comes right after pvesh, before any option: pvesh reads its first word as the command`);
806
+ }
807
+ if (Object.prototype.hasOwnProperty.call(REFUSED_COMMANDS, command)) {
808
+ return deny(REFUSED_COMMANDS[command] || WHAT_IS_ALLOWED);
809
+ }
810
+ const isRead = READ_COMMANDS.includes(command);
811
+ if (!isRead && command !== CREATE_COMMAND) {
812
+ return deny(`"${shorten(command)}" is not a pvesh command OneUptime AI may run: ${WHAT_IS_ALLOWED}`);
813
+ }
814
+ const words = splitWords(argv.slice(2));
815
+ const rawPath = words.positionals[0];
816
+ if (rawPath === undefined) {
817
+ return deny(words.problem ||
818
+ `name the API path after pvesh ${command}, such as pvesh ${command} ${isRead ? "/cluster/status" : "/nodes/pve1/qemu/101/status/start"}`);
819
+ }
820
+ const path = readPath(rawPath);
821
+ if (typeof path === "string") {
822
+ return deny(words.problem || path);
823
+ }
824
+ const forbidden = describeForbiddenPath(path.segments);
825
+ if (forbidden) {
826
+ return deny(forbidden);
827
+ }
828
+ if (words.problem) {
829
+ return deny(words.problem);
830
+ }
831
+ if (words.positionals.length > 1) {
832
+ return deny(`pvesh takes exactly one API path, but "${shorten(words.positionals[1] || "")}" follows it: write options as --name value`);
833
+ }
834
+ return isRead
835
+ ? analyzeRead(command, path, words.options)
836
+ : analyzeCreate(path, words.options);
837
+ }
838
+ function analyzeRead(command, path, options) {
839
+ const lookup = findReadRoute(path.segments);
840
+ if (!lookup.match) {
841
+ if (lookup.nearMiss) {
842
+ return deny(lookup.nearMiss);
843
+ }
844
+ if (isCreateShape(path.segments)) {
845
+ return deny(`${path.path} is an action for pvesh create, not something to read: a guest's state is at /nodes/{node}/{qemu|lxc}/{vmid}/status/current and a node service's at /nodes/{node}/services/{service}/state. ${PROXMOX_READABLE_PATHS_SUMMARY}`);
846
+ }
847
+ return deny(`${path.path} is not a path OneUptime AI may read. ${PROXMOX_READABLE_PATHS_SUMMARY}`);
848
+ }
849
+ const route = lookup.match.route;
850
+ const checked = checkOptions(options, route.params, route.required || [], `pvesh ${command} ${route.path}`);
851
+ if (typeof checked === "string") {
852
+ return deny(checked);
853
+ }
854
+ return {
855
+ allowed: true,
856
+ tier: ResourceCommandTier.Read,
857
+ reason: `reads ${path.path} from the Proxmox VE API and changes nothing${route.redacted
858
+ ? "; passwords and keys in it are redacted before anyone sees the output"
859
+ : ""}`,
860
+ verb: command,
861
+ targets: [],
862
+ requiresHuman: false,
863
+ request: {
864
+ method: "GET",
865
+ path: path.path,
866
+ params: checked.params,
867
+ outputFormat: checked.outputFormat,
868
+ },
869
+ };
870
+ }
871
+ // Does this path have the shape of an action pvesh create may take?
872
+ function isCreateShape(segments) {
873
+ if (segments[0] !== "nodes") {
874
+ return false;
875
+ }
876
+ if (segments.length === 6) {
877
+ return GUEST_TYPES.includes(segments[2] || "") && segments[4] === "status";
878
+ }
879
+ if (segments.length === 5) {
880
+ return ((GUEST_TYPES.includes(segments[2] || "") && segments[4] === "migrate") ||
881
+ segments[2] === "services");
882
+ }
883
+ return false;
884
+ }
885
+ /*
886
+ * A write names its node: a malformed name, or "localhost" (whichever node
887
+ * the agent's API endpoint is), is refused.
888
+ */
889
+ function describeWriteNodeProblem(node, where) {
890
+ if (!NODE_NAME_REGEX.test(node)) {
891
+ return `"${shorten(node)}" in ${where} must be a node name such as pve1`;
892
+ }
893
+ if (node.toLowerCase() === LOCAL_NODE_ALIAS) {
894
+ return `a change must name its node, not "${node}" (which is whichever node the agent's API endpoint is): read /nodes, then write /nodes/<name>/...`;
895
+ }
896
+ return null;
897
+ }
898
+ function analyzeCreate(path, options) {
899
+ const segments = path.segments;
900
+ const refused = describeRefusedAction(segments);
901
+ if (refused) {
902
+ return deny(refused);
903
+ }
904
+ const node = segments[1] || "";
905
+ const third = segments[2] || "";
906
+ if (segments[0] === "nodes" &&
907
+ segments.length === 6 &&
908
+ GUEST_TYPES.includes(third) &&
909
+ segments[4] === "status") {
910
+ return analyzeGuestStatus(path, node, third, segments[3] || "", segments[5] || "", options);
911
+ }
912
+ if (segments[0] === "nodes" &&
913
+ segments.length === 5 &&
914
+ GUEST_TYPES.includes(third) &&
915
+ segments[4] === "migrate") {
916
+ return analyzeMigrate(path, node, third, segments[3] || "", options);
917
+ }
918
+ if (segments[0] === "nodes" &&
919
+ segments.length === 5 &&
920
+ third === "services") {
921
+ return analyzeService(path, node, segments[3] || "", segments[4] || "", options);
922
+ }
923
+ if (findReadRoute(segments).match) {
924
+ return deny(`${path.path} is a path to read (pvesh get ${path.path}), not an action; ${PROXMOX_CREATE_PATHS_SUMMARY}`);
925
+ }
926
+ return deny(`pvesh create ${path.path} is not allowed; ${PROXMOX_CREATE_PATHS_SUMMARY}`);
927
+ }
928
+ function analyzeGuestStatus(path, node, guest, vmid, action, options) {
929
+ var _a;
930
+ const template = `/nodes/{node}/${guest}/{vmid}/status/${action}`;
931
+ const nodeProblem = describeWriteNodeProblem(node, template);
932
+ if (nodeProblem) {
933
+ return deny(nodeProblem);
934
+ }
935
+ if (!VMID_REGEX.test(vmid)) {
936
+ return deny(`"${shorten(vmid)}" in ${template} must be ${((_a = SEGMENT_RULES["{vmid}"]) === null || _a === void 0 ? void 0 : _a.expected) || "a VMID"}`);
937
+ }
938
+ const known = Object.prototype.hasOwnProperty.call(GUEST_STATUS_ACTIONS, action)
939
+ ? GUEST_STATUS_ACTIONS[action]
940
+ : undefined;
941
+ const allowed = known && Object.prototype.hasOwnProperty.call(known.params, guest)
942
+ ? known.params[guest]
943
+ : undefined;
944
+ if (!known || !allowed) {
945
+ const actions = Object.keys(GUEST_STATUS_ACTIONS).filter((name) => {
946
+ const candidate = GUEST_STATUS_ACTIONS[name];
947
+ return Boolean(candidate &&
948
+ Object.prototype.hasOwnProperty.call(candidate.params, guest));
949
+ });
950
+ return deny(`"${shorten(action)}" is not a ${guest === "lxc" ? "container" : "VM"} status action OneUptime AI may take: it may ${actions.join(", ")} one (/nodes/{node}/${guest}/{vmid}/status/<action>)${guest === "lxc" && action === "reset"
951
+ ? "; containers have no reset, reboot one instead"
952
+ : ""}`);
953
+ }
954
+ const checked = checkOptions(options, allowed, [], `pvesh create ${template}`);
955
+ if (typeof checked === "string") {
956
+ return deny(checked);
957
+ }
958
+ return {
959
+ allowed: true,
960
+ tier: known.tier,
961
+ reason: `${known.describe} ${guestNoun(guest, vmid)} on node ${node}: ${known.because}`,
962
+ verb: `${guest} ${action}`,
963
+ targets: [vmid],
964
+ requiresHuman: false,
965
+ request: {
966
+ method: "POST",
967
+ path: path.path,
968
+ params: checked.params,
969
+ outputFormat: checked.outputFormat,
970
+ },
971
+ };
972
+ }
973
+ function analyzeMigrate(path, node, guest, vmid, options) {
974
+ var _a;
975
+ const template = `/nodes/{node}/${guest}/{vmid}/migrate`;
976
+ const nodeProblem = describeWriteNodeProblem(node, template);
977
+ if (nodeProblem) {
978
+ return deny(nodeProblem);
979
+ }
980
+ if (!VMID_REGEX.test(vmid)) {
981
+ return deny(`"${shorten(vmid)}" in ${template} must be ${((_a = SEGMENT_RULES["{vmid}"]) === null || _a === void 0 ? void 0 : _a.expected) || "a VMID"}`);
982
+ }
983
+ const allowed = MIGRATE_PARAMS[guest] || NO_PARAMS;
984
+ const checked = checkOptions(options, allowed, ["target"], `pvesh create ${template}`);
985
+ if (typeof checked === "string") {
986
+ return deny(checked);
987
+ }
988
+ const target = checked.params["target"] || "";
989
+ if (target.toLowerCase() === LOCAL_NODE_ALIAS) {
990
+ return deny(`--target must name the node to move to, not "${target}": read /nodes for the node names`);
991
+ }
992
+ if (target.toLowerCase() === node.toLowerCase()) {
993
+ return deny(`${guestNoun(guest, vmid)} is already on node ${node}: --target must name a different node`);
994
+ }
995
+ return {
996
+ allowed: true,
997
+ tier: ResourceCommandTier.RiskyWrite,
998
+ reason: `moves ${guestNoun(guest, vmid)} from node ${node} to node ${target}: it loads another node and, unless it moves online, stops the guest while it moves, so a human always decides`,
999
+ verb: `${guest} migrate`,
1000
+ targets: [vmid],
1001
+ requiresHuman: true,
1002
+ request: {
1003
+ method: "POST",
1004
+ path: path.path,
1005
+ params: checked.params,
1006
+ outputFormat: checked.outputFormat,
1007
+ },
1008
+ };
1009
+ }
1010
+ function analyzeService(path, node, service, action, options) {
1011
+ const template = `/nodes/{node}/services/{service}/${action}`;
1012
+ const nodeProblem = describeWriteNodeProblem(node, template);
1013
+ if (nodeProblem) {
1014
+ return deny(nodeProblem);
1015
+ }
1016
+ if (action === "stop") {
1017
+ return deny("stopping a node service is never allowed: it stays down until someone starts it. Restart or reload it instead (/nodes/{node}/services/{service}/restart)");
1018
+ }
1019
+ if (!SERVICE_ACTIONS.includes(action)) {
1020
+ return deny(`"${shorten(action)}" is not a service action OneUptime AI may take: it may ${SERVICE_ACTIONS.join(", ")} a node service (/nodes/{node}/services/{service}/<action>)`);
1021
+ }
1022
+ const isCritical = PROXMOX_CLUSTER_CRITICAL_SERVICES.includes(service);
1023
+ if (!isCritical && !PROXMOX_RESTARTABLE_SERVICES.includes(service)) {
1024
+ return deny(`"${shorten(service)}" is not a node service OneUptime AI may ${action}: it may start, restart or reload ${[
1025
+ ...PROXMOX_RESTARTABLE_SERVICES,
1026
+ ...PROXMOX_CLUSTER_CRITICAL_SERVICES,
1027
+ ].join(", ")}`);
1028
+ }
1029
+ const checked = checkOptions(options, NO_PARAMS, [], `pvesh create ${template}`);
1030
+ if (typeof checked === "string") {
1031
+ return deny(checked);
1032
+ }
1033
+ return {
1034
+ allowed: true,
1035
+ tier: ResourceCommandTier.RiskyWrite,
1036
+ reason: isCritical
1037
+ ? `${action}s ${service} on node ${node}: ${service === "corosync"
1038
+ ? "corosync carries cluster membership and quorum"
1039
+ : "pve-cluster serves /etc/pve, the configuration every node shares"}, and a restart that goes wrong can take the node out of the cluster, so a human always decides`
1040
+ : `${action}s the ${service} service on node ${node}: what it serves pauses while it ${action === "reload" ? "reloads" : "restarts"}`,
1041
+ verb: `service ${action}`,
1042
+ targets: [`${node}/${service}`],
1043
+ requiresHuman: isCritical,
1044
+ request: {
1045
+ method: "POST",
1046
+ path: path.path,
1047
+ params: checked.params,
1048
+ outputFormat: checked.outputFormat,
1049
+ },
1050
+ };
1051
+ }
1052
+ /*
1053
+ * The Proxmox VE API request a pvesh command becomes (program included in
1054
+ * argv), or the policy's reason it may not run. The agent's executor calls
1055
+ * this on the argv it received after the policy has passed it, and sends
1056
+ * exactly the request it returns.
1057
+ */
1058
+ export function parseProxmoxCommand(argv) {
1059
+ let analysis;
1060
+ try {
1061
+ analysis = analyzeProxmoxArgv(argv);
1062
+ }
1063
+ catch (_a) {
1064
+ return {
1065
+ errorMessage: "the pvesh command policy could not evaluate this command",
1066
+ };
1067
+ }
1068
+ if (!analysis.allowed) {
1069
+ return { errorMessage: analysis.reason };
1070
+ }
1071
+ return {
1072
+ request: {
1073
+ method: analysis.request.method,
1074
+ path: analysis.request.path,
1075
+ params: Object.assign({}, analysis.request.params),
1076
+ outputFormat: analysis.request.outputFormat,
1077
+ },
1078
+ };
1079
+ }
1080
+ // ---- Guides ------------------------------------------------------------------
1081
+ const READ_COMMAND_GUIDE = [
1082
+ "- `pvesh get <path> [--name value]...` (or `pvesh ls <path>`) reads the Proxmox VE API; options are `--name value` or `--name=value`, booleans 0 or 1, and `--output-format json|json-pretty|text` picks the output. No query strings (`?a=b`); one path per command.",
1083
+ "- Cluster: `pvesh get /version`, `/cluster/status`, `/cluster/resources [--type vm|storage|node|sdn]`, `/cluster/ha/status/current`, `/cluster/ha/resources [--type vm|ct]`, `/cluster/log [--max N]`, `/cluster/tasks`, `/cluster/replication`, `/cluster/backup`, `/pools`, `/storage`, `/nodes`.",
1084
+ "- A node: `/nodes/{node}/status`, `/version`, `/services`, `/services/{service}/state`, `/storage [--content images] [--enabled 1]`, `/storage/{storage}/status`, `/disks/list`, `/disks/smart --disk /dev/sda`, `/network`, `/netstat`, `/replication [--guest VMID]`, `/apt/update`, `/ceph/status`, `/rrddata --timeframe hour|day|week [--cf AVERAGE|MAX]`.",
1085
+ "- Tasks and logs: `/nodes/{node}/tasks [--errors 1] [--limit N] [--vmid VMID] [--source archive|active|all] [--typefilter TYPE] [--userfilter USER] [--start N] [--since EPOCH] [--until EPOCH]`, `/nodes/{node}/tasks/{upid}/status`, `/nodes/{node}/tasks/{upid}/log [--limit N] [--start N]`, `/nodes/{node}/syslog [--limit N] [--start N] [--since 'YYYY-MM-DD HH:MM'] [--until ...] [--service UNIT]`, `/nodes/{node}/journal [--lastentries N] [--since EPOCH] [--until EPOCH]`.",
1086
+ "- Guests ({type} is qemu for VMs, lxc for containers; {vmid} like 101): `/nodes/{node}/qemu [--full 1]`, `/nodes/{node}/lxc`, `/nodes/{node}/{type}/{vmid}/status/current`, `/config [--current 1]` (secrets redacted), `/pending`, `/snapshot`, `/rrddata --timeframe hour|day|week`; QEMU guest agent: `/nodes/{node}/qemu/{vmid}/agent/info|get-osinfo|get-fsinfo|network-get-interfaces|get-host-name|get-time`.",
1087
+ "- Never: anything under /access (users, API tokens, ACLs), consoles (vncproxy, termproxy, spiceproxy), the QEMU monitor, guest-agent exec or file access, `pvesh set`, `pvesh delete`, `pvesh usage`.",
1088
+ ].join("\n");
1089
+ const WRITE_COMMAND_GUIDE = [
1090
+ "- `pvesh create <path> [--name value]...` is one POST to the Proxmox VE API. {type} is qemu (VM) or lxc (container), {vmid} the guest id; always name the node (read /nodes; never localhost).",
1091
+ "- Safe (runs unattended in Automatic mode): `pvesh create /nodes/{node}/{type}/{vmid}/status/start`, `/status/resume`, `/status/reboot` (`--timeout N` on a qemu start and on reboots).",
1092
+ "- Riskier (needs approval unless allowlisted or approvals are bypassed): `/nodes/{node}/{type}/{vmid}/status/shutdown [--timeout N] [--forceStop 0]`, `/status/stop`, `/status/suspend`, `/nodes/{node}/qemu/{vmid}/status/reset`; `pvesh create /nodes/{node}/services/{service}/start|restart|reload` for pveproxy, pvedaemon, pvestatd, pve-ha-lrm, pve-ha-crm, spiceproxy, pvescheduler, pve-firewall, chrony, cron, postfix.",
1093
+ "- Always asks a human: `pvesh create /nodes/{node}/{type}/{vmid}/migrate --target {othernode} [--online 0|1]` (`--restart 0|1` for lxc), and starting, restarting or reloading corosync or pve-cluster.",
1094
+ "- Never: `pvesh set` (configuration), `pvesh delete`, stopping a node service, node reboot or shutdown, startall/stopall/migrateall, snapshots, anything under /access, consoles, guest-agent exec.",
1095
+ ].join("\n");
1096
+ const ProxmoxCommandPolicy = {
1097
+ name: "pvesh",
1098
+ programs: [PVESH_PROGRAM],
1099
+ readCommandGuide: READ_COMMAND_GUIDE,
1100
+ writeCommandGuide: WRITE_COMMAND_GUIDE,
1101
+ evaluateArgv(argv) {
1102
+ let analysis;
1103
+ try {
1104
+ analysis = analyzeProxmoxArgv(argv);
1105
+ }
1106
+ catch (_a) {
1107
+ return deniedResult(argv, "the pvesh command policy could not evaluate this command");
1108
+ }
1109
+ if (!analysis.allowed) {
1110
+ return deniedResult(argv, analysis.reason);
1111
+ }
1112
+ const words = argv.slice();
1113
+ const result = {
1114
+ tier: analysis.tier,
1115
+ reason: analysis.reason,
1116
+ program: PVESH_PROGRAM,
1117
+ args: words.slice(1),
1118
+ verb: analysis.verb,
1119
+ displayCommand: renderResourceDisplayCommand(words),
1120
+ targets: analysis.targets.slice(),
1121
+ };
1122
+ if (analysis.requiresHuman) {
1123
+ result.requiresHuman = true;
1124
+ }
1125
+ return result;
1126
+ },
1127
+ };
1128
+ export default ProxmoxCommandPolicy;
1129
+ //# sourceMappingURL=ProxmoxCommandPolicy.js.map