@ranger-testing/ranger-cli 1.0.5 ā 1.0.6
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 +281 -0
- package/build/cli.js +168 -1
- package/build/cli.js.map +1 -0
- package/build/commands/addEnv.js +1 -110
- package/build/commands/addEnv.js.map +1 -0
- package/build/commands/authEncrypt.js +40 -0
- package/build/commands/authEncrypt.js.map +1 -0
- package/build/commands/clean.js +1 -0
- package/build/commands/clean.js.map +1 -0
- package/build/commands/config.js +100 -0
- package/build/commands/config.js.map +1 -0
- package/build/commands/dataMcpServer.js +1 -0
- package/build/commands/dataMcpServer.js.map +1 -0
- package/build/commands/index.js +6 -0
- package/build/commands/index.js.map +1 -0
- package/build/commands/skillup.js +112 -0
- package/build/commands/skillup.js.map +1 -0
- package/build/commands/start.js +1 -72
- package/build/commands/start.js.map +1 -0
- package/build/commands/status.js +221 -0
- package/build/commands/status.js.map +1 -0
- package/build/commands/update.js +127 -0
- package/build/commands/update.js.map +1 -0
- package/build/commands/updateEnv.js +1 -64
- package/build/commands/updateEnv.js.map +1 -0
- package/build/commands/useEnv.js +1 -28
- package/build/commands/useEnv.js.map +1 -0
- package/build/commands/utils/browserSessionsApi.js +1 -0
- package/build/commands/utils/browserSessionsApi.js.map +1 -0
- package/build/commands/utils/crypto.js +42 -0
- package/build/commands/utils/crypto.js.map +1 -0
- package/build/commands/utils/keychain.js +1 -0
- package/build/commands/utils/keychain.js.map +1 -0
- package/build/commands/utils/localAgentInstallationsApi.js +1 -0
- package/build/commands/utils/localAgentInstallationsApi.js.map +1 -0
- package/build/commands/utils/mcpConfig.js +1 -47
- package/build/commands/utils/mcpConfig.js.map +1 -0
- package/build/commands/utils/reportGenerator.js +130 -0
- package/build/commands/utils/reportGenerator.js.map +1 -0
- package/build/commands/utils/settings.js +246 -0
- package/build/commands/utils/settings.js.map +1 -0
- package/build/commands/utils/skills.js +1 -0
- package/build/commands/utils/skills.js.map +1 -0
- package/build/commands/verifyInBrowser.js +1 -0
- package/build/commands/verifyInBrowser.js.map +1 -0
- package/build/skills/bug-bash.md +313 -0
- package/build/skills/e2e-test-recommender.md +173 -0
- 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(_0x3ee68f,_0x35104c){const _0x3314d1=_0x5298,_0x36f586=_0x3ee68f();while(!![]){try{const _0x4e093b=-parseInt(_0x3314d1(0x1d6))/0x1*(-parseInt(_0x3314d1(0x1db))/0x2)+-parseInt(_0x3314d1(0x1ed))/0x3*(-parseInt(_0x3314d1(0x1d1))/0x4)+parseInt(_0x3314d1(0x1dd))/0x5*(-parseInt(_0x3314d1(0x1ea))/0x6)+-parseInt(_0x3314d1(0x1cd))/0x7*(parseInt(_0x3314d1(0x1f8))/0x8)+-parseInt(_0x3314d1(0x1fd))/0x9+-parseInt(_0x3314d1(0x1cb))/0xa*(parseInt(_0x3314d1(0x1df))/0xb)+-parseInt(_0x3314d1(0x1e3))/0xc*(-parseInt(_0x3314d1(0x1cc))/0xd);if(_0x4e093b===_0x35104c)break;else _0x36f586['push'](_0x36f586['shift']());}catch(_0x5e6f57){_0x36f586['push'](_0x36f586['shift']());}}}(_0x3f2c,0xc4dcb));const _0x40f629=(function(){const _0x3df737=_0x5298,_0x5a499e={'FSOdF':function(_0x1beb52,_0x4e09b6){return _0x1beb52===_0x4e09b6;},'DzjLh':_0x3df737(0x201)};let _0x53bcac=!![];return function(_0x1d2490,_0x46927a){const _0x2253c1=_0x3df737,_0x2d0f32={'DhGdU':function(_0x4ffc07,_0x2f3f4e){const _0xe4a0db=_0x5298;return _0x5a499e[_0xe4a0db(0x205)](_0x4ffc07,_0x2f3f4e);},'eNOnK':_0x5a499e[_0x2253c1(0x1d0)]},_0x1ee6f8=_0x53bcac?function(){const _0x17afc5=_0x2253c1;if(_0x2d0f32[_0x17afc5(0x1ee)](_0x2d0f32[_0x17afc5(0x1fb)],_0x2d0f32[_0x17afc5(0x1fb)])){if(_0x46927a){const _0x32d4e0=_0x46927a[_0x17afc5(0x1ec)](_0x1d2490,arguments);return _0x46927a=null,_0x32d4e0;}}else{const _0x27546e=_0x56b595?function(){const _0x3c2c1b=_0x17afc5;if(_0xef83aa){const _0x18ac3f=_0x46996e[_0x3c2c1b(0x1ec)](_0x276428,arguments);return _0x5c06d2=null,_0x18ac3f;}}:function(){};return _0x431d98=![],_0x27546e;}}:function(){};return _0x53bcac=![],_0x1ee6f8;};}()),_0x53882c=_0x40f629(this,function(){const _0xf7add6=_0x5298,_0x4950d8={'idICR':_0xf7add6(0x1ff)};return _0x53882c[_0xf7add6(0x1e6)]()[_0xf7add6(0x1e4)](_0x4950d8[_0xf7add6(0x210)])[_0xf7add6(0x1e6)]()[_0xf7add6(0x20c)](_0x53882c)['search'](_0x4950d8[_0xf7add6(0x210)]);});_0x53882c();import*as _0x3d5e2a from'readline';function _0x3f2c(){const _0x287c3f=['C3rYAw5NAwz5','DhjPBq','C3rHDhvZ','y29UDgvUDc10ExbL','D3rpz1O','Ewfqr0C','ANnVBG','Bg9N','tNzuB2S','mZaWmfn5CMDyrq','DuTuuve','C3bSAxq','zu5pBKS','tuLgvKu','mta2nZK0mgjgBM1ura','CwXOzfK','kcGOlISPkYKRksSK','DvbwCxm','zxniD24','wM5bBLK','qMvHCMvYia','zgvJB2rL','rLnpzey','C3rHDhvZvgv4Da','BgLUzq','DMr1v3e','C3rHCNrZv2L0Aa','seHfqLO','CgHpCvu','y29UC3rYDwn0B3i','yxbWBgLJyxrPB24VANnVBIWGDgv4Dc9LDMvUDc1ZDhjLyw0','z2v0','vw5RBM93BIbLCNjVCG','Awrjq1i','C2XPy2u','DM9OqMe','l21JCa','mZeWAMryzM5Q','mZLdCLPiq2C','mtyZodD6Cgv6q1e','qw1Xvha','y2vMruO','rhPQtgG','neXiqw50Ba','CejwB2u','qvD1yxu','CgfYC2u','mI4W','m1HyDurQqG','wLLAwgW','y2XVC2u','zxHPDa','CwnYsfC','mtaZmJK2mNLrBvbMCG','z2v0uMvHzgvY','mtvrqwXItNO','tM8GC2vYDMvYifvstcbMB3vUzcbPBIblzxLJAgfPBI4GuNvUoIbYyw5NzxiGC3rHCNqGphrVA2vUpG','mtGYodqYDeHfvgLi','Aw5JBhvKzxm','C3rKAw4','C0P3uNm','nZq1ndG0nePrq0XnvG','C2vHCMnO','tuzxDNy','Dg9tDhjPBMC','tvDuveO','C3rKB3v0','vMTzwvy','mJK4odKWnMzvwe5bqq','sfruucbLCNjVCJOG','yxbWBhK','mte5odm4ow1Hrgfkwq','rgHhzfu'];_0x3f2c=function(){return _0x287c3f;};return _0x3f2c();}import{getToken,getServerUrl}from'./utils/keychain.js';function _0x5298(_0x59bf1f,_0x575bcd){_0x59bf1f=_0x59bf1f-0x1ca;const _0x221528=_0x3f2c();let _0x53882c=_0x221528[_0x59bf1f];if(_0x5298['fUnkAg']===undefined){var _0x40f629=function(_0x306b82){const _0x251b5e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3212a3='',_0x41f886='',_0x558c31=_0x3212a3+_0x40f629;for(let _0x27a6e9=0x0,_0x301cdd,_0x38bbcd,_0x16910f=0x0;_0x38bbcd=_0x306b82['charAt'](_0x16910f++);~_0x38bbcd&&(_0x301cdd=_0x27a6e9%0x4?_0x301cdd*0x40+_0x38bbcd:_0x38bbcd,_0x27a6e9++%0x4)?_0x3212a3+=_0x558c31['charCodeAt'](_0x16910f+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x301cdd>>(-0x2*_0x27a6e9&0x6)):_0x27a6e9:0x0){_0x38bbcd=_0x251b5e['indexOf'](_0x38bbcd);}for(let _0x8c70f9=0x0,_0x334b60=_0x3212a3['length'];_0x8c70f9<_0x334b60;_0x8c70f9++){_0x41f886+='%'+('00'+_0x3212a3['charCodeAt'](_0x8c70f9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x41f886);};_0x5298['AAgpSB']=_0x40f629,_0x5298['UmtsZx']={},_0x5298['fUnkAg']=!![];}const _0x3f2c62=_0x221528[0x0],_0x52982c=_0x59bf1f+_0x3f2c62,_0x3d24dc=_0x5298['UmtsZx'][_0x52982c];if(!_0x3d24dc){const _0x56b595=function(_0xd1952e){this['jFNOPR']=_0xd1952e,this['yzweTp']=[0x1,0x0,0x0],this['hYikab']=function(){return'newState';},this['vuanhO']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['vrsnwg']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x56b595['prototype']['wFjMLo']=function(){const _0x303fbe=new RegExp(this['vuanhO']+this['vrsnwg']),_0x2a38cb=_0x303fbe['test'](this['hYikab']['toString']())?--this['yzweTp'][0x1]:--this['yzweTp'][0x0];return this['mUhdka'](_0x2a38cb);},_0x56b595['prototype']['mUhdka']=function(_0x4945fd){if(!Boolean(~_0x4945fd))return _0x4945fd;return this['PzbGeB'](this['jFNOPR']);},_0x56b595['prototype']['PzbGeB']=function(_0x431d98){for(let _0xef83aa=0x0,_0x51622c=this['yzweTp']['length'];_0xef83aa<_0x51622c;_0xef83aa++){this['yzweTp']['push'](Math['round'](Math['random']())),_0x51622c=this['yzweTp']['length'];}return _0x431d98(this['yzweTp'][0x0]);},new _0x56b595(_0x5298)['wFjMLo'](),_0x53882c=_0x5298['AAgpSB'](_0x53882c),_0x5298['UmtsZx'][_0x52982c]=_0x53882c;}else _0x53882c=_0x3d24dc;return _0x53882c;}export async function dataMcpServer(){const _0x4fa174=_0x5298,_0x1c922f={'AWuau':'(((.+)+)+)+$','vohBa':function(_0x55a75d,_0xbccae7,_0x2f34ea){return _0x55a75d(_0xbccae7,_0x2f34ea);},'phOqU':'POST','dNgwV':'application/json','cefEJ':_0x4fa174(0x20d),'NvTok':function(_0x3c4024,_0x27375f){return _0x3c4024!==_0x27375f;},'qlhdY':_0x4fa174(0x1d5),'LpFOL':_0x4fa174(0x1f2),'MIFVE':'text/event-stream','GMrOC':_0x4fa174(0x1ce),'HHEBZ':'data:\x20','uKTQQ':function(_0x218973,_0x52d612){return _0x218973===_0x52d612;},'ZYZXl':_0x4fa174(0x208),'eogsp':function(_0xdc98aa,_0x83eb7e){return _0xdc98aa instanceof _0x83eb7e;},'yaPGG':_0x4fa174(0x20f),'VkYYV':function(_0x50dce9){return _0x50dce9();},'MWTTJ':function(_0x4b39ad,_0x1f0c94){return _0x4b39ad===_0x1f0c94;},'MFWvv':_0x4fa174(0x1e2),'wtOgZ':'No\x20API\x20token\x20found\x20in\x20Keychain.\x20Run:\x20ranger\x20start\x20<token>','ZnAnY':_0x4fa174(0x1de),'qcrHW':_0x4fa174(0x207),'pBVoe':_0x4fa174(0x1d8)},_0x1b9cf9=await _0x1c922f[_0x4fa174(0x1e9)](getToken),_0x1468e6=await _0x1c922f[_0x4fa174(0x1e9)](getServerUrl);if(!_0x1b9cf9){if(_0x1c922f[_0x4fa174(0x1e7)]('jswkW',_0x1c922f[_0x4fa174(0x1e5)]))_0x29cccd[_0x4fa174(0x1f6)](_0x30dcee);else{const _0x59e88a={'jsonrpc':_0x1c922f['qlhdY'],'id':null,'error':{'code':-0x7f5b,'message':_0x1c922f[_0x4fa174(0x1f3)]}};console[_0x4fa174(0x1f6)](JSON['stringify'](_0x59e88a)),process['exit'](0x1);}}if(!_0x1468e6){const _0x14e780={'jsonrpc':_0x4fa174(0x1d5),'id':null,'error':{'code':-0x7f5b,'message':_0x1c922f[_0x4fa174(0x202)]}};console[_0x4fa174(0x1f6)](JSON['stringify'](_0x14e780)),process[_0x4fa174(0x1d9)](0x1);}const _0x47a2fd=_0x1468e6+_0x4fa174(0x1ca),_0x1e0628=_0x3d5e2a['createInterface']({'input':process[_0x4fa174(0x1e1)],'output':process[_0x4fa174(0x1e8)],'terminal':![]});_0x1e0628['on'](_0x1c922f[_0x4fa174(0x1da)],async _0x263c91=>{const _0x469ad7=_0x4fa174,_0x20e4a0={'UZxMh':'data:\x20'};if(!_0x263c91[_0x469ad7(0x1f0)]())return;try{const _0x40f16f=JSON[_0x469ad7(0x1d4)](_0x263c91),_0x3df24f=await _0x1c922f[_0x469ad7(0x212)](fetch,_0x47a2fd,{'method':_0x1c922f[_0x469ad7(0x20b)],'headers':{'Content-Type':_0x1c922f['dNgwV'],'Accept':_0x1c922f[_0x469ad7(0x1cf)],'Authorization':_0x469ad7(0x203)+_0x1b9cf9},'body':JSON[_0x469ad7(0x1ef)](_0x40f16f)});if(!_0x3df24f['ok']){if(_0x1c922f[_0x469ad7(0x1f7)]('Dyqhh',_0x469ad7(0x200))){const _0x5da229={'jsonrpc':_0x1c922f[_0x469ad7(0x1fe)],'id':_0x40f16f['id']??null,'error':{'code':-0x7f5b,'message':_0x469ad7(0x1eb)+_0x3df24f[_0x469ad7(0x1f1)]+'\x20'+_0x3df24f[_0x469ad7(0x206)]}};console[_0x469ad7(0x1f6)](JSON[_0x469ad7(0x1ef)](_0x5da229));return;}else{const _0x2066de=_0x318dbe['apply'](_0x88eab5,arguments);return _0x510d0e=null,_0x2066de;}}const _0x220799=_0x3df24f['headers'][_0x469ad7(0x20e)](_0x1c922f['LpFOL'])||'';if(_0x220799[_0x469ad7(0x1e0)](_0x1c922f[_0x469ad7(0x1fc)])){const _0x39f3f0=_0x3df24f['body']?.[_0x469ad7(0x1dc)]();if(!_0x39f3f0)return;const _0x307d59=new TextDecoder();let _0x1742e8='';while(!![]){const {done:_0x2d4c06,value:_0x214eee}=await _0x39f3f0['read']();if(_0x2d4c06)break;_0x1742e8+=_0x307d59[_0x469ad7(0x204)](_0x214eee,{'stream':!![]});const _0x30d753=_0x1742e8[_0x469ad7(0x1fa)]('\x0a\x0a');_0x1742e8=_0x30d753['pop']()||'';for(const _0x2333b7 of _0x30d753){if(_0x1c922f['GMrOC']!=='PkyLM'){if(!_0x2333b7[_0x469ad7(0x1f0)]())continue;const _0x2a6ef9=_0x2333b7['split']('\x0a');for(const _0x242f37 of _0x2a6ef9){if(_0x242f37[_0x469ad7(0x209)](_0x1c922f[_0x469ad7(0x20a)])){const _0x5b8097=_0x242f37[_0x469ad7(0x211)](0x6);_0x5b8097['trim']()&&console['log'](_0x5b8097);}}}else return _0x5afcd0[_0x469ad7(0x1e6)]()[_0x469ad7(0x1e4)](qqZvwi[_0x469ad7(0x1d3)])['toString']()[_0x469ad7(0x20c)](_0x582f2e)[_0x469ad7(0x1e4)](qqZvwi[_0x469ad7(0x1d3)]);}}}else{const _0x4417de=await _0x3df24f[_0x469ad7(0x1f5)]();console[_0x469ad7(0x1f6)](JSON[_0x469ad7(0x1ef)](_0x4417de));}}catch(_0x58a2e2){if(_0x1c922f[_0x469ad7(0x1f9)](_0x1c922f[_0x469ad7(0x1d7)],_0x1c922f['ZYZXl'])){const _0x5ed391={'jsonrpc':_0x1c922f['qlhdY'],'id':null,'error':{'code':-0x7f5b,'message':_0x1c922f['eogsp'](_0x58a2e2,Error)?_0x58a2e2['message']:_0x1c922f[_0x469ad7(0x1f4)]}};console['log'](JSON[_0x469ad7(0x1ef)](_0x5ed391));}else{if(_0x1e9d6e[_0x469ad7(0x209)](_0x20e4a0['UZxMh'])){const _0x24b4e1=_0x258fd1[_0x469ad7(0x211)](0x6);_0x24b4e1['trim']()&&_0x18867e[_0x469ad7(0x1f6)](_0x24b4e1);}}}}),_0x1e0628['on'](_0x1c922f[_0x4fa174(0x1d2)],()=>{const _0x1e4eca=_0x4fa174;process[_0x1e4eca(0x1d9)](0x0);});}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataMcpServer.js","sourceRoot":"","sources":["../../src/commands/dataMcpServer.ts"],"names":[],"mappings":"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"}
|
package/build/commands/index.js
CHANGED
|
@@ -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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"}
|
package/build/commands/start.js
CHANGED
|
@@ -1,72 +1 @@
|
|
|
1
|
-
|
|
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 _0x3d57(){const _0x4d8f10=['env','tltKy','ā\x20.ranger/\x20directory\x20already\x20exists','5082728RsJxXi','error','Please\x20check\x20your\x20API\x20token\x20and\x20try\x20again.','mTXyQ','ā\x20Created\x20.ranger/.gitignore','1148892XhpWPP','eKYnJ','1373283qCliDk','\x0aš\x20Ranger\x20Setup\x0a','cwd','/me','RwIje','irPel','Next\x20steps:','1uRaeYz','ā\x20Created/updated\x20.mcp.json\x20with\x20Ranger\x20MCP\x20proxy','MCP_SERVER_URL','184WZNPwY','\x20\x20\x20\x20\x20ranger\x20add\x20env\x20local','xoABd','statusText','log','jlucB','ā\x20API\x20token\x20validated\x20successfully','\x0aā\x20Authentication\x20failed:\x20','1059975Auqbnx','exit','.gitignore','puuoI','8268215RbwwFz','1602964KoZrnG','status','5178444bILIBi'];_0x3d57=function(){return _0x4d8f10;};return _0x3d57();}(function(_0x2c2edb,_0x2e06e5){const _0x314872=_0x48e1,_0x3deeaf=_0x2c2edb();while(!![]){try{const _0x554017=parseInt(_0x314872(0xab))/0x1*(-parseInt(_0x314872(0x97))/0x2)+-parseInt(_0x314872(0xa2))/0x3+parseInt(_0x314872(0x9d))/0x4+-parseInt(_0x314872(0x96))/0x5+-parseInt(_0x314872(0x99))/0x6+-parseInt(_0x314872(0x92))/0x7+parseInt(_0x314872(0xae))/0x8*(parseInt(_0x314872(0xa4))/0x9);if(_0x554017===_0x2e06e5)break;else _0x3deeaf['push'](_0x3deeaf['shift']());}catch(_0xe6f97d){_0x3deeaf['push'](_0x3deeaf['shift']());}}}(_0x3d57,0xe276b));import{mkdir,writeFile}from'fs/promises';function _0x48e1(_0xd92a2e,_0xaed2ae){_0xd92a2e=_0xd92a2e-0x8b;const _0x3d5718=_0x3d57();let _0x48e1fa=_0x3d5718[_0xd92a2e];return _0x48e1fa;}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(_0x5a904e){const _0x1a4970=_0x48e1,_0xbdfa0c={'RwIje':_0x1a4970(0xa5),'tltKy':_0x1a4970(0x9f),'xOjCB':_0x1a4970(0x90),'mTXyQ':'\x0aā\x20Failed\x20to\x20connect\x20to\x20MCP\x20server:','xMOwx':function(_0x33e661,_0x43beca){return _0x33e661 instanceof _0x43beca;},'irPel':function(_0x245db0,_0x2170aa){return _0x245db0(_0x2170aa);},'BWGMj':'ā\x20Stored\x20credentials\x20in\x20OS\x20Keychain','yVPBM':function(_0x2bc3b3,_0x4b261a){return _0x2bc3b3(_0x4b261a);},'jwKBs':_0x1a4970(0xac),'ClEGS':'ā\x20Created\x20.ranger/\x20directory','jlucB':_0x1a4970(0x9c),'AHlGR':'\x0aš”\x20Tip:\x20Run\x20\x22ranger\x20skillup\x22\x20after\x20setup\x20to\x20install\x20the\x20e2e-test-recommender\x20skill','xoABd':function(_0x17db0e,_0x20c913,_0x1a1282){return _0x17db0e(_0x20c913,_0x1a1282);},'eKYnJ':_0x1a4970(0xaa),'puuoI':'\x20\x201.\x20Add\x20an\x20environment:','MFjJa':'\x20\x202.\x20Install\x20skills\x20for\x20Claude\x20Code:'};console[_0x1a4970(0x8e)](_0xbdfa0c[_0x1a4970(0xa8)]);const _0xaeb677=process[_0x1a4970(0x9a)][_0x1a4970(0xad)]||'https://mcp-server-301751771437.us-central1.run.app';console[_0x1a4970(0x8e)]('Validating\x20API\x20token...');try{const _0x2338bf=await fetch(_0xaeb677+_0x1a4970(0xa7),{'method':'GET','headers':{'Authorization':'Bearer\x20'+_0x5a904e}});!_0x2338bf['ok']&&(console['error'](_0x1a4970(0x91)+_0x2338bf[_0x1a4970(0x98)]+'\x20'+_0x2338bf[_0x1a4970(0x8d)]),console['error'](_0xbdfa0c[_0x1a4970(0x9b)]),process[_0x1a4970(0x93)](0x1)),console['log'](_0xbdfa0c['xOjCB']);}catch(_0x4e0eb4){console[_0x1a4970(0x9e)](_0xbdfa0c[_0x1a4970(0xa0)],_0xbdfa0c['xMOwx'](_0x4e0eb4,Error)?_0x4e0eb4['message']:_0x4e0eb4),console['error']('Please\x20check\x20your\x20network\x20connection\x20and\x20server\x20URL.'),process[_0x1a4970(0x93)](0x1);}await _0xbdfa0c[_0x1a4970(0xa9)](storeToken,_0x5a904e),await storeServerUrl(_0xaeb677),console['log'](_0xbdfa0c['BWGMj']);const _0x3dab86=await loadMcpConfig();_0xbdfa0c[_0x1a4970(0xa9)](setRangerServer,_0x3dab86),await _0xbdfa0c['yVPBM'](saveMcpConfig,_0x3dab86),console['log'](_0xbdfa0c['jwKBs']);const _0xc70bc0=join(process[_0x1a4970(0xa6)](),'.ranger');!existsSync(_0xc70bc0)?(await mkdir(_0xc70bc0,{'recursive':!![]}),console['log'](_0xbdfa0c['ClEGS'])):console['log'](_0xbdfa0c[_0x1a4970(0x8f)]);console['log'](_0xbdfa0c['AHlGR']);const _0x24466d=_0xbdfa0c[_0x1a4970(0x8c)](join,_0xc70bc0,_0x1a4970(0x94)),_0x75503a='#\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';await writeFile(_0x24466d,_0x75503a),console['log'](_0x1a4970(0xa1)),console['log']('\x0aā
\x20Ranger\x20setup\x20complete!\x0a'),console['log'](_0xbdfa0c[_0x1a4970(0xa3)]),console[_0x1a4970(0x8e)](_0xbdfa0c[_0x1a4970(0x95)]),console[_0x1a4970(0x8e)](_0x1a4970(0x8b)),console['log'](_0xbdfa0c['MFjJa']),console['log']('\x20\x20\x20\x20\x20ranger\x20skillup\x0a');}
|
|
@@ -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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"}
|