@profoundlogic/coderflow-server 0.8.8 → 0.9.0
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/coder-git-credential-helper +4 -1
- package/dist/coder-server.js +1 -1
- 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 -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/grant-admin.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/list-roles.js +1 -1
- package/dist/lib/cli/list-users.js +1 -1
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/cli/set-password.js +1 -1
- package/dist/lib/compression-filter.js +1 -1
- 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 -1
- 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/memory-utils.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/slack-service.js +1 -1
- package/dist/lib/state-capture.js +1 -1
- package/dist/lib/static-files.js +1 -1
- package/dist/lib/task-aliases.js +1 -1
- package/dist/lib/task-container-init.js +1 -1
- package/dist/lib/task-context-usage.js +1 -1
- package/dist/lib/task-git-auth-errors.js +1 -0
- 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/playwright.task-terminal.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/logs.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/slack.js +1 -1
- package/dist/routes/stats.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/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/admin.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/automations.md +8 -7
- package/dist/web-ui/public/docs/code/files-and-editing.md +11 -0
- package/dist/web-ui/public/docs/docsify-proxy-helper.js +1 -1
- package/dist/web-ui/public/environments.html +19 -7
- package/dist/web-ui/public/environments.js +1 -1
- package/dist/web-ui/public/feedback-widget.css +59 -2
- package/dist/web-ui/public/feedback-widget.js +1 -1
- package/dist/web-ui/public/file-selection-tree.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/ibmi-file-filter.js +1 -1
- 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/permissions.js +1 -1
- package/dist/web-ui/public/pr-dialog.js +1 -1
- package/dist/web-ui/public/roles.js +1 -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-client.transport-warning.js +1 -1
- package/dist/web-ui/public/sse-shared-worker.js +1 -1
- package/dist/web-ui/public/styles.css +20 -0
- package/dist/web-ui/public/task-judging-helpers.js +1 -1
- package/dist/web-ui/public/task.js +1 -1
- 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.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{API,Utils,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';const HEALTH_REFRESH_INTERVAL_MS=0x7530,LOG_SEARCH_DEBOUNCE_MS=0xfa,LOG_ORDER_ASC='asc',LOG_ORDER_DESC='desc',RESTART_POLL_INTERVAL_MS=0x7d0,RESTART_POLL_MAX_ATTEMPTS=0x1e,RESTART_MIN_SUCCESS_DELAY_MS=0x1b58,USAGE_DRILLDOWN_LIMIT=0x19,NUMBER_FORMATTER=new Intl['NumberFormat'](),state={'currentSection':'health','environments':[],'health':{'loaded':![],'request':null,'autoRefreshTimer':null,'versionChecked':![],'currentVersion':null,'latestVersion':null,'installCommand':null,'updateEnabled':![],'hasRestartCommand':![],'updateInProgress':![],'restartInProgress':![],'updateAvailable':![]},'logs':{'loaded':![],'request':null,'entries':[],'nextEntryId':0x1,'selectedEntryIds':new Set(),'total':0x0,'minLevel':'INFO','level':'ALL','order':LOG_ORDER_ASC,'search':'','maxEntries':0x3e8,'stream':null,'streamState':'paused','live':![],'autoScroll':!![],'searchTimer':null},'usage':{'loaded':![],'request':null,'days':'30','environment':'','drilldown':{'open':![],'request':null,'requestToken':0x0,'group':'','value':'','label':'','data':null}}};document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle();const _0x110613=await checkAdminAccess();await initializeAdminMenu(_0x110613),setupEventListeners(),await loadEnvironmentOptions(),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-content')['hidden']=![];const _0x27ed0e=getSessionValue('admin-health-auto-refresh');if(_0x27ed0e!==null){const _0x56c673=document['getElementById']('health-auto-refresh');if(_0x56c673)_0x56c673['checked']=_0x27ed0e!=='false';}const _0x40061b=getSessionValue('admin-logs-order');(_0x40061b===LOG_ORDER_ASC||_0x40061b===LOG_ORDER_DESC)&&(state['logs']['order']=_0x40061b);syncLogOrderUi();const _0x3f6ef8=getSessionValue('admin-active-section'),_0x498f14=['health','logs','usage']['includes'](_0x3f6ef8)?_0x3f6ef8:'health';await switchSection(_0x498f14);}catch(_0x4a8ccb){console['error']('Failed\x20to\x20initialize\x20Server\x20Administration\x20page',_0x4a8ccb),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-error')['hidden']=![],document['getElementById']('admin-error-message')['textContent']=_0x4a8ccb['message']||'Unknown\x20error';}}async function checkAdminAccess(){try{const _0x1bb62d=await API['getCurrentUser']();if(!window['Permissions']?.['hasServerPermission'](_0x1bb62d,'*')){Utils['showToast']('Access\x20denied:\x20Admin\x20privileges\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x7d0);throw new Error('Access\x20denied');}return _0x1bb62d;}catch(_0x3b9e08){_0x3b9e08['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x3b9e08;}}function setupEventListeners(){document['querySelectorAll']('.settings-nav-item')['forEach'](_0x39acb7=>{_0x39acb7['addEventListener']('click',()=>switchSection(_0x39acb7['dataset']['section']));}),document['getElementById']('retry-admin-btn')?.['addEventListener']('click',()=>{window['location']['reload']();}),document['getElementById']('health-refresh-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('retry-health-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('health-auto-refresh')?.['addEventListener']('change',syncHealthAutoRefresh),document['getElementById']('health-check-updates-btn')?.['addEventListener']('click',()=>loadVersionStatus({'checkUpdates':!![]})),document['getElementById']('health-copy-install-btn')?.['addEventListener']('click',copyInstallCommand),document['getElementById']('health-update-btn')?.['addEventListener']('click',applyUpdate),document['getElementById']('health-restart-btn')?.['addEventListener']('click',showRestartConfirmation),document['getElementById']('confirm-restart-btn')?.['addEventListener']('click',confirmRestart),document['getElementById']('cancel-restart-btn')?.['addEventListener']('click',hideRestartModal),document['getElementById']('close-restart-modal')?.['addEventListener']('click',hideRestartModal),document['querySelector']('#restart-modal\x20.modal-overlay')?.['addEventListener']('click',hideRestartModal),document['getElementById']('restart-overlay-retry')?.['addEventListener']('click',()=>waitForServerRestart({'manualRetry':!![]})),document['getElementById']('server-stop-containers')?.['addEventListener']('click',()=>runCleanupAction('Stopping\x20containers',()=>API['stopAllContainers']())),document['getElementById']('server-remove-stopped')?.['addEventListener']('click',()=>runCleanupAction('Removing\x20stopped\x20containers',()=>API['removeStoppedContainers']())),document['getElementById']('server-prune-docker')?.['addEventListener']('click',()=>runCleanupAction('Pruning\x20Docker\x20resources',()=>API['pruneDockerResources']())),document['getElementById']('cleanup-toggle')?.['addEventListener']('click',toggleCleanupSection),document['getElementById']('logs-refresh-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('retry-logs-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('logs-live-toggle')?.['addEventListener']('click',toggleLogsLiveMode),document['getElementById']('logs-clear-btn')?.['addEventListener']('click',clearDisplayedLogs),document['getElementById']('logs-select-visible-btn')?.['addEventListener']('click',toggleVisibleLogSelection),document['getElementById']('logs-clear-selection-btn')?.['addEventListener']('click',clearSelectedLogEntries),document['getElementById']('logs-copy-selected-btn')?.['addEventListener']('click',copySelectedLogEntries),document['getElementById']('logs-search-input')?.['addEventListener']('input',handleLogsSearchInput),document['querySelectorAll']('#logs-level-filters\x20.admin-filter-btn')['forEach'](_0x1c2ab9=>{_0x1c2ab9['addEventListener']('click',()=>{state['logs']['level']=_0x1c2ab9['dataset']['level']||'ALL',updateActiveFilterButtons('#logs-level-filters',state['logs']['level']),loadLogs({'showLoading':![]});});}),document['querySelectorAll']('#logs-order-toggle\x20.admin-filter-btn')['forEach'](_0x48eca1=>{_0x48eca1['addEventListener']('click',()=>{setLogOrder(_0x48eca1['dataset']['order'],{'focusLiveEdge':!![]});});}),document['getElementById']('logs-container')?.['addEventListener']('click',handleLogContainerClick),document['getElementById']('logs-container')?.['addEventListener']('change',handleLogContainerChange),document['getElementById']('logs-container')?.['addEventListener']('scroll',updateLogAutoScrollState),document['querySelectorAll']('.metric-card-drilldown')['forEach'](_0x50c1a0=>{_0x50c1a0['addEventListener']('click',()=>openDrilldown(_0x50c1a0['dataset']['drilldown'])),_0x50c1a0['addEventListener']('keydown',_0x111b0b=>{(_0x111b0b['key']==='Enter'||_0x111b0b['key']==='\x20')&&(_0x111b0b['preventDefault'](),openDrilldown(_0x50c1a0['dataset']['drilldown']));});}),document['getElementById']('close-drilldown-modal')?.['addEventListener']('click',closeDrilldownModal),document['getElementById']('drilldown-modal-overlay')?.['addEventListener']('click',closeDrilldownModal),document['addEventListener']('keydown',_0xfa273a=>{_0xfa273a['key']==='Escape'&&!document['getElementById']('drilldown-modal')?.['hidden']&&closeDrilldownModal();}),document['getElementById']('usage-refresh-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('retry-usage-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('usage-environment-filter')?.['addEventListener']('change',_0x14d25c=>{state['usage']['environment']=_0x14d25c['target']['value']||'',loadUsage({'showLoading':![]});}),document['querySelectorAll']('#usage-period-buttons\x20.admin-filter-btn')['forEach'](_0x505ec1=>{_0x505ec1['addEventListener']('click',()=>{state['usage']['days']=_0x505ec1['dataset']['days']||'30',updateActiveFilterButtons('#usage-period-buttons',state['usage']['days']),loadUsage({'showLoading':![]});});}),document['getElementById']('usage-content')?.['addEventListener']('click',handleUsageDrilldownClick),document['getElementById']('usage-content')?.['addEventListener']('keydown',handleUsageDrilldownKeydown),document['getElementById']('usage-drilldown-close')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('usage-drilldown-overlay')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('retry-usage-drilldown-btn')?.['addEventListener']('click',()=>loadUsageDrilldown({'showLoading':!![]})),window['addEventListener']('keydown',handleGlobalKeydown);}async function switchSection(_0x25ede0){if(!_0x25ede0)return;document['querySelectorAll']('.settings-nav-item')['forEach'](_0x2c0e2d=>{const _0x1da313=_0x2c0e2d['dataset']['section']===_0x25ede0;_0x2c0e2d['classList']['toggle']('active',_0x1da313),_0x2c0e2d['setAttribute']('aria-selected',String(_0x1da313));}),document['querySelectorAll']('.settings-panel')['forEach'](_0x5b713f=>{const _0x2b702e=_0x5b713f['id']==='section-'+_0x25ede0;_0x5b713f['hidden']=!_0x2b702e,_0x5b713f['classList']['toggle']('active',_0x2b702e);}),state['currentSection']=_0x25ede0,setSessionValue('admin-active-section',_0x25ede0),_0x25ede0!=='health'&&stopHealthAutoRefresh(),_0x25ede0!=='logs'&&stopLogStream(),_0x25ede0!=='usage'&&closeUsageDrilldown(),_0x25ede0==='health'&&(syncHealthAutoRefresh(),await loadHealth({'showLoading':!state['health']['loaded']})),_0x25ede0==='logs'&&(await loadLogs({'showLoading':!state['logs']['loaded']}),state['logs']['live']?startLogStream():updateLogsLiveUi()),_0x25ede0==='usage'&&await loadUsage({'showLoading':!state['usage']['loaded']});}function getSessionValue(_0x12d3c2){try{return sessionStorage['getItem'](_0x12d3c2);}catch{return null;}}function setSessionValue(_0x30af70,_0x25a578){try{sessionStorage['setItem'](_0x30af70,_0x25a578);}catch{}}async function loadEnvironmentOptions(){const _0x5a7c94=await API['get']('/environments');state['environments']=(_0x5a7c94['environments']||[])['map'](_0x26e18e=>_0x26e18e?.['name'])['filter'](Boolean)['sort']((_0x1140ec,_0x2fc631)=>_0x1140ec['localeCompare'](_0x2fc631));const _0x2b09ae=document['getElementById']('usage-environment-filter');if(!_0x2b09ae)return;_0x2b09ae['innerHTML']='<option\x20value=\x22\x22>All\x20environments</option>'+state['environments']['map'](_0x29412e=>'<option\x20value=\x22'+Utils['escapeHtml'](_0x29412e)+'\x22>'+Utils['escapeHtml'](_0x29412e)+'</option>')['join'](''),_0x2b09ae['value']=state['usage']['environment'];}function syncHealthAutoRefresh(){const _0x42e482=document['getElementById']('health-auto-refresh');if(_0x42e482)setSessionValue('admin-health-auto-refresh',String(_0x42e482['checked']));const _0x552b95=state['currentSection']==='health'&&!!_0x42e482?.['checked'];stopHealthAutoRefresh();if(!_0x552b95)return;state['health']['autoRefreshTimer']=window['setInterval'](()=>{loadHealth({'showLoading':![]});},HEALTH_REFRESH_INTERVAL_MS);}function stopHealthAutoRefresh(){state['health']['autoRefreshTimer']&&(clearInterval(state['health']['autoRefreshTimer']),state['health']['autoRefreshTimer']=null);}async function loadHealth({showLoading:showLoading=![]}={}){if(state['health']['request'])return state['health']['request'];return state['health']['request']=((async()=>{const _0x2d9b80=document['getElementById']('health-loading'),_0x15354c=document['getElementById']('health-error'),_0xf611a=document['getElementById']('health-content');(showLoading||!state['health']['loaded'])&&(_0x2d9b80['hidden']=![],_0x15354c['hidden']=!![],_0xf611a['hidden']=!![]);try{const [_0x15f96b]=await Promise['all']([API['get']('/health/metrics'),loadUpdateSettings()['catch'](_0x1ad2f5=>{console['error']('Failed\x20to\x20load\x20update\x20settings',_0x1ad2f5),state['health']['updateEnabled']=![],state['health']['hasRestartCommand']=![],syncHealthActionButtons();})]);renderHealthMetrics(_0x15f96b),!state['health']['currentVersion']&&await loadVersionStatus({'checkUpdates':![]}),_0x2d9b80['hidden']=!![],_0x15354c['hidden']=!![],_0xf611a['hidden']=![],state['health']['loaded']=!![];}catch(_0x1e904c){console['error']('Failed\x20to\x20load\x20server\x20metrics',_0x1e904c),_0x2d9b80['hidden']=!![],_0x15354c['hidden']=![],_0xf611a['hidden']=!![],document['getElementById']('health-error-message')['textContent']=_0x1e904c['message']||'Unknown\x20error';}finally{state['health']['request']=null;}})()),state['health']['request'];}function syncHealthActionButtons(){const _0xc773fe=document['getElementById']('health-update-btn'),_0x33e22f=document['getElementById']('health-restart-btn');if(!_0xc773fe||!_0x33e22f)return;const _0x3d67b2=state['health']['updateEnabled'],_0x1b53b5=_0x3d67b2&&state['health']['versionChecked']&&state['health']['updateAvailable'];_0xc773fe['hidden']=!_0x1b53b5,_0xc773fe['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress']||!state['health']['latestVersion'],_0xc773fe['textContent']=state['health']['updateInProgress']?'Updating...':'Update\x20Server',_0x33e22f['hidden']=!_0x3d67b2,_0x33e22f['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress'];}function setUpdateOutput({status:_0x83700e,output:_0x2420c1}){const _0x584b78=document['getElementById']('health-update-output-wrap'),_0x272da1=document['getElementById']('health-update-status'),_0x545b32=document['getElementById']('health-update-output');if(!_0x584b78||!_0x272da1||!_0x545b32)return;const _0x50b83a=_0x83700e||'';_0x584b78['hidden']=![],_0x272da1['className']='admin-update-status',_0x50b83a&&_0x272da1['classList']['add'](_0x50b83a),_0x272da1['textContent']=_0x50b83a==='success'?'Success':_0x50b83a==='error'?'Failed':'In\x20Progress',_0x545b32['textContent']=_0x2420c1||'No\x20output\x20returned.';}function buildCommandOutput(_0x2ea160,_0x12e8ee){const _0x4de5c8=[];typeof _0x2ea160==='string'&&_0x2ea160['trim']()&&_0x4de5c8['push'](_0x2ea160['trim']());if(typeof _0x12e8ee==='string'&&_0x12e8ee['trim']()){const _0x5b95f7=_0x12e8ee['trim'](),_0x548315=_0x4de5c8['some'](_0x1a812c=>_0x1a812c['includes'](_0x5b95f7));!_0x548315&&_0x4de5c8['push']('Error:\x0a'+_0x5b95f7);}return _0x4de5c8['join']('\x0a\x0a');}function showRestartOverlay({title:_0x5de017,message:_0xfd846d,showRetry:showRetry=![]}){const _0x1737a0=document['getElementById']('health-restart-overlay'),_0x222119=document['getElementById']('restart-overlay-title'),_0x4584b0=document['getElementById']('restart-overlay-message'),_0x2ce4c1=document['getElementById']('restart-overlay-retry');if(!_0x1737a0||!_0x222119||!_0x4584b0||!_0x2ce4c1)return;_0x222119['textContent']=_0x5de017,_0x4584b0['textContent']=_0xfd846d,_0x2ce4c1['hidden']=!showRetry,_0x1737a0['hidden']=![];}function hideRestartOverlay(){const _0x588f50=document['getElementById']('health-restart-overlay');_0x588f50&&(_0x588f50['hidden']=!![]);}function sleep(_0x214e6b){return new Promise(_0x93a113=>{window['setTimeout'](_0x93a113,_0x214e6b);});}async function loadUpdateSettings(){const _0x77832=await API['getUpdateSettings']();return state['health']['updateEnabled']=!!_0x77832['enabled'],state['health']['hasRestartCommand']=!!_0x77832['hasRestartCommand'],syncHealthActionButtons(),_0x77832;}async function applyUpdate(){if(state['health']['updateInProgress']||!state['health']['latestVersion'])return;state['health']['updateInProgress']=!![],syncHealthActionButtons(),setUpdateOutput({'status':'in-progress','output':'Applying\x20server\x20update\x20to\x20'+state['health']['latestVersion']+'...'});try{const _0xf4b07b=await API['applyServerUpdate'](state['health']['latestVersion']),_0x877b32=buildCommandOutput(_0xf4b07b['output'],_0xf4b07b['error']);_0xf4b07b['success']?(setUpdateOutput({'status':'success','output':_0x877b32||'Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed.'}),Utils['showSuccess']('Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed')):(setUpdateOutput({'status':'error','output':_0x877b32||'Server\x20update\x20failed\x20without\x20additional\x20output.'}),Utils['showError'](_0xf4b07b['error']||'Server\x20update\x20failed'));}catch(_0x59e653){setUpdateOutput({'status':'error','output':buildCommandOutput(_0x59e653['output'],_0x59e653['commandError']||_0x59e653['message'])||'Failed\x20to\x20apply\x20server\x20update.'}),Utils['showError'](_0x59e653['message']||'Failed\x20to\x20apply\x20server\x20update');}finally{state['health']['updateInProgress']=![],syncHealthActionButtons();}}function showRestartConfirmation(){if(!state['health']['updateEnabled']||state['health']['restartInProgress'])return;const _0x24a9f5=document['getElementById']('restart-modal');_0x24a9f5&&(_0x24a9f5['hidden']=![]);}function hideRestartModal(){const _0x358aae=document['getElementById']('restart-modal');_0x358aae&&(_0x358aae['hidden']=!![]);}async function confirmRestart(){if(state['health']['restartInProgress'])return;hideRestartModal(),state['health']['restartInProgress']=!![],syncHealthActionButtons();try{await API['restartServer'](),await waitForServerRestart();}catch(_0x4251f8){state['health']['restartInProgress']=![],syncHealthActionButtons(),hideRestartOverlay(),Utils['showError'](_0x4251f8['message']||'Failed\x20to\x20restart\x20server');}}async function waitForServerRestart({manualRetry:manualRetry=![]}={}){state['health']['restartInProgress']=!![],syncHealthActionButtons(),stopHealthAutoRefresh(),showRestartOverlay({'title':manualRetry?'Retrying\x20server\x20connection...':'Waiting\x20for\x20server\x20to\x20restart...','message':'The\x20page\x20will\x20automatically\x20refresh\x20when\x20the\x20server\x20is\x20back\x20online.','showRetry':![]});const _0x31d060=Date['now']();let _0x17a760=![];for(let _0x1116ac=0x0;_0x1116ac<RESTART_POLL_MAX_ATTEMPTS;_0x1116ac+=0x1){await sleep(RESTART_POLL_INTERVAL_MS);try{await API['get']('/health?ts='+Date['now']());const _0x21f566=Date['now']()-_0x31d060;if(_0x17a760||_0x21f566>=RESTART_MIN_SUCCESS_DELAY_MS){state['health']['restartInProgress']=![],state['health']['currentVersion']=null,hideRestartOverlay(),syncHealthActionButtons(),Utils['showSuccess']('Server\x20restart\x20complete'),await loadHealth({'showLoading':!![]}),syncHealthAutoRefresh();return;}}catch(_0xf821a1){_0x17a760=!![];}}state['health']['restartInProgress']=![],syncHealthActionButtons(),showRestartOverlay({'title':'Unable\x20to\x20reconnect\x20to\x20the\x20server','message':'The\x20server\x20may\x20still\x20be\x20restarting.\x20Retry\x20the\x20connection\x20when\x20you\x20are\x20ready.','showRetry':!![]}),Utils['showError']('Server\x20restart\x20is\x20taking\x20longer\x20than\x20expected');}async function loadVersionStatus({checkUpdates:checkUpdates=![]}={}){const _0x50ae94=document['getElementById']('health-check-updates-btn');_0x50ae94&&(_0x50ae94['disabled']=!![],_0x50ae94['textContent']=checkUpdates?'Checking...':'Loading...');try{const _0x345270=await API['get']('/health');state['health']['currentVersion']=_0x345270['version']||'Unavailable',document['getElementById']('health-version-current')['textContent']=state['health']['currentVersion'];if(!checkUpdates&&!state['health']['versionChecked']){state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Update\x20status\x20has\x20not\x20been\x20checked\x20yet.',document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion']||'Not\x20checked',syncHealthActionButtons();return;}if(checkUpdates){const _0x55925e=await API['get']('/health/check-updates');state['health']['versionChecked']=!![],state['health']['latestVersion']=_0x55925e['latestVersion']||'Unavailable',state['health']['installCommand']=_0x55925e['installCommand']||null,state['health']['updateAvailable']=!!_0x55925e['updateAvailable'],document['getElementById']('health-version-current')['textContent']=_0x55925e['currentVersion']||state['health']['currentVersion'],document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion'],document['getElementById']('health-version-status')['textContent']=buildVersionStatusText(_0x55925e),document['getElementById']('health-install-command')['textContent']=state['health']['installCommand']||'',document['getElementById']('health-install-command-wrap')['hidden']=!state['health']['installCommand'],document['getElementById']('health-copy-install-btn')['hidden']=!state['health']['installCommand'];}syncHealthActionButtons();}catch(_0x16a728){console['error']('Failed\x20to\x20load\x20version\x20status',_0x16a728),state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Unable\x20to\x20load\x20version\x20status:\x20'+_0x16a728['message'],document['getElementById']('health-install-command-wrap')['hidden']=!![],document['getElementById']('health-copy-install-btn')['hidden']=!![],syncHealthActionButtons();}finally{_0x50ae94&&(_0x50ae94['disabled']=![],_0x50ae94['textContent']='Check\x20for\x20Updates');}}function buildVersionStatusText(_0x2db977){const _0x1e1beb=_0x2db977?.['versionStatus'];if(_0x1e1beb==='update-available')return'Update\x20available:\x20'+_0x2db977['currentVersion']+'\x20→\x20'+_0x2db977['latestVersion'];if(_0x1e1beb==='up-to-date')return'Running\x20the\x20latest\x20published\x20version\x20('+_0x2db977['latestVersion']+').';if(_0x1e1beb==='ahead-of-latest')return'This\x20server\x20is\x20ahead\x20of\x20npm\x20latest\x20('+_0x2db977['latestVersion']+').';return'Unable\x20to\x20compare\x20current\x20and\x20latest\x20versions.';}async function copyInstallCommand(){if(!state['health']['installCommand'])return;const _0x32ee5d=await Utils['copyToClipboard'](state['health']['installCommand']);_0x32ee5d?Utils['showSuccess']('Install\x20command\x20copied'):Utils['showError']('Failed\x20to\x20copy\x20install\x20command');}function renderHealthMetrics(_0x394df1){document['getElementById']('cpu-usage')['textContent']=_0x394df1['cpu']?.['display']||'-',document['getElementById']('memory-usage')['textContent']=_0x394df1['memory']?.['display']||'-',document['getElementById']('disk-usage')['textContent']=_0x394df1['disk']?.['display']||'-',document['getElementById']('docker-containers')['textContent']=_0x394df1['docker']?.['display']||'-',document['getElementById']('server-uptime')['textContent']=_0x394df1['uptime']?.['display']||'-',document['getElementById']('active-sessions')['textContent']=_0x394df1['sessions']?.['display']||'-',setMetricProgress('cpu-progress',_0x394df1['cpu']?.['percent'],statusFromPercent(_0x394df1['cpu']?.['percent'])),setMetricProgress('memory-progress',_0x394df1['memory']?.['percent'],statusFromPercent(_0x394df1['memory']?.['percent'])),setMetricProgress('disk-progress',_0x394df1['disk']?.['percent'],statusFromPercent(_0x394df1['disk']?.['percent']));const _0x5852bb=_0x394df1['docker']?.['total']>0x0?_0x394df1['docker']['running']/_0x394df1['docker']['total']*0x64:0x0;setMetricProgress('docker-progress',_0x5852bb,'ok');const _0x280b46=_0x394df1['dockerStorage']||{},_0x43ccaa=document['getElementById']('docker-storage-card');document['getElementById']('docker-storage-total')['textContent']=_0x280b46['display']||'-',document['getElementById']('docker-storage-available')['textContent']=_0x280b46['availableDisplay']||'',document['getElementById']('docker-storage-available')['hidden']=!_0x280b46['availableDisplay'],document['getElementById']('docker-storage-reclaimable')['textContent']=_0x280b46['reclaimableDisplay']||'',document['getElementById']('docker-storage-images')['textContent']=_0x280b46['images']?.['display']||'-',document['getElementById']('docker-storage-containers')['textContent']=_0x280b46['containers']?.['display']||'-',document['getElementById']('docker-storage-volumes')['textContent']=_0x280b46['volumes']?.['display']||'-',document['getElementById']('docker-storage-buildcache')['textContent']=_0x280b46['buildCache']?.['display']||'-',setMetricProgress('docker-storage-progress',_0x280b46['percent'],_0x280b46['status']||'ok'),_0x43ccaa['classList']['remove']('status-warning','status-critical'),_0x280b46['status']==='warning'&&_0x43ccaa['classList']['add']('status-warning'),_0x280b46['status']==='critical'&&_0x43ccaa['classList']['add']('status-critical');}function clampPercent(_0x3cea60){if(!Number['isFinite'](_0x3cea60))return 0x0;return Math['max'](0x0,Math['min'](0x64,Math['round'](_0x3cea60)));}function statusFromPercent(_0x222026){if(!Number['isFinite'](_0x222026))return'ok';if(_0x222026>=0x5a)return'critical';if(_0x222026>=0x4b)return'warning';return'ok';}function setMetricProgress(_0x5187cd,_0x2ddf6b,_0x1cce73='ok'){const _0x4b6fb8=document['getElementById'](_0x5187cd);if(!_0x4b6fb8)return;const _0x5242ac=clampPercent(_0x2ddf6b);_0x4b6fb8['style']['width']=_0x5242ac+'%',_0x4b6fb8['classList']['remove']('status-ok','status-warning','status-critical'),_0x4b6fb8['classList']['add'](_0x1cce73==='critical'?'status-critical':_0x1cce73==='warning'?'status-warning':'status-ok'),_0x4b6fb8['parentElement']?.['setAttribute']('aria-valuenow',String(_0x5242ac));}async function runCleanupAction(_0x30f77e,_0x3eadc2){const _0x2ebb67=document['getElementById']('server-health-action-status'),_0x4347b1=[document['getElementById']('health-refresh-btn'),document['getElementById']('server-stop-containers'),document['getElementById']('server-remove-stopped'),document['getElementById']('server-prune-docker')]['filter'](Boolean);_0x4347b1['forEach'](_0x3b2ef5=>{_0x3b2ef5['disabled']=!![];}),_0x2ebb67['hidden']=![],_0x2ebb67['classList']['remove']('success','error'),_0x2ebb67['textContent']=_0x30f77e+'...';try{const _0x32c290=await _0x3eadc2();_0x2ebb67['classList']['add']('success'),_0x2ebb67['textContent']=_0x32c290?.['message']||_0x30f77e+'\x20complete',await loadHealth({'showLoading':!![]});}catch(_0x135602){console['error'](_0x30f77e+'\x20failed',_0x135602),_0x2ebb67['classList']['add']('error'),_0x2ebb67['textContent']=_0x135602['message']||_0x30f77e+'\x20failed';}finally{_0x4347b1['forEach'](_0xe5ede0=>{_0xe5ede0['disabled']=![];});}}function toggleCleanupSection(){const _0x279b64=document['getElementById']('cleanup-section'),_0x764bc2=document['getElementById']('cleanup-content'),_0x295343=document['getElementById']('cleanup-toggle');if(!_0x279b64||!_0x764bc2||!_0x295343)return;const _0x53572b=_0x279b64['classList']['toggle']('expanded');_0x764bc2['hidden']=!_0x53572b,_0x295343['setAttribute']('aria-expanded',String(_0x53572b));}async function loadLogs({showLoading:showLoading=![]}={}){if(state['logs']['request'])return state['logs']['request'];return state['logs']['request']=((async()=>{const _0x36035f=document['getElementById']('logs-loading'),_0x2ba4cf=document['getElementById']('logs-error');(showLoading||!state['logs']['loaded'])&&(_0x36035f['hidden']=![],_0x2ba4cf['hidden']=!![],document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![]);try{const _0x106e7b=new URLSearchParams({'limit':'500'});state['logs']['level']!=='ALL'&&_0x106e7b['set']('level',state['logs']['level']);state['logs']['search']&&_0x106e7b['set']('search',state['logs']['search']);const _0x52936f=await API['get']('/logs?'+_0x106e7b['toString']());state['logs']['entries']=Array['isArray'](_0x52936f['entries'])?normalizeLogEntries(_0x52936f['entries'])['slice'](-state['logs']['maxEntries']):[],state['logs']['selectedEntryIds']['clear'](),state['logs']['total']=Number(_0x52936f['total'])||0x0,state['logs']['minLevel']=_0x52936f['minLevel']||'INFO',state['logs']['loaded']=!![],_0x36035f['hidden']=!![],_0x2ba4cf['hidden']=!![],renderLogs();}catch(_0x27bb51){console['error']('Failed\x20to\x20load\x20logs',_0x27bb51),_0x36035f['hidden']=!![],_0x2ba4cf['hidden']=![],document['getElementById']('logs-error-message')['textContent']=_0x27bb51['message']||'Unknown\x20error',document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![];}finally{state['logs']['request']=null;}})()),state['logs']['request'];}function renderLogs({stickToLiveEdge:stickToLiveEdge=![]}={}){const _0x386005=document['getElementById']('logs-container'),_0x2e6843=document['getElementById']('logs-empty'),_0x50cc54=stickToLiveEdge||state['logs']['autoScroll']&&state['logs']['live'],_0x3d4ac1=_0x386005?.['scrollTop']||0x0,_0x538c45=_0x386005?.['scrollHeight']||0x0,_0x16a1fc=getOrderedLogEntries();updateLogsMeta(_0x16a1fc['length']),syncLogSelectionUi(_0x16a1fc);if(_0x16a1fc['length']===0x0){_0x386005['hidden']=!![],_0x2e6843['hidden']=![];return;}_0x2e6843['hidden']=!![],_0x386005['hidden']=![],_0x386005['innerHTML']=_0x16a1fc['map'](renderLogEntry)['join']('');if(_0x50cc54){scrollLogsToLiveEdge(_0x386005);return;}if(state['logs']['order']===LOG_ORDER_DESC){const _0x6ac3ee=_0x386005['scrollHeight'],_0x52a12f=_0x6ac3ee-_0x538c45;_0x386005['scrollTop']=_0x3d4ac1>0x0?_0x3d4ac1+Math['max'](_0x52a12f,0x0):_0x3d4ac1;return;}_0x386005['scrollTop']=_0x3d4ac1;}function createLogEntryId(){const _0x14f054=state['logs']['nextEntryId'];return state['logs']['nextEntryId']+=0x1,'server-log-'+_0x14f054;}function normalizeLogEntry(_0x1a6d2e){return{..._0x1a6d2e,'_clientId':createLogEntryId()};}function normalizeLogEntries(_0x8822ba){return _0x8822ba['map'](normalizeLogEntry);}function getVisibleLogEntries(){const _0x4e2b3c=state['logs']['search']['trim']()['toLowerCase']();return state['logs']['entries']['filter'](_0x2d8328=>{if(state['logs']['level']!=='ALL'&&_0x2d8328['level']!==state['logs']['level'])return![];if(!_0x4e2b3c)return!![];const _0x518d0c=String(_0x2d8328['message']||'')['toLowerCase'](),_0x525a8e=_0x2d8328['context']?JSON['stringify'](_0x2d8328['context'])['toLowerCase']():'';return _0x518d0c['includes'](_0x4e2b3c)||_0x525a8e['includes'](_0x4e2b3c);});}function getOrderedLogEntries(){const _0x26f0e2=getVisibleLogEntries();return state['logs']['order']===LOG_ORDER_DESC?_0x26f0e2['slice']()['reverse']():_0x26f0e2;}function findLogEntry(_0x490ce1){return state['logs']['entries']['find'](_0x485a08=>_0x485a08['_clientId']===_0x490ce1)||null;}function getSelectedVisibleLogEntries(_0x2219d1=getOrderedLogEntries()){return _0x2219d1['filter'](_0x5eaa1b=>state['logs']['selectedEntryIds']['has'](_0x5eaa1b['_clientId']));}function renderLogEntry(_0x187007){const _0x428614=Utils['escapeHtml'](String(_0x187007['_clientId']||'')),_0x3039cd=Utils['escapeHtml'](formatDateTime(_0x187007['timestamp'])),_0x2ad2d4=Utils['escapeHtml'](String(_0x187007['level']||'INFO')),_0x14a8d0=Utils['escapeHtml'](String(_0x187007['message']||'')),_0x45ab3f=formatLogContext(_0x187007['context']),_0x2a5c28=_0x45ab3f?'\x0a\x20\x20\x20\x20\x20\x20<details\x20class=\x22admin-log-context\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<summary>Context</summary>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>'+Utils['escapeHtml'](_0x45ab3f)+'</pre>\x0a\x20\x20\x20\x20\x20\x20</details>\x0a\x20\x20\x20\x20':'',_0xdf7ba9=state['logs']['selectedEntryIds']['has'](_0x187007['_clientId'])?'\x20selected':'';return'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-log-entry'+_0xdf7ba9+'\x22\x20data-log-entry-id=\x22'+_0x428614+'\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header-main\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22admin-log-select\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-log-select-checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data-log-entry-id=\x22'+_0x428614+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20aria-label=\x22Select\x20log\x20entry\x20from\x20'+_0x3039cd+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0xdf7ba9?'checked':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-timestamp\x22>'+_0x3039cd+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-level\x20level-'+_0x2ad2d4['toLowerCase']()+'\x22>'+_0x2ad2d4+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22btn-ghost\x20btn-small\x20admin-log-copy-btn\x22\x20data-log-copy-id=\x22'+_0x428614+'\x22>Copy</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-message\x22>'+_0x14a8d0+'</div>\x0a\x20\x20\x20\x20\x20\x20'+_0x2a5c28+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function updateLogsMeta(_0x3a5250){const _0x15e3ad=document['getElementById']('logs-meta');if(!_0x15e3ad)return;const _0x34e332=state['logs']['entries']['length'],_0x852a05=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x3c7f4c=state['logs']['order']===LOG_ORDER_DESC?'newest\x20first':'oldest\x20first';_0x15e3ad['textContent']=_0x852a05?'Showing\x20'+_0x3a5250+'\x20of\x20'+_0x34e332+'\x20loaded\x20entries\x20for\x20the\x20current\x20filters\x20in\x20'+_0x3c7f4c+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.':'Showing\x20'+_0x3a5250+'\x20recent\x20buffered\x20entries\x20in\x20'+_0x3c7f4c+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.';}function syncLogSelectionUi(_0x484853=getOrderedLogEntries()){const _0x1012be=document['getElementById']('logs-selection-count'),_0x33871c=document['getElementById']('logs-select-visible-btn'),_0x2e8448=document['getElementById']('logs-clear-selection-btn'),_0x5d4bbc=document['getElementById']('logs-copy-selected-btn'),_0x5e1f84=getSelectedVisibleLogEntries(_0x484853),_0x3e7180=_0x484853['length']>0x0,_0x3d6f5c=_0x5e1f84['length']>0x0,_0x35346f=_0x3e7180&&_0x5e1f84['length']===_0x484853['length'],_0x4ab4ac=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x58535b=_0x4ab4ac?'Select\x20Filtered':'Select\x20All\x20Shown',_0x106348=_0x4ab4ac?'Deselect\x20Filtered':'Deselect\x20All\x20Shown';_0x1012be&&(_0x1012be['textContent']=_0x5e1f84['length']+'\x20selected'),_0x33871c&&(_0x33871c['disabled']=!_0x3e7180,_0x33871c['textContent']=_0x35346f?_0x106348:_0x58535b),_0x2e8448&&(_0x2e8448['disabled']=!_0x3d6f5c),_0x5d4bbc&&(_0x5d4bbc['disabled']=!_0x3d6f5c);}function toggleLogsLiveMode(){state['logs']['live']=!state['logs']['live'],state['logs']['live']?(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}),startLogStream()):stopLogStream(),updateLogsLiveUi();}function updateLogsLiveUi(){const _0x3888aa=document['getElementById']('logs-live-toggle'),_0x53e285=document['getElementById']('logs-stream-status');if(!_0x3888aa||!_0x53e285)return;_0x53e285['classList']['remove']('live','error');if(!state['logs']['live']){_0x53e285['textContent']='Paused',_0x3888aa['textContent']='Start\x20Live';return;}if(state['logs']['streamState']==='live')_0x53e285['textContent']='Live',_0x53e285['classList']['add']('live');else state['logs']['streamState']==='error'?(_0x53e285['textContent']='Reconnecting',_0x53e285['classList']['add']('error')):_0x53e285['textContent']='Connecting';_0x3888aa['textContent']='Pause\x20Live';}function startLogStream(){if(state['currentSection']!=='logs'||state['logs']['stream'])return;state['logs']['streamState']='connecting',updateLogsLiveUi();const _0x3f7271=new EventSource(API['getBaseUrl']()+'/logs/stream');state['logs']['stream']=_0x3f7271,_0x3f7271['addEventListener']('log',_0x149456=>{try{const _0x2c7556=normalizeLogEntry(JSON['parse'](_0x149456['data']));state['logs']['entries']['push'](_0x2c7556);if(state['logs']['entries']['length']>state['logs']['maxEntries']){const _0x2e9cf9=state['logs']['entries']['shift']();state['logs']['selectedEntryIds']['delete'](_0x2e9cf9?.['_clientId']);}renderLogs();}catch(_0x13e203){console['error']('Failed\x20to\x20parse\x20log\x20stream\x20event',_0x13e203);}}),_0x3f7271['onopen']=()=>{state['logs']['streamState']='live',updateLogsLiveUi();},_0x3f7271['onerror']=()=>{state['logs']['streamState']='error',updateLogsLiveUi();};}function stopLogStream(){state['logs']['stream']&&(state['logs']['stream']['close'](),state['logs']['stream']=null),state['logs']['streamState']='paused',updateLogsLiveUi();}function clearDisplayedLogs(){state['logs']['entries']=[],state['logs']['selectedEntryIds']['clear'](),renderLogs();}function handleLogContainerClick(_0x3f03b3){const _0x52a720=_0x3f03b3['target']['closest']('[data-log-copy-id]');if(!_0x52a720)return;const _0x43f2c3=findLogEntry(_0x52a720['dataset']['logCopyId']||'');if(!_0x43f2c3){Utils['showError']('Log\x20entry\x20is\x20no\x20longer\x20available');return;}copyLogEntries([_0x43f2c3],{'successMessage':'Log\x20entry\x20copied'});}function handleLogContainerChange(_0x581daf){const _0x3c6046=_0x581daf['target']['closest']('.admin-log-select-checkbox');if(!_0x3c6046)return;const _0x21facb=_0x3c6046['dataset']['logEntryId']||'';if(!_0x21facb)return;_0x3c6046['checked']?state['logs']['selectedEntryIds']['add'](_0x21facb):state['logs']['selectedEntryIds']['delete'](_0x21facb),_0x3c6046['closest']('.admin-log-entry')?.['classList']['toggle']('selected',_0x3c6046['checked']),syncLogSelectionUi();}function toggleVisibleLogSelection(){const _0x1c81c9=getOrderedLogEntries();if(_0x1c81c9['length']===0x0)return;const _0x13da32=getSelectedVisibleLogEntries(_0x1c81c9),_0xce9beb=_0x13da32['length']!==_0x1c81c9['length'];_0x1c81c9['forEach'](_0x48587c=>{_0xce9beb?state['logs']['selectedEntryIds']['add'](_0x48587c['_clientId']):state['logs']['selectedEntryIds']['delete'](_0x48587c['_clientId']);}),renderLogs();}function clearSelectedLogEntries(){if(state['logs']['selectedEntryIds']['size']===0x0)return;state['logs']['selectedEntryIds']['clear'](),renderLogs();}async function copySelectedLogEntries(){const _0x103a83=getSelectedVisibleLogEntries();if(_0x103a83['length']===0x0)return;await copyLogEntries(_0x103a83,{'successMessage':_0x103a83['length']===0x1?'Log\x20entry\x20copied':_0x103a83['length']+'\x20log\x20entries\x20copied'});}async function copyLogEntries(_0x26654a,{successMessage:successMessage='Log\x20entries\x20copied'}={}){const _0x382069=formatLogEntriesForClipboard(_0x26654a);if(!_0x382069){Utils['showError']('No\x20log\x20content\x20available\x20to\x20copy');return;}const _0x38cabf=await Utils['copyToClipboard'](_0x382069);_0x38cabf?Utils['showSuccess'](successMessage):Utils['showError']('Failed\x20to\x20copy\x20logs');}function setLogOrder(_0x430eaf,{focusLiveEdge:focusLiveEdge=![]}={}){const _0x27e5ab=_0x430eaf===LOG_ORDER_DESC?LOG_ORDER_DESC:LOG_ORDER_ASC;if(state['logs']['order']===_0x27e5ab){focusLiveEdge&&(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}));return;}state['logs']['order']=_0x27e5ab,setSessionValue('admin-logs-order',_0x27e5ab),syncLogOrderUi(),focusLiveEdge&&(state['logs']['autoScroll']=!![]),renderLogs({'stickToLiveEdge':focusLiveEdge});}function syncLogOrderUi(){updateActiveFilterButtons('#logs-order-toggle',state['logs']['order']);}function handleLogsSearchInput(_0x2de553){const _0x4d9739=_0x2de553['target']['value']||'';state['logs']['searchTimer']&&clearTimeout(state['logs']['searchTimer']),state['logs']['searchTimer']=window['setTimeout'](()=>{state['logs']['search']=_0x4d9739,loadLogs({'showLoading':![]});},LOG_SEARCH_DEBOUNCE_MS);}function updateLogAutoScrollState(){const _0x15e365=document['getElementById']('logs-container');if(!_0x15e365)return;const _0x102195=state['logs']['order']===LOG_ORDER_DESC?_0x15e365['scrollTop']:_0x15e365['scrollHeight']-_0x15e365['scrollTop']-_0x15e365['clientHeight'];state['logs']['autoScroll']=_0x102195<0x20;}async function loadUsage({showLoading:showLoading=![]}={}){if(state['usage']['request'])return state['usage']['request'];return state['usage']['request']=((async()=>{const _0x196283=document['getElementById']('usage-loading'),_0x38a434=document['getElementById']('usage-error');(showLoading||!state['usage']['loaded'])&&(_0x196283['hidden']=![],_0x38a434['hidden']=!![],document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![]);try{const _0xf96cb9=new URLSearchParams();_0xf96cb9['set']('days',state['usage']['days']);state['usage']['environment']&&_0xf96cb9['set']('environment',state['usage']['environment']);const _0x37ab1e=await API['get']('/stats?'+_0xf96cb9['toString']());state['usage']['loaded']=!![],_0x196283['hidden']=!![],_0x38a434['hidden']=!![],renderUsage(_0x37ab1e),state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']&&state['usage']['drilldown']['value']&&await loadUsageDrilldown({'showLoading':![]});}catch(_0x5a3460){console['error']('Failed\x20to\x20load\x20usage\x20statistics',_0x5a3460),_0x196283['hidden']=!![],_0x38a434['hidden']=![],document['getElementById']('usage-error-message')['textContent']=_0x5a3460['message']||'Unknown\x20error',document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![];}finally{state['usage']['request']=null;}})()),state['usage']['request'];}function renderUsage(_0x3d1db0){const _0x3f466f=Number(_0x3d1db0?.['tasks']?.['total'])||0x0,_0x25d1e5=document['getElementById']('usage-empty'),_0x2bd415=document['getElementById']('usage-content');if(_0x3f466f===0x0){closeUsageDrilldown(),_0x25d1e5['hidden']=![],_0x2bd415['hidden']=!![];return;}_0x25d1e5['hidden']=!![],_0x2bd415['hidden']=![];const _0x1eeb5a=Number(_0x3d1db0?.['approvalRate']?.['successRate'])||0x0,_0x343208=Math['round'](_0x1eeb5a*0x64),_0x4fdb7e=_0x3d1db0?.['code']?.['approved']||{},_0x45b05f=Number(_0x4fdb7e?.['tasks'])||0x0,_0x59e3cd=(Number(_0x4fdb7e?.['linesAdded'])||0x0)-(Number(_0x4fdb7e?.['linesDeleted'])||0x0),_0x142d43=(Number(_0x3d1db0?.['code']?.['linesAdded'])||0x0)-(Number(_0x3d1db0?.['code']?.['linesDeleted'])||0x0),_0x2cb453=Number(_0x3d1db0?.['timing']?.['averageDurationMinutes'])||0x0;setSummaryValue('usage-total-tasks',formatNumber(_0x3f466f)),setSummaryValue('usage-success-rate',_0x343208+'%',statusClassFromPercent(_0x343208)),setSummaryValue('usage-net-lines',formatSignedNumber(_0x142d43)),setSummaryValue('usage-average-duration',formatDurationMinutes(_0x2cb453));const _0x7d7822=_0x3f466f>0x0?Math['round'](_0x45b05f/_0x3f466f*0x64):0x0;document['getElementById']('usage-approved-summary')['textContent']=formatNumber(_0x45b05f)+'\x20approved\x20('+_0x7d7822+'%)\x20·\x20'+formatNumber(_0x3d1db0['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-success-detail')['textContent']=(_0x3d1db0['approvalRate']['completed']||0x0)+'\x20completed\x20/\x20'+(_0x3d1db0['approvalRate']['failed']||0x0)+'\x20failed\x20/\x20'+(_0x3d1db0['approvalRate']['interrupted']||0x0)+'\x20interrupted',document['getElementById']('usage-net-lines-detail')['textContent']='+'+formatNumber(_0x3d1db0['code']['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0x3d1db0['code']['linesDeleted']||0x0)+'\x20·\x20Approved\x20'+formatSignedNumber(_0x59e3cd)+'\x20net',document['getElementById']('usage-average-duration-detail')['textContent']=formatDurationMinutes(_0x3d1db0['timing']['medianDurationMinutes']||0x0)+'\x20median\x20·\x20'+formatNumber(_0x3d1db0['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-period-summary')['textContent']=buildPeriodSummary(_0x3d1db0['period']),renderBarList('usage-status-bars',_0x3d1db0['tasks']['byStatus']||{},{'drilldownGroup':'status','labelFormatter':prettifyKey}),renderObjectTable('usage-type-body',_0x3d1db0['tasks']['byType']||{},_0x3f466f,{'includePercent':!![],'labelFormatter':prettifyKey,'drilldownGroup':'type'}),renderObjectTable('usage-environment-body',_0x3d1db0['tasks']['byEnvironment']||{},_0x3f466f,{'drilldownGroup':'environment'}),renderUserTable('usage-user-body',_0x3d1db0['tasks']['byUser']||[]),renderObjectTable('usage-source-body',_0x3d1db0['tasks']['bySource']||{},_0x3f466f,{'labelFormatter':prettifyKey,'drilldownGroup':'source'}),document['getElementById']('usage-lines-added')['textContent']=formatNumber(_0x3d1db0['code']['linesAdded']||0x0),document['getElementById']('usage-lines-deleted')['textContent']=formatNumber(_0x3d1db0['code']['linesDeleted']||0x0),document['getElementById']('usage-files-changed')['textContent']=formatNumber(_0x3d1db0['code']['filesChanged']||0x0),document['getElementById']('usage-repositories-affected')['textContent']=formatNumber(_0x3d1db0['code']['repositoriesAffected']||0x0),document['getElementById']('usage-approved-lines-added')['textContent']=formatNumber(_0x4fdb7e['linesAdded']||0x0),document['getElementById']('usage-approved-lines-deleted')['textContent']=formatNumber(_0x4fdb7e['linesDeleted']||0x0),document['getElementById']('usage-approved-files-changed')['textContent']=formatNumber(_0x4fdb7e['filesChanged']||0x0),document['getElementById']('usage-approved-repositories-affected')['textContent']=formatNumber(_0x4fdb7e['repositoriesAffected']||0x0);const _0x435652=(_0x55698b,_0x67f7b0)=>_0x55698b>0x0?Math['round'](_0x67f7b0/_0x55698b*0x64):0x0;document['getElementById']('usage-added-pct')['style']['width']=_0x435652(_0x3d1db0['code']['linesAdded']||0x0,_0x4fdb7e['linesAdded']||0x0)+'%',document['getElementById']('usage-deleted-pct')['style']['width']=_0x435652(_0x3d1db0['code']['linesDeleted']||0x0,_0x4fdb7e['linesDeleted']||0x0)+'%',document['getElementById']('usage-files-pct')['style']['width']=_0x435652(_0x3d1db0['code']['filesChanged']||0x0,_0x4fdb7e['filesChanged']||0x0)+'%',document['getElementById']('usage-repos-pct')['style']['width']=_0x435652(_0x3d1db0['code']['repositoriesAffected']||0x0,_0x4fdb7e['repositoriesAffected']||0x0)+'%',syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function buildPeriodSummary(_0x13ee38){const _0x217012=_0x13ee38?.['from']?formatDateTime(_0x13ee38['from']):'the\x20earliest\x20loaded\x20task',_0x336536=_0x13ee38?.['to']?formatDateTime(_0x13ee38['to']):'now',_0x57a0e3=_0x13ee38?.['days']?_0x13ee38['days']+'\x20day\x20window':'All\x20available\x20task\x20history';return _0x57a0e3+'\x20·\x20'+_0x217012+'\x20to\x20'+_0x336536;}function isUsageDrilldownActive(_0x4bfa56,_0xee52a6){return state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']===_0x4bfa56&&state['usage']['drilldown']['value']===_0xee52a6;}function buildDrilldownTriggerAttrs(_0x5d0895,_0x8282d,_0x19d7f9,{active:active=![]}={}){return'\x0a\x20\x20\x20\x20data-drilldown-group=\x22'+Utils['escapeHtml'](_0x5d0895)+'\x22\x0a\x20\x20\x20\x20data-drilldown-value=\x22'+Utils['escapeHtml'](String(_0x8282d))+'\x22\x0a\x20\x20\x20\x20data-drilldown-label=\x22'+Utils['escapeHtml'](String(_0x19d7f9))+'\x22\x0a\x20\x20\x20\x20'+(active?'data-drilldown-active=\x22true\x22':'')+'\x0a\x20\x20';}function syncUsageDrilldownActionButtons(){document['querySelectorAll']('.admin-drilldown-action')['forEach'](_0x543ccc=>{const _0x1568eb=_0x543ccc['dataset']['drilldownGroup']||'',_0x5dcd37=_0x543ccc['dataset']['drilldownValue']||'';_0x543ccc['classList']['toggle']('active',isUsageDrilldownActive(_0x1568eb,_0x5dcd37));});}function renderBarList(_0x185fae,_0xf3a3f1,{drilldownGroup:drilldownGroup='',labelFormatter:labelFormatter=null}={}){const _0x3ef719=document['getElementById'](_0x185fae);if(!_0x3ef719)return;const _0x1d9a4d=Object['entries'](_0xf3a3f1)['filter'](([,_0x3d1f33])=>Number(_0x3d1f33)>0x0)['sort']((_0x5efeac,_0x555e9b)=>_0x555e9b[0x1]-_0x5efeac[0x1]),_0x1531a2=_0x1d9a4d['reduce']((_0x1ba905,[,_0x4609df])=>_0x1ba905+Number(_0x4609df||0x0),0x0);if(_0x1d9a4d['length']===0x0){_0x3ef719['innerHTML']='<div\x20class=\x22text-muted\x22>No\x20data\x20available.</div>';return;}_0x3ef719['innerHTML']=_0x1d9a4d['map'](([_0x35eb90,_0x304a94])=>{const _0x4e71a5=_0x1531a2>0x0?Math['max'](0x2,Math['round'](_0x304a94/_0x1531a2*0x64)):0x0,_0x10239=labelFormatter?labelFormatter(_0x35eb90):prettifyKey(_0x35eb90),_0x9d08de=Utils['escapeHtml'](_0x10239),_0x4443b0=Utils['escapeHtml'](formatNumber(_0x304a94)),_0x3e23ff=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0x35eb90)):![],_0x5c3a2a='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-label\x22>'+_0x9d08de+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-track\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-fill\x20status-'+Utils['escapeHtml'](String(_0x35eb90)['toLowerCase']())+'\x22\x20style=\x22width:\x20'+_0x4e71a5+'%\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-value\x22>'+_0x4443b0+'</div>\x0a\x20\x20\x20\x20';if(!drilldownGroup)return'<div\x20class=\x22admin-bar-row\x22>'+_0x5c3a2a+'</div>';return'\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20type=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-bar-row\x20admin-bar-row-button'+(_0x3e23ff?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs(drilldownGroup,_0x35eb90,_0x10239,{'active':_0x3e23ff})+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x5c3a2a+'\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20';})['join']('');}function renderObjectTable(_0x24d4b2,_0x220941,_0xf1cf1d,{includePercent:includePercent=![],labelFormatter:labelFormatter=null,drilldownGroup:drilldownGroup=''}={}){const _0x341d16=document['getElementById'](_0x24d4b2);if(!_0x341d16)return;const _0x3544fa=Object['entries'](_0x220941)['filter'](([,_0x2f235b])=>Number(_0x2f235b)>0x0)['sort']((_0x3f6063,_0x1e5063)=>_0x1e5063[0x1]-_0x3f6063[0x1]||String(_0x3f6063[0x0])['localeCompare'](String(_0x1e5063[0x0])));if(_0x3544fa['length']===0x0){_0x341d16['innerHTML']='<tr><td\x20colspan=\x22'+(includePercent?0x3:0x2)+'\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0x341d16['innerHTML']=_0x3544fa['map'](([_0x5b3372,_0x145d56])=>{const _0x565b5d=labelFormatter?labelFormatter(_0x5b3372):_0x5b3372,_0x341a01=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0x5b3372)):![],_0x301851=drilldownGroup?buildDrilldownTriggerAttrs(drilldownGroup,_0x5b3372,_0x565b5d,{'active':_0x341a01}):'',_0x13d1ed=includePercent?'<td>'+formatPercent(_0xf1cf1d>0x0?_0x145d56/_0xf1cf1d*0x64:0x0)+'</td>':'';return'\x0a\x20\x20\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(drilldownGroup?'class=\x22admin-drilldown-row'+(_0x341a01?'\x20active':'')+'\x22\x20tabindex=\x220\x22\x20role=\x22button\x22\x20aria-label=\x22Show\x20'+Utils['escapeHtml'](String(_0x565b5d))+'\x20tasks\x22\x20'+_0x301851:'')+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](String(_0x565b5d))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0x145d56))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x13d1ed+'\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';})['join']('');}function renderUserTable(_0x177e7f,_0x53ea59){const _0xb6c838=document['getElementById'](_0x177e7f);if(!_0xb6c838)return;if(!Array['isArray'](_0x53ea59)||_0x53ea59['length']===0x0){_0xb6c838['innerHTML']='<tr><td\x20colspan=\x222\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0xb6c838['innerHTML']=_0x53ea59['map'](_0x85807d=>'\x0a\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20class=\x22admin-drilldown-row'+(isUsageDrilldownActive('user',String(_0x85807d['userId']||'unknown'))?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20tabindex=\x220\x22\x0a\x20\x20\x20\x20\x20\x20role=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20aria-label=\x22Show\x20tasks\x20for\x20'+Utils['escapeHtml'](_0x85807d['name']||_0x85807d['username']||_0x85807d['userId']||'Unknown')+'\x22\x0a\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs('user',_0x85807d['userId']||'unknown',_0x85807d['name']||_0x85807d['username']||_0x85807d['userId']||'Unknown',{'active':isUsageDrilldownActive('user',String(_0x85807d['userId']||'unknown'))})+'\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](_0x85807d['name']||_0x85807d['username']||_0x85807d['userId']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0x85807d['count']||0x0))+'</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20')['join']('');}function handleUsageDrilldownClick(_0xa5ab03){const _0x3c0bd2=_0xa5ab03['target']['closest']('[data-drilldown-group][data-drilldown-value]');if(!_0x3c0bd2)return;_0xa5ab03['preventDefault'](),toggleUsageDrilldown(_0x3c0bd2);}function handleUsageDrilldownKeydown(_0x11d45f){if(_0x11d45f['key']!=='Enter'&&_0x11d45f['key']!=='\x20')return;const _0x114b0a=_0x11d45f['target']['closest']('.admin-drilldown-row[data-drilldown-group][data-drilldown-value]');if(!_0x114b0a)return;_0x11d45f['preventDefault'](),toggleUsageDrilldown(_0x114b0a);}function handleGlobalKeydown(_0x20d583){_0x20d583['key']==='Escape'&&state['usage']['drilldown']['open']&&closeUsageDrilldown();}function toggleUsageDrilldown(_0x8ecd2e){const _0x3b1d5f=_0x8ecd2e['dataset']['drilldownGroup']||'',_0x5bc27c=_0x8ecd2e['dataset']['drilldownValue']||'',_0x5a1620=_0x8ecd2e['dataset']['drilldownLabel']||_0x5bc27c;if(!_0x3b1d5f||!_0x5bc27c)return;if(isUsageDrilldownActive(_0x3b1d5f,_0x5bc27c)){closeUsageDrilldown();return;}openUsageDrilldown({'group':_0x3b1d5f,'value':_0x5bc27c,'label':_0x5a1620});}function openUsageDrilldown({group:_0x44b1f6,value:_0x40f792,label:_0x246795}){state['usage']['drilldown']['group']=_0x44b1f6,state['usage']['drilldown']['value']=_0x40f792,state['usage']['drilldown']['label']=_0x246795||_0x40f792,state['usage']['drilldown']['open']=!![],state['usage']['drilldown']['data']=null;const _0x4a532d=document['getElementById']('usage-drilldown-overlay'),_0x314128=document['getElementById']('usage-drilldown-drawer');_0x4a532d&&(_0x4a532d['hidden']=![],requestAnimationFrame(()=>_0x4a532d['classList']['add']('active'))),_0x314128&&(_0x314128['hidden']=![],_0x314128['setAttribute']('aria-hidden','false'),requestAnimationFrame(()=>_0x314128['classList']['add']('active'))),updateUsageDrilldownHeader(),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights(),loadUsageDrilldown({'showLoading':!![]});}function closeUsageDrilldown(){state['usage']['drilldown']['open']=![],state['usage']['drilldown']['requestToken']+=0x1,state['usage']['drilldown']['request']=null,state['usage']['drilldown']['group']='',state['usage']['drilldown']['value']='',state['usage']['drilldown']['label']='',state['usage']['drilldown']['data']=null;const _0x231a79=document['getElementById']('usage-drilldown-overlay'),_0x11cd7e=document['getElementById']('usage-drilldown-drawer');_0x231a79&&(_0x231a79['classList']['remove']('active'),_0x231a79['hidden']=!![]),_0x11cd7e&&(_0x11cd7e['classList']['remove']('active'),_0x11cd7e['hidden']=!![],_0x11cd7e['setAttribute']('aria-hidden','true')),renderUsageDrilldown(null),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function refreshUsageDrilldownHighlights(){document['querySelectorAll']('.admin-drilldown-row')['forEach'](_0x35a2c8=>{const _0x52e9b4=_0x35a2c8['dataset']['drilldownGroup']||'',_0x208675=_0x35a2c8['dataset']['drilldownValue']||'';_0x35a2c8['classList']['toggle']('active',isUsageDrilldownActive(_0x52e9b4,_0x208675));}),document['querySelectorAll']('.admin-bar-row-button')['forEach'](_0x3661d2=>{const _0x4ab956=_0x3661d2['dataset']['drilldownGroup']||'',_0x220245=_0x3661d2['dataset']['drilldownValue']||'';_0x3661d2['classList']['toggle']('active',isUsageDrilldownActive(_0x4ab956,_0x220245));});}function updateUsageDrilldownHeader(_0x3a50c1=state['usage']['drilldown']['data']){const _0x41219a=document['getElementById']('usage-drilldown-title'),_0x4d5eac=document['getElementById']('usage-drilldown-subtitle');if(!_0x41219a||!_0x4d5eac)return;const _0x5300a8=state['usage']['environment']?'\x20in\x20'+state['usage']['environment']:'';_0x41219a['textContent']=state['usage']['drilldown']['label']||'Tasks';if(_0x3a50c1?.['summary']?.['total']>0x0){const _0x2c9904=formatNumber(_0x3a50c1['summary']['total']||0x0),_0x595819=formatNumber(_0x3a50c1['displayed']||0x0);_0x4d5eac['textContent']=_0x3a50c1['hasMore']?'Showing\x20'+_0x595819+'\x20of\x20'+_0x2c9904+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x5300a8+',\x20newest\x20first.':'Showing\x20all\x20'+_0x2c9904+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x5300a8+'.';return;}if(_0x3a50c1){_0x4d5eac['textContent']='No\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x5300a8+'.';return;}_0x4d5eac['textContent']='Loading\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x5300a8+'.';}function buildPeriodLabel(){return state['usage']['days']==='all'?'all-time\x20window':state['usage']['days']+'-day\x20window';}async function loadUsageDrilldown({showLoading:showLoading=![]}={}){if(!state['usage']['drilldown']['open']||!state['usage']['drilldown']['group']||!state['usage']['drilldown']['value'])return null;if(state['usage']['drilldown']['request'])return state['usage']['drilldown']['request'];updateUsageDrilldownHeader();const _0x5aa3c1=state['usage']['drilldown']['requestToken']+0x1;return state['usage']['drilldown']['requestToken']=_0x5aa3c1,state['usage']['drilldown']['request']=((async()=>{showLoading&&setUsageDrilldownLoadingState();try{const _0x36fcb0=new URLSearchParams({'days':state['usage']['days'],'group':state['usage']['drilldown']['group'],'value':state['usage']['drilldown']['value'],'limit':String(USAGE_DRILLDOWN_LIMIT)});state['usage']['environment']&&_0x36fcb0['set']('environment',state['usage']['environment']);const _0x212446=await API['get']('/stats/drilldown?'+_0x36fcb0['toString']());if(state['usage']['drilldown']['requestToken']!==_0x5aa3c1||!state['usage']['drilldown']['open'])return null;return state['usage']['drilldown']['data']=_0x212446,renderUsageDrilldown(_0x212446),_0x212446;}catch(_0x47a947){if(state['usage']['drilldown']['requestToken']!==_0x5aa3c1||!state['usage']['drilldown']['open'])return null;return renderUsageDrilldownError(_0x47a947),null;}finally{state['usage']['drilldown']['requestToken']===_0x5aa3c1&&(state['usage']['drilldown']['request']=null);}})()),state['usage']['drilldown']['request'];}function setUsageDrilldownLoadingState(){const _0x16e8b5=document['getElementById']('usage-drilldown-loading'),_0xf44347=document['getElementById']('usage-drilldown-error'),_0x178700=document['getElementById']('usage-drilldown-empty'),_0x3e3270=document['getElementById']('usage-drilldown-list'),_0x4e603c=document['getElementById']('usage-drilldown-summary');if(_0x16e8b5)_0x16e8b5['hidden']=![];if(_0xf44347)_0xf44347['hidden']=!![];if(_0x178700)_0x178700['hidden']=!![];_0x3e3270&&(_0x3e3270['hidden']=!![],_0x3e3270['innerHTML']=''),_0x4e603c&&(_0x4e603c['hidden']=!![],_0x4e603c['innerHTML']='');}function renderUsageDrilldownError(_0x44222b){const _0x4286e2=document['getElementById']('usage-drilldown-loading'),_0x1b2569=document['getElementById']('usage-drilldown-error'),_0x5d4f49=document['getElementById']('usage-drilldown-empty'),_0x8682ea=document['getElementById']('usage-drilldown-list'),_0x2ed218=document['getElementById']('usage-drilldown-summary');if(_0x4286e2)_0x4286e2['hidden']=!![];if(_0x5d4f49)_0x5d4f49['hidden']=!![];_0x8682ea&&(_0x8682ea['hidden']=!![],_0x8682ea['innerHTML']=''),_0x2ed218&&(_0x2ed218['hidden']=!![],_0x2ed218['innerHTML']=''),_0x1b2569&&(_0x1b2569['hidden']=![]),document['getElementById']('usage-drilldown-error-message')['textContent']=_0x44222b?.['message']||'Unknown\x20error';}function renderUsageDrilldown(_0x5dfcbc){const _0x5c8edd=document['getElementById']('usage-drilldown-loading'),_0x520f3d=document['getElementById']('usage-drilldown-error'),_0x3ff932=document['getElementById']('usage-drilldown-empty'),_0x24db29=document['getElementById']('usage-drilldown-list'),_0x543f6=document['getElementById']('usage-drilldown-summary');if(_0x5c8edd)_0x5c8edd['hidden']=!![];if(_0x520f3d)_0x520f3d['hidden']=!![];if(!_0x5dfcbc){updateUsageDrilldownHeader(null);if(_0x3ff932)_0x3ff932['hidden']=!![];_0x24db29&&(_0x24db29['hidden']=!![],_0x24db29['innerHTML']='');_0x543f6&&(_0x543f6['hidden']=!![],_0x543f6['innerHTML']='');return;}updateUsageDrilldownHeader(_0x5dfcbc),renderUsageDrilldownSummary(_0x5dfcbc);if(!Array['isArray'](_0x5dfcbc['tasks'])||_0x5dfcbc['tasks']['length']===0x0){if(_0x3ff932)_0x3ff932['hidden']=![];_0x24db29&&(_0x24db29['hidden']=!![],_0x24db29['innerHTML']='');return;}if(_0x3ff932)_0x3ff932['hidden']=!![];_0x24db29&&(_0x24db29['hidden']=![],_0x24db29['innerHTML']=_0x5dfcbc['tasks']['map'](_0x1c62c5=>renderUsageDrilldownTask(_0x1c62c5))['join'](''));}function renderUsageDrilldownSummary(_0x131e1b){const _0x22fbdc=document['getElementById']('usage-drilldown-summary');if(!_0x22fbdc)return;const _0xc6e97a=_0x131e1b['summary']||{},_0x35c1ae=[{'label':'Matching\x20Tasks','value':formatNumber(_0xc6e97a['total']||0x0),'meta':_0x131e1b['hasMore']?'Showing\x20'+formatNumber(_0x131e1b['displayed']||0x0)+'\x20most\x20recent':'Current\x20filter\x20match'},{'label':'Approved','value':formatNumber(_0xc6e97a['approvedTasks']||0x0),'meta':formatNumber(_0xc6e97a['pushedTasks']||0x0)+'\x20pushed'},{'label':'Changed\x20Tasks','value':formatNumber(_0xc6e97a['tasksWithChanges']||0x0),'meta':formatNumber(_0xc6e97a['filesChanged']||0x0)+'\x20files\x20changed'},{'label':'Net\x20Lines','value':formatSignedNumber((Number(_0xc6e97a['linesAdded'])||0x0)-(Number(_0xc6e97a['linesDeleted'])||0x0)),'meta':'+'+formatNumber(_0xc6e97a['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0xc6e97a['linesDeleted']||0x0)}];_0x22fbdc['hidden']=![],_0x22fbdc['innerHTML']=_0x35c1ae['map'](_0x50bec5=>'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-label\x22>'+Utils['escapeHtml'](_0x50bec5['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-value\x22>'+Utils['escapeHtml'](_0x50bec5['value'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-meta\x22>'+Utils['escapeHtml'](_0x50bec5['meta'])+'</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20')['join']('');}function renderUsageDrilldownTask(_0xd1d011){const _0x4da4a0=Utils['escapeHtml'](_0xd1d011['name']||'Task\x20'+String(_0xd1d011['taskId']||'')['slice'](0x0,0x8)),_0x5a8ec2=Utils['escapeHtml'](_0xd1d011['taskId']||''),_0x23a174='task.html?id='+encodeURIComponent(_0xd1d011['taskId']||''),_0x2cb59e=Utils['escapeHtml'](_0xd1d011['user']?.['name']||_0xd1d011['user']?.['username']||_0xd1d011['user']?.['userId']||'Unknown'),_0x3b30fd=Utils['escapeHtml'](_0xd1d011['environment']||'Unknown'),_0x12a501=Utils['escapeHtml'](prettifyKey(_0xd1d011['source']||'manual')),_0x19754e=Utils['escapeHtml'](prettifyKey(_0xd1d011['type']||'standard')),_0x5078e5=Utils['escapeHtml'](formatDateTime(_0xd1d011['createdAt'])),_0x428c54=_0xd1d011['finishedAt']?Utils['escapeHtml'](formatDateTime(_0xd1d011['finishedAt'])):'In\x20progress',_0x3881e4=_0xd1d011['durationMinutes']===null?'Pending':Utils['escapeHtml'](formatDurationMinutes(_0xd1d011['durationMinutes'])),_0x146f95=Utils['escapeHtml'](prettifyKey(_0xd1d011['status']||'unknown')),_0x29f3f8=Utils['escapeHtml'](String(_0xd1d011['status']||'unknown')['toLowerCase']()),_0x5b4947=[_0xd1d011['approved']?'<span\x20class=\x22admin-drilldown-flag\x20approved\x22>Approved</span>':'',_0xd1d011['pushed']?'<span\x20class=\x22admin-drilldown-flag\x20pushed\x22>Pushed</span>':'',_0xd1d011['hasChanges']?'<span\x20class=\x22admin-drilldown-flag\x20changed\x22>Has\x20Changes</span>':'']['filter'](Boolean)['join']('');return'\x0a\x20\x20\x20\x20<article\x20class=\x22admin-drilldown-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h3\x20class=\x22admin-drilldown-task-name\x22>'+_0x4da4a0+'</h3>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-task-id\x22>'+_0x5a8ec2+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-pill\x20status-'+_0x29f3f8+'\x22>'+_0x146f95+'</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Environment</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x3b30fd+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>User</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x2cb59e+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Source</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x12a501+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x19754e+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Created</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x5078e5+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Duration</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x3881e4+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Finished</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x428c54+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Code\x20Impact</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>+'+Utils['escapeHtml'](formatNumber(_0xd1d011['code']?.['linesAdded']||0x0))+'\x20/\x20-'+Utils['escapeHtml'](formatNumber(_0xd1d011['code']?.['linesDeleted']||0x0))+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0xd1d011['code']?.['filesChanged']||0x0))+'\x20files</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0xd1d011['code']?.['repositories']||0x0))+'\x20repos</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-flags\x22>'+(_0x5b4947||'<span\x20class=\x22admin-drilldown-flag\x20neutral\x22>Not\x20approved</span>')+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20class=\x22btn-secondary\x20btn-small\x22\x20href=\x22'+Utils['escapeHtml'](_0x23a174)+'\x22\x20target=\x22_blank\x22\x20rel=\x22noopener\x20noreferrer\x22>Open\x20Task</a>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</article>\x0a\x20\x20';}function updateActiveFilterButtons(_0x2450ba,_0x47c40f){document['querySelectorAll'](_0x2450ba+'\x20.admin-filter-btn')['forEach'](_0x203bb2=>{_0x203bb2['classList']['toggle']('active',_0x203bb2['dataset']['level']===_0x47c40f||_0x203bb2['dataset']['days']===_0x47c40f||_0x203bb2['dataset']['order']===_0x47c40f);});}function scrollLogsToLiveEdge(_0x3949fc){if(!_0x3949fc)return;if(state['logs']['order']===LOG_ORDER_DESC){_0x3949fc['scrollTop']=0x0;return;}_0x3949fc['scrollTop']=_0x3949fc['scrollHeight'];}function setSummaryValue(_0x5ab774,_0x32f6f0,_0x2c5ecd=''){const _0x5907c1=document['getElementById'](_0x5ab774);if(!_0x5907c1)return;_0x5907c1['textContent']=_0x32f6f0,_0x5907c1['classList']['remove']('status-good','status-warn','status-bad'),_0x2c5ecd&&_0x5907c1['classList']['add'](_0x2c5ecd);}function statusClassFromPercent(_0x5205b0){if(_0x5205b0>=0x50)return'status-good';if(_0x5205b0>0x3c)return'status-warn';return'status-bad';}function formatDateTime(_0x324bf3){const _0x4032d2=new Date(_0x324bf3);if(Number['isNaN'](_0x4032d2['getTime']()))return _0x324bf3||'Unknown';return _0x4032d2['toLocaleString']();}function formatLogContext(_0x2e5920){if(!_0x2e5920)return'';try{return JSON['stringify'](_0x2e5920,null,0x2);}catch{return String(_0x2e5920);}}function formatLogEntryForClipboard(_0x1fe0f9){const _0x70fb16=['['+formatDateTime(_0x1fe0f9['timestamp'])+']\x20'+String(_0x1fe0f9['level']||'INFO')['toUpperCase']()];_0x1fe0f9['message']&&_0x70fb16['push'](String(_0x1fe0f9['message']));const _0x2d90d1=formatLogContext(_0x1fe0f9['context']);return _0x2d90d1&&(_0x70fb16['push']('Context:'),_0x70fb16['push'](_0x2d90d1)),_0x70fb16['join']('\x0a');}function formatLogEntriesForClipboard(_0x538437){if(!Array['isArray'](_0x538437)||_0x538437['length']===0x0)return'';return _0x538437['map'](formatLogEntryForClipboard)['join']('\x0a\x0a');}function formatDurationMinutes(_0x536ed6){const _0xb86796=Math['round'](Number(_0x536ed6)||0x0);if(_0xb86796<0x3c)return _0xb86796+'m';const _0xec1b2c=Math['floor'](_0xb86796/0x3c),_0x329f88=_0xb86796%0x3c;return _0x329f88>0x0?_0xec1b2c+'h\x20'+_0x329f88+'m':_0xec1b2c+'h';}function formatPercent(_0x576c0c){return Math['round'](Number(_0x576c0c)||0x0)+'%';}function formatNumber(_0x381f1c){return NUMBER_FORMATTER['format'](Number(_0x381f1c)||0x0);}function formatSignedNumber(_0x1570f7){const _0x41d06e=Number(_0x1570f7)||0x0;if(_0x41d06e>0x0)return'+'+formatNumber(_0x41d06e);return formatNumber(_0x41d06e);}function prettifyKey(_0x337a6e){return String(_0x337a6e)['replace'](/[_-]+/g,'\x20')['replace'](/\b\w/g,_0x5b1f83=>_0x5b1f83['toUpperCase']());}const DRILLDOWN_TITLES={'containers':'Docker\x20Containers','storage':'Docker\x20Storage','sessions':'Active\x20Sessions','system':'System\x20Information'};function openDrilldown(_0x2b6963){if(!_0x2b6963||!DRILLDOWN_TITLES[_0x2b6963])return;const _0x2fd6a5=document['getElementById']('drilldown-modal'),_0x34cefc=document['getElementById']('drilldown-modal-title'),_0x2f703d=document['getElementById']('drilldown-loading'),_0x398a2c=document['getElementById']('drilldown-error'),_0x20caaf=document['getElementById']('drilldown-content');_0x34cefc['textContent']=DRILLDOWN_TITLES[_0x2b6963],_0x2f703d['hidden']=![],_0x398a2c['hidden']=!![],_0x20caaf['innerHTML']='',_0x2fd6a5['hidden']=![],loadDrilldownData(_0x2b6963)['then'](_0x6f5d97=>{_0x2f703d['hidden']=!![],_0x20caaf['innerHTML']=_0x6f5d97,attachDrilldownActions(_0x2b6963,_0x20caaf);})['catch'](_0x34ff31=>{_0x2f703d['hidden']=!![],_0x398a2c['hidden']=![],document['getElementById']('drilldown-error-message')['textContent']=_0x34ff31['message']||'Failed\x20to\x20load\x20details';});}function closeDrilldownModal(){const _0x37a27b=document['getElementById']('drilldown-modal');_0x37a27b&&(_0x37a27b['hidden']=!![]);}async function loadDrilldownData(_0x431c22){switch(_0x431c22){case'containers':return loadContainersDrilldown();case'storage':return loadStorageDrilldown();case'sessions':return loadSessionsDrilldown();case'system':return loadSystemDrilldown();default:return'<div\x20class=\x22drilldown-empty\x22>Unknown\x20drilldown\x20type.</div>';}}async function loadContainersDrilldown(){const _0x47a70c=await API['getDockerContainers'](),_0x1b7113=_0x47a70c['containers']||[];if(_0x1b7113['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20Docker\x20containers\x20found.</div>';const _0xfbf14c=_0x1b7113['filter'](_0x375d0a=>_0x375d0a['state']==='running')['length'],_0x5c70c9=_0x1b7113['length']-_0xfbf14c;let _0x528d99='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x1b7113['length']))+'\x20container'+(_0x1b7113['length']!==0x1?'s':'')+'\x20total\x20—\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0xfbf14c))+'\x20running,\x20'+esc(String(_0x5c70c9))+'\x20stopped\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Image</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Status</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Ports</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0xbecd2f of _0x1b7113){const _0x48691e=esc((_0xbecd2f['names']||[])[0x0]||_0xbecd2f['shortId']||_0xbecd2f['id']),_0x1e8538=esc(_0xbecd2f['image']||'-'),_0x4a191d=String(_0xbecd2f['state']||'unknown')['toLowerCase'](),_0xb93f6f=esc(_0xbecd2f['status']||_0xbecd2f['state']||'-'),_0xf19407=(_0xbecd2f['ports']||[])['filter'](_0x3f43af=>_0x3f43af['public'])['map'](_0x356901=>esc(_0x356901['public']+':'+_0x356901['private']+'/'+_0x356901['type']))['join'](',\x20')||'-',_0x294498=_0xbecd2f['created']?esc(formatDateTime(_0xbecd2f['created'])):'-',_0x2a9ee4=_0x4a191d==='running';_0x528d99+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><strong>'+_0x48691e+'</strong><br><span\x20class=\x22text-muted\x22\x20style=\x22font-size:11px\x22>'+esc(_0xbecd2f['shortId']||'')+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-tag\x22>'+_0x1e8538+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-status\x20drilldown-status-'+esc(_0x4a191d)+'\x22>'+_0xb93f6f+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0xf19407+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+_0x294498+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x2a9ee4?'<button\x20class=\x22btn-secondary\x20btn-small\x22\x20data-action=\x22stop-container\x22\x20data-container-id=\x22'+esc(_0xbecd2f['id'])+'\x22>Stop</button>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22btn-ghost\x20btn-small\x22\x20data-action=\x22remove-container\x22\x20data-container-id=\x22'+esc(_0xbecd2f['id'])+'\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0x528d99+='</tbody></table></div>',_0x528d99;}async function loadStorageDrilldown(){const [_0x5664ad,_0x564d49]=await Promise['all']([API['getDockerImages'](),API['getDockerVolumes']()]),_0x3fc962=_0x5664ad['images']||[],_0x1e1281=_0x564d49['volumes']||[];let _0xe7903='';_0xe7903+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Images</div>';if(_0x3fc962['length']===0x0)_0xe7903+='<div\x20class=\x22drilldown-empty\x22>No\x20images\x20found.</div>';else{_0xe7903+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Tags</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Containers</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x62fc2f of _0x3fc962){const _0x5f23d7=(_0x62fc2f['tags']||[])['filter'](_0xfeea7f=>_0xfeea7f!=='<none>:<none>'),_0x4b1be3=_0x5f23d7['length']>0x0?'<div\x20class=\x22drilldown-tag-list\x22>'+_0x5f23d7['map'](_0x139a17=>'<span\x20class=\x22drilldown-tag\x22>'+esc(_0x139a17)+'</span>')['join']('')+'</div>':'<span\x20class=\x22text-muted\x22>untagged</span>';_0xe7903+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td><code>'+esc(_0x62fc2f['id']||'-')+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x4b1be3+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+esc(_0x62fc2f['sizeDisplay']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x62fc2f['created']?esc(formatDateTime(_0x62fc2f['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x62fc2f['containers']??'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0xe7903+='</tbody></table></div>';}_0xe7903+='</div>',_0xe7903+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Volumes</div>';if(_0x1e1281['length']===0x0)_0xe7903+='<div\x20class=\x22drilldown-empty\x22>No\x20volumes\x20found.</div>';else{_0xe7903+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Driver</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Scope</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x360481 of _0x1e1281){const _0x4aff90=_0x360481['name']||'-',_0x5e3b12=_0x4aff90['length']>0x28?_0x4aff90['substring'](0x0,0x25)+'...':_0x4aff90;_0xe7903+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x4aff90)+'\x22><code>'+esc(_0x5e3b12)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x360481['driver']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x360481['scope']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x360481['created']?esc(formatDateTime(_0x360481['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0xe7903+='</tbody></table></div>';}return _0xe7903+='</div>',_0xe7903;}async function loadSessionsDrilldown(){const _0x1f9a51=await API['getActiveSessions'](),_0x19952c=_0x1f9a51['sessions']||[];if(_0x19952c['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20active\x20sessions\x20found.</div>';let _0x2bd4e0='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x19952c['length']))+'\x20active\x20session'+(_0x19952c['length']!==0x1?'s':'')+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Session\x20ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>User</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Last\x20Access</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0x5336b8 of _0x19952c){const _0x146744=(_0x5336b8['id']||'')['length']>0x10?_0x5336b8['id']['substring'](0x0,0xd)+'...':_0x5336b8['id']||'-';_0x2bd4e0+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x5336b8['id']||'')+'\x22><code>'+esc(_0x146744)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x5336b8['username']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x5336b8['createdAt']?esc(formatDateTime(_0x5336b8['createdAt'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x5336b8['lastAccess']?esc(formatDateTime(_0x5336b8['lastAccess'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0x2bd4e0+='</tbody></table></div>',_0x2bd4e0;}async function loadSystemDrilldown(){const _0x136178=await API['getSystemInfo']();let _0x261818='<div\x20class=\x22drilldown-info-grid\x22>';const _0x12a300=[{'label':'Hostname','value':_0x136178['hostname']},{'label':'Platform','value':_0x136178['platform']+'\x20('+_0x136178['arch']+')'},{'label':'Kernel','value':_0x136178['release']},{'label':'Node.js','value':_0x136178['nodeVersion']},{'label':'Process\x20ID','value':_0x136178['pid']},{'label':'CPU\x20Model','value':_0x136178['cpuModel']},{'label':'CPU\x20Cores','value':_0x136178['coreCount']},{'label':'Total\x20Memory','value':_0x136178['totalMemoryDisplay']},{'label':'Free\x20Memory','value':_0x136178['freeMemoryDisplay']},{'label':'System\x20Uptime','value':formatUptimeSeconds(_0x136178['uptime']?.['system'])},{'label':'Process\x20Uptime','value':formatUptimeSeconds(_0x136178['uptime']?.['process'])}];for(const _0x510bc1 of _0x12a300){_0x261818+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>'+esc(_0x510bc1['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(String(_0x510bc1['value']??'-'))+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';}_0x261818+='</div>';_0x136178['loadAverage']&&(_0x261818+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Load\x20Average</div>',_0x261818+='<div\x20class=\x22drilldown-info-grid\x22>',_0x261818+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>1\x20Minute</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x136178['loadAverage']['1m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>5\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x136178['loadAverage']['5m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>15\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x136178['loadAverage']['15m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x261818+='</div></div>');if(Array['isArray'](_0x136178['cores'])&&_0x136178['cores']['length']>0x0&&_0x136178['cores']['length']<=0x40){_0x261818+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>CPU\x20Cores</div>',_0x261818+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Core</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Model</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Speed\x20(MHz)</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x43af23 of _0x136178['cores']){_0x261818+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x43af23['index']))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x43af23['model']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x43af23['speed']||'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x261818+='</tbody></table></div></div>';}return _0x261818;}function formatUptimeSeconds(_0x934342){if(!Number['isFinite'](_0x934342)||_0x934342<0x0)return'-';const _0x2d1511=Math['floor'](_0x934342/0x15180),_0x5ca359=Math['floor'](_0x934342%0x15180/0xe10),_0x3fd442=Math['floor'](_0x934342%0xe10/0x3c);if(_0x2d1511>0x0)return _0x2d1511+'d\x20'+_0x5ca359+'h\x20'+_0x3fd442+'m';if(_0x5ca359>0x0)return _0x5ca359+'h\x20'+_0x3fd442+'m';return _0x3fd442+'m';}function esc(_0x59cb32){return Utils['escapeHtml'](String(_0x59cb32??''));}function attachDrilldownActions(_0x114497,_0x1c73e4){_0x114497==='containers'&&_0x1c73e4['addEventListener']('click',async _0xc613f2=>{const _0x39a108=_0xc613f2['target']['closest']('[data-action]');if(!_0x39a108)return;const _0x5e45f2=_0x39a108['dataset']['action'],_0x24abd3=_0x39a108['dataset']['containerId'];if(!_0x24abd3)return;_0x39a108['disabled']=!![],_0x39a108['textContent']=_0x5e45f2==='stop-container'?'Stopping...':'Removing...';try{if(_0x5e45f2==='stop-container')await API['stopDockerContainer'](_0x24abd3),Utils['showSuccess']('Container\x20stopped');else _0x5e45f2==='remove-container'&&(await API['removeDockerContainer'](_0x24abd3),Utils['showSuccess']('Container\x20removed'));const _0x4294b6=await loadContainersDrilldown();document['getElementById']('drilldown-content')['innerHTML']=_0x4294b6,attachDrilldownActions('containers',document['getElementById']('drilldown-content')),loadHealth({'showLoading':![]});}catch(_0x3500e6){Utils['showError'](_0x3500e6['message']||'Failed\x20to\x20'+_0x5e45f2['replace']('-','\x20')),_0x39a108['disabled']=![],_0x39a108['textContent']=_0x5e45f2==='stop-container'?'Stop':'Remove';}});}
|
|
1
|
+
import{API,Utils,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';const HEALTH_REFRESH_INTERVAL_MS=0x7530,LOG_SEARCH_DEBOUNCE_MS=0xfa,LOG_ORDER_ASC='asc',LOG_ORDER_DESC='desc',RESTART_POLL_INTERVAL_MS=0x7d0,RESTART_POLL_MAX_ATTEMPTS=0x1e,RESTART_MIN_SUCCESS_DELAY_MS=0x1b58,USAGE_DRILLDOWN_LIMIT=0x19,NUMBER_FORMATTER=new Intl['NumberFormat'](),state={'currentSection':'health','environments':[],'health':{'loaded':![],'request':null,'autoRefreshTimer':null,'versionChecked':![],'currentVersion':null,'latestVersion':null,'installCommand':null,'updateEnabled':![],'hasRestartCommand':![],'updateInProgress':![],'restartInProgress':![],'updateAvailable':![]},'logs':{'loaded':![],'request':null,'entries':[],'nextEntryId':0x1,'selectedEntryIds':new Set(),'total':0x0,'minLevel':'INFO','level':'ALL','order':LOG_ORDER_ASC,'search':'','maxEntries':0x3e8,'stream':null,'streamState':'paused','live':![],'autoScroll':!![],'searchTimer':null},'usage':{'loaded':![],'request':null,'days':'30','environment':'','drilldown':{'open':![],'request':null,'requestToken':0x0,'group':'','value':'','label':'','data':null}}};document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle();const _0x5aa01f=await checkAdminAccess();await initializeAdminMenu(_0x5aa01f),setupEventListeners(),await loadEnvironmentOptions(),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-content')['hidden']=![];const _0x1a30d7=getSessionValue('admin-health-auto-refresh');if(_0x1a30d7!==null){const _0x48dd1d=document['getElementById']('health-auto-refresh');if(_0x48dd1d)_0x48dd1d['checked']=_0x1a30d7!=='false';}const _0x3d4ded=getSessionValue('admin-logs-order');(_0x3d4ded===LOG_ORDER_ASC||_0x3d4ded===LOG_ORDER_DESC)&&(state['logs']['order']=_0x3d4ded);syncLogOrderUi();const _0xc97404=getSessionValue('admin-active-section'),_0x5e8066=['health','logs','usage']['includes'](_0xc97404)?_0xc97404:'health';await switchSection(_0x5e8066);}catch(_0xd1324d){console['error']('Failed\x20to\x20initialize\x20Server\x20Administration\x20page',_0xd1324d),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-error')['hidden']=![],document['getElementById']('admin-error-message')['textContent']=_0xd1324d['message']||'Unknown\x20error';}}async function checkAdminAccess(){try{const _0x17df40=await API['getCurrentUser']();if(!window['Permissions']?.['hasServerPermission'](_0x17df40,'*')){Utils['showToast']('Access\x20denied:\x20Admin\x20privileges\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x7d0);throw new Error('Access\x20denied');}return _0x17df40;}catch(_0x3531c3){_0x3531c3['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x3531c3;}}function setupEventListeners(){document['querySelectorAll']('.settings-nav-item')['forEach'](_0x588fa3=>{_0x588fa3['addEventListener']('click',()=>switchSection(_0x588fa3['dataset']['section']));}),document['getElementById']('retry-admin-btn')?.['addEventListener']('click',()=>{window['location']['reload']();}),document['getElementById']('health-refresh-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('retry-health-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('health-auto-refresh')?.['addEventListener']('change',syncHealthAutoRefresh),document['getElementById']('health-check-updates-btn')?.['addEventListener']('click',()=>loadVersionStatus({'checkUpdates':!![]})),document['getElementById']('health-copy-install-btn')?.['addEventListener']('click',copyInstallCommand),document['getElementById']('health-update-btn')?.['addEventListener']('click',applyUpdate),document['getElementById']('health-restart-btn')?.['addEventListener']('click',showRestartConfirmation),document['getElementById']('confirm-restart-btn')?.['addEventListener']('click',confirmRestart),document['getElementById']('cancel-restart-btn')?.['addEventListener']('click',hideRestartModal),document['getElementById']('close-restart-modal')?.['addEventListener']('click',hideRestartModal),document['querySelector']('#restart-modal\x20.modal-overlay')?.['addEventListener']('click',hideRestartModal),document['getElementById']('restart-overlay-retry')?.['addEventListener']('click',()=>waitForServerRestart({'manualRetry':!![]})),document['getElementById']('server-stop-containers')?.['addEventListener']('click',()=>runCleanupAction('Stopping\x20containers',()=>API['stopAllContainers']())),document['getElementById']('server-remove-stopped')?.['addEventListener']('click',()=>runCleanupAction('Removing\x20stopped\x20containers',()=>API['removeStoppedContainers']())),document['getElementById']('server-prune-docker')?.['addEventListener']('click',()=>runCleanupAction('Pruning\x20Docker\x20resources',()=>API['pruneDockerResources']())),document['getElementById']('cleanup-toggle')?.['addEventListener']('click',toggleCleanupSection),document['getElementById']('logs-refresh-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('retry-logs-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('logs-live-toggle')?.['addEventListener']('click',toggleLogsLiveMode),document['getElementById']('logs-clear-btn')?.['addEventListener']('click',clearDisplayedLogs),document['getElementById']('logs-select-visible-btn')?.['addEventListener']('click',toggleVisibleLogSelection),document['getElementById']('logs-clear-selection-btn')?.['addEventListener']('click',clearSelectedLogEntries),document['getElementById']('logs-copy-selected-btn')?.['addEventListener']('click',copySelectedLogEntries),document['getElementById']('logs-search-input')?.['addEventListener']('input',handleLogsSearchInput),document['querySelectorAll']('#logs-level-filters\x20.admin-filter-btn')['forEach'](_0x36c9fd=>{_0x36c9fd['addEventListener']('click',()=>{state['logs']['level']=_0x36c9fd['dataset']['level']||'ALL',updateActiveFilterButtons('#logs-level-filters',state['logs']['level']),loadLogs({'showLoading':![]});});}),document['querySelectorAll']('#logs-order-toggle\x20.admin-filter-btn')['forEach'](_0x4157b6=>{_0x4157b6['addEventListener']('click',()=>{setLogOrder(_0x4157b6['dataset']['order'],{'focusLiveEdge':!![]});});}),document['getElementById']('logs-container')?.['addEventListener']('click',handleLogContainerClick),document['getElementById']('logs-container')?.['addEventListener']('change',handleLogContainerChange),document['getElementById']('logs-container')?.['addEventListener']('scroll',updateLogAutoScrollState),document['querySelectorAll']('.metric-card-drilldown')['forEach'](_0x1d5ba6=>{_0x1d5ba6['addEventListener']('click',()=>openDrilldown(_0x1d5ba6['dataset']['drilldown'])),_0x1d5ba6['addEventListener']('keydown',_0x48d821=>{(_0x48d821['key']==='Enter'||_0x48d821['key']==='\x20')&&(_0x48d821['preventDefault'](),openDrilldown(_0x1d5ba6['dataset']['drilldown']));});}),document['getElementById']('close-drilldown-modal')?.['addEventListener']('click',closeDrilldownModal),document['getElementById']('drilldown-modal-overlay')?.['addEventListener']('click',closeDrilldownModal),document['addEventListener']('keydown',_0x85b2c6=>{_0x85b2c6['key']==='Escape'&&!document['getElementById']('drilldown-modal')?.['hidden']&&closeDrilldownModal();}),document['getElementById']('usage-refresh-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('retry-usage-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('usage-environment-filter')?.['addEventListener']('change',_0x344ee9=>{state['usage']['environment']=_0x344ee9['target']['value']||'',loadUsage({'showLoading':![]});}),document['querySelectorAll']('#usage-period-buttons\x20.admin-filter-btn')['forEach'](_0xf17600=>{_0xf17600['addEventListener']('click',()=>{state['usage']['days']=_0xf17600['dataset']['days']||'30',updateActiveFilterButtons('#usage-period-buttons',state['usage']['days']),loadUsage({'showLoading':![]});});}),document['getElementById']('usage-content')?.['addEventListener']('click',handleUsageDrilldownClick),document['getElementById']('usage-content')?.['addEventListener']('keydown',handleUsageDrilldownKeydown),document['getElementById']('usage-drilldown-close')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('usage-drilldown-overlay')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('retry-usage-drilldown-btn')?.['addEventListener']('click',()=>loadUsageDrilldown({'showLoading':!![]})),window['addEventListener']('keydown',handleGlobalKeydown);}async function switchSection(_0x656455){if(!_0x656455)return;document['querySelectorAll']('.settings-nav-item')['forEach'](_0xd1f8b7=>{const _0x2f1796=_0xd1f8b7['dataset']['section']===_0x656455;_0xd1f8b7['classList']['toggle']('active',_0x2f1796),_0xd1f8b7['setAttribute']('aria-selected',String(_0x2f1796));}),document['querySelectorAll']('.settings-panel')['forEach'](_0x283a72=>{const _0x2a7a46=_0x283a72['id']==='section-'+_0x656455;_0x283a72['hidden']=!_0x2a7a46,_0x283a72['classList']['toggle']('active',_0x2a7a46);}),state['currentSection']=_0x656455,setSessionValue('admin-active-section',_0x656455),_0x656455!=='health'&&stopHealthAutoRefresh(),_0x656455!=='logs'&&stopLogStream(),_0x656455!=='usage'&&closeUsageDrilldown(),_0x656455==='health'&&(syncHealthAutoRefresh(),await loadHealth({'showLoading':!state['health']['loaded']})),_0x656455==='logs'&&(await loadLogs({'showLoading':!state['logs']['loaded']}),state['logs']['live']?startLogStream():updateLogsLiveUi()),_0x656455==='usage'&&await loadUsage({'showLoading':!state['usage']['loaded']});}function getSessionValue(_0x292cd3){try{return sessionStorage['getItem'](_0x292cd3);}catch{return null;}}function setSessionValue(_0x2a4ff9,_0x1c9e2a){try{sessionStorage['setItem'](_0x2a4ff9,_0x1c9e2a);}catch{}}async function loadEnvironmentOptions(){const _0x1a6c1e=await API['get']('/environments');state['environments']=(_0x1a6c1e['environments']||[])['map'](_0x431839=>_0x431839?.['name'])['filter'](Boolean)['sort']((_0x218713,_0x124626)=>_0x218713['localeCompare'](_0x124626));const _0x451a7a=document['getElementById']('usage-environment-filter');if(!_0x451a7a)return;_0x451a7a['innerHTML']='<option\x20value=\x22\x22>All\x20environments</option>'+state['environments']['map'](_0x50942c=>'<option\x20value=\x22'+Utils['escapeHtml'](_0x50942c)+'\x22>'+Utils['escapeHtml'](_0x50942c)+'</option>')['join'](''),_0x451a7a['value']=state['usage']['environment'];}function syncHealthAutoRefresh(){const _0x468e4c=document['getElementById']('health-auto-refresh');if(_0x468e4c)setSessionValue('admin-health-auto-refresh',String(_0x468e4c['checked']));const _0x120314=state['currentSection']==='health'&&!!_0x468e4c?.['checked'];stopHealthAutoRefresh();if(!_0x120314)return;state['health']['autoRefreshTimer']=window['setInterval'](()=>{loadHealth({'showLoading':![]});},HEALTH_REFRESH_INTERVAL_MS);}function stopHealthAutoRefresh(){state['health']['autoRefreshTimer']&&(clearInterval(state['health']['autoRefreshTimer']),state['health']['autoRefreshTimer']=null);}async function loadHealth({showLoading:showLoading=![]}={}){if(state['health']['request'])return state['health']['request'];return state['health']['request']=((async()=>{const _0x4e0d17=document['getElementById']('health-loading'),_0xe46e17=document['getElementById']('health-error'),_0x59fa6e=document['getElementById']('health-content');(showLoading||!state['health']['loaded'])&&(_0x4e0d17['hidden']=![],_0xe46e17['hidden']=!![],_0x59fa6e['hidden']=!![]);try{const [_0x3fb293]=await Promise['all']([API['get']('/health/metrics'),loadUpdateSettings()['catch'](_0x1300e5=>{console['error']('Failed\x20to\x20load\x20update\x20settings',_0x1300e5),state['health']['updateEnabled']=![],state['health']['hasRestartCommand']=![],syncHealthActionButtons();})]);renderHealthMetrics(_0x3fb293),!state['health']['currentVersion']&&await loadVersionStatus({'checkUpdates':![]}),_0x4e0d17['hidden']=!![],_0xe46e17['hidden']=!![],_0x59fa6e['hidden']=![],state['health']['loaded']=!![];}catch(_0x5c6ba3){console['error']('Failed\x20to\x20load\x20server\x20metrics',_0x5c6ba3),_0x4e0d17['hidden']=!![],_0xe46e17['hidden']=![],_0x59fa6e['hidden']=!![],document['getElementById']('health-error-message')['textContent']=_0x5c6ba3['message']||'Unknown\x20error';}finally{state['health']['request']=null;}})()),state['health']['request'];}function syncHealthActionButtons(){const _0x3a2454=document['getElementById']('health-update-btn'),_0x2c383a=document['getElementById']('health-restart-btn');if(!_0x3a2454||!_0x2c383a)return;const _0x25bea7=state['health']['updateEnabled'],_0x15c65a=_0x25bea7&&state['health']['versionChecked']&&state['health']['updateAvailable'];_0x3a2454['hidden']=!_0x15c65a,_0x3a2454['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress']||!state['health']['latestVersion'],_0x3a2454['textContent']=state['health']['updateInProgress']?'Updating...':'Update\x20Server',_0x2c383a['hidden']=!_0x25bea7,_0x2c383a['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress'];}function setUpdateOutput({status:_0x471392,output:_0x4c8a88}){const _0x471622=document['getElementById']('health-update-output-wrap'),_0x90e286=document['getElementById']('health-update-status'),_0x251347=document['getElementById']('health-update-output');if(!_0x471622||!_0x90e286||!_0x251347)return;const _0x4ab8c2=_0x471392||'';_0x471622['hidden']=![],_0x90e286['className']='admin-update-status',_0x4ab8c2&&_0x90e286['classList']['add'](_0x4ab8c2),_0x90e286['textContent']=_0x4ab8c2==='success'?'Success':_0x4ab8c2==='error'?'Failed':'In\x20Progress',_0x251347['textContent']=_0x4c8a88||'No\x20output\x20returned.';}function buildCommandOutput(_0x2f9d8d,_0x4d4dd2){const _0x5d1dd7=[];typeof _0x2f9d8d==='string'&&_0x2f9d8d['trim']()&&_0x5d1dd7['push'](_0x2f9d8d['trim']());if(typeof _0x4d4dd2==='string'&&_0x4d4dd2['trim']()){const _0x36522f=_0x4d4dd2['trim'](),_0x13d2f8=_0x5d1dd7['some'](_0x3ab70d=>_0x3ab70d['includes'](_0x36522f));!_0x13d2f8&&_0x5d1dd7['push']('Error:\x0a'+_0x36522f);}return _0x5d1dd7['join']('\x0a\x0a');}function showRestartOverlay({title:_0x4e10a9,message:_0x34b17f,showRetry:showRetry=![]}){const _0x5979f5=document['getElementById']('health-restart-overlay'),_0x1cd00b=document['getElementById']('restart-overlay-title'),_0x48ed61=document['getElementById']('restart-overlay-message'),_0x523c31=document['getElementById']('restart-overlay-retry');if(!_0x5979f5||!_0x1cd00b||!_0x48ed61||!_0x523c31)return;_0x1cd00b['textContent']=_0x4e10a9,_0x48ed61['textContent']=_0x34b17f,_0x523c31['hidden']=!showRetry,_0x5979f5['hidden']=![];}function hideRestartOverlay(){const _0x367087=document['getElementById']('health-restart-overlay');_0x367087&&(_0x367087['hidden']=!![]);}function sleep(_0x381914){return new Promise(_0x2b2983=>{window['setTimeout'](_0x2b2983,_0x381914);});}async function loadUpdateSettings(){const _0x40cfad=await API['getUpdateSettings']();return state['health']['updateEnabled']=!!_0x40cfad['enabled'],state['health']['hasRestartCommand']=!!_0x40cfad['hasRestartCommand'],syncHealthActionButtons(),_0x40cfad;}async function applyUpdate(){if(state['health']['updateInProgress']||!state['health']['latestVersion'])return;state['health']['updateInProgress']=!![],syncHealthActionButtons(),setUpdateOutput({'status':'in-progress','output':'Applying\x20server\x20update\x20to\x20'+state['health']['latestVersion']+'...'});try{const _0x509de0=await API['applyServerUpdate'](state['health']['latestVersion']),_0x5d2b53=buildCommandOutput(_0x509de0['output'],_0x509de0['error']);_0x509de0['success']?(setUpdateOutput({'status':'success','output':_0x5d2b53||'Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed.'}),Utils['showSuccess']('Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed')):(setUpdateOutput({'status':'error','output':_0x5d2b53||'Server\x20update\x20failed\x20without\x20additional\x20output.'}),Utils['showError'](_0x509de0['error']||'Server\x20update\x20failed'));}catch(_0x50b6dd){setUpdateOutput({'status':'error','output':buildCommandOutput(_0x50b6dd['output'],_0x50b6dd['commandError']||_0x50b6dd['message'])||'Failed\x20to\x20apply\x20server\x20update.'}),Utils['showError'](_0x50b6dd['message']||'Failed\x20to\x20apply\x20server\x20update');}finally{state['health']['updateInProgress']=![],syncHealthActionButtons();}}function showRestartConfirmation(){if(!state['health']['updateEnabled']||state['health']['restartInProgress'])return;const _0x5b0ce7=document['getElementById']('restart-modal');_0x5b0ce7&&(_0x5b0ce7['hidden']=![]);}function hideRestartModal(){const _0x251216=document['getElementById']('restart-modal');_0x251216&&(_0x251216['hidden']=!![]);}async function confirmRestart(){if(state['health']['restartInProgress'])return;hideRestartModal(),state['health']['restartInProgress']=!![],syncHealthActionButtons();try{await API['restartServer'](),await waitForServerRestart();}catch(_0x33ecd0){state['health']['restartInProgress']=![],syncHealthActionButtons(),hideRestartOverlay(),Utils['showError'](_0x33ecd0['message']||'Failed\x20to\x20restart\x20server');}}async function waitForServerRestart({manualRetry:manualRetry=![]}={}){state['health']['restartInProgress']=!![],syncHealthActionButtons(),stopHealthAutoRefresh(),showRestartOverlay({'title':manualRetry?'Retrying\x20server\x20connection...':'Waiting\x20for\x20server\x20to\x20restart...','message':'The\x20page\x20will\x20automatically\x20refresh\x20when\x20the\x20server\x20is\x20back\x20online.','showRetry':![]});const _0x308ec5=Date['now']();let _0x11ef93=![];for(let _0x3844d7=0x0;_0x3844d7<RESTART_POLL_MAX_ATTEMPTS;_0x3844d7+=0x1){await sleep(RESTART_POLL_INTERVAL_MS);try{await API['get']('/health?ts='+Date['now']());const _0x31cc5a=Date['now']()-_0x308ec5;if(_0x11ef93||_0x31cc5a>=RESTART_MIN_SUCCESS_DELAY_MS){state['health']['restartInProgress']=![],state['health']['currentVersion']=null,hideRestartOverlay(),syncHealthActionButtons(),Utils['showSuccess']('Server\x20restart\x20complete'),await loadHealth({'showLoading':!![]}),syncHealthAutoRefresh();return;}}catch(_0x35ace8){_0x11ef93=!![];}}state['health']['restartInProgress']=![],syncHealthActionButtons(),showRestartOverlay({'title':'Unable\x20to\x20reconnect\x20to\x20the\x20server','message':'The\x20server\x20may\x20still\x20be\x20restarting.\x20Retry\x20the\x20connection\x20when\x20you\x20are\x20ready.','showRetry':!![]}),Utils['showError']('Server\x20restart\x20is\x20taking\x20longer\x20than\x20expected');}async function loadVersionStatus({checkUpdates:checkUpdates=![]}={}){const _0x2b930a=document['getElementById']('health-check-updates-btn');_0x2b930a&&(_0x2b930a['disabled']=!![],_0x2b930a['textContent']=checkUpdates?'Checking...':'Loading...');try{const _0x158c3b=await API['get']('/health');state['health']['currentVersion']=_0x158c3b['version']||'Unavailable',document['getElementById']('health-version-current')['textContent']=state['health']['currentVersion'];if(!checkUpdates&&!state['health']['versionChecked']){state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Update\x20status\x20has\x20not\x20been\x20checked\x20yet.',document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion']||'Not\x20checked',syncHealthActionButtons();return;}if(checkUpdates){const _0x216482=await API['get']('/health/check-updates');state['health']['versionChecked']=!![],state['health']['latestVersion']=_0x216482['latestVersion']||'Unavailable',state['health']['installCommand']=_0x216482['installCommand']||null,state['health']['updateAvailable']=!!_0x216482['updateAvailable'],document['getElementById']('health-version-current')['textContent']=_0x216482['currentVersion']||state['health']['currentVersion'],document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion'],document['getElementById']('health-version-status')['textContent']=buildVersionStatusText(_0x216482),document['getElementById']('health-install-command')['textContent']=state['health']['installCommand']||'',document['getElementById']('health-install-command-wrap')['hidden']=!state['health']['installCommand'],document['getElementById']('health-copy-install-btn')['hidden']=!state['health']['installCommand'];}syncHealthActionButtons();}catch(_0x3d7a0f){console['error']('Failed\x20to\x20load\x20version\x20status',_0x3d7a0f),state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Unable\x20to\x20load\x20version\x20status:\x20'+_0x3d7a0f['message'],document['getElementById']('health-install-command-wrap')['hidden']=!![],document['getElementById']('health-copy-install-btn')['hidden']=!![],syncHealthActionButtons();}finally{_0x2b930a&&(_0x2b930a['disabled']=![],_0x2b930a['textContent']='Check\x20for\x20Updates');}}function buildVersionStatusText(_0x2d8d0c){const _0x139a9a=_0x2d8d0c?.['versionStatus'];if(_0x139a9a==='update-available')return'Update\x20available:\x20'+_0x2d8d0c['currentVersion']+'\x20→\x20'+_0x2d8d0c['latestVersion'];if(_0x139a9a==='up-to-date')return'Running\x20the\x20latest\x20published\x20version\x20('+_0x2d8d0c['latestVersion']+').';if(_0x139a9a==='ahead-of-latest')return'This\x20server\x20is\x20ahead\x20of\x20npm\x20latest\x20('+_0x2d8d0c['latestVersion']+').';return'Unable\x20to\x20compare\x20current\x20and\x20latest\x20versions.';}async function copyInstallCommand(){if(!state['health']['installCommand'])return;const _0x5deb0c=await Utils['copyToClipboard'](state['health']['installCommand']);_0x5deb0c?Utils['showSuccess']('Install\x20command\x20copied'):Utils['showError']('Failed\x20to\x20copy\x20install\x20command');}function renderHealthMetrics(_0x553cd3){document['getElementById']('cpu-usage')['textContent']=_0x553cd3['cpu']?.['display']||'-',document['getElementById']('memory-usage')['textContent']=_0x553cd3['memory']?.['display']||'-',document['getElementById']('disk-usage')['textContent']=_0x553cd3['disk']?.['display']||'-',document['getElementById']('docker-containers')['textContent']=_0x553cd3['docker']?.['display']||'-',document['getElementById']('server-uptime')['textContent']=_0x553cd3['uptime']?.['display']||'-',document['getElementById']('active-sessions')['textContent']=_0x553cd3['sessions']?.['display']||'-',setMetricProgress('cpu-progress',_0x553cd3['cpu']?.['percent'],statusFromPercent(_0x553cd3['cpu']?.['percent'])),setMetricProgress('memory-progress',_0x553cd3['memory']?.['percent'],statusFromPercent(_0x553cd3['memory']?.['percent'])),setMetricProgress('disk-progress',_0x553cd3['disk']?.['percent'],statusFromPercent(_0x553cd3['disk']?.['percent']));const _0x4e7ef3=_0x553cd3['docker']?.['total']>0x0?_0x553cd3['docker']['running']/_0x553cd3['docker']['total']*0x64:0x0;setMetricProgress('docker-progress',_0x4e7ef3,'ok');const _0x5befdf=_0x553cd3['dockerStorage']||{},_0xfcf191=document['getElementById']('docker-storage-card');document['getElementById']('docker-storage-total')['textContent']=_0x5befdf['display']||'-',document['getElementById']('docker-storage-available')['textContent']=_0x5befdf['availableDisplay']||'',document['getElementById']('docker-storage-available')['hidden']=!_0x5befdf['availableDisplay'],document['getElementById']('docker-storage-reclaimable')['textContent']=_0x5befdf['reclaimableDisplay']||'',document['getElementById']('docker-storage-images')['textContent']=_0x5befdf['images']?.['display']||'-',document['getElementById']('docker-storage-containers')['textContent']=_0x5befdf['containers']?.['display']||'-',document['getElementById']('docker-storage-volumes')['textContent']=_0x5befdf['volumes']?.['display']||'-',document['getElementById']('docker-storage-buildcache')['textContent']=_0x5befdf['buildCache']?.['display']||'-',setMetricProgress('docker-storage-progress',_0x5befdf['percent'],_0x5befdf['status']||'ok'),_0xfcf191['classList']['remove']('status-warning','status-critical'),_0x5befdf['status']==='warning'&&_0xfcf191['classList']['add']('status-warning'),_0x5befdf['status']==='critical'&&_0xfcf191['classList']['add']('status-critical');}function clampPercent(_0x2b03bd){if(!Number['isFinite'](_0x2b03bd))return 0x0;return Math['max'](0x0,Math['min'](0x64,Math['round'](_0x2b03bd)));}function statusFromPercent(_0x58b212){if(!Number['isFinite'](_0x58b212))return'ok';if(_0x58b212>=0x5a)return'critical';if(_0x58b212>=0x4b)return'warning';return'ok';}function setMetricProgress(_0x1c281c,_0x5783d4,_0x259ee8='ok'){const _0x587a67=document['getElementById'](_0x1c281c);if(!_0x587a67)return;const _0x3f1885=clampPercent(_0x5783d4);_0x587a67['style']['width']=_0x3f1885+'%',_0x587a67['classList']['remove']('status-ok','status-warning','status-critical'),_0x587a67['classList']['add'](_0x259ee8==='critical'?'status-critical':_0x259ee8==='warning'?'status-warning':'status-ok'),_0x587a67['parentElement']?.['setAttribute']('aria-valuenow',String(_0x3f1885));}async function runCleanupAction(_0x38fa46,_0x5efbe1){const _0x49aa38=document['getElementById']('server-health-action-status'),_0x244217=[document['getElementById']('health-refresh-btn'),document['getElementById']('server-stop-containers'),document['getElementById']('server-remove-stopped'),document['getElementById']('server-prune-docker')]['filter'](Boolean);_0x244217['forEach'](_0x2e4c50=>{_0x2e4c50['disabled']=!![];}),_0x49aa38['hidden']=![],_0x49aa38['classList']['remove']('success','error'),_0x49aa38['textContent']=_0x38fa46+'...';try{const _0x4662b7=await _0x5efbe1();_0x49aa38['classList']['add']('success'),_0x49aa38['textContent']=_0x4662b7?.['message']||_0x38fa46+'\x20complete',await loadHealth({'showLoading':!![]});}catch(_0x41901b){console['error'](_0x38fa46+'\x20failed',_0x41901b),_0x49aa38['classList']['add']('error'),_0x49aa38['textContent']=_0x41901b['message']||_0x38fa46+'\x20failed';}finally{_0x244217['forEach'](_0xa23144=>{_0xa23144['disabled']=![];});}}function toggleCleanupSection(){const _0x1a8bd6=document['getElementById']('cleanup-section'),_0x192db8=document['getElementById']('cleanup-content'),_0x1184b0=document['getElementById']('cleanup-toggle');if(!_0x1a8bd6||!_0x192db8||!_0x1184b0)return;const _0x5afabf=_0x1a8bd6['classList']['toggle']('expanded');_0x192db8['hidden']=!_0x5afabf,_0x1184b0['setAttribute']('aria-expanded',String(_0x5afabf));}async function loadLogs({showLoading:showLoading=![]}={}){if(state['logs']['request'])return state['logs']['request'];return state['logs']['request']=((async()=>{const _0x118406=document['getElementById']('logs-loading'),_0x480dd9=document['getElementById']('logs-error');(showLoading||!state['logs']['loaded'])&&(_0x118406['hidden']=![],_0x480dd9['hidden']=!![],document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![]);try{const _0x9f674b=new URLSearchParams({'limit':'500'});state['logs']['level']!=='ALL'&&_0x9f674b['set']('level',state['logs']['level']);state['logs']['search']&&_0x9f674b['set']('search',state['logs']['search']);const _0x3b808e=await API['get']('/logs?'+_0x9f674b['toString']());state['logs']['entries']=Array['isArray'](_0x3b808e['entries'])?normalizeLogEntries(_0x3b808e['entries'])['slice'](-state['logs']['maxEntries']):[],state['logs']['selectedEntryIds']['clear'](),state['logs']['total']=Number(_0x3b808e['total'])||0x0,state['logs']['minLevel']=_0x3b808e['minLevel']||'INFO',state['logs']['loaded']=!![],_0x118406['hidden']=!![],_0x480dd9['hidden']=!![],renderLogs();}catch(_0x3ff532){console['error']('Failed\x20to\x20load\x20logs',_0x3ff532),_0x118406['hidden']=!![],_0x480dd9['hidden']=![],document['getElementById']('logs-error-message')['textContent']=_0x3ff532['message']||'Unknown\x20error',document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![];}finally{state['logs']['request']=null;}})()),state['logs']['request'];}function renderLogs({stickToLiveEdge:stickToLiveEdge=![]}={}){const _0x3c7260=document['getElementById']('logs-container'),_0x262f26=document['getElementById']('logs-empty'),_0x1f8bf4=stickToLiveEdge||state['logs']['autoScroll']&&state['logs']['live'],_0x2864c8=_0x3c7260?.['scrollTop']||0x0,_0x2086d0=_0x3c7260?.['scrollHeight']||0x0,_0x153ceb=getOrderedLogEntries();updateLogsMeta(_0x153ceb['length']),syncLogSelectionUi(_0x153ceb);if(_0x153ceb['length']===0x0){_0x3c7260['hidden']=!![],_0x262f26['hidden']=![];return;}_0x262f26['hidden']=!![],_0x3c7260['hidden']=![],_0x3c7260['innerHTML']=_0x153ceb['map'](renderLogEntry)['join']('');if(_0x1f8bf4){scrollLogsToLiveEdge(_0x3c7260);return;}if(state['logs']['order']===LOG_ORDER_DESC){const _0x55a697=_0x3c7260['scrollHeight'],_0x47e078=_0x55a697-_0x2086d0;_0x3c7260['scrollTop']=_0x2864c8>0x0?_0x2864c8+Math['max'](_0x47e078,0x0):_0x2864c8;return;}_0x3c7260['scrollTop']=_0x2864c8;}function createLogEntryId(){const _0x298ad5=state['logs']['nextEntryId'];return state['logs']['nextEntryId']+=0x1,'server-log-'+_0x298ad5;}function normalizeLogEntry(_0x48d63d){return{..._0x48d63d,'_clientId':createLogEntryId()};}function normalizeLogEntries(_0x3bd1c0){return _0x3bd1c0['map'](normalizeLogEntry);}function getVisibleLogEntries(){const _0x15c1c9=state['logs']['search']['trim']()['toLowerCase']();return state['logs']['entries']['filter'](_0x41c913=>{if(state['logs']['level']!=='ALL'&&_0x41c913['level']!==state['logs']['level'])return![];if(!_0x15c1c9)return!![];const _0x32e1b6=String(_0x41c913['message']||'')['toLowerCase'](),_0x13da6b=_0x41c913['context']?JSON['stringify'](_0x41c913['context'])['toLowerCase']():'';return _0x32e1b6['includes'](_0x15c1c9)||_0x13da6b['includes'](_0x15c1c9);});}function getOrderedLogEntries(){const _0x132cd1=getVisibleLogEntries();return state['logs']['order']===LOG_ORDER_DESC?_0x132cd1['slice']()['reverse']():_0x132cd1;}function findLogEntry(_0x2bf7ed){return state['logs']['entries']['find'](_0x6b5451=>_0x6b5451['_clientId']===_0x2bf7ed)||null;}function getSelectedVisibleLogEntries(_0x4a4dcd=getOrderedLogEntries()){return _0x4a4dcd['filter'](_0x2d899c=>state['logs']['selectedEntryIds']['has'](_0x2d899c['_clientId']));}function renderLogEntry(_0x3ac0c5){const _0x238aeb=Utils['escapeHtml'](String(_0x3ac0c5['_clientId']||'')),_0x3badbe=Utils['escapeHtml'](formatDateTime(_0x3ac0c5['timestamp'])),_0xb57fd3=Utils['escapeHtml'](String(_0x3ac0c5['level']||'INFO')),_0x3c9157=Utils['escapeHtml'](String(_0x3ac0c5['message']||'')),_0xace0af=formatLogContext(_0x3ac0c5['context']),_0x10811a=_0xace0af?'\x0a\x20\x20\x20\x20\x20\x20<details\x20class=\x22admin-log-context\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<summary>Context</summary>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>'+Utils['escapeHtml'](_0xace0af)+'</pre>\x0a\x20\x20\x20\x20\x20\x20</details>\x0a\x20\x20\x20\x20':'',_0x929f36=state['logs']['selectedEntryIds']['has'](_0x3ac0c5['_clientId'])?'\x20selected':'';return'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-log-entry'+_0x929f36+'\x22\x20data-log-entry-id=\x22'+_0x238aeb+'\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header-main\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22admin-log-select\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-log-select-checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data-log-entry-id=\x22'+_0x238aeb+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20aria-label=\x22Select\x20log\x20entry\x20from\x20'+_0x3badbe+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x929f36?'checked':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-timestamp\x22>'+_0x3badbe+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-level\x20level-'+_0xb57fd3['toLowerCase']()+'\x22>'+_0xb57fd3+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22btn-ghost\x20btn-small\x20admin-log-copy-btn\x22\x20data-log-copy-id=\x22'+_0x238aeb+'\x22>Copy</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-message\x22>'+_0x3c9157+'</div>\x0a\x20\x20\x20\x20\x20\x20'+_0x10811a+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function updateLogsMeta(_0x3bf44a){const _0x2ef679=document['getElementById']('logs-meta');if(!_0x2ef679)return;const _0x1616c7=state['logs']['entries']['length'],_0x58cc56=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x5dc878=state['logs']['order']===LOG_ORDER_DESC?'newest\x20first':'oldest\x20first';_0x2ef679['textContent']=_0x58cc56?'Showing\x20'+_0x3bf44a+'\x20of\x20'+_0x1616c7+'\x20loaded\x20entries\x20for\x20the\x20current\x20filters\x20in\x20'+_0x5dc878+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.':'Showing\x20'+_0x3bf44a+'\x20recent\x20buffered\x20entries\x20in\x20'+_0x5dc878+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.';}function syncLogSelectionUi(_0x307b10=getOrderedLogEntries()){const _0x3fc197=document['getElementById']('logs-selection-count'),_0x18ca84=document['getElementById']('logs-select-visible-btn'),_0x864b1=document['getElementById']('logs-clear-selection-btn'),_0x1b327e=document['getElementById']('logs-copy-selected-btn'),_0x4c9102=getSelectedVisibleLogEntries(_0x307b10),_0x4fdd34=_0x307b10['length']>0x0,_0x455ced=_0x4c9102['length']>0x0,_0x199926=_0x4fdd34&&_0x4c9102['length']===_0x307b10['length'],_0x171a3c=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x1e67c3=_0x171a3c?'Select\x20Filtered':'Select\x20All\x20Shown',_0x33cd5b=_0x171a3c?'Deselect\x20Filtered':'Deselect\x20All\x20Shown';_0x3fc197&&(_0x3fc197['textContent']=_0x4c9102['length']+'\x20selected'),_0x18ca84&&(_0x18ca84['disabled']=!_0x4fdd34,_0x18ca84['textContent']=_0x199926?_0x33cd5b:_0x1e67c3),_0x864b1&&(_0x864b1['disabled']=!_0x455ced),_0x1b327e&&(_0x1b327e['disabled']=!_0x455ced);}function toggleLogsLiveMode(){state['logs']['live']=!state['logs']['live'],state['logs']['live']?(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}),startLogStream()):stopLogStream(),updateLogsLiveUi();}function updateLogsLiveUi(){const _0x5b6761=document['getElementById']('logs-live-toggle'),_0x4b6214=document['getElementById']('logs-stream-status');if(!_0x5b6761||!_0x4b6214)return;_0x4b6214['classList']['remove']('live','error');if(!state['logs']['live']){_0x4b6214['textContent']='Paused',_0x5b6761['textContent']='Start\x20Live';return;}if(state['logs']['streamState']==='live')_0x4b6214['textContent']='Live',_0x4b6214['classList']['add']('live');else state['logs']['streamState']==='error'?(_0x4b6214['textContent']='Reconnecting',_0x4b6214['classList']['add']('error')):_0x4b6214['textContent']='Connecting';_0x5b6761['textContent']='Pause\x20Live';}function startLogStream(){if(state['currentSection']!=='logs'||state['logs']['stream'])return;state['logs']['streamState']='connecting',updateLogsLiveUi();const _0x48682a=new EventSource(API['getBaseUrl']()+'/logs/stream');state['logs']['stream']=_0x48682a,_0x48682a['addEventListener']('log',_0x4c6ef3=>{try{const _0x14d59f=normalizeLogEntry(JSON['parse'](_0x4c6ef3['data']));state['logs']['entries']['push'](_0x14d59f);if(state['logs']['entries']['length']>state['logs']['maxEntries']){const _0x29393a=state['logs']['entries']['shift']();state['logs']['selectedEntryIds']['delete'](_0x29393a?.['_clientId']);}renderLogs();}catch(_0x1f2710){console['error']('Failed\x20to\x20parse\x20log\x20stream\x20event',_0x1f2710);}}),_0x48682a['onopen']=()=>{state['logs']['streamState']='live',updateLogsLiveUi();},_0x48682a['onerror']=()=>{state['logs']['streamState']='error',updateLogsLiveUi();};}function stopLogStream(){state['logs']['stream']&&(state['logs']['stream']['close'](),state['logs']['stream']=null),state['logs']['streamState']='paused',updateLogsLiveUi();}function clearDisplayedLogs(){state['logs']['entries']=[],state['logs']['selectedEntryIds']['clear'](),renderLogs();}function handleLogContainerClick(_0x1c2c49){const _0x446a09=_0x1c2c49['target']['closest']('[data-log-copy-id]');if(!_0x446a09)return;const _0x2e35ff=findLogEntry(_0x446a09['dataset']['logCopyId']||'');if(!_0x2e35ff){Utils['showError']('Log\x20entry\x20is\x20no\x20longer\x20available');return;}copyLogEntries([_0x2e35ff],{'successMessage':'Log\x20entry\x20copied'});}function handleLogContainerChange(_0x1a9719){const _0x4a388b=_0x1a9719['target']['closest']('.admin-log-select-checkbox');if(!_0x4a388b)return;const _0x30a771=_0x4a388b['dataset']['logEntryId']||'';if(!_0x30a771)return;_0x4a388b['checked']?state['logs']['selectedEntryIds']['add'](_0x30a771):state['logs']['selectedEntryIds']['delete'](_0x30a771),_0x4a388b['closest']('.admin-log-entry')?.['classList']['toggle']('selected',_0x4a388b['checked']),syncLogSelectionUi();}function toggleVisibleLogSelection(){const _0x5d8a34=getOrderedLogEntries();if(_0x5d8a34['length']===0x0)return;const _0xb4684d=getSelectedVisibleLogEntries(_0x5d8a34),_0x911ad3=_0xb4684d['length']!==_0x5d8a34['length'];_0x5d8a34['forEach'](_0x2bf47b=>{_0x911ad3?state['logs']['selectedEntryIds']['add'](_0x2bf47b['_clientId']):state['logs']['selectedEntryIds']['delete'](_0x2bf47b['_clientId']);}),renderLogs();}function clearSelectedLogEntries(){if(state['logs']['selectedEntryIds']['size']===0x0)return;state['logs']['selectedEntryIds']['clear'](),renderLogs();}async function copySelectedLogEntries(){const _0x29b734=getSelectedVisibleLogEntries();if(_0x29b734['length']===0x0)return;await copyLogEntries(_0x29b734,{'successMessage':_0x29b734['length']===0x1?'Log\x20entry\x20copied':_0x29b734['length']+'\x20log\x20entries\x20copied'});}async function copyLogEntries(_0x172395,{successMessage:successMessage='Log\x20entries\x20copied'}={}){const _0x544152=formatLogEntriesForClipboard(_0x172395);if(!_0x544152){Utils['showError']('No\x20log\x20content\x20available\x20to\x20copy');return;}const _0x5ea76a=await Utils['copyToClipboard'](_0x544152);_0x5ea76a?Utils['showSuccess'](successMessage):Utils['showError']('Failed\x20to\x20copy\x20logs');}function setLogOrder(_0x2264ed,{focusLiveEdge:focusLiveEdge=![]}={}){const _0x2d7ecb=_0x2264ed===LOG_ORDER_DESC?LOG_ORDER_DESC:LOG_ORDER_ASC;if(state['logs']['order']===_0x2d7ecb){focusLiveEdge&&(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}));return;}state['logs']['order']=_0x2d7ecb,setSessionValue('admin-logs-order',_0x2d7ecb),syncLogOrderUi(),focusLiveEdge&&(state['logs']['autoScroll']=!![]),renderLogs({'stickToLiveEdge':focusLiveEdge});}function syncLogOrderUi(){updateActiveFilterButtons('#logs-order-toggle',state['logs']['order']);}function handleLogsSearchInput(_0x11244c){const _0x5148e7=_0x11244c['target']['value']||'';state['logs']['searchTimer']&&clearTimeout(state['logs']['searchTimer']),state['logs']['searchTimer']=window['setTimeout'](()=>{state['logs']['search']=_0x5148e7,loadLogs({'showLoading':![]});},LOG_SEARCH_DEBOUNCE_MS);}function updateLogAutoScrollState(){const _0x5cb652=document['getElementById']('logs-container');if(!_0x5cb652)return;const _0x584ec9=state['logs']['order']===LOG_ORDER_DESC?_0x5cb652['scrollTop']:_0x5cb652['scrollHeight']-_0x5cb652['scrollTop']-_0x5cb652['clientHeight'];state['logs']['autoScroll']=_0x584ec9<0x20;}async function loadUsage({showLoading:showLoading=![]}={}){if(state['usage']['request'])return state['usage']['request'];return state['usage']['request']=((async()=>{const _0x4c33f8=document['getElementById']('usage-loading'),_0x45c954=document['getElementById']('usage-error');(showLoading||!state['usage']['loaded'])&&(_0x4c33f8['hidden']=![],_0x45c954['hidden']=!![],document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![]);try{const _0x1cbc0b=new URLSearchParams();_0x1cbc0b['set']('days',state['usage']['days']);state['usage']['environment']&&_0x1cbc0b['set']('environment',state['usage']['environment']);const _0xe9c57e=await API['get']('/stats?'+_0x1cbc0b['toString']());state['usage']['loaded']=!![],_0x4c33f8['hidden']=!![],_0x45c954['hidden']=!![],renderUsage(_0xe9c57e),state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']&&state['usage']['drilldown']['value']&&await loadUsageDrilldown({'showLoading':![]});}catch(_0x311ca6){console['error']('Failed\x20to\x20load\x20usage\x20statistics',_0x311ca6),_0x4c33f8['hidden']=!![],_0x45c954['hidden']=![],document['getElementById']('usage-error-message')['textContent']=_0x311ca6['message']||'Unknown\x20error',document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![];}finally{state['usage']['request']=null;}})()),state['usage']['request'];}function renderUsage(_0x410eb6){const _0x4374ac=Number(_0x410eb6?.['tasks']?.['total'])||0x0,_0x50f48a=document['getElementById']('usage-empty'),_0xf5a18d=document['getElementById']('usage-content');if(_0x4374ac===0x0){closeUsageDrilldown(),_0x50f48a['hidden']=![],_0xf5a18d['hidden']=!![];return;}_0x50f48a['hidden']=!![],_0xf5a18d['hidden']=![];const _0x5777cb=Number(_0x410eb6?.['approvalRate']?.['successRate'])||0x0,_0x58b3c6=Math['round'](_0x5777cb*0x64),_0x3737f4=_0x410eb6?.['code']?.['approved']||{},_0x18bac6=Number(_0x3737f4?.['tasks'])||0x0,_0x3a4240=(Number(_0x3737f4?.['linesAdded'])||0x0)-(Number(_0x3737f4?.['linesDeleted'])||0x0),_0x58ae80=(Number(_0x410eb6?.['code']?.['linesAdded'])||0x0)-(Number(_0x410eb6?.['code']?.['linesDeleted'])||0x0),_0x5bf304=Number(_0x410eb6?.['timing']?.['averageDurationMinutes'])||0x0;setSummaryValue('usage-total-tasks',formatNumber(_0x4374ac)),setSummaryValue('usage-success-rate',_0x58b3c6+'%',statusClassFromPercent(_0x58b3c6)),setSummaryValue('usage-net-lines',formatSignedNumber(_0x58ae80)),setSummaryValue('usage-average-duration',formatDurationMinutes(_0x5bf304));const _0x281651=_0x4374ac>0x0?Math['round'](_0x18bac6/_0x4374ac*0x64):0x0;document['getElementById']('usage-approved-summary')['textContent']=formatNumber(_0x18bac6)+'\x20approved\x20('+_0x281651+'%)\x20·\x20'+formatNumber(_0x410eb6['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-success-detail')['textContent']=(_0x410eb6['approvalRate']['completed']||0x0)+'\x20completed\x20/\x20'+(_0x410eb6['approvalRate']['failed']||0x0)+'\x20failed\x20/\x20'+(_0x410eb6['approvalRate']['interrupted']||0x0)+'\x20interrupted',document['getElementById']('usage-net-lines-detail')['textContent']='+'+formatNumber(_0x410eb6['code']['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0x410eb6['code']['linesDeleted']||0x0)+'\x20·\x20Approved\x20'+formatSignedNumber(_0x3a4240)+'\x20net',document['getElementById']('usage-average-duration-detail')['textContent']=formatDurationMinutes(_0x410eb6['timing']['medianDurationMinutes']||0x0)+'\x20median\x20·\x20'+formatNumber(_0x410eb6['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-period-summary')['textContent']=buildPeriodSummary(_0x410eb6['period']),renderBarList('usage-status-bars',_0x410eb6['tasks']['byStatus']||{},{'drilldownGroup':'status','labelFormatter':prettifyKey}),renderObjectTable('usage-type-body',_0x410eb6['tasks']['byType']||{},_0x4374ac,{'includePercent':!![],'labelFormatter':prettifyKey,'drilldownGroup':'type'}),renderObjectTable('usage-environment-body',_0x410eb6['tasks']['byEnvironment']||{},_0x4374ac,{'drilldownGroup':'environment'}),renderUserTable('usage-user-body',_0x410eb6['tasks']['byUser']||[]),renderObjectTable('usage-source-body',_0x410eb6['tasks']['bySource']||{},_0x4374ac,{'labelFormatter':prettifyKey,'drilldownGroup':'source'}),document['getElementById']('usage-lines-added')['textContent']=formatNumber(_0x410eb6['code']['linesAdded']||0x0),document['getElementById']('usage-lines-deleted')['textContent']=formatNumber(_0x410eb6['code']['linesDeleted']||0x0),document['getElementById']('usage-files-changed')['textContent']=formatNumber(_0x410eb6['code']['filesChanged']||0x0),document['getElementById']('usage-repositories-affected')['textContent']=formatNumber(_0x410eb6['code']['repositoriesAffected']||0x0),document['getElementById']('usage-approved-lines-added')['textContent']=formatNumber(_0x3737f4['linesAdded']||0x0),document['getElementById']('usage-approved-lines-deleted')['textContent']=formatNumber(_0x3737f4['linesDeleted']||0x0),document['getElementById']('usage-approved-files-changed')['textContent']=formatNumber(_0x3737f4['filesChanged']||0x0),document['getElementById']('usage-approved-repositories-affected')['textContent']=formatNumber(_0x3737f4['repositoriesAffected']||0x0);const _0x5afa8b=(_0x352ac4,_0x2a2594)=>_0x352ac4>0x0?Math['round'](_0x2a2594/_0x352ac4*0x64):0x0;document['getElementById']('usage-added-pct')['style']['width']=_0x5afa8b(_0x410eb6['code']['linesAdded']||0x0,_0x3737f4['linesAdded']||0x0)+'%',document['getElementById']('usage-deleted-pct')['style']['width']=_0x5afa8b(_0x410eb6['code']['linesDeleted']||0x0,_0x3737f4['linesDeleted']||0x0)+'%',document['getElementById']('usage-files-pct')['style']['width']=_0x5afa8b(_0x410eb6['code']['filesChanged']||0x0,_0x3737f4['filesChanged']||0x0)+'%',document['getElementById']('usage-repos-pct')['style']['width']=_0x5afa8b(_0x410eb6['code']['repositoriesAffected']||0x0,_0x3737f4['repositoriesAffected']||0x0)+'%',syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function buildPeriodSummary(_0x41657d){const _0x221aee=_0x41657d?.['from']?formatDateTime(_0x41657d['from']):'the\x20earliest\x20loaded\x20task',_0x39c558=_0x41657d?.['to']?formatDateTime(_0x41657d['to']):'now',_0x5a954a=_0x41657d?.['days']?_0x41657d['days']+'\x20day\x20window':'All\x20available\x20task\x20history';return _0x5a954a+'\x20·\x20'+_0x221aee+'\x20to\x20'+_0x39c558;}function isUsageDrilldownActive(_0x1e5e6b,_0x31cd68){return state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']===_0x1e5e6b&&state['usage']['drilldown']['value']===_0x31cd68;}function buildDrilldownTriggerAttrs(_0x293948,_0xef6608,_0x4f31aa,{active:active=![]}={}){return'\x0a\x20\x20\x20\x20data-drilldown-group=\x22'+Utils['escapeHtml'](_0x293948)+'\x22\x0a\x20\x20\x20\x20data-drilldown-value=\x22'+Utils['escapeHtml'](String(_0xef6608))+'\x22\x0a\x20\x20\x20\x20data-drilldown-label=\x22'+Utils['escapeHtml'](String(_0x4f31aa))+'\x22\x0a\x20\x20\x20\x20'+(active?'data-drilldown-active=\x22true\x22':'')+'\x0a\x20\x20';}function syncUsageDrilldownActionButtons(){document['querySelectorAll']('.admin-drilldown-action')['forEach'](_0x2a3389=>{const _0x40abc5=_0x2a3389['dataset']['drilldownGroup']||'',_0x415f9e=_0x2a3389['dataset']['drilldownValue']||'';_0x2a3389['classList']['toggle']('active',isUsageDrilldownActive(_0x40abc5,_0x415f9e));});}function renderBarList(_0x2f3df0,_0x358b18,{drilldownGroup:drilldownGroup='',labelFormatter:labelFormatter=null}={}){const _0x10dcd0=document['getElementById'](_0x2f3df0);if(!_0x10dcd0)return;const _0x3dea4c=Object['entries'](_0x358b18)['filter'](([,_0x238152])=>Number(_0x238152)>0x0)['sort']((_0x4bc34c,_0x197567)=>_0x197567[0x1]-_0x4bc34c[0x1]),_0x9e0764=_0x3dea4c['reduce']((_0xb493a1,[,_0x229788])=>_0xb493a1+Number(_0x229788||0x0),0x0);if(_0x3dea4c['length']===0x0){_0x10dcd0['innerHTML']='<div\x20class=\x22text-muted\x22>No\x20data\x20available.</div>';return;}_0x10dcd0['innerHTML']=_0x3dea4c['map'](([_0x2b6835,_0x8eb2b0])=>{const _0xe3da2a=_0x9e0764>0x0?Math['max'](0x2,Math['round'](_0x8eb2b0/_0x9e0764*0x64)):0x0,_0x3698d0=labelFormatter?labelFormatter(_0x2b6835):prettifyKey(_0x2b6835),_0x53c93a=Utils['escapeHtml'](_0x3698d0),_0x8bc83d=Utils['escapeHtml'](formatNumber(_0x8eb2b0)),_0x37874e=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0x2b6835)):![],_0x1c7d77='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-label\x22>'+_0x53c93a+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-track\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-fill\x20status-'+Utils['escapeHtml'](String(_0x2b6835)['toLowerCase']())+'\x22\x20style=\x22width:\x20'+_0xe3da2a+'%\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-value\x22>'+_0x8bc83d+'</div>\x0a\x20\x20\x20\x20';if(!drilldownGroup)return'<div\x20class=\x22admin-bar-row\x22>'+_0x1c7d77+'</div>';return'\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20type=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-bar-row\x20admin-bar-row-button'+(_0x37874e?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs(drilldownGroup,_0x2b6835,_0x3698d0,{'active':_0x37874e})+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x1c7d77+'\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20';})['join']('');}function renderObjectTable(_0x2887f2,_0x404b4d,_0x392ebd,{includePercent:includePercent=![],labelFormatter:labelFormatter=null,drilldownGroup:drilldownGroup=''}={}){const _0x5bd465=document['getElementById'](_0x2887f2);if(!_0x5bd465)return;const _0x1a07cf=Object['entries'](_0x404b4d)['filter'](([,_0x1c45e5])=>Number(_0x1c45e5)>0x0)['sort']((_0x256ba1,_0x1e1d42)=>_0x1e1d42[0x1]-_0x256ba1[0x1]||String(_0x256ba1[0x0])['localeCompare'](String(_0x1e1d42[0x0])));if(_0x1a07cf['length']===0x0){_0x5bd465['innerHTML']='<tr><td\x20colspan=\x22'+(includePercent?0x3:0x2)+'\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0x5bd465['innerHTML']=_0x1a07cf['map'](([_0xef402f,_0x5ee994])=>{const _0x134e79=labelFormatter?labelFormatter(_0xef402f):_0xef402f,_0x1eee3a=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0xef402f)):![],_0x50ecf7=drilldownGroup?buildDrilldownTriggerAttrs(drilldownGroup,_0xef402f,_0x134e79,{'active':_0x1eee3a}):'',_0x1dadae=includePercent?'<td>'+formatPercent(_0x392ebd>0x0?_0x5ee994/_0x392ebd*0x64:0x0)+'</td>':'';return'\x0a\x20\x20\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(drilldownGroup?'class=\x22admin-drilldown-row'+(_0x1eee3a?'\x20active':'')+'\x22\x20tabindex=\x220\x22\x20role=\x22button\x22\x20aria-label=\x22Show\x20'+Utils['escapeHtml'](String(_0x134e79))+'\x20tasks\x22\x20'+_0x50ecf7:'')+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](String(_0x134e79))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0x5ee994))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x1dadae+'\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';})['join']('');}function renderUserTable(_0x47483e,_0x5a89f1){const _0x3a1d68=document['getElementById'](_0x47483e);if(!_0x3a1d68)return;if(!Array['isArray'](_0x5a89f1)||_0x5a89f1['length']===0x0){_0x3a1d68['innerHTML']='<tr><td\x20colspan=\x222\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0x3a1d68['innerHTML']=_0x5a89f1['map'](_0x9375d4=>'\x0a\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20class=\x22admin-drilldown-row'+(isUsageDrilldownActive('user',String(_0x9375d4['userId']||'unknown'))?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20tabindex=\x220\x22\x0a\x20\x20\x20\x20\x20\x20role=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20aria-label=\x22Show\x20tasks\x20for\x20'+Utils['escapeHtml'](_0x9375d4['name']||_0x9375d4['username']||_0x9375d4['userId']||'Unknown')+'\x22\x0a\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs('user',_0x9375d4['userId']||'unknown',_0x9375d4['name']||_0x9375d4['username']||_0x9375d4['userId']||'Unknown',{'active':isUsageDrilldownActive('user',String(_0x9375d4['userId']||'unknown'))})+'\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](_0x9375d4['name']||_0x9375d4['username']||_0x9375d4['userId']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0x9375d4['count']||0x0))+'</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20')['join']('');}function handleUsageDrilldownClick(_0x2c034b){const _0x3964fc=_0x2c034b['target']['closest']('[data-drilldown-group][data-drilldown-value]');if(!_0x3964fc)return;_0x2c034b['preventDefault'](),toggleUsageDrilldown(_0x3964fc);}function handleUsageDrilldownKeydown(_0x57a0b7){if(_0x57a0b7['key']!=='Enter'&&_0x57a0b7['key']!=='\x20')return;const _0x3811ec=_0x57a0b7['target']['closest']('.admin-drilldown-row[data-drilldown-group][data-drilldown-value]');if(!_0x3811ec)return;_0x57a0b7['preventDefault'](),toggleUsageDrilldown(_0x3811ec);}function handleGlobalKeydown(_0x4ffec9){_0x4ffec9['key']==='Escape'&&state['usage']['drilldown']['open']&&closeUsageDrilldown();}function toggleUsageDrilldown(_0x153959){const _0x27141a=_0x153959['dataset']['drilldownGroup']||'',_0x3d6502=_0x153959['dataset']['drilldownValue']||'',_0x553485=_0x153959['dataset']['drilldownLabel']||_0x3d6502;if(!_0x27141a||!_0x3d6502)return;if(isUsageDrilldownActive(_0x27141a,_0x3d6502)){closeUsageDrilldown();return;}openUsageDrilldown({'group':_0x27141a,'value':_0x3d6502,'label':_0x553485});}function openUsageDrilldown({group:_0x35cfa9,value:_0x17e70e,label:_0x723ca9}){state['usage']['drilldown']['group']=_0x35cfa9,state['usage']['drilldown']['value']=_0x17e70e,state['usage']['drilldown']['label']=_0x723ca9||_0x17e70e,state['usage']['drilldown']['open']=!![],state['usage']['drilldown']['data']=null;const _0x57aec4=document['getElementById']('usage-drilldown-overlay'),_0x3b5456=document['getElementById']('usage-drilldown-drawer');_0x57aec4&&(_0x57aec4['hidden']=![],requestAnimationFrame(()=>_0x57aec4['classList']['add']('active'))),_0x3b5456&&(_0x3b5456['hidden']=![],_0x3b5456['setAttribute']('aria-hidden','false'),requestAnimationFrame(()=>_0x3b5456['classList']['add']('active'))),updateUsageDrilldownHeader(),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights(),loadUsageDrilldown({'showLoading':!![]});}function closeUsageDrilldown(){state['usage']['drilldown']['open']=![],state['usage']['drilldown']['requestToken']+=0x1,state['usage']['drilldown']['request']=null,state['usage']['drilldown']['group']='',state['usage']['drilldown']['value']='',state['usage']['drilldown']['label']='',state['usage']['drilldown']['data']=null;const _0x2c0b21=document['getElementById']('usage-drilldown-overlay'),_0x232e65=document['getElementById']('usage-drilldown-drawer');_0x2c0b21&&(_0x2c0b21['classList']['remove']('active'),_0x2c0b21['hidden']=!![]),_0x232e65&&(_0x232e65['classList']['remove']('active'),_0x232e65['hidden']=!![],_0x232e65['setAttribute']('aria-hidden','true')),renderUsageDrilldown(null),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function refreshUsageDrilldownHighlights(){document['querySelectorAll']('.admin-drilldown-row')['forEach'](_0x489e86=>{const _0x74d17d=_0x489e86['dataset']['drilldownGroup']||'',_0x342a4f=_0x489e86['dataset']['drilldownValue']||'';_0x489e86['classList']['toggle']('active',isUsageDrilldownActive(_0x74d17d,_0x342a4f));}),document['querySelectorAll']('.admin-bar-row-button')['forEach'](_0x2771c4=>{const _0x5876e9=_0x2771c4['dataset']['drilldownGroup']||'',_0x4a9e9d=_0x2771c4['dataset']['drilldownValue']||'';_0x2771c4['classList']['toggle']('active',isUsageDrilldownActive(_0x5876e9,_0x4a9e9d));});}function updateUsageDrilldownHeader(_0x59de07=state['usage']['drilldown']['data']){const _0x3a4f10=document['getElementById']('usage-drilldown-title'),_0x121a0c=document['getElementById']('usage-drilldown-subtitle');if(!_0x3a4f10||!_0x121a0c)return;const _0xe2ea4c=state['usage']['environment']?'\x20in\x20'+state['usage']['environment']:'';_0x3a4f10['textContent']=state['usage']['drilldown']['label']||'Tasks';if(_0x59de07?.['summary']?.['total']>0x0){const _0x2ee101=formatNumber(_0x59de07['summary']['total']||0x0),_0x3eff0e=formatNumber(_0x59de07['displayed']||0x0);_0x121a0c['textContent']=_0x59de07['hasMore']?'Showing\x20'+_0x3eff0e+'\x20of\x20'+_0x2ee101+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0xe2ea4c+',\x20newest\x20first.':'Showing\x20all\x20'+_0x2ee101+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0xe2ea4c+'.';return;}if(_0x59de07){_0x121a0c['textContent']='No\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0xe2ea4c+'.';return;}_0x121a0c['textContent']='Loading\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0xe2ea4c+'.';}function buildPeriodLabel(){return state['usage']['days']==='all'?'all-time\x20window':state['usage']['days']+'-day\x20window';}async function loadUsageDrilldown({showLoading:showLoading=![]}={}){if(!state['usage']['drilldown']['open']||!state['usage']['drilldown']['group']||!state['usage']['drilldown']['value'])return null;if(state['usage']['drilldown']['request'])return state['usage']['drilldown']['request'];updateUsageDrilldownHeader();const _0x32e42c=state['usage']['drilldown']['requestToken']+0x1;return state['usage']['drilldown']['requestToken']=_0x32e42c,state['usage']['drilldown']['request']=((async()=>{showLoading&&setUsageDrilldownLoadingState();try{const _0x272020=new URLSearchParams({'days':state['usage']['days'],'group':state['usage']['drilldown']['group'],'value':state['usage']['drilldown']['value'],'limit':String(USAGE_DRILLDOWN_LIMIT)});state['usage']['environment']&&_0x272020['set']('environment',state['usage']['environment']);const _0x55751c=await API['get']('/stats/drilldown?'+_0x272020['toString']());if(state['usage']['drilldown']['requestToken']!==_0x32e42c||!state['usage']['drilldown']['open'])return null;return state['usage']['drilldown']['data']=_0x55751c,renderUsageDrilldown(_0x55751c),_0x55751c;}catch(_0x1744e7){if(state['usage']['drilldown']['requestToken']!==_0x32e42c||!state['usage']['drilldown']['open'])return null;return renderUsageDrilldownError(_0x1744e7),null;}finally{state['usage']['drilldown']['requestToken']===_0x32e42c&&(state['usage']['drilldown']['request']=null);}})()),state['usage']['drilldown']['request'];}function setUsageDrilldownLoadingState(){const _0x1eab4d=document['getElementById']('usage-drilldown-loading'),_0x9a594b=document['getElementById']('usage-drilldown-error'),_0x564cb5=document['getElementById']('usage-drilldown-empty'),_0xeed775=document['getElementById']('usage-drilldown-list'),_0x1a5746=document['getElementById']('usage-drilldown-summary');if(_0x1eab4d)_0x1eab4d['hidden']=![];if(_0x9a594b)_0x9a594b['hidden']=!![];if(_0x564cb5)_0x564cb5['hidden']=!![];_0xeed775&&(_0xeed775['hidden']=!![],_0xeed775['innerHTML']=''),_0x1a5746&&(_0x1a5746['hidden']=!![],_0x1a5746['innerHTML']='');}function renderUsageDrilldownError(_0x319626){const _0x44b007=document['getElementById']('usage-drilldown-loading'),_0x2de7b2=document['getElementById']('usage-drilldown-error'),_0x25e91c=document['getElementById']('usage-drilldown-empty'),_0x43a48d=document['getElementById']('usage-drilldown-list'),_0x55a6f0=document['getElementById']('usage-drilldown-summary');if(_0x44b007)_0x44b007['hidden']=!![];if(_0x25e91c)_0x25e91c['hidden']=!![];_0x43a48d&&(_0x43a48d['hidden']=!![],_0x43a48d['innerHTML']=''),_0x55a6f0&&(_0x55a6f0['hidden']=!![],_0x55a6f0['innerHTML']=''),_0x2de7b2&&(_0x2de7b2['hidden']=![]),document['getElementById']('usage-drilldown-error-message')['textContent']=_0x319626?.['message']||'Unknown\x20error';}function renderUsageDrilldown(_0x1c1ea8){const _0x4de0c9=document['getElementById']('usage-drilldown-loading'),_0x43bd6d=document['getElementById']('usage-drilldown-error'),_0x2d907d=document['getElementById']('usage-drilldown-empty'),_0x546739=document['getElementById']('usage-drilldown-list'),_0x28c758=document['getElementById']('usage-drilldown-summary');if(_0x4de0c9)_0x4de0c9['hidden']=!![];if(_0x43bd6d)_0x43bd6d['hidden']=!![];if(!_0x1c1ea8){updateUsageDrilldownHeader(null);if(_0x2d907d)_0x2d907d['hidden']=!![];_0x546739&&(_0x546739['hidden']=!![],_0x546739['innerHTML']='');_0x28c758&&(_0x28c758['hidden']=!![],_0x28c758['innerHTML']='');return;}updateUsageDrilldownHeader(_0x1c1ea8),renderUsageDrilldownSummary(_0x1c1ea8);if(!Array['isArray'](_0x1c1ea8['tasks'])||_0x1c1ea8['tasks']['length']===0x0){if(_0x2d907d)_0x2d907d['hidden']=![];_0x546739&&(_0x546739['hidden']=!![],_0x546739['innerHTML']='');return;}if(_0x2d907d)_0x2d907d['hidden']=!![];_0x546739&&(_0x546739['hidden']=![],_0x546739['innerHTML']=_0x1c1ea8['tasks']['map'](_0x4c6dc7=>renderUsageDrilldownTask(_0x4c6dc7))['join'](''));}function renderUsageDrilldownSummary(_0x128c62){const _0x2723d3=document['getElementById']('usage-drilldown-summary');if(!_0x2723d3)return;const _0x18b533=_0x128c62['summary']||{},_0x51e4b2=[{'label':'Matching\x20Tasks','value':formatNumber(_0x18b533['total']||0x0),'meta':_0x128c62['hasMore']?'Showing\x20'+formatNumber(_0x128c62['displayed']||0x0)+'\x20most\x20recent':'Current\x20filter\x20match'},{'label':'Approved','value':formatNumber(_0x18b533['approvedTasks']||0x0),'meta':formatNumber(_0x18b533['pushedTasks']||0x0)+'\x20pushed'},{'label':'Changed\x20Tasks','value':formatNumber(_0x18b533['tasksWithChanges']||0x0),'meta':formatNumber(_0x18b533['filesChanged']||0x0)+'\x20files\x20changed'},{'label':'Net\x20Lines','value':formatSignedNumber((Number(_0x18b533['linesAdded'])||0x0)-(Number(_0x18b533['linesDeleted'])||0x0)),'meta':'+'+formatNumber(_0x18b533['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0x18b533['linesDeleted']||0x0)}];_0x2723d3['hidden']=![],_0x2723d3['innerHTML']=_0x51e4b2['map'](_0x4ab681=>'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-label\x22>'+Utils['escapeHtml'](_0x4ab681['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-value\x22>'+Utils['escapeHtml'](_0x4ab681['value'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-meta\x22>'+Utils['escapeHtml'](_0x4ab681['meta'])+'</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20')['join']('');}function renderUsageDrilldownTask(_0x1e713b){const _0x34e3d1=Utils['escapeHtml'](_0x1e713b['name']||'Task\x20'+String(_0x1e713b['taskId']||'')['slice'](0x0,0x8)),_0x840c6c=Utils['escapeHtml'](_0x1e713b['taskId']||''),_0x3f5c37='task.html?id='+encodeURIComponent(_0x1e713b['taskId']||''),_0x5a8823=Utils['escapeHtml'](_0x1e713b['user']?.['name']||_0x1e713b['user']?.['username']||_0x1e713b['user']?.['userId']||'Unknown'),_0x359601=Utils['escapeHtml'](_0x1e713b['environment']||'Unknown'),_0x1afbfa=Utils['escapeHtml'](prettifyKey(_0x1e713b['source']||'manual')),_0x3de584=Utils['escapeHtml'](prettifyKey(_0x1e713b['type']||'standard')),_0x5413b7=Utils['escapeHtml'](formatDateTime(_0x1e713b['createdAt'])),_0x1ac589=_0x1e713b['finishedAt']?Utils['escapeHtml'](formatDateTime(_0x1e713b['finishedAt'])):'In\x20progress',_0x236143=_0x1e713b['durationMinutes']===null?'Pending':Utils['escapeHtml'](formatDurationMinutes(_0x1e713b['durationMinutes'])),_0x133d07=Utils['escapeHtml'](prettifyKey(_0x1e713b['status']||'unknown')),_0x4a21a3=Utils['escapeHtml'](String(_0x1e713b['status']||'unknown')['toLowerCase']()),_0x2cc8c6=[_0x1e713b['approved']?'<span\x20class=\x22admin-drilldown-flag\x20approved\x22>Approved</span>':'',_0x1e713b['pushed']?'<span\x20class=\x22admin-drilldown-flag\x20pushed\x22>Pushed</span>':'',_0x1e713b['hasChanges']?'<span\x20class=\x22admin-drilldown-flag\x20changed\x22>Has\x20Changes</span>':'']['filter'](Boolean)['join']('');return'\x0a\x20\x20\x20\x20<article\x20class=\x22admin-drilldown-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h3\x20class=\x22admin-drilldown-task-name\x22>'+_0x34e3d1+'</h3>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-task-id\x22>'+_0x840c6c+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-pill\x20status-'+_0x4a21a3+'\x22>'+_0x133d07+'</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Environment</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x359601+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>User</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x5a8823+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Source</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x1afbfa+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x3de584+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Created</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x5413b7+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Duration</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x236143+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Finished</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x1ac589+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Code\x20Impact</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>+'+Utils['escapeHtml'](formatNumber(_0x1e713b['code']?.['linesAdded']||0x0))+'\x20/\x20-'+Utils['escapeHtml'](formatNumber(_0x1e713b['code']?.['linesDeleted']||0x0))+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0x1e713b['code']?.['filesChanged']||0x0))+'\x20files</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0x1e713b['code']?.['repositories']||0x0))+'\x20repos</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-flags\x22>'+(_0x2cc8c6||'<span\x20class=\x22admin-drilldown-flag\x20neutral\x22>Not\x20approved</span>')+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20class=\x22btn-secondary\x20btn-small\x22\x20href=\x22'+Utils['escapeHtml'](_0x3f5c37)+'\x22\x20target=\x22_blank\x22\x20rel=\x22noopener\x20noreferrer\x22>Open\x20Task</a>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</article>\x0a\x20\x20';}function updateActiveFilterButtons(_0x1c6ecc,_0x5cf70a){document['querySelectorAll'](_0x1c6ecc+'\x20.admin-filter-btn')['forEach'](_0x4ec647=>{_0x4ec647['classList']['toggle']('active',_0x4ec647['dataset']['level']===_0x5cf70a||_0x4ec647['dataset']['days']===_0x5cf70a||_0x4ec647['dataset']['order']===_0x5cf70a);});}function scrollLogsToLiveEdge(_0x378c3c){if(!_0x378c3c)return;if(state['logs']['order']===LOG_ORDER_DESC){_0x378c3c['scrollTop']=0x0;return;}_0x378c3c['scrollTop']=_0x378c3c['scrollHeight'];}function setSummaryValue(_0x4117bc,_0x1deb44,_0x19bc57=''){const _0x184e37=document['getElementById'](_0x4117bc);if(!_0x184e37)return;_0x184e37['textContent']=_0x1deb44,_0x184e37['classList']['remove']('status-good','status-warn','status-bad'),_0x19bc57&&_0x184e37['classList']['add'](_0x19bc57);}function statusClassFromPercent(_0x19223d){if(_0x19223d>=0x50)return'status-good';if(_0x19223d>0x3c)return'status-warn';return'status-bad';}function formatDateTime(_0x5c540c){const _0x50702f=new Date(_0x5c540c);if(Number['isNaN'](_0x50702f['getTime']()))return _0x5c540c||'Unknown';return _0x50702f['toLocaleString']();}function formatLogContext(_0x4432be){if(!_0x4432be)return'';try{return JSON['stringify'](_0x4432be,null,0x2);}catch{return String(_0x4432be);}}function formatLogEntryForClipboard(_0x214299){const _0x4d019d=['['+formatDateTime(_0x214299['timestamp'])+']\x20'+String(_0x214299['level']||'INFO')['toUpperCase']()];_0x214299['message']&&_0x4d019d['push'](String(_0x214299['message']));const _0x22ddc6=formatLogContext(_0x214299['context']);return _0x22ddc6&&(_0x4d019d['push']('Context:'),_0x4d019d['push'](_0x22ddc6)),_0x4d019d['join']('\x0a');}function formatLogEntriesForClipboard(_0x2012a9){if(!Array['isArray'](_0x2012a9)||_0x2012a9['length']===0x0)return'';return _0x2012a9['map'](formatLogEntryForClipboard)['join']('\x0a\x0a');}function formatDurationMinutes(_0x84c08e){const _0x498777=Math['round'](Number(_0x84c08e)||0x0);if(_0x498777<0x3c)return _0x498777+'m';const _0x219307=Math['floor'](_0x498777/0x3c),_0x5c753f=_0x498777%0x3c;return _0x5c753f>0x0?_0x219307+'h\x20'+_0x5c753f+'m':_0x219307+'h';}function formatPercent(_0x258cd8){return Math['round'](Number(_0x258cd8)||0x0)+'%';}function formatNumber(_0x283e74){return NUMBER_FORMATTER['format'](Number(_0x283e74)||0x0);}function formatSignedNumber(_0xab16c){const _0x15eee8=Number(_0xab16c)||0x0;if(_0x15eee8>0x0)return'+'+formatNumber(_0x15eee8);return formatNumber(_0x15eee8);}function prettifyKey(_0x34e44f){return String(_0x34e44f)['replace'](/[_-]+/g,'\x20')['replace'](/\b\w/g,_0x4218fa=>_0x4218fa['toUpperCase']());}const DRILLDOWN_TITLES={'containers':'Docker\x20Containers','storage':'Docker\x20Storage','sessions':'Active\x20Sessions','system':'System\x20Information'};function openDrilldown(_0x1f1768){if(!_0x1f1768||!DRILLDOWN_TITLES[_0x1f1768])return;const _0x13b945=document['getElementById']('drilldown-modal'),_0x27c9da=document['getElementById']('drilldown-modal-title'),_0x574419=document['getElementById']('drilldown-loading'),_0x31f6c7=document['getElementById']('drilldown-error'),_0x3c8851=document['getElementById']('drilldown-content');_0x27c9da['textContent']=DRILLDOWN_TITLES[_0x1f1768],_0x574419['hidden']=![],_0x31f6c7['hidden']=!![],_0x3c8851['innerHTML']='',_0x13b945['hidden']=![],loadDrilldownData(_0x1f1768)['then'](_0x52108b=>{_0x574419['hidden']=!![],_0x3c8851['innerHTML']=_0x52108b,attachDrilldownActions(_0x1f1768,_0x3c8851);})['catch'](_0x17ec1d=>{_0x574419['hidden']=!![],_0x31f6c7['hidden']=![],document['getElementById']('drilldown-error-message')['textContent']=_0x17ec1d['message']||'Failed\x20to\x20load\x20details';});}function closeDrilldownModal(){const _0x53d6a2=document['getElementById']('drilldown-modal');_0x53d6a2&&(_0x53d6a2['hidden']=!![]);}async function loadDrilldownData(_0x4096b3){switch(_0x4096b3){case'containers':return loadContainersDrilldown();case'storage':return loadStorageDrilldown();case'sessions':return loadSessionsDrilldown();case'system':return loadSystemDrilldown();default:return'<div\x20class=\x22drilldown-empty\x22>Unknown\x20drilldown\x20type.</div>';}}async function loadContainersDrilldown(){const _0x1de6ab=await API['getDockerContainers'](),_0x3864e4=_0x1de6ab['containers']||[];if(_0x3864e4['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20Docker\x20containers\x20found.</div>';const _0x2f0941=_0x3864e4['filter'](_0x4abd94=>_0x4abd94['state']==='running')['length'],_0x1c070f=_0x3864e4['length']-_0x2f0941;let _0x1d8f49='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x3864e4['length']))+'\x20container'+(_0x3864e4['length']!==0x1?'s':'')+'\x20total\x20—\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x2f0941))+'\x20running,\x20'+esc(String(_0x1c070f))+'\x20stopped\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Image</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Status</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Ports</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0x531078 of _0x3864e4){const _0x2355b8=esc((_0x531078['names']||[])[0x0]||_0x531078['shortId']||_0x531078['id']),_0x16e4e7=esc(_0x531078['image']||'-'),_0x4395b4=String(_0x531078['state']||'unknown')['toLowerCase'](),_0x1ccd0e=esc(_0x531078['status']||_0x531078['state']||'-'),_0x2ce19b=(_0x531078['ports']||[])['filter'](_0x54a4e5=>_0x54a4e5['public'])['map'](_0x14bc9b=>esc(_0x14bc9b['public']+':'+_0x14bc9b['private']+'/'+_0x14bc9b['type']))['join'](',\x20')||'-',_0x3e6eee=_0x531078['created']?esc(formatDateTime(_0x531078['created'])):'-',_0x182945=_0x4395b4==='running';_0x1d8f49+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><strong>'+_0x2355b8+'</strong><br><span\x20class=\x22text-muted\x22\x20style=\x22font-size:11px\x22>'+esc(_0x531078['shortId']||'')+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-tag\x22>'+_0x16e4e7+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-status\x20drilldown-status-'+esc(_0x4395b4)+'\x22>'+_0x1ccd0e+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x2ce19b+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+_0x3e6eee+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x182945?'<button\x20class=\x22btn-secondary\x20btn-small\x22\x20data-action=\x22stop-container\x22\x20data-container-id=\x22'+esc(_0x531078['id'])+'\x22>Stop</button>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22btn-ghost\x20btn-small\x22\x20data-action=\x22remove-container\x22\x20data-container-id=\x22'+esc(_0x531078['id'])+'\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0x1d8f49+='</tbody></table></div>',_0x1d8f49;}async function loadStorageDrilldown(){const [_0x47110d,_0x428789]=await Promise['all']([API['getDockerImages'](),API['getDockerVolumes']()]),_0x3a1b17=_0x47110d['images']||[],_0x24cc70=_0x428789['volumes']||[];let _0x385125='';_0x385125+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Images</div>';if(_0x3a1b17['length']===0x0)_0x385125+='<div\x20class=\x22drilldown-empty\x22>No\x20images\x20found.</div>';else{_0x385125+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Tags</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Containers</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x2058cd of _0x3a1b17){const _0x48a9ae=(_0x2058cd['tags']||[])['filter'](_0x4254fd=>_0x4254fd!=='<none>:<none>'),_0x1d6c4d=_0x48a9ae['length']>0x0?'<div\x20class=\x22drilldown-tag-list\x22>'+_0x48a9ae['map'](_0x4d54c6=>'<span\x20class=\x22drilldown-tag\x22>'+esc(_0x4d54c6)+'</span>')['join']('')+'</div>':'<span\x20class=\x22text-muted\x22>untagged</span>';_0x385125+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td><code>'+esc(_0x2058cd['id']||'-')+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x1d6c4d+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+esc(_0x2058cd['sizeDisplay']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x2058cd['created']?esc(formatDateTime(_0x2058cd['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x2058cd['containers']??'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x385125+='</tbody></table></div>';}_0x385125+='</div>',_0x385125+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Volumes</div>';if(_0x24cc70['length']===0x0)_0x385125+='<div\x20class=\x22drilldown-empty\x22>No\x20volumes\x20found.</div>';else{_0x385125+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Driver</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Scope</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0xfdd31a of _0x24cc70){const _0x32bd98=_0xfdd31a['name']||'-',_0x17b4f6=_0x32bd98['length']>0x28?_0x32bd98['substring'](0x0,0x25)+'...':_0x32bd98;_0x385125+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x32bd98)+'\x22><code>'+esc(_0x17b4f6)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0xfdd31a['driver']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0xfdd31a['scope']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0xfdd31a['created']?esc(formatDateTime(_0xfdd31a['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x385125+='</tbody></table></div>';}return _0x385125+='</div>',_0x385125;}async function loadSessionsDrilldown(){const _0x203519=await API['getActiveSessions'](),_0x2dfb5d=_0x203519['sessions']||[];if(_0x2dfb5d['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20active\x20sessions\x20found.</div>';let _0x5793d4='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x2dfb5d['length']))+'\x20active\x20session'+(_0x2dfb5d['length']!==0x1?'s':'')+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Session\x20ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>User</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Last\x20Access</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0x522282 of _0x2dfb5d){const _0x5987d6=(_0x522282['id']||'')['length']>0x10?_0x522282['id']['substring'](0x0,0xd)+'...':_0x522282['id']||'-';_0x5793d4+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x522282['id']||'')+'\x22><code>'+esc(_0x5987d6)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x522282['username']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x522282['createdAt']?esc(formatDateTime(_0x522282['createdAt'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x522282['lastAccess']?esc(formatDateTime(_0x522282['lastAccess'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0x5793d4+='</tbody></table></div>',_0x5793d4;}async function loadSystemDrilldown(){const _0xdc5aed=await API['getSystemInfo']();let _0x2617ef='<div\x20class=\x22drilldown-info-grid\x22>';const _0x1513f7=[{'label':'Hostname','value':_0xdc5aed['hostname']},{'label':'Platform','value':_0xdc5aed['platform']+'\x20('+_0xdc5aed['arch']+')'},{'label':'Kernel','value':_0xdc5aed['release']},{'label':'Node.js','value':_0xdc5aed['nodeVersion']},{'label':'Process\x20ID','value':_0xdc5aed['pid']},{'label':'CPU\x20Model','value':_0xdc5aed['cpuModel']},{'label':'CPU\x20Cores','value':_0xdc5aed['coreCount']},{'label':'Total\x20Memory','value':_0xdc5aed['totalMemoryDisplay']},{'label':'Free\x20Memory','value':_0xdc5aed['freeMemoryDisplay']},{'label':'System\x20Uptime','value':formatUptimeSeconds(_0xdc5aed['uptime']?.['system'])},{'label':'Process\x20Uptime','value':formatUptimeSeconds(_0xdc5aed['uptime']?.['process'])}];for(const _0x41b9f2 of _0x1513f7){_0x2617ef+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>'+esc(_0x41b9f2['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(String(_0x41b9f2['value']??'-'))+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';}_0x2617ef+='</div>';_0xdc5aed['loadAverage']&&(_0x2617ef+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Load\x20Average</div>',_0x2617ef+='<div\x20class=\x22drilldown-info-grid\x22>',_0x2617ef+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>1\x20Minute</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0xdc5aed['loadAverage']['1m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>5\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0xdc5aed['loadAverage']['5m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>15\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0xdc5aed['loadAverage']['15m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x2617ef+='</div></div>');if(Array['isArray'](_0xdc5aed['cores'])&&_0xdc5aed['cores']['length']>0x0&&_0xdc5aed['cores']['length']<=0x40){_0x2617ef+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>CPU\x20Cores</div>',_0x2617ef+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Core</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Model</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Speed\x20(MHz)</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x4d4e8a of _0xdc5aed['cores']){_0x2617ef+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x4d4e8a['index']))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x4d4e8a['model']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x4d4e8a['speed']||'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x2617ef+='</tbody></table></div></div>';}return _0x2617ef;}function formatUptimeSeconds(_0x581dda){if(!Number['isFinite'](_0x581dda)||_0x581dda<0x0)return'-';const _0x17c548=Math['floor'](_0x581dda/0x15180),_0x48461a=Math['floor'](_0x581dda%0x15180/0xe10),_0xc70893=Math['floor'](_0x581dda%0xe10/0x3c);if(_0x17c548>0x0)return _0x17c548+'d\x20'+_0x48461a+'h\x20'+_0xc70893+'m';if(_0x48461a>0x0)return _0x48461a+'h\x20'+_0xc70893+'m';return _0xc70893+'m';}function esc(_0x2eb185){return Utils['escapeHtml'](String(_0x2eb185??''));}function attachDrilldownActions(_0x5ae7a5,_0x351f9a){_0x5ae7a5==='containers'&&_0x351f9a['addEventListener']('click',async _0x4efb1d=>{const _0x2a1763=_0x4efb1d['target']['closest']('[data-action]');if(!_0x2a1763)return;const _0x4e48de=_0x2a1763['dataset']['action'],_0x1c5b29=_0x2a1763['dataset']['containerId'];if(!_0x1c5b29)return;_0x2a1763['disabled']=!![],_0x2a1763['textContent']=_0x4e48de==='stop-container'?'Stopping...':'Removing...';try{if(_0x4e48de==='stop-container')await API['stopDockerContainer'](_0x1c5b29),Utils['showSuccess']('Container\x20stopped');else _0x4e48de==='remove-container'&&(await API['removeDockerContainer'](_0x1c5b29),Utils['showSuccess']('Container\x20removed'));const _0x1e01da=await loadContainersDrilldown();document['getElementById']('drilldown-content')['innerHTML']=_0x1e01da,attachDrilldownActions('containers',document['getElementById']('drilldown-content')),loadHealth({'showLoading':![]});}catch(_0x5bf9d7){Utils['showError'](_0x5bf9d7['message']||'Failed\x20to\x20'+_0x4e48de['replace']('-','\x20')),_0x2a1763['disabled']=![],_0x2a1763['textContent']=_0x4e48de==='stop-container'?'Stop':'Remove';}});}
|