@1mcp/agent 0.39.0-beta.1 → 0.39.0-beta.3

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 (601) hide show
  1. package/build/admin/assets/{admin-OAuthServicesWorkspace-CcUSZCNL.js → admin-OAuthServicesWorkspace-D_GlqLxL.js} +1 -1
  2. package/build/admin/assets/{admin-console-fP-KT2vb.js → admin-console-CMRxMjQo.js} +3 -3
  3. package/build/admin/index.html +1 -1
  4. package/build/application/services/healthService.js +3 -3
  5. package/build/application/services/healthService.js.map +1 -1
  6. package/build/application/services/tokenEstimationService.d.ts.map +1 -1
  7. package/build/application/services/tokenEstimationService.js +15 -13
  8. package/build/application/services/tokenEstimationService.js.map +1 -1
  9. package/build/auth/oauthAuthorizationFlow.js +1 -1
  10. package/build/auth/oauthAuthorizationFlow.js.map +1 -1
  11. package/build/auth/storage/authCodeRepository.js +2 -2
  12. package/build/auth/storage/authCodeRepository.js.map +1 -1
  13. package/build/auth/storage/authRequestRepository.js +2 -2
  14. package/build/auth/storage/authRequestRepository.js.map +1 -1
  15. package/build/auth/storage/clientDataRepository.js +2 -2
  16. package/build/auth/storage/clientDataRepository.js.map +1 -1
  17. package/build/auth/storage/clientSessionRepository.js +1 -1
  18. package/build/auth/storage/clientSessionRepository.js.map +1 -1
  19. package/build/auth/storage/fileStorageService.d.ts.map +1 -1
  20. package/build/auth/storage/fileStorageService.js +50 -46
  21. package/build/auth/storage/fileStorageService.js.map +1 -1
  22. package/build/auth/storage/oauthStorageService.d.ts.map +1 -1
  23. package/build/auth/storage/oauthStorageService.js +2 -4
  24. package/build/auth/storage/oauthStorageService.js.map +1 -1
  25. package/build/auth/storage/sessionRepository.js +3 -3
  26. package/build/auth/storage/sessionRepository.js.map +1 -1
  27. package/build/cli.d.ts +4 -0
  28. package/build/cli.d.ts.map +1 -0
  29. package/build/cli.js +133 -0
  30. package/build/cli.js.map +1 -0
  31. package/build/commands/cliSetup/setupFiles.js +1 -1
  32. package/build/commands/cliSetup/setupFiles.js.map +1 -1
  33. package/build/commands/mcp/install.js +7 -7
  34. package/build/commands/mcp/install.js.map +1 -1
  35. package/build/commands/mcp/installSource.js +2 -2
  36. package/build/commands/mcp/installSource.js.map +1 -1
  37. package/build/commands/mcp/tokens.js +6 -6
  38. package/build/commands/mcp/tokens.js.map +1 -1
  39. package/build/commands/mcp/uninstall.js +4 -4
  40. package/build/commands/mcp/uninstall.js.map +1 -1
  41. package/build/commands/mcp/utils/installWizard.js +2 -2
  42. package/build/commands/mcp/utils/installWizard.js.map +1 -1
  43. package/build/commands/mcp/utils/mcpServerConfig.js +5 -5
  44. package/build/commands/mcp/utils/mcpServerConfig.js.map +1 -1
  45. package/build/commands/mcp/utils/serverUtils.js +4 -4
  46. package/build/commands/mcp/utils/serverUtils.js.map +1 -1
  47. package/build/commands/mcp/wizard/search.js +1 -1
  48. package/build/commands/mcp/wizard/search.js.map +1 -1
  49. package/build/commands/preset/create.js +1 -1
  50. package/build/commands/preset/create.js.map +1 -1
  51. package/build/commands/preset/delete.js +1 -1
  52. package/build/commands/preset/delete.js.map +1 -1
  53. package/build/commands/preset/edit.js +1 -1
  54. package/build/commands/preset/edit.js.map +1 -1
  55. package/build/commands/preset/interactive.js +1 -1
  56. package/build/commands/preset/interactive.js.map +1 -1
  57. package/build/commands/preset/list.js +1 -1
  58. package/build/commands/preset/list.js.map +1 -1
  59. package/build/commands/preset/show.js +1 -1
  60. package/build/commands/preset/show.js.map +1 -1
  61. package/build/commands/preset/test.js +1 -1
  62. package/build/commands/preset/test.js.map +1 -1
  63. package/build/commands/preset/url.js +1 -1
  64. package/build/commands/preset/url.js.map +1 -1
  65. package/build/commands/proxy/proxy.js +13 -13
  66. package/build/commands/proxy/proxy.js.map +1 -1
  67. package/build/commands/registry/search.js +2 -2
  68. package/build/commands/registry/search.js.map +1 -1
  69. package/build/commands/registry/show.d.ts.map +1 -1
  70. package/build/commands/registry/show.js +2 -2
  71. package/build/commands/registry/show.js.map +1 -1
  72. package/build/commands/registry/status.js +2 -2
  73. package/build/commands/registry/status.js.map +1 -1
  74. package/build/commands/registry/versions.js +2 -2
  75. package/build/commands/registry/versions.js.map +1 -1
  76. package/build/commands/run/run.js +3 -3
  77. package/build/commands/run/run.js.map +1 -1
  78. package/build/commands/serve/cooperativeRuntime.d.ts +1 -1
  79. package/build/commands/serve/cooperativeRuntime.d.ts.map +1 -1
  80. package/build/commands/serve/cooperativeRuntime.js +88 -28
  81. package/build/commands/serve/cooperativeRuntime.js.map +1 -1
  82. package/build/commands/serve/index.d.ts +6 -0
  83. package/build/commands/serve/index.d.ts.map +1 -1
  84. package/build/commands/serve/index.js +7 -1
  85. package/build/commands/serve/index.js.map +1 -1
  86. package/build/commands/serve/serveBackground.d.ts.map +1 -1
  87. package/build/commands/serve/serveBackground.js +4 -5
  88. package/build/commands/serve/serveBackground.js.map +1 -1
  89. package/build/commands/serve/serveLifecycleError.d.ts +16 -0
  90. package/build/commands/serve/serveLifecycleError.d.ts.map +1 -0
  91. package/build/commands/serve/serveLifecycleError.js +31 -0
  92. package/build/commands/serve/serveLifecycleError.js.map +1 -0
  93. package/build/commands/serve/serveOptions.d.ts.map +1 -1
  94. package/build/commands/serve/serveOptions.js +14 -18
  95. package/build/commands/serve/serveOptions.js.map +1 -1
  96. package/build/commands/serve/serveStop.js +5 -5
  97. package/build/commands/serve/serveStop.js.map +1 -1
  98. package/build/commands/shared/authProfileStore.d.ts.map +1 -1
  99. package/build/commands/shared/authProfileStore.js +4 -2
  100. package/build/commands/shared/authProfileStore.js.map +1 -1
  101. package/build/commands/shared/baseConfigUtils.d.ts.map +1 -1
  102. package/build/commands/shared/baseConfigUtils.js +12 -12
  103. package/build/commands/shared/baseConfigUtils.js.map +1 -1
  104. package/build/commands/shared/clientSurfaceAttachment.d.ts.map +1 -1
  105. package/build/commands/shared/clientSurfaceAttachment.js +4 -2
  106. package/build/commands/shared/clientSurfaceAttachment.js.map +1 -1
  107. package/build/commands/shared/configParsingUtils.js +1 -1
  108. package/build/commands/shared/configParsingUtils.js.map +1 -1
  109. package/build/commands/shared/connectionHelper.d.ts.map +1 -1
  110. package/build/commands/shared/connectionHelper.js +17 -18
  111. package/build/commands/shared/connectionHelper.js.map +1 -1
  112. package/build/commands/shared/inspectApiSchemas.d.ts +20 -20
  113. package/build/config/configLoader.d.ts.map +1 -1
  114. package/build/config/configLoader.js +25 -38
  115. package/build/config/configLoader.js.map +1 -1
  116. package/build/config/configManager.d.ts.map +1 -1
  117. package/build/config/configManager.js +22 -25
  118. package/build/config/configManager.js.map +1 -1
  119. package/build/config/configWatcher.d.ts.map +1 -1
  120. package/build/config/configWatcher.js +13 -18
  121. package/build/config/configWatcher.js.map +1 -1
  122. package/build/config/envProcessor.d.ts.map +1 -1
  123. package/build/config/envProcessor.js +7 -9
  124. package/build/config/envProcessor.js.map +1 -1
  125. package/build/config/mcpConfigManager.d.ts.map +1 -1
  126. package/build/config/mcpConfigManager.js +21 -28
  127. package/build/config/mcpConfigManager.js.map +1 -1
  128. package/build/config/projectConfigLoader.d.ts.map +1 -1
  129. package/build/config/projectConfigLoader.js +7 -11
  130. package/build/config/projectConfigLoader.js.map +1 -1
  131. package/build/config/templateProcessor.d.ts.map +1 -1
  132. package/build/config/templateProcessor.js +5 -5
  133. package/build/config/templateProcessor.js.map +1 -1
  134. package/build/constants/mcp.d.ts +1 -1
  135. package/build/constants/mcp.js +1 -1
  136. package/build/core/capabilities/asyncLoadingOrchestrator.d.ts.map +1 -1
  137. package/build/core/capabilities/asyncLoadingOrchestrator.js +38 -38
  138. package/build/core/capabilities/asyncLoadingOrchestrator.js.map +1 -1
  139. package/build/core/capabilities/capabilityCatalog.d.ts +3 -1
  140. package/build/core/capabilities/capabilityCatalog.d.ts.map +1 -1
  141. package/build/core/capabilities/capabilityCatalog.js +10 -10
  142. package/build/core/capabilities/capabilityCatalog.js.map +1 -1
  143. package/build/core/capabilities/capabilityManager.js +9 -9
  144. package/build/core/capabilities/capabilityManager.js.map +1 -1
  145. package/build/core/capabilities/capabilityPagination.d.ts +16 -0
  146. package/build/core/capabilities/capabilityPagination.d.ts.map +1 -1
  147. package/build/core/capabilities/capabilityPagination.js +141 -20
  148. package/build/core/capabilities/capabilityPagination.js.map +1 -1
  149. package/build/core/capabilities/internalCapabilitiesProvider.d.ts.map +1 -1
  150. package/build/core/capabilities/internalCapabilitiesProvider.js +6 -14
  151. package/build/core/capabilities/internalCapabilitiesProvider.js.map +1 -1
  152. package/build/core/capabilities/lazyLoadingOrchestrator.d.ts +17 -2
  153. package/build/core/capabilities/lazyLoadingOrchestrator.d.ts.map +1 -1
  154. package/build/core/capabilities/lazyLoadingOrchestrator.js +68 -30
  155. package/build/core/capabilities/lazyLoadingOrchestrator.js.map +1 -1
  156. package/build/core/capabilities/metaToolProvider.d.ts +2 -2
  157. package/build/core/capabilities/metaToolProvider.d.ts.map +1 -1
  158. package/build/core/capabilities/metaToolProvider.js +14 -19
  159. package/build/core/capabilities/metaToolProvider.js.map +1 -1
  160. package/build/core/capabilities/runtimeCapabilityCatalog.d.ts +5 -1
  161. package/build/core/capabilities/runtimeCapabilityCatalog.d.ts.map +1 -1
  162. package/build/core/capabilities/runtimeCapabilityCatalog.js +47 -6
  163. package/build/core/capabilities/runtimeCapabilityCatalog.js.map +1 -1
  164. package/build/core/capabilities/schemaCache.d.ts.map +1 -1
  165. package/build/core/capabilities/schemaCache.js +12 -15
  166. package/build/core/capabilities/schemaCache.js.map +1 -1
  167. package/build/core/capabilities/schemas/metaToolSchemas.d.ts +3 -3
  168. package/build/core/capabilities/toolRegistry.d.ts +3 -0
  169. package/build/core/capabilities/toolRegistry.d.ts.map +1 -1
  170. package/build/core/capabilities/toolRegistry.js +10 -10
  171. package/build/core/capabilities/toolRegistry.js.map +1 -1
  172. package/build/core/client/postAuthOAuthRecovery.d.ts.map +1 -1
  173. package/build/core/client/postAuthOAuthRecovery.js +5 -3
  174. package/build/core/client/postAuthOAuthRecovery.js.map +1 -1
  175. package/build/core/configChangeHandler.d.ts.map +1 -1
  176. package/build/core/configChangeHandler.js +44 -65
  177. package/build/core/configChangeHandler.js.map +1 -1
  178. package/build/core/context/globalContextManager.d.ts.map +1 -1
  179. package/build/core/context/globalContextManager.js +6 -6
  180. package/build/core/context/globalContextManager.js.map +1 -1
  181. package/build/core/filtering/clientFiltering.d.ts.map +1 -1
  182. package/build/core/filtering/clientFiltering.js +16 -67
  183. package/build/core/filtering/clientFiltering.js.map +1 -1
  184. package/build/core/filtering/clientTemplateTracker.d.ts.map +1 -1
  185. package/build/core/filtering/clientTemplateTracker.js +13 -41
  186. package/build/core/filtering/clientTemplateTracker.js.map +1 -1
  187. package/build/core/filtering/filterCache.d.ts.map +1 -1
  188. package/build/core/filtering/filterCache.js +13 -32
  189. package/build/core/filtering/filterCache.js.map +1 -1
  190. package/build/core/filtering/filteringService.d.ts.map +1 -1
  191. package/build/core/filtering/filteringService.js +22 -80
  192. package/build/core/filtering/filteringService.js.map +1 -1
  193. package/build/core/filtering/templateFilteringService.d.ts.map +1 -1
  194. package/build/core/filtering/templateFilteringService.js +25 -89
  195. package/build/core/filtering/templateFilteringService.js.map +1 -1
  196. package/build/core/filtering/templateIndex.d.ts.map +1 -1
  197. package/build/core/filtering/templateIndex.js +11 -23
  198. package/build/core/filtering/templateIndex.js.map +1 -1
  199. package/build/core/flags/flagManager.d.ts.map +1 -1
  200. package/build/core/flags/flagManager.js +2 -5
  201. package/build/core/flags/flagManager.js.map +1 -1
  202. package/build/core/instructions/instructionAggregator.d.ts.map +1 -1
  203. package/build/core/instructions/instructionAggregator.js +16 -36
  204. package/build/core/instructions/instructionAggregator.js.map +1 -1
  205. package/build/core/loading/loadingStateTracker.d.ts.map +1 -1
  206. package/build/core/loading/loadingStateTracker.js +8 -9
  207. package/build/core/loading/loadingStateTracker.js.map +1 -1
  208. package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
  209. package/build/core/loading/mcpLoadingManager.js +29 -30
  210. package/build/core/loading/mcpLoadingManager.js.map +1 -1
  211. package/build/core/loading/parallelExecutor.d.ts.map +1 -1
  212. package/build/core/loading/parallelExecutor.js +1 -4
  213. package/build/core/loading/parallelExecutor.js.map +1 -1
  214. package/build/core/notifications/notificationManager.d.ts.map +1 -1
  215. package/build/core/notifications/notificationManager.js +12 -12
  216. package/build/core/notifications/notificationManager.js.map +1 -1
  217. package/build/core/server/adapters/TemplateServerAdapter.js +3 -3
  218. package/build/core/server/adapters/TemplateServerAdapter.js.map +1 -1
  219. package/build/core/server/connectionResolver.d.ts.map +1 -1
  220. package/build/core/server/connectionResolver.js +7 -13
  221. package/build/core/server/connectionResolver.js.map +1 -1
  222. package/build/core/server/pidFileManager.js +6 -6
  223. package/build/core/server/pidFileManager.js.map +1 -1
  224. package/build/core/server/runtimeControl.d.ts.map +1 -1
  225. package/build/core/server/runtimeControl.js +5 -1
  226. package/build/core/server/runtimeControl.js.map +1 -1
  227. package/build/core/server/runtimeLaunchIpc.d.ts +1 -1
  228. package/build/core/server/runtimeLifecycle.js +2 -2
  229. package/build/core/server/runtimeLifecycle.js.map +1 -1
  230. package/build/core/server/runtimeReplacementConfig.d.ts +1 -1
  231. package/build/core/server/runtimeReplacementConfig.d.ts.map +1 -1
  232. package/build/core/server/runtimeReplacementConfig.js +1 -0
  233. package/build/core/server/runtimeReplacementConfig.js.map +1 -1
  234. package/build/core/server/runtimeScopeOwnership.d.ts +3 -1
  235. package/build/core/server/runtimeScopeOwnership.d.ts.map +1 -1
  236. package/build/core/server/runtimeScopeOwnership.js +2 -2
  237. package/build/core/server/runtimeScopeOwnership.js.map +1 -1
  238. package/build/core/server/staleCooperativeRuntime.d.ts +13 -0
  239. package/build/core/server/staleCooperativeRuntime.d.ts.map +1 -0
  240. package/build/core/server/staleCooperativeRuntime.js +91 -0
  241. package/build/core/server/staleCooperativeRuntime.js.map +1 -0
  242. package/build/core/server/templateConfigurationManager.js +16 -15
  243. package/build/core/server/templateConfigurationManager.js.map +1 -1
  244. package/build/core/tools/handlers/registryHandler.d.ts.map +1 -1
  245. package/build/core/tools/handlers/registryHandler.js +2 -6
  246. package/build/core/tools/handlers/registryHandler.js.map +1 -1
  247. package/build/core/tools/handlers/searchHandler.js +2 -2
  248. package/build/core/tools/handlers/searchHandler.js.map +1 -1
  249. package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -1
  250. package/build/core/tools/handlers/serverManagementHandler.js +11 -20
  251. package/build/core/tools/handlers/serverManagementHandler.js.map +1 -1
  252. package/build/core/tools/handlers/showHandler.js +2 -2
  253. package/build/core/tools/handlers/showHandler.js.map +1 -1
  254. package/build/core/tools/handlers/versionsHandler.js +2 -2
  255. package/build/core/tools/handlers/versionsHandler.js.map +1 -1
  256. package/build/core/tools/internal/adapters/discoveryAdapter.d.ts.map +1 -1
  257. package/build/core/tools/internal/adapters/discoveryAdapter.js +12 -29
  258. package/build/core/tools/internal/adapters/discoveryAdapter.js.map +1 -1
  259. package/build/core/tools/internal/adapters/installation/directInstallation.d.ts.map +1 -1
  260. package/build/core/tools/internal/adapters/installation/directInstallation.js +4 -6
  261. package/build/core/tools/internal/adapters/installation/directInstallation.js.map +1 -1
  262. package/build/core/tools/internal/adapters/installation/packageResolver.d.ts.map +1 -1
  263. package/build/core/tools/internal/adapters/installation/packageResolver.js +8 -14
  264. package/build/core/tools/internal/adapters/installation/packageResolver.js.map +1 -1
  265. package/build/core/tools/internal/adapters/installationAdapter.d.ts.map +1 -1
  266. package/build/core/tools/internal/adapters/installationAdapter.js +38 -35
  267. package/build/core/tools/internal/adapters/installationAdapter.js.map +1 -1
  268. package/build/core/tools/internal/adapters/management/managementAdapter.d.ts +1 -1
  269. package/build/core/tools/internal/adapters/management/managementAdapter.d.ts.map +1 -1
  270. package/build/core/tools/internal/adapters/management/managementAdapter.js +22 -28
  271. package/build/core/tools/internal/adapters/management/managementAdapter.js.map +1 -1
  272. package/build/core/tools/internal/adapters/management/toolHandlers.js +10 -10
  273. package/build/core/tools/internal/adapters/management/toolHandlers.js.map +1 -1
  274. package/build/core/tools/internal/adapters/management/validation.d.ts.map +1 -1
  275. package/build/core/tools/internal/adapters/management/validation.js +6 -3
  276. package/build/core/tools/internal/adapters/management/validation.js.map +1 -1
  277. package/build/core/tools/internal/discoveryHandlers.d.ts.map +1 -1
  278. package/build/core/tools/internal/discoveryHandlers.js +10 -25
  279. package/build/core/tools/internal/discoveryHandlers.js.map +1 -1
  280. package/build/core/tools/internal/index.js +3 -3
  281. package/build/core/tools/internal/index.js.map +1 -1
  282. package/build/core/tools/internal/installationHandlers.d.ts.map +1 -1
  283. package/build/core/tools/internal/installationHandlers.js +9 -27
  284. package/build/core/tools/internal/installationHandlers.js.map +1 -1
  285. package/build/core/tools/internal/managementHandlers.d.ts.map +1 -1
  286. package/build/core/tools/internal/managementHandlers.js +10 -25
  287. package/build/core/tools/internal/managementHandlers.js.map +1 -1
  288. package/build/core/tools/internal/schemas/discovery.d.ts +1 -1
  289. package/build/core/tools/internal/schemas/index.d.ts +7 -7
  290. package/build/core/tools/internal/schemas/installation.d.ts +1 -1
  291. package/build/core/tools/internal/schemas/management.d.ts +5 -5
  292. package/build/core/types/server.d.ts +6 -1
  293. package/build/core/types/server.d.ts.map +1 -1
  294. package/build/core/types/transport.d.ts +1 -1
  295. package/build/core/validation/schemaBoundary.d.ts +10 -1
  296. package/build/core/validation/schemaBoundary.d.ts.map +1 -1
  297. package/build/core/validation/schemaBoundary.js +24 -2
  298. package/build/core/validation/schemaBoundary.js.map +1 -1
  299. package/build/core/validation/schemaWorker.js +5 -1
  300. package/build/core/validation/schemaWorker.js.map +1 -1
  301. package/build/domains/admin/runtimeScopeAdminLock.js +2 -3
  302. package/build/domains/admin/runtimeScopeAdminLock.js.map +1 -1
  303. package/build/domains/backend-logs/backendLogBroker.d.ts +2 -0
  304. package/build/domains/backend-logs/backendLogBroker.d.ts.map +1 -1
  305. package/build/domains/backend-logs/backendLogBroker.js +7 -0
  306. package/build/domains/backend-logs/backendLogBroker.js.map +1 -1
  307. package/build/domains/backend-logs/backendLogProjection.d.ts.map +1 -1
  308. package/build/domains/backend-logs/backendLogProjection.js +2 -13
  309. package/build/domains/backend-logs/backendLogProjection.js.map +1 -1
  310. package/build/domains/config-change/configChange.js +3 -3
  311. package/build/domains/config-change/configChange.js.map +1 -1
  312. package/build/domains/preset/manager/presetManager.d.ts.map +1 -1
  313. package/build/domains/preset/manager/presetManager.js +29 -66
  314. package/build/domains/preset/manager/presetManager.js.map +1 -1
  315. package/build/domains/preset/manager/presetManagerCleanup.js +8 -8
  316. package/build/domains/preset/manager/presetManagerCleanup.js.map +1 -1
  317. package/build/domains/preset/manager/presetTesting.js +1 -7
  318. package/build/domains/preset/manager/presetTesting.js.map +1 -1
  319. package/build/domains/preset/services/presetNotificationService.d.ts.map +1 -1
  320. package/build/domains/preset/services/presetNotificationService.js +15 -32
  321. package/build/domains/preset/services/presetNotificationService.js.map +1 -1
  322. package/build/domains/registry/cacheManager.d.ts.map +1 -1
  323. package/build/domains/registry/cacheManager.js +5 -6
  324. package/build/domains/registry/cacheManager.js.map +1 -1
  325. package/build/domains/registry/mcpRegistryClient.js +11 -11
  326. package/build/domains/registry/mcpRegistryClient.js.map +1 -1
  327. package/build/domains/server-management/progressTrackingService.d.ts.map +1 -1
  328. package/build/domains/server-management/progressTrackingService.js +7 -10
  329. package/build/domains/server-management/progressTrackingService.js.map +1 -1
  330. package/build/domains/server-management/serverInstallationService.d.ts.map +1 -1
  331. package/build/domains/server-management/serverInstallationService.js +14 -12
  332. package/build/domains/server-management/serverInstallationService.js.map +1 -1
  333. package/build/gateway/adapters/legacy/legacyInboundEraAdapter.d.ts.map +1 -1
  334. package/build/gateway/adapters/legacy/legacyInboundEraAdapter.js +2 -1
  335. package/build/gateway/adapters/legacy/legacyInboundEraAdapter.js.map +1 -1
  336. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.d.ts +4 -1
  337. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.d.ts.map +1 -1
  338. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.js +4 -1
  339. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.js.map +1 -1
  340. package/build/gateway/adapters/modern/modernInboundEraAdapter.d.ts.map +1 -1
  341. package/build/gateway/adapters/modern/modernInboundEraAdapter.js +2 -1
  342. package/build/gateway/adapters/modern/modernInboundEraAdapter.js.map +1 -1
  343. package/build/gateway/adapters/modern/modernOutboundEraAdapter.d.ts.map +1 -1
  344. package/build/gateway/adapters/modern/modernOutboundEraAdapter.js +14 -5
  345. package/build/gateway/adapters/modern/modernOutboundEraAdapter.js.map +1 -1
  346. package/build/gateway/contracts/gatewayRequest.d.ts +6 -6
  347. package/build/gateway/contracts/immutableJson.d.ts +2 -1
  348. package/build/gateway/contracts/immutableJson.d.ts.map +1 -1
  349. package/build/gateway/contracts/immutableJson.js +2 -2
  350. package/build/gateway/contracts/immutableJson.js.map +1 -1
  351. package/build/gateway/core/gatewayDispatcher.js +1 -1
  352. package/build/gateway/core/gatewayDispatcher.js.map +1 -1
  353. package/build/gateway/interactions/interactionBroker.d.ts.map +1 -1
  354. package/build/gateway/interactions/interactionBroker.js +5 -3
  355. package/build/gateway/interactions/interactionBroker.js.map +1 -1
  356. package/build/gateway/interactions/interactionRoute.d.ts.map +1 -1
  357. package/build/gateway/interactions/interactionRoute.js +5 -1
  358. package/build/gateway/interactions/interactionRoute.js.map +1 -1
  359. package/build/gateway/ports/outboundEraAdapter.d.ts +3 -0
  360. package/build/gateway/ports/outboundEraAdapter.d.ts.map +1 -1
  361. package/build/index.d.ts +1 -3
  362. package/build/index.d.ts.map +1 -1
  363. package/build/index.js +7 -131
  364. package/build/index.js.map +1 -1
  365. package/build/logger/backgroundSupervisorLogger.d.ts +4 -0
  366. package/build/logger/backgroundSupervisorLogger.d.ts.map +1 -0
  367. package/build/logger/backgroundSupervisorLogger.js +21 -0
  368. package/build/logger/backgroundSupervisorLogger.js.map +1 -0
  369. package/build/logger/logger.d.ts +32 -37
  370. package/build/logger/logger.d.ts.map +1 -1
  371. package/build/logger/logger.js +106 -154
  372. package/build/logger/logger.js.map +1 -1
  373. package/build/logger/secureLogger.d.ts +3 -9
  374. package/build/logger/secureLogger.d.ts.map +1 -1
  375. package/build/logger/secureLogger.js +4 -30
  376. package/build/logger/secureLogger.js.map +1 -1
  377. package/build/observability/events/normalize.d.ts +14 -0
  378. package/build/observability/events/normalize.d.ts.map +1 -0
  379. package/build/observability/events/normalize.js +39 -0
  380. package/build/observability/events/normalize.js.map +1 -0
  381. package/build/observability/events/registry.d.ts +5583 -0
  382. package/build/observability/events/registry.d.ts.map +1 -0
  383. package/build/observability/events/registry.js +5587 -0
  384. package/build/observability/events/registry.js.map +1 -0
  385. package/build/observability/privacy/fields.d.ts +23 -0
  386. package/build/observability/privacy/fields.d.ts.map +1 -0
  387. package/build/observability/privacy/fields.js +172 -0
  388. package/build/observability/privacy/fields.js.map +1 -0
  389. package/build/observability/tracing/bootstrap.d.ts +3 -0
  390. package/build/observability/tracing/bootstrap.d.ts.map +1 -0
  391. package/build/observability/tracing/bootstrap.js +6 -0
  392. package/build/observability/tracing/bootstrap.js.map +1 -0
  393. package/build/observability/tracing/context.d.ts +4 -0
  394. package/build/observability/tracing/context.d.ts.map +1 -0
  395. package/build/observability/tracing/context.js +3 -0
  396. package/build/observability/tracing/context.js.map +1 -0
  397. package/build/observability/tracing/otelAdapter.d.ts +17 -0
  398. package/build/observability/tracing/otelAdapter.d.ts.map +1 -0
  399. package/build/observability/tracing/otelAdapter.js +160 -0
  400. package/build/observability/tracing/otelAdapter.js.map +1 -0
  401. package/build/sdk/contracts/jsonValue.d.ts +30 -7
  402. package/build/sdk/contracts/jsonValue.d.ts.map +1 -1
  403. package/build/sdk/contracts/jsonValue.js +37 -9
  404. package/build/sdk/contracts/jsonValue.js.map +1 -1
  405. package/build/sdk/legacy/auth/sdkOAuthClientProvider.d.ts.map +1 -1
  406. package/build/sdk/legacy/auth/sdkOAuthClientProvider.js +5 -5
  407. package/build/sdk/legacy/auth/sdkOAuthClientProvider.js.map +1 -1
  408. package/build/sdk/legacy/auth/sdkOAuthServerProvider.d.ts.map +1 -1
  409. package/build/sdk/legacy/auth/sdkOAuthServerProvider.js +17 -30
  410. package/build/sdk/legacy/auth/sdkOAuthServerProvider.js.map +1 -1
  411. package/build/sdk/legacy/client/runtime/clientManager.d.ts.map +1 -1
  412. package/build/sdk/legacy/client/runtime/clientManager.js +39 -92
  413. package/build/sdk/legacy/client/runtime/clientManager.js.map +1 -1
  414. package/build/sdk/legacy/client/runtime/connectionHandler.d.ts.map +1 -1
  415. package/build/sdk/legacy/client/runtime/connectionHandler.js +7 -11
  416. package/build/sdk/legacy/client/runtime/connectionHandler.js.map +1 -1
  417. package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.d.ts.map +1 -1
  418. package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.js +12 -10
  419. package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.js.map +1 -1
  420. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.d.ts +7 -0
  421. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.d.ts.map +1 -1
  422. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.js +144 -1
  423. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.js.map +1 -1
  424. package/build/sdk/legacy/client/runtime/modernSubscriptions.d.ts +43 -0
  425. package/build/sdk/legacy/client/runtime/modernSubscriptions.d.ts.map +1 -0
  426. package/build/sdk/legacy/client/runtime/modernSubscriptions.js +186 -0
  427. package/build/sdk/legacy/client/runtime/modernSubscriptions.js.map +1 -0
  428. package/build/sdk/legacy/client/runtime/oauthFlowHandler.js +6 -6
  429. package/build/sdk/legacy/client/runtime/oauthFlowHandler.js.map +1 -1
  430. package/build/sdk/legacy/client/runtime/serveClient.js +1 -1
  431. package/build/sdk/legacy/client/runtime/serveClient.js.map +1 -1
  432. package/build/sdk/legacy/commands/serve.d.ts +1 -0
  433. package/build/sdk/legacy/commands/serve.d.ts.map +1 -1
  434. package/build/sdk/legacy/commands/serve.js +73 -88
  435. package/build/sdk/legacy/commands/serve.js.map +1 -1
  436. package/build/sdk/legacy/server/auth/requestAuthRevalidation.d.ts +5 -0
  437. package/build/sdk/legacy/server/auth/requestAuthRevalidation.d.ts.map +1 -0
  438. package/build/sdk/legacy/server/auth/requestAuthRevalidation.js +19 -0
  439. package/build/sdk/legacy/server/auth/requestAuthRevalidation.js.map +1 -0
  440. package/build/sdk/legacy/server/protocol/notificationHandlers.d.ts +1 -1
  441. package/build/sdk/legacy/server/protocol/notificationHandlers.d.ts.map +1 -1
  442. package/build/sdk/legacy/server/protocol/notificationHandlers.js +42 -41
  443. package/build/sdk/legacy/server/protocol/notificationHandlers.js.map +1 -1
  444. package/build/sdk/legacy/server/protocol/promptRequestHandlers.d.ts.map +1 -1
  445. package/build/sdk/legacy/server/protocol/promptRequestHandlers.js +12 -2
  446. package/build/sdk/legacy/server/protocol/promptRequestHandlers.js.map +1 -1
  447. package/build/sdk/legacy/server/protocol/requestHandlers.js +4 -4
  448. package/build/sdk/legacy/server/protocol/requestHandlers.js.map +1 -1
  449. package/build/sdk/legacy/server/protocol/requestInteractionScope.d.ts.map +1 -1
  450. package/build/sdk/legacy/server/protocol/requestInteractionScope.js +6 -2
  451. package/build/sdk/legacy/server/protocol/requestInteractionScope.js.map +1 -1
  452. package/build/sdk/legacy/server/protocol/resourceRequestHandlers.d.ts.map +1 -1
  453. package/build/sdk/legacy/server/protocol/resourceRequestHandlers.js +18 -13
  454. package/build/sdk/legacy/server/protocol/resourceRequestHandlers.js.map +1 -1
  455. package/build/sdk/legacy/server/protocol/resourceSubscriptions.d.ts +27 -0
  456. package/build/sdk/legacy/server/protocol/resourceSubscriptions.d.ts.map +1 -0
  457. package/build/sdk/legacy/server/protocol/resourceSubscriptions.js +594 -0
  458. package/build/sdk/legacy/server/protocol/resourceSubscriptions.js.map +1 -0
  459. package/build/sdk/legacy/server/protocol/toolRequestHandlers.d.ts.map +1 -1
  460. package/build/sdk/legacy/server/protocol/toolRequestHandlers.js +22 -7
  461. package/build/sdk/legacy/server/protocol/toolRequestHandlers.js.map +1 -1
  462. package/build/sdk/legacy/server/runtime/clientInstancePool.d.ts.map +1 -1
  463. package/build/sdk/legacy/server/runtime/clientInstancePool.js +30 -89
  464. package/build/sdk/legacy/server/runtime/clientInstancePool.js.map +1 -1
  465. package/build/sdk/legacy/server/runtime/connectionManager.d.ts.map +1 -1
  466. package/build/sdk/legacy/server/runtime/connectionManager.js +76 -23
  467. package/build/sdk/legacy/server/runtime/connectionManager.js.map +1 -1
  468. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.d.ts +14 -0
  469. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.d.ts.map +1 -1
  470. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.js +125 -10
  471. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.js.map +1 -1
  472. package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.d.ts.map +1 -1
  473. package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.js +13 -30
  474. package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.js.map +1 -1
  475. package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.d.ts.map +1 -1
  476. package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.js +33 -42
  477. package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.js.map +1 -1
  478. package/build/sdk/legacy/server/runtime/serverManager.d.ts.map +1 -1
  479. package/build/sdk/legacy/server/runtime/serverManager.js +28 -33
  480. package/build/sdk/legacy/server/runtime/serverManager.js.map +1 -1
  481. package/build/sdk/legacy/server/runtime/templateServerCleanup.d.ts.map +1 -1
  482. package/build/sdk/legacy/server/runtime/templateServerCleanup.js +15 -43
  483. package/build/sdk/legacy/server/runtime/templateServerCleanup.js.map +1 -1
  484. package/build/sdk/legacy/server/runtime/templateServerManager.d.ts.map +1 -1
  485. package/build/sdk/legacy/server/runtime/templateServerManager.js +21 -47
  486. package/build/sdk/legacy/server/runtime/templateServerManager.js.map +1 -1
  487. package/build/sdk/legacy/shared/capabilityListCapture.d.ts +2 -2
  488. package/build/sdk/legacy/shared/capabilityListCapture.d.ts.map +1 -1
  489. package/build/sdk/legacy/shared/capabilityListCapture.js +3 -3
  490. package/build/sdk/legacy/shared/capabilityListCapture.js.map +1 -1
  491. package/build/sdk/legacy/shared/schemaProjection.d.ts +3 -1
  492. package/build/sdk/legacy/shared/schemaProjection.d.ts.map +1 -1
  493. package/build/sdk/legacy/shared/schemaProjection.js +7 -2
  494. package/build/sdk/legacy/shared/schemaProjection.js.map +1 -1
  495. package/build/sdk/legacy/transport/http/loggingSseTransport.d.ts.map +1 -1
  496. package/build/sdk/legacy/transport/http/loggingSseTransport.js +2 -11
  497. package/build/sdk/legacy/transport/http/loggingSseTransport.js.map +1 -1
  498. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.d.ts +2 -0
  499. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
  500. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.js +9 -15
  501. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
  502. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.d.ts +9 -0
  503. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.d.ts.map +1 -1
  504. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.js +87 -8
  505. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.js.map +1 -1
  506. package/build/sdk/legacy/transport/http/routes/sseRoutes.js +5 -5
  507. package/build/sdk/legacy/transport/http/routes/sseRoutes.js.map +1 -1
  508. package/build/sdk/legacy/transport/http/server.d.ts.map +1 -1
  509. package/build/sdk/legacy/transport/http/server.js +4 -5
  510. package/build/sdk/legacy/transport/http/server.js.map +1 -1
  511. package/build/sdk/legacy/transport/http/streamableSessionLifecycle.d.ts.map +1 -1
  512. package/build/sdk/legacy/transport/http/streamableSessionLifecycle.js +28 -45
  513. package/build/sdk/legacy/transport/http/streamableSessionLifecycle.js.map +1 -1
  514. package/build/sdk/legacy/transport/restartableStdioTransport.d.ts.map +1 -1
  515. package/build/sdk/legacy/transport/restartableStdioTransport.js +8 -11
  516. package/build/sdk/legacy/transport/restartableStdioTransport.js.map +1 -1
  517. package/build/sdk/legacy/transport/stdioProxyTransport.d.ts.map +1 -1
  518. package/build/sdk/legacy/transport/stdioProxyTransport.js +28 -36
  519. package/build/sdk/legacy/transport/stdioProxyTransport.js.map +1 -1
  520. package/build/sdk/legacy/transport/transportFactory.d.ts +1 -1
  521. package/build/sdk/legacy/transport/transportFactory.d.ts.map +1 -1
  522. package/build/sdk/legacy/transport/transportFactory.js +19 -28
  523. package/build/sdk/legacy/transport/transportFactory.js.map +1 -1
  524. package/build/server.d.ts.map +1 -1
  525. package/build/server.js +19 -24
  526. package/build/server.js.map +1 -1
  527. package/build/transport/http/middlewares/errorHandler.js +1 -1
  528. package/build/transport/http/middlewares/errorHandler.js.map +1 -1
  529. package/build/transport/http/middlewares/httpRequestLogger.d.ts +1 -13
  530. package/build/transport/http/middlewares/httpRequestLogger.d.ts.map +1 -1
  531. package/build/transport/http/middlewares/httpRequestLogger.js +3 -28
  532. package/build/transport/http/middlewares/httpRequestLogger.js.map +1 -1
  533. package/build/transport/http/middlewares/mcpAvailabilityMiddleware.d.ts.map +1 -1
  534. package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js +8 -20
  535. package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js.map +1 -1
  536. package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -1
  537. package/build/transport/http/middlewares/securityMiddleware.js +7 -38
  538. package/build/transport/http/middlewares/securityMiddleware.js.map +1 -1
  539. package/build/transport/http/middlewares/tagsExtractor.js +2 -2
  540. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
  541. package/build/transport/http/routes/cliTokenRoute.js +1 -1
  542. package/build/transport/http/routes/cliTokenRoute.js.map +1 -1
  543. package/build/transport/http/routes/healthRoutes.js +6 -6
  544. package/build/transport/http/routes/healthRoutes.js.map +1 -1
  545. package/build/transport/http/routes/inspectRoutes.js +3 -3
  546. package/build/transport/http/routes/inspectRoutes.js.map +1 -1
  547. package/build/transport/http/routes/instructionsRoutes.js +1 -1
  548. package/build/transport/http/routes/instructionsRoutes.js.map +1 -1
  549. package/build/transport/http/routes/modernHttpRoutes.d.ts +11 -10
  550. package/build/transport/http/routes/modernHttpRoutes.d.ts.map +1 -1
  551. package/build/transport/http/routes/modernHttpRoutes.js +29 -5
  552. package/build/transport/http/routes/modernHttpRoutes.js.map +1 -1
  553. package/build/transport/http/routes/modernSubscriptions.d.ts +21 -0
  554. package/build/transport/http/routes/modernSubscriptions.d.ts.map +1 -0
  555. package/build/transport/http/routes/modernSubscriptions.js +425 -0
  556. package/build/transport/http/routes/modernSubscriptions.js.map +1 -0
  557. package/build/transport/http/routes/oauthRoutes.js +7 -7
  558. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  559. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  560. package/build/transport/http/routes/streamableHttpRoutes.js +11 -21
  561. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  562. package/build/transport/http/routes/toolRoutes.js +7 -7
  563. package/build/transport/http/routes/toolRoutes.js.map +1 -1
  564. package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -1
  565. package/build/transport/http/storage/streamableSessionRepository.js +21 -36
  566. package/build/transport/http/storage/streamableSessionRepository.js.map +1 -1
  567. package/build/transport/http/utils/contextExtractor.d.ts.map +1 -1
  568. package/build/transport/http/utils/contextExtractor.js +6 -6
  569. package/build/transport/http/utils/contextExtractor.js.map +1 -1
  570. package/build/transport/http/utils/httpErrorHandler.d.ts +1 -1
  571. package/build/transport/http/utils/httpErrorHandler.d.ts.map +1 -1
  572. package/build/transport/http/utils/httpErrorHandler.js +5 -19
  573. package/build/transport/http/utils/httpErrorHandler.js.map +1 -1
  574. package/build/transport/http/utils/templateContextAuthority.d.ts.map +1 -1
  575. package/build/transport/http/utils/templateContextAuthority.js +6 -21
  576. package/build/transport/http/utils/templateContextAuthority.js.map +1 -1
  577. package/build/transport/http/utils/unifiedLogger.d.ts +10 -50
  578. package/build/transport/http/utils/unifiedLogger.d.ts.map +1 -1
  579. package/build/transport/http/utils/unifiedLogger.js +9 -77
  580. package/build/transport/http/utils/unifiedLogger.js.map +1 -1
  581. package/build/transport/managedStdioStderr.d.ts.map +1 -1
  582. package/build/transport/managedStdioStderr.js +2 -6
  583. package/build/transport/managedStdioStderr.js.map +1 -1
  584. package/build/utils/core/errorHandling.js +1 -1
  585. package/build/utils/core/errorHandling.js.map +1 -1
  586. package/build/utils/core/operationExecution.js +2 -2
  587. package/build/utils/core/operationExecution.js.map +1 -1
  588. package/build/utils/filePermissions.d.ts.map +1 -1
  589. package/build/utils/filePermissions.js +6 -6
  590. package/build/utils/filePermissions.js.map +1 -1
  591. package/build/utils/ui/interactiveSelector.js +1 -1
  592. package/build/utils/ui/interactiveSelector.js.map +1 -1
  593. package/build/utils/ui/urlGenerator.d.ts.map +1 -1
  594. package/build/utils/ui/urlGenerator.js +6 -10
  595. package/build/utils/ui/urlGenerator.js.map +1 -1
  596. package/build/utils/validation/scopeValidation.d.ts.map +1 -1
  597. package/build/utils/validation/scopeValidation.js +4 -12
  598. package/build/utils/validation/scopeValidation.js.map +1 -1
  599. package/build/utils/validation/urlDetection.js +4 -4
  600. package/build/utils/validation/urlDetection.js.map +1 -1
  601. package/package.json +8 -3
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/admin-AboutRuntimeWorkspace-DH2QC2nJ.js","assets/admin-mantine-xwbfu5Gd.js","assets/admin-rolldown-runtime-Bh1tDfsg.js","assets/admin-react-BSaWeqgv.js","assets/admin-console-DmRyrCWD.css","assets/admin-BackendLogsWorkspace-BKavXT9B.js","assets/admin-icons-CYGTDZA5.js","assets/admin-InstructionTemplatesWorkspace-CvG4EPdZ.js","assets/admin-OAuthServicesWorkspace-CcUSZCNL.js","assets/admin-PresetAuthoringWorkspace-BboJVBFl.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./admin-rolldown-runtime-Bh1tDfsg.js";import{A as t,D as n,E as r,F as i,I as a,L as o,N as s,O as c,P as l,S as u,T as d,_ as f,a as p,b as m,c as h,d as g,f as _,g as v,h as y,j as b,k as x,l as S,m as C,n as w,o as T,p as E,r as D,s as O,t as k,u as A,v as j,w as M,x as ee,y as N}from"./admin-mantine-xwbfu5Gd.js";import{i as te,n as P,r as F,t as ne}from"./admin-react-BSaWeqgv.js";import{a as I,c as L,i as R,l as z,n as B,o as V,r as H,s as U,t as W}from"./admin-vendor-62eL-qdH.js";import{C as G,E as K,M as re,N as ie,O as ae,S as oe,_ as q,a as se,b as ce,c as le,d as ue,h as de,i as fe,j as pe,k as me,l as he,m as ge,n as _e,o as ve,p as ye,r as be,s as xe,t as Se,u as Ce,v as we,w as Te,x as Ee,y as De}from"./admin-icons-CYGTDZA5.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Oe=ne(),ke=V({type:R(`configured_server`),id:U(),source:W([`mcpServers`,`mcpTemplates`])}).passthrough(),Ae=V({status:U(),operation:U(),configPath:U().optional(),target:V({name:U(),source:U()}).passthrough(),changed:H(),backup:V({created:H(),path:U().optional()}).passthrough(),retentionCleanup:V({attempted:H(),deletedPaths:B(U()),warnings:B(U())}).passthrough(),reload:V({status:U(),error:U().optional(),before:z().optional(),after:z().optional()}).passthrough(),warnings:B(U()).optional(),error:U().optional()}).passthrough(),je=V({activeInstancesBefore:I(),retiredInstances:I(),activeInstancesAfter:I(),retirementObserved:H(),error:U().optional()}).passthrough(),Me=V({ok:R(!0),operationId:U(),preview:V({target:ke,qualifiedId:U(),targetFingerprint:U(),previewFingerprint:U(),current:V({enabled:H(),disabledValueKind:W([`absent`,`literal`,`context_expression`])}).passthrough(),proposed:V({enabled:H(),disabledValueKind:W([`absent`,`literal`])}).passthrough(),expressionReplacement:V({occurs:H(),replacement:W([`disabled_true`,`enabled_absent`])}).passthrough(),configChange:Ae,expectedBackup:V({policy:R(`required`),recoveryCopy:R(!0)}).passthrough(),expectedReload:V({policy:R(`observe_after_write`),possibleStatuses:L([R(`observed`),R(`runtime_not_running`),R(`reload_disabled`),R(`failed`)])}).passthrough(),runtimeImpact:V({activeInstanceCount:I(),retirement:W([`after_successful_reload`,`not_required`]),recreation:R(`lazy_future_match_only`)}).passthrough(),warnings:B(U())}).passthrough()}).passthrough(),Ne=V({ok:R(!0),operationId:U(),result:V({target:ke,qualifiedId:U(),previewFingerprint:U(),enabled:H(),outcome:W([`enabled`,`disabled`,`already_enabled`,`already_disabled`]),configChange:Ae,runtimeImpact:je}).passthrough()}).passthrough(),J=class extends Error{status;body;failure;constructor(e,t,n,r){super(n),this.status=e,this.body=t,this.name=`AdminApiError`,this.failure=r??Fe(this)}};function Pe(e,t){try{return e.parse(t)}catch{let e=`The runtime returned an invalid configured-server lifecycle response.`;throw new J(502,{},e,{kind:`unavailable`,message:e})}}function Fe(e){let t=Ye(e),n=Xe(e.body),r=n?`${Ze(e,t)} Request ID: ${n}`:Ze(e,t);return e.status===401?{kind:`unauthenticated`,adminStatus:Je(e.body),code:t,message:r,requestId:n,status:401}:e.status===404&&t===`configured_server_not_found`?{kind:`configuredServerNotFound`,code:t,message:r,requestId:n,status:404}:{kind:`rejected`,code:t,message:r,requestId:n,status:e.status}}function Ie(e={}){let t=Ge(e.fetch??fetch),n=e.idempotencyKey??$e,r=e.eventSource??(e=>new EventSource(e));return{login(e){return t(`/admin/api/session/login`,{method:`POST`,body:JSON.stringify(e)})},getSession(){return t(`/admin/api/session`)},logout(e){return t(`/admin/api/session/logout`,{method:`POST`,headers:{"X-CSRF-Token":e}})},getStatus(){return t(`/admin/api/status`)},getBackendLogSnapshot(e){let n=e?`?sourceId=${encodeURIComponent(e)}`:``;return t(`/admin/api/logs/snapshot${n}`)},openBackendLogStream(e){let t=t=>{try{return JSON.parse(t.data)}catch{e.onError();return}},n=r(`/admin/api/logs/stream`);return n.addEventListener(`snapshot`,n=>{let r=t(n);r&&e.onSnapshot(r)}),n.addEventListener(`gap`,n=>{let r=t(n);r&&e.onGap(r)}),n.addEventListener(`entry`,n=>{let r=t(n);r&&e.onEntry(r)}),n.addEventListener(`sources`,n=>{let r=t(n);r&&e.onSources(r)}),n.addEventListener(`source`,n=>{let r=t(n);r&&e.onSourceUpdate(r)}),n.onopen=()=>e.onOpen(),n.onerror=()=>e.onError(),()=>n.close()},async authorizeOAuthService(e){return(await t(`/admin/api/oauth/${encodeURIComponent(e.serviceId)}/authorize`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":n({action:`oauth-authorize`,targetName:e.serviceId})},body:`{}`})).result},async restartOAuthService(e){return(await t(`/admin/api/oauth/${encodeURIComponent(e.serviceId)}/restart`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":n({action:`oauth-restart`,targetName:e.serviceId})},body:`{}`})).result},async listPresets(){return(await t(`/admin/api/presets`)).result},async getPreset(e){return(await t(`/admin/api/presets/${encodeURIComponent(e)}`)).result},async previewPreset(e){return(await t(`/admin/api/presets/preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({draft:e.draft,sourceName:e.sourceName})})).result},mutatePreset(e){let n=e.action===`create`?`/admin/api/presets`:`/admin/api/presets/${encodeURIComponent(e.sourceName??``)}/${e.action===`duplicate`?`duplicate`:`update`}`;return t(n,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":We(e.action,e.draft.name)},body:JSON.stringify({draft:e.draft,revision:e.revision,previewFingerprint:e.previewFingerprint,confirmationFacts:e.confirmations})})},async previewPresetDelete(e){return(await t(`/admin/api/presets/${encodeURIComponent(e.name)}/delete-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({revision:e.revision})})).result},deletePreset(e){return t(`/admin/api/presets/${encodeURIComponent(e.name)}`,{method:`DELETE`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":We(`delete`,e.name)},body:JSON.stringify({revision:e.revision,previewFingerprint:e.previewFingerprint,confirmationFacts:{previewConfirmed:e.previewFingerprint,presetNameConfirmed:e.name}})})},async getConfiguredServerCatalog(){let e=await t(`/admin/api/configured-servers`);return{servers:e.servers??[],configFingerprint:e.configFingerprint??``}},async listConfiguredServers(){return(await t(`/admin/api/configured-servers`)).servers??[]},getConfiguredServerCreateContract(){return t(`/admin/api/configured-servers/create-contract`)},previewConfiguredServerCreate(e){return t(`/admin/api/configured-servers/create-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({draft:e.draft,...e.connectivityCheck?{connectivityCheck:e.connectivityCheck}:{}})})},createConfiguredServer(e){return t(`/admin/api/configured-servers`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({draft:e.draft,previewFingerprint:e.previewFingerprint,confirmationFacts:e.confirmationFacts})})},getConfiguredServerDetail(e,n){let r=n?`?model=${encodeURIComponent(n)}`:``;return t(`${Re(e)}${r}`)},refreshConfiguredToolInventory(e){return t(`${Re(e.target)}/tool-inventory/refresh`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify(e.model?{model:e.model}:{})})},async listInstructionTemplates(){return(await t(`/admin/api/instruction-templates`)).result},async getInstructionTemplate(e){return(await t(Le(e))).result},saveInstructionTemplate(e){let n=e.action===`create`?`/admin/api/instruction-templates`:`${Le(e.draft.identity)}/update`;return t(n,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({...e.action===`create`?{identity:e.draft.identity}:{},variants:e.draft.variants,...e.expectedConfigFingerprint?{expectedConfigFingerprint:e.expectedConfigFingerprint}:{}})})},cloneInstructionTemplate(e){return t(`${Le(e.sourceIdentity)}/clone`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({identity:e.identity,expectedConfigFingerprint:e.expectedConfigFingerprint})})},async validateInstructionTemplate(e){return(await t(`${Le(e.identity)}/validate`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint})})).result},async previewInstructionTemplate(e){return(await t(`${Le(e.identity)}/preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({surface:e.surface,selection:e.selection,...e.requestContext?{requestContext:e.requestContext}:{}})})).result},activateInstructionTemplate(e){return t(`${Le(e.identity)}/activate`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint,previewFingerprint:e.previewFingerprint})})},importLegacyInstructionTemplate(e){return t(`/admin/api/instruction-templates/import-legacy`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({identity:e.identity,expectedConfigFingerprint:e.expectedConfigFingerprint})})},async previewInstructionTemplateDelete(e){return(await t(`${Le(e.identity)}/delete-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint})})).result},deleteInstructionTemplate(e){return t(Le(e.identity),{method:`DELETE`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint,previewFingerprint:e.previewFingerprint})})},previewConfiguredServerEdit(e){return t(`${Re(e.target)}/preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({edit:e.edit,...e.connectivityCheck?{connectivityCheck:e.connectivityCheck}:{},...e.model?{model:e.model}:{}})})},applyConfiguredServerEdit(e){return t(`${Re(e.target)}/apply`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({edit:e.edit,previewFingerprint:e.previewFingerprint,confirmationFacts:e.confirmationFacts,...e.model?{model:e.model}:{}})})},previewConfiguredServerDelete(e){return t(`${Re(e.target)}/delete-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:`{}`})},deleteConfiguredServer(e){return t(Re(e.target),{method:`DELETE`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({previewFingerprint:e.previewFingerprint,confirmationFacts:{previewConfirmed:e.previewFingerprint,targetIdentityConfirmed:e.confirmedIdentity}})})},previewConfiguredServerLifecycle(e){return t(`${Re(e.target)}/lifecycle-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({enabled:e.enabled})}).then(e=>Pe(Me,e))},applyConfiguredServerLifecycle(e){return t(`${Re(e.target)}/lifecycle`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({enabled:e.enabled,previewFingerprint:e.previewFingerprint,confirmationFacts:{previewConfirmed:e.previewFingerprint,targetIdentityConfirmed:`${e.target.source}/${e.target.id}`}})}).then(e=>Pe(Ne,e))},setConfiguredServerEnabled(e){let r=e.enabled?`enable`:`disable`;return t(`/admin/api/configured-servers/${encodeURIComponent(e.name)}/${r}`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":n({action:r,targetName:e.name})},body:`{}`})}}}function Le(e){return`/admin/api/instruction-templates/${encodeURIComponent(e)}`}function Re(e){return typeof e==`string`?`/admin/api/configured-servers/${encodeURIComponent(e)}`:`/admin/api/configured-servers/${e.source}/${encodeURIComponent(e.id)}`}function ze(e){return`admin-console-server-apply-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Be(e){return`admin-console-server-create-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Ve(e){return`admin-console-server-delete-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function He(e,t){return`admin-console-server-${t?`enable`:`disable`}-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Ue(e,t){return`admin-console-instruction-template-${et(e)}-${et(t)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function We(e,t){return`admin-console-preset-${e}-${et(t)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Ge(e){return async function(t,n={}){let r={"Content-Type":`application/json`,"X-Admin-UI-Build-Version":`0.39.0-beta.1`,"X-Admin-UI-Protocol-Version":`1`,...n.headers??{}},i;try{i=await e(t,{...n,headers:r})}catch{let e=`The Admin Console could not reach the runtime. Check that the runtime is still available, then refresh.`;throw new J(0,{},e,{kind:`unavailable`,message:e})}let a=await Ke(i);if(!i.ok)throw new J(i.status,a,qe(a,i.statusText));return a}}async function Ke(e){try{return await e.json()}catch{return{}}}function qe(e,t){if(e&&typeof e==`object`){let t=e;if(typeof t.error==`string`)return t.error;if(typeof t.code==`string`)return t.code;let n=t.error;if(n&&typeof n.code==`string`)return n.code}return t||`Admin API request failed`}function Je(e){return e&&typeof e==`object`&&e.adminStatus===`setupRequired`?`setupRequired`:`loginRequired`}function Ye(e){if(e.body&&typeof e.body==`object`){let t=e.body;if(typeof t.error==`string`)return t.error;if(typeof t.code==`string`)return t.code;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.code==`string`)return e.code}}return e.message}function Xe(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.requestId==`string`)return t.requestId;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.requestId==`string`)return e.requestId}return null}function Ze(e,t){switch(t){case`invalid_credentials`:return`Check the admin username and password, then try again.`;case`csrf_required`:return`Refresh the page to renew the admin session, then retry the action.`;case`admin_login_rate_limited`:return`Too many failed login attempts. Wait before trying again.`;case`idempotency_conflict`:return`This action was already retried with different inputs. Refresh the console and try again.`;case`idempotency_key_required`:return`Refresh the console and retry the action with a new request.`;case`admin_configured_servers_unavailable`:return`Configured-server operations are not available on this runtime.`;case`backend_oauth_service_not_found`:return`The OAuth service is no longer available. Refresh the OAuth status and try again.`;case`backend_oauth_runtime_unavailable`:return`Backend OAuth operations are not available on this runtime.`;case`backend_oauth_authorization_start_failed`:return`The runtime could not start backend OAuth authorization. Refresh the OAuth status and try again.`;case`mutation_failed`:return`The runtime could not apply the server change. Refresh the console and inspect the current state.`;case`configured_server_stale_preview`:return`The server changed after this preview. Preview the edit again before applying.`;case`configured_server_destination_conflict`:return`The requested server name is already in use. Choose another target name and preview again.`;case`configured_server_connectivity_blocked`:return`Connectivity validation did not pass. Fix the connection settings and rerun connectivity before applying.`;case`configured_server_edit_invalid`:return`The server edit is invalid. Review the field errors and preview again.`;case`configured_server_edit_unchanged`:return`The preview no longer contains a change. Refresh the server detail before editing again.`;case`configured_server_not_found`:return`The configured server no longer exists. Return to the inventory and refresh it.`;case`configured_server_reload_failed`:return`The configuration was written, but the runtime reload failed. Inspect runtime health before continuing.`;case`configured_server_apply_failed`:return`The server edit could not be written. Refresh the detail and inspect runtime health before retrying.`;case`operation_in_progress`:return`Another admin operation is still running. Wait for it to finish, then refresh the console.`;case`operation_state_unknown`:return`The runtime could not confirm the operation result. Refresh the console and inspect the current state before retrying.`;case`admin_operation_journal_unavailable`:return`The runtime cannot record admin operations right now. Check runtime health before retrying.`;case`runtime_scope_mismatch`:return`The runtime identity changed. Stop using this session and verify the selected runtime before retrying.`;case`mutation_confirmation_required`:return`This operation needs an explicit confirmation flow that is not available in the console yet.`;default:if(e.status===401)return`The admin session is no longer valid. Log in again.`;if(e.status===403)return`The admin session cannot perform this action. Refresh the page and try again.`;if(e.status===429)return`The runtime is rate limiting this request. Wait before trying again.`;if(t.startsWith(`configured_server_`)){let t=Qe(e.body);if(t)return t}return`The Admin Console request failed. Refresh the console and try again.`}}function Qe(e){if(!e||typeof e!=`object`)return null;let t=e.message;return typeof t==`string`&&t.trim().length>0?t.trim():null}function $e(e){let t=crypto.getRandomValues(new Uint32Array(2)).join(`-`);return`admin-console-${e.action}-${et(e.targetName)}-${Date.now()}-${t}`}function et(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}var Y=e(te(),1);function tt(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>{let t=!r||e.id.toLowerCase().includes(r)||st(e).some(e=>e.toLowerCase().includes(r))||ot(e).toLowerCase().includes(r)||at(e.transport).toLowerCase().includes(r),i=n===`all`||n===`enabled`&&e.enabled||n===`disabled`&&!e.enabled;return t&&i})}function nt(e){return e.filter(e=>e.enabled).length}function rt(e){return e.filter(e=>!e.enabled).length}function it(e){return!!e.requiresOAuth&&(e.status!==`connected`||!!e.lastError)}function at(e){return typeof e.command==`string`?e.command:typeof e.url==`string`?e.url:typeof e.type==`string`?e.type:`configured`}function ot(e){return e.transportSummary?.label??at(e.transport)}function st(e){return Array.isArray(e.tags)?e.tags:[]}function ct(e){return e.mutationAvailability?.available??!0}function lt(e,t){return e.actionState?.[t]??{available:!0,label:t===`enable`?`Enable ${e.id}`:`Disable ${e.id}`}}function ut(e){let t=e.connectivityCheck;return t.status===`skipped`?ft(t.reason):t.status===`failed`?t.message:t.checkedAt?`Checked at ${t.checkedAt}`:void 0}function dt(e){return e.status===`passed`?`Bounded dry-run connectivity check passed.`:e.status===`failed`?`Connectivity check failed. Apply remains blocked until the check passes or a later override path is available.`:`Connectivity check was skipped for this preview.`}function ft(e){switch(e){case`connection_critical_fields_unchanged`:return`Connection-critical fields are unchanged. Rerun connectivity if you want an explicit check.`;case`target_disabled`:return`Target is disabled, so automatic connectivity was skipped.`;case`validation_failed`:return`Validation failed before a connectivity check could run.`;case`local_stdio_transport`:return`Local stdio transport does not use remote connectivity checks.`;case`checker_unavailable`:return`Connectivity checker is unavailable on this runtime.`;case`endpoint_changed_with_preserved_secrets`:return`Endpoint changed while secrets stayed preserved. Supply replacements or rerun after updating secrets.`;default:return e}}function pt(e){switch(e){case`rename`:return`violet`;case`connection_critical`:return`red`;case`secret`:return`grape`;case`template_risk`:return`orange`;case`tool_visibility`:return`yellow`;case`tool_metadata`:return`blue`;default:return`gray`}}function mt(e){switch(e){case`rename`:return`rename`;case`connection_critical`:return`connection critical`;case`secret`:return`secret`;case`template_risk`:return`template risk`;case`tool_visibility`:return`tool visibility`;case`tool_metadata`:return`tool metadata`;default:return e}}function ht(e){return e.secretInputs.length===0?`No secret inputs`:`${e.secretInputs.length} redacted`}function gt(e){return e?.runtimeVersion??`unknown`}function _t(e){return e?.externalUrl??`not reported`}function vt(e){return e.view===`setupRequired`?`Setup required`:e.view}function yt(e){return e.view===`setupRequired`?`yellow`:e.view===`console`?`teal`:`gray`}function bt(e){return e.replace(/([A-Z])/g,` $1`).toLowerCase()}function xt(){return{preview:null,confirmation:``,previewBusy:!1,applyBusy:!1,error:null,result:null}}function St(e,t){switch(t.type){case`reset`:return xt();case`previewStarted`:return{...e,previewBusy:!0,error:null,result:null};case`previewSucceeded`:return{...e,preview:t.preview,confirmation:``,previewBusy:!1,error:null};case`previewFailed`:return{...e,previewBusy:!1,error:t.message};case`confirmationChanged`:return{...e,confirmation:t.value,error:null};case`applyStarted`:return{...e,applyBusy:!0,error:null};case`applySucceeded`:return{...e,preview:null,confirmation:``,applyBusy:!1,error:null,result:t.result};case`applyFailed`:return{...e,preview:t.clearPreview?null:e.preview,confirmation:t.clearPreview?``:e.confirmation,applyBusy:!1,error:t.message}}}function Ct(e){return e.configChange.reload.status!==`observed`||e.runtimeImpact?.retirementObserved===!1}function wt(e){return!!(e.preview&&!e.previewBusy&&!e.applyBusy&&e.confirmation===e.preview.qualifiedId)}var X=F();function Tt({result:e,dismiss:t}){let n=e.target.source===`mcpTemplates`?e.runtimeImpact:void 0,i=Ct(e);return(0,X.jsxs)(r,{color:i?`yellow`:`teal`,icon:i?(0,X.jsx)(_e,{size:16}):(0,X.jsx)(me,{size:16}),title:`${e.qualifiedId} deleted${i?`; recovery required`:``}`,withCloseButton:!0,closeButtonLabel:`Dismiss deletion notice`,onClose:t,role:`status`,children:[(0,X.jsx)(d,{size:`sm`,children:i?`Configuration write completed. Runtime reload status: ${e.configChange.reload.status}. Runtime reconciliation is incomplete and the runtime may still serve this target.`:`Runtime reload observed.`}),i?(0,X.jsx)(d,{size:`sm`,children:e.configChange.backup.created?`A recovery backup exists. Restore it if the deletion must be reversed.`:`No recovery backup was reported; inspect runtime and configuration state before continuing.`}):null,n?(0,X.jsxs)(d,{size:`sm`,children:[`Instances: `,n.activeInstancesBefore,` before, `,n.retiredInstances,` retired,`,` `,n.activeInstancesAfter,` active after. Retirement observed:`,` `,n.retirementObserved?`yes`:`no`,`.`]}):i?null:(0,X.jsx)(d,{size:`sm`,children:`Configured backend removal observed after reload.`})]})}function Z({label:e,value:t,meta:r,description:i,copyLabel:a,copyValue:o,onCopyText:s,wrapValue:c=!1}){let l=o??t;return(0,X.jsxs)(n,{className:`detail-row`,justify:`space-between`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{className:`detail-row-main`,children:[(0,X.jsx)(d,{fw:700,children:e}),(0,X.jsx)(d,{className:c?`detail-row-value-wrap`:`truncate`,size:`sm`,children:t}),r?(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:r}):null,i?(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:i}):null]}),a&&l!==`-`?(0,X.jsx)(m,{"aria-label":`Copy ${bt(a)}`,size:`compact-xs`,variant:`subtle`,leftSection:(0,X.jsx)(ae,{size:14}),onClick:()=>void s?.(a,l),children:`Copy`}):null]})}function Q({title:e,utility:t,icon:r,children:i}){return(0,X.jsx)(b,{component:`section`,className:`operations-panel`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`center`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[r,(0,X.jsx)(k,{order:3,children:e})]}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:t})]}),i]})})}function Et({message:e}){return(0,X.jsx)(d,{c:`dimmed`,children:e})}function Dt(e){let t=(0,Y.useRef)(e),n=(0,Y.useRef)(0),r=(0,Y.useRef)(0),i=(0,Y.useRef)(0),a=(0,Y.useRef)(!1),o=(0,Y.useRef)();return t.current=e,{loadRequestRef:n,previewRequestRef:r,applyRequestRef:i,applyInteractionRef:a,applyAttemptRef:o,invalidatePreview:(0,Y.useCallback)(()=>{r.current+=1,o.current=void 0},[]),invalidateApply:(0,Y.useCallback)(()=>{i.current+=1,o.current=void 0},[]),reset:(0,Y.useCallback)(()=>{n.current+=1,r.current+=1,i.current+=1,a.current=!1,o.current=void 0,t.current()},[])}}function Ot(e,t,n,r,i,a=[]){let o={},s={};for(let r of e)for(let e of r.fields){if(e.control===`secret`||!e.editable||e.control===`readonly`||!jt(e,i))continue;let r=$(e.fieldPath),a=Lt(e,t[r]);if(zt(a)===zt(Lt(e,n[r])))continue;let c=e.fieldPath[0];c===`id`?o.id=String(a??``):c===`enabled`?o.enabled=!!a:c===`tags`?o.tags=Mt(a):c===`transport`&&e.fieldPath.length>1?Rt(s,e.fieldPath.slice(1),a):c&&Rt(o,e.fieldPath,a)}let c=Object.values(r).filter(t=>{let n=e.flatMap(e=>e.fields).find(e=>$(e.fieldPath)===$(t.fieldPath));return!n||jt(n,i)}).filter(e=>e.action!==`preserve`).map(e=>({fieldPath:e.fieldPath,action:e.action,...e.action===`replace`?{replacement:{kind:e.replacementKind,value:e.replacementValue}}:{}}));return{...o,...Object.keys(s).length>0?{transport:s}:{},...c.length>0?{secrets:c}:{},...a.length>0?{clearTransportOverrides:a}:{}}}function $(e){return e.join(`\0`)}function kt(e){return Lt(e,e.value)}function At(e,t){let n=e[$([`transport`,`type`])]??t;return n===`stdio`||n===`http`||n===`sse`||n===`streamableHttp`?n:void 0}function jt(e,t){return!t||!e.applicableTransportTypes||e.applicableTransportTypes.includes(t)}function Mt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function Nt(e){return e.split(/\r?\n/u).map(e=>e.trim()).filter(Boolean)}function Pt(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:{...e}}function Ft(e){return Array.isArray(e)?e.join(`, `):e&&typeof e==`object`?Object.keys(e).length>0?Object.keys(e).join(`, `):`-`:String(e??`-`)}function It(e){if(e==null)return`-`;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e))return e.map(It).join(`, `);if(typeof e!=`object`)return`-`;let t=e;return t.secret===!0||t.value===`[REDACTED]`?`[REDACTED]`:t.kind===`inlineSecret`?`inline secret: [REDACTED]`:typeof t.kind==`string`&&typeof t.value==`string`?`${Vt(t.kind)}: ${t.value}`:Object.entries(t).map(([e,t])=>`${e}: ${Bt(e)?`[REDACTED]`:It(t)}`).join(`; `)}function Lt(e,t){return e.control===`switch`?!!t:e.control===`tag-list`||e.control===`string-list`?Mt(t):e.control===`record`?Pt(t):e.control===`number`?typeof t==`number`?t:void 0:e.control===`text`||e.control===`select`?String(t??``):t}function Rt(e,t,n){let r=e;for(let e of t.slice(0,-1)){let t=r[e];(!t||typeof t!=`object`||Array.isArray(t))&&(r[e]={}),r=r[e]}let i=t.at(-1);i&&(r[i]=n)}function zt(e){return JSON.stringify(e)}function Bt(e){return/authorization|password|secret|token/iu.test(e)}function Vt(e){return e.replace(/([A-Z])/g,` $1`).toLowerCase()}function Ht(){return{status:`idle`}}function Ut(e,t){switch(t.type){case`closed`:return{status:`idle`};case`contractLoadStarted`:return{status:`loading`};case`contractLoaded`:{let e={};for(let n of t.contract.createContract.fieldGroups.flatMap(e=>e.fields))e[$(n.fieldPath)]=kt(n);let n=$([`transport`,`type`]);return[`stdio`,`http`,`sse`].includes(String(e[n]??``))||(e[n]=`stdio`),{status:`editing`,contract:t.contract,fieldDraft:e,secrets:[],dirty:!1,previewBusy:!1,applyBusy:!1}}case`contractFailed`:return{status:`failed`,message:t.message};case`fieldChanged`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{fieldDraft:{...e.fieldDraft,[$(t.fieldPath)]:t.value}});case`secretAdded`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{secrets:[...e.secrets,t.secret]});case`secretChanged`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{secrets:e.secrets.map(e=>e.id===t.secret.id?t.secret:e)});case`secretRemoved`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{secrets:e.secrets.filter(e=>e.id!==t.id)});case`previewStarted`:return e.status===`editing`?{...e,previewBusy:!0,previewError:void 0}:e;case`previewSucceeded`:return e.status===`editing`?{...e,preview:t.preview,previewBusy:!1,previewError:void 0}:e;case`previewFailed`:return e.status===`editing`?{...e,previewBusy:!1,previewError:t.message}:e;case`applyStarted`:return e.status===`editing`?{...e,applyBusy:!0,applyError:void 0}:e;case`applyFailed`:return e.status===`editing`?{...e,applyBusy:!1,applyError:t.message,preview:t.clearPreview?void 0:e.preview}:e;case`applySucceeded`:return{status:`committed`,serverId:t.response.result.targetName,result:t.response.result,warning:t.response.result.configChange.reload.status===`failed`?t.response.result.configChange.reload.error??`Runtime reload failed after configuration was written.`:void 0}}}function Wt(e){if(e.status!==`editing`)return null;let t=e.fieldDraft[$([`transport`,`type`])];if(t!==`stdio`&&t!==`http`&&t!==`sse`)return null;let n={type:t},r=e.fieldDraft[$([`source`])]===`mcpTemplates`?`mcpTemplates`:`mcpServers`;for(let i of e.contract.createContract.fieldGroups.flatMap(e=>e.fields)){if(i.fieldPath[0]!==`transport`||i.fieldPath.length<2||i.applicableSources&&!i.applicableSources.includes(r)||!jt(i,t)||i.fieldPath[1]===`type`)continue;let a=e.fieldDraft[$(i.fieldPath)],o=i.control===`string-list`?Mt(a):i.control===`record`?Pt(a):a;o!==``&&o!==void 0&&Gt(n,i.fieldPath.slice(1),o)}let i=t===`stdio`?`env`:`headers`,a=e.secrets.filter(e=>e.container===i&&e.key.trim()&&e.replacementValue.trim()).map(e=>({fieldPath:[e.container,e.key.trim()],action:`replace`,replacement:{kind:e.replacementKind,value:e.replacementValue}}));return{source:r,name:String(e.fieldDraft[$([`name`])]??``),enabled:r!==`mcpServers`||!!e.fieldDraft[$([`enabled`])],tags:Mt(e.fieldDraft[$([`tags`])]),transport:n,...a.length>0?{secrets:a}:{}}}function Gt(e,t,n){let r=e;for(let e of t.slice(0,-1)){let t=r[e];(!t||typeof t!=`object`||Array.isArray(t))&&(r[e]={}),r=r[e]}let i=t.at(-1);i&&(r[i]=n)}function Kt(e,t){return{...e,...t,dirty:!0,preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0}}function qt({api:e,session:t,browser:n,onUnauthenticated:r,onCreated:i,onOpenCreated:a,onPathCommitted:o}){let[s,c]=(0,Y.useReducer)(Ut,void 0,Ht),l=(0,Y.useRef)(s),u=(0,Y.useRef)(e),d=(0,Y.useRef)(t),f=(0,Y.useRef)(r);u.current=e,d.current=t,f.current=r;let p=(0,Y.useCallback)(e=>{let t=Ut(l.current,e);l.current=t,c(e)},[]),{loadRequestRef:m,previewRequestRef:h,applyRequestRef:g,applyInteractionRef:_,applyAttemptRef:v,invalidatePreview:y,reset:b}=Dt(()=>p({type:`closed`})),x=(0,Y.useCallback)(e=>!(e instanceof J)||e.failure.kind!==`unauthenticated`?!1:(b(),f.current(e.failure.adminStatus),!0),[b]),S=(0,Y.useCallback)(async()=>{let e=d.current;if(!e)return;let t=m.current+1;m.current=t;let n=e.csrfToken;p({type:`contractLoadStarted`});try{let e=await u.current.getConfiguredServerCreateContract();if(t!==m.current||d.current?.csrfToken!==n)return;p({type:`contractLoaded`,contract:e})}catch(e){if(t!==m.current||d.current?.csrfToken!==n)return;x(e)||p({type:`contractFailed`,message:Zt(e)})}},[p,x]),C=(0,Y.useCallback)(async()=>{let e=l.current;e.status===`editing`&&e.dirty&&!await Yt(n)||(b(),n.push(`/admin/servers/new`),o?.(`/admin/servers/new`),await S())},[n,S,o,b]),w=(0,Y.useCallback)(async(e=`/admin/servers`)=>{let t=l.current;return t.status===`editing`&&t.dirty&&!await Yt(n)?!1:(b(),n.push(e),o?.(e),!0)},[n,o,b]),T=(0,Y.useCallback)(async e=>{await w(`/admin/servers`)&&await a?.({source:`mcpServers`,id:e})},[w,a]),E=(0,Y.useCallback)((e,t)=>{y(),p({type:`fieldChanged`,fieldPath:e,value:t})},[p,y]),D=(0,Y.useCallback)(e=>{y(),p({type:`secretAdded`,secret:e})},[p,y]),O=(0,Y.useCallback)(e=>{y(),p({type:`secretChanged`,secret:e})},[p,y]),k=(0,Y.useCallback)(e=>{y(),p({type:`secretRemoved`,id:e})},[p,y]),A=(0,Y.useCallback)(async(e=`auto`)=>{let t=d.current,n=l.current,r=Wt(n);if(!t||n.status!==`editing`||!r)return;let i=h.current+1;h.current=i;let a=t.csrfToken;p({type:`previewStarted`});try{let t=await u.current.previewConfiguredServerCreate({draft:r,csrfToken:a,connectivityCheck:e});if(i!==h.current||d.current?.csrfToken!==a)return;v.current?.previewFingerprint!==t.preview.previewFingerprint&&(v.current=void 0),p({type:`previewSucceeded`,preview:t.preview})}catch(e){if(i!==h.current||d.current?.csrfToken!==a)return;x(e)||p({type:`previewFailed`,message:`Preview failed: ${Zt(e)}`})}},[p,x]),j=(0,Y.useCallback)(async()=>{if(_.current)return;let e=d.current,t=l.current,r=Wt(t);if(!(!e||t.status!==`editing`||!t.preview||!r)&&Jt(t).eligible){_.current=!0;try{let o=t.preview,s=o.connectivityCheck.status===`failed`,c=r.source===`mcpTemplates`;if(!await n.confirm({title:s?`Create ${r.name} despite failed connectivity?`:c?`Create Template definition ${r.name}?`:`Create configured server ${r.name}?`,message:s?`The bounded connectivity check failed. Creating this target may leave it unavailable.`:c?`This writes a Template Server definition and reloads the Runtime Scope. No runtime instance is created.`:`This writes a new static target and reloads the Runtime Scope.`,confirmLabel:s?`Create despite failure`:c?`Create template`:`Create server`,tone:s?`danger`:void 0,details:[{label:`Target`,value:r.name},{label:`Transport`,value:r.transport.type},{label:`Connectivity`,value:o.connectivityCheck.status},{label:`Existing target`,value:`Must remain absent`}]}))return;let l=v.current?.previewFingerprint===o.previewFingerprint?v.current:{previewFingerprint:o.previewFingerprint,idempotencyKey:Be(r.name)};v.current=l;let f=g.current+1;g.current=f;let m=e.csrfToken;p({type:`applyStarted`});try{let e=await u.current.createConfiguredServer({draft:r,csrfToken:m,idempotencyKey:l.idempotencyKey,previewFingerprint:o.previewFingerprint,confirmationFacts:{previewConfirmed:o.previewFingerprint,targetNameConfirmed:r.name,connectionCriticalConfirmed:!0,...o.diff.some(e=>e.riskFlags.includes(`secret`))?{secretChangeConfirmed:!0}:{},...s?{connectivityFailureOverrideConfirmed:!0}:{}}});if(f!==g.current||d.current?.csrfToken!==m)return;v.current=void 0,p({type:`applySucceeded`,response:e}),await i?.(),await a?.({source:e.result.targetSource===`mcpTemplates`||e.result.configChange.target.source===`mcpTemplates`?`mcpTemplates`:`mcpServers`,id:e.result.targetName}),e.result.configChange.reload.status!==`failed`&&p({type:`closed`})}catch(e){if(f!==g.current||d.current?.csrfToken!==m)return;if(!x(e)){let t=Xt(e);t&&(v.current=void 0),p({type:`applyFailed`,message:`Create failed: ${Zt(e)}`,clearPreview:t})}}}finally{_.current=!1}}},[n,p,x,i,a]);return(0,Y.useEffect)(()=>{if(!t){b();return}n.pathname()===`/admin/servers/new`&&S()},[n,S,b,t?.csrfToken]),(0,Y.useEffect)(()=>n.subscribePopState(()=>{(async()=>{let e=n.pathname(),t=l.current;if(t.status===`editing`&&t.dirty){if(n.replace(`/admin/servers/new`),!await Yt(n)){o?.(`/admin/servers/new`);return}n.replace(e)}b(),o?.(e)})()}),[n,o,b]),{state:s,open:C,close:w,editExisting:T,changeField:E,addSecret:D,changeSecret:O,removeSecret:k,preview:A,apply:j}}function Jt(e){if(e.status!==`editing`||!e.preview)return{eligible:!1,reason:`Preview this server first.`};if(!e.contract.createContract.capabilities.apply.supported)return{eligible:!1,reason:`Creation is unavailable.`};if(e.preview.validation.status!==`valid`)return{eligible:!1,reason:`Resolve validation issues.`};if(!e.preview.configChange.changed||e.preview.diff.length===0)return{eligible:!1,reason:`The preview contains no changes.`};let t=Wt(e);if(!t)return{eligible:!1,reason:`Complete the server configuration.`};let n=e.preview.diff.some(e=>e.riskFlags.includes(`connection_critical`));return t.enabled&&t.transport.type!==`stdio`&&n&&e.preview.connectivityCheck.status!==`passed`&&e.preview.connectivityCheck.status!==`failed`&&!(e.preview.connectivityCheck.status===`skipped`&&e.preview.connectivityCheck.reason===`checker_unavailable`)?{eligible:!1,reason:`A connectivity check must run before creation.`}:{eligible:!0}}function Yt(e){return e.confirm({title:`Discard custom server?`,message:`The configured-server draft, preview, and secret replacements will be lost.`,confirmLabel:`Discard draft`,tone:`danger`})}function Xt(e){return e instanceof J&&e.failure.kind===`rejected`&&e.failure.code===`configured_server_stale_preview`}function Zt(e){if(e instanceof J)return e.failure.message;throw e}function Qt(e){return e===`identity`?`Rename or enable this target before previewing.`:e===`secrets`?`Choose preserve, replace, or clear without revealing current values.`:e===`transport`?`Change how the runtime connects to this server.`:`Edit normalized fields owned by the Admin Domain.`}function $t({field:e,value:t,onChange:n}){return!e.editable||e.control===`readonly`?(0,X.jsx)(Z,{label:e.label,value:Ft(t)}):e.control===`switch`?(0,X.jsx)(T,{label:e.label,checked:!!t,onChange:e=>n(e.currentTarget.checked)}):e.control===`tag-list`?(0,X.jsx)(D,{label:e.label,value:Mt(t),onChange:n}):e.control===`select`?(0,X.jsx)(y,{label:e.label,value:String(t??``),data:e.options??[],onChange:e=>n(e.currentTarget.value)}):e.control===`number`?(0,X.jsx)(C,{label:e.label,value:typeof t==`number`?t:``,onChange:e=>n(e===``?void 0:e)}):e.control===`string-list`?(0,X.jsx)(j,{label:e.label,value:Mt(t).join(`
3
- `),autosize:!0,minRows:2,onChange:e=>n(Nt(e.currentTarget.value))}):e.control===`record`?(0,X.jsx)(en,{label:e.label,value:Pt(t),onChange:n}):(0,X.jsx)(w,{label:e.label,value:String(t??``),onChange:e=>n(e.currentTarget.value)})}function en({label:e,value:t,onChange:r}){let[i,a]=(0,Y.useState)(``),[o,s]=(0,Y.useState)(``);function c(e,n){r({...t,[e]:n})}function l(e){let n={...t};delete n[e],r(n)}function u(){let e=i.trim();e&&(r({...t,[e]:o}),a(``),s(``))}return(0,X.jsxs)(O,{className:`record-editor`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e}),Object.entries(t).map(([t,r])=>(0,X.jsxs)(n,{gap:`xs`,align:`flex-end`,wrap:`nowrap`,children:[(0,X.jsx)(w,{className:`record-editor-value`,label:`${e} ${t}`,value:String(r??``),onChange:e=>c(t,e.currentTarget.value)}),(0,X.jsx)(m,{"aria-label":`Remove ${e} ${t}`,size:`compact-xs`,variant:`subtle`,color:`red`,onClick:()=>l(t),children:`Remove`})]},t)),(0,X.jsxs)(n,{gap:`xs`,align:`flex-end`,children:[(0,X.jsx)(w,{label:`New ${e} key`,value:i,onChange:e=>a(e.currentTarget.value)}),(0,X.jsx)(w,{label:`New ${e} value`,value:o,onChange:e=>s(e.currentTarget.value)}),(0,X.jsx)(m,{variant:`default`,onClick:u,children:`Add entry`})]})]})}function tn({field:e,draft:t,onChange:i}){let a=t??{fieldPath:e.fieldPath,action:`preserve`,replacementKind:e.secret?.environmentReference.supported===!1?`inlineSecret`:`environmentReference`,replacementValue:``},o=e.secret?.allowedActions??[`preserve`,`replace`,`clear`],s=e.secret?.environmentReference.supported??!0,c=e.secret?.environmentReference.recommended??s,l=e.secret?.inlineReplacement.supported??!1;return(0,X.jsx)(b,{className:`secret-editor`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:700,children:e.label}),(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:e.secret?.environmentReference.guidance??`Store only an environment variable name or substitution expression when possible.`})]}),(0,X.jsxs)(n,{gap:4,children:[(0,X.jsx)(u,{variant:`light`,children:`redacted`}),c?(0,X.jsx)(u,{color:`teal`,variant:`light`,children:`env reference recommended`}):null]})]}),(0,X.jsx)(_.Group,{value:a.action,onChange:e=>i({...a,action:e}),children:(0,X.jsx)(n,{gap:`sm`,children:o.map(t=>(0,X.jsx)(_,{value:t,label:nn(t,e.label)},t))})}),a.action===`replace`?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsx)(r,{color:`teal`,variant:`light`,children:`Recommended: keep secret material outside 1MCP config by writing only an environment variable name or substitution expression.`}),(0,X.jsx)(_.Group,{label:`Replacement source`,value:a.replacementKind,onChange:e=>i({...a,replacementKind:e}),children:(0,X.jsx)(n,{gap:`sm`,children:(0,X.jsx)(_,{disabled:!s,value:`environmentReference`,label:`Environment variable (recommended)`})})}),a.replacementKind===`environmentReference`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(w,{label:`Environment variable for ${e.label}`,description:"Example: GITHUB_TOKEN or ${GITHUB_TOKEN}",value:a.replacementValue,onChange:e=>i({...a,replacementValue:e.currentTarget.value})}),l?(0,X.jsx)(m,{size:`compact-sm`,variant:`subtle`,color:`yellow`,onClick:()=>i({...a,replacementKind:`inlineSecret`,replacementValue:``}),children:`Use advanced inline secret instead`}):null]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(r,{color:`yellow`,role:`alert`,children:`Advanced path: inline replacement stores secret material in configuration. Prefer an environment reference unless the deployment cannot provide one.`}),(0,X.jsx)(E,{label:`Inline secret for ${e.label}`,value:a.replacementValue,onChange:e=>i({...a,replacementValue:e.currentTarget.value})}),s?(0,X.jsx)(m,{size:`compact-sm`,variant:`subtle`,onClick:()=>i({...a,replacementKind:`environmentReference`,replacementValue:``}),children:`Use environment variable instead`}):null]}),(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:a.replacementKind===`environmentReference`?e.secret?.environmentReference.guidance:e.secret?.inlineReplacement.guidance})]}):null]})})}function nn(e,t){return e===`preserve`?`Preserve existing ${t}`:e===`replace`?`Replace ${t}`:`Clear saved ${t}`}function rn({preview:e}){let t=e.connectivityCheck,i=e.validation.status===`valid`?`teal`:`red`,a=t.status===`passed`?`teal`:t.status===`failed`?`red`:`yellow`,o=t.status===`skipped`&&t.reason===`template_structural_preview`;return(0,X.jsx)(b,{className:`preview-result`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`Preview result`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Domain facts only. No config has been written.`})]}),(0,X.jsx)(N,{className:`preview-fingerprint`,children:e.previewFingerprint})]}),(0,X.jsx)(r,{color:`blue`,variant:`light`,children:`Preview only - no config has been written.`}),(0,X.jsxs)(h,{cols:{base:1,sm:2},spacing:`xs`,children:[(0,X.jsx)(Z,{label:`Target`,value:e.targetName,meta:`Proposed: ${e.proposedTargetName??e.targetName}`}),(0,X.jsx)(Z,{label:`Validation`,value:e.validation.status,meta:e.validation.errors.length>0?`${e.validation.errors.length} field issue${e.validation.errors.length===1?``:`s`}`:`Ready to apply after confirmation`}),(0,X.jsx)(Z,{label:`Config change`,value:e.configChange.status,meta:`${e.configChange.operation} / ${e.configChange.changed?`changed`:`unchanged`}`}),`expectedReload`in e?(0,X.jsx)(Z,{label:`Expected reload`,value:`Checked after creation`,meta:`The runtime reports the reload outcome after configuration is written.`}):(0,X.jsx)(Z,{label:`Reload`,value:e.configChange.reload.status,meta:e.configChange.reload.error}),(0,X.jsx)(Z,{label:`Backup`,value:e.configChange.backup.created?`created`:`not created`,meta:e.configChange.backup.path}),(0,X.jsx)(b,{className:`connectivity-card connectivity-${t.status}`,withBorder:!0,children:(0,X.jsxs)(O,{gap:4,children:[(0,X.jsxs)(n,{justify:`space-between`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:o?`Runtime contact`:`Connectivity`}),(0,X.jsx)(u,{color:a,variant:`light`,children:t.status})]}),(0,X.jsx)(d,{size:`sm`,children:o?`Skipped. Template preview is structural and does not contact a backend.`:dt(t)}),ut(e)?(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:ut(e)}):null]})})]}),e.templateAnalysis?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Template structure`}),(0,X.jsx)(u,{color:e.templateAnalysis.syntax.valid?`teal`:`red`,variant:`light`,children:e.templateAnalysis.syntax.valid?`valid syntax`:`invalid syntax`})]}),(0,X.jsxs)(h,{cols:{base:1,sm:2},spacing:`xs`,children:[(0,X.jsx)(Z,{label:`Request Context variables`,value:e.templateAnalysis.variables.join(`, `)||`none`,meta:`Names only; values are never loaded or rendered during preview.`}),(0,X.jsx)(Z,{label:`Runtime instances`,value:`${e.runtimeImpact?.activeInstanceCount??0} active`,meta:e.runtimeImpact?.retirementRequired?`Active instances retire after apply and successful reload.`:`Preview and creation do not create an instance.`})]})]}):null,e.toolSelection?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Tool impact`}),(0,X.jsx)(u,{variant:`outline`,children:e.toolSelection.model})]}),(0,X.jsxs)(h,{cols:{base:1,sm:3},spacing:`xs`,children:[(0,X.jsx)(Z,{label:`Selection`,value:`${e.toolSelection.counts.enabled} enabled / ${e.toolSelection.counts.disabled} disabled`,meta:`${e.toolSelection.counts.unresolved} unresolved`}),(0,X.jsx)(Z,{label:`Approximate tokens`,value:`${e.toolSelection.approximateTokens.before} to ${e.toolSelection.approximateTokens.after}`,meta:`Savings: ${e.toolSelection.approximateTokens.savings}`}),(0,X.jsx)(Z,{label:`Runtime effect`,value:e.toolSelection.effect===`immediate`?`Immediate`:`Deferred`,meta:`${e.toolSelection.changedTools.length} changed tools`})]}),e.toolSelection.requiresZeroEnabledConfirmation?(0,X.jsx)(r,{color:`red`,role:`alert`,children:`Applying this preview disables every currently observed tool.`}):null]}):null,e.configChange.warnings?.map(e=>(0,X.jsx)(Z,{label:`Warning`,value:e},`warning:${e}`)),e.warnings?.map(e=>(0,X.jsx)(Z,{label:`Preview warning`,value:e},`preview-warning:${e}`)),e.configChange.retentionCleanup.warnings.map(e=>(0,X.jsx)(Z,{label:`Retention warning`,value:e},`retention:${e}`)),e.validation.errors.length>0?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Validation issues`}),(0,X.jsx)(u,{color:i,variant:`light`,children:e.validation.errors.length})]}),e.validation.errors.map(e=>(0,X.jsx)(Z,{label:e.fieldPath.join(`.`)||`form`,value:e.code,meta:e.message},`${$(e.fieldPath)}:${e.code}`))]}):null,e.diff.length>0?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Redacted diff`}),(0,X.jsxs)(u,{variant:`outline`,children:[e.diff.length,` change`,e.diff.length===1?``:`s`]})]}),e.diff.map(e=>(0,X.jsx)(b,{className:`preview-diff-entry`,withBorder:!0,children:(0,X.jsxs)(O,{gap:6,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.fieldPath.join(`.`)}),(0,X.jsxs)(n,{gap:4,children:[e.secretAction?(0,X.jsxs)(u,{color:`grape`,variant:`light`,children:[`secret: `,e.secretAction]}):null,e.riskFlags.map(e=>(0,X.jsx)(u,{color:pt(e),variant:`light`,children:mt(e)},e))]})]}),(0,X.jsxs)(d,{size:`sm`,children:[(0,X.jsxs)(d,{span:!0,c:`dimmed`,children:[`from`,` `]}),It(e.oldValue),(0,X.jsxs)(d,{span:!0,c:`dimmed`,children:[` `,`to`,` `]}),It(e.newValue)]})]})},$(e.fieldPath)))]}):(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`No field-level changes were reported by preview.`})]})})}function an({model:e}){let{state:t}=e,i=(0,Y.useRef)(null),a=t.status===`editing`&&!!t.preview?.validation.errors.some(e=>!on(e.fieldPath));if((0,Y.useEffect)(()=>{a&&i.current&&(i.current.open=!0)},[a]),t.status===`idle`)return null;if(t.status===`loading`)return(0,X.jsx)(Q,{title:`Configure custom server`,utility:`loading`,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsx)(Et,{message:`Loading creation controls.`})});if(t.status===`failed`)return(0,X.jsx)(Q,{title:`Configure custom server`,utility:`unavailable`,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(r,{color:`red`,role:`alert`,children:t.message}),(0,X.jsxs)(n,{children:[(0,X.jsx)(m,{onClick:()=>void e.open(),children:`Retry loading`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>void e.close(),children:`Back to servers`})]})]})});if(t.status===`committed`)return(0,X.jsx)(Q,{title:`Configured server created`,utility:t.serverId,icon:(0,X.jsx)(le,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(r,{color:`teal`,role:`status`,children:[`Created `,t.serverId,`.`]}),t.warning?(0,X.jsx)(r,{color:`yellow`,children:t.warning}):null,(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Refreshing the inventory and opening the created target.`}),(0,X.jsx)(m,{onClick:()=>void e.close(`/admin/servers/${t.result.targetSource??t.result.configChange.target.source??`mcpServers`}/${encodeURIComponent(t.serverId)}`),children:`Open server detail`})]})});let o=t.fieldDraft[$([`transport`,`type`])],s=t.fieldDraft[$([`source`])]===`mcpTemplates`?`mcpTemplates`:`mcpServers`,c=o===`http`||o===`sse`?o:`stdio`,l=t.contract.createContract.fieldGroups.map(e=>({...e,fields:e.fields.filter(e=>e.fieldPath[0]!==`source`&&(!e.applicableSources||e.applicableSources.includes(s))&&jt(e,c))})).filter(e=>e.fields.length>0),f=l.map(e=>({...e,fields:e.fields.filter(e=>on(e.fieldPath))})).filter(e=>e.fields.length>0),p=l.flatMap(e=>e.fields).filter(e=>!on(e.fieldPath)),h=Jt(t),g=t.preview?.configChange.target.source===`mcpServers`&&t.preview.validation.errors.some(e=>[`configured_server_name_conflict`,`configured_server_destination_conflict`].includes(e.code));return(0,X.jsx)(Q,{title:`Configure custom server`,utility:s===`mcpTemplates`?`new template definition`:`new static target`,icon:(0,X.jsx)(de,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Configured Server Target`}),(0,X.jsx)(k,{order:2,children:s===`mcpTemplates`?`New template definition`:`New custom server`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Configure -> Preview -> Confirm creation`})]}),(0,X.jsx)(m,{variant:`default`,onClick:()=>void e.close(),children:`Back`})]}),(0,X.jsx)(A,{fullWidth:!0,"aria-label":`Configured server definition type`,value:s,onChange:t=>e.changeField([`source`],t),data:[{value:`mcpServers`,label:`Static`},{value:`mcpTemplates`,label:`Template`}]}),s===`mcpTemplates`?(0,X.jsx)(r,{color:`blue`,variant:`light`,children:`Preview checks structure and Request Context variable names only. It never renders context, connects a backend, or creates an instance.`}):null,c===`sse`?(0,X.jsx)(r,{color:`yellow`,title:`Legacy transport`,children:`SSE is deprecated. Use HTTP for new remote servers when the endpoint supports it.`}):null,f.map(r=>(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:r.label}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:Qt(r.id)})]}),(0,X.jsxs)(u,{variant:`outline`,children:[r.fields.length,` fields`]})]}),r.fields.map(n=>sn(n,t.fieldDraft,e.changeField))]})},r.id)),(0,X.jsxs)(`details`,{ref:i,className:`advanced-settings`,children:[(0,X.jsx)(`summary`,{children:`Advanced settings`}),(0,X.jsxs)(O,{gap:`sm`,mt:`sm`,children:[p.length>0?(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Optional transport settings`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Timeouts use milliseconds. Prefer Connection Timeout and Request Timeout over Deprecated Timeout.`}),p.map(n=>sn(n,t.fieldDraft,e.changeField))]})}):null,(0,X.jsx)(cn,{transport:c,secrets:t.secrets,inlineSupported:!!t.contract.createContract.secretPolicy.inlineReplacement&&t.contract.createContract.secretPolicy.allowedActions.includes(`replace`),onAdd:e.addSecret,onChange:e.changeSecret,onRemove:e.removeSecret})]})]}),(0,X.jsxs)(n,{className:`draft-action-bar`,justify:`space-between`,gap:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(u,{color:t.dirty?`yellow`:`gray`,variant:t.dirty?`light`:`outline`,children:t.dirty?`Unpreviewed draft`:`Complete the server details`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Preview validates the new target without writing configuration.`})]}),(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(m,{loading:t.previewBusy,disabled:!t.dirty||t.previewBusy||t.applyBusy,onClick:()=>void e.preview(`auto`),children:`Preview server`}),t.preview?(0,X.jsx)(m,{variant:`default`,disabled:t.applyBusy,onClick:()=>void e.preview(`manual`),children:`Rerun connectivity`}):null]})]}),t.previewError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:t.previewError}):null,t.applyError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:t.applyError}):null,t.preview?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(n,{justify:`flex-end`,align:`center`,children:[g?(0,X.jsx)(m,{leftSection:(0,X.jsx)(q,{size:16}),variant:`default`,onClick:()=>void e.editExisting(t.preview?.targetName??``),children:`Edit existing server`}):null,h.eligible?null:(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:h.reason}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(le,{size:16}),loading:t.applyBusy,disabled:!h.eligible||t.applyBusy,onClick:()=>void e.apply(),children:s===`mcpTemplates`?`Create template`:`Create server`})]}),(0,X.jsx)(rn,{preview:t.preview})]}):null]})})}function on(e){return e[0]===`secrets`?!1:e[0]!==`transport`||[`type`,`command`,`args`,`url`].includes(e[1]??``)}function sn(e,t,n){let r=$(e.fieldPath);return(0,X.jsx)($t,{field:[`timeout`,`connectionTimeout`,`requestTimeout`].includes(e.fieldPath[1]??``)?{...e,label:`${e.label} (ms)`}:e,value:t[r],onChange:t=>n(e.fieldPath,t)},r)}function cn({transport:e,secrets:t,inlineSupported:i,onAdd:a,onChange:o,onRemove:s}){let c=e===`stdio`?`env`:`headers`,l=t.filter(e=>e.container===c),u=c===`env`?`Environment secrets`:`Header secrets`;return(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:u}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Environment Secret Reference is recommended. Only the reference is stored in configuration.`})]}),(0,X.jsx)(m,{size:`compact-sm`,variant:`default`,leftSection:(0,X.jsx)(de,{size:14}),onClick:()=>a({id:un(),container:c,key:``,replacementKind:`environmentReference`,replacementValue:``}),children:`Add secret`})]}),l.length===0?(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`No secret inputs configured.`}):l.map(e=>(0,X.jsx)(b,{className:`secret-editor`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{align:`flex-end`,wrap:`nowrap`,children:[(0,X.jsx)(w,{label:c===`env`?`Environment variable`:`Header name`,value:e.key,onChange:t=>o({...e,key:t.currentTarget.value})}),(0,X.jsx)(y,{label:`Secret source`,value:e.replacementKind,data:[{value:`environmentReference`,label:`Environment Secret Reference`},...i?[{value:`inlineSecret`,label:`Advanced inline secret`}]:[]],onChange:t=>o({...e,replacementKind:t.currentTarget.value,replacementValue:``})}),(0,X.jsx)(m,{"aria-label":`Remove ${e.key||`secret`} input`,variant:`subtle`,color:`red`,onClick:()=>s(e.id),children:(0,X.jsx)(be,{size:16})})]}),e.replacementKind===`environmentReference`?(0,X.jsx)(w,{label:`Environment reference for ${e.key||u}`,placeholder:"MY_SECRET or ${MY_SECRET}",value:e.replacementValue,onChange:t=>o({...e,replacementValue:t.currentTarget.value})}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(r,{color:`yellow`,children:`Advanced path: inline replacement stores secret material in configuration. Prefer an Environment Secret Reference.`}),(0,X.jsx)(E,{label:`Inline secret for ${e.key||u}`,value:e.replacementValue,onChange:t=>o({...e,replacementValue:t.currentTarget.value})})]})]})},e.id))]})})}var ln=0;function un(){return ln+=1,`create-secret-${ln}`}function dn({model:e,target:t}){let{state:i}=e,a=i.preview,o=i.result;return(0,X.jsx)(b,{className:`edit-section configured-server-delete`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,c:`red`,children:`Delete definition`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Remove this source-qualified definition after a recovery copy and Runtime Scope reload observation.`})]}),o?(0,X.jsxs)(r,{color:Ct(o)?`yellow`:`teal`,role:`status`,children:[Ct(o)?o.configChange.reload.status===`failed`?`The definition was deleted from disk, but runtime reload failed and the runtime may still serve this target.`:`The definition was deleted from disk, but Template instance retirement was not confirmed and the runtime may still serve this target.`:`The definition was deleted from disk and the runtime reload was observed.`,` `,o.configChange.backup.created?`A recovery backup exists. Restore it if the deletion must be reversed.`:`No recovery backup was reported; inspect runtime and configuration state before continuing.`]}):a?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(r,{color:`red`,title:`Delete ${a.qualifiedId}`,children:[a.runtimeImpact.kind===`template`?`${a.runtimeImpact.activeInstanceCount} active instance${a.runtimeImpact.activeInstanceCount===1?``:`s`} will be retired after reload.`:`The configured backend will be removed after reload.`,a.removal.preservesSameNamedOtherSource?` The same-named definition in the other source remains.`:``]}),(0,X.jsxs)(O,{gap:2,className:`configured-server-delete-facts`,children:[(0,X.jsxs)(d,{size:`xs`,children:[`Identity: `,a.qualifiedId]}),(0,X.jsxs)(d,{size:`xs`,children:[`Authority: `,a.authority]}),(0,X.jsxs)(d,{size:`xs`,children:[`Target fingerprint: `,a.targetFingerprint]}),(0,X.jsx)(d,{size:`xs`,children:`Removal diff: present definition to removed`}),(0,X.jsx)(d,{size:`xs`,children:`Backup: required recovery copy before write`}),(0,X.jsx)(d,{size:`xs`,children:`Reload: observe after write`}),(0,X.jsxs)(d,{size:`xs`,children:[`Expected reload outcomes: `,a.expectedReload.possibleStatuses.join(`, `)]}),(0,X.jsxs)(d,{size:`xs`,children:[`Runtime impact:`,` `,a.runtimeImpact.kind===`template`?`retire ${a.runtimeImpact.activeInstanceCount} active instance${a.runtimeImpact.activeInstanceCount===1?``:`s`} after reload`:`remove configured backend after reload`]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{size:`xs`,fw:700,children:`Redacted definition`}),(0,X.jsx)(N,{block:!0,children:JSON.stringify(a.removal.definition,null,2)})]}),a.warnings.map(e=>(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:e},e)),(0,X.jsx)(w,{label:`Type ${a.qualifiedId} to confirm`,value:i.confirmation,disabled:i.applyBusy,autoComplete:`off`,onChange:t=>e.changeConfirmation(t.currentTarget.value)}),(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsx)(m,{variant:`default`,disabled:i.applyBusy,onClick:e.reset,children:`Cancel`}),(0,X.jsx)(m,{color:`red`,leftSection:(0,X.jsx)(be,{size:16}),loading:i.applyBusy,disabled:!wt(i),onClick:()=>void e.apply(t),children:`Delete definition`})]})]}):(0,X.jsx)(m,{color:`red`,variant:`outline`,leftSection:(0,X.jsx)(be,{size:16}),loading:i.previewBusy,disabled:i.previewBusy||i.applyBusy,onClick:()=>void e.preview(t),children:`Preview deletion`}),i.error?(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.error}):null]})})}function fn(){return{status:`list`}}function pn(e){if(e.status!==`loaded`)return{};let t=At(e.fieldDraft,e.detail.server.transport.type),n=Ot(e.detail.editContract.fieldGroups,e.fieldDraft,e.initialFieldDraft,e.secretDraft,t,e.clearedTransportOverrides),r=e.instructionOverride,i=e.initialInstructionOverride;return(r.mode!==i.mode||r.mode===`replace`&&r.value!==i.value)&&(n.instructionOverride=r.mode===`upstream`?{action:`remove`}:{action:`set`,value:r.mode===`suppress`?``:r.value}),JSON.stringify(e.toolDraft)!==JSON.stringify(e.initialToolDraft)&&(n.disabledTools=Object.entries(e.toolDraft).filter(([,e])=>!e.enabled).map(([e])=>e).sort((e,t)=>e.localeCompare(t)),n.toolDescriptionOverrides=Object.fromEntries(Object.entries(e.toolDraft).map(([e,t])=>[e,t.descriptionOverride.trim()]).filter(([,e])=>e.length>0).sort(([e],[t])=>e.localeCompare(t)))),n}function mn(e,t){switch(t.type){case`closed`:return fn();case`detailLoadStarted`:return{status:`loading`,serverId:t.serverId};case`detailLoaded`:return hn(t.serverId,t.detail);case`detailMissing`:return{status:`missing`,serverId:t.serverId};case`detailFailed`:return{status:`failed`,serverId:t.serverId,message:t.message};case`fieldChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{fieldDraft:{...e.fieldDraft,[$(t.fieldPath)]:t.value},clearedTransportOverrides:t.fieldPath[0]===`transport`&&t.fieldPath[1]?e.clearedTransportOverrides.filter(e=>e!==t.fieldPath[1]):e.clearedTransportOverrides});case`secretChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{secretDraft:{...e.secretDraft,[$(t.fieldPath)]:t.value}});case`transportOverrideChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{clearedTransportOverrides:t.clear?Array.from(new Set([...e.clearedTransportOverrides,t.key])):e.clearedTransportOverrides.filter(e=>e!==t.key)});case`instructionOverrideChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{instructionOverride:{mode:t.mode,value:t.mode===`replace`?t.value??e.instructionOverride.value:e.instructionOverride.value}});case`toolChanged`:{if(e.status!==`loaded`||e.applyBusy)return e;let n=e.toolDraft[t.name];return n?gn(e,{toolDraft:{...e.toolDraft,[t.name]:{enabled:t.enabled??n.enabled,descriptionOverride:t.descriptionOverride??n.descriptionOverride}}}):e}case`toolsBulkChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{toolDraft:Object.fromEntries(Object.entries(e.toolDraft).map(([e,n])=>[e,t.names.includes(e)?{...n,enabled:t.enabled}:n]))});case`toolInventoryRequestStarted`:return e.status!==`loaded`||e.applyBusy||e.toolInventoryBusy?e:{...e,toolInventoryBusy:!0,toolInventoryError:void 0,...t.clearPreview?{preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0}:{}};case`toolInventoryReceived`:{if(e.status!==`loaded`)return e;let n={...e.toolDraft},r={...e.initialToolDraft};for(let e of t.inventory.rows)n[e.name]??={enabled:e.enabled,descriptionOverride:e.descriptionOverride??``},r[e.name]??={enabled:e.enabled,descriptionOverride:e.descriptionOverride??``};let i=e.detail.toolInventory?.generation!==t.inventory.generation,a={...e,detail:{...e.detail,toolInventory:t.inventory},toolDraft:n,initialToolDraft:r,toolModel:t.inventory.model,toolInventoryBusy:!1,toolInventoryError:void 0,...t.clearPreview===`always`||i?{preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0}:{}};return{...a,dirty:Object.keys(pn(a)).length>0}}case`toolInventoryRequestFailed`:return e.status===`loaded`?{...e,toolInventoryBusy:!1,toolInventoryError:t.message}:e;case`previewStarted`:return e.status===`loaded`?{...e,previewBusy:!0,previewError:void 0}:e;case`previewSucceeded`:return e.status===`loaded`?{...e,preview:t.preview,previewBusy:!1,previewError:void 0}:e;case`previewFailed`:return e.status===`loaded`?{...e,previewBusy:!1,previewError:t.message}:e;case`applyStarted`:return e.status===`loaded`?{...e,applyBusy:!0,applyError:void 0,applySuccess:void 0}:e;case`applyCommitted`:return e.status===`loaded`?{status:`committed`,serverId:t.serverId,success:`Changes applied to ${t.result.targetName}.`,warning:vn(t.result)}:e;case`applySucceeded`:return{...hn(t.serverId,t.detail),applySuccess:`Changes applied to ${t.result.targetName}.`,applyWarning:vn(t.result)};case`applyFailed`:return e.status===`loaded`?{...e,preview:t.clearPreview?void 0:e.preview,applyBusy:!1,applyError:t.message}:e;case`applyRefreshFailed`:return e.status===`committed`?{...e,status:`committedRefreshFailed`,message:t.message}:e}}function hn(e,t){let n={},r={};for(let e of t.editContract.fieldGroups)for(let t of e.fields){let e=$(t.fieldPath);t.control===`secret`?r[e]={fieldPath:t.fieldPath,action:t.secret?.defaultAction??`preserve`,replacementKind:t.secret?.environmentReference.supported===!1?`inlineSecret`:`environmentReference`,replacementValue:``}:n[e]=kt(t)}let i=Object.fromEntries((t.toolInventory?.rows??[]).map(e=>[e.name,{enabled:e.enabled,descriptionOverride:e.descriptionOverride??``}]));return{status:`loaded`,serverId:e,detail:t,fieldDraft:n,initialFieldDraft:n,secretDraft:r,clearedTransportOverrides:[],instructionOverride:_n(t.server.instructionOverride),initialInstructionOverride:_n(t.server.instructionOverride),toolDraft:i,initialToolDraft:i,toolModel:t.toolInventory?.model??`gpt-4o`,toolInventoryBusy:!1,dirty:!1,previewBusy:!1,applyBusy:!1}}function gn(e,t){let n={...e,...t,preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0,applyWarning:void 0,applySuccess:void 0};return{...n,dirty:Object.keys(pn(n)).length>0}}function _n(e){return e?.state===`replace`?{mode:`replace`,value:e.value}:e?.state===`suppress`?{mode:`suppress`,value:``}:{mode:`upstream`,value:``}}function vn(e){if(e.configChange.reload.status===`failed`)return e.configChange.reload.error?`Configuration was written, but runtime reload failed: ${e.configChange.reload.error}`:`Configuration was written, but runtime reload failed. Inspect runtime health before continuing.`}function yn({api:e,session:t,browser:n,onUnauthenticated:r,onApplied:i,onPathCommitted:a}){let[o,s]=(0,Y.useReducer)(mn,void 0,fn),c=(0,Y.useRef)(o),l=(0,Y.useRef)(t),u=(0,Y.useRef)(e),d=(0,Y.useRef)(r),f=(0,Y.useRef)(0),p=(0,Y.useRef)(!1),m=(0,Y.useRef)();c.current=o,l.current=t,u.current=e,d.current=r;let{loadRequestRef:h,previewRequestRef:g,applyRequestRef:_,applyInteractionRef:v,applyAttemptRef:y,invalidatePreview:b,invalidateApply:x,reset:S}=Dt(()=>s({type:`closed`})),C=(0,Y.useCallback)(()=>{f.current+=1,p.current=!1,m.current=void 0},[]),w=(0,Y.useCallback)(()=>{C(),S()},[C,S]),T=(0,Y.useCallback)(e=>!(e instanceof J)||e.failure.kind!==`unauthenticated`?!1:(w(),d.current(e.failure.adminStatus),!0),[w]),E=(0,Y.useCallback)(async(e,t)=>{let n=l.current;if(!n||p.current)return;p.current=!0;let r=n.csrfToken,i=f.current+1;f.current=i,s({type:`toolInventoryRequestStarted`,clearPreview:!1});try{let n=await u.current.refreshConfiguredToolInventory({target:e,csrfToken:r,model:t});if(i!==f.current||l.current?.csrfToken!==r)return;let a=c.current;if(a.status!==`loaded`||!Sn(a,e))return;a.detail.toolInventory?.generation!==n.toolInventory.generation&&b(),s({type:`toolInventoryReceived`,inventory:n.toolInventory,clearPreview:`generationChanged`})}catch(e){if(i!==f.current||l.current?.csrfToken!==r)return;T(e)||s({type:`toolInventoryRequestFailed`,message:`Tool refresh failed: ${Tn(e)}`})}finally{i===f.current&&(p.current=!1)}},[T,b]),D=(0,Y.useCallback)(async e=>{let t=typeof e==`string`?e:e.id,n=l.current;if(!n)return;x(),C();let r=n.csrfToken,i=h.current+1;h.current=i,b(),s({type:`detailLoadStarted`,serverId:t});try{let n=await u.current.getConfiguredServerDetail(e);if(i!==h.current||l.current?.csrfToken!==r)return;m.current=n.toolInventory?.freshness===`unavailable`?{target:n.server.target,model:n.toolInventory.model}:void 0,s({type:`detailLoaded`,serverId:t,detail:n})}catch(e){if(i!==h.current||l.current?.csrfToken!==r||T(e))return;if(e instanceof J&&e.failure.kind===`configuredServerNotFound`){s({type:`detailMissing`,serverId:t});return}s({type:`detailFailed`,serverId:t,message:`Server detail failed: ${Tn(e)}`})}},[T,x,b,C]),O=(0,Y.useCallback)(async e=>{let t=c.current;t.status===`loaded`&&!Sn(t,e)&&t.dirty&&!await wn(n)||(n.push(En(e)),await D(e))},[n,D]),k=(0,Y.useCallback)(async(e=`/admin`)=>{let t=c.current;return t.status===`loaded`&&t.dirty&&!await wn(n)?!1:(n.push(e),w(),!0)},[n,w]),A=(0,Y.useCallback)((e,t)=>{b(),s({type:`fieldChanged`,fieldPath:e,value:t})},[b]),j=(0,Y.useCallback)((e,t)=>{b(),s({type:`secretChanged`,fieldPath:e,value:t})},[b]),M=(0,Y.useCallback)((e,t)=>{b(),s({type:`transportOverrideChanged`,key:e,clear:t})},[b]),ee=(0,Y.useCallback)((e,t)=>{b(),s({type:`instructionOverrideChanged`,mode:e,value:t})},[b]),N=(0,Y.useCallback)((e,t)=>{b(),s({type:`toolChanged`,name:e,...t})},[b]),te=(0,Y.useCallback)((e,t)=>{b(),s({type:`toolsBulkChanged`,names:e,enabled:t})},[b]),P=(0,Y.useCallback)(async e=>{let t=c.current;if(t.status!==`loaded`||t.applyBusy||t.toolInventoryBusy||p.current||v.current||e===t.toolModel)return;let n=l.current;if(!n)return;let r=n.csrfToken;p.current=!0;let i=f.current+1;f.current=i,b(),s({type:`toolInventoryRequestStarted`,clearPreview:!0});try{let n=await u.current.getConfiguredServerDetail(xn(t),e);if(i!==f.current||l.current?.csrfToken!==r||c.current.status!==`loaded`||!Sn(c.current,xn(t)))return;n.toolInventory?s({type:`toolInventoryReceived`,inventory:n.toolInventory,clearPreview:`always`}):s({type:`toolInventoryRequestFailed`,message:`Token estimate failed: inventory unavailable.`})}catch(e){if(i!==f.current||l.current?.csrfToken!==r)return;T(e)||s({type:`toolInventoryRequestFailed`,message:`Token estimate failed: ${Tn(e)}`})}finally{i===f.current&&(p.current=!1)}},[T,b]),F=(0,Y.useCallback)(()=>{let e=c.current;if(!(e.status!==`loaded`||e.applyBusy||e.toolInventoryBusy||v.current))return E(xn(e),e.toolModel)},[E]);(0,Y.useEffect)(()=>{if(o.status!==`loaded`)return;let e=m.current;!e||!Sn(o,e.target)||(m.current=void 0,E(e.target,e.model))},[E,o]);let ne=(0,Y.useCallback)(async(e=`auto`)=>{let t=l.current,n=c.current;if(!t||n.status!==`loaded`||n.toolInventoryBusy||p.current)return;let r=t.csrfToken,i=n.serverId,a=g.current+1;g.current=a,s({type:`previewStarted`});try{let t=await u.current.previewConfiguredServerEdit({target:xn(n),csrfToken:r,connectivityCheck:e,...n.detail.toolInventory?{model:n.toolModel}:{},edit:pn(n)});if(a!==g.current||l.current?.csrfToken!==r)return;let o=c.current;if(o.status!==`loaded`||o.serverId!==i)return;y.current?.previewFingerprint!==t.preview.previewFingerprint&&(y.current=void 0),s({type:`previewSucceeded`,preview:t.preview})}catch(e){if(a!==g.current||l.current?.csrfToken!==r)return;T(e)||s({type:`previewFailed`,message:`Preview failed: ${Tn(e)}`})}},[T]),I=(0,Y.useCallback)(async()=>{if(v.current)return;let e=l.current,t=c.current;if(!(!e||t.status!==`loaded`||!t.preview||t.toolInventoryBusy||p.current)&&bn(t).eligible){v.current=!0;try{let r=t.preview,a=Array.from(new Set(r.diff.flatMap(e=>e.riskFlags))),o=r.connectivityCheck.status===`failed`,d=r.toolSelection?.requiresZeroEnabledConfirmation===!0,f=t.detail.server.source===`mcpTemplates`;if(!await n.confirm({title:d?`Disable all observed tools for ${r.proposedTargetName}?`:o?`Apply despite failed connectivity to ${r.proposedTargetName}?`:f?`Apply template changes to ${r.proposedTargetName}?`:`Apply changes to ${r.proposedTargetName}?`,message:d?`No currently observed tools will remain enabled. Newly discovered tools will still be enabled by default.`:o?`The bounded connectivity check failed. Applying may make this configured server unavailable.`:f?r.runtimeImpact?.retirementRequired?`This writes the validated template definition, reloads the Runtime Scope, and retires active instances.`:`This writes the validated template metadata and reloads the Runtime Scope without retiring active instances.`:`This writes the validated configuration and reloads the Runtime Scope.`,confirmLabel:d?`Disable all tools`:o?`Apply despite failure`:f?`Apply template`:`Apply changes`,tone:d||o?`danger`:void 0,details:[{label:`Current target`,value:r.targetName},{label:`Final target`,value:r.proposedTargetName},{label:`Changes`,value:String(r.diff.length)},{label:`Risk flags`,value:a.join(`, `)||`none`},{label:`Connectivity`,value:r.connectivityCheck.status},{label:`Backup`,value:`Created before the config write`}]}))return;let m=c.current;if(m.status!==`loaded`||m.toolInventoryBusy||p.current||m.preview?.previewFingerprint!==r.previewFingerprint)return;let h=e.csrfToken,g=t.serverId,v=_.current+1;_.current=v;let b=y.current?.previewFingerprint===r.previewFingerprint?y.current:{previewFingerprint:r.previewFingerprint,idempotencyKey:ze(g)};y.current=b,s({type:`applyStarted`});let x;try{x=await u.current.applyConfiguredServerEdit({target:xn(t),csrfToken:h,idempotencyKey:b.idempotencyKey,edit:pn(t),previewFingerprint:r.previewFingerprint,...t.detail.toolInventory?{model:t.toolModel}:{},confirmationFacts:{previewConfirmed:r.previewFingerprint,...r.proposedTargetName===r.targetName?{}:{targetNameConfirmed:r.proposedTargetName},...a.includes(`connection_critical`)?{connectionCriticalConfirmed:!0}:{},...a.includes(`secret`)?{secretChangeConfirmed:!0}:{},...o?{connectivityFailureOverrideConfirmed:!0}:{},...r.toolSelection?.requiresZeroEnabledConfirmation?{zeroEnabledToolsConfirmed:!0}:{}}})}catch(e){if(v!==_.current||l.current?.csrfToken!==h)return;if(!T(e)){let t=Cn(e);t&&(y.current=void 0),s({type:`applyFailed`,message:`Apply failed: ${Tn(e)}`,clearPreview:t})}return}if(v!==_.current||l.current?.csrfToken!==h)return;y.current=void 0;let S=x.result.targetName;S!==g&&n.replace(En({source:t.detail.server.source,id:S})),s({type:`applyCommitted`,serverId:S,result:x.result});try{await i?.()}catch{}try{let e=await u.current.getConfiguredServerDetail(t.detail.server.source===`mcpTemplates`?{source:`mcpTemplates`,id:S}:{source:`mcpServers`,id:S});if(v!==_.current||l.current?.csrfToken!==h)return;s({type:`applySucceeded`,serverId:S,detail:e,result:x.result})}catch(e){if(v!==_.current||l.current?.csrfToken!==h)return;T(e)||s({type:`applyRefreshFailed`,message:`Changes were applied, but server detail could not be refreshed: ${Tn(e)}`})}}finally{v.current=!1}}},[n,T,i]);return(0,Y.useEffect)(()=>{if(!t){w();return}let e=Dn(n.pathname());e?D(e):w()},[n,D,w,t?.csrfToken]),(0,Y.useEffect)(()=>n.subscribePopState(()=>{(async()=>{let e=c.current,t=n.pathname(),r=Dn(t);if(e.status===`loaded`&&!Sn(e,r)&&e.dirty){if(n.replace(En(e.detail.server.target)),!await wn(n))return;n.replace(t)}r?D(r):w(),a?.(t)})()}),[n,D,a,w]),{state:o,open:O,close:k,changeField:A,changeSecret:j,changeTransportOverride:M,changeInstructionOverride:ee,changeTool:N,changeVisibleTools:te,changeToolModel:P,refreshToolInventory:F,preview:ne,apply:I}}function bn(e){if(e.status!==`loaded`||!e.preview)return{eligible:!1,reason:`Preview changes first.`};if(e.toolInventoryBusy)return{eligible:!1,reason:`Wait for the tool inventory refresh to finish.`};if(!e.detail.editContract.capabilities.apply.supported)return{eligible:!1,reason:`This runtime does not support applying server edits.`};if(e.preview.validation.status!==`valid`)return{eligible:!1,reason:`Resolve validation issues.`};if(!e.preview.configChange.changed||e.preview.diff.length===0)return{eligible:!1,reason:`The preview contains no changes.`};let t=e.preview.diff.some(e=>e.riskFlags.includes(`connection_critical`)),n=At(e.fieldDraft,e.detail.server.transport.type);return(pn(e).enabled??e.detail.server.enabled)&&e.detail.server.source!==`mcpTemplates`&&n!==`stdio`&&t&&e.preview.connectivityCheck.status!==`passed`&&e.preview.connectivityCheck.status!==`failed`?{eligible:!1,reason:`A connectivity check must run before applying these changes.`}:{eligible:!0}}function xn(e){return{source:e.detail.server.source,id:e.serverId}}function Sn(e,t){if(!t)return!1;let n=typeof t==`string`?`mcpServers`:t.source,r=typeof t==`string`?t:t.id;return e.serverId===r&&e.detail.server.source===n}function Cn(e){return e instanceof J&&e.failure.kind===`rejected`&&e.failure.code===`configured_server_stale_preview`}function wn(e){return e.confirm({title:`Discard unsaved changes?`,message:`Your configured-server draft and preview will be lost.`,confirmLabel:`Discard changes`,tone:`danger`})}function Tn(e){if(e instanceof J)return e.failure.message;throw e}function En(e){return typeof e==`string`?`/admin/servers/${encodeURIComponent(e)}`:`/admin/servers/${e.source}/${encodeURIComponent(e.id)}`}function Dn(e){if(!e.startsWith(`/admin/servers/`))return null;let t=e.slice(15).split(`#`,1)[0];if(!t)return null;let n;try{n=decodeURIComponent(t)}catch{n=t}if(n===`new`)return null;let[r,...i]=n.split(`/`);return(r===`mcpServers`||r===`mcpTemplates`)&&i.length>0?{source:r,id:i.join(`/`)}:n}function On({inventory:e,draft:t,disabled:r,refreshBusy:i,refreshError:a,onToolChange:o,onBulkChange:s,onModelChange:l,onRefresh:f}){let[p,h]=(0,Y.useState)(``),[_,v]=(0,Y.useState)(`all`),y=(0,Y.useMemo)(()=>{let n=p.trim().toLowerCase();return e.rows.filter(e=>{let r=t[e.name]??{enabled:e.enabled,descriptionOverride:e.descriptionOverride??``},i=!n||e.name.toLowerCase().includes(n)||e.effectiveDescription?.toLowerCase().includes(n)||e.upstreamDescription?.toLowerCase().includes(n),a=_===`all`||_===`enabled`&&r.enabled||_===`disabled`&&!r.enabled||_===`unresolved`&&e.unresolved;return i&&a})},[t,_,e.rows,p]),b=y.map(e=>e.name),x=(0,Y.useMemo)(()=>Array.from(new Set([`gpt-4o`,`gpt-4o-mini`,`gpt-3.5-turbo`,e.model].filter(Boolean))),[e.model]),C=(0,Y.useMemo)(()=>{let n=0,r=0;for(let i of e.rows)t[i.name]?.enabled??i.enabled?r+=i.approximateTokens:n+=1;return{disabled:n,enabledTokens:r}},[t,e.rows]),E=An(e,a),D=kn(e),k=!!a||e.inspection?.retryable===!0;return(0,X.jsxs)(O,{className:`configured-tool-table`,gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-end`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`Configured Tool Selection`}),(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[e.counts.observed,` observed, `,C.disabled,` disabled, `,e.counts.unresolved,` `,`unresolved`]}),E?(0,X.jsxs)(`div`,{role:a||e.inspection?.status===`failed`?`alert`:`status`,"aria-live":a||e.inspection?.status===`failed`?void 0:`polite`,children:[(0,X.jsx)(d,{c:a||e.inspection?.status===`failed`?`red`:`yellow`,size:`xs`,children:E}),D.length>0?(0,X.jsx)(O,{component:`ul`,gap:2,m:0,pl:`md`,children:D.map(e=>(0,X.jsxs)(d,{component:`li`,c:`red`,size:`xs`,style:{overflowWrap:`anywhere`},children:[e.instanceId,`: `,e.error]},`${e.instanceId}:${e.error}`))}):null]}):null]}),(0,X.jsxs)(n,{align:`flex-end`,gap:`xs`,children:[(0,X.jsx)(m,{variant:`default`,leftSection:(0,X.jsx)(ge,{size:15}),loading:i,disabled:r||i,onClick:()=>void f(),children:k?`Retry`:`Refresh`}),(0,X.jsx)(S,{label:`Estimate model`,"aria-label":`Token estimate model`,value:e.model,data:x,allowDeselect:!1,disabled:r||i,onChange:e=>{e&&l(e)}})]})]}),(0,X.jsxs)(n,{align:`flex-end`,grow:!0,children:[(0,X.jsx)(w,{label:`Search tools`,leftSection:(0,X.jsx)(ue,{size:15}),value:p,onChange:e=>h(e.currentTarget.value)}),(0,X.jsx)(A,{"aria-label":`Tool status filter`,value:_,onChange:e=>v(e),data:[{label:`All`,value:`all`},{label:`Enabled`,value:`enabled`},{label:`Disabled`,value:`disabled`},{label:`Unresolved`,value:`unresolved`}]})]}),(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[y.length,` visible tools, approximately `,C.enabledTokens,` enabled tokens`]}),(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsxs)(m,{size:`compact-xs`,variant:`default`,disabled:r||b.length===0,onClick:()=>s(b,!0),children:[`Enable visible (`,b.length,`)`]}),(0,X.jsxs)(m,{size:`compact-xs`,variant:`default`,disabled:r||b.length===0,onClick:()=>s(b,!1),children:[`Disable visible (`,b.length,`)`]})]})]}),(0,X.jsx)(`div`,{className:`configured-tool-rows`,children:y.map(e=>{let i=t[e.name]??{enabled:e.enabled,descriptionOverride:e.descriptionOverride??``};return(0,X.jsxs)(`div`,{className:`configured-tool-row`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{className:`configured-tool-identity`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.name}),e.stale?(0,X.jsx)(u,{color:`orange`,children:`last observed`}):null,e.unresolved?(0,X.jsx)(u,{color:`yellow`,children:`unresolved`}):null,e.observedInSomeInstances?(0,X.jsxs)(u,{variant:`outline`,children:[e.observedInstanceCount,`/`,e.activeInstanceCount,` instances`]}):null,(0,X.jsxs)(u,{variant:`outline`,children:[`~`,e.approximateTokens,` tokens`]})]}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:e.effectiveDescription??`No upstream description`}),e.descriptionOverridden&&e.upstreamDescription?(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[`Upstream: `,e.upstreamDescription]}):null]}),(0,X.jsx)(T,{"aria-label":`Enable ${e.name}`,checked:i.enabled,disabled:r,onChange:t=>o(e.name,{enabled:t.currentTarget.checked})})]}),(0,X.jsxs)(n,{mt:`xs`,align:`flex-end`,wrap:`nowrap`,children:[(0,X.jsx)(w,{className:`configured-tool-description-input`,label:`Description override`,placeholder:e.upstreamDescription??`Add a description`,value:i.descriptionOverride,disabled:r,onChange:t=>o(e.name,{descriptionOverride:t.currentTarget.value})}),(0,X.jsx)(g,{label:`Reset to upstream description`,children:(0,X.jsx)(c,{"aria-label":`Reset ${e.name} description`,variant:`default`,disabled:r||!i.descriptionOverride,onClick:()=>o(e.name,{descriptionOverride:``}),children:(0,X.jsx)(ye,{size:16})})})]})]},e.name)})}),e.targetEnabled?null:(0,X.jsx)(d,{c:`yellow`,size:`xs`,children:`This target is disabled. Tool changes will take effect when the target is enabled.`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Selection uses a denylist. Tools discovered later are enabled unless explicitly disabled.`})]})}function kn(e){return(e.inspection?.instances??[]).flatMap(e=>{let t=e.error?.trim();return e.status===`complete`||!t?[]:[{instanceId:e.instanceId,error:t.length>240?`${t.slice(0,237)}...`:t}]}).slice(0,5)}function An(e,t){if(t)return t;let n=e.inspection;if(n?.status===`in_progress`)return`Refreshing live tool inventory from connected instances.`;if(!(n?.status===`complete`&&e.freshness===`live`))switch(n?.reason){case`target_disabled`:return`This target is disabled, so live tool inventory cannot be refreshed.`;case`target_disconnected`:return`This configured server is disconnected. Reconnect it before refreshing live tool inventory.`;case`no_active_instances`:return`This Template Server has no active instances to inspect.`;case`active_instance_unavailable`:return`An active instance became unavailable before its tools could be inspected.`;case`inspection_failed`:return`Live tool inspection failed for one or more active instances.`;case`snapshot_unavailable`:return`No complete live tool snapshot is available yet.`;case`active_instances_changed`:return`The active instance set changed during inspection. Retry to inspect the current instances.`;default:return e.freshness===`unavailable`?`Live inventory is unavailable. Rows may come from the last complete snapshot or stored configuration.`:void 0}}function jn({model:e,deleteModel:t}){let{state:i}=e,a=(0,Y.useRef)(null),o=i.status===`loaded`&&!!i.preview?.validation.errors.some(e=>i.detail.editContract.fieldGroups.flatMap(e=>e.fields).some(t=>$(t.fieldPath)===$(e.fieldPath)&&!Mn(t)));if((0,Y.useEffect)(()=>{o&&a.current&&(a.current.open=!0)},[o]),i.status===`list`)return(0,X.jsx)(Q,{title:`Edit server`,utility:`select a target`,icon:(0,X.jsx)(q,{size:17}),children:(0,X.jsxs)(O,{className:`edit-empty-state`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:`Select Edit server to change target settings.`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Edit fields -> Preview change -> Review result`})]})});if(i.status===`loading`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsx)(Et,{message:`Loading server detail.`})});if(i.status===`committed`||i.status===`committedRefreshFailed`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(r,{color:`teal`,role:`status`,children:i.success}),i.warning?(0,X.jsx)(r,{color:`yellow`,role:`status`,children:i.warning}):null,i.status===`committed`?(0,X.jsx)(Et,{message:`Refreshing the committed server detail.`}):(0,X.jsx)(r,{color:`yellow`,role:`status`,children:i.message}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Editing stays unavailable until the runtime returns a fresh server detail model.`}),(0,X.jsxs)(n,{children:[i.status===`committedRefreshFailed`?(0,X.jsx)(m,{onClick:()=>void e.open(i.serverId),children:`Retry detail`}):null,(0,X.jsx)(m,{variant:`default`,onClick:()=>void e.close(`/admin/servers`),children:`Back to servers`})]})]})});if(i.status===`missing`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(k,{order:3,children:`Server target not found`}),(0,X.jsxs)(d,{c:`dimmed`,children:[i.serverId,` is no longer available. It may have been renamed or removed. Return to the list, refresh, and open the current target ID if a rename succeeded.`]}),(0,X.jsx)(r,{color:`yellow`,variant:`light`,children:`Old detail URLs are not aliases. Use the server list after a rename instead of bookmarking the previous ID.`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>e.close(`/admin/servers`),children:`Back to servers`})]})});if(i.status===`failed`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.message}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Refresh the console or return to the server list, then retry. Preserve any non-secret request ID from the error when asking for support.`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>e.close(`/admin/servers`),children:`Back to servers`})]})});let s=At(i.fieldDraft,i.detail.server.transport.type),c=i.detail.server.source===`mcpTemplates`,l=i.detail.editContract.fieldGroups.map(e=>({...e,fields:e.fields.filter(e=>jt(e,s))})).filter(e=>e.fields.length>0),f=l.map(e=>({...e,fields:e.fields.filter(Mn)})).filter(e=>e.fields.length>0),p=l.flatMap(e=>e.fields).filter(e=>!Mn(e)),h=bn(i),g=t=>{let r=t.fieldPath[0]===`transport`?t.fieldPath[1]:t.fieldPath[0],a=!!(r&&i.clearedTransportOverrides.includes(r)),o=[`timeout`,`connectionTimeout`,`requestTimeout`].includes(t.fieldPath[1]??``)?{...t,label:`${t.label} (ms)`}:t;return(0,X.jsxs)(O,{gap:4,children:[t.control===`secret`?(0,X.jsx)(tn,{field:o,draft:i.secretDraft[$(t.fieldPath)],onChange:n=>e.changeSecret(t.fieldPath,n)}):(0,X.jsx)($t,{field:o,value:i.fieldDraft[$(t.fieldPath)],onChange:n=>e.changeField(t.fieldPath,n)}),t.overrideSupported&&r?(0,X.jsxs)(n,{justify:`space-between`,gap:`xs`,children:[(0,X.jsx)(u,{variant:`outline`,children:a?`will inherit`:t.source===`inherited`?`inherited`:t.source}),t.clearOverrideSupported?(0,X.jsx)(m,{size:`compact-xs`,variant:`subtle`,onClick:()=>e.changeTransportOverride(r,!a),children:a?`Restore override`:`Clear override`}):null]}):null]},$(t.fieldPath))};return(0,X.jsx)(Q,{title:`Edit server`,utility:i.detail.server.enabled?`enabled`:`disabled`,icon:(0,X.jsx)(q,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Configured Server Target`}),(0,X.jsxs)(n,{gap:`xs`,align:`center`,children:[(0,X.jsx)(k,{order:2,children:i.detail.server.id}),(0,X.jsx)(u,{color:i.detail.server.enabled?`teal`:`yellow`,variant:`light`,children:i.detail.server.enabled?`enabled`:`disabled`}),(0,X.jsx)(u,{variant:`outline`,children:c?`Template`:`Static`}),i.detail.server.definition?.authority&&i.detail.server.definition.authority!==`sole`?(0,X.jsx)(u,{color:i.detail.server.definition.authority===`authoritative`?`teal`:`yellow`,children:i.detail.server.definition.authority}):null]}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:ot(i.detail.server)}),(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[i.detail.server.definition?.qualifiedId??`${i.detail.server.source}/${i.detail.server.id}`,` `,`· Draft changes stay local until preview.`]})]}),(0,X.jsx)(m,{variant:`default`,onClick:()=>e.close(`/admin/servers`),children:`Back`})]}),c?(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsx)(d,{fw:800,children:`Template definition`}),(0,X.jsxs)(u,{variant:`outline`,children:[i.detail.server.runtime?.activeInstanceCount??0,` active instance`,(i.detail.server.runtime?.activeInstanceCount??0)===1?``:`s`]})]}),(0,X.jsx)(d,{size:`sm`,c:`dimmed`,children:`This is a definition, not a live instance. Rename or structural changes retire active instances; metadata-only changes retain them. Future matching requests recreate retired instances lazily.`}),(0,X.jsxs)(d,{size:`sm`,children:[`Request Context variables:`,` `,i.detail.server.templateAnalysis?.unresolvedVariables.join(`, `)||`none`]}),i.detail.server.templateAnalysis?.syntax.valid===!1?(0,X.jsx)(r,{color:`red`,children:`Template syntax is invalid. Preview lists each affected field.`}):null]})}):null,f.map(e=>(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:e.label}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:Qt(e.id)})]}),(0,X.jsxs)(u,{variant:`outline`,children:[e.fields.length,` fields`]})]}),e.fields.map(g)]})},e.id)),i.detail.toolInventory?(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsx)(On,{inventory:i.detail.toolInventory,draft:i.toolDraft,disabled:i.applyBusy,refreshBusy:i.toolInventoryBusy,refreshError:i.toolInventoryError,onToolChange:e.changeTool,onBulkChange:e.changeVisibleTools,onModelChange:e.changeToolModel,onRefresh:()=>e.refreshToolInventory?.()})}):null,p.length>0?(0,X.jsxs)(`details`,{ref:a,className:`advanced-settings`,children:[(0,X.jsx)(`summary`,{children:`Advanced settings`}),(0,X.jsxs)(O,{gap:`sm`,mt:`sm`,children:[(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Timeouts use milliseconds. Prefer Connection Timeout and Request Timeout over Deprecated Timeout.`}),p.map(g)]})]}):null,(0,X.jsx)(b,{className:`edit-section instruction-override-editor`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`Server instructions`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Choose whether clients receive upstream instructions, an operator replacement, or no instructions.`})]}),(0,X.jsxs)(u,{variant:`outline`,children:[`Effective:`,` `,i.instructionOverride.mode===`replace`?`replacement`:i.instructionOverride.mode]})]}),(0,X.jsx)(A,{fullWidth:!0,"aria-label":`Instruction override outcome`,value:i.instructionOverride.mode,onChange:t=>e.changeInstructionOverride(t),data:[{value:`upstream`,label:`Use upstream`},{value:`replace`,label:`Replace`},{value:`suppress`,label:`Suppress`}]}),i.instructionOverride.mode===`replace`?(0,X.jsx)(j,{label:`Replacement instructions`,minRows:5,value:i.instructionOverride.value,onChange:t=>e.changeInstructionOverride(`replace`,t.currentTarget.value)}):(0,X.jsx)(d,{size:`sm`,className:`instruction-override-readonly`,children:i.instructionOverride.mode===`upstream`?`Upstream state is preserved. Effective instructions are resolved when the server connects.`:`Effective instructions are an intentional empty value.`})]})}),(0,X.jsxs)(n,{className:`draft-action-bar`,justify:`space-between`,gap:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(u,{color:i.dirty?`yellow`:`gray`,variant:i.dirty?`light`:`outline`,children:i.dirty?`Unsaved changes`:`No changes yet`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Preview validates the draft without writing config. Leaving this page with unsaved changes asks for confirmation.`})]}),(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(m,{loading:i.previewBusy,disabled:!i.dirty||i.previewBusy||i.applyBusy||i.toolInventoryBusy,onClick:()=>void e.preview(`auto`),children:`Preview change`}),i.preview&&!c?(0,X.jsx)(m,{variant:`default`,loading:i.previewBusy,disabled:i.applyBusy||i.toolInventoryBusy,onClick:()=>void e.preview(`manual`),children:`Rerun connectivity`}):null]})]}),i.previewError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.previewError}):null,i.applyError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.applyError}):null,i.applyWarning?(0,X.jsx)(r,{color:`yellow`,role:`status`,children:i.applyWarning}):null,i.applySuccess?(0,X.jsx)(r,{color:`teal`,role:`status`,children:i.applySuccess}):null,i.preview?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(n,{justify:`flex-end`,align:`center`,children:[h.eligible?null:(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:h.reason}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(le,{size:16}),loading:i.applyBusy,disabled:!h.eligible||i.applyBusy||i.toolInventoryBusy,onClick:()=>void e.apply(),children:`Apply changes`})]}),(0,X.jsx)(rn,{preview:i.preview})]}):null,!i.dirty&&i.detail.editContract.capabilities.delete.supported?(0,X.jsx)(dn,{model:t,target:i.detail.server.target}):null]})})}function Mn(e){return e.control===`secret`?!1:e.fieldPath[0]!==`transport`||[`type`,`command`,`args`,`url`].includes(e.fieldPath[1]??``)}function Nn({state:e,onServerAction:t,onOpenServerDetail:r,onConfigureCustomServer:i}){let[a,s]=(0,Y.useState)(``),[c,l]=(0,Y.useState)(`all`),[u,f]=(0,Y.useState)(`all`),h=o(`(max-width: 620px)`,!1),g=(0,Y.useMemo)(()=>tt(e.configuredServers,a,c).filter(e=>u===`all`||e.source===u),[c,a,u,e.configuredServers]),_=e.configuredServers.length===0;return(0,X.jsxs)(Q,{title:`Server inventory`,utility:`${g.length} of ${e.configuredServers.length} targets`,icon:(0,X.jsx)(Ce,{size:17}),children:[_?null:(0,X.jsxs)(n,{align:`flex-end`,gap:`sm`,className:`server-filter-row`,children:[(0,X.jsx)(w,{className:`server-search`,leftSection:(0,X.jsx)(ue,{size:16}),label:`Search servers`,type:`search`,value:a,onChange:e=>s(e.currentTarget.value)}),(0,X.jsx)(A,{"aria-label":`Server status filter`,value:c,onChange:e=>l(e),data:[{label:`All`,value:`all`},{label:`Enabled`,value:`enabled`},{label:`Disabled`,value:`disabled`}]}),(0,X.jsx)(A,{"aria-label":`Server source filter`,value:u,onChange:e=>f(e),data:[{label:`Both`,value:`all`},{label:`Static`,value:`mcpServers`},{label:`Template`,value:`mcpTemplates`}]}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(de,{size:16}),onClick:()=>void i?.(),children:`Configure Custom Server`})]}),_?(0,X.jsxs)(O,{gap:`sm`,className:`actionable-empty-state`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`No servers configured`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Configure a target to start routing MCP capabilities and observing runtime activity.`})]}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(de,{size:16}),onClick:()=>void i?.(),children:`Configure server`})]}):g.length===0?(0,X.jsxs)(O,{gap:`sm`,className:`actionable-empty-state`,children:[(0,X.jsx)(Et,{message:`No servers match the current search and status filter.`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>{s(``),l(`all`),f(`all`)},children:`Clear filters`})]}):h?(0,X.jsx)(`div`,{className:`server-mobile-list`,children:g.map(n=>(0,X.jsx)(In,{server:n,mutation:Pn(e,n),onServerAction:t,onOpenServerDetail:r},`${n.source}:${n.id}`))}):(0,X.jsx)(`div`,{className:`server-table-view`,children:(0,X.jsx)(p.ScrollContainer,{minWidth:720,children:(0,X.jsxs)(p,{className:`admin-table`,verticalSpacing:`xs`,children:[(0,X.jsx)(p.Thead,{children:(0,X.jsxs)(p.Tr,{children:[(0,X.jsx)(p.Th,{children:`Server`}),(0,X.jsx)(p.Th,{children:`Status`}),(0,X.jsx)(p.Th,{children:`Transport`}),(0,X.jsx)(p.Th,{children:`Secrets`}),(0,X.jsx)(p.Th,{children:`Action`})]})}),(0,X.jsx)(p.Tbody,{children:g.map(n=>(0,X.jsx)(Ln,{server:n,mutation:Pn(e,n),onServerAction:t,onOpenServerDetail:r},`${n.source}:${n.id}`))})]})})})]})}function Pn(e,t){return e.serverMutations[`${t.source}/${t.id}`]??(t.source===`mcpServers`?e.serverMutations[t.id]:void 0)}function Fn(e,t,n){return t.source===`mcpTemplates`?e?.(t.id,n,t.source):e?.(t.id,n)}function In({server:e,mutation:t,onServerAction:r,onOpenServerDetail:i}){let a=e.enabled?`disable`:`enable`,o=t?.state===`busy`,s=st(e),l=lt(e,a),f=!ct(e)||!l.available;return(0,X.jsxs)(`article`,{className:`server-mobile-card${t?` server-action-${t.state}`:``}`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{className:`server-mobile-identity`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.id}),(0,X.jsx)(u,{size:`xs`,variant:`outline`,children:e.source===`mcpTemplates`?`Template`:`Static`}),e.definition?.authority&&e.definition.authority!==`sole`?(0,X.jsx)(u,{size:`xs`,color:e.definition.authority===`authoritative`?`teal`:`yellow`,children:e.definition.authority}):null]}),s.length>0?(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:s.join(` / `)}):null]}),(0,X.jsx)(u,{color:e.enabled?`teal`:`yellow`,variant:`light`,children:e.enabled?`enabled`:`disabled`})]}),(0,X.jsxs)(`dl`,{className:`server-mobile-facts`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Transport`}),(0,X.jsx)(`dd`,{children:ot(e)})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Secrets`}),(0,X.jsx)(`dd`,{children:ht(e)})]})]}),t?.message?(0,X.jsx)(d,{size:`xs`,c:t.state===`failed`?`red`:`dimmed`,children:t.message}):null,(0,X.jsxs)(n,{gap:`sm`,justify:`space-between`,wrap:`nowrap`,className:`server-mobile-actions`,children:[(0,X.jsx)(g,{label:`Edit ${e.id}`,children:(0,X.jsx)(c,{"aria-label":`Edit ${e.source===`mcpTemplates`?`template`:`static`} ${e.id} server`,size:`lg`,variant:`default`,onClick:()=>void i?.({source:e.source,id:e.id}),children:(0,X.jsx)(q,{size:16})})}),(0,X.jsx)(Rn,{server:e,busy:o,action:a,actionLabel:l.label,disabled:o||f,onChange:()=>void Fn(r,e,a)})]})]})}function Ln({server:e,mutation:t,onServerAction:r,onOpenServerDetail:i}){let a=e.enabled?`disable`:`enable`,o=t?.state===`busy`,s=st(e),l=lt(e,a),f=!ct(e)||!l.available;return(0,X.jsxs)(p.Tr,{className:t?`server-action-${t.state}`:void 0,children:[(0,X.jsxs)(p.Td,{children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.id}),(0,X.jsx)(u,{size:`xs`,variant:`outline`,children:e.source===`mcpTemplates`?`Template`:`Static`}),e.definition?.authority&&e.definition.authority!==`sole`?(0,X.jsx)(u,{size:`xs`,color:e.definition.authority===`authoritative`?`teal`:`yellow`,children:e.definition.authority}):null]}),s.length>0?(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:s.join(` / `)}):null,t?.message?(0,X.jsx)(d,{size:`xs`,c:t.state===`failed`?`red`:`dimmed`,children:t.message}):null]}),(0,X.jsx)(p.Td,{children:(0,X.jsx)(u,{color:e.enabled?`teal`:`yellow`,variant:`light`,children:e.enabled?`enabled`:`disabled`})}),(0,X.jsx)(p.Td,{children:ot(e)}),(0,X.jsx)(p.Td,{children:ht(e)}),(0,X.jsx)(p.Td,{children:(0,X.jsxs)(n,{gap:`sm`,wrap:`nowrap`,justify:`flex-end`,children:[(0,X.jsx)(g,{label:`Edit ${e.id}`,children:(0,X.jsx)(c,{"aria-label":`Edit ${e.source===`mcpTemplates`?`template`:`static`} ${e.id} server`,size:`lg`,variant:`default`,onClick:()=>void i?.({source:e.source,id:e.id}),children:(0,X.jsx)(q,{size:16})})}),(0,X.jsx)(Rn,{server:e,busy:o,action:a,actionLabel:l.label,disabled:o||f,onChange:()=>void Fn(r,e,a)})]})})]})}function Rn({server:e,busy:t,action:r,actionLabel:i,disabled:a,onChange:o}){return(0,X.jsxs)(n,{gap:7,wrap:`nowrap`,className:`server-state-control`,children:[t?(0,X.jsx)(x,{"aria-label":`Updating ${e.id}`,size:14}):null,(0,X.jsx)(T,{"aria-label":i,checked:e.enabled,color:`teal`,disabled:a,onChange:o,styles:{input:{cursor:`pointer`,zIndex:1}}}),(0,X.jsx)(d,{className:`server-state-label`,size:`xs`,fw:700,children:r===`disable`?`Enabled`:`Disabled`})]})}function zn({facts:e,onCopyText:t}){return(0,X.jsx)(Q,{title:`Recent audit facts`,utility:`redacted`,icon:(0,X.jsx)(_e,{size:17}),children:e.length===0?(0,X.jsx)(Et,{message:`No recent admin audit facts.`}):(0,X.jsx)(O,{gap:`xs`,children:e.map(e=>(0,X.jsx)(Z,{label:e.operationName,value:e.result,meta:e.target?.id??e.operationId??`-`,description:e.timestamp,copyLabel:e.request?.requestId?`requestId`:void 0,copyValue:e.request?.requestId,onCopyText:t},e.operationId??`${e.operationName}-${e.timestamp}`))})})}function Bn({model:e,navigate:t}){let{state:r,configuredServers:i}=e,a=(r.status?.audit.facts??[]).filter(e=>e.result===`failed`).length,o=(r.status?.oauth.services??[]).filter(it).length,s=rt(r.configuredServers),[c,l]=(0,Y.useState)(null),u=r.status?.runtime;async function f(){await i.create.open()}async function p(e,t){try{await i.copy(e,t),l(`${bt(e)} copied.`)}catch{l(`Could not copy ${bt(e)}. Select the value manually.`)}}return(0,X.jsxs)(`section`,{"aria-labelledby":`runtime-operations-title`,className:`operations-workspace`,children:[(0,X.jsx)(k,{id:`runtime-operations-title`,order:2,className:`sr-only`,children:`Runtime operations`}),(0,X.jsx)(Un,{title:`Overview`,description:`Runtime summaries for ${r.session?.account.username??`operator`} · updated ${r.lastUpdatedAt??`never`}`}),(0,X.jsxs)(`div`,{className:`runtime-status-strip`,role:`status`,"aria-label":`Runtime status and freshness`,children:[(0,X.jsxs)(n,{gap:`xs`,wrap:`nowrap`,className:`runtime-status-main`,children:[(0,X.jsx)(`span`,{className:`runtime-live-dot`}),(0,X.jsx)(d,{fw:800,size:`sm`,children:`Runtime online`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,className:`truncate`,children:u?.externalUrl??`Local runtime`})]}),(0,X.jsxs)(n,{gap:`lg`,wrap:`nowrap`,className:`runtime-status-facts`,children:[(0,X.jsxs)(d,{size:`xs`,c:`dimmed`,children:[`Version `,(0,X.jsx)(`strong`,{children:u?.runtimeVersion??`unavailable`})]}),(0,X.jsxs)(d,{size:`xs`,c:`dimmed`,children:[`Updated `,(0,X.jsx)(`strong`,{children:r.lastUpdatedAt??`never`})]})]})]}),(0,X.jsxs)(h,{cols:{base:2,sm:4},spacing:`sm`,className:`summary-grid`,children:[(0,X.jsx)(Gn,{label:`Enabled servers`,value:nt(r.configuredServers),tone:`good`,icon:`01`,href:`/admin/servers`,onNavigate:()=>t(`servers`)}),(0,X.jsx)(Gn,{label:`Disabled servers`,value:s,tone:`warn`,icon:`02`,href:`/admin/servers`,onNavigate:()=>t(`servers`)}),(0,X.jsx)(Gn,{label:`OAuth attention`,value:o,tone:o>0?`warn`:`good`,icon:`03`,href:`/admin/oauth`,onNavigate:()=>t(`oauth`)}),(0,X.jsx)(Gn,{label:`Failed audits`,value:a,tone:a>0?`bad`:`good`,icon:`04`,href:`/admin/audit`,onNavigate:()=>t(`audit`)})]}),(0,X.jsxs)(`div`,{className:`dashboard-grid`,children:[(0,X.jsxs)(`section`,{className:`attention-panel`,"aria-labelledby":`attention-title`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,mb:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Triage`}),(0,X.jsx)(k,{id:`attention-title`,order:3,children:`Needs attention`})]}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(de,{size:16}),onClick:()=>void f(),children:`Configure server`})]}),(0,X.jsxs)(O,{gap:0,className:`attention-list`,children:[s>0?(0,X.jsx)(Wn,{icon:(0,X.jsx)(he,{size:17}),label:`${s} disabled ${s===1?`server`:`servers`}`,detail:`Review availability before enabling a target.`,href:`/admin/servers`,onNavigate:()=>t(`servers`)}):null,o>0?(0,X.jsx)(Wn,{icon:(0,X.jsx)(Ee,{size:17}),label:`${o} OAuth ${o===1?`service needs`:`services need`} action`,detail:`Authorization or restart is required.`,href:`/admin/oauth`,onNavigate:()=>t(`oauth`)}):null,a>0?(0,X.jsx)(Wn,{icon:(0,X.jsx)(_e,{size:17}),label:`${a} failed ${a===1?`operation`:`operations`}`,detail:`Inspect recent redacted audit facts.`,href:`/admin/audit`,onNavigate:()=>t(`audit`)}):null,s===0&&o===0&&a===0?(0,X.jsxs)(`div`,{className:`attention-clear`,children:[(0,X.jsx)(me,{size:18}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`No action required`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Configured servers and runtime services report a clear state.`})]})]}):null]})]}),(0,X.jsx)(Q,{title:`Runtime identity`,utility:`current target`,icon:(0,X.jsx)(`span`,{className:`runtime-live-dot`}),children:u?(0,X.jsxs)(h,{cols:1,spacing:`sm`,className:`runtime-identity-grid`,children:[(0,X.jsx)(Z,{label:`Version`,value:u.runtimeVersion}),(0,X.jsx)(Z,{label:`External URL`,value:u.externalUrl??`-`,copyLabel:`externalUrl`,onCopyText:p,wrapValue:!0}),(0,X.jsx)(Z,{label:`Runtime scope`,value:u.runtimeScopeId,copyLabel:`runtimeScopeId`,onCopyText:p,wrapValue:!0})]}):(0,X.jsx)(d,{c:`dimmed`,children:`Runtime status has not loaded.`})})]}),(0,X.jsx)(Kn,{message:c})]})}function Vn({model:e}){let{state:t,configuredServers:n}=e,r=n.create.state.status!==`idle`,i=n.edit.state.status!==`list`;return(0,X.jsxs)(`section`,{"aria-labelledby":`servers-workspace-title`,className:`operations-workspace`,children:[(0,X.jsx)(Un,{title:`Configured servers`,titleId:`servers-workspace-title`,description:`${t.configuredServers.length} configured targets · updated ${t.lastUpdatedAt??`never`}`}),!r&&!i&&n.deletionNotice?(0,X.jsx)(Tt,{result:n.deletionNotice,dismiss:n.dismissDeletionNotice}):null,(0,X.jsx)(`div`,{className:`inventory-column server-browse-workspace`,hidden:r||i,children:(0,X.jsx)(Nn,{state:t,onServerAction:n.mutate,onOpenServerDetail:n.edit.open,onConfigureCustomServer:n.create.open})}),r||i?(0,X.jsx)(`div`,{className:`server-task-workspace`,children:r?(0,X.jsx)(an,{model:n.create}):(0,X.jsx)(jn,{model:n.edit,deleteModel:n.delete})}):null]})}function Hn({model:e}){let{state:t,configuredServers:n}=e,[r,i]=(0,Y.useState)(null);async function a(e,t){try{await n.copy(e,t),i(`${bt(e)} copied.`)}catch{i(`Could not copy ${bt(e)}. Select the value manually.`)}}return(0,X.jsxs)(`section`,{"aria-labelledby":`audit-workspace-title`,className:`operations-workspace`,children:[(0,X.jsx)(Un,{title:`Audit trail`,titleId:`audit-workspace-title`,description:`Recent redacted Admin Operations · updated ${t.lastUpdatedAt??`never`}`}),(0,X.jsx)(zn,{facts:t.status?.audit.facts??[],onCopyText:a}),(0,X.jsx)(Kn,{message:r})]})}function Un({title:e,titleId:t,description:r}){return(0,X.jsx)(n,{justify:`space-between`,align:`flex-start`,className:`workspace-heading`,children:(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Operator workspace / live`}),(0,X.jsx)(k,{id:t,order:2,children:e}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:r})]})})}function Wn({icon:e,label:t,detail:n,href:r,onNavigate:i}){return(0,X.jsxs)(`a`,{className:`attention-row`,href:r,onClick:e=>{qn(e)&&(e.preventDefault(),i())},children:[(0,X.jsx)(`span`,{className:`attention-icon`,children:e}),(0,X.jsxs)(`span`,{className:`attention-copy`,children:[(0,X.jsx)(d,{component:`span`,fw:800,size:`sm`,children:t}),(0,X.jsx)(d,{component:`span`,c:`dimmed`,size:`xs`,children:n})]}),(0,X.jsx)(ie,{size:16})]})}function Gn({label:e,value:t,tone:r,icon:i,href:a,onNavigate:o}){return(0,X.jsx)(b,{component:`a`,href:a,className:`summary-counter summary-link summary-${r}`,withBorder:!0,onClick:e=>{qn(e)&&(e.preventDefault(),o())},children:(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{size:`xs`,c:`dimmed`,fw:800,tt:`uppercase`,children:e}),(0,X.jsx)(d,{className:`summary-value`,children:t})]}),(0,X.jsxs)(O,{gap:4,align:`flex-end`,children:[(0,X.jsx)(d,{className:`summary-index`,children:i}),(0,X.jsx)(ie,{size:15,"aria-hidden":`true`})]})]})})}function Kn({message:e}){return(0,X.jsx)(`div`,{"aria-live":`polite`,children:e?(0,X.jsx)(r,{color:e.startsWith(`Could not`)?`red`:`teal`,mt:`sm`,children:e}):null})}function qn(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}var Jn=`modulepreload`,Yn=function(e){return`/admin/`+e},Xn={},Zn=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}r=o(t.map(t=>{if(t=Yn(t,n),t=s(t),t in Xn)return;Xn[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Jn,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Qn=(0,Y.lazy)(()=>Zn(()=>import(`./admin-AboutRuntimeWorkspace-DH2QC2nJ.js`).then(e=>({default:e.AboutRuntimeWorkspace})),__vite__mapDeps([0,1,2,3,4]))),$n=(0,Y.lazy)(()=>Zn(()=>import(`./admin-BackendLogsWorkspace-BKavXT9B.js`).then(e=>({default:e.BackendLogsWorkspace})),__vite__mapDeps([5,1,2,3,4,6]))),er=(0,Y.lazy)(()=>Zn(()=>import(`./admin-InstructionTemplatesWorkspace-CvG4EPdZ.js`).then(e=>({default:e.InstructionTemplatesWorkspace})),__vite__mapDeps([7,2,1,3,4,6]))),tr=(0,Y.lazy)(()=>Zn(()=>import(`./admin-OAuthServicesWorkspace-CcUSZCNL.js`).then(e=>({default:e.OAuthServicesWorkspace})),__vite__mapDeps([8,2,1,3,4,6]))),nr=(0,Y.lazy)(()=>Zn(()=>import(`./admin-PresetAuthoringWorkspace-BboJVBFl.js`).then(e=>({default:e.PresetAuthoringWorkspace})),__vite__mapDeps([9,2,1,3,4,6])));function rr({session:e}){let{state:t,loginBusy:r,navigation:i}=e,a=i.route,[o,s]=(0,Y.useState)(!1);if(t.view!==`console`)return(0,X.jsxs)(cr,{state:t,children:[t.view===`setupRequired`?(0,X.jsx)(ur,{}):null,t.view===`loading`||t.view===`login`?(0,X.jsx)(dr,{loading:t.view===`loading`||r,onLogin:e.login}):null]});return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`a`,{className:`skip-link`,href:`#admin-main`,children:`Skip to main content`}),(0,X.jsxs)(M,{className:`admin-app-shell`,header:{height:66},navbar:{width:232,breakpoint:`md`,collapsed:{mobile:!o}},padding:0,children:[(0,X.jsx)(M.Header,{"aria-label":`Admin Console`,className:`admin-app-header`,children:(0,X.jsxs)(n,{h:`100%`,px:`lg`,justify:`space-between`,wrap:`nowrap`,className:`command-bar`,children:[(0,X.jsxs)(n,{gap:`sm`,wrap:`nowrap`,children:[(0,X.jsx)(ee,{"aria-label":o?`Close operations navigation`:`Open operations navigation`,className:`mobile-navigation-toggle`,color:`var(--admin-ink)`,opened:o,size:`sm`,onClick:()=>s(e=>!e)}),(0,X.jsx)(`div`,{className:`brand-mark`,"aria-hidden":`true`,children:`1`}),(0,X.jsxs)(`div`,{className:`command-brand-copy`,children:[(0,X.jsx)(d,{className:`eyebrow command-eyebrow`,size:`xs`,children:`1MCP control plane`}),(0,X.jsx)(k,{order:1,size:`h4`,children:`Admin Console`})]})]}),(0,X.jsxs)(n,{gap:`xs`,wrap:`nowrap`,className:`global-actions`,children:[(0,X.jsxs)(`div`,{className:`runtime-live`,"aria-label":`Runtime online`,children:[(0,X.jsx)(`span`,{className:`runtime-live-dot`}),(0,X.jsx)(d,{size:`xs`,fw:800,children:`Runtime online`})]}),(0,X.jsx)(u,{className:`global-view-badge`,variant:`light`,color:yt(t),children:vt(t)}),(0,X.jsx)(g,{label:`Refresh runtime data`,children:(0,X.jsx)(c,{"aria-label":`Refresh runtime data`,color:`gray`,size:`lg`,variant:`subtle`,onClick:()=>void e.refresh(),children:(0,X.jsx)(ge,{size:17})})}),(0,X.jsx)(lr,{}),(0,X.jsxs)(`div`,{className:`operator-identity`,title:t.session?.account.role??`Admin session`,children:[(0,X.jsx)(Se,{size:16}),(0,X.jsx)(d,{className:`operator-name`,fw:700,size:`sm`,children:t.session?.account.username??`Operator`})]}),(0,X.jsx)(g,{label:`Log out`,children:(0,X.jsx)(c,{"aria-label":`Log out`,color:`red`,size:`lg`,variant:`subtle`,onClick:()=>void e.logout(),children:(0,X.jsx)(ce,{size:17})})})]})]})}),(0,X.jsxs)(M.Navbar,{className:`admin-app-navbar`,"aria-label":`Operations navigation`,children:[(0,X.jsxs)(O,{gap:`lg`,className:`nav-stack`,children:[(0,X.jsxs)(O,{gap:4,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`Manage`}),(0,X.jsx)(or,{icon:(0,X.jsx)(G,{size:17}),label:`Overview`,href:`/admin`,active:a===`dashboard`,onNavigate:()=>l(`dashboard`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(re,{size:17}),label:`Server inventory`,href:`/admin/servers`,active:a===`servers`,onNavigate:()=>l(`servers`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(xe,{size:17}),label:`Presets`,href:`/admin/presets`,active:a===`presets`,onNavigate:()=>l(`presets`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(Te,{size:17}),label:`Instructions`,href:`/admin/instructions`,active:a===`instructions`,onNavigate:()=>l(`instructions`)})]}),(0,X.jsxs)(O,{gap:4,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`Observe`}),(0,X.jsx)(or,{icon:(0,X.jsx)(le,{size:17}),label:`OAuth services`,href:`/admin/oauth`,active:a===`oauth`,onNavigate:()=>l(`oauth`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(K,{size:17}),label:`Audit trail`,href:`/admin/audit`,active:a===`audit`,onNavigate:()=>l(`audit`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(ve,{size:17}),label:`Backend logs`,href:`/admin/logs`,active:a===`logs`,onNavigate:()=>l(`logs`)})]}),(0,X.jsxs)(O,{gap:4,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`System`}),(0,X.jsx)(or,{icon:(0,X.jsx)(oe,{size:17}),label:`About`,href:`/admin/about`,active:a===`about`,onNavigate:()=>l(`about`)})]})]}),(0,X.jsxs)(O,{gap:`xs`,className:`nav-runtime-card`,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`Runtime target`}),(0,X.jsx)(d,{fw:800,className:`truncate`,children:gt(t.status?.runtime)}),(0,X.jsx)(d,{size:`xs`,c:`dimmed`,className:`truncate`,children:_t(t.status?.runtime)}),(0,X.jsx)(d,{size:`xs`,className:`nav-scope truncate`,children:t.status?.runtime.runtimeScopeId??`scope unavailable`})]})]}),(0,X.jsx)(M.Main,{id:`admin-main`,className:`admin-shell-main`,children:(0,X.jsxs)(O,{gap:`md`,className:`admin-console`,children:[(0,X.jsx)(fr,{state:t}),(0,X.jsx)(Y.Suspense,{fallback:(0,X.jsx)(ir,{}),children:(0,X.jsx)(ar,{session:e})})]})})]})]});function l(e){i.navigate(e),s(!1)}}function ir(){return(0,X.jsx)(b,{className:`operations-panel`,role:`status`,withBorder:!0,children:(0,X.jsx)(d,{c:`dimmed`,children:`Loading workspace...`})})}function ar({session:e}){let{state:t,navigation:n,configuredServers:r,presets:i}=e,a={state:t,logout:e.logout,refresh:e.refresh,configuredServers:r};switch(n.route){case`servers`:return(0,X.jsx)(Vn,{model:a});case`oauth`:return(0,X.jsx)(tr,{model:a,oauth:e.oauth,configureServer:a.configuredServers.create.open});case`audit`:return(0,X.jsx)(Hn,{model:a});case`presets`:return(0,X.jsx)(nr,{model:{...i,targets:i.targets.length>0?i.targets:t.configuredServers.map(e=>({name:e.id,tags:e.tags,enabled:e.enabled}))},runtimeScopeId:t.status?.runtime.runtimeScopeId});case`instructions`:return(0,X.jsx)(er,{model:e.instructions,runtimeScopeId:t.status?.runtime.runtimeScopeId});case`logs`:return(0,X.jsx)($n,{logs:e.logs,configureServer:a.configuredServers.create.open});case`about`:return(0,X.jsx)(Qn,{state:t});case`dashboard`:return(0,X.jsx)(Bn,{model:a,navigate:n.navigate})}}function or({icon:e,label:t,href:n,active:r=!1,onNavigate:i}){return(0,X.jsxs)(`a`,{href:n,"aria-current":r?`page`:void 0,className:`nav-item${r?` nav-item-active`:``}`,onClick:e=>{sr(e)&&(e.preventDefault(),i?.())},children:[e,(0,X.jsx)(d,{size:`sm`,fw:700,children:t})]})}function sr(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function cr({state:e,children:t}){return(0,X.jsxs)(`main`,{className:`admin-auth-shell`,"aria-label":`Admin authentication`,children:[(0,X.jsx)(`div`,{className:`auth-theme-control`,children:(0,X.jsx)(lr,{})}),(0,X.jsxs)(O,{gap:`md`,className:`admin-auth-card`,children:[(0,X.jsx)(fr,{state:e}),t]})]})}function lr(){let{colorScheme:e,setColorScheme:t}=l(),n=[{value:`auto`,label:`System`,icon:(0,X.jsx)(De,{size:16})},{value:`light`,label:`Light`,icon:(0,X.jsx)(fe,{size:16})},{value:`dark`,label:`Dark`,icon:(0,X.jsx)(we,{size:16})}];return(0,X.jsxs)(v,{position:`bottom-end`,shadow:`md`,width:170,children:[(0,X.jsx)(v.Target,{children:(0,X.jsx)(c,{"aria-label":`Choose color theme`,color:`gray`,size:`lg`,title:`Color theme`,variant:`subtle`,children:(0,X.jsx)(se,{size:17})})}),(0,X.jsxs)(v.Dropdown,{children:[(0,X.jsx)(v.Label,{children:`Color theme`}),n.map(n=>(0,X.jsx)(v.Item,{"aria-label":`${n.label} theme${e===n.value?`, selected`:``}`,leftSection:n.icon,rightSection:e===n.value?(0,X.jsx)(pe,{size:14}):null,onClick:()=>t(n.value),children:n.label},n.value))]})]})}function ur(){return(0,X.jsx)(b,{component:`section`,className:`operations-panel`,"aria-labelledby":`setup-required-title`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Runtime gate`}),(0,X.jsx)(k,{id:`setup-required-title`,order:2,children:`Setup required`})]}),(0,X.jsx)(u,{color:`yellow`,variant:`filled`,children:`No Admin Account`})]}),(0,X.jsx)(d,{c:`dimmed`,children:`Run CLI bootstrap from the runtime host, then refresh this page. The browser setup page does not create admin accounts.`}),(0,X.jsx)(N,{block:!0,children:`1mcp admin bootstrap --username operator --password 'use-a-long-random-password'`})]})})}function dr({loading:e,onLogin:t}){let[r,i]=(0,Y.useState)(``),[a,o]=(0,Y.useState)(``),[s,c]=(0,Y.useState)(!1);return(0,X.jsx)(b,{component:`section`,className:`login-panel`,"aria-labelledby":`login-title`,withBorder:!0,children:(0,X.jsx)(`form`,{onSubmit:n=>{n.preventDefault(),e||t?.({username:r,password:a})},children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Admin Session`}),(0,X.jsx)(k,{id:`login-title`,order:2,children:`Operator login`})]}),(0,X.jsx)(u,{variant:`light`,children:e?`Checking session`:`Login required`})]}),(0,X.jsx)(w,{label:`Username`,autoComplete:`username`,disabled:e,value:r,onChange:e=>i(e.currentTarget.value),required:!0}),(0,X.jsx)(E,{label:`Password`,autoComplete:`current-password`,disabled:e,value:a,onChange:e=>o(e.currentTarget.value),visible:s,onVisibilityChange:()=>c(e=>!e),visibilityToggleButtonProps:{"aria-label":s?`Hide password`:`Show password`,"aria-pressed":s,tabIndex:0,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),c(e=>!e))}},required:!0}),(0,X.jsx)(m,{type:`submit`,loading:e,disabled:e,children:e?`Checking`:`Log in`})]})})})}function fr({state:e}){let t=e.banner??(e.error?{kind:`error`,message:e.error}:null);return t?(0,X.jsx)(r,{color:t.kind===`error`?`red`:`teal`,role:t.kind===`error`?`alert`:`status`,children:t.message}):null}var pr=e(P(),1),mr=(0,Y.createContext)(null);function hr({children:e}){let[r,i]=(0,Y.useState)(null),a=(0,Y.useRef)(null),o=(0,Y.useRef)([]),s=(0,Y.useRef)(new WeakSet),c=(0,Y.useRef)(!1),l=(0,Y.useRef)(null),u=(0,Y.useRef)(null),p=(0,Y.useCallback)(e=>new Promise(t=>{let n={...e,resolve:t};if(a.current){o.current.push(n);return}u.current=document.activeElement instanceof HTMLElement?document.activeElement:null,a.current=n,(0,pr.flushSync)(()=>i(n))}),[]),h=(0,Y.useCallback)(e=>{let t=a.current;if(!t||c.current||s.current.has(t))return;c.current=!0,s.current.add(t),t.resolve(e);let n=o.current.shift()??null;a.current=n,(0,pr.flushSync)(()=>i(n)),window.setTimeout(()=>{c.current=!1,n?l.current?.focus():u.current?.focus()},0)},[]),g=(0,Y.useMemo)(()=>p,[p]);return(0,Y.useEffect)(()=>{r&&l.current?.focus()},[r]),(0,X.jsxs)(mr.Provider,{value:g,children:[e,r?(0,X.jsx)(`div`,{className:`confirmation-overlay`,role:`presentation`,children:(0,X.jsx)(t,{active:!0,children:(0,X.jsx)(b,{className:`confirmation-dialog`,withBorder:!0,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`admin-confirmation-title`,"aria-describedby":`admin-confirmation-message`,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),h(!1))},children:(0,X.jsxs)(O,{gap:`md`,children:[(0,X.jsx)(k,{id:`admin-confirmation-title`,order:3,children:r.title}),(0,X.jsx)(d,{id:`admin-confirmation-message`,children:r.message}),r.details?.length?(0,X.jsx)(f,{spacing:`xs`,size:`sm`,children:r.details.map(e=>(0,X.jsxs)(f.Item,{children:[(0,X.jsxs)(d,{span:!0,fw:700,children:[e.label,`:`,` `]}),(0,X.jsx)(d,{span:!0,children:e.value})]},`${e.label}:${e.value}`))}):null,(0,X.jsxs)(n,{justify:`flex-end`,children:[(0,X.jsx)(m,{ref:l,variant:`default`,onClick:()=>h(!1),children:r.cancelLabel??`Cancel`}),(0,X.jsx)(m,{color:r.tone===`danger`?`red`:void 0,onClick:()=>h(!0),children:r.confirmLabel??`Confirm`})]})]})})})}):null]})}function gr(){let e=(0,Y.useContext)(mr);if(!e)throw Error(`useConfirmationDialog must be used within ConfirmationDialogProvider`);return e}function _r({api:e,session:t,onUnauthenticated:n,onDeleted:r}){let[i,a]=(0,Y.useReducer)(St,void 0,xt),o=(0,Y.useRef)(i),s=(0,Y.useRef)(0),c=(0,Y.useRef)();o.current=i;let l=(0,Y.useCallback)(()=>{s.current+=1,c.current=void 0,a({type:`reset`})},[]),u=(0,Y.useCallback)((e,t,r=!1)=>{if(e instanceof J&&e.failure.kind===`unauthenticated`){l(),n(e.failure.adminStatus);return}let i=e instanceof J?e.failure.message:String(e);a({type:`applyFailed`,message:`${t}: ${i}`,clearPreview:r})},[n,l]);return{state:i,preview:(0,Y.useCallback)(async r=>{if(!t||o.current.previewBusy||o.current.applyBusy)return;let i=++s.current;a({type:`previewStarted`});try{let n=await e.previewConfiguredServerDelete({target:r,csrfToken:t.csrfToken});if(i!==s.current)return;c.current=void 0,a({type:`previewSucceeded`,preview:n.preview})}catch(e){if(i!==s.current)return;if(e instanceof J&&e.failure.kind===`unauthenticated`){l(),n(e.failure.adminStatus);return}a({type:`previewFailed`,message:`Delete preview failed: ${e instanceof J?e.failure.message:String(e)}`})}},[e,n,l,t]),changeConfirmation:(0,Y.useCallback)(e=>{a({type:`confirmationChanged`,value:e})},[]),apply:(0,Y.useCallback)(async n=>{let i=o.current;if(!t||!i.preview||i.applyBusy||i.confirmation!==i.preview.qualifiedId)return;let l=++s.current,d=c.current?.previewFingerprint===i.preview.previewFingerprint?c.current:{previewFingerprint:i.preview.previewFingerprint,idempotencyKey:Ve(i.preview.qualifiedId)};c.current=d,a({type:`applyStarted`});try{let o=await e.deleteConfiguredServer({target:n,csrfToken:t.csrfToken,idempotencyKey:d.idempotencyKey,previewFingerprint:i.preview.previewFingerprint,confirmedIdentity:i.confirmation});if(l!==s.current)return;c.current=void 0,a({type:`applySucceeded`,result:o.result}),await r(n,o.result)}catch(e){if(l!==s.current)return;let t=e instanceof J&&e.failure.kind===`rejected`&&[`configured_server_stale_preview`,`configured_server_already_removed`,`configured_server_source_changed`].includes(e.failure.code);t&&(c.current=void 0),u(e,`Delete failed`,t)}},[e,u,r,l,t]),reset:l}}var vr={identity:``,variants:{initialization:``,cli:``}};function yr({api:e,active:t,csrfToken:n,confirm:r,onUnauthenticated:i}){let[a,o]=(0,Y.useState)([]),[s,c]=(0,Y.useState)(),[l,u]=(0,Y.useState)(!1),[d,f]=(0,Y.useState)(``),[p,m]=(0,Y.useState)(!1),[h,g]=(0,Y.useState)({}),[_,v]=(0,Y.useState)(),[y,b]=(0,Y.useState)(vr),[x,S]=(0,Y.useState)(`initialize`),[C,w]=(0,Y.useState)({mode:`all`}),[T,E]=(0,Y.useState)(``),[D,O]=(0,Y.useState)(null),[k,A]=(0,Y.useState)(null),[j,M]=(0,Y.useState)(!1),[ee,N]=(0,Y.useState)(!1),[te,P]=(0,Y.useState)(null),[F,ne]=(0,Y.useState)(null),I=(0,Y.useRef)(!1),L=(0,Y.useRef)(0),R=(0,Y.useRef)(n),z=(0,Y.useRef)(),B=(0,Y.useCallback)((e,t)=>{if(e instanceof J&&e.failure.kind===`unauthenticated`){I.current=!1,i?.(e.failure.adminStatus);return}P(xr(e,t))},[i]),V=(0,Y.useMemo)(()=>a.find(e=>e.identity===_),[a,_]),H=V?V.identity!==y.identity||JSON.stringify(V.variants)!==JSON.stringify(y.variants):!!(y.identity||y.variants.initialization||y.variants.cli),U=(0,Y.useCallback)(()=>{z.current=void 0,O(e=>(e&&M(!0),null)),A(null)},[]),W=(0,Y.useCallback)(async()=>{if(!n)return;let t=L.current,r=n;N(!0),P(null);try{let i=await e.listInstructionTemplates();if(t!==L.current||r!==n)return;o(i.templates),c(i.activeIdentity),u(i.selectionExplicit),f(i.configFingerprint),m(i.legacyImportAvailable),g(i.renderFailures),I.current=!0}catch(e){if(t!==L.current||r!==n)return;B(e,`Instruction templates could not be loaded.`)}finally{t===L.current&&r===n&&N(!1)}},[e,n,B]);(0,Y.useEffect)(()=>{R.current!==n&&(R.current=n,L.current+=1,I.current=!1),!n&&(o([]),v(void 0),b(vr),O(null),A(null),N(!1))},[n]),(0,Y.useEffect)(()=>{t&&n&&!I.current&&W()},[t,n,W]);let G=(0,Y.useCallback)(e=>{v(e);let t=a.find(t=>t.identity===e);b(t?{identity:t.identity,variants:{...t.variants}}:vr),O(null),A(null),M(!1),P(null)},[a]),K=(0,Y.useCallback)(async(e,t)=>{if(!n)return!1;let r=z.current?.signature===e?z.current:{signature:e,idempotencyKey:Ue(e,y.identity)};z.current=r,N(!0),P(null);try{let e=await t(r.idempotencyKey);return ne(e.result.reload?.status===`failed`?e.result.reload.error?`Configuration was written, but runtime reload failed: ${e.result.reload.error}`:`Configuration was written, but runtime reload failed. Inspect runtime health before continuing.`:null),z.current=void 0,I.current=!1,await W(),!0}catch(e){return B(e,`Instruction template operation failed.`),!1}finally{N(!1)}},[n,y.identity,W,B]);return{items:a,activeIdentity:s,selectionExplicit:l,configFingerprint:d,legacyAvailable:p,renderFailures:h,selectedIdentity:_,draft:y,surface:x,selection:C,requestContext:T,preview:D,activationValidation:k,previewStale:j,dirty:H,busy:ee,error:te,reloadWarning:F,select:G,newDraft:()=>G(void 0),changeIdentity:e=>{b(t=>({...t,identity:e})),U()},changeVariant:(e,t)=>{let n=e===`initialize`?`initialization`:`cli`;b(e=>({...e,variants:{...e.variants,[n]:t}})),U()},changeSurface:e=>{S(e),U()},changeSelection:e=>{w(e),U()},changeRequestContext:e=>{E(e),U()},load:W,async saveDraft(){if(!n||!y.identity.trim())return!1;let t=await K(`save:${_?`update`:`create`}:${d}:${JSON.stringify(y)}`,t=>e.saveInstructionTemplate({action:_?`update`:`create`,draft:y,expectedConfigFingerprint:d,csrfToken:n,idempotencyKey:t}));return t&&v(y.identity),t},async previewDraft(){if(!n||!y.identity)return;let t=L.current,r=n;N(!0),P(null);try{let i;T.trim()&&(i=br(JSON.parse(T)));let a=await e.previewInstructionTemplate({identity:y.identity,surface:x,selection:C,...i?{requestContext:i}:{},csrfToken:n});if(t!==L.current||r!==n)return;O(a),M(!1)}catch(e){if(t!==L.current||r!==n)return;B(e,`Instruction template preview failed.`)}finally{t===L.current&&r===n&&N(!1)}},async validateDraft(){if(!n||!_||H)return;let t=L.current,r=n;N(!0),P(null);try{let i=await e.validateInstructionTemplate({identity:_,expectedConfigFingerprint:d,csrfToken:n});if(t!==L.current||r!==n)return;A(i)}catch(e){if(t!==L.current||r!==n)return;B(e,`Instruction template validation failed.`)}finally{t===L.current&&r===n&&N(!1)}},async activate(){!n||!k||k.identity!==y.identity||await K(`activate:${y.identity}:${k.expectedConfigFingerprint}:${k.previewFingerprint}`,t=>e.activateInstructionTemplate({identity:y.identity,expectedConfigFingerprint:k.expectedConfigFingerprint,previewFingerprint:k.previewFingerprint,csrfToken:n,idempotencyKey:t}))&&(O(null),A(null))},async clone(t){!n||!_||await K(`clone:${_}:${t}:${d}`,r=>e.cloneInstructionTemplate({sourceIdentity:_,identity:t,expectedConfigFingerprint:d,csrfToken:n,idempotencyKey:r}))},async importLegacy(t){n&&await K(`import:${t}:${d}`,r=>e.importLegacyInstructionTemplate({identity:t,expectedConfigFingerprint:d,csrfToken:n,idempotencyKey:r}))},async deleteSelected(){if(!(!n||!_||V?.protected))try{let t=await e.previewInstructionTemplateDelete({identity:_,expectedConfigFingerprint:d,csrfToken:n});if(!t.allowed){P(t.reason===`active_conflict`?`Activate another template before deleting this one.`:`This template cannot be deleted.`);return}if(!await r({title:`Delete ${t.identity}?`,message:`This permanently removes the managed template from the current Runtime Scope.`,confirmLabel:`Delete template`,tone:`danger`,details:[{label:`Template`,value:t.identity},{label:`Reason`,value:t.reason??`Template is inactive and not protected`}]}))return;await K(`delete:${_}:${t.expectedConfigFingerprint}:${t.previewFingerprint}`,r=>e.deleteInstructionTemplate({identity:_,expectedConfigFingerprint:t.expectedConfigFingerprint,previewFingerprint:t.previewFingerprint,csrfToken:n,idempotencyKey:r}))&&G(void 0)}catch(e){B(e,`Instruction template deletion could not be prepared.`)}}}}function br(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Request context must include project, user, and environment objects.`);let t=e;for(let e of[`project`,`user`,`environment`]){let n=t[e];if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`Request context must include project, user, and environment objects.`)}return t}function xr(e,t){return e instanceof J?e.failure.message:e instanceof Error?e.message:t}function Sr(){return{view:`loading`,session:null,status:null,configuredServers:[],serverMutations:{},banner:null,error:null,lastUpdatedAt:null}}function Cr(e,t){switch(t.type){case`sessionLoaded`:return{...e,view:`console`,session:t.session,banner:null,error:null};case`sessionUnauthenticated`:return{...Sr(),view:t.adminStatus===`setupRequired`?`setupRequired`:`login`,session:null};case`refreshSucceeded`:return{...e,view:`console`,status:t.status,configuredServers:t.configuredServers,lastUpdatedAt:t.updatedAt,banner:e.banner?.kind===`error`?null:e.banner,error:null};case`refreshFailed`:case`loginFailed`:return{...e,error:t.message,banner:{kind:`error`,message:t.message}};case`logoutSucceeded`:return{...Sr(),view:`login`};case`mutationStarted`:return wr(e,t.serverId,{state:`busy`,action:t.action});case`mutationSucceeded`:return wr(e,t.serverId,{state:`succeeded`,action:t.action,message:`Server ${t.action} completed.`});case`mutationFailed`:return wr(e,t.serverId,{state:`failed`,action:t.action,message:t.message});case`clearBanner`:return{...e,banner:null,error:null}}}function wr(e,t,n){return{...e,serverMutations:{...e.serverMutations,[t]:n},banner:n.state===`failed`?{kind:`error`,message:n.message??``}:e.banner}}var Tr=5e3,Er=6e4;function Dr(e){return e===`visible`?Tr:Er}function Or(e){return e.view===`console`&&!!e.session?.csrfToken}var kr=5e3,Ar=512*1024,jr={connection:`idle`,sources:[],selectedSourceId:null,entries:[],unread:{},cursors:{},selectionLoading:!1,selectionError:null};function Mr(e){let[t,n]=(0,Y.useState)(jr),r=(0,Y.useRef)(t),i=(0,Y.useRef)([]),a=(0,Y.useRef)(e.onUnauthenticated),o=(0,Y.useRef)(0);(0,Y.useEffect)(()=>{r.current=t},[t]),(0,Y.useEffect)(()=>{a.current=e.onUnauthenticated},[e.onUnauthenticated]);let s=(0,Y.useCallback)(e=>{i.current=e.sources,n(t=>{let n=e.sources.some(e=>e.id===t.selectedSourceId)?t.selectedSourceId:e.sources[0]?.id??null;return{connection:`active`,sources:e.sources,selectedSourceId:n,entries:n?zr(e.entries.filter(e=>e.sourceId===n)):[],unread:Rr(e,n),cursors:Fr(e.entries),selectionLoading:!1,selectionError:null}})},[]),c=(0,Y.useCallback)(async t=>{let r=++o.current;n(e=>({...e,selectedSourceId:t,entries:[],unread:{...e.unread,[t]:0},selectionLoading:!0,selectionError:null}));try{let i=await e.api.getBackendLogSnapshot(t);if(o.current!==r)return;n(e=>{if(e.selectedSourceId!==t)return e;let n=i.entries.filter(e=>e.sourceId===t),r=e.entries.filter(e=>e.sequence>i.sequence);return{...e,entries:zr([...n,...r]),selectionLoading:!1,selectionError:null}})}catch(e){if(o.current!==r)return;if(e instanceof J&&e.failure.kind===`unauthenticated`){a.current();return}n(e=>e.selectedSourceId===t?{...e,selectionLoading:!1,selectionError:`Failed to load retained backend logs. Live entries will continue to appear.`}:e)}},[e.api]);(0,Y.useEffect)(()=>{if(!e.active||!e.authenticated){o.current+=1,i.current=[],n(jr);return}return n(e=>({...e,connection:`loading`})),e.api.openBackendLogStream({onSnapshot:s,onGap:s,onEntry:e=>{i.current.some(t=>t.id===e.sourceId)||(i.current=[...i.current,Pr(e)]),n(t=>Nr(t,e))},onSources:e=>{i.current=e;let t=r.current,a=e.some(e=>e.id===t.selectedSourceId)?t.selectedSourceId:e[0]?.id??null;n(t=>Ir(t,e,a)),a&&a!==t.selectedSourceId&&c(a)},onSourceUpdate:e=>{let t=r.current,a=e.removed?i.current.filter(t=>t.id!==e.sourceId):[...i.current.filter(t=>t.id!==e.sourceId),e.source].sort((e,t)=>e.id.localeCompare(t.id));i.current=a;let o=a.some(e=>e.id===t.selectedSourceId)?t.selectedSourceId:a[0]?.id??null;n(e=>Ir(e,a,o)),o&&o!==t.selectedSourceId&&c(o)},onOpen:()=>n(e=>({...e,connection:e.sources.length?`active`:`loading`})),onError:()=>n(e=>({...e,connection:`reconnecting`}))})},[s,e.active,e.api,e.authenticated,c]);let l=(0,Y.useCallback)(e=>c(e),[c]);return{...t,select:l}}function Nr(e,t){let n=e.sources.some(e=>e.id===t.sourceId)?e.sources:[...e.sources,Pr(t)];return e.selectedSourceId===null?{...e,connection:`active`,sources:n,selectedSourceId:t.sourceId,entries:[t],unread:{...e.unread,[t.sourceId]:0},cursors:{...e.cursors,[t.sourceId]:t.sequence},selectionLoading:!1,selectionError:null}:t.sourceId===e.selectedSourceId?{...e,connection:`active`,sources:n,entries:zr([...e.entries,t]),cursors:{...e.cursors,[t.sourceId]:t.sequence}}:{...e,connection:`active`,sources:n,unread:{...e.unread,[t.sourceId]:(e.unread[t.sourceId]??0)+1},cursors:{...e.cursors,[t.sourceId]:t.sequence}}}function Pr(e){return{id:e.sourceId,canonicalName:e.canonicalName,displayName:e.displayName,kind:e.sourceKind,capture:`managed`,lifecycle:`active`}}function Fr(e){let t={};for(let n of e)t[n.sourceId]=n.sequence;return t}function Ir(e,t,n){let r=new Set(t.map(e=>e.id)),i=n!==e.selectedSourceId;return{...e,sources:t,selectedSourceId:n,entries:i?[]:e.entries,unread:Lr(e.unread,r),cursors:Lr(e.cursors,r),selectionLoading:i&&n!==null,selectionError:i?null:e.selectionError}}function Lr(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>t.has(e)))}function Rr(e,t){let n={};for(let r of e.entries)r.sourceId!==t&&(n[r.sourceId]=(n[r.sourceId]??0)+1);return n}function zr(e){let t=0,n=[];for(let r=e.length-1;r>=0&&n.length<kr;r--){let i=e[r];if(t+=i.content.length,t>Ar&&n.length>0)break;n.push(i)}return n.reverse()}var Br={access_denied:`OAuth authorization was denied.`,missing_code:`The OAuth provider callback did not include an authorization code.`,callback_failed:`The runtime could not complete the OAuth provider callback.`,runtime_unavailable:`The OAuth runtime became unavailable during the callback.`};function Vr(e){if(e instanceof J)return e.failure.message;throw e}function Hr({api:e,documentRef:t=document,windowRef:n=window,nowLabel:r}){return(0,X.jsx)(hr,{children:(0,X.jsx)(Ur,{api:e,documentRef:t,windowRef:n,nowLabel:r})})}function Ur({api:e,documentRef:t,windowRef:n,nowLabel:r}){return(0,X.jsx)(rr,{session:Wr({api:e,documentRef:t,windowRef:n,nowLabel:r,confirm:gr()})})}function Wr({api:e,documentRef:t,windowRef:n,nowLabel:r,confirm:i}){let[a,o]=(0,Y.useState)(Sr),[s,c]=(0,Y.useState)(!1),[l,u]=(0,Y.useState)(()=>Kr(n.location?.pathname??`/admin`)),[d,f]=(0,Y.useState)(null),[p]=(0,Y.useState)(()=>{let e=Jr(n.location?.search??``);return e&&n.history?.replaceState(null,``,`/admin/oauth`),e}),[m,h]=(0,Y.useState)(null),[g,_]=(0,Y.useState)([]),[v,y]=(0,Y.useState)([]),[b,x]=(0,Y.useState)(``),[S,C]=(0,Y.useState)(!1),[w,T]=(0,Y.useState)(null),E=(0,Y.useRef)(a),D=(0,Y.useRef)(null),O=(0,Y.useRef)(),k=(0,Y.useRef)(),A=(0,Y.useRef)(),j=(0,Y.useRef)(!1),M=(0,Y.useRef)(!1),ee=(0,Y.useRef)(!1),N=(0,Y.useRef)(0),te=(0,Y.useCallback)(()=>r?.()??new Date().toLocaleTimeString(),[r]),P=(0,Y.useCallback)(e=>{let t=Cr(E.current,e);E.current=t,o(t)},[]);(0,Y.useEffect)(()=>{E.current=a},[a]);let F=(0,Y.useCallback)(()=>{D.current!==null&&(n.clearTimeout(D.current),D.current=null)},[n]),ne=(0,Y.useCallback)(()=>{N.current+=1,ee.current=!1,f(null),h(null)},[]),I=(0,Y.useCallback)(e=>{F(),ne(),T(null),P({type:`sessionUnauthenticated`,adminStatus:e})},[F,P,ne]),L=(0,Y.useCallback)(e=>{let t=e instanceof J?e.failure:null;return t?.kind===`unauthenticated`?(I(t.adminStatus),!0):!1},[I]),R=(0,Y.useMemo)(()=>({pathname:()=>n.location?.pathname??`/admin`,push:e=>n.history?.pushState(null,``,e),replace:e=>n.history?.replaceState(null,``,e),confirm:i,subscribePopState:e=>(n.addEventListener?.(`popstate`,e),()=>n.removeEventListener?.(`popstate`,e))}),[i,n]),z=(0,Y.useCallback)(e=>{u(Kr(e))},[]),B=yn({api:e,session:a.session,browser:R,onUnauthenticated:I,onApplied:()=>O.current?.(),onPathCommitted:z}),V=qt({api:e,session:a.session,browser:R,onUnauthenticated:I,onCreated:()=>k.current?.(),onOpenCreated:B.open,onPathCommitted:z}),H=_r({api:e,session:a.session,onUnauthenticated:I,onDeleted:(e,t)=>A.current?.(e,t)}),U=Mr({api:e,active:l===`logs`,authenticated:!!a.session,onUnauthenticated:()=>I(`loginRequired`)}),W=yr({api:e,active:l===`instructions`,csrfToken:a.session?.csrfToken,confirm:i,onUnauthenticated:I}),G=(0,Y.useCallback)(e=>E.current.session?.csrfToken===e,[]),K=(0,Y.useCallback)(async()=>{if(E.current.session){C(!0);try{let t=await e.listPresets();_(t.presets),y(t.targets??[]),x(t.revision)}finally{C(!1)}}},[e]);(0,Y.useEffect)(()=>{l===`presets`&&a.session&&K()},[K,l,a.session]);let re=(0,Y.useCallback)(async(t,n)=>{let r=E.current.session?.csrfToken;if(!r)throw Error(`admin_session_required`);return e.previewPreset({draft:t,sourceName:n,csrfToken:r})},[e]),ie=(0,Y.useCallback)(async t=>{if(j.current)return!1;j.current=!0;try{let n=E.current.session?.csrfToken;return!n||!await i({title:`${Gr(t.action)} ${t.preview.draft.name}?`,message:`The preview must still match the current preset store when this change is saved.`,confirmLabel:`${Gr(t.action)} preset`,details:[{label:`Preset`,value:t.preview.draft.name},{label:`Current matches`,value:String(t.preview.matchCount)},...t.preview.matchCount===0?[{label:`Attention`,value:`This preset currently matches no configured servers.`}]:[]]})?!1:(await e.mutatePreset({action:t.action,sourceName:t.sourceName,draft:t.preview.draft,revision:t.preview.revision,previewFingerprint:t.preview.previewFingerprint,confirmations:{previewConfirmed:t.preview.previewFingerprint,...t.preview.matchCount===0?{zeroMatchConfirmed:!0}:{}},csrfToken:n}),await K(),!0)}finally{j.current=!1}},[e,i,K]),ae=(0,Y.useCallback)(async t=>{if(!M.current){M.current=!0;try{let n=E.current.session?.csrfToken;if(!n)return;let r=await e.previewPresetDelete({name:t,revision:b,csrfToken:n}),a=r.matches.filter(e=>e.matched).map(e=>e.name);if(!await i({title:`Delete ${t}?`,message:`This removes the preset from the current Runtime Scope.`,confirmLabel:`Delete preset`,tone:`danger`,details:[{label:`Preset`,value:t},{label:`Current matches`,value:a.join(`, `)||`none`},{label:`Consequence`,value:r.consequence}]}))return;await e.deletePreset({name:t,revision:b,previewFingerprint:r.previewFingerprint,csrfToken:n}),await K()}finally{M.current=!1}}},[e,i,K,b]),oe=(0,Y.useCallback)(async e=>{let t=qr(e);if(V.state.status!==`idle`){if(!await V.close(t))return;u(e);return}await B.close(t)&&u(e)},[V,B]),q=(0,Y.useCallback)(async(t,n)=>{let r=n??E.current.session;if(!r)return;let i=r.csrfToken;try{let[t,n]=await Promise.all([e.getStatus(),e.listConfiguredServers()]);if(!G(i))return;P({type:`refreshSucceeded`,status:t,configuredServers:n,updatedAt:te()})}catch(e){if(!G(i))return;L(e)||P({type:`refreshFailed`,message:`${t}${Vr(e)}`})}},[e,P,te,L,G]);O.current=()=>q(``),k.current=()=>q(``),A.current=async(e,t)=>{if(Ct(t)){T(null),await q(`Deletion was persisted, but inventory refresh failed: `);return}await B.close(`/admin/servers`),H.reset(),T(t),u(`servers`),await q(`Deletion succeeded, but refresh failed: `)};let se=(0,Y.useCallback)(()=>{F(),Or(E.current)&&(D.current=n.setTimeout(()=>{q(``).finally(se)},Dr(t.visibilityState)))},[F,t,q,n]),ce=(0,Y.useCallback)(async()=>{try{let t=await e.getSession();if(!t.authenticated){I(t.adminStatus??`loginRequired`);return}P({type:`sessionLoaded`,session:t}),await q(`Session loaded, but refresh failed: `,t)}catch(e){L(e)||P({type:`refreshFailed`,message:`Session check failed: ${Vr(e)}`})}finally{se()}},[e,P,L,I,q,se]),le=(0,Y.useCallback)(async t=>{if(!s){c(!0);try{let n=await e.login(t);P({type:`sessionLoaded`,session:n}),await q(`Login succeeded, but refresh failed: `,n)}catch(e){P({type:`loginFailed`,message:`Login failed: ${Vr(e)}`})}finally{c(!1),se()}}},[e,P,s,q,se]),ue=(0,Y.useCallback)(async(t,n,r=`mcpServers`)=>{let a=E.current.session;if(!a)return;let o=a.csrfToken,s=r===`mcpTemplates`?`${r}/${t}`:t;P({type:`mutationStarted`,serverId:s,action:n});try{let a=n===`enable`,c;if(r===`mcpTemplates`){let l={id:t,source:r},u=await e.previewConfiguredServerLifecycle({target:l,enabled:a,csrfToken:o});if(!await i({title:`${a?`Enable`:`Disable`} Template Server ${t}?`,message:u.preview.warnings.join(` `)||`Apply the source-qualified definition lifecycle change.`,confirmLabel:a?`Enable template`:`Disable template`,tone:a?`default`:`danger`,details:[{label:`Target`,value:u.preview.qualifiedId},{label:`Active instances`,value:String(u.preview.runtimeImpact.activeInstanceCount)},...u.preview.expressionReplacement.occurs?[{label:`Expression replacement`,value:`Context-rendered disabled expression becomes literal true.`}]:[],{label:`Re-enable behavior`,value:`Future matching requests create instances lazily.`}]})){P({type:`mutationFailed`,serverId:s,action:n,message:`Lifecycle change cancelled.`});return}let d=await e.applyConfiguredServerLifecycle({target:l,enabled:a,csrfToken:o,previewFingerprint:u.preview.previewFingerprint,idempotencyKey:He(u.preview.qualifiedId,a)});d.result.configChange.reload.status===`failed`?c=`Lifecycle configuration was saved, but runtime reload failed. Recovery is required.`:d.result.configChange.reload.status===`runtime_not_running`?c=`Lifecycle configuration was saved, but the runtime is not running. Recovery is required.`:d.result.configChange.reload.status===`reload_disabled`?c=`Lifecycle configuration was saved, but runtime reload is disabled. Recovery is required.`:!a&&!d.result.runtimeImpact.retirementObserved&&(c=`Lifecycle configuration was saved, but Template instance retirement was not confirmed. Recovery is required.`)}else await e.setConfiguredServerEnabled({name:t,enabled:a,csrfToken:o});if(!G(o))return;await q(c?`Lifecycle was persisted, but inventory refresh failed: `:``),P(c?{type:`mutationFailed`,serverId:s,action:n,message:c}:{type:`mutationSucceeded`,serverId:s,action:n})}catch(e){if(!G(o))return;L(e)||P({type:`mutationFailed`,serverId:s,action:n,message:`Server ${n} failed: ${Vr(e)}`})}},[e,i,P,L,G,q]),de=(0,Y.useCallback)(async(t,r)=>{if(ee.current)return;let i=E.current.session;if(!i)return;ee.current=!0;let a=N.current+1;N.current=a;let o=i.csrfToken;f({serviceId:t,action:r}),h(null);try{let i=r===`authorize`?await e.authorizeOAuthService({serviceId:t,csrfToken:o}):await e.restartOAuthService({serviceId:t,csrfToken:o});if(!G(o))return;h({kind:`success`,message:`${r===`authorize`?`Authorization`:`Authorization restart`} started. Opening the provider.`}),n.location?.assign(i.redirectUrl)}catch(e){if(!G(o))return;L(e)||h({kind:`error`,message:Vr(e)})}finally{N.current===a&&(ee.current=!1,G(o)&&f(null))}},[e,L,G,n]),fe=(0,Y.useCallback)(async()=>{let t=E.current.session?.csrfToken;try{t&&await e.logout(t)}finally{F(),ne(),P({type:`logoutSucceeded`}),T(null)}},[e,F,P,ne]),pe=(0,Y.useCallback)(async(e,t)=>{if(!navigator.clipboard?.writeText)throw Error(`clipboard_unavailable`);await navigator.clipboard.writeText(t)},[]);return(0,Y.useEffect)(()=>(ce(),F),[F,ce]),(0,Y.useEffect)(()=>{let e=()=>se();return t.addEventListener?.(`visibilitychange`,e),()=>t.removeEventListener?.(`visibilitychange`,e)},[t,se]),{state:a,loginBusy:s,login:le,logout:fe,refresh:()=>q(`Manual refresh failed: `),navigation:{route:l,navigate:oe},configuredServers:{create:{...V,open:async()=>{if(T(null),V.state.status!==`idle`){await V.open();return}await B.close(`/admin/servers`)&&await V.open()}},edit:{...B,open:async e=>{T(null),await B.open(e)}},delete:H,deletionNotice:w,dismissDeletionNotice:()=>T(null),mutate:ue,copy:pe},oauth:{busy:d,callbackFeedback:p,operationFeedback:m,operate:de},logs:U,presets:{items:g,targets:v,revision:b,busy:S,load:K,preview:re,save:ie,delete:ae},instructions:W}}function Gr(e){return e===`create`?`Create`:e===`duplicate`?`Duplicate`:`Update`}function Kr(e){return e===`/admin/servers`||e.startsWith(`/admin/servers/`)?`servers`:e===`/admin/oauth`||e.startsWith(`/admin/oauth/`)?`oauth`:e===`/admin/audit`||e.startsWith(`/admin/audit/`)?`audit`:e.startsWith(`/admin/presets`)?`presets`:e.startsWith(`/admin/instructions`)?`instructions`:e.startsWith(`/admin/logs`)?`logs`:e.startsWith(`/admin/about`)?`about`:`dashboard`}function qr(e){return e===`dashboard`?`/admin`:`/admin/${e}`}function Jr(e){let t=new URLSearchParams(e);if(t.get(`success`)===`1`)return{kind:`success`,message:`OAuth authorization completed.`};let n=t.get(`error`);return n?{kind:`error`,message:Object.hasOwn(Br,n)?Br[n]:`OAuth authorization did not complete.`}:null}var Yr=s({primaryColor:`conduit`,defaultRadius:`sm`,fontFamily:`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,headings:{fontFamily:`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,fontWeight:`760`},defaultGradient:{from:`conduit.7`,to:`conduit.5`,deg:90},colors:{conduit:[`#eef7f4`,`#d7eee7`,`#acdccc`,`#7fc8ae`,`#59b393`,`#3a9d7b`,`#2c7f65`,`#246653`,`#1d5244`,`#123229`]}}),Xr=document.querySelector(`#admin-root`),Zr=a({key:`1mcp-admin-color-scheme`});if(!Xr)throw Error(`Admin Console root element was not found`);(0,Oe.createRoot)(Xr).render((0,X.jsx)(i,{theme:Yr,defaultColorScheme:`auto`,colorSchemeManager:Zr,children:(0,X.jsx)(Hr,{api:Ie()})}));export{Un as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/admin-AboutRuntimeWorkspace-DH2QC2nJ.js","assets/admin-mantine-xwbfu5Gd.js","assets/admin-rolldown-runtime-Bh1tDfsg.js","assets/admin-react-BSaWeqgv.js","assets/admin-console-DmRyrCWD.css","assets/admin-BackendLogsWorkspace-BKavXT9B.js","assets/admin-icons-CYGTDZA5.js","assets/admin-InstructionTemplatesWorkspace-CvG4EPdZ.js","assets/admin-OAuthServicesWorkspace-D_GlqLxL.js","assets/admin-PresetAuthoringWorkspace-BboJVBFl.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./admin-rolldown-runtime-Bh1tDfsg.js";import{A as t,D as n,E as r,F as i,I as a,L as o,N as s,O as c,P as l,S as u,T as d,_ as f,a as p,b as m,c as h,d as g,f as _,g as v,h as y,j as b,k as x,l as S,m as C,n as w,o as T,p as E,r as D,s as O,t as k,u as A,v as j,w as M,x as ee,y as N}from"./admin-mantine-xwbfu5Gd.js";import{i as te,n as P,r as F,t as ne}from"./admin-react-BSaWeqgv.js";import{a as I,c as L,i as R,l as z,n as B,o as V,r as H,s as U,t as W}from"./admin-vendor-62eL-qdH.js";import{C as G,E as K,M as re,N as ie,O as ae,S as oe,_ as q,a as se,b as ce,c as le,d as ue,h as de,i as fe,j as pe,k as me,l as he,m as ge,n as _e,o as ve,p as ye,r as be,s as xe,t as Se,u as Ce,v as we,w as Te,x as Ee,y as De}from"./admin-icons-CYGTDZA5.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Oe=ne(),ke=V({type:R(`configured_server`),id:U(),source:W([`mcpServers`,`mcpTemplates`])}).passthrough(),Ae=V({status:U(),operation:U(),configPath:U().optional(),target:V({name:U(),source:U()}).passthrough(),changed:H(),backup:V({created:H(),path:U().optional()}).passthrough(),retentionCleanup:V({attempted:H(),deletedPaths:B(U()),warnings:B(U())}).passthrough(),reload:V({status:U(),error:U().optional(),before:z().optional(),after:z().optional()}).passthrough(),warnings:B(U()).optional(),error:U().optional()}).passthrough(),je=V({activeInstancesBefore:I(),retiredInstances:I(),activeInstancesAfter:I(),retirementObserved:H(),error:U().optional()}).passthrough(),Me=V({ok:R(!0),operationId:U(),preview:V({target:ke,qualifiedId:U(),targetFingerprint:U(),previewFingerprint:U(),current:V({enabled:H(),disabledValueKind:W([`absent`,`literal`,`context_expression`])}).passthrough(),proposed:V({enabled:H(),disabledValueKind:W([`absent`,`literal`])}).passthrough(),expressionReplacement:V({occurs:H(),replacement:W([`disabled_true`,`enabled_absent`])}).passthrough(),configChange:Ae,expectedBackup:V({policy:R(`required`),recoveryCopy:R(!0)}).passthrough(),expectedReload:V({policy:R(`observe_after_write`),possibleStatuses:L([R(`observed`),R(`runtime_not_running`),R(`reload_disabled`),R(`failed`)])}).passthrough(),runtimeImpact:V({activeInstanceCount:I(),retirement:W([`after_successful_reload`,`not_required`]),recreation:R(`lazy_future_match_only`)}).passthrough(),warnings:B(U())}).passthrough()}).passthrough(),Ne=V({ok:R(!0),operationId:U(),result:V({target:ke,qualifiedId:U(),previewFingerprint:U(),enabled:H(),outcome:W([`enabled`,`disabled`,`already_enabled`,`already_disabled`]),configChange:Ae,runtimeImpact:je}).passthrough()}).passthrough(),J=class extends Error{status;body;failure;constructor(e,t,n,r){super(n),this.status=e,this.body=t,this.name=`AdminApiError`,this.failure=r??Fe(this)}};function Pe(e,t){try{return e.parse(t)}catch{let e=`The runtime returned an invalid configured-server lifecycle response.`;throw new J(502,{},e,{kind:`unavailable`,message:e})}}function Fe(e){let t=Ye(e),n=Xe(e.body),r=n?`${Ze(e,t)} Request ID: ${n}`:Ze(e,t);return e.status===401?{kind:`unauthenticated`,adminStatus:Je(e.body),code:t,message:r,requestId:n,status:401}:e.status===404&&t===`configured_server_not_found`?{kind:`configuredServerNotFound`,code:t,message:r,requestId:n,status:404}:{kind:`rejected`,code:t,message:r,requestId:n,status:e.status}}function Ie(e={}){let t=Ge(e.fetch??fetch),n=e.idempotencyKey??$e,r=e.eventSource??(e=>new EventSource(e));return{login(e){return t(`/admin/api/session/login`,{method:`POST`,body:JSON.stringify(e)})},getSession(){return t(`/admin/api/session`)},logout(e){return t(`/admin/api/session/logout`,{method:`POST`,headers:{"X-CSRF-Token":e}})},getStatus(){return t(`/admin/api/status`)},getBackendLogSnapshot(e){let n=e?`?sourceId=${encodeURIComponent(e)}`:``;return t(`/admin/api/logs/snapshot${n}`)},openBackendLogStream(e){let t=t=>{try{return JSON.parse(t.data)}catch{e.onError();return}},n=r(`/admin/api/logs/stream`);return n.addEventListener(`snapshot`,n=>{let r=t(n);r&&e.onSnapshot(r)}),n.addEventListener(`gap`,n=>{let r=t(n);r&&e.onGap(r)}),n.addEventListener(`entry`,n=>{let r=t(n);r&&e.onEntry(r)}),n.addEventListener(`sources`,n=>{let r=t(n);r&&e.onSources(r)}),n.addEventListener(`source`,n=>{let r=t(n);r&&e.onSourceUpdate(r)}),n.onopen=()=>e.onOpen(),n.onerror=()=>e.onError(),()=>n.close()},async authorizeOAuthService(e){return(await t(`/admin/api/oauth/${encodeURIComponent(e.serviceId)}/authorize`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":n({action:`oauth-authorize`,targetName:e.serviceId})},body:`{}`})).result},async restartOAuthService(e){return(await t(`/admin/api/oauth/${encodeURIComponent(e.serviceId)}/restart`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":n({action:`oauth-restart`,targetName:e.serviceId})},body:`{}`})).result},async listPresets(){return(await t(`/admin/api/presets`)).result},async getPreset(e){return(await t(`/admin/api/presets/${encodeURIComponent(e)}`)).result},async previewPreset(e){return(await t(`/admin/api/presets/preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({draft:e.draft,sourceName:e.sourceName})})).result},mutatePreset(e){let n=e.action===`create`?`/admin/api/presets`:`/admin/api/presets/${encodeURIComponent(e.sourceName??``)}/${e.action===`duplicate`?`duplicate`:`update`}`;return t(n,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":We(e.action,e.draft.name)},body:JSON.stringify({draft:e.draft,revision:e.revision,previewFingerprint:e.previewFingerprint,confirmationFacts:e.confirmations})})},async previewPresetDelete(e){return(await t(`/admin/api/presets/${encodeURIComponent(e.name)}/delete-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({revision:e.revision})})).result},deletePreset(e){return t(`/admin/api/presets/${encodeURIComponent(e.name)}`,{method:`DELETE`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":We(`delete`,e.name)},body:JSON.stringify({revision:e.revision,previewFingerprint:e.previewFingerprint,confirmationFacts:{previewConfirmed:e.previewFingerprint,presetNameConfirmed:e.name}})})},async getConfiguredServerCatalog(){let e=await t(`/admin/api/configured-servers`);return{servers:e.servers??[],configFingerprint:e.configFingerprint??``}},async listConfiguredServers(){return(await t(`/admin/api/configured-servers`)).servers??[]},getConfiguredServerCreateContract(){return t(`/admin/api/configured-servers/create-contract`)},previewConfiguredServerCreate(e){return t(`/admin/api/configured-servers/create-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({draft:e.draft,...e.connectivityCheck?{connectivityCheck:e.connectivityCheck}:{}})})},createConfiguredServer(e){return t(`/admin/api/configured-servers`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({draft:e.draft,previewFingerprint:e.previewFingerprint,confirmationFacts:e.confirmationFacts})})},getConfiguredServerDetail(e,n){let r=n?`?model=${encodeURIComponent(n)}`:``;return t(`${Re(e)}${r}`)},refreshConfiguredToolInventory(e){return t(`${Re(e.target)}/tool-inventory/refresh`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify(e.model?{model:e.model}:{})})},async listInstructionTemplates(){return(await t(`/admin/api/instruction-templates`)).result},async getInstructionTemplate(e){return(await t(Le(e))).result},saveInstructionTemplate(e){let n=e.action===`create`?`/admin/api/instruction-templates`:`${Le(e.draft.identity)}/update`;return t(n,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({...e.action===`create`?{identity:e.draft.identity}:{},variants:e.draft.variants,...e.expectedConfigFingerprint?{expectedConfigFingerprint:e.expectedConfigFingerprint}:{}})})},cloneInstructionTemplate(e){return t(`${Le(e.sourceIdentity)}/clone`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({identity:e.identity,expectedConfigFingerprint:e.expectedConfigFingerprint})})},async validateInstructionTemplate(e){return(await t(`${Le(e.identity)}/validate`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint})})).result},async previewInstructionTemplate(e){return(await t(`${Le(e.identity)}/preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({surface:e.surface,selection:e.selection,...e.requestContext?{requestContext:e.requestContext}:{}})})).result},activateInstructionTemplate(e){return t(`${Le(e.identity)}/activate`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint,previewFingerprint:e.previewFingerprint})})},importLegacyInstructionTemplate(e){return t(`/admin/api/instruction-templates/import-legacy`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({identity:e.identity,expectedConfigFingerprint:e.expectedConfigFingerprint})})},async previewInstructionTemplateDelete(e){return(await t(`${Le(e.identity)}/delete-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint})})).result},deleteInstructionTemplate(e){return t(Le(e.identity),{method:`DELETE`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({expectedConfigFingerprint:e.expectedConfigFingerprint,previewFingerprint:e.previewFingerprint})})},previewConfiguredServerEdit(e){return t(`${Re(e.target)}/preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({edit:e.edit,...e.connectivityCheck?{connectivityCheck:e.connectivityCheck}:{},...e.model?{model:e.model}:{}})})},applyConfiguredServerEdit(e){return t(`${Re(e.target)}/apply`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({edit:e.edit,previewFingerprint:e.previewFingerprint,confirmationFacts:e.confirmationFacts,...e.model?{model:e.model}:{}})})},previewConfiguredServerDelete(e){return t(`${Re(e.target)}/delete-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:`{}`})},deleteConfiguredServer(e){return t(Re(e.target),{method:`DELETE`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({previewFingerprint:e.previewFingerprint,confirmationFacts:{previewConfirmed:e.previewFingerprint,targetIdentityConfirmed:e.confirmedIdentity}})})},previewConfiguredServerLifecycle(e){return t(`${Re(e.target)}/lifecycle-preview`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken},body:JSON.stringify({enabled:e.enabled})}).then(e=>Pe(Me,e))},applyConfiguredServerLifecycle(e){return t(`${Re(e.target)}/lifecycle`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":e.idempotencyKey},body:JSON.stringify({enabled:e.enabled,previewFingerprint:e.previewFingerprint,confirmationFacts:{previewConfirmed:e.previewFingerprint,targetIdentityConfirmed:`${e.target.source}/${e.target.id}`}})}).then(e=>Pe(Ne,e))},setConfiguredServerEnabled(e){let r=e.enabled?`enable`:`disable`;return t(`/admin/api/configured-servers/${encodeURIComponent(e.name)}/${r}`,{method:`POST`,headers:{"X-CSRF-Token":e.csrfToken,"Idempotency-Key":n({action:r,targetName:e.name})},body:`{}`})}}}function Le(e){return`/admin/api/instruction-templates/${encodeURIComponent(e)}`}function Re(e){return typeof e==`string`?`/admin/api/configured-servers/${encodeURIComponent(e)}`:`/admin/api/configured-servers/${e.source}/${encodeURIComponent(e.id)}`}function ze(e){return`admin-console-server-apply-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Be(e){return`admin-console-server-create-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Ve(e){return`admin-console-server-delete-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function He(e,t){return`admin-console-server-${t?`enable`:`disable`}-${et(e)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Ue(e,t){return`admin-console-instruction-template-${et(e)}-${et(t)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function We(e,t){return`admin-console-preset-${e}-${et(t)}-${Date.now()}-${crypto.getRandomValues(new Uint32Array(2)).join(`-`)}`}function Ge(e){return async function(t,n={}){let r={"Content-Type":`application/json`,"X-Admin-UI-Build-Version":`0.39.0-beta.3`,"X-Admin-UI-Protocol-Version":`1`,...n.headers??{}},i;try{i=await e(t,{...n,headers:r})}catch{let e=`The Admin Console could not reach the runtime. Check that the runtime is still available, then refresh.`;throw new J(0,{},e,{kind:`unavailable`,message:e})}let a=await Ke(i);if(!i.ok)throw new J(i.status,a,qe(a,i.statusText));return a}}async function Ke(e){try{return await e.json()}catch{return{}}}function qe(e,t){if(e&&typeof e==`object`){let t=e;if(typeof t.error==`string`)return t.error;if(typeof t.code==`string`)return t.code;let n=t.error;if(n&&typeof n.code==`string`)return n.code}return t||`Admin API request failed`}function Je(e){return e&&typeof e==`object`&&e.adminStatus===`setupRequired`?`setupRequired`:`loginRequired`}function Ye(e){if(e.body&&typeof e.body==`object`){let t=e.body;if(typeof t.error==`string`)return t.error;if(typeof t.code==`string`)return t.code;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.code==`string`)return e.code}}return e.message}function Xe(e){if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.requestId==`string`)return t.requestId;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.requestId==`string`)return e.requestId}return null}function Ze(e,t){switch(t){case`invalid_credentials`:return`Check the admin username and password, then try again.`;case`csrf_required`:return`Refresh the page to renew the admin session, then retry the action.`;case`admin_login_rate_limited`:return`Too many failed login attempts. Wait before trying again.`;case`idempotency_conflict`:return`This action was already retried with different inputs. Refresh the console and try again.`;case`idempotency_key_required`:return`Refresh the console and retry the action with a new request.`;case`admin_configured_servers_unavailable`:return`Configured-server operations are not available on this runtime.`;case`backend_oauth_service_not_found`:return`The OAuth service is no longer available. Refresh the OAuth status and try again.`;case`backend_oauth_runtime_unavailable`:return`Backend OAuth operations are not available on this runtime.`;case`backend_oauth_authorization_start_failed`:return`The runtime could not start backend OAuth authorization. Refresh the OAuth status and try again.`;case`mutation_failed`:return`The runtime could not apply the server change. Refresh the console and inspect the current state.`;case`configured_server_stale_preview`:return`The server changed after this preview. Preview the edit again before applying.`;case`configured_server_destination_conflict`:return`The requested server name is already in use. Choose another target name and preview again.`;case`configured_server_connectivity_blocked`:return`Connectivity validation did not pass. Fix the connection settings and rerun connectivity before applying.`;case`configured_server_edit_invalid`:return`The server edit is invalid. Review the field errors and preview again.`;case`configured_server_edit_unchanged`:return`The preview no longer contains a change. Refresh the server detail before editing again.`;case`configured_server_not_found`:return`The configured server no longer exists. Return to the inventory and refresh it.`;case`configured_server_reload_failed`:return`The configuration was written, but the runtime reload failed. Inspect runtime health before continuing.`;case`configured_server_apply_failed`:return`The server edit could not be written. Refresh the detail and inspect runtime health before retrying.`;case`operation_in_progress`:return`Another admin operation is still running. Wait for it to finish, then refresh the console.`;case`operation_state_unknown`:return`The runtime could not confirm the operation result. Refresh the console and inspect the current state before retrying.`;case`admin_operation_journal_unavailable`:return`The runtime cannot record admin operations right now. Check runtime health before retrying.`;case`runtime_scope_mismatch`:return`The runtime identity changed. Stop using this session and verify the selected runtime before retrying.`;case`mutation_confirmation_required`:return`This operation needs an explicit confirmation flow that is not available in the console yet.`;default:if(e.status===401)return`The admin session is no longer valid. Log in again.`;if(e.status===403)return`The admin session cannot perform this action. Refresh the page and try again.`;if(e.status===429)return`The runtime is rate limiting this request. Wait before trying again.`;if(t.startsWith(`configured_server_`)){let t=Qe(e.body);if(t)return t}return`The Admin Console request failed. Refresh the console and try again.`}}function Qe(e){if(!e||typeof e!=`object`)return null;let t=e.message;return typeof t==`string`&&t.trim().length>0?t.trim():null}function $e(e){let t=crypto.getRandomValues(new Uint32Array(2)).join(`-`);return`admin-console-${e.action}-${et(e.targetName)}-${Date.now()}-${t}`}function et(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}var Y=e(te(),1);function tt(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>{let t=!r||e.id.toLowerCase().includes(r)||st(e).some(e=>e.toLowerCase().includes(r))||ot(e).toLowerCase().includes(r)||at(e.transport).toLowerCase().includes(r),i=n===`all`||n===`enabled`&&e.enabled||n===`disabled`&&!e.enabled;return t&&i})}function nt(e){return e.filter(e=>e.enabled).length}function rt(e){return e.filter(e=>!e.enabled).length}function it(e){return!!e.requiresOAuth&&(e.status!==`connected`||!!e.lastError)}function at(e){return typeof e.command==`string`?e.command:typeof e.url==`string`?e.url:typeof e.type==`string`?e.type:`configured`}function ot(e){return e.transportSummary?.label??at(e.transport)}function st(e){return Array.isArray(e.tags)?e.tags:[]}function ct(e){return e.mutationAvailability?.available??!0}function lt(e,t){return e.actionState?.[t]??{available:!0,label:t===`enable`?`Enable ${e.id}`:`Disable ${e.id}`}}function ut(e){let t=e.connectivityCheck;return t.status===`skipped`?ft(t.reason):t.status===`failed`?t.message:t.checkedAt?`Checked at ${t.checkedAt}`:void 0}function dt(e){return e.status===`passed`?`Bounded dry-run connectivity check passed.`:e.status===`failed`?`Connectivity check failed. Apply remains blocked until the check passes or a later override path is available.`:`Connectivity check was skipped for this preview.`}function ft(e){switch(e){case`connection_critical_fields_unchanged`:return`Connection-critical fields are unchanged. Rerun connectivity if you want an explicit check.`;case`target_disabled`:return`Target is disabled, so automatic connectivity was skipped.`;case`validation_failed`:return`Validation failed before a connectivity check could run.`;case`local_stdio_transport`:return`Local stdio transport does not use remote connectivity checks.`;case`checker_unavailable`:return`Connectivity checker is unavailable on this runtime.`;case`endpoint_changed_with_preserved_secrets`:return`Endpoint changed while secrets stayed preserved. Supply replacements or rerun after updating secrets.`;default:return e}}function pt(e){switch(e){case`rename`:return`violet`;case`connection_critical`:return`red`;case`secret`:return`grape`;case`template_risk`:return`orange`;case`tool_visibility`:return`yellow`;case`tool_metadata`:return`blue`;default:return`gray`}}function mt(e){switch(e){case`rename`:return`rename`;case`connection_critical`:return`connection critical`;case`secret`:return`secret`;case`template_risk`:return`template risk`;case`tool_visibility`:return`tool visibility`;case`tool_metadata`:return`tool metadata`;default:return e}}function ht(e){return e.secretInputs.length===0?`No secret inputs`:`${e.secretInputs.length} redacted`}function gt(e){return e?.runtimeVersion??`unknown`}function _t(e){return e?.externalUrl??`not reported`}function vt(e){return e.view===`setupRequired`?`Setup required`:e.view}function yt(e){return e.view===`setupRequired`?`yellow`:e.view===`console`?`teal`:`gray`}function bt(e){return e.replace(/([A-Z])/g,` $1`).toLowerCase()}function xt(){return{preview:null,confirmation:``,previewBusy:!1,applyBusy:!1,error:null,result:null}}function St(e,t){switch(t.type){case`reset`:return xt();case`previewStarted`:return{...e,previewBusy:!0,error:null,result:null};case`previewSucceeded`:return{...e,preview:t.preview,confirmation:``,previewBusy:!1,error:null};case`previewFailed`:return{...e,previewBusy:!1,error:t.message};case`confirmationChanged`:return{...e,confirmation:t.value,error:null};case`applyStarted`:return{...e,applyBusy:!0,error:null};case`applySucceeded`:return{...e,preview:null,confirmation:``,applyBusy:!1,error:null,result:t.result};case`applyFailed`:return{...e,preview:t.clearPreview?null:e.preview,confirmation:t.clearPreview?``:e.confirmation,applyBusy:!1,error:t.message}}}function Ct(e){return e.configChange.reload.status!==`observed`||e.runtimeImpact?.retirementObserved===!1}function wt(e){return!!(e.preview&&!e.previewBusy&&!e.applyBusy&&e.confirmation===e.preview.qualifiedId)}var X=F();function Tt({result:e,dismiss:t}){let n=e.target.source===`mcpTemplates`?e.runtimeImpact:void 0,i=Ct(e);return(0,X.jsxs)(r,{color:i?`yellow`:`teal`,icon:i?(0,X.jsx)(_e,{size:16}):(0,X.jsx)(me,{size:16}),title:`${e.qualifiedId} deleted${i?`; recovery required`:``}`,withCloseButton:!0,closeButtonLabel:`Dismiss deletion notice`,onClose:t,role:`status`,children:[(0,X.jsx)(d,{size:`sm`,children:i?`Configuration write completed. Runtime reload status: ${e.configChange.reload.status}. Runtime reconciliation is incomplete and the runtime may still serve this target.`:`Runtime reload observed.`}),i?(0,X.jsx)(d,{size:`sm`,children:e.configChange.backup.created?`A recovery backup exists. Restore it if the deletion must be reversed.`:`No recovery backup was reported; inspect runtime and configuration state before continuing.`}):null,n?(0,X.jsxs)(d,{size:`sm`,children:[`Instances: `,n.activeInstancesBefore,` before, `,n.retiredInstances,` retired,`,` `,n.activeInstancesAfter,` active after. Retirement observed:`,` `,n.retirementObserved?`yes`:`no`,`.`]}):i?null:(0,X.jsx)(d,{size:`sm`,children:`Configured backend removal observed after reload.`})]})}function Z({label:e,value:t,meta:r,description:i,copyLabel:a,copyValue:o,onCopyText:s,wrapValue:c=!1}){let l=o??t;return(0,X.jsxs)(n,{className:`detail-row`,justify:`space-between`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{className:`detail-row-main`,children:[(0,X.jsx)(d,{fw:700,children:e}),(0,X.jsx)(d,{className:c?`detail-row-value-wrap`:`truncate`,size:`sm`,children:t}),r?(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:r}):null,i?(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:i}):null]}),a&&l!==`-`?(0,X.jsx)(m,{"aria-label":`Copy ${bt(a)}`,size:`compact-xs`,variant:`subtle`,leftSection:(0,X.jsx)(ae,{size:14}),onClick:()=>void s?.(a,l),children:`Copy`}):null]})}function Q({title:e,utility:t,icon:r,children:i}){return(0,X.jsx)(b,{component:`section`,className:`operations-panel`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`center`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[r,(0,X.jsx)(k,{order:3,children:e})]}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:t})]}),i]})})}function Et({message:e}){return(0,X.jsx)(d,{c:`dimmed`,children:e})}function Dt(e){let t=(0,Y.useRef)(e),n=(0,Y.useRef)(0),r=(0,Y.useRef)(0),i=(0,Y.useRef)(0),a=(0,Y.useRef)(!1),o=(0,Y.useRef)();return t.current=e,{loadRequestRef:n,previewRequestRef:r,applyRequestRef:i,applyInteractionRef:a,applyAttemptRef:o,invalidatePreview:(0,Y.useCallback)(()=>{r.current+=1,o.current=void 0},[]),invalidateApply:(0,Y.useCallback)(()=>{i.current+=1,o.current=void 0},[]),reset:(0,Y.useCallback)(()=>{n.current+=1,r.current+=1,i.current+=1,a.current=!1,o.current=void 0,t.current()},[])}}function Ot(e,t,n,r,i,a=[]){let o={},s={};for(let r of e)for(let e of r.fields){if(e.control===`secret`||!e.editable||e.control===`readonly`||!jt(e,i))continue;let r=$(e.fieldPath),a=Lt(e,t[r]);if(zt(a)===zt(Lt(e,n[r])))continue;let c=e.fieldPath[0];c===`id`?o.id=String(a??``):c===`enabled`?o.enabled=!!a:c===`tags`?o.tags=Mt(a):c===`transport`&&e.fieldPath.length>1?Rt(s,e.fieldPath.slice(1),a):c&&Rt(o,e.fieldPath,a)}let c=Object.values(r).filter(t=>{let n=e.flatMap(e=>e.fields).find(e=>$(e.fieldPath)===$(t.fieldPath));return!n||jt(n,i)}).filter(e=>e.action!==`preserve`).map(e=>({fieldPath:e.fieldPath,action:e.action,...e.action===`replace`?{replacement:{kind:e.replacementKind,value:e.replacementValue}}:{}}));return{...o,...Object.keys(s).length>0?{transport:s}:{},...c.length>0?{secrets:c}:{},...a.length>0?{clearTransportOverrides:a}:{}}}function $(e){return e.join(`\0`)}function kt(e){return Lt(e,e.value)}function At(e,t){let n=e[$([`transport`,`type`])]??t;return n===`stdio`||n===`http`||n===`sse`||n===`streamableHttp`?n:void 0}function jt(e,t){return!t||!e.applicableTransportTypes||e.applicableTransportTypes.includes(t)}function Mt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function Nt(e){return e.split(/\r?\n/u).map(e=>e.trim()).filter(Boolean)}function Pt(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:{...e}}function Ft(e){return Array.isArray(e)?e.join(`, `):e&&typeof e==`object`?Object.keys(e).length>0?Object.keys(e).join(`, `):`-`:String(e??`-`)}function It(e){if(e==null)return`-`;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e))return e.map(It).join(`, `);if(typeof e!=`object`)return`-`;let t=e;return t.secret===!0||t.value===`[REDACTED]`?`[REDACTED]`:t.kind===`inlineSecret`?`inline secret: [REDACTED]`:typeof t.kind==`string`&&typeof t.value==`string`?`${Vt(t.kind)}: ${t.value}`:Object.entries(t).map(([e,t])=>`${e}: ${Bt(e)?`[REDACTED]`:It(t)}`).join(`; `)}function Lt(e,t){return e.control===`switch`?!!t:e.control===`tag-list`||e.control===`string-list`?Mt(t):e.control===`record`?Pt(t):e.control===`number`?typeof t==`number`?t:void 0:e.control===`text`||e.control===`select`?String(t??``):t}function Rt(e,t,n){let r=e;for(let e of t.slice(0,-1)){let t=r[e];(!t||typeof t!=`object`||Array.isArray(t))&&(r[e]={}),r=r[e]}let i=t.at(-1);i&&(r[i]=n)}function zt(e){return JSON.stringify(e)}function Bt(e){return/authorization|password|secret|token/iu.test(e)}function Vt(e){return e.replace(/([A-Z])/g,` $1`).toLowerCase()}function Ht(){return{status:`idle`}}function Ut(e,t){switch(t.type){case`closed`:return{status:`idle`};case`contractLoadStarted`:return{status:`loading`};case`contractLoaded`:{let e={};for(let n of t.contract.createContract.fieldGroups.flatMap(e=>e.fields))e[$(n.fieldPath)]=kt(n);let n=$([`transport`,`type`]);return[`stdio`,`http`,`sse`].includes(String(e[n]??``))||(e[n]=`stdio`),{status:`editing`,contract:t.contract,fieldDraft:e,secrets:[],dirty:!1,previewBusy:!1,applyBusy:!1}}case`contractFailed`:return{status:`failed`,message:t.message};case`fieldChanged`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{fieldDraft:{...e.fieldDraft,[$(t.fieldPath)]:t.value}});case`secretAdded`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{secrets:[...e.secrets,t.secret]});case`secretChanged`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{secrets:e.secrets.map(e=>e.id===t.secret.id?t.secret:e)});case`secretRemoved`:return e.status!==`editing`||e.applyBusy?e:Kt(e,{secrets:e.secrets.filter(e=>e.id!==t.id)});case`previewStarted`:return e.status===`editing`?{...e,previewBusy:!0,previewError:void 0}:e;case`previewSucceeded`:return e.status===`editing`?{...e,preview:t.preview,previewBusy:!1,previewError:void 0}:e;case`previewFailed`:return e.status===`editing`?{...e,previewBusy:!1,previewError:t.message}:e;case`applyStarted`:return e.status===`editing`?{...e,applyBusy:!0,applyError:void 0}:e;case`applyFailed`:return e.status===`editing`?{...e,applyBusy:!1,applyError:t.message,preview:t.clearPreview?void 0:e.preview}:e;case`applySucceeded`:return{status:`committed`,serverId:t.response.result.targetName,result:t.response.result,warning:t.response.result.configChange.reload.status===`failed`?t.response.result.configChange.reload.error??`Runtime reload failed after configuration was written.`:void 0}}}function Wt(e){if(e.status!==`editing`)return null;let t=e.fieldDraft[$([`transport`,`type`])];if(t!==`stdio`&&t!==`http`&&t!==`sse`)return null;let n={type:t},r=e.fieldDraft[$([`source`])]===`mcpTemplates`?`mcpTemplates`:`mcpServers`;for(let i of e.contract.createContract.fieldGroups.flatMap(e=>e.fields)){if(i.fieldPath[0]!==`transport`||i.fieldPath.length<2||i.applicableSources&&!i.applicableSources.includes(r)||!jt(i,t)||i.fieldPath[1]===`type`)continue;let a=e.fieldDraft[$(i.fieldPath)],o=i.control===`string-list`?Mt(a):i.control===`record`?Pt(a):a;o!==``&&o!==void 0&&Gt(n,i.fieldPath.slice(1),o)}let i=t===`stdio`?`env`:`headers`,a=e.secrets.filter(e=>e.container===i&&e.key.trim()&&e.replacementValue.trim()).map(e=>({fieldPath:[e.container,e.key.trim()],action:`replace`,replacement:{kind:e.replacementKind,value:e.replacementValue}}));return{source:r,name:String(e.fieldDraft[$([`name`])]??``),enabled:r!==`mcpServers`||!!e.fieldDraft[$([`enabled`])],tags:Mt(e.fieldDraft[$([`tags`])]),transport:n,...a.length>0?{secrets:a}:{}}}function Gt(e,t,n){let r=e;for(let e of t.slice(0,-1)){let t=r[e];(!t||typeof t!=`object`||Array.isArray(t))&&(r[e]={}),r=r[e]}let i=t.at(-1);i&&(r[i]=n)}function Kt(e,t){return{...e,...t,dirty:!0,preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0}}function qt({api:e,session:t,browser:n,onUnauthenticated:r,onCreated:i,onOpenCreated:a,onPathCommitted:o}){let[s,c]=(0,Y.useReducer)(Ut,void 0,Ht),l=(0,Y.useRef)(s),u=(0,Y.useRef)(e),d=(0,Y.useRef)(t),f=(0,Y.useRef)(r);u.current=e,d.current=t,f.current=r;let p=(0,Y.useCallback)(e=>{let t=Ut(l.current,e);l.current=t,c(e)},[]),{loadRequestRef:m,previewRequestRef:h,applyRequestRef:g,applyInteractionRef:_,applyAttemptRef:v,invalidatePreview:y,reset:b}=Dt(()=>p({type:`closed`})),x=(0,Y.useCallback)(e=>!(e instanceof J)||e.failure.kind!==`unauthenticated`?!1:(b(),f.current(e.failure.adminStatus),!0),[b]),S=(0,Y.useCallback)(async()=>{let e=d.current;if(!e)return;let t=m.current+1;m.current=t;let n=e.csrfToken;p({type:`contractLoadStarted`});try{let e=await u.current.getConfiguredServerCreateContract();if(t!==m.current||d.current?.csrfToken!==n)return;p({type:`contractLoaded`,contract:e})}catch(e){if(t!==m.current||d.current?.csrfToken!==n)return;x(e)||p({type:`contractFailed`,message:Zt(e)})}},[p,x]),C=(0,Y.useCallback)(async()=>{let e=l.current;e.status===`editing`&&e.dirty&&!await Yt(n)||(b(),n.push(`/admin/servers/new`),o?.(`/admin/servers/new`),await S())},[n,S,o,b]),w=(0,Y.useCallback)(async(e=`/admin/servers`)=>{let t=l.current;return t.status===`editing`&&t.dirty&&!await Yt(n)?!1:(b(),n.push(e),o?.(e),!0)},[n,o,b]),T=(0,Y.useCallback)(async e=>{await w(`/admin/servers`)&&await a?.({source:`mcpServers`,id:e})},[w,a]),E=(0,Y.useCallback)((e,t)=>{y(),p({type:`fieldChanged`,fieldPath:e,value:t})},[p,y]),D=(0,Y.useCallback)(e=>{y(),p({type:`secretAdded`,secret:e})},[p,y]),O=(0,Y.useCallback)(e=>{y(),p({type:`secretChanged`,secret:e})},[p,y]),k=(0,Y.useCallback)(e=>{y(),p({type:`secretRemoved`,id:e})},[p,y]),A=(0,Y.useCallback)(async(e=`auto`)=>{let t=d.current,n=l.current,r=Wt(n);if(!t||n.status!==`editing`||!r)return;let i=h.current+1;h.current=i;let a=t.csrfToken;p({type:`previewStarted`});try{let t=await u.current.previewConfiguredServerCreate({draft:r,csrfToken:a,connectivityCheck:e});if(i!==h.current||d.current?.csrfToken!==a)return;v.current?.previewFingerprint!==t.preview.previewFingerprint&&(v.current=void 0),p({type:`previewSucceeded`,preview:t.preview})}catch(e){if(i!==h.current||d.current?.csrfToken!==a)return;x(e)||p({type:`previewFailed`,message:`Preview failed: ${Zt(e)}`})}},[p,x]),j=(0,Y.useCallback)(async()=>{if(_.current)return;let e=d.current,t=l.current,r=Wt(t);if(!(!e||t.status!==`editing`||!t.preview||!r)&&Jt(t).eligible){_.current=!0;try{let o=t.preview,s=o.connectivityCheck.status===`failed`,c=r.source===`mcpTemplates`;if(!await n.confirm({title:s?`Create ${r.name} despite failed connectivity?`:c?`Create Template definition ${r.name}?`:`Create configured server ${r.name}?`,message:s?`The bounded connectivity check failed. Creating this target may leave it unavailable.`:c?`This writes a Template Server definition and reloads the Runtime Scope. No runtime instance is created.`:`This writes a new static target and reloads the Runtime Scope.`,confirmLabel:s?`Create despite failure`:c?`Create template`:`Create server`,tone:s?`danger`:void 0,details:[{label:`Target`,value:r.name},{label:`Transport`,value:r.transport.type},{label:`Connectivity`,value:o.connectivityCheck.status},{label:`Existing target`,value:`Must remain absent`}]}))return;let l=v.current?.previewFingerprint===o.previewFingerprint?v.current:{previewFingerprint:o.previewFingerprint,idempotencyKey:Be(r.name)};v.current=l;let f=g.current+1;g.current=f;let m=e.csrfToken;p({type:`applyStarted`});try{let e=await u.current.createConfiguredServer({draft:r,csrfToken:m,idempotencyKey:l.idempotencyKey,previewFingerprint:o.previewFingerprint,confirmationFacts:{previewConfirmed:o.previewFingerprint,targetNameConfirmed:r.name,connectionCriticalConfirmed:!0,...o.diff.some(e=>e.riskFlags.includes(`secret`))?{secretChangeConfirmed:!0}:{},...s?{connectivityFailureOverrideConfirmed:!0}:{}}});if(f!==g.current||d.current?.csrfToken!==m)return;v.current=void 0,p({type:`applySucceeded`,response:e}),await i?.(),await a?.({source:e.result.targetSource===`mcpTemplates`||e.result.configChange.target.source===`mcpTemplates`?`mcpTemplates`:`mcpServers`,id:e.result.targetName}),e.result.configChange.reload.status!==`failed`&&p({type:`closed`})}catch(e){if(f!==g.current||d.current?.csrfToken!==m)return;if(!x(e)){let t=Xt(e);t&&(v.current=void 0),p({type:`applyFailed`,message:`Create failed: ${Zt(e)}`,clearPreview:t})}}}finally{_.current=!1}}},[n,p,x,i,a]);return(0,Y.useEffect)(()=>{if(!t){b();return}n.pathname()===`/admin/servers/new`&&S()},[n,S,b,t?.csrfToken]),(0,Y.useEffect)(()=>n.subscribePopState(()=>{(async()=>{let e=n.pathname(),t=l.current;if(t.status===`editing`&&t.dirty){if(n.replace(`/admin/servers/new`),!await Yt(n)){o?.(`/admin/servers/new`);return}n.replace(e)}b(),o?.(e)})()}),[n,o,b]),{state:s,open:C,close:w,editExisting:T,changeField:E,addSecret:D,changeSecret:O,removeSecret:k,preview:A,apply:j}}function Jt(e){if(e.status!==`editing`||!e.preview)return{eligible:!1,reason:`Preview this server first.`};if(!e.contract.createContract.capabilities.apply.supported)return{eligible:!1,reason:`Creation is unavailable.`};if(e.preview.validation.status!==`valid`)return{eligible:!1,reason:`Resolve validation issues.`};if(!e.preview.configChange.changed||e.preview.diff.length===0)return{eligible:!1,reason:`The preview contains no changes.`};let t=Wt(e);if(!t)return{eligible:!1,reason:`Complete the server configuration.`};let n=e.preview.diff.some(e=>e.riskFlags.includes(`connection_critical`));return t.enabled&&t.transport.type!==`stdio`&&n&&e.preview.connectivityCheck.status!==`passed`&&e.preview.connectivityCheck.status!==`failed`&&!(e.preview.connectivityCheck.status===`skipped`&&e.preview.connectivityCheck.reason===`checker_unavailable`)?{eligible:!1,reason:`A connectivity check must run before creation.`}:{eligible:!0}}function Yt(e){return e.confirm({title:`Discard custom server?`,message:`The configured-server draft, preview, and secret replacements will be lost.`,confirmLabel:`Discard draft`,tone:`danger`})}function Xt(e){return e instanceof J&&e.failure.kind===`rejected`&&e.failure.code===`configured_server_stale_preview`}function Zt(e){if(e instanceof J)return e.failure.message;throw e}function Qt(e){return e===`identity`?`Rename or enable this target before previewing.`:e===`secrets`?`Choose preserve, replace, or clear without revealing current values.`:e===`transport`?`Change how the runtime connects to this server.`:`Edit normalized fields owned by the Admin Domain.`}function $t({field:e,value:t,onChange:n}){return!e.editable||e.control===`readonly`?(0,X.jsx)(Z,{label:e.label,value:Ft(t)}):e.control===`switch`?(0,X.jsx)(T,{label:e.label,checked:!!t,onChange:e=>n(e.currentTarget.checked)}):e.control===`tag-list`?(0,X.jsx)(D,{label:e.label,value:Mt(t),onChange:n}):e.control===`select`?(0,X.jsx)(y,{label:e.label,value:String(t??``),data:e.options??[],onChange:e=>n(e.currentTarget.value)}):e.control===`number`?(0,X.jsx)(C,{label:e.label,value:typeof t==`number`?t:``,onChange:e=>n(e===``?void 0:e)}):e.control===`string-list`?(0,X.jsx)(j,{label:e.label,value:Mt(t).join(`
3
+ `),autosize:!0,minRows:2,onChange:e=>n(Nt(e.currentTarget.value))}):e.control===`record`?(0,X.jsx)(en,{label:e.label,value:Pt(t),onChange:n}):(0,X.jsx)(w,{label:e.label,value:String(t??``),onChange:e=>n(e.currentTarget.value)})}function en({label:e,value:t,onChange:r}){let[i,a]=(0,Y.useState)(``),[o,s]=(0,Y.useState)(``);function c(e,n){r({...t,[e]:n})}function l(e){let n={...t};delete n[e],r(n)}function u(){let e=i.trim();e&&(r({...t,[e]:o}),a(``),s(``))}return(0,X.jsxs)(O,{className:`record-editor`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e}),Object.entries(t).map(([t,r])=>(0,X.jsxs)(n,{gap:`xs`,align:`flex-end`,wrap:`nowrap`,children:[(0,X.jsx)(w,{className:`record-editor-value`,label:`${e} ${t}`,value:String(r??``),onChange:e=>c(t,e.currentTarget.value)}),(0,X.jsx)(m,{"aria-label":`Remove ${e} ${t}`,size:`compact-xs`,variant:`subtle`,color:`red`,onClick:()=>l(t),children:`Remove`})]},t)),(0,X.jsxs)(n,{gap:`xs`,align:`flex-end`,children:[(0,X.jsx)(w,{label:`New ${e} key`,value:i,onChange:e=>a(e.currentTarget.value)}),(0,X.jsx)(w,{label:`New ${e} value`,value:o,onChange:e=>s(e.currentTarget.value)}),(0,X.jsx)(m,{variant:`default`,onClick:u,children:`Add entry`})]})]})}function tn({field:e,draft:t,onChange:i}){let a=t??{fieldPath:e.fieldPath,action:`preserve`,replacementKind:e.secret?.environmentReference.supported===!1?`inlineSecret`:`environmentReference`,replacementValue:``},o=e.secret?.allowedActions??[`preserve`,`replace`,`clear`],s=e.secret?.environmentReference.supported??!0,c=e.secret?.environmentReference.recommended??s,l=e.secret?.inlineReplacement.supported??!1;return(0,X.jsx)(b,{className:`secret-editor`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:700,children:e.label}),(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:e.secret?.environmentReference.guidance??`Store only an environment variable name or substitution expression when possible.`})]}),(0,X.jsxs)(n,{gap:4,children:[(0,X.jsx)(u,{variant:`light`,children:`redacted`}),c?(0,X.jsx)(u,{color:`teal`,variant:`light`,children:`env reference recommended`}):null]})]}),(0,X.jsx)(_.Group,{value:a.action,onChange:e=>i({...a,action:e}),children:(0,X.jsx)(n,{gap:`sm`,children:o.map(t=>(0,X.jsx)(_,{value:t,label:nn(t,e.label)},t))})}),a.action===`replace`?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsx)(r,{color:`teal`,variant:`light`,children:`Recommended: keep secret material outside 1MCP config by writing only an environment variable name or substitution expression.`}),(0,X.jsx)(_.Group,{label:`Replacement source`,value:a.replacementKind,onChange:e=>i({...a,replacementKind:e}),children:(0,X.jsx)(n,{gap:`sm`,children:(0,X.jsx)(_,{disabled:!s,value:`environmentReference`,label:`Environment variable (recommended)`})})}),a.replacementKind===`environmentReference`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(w,{label:`Environment variable for ${e.label}`,description:"Example: GITHUB_TOKEN or ${GITHUB_TOKEN}",value:a.replacementValue,onChange:e=>i({...a,replacementValue:e.currentTarget.value})}),l?(0,X.jsx)(m,{size:`compact-sm`,variant:`subtle`,color:`yellow`,onClick:()=>i({...a,replacementKind:`inlineSecret`,replacementValue:``}),children:`Use advanced inline secret instead`}):null]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(r,{color:`yellow`,role:`alert`,children:`Advanced path: inline replacement stores secret material in configuration. Prefer an environment reference unless the deployment cannot provide one.`}),(0,X.jsx)(E,{label:`Inline secret for ${e.label}`,value:a.replacementValue,onChange:e=>i({...a,replacementValue:e.currentTarget.value})}),s?(0,X.jsx)(m,{size:`compact-sm`,variant:`subtle`,onClick:()=>i({...a,replacementKind:`environmentReference`,replacementValue:``}),children:`Use environment variable instead`}):null]}),(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:a.replacementKind===`environmentReference`?e.secret?.environmentReference.guidance:e.secret?.inlineReplacement.guidance})]}):null]})})}function nn(e,t){return e===`preserve`?`Preserve existing ${t}`:e===`replace`?`Replace ${t}`:`Clear saved ${t}`}function rn({preview:e}){let t=e.connectivityCheck,i=e.validation.status===`valid`?`teal`:`red`,a=t.status===`passed`?`teal`:t.status===`failed`?`red`:`yellow`,o=t.status===`skipped`&&t.reason===`template_structural_preview`;return(0,X.jsx)(b,{className:`preview-result`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`Preview result`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Domain facts only. No config has been written.`})]}),(0,X.jsx)(N,{className:`preview-fingerprint`,children:e.previewFingerprint})]}),(0,X.jsx)(r,{color:`blue`,variant:`light`,children:`Preview only - no config has been written.`}),(0,X.jsxs)(h,{cols:{base:1,sm:2},spacing:`xs`,children:[(0,X.jsx)(Z,{label:`Target`,value:e.targetName,meta:`Proposed: ${e.proposedTargetName??e.targetName}`}),(0,X.jsx)(Z,{label:`Validation`,value:e.validation.status,meta:e.validation.errors.length>0?`${e.validation.errors.length} field issue${e.validation.errors.length===1?``:`s`}`:`Ready to apply after confirmation`}),(0,X.jsx)(Z,{label:`Config change`,value:e.configChange.status,meta:`${e.configChange.operation} / ${e.configChange.changed?`changed`:`unchanged`}`}),`expectedReload`in e?(0,X.jsx)(Z,{label:`Expected reload`,value:`Checked after creation`,meta:`The runtime reports the reload outcome after configuration is written.`}):(0,X.jsx)(Z,{label:`Reload`,value:e.configChange.reload.status,meta:e.configChange.reload.error}),(0,X.jsx)(Z,{label:`Backup`,value:e.configChange.backup.created?`created`:`not created`,meta:e.configChange.backup.path}),(0,X.jsx)(b,{className:`connectivity-card connectivity-${t.status}`,withBorder:!0,children:(0,X.jsxs)(O,{gap:4,children:[(0,X.jsxs)(n,{justify:`space-between`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:o?`Runtime contact`:`Connectivity`}),(0,X.jsx)(u,{color:a,variant:`light`,children:t.status})]}),(0,X.jsx)(d,{size:`sm`,children:o?`Skipped. Template preview is structural and does not contact a backend.`:dt(t)}),ut(e)?(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:ut(e)}):null]})})]}),e.templateAnalysis?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Template structure`}),(0,X.jsx)(u,{color:e.templateAnalysis.syntax.valid?`teal`:`red`,variant:`light`,children:e.templateAnalysis.syntax.valid?`valid syntax`:`invalid syntax`})]}),(0,X.jsxs)(h,{cols:{base:1,sm:2},spacing:`xs`,children:[(0,X.jsx)(Z,{label:`Request Context variables`,value:e.templateAnalysis.variables.join(`, `)||`none`,meta:`Names only; values are never loaded or rendered during preview.`}),(0,X.jsx)(Z,{label:`Runtime instances`,value:`${e.runtimeImpact?.activeInstanceCount??0} active`,meta:e.runtimeImpact?.retirementRequired?`Active instances retire after apply and successful reload.`:`Preview and creation do not create an instance.`})]})]}):null,e.toolSelection?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Tool impact`}),(0,X.jsx)(u,{variant:`outline`,children:e.toolSelection.model})]}),(0,X.jsxs)(h,{cols:{base:1,sm:3},spacing:`xs`,children:[(0,X.jsx)(Z,{label:`Selection`,value:`${e.toolSelection.counts.enabled} enabled / ${e.toolSelection.counts.disabled} disabled`,meta:`${e.toolSelection.counts.unresolved} unresolved`}),(0,X.jsx)(Z,{label:`Approximate tokens`,value:`${e.toolSelection.approximateTokens.before} to ${e.toolSelection.approximateTokens.after}`,meta:`Savings: ${e.toolSelection.approximateTokens.savings}`}),(0,X.jsx)(Z,{label:`Runtime effect`,value:e.toolSelection.effect===`immediate`?`Immediate`:`Deferred`,meta:`${e.toolSelection.changedTools.length} changed tools`})]}),e.toolSelection.requiresZeroEnabledConfirmation?(0,X.jsx)(r,{color:`red`,role:`alert`,children:`Applying this preview disables every currently observed tool.`}):null]}):null,e.configChange.warnings?.map(e=>(0,X.jsx)(Z,{label:`Warning`,value:e},`warning:${e}`)),e.warnings?.map(e=>(0,X.jsx)(Z,{label:`Preview warning`,value:e},`preview-warning:${e}`)),e.configChange.retentionCleanup.warnings.map(e=>(0,X.jsx)(Z,{label:`Retention warning`,value:e},`retention:${e}`)),e.validation.errors.length>0?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Validation issues`}),(0,X.jsx)(u,{color:i,variant:`light`,children:e.validation.errors.length})]}),e.validation.errors.map(e=>(0,X.jsx)(Z,{label:e.fieldPath.join(`.`)||`form`,value:e.code,meta:e.message},`${$(e.fieldPath)}:${e.code}`))]}):null,e.diff.length>0?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Redacted diff`}),(0,X.jsxs)(u,{variant:`outline`,children:[e.diff.length,` change`,e.diff.length===1?``:`s`]})]}),e.diff.map(e=>(0,X.jsx)(b,{className:`preview-diff-entry`,withBorder:!0,children:(0,X.jsxs)(O,{gap:6,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.fieldPath.join(`.`)}),(0,X.jsxs)(n,{gap:4,children:[e.secretAction?(0,X.jsxs)(u,{color:`grape`,variant:`light`,children:[`secret: `,e.secretAction]}):null,e.riskFlags.map(e=>(0,X.jsx)(u,{color:pt(e),variant:`light`,children:mt(e)},e))]})]}),(0,X.jsxs)(d,{size:`sm`,children:[(0,X.jsxs)(d,{span:!0,c:`dimmed`,children:[`from`,` `]}),It(e.oldValue),(0,X.jsxs)(d,{span:!0,c:`dimmed`,children:[` `,`to`,` `]}),It(e.newValue)]})]})},$(e.fieldPath)))]}):(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`No field-level changes were reported by preview.`})]})})}function an({model:e}){let{state:t}=e,i=(0,Y.useRef)(null),a=t.status===`editing`&&!!t.preview?.validation.errors.some(e=>!on(e.fieldPath));if((0,Y.useEffect)(()=>{a&&i.current&&(i.current.open=!0)},[a]),t.status===`idle`)return null;if(t.status===`loading`)return(0,X.jsx)(Q,{title:`Configure custom server`,utility:`loading`,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsx)(Et,{message:`Loading creation controls.`})});if(t.status===`failed`)return(0,X.jsx)(Q,{title:`Configure custom server`,utility:`unavailable`,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(r,{color:`red`,role:`alert`,children:t.message}),(0,X.jsxs)(n,{children:[(0,X.jsx)(m,{onClick:()=>void e.open(),children:`Retry loading`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>void e.close(),children:`Back to servers`})]})]})});if(t.status===`committed`)return(0,X.jsx)(Q,{title:`Configured server created`,utility:t.serverId,icon:(0,X.jsx)(le,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(r,{color:`teal`,role:`status`,children:[`Created `,t.serverId,`.`]}),t.warning?(0,X.jsx)(r,{color:`yellow`,children:t.warning}):null,(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Refreshing the inventory and opening the created target.`}),(0,X.jsx)(m,{onClick:()=>void e.close(`/admin/servers/${t.result.targetSource??t.result.configChange.target.source??`mcpServers`}/${encodeURIComponent(t.serverId)}`),children:`Open server detail`})]})});let o=t.fieldDraft[$([`transport`,`type`])],s=t.fieldDraft[$([`source`])]===`mcpTemplates`?`mcpTemplates`:`mcpServers`,c=o===`http`||o===`sse`?o:`stdio`,l=t.contract.createContract.fieldGroups.map(e=>({...e,fields:e.fields.filter(e=>e.fieldPath[0]!==`source`&&(!e.applicableSources||e.applicableSources.includes(s))&&jt(e,c))})).filter(e=>e.fields.length>0),f=l.map(e=>({...e,fields:e.fields.filter(e=>on(e.fieldPath))})).filter(e=>e.fields.length>0),p=l.flatMap(e=>e.fields).filter(e=>!on(e.fieldPath)),h=Jt(t),g=t.preview?.configChange.target.source===`mcpServers`&&t.preview.validation.errors.some(e=>[`configured_server_name_conflict`,`configured_server_destination_conflict`].includes(e.code));return(0,X.jsx)(Q,{title:`Configure custom server`,utility:s===`mcpTemplates`?`new template definition`:`new static target`,icon:(0,X.jsx)(de,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Configured Server Target`}),(0,X.jsx)(k,{order:2,children:s===`mcpTemplates`?`New template definition`:`New custom server`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Configure -> Preview -> Confirm creation`})]}),(0,X.jsx)(m,{variant:`default`,onClick:()=>void e.close(),children:`Back`})]}),(0,X.jsx)(A,{fullWidth:!0,"aria-label":`Configured server definition type`,value:s,onChange:t=>e.changeField([`source`],t),data:[{value:`mcpServers`,label:`Static`},{value:`mcpTemplates`,label:`Template`}]}),s===`mcpTemplates`?(0,X.jsx)(r,{color:`blue`,variant:`light`,children:`Preview checks structure and Request Context variable names only. It never renders context, connects a backend, or creates an instance.`}):null,c===`sse`?(0,X.jsx)(r,{color:`yellow`,title:`Legacy transport`,children:`SSE is deprecated. Use HTTP for new remote servers when the endpoint supports it.`}):null,f.map(r=>(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:r.label}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:Qt(r.id)})]}),(0,X.jsxs)(u,{variant:`outline`,children:[r.fields.length,` fields`]})]}),r.fields.map(n=>sn(n,t.fieldDraft,e.changeField))]})},r.id)),(0,X.jsxs)(`details`,{ref:i,className:`advanced-settings`,children:[(0,X.jsx)(`summary`,{children:`Advanced settings`}),(0,X.jsxs)(O,{gap:`sm`,mt:`sm`,children:[p.length>0?(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsx)(d,{fw:800,children:`Optional transport settings`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Timeouts use milliseconds. Prefer Connection Timeout and Request Timeout over Deprecated Timeout.`}),p.map(n=>sn(n,t.fieldDraft,e.changeField))]})}):null,(0,X.jsx)(cn,{transport:c,secrets:t.secrets,inlineSupported:!!t.contract.createContract.secretPolicy.inlineReplacement&&t.contract.createContract.secretPolicy.allowedActions.includes(`replace`),onAdd:e.addSecret,onChange:e.changeSecret,onRemove:e.removeSecret})]})]}),(0,X.jsxs)(n,{className:`draft-action-bar`,justify:`space-between`,gap:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(u,{color:t.dirty?`yellow`:`gray`,variant:t.dirty?`light`:`outline`,children:t.dirty?`Unpreviewed draft`:`Complete the server details`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Preview validates the new target without writing configuration.`})]}),(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(m,{loading:t.previewBusy,disabled:!t.dirty||t.previewBusy||t.applyBusy,onClick:()=>void e.preview(`auto`),children:`Preview server`}),t.preview?(0,X.jsx)(m,{variant:`default`,disabled:t.applyBusy,onClick:()=>void e.preview(`manual`),children:`Rerun connectivity`}):null]})]}),t.previewError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:t.previewError}):null,t.applyError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:t.applyError}):null,t.preview?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(n,{justify:`flex-end`,align:`center`,children:[g?(0,X.jsx)(m,{leftSection:(0,X.jsx)(q,{size:16}),variant:`default`,onClick:()=>void e.editExisting(t.preview?.targetName??``),children:`Edit existing server`}):null,h.eligible?null:(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:h.reason}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(le,{size:16}),loading:t.applyBusy,disabled:!h.eligible||t.applyBusy,onClick:()=>void e.apply(),children:s===`mcpTemplates`?`Create template`:`Create server`})]}),(0,X.jsx)(rn,{preview:t.preview})]}):null]})})}function on(e){return e[0]===`secrets`?!1:e[0]!==`transport`||[`type`,`command`,`args`,`url`].includes(e[1]??``)}function sn(e,t,n){let r=$(e.fieldPath);return(0,X.jsx)($t,{field:[`timeout`,`connectionTimeout`,`requestTimeout`].includes(e.fieldPath[1]??``)?{...e,label:`${e.label} (ms)`}:e,value:t[r],onChange:t=>n(e.fieldPath,t)},r)}function cn({transport:e,secrets:t,inlineSupported:i,onAdd:a,onChange:o,onRemove:s}){let c=e===`stdio`?`env`:`headers`,l=t.filter(e=>e.container===c),u=c===`env`?`Environment secrets`:`Header secrets`;return(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:u}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Environment Secret Reference is recommended. Only the reference is stored in configuration.`})]}),(0,X.jsx)(m,{size:`compact-sm`,variant:`default`,leftSection:(0,X.jsx)(de,{size:14}),onClick:()=>a({id:un(),container:c,key:``,replacementKind:`environmentReference`,replacementValue:``}),children:`Add secret`})]}),l.length===0?(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`No secret inputs configured.`}):l.map(e=>(0,X.jsx)(b,{className:`secret-editor`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{align:`flex-end`,wrap:`nowrap`,children:[(0,X.jsx)(w,{label:c===`env`?`Environment variable`:`Header name`,value:e.key,onChange:t=>o({...e,key:t.currentTarget.value})}),(0,X.jsx)(y,{label:`Secret source`,value:e.replacementKind,data:[{value:`environmentReference`,label:`Environment Secret Reference`},...i?[{value:`inlineSecret`,label:`Advanced inline secret`}]:[]],onChange:t=>o({...e,replacementKind:t.currentTarget.value,replacementValue:``})}),(0,X.jsx)(m,{"aria-label":`Remove ${e.key||`secret`} input`,variant:`subtle`,color:`red`,onClick:()=>s(e.id),children:(0,X.jsx)(be,{size:16})})]}),e.replacementKind===`environmentReference`?(0,X.jsx)(w,{label:`Environment reference for ${e.key||u}`,placeholder:"MY_SECRET or ${MY_SECRET}",value:e.replacementValue,onChange:t=>o({...e,replacementValue:t.currentTarget.value})}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(r,{color:`yellow`,children:`Advanced path: inline replacement stores secret material in configuration. Prefer an Environment Secret Reference.`}),(0,X.jsx)(E,{label:`Inline secret for ${e.key||u}`,value:e.replacementValue,onChange:t=>o({...e,replacementValue:t.currentTarget.value})})]})]})},e.id))]})})}var ln=0;function un(){return ln+=1,`create-secret-${ln}`}function dn({model:e,target:t}){let{state:i}=e,a=i.preview,o=i.result;return(0,X.jsx)(b,{className:`edit-section configured-server-delete`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,c:`red`,children:`Delete definition`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Remove this source-qualified definition after a recovery copy and Runtime Scope reload observation.`})]}),o?(0,X.jsxs)(r,{color:Ct(o)?`yellow`:`teal`,role:`status`,children:[Ct(o)?o.configChange.reload.status===`failed`?`The definition was deleted from disk, but runtime reload failed and the runtime may still serve this target.`:`The definition was deleted from disk, but Template instance retirement was not confirmed and the runtime may still serve this target.`:`The definition was deleted from disk and the runtime reload was observed.`,` `,o.configChange.backup.created?`A recovery backup exists. Restore it if the deletion must be reversed.`:`No recovery backup was reported; inspect runtime and configuration state before continuing.`]}):a?(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(r,{color:`red`,title:`Delete ${a.qualifiedId}`,children:[a.runtimeImpact.kind===`template`?`${a.runtimeImpact.activeInstanceCount} active instance${a.runtimeImpact.activeInstanceCount===1?``:`s`} will be retired after reload.`:`The configured backend will be removed after reload.`,a.removal.preservesSameNamedOtherSource?` The same-named definition in the other source remains.`:``]}),(0,X.jsxs)(O,{gap:2,className:`configured-server-delete-facts`,children:[(0,X.jsxs)(d,{size:`xs`,children:[`Identity: `,a.qualifiedId]}),(0,X.jsxs)(d,{size:`xs`,children:[`Authority: `,a.authority]}),(0,X.jsxs)(d,{size:`xs`,children:[`Target fingerprint: `,a.targetFingerprint]}),(0,X.jsx)(d,{size:`xs`,children:`Removal diff: present definition to removed`}),(0,X.jsx)(d,{size:`xs`,children:`Backup: required recovery copy before write`}),(0,X.jsx)(d,{size:`xs`,children:`Reload: observe after write`}),(0,X.jsxs)(d,{size:`xs`,children:[`Expected reload outcomes: `,a.expectedReload.possibleStatuses.join(`, `)]}),(0,X.jsxs)(d,{size:`xs`,children:[`Runtime impact:`,` `,a.runtimeImpact.kind===`template`?`retire ${a.runtimeImpact.activeInstanceCount} active instance${a.runtimeImpact.activeInstanceCount===1?``:`s`} after reload`:`remove configured backend after reload`]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{size:`xs`,fw:700,children:`Redacted definition`}),(0,X.jsx)(N,{block:!0,children:JSON.stringify(a.removal.definition,null,2)})]}),a.warnings.map(e=>(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:e},e)),(0,X.jsx)(w,{label:`Type ${a.qualifiedId} to confirm`,value:i.confirmation,disabled:i.applyBusy,autoComplete:`off`,onChange:t=>e.changeConfirmation(t.currentTarget.value)}),(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsx)(m,{variant:`default`,disabled:i.applyBusy,onClick:e.reset,children:`Cancel`}),(0,X.jsx)(m,{color:`red`,leftSection:(0,X.jsx)(be,{size:16}),loading:i.applyBusy,disabled:!wt(i),onClick:()=>void e.apply(t),children:`Delete definition`})]})]}):(0,X.jsx)(m,{color:`red`,variant:`outline`,leftSection:(0,X.jsx)(be,{size:16}),loading:i.previewBusy,disabled:i.previewBusy||i.applyBusy,onClick:()=>void e.preview(t),children:`Preview deletion`}),i.error?(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.error}):null]})})}function fn(){return{status:`list`}}function pn(e){if(e.status!==`loaded`)return{};let t=At(e.fieldDraft,e.detail.server.transport.type),n=Ot(e.detail.editContract.fieldGroups,e.fieldDraft,e.initialFieldDraft,e.secretDraft,t,e.clearedTransportOverrides),r=e.instructionOverride,i=e.initialInstructionOverride;return(r.mode!==i.mode||r.mode===`replace`&&r.value!==i.value)&&(n.instructionOverride=r.mode===`upstream`?{action:`remove`}:{action:`set`,value:r.mode===`suppress`?``:r.value}),JSON.stringify(e.toolDraft)!==JSON.stringify(e.initialToolDraft)&&(n.disabledTools=Object.entries(e.toolDraft).filter(([,e])=>!e.enabled).map(([e])=>e).sort((e,t)=>e.localeCompare(t)),n.toolDescriptionOverrides=Object.fromEntries(Object.entries(e.toolDraft).map(([e,t])=>[e,t.descriptionOverride.trim()]).filter(([,e])=>e.length>0).sort(([e],[t])=>e.localeCompare(t)))),n}function mn(e,t){switch(t.type){case`closed`:return fn();case`detailLoadStarted`:return{status:`loading`,serverId:t.serverId};case`detailLoaded`:return hn(t.serverId,t.detail);case`detailMissing`:return{status:`missing`,serverId:t.serverId};case`detailFailed`:return{status:`failed`,serverId:t.serverId,message:t.message};case`fieldChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{fieldDraft:{...e.fieldDraft,[$(t.fieldPath)]:t.value},clearedTransportOverrides:t.fieldPath[0]===`transport`&&t.fieldPath[1]?e.clearedTransportOverrides.filter(e=>e!==t.fieldPath[1]):e.clearedTransportOverrides});case`secretChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{secretDraft:{...e.secretDraft,[$(t.fieldPath)]:t.value}});case`transportOverrideChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{clearedTransportOverrides:t.clear?Array.from(new Set([...e.clearedTransportOverrides,t.key])):e.clearedTransportOverrides.filter(e=>e!==t.key)});case`instructionOverrideChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{instructionOverride:{mode:t.mode,value:t.mode===`replace`?t.value??e.instructionOverride.value:e.instructionOverride.value}});case`toolChanged`:{if(e.status!==`loaded`||e.applyBusy)return e;let n=e.toolDraft[t.name];return n?gn(e,{toolDraft:{...e.toolDraft,[t.name]:{enabled:t.enabled??n.enabled,descriptionOverride:t.descriptionOverride??n.descriptionOverride}}}):e}case`toolsBulkChanged`:return e.status!==`loaded`||e.applyBusy?e:gn(e,{toolDraft:Object.fromEntries(Object.entries(e.toolDraft).map(([e,n])=>[e,t.names.includes(e)?{...n,enabled:t.enabled}:n]))});case`toolInventoryRequestStarted`:return e.status!==`loaded`||e.applyBusy||e.toolInventoryBusy?e:{...e,toolInventoryBusy:!0,toolInventoryError:void 0,...t.clearPreview?{preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0}:{}};case`toolInventoryReceived`:{if(e.status!==`loaded`)return e;let n={...e.toolDraft},r={...e.initialToolDraft};for(let e of t.inventory.rows)n[e.name]??={enabled:e.enabled,descriptionOverride:e.descriptionOverride??``},r[e.name]??={enabled:e.enabled,descriptionOverride:e.descriptionOverride??``};let i=e.detail.toolInventory?.generation!==t.inventory.generation,a={...e,detail:{...e.detail,toolInventory:t.inventory},toolDraft:n,initialToolDraft:r,toolModel:t.inventory.model,toolInventoryBusy:!1,toolInventoryError:void 0,...t.clearPreview===`always`||i?{preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0}:{}};return{...a,dirty:Object.keys(pn(a)).length>0}}case`toolInventoryRequestFailed`:return e.status===`loaded`?{...e,toolInventoryBusy:!1,toolInventoryError:t.message}:e;case`previewStarted`:return e.status===`loaded`?{...e,previewBusy:!0,previewError:void 0}:e;case`previewSucceeded`:return e.status===`loaded`?{...e,preview:t.preview,previewBusy:!1,previewError:void 0}:e;case`previewFailed`:return e.status===`loaded`?{...e,previewBusy:!1,previewError:t.message}:e;case`applyStarted`:return e.status===`loaded`?{...e,applyBusy:!0,applyError:void 0,applySuccess:void 0}:e;case`applyCommitted`:return e.status===`loaded`?{status:`committed`,serverId:t.serverId,success:`Changes applied to ${t.result.targetName}.`,warning:vn(t.result)}:e;case`applySucceeded`:return{...hn(t.serverId,t.detail),applySuccess:`Changes applied to ${t.result.targetName}.`,applyWarning:vn(t.result)};case`applyFailed`:return e.status===`loaded`?{...e,preview:t.clearPreview?void 0:e.preview,applyBusy:!1,applyError:t.message}:e;case`applyRefreshFailed`:return e.status===`committed`?{...e,status:`committedRefreshFailed`,message:t.message}:e}}function hn(e,t){let n={},r={};for(let e of t.editContract.fieldGroups)for(let t of e.fields){let e=$(t.fieldPath);t.control===`secret`?r[e]={fieldPath:t.fieldPath,action:t.secret?.defaultAction??`preserve`,replacementKind:t.secret?.environmentReference.supported===!1?`inlineSecret`:`environmentReference`,replacementValue:``}:n[e]=kt(t)}let i=Object.fromEntries((t.toolInventory?.rows??[]).map(e=>[e.name,{enabled:e.enabled,descriptionOverride:e.descriptionOverride??``}]));return{status:`loaded`,serverId:e,detail:t,fieldDraft:n,initialFieldDraft:n,secretDraft:r,clearedTransportOverrides:[],instructionOverride:_n(t.server.instructionOverride),initialInstructionOverride:_n(t.server.instructionOverride),toolDraft:i,initialToolDraft:i,toolModel:t.toolInventory?.model??`gpt-4o`,toolInventoryBusy:!1,dirty:!1,previewBusy:!1,applyBusy:!1}}function gn(e,t){let n={...e,...t,preview:void 0,previewBusy:!1,previewError:void 0,applyError:void 0,applyWarning:void 0,applySuccess:void 0};return{...n,dirty:Object.keys(pn(n)).length>0}}function _n(e){return e?.state===`replace`?{mode:`replace`,value:e.value}:e?.state===`suppress`?{mode:`suppress`,value:``}:{mode:`upstream`,value:``}}function vn(e){if(e.configChange.reload.status===`failed`)return e.configChange.reload.error?`Configuration was written, but runtime reload failed: ${e.configChange.reload.error}`:`Configuration was written, but runtime reload failed. Inspect runtime health before continuing.`}function yn({api:e,session:t,browser:n,onUnauthenticated:r,onApplied:i,onPathCommitted:a}){let[o,s]=(0,Y.useReducer)(mn,void 0,fn),c=(0,Y.useRef)(o),l=(0,Y.useRef)(t),u=(0,Y.useRef)(e),d=(0,Y.useRef)(r),f=(0,Y.useRef)(0),p=(0,Y.useRef)(!1),m=(0,Y.useRef)();c.current=o,l.current=t,u.current=e,d.current=r;let{loadRequestRef:h,previewRequestRef:g,applyRequestRef:_,applyInteractionRef:v,applyAttemptRef:y,invalidatePreview:b,invalidateApply:x,reset:S}=Dt(()=>s({type:`closed`})),C=(0,Y.useCallback)(()=>{f.current+=1,p.current=!1,m.current=void 0},[]),w=(0,Y.useCallback)(()=>{C(),S()},[C,S]),T=(0,Y.useCallback)(e=>!(e instanceof J)||e.failure.kind!==`unauthenticated`?!1:(w(),d.current(e.failure.adminStatus),!0),[w]),E=(0,Y.useCallback)(async(e,t)=>{let n=l.current;if(!n||p.current)return;p.current=!0;let r=n.csrfToken,i=f.current+1;f.current=i,s({type:`toolInventoryRequestStarted`,clearPreview:!1});try{let n=await u.current.refreshConfiguredToolInventory({target:e,csrfToken:r,model:t});if(i!==f.current||l.current?.csrfToken!==r)return;let a=c.current;if(a.status!==`loaded`||!Sn(a,e))return;a.detail.toolInventory?.generation!==n.toolInventory.generation&&b(),s({type:`toolInventoryReceived`,inventory:n.toolInventory,clearPreview:`generationChanged`})}catch(e){if(i!==f.current||l.current?.csrfToken!==r)return;T(e)||s({type:`toolInventoryRequestFailed`,message:`Tool refresh failed: ${Tn(e)}`})}finally{i===f.current&&(p.current=!1)}},[T,b]),D=(0,Y.useCallback)(async e=>{let t=typeof e==`string`?e:e.id,n=l.current;if(!n)return;x(),C();let r=n.csrfToken,i=h.current+1;h.current=i,b(),s({type:`detailLoadStarted`,serverId:t});try{let n=await u.current.getConfiguredServerDetail(e);if(i!==h.current||l.current?.csrfToken!==r)return;m.current=n.toolInventory?.freshness===`unavailable`?{target:n.server.target,model:n.toolInventory.model}:void 0,s({type:`detailLoaded`,serverId:t,detail:n})}catch(e){if(i!==h.current||l.current?.csrfToken!==r||T(e))return;if(e instanceof J&&e.failure.kind===`configuredServerNotFound`){s({type:`detailMissing`,serverId:t});return}s({type:`detailFailed`,serverId:t,message:`Server detail failed: ${Tn(e)}`})}},[T,x,b,C]),O=(0,Y.useCallback)(async e=>{let t=c.current;t.status===`loaded`&&!Sn(t,e)&&t.dirty&&!await wn(n)||(n.push(En(e)),await D(e))},[n,D]),k=(0,Y.useCallback)(async(e=`/admin`)=>{let t=c.current;return t.status===`loaded`&&t.dirty&&!await wn(n)?!1:(n.push(e),w(),!0)},[n,w]),A=(0,Y.useCallback)((e,t)=>{b(),s({type:`fieldChanged`,fieldPath:e,value:t})},[b]),j=(0,Y.useCallback)((e,t)=>{b(),s({type:`secretChanged`,fieldPath:e,value:t})},[b]),M=(0,Y.useCallback)((e,t)=>{b(),s({type:`transportOverrideChanged`,key:e,clear:t})},[b]),ee=(0,Y.useCallback)((e,t)=>{b(),s({type:`instructionOverrideChanged`,mode:e,value:t})},[b]),N=(0,Y.useCallback)((e,t)=>{b(),s({type:`toolChanged`,name:e,...t})},[b]),te=(0,Y.useCallback)((e,t)=>{b(),s({type:`toolsBulkChanged`,names:e,enabled:t})},[b]),P=(0,Y.useCallback)(async e=>{let t=c.current;if(t.status!==`loaded`||t.applyBusy||t.toolInventoryBusy||p.current||v.current||e===t.toolModel)return;let n=l.current;if(!n)return;let r=n.csrfToken;p.current=!0;let i=f.current+1;f.current=i,b(),s({type:`toolInventoryRequestStarted`,clearPreview:!0});try{let n=await u.current.getConfiguredServerDetail(xn(t),e);if(i!==f.current||l.current?.csrfToken!==r||c.current.status!==`loaded`||!Sn(c.current,xn(t)))return;n.toolInventory?s({type:`toolInventoryReceived`,inventory:n.toolInventory,clearPreview:`always`}):s({type:`toolInventoryRequestFailed`,message:`Token estimate failed: inventory unavailable.`})}catch(e){if(i!==f.current||l.current?.csrfToken!==r)return;T(e)||s({type:`toolInventoryRequestFailed`,message:`Token estimate failed: ${Tn(e)}`})}finally{i===f.current&&(p.current=!1)}},[T,b]),F=(0,Y.useCallback)(()=>{let e=c.current;if(!(e.status!==`loaded`||e.applyBusy||e.toolInventoryBusy||v.current))return E(xn(e),e.toolModel)},[E]);(0,Y.useEffect)(()=>{if(o.status!==`loaded`)return;let e=m.current;!e||!Sn(o,e.target)||(m.current=void 0,E(e.target,e.model))},[E,o]);let ne=(0,Y.useCallback)(async(e=`auto`)=>{let t=l.current,n=c.current;if(!t||n.status!==`loaded`||n.toolInventoryBusy||p.current)return;let r=t.csrfToken,i=n.serverId,a=g.current+1;g.current=a,s({type:`previewStarted`});try{let t=await u.current.previewConfiguredServerEdit({target:xn(n),csrfToken:r,connectivityCheck:e,...n.detail.toolInventory?{model:n.toolModel}:{},edit:pn(n)});if(a!==g.current||l.current?.csrfToken!==r)return;let o=c.current;if(o.status!==`loaded`||o.serverId!==i)return;y.current?.previewFingerprint!==t.preview.previewFingerprint&&(y.current=void 0),s({type:`previewSucceeded`,preview:t.preview})}catch(e){if(a!==g.current||l.current?.csrfToken!==r)return;T(e)||s({type:`previewFailed`,message:`Preview failed: ${Tn(e)}`})}},[T]),I=(0,Y.useCallback)(async()=>{if(v.current)return;let e=l.current,t=c.current;if(!(!e||t.status!==`loaded`||!t.preview||t.toolInventoryBusy||p.current)&&bn(t).eligible){v.current=!0;try{let r=t.preview,a=Array.from(new Set(r.diff.flatMap(e=>e.riskFlags))),o=r.connectivityCheck.status===`failed`,d=r.toolSelection?.requiresZeroEnabledConfirmation===!0,f=t.detail.server.source===`mcpTemplates`;if(!await n.confirm({title:d?`Disable all observed tools for ${r.proposedTargetName}?`:o?`Apply despite failed connectivity to ${r.proposedTargetName}?`:f?`Apply template changes to ${r.proposedTargetName}?`:`Apply changes to ${r.proposedTargetName}?`,message:d?`No currently observed tools will remain enabled. Newly discovered tools will still be enabled by default.`:o?`The bounded connectivity check failed. Applying may make this configured server unavailable.`:f?r.runtimeImpact?.retirementRequired?`This writes the validated template definition, reloads the Runtime Scope, and retires active instances.`:`This writes the validated template metadata and reloads the Runtime Scope without retiring active instances.`:`This writes the validated configuration and reloads the Runtime Scope.`,confirmLabel:d?`Disable all tools`:o?`Apply despite failure`:f?`Apply template`:`Apply changes`,tone:d||o?`danger`:void 0,details:[{label:`Current target`,value:r.targetName},{label:`Final target`,value:r.proposedTargetName},{label:`Changes`,value:String(r.diff.length)},{label:`Risk flags`,value:a.join(`, `)||`none`},{label:`Connectivity`,value:r.connectivityCheck.status},{label:`Backup`,value:`Created before the config write`}]}))return;let m=c.current;if(m.status!==`loaded`||m.toolInventoryBusy||p.current||m.preview?.previewFingerprint!==r.previewFingerprint)return;let h=e.csrfToken,g=t.serverId,v=_.current+1;_.current=v;let b=y.current?.previewFingerprint===r.previewFingerprint?y.current:{previewFingerprint:r.previewFingerprint,idempotencyKey:ze(g)};y.current=b,s({type:`applyStarted`});let x;try{x=await u.current.applyConfiguredServerEdit({target:xn(t),csrfToken:h,idempotencyKey:b.idempotencyKey,edit:pn(t),previewFingerprint:r.previewFingerprint,...t.detail.toolInventory?{model:t.toolModel}:{},confirmationFacts:{previewConfirmed:r.previewFingerprint,...r.proposedTargetName===r.targetName?{}:{targetNameConfirmed:r.proposedTargetName},...a.includes(`connection_critical`)?{connectionCriticalConfirmed:!0}:{},...a.includes(`secret`)?{secretChangeConfirmed:!0}:{},...o?{connectivityFailureOverrideConfirmed:!0}:{},...r.toolSelection?.requiresZeroEnabledConfirmation?{zeroEnabledToolsConfirmed:!0}:{}}})}catch(e){if(v!==_.current||l.current?.csrfToken!==h)return;if(!T(e)){let t=Cn(e);t&&(y.current=void 0),s({type:`applyFailed`,message:`Apply failed: ${Tn(e)}`,clearPreview:t})}return}if(v!==_.current||l.current?.csrfToken!==h)return;y.current=void 0;let S=x.result.targetName;S!==g&&n.replace(En({source:t.detail.server.source,id:S})),s({type:`applyCommitted`,serverId:S,result:x.result});try{await i?.()}catch{}try{let e=await u.current.getConfiguredServerDetail(t.detail.server.source===`mcpTemplates`?{source:`mcpTemplates`,id:S}:{source:`mcpServers`,id:S});if(v!==_.current||l.current?.csrfToken!==h)return;s({type:`applySucceeded`,serverId:S,detail:e,result:x.result})}catch(e){if(v!==_.current||l.current?.csrfToken!==h)return;T(e)||s({type:`applyRefreshFailed`,message:`Changes were applied, but server detail could not be refreshed: ${Tn(e)}`})}}finally{v.current=!1}}},[n,T,i]);return(0,Y.useEffect)(()=>{if(!t){w();return}let e=Dn(n.pathname());e?D(e):w()},[n,D,w,t?.csrfToken]),(0,Y.useEffect)(()=>n.subscribePopState(()=>{(async()=>{let e=c.current,t=n.pathname(),r=Dn(t);if(e.status===`loaded`&&!Sn(e,r)&&e.dirty){if(n.replace(En(e.detail.server.target)),!await wn(n))return;n.replace(t)}r?D(r):w(),a?.(t)})()}),[n,D,a,w]),{state:o,open:O,close:k,changeField:A,changeSecret:j,changeTransportOverride:M,changeInstructionOverride:ee,changeTool:N,changeVisibleTools:te,changeToolModel:P,refreshToolInventory:F,preview:ne,apply:I}}function bn(e){if(e.status!==`loaded`||!e.preview)return{eligible:!1,reason:`Preview changes first.`};if(e.toolInventoryBusy)return{eligible:!1,reason:`Wait for the tool inventory refresh to finish.`};if(!e.detail.editContract.capabilities.apply.supported)return{eligible:!1,reason:`This runtime does not support applying server edits.`};if(e.preview.validation.status!==`valid`)return{eligible:!1,reason:`Resolve validation issues.`};if(!e.preview.configChange.changed||e.preview.diff.length===0)return{eligible:!1,reason:`The preview contains no changes.`};let t=e.preview.diff.some(e=>e.riskFlags.includes(`connection_critical`)),n=At(e.fieldDraft,e.detail.server.transport.type);return(pn(e).enabled??e.detail.server.enabled)&&e.detail.server.source!==`mcpTemplates`&&n!==`stdio`&&t&&e.preview.connectivityCheck.status!==`passed`&&e.preview.connectivityCheck.status!==`failed`?{eligible:!1,reason:`A connectivity check must run before applying these changes.`}:{eligible:!0}}function xn(e){return{source:e.detail.server.source,id:e.serverId}}function Sn(e,t){if(!t)return!1;let n=typeof t==`string`?`mcpServers`:t.source,r=typeof t==`string`?t:t.id;return e.serverId===r&&e.detail.server.source===n}function Cn(e){return e instanceof J&&e.failure.kind===`rejected`&&e.failure.code===`configured_server_stale_preview`}function wn(e){return e.confirm({title:`Discard unsaved changes?`,message:`Your configured-server draft and preview will be lost.`,confirmLabel:`Discard changes`,tone:`danger`})}function Tn(e){if(e instanceof J)return e.failure.message;throw e}function En(e){return typeof e==`string`?`/admin/servers/${encodeURIComponent(e)}`:`/admin/servers/${e.source}/${encodeURIComponent(e.id)}`}function Dn(e){if(!e.startsWith(`/admin/servers/`))return null;let t=e.slice(15).split(`#`,1)[0];if(!t)return null;let n;try{n=decodeURIComponent(t)}catch{n=t}if(n===`new`)return null;let[r,...i]=n.split(`/`);return(r===`mcpServers`||r===`mcpTemplates`)&&i.length>0?{source:r,id:i.join(`/`)}:n}function On({inventory:e,draft:t,disabled:r,refreshBusy:i,refreshError:a,onToolChange:o,onBulkChange:s,onModelChange:l,onRefresh:f}){let[p,h]=(0,Y.useState)(``),[_,v]=(0,Y.useState)(`all`),y=(0,Y.useMemo)(()=>{let n=p.trim().toLowerCase();return e.rows.filter(e=>{let r=t[e.name]??{enabled:e.enabled,descriptionOverride:e.descriptionOverride??``},i=!n||e.name.toLowerCase().includes(n)||e.effectiveDescription?.toLowerCase().includes(n)||e.upstreamDescription?.toLowerCase().includes(n),a=_===`all`||_===`enabled`&&r.enabled||_===`disabled`&&!r.enabled||_===`unresolved`&&e.unresolved;return i&&a})},[t,_,e.rows,p]),b=y.map(e=>e.name),x=(0,Y.useMemo)(()=>Array.from(new Set([`gpt-4o`,`gpt-4o-mini`,`gpt-3.5-turbo`,e.model].filter(Boolean))),[e.model]),C=(0,Y.useMemo)(()=>{let n=0,r=0;for(let i of e.rows)t[i.name]?.enabled??i.enabled?r+=i.approximateTokens:n+=1;return{disabled:n,enabledTokens:r}},[t,e.rows]),E=An(e,a),D=kn(e),k=!!a||e.inspection?.retryable===!0;return(0,X.jsxs)(O,{className:`configured-tool-table`,gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-end`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`Configured Tool Selection`}),(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[e.counts.observed,` observed, `,C.disabled,` disabled, `,e.counts.unresolved,` `,`unresolved`]}),E?(0,X.jsxs)(`div`,{role:a||e.inspection?.status===`failed`?`alert`:`status`,"aria-live":a||e.inspection?.status===`failed`?void 0:`polite`,children:[(0,X.jsx)(d,{c:a||e.inspection?.status===`failed`?`red`:`yellow`,size:`xs`,children:E}),D.length>0?(0,X.jsx)(O,{component:`ul`,gap:2,m:0,pl:`md`,children:D.map(e=>(0,X.jsxs)(d,{component:`li`,c:`red`,size:`xs`,style:{overflowWrap:`anywhere`},children:[e.instanceId,`: `,e.error]},`${e.instanceId}:${e.error}`))}):null]}):null]}),(0,X.jsxs)(n,{align:`flex-end`,gap:`xs`,children:[(0,X.jsx)(m,{variant:`default`,leftSection:(0,X.jsx)(ge,{size:15}),loading:i,disabled:r||i,onClick:()=>void f(),children:k?`Retry`:`Refresh`}),(0,X.jsx)(S,{label:`Estimate model`,"aria-label":`Token estimate model`,value:e.model,data:x,allowDeselect:!1,disabled:r||i,onChange:e=>{e&&l(e)}})]})]}),(0,X.jsxs)(n,{align:`flex-end`,grow:!0,children:[(0,X.jsx)(w,{label:`Search tools`,leftSection:(0,X.jsx)(ue,{size:15}),value:p,onChange:e=>h(e.currentTarget.value)}),(0,X.jsx)(A,{"aria-label":`Tool status filter`,value:_,onChange:e=>v(e),data:[{label:`All`,value:`all`},{label:`Enabled`,value:`enabled`},{label:`Disabled`,value:`disabled`},{label:`Unresolved`,value:`unresolved`}]})]}),(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[y.length,` visible tools, approximately `,C.enabledTokens,` enabled tokens`]}),(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsxs)(m,{size:`compact-xs`,variant:`default`,disabled:r||b.length===0,onClick:()=>s(b,!0),children:[`Enable visible (`,b.length,`)`]}),(0,X.jsxs)(m,{size:`compact-xs`,variant:`default`,disabled:r||b.length===0,onClick:()=>s(b,!1),children:[`Disable visible (`,b.length,`)`]})]})]}),(0,X.jsx)(`div`,{className:`configured-tool-rows`,children:y.map(e=>{let i=t[e.name]??{enabled:e.enabled,descriptionOverride:e.descriptionOverride??``};return(0,X.jsxs)(`div`,{className:`configured-tool-row`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{className:`configured-tool-identity`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.name}),e.stale?(0,X.jsx)(u,{color:`orange`,children:`last observed`}):null,e.unresolved?(0,X.jsx)(u,{color:`yellow`,children:`unresolved`}):null,e.observedInSomeInstances?(0,X.jsxs)(u,{variant:`outline`,children:[e.observedInstanceCount,`/`,e.activeInstanceCount,` instances`]}):null,(0,X.jsxs)(u,{variant:`outline`,children:[`~`,e.approximateTokens,` tokens`]})]}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:e.effectiveDescription??`No upstream description`}),e.descriptionOverridden&&e.upstreamDescription?(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[`Upstream: `,e.upstreamDescription]}):null]}),(0,X.jsx)(T,{"aria-label":`Enable ${e.name}`,checked:i.enabled,disabled:r,onChange:t=>o(e.name,{enabled:t.currentTarget.checked})})]}),(0,X.jsxs)(n,{mt:`xs`,align:`flex-end`,wrap:`nowrap`,children:[(0,X.jsx)(w,{className:`configured-tool-description-input`,label:`Description override`,placeholder:e.upstreamDescription??`Add a description`,value:i.descriptionOverride,disabled:r,onChange:t=>o(e.name,{descriptionOverride:t.currentTarget.value})}),(0,X.jsx)(g,{label:`Reset to upstream description`,children:(0,X.jsx)(c,{"aria-label":`Reset ${e.name} description`,variant:`default`,disabled:r||!i.descriptionOverride,onClick:()=>o(e.name,{descriptionOverride:``}),children:(0,X.jsx)(ye,{size:16})})})]})]},e.name)})}),e.targetEnabled?null:(0,X.jsx)(d,{c:`yellow`,size:`xs`,children:`This target is disabled. Tool changes will take effect when the target is enabled.`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Selection uses a denylist. Tools discovered later are enabled unless explicitly disabled.`})]})}function kn(e){return(e.inspection?.instances??[]).flatMap(e=>{let t=e.error?.trim();return e.status===`complete`||!t?[]:[{instanceId:e.instanceId,error:t.length>240?`${t.slice(0,237)}...`:t}]}).slice(0,5)}function An(e,t){if(t)return t;let n=e.inspection;if(n?.status===`in_progress`)return`Refreshing live tool inventory from connected instances.`;if(!(n?.status===`complete`&&e.freshness===`live`))switch(n?.reason){case`target_disabled`:return`This target is disabled, so live tool inventory cannot be refreshed.`;case`target_disconnected`:return`This configured server is disconnected. Reconnect it before refreshing live tool inventory.`;case`no_active_instances`:return`This Template Server has no active instances to inspect.`;case`active_instance_unavailable`:return`An active instance became unavailable before its tools could be inspected.`;case`inspection_failed`:return`Live tool inspection failed for one or more active instances.`;case`snapshot_unavailable`:return`No complete live tool snapshot is available yet.`;case`active_instances_changed`:return`The active instance set changed during inspection. Retry to inspect the current instances.`;default:return e.freshness===`unavailable`?`Live inventory is unavailable. Rows may come from the last complete snapshot or stored configuration.`:void 0}}function jn({model:e,deleteModel:t}){let{state:i}=e,a=(0,Y.useRef)(null),o=i.status===`loaded`&&!!i.preview?.validation.errors.some(e=>i.detail.editContract.fieldGroups.flatMap(e=>e.fields).some(t=>$(t.fieldPath)===$(e.fieldPath)&&!Mn(t)));if((0,Y.useEffect)(()=>{o&&a.current&&(a.current.open=!0)},[o]),i.status===`list`)return(0,X.jsx)(Q,{title:`Edit server`,utility:`select a target`,icon:(0,X.jsx)(q,{size:17}),children:(0,X.jsxs)(O,{className:`edit-empty-state`,gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:`Select Edit server to change target settings.`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Edit fields -> Preview change -> Review result`})]})});if(i.status===`loading`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsx)(Et,{message:`Loading server detail.`})});if(i.status===`committed`||i.status===`committedRefreshFailed`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(r,{color:`teal`,role:`status`,children:i.success}),i.warning?(0,X.jsx)(r,{color:`yellow`,role:`status`,children:i.warning}):null,i.status===`committed`?(0,X.jsx)(Et,{message:`Refreshing the committed server detail.`}):(0,X.jsx)(r,{color:`yellow`,role:`status`,children:i.message}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Editing stays unavailable until the runtime returns a fresh server detail model.`}),(0,X.jsxs)(n,{children:[i.status===`committedRefreshFailed`?(0,X.jsx)(m,{onClick:()=>void e.open(i.serverId),children:`Retry detail`}):null,(0,X.jsx)(m,{variant:`default`,onClick:()=>void e.close(`/admin/servers`),children:`Back to servers`})]})]})});if(i.status===`missing`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(k,{order:3,children:`Server target not found`}),(0,X.jsxs)(d,{c:`dimmed`,children:[i.serverId,` is no longer available. It may have been renamed or removed. Return to the list, refresh, and open the current target ID if a rename succeeded.`]}),(0,X.jsx)(r,{color:`yellow`,variant:`light`,children:`Old detail URLs are not aliases. Use the server list after a rename instead of bookmarking the previous ID.`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>e.close(`/admin/servers`),children:`Back to servers`})]})});if(i.status===`failed`)return(0,X.jsx)(Q,{title:`Server detail`,utility:i.serverId,icon:(0,X.jsx)(Ce,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.message}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Refresh the console or return to the server list, then retry. Preserve any non-secret request ID from the error when asking for support.`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>e.close(`/admin/servers`),children:`Back to servers`})]})});let s=At(i.fieldDraft,i.detail.server.transport.type),c=i.detail.server.source===`mcpTemplates`,l=i.detail.editContract.fieldGroups.map(e=>({...e,fields:e.fields.filter(e=>jt(e,s))})).filter(e=>e.fields.length>0),f=l.map(e=>({...e,fields:e.fields.filter(Mn)})).filter(e=>e.fields.length>0),p=l.flatMap(e=>e.fields).filter(e=>!Mn(e)),h=bn(i),g=t=>{let r=t.fieldPath[0]===`transport`?t.fieldPath[1]:t.fieldPath[0],a=!!(r&&i.clearedTransportOverrides.includes(r)),o=[`timeout`,`connectionTimeout`,`requestTimeout`].includes(t.fieldPath[1]??``)?{...t,label:`${t.label} (ms)`}:t;return(0,X.jsxs)(O,{gap:4,children:[t.control===`secret`?(0,X.jsx)(tn,{field:o,draft:i.secretDraft[$(t.fieldPath)],onChange:n=>e.changeSecret(t.fieldPath,n)}):(0,X.jsx)($t,{field:o,value:i.fieldDraft[$(t.fieldPath)],onChange:n=>e.changeField(t.fieldPath,n)}),t.overrideSupported&&r?(0,X.jsxs)(n,{justify:`space-between`,gap:`xs`,children:[(0,X.jsx)(u,{variant:`outline`,children:a?`will inherit`:t.source===`inherited`?`inherited`:t.source}),t.clearOverrideSupported?(0,X.jsx)(m,{size:`compact-xs`,variant:`subtle`,onClick:()=>e.changeTransportOverride(r,!a),children:a?`Restore override`:`Clear override`}):null]}):null]},$(t.fieldPath))};return(0,X.jsx)(Q,{title:`Edit server`,utility:i.detail.server.enabled?`enabled`:`disabled`,icon:(0,X.jsx)(q,{size:17}),children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Configured Server Target`}),(0,X.jsxs)(n,{gap:`xs`,align:`center`,children:[(0,X.jsx)(k,{order:2,children:i.detail.server.id}),(0,X.jsx)(u,{color:i.detail.server.enabled?`teal`:`yellow`,variant:`light`,children:i.detail.server.enabled?`enabled`:`disabled`}),(0,X.jsx)(u,{variant:`outline`,children:c?`Template`:`Static`}),i.detail.server.definition?.authority&&i.detail.server.definition.authority!==`sole`?(0,X.jsx)(u,{color:i.detail.server.definition.authority===`authoritative`?`teal`:`yellow`,children:i.detail.server.definition.authority}):null]}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:ot(i.detail.server)}),(0,X.jsxs)(d,{c:`dimmed`,size:`xs`,children:[i.detail.server.definition?.qualifiedId??`${i.detail.server.source}/${i.detail.server.id}`,` `,`· Draft changes stay local until preview.`]})]}),(0,X.jsx)(m,{variant:`default`,onClick:()=>e.close(`/admin/servers`),children:`Back`})]}),c?(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,children:[(0,X.jsx)(d,{fw:800,children:`Template definition`}),(0,X.jsxs)(u,{variant:`outline`,children:[i.detail.server.runtime?.activeInstanceCount??0,` active instance`,(i.detail.server.runtime?.activeInstanceCount??0)===1?``:`s`]})]}),(0,X.jsx)(d,{size:`sm`,c:`dimmed`,children:`This is a definition, not a live instance. Rename or structural changes retire active instances; metadata-only changes retain them. Future matching requests recreate retired instances lazily.`}),(0,X.jsxs)(d,{size:`sm`,children:[`Request Context variables:`,` `,i.detail.server.templateAnalysis?.unresolvedVariables.join(`, `)||`none`]}),i.detail.server.templateAnalysis?.syntax.valid===!1?(0,X.jsx)(r,{color:`red`,children:`Template syntax is invalid. Preview lists each affected field.`}):null]})}):null,f.map(e=>(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:e.label}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:Qt(e.id)})]}),(0,X.jsxs)(u,{variant:`outline`,children:[e.fields.length,` fields`]})]}),e.fields.map(g)]})},e.id)),i.detail.toolInventory?(0,X.jsx)(b,{className:`edit-section`,withBorder:!0,children:(0,X.jsx)(On,{inventory:i.detail.toolInventory,draft:i.toolDraft,disabled:i.applyBusy,refreshBusy:i.toolInventoryBusy,refreshError:i.toolInventoryError,onToolChange:e.changeTool,onBulkChange:e.changeVisibleTools,onModelChange:e.changeToolModel,onRefresh:()=>e.refreshToolInventory?.()})}):null,p.length>0?(0,X.jsxs)(`details`,{ref:a,className:`advanced-settings`,children:[(0,X.jsx)(`summary`,{children:`Advanced settings`}),(0,X.jsxs)(O,{gap:`sm`,mt:`sm`,children:[(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Timeouts use milliseconds. Prefer Connection Timeout and Request Timeout over Deprecated Timeout.`}),p.map(g)]})]}):null,(0,X.jsx)(b,{className:`edit-section instruction-override-editor`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`xs`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`Server instructions`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Choose whether clients receive upstream instructions, an operator replacement, or no instructions.`})]}),(0,X.jsxs)(u,{variant:`outline`,children:[`Effective:`,` `,i.instructionOverride.mode===`replace`?`replacement`:i.instructionOverride.mode]})]}),(0,X.jsx)(A,{fullWidth:!0,"aria-label":`Instruction override outcome`,value:i.instructionOverride.mode,onChange:t=>e.changeInstructionOverride(t),data:[{value:`upstream`,label:`Use upstream`},{value:`replace`,label:`Replace`},{value:`suppress`,label:`Suppress`}]}),i.instructionOverride.mode===`replace`?(0,X.jsx)(j,{label:`Replacement instructions`,minRows:5,value:i.instructionOverride.value,onChange:t=>e.changeInstructionOverride(`replace`,t.currentTarget.value)}):(0,X.jsx)(d,{size:`sm`,className:`instruction-override-readonly`,children:i.instructionOverride.mode===`upstream`?`Upstream state is preserved. Effective instructions are resolved when the server connects.`:`Effective instructions are an intentional empty value.`})]})}),(0,X.jsxs)(n,{className:`draft-action-bar`,justify:`space-between`,gap:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(u,{color:i.dirty?`yellow`:`gray`,variant:i.dirty?`light`:`outline`,children:i.dirty?`Unsaved changes`:`No changes yet`}),(0,X.jsx)(d,{c:`dimmed`,size:`xs`,children:`Preview validates the draft without writing config. Leaving this page with unsaved changes asks for confirmation.`})]}),(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(m,{loading:i.previewBusy,disabled:!i.dirty||i.previewBusy||i.applyBusy||i.toolInventoryBusy,onClick:()=>void e.preview(`auto`),children:`Preview change`}),i.preview&&!c?(0,X.jsx)(m,{variant:`default`,loading:i.previewBusy,disabled:i.applyBusy||i.toolInventoryBusy,onClick:()=>void e.preview(`manual`),children:`Rerun connectivity`}):null]})]}),i.previewError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.previewError}):null,i.applyError?(0,X.jsx)(r,{color:`red`,role:`alert`,children:i.applyError}):null,i.applyWarning?(0,X.jsx)(r,{color:`yellow`,role:`status`,children:i.applyWarning}):null,i.applySuccess?(0,X.jsx)(r,{color:`teal`,role:`status`,children:i.applySuccess}):null,i.preview?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(n,{justify:`flex-end`,align:`center`,children:[h.eligible?null:(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:h.reason}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(le,{size:16}),loading:i.applyBusy,disabled:!h.eligible||i.applyBusy||i.toolInventoryBusy,onClick:()=>void e.apply(),children:`Apply changes`})]}),(0,X.jsx)(rn,{preview:i.preview})]}):null,!i.dirty&&i.detail.editContract.capabilities.delete.supported?(0,X.jsx)(dn,{model:t,target:i.detail.server.target}):null]})})}function Mn(e){return e.control===`secret`?!1:e.fieldPath[0]!==`transport`||[`type`,`command`,`args`,`url`].includes(e.fieldPath[1]??``)}function Nn({state:e,onServerAction:t,onOpenServerDetail:r,onConfigureCustomServer:i}){let[a,s]=(0,Y.useState)(``),[c,l]=(0,Y.useState)(`all`),[u,f]=(0,Y.useState)(`all`),h=o(`(max-width: 620px)`,!1),g=(0,Y.useMemo)(()=>tt(e.configuredServers,a,c).filter(e=>u===`all`||e.source===u),[c,a,u,e.configuredServers]),_=e.configuredServers.length===0;return(0,X.jsxs)(Q,{title:`Server inventory`,utility:`${g.length} of ${e.configuredServers.length} targets`,icon:(0,X.jsx)(Ce,{size:17}),children:[_?null:(0,X.jsxs)(n,{align:`flex-end`,gap:`sm`,className:`server-filter-row`,children:[(0,X.jsx)(w,{className:`server-search`,leftSection:(0,X.jsx)(ue,{size:16}),label:`Search servers`,type:`search`,value:a,onChange:e=>s(e.currentTarget.value)}),(0,X.jsx)(A,{"aria-label":`Server status filter`,value:c,onChange:e=>l(e),data:[{label:`All`,value:`all`},{label:`Enabled`,value:`enabled`},{label:`Disabled`,value:`disabled`}]}),(0,X.jsx)(A,{"aria-label":`Server source filter`,value:u,onChange:e=>f(e),data:[{label:`Both`,value:`all`},{label:`Static`,value:`mcpServers`},{label:`Template`,value:`mcpTemplates`}]}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(de,{size:16}),onClick:()=>void i?.(),children:`Configure Custom Server`})]}),_?(0,X.jsxs)(O,{gap:`sm`,className:`actionable-empty-state`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`No servers configured`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Configure a target to start routing MCP capabilities and observing runtime activity.`})]}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(de,{size:16}),onClick:()=>void i?.(),children:`Configure server`})]}):g.length===0?(0,X.jsxs)(O,{gap:`sm`,className:`actionable-empty-state`,children:[(0,X.jsx)(Et,{message:`No servers match the current search and status filter.`}),(0,X.jsx)(m,{variant:`default`,onClick:()=>{s(``),l(`all`),f(`all`)},children:`Clear filters`})]}):h?(0,X.jsx)(`div`,{className:`server-mobile-list`,children:g.map(n=>(0,X.jsx)(In,{server:n,mutation:Pn(e,n),onServerAction:t,onOpenServerDetail:r},`${n.source}:${n.id}`))}):(0,X.jsx)(`div`,{className:`server-table-view`,children:(0,X.jsx)(p.ScrollContainer,{minWidth:720,children:(0,X.jsxs)(p,{className:`admin-table`,verticalSpacing:`xs`,children:[(0,X.jsx)(p.Thead,{children:(0,X.jsxs)(p.Tr,{children:[(0,X.jsx)(p.Th,{children:`Server`}),(0,X.jsx)(p.Th,{children:`Status`}),(0,X.jsx)(p.Th,{children:`Transport`}),(0,X.jsx)(p.Th,{children:`Secrets`}),(0,X.jsx)(p.Th,{children:`Action`})]})}),(0,X.jsx)(p.Tbody,{children:g.map(n=>(0,X.jsx)(Ln,{server:n,mutation:Pn(e,n),onServerAction:t,onOpenServerDetail:r},`${n.source}:${n.id}`))})]})})})]})}function Pn(e,t){return e.serverMutations[`${t.source}/${t.id}`]??(t.source===`mcpServers`?e.serverMutations[t.id]:void 0)}function Fn(e,t,n){return t.source===`mcpTemplates`?e?.(t.id,n,t.source):e?.(t.id,n)}function In({server:e,mutation:t,onServerAction:r,onOpenServerDetail:i}){let a=e.enabled?`disable`:`enable`,o=t?.state===`busy`,s=st(e),l=lt(e,a),f=!ct(e)||!l.available;return(0,X.jsxs)(`article`,{className:`server-mobile-card${t?` server-action-${t.state}`:``}`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{className:`server-mobile-identity`,children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.id}),(0,X.jsx)(u,{size:`xs`,variant:`outline`,children:e.source===`mcpTemplates`?`Template`:`Static`}),e.definition?.authority&&e.definition.authority!==`sole`?(0,X.jsx)(u,{size:`xs`,color:e.definition.authority===`authoritative`?`teal`:`yellow`,children:e.definition.authority}):null]}),s.length>0?(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:s.join(` / `)}):null]}),(0,X.jsx)(u,{color:e.enabled?`teal`:`yellow`,variant:`light`,children:e.enabled?`enabled`:`disabled`})]}),(0,X.jsxs)(`dl`,{className:`server-mobile-facts`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Transport`}),(0,X.jsx)(`dd`,{children:ot(e)})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`dt`,{children:`Secrets`}),(0,X.jsx)(`dd`,{children:ht(e)})]})]}),t?.message?(0,X.jsx)(d,{size:`xs`,c:t.state===`failed`?`red`:`dimmed`,children:t.message}):null,(0,X.jsxs)(n,{gap:`sm`,justify:`space-between`,wrap:`nowrap`,className:`server-mobile-actions`,children:[(0,X.jsx)(g,{label:`Edit ${e.id}`,children:(0,X.jsx)(c,{"aria-label":`Edit ${e.source===`mcpTemplates`?`template`:`static`} ${e.id} server`,size:`lg`,variant:`default`,onClick:()=>void i?.({source:e.source,id:e.id}),children:(0,X.jsx)(q,{size:16})})}),(0,X.jsx)(Rn,{server:e,busy:o,action:a,actionLabel:l.label,disabled:o||f,onChange:()=>void Fn(r,e,a)})]})]})}function Ln({server:e,mutation:t,onServerAction:r,onOpenServerDetail:i}){let a=e.enabled?`disable`:`enable`,o=t?.state===`busy`,s=st(e),l=lt(e,a),f=!ct(e)||!l.available;return(0,X.jsxs)(p.Tr,{className:t?`server-action-${t.state}`:void 0,children:[(0,X.jsxs)(p.Td,{children:[(0,X.jsxs)(n,{gap:`xs`,children:[(0,X.jsx)(d,{fw:700,children:e.id}),(0,X.jsx)(u,{size:`xs`,variant:`outline`,children:e.source===`mcpTemplates`?`Template`:`Static`}),e.definition?.authority&&e.definition.authority!==`sole`?(0,X.jsx)(u,{size:`xs`,color:e.definition.authority===`authoritative`?`teal`:`yellow`,children:e.definition.authority}):null]}),s.length>0?(0,X.jsx)(d,{size:`xs`,c:`dimmed`,children:s.join(` / `)}):null,t?.message?(0,X.jsx)(d,{size:`xs`,c:t.state===`failed`?`red`:`dimmed`,children:t.message}):null]}),(0,X.jsx)(p.Td,{children:(0,X.jsx)(u,{color:e.enabled?`teal`:`yellow`,variant:`light`,children:e.enabled?`enabled`:`disabled`})}),(0,X.jsx)(p.Td,{children:ot(e)}),(0,X.jsx)(p.Td,{children:ht(e)}),(0,X.jsx)(p.Td,{children:(0,X.jsxs)(n,{gap:`sm`,wrap:`nowrap`,justify:`flex-end`,children:[(0,X.jsx)(g,{label:`Edit ${e.id}`,children:(0,X.jsx)(c,{"aria-label":`Edit ${e.source===`mcpTemplates`?`template`:`static`} ${e.id} server`,size:`lg`,variant:`default`,onClick:()=>void i?.({source:e.source,id:e.id}),children:(0,X.jsx)(q,{size:16})})}),(0,X.jsx)(Rn,{server:e,busy:o,action:a,actionLabel:l.label,disabled:o||f,onChange:()=>void Fn(r,e,a)})]})})]})}function Rn({server:e,busy:t,action:r,actionLabel:i,disabled:a,onChange:o}){return(0,X.jsxs)(n,{gap:7,wrap:`nowrap`,className:`server-state-control`,children:[t?(0,X.jsx)(x,{"aria-label":`Updating ${e.id}`,size:14}):null,(0,X.jsx)(T,{"aria-label":i,checked:e.enabled,color:`teal`,disabled:a,onChange:o,styles:{input:{cursor:`pointer`,zIndex:1}}}),(0,X.jsx)(d,{className:`server-state-label`,size:`xs`,fw:700,children:r===`disable`?`Enabled`:`Disabled`})]})}function zn({facts:e,onCopyText:t}){return(0,X.jsx)(Q,{title:`Recent audit facts`,utility:`redacted`,icon:(0,X.jsx)(_e,{size:17}),children:e.length===0?(0,X.jsx)(Et,{message:`No recent admin audit facts.`}):(0,X.jsx)(O,{gap:`xs`,children:e.map(e=>(0,X.jsx)(Z,{label:e.operationName,value:e.result,meta:e.target?.id??e.operationId??`-`,description:e.timestamp,copyLabel:e.request?.requestId?`requestId`:void 0,copyValue:e.request?.requestId,onCopyText:t},e.operationId??`${e.operationName}-${e.timestamp}`))})})}function Bn({model:e,navigate:t}){let{state:r,configuredServers:i}=e,a=(r.status?.audit.facts??[]).filter(e=>e.result===`failed`).length,o=(r.status?.oauth.services??[]).filter(it).length,s=rt(r.configuredServers),[c,l]=(0,Y.useState)(null),u=r.status?.runtime;async function f(){await i.create.open()}async function p(e,t){try{await i.copy(e,t),l(`${bt(e)} copied.`)}catch{l(`Could not copy ${bt(e)}. Select the value manually.`)}}return(0,X.jsxs)(`section`,{"aria-labelledby":`runtime-operations-title`,className:`operations-workspace`,children:[(0,X.jsx)(k,{id:`runtime-operations-title`,order:2,className:`sr-only`,children:`Runtime operations`}),(0,X.jsx)(Un,{title:`Overview`,description:`Runtime summaries for ${r.session?.account.username??`operator`} · updated ${r.lastUpdatedAt??`never`}`}),(0,X.jsxs)(`div`,{className:`runtime-status-strip`,role:`status`,"aria-label":`Runtime status and freshness`,children:[(0,X.jsxs)(n,{gap:`xs`,wrap:`nowrap`,className:`runtime-status-main`,children:[(0,X.jsx)(`span`,{className:`runtime-live-dot`}),(0,X.jsx)(d,{fw:800,size:`sm`,children:`Runtime online`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,className:`truncate`,children:u?.externalUrl??`Local runtime`})]}),(0,X.jsxs)(n,{gap:`lg`,wrap:`nowrap`,className:`runtime-status-facts`,children:[(0,X.jsxs)(d,{size:`xs`,c:`dimmed`,children:[`Version `,(0,X.jsx)(`strong`,{children:u?.runtimeVersion??`unavailable`})]}),(0,X.jsxs)(d,{size:`xs`,c:`dimmed`,children:[`Updated `,(0,X.jsx)(`strong`,{children:r.lastUpdatedAt??`never`})]})]})]}),(0,X.jsxs)(h,{cols:{base:2,sm:4},spacing:`sm`,className:`summary-grid`,children:[(0,X.jsx)(Gn,{label:`Enabled servers`,value:nt(r.configuredServers),tone:`good`,icon:`01`,href:`/admin/servers`,onNavigate:()=>t(`servers`)}),(0,X.jsx)(Gn,{label:`Disabled servers`,value:s,tone:`warn`,icon:`02`,href:`/admin/servers`,onNavigate:()=>t(`servers`)}),(0,X.jsx)(Gn,{label:`OAuth attention`,value:o,tone:o>0?`warn`:`good`,icon:`03`,href:`/admin/oauth`,onNavigate:()=>t(`oauth`)}),(0,X.jsx)(Gn,{label:`Failed audits`,value:a,tone:a>0?`bad`:`good`,icon:`04`,href:`/admin/audit`,onNavigate:()=>t(`audit`)})]}),(0,X.jsxs)(`div`,{className:`dashboard-grid`,children:[(0,X.jsxs)(`section`,{className:`attention-panel`,"aria-labelledby":`attention-title`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,mb:`sm`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Triage`}),(0,X.jsx)(k,{id:`attention-title`,order:3,children:`Needs attention`})]}),(0,X.jsx)(m,{leftSection:(0,X.jsx)(de,{size:16}),onClick:()=>void f(),children:`Configure server`})]}),(0,X.jsxs)(O,{gap:0,className:`attention-list`,children:[s>0?(0,X.jsx)(Wn,{icon:(0,X.jsx)(he,{size:17}),label:`${s} disabled ${s===1?`server`:`servers`}`,detail:`Review availability before enabling a target.`,href:`/admin/servers`,onNavigate:()=>t(`servers`)}):null,o>0?(0,X.jsx)(Wn,{icon:(0,X.jsx)(Ee,{size:17}),label:`${o} OAuth ${o===1?`service needs`:`services need`} action`,detail:`Authorization or restart is required.`,href:`/admin/oauth`,onNavigate:()=>t(`oauth`)}):null,a>0?(0,X.jsx)(Wn,{icon:(0,X.jsx)(_e,{size:17}),label:`${a} failed ${a===1?`operation`:`operations`}`,detail:`Inspect recent redacted audit facts.`,href:`/admin/audit`,onNavigate:()=>t(`audit`)}):null,s===0&&o===0&&a===0?(0,X.jsxs)(`div`,{className:`attention-clear`,children:[(0,X.jsx)(me,{size:18}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{fw:800,children:`No action required`}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:`Configured servers and runtime services report a clear state.`})]})]}):null]})]}),(0,X.jsx)(Q,{title:`Runtime identity`,utility:`current target`,icon:(0,X.jsx)(`span`,{className:`runtime-live-dot`}),children:u?(0,X.jsxs)(h,{cols:1,spacing:`sm`,className:`runtime-identity-grid`,children:[(0,X.jsx)(Z,{label:`Version`,value:u.runtimeVersion}),(0,X.jsx)(Z,{label:`External URL`,value:u.externalUrl??`-`,copyLabel:`externalUrl`,onCopyText:p,wrapValue:!0}),(0,X.jsx)(Z,{label:`Runtime scope`,value:u.runtimeScopeId,copyLabel:`runtimeScopeId`,onCopyText:p,wrapValue:!0})]}):(0,X.jsx)(d,{c:`dimmed`,children:`Runtime status has not loaded.`})})]}),(0,X.jsx)(Kn,{message:c})]})}function Vn({model:e}){let{state:t,configuredServers:n}=e,r=n.create.state.status!==`idle`,i=n.edit.state.status!==`list`;return(0,X.jsxs)(`section`,{"aria-labelledby":`servers-workspace-title`,className:`operations-workspace`,children:[(0,X.jsx)(Un,{title:`Configured servers`,titleId:`servers-workspace-title`,description:`${t.configuredServers.length} configured targets · updated ${t.lastUpdatedAt??`never`}`}),!r&&!i&&n.deletionNotice?(0,X.jsx)(Tt,{result:n.deletionNotice,dismiss:n.dismissDeletionNotice}):null,(0,X.jsx)(`div`,{className:`inventory-column server-browse-workspace`,hidden:r||i,children:(0,X.jsx)(Nn,{state:t,onServerAction:n.mutate,onOpenServerDetail:n.edit.open,onConfigureCustomServer:n.create.open})}),r||i?(0,X.jsx)(`div`,{className:`server-task-workspace`,children:r?(0,X.jsx)(an,{model:n.create}):(0,X.jsx)(jn,{model:n.edit,deleteModel:n.delete})}):null]})}function Hn({model:e}){let{state:t,configuredServers:n}=e,[r,i]=(0,Y.useState)(null);async function a(e,t){try{await n.copy(e,t),i(`${bt(e)} copied.`)}catch{i(`Could not copy ${bt(e)}. Select the value manually.`)}}return(0,X.jsxs)(`section`,{"aria-labelledby":`audit-workspace-title`,className:`operations-workspace`,children:[(0,X.jsx)(Un,{title:`Audit trail`,titleId:`audit-workspace-title`,description:`Recent redacted Admin Operations · updated ${t.lastUpdatedAt??`never`}`}),(0,X.jsx)(zn,{facts:t.status?.audit.facts??[],onCopyText:a}),(0,X.jsx)(Kn,{message:r})]})}function Un({title:e,titleId:t,description:r}){return(0,X.jsx)(n,{justify:`space-between`,align:`flex-start`,className:`workspace-heading`,children:(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Operator workspace / live`}),(0,X.jsx)(k,{id:t,order:2,children:e}),(0,X.jsx)(d,{c:`dimmed`,size:`sm`,children:r})]})})}function Wn({icon:e,label:t,detail:n,href:r,onNavigate:i}){return(0,X.jsxs)(`a`,{className:`attention-row`,href:r,onClick:e=>{qn(e)&&(e.preventDefault(),i())},children:[(0,X.jsx)(`span`,{className:`attention-icon`,children:e}),(0,X.jsxs)(`span`,{className:`attention-copy`,children:[(0,X.jsx)(d,{component:`span`,fw:800,size:`sm`,children:t}),(0,X.jsx)(d,{component:`span`,c:`dimmed`,size:`xs`,children:n})]}),(0,X.jsx)(ie,{size:16})]})}function Gn({label:e,value:t,tone:r,icon:i,href:a,onNavigate:o}){return(0,X.jsx)(b,{component:`a`,href:a,className:`summary-counter summary-link summary-${r}`,withBorder:!0,onClick:e=>{qn(e)&&(e.preventDefault(),o())},children:(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,wrap:`nowrap`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{size:`xs`,c:`dimmed`,fw:800,tt:`uppercase`,children:e}),(0,X.jsx)(d,{className:`summary-value`,children:t})]}),(0,X.jsxs)(O,{gap:4,align:`flex-end`,children:[(0,X.jsx)(d,{className:`summary-index`,children:i}),(0,X.jsx)(ie,{size:15,"aria-hidden":`true`})]})]})})}function Kn({message:e}){return(0,X.jsx)(`div`,{"aria-live":`polite`,children:e?(0,X.jsx)(r,{color:e.startsWith(`Could not`)?`red`:`teal`,mt:`sm`,children:e}):null})}function qn(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}var Jn=`modulepreload`,Yn=function(e){return`/admin/`+e},Xn={},Zn=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}r=o(t.map(t=>{if(t=Yn(t,n),t=s(t),t in Xn)return;Xn[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Jn,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Qn=(0,Y.lazy)(()=>Zn(()=>import(`./admin-AboutRuntimeWorkspace-DH2QC2nJ.js`).then(e=>({default:e.AboutRuntimeWorkspace})),__vite__mapDeps([0,1,2,3,4]))),$n=(0,Y.lazy)(()=>Zn(()=>import(`./admin-BackendLogsWorkspace-BKavXT9B.js`).then(e=>({default:e.BackendLogsWorkspace})),__vite__mapDeps([5,1,2,3,4,6]))),er=(0,Y.lazy)(()=>Zn(()=>import(`./admin-InstructionTemplatesWorkspace-CvG4EPdZ.js`).then(e=>({default:e.InstructionTemplatesWorkspace})),__vite__mapDeps([7,2,1,3,4,6]))),tr=(0,Y.lazy)(()=>Zn(()=>import(`./admin-OAuthServicesWorkspace-D_GlqLxL.js`).then(e=>({default:e.OAuthServicesWorkspace})),__vite__mapDeps([8,2,1,3,4,6]))),nr=(0,Y.lazy)(()=>Zn(()=>import(`./admin-PresetAuthoringWorkspace-BboJVBFl.js`).then(e=>({default:e.PresetAuthoringWorkspace})),__vite__mapDeps([9,2,1,3,4,6])));function rr({session:e}){let{state:t,loginBusy:r,navigation:i}=e,a=i.route,[o,s]=(0,Y.useState)(!1);if(t.view!==`console`)return(0,X.jsxs)(cr,{state:t,children:[t.view===`setupRequired`?(0,X.jsx)(ur,{}):null,t.view===`loading`||t.view===`login`?(0,X.jsx)(dr,{loading:t.view===`loading`||r,onLogin:e.login}):null]});return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`a`,{className:`skip-link`,href:`#admin-main`,children:`Skip to main content`}),(0,X.jsxs)(M,{className:`admin-app-shell`,header:{height:66},navbar:{width:232,breakpoint:`md`,collapsed:{mobile:!o}},padding:0,children:[(0,X.jsx)(M.Header,{"aria-label":`Admin Console`,className:`admin-app-header`,children:(0,X.jsxs)(n,{h:`100%`,px:`lg`,justify:`space-between`,wrap:`nowrap`,className:`command-bar`,children:[(0,X.jsxs)(n,{gap:`sm`,wrap:`nowrap`,children:[(0,X.jsx)(ee,{"aria-label":o?`Close operations navigation`:`Open operations navigation`,className:`mobile-navigation-toggle`,color:`var(--admin-ink)`,opened:o,size:`sm`,onClick:()=>s(e=>!e)}),(0,X.jsx)(`div`,{className:`brand-mark`,"aria-hidden":`true`,children:`1`}),(0,X.jsxs)(`div`,{className:`command-brand-copy`,children:[(0,X.jsx)(d,{className:`eyebrow command-eyebrow`,size:`xs`,children:`1MCP control plane`}),(0,X.jsx)(k,{order:1,size:`h4`,children:`Admin Console`})]})]}),(0,X.jsxs)(n,{gap:`xs`,wrap:`nowrap`,className:`global-actions`,children:[(0,X.jsxs)(`div`,{className:`runtime-live`,"aria-label":`Runtime online`,children:[(0,X.jsx)(`span`,{className:`runtime-live-dot`}),(0,X.jsx)(d,{size:`xs`,fw:800,children:`Runtime online`})]}),(0,X.jsx)(u,{className:`global-view-badge`,variant:`light`,color:yt(t),children:vt(t)}),(0,X.jsx)(g,{label:`Refresh runtime data`,children:(0,X.jsx)(c,{"aria-label":`Refresh runtime data`,color:`gray`,size:`lg`,variant:`subtle`,onClick:()=>void e.refresh(),children:(0,X.jsx)(ge,{size:17})})}),(0,X.jsx)(lr,{}),(0,X.jsxs)(`div`,{className:`operator-identity`,title:t.session?.account.role??`Admin session`,children:[(0,X.jsx)(Se,{size:16}),(0,X.jsx)(d,{className:`operator-name`,fw:700,size:`sm`,children:t.session?.account.username??`Operator`})]}),(0,X.jsx)(g,{label:`Log out`,children:(0,X.jsx)(c,{"aria-label":`Log out`,color:`red`,size:`lg`,variant:`subtle`,onClick:()=>void e.logout(),children:(0,X.jsx)(ce,{size:17})})})]})]})}),(0,X.jsxs)(M.Navbar,{className:`admin-app-navbar`,"aria-label":`Operations navigation`,children:[(0,X.jsxs)(O,{gap:`lg`,className:`nav-stack`,children:[(0,X.jsxs)(O,{gap:4,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`Manage`}),(0,X.jsx)(or,{icon:(0,X.jsx)(G,{size:17}),label:`Overview`,href:`/admin`,active:a===`dashboard`,onNavigate:()=>l(`dashboard`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(re,{size:17}),label:`Server inventory`,href:`/admin/servers`,active:a===`servers`,onNavigate:()=>l(`servers`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(xe,{size:17}),label:`Presets`,href:`/admin/presets`,active:a===`presets`,onNavigate:()=>l(`presets`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(Te,{size:17}),label:`Instructions`,href:`/admin/instructions`,active:a===`instructions`,onNavigate:()=>l(`instructions`)})]}),(0,X.jsxs)(O,{gap:4,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`Observe`}),(0,X.jsx)(or,{icon:(0,X.jsx)(le,{size:17}),label:`OAuth services`,href:`/admin/oauth`,active:a===`oauth`,onNavigate:()=>l(`oauth`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(K,{size:17}),label:`Audit trail`,href:`/admin/audit`,active:a===`audit`,onNavigate:()=>l(`audit`)}),(0,X.jsx)(or,{icon:(0,X.jsx)(ve,{size:17}),label:`Backend logs`,href:`/admin/logs`,active:a===`logs`,onNavigate:()=>l(`logs`)})]}),(0,X.jsxs)(O,{gap:4,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`System`}),(0,X.jsx)(or,{icon:(0,X.jsx)(oe,{size:17}),label:`About`,href:`/admin/about`,active:a===`about`,onNavigate:()=>l(`about`)})]})]}),(0,X.jsxs)(O,{gap:`xs`,className:`nav-runtime-card`,children:[(0,X.jsx)(d,{className:`nav-section-label`,children:`Runtime target`}),(0,X.jsx)(d,{fw:800,className:`truncate`,children:gt(t.status?.runtime)}),(0,X.jsx)(d,{size:`xs`,c:`dimmed`,className:`truncate`,children:_t(t.status?.runtime)}),(0,X.jsx)(d,{size:`xs`,className:`nav-scope truncate`,children:t.status?.runtime.runtimeScopeId??`scope unavailable`})]})]}),(0,X.jsx)(M.Main,{id:`admin-main`,className:`admin-shell-main`,children:(0,X.jsxs)(O,{gap:`md`,className:`admin-console`,children:[(0,X.jsx)(fr,{state:t}),(0,X.jsx)(Y.Suspense,{fallback:(0,X.jsx)(ir,{}),children:(0,X.jsx)(ar,{session:e})})]})})]})]});function l(e){i.navigate(e),s(!1)}}function ir(){return(0,X.jsx)(b,{className:`operations-panel`,role:`status`,withBorder:!0,children:(0,X.jsx)(d,{c:`dimmed`,children:`Loading workspace...`})})}function ar({session:e}){let{state:t,navigation:n,configuredServers:r,presets:i}=e,a={state:t,logout:e.logout,refresh:e.refresh,configuredServers:r};switch(n.route){case`servers`:return(0,X.jsx)(Vn,{model:a});case`oauth`:return(0,X.jsx)(tr,{model:a,oauth:e.oauth,configureServer:a.configuredServers.create.open});case`audit`:return(0,X.jsx)(Hn,{model:a});case`presets`:return(0,X.jsx)(nr,{model:{...i,targets:i.targets.length>0?i.targets:t.configuredServers.map(e=>({name:e.id,tags:e.tags,enabled:e.enabled}))},runtimeScopeId:t.status?.runtime.runtimeScopeId});case`instructions`:return(0,X.jsx)(er,{model:e.instructions,runtimeScopeId:t.status?.runtime.runtimeScopeId});case`logs`:return(0,X.jsx)($n,{logs:e.logs,configureServer:a.configuredServers.create.open});case`about`:return(0,X.jsx)(Qn,{state:t});case`dashboard`:return(0,X.jsx)(Bn,{model:a,navigate:n.navigate})}}function or({icon:e,label:t,href:n,active:r=!1,onNavigate:i}){return(0,X.jsxs)(`a`,{href:n,"aria-current":r?`page`:void 0,className:`nav-item${r?` nav-item-active`:``}`,onClick:e=>{sr(e)&&(e.preventDefault(),i?.())},children:[e,(0,X.jsx)(d,{size:`sm`,fw:700,children:t})]})}function sr(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}function cr({state:e,children:t}){return(0,X.jsxs)(`main`,{className:`admin-auth-shell`,"aria-label":`Admin authentication`,children:[(0,X.jsx)(`div`,{className:`auth-theme-control`,children:(0,X.jsx)(lr,{})}),(0,X.jsxs)(O,{gap:`md`,className:`admin-auth-card`,children:[(0,X.jsx)(fr,{state:e}),t]})]})}function lr(){let{colorScheme:e,setColorScheme:t}=l(),n=[{value:`auto`,label:`System`,icon:(0,X.jsx)(De,{size:16})},{value:`light`,label:`Light`,icon:(0,X.jsx)(fe,{size:16})},{value:`dark`,label:`Dark`,icon:(0,X.jsx)(we,{size:16})}];return(0,X.jsxs)(v,{position:`bottom-end`,shadow:`md`,width:170,children:[(0,X.jsx)(v.Target,{children:(0,X.jsx)(c,{"aria-label":`Choose color theme`,color:`gray`,size:`lg`,title:`Color theme`,variant:`subtle`,children:(0,X.jsx)(se,{size:17})})}),(0,X.jsxs)(v.Dropdown,{children:[(0,X.jsx)(v.Label,{children:`Color theme`}),n.map(n=>(0,X.jsx)(v.Item,{"aria-label":`${n.label} theme${e===n.value?`, selected`:``}`,leftSection:n.icon,rightSection:e===n.value?(0,X.jsx)(pe,{size:14}):null,onClick:()=>t(n.value),children:n.label},n.value))]})]})}function ur(){return(0,X.jsx)(b,{component:`section`,className:`operations-panel`,"aria-labelledby":`setup-required-title`,withBorder:!0,children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Runtime gate`}),(0,X.jsx)(k,{id:`setup-required-title`,order:2,children:`Setup required`})]}),(0,X.jsx)(u,{color:`yellow`,variant:`filled`,children:`No Admin Account`})]}),(0,X.jsx)(d,{c:`dimmed`,children:`Run CLI bootstrap from the runtime host, then refresh this page. The browser setup page does not create admin accounts.`}),(0,X.jsx)(N,{block:!0,children:`1mcp admin bootstrap --username operator --password 'use-a-long-random-password'`})]})})}function dr({loading:e,onLogin:t}){let[r,i]=(0,Y.useState)(``),[a,o]=(0,Y.useState)(``),[s,c]=(0,Y.useState)(!1);return(0,X.jsx)(b,{component:`section`,className:`login-panel`,"aria-labelledby":`login-title`,withBorder:!0,children:(0,X.jsx)(`form`,{onSubmit:n=>{n.preventDefault(),e||t?.({username:r,password:a})},children:(0,X.jsxs)(O,{gap:`sm`,children:[(0,X.jsxs)(n,{justify:`space-between`,align:`flex-start`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(d,{className:`eyebrow`,size:`xs`,children:`Admin Session`}),(0,X.jsx)(k,{id:`login-title`,order:2,children:`Operator login`})]}),(0,X.jsx)(u,{variant:`light`,children:e?`Checking session`:`Login required`})]}),(0,X.jsx)(w,{label:`Username`,autoComplete:`username`,disabled:e,value:r,onChange:e=>i(e.currentTarget.value),required:!0}),(0,X.jsx)(E,{label:`Password`,autoComplete:`current-password`,disabled:e,value:a,onChange:e=>o(e.currentTarget.value),visible:s,onVisibilityChange:()=>c(e=>!e),visibilityToggleButtonProps:{"aria-label":s?`Hide password`:`Show password`,"aria-pressed":s,tabIndex:0,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),c(e=>!e))}},required:!0}),(0,X.jsx)(m,{type:`submit`,loading:e,disabled:e,children:e?`Checking`:`Log in`})]})})})}function fr({state:e}){let t=e.banner??(e.error?{kind:`error`,message:e.error}:null);return t?(0,X.jsx)(r,{color:t.kind===`error`?`red`:`teal`,role:t.kind===`error`?`alert`:`status`,children:t.message}):null}var pr=e(P(),1),mr=(0,Y.createContext)(null);function hr({children:e}){let[r,i]=(0,Y.useState)(null),a=(0,Y.useRef)(null),o=(0,Y.useRef)([]),s=(0,Y.useRef)(new WeakSet),c=(0,Y.useRef)(!1),l=(0,Y.useRef)(null),u=(0,Y.useRef)(null),p=(0,Y.useCallback)(e=>new Promise(t=>{let n={...e,resolve:t};if(a.current){o.current.push(n);return}u.current=document.activeElement instanceof HTMLElement?document.activeElement:null,a.current=n,(0,pr.flushSync)(()=>i(n))}),[]),h=(0,Y.useCallback)(e=>{let t=a.current;if(!t||c.current||s.current.has(t))return;c.current=!0,s.current.add(t),t.resolve(e);let n=o.current.shift()??null;a.current=n,(0,pr.flushSync)(()=>i(n)),window.setTimeout(()=>{c.current=!1,n?l.current?.focus():u.current?.focus()},0)},[]),g=(0,Y.useMemo)(()=>p,[p]);return(0,Y.useEffect)(()=>{r&&l.current?.focus()},[r]),(0,X.jsxs)(mr.Provider,{value:g,children:[e,r?(0,X.jsx)(`div`,{className:`confirmation-overlay`,role:`presentation`,children:(0,X.jsx)(t,{active:!0,children:(0,X.jsx)(b,{className:`confirmation-dialog`,withBorder:!0,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`admin-confirmation-title`,"aria-describedby":`admin-confirmation-message`,onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),h(!1))},children:(0,X.jsxs)(O,{gap:`md`,children:[(0,X.jsx)(k,{id:`admin-confirmation-title`,order:3,children:r.title}),(0,X.jsx)(d,{id:`admin-confirmation-message`,children:r.message}),r.details?.length?(0,X.jsx)(f,{spacing:`xs`,size:`sm`,children:r.details.map(e=>(0,X.jsxs)(f.Item,{children:[(0,X.jsxs)(d,{span:!0,fw:700,children:[e.label,`:`,` `]}),(0,X.jsx)(d,{span:!0,children:e.value})]},`${e.label}:${e.value}`))}):null,(0,X.jsxs)(n,{justify:`flex-end`,children:[(0,X.jsx)(m,{ref:l,variant:`default`,onClick:()=>h(!1),children:r.cancelLabel??`Cancel`}),(0,X.jsx)(m,{color:r.tone===`danger`?`red`:void 0,onClick:()=>h(!0),children:r.confirmLabel??`Confirm`})]})]})})})}):null]})}function gr(){let e=(0,Y.useContext)(mr);if(!e)throw Error(`useConfirmationDialog must be used within ConfirmationDialogProvider`);return e}function _r({api:e,session:t,onUnauthenticated:n,onDeleted:r}){let[i,a]=(0,Y.useReducer)(St,void 0,xt),o=(0,Y.useRef)(i),s=(0,Y.useRef)(0),c=(0,Y.useRef)();o.current=i;let l=(0,Y.useCallback)(()=>{s.current+=1,c.current=void 0,a({type:`reset`})},[]),u=(0,Y.useCallback)((e,t,r=!1)=>{if(e instanceof J&&e.failure.kind===`unauthenticated`){l(),n(e.failure.adminStatus);return}let i=e instanceof J?e.failure.message:String(e);a({type:`applyFailed`,message:`${t}: ${i}`,clearPreview:r})},[n,l]);return{state:i,preview:(0,Y.useCallback)(async r=>{if(!t||o.current.previewBusy||o.current.applyBusy)return;let i=++s.current;a({type:`previewStarted`});try{let n=await e.previewConfiguredServerDelete({target:r,csrfToken:t.csrfToken});if(i!==s.current)return;c.current=void 0,a({type:`previewSucceeded`,preview:n.preview})}catch(e){if(i!==s.current)return;if(e instanceof J&&e.failure.kind===`unauthenticated`){l(),n(e.failure.adminStatus);return}a({type:`previewFailed`,message:`Delete preview failed: ${e instanceof J?e.failure.message:String(e)}`})}},[e,n,l,t]),changeConfirmation:(0,Y.useCallback)(e=>{a({type:`confirmationChanged`,value:e})},[]),apply:(0,Y.useCallback)(async n=>{let i=o.current;if(!t||!i.preview||i.applyBusy||i.confirmation!==i.preview.qualifiedId)return;let l=++s.current,d=c.current?.previewFingerprint===i.preview.previewFingerprint?c.current:{previewFingerprint:i.preview.previewFingerprint,idempotencyKey:Ve(i.preview.qualifiedId)};c.current=d,a({type:`applyStarted`});try{let o=await e.deleteConfiguredServer({target:n,csrfToken:t.csrfToken,idempotencyKey:d.idempotencyKey,previewFingerprint:i.preview.previewFingerprint,confirmedIdentity:i.confirmation});if(l!==s.current)return;c.current=void 0,a({type:`applySucceeded`,result:o.result}),await r(n,o.result)}catch(e){if(l!==s.current)return;let t=e instanceof J&&e.failure.kind===`rejected`&&[`configured_server_stale_preview`,`configured_server_already_removed`,`configured_server_source_changed`].includes(e.failure.code);t&&(c.current=void 0),u(e,`Delete failed`,t)}},[e,u,r,l,t]),reset:l}}var vr={identity:``,variants:{initialization:``,cli:``}};function yr({api:e,active:t,csrfToken:n,confirm:r,onUnauthenticated:i}){let[a,o]=(0,Y.useState)([]),[s,c]=(0,Y.useState)(),[l,u]=(0,Y.useState)(!1),[d,f]=(0,Y.useState)(``),[p,m]=(0,Y.useState)(!1),[h,g]=(0,Y.useState)({}),[_,v]=(0,Y.useState)(),[y,b]=(0,Y.useState)(vr),[x,S]=(0,Y.useState)(`initialize`),[C,w]=(0,Y.useState)({mode:`all`}),[T,E]=(0,Y.useState)(``),[D,O]=(0,Y.useState)(null),[k,A]=(0,Y.useState)(null),[j,M]=(0,Y.useState)(!1),[ee,N]=(0,Y.useState)(!1),[te,P]=(0,Y.useState)(null),[F,ne]=(0,Y.useState)(null),I=(0,Y.useRef)(!1),L=(0,Y.useRef)(0),R=(0,Y.useRef)(n),z=(0,Y.useRef)(),B=(0,Y.useCallback)((e,t)=>{if(e instanceof J&&e.failure.kind===`unauthenticated`){I.current=!1,i?.(e.failure.adminStatus);return}P(xr(e,t))},[i]),V=(0,Y.useMemo)(()=>a.find(e=>e.identity===_),[a,_]),H=V?V.identity!==y.identity||JSON.stringify(V.variants)!==JSON.stringify(y.variants):!!(y.identity||y.variants.initialization||y.variants.cli),U=(0,Y.useCallback)(()=>{z.current=void 0,O(e=>(e&&M(!0),null)),A(null)},[]),W=(0,Y.useCallback)(async()=>{if(!n)return;let t=L.current,r=n;N(!0),P(null);try{let i=await e.listInstructionTemplates();if(t!==L.current||r!==n)return;o(i.templates),c(i.activeIdentity),u(i.selectionExplicit),f(i.configFingerprint),m(i.legacyImportAvailable),g(i.renderFailures),I.current=!0}catch(e){if(t!==L.current||r!==n)return;B(e,`Instruction templates could not be loaded.`)}finally{t===L.current&&r===n&&N(!1)}},[e,n,B]);(0,Y.useEffect)(()=>{R.current!==n&&(R.current=n,L.current+=1,I.current=!1),!n&&(o([]),v(void 0),b(vr),O(null),A(null),N(!1))},[n]),(0,Y.useEffect)(()=>{t&&n&&!I.current&&W()},[t,n,W]);let G=(0,Y.useCallback)(e=>{v(e);let t=a.find(t=>t.identity===e);b(t?{identity:t.identity,variants:{...t.variants}}:vr),O(null),A(null),M(!1),P(null)},[a]),K=(0,Y.useCallback)(async(e,t)=>{if(!n)return!1;let r=z.current?.signature===e?z.current:{signature:e,idempotencyKey:Ue(e,y.identity)};z.current=r,N(!0),P(null);try{let e=await t(r.idempotencyKey);return ne(e.result.reload?.status===`failed`?e.result.reload.error?`Configuration was written, but runtime reload failed: ${e.result.reload.error}`:`Configuration was written, but runtime reload failed. Inspect runtime health before continuing.`:null),z.current=void 0,I.current=!1,await W(),!0}catch(e){return B(e,`Instruction template operation failed.`),!1}finally{N(!1)}},[n,y.identity,W,B]);return{items:a,activeIdentity:s,selectionExplicit:l,configFingerprint:d,legacyAvailable:p,renderFailures:h,selectedIdentity:_,draft:y,surface:x,selection:C,requestContext:T,preview:D,activationValidation:k,previewStale:j,dirty:H,busy:ee,error:te,reloadWarning:F,select:G,newDraft:()=>G(void 0),changeIdentity:e=>{b(t=>({...t,identity:e})),U()},changeVariant:(e,t)=>{let n=e===`initialize`?`initialization`:`cli`;b(e=>({...e,variants:{...e.variants,[n]:t}})),U()},changeSurface:e=>{S(e),U()},changeSelection:e=>{w(e),U()},changeRequestContext:e=>{E(e),U()},load:W,async saveDraft(){if(!n||!y.identity.trim())return!1;let t=await K(`save:${_?`update`:`create`}:${d}:${JSON.stringify(y)}`,t=>e.saveInstructionTemplate({action:_?`update`:`create`,draft:y,expectedConfigFingerprint:d,csrfToken:n,idempotencyKey:t}));return t&&v(y.identity),t},async previewDraft(){if(!n||!y.identity)return;let t=L.current,r=n;N(!0),P(null);try{let i;T.trim()&&(i=br(JSON.parse(T)));let a=await e.previewInstructionTemplate({identity:y.identity,surface:x,selection:C,...i?{requestContext:i}:{},csrfToken:n});if(t!==L.current||r!==n)return;O(a),M(!1)}catch(e){if(t!==L.current||r!==n)return;B(e,`Instruction template preview failed.`)}finally{t===L.current&&r===n&&N(!1)}},async validateDraft(){if(!n||!_||H)return;let t=L.current,r=n;N(!0),P(null);try{let i=await e.validateInstructionTemplate({identity:_,expectedConfigFingerprint:d,csrfToken:n});if(t!==L.current||r!==n)return;A(i)}catch(e){if(t!==L.current||r!==n)return;B(e,`Instruction template validation failed.`)}finally{t===L.current&&r===n&&N(!1)}},async activate(){!n||!k||k.identity!==y.identity||await K(`activate:${y.identity}:${k.expectedConfigFingerprint}:${k.previewFingerprint}`,t=>e.activateInstructionTemplate({identity:y.identity,expectedConfigFingerprint:k.expectedConfigFingerprint,previewFingerprint:k.previewFingerprint,csrfToken:n,idempotencyKey:t}))&&(O(null),A(null))},async clone(t){!n||!_||await K(`clone:${_}:${t}:${d}`,r=>e.cloneInstructionTemplate({sourceIdentity:_,identity:t,expectedConfigFingerprint:d,csrfToken:n,idempotencyKey:r}))},async importLegacy(t){n&&await K(`import:${t}:${d}`,r=>e.importLegacyInstructionTemplate({identity:t,expectedConfigFingerprint:d,csrfToken:n,idempotencyKey:r}))},async deleteSelected(){if(!(!n||!_||V?.protected))try{let t=await e.previewInstructionTemplateDelete({identity:_,expectedConfigFingerprint:d,csrfToken:n});if(!t.allowed){P(t.reason===`active_conflict`?`Activate another template before deleting this one.`:`This template cannot be deleted.`);return}if(!await r({title:`Delete ${t.identity}?`,message:`This permanently removes the managed template from the current Runtime Scope.`,confirmLabel:`Delete template`,tone:`danger`,details:[{label:`Template`,value:t.identity},{label:`Reason`,value:t.reason??`Template is inactive and not protected`}]}))return;await K(`delete:${_}:${t.expectedConfigFingerprint}:${t.previewFingerprint}`,r=>e.deleteInstructionTemplate({identity:_,expectedConfigFingerprint:t.expectedConfigFingerprint,previewFingerprint:t.previewFingerprint,csrfToken:n,idempotencyKey:r}))&&G(void 0)}catch(e){B(e,`Instruction template deletion could not be prepared.`)}}}}function br(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Request context must include project, user, and environment objects.`);let t=e;for(let e of[`project`,`user`,`environment`]){let n=t[e];if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`Request context must include project, user, and environment objects.`)}return t}function xr(e,t){return e instanceof J?e.failure.message:e instanceof Error?e.message:t}function Sr(){return{view:`loading`,session:null,status:null,configuredServers:[],serverMutations:{},banner:null,error:null,lastUpdatedAt:null}}function Cr(e,t){switch(t.type){case`sessionLoaded`:return{...e,view:`console`,session:t.session,banner:null,error:null};case`sessionUnauthenticated`:return{...Sr(),view:t.adminStatus===`setupRequired`?`setupRequired`:`login`,session:null};case`refreshSucceeded`:return{...e,view:`console`,status:t.status,configuredServers:t.configuredServers,lastUpdatedAt:t.updatedAt,banner:e.banner?.kind===`error`?null:e.banner,error:null};case`refreshFailed`:case`loginFailed`:return{...e,error:t.message,banner:{kind:`error`,message:t.message}};case`logoutSucceeded`:return{...Sr(),view:`login`};case`mutationStarted`:return wr(e,t.serverId,{state:`busy`,action:t.action});case`mutationSucceeded`:return wr(e,t.serverId,{state:`succeeded`,action:t.action,message:`Server ${t.action} completed.`});case`mutationFailed`:return wr(e,t.serverId,{state:`failed`,action:t.action,message:t.message});case`clearBanner`:return{...e,banner:null,error:null}}}function wr(e,t,n){return{...e,serverMutations:{...e.serverMutations,[t]:n},banner:n.state===`failed`?{kind:`error`,message:n.message??``}:e.banner}}var Tr=5e3,Er=6e4;function Dr(e){return e===`visible`?Tr:Er}function Or(e){return e.view===`console`&&!!e.session?.csrfToken}var kr=5e3,Ar=512*1024,jr={connection:`idle`,sources:[],selectedSourceId:null,entries:[],unread:{},cursors:{},selectionLoading:!1,selectionError:null};function Mr(e){let[t,n]=(0,Y.useState)(jr),r=(0,Y.useRef)(t),i=(0,Y.useRef)([]),a=(0,Y.useRef)(e.onUnauthenticated),o=(0,Y.useRef)(0);(0,Y.useEffect)(()=>{r.current=t},[t]),(0,Y.useEffect)(()=>{a.current=e.onUnauthenticated},[e.onUnauthenticated]);let s=(0,Y.useCallback)(e=>{i.current=e.sources,n(t=>{let n=e.sources.some(e=>e.id===t.selectedSourceId)?t.selectedSourceId:e.sources[0]?.id??null;return{connection:`active`,sources:e.sources,selectedSourceId:n,entries:n?zr(e.entries.filter(e=>e.sourceId===n)):[],unread:Rr(e,n),cursors:Fr(e.entries),selectionLoading:!1,selectionError:null}})},[]),c=(0,Y.useCallback)(async t=>{let r=++o.current;n(e=>({...e,selectedSourceId:t,entries:[],unread:{...e.unread,[t]:0},selectionLoading:!0,selectionError:null}));try{let i=await e.api.getBackendLogSnapshot(t);if(o.current!==r)return;n(e=>{if(e.selectedSourceId!==t)return e;let n=i.entries.filter(e=>e.sourceId===t),r=e.entries.filter(e=>e.sequence>i.sequence);return{...e,entries:zr([...n,...r]),selectionLoading:!1,selectionError:null}})}catch(e){if(o.current!==r)return;if(e instanceof J&&e.failure.kind===`unauthenticated`){a.current();return}n(e=>e.selectedSourceId===t?{...e,selectionLoading:!1,selectionError:`Failed to load retained backend logs. Live entries will continue to appear.`}:e)}},[e.api]);(0,Y.useEffect)(()=>{if(!e.active||!e.authenticated){o.current+=1,i.current=[],n(jr);return}return n(e=>({...e,connection:`loading`})),e.api.openBackendLogStream({onSnapshot:s,onGap:s,onEntry:e=>{i.current.some(t=>t.id===e.sourceId)||(i.current=[...i.current,Pr(e)]),n(t=>Nr(t,e))},onSources:e=>{i.current=e;let t=r.current,a=e.some(e=>e.id===t.selectedSourceId)?t.selectedSourceId:e[0]?.id??null;n(t=>Ir(t,e,a)),a&&a!==t.selectedSourceId&&c(a)},onSourceUpdate:e=>{let t=r.current,a=e.removed?i.current.filter(t=>t.id!==e.sourceId):[...i.current.filter(t=>t.id!==e.sourceId),e.source].sort((e,t)=>e.id.localeCompare(t.id));i.current=a;let o=a.some(e=>e.id===t.selectedSourceId)?t.selectedSourceId:a[0]?.id??null;n(e=>Ir(e,a,o)),o&&o!==t.selectedSourceId&&c(o)},onOpen:()=>n(e=>({...e,connection:e.sources.length?`active`:`loading`})),onError:()=>n(e=>({...e,connection:`reconnecting`}))})},[s,e.active,e.api,e.authenticated,c]);let l=(0,Y.useCallback)(e=>c(e),[c]);return{...t,select:l}}function Nr(e,t){let n=e.sources.some(e=>e.id===t.sourceId)?e.sources:[...e.sources,Pr(t)];return e.selectedSourceId===null?{...e,connection:`active`,sources:n,selectedSourceId:t.sourceId,entries:[t],unread:{...e.unread,[t.sourceId]:0},cursors:{...e.cursors,[t.sourceId]:t.sequence},selectionLoading:!1,selectionError:null}:t.sourceId===e.selectedSourceId?{...e,connection:`active`,sources:n,entries:zr([...e.entries,t]),cursors:{...e.cursors,[t.sourceId]:t.sequence}}:{...e,connection:`active`,sources:n,unread:{...e.unread,[t.sourceId]:(e.unread[t.sourceId]??0)+1},cursors:{...e.cursors,[t.sourceId]:t.sequence}}}function Pr(e){return{id:e.sourceId,canonicalName:e.canonicalName,displayName:e.displayName,kind:e.sourceKind,capture:`managed`,lifecycle:`active`}}function Fr(e){let t={};for(let n of e)t[n.sourceId]=n.sequence;return t}function Ir(e,t,n){let r=new Set(t.map(e=>e.id)),i=n!==e.selectedSourceId;return{...e,sources:t,selectedSourceId:n,entries:i?[]:e.entries,unread:Lr(e.unread,r),cursors:Lr(e.cursors,r),selectionLoading:i&&n!==null,selectionError:i?null:e.selectionError}}function Lr(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>t.has(e)))}function Rr(e,t){let n={};for(let r of e.entries)r.sourceId!==t&&(n[r.sourceId]=(n[r.sourceId]??0)+1);return n}function zr(e){let t=0,n=[];for(let r=e.length-1;r>=0&&n.length<kr;r--){let i=e[r];if(t+=i.content.length,t>Ar&&n.length>0)break;n.push(i)}return n.reverse()}var Br={access_denied:`OAuth authorization was denied.`,missing_code:`The OAuth provider callback did not include an authorization code.`,callback_failed:`The runtime could not complete the OAuth provider callback.`,runtime_unavailable:`The OAuth runtime became unavailable during the callback.`};function Vr(e){if(e instanceof J)return e.failure.message;throw e}function Hr({api:e,documentRef:t=document,windowRef:n=window,nowLabel:r}){return(0,X.jsx)(hr,{children:(0,X.jsx)(Ur,{api:e,documentRef:t,windowRef:n,nowLabel:r})})}function Ur({api:e,documentRef:t,windowRef:n,nowLabel:r}){return(0,X.jsx)(rr,{session:Wr({api:e,documentRef:t,windowRef:n,nowLabel:r,confirm:gr()})})}function Wr({api:e,documentRef:t,windowRef:n,nowLabel:r,confirm:i}){let[a,o]=(0,Y.useState)(Sr),[s,c]=(0,Y.useState)(!1),[l,u]=(0,Y.useState)(()=>Kr(n.location?.pathname??`/admin`)),[d,f]=(0,Y.useState)(null),[p]=(0,Y.useState)(()=>{let e=Jr(n.location?.search??``);return e&&n.history?.replaceState(null,``,`/admin/oauth`),e}),[m,h]=(0,Y.useState)(null),[g,_]=(0,Y.useState)([]),[v,y]=(0,Y.useState)([]),[b,x]=(0,Y.useState)(``),[S,C]=(0,Y.useState)(!1),[w,T]=(0,Y.useState)(null),E=(0,Y.useRef)(a),D=(0,Y.useRef)(null),O=(0,Y.useRef)(),k=(0,Y.useRef)(),A=(0,Y.useRef)(),j=(0,Y.useRef)(!1),M=(0,Y.useRef)(!1),ee=(0,Y.useRef)(!1),N=(0,Y.useRef)(0),te=(0,Y.useCallback)(()=>r?.()??new Date().toLocaleTimeString(),[r]),P=(0,Y.useCallback)(e=>{let t=Cr(E.current,e);E.current=t,o(t)},[]);(0,Y.useEffect)(()=>{E.current=a},[a]);let F=(0,Y.useCallback)(()=>{D.current!==null&&(n.clearTimeout(D.current),D.current=null)},[n]),ne=(0,Y.useCallback)(()=>{N.current+=1,ee.current=!1,f(null),h(null)},[]),I=(0,Y.useCallback)(e=>{F(),ne(),T(null),P({type:`sessionUnauthenticated`,adminStatus:e})},[F,P,ne]),L=(0,Y.useCallback)(e=>{let t=e instanceof J?e.failure:null;return t?.kind===`unauthenticated`?(I(t.adminStatus),!0):!1},[I]),R=(0,Y.useMemo)(()=>({pathname:()=>n.location?.pathname??`/admin`,push:e=>n.history?.pushState(null,``,e),replace:e=>n.history?.replaceState(null,``,e),confirm:i,subscribePopState:e=>(n.addEventListener?.(`popstate`,e),()=>n.removeEventListener?.(`popstate`,e))}),[i,n]),z=(0,Y.useCallback)(e=>{u(Kr(e))},[]),B=yn({api:e,session:a.session,browser:R,onUnauthenticated:I,onApplied:()=>O.current?.(),onPathCommitted:z}),V=qt({api:e,session:a.session,browser:R,onUnauthenticated:I,onCreated:()=>k.current?.(),onOpenCreated:B.open,onPathCommitted:z}),H=_r({api:e,session:a.session,onUnauthenticated:I,onDeleted:(e,t)=>A.current?.(e,t)}),U=Mr({api:e,active:l===`logs`,authenticated:!!a.session,onUnauthenticated:()=>I(`loginRequired`)}),W=yr({api:e,active:l===`instructions`,csrfToken:a.session?.csrfToken,confirm:i,onUnauthenticated:I}),G=(0,Y.useCallback)(e=>E.current.session?.csrfToken===e,[]),K=(0,Y.useCallback)(async()=>{if(E.current.session){C(!0);try{let t=await e.listPresets();_(t.presets),y(t.targets??[]),x(t.revision)}finally{C(!1)}}},[e]);(0,Y.useEffect)(()=>{l===`presets`&&a.session&&K()},[K,l,a.session]);let re=(0,Y.useCallback)(async(t,n)=>{let r=E.current.session?.csrfToken;if(!r)throw Error(`admin_session_required`);return e.previewPreset({draft:t,sourceName:n,csrfToken:r})},[e]),ie=(0,Y.useCallback)(async t=>{if(j.current)return!1;j.current=!0;try{let n=E.current.session?.csrfToken;return!n||!await i({title:`${Gr(t.action)} ${t.preview.draft.name}?`,message:`The preview must still match the current preset store when this change is saved.`,confirmLabel:`${Gr(t.action)} preset`,details:[{label:`Preset`,value:t.preview.draft.name},{label:`Current matches`,value:String(t.preview.matchCount)},...t.preview.matchCount===0?[{label:`Attention`,value:`This preset currently matches no configured servers.`}]:[]]})?!1:(await e.mutatePreset({action:t.action,sourceName:t.sourceName,draft:t.preview.draft,revision:t.preview.revision,previewFingerprint:t.preview.previewFingerprint,confirmations:{previewConfirmed:t.preview.previewFingerprint,...t.preview.matchCount===0?{zeroMatchConfirmed:!0}:{}},csrfToken:n}),await K(),!0)}finally{j.current=!1}},[e,i,K]),ae=(0,Y.useCallback)(async t=>{if(!M.current){M.current=!0;try{let n=E.current.session?.csrfToken;if(!n)return;let r=await e.previewPresetDelete({name:t,revision:b,csrfToken:n}),a=r.matches.filter(e=>e.matched).map(e=>e.name);if(!await i({title:`Delete ${t}?`,message:`This removes the preset from the current Runtime Scope.`,confirmLabel:`Delete preset`,tone:`danger`,details:[{label:`Preset`,value:t},{label:`Current matches`,value:a.join(`, `)||`none`},{label:`Consequence`,value:r.consequence}]}))return;await e.deletePreset({name:t,revision:b,previewFingerprint:r.previewFingerprint,csrfToken:n}),await K()}finally{M.current=!1}}},[e,i,K,b]),oe=(0,Y.useCallback)(async e=>{let t=qr(e);if(V.state.status!==`idle`){if(!await V.close(t))return;u(e);return}await B.close(t)&&u(e)},[V,B]),q=(0,Y.useCallback)(async(t,n)=>{let r=n??E.current.session;if(!r)return;let i=r.csrfToken;try{let[t,n]=await Promise.all([e.getStatus(),e.listConfiguredServers()]);if(!G(i))return;P({type:`refreshSucceeded`,status:t,configuredServers:n,updatedAt:te()})}catch(e){if(!G(i))return;L(e)||P({type:`refreshFailed`,message:`${t}${Vr(e)}`})}},[e,P,te,L,G]);O.current=()=>q(``),k.current=()=>q(``),A.current=async(e,t)=>{if(Ct(t)){T(null),await q(`Deletion was persisted, but inventory refresh failed: `);return}await B.close(`/admin/servers`),H.reset(),T(t),u(`servers`),await q(`Deletion succeeded, but refresh failed: `)};let se=(0,Y.useCallback)(()=>{F(),Or(E.current)&&(D.current=n.setTimeout(()=>{q(``).finally(se)},Dr(t.visibilityState)))},[F,t,q,n]),ce=(0,Y.useCallback)(async()=>{try{let t=await e.getSession();if(!t.authenticated){I(t.adminStatus??`loginRequired`);return}P({type:`sessionLoaded`,session:t}),await q(`Session loaded, but refresh failed: `,t)}catch(e){L(e)||P({type:`refreshFailed`,message:`Session check failed: ${Vr(e)}`})}finally{se()}},[e,P,L,I,q,se]),le=(0,Y.useCallback)(async t=>{if(!s){c(!0);try{let n=await e.login(t);P({type:`sessionLoaded`,session:n}),await q(`Login succeeded, but refresh failed: `,n)}catch(e){P({type:`loginFailed`,message:`Login failed: ${Vr(e)}`})}finally{c(!1),se()}}},[e,P,s,q,se]),ue=(0,Y.useCallback)(async(t,n,r=`mcpServers`)=>{let a=E.current.session;if(!a)return;let o=a.csrfToken,s=r===`mcpTemplates`?`${r}/${t}`:t;P({type:`mutationStarted`,serverId:s,action:n});try{let a=n===`enable`,c;if(r===`mcpTemplates`){let l={id:t,source:r},u=await e.previewConfiguredServerLifecycle({target:l,enabled:a,csrfToken:o});if(!await i({title:`${a?`Enable`:`Disable`} Template Server ${t}?`,message:u.preview.warnings.join(` `)||`Apply the source-qualified definition lifecycle change.`,confirmLabel:a?`Enable template`:`Disable template`,tone:a?`default`:`danger`,details:[{label:`Target`,value:u.preview.qualifiedId},{label:`Active instances`,value:String(u.preview.runtimeImpact.activeInstanceCount)},...u.preview.expressionReplacement.occurs?[{label:`Expression replacement`,value:`Context-rendered disabled expression becomes literal true.`}]:[],{label:`Re-enable behavior`,value:`Future matching requests create instances lazily.`}]})){P({type:`mutationFailed`,serverId:s,action:n,message:`Lifecycle change cancelled.`});return}let d=await e.applyConfiguredServerLifecycle({target:l,enabled:a,csrfToken:o,previewFingerprint:u.preview.previewFingerprint,idempotencyKey:He(u.preview.qualifiedId,a)});d.result.configChange.reload.status===`failed`?c=`Lifecycle configuration was saved, but runtime reload failed. Recovery is required.`:d.result.configChange.reload.status===`runtime_not_running`?c=`Lifecycle configuration was saved, but the runtime is not running. Recovery is required.`:d.result.configChange.reload.status===`reload_disabled`?c=`Lifecycle configuration was saved, but runtime reload is disabled. Recovery is required.`:!a&&!d.result.runtimeImpact.retirementObserved&&(c=`Lifecycle configuration was saved, but Template instance retirement was not confirmed. Recovery is required.`)}else await e.setConfiguredServerEnabled({name:t,enabled:a,csrfToken:o});if(!G(o))return;await q(c?`Lifecycle was persisted, but inventory refresh failed: `:``),P(c?{type:`mutationFailed`,serverId:s,action:n,message:c}:{type:`mutationSucceeded`,serverId:s,action:n})}catch(e){if(!G(o))return;L(e)||P({type:`mutationFailed`,serverId:s,action:n,message:`Server ${n} failed: ${Vr(e)}`})}},[e,i,P,L,G,q]),de=(0,Y.useCallback)(async(t,r)=>{if(ee.current)return;let i=E.current.session;if(!i)return;ee.current=!0;let a=N.current+1;N.current=a;let o=i.csrfToken;f({serviceId:t,action:r}),h(null);try{let i=r===`authorize`?await e.authorizeOAuthService({serviceId:t,csrfToken:o}):await e.restartOAuthService({serviceId:t,csrfToken:o});if(!G(o))return;h({kind:`success`,message:`${r===`authorize`?`Authorization`:`Authorization restart`} started. Opening the provider.`}),n.location?.assign(i.redirectUrl)}catch(e){if(!G(o))return;L(e)||h({kind:`error`,message:Vr(e)})}finally{N.current===a&&(ee.current=!1,G(o)&&f(null))}},[e,L,G,n]),fe=(0,Y.useCallback)(async()=>{let t=E.current.session?.csrfToken;try{t&&await e.logout(t)}finally{F(),ne(),P({type:`logoutSucceeded`}),T(null)}},[e,F,P,ne]),pe=(0,Y.useCallback)(async(e,t)=>{if(!navigator.clipboard?.writeText)throw Error(`clipboard_unavailable`);await navigator.clipboard.writeText(t)},[]);return(0,Y.useEffect)(()=>(ce(),F),[F,ce]),(0,Y.useEffect)(()=>{let e=()=>se();return t.addEventListener?.(`visibilitychange`,e),()=>t.removeEventListener?.(`visibilitychange`,e)},[t,se]),{state:a,loginBusy:s,login:le,logout:fe,refresh:()=>q(`Manual refresh failed: `),navigation:{route:l,navigate:oe},configuredServers:{create:{...V,open:async()=>{if(T(null),V.state.status!==`idle`){await V.open();return}await B.close(`/admin/servers`)&&await V.open()}},edit:{...B,open:async e=>{T(null),await B.open(e)}},delete:H,deletionNotice:w,dismissDeletionNotice:()=>T(null),mutate:ue,copy:pe},oauth:{busy:d,callbackFeedback:p,operationFeedback:m,operate:de},logs:U,presets:{items:g,targets:v,revision:b,busy:S,load:K,preview:re,save:ie,delete:ae},instructions:W}}function Gr(e){return e===`create`?`Create`:e===`duplicate`?`Duplicate`:`Update`}function Kr(e){return e===`/admin/servers`||e.startsWith(`/admin/servers/`)?`servers`:e===`/admin/oauth`||e.startsWith(`/admin/oauth/`)?`oauth`:e===`/admin/audit`||e.startsWith(`/admin/audit/`)?`audit`:e.startsWith(`/admin/presets`)?`presets`:e.startsWith(`/admin/instructions`)?`instructions`:e.startsWith(`/admin/logs`)?`logs`:e.startsWith(`/admin/about`)?`about`:`dashboard`}function qr(e){return e===`dashboard`?`/admin`:`/admin/${e}`}function Jr(e){let t=new URLSearchParams(e);if(t.get(`success`)===`1`)return{kind:`success`,message:`OAuth authorization completed.`};let n=t.get(`error`);return n?{kind:`error`,message:Object.hasOwn(Br,n)?Br[n]:`OAuth authorization did not complete.`}:null}var Yr=s({primaryColor:`conduit`,defaultRadius:`sm`,fontFamily:`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,headings:{fontFamily:`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,fontWeight:`760`},defaultGradient:{from:`conduit.7`,to:`conduit.5`,deg:90},colors:{conduit:[`#eef7f4`,`#d7eee7`,`#acdccc`,`#7fc8ae`,`#59b393`,`#3a9d7b`,`#2c7f65`,`#246653`,`#1d5244`,`#123229`]}}),Xr=document.querySelector(`#admin-root`),Zr=a({key:`1mcp-admin-color-scheme`});if(!Xr)throw Error(`Admin Console root element was not found`);(0,Oe.createRoot)(Xr).render((0,X.jsx)(i,{theme:Yr,defaultColorScheme:`auto`,colorSchemeManager:Zr,children:(0,X.jsx)(Hr,{api:Ie()})}));export{Un as t};