@profoundlogic/coderflow-server 0.5.0 → 0.5.1

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 (185) hide show
  1. package/README.md +15 -163
  2. package/dist/README.md +15 -163
  3. package/dist/base-image/agent-wrapper.sh +1 -1
  4. package/dist/capture-screenshot.mjs +34 -0
  5. package/dist/coder-server.js +1 -1
  6. package/dist/config/cli-models.json +4 -3
  7. package/dist/config.js +1 -1
  8. package/dist/lib/agent-keepalive.js +1 -1
  9. package/dist/lib/agent-models.js +1 -1
  10. package/dist/lib/api-keys.js +1 -1
  11. package/dist/lib/apiKeys.js +1 -1
  12. package/dist/lib/app-server-ports.js +1 -1
  13. package/dist/lib/auto-judge.js +1 -1
  14. package/dist/lib/automation-service.js +1 -1
  15. package/dist/lib/basic-auth.js +1 -1
  16. package/dist/lib/bindings.js +1 -1
  17. package/dist/lib/build-history.js +1 -1
  18. package/dist/lib/build-output-service.js +1 -1
  19. package/dist/lib/build-scheduler.js +1 -1
  20. package/dist/lib/build-service.js +1 -1
  21. package/dist/lib/ca-certificates.js +1 -1
  22. package/dist/lib/claude-oauth-refresh.js +1 -1
  23. package/dist/lib/cli/build.js +1 -1
  24. package/dist/lib/cli/cleanup-users.js +1 -0
  25. package/dist/lib/cli/config-command.js +1 -1
  26. package/dist/lib/cli/config.js +1 -1
  27. package/dist/lib/cli/create-user.js +1 -1
  28. package/dist/lib/cli/grant-admin.js +1 -0
  29. package/dist/lib/cli/init.js +1 -1
  30. package/dist/lib/cli/jira.js +1 -1
  31. package/dist/lib/cli/license.js +1 -1
  32. package/dist/lib/cli/list-roles.js +1 -0
  33. package/dist/lib/cli/list-users.js +1 -0
  34. package/dist/lib/cli/server-manager.js +1 -1
  35. package/dist/lib/cli/set-password.js +1 -0
  36. package/dist/lib/config-migration.js +1 -1
  37. package/dist/lib/container-credential-sync.js +1 -1
  38. package/dist/lib/container-tokens.js +1 -1
  39. package/dist/lib/data-dir.js +1 -1
  40. package/dist/lib/deployment-history.js +1 -1
  41. package/dist/lib/deployment-service.js +1 -1
  42. package/dist/lib/docker-utils.js +1 -1
  43. package/dist/lib/email.js +1 -1
  44. package/dist/lib/emailTemplates.js +1 -1
  45. package/dist/lib/entitlement.js +1 -1
  46. package/dist/lib/external-connections.js +1 -1
  47. package/dist/lib/fetch-utils.js +1 -1
  48. package/dist/lib/git-commit-details-route.js +1 -1
  49. package/dist/lib/git-history-diff-guardrails.js +1 -1
  50. package/dist/lib/git-provider-service.js +1 -1
  51. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  52. package/dist/lib/git-provider-setup/index.js +1 -1
  53. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  54. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  55. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  56. package/dist/lib/git-providers/github-app-provider.js +1 -1
  57. package/dist/lib/git-providers/index.js +1 -1
  58. package/dist/lib/git-providers/provider-factory.js +1 -1
  59. package/dist/lib/git-providers/provider-interface.js +1 -1
  60. package/dist/lib/github-urls.js +1 -1
  61. package/dist/lib/group-objective-linking.js +1 -1
  62. package/dist/lib/ibmi-sync.js +1 -0
  63. package/dist/lib/jira-client.js +1 -1
  64. package/dist/lib/judge-blinding.js +1 -1
  65. package/dist/lib/logger.js +1 -1
  66. package/dist/lib/migration-to-scoped-rbac.js +1 -1
  67. package/dist/lib/model-fetcher.js +1 -1
  68. package/dist/lib/notifications.js +1 -1
  69. package/dist/lib/objective-context.js +1 -1
  70. package/dist/lib/oidc-auth.js +1 -1
  71. package/dist/lib/oidc-device-flow.js +1 -1
  72. package/dist/lib/passwordTokens.js +1 -1
  73. package/dist/lib/permission-resolver.js +1 -1
  74. package/dist/lib/pin-cascade.js +1 -1
  75. package/dist/lib/provider-accounts.js +1 -1
  76. package/dist/lib/provider-oauth.js +1 -1
  77. package/dist/lib/provider-profile.js +1 -1
  78. package/dist/lib/provider-token-refresh.js +1 -1
  79. package/dist/lib/rbac-user-state.js +1 -1
  80. package/dist/lib/request-url.js +1 -1
  81. package/dist/lib/rewind.js +1 -1
  82. package/dist/lib/role-definitions.js +1 -1
  83. package/dist/lib/roles.js +1 -1
  84. package/dist/lib/secrets.js +1 -1
  85. package/dist/lib/setup-repo-git-auth.js +1 -1
  86. package/dist/lib/state-capture.js +1 -1
  87. package/dist/lib/static-files.js +1 -1
  88. package/dist/lib/task-name-format.js +1 -1
  89. package/dist/lib/task-name-generator.js +1 -1
  90. package/dist/lib/task-source-metadata.js +1 -1
  91. package/dist/lib/teams.js +1 -1
  92. package/dist/lib/user-git-oauth.js +1 -1
  93. package/dist/lib/user-git-tokens.js +1 -1
  94. package/dist/lib/users.js +1 -1
  95. package/dist/middleware/requireAuth.js +1 -1
  96. package/dist/middleware/requireInit.js +1 -1
  97. package/dist/middleware/requirePermission.js +1 -1
  98. package/dist/package.json +1 -1
  99. package/dist/playwright.config.js +1 -1
  100. package/dist/routes/apiKeys.js +1 -1
  101. package/dist/routes/auth-oidc.js +1 -1
  102. package/dist/routes/auth.js +1 -1
  103. package/dist/routes/automations.js +1 -1
  104. package/dist/routes/bindings.js +1 -1
  105. package/dist/routes/build.js +1 -1
  106. package/dist/routes/containers.js +1 -1
  107. package/dist/routes/deploy-task.js +1 -1
  108. package/dist/routes/environment-management.js +1 -1
  109. package/dist/routes/environments.js +1 -1
  110. package/dist/routes/external-skills.js +1 -1
  111. package/dist/routes/git-credentials.js +1 -1
  112. package/dist/routes/git-oauth.js +1 -1
  113. package/dist/routes/git-provider-setup.js +1 -1
  114. package/dist/routes/health.js +1 -1
  115. package/dist/routes/jira.js +1 -1
  116. package/dist/routes/objective-management.js +1 -1
  117. package/dist/routes/password.js +1 -1
  118. package/dist/routes/prompt.js +1 -1
  119. package/dist/routes/provider-auth.js +1 -1
  120. package/dist/routes/qa.js +1 -1
  121. package/dist/routes/roles.js +1 -1
  122. package/dist/routes/settings.js +1 -1
  123. package/dist/routes/skill-management.js +1 -1
  124. package/dist/routes/skills.js +1 -1
  125. package/dist/routes/tasks.js +1 -1
  126. package/dist/routes/teams.js +1 -1
  127. package/dist/routes/templates.js +1 -1
  128. package/dist/routes/test-task.js +1 -1
  129. package/dist/routes/test.js +1 -1
  130. package/dist/routes/users.js +1 -1
  131. package/dist/routes/visualizations.js +1 -1
  132. package/dist/scripts/create-user.js +1 -1
  133. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  134. package/dist/scripts/sync_to_ibmi.sh +204 -0
  135. package/dist/start.js +1 -1
  136. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  137. package/dist/web-ui/public/activity-feed.js +1 -1
  138. package/dist/web-ui/public/activity-formatters.js +1 -1
  139. package/dist/web-ui/public/agent-event-parser.js +1 -1
  140. package/dist/web-ui/public/app.js +1 -1
  141. package/dist/web-ui/public/approve-dialog.js +1 -1
  142. package/dist/web-ui/public/automation-links.js +1 -1
  143. package/dist/web-ui/public/automation-schedule.js +1 -1
  144. package/dist/web-ui/public/comments-widget.js +1 -1
  145. package/dist/web-ui/public/diff-utils.js +1 -1
  146. package/dist/web-ui/public/docs/admin/environments.md +1 -0
  147. package/dist/web-ui/public/docs/tasks/approval-and-deployment.md +36 -0
  148. package/dist/web-ui/public/environments.html +1 -1
  149. package/dist/web-ui/public/environments.js +1 -1
  150. package/dist/web-ui/public/feedback-widget.js +1 -1
  151. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  152. package/dist/web-ui/public/git-history.js +1 -1
  153. package/dist/web-ui/public/git-status.js +1 -1
  154. package/dist/web-ui/public/index.html +2 -2
  155. package/dist/web-ui/public/index.js +1 -1
  156. package/dist/web-ui/public/login.js +1 -1
  157. package/dist/web-ui/public/markdown-editor.js +1 -1
  158. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  159. package/dist/web-ui/public/modal-maximize.js +1 -1
  160. package/dist/web-ui/public/notifications.js +1 -1
  161. package/dist/web-ui/public/pr-dialog.js +1 -1
  162. package/dist/web-ui/public/roles.html +3 -2
  163. package/dist/web-ui/public/roles.js +1 -1
  164. package/dist/web-ui/public/server-health.js +1 -1
  165. package/dist/web-ui/public/settings.css +3 -2
  166. package/dist/web-ui/public/settings.html +0 -1
  167. package/dist/web-ui/public/settings.js +1 -1
  168. package/dist/web-ui/public/setup-password.js +1 -1
  169. package/dist/web-ui/public/skills.js +1 -1
  170. package/dist/web-ui/public/sse-client.js +1 -1
  171. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  172. package/dist/web-ui/public/styles.css +39 -12
  173. package/dist/web-ui/public/task.html +56 -1
  174. package/dist/web-ui/public/task.js +1 -1
  175. package/dist/web-ui/public/teams.html +76 -81
  176. package/dist/web-ui/public/teams.js +1 -1
  177. package/dist/web-ui/public/terminal.js +1 -1
  178. package/dist/web-ui/public/theme.js +1 -1
  179. package/dist/web-ui/public/users.html +12 -11
  180. package/dist/web-ui/public/users.js +1 -1
  181. package/dist/web-ui/public/variant-grouping.js +1 -1
  182. package/package.json +1 -1
  183. package/dist/lib/cli/migrate-rbac.js +0 -1
  184. package/dist/lib/scoped-rbac-migration-runner.js +0 -1
  185. package/dist/scripts/migrate-to-scoped-rbac.js +0 -2
@@ -1 +1 @@
1
- const _0x185692=_0x1d75;function _0x4d46(){const _0x56b44c=['otbSshvZswm','zgLZCgXHEq','z2v0rwXLBwvUDej5swq','rMfPBgvKihDOAwXLia','Aw5JBhvKzq','zxHWyw5Kzwq','Dg90ywW','y3jLyxrLrwXLBwvUDa','BwLU','ywrK','yxbWBgLJyxrPB24VANnVBG','C2vYDMvYlxbYDw5LlwrVy2TLCG','mJG4n2fpBwnMta','rxnJyxbL','yM9KEq','Chj1BMveB2nRzxjszxnVDxjJzxm','mJe2ntiXnM5ty3PSBq','ignVBxbSzxrLza','mJeYmZqWDev0B3f2','nuL3wwXmra','CxvLCNLtzwXLy3rVCG','DM9SDw1LCW','CMvTB3zLrxzLBNrmAxn0zw5LCG','B3bLBLnLCNzLCKHLywX0Ae1VzgfS','y3jPDgLJywW','C3rHDhvZlxDHCM5PBMC','zg9JA2vYlxn0B3jHz2uTAw1Hz2vZ','C2vYDMvYlxjLBw92zs1ZDg9WCgvK','Aw5MBW','CgfYzw50rwXLBwvUDa','y2XHC3nmAxn0','yxjPys1LEhbHBMrLza','uMvTB3zPBMCGC3rVChbLzcbJB250ywLUzxjZ','ovLcu3HJAG','Aw5Uzxjive1m','mtv0r3L1CMW','Dgv4DenVBNrLBNq','C2vYDMvYlwHLywX0Ac1YzwzYzxnO','lM1VzgfSlw92zxjSyxK','mJe0nJG1mJrvB3LowMi','C2vYDMvYlwHLywX0Ac1TB2rHBa','A2v5zg93BG','mJy4mdaZog16zvfRsW','C3rHDhvZvgv4Da','C2vYDMvYlwHLywX0Ac1LCNjVCG','zgLZAW','zgLZywjSzwq','r0vu','BwvTB3j5lxvZywDL','BwvZC2fNzq','C2vYDMvYlwHLywX0Ac1Hy3rPB24TC3rHDhvZ','CMvTB3zL','C3rHDhvZ','BwvTB3j5','zg9JA2vYlxn0B3jHz2uTChjVz3jLC3m','nJa1nJq2mffIwermDa','D2fYBMLUzW','zg9JA2vYu3rVCMfNzq','zg9JA2vYlwnVBNrHAw5LCNm','BwvTB3j5lxbYB2DYzxnZ','l2HLywX0Ac9TzxrYAwnZ','zgLZAY1WCM9NCMvZCW','C3vJy2vZCW','rMfPBgvKihrVigXVywqGC2vYDMvYig1LDhjPy3m6ia','zM9YrwfJAa','Dg9Nz2XL','y2XLyw51Cc10B2DNBgu','y3b1','B25JBgLJAW','yxzHAwXHyMXLrgLZCgXHEq','y3b1lxbYB2DYzxnZ','y29UDgfPBMvYCW','C3rHDhvZlwnYAxrPy2fS','C3r5Bgu','ywrKrxzLBNrmAxn0zw5LCG','AgLKzgvU','nJa4ntC1oeDhzwXqza','uhj1BMLUzYbeB2nRzxiGCMvZB3vYy2vZ','zgL2','CMvTB3zLu3rVChbLzenVBNrHAw5LCNm','zg9JA2vYlxn0B3jHz2uTDg90ywW','C2vYDMvYlwHLywX0Ac1JB250zw50','cJXKAxyGAwq9iNnLCNzLCI1OzwfSDgGTBw9KywWIignSyxnZpsjTB2rHBciGAgLKzgvUpGOGidXKAxyGy2XHC3m9iM1VzgfSlw92zxjSyxKIpJWVzgL2pGOGidXKAxyGy2XHC3m9iM1VzgfSlwnVBNrLBNqIpGOGicaGpgrPDIbJBgfZCZ0IBw9KywWTAgvHzgvYiJ4kicaGicaGpgGYpLnLCNzLCIbizwfSDgG8l2GYpGOGicaGica8yNv0Dg9Uihr5Cgu9iMj1DhrVBIiGy2XHC3m9iM1VzgfSlwnSB3nLiIbPzd0IC2vYDMvYlwHLywX0Ac1JBg9ZzsiGyxjPys1SywjLBd0Iq2XVC2uIpGOGicaGicaGidXZDMCGD2LKDgG9iJi0iIbOzwLNAhq9iJi0iIb2Awv3qM94psiWidaGmJqGmJqIigzPBgW9iM5VBMuIihn0CM9Rzt0Iy3vYCMvUDenVBg9YiIbZDhjVA2uTD2LKDgG9iJiIihn0CM9Rzs1SAw5Ly2fWpsjYB3vUzciGC3rYB2TLlwXPBMvQB2LUpsjYB3vUzci+cIaGicaGicaGica8BgLUzsb4mt0ImtGIihKXpsi2iIb4mJ0InIiGEti9iJe4iJ48l2XPBMu+cIaGicaGicaGica8BgLUzsb4mt0InIiGEte9iJyIihGYpsiXociGEti9iJe4iJ48l2XPBMu+cIaGicaGicaGpc9ZDMC+cIaGicaGidWVyNv0Dg9UpGOGicaGpc9KAxy+cIaGica8zgL2ignSyxnZpsjTB2rHBc1IB2r5iJ4kicaGicaGpgrPDIbPzd0IC2vYDMvYlwHLywX0Ac1SB2fKAw5NiIbJBgfZCZ0IBg9HzgLUzYi+tg9HzgLUzYbZzxj2zxiGBwv0CMLJCZWVzgL2pGOGicaGica8zgL2igLKpsjZzxj2zxiTAgvHBhrOlwvYCM9YiIbJBgfZCZ0IzxjYB3iTBwvZC2fNzsiGAgLKzgvUpJWVzgL2pGOGicaGica8zgL2igLKpsjZzxj2zxiTAgvHBhrOlwnVBNrLBNqIigHPzgrLBJ4kicaGicaGica8zgL2ignSyxnZpsjOzwfSDgGTBwv0CMLJCYi+cIaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTy2fYzci+cIaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1Py29UiJ7WN5k7pc9KAxy+cIaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1KzxrHAwXZiJ4kicaGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTBgfIzwWIpKnqvsbvC2fNztWVzgL2pGOGicaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY12ywX1zsiGAwq9iMnWDs11C2fNzsi+ltWVzgL2pGOGicaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1WCM9NCMvZCYiGCM9Szt0IChjVz3jLC3nIyxiIigfYAweTBgfIzwW9iKnqvsb1C2fNzsiGyxjPys12ywX1zw1PBJ0ImciGyxjPys12ywX1zw1HEd0ImtaWiJ4kicaGicaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1WCM9NCMvZCY1MAwXSiIbPzd0Iy3b1lxbYB2DYzxnZiJ48l2rPDJ4kicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGpc9KAxy+cIaGicaGicaGica8l2rPDJ4kicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1JyxjKiJ4kicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwLJB24IpVcFP6a8l2rPDJ4kicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwrLDgfPBhmIpGOGicaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1SywjLBci+twvTB3j5ifvZywDLpc9KAxy+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxzHBhvLiIbPzd0IBwvTB3j5lxvZywDLiJ4Tpc9KAxy+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxbYB2DYzxnZiIbYB2XLpsjWCM9NCMvZC2jHCIiGyxjPys1SywjLBd0ItwvTB3j5ihvZywDLiIbHCMLHlxzHBhvLBwLUpsiWiIbHCMLHlxzHBhvLBwf4psiXmdaIpGOGicaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxbYB2DYzxnZlwzPBgWIigLKpsjTzw1VCNKTChjVz3jLC3mIpJWVzgL2pGOGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGidWVzgL2pGOGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwnHCMqIpGOGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTAwnVBIi+8j+sVJWVzgL2pGOGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTzgv0ywLSCYi+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwXHyMvSiJ5eAxnRifvZywDLpc9KAxy+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxzHBhvLiIbPzd0IzgLZAY11C2fNzsi+ltWVzgL2pGOGicaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1WCM9NCMvZCYiGCM9Szt0IChjVz3jLC3nIyxiIigfYAweTBgfIzwW9iKrPC2SGDxnHz2uIigfYAweTDMfSDwvTAw49iJaIigfYAweTDMfSDwvTyxG9iJeWmci+cIaGicaGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTChjVz3jLC3mTzMLSBciGAwq9iMrPC2STChjVz3jLC3mIpJWVzgL2pGOGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGidWVzgL2pGOGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwnHCMqIpGOGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTAwnVBIi+8j+qSZWVzgL2pGOGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTzgv0ywLSCYi+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwXHyMvSiJ5eB2nRzxiGq29UDgfPBMvYCZWVzgL2pGOGicaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY12ywX1zsiGAwq9iMrVy2TLCI1JB250ywLUzxjZiJ4Tpc9KAxy+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxbYB2DYzxnZiIbYB2XLpsjWCM9NCMvZC2jHCIiGyxjPys1SywjLBd0IuNvUBMLUzYbJB250ywLUzxjZihjHDgLViIbHCMLHlxzHBhvLBwLUpsiWiIbHCMLHlxzHBhvLBwf4psiXmdaIpGOGicaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxbYB2DYzxnZlwzPBgWIigLKpsjKB2nRzxiTChjVz3jLC3mIpJWVzgL2pGOGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGidWVzgL2pGOGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwnHCMqGBwv0CMLJlwnHCMqTD2LKzsiGAwq9iMrVy2TLCI1ZDg9YywDLlwnHCMqIpGOGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTAwnVBIi+8j+tPJWVzgL2pGOGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTzgv0ywLSCYi+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwXHyMvSiJ5eB2nRzxiGu3rVCMfNztWVzgL2pGOGicaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY12ywX1zsiGAwq9iMrVy2TLCI1ZDg9YywDLlxrVDgfSiJ4Tpc9KAxy+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxbYB2DYzxnZiIbPzd0Izg9JA2vYlxn0B3jHz2uTChjVz3jLC3mTD3jHCciGCM9Szt0IChjVz3jLC3nIyxiIigfYAweTBgfIzwW9iKrVy2TLCIbZDg9YywDLihvZywDLiIbHCMLHlxzHBhvLBwLUpsiWiIbHCMLHlxzHBhvLBwf4psiXmdaIpGOGicaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxbYB2DYzxnZlwzPBgWIigLKpsjKB2nRzxiTC3rVCMfNzs1WCM9NCMvZCYi+pc9KAxy+cIaGicaGicaGicaGicaGpc9KAxy+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxn1yIiGAwq9iMrVy2TLCI1ZDg9YywDLlwf2ywLSywjSzsi+pc9KAxy+cIaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlxn1yIiGAwq9iMrVy2TLCI1ZDg9YywDLlxjLy2XHAw1HyMXLiJ48l2rPDJ4kicaGicaGicaGicaGica8zgL2ignSyxnZpsjKB2nRzxiTC3rVCMfNzs1ICMvHA2rVD24IigLKpsjKB2nRzxiTC3rVCMfNzs1ICMvHA2rVD24IpGOGicaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IC3rVCMfNzs1PDgvTiJ4kicaGicaGicaGicaGicaGicaGphnWyw4Gy2XHC3m9iNn0B3jHz2uTBgfIzwWIpKLTywDLCZO8l3nWyw4+cIaGicaGicaGicaGicaGicaGidXZCgfUignSyxnZpsjZDg9YywDLlxzHBhvLiIbPzd0Izg9JA2vYlxn0B3jHz2uTAw1Hz2vZiJ4Tpc9ZCgfUpGOGicaGicaGicaGicaGicaGpc9KAxy+cIaGicaGicaGicaGicaGica8zgL2ignSyxnZpsjZDg9YywDLlwL0zw0IpGOGicaGicaGicaGicaGicaGica8C3bHBIbJBgfZCZ0IC3rVCMfNzs1SywjLBci+q29UDgfPBMvYCZO8l3nWyw4+cIaGicaGicaGicaGicaGicaGidXZCgfUignSyxnZpsjZDg9YywDLlxzHBhvLiIbPzd0Izg9JA2vYlxn0B3jHz2uTy29UDgfPBMvYCYi+ltWVC3bHBJ4kicaGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0IC3rVCMfNzs1PDgvTiJ4kicaGicaGicaGicaGicaGicaGphnWyw4Gy2XHC3m9iNn0B3jHz2uTBgfIzwWIpLzVBhvTzxm6pc9ZCgfUpGOGicaGicaGicaGicaGicaGica8C3bHBIbJBgfZCZ0IC3rVCMfNzs12ywX1zsiGAwq9iMrVy2TLCI1ZDg9YywDLlxzVBhvTzxmIpI08l3nWyw4+cIaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGidXKAxyGy2XHC3m9iNn0B3jHz2uTAxrLBsi+cIaGicaGicaGicaGicaGicaGidXZCgfUignSyxnZpsjZDg9YywDLlwXHyMvSiJ5cDwLSzcbdywnOztO8l3nWyw4+cIaGicaGicaGicaGicaGicaGidXZCgfUignSyxnZpsjZDg9YywDLlxzHBhvLiIbPzd0Izg9JA2vYlxn0B3jHz2uTyNvPBgrJywnOzsi+ltWVC3bHBJ4kicaGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGidWVzgL2pGOGicaGicaGicaGpgrPDIbJBgfZCZ0IBwv0CMLJlwnHCMqIpGOGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTAwnVBIi+4O+X77Ippc9KAxy+cIaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1KzxrHAwXZiJ4kicaGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTBgfIzwWIpLnLCNzLCIbvChrPBwu8l2rPDJ4kicaGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTDMfSDwuIigLKpsjZzxj2zxiTDxb0Aw1LiJ4Tpc9KAxy+cIaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGpc9KAxy+cIaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTy2fYzci+cIaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1Py29UiJ7WN5oHpc9KAxy+cIaGicaGicaGicaGidXKAxyGy2XHC3m9iM1LDhjPyY1KzxrHAwXZiJ4kicaGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTBgfIzwWIpLvZzxiGu2vZC2LVBNm8l2rPDJ4kicaGicaGicaGicaGica8zgL2ignSyxnZpsjTzxrYAwmTDMfSDwuIigLKpsjHy3rPDMuTC2vZC2LVBNmIpI08l2rPDJ4kicaGicaGicaGicaGpc9KAxy+cIaGicaGicaGica8l2rPDJ4kicaGicaGica8l2rPDJ4kicaGicaGica8zgL2ignSyxnZpsjOzwfSDgGTywn0Aw9UCYbJB2XSyxbZAwjSzs1Zzwn0Aw9UiIbPzd0Iy2XLyw51Cc1Zzwn0Aw9UiJ4kicaGicaGicaGidXIDxr0B24GDhLWzt0IyNv0Dg9UiIbJBgfZCZ0IAgvHBhrOlwfJDgLVBNmTAgvHzgvYignVBgXHChnPyMXLlxrVz2DSzsiGAwq9iMnSzwfUDxaTDg9Nz2XLiIbHCMLHlwv4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BgW9iM5VBMuIihn0CM9Rzt0Iy3vYCMvUDenVBg9YiIbZDhjVA2uTD2LKDgG9iJiIihn0CM9Rzs1SAw5Ly2fWpsjYB3vUzciGC3rYB2TLlwXPBMvQB2LUpsjYB3vUzci+cIaGicaGicaGicaGicaGicaGicaGphbHDgGGzd0ItteYidjmmIa3BdeWiduGmtaTns0Xmc01EIi+pc9WyxrOpGOGicaGicaGicaGicaGicaGicaGidXWyxrOigq9iK0Yide3BdeWiduGmtaTnsi+pc9WyxrOpGOGicaGicaGicaGicaGicaGicaGidXWyxrOigq9iK0YideYBdeWiduGmtaTnsi+pc9WyxrOpGOGicaGicaGicaGicaGicaGica8l3n2zZ4kicaGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0Iy2XLyw51Cc1JyxjKlwnVBNrLBNqIpGOGicaGicaGicaGicaGicaGica8zgL2ignSyxnZpsjJBgvHBNvWlwnHCMqTDgL0BguIpKrVy2TLCIbtExn0zw0Guhj1BMu8l2rPDJ4kicaGicaGicaGicaGicaGicaGpgrPDIbJBgfZCZ0Iy2XLyw51Cc1JyxjKlwrLC2nYAxb0Aw9UiJ5szw1VDMuGywXSihn0B3bWzwqGy29UDgfPBMvYCYWGDw51C2vKig5LDhDVCMTZlcbKyw5NBgLUzYbPBwfNzxmSigfUzcbIDwLSzcbJywnOzs4GrNjLzxmGC2LNBMLMAwnHBNqGzgLZAYbZCgfJzs48l2rPDJ4kicaGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGicaGicaGpgj1DhrVBIb0ExbLpsjIDxr0B24IignSyxnZpsjIDg4TzgfUz2vYignSzwfUDxaTy2fYzc1IDg4IigLKpsjZzxj2zxiTChj1BMuTzg9JA2vYiJ5qCNvUztWVyNv0Dg9UpGOGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGidWVzgL2pGOGicaGicaGidWVzgL2pGOGicaGica8l2rPDJ4kicaGidWVzgL2pGOGicaGpgrPDIbJBgfZCZ0IBw9KywWTywn0Aw9UCYi+cIaGicaGidXIDxr0B24GDhLWzt0IyNv0Dg9UiIbPzd0IC2vYDMvYlwHLywX0Ac1YzwzYzxnOiIbJBgfZCZ0IyNrUlxnLy29UzgfYEsi+uMvMCMvZAdWVyNv0Dg9UpGOGicaGica8yNv0Dg9Uihr5Cgu9iMj1DhrVBIiGAwq9iNnLCNzLCI1OzwfSDgGTB2SIignSyxnZpsjIDg4TChjPBwfYEsi+t0S8l2j1DhrVBJ4kicaGidWVzgL2pGOGidWVzgL2pGO8l2rPDJ4k','C2vYDMvYlwHLywX0Ac1SB2fKAw5N','zxjYB3i','D2LKDgG','AxngAw5PDgu','Dxb0Aw1L','zMLYC3rfBgvTzw50q2HPBgq','Dw5KzwzPBMvK','zg9JA2vYlxn0B3jHz2uTyxzHAwXHyMXL','C3rHDhvZlw9R','zMfSC2u','rMfPBgvKihrVigXVywqGC2vYDMvYigHLywX0AcbTzxrYAwnZoG','zg9JA2vY','C2v0qxr0CMLIDxrL','C2vYDMvYlwHLywX0Ac1JBg9Zzq','yxjPys12ywX1zw5VDW','yxbWzw5Kq2HPBgq','tg9HzgLUzYbZzxj2zxiGBwv0CMLJCW','CgvYy2vUDa','y3b1lxvZywDL','C2vZC2LVBNm','y2XLyw51Cc1JB250zw50'];_0x4d46=function(){return _0x56b44c;};return _0x4d46();}(function(_0x3b1b35,_0x34c04a){const _0x4bf0a3=_0x1d75,_0x40539e=_0x3b1b35();while(!![]){try{const _0x285f4d=parseInt(_0x4bf0a3(0x204))/0x1*(-parseInt(_0x4bf0a3(0x1f8))/0x2)+-parseInt(_0x4bf0a3(0x1b3))/0x3*(-parseInt(_0x4bf0a3(0x1a2))/0x4)+-parseInt(_0x4bf0a3(0x1a3))/0x5*(parseInt(_0x4bf0a3(0x1ba))/0x6)+-parseInt(_0x4bf0a3(0x1dc))/0x7+-parseInt(_0x4bf0a3(0x1a0))/0x8*(-parseInt(_0x4bf0a3(0x1b1))/0x9)+-parseInt(_0x4bf0a3(0x1c7))/0xa+parseInt(_0x4bf0a3(0x1b7))/0xb;if(_0x285f4d===_0x34c04a)break;else _0x40539e['push'](_0x40539e['shift']());}catch(_0x3dd8d3){_0x40539e['push'](_0x40539e['shift']());}}}(_0x4d46,0x6a7a5));import{API}from'./app.js';let modalInjected=![];const SERVER_HEALTH_MODAL_HTML=_0x185692(0x1e2);function ensureModalExists(){const _0x38eabe=_0x185692;if(modalInjected||document[_0x38eabe(0x1fa)](_0x38eabe(0x1b8)))return;const _0x2d7cd6=document[_0x38eabe(0x1ff)](_0x38eabe(0x1de));_0x2d7cd6[_0x38eabe(0x1b2)]=SERVER_HEALTH_MODAL_HTML,document[_0x38eabe(0x19e)][_0x38eabe(0x1f2)](_0x2d7cd6[_0x38eabe(0x1e8)]),modalInjected=!![];}function clampPercent(_0x537ea9){const _0x4b4f39=_0x185692;if(!Number[_0x4b4f39(0x1e6)](_0x537ea9))return 0x0;return Math['max'](0x0,Math[_0x4b4f39(0x200)](0x64,Math['round'](_0x537ea9)));}function _0x1d75(_0x495f1e,_0x2f93d4){_0x495f1e=_0x495f1e-0x19e;const _0x4d468f=_0x4d46();let _0x1d7591=_0x4d468f[_0x495f1e];if(_0x1d75['eQOkAM']===undefined){var _0x277c23=function(_0x56e00d){const _0x1f2608='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2d7cd6='',_0x537ea9='';for(let _0x5801d2=0x0,_0x43540a,_0x414dd7,_0x226b68=0x0;_0x414dd7=_0x56e00d['charAt'](_0x226b68++);~_0x414dd7&&(_0x43540a=_0x5801d2%0x4?_0x43540a*0x40+_0x414dd7:_0x414dd7,_0x5801d2++%0x4)?_0x2d7cd6+=String['fromCharCode'](0xff&_0x43540a>>(-0x2*_0x5801d2&0x6)):0x0){_0x414dd7=_0x1f2608['indexOf'](_0x414dd7);}for(let _0x180334=0x0,_0x41b68a=_0x2d7cd6['length'];_0x180334<_0x41b68a;_0x180334++){_0x537ea9+='%'+('00'+_0x2d7cd6['charCodeAt'](_0x180334)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x537ea9);};_0x1d75['KITGFC']=_0x277c23,_0x1d75['QCNugI']={},_0x1d75['eQOkAM']=!![];}const _0x35be99=_0x4d468f[0x0],_0x5084ef=_0x495f1e+_0x35be99,_0x58c1c1=_0x1d75['QCNugI'][_0x5084ef];return!_0x58c1c1?(_0x1d7591=_0x1d75['KITGFC'](_0x1d7591),_0x1d75['QCNugI'][_0x5084ef]=_0x1d7591):_0x1d7591=_0x58c1c1,_0x1d7591;}function setMetricProgress(_0x5801d2,_0x43540a,_0x414dd7='ok'){const _0x8b062d=_0x185692,_0x226b68=document[_0x8b062d(0x1fa)](_0x5801d2);if(!_0x226b68)return;const _0x180334=_0x226b68[_0x8b062d(0x1ad)],_0x41b68a=clampPercent(_0x43540a);_0x226b68[_0x8b062d(0x1d9)][_0x8b062d(0x1e5)]=_0x41b68a+'%',_0x226b68[_0x8b062d(0x1ae)][_0x8b062d(0x1c3)](_0x8b062d(0x1eb),_0x8b062d(0x1a9),_0x8b062d(0x1d8)),_0x226b68['classList']['add'](_0x414dd7==='critical'?_0x8b062d(0x1d8):_0x414dd7===_0x8b062d(0x1c8)?_0x8b062d(0x1a9):'status-ok'),_0x180334&&_0x180334[_0x8b062d(0x1ef)](_0x8b062d(0x1f1),String(_0x41b68a));}function statusFromPercent(_0x5754c0){const _0x24240a=_0x185692;if(_0x5754c0>=0x5a)return _0x24240a(0x1a8);if(_0x5754c0>=0x4b)return _0x24240a(0x1c8);return'ok';}async function loadServerHealthMetrics(){const _0x1555ef=_0x185692,_0x8c3342=document[_0x1555ef(0x1fa)]('server-health-loading'),_0x5ab850=document['getElementById'](_0x1555ef(0x1bc)),_0x3dc5dd=document[_0x1555ef(0x1fa)]('server-health-content');if(!_0x8c3342||!_0x5ab850||!_0x3dc5dd)return;_0x8c3342[_0x1555ef(0x1b4)]=_0x1555ef(0x1f3);try{const _0x4fb950=await fetch(_0x1555ef(0x1cc),{'method':_0x1555ef(0x1bf),'headers':{'Content-Type':_0x1555ef(0x202)},'credentials':_0x1555ef(0x1fc)});if(!_0x4fb950['ok'])throw new Error('Failed\x20to\x20load\x20metrics:\x20'+_0x4fb950[_0x1555ef(0x1bb)]);const _0x1c0815=await _0x4fb950['json']();document[_0x1555ef(0x1fa)](_0x1555ef(0x1f5))['textContent']=_0x1c0815[_0x1555ef(0x1d3)][_0x1555ef(0x1f9)],document['getElementById'](_0x1555ef(0x1c0))['textContent']=_0x1c0815['memory'][_0x1555ef(0x1f9)],document['getElementById']('disk-usage')[_0x1555ef(0x1b4)]=_0x1c0815[_0x1555ef(0x1bd)][_0x1555ef(0x1f9)],document[_0x1555ef(0x1fa)](_0x1555ef(0x1ca))[_0x1555ef(0x1b4)]=_0x1c0815[_0x1555ef(0x1ee)][_0x1555ef(0x1f9)],document[_0x1555ef(0x1fa)]('server-uptime')[_0x1555ef(0x1b4)]=_0x1c0815[_0x1555ef(0x1e7)][_0x1555ef(0x1f9)],document[_0x1555ef(0x1fa)]('active-sessions')[_0x1555ef(0x1b4)]=_0x1c0815[_0x1555ef(0x1f6)]['display'],setMetricProgress(_0x1555ef(0x1d6),_0x1c0815[_0x1555ef(0x1d3)][_0x1555ef(0x1f4)],statusFromPercent(_0x1c0815['cpu']['percent'])),setMetricProgress(_0x1555ef(0x1cb),_0x1c0815[_0x1555ef(0x1c5)][_0x1555ef(0x1f4)],statusFromPercent(_0x1c0815[_0x1555ef(0x1c5)][_0x1555ef(0x1f4)])),setMetricProgress(_0x1555ef(0x1cd),_0x1c0815[_0x1555ef(0x1bd)]['percent'],statusFromPercent(_0x1c0815[_0x1555ef(0x1bd)]['percent']));const _0x284476=_0x1c0815[_0x1555ef(0x1ee)][_0x1555ef(0x1fe)]>0x0?_0x1c0815[_0x1555ef(0x1ee)]['running']/_0x1c0815[_0x1555ef(0x1ee)]['total']*0x64:0x0;setMetricProgress('docker-progress',_0x284476);if(_0x1c0815['dockerStorage']){const _0x39db12=document['getElementById']('docker-storage-card');document[_0x1555ef(0x1fa)](_0x1555ef(0x1e0))[_0x1555ef(0x1b4)]=_0x1c0815['dockerStorage'][_0x1555ef(0x1f9)];const _0x591bfc=document[_0x1555ef(0x1fa)](_0x1555ef(0x1ea));_0x1c0815[_0x1555ef(0x1c9)][_0x1555ef(0x1d5)]?(_0x591bfc['textContent']=_0x1c0815['dockerStorage'][_0x1555ef(0x1d5)],_0x591bfc[_0x1555ef(0x1db)]=![]):_0x591bfc[_0x1555ef(0x1db)]=!![];document['getElementById']('docker-storage-reclaimable')[_0x1555ef(0x1b4)]=_0x1c0815['dockerStorage']['reclaimableDisplay'],document[_0x1555ef(0x1fa)](_0x1555ef(0x1aa))[_0x1555ef(0x1b4)]=_0x1c0815[_0x1555ef(0x1c9)]['images']['display'],document[_0x1555ef(0x1fa)]('docker-storage-containers')['textContent']=_0x1c0815[_0x1555ef(0x1c9)][_0x1555ef(0x1d7)][_0x1555ef(0x1f9)],document[_0x1555ef(0x1fa)]('docker-storage-volumes')['textContent']=_0x1c0815[_0x1555ef(0x1c9)][_0x1555ef(0x1a5)][_0x1555ef(0x1f9)],document['getElementById']('docker-storage-buildcache')[_0x1555ef(0x1b4)]=_0x1c0815[_0x1555ef(0x1c9)]['buildCache'][_0x1555ef(0x1f9)],setMetricProgress(_0x1555ef(0x1c6),_0x1c0815[_0x1555ef(0x1c9)][_0x1555ef(0x1f4)],_0x1c0815[_0x1555ef(0x1c9)][_0x1555ef(0x1c4)]),_0x39db12[_0x1555ef(0x1ae)][_0x1555ef(0x1c3)](_0x1555ef(0x1a9),_0x1555ef(0x1d8));if(_0x1c0815[_0x1555ef(0x1c9)][_0x1555ef(0x1c4)]===_0x1555ef(0x1a8))_0x39db12[_0x1555ef(0x1ae)][_0x1555ef(0x201)]('status-critical');else _0x1c0815['dockerStorage'][_0x1555ef(0x1c4)]===_0x1555ef(0x1c8)&&_0x39db12[_0x1555ef(0x1ae)][_0x1555ef(0x201)](_0x1555ef(0x1a9));}_0x8c3342['hidden']=!![],_0x3dc5dd[_0x1555ef(0x1db)]=![];}catch(_0x561b56){console[_0x1555ef(0x1e4)](_0x1555ef(0x1ed),_0x561b56),_0x8c3342['hidden']=!![],_0x5ab850['hidden']=![],_0x5ab850[_0x1555ef(0x1b4)]=_0x1555ef(0x1cf)+_0x561b56[_0x1555ef(0x1c1)];}}export async function openServerHealthModal(){const _0x349bc3=_0x185692;ensureModalExists();const _0x293014=document['getElementById'](_0x349bc3(0x1b8)),_0x139039=document[_0x349bc3(0x1fa)](_0x349bc3(0x1e3)),_0x17b789=document[_0x349bc3(0x1fa)](_0x349bc3(0x1bc)),_0xe52665=document[_0x349bc3(0x1fa)](_0x349bc3(0x1e1)),_0xfe1ec=document['getElementById'](_0x349bc3(0x1f0)),_0x591b54=document[_0x349bc3(0x1fa)]('server-health-ok'),_0x5a4d58=document[_0x349bc3(0x1fa)](_0x349bc3(0x1b5)),_0x4552bd=document[_0x349bc3(0x1fa)]('server-stop-containers'),_0x34abf4=document[_0x349bc3(0x1fa)](_0x349bc3(0x1ab)),_0x9c4a30=document['getElementById'](_0x349bc3(0x203)),_0x3b8eaf=document[_0x349bc3(0x1fa)](_0x349bc3(0x1c2)),_0x396f6f=document['getElementById'](_0x349bc3(0x1d2)),_0xac4ecf=document[_0x349bc3(0x1fa)](_0x349bc3(0x1f7)),_0x15c3d9=document[_0x349bc3(0x1fa)]('cleanup-section');if(!_0x293014)return;_0x293014[_0x349bc3(0x1db)]=![],_0x139039[_0x349bc3(0x1db)]=![],_0x17b789[_0x349bc3(0x1db)]=!![],_0xe52665[_0x349bc3(0x1db)]=!![];_0x3b8eaf&&(_0x3b8eaf['hidden']=!![],_0x3b8eaf[_0x349bc3(0x1b4)]='',_0x3b8eaf[_0x349bc3(0x1ae)]['remove']('success',_0x349bc3(0x1e4)));_0x15c3d9&&_0x15c3d9[_0x349bc3(0x1ae)][_0x349bc3(0x1c3)](_0x349bc3(0x1fd));_0xac4ecf&&(_0xac4ecf[_0x349bc3(0x1db)]=!![]);_0x396f6f&&_0x396f6f['setAttribute']('aria-expanded',_0x349bc3(0x1ec));const _0x4f863a=[_0x4552bd,_0x34abf4,_0x9c4a30,_0x5a4d58],_0x3b4a17=_0x32a4cd=>{const _0xae21d3=_0x349bc3;_0x4f863a[_0xae21d3(0x1d0)](_0xa6ba24=>{const _0xada34f=_0xae21d3;if(_0xa6ba24)_0xa6ba24[_0xada34f(0x1be)]=_0x32a4cd;});},_0xa9705a=(_0xbb0cb4,_0x24c0fc=_0x349bc3(0x1ac))=>{const _0x4a6c74=_0x349bc3;if(!_0x3b8eaf)return;_0x3b8eaf[_0x4a6c74(0x1db)]=![],_0x3b8eaf['textContent']=_0xbb0cb4,_0x3b8eaf[_0x4a6c74(0x1ae)][_0x4a6c74(0x1c3)](_0x4a6c74(0x1ce),_0x4a6c74(0x1e4));if(_0x24c0fc===_0x4a6c74(0x1ce))_0x3b8eaf[_0x4a6c74(0x1ae)][_0x4a6c74(0x201)](_0x4a6c74(0x1ce));else _0x24c0fc===_0x4a6c74(0x1e4)&&_0x3b8eaf[_0x4a6c74(0x1ae)][_0x4a6c74(0x201)](_0x4a6c74(0x1e4));};await loadServerHealthMetrics();const _0x5aba3d=()=>{const _0x214ef3=_0x349bc3;_0x293014['hidden']=!![],document[_0x214ef3(0x1a6)](_0x214ef3(0x1b9),_0x178327);},_0x178327=_0xacbd0b=>{const _0x1027e2=_0x349bc3;_0xacbd0b['key']===_0x1027e2(0x205)&&!_0x293014['hidden']&&_0x5aba3d();};_0xfe1ec[_0x349bc3(0x1d4)]=_0x5aba3d,_0x591b54[_0x349bc3(0x1d4)]=_0x5aba3d,_0x5a4d58['onclick']=async()=>{const _0x20fd91=_0x349bc3;_0x139039[_0x20fd91(0x1db)]=![],_0x17b789[_0x20fd91(0x1db)]=!![],_0xe52665[_0x20fd91(0x1db)]=!![],await loadServerHealthMetrics();};const _0x21f916=async(_0x12405b,_0x58d529)=>{const _0x10da27=_0x349bc3;_0x139039[_0x10da27(0x1b4)]=_0x12405b,_0x139039[_0x10da27(0x1db)]=![],_0x17b789['hidden']=!![],_0xe52665[_0x10da27(0x1db)]=!![],_0x3b4a17(!![]),_0xa9705a(_0x12405b+'...');try{const _0x52040d=await _0x58d529(),_0x3c43fd=_0x52040d?.[_0x10da27(0x1c1)]||_0x12405b+_0x10da27(0x1a1);_0xa9705a(_0x3c43fd,_0x10da27(0x1ce));}catch(_0x26507e){console[_0x10da27(0x1e4)]('Server\x20cleanup\x20action\x20failed\x20('+_0x12405b+')',_0x26507e),_0xa9705a(_0x26507e[_0x10da27(0x1c1)]||_0x10da27(0x1fb)+_0x12405b['toLowerCase'](),_0x10da27(0x1e4));}finally{await loadServerHealthMetrics(),_0x3b4a17(![]);}};_0x4552bd&&(_0x4552bd[_0x349bc3(0x1d4)]=()=>_0x21f916('Stopping\x20containers',()=>API['stopAllContainers']()));_0x34abf4&&(_0x34abf4[_0x349bc3(0x1d4)]=()=>_0x21f916(_0x349bc3(0x1b0),()=>API[_0x349bc3(0x1df)]()));_0x9c4a30&&(_0x9c4a30[_0x349bc3(0x1d4)]=()=>_0x21f916(_0x349bc3(0x1dd),()=>API[_0x349bc3(0x19f)]()));_0x396f6f&&_0xac4ecf&&_0x15c3d9&&(_0x396f6f[_0x349bc3(0x1d4)]=()=>{const _0x6df694=_0x349bc3,_0x23782a=_0x15c3d9[_0x6df694(0x1ae)][_0x6df694(0x1d1)](_0x6df694(0x1fd));_0xac4ecf['hidden']=!_0x23782a,_0x396f6f[_0x6df694(0x1ef)](_0x6df694(0x1af),_0x23782a?'true':_0x6df694(0x1ec));});document[_0x349bc3(0x1da)](_0x349bc3(0x1b9),_0x178327);const _0x2f9be7=_0x293014[_0x349bc3(0x1a4)](_0x349bc3(0x1b6));_0x2f9be7&&(_0x2f9be7[_0x349bc3(0x1d4)]=_0x5aba3d);}export{loadServerHealthMetrics};typeof window!==_0x185692(0x1e9)&&(window[_0x185692(0x1a7)]=openServerHealthModal);
1
+ const _0x31854f=_0x8736;(function(_0xc682f6,_0x3c7014){const _0x36443e=_0x8736,_0x33b77e=_0xc682f6();while(!![]){try{const _0x1d776a=parseInt(_0x36443e(0x1c7))/0x1*(-parseInt(_0x36443e(0x197))/0x2)+-parseInt(_0x36443e(0x19f))/0x3+-parseInt(_0x36443e(0x1f3))/0x4*(parseInt(_0x36443e(0x1c0))/0x5)+parseInt(_0x36443e(0x1e8))/0x6*(parseInt(_0x36443e(0x1df))/0x7)+-parseInt(_0x36443e(0x1e9))/0x8*(-parseInt(_0x36443e(0x1a4))/0x9)+-parseInt(_0x36443e(0x1a3))/0xa+parseInt(_0x36443e(0x19a))/0xb*(parseInt(_0x36443e(0x1ee))/0xc);if(_0x1d776a===_0x3c7014)break;else _0x33b77e['push'](_0x33b77e['shift']());}catch(_0x4653f0){_0x33b77e['push'](_0x33b77e['shift']());}}}(_0x91ce,0xa9e94));import{API}from'./app.js';let modalInjected=![];const SERVER_HEALTH_MODAL_HTML='\x0a<div\x20id=\x22server-health-modal\x22\x20class=\x22modal\x22\x20hidden>\x0a\x20\x20<div\x20class=\x22modal-overlay\x22></div>\x0a\x20\x20<div\x20class=\x22modal-content\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22modal-header\x22>\x0a\x20\x20\x20\x20\x20\x20<h2>Server\x20Health</h2>\x0a\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22modal-close\x22\x20id=\x22server-health-close\x22\x20aria-label=\x22Close\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2218\x22\x20y1=\x226\x22\x20x2=\x226\x22\x20y2=\x2218\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x226\x22\x20y1=\x226\x22\x20x2=\x2218\x22\x20y2=\x2218\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22modal-body\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20id=\x22server-health-loading\x22\x20class=\x22loading\x22>Loading\x20server\x20metrics</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20id=\x22server-health-error\x22\x20class=\x22error-message\x22\x20hidden></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20id=\x22server-health-content\x22\x20hidden>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22health-metrics\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-icon\x22>💻</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-details\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-label\x22>CPU\x20Usage</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20id=\x22cpu-usage\x22>-</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress\x22\x20role=\x22progressbar\x22\x20aria-label=\x22CPU\x20usage\x22\x20aria-valuemin=\x220\x22\x20aria-valuemax=\x22100\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress-fill\x22\x20id=\x22cpu-progress\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-icon\x22>🧠</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-details\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-label\x22>Memory\x20Usage</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20id=\x22memory-usage\x22>-</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress\x22\x20role=\x22progressbar\x22\x20aria-label=\x22Memory\x20usage\x22\x20aria-valuemin=\x220\x22\x20aria-valuemax=\x22100\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress-fill\x22\x20id=\x22memory-progress\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-icon\x22>💾</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-details\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-label\x22>Disk\x20Usage</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20id=\x22disk-usage\x22>-</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress\x22\x20role=\x22progressbar\x22\x20aria-label=\x22Disk\x20usage\x22\x20aria-valuemin=\x220\x22\x20aria-valuemax=\x22100\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress-fill\x22\x20id=\x22disk-progress\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-icon\x22>🐳</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-details\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-label\x22>Docker\x20Containers</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20id=\x22docker-containers\x22>-</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress\x22\x20role=\x22progressbar\x22\x20aria-label=\x22Running\x20containers\x20ratio\x22\x20aria-valuemin=\x220\x22\x20aria-valuemax=\x22100\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress-fill\x22\x20id=\x22docker-progress\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card-wide\x22\x20id=\x22docker-storage-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-icon\x22>📦</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-details\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-label\x22>Docker\x20Storage</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20id=\x22docker-storage-total\x22>-</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress\x22\x20id=\x22docker-storage-progress-wrap\x22\x20role=\x22progressbar\x22\x20aria-label=\x22Docker\x20storage\x20usage\x22\x20aria-valuemin=\x220\x22\x20aria-valuemax=\x22100\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-progress-fill\x22\x20id=\x22docker-storage-progress\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-sub\x22\x20id=\x22docker-storage-available\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-sub\x22\x20id=\x22docker-storage-reclaimable\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22docker-storage-breakdown\x22\x20id=\x22docker-storage-breakdown\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22storage-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-label\x22>Images:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-value\x22\x20id=\x22docker-storage-images\x22>-</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22storage-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-label\x22>Containers:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-value\x22\x20id=\x22docker-storage-containers\x22>-</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22storage-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-label\x22>Volumes:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-value\x22\x20id=\x22docker-storage-volumes\x22>-</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22storage-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-label\x22>Build\x20Cache:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22storage-value\x22\x20id=\x22docker-storage-buildcache\x22>-</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-icon\x22>⏱️</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-details\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-label\x22>Server\x20Uptime</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20id=\x22server-uptime\x22>-</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-icon\x22>📡</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-details\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-label\x22>User\x20Sessions</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20id=\x22active-sessions\x22>-</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22health-actions\x20collapsible-section\x22\x20id=\x22cleanup-section\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22health-actions-header\x20collapsible-toggle\x22\x20id=\x22cleanup-toggle\x22\x20aria-expanded=\x22false\x22\x20aria-controls=\x22cleanup-content\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22health-actions-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20class=\x22collapse-chevron\x22\x20width=\x2216\x22\x20height=\x2216\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<polyline\x20points=\x229\x2018\x2015\x2012\x209\x206\x22></polyline>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Clean\x20Up\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20id=\x22server-health-action-status\x22\x20class=\x22health-action-status\x22\x20aria-live=\x22polite\x22\x20hidden></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22collapsible-content\x22\x20id=\x22cleanup-content\x22\x20hidden>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-cards\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-icon\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\x223\x22\x20y=\x223\x22\x20width=\x2218\x22\x20height=\x2218\x22\x20rx=\x222\x22\x20ry=\x222\x22></rect>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x229\x22\x20y1=\x229\x22\x20x2=\x2215\x22\x20y2=\x2215\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2215\x22\x20y1=\x229\x22\x20x2=\x229\x22\x20y2=\x2215\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-content\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-title\x22>Stop\x20All\x20Containers</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-description\x22>Gracefully\x20stop\x20all\x20running\x20Docker\x20containers.\x20Active\x20coding\x20sessions\x20will\x20be\x20terminated.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22btn-secondary\x20cleanup-card-btn\x22\x20id=\x22server-stop-containers\x22>Stop</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-icon\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<polyline\x20points=\x223\x206\x205\x206\x2021\x206\x22></polyline>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M19\x206v14a2\x202\x200\x200\x201-2\x202H7a2\x202\x200\x200\x201-2-2V6m3\x200V4a2\x202\x200\x200\x201\x202-2h4a2\x202\x200\x200\x201\x202\x202v2\x22></path>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-content\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-title\x22>Remove\x20Stopped\x20Containers</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-description\x22>Delete\x20all\x20stopped\x20containers\x20to\x20free\x20up\x20disk\x20space.\x20This\x20cannot\x20be\x20undone.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22btn-secondary\x20cleanup-card-btn\x22\x20id=\x22server-remove-stopped\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card\x20cleanup-card-danger\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-icon\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M12\x202L2\x207l10\x205\x2010-5-10-5z\x22></path>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M2\x2017l10\x205\x2010-5\x22></path>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M2\x2012l10\x205\x2010-5\x22></path>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-content\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-title\x22>Docker\x20System\x20Prune</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22cleanup-card-description\x22>Remove\x20all\x20stopped\x20containers,\x20unused\x20networks,\x20dangling\x20images,\x20and\x20build\x20cache.\x20Frees\x20significant\x20disk\x20space.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22btn-danger\x20cleanup-card-btn\x22\x20id=\x22server-prune-docker\x22>Prune</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22modal-actions\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20id=\x22server-health-refresh\x22\x20class=\x22btn-secondary\x22>Refresh</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20id=\x22server-health-ok\x22\x20class=\x22btn-primary\x22>OK</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a</div>\x0a';function _0x91ce(){const _0x596826=['CNvUBMLUzW','C2vYDMvYlwHLywX0Ac1SB2fKAw5N','C2vYDMvYlwHLywX0Ac1JB250zw50','Aw5Uzxjive1m','mtm4sNfgDMny','ndyYndiWoefbtMfqAq','y2XLyw51Cc1Zzwn0Aw9U','D2fYBMLUzW','zg9JA2vYlxn0B3jHz2uTChjVz3jLC3m','zg9JA2vYlxbYB2DYzxnZ','mJaWmdr0whvAB3G','y2XHC3nmAxn0','C3rHDhvZvgv4Da','yxbWzw5Kq2HPBgq','zMLYC3rfBgvTzw50q2HPBgq','otu2mZG4BKPfsKTw','C2vYDMvYlwHLywX0Ac1VAW','C3rHDhvZlw9R','C2vYDMvYlwHLywX0Ac1Hy3rPB24TC3rHDhvZ','AgLKzgvU','Aw5MBW','CgfYzw50rwXLBwvUDa','Dxb0Aw1L','Dhj1zq','yxzHAwXHyMXLrgLZCgXHEq','ywn0AxzLlxnLC3nPB25Z','ywrKrxzLBNrmAxn0zw5LCG','lI4U','ntq0mKHuzg1UyG','C2v0qxr0CMLIDxrL','rxnJyxbL','mtiYmJfZturtz1i','y2XLyw51Cc10B2DNBgu','C3rHDhvZlwnYAxrPy2fS','C2vYDMvYlwHLywX0Ac1YzwzYzxnO','Chj1BMveB2nRzxjszxnVDxjJzxm','mJu3odq5mwrKv3z2Aa','A2v5zg93BG','B3bLBLnLCNzLCKHLywX0Ae1VzgfS','Dg9mB3DLCKnHC2u','mteWnJG5otb5DvnluKG','mtHouNnbCuO','zg9JA2vYlxn0B3jHz2uTDM9SDw1LCW','yxjPys1LEhbHBMrLza','zg9JA2vYlxn0B3jHz2uTy29UDgfPBMvYCW','B25JBgLJAW','C3vJy2vZCW','zg9JA2vYlxn0B3jHz2uTyNvPBgrJywnOzq','Bwf4','zxHWyw5Kzwq','C2vYDMvYlwHLywX0Ac1LCNjVCG','CMvTB3zL','rMfPBgvKihDOAwXLia','C2vYDMvYlxvWDgLTzq','Dgv4DenVBNrLBNq','CxvLCNLtzwXLy3rVCG','Dw5KzwzPBMvK','rMfPBgvKihrVigXVywqGC2vYDMvYigHLywX0AcbTzxrYAwnZoG','y3jLyxrLrwXLBwvUDa','zg9JA2vYlwnVBNrHAw5LCNm','yM9KEq','z2v0rwXLBwvUDej5swq','CMvTB3zLu3rVChbLzenVBNrHAw5LCNm','zgLZAY1WCM9NCMvZCW','zM9YrwfJAa','l2HLywX0Ac9TzxrYAwnZ','r0vu','zgLZAW','zgLZAY11C2fNzq','nuX1q1nmCW','zMfSC2u','Dg90ywW','Aw1Hz2vZ','C3rHDhvZ','C2vZC2LVBNm','BwvZC2fNzq','mJGXC3zZs3zc','CgvYy2vUDa','y3jPDgLJywW','yxjPys12ywX1zw5VDW','yxbWBgLJyxrPB24VANnVBG','BwvTB3j5','tg9HzgLUzYbZzxj2zxiGBwv0CMLJCW','y3b1','C2vYDMvYlxn0B3aTy29UDgfPBMvYCW','rMfPBgvKihrVigXVywqGC2vYDMvYig1LDhjPy3m6ia','zxjYB3i','Aw5JBhvKzq','ywrK','C3rHDhvZlxDHCM5PBMC','zg9JA2vYlxn0B3jHz2uTyxzHAwXHyMXL','DM9SDw1LCW','zg9JA2vYlxn0B3jHz2uTDg90ywW','zg9JA2vY','zgLZywjSzwq','zg9JA2vYu3rVCMfNzq','C2vYDMvYlwHLywX0Ac1TB2rHBa','zgL2','CMvTB3zLrxzLBNrmAxn0zw5LCG','A2v5','mJaWmJq5wNj3yujm','ignVBxbSzxrLza','D2LKDgG','zgLZCgXHEq','zg9JA2vYlxn0B3jHz2uTAw1Hz2vZ'];_0x91ce=function(){return _0x596826;};return _0x91ce();}function _0x8736(_0x56287f,_0x4e8111){_0x56287f=_0x56287f-0x193;const _0x91ce74=_0x91ce();let _0x8736e7=_0x91ce74[_0x56287f];if(_0x8736['xCGNdi']===undefined){var _0x15b998=function(_0x3fd790){const _0x232bd4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2b48d2='',_0x2c076a='';for(let _0x91a71=0x0,_0x108829,_0x5777f0,_0xc556c=0x0;_0x5777f0=_0x3fd790['charAt'](_0xc556c++);~_0x5777f0&&(_0x108829=_0x91a71%0x4?_0x108829*0x40+_0x5777f0:_0x5777f0,_0x91a71++%0x4)?_0x2b48d2+=String['fromCharCode'](0xff&_0x108829>>(-0x2*_0x91a71&0x6)):0x0){_0x5777f0=_0x232bd4['indexOf'](_0x5777f0);}for(let _0x4011c4=0x0,_0x58fad9=_0x2b48d2['length'];_0x4011c4<_0x58fad9;_0x4011c4++){_0x2c076a+='%'+('00'+_0x2b48d2['charCodeAt'](_0x4011c4)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2c076a);};_0x8736['CFUWWC']=_0x15b998,_0x8736['mRvdvH']={},_0x8736['xCGNdi']=!![];}const _0x1263ca=_0x91ce74[0x0],_0x54d451=_0x56287f+_0x1263ca,_0x419b9c=_0x8736['mRvdvH'][_0x54d451];return!_0x419b9c?(_0x8736e7=_0x8736['CFUWWC'](_0x8736e7),_0x8736['mRvdvH'][_0x54d451]=_0x8736e7):_0x8736e7=_0x419b9c,_0x8736e7;}function ensureModalExists(){const _0x3f99a6=_0x8736;if(modalInjected||document[_0x3f99a6(0x1b8)](_0x3f99a6(0x1db)))return;const _0x2b48d2=document[_0x3f99a6(0x1b5)](_0x3f99a6(0x1dc));_0x2b48d2[_0x3f99a6(0x1e7)]=SERVER_HEALTH_MODAL_HTML,document[_0x3f99a6(0x1b7)][_0x3f99a6(0x1f1)](_0x2b48d2[_0x3f99a6(0x1f2)]),modalInjected=!![];}function clampPercent(_0x2c076a){const _0x430f3f=_0x8736;if(!Number['isFinite'](_0x2c076a))return 0x0;return Math[_0x430f3f(0x1ab)](0x0,Math['min'](0x64,Math['round'](_0x2c076a)));}function setMetricProgress(_0x91a71,_0x108829,_0x5777f0='ok'){const _0x2a8be1=_0x8736,_0xc556c=document[_0x2a8be1(0x1b8)](_0x91a71);if(!_0xc556c)return;const _0x4011c4=_0xc556c[_0x2a8be1(0x1f9)],_0x58fad9=clampPercent(_0x108829);_0xc556c['style'][_0x2a8be1(0x1e1)]=_0x58fad9+'%',_0xc556c['classList']['remove']('status-ok',_0x2a8be1(0x1d4),'status-critical'),_0xc556c[_0x2a8be1(0x1ef)][_0x2a8be1(0x1d3)](_0x5777f0===_0x2a8be1(0x1c9)?'status-critical':_0x5777f0===_0x2a8be1(0x1eb)?_0x2a8be1(0x1d4):_0x2a8be1(0x1f5)),_0x4011c4&&_0x4011c4[_0x2a8be1(0x198)](_0x2a8be1(0x1ca),String(_0x58fad9));}function statusFromPercent(_0x54e574){const _0x316910=_0x8736;if(_0x54e574>=0x5a)return _0x316910(0x1c9);if(_0x54e574>=0x4b)return _0x316910(0x1eb);return'ok';}async function loadServerHealthMetrics(){const _0x319476=_0x8736,_0x37df6f=document[_0x319476(0x1b8)](_0x319476(0x1e5)),_0x1ad871=document['getElementById']('server-health-error'),_0x383e4d=document[_0x319476(0x1b8)](_0x319476(0x1e6));if(!_0x37df6f||!_0x1ad871||!_0x383e4d)return;_0x37df6f['textContent']=_0x319476(0x1cd);try{const _0x3970aa=await fetch(_0x319476(0x1bc),{'method':_0x319476(0x1bd),'headers':{'Content-Type':_0x319476(0x1cb)},'credentials':_0x319476(0x1d2)});if(!_0x3970aa['ok'])throw new Error('Failed\x20to\x20load\x20metrics:\x20'+_0x3970aa[_0x319476(0x1f0)]);const _0x230ef5=await _0x3970aa['json']();document[_0x319476(0x1b8)]('cpu-usage')[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1ce)][_0x319476(0x1e2)],document[_0x319476(0x1b8)]('memory-usage')['textContent']=_0x230ef5[_0x319476(0x1cc)]['display'],document[_0x319476(0x1b8)](_0x319476(0x1bf))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1be)]['display'],document['getElementById'](_0x319476(0x1b6))[_0x319476(0x1b1)]=_0x230ef5['docker'][_0x319476(0x1e2)],document['getElementById'](_0x319476(0x1b0))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1fa)][_0x319476(0x1e2)],document[_0x319476(0x1b8)](_0x319476(0x194))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1c5)]['display'],setMetricProgress('cpu-progress',_0x230ef5['cpu'][_0x319476(0x1c8)],statusFromPercent(_0x230ef5[_0x319476(0x1ce)][_0x319476(0x1c8)])),setMetricProgress('memory-progress',_0x230ef5['memory'][_0x319476(0x1c8)],statusFromPercent(_0x230ef5[_0x319476(0x1cc)][_0x319476(0x1c8)])),setMetricProgress(_0x319476(0x1ba),_0x230ef5[_0x319476(0x1be)]['percent'],statusFromPercent(_0x230ef5[_0x319476(0x1be)][_0x319476(0x1c8)]));const _0x2ce8a0=_0x230ef5['docker'][_0x319476(0x1c2)]>0x0?_0x230ef5[_0x319476(0x1d8)][_0x319476(0x1e4)]/_0x230ef5['docker'][_0x319476(0x1c2)]*0x64:0x0;setMetricProgress(_0x319476(0x1ed),_0x2ce8a0);if(_0x230ef5[_0x319476(0x1da)]){const _0x4b6300=document[_0x319476(0x1b8)]('docker-storage-card');document[_0x319476(0x1b8)](_0x319476(0x1d7))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1da)][_0x319476(0x1e2)];const _0x9a77b2=document[_0x319476(0x1b8)](_0x319476(0x1d5));_0x230ef5['dockerStorage']['availableDisplay']?(_0x9a77b2[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1da)][_0x319476(0x193)],_0x9a77b2['hidden']=![]):_0x9a77b2[_0x319476(0x1f7)]=!![];document[_0x319476(0x1b8)]('docker-storage-reclaimable')['textContent']=_0x230ef5[_0x319476(0x1da)]['reclaimableDisplay'],document['getElementById'](_0x319476(0x1e3))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1da)][_0x319476(0x1c3)][_0x319476(0x1e2)],document['getElementById'](_0x319476(0x1a7))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1da)]['containers'][_0x319476(0x1e2)],document['getElementById'](_0x319476(0x1a5))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1da)][_0x319476(0x1d6)][_0x319476(0x1e2)],document['getElementById'](_0x319476(0x1aa))[_0x319476(0x1b1)]=_0x230ef5[_0x319476(0x1da)]['buildCache'][_0x319476(0x1e2)],setMetricProgress(_0x319476(0x1ec),_0x230ef5[_0x319476(0x1da)]['percent'],_0x230ef5[_0x319476(0x1da)]['status']),_0x4b6300[_0x319476(0x1ef)]['remove'](_0x319476(0x1d4),_0x319476(0x19c));if(_0x230ef5['dockerStorage'][_0x319476(0x1c4)]===_0x319476(0x1c9))_0x4b6300[_0x319476(0x1ef)]['add'](_0x319476(0x19c));else _0x230ef5[_0x319476(0x1da)][_0x319476(0x1c4)]===_0x319476(0x1eb)&&_0x4b6300[_0x319476(0x1ef)]['add'](_0x319476(0x1d4));}_0x37df6f[_0x319476(0x1f7)]=!![],_0x383e4d[_0x319476(0x1f7)]=![];}catch(_0x206491){console[_0x319476(0x1d1)](_0x319476(0x1b4),_0x206491),_0x37df6f['hidden']=!![],_0x1ad871[_0x319476(0x1f7)]=![],_0x1ad871['textContent']=_0x319476(0x1d0)+_0x206491[_0x319476(0x1c6)];}}export async function openServerHealthModal(){const _0x32e413=_0x8736;ensureModalExists();const _0x57fb2b=document['getElementById'](_0x32e413(0x1db)),_0xdada4e=document[_0x32e413(0x1b8)]('server-health-loading'),_0x511ff0=document['getElementById'](_0x32e413(0x1ad)),_0x6c8fa8=document[_0x32e413(0x1b8)]('server-health-content'),_0x2a905b=document[_0x32e413(0x1b8)]('server-health-close'),_0x894887=document[_0x32e413(0x1b8)](_0x32e413(0x1f4)),_0x1fa312=document['getElementById'](_0x32e413(0x19d)),_0x3e1943=document[_0x32e413(0x1b8)](_0x32e413(0x1cf)),_0x5e15ce=document[_0x32e413(0x1b8)]('server-remove-stopped'),_0x4be50e=document[_0x32e413(0x1b8)]('server-prune-docker'),_0x457d81=document[_0x32e413(0x1b8)](_0x32e413(0x1f6)),_0x4c5137=document['getElementById'](_0x32e413(0x19b)),_0x17ebbc=document['getElementById']('cleanup-content'),_0x324d2c=document['getElementById'](_0x32e413(0x1ea));if(!_0x57fb2b)return;_0x57fb2b[_0x32e413(0x1f7)]=![],_0xdada4e['hidden']=![],_0x511ff0[_0x32e413(0x1f7)]=!![],_0x6c8fa8[_0x32e413(0x1f7)]=!![];_0x457d81&&(_0x457d81[_0x32e413(0x1f7)]=!![],_0x457d81[_0x32e413(0x1b1)]='',_0x457d81[_0x32e413(0x1ef)][_0x32e413(0x1ae)](_0x32e413(0x1a9),_0x32e413(0x1d1)));_0x324d2c&&_0x324d2c['classList']['remove'](_0x32e413(0x1ac));_0x17ebbc&&(_0x17ebbc['hidden']=!![]);_0x4c5137&&_0x4c5137[_0x32e413(0x198)](_0x32e413(0x1a6),_0x32e413(0x1c1));const _0x4f754a=[_0x3e1943,_0x5e15ce,_0x4be50e,_0x1fa312],_0x5b8520=_0x2fb843=>{const _0x5eeca6=_0x32e413;_0x4f754a[_0x5eeca6(0x1bb)](_0x297a29=>{const _0x5475aa=_0x5eeca6;if(_0x297a29)_0x297a29[_0x5475aa(0x1d9)]=_0x2fb843;});},_0x36347f=(_0x5a565c,_0x159468=_0x32e413(0x1f8))=>{const _0x5c81df=_0x32e413;if(!_0x457d81)return;_0x457d81['hidden']=![],_0x457d81['textContent']=_0x5a565c,_0x457d81['classList']['remove'](_0x5c81df(0x1a9),'error');if(_0x159468===_0x5c81df(0x1a9))_0x457d81[_0x5c81df(0x1ef)][_0x5c81df(0x1d3)](_0x5c81df(0x1a9));else _0x159468==='error'&&_0x457d81[_0x5c81df(0x1ef)][_0x5c81df(0x1d3)](_0x5c81df(0x1d1));};await loadServerHealthMetrics();const _0x5dc6e9=()=>{const _0x579a3d=_0x32e413;_0x57fb2b[_0x579a3d(0x1f7)]=!![],document[_0x579a3d(0x1dd)](_0x579a3d(0x1a0),_0x2d3bdf);},_0x2d3bdf=_0x468144=>{const _0x1f669c=_0x32e413;_0x468144[_0x1f669c(0x1de)]===_0x1f669c(0x199)&&!_0x57fb2b['hidden']&&_0x5dc6e9();};_0x2a905b[_0x32e413(0x1a8)]=_0x5dc6e9,_0x894887[_0x32e413(0x1a8)]=_0x5dc6e9,_0x1fa312[_0x32e413(0x1a8)]=async()=>{const _0x3cad79=_0x32e413;_0xdada4e[_0x3cad79(0x1f7)]=![],_0x511ff0[_0x3cad79(0x1f7)]=!![],_0x6c8fa8['hidden']=!![],await loadServerHealthMetrics();};const _0xc76670=async(_0x345ae5,_0x42c395)=>{const _0x516aa2=_0x32e413;_0xdada4e[_0x516aa2(0x1b1)]=_0x345ae5,_0xdada4e[_0x516aa2(0x1f7)]=![],_0x511ff0[_0x516aa2(0x1f7)]=!![],_0x6c8fa8[_0x516aa2(0x1f7)]=!![],_0x5b8520(!![]),_0x36347f(_0x345ae5+_0x516aa2(0x196));try{const _0x48884d=await _0x42c395(),_0x1c281a=_0x48884d?.[_0x516aa2(0x1c6)]||_0x345ae5+_0x516aa2(0x1e0);_0x36347f(_0x1c281a,_0x516aa2(0x1a9));}catch(_0x3381bf){console[_0x516aa2(0x1d1)]('Server\x20cleanup\x20action\x20failed\x20('+_0x345ae5+')',_0x3381bf),_0x36347f(_0x3381bf[_0x516aa2(0x1c6)]||_0x516aa2(0x1af)+_0x345ae5[_0x516aa2(0x1a2)](),_0x516aa2(0x1d1));}finally{await loadServerHealthMetrics(),_0x5b8520(![]);}};_0x3e1943&&(_0x3e1943[_0x32e413(0x1a8)]=()=>_0xc76670('Stopping\x20containers',()=>API['stopAllContainers']()));_0x5e15ce&&(_0x5e15ce[_0x32e413(0x1a8)]=()=>_0xc76670('Removing\x20stopped\x20containers',()=>API[_0x32e413(0x1b9)]()));_0x4be50e&&(_0x4be50e['onclick']=()=>_0xc76670('Pruning\x20Docker\x20resources',()=>API[_0x32e413(0x19e)]()));_0x4c5137&&_0x17ebbc&&_0x324d2c&&(_0x4c5137[_0x32e413(0x1a8)]=()=>{const _0x425c2c=_0x32e413,_0x5719c6=_0x324d2c['classList']['toggle'](_0x425c2c(0x1ac));_0x17ebbc[_0x425c2c(0x1f7)]=!_0x5719c6,_0x4c5137['setAttribute']('aria-expanded',_0x5719c6?_0x425c2c(0x1fb):_0x425c2c(0x1c1));});document[_0x32e413(0x195)](_0x32e413(0x1a0),_0x2d3bdf);const _0x2eb64f=_0x57fb2b[_0x32e413(0x1b2)]('.modal-overlay');_0x2eb64f&&(_0x2eb64f[_0x32e413(0x1a8)]=_0x5dc6e9);}export{loadServerHealthMetrics};typeof window!==_0x31854f(0x1b3)&&(window[_0x31854f(0x1a1)]=openServerHealthModal);
@@ -770,8 +770,9 @@
770
770
  MODAL DROPDOWN FIX - Use fixed positioning for dropdowns
771
771
  ============================================================ */
772
772
 
773
- /* Allow dropdowns to escape modal boundaries using fixed positioning */
774
- #git-provider-modal .custom-select-dropdown {
773
+ /* Allow settings modal dropdowns to escape modal boundaries using fixed positioning */
774
+ #git-provider-modal .custom-select-dropdown,
775
+ #github-app-setup-wizard-modal .custom-select-dropdown {
775
776
  position: fixed;
776
777
  z-index: 10001;
777
778
  }
@@ -424,7 +424,6 @@
424
424
  </div>
425
425
  </div>
426
426
  <div class="card-actions">
427
- <button type="button" class="btn-secondary" id="refresh-models-btn">Refresh Models</button>
428
427
  <button type="button" class="btn-primary" id="save-models-btn">Save</button>
429
428
  </div>
430
429
  </div>