@ranger-testing/ranger-cli 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -0
- package/build/cli.js +230 -8
- package/build/cli.js.map +1 -1
- package/build/commands/addEnv.js +1 -1
- package/build/commands/addEnv.js.map +1 -1
- package/build/commands/clean.js +1 -1
- package/build/commands/clean.js.map +1 -1
- package/build/commands/dataMcpServer.js +1 -1
- package/build/commands/dataMcpServer.js.map +1 -1
- package/build/commands/env.js +46 -0
- package/build/commands/env.js.map +1 -0
- package/build/commands/feature.js +494 -0
- package/build/commands/feature.js.map +1 -0
- package/build/commands/index.js +1 -0
- package/build/commands/index.js.map +1 -1
- package/build/commands/skillup.js +65 -16
- package/build/commands/skillup.js.map +1 -1
- package/build/commands/start.js +1 -1
- package/build/commands/start.js.map +1 -1
- package/build/commands/status.js +42 -11
- package/build/commands/status.js.map +1 -1
- package/build/commands/update.js +29 -16
- package/build/commands/update.js.map +1 -1
- package/build/commands/updateEnv.js +1 -1
- package/build/commands/updateEnv.js.map +1 -1
- package/build/commands/useEnv.js +1 -1
- package/build/commands/useEnv.js.map +1 -1
- package/build/commands/utils/browserSessionsApi.js +1 -1
- package/build/commands/utils/browserSessionsApi.js.map +1 -1
- package/build/commands/utils/claudeConfig.js +73 -0
- package/build/commands/utils/claudeConfig.js.map +1 -0
- package/build/commands/utils/cliSecret.js +1 -1
- package/build/commands/utils/environment.js +69 -0
- package/build/commands/utils/environment.js.map +1 -0
- package/build/commands/utils/featureApi.js +190 -0
- package/build/commands/utils/featureApi.js.map +1 -0
- package/build/commands/utils/featureReportGenerator.js +170 -0
- package/build/commands/utils/featureReportGenerator.js.map +1 -0
- package/build/commands/utils/keychain.js +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js.map +1 -1
- package/build/commands/utils/mcpConfig.js +1 -1
- package/build/commands/utils/settings.js +2 -2
- package/build/commands/utils/settings.js.map +1 -1
- package/build/commands/utils/skills.js +1 -1
- package/build/commands/utils/skills.js.map +1 -1
- package/build/commands/verifyFeature.js +451 -0
- package/build/commands/verifyFeature.js.map +1 -0
- package/build/commands/verifyInBrowser.js +1 -1
- package/build/commands/verifyInBrowser.js.map +1 -1
- package/build/skills/feature-tracker/SKILL.md +185 -0
- package/build/skills/feature-tracker/create.md +105 -0
- package/build/skills/feature-tracker/manage.md +145 -0
- package/build/skills/feature-tracker/report.md +159 -0
- package/build/skills/feature-tracker/start.md +93 -0
- package/build/skills/feature-tracker/verify.md +143 -0
- package/package.json +23 -20
- package/build/agents/bug-basher.md +0 -259
- package/build/agents/e2e-test-recommender.md +0 -164
- package/build/agents/quality-advocate.md +0 -164
- package/build/agents/ui-verifier.md +0 -100
- package/build/commands/addApp.js +0 -21
- package/build/commands/initAgents.js +0 -84
- package/build/commands/utils/agents.js +0 -45
- package/build/index.js +0 -436
- package/build/test-auth.js +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(_0xe5b1c4,_0x870eb5){const _0x119ce8=_0x495d,_0x3a195e=_0xe5b1c4();while(!![]){try{const _0x20b92e=parseInt(_0x119ce8(0x1ec))/0x1*(parseInt(_0x119ce8(0x1ed))/0x2)+-parseInt(_0x119ce8(0x1da))/0x3*(-parseInt(_0x119ce8(0x1d7))/0x4)+-parseInt(_0x119ce8(0x1f6))/0x5*(-parseInt(_0x119ce8(0x1ea))/0x6)+-parseInt(_0x119ce8(0x1cc))/0x7+parseInt(_0x119ce8(0x1dd))/0x8*(-parseInt(_0x119ce8(0x1c9))/0x9)+-parseInt(_0x119ce8(0x1c4))/0xa*(parseInt(_0x119ce8(0x1d3))/0xb)+-parseInt(_0x119ce8(0x1c0))/0xc*(-parseInt(_0x119ce8(0x1f3))/0xd);if(_0x20b92e===_0x870eb5)break;else _0x3a195e['push'](_0x3a195e['shift']());}catch(_0x40b08f){_0x3a195e['push'](_0x3a195e['shift']());}}}(_0x1880,0x7a248));const _0x4d4a9b=(function(){let _0x3f7dbf=!![];return function(_0x3878de,_0x1ae485){const _0x2ad11e=_0x3f7dbf?function(){if(_0x1ae485){const _0x86f80d=_0x1ae485['apply'](_0x3878de,arguments);return _0x1ae485=null,_0x86f80d;}}:function(){};return _0x3f7dbf=![],_0x2ad11e;};}()),_0x499ffa=_0x4d4a9b(this,function(){const _0x406df2=_0x495d;return _0x499ffa[_0x406df2(0x1e4)]()[_0x406df2(0x1c3)]('(((.+)+)+)+$')[_0x406df2(0x1e4)]()[_0x406df2(0x1f0)](_0x499ffa)['search'](_0x406df2(0x1d0));});_0x499ffa();import{getToken}from'./keychain.js';import{getSignedHeaders}from'./cliSecret.js';function getApiBaseUrl(){const _0x15e7d5=_0x495d,_0x312fa6={'CqwsU':_0x15e7d5(0x1eb)};return process[_0x15e7d5(0x1c7)]['RANGER_API_URL']||_0x312fa6[_0x15e7d5(0x1de)];}export async function createBrowserSession(_0x12b88d){const _0x42c0d9=_0x495d,_0x3fa858={'tRgvI':function(_0x23c800){return _0x23c800();},'Botmf':_0x42c0d9(0x1dc),'YJosP':function(_0xf210b2){return _0xf210b2();},'QILBs':'application/json'},_0x554b58=await _0x3fa858[_0x42c0d9(0x1c2)](getToken);if(!_0x554b58)throw new Error(_0x3fa858[_0x42c0d9(0x1e7)]);const _0x2aa5ce=_0x3fa858[_0x42c0d9(0x1ee)](getApiBaseUrl),_0x350199=await fetch(_0x2aa5ce+'/api/v1/mcp/browser-sessions',{'method':'POST','headers':{'Authorization':_0x42c0d9(0x1e2)+_0x554b58,'Content-Type':_0x3fa858[_0x42c0d9(0x1d1)]},'body':JSON[_0x42c0d9(0x1e9)]({'environmentName':_0x12b88d?.['environmentName'],'settings':_0x12b88d?.[_0x42c0d9(0x1ce)],'task':_0x12b88d?.[_0x42c0d9(0x1d8)],'url':_0x12b88d?.['url']})});if(!_0x350199['ok']){const _0x20a1e1=await _0x350199[_0x42c0d9(0x1e3)]();throw new Error(_0x42c0d9(0x1c1)+_0x20a1e1);}return _0x350199['json']();}export async function updateBrowserSession(_0x19743c,_0x36da24){const _0x1da421=_0x495d,_0x1483f0={'QkrqA':function(_0x5e4740){return _0x5e4740();},'Dmlmp':function(_0x45f3de,_0x540040){return _0x45f3de===_0x540040;},'oBWQu':'qWZvL','OTTta':_0x1da421(0x1dc),'VuMlh':function(_0x2c4ef7,_0x10bccf,_0x52acdc){return _0x2c4ef7(_0x10bccf,_0x52acdc);},'ulRez':'PATCH','xZPTP':'application/json'},_0x5aae09=await _0x1483f0[_0x1da421(0x1ca)](getToken);if(!_0x5aae09){if(_0x1483f0[_0x1da421(0x1c8)](_0x1483f0['oBWQu'],_0x1483f0['oBWQu']))throw new Error(_0x1483f0[_0x1da421(0x1e1)]);else{const _0x593e2f=_0x389138?function(){if(_0x3b1f8f){const _0xb18fb0=_0x5c1590['apply'](_0x5c99cf,arguments);return _0x2b318d=null,_0xb18fb0;}}:function(){};return _0x5b6792=![],_0x593e2f;}}const _0xe36362=_0x1483f0[_0x1da421(0x1ca)](getApiBaseUrl),_0x171e14=await _0x1483f0['VuMlh'](fetch,_0xe36362+_0x1da421(0x1d4)+_0x19743c,{'method':_0x1483f0[_0x1da421(0x1ef)],'headers':{'Authorization':_0x1da421(0x1e2)+_0x5aae09,'Content-Type':_0x1483f0[_0x1da421(0x1f4)]},'body':JSON[_0x1da421(0x1e9)](_0x36da24)});if(!_0x171e14['ok']){const _0x55cdca=await _0x171e14[_0x1da421(0x1e3)]();throw new Error(_0x1da421(0x1db)+_0x55cdca);}return _0x171e14[_0x1da421(0x1cd)]();}function _0x495d(_0x2554c9,_0x400607){_0x2554c9=_0x2554c9-0x1c0;const _0x53ecf5=_0x1880();let _0x499ffa=_0x53ecf5[_0x2554c9];if(_0x495d['CUMQUf']===undefined){var _0x4d4a9b=function(_0x1b8b15){const _0x940467='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1ee518='',_0x2efaf4='',_0x356e11=_0x1ee518+_0x4d4a9b;for(let _0x2ee4e3=0x0,_0x1a77d0,_0x35c877,_0x3ca75e=0x0;_0x35c877=_0x1b8b15['charAt'](_0x3ca75e++);~_0x35c877&&(_0x1a77d0=_0x2ee4e3%0x4?_0x1a77d0*0x40+_0x35c877:_0x35c877,_0x2ee4e3++%0x4)?_0x1ee518+=_0x356e11['charCodeAt'](_0x3ca75e+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x1a77d0>>(-0x2*_0x2ee4e3&0x6)):_0x2ee4e3:0x0){_0x35c877=_0x940467['indexOf'](_0x35c877);}for(let _0x599ae7=0x0,_0x54a955=_0x1ee518['length'];_0x599ae7<_0x54a955;_0x599ae7++){_0x2efaf4+='%'+('00'+_0x1ee518['charCodeAt'](_0x599ae7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2efaf4);};_0x495d['dDFfbi']=_0x4d4a9b,_0x495d['kuJtFc']={},_0x495d['CUMQUf']=!![];}const _0x188040=_0x53ecf5[0x0],_0x495d9d=_0x2554c9+_0x188040,_0x50ea16=_0x495d['kuJtFc'][_0x495d9d];if(!_0x50ea16){const _0x389138=function(_0x8ebe9f){this['WYCfVi']=_0x8ebe9f,this['OIgjzJ']=[0x1,0x0,0x0],this['caipmM']=function(){return'newState';},this['JNgueB']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['MEXrKv']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x389138['prototype']['aFYDkj']=function(){const _0xba0570=new RegExp(this['JNgueB']+this['MEXrKv']),_0x263013=_0xba0570['test'](this['caipmM']['toString']())?--this['OIgjzJ'][0x1]:--this['OIgjzJ'][0x0];return this['uyIoBO'](_0x263013);},_0x389138['prototype']['uyIoBO']=function(_0x440efe){if(!Boolean(~_0x440efe))return _0x440efe;return this['haaYJz'](this['WYCfVi']);},_0x389138['prototype']['haaYJz']=function(_0x5b6792){for(let _0x3b1f8f=0x0,_0xb0132b=this['OIgjzJ']['length'];_0x3b1f8f<_0xb0132b;_0x3b1f8f++){this['OIgjzJ']['push'](Math['round'](Math['random']())),_0xb0132b=this['OIgjzJ']['length'];}return _0x5b6792(this['OIgjzJ'][0x0]);},new _0x389138(_0x495d)['aFYDkj'](),_0x499ffa=_0x495d['dDFfbi'](_0x499ffa),_0x495d['kuJtFc'][_0x495d9d]=_0x499ffa;}else _0x499ffa=_0x50ea16;return _0x499ffa;}export async function getBrowserSession(_0x1f47ba){const _0xd16379=_0x495d,_0x3ddc78={'MLJmw':function(_0x1b9a3c){return _0x1b9a3c();},'JpgLF':_0xd16379(0x1cf)},_0x3f9be6=await getToken();if(!_0x3f9be6)throw new Error(_0xd16379(0x1dc));const _0x24a84f=_0x3ddc78['MLJmw'](getApiBaseUrl),_0x53322f=await fetch(_0x24a84f+'/api/v1/mcp/browser-sessions/'+_0x1f47ba,{'method':_0x3ddc78[_0xd16379(0x1d9)],'headers':{'Authorization':'Bearer\x20'+_0x3f9be6}});if(!_0x53322f['ok']){const _0x40b9ba=await _0x53322f['text']();throw new Error(_0xd16379(0x1e0)+_0x40b9ba);}return _0x53322f[_0xd16379(0x1cd)]();}export async function uploadTrace(_0x34d2ac,_0x166f09){const _0xa576bd=_0x495d,_0x7e4cc5={'tHSCu':function(_0x1da804,_0x59912c,_0x50a560){return _0x1da804(_0x59912c,_0x50a560);},'nCQSr':'PUT'},_0x46a24b=await _0x7e4cc5['tHSCu'](fetch,_0x34d2ac,{'method':_0x7e4cc5[_0xa576bd(0x1d5)],'headers':{'Content-Type':'application/zip','Content-Length':_0x166f09['length'][_0xa576bd(0x1e4)]()},'body':_0x166f09});if(!_0x46a24b['ok']){const _0x51fdd1=await _0x46a24b[_0xa576bd(0x1e3)]();throw new Error('Failed\x20to\x20upload\x20trace:\x20'+_0x51fdd1);}}function _0x1880(){const _0x202017=['nerfrNf0ra','mZi3mJi0sgXIB0DU','wuPVC1a','DwXszxO','y29UC3rYDwn0B3i','Ahr0Chm6lY90CMfJzs5WBgf5D3jPz2H0lMrLDI8/DhjHy2u9','vvPKEe0','mZi5ntm3AhfSwvHM','EfPqvfa','Awfdufa','nvnvBwLHtq','BMfHyK0','nJbdCgvnD2y','rMfPBgvKihrVignYzwf0zsbICM93C2vYihnLC3nPB246ia','DfjNDKK','C2vHCMnO','ndy1ndeXmgjSwNbxzG','rMLszgy','tMPtrLa','zw52','rg1SBxa','mtqXnJz3Ee1dyNy','uwTYCue','Au5hBLu','nde2odu1nKLmtKT2wq','ANnVBG','C2v0DgLUz3m','r0vu','kcGOlISPkYKRksSK','uuLmqNm','rLnHveS','mJjrBw9NwfO','l2fWAs92ms9Ty3aVyNjVD3nLCI1ZzxnZAw9UCY8','BKnru3i','Dvbtwva','ndb6AvHytfO','DgfZAW','sNbNtey','mtC4nJy4AffMEvv2','rMfPBgvKihrVihvWzgf0zsbICM93C2vYihnLC3nPB246ia','tM8GqvbjihrVA2vUignVBMzPz3vYzwqUifj1BJOGCMfUz2vYihn0yxj0idX0B2TLBJ4','mty3mKP1Dhfhuq','q3f3C1u','rMfPBgvKihrVigDLDcbbBNrOCM9WAwmGqvbjigTLEtOG','rMfPBgvKihrVigDLDcbICM93C2vYihnLC3nPB246ia','t1ruDge','qMvHCMvYia','Dgv4Da','Dg9tDhjPBMC','Aerbshm','B3DnC3C','qM90Bwy','BgvUz3rO','C3rYAw5NAwz5','ntG3mZaZngjKsxjiqG','Ahr0Chm6lY9HCgKUCMfUz2vYlM5LDa'];_0x1880=function(){return _0x202017;};return _0x1880();}export async function uploadConversation(_0x20431a,_0x3221cb){const _0x11b8cf=_0x495d,_0x54e34a={'hDAHs':function(_0x2fa9b5,_0x587334,_0xa1cb10){return _0x2fa9b5(_0x587334,_0xa1cb10);},'iaCPP':'PUT','uPSYP':'application/jsonl'},_0x13fa0c=await _0x54e34a[_0x11b8cf(0x1e5)](fetch,_0x20431a,{'method':_0x54e34a[_0x11b8cf(0x1f5)],'headers':{'Content-Type':_0x54e34a[_0x11b8cf(0x1d6)],'Content-Length':_0x3221cb[_0x11b8cf(0x1e8)][_0x11b8cf(0x1e4)]()},'body':_0x3221cb});if(!_0x13fa0c['ok']){const _0x5a28f9=await _0x13fa0c[_0x11b8cf(0x1e3)]();throw new Error('Failed\x20to\x20upload\x20conversation:\x20'+_0x5a28f9);}}export function buildTraceViewerUrl(_0x30ec3e){const _0x977d1d=_0x495d,_0x850f4e={'PtLhN':function(_0x5db5de,_0x512d54){return _0x5db5de(_0x512d54);}},_0x3be293=_0x850f4e['PtLhN'](encodeURIComponent,_0x30ec3e);return _0x977d1d(0x1f1)+_0x3be293;}export async function getAnthropicApiKey(){const _0x54898c=_0x495d,_0x4272e1={'owMsw':function(_0x350a07){return _0x350a07();},'naabM':'No\x20API\x20token\x20configured.\x20Run:\x20ranger\x20start\x20<token>','FiRdf':function(_0x49605d){return _0x49605d();},'iNGnU':function(_0x75f584,_0x598142){return _0x75f584(_0x598142);},'UZdxM':'anthropic-api-key','FSaTK':function(_0x355516,_0x147581,_0x2c68cd){return _0x355516(_0x147581,_0x2c68cd);},'NjSFP':'GET'},_0xefb2ec=await _0x4272e1[_0x54898c(0x1e6)](getToken);if(!_0xefb2ec)throw new Error(_0x4272e1[_0x54898c(0x1f7)]);const _0x3c868f=_0x4272e1[_0x54898c(0x1c5)](getApiBaseUrl),_0x155246=_0x4272e1[_0x54898c(0x1cb)](getSignedHeaders,_0x4272e1[_0x54898c(0x1f2)]),_0x37010a=await _0x4272e1[_0x54898c(0x1d2)](fetch,_0x3c868f+'/api/v1/mcp/anthropic-api-key',{'method':_0x4272e1[_0x54898c(0x1c6)],'headers':{'Authorization':_0x54898c(0x1e2)+_0xefb2ec,..._0x155246}});if(!_0x37010a['ok']){const _0x48b900=await _0x37010a[_0x54898c(0x1e3)]();throw new Error(_0x54898c(0x1df)+_0x48b900);}const _0x230d72=await _0x37010a[_0x54898c(0x1cd)]();return _0x230d72['apiKey'];}
|
|
1
|
+
(function(_0x1be9fe,_0x17577d){const _0x4e51ac=_0x42eb,_0xe63d37=_0x1be9fe();while(!![]){try{const _0x1b69ec=parseInt(_0x4e51ac(0xfe))/0x1*(-parseInt(_0x4e51ac(0x115))/0x2)+-parseInt(_0x4e51ac(0x13a))/0x3*(-parseInt(_0x4e51ac(0x135))/0x4)+parseInt(_0x4e51ac(0xef))/0x5+parseInt(_0x4e51ac(0x130))/0x6+-parseInt(_0x4e51ac(0x123))/0x7*(-parseInt(_0x4e51ac(0x139))/0x8)+-parseInt(_0x4e51ac(0x120))/0x9*(parseInt(_0x4e51ac(0x106))/0xa)+-parseInt(_0x4e51ac(0xf3))/0xb;if(_0x1b69ec===_0x17577d)break;else _0xe63d37['push'](_0xe63d37['shift']());}catch(_0x43425c){_0xe63d37['push'](_0xe63d37['shift']());}}}(_0x46e2,0x4c2bc));const _0x14ed06=(function(){const _0xf589f4=_0x42eb,_0x4bc276={'QVesj':_0xf589f4(0x107),'shiWY':function(_0x23b4d2,_0x12d8c3){return _0x23b4d2!==_0x12d8c3;},'tKuQY':_0xf589f4(0x10c)};let _0x2157a7=!![];return function(_0x581b0e,_0x27e6c6){const _0x441c58=_0xf589f4;if(_0x4bc276[_0x441c58(0x11a)](_0x4bc276['tKuQY'],_0x4bc276[_0x441c58(0x127)]))throw new _0x4ac577(_0x4bc276[_0x441c58(0xff)]);else{const _0x211683=_0x2157a7?function(){const _0xced371=_0x441c58;if(_0x27e6c6){const _0x44996e=_0x27e6c6[_0xced371(0xf0)](_0x581b0e,arguments);return _0x27e6c6=null,_0x44996e;}}:function(){};return _0x2157a7=![],_0x211683;}};}()),_0x256597=_0x14ed06(this,function(){const _0x35c64e=_0x42eb,_0xa1874d={'JvGgB':'(((.+)+)+)+$'};return _0x256597[_0x35c64e(0x113)]()['search'](_0xa1874d[_0x35c64e(0x101)])[_0x35c64e(0x113)]()[_0x35c64e(0x121)](_0x256597)[_0x35c64e(0x102)](_0xa1874d[_0x35c64e(0x101)]);});_0x256597();import{getToken}from'./keychain.js';function _0x46e2(){const _0x1f2531=['BMDruLm','D1zjCuO','vfzWthy','vg1iuuK','odq2mdq4u21kA2Tm','C3rYAw5NAwz5','AKDvr0W','yxbPs2v5','BgvUz3rO','nJaYnZe2Bffwt0Tx','vKXzu1q','zvrcAem','Ahr0Chm6lY90CMfJzs5WBgf5D3jPz2H0lMrLDI8/DhjHy2u9','mta0zwzey2HX','nMTwA3bmqG','Be1wAeG','rMfPBgvKihrVigDLDcb1CgXVywqGvvjmCZOG','qMvHCMvYia','zvzSzNC','yxbWBgLJyxrPB24VANnVBMW','mJa5mdG4nuLnDfbgsq','yxbWBhK','v1v0B2u','tMHLzum','mZmYmJm4nwLeBKnuza','AvLNvwy','Auryuvu','uhbIzhq','Dgv4Da','uefuq0G','wfvXEem','qM9ZC3e','qKveveC','zLfcvKe','BLbwBgi','mtzqyNDKB2C','uvzLC2O','ANnVBG','sNzhz0i','C2vHCMnO','seXtAgu','EfnyvwG','zw52AxjVBM1LBNroyw1L','mJeYmdC1mePYwMzstG','tM8GqvbjihrVA2vUignVBMzPz3vYzwqUifj1BJOGCMfUz2vYihn0yxj0idX0B2TLBJ4','s0n2B1q','yxbWBgLJyxrPB24VANnVBG','r1znreK','uMn4zeC','AKDXyvC','rMfPBgvKihrVignYzwf0zsbICM93C2vYihnLC3nPB246ia','q0HwALi','twT6Ewe','sKLzwLG','zujNvfu','vLPwwhi','Dg9tDhjPBMC','DgfZAW','nde2mJzpswD6shG','s21guMG','seD1Cei','BeLktwe','Cuj1D0O','C2HPv1K','l2fWAs92ms9Ty3aVyw50AhjVCgLJlwfWAs1RzxK','rMfPBgvKihrVihvWzgf0zsbICM93C2vYihnLC3nPB246ia','v09OAe8','wM1Lsge','AhLjCwu','ouDovvfeqW','y29UC3rYDwn0B3i','yw50AhjVCgLJlwfWAs1RzxK','mtyWnZy5swXJy1H3','tvfutw0','EenVufC','rMfPBgvKihrVihvWBg9HzcbMAwXLoIa','DeT1uvK','yxbWBgLJyxrPB24VEMLW','Aw1Hz2uVCg5N','l2fWAs92ms9Ty3aVyNjVD3nLCI1ZzxnZAw9UCY8','ru11zKW'];_0x46e2=function(){return _0x1f2531;};return _0x46e2();}import{getSignedHeaders}from'./cliSecret.js';import{getApiBaseUrl}from'./environment.js';export async function createBrowserSession(_0x152ad1){const _0x40f82c=_0x42eb,_0x193158={'Bossq':'No\x20API\x20token\x20configured.\x20Run:\x20ranger\x20start\x20<token>','ZmeHa':function(_0x47f1b9,_0x120b02){return _0x47f1b9===_0x120b02;},'EMufL':_0x40f82c(0x13b),'KCvoT':'POST','BEDTG':_0x40f82c(0x109)},_0x3be7db=await getToken();if(!_0x3be7db){if(_0x193158[_0x40f82c(0x11e)]('lMVhH',_0x193158[_0x40f82c(0x12b)]))throw new Error(_0x193158[_0x40f82c(0xfa)]);else throw new _0x59e37b(_0x193158[_0x40f82c(0xfa)]);}const _0x325b93=getApiBaseUrl(),_0x110692=await fetch(_0x325b93+'/api/v1/mcp/browser-sessions',{'method':_0x193158[_0x40f82c(0x108)],'headers':{'Authorization':_0x40f82c(0x13d)+_0x3be7db,'Content-Type':_0x193158[_0x40f82c(0xfb)]},'body':JSON[_0x40f82c(0x131)]({'environmentName':_0x152ad1?.[_0x40f82c(0x105)],'settings':_0x152ad1?.['settings'],'task':_0x152ad1?.[_0x40f82c(0x114)],'url':_0x152ad1?.['url']})});if(!_0x110692['ok']){const _0x4ff0cb=await _0x110692['text']();throw new Error(_0x40f82c(0x10d)+_0x4ff0cb);}return _0x110692['json']();}export async function updateBrowserSession(_0xc2564a,_0x31ab77){const _0x46fe4a=_0x42eb,_0x510575={'zLkOV':function(_0x352aae){return _0x352aae();},'VZVXr':_0x46fe4a(0xf2),'Ppbdt':'No\x20API\x20token\x20configured.\x20Run:\x20ranger\x20start\x20<token>','xSXUh':function(_0x14c6c7){return _0x14c6c7();},'SmLNr':_0x46fe4a(0xf8),'ngQRS':'application/json'},_0x2b4968=await _0x510575['zLkOV'](getToken);if(!_0x2b4968){if(_0x510575[_0x46fe4a(0x112)]===_0x510575[_0x46fe4a(0x112)])throw new Error(_0x510575[_0x46fe4a(0xf6)]);else{const _0x368407=_0x1a1d02[_0x46fe4a(0xf0)](_0x14c899,arguments);return _0x1a2f8f=null,_0x368407;}}const _0x13355a=_0x510575[_0x46fe4a(0x104)](getApiBaseUrl),_0x3d11da=await fetch(_0x13355a+_0x46fe4a(0x12a)+_0xc2564a,{'method':_0x510575['SmLNr'],'headers':{'Authorization':'Bearer\x20'+_0x2b4968,'Content-Type':_0x510575[_0x46fe4a(0x12c)]},'body':JSON[_0x46fe4a(0x131)](_0x31ab77)});if(!_0x3d11da['ok']){const _0x20a369=await _0x3d11da[_0x46fe4a(0xf7)]();throw new Error(_0x46fe4a(0x11c)+_0x20a369);}return _0x3d11da[_0x46fe4a(0x100)]();}export async function getBrowserSession(_0xb05296){const _0x597c6f=_0x42eb,_0x34ab08={'hCniF':function(_0x2b4e93,_0x474635){return _0x2b4e93(_0x474635);},'wVIqJ':function(_0xc494df){return _0xc494df();},'VLYST':_0x597c6f(0x107),'eVlfw':function(_0x427bc0){return _0x427bc0();},'nPVlb':'GET','lIJMa':function(_0x327845,_0x538809){return _0x327845===_0x538809;},'eBgTU':_0x597c6f(0x10b),'fQBVA':_0x597c6f(0x119)},_0x2220bb=await _0x34ab08[_0x597c6f(0x12d)](getToken);if(!_0x2220bb)throw new Error(_0x34ab08[_0x597c6f(0x136)]);const _0x2e897f=_0x34ab08[_0x597c6f(0x13e)](getApiBaseUrl),_0x3f8eb0=await fetch(_0x2e897f+_0x597c6f(0x12a)+_0xb05296,{'method':_0x34ab08[_0x597c6f(0xfd)],'headers':{'Authorization':_0x597c6f(0x13d)+_0x2220bb}});if(!_0x3f8eb0['ok']){if(_0x34ab08[_0x597c6f(0x118)](_0x34ab08[_0x597c6f(0x111)],_0x34ab08[_0x597c6f(0xfc)])){const _0x58b04=_0x34ab08['hCniF'](_0x43c42a,_0x44a88c);return _0x597c6f(0x138)+_0x58b04;}else{const _0x3314e1=await _0x3f8eb0[_0x597c6f(0xf7)]();throw new Error('Failed\x20to\x20get\x20browser\x20session:\x20'+_0x3314e1);}}return _0x3f8eb0[_0x597c6f(0x100)]();}export async function getUploadUrls(_0x465f65,_0x4c09a0,_0x401338){const _0x4a326d=_0x42eb,_0x41f255={'GIgfo':function(_0x50c810){return _0x50c810();},'iDXQU':function(_0x5dc12f,_0x5075c4){return _0x5dc12f!==_0x5075c4;},'CHVjR':_0x4a326d(0x11d),'Mkzya':_0x4a326d(0x107),'Wlopi':function(_0x4bae16){return _0x4bae16();},'YVqST':function(_0x172a62,_0xf2d6ff,_0x7449a0){return _0x172a62(_0xf2d6ff,_0x7449a0);},'HLShe':'POST','XUqxC':'application/json','RNcnQ':function(_0x357795,_0x663733){return _0x357795===_0x663733;},'MQTMm':_0x4a326d(0x116),'mWEOd':_0x4a326d(0x110)},_0x16733e=await _0x41f255['GIgfo'](getToken);if(!_0x16733e){if(_0x41f255[_0x4a326d(0xf5)](_0x41f255[_0x4a326d(0x10e)],_0x4a326d(0x11d))){if(_0x21fedb){const _0x6fb59a=_0x424a77['apply'](_0x2c1fa9,arguments);return _0xdd2e0c=null,_0x6fb59a;}}else throw new Error(_0x41f255[_0x4a326d(0x10f)]);}const _0x55b573=_0x41f255['Wlopi'](getApiBaseUrl),_0x591d82=await _0x41f255['YVqST'](fetch,_0x55b573+_0x4a326d(0x12a)+_0x465f65+'/upload-urls',{'method':_0x41f255[_0x4a326d(0x103)],'headers':{'Authorization':_0x4a326d(0x13d)+_0x16733e,'Content-Type':_0x41f255[_0x4a326d(0xf9)]},'body':JSON['stringify']({'filename':_0x4c09a0,'filetype':_0x401338})});if(!_0x591d82['ok']){if(_0x41f255['RNcnQ'](_0x41f255[_0x4a326d(0x124)],_0x41f255['mWEOd']))throw new _0x37e1f3(_0x4a326d(0x107));else{const _0x28e739=await _0x591d82[_0x4a326d(0xf7)]();throw new Error(_0x4a326d(0x13c)+_0x28e739);}}return _0x591d82['json']();}export async function uploadFile(_0xbe6b64,_0x1e74bc,_0x1ac446){const _0xfeed4a=_0x42eb,_0x1f0518={'RpYDR':'PUT'},_0x920732=await fetch(_0xbe6b64,{'method':_0x1f0518['RpYDR'],'headers':{'Content-Type':_0x1ac446,'Content-Length':_0x1e74bc[_0xfeed4a(0x134)][_0xfeed4a(0x113)]()},'body':_0x1e74bc});if(!_0x920732['ok']){const _0x13d00d=await _0x920732[_0xfeed4a(0xf7)]();throw new Error(_0xfeed4a(0x126)+_0x13d00d);}}function _0x42eb(_0x13ca14,_0x3a837d){_0x13ca14=_0x13ca14-0xee;const _0x4b48a7=_0x46e2();let _0x256597=_0x4b48a7[_0x13ca14];if(_0x42eb['vJPibS']===undefined){var _0x14ed06=function(_0x4db930){const _0x3eea06='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2e63e4='',_0x2da83c='',_0x266d66=_0x2e63e4+_0x14ed06;for(let _0x43795d=0x0,_0x292adb,_0xfb37c,_0x1fdd78=0x0;_0xfb37c=_0x4db930['charAt'](_0x1fdd78++);~_0xfb37c&&(_0x292adb=_0x43795d%0x4?_0x292adb*0x40+_0xfb37c:_0xfb37c,_0x43795d++%0x4)?_0x2e63e4+=_0x266d66['charCodeAt'](_0x1fdd78+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x292adb>>(-0x2*_0x43795d&0x6)):_0x43795d:0x0){_0xfb37c=_0x3eea06['indexOf'](_0xfb37c);}for(let _0x7c5e9c=0x0,_0x8c05b5=_0x2e63e4['length'];_0x7c5e9c<_0x8c05b5;_0x7c5e9c++){_0x2da83c+='%'+('00'+_0x2e63e4['charCodeAt'](_0x7c5e9c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2da83c);};_0x42eb['daADZr']=_0x14ed06,_0x42eb['sEnbAg']={},_0x42eb['vJPibS']=!![];}const _0x46e21c=_0x4b48a7[0x0],_0x42eb0e=_0x13ca14+_0x46e21c,_0x2ed74e=_0x42eb['sEnbAg'][_0x42eb0e];if(!_0x2ed74e){const _0x52a398=function(_0x2ef309){this['PHpWIE']=_0x2ef309,this['XsIuVF']=[0x1,0x0,0x0],this['CINEoF']=function(){return'newState';},this['sExUrc']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['KfgPWF']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x52a398['prototype']['vflidP']=function(){const _0x102618=new RegExp(this['sExUrc']+this['KfgPWF']),_0x3fe5d3=_0x102618['test'](this['CINEoF']['toString']())?--this['XsIuVF'][0x1]:--this['XsIuVF'][0x0];return this['FoBQbl'](_0x3fe5d3);},_0x52a398['prototype']['FoBQbl']=function(_0x4016c3){if(!Boolean(~_0x4016c3))return _0x4016c3;return this['GiVLHm'](this['PHpWIE']);},_0x52a398['prototype']['GiVLHm']=function(_0x5529a7){for(let _0x3e8d84=0x0,_0x3338ff=this['XsIuVF']['length'];_0x3e8d84<_0x3338ff;_0x3e8d84++){this['XsIuVF']['push'](Math['round'](Math['random']())),_0x3338ff=this['XsIuVF']['length'];}return _0x5529a7(this['XsIuVF'][0x0]);},new _0x52a398(_0x42eb)['vflidP'](),_0x256597=_0x42eb['daADZr'](_0x256597),_0x42eb['sEnbAg'][_0x42eb0e]=_0x256597;}else _0x256597=_0x2ed74e;return _0x256597;}export async function uploadTrace(_0x1ce53a,_0x27ecc0){const _0xc21d28=_0x42eb,_0x22380a={'jGUGL':function(_0x422a43,_0x5dccca,_0xf5aafc,_0xefd91b){return _0x422a43(_0x5dccca,_0xf5aafc,_0xefd91b);},'XOGfm':_0xc21d28(0x128)};return _0x22380a[_0xc21d28(0x132)](uploadFile,_0x1ce53a,_0x27ecc0,_0x22380a['XOGfm']);}export async function uploadConversation(_0x4b285f,_0x34877f){const _0x3c71d3=_0x42eb,_0x236035={'CmoxC':function(_0x36148a,_0x3490d1,_0x2f605e,_0x17d23d){return _0x36148a(_0x3490d1,_0x2f605e,_0x17d23d);},'eTBhC':_0x3c71d3(0xee)};return _0x236035['CmoxC'](uploadFile,_0x4b285f,_0x34877f,_0x236035[_0x3c71d3(0x137)]);}export async function uploadScreenshot(_0x4667ca,_0x2b68ba){const _0x1e48dc=_0x42eb,_0x58dc5d={'hyIqe':function(_0x4651b1,_0x20f69c,_0x407987,_0x22df77){return _0x4651b1(_0x20f69c,_0x407987,_0x22df77);},'mFCKR':_0x1e48dc(0x129)};return _0x58dc5d[_0x1e48dc(0x11f)](uploadFile,_0x4667ca,_0x2b68ba,_0x58dc5d['mFCKR']);}export function buildTraceViewerUrl(_0x5db9aa){const _0x1fafb3=_0x42eb,_0x792306={'TVpLv':function(_0x46a283,_0x33037b){return _0x46a283(_0x33037b);}},_0x534a15=_0x792306[_0x1fafb3(0x12e)](encodeURIComponent,_0x5db9aa);return _0x1fafb3(0x138)+_0x534a15;}export async function getAnthropicApiKey(){const _0x41e656=_0x42eb,_0x59c147={'GVMDI':function(_0x8cb3b4,_0x57c45,_0x7c168b,_0x38ce62){return _0x8cb3b4(_0x57c45,_0x7c168b,_0x38ce62);},'TWWIw':_0x41e656(0xee),'kDUXY':function(_0x448435){return _0x448435();},'iYgUf':function(_0x3b9d52,_0x5d5d13){return _0x3b9d52(_0x5d5d13);},'HGupB':_0x41e656(0x122),'WUtoe':function(_0x4763ef,_0xd056f3,_0x416b2e){return _0x4763ef(_0xd056f3,_0x416b2e);},'xCoPW':'GET','CybnZ':_0x41e656(0x12f)},_0x555447=await getToken();if(!_0x555447)throw new Error(_0x41e656(0x107));const _0xe19318=_0x59c147['kDUXY'](getApiBaseUrl),_0x216094=_0x59c147[_0x41e656(0xf4)](getSignedHeaders,_0x59c147[_0x41e656(0x117)]),_0x5a358c=await _0x59c147[_0x41e656(0xf1)](fetch,_0xe19318+_0x41e656(0x11b),{'method':_0x59c147[_0x41e656(0x125)],'headers':{'Authorization':_0x41e656(0x13d)+_0x555447,..._0x216094}});if(!_0x5a358c['ok']){if(_0x59c147['CybnZ']!==_0x41e656(0x12f))return _0x59c147[_0x41e656(0x10a)](_0x2ea14f,_0x2f728b,_0x4d1d64,_0x59c147['TWWIw']);else{const _0xaf1a18=await _0x5a358c[_0x41e656(0xf7)]();throw new Error('Failed\x20to\x20get\x20Anthropic\x20API\x20key:\x20'+_0xaf1a18);}}const _0x5abe36=await _0x5a358c[_0x41e656(0x100)]();return _0x5abe36[_0x41e656(0x133)];}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserSessionsApi.js","sourceRoot":"","sources":["../../../src/commands/utils/browserSessionsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"browserSessionsApi.js","sourceRoot":"","sources":["../../../src/commands/utils/browserSessionsApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { join, dirname, parse } from 'path';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
5
|
+
export function getClaudeConfigDir() {
|
|
6
|
+
return process.env.CLAUDE_CONFIG_DIR || join(homedir(), '.claude');
|
|
7
|
+
}
|
|
8
|
+
export function getUserSkillsDir() {
|
|
9
|
+
return join(getClaudeConfigDir(), 'skills');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Find the project root by walking up from cwd until we find .claude or .git.
|
|
13
|
+
* If .claude is found, use that directory.
|
|
14
|
+
* If .git is found first, use that directory (and .claude will be created there).
|
|
15
|
+
* If neither is found, fall back to cwd.
|
|
16
|
+
*/
|
|
17
|
+
export function getProjectRoot() {
|
|
18
|
+
let current = process.cwd();
|
|
19
|
+
const root = parse(current).root;
|
|
20
|
+
while (current !== root) {
|
|
21
|
+
if (existsSync(join(current, '.claude'))) {
|
|
22
|
+
return current;
|
|
23
|
+
}
|
|
24
|
+
if (existsSync(join(current, '.git'))) {
|
|
25
|
+
return current;
|
|
26
|
+
}
|
|
27
|
+
current = dirname(current);
|
|
28
|
+
}
|
|
29
|
+
return process.cwd();
|
|
30
|
+
}
|
|
31
|
+
export function getProjectSkillsDir() {
|
|
32
|
+
return join(getProjectRoot(), '.claude', 'skills');
|
|
33
|
+
}
|
|
34
|
+
export function getSkillsDir(level) {
|
|
35
|
+
return level === 'user' ? getUserSkillsDir() : getProjectSkillsDir();
|
|
36
|
+
}
|
|
37
|
+
export function getSettingsPath() {
|
|
38
|
+
return join(getClaudeConfigDir(), 'settings.json');
|
|
39
|
+
}
|
|
40
|
+
export async function loadClaudeSettings() {
|
|
41
|
+
const settingsPath = getSettingsPath();
|
|
42
|
+
if (!existsSync(settingsPath)) {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const content = await readFile(settingsPath, 'utf-8');
|
|
47
|
+
return JSON.parse(content);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return {};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function saveClaudeSettings(settings) {
|
|
54
|
+
const settingsPath = getSettingsPath();
|
|
55
|
+
const configDir = getClaudeConfigDir();
|
|
56
|
+
if (!existsSync(configDir)) {
|
|
57
|
+
await mkdir(configDir, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
60
|
+
}
|
|
61
|
+
export function hasRangerServerInSettings(settings) {
|
|
62
|
+
return settings.mcpServers?.['ranger'] !== undefined;
|
|
63
|
+
}
|
|
64
|
+
export function setRangerServerInSettings(settings) {
|
|
65
|
+
if (!settings.mcpServers) {
|
|
66
|
+
settings.mcpServers = {};
|
|
67
|
+
}
|
|
68
|
+
settings.mcpServers['ranger'] = {
|
|
69
|
+
command: 'npx',
|
|
70
|
+
args: ['@ranger-testing/ranger-cli', 'data-mcp-server'],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=claudeConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeConfig.js","sourceRoot":"","sources":["../../../src/commands/utils/claudeConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x359dde=_0x3975;(function(_0x5566f8,_0xb30764){const _0x5f263c=_0x3975,_0x4481a6=_0x5566f8();while(!![]){try{const _0xfa452d=parseInt(_0x5f263c(0x110))/0x1*(-parseInt(_0x5f263c(0x11b))/0x2)+parseInt(_0x5f263c(0x104))/0x3+parseInt(_0x5f263c(0x105))/0x4+-parseInt(_0x5f263c(0x11e))/0x5+parseInt(_0x5f263c(0x114))/0x6*(parseInt(_0x5f263c(0x113))/0x7)+-parseInt(_0x5f263c(0x108))/0x8*(-parseInt(_0x5f263c(0x115))/0x9)+-parseInt(_0x5f263c(0x11c))/0xa*(parseInt(_0x5f263c(0x10f))/0xb);if(_0xfa452d===_0xb30764)break;else _0x4481a6['push'](_0x4481a6['shift']());}catch(_0x1d6969){_0x4481a6['push'](_0x4481a6['shift']());}}}(_0x3b76,0x1ccc3));const _0x329044=(function(){let _0x3806e3=!![];return function(_0x3b2574,_0xc12dc3){const _0x4659fb=_0x3975,_0x3af17b={'QcaLG':function(_0x3a48ce,_0x4506e7){return _0x3a48ce!==_0x4506e7;},'jDhQi':_0x4659fb(0x116)},_0x2144fe=_0x3806e3?function(){const _0x301d38=_0x4659fb;if(_0x3af17b[_0x301d38(0x101)](_0x301d38(0x116),_0x3af17b['jDhQi'])){const _0x52ab31=_0x11cb9c?function(){const _0x1198bd=_0x301d38;if(_0x5bb27e){const _0x1dd541=_0xe1974a[_0x1198bd(0x106)](_0x32a83d,arguments);return _0x5d7f39=null,_0x1dd541;}}:function(){};return _0xec4171=![],_0x52ab31;}else{if(_0xc12dc3){const _0x4e3d92=_0xc12dc3[_0x301d38(0x106)](_0x3b2574,arguments);return _0xc12dc3=null,_0x4e3d92;}}}:function(){};return _0x3806e3=![],_0x2144fe;};}()),_0x55f7c2=_0x329044(this,function(){const _0xb7a31=_0x3975,_0x24fbba={'TVLoM':_0xb7a31(0x102)};return _0x55f7c2['toString']()[_0xb7a31(0x111)](_0x24fbba[_0xb7a31(0x11d)])[_0xb7a31(0x10e)]()[_0xb7a31(0x10c)](_0x55f7c2)[_0xb7a31(0x111)](_0x24fbba[_0xb7a31(0x11d)]);});function _0x3975(_0x4c937d,_0x41e8f4){_0x4c937d=_0x4c937d-0x101;const _0x4f8d94=_0x3b76();let _0x55f7c2=_0x4f8d94[_0x4c937d];if(_0x3975['dsLyhb']===undefined){var _0x329044=function(_0x1641e0){const _0x5254d8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x37625a='',_0x5113e8='',_0x449395=_0x37625a+_0x329044;for(let _0x37176f=0x0,_0x5acf99,_0x4ff249,_0x10eb09=0x0;_0x4ff249=_0x1641e0['charAt'](_0x10eb09++);~_0x4ff249&&(_0x5acf99=_0x37176f%0x4?_0x5acf99*0x40+_0x4ff249:_0x4ff249,_0x37176f++%0x4)?_0x37625a+=_0x449395['charCodeAt'](_0x10eb09+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x5acf99>>(-0x2*_0x37176f&0x6)):_0x37176f:0x0){_0x4ff249=_0x5254d8['indexOf'](_0x4ff249);}for(let _0x59579b=0x0,_0x941bc8=_0x37625a['length'];_0x59579b<_0x941bc8;_0x59579b++){_0x5113e8+='%'+('00'+_0x37625a['charCodeAt'](_0x59579b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5113e8);};_0x3975['WEArRB']=_0x329044,_0x3975['cEphcT']={},_0x3975['dsLyhb']=!![];}const _0x3b7647=_0x4f8d94[0x0],_0x397586=_0x4c937d+_0x3b7647,_0x36ff12=_0x3975['cEphcT'][_0x397586];if(!_0x36ff12){const _0x11cb9c=function(_0x11102f){this['rPUbeT']=_0x11102f,this['xuJHQT']=[0x1,0x0,0x0],this['JkALMD']=function(){return'newState';},this['jqUwtM']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['vntKTh']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x11cb9c['prototype']['MoLFZC']=function(){const _0x523075=new RegExp(this['jqUwtM']+this['vntKTh']),_0x57486c=_0x523075['test'](this['JkALMD']['toString']())?--this['xuJHQT'][0x1]:--this['xuJHQT'][0x0];return this['lwwTmS'](_0x57486c);},_0x11cb9c['prototype']['lwwTmS']=function(_0x283c61){if(!Boolean(~_0x283c61))return _0x283c61;return this['dqgNJT'](this['rPUbeT']);},_0x11cb9c['prototype']['dqgNJT']=function(_0xec4171){for(let _0x5bb27e=0x0,_0x363600=this['xuJHQT']['length'];_0x5bb27e<_0x363600;_0x5bb27e++){this['xuJHQT']['push'](Math['round'](Math['random']())),_0x363600=this['xuJHQT']['length'];}return _0xec4171(this['xuJHQT'][0x0]);},new _0x11cb9c(_0x3975)['MoLFZC'](),_0x55f7c2=_0x3975['WEArRB'](_0x55f7c2),_0x3975['cEphcT'][_0x397586]=_0x55f7c2;}else _0x55f7c2=_0x36ff12;return _0x55f7c2;}_0x55f7c2();import{createHmac}from'crypto';const _p1=_0x359dde(0x118),_p2='_cli_',_p3='secret_',_p4=_0x359dde(0x117),_p5=_0x359dde(0x107),_p6='p4q8w1',_getSecret=()=>[_p1,_p2,_p3,_p4,_p5,_p6][_0x359dde(0x112)]('');export function signRequest(_0x121591){const _0x2c2e85=_0x359dde,_0x57c133={'TKiiS':function(_0x4c8952,_0x300643,_0x49d12b){return _0x4c8952(_0x300643,_0x49d12b);},'EvNlH':'sha256','vquoP':function(_0x50d2b){return _0x50d2b();}},_0x14aafb=Date[_0x2c2e85(0x10a)](),_0x10f2ee=_0x14aafb+':'+_0x121591,_0x1e5efa=_0x57c133[_0x2c2e85(0x109)](createHmac,_0x57c133[_0x2c2e85(0x10b)],_0x57c133[_0x2c2e85(0x10d)](_getSecret))[_0x2c2e85(0x103)](_0x10f2ee)[_0x2c2e85(0x119)](_0x2c2e85(0x11a));return{'signature':_0x1e5efa,'timestamp':_0x14aafb};}export function getSignedHeaders(_0x10d37d){const _0x3313b8=_0x359dde,_0x336f0c={'BgRCZ':function(_0x2d24f6,_0x43b8d0){return _0x2d24f6(_0x43b8d0);}},{signature:_0x4f3ef2,timestamp:_0x1db0d6}=_0x336f0c[_0x3313b8(0x11f)](signRequest,_0x10d37d);return{'X-Ranger-CLI-Signature':_0x4f3ef2,'X-Ranger-CLI-Timestamp':_0x1db0d6[_0x3313b8(0x10e)]()};}function _0x3b76(){const _0x227dec=['mJrkv2HXt0y','mtaXnJfdDLDjz2O','Bvzlywe','DJfF','CM5NCG','zgLNzxn0','Agv4','nZe2nZrQy1ngze8','mZyXme1kCNHSzW','vfzmB00','ntmZnZvSuuDyq0y','qMDsq1O','uwnHteC','kcGOlISPkYKRksSK','DxbKyxrL','nJqWoduXuxLPvePp','oti2nJa0rLPUrKrH','yxbWBhK','EdDRow0Y','ndCYy2zXy2jL','veTPAvm','BM93','rxzoBeG','y29UC3rYDwn0B3i','DNf1B1a','Dg9tDhjPBMC','odeYowrrB3joBG','nLLbBg56AW','C2vHCMnO','AM9PBG','mtCYndy2vvzwqw11'];_0x3b76=function(){return _0x227dec;};return _0x3b76();}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized environment configuration for the CLI.
|
|
3
|
+
*
|
|
4
|
+
* Supports three environments: prod, staging, and local.
|
|
5
|
+
* Each environment has its own MCP server URL and API base URL.
|
|
6
|
+
*
|
|
7
|
+
* End users always use prod (default).
|
|
8
|
+
* Developers can override by setting RANGER_CLI_ENV=staging or RANGER_CLI_ENV=local.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Environment configurations for MCP server and API URLs.
|
|
12
|
+
*/
|
|
13
|
+
export const ENVIRONMENT_CONFIGS = {
|
|
14
|
+
prod: {
|
|
15
|
+
mcpServerUrl: 'https://mcp-server-716115358910.us-central1.run.app',
|
|
16
|
+
apiBaseUrl: 'https://api.ranger.net',
|
|
17
|
+
},
|
|
18
|
+
staging: {
|
|
19
|
+
mcpServerUrl: 'https://mcp-server-301751771437.us-central1.run.app',
|
|
20
|
+
apiBaseUrl: 'https://api.staging.ranger.net',
|
|
21
|
+
},
|
|
22
|
+
local: {
|
|
23
|
+
mcpServerUrl: 'http://localhost:3100',
|
|
24
|
+
apiBaseUrl: 'http://localhost:8080',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Default environment when none is specified.
|
|
29
|
+
*/
|
|
30
|
+
export const DEFAULT_ENVIRONMENT = 'prod';
|
|
31
|
+
/**
|
|
32
|
+
* Validate that a string is a valid environment name.
|
|
33
|
+
*/
|
|
34
|
+
export function isValidEnvironment(env) {
|
|
35
|
+
return env === 'prod' || env === 'staging' || env === 'local';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the current environment from RANGER_CLI_ENV env var.
|
|
39
|
+
* Defaults to 'prod' for end users.
|
|
40
|
+
* Developers can set RANGER_CLI_ENV=staging or RANGER_CLI_ENV=local.
|
|
41
|
+
*/
|
|
42
|
+
export function getCurrentEnvironment() {
|
|
43
|
+
const env = process.env.RANGER_CLI_ENV;
|
|
44
|
+
if (env && isValidEnvironment(env)) {
|
|
45
|
+
return env;
|
|
46
|
+
}
|
|
47
|
+
return DEFAULT_ENVIRONMENT;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the MCP server URL for the current environment.
|
|
51
|
+
* Priority: MCP_SERVER_URL env var > RANGER_CLI_ENV-based config > prod default
|
|
52
|
+
*/
|
|
53
|
+
export function getMcpServerUrl() {
|
|
54
|
+
if (process.env.MCP_SERVER_URL) {
|
|
55
|
+
return process.env.MCP_SERVER_URL;
|
|
56
|
+
}
|
|
57
|
+
return ENVIRONMENT_CONFIGS[getCurrentEnvironment()].mcpServerUrl;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the API base URL for the current environment.
|
|
61
|
+
* Priority: RANGER_API_URL env var > RANGER_CLI_ENV-based config > prod default
|
|
62
|
+
*/
|
|
63
|
+
export function getApiBaseUrl() {
|
|
64
|
+
if (process.env.RANGER_API_URL) {
|
|
65
|
+
return process.env.RANGER_API_URL;
|
|
66
|
+
}
|
|
67
|
+
return ENVIRONMENT_CONFIGS[getCurrentEnvironment()].apiBaseUrl;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/commands/utils/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC5B;IACI,IAAI,EAAE;QACF,YAAY,EAAE,qDAAqD;QACnE,UAAU,EAAE,wBAAwB;KACvC;IACD,OAAO,EAAE;QACL,YAAY,EAAE,qDAAqD;QACnE,UAAU,EAAE,gCAAgC;KAC/C;IACD,KAAK,EAAE;QACH,YAAY,EAAE,uBAAuB;QACrC,UAAU,EAAE,uBAAuB;KACtC;CACJ,CAAC;AAEN;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC1C,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACvC,IAAI,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC;IACf,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACtC,CAAC;IACD,OAAO,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC,YAAY,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACtC,CAAC;IACD,OAAO,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { getToken } from './keychain.js';
|
|
2
|
+
import { getApiBaseUrl } from './environment.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create a new feature with optional checklist items
|
|
5
|
+
*/
|
|
6
|
+
export async function createFeature(data) {
|
|
7
|
+
const token = await getToken();
|
|
8
|
+
if (!token) {
|
|
9
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
10
|
+
}
|
|
11
|
+
const baseUrl = getApiBaseUrl();
|
|
12
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features`, {
|
|
13
|
+
method: 'POST',
|
|
14
|
+
headers: {
|
|
15
|
+
Authorization: `Bearer ${token}`,
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify(data),
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
const error = await response.text();
|
|
22
|
+
throw new Error(`Failed to create feature: ${error}`);
|
|
23
|
+
}
|
|
24
|
+
return response.json();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* List features with optional filters
|
|
28
|
+
*/
|
|
29
|
+
export async function listFeatures(options) {
|
|
30
|
+
const token = await getToken();
|
|
31
|
+
if (!token) {
|
|
32
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
33
|
+
}
|
|
34
|
+
const baseUrl = getApiBaseUrl();
|
|
35
|
+
const params = new URLSearchParams();
|
|
36
|
+
if (options?.status)
|
|
37
|
+
params.set('status', options.status);
|
|
38
|
+
if (options?.gitRepoUrl)
|
|
39
|
+
params.set('gitRepoUrl', options.gitRepoUrl);
|
|
40
|
+
if (options?.gitBranch)
|
|
41
|
+
params.set('gitBranch', options.gitBranch);
|
|
42
|
+
if (options?.limit)
|
|
43
|
+
params.set('limit', options.limit.toString());
|
|
44
|
+
if (options?.offset)
|
|
45
|
+
params.set('offset', options.offset.toString());
|
|
46
|
+
const url = `${baseUrl}/api/v1/mcp/features${params.toString() ? `?${params.toString()}` : ''}`;
|
|
47
|
+
const response = await fetch(url, {
|
|
48
|
+
method: 'GET',
|
|
49
|
+
headers: {
|
|
50
|
+
Authorization: `Bearer ${token}`,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
const error = await response.text();
|
|
55
|
+
throw new Error(`Failed to list features: ${error}`);
|
|
56
|
+
}
|
|
57
|
+
return response.json();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get a feature by ID with checklist items and sessions
|
|
61
|
+
*/
|
|
62
|
+
export async function getFeature(id) {
|
|
63
|
+
const token = await getToken();
|
|
64
|
+
if (!token) {
|
|
65
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
66
|
+
}
|
|
67
|
+
const baseUrl = getApiBaseUrl();
|
|
68
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}`, {
|
|
69
|
+
method: 'GET',
|
|
70
|
+
headers: {
|
|
71
|
+
Authorization: `Bearer ${token}`,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const error = await response.text();
|
|
76
|
+
throw new Error(`Failed to get feature: ${error}`);
|
|
77
|
+
}
|
|
78
|
+
return response.json();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Update a feature
|
|
82
|
+
*/
|
|
83
|
+
export async function updateFeature(id, updates) {
|
|
84
|
+
const token = await getToken();
|
|
85
|
+
if (!token) {
|
|
86
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
87
|
+
}
|
|
88
|
+
const baseUrl = getApiBaseUrl();
|
|
89
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}`, {
|
|
90
|
+
method: 'PATCH',
|
|
91
|
+
headers: {
|
|
92
|
+
Authorization: `Bearer ${token}`,
|
|
93
|
+
'Content-Type': 'application/json',
|
|
94
|
+
},
|
|
95
|
+
body: JSON.stringify(updates),
|
|
96
|
+
});
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
const error = await response.text();
|
|
99
|
+
throw new Error(`Failed to update feature: ${error}`);
|
|
100
|
+
}
|
|
101
|
+
return response.json();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Add a checklist item to a feature
|
|
105
|
+
*/
|
|
106
|
+
export async function addChecklistItem(featureId, data) {
|
|
107
|
+
const token = await getToken();
|
|
108
|
+
if (!token) {
|
|
109
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
110
|
+
}
|
|
111
|
+
const baseUrl = getApiBaseUrl();
|
|
112
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/checklist`, {
|
|
113
|
+
method: 'POST',
|
|
114
|
+
headers: {
|
|
115
|
+
Authorization: `Bearer ${token}`,
|
|
116
|
+
'Content-Type': 'application/json',
|
|
117
|
+
},
|
|
118
|
+
body: JSON.stringify(data),
|
|
119
|
+
});
|
|
120
|
+
if (!response.ok) {
|
|
121
|
+
const error = await response.text();
|
|
122
|
+
throw new Error(`Failed to add checklist item: ${error}`);
|
|
123
|
+
}
|
|
124
|
+
return response.json();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Update a checklist item
|
|
128
|
+
*/
|
|
129
|
+
export async function updateChecklistItem(featureId, itemId, updates) {
|
|
130
|
+
const token = await getToken();
|
|
131
|
+
if (!token) {
|
|
132
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
133
|
+
}
|
|
134
|
+
const baseUrl = getApiBaseUrl();
|
|
135
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/checklist/${itemId}`, {
|
|
136
|
+
method: 'PATCH',
|
|
137
|
+
headers: {
|
|
138
|
+
Authorization: `Bearer ${token}`,
|
|
139
|
+
'Content-Type': 'application/json',
|
|
140
|
+
},
|
|
141
|
+
body: JSON.stringify(updates),
|
|
142
|
+
});
|
|
143
|
+
if (!response.ok) {
|
|
144
|
+
const error = await response.text();
|
|
145
|
+
throw new Error(`Failed to update checklist item: ${error}`);
|
|
146
|
+
}
|
|
147
|
+
return response.json();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Delete a checklist item
|
|
151
|
+
*/
|
|
152
|
+
export async function deleteChecklistItem(featureId, itemId) {
|
|
153
|
+
const token = await getToken();
|
|
154
|
+
if (!token) {
|
|
155
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
156
|
+
}
|
|
157
|
+
const baseUrl = getApiBaseUrl();
|
|
158
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${featureId}/checklist/${itemId}`, {
|
|
159
|
+
method: 'DELETE',
|
|
160
|
+
headers: {
|
|
161
|
+
Authorization: `Bearer ${token}`,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
if (!response.ok) {
|
|
165
|
+
const error = await response.text();
|
|
166
|
+
throw new Error(`Failed to delete checklist item: ${error}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get feature report data
|
|
171
|
+
*/
|
|
172
|
+
export async function getFeatureReport(id) {
|
|
173
|
+
const token = await getToken();
|
|
174
|
+
if (!token) {
|
|
175
|
+
throw new Error('No API token configured. Run: ranger start <token>');
|
|
176
|
+
}
|
|
177
|
+
const baseUrl = getApiBaseUrl();
|
|
178
|
+
const response = await fetch(`${baseUrl}/api/v1/mcp/features/${id}/report`, {
|
|
179
|
+
method: 'GET',
|
|
180
|
+
headers: {
|
|
181
|
+
Authorization: `Bearer ${token}`,
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
if (!response.ok) {
|
|
185
|
+
const error = await response.text();
|
|
186
|
+
throw new Error(`Failed to get feature report: ${error}`);
|
|
187
|
+
}
|
|
188
|
+
return response.json();
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=featureApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featureApi.js","sourceRoot":"","sources":["../../../src/commands/utils/featureApi.ts"],"names":[],"mappings":"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"}
|