@ranger-testing/ranger-cli 2.5.4-alpha.78800d3-3 → 2.5.4-alpha.a98f848-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/build/cli.js +1 -1
- package/build/commands/addEnv.js +1 -1
- package/build/commands/authEncrypt.js +1 -1
- package/build/commands/clean.js +1 -1
- package/build/commands/config.js +1 -1
- package/build/commands/env.js +1 -1
- package/build/commands/feature.js +1 -1
- package/build/commands/hook.js +1 -1
- package/build/commands/hooks/autoPrompt.js +1 -1
- package/build/commands/hooks/disable.js +1 -1
- package/build/commands/hooks/enable.js +1 -1
- package/build/commands/hooks/exitPlanMode.js +1 -1
- package/build/commands/hooks/index.js +1 -1
- package/build/commands/hooks/output.js +1 -1
- package/build/commands/hooks/planReminder.js +1 -1
- package/build/commands/hooks/planStart.js +1 -1
- package/build/commands/hooks/postEdit.js +1 -1
- package/build/commands/hooks/preCompact.js +1 -1
- package/build/commands/hooks/sessionEnd.js +1 -1
- package/build/commands/hooks/sessionStart.js +1 -1
- package/build/commands/hooks/stopHook.js +1 -1
- package/build/commands/index.js +1 -1
- package/build/commands/login.js +1 -1
- package/build/commands/mcpBootstrap.js +1 -1
- package/build/commands/migrateProfile.js +1 -1
- package/build/commands/setup/claude.js +1 -1
- package/build/commands/setup/opencode.js +1 -1
- package/build/commands/setupCi.js +1 -1
- package/build/commands/skillup.js +1 -1
- package/build/commands/start.js +1 -1
- package/build/commands/status.js +1 -1
- package/build/commands/update.js +1 -1
- package/build/commands/updateEnv.js +1 -1
- package/build/commands/useEnv.js +1 -1
- package/build/commands/utils/activeProfile.js +1 -1
- package/build/commands/utils/agentEnv.js +1 -1
- package/build/commands/utils/browserSessionsApi.js +1 -1
- package/build/commands/utils/claudeConfig.js +1 -1
- package/build/commands/utils/claudeOverrideSettings.js +1 -1
- package/build/commands/utils/claudePlugin.js +1 -1
- package/build/commands/utils/cloudProfile.js +1 -1
- package/build/commands/utils/cloudProfileSession.js +1 -1
- package/build/commands/utils/crypto.js +1 -1
- package/build/commands/utils/desirePathLog.js +1 -1
- package/build/commands/utils/deviceAuth.js +1 -1
- package/build/commands/utils/environment.js +1 -1
- package/build/commands/utils/featureApi.js +1 -1
- package/build/commands/utils/fixWebmDuration.js +1 -1
- package/build/commands/utils/gitTracked.js +1 -1
- package/build/commands/utils/keychain.js +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js +1 -1
- package/build/commands/utils/matchAuthEnvironment.js +1 -1
- package/build/commands/utils/mcpImageBase64.js +1 -1
- package/build/commands/utils/model.js +1 -1
- package/build/commands/utils/opencodeConfig.js +1 -1
- package/build/commands/utils/playwrightCli.js +1 -1
- package/build/commands/utils/profileMessages.js +1 -1
- package/build/commands/utils/profileSetupBanner.js +1 -1
- package/build/commands/utils/projectsConfig.js +1 -1
- package/build/commands/utils/rangerConfig.js +1 -1
- package/build/commands/utils/rangerRoot.js +1 -1
- package/build/commands/utils/resolveProfileContext.js +1 -1
- package/build/commands/utils/resolveProfileUrl.js +1 -1
- package/build/commands/utils/retry.js +1 -1
- package/build/commands/utils/sessionCache.js +1 -1
- package/build/commands/utils/settings.js +1 -1
- package/build/commands/utils/skillContent.js +1 -1
- package/build/commands/utils/skills.js +1 -1
- package/build/commands/utils/stitchWebmFiles.js +1 -1
- package/build/commands/utils/telemetry.js +1 -1
- package/build/commands/utils/tokenRefresh.js +1 -1
- package/build/commands/utils/traceSnapshotMapper.js +1 -1
- package/build/commands/utils/userApi.js +1 -1
- package/build/commands/utils/version.js +1 -1
- package/build/commands/verifyFeature.js +1 -1
- package/build/commands/verifyFeatureCli.js +1 -1
- package/build/skills/ranger/SKILL.md +18 -4
- package/build/skills/ranger/create.md +6 -0
- package/build/skills/ranger/verify.md +23 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(_0x1c8c03,_0x33d803){const _0x2aa9ba=_0x1e08,_0x40e4fc=_0x1c8c03();while(!![]){try{const _0x4b38b7=-parseInt(_0x2aa9ba(0x223))/0x1+parseInt(_0x2aa9ba(0x1f1))/0x2+-parseInt(_0x2aa9ba(0x22d))/0x3*(parseInt(_0x2aa9ba(0x242))/0x4)+-parseInt(_0x2aa9ba(0x1fa))/0x5+-parseInt(_0x2aa9ba(0x1e5))/0x6+-parseInt(_0x2aa9ba(0x24d))/0x7+parseInt(_0x2aa9ba(0x211))/0x8;if(_0x4b38b7===_0x33d803)break;else _0x40e4fc['push'](_0x40e4fc['shift']());}catch(_0x454549){_0x40e4fc['push'](_0x40e4fc['shift']());}}}(_0x216d,0x7eb11));import{mkdir,readFile,readdir,rename,stat}from'fs/promises';function _0x216d(){const _0x56eec2=['pop','split','length','PzEQq','trim','):\x20\x22','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','76vzuBqx','canonicalFlow','dnVUH','short','tracing-stop','PostToolUse','snapshot','CTfIu','string','--filename=','ASjyw','1121582cESRFo','invocation','ZPBoy','\x20open`,\x20then\x20`','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','EyNVA','ePPhV','name','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','(?:^|\x5cs)','check\x20','start\x20video\x20recording','...',']\x20**','stop\x20tracing','VGmkw','oystI','selector','target','ref\x20','IzRjb','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','ahBSV','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','-\x20[','nDNAh','DEBUG','replace','**\x20(','1455348QQjSuJ','trackPhaseError','00_mozilla-homepage.yml','uDNZy','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','[playwright-cli]\x20','IICUH','\x20>\x20','\x0a\x0aAfter\x20completing\x20authentication,\x20proceed\x20with\x20the\x20verification\x20task\x20below.\x0aIf\x20authentication\x20fails,\x20return\x20immediately\x20with\x20evaluation\x20\x22blocked\x22\x20and\x20describe\x20the\x20auth\x20failure.','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','press\x20','31460cqSDhc','iqdRH','02_state.yml','[ranger-verification-agent]\x20','\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a7.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a8.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario','\x0a##\x20Evaluation\x20Criteria\x0a-\x20VERIFIED:\x20The\x20task\x20completed\x20successfully\x20and\x20the\x20scenario\x20requirements\x20are\x20fully\x20met\x0a-\x20PARTIAL:\x20The\x20task\x20partially\x20completed\x20but\x20some\x20aspects\x20of\x20the\x20scenario\x20are\x20not\x20verified\x0a-\x20BLOCKED:\x20A\x20blocking\x20issue\x20(bug,\x20error,\x20missing\x20feature)\x20prevents\x20completion\x0a-\x20FAILED:\x20The\x20task\x20could\x20not\x20be\x20completed\x20due\x20to\x20errors\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format\x20with\x20your\x20evaluation.','\x22,\x20\x22','phase','FNDCb','1908805jLXnGm','\x0a\x0a##\x20Additional\x20Notes\x0a','subcommand','notes','01_initial.yml','description','\x20tracing-start`,\x20then\x20`','unaddressedComments','screenshot','domRef','stringify','capture\x20snapshot','vgwPI','click','gHYdi','KZSXU','`\x20to\x20inspect\x20the\x20current\x20app\x20state.\x0a5.\x20Read\x20snapshot\x20YAML\x20files\x20to\x20find\x20element\x20references\x20like\x20`e12`,\x20then\x20use\x20them\x20with\x20`click`,\x20`fill`,\x20`check`,\x20or\x20`select`.\x0a6.\x20Use\x20`','capture\x20step\x20`','playwright_cli_close','Bash','tool_call','set','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','22546888eykDYN','02_button-clicked.png','trackPhaseEnd','TzDgj','bSBwz','trackPhaseStart','kjfMw','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','BAmIV','env','trace.trace.zip','log','trace.zip','fhAPh','run\x20custom\x20Playwright\x20code','numeric','OIYRH','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','656883LtsNrO','commandArgs','twCAc','IUIqO','cKdjx','match','slice','FEWJA','toLocaleDateString','\x20snapshot\x20--filename\x20','137958ViFoqS','join','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','cabIv','open\x20new\x20tab','hook_event_name','sFGoT','sDWgS','\x22\x0a-\x20Number\x20prefixes\x20(01_,\x2002_,\x20etc.)\x20help\x20maintain\x20chronological\x20order\x0a-\x20For\x20KEY\x20MOMENTS\x20that\x20prove\x20the\x20scenario\x20is\x20complete,\x20prefix\x20with\x20\x22key_\x22:\x20\x22','03_result-visible.png','01_mozilla-homepage.png','capture\x20key\x20step\x20`','01_initial-state.png','tool_failure'];_0x216d=function(){return _0x56eec2;};return _0x216d();}import{basename,join}from'path';import{extractBashCommand,parsePlaywrightCliCommand,quoteShellArg,runPlaywrightCliCommand}from'./utils/playwrightCli.js';const PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS=0xea60,PLAYWRIGHT_CLI_PREVIEW_LIMIT=0xf0,VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN=/^(?:\d{2}_.+\.(?:png|ya?ml)|key_.+\.png|session-recording(?:-\d+)?\.webm|trace(?:\.trace)?(?:-\d+)?\.zip|current_snap\.ya?ml)$/i;function truncatePreview(_0x30fcbc,_0x3c3d20=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x6021a7=_0x1e08;return _0x30fcbc[_0x6021a7(0x23d)]>_0x3c3d20?_0x30fcbc[_0x6021a7(0x229)](0x0,_0x3c3d20)+_0x6021a7(0x259):_0x30fcbc;}function buildCliArtifactPath(_0x209009,_0x37d49d){const _0x25c4fe=_0x1e08,_0x495bbd={'IICUH':function(_0x57ca56,_0x1ff8a4,_0x1cdb45){return _0x57ca56(_0x1ff8a4,_0x1cdb45);}};return _0x495bbd[_0x25c4fe(0x1eb)](join,_0x209009,_0x37d49d);}function toStepDisplayName(_0x503e96){const _0xa3373e=_0x1e08,_0x4a4d32={'cKdjx':function(_0x5a2bd7,_0x32865a){return _0x5a2bd7(_0x32865a);}},_0x21ddf9=basename(_0x503e96)[_0xa3373e(0x1e3)](/\.(?:png|ya?ml)$/i,'')[_0xa3373e(0x1e3)](/^key_/i,'')['replace'](/^\d+_/,'')[_0xa3373e(0x1e3)](/-/g,'\x20');return{'name':_0x21ddf9,'isKeyStep':/^key_/i['test'](_0x4a4d32[_0xa3373e(0x227)](basename,_0x503e96))};}function extractShellValue(_0x3ca31f){if(!_0x3ca31f)return null;return _0x3ca31f[0x1]??_0x3ca31f[0x2]??_0x3ca31f[0x3]??null;}function extractFilenameOption(_0x2ea097){const _0x3e4615=_0x1e08;return extractShellValue(_0x2ea097[_0x3e4615(0x228)](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x13e1dc,_0x27c346){const _0x4883f1=_0x1e08,_0x3ceac7={'YFsbQ':function(_0x5b47c7,_0x1f80f5){return _0x5b47c7(_0x1f80f5);}},_0x4010ff=_0x27c346['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');return _0x3ceac7['YFsbQ'](extractShellValue,_0x13e1dc['match'](new RegExp(_0x4883f1(0x256)+_0x4010ff+_0x4883f1(0x1ef))));}function formatCommandTarget(_0x584615){const _0xb225b2=_0x1e08;if(!_0x584615)return _0xb225b2(0x1da);if(/^e\d+$/i['test'](_0x584615))return _0xb225b2(0x1db)+_0x584615;return JSON[_0xb225b2(0x204)](truncatePreview(_0x584615,0x78));}function formatPlaywrightCliLog(_0x504db7,_0x53ae76){const _0x2ea5af=_0x1e08,_0xbd68eb={'iFCXd':'open\x20browser','sFGoT':'tracing-stop','QPeyF':_0x2ea5af(0x248),'TzDgj':function(_0x1fe3cb,_0x1d02ab){return _0x1fe3cb(_0x1d02ab);},'YZWIq':_0x2ea5af(0x205),'sFBRj':'capture\x20screenshot','twCAc':function(_0x2eb735,_0x5e2f14){return _0x2eb735(_0x5e2f14);},'gHYdi':function(_0x75dbee,_0x5d6cd4,_0x15ddfc){return _0x75dbee(_0x5d6cd4,_0x15ddfc);},'iqdRH':'press','FEWJA':function(_0x24ac16,_0x2c7442,_0x3e9f61){return _0x24ac16(_0x2c7442,_0x3e9f61);},'nDNAh':'tab-new','ikQbk':_0x2ea5af(0x231),'FNDCb':'select\x20tab'};switch(_0x53ae76){case'open':{const _0x591887=extractFirstCommandArgument(_0x504db7,_0x53ae76);return _0x591887?'open\x20'+_0x591887:_0xbd68eb['iFCXd'];}case'tracing-start':return'start\x20tracing';case _0xbd68eb[_0x2ea5af(0x233)]:return _0x2ea5af(0x1d6);case'video-start':return _0x2ea5af(0x258);case'video-stop':return'stop\x20video\x20recording';case _0xbd68eb['QPeyF']:{const _0xc303e7=_0xbd68eb[_0x2ea5af(0x214)](extractFilenameOption,_0x504db7);if(!_0xc303e7)return _0xbd68eb['YZWIq'];const {name:_0x172131}=toStepDisplayName(_0xc303e7);return'capture\x20snapshot\x20`'+_0x172131+'`';}case _0x2ea5af(0x202):{const _0x476da0=_0xbd68eb[_0x2ea5af(0x214)](extractFilenameOption,_0x504db7);if(!_0x476da0)return _0xbd68eb['sFBRj'];const {name:_0x3ae87d,isKeyStep:_0x3db849}=_0xbd68eb[_0x2ea5af(0x225)](toStepDisplayName,_0x476da0);return _0x3db849?_0x2ea5af(0x238)+_0x3ae87d+'`':_0x2ea5af(0x20b)+_0x3ae87d+'`';}case _0x2ea5af(0x207):return'click\x20'+formatCommandTarget(extractFirstCommandArgument(_0x504db7,_0x53ae76));case'check':return _0x2ea5af(0x257)+formatCommandTarget(_0xbd68eb[_0x2ea5af(0x208)](extractFirstCommandArgument,_0x504db7,_0x53ae76));case'fill':return'fill\x20'+formatCommandTarget(_0xbd68eb['gHYdi'](extractFirstCommandArgument,_0x504db7,_0x53ae76));case _0xbd68eb[_0x2ea5af(0x1f2)]:return _0x2ea5af(0x1f0)+formatCommandTarget(_0xbd68eb[_0x2ea5af(0x22a)](extractFirstCommandArgument,_0x504db7,_0x53ae76));case'run-code':return _0x2ea5af(0x21f);case _0xbd68eb[_0x2ea5af(0x1e1)]:{const _0x3d5a86=extractFirstCommandArgument(_0x504db7,_0x53ae76);return _0x3d5a86?'open\x20new\x20tab\x20'+_0x3d5a86:_0xbd68eb['ikQbk'];}case'tab-select':{const _0x3ba04a=extractFirstCommandArgument(_0x504db7,_0x53ae76);return _0x3ba04a?'select\x20tab\x20'+_0x3ba04a:_0xbd68eb[_0x2ea5af(0x1f9)];}default:return _0x53ae76;}}function extractPlaywrightCliToolDescription(_0xd59549){const _0x174965=_0x1e08,_0x315364={'vgwPI':function(_0x39ac4a,_0x575b0b){return _0x39ac4a!==_0x575b0b;},'obHOK':function(_0x182acf,_0x3417ed){return _0x182acf>_0x3417ed;}},_0xb0fc5a=_0xd59549['description'];if(_0x315364[_0x174965(0x206)](typeof _0xb0fc5a,_0x174965(0x24a)))return null;const _0x2a7b41=_0xb0fc5a[_0x174965(0x23f)]()['replace'](/\s+/g,'\x20');return _0x315364['obHOK'](_0x2a7b41[_0x174965(0x23d)],0x0)?_0x2a7b41:null;}export function formatPlaywrightCliConsoleLogMessage(_0x281293,_0x534d81,_0x46c06e){const _0xa5d24c=_0x1e08,_0x1a4583={'ASjyw':function(_0x45e9f8,_0x1456a5,_0xb9670e){return _0x45e9f8(_0x1456a5,_0xb9670e);}},_0x24b9c3=_0x1a4583[_0xa5d24c(0x24c)](formatPlaywrightCliLog,_0x534d81,_0x46c06e),_0x3efb8f=extractPlaywrightCliToolDescription(_0x281293);if(!_0x3efb8f)return _0xa5d24c(0x1ea)+_0x24b9c3;if(process[_0xa5d24c(0x21a)][_0xa5d24c(0x1e2)])return'[ranger-verification-agent]\x20'+_0x3efb8f+'\x20('+_0x24b9c3+')';return _0xa5d24c(0x1f4)+_0x3efb8f;}export function buildVerifyFeatureCliDebugPrompt(_0x146354,_0x485af3){const _0x510591=_0x1e08,_0x3f6c02={'KZSXU':_0x510591(0x1e7),'LJHsa':_0x510591(0x237),'bSBwz':function(_0x5cc083,_0x34d00e,_0x3f294e){return _0x5cc083(_0x34d00e,_0x3f294e);},'MnKvb':'03_learn-more.png','ZPBoy':function(_0x5076a6,_0x4505b6){return _0x5076a6(_0x4505b6);}},_0x3bc421=buildCliArtifactPath(_0x485af3,_0x3f6c02[_0x510591(0x209)]),_0x1f85c8=buildCliArtifactPath(_0x485af3,_0x3f6c02['LJHsa']),_0x7f646c=_0x3f6c02[_0x510591(0x215)](buildCliArtifactPath,_0x485af3,'02_learn-more.yml'),_0x2929e6=_0x3f6c02[_0x510591(0x215)](buildCliArtifactPath,_0x485af3,_0x3f6c02['MnKvb']),_0x233911=_0x3f6c02[_0x510591(0x24f)](quoteShellArg,_0x3bc421),_0x467b5b=quoteShellArg(_0x1f85c8),_0x8972ff=quoteShellArg(_0x7f646c),_0x55db02=_0x3f6c02[_0x510591(0x24f)](quoteShellArg,_0x2929e6);return _0x510591(0x1ee)+_0x146354+'\x0a\x0a1.\x20Run\x20`'+_0x146354+_0x510591(0x1df)+_0x146354+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x146354+_0x510591(0x22f)+_0x485af3+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x146354+'\x20snapshot\x20--filename\x20'+_0x233911+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x146354+'\x20screenshot\x20--filename\x20'+_0x467b5b+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x146354+_0x510591(0x22c)+_0x8972ff+'`\x0a9.\x20Run\x20`'+_0x146354+'\x20screenshot\x20--filename\x20'+_0x55db02+_0x510591(0x1dd);}export function buildVerifyFeatureCliPrompt(_0x36eca0){const _0x1cb489=_0x1e08,_0x365dad={'tmWBJ':_0x1cb489(0x245),'IzRjb':_0x1cb489(0x220),'fhAPh':_0x1cb489(0x1ec),'dnVUH':'element','NLheP':function(_0xce214d,_0xcb0488,_0x5b5c7e){return _0xce214d(_0xcb0488,_0x5b5c7e);},'BAmIV':_0x1cb489(0x1f3),'iAmWa':function(_0x58677b,_0x1280d5,_0x2e0b37){return _0x58677b(_0x1280d5,_0x2e0b37);},'dSRrR':_0x1cb489(0x239),'ahBSV':function(_0x399f6e,_0x5dbfa2){return _0x399f6e(_0x5dbfa2);},'sBGFy':function(_0x18b17d,_0x4b1e1a,_0x57c162){return _0x18b17d(_0x4b1e1a,_0x57c162);},'JZgzA':_0x1cb489(0x212),'jgelH':function(_0xff750e,_0x2c1043,_0x2b9e75){return _0xff750e(_0x2c1043,_0x2b9e75);}},{checklistItem:_0x5f1381,itemFeedback:_0x3fc93f,taskDescription:_0xe9ad2e,cliCommandPrefix:_0x774c9a,cliArtifactDir:_0x2f77dc,isCdpMode:_0x4c158d,url:_0x27dbdd,cdpEndpoint:_0x4a97f1,loginInstructions:_0x152f3b}=_0x36eca0,_0x56cf90=buildCliArtifactPath(_0x2f77dc,_0x1cb489(0x1fe)),_0x12fb0e=_0x365dad['NLheP'](buildCliArtifactPath,_0x2f77dc,_0x365dad[_0x1cb489(0x219)]),_0x49331a=_0x365dad['NLheP'](buildCliArtifactPath,_0x2f77dc,'key_03_success-state.png'),_0xb23e2b=_0x365dad['iAmWa'](buildCliArtifactPath,_0x2f77dc,_0x365dad['dSRrR']),_0x1317b8=quoteShellArg(_0x56cf90),_0x58f5f6=quoteShellArg(_0x12fb0e),_0x5819ee=_0x365dad[_0x1cb489(0x1de)](quoteShellArg,_0x49331a),_0x59fdd9=quoteShellArg(_0xb23e2b),_0x2fe5e1=_0x5f1381['notes']?_0x1cb489(0x1fb)+_0x5f1381[_0x1cb489(0x1fd)]:'';let _0x221868='';if(_0x3fc93f&&_0x3fc93f[_0x1cb489(0x201)]['length']>0x0){const _0x20f5c9=_0x3fc93f['unaddressedComments']['map'](_0x85b4c0=>{const _0x5a202d=_0x1cb489,_0x124be4=new Date(_0x85b4c0['createdAt'])[_0x5a202d(0x22b)]('en-US',{'month':_0x365dad['tmWBJ'],'day':_0x365dad[_0x5a202d(0x1dc)]}),_0xb56985=_0x85b4c0['authorName']||_0x85b4c0['authorEmail']||'Reviewer',_0x44315b=_0x85b4c0['domRef']?'\x20(on\x20element:\x20<'+(_0x85b4c0['domRef'][_0x5a202d(0x1d9)][_0x5a202d(0x23c)](_0x365dad[_0x5a202d(0x21e)])[_0x5a202d(0x23b)]()?.['split'](':')[0x0]||_0x365dad[_0x5a202d(0x244)])+'>\x20\x22'+(_0x85b4c0[_0x5a202d(0x203)]['textContent']||'')['slice'](0x0,0x32)+'\x22)':'';return _0x5a202d(0x1e0)+_0x85b4c0['id']+_0x5a202d(0x1d5)+_0xb56985+_0x5a202d(0x1e4)+_0x124be4+_0x5a202d(0x240)+_0x85b4c0['content']+'\x22'+_0x44315b;})[_0x1cb489(0x22e)]('\x0a');_0x221868='\x0a\x0a##\x20Reviewer\x20Feedback\x20to\x20Address\x0aThe\x20following\x20reviewer\x20comments\x20were\x20left\x20on\x20the\x20previous\x20version\x20of\x20this\x20item.\x0aVerify\x20that\x20each\x20concern\x20has\x20been\x20addressed\x20in\x20the\x20current\x20implementation.\x0aFor\x20each\x20comment\x20you\x20believe\x20has\x20been\x20addressed,\x20include\x20its\x20ID\x20(the\x20bracketed\x20value)\x20in\x20the\x20addressedCommentIds\x20array\x20in\x20your\x20output.\x0a\x0a'+_0x20f5c9;}const _0x1da03e=_0x3fc93f?.[_0x1cb489(0x243)]?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0x3fc93f[_0x1cb489(0x243)]:'',_0x2f25ba=_0x4c158d?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x4a97f1+'.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.':'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x27dbdd+'\x0a-\x20You\x20may\x20ONLY\x20navigate\x20to\x20paths\x20under\x20this\x20base\x20URL\x20(same\x20protocol,\x20host,\x20and\x20port)\x0a-\x20For\x20example,\x20if\x20the\x20base\x20URL\x20is\x20\x22http://localhost:3000\x22,\x20you\x20can\x20navigate\x20to\x20\x22http://localhost:3000/home\x22,\x20\x22http://localhost:3000/settings\x22,\x20etc.\x0a-\x20DO\x20NOT\x20navigate\x20to\x20any\x20different\x20domain,\x20host,\x20or\x20port\x20under\x20any\x20circumstances\x0a-\x20If\x20documentation\x20or\x20code\x20diffs\x20suggest\x20a\x20path\x20exists\x20(e.g.,\x20\x22/dashboard\x22),\x20you\x20may\x20navigate\x20to\x20that\x20path\x20ONLY\x20under\x20the\x20base\x20URL\x20above\x0a-\x20The\x20base\x20URL\x20above\x20is\x20the\x20ONLY\x20authorized\x20profile\x20for\x20this\x20verification',_0x312942=_0x27dbdd?quoteShellArg(_0x27dbdd):'',_0x2fe5f9=_0x4c158d?_0x1cb489(0x218)+_0x774c9a+_0x1cb489(0x250)+_0x774c9a+_0x1cb489(0x200)+_0x774c9a+_0x1cb489(0x255)+_0x2f77dc+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x774c9a+_0x1cb489(0x22c)+_0x1317b8+_0x1cb489(0x20a)+_0x774c9a+'\x20screenshot\x20--filename\x20'+_0x59fdd9+_0x1cb489(0x241)+_0x774c9a+_0x1cb489(0x1f5):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x774c9a+'\x20open\x20'+_0x312942+'`,\x20then\x20`'+_0x774c9a+_0x1cb489(0x200)+_0x774c9a+_0x1cb489(0x255)+_0x2f77dc+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x774c9a+'\x20snapshot\x20--filename\x20'+_0x1317b8+'`\x20and\x20read\x20the\x20snapshot\x20file\x20to\x20inspect\x20the\x20page.\x0a5.\x20**IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors\x20before\x20proceeding.**\x0a6.\x20Execute\x20the\x20task\x20step-by-step\x20with\x20Playwright\x20CLI\x20commands.\x0a7.\x20Use\x20`'+_0x774c9a+'\x20screenshot\x20--filename\x20'+_0x59fdd9+_0x1cb489(0x251)+_0x774c9a+'\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a9.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a10.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario',_0x16518e=_0x4c158d?'\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20taking\x20the\x20initial\x20snapshot,\x20IMMEDIATELY\x20check\x20for\x20blocking\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20Crash\x20or\x20error\x20dialogs\x20(\x22An\x20error\x20occurred\x22,\x20\x22Something\x20went\x20wrong\x22,\x20unhandled\x20exception\x20messages)\x0a-\x20Blank\x20or\x20empty\x20window\x20with\x20no\x20rendered\x20content\x0a-\x20Framework\x20error\x20boundaries\x20(React\x20error\x20page,\x20Electron\x20crash\x20reporter)\x0a-\x20Unresponsive\x20or\x20frozen\x20UI\x20(no\x20interactive\x20elements\x20in\x20snapshot)\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22App\x20crashed\x20—\x20error\x20dialog\x20visible\x20on\x20launch\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20type:\x20\x22APP_ERROR\x22\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.':'\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20step\x202\x20(taking\x20initial\x20snapshot),\x20IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20HTTP\x20404:\x20\x22404\x22,\x20\x22Not\x20Found\x22,\x20\x22Page\x20not\x20found\x22,\x20\x22does\x20not\x20exist\x22\x0a-\x20HTTP\x20500:\x20\x22500\x22,\x20\x22Internal\x20Server\x20Error\x22,\x20\x22Server\x20Error\x22,\x20\x22Something\x20went\x20wrong\x22\x0a-\x20HTTP\x20400:\x20\x22400\x22,\x20\x22Bad\x20Request\x22,\x20\x22Invalid\x20request\x22\x0a\x0a**Also\x20check\x20for:**\x0a-\x20Framework\x20error\x20pages\x20(Next.js\x20error\x20boundary,\x20React\x20error\x20page,\x20\x22Application\x20error\x22)\x0a-\x20Completely\x20blank/empty\x20pages\x20with\x20no\x20content\x0a-\x20\x22Cannot\x20GET\x20/path\x22\x20messages\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22HTTP\x20404\x20-\x20Page\x20not\x20found\x20at\x20/dashboard\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20appropriate\x20type\x20(HTTP_404,\x20HTTP_500,\x20HTTP_400,\x20or\x20NAVIGATION_ERROR)\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.',_0x3ab943=_0x152f3b?_0x1cb489(0x1e9)+_0x152f3b+_0x1cb489(0x1ed):'';return'You\x20are\x20a\x20Feature\x20Review\x20Verifier.\x20Your\x20job\x20is\x20to\x20verify\x20a\x20scenario\x20by\x20executing\x20a\x20UI\x20flow\x20and\x20evaluating\x20whether\x20it\x20adequately\x20completes\x20the\x20scenario.\x0a\x0a##\x20Scenario\x20to\x20Verify\x0a'+_0x5f1381[_0x1cb489(0x1ff)]+_0x2fe5e1+_0x221868+_0x1da03e+_0x1cb489(0x222)+_0xe9ad2e+'\x0a\x0a'+_0x2f25ba+_0x3ab943+'\x0a\x0a'+_0x2fe5f9+_0x1cb489(0x210)+_0x774c9a+'`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`'+_0x2f77dc+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x58f5f6+'`\x20writes\x20a\x20YAML\x20snapshot\x20you\x20can\x20read\x20for\x20element\x20refs\x0a-\x20`click\x20<ref>`,\x20`fill\x20<ref>\x20\x22text\x22`,\x20`check\x20<ref>`,\x20`press\x20Enter`\x0a-\x20`tab-list`,\x20`tab-select\x20<index>`,\x20`tab-new\x20<url>`\x0a-\x20`screenshot\x20--filename\x20'+_0x5819ee+'`\x0a-\x20`run-code\x20\x22await\x20page.waitForTimeout(1000)\x22`\x20for\x20waits\x20or\x20small\x20custom\x20checks\x0a\x0a##\x20Screenshot\x20Guidelines\x20-\x20IMPORTANT\x0aTake\x20screenshots\x20throughout\x20the\x20verification\x20flow\x20so\x20a\x20human\x20can\x20review\x20it\x20for\x20completeness.\x20Screenshots\x20are\x20your\x20evidence\x20trail.\x0a\x0a**When\x20to\x20take\x20screenshots\x20(use\x20Playwright\x20CLI\x20screenshot):**\x0a-\x20After\x20the\x20initial\x20snapshot\x20(capture\x20starting\x20state)\x0a-\x20Before\x20and\x20after\x20clicking\x20buttons\x20or\x20submitting\x20forms\x0a-\x20When\x20important\x20UI\x20elements\x20appear\x20(modals,\x20notifications,\x20loading\x20states)\x0a-\x20After\x20navigating\x20to\x20different\x20views\x20or\x20pages\x0a-\x20When\x20verifying\x20specific\x20elements\x20exist\x0a-\x20At\x20the\x20final\x20state\x20showing\x20the\x20completed\x20action\x0a\x0a**Screenshot\x20naming:**\x0a-\x20Use\x20descriptive\x20filenames\x20under\x20`'+_0x2f77dc+'`:\x20\x22'+_0xb23e2b+_0x1cb489(0x1f7)+_0x365dad['sBGFy'](buildCliArtifactPath,_0x2f77dc,_0x365dad['JZgzA'])+_0x1cb489(0x1f7)+_0x365dad['jgelH'](buildCliArtifactPath,_0x2f77dc,_0x1cb489(0x236))+_0x1cb489(0x235)+buildCliArtifactPath(_0x2f77dc,'key_04_success-state.png')+'\x22\x0a-\x20The\x20\x22key_\x22\x20prefix\x20marks\x20screenshots\x20as\x20high-priority\x20evidence\x20for\x20human\x20reviewers\x0a\x0a**Aim\x20for\x203-6\x20screenshots\x20per\x20verification**\x20to\x20document\x20the\x20complete\x20flow.\x20Mark\x201-2\x20of\x20the\x20most\x20important\x20ones\x20with\x20the\x20\x22key_\x22\x20prefix.\x0a'+_0x16518e+_0x1cb489(0x1f6);}export function summarizeVerifyFeatureCliCommandAvailability(_0x4cbde0){const _0x36b6a2=_0x1e08,_0x1c49c7={'uDNZy':function(_0x42e297,_0x270407){return _0x42e297===_0x270407;}},_0x86b07a=[..._0x4cbde0['keys']()]['sort']();let _0x20a301=0x0;for(const _0x57130d of _0x4cbde0['values']()){_0x20a301+=_0x57130d;}return{'cliCommandCount':_0x20a301,'cliCommandsSeen':_0x86b07a,'noCliCommandsCalled':_0x1c49c7[_0x36b6a2(0x1e8)](_0x20a301,0x0)};}export function createVerifyFeatureCliHooks(_0x183793){const _0x2848b6=_0x1e08,_0x239eab={'VopSe':_0x2848b6(0x247),'VGmkw':function(_0x3969e2,_0x46c845){return _0x3969e2!==_0x46c845;},'oystI':function(_0x1749ad,_0x1c91db){return _0x1749ad(_0x1c91db);},'sDWgS':_0x2848b6(0x20e),'PzEQq':'playwright-cli','szGlt':function(_0x66910c,_0x7e914a){return _0x66910c(_0x7e914a);},'ePPhV':'PostToolUseFailure','EyNVA':_0x2848b6(0x20d),'dhVio':_0x2848b6(0x23a)},_0x1015af=new Map(),_0x1906fa=async _0x44e7a5=>{const _0x1a7a6b=_0x2848b6;if(_0x44e7a5[_0x1a7a6b(0x232)]!==_0x239eab['VopSe'])return{};const _0x6123a=_0x44e7a5;if(_0x239eab[_0x1a7a6b(0x1d7)](_0x6123a['tool_name'],'Bash'))return{};const _0x52219e=_0x6123a['tool_input'],_0x3c3460=_0x239eab['oystI'](extractBashCommand,_0x52219e);if(!_0x3c3460)return{};const _0x80a7ca=_0x239eab[_0x1a7a6b(0x1d8)](parsePlaywrightCliCommand,_0x3c3460);if(!_0x80a7ca)return{};return _0x1015af[_0x1a7a6b(0x20f)](_0x80a7ca,(_0x1015af['get'](_0x80a7ca)||0x0)+0x1),_0x183793[_0x1a7a6b(0x216)](_0x1a7a6b(0x20e),{'transport':'playwright-cli','toolName':_0x80a7ca}),_0x183793['trackPhaseEnd'](_0x239eab[_0x1a7a6b(0x234)],{'transport':_0x239eab[_0x1a7a6b(0x23e)],'toolName':_0x80a7ca,'bashCommandPreview':_0x239eab['szGlt'](truncatePreview,_0x3c3460)}),_0x239eab['VGmkw'](_0x80a7ca,'snapshot')&&console[_0x1a7a6b(0x21c)](formatPlaywrightCliConsoleLogMessage(_0x52219e,_0x3c3460,_0x80a7ca)),{};},_0x42d996=async _0x286a4b=>{const _0x50ed60=_0x2848b6;if(_0x286a4b['hook_event_name']!==_0x239eab[_0x50ed60(0x253)])return{};const _0x55392c=_0x286a4b;if(_0x55392c['tool_name']!==_0x239eab['EyNVA'])return{};return await _0x183793['trackPhaseError'](_0x239eab['dhVio'],_0x55392c['error'],{'transport':_0x239eab['PzEQq'],'toolName':_0x239eab[_0x50ed60(0x252)]}),{};};return{'postToolUseHook':_0x1906fa,'postToolUseFailureHook':_0x42d996,'commandCounts':_0x1015af};}function _0x1e08(_0x293d4c,_0x21afe3){_0x293d4c=_0x293d4c-0x1d5;const _0x216da3=_0x216d();let _0x1e081e=_0x216da3[_0x293d4c];return _0x1e081e;}async function runPlaywrightCliLifecycleCommand(_0x223e1f){const _0x4097c4=_0x1e08,_0x41c576={'OIYRH':function(_0x1e8d70,_0x3bbffa){return _0x1e8d70??_0x3bbffa;},'cDwZO':function(_0x19dbb,_0x3c36f2,_0x13d67d){return _0x19dbb(_0x3c36f2,_0x13d67d);}},{sessionId:_0x490f17,configPath:_0x4c9edb,commandArgs:_0x450984,env:_0x423d1e,telemetry:_0x54f9a7,phase:_0x52487f,metadata:_0x26ba2c,timeoutMs:_0x44b4e2}=_0x223e1f;_0x54f9a7['trackPhaseStart'](_0x52487f,_0x26ba2c);try{const _0xb73b60=await runPlaywrightCliCommand({'sessionId':_0x490f17,'configPath':_0x4c9edb,'commandArgs':_0x450984,'cwd':process['cwd'](),'env':_0x423d1e,'timeoutMs':_0x41c576[_0x4097c4(0x221)](_0x44b4e2,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x54f9a7[_0x4097c4(0x213)](_0x52487f,{..._0x26ba2c,'subcommand':_0xb73b60[_0x4097c4(0x24e)][_0x4097c4(0x1fc)],'stdoutPreview':truncatePreview(_0xb73b60['stdout'],0x7d0),'stderrPreview':_0x41c576['cDwZO'](truncatePreview,_0xb73b60['stderr'],0x7d0)});}catch(_0x53b314){await _0x54f9a7[_0x4097c4(0x1e6)](_0x52487f,_0x53b314,_0x26ba2c);throw _0x53b314;}}export async function finalizeVerifyFeatureCliSession(_0x11211b){const _0x576f4b=_0x1e08,_0x4bcb1f={'TwuEi':_0x576f4b(0x246),'kjfMw':'session-recording.webm'},{telemetry:_0x1418e3,sessionId:_0x20a06f,configPath:_0xc980bd,cliArtifactDir:_0x22a2ab,env:_0x391afc,transportMetadata:_0x3645ae}=_0x11211b,_0x349f30=[{'phase':'playwright_cli_tracing_stop','commandArgs':[_0x4bcb1f['TwuEi']]},{'phase':'playwright_cli_video_stop','commandArgs':['video-stop',_0x576f4b(0x24b)+buildCliArtifactPath(_0x22a2ab,_0x4bcb1f[_0x576f4b(0x217)])]},{'phase':_0x576f4b(0x20c),'commandArgs':['close']}];for(const _0x575738 of _0x349f30){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x20a06f,'configPath':_0xc980bd,'commandArgs':[..._0x575738[_0x576f4b(0x224)]],'env':_0x391afc,'telemetry':_0x1418e3,'phase':_0x575738[_0x576f4b(0x1f8)],'metadata':_0x3645ae});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x55775d){const _0x34844c=_0x1e08,_0x53ff10={'ytWkN':_0x34844c(0x21b)},_0x32f750=[_0x34844c(0x21d),_0x53ff10['ytWkN']];for(const _0x31f8a6 of _0x32f750){const _0x43b887=join(_0x55775d,_0x31f8a6);try{return{'buffer':await readFile(_0x43b887),'source':_0x43b887};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x180979){const _0x486ccc=_0x1e08,_0xf34b17={'cabIv':function(_0x313e9b,_0x2aa01a,_0x263a91){return _0x313e9b(_0x2aa01a,_0x263a91);},'IUIqO':function(_0x52a59a,_0x350fff){return _0x52a59a(_0x350fff);},'ZNzwj':function(_0x55225b,_0x98ba8){return _0x55225b+_0x98ba8;},'CTfIu':function(_0x295c2f,_0x2754dc){return _0x295c2f===_0x2754dc;}},{cwd:_0x34b79f,cliArtifactDir:_0x396cac,startTime:_0x1ebba2}=_0x180979,_0x1f5529=[];await _0xf34b17['cabIv'](mkdir,_0x396cac,{'recursive':!![]});const _0x1bc437=await _0xf34b17[_0x486ccc(0x230)](readdir,_0x34b79f,{'withFileTypes':!![]});for(const _0x41d72f of _0x1bc437){if(!_0x41d72f['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x41d72f['name']))continue;const _0x1fbe8a=join(_0x34b79f,_0x41d72f['name']),_0xf8fbfe=await _0xf34b17[_0x486ccc(0x226)](stat,_0x1fbe8a);if(_0xf34b17['ZNzwj'](_0xf8fbfe['mtimeMs'],0x7d0)<_0x1ebba2)continue;const _0x12c1c5=_0xf34b17['cabIv'](buildCliArtifactPath,_0x396cac,_0x41d72f[_0x486ccc(0x254)]);if(_0xf34b17[_0x486ccc(0x249)](_0x1fbe8a,_0x12c1c5))continue;await rename(_0x1fbe8a,_0x12c1c5),_0x1f5529['push'](_0x41d72f['name']);}return _0x1f5529['sort']();}
|
|
1
|
+
function _0x169a(_0x5283ed,_0x43d610){_0x5283ed=_0x5283ed-0xb3;const _0x393726=_0x3937();let _0x169a0d=_0x393726[_0x5283ed];return _0x169a0d;}(function(_0x3993ab,_0x583861){const _0x5d3237=_0x169a,_0x3d0bba=_0x3993ab();while(!![]){try{const _0x2cc7aa=-parseInt(_0x5d3237(0xd5))/0x1+-parseInt(_0x5d3237(0x10a))/0x2+-parseInt(_0x5d3237(0xfb))/0x3*(parseInt(_0x5d3237(0x113))/0x4)+-parseInt(_0x5d3237(0xc9))/0x5*(parseInt(_0x5d3237(0x109))/0x6)+parseInt(_0x5d3237(0x11b))/0x7+-parseInt(_0x5d3237(0xd4))/0x8*(parseInt(_0x5d3237(0xcf))/0x9)+parseInt(_0x5d3237(0xcd))/0xa*(parseInt(_0x5d3237(0x10b))/0xb);if(_0x2cc7aa===_0x583861)break;else _0x3d0bba['push'](_0x3d0bba['shift']());}catch(_0x180848){_0x3d0bba['push'](_0x3d0bba['shift']());}}}(_0x3937,0xc1ded));import{mkdir,readFile,readdir,rename,stat}from'fs/promises';import{basename,join}from'path';import{extractBashCommand,parsePlaywrightCliCommand,quoteShellArg,runPlaywrightCliCommand}from'./utils/playwrightCli.js';const PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS=0xea60,PLAYWRIGHT_CLI_PREVIEW_LIMIT=0xf0,VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN=/^(?:\d{2}_.+\.(?:png|ya?ml)|key_.+\.png|session-recording(?:-\d+)?\.webm|trace(?:\.trace)?(?:-\d+)?\.zip|current_snap\.ya?ml)$/i;function truncatePreview(_0x54c1ff,_0xcb85bb=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x2db0af=_0x169a,_0x47b17e={'hJDwd':function(_0xcb2c9,_0x437db9){return _0xcb2c9>_0x437db9;},'wsSvz':'...'};return _0x47b17e['hJDwd'](_0x54c1ff[_0x2db0af(0x13c)],_0xcb85bb)?_0x54c1ff['slice'](0x0,_0xcb85bb)+_0x47b17e[_0x2db0af(0x129)]:_0x54c1ff;}function buildCliArtifactPath(_0x3619f7,_0x26a63e){return join(_0x3619f7,_0x26a63e);}function toStepDisplayName(_0x4131fd){const _0x234ae8=_0x169a,_0x56a412={'AYWgs':function(_0x2eb6c4,_0x26ea4a){return _0x2eb6c4(_0x26ea4a);}},_0x3485ee=_0x56a412[_0x234ae8(0xde)](basename,_0x4131fd)[_0x234ae8(0x11c)](/\.(?:png|ya?ml)$/i,'')[_0x234ae8(0x11c)](/^key_/i,'')[_0x234ae8(0x11c)](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x3485ee,'isKeyStep':/^key_/i['test'](basename(_0x4131fd))};}function extractShellValue(_0x5c39f5){if(!_0x5c39f5)return null;return _0x5c39f5[0x1]??_0x5c39f5[0x2]??_0x5c39f5[0x3]??null;}function extractFilenameOption(_0x357da8){const _0x24dd08=_0x169a;return extractShellValue(_0x357da8[_0x24dd08(0x13e)](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x5f15b3,_0x551c7){const _0x5a74c4=_0x169a,_0x26f7ac={'qwdvu':function(_0x37f1bc,_0x444b1f){return _0x37f1bc(_0x444b1f);}},_0x11603c=_0x551c7[_0x5a74c4(0x11c)](/[.*+?^${}()|[\]\\]/g,_0x5a74c4(0x12a));return _0x26f7ac[_0x5a74c4(0x10c)](extractShellValue,_0x5f15b3[_0x5a74c4(0x13e)](new RegExp(_0x5a74c4(0x102)+_0x11603c+_0x5a74c4(0x127))));}function formatCommandTarget(_0x329aef){const _0xaf0bdb=_0x169a,_0x56d1bf={'WNvhO':_0xaf0bdb(0x135),'uJXmo':function(_0x10ac64,_0x79c572,_0x45607a){return _0x10ac64(_0x79c572,_0x45607a);}};if(!_0x329aef)return _0x56d1bf['WNvhO'];if(/^e\d+$/i[_0xaf0bdb(0x124)](_0x329aef))return'ref\x20'+_0x329aef;return JSON['stringify'](_0x56d1bf[_0xaf0bdb(0x110)](truncatePreview,_0x329aef,0x78));}function _0x3937(){const _0x348027=['aTGSB','ccyaN','ARjru','AyCCu','yvhme','`\x20to\x20inspect\x20the\x20current\x20app\x20state.\x0a5.\x20Read\x20snapshot\x20YAML\x20files\x20to\x20find\x20element\x20references\x20like\x20`e12`,\x20then\x20use\x20them\x20with\x20`click`,\x20`fill`,\x20`check`,\x20or\x20`select`.\x0a6.\x20Use\x20`','select\x20tab\x20','plgPk','start\x20tracing','run-code','[playwright-cli]\x20','xdjMW','tracing-start','`:\x20\x22','36835EiNfnd','sBfYM','\x0a\x0aAfter\x20completing\x20authentication,\x20proceed\x20with\x20the\x20verification\x20task\x20below.\x0aIf\x20authentication\x20fails,\x20return\x20immediately\x20with\x20evaluation\x20\x22blocked\x22\x20and\x20describe\x20the\x20auth\x20failure.','split','1390OaJuzt','`\x0a9.\x20Run\x20`','657gaJBLJ','playwright_cli_video_stop','authorEmail','close','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','64208yGOTLQ','1294855WpwqpP','\x0a\x0a1.\x20Run\x20`','Kndxc','PostToolUse','cjmod','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','ygXTF','GtIbG','VzZKl','AYWgs','njzLJ','numeric','push','authorName','\x20(on\x20element:\x20<','name','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','02_button-clicked.png','get','en-US','02_state.yml','zEGgt','01_initial-state.png','UqUjm','fill','trim','WOTWe','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','tool_input','\x22\x0a-\x20Number\x20prefixes\x20(01_,\x2002_,\x20etc.)\x20help\x20maintain\x20chronological\x20order\x0a-\x20For\x20KEY\x20MOMENTS\x20that\x20prove\x20the\x20scenario\x20is\x20complete,\x20prefix\x20with\x20\x22key_\x22:\x20\x22','qqcDO','\x20open`,\x20then\x20`','rXQHb','HlSDv','select\x20tab','press','6231OCnhmo','lGNsr','click','values','Bash','00_mozilla-homepage.yml','`\x20and\x20read\x20the\x20snapshot\x20file\x20to\x20inspect\x20the\x20page.\x0a5.\x20**IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors\x20before\x20proceeding.**\x0a6.\x20Execute\x20the\x20task\x20step-by-step\x20with\x20Playwright\x20CLI\x20commands.\x0a7.\x20Use\x20`','(?:^|\x5cs)','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','IAoAl','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','hDNAh','start\x20video\x20recording','tfSAC','804khUyHk','477732RLBWZV','294371wWiZiI','qwdvu','\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20taking\x20the\x20initial\x20snapshot,\x20IMMEDIATELY\x20check\x20for\x20blocking\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20Crash\x20or\x20error\x20dialogs\x20(\x22An\x20error\x20occurred\x22,\x20\x22Something\x20went\x20wrong\x22,\x20unhandled\x20exception\x20messages)\x0a-\x20Blank\x20or\x20empty\x20window\x20with\x20no\x20rendered\x20content\x0a-\x20Framework\x20error\x20boundaries\x20(React\x20error\x20page,\x20Electron\x20crash\x20reporter)\x0a-\x20Unresponsive\x20or\x20frozen\x20UI\x20(no\x20interactive\x20elements\x20in\x20snapshot)\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22App\x20crashed\x20—\x20error\x20dialog\x20visible\x20on\x20launch\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20type:\x20\x22APP_ERROR\x22\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.','Gpecn','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','uJXmo','open\x20','LtWYf','2476XoUoUX','video-start','XFFNi','canonicalFlow','run\x20custom\x20Playwright\x20code','toLocaleDateString','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','screenshot','10267418MrRged','replace','Reviewer','\x22,\x20\x22','jYzqR','XlYzx','\x20snapshot\x20--filename\x20','Ebrrb','capture\x20snapshot','test','hook_event_name','tracing-stop','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','trackPhaseError','wsSvz','\x5c$&','textContent','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','\x20screenshot\x20--filename\x20','[ranger-verification-agent]\x20','tab-new','open\x20new\x20tab\x20','short','CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20','notes','\x20tracing-start`,\x20then\x20`','target','slice','domRef','Yqjkv','pop','click\x20','eQpZm','length','capture\x20key\x20step\x20`','match','check','open\x20browser','isFile','01_mozilla-homepage.png','check\x20','stderr','\x20open\x20','key_04_success-state.png','keys','\x0a\x0a##\x20Task\x20to\x20Execute\x0a',']\x20**','03_learn-more.png','02_learn-more.yml','DEBUG','open','`\x0a-\x20`run-code\x20\x22await\x20page.waitForTimeout(1000)\x22`\x20for\x20waits\x20or\x20small\x20custom\x20checks\x0a\x0a##\x20Screenshot\x20Guidelines\x20-\x20IMPORTANT\x0aTake\x20screenshots\x20throughout\x20the\x20verification\x20flow\x20so\x20a\x20human\x20can\x20review\x20it\x20for\x20completeness.\x20Screenshots\x20are\x20your\x20evidence\x20trail.\x0a\x0a**When\x20to\x20take\x20screenshots\x20(use\x20Playwright\x20CLI\x20screenshot):**\x0a-\x20After\x20the\x20initial\x20snapshot\x20(capture\x20starting\x20state)\x0a-\x20Before\x20and\x20after\x20clicking\x20buttons\x20or\x20submitting\x20forms\x0a-\x20When\x20important\x20UI\x20elements\x20appear\x20(modals,\x20notifications,\x20loading\x20states)\x0a-\x20After\x20navigating\x20to\x20different\x20views\x20or\x20pages\x0a-\x20When\x20verifying\x20specific\x20elements\x20exist\x0a-\x20At\x20the\x20final\x20state\x20showing\x20the\x20completed\x20action\x0a\x0a**Screenshot\x20naming:**\x0a-\x20Use\x20descriptive\x20filenames\x20under\x20`'];_0x3937=function(){return _0x348027;};return _0x3937();}function formatPlaywrightCliLog(_0x440c4d,_0x33433d){const _0x415e36=_0x169a,_0x3103e0={'XlYzx':function(_0x2671c3,_0x5494d1,_0x2d9b7b){return _0x2671c3(_0x5494d1,_0x2d9b7b);},'XNySQ':_0x415e36(0x140),'JPSVw':_0x415e36(0x126),'Ccobd':'stop\x20tracing','XFFNi':_0x415e36(0x114),'TcGWA':'snapshot','hrjUQ':_0x415e36(0x11a),'UKSOH':function(_0x39db23,_0x2f3910){return _0x39db23(_0x2f3910);},'Gldtp':'capture\x20screenshot','Yqjkv':function(_0x275510,_0x5c1ec9){return _0x275510(_0x5c1ec9);},'Ebrrb':_0x415e36(0x13f),'ARjru':function(_0x475729,_0x4ba36e){return _0x475729(_0x4ba36e);},'Kndxc':_0x415e36(0xee),'cjmod':_0x415e36(0xfa),'Gpecn':'open\x20new\x20tab','nKzNT':'tab-select','AyCCu':function(_0x4df732,_0x462399,_0xde5762){return _0x4df732(_0x462399,_0xde5762);}};switch(_0x33433d){case _0x415e36(0xb9):{const _0x15c2f5=_0x3103e0['XlYzx'](extractFirstCommandArgument,_0x440c4d,_0x33433d);return _0x15c2f5?_0x415e36(0x111)+_0x15c2f5:_0x3103e0['XNySQ'];}case _0x415e36(0xc7):return _0x415e36(0xc3);case _0x3103e0['JPSVw']:return _0x3103e0['Ccobd'];case _0x3103e0[_0x415e36(0x115)]:return _0x415e36(0x107);case'video-stop':return'stop\x20video\x20recording';case _0x3103e0['TcGWA']:{const _0x282290=extractFilenameOption(_0x440c4d);if(!_0x282290)return _0x415e36(0x123);const {name:_0x106738}=toStepDisplayName(_0x282290);return'capture\x20snapshot\x20`'+_0x106738+'`';}case _0x3103e0['hrjUQ']:{const _0x4c4b6e=_0x3103e0['UKSOH'](extractFilenameOption,_0x440c4d);if(!_0x4c4b6e)return _0x3103e0['Gldtp'];const {name:_0x39ab55,isKeyStep:_0x5c7b91}=toStepDisplayName(_0x4c4b6e);return _0x5c7b91?_0x415e36(0x13d)+_0x39ab55+'`':'capture\x20step\x20`'+_0x39ab55+'`';}case _0x415e36(0xfd):return _0x415e36(0x13a)+_0x3103e0[_0x415e36(0x138)](formatCommandTarget,_0x3103e0[_0x415e36(0x120)](extractFirstCommandArgument,_0x440c4d,_0x33433d));case _0x3103e0[_0x415e36(0x122)]:return _0x415e36(0x143)+_0x3103e0[_0x415e36(0xbd)](formatCommandTarget,extractFirstCommandArgument(_0x440c4d,_0x33433d));case _0x3103e0[_0x415e36(0xd7)]:return'fill\x20'+formatCommandTarget(extractFirstCommandArgument(_0x440c4d,_0x33433d));case _0x3103e0[_0x415e36(0xd9)]:return'press\x20'+formatCommandTarget(extractFirstCommandArgument(_0x440c4d,_0x33433d));case _0x415e36(0xc4):return _0x415e36(0x117);case _0x415e36(0x12f):{const _0x7cc170=extractFirstCommandArgument(_0x440c4d,_0x33433d);return _0x7cc170?_0x415e36(0x130)+_0x7cc170:_0x3103e0[_0x415e36(0x10e)];}case _0x3103e0['nKzNT']:{const _0x3df6c9=_0x3103e0[_0x415e36(0xbe)](extractFirstCommandArgument,_0x440c4d,_0x33433d);return _0x3df6c9?_0x415e36(0xc1)+_0x3df6c9:_0x415e36(0xf9);}default:return _0x33433d;}}function extractPlaywrightCliToolDescription(_0x131955){const _0x397082=_0x169a,_0x349e77={'tfSAC':'string'},_0x24ed0d=_0x131955['description'];if(typeof _0x24ed0d!==_0x349e77[_0x397082(0x108)])return null;const _0x4730e8=_0x24ed0d[_0x397082(0xef)]()['replace'](/\s+/g,'\x20');return _0x4730e8['length']>0x0?_0x4730e8:null;}export function formatPlaywrightCliConsoleLogMessage(_0x7d0736,_0x2eba37,_0x8337eb){const _0x3c6012=_0x169a,_0x41055b=formatPlaywrightCliLog(_0x2eba37,_0x8337eb),_0x2993d3=extractPlaywrightCliToolDescription(_0x7d0736);if(!_0x2993d3)return _0x3c6012(0xc5)+_0x41055b;if(process['env'][_0x3c6012(0xb8)])return _0x3c6012(0x12e)+_0x2993d3+'\x20('+_0x41055b+')';return _0x3c6012(0x12e)+_0x2993d3;}export function buildVerifyFeatureCliDebugPrompt(_0x1f8a85,_0x5de2c1){const _0x2458ce=_0x169a,_0x1054cb={'WOTWe':function(_0x23a677,_0x1eab6f,_0x5c381e){return _0x23a677(_0x1eab6f,_0x5c381e);},'sBfYM':function(_0x4e4741,_0xcf66b9,_0x3660a6){return _0x4e4741(_0xcf66b9,_0x3660a6);},'zEGgt':_0x2458ce(0x142),'ccyaN':_0x2458ce(0xb6),'AMNVX':function(_0x123ed8,_0x302e06){return _0x123ed8(_0x302e06);}},_0x158a1a=_0x1054cb['WOTWe'](buildCliArtifactPath,_0x5de2c1,_0x2458ce(0x100)),_0x4512f7=_0x1054cb[_0x2458ce(0xca)](buildCliArtifactPath,_0x5de2c1,_0x1054cb[_0x2458ce(0xeb)]),_0x4f9f53=_0x1054cb[_0x2458ce(0xf0)](buildCliArtifactPath,_0x5de2c1,_0x2458ce(0xb7)),_0x2ba003=_0x1054cb[_0x2458ce(0xca)](buildCliArtifactPath,_0x5de2c1,_0x1054cb[_0x2458ce(0xbc)]),_0x5c8a05=quoteShellArg(_0x158a1a),_0x1a1643=quoteShellArg(_0x4512f7),_0x4cfd4c=_0x1054cb['AMNVX'](quoteShellArg,_0x4f9f53),_0x4ea42b=quoteShellArg(_0x2ba003);return _0x2458ce(0xe5)+_0x1f8a85+_0x2458ce(0xd6)+_0x1f8a85+_0x2458ce(0x103)+_0x1f8a85+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x1f8a85+_0x2458ce(0x12c)+_0x5de2c1+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x1f8a85+_0x2458ce(0x121)+_0x5c8a05+_0x2458ce(0x119)+_0x1f8a85+_0x2458ce(0x12d)+_0x1a1643+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x1f8a85+_0x2458ce(0x121)+_0x4cfd4c+_0x2458ce(0xce)+_0x1f8a85+_0x2458ce(0x12d)+_0x4ea42b+_0x2458ce(0xf2);}export function buildVerifyFeatureCliPrompt(_0x3e008c){const _0x1e6ad5=_0x169a,_0x3692c1={'LtWYf':_0x1e6ad5(0x131),'TvRzn':_0x1e6ad5(0xe0),'GtIbG':_0x1e6ad5(0x11d),'VusVB':'\x20>\x20','IAoAl':function(_0x4a30a5,_0x37a203,_0x858eab){return _0x4a30a5(_0x37a203,_0x858eab);},'OYfIh':function(_0xd9be51,_0x40ba65,_0x510683){return _0xd9be51(_0x40ba65,_0x510683);},'plgPk':function(_0x1c1fe3,_0x357cf8){return _0x1c1fe3(_0x357cf8);},'CcklD':function(_0x3d0a05,_0x1546c9){return _0x3d0a05>_0x1546c9;},'eQpZm':function(_0x4466fb,_0x5e242c,_0x5ac8f4){return _0x4466fb(_0x5e242c,_0x5ac8f4);},'xdjMW':'03_result-visible.png'},{checklistItem:_0x34a102,itemFeedback:_0x53db80,taskDescription:_0x4e0db8,cliCommandPrefix:_0x9fc891,cliArtifactDir:_0x423b4d,isCdpMode:_0x3a817d,url:_0x3cc32f,cdpEndpoint:_0x13fe58,loginInstructions:_0x50531a}=_0x3e008c,_0x1e2e16=buildCliArtifactPath(_0x423b4d,'01_initial.yml'),_0x5badbf=buildCliArtifactPath(_0x423b4d,_0x1e6ad5(0xea)),_0x3f8665=_0x3692c1[_0x1e6ad5(0x104)](buildCliArtifactPath,_0x423b4d,'key_03_success-state.png'),_0x351254=_0x3692c1['OYfIh'](buildCliArtifactPath,_0x423b4d,_0x1e6ad5(0xec)),_0x438abd=_0x3692c1[_0x1e6ad5(0xc2)](quoteShellArg,_0x1e2e16),_0x59ee6d=quoteShellArg(_0x5badbf),_0x3e87b2=quoteShellArg(_0x3f8665),_0x5d05f5=_0x3692c1[_0x1e6ad5(0xc2)](quoteShellArg,_0x351254),_0x385f10=_0x34a102[_0x1e6ad5(0x133)]?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x34a102[_0x1e6ad5(0x133)]:'';let _0x4f188d='';if(_0x53db80&&_0x3692c1['CcklD'](_0x53db80['unaddressedComments'][_0x1e6ad5(0x13c)],0x0)){const _0xe61e48=_0x53db80['unaddressedComments']['map'](_0x26a08f=>{const _0x52af33=_0x1e6ad5,_0x4fc01a=new Date(_0x26a08f['createdAt'])[_0x52af33(0x118)](_0x52af33(0xe9),{'month':_0x3692c1[_0x52af33(0x112)],'day':_0x3692c1['TvRzn']}),_0x495309=_0x26a08f[_0x52af33(0xe2)]||_0x26a08f[_0x52af33(0xd1)]||_0x3692c1[_0x52af33(0xdc)],_0x4a8f2c=_0x26a08f[_0x52af33(0x137)]?_0x52af33(0xe3)+(_0x26a08f['domRef']['selector']['split'](_0x3692c1['VusVB'])[_0x52af33(0x139)]()?.[_0x52af33(0xcc)](':')[0x0]||'element')+'>\x20\x22'+(_0x26a08f[_0x52af33(0x137)][_0x52af33(0x12b)]||'')[_0x52af33(0x136)](0x0,0x32)+'\x22)':'';return'-\x20['+_0x26a08f['id']+_0x52af33(0xb5)+_0x495309+'**\x20('+_0x4fc01a+'):\x20\x22'+_0x26a08f['content']+'\x22'+_0x4a8f2c;})['join']('\x0a');_0x4f188d='\x0a\x0a##\x20Reviewer\x20Feedback\x20to\x20Address\x0aThe\x20following\x20reviewer\x20comments\x20were\x20left\x20on\x20the\x20previous\x20version\x20of\x20this\x20item.\x0aVerify\x20that\x20each\x20concern\x20has\x20been\x20addressed\x20in\x20the\x20current\x20implementation.\x0aFor\x20each\x20comment\x20you\x20believe\x20has\x20been\x20addressed,\x20include\x20its\x20ID\x20(the\x20bracketed\x20value)\x20in\x20the\x20addressedCommentIds\x20array\x20in\x20your\x20output.\x0a\x0a'+_0xe61e48;}const _0x3d4759=_0x53db80?.[_0x1e6ad5(0x116)]?_0x1e6ad5(0xd3)+_0x53db80['canonicalFlow']:'',_0xd3688d=_0x3a817d?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x13fe58+_0x1e6ad5(0xf1):_0x1e6ad5(0x132)+_0x3cc32f+'\x0a-\x20You\x20may\x20ONLY\x20navigate\x20to\x20paths\x20under\x20this\x20base\x20URL\x20(same\x20protocol,\x20host,\x20and\x20port)\x0a-\x20For\x20example,\x20if\x20the\x20base\x20URL\x20is\x20\x22http://localhost:3000\x22,\x20you\x20can\x20navigate\x20to\x20\x22http://localhost:3000/home\x22,\x20\x22http://localhost:3000/settings\x22,\x20etc.\x0a-\x20DO\x20NOT\x20navigate\x20to\x20any\x20different\x20domain,\x20host,\x20or\x20port\x20under\x20any\x20circumstances\x0a-\x20If\x20documentation\x20or\x20code\x20diffs\x20suggest\x20a\x20path\x20exists\x20(e.g.,\x20\x22/dashboard\x22),\x20you\x20may\x20navigate\x20to\x20that\x20path\x20ONLY\x20under\x20the\x20base\x20URL\x20above\x0a-\x20The\x20base\x20URL\x20above\x20is\x20the\x20ONLY\x20authorized\x20profile\x20for\x20this\x20verification',_0x71ab77=_0x3cc32f?quoteShellArg(_0x3cc32f):'',_0x196781=_0x3a817d?'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x9fc891+_0x1e6ad5(0xf6)+_0x9fc891+_0x1e6ad5(0x134)+_0x9fc891+_0x1e6ad5(0x105)+_0x423b4d+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x9fc891+_0x1e6ad5(0x121)+_0x438abd+_0x1e6ad5(0xc0)+_0x9fc891+_0x1e6ad5(0x12d)+_0x5d05f5+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x9fc891+'\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a7.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a8.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario':'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x9fc891+_0x1e6ad5(0x145)+_0x71ab77+'`,\x20then\x20`'+_0x9fc891+_0x1e6ad5(0x134)+_0x9fc891+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x423b4d+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x9fc891+_0x1e6ad5(0x121)+_0x438abd+_0x1e6ad5(0x101)+_0x9fc891+_0x1e6ad5(0x12d)+_0x5d05f5+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x9fc891+'\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a9.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a10.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario',_0x149d14=_0x3a817d?_0x1e6ad5(0x10d):'\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20step\x202\x20(taking\x20initial\x20snapshot),\x20IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20HTTP\x20404:\x20\x22404\x22,\x20\x22Not\x20Found\x22,\x20\x22Page\x20not\x20found\x22,\x20\x22does\x20not\x20exist\x22\x0a-\x20HTTP\x20500:\x20\x22500\x22,\x20\x22Internal\x20Server\x20Error\x22,\x20\x22Server\x20Error\x22,\x20\x22Something\x20went\x20wrong\x22\x0a-\x20HTTP\x20400:\x20\x22400\x22,\x20\x22Bad\x20Request\x22,\x20\x22Invalid\x20request\x22\x0a\x0a**Also\x20check\x20for:**\x0a-\x20Framework\x20error\x20pages\x20(Next.js\x20error\x20boundary,\x20React\x20error\x20page,\x20\x22Application\x20error\x22)\x0a-\x20Completely\x20blank/empty\x20pages\x20with\x20no\x20content\x0a-\x20\x22Cannot\x20GET\x20/path\x22\x20messages\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22HTTP\x20404\x20-\x20Page\x20not\x20found\x20at\x20/dashboard\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20appropriate\x20type\x20(HTTP_404,\x20HTTP_500,\x20HTTP_400,\x20or\x20NAVIGATION_ERROR)\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.',_0x4015e4=_0x50531a?_0x1e6ad5(0xda)+_0x50531a+_0x1e6ad5(0xcb):'';return'You\x20are\x20a\x20Feature\x20Review\x20Verifier.\x20Your\x20job\x20is\x20to\x20verify\x20a\x20scenario\x20by\x20executing\x20a\x20UI\x20flow\x20and\x20evaluating\x20whether\x20it\x20adequately\x20completes\x20the\x20scenario.\x0a\x0a##\x20Scenario\x20to\x20Verify\x0a'+_0x34a102['description']+_0x385f10+_0x4f188d+_0x3d4759+_0x1e6ad5(0xb4)+_0x4e0db8+'\x0a\x0a'+_0xd3688d+_0x4015e4+'\x0a\x0a'+_0x196781+_0x1e6ad5(0xe6)+_0x9fc891+_0x1e6ad5(0x10f)+_0x423b4d+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x59ee6d+'`\x20writes\x20a\x20YAML\x20snapshot\x20you\x20can\x20read\x20for\x20element\x20refs\x0a-\x20`click\x20<ref>`,\x20`fill\x20<ref>\x20\x22text\x22`,\x20`check\x20<ref>`,\x20`press\x20Enter`\x0a-\x20`tab-list`,\x20`tab-select\x20<index>`,\x20`tab-new\x20<url>`\x0a-\x20`screenshot\x20--filename\x20'+_0x3e87b2+_0x1e6ad5(0xba)+_0x423b4d+_0x1e6ad5(0xc8)+_0x351254+'\x22,\x20\x22'+_0x3692c1[_0x1e6ad5(0x104)](buildCliArtifactPath,_0x423b4d,_0x1e6ad5(0xe7))+_0x1e6ad5(0x11e)+_0x3692c1[_0x1e6ad5(0x13b)](buildCliArtifactPath,_0x423b4d,_0x3692c1[_0x1e6ad5(0xc6)])+_0x1e6ad5(0xf4)+_0x3692c1[_0x1e6ad5(0x104)](buildCliArtifactPath,_0x423b4d,_0x1e6ad5(0x146))+'\x22\x0a-\x20The\x20\x22key_\x22\x20prefix\x20marks\x20screenshots\x20as\x20high-priority\x20evidence\x20for\x20human\x20reviewers\x0a\x0a**Aim\x20for\x203-6\x20screenshots\x20per\x20verification**\x20to\x20document\x20the\x20complete\x20flow.\x20Mark\x201-2\x20of\x20the\x20most\x20important\x20ones\x20with\x20the\x20\x22key_\x22\x20prefix.\x0a'+_0x149d14+'\x0a##\x20Evaluation\x20Criteria\x0a-\x20VERIFIED:\x20The\x20task\x20completed\x20successfully\x20and\x20the\x20scenario\x20requirements\x20are\x20fully\x20met\x0a-\x20PARTIAL:\x20The\x20task\x20partially\x20completed\x20but\x20some\x20aspects\x20of\x20the\x20scenario\x20are\x20not\x20verified\x0a-\x20BLOCKED:\x20A\x20blocking\x20issue\x20(bug,\x20error,\x20missing\x20feature)\x20prevents\x20completion\x0a-\x20FAILED:\x20The\x20task\x20could\x20not\x20be\x20completed\x20due\x20to\x20errors\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format\x20with\x20your\x20evaluation.';}export function summarizeVerifyFeatureCliCommandAvailability(_0x5a4ab4){const _0x58408c=_0x169a,_0x391b87=[..._0x5a4ab4[_0x58408c(0xb3)]()]['sort']();let _0x38ac0a=0x0;for(const _0x5c405a of _0x5a4ab4[_0x58408c(0xfe)]()){_0x38ac0a+=_0x5c405a;}return{'cliCommandCount':_0x38ac0a,'cliCommandsSeen':_0x391b87,'noCliCommandsCalled':_0x38ac0a===0x0};}export function createVerifyFeatureCliHooks(_0x156654){const _0x37e850=_0x169a,_0x400630={'yvhme':_0x37e850(0xd8),'jYzqR':function(_0x362b94,_0x47be90){return _0x362b94!==_0x47be90;},'ygXTF':function(_0x114e7d,_0x5a9ce2){return _0x114e7d(_0x5a9ce2);},'qqcDO':'tool_call','rXQHb':'playwright-cli','jXJMq':function(_0x242937,_0x36bedf){return _0x242937(_0x36bedf);},'aTGSB':function(_0x4d9bb0,_0x5b8403,_0x3d4992,_0x30dc0b){return _0x4d9bb0(_0x5b8403,_0x3d4992,_0x30dc0b);},'lGNsr':'tool_failure','VzZKl':'Bash'},_0x29ab50=new Map(),_0x3a17a9=async _0x3036f9=>{const _0x49064f=_0x37e850;if(_0x3036f9[_0x49064f(0x125)]!==_0x400630[_0x49064f(0xbf)])return{};const _0x4d6369=_0x3036f9;if(_0x400630['jYzqR'](_0x4d6369['tool_name'],_0x49064f(0xff)))return{};const _0x1540c7=_0x4d6369[_0x49064f(0xf3)],_0x46cfa2=extractBashCommand(_0x1540c7);if(!_0x46cfa2)return{};const _0x4101f6=_0x400630[_0x49064f(0xdb)](parsePlaywrightCliCommand,_0x46cfa2);if(!_0x4101f6)return{};return _0x29ab50['set'](_0x4101f6,(_0x29ab50[_0x49064f(0xe8)](_0x4101f6)||0x0)+0x1),_0x156654['trackPhaseStart'](_0x400630[_0x49064f(0xf5)],{'transport':'playwright-cli','toolName':_0x4101f6}),_0x156654['trackPhaseEnd'](_0x400630[_0x49064f(0xf5)],{'transport':_0x400630[_0x49064f(0xf7)],'toolName':_0x4101f6,'bashCommandPreview':_0x400630['jXJMq'](truncatePreview,_0x46cfa2)}),_0x400630[_0x49064f(0x11f)](_0x4101f6,'snapshot')&&console['log'](_0x400630[_0x49064f(0xbb)](formatPlaywrightCliConsoleLogMessage,_0x1540c7,_0x46cfa2,_0x4101f6)),{};},_0x5c0b38=async _0x3d5e9e=>{const _0xc20c66=_0x37e850;if(_0x3d5e9e[_0xc20c66(0x125)]!=='PostToolUseFailure')return{};const _0x2e423c=_0x3d5e9e;if(_0x2e423c['tool_name']!==_0xc20c66(0xff))return{};return await _0x156654[_0xc20c66(0x128)](_0x400630[_0xc20c66(0xfc)],_0x2e423c['error'],{'transport':'playwright-cli','toolName':_0x400630[_0xc20c66(0xdd)]}),{};};return{'postToolUseHook':_0x3a17a9,'postToolUseFailureHook':_0x5c0b38,'commandCounts':_0x29ab50};}async function runPlaywrightCliLifecycleCommand(_0x4f8420){const _0x37e45b=_0x169a,_0x45b6e2={'njzLJ':function(_0x5d32b2,_0x45d153){return _0x5d32b2??_0x45d153;},'FjULk':function(_0x305673,_0xdb8a94,_0xb7a33e){return _0x305673(_0xdb8a94,_0xb7a33e);}},{sessionId:_0x29f357,configPath:_0x40f616,commandArgs:_0x3b65b9,env:_0x192e1a,telemetry:_0x1fe31c,phase:_0x29fb72,metadata:_0x1a8a07,timeoutMs:_0x4b6345}=_0x4f8420;_0x1fe31c['trackPhaseStart'](_0x29fb72,_0x1a8a07);try{const _0x4ec6cd=await runPlaywrightCliCommand({'sessionId':_0x29f357,'configPath':_0x40f616,'commandArgs':_0x3b65b9,'cwd':process['cwd'](),'env':_0x192e1a,'timeoutMs':_0x45b6e2[_0x37e45b(0xdf)](_0x4b6345,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x1fe31c['trackPhaseEnd'](_0x29fb72,{..._0x1a8a07,'subcommand':_0x4ec6cd['invocation']['subcommand'],'stdoutPreview':truncatePreview(_0x4ec6cd['stdout'],0x7d0),'stderrPreview':_0x45b6e2['FjULk'](truncatePreview,_0x4ec6cd[_0x37e45b(0x144)],0x7d0)});}catch(_0x279da0){await _0x1fe31c[_0x37e45b(0x128)](_0x29fb72,_0x279da0,_0x1a8a07);throw _0x279da0;}}export async function finalizeVerifyFeatureCliSession(_0x406048){const _0x479579=_0x169a,_0x4486a4={'suBqN':'playwright_cli_tracing_stop','SKlPu':_0x479579(0x126),'hDNAh':'video-stop','AgJZd':function(_0x1a9727,_0x15fa54,_0x540267){return _0x1a9727(_0x15fa54,_0x540267);},'ybTuL':'session-recording.webm','yWFMN':_0x479579(0xd2),'GrjqU':function(_0x48c455,_0xcef2b6){return _0x48c455(_0xcef2b6);}},{telemetry:_0x1adff3,sessionId:_0x34a7e3,configPath:_0x571967,cliArtifactDir:_0x7ee3fa,env:_0x2c4e81,transportMetadata:_0x32bf46}=_0x406048,_0x44a9b4=[{'phase':_0x4486a4['suBqN'],'commandArgs':[_0x4486a4['SKlPu']]},{'phase':_0x479579(0xd0),'commandArgs':[_0x4486a4[_0x479579(0x106)],'--filename='+_0x4486a4['AgJZd'](buildCliArtifactPath,_0x7ee3fa,_0x4486a4['ybTuL'])]},{'phase':'playwright_cli_close','commandArgs':[_0x4486a4['yWFMN']]}];for(const _0x277b96 of _0x44a9b4){try{await _0x4486a4['GrjqU'](runPlaywrightCliLifecycleCommand,{'sessionId':_0x34a7e3,'configPath':_0x571967,'commandArgs':[..._0x277b96['commandArgs']],'env':_0x2c4e81,'telemetry':_0x1adff3,'phase':_0x277b96['phase'],'metadata':_0x32bf46});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x3f84dc){const _0x41e559=_0x169a,_0x498471={'cFvIz':'trace.trace.zip','HlSDv':function(_0x476844,_0x1208cc,_0x5771c6){return _0x476844(_0x1208cc,_0x5771c6);},'ONYkt':function(_0x2b70e9,_0x10695b){return _0x2b70e9(_0x10695b);}},_0x7a9f2e=['trace.zip',_0x498471['cFvIz']];for(const _0x1b0d32 of _0x7a9f2e){const _0xd0445=_0x498471[_0x41e559(0xf8)](join,_0x3f84dc,_0x1b0d32);try{return{'buffer':await _0x498471['ONYkt'](readFile,_0xd0445),'source':_0xd0445};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x1f5d1f){const _0x3b80cb=_0x169a,_0x15e3c4={'aKJFV':function(_0x2d07fa,_0x2c8118,_0x34f7af){return _0x2d07fa(_0x2c8118,_0x34f7af);},'UqUjm':function(_0x224523,_0x4c1ace){return _0x224523(_0x4c1ace);},'Brsxi':function(_0xe9dd9b,_0x38f664){return _0xe9dd9b<_0x38f664;},'wtgxS':function(_0x5a4c5a,_0x4590b9){return _0x5a4c5a===_0x4590b9;}},{cwd:_0x3cb3bd,cliArtifactDir:_0x57ed50,startTime:_0x49d60c}=_0x1f5d1f,_0x5b4896=[];await _0x15e3c4['aKJFV'](mkdir,_0x57ed50,{'recursive':!![]});const _0x4151cd=await _0x15e3c4['aKJFV'](readdir,_0x3cb3bd,{'withFileTypes':!![]});for(const _0x4947d1 of _0x4151cd){if(!_0x4947d1[_0x3b80cb(0x141)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x4947d1[_0x3b80cb(0xe4)]))continue;const _0x459ac6=_0x15e3c4['aKJFV'](join,_0x3cb3bd,_0x4947d1['name']),_0x26b17e=await _0x15e3c4[_0x3b80cb(0xed)](stat,_0x459ac6);if(_0x15e3c4['Brsxi'](_0x26b17e['mtimeMs']+0x7d0,_0x49d60c))continue;const _0x40ed4e=buildCliArtifactPath(_0x57ed50,_0x4947d1[_0x3b80cb(0xe4)]);if(_0x15e3c4['wtgxS'](_0x459ac6,_0x40ed4e))continue;await rename(_0x459ac6,_0x40ed4e),_0x5b4896[_0x3b80cb(0xe1)](_0x4947d1['name']);}return _0x5b4896['sort']();}
|
|
@@ -7,12 +7,25 @@ description: "Ranger’s browser verification tooling that supplements a coding
|
|
|
7
7
|
|
|
8
8
|
Run Ranger commands using `ranger-cli <args>`.
|
|
9
9
|
|
|
10
|
-
**IMPORTANT: At the start of any session, run `ranger-cli update`
|
|
10
|
+
**IMPORTANT: At the start of any session, check that you have the latest CLI and skills. If you were installed from `@latest`, run `ranger-cli update`. If you are on a prerelease (e.g., `@alpha`, version contains `-alpha.`), do NOT run `ranger-cli update` — it will move you to `@latest` and off the prerelease track. Check with your team lead or re-install with `npm i -g @ranger-testing/ranger-cli@alpha` to stay current on that channel.**
|
|
11
11
|
|
|
12
12
|
If you are running in Claude Code, read and suggest the following claude-specific commands to the user: [claude.md](./claude.md).
|
|
13
13
|
|
|
14
14
|
Use Ranger when the work includes any UI or frontend component. Do not suggest Ranger for backend-only or infra-only changes unless the user asks.
|
|
15
15
|
|
|
16
|
+
## One-shot verification from user creds
|
|
17
|
+
|
|
18
|
+
When the user gives you credentials and a goal in a single message (e.g. "use `alice@example.com` / `hunter2` to log in and check the dashboard renders"), skip the create/setup ceremony and run verification directly:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
|
|
22
|
+
ranger-cli go --url <target-url> --notes '<the goal verbatim>'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
If a feature review is required and none is active, the CLI will create one automatically. Do **not** run `ranger-cli create` first unless the user explicitly asks for a structured feature review with multiple scenarios.
|
|
26
|
+
|
|
27
|
+
When credentials sit in a `.env` next to the user's repo (look for `RANGER_TEST_USERNAME` / `RANGER_TEST_PASSWORD` / `TARGET_URL`), source that file inline before running `go` instead of typing the values.
|
|
28
|
+
|
|
16
29
|
This skill covers three workflows for Ranger feature review tracking:
|
|
17
30
|
|
|
18
31
|
## Supported Workflows
|
|
@@ -232,9 +245,10 @@ When completing your work or ending the session, your final message to the user
|
|
|
232
245
|
|
|
233
246
|
If you encounter authentication issues:
|
|
234
247
|
|
|
235
|
-
1. **
|
|
236
|
-
2. **
|
|
237
|
-
3. **
|
|
248
|
+
1. **Log in with provided credentials**: Set `RANGER_TEST_USERNAME` and `RANGER_TEST_PASSWORD` and re-run `ranger-cli go ...`. The CLI uses those credentials to log in and reuses the same profile on subsequent runs.
|
|
249
|
+
2. **Check existing profiles**: Run `ranger-cli profile ls` to see all configured profiles.
|
|
250
|
+
3. **Pin a specific profile**: Use `ranger-cli profile use <profile-name>` (or pass `--profile <name>` / set `RANGER_PROFILE`).
|
|
251
|
+
4. **Refresh auth**: Ask the user to run `ranger-cli profile update <profile-name>` to re-capture authentication for a profile.
|
|
238
252
|
|
|
239
253
|
|
|
240
254
|
### Authentication Issues to Ranger
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Create a feature review when starting new work that doesn't have an existing feature review to resume.
|
|
4
4
|
|
|
5
|
+
## When NOT to use this
|
|
6
|
+
|
|
7
|
+
If the user just wants a quick browser check (e.g. "log in as X and confirm the dashboard renders"), skip this step. Run `ranger-cli go --url <target> --notes '<goal>'` directly — a feature review will be created automatically when one is needed. See the **One-shot verification from user creds** section in the parent `SKILL.md`.
|
|
8
|
+
|
|
9
|
+
Reach for `ranger-cli create` when the work is multi-scenario or you want to enumerate the user journeys up front for the reviewer.
|
|
10
|
+
|
|
5
11
|
## Basic Command
|
|
6
12
|
|
|
7
13
|
```bash
|
|
@@ -8,7 +8,27 @@ After implementing code for a scenario, verify it works in the browser. This cre
|
|
|
8
8
|
ranger-cli go --scenario <N> --notes "<what to verify>"
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
The URL is derived from your active profile's `baseUrl` setting.
|
|
11
|
+
The URL is derived from your active profile's `baseUrl` setting (or auto-materialized — see below).
|
|
12
|
+
|
|
13
|
+
## Profile resolution (no setup required)
|
|
14
|
+
|
|
15
|
+
The fastest path: when the user gives you a username + password (in chat or in a `.env`), set them inline and run `go`. The CLI handles the rest — no `profile add` step.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
|
|
19
|
+
ranger-cli go --url <target> --notes '<what to verify>'
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If `RANGER_TEST_USERNAME` already matches an existing cloud profile, the CLI just logs in as that user. If not, a new cloud profile keyed off that username is saved so the next run reuses it.
|
|
23
|
+
|
|
24
|
+
`go` resolves which profile to use in this order:
|
|
25
|
+
|
|
26
|
+
1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
|
|
27
|
+
2. The saved active profile (`ranger-cli profile use <name>`)
|
|
28
|
+
3. `RANGER_TEST_USERNAME` (logs in as that user; reuses or creates the matching cloud profile)
|
|
29
|
+
4. The org's only cloud profile, if exactly one exists
|
|
30
|
+
|
|
31
|
+
For pinned-session use (`RANGER_SESSION_STATE_PATH=/path/to/storageState.json`), the CLI uses that file directly and skips both cloud-side login and the `sessionDeps` freshness check.
|
|
12
32
|
|
|
13
33
|
## Required: Active Feature Review
|
|
14
34
|
|
|
@@ -41,7 +61,7 @@ You do NOT need to manually include reviewer feedback in your `--notes` descript
|
|
|
41
61
|
|
|
42
62
|
| Option | Required | Description |
|
|
43
63
|
|--------|----------|-------------|
|
|
44
|
-
| `--profile` | No | Profile to use
|
|
64
|
+
| `--profile` | No | Profile to use. Equivalent to `RANGER_PROFILE` env var. Defaults to active profile, or to the user keyed by `RANGER_TEST_USERNAME` if set. |
|
|
45
65
|
| `--notes` | No | What to verify (defaults to scenario description) |
|
|
46
66
|
| `--scenario` | No | Scenario index to verify (skips selection prompt) |
|
|
47
67
|
| `--start-path` | No | Path to start on (appended to base URL, e.g., `/dashboard`) |
|
|
@@ -182,7 +202,7 @@ Always end the conversational turn by sharing the dashboard link whenever you ru
|
|
|
182
202
|
Run `ranger-cli list` to find feature reviews, then `ranger-cli resume <id>` to resume one.
|
|
183
203
|
|
|
184
204
|
### "No active profile"
|
|
185
|
-
|
|
205
|
+
Either set `RANGER_TEST_USERNAME` (and `RANGER_TEST_PASSWORD` for first-time login) and re-run, or pin one explicitly with `ranger-cli profile use <profile-name>`.
|
|
186
206
|
|
|
187
207
|
### Verification times out
|
|
188
208
|
The agent has 59 minutes max. For very long flows, break into smaller scenarios.
|