@profoundlogic/coderflow-server 0.4.9 → 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.
- package/README.md +16 -158
- package/dist/README.md +16 -158
- package/dist/base-image/agent-wrapper.sh +1 -1
- package/dist/capture-screenshot.mjs +34 -0
- package/dist/coder-server.js +1 -1
- package/dist/config/cli-models.json +4 -3
- package/dist/config.js +1 -1
- package/dist/lib/agent-keepalive.js +1 -1
- package/dist/lib/agent-models.js +1 -1
- package/dist/lib/api-keys.js +1 -1
- package/dist/lib/apiKeys.js +1 -1
- package/dist/lib/app-server-ports.js +1 -1
- package/dist/lib/auto-judge.js +1 -1
- package/dist/lib/automation-service.js +1 -1
- package/dist/lib/basic-auth.js +1 -1
- package/dist/lib/bindings.js +1 -1
- package/dist/lib/build-history.js +1 -1
- package/dist/lib/build-output-service.js +1 -1
- package/dist/lib/build-scheduler.js +1 -1
- package/dist/lib/build-service.js +1 -1
- package/dist/lib/ca-certificates.js +1 -1
- package/dist/lib/claude-oauth-refresh.js +1 -1
- package/dist/lib/cli/build.js +1 -1
- package/dist/lib/cli/cleanup-users.js +1 -0
- package/dist/lib/cli/config-command.js +1 -1
- package/dist/lib/cli/config.js +1 -1
- package/dist/lib/cli/create-user.js +1 -1
- package/dist/lib/cli/grant-admin.js +1 -0
- package/dist/lib/cli/init.js +1 -1
- package/dist/lib/cli/jira.js +1 -1
- package/dist/lib/cli/license.js +1 -1
- package/dist/lib/cli/list-roles.js +1 -0
- package/dist/lib/cli/list-users.js +1 -0
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/cli/set-password.js +1 -0
- package/dist/lib/config-migration.js +1 -1
- package/dist/lib/container-credential-sync.js +1 -1
- package/dist/lib/container-tokens.js +1 -1
- package/dist/lib/data-dir.js +1 -1
- package/dist/lib/deployment-history.js +1 -1
- package/dist/lib/deployment-service.js +1 -1
- package/dist/lib/docker-utils.js +1 -1
- package/dist/lib/email.js +1 -1
- package/dist/lib/emailTemplates.js +1 -1
- package/dist/lib/entitlement.js +1 -1
- package/dist/lib/external-connections.js +1 -1
- package/dist/lib/fetch-utils.js +1 -1
- package/dist/lib/git-commit-details-route.js +1 -1
- package/dist/lib/git-history-diff-guardrails.js +1 -1
- package/dist/lib/git-provider-service.js +1 -1
- package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
- package/dist/lib/git-provider-setup/index.js +1 -1
- package/dist/lib/git-provider-setup/setup-factory.js +1 -1
- package/dist/lib/git-provider-setup/setup-interface.js +1 -1
- package/dist/lib/git-providers/azure-devops-provider.js +1 -1
- package/dist/lib/git-providers/github-app-provider.js +1 -1
- package/dist/lib/git-providers/index.js +1 -1
- package/dist/lib/git-providers/provider-factory.js +1 -1
- package/dist/lib/git-providers/provider-interface.js +1 -1
- package/dist/lib/github-urls.js +1 -1
- package/dist/lib/group-objective-linking.js +1 -1
- package/dist/lib/ibmi-sync.js +1 -0
- package/dist/lib/jira-client.js +1 -1
- package/dist/lib/judge-blinding.js +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/migration-to-scoped-rbac.js +1 -1
- package/dist/lib/model-fetcher.js +1 -1
- package/dist/lib/notifications.js +1 -1
- package/dist/lib/objective-context.js +1 -1
- package/dist/lib/oidc-auth.js +1 -1
- package/dist/lib/oidc-device-flow.js +1 -1
- package/dist/lib/passwordTokens.js +1 -1
- package/dist/lib/permission-resolver.js +1 -1
- package/dist/lib/pin-cascade.js +1 -1
- package/dist/lib/provider-accounts.js +1 -1
- package/dist/lib/provider-oauth.js +1 -1
- package/dist/lib/provider-profile.js +1 -1
- package/dist/lib/provider-token-refresh.js +1 -1
- package/dist/lib/rbac-user-state.js +1 -1
- package/dist/lib/request-url.js +1 -1
- package/dist/lib/rewind.js +1 -1
- package/dist/lib/role-definitions.js +1 -1
- package/dist/lib/roles.js +1 -1
- package/dist/lib/secrets.js +1 -1
- package/dist/lib/setup-repo-git-auth.js +1 -1
- package/dist/lib/state-capture.js +1 -1
- package/dist/lib/static-files.js +1 -1
- package/dist/lib/task-name-format.js +1 -1
- package/dist/lib/task-name-generator.js +1 -1
- package/dist/lib/task-source-metadata.js +1 -1
- package/dist/lib/teams.js +1 -1
- package/dist/lib/user-git-oauth.js +1 -1
- package/dist/lib/user-git-tokens.js +1 -1
- package/dist/lib/users.js +1 -1
- package/dist/middleware/requireAuth.js +1 -1
- package/dist/middleware/requireInit.js +1 -1
- package/dist/middleware/requirePermission.js +1 -1
- package/dist/package.json +1 -1
- package/dist/playwright.config.js +1 -1
- package/dist/routes/apiKeys.js +1 -1
- package/dist/routes/auth-oidc.js +1 -1
- package/dist/routes/auth.js +1 -1
- package/dist/routes/automations.js +1 -1
- package/dist/routes/bindings.js +1 -1
- package/dist/routes/build.js +1 -1
- package/dist/routes/containers.js +1 -1
- package/dist/routes/deploy-task.js +1 -1
- package/dist/routes/environment-management.js +1 -1
- package/dist/routes/environments.js +1 -1
- package/dist/routes/external-skills.js +1 -1
- package/dist/routes/git-credentials.js +1 -1
- package/dist/routes/git-oauth.js +1 -1
- package/dist/routes/git-provider-setup.js +1 -1
- package/dist/routes/health.js +1 -1
- package/dist/routes/jira.js +1 -1
- package/dist/routes/objective-management.js +1 -1
- package/dist/routes/password.js +1 -1
- package/dist/routes/prompt.js +1 -1
- package/dist/routes/provider-auth.js +1 -1
- package/dist/routes/qa.js +1 -1
- package/dist/routes/roles.js +1 -1
- package/dist/routes/settings.js +1 -1
- package/dist/routes/skill-management.js +1 -1
- package/dist/routes/skills.js +1 -1
- package/dist/routes/tasks.js +1 -1
- package/dist/routes/teams.js +1 -1
- package/dist/routes/templates.js +1 -1
- package/dist/routes/test-task.js +1 -1
- package/dist/routes/test.js +1 -1
- package/dist/routes/users.js +1 -1
- package/dist/routes/visualizations.js +1 -1
- package/dist/scripts/create-user.js +1 -1
- package/dist/scripts/migrate-config-to-data-dir.js +1 -1
- package/dist/scripts/sync_to_ibmi.sh +204 -0
- package/dist/start.js +1 -1
- package/dist/web-ui/public/activity-detail-modal.js +1 -1
- package/dist/web-ui/public/activity-feed.js +1 -1
- package/dist/web-ui/public/activity-formatters.js +1 -1
- package/dist/web-ui/public/agent-event-parser.js +1 -1
- package/dist/web-ui/public/app.js +1 -1
- package/dist/web-ui/public/approve-dialog.js +1 -1
- package/dist/web-ui/public/automation-links.js +1 -1
- package/dist/web-ui/public/automation-schedule.js +1 -1
- package/dist/web-ui/public/comments-widget.js +1 -1
- package/dist/web-ui/public/diff-utils.js +1 -1
- package/dist/web-ui/public/docs/admin/environments.md +1 -0
- package/dist/web-ui/public/docs/tasks/approval-and-deployment.md +36 -0
- package/dist/web-ui/public/environments.html +1 -1
- package/dist/web-ui/public/environments.js +1 -1
- package/dist/web-ui/public/feedback-widget.js +1 -1
- package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
- package/dist/web-ui/public/git-history.js +1 -1
- package/dist/web-ui/public/git-status.js +1 -1
- package/dist/web-ui/public/index.html +2 -2
- package/dist/web-ui/public/index.js +1 -1
- package/dist/web-ui/public/login.js +1 -1
- package/dist/web-ui/public/markdown-editor.js +1 -1
- package/dist/web-ui/public/markdown-file-editor.js +1 -1
- package/dist/web-ui/public/modal-maximize.js +1 -1
- package/dist/web-ui/public/notifications.js +1 -1
- package/dist/web-ui/public/pr-dialog.js +1 -1
- package/dist/web-ui/public/roles.html +3 -2
- package/dist/web-ui/public/roles.js +1 -1
- package/dist/web-ui/public/server-health.js +1 -1
- package/dist/web-ui/public/settings.css +3 -2
- package/dist/web-ui/public/settings.html +0 -1
- package/dist/web-ui/public/settings.js +1 -1
- package/dist/web-ui/public/setup-password.js +1 -1
- package/dist/web-ui/public/skills.js +1 -1
- package/dist/web-ui/public/sse-client.js +1 -1
- package/dist/web-ui/public/sse-shared-worker.js +1 -1
- package/dist/web-ui/public/styles.css +110 -12
- package/dist/web-ui/public/task.html +80 -1
- package/dist/web-ui/public/task.js +1 -1
- package/dist/web-ui/public/teams.html +76 -81
- package/dist/web-ui/public/teams.js +1 -1
- package/dist/web-ui/public/terminal.js +1 -1
- package/dist/web-ui/public/theme.js +1 -1
- package/dist/web-ui/public/users.html +12 -11
- package/dist/web-ui/public/users.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
- package/dist/lib/cli/migrate-rbac.js +0 -1
- package/dist/lib/scoped-rbac-migration-runner.js +0 -1
- package/dist/scripts/migrate-to-scoped-rbac.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x230bfc=_0x5073;(function(_0x1cec31,_0x42e9c2){const _0xf117b3=_0x5073,_0x45475d=_0x1cec31();while(!![]){try{const _0x587ca4=parseInt(_0xf117b3(0xce))/0x1*(parseInt(_0xf117b3(0x9b))/0x2)+parseInt(_0xf117b3(0xb4))/0x3*(parseInt(_0xf117b3(0xcf))/0x4)+parseInt(_0xf117b3(0x9e))/0x5*(-parseInt(_0xf117b3(0x80))/0x6)+parseInt(_0xf117b3(0xbd))/0x7*(parseInt(_0xf117b3(0x88))/0x8)+-parseInt(_0xf117b3(0xab))/0x9*(-parseInt(_0xf117b3(0x8c))/0xa)+-parseInt(_0xf117b3(0xb1))/0xb+-parseInt(_0xf117b3(0x9c))/0xc;if(_0x587ca4===_0x42e9c2)break;else _0x45475d['push'](_0x45475d['shift']());}catch(_0x108f57){_0x45475d['push'](_0x45475d['shift']());}}}(_0x34bb,0x1fc0b));import{API}from'./app.js';function _0x34bb(){const _0x53f302=['AgLKzgvU','r0vu','Aw5MBW','rMfPBgvKihrVigXVywqGBwv0CMLJCZOG','Dg90ywW','C2vYDMvYlwHLywX0Ac1TB2rHBa','uhj1BMLUzYbeB2nRzxiGCMvZB3vYy2vZ','Aw5Uzxjive1m','yxzHAwXHyMXLrgLZCgXHEq','zg9JA2vYu3rVCMfNzq','C2vYDMvYlwHLywX0Ac1LCNjVCG','B25JBgLJAW','C3r5Bgu','u3rVChbPBMCGy29UDgfPBMvYCW','mtyZmdu3vvvUuvbw','oty2ota4svPUt1vH','zgLZywjSzwq','C2vYDMvYlwHLywX0Ac1Hy3rPB24TC3rHDhvZ','zgLZAW','yM9KEq','C2vYDMvYlwHLywX0Ac1JB250zw50','yxjPys1LEhbHBMrLza','CgfYzw50rwXLBwvUDa','zg9JA2vYlxn0B3jHz2uTAw1Hz2vZ','rMfPBgvKihDOAwXLia','y2XLyw51Cc1Zzwn0Aw9U','C3rHDhvZlw9R','ywn0AxzLlxnLC3nPB25Z','D2LKDgG','y2XHC3nmAxn0','y3jPDgLJywW','ignVBxbSzxrLza','zg9JA2vY','yxbWzw5Kq2HPBgq','Dxb0Aw1L','u2vYDMvYignSzwfUDxaGywn0Aw9UigzHAwXLzcaO','C2vYDMvYlwHLywX0Ac1SB2fKAw5N','C3vJy2vZCW','y29UDgfPBMvYCW','ywrKrxzLBNrmAxn0zw5LCG','BwvTB3j5lxvZywDL','y3b1lxbYB2DYzxnZ','BwLU','BwvTB3j5','zMLYC3rfBgvTzw50q2HPBgq','ntm0wxvMwe9u','Bwf4','Aw5JBhvKzq','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','l2HLywX0Ac9TzxrYAwnZ','y3b1lxvZywDL','yxjPys12ywX1zw5VDW','C3rHDhvZlxDHCM5PBMC','oezOs09QCq','zg9JA2vYlxbYB2DYzxnZ','C3rVCefSBenVBNrHAw5LCNm','Dhj1zq','mteWywniDfft','y3jLyxrLrwXLBwvUDa','CMvTB3zL','CMvTB3zLrxzLBNrmAxn0zw5LCG','C2v0qxr0CMLIDxrL','zxjYB3i','A2v5zg93BG','y3b1','zMfSC2u','Aw1Hz2vZ','lI4U','C2vYDMvYlwHLywX0Ac1JBg9Zzq','yxbWBgLJyxrPB24VANnVBG','C3rHDhvZvgv4Da','CMvJBgfPBwfIBgveAxnWBgf5','mNfqzNflDa','mZy3mJG0mhrzs296za','D2fYBMLUzW','ndaXnvDPt0vUyG','tg9HzgLUzYbZzxj2zxiGBwv0CMLJCW','ywrK','zg9JA2vYlxn0B3jHz2uTCMvJBgfPBwfIBgu','rxnJyxbL','CMvTB3zLu3rVChbLzenVBNrHAw5LCNm','zg9JA2vYlxn0B3jHz2uTy2fYza','BwvTB3j5lxbYB2DYzxnZ','Chj1BMveB2nRzxjszxnVDxjJzxm','Dg9mB3DLCKnHC2u','BwvZC2fNzq','CM91BMq','C3rHDhvZlwnYAxrPy2fS','odu3ndnRwLrtvwe','C2vYDMvYlxn0B3aTy29UDgfPBMvYCW','zgLZCgXHEq','C2vZC2LVBNm','C3rHDhvZ','z2v0rwXLBwvUDej5swq','otmWnJiYtxngAgvH','zg9JA2vYlxn0B3jHz2uTyxzHAwXHyMXL','C2vYDMvYlwHLywX0Ac1YzwzYzxnO','m3HrzuvMta','yNvPBgrdywnOzq','uMvTB3zPBMCGC3rVChbLzcbJB250ywLUzxjZ','lM1VzgfSlw92zxjSyxK','zg9JA2vYlxn0B3jHz2uTyNvPBgrJywnOzq','y2XLyw51Cc1JB250zw50','C2vYDMvYlxvWDgLTzq','Dgv4DenVBNrLBNq','Dw5KzwzPBMvK','ntC4mZe5yvbNr3b3','CgvYy2vUDa','zg9JA2vYlxn0B3jHz2uTChjVz3jLC3m'];_0x34bb=function(){return _0x53f302;};return _0x34bb();}let modalInjected=![];const SERVER_HEALTH_MODAL_HTML=_0x230bfc(0x83);function ensureModalExists(){const _0xf5ea20=_0x230bfc;if(modalInjected||document[_0xf5ea20(0xb0)](_0xf5ea20(0xc5)))return;const _0x4d41e2=document[_0xf5ea20(0x8d)]('div');_0x4d41e2[_0xf5ea20(0xc7)]=SERVER_HEALTH_MODAL_HTML,document[_0xf5ea20(0xd3)][_0xf5ea20(0xe1)](_0x4d41e2[_0xf5ea20(0x7f)]),modalInjected=!![];}function clampPercent(_0x6fce49){const _0x3379f7=_0x230bfc;if(!Number['isFinite'](_0x6fce49))return 0x0;return Math[_0x3379f7(0x81)](0x0,Math[_0x3379f7(0x7d)](0x64,Math[_0x3379f7(0xa9)](_0x6fce49)));}function setMetricProgress(_0x46414f,_0x1decaf,_0x21b5d0='ok'){const _0x28958f=_0x230bfc,_0x2c6060=document[_0x28958f(0xb0)](_0x46414f);if(!_0x2c6060)return;const _0xa80ae=_0x2c6060[_0x28958f(0xd6)],_0x5ac408=clampPercent(_0x1decaf);_0x2c6060[_0x28958f(0xcc)][_0x28958f(0xdc)]=_0x5ac408+'%',_0x2c6060[_0x28958f(0xdd)][_0x28958f(0x8e)]('status-ok',_0x28958f(0x87),_0x28958f(0xaa)),_0x2c6060['classList']['add'](_0x21b5d0==='critical'?_0x28958f(0xaa):_0x21b5d0===_0x28958f(0x9d)?'status-warning':_0x28958f(0xda)),_0xa80ae&&_0xa80ae[_0x28958f(0x90)](_0x28958f(0x86),String(_0x5ac408));}function statusFromPercent(_0x509295){const _0x10da84=_0x230bfc;if(_0x509295>=0x5a)return _0x10da84(0xde);if(_0x509295>=0x4b)return _0x10da84(0x9d);return'ok';}async function loadServerHealthMetrics(){const _0x347ef6=_0x230bfc,_0x3fe989=document[_0x347ef6(0xb0)](_0x347ef6(0xe4)),_0x2815f4=document[_0x347ef6(0xb0)](_0x347ef6(0xca)),_0x3aed3b=document[_0x347ef6(0xb0)](_0x347ef6(0xd4));if(!_0x3fe989||!_0x2815f4||!_0x3aed3b)return;_0x3fe989[_0x347ef6(0xbb)]=_0x347ef6(0x9f);try{const _0x1f41eb=await fetch(_0x347ef6(0x84),{'method':_0x347ef6(0xc1),'headers':{'Content-Type':_0x347ef6(0x98)},'credentials':_0x347ef6(0x82)});if(!_0x1f41eb['ok'])throw new Error(_0x347ef6(0xc3)+_0x1f41eb[_0x347ef6(0x99)]);const _0x1945b4=await _0x1f41eb['json']();document[_0x347ef6(0xb0)](_0x347ef6(0x85))[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0x93)]['display'],document[_0x347ef6(0xb0)](_0x347ef6(0x7b))[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0x7e)]['display'],document[_0x347ef6(0xb0)]('disk-usage')[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0xd2)]['display'],document[_0x347ef6(0xb0)]('docker-containers')[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0xe0)][_0x347ef6(0xad)],document[_0x347ef6(0xb0)](_0x347ef6(0xba))['textContent']=_0x1945b4[_0x347ef6(0xe2)][_0x347ef6(0xad)],document[_0x347ef6(0xb0)](_0x347ef6(0xdb))[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0xae)][_0x347ef6(0xad)],setMetricProgress(_0x347ef6(0x7c),_0x1945b4['cpu']['percent'],statusFromPercent(_0x1945b4['cpu']['percent'])),setMetricProgress(_0x347ef6(0xa5),_0x1945b4[_0x347ef6(0x7e)][_0x347ef6(0xbe)],statusFromPercent(_0x1945b4[_0x347ef6(0x7e)]['percent'])),setMetricProgress('disk-progress',_0x1945b4[_0x347ef6(0xd2)][_0x347ef6(0xbe)],statusFromPercent(_0x1945b4[_0x347ef6(0xd2)][_0x347ef6(0xbe)]));const _0x590e5e=_0x1945b4['docker']['total']>0x0?_0x1945b4['docker']['running']/_0x1945b4[_0x347ef6(0xe0)][_0x347ef6(0xc4)]*0x64:0x0;setMetricProgress(_0x347ef6(0x89),_0x590e5e);if(_0x1945b4['dockerStorage']){const _0xdd1f38=document[_0x347ef6(0xb0)](_0x347ef6(0xa4));document[_0x347ef6(0xb0)]('docker-storage-total')[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0xc9)]['display'];const _0x57f32a=document[_0x347ef6(0xb0)](_0x347ef6(0xb2));_0x1945b4[_0x347ef6(0xc9)][_0x347ef6(0xc8)]?(_0x57f32a[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0xc9)]['availableDisplay'],_0x57f32a[_0x347ef6(0xc0)]=![]):_0x57f32a[_0x347ef6(0xc0)]=!![];document[_0x347ef6(0xb0)](_0x347ef6(0xa1))['textContent']=_0x1945b4['dockerStorage'][_0x347ef6(0x9a)],document['getElementById'](_0x347ef6(0xd7))[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0xc9)][_0x347ef6(0x95)]['display'],document[_0x347ef6(0xb0)]('docker-storage-containers')[_0x347ef6(0xbb)]=_0x1945b4['dockerStorage'][_0x347ef6(0xe6)]['display'],document[_0x347ef6(0xb0)]('docker-storage-volumes')[_0x347ef6(0xbb)]=_0x1945b4['dockerStorage']['volumes'][_0x347ef6(0xad)],document['getElementById'](_0x347ef6(0xb8))[_0x347ef6(0xbb)]=_0x1945b4[_0x347ef6(0xc9)][_0x347ef6(0xb5)][_0x347ef6(0xad)],setMetricProgress(_0x347ef6(0xbf),_0x1945b4[_0x347ef6(0xc9)]['percent'],_0x1945b4[_0x347ef6(0xc9)]['status']),_0xdd1f38['classList'][_0x347ef6(0x8e)](_0x347ef6(0x87),_0x347ef6(0xaa));if(_0x1945b4[_0x347ef6(0xc9)][_0x347ef6(0xaf)]===_0x347ef6(0xde))_0xdd1f38[_0x347ef6(0xdd)][_0x347ef6(0xa0)]('status-critical');else _0x1945b4[_0x347ef6(0xc9)][_0x347ef6(0xaf)]===_0x347ef6(0x9d)&&_0xdd1f38[_0x347ef6(0xdd)][_0x347ef6(0xa0)](_0x347ef6(0x87));}_0x3fe989[_0x347ef6(0xc0)]=!![],_0x3aed3b[_0x347ef6(0xc0)]=![];}catch(_0x1c9da0){console[_0x347ef6(0x91)]('Failed\x20to\x20load\x20server\x20health\x20metrics:',_0x1c9da0),_0x3fe989['hidden']=!![],_0x2815f4[_0x347ef6(0xc0)]=![],_0x2815f4[_0x347ef6(0xbb)]='Failed\x20to\x20load\x20server\x20metrics:\x20'+_0x1c9da0['message'];}}export async function openServerHealthModal(){const _0x5978cb=_0x230bfc;ensureModalExists();const _0x12ec3f=document[_0x5978cb(0xb0)]('server-health-modal'),_0x13263d=document[_0x5978cb(0xb0)](_0x5978cb(0xe4)),_0x21a7d3=document[_0x5978cb(0xb0)](_0x5978cb(0xca)),_0x5c4930=document[_0x5978cb(0xb0)](_0x5978cb(0xd4)),_0x5bb483=document[_0x5978cb(0xb0)](_0x5978cb(0x97)),_0x590d9f=document[_0x5978cb(0xb0)]('server-health-ok'),_0x2fd08f=document[_0x5978cb(0xb0)](_0x5978cb(0xb3)),_0x8ed5fc=document['getElementById'](_0x5978cb(0xac)),_0x8e1f79=document[_0x5978cb(0xb0)]('server-remove-stopped'),_0x1e23c2=document['getElementById']('server-prune-docker'),_0x537a59=document['getElementById'](_0x5978cb(0xd1)),_0x317ec7=document[_0x5978cb(0xb0)]('cleanup-toggle'),_0x550c2d=document[_0x5978cb(0xb0)](_0x5978cb(0xb9)),_0x4ccb68=document[_0x5978cb(0xb0)](_0x5978cb(0xd9));if(!_0x12ec3f)return;_0x12ec3f[_0x5978cb(0xc0)]=![],_0x13263d['hidden']=![],_0x21a7d3[_0x5978cb(0xc0)]=!![],_0x5c4930[_0x5978cb(0xc0)]=!![];_0x537a59&&(_0x537a59[_0x5978cb(0xc0)]=!![],_0x537a59[_0x5978cb(0xbb)]='',_0x537a59[_0x5978cb(0xdd)][_0x5978cb(0x8e)](_0x5978cb(0xe5),_0x5978cb(0x91)));_0x4ccb68&&_0x4ccb68['classList']['remove']('expanded');_0x550c2d&&(_0x550c2d['hidden']=!![]);_0x317ec7&&_0x317ec7[_0x5978cb(0x90)](_0x5978cb(0xd5),_0x5978cb(0x94));const _0x249a21=[_0x8ed5fc,_0x8e1f79,_0x1e23c2,_0x2fd08f],_0x826df0=_0x1acac4=>{_0x249a21['forEach'](_0xa9c946=>{const _0x40677d=_0x5073;if(_0xa9c946)_0xa9c946[_0x40677d(0xd0)]=_0x1acac4;});},_0x26aaa1=(_0x49715f,_0x56dc4d=_0x5978cb(0xc2))=>{const _0x5a771e=_0x5978cb;if(!_0x537a59)return;_0x537a59[_0x5a771e(0xc0)]=![],_0x537a59['textContent']=_0x49715f,_0x537a59[_0x5a771e(0xdd)][_0x5a771e(0x8e)](_0x5a771e(0xe5),_0x5a771e(0x91));if(_0x56dc4d===_0x5a771e(0xe5))_0x537a59[_0x5a771e(0xdd)][_0x5a771e(0xa0)](_0x5a771e(0xe5));else _0x56dc4d===_0x5a771e(0x91)&&_0x537a59[_0x5a771e(0xdd)][_0x5a771e(0xa0)](_0x5a771e(0x91));};await loadServerHealthMetrics();const _0x5064fb=()=>{const _0x2e87b3=_0x5978cb;_0x12ec3f[_0x2e87b3(0xc0)]=!![],document[_0x2e87b3(0x8f)](_0x2e87b3(0x92),_0x380ff1);},_0x380ff1=_0x61c325=>{const _0x5992d7=_0x5978cb;_0x61c325['key']===_0x5992d7(0xa2)&&!_0x12ec3f[_0x5992d7(0xc0)]&&_0x5064fb();};_0x5bb483['onclick']=_0x5064fb,_0x590d9f[_0x5978cb(0xcb)]=_0x5064fb,_0x2fd08f['onclick']=async()=>{const _0xf375f7=_0x5978cb;_0x13263d[_0xf375f7(0xc0)]=![],_0x21a7d3[_0xf375f7(0xc0)]=!![],_0x5c4930['hidden']=!![],await loadServerHealthMetrics();};const _0x1b35dc=async(_0x45dcc5,_0x40be91)=>{const _0x2bfbf8=_0x5978cb;_0x13263d[_0x2bfbf8(0xbb)]=_0x45dcc5,_0x13263d[_0x2bfbf8(0xc0)]=![],_0x21a7d3['hidden']=!![],_0x5c4930[_0x2bfbf8(0xc0)]=!![],_0x826df0(!![]),_0x26aaa1(_0x45dcc5+_0x2bfbf8(0x96));try{const _0x25dbda=await _0x40be91(),_0xbf5a51=_0x25dbda?.['message']||_0x45dcc5+_0x2bfbf8(0xdf);_0x26aaa1(_0xbf5a51,'success');}catch(_0x5b6b44){console[_0x2bfbf8(0x91)](_0x2bfbf8(0xe3)+_0x45dcc5+')',_0x5b6b44),_0x26aaa1(_0x5b6b44[_0x2bfbf8(0xa8)]||_0x2bfbf8(0xd8)+_0x45dcc5[_0x2bfbf8(0xa7)](),_0x2bfbf8(0x91));}finally{await loadServerHealthMetrics(),_0x826df0(![]);}};_0x8ed5fc&&(_0x8ed5fc['onclick']=()=>_0x1b35dc(_0x5978cb(0xcd),()=>API[_0x5978cb(0x8a)]()));_0x8e1f79&&(_0x8e1f79[_0x5978cb(0xcb)]=()=>_0x1b35dc(_0x5978cb(0xb6),()=>API[_0x5978cb(0xa3)]()));_0x1e23c2&&(_0x1e23c2[_0x5978cb(0xcb)]=()=>_0x1b35dc(_0x5978cb(0xc6),()=>API[_0x5978cb(0xa6)]()));_0x317ec7&&_0x550c2d&&_0x4ccb68&&(_0x317ec7[_0x5978cb(0xcb)]=()=>{const _0x5d8036=_0x5978cb,_0x1b2c5d=_0x4ccb68[_0x5d8036(0xdd)]['toggle']('expanded');_0x550c2d[_0x5d8036(0xc0)]=!_0x1b2c5d,_0x317ec7[_0x5d8036(0x90)](_0x5d8036(0xd5),_0x1b2c5d?_0x5d8036(0x8b):_0x5d8036(0x94));});document[_0x5978cb(0x7a)](_0x5978cb(0x92),_0x380ff1);const _0x1165a9=_0x12ec3f['querySelector'](_0x5978cb(0xb7));_0x1165a9&&(_0x1165a9[_0x5978cb(0xcb)]=_0x5064fb);}function _0x5073(_0xc2296b,_0xcfc171){_0xc2296b=_0xc2296b-0x7a;const _0x34bbbf=_0x34bb();let _0x507335=_0x34bbbf[_0xc2296b];if(_0x5073['slvkvo']===undefined){var _0x5bc4e5=function(_0x170d44){const _0x2b8266='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4d41e2='',_0x6fce49='';for(let _0x46414f=0x0,_0x1decaf,_0x21b5d0,_0x2c6060=0x0;_0x21b5d0=_0x170d44['charAt'](_0x2c6060++);~_0x21b5d0&&(_0x1decaf=_0x46414f%0x4?_0x1decaf*0x40+_0x21b5d0:_0x21b5d0,_0x46414f++%0x4)?_0x4d41e2+=String['fromCharCode'](0xff&_0x1decaf>>(-0x2*_0x46414f&0x6)):0x0){_0x21b5d0=_0x2b8266['indexOf'](_0x21b5d0);}for(let _0xa80ae=0x0,_0x5ac408=_0x4d41e2['length'];_0xa80ae<_0x5ac408;_0xa80ae++){_0x6fce49+='%'+('00'+_0x4d41e2['charCodeAt'](_0xa80ae)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x6fce49);};_0x5073['BFAzlS']=_0x5bc4e5,_0x5073['BAIWSf']={},_0x5073['slvkvo']=!![];}const _0x5052aa=_0x34bbbf[0x0],_0x2da428=_0xc2296b+_0x5052aa,_0x40a7cd=_0x5073['BAIWSf'][_0x2da428];return!_0x40a7cd?(_0x507335=_0x5073['BFAzlS'](_0x507335),_0x5073['BAIWSf'][_0x2da428]=_0x507335):_0x507335=_0x40a7cd,_0x507335;}export{loadServerHealthMetrics};typeof window!==_0x230bfc(0xbc)&&(window['openServerHealthModal']=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
|
}
|