@profoundlogic/coderflow-server 0.2.5 → 0.2.6
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/dist/base-image/Dockerfile +5 -0
- package/dist/base-image/agent-wrapper.sh +12 -2
- package/dist/coder-server.js +1 -1
- package/dist/config.js +1 -1
- package/dist/lib/agent-keepalive.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/basic-auth.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/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/init.js +1 -1
- package/dist/lib/cli/jira.js +1 -1
- package/dist/lib/cli/license.js +1 -1
- package/dist/lib/cli/server-manager.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/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 -0
- package/dist/lib/jira-client.js +1 -1
- package/dist/lib/judge-blinding.js +1 -0
- package/dist/lib/logger.js +1 -1
- package/dist/lib/model-fetcher.js +1 -1
- package/dist/lib/notifications.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/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/request-url.js +1 -1
- package/dist/lib/rewind.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-generator.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/routes/apiKeys.js +1 -1
- package/dist/routes/auth-oidc.js +1 -1
- package/dist/routes/auth.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/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/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/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/comments-widget.js +1 -1
- package/dist/web-ui/public/diff-utils.js +1 -1
- package/dist/web-ui/public/environments.html +4 -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 -0
- 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/server-health.js +1 -1
- package/dist/web-ui/public/settings.css +48 -0
- package/dist/web-ui/public/settings.html +85 -2
- 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 +136 -2
- package/dist/web-ui/public/task.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.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x268e25,_0x1bf540){const _0x33c09c=_0x27cc,_0x4402a1=_0x268e25();while(!![]){try{const _0xd8b9ee=-parseInt(_0x33c09c(0x203))/0x1*(parseInt(_0x33c09c(0x1ff))/0x2)+parseInt(_0x33c09c(0x1f6))/0x3*(parseInt(_0x33c09c(0x1ed))/0x4)+parseInt(_0x33c09c(0x1e5))/0x5*(-parseInt(_0x33c09c(0x1e9))/0x6)+parseInt(_0x33c09c(0x1e3))/0x7+parseInt(_0x33c09c(0x1f4))/0x8+parseInt(_0x33c09c(0x1f7))/0x9*(parseInt(_0x33c09c(0x209))/0xa)+-parseInt(_0x33c09c(0x1fd))/0xb;if(_0xd8b9ee===_0x1bf540)break;else _0x4402a1['push'](_0x4402a1['shift']());}catch(_0x781e98){_0x4402a1['push'](_0x4402a1['shift']());}}}(_0x2adf,0xe34f8));function _0x2adf(){const _0x11a647=['mtG3odGXmhffv1zeCq','C2v0sxrLBq','z2v0qw5PBwf0Aw9UCW','y2XHC3nmAxn0','mJrAquHuseW','DhjHBNnMB3jTt3jPz2LU','Bwf4Aw1PEMvK','y2fUy2vS','nde2ntq5mKjWC1jSua','D2LSBenOyw5Nzq','yM90Aa','AgvPz2H0','zM9YrwfJAa','Bwf0y2HnzwrPyq','zwfZzq','mti0ndaZmtjVEwrkEu4','D2LKDgG','m2TKsgLhuW','mZq3odvSz1r1ufe','ywrKrxzLBNrmAxn0zw5LCG','y29UDgfPBNm','DhjHBNnSyxrLka','DhjHBNnMB3jT','DhjHBNnPDgLVBG','mtCZodu2nJvhC2Ler04','C3r5Bgu','mJu1mtbLAfLJu1K','khbYzwzLCNmTCMvKDwnLzc1TB3rPB246ihjLzhvJzsK','ChGSia','ChGPihnJywXLka','mtn6DeD3BKC','BM9Uzq','z2v0qM91BMrPBMDdBgLLBNrszwn0','Dg9W','CxvLCNLtzwXLy3rVCG','BgvMDa','mZq5mgLdq2zHuq','AxngAw5PDgu','mty0nJaXnvztC3zRza','Dg9WigXLzNq'];_0x2adf=function(){return _0x11a647;};return _0x2adf();}function _0x27cc(_0x514cd8,_0x43bf2a){_0x514cd8=_0x514cd8-0x1e3;const _0x2adf9b=_0x2adf();let _0x27cc87=_0x2adf9b[_0x514cd8];if(_0x27cc['AAnPVn']===undefined){var _0x4b777c=function(_0xa22889){const _0x343af5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x44eead='',_0x1c7307='';for(let _0x1126f1=0x0,_0x40fc05,_0x409e19,_0x42f923=0x0;_0x409e19=_0xa22889['charAt'](_0x42f923++);~_0x409e19&&(_0x40fc05=_0x1126f1%0x4?_0x40fc05*0x40+_0x409e19:_0x409e19,_0x1126f1++%0x4)?_0x44eead+=String['fromCharCode'](0xff&_0x40fc05>>(-0x2*_0x1126f1&0x6)):0x0){_0x409e19=_0x343af5['indexOf'](_0x409e19);}for(let _0x7ebc2f=0x0,_0x486d94=_0x44eead['length'];_0x7ebc2f<_0x486d94;_0x7ebc2f++){_0x1c7307+='%'+('00'+_0x44eead['charCodeAt'](_0x7ebc2f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1c7307);};_0x27cc['DYpDlC']=_0x4b777c,_0x27cc['JEOoyp']={},_0x27cc['AAnPVn']=!![];}const _0x2b9060=_0x2adf9b[0x0],_0x1de759=_0x514cd8+_0x2b9060,_0x19a08d=_0x27cc['JEOoyp'][_0x1de759];return!_0x19a08d?(_0x27cc87=_0x27cc['DYpDlC'](_0x27cc87),_0x27cc['JEOoyp'][_0x1de759]=_0x27cc87):_0x27cc87=_0x19a08d,_0x27cc87;}const DEFAULT_DURATION_MS=0xfa;function prefersReducedMotion(){const _0x1af9eb=_0x27cc;try{return window[_0x1af9eb(0x1f2)]&&window[_0x1af9eb(0x1f2)](_0x1af9eb(0x200))['matches'];}catch{return![];}}function safeCancelAnimations(_0x44eead){const _0x578042=_0x27cc;if(!_0x44eead||typeof _0x44eead[_0x578042(0x1e7)]!=='function')return;try{_0x44eead['getAnimations']()[_0x578042(0x1f1)](_0x1c7307=>_0x1c7307[_0x578042(0x1ec)]());}catch{}}function animateRestoreFlip({contentEl:_0x1126f1,fromRect:_0x40fc05,toRect:_0x409e19,durationMs:_0x42f923}){const _0x322b01=_0x27cc;if(!_0x1126f1)return;if(!_0x40fc05||!_0x409e19)return;if(prefersReducedMotion())return;const _0x7ebc2f=_0x409e19['width']||0x0,_0x486d94=_0x409e19[_0x322b01(0x1f0)]||0x0,_0x574a65=_0x40fc05[_0x322b01(0x1f5)]||0x0,_0x195812=_0x40fc05[_0x322b01(0x1f0)]||0x0;if(_0x7ebc2f<=0x0||_0x486d94<=0x0||_0x574a65<=0x0||_0x195812<=0x0)return;const _0x1ea173=_0x40fc05['left']-_0x409e19[_0x322b01(0x208)],_0x583815=_0x40fc05[_0x322b01(0x206)]-_0x409e19[_0x322b01(0x206)],_0x3d93fd=_0x574a65/_0x7ebc2f,_0x2673df=_0x195812/_0x486d94;if(!Number['isFinite'](_0x1ea173)||!Number[_0x322b01(0x20a)](_0x583815)||!Number[_0x322b01(0x20a)](_0x3d93fd)||!Number[_0x322b01(0x20a)](_0x2673df))return;safeCancelAnimations(_0x1126f1);const _0x1ab548=_0x1126f1['style'][_0x322b01(0x1fc)],_0x322d8e=_0x1126f1[_0x322b01(0x1fe)][_0x322b01(0x1ea)],_0x4100be=_0x1126f1[_0x322b01(0x1fe)][_0x322b01(0x1ee)];_0x1126f1[_0x322b01(0x1fe)]['transition']=_0x322b01(0x204),_0x1126f1['style'][_0x322b01(0x1ea)]=_0x322b01(0x1e4),_0x1126f1[_0x322b01(0x1fe)]['willChange']=_0x322b01(0x1fb);const _0x407fdc=_0x322b01(0x1fa)+_0x1ea173+_0x322b01(0x201)+_0x583815+_0x322b01(0x202)+_0x3d93fd+',\x20'+_0x2673df+')',_0x477942=_0x1126f1['animate']([{'transform':_0x407fdc},{'transform':_0x322b01(0x204)}],{'duration':_0x42f923,'easing':_0x322b01(0x1f3),'fill':_0x322b01(0x1ef)}),_0x328bb0=()=>{const _0x2c5ef9=_0x322b01;_0x1126f1[_0x2c5ef9(0x1fe)][_0x2c5ef9(0x1fc)]=_0x1ab548,_0x1126f1[_0x2c5ef9(0x1fe)][_0x2c5ef9(0x1ea)]=_0x322d8e,_0x1126f1[_0x2c5ef9(0x1fe)]['willChange']=_0x4100be;};_0x477942[_0x322b01(0x1f8)]('finish',_0x328bb0,{'once':!![]}),_0x477942[_0x322b01(0x1f8)]('cancel',_0x328bb0,{'once':!![]});}export function toggleModalMaximize(_0x19be79,_0x5606c9={}){const _0x178d0d=_0x27cc;if(!_0x19be79)return;const {storageKey:_0x559ec4,updateIcon:_0x2d9c3e,onAfterToggle:_0xf4be60,durationMs:durationMs=DEFAULT_DURATION_MS}=_0x5606c9,_0x1ae1e1=_0x19be79[_0x178d0d(0x207)]('.modal-content'),_0x3e55f4=_0x19be79['classList'][_0x178d0d(0x1f9)](_0x178d0d(0x1eb)),_0x47155b=!_0x3e55f4;if(!_0x1ae1e1){_0x19be79[_0x178d0d(0x1e8)]['toggle']('maximized'),_0x2d9c3e?.(_0x47155b),_0xf4be60?.(_0x47155b);if(_0x559ec4)try{localStorage[_0x178d0d(0x1e6)](_0x559ec4,String(_0x47155b));}catch{}return;}if(_0x3e55f4&&!prefersReducedMotion()){const _0x2d12de=_0x1ae1e1[_0x178d0d(0x205)]();_0x19be79['classList']['remove']('maximized');const _0x11911c=_0x1ae1e1[_0x178d0d(0x205)]();animateRestoreFlip({'contentEl':_0x1ae1e1,'fromRect':_0x2d12de,'toRect':_0x11911c,'durationMs':durationMs});}else _0x19be79[_0x178d0d(0x1e8)]['toggle'](_0x178d0d(0x1eb));_0x2d9c3e?.(_0x47155b),_0xf4be60?.(_0x47155b);if(_0x559ec4)try{localStorage['setItem'](_0x559ec4,String(_0x47155b));}catch{}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function _0x2ace(_0x1f5fda,_0x350663){_0x1f5fda=_0x1f5fda-0x11d;const _0x5d674c=_0x5d67();let _0x2aced3=_0x5d674c[_0x1f5fda];if(_0x2ace['pHnzZE']===undefined){var _0xa69df6=function(_0x47748f){const _0x4d5ab0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x368c66='',_0x4c735e='';for(let _0x4a9151=0x0,_0x5c9d1a,_0x546e07,_0x3f657d=0x0;_0x546e07=_0x47748f['charAt'](_0x3f657d++);~_0x546e07&&(_0x5c9d1a=_0x4a9151%0x4?_0x5c9d1a*0x40+_0x546e07:_0x546e07,_0x4a9151++%0x4)?_0x368c66+=String['fromCharCode'](0xff&_0x5c9d1a>>(-0x2*_0x4a9151&0x6)):0x0){_0x546e07=_0x4d5ab0['indexOf'](_0x546e07);}for(let _0x32eb70=0x0,_0xa82b2e=_0x368c66['length'];_0x32eb70<_0xa82b2e;_0x32eb70++){_0x4c735e+='%'+('00'+_0x368c66['charCodeAt'](_0x32eb70)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4c735e);};_0x2ace['VqrFom']=_0xa69df6,_0x2ace['yBNMbk']={},_0x2ace['pHnzZE']=!![];}const _0xff81bf=_0x5d674c[0x0],_0x3f991d=_0x1f5fda+_0xff81bf,_0x5c411a=_0x2ace['yBNMbk'][_0x3f991d];return!_0x5c411a?(_0x2aced3=_0x2ace['VqrFom'](_0x2aced3),_0x2ace['yBNMbk'][_0x3f991d]=_0x2aced3):_0x2aced3=_0x5c411a,_0x2aced3;}function _0x5d67(){const _0x1f8fa9=['vgvZDa','zMfPBgvK','AxntDxbWB3j0zwq','C3rHDhvZ','Dw5ZDxbWB3j0zwq','mZm5otu3mvDutwjPwG','AxnfBMfIBgvK','BMfTzq','DgfZA0LK','Aw5ZDhj1y3rPB25Z','yMfKz2u','A2v5','nZeZnJaXmgHWwMngsW','mtGWotuZmuXnA0npwa','y2HHCKf0','AgfZ','tM90AwzPy2f0Aw9UihbLCM1PC3nPB24GBM90igDYyw50zwq','q09ervjFquDftLq','rgvWBg95oIa','BM90AwzPy2f0Aw9UCY1LBMfIBgvK','DgfZA1r5Cgu','y29TCgXLDgvK','DgfZAY5ODg1Sp2LKpq','zM9SBg93vxbiAxn0B3j5','C3vIC3rYAw5N','zgvZy3jPChrPB24','CgvYBwLZC2LVBG','zM9JDxm','AwnVBG','BgvUz3rO','AxnbCNjHEq','mJyYmhfVtvz1wa','mJu3oti1yNnRtMnr','nZHfuK1qv0u','zM9YrwfJAa','DgvZDe5HBwu','l2zHDMLJB24UAwnV','ChvZAa','zgvUAwvK','ic0G','DgvZDa','x2jSyw5R','yM9KEq','Dhj1zq','mtGYmKHsBLH0Aa','ChjLDMvUDerLzMf1Bhq','BM90AwzPzwqT','mtu2otmYmg16vvLrqW','w0zVBgXVDY11Cf0G','y2XVC2u','CMvTB3zLsxrLBq','CMvXDwLYzuLUDgvYywn0Aw9U','zMfSC2u','z3jHBNrLza','zgvWBg95uhjVzMLSzq','odK0ELD2tgX6','nZa5ywnXBKTf','zxHPDenVzgu','4PYfifrHC2SGq29TCgXLDgvKifn1y2nLC3nMDwXSEq','lI4U','DgfN','vgvZDdOG','zxjYB3i','B25JBgLJAW','B25dBgLJAW','4P2mifrHC2SGrMfPBgvK','D2fYBG','zhvYyxrPB24','DhjPBq','rgvWBg95','tM90AwzPy2f0Aw9UCYbHCMuGBM90ihn1ChbVCNrLzcbPBIb0AgLZigjYB3DZzxi','C2HVDW'];_0x5d67=function(){return _0x1f8fa9;};return _0x5d67();}(function(_0x4ce161,_0x39a044){const _0x537aa3=_0x2ace,_0x14ffee=_0x4ce161();while(!![]){try{const _0x57e610=-parseInt(_0x537aa3(0x14c))/0x1*(-parseInt(_0x537aa3(0x140))/0x2)+parseInt(_0x537aa3(0x14b))/0x3*(parseInt(_0x537aa3(0x133))/0x4)+-parseInt(_0x537aa3(0x134))/0x5*(parseInt(_0x537aa3(0x135))/0x6)+-parseInt(_0x537aa3(0x161))/0x7+-parseInt(_0x537aa3(0x143))/0x8+parseInt(_0x537aa3(0x121))/0x9+parseInt(_0x537aa3(0x120))/0xa;if(_0x57e610===_0x39a044)break;else _0x14ffee['push'](_0x14ffee['shift']());}catch(_0x4ea6cf){_0x14ffee['push'](_0x14ffee['shift']());}}}(_0x5d67,0x6277e));export const NotificationManager={'isSupported'(){return'Notification'in window;},'isEnabled'(){const _0x1a1b01=_0x2ace;if(!this[_0x1a1b01(0x15e)]())return![];return localStorage['getItem']('notifications-enabled')===_0x1a1b01(0x13f);},'setEnabled'(_0x368c66){const _0x58ba15=_0x2ace;localStorage['setItem'](_0x58ba15(0x127),_0x368c66?'true':_0x58ba15(0x148));},'getPermission'(){const _0xa00c1=_0x2ace;if(!this[_0xa00c1(0x15e)]())return _0xa00c1(0x160);return Notification['permission'];},async 'requestPermission'(){const _0x36e6aa=_0x2ace;if(!this[_0x36e6aa(0x15e)]())return _0x36e6aa(0x160);if(Notification[_0x36e6aa(0x12e)]===_0x36e6aa(0x149))return'granted';if(Notification['permission']==='denied')return _0x36e6aa(0x13a);try{const _0x4c735e=await Notification['requestPermission']();return _0x4c735e;}catch(_0x4a9151){return console[_0x36e6aa(0x152)]('Failed\x20to\x20request\x20notification\x20permission:',_0x4a9151),_0x36e6aa(0x13a);}},async 'show'(_0x5c9d1a,_0x546e07={}){const _0x3ba66c=_0x2ace;if(!this[_0x3ba66c(0x162)]())return null;if(!this[_0x3ba66c(0x15e)]())return console[_0x3ba66c(0x156)](_0x3ba66c(0x15a)),null;if(Notification[_0x3ba66c(0x12e)]!==_0x3ba66c(0x149))return console[_0x3ba66c(0x156)](_0x3ba66c(0x124)),null;try{const _0x3f657d=new Notification(_0x5c9d1a,{'icon':_0x546e07[_0x3ba66c(0x130)]||_0x3ba66c(0x138),'badge':_0x546e07[_0x3ba66c(0x11e)]||_0x3ba66c(0x138),'body':_0x546e07[_0x3ba66c(0x13e)]||'','tag':_0x546e07[_0x3ba66c(0x150)]||'','requireInteraction':_0x546e07[_0x3ba66c(0x147)]||![],'silent':_0x546e07['silent']||![],'data':_0x546e07['data']||{}});_0x546e07[_0x3ba66c(0x154)]&&(_0x3f657d[_0x3ba66c(0x153)]=_0x32eb70=>{const _0x46db9=_0x3ba66c;_0x32eb70[_0x46db9(0x141)](),window[_0x46db9(0x12f)](),_0x546e07[_0x46db9(0x154)](_0x32eb70,_0x3f657d),_0x3f657d['close']();});if(!_0x546e07[_0x3ba66c(0x147)]){const _0xa82b2e=_0x546e07[_0x3ba66c(0x157)]||0x1388;setTimeout(()=>{const _0x247fc8=_0x3ba66c;_0x3f657d[_0x247fc8(0x145)]();},_0xa82b2e);}return _0x3f657d;}catch(_0x10c2fb){return console[_0x3ba66c(0x152)]('Failed\x20to\x20show\x20notification:',_0x10c2fb),null;}},async 'notifyTaskComplete'(_0x1a4aff){const _0x3d304b=_0x2ace,_0x5cfe4c=_0x1a4aff['exitCode']!==undefined?_0x1a4aff[_0x3d304b(0x14d)]:_0x1a4aff['exit_code'],_0xb893f2=_0x1a4aff[_0x3d304b(0x15f)]===_0x3d304b(0x129)&&_0x5cfe4c===0x0,_0x15f0c8=_0xb893f2?_0x3d304b(0x14e):_0x3d304b(0x155);let _0x1a2694;if(_0x1a4aff[_0x3d304b(0x128)]===_0x3d304b(0x13c)){const _0x2aa247=_0x1a4aff[_0x3d304b(0x137)]||_0x3d304b(0x15c),_0x10fd02=_0x1a4aff['testDescription']||_0x1a4aff[_0x3d304b(0x12d)]||'';if(_0x10fd02&&_0x10fd02[_0x3d304b(0x131)]>0x0){let _0x467449=_0x10fd02;_0x10fd02[_0x3d304b(0x131)]>0x50&&(_0x467449=_0x10fd02[_0x3d304b(0x12c)](0x0,0x4d)+_0x3d304b(0x14f)),_0x1a2694=_0x3d304b(0x151)+_0x2aa247+'\x20-\x20'+_0x467449;}else _0x1a2694=_0x3d304b(0x151)+_0x2aa247;}else{if(_0x1a4aff['taskType']==='deploy'){const _0x322c2a=_0x1a4aff[_0x3d304b(0x14a)]||_0x3d304b(0x159),_0x44895a=_0x1a4aff['deployDescription']||_0x1a4aff[_0x3d304b(0x12d)]||'';if(_0x44895a&&_0x44895a[_0x3d304b(0x131)]>0x0){let _0x223143=_0x44895a;_0x44895a[_0x3d304b(0x131)]>0x50&&(_0x223143=_0x44895a['substring'](0x0,0x4d)+_0x3d304b(0x14f)),_0x1a2694=_0x3d304b(0x126)+_0x322c2a+_0x3d304b(0x13b)+_0x223143;}else _0x1a2694='Deploy:\x20'+_0x322c2a;}else{const _0x3e40fc=_0x1a4aff[_0x3d304b(0x163)]?_0x1a4aff[_0x3d304b(0x163)][_0x3d304b(0x158)]():null,_0x3a2139=_0x1a4aff['envVars']?.[_0x3d304b(0x125)]||_0x1a4aff['envVars']?.['default_agent']||'Unknown',_0x451de0=_0x3a2139[_0x3d304b(0x122)](0x0)['toUpperCase']()+_0x3a2139['slice'](0x1);let _0x16a0b0,_0x49b235=![];if(_0x1a4aff[_0x3d304b(0x12b)]&&Array[_0x3d304b(0x132)](_0x1a4aff[_0x3d304b(0x12b)])&&_0x1a4aff['followUpHistory'][_0x3d304b(0x131)]>0x0){const _0x1c6665=_0x1a4aff[_0x3d304b(0x12b)][_0x1a4aff[_0x3d304b(0x12b)][_0x3d304b(0x131)]-0x1];_0x16a0b0=_0x1c6665['instructions'],_0x49b235=!![];}else _0x16a0b0=_0x1a4aff[_0x3d304b(0x12d)]||_0x1a4aff[_0x3d304b(0x11d)]||_0x1a4aff[_0x3d304b(0x164)];_0x16a0b0[_0x3d304b(0x131)]>0x64&&(_0x16a0b0=_0x16a0b0['substring'](0x0,0x61)+_0x3d304b(0x14f));const _0x4c41f4=_0x49b235?_0x3d304b(0x144):'';_0x3e40fc?_0x1a2694=_0x3e40fc+'\x0a'+_0x451de0+':\x20'+_0x4c41f4+_0x16a0b0:_0x1a2694=_0x451de0+':\x20'+_0x4c41f4+_0x16a0b0;}}return this[_0x3d304b(0x15b)](_0x15f0c8,{'body':_0x1a2694,'tag':'task-'+_0x1a4aff[_0x3d304b(0x164)],'requireInteraction':![],'duration':0x1f40,'data':{'taskId':_0x1a4aff[_0x3d304b(0x164)]},'onClick':(_0x1d924a,_0x3184db)=>{const _0x4bad10=_0x3d304b;window['open'](_0x4bad10(0x12a)+_0x1a4aff[_0x4bad10(0x164)],_0x4bad10(0x13d));}});},'shouldNotify'(_0x3431c9,_0xe1812c){const _0x56f4a4=_0x2ace;if(!this[_0x56f4a4(0x162)]())return![];if(_0x3431c9[_0x56f4a4(0x15f)]!==_0x56f4a4(0x129)&&_0x3431c9['status']!==_0x56f4a4(0x15d))return![];if(!_0xe1812c[_0x56f4a4(0x123)](_0x3431c9[_0x56f4a4(0x164)]))return![];const _0x2cf122='notified-'+_0x3431c9[_0x56f4a4(0x164)];if(sessionStorage['getItem'](_0x2cf122)==='true')return![];return!![];},'markNotified'(_0x2b5c41){const _0x2c5314=_0x2ace;sessionStorage['setItem'](_0x2c5314(0x142)+_0x2b5c41,_0x2c5314(0x13f));},'clearNotificationHistory'(){const _0xe49236=_0x2ace,_0x2c2281=[];for(let _0x51e502=0x0;_0x51e502<sessionStorage[_0xe49236(0x131)];_0x51e502++){const _0x30f8ef=sessionStorage[_0xe49236(0x11f)](_0x51e502);_0x30f8ef['startsWith'](_0xe49236(0x142))&&_0x2c2281[_0xe49236(0x139)](_0x30f8ef);}_0x2c2281[_0xe49236(0x136)](_0x510df7=>sessionStorage[_0xe49236(0x146)](_0x510df7));}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x2fd96d=_0x14fa;(function(_0x3b91e3,_0x3fb3d7){const _0x346e14=_0x14fa,_0x116ac8=_0x3b91e3();while(!![]){try{const _0x469ed4=parseInt(_0x346e14(0xd8))/0x1*(parseInt(_0x346e14(0xf5))/0x2)+parseInt(_0x346e14(0xf6))/0x3*(parseInt(_0x346e14(0x12c))/0x4)+-parseInt(_0x346e14(0x11d))/0x5*(parseInt(_0x346e14(0x11e))/0x6)+-parseInt(_0x346e14(0x10c))/0x7+-parseInt(_0x346e14(0xf1))/0x8+parseInt(_0x346e14(0x132))/0x9+-parseInt(_0x346e14(0xea))/0xa;if(_0x469ed4===_0x3fb3d7)break;else _0x116ac8['push'](_0x116ac8['shift']());}catch(_0x174b6d){_0x116ac8['push'](_0x116ac8['shift']());}}}(_0x11fd,0x22872));import{API}from'./app.js';function _0x14fa(_0x1b2583,_0x275144){_0x1b2583=_0x1b2583-0xd8;const _0x11fd6b=_0x11fd();let _0x14fa7b=_0x11fd6b[_0x1b2583];if(_0x14fa['AHNdUp']===undefined){var _0x2d99ec=function(_0xe4adc9){const _0x248d64='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2c0717='',_0x3ecbc8='';for(let _0x2cafeb=0x0,_0x553f44,_0x3ef6bb,_0x1b5636=0x0;_0x3ef6bb=_0xe4adc9['charAt'](_0x1b5636++);~_0x3ef6bb&&(_0x553f44=_0x2cafeb%0x4?_0x553f44*0x40+_0x3ef6bb:_0x3ef6bb,_0x2cafeb++%0x4)?_0x2c0717+=String['fromCharCode'](0xff&_0x553f44>>(-0x2*_0x2cafeb&0x6)):0x0){_0x3ef6bb=_0x248d64['indexOf'](_0x3ef6bb);}for(let _0x4dc166=0x0,_0x193ab9=_0x2c0717['length'];_0x4dc166<_0x193ab9;_0x4dc166++){_0x3ecbc8+='%'+('00'+_0x2c0717['charCodeAt'](_0x4dc166)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ecbc8);};_0x14fa['ppwmYS']=_0x2d99ec,_0x14fa['xOIWBi']={},_0x14fa['AHNdUp']=!![];}const _0x6b2e37=_0x11fd6b[0x0],_0x3bb9b5=_0x1b2583+_0x6b2e37,_0x5d865c=_0x14fa['xOIWBi'][_0x3bb9b5];return!_0x5d865c?(_0x14fa7b=_0x14fa['ppwmYS'](_0x14fa7b),_0x14fa['xOIWBi'][_0x3bb9b5]=_0x14fa7b):_0x14fa7b=_0x5d865c,_0x14fa7b;}let modalInjected=![];const SERVER_HEALTH_MODAL_HTML=_0x2fd96d(0x11f);function ensureModalExists(){const _0x5eecdd=_0x2fd96d;if(modalInjected||document[_0x5eecdd(0x133)](_0x5eecdd(0x12a)))return;const _0x2c0717=document[_0x5eecdd(0x10f)](_0x5eecdd(0xe9));_0x2c0717[_0x5eecdd(0x123)]=SERVER_HEALTH_MODAL_HTML,document[_0x5eecdd(0xfb)][_0x5eecdd(0x102)](_0x2c0717[_0x5eecdd(0x13c)]),modalInjected=!![];}function clampPercent(_0x3ecbc8){const _0x137186=_0x2fd96d;if(!Number[_0x137186(0xe0)](_0x3ecbc8))return 0x0;return Math[_0x137186(0xec)](0x0,Math['min'](0x64,Math['round'](_0x3ecbc8)));}function setMetricProgress(_0x2cafeb,_0x553f44,_0x3ef6bb='ok'){const _0x5269de=_0x2fd96d,_0x1b5636=document[_0x5269de(0x133)](_0x2cafeb);if(!_0x1b5636)return;const _0x4dc166=_0x1b5636[_0x5269de(0x113)],_0x193ab9=clampPercent(_0x553f44);_0x1b5636[_0x5269de(0xdd)][_0x5269de(0x13e)]=_0x193ab9+'%',_0x1b5636[_0x5269de(0xfa)]['remove'](_0x5269de(0xe2),_0x5269de(0x100),_0x5269de(0x13f)),_0x1b5636[_0x5269de(0xfa)][_0x5269de(0xf9)](_0x3ef6bb===_0x5269de(0x103)?_0x5269de(0x13f):_0x3ef6bb===_0x5269de(0x137)?'status-warning':'status-ok'),_0x4dc166&&_0x4dc166[_0x5269de(0x141)]('aria-valuenow',String(_0x193ab9));}function statusFromPercent(_0x5554a1){const _0x4f2301=_0x2fd96d;if(_0x5554a1>=0x5a)return _0x4f2301(0x103);if(_0x5554a1>=0x4b)return _0x4f2301(0x137);return'ok';}async function loadServerHealthMetrics(){const _0x4e5ca0=_0x2fd96d,_0x1028cf=document[_0x4e5ca0(0x133)](_0x4e5ca0(0xe3)),_0x996ba1=document[_0x4e5ca0(0x133)]('server-health-error'),_0x3168c3=document[_0x4e5ca0(0x133)](_0x4e5ca0(0x12f));if(!_0x1028cf||!_0x996ba1||!_0x3168c3)return;_0x1028cf[_0x4e5ca0(0xfd)]=_0x4e5ca0(0x136);try{const _0xc8d22c=await fetch('/health/metrics',{'method':'GET','headers':{'Content-Type':_0x4e5ca0(0x12d)},'credentials':_0x4e5ca0(0xdf)});if(!_0xc8d22c['ok'])throw new Error(_0x4e5ca0(0xdb)+_0xc8d22c['statusText']);const _0x4a673c=await _0xc8d22c[_0x4e5ca0(0x13b)]();document[_0x4e5ca0(0x133)](_0x4e5ca0(0xf2))[_0x4e5ca0(0xfd)]=_0x4a673c['cpu'][_0x4e5ca0(0x119)],document[_0x4e5ca0(0x133)]('memory-usage')[_0x4e5ca0(0xfd)]=_0x4a673c[_0x4e5ca0(0x112)][_0x4e5ca0(0x119)],document['getElementById'](_0x4e5ca0(0xf8))['textContent']=_0x4a673c[_0x4e5ca0(0xe7)][_0x4e5ca0(0x119)],document[_0x4e5ca0(0x133)](_0x4e5ca0(0xda))[_0x4e5ca0(0xfd)]=_0x4a673c['docker'][_0x4e5ca0(0x119)],document[_0x4e5ca0(0x133)](_0x4e5ca0(0x11b))['textContent']=_0x4a673c['uptime'][_0x4e5ca0(0x119)],document[_0x4e5ca0(0x133)](_0x4e5ca0(0x140))['textContent']=_0x4a673c['sessions']['display'],setMetricProgress(_0x4e5ca0(0x131),_0x4a673c[_0x4e5ca0(0x120)][_0x4e5ca0(0x104)],statusFromPercent(_0x4a673c[_0x4e5ca0(0x120)]['percent'])),setMetricProgress('memory-progress',_0x4a673c[_0x4e5ca0(0x112)]['percent'],statusFromPercent(_0x4a673c[_0x4e5ca0(0x112)][_0x4e5ca0(0x104)])),setMetricProgress('disk-progress',_0x4a673c[_0x4e5ca0(0xe7)]['percent'],statusFromPercent(_0x4a673c[_0x4e5ca0(0xe7)][_0x4e5ca0(0x104)]));const _0x4f078b=_0x4a673c['docker'][_0x4e5ca0(0xe4)]>0x0?_0x4a673c[_0x4e5ca0(0x142)][_0x4e5ca0(0x10e)]/_0x4a673c[_0x4e5ca0(0x142)][_0x4e5ca0(0xe4)]*0x64:0x0;setMetricProgress('docker-progress',_0x4f078b);if(_0x4a673c[_0x4e5ca0(0x12e)]){const _0x4ff6fb=document[_0x4e5ca0(0x133)](_0x4e5ca0(0x11a));document[_0x4e5ca0(0x133)](_0x4e5ca0(0x138))[_0x4e5ca0(0xfd)]=_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0x119)];const _0xa292e0=document[_0x4e5ca0(0x133)](_0x4e5ca0(0x110));_0x4a673c['dockerStorage'][_0x4e5ca0(0x134)]?(_0xa292e0[_0x4e5ca0(0xfd)]=_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0x134)],_0xa292e0['hidden']=![]):_0xa292e0[_0x4e5ca0(0x139)]=!![];document['getElementById'](_0x4e5ca0(0xff))[_0x4e5ca0(0xfd)]=_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0x129)],document[_0x4e5ca0(0x133)](_0x4e5ca0(0xf7))[_0x4e5ca0(0xfd)]=_0x4a673c['dockerStorage'][_0x4e5ca0(0x121)][_0x4e5ca0(0x119)],document[_0x4e5ca0(0x133)]('docker-storage-containers')[_0x4e5ca0(0xfd)]=_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0x109)][_0x4e5ca0(0x119)],document['getElementById'](_0x4e5ca0(0x127))['textContent']=_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0x10b)]['display'],document[_0x4e5ca0(0x133)](_0x4e5ca0(0xf3))[_0x4e5ca0(0xfd)]=_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0x114)][_0x4e5ca0(0x119)],setMetricProgress(_0x4e5ca0(0x128),_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0x104)],_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0xde)]),_0x4ff6fb[_0x4e5ca0(0xfa)][_0x4e5ca0(0x124)](_0x4e5ca0(0x100),'status-critical');if(_0x4a673c[_0x4e5ca0(0x12e)][_0x4e5ca0(0xde)]===_0x4e5ca0(0x103))_0x4ff6fb[_0x4e5ca0(0xfa)][_0x4e5ca0(0xf9)](_0x4e5ca0(0x13f));else _0x4a673c['dockerStorage']['status']==='warning'&&_0x4ff6fb[_0x4e5ca0(0xfa)][_0x4e5ca0(0xf9)](_0x4e5ca0(0x100));}_0x1028cf['hidden']=!![],_0x3168c3[_0x4e5ca0(0x139)]=![];}catch(_0x3bdef6){console[_0x4e5ca0(0x10d)](_0x4e5ca0(0xd9),_0x3bdef6),_0x1028cf['hidden']=!![],_0x996ba1[_0x4e5ca0(0x139)]=![],_0x996ba1[_0x4e5ca0(0xfd)]=_0x4e5ca0(0x116)+_0x3bdef6[_0x4e5ca0(0x13d)];}}function _0x11fd(){const _0x435a72=['C3r5Bgu','C3rHDhvZ','Aw5JBhvKzq','AxngAw5PDgu','C3rVCefSBenVBNrHAw5LCNm','C3rHDhvZlw9R','C2vYDMvYlwHLywX0Ac1SB2fKAw5N','Dg90ywW','y2XLyw51Cc1JB250zw50','Dg9Nz2XL','zgLZAW','Aw5MBW','zgL2','mJeXndm3mej2z2LJAa','rxnJyxbL','Bwf4','C2vYDMvYlwHLywX0Ac1JBg9Zzq','zxHWyw5Kzwq','ignVBxbSzxrLza','lM1VzgfSlw92zxjSyxK','mJiXmJqXnLj5qKXztG','y3b1lxvZywDL','zg9JA2vYlxn0B3jHz2uTyNvPBgrJywnOzq','A2v5','ng5mrLvlsG','nJblBhzsv0K','zg9JA2vYlxn0B3jHz2uTAw1Hz2vZ','zgLZAY11C2fNzq','ywrK','y2XHC3nmAxn0','yM9KEq','u2vYDMvYignSzwfUDxaGywn0Aw9UigzHAwXLzcaO','Dgv4DenVBNrLBNq','C2vYDMvYlwHLywX0Ac1VAW','zg9JA2vYlxn0B3jHz2uTCMvJBgfPBwfIBgu','C3rHDhvZlxDHCM5PBMC','u3rVChbPBMCGy29UDgfPBMvYCW','yxbWzw5Kq2HPBgq','y3jPDgLJywW','CgvYy2vUDa','A2v5zg93BG','zgLZywjSzwq','B25JBgLJAW','CMvTB3zLrxzLBNrmAxn0zw5LCG','y29UDgfPBMvYCW','yxjPys1LEhbHBMrLza','DM9SDw1LCW','mZqZt2Pfs2fV','zxjYB3i','CNvUBMLUzW','y3jLyxrLrwXLBwvUDa','zg9JA2vYlxn0B3jHz2uTyxzHAwXHyMXL','uhj1BMLUzYbeB2nRzxiGCMvZB3vYy2vZ','BwvTB3j5','CgfYzw50rwXLBwvUDa','yNvPBgrdywnOzq','y2XLyw51Cc1Zzwn0Aw9U','rMfPBgvKihrVigXVywqGC2vYDMvYig1LDhjPy3m6ia','B3bLBLnLCNzLCKHLywX0Ae1VzgfS','Dg9mB3DLCKnHC2u','zgLZCgXHEq','zg9JA2vYlxn0B3jHz2uTy2fYza','C2vYDMvYlxvWDgLTzq','zMfSC2u','nZbZD0vdwgC','nti5ntb5rgTlzwm','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','y3b1','Aw1Hz2vZ','y2XLyw51Cc10B2DNBgu','Aw5Uzxjive1m','CMvTB3zL','lI4U','Dhj1zq','zg9JA2vYlxn0B3jHz2uTDM9SDw1LCW','zg9JA2vYlxn0B3jHz2uTChjVz3jLC3m','CMvJBgfPBwfIBgveAxnWBgf5','C2vYDMvYlwHLywX0Ac1TB2rHBa','C2vYDMvYlxjLBw92zs1ZDg9WCgvK','ntiYmdrbv2vMAue','yxbWBgLJyxrPB24VANnVBG','zg9JA2vYu3rVCMfNzq','C2vYDMvYlwHLywX0Ac1JB250zw50','C2vYDMvYlxn0B3aTy29UDgfPBMvYCW','y3b1lxbYB2DYzxnZ','mJiYnZqXmhrHyNb5sG','z2v0rwXLBwvUDej5swq','yxzHAwXHyMXLrgLZCgXHEq','C3vJy2vZCW','tg9HzgLUzYbZzxj2zxiGBwv0CMLJCW','D2fYBMLUzW','zg9JA2vYlxn0B3jHz2uTDg90ywW','AgLKzgvU','C2vYDMvYlwHLywX0Ac1Hy3rPB24TC3rHDhvZ','ANnVBG','zMLYC3rfBgvTzw50q2HPBgq','BwvZC2fNzq','D2LKDgG','C3rHDhvZlwnYAxrPy2fS','ywn0AxzLlxnLC3nPB25Z','C2v0qxr0CMLIDxrL','zg9JA2vY','CMvTB3zLu3rVChbLzenVBNrHAw5LCNm','CxvLCNLtzwXLy3rVCG','mtiYmJuYquvvExDA','rMfPBgvKihrVigXVywqGC2vYDMvYigHLywX0AcbTzxrYAwnZoG','zg9JA2vYlwnVBNrHAw5LCNm','rMfPBgvKihrVigXVywqGBwv0CMLJCZOG','rMfPBgvKihDOAwXLia'];_0x11fd=function(){return _0x435a72;};return _0x11fd();}export async function openServerHealthModal(){const _0x4f0f68=_0x2fd96d;ensureModalExists();const _0x134246=document[_0x4f0f68(0x133)](_0x4f0f68(0x12a)),_0x478e2b=document['getElementById']('server-health-loading'),_0x1b9a81=document[_0x4f0f68(0x133)]('server-health-error'),_0x1519c8=document[_0x4f0f68(0x133)](_0x4f0f68(0x12f)),_0x3d7aa6=document[_0x4f0f68(0x133)](_0x4f0f68(0xed)),_0x13cb18=document[_0x4f0f68(0x133)](_0x4f0f68(0xfe)),_0x5b312f=document[_0x4f0f68(0x133)]('server-health-refresh'),_0xc75402=document['getElementById'](_0x4f0f68(0x130)),_0x53614e=document[_0x4f0f68(0x133)](_0x4f0f68(0x12b)),_0x5071c0=document[_0x4f0f68(0x133)]('server-prune-docker'),_0x3128cb=document[_0x4f0f68(0x133)](_0x4f0f68(0x13a)),_0x58bc5f=document[_0x4f0f68(0x133)](_0x4f0f68(0x122)),_0x24d9b8=document['getElementById'](_0x4f0f68(0xe5)),_0x3afa00=document[_0x4f0f68(0x133)](_0x4f0f68(0x115));if(!_0x134246)return;_0x134246[_0x4f0f68(0x139)]=![],_0x478e2b[_0x4f0f68(0x139)]=![],_0x1b9a81[_0x4f0f68(0x139)]=!![],_0x1519c8[_0x4f0f68(0x139)]=!![];_0x3128cb&&(_0x3128cb[_0x4f0f68(0x139)]=!![],_0x3128cb[_0x4f0f68(0xfd)]='',_0x3128cb[_0x4f0f68(0xfa)]['remove'](_0x4f0f68(0x135),_0x4f0f68(0x10d)));_0x3afa00&&_0x3afa00[_0x4f0f68(0xfa)][_0x4f0f68(0x124)](_0x4f0f68(0xee));_0x24d9b8&&(_0x24d9b8[_0x4f0f68(0x139)]=!![]);_0x58bc5f&&_0x58bc5f[_0x4f0f68(0x141)]('aria-expanded',_0x4f0f68(0x11c));const _0x834ef0=[_0xc75402,_0x53614e,_0x5071c0,_0x5b312f],_0x465542=_0x4e1348=>{_0x834ef0['forEach'](_0x7cdf7b=>{const _0x2a3753=_0x14fa;if(_0x7cdf7b)_0x7cdf7b[_0x2a3753(0x106)]=_0x4e1348;});},_0x45d971=(_0x2fe959,_0x551364=_0x4f0f68(0xe8))=>{const _0x7178d4=_0x4f0f68;if(!_0x3128cb)return;_0x3128cb['hidden']=![],_0x3128cb[_0x7178d4(0xfd)]=_0x2fe959,_0x3128cb[_0x7178d4(0xfa)]['remove'](_0x7178d4(0x135),_0x7178d4(0x10d));if(_0x551364===_0x7178d4(0x135))_0x3128cb[_0x7178d4(0xfa)][_0x7178d4(0xf9)](_0x7178d4(0x135));else _0x551364===_0x7178d4(0x10d)&&_0x3128cb[_0x7178d4(0xfa)][_0x7178d4(0xf9)](_0x7178d4(0x10d));};await loadServerHealthMetrics();const _0x47ac97=()=>{const _0x2e969a=_0x4f0f68;_0x134246[_0x2e969a(0x139)]=!![],document[_0x2e969a(0x108)](_0x2e969a(0x105),_0x4c363f);},_0x4c363f=_0x144d0b=>{const _0x2b7170=_0x4f0f68;_0x144d0b[_0x2b7170(0xf4)]===_0x2b7170(0xeb)&&!_0x134246[_0x2b7170(0x139)]&&_0x47ac97();};_0x3d7aa6[_0x4f0f68(0x107)]=_0x47ac97,_0x13cb18['onclick']=_0x47ac97,_0x5b312f[_0x4f0f68(0x107)]=async()=>{const _0x3c24f1=_0x4f0f68;_0x478e2b[_0x3c24f1(0x139)]=![],_0x1b9a81[_0x3c24f1(0x139)]=!![],_0x1519c8[_0x3c24f1(0x139)]=!![],await loadServerHealthMetrics();};const _0xa8026b=async(_0x4e906e,_0x2992a3)=>{const _0x50536f=_0x4f0f68;_0x478e2b[_0x50536f(0xfd)]=_0x4e906e,_0x478e2b[_0x50536f(0x139)]=![],_0x1b9a81[_0x50536f(0x139)]=!![],_0x1519c8[_0x50536f(0x139)]=!![],_0x465542(!![]),_0x45d971(_0x4e906e+_0x50536f(0x125));try{const _0x2c515d=await _0x2992a3(),_0xf1e517=_0x2c515d?.[_0x50536f(0x13d)]||_0x4e906e+_0x50536f(0xef);_0x45d971(_0xf1e517,'success');}catch(_0x30b704){console['error'](_0x50536f(0xfc)+_0x4e906e+')',_0x30b704),_0x45d971(_0x30b704[_0x50536f(0x13d)]||_0x50536f(0xdc)+_0x4e906e[_0x50536f(0x118)](),'error');}finally{await loadServerHealthMetrics(),_0x465542(![]);}};_0xc75402&&(_0xc75402[_0x4f0f68(0x107)]=()=>_0xa8026b(_0x4f0f68(0x101),()=>API[_0x4f0f68(0xe1)]()));_0x53614e&&(_0x53614e[_0x4f0f68(0x107)]=()=>_0xa8026b('Removing\x20stopped\x20containers',()=>API[_0x4f0f68(0x143)]()));_0x5071c0&&(_0x5071c0[_0x4f0f68(0x107)]=()=>_0xa8026b(_0x4f0f68(0x111),()=>API['pruneDockerResources']()));_0x58bc5f&&_0x24d9b8&&_0x3afa00&&(_0x58bc5f[_0x4f0f68(0x107)]=()=>{const _0x5751a5=_0x4f0f68,_0x33903a=_0x3afa00[_0x5751a5(0xfa)][_0x5751a5(0xe6)](_0x5751a5(0xee));_0x24d9b8[_0x5751a5(0x139)]=!_0x33903a,_0x58bc5f[_0x5751a5(0x141)](_0x5751a5(0x10a),_0x33903a?_0x5751a5(0x126):_0x5751a5(0x11c));});document['addEventListener'](_0x4f0f68(0x105),_0x4c363f);const _0x50cb5d=_0x134246[_0x4f0f68(0x144)](_0x4f0f68(0xf0));_0x50cb5d&&(_0x50cb5d[_0x4f0f68(0x107)]=_0x47ac97);}export{loadServerHealthMetrics};typeof window!=='undefined'&&(window[_0x2fd96d(0x117)]=openServerHealthModal);
|
|
1
|
+
const _0xc6d591=_0x3531;function _0x1706(){const _0xdd6eac=['uhj1BMLUzYbeB2nRzxiGCMvZB3vYy2vZ','AgLKzgvU','u2vYDMvYignSzwfUDxaGywn0Aw9UigzHAwXLzcaO','C2vYDMvYlwHLywX0Ac1JB250zw50','ANnVBG','zg9JA2vYlxn0B3jHz2uTy29UDgfPBMvYCW','lI4U','Aw5Uzxjive1m','C3rHDhvZlwnYAxrPy2fS','C2vYDMvYlwHLywX0Ac1LCNjVCG','BwvTB3j5lxvZywDL','CMvJBgfPBwfIBgveAxnWBgf5','zMLYC3rfBgvTzw50q2HPBgq','B3bLBLnLCNzLCKHLywX0Ae1VzgfS','CgfYzw50rwXLBwvUDa','CMvTB3zL','C2v0qxr0CMLIDxrL','zxHWyw5Kzwq','D2fYBMLUzW','zgLZAY1WCM9NCMvZCW','Aw1Hz2vZ','zM9YrwfJAa','zg9JA2vYlxn0B3jHz2uTAw1Hz2vZ','A2v5','yxjPys1LEhbHBMrLza','C3rVCefSBenVBNrHAw5LCNm','yxzHAwXHyMXLrgLZCgXHEq','BwvTB3j5lxbYB2DYzxnZ','BwvTB3j5','y2XHC3nmAxn0','tg9HzgLUzYbZzxj2zxiGBwv0CMLJCW','B25JBgLJAW','C2vYDMvYlxvWDgLTzq','y2XLyw51Cc1JB250zw50','DM9SDw1LCW','C2vYDMvYlwHLywX0Ac1SB2fKAw5N','Dgv4DenVBNrLBNq','zg9JA2vYlwnVBNrHAw5LCNm','nJq5odmYzLbPzMDu','A2v5zg93BG','C3rHDhvZlw9R','zgLZAW','ywn0AxzLlxnLC3nPB25Z','ywrK','y3b1lxvZywDL','y3b1','C3rHDhvZ','zg9JA2vY','y29UDgfPBMvYCW','rMfPBgvKihrVigXVywqGBwv0CMLJCZOG','zg9JA2vYlxn0B3jHz2uTChjVz3jLC3m','yxbWBgLJyxrPB24VANnVBG','ndjJrw5eu0m','mJq4otqWowDPAw9WrW','C2vYDMvYlwHLywX0Ac1YzwzYzxnO','C2vYDMvYlwHLywX0Ac1VAW','C2vYDMvYlxjLBw92zs1ZDg9WCgvK','C2vYDMvYlxn0B3aTy29UDgfPBMvYCW','yNvPBgrdywnOzq','rMfPBgvKihrVigXVywqGC2vYDMvYigHLywX0AcbTzxrYAwnZoG','oteZmty4y1rizNPd','Dg9mB3DLCKnHC2u','nti1nJq2CvPlywTs','nZe5ntK4qwTrsefA','C3vJy2vZCW','C2vYDMvYlxbYDw5LlwrVy2TLCG','C2vYDMvYlwHLywX0Ac1TB2rHBa','n29Uz0nYvq','y2XLyw51Cc10B2DNBgu','l2HLywX0Ac9TzxrYAwnZ','Aw5MBW','y3b1lxbYB2DYzxnZ','mZbJuunWvMu','BwLU','BwvZC2fNzq','rMfPBgvKihrVigXVywqGC2vYDMvYig1LDhjPy3m6ia','u3rVChbPBMCGy29UDgfPBMvYCW','CgvYy2vUDa','mta4mdq5AuLAs1jr','Dg90ywW','zMfSC2u','yxjPys12ywX1zw5VDW','z2v0rwXLBwvUDej5swq','C2vYDMvYlwHLywX0Ac1Hy3rPB24TC3rHDhvZ','C3rHDhvZlxDHCM5PBMC','C3rHDhvZvgv4Da','zg9JA2vYu3rVCMfNzq','zg9JA2vYlxn0B3jHz2uTyxzHAwXHyMXL','zgLZCgXHEq','ywrKrxzLBNrmAxn0zw5LCG','zg9JA2vYlxn0B3jHz2uTDM9SDw1LCW','Dxb0Aw1L','zg9JA2vYlxn0B3jHz2uTDg90ywW','Dw5KzwzPBMvK','zg9JA2vYlxn0B3jHz2uTy2fYza','zg9JA2vYlxn0B3jHz2uTCMvJBgfPBwfIBgu','C2vZC2LVBNm','y3jPDgLJywW','yxbWzw5Kq2HPBgq','lM1VzgfSlw92zxjSyxK','zg9JA2vYlxn0B3jHz2uTyNvPBgrJywnOzq','zxjYB3i','mJi1mJvbAfriBM8','Chj1BMveB2nRzxjszxnVDxjJzxm','r0vu','yM9KEq'];_0x1706=function(){return _0xdd6eac;};return _0x1706();}(function(_0x29187e,_0xab0436){const _0x28a80f=_0x3531,_0x10b6f6=_0x29187e();while(!![]){try{const _0x1f0f11=-parseInt(_0x28a80f(0xd9))/0x1+-parseInt(_0x28a80f(0xc9))/0x2+-parseInt(_0x28a80f(0xca))/0x3+-parseInt(_0x28a80f(0xb1))/0x4+parseInt(_0x28a80f(0xf1))/0x5*(-parseInt(_0x28a80f(0xbf))/0x6)+-parseInt(_0x28a80f(0xce))/0x7*(-parseInt(_0x28a80f(0xc7))/0x8)+-parseInt(_0x28a80f(0xc0))/0x9*(-parseInt(_0x28a80f(0xd3))/0xa);if(_0x1f0f11===_0xab0436)break;else _0x10b6f6['push'](_0x10b6f6['shift']());}catch(_0x3fa4bf){_0x10b6f6['push'](_0x10b6f6['shift']());}}}(_0x1706,0x21fd2));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 ensureModalExists(){const _0x65d7c6=_0x3531;if(modalInjected||document[_0x65d7c6(0xdd)]('server-health-modal'))return;const _0x272511=document['createElement']('div');_0x272511[_0x65d7c6(0xfc)]=SERVER_HEALTH_MODAL_HTML,document[_0x65d7c6(0xf4)][_0x65d7c6(0xed)](_0x272511[_0x65d7c6(0x101)]),modalInjected=!![];}function _0x3531(_0x50bfd2,_0xe08ff7){_0x50bfd2=_0x50bfd2-0xac;const _0x1706ba=_0x1706();let _0x353179=_0x1706ba[_0x50bfd2];if(_0x3531['ZKwiEQ']===undefined){var _0xaa60f4=function(_0x4f9c19){const _0x5e354b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x272511='',_0x124038='';for(let _0x285d2e=0x0,_0x510fd2,_0x135e6b,_0x322538=0x0;_0x135e6b=_0x4f9c19['charAt'](_0x322538++);~_0x135e6b&&(_0x510fd2=_0x285d2e%0x4?_0x510fd2*0x40+_0x135e6b:_0x135e6b,_0x285d2e++%0x4)?_0x272511+=String['fromCharCode'](0xff&_0x510fd2>>(-0x2*_0x285d2e&0x6)):0x0){_0x135e6b=_0x5e354b['indexOf'](_0x135e6b);}for(let _0x54e3a4=0x0,_0x5bb89=_0x272511['length'];_0x54e3a4<_0x5bb89;_0x54e3a4++){_0x124038+='%'+('00'+_0x272511['charCodeAt'](_0x54e3a4)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x124038);};_0x3531['ZXmSZO']=_0xaa60f4,_0x3531['IiWVsO']={},_0x3531['ZKwiEQ']=!![];}const _0x5ee4ec=_0x1706ba[0x0],_0x2ddbed=_0x50bfd2+_0x5ee4ec,_0x287856=_0x3531['IiWVsO'][_0x2ddbed];return!_0x287856?(_0x353179=_0x3531['ZXmSZO'](_0x353179),_0x3531['IiWVsO'][_0x2ddbed]=_0x353179):_0x353179=_0x287856,_0x353179;}function clampPercent(_0x124038){const _0x6d1a98=_0x3531;if(!Number['isFinite'](_0x124038))return 0x0;return Math['max'](0x0,Math[_0x6d1a98(0xd4)](0x64,Math['round'](_0x124038)));}function setMetricProgress(_0x285d2e,_0x510fd2,_0x135e6b='ok'){const _0x3087e1=_0x3531,_0x322538=document[_0x3087e1(0xdd)](_0x285d2e);if(!_0x322538)return;const _0x54e3a4=_0x322538[_0x3087e1(0x103)],_0x5bb89=clampPercent(_0x510fd2);_0x322538['style']['width']=_0x5bb89+'%',_0x322538[_0x3087e1(0x112)]['remove']('status-ok',_0x3087e1(0xdf),_0x3087e1(0xfd)),_0x322538['classList'][_0x3087e1(0xb6)](_0x135e6b==='critical'?_0x3087e1(0xfd):_0x135e6b===_0x3087e1(0x107)?_0x3087e1(0xdf):_0x3087e1(0xb3)),_0x54e3a4&&_0x54e3a4[_0x3087e1(0x105)](_0x3087e1(0xdc),String(_0x5bb89));}function statusFromPercent(_0x1bd5d5){const _0x23e3f4=_0x3531;if(_0x1bd5d5>=0x5a)return'critical';if(_0x1bd5d5>=0x4b)return _0x23e3f4(0x107);return'ok';}async function loadServerHealthMetrics(){const _0x9c17c7=_0x3531,_0x31ae73=document[_0x9c17c7(0xdd)]('server-health-loading'),_0x2d375c=document[_0x9c17c7(0xdd)](_0x9c17c7(0xfe)),_0x146545=document[_0x9c17c7(0xdd)]('server-health-content');if(!_0x31ae73||!_0x2d375c||!_0x146545)return;_0x31ae73[_0x9c17c7(0xaf)]=_0x9c17c7(0x113);try{const _0x593b02=await fetch(_0x9c17c7(0xd0),{'method':_0x9c17c7(0xf3),'headers':{'Content-Type':_0x9c17c7(0xbe)},'credentials':'include'});if(!_0x593b02['ok'])throw new Error(_0x9c17c7(0xbc)+_0x593b02[_0x9c17c7(0xe0)]);const _0x2d4ff7=await _0x593b02[_0x9c17c7(0xf9)]();document[_0x9c17c7(0xdd)](_0x9c17c7(0xb7))[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xb8)][_0x9c17c7(0xe3)],document[_0x9c17c7(0xdd)](_0x9c17c7(0xff))['textContent']=_0x2d4ff7['memory'][_0x9c17c7(0xe3)],document[_0x9c17c7(0xdd)]('disk-usage')[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xb4)][_0x9c17c7(0xe3)],document[_0x9c17c7(0xdd)](_0x9c17c7(0xb0))[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xba)][_0x9c17c7(0xe3)],document[_0x9c17c7(0xdd)](_0x9c17c7(0x115))[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xe6)][_0x9c17c7(0xe3)],document['getElementById'](_0x9c17c7(0xb5))['textContent']=_0x2d4ff7[_0x9c17c7(0xeb)][_0x9c17c7(0xe3)],setMetricProgress(_0x9c17c7(0xd2),_0x2d4ff7[_0x9c17c7(0xb8)][_0x9c17c7(0xd8)],statusFromPercent(_0x2d4ff7[_0x9c17c7(0xb8)][_0x9c17c7(0xd8)])),setMetricProgress(_0x9c17c7(0x110),_0x2d4ff7[_0x9c17c7(0x111)][_0x9c17c7(0xd8)],statusFromPercent(_0x2d4ff7[_0x9c17c7(0x111)][_0x9c17c7(0xd8)])),setMetricProgress(_0x9c17c7(0x108),_0x2d4ff7[_0x9c17c7(0xb4)][_0x9c17c7(0xd8)],statusFromPercent(_0x2d4ff7['disk'][_0x9c17c7(0xd8)]));const _0x296fc0=_0x2d4ff7[_0x9c17c7(0xba)][_0x9c17c7(0xda)]>0x0?_0x2d4ff7[_0x9c17c7(0xba)]['running']/_0x2d4ff7[_0x9c17c7(0xba)][_0x9c17c7(0xda)]*0x64:0x0;setMetricProgress('docker-progress',_0x296fc0);if(_0x2d4ff7['dockerStorage']){const _0x309515=document['getElementById'](_0x9c17c7(0xe9));document[_0x9c17c7(0xdd)](_0x9c17c7(0xe7))[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0xe3)];const _0xea58d7=document[_0x9c17c7(0xdd)](_0x9c17c7(0xe2));_0x2d4ff7['dockerStorage'][_0x9c17c7(0x10f)]?(_0xea58d7[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0x10f)],_0xea58d7[_0x9c17c7(0xf6)]=![]):_0xea58d7[_0x9c17c7(0xf6)]=!![];document['getElementById'](_0x9c17c7(0xea))[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0x100)],document[_0x9c17c7(0xdd)](_0x9c17c7(0x10b))['textContent']=_0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0x109)][_0x9c17c7(0xe3)],document['getElementById'](_0x9c17c7(0xfa))['textContent']=_0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0xbb)][_0x9c17c7(0xe3)],document[_0x9c17c7(0xdd)](_0x9c17c7(0xe5))[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0xad)][_0x9c17c7(0xe3)],document['getElementById'](_0x9c17c7(0xef))[_0x9c17c7(0xaf)]=_0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0xc5)][_0x9c17c7(0xe3)],setMetricProgress(_0x9c17c7(0xbd),_0x2d4ff7['dockerStorage'][_0x9c17c7(0xd8)],_0x2d4ff7[_0x9c17c7(0xe1)]['status']),_0x309515[_0x9c17c7(0x112)]['remove'](_0x9c17c7(0xdf),_0x9c17c7(0xfd));if(_0x2d4ff7['dockerStorage']['status']===_0x9c17c7(0xec))_0x309515[_0x9c17c7(0x112)][_0x9c17c7(0xb6)]('status-critical');else _0x2d4ff7[_0x9c17c7(0xe1)][_0x9c17c7(0xb9)]===_0x9c17c7(0x107)&&_0x309515[_0x9c17c7(0x112)][_0x9c17c7(0xb6)](_0x9c17c7(0xdf));}_0x31ae73['hidden']=!![],_0x146545[_0x9c17c7(0xf6)]=![];}catch(_0x43b4ed){console[_0x9c17c7(0xf0)](_0x9c17c7(0xc6),_0x43b4ed),_0x31ae73['hidden']=!![],_0x2d375c[_0x9c17c7(0xf6)]=![],_0x2d375c[_0x9c17c7(0xaf)]=_0x9c17c7(0xd6)+_0x43b4ed[_0x9c17c7(0xd5)];}}export async function openServerHealthModal(){const _0x309f25=_0x3531;ensureModalExists();const _0x51936a=document[_0x309f25(0xdd)](_0x309f25(0xcd)),_0x1bb36e=document['getElementById'](_0x309f25(0xae)),_0x22abc1=document[_0x309f25(0xdd)]('server-health-error'),_0x2afb32=document[_0x309f25(0xdd)](_0x309f25(0xf8)),_0xb62be4=document['getElementById']('server-health-close'),_0x3c5bf9=document[_0x309f25(0xdd)](_0x309f25(0xc2)),_0x16332a=document[_0x309f25(0xdd)](_0x309f25(0xc1)),_0x46245f=document[_0x309f25(0xdd)](_0x309f25(0xc4)),_0xea5f75=document[_0x309f25(0xdd)](_0x309f25(0xc3)),_0x560ed7=document[_0x309f25(0xdd)](_0x309f25(0xcc)),_0x2470da=document[_0x309f25(0xdd)](_0x309f25(0xde)),_0x18b819=document['getElementById'](_0x309f25(0xcf)),_0xe448d6=document[_0x309f25(0xdd)](_0x309f25(0xac)),_0x5444c2=document[_0x309f25(0xdd)]('cleanup-section');if(!_0x51936a)return;_0x51936a[_0x309f25(0xf6)]=![],_0x1bb36e[_0x309f25(0xf6)]=![],_0x22abc1['hidden']=!![],_0x2afb32['hidden']=!![];_0x2470da&&(_0x2470da[_0x309f25(0xf6)]=!![],_0x2470da[_0x309f25(0xaf)]='',_0x2470da['classList'][_0x309f25(0x104)](_0x309f25(0xcb),_0x309f25(0xf0)));_0x5444c2&&_0x5444c2['classList'][_0x309f25(0x104)](_0x309f25(0x106));_0xe448d6&&(_0xe448d6[_0x309f25(0xf6)]=!![]);_0x18b819&&_0x18b819[_0x309f25(0x105)]('aria-expanded',_0x309f25(0xdb));const _0x43b860=[_0x46245f,_0xea5f75,_0x560ed7,_0x16332a],_0x2c12a5=_0x1c174e=>{const _0x2b50f9=_0x309f25;_0x43b860[_0x2b50f9(0x10a)](_0x32a3bf=>{if(_0x32a3bf)_0x32a3bf['disabled']=_0x1c174e;});},_0x2d708a=(_0x382e39,_0x37b580=_0x309f25(0xd1))=>{const _0x7679ab=_0x309f25;if(!_0x2470da)return;_0x2470da[_0x7679ab(0xf6)]=![],_0x2470da['textContent']=_0x382e39,_0x2470da['classList']['remove'](_0x7679ab(0xcb),_0x7679ab(0xf0));if(_0x37b580===_0x7679ab(0xcb))_0x2470da[_0x7679ab(0x112)][_0x7679ab(0xb6)](_0x7679ab(0xcb));else _0x37b580==='error'&&_0x2470da[_0x7679ab(0x112)][_0x7679ab(0xb6)](_0x7679ab(0xf0));};await loadServerHealthMetrics();const _0x4ce60f=()=>{const _0x126242=_0x309f25;_0x51936a[_0x126242(0xf6)]=!![],document['removeEventListener'](_0x126242(0xb2),_0x47f190);},_0x47f190=_0x2d89b8=>{const _0x4ede44=_0x309f25;_0x2d89b8[_0x4ede44(0x10c)]==='Escape'&&!_0x51936a[_0x4ede44(0xf6)]&&_0x4ce60f();};_0xb62be4[_0x309f25(0x114)]=_0x4ce60f,_0x3c5bf9[_0x309f25(0x114)]=_0x4ce60f,_0x16332a[_0x309f25(0x114)]=async()=>{const _0x2e4993=_0x309f25;_0x1bb36e[_0x2e4993(0xf6)]=![],_0x22abc1['hidden']=!![],_0x2afb32[_0x2e4993(0xf6)]=!![],await loadServerHealthMetrics();};const _0x1e3ffa=async(_0x4834b9,_0x34e725)=>{const _0x37889d=_0x309f25;_0x1bb36e[_0x37889d(0xaf)]=_0x4834b9,_0x1bb36e[_0x37889d(0xf6)]=![],_0x22abc1[_0x37889d(0xf6)]=!![],_0x2afb32[_0x37889d(0xf6)]=!![],_0x2c12a5(!![]),_0x2d708a(_0x4834b9+_0x37889d(0xfb));try{const _0x5d1d4c=await _0x34e725(),_0x5e83a4=_0x5d1d4c?.['message']||_0x4834b9+'\x20completed';_0x2d708a(_0x5e83a4,_0x37889d(0xcb));}catch(_0x35f5c4){console[_0x37889d(0xf0)](_0x37889d(0xf7)+_0x4834b9+')',_0x35f5c4),_0x2d708a(_0x35f5c4[_0x37889d(0xd5)]||'Failed\x20while\x20'+_0x4834b9[_0x37889d(0xc8)](),'error');}finally{await loadServerHealthMetrics(),_0x2c12a5(![]);}};_0x46245f&&(_0x46245f[_0x309f25(0x114)]=()=>_0x1e3ffa(_0x309f25(0xd7),()=>API[_0x309f25(0x10e)]()));_0xea5f75&&(_0xea5f75[_0x309f25(0x114)]=()=>_0x1e3ffa('Removing\x20stopped\x20containers',()=>API['removeStoppedContainers']()));_0x560ed7&&(_0x560ed7[_0x309f25(0x114)]=()=>_0x1e3ffa(_0x309f25(0xf5),()=>API[_0x309f25(0xf2)]()));_0x18b819&&_0xe448d6&&_0x5444c2&&(_0x18b819['onclick']=()=>{const _0x12f07b=_0x309f25,_0x203e6e=_0x5444c2[_0x12f07b(0x112)]['toggle'](_0x12f07b(0x106));_0xe448d6[_0x12f07b(0xf6)]=!_0x203e6e,_0x18b819[_0x12f07b(0x105)](_0x12f07b(0x10d),_0x203e6e?'true':_0x12f07b(0xdb));});document[_0x309f25(0xe4)]('keydown',_0x47f190);const _0x10707f=_0x51936a['querySelector'](_0x309f25(0xee));_0x10707f&&(_0x10707f['onclick']=_0x4ce60f);}export{loadServerHealthMetrics};typeof window!==_0xc6d591(0xe8)&&(window[_0xc6d591(0x102)]=openServerHealthModal);
|
|
@@ -164,6 +164,54 @@
|
|
|
164
164
|
color: var(--color-text-muted);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
+
.apikey-test-btn {
|
|
168
|
+
flex-shrink: 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* API key endpoint extensions */
|
|
172
|
+
.apikey-endpoint-section {
|
|
173
|
+
margin-top: 10px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.apikey-endpoint-header {
|
|
177
|
+
display: flex;
|
|
178
|
+
align-items: center;
|
|
179
|
+
justify-content: space-between;
|
|
180
|
+
gap: 12px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.apikey-endpoint-label {
|
|
184
|
+
font-size: 12px;
|
|
185
|
+
color: var(--color-text-muted);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.apikey-endpoint-fields {
|
|
189
|
+
margin-top: 8px;
|
|
190
|
+
display: flex;
|
|
191
|
+
flex-direction: column;
|
|
192
|
+
gap: 8px;
|
|
193
|
+
padding: 10px;
|
|
194
|
+
border: 1px solid var(--color-border);
|
|
195
|
+
border-radius: var(--radius-medium);
|
|
196
|
+
background: var(--color-surface-muted);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.apikey-endpoint-field-label {
|
|
200
|
+
font-size: 12px;
|
|
201
|
+
font-weight: 500;
|
|
202
|
+
color: var(--color-text);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.apikey-endpoint-fields .form-input {
|
|
206
|
+
margin: 0;
|
|
207
|
+
font-size: 13px;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.apikey-endpoint-field-hint {
|
|
211
|
+
grid-column: auto;
|
|
212
|
+
margin-top: 0;
|
|
213
|
+
}
|
|
214
|
+
|
|
167
215
|
/* ============================================================
|
|
168
216
|
LAYOUT
|
|
169
217
|
============================================================ */
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
})();
|
|
24
24
|
</script>
|
|
25
25
|
<link rel="stylesheet" href="styles.css?v=84">
|
|
26
|
-
<link rel="stylesheet" href="settings.css?v=
|
|
26
|
+
<link rel="stylesheet" href="settings.css?v=7">
|
|
27
27
|
<script type="module" src="app.js?v=67"></script>
|
|
28
|
-
<script type="module" src="settings.js?v=
|
|
28
|
+
<script type="module" src="settings.js?v=7"></script>
|
|
29
29
|
</head>
|
|
30
30
|
<body>
|
|
31
31
|
<main class="task-detail">
|
|
@@ -314,6 +314,9 @@
|
|
|
314
314
|
</div>
|
|
315
315
|
<div class="card-body" style="padding-top: 8px;">
|
|
316
316
|
<div id="apikeys-inline-message" class="inline-message" hidden></div>
|
|
317
|
+
<p class="text-muted" style="margin-bottom: 16px;">
|
|
318
|
+
Configure provider API keys and optionally route Claude/Codex/Gemini through custom endpoints (for example Azure Foundry, Azure OpenAI, or gateway proxies).
|
|
319
|
+
</p>
|
|
317
320
|
<div class="apikeys-list">
|
|
318
321
|
<!-- Claude (Anthropic) -->
|
|
319
322
|
<div class="apikey-row">
|
|
@@ -335,11 +338,33 @@
|
|
|
335
338
|
</svg>
|
|
336
339
|
</button>
|
|
337
340
|
</div>
|
|
341
|
+
<button type="button" class="btn-secondary btn-small apikey-test-btn" data-agent="claude">Test</button>
|
|
338
342
|
<label class="toggle-switch" title="Enable for AI tasks">
|
|
339
343
|
<input type="checkbox" id="apikey-claude-enabled">
|
|
340
344
|
<span class="toggle-slider"></span>
|
|
341
345
|
</label>
|
|
342
346
|
</div>
|
|
347
|
+
<div class="apikey-endpoint-section" data-agent="claude">
|
|
348
|
+
<div class="apikey-endpoint-header">
|
|
349
|
+
<span class="apikey-endpoint-label">Custom Endpoint</span>
|
|
350
|
+
<label class="toggle-switch" title="Use a custom Claude endpoint">
|
|
351
|
+
<input type="checkbox" id="apikey-claude-endpoint-enabled">
|
|
352
|
+
<span class="toggle-slider"></span>
|
|
353
|
+
</label>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="apikey-endpoint-fields" id="apikey-claude-endpoint-fields" hidden>
|
|
356
|
+
<label class="apikey-endpoint-field-label" for="apikey-claude-base-url">Base URL</label>
|
|
357
|
+
<input
|
|
358
|
+
type="text"
|
|
359
|
+
id="apikey-claude-base-url"
|
|
360
|
+
class="form-input code-font"
|
|
361
|
+
placeholder="https://your-resource.services.ai.azure.com/anthropic"
|
|
362
|
+
>
|
|
363
|
+
<span class="form-hint apikey-endpoint-field-hint">
|
|
364
|
+
Claude requests will use this base URL when API key task mode is enabled.
|
|
365
|
+
</span>
|
|
366
|
+
</div>
|
|
367
|
+
</div>
|
|
343
368
|
</div>
|
|
344
369
|
|
|
345
370
|
<!-- Codex (OpenAI) -->
|
|
@@ -362,11 +387,40 @@
|
|
|
362
387
|
</svg>
|
|
363
388
|
</button>
|
|
364
389
|
</div>
|
|
390
|
+
<button type="button" class="btn-secondary btn-small apikey-test-btn" data-agent="codex">Test</button>
|
|
365
391
|
<label class="toggle-switch" title="Enable for AI tasks">
|
|
366
392
|
<input type="checkbox" id="apikey-codex-enabled">
|
|
367
393
|
<span class="toggle-slider"></span>
|
|
368
394
|
</label>
|
|
369
395
|
</div>
|
|
396
|
+
<div class="apikey-endpoint-section" data-agent="codex">
|
|
397
|
+
<div class="apikey-endpoint-header">
|
|
398
|
+
<span class="apikey-endpoint-label">Custom Endpoint</span>
|
|
399
|
+
<label class="toggle-switch" title="Use a custom Codex endpoint">
|
|
400
|
+
<input type="checkbox" id="apikey-codex-endpoint-enabled">
|
|
401
|
+
<span class="toggle-slider"></span>
|
|
402
|
+
</label>
|
|
403
|
+
</div>
|
|
404
|
+
<div class="apikey-endpoint-fields" id="apikey-codex-endpoint-fields" hidden>
|
|
405
|
+
<label class="apikey-endpoint-field-label" for="apikey-codex-base-url">Base URL</label>
|
|
406
|
+
<input
|
|
407
|
+
type="text"
|
|
408
|
+
id="apikey-codex-base-url"
|
|
409
|
+
class="form-input code-font"
|
|
410
|
+
placeholder="https://your-resource.cognitiveservices.azure.com/openai"
|
|
411
|
+
>
|
|
412
|
+
<label class="apikey-endpoint-field-label" for="apikey-codex-api-version">API Version (optional)</label>
|
|
413
|
+
<input
|
|
414
|
+
type="text"
|
|
415
|
+
id="apikey-codex-api-version"
|
|
416
|
+
class="form-input code-font"
|
|
417
|
+
placeholder="2025-04-01-preview"
|
|
418
|
+
>
|
|
419
|
+
<span class="form-hint apikey-endpoint-field-hint">
|
|
420
|
+
Use a root OpenAI base URL. CoderFlow injects <code>api-version</code> as a query parameter when provided.
|
|
421
|
+
</span>
|
|
422
|
+
</div>
|
|
423
|
+
</div>
|
|
370
424
|
</div>
|
|
371
425
|
|
|
372
426
|
<!-- Gemini (Google) -->
|
|
@@ -389,11 +443,40 @@
|
|
|
389
443
|
</svg>
|
|
390
444
|
</button>
|
|
391
445
|
</div>
|
|
446
|
+
<button type="button" class="btn-secondary btn-small apikey-test-btn" data-agent="gemini">Test</button>
|
|
392
447
|
<label class="toggle-switch" title="Enable for AI tasks">
|
|
393
448
|
<input type="checkbox" id="apikey-gemini-enabled">
|
|
394
449
|
<span class="toggle-slider"></span>
|
|
395
450
|
</label>
|
|
396
451
|
</div>
|
|
452
|
+
<div class="apikey-endpoint-section" data-agent="gemini">
|
|
453
|
+
<div class="apikey-endpoint-header">
|
|
454
|
+
<span class="apikey-endpoint-label">Custom Endpoint</span>
|
|
455
|
+
<label class="toggle-switch" title="Use a custom Gemini endpoint">
|
|
456
|
+
<input type="checkbox" id="apikey-gemini-endpoint-enabled">
|
|
457
|
+
<span class="toggle-slider"></span>
|
|
458
|
+
</label>
|
|
459
|
+
</div>
|
|
460
|
+
<div class="apikey-endpoint-fields" id="apikey-gemini-endpoint-fields" hidden>
|
|
461
|
+
<label class="apikey-endpoint-field-label" for="apikey-gemini-base-url">Base URL</label>
|
|
462
|
+
<input
|
|
463
|
+
type="text"
|
|
464
|
+
id="apikey-gemini-base-url"
|
|
465
|
+
class="form-input code-font"
|
|
466
|
+
placeholder="https://generativelanguage.googleapis.com/v1beta"
|
|
467
|
+
>
|
|
468
|
+
<label class="apikey-endpoint-field-label" for="apikey-gemini-api-version">API Version (optional)</label>
|
|
469
|
+
<input
|
|
470
|
+
type="text"
|
|
471
|
+
id="apikey-gemini-api-version"
|
|
472
|
+
class="form-input code-font"
|
|
473
|
+
placeholder="v1beta"
|
|
474
|
+
>
|
|
475
|
+
<span class="form-hint apikey-endpoint-field-hint">
|
|
476
|
+
You can provide a root Gemini-compatible base URL or a <code>/models</code> path.
|
|
477
|
+
</span>
|
|
478
|
+
</div>
|
|
479
|
+
</div>
|
|
397
480
|
</div>
|
|
398
481
|
</div>
|
|
399
482
|
</div>
|