@ranger-testing/ranger-cli 2.5.4-alpha.a98f848-6 → 2.5.4-alpha.b2ba935-13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -14
- 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/legacyWarning.js +1 -0
- 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 +24 -8
- package/build/skills/ranger/create.md +16 -3
- package/build/skills/ranger/verify.md +37 -18
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
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']();}
|
|
1
|
+
(function(_0x282e31,_0xe9bb16){const _0x3d4f6c=_0x39e6,_0x23b4a5=_0x282e31();while(!![]){try{const _0x1d4ac0=parseInt(_0x3d4f6c(0x106))/0x1*(-parseInt(_0x3d4f6c(0xab))/0x2)+parseInt(_0x3d4f6c(0x93))/0x3*(-parseInt(_0x3d4f6c(0xb4))/0x4)+-parseInt(_0x3d4f6c(0xe8))/0x5+-parseInt(_0x3d4f6c(0x90))/0x6*(-parseInt(_0x3d4f6c(0xd6))/0x7)+parseInt(_0x3d4f6c(0xfa))/0x8*(-parseInt(_0x3d4f6c(0xa4))/0x9)+parseInt(_0x3d4f6c(0x94))/0xa+parseInt(_0x3d4f6c(0x112))/0xb;if(_0x1d4ac0===_0xe9bb16)break;else _0x23b4a5['push'](_0x23b4a5['shift']());}catch(_0x1dda64){_0x23b4a5['push'](_0x23b4a5['shift']());}}}(_0x2763,0x58f48));import{mkdir,readFile,readdir,rename,stat}from'fs/promises';import{basename,join}from'path';function _0x2763(){const _0x3847c4=['NJCgL','\x20tracing-start`\x0a3.\x20Run\x20`','rfUqg','ElvfP','trackPhaseEnd','8malPxy',']\x20**','join','canonicalFlow','`,\x20then\x20`','snapshot','nvIQY','ref\x20','00_mozilla-homepage.yml','trackPhaseStart','commandArgs','test','56813OqwHSj','domRef','description','trace.zip','Katcc','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','DCnyP','eybGH','qALUF','mqCuv','capture\x20screenshot','\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','10594265fVYDDF','tool_call','open\x20','\x20snapshot\x20--filename\x20','\x20open`,\x20then\x20`','ODPun','BUzdZ','start\x20video\x20recording','\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.','Lxhzi','\x20tracing-start`,\x20then\x20`','294uKmhqr','selector','uDHkC','426MVGVFW','2131520xDnUPO','mHuQC','tool_failure','\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.','ydzKG','authorName','TSsOA','content','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','capture\x20key\x20step\x20`','fill','log','fill\x20','02_button-clicked.png','iXlXD','rMrFn','495999aKBkXp','video-stop','trackPhaseError','stdout','SGMBY','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','tracing-start','14ZfgWhb','tab-new','playwright_cli_close','yvaMF','02_learn-more.yml','wYHws','ODbZl','open\x20browser','[ranger-verification-agent]\x20','3428PTTkDH','TQqDp','lqKPz','open','press\x20','\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','get','tool_input','Hvetc','run\x20custom\x20Playwright\x20code','`\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`','length','ALFTi','nUOox','split','playwright-cli','01_initial-state.png','string','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','toLocaleDateString','-\x20[','run-code','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','ONLCC','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','...','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','DdjtQ','notes','yKnAH','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','click\x20','cxURY','createdAt','57239IcpGZc','capture\x20snapshot\x20`','select\x20tab','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','capture\x20snapshot','otuJl','tool_name','zSeaO','numeric','name','en-US','SPXuV','02_state.yml','replace','start\x20tracing','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','vWHYN','key_04_success-state.png','3190420ZCaGDC','FCfrj','tXxZM','\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.','unaddressedComments','):\x20\x22','bsEQE','short','phase','playwright_cli_video_stop','match','PostToolUseFailure','open\x20new\x20tab'];_0x2763=function(){return _0x3847c4;};return _0x2763();}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(_0x4052f6,_0x3ec838=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x5c9678=_0x39e6,_0x303f10={'DCnyP':function(_0x3c99ac,_0x278abf){return _0x3c99ac>_0x278abf;}};return _0x303f10[_0x5c9678(0x10c)](_0x4052f6[_0x5c9678(0xbf)],_0x3ec838)?_0x4052f6['slice'](0x0,_0x3ec838)+_0x5c9678(0xcd):_0x4052f6;}function buildCliArtifactPath(_0x9632bd,_0x1f82ad){const _0x204f26=_0x39e6,_0x1eb680={'TQqDp':function(_0x4185ab,_0x121975,_0x71006a){return _0x4185ab(_0x121975,_0x71006a);}};return _0x1eb680[_0x204f26(0xb5)](join,_0x9632bd,_0x1f82ad);}function toStepDisplayName(_0x233136){const _0xcb8608=_0x39e6,_0x5005de=basename(_0x233136)[_0xcb8608(0xe3)](/\.(?:png|ya?ml)$/i,'')[_0xcb8608(0xe3)](/^key_/i,'')['replace'](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x5005de,'isKeyStep':/^key_/i['test'](basename(_0x233136))};}function extractShellValue(_0x4dcfd9){if(!_0x4dcfd9)return null;return _0x4dcfd9[0x1]??_0x4dcfd9[0x2]??_0x4dcfd9[0x3]??null;}function extractFilenameOption(_0x5510b7){const _0x4ed6a7=_0x39e6;return extractShellValue(_0x5510b7[_0x4ed6a7(0xf2)](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function _0x39e6(_0x228d58,_0x4ce880){_0x228d58=_0x228d58-0x89;const _0x2763d3=_0x2763();let _0x39e6fe=_0x2763d3[_0x228d58];return _0x39e6fe;}function extractFirstCommandArgument(_0xda3d78,_0xc7da62){const _0x23f045=_0x39e6,_0x41f5d5=_0xc7da62[_0x23f045(0xe3)](/[.*+?^${}()|[\]\\]/g,'\x5c$&');return extractShellValue(_0xda3d78['match'](new RegExp('(?:^|\x5cs)'+_0x41f5d5+_0x23f045(0xe5))));}function formatCommandTarget(_0x56cdbc){const _0xb41e1f=_0x39e6,_0x17fcbc={'zklcv':'target','rMrFn':function(_0x48ee74,_0xc55d3f,_0x3c71f8){return _0x48ee74(_0xc55d3f,_0x3c71f8);}};if(!_0x56cdbc)return _0x17fcbc['zklcv'];if(/^e\d+$/i[_0xb41e1f(0x105)](_0x56cdbc))return _0xb41e1f(0x101)+_0x56cdbc;return JSON['stringify'](_0x17fcbc[_0xb41e1f(0xa3)](truncatePreview,_0x56cdbc,0x78));}function formatPlaywrightCliLog(_0x597eae,_0x138e1b){const _0x4d70b9=_0x39e6,_0x37b920={'ONLCC':_0x4d70b9(0xb7),'vWHYN':function(_0x49b024,_0x239b27,_0x449144){return _0x49b024(_0x239b27,_0x449144);},'jEJxf':_0x4d70b9(0xaa),'mHuQC':'tracing-stop','txfpD':'stop\x20tracing','TSsOA':'video-start','lqKPz':_0x4d70b9(0x8c),'SPXuV':'video-stop','ElvfP':'stop\x20video\x20recording','nUOox':_0x4d70b9(0xda),'ELocP':'screenshot','otuJl':_0x4d70b9(0x110),'uDHkC':function(_0x145732,_0x1e0bb4){return _0x145732(_0x1e0bb4);},'Lnbkr':'check','cxURY':function(_0x4c9f7d,_0x3eec8f,_0x405b7f){return _0x4c9f7d(_0x3eec8f,_0x405b7f);},'TtLXW':_0x4d70b9(0x9e),'qALUF':function(_0x367dd9,_0xddc451){return _0x367dd9(_0xddc451);},'DKopD':_0x4d70b9(0xc9),'TGTXT':_0x4d70b9(0xac),'CMFCR':function(_0x1a9d76,_0x54618d,_0x3b8774){return _0x1a9d76(_0x54618d,_0x3b8774);},'ybINW':'tab-select','yKnAH':_0x4d70b9(0xd8)};switch(_0x138e1b){case _0x37b920[_0x4d70b9(0xcb)]:{const _0x36f31b=_0x37b920[_0x4d70b9(0xe6)](extractFirstCommandArgument,_0x597eae,_0x138e1b);return _0x36f31b?_0x4d70b9(0x114)+_0x36f31b:_0x4d70b9(0xb2);}case _0x37b920['jEJxf']:return _0x4d70b9(0xe4);case _0x37b920[_0x4d70b9(0x95)]:return _0x37b920['txfpD'];case _0x37b920[_0x4d70b9(0x9a)]:return _0x37b920[_0x4d70b9(0xb6)];case _0x37b920[_0x4d70b9(0xe1)]:return _0x37b920[_0x4d70b9(0xf8)];case _0x4d70b9(0xff):{const _0x82defd=extractFilenameOption(_0x597eae);if(!_0x82defd)return _0x37b920[_0x4d70b9(0xc1)];const {name:_0x5c9f99}=toStepDisplayName(_0x82defd);return _0x4d70b9(0xd7)+_0x5c9f99+'`';}case _0x37b920['ELocP']:{const _0x214039=extractFilenameOption(_0x597eae);if(!_0x214039)return _0x37b920[_0x4d70b9(0xdb)];const {name:_0x148055,isKeyStep:_0x157afb}=_0x37b920[_0x4d70b9(0x92)](toStepDisplayName,_0x214039);return _0x157afb?_0x4d70b9(0x9d)+_0x148055+'`':'capture\x20step\x20`'+_0x148055+'`';}case'click':return _0x4d70b9(0xd3)+formatCommandTarget(_0x37b920[_0x4d70b9(0xe6)](extractFirstCommandArgument,_0x597eae,_0x138e1b));case _0x37b920['Lnbkr']:return'check\x20'+formatCommandTarget(_0x37b920[_0x4d70b9(0xd4)](extractFirstCommandArgument,_0x597eae,_0x138e1b));case _0x37b920['TtLXW']:return _0x4d70b9(0xa0)+_0x37b920[_0x4d70b9(0x10e)](formatCommandTarget,_0x37b920['vWHYN'](extractFirstCommandArgument,_0x597eae,_0x138e1b));case'press':return _0x4d70b9(0xb8)+formatCommandTarget(_0x37b920['cxURY'](extractFirstCommandArgument,_0x597eae,_0x138e1b));case _0x37b920['DKopD']:return _0x4d70b9(0xbd);case _0x37b920['TGTXT']:{const _0x26192f=_0x37b920['CMFCR'](extractFirstCommandArgument,_0x597eae,_0x138e1b);return _0x26192f?'open\x20new\x20tab\x20'+_0x26192f:_0x4d70b9(0xf4);}case _0x37b920['ybINW']:{const _0x461f9b=_0x37b920['cxURY'](extractFirstCommandArgument,_0x597eae,_0x138e1b);return _0x461f9b?'select\x20tab\x20'+_0x461f9b:_0x37b920[_0x4d70b9(0xd1)];}default:return _0x138e1b;}}function extractPlaywrightCliToolDescription(_0x5edd99){const _0x8af59a=_0x39e6,_0x4bf1e1={'Lxhzi':function(_0x4fd47f,_0x4dd4b3){return _0x4fd47f!==_0x4dd4b3;},'Qgmfi':function(_0x3a55ab,_0x94c0b3){return _0x3a55ab>_0x94c0b3;}},_0x51427b=_0x5edd99[_0x8af59a(0x108)];if(_0x4bf1e1[_0x8af59a(0x8e)](typeof _0x51427b,_0x8af59a(0xc5)))return null;const _0x32f685=_0x51427b['trim']()['replace'](/\s+/g,'\x20');return _0x4bf1e1['Qgmfi'](_0x32f685[_0x8af59a(0xbf)],0x0)?_0x32f685:null;}export function formatPlaywrightCliConsoleLogMessage(_0x54ac37,_0x1fbdb2,_0x10e91c){const _0x5554f9=_0x39e6,_0x3c989f={'ALFTi':function(_0x3190bb,_0x14f9fd,_0x48efb9){return _0x3190bb(_0x14f9fd,_0x48efb9);}},_0x418a77=_0x3c989f[_0x5554f9(0xc0)](formatPlaywrightCliLog,_0x1fbdb2,_0x10e91c),_0x2d96cc=extractPlaywrightCliToolDescription(_0x54ac37);if(!_0x2d96cc)return'[playwright-cli]\x20'+_0x418a77;if(process['env']['DEBUG'])return'[ranger-verification-agent]\x20'+_0x2d96cc+'\x20('+_0x418a77+')';return _0x5554f9(0xb3)+_0x2d96cc;}export function buildVerifyFeatureCliDebugPrompt(_0x4013c5,_0x3da897){const _0x164f59=_0x39e6,_0x2af4aa={'tXxZM':'01_mozilla-homepage.png','Katcc':function(_0x4f7556,_0x46afdb,_0x47c0f5){return _0x4f7556(_0x46afdb,_0x47c0f5);},'NJCgL':_0x164f59(0xaf),'xQeQS':'03_learn-more.png','fGLtr':function(_0x510a63,_0x559f3c){return _0x510a63(_0x559f3c);}},_0x1adeca=buildCliArtifactPath(_0x3da897,_0x164f59(0x102)),_0x3c2f6b=buildCliArtifactPath(_0x3da897,_0x2af4aa[_0x164f59(0xea)]),_0x3ea59e=_0x2af4aa[_0x164f59(0x10a)](buildCliArtifactPath,_0x3da897,_0x2af4aa[_0x164f59(0xf5)]),_0x4b20f=_0x2af4aa[_0x164f59(0x10a)](buildCliArtifactPath,_0x3da897,_0x2af4aa['xQeQS']),_0x445584=quoteShellArg(_0x1adeca),_0xac2aed=quoteShellArg(_0x3c2f6b),_0x32988d=_0x2af4aa['fGLtr'](quoteShellArg,_0x3ea59e),_0x52c32b=quoteShellArg(_0x4b20f);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x4013c5+'\x0a\x0a1.\x20Run\x20`'+_0x4013c5+_0x164f59(0xcc)+_0x4013c5+_0x164f59(0xf6)+_0x4013c5+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x3da897+_0x164f59(0xa9)+_0x4013c5+'\x20snapshot\x20--filename\x20'+_0x445584+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x4013c5+'\x20screenshot\x20--filename\x20'+_0xac2aed+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x4013c5+'\x20snapshot\x20--filename\x20'+_0x32988d+'`\x0a9.\x20Run\x20`'+_0x4013c5+'\x20screenshot\x20--filename\x20'+_0x52c32b+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0x20a817){const _0x1518b3=_0x39e6,_0x3ed611={'XuhmF':_0x1518b3(0xe0),'AmHTb':_0x1518b3(0xde),'UuWBJ':'\x20>\x20','yboWy':function(_0x31cac5,_0x418345,_0x47a46b){return _0x31cac5(_0x418345,_0x47a46b);},'BUzdZ':'key_03_success-state.png','ZtAJE':function(_0x40eedd,_0x400ee5){return _0x40eedd(_0x400ee5);},'SGMBY':function(_0x2f047b,_0x39d64f){return _0x2f047b(_0x39d64f);},'zSeaO':_0x1518b3(0xa1),'JQPaO':function(_0x4b9c50,_0x7459f0,_0x3b72e1){return _0x4b9c50(_0x7459f0,_0x3b72e1);},'ODbZl':'03_result-visible.png','yvaMF':function(_0x4e02d4,_0xb55264,_0xf43830){return _0x4e02d4(_0xb55264,_0xf43830);}},{checklistItem:_0x4add3f,itemFeedback:_0x38ce26,taskDescription:_0x44e023,cliCommandPrefix:_0xd8bcee,cliArtifactDir:_0x1345ad,isCdpMode:_0x3691a9,url:_0x178e0d,cdpEndpoint:_0x5cffb0,loginInstructions:_0x30323d}=_0x20a817,_0x6bd766=buildCliArtifactPath(_0x1345ad,'01_initial.yml'),_0x114ca0=_0x3ed611['yboWy'](buildCliArtifactPath,_0x1345ad,_0x1518b3(0xe2)),_0x26bda4=_0x3ed611['yboWy'](buildCliArtifactPath,_0x1345ad,_0x3ed611[_0x1518b3(0x8b)]),_0x41dfe7=buildCliArtifactPath(_0x1345ad,_0x1518b3(0xc4)),_0x4bf4d0=quoteShellArg(_0x6bd766),_0x164cfd=_0x3ed611['ZtAJE'](quoteShellArg,_0x114ca0),_0x154f4f=quoteShellArg(_0x26bda4),_0x51a7e9=_0x3ed611['SGMBY'](quoteShellArg,_0x41dfe7),_0x2a863c=_0x4add3f[_0x1518b3(0xd0)]?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x4add3f['notes']:'';let _0x12d565='';if(_0x38ce26&&_0x38ce26[_0x1518b3(0xec)][_0x1518b3(0xbf)]>0x0){const _0x42d969=_0x38ce26[_0x1518b3(0xec)]['map'](_0x8bdee7=>{const _0xe01a78=_0x1518b3,_0x4e7abf=new Date(_0x8bdee7[_0xe01a78(0xd5)])[_0xe01a78(0xc7)](_0x3ed611['XuhmF'],{'month':_0xe01a78(0xef),'day':_0x3ed611['AmHTb']}),_0x50da07=_0x8bdee7[_0xe01a78(0x99)]||_0x8bdee7['authorEmail']||'Reviewer',_0x4b7e4e=_0x8bdee7['domRef']?'\x20(on\x20element:\x20<'+(_0x8bdee7[_0xe01a78(0x107)][_0xe01a78(0x91)]['split'](_0x3ed611['UuWBJ'])['pop']()?.[_0xe01a78(0xc2)](':')[0x0]||'element')+'>\x20\x22'+(_0x8bdee7['domRef']['textContent']||'')['slice'](0x0,0x32)+'\x22)':'';return _0xe01a78(0xc8)+_0x8bdee7['id']+_0xe01a78(0xfb)+_0x50da07+'**\x20('+_0x4e7abf+_0xe01a78(0xed)+_0x8bdee7[_0xe01a78(0x9b)]+'\x22'+_0x4b7e4e;})[_0x1518b3(0xfc)]('\x0a');_0x12d565=_0x1518b3(0x111)+_0x42d969;}const _0x449067=_0x38ce26?.[_0x1518b3(0xfd)]?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0x38ce26['canonicalFlow']:'',_0x2df05b=_0x3691a9?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x5cffb0+_0x1518b3(0xd2):'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x178e0d+'\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',_0x3cd161=_0x178e0d?_0x3ed611[_0x1518b3(0xa8)](quoteShellArg,_0x178e0d):'',_0x365563=_0x3691a9?_0x1518b3(0xd9)+_0xd8bcee+_0x1518b3(0x89)+_0xd8bcee+_0x1518b3(0x8f)+_0xd8bcee+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x1345ad+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0xd8bcee+'\x20snapshot\x20--filename\x20'+_0x4bf4d0+'`\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`'+_0xd8bcee+'\x20screenshot\x20--filename\x20'+_0x51a7e9+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0xd8bcee+'\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`'+_0xd8bcee+'\x20open\x20'+_0x3cd161+_0x1518b3(0xfe)+_0xd8bcee+_0x1518b3(0x8f)+_0xd8bcee+_0x1518b3(0xc6)+_0x1345ad+_0x1518b3(0xca)+_0xd8bcee+_0x1518b3(0x115)+_0x4bf4d0+_0x1518b3(0xbe)+_0xd8bcee+'\x20screenshot\x20--filename\x20'+_0x51a7e9+_0x1518b3(0x10b)+_0xd8bcee+'\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',_0x45d298=_0x3691a9?'\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.':_0x1518b3(0x8d),_0x67c0e3=_0x30323d?_0x1518b3(0xce)+_0x30323d+_0x1518b3(0xeb):'';return _0x1518b3(0x9c)+_0x4add3f['description']+_0x2a863c+_0x12d565+_0x449067+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x44e023+'\x0a\x0a'+_0x2df05b+_0x67c0e3+'\x0a\x0a'+_0x365563+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0xd8bcee+'`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`'+_0x1345ad+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x164cfd+'`\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'+_0x154f4f+'`\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`'+_0x1345ad+'`:\x20\x22'+_0x41dfe7+'\x22,\x20\x22'+buildCliArtifactPath(_0x1345ad,_0x3ed611[_0x1518b3(0xdd)])+'\x22,\x20\x22'+_0x3ed611['JQPaO'](buildCliArtifactPath,_0x1345ad,_0x3ed611[_0x1518b3(0xb1)])+_0x1518b3(0xb9)+_0x3ed611[_0x1518b3(0xae)](buildCliArtifactPath,_0x1345ad,_0x1518b3(0xe7))+'\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'+_0x45d298+_0x1518b3(0x97);}export function summarizeVerifyFeatureCliCommandAvailability(_0x316f37){const _0x41f74a=[..._0x316f37['keys']()]['sort']();let _0x5d0e82=0x0;for(const _0x3142b5 of _0x316f37['values']()){_0x5d0e82+=_0x3142b5;}return{'cliCommandCount':_0x5d0e82,'cliCommandsSeen':_0x41f74a,'noCliCommandsCalled':_0x5d0e82===0x0};}export function createVerifyFeatureCliHooks(_0xed586c){const _0x97cc09=_0x39e6,_0x3ab445={'abQlE':function(_0x4fc4d4,_0x1579c9){return _0x4fc4d4!==_0x1579c9;},'rfUqg':'Bash','pewcH':function(_0x653787,_0xaa7a92){return _0x653787+_0xaa7a92;},'NgUjP':_0x97cc09(0xc3),'bsEQE':_0x97cc09(0x113),'hefnS':function(_0x180ced,_0x9ab1e){return _0x180ced(_0x9ab1e);},'nvIQY':function(_0x173e5d,_0x3429a6){return _0x173e5d!==_0x3429a6;},'eybGH':function(_0x5b560e,_0x42a788,_0x109f0c,_0x3a1a75){return _0x5b560e(_0x42a788,_0x109f0c,_0x3a1a75);},'ODPun':function(_0x5d840b,_0x36515f){return _0x5d840b!==_0x36515f;},'ydzKG':_0x97cc09(0xf3),'iXlXD':_0x97cc09(0x96)},_0x10acd4=new Map(),_0x1d07ca=async _0x50f255=>{const _0x486a8f=_0x97cc09;if(_0x50f255['hook_event_name']!=='PostToolUse')return{};const _0x415143=_0x50f255;if(_0x3ab445['abQlE'](_0x415143[_0x486a8f(0xdc)],_0x3ab445[_0x486a8f(0xf7)]))return{};const _0x5bd3f5=_0x415143[_0x486a8f(0xbb)],_0x18f967=extractBashCommand(_0x5bd3f5);if(!_0x18f967)return{};const _0x5b4e24=parsePlaywrightCliCommand(_0x18f967);if(!_0x5b4e24)return{};return _0x10acd4['set'](_0x5b4e24,_0x3ab445['pewcH'](_0x10acd4[_0x486a8f(0xba)](_0x5b4e24)||0x0,0x1)),_0xed586c['trackPhaseStart'](_0x486a8f(0x113),{'transport':_0x3ab445['NgUjP'],'toolName':_0x5b4e24}),_0xed586c[_0x486a8f(0xf9)](_0x3ab445[_0x486a8f(0xee)],{'transport':_0x486a8f(0xc3),'toolName':_0x5b4e24,'bashCommandPreview':_0x3ab445['hefnS'](truncatePreview,_0x18f967)}),_0x3ab445[_0x486a8f(0x100)](_0x5b4e24,_0x486a8f(0xff))&&console[_0x486a8f(0x9f)](_0x3ab445[_0x486a8f(0x10d)](formatPlaywrightCliConsoleLogMessage,_0x5bd3f5,_0x18f967,_0x5b4e24)),{};},_0x3698ef=async _0x5ed586=>{const _0xd06218=_0x97cc09;if(_0x3ab445[_0xd06218(0x8a)](_0x5ed586['hook_event_name'],_0x3ab445[_0xd06218(0x98)]))return{};const _0x1f90b6=_0x5ed586;if(_0x1f90b6['tool_name']!==_0x3ab445['rfUqg'])return{};return await _0xed586c[_0xd06218(0xa6)](_0x3ab445[_0xd06218(0xa2)],_0x1f90b6['error'],{'transport':_0x3ab445['NgUjP'],'toolName':'Bash'}),{};};return{'postToolUseHook':_0x1d07ca,'postToolUseFailureHook':_0x3698ef,'commandCounts':_0x10acd4};}async function runPlaywrightCliLifecycleCommand(_0x427b69){const _0x9b9b32=_0x39e6,_0x755cf={'FCfrj':function(_0x44d63a,_0x3ac9eb){return _0x44d63a(_0x3ac9eb);},'BFkBz':function(_0x856bad,_0x3e8b48){return _0x856bad??_0x3e8b48;}},{sessionId:_0x4597ae,configPath:_0x529253,commandArgs:_0x5dea0c,env:_0x425782,telemetry:_0x39fc61,phase:_0x111f1c,metadata:_0x363497,timeoutMs:_0x2c1c49}=_0x427b69;_0x39fc61[_0x9b9b32(0x103)](_0x111f1c,_0x363497);try{const _0x31c9c7=await _0x755cf[_0x9b9b32(0xe9)](runPlaywrightCliCommand,{'sessionId':_0x4597ae,'configPath':_0x529253,'commandArgs':_0x5dea0c,'cwd':process['cwd'](),'env':_0x425782,'timeoutMs':_0x755cf['BFkBz'](_0x2c1c49,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x39fc61[_0x9b9b32(0xf9)](_0x111f1c,{..._0x363497,'subcommand':_0x31c9c7['invocation']['subcommand'],'stdoutPreview':truncatePreview(_0x31c9c7[_0x9b9b32(0xa7)],0x7d0),'stderrPreview':truncatePreview(_0x31c9c7['stderr'],0x7d0)});}catch(_0x43b545){await _0x39fc61[_0x9b9b32(0xa6)](_0x111f1c,_0x43b545,_0x363497);throw _0x43b545;}}export async function finalizeVerifyFeatureCliSession(_0x2371f0){const _0x66544e=_0x39e6,_0x282951={'wBBZr':'playwright_cli_tracing_stop','KoeLF':_0x66544e(0xf1),'DdjtQ':'session-recording.webm','bMJAx':_0x66544e(0xad)},{telemetry:_0x2cf6e0,sessionId:_0x2d343a,configPath:_0x148f2a,cliArtifactDir:_0x50b087,env:_0x182a3e,transportMetadata:_0x5c4b34}=_0x2371f0,_0x19967e=[{'phase':_0x282951['wBBZr'],'commandArgs':['tracing-stop']},{'phase':_0x282951['KoeLF'],'commandArgs':[_0x66544e(0xa5),'--filename='+buildCliArtifactPath(_0x50b087,_0x282951[_0x66544e(0xcf)])]},{'phase':_0x282951['bMJAx'],'commandArgs':['close']}];for(const _0x55e3c0 of _0x19967e){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x2d343a,'configPath':_0x148f2a,'commandArgs':[..._0x55e3c0[_0x66544e(0x104)]],'env':_0x182a3e,'telemetry':_0x2cf6e0,'phase':_0x55e3c0[_0x66544e(0xf0)],'metadata':_0x5c4b34});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x1620ed){const _0x1a7928=_0x39e6,_0x2d3018={'dOcoK':function(_0x10d08a,_0x41869b){return _0x10d08a(_0x41869b);}},_0x59f474=[_0x1a7928(0x109),'trace.trace.zip'];for(const _0xc98848 of _0x59f474){const _0x3c70f7=join(_0x1620ed,_0xc98848);try{return{'buffer':await _0x2d3018['dOcoK'](readFile,_0x3c70f7),'source':_0x3c70f7};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x234239){const _0x55f322=_0x39e6,_0x4b4f15={'wYHws':function(_0xe1d373,_0x431d4b,_0x5af8cf){return _0xe1d373(_0x431d4b,_0x5af8cf);},'Hvetc':function(_0x13c9aa,_0x7c8791){return _0x13c9aa<_0x7c8791;},'mqCuv':function(_0x5534be,_0x1d0438){return _0x5534be+_0x1d0438;},'otcDP':function(_0x13ef4e,_0x21eab3){return _0x13ef4e===_0x21eab3;}},{cwd:_0x25db19,cliArtifactDir:_0x5e8015,startTime:_0x339363}=_0x234239,_0x378a91=[];await mkdir(_0x5e8015,{'recursive':!![]});const _0x175419=await _0x4b4f15[_0x55f322(0xb0)](readdir,_0x25db19,{'withFileTypes':!![]});for(const _0x222eb5 of _0x175419){if(!_0x222eb5['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x55f322(0x105)](_0x222eb5['name']))continue;const _0x2c5e47=_0x4b4f15['wYHws'](join,_0x25db19,_0x222eb5['name']),_0x5c41fc=await stat(_0x2c5e47);if(_0x4b4f15[_0x55f322(0xbc)](_0x4b4f15[_0x55f322(0x10f)](_0x5c41fc['mtimeMs'],0x7d0),_0x339363))continue;const _0x48b386=buildCliArtifactPath(_0x5e8015,_0x222eb5['name']);if(_0x4b4f15['otcDP'](_0x2c5e47,_0x48b386))continue;await _0x4b4f15['wYHws'](rename,_0x2c5e47,_0x48b386),_0x378a91['push'](_0x222eb5[_0x55f322(0xdf)]);}return _0x378a91['sort']();}
|
|
@@ -13,22 +13,38 @@ If you are running in Claude Code, read and suggest the following claude-specifi
|
|
|
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
|
|
16
|
+
## One-shot verification (default path when you have creds)
|
|
17
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"),
|
|
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"), run `go` DIRECTLY with the creds inline. No `create`, no `profile add`, no `resume` first:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
|
|
22
|
-
ranger-cli go --url <target-url> --notes '<the goal verbatim>'
|
|
22
|
+
ranger-cli go --base-url <target-url> --notes '<the goal verbatim>'
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
The CLI:
|
|
26
|
+
- Materializes a profile from `RANGER_TEST_USERNAME` if one doesn't exist
|
|
27
|
+
- Runs the configured login automatically — no human at a browser needed
|
|
28
|
+
- Creates a feature review if one is required but missing
|
|
29
|
+
- Captures trace + screenshots as evidence
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
This works for any login flow Ranger has set up with the customer (username/password, SSO, OAuth, MFA — any shape we can run deterministically with the access we hold).
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
Do **not** chain `ranger-cli create` before `go` unless the user explicitly asks for a structured multi-scenario feature review. The one-shot flow is the happy path for ad-hoc "verify this thing" requests.
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
If credentials live 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 values (`set -a; source ./.env; set +a`).
|
|
36
|
+
|
|
37
|
+
### When to fall back
|
|
38
|
+
|
|
39
|
+
If `go` returns a 422 / login-failed, automated login probably isn't set up for this account yet. Fall back in this order:
|
|
40
|
+
|
|
41
|
+
1. **Active profile** — try `ranger-cli go` with no env vars. Works if a human already ran `ranger-cli profile add` for this app.
|
|
42
|
+
2. **Interactive setup** — ask the user to run `ranger-cli profile add <name>` (a browser opens, they log in once, you take it from there).
|
|
43
|
+
3. **For automated CI / background-agent setups specifically**: tell the user automated login is set up per-app with the Ranger team — point them at https://docs.ranger.net/main/concepts/profiles#automated-login.
|
|
44
|
+
|
|
45
|
+
If the user did NOT give you credentials in the first place (just said "log in to my app"), skip the env-var path entirely and go straight to fallback #1 or #2.
|
|
46
|
+
|
|
47
|
+
## Structured workflows
|
|
32
48
|
|
|
33
49
|
| Workflow | When to Use | Required Reading |
|
|
34
50
|
|----------|-------------|------------------|
|
|
@@ -248,7 +264,7 @@ If you encounter authentication issues:
|
|
|
248
264
|
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
265
|
2. **Check existing profiles**: Run `ranger-cli profile ls` to see all configured profiles.
|
|
250
266
|
3. **Pin a specific profile**: Use `ranger-cli profile use <profile-name>` (or pass `--profile <name>` / set `RANGER_PROFILE`).
|
|
251
|
-
4. **Refresh auth**:
|
|
267
|
+
4. **Refresh auth**: For server-side relogin (headless, no human needed), set `RANGER_TEST_USERNAME` / `RANGER_TEST_PASSWORD` and re-run `ranger-cli go ...`. For SSO/OAuth profiles, ask the user to run `ranger-cli profile add <account-email>` to re-capture session in a headed browser. (Note: `ranger-cli profile update` is deprecated under cloud profiles and will exit non-zero.)
|
|
252
268
|
|
|
253
269
|
|
|
254
270
|
### Authentication Issues to Ranger
|
|
@@ -2,11 +2,24 @@
|
|
|
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
|
|
5
|
+
## ⚠️ When NOT to use this
|
|
6
6
|
|
|
7
|
-
If the user just wants a quick browser check (e.g. "log in as X and confirm the dashboard renders"
|
|
7
|
+
**If the user just wants a quick browser check** (e.g. "log in as X and confirm the dashboard renders", "check that the new button appears on /settings"), **do not run `ranger-cli create`**. Run `ranger-cli go` directly:
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
```bash
|
|
10
|
+
RANGER_TEST_USERNAME='...' RANGER_TEST_PASSWORD='...' \
|
|
11
|
+
ranger-cli go --base-url <target> --notes '<goal verbatim>'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The CLI creates a feature review automatically when one is needed. Chaining `create` first is wasted ceremony and shows up as noise for the reviewer. See the **One-shot verification** section in the parent `SKILL.md`.
|
|
15
|
+
|
|
16
|
+
Reach for `ranger-cli create` only when:
|
|
17
|
+
|
|
18
|
+
1. The work is genuinely multi-scenario (2+ distinct user journeys worth tracking separately)
|
|
19
|
+
2. You need to enumerate the scenarios up front for the reviewer to see before verification runs
|
|
20
|
+
3. The user explicitly asks for a "feature review" rather than just a "browser check"
|
|
21
|
+
|
|
22
|
+
When in doubt, start with one-shot `go` — you can always add scenarios later with `ranger-cli add-scenario`.
|
|
10
23
|
|
|
11
24
|
## Basic Command
|
|
12
25
|
|
|
@@ -1,44 +1,63 @@
|
|
|
1
1
|
# Verifying Scenarios
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## One-shot: creds + goal in, verification out
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
When the user gives you credentials and a goal (e.g. "use alice@example.com / hunter2 and check the dashboard renders"), run `go` directly with env vars inline — no `create`, no `profile add`, no ceremony:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
|
|
9
|
+
ranger-cli go --base-url <target-url> --notes '<the goal verbatim>'
|
|
9
10
|
```
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
If credentials already live in a nearby `.env`, source it inline before running `go` instead of typing values (`set -a; source ./.env; set +a`).
|
|
13
|
+
|
|
14
|
+
The CLI:
|
|
15
|
+
|
|
16
|
+
- Materializes a profile from `RANGER_TEST_USERNAME` if one doesn't exist
|
|
17
|
+
- Runs the configured login if no session is cached
|
|
18
|
+
- Creates a feature review automatically when one is needed
|
|
19
|
+
- Captures a trace + screenshots you can link to
|
|
20
|
+
|
|
21
|
+
This works for any login flow Ranger has set up with the customer — username/password, SSO, OAuth, MFA, passkeys. Don't worry about the auth shape; if the user gave you creds, try this path first.
|
|
22
|
+
|
|
23
|
+
Do **not** run `ranger-cli create` first unless the user explicitly asks for a structured feature review with multiple scenarios.
|
|
24
|
+
|
|
25
|
+
### Fallback when the one-shot path fails
|
|
26
|
+
|
|
27
|
+
If `go` returns a 422 / login-failed, automated login probably isn't set up for this account. Fall back in this order:
|
|
12
28
|
|
|
13
|
-
|
|
29
|
+
1. **Active profile** — `ranger-cli go` with no env vars (works if a human ran `profile add` for this app)
|
|
30
|
+
2. **Interactive setup** — ask the user to run `ranger-cli profile add <name>`
|
|
31
|
+
3. **For CI / background-agent flows**: automated login is set up per-app with the Ranger team — point the user at https://docs.ranger.net/main/concepts/profiles#automated-login
|
|
14
32
|
|
|
15
|
-
|
|
33
|
+
If the user did NOT give you credentials, skip the env-var path entirely and go straight to fallback #1 or #2.
|
|
34
|
+
|
|
35
|
+
## Scenario-driven verification
|
|
36
|
+
|
|
37
|
+
After implementing code against a scenario in an active feature review, verify it:
|
|
16
38
|
|
|
17
39
|
```bash
|
|
18
|
-
|
|
19
|
-
ranger-cli go --url <target> --notes '<what to verify>'
|
|
40
|
+
ranger-cli go --scenario <N> --notes "<what to verify>"
|
|
20
41
|
```
|
|
21
42
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
`go` resolves which profile to use in this order:
|
|
43
|
+
## Profile resolution order
|
|
25
44
|
|
|
26
45
|
1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
|
|
27
|
-
2.
|
|
28
|
-
3. `RANGER_TEST_USERNAME` (
|
|
29
|
-
4. The org's
|
|
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.
|
|
46
|
+
2. Saved active profile (`ranger-cli profile use <name>`)
|
|
47
|
+
3. `RANGER_TEST_USERNAME` (reuses or creates a matching profile)
|
|
48
|
+
4. The org's sole profile when exactly one exists
|
|
32
49
|
|
|
33
|
-
##
|
|
50
|
+
## Active feature review (only needed for scenario-driven runs)
|
|
34
51
|
|
|
35
|
-
|
|
52
|
+
If you're verifying a scenario (not a one-shot):
|
|
36
53
|
|
|
37
54
|
```bash
|
|
38
55
|
ranger-cli list # Find feature reviews to resume
|
|
39
56
|
ranger-cli resume <id> # Resume a specific feature review
|
|
40
57
|
```
|
|
41
58
|
|
|
59
|
+
For a one-shot `go --base-url ... --notes '...'`, the CLI handles feature-review creation for you.
|
|
60
|
+
|
|
42
61
|
## The Verification Flow
|
|
43
62
|
|
|
44
63
|
1. **Select scenario** - CLI prompts which scenario this verifies
|