@ranger-testing/ranger-cli 2.5.4-alpha.36a12ca-10 → 2.5.4-alpha.5f9facb-17
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 +35 -10
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(_0x332bdd,_0x28c3d9){const _0x1e212c=_0x579f,_0x19f181=_0x332bdd();while(!![]){try{const _0xe28e3a=-parseInt(_0x1e212c(0x15a))/0x1+parseInt(_0x1e212c(0x192))/0x2*(parseInt(_0x1e212c(0x194))/0x3)+-parseInt(_0x1e212c(0x14b))/0x4*(-parseInt(_0x1e212c(0x139))/0x5)+-parseInt(_0x1e212c(0x1b3))/0x6*(parseInt(_0x1e212c(0x1c2))/0x7)+-parseInt(_0x1e212c(0x137))/0x8+parseInt(_0x1e212c(0x19d))/0x9+parseInt(_0x1e212c(0x18f))/0xa*(parseInt(_0x1e212c(0x174))/0xb);if(_0xe28e3a===_0x28c3d9)break;else _0x19f181['push'](_0x19f181['shift']());}catch(_0x29cb1a){_0x19f181['push'](_0x19f181['shift']());}}}(_0x3cab,0x77b99));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(_0x5e3133,_0x140eee=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x340c52=_0x579f,_0x23b6d8={'PepjR':function(_0x5d6252,_0x473748){return _0x5d6252+_0x473748;},'USCVK':_0x340c52(0x147)};return _0x5e3133[_0x340c52(0x16a)]>_0x140eee?_0x23b6d8[_0x340c52(0x143)](_0x5e3133['slice'](0x0,_0x140eee),_0x23b6d8['USCVK']):_0x5e3133;}function buildCliArtifactPath(_0x23a768,_0x2335dd){return join(_0x23a768,_0x2335dd);}function toStepDisplayName(_0xa463fa){const _0x433236=_0x579f,_0x5a73ed={'wTGJb':function(_0x26a7b5,_0x3d602b){return _0x26a7b5(_0x3d602b);}},_0x2f9036=basename(_0xa463fa)[_0x433236(0x167)](/\.(?:png|ya?ml)$/i,'')[_0x433236(0x167)](/^key_/i,'')['replace'](/^\d+_/,'')[_0x433236(0x167)](/-/g,'\x20');return{'name':_0x2f9036,'isKeyStep':/^key_/i[_0x433236(0x150)](_0x5a73ed['wTGJb'](basename,_0xa463fa))};}function extractShellValue(_0x2bbbaa){if(!_0x2bbbaa)return null;return _0x2bbbaa[0x1]??_0x2bbbaa[0x2]??_0x2bbbaa[0x3]??null;}function extractFilenameOption(_0x18e571){const _0x5f11c0={'RmtSR':function(_0x237261,_0x42c9b2){return _0x237261(_0x42c9b2);}};return _0x5f11c0['RmtSR'](extractShellValue,_0x18e571['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function _0x579f(_0x5bb7ba,_0x3ef4c8){_0x5bb7ba=_0x5bb7ba-0x137;const _0x3cab79=_0x3cab();let _0x579fb8=_0x3cab79[_0x5bb7ba];return _0x579fb8;}function extractFirstCommandArgument(_0x3f9800,_0x1738c0){const _0x4953f2=_0x579f,_0x2e1344={'yUqna':function(_0x5c8255,_0x20ee86){return _0x5c8255(_0x20ee86);}},_0xb514be=_0x1738c0['replace'](/[.*+?^${}()|[\]\\]/g,_0x4953f2(0x173));return _0x2e1344['yUqna'](extractShellValue,_0x3f9800['match'](new RegExp(_0x4953f2(0x17d)+_0xb514be+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x17574e){if(!_0x17574e)return'target';if(/^e\d+$/i['test'](_0x17574e))return'ref\x20'+_0x17574e;return JSON['stringify'](truncatePreview(_0x17574e,0x78));}function _0x3cab(){const _0x3f1256=['\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','domRef','xeMQV','authorName','open\x20','[ranger-verification-agent]\x20','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','trace.zip','nWShZ','saEgq','tool_failure','playwright-cli','sort','stop\x20tracing','OdJMp','ucBZy','1513750UoPvXC','uhCCo','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','436906pbyzHZ','trackPhaseStart','12fzwCBp','open','start\x20video\x20recording','press\x20','key_03_success-state.png','get','oiHoY','tool_name','`\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`','2406555MhrZpY','video-stop','hVBWI','--filename=','push','aKlsn','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','keys','PzKsV','gEODJ','Bash','):\x20\x22','\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','01_initial.yml','\x20(on\x20element:\x20<','hook_event_name','\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','jFJEd','**\x20(','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','>\x20\x22','toLocaleDateString','4030494tTvCas','fill\x20','set','dmWNK','subcommand','stop\x20video\x20recording','isFile','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','`,\x20then\x20`','select\x20tab','02_state.yml','cNHPf','trackPhaseError','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','HTRMc','7Geuplk','6572344jSiZnk','PaOXh','5yQwdWz','\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','rpvOG','cwd','khzau','rzHmF','short','capture\x20key\x20step\x20`','playwright_cli_tracing_stop','\x20snapshot\x20--filename\x20','PepjR','xWWit','IAkiU','\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.','...','start\x20tracing','BBlci','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','353824wPoDfv','lvrHF','01_mozilla-homepage.png','\x20screenshot\x20--filename\x20','tracing-stop','test','\x22,\x20\x22','key_04_success-state.png','QenKC','mtimeMs','DARXT','click\x20','log','unaddressedComments','opbdG','305603YhLeEd','tool_input','name','capture\x20step\x20`','click','tab-select','open\x20new\x20tab','notes','\x20tracing-start`,\x20then\x20`','\x0a\x0a##\x20Additional\x20Notes\x0a','string','description','xRjdc','replace','PostToolUseFailure','map','length','agtin','\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','VUJyZ','03_result-visible.png','NgWFl','GQvPl','YZVEE','capture\x20screenshot','\x5c$&','77xFMzOo','ITrhh','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','PcpfE','UmBtE','fill','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','video-start','DEBUG','(?:^|\x5cs)','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'];_0x3cab=function(){return _0x3f1256;};return _0x3cab();}function formatPlaywrightCliLog(_0x1b5e90,_0x4fb81f){const _0x49d484=_0x579f,_0x364fcb={'bmdDC':_0x49d484(0x195),'oiHoY':'open\x20browser','nWShZ':'tracing-start','opbdG':_0x49d484(0x148),'xkgvw':_0x49d484(0x14f),'cNHPf':_0x49d484(0x17b),'hVBWI':_0x49d484(0x196),'rzHmF':_0x49d484(0x19e),'pDBtY':_0x49d484(0x1b8),'LLGKG':'snapshot','rpvOG':function(_0x521354,_0x3400e7){return _0x521354(_0x3400e7);},'QenKC':'capture\x20snapshot','uhCCo':function(_0x3b8d39,_0x4dd0ab){return _0x3b8d39(_0x4dd0ab);},'lvrHF':'screenshot','aKlsn':_0x49d484(0x172),'PzKsV':function(_0x2f4f14,_0x276f30){return _0x2f4f14(_0x276f30);},'PaOXh':function(_0xb7e4ae,_0x2624fd,_0xa4a91e){return _0xb7e4ae(_0x2624fd,_0xa4a91e);},'ITrhh':'run-code','BBlci':'tab-new','jFJEd':_0x49d484(0x1bc)};switch(_0x4fb81f){case _0x364fcb['bmdDC']:{const _0x170c6d=extractFirstCommandArgument(_0x1b5e90,_0x4fb81f);return _0x170c6d?_0x49d484(0x183)+_0x170c6d:_0x364fcb[_0x49d484(0x19a)];}case _0x364fcb[_0x49d484(0x187)]:return _0x364fcb[_0x49d484(0x159)];case _0x364fcb['xkgvw']:return _0x49d484(0x18c);case _0x364fcb[_0x49d484(0x1be)]:return _0x364fcb[_0x49d484(0x19f)];case _0x364fcb[_0x49d484(0x13e)]:return _0x364fcb['pDBtY'];case _0x364fcb['LLGKG']:{const _0x216959=_0x364fcb[_0x49d484(0x13b)](extractFilenameOption,_0x1b5e90);if(!_0x216959)return _0x364fcb[_0x49d484(0x153)];const {name:_0x42aa0a}=_0x364fcb['uhCCo'](toStepDisplayName,_0x216959);return'capture\x20snapshot\x20`'+_0x42aa0a+'`';}case _0x364fcb[_0x49d484(0x14c)]:{const _0x1c8ea9=_0x364fcb['rpvOG'](extractFilenameOption,_0x1b5e90);if(!_0x1c8ea9)return _0x364fcb[_0x49d484(0x1a2)];const {name:_0x51a607,isKeyStep:_0x59fae6}=toStepDisplayName(_0x1c8ea9);return _0x59fae6?_0x49d484(0x140)+_0x51a607+'`':_0x49d484(0x15d)+_0x51a607+'`';}case _0x49d484(0x15e):return _0x49d484(0x156)+_0x364fcb[_0x49d484(0x1a5)](formatCommandTarget,_0x364fcb['PaOXh'](extractFirstCommandArgument,_0x1b5e90,_0x4fb81f));case'check':return'check\x20'+formatCommandTarget(extractFirstCommandArgument(_0x1b5e90,_0x4fb81f));case _0x49d484(0x179):return _0x49d484(0x1b4)+formatCommandTarget(_0x364fcb['PaOXh'](extractFirstCommandArgument,_0x1b5e90,_0x4fb81f));case'press':return _0x49d484(0x197)+_0x364fcb[_0x49d484(0x190)](formatCommandTarget,_0x364fcb[_0x49d484(0x138)](extractFirstCommandArgument,_0x1b5e90,_0x4fb81f));case _0x364fcb[_0x49d484(0x175)]:return'run\x20custom\x20Playwright\x20code';case _0x364fcb[_0x49d484(0x149)]:{const _0x27496c=extractFirstCommandArgument(_0x1b5e90,_0x4fb81f);return _0x27496c?'open\x20new\x20tab\x20'+_0x27496c:_0x49d484(0x160);}case _0x49d484(0x15f):{const _0x4d16ee=_0x364fcb[_0x49d484(0x138)](extractFirstCommandArgument,_0x1b5e90,_0x4fb81f);return _0x4d16ee?'select\x20tab\x20'+_0x4d16ee:_0x364fcb[_0x49d484(0x1ae)];}default:return _0x4fb81f;}}function extractPlaywrightCliToolDescription(_0x365b58){const _0x1f98ca=_0x579f,_0x377311={'DARXT':function(_0x228378,_0x4547e3){return _0x228378!==_0x4547e3;}},_0x877323=_0x365b58['description'];if(_0x377311[_0x1f98ca(0x155)](typeof _0x877323,_0x1f98ca(0x164)))return null;const _0x2a4d4e=_0x877323['trim']()['replace'](/\s+/g,'\x20');return _0x2a4d4e['length']>0x0?_0x2a4d4e:null;}export function formatPlaywrightCliConsoleLogMessage(_0x2de0f3,_0x15bd21,_0x8fde14){const _0x52ab03=_0x579f,_0x149489={'PZsmK':function(_0x427b63,_0x3f22d6,_0x50f95f){return _0x427b63(_0x3f22d6,_0x50f95f);},'zTKAj':function(_0x4a1605,_0xac16ed){return _0x4a1605(_0xac16ed);}},_0x2ddf74=_0x149489['PZsmK'](formatPlaywrightCliLog,_0x15bd21,_0x8fde14),_0x597a35=_0x149489['zTKAj'](extractPlaywrightCliToolDescription,_0x2de0f3);if(!_0x597a35)return'[playwright-cli]\x20'+_0x2ddf74;if(process['env'][_0x52ab03(0x17c)])return'[ranger-verification-agent]\x20'+_0x597a35+'\x20('+_0x2ddf74+')';return _0x52ab03(0x184)+_0x597a35;}export function buildVerifyFeatureCliDebugPrompt(_0x5ee63a,_0x14bbc8){const _0x253242=_0x579f,_0x35167b={'tllLQ':function(_0x26b0d0,_0x33ea97,_0x582b2f){return _0x26b0d0(_0x33ea97,_0x582b2f);},'xRjdc':'02_learn-more.yml','TPHBz':'03_learn-more.png','NgWFl':function(_0xed4e12,_0x479ba3){return _0xed4e12(_0x479ba3);}},_0x138e84=buildCliArtifactPath(_0x14bbc8,'00_mozilla-homepage.yml'),_0x61b43b=_0x35167b['tllLQ'](buildCliArtifactPath,_0x14bbc8,_0x253242(0x14d)),_0x3f11d8=buildCliArtifactPath(_0x14bbc8,_0x35167b[_0x253242(0x166)]),_0x38135c=_0x35167b['tllLQ'](buildCliArtifactPath,_0x14bbc8,_0x35167b['TPHBz']),_0x13b660=quoteShellArg(_0x138e84),_0x1d6b49=_0x35167b[_0x253242(0x16f)](quoteShellArg,_0x61b43b),_0x176a6b=quoteShellArg(_0x3f11d8),_0x36bba3=_0x35167b['NgWFl'](quoteShellArg,_0x38135c);return _0x253242(0x176)+_0x5ee63a+'\x0a\x0a1.\x20Run\x20`'+_0x5ee63a+_0x253242(0x17f)+_0x5ee63a+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x5ee63a+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x14bbc8+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x5ee63a+_0x253242(0x142)+_0x13b660+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x5ee63a+'\x20screenshot\x20--filename\x20'+_0x1d6b49+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x5ee63a+_0x253242(0x142)+_0x176a6b+'`\x0a9.\x20Run\x20`'+_0x5ee63a+_0x253242(0x14e)+_0x36bba3+_0x253242(0x185);}export function buildVerifyFeatureCliPrompt(_0x547c51){const _0x48c4b5=_0x579f,_0x32e98e={'ucBZy':'en-US','Daykv':_0x48c4b5(0x13f),'koiif':'Reviewer','khzau':function(_0x26110d,_0xf4fa46,_0x374f2){return _0x26110d(_0xf4fa46,_0x374f2);},'zaofY':_0x48c4b5(0x1aa),'xeMQV':function(_0x155efb,_0x19292f){return _0x155efb(_0x19292f);},'dmWNK':function(_0x20a27e,_0x221285){return _0x20a27e>_0x221285;},'HwnGP':function(_0x1d5278,_0x599d59,_0x2dc21a){return _0x1d5278(_0x599d59,_0x2dc21a);},'ypVOX':_0x48c4b5(0x16e)},{checklistItem:_0x348a8a,itemFeedback:_0x59ee26,taskDescription:_0x308155,cliCommandPrefix:_0x449502,cliArtifactDir:_0x154267,isCdpMode:_0xadb6f9,url:_0x370015,cdpEndpoint:_0x5180c3,loginInstructions:_0x3e6564}=_0x547c51,_0x50ab21=_0x32e98e[_0x48c4b5(0x13d)](buildCliArtifactPath,_0x154267,_0x32e98e['zaofY']),_0x12b999=buildCliArtifactPath(_0x154267,_0x48c4b5(0x1bd)),_0x40af24=buildCliArtifactPath(_0x154267,_0x48c4b5(0x198)),_0x24934c=_0x32e98e['khzau'](buildCliArtifactPath,_0x154267,'01_initial-state.png'),_0xafae38=quoteShellArg(_0x50ab21),_0x2756f7=quoteShellArg(_0x12b999),_0x485b15=_0x32e98e['xeMQV'](quoteShellArg,_0x40af24),_0xc7b746=quoteShellArg(_0x24934c),_0x74525a=_0x348a8a['notes']?_0x48c4b5(0x163)+_0x348a8a[_0x48c4b5(0x161)]:'';let _0x49609c='';if(_0x59ee26&&_0x32e98e[_0x48c4b5(0x1b6)](_0x59ee26[_0x48c4b5(0x158)]['length'],0x0)){const _0x2a978a=_0x59ee26[_0x48c4b5(0x158)][_0x48c4b5(0x169)](_0x35d5e7=>{const _0x14865c=_0x48c4b5,_0x541db1=new Date(_0x35d5e7['createdAt'])[_0x14865c(0x1b2)](_0x32e98e[_0x14865c(0x18e)],{'month':_0x32e98e['Daykv'],'day':'numeric'}),_0x3f90d1=_0x35d5e7[_0x14865c(0x182)]||_0x35d5e7['authorEmail']||_0x32e98e['koiif'],_0x2819bf=_0x35d5e7[_0x14865c(0x180)]?_0x14865c(0x1ab)+(_0x35d5e7['domRef']['selector']['split']('\x20>\x20')['pop']()?.['split'](':')[0x0]||'element')+_0x14865c(0x1b1)+(_0x35d5e7['domRef']['textContent']||'')['slice'](0x0,0x32)+'\x22)':'';return'-\x20['+_0x35d5e7['id']+']\x20**'+_0x3f90d1+_0x14865c(0x1af)+_0x541db1+_0x14865c(0x1a8)+_0x35d5e7['content']+'\x22'+_0x2819bf;})['join']('\x0a');_0x49609c=_0x48c4b5(0x1a9)+_0x2a978a;}const _0x5639da=_0x59ee26?.['canonicalFlow']?_0x48c4b5(0x1b0)+_0x59ee26['canonicalFlow']:'',_0x263691=_0xadb6f9?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x5180c3+_0x48c4b5(0x17a):'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x370015+_0x48c4b5(0x1ad),_0x4cf5b3=_0x370015?_0x32e98e[_0x48c4b5(0x181)](quoteShellArg,_0x370015):'',_0x1dd35d=_0xadb6f9?_0x48c4b5(0x1a3)+_0x449502+'\x20open`,\x20then\x20`'+_0x449502+_0x48c4b5(0x162)+_0x449502+_0x48c4b5(0x17e)+_0x154267+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x449502+'\x20snapshot\x20--filename\x20'+_0xafae38+_0x48c4b5(0x19c)+_0x449502+'\x20screenshot\x20--filename\x20'+_0xc7b746+_0x48c4b5(0x1ba)+_0x449502+'\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':_0x48c4b5(0x1a3)+_0x449502+'\x20open\x20'+_0x4cf5b3+_0x48c4b5(0x1bb)+_0x449502+'\x20tracing-start`,\x20then\x20`'+_0x449502+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x154267+_0x48c4b5(0x191)+_0x449502+'\x20snapshot\x20--filename\x20'+_0xafae38+'`\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`'+_0x449502+_0x48c4b5(0x14e)+_0xc7b746+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x449502+_0x48c4b5(0x13a),_0x138204=_0xadb6f9?'\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.':_0x48c4b5(0x146),_0x56afdf=_0x3e6564?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x3e6564+'\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.':'';return _0x48c4b5(0x14a)+_0x348a8a[_0x48c4b5(0x165)]+_0x74525a+_0x49609c+_0x5639da+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x308155+'\x0a\x0a'+_0x263691+_0x56afdf+'\x0a\x0a'+_0x1dd35d+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x449502+_0x48c4b5(0x1c0)+_0x154267+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x2756f7+'`\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'+_0x485b15+'`\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`'+_0x154267+'`:\x20\x22'+_0x24934c+_0x48c4b5(0x151)+buildCliArtifactPath(_0x154267,'02_button-clicked.png')+'\x22,\x20\x22'+_0x32e98e['HwnGP'](buildCliArtifactPath,_0x154267,_0x32e98e['ypVOX'])+_0x48c4b5(0x16c)+buildCliArtifactPath(_0x154267,_0x48c4b5(0x152))+'\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'+_0x138204+'\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(_0x560167){const _0x35ed85=_0x579f,_0x18ef15=[..._0x560167[_0x35ed85(0x1a4)]()][_0x35ed85(0x18b)]();let _0x329bac=0x0;for(const _0x1bd0cf of _0x560167['values']()){_0x329bac+=_0x1bd0cf;}return{'cliCommandCount':_0x329bac,'cliCommandsSeen':_0x18ef15,'noCliCommandsCalled':_0x329bac===0x0};}export function createVerifyFeatureCliHooks(_0x2487cb){const _0x11be17=_0x579f,_0x207a8a={'PqzNh':'PostToolUse','vIGlQ':function(_0x107aae,_0x1fa48a){return _0x107aae(_0x1fa48a);},'eNJsU':function(_0x5493ca,_0x2b3274){return _0x5493ca+_0x2b3274;},'HTRMc':'tool_call','PcpfE':function(_0x24ba70,_0x598285){return _0x24ba70(_0x598285);},'pdeee':'snapshot','iezRO':function(_0x426650,_0x29c5da,_0x3f456f,_0x2aa8c2){return _0x426650(_0x29c5da,_0x3f456f,_0x2aa8c2);},'YZVEE':_0x11be17(0x168),'xWWit':function(_0xf40c7f,_0x2e1986){return _0xf40c7f!==_0x2e1986;},'GQvPl':_0x11be17(0x189),'OdJMp':_0x11be17(0x18a)},_0x14ced5=new Map(),_0x2ec0a2=async _0x18785f=>{const _0x130057=_0x11be17;if(_0x18785f[_0x130057(0x1ac)]!==_0x207a8a['PqzNh'])return{};const _0xbf415c=_0x18785f;if(_0xbf415c[_0x130057(0x19b)]!==_0x130057(0x1a7))return{};const _0xb2f3c3=_0xbf415c[_0x130057(0x15b)],_0x37bf10=extractBashCommand(_0xb2f3c3);if(!_0x37bf10)return{};const _0x504107=_0x207a8a['vIGlQ'](parsePlaywrightCliCommand,_0x37bf10);if(!_0x504107)return{};return _0x14ced5[_0x130057(0x1b5)](_0x504107,_0x207a8a['eNJsU'](_0x14ced5[_0x130057(0x199)](_0x504107)||0x0,0x1)),_0x2487cb[_0x130057(0x193)](_0x207a8a[_0x130057(0x1c1)],{'transport':'playwright-cli','toolName':_0x504107}),_0x2487cb['trackPhaseEnd'](_0x207a8a['HTRMc'],{'transport':'playwright-cli','toolName':_0x504107,'bashCommandPreview':_0x207a8a[_0x130057(0x177)](truncatePreview,_0x37bf10)}),_0x504107!==_0x207a8a['pdeee']&&console[_0x130057(0x157)](_0x207a8a['iezRO'](formatPlaywrightCliConsoleLogMessage,_0xb2f3c3,_0x37bf10,_0x504107)),{};},_0x4c1773=async _0x5e33b6=>{const _0x551805=_0x11be17;if(_0x5e33b6[_0x551805(0x1ac)]!==_0x207a8a[_0x551805(0x171)])return{};const _0xbede37=_0x5e33b6;if(_0x207a8a[_0x551805(0x144)](_0xbede37['tool_name'],'Bash'))return{};return await _0x2487cb['trackPhaseError'](_0x207a8a[_0x551805(0x170)],_0xbede37['error'],{'transport':_0x207a8a[_0x551805(0x18d)],'toolName':'Bash'}),{};};return{'postToolUseHook':_0x2ec0a2,'postToolUseFailureHook':_0x4c1773,'commandCounts':_0x14ced5};}async function runPlaywrightCliLifecycleCommand(_0x4b44e2){const _0x5237fc=_0x579f,_0x389cee={'JKWkm':function(_0x33ab15,_0x3b830d,_0x2a6bf2){return _0x33ab15(_0x3b830d,_0x2a6bf2);},'saEgq':function(_0x3e4c71,_0x31c589,_0x393dda){return _0x3e4c71(_0x31c589,_0x393dda);}},{sessionId:_0xf2711a,configPath:_0x44a9a5,commandArgs:_0x31d2c7,env:_0x2fa292,telemetry:_0x289a64,phase:_0x9ae311,metadata:_0x2f6df3,timeoutMs:_0x4df255}=_0x4b44e2;_0x289a64[_0x5237fc(0x193)](_0x9ae311,_0x2f6df3);try{const _0x170d8d=await runPlaywrightCliCommand({'sessionId':_0xf2711a,'configPath':_0x44a9a5,'commandArgs':_0x31d2c7,'cwd':process[_0x5237fc(0x13c)](),'env':_0x2fa292,'timeoutMs':_0x4df255??PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS});_0x289a64['trackPhaseEnd'](_0x9ae311,{..._0x2f6df3,'subcommand':_0x170d8d['invocation'][_0x5237fc(0x1b7)],'stdoutPreview':_0x389cee['JKWkm'](truncatePreview,_0x170d8d['stdout'],0x7d0),'stderrPreview':_0x389cee[_0x5237fc(0x188)](truncatePreview,_0x170d8d['stderr'],0x7d0)});}catch(_0x3be32b){await _0x289a64[_0x5237fc(0x1bf)](_0x9ae311,_0x3be32b,_0x2f6df3);throw _0x3be32b;}}export async function finalizeVerifyFeatureCliSession(_0xcd533b){const _0x28c3b1=_0x579f,_0xc868ed={'agtin':_0x28c3b1(0x141),'XmVCM':'session-recording.webm','LVpuw':'playwright_cli_close','EwYXb':function(_0x1e1029,_0x1a4f56){return _0x1e1029(_0x1a4f56);}},{telemetry:_0x27080b,sessionId:_0x3d9968,configPath:_0x5775d1,cliArtifactDir:_0x318fe5,env:_0x2603f1,transportMetadata:_0x41c1c1}=_0xcd533b,_0x44af75=[{'phase':_0xc868ed[_0x28c3b1(0x16b)],'commandArgs':[_0x28c3b1(0x14f)]},{'phase':'playwright_cli_video_stop','commandArgs':[_0x28c3b1(0x19e),_0x28c3b1(0x1a0)+buildCliArtifactPath(_0x318fe5,_0xc868ed['XmVCM'])]},{'phase':_0xc868ed['LVpuw'],'commandArgs':['close']}];for(const _0x54e7eb of _0x44af75){try{await _0xc868ed['EwYXb'](runPlaywrightCliLifecycleCommand,{'sessionId':_0x3d9968,'configPath':_0x5775d1,'commandArgs':[..._0x54e7eb['commandArgs']],'env':_0x2603f1,'telemetry':_0x27080b,'phase':_0x54e7eb['phase'],'metadata':_0x41c1c1});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x58cdfb){const _0x22adf9=_0x579f,_0x43fd9c={'rgjgF':'trace.trace.zip','IAkiU':function(_0x2ccb0e,_0x105295,_0x18cc3f){return _0x2ccb0e(_0x105295,_0x18cc3f);}},_0x37cf6f=[_0x22adf9(0x186),_0x43fd9c['rgjgF']];for(const _0x4ea16b of _0x37cf6f){const _0x213ced=_0x43fd9c[_0x22adf9(0x145)](join,_0x58cdfb,_0x4ea16b);try{return{'buffer':await readFile(_0x213ced),'source':_0x213ced};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x2f12ac){const _0x3d0106=_0x579f,_0x51b86b={'UmBtE':function(_0x5630f6,_0x2b86d0,_0x11b237){return _0x5630f6(_0x2b86d0,_0x11b237);},'gEODJ':function(_0x432748,_0x18d9c0){return _0x432748<_0x18d9c0;},'DMwRJ':function(_0xb6c80f,_0x4eaf8a){return _0xb6c80f+_0x4eaf8a;},'VUJyZ':function(_0x2dd009,_0x6cf8dd,_0x138b0f){return _0x2dd009(_0x6cf8dd,_0x138b0f);}},{cwd:_0x5370d6,cliArtifactDir:_0x2efe0c,startTime:_0x312376}=_0x2f12ac,_0x1e237=[];await _0x51b86b['UmBtE'](mkdir,_0x2efe0c,{'recursive':!![]});const _0x3bad19=await readdir(_0x5370d6,{'withFileTypes':!![]});for(const _0x232845 of _0x3bad19){if(!_0x232845[_0x3d0106(0x1b9)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x232845[_0x3d0106(0x15c)]))continue;const _0x48cf37=join(_0x5370d6,_0x232845[_0x3d0106(0x15c)]),_0x3bea30=await stat(_0x48cf37);if(_0x51b86b[_0x3d0106(0x1a6)](_0x51b86b['DMwRJ'](_0x3bea30[_0x3d0106(0x154)],0x7d0),_0x312376))continue;const _0x99e40c=_0x51b86b[_0x3d0106(0x178)](buildCliArtifactPath,_0x2efe0c,_0x232845[_0x3d0106(0x15c)]);if(_0x48cf37===_0x99e40c)continue;await _0x51b86b[_0x3d0106(0x16d)](rename,_0x48cf37,_0x99e40c),_0x1e237[_0x3d0106(0x1a1)](_0x232845['name']);}return _0x1e237['sort']();}
|
|
1
|
+
(function(_0x2cb33e,_0x1fb4ea){const _0x2c3762=_0x26be,_0x39ada3=_0x2cb33e();while(!![]){try{const _0x280535=-parseInt(_0x2c3762(0x104))/0x1+parseInt(_0x2c3762(0x135))/0x2*(parseInt(_0x2c3762(0xe3))/0x3)+-parseInt(_0x2c3762(0x12f))/0x4+-parseInt(_0x2c3762(0x11d))/0x5*(parseInt(_0x2c3762(0x109))/0x6)+parseInt(_0x2c3762(0x132))/0x7+parseInt(_0x2c3762(0x12a))/0x8*(parseInt(_0x2c3762(0xf0))/0x9)+parseInt(_0x2c3762(0x14f))/0xa;if(_0x280535===_0x1fb4ea)break;else _0x39ada3['push'](_0x39ada3['shift']());}catch(_0x17ff81){_0x39ada3['push'](_0x39ada3['shift']());}}}(_0x3317,0x86116));import{mkdir,readFile,readdir,rename,stat}from'fs/promises';import{basename,join}from'path';function _0x3317(){const _0x2cd8c7=['.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','uDHrb','tool_call','selector','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','length','`\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`','open\x20browser','3837430iXjIPj','Reviewer','`\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`','en-US','unaddressedComments','03_result-visible.png','check\x20','MeoVM','\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.','**\x20(','capture\x20snapshot','PqDtP','):\x20\x22','\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','subcommand','01_mozilla-homepage.png','authorName','akubl','ref\x20','get','slice','DEBUG','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','QHadb','`:\x20\x22','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','run\x20custom\x20Playwright\x20code','JNown','\x20(on\x20element:\x20<','kzRBX','1454721kBgnpQ','wmoLi','domRef','afbTD','toELz','YVqsS','test','auSGs','string','tab-new','tracing-stop','push','notes','8055wakdpF','playwright_cli_close','tracing-start','AexjV','\x20tracing-start`\x0a3.\x20Run\x20`','check','xeBvW','phase','stop\x20video\x20recording','snapshot','[ranger-verification-agent]\x20','\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','fill\x20','KPctA','set','video-start','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','NvMjh','authorEmail','TBWHC','384958LBVqVc','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','toLocaleDateString','replace','open\x20new\x20tab','4469502AsubAU','playwright-cli','session-recording.webm','[playwright-cli]\x20','\x0a\x0a##\x20Additional\x20Notes\x0a','`\x0a9.\x20Run\x20`','key_04_success-state.png','yogAD','trim','tool_input','stdout','IiHWv','VIybw','map','commandArgs','oQCXF','stop\x20tracing','name','\x20>\x20','description','5wlPCWS','capture\x20step\x20`','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','run-code','invocation','HgUlj','tCPni','press','Bash','tab-select','keys','CDWbE','env','4616aPdWAF','yGmQk','error','(?:^|\x5cs)','03_learn-more.png','129164HOuexP','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','video-stop','2283701SdQPgs','mtimeMs','log','2mQRlOT','canonicalFlow','yAGEA','stderr','\x20snapshot\x20--filename\x20','00_mozilla-homepage.yml','hook_event_name','CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','\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.','capture\x20key\x20step\x20`','split','`\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`','screenshot','`\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','aFQZJ','TAOsn'];_0x3317=function(){return _0x2cd8c7;};return _0x3317();}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(_0x166d93,_0x138b2e=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x16bf20=_0x26be,_0xfc93b4={'afbTD':function(_0x321b6e,_0x598967){return _0x321b6e+_0x598967;},'LCIDl':'...'};return _0x166d93[_0x16bf20(0x14c)]>_0x138b2e?_0xfc93b4[_0x16bf20(0xe6)](_0x166d93['slice'](0x0,_0x138b2e),_0xfc93b4['LCIDl']):_0x166d93;}function buildCliArtifactPath(_0x5ddcc6,_0x1d661a){return join(_0x5ddcc6,_0x1d661a);}function toStepDisplayName(_0x2093d5){const _0x742bc3=_0x26be,_0x1f5801={'IiHWv':function(_0x565597,_0x1a870c){return _0x565597(_0x1a870c);}},_0x2bd040=_0x1f5801[_0x742bc3(0x114)](basename,_0x2093d5)[_0x742bc3(0x107)](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')['replace'](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x2bd040,'isKeyStep':/^key_/i['test'](basename(_0x2093d5))};}function extractShellValue(_0x1333e7){if(!_0x1333e7)return null;return _0x1333e7[0x1]??_0x1333e7[0x2]??_0x1333e7[0x3]??null;}function extractFilenameOption(_0x3bb504){const _0x266912={'yZFOY':function(_0x1af7a0,_0x34e82a){return _0x1af7a0(_0x34e82a);}};return _0x266912['yZFOY'](extractShellValue,_0x3bb504['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x322f1f,_0x4721c2){const _0x353fd5=_0x26be,_0x504f91={'TBWHC':'\x5c$&'},_0x24bebb=_0x4721c2[_0x353fd5(0x107)](/[.*+?^${}()|[\]\\]/g,_0x504f91[_0x353fd5(0x103)]);return extractShellValue(_0x322f1f['match'](new RegExp(_0x353fd5(0x12d)+_0x24bebb+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x15ace3){const _0x388c25=_0x26be,_0x369469={'kBJTr':function(_0x3270ff,_0x476dbc,_0x376b79){return _0x3270ff(_0x476dbc,_0x376b79);}};if(!_0x15ace3)return'target';if(/^e\d+$/i[_0x388c25(0xe9)](_0x15ace3))return _0x388c25(0xd6)+_0x15ace3;return JSON['stringify'](_0x369469['kBJTr'](truncatePreview,_0x15ace3,0x78));}function formatPlaywrightCliLog(_0x571fd8,_0x3abc74){const _0x143a37=_0x26be,_0x3868e8={'NPUQz':function(_0x43054e,_0x3c78ba,_0x41432f){return _0x43054e(_0x3c78ba,_0x41432f);},'Fzduh':_0x143a37(0x14e),'VIybw':'start\x20tracing','wcWNO':_0x143a37(0xed),'kzRBX':_0x143a37(0x119),'kIBFP':_0x143a37(0xff),'uDHrb':'start\x20video\x20recording','LXOtH':_0x143a37(0xf8),'FuRLP':function(_0xf28318,_0x472d8d){return _0xf28318(_0x472d8d);},'OAkAW':_0x143a37(0x142),'KPctA':'click','aFQZJ':_0x143a37(0xf5),'auSGs':function(_0x121367,_0x55df9e,_0x5a0b80){return _0x121367(_0x55df9e,_0x5a0b80);},'jzgOb':'fill','BjFiN':function(_0x2fe057,_0x422db2,_0x8d6e2e){return _0x2fe057(_0x422db2,_0x8d6e2e);},'LAtkY':'select\x20tab'};switch(_0x3abc74){case'open':{const _0x5f2c8b=_0x3868e8['NPUQz'](extractFirstCommandArgument,_0x571fd8,_0x3abc74);return _0x5f2c8b?'open\x20'+_0x5f2c8b:_0x3868e8['Fzduh'];}case _0x143a37(0xf2):return _0x3868e8[_0x143a37(0x115)];case _0x3868e8['wcWNO']:return _0x3868e8[_0x143a37(0xe2)];case _0x3868e8['kIBFP']:return _0x3868e8[_0x143a37(0x148)];case _0x143a37(0x131):return _0x3868e8['LXOtH'];case'snapshot':{const _0x10acb5=_0x3868e8['FuRLP'](extractFilenameOption,_0x571fd8);if(!_0x10acb5)return _0x143a37(0x159);const {name:_0x116209}=toStepDisplayName(_0x10acb5);return'capture\x20snapshot\x20`'+_0x116209+'`';}case _0x3868e8['OAkAW']:{const _0x31e280=extractFilenameOption(_0x571fd8);if(!_0x31e280)return'capture\x20screenshot';const {name:_0x29f70a,isKeyStep:_0x44903b}=_0x3868e8['FuRLP'](toStepDisplayName,_0x31e280);return _0x44903b?_0x143a37(0x13f)+_0x29f70a+'`':_0x143a37(0x11e)+_0x29f70a+'`';}case _0x3868e8[_0x143a37(0xfd)]:return'click\x20'+formatCommandTarget(extractFirstCommandArgument(_0x571fd8,_0x3abc74));case _0x3868e8[_0x143a37(0x144)]:return _0x143a37(0x155)+formatCommandTarget(_0x3868e8[_0x143a37(0xea)](extractFirstCommandArgument,_0x571fd8,_0x3abc74));case _0x3868e8['jzgOb']:return _0x143a37(0xfc)+formatCommandTarget(_0x3868e8['BjFiN'](extractFirstCommandArgument,_0x571fd8,_0x3abc74));case _0x143a37(0x124):return'press\x20'+formatCommandTarget(extractFirstCommandArgument(_0x571fd8,_0x3abc74));case _0x143a37(0x120):return _0x143a37(0xdf);case _0x143a37(0xec):{const _0x49dfb7=extractFirstCommandArgument(_0x571fd8,_0x3abc74);return _0x49dfb7?'open\x20new\x20tab\x20'+_0x49dfb7:_0x143a37(0x108);}case _0x143a37(0x126):{const _0x3c8f60=extractFirstCommandArgument(_0x571fd8,_0x3abc74);return _0x3c8f60?'select\x20tab\x20'+_0x3c8f60:_0x3868e8['LAtkY'];}default:return _0x3abc74;}}function extractPlaywrightCliToolDescription(_0x2ae9df){const _0x5a8188=_0x26be,_0x20618f={'FHOLC':function(_0x409f45,_0x1baea1){return _0x409f45>_0x1baea1;}},_0x35f90d=_0x2ae9df[_0x5a8188(0x11c)];if(typeof _0x35f90d!==_0x5a8188(0xeb))return null;const _0x54d67d=_0x35f90d[_0x5a8188(0x111)]()[_0x5a8188(0x107)](/\s+/g,'\x20');return _0x20618f['FHOLC'](_0x54d67d['length'],0x0)?_0x54d67d:null;}export function formatPlaywrightCliConsoleLogMessage(_0x2db66e,_0x279a75,_0x91ba80){const _0x5517b8=_0x26be,_0x5763dc={'CDWbE':function(_0x222295,_0x1cf333,_0x5daf41){return _0x222295(_0x1cf333,_0x5daf41);}},_0x7d4b55=_0x5763dc[_0x5517b8(0x128)](formatPlaywrightCliLog,_0x279a75,_0x91ba80),_0x27b499=extractPlaywrightCliToolDescription(_0x2db66e);if(!_0x27b499)return _0x5517b8(0x10c)+_0x7d4b55;if(process[_0x5517b8(0x129)][_0x5517b8(0xd9)])return'[ranger-verification-agent]\x20'+_0x27b499+'\x20('+_0x7d4b55+')';return _0x5517b8(0xfa)+_0x27b499;}export function buildVerifyFeatureCliDebugPrompt(_0x446c14,_0x4e8642){const _0x387820=_0x26be,_0xb1c2cb={'NvMjh':_0x387820(0x13a),'fFjhd':function(_0x5f561b,_0x28e11a,_0x1926da){return _0x5f561b(_0x28e11a,_0x1926da);},'QcsZt':_0x387820(0xd3),'HgUlj':'02_learn-more.yml','tCPni':function(_0x3d45da,_0x57c7cf,_0x3e08be){return _0x3d45da(_0x57c7cf,_0x3e08be);},'lRZJT':_0x387820(0x12e),'wmoLi':function(_0x291ea5,_0x3fc43f){return _0x291ea5(_0x3fc43f);},'MeoVM':function(_0x5e7e06,_0x8ecee2){return _0x5e7e06(_0x8ecee2);}},_0x29a9ec=buildCliArtifactPath(_0x4e8642,_0xb1c2cb[_0x387820(0x101)]),_0x2c5edd=_0xb1c2cb['fFjhd'](buildCliArtifactPath,_0x4e8642,_0xb1c2cb['QcsZt']),_0x37ff51=buildCliArtifactPath(_0x4e8642,_0xb1c2cb[_0x387820(0x122)]),_0x58b430=_0xb1c2cb[_0x387820(0x123)](buildCliArtifactPath,_0x4e8642,_0xb1c2cb['lRZJT']),_0x2b8e2b=quoteShellArg(_0x29a9ec),_0x532a52=_0xb1c2cb[_0x387820(0xe4)](quoteShellArg,_0x2c5edd),_0x352b46=quoteShellArg(_0x37ff51),_0x3392b7=_0xb1c2cb[_0x387820(0x156)](quoteShellArg,_0x58b430);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x446c14+'\x0a\x0a1.\x20Run\x20`'+_0x446c14+'\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`'+_0x446c14+_0x387820(0xf4)+_0x446c14+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x4e8642+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x446c14+'\x20snapshot\x20--filename\x20'+_0x2b8e2b+_0x387820(0xda)+_0x446c14+'\x20screenshot\x20--filename\x20'+_0x532a52+_0x387820(0x100)+_0x446c14+_0x387820(0x139)+_0x352b46+_0x387820(0x10e)+_0x446c14+'\x20screenshot\x20--filename\x20'+_0x3392b7+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0x2076c5){const _0x580922=_0x26be,_0x397e3d={'mBrkO':_0x580922(0x152),'XvIRW':_0x580922(0x150),'BPPMl':'element','TAOsn':function(_0x2cebfe,_0x2355f6,_0x2f6cc5){return _0x2cebfe(_0x2355f6,_0x2f6cc5);},'akubl':'01_initial.yml','eFnSG':'02_state.yml','yogAD':'key_03_success-state.png','yGmQk':'01_initial-state.png','xvkGT':function(_0x186b0c,_0x170fe1){return _0x186b0c(_0x170fe1);},'yAGEA':function(_0xe55b1c,_0x198698){return _0xe55b1c>_0x198698;},'toELz':function(_0x975a39,_0x495c8f,_0x1c943e){return _0x975a39(_0x495c8f,_0x1c943e);},'MqyIY':_0x580922(0x154),'NSxaV':_0x580922(0x10f)},{checklistItem:_0x44c832,itemFeedback:_0x4a6546,taskDescription:_0x519100,cliCommandPrefix:_0x230385,cliArtifactDir:_0x9464d6,isCdpMode:_0x152792,url:_0x125434,cdpEndpoint:_0x263187,loginInstructions:_0xb985e1}=_0x2076c5,_0x273660=_0x397e3d[_0x580922(0x145)](buildCliArtifactPath,_0x9464d6,_0x397e3d[_0x580922(0xd5)]),_0x1520cd=_0x397e3d[_0x580922(0x145)](buildCliArtifactPath,_0x9464d6,_0x397e3d['eFnSG']),_0x450c8b=buildCliArtifactPath(_0x9464d6,_0x397e3d[_0x580922(0x110)]),_0x12dd2e=buildCliArtifactPath(_0x9464d6,_0x397e3d[_0x580922(0x12b)]),_0x1a489b=quoteShellArg(_0x273660),_0x2e8746=_0x397e3d['xvkGT'](quoteShellArg,_0x1520cd),_0x1dba3e=quoteShellArg(_0x450c8b),_0x5ff42d=_0x397e3d['xvkGT'](quoteShellArg,_0x12dd2e),_0x366b8c=_0x44c832[_0x580922(0xef)]?_0x580922(0x10d)+_0x44c832[_0x580922(0xef)]:'';let _0x2c0ee6='';if(_0x4a6546&&_0x397e3d[_0x580922(0x137)](_0x4a6546[_0x580922(0x153)][_0x580922(0x14c)],0x0)){const _0x3db5ba=_0x4a6546[_0x580922(0x153)][_0x580922(0x116)](_0x1ffc97=>{const _0x1a77fe=_0x580922,_0x52da55=new Date(_0x1ffc97['createdAt'])[_0x1a77fe(0x106)](_0x397e3d['mBrkO'],{'month':'short','day':'numeric'}),_0x3d7cd3=_0x1ffc97[_0x1a77fe(0xd4)]||_0x1ffc97[_0x1a77fe(0x102)]||_0x397e3d['XvIRW'],_0x3d9fd7=_0x1ffc97[_0x1a77fe(0xe5)]?_0x1a77fe(0xe1)+(_0x1ffc97['domRef'][_0x1a77fe(0x14a)][_0x1a77fe(0x140)](_0x1a77fe(0x11b))['pop']()?.['split'](':')[0x0]||_0x397e3d['BPPMl'])+'>\x20\x22'+(_0x1ffc97['domRef']['textContent']||'')[_0x1a77fe(0xd8)](0x0,0x32)+'\x22)':'';return'-\x20['+_0x1ffc97['id']+']\x20**'+_0x3d7cd3+_0x1a77fe(0x158)+_0x52da55+_0x1a77fe(0x15b)+_0x1ffc97['content']+'\x22'+_0x3d9fd7;})['join']('\x0a');_0x2c0ee6='\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'+_0x3db5ba;}const _0x34cc45=_0x4a6546?.[_0x580922(0x136)]?_0x580922(0x14b)+_0x4a6546['canonicalFlow']:'',_0x3946ff=_0x152792?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x263187+_0x580922(0x146):_0x580922(0x13c)+_0x125434+_0x580922(0xfb),_0x1b9d5e=_0x125434?_0x397e3d['xvkGT'](quoteShellArg,_0x125434):'',_0x3140d2=_0x152792?_0x580922(0x105)+_0x230385+'\x20open`,\x20then\x20`'+_0x230385+'\x20tracing-start`,\x20then\x20`'+_0x230385+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x9464d6+_0x580922(0xde)+_0x230385+'\x20snapshot\x20--filename\x20'+_0x1a489b+_0x580922(0x151)+_0x230385+'\x20screenshot\x20--filename\x20'+_0x5ff42d+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x230385+'\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':_0x580922(0x105)+_0x230385+'\x20open\x20'+_0x1b9d5e+'`,\x20then\x20`'+_0x230385+'\x20tracing-start`,\x20then\x20`'+_0x230385+_0x580922(0xdd)+_0x9464d6+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x230385+'\x20snapshot\x20--filename\x20'+_0x1a489b+_0x580922(0x141)+_0x230385+'\x20screenshot\x20--filename\x20'+_0x5ff42d+_0x580922(0x130)+_0x230385+'\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',_0x2bc6c3=_0x152792?'\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.',_0xfd4a11=_0xb985e1?_0x580922(0x13d)+_0xb985e1+_0x580922(0x13e):'';return _0x580922(0x11f)+_0x44c832[_0x580922(0x11c)]+_0x366b8c+_0x2c0ee6+_0x34cc45+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x519100+'\x0a\x0a'+_0x3946ff+_0xfd4a11+'\x0a\x0a'+_0x3140d2+_0x580922(0x147)+_0x230385+'`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`'+_0x9464d6+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x2e8746+_0x580922(0x143)+_0x1dba3e+_0x580922(0x14d)+_0x9464d6+_0x580922(0xdc)+_0x12dd2e+'\x22,\x20\x22'+buildCliArtifactPath(_0x9464d6,'02_button-clicked.png')+'\x22,\x20\x22'+_0x397e3d[_0x580922(0xe7)](buildCliArtifactPath,_0x9464d6,_0x397e3d['MqyIY'])+_0x580922(0x15c)+buildCliArtifactPath(_0x9464d6,_0x397e3d['NSxaV'])+'\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'+_0x2bc6c3+_0x580922(0x157);}export function summarizeVerifyFeatureCliCommandAvailability(_0x5a300d){const _0x4e8728=_0x26be,_0xdb7dbc={'QHadb':function(_0x238b00,_0x45c66a){return _0x238b00===_0x45c66a;}},_0x4e9675=[..._0x5a300d[_0x4e8728(0x127)]()]['sort']();let _0xe841a8=0x0;for(const _0x2fa4a2 of _0x5a300d['values']()){_0xe841a8+=_0x2fa4a2;}return{'cliCommandCount':_0xe841a8,'cliCommandsSeen':_0x4e9675,'noCliCommandsCalled':_0xdb7dbc[_0x4e8728(0xdb)](_0xe841a8,0x0)};}export function createVerifyFeatureCliHooks(_0x32f160){const _0x1ca55f=_0x26be,_0x417351={'oQCXF':function(_0x3a8dae,_0x55423b){return _0x3a8dae!==_0x55423b;},'HyWeN':'Bash','xeBvW':function(_0x104df7,_0x558e87){return _0x104df7+_0x558e87;},'JNown':_0x1ca55f(0x10a),'YVqsS':_0x1ca55f(0xf9),'llnEq':function(_0x4f444c,_0x3d6fc3,_0x1cbebb,_0x4e022e){return _0x4f444c(_0x3d6fc3,_0x1cbebb,_0x4e022e);},'lsUmE':'PostToolUseFailure','asESe':'tool_failure'},_0x391c0b=new Map(),_0x2dc6b2=async _0x528ea7=>{const _0x2d229=_0x1ca55f;if(_0x417351['oQCXF'](_0x528ea7[_0x2d229(0x13b)],'PostToolUse'))return{};const _0x296fea=_0x528ea7;if(_0x296fea['tool_name']!==_0x417351['HyWeN'])return{};const _0xcaf76b=_0x296fea[_0x2d229(0x112)],_0x43413b=extractBashCommand(_0xcaf76b);if(!_0x43413b)return{};const _0x19810d=parsePlaywrightCliCommand(_0x43413b);if(!_0x19810d)return{};return _0x391c0b[_0x2d229(0xfe)](_0x19810d,_0x417351[_0x2d229(0xf6)](_0x391c0b[_0x2d229(0xd7)](_0x19810d)||0x0,0x1)),_0x32f160['trackPhaseStart'](_0x2d229(0x149),{'transport':_0x2d229(0x10a),'toolName':_0x19810d}),_0x32f160['trackPhaseEnd']('tool_call',{'transport':_0x417351[_0x2d229(0xe0)],'toolName':_0x19810d,'bashCommandPreview':truncatePreview(_0x43413b)}),_0x19810d!==_0x417351[_0x2d229(0xe8)]&&console[_0x2d229(0x134)](_0x417351['llnEq'](formatPlaywrightCliConsoleLogMessage,_0xcaf76b,_0x43413b,_0x19810d)),{};},_0x2983f3=async _0x8f9f0f=>{const _0x1b5c39=_0x1ca55f;if(_0x8f9f0f['hook_event_name']!==_0x417351['lsUmE'])return{};const _0x29bee7=_0x8f9f0f;if(_0x417351[_0x1b5c39(0x118)](_0x29bee7['tool_name'],_0x1b5c39(0x125)))return{};return await _0x32f160['trackPhaseError'](_0x417351['asESe'],_0x29bee7[_0x1b5c39(0x12c)],{'transport':_0x1b5c39(0x10a),'toolName':_0x1b5c39(0x125)}),{};};return{'postToolUseHook':_0x2dc6b2,'postToolUseFailureHook':_0x2983f3,'commandCounts':_0x391c0b};}function _0x26be(_0x2d59ca,_0x45574b){_0x2d59ca=_0x2d59ca-0xd3;const _0x3317ff=_0x3317();let _0x26be7e=_0x3317ff[_0x2d59ca];return _0x26be7e;}async function runPlaywrightCliLifecycleCommand(_0x4c9486){const _0x103fcb=_0x26be,_0x331eb7={'udHYL':function(_0x5230db,_0x401890,_0x2516fe){return _0x5230db(_0x401890,_0x2516fe);}},{sessionId:_0x57c0d4,configPath:_0x3b1cae,commandArgs:_0x295904,env:_0x10e269,telemetry:_0x1a5f48,phase:_0x2e0fbd,metadata:_0x480c44,timeoutMs:_0x12ca9e}=_0x4c9486;_0x1a5f48['trackPhaseStart'](_0x2e0fbd,_0x480c44);try{const _0x2d6779=await runPlaywrightCliCommand({'sessionId':_0x57c0d4,'configPath':_0x3b1cae,'commandArgs':_0x295904,'cwd':process['cwd'](),'env':_0x10e269,'timeoutMs':_0x12ca9e??PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS});_0x1a5f48['trackPhaseEnd'](_0x2e0fbd,{..._0x480c44,'subcommand':_0x2d6779[_0x103fcb(0x121)][_0x103fcb(0x15d)],'stdoutPreview':_0x331eb7['udHYL'](truncatePreview,_0x2d6779[_0x103fcb(0x113)],0x7d0),'stderrPreview':truncatePreview(_0x2d6779[_0x103fcb(0x138)],0x7d0)});}catch(_0x3000db){await _0x1a5f48['trackPhaseError'](_0x2e0fbd,_0x3000db,_0x480c44);throw _0x3000db;}}export async function finalizeVerifyFeatureCliSession(_0x418d7d){const _0x51a955=_0x26be,_0x50a749={'PqDtP':'video-stop','nbFPj':function(_0x209c2a,_0xb2b38b,_0x36ede7){return _0x209c2a(_0xb2b38b,_0x36ede7);},'KYwtG':_0x51a955(0x10b),'AOCWk':_0x51a955(0xf1),'HYcaM':'close'},{telemetry:_0x318ae9,sessionId:_0x2a0bac,configPath:_0x46c353,cliArtifactDir:_0x11e584,env:_0x2527a3,transportMetadata:_0x226391}=_0x418d7d,_0x1520f5=[{'phase':'playwright_cli_tracing_stop','commandArgs':['tracing-stop']},{'phase':'playwright_cli_video_stop','commandArgs':[_0x50a749[_0x51a955(0x15a)],'--filename='+_0x50a749['nbFPj'](buildCliArtifactPath,_0x11e584,_0x50a749['KYwtG'])]},{'phase':_0x50a749['AOCWk'],'commandArgs':[_0x50a749['HYcaM']]}];for(const _0x19c89f of _0x1520f5){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x2a0bac,'configPath':_0x46c353,'commandArgs':[..._0x19c89f[_0x51a955(0x117)]],'env':_0x2527a3,'telemetry':_0x318ae9,'phase':_0x19c89f[_0x51a955(0xf7)],'metadata':_0x226391});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x25eb95){const _0x54bc10={'mbjaP':'trace.zip','KNqYR':function(_0x511ac7,_0x116522,_0x48af02){return _0x511ac7(_0x116522,_0x48af02);}},_0x255f4b=[_0x54bc10['mbjaP'],'trace.trace.zip'];for(const _0x251c1a of _0x255f4b){const _0x3dc3c5=_0x54bc10['KNqYR'](join,_0x25eb95,_0x251c1a);try{return{'buffer':await readFile(_0x3dc3c5),'source':_0x3dc3c5};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x40908f){const _0x569864=_0x26be,_0x4403ab={'AexjV':function(_0x5a1f6f,_0x1f27ab,_0x19b7fa){return _0x5a1f6f(_0x1f27ab,_0x19b7fa);},'gngtM':function(_0x44cf38,_0x4c7484){return _0x44cf38(_0x4c7484);},'qarFW':function(_0x72d43f,_0x18956a){return _0x72d43f<_0x18956a;},'CttUJ':function(_0x56f222,_0x47cb15){return _0x56f222+_0x47cb15;},'JDQkk':function(_0x259780,_0x437b3f,_0xac52e3){return _0x259780(_0x437b3f,_0xac52e3);}},{cwd:_0x1503a7,cliArtifactDir:_0x514ef2,startTime:_0x156186}=_0x40908f,_0x3e59cc=[];await mkdir(_0x514ef2,{'recursive':!![]});const _0x3e74ea=await _0x4403ab[_0x569864(0xf3)](readdir,_0x1503a7,{'withFileTypes':!![]});for(const _0x3e4150 of _0x3e74ea){if(!_0x3e4150['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x3e4150[_0x569864(0x11a)]))continue;const _0x2141b5=join(_0x1503a7,_0x3e4150['name']),_0x439be0=await _0x4403ab['gngtM'](stat,_0x2141b5);if(_0x4403ab['qarFW'](_0x4403ab['CttUJ'](_0x439be0[_0x569864(0x133)],0x7d0),_0x156186))continue;const _0x17edd1=_0x4403ab[_0x569864(0xf3)](buildCliArtifactPath,_0x514ef2,_0x3e4150[_0x569864(0x11a)]);if(_0x2141b5===_0x17edd1)continue;await _0x4403ab['JDQkk'](rename,_0x2141b5,_0x17edd1),_0x3e59cc[_0x569864(0xee)](_0x3e4150['name']);}return _0x3e59cc['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,38 +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
|
|
12
26
|
|
|
13
|
-
|
|
27
|
+
If `go` returns a 422 / login-failed, automated login probably isn't set up for this account. Fall back in this order:
|
|
28
|
+
|
|
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
|
|
32
|
+
|
|
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:
|
|
14
38
|
|
|
15
39
|
```bash
|
|
16
|
-
|
|
17
|
-
ranger-cli go --url <target> --notes '<what to verify>'
|
|
40
|
+
ranger-cli go --scenario <N> --notes "<what to verify>"
|
|
18
41
|
```
|
|
19
42
|
|
|
20
|
-
|
|
43
|
+
## Profile resolution order
|
|
21
44
|
|
|
22
45
|
1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
|
|
23
46
|
2. Saved active profile (`ranger-cli profile use <name>`)
|
|
24
47
|
3. `RANGER_TEST_USERNAME` (reuses or creates a matching profile)
|
|
25
48
|
4. The org's sole profile when exactly one exists
|
|
26
49
|
|
|
27
|
-
##
|
|
50
|
+
## Active feature review (only needed for scenario-driven runs)
|
|
28
51
|
|
|
29
|
-
|
|
52
|
+
If you're verifying a scenario (not a one-shot):
|
|
30
53
|
|
|
31
54
|
```bash
|
|
32
55
|
ranger-cli list # Find feature reviews to resume
|
|
33
56
|
ranger-cli resume <id> # Resume a specific feature review
|
|
34
57
|
```
|
|
35
58
|
|
|
59
|
+
For a one-shot `go --base-url ... --notes '...'`, the CLI handles feature-review creation for you.
|
|
60
|
+
|
|
36
61
|
## The Verification Flow
|
|
37
62
|
|
|
38
63
|
1. **Select scenario** - CLI prompts which scenario this verifies
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ranger-testing/ranger-cli",
|
|
3
|
-
"version": "2.5.4-alpha.
|
|
3
|
+
"version": "2.5.4-alpha.5f9facb-17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ranger": "./build/cli.js",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"overrides": {
|
|
43
43
|
"minimatch": "^10.2.3",
|
|
44
|
-
"brace-expansion": "^5.0.5"
|
|
44
|
+
"brace-expansion": "^5.0.5",
|
|
45
|
+
"fast-uri": "3.1.2"
|
|
45
46
|
}
|
|
46
47
|
}
|