@ranger-testing/ranger-cli 2.0.5 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/build/cli.js +1 -914
  2. package/build/commands/addEnv.js +1 -1
  3. package/build/commands/authEncrypt.js +1 -36
  4. package/build/commands/clean.js +1 -1
  5. package/build/commands/config.js +1 -93
  6. package/build/commands/env.js +1 -98
  7. package/build/commands/feature.js +1 -653
  8. package/build/commands/hook.js +1 -33
  9. package/build/commands/hooks/autoPrompt.js +1 -32
  10. package/build/commands/hooks/disable.js +1 -33
  11. package/build/commands/hooks/enable.js +1 -58
  12. package/build/commands/hooks/exitPlanMode.js +1 -35
  13. package/build/commands/hooks/index.js +1 -12
  14. package/build/commands/hooks/output.js +1 -71
  15. package/build/commands/hooks/planReminder.js +1 -46
  16. package/build/commands/hooks/planStart.js +1 -30
  17. package/build/commands/hooks/postEdit.js +1 -43
  18. package/build/commands/hooks/preCompact.js +1 -30
  19. package/build/commands/hooks/sessionEnd.js +1 -25
  20. package/build/commands/hooks/sessionStart.js +1 -93
  21. package/build/commands/hooks/stopHook.js +1 -155
  22. package/build/commands/index.js +1 -12
  23. package/build/commands/login.js +1 -26
  24. package/build/commands/setupCi.js +1 -189
  25. package/build/commands/skillup.js +1 -80
  26. package/build/commands/start.js +1 -1
  27. package/build/commands/status.js +1 -198
  28. package/build/commands/update.js +1 -182
  29. package/build/commands/updateEnv.js +1 -1
  30. package/build/commands/useEnv.js +1 -1
  31. package/build/commands/utils/activeProfile.js +1 -76
  32. package/build/commands/utils/browserSessionsApi.js +1 -1
  33. package/build/commands/utils/claudeConfig.js +1 -73
  34. package/build/commands/utils/claudePlugin.js +1 -85
  35. package/build/commands/utils/crypto.js +1 -42
  36. package/build/commands/utils/desirePathLog.js +1 -139
  37. package/build/commands/utils/deviceAuth.js +1 -232
  38. package/build/commands/utils/environment.js +1 -65
  39. package/build/commands/utils/featureApi.js +1 -371
  40. package/build/commands/utils/featureReportGenerator.js +1 -204
  41. package/build/commands/utils/fixWebmDuration.js +1 -0
  42. package/build/commands/utils/git.js +1 -44
  43. package/build/commands/utils/keychain.js +1 -1
  44. package/build/commands/utils/localAgentInstallationsApi.js +1 -1
  45. package/build/commands/utils/profileMessages.js +1 -8
  46. package/build/commands/utils/profileSetupBanner.js +1 -167
  47. package/build/commands/utils/rangerRoot.js +1 -60
  48. package/build/commands/utils/reportGenerator.js +1 -130
  49. package/build/commands/utils/retry.js +1 -25
  50. package/build/commands/utils/sessionCache.js +1 -299
  51. package/build/commands/utils/settings.js +1 -313
  52. package/build/commands/utils/skillContent.js +1 -28
  53. package/build/commands/utils/skills.js +1 -1
  54. package/build/commands/utils/telemetry.js +1 -254
  55. package/build/commands/utils/userApi.js +1 -32
  56. package/build/commands/utils/version.js +1 -62
  57. package/build/commands/verifyFeature.js +1 -1343
  58. package/build/commands/verifyInBrowser.js +1 -1
  59. package/package.json +4 -1
  60. package/build/cli.js.map +0 -1
  61. package/build/commands/addEnv.js.map +0 -1
  62. package/build/commands/authEncrypt.js.map +0 -1
  63. package/build/commands/clean.js.map +0 -1
  64. package/build/commands/config.js.map +0 -1
  65. package/build/commands/env.js.map +0 -1
  66. package/build/commands/feature.js.map +0 -1
  67. package/build/commands/hook.js.map +0 -1
  68. package/build/commands/hooks/autoPrompt.js.map +0 -1
  69. package/build/commands/hooks/disable.js.map +0 -1
  70. package/build/commands/hooks/enable.js.map +0 -1
  71. package/build/commands/hooks/exitPlanMode.js.map +0 -1
  72. package/build/commands/hooks/index.js.map +0 -1
  73. package/build/commands/hooks/output.js.map +0 -1
  74. package/build/commands/hooks/planReminder.js.map +0 -1
  75. package/build/commands/hooks/planStart.js.map +0 -1
  76. package/build/commands/hooks/postEdit.js.map +0 -1
  77. package/build/commands/hooks/preCompact.js.map +0 -1
  78. package/build/commands/hooks/sessionEnd.js.map +0 -1
  79. package/build/commands/hooks/sessionStart.js.map +0 -1
  80. package/build/commands/hooks/stopHook.js.map +0 -1
  81. package/build/commands/index.js.map +0 -1
  82. package/build/commands/login.js.map +0 -1
  83. package/build/commands/setupCi.js.map +0 -1
  84. package/build/commands/skillup.js.map +0 -1
  85. package/build/commands/start.js.map +0 -1
  86. package/build/commands/status.js.map +0 -1
  87. package/build/commands/update.js.map +0 -1
  88. package/build/commands/updateEnv.js.map +0 -1
  89. package/build/commands/useEnv.js.map +0 -1
  90. package/build/commands/utils/activeProfile.js.map +0 -1
  91. package/build/commands/utils/browserSessionsApi.js.map +0 -1
  92. package/build/commands/utils/claudeConfig.js.map +0 -1
  93. package/build/commands/utils/claudePlugin.js.map +0 -1
  94. package/build/commands/utils/crypto.js.map +0 -1
  95. package/build/commands/utils/desirePathLog.js.map +0 -1
  96. package/build/commands/utils/deviceAuth.js.map +0 -1
  97. package/build/commands/utils/environment.js.map +0 -1
  98. package/build/commands/utils/featureApi.js.map +0 -1
  99. package/build/commands/utils/featureReportGenerator.js.map +0 -1
  100. package/build/commands/utils/git.js.map +0 -1
  101. package/build/commands/utils/keychain.js.map +0 -1
  102. package/build/commands/utils/localAgentInstallationsApi.js.map +0 -1
  103. package/build/commands/utils/profileMessages.js.map +0 -1
  104. package/build/commands/utils/profileSetupBanner.js.map +0 -1
  105. package/build/commands/utils/rangerRoot.js.map +0 -1
  106. package/build/commands/utils/reportGenerator.js.map +0 -1
  107. package/build/commands/utils/retry.js.map +0 -1
  108. package/build/commands/utils/sessionCache.js.map +0 -1
  109. package/build/commands/utils/settings.js.map +0 -1
  110. package/build/commands/utils/skillContent.js.map +0 -1
  111. package/build/commands/utils/skills.js.map +0 -1
  112. package/build/commands/utils/telemetry.js.map +0 -1
  113. package/build/commands/utils/userApi.js.map +0 -1
  114. package/build/commands/utils/version.js.map +0 -1
  115. package/build/commands/verifyFeature.js.map +0 -1
  116. package/build/commands/verifyInBrowser.js.map +0 -1
@@ -1 +1 @@
1
- const _0x596af7=_0x571a;(function(_0x3e54ac,_0x16249b){const _0x2f65cb=_0x571a,_0x3db7ab=_0x3e54ac();while(!![]){try{const _0x1e6cc6=parseInt(_0x2f65cb(0x1f8))/0x1*(-parseInt(_0x2f65cb(0x225))/0x2)+-parseInt(_0x2f65cb(0x1ff))/0x3*(-parseInt(_0x2f65cb(0x1f1))/0x4)+-parseInt(_0x2f65cb(0x222))/0x5+parseInt(_0x2f65cb(0x1ce))/0x6*(-parseInt(_0x2f65cb(0x1f6))/0x7)+-parseInt(_0x2f65cb(0x22e))/0x8+-parseInt(_0x2f65cb(0x202))/0x9*(parseInt(_0x2f65cb(0x20d))/0xa)+parseInt(_0x2f65cb(0x1e6))/0xb*(parseInt(_0x2f65cb(0x217))/0xc);if(_0x1e6cc6===_0x16249b)break;else _0x3db7ab['push'](_0x3db7ab['shift']());}catch(_0x4e61a){_0x3db7ab['push'](_0x3db7ab['shift']());}}}(_0x2c74,0x54d49));import{mkdir,writeFile}from'fs/promises';import{join}from'path';import{existsSync}from'fs';import{createRequire}from'module';import{spawn}from'child_process';import _0xedfa13 from'inquirer';import{getToken,storeToken}from'./utils/keychain.js';import{getCurrentUser}from'./utils/userApi.js';import{chromium}from'playwright';import{addEnv}from'./addEnv.js';import{skillup}from'./skillup.js';import{getRangerDir,findGitRoot}from'./utils/rangerRoot.js';import{runClaudeCommand,isMarketplaceAdded,isPluginInstalled}from'./utils/claudePlugin.js';import{getProjectRoot,getSkillsDir}from'./utils/claudeConfig.js';import{runDeviceAuthFlow}from'./utils/deviceAuth.js';import{findExistingEnv}from'./utils/settings.js';function _0x571a(_0x2b3af0,_0x13d6b8){_0x2b3af0=_0x2b3af0-0x1c2;const _0x2c74ee=_0x2c74();let _0x571ac7=_0x2c74ee[_0x2b3af0];return _0x571ac7;}const require=createRequire(import.meta.url),bold=_0x52e366=>_0x596af7(0x1d0)+_0x52e366+_0x596af7(0x242);function getPlaywrightVersion(){const _0x56495c={'InfVS':function(_0x31a7fc,_0x416a3e){return _0x31a7fc(_0x416a3e);}};try{const _0x44019f=require['resolve']('playwright/package.json'),_0x2571bd=_0x56495c['InfVS'](require,_0x44019f);return _0x2571bd['version'];}catch{return null;}}function installChromiumBinary(_0x45d3c8){const _0x52676c=_0x596af7,_0x3308b0={'bZlrO':function(_0x52f999,_0x454271){return _0x52f999===_0x454271;},'ucPCU':function(_0x5ab15d){return _0x5ab15d();},'aiBdm':function(_0x3fe6d8,_0x521bfe){return _0x3fe6d8(_0x521bfe);},'eshHo':'install','YObpl':_0x52676c(0x248),'LRghb':_0x52676c(0x237),'kftNv':function(_0x125e0c,_0x18355f,_0x14dc11,_0x45e5d8){return _0x125e0c(_0x18355f,_0x14dc11,_0x45e5d8);},'srmKb':_0x52676c(0x1d7),'dEFby':'error'};return new Promise((_0x3362cf,_0x14e594)=>{const _0x1e7a45=_0x52676c,_0x2ba129=_0x45d3c8?[_0x1e7a45(0x1d4)+_0x45d3c8,_0x3308b0[_0x1e7a45(0x235)],_0x1e7a45(0x237)]:[_0x3308b0['YObpl'],_0x1e7a45(0x207),_0x3308b0['LRghb']],_0x24f6bc=_0x3308b0[_0x1e7a45(0x240)](spawn,_0x1e7a45(0x1ca),_0x2ba129,{'stdio':_0x1e7a45(0x20a),'shell':_0x3308b0['bZlrO'](process[_0x1e7a45(0x24a)],'win32')});_0x24f6bc['on'](_0x3308b0['srmKb'],_0x41e6bf=>{const _0x4c68b4=_0x1e7a45;_0x3308b0[_0x4c68b4(0x21d)](_0x41e6bf,0x0)?_0x3308b0[_0x4c68b4(0x239)](_0x3362cf):_0x3308b0['aiBdm'](_0x14e594,new Error(_0x4c68b4(0x1ea)+_0x41e6bf));}),_0x24f6bc['on'](_0x3308b0[_0x1e7a45(0x1ed)],_0x2eb5ea=>{_0x14e594(_0x2eb5ea);});});}export async function authenticate(_0x487a15){const _0x14d017=_0x596af7,_0x5b590e={'izeME':function(_0x3c39c1,_0x17f071){return _0x3c39c1(_0x17f071);},'CpiDb':_0x14d017(0x1d9),'oIkSf':function(_0x17c367){return _0x17c367();},'EppBA':function(_0x1da1c7,_0x536104){return _0x1da1c7 instanceof _0x536104;},'emXKK':'Validating\x20API\x20token...'};if(!_0x487a15){const _0x1ecfc1=await getToken();if(_0x1ecfc1){const _0x19c9fe=await _0x5b590e['izeME'](getCurrentUser,_0x1ecfc1);if(_0x19c9fe['success'])return console['log']('✓\x20Already\x20authenticated\x20to\x20'+_0x19c9fe[_0x14d017(0x1ec)][_0x14d017(0x208)]),_0x1ecfc1;}const _0x68c49a=process['stdin']['isTTY']&&process[_0x14d017(0x230)]['isTTY'];if(!_0x68c49a)throw new Error(_0x5b590e['CpiDb']);try{_0x487a15=await _0x5b590e['oIkSf'](runDeviceAuthFlow);}catch(_0x585b2d){throw new Error(_0x14d017(0x243)+(_0x5b590e['EppBA'](_0x585b2d,Error)?_0x585b2d['message']:_0x585b2d));}const _0x3fade1=await getCurrentUser(_0x487a15);if(!_0x3fade1['success'])throw new Error(_0x14d017(0x234)+_0x3fade1['error']);return console['log'](_0x14d017(0x1cf)+_0x3fade1['user'][_0x14d017(0x208)]),_0x487a15;}console['log'](_0x5b590e['emXKK']);const _0x373922=await _0x5b590e[_0x14d017(0x244)](getCurrentUser,_0x487a15);if(!_0x373922['success']){if(_0x373922['status'])throw new Error('Authentication\x20failed:\x20'+_0x373922[_0x14d017(0x1db)]+_0x14d017(0x20f));else throw new Error(_0x14d017(0x23b)+_0x373922['error']+_0x14d017(0x1e0));}return console['log'](_0x14d017(0x1cf)+_0x373922['user'][_0x14d017(0x208)]),await _0x5b590e[_0x14d017(0x244)](storeToken,_0x487a15),console['log'](process['env'][_0x14d017(0x1f9)]?'✓\x20Exported\x20credentials\x20for\x20CI':_0x14d017(0x24c)),_0x487a15;}export async function ensureRangerDir(){const _0x37deda=_0x596af7,_0xad7fb4={'KKemK':function(_0x266a53){return _0x266a53();},'NdKbY':function(_0x2f7116,_0x50b204){return _0x2f7116(_0x50b204);}},_0xf7866d=_0xad7fb4[_0x37deda(0x1fd)](getRangerDir);return!_0xad7fb4['NdKbY'](existsSync,_0xf7866d)?(await mkdir(_0xf7866d,{'recursive':!![]}),console['log'](_0x37deda(0x1f2)),{'path':_0xf7866d,'installed':!![]}):(console['log']('✓\x20.ranger/\x20directory\x20already\x20exists'),{'path':_0xf7866d,'installed':![]});}export async function ensureChromium(){const _0x2eac15=_0x596af7,_0xa6d760={'Safbx':function(_0xec66e8){return _0xec66e8();},'UGDjG':_0x2eac15(0x209),'MgxkX':'install','UYtoC':function(_0xc1cf27,_0x1c4cd0){return _0xc1cf27(_0x1c4cd0);},'yhXQg':'\x0a✓\x20Playwright\x20Chromium\x20installed\x20successfully','vkIwv':'\x0a❌\x20Failed\x20to\x20install\x20Chromium:','CKGCt':_0x2eac15(0x220),'Rggtr':_0x2eac15(0x228)};let _0x4c31c1=![];try{const _0xe09c8a=chromium['executablePath']();_0x4c31c1=existsSync(_0xe09c8a);}catch{_0x4c31c1=![];}if(_0x4c31c1)return console['log']('✓\x20Playwright\x20Chromium\x20browser\x20found'),![];const _0x254078=_0xa6d760['Safbx'](getPlaywrightVersion),_0x262a13=process['stdin']['isTTY']&&process['stdout'][_0x2eac15(0x238)];let _0x3cafca=!![];if(_0x262a13){const {install:_0x4c72c0}=await _0xedfa13[_0x2eac15(0x1fa)]([{'type':_0xa6d760[_0x2eac15(0x20e)],'name':_0xa6d760[_0x2eac15(0x204)],'message':_0x254078?_0x2eac15(0x200)+_0x254078+')\x20of\x20the\x20Playwright\x20Chromium\x20browser\x20is\x20not\x20installed.\x20Install\x20it\x20now?':_0x2eac15(0x1c5),'default':!![]}]);_0x3cafca=_0x4c72c0;}else console['log']('\x0aNon-interactive\x20mode:\x20Auto-installing\x20Playwright\x20Chromium'+(_0x254078?'\x20'+_0x254078:'')+'...');if(_0x3cafca){console[_0x2eac15(0x216)](_0x2eac15(0x1e9));try{await _0xa6d760[_0x2eac15(0x22c)](installChromiumBinary,_0x254078),console[_0x2eac15(0x216)](_0xa6d760['yhXQg']);}catch(_0x123df6){console[_0x2eac15(0x1db)](_0xa6d760['vkIwv'],_0x123df6 instanceof Error?_0x123df6['message']:_0x123df6),console[_0x2eac15(0x216)](_0xa6d760['CKGCt']),_0x254078?console['log']('\x20\x20npx\x20playwright@'+_0x254078+_0x2eac15(0x24e)):console[_0x2eac15(0x216)](_0x2eac15(0x218));}}else console[_0x2eac15(0x216)](_0xa6d760['Rggtr']),console[_0x2eac15(0x216)](_0x2eac15(0x1de)),_0x254078?console[_0x2eac15(0x216)](_0x2eac15(0x212)+_0x254078+'\x20install\x20chromium'):console['log']('\x20\x20npx\x20playwright\x20install\x20chromium');return!![];}export async function writeRangerGitignore(_0x1ebcbc){const _0x3f89f2=_0x596af7,_0x53c826={'MyYCc':function(_0x193da8,_0x19b3e5,_0x54245d){return _0x193da8(_0x19b3e5,_0x54245d);},'qmuwb':'✓\x20Created\x20.ranger/.gitignore'},_0xd738ab=_0x53c826[_0x3f89f2(0x1f5)](join,_0x1ebcbc,'.gitignore'),_0x1074d1=_0x3f89f2(0x201);await writeFile(_0xd738ab,_0x1074d1),console['log'](_0x53c826['qmuwb']);}async function ensurePlugin(){const _0x23f12a=_0x596af7,_0x1f4003={'Cftxn':function(_0x3e72d3,_0x3cd881){return _0x3e72d3(_0x3cd881);},'QLYym':_0x23f12a(0x1c2),'DqgOs':function(_0x4be203,_0x23f120,_0x5c7cf0){return _0x4be203(_0x23f120,_0x5c7cf0);},'Kcsdh':_0x23f12a(0x1dd),'fwMVN':'list','oDdlk':'pluginScope','fOeMc':_0x23f12a(0x250),'whxje':_0x23f12a(0x24f),'obSeC':'Project\x20(shared\x20with\x20team\x20via\x20git)','GjTTW':'✓\x20Marketplace\x20already\x20added','AZecZ':_0x23f12a(0x24d),'tUfiy':'\x0aYou\x20can\x20install\x20manually\x20with:','mPYAj':_0x23f12a(0x1cc),'kcdtD':_0x23f12a(0x1d1),'FpnYL':'✓\x20Claude\x20Code\x20plugin\x20installed\x20successfully','IlTUX':'enable','bmIdT':function(_0x4d4474,_0x268fbd){return _0x4d4474===_0x268fbd;},'eWIYx':_0x23f12a(0x21a)},_0x4b9e04=await _0x1f4003['Cftxn'](isPluginInstalled,'ranger@trailhead');if(_0x4b9e04)return console['log'](_0x1f4003[_0x23f12a(0x213)]),![];const _0x5de712=existsSync(_0x1f4003['DqgOs'](join,getProjectRoot(),_0x23f12a(0x1c6)));let _0xf1d289;if(_0x5de712)_0xf1d289=_0x1f4003['Kcsdh'];else{console['log'](_0x23f12a(0x1da));const _0x5d1857=await _0xedfa13['prompt']([{'type':_0x1f4003['fwMVN'],'name':_0x1f4003['oDdlk'],'message':_0x1f4003['fOeMc'],'choices':[{'name':_0x1f4003['whxje'],'value':'user'},{'name':_0x1f4003['obSeC'],'value':_0x1f4003[_0x23f12a(0x1d6)]}],'default':_0x23f12a(0x1ec)}]);_0xf1d289=_0x5d1857['pluginScope'];}console['log'](_0x23f12a(0x1f4)+_0xf1d289+'\x20level)...\x0a');const _0x458998=await isMarketplaceAdded('trailhead');let _0x55cf22=_0x458998;if(_0x458998)console[_0x23f12a(0x216)](_0x1f4003[_0x23f12a(0x22a)]);else{const _0x441076=await runClaudeCommand(['plugin','marketplace',_0x1f4003['AZecZ'],'ranger-testing/trailhead']);!_0x441076[_0x23f12a(0x1c9)]?(console[_0x23f12a(0x1db)](_0x23f12a(0x210),_0x441076[_0x23f12a(0x1db)]),console['log'](_0x1f4003[_0x23f12a(0x22f)]),console['log']('\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead'),console[_0x23f12a(0x216)]('\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20'+_0xf1d289)):_0x55cf22=!![];}if(_0x55cf22){const _0x9a2bef=await runClaudeCommand(['plugin','install',_0x1f4003[_0x23f12a(0x221)],_0x23f12a(0x24b),_0xf1d289]);if(!_0x9a2bef[_0x23f12a(0x1c9)])console[_0x23f12a(0x1db)](_0x1f4003[_0x23f12a(0x1e5)],_0x9a2bef[_0x23f12a(0x1db)]),console[_0x23f12a(0x216)](_0x1f4003['tUfiy']),console[_0x23f12a(0x216)](_0x23f12a(0x1d5)+_0xf1d289);else{console[_0x23f12a(0x216)](_0x1f4003[_0x23f12a(0x1e1)]);const _0xd3de64=[_0x23f12a(0x1c8),_0x1f4003[_0x23f12a(0x215)],_0x23f12a(0x1cc)];_0x1f4003[_0x23f12a(0x246)](_0xf1d289,_0x1f4003['Kcsdh'])&&_0xd3de64[_0x23f12a(0x223)]('--scope',_0x1f4003['Kcsdh']);const _0x5c5fbc=await _0x1f4003['DqgOs'](runClaudeCommand,_0xd3de64,{'captureOutput':!![]});if(!_0x5c5fbc[_0x23f12a(0x1c9)]){const _0x4932fe=_0x5c5fbc[_0x23f12a(0x22b)]?.['includes']('already\x20enabled');!_0x4932fe&&console['error'](_0x1f4003['eWIYx'],_0x5c5fbc[_0x23f12a(0x1db)]);}console['log']('✓\x20Claude\x20Code\x20plugin\x20enabled');}}return!![];}function printProfileSetupLaterInstructions(){const _0x25bc09=_0x596af7;console['log']('\x0aIn\x20order\x20for\x20Ranger\x20to\x20verify\x20your\x20work,\x20you\x27ll\x20need\x20to\x20set\x20up\x20a\x20profile\x20later\x20with:'),console['log']('\x20\x20'+bold(_0x25bc09(0x23d))),console['log']('Make\x20sure\x20your\x20app\x20is\x20running\x20before\x20you\x20start.\x0a');}function _0x2c74(){const _0x50c05d=['\x0averification\x20to\x20check\x20its\x20work\x20as\x20it\x20builds.','KKemK','local','3eWHSTd','The\x20required\x20version\x20(','\x0a\x0a#\x20Ignore\x20local-only\x20directories\x0alocal/\x0asessions/\x0abug-bashes/\x0areports/\x0afeedback-images/\x0a\x0aactive-profile.txt\x0aactive-feature.txt\x0a.gitignore\x0a\x0a#\x20Ignore\x20plaintext\x20auth\x20files\x20(encrypted\x20.enc\x20files\x20are\x20safe\x20to\x20commit)\x0a**/auth.json\x0a','423guAWwH','hTeEi','MgxkX','BJprU','NodLz','install','organizationName','confirm','inherit','installed','\x20\x203.\x20Install\x20Claude\x20Code\x20plugin:','2830klkmAh','UGDjG','.\x20Please\x20check\x20your\x20API\x20token\x20and\x20try\x20again.','❌\x20Failed\x20to\x20add\x20marketplace:','\x20\x202.\x20Run:\x20ranger\x20skillup','\x20\x20npx\x20playwright@','QLYym','kJRuG','IlTUX','log','48LNmrXl','\x20\x20npx\x20playwright\x20install\x20chromium','Would\x20you\x20like\x20to\x20install\x20skills?','⚠\x20Failed\x20to\x20enable\x20plugin:','/ranger:enable','\x0a🚀\x20Ranger\x20Setup\x0a','bZlrO','⚠\x20No\x20git\x20repository\x20found.\x20Run\x20`ranger\x20profile\x20add\x20local`\x20from\x20your\x20project\x20directory.','trackPhaseEnd','You\x20can\x20install\x20it\x20manually\x20by\x20running:','mPYAj','2473980IqDMND','push','dir_setup','6442Glgaiv','skills','\x20\x204.\x20Run:\x20ranger\x20profile\x20add\x20local','\x0a⚠\x20Skipping\x20Chromium\x20installation.','No\x20git\x20repository\x20found.\x20Please\x20run\x20`ranger\x20setup`\x20from\x20inside\x20your\x20project\x20directory.','GjTTW','output','UYtoC','\x20\x20\x20\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead','2400464yfriVa','tUfiy','stdout','pPNGZ','✓\x20Ranger\x20skills\x20already\x20installed','\x20\x201.\x20Navigate\x20to\x20your\x20project\x20directory','Failed\x20to\x20validate\x20provisioned\x20API\x20key:\x20','eshHo','frNsY','chromium','isTTY','ucPCU','✓\x20Skipping\x20Chromium\x20check\x20(--skip-chromium)','Failed\x20to\x20connect\x20to\x20MCP\x20server:\x20','aKINc','ranger\x20profile\x20add\x20local','ready','skipChromium','kftNv','YuDtB','\x1b[0m','Authentication\x20failed:\x20','izeME','QbDVp','bmIdT','pqrxC','playwright','sapIr','platform','--scope','✓\x20Stored\x20credentials\x20locally','add','\x20install\x20chromium','User\x20(available\x20in\x20all\x20your\x20projects)','Where\x20should\x20the\x20plugin\x20be\x20installed?','✓\x20Claude\x20Code\x20plugin\x20already\x20installed','zNaaH','sASnG','The\x20required\x20Playwright\x20Chromium\x20browser\x20is\x20not\x20installed.\x20Install\x20it\x20now?','.claude','kPpXU','plugin','success','npx','jQHrB','ranger@trailhead','\x0aIn\x20Claude\x20Code,\x20run\x20','202116uJtLwM','✓\x20Authenticated\x20to\x20','\x1b[1m','❌\x20Failed\x20to\x20install\x20plugin:','YNwnG','to\x20access\x20your\x20app.\x20If\x20the\x20part\x20of\x20your\x20app\x20you\x20want\x20to\x20test\x20is\x20behind','playwright@','\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20','Kcsdh','close','dyplw','No\x20token\x20provided\x20and\x20running\x20in\x20non-interactive\x20mode.\x20In\x20CI,\x20pass\x20a\x20token:\x20ranger\x20setup\x20[token].\x20Or\x20set\x20the\x20RANGER_CLI_TOKEN\x20environment\x20variable.','\x0a📦\x20Claude\x20Code\x20Plugin\x0a','error','nAkRp','project','You\x20will\x20need\x20to\x20install\x20it\x20before\x20using\x20Ranger:','\x0a✅\x20Ranger\x20setup\x20complete!\x0a','.\x20Please\x20check\x20your\x20network\x20connection\x20and\x20server\x20URL.','FpnYL','Ocpjb','\x0aNext\x20steps:','NDgPC','kcdtD','2512609RCbXEJ','\x0aagent\x20like\x20usual.\x20Claude\x20will\x20create\x20a\x20feature\x20review\x20with','\x0a❌\x20Profile\x20setup\x20failed:','\x0aInstalling\x20Chromium\x20browser...\x0a','Installation\x20failed\x20with\x20exit\x20code\x20','\x0aA\x20profile\x20gives\x20Ranger\x27s\x20browser\x20agent\x20information\x20about\x20how','user','dEFby','trackPhaseStart','SKILL.md','✓\x20Local\x20profile\x20already\x20exists','2774212suRtoP','✓\x20Created\x20.ranger/\x20directory','split','\x0aInstalling\x20Claude\x20Code\x20plugin\x20(','MyYCc','49cjRBMb','AWYrF','67kUQfod','GITHUB_ENV','prompt','fMtVU'];_0x2c74=function(){return _0x50c05d;};return _0x2c74();}async function ensureLocalEnv(_0x4c64a4){const _0x1294d4=_0x596af7,_0x30c499={'tOLpm':_0x1294d4(0x1fe),'kPpXU':_0x1294d4(0x1d3),'fMtVU':'auth,\x20you\x20can\x20log\x20in\x20and\x20we\x27ll\x20save\x20the\x20session\x20state\x20for\x20Ranger\x20to','nnVzv':'use\x20until\x20the\x20session\x20expires.\x0a','KGEKl':'You\x27ll\x20need\x20the\x20app\x20to\x20be\x20running\x20to\x20set\x20up\x20the\x20profile.','NSJkT':_0x1294d4(0x209),'aKINc':'wantsProfile','EoTLd':function(_0x863a6f,_0x14af2a){return _0x863a6f instanceof _0x14af2a;},'dyplw':function(_0x17b161){return _0x17b161();}};if(!findGitRoot())return console[_0x1294d4(0x216)](_0x1294d4(0x21e)),{'ready':![],'installed':![]};if(findExistingEnv(_0x30c499['tOLpm'],{'locations':[_0x1294d4(0x1fe)]}))return console[_0x1294d4(0x216)](_0x1294d4(0x1f0)),{'ready':!![],'installed':![]};console['log'](_0x1294d4(0x1eb)),console[_0x1294d4(0x216)](_0x30c499[_0x1294d4(0x1c7)]),console['log'](_0x30c499[_0x1294d4(0x1fb)]),console[_0x1294d4(0x216)](_0x30c499['nnVzv']),console['log'](_0x30c499['KGEKl']);const {wantsProfile:_0x58dbbc}=await _0xedfa13[_0x1294d4(0x1fa)]([{'type':_0x30c499['NSJkT'],'name':_0x30c499[_0x1294d4(0x23c)],'message':'Would\x20you\x20like\x20to\x20set\x20up\x20the\x20profile\x20now?','default':!![]}]);if(!_0x58dbbc)return printProfileSetupLaterInstructions(),{'ready':![],'installed':![]};try{return await addEnv(_0x1294d4(0x1fe),{},_0x4c64a4),{'ready':!![],'installed':!![]};}catch(_0x3e1f63){return console[_0x1294d4(0x1db)](_0x1294d4(0x1e8),_0x30c499['EoTLd'](_0x3e1f63,Error)?_0x3e1f63['message']:_0x3e1f63),_0x30c499[_0x1294d4(0x1d8)](printProfileSetupLaterInstructions),{'ready':![],'installed':![]};}}async function ensureSkills(){const _0x2c7468=_0x596af7,_0x393fe2={'kJRuG':'ranger','jTvVC':'SKILL.md','Mjwed':function(_0x2bd2e5,_0x38b30f){return _0x2bd2e5(_0x38b30f);},'nSGIE':function(_0x4cb30d,_0x1b8bc9,_0x22131c,_0x15a47d){return _0x4cb30d(_0x1b8bc9,_0x22131c,_0x15a47d);},'rqUno':function(_0x20fd77,_0x532050){return _0x20fd77(_0x532050);},'pqrxC':'project','JVBip':function(_0x55ad6a,_0x338172){return _0x55ad6a||_0x338172;},'sASnG':function(_0x5a203c,_0x37d9f1){return _0x5a203c(_0x37d9f1);},'NDgPC':_0x2c7468(0x219)},_0x5ea5d0=existsSync(join(getSkillsDir('user'),_0x393fe2[_0x2c7468(0x214)],_0x393fe2['jTvVC'])),_0x3bfd1b=_0x393fe2['Mjwed'](existsSync,_0x393fe2['nSGIE'](join,_0x393fe2['rqUno'](getSkillsDir,_0x393fe2[_0x2c7468(0x247)]),_0x393fe2['kJRuG'],_0x2c7468(0x1ef)));if(_0x393fe2['JVBip'](_0x5ea5d0,_0x3bfd1b))return console[_0x2c7468(0x216)](_0x2c7468(0x232)),![];const _0xa5e41b=_0x393fe2[_0x2c7468(0x1c4)](existsSync,join(getProjectRoot(),'.claude'));if(_0xa5e41b)await _0x393fe2['rqUno'](skillup,{'autoInstall':'project','suppressUsage':!![]});else{const {wantsSkillup:_0x902703}=await _0xedfa13[_0x2c7468(0x1fa)]([{'type':_0x2c7468(0x209),'name':'wantsSkillup','message':_0x393fe2[_0x2c7468(0x1e4)],'default':!![]}]);_0x902703&&await _0x393fe2[_0x2c7468(0x1c4)](skillup,{'suppressUsage':!![]});}return!![];}export async function start(_0x324cd2,_0x44767f,_0xc690d6){const _0x4d9df5=_0x596af7,_0x431eec={'qFaaR':_0x4d9df5(0x21c),'aqhSA':function(_0x191c8e){return _0x191c8e();},'WtTDR':_0x4d9df5(0x229),'AWYrF':'auth','ugzQJ':function(_0x4eff14){return _0x4eff14();},'jQHrB':_0x4d9df5(0x237),'NodLz':_0x4d9df5(0x23a),'Ocpjb':function(_0x13806b,_0x583944){return _0x13806b(_0x583944);},'YuDtB':'3|1|0|8|2|7|6|4|5','nAkRp':_0x4d9df5(0x233),'QbDVp':'Non-interactive\x20mode\x20detected.\x20Skipping\x20optional\x20setup\x20prompts.','OZGPp':_0x4d9df5(0x227),'QlWCj':'\x20\x20\x20\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x0a','hTeEi':_0x4d9df5(0x22d),'frNsY':_0x4d9df5(0x211),'KwhYj':function(_0x810c8b){return _0x810c8b();},'sapIr':'plugin','XNoyH':function(_0x1d9038){return _0x1d9038();},'WlWpp':function(_0x414cd0,_0x45ae74,_0x6d767){return _0x414cd0(_0x45ae74,_0x6d767);},'BJprU':'.ranger','apAHu':function(_0x4ff99a,_0x34c554){return _0x4ff99a(_0x34c554);},'zNaaH':function(_0x41054a,_0x56c0fd,_0x371175){return _0x41054a(_0x56c0fd,_0x371175);},'YNwnG':'profile','pPNGZ':_0x4d9df5(0x21b),'sXaWH':function(_0x43d987,_0x3707a7){return _0x43d987+_0x3707a7;}};console[_0x4d9df5(0x216)](_0x431eec['qFaaR']);if(!_0x431eec['aqhSA'](findGitRoot))throw new Error(_0x431eec['WtTDR']);_0xc690d6?.[_0x4d9df5(0x1ee)](_0x431eec[_0x4d9df5(0x1f7)]),await authenticate(_0x324cd2),_0xc690d6?.['trackPhaseEnd'](_0x431eec[_0x4d9df5(0x1f7)]),_0xc690d6?.['trackPhaseStart'](_0x4d9df5(0x224));const {path:_0x354dae,installed:_0x57a919}=await _0x431eec['ugzQJ'](ensureRangerDir);_0xc690d6?.[_0x4d9df5(0x21f)](_0x4d9df5(0x224),{'installed':_0x57a919}),_0xc690d6?.['trackPhaseStart'](_0x431eec[_0x4d9df5(0x1cb)]);let _0x30a799=![];_0x44767f?.[_0x4d9df5(0x23f)]?console[_0x4d9df5(0x216)](_0x431eec[_0x4d9df5(0x206)]):_0x30a799=await ensureChromium();_0xc690d6?.[_0x4d9df5(0x21f)](_0x431eec['jQHrB'],{'installed':_0x30a799,'skipped':!!_0x44767f?.['skipChromium']}),await _0x431eec[_0x4d9df5(0x1e2)](writeRangerGitignore,_0x354dae),console[_0x4d9df5(0x216)](_0x4d9df5(0x1df));const _0x5b0fe8=process['stdin']['isTTY']&&process['stdout']['isTTY'];if(!_0x5b0fe8){const _0x13d141=_0x431eec[_0x4d9df5(0x241)][_0x4d9df5(0x1f3)]('|');let _0x1ef8c5=0x0;while(!![]){switch(_0x13d141[_0x1ef8c5++]){case'0':console[_0x4d9df5(0x216)](_0x431eec[_0x4d9df5(0x1dc)]);continue;case'1':console['log'](_0x4d9df5(0x1e3));continue;case'2':console['log'](_0x4d9df5(0x20c));continue;case'3':console['log'](_0x431eec[_0x4d9df5(0x245)]);continue;case'4':console[_0x4d9df5(0x216)](_0x431eec['OZGPp']);continue;case'5':return;case'6':console['log'](_0x431eec['QlWCj']);continue;case'7':console['log'](_0x431eec[_0x4d9df5(0x203)]);continue;case'8':console[_0x4d9df5(0x216)](_0x431eec[_0x4d9df5(0x236)]);continue;}break;}}_0xc690d6?.[_0x4d9df5(0x1ee)]('plugin');const _0x1ce3f8=await _0x431eec['KwhYj'](ensurePlugin);_0xc690d6?.['trackPhaseEnd'](_0x431eec[_0x4d9df5(0x249)],{'installed':_0x1ce3f8}),_0xc690d6?.[_0x4d9df5(0x1ee)](_0x4d9df5(0x226));const _0x374444=await _0x431eec['XNoyH'](ensureSkills);_0xc690d6?.['trackPhaseEnd'](_0x4d9df5(0x226),{'installed':_0x374444});const _0x5cf23f=findGitRoot();if(_0x5cf23f){const _0x29effe=_0x431eec['WlWpp'](join,_0x5cf23f,_0x431eec[_0x4d9df5(0x205)]);!_0x431eec['apAHu'](existsSync,_0x29effe)&&await _0x431eec[_0x4d9df5(0x1c3)](mkdir,_0x29effe,{'recursive':!![]});}_0xc690d6?.['trackPhaseStart'](_0x431eec[_0x4d9df5(0x1d2)]);const _0x47d47e=await ensureLocalEnv(_0xc690d6);_0xc690d6?.[_0x4d9df5(0x21f)](_0x431eec['YNwnG'],{'installed':_0x47d47e[_0x4d9df5(0x20b)]});const _0x3ab10c=_0x47d47e[_0x4d9df5(0x23e)],_0x449864=bold(_0x431eec[_0x4d9df5(0x231)]);_0x3ab10c&&console[_0x4d9df5(0x216)]('\x0a✅\x20You\x27re\x20ready\x20to\x20start\x20using\x20Ranger\x20Feature\x20Review.'),console[_0x4d9df5(0x216)](_0x431eec['sXaWH'](_0x431eec['sXaWH'](_0x4d9df5(0x1cd)+_0x449864+'\x20and\x20prompt\x20the\x20coding'+_0x4d9df5(0x1e7),'\x0ascenarios\x20describing\x20what\x20to\x20verify\x20and\x20then\x20run\x20browser'),_0x4d9df5(0x1fc)));}
1
+ const _0xd2d2b0=_0x2f8c;(function(_0x262c7d,_0x8da2cb){const _0x3723c9=_0x2f8c,_0x338312=_0x262c7d();while(!![]){try{const _0x565b9b=parseInt(_0x3723c9(0x13f))/0x1*(parseInt(_0x3723c9(0x12c))/0x2)+-parseInt(_0x3723c9(0x15d))/0x3*(-parseInt(_0x3723c9(0xf7))/0x4)+-parseInt(_0x3723c9(0x161))/0x5*(parseInt(_0x3723c9(0x11a))/0x6)+-parseInt(_0x3723c9(0xf0))/0x7+parseInt(_0x3723c9(0xeb))/0x8*(-parseInt(_0x3723c9(0xf8))/0x9)+-parseInt(_0x3723c9(0x133))/0xa+-parseInt(_0x3723c9(0x11c))/0xb*(-parseInt(_0x3723c9(0x13d))/0xc);if(_0x565b9b===_0x8da2cb)break;else _0x338312['push'](_0x338312['shift']());}catch(_0x4c2f44){_0x338312['push'](_0x338312['shift']());}}}(_0x2268,0xd3179));import{mkdir,writeFile}from'fs/promises';function _0x2f8c(_0x4b2580,_0x4455da){_0x4b2580=_0x4b2580-0xe7;const _0x226855=_0x2268();let _0x2f8c1f=_0x226855[_0x4b2580];return _0x2f8c1f;}import{join}from'path';import{existsSync}from'fs';import{createRequire}from'module';import{spawn}from'child_process';import _0xa84b39 from'inquirer';import{getToken,storeToken}from'./utils/keychain.js';import{getCurrentUser}from'./utils/userApi.js';import{chromium}from'playwright';import{addEnv}from'./addEnv.js';import{skillup}from'./skillup.js';import{getRangerDir,findGitRoot}from'./utils/rangerRoot.js';import{runClaudeCommand,isMarketplaceAdded,isPluginInstalled}from'./utils/claudePlugin.js';import{getProjectRoot,getSkillsDir}from'./utils/claudeConfig.js';import{runDeviceAuthFlow}from'./utils/deviceAuth.js';import{findExistingEnv}from'./utils/settings.js';const require=createRequire(import.meta.url),bold=_0xb4ae64=>_0xd2d2b0(0xff)+_0xb4ae64+_0xd2d2b0(0x162);function getPlaywrightVersion(){const _0x4c091e=_0xd2d2b0;try{const _0x5efdf4=require['resolve']('playwright/package.json'),_0x355cce=require(_0x5efdf4);return _0x355cce[_0x4c091e(0x131)];}catch{return null;}}function installChromiumBinary(_0x11735c){const _0x305d9d=_0xd2d2b0,_0x5a041d={'BUTFm':_0x305d9d(0x121),'RhHgg':'playwright','UobsO':function(_0x425926,_0x2283a8,_0x493d56,_0xecdd21){return _0x425926(_0x2283a8,_0x493d56,_0xecdd21);},'IxMSp':'error'};return new Promise((_0x232325,_0x4a0880)=>{const _0x1307a7=_0x305d9d,_0xd5fe42=_0x11735c?['playwright@'+_0x11735c,_0x1307a7(0xe7),_0x5a041d['BUTFm']]:[_0x5a041d[_0x1307a7(0x144)],'install',_0x1307a7(0x121)],_0x521336=_0x5a041d['UobsO'](spawn,'npx',_0xd5fe42,{'stdio':_0x1307a7(0x16b),'shell':process['platform']===_0x1307a7(0x14c)});_0x521336['on'](_0x1307a7(0x11f),_0x45a87f=>{const _0x44bb08=_0x1307a7;_0x45a87f===0x0?_0x232325():_0x4a0880(new Error(_0x44bb08(0x101)+_0x45a87f));}),_0x521336['on'](_0x5a041d['IxMSp'],_0x12ec7e=>{_0x4a0880(_0x12ec7e);});});}export async function authenticate(_0xf79db8){const _0x55770e=_0xd2d2b0,_0xcc1dbe={'tIyZc':function(_0x27d9ae){return _0x27d9ae();},'WniLM':_0x55770e(0x117),'dTkTZ':function(_0x413629){return _0x413629();},'fPeIU':function(_0x5d3a0b,_0xdc57e){return _0x5d3a0b instanceof _0xdc57e;},'xIjew':'✓\x20Exported\x20credentials\x20for\x20CI','uTvwt':_0x55770e(0x15a)};if(!_0xf79db8){const _0x17d1f7=await _0xcc1dbe['tIyZc'](getToken);if(_0x17d1f7){const _0x5c16c1=await getCurrentUser(_0x17d1f7);if(_0x5c16c1[_0x55770e(0x129)])return console[_0x55770e(0x147)]('✓\x20Already\x20authenticated\x20to\x20'+_0x5c16c1[_0x55770e(0x139)][_0x55770e(0xef)]),{'token':_0x17d1f7,'method':_0xcc1dbe['WniLM']};}try{_0xf79db8=await _0xcc1dbe['dTkTZ'](runDeviceAuthFlow);}catch(_0x160560){throw new Error('Authentication\x20failed:\x20'+(_0xcc1dbe[_0x55770e(0x10e)](_0x160560,Error)?_0x160560[_0x55770e(0x15b)]:_0x160560));}const _0x40b5c6=await getCurrentUser(_0xf79db8);if(!_0x40b5c6['success'])throw new Error('Failed\x20to\x20validate\x20provisioned\x20API\x20key:\x20'+_0x40b5c6['error']);return console['log']('✓\x20Authenticated\x20to\x20'+_0x40b5c6[_0x55770e(0x139)]['organizationName']),{'token':_0xf79db8,'method':_0x55770e(0x15e)};}console['log'](_0x55770e(0x12b));const _0x3db898=await getCurrentUser(_0xf79db8);if(!_0x3db898['success']){if(_0x3db898['status'])throw new Error(_0x55770e(0x138)+_0x3db898['error']+'.\x20Please\x20check\x20your\x20API\x20token\x20and\x20try\x20again.');else throw new Error('Failed\x20to\x20connect\x20to\x20MCP\x20server:\x20'+_0x3db898['error']+'.\x20Please\x20check\x20your\x20network\x20connection\x20and\x20server\x20URL.');}return console[_0x55770e(0x147)](_0x55770e(0x112)+_0x3db898[_0x55770e(0x139)]['organizationName']),await storeToken(_0xf79db8),console[_0x55770e(0x147)](process['env']['GITHUB_ENV']?_0xcc1dbe[_0x55770e(0x149)]:_0xcc1dbe['uTvwt']),{'token':_0xf79db8,'method':_0x55770e(0x130)};}export async function ensureRangerDir(){const _0x30569c=_0xd2d2b0,_0x1992a7={'TtPNR':function(_0x56af34){return _0x56af34();},'bzUYt':function(_0x568210,_0x16dc75,_0x3f4f97){return _0x568210(_0x16dc75,_0x3f4f97);}},_0x87dc64=_0x1992a7['TtPNR'](getRangerDir);return!existsSync(_0x87dc64)?(await _0x1992a7['bzUYt'](mkdir,_0x87dc64,{'recursive':!![]}),console[_0x30569c(0x147)]('✓\x20Created\x20.ranger/\x20directory'),{'path':_0x87dc64,'installed':!![]}):(console[_0x30569c(0x147)]('✓\x20.ranger/\x20directory\x20already\x20exists'),{'path':_0x87dc64,'installed':![]});}export async function ensureChromium(){const _0x49fae8=_0xd2d2b0,_0x49283b={'DerdL':function(_0x53f6f9,_0x505b32){return _0x53f6f9(_0x505b32);},'TzsQw':function(_0x31d0cd){return _0x31d0cd();},'aLGab':_0x49fae8(0x10d),'SOUEu':'The\x20required\x20Playwright\x20Chromium\x20browser\x20is\x20not\x20installed.\x20Install\x20it\x20now?','ltUyG':'\x0aInstalling\x20Chromium\x20browser...\x0a','rYzJX':_0x49fae8(0x111),'BBfoz':function(_0x46e976,_0x57a781){return _0x46e976 instanceof _0x57a781;},'xcvfC':'You\x20can\x20install\x20it\x20manually\x20by\x20running:','yTLQM':'You\x20will\x20need\x20to\x20install\x20it\x20before\x20using\x20Ranger:'};let _0x1042a8=![];try{const _0x567aef=chromium[_0x49fae8(0xe9)]();_0x1042a8=_0x49283b[_0x49fae8(0x106)](existsSync,_0x567aef);}catch{_0x1042a8=![];}if(_0x1042a8)return console[_0x49fae8(0x147)](_0x49fae8(0x12f)),![];const _0x29408d=_0x49283b['TzsQw'](getPlaywrightVersion),_0x4cc3d4=process['stdin']['isTTY']&&process[_0x49fae8(0x123)]['isTTY'];let _0x309439=!![];if(_0x4cc3d4){const {install:_0x50cb63}=await _0xa84b39[_0x49fae8(0x100)]([{'type':_0x49283b['aLGab'],'name':'install','message':_0x29408d?_0x49fae8(0x122)+_0x29408d+_0x49fae8(0x158):_0x49283b['SOUEu'],'default':!![]}]);_0x309439=_0x50cb63;}else console[_0x49fae8(0x147)](_0x49fae8(0x119)+(_0x29408d?'\x20'+_0x29408d:'')+_0x49fae8(0x15f));if(_0x309439){console['log'](_0x49283b['ltUyG']);try{await installChromiumBinary(_0x29408d),console['log'](_0x49283b[_0x49fae8(0x107)]);}catch(_0x55500f){console['error']('\x0a❌\x20Failed\x20to\x20install\x20Chromium:',_0x49283b['BBfoz'](_0x55500f,Error)?_0x55500f[_0x49fae8(0x15b)]:_0x55500f),console[_0x49fae8(0x147)](_0x49283b[_0x49fae8(0x16a)]),_0x29408d?console[_0x49fae8(0x147)]('\x20\x20npx\x20playwright@'+_0x29408d+_0x49fae8(0x10b)):console[_0x49fae8(0x147)]('\x20\x20npx\x20playwright\x20install\x20chromium');}}else console[_0x49fae8(0x147)]('\x0a⚠\x20Skipping\x20Chromium\x20installation.'),console[_0x49fae8(0x147)](_0x49283b['yTLQM']),_0x29408d?console['log'](_0x49fae8(0x115)+_0x29408d+'\x20install\x20chromium'):console['log']('\x20\x20npx\x20playwright\x20install\x20chromium');return!![];}export async function writeRangerGitignore(_0x8887c){const _0x5cde13=_0xd2d2b0,_0x7f1c10={'fQnDK':function(_0x42070d,_0x5ed52a,_0x2a6df1){return _0x42070d(_0x5ed52a,_0x2a6df1);},'RTpux':_0x5cde13(0x109),'XWYMI':_0x5cde13(0x153)},_0x279bc5=_0x7f1c10['fQnDK'](join,_0x8887c,_0x7f1c10['RTpux']),_0x5a7445='\x0a\x0a#\x20Ignore\x20local-only\x20directories\x0alocal/\x0asessions/\x0abug-bashes/\x0areports/\x0afeedback-images/\x0a\x0aactive-profile.txt\x0aactive-feature.txt\x0a.gitignore\x0a\x0a#\x20Ignore\x20plaintext\x20auth\x20files\x20(encrypted\x20.enc\x20files\x20are\x20safe\x20to\x20commit)\x0a**/auth.json\x0a';await writeFile(_0x279bc5,_0x5a7445),console[_0x5cde13(0x147)](_0x7f1c10[_0x5cde13(0x118)]);}async function ensurePlugin(_0x390661){const _0x4cb554=_0xd2d2b0,_0x5612f3={'WVlsY':function(_0x496396,_0xd14f9d){return _0x496396(_0xd14f9d);},'PSFrc':'✓\x20Claude\x20Code\x20plugin\x20already\x20installed','YINTu':function(_0x5a015d,_0x1411d7,_0x52604f){return _0x5a015d(_0x1411d7,_0x52604f);},'ZeeuY':function(_0x405cc9){return _0x405cc9();},'evoQg':'\x0a📦\x20Claude\x20Code\x20Plugin\x0a','QlzAX':'list','sPnAV':'Where\x20should\x20the\x20plugin\x20be\x20installed?','haUyq':'User\x20(available\x20in\x20all\x20your\x20projects)','PZgvx':_0x4cb554(0x139),'daQpe':_0x4cb554(0xf5),'wqqpT':_0x4cb554(0xf2),'ozQHj':function(_0x2fb005,_0x1561c2){return _0x2fb005(_0x1561c2);},'RoCIz':'marketplace','UoIfK':'add','uXqyq':'❌\x20Failed\x20to\x20add\x20marketplace:','xEzMr':_0x4cb554(0xe7),'bSKgf':'ranger@trailhead','JxLrs':'--scope','FuRks':'❌\x20Failed\x20to\x20install\x20plugin:','DPDXz':_0x4cb554(0x143),'SQiqP':'enable','HUHrv':function(_0x572de7,_0x3184a9){return _0x572de7===_0x3184a9;},'GqAhE':function(_0x19a171,_0x23bd7f,_0x35f659){return _0x19a171(_0x23bd7f,_0x35f659);},'KKXtc':_0x4cb554(0x163)},_0x247a46=await _0x5612f3[_0x4cb554(0x135)](isPluginInstalled,_0x4cb554(0x167));if(_0x247a46)return console['log'](_0x5612f3[_0x4cb554(0xed)]),![];const _0x11d457=existsSync(_0x5612f3[_0x4cb554(0x10a)](join,_0x5612f3['ZeeuY'](getProjectRoot),'.claude'));let _0x544084;if(_0x390661)_0x544084=_0x390661;else{if(_0x11d457)_0x544084=_0x4cb554(0x159);else{console['log'](_0x5612f3['evoQg']);const _0x243a1c=await _0xa84b39[_0x4cb554(0x100)]([{'type':_0x5612f3['QlzAX'],'name':_0x4cb554(0x126),'message':_0x5612f3[_0x4cb554(0x14a)],'choices':[{'name':_0x5612f3['haUyq'],'value':_0x5612f3['PZgvx']},{'name':_0x5612f3[_0x4cb554(0x155)],'value':'project'}],'default':_0x5612f3[_0x4cb554(0xf6)]}]);_0x544084=_0x243a1c[_0x4cb554(0x126)];}}console[_0x4cb554(0x147)](_0x4cb554(0x11d)+_0x544084+_0x4cb554(0x169));const _0x2e59e3=await _0x5612f3[_0x4cb554(0x135)](isMarketplaceAdded,_0x4cb554(0x11b));let _0x23fb6b=_0x2e59e3;if(_0x2e59e3)console['log'](_0x5612f3[_0x4cb554(0x157)]);else{const _0x3b3cef=await _0x5612f3[_0x4cb554(0x156)](runClaudeCommand,['plugin',_0x5612f3[_0x4cb554(0x142)],_0x5612f3['UoIfK'],'ranger-testing/trailhead']);!_0x3b3cef['success']?(console['error'](_0x5612f3['uXqyq'],_0x3b3cef[_0x4cb554(0x12e)]),console[_0x4cb554(0x147)](_0x4cb554(0x166)),console['log']('\x20\x20claude\x20plugin\x20marketplace\x20add\x20ranger-testing/trailhead'),console['log']('\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20'+_0x544084)):_0x23fb6b=!![];}if(_0x23fb6b){const _0x2d7a26=await runClaudeCommand([_0x4cb554(0x13c),_0x5612f3[_0x4cb554(0xee)],_0x5612f3[_0x4cb554(0x14d)],_0x5612f3[_0x4cb554(0x127)],_0x544084]);if(!_0x2d7a26[_0x4cb554(0x129)])console['error'](_0x5612f3['FuRks'],_0x2d7a26[_0x4cb554(0x12e)]),console[_0x4cb554(0x147)](_0x4cb554(0x166)),console['log']('\x20\x20claude\x20plugin\x20install\x20ranger@trailhead\x20--scope\x20'+_0x544084);else{console['log'](_0x5612f3['DPDXz']);const _0x17aeb4=['plugin',_0x5612f3[_0x4cb554(0x14f)],_0x5612f3[_0x4cb554(0x14d)]];_0x5612f3['HUHrv'](_0x544084,_0x4cb554(0x159))&&_0x17aeb4[_0x4cb554(0x128)](_0x5612f3['JxLrs'],_0x4cb554(0x159));const _0x4f612f=await _0x5612f3[_0x4cb554(0x145)](runClaudeCommand,_0x17aeb4,{'captureOutput':!![]});if(!_0x4f612f['success']){const _0x13f87d=_0x4f612f[_0x4cb554(0x151)]?.['includes']('already\x20enabled');!_0x13f87d&&console['error'](_0x4cb554(0xfb),_0x4f612f[_0x4cb554(0x12e)]);}console['log'](_0x5612f3[_0x4cb554(0x150)]);}}return!![];}function printProfileSetupLaterInstructions(){const _0x4ccf60=_0xd2d2b0,_0x346df9={'QDEmZ':function(_0x25520c,_0x1fdff2){return _0x25520c(_0x1fdff2);},'nBkdn':_0x4ccf60(0x154)};console[_0x4ccf60(0x147)]('\x0aIn\x20order\x20for\x20Ranger\x20to\x20verify\x20your\x20work,\x20you\x27ll\x20need\x20to\x20set\x20up\x20a\x20profile\x20later\x20with:'),console['log']('\x20\x20'+_0x346df9['QDEmZ'](bold,_0x4ccf60(0x105))),console[_0x4ccf60(0x147)](_0x346df9[_0x4ccf60(0x165)]);}function _0x2268(){const _0x4d7d70=['72jVUqPH','DUorr','1jVwYzC','git_check','GgDhk','RoCIz','✓\x20Claude\x20Code\x20plugin\x20installed\x20successfully','RhHgg','GqAhE','\x20and\x20prompt\x20the\x20coding','log','trackPhaseStart','xIjew','sPnAV','\x0ascenarios\x20describing\x20what\x20to\x20verify\x20and\x20then\x20run\x20browser','win32','bSKgf','oOzzA','SQiqP','KKXtc','output','Would\x20you\x20like\x20to\x20set\x20up\x20the\x20profile\x20now?','✓\x20Created\x20.ranger/.gitignore','Make\x20sure\x20your\x20app\x20is\x20running\x20before\x20you\x20start.\x0a','daQpe','ozQHj','wqqpT',')\x20of\x20the\x20Playwright\x20Chromium\x20browser\x20is\x20not\x20installed.\x20Install\x20it\x20now?','project','✓\x20Stored\x20credentials\x20locally','message','Non-interactive\x20mode:\x20Skipping\x20profile\x20setup.\x20To\x20set\x20up\x20a\x20profile,\x20pass\x20--url\x20or\x20run\x20later:','47343aPqcZf','device_auth','...','INhXS','1725AXWrSr','\x1b[0m','✓\x20Claude\x20Code\x20plugin\x20enabled','isTTY','nBkdn','\x0aYou\x20can\x20install\x20manually\x20with:','ranger@trailhead','KbkIZ','\x20level)...\x0a','xcvfC','inherit','install','ranger','executablePath','✓\x20Local\x20profile\x20already\x20exists','8jpVKlH','vedfN','PSFrc','xEzMr','organizationName','5105156hTaktq','JkNYN','✓\x20Marketplace\x20already\x20added','fQxQI','trackPhaseEnd','Project\x20(shared\x20with\x20team\x20via\x20git)','PZgvx','84JBVWlv','13336614SnDLAf','VXqcF','igeTG','⚠\x20Failed\x20to\x20enable\x20plugin:','\x0a✅\x20Ranger\x20setup\x20complete!\x0a','Awkzt','GHNeL','\x1b[1m','prompt','Installation\x20failed\x20with\x20exit\x20code\x20','skipped','\x0a❌\x20Profile\x20setup\x20failed:','url','ranger\x20profile\x20add\x20local','DerdL','rYzJX','xXXIG','.gitignore','YINTu','\x20install\x20chromium','force','confirm','fPeIU','jODGx','stdin','\x0a✓\x20Playwright\x20Chromium\x20installed\x20successfully','✓\x20Authenticated\x20to\x20','method','scope','\x20\x20npx\x20playwright@','skills','existing_token','XWYMI','\x0aNon-interactive\x20mode:\x20Auto-installing\x20Playwright\x20Chromium','5532rnXhEO','trailhead','5683326MoQIox','\x0aInstalling\x20Claude\x20Code\x20plugin\x20(','\x0aA\x20profile\x20gives\x20Ranger\x27s\x20browser\x20agent\x20information\x20about\x20how','close','ready','chromium','The\x20required\x20version\x20(','stdout','PeiyA','KAUmi','pluginScope','JxLrs','push','success','PndcZ','Validating\x20API\x20token...','603342OUriFz','auth','error','✓\x20Playwright\x20Chromium\x20browser\x20found','provided_token','version','/ranger:enable','3391910pTWFni','LHcoB','WVlsY','wantsProfile','gXbej','Authentication\x20failed:\x20','user','local','wantsSkillup','plugin'];_0x2268=function(){return _0x4d7d70;};return _0x2268();}async function ensureLocalEnv(_0x22107,_0x29a845){const _0x45a92e=_0xd2d2b0,_0x2e99a0={'ygiJA':function(_0x17d596,_0x37c6e8,_0x210d35){return _0x17d596(_0x37c6e8,_0x210d35);},'KAUmi':_0x45a92e(0x13a),'DUorr':_0x45a92e(0xea),'LhUYh':_0x45a92e(0x11e),'ewCgk':'auth,\x20you\x20can\x20log\x20in\x20and\x20we\x27ll\x20save\x20the\x20session\x20state\x20for\x20Ranger\x20to','UfQFl':'use\x20until\x20the\x20session\x20expires.\x0a','gXbej':'You\x27ll\x20need\x20the\x20app\x20to\x20be\x20running\x20to\x20set\x20up\x20the\x20profile.','LHcoB':_0x45a92e(0x10d),'OdJue':function(_0x8875a6){return _0x8875a6();},'hGDKT':function(_0x5e5451,_0xaee878,_0x1fe523,_0x158040){return _0x5e5451(_0xaee878,_0x1fe523,_0x158040);},'xXXIG':function(_0x45ec53,_0x4715d4){return _0x45ec53 instanceof _0x4715d4;},'GAalD':function(_0x3f364e){return _0x3f364e();}};if(!findGitRoot())return console['log']('⚠\x20No\x20git\x20repository\x20found.\x20Run\x20`ranger\x20profile\x20add\x20local`\x20from\x20your\x20project\x20directory.'),{'ready':![],'skipped':!![]};if(_0x2e99a0['ygiJA'](findExistingEnv,_0x2e99a0[_0x45a92e(0x125)],{'locations':[_0x45a92e(0x13a)]}))return console[_0x45a92e(0x147)](_0x2e99a0[_0x45a92e(0x13e)]),{'ready':!![],'skipped':![]};const _0x1369ec=process[_0x45a92e(0x110)][_0x45a92e(0x164)]&&process['stdout']['isTTY'];if(_0x1369ec&&!_0x22107?.['url']){console[_0x45a92e(0x147)](_0x2e99a0['LhUYh']),console[_0x45a92e(0x147)]('to\x20access\x20your\x20app.\x20If\x20the\x20part\x20of\x20your\x20app\x20you\x20want\x20to\x20test\x20is\x20behind'),console['log'](_0x2e99a0['ewCgk']),console['log'](_0x2e99a0['UfQFl']),console['log'](_0x2e99a0[_0x45a92e(0x137)]);const {wantsProfile:_0x1b8941}=await _0xa84b39[_0x45a92e(0x100)]([{'type':_0x2e99a0[_0x45a92e(0x134)],'name':_0x45a92e(0x136),'message':_0x45a92e(0x152),'default':!![]}]);if(!_0x1b8941)return _0x2e99a0['OdJue'](printProfileSetupLaterInstructions),{'ready':![],'skipped':!![]};}try{return await _0x2e99a0['hGDKT'](addEnv,_0x45a92e(0x13a),{'url':_0x22107?.[_0x45a92e(0x104)],'force':_0x22107?.[_0x45a92e(0x10c)]},_0x29a845),{'ready':!![],'skipped':![]};}catch(_0x94ef7a){return console['error'](_0x45a92e(0x103),_0x2e99a0[_0x45a92e(0x108)](_0x94ef7a,Error)?_0x94ef7a[_0x45a92e(0x15b)]:_0x94ef7a),_0x2e99a0['GAalD'](printProfileSetupLaterInstructions),{'ready':![],'skipped':![]};}}async function ensureSkills(_0x542216){const _0xab6834=_0xd2d2b0,_0x159ed6={'ahvhq':function(_0x31eb2b,_0xaf0042,_0x103b7b,_0x3998ad){return _0x31eb2b(_0xaf0042,_0x103b7b,_0x3998ad);},'jODGx':function(_0x588e7f,_0x2ed99b){return _0x588e7f(_0x2ed99b);},'rZyIE':'user','igeTG':_0xab6834(0xe8),'DdCRy':'SKILL.md','odsLC':function(_0x136550,_0x3d2540,_0x1e3c49,_0x15d5c4){return _0x136550(_0x3d2540,_0x1e3c49,_0x15d5c4);},'INhXS':function(_0x5d6dff,_0x22c64c,_0x30a9c6){return _0x5d6dff(_0x22c64c,_0x30a9c6);},'vedfN':function(_0x3f4623){return _0x3f4623();},'DZVCm':'.claude','GHNeL':'Would\x20you\x20like\x20to\x20install\x20skills?'},_0x36d7d0=existsSync(_0x159ed6['ahvhq'](join,_0x159ed6[_0xab6834(0x10f)](getSkillsDir,_0x159ed6['rZyIE']),_0x159ed6[_0xab6834(0xfa)],_0x159ed6['DdCRy'])),_0x2a1048=_0x159ed6['jODGx'](existsSync,_0x159ed6['odsLC'](join,getSkillsDir(_0xab6834(0x159)),_0xab6834(0xe8),'SKILL.md'));if(_0x36d7d0||_0x2a1048)return console['log']('✓\x20Ranger\x20skills\x20already\x20installed'),![];const _0x2da855=_0x159ed6[_0xab6834(0x10f)](existsSync,_0x159ed6[_0xab6834(0x160)](join,_0x159ed6[_0xab6834(0xec)](getProjectRoot),_0x159ed6['DZVCm']));if(_0x542216)await skillup({'autoInstall':_0x542216,'suppressUsage':!![]});else{if(_0x2da855)await _0x159ed6['jODGx'](skillup,{'autoInstall':'project','suppressUsage':!![]});else{const {wantsSkillup:_0x2ba67f}=await _0xa84b39[_0xab6834(0x100)]([{'type':_0xab6834(0x10d),'name':_0xab6834(0x13b),'message':_0x159ed6[_0xab6834(0xfe)],'default':!![]}]);_0x2ba67f&&await _0x159ed6[_0xab6834(0x10f)](skillup,{'suppressUsage':!![]});}}return!![];}export async function start(_0xbb5371,_0x1abca5,_0x336649){const _0x70990c=_0xd2d2b0,_0x5a9eaf={'wgzFb':_0x70990c(0x140),'fQxQI':function(_0x554b1f,_0x3388b5){return _0x554b1f(_0x3388b5);},'XDiWM':'auth','JkNYN':_0x70990c(0x121),'VXqcF':'✓\x20Skipping\x20Chromium\x20check\x20(--skip-chromium)','dzIXu':function(_0x28fd47,_0x260ca0){return _0x28fd47(_0x260ca0);},'KbkIZ':'plugin','PeiyA':function(_0x2c8d67,_0x41f3a9){return _0x2c8d67(_0x41f3a9);},'Awkzt':'skills','PndcZ':'.ranger','GgDhk':function(_0x5b88c5,_0xee36a3,_0x4a8c70){return _0x5b88c5(_0xee36a3,_0x4a8c70);},'TlTtr':_0x70990c(0x105),'oOzzA':function(_0x1acda0,_0x5f314a){return _0x1acda0+_0x5f314a;},'utXLT':function(_0x2455d9,_0x26e9b4){return _0x2455d9+_0x26e9b4;}};console['log']('\x0a🚀\x20Ranger\x20Setup\x0a');const _0x5be2ae=process['stdin']['isTTY']&&process['stdout'][_0x70990c(0x164)];!_0x5be2ae&&!_0x1abca5?.['scope']&&(console[_0x70990c(0x147)]('Non-interactive\x20mode:\x20No\x20--scope\x20provided,\x20defaulting\x20to\x20user.'),_0x1abca5={..._0x1abca5,'scope':'user'});_0x336649?.['trackPhaseStart'](_0x5a9eaf['wgzFb']);if(!findGitRoot()){await _0x336649?.['trackPhaseError'](_0x70990c(0x140),new Error('No\x20git\x20repository\x20found'));throw new Error('No\x20git\x20repository\x20found.\x20Please\x20run\x20`ranger\x20setup`\x20from\x20inside\x20your\x20project\x20directory.');}_0x336649?.[_0x70990c(0xf4)](_0x70990c(0x140));const _0x2b4c01=!_0x5a9eaf[_0x70990c(0xf3)](existsSync,getRangerDir()),{path:_0x246d4d}=await ensureRangerDir();_0x336649?.[_0x70990c(0x148)](_0x5a9eaf['XDiWM']);const _0x562f4a=await _0x5a9eaf[_0x70990c(0xf3)](authenticate,_0xbb5371);_0x336649?.[_0x70990c(0xf4)](_0x70990c(0x12d),{'isFirstRun':_0x2b4c01,'method':_0x562f4a[_0x70990c(0x113)]}),_0x336649?.[_0x70990c(0x148)](_0x5a9eaf[_0x70990c(0xf1)]);_0x1abca5?.['skipChromium']?console['log'](_0x5a9eaf[_0x70990c(0xf9)]):await ensureChromium();_0x336649?.[_0x70990c(0xf4)](_0x5a9eaf[_0x70990c(0xf1)],{'isFirstRun':_0x2b4c01,'skipped':!!_0x1abca5?.['skipChromium']}),await _0x5a9eaf['dzIXu'](writeRangerGitignore,_0x246d4d),console[_0x70990c(0x147)](_0x70990c(0xfc));const _0x22dcf9=_0x1abca5?.[_0x70990c(0x114)];_0x336649?.[_0x70990c(0x148)](_0x5a9eaf[_0x70990c(0x168)]),await ensurePlugin(_0x22dcf9),_0x336649?.['trackPhaseEnd']('plugin',{'isFirstRun':_0x2b4c01}),_0x336649?.['trackPhaseStart'](_0x70990c(0x116)),await _0x5a9eaf['PeiyA'](ensureSkills,_0x22dcf9),_0x336649?.[_0x70990c(0xf4)](_0x5a9eaf[_0x70990c(0xfd)],{'isFirstRun':_0x2b4c01});const _0x1ffaab=findGitRoot();if(_0x1ffaab){const _0xf805d9=join(_0x1ffaab,_0x5a9eaf[_0x70990c(0x12a)]);!_0x5a9eaf[_0x70990c(0x124)](existsSync,_0xf805d9)&&await _0x5a9eaf[_0x70990c(0x141)](mkdir,_0xf805d9,{'recursive':!![]});}if(!_0x5be2ae&&!_0x1abca5?.['url'])console['log'](_0x70990c(0x15c)),console['log']('\x20\x20'+bold(_0x5a9eaf['TlTtr'])+'\x0a');else{_0x336649?.[_0x70990c(0x148)]('profile');const _0x29561c=await _0x5a9eaf['GgDhk'](ensureLocalEnv,{'url':_0x1abca5?.[_0x70990c(0x104)],'force':_0x1abca5?.['force']},_0x336649);_0x336649?.['trackPhaseEnd']('profile',{'isFirstRun':_0x2b4c01,'profileReady':_0x29561c[_0x70990c(0x120)],'userSkipped':_0x29561c[_0x70990c(0x102)]}),_0x29561c['ready']&&console[_0x70990c(0x147)]('\x0a✅\x20You\x27re\x20ready\x20to\x20start\x20using\x20Ranger\x20Feature\x20Review.');}const _0x46e5ac=bold(_0x70990c(0x132));console['log'](_0x5a9eaf[_0x70990c(0x14e)](_0x5a9eaf['utXLT'](_0x5a9eaf['oOzzA']('\x0aIn\x20Claude\x20Code,\x20run\x20'+_0x46e5ac+_0x70990c(0x146),'\x0aagent\x20like\x20usual.\x20Claude\x20will\x20create\x20a\x20feature\x20review\x20with'),_0x70990c(0x14b)),'\x0averification\x20to\x20check\x20its\x20work\x20as\x20it\x20builds.'));}
@@ -1,198 +1 @@
1
- import { readFile, readdir } from 'fs/promises';
2
- import { join, basename } from 'path';
3
- import { existsSync } from 'fs';
4
- import { getToken } from './utils/keychain.js';
5
- import { getCurrentVersion, getLatestVersion } from './utils/version.js';
6
- import { getApiBaseUrl, getCurrentEnvironment } from './utils/environment.js';
7
- import { getProjectSkillsDir, getUserSkillsDir } from './utils/claudeConfig.js';
8
- import { getEnvNames } from './env.js';
9
- import { getCurrentUser } from './utils/userApi.js';
10
- import { getRangerDir } from './utils/rangerRoot.js';
11
- import { getEnvDir } from './utils/settings.js';
12
- import { getPluginInfo } from './utils/claudePlugin.js';
13
- import { RANGER_MANAGED_SKILLS } from './utils/skills.js';
14
- // ANSI formatting helpers
15
- const bold = (text) => `\x1b[1m${text}\x1b[0m`;
16
- const link = (path, text) => `\x1b]8;;file://${path}\x07${text || path}\x1b]8;;\x07`;
17
- async function getSkillsFromDir(skillsDir, level) {
18
- if (!existsSync(skillsDir)) {
19
- return [];
20
- }
21
- const skills = [];
22
- try {
23
- const entries = await readdir(skillsDir, { withFileTypes: true });
24
- for (const entry of entries) {
25
- if (entry.isDirectory()) {
26
- const skillPath = join(skillsDir, entry.name, 'SKILL.md');
27
- if (existsSync(skillPath)) {
28
- let displayName = entry.name;
29
- try {
30
- const content = await readFile(skillPath, 'utf-8');
31
- const nameMatch = content.match(/name:\s*(.+)/);
32
- if (nameMatch) {
33
- displayName = nameMatch[1].trim();
34
- }
35
- }
36
- catch {
37
- // Use folder name as fallback
38
- }
39
- skills.push({
40
- name: entry.name,
41
- displayName,
42
- path: skillPath,
43
- level,
44
- });
45
- }
46
- }
47
- }
48
- }
49
- catch {
50
- return [];
51
- }
52
- return skills;
53
- }
54
- async function getInstalledSkills() {
55
- const [projectSkills, userSkills] = await Promise.all([
56
- getSkillsFromDir(getProjectSkillsDir(), 'project'),
57
- getSkillsFromDir(getUserSkillsDir(), 'user'),
58
- ]);
59
- return { project: projectSkills, user: userSkills };
60
- }
61
- /**
62
- * Get profile information from .ranger directory
63
- */
64
- async function getEnvironments() {
65
- const { envNames, activeEnv } = await getEnvNames();
66
- const rangerDir = getRangerDir();
67
- if (!existsSync(rangerDir)) {
68
- return { envs: [], activeEnv: null };
69
- }
70
- const envs = envNames.map((name) => {
71
- const envDir = getEnvDir(name);
72
- const settingsPath = join(envDir, 'settings.json');
73
- const plaintextAuthPath = join(envDir, 'auth.json');
74
- const encryptedAuthPath = join(envDir, 'auth.json.enc');
75
- return {
76
- name,
77
- settingsPath: existsSync(settingsPath)
78
- ? settingsPath
79
- : '(not found)',
80
- hasPlaintextAuth: existsSync(plaintextAuthPath),
81
- hasEncryptedAuth: existsSync(encryptedAuthPath),
82
- isActive: name === activeEnv,
83
- };
84
- });
85
- return { envs, activeEnv };
86
- }
87
- export async function status() {
88
- console.log('\n📊 Ranger Status\n');
89
- // Root directory
90
- const cwd = process.cwd();
91
- const rangerDir = getRangerDir();
92
- // Check if Ranger is initialized
93
- if (!existsSync(rangerDir)) {
94
- console.log(`Root: ${link(cwd, bold(basename(cwd)))}`);
95
- console.log(`\nRanger has not been initialized in this directory.`);
96
- console.log(` Run: ranger setup [token]\n`);
97
- return;
98
- }
99
- console.log(`Root: ${link(cwd, bold(basename(cwd)))}`);
100
- // Version
101
- const version = getCurrentVersion();
102
- const latestVersion = getLatestVersion();
103
- if (latestVersion && latestVersion !== version) {
104
- console.log(`Version: ${version} (latest: ${latestVersion})`);
105
- console.log(` Run: ranger update`);
106
- }
107
- else if (latestVersion) {
108
- console.log(`Version: ${version} (up to date)`);
109
- }
110
- else {
111
- console.log(`Version: ${version}`);
112
- }
113
- // API Token & User Identity
114
- const token = await getToken();
115
- if (token) {
116
- const result = await getCurrentUser(token);
117
- if (result.success) {
118
- console.log(`Organization: ${bold(result.user.organizationName)}`);
119
- }
120
- else {
121
- console.log(`API Token: ✓ Found but invalid or expired`);
122
- console.log(` Run: ranger setup [token]`);
123
- }
124
- }
125
- else {
126
- console.log(`API Token: ✗ Not found`);
127
- console.log(` Run: ranger setup [token]`);
128
- }
129
- // Debug info (only shown if DEBUG env var is set)
130
- if (process.env.DEBUG) {
131
- console.log(`API Environment: ${getCurrentEnvironment()}`);
132
- console.log(`API URL: ${getApiBaseUrl()}`);
133
- }
134
- // Claude Code Plugin
135
- console.log('\n--- Claude Code Plugin ---');
136
- const pluginInfo = await getPluginInfo('ranger@trailhead');
137
- if (pluginInfo) {
138
- const scopeLabel = pluginInfo.scope || 'unknown';
139
- const statusLabel = pluginInfo.enabled ? 'enabled' : 'disabled';
140
- console.log(` ${bold('ranger@trailhead')}: installed (${scopeLabel}, ${statusLabel})`);
141
- }
142
- else {
143
- console.log(' Not installed');
144
- console.log(' Run: ranger setup [token] (includes plugin installation)');
145
- }
146
- // Skills (only show Ranger-managed skills)
147
- console.log('\n--- Skills ---');
148
- const { project: allProjectSkills, user: allUserSkills } = await getInstalledSkills();
149
- const projectSkills = allProjectSkills.filter((s) => RANGER_MANAGED_SKILLS.includes(s.name));
150
- const userSkills = allUserSkills.filter((s) => RANGER_MANAGED_SKILLS.includes(s.name));
151
- const totalSkills = projectSkills.length + userSkills.length;
152
- if (totalSkills === 0) {
153
- console.log('No skills installed');
154
- console.log(` Run: ranger skillup`);
155
- }
156
- else {
157
- if (projectSkills.length > 0) {
158
- console.log(' Project-level:');
159
- for (const skill of projectSkills) {
160
- console.log(` ${bold(skill.displayName)}: ${link(skill.path, basename(skill.path))}`);
161
- }
162
- }
163
- if (userSkills.length > 0) {
164
- console.log(' User-level:');
165
- for (const skill of userSkills) {
166
- console.log(` ${bold(skill.displayName)}: ${link(skill.path, basename(skill.path))}`);
167
- }
168
- }
169
- }
170
- // Profiles
171
- console.log('\n--- Profiles ---');
172
- const { envs, activeEnv } = await getEnvironments();
173
- if (envs.length === 0) {
174
- console.log('No profiles configured');
175
- console.log(` Run: ranger profile add <profile-name>`);
176
- }
177
- else {
178
- for (const env of envs) {
179
- const activeMarker = env.isActive ? ' (active)' : '';
180
- const authStatus = env.hasEncryptedAuth
181
- ? 'encrypted'
182
- : env.hasPlaintextAuth
183
- ? 'plaintext'
184
- : 'none';
185
- console.log(` ${bold(env.name)}${activeMarker}`);
186
- console.log(` Auth: ${authStatus}`);
187
- if (env.settingsPath !== '(not found)') {
188
- console.log(` Settings: ${link(env.settingsPath, basename(env.settingsPath))}`);
189
- }
190
- }
191
- if (!activeEnv) {
192
- console.log(`\n No active profile set`);
193
- console.log(` Run: ranger profile use <profile-name> (available: ${envs.map((e) => e.name).join(', ')})`);
194
- }
195
- }
196
- console.log('');
197
- }
198
- //# sourceMappingURL=status.js.map
1
+ const _0x411736=_0x496e;(function(_0x59045f,_0x1e80e2){const _0x2c78d2=_0x496e,_0x4475ec=_0x59045f();while(!![]){try{const _0x3ea31e=-parseInt(_0x2c78d2(0x13d))/0x1+parseInt(_0x2c78d2(0x11b))/0x2+-parseInt(_0x2c78d2(0x10d))/0x3*(parseInt(_0x2c78d2(0x13a))/0x4)+parseInt(_0x2c78d2(0x130))/0x5*(parseInt(_0x2c78d2(0x120))/0x6)+parseInt(_0x2c78d2(0x107))/0x7+-parseInt(_0x2c78d2(0x113))/0x8+-parseInt(_0x2c78d2(0x145))/0x9;if(_0x3ea31e===_0x1e80e2)break;else _0x4475ec['push'](_0x4475ec['shift']());}catch(_0x1ec1ac){_0x4475ec['push'](_0x4475ec['shift']());}}}(_0xec5b,0x5adf6));import{readFile,readdir}from'fs/promises';import{join,basename}from'path';import{existsSync}from'fs';import{getToken}from'./utils/keychain.js';import{getCurrentVersion,getLatestVersion}from'./utils/version.js';import{getApiBaseUrl,getCurrentEnvironment}from'./utils/environment.js';function _0xec5b(){const _0xc5949f=['Root:\x20','settingsPath','\x20(up\x20to\x20date)','cwd','scope','enabled','encrypted','name','API\x20Token:\x20✗\x20Not\x20found','XuSnl','lnPup','33535OtSqSR','nRUbU','\x0a---\x20Claude\x20Code\x20Plugin\x20---','utf-8','\x0a---\x20Profiles\x20---','ranger@trailhead','organizationName','\x1b]8;;\x07','aVRzL','CKUjE','404lARvgR','kYwgK','No\x20skills\x20installed','157542pVHZkn','path','log','user','\x20\x20User-level:','mEBSt','\x20\x20Run:\x20ranger\x20setup\x20[token]','IUTgN','2674017dHrNCi','DEBUG','includes','hTdwn','\x0a---\x20Skills\x20---','BwjIv','settings.json','\x0a\x20\x20No\x20active\x20profile\x20set','EdkSX','Version:\x20','tGdUD','jfBne','5184613MxViPt','\x20(active)','KeEda','project','FOJzH','mZIAS','8907kCVgDs','unknown','yVHkn','push','hnYdw','none','2256416BiwwiF','SKILL.md','map','trim','API\x20Environment:\x20','hasPlaintextAuth','auth.json','\x20\x20\x20\x20','504594hUnPeC','auth.json.enc','length','VYHRo','disabled','372uVeojQ','\x20\x20Run:\x20ranger\x20profile\x20add\x20<profile-name>','xTIgT','LMZMl','uGpTM'];_0xec5b=function(){return _0xc5949f;};return _0xec5b();}import{getProjectSkillsDir,getUserSkillsDir}from'./utils/claudeConfig.js';import{getEnvNames}from'./env.js';function _0x496e(_0xcba30e,_0xeeaaa){_0xcba30e=_0xcba30e-0x107;const _0xec5bb7=_0xec5b();let _0x496ed5=_0xec5bb7[_0xcba30e];return _0x496ed5;}import{getCurrentUser}from'./utils/userApi.js';import{getRangerDir}from'./utils/rangerRoot.js';import{getEnvDir}from'./utils/settings.js';import{getPluginInfo}from'./utils/claudePlugin.js';import{RANGER_MANAGED_SKILLS}from'./utils/skills.js';const bold=_0x1f96bd=>'\x1b[1m'+_0x1f96bd+'\x1b[0m',link=(_0x393fc1,_0x4660ef)=>'\x1b]8;;file://'+_0x393fc1+'\x07'+(_0x4660ef||_0x393fc1)+_0x411736(0x137);async function getSkillsFromDir(_0x326eb5,_0x852e75){const _0x530269=_0x411736,_0x14f711={'aVRzL':function(_0x4385af,_0x4fdad1,_0xb5368e){return _0x4385af(_0x4fdad1,_0xb5368e);},'uGpTM':function(_0x4d9338,_0x317f87,_0xc3c8c7,_0x56d667){return _0x4d9338(_0x317f87,_0xc3c8c7,_0x56d667);}};if(!existsSync(_0x326eb5))return[];const _0x4c87fd=[];try{const _0x10e1c7=await _0x14f711[_0x530269(0x138)](readdir,_0x326eb5,{'withFileTypes':!![]});for(const _0x26499e of _0x10e1c7){if(_0x26499e['isDirectory']()){const _0x3110fb=_0x14f711[_0x530269(0x124)](join,_0x326eb5,_0x26499e[_0x530269(0x12c)],_0x530269(0x114));if(existsSync(_0x3110fb)){let _0x18a81a=_0x26499e[_0x530269(0x12c)];try{const _0x410fc7=await readFile(_0x3110fb,_0x530269(0x133)),_0x4980b1=_0x410fc7['match'](/name:\s*(.+)/);_0x4980b1&&(_0x18a81a=_0x4980b1[0x1][_0x530269(0x116)]());}catch{}_0x4c87fd[_0x530269(0x110)]({'name':_0x26499e[_0x530269(0x12c)],'displayName':_0x18a81a,'path':_0x3110fb,'level':_0x852e75});}}}}catch{return[];}return _0x4c87fd;}async function getInstalledSkills(){const _0xf58d21=_0x411736,_0x372940={'CKUjE':function(_0xe21708,_0x1d63ae,_0xa3a74e){return _0xe21708(_0x1d63ae,_0xa3a74e);},'MCano':function(_0x131a6c){return _0x131a6c();},'LzQxF':_0xf58d21(0x10a)},[_0x4ffd35,_0x4477ee]=await Promise['all']([_0x372940[_0xf58d21(0x139)](getSkillsFromDir,_0x372940['MCano'](getProjectSkillsDir),_0x372940['LzQxF']),getSkillsFromDir(getUserSkillsDir(),'user')]);return{'project':_0x4ffd35,'user':_0x4477ee};}async function getEnvironments(){const _0x158a0e=_0x411736,_0x1219ac={'EDzCe':_0x158a0e(0x14b),'KeEda':function(_0x2d58ac,_0x42cff1,_0x29fbad){return _0x2d58ac(_0x42cff1,_0x29fbad);},'VYHRo':_0x158a0e(0x11c),'kOmlR':function(_0x3a13dc,_0x49ac2a){return _0x3a13dc(_0x49ac2a);},'XKoYA':function(_0x107bc0,_0xe8a0e5){return _0x107bc0===_0xe8a0e5;},'mEBSt':function(_0x1ab9b4){return _0x1ab9b4();}},{envNames:_0x271d5f,activeEnv:_0x556441}=await getEnvNames(),_0x2cff94=_0x1219ac[_0x158a0e(0x142)](getRangerDir);if(!existsSync(_0x2cff94))return{'envs':[],'activeEnv':null};const _0x2069e8=_0x271d5f[_0x158a0e(0x115)](_0x573bcf=>{const _0x4190ca=_0x158a0e,_0x21f397=getEnvDir(_0x573bcf),_0x724767=join(_0x21f397,_0x1219ac['EDzCe']),_0x557f96=_0x1219ac[_0x4190ca(0x109)](join,_0x21f397,_0x4190ca(0x119)),_0x79056c=_0x1219ac['KeEda'](join,_0x21f397,_0x1219ac[_0x4190ca(0x11e)]);return{'name':_0x573bcf,'settingsPath':_0x1219ac['kOmlR'](existsSync,_0x724767)?_0x724767:'(not\x20found)','hasPlaintextAuth':_0x1219ac['kOmlR'](existsSync,_0x557f96),'hasEncryptedAuth':existsSync(_0x79056c),'isActive':_0x1219ac['XKoYA'](_0x573bcf,_0x556441)};});return{'envs':_0x2069e8,'activeEnv':_0x556441};}export async function status(){const _0x357d7e=_0x411736,_0x3cd957={'XuSnl':'\x0a📊\x20Ranger\x20Status\x0a','IfUsO':function(_0x1a75d6,_0x46840a,_0x5bada5){return _0x1a75d6(_0x46840a,_0x5bada5);},'EdkSX':function(_0x4d54f6,_0x2e69fd){return _0x4d54f6(_0x2e69fd);},'FOJzH':function(_0x431f68,_0x390605){return _0x431f68(_0x390605);},'lnPup':function(_0x4a21e1,_0x5d8ad6){return _0x4a21e1(_0x5d8ad6);},'jfBne':function(_0x58df2c){return _0x58df2c();},'dgjLr':function(_0x5e429f,_0x1a91e6){return _0x5e429f(_0x1a91e6);},'kYwgK':function(_0x5a0085){return _0x5a0085();},'NzmZQ':_0x357d7e(0x132),'xTIgT':'ranger@trailhead','pnefR':_0x357d7e(0x10e),'oDBES':_0x357d7e(0x11f),'hnYdw':'\x20\x20Run:\x20ranger\x20setup\x20[token]\x20\x20(includes\x20plugin\x20installation)','yVHkn':function(_0x451ec1){return _0x451ec1();},'YfVQG':_0x357d7e(0x13c),'IUTgN':function(_0x4d673a,_0x27f9d1){return _0x4d673a>_0x27f9d1;},'nRUbU':'\x20\x20Project-level:','tGdUD':function(_0x217ab9,_0x958bef){return _0x217ab9(_0x958bef);},'mZIAS':_0x357d7e(0x141),'hTdwn':function(_0xb0d7fc,_0x59fd50){return _0xb0d7fc(_0x59fd50);},'LMZMl':_0x357d7e(0x12b),'iUFBm':'plaintext','ZKArt':function(_0x2a4302,_0x38d2ad){return _0x2a4302(_0x38d2ad);},'BqZTP':function(_0x317f4d,_0x18bd00){return _0x317f4d!==_0x18bd00;},'BwjIv':function(_0x457c65,_0x17dd26,_0x25fd30){return _0x457c65(_0x17dd26,_0x25fd30);}};console[_0x357d7e(0x13f)](_0x3cd957[_0x357d7e(0x12e)]);const _0xc794a0=process[_0x357d7e(0x128)](),_0x584bf5=getRangerDir();if(!existsSync(_0x584bf5)){console['log']('Root:\x20'+_0x3cd957['IfUsO'](link,_0xc794a0,_0x3cd957[_0x357d7e(0x14d)](bold,basename(_0xc794a0)))),console['log']('\x0aRanger\x20has\x20not\x20been\x20initialized\x20in\x20this\x20directory.'),console[_0x357d7e(0x13f)]('\x20\x20Run:\x20ranger\x20setup\x20[token]\x0a');return;}console[_0x357d7e(0x13f)](_0x357d7e(0x125)+link(_0xc794a0,_0x3cd957[_0x357d7e(0x10b)](bold,_0x3cd957[_0x357d7e(0x12f)](basename,_0xc794a0))));const _0x47e33c=_0x3cd957[_0x357d7e(0x150)](getCurrentVersion),_0x4c3172=getLatestVersion();if(_0x4c3172&&_0x4c3172!==_0x47e33c)console['log'](_0x357d7e(0x14e)+_0x47e33c+'\x20(latest:\x20'+_0x4c3172+')'),console['log']('\x20\x20Run:\x20ranger\x20update');else _0x4c3172?console[_0x357d7e(0x13f)](_0x357d7e(0x14e)+_0x47e33c+_0x357d7e(0x127)):console['log'](_0x357d7e(0x14e)+_0x47e33c);const _0x3bfd55=await _0x3cd957['jfBne'](getToken);if(_0x3bfd55){const _0x4687ba=await getCurrentUser(_0x3bfd55);_0x4687ba['success']?console['log']('Organization:\x20'+_0x3cd957['dgjLr'](bold,_0x4687ba[_0x357d7e(0x140)][_0x357d7e(0x136)])):(console[_0x357d7e(0x13f)]('API\x20Token:\x20✓\x20Found\x20but\x20invalid\x20or\x20expired'),console['log'](_0x357d7e(0x143)));}else console['log'](_0x357d7e(0x12d)),console[_0x357d7e(0x13f)](_0x357d7e(0x143));process['env'][_0x357d7e(0x146)]&&(console[_0x357d7e(0x13f)](_0x357d7e(0x117)+_0x3cd957[_0x357d7e(0x13b)](getCurrentEnvironment)),console['log']('API\x20URL:\x20'+getApiBaseUrl()));console[_0x357d7e(0x13f)](_0x3cd957['NzmZQ']);const _0x3e2661=await getPluginInfo(_0x3cd957[_0x357d7e(0x122)]);if(_0x3e2661){const _0x248117=_0x3e2661[_0x357d7e(0x129)]||_0x3cd957['pnefR'],_0x2c3b39=_0x3e2661[_0x357d7e(0x12a)]?'enabled':_0x3cd957['oDBES'];console[_0x357d7e(0x13f)]('\x20\x20'+bold(_0x357d7e(0x135))+':\x20installed\x20('+_0x248117+',\x20'+_0x2c3b39+')');}else console['log']('\x20\x20Not\x20installed'),console[_0x357d7e(0x13f)](_0x3cd957[_0x357d7e(0x111)]);console['log'](_0x357d7e(0x149));const {project:_0x276baf,user:_0x24e794}=await _0x3cd957[_0x357d7e(0x10f)](getInstalledSkills),_0x506470=_0x276baf['filter'](_0x1af733=>RANGER_MANAGED_SKILLS['includes'](_0x1af733['name'])),_0x5b009b=_0x24e794['filter'](_0x308336=>RANGER_MANAGED_SKILLS[_0x357d7e(0x147)](_0x308336['name'])),_0x4c4231=_0x506470[_0x357d7e(0x11d)]+_0x5b009b[_0x357d7e(0x11d)];if(_0x4c4231===0x0)console[_0x357d7e(0x13f)](_0x3cd957['YfVQG']),console['log']('\x20\x20Run:\x20ranger\x20skillup');else{if(_0x3cd957[_0x357d7e(0x144)](_0x506470[_0x357d7e(0x11d)],0x0)){console['log'](_0x3cd957[_0x357d7e(0x131)]);for(const _0x1fe8df of _0x506470){console[_0x357d7e(0x13f)]('\x20\x20\x20\x20'+_0x3cd957[_0x357d7e(0x14f)](bold,_0x1fe8df['displayName'])+':\x20'+link(_0x1fe8df[_0x357d7e(0x13e)],_0x3cd957[_0x357d7e(0x12f)](basename,_0x1fe8df[_0x357d7e(0x13e)])));}}if(_0x5b009b['length']>0x0){console['log'](_0x3cd957[_0x357d7e(0x10c)]);for(const _0x29ce47 of _0x5b009b){console[_0x357d7e(0x13f)](_0x357d7e(0x11a)+bold(_0x29ce47['displayName'])+':\x20'+link(_0x29ce47[_0x357d7e(0x13e)],_0x3cd957[_0x357d7e(0x148)](basename,_0x29ce47[_0x357d7e(0x13e)])));}}}console[_0x357d7e(0x13f)](_0x357d7e(0x134));const {envs:_0x191844,activeEnv:_0x204e88}=await _0x3cd957[_0x357d7e(0x10f)](getEnvironments);if(_0x191844[_0x357d7e(0x11d)]===0x0)console[_0x357d7e(0x13f)]('No\x20profiles\x20configured'),console['log'](_0x357d7e(0x121));else{for(const _0x3110c5 of _0x191844){const _0x24a464=_0x3110c5['isActive']?_0x357d7e(0x108):'',_0x541c15=_0x3110c5['hasEncryptedAuth']?_0x3cd957[_0x357d7e(0x123)]:_0x3110c5[_0x357d7e(0x118)]?_0x3cd957['iUFBm']:_0x357d7e(0x112);console['log']('\x20\x20'+_0x3cd957['ZKArt'](bold,_0x3110c5[_0x357d7e(0x12c)])+_0x24a464),console['log']('\x20\x20\x20\x20Auth:\x20'+_0x541c15),_0x3cd957['BqZTP'](_0x3110c5[_0x357d7e(0x126)],'(not\x20found)')&&console['log']('\x20\x20\x20\x20Settings:\x20'+_0x3cd957[_0x357d7e(0x14a)](link,_0x3110c5['settingsPath'],basename(_0x3110c5['settingsPath'])));}!_0x204e88&&(console[_0x357d7e(0x13f)](_0x357d7e(0x14c)),console[_0x357d7e(0x13f)]('\x20\x20Run:\x20ranger\x20profile\x20use\x20<profile-name>\x20\x20(available:\x20'+_0x191844['map'](_0x14629d=>_0x14629d[_0x357d7e(0x12c)])['join'](',\x20')+')'));}console['log']('');}
@@ -1,182 +1 @@
1
- import { spawn } from 'child_process';
2
- import { existsSync } from 'fs';
3
- import { readFile, writeFile } from 'fs/promises';
4
- import { installSkill, removeSkill, RANGER_MANAGED_SKILLS, DEPRECATED_SKILLS, } from './utils/skills.js';
5
- import { PACKAGE_NAME, getCurrentVersion, getLatestVersion, compareVersions, } from './utils/version.js';
6
- import { getSkillsDir } from './utils/claudeConfig.js';
7
- import { join } from 'path';
8
- import { migrateActiveProfileFile } from './utils/activeProfile.js';
9
- import { getRangerDir } from './utils/rangerRoot.js';
10
- async function runInstall() {
11
- return new Promise((resolve) => {
12
- console.log(`\nInstalling ${PACKAGE_NAME}@latest...\n`);
13
- const child = spawn('npm', ['install', '-g', `${PACKAGE_NAME}@latest`], {
14
- stdio: 'inherit',
15
- shell: process.platform === 'win32',
16
- });
17
- child.on('close', (code) => {
18
- resolve(code === 0);
19
- });
20
- child.on('error', () => {
21
- resolve(false);
22
- });
23
- });
24
- }
25
- async function updateClaudeMarketplace() {
26
- return new Promise((resolve) => {
27
- const child = spawn('claude', ['plugin', 'marketplace', 'update', 'trailhead'], {
28
- stdio: 'pipe',
29
- shell: process.platform === 'win32',
30
- });
31
- child.on('close', (code) => {
32
- resolve(code === 0);
33
- });
34
- child.on('error', () => {
35
- resolve(false);
36
- });
37
- });
38
- }
39
- async function updateClaudePlugin(scope) {
40
- return new Promise((resolve) => {
41
- const args = ['plugin', 'update', 'ranger@trailhead'];
42
- if (scope) {
43
- args.push('--scope', scope);
44
- }
45
- const child = spawn('claude', args, {
46
- stdio: 'pipe',
47
- shell: process.platform === 'win32',
48
- });
49
- child.on('close', (code) => {
50
- resolve(code === 0);
51
- });
52
- child.on('error', () => {
53
- resolve(false);
54
- });
55
- });
56
- }
57
- /**
58
- * Check if a skill is installed at the given level
59
- */
60
- function isSkillInstalled(skillName, level) {
61
- const skillDir = join(getSkillsDir(level), skillName);
62
- return existsSync(skillDir);
63
- }
64
- /**
65
- * Reinstall ranger-managed skills that are already installed.
66
- * Only updates skills from RANGER_MANAGED_SKILLS list, ignoring user-defined skills.
67
- * Also removes any deprecated skills.
68
- */
69
- async function reinstallSkills(cliVersion) {
70
- const levels = ['project', 'user'];
71
- // Find which ranger-managed skills are installed at each level
72
- const toReinstall = [];
73
- for (const level of levels) {
74
- for (const skillName of RANGER_MANAGED_SKILLS) {
75
- if (isSkillInstalled(skillName, level)) {
76
- toReinstall.push({ skillName, level });
77
- }
78
- }
79
- }
80
- // Remove deprecated skills
81
- for (const level of levels) {
82
- for (const skillName of DEPRECATED_SKILLS) {
83
- await removeSkill(skillName, level);
84
- }
85
- }
86
- if (toReinstall.length === 0) {
87
- console.log('\nNo ranger-managed skills found to reinstall.');
88
- return;
89
- }
90
- console.log(`\nReinstalling ${toReinstall.length} ranger-managed skill(s)...`);
91
- for (const { skillName, level } of toReinstall) {
92
- try {
93
- await installSkill(skillName, { level, cliVersion });
94
- }
95
- catch (error) {
96
- console.warn(` Failed to reinstall ${level} skill ${skillName}:`, error);
97
- }
98
- }
99
- }
100
- async function ensureActiveProfileGitignored() {
101
- const rangerGitignorePath = join(getRangerDir(), '.gitignore');
102
- if (!existsSync(rangerGitignorePath)) {
103
- return false;
104
- }
105
- let content = '';
106
- try {
107
- content = await readFile(rangerGitignorePath, 'utf-8');
108
- }
109
- catch {
110
- return false;
111
- }
112
- const lines = content.split(/\r?\n/);
113
- if (lines.some((line) => line.trim() === 'active-profile.txt')) {
114
- return false;
115
- }
116
- let insertIndex = lines.findIndex((line) => line.trim() === 'active-feature.txt');
117
- if (insertIndex === -1) {
118
- insertIndex = lines.length;
119
- }
120
- lines.splice(insertIndex, 0, 'active-profile.txt');
121
- let nextContent = lines.join('\n');
122
- if (!nextContent.endsWith('\n')) {
123
- nextContent += '\n';
124
- }
125
- try {
126
- await writeFile(rangerGitignorePath, nextContent, 'utf-8');
127
- }
128
- catch {
129
- return false;
130
- }
131
- return true;
132
- }
133
- export async function update() {
134
- const currentVersion = getCurrentVersion();
135
- console.log(`\nCurrent version: ${currentVersion}`);
136
- console.log('Checking for updates...');
137
- const latestVersion = getLatestVersion();
138
- if (!latestVersion) {
139
- throw new Error('Failed to check for updates. Please check your network connection.');
140
- }
141
- console.log(`Latest version: ${latestVersion}`);
142
- const comparison = compareVersions(currentVersion, latestVersion);
143
- let versionToUse = currentVersion;
144
- if (comparison === 0) {
145
- console.log('\nYou are already on the latest version.');
146
- }
147
- else if (comparison < 0) {
148
- console.log(`\nYour version (${currentVersion}) is newer than the published version (${latestVersion}).`);
149
- }
150
- else {
151
- const success = await runInstall();
152
- if (success) {
153
- console.log(`\nSuccessfully updated to version ${latestVersion}`);
154
- versionToUse = latestVersion;
155
- }
156
- else {
157
- throw new Error(`Update failed. You may need to run with sudo: sudo npm install -g ${PACKAGE_NAME}@latest`);
158
- }
159
- }
160
- // Reinstall all skills to ensure they are up to date
161
- await reinstallSkills(versionToUse);
162
- // Update Claude marketplace and plugin
163
- const marketplaceSuccess = await updateClaudeMarketplace();
164
- if (marketplaceSuccess) {
165
- console.log('\nClaude marketplace updated (trailhead).');
166
- }
167
- const userSuccess = await updateClaudePlugin();
168
- if (userSuccess) {
169
- console.log('\nClaude plugin updated (user scope).');
170
- }
171
- const projectSuccess = await updateClaudePlugin('project');
172
- if (projectSuccess) {
173
- console.log(`${userSuccess ? '' : '\n'}Claude plugin updated (project scope).`);
174
- }
175
- const migratedProfile = await migrateActiveProfileFile();
176
- if (migratedProfile) {
177
- console.log('✓ Migrated active profile file');
178
- }
179
- const updatedGitignore = await ensureActiveProfileGitignored();
180
- console.log('\n✅ Update complete!');
181
- }
182
- //# sourceMappingURL=update.js.map
1
+ (function(_0x4ba947,_0x302c43){const _0x22d168=_0x7da3,_0x20e8ef=_0x4ba947();while(!![]){try{const _0x3940d6=parseInt(_0x22d168(0x168))/0x1+parseInt(_0x22d168(0x17b))/0x2*(-parseInt(_0x22d168(0x16e))/0x3)+parseInt(_0x22d168(0x182))/0x4+parseInt(_0x22d168(0x179))/0x5*(-parseInt(_0x22d168(0x15e))/0x6)+-parseInt(_0x22d168(0x151))/0x7*(-parseInt(_0x22d168(0x187))/0x8)+-parseInt(_0x22d168(0x14e))/0x9+-parseInt(_0x22d168(0x15a))/0xa;if(_0x3940d6===_0x302c43)break;else _0x20e8ef['push'](_0x20e8ef['shift']());}catch(_0x4bdb78){_0x20e8ef['push'](_0x20e8ef['shift']());}}}(_0xef6f,0x315f0));import{spawn}from'child_process';import{existsSync}from'fs';import{readFile,writeFile}from'fs/promises';import{installSkill,removeSkill,RANGER_MANAGED_SKILLS,DEPRECATED_SKILLS}from'./utils/skills.js';function _0x7da3(_0x1e8046,_0x231b41){_0x1e8046=_0x1e8046-0x14c;const _0xef6fec=_0xef6f();let _0x7da30d=_0xef6fec[_0x1e8046];return _0x7da30d;}import{PACKAGE_NAME,getCurrentVersion,getLatestVersion,compareVersions}from'./utils/version.js';function _0xef6f(){const _0x3c9040=['trim','some','pXJav','ayRuJ','mzPLL','\x0aClaude\x20plugin\x20updated\x20(user\x20scope).','utf-8','haSDa','length','RyPWj','1593144MCNYTR','nFoAL','Update\x20failed.\x20You\x20may\x20need\x20to\x20run\x20with\x20sudo:\x20sudo\x20npm\x20install\x20-g\x20','350ZdeFTA','eZEze','user',')\x20is\x20newer\x20than\x20the\x20published\x20version\x20(','\x0aYour\x20version\x20(','error','cOUpF','iAaVW','qeCvK','3080LskxrK','jPJhh','CpwFF','PmUIZ','18mYMrNx','split','\x0aYou\x20are\x20already\x20on\x20the\x20latest\x20version.','\x0aReinstalling\x20','log','\x20skill\x20','\x0aSuccessfully\x20updated\x20to\x20version\x20','acoLa','splice','KuXAL','72517fvvPyU','trailhead','qxjUD','.gitignore','update','JcPbT','301299wqyRap','MdCPA','marketplace','WneVk','sTJOR','Claude\x20plugin\x20updated\x20(project\x20scope).','wnJIO','juJvy','NAWTt','oMZhN','@latest','15430nfTWQO','Latest\x20version:\x20\x20','2ivpaFf','project','@latest...\x0a','sVyDv','win32','qrqEy','\x0a✅\x20Update\x20complete!','896688ZMUvqW','YXBRP','inherit','findIndex','close','30808KaMQRx'];_0xef6f=function(){return _0x3c9040;};return _0xef6f();}import{getSkillsDir}from'./utils/claudeConfig.js';import{join}from'path';import{migrateActiveProfileFile}from'./utils/activeProfile.js';import{getRangerDir}from'./utils/rangerRoot.js';async function runInstall(){const _0x3d1b5f=_0x7da3,_0x1ba296={'iAaVW':function(_0x41ed31,_0x602f7a){return _0x41ed31(_0x602f7a);},'KuXAL':function(_0x4def97,_0x33dc45,_0x948159,_0x1223a7){return _0x4def97(_0x33dc45,_0x948159,_0x1223a7);},'pXJav':_0x3d1b5f(0x184),'iJyYb':function(_0x1b36d5,_0x537703){return _0x1b36d5===_0x537703;},'mzPLL':'error'};return new Promise(_0x35617a=>{const _0x59ea0f=_0x3d1b5f;console['log']('\x0aInstalling\x20'+PACKAGE_NAME+_0x59ea0f(0x17d));const _0x2f1fbb=_0x1ba296[_0x59ea0f(0x167)](spawn,'npm',['install','-g',PACKAGE_NAME+_0x59ea0f(0x178)],{'stdio':_0x1ba296[_0x59ea0f(0x18a)],'shell':_0x1ba296['iJyYb'](process['platform'],'win32')});_0x2f1fbb['on'](_0x59ea0f(0x186),_0x11be2c=>{_0x35617a(_0x11be2c===0x0);}),_0x2f1fbb['on'](_0x1ba296[_0x59ea0f(0x18c)],()=>{const _0x4e405e=_0x59ea0f;_0x1ba296[_0x4e405e(0x158)](_0x35617a,![]);});});}async function updateClaudeMarketplace(){const _0x5c592b=_0x7da3,_0x4de13f={'tAmQS':function(_0x19dd1b,_0x4e79aa){return _0x19dd1b(_0x4e79aa);},'kIJlT':'claude','EYOge':'plugin','iKEOe':_0x5c592b(0x170),'YXBRP':_0x5c592b(0x169),'sVyDv':'pipe','ayRuJ':function(_0x5bdf97,_0x22f89c){return _0x5bdf97===_0x22f89c;},'HpwQn':_0x5c592b(0x17f),'jWKWr':_0x5c592b(0x156)};return new Promise(_0x7b6368=>{const _0x4d7b17=_0x5c592b,_0x54afc1={'CpwFF':function(_0x582ce2,_0x5abd69){return _0x582ce2(_0x5abd69);}},_0x4fbcfd=spawn(_0x4de13f['kIJlT'],[_0x4de13f['EYOge'],_0x4de13f['iKEOe'],'update',_0x4de13f[_0x4d7b17(0x183)]],{'stdio':_0x4de13f[_0x4d7b17(0x17e)],'shell':_0x4de13f[_0x4d7b17(0x18b)](process['platform'],_0x4de13f['HpwQn'])});_0x4fbcfd['on']('close',_0x5d8529=>{_0x4de13f['tAmQS'](_0x7b6368,_0x5d8529===0x0);}),_0x4fbcfd['on'](_0x4de13f['jWKWr'],()=>{const _0x48ae62=_0x4d7b17;_0x54afc1[_0x48ae62(0x15c)](_0x7b6368,![]);});});}async function updateClaudePlugin(_0x29b19d){const _0x3101e9=_0x7da3,_0x453393={'acoLa':function(_0x1e761d,_0x156673){return _0x1e761d(_0x156673);},'NAWTt':function(_0x2a6bb2,_0x509d40){return _0x2a6bb2===_0x509d40;},'oMZhN':'ranger@trailhead','slrQC':'--scope','mQgMG':'claude','qeCvK':_0x3101e9(0x17f)};return new Promise(_0x4048b7=>{const _0x5b5268=_0x3101e9,_0x4a0157={'wnJIO':function(_0x471d3b,_0x45f213){const _0x5921e1=_0x7da3;return _0x453393[_0x5921e1(0x165)](_0x471d3b,_0x45f213);},'sTJOR':function(_0x3d5f49,_0x1686fd){return _0x453393['NAWTt'](_0x3d5f49,_0x1686fd);}},_0x3334eb=['plugin',_0x5b5268(0x16c),_0x453393[_0x5b5268(0x177)]];_0x29b19d&&_0x3334eb['push'](_0x453393['slrQC'],_0x29b19d);const _0x401451=spawn(_0x453393['mQgMG'],_0x3334eb,{'stdio':'pipe','shell':_0x453393[_0x5b5268(0x176)](process['platform'],_0x453393[_0x5b5268(0x159)])});_0x401451['on'](_0x5b5268(0x186),_0x132fd5=>{const _0x530e94=_0x5b5268;_0x4a0157[_0x530e94(0x174)](_0x4048b7,_0x4a0157[_0x530e94(0x172)](_0x132fd5,0x0));}),_0x401451['on']('error',()=>{_0x4048b7(![]);});});}function isSkillInstalled(_0x2cf2c1,_0x4e0174){const _0xc99206=_0x7da3,_0x430915={'eZEze':function(_0x4e5470,_0x262f71,_0x11fbe5){return _0x4e5470(_0x262f71,_0x11fbe5);},'RyPWj':function(_0x36da5e,_0x57d8b5){return _0x36da5e(_0x57d8b5);}},_0x33ccd3=_0x430915[_0xc99206(0x152)](join,_0x430915[_0xc99206(0x14d)](getSkillsDir,_0x4e0174),_0x2cf2c1);return existsSync(_0x33ccd3);}async function reinstallSkills(_0x3c34ce){const _0xa8f7f5=_0x7da3,_0x3c7f20={'MDZCU':_0xa8f7f5(0x17c),'Naqrj':_0xa8f7f5(0x153),'JcPbT':function(_0x74d750,_0x57da7a,_0x28c34){return _0x74d750(_0x57da7a,_0x28c34);},'kORwr':function(_0x141bab,_0x58c962){return _0x141bab===_0x58c962;},'aPTIS':'\x0aNo\x20ranger-managed\x20skills\x20found\x20to\x20reinstall.','nFoAL':function(_0x42701f,_0x13ca1f,_0x33d5ae){return _0x42701f(_0x13ca1f,_0x33d5ae);}},_0x3ab0b9=[_0x3c7f20['MDZCU'],_0x3c7f20['Naqrj']],_0x2d6ee4=[];for(const _0x89a16f of _0x3ab0b9){for(const _0x5c1466 of RANGER_MANAGED_SKILLS){_0x3c7f20[_0xa8f7f5(0x16d)](isSkillInstalled,_0x5c1466,_0x89a16f)&&_0x2d6ee4['push']({'skillName':_0x5c1466,'level':_0x89a16f});}}for(const _0x8f6088 of _0x3ab0b9){for(const _0x2f7059 of DEPRECATED_SKILLS){await _0x3c7f20['JcPbT'](removeSkill,_0x2f7059,_0x8f6088);}}if(_0x3c7f20['kORwr'](_0x2d6ee4['length'],0x0)){console[_0xa8f7f5(0x162)](_0x3c7f20['aPTIS']);return;}console['log'](_0xa8f7f5(0x161)+_0x2d6ee4['length']+'\x20ranger-managed\x20skill(s)...');for(const {skillName:_0x43342d,level:_0x3d1417}of _0x2d6ee4){try{await _0x3c7f20[_0xa8f7f5(0x14f)](installSkill,_0x43342d,{'level':_0x3d1417,'cliVersion':_0x3c34ce});}catch(_0x5343f9){console['warn']('\x20\x20Failed\x20to\x20reinstall\x20'+_0x3d1417+_0xa8f7f5(0x163)+_0x43342d+':',_0x5343f9);}}}async function ensureActiveProfileGitignored(){const _0x32016b=_0x7da3,_0x1284dc={'qrqEy':function(_0x421d07,_0x420bf6,_0x1fa939){return _0x421d07(_0x420bf6,_0x1fa939);},'WneVk':function(_0x12b693){return _0x12b693();},'GJBkN':_0x32016b(0x16b),'PmUIZ':function(_0x7cb61f,_0x2a80f7,_0x496e77){return _0x7cb61f(_0x2a80f7,_0x496e77);},'juJvy':_0x32016b(0x18e),'InXKj':function(_0x13f859,_0x35e958){return _0x13f859===_0x35e958;}},_0x5d7d3b=_0x1284dc[_0x32016b(0x180)](join,_0x1284dc[_0x32016b(0x171)](getRangerDir),_0x1284dc['GJBkN']);if(!existsSync(_0x5d7d3b))return![];let _0x161bd3='';try{_0x161bd3=await _0x1284dc[_0x32016b(0x15d)](readFile,_0x5d7d3b,_0x1284dc[_0x32016b(0x175)]);}catch{return![];}const _0x24c71c=_0x161bd3[_0x32016b(0x15f)](/\r?\n/);if(_0x24c71c[_0x32016b(0x189)](_0x6beaa3=>_0x6beaa3[_0x32016b(0x188)]()==='active-profile.txt'))return![];let _0x51404c=_0x24c71c[_0x32016b(0x185)](_0x5a6813=>_0x5a6813[_0x32016b(0x188)]()==='active-feature.txt');_0x1284dc['InXKj'](_0x51404c,-0x1)&&(_0x51404c=_0x24c71c[_0x32016b(0x14c)]);_0x24c71c[_0x32016b(0x166)](_0x51404c,0x0,'active-profile.txt');let _0x3c459d=_0x24c71c['join']('\x0a');!_0x3c459d['endsWith']('\x0a')&&(_0x3c459d+='\x0a');try{await writeFile(_0x5d7d3b,_0x3c459d,'utf-8');}catch{return![];}return!![];}export async function update(){const _0x3bb28b=_0x7da3,_0x11cb2a={'qxjUD':function(_0x5f4ad5){return _0x5f4ad5();},'rtLPj':'Failed\x20to\x20check\x20for\x20updates.\x20Please\x20check\x20your\x20network\x20connection.','MdCPA':_0x3bb28b(0x160),'cOUpF':function(_0x27c3c7,_0x49391c){return _0x27c3c7<_0x49391c;},'jPJhh':'\x0aClaude\x20marketplace\x20updated\x20(trailhead).','haSDa':'✓\x20Migrated\x20active\x20profile\x20file'},_0x7f9025=_0x11cb2a[_0x3bb28b(0x16a)](getCurrentVersion);console[_0x3bb28b(0x162)]('\x0aCurrent\x20version:\x20'+_0x7f9025),console['log']('Checking\x20for\x20updates...');const _0x2fe9c0=_0x11cb2a[_0x3bb28b(0x16a)](getLatestVersion);if(!_0x2fe9c0)throw new Error(_0x11cb2a['rtLPj']);console['log'](_0x3bb28b(0x17a)+_0x2fe9c0);const _0x325729=compareVersions(_0x7f9025,_0x2fe9c0);let _0x248a8d=_0x7f9025;if(_0x325729===0x0)console[_0x3bb28b(0x162)](_0x11cb2a[_0x3bb28b(0x16f)]);else{if(_0x11cb2a[_0x3bb28b(0x157)](_0x325729,0x0))console[_0x3bb28b(0x162)](_0x3bb28b(0x155)+_0x7f9025+_0x3bb28b(0x154)+_0x2fe9c0+').');else{const _0x57546f=await runInstall();if(_0x57546f)console['log'](_0x3bb28b(0x164)+_0x2fe9c0),_0x248a8d=_0x2fe9c0;else throw new Error(_0x3bb28b(0x150)+PACKAGE_NAME+'@latest');}}await reinstallSkills(_0x248a8d);const _0x214daa=await _0x11cb2a['qxjUD'](updateClaudeMarketplace);_0x214daa&&console[_0x3bb28b(0x162)](_0x11cb2a[_0x3bb28b(0x15b)]);const _0x12c925=await updateClaudePlugin();_0x12c925&&console['log'](_0x3bb28b(0x18d));const _0x193062=await updateClaudePlugin(_0x3bb28b(0x17c));_0x193062&&console['log']((_0x12c925?'':'\x0a')+_0x3bb28b(0x173));const _0x4974bf=await _0x11cb2a['qxjUD'](migrateActiveProfileFile);_0x4974bf&&console[_0x3bb28b(0x162)](_0x11cb2a[_0x3bb28b(0x18f)]);const _0x45cdd2=await ensureActiveProfileGitignored();console['log'](_0x3bb28b(0x181));}
@@ -1 +1 @@
1
- (function(_0x350e9b,_0x5858b7){const _0xf6847c=_0x494c,_0x1ea22d=_0x350e9b();while(!![]){try{const _0x46f5ac=parseInt(_0xf6847c(0x1a6))/0x1+-parseInt(_0xf6847c(0x1b2))/0x2+-parseInt(_0xf6847c(0x1a1))/0x3+-parseInt(_0xf6847c(0x1b7))/0x4+-parseInt(_0xf6847c(0x1aa))/0x5+-parseInt(_0xf6847c(0x1a7))/0x6*(parseInt(_0xf6847c(0x19d))/0x7)+-parseInt(_0xf6847c(0x1b4))/0x8*(-parseInt(_0xf6847c(0x19c))/0x9);if(_0x46f5ac===_0x5858b7)break;else _0x1ea22d['push'](_0x1ea22d['shift']());}catch(_0x21cada){_0x1ea22d['push'](_0x1ea22d['shift']());}}}(_0x4b04,0xbf8c7));import{writeFile,readFile,unlink}from'fs/promises';import{join}from'path';import{existsSync}from'fs';import{chromium}from'playwright';import{encrypt}from'./utils/crypto.js';import{getToken}from'./utils/keychain.js';function _0x494c(_0x47d2a5,_0x35acc6){_0x47d2a5=_0x47d2a5-0x192;const _0x4b0496=_0x4b04();let _0x494c68=_0x4b0496[_0x47d2a5];return _0x494c68;}function _0x4b04(){const _0x45d734=['baseUrl','Profile\x20\x22','newPage','wMmkM','contextOptions','\x20\x20Run\x20ranger\x20setup\x20in\x20CI\x20to\x20decrypt\x20at\x20runtime.','eboNR','trackPhaseEnd','95967oRIMRC','1104131lYcCYV','close','catch','stringify','1513635MzZcYO','storageState','browser','\x0a✅\x20Profile\x20\x22','QWdrT','1557522AsUZEN','6skMOVp','\x22\x20not\x20found.\x20Run\x20first:\x20ranger\x20profile\x20add\x20','utf-8','7439900GdvnQx','settings.json','string','\x20\x20\x20A\x20browser\x20will\x20open\x20with\x20your\x20existing\x20session\x20(if\x20any).','Saving\x20authentication\x20state...','auth.json','tQVix','isTTY','1427436BhZuts','pzMRi','1896dZpJFy','log','ZuSLz','1744376YuBtXd','trackPhaseStart','\x20\x20\x20Update\x20your\x20authentication\x20as\x20needed.','vdmvz','gTlAe','hMpXG','.enc','goto'];_0x4b04=function(){return _0x45d734;};return _0x4b04();}import{getEnvDir,isEnvCi}from'./utils/settings.js';import{addProfileSetupBanner}from'./utils/profileSetupBanner.js';export async function updateEnv(_0x26e486,_0x5d5336){const _0x5b72bb=_0x494c,_0x1eb1b3={'MQWoy':function(_0x2461c0,_0x569ec6,_0x52f4a1){return _0x2461c0(_0x569ec6,_0x52f4a1);},'YlliI':function(_0x4101fb,_0x146113,_0x52c6ce){return _0x4101fb(_0x146113,_0x52c6ce);},'xfrZa':_0x5b72bb(0x1af),'GxNSH':_0x5b72bb(0x192),'hMpXG':'Non-interactive\x20mode\x20detected.\x0aThe\x20\x22ranger\x20profile\x20update\x22\x20command\x20requires\x20interactive\x20browser\x20authentication\x20and\x20cannot\x20be\x20run\x20in\x20non-TTY\x20environments\x20(CI,\x20scripts,\x20Claude\x20Code).\x0aTo\x20update\x20profile\x20authentication:\x0a\x20\x201.\x20Run\x20\x22ranger\x20profile\x20update\x20<name>\x22\x20in\x20an\x20interactive\x20terminal\x0a\x20\x202.\x20Commit\x20the\x20updated\x20encrypted\x20auth\x20file\x20to\x20git','wMmkM':_0x5b72bb(0x1a9),'dHVOx':function(_0x51f9b3,_0x2d7350){return _0x51f9b3===_0x2d7350;},'vdmvz':function(_0x2f16bd,_0xc7b37f){return _0x2f16bd(_0xc7b37f);},'tQVix':'browser_auth','aJprW':'\x0a📋\x20Authentication\x20Update','WncpW':_0x5b72bb(0x1ad),'kGFFq':_0x5b72bb(0x1b9),'gTlAe':'\x20\x20\x20When\x20you\x20are\x20done,\x20close\x20the\x20browser.\x0a','EWxGQ':function(_0x594e79,_0x4477ea){return _0x594e79(_0x4477ea);},'pzMRi':'\x20\x20Could\x20not\x20encrypt:\x20No\x20API\x20token\x20found.\x20Run:\x20ranger\x20setup\x20[token]','eboNR':'\x20\x20You\x20can\x20safely\x20commit\x20this\x20file\x20to\x20git.','QWdrT':_0x5b72bb(0x199),'ZuSLz':'config_write'},_0x5adb2e=getEnvDir(_0x26e486),_0x22f47e=_0x1eb1b3['MQWoy'](join,_0x5adb2e,_0x5b72bb(0x1ab)),_0x212072=_0x1eb1b3['YlliI'](join,_0x5adb2e,_0x1eb1b3['xfrZa']),_0x285ff5=_0x212072+_0x1eb1b3['GxNSH'],_0x2d467d=process['stdin'][_0x5b72bb(0x1b1)]&&process['stdout'][_0x5b72bb(0x1b1)];if(!_0x2d467d)throw new Error(_0x1eb1b3[_0x5b72bb(0x1bc)]);if(!existsSync(_0x5adb2e))throw new Error(_0x5b72bb(0x195)+_0x26e486+_0x5b72bb(0x1a8)+_0x26e486);if(!existsSync(_0x22f47e))throw new Error('Config\x20not\x20found\x20at\x20'+_0x22f47e+'.\x20Run\x20first:\x20ranger\x20profile\x20add\x20'+_0x26e486);const _0x24e150=await readFile(_0x22f47e,_0x1eb1b3[_0x5b72bb(0x197)]),_0x169f91=JSON['parse'](_0x24e150),_0x48b49f=_0x1eb1b3['dHVOx'](typeof _0x169f91['baseUrl'],_0x5b72bb(0x1ac))?_0x169f91[_0x5b72bb(0x194)]:undefined,_0x27e4a1=existsSync(_0x212072),_0x50b8a1=_0x1eb1b3['vdmvz'](isEnvCi,_0x26e486);_0x5d5336?.['trackPhaseStart'](_0x1eb1b3[_0x5b72bb(0x1b0)]),console[_0x5b72bb(0x1b5)](_0x1eb1b3['aJprW']),console[_0x5b72bb(0x1b5)](_0x1eb1b3['WncpW']),console['log'](_0x1eb1b3['kGFFq']),console[_0x5b72bb(0x1b5)](_0x1eb1b3[_0x5b72bb(0x1bb)]);const _0x34da63=await chromium['launch']({'headless':![]}),_0x5c402c=_0x27e4a1?{'storageState':_0x212072}:{};let _0x526363=null;try{_0x526363=await _0x34da63['newContext'](_0x5c402c),await _0x1eb1b3['EWxGQ'](addProfileSetupBanner,_0x526363);const _0x494444=await _0x526363[_0x5b72bb(0x196)]();await _0x494444[_0x5b72bb(0x193)](_0x48b49f||'about:blank'),await new Promise(_0x230d34=>{const _0x2f8198=_0x5b72bb;_0x494444['on'](_0x2f8198(0x19e),async()=>{const _0xc12af8=_0x2f8198;try{console['log'](_0xc12af8(0x1ae)),await _0x526363?.[_0xc12af8(0x1a2)]({'path':_0x212072}),_0x230d34();}catch{_0x230d34();}});});}finally{_0x526363&&await _0x526363[_0x5b72bb(0x19e)]()[_0x5b72bb(0x19f)](()=>{}),await _0x34da63['close']()['catch'](()=>{});}if(_0x50b8a1){const _0x6e6a15=await _0x1eb1b3['MQWoy'](readFile,_0x212072,_0x1eb1b3['wMmkM']),_0x253e04=await getToken();if(!_0x253e04)console['error'](_0x1eb1b3[_0x5b72bb(0x1b3)]),console[_0x5b72bb(0x1b5)]('✓\x20Auth\x20state\x20saved\x20to:\x20'+_0x212072);else{const _0x30a826=encrypt(_0x6e6a15,_0x253e04);await writeFile(_0x285ff5,_0x30a826),await _0x1eb1b3[_0x5b72bb(0x1ba)](unlink,_0x212072),console[_0x5b72bb(0x1b5)]('✓\x20Encrypted\x20auth\x20saved\x20to:\x20'+_0x285ff5),console[_0x5b72bb(0x1b5)](_0x1eb1b3[_0x5b72bb(0x19a)]),console['log'](_0x1eb1b3[_0x5b72bb(0x1a5)]);}}else console['log']('✓\x20Auth\x20state\x20saved\x20to:\x20'+_0x212072);_0x5d5336?.[_0x5b72bb(0x19b)]('browser_auth'),_0x5d5336?.[_0x5b72bb(0x1b8)]('config_write'),_0x169f91[_0x5b72bb(0x1a3)]=_0x169f91['browser']||{},_0x169f91[_0x5b72bb(0x1a3)]['contextOptions']=_0x169f91['browser'][_0x5b72bb(0x198)]||{},_0x169f91['browser'][_0x5b72bb(0x198)]['storageState']=_0x212072,await _0x1eb1b3['YlliI'](writeFile,_0x22f47e,JSON[_0x5b72bb(0x1a0)](_0x169f91,null,0x2)),console['log']('✓\x20Updated\x20config:\x20'+_0x22f47e),_0x5d5336?.[_0x5b72bb(0x19b)](_0x1eb1b3[_0x5b72bb(0x1b6)]),console['log'](_0x5b72bb(0x1a4)+_0x26e486+'\x22\x20authentication\x20updated');}
1
+ (function(_0x354ea0,_0x4fb433){const _0xebce74=_0x132d,_0x552faa=_0x354ea0();while(!![]){try{const _0x5e91e8=-parseInt(_0xebce74(0x1b8))/0x1*(-parseInt(_0xebce74(0x1a0))/0x2)+-parseInt(_0xebce74(0x1bb))/0x3*(parseInt(_0xebce74(0x1bd))/0x4)+-parseInt(_0xebce74(0x1b3))/0x5*(-parseInt(_0xebce74(0x1ac))/0x6)+-parseInt(_0xebce74(0x1ab))/0x7*(-parseInt(_0xebce74(0x1b7))/0x8)+-parseInt(_0xebce74(0x19a))/0x9+-parseInt(_0xebce74(0x1bc))/0xa+parseInt(_0xebce74(0x198))/0xb;if(_0x5e91e8===_0x4fb433)break;else _0x552faa['push'](_0x552faa['shift']());}catch(_0x24965f){_0x552faa['push'](_0x552faa['shift']());}}}(_0x178c,0x78130));import{writeFile,readFile,unlink}from'fs/promises';function _0x178c(){const _0x39b285=['trackPhaseEnd','918104XbqoEs','1cfAELI','\x20\x20\x20A\x20browser\x20will\x20open\x20with\x20your\x20existing\x20session\x20(if\x20any).','trackPhaseStart','191379rNgTWG','6862890wSuTWy','28BpEmQq','\x20\x20\x20Update\x20your\x20authentication\x20as\x20needed.','settings.json','\x0a✅\x20Profile\x20\x22','about:blank','JOGYd','Non-interactive\x20mode\x20detected.\x0aThe\x20\x22ranger\x20profile\x20update\x22\x20command\x20requires\x20interactive\x20browser\x20authentication\x20and\x20cannot\x20be\x20run\x20in\x20non-TTY\x20environments\x20(CI,\x20scripts,\x20Claude\x20Code).\x0aTo\x20update\x20profile\x20authentication:\x0a\x20\x201.\x20Run\x20\x22ranger\x20profile\x20update\x20<name>\x22\x20in\x20an\x20interactive\x20terminal\x0a\x20\x202.\x20Commit\x20the\x20updated\x20encrypted\x20auth\x20file\x20to\x20git','yRlda','VkJUR','pUEZE','2963213ZQpdst','OJZLO','6961797xAczMr','catch','✓\x20Auth\x20state\x20saved\x20to:\x20','browser_auth','FsAMf','contextOptions','1880722kbZIWy','.enc','isTTY','✓\x20Encrypted\x20auth\x20saved\x20to:\x20','Qzhzz','browser','KLZvV','log','goto','QpVTl','baseUrl','42pqDNiQ','39990gdLNmZ','\x22\x20not\x20found.\x20Run\x20first:\x20ranger\x20profile\x20add\x20','wHfGl','utf-8','mMIlM','parse','Config\x20not\x20found\x20at\x20','375pCQLJT','Profile\x20\x22','auth.json'];_0x178c=function(){return _0x39b285;};return _0x178c();}import{join}from'path';import{existsSync}from'fs';import{chromium}from'playwright';import{encrypt}from'./utils/crypto.js';import{getToken}from'./utils/keychain.js';import{getEnvDir,isEnvCi}from'./utils/settings.js';import{addProfileSetupBanner}from'./utils/profileSetupBanner.js';function _0x132d(_0xb2fa35,_0x5b63a2){_0xb2fa35=_0xb2fa35-0x198;const _0x178c87=_0x178c();let _0x132d3d=_0x178c87[_0xb2fa35];return _0x132d3d;}export async function updateEnv(_0x25f8c2,_0x5a5f46){const _0x3a9f7e=_0x132d,_0x2240bc={'pUEZE':function(_0xe1ba9a,_0x56952a){return _0xe1ba9a(_0x56952a);},'mMIlM':_0x3a9f7e(0x1bf),'OdYFD':_0x3a9f7e(0x1b5),'KedcG':function(_0x1b32ae,_0x59c9a9){return _0x1b32ae+_0x59c9a9;},'lTTiC':function(_0x2cb6e0,_0x1eb9a8){return _0x2cb6e0(_0x1eb9a8);},'KLZvV':function(_0x2fbb99,_0x2d5c96,_0x4153e3){return _0x2fbb99(_0x2d5c96,_0x4153e3);},'VkJUR':'utf-8','Qzhzz':function(_0x517b75,_0x534e1e){return _0x517b75===_0x534e1e;},'McxYc':'\x0a📋\x20Authentication\x20Update','etHpy':_0x3a9f7e(0x1b9),'QpVTl':_0x3a9f7e(0x1be),'JOGYd':'\x20\x20\x20When\x20you\x20are\x20done,\x20close\x20the\x20browser.\x0a','yRlda':function(_0x46b3e0,_0x46a0d3){return _0x46b3e0(_0x46a0d3);},'NpRbR':function(_0x3f8c58,_0x1784b3){return _0x3f8c58||_0x1784b3;},'GBrqM':function(_0x14297b,_0x1954ef,_0x223e5f){return _0x14297b(_0x1954ef,_0x223e5f);},'wHfGl':'\x20\x20You\x20can\x20safely\x20commit\x20this\x20file\x20to\x20git.','IChiE':'\x20\x20Run\x20ranger\x20setup\x20in\x20CI\x20to\x20decrypt\x20at\x20runtime.','FsAMf':'browser_auth','OJZLO':'config_write'},_0x17e26d=_0x2240bc[_0x3a9f7e(0x1c6)](getEnvDir,_0x25f8c2),_0x584238=join(_0x17e26d,_0x2240bc[_0x3a9f7e(0x1b0)]),_0x179b97=join(_0x17e26d,_0x2240bc['OdYFD']),_0x43d253=_0x2240bc['KedcG'](_0x179b97,_0x3a9f7e(0x1a1)),_0x5a3379=process['stdin'][_0x3a9f7e(0x1a2)]&&process['stdout'][_0x3a9f7e(0x1a2)];if(!_0x5a3379)throw new Error(_0x3a9f7e(0x1c3));if(!_0x2240bc[_0x3a9f7e(0x1c6)](existsSync,_0x17e26d))throw new Error(_0x3a9f7e(0x1b4)+_0x25f8c2+_0x3a9f7e(0x1ad)+_0x25f8c2);if(!_0x2240bc['lTTiC'](existsSync,_0x584238))throw new Error(_0x3a9f7e(0x1b2)+_0x584238+'.\x20Run\x20first:\x20ranger\x20profile\x20add\x20'+_0x25f8c2);const _0x4c7eee=await _0x2240bc[_0x3a9f7e(0x1a6)](readFile,_0x584238,_0x2240bc[_0x3a9f7e(0x1c5)]),_0x864c2e=JSON[_0x3a9f7e(0x1b1)](_0x4c7eee),_0x569283=_0x2240bc[_0x3a9f7e(0x1a4)](typeof _0x864c2e[_0x3a9f7e(0x1aa)],'string')?_0x864c2e[_0x3a9f7e(0x1aa)]:undefined,_0xc7b6d2=_0x2240bc['pUEZE'](existsSync,_0x179b97),_0x3f0911=_0x2240bc[_0x3a9f7e(0x1c6)](isEnvCi,_0x25f8c2);_0x5a5f46?.['trackPhaseStart'](_0x3a9f7e(0x19d)),console[_0x3a9f7e(0x1a7)](_0x2240bc['McxYc']),console['log'](_0x2240bc['etHpy']),console[_0x3a9f7e(0x1a7)](_0x2240bc[_0x3a9f7e(0x1a9)]),console['log'](_0x2240bc[_0x3a9f7e(0x1c2)]);const _0x56d8cb=await chromium['launch']({'headless':![]}),_0x3e030d=_0xc7b6d2?{'storageState':_0x179b97}:{};let _0x3421c1=null;try{_0x3421c1=await _0x56d8cb['newContext'](_0x3e030d),await _0x2240bc[_0x3a9f7e(0x1c4)](addProfileSetupBanner,_0x3421c1);const _0xe45a15=await _0x3421c1['newPage']();await _0xe45a15[_0x3a9f7e(0x1a8)](_0x2240bc['NpRbR'](_0x569283,_0x3a9f7e(0x1c1))),await new Promise(_0x523cc8=>{_0xe45a15['on']('close',async()=>{try{console['log']('Saving\x20authentication\x20state...'),await _0x3421c1?.['storageState']({'path':_0x179b97}),_0x523cc8();}catch{_0x523cc8();}});});}finally{_0x3421c1&&await _0x3421c1['close']()[_0x3a9f7e(0x19b)](()=>{}),await _0x56d8cb['close']()['catch'](()=>{});}if(_0x3f0911){const _0x22eded=await _0x2240bc['GBrqM'](readFile,_0x179b97,_0x3a9f7e(0x1af)),_0x568a5b=await getToken();if(!_0x568a5b)console['error']('\x20\x20Could\x20not\x20encrypt:\x20No\x20API\x20token\x20found.\x20Run:\x20ranger\x20setup\x20[token]'),console['log'](_0x3a9f7e(0x19c)+_0x179b97);else{const _0x5a39bf=encrypt(_0x22eded,_0x568a5b);await _0x2240bc[_0x3a9f7e(0x1a6)](writeFile,_0x43d253,_0x5a39bf),await unlink(_0x179b97),console[_0x3a9f7e(0x1a7)](_0x3a9f7e(0x1a3)+_0x43d253),console['log'](_0x2240bc[_0x3a9f7e(0x1ae)]),console[_0x3a9f7e(0x1a7)](_0x2240bc['IChiE']);}}else console['log'](_0x3a9f7e(0x19c)+_0x179b97);_0x5a5f46?.['trackPhaseEnd'](_0x2240bc[_0x3a9f7e(0x19e)]),_0x5a5f46?.[_0x3a9f7e(0x1ba)](_0x2240bc['OJZLO']),_0x864c2e[_0x3a9f7e(0x1a5)]=_0x864c2e[_0x3a9f7e(0x1a5)]||{},_0x864c2e['browser']['contextOptions']=_0x864c2e[_0x3a9f7e(0x1a5)][_0x3a9f7e(0x19f)]||{},_0x864c2e['browser'][_0x3a9f7e(0x19f)]['storageState']=_0x179b97,await writeFile(_0x584238,JSON['stringify'](_0x864c2e,null,0x2)),console['log']('✓\x20Updated\x20config:\x20'+_0x584238),_0x5a5f46?.[_0x3a9f7e(0x1b6)](_0x2240bc[_0x3a9f7e(0x199)]),console['log'](_0x3a9f7e(0x1c0)+_0x25f8c2+'\x22\x20authentication\x20updated');}
@@ -1 +1 @@
1
- (function(_0x5949f9,_0xb501a0){const _0x1a08e3=_0x13c3,_0x3fb2f1=_0x5949f9();while(!![]){try{const _0x4e9ab6=-parseInt(_0x1a08e3(0x1cb))/0x1+-parseInt(_0x1a08e3(0x1d6))/0x2+-parseInt(_0x1a08e3(0x1cf))/0x3+-parseInt(_0x1a08e3(0x1ca))/0x4*(-parseInt(_0x1a08e3(0x1cc))/0x5)+parseInt(_0x1a08e3(0x1d1))/0x6+parseInt(_0x1a08e3(0x1d2))/0x7*(parseInt(_0x1a08e3(0x1d5))/0x8)+parseInt(_0x1a08e3(0x1d3))/0x9;if(_0x4e9ab6===_0xb501a0)break;else _0x3fb2f1['push'](_0x3fb2f1['shift']());}catch(_0x46892f){_0x3fb2f1['push'](_0x3fb2f1['shift']());}}}(_0x4ad3,0x80ac4));import{join}from'path';function _0x13c3(_0x5d3f68,_0x1e3115){_0x5d3f68=_0x5d3f68-0x1c9;const _0x4ad387=_0x4ad3();let _0x13c313=_0x4ad387[_0x5d3f68];return _0x13c313;}function _0x4ad3(){const _0x383b46=['7jVhLEq','8108415ttnVDv','.\x20Run\x20first:\x20ranger\x20profile\x20add\x20','7810888Livgmg','1755468oUNPgm','Config\x20not\x20found\x20at\x20','8DmfOQG','166992XxJVVT','1077355MPAWug','Profile\x20\x22','log','2557548FLuvGV','tZMVz','696288sVcNiQ'];_0x4ad3=function(){return _0x383b46;};return _0x4ad3();}import{existsSync}from'fs';import{getEnvDir}from'./utils/settings.js';import{writeActiveProfileName}from'./utils/activeProfile.js';export async function useEnv(_0x1c979e){const _0x33b78f=_0x13c3,_0x149667={'RoCwh':function(_0x181cca,_0x1c72b2,_0x3e15dc){return _0x181cca(_0x1c72b2,_0x3e15dc);},'zyiJH':'settings.json','tZMVz':function(_0x37b49e,_0x57515e){return _0x37b49e(_0x57515e);},'TFlfd':function(_0x18cdeb,_0x41f5b1){return _0x18cdeb(_0x41f5b1);}},_0x489bd7=getEnvDir(_0x1c979e),_0x52d3cc=_0x149667['RoCwh'](join,_0x489bd7,_0x149667['zyiJH']);if(!existsSync(_0x489bd7))throw new Error(_0x33b78f(0x1cd)+_0x1c979e+'\x22\x20not\x20found.\x20Run\x20first:\x20ranger\x20profile\x20add\x20'+_0x1c979e);if(!_0x149667[_0x33b78f(0x1d0)](existsSync,_0x52d3cc))throw new Error(_0x33b78f(0x1c9)+_0x52d3cc+_0x33b78f(0x1d4)+_0x1c979e);await _0x149667['TFlfd'](writeActiveProfileName,_0x1c979e),console[_0x33b78f(0x1ce)]('\x0a✓\x20Now\x20using\x20profile\x20\x22'+_0x1c979e+'\x22');}
1
+ (function(_0x5199ec,_0x46f536){const _0x5aaa20=_0x3bcf,_0x4028d9=_0x5199ec();while(!![]){try{const _0x5962f1=parseInt(_0x5aaa20(0x151))/0x1+-parseInt(_0x5aaa20(0x157))/0x2*(-parseInt(_0x5aaa20(0x154))/0x3)+-parseInt(_0x5aaa20(0x14f))/0x4*(parseInt(_0x5aaa20(0x158))/0x5)+parseInt(_0x5aaa20(0x15a))/0x6+parseInt(_0x5aaa20(0x150))/0x7*(parseInt(_0x5aaa20(0x15b))/0x8)+parseInt(_0x5aaa20(0x159))/0x9+-parseInt(_0x5aaa20(0x14e))/0xa;if(_0x5962f1===_0x46f536)break;else _0x4028d9['push'](_0x4028d9['shift']());}catch(_0x57005b){_0x4028d9['push'](_0x4028d9['shift']());}}}(_0x564f,0x5cb7b));function _0x564f(){const _0x2ac6f4=['3156dejlIp','5kuScBE','3681936DGGRCx','1460868fYizif','8HjvskC','13748930OTFGaQ','308332veJFsM','5132057HgfuaN','229828vRvmbq','vSHwO','Profile\x20\x22','411mTIQBl','.\x20Run\x20first:\x20ranger\x20profile\x20add\x20','Config\x20not\x20found\x20at\x20'];_0x564f=function(){return _0x2ac6f4;};return _0x564f();}import{join}from'path';function _0x3bcf(_0x345da7,_0xd5d4d3){_0x345da7=_0x345da7-0x14e;const _0x564f6c=_0x564f();let _0x3bcf4f=_0x564f6c[_0x345da7];return _0x3bcf4f;}import{existsSync}from'fs';import{getEnvDir}from'./utils/settings.js';import{writeActiveProfileName}from'./utils/activeProfile.js';export async function useEnv(_0x518720){const _0x555614=_0x3bcf,_0x11006d={'vSHwO':function(_0x5891b1,_0x380f67){return _0x5891b1(_0x380f67);},'XRNln':'settings.json','kIPhH':function(_0x295e62,_0x201f6f){return _0x295e62(_0x201f6f);}},_0x4595b5=_0x11006d[_0x555614(0x152)](getEnvDir,_0x518720),_0x31015a=join(_0x4595b5,_0x11006d['XRNln']);if(!existsSync(_0x4595b5))throw new Error(_0x555614(0x153)+_0x518720+'\x22\x20not\x20found.\x20Run\x20first:\x20ranger\x20profile\x20add\x20'+_0x518720);if(!_0x11006d['kIPhH'](existsSync,_0x31015a))throw new Error(_0x555614(0x156)+_0x31015a+_0x555614(0x155)+_0x518720);await _0x11006d[_0x555614(0x152)](writeActiveProfileName,_0x518720),console['log']('\x0a✓\x20Now\x20using\x20profile\x20\x22'+_0x518720+'\x22');}