@ranger-testing/ranger-cli 1.0.5 → 1.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 (48) hide show
  1. package/README.md +281 -0
  2. package/build/cli.js +168 -1
  3. package/build/cli.js.map +1 -0
  4. package/build/commands/addEnv.js +1 -110
  5. package/build/commands/addEnv.js.map +1 -0
  6. package/build/commands/authEncrypt.js +40 -0
  7. package/build/commands/authEncrypt.js.map +1 -0
  8. package/build/commands/clean.js +1 -0
  9. package/build/commands/clean.js.map +1 -0
  10. package/build/commands/config.js +100 -0
  11. package/build/commands/config.js.map +1 -0
  12. package/build/commands/dataMcpServer.js +1 -0
  13. package/build/commands/dataMcpServer.js.map +1 -0
  14. package/build/commands/index.js +6 -0
  15. package/build/commands/index.js.map +1 -0
  16. package/build/commands/skillup.js +112 -0
  17. package/build/commands/skillup.js.map +1 -0
  18. package/build/commands/start.js +1 -72
  19. package/build/commands/start.js.map +1 -0
  20. package/build/commands/status.js +221 -0
  21. package/build/commands/status.js.map +1 -0
  22. package/build/commands/update.js +127 -0
  23. package/build/commands/update.js.map +1 -0
  24. package/build/commands/updateEnv.js +1 -64
  25. package/build/commands/updateEnv.js.map +1 -0
  26. package/build/commands/useEnv.js +1 -28
  27. package/build/commands/useEnv.js.map +1 -0
  28. package/build/commands/utils/browserSessionsApi.js +1 -0
  29. package/build/commands/utils/browserSessionsApi.js.map +1 -0
  30. package/build/commands/utils/crypto.js +42 -0
  31. package/build/commands/utils/crypto.js.map +1 -0
  32. package/build/commands/utils/keychain.js +1 -0
  33. package/build/commands/utils/keychain.js.map +1 -0
  34. package/build/commands/utils/localAgentInstallationsApi.js +1 -0
  35. package/build/commands/utils/localAgentInstallationsApi.js.map +1 -0
  36. package/build/commands/utils/mcpConfig.js +1 -47
  37. package/build/commands/utils/mcpConfig.js.map +1 -0
  38. package/build/commands/utils/reportGenerator.js +130 -0
  39. package/build/commands/utils/reportGenerator.js.map +1 -0
  40. package/build/commands/utils/settings.js +246 -0
  41. package/build/commands/utils/settings.js.map +1 -0
  42. package/build/commands/utils/skills.js +1 -0
  43. package/build/commands/utils/skills.js.map +1 -0
  44. package/build/commands/verifyInBrowser.js +1 -0
  45. package/build/commands/verifyInBrowser.js.map +1 -0
  46. package/build/skills/bug-bash.md +313 -0
  47. package/build/skills/e2e-test-recommender.md +173 -0
  48. package/package.json +7 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { loadSettings, saveSettings, getNestedValue, setNestedValue, deleteNestedValue, formatSettings, getSettingsPath, } from './utils/settings.js';
4
+ // Keys that should be stored as booleans
5
+ const BOOLEAN_KEYS = ['headless'];
6
+ /**
7
+ * Parse a value string to its appropriate type
8
+ */
9
+ function parseValue(key, value) {
10
+ // Check if this key should be a boolean
11
+ if (BOOLEAN_KEYS.includes(key)) {
12
+ if (value === 'true')
13
+ return true;
14
+ if (value === 'false')
15
+ return false;
16
+ console.error(`Invalid value for ${key}: expected "true" or "false"`);
17
+ process.exit(1);
18
+ }
19
+ return value;
20
+ }
21
+ /**
22
+ * Set a config value for an environment
23
+ */
24
+ export async function configSet(env, key, value) {
25
+ const envDir = join(process.cwd(), '.ranger', env);
26
+ if (!existsSync(envDir)) {
27
+ console.error(`Environment "${env}" does not exist.`);
28
+ console.error(`Run: ranger add env ${env}`);
29
+ process.exit(1);
30
+ }
31
+ const settings = await loadSettings(env);
32
+ const parsedValue = parseValue(key, value);
33
+ setNestedValue(settings, key, parsedValue);
34
+ await saveSettings(env, settings);
35
+ console.log(`Set ${key} = ${parsedValue}`);
36
+ }
37
+ /**
38
+ * Get a config value for an environment
39
+ */
40
+ export async function configGet(env, key) {
41
+ const envDir = join(process.cwd(), '.ranger', env);
42
+ if (!existsSync(envDir)) {
43
+ console.error(`Environment "${env}" does not exist.`);
44
+ process.exit(1);
45
+ }
46
+ const settings = await loadSettings(env);
47
+ const value = getNestedValue(settings, key);
48
+ if (value === undefined) {
49
+ console.log(`(not set)`);
50
+ }
51
+ else if (typeof value === 'object') {
52
+ console.log(JSON.stringify(value, null, 2));
53
+ }
54
+ else {
55
+ console.log(value);
56
+ }
57
+ }
58
+ /**
59
+ * List all config for an environment
60
+ */
61
+ export async function configList(env) {
62
+ const settingsPath = getSettingsPath(env);
63
+ if (!existsSync(settingsPath)) {
64
+ const envDir = join(process.cwd(), '.ranger', env);
65
+ if (!existsSync(envDir)) {
66
+ console.error(`Environment "${env}" does not exist.`);
67
+ process.exit(1);
68
+ }
69
+ console.log(`No configuration set for "${env}"`);
70
+ return;
71
+ }
72
+ const settings = await loadSettings(env);
73
+ const formatted = formatSettings(settings);
74
+ if (!formatted) {
75
+ console.log(`No configuration set for "${env}"`);
76
+ }
77
+ else {
78
+ console.log(formatted);
79
+ }
80
+ }
81
+ /**
82
+ * Remove a config value for an environment
83
+ */
84
+ export async function configUnset(env, key) {
85
+ const envDir = join(process.cwd(), '.ranger', env);
86
+ if (!existsSync(envDir)) {
87
+ console.error(`Environment "${env}" does not exist.`);
88
+ process.exit(1);
89
+ }
90
+ const settings = await loadSettings(env);
91
+ const deleted = deleteNestedValue(settings, key);
92
+ if (deleted) {
93
+ await saveSettings(env, settings);
94
+ console.log(`Removed ${key}`);
95
+ }
96
+ else {
97
+ console.log(`Key "${key}" not found`);
98
+ }
99
+ }
100
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ (function(_0x14d77e,_0x3344fe){const _0x583981=_0x1e49,_0x370481=_0x14d77e();while(!![]){try{const _0x40bb7f=-parseInt(_0x583981(0x1fc))/0x1*(parseInt(_0x583981(0x1f7))/0x2)+-parseInt(_0x583981(0x210))/0x3+-parseInt(_0x583981(0x1f6))/0x4+-parseInt(_0x583981(0x201))/0x5+-parseInt(_0x583981(0x205))/0x6*(parseInt(_0x583981(0x20d))/0x7)+parseInt(_0x583981(0x223))/0x8*(parseInt(_0x583981(0x1f3))/0x9)+parseInt(_0x583981(0x21b))/0xa;if(_0x40bb7f===_0x3344fe)break;else _0x370481['push'](_0x370481['shift']());}catch(_0x483096){_0x370481['push'](_0x370481['shift']());}}}(_0x1e3b,0x20cf4));function _0x1e3b(){const _0x75ee52=['ChL4zw8','tM8GC2vYDMvYifvstcbMB3vUzcbPBIblzxLJAgfPBI4GuNvUoIbYyw5NzxiGC3rHCNqGphrVA2vUpG','mvjgzLb2wa','z2v0uMvHzgvY','yM9KEq','Dg9tDhjPBMC','sMvWreS','mJm5ntqWqvfdB0nO','zgvJB2rL','C3rHDhvZ','C3bSAxq','mtu0odzsCxzSCfm','DNHSqxe','C3rYAw5NAwz5','CMHXquq','D2nUww4','CMvHza','AgvHzgvYCW','Cg9W','nteXsKvyuM9z','Dgv4Dc9LDMvUDc1ZDhjLyw0','ANnVBG','mZC0nJKXDgHiwvvf','Bg9N','C1PPC3m','C3rHCNrZv2L0Aa','ALDwEwe','yxbWBgLJyxrPB24VANnVBIWGDgv4Dc9LDMvUDc1ZDhjLyw0','C2vHCMnO','y2XVC2u','uxzUEKy','mI4W','CNzgBKq','ntKWotaWmhvqu2T0yG','y25Pthm','uNHREgC','vw5RBM93BIbLCNjVCG','y29UC3rYDwn0B3i','C3rHDhvZvgv4Da','ue9tva','CgfYC2u','nJG3mKjZqwDhAG','y29UDgvUDc10ExbL','Aw5JBhvKzxm','u0DSBLG','t3D4thy','BwvZC2fNzq','z2v0','DKXuBuK','wgH4yK8','B1Lprg0','zxHPDa','yxbWBhK','yLjkt0O','DhjPBq','qMvHCMvYia','mtK4owncA2zxBa','l21JCa','tM8GqvbjihrVA2vUigzVDw5KigLUieTLEwnOywLUlIbsDw46ihjHBMDLCIbZDgfYDca8Dg9Rzw4+','mJu1nZu2zKPpvvHz','ndqYmZG4CNn1tNHP','sfruucbLCNjVCJOG','C3rKAw4'];_0x1e3b=function(){return _0x75ee52;};return _0x1e3b();}const _0x40fc84=(function(){let _0x45b4ab=!![];return function(_0x287325,_0x171943){const _0x3e4b30=_0x45b4ab?function(){const _0x49fe79=_0x1e49;if(_0x171943){const _0x1c234c=_0x171943[_0x49fe79(0x1ef)](_0x287325,arguments);return _0x171943=null,_0x1c234c;}}:function(){};return _0x45b4ab=![],_0x3e4b30;};}()),_0x261812=_0x40fc84(this,function(){const _0x37140e=_0x1e49,_0x151020={'jWVya':'(((.+)+)+)+$'};return _0x261812['toString']()['search'](_0x151020[_0x37140e(0x214)])[_0x37140e(0x1ff)]()[_0x37140e(0x21f)](_0x261812)[_0x37140e(0x216)](_0x151020[_0x37140e(0x214)]);});_0x261812();function _0x1e49(_0x49f42a,_0x1aa82d){_0x49f42a=_0x49f42a-0x1e9;const _0x1e42cc=_0x1e3b();let _0x261812=_0x1e42cc[_0x49f42a];if(_0x1e49['eNPVLQ']===undefined){var _0x40fc84=function(_0x4719d6){const _0x30a5a8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x571513='',_0x4679c8='',_0x353a31=_0x571513+_0x40fc84;for(let _0x295637=0x0,_0x3369b8,_0x42c3f0,_0x54f0b9=0x0;_0x42c3f0=_0x4719d6['charAt'](_0x54f0b9++);~_0x42c3f0&&(_0x3369b8=_0x295637%0x4?_0x3369b8*0x40+_0x42c3f0:_0x42c3f0,_0x295637++%0x4)?_0x571513+=_0x353a31['charCodeAt'](_0x54f0b9+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x3369b8>>(-0x2*_0x295637&0x6)):_0x295637:0x0){_0x42c3f0=_0x30a5a8['indexOf'](_0x42c3f0);}for(let _0x16f722=0x0,_0x1d6203=_0x571513['length'];_0x16f722<_0x1d6203;_0x16f722++){_0x4679c8+='%'+('00'+_0x571513['charCodeAt'](_0x16f722)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4679c8);};_0x1e49['vWeOzr']=_0x40fc84,_0x1e49['TRMGFd']={},_0x1e49['eNPVLQ']=!![];}const _0x1e3b88=_0x1e42cc[0x0],_0x1e4906=_0x49f42a+_0x1e3b88,_0x27a385=_0x1e49['TRMGFd'][_0x1e4906];if(!_0x27a385){const _0x1c0fed=function(_0x2312b2){this['pfbxjc']=_0x2312b2,this['IATRqA']=[0x1,0x0,0x0],this['QpxLKP']=function(){return'newState';},this['XwprGY']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['LmjmFd']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x1c0fed['prototype']['akGFqr']=function(){const _0xd04a85=new RegExp(this['XwprGY']+this['LmjmFd']),_0xc89191=_0xd04a85['test'](this['QpxLKP']['toString']())?--this['IATRqA'][0x1]:--this['IATRqA'][0x0];return this['nVAffb'](_0xc89191);},_0x1c0fed['prototype']['nVAffb']=function(_0x1ce9d5){if(!Boolean(~_0x1ce9d5))return _0x1ce9d5;return this['MVLYcU'](this['pfbxjc']);},_0x1c0fed['prototype']['MVLYcU']=function(_0x447961){for(let _0x36e109=0x0,_0x438872=this['IATRqA']['length'];_0x36e109<_0x438872;_0x36e109++){this['IATRqA']['push'](Math['round'](Math['random']())),_0x438872=this['IATRqA']['length'];}return _0x447961(this['IATRqA'][0x0]);},new _0x1c0fed(_0x1e49)['akGFqr'](),_0x261812=_0x1e49['vWeOzr'](_0x261812),_0x1e49['TRMGFd'][_0x1e4906]=_0x261812;}else _0x261812=_0x27a385;return _0x261812;}import*as _0x43ab8b from'readline';import{getToken,getServerUrl}from'./utils/keychain.js';export async function dataMcpServer(){const _0x32af58=_0x1e49,_0x1a048d={'pyxeo':_0x32af58(0x219),'XhxbO':_0x32af58(0x21e),'oYODm':function(_0x4de02d,_0x29c225,_0xd21d6e){return _0x4de02d(_0x29c225,_0xd21d6e);},'rhqAD':_0x32af58(0x215),'SGlnX':'FuThI','Rxkxg':_0x32af58(0x224),'dkTyR':_0x32af58(0x20e),'cniLs':function(_0x2a4b34,_0x4a2090){return _0x2a4b34===_0x4a2090;},'vLTmI':_0x32af58(0x1f0),'CeEEa':'data:\x20','OwxLv':function(_0x4bee69,_0x2f3bc7){return _0x4bee69===_0x2f3bc7;},'fntsD':'QvnzF','sZiss':function(_0x57454a){return _0x57454a();},'cJyeh':function(_0x11717b){return _0x11717b();},'MNMHC':_0x32af58(0x1fb),'rvFnD':'line','wcnYn':_0x32af58(0x217)},_0x140aad=await _0x1a048d[_0x32af58(0x212)](getToken),_0x9ec4d6=await _0x1a048d['cJyeh'](getServerUrl);if(!_0x140aad){const _0xa93915={'jsonrpc':_0x1a048d[_0x32af58(0x1fa)],'id':null,'error':{'code':-0x7f5b,'message':_0x32af58(0x1f5)}};console[_0x32af58(0x211)](JSON[_0x32af58(0x207)](_0xa93915)),process[_0x32af58(0x1ee)](0x1);}if(!_0x9ec4d6){const _0x5d34f4={'jsonrpc':_0x32af58(0x219),'id':null,'error':{'code':-0x7f5b,'message':_0x1a048d['MNMHC']}};console['log'](JSON[_0x32af58(0x207)](_0x5d34f4)),process['exit'](0x1);}const _0xc9c062=_0x9ec4d6+_0x32af58(0x1f4),_0x490f4a=_0x43ab8b['createInterface']({'input':process[_0x32af58(0x1f9)],'output':process['stdout'],'terminal':![]});_0x490f4a['on'](_0x1a048d[_0x32af58(0x21a)],async _0x271df5=>{const _0x2e3da1=_0x32af58,_0x4a792b={'FByge':function(_0x15eb8,_0x1a3080){return _0x15eb8 instanceof _0x1a3080;},'uEUQW':_0x1a048d[_0x2e3da1(0x1ec)]};if(!_0x271df5[_0x2e3da1(0x1f1)]())return;try{const _0x506435=JSON[_0x2e3da1(0x222)](_0x271df5),_0x387ac8=await _0x1a048d[_0x2e3da1(0x1ed)](fetch,_0xc9c062,{'method':_0x2e3da1(0x221),'headers':{'Content-Type':'application/json','Accept':_0x1a048d[_0x2e3da1(0x208)],'Authorization':_0x2e3da1(0x1f2)+_0x140aad},'body':JSON[_0x2e3da1(0x207)](_0x506435)});if(!_0x387ac8['ok']){if(_0x1a048d[_0x2e3da1(0x226)]!==_0x2e3da1(0x206)){const _0x10f74d={'jsonrpc':_0x1a048d[_0x2e3da1(0x1fa)],'id':_0x506435['id']??null,'error':{'code':-0x7f5b,'message':_0x2e3da1(0x1f8)+_0x387ac8[_0x2e3da1(0x203)]+'\x20'+_0x387ac8['statusText']}};console[_0x2e3da1(0x211)](JSON['stringify'](_0x10f74d));return;}else{const _0x15534e={'jsonrpc':'2.0','id':null,'error':{'code':-0x7f5b,'message':_0x4a792b['FByge'](_0x4ca9ae,_0x5097cc)?_0x5f1bc4[_0x2e3da1(0x1e9)]:_0x4a792b['uEUQW']}};_0x3a46dc[_0x2e3da1(0x211)](_0xd66b0c[_0x2e3da1(0x207)](_0x15534e));}}const _0x1b086e=_0x387ac8[_0x2e3da1(0x20b)][_0x2e3da1(0x1ea)](_0x1a048d[_0x2e3da1(0x21d)])||'';if(_0x1b086e[_0x2e3da1(0x225)](_0x1a048d['dkTyR'])){const _0x1e8eeb=_0x387ac8[_0x2e3da1(0x1fe)]?.[_0x2e3da1(0x1fd)]();if(!_0x1e8eeb)return;const _0x25e68c=new TextDecoder();let _0x49d6d0='';while(!![]){if(_0x1a048d[_0x2e3da1(0x21c)]('bRJOJ',_0x1a048d[_0x2e3da1(0x1eb)])){const {done:_0x180ebe,value:_0x5389ac}=await _0x1e8eeb[_0x2e3da1(0x20a)]();if(_0x180ebe)break;_0x49d6d0+=_0x25e68c[_0x2e3da1(0x202)](_0x5389ac,{'stream':!![]});const _0xc0ff16=_0x49d6d0[_0x2e3da1(0x204)]('\x0a\x0a');_0x49d6d0=_0xc0ff16[_0x2e3da1(0x20c)]()||'';for(const _0x4a27b2 of _0xc0ff16){if(_0x1a048d[_0x2e3da1(0x21c)](_0x2e3da1(0x200),'JepDK')){if(!_0x4a27b2['trim']())continue;const _0x2d59e7=_0x4a27b2[_0x2e3da1(0x204)]('\x0a');for(const _0x4a7dc5 of _0x2d59e7){if(_0x4a7dc5[_0x2e3da1(0x213)](_0x1a048d['CeEEa'])){const _0x5939c7=_0x4a7dc5['slice'](0x6);_0x5939c7[_0x2e3da1(0x1f1)]()&&console[_0x2e3da1(0x211)](_0x5939c7);}}}else{const _0x12df0b={'jsonrpc':_0x1a048d['pyxeo'],'id':_0x13134c['id']??null,'error':{'code':-0x7f5b,'message':_0x2e3da1(0x1f8)+_0x6d3636[_0x2e3da1(0x203)]+'\x20'+_0x574201[_0x2e3da1(0x220)]}};_0x27f628[_0x2e3da1(0x211)](_0x1c2a3b['stringify'](_0x12df0b));return;}}}else{const _0x26a2b1=_0x1c0fed?function(){const _0x72d35b=_0x2e3da1;if(_0x36e109){const _0x441540=_0x41d6e2[_0x72d35b(0x1ef)](_0x4c32a2,arguments);return _0xe52297=null,_0x441540;}}:function(){};return _0x447961=![],_0x26a2b1;}}}else{const _0x425590=await _0x387ac8[_0x2e3da1(0x20f)]();console[_0x2e3da1(0x211)](JSON[_0x2e3da1(0x207)](_0x425590));}}catch(_0x479fcd){if(_0x1a048d[_0x2e3da1(0x227)](_0x1a048d['fntsD'],_0x2e3da1(0x218))){const _0x82b643={'jsonrpc':_0x1a048d['pyxeo'],'id':null,'error':{'code':-0x7f5b,'message':_0x479fcd instanceof Error?_0x479fcd[_0x2e3da1(0x1e9)]:_0x2e3da1(0x21e)}};console['log'](JSON['stringify'](_0x82b643));}else _0x510a5c[_0x2e3da1(0x1ee)](0x0);}}),_0x490f4a['on'](_0x1a048d[_0x32af58(0x209)],()=>{const _0x17c609=_0x32af58;process[_0x17c609(0x1ee)](0x0);});}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataMcpServer.js","sourceRoot":"","sources":["../../src/commands/dataMcpServer.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  export { addEnv } from './addEnv.js';
2
+ export { clean } from './clean.js';
3
+ export { dataMcpServer } from './dataMcpServer.js';
2
4
  export { start } from './start.js';
3
5
  export { useEnv } from './useEnv.js';
4
6
  export { updateEnv } from './updateEnv.js';
7
+ export { verifyInBrowser } from './verifyInBrowser.js';
8
+ export { update } from './update.js';
9
+ export { skillup } from './skillup.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { readFile, readdir } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { existsSync } from 'fs';
4
+ import { getToken } from './utils/keychain.js';
5
+ import { installSkill } from './utils/skills.js';
6
+ import { loadMcpConfig, saveMcpConfig, hasRangerServer, setRangerServer, } from './utils/mcpConfig.js';
7
+ /**
8
+ * Get list of available environment names from .ranger directory
9
+ */
10
+ async function getAvailableEnvs(rangerDir) {
11
+ try {
12
+ const entries = await readdir(rangerDir, { withFileTypes: true });
13
+ return entries
14
+ .filter((entry) => entry.isDirectory())
15
+ .map((entry) => entry.name)
16
+ .filter((name) => !name.startsWith('.') && name !== 'sessions');
17
+ }
18
+ catch (error) {
19
+ return [];
20
+ }
21
+ }
22
+ export async function skillup() {
23
+ console.log('\nšŸŽÆ Ranger Skill Setup\n');
24
+ // Check for API token in keychain
25
+ const token = await getToken();
26
+ if (!token) {
27
+ console.log('āŒ No Ranger API token found in keychain.\n');
28
+ console.log('To get started:');
29
+ console.log(' 1. Get your API token from https://dashboard.ranger.net/settings');
30
+ console.log(' 2. Run: ranger start <your-api-token>');
31
+ console.log(' 3. Run: ranger skillup\n');
32
+ return;
33
+ }
34
+ console.log('āœ“ Found API token in keychain');
35
+ // Check for active environment
36
+ const rangerDir = join(process.cwd(), '.ranger');
37
+ const activeEnvPath = join(rangerDir, 'active-env.txt');
38
+ const hasActiveEnv = existsSync(activeEnvPath);
39
+ let activeEnv = null;
40
+ if (hasActiveEnv) {
41
+ try {
42
+ activeEnv = (await readFile(activeEnvPath, 'utf-8')).trim();
43
+ console.log(`āœ“ Found active environment: ${activeEnv}`);
44
+ }
45
+ catch (error) {
46
+ // File exists but couldn't read it
47
+ console.warn(' Could not read active environment');
48
+ }
49
+ }
50
+ let installedCount = 0;
51
+ // Install e2e-test-recommender (requires API token only)
52
+ console.log('\nšŸ“¦ Installing skills...\n');
53
+ try {
54
+ const installed = await installSkill('e2e-test-recommender');
55
+ if (installed) {
56
+ installedCount++;
57
+ // Also install ranger data-mcp-server for e2e-test-recommender
58
+ const mcpConfig = await loadMcpConfig();
59
+ if (!hasRangerServer(mcpConfig)) {
60
+ setRangerServer(mcpConfig);
61
+ await saveMcpConfig(mcpConfig);
62
+ console.log(' āœ“ Added ranger data-mcp-server to .mcp.json');
63
+ }
64
+ }
65
+ }
66
+ catch (error) {
67
+ console.warn(' Failed to install e2e-test-recommender skill:', error instanceof Error ? error.message : error);
68
+ }
69
+ // Install bug-bash (requires API token AND active environment)
70
+ if (activeEnv) {
71
+ try {
72
+ const installed = await installSkill('bug-bash');
73
+ if (installed) {
74
+ installedCount++;
75
+ }
76
+ }
77
+ catch (error) {
78
+ console.warn(' Failed to install bug-bash skill:', error instanceof Error ? error.message : error);
79
+ }
80
+ }
81
+ else {
82
+ console.log('\nāš ļø Bug Bash skill not installed (requires active environment)\n');
83
+ console.log('To install Bug Bash skill:');
84
+ // Provide context-aware guidance based on whether .ranger directory exists
85
+ const hasRangerDir = existsSync(rangerDir);
86
+ if (!hasRangerDir) {
87
+ console.log(' 1. Run: ranger add env <env-name> (e.g., ranger add env local)');
88
+ }
89
+ else {
90
+ // List available environments
91
+ const availableEnvs = await getAvailableEnvs(rangerDir);
92
+ if (availableEnvs.length > 0) {
93
+ console.log(` 1. Run: ranger use <env-name> (available: ${availableEnvs.join(', ')})`);
94
+ console.log(' or: ranger add env <env-name> (to create a new environment)');
95
+ }
96
+ else {
97
+ console.log(' 1. Run: ranger add env <env-name> (e.g., ranger add env local)');
98
+ }
99
+ }
100
+ console.log(' 2. Run: ranger skillup\n');
101
+ }
102
+ if (installedCount > 0) {
103
+ console.log(`\nāœ… Installed ${installedCount} skill${installedCount > 1 ? 's' : ''} successfully!\n`);
104
+ console.log('To use skills in Claude Code:');
105
+ console.log(' - Type / and select a skill from the menu');
106
+ console.log(' - Or ask Claude to help with testing or bug hunting\n');
107
+ }
108
+ else {
109
+ console.log('\nāš ļø No skills were installed.\n');
110
+ }
111
+ }
112
+ //# sourceMappingURL=skillup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillup.js","sourceRoot":"","sources":["../../src/commands/skillup.ts"],"names":[],"mappings":"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"}
@@ -1,72 +1 @@
1
- import { mkdir, readFile, appendFile, writeFile } from 'fs/promises';
2
- import { join } from 'path';
3
- import { existsSync } from 'fs';
4
- import { loadMcpConfig, saveMcpConfig, setRangerServer, } from './utils/mcpConfig.js';
5
- import { installAgent } from './utils/agents.js';
6
- export async function start(token) {
7
- console.log('\nšŸš€ Ranger Setup\n');
8
- // Validate API token
9
- const mcpServerUrl = process.env.MCP_SERVER_URL ||
10
- 'https://mcp-server-301751771437.us-central1.run.app';
11
- console.log('Validating API token...');
12
- try {
13
- const response = await fetch(`${mcpServerUrl}/me`, {
14
- method: 'GET',
15
- headers: {
16
- Authorization: `Bearer ${token}`,
17
- },
18
- });
19
- if (!response.ok) {
20
- console.error(`\nāŒ Authentication failed: ${response.status} ${response.statusText}`);
21
- console.error('Please check your API token and try again.');
22
- process.exit(1);
23
- }
24
- console.log('āœ“ API token validated successfully');
25
- }
26
- catch (error) {
27
- console.error('\nāŒ Failed to connect to MCP server:', error instanceof Error ? error.message : error);
28
- console.error('Please check your network connection and server URL.');
29
- process.exit(1);
30
- }
31
- // Load or create .mcp.json and set ranger server
32
- const mcpConfig = await loadMcpConfig();
33
- setRangerServer(mcpConfig, token, mcpServerUrl);
34
- await saveMcpConfig(mcpConfig);
35
- console.log('āœ“ Created/updated .mcp.json with Ranger MCP server');
36
- // Create .ranger/ directory
37
- const rangerDir = join(process.cwd(), '.ranger');
38
- if (!existsSync(rangerDir)) {
39
- await mkdir(rangerDir, { recursive: true });
40
- console.log('āœ“ Created .ranger/ directory');
41
- }
42
- else {
43
- console.log('āœ“ .ranger/ directory already exists');
44
- }
45
- // Copy e2e-test-recommender agent to .claude/agents
46
- await installAgent('e2e-test-recommender');
47
- // Update .gitignore
48
- const gitignorePath = join(process.cwd(), '.gitignore');
49
- const gitignoreEntries = ['.ranger-mcp', '.ranger/**/local*'];
50
- if (existsSync(gitignorePath)) {
51
- const existingContent = await readFile(gitignorePath, 'utf-8');
52
- const missingEntries = gitignoreEntries.filter((entry) => !existingContent.includes(entry));
53
- if (missingEntries.length > 0) {
54
- const newContent = '\n# Ranger\n' + missingEntries.join('\n') + '\n';
55
- await appendFile(gitignorePath, newContent);
56
- console.log('āœ“ Updated .gitignore with Ranger entries');
57
- }
58
- else {
59
- console.log('āœ“ .gitignore already contains Ranger entries');
60
- }
61
- }
62
- else {
63
- const content = '# Ranger\n' + gitignoreEntries.join('\n') + '\n';
64
- await writeFile(gitignorePath, content);
65
- console.log('āœ“ Created .gitignore with Ranger entries');
66
- }
67
- // Log next steps
68
- console.log('\nāœ… Ranger setup complete!\n');
69
- console.log('Next steps:');
70
- console.log(' Add an environment:');
71
- console.log(' ranger add env local\n');
72
- }
1
+ function _0x547d(_0x581051,_0x467216){_0x581051=_0x581051-0xdd;const _0x3521d8=_0x3521();let _0x547dab=_0x3521d8[_0x581051];return _0x547dab;}(function(_0xdd3bd4,_0x363a4c){const _0x2d6e5e=_0x547d,_0x121f44=_0xdd3bd4();while(!![]){try{const _0x3f96ac=-parseInt(_0x2d6e5e(0xfc))/0x1+-parseInt(_0x2d6e5e(0xf2))/0x2*(-parseInt(_0x2d6e5e(0xdf))/0x3)+-parseInt(_0x2d6e5e(0xdd))/0x4*(parseInt(_0x2d6e5e(0xfb))/0x5)+parseInt(_0x2d6e5e(0x101))/0x6+parseInt(_0x2d6e5e(0xfa))/0x7*(-parseInt(_0x2d6e5e(0xde))/0x8)+-parseInt(_0x2d6e5e(0xf4))/0x9+-parseInt(_0x2d6e5e(0xff))/0xa*(-parseInt(_0x2d6e5e(0xe9))/0xb);if(_0x3f96ac===_0x363a4c)break;else _0x121f44['push'](_0x121f44['shift']());}catch(_0x11ac2d){_0x121f44['push'](_0x121f44['shift']());}}}(_0x3521,0xdc9e8));import{mkdir,writeFile}from'fs/promises';function _0x3521(){const _0xe0f36e=['20229TootdW','cwd','env','KSHdC','yzitc','CIvcu','.gitignore','\x20\x20\x20\x20\x20ranger\x20add\x20env\x20local','āœ“\x20Created\x20.ranger/.gitignore','741182SjLlPo','MCP_SERVER_URL','14692689ZMGTrX','error','haEBN','JBnjW','\x20\x202.\x20Install\x20skills\x20for\x20Claude\x20Code:','/me','1883AGbpqB','4586965SiOEXt','397094QyBrlV','āœ“\x20.ranger/\x20directory\x20already\x20exists','XZtSg','24230sfLSll','log','4126032pAyHDs','zjilL','#\x20Ignore\x20plaintext\x20auth\x20files\x20(encrypted\x20.enc\x20files\x20are\x20safe\x20to\x20commit)\x0a**/auth.json\x0a\x0a#\x20Ignore\x20local\x20environment\x0a/local\x0a\x0a#\x20Ignore\x20session\x20artifacts\x0a/sessions\x0a\x0a#\x20Ignore\x20active\x20environment\x20tracker\x0aactive-env.txt\x0a\x0a#\x20Ignore\x20bug\x20bash\x20reports\x0a/bug-bashes\x0a','4bOGxYq','49472cDphSg','3jReIUY','npteT','https://mcp-server-716115358910.us-central1.run.app','jRDkF','exit','\x0aāŒ\x20Authentication\x20failed:\x20','statusText','\x20\x20\x20\x20\x20ranger\x20skillup\x0a','\x0aāœ…\x20Ranger\x20setup\x20complete!\x0a','\x0aāŒ\x20Failed\x20to\x20connect\x20to\x20MCP\x20server:'];_0x3521=function(){return _0xe0f36e;};return _0x3521();}import{join}from'path';import{existsSync}from'fs';import{loadMcpConfig,saveMcpConfig,setRangerServer}from'./utils/mcpConfig.js';import{storeToken,storeServerUrl}from'./utils/keychain.js';export async function start(_0x1dd791){const _0x3ff61a=_0x547d,_0x134d10={'uKnFp':_0x3ff61a(0xe1),'KSHdC':_0x3ff61a(0xe8),'sYaTj':function(_0x1d8607,_0x324d69){return _0x1d8607 instanceof _0x324d69;},'XZtSg':'Please\x20check\x20your\x20network\x20connection\x20and\x20server\x20URL.','CIvcu':function(_0x189852,_0x74c9f7){return _0x189852(_0x74c9f7);},'haEBN':function(_0x20ecb2){return _0x20ecb2();},'JBnjW':function(_0x525799,_0x574851){return _0x525799(_0x574851);},'zjilL':'āœ“\x20Created/updated\x20.mcp.json\x20with\x20Ranger\x20MCP\x20proxy','vkCTg':'.ranger','jRDkF':function(_0x33bc98,_0x42ad7d,_0x50e2ef){return _0x33bc98(_0x42ad7d,_0x50e2ef);},'hrwHO':'āœ“\x20Created\x20.ranger/\x20directory','yzitc':_0x3ff61a(0xf1),'npteT':'Next\x20steps:'};console[_0x3ff61a(0x100)]('\x0ašŸš€\x20Ranger\x20Setup\x0a');const _0x78b66f=process[_0x3ff61a(0xeb)][_0x3ff61a(0xf3)]||_0x134d10['uKnFp'];console[_0x3ff61a(0x100)]('Validating\x20API\x20token...');try{const _0xe93ee8=await fetch(_0x78b66f+_0x3ff61a(0xf9),{'method':'GET','headers':{'Authorization':'Bearer\x20'+_0x1dd791}});!_0xe93ee8['ok']&&(console['error'](_0x3ff61a(0xe4)+_0xe93ee8['status']+'\x20'+_0xe93ee8[_0x3ff61a(0xe5)]),console[_0x3ff61a(0xf5)]('Please\x20check\x20your\x20API\x20token\x20and\x20try\x20again.'),process['exit'](0x1)),console['log']('āœ“\x20API\x20token\x20validated\x20successfully');}catch(_0x526072){console['error'](_0x134d10[_0x3ff61a(0xec)],_0x134d10['sYaTj'](_0x526072,Error)?_0x526072['message']:_0x526072),console[_0x3ff61a(0xf5)](_0x134d10[_0x3ff61a(0xfe)]),process[_0x3ff61a(0xe3)](0x1);}await _0x134d10[_0x3ff61a(0xee)](storeToken,_0x1dd791),await storeServerUrl(_0x78b66f),console['log']('āœ“\x20Stored\x20credentials\x20in\x20OS\x20Keychain');const _0x184414=await _0x134d10[_0x3ff61a(0xf6)](loadMcpConfig);_0x134d10['JBnjW'](setRangerServer,_0x184414),await saveMcpConfig(_0x184414),console['log'](_0x134d10[_0x3ff61a(0x102)]);const _0x451c45=join(process[_0x3ff61a(0xea)](),_0x134d10['vkCTg']);!_0x134d10[_0x3ff61a(0xf7)](existsSync,_0x451c45)?(await _0x134d10[_0x3ff61a(0xe2)](mkdir,_0x451c45,{'recursive':!![]}),console[_0x3ff61a(0x100)](_0x134d10['hrwHO'])):console['log'](_0x3ff61a(0xfd));console['log']('\x0ašŸ’”\x20Tip:\x20Run\x20\x22ranger\x20skillup\x22\x20after\x20setup\x20to\x20install\x20the\x20e2e-test-recommender\x20skill');const _0x20fb87=_0x134d10[_0x3ff61a(0xe2)](join,_0x451c45,_0x3ff61a(0xef)),_0x150a0d=_0x3ff61a(0x103);await writeFile(_0x20fb87,_0x150a0d),console['log'](_0x134d10[_0x3ff61a(0xed)]),console['log'](_0x3ff61a(0xe7)),console[_0x3ff61a(0x100)](_0x134d10[_0x3ff61a(0xe0)]),console['log']('\x20\x201.\x20Add\x20an\x20environment:'),console['log'](_0x3ff61a(0xf0)),console['log'](_0x3ff61a(0xf8)),console['log'](_0x3ff61a(0xe6));}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,221 @@
1
+ import { readFile, readdir } from 'fs/promises';
2
+ import { join, dirname, basename } from 'path';
3
+ import { existsSync } from 'fs';
4
+ import { fileURLToPath } from 'url';
5
+ import { execSync } from 'child_process';
6
+ import { getToken } from './utils/keychain.js';
7
+ import { loadMcpConfig, hasRangerServer } from './utils/mcpConfig.js';
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ // ANSI formatting helpers
11
+ const bold = (text) => `\x1b[1m${text}\x1b[0m`;
12
+ const link = (path, text) => `\x1b]8;;file://${path}\x07${text || path}\x1b]8;;\x07`;
13
+ /**
14
+ * Get the package version from package.json
15
+ */
16
+ async function getVersion() {
17
+ const possiblePaths = [
18
+ join(__dirname, '..', '..', 'package.json'),
19
+ join(__dirname, '..', '..', '..', 'package.json'),
20
+ ];
21
+ for (const p of possiblePaths) {
22
+ if (existsSync(p)) {
23
+ try {
24
+ const content = await readFile(p, 'utf-8');
25
+ const pkg = JSON.parse(content);
26
+ return pkg.version || 'unknown';
27
+ }
28
+ catch {
29
+ continue;
30
+ }
31
+ }
32
+ }
33
+ return 'unknown';
34
+ }
35
+ /**
36
+ * Get the latest version from npm registry
37
+ */
38
+ function getLatestVersion() {
39
+ try {
40
+ const result = execSync('npm view @ranger-testing/ranger-cli version 2>/dev/null', { encoding: 'utf-8', timeout: 5000 });
41
+ return result.trim();
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Get installed skills from .claude/skills directory
49
+ */
50
+ async function getInstalledSkills() {
51
+ const skillsDir = join(process.cwd(), '.claude', 'skills');
52
+ if (!existsSync(skillsDir)) {
53
+ return [];
54
+ }
55
+ const skills = [];
56
+ try {
57
+ const entries = await readdir(skillsDir, { withFileTypes: true });
58
+ for (const entry of entries) {
59
+ if (entry.isDirectory()) {
60
+ const skillPath = join(skillsDir, entry.name, 'SKILL.md');
61
+ if (existsSync(skillPath)) {
62
+ let displayName = entry.name;
63
+ try {
64
+ const content = await readFile(skillPath, 'utf-8');
65
+ const nameMatch = content.match(/name:\s*(.+)/);
66
+ if (nameMatch) {
67
+ displayName = nameMatch[1].trim();
68
+ }
69
+ }
70
+ catch {
71
+ // Use folder name as fallback
72
+ }
73
+ skills.push({
74
+ name: entry.name,
75
+ displayName,
76
+ path: skillPath,
77
+ });
78
+ }
79
+ }
80
+ }
81
+ }
82
+ catch {
83
+ return [];
84
+ }
85
+ return skills;
86
+ }
87
+ /**
88
+ * Get environment information from .ranger directory
89
+ */
90
+ async function getEnvironments() {
91
+ const rangerDir = join(process.cwd(), '.ranger');
92
+ if (!existsSync(rangerDir)) {
93
+ return { envs: [], activeEnv: null };
94
+ }
95
+ // Get active environment
96
+ let activeEnv = null;
97
+ const activeEnvPath = join(rangerDir, 'active-env.txt');
98
+ if (existsSync(activeEnvPath)) {
99
+ try {
100
+ activeEnv = (await readFile(activeEnvPath, 'utf-8')).trim();
101
+ }
102
+ catch {
103
+ // Ignore
104
+ }
105
+ }
106
+ const envs = [];
107
+ try {
108
+ const entries = await readdir(rangerDir, { withFileTypes: true });
109
+ for (const entry of entries) {
110
+ if (entry.isDirectory() &&
111
+ !entry.name.startsWith('.') &&
112
+ entry.name !== 'sessions') {
113
+ const envDir = join(rangerDir, entry.name);
114
+ const settingsPath = join(envDir, 'settings.json');
115
+ const plaintextAuthPath = join(envDir, 'auth.json');
116
+ const encryptedAuthPath = join(envDir, 'auth.json.enc');
117
+ envs.push({
118
+ name: entry.name,
119
+ settingsPath: existsSync(settingsPath)
120
+ ? settingsPath
121
+ : '(not found)',
122
+ hasPlaintextAuth: existsSync(plaintextAuthPath),
123
+ hasEncryptedAuth: existsSync(encryptedAuthPath),
124
+ isActive: entry.name === activeEnv,
125
+ });
126
+ }
127
+ }
128
+ }
129
+ catch {
130
+ return { envs: [], activeEnv };
131
+ }
132
+ return { envs, activeEnv };
133
+ }
134
+ export async function status() {
135
+ console.log('\nšŸ“Š Ranger Status\n');
136
+ // Root directory
137
+ const cwd = process.cwd();
138
+ const rangerDir = join(cwd, '.ranger');
139
+ // Check if Ranger is initialized
140
+ if (!existsSync(rangerDir)) {
141
+ console.log(`Root: ${link(cwd, bold(basename(cwd)))}`);
142
+ console.log(`\nRanger has not been initialized in this directory.`);
143
+ console.log(` Run: ranger start <token>\n`);
144
+ return;
145
+ }
146
+ console.log(`Root: ${link(cwd, bold(basename(cwd)))}`);
147
+ // Version
148
+ const version = await getVersion();
149
+ const latestVersion = getLatestVersion();
150
+ if (latestVersion && latestVersion !== version) {
151
+ console.log(`Version: ${version} (latest: ${latestVersion})`);
152
+ console.log(` Run: ranger update`);
153
+ }
154
+ else if (latestVersion) {
155
+ console.log(`Version: ${version} (up to date)`);
156
+ }
157
+ else {
158
+ console.log(`Version: ${version}`);
159
+ }
160
+ // API Token
161
+ const token = await getToken();
162
+ if (token) {
163
+ console.log(`API Token: āœ“ Found in keychain`);
164
+ }
165
+ else if (process.env.RANGER_API_TOKEN) {
166
+ console.log(`API Token: āœ“ Found in RANGER_API_TOKEN env var`);
167
+ }
168
+ else {
169
+ console.log(`API Token: āœ— Not found`);
170
+ console.log(` Run: ranger start <token>`);
171
+ }
172
+ // MCP Server
173
+ const mcpConfig = await loadMcpConfig();
174
+ if (hasRangerServer(mcpConfig)) {
175
+ console.log(`MCP Server: āœ“ Configured in .mcp.json`);
176
+ }
177
+ else {
178
+ console.log(`MCP Server: āœ— Not configured`);
179
+ console.log(` Run: ranger start <token> or ranger skillup`);
180
+ }
181
+ // Skills
182
+ console.log('\n--- Skills ---');
183
+ const skills = await getInstalledSkills();
184
+ if (skills.length === 0) {
185
+ console.log('No skills installed');
186
+ console.log(` Run: ranger skillup`);
187
+ }
188
+ else {
189
+ for (const skill of skills) {
190
+ console.log(` ${bold(skill.displayName)}: ${link(skill.path, basename(skill.path))}`);
191
+ }
192
+ }
193
+ // Environments
194
+ console.log('\n--- Environments ---');
195
+ const { envs, activeEnv } = await getEnvironments();
196
+ if (envs.length === 0) {
197
+ console.log('No environments configured');
198
+ console.log(` Run: ranger add env <env-name>`);
199
+ }
200
+ else {
201
+ for (const env of envs) {
202
+ const activeMarker = env.isActive ? ' (active)' : '';
203
+ const authStatus = env.hasEncryptedAuth
204
+ ? 'encrypted'
205
+ : env.hasPlaintextAuth
206
+ ? 'plaintext'
207
+ : 'none';
208
+ console.log(` ${bold(env.name)}${activeMarker}`);
209
+ console.log(` Auth: ${authStatus}`);
210
+ if (env.settingsPath !== '(not found)') {
211
+ console.log(` Settings: ${link(env.settingsPath, basename(env.settingsPath))}`);
212
+ }
213
+ }
214
+ if (!activeEnv) {
215
+ console.log(`\n No active environment set`);
216
+ console.log(` Run: ranger use <env-name> (available: ${envs.map((e) => e.name).join(', ')})`);
217
+ }
218
+ }
219
+ console.log('');
220
+ }
221
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}