colana 1.0.0-beta.113 → 1.0.0-beta.116
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/bin/admin.js +1 -1
- package/bin/colana.js +1 -1
- package/package.json +14 -9
- package/public/agent-split.html +74 -1
- package/public/agent.html +75 -1
- package/public/dist/app.js +1 -1
- package/public/dist/styles.css +1 -1
- package/public/index.html +22 -1
- package/public/wizard.css +366 -315
- package/public/wizard.html +53 -64
- package/public/wizard.js +1 -1
- package/server/admin.js +1 -1
- package/server/agent/index.js +1 -1
- package/server/agent/manager.js +1 -1
- package/server/agent-control-routes.js +1 -1
- package/server/analytics-routes.js +1 -1
- package/server/analytics.js +1 -1
- package/server/auth.js +1 -1
- package/server/auto-resume.js +1 -1
- package/server/blueprint-exporter.js +1 -1
- package/server/blueprint-importer.js +1 -1
- package/server/blueprint-routes.js +1 -1
- package/server/blueprint-store.js +1 -1
- package/server/blueprint-sync.js +1 -1
- package/server/brand.js +1 -1
- package/server/checkpoint-store.js +1 -1
- package/server/config.js +1 -1
- package/server/context-sync.js +1 -1
- package/server/csp-report-routes.js +1 -1
- package/server/db.js +1 -1
- package/server/dependency-detector.js +1 -1
- package/server/diagnostics-routes.js +1 -1
- package/server/error-recovery.js +1 -1
- package/server/errors.js +1 -1
- package/server/file-browser.js +1 -1
- package/server/git-ops.js +1 -1
- package/server/gog-auth.js +1 -1
- package/server/image-routes.js +1 -0
- package/server/index.js +1 -1
- package/server/installer/index.js +1 -1
- package/server/installer/manager.js +1 -1
- package/server/integration-hub.js +1 -1
- package/server/integration-routes.js +1 -1
- package/server/key-manager.js +1 -1
- package/server/license-routes.js +1 -1
- package/server/license.js +1 -1
- package/server/logger.js +1 -1
- package/server/migration.js +1 -1
- package/server/openclaw-config.js +1 -1
- package/server/permission-mcp.js +1 -1
- package/server/permission-routes.js +1 -1
- package/server/personal-agent-routes.js +1 -1
- package/server/personal-chat-store.js +1 -1
- package/server/platform.js +1 -1
- package/server/port-finder.js +1 -1
- package/server/preflight.js +1 -1
- package/server/project-config.js +1 -1
- package/server/project-routes.js +1 -1
- package/server/project-store.js +1 -1
- package/server/pty/index.js +1 -1
- package/server/pty/manager.js +1 -1
- package/server/quiesce-state.js +1 -0
- package/server/runtime-policy.js +1 -1
- package/server/server-control-routes.js +1 -1
- package/server/service-manager.js +1 -1
- package/server/session-routes.js +1 -1
- package/server/session-store.js +1 -1
- package/server/settings-routes.js +1 -1
- package/server/settings-store.js +1 -1
- package/server/snippet-routes.js +1 -1
- package/server/snippet-store.js +1 -1
- package/server/spawn-env.js +1 -1
- package/server/system-info.js +1 -1
- package/server/template-routes.js +1 -1
- package/server/template-store.js +1 -1
- package/server/updater/agent-inventory.js +1 -0
- package/server/updater/applier.js +1 -1
- package/server/updater/auto-apply.js +1 -1
- package/server/updater/bootstrap-shim.js +1 -0
- package/server/updater/decision-engine.js +1 -0
- package/server/updater/downloader.js +1 -1
- package/server/updater/index.js +1 -1
- package/server/updater/manifest.js +1 -1
- package/server/updater/orchestrator.js +1 -1
- package/server/updater.js +1 -1
- package/server/usage-tracker.js +1 -1
- package/server/validation.js +1 -1
- package/server/webhook-routes.js +1 -1
- package/server/wizard-routes.js +1 -1
- package/server/worktree-manager.js +1 -1
package/bin/admin.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const a0_0x4763fe=a0_0x26b7;(function(_0x513a91,_0x1a2c82){const _0x59edbf=a0_0x26b7,_0x5ccd4f=_0x513a91();while(!![]){try{const _0x3fd47b=-parseInt(_0x59edbf(0x188))/0x1+parseInt(_0x59edbf(0x163))/0x2*(parseInt(_0x59edbf(0x15b))/0x3)+parseInt(_0x59edbf(0x156))/0x4+-parseInt(_0x59edbf(0x1a9))/0x5+parseInt(_0x59edbf(0x1ab))/0x6*(parseInt(_0x59edbf(0x1a6))/0x7)+parseInt(_0x59edbf(0x16e))/0x8+-parseInt(_0x59edbf(0x166))/0x9;if(_0x3fd47b===_0x1a2c82)break;else _0x5ccd4f['push'](_0x5ccd4f['shift']());}catch(_0x473fab){_0x5ccd4f['push'](_0x5ccd4f['shift']());}}}(a0_0x6ec8,0x896e7));import a0_0x52d590 from'fs';import a0_0x4c30a3 from'path';import a0_0x2d4236 from'os';import{fileURLToPath}from'url';import{c,icons,brandName}from'../server/brand.js';const __dirname=a0_0x4c30a3[a0_0x4763fe(0x19e)](fileURLToPath(import.meta.url));function parseArgs(_0x324e78){const _0xb4477b=a0_0x4763fe,_0x1a2a03=_0x324e78[_0xb4477b(0x1ad)](0x2),_0x21d6ea=_0x1a2a03[0x0],_0x5ddad2=[],_0x514ebf={};for(let _0x1bb83a=0x1;_0x1bb83a<_0x1a2a03['length'];_0x1bb83a++){if(_0x1a2a03[_0x1bb83a][_0xb4477b(0x170)]('--')){let _0x5ea879=_0x1a2a03[_0x1bb83a][_0xb4477b(0x1ad)](0x2),_0x460693;const _0x38d2e8=_0x5ea879[_0xb4477b(0x162)]('=');_0x38d2e8!==-0x1?(_0x460693=_0x5ea879[_0xb4477b(0x1ad)](_0x38d2e8+0x1),_0x5ea879=_0x5ea879['slice'](0x0,_0x38d2e8)):_0x460693=_0x1bb83a+0x1<_0x1a2a03['length']&&!_0x1a2a03[_0x1bb83a+0x1][_0xb4477b(0x170)]('--')?_0x1a2a03[++_0x1bb83a]:'true',_0x514ebf[_0x5ea879]=_0x460693;}else _0x5ddad2['push'](_0x1a2a03[_0x1bb83a]);}return{'command':_0x21d6ea,'flags':_0x514ebf,'positional':_0x5ddad2};}function maskKey(_0x489513){const _0x36b523=a0_0x4763fe;if(!_0x489513||_0x489513[_0x36b523(0x177)]<=0x8)return'****';return _0x489513['slice'](0x0,0x4)+'****';}const DEFAULT_PORT=0x2694,MAX_PORT_SCAN=0x64;async function findRunningServer(){const _0x1c08c7=a0_0x4763fe;for(let _0xd64859=0x0;_0xd64859<MAX_PORT_SCAN;_0xd64859++){const _0x308c71=DEFAULT_PORT+_0xd64859;try{const _0xe50afb=await fetch(_0x1c08c7(0x190)+_0x308c71+'/api/health',{'signal':AbortSignal[_0x1c08c7(0x1a0)](0x1f4)});if(_0xe50afb['ok']){const _0x57548e=await _0xe50afb['json']();if(_0x57548e['status']==='ok')return _0x1c08c7(0x190)+_0x308c71;}}catch{}}return null;}async function createKeyViaApi(_0x4093ee,_0x2e8bd5){const _0x59e59a=a0_0x4763fe,_0x5b47d8=await fetch(_0x4093ee+_0x59e59a(0x179),{'method':_0x59e59a(0x19a),'headers':{'Content-Type':'application/json'},'body':JSON[_0x59e59a(0x194)](_0x2e8bd5)});if(!_0x5b47d8['ok']){const _0xd672a2=await _0x5b47d8['json']()[_0x59e59a(0x165)](()=>({'error':'HTTP\x20'+_0x5b47d8[_0x59e59a(0x18b)]}));throw new Error(_0xd672a2['error']||_0x59e59a(0x198)+_0x5b47d8['status']);}return _0x5b47d8[_0x59e59a(0x182)]();}async function listKeysViaApi(_0x464dd3,_0x3148ab){const _0x1bc4f3=a0_0x4763fe,_0x4aa17d=new URLSearchParams();if(_0x3148ab[_0x1bc4f3(0x19f)])_0x4aa17d[_0x1bc4f3(0x187)](_0x1bc4f3(0x19f),_0x3148ab[_0x1bc4f3(0x19f)]);if(_0x3148ab['status'])_0x4aa17d[_0x1bc4f3(0x187)]('status',_0x3148ab['status']);const _0x536486=_0x4aa17d['toString'](),_0x1813bf=await fetch(_0x464dd3+'/api/admin/keys'+(_0x536486?'?'+_0x536486:''));if(!_0x1813bf['ok']){const _0x383e21=await _0x1813bf[_0x1bc4f3(0x182)]()['catch'](()=>({'error':'HTTP\x20'+_0x1813bf['status']}));throw new Error(_0x383e21[_0x1bc4f3(0x199)]||_0x1bc4f3(0x198)+_0x1813bf['status']);}return _0x1813bf['json']();}async function revokeKeyViaApi(_0x4868fb,_0x459df9){const _0x384a1e=a0_0x4763fe,_0x55bde2=await fetch(_0x4868fb+'/api/admin/keys/'+_0x459df9,{'method':'DELETE'});if(!_0x55bde2['ok']){const _0x5d32f4=await _0x55bde2['json']()[_0x384a1e(0x165)](()=>({'error':_0x384a1e(0x1a5)+_0x55bde2[_0x384a1e(0x18b)]}));throw new Error(_0x5d32f4['error']||'Server\x20responded\x20with\x20'+_0x55bde2['status']);}return _0x55bde2[_0x384a1e(0x182)]();}let _dbReady=![];function a0_0x26b7(_0x58634d,_0x82ae76){_0x58634d=_0x58634d-0x153;const _0x6ec8e8=a0_0x6ec8();let _0x26b77d=_0x6ec8e8[_0x58634d];if(a0_0x26b7['agJVyk']===undefined){var _0x1d58f3=function(_0x3319aa){const _0xaccad4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x52d590='',_0x4c30a3='';for(let _0x2d4236=0x0,_0x324e78,_0x1a2a03,_0x21d6ea=0x0;_0x1a2a03=_0x3319aa['charAt'](_0x21d6ea++);~_0x1a2a03&&(_0x324e78=_0x2d4236%0x4?_0x324e78*0x40+_0x1a2a03:_0x1a2a03,_0x2d4236++%0x4)?_0x52d590+=String['fromCharCode'](0xff&_0x324e78>>(-0x2*_0x2d4236&0x6)):0x0){_0x1a2a03=_0xaccad4['indexOf'](_0x1a2a03);}for(let _0x5ddad2=0x0,_0x514ebf=_0x52d590['length'];_0x5ddad2<_0x514ebf;_0x5ddad2++){_0x4c30a3+='%'+('00'+_0x52d590['charCodeAt'](_0x5ddad2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4c30a3);};a0_0x26b7['jqDDds']=_0x1d58f3,a0_0x26b7['UWKxpD']={},a0_0x26b7['agJVyk']=!![];}const _0x2cb03b=_0x6ec8e8[0x0],_0x5357eb=_0x58634d+_0x2cb03b,_0x50c3f2=a0_0x26b7['UWKxpD'][_0x5357eb];return!_0x50c3f2?(_0x26b77d=a0_0x26b7['jqDDds'](_0x26b77d),a0_0x26b7['UWKxpD'][_0x5357eb]=_0x26b77d):_0x26b77d=_0x50c3f2,_0x26b77d;}async function ensureDb(){const _0x46e88f=a0_0x4763fe;if(_dbReady)return;const {getDb:_0x3548b5}=await import(_0x46e88f(0x169));await _0x3548b5(),_dbReady=!![];}async function createKey(_0x75b2fa){const _0x1ddb33=a0_0x4763fe,_0x1517b4=_0x75b2fa['name'],_0x292f1c=_0x75b2fa['type']||_0x1ddb33(0x189),_0x2d89dc=_0x75b2fa['email']||null,_0x19fb51=_0x75b2fa['expires']||null;if(!_0x1517b4){console[_0x1ddb33(0x199)](_0x1ddb33(0x18d)+icons[_0x1ddb33(0x1ae)]+'\x20'+c[_0x1ddb33(0x199)]+_0x1ddb33(0x176)+c[_0x1ddb33(0x195)]+'\x0a'),console[_0x1ddb33(0x199)](_0x1ddb33(0x17d)),process[_0x1ddb33(0x172)](0x1);return;}const _0x5dd32c=[_0x1ddb33(0x183),_0x1ddb33(0x189),'beta'];if(!_0x5dd32c[_0x1ddb33(0x1a3)](_0x292f1c)){console[_0x1ddb33(0x199)](_0x1ddb33(0x18d)+icons['fail']+'\x20'+c['error']+'ERROR:\x20Invalid\x20type\x20\x22'+_0x292f1c+_0x1ddb33(0x161)+_0x5dd32c['join'](',\x20')+c['reset']+'\x0a'),process['exit'](0x1);return;}const _0x746b57=await findRunningServer();let _0x1d7b35;if(_0x746b57)try{_0x1d7b35=await createKeyViaApi(_0x746b57,{'name':_0x1517b4,'type':_0x292f1c,'email':_0x2d89dc||undefined,'expires':_0x19fb51||undefined});}catch(_0x4e9c01){console[_0x1ddb33(0x199)]('\x0a\x20\x20'+icons['fail']+'\x20'+c[_0x1ddb33(0x199)]+_0x4e9c01[_0x1ddb33(0x17e)]+c[_0x1ddb33(0x195)]+'\x20'+c['muted']+'(via\x20server)'+c[_0x1ddb33(0x195)]+'\x0a'),process['exit'](0x1);return;}else{await ensureDb();const {generateKey:_0x5a8247}=await import('../server/key-manager.js');try{_0x1d7b35=_0x5a8247(_0x1517b4,_0x292f1c,_0x2d89dc,_0x19fb51);}catch(_0x4bb279){console['error']('\x0a\x20\x20'+icons[_0x1ddb33(0x1ae)]+'\x20'+c['error']+_0x4bb279['message']+c['reset']+'\x0a'),process['exit'](0x1);return;}}if(!_0x1d7b35||!_0x1d7b35[_0x1ddb33(0x153)]){console[_0x1ddb33(0x199)]('\x0a\x20\x20'+icons['fail']+'\x20'+c[_0x1ddb33(0x199)]+_0x1ddb33(0x185)+c['reset']+'\x0a'),process[_0x1ddb33(0x172)](0x1);return;}console[_0x1ddb33(0x184)](''),console['log']('\x20\x20'+icons[_0x1ddb33(0x16f)]+_0x1ddb33(0x16c)),console['log']('\x20\x20'+c['muted']+'─'['repeat'](0x28)+c['reset']),console['log']('\x20\x20\x20\x20'+c[_0x1ddb33(0x158)]+'Name:'+c['reset']+'\x20\x20\x20\x20'+c['value']+_0x1d7b35['name']+c['reset']),console['log'](_0x1ddb33(0x167)+c['muted']+'Type:'+c[_0x1ddb33(0x195)]+_0x1ddb33(0x167)+c['value']+_0x1d7b35[_0x1ddb33(0x19f)]+c['reset']),console['log'](_0x1ddb33(0x167)+c[_0x1ddb33(0x158)]+'ID:'+c[_0x1ddb33(0x195)]+'\x20\x20\x20\x20\x20\x20'+c[_0x1ddb33(0x186)]+_0x1d7b35['id']+c['reset']),console[_0x1ddb33(0x184)](_0x1ddb33(0x167)+c[_0x1ddb33(0x158)]+_0x1ddb33(0x19b)+c[_0x1ddb33(0x195)]+'\x20\x20\x20\x20\x20'+c['warn']+_0x1d7b35['raw']+c[_0x1ddb33(0x195)]),console[_0x1ddb33(0x184)]('\x20\x20'+c['muted']+'─'['repeat'](0x28)+c['reset']),console['log']('\x20\x20'+c['warn']+'IMPORTANT:\x20Copy\x20this\x20key\x20now.\x20It\x20cannot\x20be\x20retrieved\x20later.'+c[_0x1ddb33(0x195)]),_0x746b57?console[_0x1ddb33(0x184)]('\x20\x20'+c['muted']+_0x1ddb33(0x196)+c[_0x1ddb33(0x195)]):console[_0x1ddb33(0x184)]('\x20\x20'+c[_0x1ddb33(0x158)]+'(Created\x20via\x20direct\x20DB\x20—\x20restart\x20server\x20to\x20pick\x20up)'+c['reset']),console[_0x1ddb33(0x184)]('');}function a0_0x6ec8(){const _0x469534=['C3rHDhvZ','cIaGtM8GA2v5CYbMB3vUzc4k','cIaG','ieTLEsa','y29Syw5HigfKBwLUigrVy3rVCG','Ahr0CdOVlZeYnY4WlJaUmtO','ls10ExbLihn0ywzMFgfKBwLUFgjLDge','cIaGtM8GC3rHzMyGB3iGywrTAw4GA2v5CYbJB25MAwD1CMvKlIbtzxqGu1rbrKzFs0vzuYbVCIbbre1jtL9lrvLtigvUDMLYB25Tzw50ihzHCMLHyMXLlGO','qwrTAw4Gq0Xj','C3rYAw5NAwz5','CMvZzxq','kenYzwf0zwqGDMLHihj1BM5PBMCGC2vYDMvYkq','ls1LBwfPBcb1C2vYqgv4yw1WBguUy29T','u2vYDMvYihjLC3bVBMrLzcb3AxrOia','zxjYB3i','ue9tva','s2v5oG','CMv2B2TLlwTLEq','C3bSAxq','zgLYBMfTzq','DhLWzq','DgLTzw91Da','A2v5CW','icaGicaGicaGicaGieDLBMvYyxrLigeGBMv3igXPy2vUC2uGA2v5icHZDg9YzwqGAw4GreiPcIaGicaGia','Aw5JBhvKzxm','rvjst1i6ieTLEsbjrcbPCYbYzxf1AxjLzc4','sfruuca','mZKWmJu0oxHNA01quq','y29Syw5HigfKBwLUigXPC3qTA2v5CW','AgvSCa','mtiYmJi4mhHAr1H6Ca','CMvWzwf0','nLvht3n5sW','CgfKrw5K','C2XPy2u','zMfPBa','BMfTzq','vg90ywW6ia','lI4VC2vYDMvYl2TLEs1Tyw5Hz2vYlMPZ','mtq2nZK2offXDxv2Da','qurnsu5Fs0vzuW','Bxv0zwq','ls1Uyw1Licjoyw1LiG','ls1LEhbPCMvZidiWmJyTmtiTmZe','mtqYnJvbC1PkuuW','zMLSDgvY','tgLJzw5ZzsblzxLZoG','qwrTAw4Gs2v5CZO','AgvHzgLUzW','Dg9mB2nHBgveyxrLu3rYAw5N','iI4GtxvZDcbIzsbVBMuGB2y6ia','Aw5KzxHpzG','mNjfyvDAEq','cIaGuNvUicDJB2XHBMeGzg9JDg9YjYbMB3iGC3LZDgvTigrPywDUB3n0AwnZlGO','y2f0y2G','nZi1nte2mwvrDevsvW','icaGia','y21K','lI4VC2vYDMvYl2rIlMPZ','tMv2zxi','igHHCYbIzwvUihjLDM9RzwqUcG','ieTLEsbNzw5LCMf0zwqGC3vJy2vZC2z1BgX5iq','vxnHz2u6','nJu1otm4nhjUvMDVrq','CgfZCW','C3rHCNrZv2L0Aa','cIaGica','zxHPDa','icaGicaGicbszxzVA2uGysbeqI1ZDg9YzwqGBgLJzw5ZzsbRzxKkcIaG','khzPysbZzxj2zxiP','y3jLyxrLlwTLEq','rvjst1i6ic0TBMfTzsbPCYbYzxf1AxjLzc4','BgvUz3rO','q3jLyxrLza','l2fWAs9Hzg1PBI9RzxLZ','icaOqurnsu5Fs0vzuYK','DhjPBq','y29Syw5HigfKBwLUihn0ywzMlwTLExm','icbvC2fNztOGy29Syw5HigfKBwLUignYzwf0zs1RzxKGls1Uyw1LicjtyxjHAciGls10ExbLihn0ywzMifSTlwvTywLSihHDifSTlwv4CgLYzxmGmJaYnI0XmI0Zmv0k','BwvZC2fNzq','zg9JDg9Y','BgLZDc1RzxLZ','icaGicaGicaGicaGicbfEhbPCNKGzgf0zsaOB3b0Aw9UywWPcIaGica','ANnVBG','ywrTAw4','Bg9N','s2v5igDLBMvYyxrPB24GCMv0DxjUzwqGyw4GDw5LEhbLy3rLzcbYzxnWB25Zzs4','DMfSDwu','C2v0','mtm1nJCZrgvrwhjw','C3rHzMy','icaGicaGicaGicbgAwX0zxiGyNKGC3rHDhvZcIaGica'];a0_0x6ec8=function(){return _0x469534;};return a0_0x6ec8();}async function listKeysCmd(_0x5ea95b){const _0x38c801=a0_0x4763fe,_0x8b0301={};if(_0x5ea95b[_0x38c801(0x19f)])_0x8b0301[_0x38c801(0x19f)]=_0x5ea95b['type'];if(_0x5ea95b[_0x38c801(0x18b)])_0x8b0301['status']=_0x5ea95b['status'];const _0x21210d=await findRunningServer();let _0x11b98c;if(_0x21210d)try{_0x11b98c=await listKeysViaApi(_0x21210d,_0x8b0301);}catch(_0x21e862){console['error'](_0x38c801(0x18d)+icons['fail']+'\x20'+c[_0x38c801(0x199)]+_0x21e862[_0x38c801(0x17e)]+c['reset']+'\x20'+c[_0x38c801(0x158)]+_0x38c801(0x174)+c[_0x38c801(0x195)]+'\x0a'),process[_0x38c801(0x172)](0x1);return;}else{await ensureDb();const {listKeys:_0xfadb56}=await import(_0x38c801(0x155));_0x11b98c=_0xfadb56(_0x8b0301);}if(!_0x11b98c||!_0x11b98c[_0x38c801(0x1a1)]||!_0x11b98c[_0x38c801(0x1a1)][_0x38c801(0x177)]){console[_0x38c801(0x184)](_0x38c801(0x18c));return;}console['log'](''),console['log']('\x20\x20'+c[_0x38c801(0x15f)]+_0x38c801(0x15d)+c[_0x38c801(0x195)]),console['log']('\x20\x20'+c['muted']+'─'[_0x38c801(0x1aa)](0x50)+c[_0x38c801(0x195)]),console[_0x38c801(0x184)]('\x20\x20'+c[_0x38c801(0x158)]+'ID'['padEnd'](0xa)+'Name'[_0x38c801(0x1ac)](0x14)+'Type'['padEnd'](0xa)+'Status'[_0x38c801(0x1ac)](0xa)+'Expires'['padEnd'](0xf)+_0x38c801(0x178)+c[_0x38c801(0x195)]),console['log']('\x20\x20'+c['muted']+'─'['repeat'](0x50)+c[_0x38c801(0x195)]);for(const _0x3082c9 of _0x11b98c['keys']){const _0x17f5c4=(_0x3082c9['id']||'')['slice'](0x0,0x8),_0x165faf=(_0x3082c9[_0x38c801(0x153)]||'')[_0x38c801(0x1ad)](0x0,0x12)['padEnd'](0x14),_0x29a6a5=(_0x3082c9['type']||'')['padEnd'](0xa),_0x1f8344=(_0x3082c9[_0x38c801(0x18b)]||'')['padEnd'](0xa),_0x2fb820=(_0x3082c9['expiry']?new Date(_0x3082c9['expiry'])[_0x38c801(0x160)]():_0x38c801(0x16a))['padEnd'](0xf),_0x58ff8e=_0x3082c9['created_at']?new Date(_0x3082c9['created_at'])['toLocaleDateString']():'-';console['log']('\x20\x20'+_0x17f5c4['padEnd'](0xa)+_0x165faf+_0x29a6a5+_0x1f8344+_0x2fb820+_0x58ff8e);}console[_0x38c801(0x184)]('\x20\x20'+c[_0x38c801(0x158)]+'─'['repeat'](0x50)+c['reset']),console[_0x38c801(0x184)]('\x20\x20'+c[_0x38c801(0x158)]+_0x38c801(0x154)+_0x11b98c[_0x38c801(0x1a1)]['length']+'\x20key(s)'+c['reset']+'\x0a');}async function revokeKeyCmd(_0x48f348){const _0x10fdc0=a0_0x4763fe,_0x5a091c=_0x48f348[0x0];if(!_0x5a091c){console[_0x10fdc0(0x199)]('\x0a\x20\x20'+icons[_0x10fdc0(0x1ae)]+'\x20'+c[_0x10fdc0(0x199)]+_0x10fdc0(0x1a4)+c['reset']+'\x0a'),console[_0x10fdc0(0x199)]('\x20\x20Usage:\x20colana\x20admin\x20revoke-key\x20<id>\x0a'),process[_0x10fdc0(0x172)](0x1);return;}const _0x177191=await findRunningServer();if(_0x177191)try{await revokeKeyViaApi(_0x177191,_0x5a091c),console['log'](_0x10fdc0(0x18d)+icons[_0x10fdc0(0x16f)]+_0x10fdc0(0x18e)+c[_0x10fdc0(0x186)]+_0x5a091c+c[_0x10fdc0(0x195)]+_0x10fdc0(0x16b));}catch(_0x4fdcc5){console['error'](_0x10fdc0(0x18d)+icons[_0x10fdc0(0x1ae)]+'\x20'+c[_0x10fdc0(0x199)]+_0x4fdcc5[_0x10fdc0(0x17e)]+c[_0x10fdc0(0x195)]+'\x20'+c['muted']+'(via\x20server)'+c[_0x10fdc0(0x195)]+'\x0a'),process['exit'](0x1);return;}else{await ensureDb();const {revokeKey:_0x3a4f01}=await import('../server/key-manager.js');try{_0x3a4f01(_0x5a091c),console[_0x10fdc0(0x184)]('\x0a\x20\x20'+icons['pass']+'\x20Key\x20'+c['value']+_0x5a091c+c[_0x10fdc0(0x195)]+_0x10fdc0(0x16b));}catch(_0x6cc669){console['error']('\x0a\x20\x20'+icons[_0x10fdc0(0x1ae)]+'\x20'+c['error']+_0x6cc669[_0x10fdc0(0x17e)]+c[_0x10fdc0(0x195)]+'\x0a'),process[_0x10fdc0(0x172)](0x1);return;}}}function showHelp(){const _0x284683=a0_0x4763fe;console[_0x284683(0x184)]('\x0a\x20\x20'+brandName()+'\x20'+c[_0x284683(0x158)]+_0x284683(0x193)+c['reset']+'\x0a\x0a\x20\x20'+c['heading']+_0x284683(0x16d)+c['reset']+_0x284683(0x171)+c[_0x284683(0x168)]+_0x284683(0x18f)+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Run\x20system\x20diagnostics\x0a\x20\x20\x20\x20'+c[_0x284683(0x168)]+_0x284683(0x17c)+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20List\x20configured\x20staff/admin\x20keys\x20(env\x20vars)\x0a\x20\x20\x20\x20'+c[_0x284683(0x168)]+'colana\x20admin\x20create-key'+c[_0x284683(0x195)]+_0x284683(0x1a2)+c[_0x284683(0x158)]+_0x284683(0x159)+c[_0x284683(0x195)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Recipient\x20name\x20(required)\x0a\x20\x20\x20\x20\x20\x20'+c['muted']+'--type\x20staff|admin|beta'+c[_0x284683(0x195)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Key\x20type\x20(default:\x20staff)\x0a\x20\x20\x20\x20\x20\x20'+c[_0x284683(0x158)]+_0x284683(0x197)+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Email\x20(optional)\x0a\x20\x20\x20\x20\x20\x20'+c['muted']+_0x284683(0x15a)+c['reset']+_0x284683(0x181)+c[_0x284683(0x168)]+_0x284683(0x1a7)+c[_0x284683(0x195)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20List\x20DB-stored\x20license\x20keys\x0a\x20\x20\x20\x20\x20\x20'+c[_0x284683(0x158)]+_0x284683(0x191)+c[_0x284683(0x195)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Filter\x20by\x20type\x0a\x20\x20\x20\x20\x20\x20'+c[_0x284683(0x158)]+'--status\x20active|revoked'+c['reset']+_0x284683(0x18a)+c['cmd']+'colana\x20admin\x20revoke-key\x20<id>'+c[_0x284683(0x195)]+_0x284683(0x173)+c[_0x284683(0x158)]+'Polar.sh\x20key\x20management:'+c['reset']+_0x284683(0x171)+c['url']+'https://dashboard.polar.sh'+c['reset']+'\x0a');}function doctor(){const _0x3b26ee=a0_0x4763fe;console['log'](_0x3b26ee(0x164));}function staffKeys(){const _0x1a1295=a0_0x4763fe,_0x35d3dd=process['env']['STAFF_KEYS']||'',_0x125796=process['env'][_0x1a1295(0x157)]||'',_0x39bd86=_0x35d3dd[_0x1a1295(0x19d)](',')['map'](_0x18f40c=>_0x18f40c[_0x1a1295(0x17b)]())[_0x1a1295(0x15c)](Boolean),_0x3fca1f=_0x125796[_0x1a1295(0x19d)](',')['map'](_0x3d6811=>_0x3d6811[_0x1a1295(0x17b)]())['filter'](Boolean);if(_0x39bd86['length']===0x0&&_0x3fca1f['length']===0x0){console[_0x1a1295(0x184)](_0x1a1295(0x192));return;}console[_0x1a1295(0x184)](''),_0x39bd86['length']>0x0&&(console[_0x1a1295(0x184)]('\x20\x20'+c['heading']+'Staff\x20Keys:'+c[_0x1a1295(0x195)]),console['log']('\x20\x20'+c['muted']+'─'['repeat'](0xa)+c['reset']),_0x39bd86['forEach']((_0x3e1027,_0x22b7c6)=>{const _0x257595=_0x1a1295;console[_0x257595(0x184)]('\x20\x20\x20\x20'+(_0x22b7c6+0x1)+'.\x20'+maskKey(_0x3e1027)+'\x20\x20(STAFF_KEYS)');}),console[_0x1a1295(0x184)]('')),_0x3fca1f['length']>0x0&&(console['log']('\x20\x20'+c[_0x1a1295(0x15f)]+_0x1a1295(0x15e)+c['reset']),console[_0x1a1295(0x184)]('\x20\x20'+c['muted']+'─'['repeat'](0xa)+c[_0x1a1295(0x195)]),_0x3fca1f['forEach']((_0x369a56,_0x355da7)=>{const _0x2fb9ee=_0x1a1295;console[_0x2fb9ee(0x184)](_0x2fb9ee(0x167)+(_0x355da7+0x1)+'.\x20'+maskKey(_0x369a56)+_0x2fb9ee(0x17a));}),console[_0x1a1295(0x184)]('')),console[_0x1a1295(0x184)]('\x20\x20To\x20add/remove\x20keys,\x20update\x20the\x20STAFF_KEYS\x20or\x20ADMIN_KEYS\x20environment\x20variable.\x0a');}export async function main(){const _0x375aa6=a0_0x4763fe,{command:_0x152e53,flags:_0x1dccc3,positional:_0x57f6df}=parseArgs(process['argv']);if(!_0x152e53||_0x152e53===_0x375aa6(0x1a8)||_0x152e53==='--help'){showHelp();return;}switch(_0x152e53){case _0x375aa6(0x17f):return doctor();case'staff-keys':return staffKeys();case _0x375aa6(0x175):return createKey(_0x1dccc3);case _0x375aa6(0x180):return listKeysCmd(_0x1dccc3);case _0x375aa6(0x19c):return revokeKeyCmd(_0x57f6df);default:console[_0x375aa6(0x199)]('\x20\x20'+icons['fail']+'\x20Unknown\x20command:\x20'+c[_0x375aa6(0x186)]+_0x152e53+c[_0x375aa6(0x195)]),console['error']('\x20\x20'+c['muted']+'Run\x20\x22colana\x20admin\x20help\x22\x20for\x20usage.'+c[_0x375aa6(0x195)]),process[_0x375aa6(0x172)](0x1);return;}}!process['env']['VITEST']&&main()['catch'](_0x23ceaa=>{const _0x5b871f=a0_0x4763fe;console[_0x5b871f(0x199)]('\x20\x20'+icons[_0x5b871f(0x1ae)]+'\x20'+c[_0x5b871f(0x199)]+(_0x23ceaa['message']||_0x23ceaa)+c[_0x5b871f(0x195)]),process[_0x5b871f(0x172)](0x1);});
|
|
3
|
+
function a0_0x823e(){const _0x5a027e=['zxHPDa','BwvZC2fNzq','s2v5igDLBMvYyxrPB24GCMv0DxjUzwqGyw4GDw5LEhbLy3rLzcbYzxnWB25Zzs4','uNvUicjJB2XHBMeGywrTAw4GAgvSCciGzM9YihvZywDLlG','zxHWAxj5','icaGicaGicaGicaGieXPC3qGy29UzMLNDxjLzcbZDgfMzI9Hzg1PBIbRzxLZicHLBNyGDMfYCYKkicaGia','lI4VC2vYDMvYl2rIlMPZ','u3rHDhvZ','y2f0y2G','y3jLyxrLzf9HDa','icaGicaGicaGicaGicbmAxn0ierclxn0B3jLzcbSAwnLBNnLigTLExmkicaGicaG','rvjst1i6ic0TBMfTzsbPCYbYzxf1AxjLzc4','DgLTzw91Da','nJuXodeYruDuuKDy','BMfTzq','zxjYB3i','mte0oda0nKPVAeTkva','zM9YrwfJAa','CgfZCW','AgvHzgLUzW','kIOQkG','mZC4otqYoxf1wLjUvW','Aw5KzxHpzG','ls10ExbLihn0ywzMFgfKBwLUFgjLDge','y29Syw5HigfKBwLUihjLDM9Rzs1RzxKGpgLKpG','y21K','icbvC2fNztOGy29Syw5HigfKBwLUihjLDM9Rzs1RzxKGpgLKpGO','rvjst1i6ieLUDMfSAwqGDhLWzsaI','zMfPBa','tMfTztO','vxnHz2u6','D2fYBG','CMvWzwf0','cIaG','tMv2zxi','mtu3nJCYnxjZugH1wa','kenYzwf0zwqGDMLHigrPCMvJDcbeqIdIGjqGCMvZDgfYDcbZzxj2zxiGDg8GCgLJAYb1CcK','ntKXmtCZzhnxuujA','icaGicaGicaGicbgAwX0zxiGyNKGC3rHDhvZcIaGica','icaGia','cIaGtM8GA2v5CYbMB3vUzc4k','s2v5oG','ntyXm25othr2zq','y29Syw5HigfKBwLUihn0ywzMlwTLExm','sfruuca','CMvZzxq','icaGica','rvjst1i6ieTLEsbjrcbPCYbYzxf1AxjLzc4','y29Syw5HigfKBwLUigXPC3qTA2v5CW','mtq2mgzgvuzKsG','mZzLCMvVt0O','ls1LBwfPBcb1C2vYqgv4yw1WBguUy29T','khzPysbZzxj2zxiP','lI4VC2vYDMvYl2TLEs1Tyw5Hz2vYlMPZ','DhLWzq','revmrvrf','CgfKrw5K','A2v5CW','Aw5JBhvKzxm','C2XPy2u','C2v0','Dg9mB2nHBgveyxrLu3rYAw5N','Bg9N','qurnsu5Fs0vzuW','C3bSAxq','BgLZDc1RzxLZ','y29Syw5HigfKBwLUignYzwf0zs1RzxK','vg90ywW6ia','icaOqurnsu5Fs0vzuYK','BwfW','vhLWztO','ywrTAw4','ls1OzwXW','ChvZAa','zw1HAwW','Bxv0zwq','Dg9tDhjPBMC','icaGicaGicaGievTywLSicHVChrPB25HBcKkicaGicaG','mtG5ntm2vePMA3nP','ANnVBG','C3rHDhvZ','Ahr0Chm6lY9KyxnOyM9HCMqUCg9SyxiUC2G','cIaGtM8GC3rHzMyGB3iGywrTAw4GA2v5CYbJB25MAwD1CMvKlIbtzxqGu1rbrKzFs0vzuYbVCIbbre1jtL9lrvLtigvUDMLYB25Tzw50ihzHCMLHyMXLlGO','CMv2B2TLlwTLEq','qwrTAw4Gq0Xj','ue9tva','cIaGica','BgvUz3rO','zMLSDgvY','DxjS','l2fWAs9Hzg1PBI9RzxLZlW'];a0_0x823e=function(){return _0x5a027e;};return a0_0x823e();}const a0_0x8d0576=a0_0x5594;(function(_0x16fe7f,_0x524fab){const _0x5e287c=a0_0x5594,_0x1986d2=_0x16fe7f();while(!![]){try{const _0xb5e395=-parseInt(_0x5e287c(0x164))/0x1+parseInt(_0x5e287c(0x14c))/0x2+-parseInt(_0x5e287c(0x169))/0x3*(-parseInt(_0x5e287c(0x170))/0x4)+parseInt(_0x5e287c(0x162))/0x5+parseInt(_0x5e287c(0x14f))/0x6+-parseInt(_0x5e287c(0x154))/0x7+parseInt(_0x5e287c(0x132))/0x8*(parseInt(_0x5e287c(0x171))/0x9);if(_0xb5e395===_0x524fab)break;else _0x1986d2['push'](_0x1986d2['shift']());}catch(_0x250562){_0x1986d2['push'](_0x1986d2['shift']());}}}(a0_0x823e,0x74a3b));import a0_0x25aaa9 from'fs';import a0_0x5f4f51 from'path';import a0_0x5eb976 from'os';import{fileURLToPath}from'url';import{c,icons,brandName}from'../server/brand.js';const __dirname=a0_0x5f4f51['dirname'](fileURLToPath(import.meta.url));function a0_0x5594(_0x17327b,_0x1e1cba){_0x17327b=_0x17327b-0x132;const _0x823ea6=a0_0x823e();let _0x5594ed=_0x823ea6[_0x17327b];if(a0_0x5594['hfAmZc']===undefined){var _0x481cdc=function(_0x1d0eee){const _0x1f7ff5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x25aaa9='',_0x5f4f51='';for(let _0x5eb976=0x0,_0x11e932,_0x43c35b,_0x5b650a=0x0;_0x43c35b=_0x1d0eee['charAt'](_0x5b650a++);~_0x43c35b&&(_0x11e932=_0x5eb976%0x4?_0x11e932*0x40+_0x43c35b:_0x43c35b,_0x5eb976++%0x4)?_0x25aaa9+=String['fromCharCode'](0xff&_0x11e932>>(-0x2*_0x5eb976&0x6)):0x0){_0x43c35b=_0x1f7ff5['indexOf'](_0x43c35b);}for(let _0x4e4f92=0x0,_0x2c7b79=_0x25aaa9['length'];_0x4e4f92<_0x2c7b79;_0x4e4f92++){_0x5f4f51+='%'+('00'+_0x25aaa9['charCodeAt'](_0x4e4f92)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5f4f51);};a0_0x5594['TRxWcb']=_0x481cdc,a0_0x5594['amioPl']={},a0_0x5594['hfAmZc']=!![];}const _0x4d061d=_0x823ea6[0x0],_0xbc8dc5=_0x17327b+_0x4d061d,_0x7e3d08=a0_0x5594['amioPl'][_0xbc8dc5];return!_0x7e3d08?(_0x5594ed=a0_0x5594['TRxWcb'](_0x5594ed),a0_0x5594['amioPl'][_0xbc8dc5]=_0x5594ed):_0x5594ed=_0x7e3d08,_0x5594ed;}function parseArgs(_0x11e932){const _0x12046b=a0_0x5594,_0x43c35b=_0x11e932[_0x12046b(0x17a)](0x2),_0x5b650a=_0x43c35b[0x0],_0x4e4f92=[],_0x2c7b79={};for(let _0x52cb9b=0x1;_0x52cb9b<_0x43c35b[_0x12046b(0x13b)];_0x52cb9b++){if(_0x43c35b[_0x52cb9b]['startsWith']('--')){let _0x485edb=_0x43c35b[_0x52cb9b][_0x12046b(0x17a)](0x2),_0x28543e;const _0xa4c62b=_0x485edb[_0x12046b(0x155)]('=');_0xa4c62b!==-0x1?(_0x28543e=_0x485edb['slice'](_0xa4c62b+0x1),_0x485edb=_0x485edb[_0x12046b(0x17a)](0x0,_0xa4c62b)):_0x28543e=_0x52cb9b+0x1<_0x43c35b['length']&&!_0x43c35b[_0x52cb9b+0x1]['startsWith']('--')?_0x43c35b[++_0x52cb9b]:'true',_0x2c7b79[_0x485edb]=_0x28543e;}else _0x4e4f92[_0x12046b(0x188)](_0x43c35b[_0x52cb9b]);}return{'command':_0x5b650a,'flags':_0x2c7b79,'positional':_0x4e4f92};}function maskKey(_0x3c6d63){const _0x462d67=a0_0x5594;if(!_0x3c6d63||_0x3c6d63['length']<=0x8)return _0x462d67(0x153);return _0x3c6d63[_0x462d67(0x17a)](0x0,0x4)+_0x462d67(0x153);}const DEFAULT_PORT=0x2694,MAX_PORT_SCAN=0x64;async function findRunningServer(){const _0x33af66=a0_0x5594;for(let _0x54276e=0x0;_0x54276e<MAX_PORT_SCAN;_0x54276e++){const _0x33182c=DEFAULT_PORT+_0x54276e;try{const _0x2a7ed0=await fetch('http://127.0.0.1:'+_0x33182c+'/api/health',{'signal':AbortSignal[_0x33af66(0x14b)](0x1f4)});if(_0x2a7ed0['ok']){const _0x5530eb=await _0x2a7ed0[_0x33af66(0x133)]();if(_0x5530eb['status']==='ok')return'http://127.0.0.1:'+_0x33182c;}}catch{}}return null;}async function createKeyViaApi(_0x4cb6b6,_0x5f30b9){const _0x516f7b=a0_0x5594,_0x4bd3a1=await fetch(_0x4cb6b6+'/api/admin/keys',{'method':_0x516f7b(0x139),'headers':{'Content-Type':'application/json'},'body':JSON['stringify'](_0x5f30b9)});if(!_0x4bd3a1['ok']){const _0x1adb9f=await _0x4bd3a1[_0x516f7b(0x133)]()['catch'](()=>({'error':'HTTP\x20'+_0x4bd3a1[_0x516f7b(0x134)]}));throw new Error(_0x1adb9f[_0x516f7b(0x14e)]||'Server\x20responded\x20with\x20'+_0x4bd3a1[_0x516f7b(0x134)]);}return _0x4bd3a1['json']();}async function listKeysViaApi(_0x29f3bb,_0x3e637e){const _0x5bc0a7=a0_0x5594,_0x2890e0=new URLSearchParams();if(_0x3e637e[_0x5bc0a7(0x175)])_0x2890e0[_0x5bc0a7(0x17b)](_0x5bc0a7(0x175),_0x3e637e[_0x5bc0a7(0x175)]);if(_0x3e637e['status'])_0x2890e0[_0x5bc0a7(0x17b)](_0x5bc0a7(0x134),_0x3e637e['status']);const _0xac1b03=_0x2890e0[_0x5bc0a7(0x18b)](),_0x1296eb=await fetch(_0x29f3bb+'/api/admin/keys'+(_0xac1b03?'?'+_0xac1b03:''));if(!_0x1296eb['ok']){const _0x4319e6=await _0x1296eb[_0x5bc0a7(0x133)]()['catch'](()=>({'error':_0x5bc0a7(0x16b)+_0x1296eb[_0x5bc0a7(0x134)]}));throw new Error(_0x4319e6['error']||'Server\x20responded\x20with\x20'+_0x1296eb['status']);}return _0x1296eb[_0x5bc0a7(0x133)]();}async function revokeKeyViaApi(_0x2ca951,_0x1691a9){const _0x4bb2fd=a0_0x5594,_0x3290a9=await fetch(_0x2ca951+_0x4bb2fd(0x13e)+_0x1691a9,{'method':_0x4bb2fd(0x176)});if(!_0x3290a9['ok']){const _0x40800f=await _0x3290a9[_0x4bb2fd(0x133)]()['catch'](()=>({'error':_0x4bb2fd(0x16b)+_0x3290a9[_0x4bb2fd(0x134)]}));throw new Error(_0x40800f[_0x4bb2fd(0x14e)]||'Server\x20responded\x20with\x20'+_0x3290a9[_0x4bb2fd(0x134)]);}return _0x3290a9[_0x4bb2fd(0x133)]();}let _dbReady=![];async function ensureDb(){const _0x1b69a=a0_0x5594;if(_dbReady)return;const {getDb:_0x32451a}=await import(_0x1b69a(0x145));await _0x32451a(),_dbReady=!![];}async function createKey(_0x2b3d3a){const _0x1d9887=a0_0x5594,_0xe7b181=_0x2b3d3a[_0x1d9887(0x14d)],_0x281001=_0x2b3d3a['type']||'staff',_0x159c46=_0x2b3d3a[_0x1d9887(0x189)]||null,_0x6ee9eb=_0x2b3d3a['expires']||null;if(!_0xe7b181){console['error'](_0x1d9887(0x160)+icons[_0x1d9887(0x15b)]+'\x20'+c['error']+_0x1d9887(0x14a)+c[_0x1d9887(0x16c)]+'\x0a'),console[_0x1d9887(0x14e)]('\x20\x20Usage:\x20colana\x20admin\x20create-key\x20--name\x20\x22Sarah\x22\x20--type\x20staff\x20[--email\x20x]\x20[--expires\x202026-12-31]\x0a'),process[_0x1d9887(0x13f)](0x1);return;}const _0x3e1ee7=[_0x1d9887(0x186),'staff','beta'];if(!_0x3e1ee7[_0x1d9887(0x179)](_0x281001)){console[_0x1d9887(0x14e)]('\x0a\x20\x20'+icons[_0x1d9887(0x15b)]+'\x20'+c['error']+_0x1d9887(0x15a)+_0x281001+'\x22.\x20Must\x20be\x20one\x20of:\x20'+_0x3e1ee7['join'](',\x20')+c[_0x1d9887(0x16c)]+'\x0a'),process['exit'](0x1);return;}const _0x44c82c=await findRunningServer();let _0x2f04da;if(_0x44c82c)try{_0x2f04da=await createKeyViaApi(_0x44c82c,{'name':_0xe7b181,'type':_0x281001,'email':_0x159c46||undefined,'expires':_0x6ee9eb||undefined});}catch(_0x385493){console['error'](_0x1d9887(0x160)+icons['fail']+'\x20'+c['error']+_0x385493[_0x1d9887(0x140)]+c[_0x1d9887(0x16c)]+'\x20'+c['muted']+_0x1d9887(0x173)+c['reset']+'\x0a'),process[_0x1d9887(0x13f)](0x1);return;}else{await ensureDb();const {generateKey:_0x4ccff4}=await import(_0x1d9887(0x174));try{_0x2f04da=_0x4ccff4(_0xe7b181,_0x281001,_0x159c46,_0x6ee9eb);}catch(_0x444320){console[_0x1d9887(0x14e)](_0x1d9887(0x160)+icons[_0x1d9887(0x15b)]+'\x20'+c[_0x1d9887(0x14e)]+_0x444320[_0x1d9887(0x140)]+c[_0x1d9887(0x16c)]+'\x0a'),process[_0x1d9887(0x13f)](0x1);return;}}if(!_0x2f04da||!_0x2f04da['name']){console['error'](_0x1d9887(0x160)+icons['fail']+'\x20'+c['error']+_0x1d9887(0x141)+c[_0x1d9887(0x16c)]+'\x0a'),process['exit'](0x1);return;}console['log'](''),console['log']('\x20\x20'+icons[_0x1d9887(0x151)]+'\x20Key\x20generated\x20successfully!'),console['log']('\x20\x20'+c['muted']+'─'[_0x1d9887(0x15f)](0x28)+c['reset']),console[_0x1d9887(0x17d)](_0x1d9887(0x166)+c[_0x1d9887(0x18a)]+_0x1d9887(0x15c)+c[_0x1d9887(0x16c)]+'\x20\x20\x20\x20'+c['value']+_0x2f04da[_0x1d9887(0x14d)]+c['reset']),console['log'](_0x1d9887(0x166)+c['muted']+_0x1d9887(0x185)+c[_0x1d9887(0x16c)]+'\x20\x20\x20\x20'+c['value']+_0x2f04da['type']+c[_0x1d9887(0x16c)]),console['log'](_0x1d9887(0x166)+c['muted']+'ID:'+c[_0x1d9887(0x16c)]+'\x20\x20\x20\x20\x20\x20'+c['value']+_0x2f04da['id']+c[_0x1d9887(0x16c)]),console[_0x1d9887(0x17d)](_0x1d9887(0x166)+c['muted']+_0x1d9887(0x168)+c[_0x1d9887(0x16c)]+_0x1d9887(0x16d)+c[_0x1d9887(0x15e)]+_0x2f04da['raw']+c['reset']),console['log']('\x20\x20'+c[_0x1d9887(0x18a)]+'─'[_0x1d9887(0x15f)](0x28)+c['reset']),console['log']('\x20\x20'+c['warn']+'IMPORTANT:\x20Copy\x20this\x20key\x20now.\x20It\x20cannot\x20be\x20retrieved\x20later.'+c['reset']),_0x44c82c?console[_0x1d9887(0x17d)]('\x20\x20'+c['muted']+'(Created\x20via\x20running\x20server)'+c['reset']):console['log']('\x20\x20'+c['muted']+_0x1d9887(0x163)+c[_0x1d9887(0x16c)]),console['log']('');}async function listKeysCmd(_0x32d45e){const _0x397f50=a0_0x5594,_0x149169={};if(_0x32d45e[_0x397f50(0x175)])_0x149169['type']=_0x32d45e[_0x397f50(0x175)];if(_0x32d45e['status'])_0x149169['status']=_0x32d45e[_0x397f50(0x134)];const _0x26093f=await findRunningServer();let _0x25e11b;if(_0x26093f)try{_0x25e11b=await listKeysViaApi(_0x26093f,_0x149169);}catch(_0x5cdf9f){console['error'](_0x397f50(0x160)+icons['fail']+'\x20'+c[_0x397f50(0x14e)]+_0x5cdf9f[_0x397f50(0x140)]+c['reset']+'\x20'+c[_0x397f50(0x18a)]+_0x397f50(0x173)+c['reset']+'\x0a'),process['exit'](0x1);return;}else{await ensureDb();const {listKeys:_0x4dd1b2}=await import(_0x397f50(0x174));_0x25e11b=_0x4dd1b2(_0x149169);}if(!_0x25e11b||!_0x25e11b[_0x397f50(0x178)]||!_0x25e11b['keys']['length']){console['log'](_0x397f50(0x167));return;}console[_0x397f50(0x17d)](''),console['log']('\x20\x20'+c[_0x397f50(0x152)]+'License\x20Keys:'+c['reset']),console['log']('\x20\x20'+c[_0x397f50(0x18a)]+'─'['repeat'](0x50)+c['reset']),console['log']('\x20\x20'+c[_0x397f50(0x18a)]+'ID'['padEnd'](0xa)+'Name'[_0x397f50(0x177)](0x14)+'Type'[_0x397f50(0x177)](0xa)+_0x397f50(0x146)['padEnd'](0xa)+'Expires'['padEnd'](0xf)+'Created'+c[_0x397f50(0x16c)]),console[_0x397f50(0x17d)]('\x20\x20'+c[_0x397f50(0x18a)]+'─'[_0x397f50(0x15f)](0x50)+c[_0x397f50(0x16c)]);for(const _0x424328 of _0x25e11b['keys']){const _0x297f9e=(_0x424328['id']||'')['slice'](0x0,0x8),_0x3d5a37=(_0x424328['name']||'')[_0x397f50(0x17a)](0x0,0x12)[_0x397f50(0x177)](0x14),_0x6add6b=(_0x424328['type']||'')[_0x397f50(0x177)](0xa),_0x371821=(_0x424328['status']||'')['padEnd'](0xa),_0x2380b2=(_0x424328['expiry']?new Date(_0x424328[_0x397f50(0x143)])[_0x397f50(0x17c)]():_0x397f50(0x161))['padEnd'](0xf),_0x613778=_0x424328[_0x397f50(0x148)]?new Date(_0x424328['created_at'])['toLocaleDateString']():'-';console[_0x397f50(0x17d)]('\x20\x20'+_0x297f9e[_0x397f50(0x177)](0xa)+_0x3d5a37+_0x6add6b+_0x371821+_0x2380b2+_0x613778);}console['log']('\x20\x20'+c[_0x397f50(0x18a)]+'─'['repeat'](0x50)+c[_0x397f50(0x16c)]),console[_0x397f50(0x17d)]('\x20\x20'+c[_0x397f50(0x18a)]+_0x397f50(0x182)+_0x25e11b['keys']['length']+'\x20key(s)'+c[_0x397f50(0x16c)]+'\x0a');}async function revokeKeyCmd(_0x5a8ade){const _0xf6f055=a0_0x5594,_0x54977f=_0x5a8ade[0x0];if(!_0x54977f){console['error']('\x0a\x20\x20'+icons[_0xf6f055(0x15b)]+'\x20'+c['error']+_0xf6f055(0x16e)+c['reset']+'\x0a'),console['error'](_0xf6f055(0x159)),process['exit'](0x1);return;}const _0xbb1e1d=await findRunningServer();if(_0xbb1e1d)try{await revokeKeyViaApi(_0xbb1e1d,_0x54977f),console['log']('\x0a\x20\x20'+icons['pass']+'\x20Key\x20'+c['value']+_0x54977f+c[_0xf6f055(0x16c)]+'\x20has\x20been\x20revoked.\x0a');}catch(_0x900aac){console['error'](_0xf6f055(0x160)+icons[_0xf6f055(0x15b)]+'\x20'+c['error']+_0x900aac[_0xf6f055(0x140)]+c['reset']+'\x20'+c[_0xf6f055(0x18a)]+_0xf6f055(0x173)+c[_0xf6f055(0x16c)]+'\x0a'),process[_0xf6f055(0x13f)](0x1);return;}else{await ensureDb();const {revokeKey:_0x24a1e7}=await import('../server/key-manager.js');try{_0x24a1e7(_0x54977f),console[_0xf6f055(0x17d)](_0xf6f055(0x160)+icons[_0xf6f055(0x151)]+'\x20Key\x20'+c['value']+_0x54977f+c['reset']+'\x20has\x20been\x20revoked.\x0a');}catch(_0x12ae9d){console['error']('\x0a\x20\x20'+icons['fail']+'\x20'+c[_0xf6f055(0x14e)]+_0x12ae9d[_0xf6f055(0x140)]+c[_0xf6f055(0x16c)]+'\x0a'),process[_0xf6f055(0x13f)](0x1);return;}}}function showHelp(){const _0x4fa0c0=a0_0x5594;console[_0x4fa0c0(0x17d)]('\x0a\x20\x20'+brandName()+'\x20'+c['muted']+_0x4fa0c0(0x138)+c[_0x4fa0c0(0x16c)]+'\x0a\x0a\x20\x20'+c[_0x4fa0c0(0x152)]+_0x4fa0c0(0x15d)+c['reset']+_0x4fa0c0(0x13a)+c[_0x4fa0c0(0x158)]+'colana\x20admin\x20doctor'+c[_0x4fa0c0(0x16c)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Run\x20system\x20diagnostics\x0a\x20\x20\x20\x20'+c['cmd']+_0x4fa0c0(0x16a)+c['reset']+_0x4fa0c0(0x144)+c[_0x4fa0c0(0x158)]+_0x4fa0c0(0x181)+c[_0x4fa0c0(0x16c)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Generate\x20a\x20new\x20license\x20key\x20(stored\x20in\x20DB)\x0a\x20\x20\x20\x20\x20\x20'+c[_0x4fa0c0(0x18a)]+'--name\x20\x22Name\x22'+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Recipient\x20name\x20(required)\x0a\x20\x20\x20\x20\x20\x20'+c['muted']+_0x4fa0c0(0x156)+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Key\x20type\x20(default:\x20staff)\x0a\x20\x20\x20\x20\x20\x20'+c[_0x4fa0c0(0x18a)]+_0x4fa0c0(0x172)+c['reset']+_0x4fa0c0(0x18c)+c[_0x4fa0c0(0x18a)]+'--expires\x202026-12-31'+c[_0x4fa0c0(0x16c)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Expiry\x20date\x20(optional)\x0a\x20\x20\x20\x20'+c[_0x4fa0c0(0x158)]+_0x4fa0c0(0x16f)+c[_0x4fa0c0(0x16c)]+_0x4fa0c0(0x149)+c['muted']+'--type\x20staff|admin|beta'+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Filter\x20by\x20type\x0a\x20\x20\x20\x20\x20\x20'+c[_0x4fa0c0(0x18a)]+'--status\x20active|revoked'+c['reset']+_0x4fa0c0(0x165)+c['cmd']+_0x4fa0c0(0x157)+c[_0x4fa0c0(0x16c)]+'\x20\x20\x20\x20\x20\x20\x20\x20Revoke\x20a\x20DB-stored\x20license\x20key\x0a\x0a\x20\x20'+c['muted']+'Polar.sh\x20key\x20management:'+c['reset']+'\x0a\x20\x20\x20\x20'+c[_0x4fa0c0(0x13d)]+_0x4fa0c0(0x135)+c['reset']+'\x0a');}function doctor(){const _0xe73cf3=a0_0x5594;console[_0xe73cf3(0x17d)]('\x0a\x20\x20Run\x20\x27colana\x20doctor\x27\x20for\x20system\x20diagnostics.\x0a');}function staffKeys(){const _0x599f3d=a0_0x5594,_0x3add24=process['env']['STAFF_KEYS']||'',_0x51a048=process['env'][_0x599f3d(0x17e)]||'',_0x1535c9=_0x3add24['split'](',')['map'](_0x1d96d5=>_0x1d96d5['trim']())['filter'](Boolean),_0x2a1d72=_0x51a048[_0x599f3d(0x17f)](',')[_0x599f3d(0x184)](_0x1e0fc3=>_0x1e0fc3['trim']())[_0x599f3d(0x13c)](Boolean);if(_0x1535c9['length']===0x0&&_0x2a1d72['length']===0x0){console['log'](_0x599f3d(0x136));return;}console['log'](''),_0x1535c9['length']>0x0&&(console[_0x599f3d(0x17d)]('\x20\x20'+c[_0x599f3d(0x152)]+'Staff\x20Keys:'+c['reset']),console[_0x599f3d(0x17d)]('\x20\x20'+c[_0x599f3d(0x18a)]+'─'[_0x599f3d(0x15f)](0xa)+c['reset']),_0x1535c9[_0x599f3d(0x150)]((_0x2795ae,_0xecc88e)=>{const _0x23c895=_0x599f3d;console[_0x23c895(0x17d)]('\x20\x20\x20\x20'+(_0xecc88e+0x1)+'.\x20'+maskKey(_0x2795ae)+'\x20\x20(STAFF_KEYS)');}),console['log']('')),_0x2a1d72[_0x599f3d(0x13b)]>0x0&&(console['log']('\x20\x20'+c[_0x599f3d(0x152)]+'Admin\x20Keys:'+c[_0x599f3d(0x16c)]),console['log']('\x20\x20'+c['muted']+'─'['repeat'](0xa)+c[_0x599f3d(0x16c)]),_0x2a1d72['forEach']((_0x4d8896,_0x247a1d)=>{const _0x2cc5d6=_0x599f3d;console[_0x2cc5d6(0x17d)](_0x2cc5d6(0x166)+(_0x247a1d+0x1)+'.\x20'+maskKey(_0x4d8896)+_0x2cc5d6(0x183));}),console[_0x599f3d(0x17d)]('')),console[_0x599f3d(0x17d)]('\x20\x20To\x20add/remove\x20keys,\x20update\x20the\x20STAFF_KEYS\x20or\x20ADMIN_KEYS\x20environment\x20variable.\x0a');}export async function main(){const _0x469670=a0_0x5594,{command:_0x530217,flags:_0x1f4dd2,positional:_0x37f874}=parseArgs(process['argv']);if(!_0x530217||_0x530217==='help'||_0x530217===_0x469670(0x187)){showHelp();return;}switch(_0x530217){case'doctor':return doctor();case'staff-keys':return staffKeys();case'create-key':return createKey(_0x1f4dd2);case _0x469670(0x180):return listKeysCmd(_0x1f4dd2);case _0x469670(0x137):return revokeKeyCmd(_0x37f874);default:console['error']('\x20\x20'+icons[_0x469670(0x15b)]+'\x20Unknown\x20command:\x20'+c['value']+_0x530217+c[_0x469670(0x16c)]),console['error']('\x20\x20'+c['muted']+_0x469670(0x142)+c['reset']),process[_0x469670(0x13f)](0x1);return;}}!process['env']['VITEST']&&main()[a0_0x8d0576(0x147)](_0xc9d3f5=>{const _0x462411=a0_0x8d0576;console['error']('\x20\x20'+icons[_0x462411(0x15b)]+'\x20'+c[_0x462411(0x14e)]+(_0xc9d3f5[_0x462411(0x140)]||_0xc9d3f5)+c['reset']),process[_0x462411(0x13f)](0x1);});
|
package/bin/colana.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
function a0_0x38d2(){const _0x207b50=['Bxv0zwq','Aw5ZDgfSBa','t3bLBKnSyxC','CNvUDgLTzq','D3jPDgu','icaGicaGicaGicbdAgvJAYbdteKGywDLBNrZigfUzcbZExn0zw0GAgvHBhrOcIaG','CgLWmYbPBNn0ywXSihv2','icbgCMvLihrPzxi6idiGy29Uy3vYCMvUDcbZzxnZAw9UCYWGywXSigzLyxr1CMvZigLUy2X1zgvKlG','AgvHzgLUzW','A2v5CW','CxvLC3rPB24','CgLWEcbPBNn0ywXSigfPzgvYlwnOyxq','ndaZntiZCfr4C0ji','t3b0Aw9UCZO','y29Syw5HigfKBwLU','ls1OzwXW','icboBYbdteKGywDLBNrZigLUC3rHBgXLzc4G','qNvPBgqGDg9VBhmGBwf5igjLig5LzwrLzc4Gqxr0zw1WDgLUzYbHDxrVBwf0AwmGAw5ZDgfSBc4UlG','z2L0','ls12zxjZAw9U','icaGicbuBYbPBNn0ywXSienVBgfUysb0AgvYzsbPBNn0zwfKoG','icboBYbdteKGywDLBNrZigzVDw5KlIbjBNn0ywXSigf0igXLyxn0ig9Uzsb0BYb1C2uG','Aw5ZDgfSBgvK','icaGifSWxsbtA2LWicH5B3uNBgWGBMvLzcb0BYbPBNn0ywXSig9UzsbTyw51ywXSEsK','Ahr0CdOVl2XVy2fSAg9ZDdO5odC2','q2XVC2uGyw5KihjLB3bLBIb5B3vYihrLCM1PBMfS','BNbT','BgvUz3rO','q2XHDwrLienVzgu','ChL0Ag9U','ifjLBw92zsbIywnRz3jVDw5KihnLCNzPy2ukica','iokaLcb3B3jRCYb3AxrOigfUEsbhB29NBguGywnJB3vUDcaOzNjLzsbVCIbWywLKkq','D2LUmZi','lNn1ChbYzxnZlwjYB3DZzxi','C3bSAwnL','igfZigeGyMfJA2DYB3vUzcbZzxj2AwnLcIaG','icaGicaGicbuywLSihnLCNzPy2uGBg9NCYaOtgLUDxGVBwfJt1mP','yMLUyxj5','icaGicbuCNK6ig5WBsbYzwj1AwXKig5VzguTChr5','CgfJA2fNzs5QC29U','igLUC3rHBgXLza','BwfQB3i','zMfSBgjHy2TezxrLy3rdBwq','icbpCgvUihLVDxiGv1nmmIb0zxjTAw5HBcbHBMqGCNvUoIbUCg0GAw5ZDgfSBcaTzYbJB2XHBMe','ntiYotGWohntuufZyW','zMfPBa','sw5ZDgfSBgLUzYbyy29KzsbdB21Tyw5KieXPBMuGvg9VBhmUlI4','yNvPBgqGDg9VBhm','4OcuihjLCxvPCMvZihyXocS','icbdAgvJA2LUzYb5B3vYigvUDMLYB25Tzw50lI4U','icbdB3vSzcbUB3qGzw5HyMXLigf1Dg8TC3rHCNq6ia','y29Syw5Hic0TC2v0DxaGls1Hz2vUDhm','igjHy2TNCM91BMqGC2vYDMLJzs4UlG','icbszw1VDMLUzYa','ls1WB3j0','C2vYDMvY','q29Syw5HigzHAwXLzcb0BYbZDgfYDdOG','Dg9ju09tDhjPBMC','tMv4DcbZDgvWCYb0BYbYzxnVBhzLoG','iokaLcb1BMTUB3DUihbYB3zPzgvY','CgfZCW','pYaO','y29Syw5HihnLCNzPy2uGAw5ZDgfSBa','ie5VzguUANmG','yxjNDG','y29Syw5H','AgfZ','icaGicbzB3uGy2fUihrYEsbSyxrLCIb3AxrOoIbJB2XHBMeGC2vYDMLJzsbPBNn0ywXS','D2fYBG','DxyGDg9VBcbPBNn0ywXSic0TChL0Ag9Uihb5DgHVBJmUmtiGywLKzxiTy2HHDa','ywrK','icaGieLUC3rHBgXPBMCG','mtiXmJq0mhjbtfjZCG','icaGifbSzwfZzsbPBNn0ywXSia','Dg9tDhjPBMC','zgfYD2LU','q29TBwfUzhm6','CgXHDgzVCM0','q29KzxGGq0Xj','sw5ZDgfSBgLUzYbwAxn1ywWGu3r1zgLViej1AwXKifrVB2XZihzPysb3Aw5NzxqUlI4','refuqv9esvi','C3rKB3v0','EgnVzguTC2vSzwn0','vxnPBMCGDxyGDg8GAw5ZDgfSBcb3AxrOifb5DgHVBIaZlJeYlI4U','y21K','q291BgqGBM90igLUC3rHBgWGDxyU','nNPnyNjlwa','D3jPDgvgAwXLu3LUyW','twLJCM9ZB2z0lLzPC3vHBfn0DwrPBY4YmdiYlKj1AwXKvg9VBhm','uNvUBMLUzZO','y29Syw5HigrVy3rVCG','icaGica','icbdB250Aw51zsb3AxrOig5HDgL2zsbxAw5KB3DZigfUExDHEt8Gw3KVtL0G','zMLUza','y29WAwXVDa','igfNzw50','zgfZAgjVyxjKlMrI','icaGicaGignVBgfUyq','DxrMltG','uhL0Ag9Uia','icaGia','q09mqu5bx1bpuLq','Ahr0Chm6lY9JB2XHBMeUywK','ic0TDMvYC2LVBG','C2vYDMLJzs1Tyw5Hz2vYlMPZ','cIaG','DMfSDwu','igLZihjLCxvPCMvKigj1DcbUB3qGzM91BMqU','zxjYB3i','ifTVChrPB25ZxsbBy29TBwfUzf0kcG','qwXSigfNzw50CYbHBhjLywr5igLUC3rHBgXLzc4','y2f0y2G','icbjBNn0ywXSigfZigf1Dg8TC3rHCNqGyMfJA2DYB3vUzcbZzxj2AwnLcIaG','BwTKAxjtEw5J','AwDUB3jL','Bg9NCW','zxHPC3rZu3LUyW','Dg9mB3DLCKnHC2u','ie5VzguUANmG4Ocuig5VDcbMB3vUza','DhjPBq','ChL0Ag9UihnLDhvWDg9VBhm','icbvCgDYywrLigfUExrPBwuGzNjVBsbtzxr0Aw5NCYbMB3iGDw5SAw1PDgvKihnLC3nPB25ZlG','zg9JDg9Y','ifnOB3CGzgv0ywLSzwqGzgLHz25VC3rPyYbPBMzVcIaG','mZeWmZeXz2rrt1zd','zxHPDa','EwvZ','quKGq0XjiefNzw50CZO','CMvZB2X2zq','iokaLcbtBwfYDcbtzxr1Ca','y2XHDwrL','lI4U','CMvSzwfZzq','Chr5t2S','Aw5OzxjPDa','C3rHDhvZ','t3bLBIb5B3vYigjYB3DZzxiGDg8','kgrLzMf1Bhq6igf1Dg8Tzgv0zwn0igzYB20GotG3nIK','icbjBNn0ywXSia','icaGicaGq2HLy2SGAwyGC2vYDMLJzsbPCYbPBNn0ywXSzwqGyw5Kihj1BM5PBMC','quKGy29KAw5NienmsxmGD29YAYbIzxn0igLUifDttdiGkeXPBNv4igvUDMLYB25Tzw50ks4','Aw5ZDgfSBenTza','ksbBEs9oxsa','AhjLzG','AM9PBG','ChjLCMvX','CMvWzwf0','D3nSic0TBgLZDcaTlxf1Awv0','C2v0Dxb0B29SCW','icaGicaGig5WBsbPBNn0ywXSic1NignVBgfUyq','z3LW','BMfTzq','ls1Hy2nLChqTCgfJA2fNzs1Hz3jLzw1LBNrZ','y29Syw5Hic0TC2v0Dxa','ieDPDa','C3vJy2vZCW','quKGy29KAw5NienmsxmGD29YAYbIzxn0igLUifDttdiUienVBNnPzgvYihj1BM5PBMCG','r2vTAw5Pienmsq','nMTRDhbqzq','y21KlMv4zsaVyYbZDgfYDcaIiIaI','y29Syw5HigrVy3rVCIaTlxzLCMjVC2u','lMzPCNn0lxj1BI1KB25L','qwDLBNrZigzVDw5K','icbdAg9VC2uGB25LihrVigLUC3rHBgW6','dsaG','icaGicbqBgvHC2uGDxbNCMfKzsboB2rLlMPZigfUzcb0CNKGywDHAw4U','teXniefqssbRzxKGCMvXDwLYzwq','icaGicbuywLSihnLCNzPy2uGBg9NCYaOtgLUDxGVBwfJt1mPcGO','ywDLBNrZ','CMvZzxq','CMvHzezPBgvtEw5J','BwLUB3i','y29KzxG','y29Syw5HihnLCNzPy2uGBg9NCW','icbjBNn0ywXSAw5Nia','igfZigeGD29YA2fYB3vUzc4','vxnHz2u6','idXPBNn0ywXSFhvUAw5ZDgfSBhXZDgf0Dxn8Bg9NCZ4','igLUC3rHBgWUlI4','y2XVC2u','BNbTigLUC3rHBgWGlwCGqgfUDgHYB3bPyY1HAs9JBgf1zguTy29Kzq','CgLWzq','w2nVoMXHBMfDie1Pz3jHDgLVBIbMywLSzwq6ia','uNvUoIa','sw5ZDgfSBgLUzYbJBZPSyw5HigDSB2jHBgX5lI4U','zMfSBgjHy2TdBwq','zgf0yq','zgv0zwn0q21K','icaGicaGicaGicbtBwfYDcbPBNn0ywXSzxiGkgf1Dg8Tzgv0zwn0icSGAw5ZDgfSBcbHz2vUDhmPcIaG','DMvYC2LVBG','otmXotCZsKvAser2','ChvZAa','y29Syw5HihnLCNzPy2uGDw5PBNn0ywXS','Aw5JBhvKzxm','v2fPDcbMB3iGDgHLigLUC3rHBgWGDg8Gy29TCgXLDguGkdiTnsbTAw51DgvZkq','lI4VC2vYDMvYl21Pz3jHDgLVBI5QCW','ifn0yxj0Aw5NigrHC2HIB2fYzc4UlG','tgLUDxGGkfDttdiP','ChL0Ag9UmW','BxnIDwLSza','idXUDw1Izxi+icaGicaGicaGvxnLihnWzwnPzMLJihbVCNqG','ChjLCMvXtMfTzq','z2vTAw5P','EgnVzguTC2vSzwn0ic0TAw5ZDgfSBa','ndC2mZeWsw9bt0r0','igzPCNn0lG','icaGicbjBNn0ywXSigfZigf1Dg8TC3rHCNqGyMfJA2DYB3vUzcbZzxj2AwnL','BgLUDxG','zw50CMLLCW','v2LUzg93CW','ywLKzxi','lMnVBgfUyq','BNbTigLUC3rHBgWGlwCGqg9Wzw5HAs9JB2rLEa','zM9YrwfJAa','w2nVoMXHBMfDifLVDxiGzgf0ysbPCYbZywzLigf0oIa','ywXS','B3bLBIaI','zw52','CgLWigLUC3rHBgWGDxy','CgLWEa','vKLurvnu','ndqWotq2mhHwy21WrW','BM9Kzs1WDhK','iokaLcbPBNn0ywXSigzHAwXLza','rxHHBxbSzxm6','BwvZC2fNzq','q29TCgXLDguGDgHLihn5C3rLBsbKAwfSB2CGDgHHDcbHChbLyxjZ','tgLUDxG','C3bSAxq','ig5VzguTChr5ia'];a0_0x38d2=function(){return _0x207b50;};return a0_0x38d2();}const a0_0x33dbd5=a0_0x27a2;(function(_0x3ac35d,_0x5bae43){const _0x3777d7=a0_0x27a2,_0x528306=_0x3ac35d();while(!![]){try{const _0x2876c0=parseInt(_0x3777d7(0x1ce))/0x1+-parseInt(_0x3777d7(0x260))/0x2*(parseInt(_0x3777d7(0x23e))/0x3)+parseInt(_0x3777d7(0x20a))/0x4+-parseInt(_0x3777d7(0x1a8))/0x5+parseInt(_0x3777d7(0x218))/0x6*(-parseInt(_0x3777d7(0x19a))/0x7)+parseInt(_0x3777d7(0x1ee))/0x8+-parseInt(_0x3777d7(0x1b9))/0x9;if(_0x2876c0===_0x5bae43)break;else _0x528306['push'](_0x528306['shift']());}catch(_0x2261ce){_0x528306['push'](_0x528306['shift']());}}}(a0_0x38d2,0x50fbb));import{execSync,execFileSync,spawn}from'child_process';import a0_0x39297c from'fs';import a0_0x351851 from'path';import a0_0x2022dc from'readline';import a0_0x401019 from'os';import{fileURLToPath,pathToFileURL}from'url';import{commandExistsSync,getCommandPath}from'../server/platform.js';import{c,icons,brandName,tagline,printBanner}from'../server/brand.js';const __dirname=a0_0x351851['dirname'](fileURLToPath(import.meta.url)),ROOT=a0_0x351851['resolve'](__dirname,'..'),DATA_DIR=process['env']['DATA_DIR']?a0_0x351851[a0_0x33dbd5(0x242)](process['env'][a0_0x33dbd5(0x212)]):a0_0x351851[a0_0x33dbd5(0x252)](a0_0x401019['homedir'](),a0_0x33dbd5(0x1af)),toImportPath=_0x446824=>process['platform']==='win32'?pathToFileURL(_0x446824)[a0_0x33dbd5(0x251)]:_0x446824,CLI_PROVIDERS=[{'name':a0_0x33dbd5(0x1de),'binary':'claude','installCmd':a0_0x33dbd5(0x190),'auth':'Requires\x20Anthropic\x20subscription\x20or\x20API\x20key','runtime':a0_0x33dbd5(0x1dc)},{'name':'Codex\x20CLI','binary':'codex','installCmd':a0_0x33dbd5(0x1b0),'auth':'Requires\x20OpenAI\x20subscription\x20or\x20API\x20key','runtime':'npm'},{'name':a0_0x33dbd5(0x25f),'binary':a0_0x33dbd5(0x1a6),'installCmd':'npm\x20install\x20-g\x20@google/gemini-cli','auth':'Free\x20or\x20paid\x20Google\x20account','runtime':a0_0x33dbd5(0x1dc),'recommended':!![]},{'name':'Copilot\x20CLI','binary':a0_0x33dbd5(0x220),'fallbackBinary':'gh','detectCmd':'copilot\x20--version','fallbackDetectCmd':'gh\x20copilot\x20--version','installCmd':'gh\x20extension\x20install\x20github/gh-copilot','prereq':'gh','prereqName':'GitHub\x20CLI','auth':'GitHub\x20Copilot\x20subscription','runtime':a0_0x33dbd5(0x1dc)},{'name':'Aider','binary':a0_0x33dbd5(0x1ae),'installCmd':a0_0x33dbd5(0x1cd),'fallbackCmd':'pip\x20install\x20aider-chat','prereq':a0_0x33dbd5(0x1a2),'prereqFallback':'python','prereqName':'Python','auth':a0_0x33dbd5(0x182),'runtime':a0_0x33dbd5(0x1b7)},{'name':a0_0x33dbd5(0x1c4),'binary':'openclaw','installCmd':'npm\x20install\x20-g\x20openclaw','auth':'User-configured\x20model\x20keys','runtime':'npm'}];function detectWindowsWsl(){const _0x3d4ad8=a0_0x33dbd5,_0x2f1001=process[_0x3d4ad8(0x20f)]==='win32';if(!_0x2f1001)return{'isNativeWindows':![],'wslAvailable':![]};let _0x2024ae=![];try{const _0x1a23cc=execSync(_0x3d4ad8(0x255),{'stdio':[_0x3d4ad8(0x191),'pipe','pipe'],'timeout':0x1388}),_0x558d88=_0x1a23cc[_0x3d4ad8(0x20c)]()['replace'](/\0/g,'')[_0x3d4ad8(0x239)]();_0x2024ae=_0x558d88[_0x3d4ad8(0x1dd)]>0x0;}catch{_0x2024ae=![];}return{'isNativeWindows':_0x2f1001,'wslAvailable':_0x2024ae};}function detectProvider(_0x5ccab8){const _0x4b424e=a0_0x33dbd5;if(_0x5ccab8['detectCmd'])try{return execSync(_0x5ccab8['detectCmd'],{'stdio':_0x4b424e(0x234)}),!![];}catch{if(_0x5ccab8[_0x4b424e(0x1ec)])try{return execSync(_0x5ccab8['fallbackDetectCmd'],{'stdio':'ignore'}),!![];}catch{}return![];}return commandExistsSync(_0x5ccab8[_0x4b424e(0x1e7)]);}function a0_0x27a2(_0x4261a7,_0x549d4b){_0x4261a7=_0x4261a7-0x181;const _0x38d296=a0_0x38d2();let _0x27a296=_0x38d296[_0x4261a7];if(a0_0x27a2['iRguMe']===undefined){var _0x166f70=function(_0xcf90d9){const _0x46dfc9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x39297c='',_0x351851='';for(let _0x2022dc=0x0,_0x401019,_0x446824,_0x2f1001=0x0;_0x446824=_0xcf90d9['charAt'](_0x2f1001++);~_0x446824&&(_0x401019=_0x2022dc%0x4?_0x401019*0x40+_0x446824:_0x446824,_0x2022dc++%0x4)?_0x39297c+=String['fromCharCode'](0xff&_0x401019>>(-0x2*_0x2022dc&0x6)):0x0){_0x446824=_0x46dfc9['indexOf'](_0x446824);}for(let _0x2024ae=0x0,_0x1a23cc=_0x39297c['length'];_0x2024ae<_0x1a23cc;_0x2024ae++){_0x351851+='%'+('00'+_0x39297c['charCodeAt'](_0x2024ae)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x351851);};a0_0x27a2['AglQqt']=_0x166f70,a0_0x27a2['NxawNO']={},a0_0x27a2['iRguMe']=!![];}const _0x1739d2=_0x38d296[0x0],_0x1b09ce=_0x4261a7+_0x1739d2,_0x397f0d=a0_0x27a2['NxawNO'][_0x1b09ce];return!_0x397f0d?(_0x27a296=a0_0x27a2['AglQqt'](_0x27a296),a0_0x27a2['NxawNO'][_0x1b09ce]=_0x27a296):_0x27a296=_0x397f0d,_0x27a296;}function detectPythonVersion(){const _0x350a10=a0_0x33dbd5;for(const _0x1d5e0f of[_0x350a10(0x1a2),'python']){try{const _0x53a41b=execFileSync(_0x1d5e0f,['--version'],{'timeout':0x1388,'encoding':_0x350a10(0x224),'stdio':[_0x350a10(0x234),_0x350a10(0x191),_0x350a10(0x234)]})['trim'](),_0x47dcd0=_0x53a41b['match'](/Python\s+(\d+)\.(\d+)/);if(_0x47dcd0)return{'major':parseInt(_0x47dcd0[0x1]),'minor':parseInt(_0x47dcd0[0x2])};}catch{}}return null;}function getCliNextSteps(_0x35392e,_0x2bfeb9=''){const _0xa76d54=a0_0x33dbd5,_0x10ed87=_0x2bfeb9['toLowerCase'](),_0x4a3ac5=process['platform'];if(_0x35392e[_0xa76d54(0x1c5)]===_0xa76d54(0x1dc)&&(_0x10ed87[_0xa76d54(0x19d)](_0xa76d54(0x258))||_0x10ed87[_0xa76d54(0x19d)](_0xa76d54(0x1a3))||_0x10ed87['includes']('native')||_0x10ed87['includes'](_0xa76d54(0x1f1)))){if(_0x4a3ac5===_0xa76d54(0x1e2))return['Open\x20PowerShell\x20as\x20Administrator\x20(right-click\x20>\x20\x22Run\x20as\x20administrator\x22)','Run:\x20'+c['cmd']+'winget\x20install\x20Microsoft.VisualStudio.2022.BuildTools\x20--override\x20\x22--add\x20Microsoft.VisualStudio.Workload.VCTools\x20--includeRecommended\x20--passive\x20--norestart\x22\x20--accept-source-agreements\x20--accept-package-agreements'+c[_0xa76d54(0x185)],_0xa76d54(0x19e),'Close\x20and\x20reopen\x20your\x20terminal',_0xa76d54(0x193)+c[_0xa76d54(0x216)]+_0x35392e['installCmd']+c['reset']];if(_0x4a3ac5===_0xa76d54(0x20d))return['Run:\x20'+c['cmd']+_0xa76d54(0x1a7)+c['reset'],_0xa76d54(0x1be),'Run:\x20'+c[_0xa76d54(0x216)]+_0x35392e[_0xa76d54(0x24f)]+c[_0xa76d54(0x185)]];return[_0xa76d54(0x193)+c[_0xa76d54(0x216)]+'sudo\x20apt\x20update\x20&&\x20sudo\x20apt\x20install\x20-y\x20build-essential\x20python3'+c[_0xa76d54(0x185)],_0xa76d54(0x193)+c[_0xa76d54(0x216)]+_0x35392e['installCmd']+c[_0xa76d54(0x185)]];}if(_0x35392e['runtime']===_0xa76d54(0x1b7)&&(_0x10ed87[_0xa76d54(0x19d)]('python')||_0x10ed87[_0xa76d54(0x19d)](_0xa76d54(0x256)))){if(_0x4a3ac5===_0xa76d54(0x1e2))return[_0xa76d54(0x193)+c['cmd']+'pip\x20install\x20uv'+c[_0xa76d54(0x185)],'Run:\x20'+c['cmd']+_0xa76d54(0x207)+c[_0xa76d54(0x185)],_0xa76d54(0x1db)];return['Run:\x20'+c['cmd']+_0xa76d54(0x1b6)+c[_0xa76d54(0x185)]+'\x20\x20\x20(or:\x20'+c[_0xa76d54(0x216)]+'brew\x20install\x20uv'+c[_0xa76d54(0x185)]+')','Run:\x20'+c['cmd']+_0xa76d54(0x207)+c['reset'],'Restart\x20your\x20terminal'];}return[_0xa76d54(0x193)+c[_0xa76d54(0x216)]+_0x35392e[_0xa76d54(0x24f)]+c[_0xa76d54(0x185)],'If\x20that\x20fails,\x20check\x20the\x20error\x20output\x20above\x20for\x20details'];}const rl=a0_0x2022dc['createInterface']({'input':process['stdin'],'output':process['stdout']}),ask=_0x9a9468=>new Promise(_0x427dee=>rl[a0_0x33dbd5(0x1cc)](_0x9a9468,_0x427dee));function print(_0x346fe9=''){const _0x59a305=a0_0x33dbd5;process[_0x59a305(0x213)][_0x59a305(0x1c6)](_0x346fe9+'\x0a');}function runInstall(_0x42b515,{quiet:quiet=![]}={}){return new Promise(_0x42b828=>{const _0x3c0fe9=a0_0x27a2,_0x472e7f=_0x42b515[_0x3c0fe9(0x1c0)]('\x20'),_0x596d3f=spawn(_0x472e7f[0x0],_0x472e7f['slice'](0x1),{'stdio':quiet?'pipe':_0x3c0fe9(0x248),'env':{...process[_0x3c0fe9(0x1b5)]},...process['platform']==='win32'&&{'shell':!![]}});_0x596d3f['on'](_0x3c0fe9(0x18f),_0x123f41=>_0x42b828(_0x123f41===0x0)),_0x596d3f['on']('error',()=>_0x42b828(![]));});}function runInstallArgs(_0x3c1ee2,_0x3504c1){return new Promise(_0x1f8e58=>{const _0x5ad51b=a0_0x27a2,_0x1a0532=spawn(_0x3c1ee2,_0x3504c1,{'stdio':_0x5ad51b(0x248),'env':{...process[_0x5ad51b(0x1b5)]}});_0x1a0532['on']('close',_0xa99a2c=>_0x1f8e58(_0xa99a2c===0x0)),_0x1a0532['on'](_0x5ad51b(0x22e),()=>_0x1f8e58(![]));});}async function tryInstallBuildTools(){const _0x2e93da=a0_0x33dbd5,_0x218eb8=process['platform'];if(_0x218eb8===_0x2e93da(0x1e2)){if(commandExistsSync('winget')){print('\x20\x20\x20\x20'+c[_0x2e93da(0x1c2)]+_0x2e93da(0x211)+c['reset']);const _0x541091=await runInstallArgs('winget',['install',_0x2e93da(0x21a),'--override','--add\x20Microsoft.VisualStudio.Workload.VCTools\x20--passive\x20--norestart','--accept-source-agreements',_0x2e93da(0x25a)]);return _0x541091;}return![];}if(_0x218eb8==='darwin'){print(_0x2e93da(0x226)+c[_0x2e93da(0x1c2)]+_0x2e93da(0x1f0)+c['reset']);const _0x5cb6ad=await runInstallArgs(_0x2e93da(0x214),['--install']);return _0x5cb6ad;}return![];}async function runDoctorChecks(_0x14466e=![]){const _0x5c7fb1=a0_0x33dbd5;print(''),print('\x20\x20'+brandName()+'\x20'+c['muted']+'Doctor'+c['reset']),print('\x20\x20'+c[_0x5c7fb1(0x1c2)]+'─'[_0x5c7fb1(0x254)](0x14)+c[_0x5c7fb1(0x185)]),print('');const _0x22355e=process[_0x5c7fb1(0x199)],_0x408f1f=parseInt(_0x22355e['slice'](0x1)),_0x5b09ee=_0x408f1f>=0x12;_0x5b09ee?print('\x20\x20'+icons[_0x5c7fb1(0x1fe)]+_0x5c7fb1(0x201)+c[_0x5c7fb1(0x22c)]+_0x22355e+c[_0x5c7fb1(0x185)]):print('\x20\x20'+icons[_0x5c7fb1(0x1ef)]+_0x5c7fb1(0x201)+c[_0x5c7fb1(0x22c)]+_0x22355e+c[_0x5c7fb1(0x185)]+'\x20'+c[_0x5c7fb1(0x22e)]+_0x5c7fb1(0x1f2)+c[_0x5c7fb1(0x185)]);let _0x5a3a95=![];try{await import(_0x5c7fb1(0x1ba)),_0x5a3a95=!![],print('\x20\x20'+icons['pass']+_0x5c7fb1(0x1c1)+c['muted']+'loaded'+c[_0x5c7fb1(0x185)]);}catch{print('\x20\x20'+icons['fail']+_0x5c7fb1(0x1c1)+c['error']+'—\x20failed\x20to\x20load'+c[_0x5c7fb1(0x185)]);}print(''),print('\x20\x20'+c[_0x5c7fb1(0x1ca)]+_0x5c7fb1(0x241)+c['reset']);const _0x18add1=[];for(const _0x1f6e97 of CLI_PROVIDERS){const _0x464187=detectProvider(_0x1f6e97),_0x26a9f3={'name':_0x1f6e97[_0x5c7fb1(0x259)],'installed':_0x464187};if(_0x14466e&&_0x464187){let _0x2c57de=_0x1f6e97['binary'];if(_0x1f6e97[_0x5c7fb1(0x197)])try{execSync(_0x1f6e97[_0x5c7fb1(0x197)],{'stdio':_0x5c7fb1(0x234)}),_0x2c57de=_0x1f6e97[_0x5c7fb1(0x197)][_0x5c7fb1(0x1c0)]('\x20')[0x0];}catch{_0x1f6e97[_0x5c7fb1(0x1ec)]&&(_0x2c57de=_0x1f6e97['fallbackDetectCmd'][_0x5c7fb1(0x1c0)]('\x20')[0x0]);}try{const _0x2b9463=execSync(_0x2c57de+_0x5c7fb1(0x229),{'stdio':[_0x5c7fb1(0x191),'pipe','pipe'],'timeout':0x1388});_0x26a9f3['version']=_0x2b9463[_0x5c7fb1(0x20c)]()['trim']()[_0x5c7fb1(0x1c0)]('\x0a')[0x0];}catch{_0x26a9f3[_0x5c7fb1(0x199)]=null;}_0x26a9f3['path']=getCommandPath(_0x2c57de);}if(_0x464187){const _0xa7a6a9=_0x14466e&&_0x26a9f3['version']?'\x20'+c[_0x5c7fb1(0x1c2)]+'('+c[_0x5c7fb1(0x22c)]+_0x26a9f3['version']+c['muted']+')'+c[_0x5c7fb1(0x185)]:'',_0x24a40e=_0x14466e&&_0x26a9f3['path']?'\x20'+c['muted']+'—\x20'+_0x26a9f3['path']+c[_0x5c7fb1(0x185)]:'';print('\x20\x20\x20\x20'+icons['pass']+'\x20'+_0x1f6e97[_0x5c7fb1(0x259)]+_0xa7a6a9+_0x24a40e);}else print(_0x5c7fb1(0x226)+icons['fail']+'\x20'+c[_0x5c7fb1(0x1c2)]+_0x1f6e97['name']+c['reset']);_0x18add1[_0x5c7fb1(0x19b)](_0x26a9f3);}print('');const _0x361dd2=_0x18add1['filter'](_0x4b0485=>_0x4b0485['installed'])['length'];return _0x361dd2>0x0?print('\x20\x20'+c['value']+_0x361dd2+'/'+_0x18add1[_0x5c7fb1(0x1dd)]+c['reset']+'\x20'+c['muted']+'CLI\x20agent(s)\x20available.'+c[_0x5c7fb1(0x185)]):print('\x20\x20'+icons['warn']+_0x5c7fb1(0x1d7)+brandName()+'.'),print(''),{'nodeOk':_0x5b09ee,'ptyOk':_0x5a3a95,'providers':_0x18add1};}async function firstRunWizard(){const _0x501f80=a0_0x33dbd5;printBanner(print);const {isNativeWindows:_0x4e401f,wslAvailable:_0x9c3943}=detectWindowsWsl();if(_0x4e401f&&_0x9c3943){print('\x20\x20'+icons['warn']+'\x20\x20You\x27re\x20running\x20on\x20native\x20Windows,\x20but\x20WSL2\x20is\x20available.'),print(_0x501f80(0x21d)+c[_0x501f80(0x1c2)]+_0x501f80(0x24e)+c[_0x501f80(0x185)]),print(_0x501f80(0x1d6)),print(''),print('\x20\x20\x20\x20\x20\x20\x20wsl\x20-d\x20Ubuntu'),print(_0x501f80(0x257)),print(_0x501f80(0x223)),print('');const _0x253f1f=await ask(_0x501f80(0x21e));_0x253f1f['toLowerCase']()!=='y'&&(print(''),print(_0x501f80(0x1ed)),print(''),rl[_0x501f80(0x18f)](),process['exit'](0x0)),print('');}print(_0x501f80(0x1f3));const _0x45955b=await runDoctorChecks(![]);!_0x45955b['nodeOk']&&(print(_0x501f80(0x181)),process['exit'](0x1));!_0x45955b[_0x501f80(0x247)]&&(print(_0x501f80(0x1e8)),process[_0x501f80(0x23f)](0x1));const _0x1da6af=[],_0x19aa67=[];for(let _0x4806fe=0x0;_0x4806fe<CLI_PROVIDERS[_0x501f80(0x1dd)];_0x4806fe++){_0x45955b['providers'][_0x4806fe][_0x501f80(0x1d8)]?_0x1da6af['push'](CLI_PROVIDERS[_0x4806fe]):_0x19aa67['push'](CLI_PROVIDERS[_0x4806fe]);}print('');if(_0x19aa67['length']>0x0&&_0x1da6af[_0x501f80(0x1dd)]>0x0){print('\x20\x20You\x20can\x20install\x20missing\x20CLIs\x20now\x20or\x20later\x20from\x20Settings.'),print('');for(const _0x1340a0 of _0x19aa67){const _0x57228a=await ask('\x20\x20Install\x20'+_0x1340a0[_0x501f80(0x259)]+_0x501f80(0x1ff)+_0x1340a0['auth']+_0x501f80(0x250));_0x57228a[_0x501f80(0x237)]()==='y'&&(await installProvider(_0x1340a0),detectProvider(_0x1340a0)&&_0x1da6af[_0x501f80(0x19b)](_0x1340a0));}}else{if(_0x1da6af[_0x501f80(0x1dd)]===0x0){print('\x20\x20'+icons[_0x501f80(0x206)]+'\x20\x20No\x20AI\x20coding\x20agents\x20found.\x20'+brandName()+'\x20requires\x20at\x20least\x20one\x20CLI\x20agent\x20to\x20run.'),print('');const _0x26645b=CLI_PROVIDERS[_0x501f80(0x21f)](_0x26bcdd=>_0x26bcdd['recommended']);if(_0x26645b){print('\x20\x20Recommended:\x20'+_0x26645b[_0x501f80(0x259)]+_0x501f80(0x1e1));const _0x2840d4=await ask('\x20\x20Install\x20'+_0x26645b[_0x501f80(0x259)]+'?\x20[Y/n]\x20');if(_0x2840d4[_0x501f80(0x237)]()!=='n'){await installProvider(_0x26645b);if(detectProvider(_0x26645b))_0x1da6af[_0x501f80(0x19b)](_0x26645b);}}if(_0x1da6af['length']===0x0){print(''),print(_0x501f80(0x265)),CLI_PROVIDERS[_0x501f80(0x1b1)]((_0x145be3,_0x54279c)=>{print('\x20\x20\x20\x20['+(_0x54279c+0x1)+']\x20'+_0x145be3['name']+'\x20('+_0x145be3['auth']+')');}),print(_0x501f80(0x1d9)),print('');const _0x432f1b=await ask('\x20\x20>\x20'),_0x1ab726=parseInt(_0x432f1b)-0x1;if(_0x1ab726>=0x0&&_0x1ab726<CLI_PROVIDERS['length']){await installProvider(CLI_PROVIDERS[_0x1ab726]);if(detectProvider(CLI_PROVIDERS[_0x1ab726]))_0x1da6af[_0x501f80(0x19b)](CLI_PROVIDERS[_0x1ab726]);}}_0x1da6af[_0x501f80(0x1dd)]===0x0&&(print(''),print('\x20\x20'+icons['warn']+_0x501f80(0x1d2)+brandName()+'\x20will\x20start\x20but\x20you\x20won\x27t\x20be\x20able\x20to\x20run\x20agents.'),print(_0x501f80(0x21d)+c['muted']+'Install\x20one\x20anytime\x20from\x20Settings\x20>\x20AI\x20CLI\x20Agents.'+c[_0x501f80(0x185)]),print(''));}}_0x1da6af['length']>0x0&&(print(''),print('\x20\x20'+icons[_0x501f80(0x1fe)]+'\x20You\x27re\x20good\x20to\x20go!\x20'+c[_0x501f80(0x22c)]+_0x1da6af['length']+c['reset']+'\x20CLI(s)\x20detected.'),print('\x20\x20\x20\x20You\x20can\x20install\x20others\x20anytime\x20from\x20Settings.'));print('');const _0x360058=await ask('\x20\x20Start\x20Colana\x20automatically\x20on\x20login?\x20[Y/n]\x20');if(_0x360058[_0x501f80(0x237)]()!=='n')try{const {installService:_0x5c0533}=await import(toImportPath(a0_0x351851['join'](ROOT,'server','service-manager.js'))),_0x5dfa01=_0x5c0533();_0x5dfa01['success']?print('\x20\x20'+icons[_0x501f80(0x1fe)]+'\x20Auto-start\x20enabled.\x20'+_0x5dfa01[_0x501f80(0x1bd)]):(print('\x20\x20'+icons[_0x501f80(0x206)]+_0x501f80(0x1f4)+_0x5dfa01[_0x501f80(0x1bd)]),print(_0x501f80(0x205)));}catch(_0x4b469f){print('\x20\x20'+icons['warn']+_0x501f80(0x1f4)+_0x4b469f['message']),print('\x20\x20\x20\x20\x20You\x20can\x20try\x20later\x20with:\x20colana\x20service\x20install');}print(''),print(_0x501f80(0x1c9)),print(_0x501f80(0x23b)),print(''),rl[_0x501f80(0x18f)]();}async function installProvider(_0x292bdf,{quiet:quiet=![]}={}){const _0x3e1dc9=a0_0x33dbd5;if(_0x292bdf[_0x3e1dc9(0x253)]&&!commandExistsSync(_0x292bdf[_0x3e1dc9(0x253)])){if(_0x292bdf['prereqFallback']&&commandExistsSync(_0x292bdf['prereqFallback']))print('\x20\x20\x20\x20Using\x20'+_0x292bdf['prereqFallback']+'\x20(fallback\x20for\x20'+_0x292bdf[_0x3e1dc9(0x253)]+')');else return!quiet&&(print(_0x3e1dc9(0x226)+(_0x292bdf[_0x3e1dc9(0x1a5)]||_0x292bdf['prereq'])+_0x3e1dc9(0x22d)),print(_0x3e1dc9(0x20b)+(_0x292bdf['prereqName']||_0x292bdf[_0x3e1dc9(0x253)])+_0x3e1dc9(0x1a9))),![];}let _0x3e186a=_0x292bdf[_0x3e1dc9(0x24f)],_0x4a329d=_0x292bdf[_0x3e1dc9(0x195)],_0x4a0751='';if(_0x292bdf[_0x3e1dc9(0x1e7)]===_0x3e1dc9(0x1ae)){const _0x165a38=detectPythonVersion();if(_0x165a38&&_0x165a38['major']>=0x3&&_0x165a38[_0x3e1dc9(0x187)]>=0xd){print('\x20\x20\x20\x20'+c['muted']+_0x3e1dc9(0x225)+_0x165a38[_0x3e1dc9(0x1eb)]+'.'+_0x165a38[_0x3e1dc9(0x187)]+'\x20detected\x20—\x20aider\x20requires\x20Python\x203.10-3.12'+c['reset']),print('\x20\x20\x20\x20'+c[_0x3e1dc9(0x1c2)]+_0x3e1dc9(0x215)+c['reset']),_0x4a0751='python\x203.13';let _0x56790c=commandExistsSync('uv');if(!_0x56790c){print('\x20\x20\x20\x20'+c[_0x3e1dc9(0x1c2)]+'Installing\x20uv\x20(universal\x20Python\x20package\x20manager)...'+c[_0x3e1dc9(0x185)]),_0x56790c=await runInstall(_0x3e1dc9(0x1b6));if(!_0x56790c)_0x56790c=await runInstall(_0x3e1dc9(0x1c8));}if(_0x56790c)_0x3e186a=_0x3e1dc9(0x207),_0x4a329d=null;else return!quiet&&(print(_0x3e1dc9(0x226)+icons[_0x3e1dc9(0x1ef)]+'\x20'+c['error']+_0x3e1dc9(0x217)+c[_0x3e1dc9(0x185)]),printNextSteps(_0x292bdf,_0x3e1dc9(0x23a))),![];}}if(!quiet)print(_0x3e1dc9(0x209)+_0x292bdf['name']+_0x3e1dc9(0x245));let _0x57a209=await runInstall(_0x3e186a,{'quiet':quiet});if(!_0x57a209&&_0x4a329d){if(!quiet)print('\x20\x20\x20\x20Trying\x20fallback:\x20'+_0x4a329d+'...');_0x57a209=await runInstall(_0x4a329d,{'quiet':quiet});}if(_0x57a209){if(!quiet)print(_0x3e1dc9(0x226)+icons['pass']+'\x20'+_0x292bdf[_0x3e1dc9(0x259)]+_0x3e1dc9(0x1ea));return!![];}else{if(_0x292bdf[_0x3e1dc9(0x1c5)]===_0x3e1dc9(0x1dc)){if(!quiet)print(_0x3e1dc9(0x226)+c[_0x3e1dc9(0x1c2)]+_0x3e1dc9(0x1d3)+c[_0x3e1dc9(0x185)]);const _0x4b4bae=await tryInstallBuildTools();if(_0x4b4bae){if(!quiet)print('\x20\x20\x20\x20'+c[_0x3e1dc9(0x1c2)]+'Retrying\x20'+_0x292bdf['name']+_0x3e1dc9(0x18e)+c[_0x3e1dc9(0x185)]);_0x57a209=await runInstall(_0x3e186a,{'quiet':quiet});}if(_0x57a209){if(!quiet)print(_0x3e1dc9(0x226)+icons['pass']+'\x20'+_0x292bdf[_0x3e1dc9(0x259)]+_0x3e1dc9(0x1ea));return!![];}_0x4a0751=_0x4a0751||_0x3e1dc9(0x1f1);}return!quiet&&(print(_0x3e1dc9(0x226)+icons['fail']+'\x20'+c[_0x3e1dc9(0x22e)]+'Installation\x20failed.'+c['reset']),printNextSteps(_0x292bdf,_0x4a0751)),![];}}function printNextSteps(_0x5dc084,_0x33a8d9=''){const _0x3a9971=a0_0x33dbd5,_0x430296=getCliNextSteps(_0x5dc084,_0x33a8d9);print(''),print('\x20\x20\x20\x20'+c['heading']+_0x3a9971(0x1fc)+c['reset']),_0x430296[_0x3a9971(0x1b1)]((_0x204806,_0x5f1059)=>{const _0x56319e=_0x3a9971;print(_0x56319e(0x226)+c['muted']+(_0x5f1059+0x1)+'.'+c[_0x56319e(0x185)]+'\x20'+_0x204806);}),print('');}async function startServer(){const _0x19f516=a0_0x33dbd5,_0x4821d=a0_0x351851['join'](ROOT,_0x19f516(0x1f9),'index.js');try{const _0x19eb1e=await import(toImportPath(_0x4821d));return _0x19eb1e;}catch(_0x34d696){console['error']('Failed\x20to\x20start\x20server:\x20'+_0x34d696[_0x19f516(0x1bd)]),process[_0x19f516(0x23f)](0x1);}}function openBrowser(_0x2629de){const _0x91c8e4=a0_0x33dbd5,_0x306841=process['platform'];try{if(_0x306841==='darwin')execSync(_0x91c8e4(0x1b4)+_0x2629de+'\x22',{'stdio':'ignore'});else{if(_0x306841==='win32')execSync('start\x20\x22\x22\x20\x22'+_0x2629de+'\x22',{'stdio':_0x91c8e4(0x234)});else try{execSync('xdg-open\x20\x22'+_0x2629de+'\x22',{'stdio':'ignore'});}catch{try{execSync(_0x91c8e4(0x261)+_0x2629de+'\x22',{'stdio':'ignore'});}catch{}}}}catch{}}export function parseSetupArgs(_0xd241db){const _0x4acfe8=a0_0x33dbd5,_0x1e1f54=_0xd241db['slice'](0x2);if(!_0x1e1f54['includes']('--setup'))return null;const _0x3207ca=new Set([_0x4acfe8(0x244),_0x4acfe8(0x188),_0x4acfe8(0x1a6),_0x4acfe8(0x220),'aider','openclaw']),_0x232756={'all':![],'agents':null};_0x1e1f54[_0x4acfe8(0x19d)]('--all')&&(_0x232756['all']=!![]);const _0x5d52b6=_0x1e1f54['indexOf']('--agents');if(_0x5d52b6!==-0x1&&_0x1e1f54[_0x5d52b6+0x1]){const _0x4f97bd=_0x1e1f54[_0x5d52b6+0x1][_0x4acfe8(0x1c0)](',')['map'](_0xc35500=>_0xc35500[_0x4acfe8(0x239)]()['toLowerCase']())['filter'](Boolean),_0x54ef9f=_0x4f97bd['filter'](_0x1a67d1=>_0x3207ca[_0x4acfe8(0x204)](_0x1a67d1));if(_0x54ef9f[_0x4acfe8(0x1dd)]>0x0)_0x232756[_0x4acfe8(0x184)]=_0x54ef9f;}return _0x232756;}export function selectRecommendedAgents(_0x34292c={}){const _0x38c8dd=a0_0x33dbd5,_0x1a8847=[_0x38c8dd(0x244),'codex',_0x38c8dd(0x1a6),_0x38c8dd(0x220),'aider','openclaw'],_0x5ece9e={'claude':_0x38c8dd(0x244),'codex':_0x38c8dd(0x188),'gemini':'gemini','copilot':'copilot','aider':_0x38c8dd(0x1ae),'openclaw':'openclaw'},_0x2cf8ea=new Set();for(const [_0x1f22da,_0x23e0eb]of Object[_0x38c8dd(0x1ac)](_0x5ece9e)){if(commandExistsSync(_0x23e0eb))_0x2cf8ea[_0x38c8dd(0x208)](_0x1f22da);}if(!_0x2cf8ea[_0x38c8dd(0x204)]('copilot')&&commandExistsSync('gh'))try{execFileSync('gh',['copilot','--version'],{'stdio':_0x38c8dd(0x191),'timeout':0x1388}),_0x2cf8ea['add'](_0x38c8dd(0x220));}catch{}if(_0x34292c[_0x38c8dd(0x1b3)])return _0x1a8847['filter'](_0x23c401=>!_0x2cf8ea['has'](_0x23c401));if(_0x34292c[_0x38c8dd(0x184)])return _0x34292c['agents']['filter'](_0x1b50ec=>!_0x2cf8ea['has'](_0x1b50ec));const _0x369912=[],_0x35ecdb=commandExistsSync('python3')||commandExistsSync(_0x38c8dd(0x1df));if(!_0x2cf8ea[_0x38c8dd(0x204)]('gemini'))_0x369912[_0x38c8dd(0x19b)]('gemini');if(!_0x2cf8ea['has']('claude'))_0x369912[_0x38c8dd(0x19b)]('claude');if(!_0x2cf8ea['has'](_0x38c8dd(0x188)))_0x369912['push']('codex');if(!_0x2cf8ea['has']('aider')&&_0x35ecdb)_0x369912[_0x38c8dd(0x19b)]('aider');return _0x369912;}export async function headlessSetup(_0x37774b){const _0x25f807=a0_0x33dbd5,_0x200ed3=await import('os');print(''),print('\x20\x20'+c['brand']+'co:lana'+c[_0x25f807(0x185)]+_0x25f807(0x243)),print('');const _0x13dcdd=_0x200ed3['platform'](),_0x1f5a03=_0x200ed3['arch'](),_0x4d7b0d=_0x200ed3[_0x25f807(0x246)](),_0x17006e=_0x13dcdd===_0x25f807(0x1ab)&&_0x4d7b0d[_0x25f807(0x237)]()[_0x25f807(0x19d)]('microsoft'),_0x3ba13d=_0x13dcdd===_0x25f807(0x20d)?'macOS':_0x13dcdd===_0x25f807(0x1e2)?_0x25f807(0x1ad):_0x17006e?_0x25f807(0x1a1):_0x25f807(0x1bf);print('\x20\x20'+icons['pass']+'\x20'+_0x3ba13d+'\x20('+_0x1f5a03+')');try{const _0x99e6b4=execFileSync('node',['-v'],{'stdio':_0x25f807(0x191),'timeout':0x1388})[_0x25f807(0x20c)]()[_0x25f807(0x239)]();print('\x20\x20'+icons[_0x25f807(0x1fe)]+_0x25f807(0x201)+_0x99e6b4);}catch{print('\x20\x20'+icons['fail']+_0x25f807(0x238));}const _0x4410f1=commandExistsSync('python3')||commandExistsSync(_0x25f807(0x1df));if(_0x4410f1)try{const _0x6e918a=commandExistsSync(_0x25f807(0x1a2))?'python3':'python',_0x1d7ca6=execFileSync(_0x6e918a,[_0x25f807(0x1d5)],{'stdio':_0x25f807(0x191),'timeout':0x1388})[_0x25f807(0x20c)]()['trim']();print('\x20\x20'+icons['pass']+'\x20'+_0x1d7ca6);}catch{print('\x20\x20'+icons['pass']+'\x20Python\x203');}if(commandExistsSync('git'))try{const _0x2eae79=execFileSync(_0x25f807(0x1d4),['--version'],{'stdio':'pipe','timeout':0x1388})[_0x25f807(0x20c)]()[_0x25f807(0x239)]();print('\x20\x20'+icons[_0x25f807(0x1fe)]+'\x20'+_0x2eae79);}catch{print('\x20\x20'+icons[_0x25f807(0x1fe)]+_0x25f807(0x25c));}print('');const _0x514336={'claude':'Claude\x20Code','codex':_0x25f807(0x210),'gemini':'Gemini\x20CLI','copilot':'Copilot\x20CLI','aider':'Aider','openclaw':'OpenClaw'},_0x366d63=[];for(const _0x4de887 of Object[_0x25f807(0x1cb)](_0x514336)){if(commandExistsSync(_0x4de887))_0x366d63['push'](_0x4de887);}if(!_0x366d63['includes']('copilot')&&commandExistsSync('gh'))try{execFileSync('gh',['copilot',_0x25f807(0x1d5)],{'stdio':'pipe','timeout':0x1388}),_0x366d63[_0x25f807(0x19b)](_0x25f807(0x220));}catch{}if(_0x366d63['length']>0x0){print('\x20\x20'+c['muted']+_0x25f807(0x264)+c[_0x25f807(0x185)]);for(const _0x5469e1 of _0x366d63)print('\x20\x20'+icons[_0x25f807(0x1fe)]+'\x20'+_0x514336[_0x5469e1]);print('');}const _0x2f8cc4=selectRecommendedAgents(_0x37774b);if(_0x2f8cc4[_0x25f807(0x1dd)]===0x0)print('\x20\x20'+c[_0x25f807(0x25d)]+_0x25f807(0x230)+c[_0x25f807(0x185)]),print('');else{print('\x20\x20'+c['muted']+'Installing\x20agents...'+c['reset']);for(const _0x519d68 of _0x2f8cc4){const _0x249f8d=_0x514336[_0x519d68]||_0x519d68,_0x2f316e=CLI_PROVIDERS[_0x25f807(0x21f)](_0x354316=>_0x354316['binary']===_0x519d68);if(!_0x2f316e){print('\x20\x20'+icons[_0x25f807(0x1ef)]+'\x20'+_0x249f8d+_0x25f807(0x1fd));continue;}process['stdout']['write']('\x20\x20'+icons['dot']+'\x20'+_0x249f8d+'...');const _0x331637=await installProvider(_0x2f316e,{'quiet':!![]});_0x331637?process[_0x25f807(0x213)][_0x25f807(0x1c6)](_0x25f807(0x266)+icons[_0x25f807(0x1fe)]+'\x20'+_0x249f8d+'\x20'[_0x25f807(0x254)](0x14)+'\x0a'):process[_0x25f807(0x213)][_0x25f807(0x1c6)](_0x25f807(0x266)+icons[_0x25f807(0x1ef)]+'\x20'+_0x249f8d+_0x25f807(0x1bb)+'\x20'[_0x25f807(0x254)](0xa)+'\x0a');}print('');}if(!commandExistsSync(_0x25f807(0x203))){print('\x20\x20'+c['muted']+_0x25f807(0x194)+c['reset']);try{execFileSync('npm',[_0x25f807(0x1c3),'-g','colana'],{'stdio':_0x25f807(0x191),'timeout':0x1d4c0}),print('\x20\x20'+icons['pass']+'\x20colana\x20installed\x20globally');}catch(_0x10094c){print('\x20\x20'+icons[_0x25f807(0x1ef)]+'\x20Failed\x20to\x20install\x20globally:\x20'+_0x10094c['message']),print('\x20\x20'+c['muted']+'Run\x20manually:\x20npm\x20install\x20-g\x20colana'+c['reset']);}print('');}if(!a0_0x39297c[_0x25f807(0x236)](DATA_DIR))a0_0x39297c['mkdirSync'](DATA_DIR,{'recursive':!![]});const _0x527784=a0_0x351851['join'](DATA_DIR,'.first-run-done');if(!a0_0x39297c['existsSync'](_0x527784))a0_0x39297c[_0x25f807(0x219)](_0x527784,new Date()[_0x25f807(0x1fb)]());const _0x1fad30=_0x366d63[_0x25f807(0x1dd)]+_0x2f8cc4['length'];print('\x20\x20'+c['success']+_0x1fad30+_0x25f807(0x221)+(_0x1fad30!==0x1?'s':'')+'\x20ready.'+c['reset']+_0x25f807(0x1a0)),print('');}export async function main(){const _0x843068=a0_0x33dbd5;if((process[_0x843068(0x202)]['includes']('--version')||process['argv']['includes']('-v'))&&!process['argv']['includes'](_0x843068(0x1d1))&&!process[_0x843068(0x202)]['includes']('-h')&&process['argv'][0x2]!==_0x843068(0x23c)){try{const _0x2ca08b=JSON['parse'](a0_0x39297c[_0x843068(0x186)](a0_0x351851[_0x843068(0x252)](ROOT,'package.json'),_0x843068(0x224)));print(brandName()+'\x20'+c['muted']+'v'+_0x2ca08b['version']+c['reset']);}catch{print(brandName()+'\x20'+c[_0x843068(0x1c2)]+'v0.0.0'+c['reset']);}process[_0x843068(0x23f)](0x0);}if(process['argv']['includes']('--help')||process[_0x843068(0x202)]['includes']('-h')){const _0x1a57c8=JSON['parse'](a0_0x39297c[_0x843068(0x186)](a0_0x351851[_0x843068(0x252)](ROOT,_0x843068(0x1e9)),_0x843068(0x224)));print('\x0a'+c['heading']+_0x843068(0x18c)+c['reset']+'\x20'+c['cmd']+'colana'+c[_0x843068(0x185)]+_0x843068(0x22f)+c[_0x843068(0x1ca)]+'Commands:'+c['reset']+_0x843068(0x22b)+c['cmd']+_0x843068(0x203)+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Launch\x20the\x20'+brandName()+'\x20dashboard\x0a\x20\x20'+c['cmd']+_0x843068(0x21c)+c[_0x843068(0x185)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Run\x20diagnostic\x20checks\x0a\x20\x20'+c['cmd']+_0x843068(0x1d0)+c[_0x843068(0x185)]+'\x20<cmd>\x20\x20\x20\x20\x20\x20Admin\x20CLI\x20(create-key,\x20revoke-key,\x20list-keys,\x20key-info)\x0a\x20\x20'+c['cmd']+_0x843068(0x25b)+c['reset']+_0x843068(0x198)+c[_0x843068(0x216)]+'colana\x20--setup\x20--all'+c[_0x843068(0x185)]+'\x20\x20\x20\x20Install\x20all\x206\x20agents\x0a\x20\x20'+c['cmd']+_0x843068(0x1f5)+c['reset']+'\x20\x20Install\x20specific\x20agents\x20(comma-separated)\x0a\x20\x20'+c['cmd']+_0x843068(0x200)+c['reset']+_0x843068(0x232)+c['cmd']+_0x843068(0x19c)+c[_0x843068(0x185)]+_0x843068(0x1e0)+c[_0x843068(0x216)]+'colana\x20service\x20status'+c['reset']+'\x20\x20\x20Check\x20if\x20service\x20is\x20installed\x20and\x20running\x0a\x20\x20'+c[_0x843068(0x216)]+_0x843068(0x189)+c['reset']+_0x843068(0x183)+c['heading']+_0x843068(0x1cf)+c['reset']+'\x0a\x20\x20'+c[_0x843068(0x216)]+'--version'+c['reset']+',\x20'+c[_0x843068(0x216)]+'-v'+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Show\x20version\x20number\x0a\x20\x20'+c['cmd']+'--help'+c['reset']+',\x20'+c[_0x843068(0x216)]+'-h'+c[_0x843068(0x185)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help\x20message\x0a\x20\x20'+c['cmd']+_0x843068(0x1f8)+c[_0x843068(0x185)]+_0x843068(0x1a4)+c[_0x843068(0x1c2)]+_0x843068(0x24b)+c[_0x843068(0x185)]+'\x0a\x0a'+c[_0x843068(0x1ca)]+_0x843068(0x1bc)+c[_0x843068(0x185)]+_0x843068(0x22b)+c['muted']+'$'+c['reset']+'\x20'+c[_0x843068(0x216)]+'colana'+c[_0x843068(0x185)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Start\x20the\x20dashboard\x0a\x20\x20'+c['muted']+'$'+c['reset']+'\x20'+c['cmd']+'colana\x20doctor'+c[_0x843068(0x185)]+_0x843068(0x1c7)+c[_0x843068(0x1c2)]+'$'+c['reset']+'\x20'+c[_0x843068(0x216)]+_0x843068(0x262)+c[_0x843068(0x185)]+_0x843068(0x23d)+c[_0x843068(0x1c2)]+'$'+c['reset']+'\x20'+c[_0x843068(0x216)]+_0x843068(0x200)+c[_0x843068(0x185)]+_0x843068(0x24c)+brandName()+_0x843068(0x1e5)+c[_0x843068(0x1c2)]+'$'+c['reset']+'\x20'+c['cmd']+'colana\x20admin\x20list-keys'+c[_0x843068(0x185)]+'\x20\x20List\x20all\x20license\x20keys\x0a\x0a'+c[_0x843068(0x1c2)]+'v'+_0x1a57c8[_0x843068(0x199)]+c['reset']+'\x20'+c['muted']+'—'+c[_0x843068(0x185)]+'\x20'+c['url']+_0x843068(0x228)+c[_0x843068(0x185)]+'\x0a'),process[_0x843068(0x23f)](0x0);}if(process['argv'][0x2]===_0x843068(0x23c)){const _0x485944=process['argv'][_0x843068(0x19d)]('--verbose')||process['argv']['includes']('-v'),{isNativeWindows:_0x53e9f0,wslAvailable:_0x3d9228}=detectWindowsWsl();_0x53e9f0&&_0x3d9228&&(print(''),print('\x20\x20'+icons['warn']+'\x20\x20Native\x20Windows\x20detected\x20with\x20WSL2\x20available.'),print(_0x843068(0x21d)+c['muted']+_0x843068(0x25e)+brandName()+'\x20there\x20instead.'+c[_0x843068(0x185)]),print('')),await runDoctorChecks(_0x485944),process['exit'](0x0);}if(process[_0x843068(0x202)][0x2]==='admin'){const _0xc4a861=a0_0x351851['join'](__dirname,'admin.js');process['argv'][_0x843068(0x1e4)](0x2,0x1),await import(toImportPath(_0xc4a861));return;}if(process['argv'][0x2]==='service'){const {installService:_0x1232a0,uninstallService:_0x5b3ad9,getServiceStatus:_0x2b189b,getServiceLogs:_0x49e624}=await import(toImportPath(a0_0x351851[_0x843068(0x252)](ROOT,_0x843068(0x1f9),_0x843068(0x22a)))),_0xb54875=process[_0x843068(0x202)][0x3];switch(_0xb54875){case'install':{print(''),print(_0x843068(0x18a)+brandName()+'\x20as\x20a\x20background\x20service...'),print('');const _0x530451=_0x1232a0();print(_0x530451[_0x843068(0x25d)]?'\x20\x20'+icons['pass']+'\x20'+_0x530451['message']:'\x20\x20'+icons[_0x843068(0x1ef)]+'\x20'+_0x530451[_0x843068(0x1bd)]),print('');_0x530451['success']&&(print('\x20\x20'+brandName()+'\x20will\x20now\x20auto-start\x20on\x20login.'),print('\x20\x20'+c[_0x843068(0x1c2)]+_0x843068(0x24a)+c['reset']+'\x20'+c['url']+_0x843068(0x1da)+c[_0x843068(0x185)]));print('');break;}case'uninstall':{print(''),print(_0x843068(0x1f7)+brandName()+_0x843068(0x1f6));const _0x7b6e16=_0x5b3ad9();print(_0x7b6e16['success']?'\x20\x20'+icons[_0x843068(0x1fe)]+'\x20'+_0x7b6e16['message']:'\x20\x20'+icons[_0x843068(0x1ef)]+'\x20'+_0x7b6e16[_0x843068(0x1bd)]),print('');break;}case _0x843068(0x249):{print('');const _0x2bb122=_0x2b189b();print('\x20\x20'+c['muted']+'Platform:'+c['reset']+'\x20\x20'+c['value']+_0x2bb122['platform']+c[_0x843068(0x185)]),print('\x20\x20'+c['muted']+'Installed:'+c['reset']+'\x20'+(_0x2bb122['installed']?c['success']+'yes'+c['reset']:c[_0x843068(0x1c2)]+'no'+c[_0x843068(0x185)])),print('\x20\x20'+c[_0x843068(0x1c2)]+_0x843068(0x21b)+c[_0x843068(0x185)]+'\x20\x20\x20'+(_0x2bb122['running']?c['success']+_0x843068(0x240)+c[_0x843068(0x185)]:c['muted']+'no'+c['reset'])),print('');break;}case _0x843068(0x235):{const _0xe80022=_0x49e624();print(_0xe80022);break;}default:print(''),print('\x20\x20'+c['heading']+'Usage:'+c['reset']+'\x20'+c[_0x843068(0x216)]+'colana\x20service'+c[_0x843068(0x185)]+_0x843068(0x18d)),print(''),print('\x20\x20'+c[_0x843068(0x1ca)]+_0x843068(0x20e)+c['reset']),print('\x20\x20\x20\x20'+c['cmd']+_0x843068(0x1c3)+c['reset']+_0x843068(0x1aa)),print('\x20\x20\x20\x20'+c['cmd']+'uninstall'+c[_0x843068(0x185)]+'\x20\x20\x20Remove\x20background\x20service'),print(_0x843068(0x226)+c[_0x843068(0x216)]+_0x843068(0x249)+c['reset']+_0x843068(0x24d)),print('\x20\x20\x20\x20'+c['cmd']+_0x843068(0x235)+c[_0x843068(0x185)]+_0x843068(0x1e6)),print('');}process[_0x843068(0x23f)](0x0);}const _0xcc363d=parseSetupArgs(process['argv']);_0xcc363d&&await headlessSetup(_0xcc363d);const _0x5f01cb=a0_0x351851['join'](ROOT,_0x843068(0x196));if((!a0_0x39297c[_0x843068(0x236)](DATA_DIR)||!a0_0x39297c['existsSync'](a0_0x351851['join'](DATA_DIR,'dashboard.db')))&&a0_0x39297c['existsSync'](_0x5f01cb)&&a0_0x39297c['existsSync'](a0_0x351851['join'](_0x5f01cb,_0x843068(0x222))))try{const {migrateData:_0x5a6edf}=await import(_0x843068(0x19f));await _0x5a6edf(_0x5f01cb,DATA_DIR);}catch(_0x3cdca9){console[_0x843068(0x22e)](_0x843068(0x192)+_0x3cdca9[_0x843068(0x1bd)]),console['error'](_0x843068(0x1b2)+_0x5f01cb),console['error']('[co:lana]\x20Set\x20DATA_DIR='+_0x5f01cb+_0x843068(0x18b));}!a0_0x39297c[_0x843068(0x236)](DATA_DIR)&&a0_0x39297c[_0x843068(0x233)](DATA_DIR,{'recursive':!![]});const _0x504241=a0_0x351851[_0x843068(0x252)](DATA_DIR,_0x843068(0x263)),_0x4c7e56=!a0_0x39297c[_0x843068(0x236)](_0x504241);_0x4c7e56&&(await firstRunWizard(),a0_0x39297c[_0x843068(0x219)](_0x504241,new Date()[_0x843068(0x1fb)]()));print('\x20\x20'+icons['arrow']+'\x20Starting\x20'+brandName()+'...'),await startServer();const _0x3ce29d=a0_0x351851[_0x843068(0x252)](DATA_DIR,_0x843068(0x1e3));if(a0_0x39297c['existsSync'](_0x3ce29d))try{a0_0x39297c['unlinkSync'](_0x3ce29d);}catch{}else setTimeout(()=>{const _0x268ae6=_0x843068,_0xf0500d=process['env'][_0x268ae6(0x227)]||0x2694,_0x3094e3='http://localhost:'+_0xf0500d;openBrowser(_0x3094e3);},0xbb8);}!process[a0_0x33dbd5(0x1b5)][a0_0x33dbd5(0x1b8)]&&main()[a0_0x33dbd5(0x231)](_0x4ee1e1=>{const _0x3a37db=a0_0x33dbd5;console['error'](_0x3a37db(0x1fa)+_0x4ee1e1[_0x3a37db(0x1bd)]),process[_0x3a37db(0x23f)](0x1);});
|
|
3
|
+
const a0_0x329f33=a0_0x2b49;(function(_0x411ab8,_0x2b8fe4){const _0x48cd59=a0_0x2b49,_0x3c3a5c=_0x411ab8();while(!![]){try{const _0x5408d5=-parseInt(_0x48cd59(0x107))/0x1+parseInt(_0x48cd59(0x108))/0x2+-parseInt(_0x48cd59(0x115))/0x3+-parseInt(_0x48cd59(0x1f6))/0x4+parseInt(_0x48cd59(0x199))/0x5+parseInt(_0x48cd59(0x118))/0x6+-parseInt(_0x48cd59(0x1a4))/0x7*(-parseInt(_0x48cd59(0x198))/0x8);if(_0x5408d5===_0x2b8fe4)break;else _0x3c3a5c['push'](_0x3c3a5c['shift']());}catch(_0x239d1a){_0x3c3a5c['push'](_0x3c3a5c['shift']());}}}(a0_0x1c08,0x7f8fc));import{execSync,execFileSync,spawn,spawnSync}from'child_process';import a0_0x3cca97 from'fs';import a0_0x5b695a from'path';import a0_0x549c85 from'readline';import a0_0x5d2f56 from'os';import{fileURLToPath,pathToFileURL}from'url';import{commandExistsSync,getCommandPath}from'../server/platform.js';import{c,icons,brandName,tagline,printBanner}from'../server/brand.js';const __dirname=a0_0x5b695a[a0_0x329f33(0x193)](fileURLToPath(import.meta.url)),ROOT=a0_0x5b695a[a0_0x329f33(0x1d6)](__dirname,'..'),DATA_DIR=process[a0_0x329f33(0x1bd)][a0_0x329f33(0x120)]?a0_0x5b695a[a0_0x329f33(0x1d6)](process['env'][a0_0x329f33(0x120)]):a0_0x5b695a['join'](a0_0x5d2f56[a0_0x329f33(0x10c)](),'.colana'),toImportPath=_0x13235f=>process[a0_0x329f33(0x1f1)]==='win32'?pathToFileURL(_0x13235f)['href']:_0x13235f,CLI_PROVIDERS=[{'name':a0_0x329f33(0x1c4),'binary':'claude','installCmd':a0_0x329f33(0x144),'auth':a0_0x329f33(0x194),'runtime':'npm'},{'name':a0_0x329f33(0x167),'binary':'codex','installCmd':'npm\x20install\x20-g\x20@openai/codex','auth':'Requires\x20OpenAI\x20subscription\x20or\x20API\x20key','runtime':a0_0x329f33(0x187)},{'name':'Gemini\x20CLI','binary':'gemini','installCmd':'npm\x20install\x20-g\x20@google/gemini-cli','auth':a0_0x329f33(0x147),'runtime':'npm','recommended':!![]},{'name':'Copilot\x20CLI','binary':'copilot','fallbackBinary':'gh','detectCmd':a0_0x329f33(0x140),'fallbackDetectCmd':'gh\x20copilot\x20--version','installCmd':'gh\x20extension\x20install\x20github/gh-copilot','prereq':'gh','prereqName':a0_0x329f33(0x196),'auth':a0_0x329f33(0x1d1),'runtime':'npm'},{'name':'Aider','binary':a0_0x329f33(0x1da),'installCmd':a0_0x329f33(0x11e),'fallbackCmd':a0_0x329f33(0x12a),'prereq':a0_0x329f33(0x1fc),'prereqFallback':'python','prereqName':'Python','auth':'LLM\x20API\x20key\x20required','runtime':a0_0x329f33(0x1d5)},{'name':'OpenClaw','binary':'openclaw','installCmd':a0_0x329f33(0x188),'auth':a0_0x329f33(0x131),'runtime':'npm'}];function detectWindowsWsl(){const _0x2c419d=a0_0x329f33,_0x4fb4a6=process['platform']==='win32';if(!_0x4fb4a6)return{'isNativeWindows':![],'wslAvailable':![]};let _0x21c2c2=![];try{const _0x4d8633=execSync(_0x2c419d(0x12c),{'stdio':['pipe',_0x2c419d(0x1bf),'pipe'],'timeout':0x1388}),_0x5f40f3=_0x4d8633['toString']()['replace'](/\0/g,'')['trim']();_0x21c2c2=_0x5f40f3[_0x2c419d(0x1f2)]>0x0;}catch{_0x21c2c2=![];}return{'isNativeWindows':_0x4fb4a6,'wslAvailable':_0x21c2c2};}function detectProvider(_0x42df61){const _0x207ac4=a0_0x329f33;if(_0x42df61[_0x207ac4(0x161)])try{return execSync(_0x42df61[_0x207ac4(0x161)],{'stdio':_0x207ac4(0x142)}),!![];}catch{if(_0x42df61[_0x207ac4(0x17e)])try{return execSync(_0x42df61[_0x207ac4(0x17e)],{'stdio':'ignore'}),!![];}catch{}return![];}return commandExistsSync(_0x42df61[_0x207ac4(0x1ee)]);}function detectPythonVersion(){const _0x160550=a0_0x329f33;for(const _0x2eacce of[_0x160550(0x1fc),_0x160550(0x125)]){try{const _0x59a747=execFileSync(_0x2eacce,[_0x160550(0x1ce)],{'timeout':0x1388,'encoding':_0x160550(0x136),'stdio':['ignore','pipe','ignore']})['trim'](),_0x4a2208=_0x59a747[_0x160550(0x159)](/Python\s+(\d+)\.(\d+)/);if(_0x4a2208)return{'major':parseInt(_0x4a2208[0x1]),'minor':parseInt(_0x4a2208[0x2])};}catch{}}return null;}function a0_0x2b49(_0x2a76da,_0xa423d5){_0x2a76da=_0x2a76da-0x106;const _0x1c0839=a0_0x1c08();let _0x2b49db=_0x1c0839[_0x2a76da];if(a0_0x2b49['baobeU']===undefined){var _0x5a1bd5=function(_0x5ecf5e){const _0x534529='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3cca97='',_0x5b695a='';for(let _0x549c85=0x0,_0x5d2f56,_0x13235f,_0x4fb4a6=0x0;_0x13235f=_0x5ecf5e['charAt'](_0x4fb4a6++);~_0x13235f&&(_0x5d2f56=_0x549c85%0x4?_0x5d2f56*0x40+_0x13235f:_0x13235f,_0x549c85++%0x4)?_0x3cca97+=String['fromCharCode'](0xff&_0x5d2f56>>(-0x2*_0x549c85&0x6)):0x0){_0x13235f=_0x534529['indexOf'](_0x13235f);}for(let _0x21c2c2=0x0,_0x4d8633=_0x3cca97['length'];_0x21c2c2<_0x4d8633;_0x21c2c2++){_0x5b695a+='%'+('00'+_0x3cca97['charCodeAt'](_0x21c2c2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5b695a);};a0_0x2b49['yRwxmm']=_0x5a1bd5,a0_0x2b49['ALrjOv']={},a0_0x2b49['baobeU']=!![];}const _0x2629e3=_0x1c0839[0x0],_0x2d410a=_0x2a76da+_0x2629e3,_0x3b3134=a0_0x2b49['ALrjOv'][_0x2d410a];return!_0x3b3134?(_0x2b49db=a0_0x2b49['yRwxmm'](_0x2b49db),a0_0x2b49['ALrjOv'][_0x2d410a]=_0x2b49db):_0x2b49db=_0x3b3134,_0x2b49db;}function getCliNextSteps(_0x561edf,_0x55fb9a=''){const _0x199164=a0_0x329f33,_0x2789d3=_0x55fb9a[_0x199164(0x11a)](),_0x78190d=process[_0x199164(0x1f1)];if(_0x561edf[_0x199164(0x15d)]==='npm'&&(_0x2789d3['includes'](_0x199164(0x1ab))||_0x2789d3[_0x199164(0x19a)](_0x199164(0x166))||_0x2789d3[_0x199164(0x19a)](_0x199164(0x189))||_0x2789d3['includes'](_0x199164(0x14b)))){if(_0x78190d==='win32')return[_0x199164(0x1cf),'Run:\x20'+c['cmd']+_0x199164(0x1ae)+c['reset'],'Wait\x20for\x20the\x20install\x20to\x20complete\x20(2-5\x20minutes)','Close\x20and\x20reopen\x20your\x20terminal','Run:\x20'+c['cmd']+_0x561edf[_0x199164(0x113)]+c[_0x199164(0x1e3)]];if(_0x78190d===_0x199164(0x109))return[_0x199164(0x1e2)+c['cmd']+_0x199164(0x180)+c['reset'],'Complete\x20the\x20system\x20dialog\x20that\x20appears',_0x199164(0x1e2)+c[_0x199164(0x14c)]+_0x561edf['installCmd']+c['reset']];return[_0x199164(0x1e2)+c['cmd']+'sudo\x20apt\x20update\x20&&\x20sudo\x20apt\x20install\x20-y\x20build-essential\x20python3'+c[_0x199164(0x1e3)],'Run:\x20'+c['cmd']+_0x561edf['installCmd']+c['reset']];}if(_0x561edf['runtime']===_0x199164(0x1d5)&&(_0x2789d3['includes'](_0x199164(0x125))||_0x2789d3['includes']('setuptools'))){if(_0x78190d===_0x199164(0x139))return['Run:\x20'+c[_0x199164(0x14c)]+_0x199164(0x1e9)+c[_0x199164(0x1e3)],'Run:\x20'+c[_0x199164(0x14c)]+_0x199164(0x1ec)+c['reset'],_0x199164(0x13b)];return['Run:\x20'+c['cmd']+_0x199164(0x1e9)+c[_0x199164(0x1e3)]+'\x20\x20\x20(or:\x20'+c[_0x199164(0x14c)]+_0x199164(0x106)+c['reset']+')','Run:\x20'+c['cmd']+_0x199164(0x1ec)+c[_0x199164(0x1e3)],'Restart\x20your\x20terminal'];}return[_0x199164(0x1e2)+c['cmd']+_0x561edf[_0x199164(0x113)]+c[_0x199164(0x1e3)],'If\x20that\x20fails,\x20check\x20the\x20error\x20output\x20above\x20for\x20details'];}const rl=a0_0x549c85['createInterface']({'input':process['stdin'],'output':process[a0_0x329f33(0x162)]}),ask=_0xabf0fb=>new Promise(_0x1b68f4=>rl[a0_0x329f33(0x1ea)](_0xabf0fb,_0x1b68f4));function print(_0x35b1dd=''){const _0x1a334a=a0_0x329f33;process['stdout'][_0x1a334a(0x17b)](_0x35b1dd+'\x0a');}function runInstall(_0x45e0c0,{quiet:quiet=![]}={}){return new Promise(_0x2b3d37=>{const _0x299b73=a0_0x2b49,_0x116eb9=_0x45e0c0['split']('\x20'),_0x3c8506=spawn(_0x116eb9[0x0],_0x116eb9[_0x299b73(0x148)](0x1),{'stdio':quiet?'pipe':'inherit','env':{...process['env']},...process[_0x299b73(0x1f1)]==='win32'&&{'shell':!![]}});_0x3c8506['on'](_0x299b73(0x156),_0xba5883=>_0x2b3d37(_0xba5883===0x0)),_0x3c8506['on'](_0x299b73(0x134),()=>_0x2b3d37(![]));});}function runInstallArgs(_0x3b5ef0,_0x5a0914){return new Promise(_0x3c5953=>{const _0x147a7f=a0_0x2b49,_0x4f04d6=spawn(_0x3b5ef0,_0x5a0914,{'stdio':'inherit','env':{...process[_0x147a7f(0x1bd)]}});_0x4f04d6['on']('close',_0x34a793=>_0x3c5953(_0x34a793===0x0)),_0x4f04d6['on']('error',()=>_0x3c5953(![]));});}async function tryInstallBuildTools(){const _0x23c66e=a0_0x329f33,_0x135586=process[_0x23c66e(0x1f1)];if(_0x135586==='win32'){if(commandExistsSync('winget')){print('\x20\x20\x20\x20'+c['muted']+'Installing\x20Visual\x20Studio\x20Build\x20Tools\x20via\x20winget...'+c['reset']);const _0x3b1c62=await runInstallArgs(_0x23c66e(0x12d),[_0x23c66e(0x163),_0x23c66e(0x1a8),'--override',_0x23c66e(0x1f4),'--accept-source-agreements',_0x23c66e(0x178)]);return _0x3b1c62;}return![];}if(_0x135586==='darwin'){print('\x20\x20\x20\x20'+c['muted']+_0x23c66e(0x1b7)+c[_0x23c66e(0x1e3)]);const _0x24b672=await runInstallArgs(_0x23c66e(0x15a),[_0x23c66e(0x1ef)]);return _0x24b672;}return![];}async function runDoctorChecks(_0x28b408=![]){const _0x4a9361=a0_0x329f33;print(''),print('\x20\x20'+brandName()+'\x20'+c['muted']+'Doctor'+c['reset']),print('\x20\x20'+c[_0x4a9361(0x160)]+'─'['repeat'](0x14)+c[_0x4a9361(0x1e3)]),print('');const _0x2951b4=process[_0x4a9361(0x14e)],_0x4d5506=parseInt(_0x2951b4['slice'](0x1)),_0x14ca05=_0x4d5506>=0x14;_0x14ca05?print('\x20\x20'+icons[_0x4a9361(0x13a)]+'\x20Node.js\x20'+c['value']+_0x2951b4+c[_0x4a9361(0x1e3)]):print('\x20\x20'+icons['fail']+_0x4a9361(0x1c6)+c[_0x4a9361(0x1c1)]+_0x2951b4+c['reset']+'\x20'+c['error']+_0x4a9361(0x149)+c['reset']);let _0xc3c048=![];try{await import(_0x4a9361(0x13e)),_0xc3c048=!![],print('\x20\x20'+icons[_0x4a9361(0x13a)]+_0x4a9361(0x206)+c[_0x4a9361(0x160)]+'loaded'+c[_0x4a9361(0x1e3)]);}catch{print('\x20\x20'+icons[_0x4a9361(0x17a)]+'\x20node-pty\x20'+c[_0x4a9361(0x134)]+_0x4a9361(0x153)+c['reset']);}print(''),print('\x20\x20'+c['heading']+'AI\x20CLI\x20Agents:'+c[_0x4a9361(0x1e3)]);const _0x478c84=[];for(const _0x4eaabc of CLI_PROVIDERS){const _0xdd092e=detectProvider(_0x4eaabc),_0x59762d={'name':_0x4eaabc[_0x4a9361(0x1b6)],'installed':_0xdd092e};if(_0x28b408&&_0xdd092e){let _0x38961e=_0x4eaabc['binary'];if(_0x4eaabc[_0x4a9361(0x161)])try{execSync(_0x4eaabc[_0x4a9361(0x161)],{'stdio':'ignore'}),_0x38961e=_0x4eaabc[_0x4a9361(0x161)][_0x4a9361(0x16d)]('\x20')[0x0];}catch{_0x4eaabc['fallbackDetectCmd']&&(_0x38961e=_0x4eaabc['fallbackDetectCmd'][_0x4a9361(0x16d)]('\x20')[0x0]);}try{const _0x44e7f2=execSync(_0x38961e+'\x20--version',{'stdio':['pipe','pipe',_0x4a9361(0x1bf)],'timeout':0x1388});_0x59762d['version']=_0x44e7f2[_0x4a9361(0x203)]()[_0x4a9361(0x1a6)]()['split']('\x0a')[0x0];}catch{_0x59762d['version']=null;}_0x59762d[_0x4a9361(0x111)]=getCommandPath(_0x38961e);}if(_0xdd092e){const _0x4f8a83=_0x28b408&&_0x59762d[_0x4a9361(0x14e)]?'\x20'+c['muted']+'('+c[_0x4a9361(0x1c1)]+_0x59762d[_0x4a9361(0x14e)]+c['muted']+')'+c['reset']:'',_0x237fe1=_0x28b408&&_0x59762d['path']?'\x20'+c[_0x4a9361(0x160)]+'—\x20'+_0x59762d['path']+c[_0x4a9361(0x1e3)]:'';print(_0x4a9361(0x123)+icons['pass']+'\x20'+_0x4eaabc['name']+_0x4f8a83+_0x237fe1);}else print('\x20\x20\x20\x20'+icons['fail']+'\x20'+c['muted']+_0x4eaabc['name']+c[_0x4a9361(0x1e3)]);_0x478c84['push'](_0x59762d);}print('');const _0x525df9=_0x478c84[_0x4a9361(0x146)](_0x4305a0=>_0x4305a0['installed'])['length'];return _0x525df9>0x0?print('\x20\x20'+c['value']+_0x525df9+'/'+_0x478c84[_0x4a9361(0x1f2)]+c[_0x4a9361(0x1e3)]+'\x20'+c[_0x4a9361(0x160)]+'CLI\x20agent(s)\x20available.'+c[_0x4a9361(0x1e3)]):print('\x20\x20'+icons[_0x4a9361(0x1f5)]+'\x20\x20No\x20CLI\x20agents\x20found.\x20Install\x20at\x20least\x20one\x20to\x20use\x20'+brandName()+'.'),print(''),{'nodeOk':_0x14ca05,'ptyOk':_0xc3c048,'providers':_0x478c84};}async function firstRunWizard(){const _0x325100=a0_0x329f33;printBanner(print);const {isNativeWindows:_0x558892,wslAvailable:_0x3b04e8}=detectWindowsWsl();if(_0x558892&&_0x3b04e8){print('\x20\x20'+icons[_0x325100(0x1f5)]+'\x20\x20You\x27re\x20running\x20on\x20native\x20Windows,\x20but\x20WSL2\x20is\x20available.'),print(_0x325100(0x1e1)+c['muted']+_0x325100(0x1eb)+c['reset']),print(_0x325100(0x11b)),print(''),print('\x20\x20\x20\x20\x20\x20\x20wsl\x20-d\x20Ubuntu'),print(_0x325100(0x16f)),print('\x20\x20\x20\x20\x20\x20\x20colana'),print('');const _0x200012=await ask(_0x325100(0x12b));_0x200012['toLowerCase']()!=='y'&&(print(''),print(_0x325100(0x1f8)),print(''),rl[_0x325100(0x156)](),process[_0x325100(0x1aa)](0x0)),print('');}print(_0x325100(0x1d0));const _0x86b197=await runDoctorChecks(![]);!_0x86b197['nodeOk']&&(print('\x20\x20\x20\x20\x20Please\x20upgrade\x20Node.js\x20and\x20try\x20again.'),process['exit'](0x1));!_0x86b197['ptyOk']&&(print(_0x325100(0x1b2)),process[_0x325100(0x1aa)](0x1));const _0x1906d4=[],_0x2dd02c=[];for(let _0x312e1c=0x0;_0x312e1c<CLI_PROVIDERS[_0x325100(0x1f2)];_0x312e1c++){_0x86b197['providers'][_0x312e1c][_0x325100(0x1dd)]?_0x1906d4[_0x325100(0x1ca)](CLI_PROVIDERS[_0x312e1c]):_0x2dd02c['push'](CLI_PROVIDERS[_0x312e1c]);}print('');if(_0x2dd02c['length']>0x0&&_0x1906d4[_0x325100(0x1f2)]>0x0){print('\x20\x20You\x20can\x20install\x20missing\x20CLIs\x20now\x20or\x20later\x20from\x20Settings.'),print('');for(const _0x18c3d8 of _0x2dd02c){const _0x2817d3=await ask(_0x325100(0x1c2)+_0x18c3d8['name']+'?\x20('+_0x18c3d8['auth']+')\x20[y/N]\x20');_0x2817d3['toLowerCase']()==='y'&&(await installProvider(_0x18c3d8),detectProvider(_0x18c3d8)&&_0x1906d4['push'](_0x18c3d8));}}else{if(_0x1906d4['length']===0x0){print('\x20\x20'+icons['warn']+_0x325100(0x1fd)+brandName()+_0x325100(0x1d9)),print('');const _0x217996=CLI_PROVIDERS['find'](_0xd26dfa=>_0xd26dfa['recommended']);if(_0x217996){print(_0x325100(0x182)+_0x217996['name']+'\x20—\x20works\x20with\x20any\x20Google\x20account\x20(free\x20or\x20paid)');const _0x5437e2=await ask('\x20\x20Install\x20'+_0x217996['name']+'?\x20[Y/n]\x20');if(_0x5437e2[_0x325100(0x11a)]()!=='n'){await installProvider(_0x217996);if(detectProvider(_0x217996))_0x1906d4['push'](_0x217996);}}if(_0x1906d4['length']===0x0){print(''),print('\x20\x20Choose\x20one\x20to\x20install:'),CLI_PROVIDERS[_0x325100(0x183)]((_0x30d16b,_0xd490a7)=>{const _0x3f8e1c=_0x325100;print(_0x3f8e1c(0x11f)+(_0xd490a7+0x1)+']\x20'+_0x30d16b['name']+'\x20('+_0x30d16b['auth']+')');}),print(_0x325100(0x173)),print('');const _0x4b685a=await ask(_0x325100(0x130)),_0x22d061=parseInt(_0x4b685a)-0x1;if(_0x22d061>=0x0&&_0x22d061<CLI_PROVIDERS['length']){await installProvider(CLI_PROVIDERS[_0x22d061]);if(detectProvider(CLI_PROVIDERS[_0x22d061]))_0x1906d4[_0x325100(0x1ca)](CLI_PROVIDERS[_0x22d061]);}}_0x1906d4['length']===0x0&&(print(''),print('\x20\x20'+icons[_0x325100(0x1f5)]+_0x325100(0x1a5)+brandName()+'\x20will\x20start\x20but\x20you\x20won\x27t\x20be\x20able\x20to\x20run\x20agents.'),print('\x20\x20\x20\x20\x20'+c['muted']+'Install\x20one\x20anytime\x20from\x20Settings\x20>\x20AI\x20CLI\x20Agents.'+c[_0x325100(0x1e3)]),print(''));}}_0x1906d4['length']>0x0&&(print(''),print('\x20\x20'+icons[_0x325100(0x13a)]+'\x20You\x27re\x20good\x20to\x20go!\x20'+c[_0x325100(0x1c1)]+_0x1906d4['length']+c['reset']+'\x20CLI(s)\x20detected.'),print(_0x325100(0x190)));print('');const _0x5e0eee=await ask(_0x325100(0x129));if(_0x5e0eee['toLowerCase']()!=='n')try{const {installService:_0x224f11}=await import(toImportPath(a0_0x5b695a['join'](ROOT,_0x325100(0x1db),'service-manager.js'))),_0x4729ca=_0x224f11();_0x4729ca[_0x325100(0x112)]?print('\x20\x20'+icons[_0x325100(0x13a)]+'\x20Auto-start\x20enabled.\x20'+_0x4729ca['message']):(print('\x20\x20'+icons['warn']+_0x325100(0x18e)+_0x4729ca[_0x325100(0x14a)]),print(_0x325100(0x1c9)));}catch(_0x50ddad){print('\x20\x20'+icons[_0x325100(0x1f5)]+'\x20\x20Could\x20not\x20enable\x20auto-start:\x20'+_0x50ddad['message']),print(_0x325100(0x1c9));}print(''),print('\x20\x20Free\x20tier:\x202\x20concurrent\x20sessions,\x20all\x20features\x20included.'),print(_0x325100(0x17c)),print(''),rl[_0x325100(0x156)]();}async function installProvider(_0x3a4c21,{quiet:quiet=![]}={}){const _0xa75438=a0_0x329f33;if(_0x3a4c21['prereq']&&!commandExistsSync(_0x3a4c21[_0xa75438(0x1f9)])){if(_0x3a4c21[_0xa75438(0x1df)]&&commandExistsSync(_0x3a4c21[_0xa75438(0x1df)]))print('\x20\x20\x20\x20Using\x20'+_0x3a4c21['prereqFallback']+_0xa75438(0x170)+_0x3a4c21['prereq']+')');else return!quiet&&(print('\x20\x20\x20\x20'+(_0x3a4c21[_0xa75438(0x16a)]||_0x3a4c21['prereq'])+_0xa75438(0x1a0)),print('\x20\x20\x20\x20Please\x20install\x20'+(_0x3a4c21[_0xa75438(0x16a)]||_0x3a4c21[_0xa75438(0x1f9)])+_0xa75438(0x1bc))),![];}let _0x685d3b=_0x3a4c21['installCmd'],_0x236f4f=_0x3a4c21['fallbackCmd'],_0x5bf2b4='';if(_0x3a4c21[_0xa75438(0x1ee)]===_0xa75438(0x1da)){const _0x222907=detectPythonVersion();if(_0x222907&&_0x222907[_0xa75438(0x10f)]>=0x3&&_0x222907['minor']>=0xd){print(_0xa75438(0x123)+c[_0xa75438(0x160)]+'Python\x20'+_0x222907[_0xa75438(0x10f)]+'.'+_0x222907['minor']+'\x20detected\x20—\x20aider\x20requires\x20Python\x203.10-3.12'+c[_0xa75438(0x1e3)]),print(_0xa75438(0x123)+c['muted']+_0xa75438(0x184)+c['reset']),_0x5bf2b4=_0xa75438(0x116);let _0x5801e3=commandExistsSync('uv');if(!_0x5801e3){print(_0xa75438(0x123)+c['muted']+_0xa75438(0x1d8)+c['reset']),_0x5801e3=await runInstall('pip\x20install\x20uv');if(!_0x5801e3)_0x5801e3=await runInstall('pip3\x20install\x20uv');}if(_0x5801e3)_0x685d3b=_0xa75438(0x1ec),_0x236f4f=null;else return!quiet&&(print(_0xa75438(0x123)+icons['fail']+'\x20'+c['error']+'Could\x20not\x20install\x20uv.'+c['reset']),printNextSteps(_0x3a4c21,'python\x20setuptools')),![];}}if(!quiet)print('\x20\x20\x20\x20Installing\x20'+_0x3a4c21['name']+'...');let _0x3a63cf=await runInstall(_0x685d3b,{'quiet':quiet});if(!_0x3a63cf&&_0x236f4f){if(!quiet)print('\x20\x20\x20\x20Trying\x20fallback:\x20'+_0x236f4f+'...');_0x3a63cf=await runInstall(_0x236f4f,{'quiet':quiet});}if(_0x3a63cf){if(!quiet)print(_0xa75438(0x123)+icons['pass']+'\x20'+_0x3a4c21[_0xa75438(0x1b6)]+_0xa75438(0x1fe));return!![];}else{if(_0x3a4c21[_0xa75438(0x15d)]==='npm'){if(!quiet)print('\x20\x20\x20\x20'+c[_0xa75438(0x160)]+_0xa75438(0x17f)+c['reset']);const _0x2787ea=await tryInstallBuildTools();if(_0x2787ea){if(!quiet)print(_0xa75438(0x123)+c[_0xa75438(0x160)]+'Retrying\x20'+_0x3a4c21['name']+'\x20install...'+c[_0xa75438(0x1e3)]);_0x3a63cf=await runInstall(_0x685d3b,{'quiet':quiet});}if(_0x3a63cf){if(!quiet)print('\x20\x20\x20\x20'+icons['pass']+'\x20'+_0x3a4c21[_0xa75438(0x1b6)]+_0xa75438(0x1fe));return!![];}_0x5bf2b4=_0x5bf2b4||'build\x20tools';}return!quiet&&(print(_0xa75438(0x123)+icons[_0xa75438(0x17a)]+'\x20'+c[_0xa75438(0x134)]+_0xa75438(0x204)+c['reset']),printNextSteps(_0x3a4c21,_0x5bf2b4)),![];}}function printNextSteps(_0x2258ab,_0x5c841a=''){const _0x35a2ed=a0_0x329f33,_0x5acc75=getCliNextSteps(_0x2258ab,_0x5c841a);print(''),print(_0x35a2ed(0x123)+c['heading']+'Next\x20steps\x20to\x20resolve:'+c['reset']),_0x5acc75['forEach']((_0x8e8ed4,_0x33191c)=>{const _0x4fa6f9=_0x35a2ed;print(_0x4fa6f9(0x123)+c[_0x4fa6f9(0x160)]+(_0x33191c+0x1)+'.'+c[_0x4fa6f9(0x1e3)]+'\x20'+_0x8e8ed4);}),print('');}async function startServer(){const _0x5525bd=a0_0x329f33,_0x1374de=a0_0x5b695a['join'](ROOT,_0x5525bd(0x1db),_0x5525bd(0x1b4));try{const _0x213232=await import(toImportPath(_0x1374de));return _0x213232;}catch(_0x290375){console[_0x5525bd(0x134)]('Failed\x20to\x20start\x20server:\x20'+_0x290375['message']),process['exit'](0x1);}}function openBrowser(_0x338533){const _0x50aa3a=a0_0x329f33,_0x32ed49=process['platform'];try{if(_0x32ed49==='darwin')execSync(_0x50aa3a(0x19b)+_0x338533+'\x22',{'stdio':_0x50aa3a(0x142)});else{if(_0x32ed49===_0x50aa3a(0x139))execSync('start\x20\x22\x22\x20\x22'+_0x338533+'\x22',{'stdio':_0x50aa3a(0x142)});else try{execSync(_0x50aa3a(0x179)+_0x338533+'\x22',{'stdio':_0x50aa3a(0x142)});}catch{try{execSync('cmd.exe\x20/c\x20start\x20\x22\x22\x20\x22'+_0x338533+'\x22',{'stdio':_0x50aa3a(0x142)});}catch{}}}}catch{}}export function parseSetupArgs(_0x4e2559){const _0x5e4248=a0_0x329f33,_0x33f515=_0x4e2559['slice'](0x2);if(!_0x33f515[_0x5e4248(0x19a)](_0x5e4248(0x117)))return null;const _0x42e535=new Set([_0x5e4248(0x1ac),'codex',_0x5e4248(0x1e0),_0x5e4248(0x12f),_0x5e4248(0x1da),'openclaw']),_0x4894e0={'all':![],'agents':null};_0x33f515['includes'](_0x5e4248(0x1e6))&&(_0x4894e0[_0x5e4248(0x11c)]=!![]);const _0x99980d=_0x33f515['indexOf'](_0x5e4248(0x12e));if(_0x99980d!==-0x1&&_0x33f515[_0x99980d+0x1]){const _0x307c08=_0x33f515[_0x99980d+0x1][_0x5e4248(0x16d)](',')[_0x5e4248(0x114)](_0x27b77d=>_0x27b77d['trim']()['toLowerCase']())[_0x5e4248(0x146)](Boolean),_0x32399a=_0x307c08[_0x5e4248(0x146)](_0x308a8d=>_0x42e535[_0x5e4248(0x1e7)](_0x308a8d));if(_0x32399a['length']>0x0)_0x4894e0[_0x5e4248(0x110)]=_0x32399a;}return _0x4894e0;}export function selectRecommendedAgents(_0xdb6851={}){const _0x312b5b=a0_0x329f33,_0x4b172b=['claude',_0x312b5b(0x138),'gemini',_0x312b5b(0x12f),'aider','openclaw'],_0x53bc80={'claude':'claude','codex':'codex','gemini':'gemini','copilot':_0x312b5b(0x12f),'aider':_0x312b5b(0x1da),'openclaw':_0x312b5b(0x16c)},_0x3d9ad2=new Set();for(const [_0x2f2547,_0x524df7]of Object[_0x312b5b(0x177)](_0x53bc80)){if(commandExistsSync(_0x524df7))_0x3d9ad2[_0x312b5b(0x19f)](_0x2f2547);}if(!_0x3d9ad2['has'](_0x312b5b(0x12f))&&commandExistsSync('gh'))try{execFileSync('gh',[_0x312b5b(0x12f),'--version'],{'stdio':'pipe','timeout':0x1388}),_0x3d9ad2['add'](_0x312b5b(0x12f));}catch{}if(_0xdb6851[_0x312b5b(0x11c)])return _0x4b172b[_0x312b5b(0x146)](_0x23946e=>!_0x3d9ad2[_0x312b5b(0x1e7)](_0x23946e));if(_0xdb6851['agents'])return _0xdb6851[_0x312b5b(0x110)][_0x312b5b(0x146)](_0x2da2ac=>!_0x3d9ad2['has'](_0x2da2ac));const _0x4e4254=[],_0x574b37=commandExistsSync('python3')||commandExistsSync(_0x312b5b(0x125));if(!_0x3d9ad2['has']('gemini'))_0x4e4254[_0x312b5b(0x1ca)]('gemini');if(!_0x3d9ad2['has'](_0x312b5b(0x1ac)))_0x4e4254[_0x312b5b(0x1ca)](_0x312b5b(0x1ac));if(!_0x3d9ad2['has'](_0x312b5b(0x138)))_0x4e4254[_0x312b5b(0x1ca)]('codex');if(!_0x3d9ad2['has']('aider')&&_0x574b37)_0x4e4254['push']('aider');return _0x4e4254;}export async function headlessSetup(_0x523d23){const _0x46be97=a0_0x329f33,_0x4e2100=await import('os');print(''),print('\x20\x20'+c[_0x46be97(0x1fa)]+_0x46be97(0x18b)+c[_0x46be97(0x1e3)]+_0x46be97(0x14f)),print('');const _0x15c1ed=_0x4e2100['platform'](),_0x44a037=_0x4e2100['arch'](),_0x105e33=_0x4e2100['release'](),_0x307de6=_0x15c1ed==='linux'&&_0x105e33['toLowerCase']()['includes']('microsoft'),_0x143a9f=_0x15c1ed==='darwin'?_0x46be97(0x176):_0x15c1ed===_0x46be97(0x139)?_0x46be97(0x175):_0x307de6?'Linux\x20(WSL2)':_0x46be97(0x135);print('\x20\x20'+icons[_0x46be97(0x13a)]+'\x20'+_0x143a9f+'\x20('+_0x44a037+')');try{const _0x1d6d1a=execFileSync(_0x46be97(0x171),['-v'],{'stdio':_0x46be97(0x1bf),'timeout':0x1388})[_0x46be97(0x203)]()['trim']();print('\x20\x20'+icons['pass']+_0x46be97(0x1c6)+_0x1d6d1a);}catch{print('\x20\x20'+icons[_0x46be97(0x17a)]+_0x46be97(0x127));}const _0x2938de=commandExistsSync(_0x46be97(0x1fc))||commandExistsSync('python');if(_0x2938de)try{const _0x2b37c1=commandExistsSync(_0x46be97(0x1fc))?'python3':'python',_0x27f9dc=execFileSync(_0x2b37c1,[_0x46be97(0x1ce)],{'stdio':_0x46be97(0x1bf),'timeout':0x1388})[_0x46be97(0x203)]()['trim']();print('\x20\x20'+icons[_0x46be97(0x13a)]+'\x20'+_0x27f9dc);}catch{print('\x20\x20'+icons[_0x46be97(0x13a)]+'\x20Python\x203');}if(commandExistsSync(_0x46be97(0x1f7)))try{const _0x19275b=execFileSync(_0x46be97(0x1f7),['--version'],{'stdio':_0x46be97(0x1bf),'timeout':0x1388})['toString']()[_0x46be97(0x1a6)]();print('\x20\x20'+icons['pass']+'\x20'+_0x19275b);}catch{print('\x20\x20'+icons[_0x46be97(0x13a)]+'\x20Git');}print('');const _0x499e66={'claude':_0x46be97(0x1c4),'codex':_0x46be97(0x167),'gemini':_0x46be97(0x1cd),'copilot':'Copilot\x20CLI','aider':'Aider','openclaw':_0x46be97(0x152)},_0x518f6b=[];for(const _0x3d13fd of Object['keys'](_0x499e66)){if(commandExistsSync(_0x3d13fd))_0x518f6b['push'](_0x3d13fd);}if(!_0x518f6b[_0x46be97(0x19a)]('copilot')&&commandExistsSync('gh'))try{execFileSync('gh',[_0x46be97(0x12f),'--version'],{'stdio':_0x46be97(0x1bf),'timeout':0x1388}),_0x518f6b['push']('copilot');}catch{}if(_0x518f6b['length']>0x0){print('\x20\x20'+c[_0x46be97(0x160)]+'Agents\x20found'+c[_0x46be97(0x1e3)]);for(const _0x5e1306 of _0x518f6b)print('\x20\x20'+icons[_0x46be97(0x13a)]+'\x20'+_0x499e66[_0x5e1306]);print('');}const _0x40d995=selectRecommendedAgents(_0x523d23);if(_0x40d995['length']===0x0)print('\x20\x20'+c[_0x46be97(0x112)]+'All\x20agents\x20already\x20installed.'+c['reset']),print('');else{print('\x20\x20'+c[_0x46be97(0x160)]+'Installing\x20agents...'+c[_0x46be97(0x1e3)]);for(const _0x248e16 of _0x40d995){const _0x5d1d48=_0x499e66[_0x248e16]||_0x248e16,_0x2a83a3=CLI_PROVIDERS['find'](_0x499885=>_0x499885['binary']===_0x248e16);if(!_0x2a83a3){print('\x20\x20'+icons[_0x46be97(0x17a)]+'\x20'+_0x5d1d48+'\x20—\x20unknown\x20provider');continue;}process['stdout'][_0x46be97(0x17b)]('\x20\x20'+icons['dot']+'\x20'+_0x5d1d48+'...');const _0x486e26=await installProvider(_0x2a83a3,{'quiet':!![]});_0x486e26?process[_0x46be97(0x162)]['write']('\x0d\x20\x20'+icons[_0x46be97(0x13a)]+'\x20'+_0x5d1d48+'\x20'['repeat'](0x14)+'\x0a'):process[_0x46be97(0x162)][_0x46be97(0x17b)](_0x46be97(0x1c5)+icons['fail']+'\x20'+_0x5d1d48+_0x46be97(0x154)+'\x20'[_0x46be97(0x19e)](0xa)+'\x0a');}print('');}if(!commandExistsSync('colana')){print('\x20\x20'+c[_0x46be97(0x160)]+'Installing\x20co:lana\x20globally...'+c['reset']);try{execFileSync(_0x46be97(0x187),['install','-g',_0x46be97(0x1b1)],{'stdio':'pipe','timeout':0x1d4c0}),print('\x20\x20'+icons[_0x46be97(0x13a)]+'\x20colana\x20installed\x20globally');}catch(_0x2d50cb){print('\x20\x20'+icons['fail']+_0x46be97(0x1a7)+_0x2d50cb[_0x46be97(0x14a)]),print('\x20\x20'+c['muted']+'Run\x20manually:\x20npm\x20install\x20-g\x20colana'+c[_0x46be97(0x1e3)]);}print('');}if(!a0_0x3cca97['existsSync'](DATA_DIR))a0_0x3cca97[_0x46be97(0x11d)](DATA_DIR,{'recursive':!![]});const _0x196d3c=a0_0x5b695a[_0x46be97(0x1d2)](DATA_DIR,_0x46be97(0x1de));if(!a0_0x3cca97['existsSync'](_0x196d3c))a0_0x3cca97['writeFileSync'](_0x196d3c,new Date()['toISOString']());const _0x413a23=_0x518f6b['length']+_0x40d995['length'];print('\x20\x20'+c['success']+_0x413a23+_0x46be97(0x181)+(_0x413a23!==0x1?'s':'')+'\x20ready.'+c[_0x46be97(0x1e3)]+'\x20Starting\x20dashboard...'),print('');}const EXIT_CODE_UPDATE=0x4b,EXIT_CODE_RESPAWN=0x4c,BACKOFF_CAP_MS=0x7530,BACKOFF_RESET_AFTER_MS=0xea60,INTENT_TTL_MS=0x3c*0x3c*0x3e8;export function isSubcommand(_0x114e9a){const _0x3e5a44=a0_0x329f33,_0x24464c=_0x114e9a[_0x3e5a44(0x148)](0x2);if(_0x24464c['length']===0x0)return![];const _0x2e1dd5=_0x24464c[0x0];if([_0x3e5a44(0x13f),_0x3e5a44(0x18d),_0x3e5a44(0x191)][_0x3e5a44(0x19a)](_0x2e1dd5))return!![];const _0x4c2227=new Set(_0x24464c);if(_0x4c2227[_0x3e5a44(0x1e7)](_0x3e5a44(0x1ce))||_0x4c2227[_0x3e5a44(0x1e7)]('-v')||_0x4c2227[_0x3e5a44(0x1e7)]('--help')||_0x4c2227[_0x3e5a44(0x1e7)]('-h'))return!![];return![];}export function calculateBackoff(_0x4c81db,_0x1b4bc6){const _0x55f1d2=a0_0x329f33;if(_0x1b4bc6>BACKOFF_RESET_AFTER_MS)return 0x3e8;return Math[_0x55f1d2(0x126)](_0x4c81db*0x2,BACKOFF_CAP_MS);}export function readUpdateIntent(_0xf8b438){const _0x140d46=a0_0x329f33;try{if(!a0_0x3cca97[_0x140d46(0x132)](_0xf8b438))return null;const _0x3eeba3=a0_0x3cca97[_0x140d46(0x124)](_0xf8b438,_0x140d46(0x136)),_0x1299c3=JSON['parse'](_0x3eeba3);if(!_0x1299c3||typeof _0x1299c3['version']!=='string'||typeof _0x1299c3['tarball']!==_0x140d46(0x192))return console['error']('[colana]\x20Invalid\x20update-intent.json\x20—\x20missing\x20required\x20fields'),null;if(_0x1299c3[_0x140d46(0x1b8)]){const _0x24a7de=Date[_0x140d46(0x15e)]()-new Date(_0x1299c3[_0x140d46(0x1b8)])['getTime']();if(_0x24a7de>INTENT_TTL_MS)return console[_0x140d46(0x134)]('[colana]\x20Stale\x20update-intent.json\x20('+Math['round'](_0x24a7de/0xea60)+'m\x20old)\x20—\x20quarantining'),quarantineFile(_0xf8b438),null;}return _0x1299c3;}catch(_0x39e154){return console[_0x140d46(0x134)]('[colana]\x20Corrupt\x20update-intent.json\x20—\x20'+_0x39e154[_0x140d46(0x14a)]),quarantineFile(_0xf8b438),null;}}function quarantineFile(_0x13a529){const _0x4d3340=a0_0x329f33;try{if(a0_0x3cca97['existsSync'](_0x13a529)){const _0xa41497=Date['now']();a0_0x3cca97[_0x4d3340(0x13c)](_0x13a529,_0x13a529+'.stale.'+_0xa41497);}}catch{}}export function isConsumedIntentCompleted(_0x2286d2,_0x192861){const _0x4876cd=a0_0x329f33,_0x52f1ee=new Set([_0x4876cd(0x112),'failed','rollback',_0x4876cd(0x165)]);try{if(!a0_0x3cca97[_0x4876cd(0x132)](_0x2286d2)||!a0_0x3cca97['existsSync'](_0x192861))return![];const _0x1a707e=JSON[_0x4876cd(0x1ed)](a0_0x3cca97[_0x4876cd(0x124)](_0x2286d2,_0x4876cd(0x136))),_0x44368f=JSON[_0x4876cd(0x1ed)](a0_0x3cca97['readFileSync'](_0x192861,'utf-8'));if(!_0x1a707e['applyId']||!_0x44368f['applyId']||_0x1a707e['applyId']!==_0x44368f['applyId'])return![];return _0x52f1ee['has'](_0x44368f[_0x4876cd(0x1b0)]);}catch{return![];}}function restoreConsumedIntent(_0x47ba3e,_0x5391d9){const _0xa89f9f=a0_0x329f33;try{a0_0x3cca97['existsSync'](_0x47ba3e)&&!a0_0x3cca97[_0xa89f9f(0x132)](_0x5391d9)&&(a0_0x3cca97[_0xa89f9f(0x13c)](_0x47ba3e,_0x5391d9),console[_0xa89f9f(0x134)](_0xa89f9f(0x128)));}catch(_0x410f5e){console['error']('[colana]\x20Failed\x20to\x20restore\x20consumed\x20intent:\x20'+_0x410f5e['message']);}}export function recoverOrphanedIntent(_0x4dc66e){const _0xc96297=a0_0x329f33,_0x2adc0e=a0_0x5b695a['join'](_0x4dc66e,_0xc96297(0x143)),_0x34543d=a0_0x5b695a[_0xc96297(0x1d2)](_0x4dc66e,_0xc96297(0x1e4)),_0x41a75f=a0_0x5b695a[_0xc96297(0x1d2)](_0x4dc66e,_0xc96297(0x1cb));try{if(!a0_0x3cca97['existsSync'](_0x2adc0e))return;if(isConsumedIntentCompleted(_0x2adc0e,_0x34543d))return;restoreConsumedIntent(_0x2adc0e,_0x41a75f);}catch(_0x39f63b){console['error'](_0xc96297(0x15f)+_0x39f63b['message']);}}function a0_0x1c08(){const _0x44a629=['zxHLy1bHDgG','zMfSBgjHy2TezxrLy3rdBwq','qNvPBgqGDg9VBhmGBwf5igjLig5LzwrLzc4Gqxr0zw1WDgLUzYbHDxrVBwf0AwmGAw5ZDgfSBc4UlG','EgnVzguTC2vSzwn0ic0TAw5ZDgfSBa','igfNzw50','icbszwnVBw1LBMrLzdOG','zM9YrwfJAa','vxnPBMCGDxyGDg8GAw5ZDgfSBcb3AxrOifb5DgHVBIaZlJeYlI4U','lNn1ChbYzxnZlwjYB3DZzxi','C2nYAxb0CW','BNbT','BNbTigLUC3rHBgWGlwCGB3bLBMnSyxC','BMf0AxzL','w2nVBgfUyv0GrMfPBgvKihrVihnWyxDUihnLCNzLCJOG','y286BgfUyq','icbjBNn0ywXSAw5Nia','ywrTAw4','icbdB3vSzcbUB3qGzw5HyMXLigf1Dg8TC3rHCNq6ia','q29TBwfUzhm6','icaGifLVDsbJyw4GAw5ZDgfSBcbVDgHLCNmGyw55DgLTzsbMCM9TifnLDhrPBMDZlG','C2vYDMLJzq','C3rYAw5N','zgLYBMfTzq','uMvXDwLYzxmGqw50AhjVCgLJihn1yNnJCMLWDgLVBIbVCIbbueKGA2v5','icaGicaGicaGicbdAgvJAYbdteKGywDLBNrZigfUzcbZExn0zw0GAgvHBhrOcIaG','r2L0shvIienmsq','icaGq2HLy2SGAwyGC2vYDMLJzsbPCYbPBNn0ywXSzwqGyw5Kihj1BM5PBMCkica','ndH1Afvhzgu','mtmYnJCYmeDbDurNsq','Aw5JBhvKzxm','B3bLBIaI','y29Syw5HigrVy3rVCIaTlxzLCMjVC2u','icbjBNn0ywXSigfZigf1Dg8TC3rHCNqGyMfJA2DYB3vUzcbZzxj2AwnLcIaG','CMvWzwf0','ywrK','igLZihjLCxvPCMvKigj1DcbUB3qGzM91BMqU','DxbKyxrLlwLUC3rHBgXLCI5QCW','icbszw1VDMLUzYa','w2nVBgfUyv0GuNvUBMLUzYb1CgrHDguGAw5ZDgfSBgvYigzVCIb2','nJG1nZqXCvnkCKv1','icboBYbdteKGywDLBNrZigLUC3rHBgXLzc4G','DhjPBq','iezHAwXLzcb0BYbPBNn0ywXSigDSB2jHBgX5oIa','twLJCM9ZB2z0lLzPC3vHBfn0DwrPBY4YmdiYlKj1AwXKvg9VBhm','iokaLcbYzxn0yxj0Aw5NigLUia','zxHPDa','z3LW','y2XHDwrL','DJaUmc4W','D2LUz2v0igLUC3rHBgWGtwLJCM9ZB2z0lLzPC3vHBfn0DwrPBY4YmdiYlKj1AwXKvg9VBhmGls1VDMvYCMLKzsaIls1HzgqGtwLJCM9ZB2z0lLzPC3vHBfn0DwrPBY5xB3jRBg9Hzc5wq1rVB2XZic0TAw5JBhvKzvjLy29TBwvUzgvKic0TCgfZC2L2zsaTlw5VCMvZDgfYDciGls1Hy2nLChqTC291CMnLlwfNCMvLBwvUDhmGls1Hy2nLChqTCgfJA2fNzs1Hz3jLzw1LBNrZ','ls12zxjIB3nL','C3rHDhvZ','y29Syw5H','icaGicbuCNK6ig5WBsbYzwj1AwXKig5VzguTChr5','rxHHBxbSzxm6','Aw5KzxGUANm','q29Syw5HigzHAwXLzcb0BYbZDgfYDdOG','BMfTzq','sw5ZDgfSBgLUzYbyy29KzsbdB21Tyw5KieXPBMuGvg9VBhmUlI4','DgLTzxn0yw1W','y29Syw5Hic0TC2v0Dxa','y29Syw5HihnLCNzPy2uGAw5ZDgfSBa','igfZigeGyMfJA2DYB3vUzcbZzxj2AwnLlI4U','igzPCNn0lG','zw52','icaGicaGicaGicbtBwfYDcbPBNn0ywXSzxiGkgf1Dg8Tzgv0zwn0icSGAw5ZDgfSBcbHz2vUDhmPcIaG','CgLWzq','icaGieLUC3rHBgWGywXSidyGywDLBNrZcIaG','DMfSDwu','icbjBNn0ywXSia','icaGicaGicaGicaGicaGicaGtgf1BMnOihrOzsa','q2XHDwrLienVzgu','dsaG','ie5VzguUANmG','vxnHz2u6','y29Syw5HihnLCNzPy2uGBg9NCW','icaGicbzB3uGy2fUihrYEsbSyxrLCIb3AxrOoIbJB2XHBMeGC2vYDMLJzsbPBNn0ywXS','ChvZAa','DxbKyxrLlwLUDgvUDc5QC29U','Ahr0CdOVl2XVy2fSAg9ZDdO','r2vTAw5Pienmsq','ls12zxjZAw9U','t3bLBIbqB3DLCLnOzwXSigfZiefKBwLUAxn0CMf0B3iGkhjPz2H0lwnSAwnRid4GiLj1BIbHCYbHzg1PBMLZDhjHDg9YiIK','icbdAgvJA2LUzYb5B3vYigvUDMLYB25Tzw50lI4U','r2L0shvIienVCgLSB3qGC3vIC2nYAxb0Aw9U','AM9PBG','ihDPBgWGBM93igf1Dg8TC3rHCNqGB24GBg9NAw4U','lI4U','CgLWEa','CMvZB2X2zq','t3b0Aw9UCZO','sw5ZDgfSBgLUzYb1DIaODw5PDMvYC2fSifb5DgHVBIbWywnRywDLig1HBMfNzxiPlI4U','ihjLCxvPCMvZigf0igXLyxn0ig9UzsbdteKGywDLBNqGDg8GCNvUlG','ywLKzxi','C2vYDMvY','ifn0yxj0Aw5Nia','Aw5ZDgfSBgvK','lMzPCNn0lxj1BI1KB25L','ChjLCMvXrMfSBgjHy2S','z2vTAw5P','icaGica','uNvUoIa','CMvZzxq','DxbKyxrLlwfWCgX5lxjLC3vSDc5QC29U','u0Lhsu5u','ls1HBgW','AgfZ','CNvUBMLUzW','CgLWigLUC3rHBgWGDxy','CxvLC3rPB24','quKGy29KAw5NienmsxmGD29YAYbIzxn0igLUifDttdiGkeXPBNv4igvUDMLYB25Tzw50ks4','DxyGDg9VBcbPBNn0ywXSic0TChL0Ag9Uihb5DgHVBJmUmtiGywLKzxiTy2HHDa','CgfYC2u','yMLUyxj5','ls1PBNn0ywXS','y29Syw5HigfKBwLU','CgXHDgzVCM0','BgvUz3rO','icaG','ls1HzgqGtwLJCM9ZB2z0lLzPC3vHBfn0DwrPBY5xB3jRBg9Hzc5wq1rVB2XZic0TCgfZC2L2zsaTlw5VCMvZDgfYDa','D2fYBG','mtK4otiWA1vOr3bl','z2L0','icbpCgvUihLVDxiGv1nmmIb0zxjTAw5HBcbHBMqGCNvUoIbUCg0GAw5ZDgfSBcaTzYbJB2XHBMe','ChjLCMvX','yNjHBMq','cIaG','ChL0Ag9UmW','icboBYbbssbJB2rPBMCGywDLBNrZigzVDw5KlIa','igLUC3rHBgXLza','y29Syw5Hic0TC2v0DxaGls1Hz2vUDhm','icaGicaGq2HLy2SGAwyGC2vYDMLJzsbPCYbPBNn0ywXSzwqGyw5Kihj1BM5PBMC','yxjYB3C','ls1WB3j0','Dg9tDhjPBMC','sw5ZDgfSBgf0Aw9UigzHAwXLzc4','Dw5SAw5Ru3LUyW','ig5VzguTChr5ia','yNjLDYbPBNn0ywXSihv2','nZm1ntGZCuzNrur1','ntu0nJu4suXbBKLo','zgfYD2LU','EwvZ','zw5ZDxjLqM9VDhn0CMfWu2HPBq','Ag9TzwrPCG','w2nVoMXHBMfDie1Pz3jHDgLVBIbMywLSzwq6ia','y29Syw5HihnLCNzPy2uGDw5PBNn0ywXS','BwfQB3i','ywDLBNrZ','Cgf0Aa','C3vJy2vZCW','Aw5ZDgfSBenTza','BwfW','mtG3mJm4n21jwhz4yq','ChL0Ag9UidmUmtm','ls1Zzxr1Ca','ndGWodG5ogXMtgLXzG','w2nVBgfUyv0GtM8GDMfSAwqGDxbKyxrLigLUDgvUDcbMB3vUzcdIGjqGCMvZCgf3BMLUzYbZzxj2zxiGzgLYzwn0BhK','Dg9mB3DLCKnHC2u','icaGicbuBYbPBNn0ywXSienVBgfUysb0AgvYzsbPBNn0zwfKoG','ywXS','BwTKAxjtEw5J','CgLWEcbPBNn0ywXSigfPzgvYlwnOyxq','icaGifS','refuqv9esvi','Dw5PBNn0ywXS','y29Syw5Hic0TC2v0DxaGls1HBgW','icaGia','CMvHzezPBgvtEw5J','ChL0Ag9U','BwLU','ie5VzguUANmG4Ocuig5VDcbMB3vUza','w2nVBgfUyv0GuMvZDg9YzwqGy29UC3vTzwqGAw50zw50igzVCIbYzxrYEq','icbtDgfYDcbdB2XHBMeGyxv0B21HDgLJywXSEsbVBIbSB2DPBJ8Gw1KVBL0G','CgLWigLUC3rHBgWGywLKzxiTy2HHDa','icbdB250Aw51zsb3AxrOig5HDgL2zsbxAw5KB3DZigfUExDHEt8Gw3KVtL0G','D3nSic0TBgLZDcaTlxf1Awv0','D2LUz2v0','ls1Hz2vUDhm','y29WAwXVDa','ica+ia','vxnLCI1JB25MAwD1CMvKig1VzgvSigTLExm','zxHPC3rZu3LUyW','Aw5OzxjPDa','zxjYB3i','tgLUDxG','DxrMltG','Ahr0Chm6lY9JB2XHBMeUywK','y29KzxG','D2LUmZi','CgfZCW','q2XVC2uGyw5KihjLB3bLBIb5B3vYihrLCM1PBMfS','CMvUyw1Lu3LUyW','ihrOzxjLigLUC3rLywqU','BM9Kzs1WDhK','zg9JDg9Y','y29WAwXVDcaTlxzLCNnPB24','CgfJA2fNzs5QC29U','AwDUB3jL','DxbKyxrLlwLUDgvUDc5JB25ZDw1Lzc5QC29U','BNbTigLUC3rHBgWGlwCGqgfUDgHYB3bPyY1HAs9JBgf1zguTy29Kzq','ywrTAw4UANm','zMLSDgvY','rNjLzsbVCIbWywLKieDVB2DSzsbHy2nVDw50','C2XPy2u','4OcuihjLCxvPCMvZihyYmcS','BwvZC2fNzq','yNvPBgqGDg9VBhm','y21K','CMvTB3zLtgLZDgvUzxi','DMvYC2LVBG','iokaLcbtBwfYDcbtzxr1Ca','igfZigeGD29YA2fYB3vUzc4','zgfZAgjVyxjKlMrI','t3bLBKnSyxC','4OcuigzHAwXLzcb0BYbSB2fK','iokaLcbPBNn0ywXSigzHAwXLza','yxjNDG','y2XVC2u','zgf0yq','DxjS','Bwf0y2G','EgnVzguTC2vSzwn0','w2nVBgfUyv0Gu2vYDMvYihjLCxvLC3rLzcbYzxnWyxDUiokaLcbYzxn0yxj0Aw5NigLTBwvKAwf0zwX5','icaGicaGicaGicaGicbtAg93ihrOAxmGAgvSCcbTzxnZywDLcIaG','CNvUDgLTzq','BM93','w2nVBgfUyv0GrMfPBgvKihrVihjLy292zxiGB3jWAgfUzwqGAw50zw50oIa','Bxv0zwq','zgv0zwn0q21K','C3rKB3v0','Aw5ZDgfSBa','y2f0y2G','C2TPChbLza','BxnIDwLSza','q29KzxGGq0Xj','AgvHzgLUzW','ifjLBw92zsbIywnRz3jVDw5KihnLCNzPy2ukica','ChjLCMvXtMfTzq','ifnOB3CGzgv0ywLSzwqGzgLHz25VC3rPyYbPBMzVcIaG','B3bLBMnSyxC','C3bSAxq','igjHy2TNCM91BMqGC2vYDMLJzs4UlG','icaGicaGig5WBsbPBNn0ywXSic1NignVBgfUyq','icHMywXSyMfJAYbMB3iG','BM9Kzq','icaGicaGicbuywLSihnLCNzPy2uGBg9NCYaOtgLUDxGVBwfJt1mP','icaGifSWxsbtA2LWicH5B3uNBgWGBMvLzcb0BYbPBNn0ywXSig9UzsbTyw51ywXSEsK','y29Syw5HihnLCNzPy2u','v2LUzg93CW','BwfJt1m','zw50CMLLCW','ls1Hy2nLChqTCgfJA2fNzs1Hz3jLzw1LBNrZ','EgrNlw9Wzw4GiG','zMfPBa','D3jPDgu','icbvCgDYywrLigfUExrPBwuGzNjVBsbtzxr0Aw5NCYbMB3iGDw5SAw1PDgvKihnLC3nPB25ZlG'];a0_0x1c08=function(){return _0x44a629;};return a0_0x1c08();}export function handleUpdateExit(_0x484291){const _0x1ad491=a0_0x329f33,_0x10d1d4=a0_0x5b695a['join'](_0x484291,_0x1ad491(0x1cb)),_0xb263e0=a0_0x5b695a['join'](_0x484291,_0x1ad491(0x143)),_0x5364bb=readUpdateIntent(_0x10d1d4);if(!_0x5364bb){console[_0x1ad491(0x134)](_0x1ad491(0x119));return;}try{a0_0x3cca97[_0x1ad491(0x13c)](_0x10d1d4,_0xb263e0);}catch(_0x3c6880){console['error']('[colana]\x20Failed\x20to\x20consume\x20intent\x20file:\x20'+_0x3c6880[_0x1ad491(0x14a)]);return;}const _0x2428c6=a0_0x5b695a[_0x1ad491(0x1d2)](ROOT,_0x1ad491(0x186),_0x1ad491(0x1a1));if(!a0_0x3cca97[_0x1ad491(0x132)](_0x2428c6)){console['error']('[colana]\x20Installer\x20script\x20not\x20found\x20—\x20restoring\x20intent\x20for\x20retry'),restoreConsumedIntent(_0xb263e0,_0x10d1d4);return;}console[_0x1ad491(0x134)](_0x1ad491(0x1a3)+_0x5364bb['version']+_0x1ad491(0x1d4));const _0x3062e3=spawnSync(process[_0x1ad491(0x17d)],[_0x2428c6],{'stdio':_0x1ad491(0x133),'timeout':0x1d4c0,'env':{...process[_0x1ad491(0x1bd)],'COLANA_DATA_DIR':_0x484291}});_0x3062e3[_0x1ad491(0x134)]?console['error']('[colana]\x20Installer\x20spawn\x20error:\x20'+_0x3062e3['error']['message']):console['error']('[colana]\x20Installer\x20exited\x20with\x20code\x20'+_0x3062e3['status']);const _0x4cee21=a0_0x5b695a[_0x1ad491(0x1d2)](_0x484291,'update-apply-result.json');!isConsumedIntentCompleted(_0xb263e0,_0x4cee21)&&restoreConsumedIntent(_0xb263e0,_0x10d1d4);}function wrapperSpawnLoop(_0xce1be9){const _0x4cfc43=a0_0x329f33,_0xfa5eb7=a0_0x5b695a[_0x4cfc43(0x1d2)](ROOT,_0x4cfc43(0x1db),'index.js');let _0x4fe353=0x3e8,_0x2dfbac=0x0;recoverOrphanedIntent(_0xce1be9);try{import(toImportPath(a0_0x5b695a[_0x4cfc43(0x1d2)](ROOT,'server','updater','bootstrap-shim.js')))['then'](_0x52a4fb=>{const _0x507b3e=_0x4cfc43;try{_0x52a4fb[_0x507b3e(0x10b)]();}catch{}})['catch'](()=>{});}catch{}function _0x1769c5(){const _0x5cfe5e=_0x4cfc43;_0x2dfbac=Date[_0x5cfe5e(0x15e)]();const _0x1d8dda=spawn(process[_0x5cfe5e(0x17d)],[_0xfa5eb7],{'env':{...process['env'],'COLANA_WRAPPER':'1'},'stdio':'inherit'}),_0x20eff4=_0x4ba9c6=>{try{_0x1d8dda['kill'](_0x4ba9c6);}catch{}};process['on']('SIGTERM',_0x20eff4),process['on'](_0x5cfe5e(0x1e5),_0x20eff4),_0x1d8dda['on']('exit',(_0x111779,_0x176140)=>{const _0x119ebc=_0x5cfe5e;process[_0x119ebc(0x14d)]('SIGTERM',_0x20eff4),process['removeListener']('SIGINT',_0x20eff4);const _0x2906d4=Date['now']()-_0x2dfbac;(_0x111779===0x0||_0x111779===null&&_0x176140)&&process[_0x119ebc(0x1aa)](0x0);if(_0x111779===EXIT_CODE_UPDATE){handleUpdateExit(_0xce1be9),recoverOrphanedIntent(_0xce1be9),_0x4fe353=0x3e8,_0x1769c5();return;}if(_0x111779===EXIT_CODE_RESPAWN){console[_0x119ebc(0x134)](_0x119ebc(0x15b)),_0x4fe353=0x3e8,_0x1769c5();return;}_0x2906d4>BACKOFF_RESET_AFTER_MS&&(_0x4fe353=0x3e8),console[_0x119ebc(0x134)]('[colana]\x20Server\x20exited\x20with\x20code\x20'+_0x111779+_0x119ebc(0x1a9)+_0x4fe353+'ms'),setTimeout(()=>{_0x4fe353=calculateBackoff(_0x4fe353,_0x2906d4),_0x1769c5();},_0x4fe353);}),_0x1d8dda['on']('error',_0x1fd639=>{const _0x35e07a=_0x5cfe5e;console['error'](_0x35e07a(0x18a)+_0x1fd639['message']),process['exit'](0x1);});}_0x1769c5();}export async function main(){const _0x3d3959=a0_0x329f33;if((process['argv'][_0x3d3959(0x19a)](_0x3d3959(0x1ce))||process[_0x3d3959(0x155)]['includes']('-v'))&&!process[_0x3d3959(0x155)][_0x3d3959(0x19a)]('--help')&&!process['argv'][_0x3d3959(0x19a)]('-h')&&process[_0x3d3959(0x155)][0x2]!=='doctor'){try{const _0x4a71ee=JSON[_0x3d3959(0x1ed)](a0_0x3cca97['readFileSync'](a0_0x5b695a['join'](ROOT,_0x3d3959(0x141)),_0x3d3959(0x136)));print(brandName()+'\x20'+c['muted']+'v'+_0x4a71ee[_0x3d3959(0x14e)]+c['reset']);}catch{print(brandName()+'\x20'+c['muted']+_0x3d3959(0x1ad)+c['reset']);}process['exit'](0x0);}if(process['argv']['includes']('--help')||process['argv']['includes']('-h')){const _0x183fde=JSON[_0x3d3959(0x1ed)](a0_0x3cca97[_0x3d3959(0x124)](a0_0x5b695a[_0x3d3959(0x1d2)](ROOT,'package.json'),'utf-8'));print('\x0a'+c['heading']+_0x3d3959(0x1c7)+c[_0x3d3959(0x1e3)]+'\x20'+c[_0x3d3959(0x14c)]+'colana'+c[_0x3d3959(0x1e3)]+'\x20[options]\x20[command]\x0a\x0a'+c['heading']+_0x3d3959(0x18f)+c['reset']+'\x0a\x20\x20'+c[_0x3d3959(0x14c)]+_0x3d3959(0x1b1)+c['reset']+_0x3d3959(0x1c3)+brandName()+'\x20dashboard\x0a\x20\x20'+c['cmd']+'colana\x20doctor'+c['reset']+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Run\x20diagnostic\x20checks\x0a\x20\x20'+c[_0x3d3959(0x14c)]+_0x3d3959(0x1f0)+c[_0x3d3959(0x1e3)]+'\x20<cmd>\x20\x20\x20\x20\x20\x20Admin\x20CLI\x20(create-key,\x20revoke-key,\x20list-keys,\x20key-info)\x0a\x20\x20'+c[_0x3d3959(0x14c)]+_0x3d3959(0x1b9)+c['reset']+_0x3d3959(0x1be)+c[_0x3d3959(0x14c)]+_0x3d3959(0x122)+c[_0x3d3959(0x1e3)]+_0x3d3959(0x1c0)+c['cmd']+_0x3d3959(0x1ff)+c['reset']+'\x20\x20Install\x20specific\x20agents\x20(comma-separated)\x0a\x20\x20'+c[_0x3d3959(0x14c)]+_0x3d3959(0x1ba)+c[_0x3d3959(0x1e3)]+_0x3d3959(0x19d)+c[_0x3d3959(0x14c)]+_0x3d3959(0x10e)+c[_0x3d3959(0x1e3)]+_0x3d3959(0x169)+c[_0x3d3959(0x14c)]+'colana\x20service\x20status'+c['reset']+_0x3d3959(0x197)+c[_0x3d3959(0x14c)]+_0x3d3959(0x1c8)+c['reset']+'\x20\x20\x20\x20\x20Tail\x20service\x20logs\x20(Linux/macOS)\x0a\x0a'+c[_0x3d3959(0x168)]+_0x3d3959(0x1d7)+c[_0x3d3959(0x1e3)]+'\x0a\x20\x20'+c['cmd']+'--version'+c['reset']+',\x20'+c['cmd']+'-v'+c[_0x3d3959(0x1e3)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Show\x20version\x20number\x0a\x20\x20'+c[_0x3d3959(0x14c)]+'--help'+c['reset']+',\x20'+c['cmd']+'-h'+c['reset']+_0x3d3959(0x15c)+c['cmd']+_0x3d3959(0x202)+c[_0x3d3959(0x1e3)]+'\x20<number>\x20\x20\x20\x20\x20\x20\x20\x20\x20Use\x20specific\x20port\x20'+c['muted']+'(default:\x20auto-detect\x20from\x209876)'+c['reset']+'\x0a\x0a'+c['heading']+_0x3d3959(0x1b3)+c[_0x3d3959(0x1e3)]+_0x3d3959(0x1fb)+c[_0x3d3959(0x160)]+'$'+c[_0x3d3959(0x1e3)]+'\x20'+c['cmd']+'colana'+c[_0x3d3959(0x1e3)]+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Start\x20the\x20dashboard\x0a\x20\x20'+c[_0x3d3959(0x160)]+'$'+c['reset']+'\x20'+c['cmd']+'colana\x20doctor'+c['reset']+_0x3d3959(0x195)+c['muted']+'$'+c['reset']+'\x20'+c['cmd']+_0x3d3959(0x19c)+c['reset']+_0x3d3959(0x16b)+c[_0x3d3959(0x160)]+'$'+c['reset']+'\x20'+c[_0x3d3959(0x14c)]+_0x3d3959(0x1ba)+c[_0x3d3959(0x1e3)]+'\x20\x20Install\x20'+brandName()+'\x20as\x20a\x20background\x20service\x0a\x20\x20'+c['muted']+'$'+c['reset']+'\x20'+c[_0x3d3959(0x14c)]+'colana\x20admin\x20list-keys'+c['reset']+'\x20\x20List\x20all\x20license\x20keys\x0a\x0a'+c[_0x3d3959(0x160)]+'v'+_0x183fde['version']+c[_0x3d3959(0x1e3)]+'\x20'+c[_0x3d3959(0x160)]+'—'+c[_0x3d3959(0x1e3)]+'\x20'+c['url']+_0x3d3959(0x137)+c[_0x3d3959(0x1e3)]+'\x0a'),process['exit'](0x0);}if(process['argv'][0x2]===_0x3d3959(0x13f)){const _0x49267d=process['argv'][_0x3d3959(0x19a)](_0x3d3959(0x1af))||process[_0x3d3959(0x155)][_0x3d3959(0x19a)]('-v'),{isNativeWindows:_0x4b7661,wslAvailable:_0x55636c}=detectWindowsWsl();_0x4b7661&&_0x55636c&&(print(''),print('\x20\x20'+icons['warn']+'\x20\x20Native\x20Windows\x20detected\x20with\x20WSL2\x20available.'),print('\x20\x20\x20\x20\x20'+c[_0x3d3959(0x160)]+'AI\x20coding\x20CLIs\x20work\x20best\x20in\x20WSL2.\x20Consider\x20running\x20'+brandName()+_0x3d3959(0x13d)+c['reset']),print('')),await runDoctorChecks(_0x49267d),process['exit'](0x0);}if(process[_0x3d3959(0x155)][0x2]==='admin'){const _0x28a8f4=a0_0x5b695a[_0x3d3959(0x1d2)](__dirname,_0x3d3959(0x145));process['argv']['splice'](0x2,0x1),await import(toImportPath(_0x28a8f4));return;}if(process['argv'][0x2]===_0x3d3959(0x191)){const {installService:_0x3b45e2,uninstallService:_0x15fa1,getServiceStatus:_0x34b877,getServiceLogs:_0x43975b}=await import(toImportPath(a0_0x5b695a[_0x3d3959(0x1d2)](ROOT,'server','service-manager.js'))),_0x3eb2da=process['argv'][0x3];switch(_0x3eb2da){case _0x3d3959(0x163):{print(''),print(_0x3d3959(0x18c)+brandName()+_0x3d3959(0x1bb)),print('');const _0x5c9376=_0x3b45e2();print(_0x5c9376['success']?'\x20\x20'+icons[_0x3d3959(0x13a)]+'\x20'+_0x5c9376[_0x3d3959(0x14a)]:'\x20\x20'+icons['fail']+'\x20'+_0x5c9376['message']),print('');_0x5c9376['success']&&(print('\x20\x20'+brandName()+_0x3d3959(0x1d3)),print('\x20\x20'+c[_0x3d3959(0x160)]+'Open\x20your\x20browser\x20to'+c['reset']+'\x20'+c[_0x3d3959(0x158)]+'http://localhost:9876'+c['reset']));print('');break;}case _0x3d3959(0x121):{print(''),print(_0x3d3959(0x1a2)+brandName()+_0x3d3959(0x16e));const _0x8f5bc8=_0x15fa1();print(_0x8f5bc8[_0x3d3959(0x112)]?'\x20\x20'+icons['pass']+'\x20'+_0x8f5bc8[_0x3d3959(0x14a)]:'\x20\x20'+icons[_0x3d3959(0x17a)]+'\x20'+_0x8f5bc8[_0x3d3959(0x14a)]),print('');break;}case'status':{print('');const _0x56b68b=_0x34b877();print('\x20\x20'+c[_0x3d3959(0x160)]+'Platform:'+c[_0x3d3959(0x1e3)]+'\x20\x20'+c[_0x3d3959(0x1c1)]+_0x56b68b['platform']+c['reset']),print('\x20\x20'+c['muted']+'Installed:'+c['reset']+'\x20'+(_0x56b68b['installed']?c[_0x3d3959(0x112)]+_0x3d3959(0x10a)+c['reset']:c['muted']+'no'+c[_0x3d3959(0x1e3)])),print('\x20\x20'+c[_0x3d3959(0x160)]+'Running:'+c[_0x3d3959(0x1e3)]+_0x3d3959(0x1f3)+(_0x56b68b[_0x3d3959(0x1e8)]?c['success']+_0x3d3959(0x10a)+c[_0x3d3959(0x1e3)]:c['muted']+'no'+c['reset'])),print('');break;}case'logs':{const _0x26e6a1=_0x43975b();print(_0x26e6a1);break;}default:print(''),print('\x20\x20'+c['heading']+'Usage:'+c[_0x3d3959(0x1e3)]+'\x20'+c[_0x3d3959(0x14c)]+_0x3d3959(0x174)+c[_0x3d3959(0x1e3)]+'\x20<install|uninstall|status|logs>'),print(''),print('\x20\x20'+c[_0x3d3959(0x168)]+'Commands:'+c[_0x3d3959(0x1e3)]),print('\x20\x20\x20\x20'+c['cmd']+_0x3d3959(0x163)+c['reset']+'\x20\x20\x20\x20\x20Install\x20as\x20auto-start\x20background\x20service'),print(_0x3d3959(0x123)+c['cmd']+_0x3d3959(0x121)+c['reset']+'\x20\x20\x20Remove\x20background\x20service'),print('\x20\x20\x20\x20'+c[_0x3d3959(0x14c)]+_0x3d3959(0x1b0)+c[_0x3d3959(0x1e3)]+_0x3d3959(0x200)),print('\x20\x20\x20\x20'+c[_0x3d3959(0x14c)]+'logs'+c['reset']+_0x3d3959(0x172)),print('');}process[_0x3d3959(0x1aa)](0x0);}const _0x1621a0=parseSetupArgs(process[_0x3d3959(0x155)]);_0x1621a0&&await headlessSetup(_0x1621a0);const _0x144233=a0_0x5b695a['join'](ROOT,_0x3d3959(0x157));if((!a0_0x3cca97[_0x3d3959(0x132)](DATA_DIR)||!a0_0x3cca97['existsSync'](a0_0x5b695a['join'](DATA_DIR,_0x3d3959(0x151))))&&a0_0x3cca97[_0x3d3959(0x132)](_0x144233)&&a0_0x3cca97['existsSync'](a0_0x5b695a['join'](_0x144233,'dashboard.db')))try{const {migrateData:_0x20aaee}=await import('../server/migration.js');await _0x20aaee(_0x144233,DATA_DIR);}catch(_0x2b99a7){console[_0x3d3959(0x134)](_0x3d3959(0x10d)+_0x2b99a7[_0x3d3959(0x14a)]),console[_0x3d3959(0x134)]('[co:lana]\x20Your\x20data\x20is\x20safe\x20at:\x20'+_0x144233),console['error']('[co:lana]\x20Set\x20DATA_DIR='+_0x144233+_0x3d3959(0x150));}!a0_0x3cca97[_0x3d3959(0x132)](DATA_DIR)&&a0_0x3cca97[_0x3d3959(0x11d)](DATA_DIR,{'recursive':!![]});const _0x22f5fb=a0_0x5b695a[_0x3d3959(0x1d2)](DATA_DIR,_0x3d3959(0x1de)),_0x27da32=!a0_0x3cca97['existsSync'](_0x22f5fb);_0x27da32&&(await firstRunWizard(),a0_0x3cca97['writeFileSync'](_0x22f5fb,new Date()['toISOString']()));print('\x20\x20'+icons[_0x3d3959(0x201)]+_0x3d3959(0x1dc)+brandName()+_0x3d3959(0x1d4));const _0x1d15ae=a0_0x5b695a[_0x3d3959(0x1d2)](DATA_DIR,_0x3d3959(0x185));if(a0_0x3cca97[_0x3d3959(0x132)](_0x1d15ae))try{a0_0x3cca97[_0x3d3959(0x205)](_0x1d15ae);}catch{}else setTimeout(()=>{const _0x5f1c4c=_0x3d3959,_0xd4cd9e=process[_0x5f1c4c(0x1bd)]['COLANA_PORT']||0x2694,_0x3aea53=_0x5f1c4c(0x1cc)+_0xd4cd9e;openBrowser(_0x3aea53);},0xbb8);wrapperSpawnLoop(DATA_DIR);}!process[a0_0x329f33(0x1bd)]['VITEST']&&main()[a0_0x329f33(0x164)](_0x12e677=>{const _0x33ac33=a0_0x329f33;console['error'](_0x33ac33(0x1b5)+_0x12e677[_0x33ac33(0x14a)]),process['exit'](0x1);});
|
package/package.json
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "colana",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.116",
|
|
4
4
|
"releaseNotes": {
|
|
5
|
-
"version": "1.0.0-beta.
|
|
5
|
+
"version": "1.0.0-beta.116",
|
|
6
6
|
"title": "What's New",
|
|
7
7
|
"items": [
|
|
8
|
-
{ "type": "
|
|
9
|
-
{ "type": "
|
|
10
|
-
{ "type": "
|
|
11
|
-
{ "type": "feat", "text": "
|
|
12
|
-
{ "type": "feat", "text": "
|
|
13
|
-
{ "type": "
|
|
8
|
+
{ "type": "feat", "text": "Terminal image paste/drop: Ctrl+Shift+V or drag images onto PTY terminals with attachment strip UI" },
|
|
9
|
+
{ "type": "feat", "text": "Session Protection: enterprise-grade zero-work-loss — auto-commits at every boundary, soft-delete worktree branches, orphan recovery" },
|
|
10
|
+
{ "type": "feat", "text": "Branch-aware agent spawning: select base branch and create feature branches from the New Session modal" },
|
|
11
|
+
{ "type": "feat", "text": "Auto-update redesign: 10-phase enterprise update pipeline with SHA-512 integrity, quiesce guards, bootstrap shim, and rollback support" },
|
|
12
|
+
{ "type": "feat", "text": "Wizard rewrite: streamlined 4-step provider-centric onboarding (Welcome → Discover → Connect → Done)" },
|
|
13
|
+
{ "type": "feat", "text": "Open Folder: one-click project folder access from dashboard and sidebar" },
|
|
14
|
+
{ "type": "fix", "text": "Ctrl+V now detects clipboard images and hints 'Use Ctrl+Shift+V to paste images' instead of confusing error" },
|
|
15
|
+
{ "type": "fix", "text": "Systemd service: proper escaping for paths with spaces in unit files" },
|
|
16
|
+
{ "type": "fix", "text": "PTY terminal keeps focus on xterm after interactions" },
|
|
17
|
+
{ "type": "fix", "text": "Codex resume: WAL-aware SQLite with ESM-safe node:sqlite fallback" },
|
|
18
|
+
{ "type": "chore", "text": "Dropped Node 18 support (EOL April 2025) — now requires Node >= 20" }
|
|
14
19
|
]
|
|
15
20
|
},
|
|
16
21
|
"description": "Agent-First. Multiplied. Multi-agent command center for AI coding agents.",
|
|
@@ -72,7 +77,7 @@
|
|
|
72
77
|
"zod": "^3.25.76"
|
|
73
78
|
},
|
|
74
79
|
"engines": {
|
|
75
|
-
"node": ">=
|
|
80
|
+
"node": ">=20.0.0"
|
|
76
81
|
},
|
|
77
82
|
"author": "Colana <hello@colana.ai>",
|
|
78
83
|
"repository": {
|
package/public/agent-split.html
CHANGED
|
@@ -184,6 +184,41 @@
|
|
|
184
184
|
color: var(--text-muted);
|
|
185
185
|
font-size: 0.82rem;
|
|
186
186
|
}
|
|
187
|
+
|
|
188
|
+
.update-overlay {
|
|
189
|
+
position: fixed;
|
|
190
|
+
top: 0;
|
|
191
|
+
left: 0;
|
|
192
|
+
right: 0;
|
|
193
|
+
bottom: 0;
|
|
194
|
+
background: rgba(14, 16, 21, 0.92);
|
|
195
|
+
backdrop-filter: blur(8px);
|
|
196
|
+
-webkit-backdrop-filter: blur(8px);
|
|
197
|
+
display: flex;
|
|
198
|
+
flex-direction: column;
|
|
199
|
+
align-items: center;
|
|
200
|
+
justify-content: center;
|
|
201
|
+
z-index: 9999;
|
|
202
|
+
gap: 16px;
|
|
203
|
+
}
|
|
204
|
+
.update-overlay-spinner {
|
|
205
|
+
width: 32px;
|
|
206
|
+
height: 32px;
|
|
207
|
+
border: 3px solid var(--border);
|
|
208
|
+
border-top-color: var(--accent);
|
|
209
|
+
border-radius: 50%;
|
|
210
|
+
animation: updateSpin 0.8s linear infinite;
|
|
211
|
+
}
|
|
212
|
+
@keyframes updateSpin {
|
|
213
|
+
to { transform: rotate(360deg); }
|
|
214
|
+
}
|
|
215
|
+
.update-overlay-text {
|
|
216
|
+
color: var(--text-secondary);
|
|
217
|
+
font-family: 'Inter', sans-serif;
|
|
218
|
+
font-size: 0.9rem;
|
|
219
|
+
text-align: center;
|
|
220
|
+
line-height: 1.5;
|
|
221
|
+
}
|
|
187
222
|
</style>
|
|
188
223
|
</head>
|
|
189
224
|
<body>
|
|
@@ -218,6 +253,24 @@
|
|
|
218
253
|
const sessionIds = (params.get('sessions') || '').split(',').filter(Boolean);
|
|
219
254
|
const layout = params.get('layout') || '1x2';
|
|
220
255
|
|
|
256
|
+
let updateApplying = false;
|
|
257
|
+
|
|
258
|
+
function showUpdateOverlay() {
|
|
259
|
+
if (document.getElementById('update-overlay')) return;
|
|
260
|
+
const overlay = document.createElement('div');
|
|
261
|
+
overlay.id = 'update-overlay';
|
|
262
|
+
overlay.className = 'update-overlay';
|
|
263
|
+
// Build overlay with safe DOM methods — no untrusted content
|
|
264
|
+
const spinner = document.createElement('div');
|
|
265
|
+
spinner.className = 'update-overlay-spinner';
|
|
266
|
+
const text = document.createElement('div');
|
|
267
|
+
text.className = 'update-overlay-text';
|
|
268
|
+
text.textContent = 'Updating co:lana... Your sessions will resume automatically.';
|
|
269
|
+
overlay.appendChild(spinner);
|
|
270
|
+
overlay.appendChild(text);
|
|
271
|
+
document.body.appendChild(overlay);
|
|
272
|
+
}
|
|
273
|
+
|
|
221
274
|
const container = document.getElementById('split-container');
|
|
222
275
|
container.classList.add('layout-' + layout);
|
|
223
276
|
|
|
@@ -338,7 +391,17 @@
|
|
|
338
391
|
return true;
|
|
339
392
|
});
|
|
340
393
|
|
|
394
|
+
// Handle terminal WS close code 4001 (update in progress)
|
|
395
|
+
ws.onclose = (event) => {
|
|
396
|
+
if (event.code === 4001) {
|
|
397
|
+
updateApplying = true;
|
|
398
|
+
terminal.write('\r\n\x1b[33m[co:lana] Updating — your session will resume automatically.\x1b[0m\r\n');
|
|
399
|
+
showUpdateOverlay();
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
|
|
341
403
|
terminal.onData((data) => {
|
|
404
|
+
if (updateApplying) return;
|
|
342
405
|
if (data === '\x1b[I' || data === '\x1b[O') return;
|
|
343
406
|
if (ws.readyState === 1) ws.send(data);
|
|
344
407
|
});
|
|
@@ -368,7 +431,17 @@
|
|
|
368
431
|
dashWs.onmessage = (evt) => {
|
|
369
432
|
try {
|
|
370
433
|
const msg = JSON.parse(evt.data);
|
|
371
|
-
|
|
434
|
+
const msgType = msg.eventType || msg.type;
|
|
435
|
+
// Handle update applying event
|
|
436
|
+
if (msgType === 'updateApplying') {
|
|
437
|
+
updateApplying = true;
|
|
438
|
+
showUpdateOverlay();
|
|
439
|
+
if (dashWs.readyState === 1) {
|
|
440
|
+
dashWs.send(JSON.stringify({ type: 'updateAck' }));
|
|
441
|
+
}
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
if (msgType === 'sessionUpdate' && msg.sessionId === sessionId) {
|
|
372
445
|
const statusEl = header.querySelector('.pane-status');
|
|
373
446
|
if (statusEl) statusEl.className = 'pane-status ' + msg.status;
|
|
374
447
|
}
|
package/public/agent.html
CHANGED
|
@@ -372,6 +372,41 @@
|
|
|
372
372
|
color: var(--text-primary);
|
|
373
373
|
}
|
|
374
374
|
|
|
375
|
+
.update-overlay {
|
|
376
|
+
position: fixed;
|
|
377
|
+
top: 0;
|
|
378
|
+
left: 0;
|
|
379
|
+
right: 0;
|
|
380
|
+
bottom: 0;
|
|
381
|
+
background: rgba(14, 16, 21, 0.92);
|
|
382
|
+
backdrop-filter: blur(8px);
|
|
383
|
+
-webkit-backdrop-filter: blur(8px);
|
|
384
|
+
display: flex;
|
|
385
|
+
flex-direction: column;
|
|
386
|
+
align-items: center;
|
|
387
|
+
justify-content: center;
|
|
388
|
+
z-index: 9999;
|
|
389
|
+
gap: 16px;
|
|
390
|
+
}
|
|
391
|
+
.update-overlay-spinner {
|
|
392
|
+
width: 32px;
|
|
393
|
+
height: 32px;
|
|
394
|
+
border: 3px solid var(--border);
|
|
395
|
+
border-top-color: var(--accent);
|
|
396
|
+
border-radius: 50%;
|
|
397
|
+
animation: updateSpin 0.8s linear infinite;
|
|
398
|
+
}
|
|
399
|
+
@keyframes updateSpin {
|
|
400
|
+
to { transform: rotate(360deg); }
|
|
401
|
+
}
|
|
402
|
+
.update-overlay-text {
|
|
403
|
+
color: var(--text-secondary);
|
|
404
|
+
font-family: 'Inter', sans-serif;
|
|
405
|
+
font-size: 0.9rem;
|
|
406
|
+
text-align: center;
|
|
407
|
+
line-height: 1.5;
|
|
408
|
+
}
|
|
409
|
+
|
|
375
410
|
@media (prefers-reduced-motion: reduce) {
|
|
376
411
|
*, *::before, *::after {
|
|
377
412
|
animation-duration: 0.01ms !important;
|
|
@@ -456,6 +491,25 @@
|
|
|
456
491
|
let autoScroll = true;
|
|
457
492
|
let sessionMode = 'legacy';
|
|
458
493
|
let isAgentRunning = false;
|
|
494
|
+
let updateApplying = false;
|
|
495
|
+
|
|
496
|
+
function showUpdateOverlay() {
|
|
497
|
+
if (document.getElementById('update-overlay')) return;
|
|
498
|
+
const overlay = document.createElement('div');
|
|
499
|
+
overlay.id = 'update-overlay';
|
|
500
|
+
overlay.className = 'update-overlay';
|
|
501
|
+
const spinner = document.createElement('div');
|
|
502
|
+
spinner.className = 'update-overlay-spinner';
|
|
503
|
+
const text = document.createElement('div');
|
|
504
|
+
text.className = 'update-overlay-text';
|
|
505
|
+
text.textContent = 'Updating co:lana... Your session will resume automatically.';
|
|
506
|
+
overlay.appendChild(spinner);
|
|
507
|
+
overlay.appendChild(text);
|
|
508
|
+
document.body.appendChild(overlay);
|
|
509
|
+
// Disable chat input
|
|
510
|
+
const chatInput = document.getElementById('popout-chat-input');
|
|
511
|
+
if (chatInput) chatInput.disabled = true;
|
|
512
|
+
}
|
|
459
513
|
|
|
460
514
|
const terminalEl = document.getElementById('terminal');
|
|
461
515
|
const ptyContainer = document.getElementById('pty-terminal');
|
|
@@ -579,7 +633,14 @@
|
|
|
579
633
|
xtermInstance.focus();
|
|
580
634
|
};
|
|
581
635
|
|
|
582
|
-
ws.onclose = () => {
|
|
636
|
+
ws.onclose = (event) => {
|
|
637
|
+
// Server closed with 4001 = update in progress, suppress reconnect
|
|
638
|
+
if (event.code === 4001) {
|
|
639
|
+
updateApplying = true;
|
|
640
|
+
xtermInstance.write('\r\n\x1b[33m[co:lana] Updating — your session will resume automatically.\x1b[0m\r\n');
|
|
641
|
+
showUpdateOverlay();
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
583
644
|
if (!isAgentRunning) return;
|
|
584
645
|
if (termWsReconnectAttempts >= TERM_MAX_RETRIES) {
|
|
585
646
|
xtermInstance.write('\r\n\x1b[31m[Dashboard] Terminal reconnect failed after ' + TERM_MAX_RETRIES + ' attempts. Refresh the page to retry.\x1b[0m\r\n');
|
|
@@ -630,6 +691,7 @@
|
|
|
630
691
|
});
|
|
631
692
|
|
|
632
693
|
xtermInstance.onData((data) => {
|
|
694
|
+
if (updateApplying) return;
|
|
633
695
|
if (data === '\x1b[I' || data === '\x1b[O') return;
|
|
634
696
|
if (terminalWs && terminalWs.readyState === 1) terminalWs.send(data);
|
|
635
697
|
});
|
|
@@ -747,6 +809,17 @@
|
|
|
747
809
|
}
|
|
748
810
|
}
|
|
749
811
|
|
|
812
|
+
// Handle update applying event
|
|
813
|
+
if (msgType === 'updateApplying') {
|
|
814
|
+
updateApplying = true;
|
|
815
|
+
showUpdateOverlay();
|
|
816
|
+
// Send ack back
|
|
817
|
+
if (dashboardWs && dashboardWs.readyState === 1) {
|
|
818
|
+
dashboardWs.send(JSON.stringify({ type: 'updateAck' }));
|
|
819
|
+
}
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
822
|
+
|
|
750
823
|
if (msgType === 'sessionUpdate' && msg.sessionId === sessionId) {
|
|
751
824
|
updateStatus(msg.status);
|
|
752
825
|
}
|
|
@@ -796,6 +869,7 @@
|
|
|
796
869
|
});
|
|
797
870
|
|
|
798
871
|
async function sendChatMessage() {
|
|
872
|
+
if (updateApplying) return;
|
|
799
873
|
const input = document.getElementById('popout-chat-input');
|
|
800
874
|
const message = input.value.trim();
|
|
801
875
|
if (!message || !sessionId) return;
|