@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.
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,127 @@
1
+ import { execSync, spawn } from 'child_process';
2
+ import { readFileSync, readdirSync, existsSync } from 'fs';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname, join } from 'path';
5
+ import { installSkill } from './utils/skills.js';
6
+ const PACKAGE_NAME = '@ranger-testing/ranger-cli';
7
+ function getCurrentVersion() {
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ const packageJsonPath = join(__dirname, '..', '..', 'package.json');
11
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
12
+ return packageJson.version;
13
+ }
14
+ function getLatestVersion() {
15
+ try {
16
+ const result = execSync(`npm view ${PACKAGE_NAME} version`, {
17
+ encoding: 'utf-8',
18
+ stdio: ['pipe', 'pipe', 'pipe'],
19
+ });
20
+ return result.trim();
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ function compareVersions(current, latest) {
27
+ const currentParts = current.split('.').map(Number);
28
+ const latestParts = latest.split('.').map(Number);
29
+ for (let i = 0; i < 3; i++) {
30
+ const c = currentParts[i] || 0;
31
+ const l = latestParts[i] || 0;
32
+ if (l > c)
33
+ return 1;
34
+ if (l < c)
35
+ return -1;
36
+ }
37
+ return 0;
38
+ }
39
+ async function runInstall() {
40
+ return new Promise((resolve) => {
41
+ console.log(`\nInstalling ${PACKAGE_NAME}@latest...\n`);
42
+ const child = spawn('npm', ['install', '-g', `${PACKAGE_NAME}@latest`], {
43
+ stdio: 'inherit',
44
+ shell: true,
45
+ });
46
+ child.on('close', (code) => {
47
+ resolve(code === 0);
48
+ });
49
+ child.on('error', () => {
50
+ resolve(false);
51
+ });
52
+ });
53
+ }
54
+ /**
55
+ * Get list of installed skills in .claude/skills directory
56
+ */
57
+ function getInstalledSkills() {
58
+ const skillsDir = join(process.cwd(), '.claude', 'skills');
59
+ if (!existsSync(skillsDir)) {
60
+ return [];
61
+ }
62
+ try {
63
+ const entries = readdirSync(skillsDir, { withFileTypes: true });
64
+ return entries
65
+ .filter((entry) => entry.isDirectory())
66
+ .map((entry) => entry.name);
67
+ }
68
+ catch (error) {
69
+ console.warn('Failed to read .claude/skills directory:', error);
70
+ return [];
71
+ }
72
+ }
73
+ /**
74
+ * Reinstall all skills found in .claude/skills directory
75
+ * This ensures skill content is always up to date, even if CLI version hasn't changed
76
+ */
77
+ async function reinstallSkills(cliVersion) {
78
+ const installedSkills = getInstalledSkills();
79
+ if (installedSkills.length === 0) {
80
+ console.log('\nNo skills found to reinstall.');
81
+ return;
82
+ }
83
+ console.log(`\nReinstalling ${installedSkills.length} skill(s) to ensure content is up to date...`);
84
+ for (const skillName of installedSkills) {
85
+ try {
86
+ await installSkill(skillName, cliVersion);
87
+ }
88
+ catch (error) {
89
+ console.warn(` Failed to reinstall ${skillName}:`, error);
90
+ }
91
+ }
92
+ }
93
+ export async function update() {
94
+ const currentVersion = getCurrentVersion();
95
+ console.log(`\nCurrent version: ${currentVersion}`);
96
+ console.log('Checking for updates...');
97
+ const latestVersion = getLatestVersion();
98
+ if (!latestVersion) {
99
+ console.log('\nFailed to check for updates. Please check your network connection.');
100
+ process.exit(1);
101
+ }
102
+ console.log(`Latest version: ${latestVersion}`);
103
+ const comparison = compareVersions(currentVersion, latestVersion);
104
+ let versionToUse = currentVersion;
105
+ if (comparison === 0) {
106
+ console.log('\nYou are already on the latest version.');
107
+ }
108
+ else if (comparison < 0) {
109
+ console.log(`\nYour version (${currentVersion}) is newer than the published version (${latestVersion}).`);
110
+ }
111
+ else {
112
+ const success = await runInstall();
113
+ if (success) {
114
+ console.log(`\nSuccessfully updated to version ${latestVersion}`);
115
+ versionToUse = latestVersion;
116
+ }
117
+ else {
118
+ console.log('\nUpdate failed. You may need to run with sudo:');
119
+ console.log(` sudo npm install -g ${PACKAGE_NAME}@latest`);
120
+ process.exit(1);
121
+ }
122
+ }
123
+ // Reinstall all skills to ensure they are up to date
124
+ await reinstallSkills(versionToUse);
125
+ console.log('\n✅ Update complete!');
126
+ }
127
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -1,64 +1 @@
1
- import { writeFile, readFile } from 'fs/promises';
2
- import { join } from 'path';
3
- import { existsSync } from 'fs';
4
- import { chromium } from 'playwright';
5
- import { installAgent } from './utils/agents.js';
6
- export async function updateEnv(envName) {
7
- const envDir = join(process.cwd(), '.ranger', envName);
8
- const configPath = join(envDir, 'config.json');
9
- const authPath = join(envDir, 'auth.json');
10
- // Check if env exists
11
- if (!existsSync(envDir)) {
12
- console.error(`\nEnvironment "${envName}" not found.`);
13
- console.error(` Run first: ranger add env ${envName}`);
14
- process.exit(1);
15
- }
16
- // Check if config exists
17
- if (!existsSync(configPath)) {
18
- console.error(`\nConfig not found at ${configPath}`);
19
- console.error(` Run first: ranger add env ${envName}`);
20
- process.exit(1);
21
- }
22
- // Load existing config
23
- const configContent = await readFile(configPath, 'utf-8');
24
- const config = JSON.parse(configContent);
25
- // Check if existing auth state exists
26
- const hasExistingAuth = existsSync(authPath);
27
- console.log('\n📋 Authentication Update');
28
- console.log(' A browser will open with your existing session (if any).');
29
- console.log(' Update your authentication as needed.');
30
- console.log(' When you are done, close the browser.\n');
31
- // Launch Playwright browser with existing storage state if available
32
- const browser = await chromium.launch({ headless: false });
33
- const contextOptions = hasExistingAuth ? { storageState: authPath } : {};
34
- const context = await browser.newContext(contextOptions);
35
- const page = await context.newPage();
36
- await page.goto('about:blank');
37
- // Wait for browser to be closed by user
38
- await new Promise((resolve) => {
39
- page.on('close', async () => {
40
- try {
41
- console.log('Saving authentication state...');
42
- await context.storageState({ path: authPath });
43
- resolve();
44
- }
45
- catch {
46
- // Context may already be closed
47
- resolve();
48
- }
49
- });
50
- });
51
- await browser.close();
52
- console.log(`\n✓ Auth state saved to: ${authPath}`);
53
- // Update config to reference the auth file
54
- config.browser = config.browser || {};
55
- config.browser.contextOptions = config.browser.contextOptions || {};
56
- config.browser.contextOptions.storageState = authPath;
57
- await writeFile(configPath, JSON.stringify(config, null, 2));
58
- console.log(`✓ Updated config: ${configPath}`);
59
- console.log(`\n✅ Environment "${envName}" authentication updated`);
60
- // Copy browser-based agents to .claude/agents
61
- await installAgent('quality-advocate');
62
- await installAgent('bug-basher');
63
- await installAgent('ui-verifier');
64
- }
1
+ (function(_0x84cd9a,_0x1565a8){const _0xf10e7a=_0x4e6d,_0x2022f8=_0x84cd9a();while(!![]){try{const _0x4ddc59=-parseInt(_0xf10e7a(0xfb))/0x1*(parseInt(_0xf10e7a(0x103))/0x2)+parseInt(_0xf10e7a(0xf4))/0x3+-parseInt(_0xf10e7a(0x104))/0x4*(parseInt(_0xf10e7a(0xe6))/0x5)+parseInt(_0xf10e7a(0xf1))/0x6*(-parseInt(_0xf10e7a(0xf0))/0x7)+parseInt(_0xf10e7a(0xfe))/0x8+-parseInt(_0xf10e7a(0xf5))/0x9+parseInt(_0xf10e7a(0x10b))/0xa;if(_0x4ddc59===_0x1565a8)break;else _0x2022f8['push'](_0x2022f8['shift']());}catch(_0x2e4aff){_0x2022f8['push'](_0x2022f8['shift']());}}}(_0x365a,0x823f1));function _0x365a(){const _0x36c76b=['35HcnxDF','979194yZBzYp','bDbwg','error','1705881lOGJcm','5675355mYiEDN','stringify','JOkmQ','\x20\x20\x20Run\x20first:\x20ranger\x20add\x20env\x20','RANGER_API_TOKEN','close','85963sNAmOl','storageState','env','5429368lsnzdO','config.json','ZJVRU','Update\x20encrypted\x20auth\x20state?\x20(auth.json.enc\x20exists)','exit','14jIijHe','38108gZlVnR','CBNuw','log','\x20\x20\x20A\x20browser\x20will\x20open\x20with\x20your\x20existing\x20session\x20(if\x20any).','pZtag','LZjuj','IGlbj','19537770qqffUN','confirm','iQsdV','goto','Kdmev','\x0a✅\x20Environment\x20\x22','QIUgq','contextOptions','.enc','MYGLU','browser','XzEzz','mnhDW','325SXnVdq','prompt','launch','\x0a📋\x20Authentication\x20Update','uEfXa','newPage','shouldEncrypt','\x20\x20You\x20can\x20safely\x20commit\x20this\x20file\x20to\x20git.','parse','\x20\x20\x20Update\x20your\x20authentication\x20as\x20needed.'];_0x365a=function(){return _0x36c76b;};return _0x365a();}import{writeFile,readFile,unlink}from'fs/promises';import{join}from'path';import{existsSync}from'fs';import{chromium}from'playwright';import _0x5722e4 from'inquirer';function _0x4e6d(_0x55b985,_0x3bb0b8){_0x55b985=_0x55b985-0xe3;const _0x365a25=_0x365a();let _0x4e6d9b=_0x365a25[_0x55b985];return _0x4e6d9b;}import{encrypt}from'./utils/crypto.js';import{getToken}from'./utils/keychain.js';export async function updateEnv(_0x2b5df4){const _0x1ad333=_0x4e6d,_0xdc75f8={'IXjuV':'Saving\x20authentication\x20state...','mnhDW':'close','MYGLU':function(_0x16737c,_0x4d8da8,_0xaccb79,_0x497441){return _0x16737c(_0x4d8da8,_0xaccb79,_0x497441);},'uEfXa':'.ranger','XzEzz':function(_0x526d7c,_0x50ccd5,_0x5748ef){return _0x526d7c(_0x50ccd5,_0x5748ef);},'cTyXS':_0x1ad333(0xff),'JOkmQ':function(_0x494fb5,_0x3beb5f){return _0x494fb5(_0x3beb5f);},'ZJVRU':function(_0x1f3a3a,_0x387c14){return _0x1f3a3a(_0x387c14);},'iQsdV':'utf-8','cqMQO':function(_0x11e68d,_0x3670a2){return _0x11e68d(_0x3670a2);},'bDbwg':_0x1ad333(0xec),'LZjuj':_0x1ad333(0xe9),'Kdmev':_0x1ad333(0x107),'QBnIc':'\x20\x20\x20When\x20you\x20are\x20done,\x20close\x20the\x20browser.\x0a','IGlbj':function(_0x420a4f,_0x5cf453,_0x57147a){return _0x420a4f(_0x5cf453,_0x57147a);},'CBNuw':function(_0x37576a){return _0x37576a();},'XvOig':'\x20\x20Could\x20not\x20encrypt:\x20No\x20API\x20token\x20found\x20in\x20keychain\x20or\x20RANGER_API_TOKEN\x20env\x20var','pZtag':_0x1ad333(0xed)},_0x35bcc1=_0xdc75f8[_0x1ad333(0x114)](join,process['cwd'](),_0xdc75f8[_0x1ad333(0xea)],_0x2b5df4),_0x1d8031=_0xdc75f8['XzEzz'](join,_0x35bcc1,_0xdc75f8['cTyXS']),_0x31249b=_0xdc75f8[_0x1ad333(0xe4)](join,_0x35bcc1,'auth.json'),_0x374fca=_0x31249b+_0x1ad333(0x113);!_0xdc75f8[_0x1ad333(0xf7)](existsSync,_0x35bcc1)&&(console['error']('\x0aEnvironment\x20\x22'+_0x2b5df4+'\x22\x20not\x20found.'),console['error'](_0x1ad333(0xf8)+_0x2b5df4),process['exit'](0x1));!_0xdc75f8[_0x1ad333(0x100)](existsSync,_0x1d8031)&&(console[_0x1ad333(0xf3)]('\x0aConfig\x20not\x20found\x20at\x20'+_0x1d8031),console['error'](_0x1ad333(0xf8)+_0x2b5df4),process[_0x1ad333(0x102)](0x1));const _0x1b5ac7=await _0xdc75f8[_0x1ad333(0xe4)](readFile,_0x1d8031,_0xdc75f8[_0x1ad333(0x10d)]),_0x2a32ca=JSON[_0x1ad333(0xee)](_0x1b5ac7),_0x47d56b=_0xdc75f8['cqMQO'](existsSync,_0x31249b),_0x2021dd=existsSync(_0x374fca),{shouldEncrypt:_0x576f3c}=await _0x5722e4[_0x1ad333(0xe7)]([{'type':_0x1ad333(0x10c),'name':_0xdc75f8[_0x1ad333(0xf2)],'message':_0x2021dd?_0x1ad333(0x101):'Encrypt\x20auth\x20state?\x20(Recommended\x20for\x20CI\x20-\x20allows\x20committing\x20to\x20git)','default':_0x2021dd}]);console[_0x1ad333(0x106)](_0xdc75f8[_0x1ad333(0x109)]),console[_0x1ad333(0x106)](_0xdc75f8[_0x1ad333(0x10f)]),console['log'](_0x1ad333(0xef)),console['log'](_0xdc75f8['QBnIc']);const _0x154a3a=await chromium[_0x1ad333(0xe8)]({'headless':![]}),_0x51a234=_0x47d56b?{'storageState':_0x31249b}:{},_0x408d28=await _0x154a3a['newContext'](_0x51a234),_0x5dd2f6=await _0x408d28[_0x1ad333(0xeb)]();await _0x5dd2f6[_0x1ad333(0x10e)]('about:blank'),await new Promise(_0x3994b2=>{const _0x1bc513=_0x1ad333,_0xba184e={'QIUgq':_0xdc75f8['IXjuV']};_0x5dd2f6['on'](_0xdc75f8[_0x1bc513(0xe5)],async()=>{const _0xe41927=_0x1bc513;try{console['log'](_0xba184e[_0xe41927(0x111)]),await _0x408d28[_0xe41927(0xfc)]({'path':_0x31249b}),_0x3994b2();}catch{_0x3994b2();}});}),await _0x154a3a[_0x1ad333(0xfa)]();if(_0x576f3c){const _0x3bd181=await _0xdc75f8[_0x1ad333(0x10a)](readFile,_0x31249b,'utf-8'),_0x27ab04=process[_0x1ad333(0xfd)][_0x1ad333(0xf9)]||await _0xdc75f8[_0x1ad333(0x105)](getToken);if(!_0x27ab04)console[_0x1ad333(0xf3)](_0xdc75f8['XvOig']),console['log']('✓\x20Auth\x20state\x20saved\x20to:\x20'+_0x31249b);else{const _0x47a3ab=encrypt(_0x3bd181,_0x27ab04);await writeFile(_0x374fca,_0x47a3ab),await unlink(_0x31249b),console['log']('✓\x20Encrypted\x20auth\x20saved\x20to:\x20'+_0x374fca),console['log'](_0xdc75f8[_0x1ad333(0x108)]),console[_0x1ad333(0x106)]('\x20\x20Set\x20RANGER_API_TOKEN\x20in\x20CI\x20to\x20decrypt\x20at\x20runtime.');}}else console['log']('✓\x20Auth\x20state\x20saved\x20to:\x20'+_0x31249b);_0x2a32ca[_0x1ad333(0xe3)]=_0x2a32ca[_0x1ad333(0xe3)]||{},_0x2a32ca[_0x1ad333(0xe3)]['contextOptions']=_0x2a32ca[_0x1ad333(0xe3)][_0x1ad333(0x112)]||{},_0x2a32ca['browser']['contextOptions']['storageState']=_0x31249b,await writeFile(_0x1d8031,JSON[_0x1ad333(0xf6)](_0x2a32ca,null,0x2)),console[_0x1ad333(0x106)]('✓\x20Updated\x20config:\x20'+_0x1d8031),console['log'](_0x1ad333(0x110)+_0x2b5df4+'\x22\x20authentication\x20updated');}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateEnv.js","sourceRoot":"","sources":["../../src/commands/updateEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,CAAC;IAE5C,sBAAsB;IACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,cAAc,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,uBAAuB;IACvB,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEzC,+DAA+D;IAC/D,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAE3D,wDAAwD;IACxD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC5C;YACI,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,oBAAoB;gBACzB,CAAC,CAAC,qDAAqD;gBACvD,CAAC,CAAC,qEAAqE;YAC3E,OAAO,EAAE,oBAAoB;SAChC;KACJ,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,qEAAqE;IACrE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE/B,wCAAwC;IACxC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAChC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBAC9C,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC/C,OAAO,EAAE,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACL,gCAAgC;gBAChC,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CACT,iFAAiF,CACpF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACJ,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAC9C,6BAA6B;YAC7B,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,8BAA8B,iBAAiB,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IACpE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,GAAG,QAAQ,CAAC;IAEtD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,0BAA0B,CAAC,CAAC;AACvE,CAAC"}
@@ -1,28 +1 @@
1
- import { join } from 'path';
2
- import { existsSync } from 'fs';
3
- import { loadMcpConfig, saveMcpConfig, setRangerBrowser, } from './utils/mcpConfig.js';
4
- import { installAgent } from './utils/agents.js';
5
- export async function useEnv(envName) {
6
- const envDir = join(process.cwd(), '.ranger', envName);
7
- const configPath = join(envDir, 'config.json');
8
- // Check env exists
9
- if (!existsSync(envDir)) {
10
- console.error(`\n❌ Environment "${envName}" not found.`);
11
- console.error(` Run first: ranger add env ${envName}`);
12
- process.exit(1);
13
- }
14
- // Check config exists
15
- if (!existsSync(configPath)) {
16
- console.error(`\n❌ Config not found at ${configPath}`);
17
- console.error(` Run first: ranger add env ${envName}`);
18
- process.exit(1);
19
- }
20
- // Load and update MCP config
21
- const mcpConfig = await loadMcpConfig();
22
- setRangerBrowser(mcpConfig, configPath);
23
- await saveMcpConfig(mcpConfig);
24
- // Install browser-based agents if they don't exist
25
- await installAgent('quality-advocate');
26
- await installAgent('bug-basher');
27
- console.log(`\n✅ Now using environment "${envName}"`);
28
- }
1
+ (function(_0x2b685d,_0x37126f){const _0x5940ae=_0x5ca1,_0x4a14cf=_0x2b685d();while(!![]){try{const _0x5236ec=-parseInt(_0x5940ae(0x150))/0x1+parseInt(_0x5940ae(0x15c))/0x2+-parseInt(_0x5940ae(0x158))/0x3+-parseInt(_0x5940ae(0x160))/0x4*(-parseInt(_0x5940ae(0x151))/0x5)+parseInt(_0x5940ae(0x152))/0x6+parseInt(_0x5940ae(0x15a))/0x7+-parseInt(_0x5940ae(0x156))/0x8;if(_0x5236ec===_0x37126f)break;else _0x4a14cf['push'](_0x4a14cf['shift']());}catch(_0x40b1a7){_0x4a14cf['push'](_0x4a14cf['shift']());}}}(_0x2fd5,0x9d738));import{writeFile}from'fs/promises';import{join}from'path';import{existsSync}from'fs';function _0x5ca1(_0x5b8304,_0x39f978){_0x5b8304=_0x5b8304-0x14f;const _0x2fd579=_0x2fd5();let _0x5ca12a=_0x2fd579[_0x5b8304];return _0x5ca12a;}function _0x2fd5(){const _0x48da50=['299641bQrBvY','39905fSeLKM','3797574tHPPFs','\x22\x20not\x20found.','\x0a❌\x20Config\x20not\x20found\x20at\x20','\x0a✓\x20Now\x20using\x20environment\x20\x22','14114680VJXoPG','config.json','255117rYnBmS','wkliL','640080PSMdGb','cwd','1760794cmvPzC','\x20\x20\x20Run\x20first:\x20ranger\x20add\x20env\x20','error','.ranger','596ugvGZE','exit'];_0x2fd5=function(){return _0x48da50;};return _0x2fd5();}export async function useEnv(_0x27e1ad){const _0xd57166=_0x5ca1,_0x5a92a6={'zsqSx':_0xd57166(0x15f),'irZfV':function(_0x4dd108,_0x5c9b3d,_0xf4fe9f){return _0x4dd108(_0x5c9b3d,_0xf4fe9f);},'XIoWO':function(_0x15bef7,_0x7561be){return _0x15bef7(_0x7561be);},'wkliL':function(_0x260d42,_0x1c1bf6,_0x118cc2,_0x16e9e7){return _0x260d42(_0x1c1bf6,_0x118cc2,_0x16e9e7);},'mivqv':function(_0x47b963,_0x409ac3,_0x816381){return _0x47b963(_0x409ac3,_0x816381);}},_0x1b142a=join(process[_0xd57166(0x15b)](),_0x5a92a6['zsqSx'],_0x27e1ad),_0x4c8799=_0x5a92a6['irZfV'](join,_0x1b142a,_0xd57166(0x157));!existsSync(_0x1b142a)&&(console['error']('\x0a❌\x20Environment\x20\x22'+_0x27e1ad+_0xd57166(0x153)),console[_0xd57166(0x15e)]('\x20\x20\x20Run\x20first:\x20ranger\x20add\x20env\x20'+_0x27e1ad),process[_0xd57166(0x14f)](0x1));!_0x5a92a6['XIoWO'](existsSync,_0x4c8799)&&(console['error'](_0xd57166(0x154)+_0x4c8799),console[_0xd57166(0x15e)](_0xd57166(0x15d)+_0x27e1ad),process['exit'](0x1));const _0x5ad74f=_0x5a92a6[_0xd57166(0x159)](join,process[_0xd57166(0x15b)](),_0x5a92a6['zsqSx'],'active-env.txt');await _0x5a92a6['mivqv'](writeFile,_0x5ad74f,_0x27e1ad),console['log'](_0xd57166(0x155)+_0x27e1ad+'\x22');}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEnv.js","sourceRoot":"","sources":["../../src/commands/useEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAe;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE/C,mBAAmB;IACnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,cAAc,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,iDAAiD;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1 @@
1
+ (function(_0x332b3d,_0x113d7f){const _0xf548f3=_0x4635,_0x5b6d34=_0x332b3d();while(!![]){try{const _0x3b547c=-parseInt(_0xf548f3(0xbe))/0x1+parseInt(_0xf548f3(0xb1))/0x2*(parseInt(_0xf548f3(0xc3))/0x3)+parseInt(_0xf548f3(0xb3))/0x4*(-parseInt(_0xf548f3(0xec))/0x5)+parseInt(_0xf548f3(0xeb))/0x6*(-parseInt(_0xf548f3(0xe7))/0x7)+parseInt(_0xf548f3(0xc7))/0x8*(parseInt(_0xf548f3(0xdf))/0x9)+-parseInt(_0xf548f3(0xa3))/0xa+parseInt(_0xf548f3(0xb7))/0xb*(parseInt(_0xf548f3(0xbd))/0xc);if(_0x3b547c===_0x113d7f)break;else _0x5b6d34['push'](_0x5b6d34['shift']());}catch(_0x4d1c9f){_0x5b6d34['push'](_0x5b6d34['shift']());}}}(_0x5b19,0xa6ef2));function _0x5b19(){const _0x4cec73=['qMvHCMvYia','uKfor0vsx0fqsv9vuKW','wxPZBeK','mtu1mZaXouzeC0jwvW','Dg9tDhjPBMC','q1zsq3u','DKfzCwS','oeHvz0PfDG','ELjizNy','B05tvMO','ExnYCxm','vgfbBgq','A0Tttg0','tePnuMm','yxbWBhK','BgvUz3rO','uuPAvKO','AgjKBNa','BwjlCgO','y29UC3rYDwn0B3i','C3HevgK','qwniBgW','AffsALm','ANnVBG','tM8GqvbjihrVA2vUignVBMzPz3vYzwqUifj1BJOGCMfUz2vYihn0yxj0idX0B2TLBJ4','DwvLENq','CuXxvhK','yxbWBgLJyxrPB24VEMLW','kcGOlISPkYKRksSK','r3fkDM0','twvfvuS','nZm3mJe3y2z0yK1k','l2fWAs92ms9Ty3aVyNjVD3nLCI1ZzxnZAw9UCY8','t3H5CNu','De9xuwW','rMfPBgvKihrVihvWBg9Hzcb0CMfJztOG','tvvYv0S','C3rYAw5NAwz5','rMfPBgvKihrVignYzwf0zsbICM93C2vYihnLC3nPB246ia','oduXndaZn0PLrLjvsG','Dgv4Da','zw52AxjVBM1LBNroyw1L','tu9tEeu','nKHnCfnMtW','mti1zM5vsKjf','tfPUEMq','nZC1mtG3me1wCgfMyG','su5cCNy','tuLyqKq','ufvu','AfDfEMW','ue9tva','wuz1z2u','yxbWBgLJyxrPB24VANnVBG','ChLQDxO','l2fWAs92ms9Ty3aVyNjVD3nLCI1ZzxnZAw9UCW','BxzfEu4','sfLAAvK','rMfPBgvKihrVigDLDcbICM93C2vYihnLC3nPB246ia','uefuq0G','mNrQz3nOuW','Dvjkvhm','mtm5nJG4zKfez1nQ','wNnNCNi','s2rItuO','rMfPBgvKihrVihvWBg9HzcbJB252zxjZyxrPB246ia','mZiXnZe3zwroExDK','Ahr0Chm6lY9HCgKUCMfUz2vYlM5LDa','DxjS','A0XQu3G','C2v0DgLUz3m','C2vHCMnO','mtuZnKDurNnOCG','nZK0oteYugnAENLW','ANjwtxm'];_0x5b19=function(){return _0x4cec73;};return _0x5b19();}const _0x4be0da=(function(){const _0x5e71ab=_0x4635,_0x59a6de={'MIXBD':_0x5e71ab(0xa9),'hQRjS':_0x5e71ab(0xc5),'YyJzj':_0x5e71ab(0xb8)};let _0x55b59f=!![];return function(_0x530136,_0x3c2a5d){const _0xb0e8fc={'pYPoS':_0x59a6de['YyJzj']},_0x3619b2=_0x55b59f?function(){const _0xeaa73=_0x4635;if(_0x59a6de[_0xeaa73(0xa5)]===_0x59a6de[_0xeaa73(0xd6)])return _0x1200e6['env'][_0xeaa73(0xc1)]||_0xb0e8fc['pYPoS'];else{if(_0x3c2a5d){const _0x47469a=_0x3c2a5d['apply'](_0x530136,arguments);return _0x3c2a5d=null,_0x47469a;}}}:function(){};return _0x55b59f=![],_0x3619b2;};}()),_0x36f943=_0x4be0da(this,function(){const _0x8f078e=_0x4635,_0x5c6c1b={'mbKpj':'(((.+)+)+)+$'};return _0x36f943[_0x8f078e(0xc4)]()[_0x8f078e(0xbc)](_0x5c6c1b[_0x8f078e(0xd2)])['toString']()[_0x8f078e(0xd3)](_0x36f943)[_0x8f078e(0xbc)](_0x5c6c1b[_0x8f078e(0xd2)]);});_0x36f943();function _0x4635(_0x775fa3,_0x34d903){_0x775fa3=_0x775fa3-0xa2;const _0x5558e1=_0x5b19();let _0x36f943=_0x5558e1[_0x775fa3];if(_0x4635['szhiVH']===undefined){var _0x4be0da=function(_0xf279bd){const _0x1580bc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x24d344='',_0x61076b='',_0x50a2ee=_0x24d344+_0x4be0da;for(let _0x1cf526=0x0,_0x5bb155,_0x1f55bd,_0x4e7c23=0x0;_0x1f55bd=_0xf279bd['charAt'](_0x4e7c23++);~_0x1f55bd&&(_0x5bb155=_0x1cf526%0x4?_0x5bb155*0x40+_0x1f55bd:_0x1f55bd,_0x1cf526++%0x4)?_0x24d344+=_0x50a2ee['charCodeAt'](_0x4e7c23+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x5bb155>>(-0x2*_0x1cf526&0x6)):_0x1cf526:0x0){_0x1f55bd=_0x1580bc['indexOf'](_0x1f55bd);}for(let _0x17958d=0x0,_0x35310e=_0x24d344['length'];_0x17958d<_0x35310e;_0x17958d++){_0x61076b+='%'+('00'+_0x24d344['charCodeAt'](_0x17958d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x61076b);};_0x4635['YLmEXD']=_0x4be0da,_0x4635['RoFmnZ']={},_0x4635['szhiVH']=!![];}const _0x5b1923=_0x5558e1[0x0],_0x4635de=_0x775fa3+_0x5b1923,_0x758403=_0x4635['RoFmnZ'][_0x4635de];if(!_0x758403){const _0xf53d9b=function(_0x339c69){this['LrRhhG']=_0x339c69,this['rblEOB']=[0x1,0x0,0x0],this['yrJgGQ']=function(){return'newState';},this['lqbVTQ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['IgAUHR']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0xf53d9b['prototype']['wkeWPS']=function(){const _0xb26d23=new RegExp(this['lqbVTQ']+this['IgAUHR']),_0x14a622=_0xb26d23['test'](this['yrJgGQ']['toString']())?--this['rblEOB'][0x1]:--this['rblEOB'][0x0];return this['zNYqmv'](_0x14a622);},_0xf53d9b['prototype']['zNYqmv']=function(_0x3b6428){if(!Boolean(~_0x3b6428))return _0x3b6428;return this['QmjOCi'](this['LrRhhG']);},_0xf53d9b['prototype']['QmjOCi']=function(_0x1557bd){for(let _0x31aeb1=0x0,_0xccaabd=this['rblEOB']['length'];_0x31aeb1<_0xccaabd;_0x31aeb1++){this['rblEOB']['push'](Math['round'](Math['random']())),_0xccaabd=this['rblEOB']['length'];}return _0x1557bd(this['rblEOB'][0x0]);},new _0xf53d9b(_0x4635)['wkeWPS'](),_0x36f943=_0x4635['YLmEXD'](_0x36f943),_0x4635['RoFmnZ'][_0x4635de]=_0x36f943;}else _0x36f943=_0x758403;return _0x36f943;}import{getToken}from'./keychain.js';function getApiBaseUrl(){const _0x451ca3=_0x4635,_0x2340ee={'uRJTs':_0x451ca3(0xb8)};return process['env'][_0x451ca3(0xc1)]||_0x2340ee[_0x451ca3(0xb2)];}export async function createBrowserSession(_0x244561){const _0x57651b=_0x4635,_0x1178ed={'uCelF':_0x57651b(0xdc),'kKSLm':function(_0x36e67e){return _0x36e67e();},'mvEyN':_0x57651b(0xe1),'jrVMs':'No\x20API\x20token\x20configured.\x20Run:\x20ranger\x20start\x20<token>','LJMRc':function(_0xb22be4,_0x36927e,_0x10fae7){return _0xb22be4(_0x36927e,_0x10fae7);},'pyjuz':_0x57651b(0xaa)},_0x26c4fe=await _0x1178ed[_0x57651b(0xcc)](getToken);if(!_0x26c4fe){if(_0x1178ed[_0x57651b(0xad)]===_0x57651b(0xe2))return _0x93cd18['toString']()[_0x57651b(0xbc)](vbHYvL['uCelF'])['toString']()[_0x57651b(0xd3)](_0xae9730)[_0x57651b(0xbc)]('(((.+)+)+)+$');else throw new Error(_0x1178ed[_0x57651b(0xbf)]);}const _0x2467d8=_0x1178ed['kKSLm'](getApiBaseUrl),_0x3d4b93=await _0x1178ed[_0x57651b(0xcd)](fetch,_0x2467d8+_0x57651b(0xac),{'method':_0x57651b(0xa8),'headers':{'Authorization':'Bearer\x20'+_0x26c4fe,'Content-Type':_0x1178ed[_0x57651b(0xab)]},'body':JSON['stringify']({'environmentName':_0x244561?.[_0x57651b(0xe9)],'settings':_0x244561?.[_0x57651b(0xbb)],'task':_0x244561?.['task'],'url':_0x244561?.[_0x57651b(0xb9)]})});if(!_0x3d4b93['ok']){const _0x36e9cc=await _0x3d4b93['text']();throw new Error(_0x57651b(0xe6)+_0x36e9cc);}return _0x3d4b93[_0x57651b(0xd7)]();}export async function updateBrowserSession(_0x4b5629,_0x28b69f){const _0x192af3=_0x4635,_0x53af3e={'CHxrs':function(_0xed1b03){return _0xed1b03();},'eFZKm':_0x192af3(0xd8),'hWEzl':function(_0x51c6d6){return _0x51c6d6();},'QJZVJ':function(_0x17455c,_0x2a9896,_0x5b9003){return _0x17455c(_0x2a9896,_0x5b9003);},'oNSVj':_0x192af3(0xb0),'MUrWK':_0x192af3(0xaa),'ysrqs':'ISoRW'},_0x1a1aec=await _0x53af3e['CHxrs'](getToken);if(!_0x1a1aec)throw new Error(_0x53af3e['eFZKm']);const _0xdac53d=_0x53af3e[_0x192af3(0xa7)](getApiBaseUrl),_0x4ac30e=await _0x53af3e[_0x192af3(0xd0)](fetch,_0xdac53d+_0x192af3(0xe0)+_0x4b5629,{'method':_0x53af3e[_0x192af3(0xc9)],'headers':{'Authorization':_0x192af3(0xc0)+_0x1a1aec,'Content-Type':_0x53af3e[_0x192af3(0xe4)]},'body':JSON[_0x192af3(0xe5)](_0x28b69f)});if(!_0x4ac30e['ok']){if(_0x53af3e[_0x192af3(0xca)]!==_0x53af3e[_0x192af3(0xca)])throw new _0x4b536a('No\x20API\x20token\x20configured.\x20Run:\x20ranger\x20start\x20<token>');else{const _0x3fc3df=await _0x4ac30e[_0x192af3(0xe8)]();throw new Error('Failed\x20to\x20update\x20browser\x20session:\x20'+_0x3fc3df);}}return _0x4ac30e[_0x192af3(0xd7)]();}export async function getBrowserSession(_0xf4bbf1){const _0x26c9f8=_0x4635,_0x3f46f0={'YzslI':function(_0xfef5a9,_0x13dbf7){return _0xfef5a9(_0x13dbf7);},'MeEUK':function(_0xc8fea8){return _0xc8fea8();},'TaAld':function(_0x1c03b8,_0x10151c){return _0x1c03b8===_0x10151c;},'Zsgrr':'ghTlu','ueezt':_0x26c9f8(0xd8),'qLWTy':'GET','MOSxE':'FSaQp'},_0x3227ae=await _0x3f46f0[_0x26c9f8(0xde)](getToken);if(!_0x3227ae){if(_0x3f46f0[_0x26c9f8(0xcb)](_0x3f46f0[_0x26c9f8(0xb4)],_0x3f46f0['Zsgrr']))throw new Error(_0x3f46f0[_0x26c9f8(0xd9)]);else{const _0x326538=_0x3f46f0[_0x26c9f8(0xc2)](_0x2ec7f5,_0x2aace9);return'https://trace.playwright.dev/?trace='+_0x326538;}}const _0x1e2922=_0x3f46f0['MeEUK'](getApiBaseUrl),_0xa63eea=await fetch(_0x1e2922+_0x26c9f8(0xe0)+_0xf4bbf1,{'method':_0x3f46f0[_0x26c9f8(0xda)],'headers':{'Authorization':_0x26c9f8(0xc0)+_0x3227ae}});if(!_0xa63eea['ok']){if(_0x3f46f0['MOSxE']!==_0x3f46f0[_0x26c9f8(0xea)]){const _0xe27543=_0x419263[_0x26c9f8(0xce)](_0x3d6b3c,arguments);return _0x3bc561=null,_0xe27543;}else{const _0x13992c=await _0xa63eea['text']();throw new Error(_0x26c9f8(0xaf)+_0x13992c);}}return _0xa63eea[_0x26c9f8(0xd7)]();}export async function uploadTrace(_0x37f1bd,_0x189055){const _0x55ce9a=_0x4635,_0x47bcbe={'KdbMJ':function(_0x2b82bd,_0x3e5f17,_0x538288){return _0x2b82bd(_0x3e5f17,_0x538288);},'zRHfv':_0x55ce9a(0xa6),'hbdnp':_0x55ce9a(0xdb),'GqJvm':function(_0x2a061c,_0x4605c2){return _0x2a061c===_0x4605c2;},'kLjSx':_0x55ce9a(0xc6)},_0x2eaab3=await _0x47bcbe[_0x55ce9a(0xb5)](fetch,_0x37f1bd,{'method':_0x47bcbe[_0x55ce9a(0xc8)],'headers':{'Content-Type':_0x47bcbe[_0x55ce9a(0xd1)],'Content-Length':_0x189055['length'][_0x55ce9a(0xc4)]()},'body':_0x189055});if(!_0x2eaab3['ok']){if(_0x47bcbe[_0x55ce9a(0xdd)](_0x47bcbe[_0x55ce9a(0xba)],_0x47bcbe[_0x55ce9a(0xba)])){const _0x22e858=await _0x2eaab3[_0x55ce9a(0xe8)]();throw new Error(_0x55ce9a(0xe3)+_0x22e858);}else{const _0x4acaaa=_0xf53d9b?function(){const _0x297c3f=_0x55ce9a;if(_0x31aeb1){const _0x2e940b=_0x1cd562[_0x297c3f(0xce)](_0x5bdfb5,arguments);return _0x5185da=null,_0x2e940b;}}:function(){};return _0x1557bd=![],_0x4acaaa;}}}export async function uploadConversation(_0x4a0f38,_0x3f9e8b){const _0x82fa66=_0x4635,_0x595cd={'sxDTi':function(_0x1d81b5,_0x1d687f,_0x33ba64){return _0x1d81b5(_0x1d687f,_0x33ba64);},'AcHll':_0x82fa66(0xa6),'LZnzd':'application/jsonl','lvYQM':function(_0x5ec890,_0x2e8b96){return _0x5ec890===_0x2e8b96;},'tGfZt':_0x82fa66(0xae)},_0x4be69c=await _0x595cd[_0x82fa66(0xd4)](fetch,_0x4a0f38,{'method':_0x595cd[_0x82fa66(0xd5)],'headers':{'Content-Type':_0x595cd[_0x82fa66(0xa2)],'Content-Length':_0x3f9e8b[_0x82fa66(0xcf)][_0x82fa66(0xc4)]()},'body':_0x3f9e8b});if(!_0x4be69c['ok']){if(_0x595cd['lvYQM'](_0x595cd['tGfZt'],_0x82fa66(0xa4))){if(_0x21813b){const _0x23ce81=_0x2a64e1[_0x82fa66(0xce)](_0x2eeb77,arguments);return _0x3f8250=null,_0x23ce81;}}else{const _0x1db61a=await _0x4be69c[_0x82fa66(0xe8)]();throw new Error(_0x82fa66(0xb6)+_0x1db61a);}}}export function buildTraceViewerUrl(_0x3e3622){const _0x15887c={'UmCkE':function(_0x2bd06e,_0x49e9da){return _0x2bd06e(_0x49e9da);}},_0x50f66d=_0x15887c['UmCkE'](encodeURIComponent,_0x3e3622);return'https://trace.playwright.dev/?trace='+_0x50f66d;}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserSessionsApi.js","sourceRoot":"","sources":["../../../src/commands/utils/browserSessionsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA4BzC;;GAEG;AACH,SAAS,aAAa;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAK1C;IACG,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,8BAA8B,EAAE;QACnE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;SACrC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,eAAe,EAAE,OAAO,EAAE,eAAe;YACzC,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,IAAI,EAAE,OAAO,EAAE,IAAI;YACnB,GAAG,EAAE,OAAO,EAAE,GAAG;SACpB,CAAC;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,SAAiB,EACjB,IAKC;IAED,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,OAAO,gCAAgC,SAAS,EAAE,EACrD;QACI,MAAM,EAAE,OAAO;QACf,OAAO,EAAE;YACL,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;SACrC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC7B,CACJ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,SAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,OAAO,gCAAgC,SAAS,EAAE,EACrD;QACI,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACL,aAAa,EAAE,UAAU,KAAK,EAAE;SACnC;KACJ,CACJ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,SAAiB,EACjB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACL,cAAc,EAAE,iBAAiB;YACjC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE;SAClD;QACD,IAAI,EAAE,WAAkC;KAC3C,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,SAAiB,EACjB,kBAA0B;IAE1B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACL,cAAc,EAAE,mBAAmB;YACnC,gBAAgB,EAAE,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE;SACzD;QACD,IAAI,EAAE,kBAAyC;KAClD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,uCAAuC,UAAU,EAAE,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync, } from 'crypto';
2
+ const ALGORITHM = 'aes-256-gcm';
3
+ const SALT = 'ranger-auth-encryption'; // Fixed salt is fine since token is unique
4
+ const KEY_LENGTH = 32;
5
+ const IV_LENGTH = 16;
6
+ const TAG_LENGTH = 16;
7
+ /**
8
+ * Derive an encryption key from the API token using PBKDF2.
9
+ */
10
+ export function deriveKey(token) {
11
+ return pbkdf2Sync(token, SALT, 100000, KEY_LENGTH, 'sha256');
12
+ }
13
+ /**
14
+ * Encrypt data using AES-256-GCM with a key derived from the API token.
15
+ * Returns a Buffer containing: IV (16 bytes) + Auth Tag (16 bytes) + Encrypted data
16
+ */
17
+ export function encrypt(data, token) {
18
+ const key = deriveKey(token);
19
+ const iv = randomBytes(IV_LENGTH);
20
+ const cipher = createCipheriv(ALGORITHM, key, iv);
21
+ const encrypted = Buffer.concat([
22
+ cipher.update(data, 'utf8'),
23
+ cipher.final(),
24
+ ]);
25
+ const tag = cipher.getAuthTag();
26
+ // Format: IV (16) + Tag (16) + Encrypted data
27
+ return Buffer.concat([iv, tag, encrypted]);
28
+ }
29
+ /**
30
+ * Decrypt data that was encrypted with the encrypt() function.
31
+ * Expects a Buffer containing: IV (16 bytes) + Auth Tag (16 bytes) + Encrypted data
32
+ */
33
+ export function decrypt(encryptedData, token) {
34
+ const key = deriveKey(token);
35
+ const iv = encryptedData.subarray(0, IV_LENGTH);
36
+ const tag = encryptedData.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
37
+ const data = encryptedData.subarray(IV_LENGTH + TAG_LENGTH);
38
+ const decipher = createDecipheriv(ALGORITHM, key, iv);
39
+ decipher.setAuthTag(tag);
40
+ return decipher.update(data) + decipher.final('utf8');
41
+ }
42
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/commands/utils/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,UAAU,GACb,MAAM,QAAQ,CAAC;AAEhB,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,2CAA2C;AAClF,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IAC/C,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE;KACjB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEhC,8CAA8C;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,aAAqB,EAAE,KAAa;IACxD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEzB,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1 @@
1
+ const _0x2a23be=_0x40a4;function _0x1a75(){const _0x75fb0f=['C2v0ugfZC3DVCMq','u2nUuNO','zgvSzxrLugfZC3DVCMq','yxbPlxrVA2vU','nJmXoduZmuj6qwflyG','mtfhBwXisxe','mtbJuLjZz24','mtG0mdG5uxfxvujS','q0fpDwi','C2vHCMnO','mtqXnJiZmtb3ChLkuhy','mZGXmdbXyw13sMm','CMfUz2vYlwnSAq','z2v0ugfZC3DVCMq','mtqZntm0t0XPzwrq','yxbWBhK','ogXiCuL5qG','mJHQBe9HBvy','Dg9tDhjPBMC','otu3mdiZoxflCNrguq','kcGOlISPkYKRksSK','mJq1odu2rgXJq0jo','mJqYAMPfD3L6'];_0x1a75=function(){return _0x75fb0f;};return _0x1a75();}(function(_0x3beb0f,_0x557014){const _0x409f1c=_0x40a4,_0xfc7548=_0x3beb0f();while(!![]){try{const _0x5cc9d2=parseInt(_0x409f1c(0xde))/0x1*(-parseInt(_0x409f1c(0xe7))/0x2)+parseInt(_0x409f1c(0xe0))/0x3*(-parseInt(_0x409f1c(0xea))/0x4)+parseInt(_0x409f1c(0xdf))/0x5*(-parseInt(_0x409f1c(0xee))/0x6)+parseInt(_0x409f1c(0xec))/0x7*(parseInt(_0x409f1c(0xe9))/0x8)+-parseInt(_0x409f1c(0xdd))/0x9+parseInt(_0x409f1c(0xe3))/0xa+-parseInt(_0x409f1c(0xef))/0xb*(parseInt(_0x409f1c(0xe4))/0xc);if(_0x5cc9d2===_0x557014)break;else _0xfc7548['push'](_0xfc7548['shift']());}catch(_0xb73d0a){_0xfc7548['push'](_0xfc7548['shift']());}}}(_0x1a75,0xad7a9));const _0x195557=(function(){let _0x20c2db=!![];return function(_0x48c53c,_0x19a8eb){const _0x428ae7=_0x20c2db?function(){const _0x37a554=_0x40a4;if(_0x19a8eb){const _0x517e96=_0x19a8eb[_0x37a554(0xe8)](_0x48c53c,arguments);return _0x19a8eb=null,_0x517e96;}}:function(){};return _0x20c2db=![],_0x428ae7;};}()),_0x457497=_0x195557(this,function(){const _0x22f723=_0x40a4,_0x39b4f2={'CAOub':_0x22f723(0xed)};return _0x457497[_0x22f723(0xeb)]()[_0x22f723(0xe2)](_0x39b4f2['CAOub'])['toString']()['constructor'](_0x457497)[_0x22f723(0xe2)](_0x39b4f2[_0x22f723(0xe1)]);});function _0x40a4(_0x5884e5,_0x5474d3){_0x5884e5=_0x5884e5-0xdc;const _0x17f919=_0x1a75();let _0x457497=_0x17f919[_0x5884e5];if(_0x40a4['rNaeFA']===undefined){var _0x195557=function(_0x9b244a){const _0x54cd3c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4cab97='',_0x8fd93b='',_0x34da66=_0x4cab97+_0x195557;for(let _0x987ac9=0x0,_0x4b0d00,_0x55c88f,_0x4116f0=0x0;_0x55c88f=_0x9b244a['charAt'](_0x4116f0++);~_0x55c88f&&(_0x4b0d00=_0x987ac9%0x4?_0x4b0d00*0x40+_0x55c88f:_0x55c88f,_0x987ac9++%0x4)?_0x4cab97+=_0x34da66['charCodeAt'](_0x4116f0+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x4b0d00>>(-0x2*_0x987ac9&0x6)):_0x987ac9:0x0){_0x55c88f=_0x54cd3c['indexOf'](_0x55c88f);}for(let _0x1985aa=0x0,_0x19afe5=_0x4cab97['length'];_0x1985aa<_0x19afe5;_0x1985aa++){_0x8fd93b+='%'+('00'+_0x4cab97['charCodeAt'](_0x1985aa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x8fd93b);};_0x40a4['LqIQLm']=_0x195557,_0x40a4['MepxEa']={},_0x40a4['rNaeFA']=!![];}const _0x1a751c=_0x17f919[0x0],_0x40a4ac=_0x5884e5+_0x1a751c,_0x5a4555=_0x40a4['MepxEa'][_0x40a4ac];if(!_0x5a4555){const _0x4c1c36=function(_0x3bc886){this['SdMNPo']=_0x3bc886,this['hflsff']=[0x1,0x0,0x0],this['OLcyMt']=function(){return'newState';},this['IaKJZw']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['phABKE']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4c1c36['prototype']['AmUdLd']=function(){const _0x17c91d=new RegExp(this['IaKJZw']+this['phABKE']),_0x2ed30e=_0x17c91d['test'](this['OLcyMt']['toString']())?--this['hflsff'][0x1]:--this['hflsff'][0x0];return this['UuMIhP'](_0x2ed30e);},_0x4c1c36['prototype']['UuMIhP']=function(_0x3c69d4){if(!Boolean(~_0x3c69d4))return _0x3c69d4;return this['VvTFoB'](this['SdMNPo']);},_0x4c1c36['prototype']['VvTFoB']=function(_0xe5f6d6){for(let _0x28414e=0x0,_0x58de54=this['hflsff']['length'];_0x28414e<_0x58de54;_0x28414e++){this['hflsff']['push'](Math['round'](Math['random']())),_0x58de54=this['hflsff']['length'];}return _0xe5f6d6(this['hflsff'][0x0]);},new _0x4c1c36(_0x40a4)['AmUdLd'](),_0x457497=_0x40a4['LqIQLm'](_0x457497),_0x40a4['MepxEa'][_0x40a4ac]=_0x457497;}else _0x457497=_0x5a4555;return _0x457497;}_0x457497();import _0x2c1e4b from'keytar';const SERVICE_NAME=_0x2a23be(0xe5),ACCOUNT_TOKEN=_0x2a23be(0xdc),ACCOUNT_SERVER_URL='server-url';export async function storeToken(_0x434705){const _0x67f4a8=_0x2a23be;await _0x2c1e4b[_0x67f4a8(0xf0)](SERVICE_NAME,ACCOUNT_TOKEN,_0x434705);}export async function getToken(){const _0x349b72=_0x2a23be;return await _0x2c1e4b[_0x349b72(0xe6)](SERVICE_NAME,ACCOUNT_TOKEN);}export async function deleteToken(){return await _0x2c1e4b['deletePassword'](SERVICE_NAME,ACCOUNT_TOKEN);}export async function storeServerUrl(_0x114857){await _0x2c1e4b['setPassword'](SERVICE_NAME,ACCOUNT_SERVER_URL,_0x114857);}export async function getServerUrl(){const _0x1379b6=_0x2a23be;return await _0x2c1e4b[_0x1379b6(0xe6)](SERVICE_NAME,ACCOUNT_SERVER_URL);}export async function deleteServerUrl(){const _0x44e3af=_0x2a23be;return await _0x2c1e4b[_0x44e3af(0xf2)](SERVICE_NAME,ACCOUNT_SERVER_URL);}export async function deleteAllCredentials(){const _0x262364=_0x2a23be,_0x22a615={'ScnRz':function(_0x20b611){return _0x20b611();}};await _0x22a615[_0x262364(0xf1)](deleteToken),await _0x22a615[_0x262364(0xf1)](deleteServerUrl);}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../src/commands/utils/keychain.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAExC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa;IAC1C,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC1B,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC5C,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACtC,MAAM,WAAW,EAAE,CAAC;IACpB,MAAM,eAAe,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1 @@
1
+ (function(_0x117901,_0xe6183){const _0x491f42=_0x1788,_0x486515=_0x117901();while(!![]){try{const _0x422dc0=-parseInt(_0x491f42(0x216))/0x1+parseInt(_0x491f42(0x211))/0x2*(parseInt(_0x491f42(0x1ff))/0x3)+-parseInt(_0x491f42(0x1fb))/0x4+-parseInt(_0x491f42(0x1f8))/0x5*(-parseInt(_0x491f42(0x212))/0x6)+-parseInt(_0x491f42(0x217))/0x7*(parseInt(_0x491f42(0x203))/0x8)+-parseInt(_0x491f42(0x1fa))/0x9+parseInt(_0x491f42(0x1f7))/0xa;if(_0x422dc0===_0xe6183)break;else _0x486515['push'](_0x486515['shift']());}catch(_0x26d9d7){_0x486515['push'](_0x486515['shift']());}}}(_0x1079,0xe4d76));function _0x1079(){const _0x2e3e3d=['C2vHCMnO','vuz4zve','qMvHCMvYia','DeDqChO','yu9ABKi','y29UC3rYDwn0B3i','twTWruq','uKfor0vsx0fqsv9vuKW','EKTIz0K','l2fWAs92ms9Ty3aVBg9JywWTywDLBNqTAw5ZDgfSBgf0Aw9UCW','mZK1ofPJELvZDa','odK2mZeWzhbNAKzw','ue9tva','yxbWBhK','kcGOlISPkYKRksSK','mtu0mZq1mfv4zKf2BG','mtqYnteWmMLsrfjWAW','Dgv4Da','CK5RBMu','Ahr0Chm6lY9HCgKUCMfUz2vYlM5LDa','yxbWBgLJyxrPB24VANnVBG','rMfPBgvKihrVigXVzYbZA2LSBcbPBNn0ywXSyxrPB246ia','mZG1ndaYnZbztM1nDwq','ntbQAuPLt3a','AMfMtMe','mtuZmZi5odvYrfPNyKC','mZeYnZa0nfPOsgnWCW','EgfREwm','A210rKe','Dg9tDhjPBMC','mJe5oxHQwKD3Da','u3noy04','zw52','uhfTAfe','nZjjDLv4yLO','DwL0zMe','rxLpsw4','thfZveW'];_0x1079=function(){return _0x2e3e3d;};return _0x1079();}const _0x4cd016=(function(){const _0x2a7f43=_0x1788,_0x467683={'RiFwm':'vFWOb','PqmhQ':function(_0x114252,_0x3fb635){return _0x114252!==_0x3fb635;},'QUHCX':_0x2a7f43(0x1fd),'xakyc':'fmyjL'};let _0x4059bc=!![];return function(_0x423803,_0x3222d2){const _0x333f6d=_0x2a7f43,_0x165364={'UFxeQ':function(_0x15fca5,_0x146981){return _0x15fca5===_0x146981;},'SsNcN':_0x467683['RiFwm'],'tGPpz':'vWaeT'};if(_0x467683[_0x333f6d(0x202)](_0x467683['QUHCX'],_0x467683[_0x333f6d(0x1fc)])){const _0x5d956e=_0x4059bc?function(){const _0x1c1188=_0x333f6d;if(_0x3222d2){if(_0x165364[_0x1c1188(0x208)](_0x165364[_0x1c1188(0x200)],_0x165364[_0x1c1188(0x20a)]))return;else{const _0x599fbc=_0x3222d2[_0x1c1188(0x214)](_0x423803,arguments);return _0x3222d2=null,_0x599fbc;}}}:function(){};return _0x4059bc=![],_0x5d956e;}else return _0x302125[_0x333f6d(0x201)][_0x333f6d(0x20e)]||_0x333f6d(0x1f4);};}()),_0x371726=_0x4cd016(this,function(){const _0x426440=_0x1788,_0x16b40b={'EyOIn':_0x426440(0x215)};return _0x371726[_0x426440(0x1fe)]()[_0x426440(0x207)](_0x16b40b[_0x426440(0x205)])[_0x426440(0x1fe)]()['constructor'](_0x371726)[_0x426440(0x207)](_0x16b40b[_0x426440(0x205)]);});_0x371726();function _0x1788(_0xcd7ff9,_0x54b9be){_0xcd7ff9=_0xcd7ff9-0x1f2;const _0x401a07=_0x1079();let _0x371726=_0x401a07[_0xcd7ff9];if(_0x1788['rDMvtm']===undefined){var _0x4cd016=function(_0x3e3dc4){const _0x4541c4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xa1c0be='',_0x392937='',_0x23e4ad=_0xa1c0be+_0x4cd016;for(let _0x45cacc=0x0,_0x433a70,_0x37159d,_0x497ea0=0x0;_0x37159d=_0x3e3dc4['charAt'](_0x497ea0++);~_0x37159d&&(_0x433a70=_0x45cacc%0x4?_0x433a70*0x40+_0x37159d:_0x37159d,_0x45cacc++%0x4)?_0xa1c0be+=_0x23e4ad['charCodeAt'](_0x497ea0+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x433a70>>(-0x2*_0x45cacc&0x6)):_0x45cacc:0x0){_0x37159d=_0x4541c4['indexOf'](_0x37159d);}for(let _0x113e8=0x0,_0x33c0f2=_0xa1c0be['length'];_0x113e8<_0x33c0f2;_0x113e8++){_0x392937+='%'+('00'+_0xa1c0be['charCodeAt'](_0x113e8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x392937);};_0x1788['kCRdkd']=_0x4cd016,_0x1788['KhDTMe']={},_0x1788['rDMvtm']=!![];}const _0x107971=_0x401a07[0x0],_0x17882d=_0xcd7ff9+_0x107971,_0x2bc16d=_0x1788['KhDTMe'][_0x17882d];if(!_0x2bc16d){const _0x151256=function(_0x3b4e09){this['WOPrOd']=_0x3b4e09,this['PDqiMD']=[0x1,0x0,0x0],this['LAVTZk']=function(){return'newState';},this['GLOMwW']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['GLStqL']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x151256['prototype']['ulJnRN']=function(){const _0x4f032e=new RegExp(this['GLOMwW']+this['GLStqL']),_0x328f0a=_0x4f032e['test'](this['LAVTZk']['toString']())?--this['PDqiMD'][0x1]:--this['PDqiMD'][0x0];return this['dTTJGc'](_0x328f0a);},_0x151256['prototype']['dTTJGc']=function(_0x1d420){if(!Boolean(~_0x1d420))return _0x1d420;return this['wPmmtZ'](this['WOPrOd']);},_0x151256['prototype']['wPmmtZ']=function(_0x4710a2){for(let _0x133296=0x0,_0x36f9d6=this['PDqiMD']['length'];_0x133296<_0x36f9d6;_0x133296++){this['PDqiMD']['push'](Math['round'](Math['random']())),_0x36f9d6=this['PDqiMD']['length'];}return _0x4710a2(this['PDqiMD'][0x0]);},new _0x151256(_0x1788)['ulJnRN'](),_0x371726=_0x1788['kCRdkd'](_0x371726),_0x1788['KhDTMe'][_0x17882d]=_0x371726;}else _0x371726=_0x2bc16d;return _0x371726;}import{getToken}from'./keychain.js';function getApiBaseUrl(){const _0x4da909=_0x1788,_0x2b43e6={'zKbgI':_0x4da909(0x1f4)};return process[_0x4da909(0x201)][_0x4da909(0x20e)]||_0x2b43e6[_0x4da909(0x20f)];}export async function logLocalAgentInstallation(_0x53d78e,_0x8d31df,_0x3d4a6a){const _0x4fcf93=_0x1788,_0x15b50b={'LqsTL':_0x4fcf93(0x215),'RvENq':function(_0x2696d3){return _0x2696d3();},'QWMiQ':function(_0x23e0af){return _0x23e0af();},'MkpED':function(_0x36bd41,_0x168a40,_0x1e680a){return _0x36bd41(_0x168a40,_0x1e680a);},'jafNa':_0x4fcf93(0x213),'uitfa':function(_0x509dde,_0x36c179){return _0x509dde===_0x36c179;},'FonTB':_0x4fcf93(0x20b)},_0x4d6f9a=await _0x15b50b['RvENq'](getToken);if(!_0x4d6f9a)return;const _0x3fece8=_0x15b50b['QWMiQ'](getApiBaseUrl),_0x36fd69=await _0x15b50b[_0x4fcf93(0x20d)](fetch,_0x3fece8+_0x4fcf93(0x210),{'method':_0x15b50b[_0x4fcf93(0x1f9)],'headers':{'Authorization':_0x4fcf93(0x209)+_0x4d6f9a,'Content-Type':_0x4fcf93(0x1f5)},'body':JSON['stringify']({'skillName':_0x53d78e,'cliVersion':_0x3d4a6a,'metadata':_0x8d31df})});if(!_0x36fd69['ok']){if(_0x15b50b[_0x4fcf93(0x204)](_0x15b50b['FonTB'],_0x4fcf93(0x1f3)))return _0x5e0623[_0x4fcf93(0x1fe)]()[_0x4fcf93(0x207)](JrZVFO[_0x4fcf93(0x206)])[_0x4fcf93(0x1fe)]()[_0x4fcf93(0x20c)](_0x4df312)[_0x4fcf93(0x207)](JrZVFO['LqsTL']);else{const _0x454b79=await _0x36fd69[_0x4fcf93(0x1f2)]();console['error'](_0x4fcf93(0x1f6)+_0x454b79);}}}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localAgentInstallationsApi.js","sourceRoot":"","sources":["../../../src/commands/utils/localAgentInstallationsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,SAAS,aAAa;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,SAAiB,EACjB,QAAkC,EAClC,UAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,gDAAgD;QAChD,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,GAAG,OAAO,uCAAuC,EACjD;QACI,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;SACrC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,SAAS;YACT,UAAU;YACV,QAAQ;SACX,CAAC;KACL,CACJ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,uDAAuD;QACvD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACL,CAAC"}
@@ -1,47 +1 @@
1
- import { readFile, writeFile } from 'fs/promises';
2
- import { existsSync } from 'fs';
3
- import { join } from 'path';
4
- export function getMcpConfigPath() {
5
- return join(process.cwd(), '.mcp.json');
6
- }
7
- export async function loadMcpConfig() {
8
- const mcpConfigPath = getMcpConfigPath();
9
- if (existsSync(mcpConfigPath)) {
10
- try {
11
- const existingConfig = await readFile(mcpConfigPath, 'utf-8');
12
- return JSON.parse(existingConfig);
13
- }
14
- catch {
15
- // If parse fails, start fresh
16
- return { mcpServers: {} };
17
- }
18
- }
19
- return { mcpServers: {} };
20
- }
21
- export async function saveMcpConfig(config) {
22
- const mcpConfigPath = getMcpConfigPath();
23
- await writeFile(mcpConfigPath, JSON.stringify(config, null, 2));
24
- }
25
- export function hasRangerServer(config) {
26
- return !!config.mcpServers.ranger;
27
- }
28
- export function setRangerServer(config, token, serverUrl) {
29
- config.mcpServers.ranger = {
30
- type: 'http',
31
- url: `${serverUrl}/mcp`,
32
- headers: {
33
- Authorization: `Bearer ${token}`,
34
- },
35
- };
36
- }
37
- export function setRangerBrowser(config, configPath) {
38
- config.mcpServers['ranger-browser'] = {
39
- command: 'npx',
40
- args: [
41
- '@ranger-testing/playwright',
42
- 'run-mcp-server',
43
- '--config',
44
- configPath,
45
- ],
46
- };
47
- }
1
+ (function(_0x4be922,_0x40d1c8){const _0x2cfa76=_0x5ee6,_0x37ffd7=_0x4be922();while(!![]){try{const _0x1848b7=parseInt(_0x2cfa76(0x1e7))/0x1*(-parseInt(_0x2cfa76(0x1e6))/0x2)+-parseInt(_0x2cfa76(0x1f6))/0x3+-parseInt(_0x2cfa76(0x1f3))/0x4+-parseInt(_0x2cfa76(0x1f5))/0x5+-parseInt(_0x2cfa76(0x1eb))/0x6*(-parseInt(_0x2cfa76(0x1ef))/0x7)+parseInt(_0x2cfa76(0x1e9))/0x8*(parseInt(_0x2cfa76(0x1e8))/0x9)+parseInt(_0x2cfa76(0x1e5))/0xa*(parseInt(_0x2cfa76(0x1ee))/0xb);if(_0x1848b7===_0x40d1c8)break;else _0x37ffd7['push'](_0x37ffd7['shift']());}catch(_0x40f990){_0x37ffd7['push'](_0x37ffd7['shift']());}}}(_0x28b1,0x5bdfe));import{readFile,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';function _0x5ee6(_0x315e58,_0x511164){_0x315e58=_0x315e58-0x1e3;const _0x28b1e1=_0x28b1();let _0x5ee6ca=_0x28b1e1[_0x315e58];return _0x5ee6ca;}export function getMcpConfigPath(){const _0x31440f=_0x5ee6,_0x573fbf={'ZEEPe':function(_0x2517a4,_0xf93d44,_0x4e1950){return _0x2517a4(_0xf93d44,_0x4e1950);}};return _0x573fbf[_0x31440f(0x1ea)](join,process[_0x31440f(0x1f8)](),_0x31440f(0x1e4));}function _0x28b1(){const _0x1cd797=['8599294pWDyQY','2632049guTbcd','@ranger-testing/ranger-cli','mcpServers','yJXAr','2206280rillci','jtFXF','1946265yoJkfL','317166AesbZb','data-mcp-server','cwd','FGcjl','ranger','ryPgq','.mcp.json','10sTHvEi','4ZIylpI','20836YRzZKo','234xXIiny','94392NnDAGR','ZEEPe','6dfYzTT','stringify','npx'];_0x28b1=function(){return _0x1cd797;};return _0x28b1();}export async function loadMcpConfig(){const _0xceee26=_0x5ee6,_0x295ddc={'ryPgq':function(_0x258fdb){return _0x258fdb();},'ETUxB':function(_0x2fa4f7,_0x176ba8){return _0x2fa4f7(_0x176ba8);},'wKUDO':function(_0x49d2e4,_0x278f26,_0x34a5d4){return _0x49d2e4(_0x278f26,_0x34a5d4);}},_0x33e21b=_0x295ddc[_0xceee26(0x1e3)](getMcpConfigPath);if(_0x295ddc['ETUxB'](existsSync,_0x33e21b))try{const _0x39e2b9=await _0x295ddc['wKUDO'](readFile,_0x33e21b,'utf-8');return JSON['parse'](_0x39e2b9);}catch{return{'mcpServers':{}};}return{'mcpServers':{}};}export async function saveMcpConfig(_0x5c6202){const _0x543fbc=_0x5ee6,_0x17a03e={'HhPPV':function(_0x541e0b,_0x11ab7d,_0x4a1983){return _0x541e0b(_0x11ab7d,_0x4a1983);}},_0x3a032b=getMcpConfigPath();await _0x17a03e['HhPPV'](writeFile,_0x3a032b,JSON[_0x543fbc(0x1ec)](_0x5c6202,null,0x2));}export function hasRangerServer(_0x8124fc){const _0x2da6ea=_0x5ee6;return!!_0x8124fc['mcpServers'][_0x2da6ea(0x1fa)];}export function setRangerServer(_0x347e63){const _0x15242d=_0x5ee6,_0x29aa8e={'FGcjl':_0x15242d(0x1ed),'yJXAr':_0x15242d(0x1f0),'jtFXF':_0x15242d(0x1f7)};_0x347e63[_0x15242d(0x1f1)][_0x15242d(0x1fa)]={'command':_0x29aa8e[_0x15242d(0x1f9)],'args':[_0x29aa8e[_0x15242d(0x1f2)],_0x29aa8e[_0x15242d(0x1f4)]]};}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpConfig.js","sourceRoot":"","sources":["../../../src/commands/utils/mcpConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,MAAM,UAAU,gBAAgB;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACL,8BAA8B;YAC9B,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAiB;IACjD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,iEAAiE;IACjE,qCAAqC;IACrC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG;QACvB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,4BAA4B,EAAE,iBAAiB,CAAC;KAC1D,CAAC;AACN,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { readdir } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { existsSync } from 'fs';
4
+ /**
5
+ * Collect screenshots from session directory
6
+ */
7
+ export async function collectScreenshots(sessionDir) {
8
+ const screenshots = [];
9
+ const paths = [];
10
+ if (!existsSync(sessionDir)) {
11
+ return { screenshots, paths };
12
+ }
13
+ const files = await readdir(sessionDir);
14
+ const imageFiles = files
15
+ .filter((f) => /\.(png|jpg|jpeg|gif|webp)$/i.test(f))
16
+ .sort(); // Sort to maintain order
17
+ for (const filename of imageFiles) {
18
+ const fullPath = join(sessionDir, filename);
19
+ screenshots.push({
20
+ filename,
21
+ path: fullPath,
22
+ relativePath: `./${filename}`, // Relative to report.md in same dir
23
+ });
24
+ paths.push(fullPath);
25
+ }
26
+ return { screenshots, paths };
27
+ }
28
+ /**
29
+ * Get emoji for severity level
30
+ */
31
+ function getSeverityEmoji(severity) {
32
+ switch (severity) {
33
+ case 'BLOCKER':
34
+ return '🔴';
35
+ case 'MAJOR':
36
+ return '🟠';
37
+ default:
38
+ return '⚪';
39
+ }
40
+ }
41
+ /**
42
+ * Format screenshot filename into a readable caption
43
+ * e.g., "03-after-login.png" -> "After Login"
44
+ */
45
+ function formatScreenshotCaption(filename) {
46
+ const nameWithoutExt = filename.replace(/\.(png|jpg|jpeg|gif|webp)$/i, '');
47
+ const nameWithoutNumber = nameWithoutExt.replace(/^\d+-/, '');
48
+ return nameWithoutNumber
49
+ .split('-')
50
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
51
+ .join(' ');
52
+ }
53
+ /**
54
+ * Generate a markdown verification report and return it as a string
55
+ */
56
+ export function generateMarkdownReport(params) {
57
+ const { sessionId, task, url, success, summary, issues, screenshots, durationMs, traceViewerUrl, } = params;
58
+ const timestamp = new Date().toISOString();
59
+ const durationSec = (durationMs / 1000).toFixed(1);
60
+ const lines = [];
61
+ // Header
62
+ lines.push(`# Verification Report`);
63
+ lines.push('');
64
+ lines.push(`**Session:** \`${sessionId}\``);
65
+ lines.push(`**Generated:** ${timestamp}`);
66
+ lines.push(`**Duration:** ${durationSec}s`);
67
+ lines.push('');
68
+ // Task & URL
69
+ lines.push(`## Task`);
70
+ lines.push('');
71
+ lines.push(`**URL:** ${url}`);
72
+ lines.push('');
73
+ lines.push(`> ${task}`);
74
+ lines.push('');
75
+ // Result Summary
76
+ lines.push(`## Result`);
77
+ lines.push('');
78
+ const statusEmoji = success ? '✅' : '❌';
79
+ lines.push(`**Status:** ${statusEmoji} ${success ? 'PASSED' : 'ISSUES FOUND'}`);
80
+ lines.push('');
81
+ lines.push(`### Summary`);
82
+ lines.push('');
83
+ lines.push(summary);
84
+ lines.push('');
85
+ // Issues
86
+ if (issues && issues.length > 0) {
87
+ lines.push(`### Issues Found (${issues.length})`);
88
+ lines.push('');
89
+ for (const issue of issues) {
90
+ const severityEmoji = getSeverityEmoji(issue.severity);
91
+ lines.push(`#### ${severityEmoji} [${issue.severity}] Issue`);
92
+ lines.push('');
93
+ lines.push(issue.description);
94
+ lines.push('');
95
+ // Link to screenshot if referenced
96
+ if (issue.screenshot) {
97
+ const screenshotName = issue.screenshot;
98
+ const screenshotInfo = screenshots.find((s) => s.filename === screenshotName ||
99
+ s.filename.includes(screenshotName));
100
+ if (screenshotInfo) {
101
+ lines.push(`**Screenshot:**`);
102
+ lines.push('');
103
+ lines.push(`![${screenshotName}](${screenshotInfo.relativePath})`);
104
+ lines.push('');
105
+ }
106
+ }
107
+ }
108
+ }
109
+ // Screenshots Gallery
110
+ if (screenshots.length > 0) {
111
+ lines.push(`## Screenshots (${screenshots.length})`);
112
+ lines.push('');
113
+ for (const screenshot of screenshots) {
114
+ const caption = formatScreenshotCaption(screenshot.filename);
115
+ lines.push(`### ${caption}`);
116
+ lines.push('');
117
+ lines.push(`![${screenshot.filename}](${screenshot.relativePath})`);
118
+ lines.push('');
119
+ }
120
+ }
121
+ // Footer with trace viewer link
122
+ if (traceViewerUrl) {
123
+ lines.push(`---`);
124
+ lines.push('');
125
+ lines.push(`**Full Trace:** [View in Playwright Trace Viewer](${traceViewerUrl})`);
126
+ lines.push('');
127
+ }
128
+ return lines.join('\n');
129
+ }
130
+ //# sourceMappingURL=reportGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../../src/commands/utils/reportGenerator.ts"],"names":[],"mappings":"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"}