@ranger-testing/ranger-cli 2.5.4-alpha.f6504c0-8 → 2.5.4-alpha.feb9faf-20
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(_0x3d2e50,_0x42d17d){const _0x2aab7b=_0x4dc5,_0xefc70a=_0x3d2e50();while(!![]){try{const _0x3040f6=-parseInt(_0x2aab7b(0x192))/0x1+parseInt(_0x2aab7b(0x164))/0x2*(parseInt(_0x2aab7b(0x1dc))/0x3)+parseInt(_0x2aab7b(0x1a2))/0x4+parseInt(_0x2aab7b(0x1bd))/0x5+parseInt(_0x2aab7b(0x189))/0x6*(-parseInt(_0x2aab7b(0x1e5))/0x7)+parseInt(_0x2aab7b(0x1b1))/0x8*(-parseInt(_0x2aab7b(0x1e3))/0x9)+parseInt(_0x2aab7b(0x1f2))/0xa;if(_0x3040f6===_0x42d17d)break;else _0xefc70a['push'](_0xefc70a['shift']());}catch(_0x2351ba){_0xefc70a['push'](_0xefc70a['shift']());}}}(_0x10f0,0xe2179));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 _0x10f0(){const _0x1168e1=['playwright_cli_video_stop','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','GDnGW','video-stop','Reviewer','\x20open\x20','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','stderr','capture\x20step\x20`','3367240bMdoek','en-US','6SRILcj','join','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','\x0a\x0aAfter\x20completing\x20authentication,\x20proceed\x20with\x20the\x20verification\x20task\x20below.\x0aIf\x20authentication\x20fails,\x20return\x20immediately\x20with\x20evaluation\x20\x22blocked\x22\x20and\x20describe\x20the\x20auth\x20failure.','open\x20browser','\x20snapshot\x20--filename\x20','capture\x20snapshot\x20`','press','textContent','JndgK','log','01_mozilla-homepage.png','shMoC','description','fill','Bash','\x20open`,\x20then\x20`','cwd','open\x20new\x20tab','\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','`\x0a-\x20`snapshot\x20--filename\x20','hook_event_name','AQsXb','GHHgW','`:\x20\x22','map','video-start','createdAt','tOtpU','YzClk','click\x20','DEBUG','xAbGa','rtPqK','invocation','element','string','30uUgymt','\x22,\x20\x22','select\x20tab\x20','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','trim','session-recording.webm','replace','stdout','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','523582NdXVzN','02_learn-more.yml','keys','ref\x20','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','check','key_04_success-state.png','trackPhaseError','jKnBz','NqUbi','\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','selector','MOEfF','KfUBq','length','tool_input','1808012QfwjAA','FqnwI','Klsoc','tab-select','match','\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.','Pthhw','snapshot','content','test','ZIcov','sSQNL','vvGkV','`\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`','split','2479312jaQvHy','playwright_cli_close','short','numeric','playwright-cli','subcommand','run\x20custom\x20Playwright\x20code','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','FXUXM','tool_call','close','eIPtP','4813750KFjDjm','error','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','`\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`','**\x20(','authorEmail','`,\x20then\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','slice','\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','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','set','...','ljEVz','name','--filename=','fill\x20','wdYmj','\x20>\x20','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','PqWPf','HsmOq','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','toLocaleDateString','mtimeMs','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','start\x20tracing','rgWPA','yyywa','phase','355077nEYNnK','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','click','\x20screenshot\x20--filename\x20','01_initial-state.png','lSBDC','domRef','9kwOnBp','trackPhaseEnd','485779sHjotp','xajwq','trace.trace.zip',']\x20**'];_0x10f0=function(){return _0x1168e1;};return _0x10f0();}function truncatePreview(_0x1c909c,_0x3a30f6=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x4ecb3b=_0x4dc5;return _0x1c909c[_0x4ecb3b(0x1a0)]>_0x3a30f6?_0x1c909c['slice'](0x0,_0x3a30f6)+_0x4ecb3b(0x1ca):_0x1c909c;}function buildCliArtifactPath(_0x236773,_0x3472e3){const _0x15a13={'VnSKL':function(_0x477bf1,_0x56acdc,_0x3a8bd0){return _0x477bf1(_0x56acdc,_0x3a8bd0);}};return _0x15a13['VnSKL'](join,_0x236773,_0x3472e3);}function _0x4dc5(_0x396d94,_0x4d1db0){_0x396d94=_0x396d94-0x164;const _0x10f00e=_0x10f0();let _0x4dc573=_0x10f00e[_0x396d94];return _0x4dc573;}function toStepDisplayName(_0x325e29){const _0x5c488b=_0x4dc5,_0x330651={'yyywa':function(_0x15a4f4,_0x334a3f){return _0x15a4f4(_0x334a3f);}},_0x32091d=basename(_0x325e29)[_0x5c488b(0x18f)](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')['replace'](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x32091d,'isKeyStep':/^key_/i[_0x5c488b(0x1ab)](_0x330651[_0x5c488b(0x1da)](basename,_0x325e29))};}function extractShellValue(_0x3d535d){if(!_0x3d535d)return null;return _0x3d535d[0x1]??_0x3d535d[0x2]??_0x3d535d[0x3]??null;}function extractFilenameOption(_0xab7dde){return extractShellValue(_0xab7dde['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x50bf85,_0x3b9be1){const _0xaca3a9=_0x4dc5,_0x398607=_0x3b9be1[_0xaca3a9(0x18f)](/[.*+?^${}()|[\]\\]/g,'\x5c$&');return extractShellValue(_0x50bf85[_0xaca3a9(0x1a6)](new RegExp('(?:^|\x5cs)'+_0x398607+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x4d9a54){const _0x867f2f=_0x4dc5,_0x2090a0={'WTHlt':'target'};if(!_0x4d9a54)return _0x2090a0['WTHlt'];if(/^e\d+$/i['test'](_0x4d9a54))return _0x867f2f(0x195)+_0x4d9a54;return JSON['stringify'](truncatePreview(_0x4d9a54,0x78));}function formatPlaywrightCliLog(_0x49e075,_0x2f27fd){const _0x313870=_0x4dc5,_0x45b207={'JndgK':function(_0x1414f6,_0x3cae33,_0x114e3b){return _0x1414f6(_0x3cae33,_0x114e3b);},'sfadj':'tracing-start','RvPUS':_0x313870(0x1d8),'xajwq':'stop\x20tracing','sSQNL':_0x313870(0x17e),'xAbGa':'start\x20video\x20recording','Mhtul':'stop\x20video\x20recording','shMoC':'capture\x20snapshot','HJQsN':'screenshot','Pthhw':'capture\x20screenshot','dmUid':_0x313870(0x172),'rtPqK':function(_0x5b46a3,_0x197439){return _0x5b46a3(_0x197439);},'eIPtP':_0x313870(0x16b),'rhePf':_0x313870(0x1b7)};switch(_0x2f27fd){case'open':{const _0x3c8a9b=_0x45b207['JndgK'](extractFirstCommandArgument,_0x49e075,_0x2f27fd);return _0x3c8a9b?'open\x20'+_0x3c8a9b:_0x313870(0x168);}case _0x45b207['sfadj']:return _0x45b207['RvPUS'];case'tracing-stop':return _0x45b207[_0x313870(0x1e6)];case _0x45b207[_0x313870(0x1ad)]:return _0x45b207[_0x313870(0x184)];case _0x313870(0x1ec):return _0x45b207['Mhtul'];case _0x313870(0x1a9):{const _0x159385=extractFilenameOption(_0x49e075);if(!_0x159385)return _0x45b207[_0x313870(0x170)];const {name:_0x227b51}=toStepDisplayName(_0x159385);return _0x313870(0x16a)+_0x227b51+'`';}case _0x45b207['HJQsN']:{const _0x1da8ba=extractFilenameOption(_0x49e075);if(!_0x1da8ba)return _0x45b207[_0x313870(0x1a8)];const {name:_0x79f4db,isKeyStep:_0x642648}=toStepDisplayName(_0x1da8ba);return _0x642648?'capture\x20key\x20step\x20`'+_0x79f4db+'`':_0x313870(0x1f1)+_0x79f4db+'`';}case _0x313870(0x1de):return _0x313870(0x182)+formatCommandTarget(_0x45b207['JndgK'](extractFirstCommandArgument,_0x49e075,_0x2f27fd));case _0x313870(0x197):return'check\x20'+formatCommandTarget(extractFirstCommandArgument(_0x49e075,_0x2f27fd));case _0x45b207['dmUid']:return _0x313870(0x1ce)+_0x45b207[_0x313870(0x185)](formatCommandTarget,extractFirstCommandArgument(_0x49e075,_0x2f27fd));case _0x45b207[_0x313870(0x1bc)]:return'press\x20'+formatCommandTarget(_0x45b207[_0x313870(0x16d)](extractFirstCommandArgument,_0x49e075,_0x2f27fd));case'run-code':return _0x45b207['rhePf'];case'tab-new':{const _0x5c4068=extractFirstCommandArgument(_0x49e075,_0x2f27fd);return _0x5c4068?'open\x20new\x20tab\x20'+_0x5c4068:_0x313870(0x176);}case _0x313870(0x1a5):{const _0x3fa5b7=_0x45b207[_0x313870(0x16d)](extractFirstCommandArgument,_0x49e075,_0x2f27fd);return _0x3fa5b7?_0x313870(0x18b)+_0x3fa5b7:'select\x20tab';}default:return _0x2f27fd;}}function extractPlaywrightCliToolDescription(_0x502100){const _0x39dd17=_0x4dc5,_0x357d24={'qsfPe':function(_0x27f78c,_0x528d65){return _0x27f78c>_0x528d65;}},_0x367e2d=_0x502100['description'];if(typeof _0x367e2d!==_0x39dd17(0x188))return null;const _0x3ad094=_0x367e2d[_0x39dd17(0x18d)]()[_0x39dd17(0x18f)](/\s+/g,'\x20');return _0x357d24['qsfPe'](_0x3ad094[_0x39dd17(0x1a0)],0x0)?_0x3ad094:null;}export function formatPlaywrightCliConsoleLogMessage(_0x353555,_0x511bd8,_0x182675){const _0x338162=_0x4dc5,_0x10b575={'FqnwI':function(_0x18a50b,_0x5dbc50){return _0x18a50b(_0x5dbc50);}},_0x2a0fd8=formatPlaywrightCliLog(_0x511bd8,_0x182675),_0x26cf10=_0x10b575[_0x338162(0x1a3)](extractPlaywrightCliToolDescription,_0x353555);if(!_0x26cf10)return'[playwright-cli]\x20'+_0x2a0fd8;if(process['env'][_0x338162(0x183)])return'[ranger-verification-agent]\x20'+_0x26cf10+'\x20('+_0x2a0fd8+')';return'[ranger-verification-agent]\x20'+_0x26cf10;}export function buildVerifyFeatureCliDebugPrompt(_0x45a5d0,_0x20857b){const _0x283d63=_0x4dc5,_0x43d9dc={'Unqwv':'00_mozilla-homepage.yml','lSBDC':function(_0x8e4e38,_0x28deb1,_0xc2afcb){return _0x8e4e38(_0x28deb1,_0xc2afcb);},'pUGZK':function(_0x32343a,_0x432aba,_0x16abac){return _0x32343a(_0x432aba,_0x16abac);},'rgWPA':'03_learn-more.png','akcYH':function(_0x587546,_0x2f87f9){return _0x587546(_0x2f87f9);},'Mepzd':function(_0x349b77,_0x1979fa){return _0x349b77(_0x1979fa);},'tJkby':function(_0x11f6a3,_0x365024){return _0x11f6a3(_0x365024);}},_0x1c6d64=buildCliArtifactPath(_0x20857b,_0x43d9dc['Unqwv']),_0xd86262=_0x43d9dc[_0x283d63(0x1e1)](buildCliArtifactPath,_0x20857b,_0x283d63(0x16f)),_0x5676ad=_0x43d9dc['pUGZK'](buildCliArtifactPath,_0x20857b,_0x283d63(0x193)),_0x47cb67=buildCliArtifactPath(_0x20857b,_0x43d9dc[_0x283d63(0x1d9)]),_0x7ffffe=_0x43d9dc['akcYH'](quoteShellArg,_0x1c6d64),_0x547a13=quoteShellArg(_0xd86262),_0x4bca35=_0x43d9dc['Mepzd'](quoteShellArg,_0x5676ad),_0x473d88=_0x43d9dc['tJkby'](quoteShellArg,_0x47cb67);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x45a5d0+'\x0a\x0a1.\x20Run\x20`'+_0x45a5d0+_0x283d63(0x1ef)+_0x45a5d0+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x45a5d0+_0x283d63(0x1d1)+_0x20857b+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x45a5d0+_0x283d63(0x169)+_0x7ffffe+_0x283d63(0x191)+_0x45a5d0+_0x283d63(0x1df)+_0x547a13+_0x283d63(0x1b8)+_0x45a5d0+_0x283d63(0x169)+_0x4bca35+'`\x0a9.\x20Run\x20`'+_0x45a5d0+_0x283d63(0x1df)+_0x473d88+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0x5756d2){const _0x24cb39=_0x4dc5,_0xbc7d02={'VLWFr':_0x24cb39(0x1b4),'UyzDL':_0x24cb39(0x187),'PqWPf':function(_0x4d9ff9,_0x3edaaf,_0x5c20e6){return _0x4d9ff9(_0x3edaaf,_0x5c20e6);},'xBymD':function(_0x1d6cf0,_0x2e1ad7){return _0x1d6cf0(_0x2e1ad7);},'tOJYG':function(_0x1f7f76,_0x5d10be){return _0x1f7f76(_0x5d10be);},'ZXuok':_0x24cb39(0x198)},{checklistItem:_0x1041b1,itemFeedback:_0x23ad59,taskDescription:_0x2ecf08,cliCommandPrefix:_0x3568d7,cliArtifactDir:_0x13d7c0,isCdpMode:_0x27dc1d,url:_0x1d5676,cdpEndpoint:_0x318fd4,loginInstructions:_0x173a62}=_0x5756d2,_0x2b5e33=_0xbc7d02[_0x24cb39(0x1d2)](buildCliArtifactPath,_0x13d7c0,'01_initial.yml'),_0x17de28=buildCliArtifactPath(_0x13d7c0,'02_state.yml'),_0x2d3ac6=buildCliArtifactPath(_0x13d7c0,'key_03_success-state.png'),_0x37a592=_0xbc7d02[_0x24cb39(0x1d2)](buildCliArtifactPath,_0x13d7c0,_0x24cb39(0x1e0)),_0x3d59a6=_0xbc7d02['xBymD'](quoteShellArg,_0x2b5e33),_0x85f1de=quoteShellArg(_0x17de28),_0x242b27=quoteShellArg(_0x2d3ac6),_0x92dd52=_0xbc7d02['tOJYG'](quoteShellArg,_0x37a592),_0x228123=_0x1041b1['notes']?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x1041b1['notes']:'';let _0x4983d8='';if(_0x23ad59&&_0x23ad59['unaddressedComments'][_0x24cb39(0x1a0)]>0x0){const _0x1a9865=_0x23ad59['unaddressedComments'][_0x24cb39(0x17d)](_0x30cccd=>{const _0x4ffafa=_0x24cb39,_0x172fa8=new Date(_0x30cccd[_0x4ffafa(0x17f)])[_0x4ffafa(0x1d5)](_0x4ffafa(0x1f3),{'month':_0x4ffafa(0x1b3),'day':_0xbc7d02['VLWFr']}),_0x3a9a7b=_0x30cccd['authorName']||_0x30cccd[_0x4ffafa(0x1c3)]||_0x4ffafa(0x1ed),_0x549a23=_0x30cccd['domRef']?'\x20(on\x20element:\x20<'+(_0x30cccd[_0x4ffafa(0x1e2)][_0x4ffafa(0x19d)][_0x4ffafa(0x1b0)](_0x4ffafa(0x1d0))['pop']()?.[_0x4ffafa(0x1b0)](':')[0x0]||_0xbc7d02['UyzDL'])+'>\x20\x22'+(_0x30cccd[_0x4ffafa(0x1e2)][_0x4ffafa(0x16c)]||'')[_0x4ffafa(0x1c6)](0x0,0x32)+'\x22)':'';return'-\x20['+_0x30cccd['id']+_0x4ffafa(0x1e8)+_0x3a9a7b+_0x4ffafa(0x1c2)+_0x172fa8+'):\x20\x22'+_0x30cccd[_0x4ffafa(0x1aa)]+'\x22'+_0x549a23;})[_0x24cb39(0x165)]('\x0a');_0x4983d8='\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'+_0x1a9865;}const _0x29693a=_0x23ad59?.['canonicalFlow']?_0x24cb39(0x1ea)+_0x23ad59['canonicalFlow']:'',_0x24dbcc=_0x27dc1d?_0x24cb39(0x1c0)+_0x318fd4+_0x24cb39(0x1c8):'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x1d5676+_0x24cb39(0x177),_0x361a84=_0x1d5676?quoteShellArg(_0x1d5676):'',_0x487210=_0x27dc1d?_0x24cb39(0x18c)+_0x3568d7+_0x24cb39(0x174)+_0x3568d7+'\x20tracing-start`,\x20then\x20`'+_0x3568d7+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x13d7c0+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x3568d7+_0x24cb39(0x169)+_0x3d59a6+'`\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`'+_0x3568d7+'\x20screenshot\x20--filename\x20'+_0x92dd52+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x3568d7+_0x24cb39(0x19c):_0x24cb39(0x18c)+_0x3568d7+_0x24cb39(0x1ee)+_0x361a84+_0x24cb39(0x1c4)+_0x3568d7+'\x20tracing-start`,\x20then\x20`'+_0x3568d7+_0x24cb39(0x1dd)+_0x13d7c0+_0x24cb39(0x196)+_0x3568d7+'\x20snapshot\x20--filename\x20'+_0x3d59a6+_0x24cb39(0x1c1)+_0x3568d7+'\x20screenshot\x20--filename\x20'+_0x92dd52+_0x24cb39(0x1d7)+_0x3568d7+'\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',_0x11a2de=_0x27dc1d?'\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.':_0x24cb39(0x1a7),_0x1f2643=_0x173a62?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x173a62+_0x24cb39(0x167):'';return _0x24cb39(0x1d4)+_0x1041b1[_0x24cb39(0x171)]+_0x228123+_0x4983d8+_0x29693a+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x2ecf08+'\x0a\x0a'+_0x24dbcc+_0x1f2643+'\x0a\x0a'+_0x487210+_0x24cb39(0x1bf)+_0x3568d7+_0x24cb39(0x166)+_0x13d7c0+_0x24cb39(0x178)+_0x85f1de+'`\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'+_0x242b27+_0x24cb39(0x1af)+_0x13d7c0+_0x24cb39(0x17c)+_0x37a592+'\x22,\x20\x22'+_0xbc7d02[_0x24cb39(0x1d2)](buildCliArtifactPath,_0x13d7c0,'02_button-clicked.png')+_0x24cb39(0x18a)+buildCliArtifactPath(_0x13d7c0,'03_result-visible.png')+_0x24cb39(0x1c5)+_0xbc7d02['PqWPf'](buildCliArtifactPath,_0x13d7c0,_0xbc7d02['ZXuok'])+_0x24cb39(0x1c7)+_0x11a2de+'\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(_0x2ec9f7){const _0xe1a91a=_0x4dc5,_0x5a768a=[..._0x2ec9f7[_0xe1a91a(0x194)]()]['sort']();let _0x371733=0x0;for(const _0x50e3a0 of _0x2ec9f7['values']()){_0x371733+=_0x50e3a0;}return{'cliCommandCount':_0x371733,'cliCommandsSeen':_0x5a768a,'noCliCommandsCalled':_0x371733===0x0};}export function createVerifyFeatureCliHooks(_0x493285){const _0x37b4af=_0x4dc5,_0x378d65={'vvGkV':function(_0x4b48a6,_0x512a31){return _0x4b48a6!==_0x512a31;},'AUGdL':'PostToolUse','MOEfF':function(_0x340cb5,_0x301e7a){return _0x340cb5!==_0x301e7a;},'YzClk':function(_0x332e3b,_0x485160){return _0x332e3b(_0x485160);},'MHzcJ':function(_0x128127,_0x4d1a82){return _0x128127+_0x4d1a82;},'Klsoc':_0x37b4af(0x1b5),'eegUf':_0x37b4af(0x1ba),'oxxlX':function(_0x51fc6d,_0x57d010){return _0x51fc6d!==_0x57d010;},'fyGEQ':'snapshot','wdYmj':'PostToolUseFailure','exCXz':function(_0xe8dfb,_0xc2dca8){return _0xe8dfb!==_0xc2dca8;},'tOtpU':'Bash','wYTrM':'tool_failure'},_0x292210=new Map(),_0xfe71fe=async _0x577f06=>{const _0x1f88c8=_0x37b4af;if(_0x378d65['vvGkV'](_0x577f06[_0x1f88c8(0x179)],_0x378d65['AUGdL']))return{};const _0x46c2a7=_0x577f06;if(_0x378d65[_0x1f88c8(0x19e)](_0x46c2a7['tool_name'],_0x1f88c8(0x173)))return{};const _0x57473b=_0x46c2a7[_0x1f88c8(0x1a1)],_0x42097d=extractBashCommand(_0x57473b);if(!_0x42097d)return{};const _0x277be5=_0x378d65[_0x1f88c8(0x181)](parsePlaywrightCliCommand,_0x42097d);if(!_0x277be5)return{};return _0x292210[_0x1f88c8(0x1c9)](_0x277be5,_0x378d65['MHzcJ'](_0x292210['get'](_0x277be5)||0x0,0x1)),_0x493285['trackPhaseStart']('tool_call',{'transport':_0x378d65['Klsoc'],'toolName':_0x277be5}),_0x493285[_0x1f88c8(0x1e4)](_0x378d65['eegUf'],{'transport':_0x378d65[_0x1f88c8(0x1a4)],'toolName':_0x277be5,'bashCommandPreview':truncatePreview(_0x42097d)}),_0x378d65['oxxlX'](_0x277be5,_0x378d65['fyGEQ'])&&console[_0x1f88c8(0x16e)](formatPlaywrightCliConsoleLogMessage(_0x57473b,_0x42097d,_0x277be5)),{};},_0x5357cc=async _0x3421fe=>{const _0x32b398=_0x37b4af;if(_0x378d65[_0x32b398(0x1ae)](_0x3421fe['hook_event_name'],_0x378d65[_0x32b398(0x1cf)]))return{};const _0x54a67e=_0x3421fe;if(_0x378d65['exCXz'](_0x54a67e['tool_name'],_0x378d65[_0x32b398(0x180)]))return{};return await _0x493285['trackPhaseError'](_0x378d65['wYTrM'],_0x54a67e[_0x32b398(0x1be)],{'transport':_0x378d65['Klsoc'],'toolName':_0x378d65[_0x32b398(0x180)]}),{};};return{'postToolUseHook':_0xfe71fe,'postToolUseFailureHook':_0x5357cc,'commandCounts':_0x292210};}async function runPlaywrightCliLifecycleCommand(_0x2e545b){const _0x44bf38=_0x4dc5,_0x766b8d={'FXUXM':function(_0x39a07b,_0x1807db){return _0x39a07b??_0x1807db;}},{sessionId:_0x2874d4,configPath:_0x1b4bd1,commandArgs:_0x2f437c,env:_0x4c7f63,telemetry:_0x256c25,phase:_0x3c04f9,metadata:_0x1ff8ef,timeoutMs:_0x252420}=_0x2e545b;_0x256c25['trackPhaseStart'](_0x3c04f9,_0x1ff8ef);try{const _0xedc265=await runPlaywrightCliCommand({'sessionId':_0x2874d4,'configPath':_0x1b4bd1,'commandArgs':_0x2f437c,'cwd':process[_0x44bf38(0x175)](),'env':_0x4c7f63,'timeoutMs':_0x766b8d[_0x44bf38(0x1b9)](_0x252420,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x256c25[_0x44bf38(0x1e4)](_0x3c04f9,{..._0x1ff8ef,'subcommand':_0xedc265[_0x44bf38(0x186)][_0x44bf38(0x1b6)],'stdoutPreview':truncatePreview(_0xedc265[_0x44bf38(0x190)],0x7d0),'stderrPreview':truncatePreview(_0xedc265[_0x44bf38(0x1f0)],0x7d0)});}catch(_0x5691fd){await _0x256c25[_0x44bf38(0x199)](_0x3c04f9,_0x5691fd,_0x1ff8ef);throw _0x5691fd;}}export async function finalizeVerifyFeatureCliSession(_0x593ad6){const _0x330dd7=_0x4dc5,_0x247e93={'wwkKD':'tracing-stop','AQsXb':_0x330dd7(0x1e9),'NqUbi':function(_0xaa6140,_0x3864d6,_0x5d2c6c){return _0xaa6140(_0x3864d6,_0x5d2c6c);},'jKnBz':_0x330dd7(0x1b2),'HsmOq':_0x330dd7(0x1bb),'KfUBq':function(_0x5de1b5,_0x1d1067){return _0x5de1b5(_0x1d1067);}},{telemetry:_0x3d2cb4,sessionId:_0x511e94,configPath:_0x3916a6,cliArtifactDir:_0x45e617,env:_0x555659,transportMetadata:_0x144cbb}=_0x593ad6,_0x3aa988=[{'phase':'playwright_cli_tracing_stop','commandArgs':[_0x247e93['wwkKD']]},{'phase':_0x247e93[_0x330dd7(0x17a)],'commandArgs':['video-stop',_0x330dd7(0x1cd)+_0x247e93[_0x330dd7(0x19b)](buildCliArtifactPath,_0x45e617,_0x330dd7(0x18e))]},{'phase':_0x247e93[_0x330dd7(0x19a)],'commandArgs':[_0x247e93[_0x330dd7(0x1d3)]]}];for(const _0x57c4d7 of _0x3aa988){try{await _0x247e93[_0x330dd7(0x19f)](runPlaywrightCliLifecycleCommand,{'sessionId':_0x511e94,'configPath':_0x3916a6,'commandArgs':[..._0x57c4d7['commandArgs']],'env':_0x555659,'telemetry':_0x3d2cb4,'phase':_0x57c4d7[_0x330dd7(0x1db)],'metadata':_0x144cbb});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x295499){const _0x43daa8=_0x4dc5,_0x2dd7c={'gKpIb':function(_0x309f94,_0x5b1b3b,_0x1653d5){return _0x309f94(_0x5b1b3b,_0x1653d5);},'GHHgW':function(_0x495818,_0x487d95){return _0x495818(_0x487d95);}},_0x5a01b0=['trace.zip',_0x43daa8(0x1e7)];for(const _0x4b4a82 of _0x5a01b0){const _0x1d240b=_0x2dd7c['gKpIb'](join,_0x295499,_0x4b4a82);try{return{'buffer':await _0x2dd7c[_0x43daa8(0x17b)](readFile,_0x1d240b),'source':_0x1d240b};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x220914){const _0x76e912=_0x4dc5,_0x4771f5={'GDnGW':function(_0x3ba6aa,_0x224f8f,_0x50f05f){return _0x3ba6aa(_0x224f8f,_0x50f05f);},'ZFgsP':function(_0x4ef663,_0x1ef473,_0x1591b8){return _0x4ef663(_0x1ef473,_0x1591b8);},'ZIcov':function(_0x3aa088,_0x477eea){return _0x3aa088<_0x477eea;},'axWHa':function(_0x40dde2,_0x4f884d){return _0x40dde2+_0x4f884d;},'ljEVz':function(_0x4c0650,_0x1eef64){return _0x4c0650===_0x1eef64;}},{cwd:_0x87b297,cliArtifactDir:_0xc24340,startTime:_0x944011}=_0x220914,_0x30b2c0=[];await _0x4771f5[_0x76e912(0x1eb)](mkdir,_0xc24340,{'recursive':!![]});const _0x412287=await _0x4771f5['GDnGW'](readdir,_0x87b297,{'withFileTypes':!![]});for(const _0x407870 of _0x412287){if(!_0x407870['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x76e912(0x1ab)](_0x407870[_0x76e912(0x1cc)]))continue;const _0x83a542=_0x4771f5['ZFgsP'](join,_0x87b297,_0x407870[_0x76e912(0x1cc)]),_0x40e4ee=await stat(_0x83a542);if(_0x4771f5[_0x76e912(0x1ac)](_0x4771f5['axWHa'](_0x40e4ee[_0x76e912(0x1d6)],0x7d0),_0x944011))continue;const _0x3b1a77=buildCliArtifactPath(_0xc24340,_0x407870[_0x76e912(0x1cc)]);if(_0x4771f5[_0x76e912(0x1cb)](_0x83a542,_0x3b1a77))continue;await rename(_0x83a542,_0x3b1a77),_0x30b2c0['push'](_0x407870[_0x76e912(0x1cc)]);}return _0x30b2c0['sort']();}
|
|
1
|
+
(function(_0x2d7805,_0x4ead0e){const _0x1e8b6e=_0x57c9,_0x57d5b3=_0x2d7805();while(!![]){try{const _0x3ede49=-parseInt(_0x1e8b6e(0x1d8))/0x1*(-parseInt(_0x1e8b6e(0x1b7))/0x2)+parseInt(_0x1e8b6e(0x1c4))/0x3*(parseInt(_0x1e8b6e(0x1e6))/0x4)+parseInt(_0x1e8b6e(0x220))/0x5+-parseInt(_0x1e8b6e(0x1ad))/0x6*(-parseInt(_0x1e8b6e(0x1cb))/0x7)+parseInt(_0x1e8b6e(0x20f))/0x8*(parseInt(_0x1e8b6e(0x1d7))/0x9)+-parseInt(_0x1e8b6e(0x1c7))/0xa+parseInt(_0x1e8b6e(0x1b3))/0xb*(-parseInt(_0x1e8b6e(0x1ef))/0xc);if(_0x3ede49===_0x4ead0e)break;else _0x57d5b3['push'](_0x57d5b3['shift']());}catch(_0x586632){_0x57d5b3['push'](_0x57d5b3['shift']());}}}(_0x19fe,0x52b9c));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(_0x5b9034,_0x4a394f=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x1cb154=_0x57c9,_0x2597f8={'WnayV':function(_0x339716,_0x3c4262){return _0x339716+_0x3c4262;},'XidBs':'...'};return _0x5b9034['length']>_0x4a394f?_0x2597f8[_0x1cb154(0x1b9)](_0x5b9034[_0x1cb154(0x213)](0x0,_0x4a394f),_0x2597f8[_0x1cb154(0x236)]):_0x5b9034;}function buildCliArtifactPath(_0x414e52,_0x9eeebe){const _0x11880a=_0x57c9,_0x1d07eb={'ptYPU':function(_0x207042,_0x559fa8,_0x171a63){return _0x207042(_0x559fa8,_0x171a63);}};return _0x1d07eb[_0x11880a(0x212)](join,_0x414e52,_0x9eeebe);}function toStepDisplayName(_0xa05073){const _0x3c1571=_0x57c9,_0x88e7a0={'NqfFW':function(_0x5c362b,_0x4dfef6){return _0x5c362b(_0x4dfef6);}},_0x11c280=_0x88e7a0[_0x3c1571(0x229)](basename,_0xa05073)['replace'](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')[_0x3c1571(0x1ba)](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x11c280,'isKeyStep':/^key_/i['test'](_0x88e7a0['NqfFW'](basename,_0xa05073))};}function extractShellValue(_0x104669){if(!_0x104669)return null;return _0x104669[0x1]??_0x104669[0x2]??_0x104669[0x3]??null;}function _0x19fe(){const _0x5bffc4=['WnayV','replace','lKRlt','run\x20custom\x20Playwright\x20code','02_learn-more.yml','textContent','aQmvK','playwright-cli','01_mozilla-homepage.png','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','XTqgG','12aoEKPD','\x0a\x0a1.\x20Run\x20`','stop\x20tracing','4996130GaiZYL','tool_call','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','numeric','49hFeJFe','\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a7.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a8.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','lcGhK','capture\x20key\x20step\x20`','check\x20','ijDdY','PoDAN','\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.','\x20screenshot\x20--filename\x20','ngFpJ','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','9OGoFvw','426837lQHxtV',']\x20**','trackPhaseStart','press','\x20snapshot\x20--filename\x20','03_learn-more.png','`:\x20\x22','playwright_cli_tracing_stop','capture\x20screenshot','authorEmail','ObHxA','tool_failure','tracing-start','knUCU','654612pdLWeK','video-start','fill','PostToolUseFailure','**\x20(','tool_input','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','JWZfz','478776sAYxap','element','select\x20tab\x20','`\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`','screenshot','createdAt','unaddressedComments','pop','stop\x20video\x20recording','UiUol','\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','click\x20','Bash','):\x20\x22','jdXBU','`\x0a-\x20`snapshot\x20--filename\x20','kWmNk','\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.','notes','test','error','stderr','qXGPV','nkkfa','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','KOQgv','key_03_success-state.png','capture\x20snapshot\x20`','wxZmZ','domRef','open\x20browser','playwright_cli_close','3448112VCrUPj','start\x20video\x20recording','fYiGc','ptYPU','slice','\x20(on\x20element:\x20<','press\x20','tab-select','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','open\x20','run-code','click','tyiAz','string','02_button-clicked.png','oylGh','(?:^|\x5cs)','3319865koPgEh','trackPhaseError','canonicalFlow','hook_event_name','start\x20tracing','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','UdzEg','XUcuf','\x20>\x20','NqfFW','video-stop','BUqrw','>\x20\x22','Zttzh','description','[playwright-cli]\x20','`,\x20then\x20`','\x20tracing-start`,\x20then\x20`','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','subcommand','check','`\x0a9.\x20Run\x20`','XidBs','match','ArBIU','GzrlK','split','capture\x20step\x20`','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','\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.','name','\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','set','\x22,\x20\x22','target','sort','186894rosSSI','trackPhaseEnd','tool_name','DEBUG','`\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`','phase','429HVkjFH','open\x20new\x20tab','QYses','\x20open\x20','2aGZmBD','\x0a\x0a##\x20Additional\x20Notes\x0a'];_0x19fe=function(){return _0x5bffc4;};return _0x19fe();}function extractFilenameOption(_0x2aba79){return extractShellValue(_0x2aba79['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x9c783d,_0x1317d8){const _0x181292=_0x57c9,_0x9c326a={'QYses':'\x5c$&'},_0xebf7fd=_0x1317d8[_0x181292(0x1ba)](/[.*+?^${}()|[\]\\]/g,_0x9c326a[_0x181292(0x1b5)]);return extractShellValue(_0x9c783d[_0x181292(0x237)](new RegExp(_0x181292(0x21f)+_0xebf7fd+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function _0x57c9(_0x3b0b4f,_0xe5da32){_0x3b0b4f=_0x3b0b4f-0x1a3;const _0x19feca=_0x19fe();let _0x57c915=_0x19feca[_0x3b0b4f];return _0x57c915;}function formatCommandTarget(_0x288955){const _0x3c3c8d=_0x57c9,_0x26bb4a={'UdzEg':function(_0x73afaf,_0x3b83c1,_0x17bdbd){return _0x73afaf(_0x3b83c1,_0x17bdbd);}};if(!_0x288955)return _0x3c3c8d(0x1ab);if(/^e\d+$/i[_0x3c3c8d(0x202)](_0x288955))return'ref\x20'+_0x288955;return JSON['stringify'](_0x26bb4a[_0x3c3c8d(0x226)](truncatePreview,_0x288955,0x78));}function formatPlaywrightCliLog(_0x319ae5,_0x33885b){const _0x4569a1=_0x57c9,_0x290439={'nkkfa':'open','UiUol':function(_0x2dc371,_0x290a8c,_0xc13e5){return _0x2dc371(_0x290a8c,_0xc13e5);},'dgpID':_0x4569a1(0x20d),'fYiGc':'tracing-stop','zkRyu':_0x4569a1(0x1e7),'SlHMn':_0x4569a1(0x210),'AJpeb':_0x4569a1(0x1f7),'VvkjE':'snapshot','UnkKm':'capture\x20snapshot','lcGhK':function(_0x345bbb,_0xd8cf5c){return _0x345bbb(_0xd8cf5c);},'kWmNk':_0x4569a1(0x234),'jdXBU':_0x4569a1(0x1e8),'tyiAz':function(_0x5a7ed6,_0x363203){return _0x5a7ed6(_0x363203);},'RopHx':function(_0x3a6cbf,_0x3ffb37,_0x5a82c4){return _0x3a6cbf(_0x3ffb37,_0x5a82c4);},'ArBIU':function(_0x13baec,_0x5ce91e){return _0x13baec(_0x5ce91e);},'pAGGx':_0x4569a1(0x219),'Birby':'tab-new','uGREF':function(_0x560be5,_0x2ac224,_0x211c2c){return _0x560be5(_0x2ac224,_0x211c2c);}};switch(_0x33885b){case _0x290439[_0x4569a1(0x206)]:{const _0xec160a=_0x290439[_0x4569a1(0x1f8)](extractFirstCommandArgument,_0x319ae5,_0x33885b);return _0xec160a?_0x4569a1(0x218)+_0xec160a:_0x290439['dgpID'];}case _0x4569a1(0x1e4):return _0x4569a1(0x224);case _0x290439[_0x4569a1(0x211)]:return _0x4569a1(0x1c6);case _0x290439['zkRyu']:return _0x290439['SlHMn'];case _0x4569a1(0x22a):return _0x290439['AJpeb'];case _0x290439['VvkjE']:{const _0x58b5d4=extractFilenameOption(_0x319ae5);if(!_0x58b5d4)return _0x290439['UnkKm'];const {name:_0x1a399a}=toStepDisplayName(_0x58b5d4);return _0x4569a1(0x20a)+_0x1a399a+'`';}case _0x4569a1(0x1f3):{const _0x3ed3c9=_0x290439['lcGhK'](extractFilenameOption,_0x319ae5);if(!_0x3ed3c9)return _0x4569a1(0x1e0);const {name:_0x55fb5b,isKeyStep:_0x244610}=_0x290439['lcGhK'](toStepDisplayName,_0x3ed3c9);return _0x244610?_0x4569a1(0x1cf)+_0x55fb5b+'`':_0x4569a1(0x1a4)+_0x55fb5b+'`';}case _0x4569a1(0x21a):return _0x4569a1(0x1fa)+_0x290439[_0x4569a1(0x1ce)](formatCommandTarget,extractFirstCommandArgument(_0x319ae5,_0x33885b));case _0x290439[_0x4569a1(0x1ff)]:return _0x4569a1(0x1d0)+formatCommandTarget(_0x290439['UiUol'](extractFirstCommandArgument,_0x319ae5,_0x33885b));case _0x290439[_0x4569a1(0x1fd)]:return'fill\x20'+_0x290439[_0x4569a1(0x21b)](formatCommandTarget,_0x290439['RopHx'](extractFirstCommandArgument,_0x319ae5,_0x33885b));case _0x4569a1(0x1db):return _0x4569a1(0x215)+_0x290439[_0x4569a1(0x238)](formatCommandTarget,extractFirstCommandArgument(_0x319ae5,_0x33885b));case _0x290439['pAGGx']:return _0x4569a1(0x1bc);case _0x290439['Birby']:{const _0x5aa257=_0x290439['uGREF'](extractFirstCommandArgument,_0x319ae5,_0x33885b);return _0x5aa257?'open\x20new\x20tab\x20'+_0x5aa257:_0x4569a1(0x1b4);}case _0x4569a1(0x216):{const _0x114ffa=extractFirstCommandArgument(_0x319ae5,_0x33885b);return _0x114ffa?_0x4569a1(0x1f1)+_0x114ffa:'select\x20tab';}default:return _0x33885b;}}function extractPlaywrightCliToolDescription(_0x1d2497){const _0xbaebc1=_0x57c9,_0x41da53={'peIkb':function(_0x52848e,_0x572856){return _0x52848e!==_0x572856;},'MaClQ':_0xbaebc1(0x21c),'ObHxA':function(_0x9da011,_0x5b2599){return _0x9da011>_0x5b2599;}},_0x4af5ff=_0x1d2497[_0xbaebc1(0x22e)];if(_0x41da53['peIkb'](typeof _0x4af5ff,_0x41da53['MaClQ']))return null;const _0x45c500=_0x4af5ff['trim']()[_0xbaebc1(0x1ba)](/\s+/g,'\x20');return _0x41da53[_0xbaebc1(0x1e2)](_0x45c500['length'],0x0)?_0x45c500:null;}export function formatPlaywrightCliConsoleLogMessage(_0x189d20,_0x2bb08b,_0x535477){const _0x101f9b=_0x57c9,_0x42eac0=formatPlaywrightCliLog(_0x2bb08b,_0x535477),_0x5e988c=extractPlaywrightCliToolDescription(_0x189d20);if(!_0x5e988c)return _0x101f9b(0x22f)+_0x42eac0;if(process['env'][_0x101f9b(0x1b0)])return'[ranger-verification-agent]\x20'+_0x5e988c+'\x20('+_0x42eac0+')';return'[ranger-verification-agent]\x20'+_0x5e988c;}export function buildVerifyFeatureCliDebugPrompt(_0x198e45,_0x16e9d4){const _0x5983a4=_0x57c9,_0x96c258={'GzrlK':function(_0x56e8eb,_0x5b774d,_0x4900ba){return _0x56e8eb(_0x5b774d,_0x4900ba);},'knUCU':function(_0x2ab931,_0x47a209){return _0x2ab931(_0x47a209);}},_0x4f7863=_0x96c258['GzrlK'](buildCliArtifactPath,_0x16e9d4,'00_mozilla-homepage.yml'),_0x553072=buildCliArtifactPath(_0x16e9d4,_0x5983a4(0x1c1)),_0x40ddce=_0x96c258['GzrlK'](buildCliArtifactPath,_0x16e9d4,_0x5983a4(0x1bd)),_0x2a4971=_0x96c258[_0x5983a4(0x239)](buildCliArtifactPath,_0x16e9d4,_0x5983a4(0x1dd)),_0x34da29=_0x96c258[_0x5983a4(0x1e5)](quoteShellArg,_0x4f7863),_0x36de62=quoteShellArg(_0x553072),_0x5a659d=_0x96c258['knUCU'](quoteShellArg,_0x40ddce),_0x4b36cd=_0x96c258[_0x5983a4(0x1e5)](quoteShellArg,_0x2a4971);return _0x5983a4(0x217)+_0x198e45+_0x5983a4(0x1c5)+_0x198e45+_0x5983a4(0x1d6)+_0x198e45+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x198e45+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x16e9d4+_0x5983a4(0x225)+_0x198e45+_0x5983a4(0x1dc)+_0x34da29+_0x5983a4(0x1ed)+_0x198e45+_0x5983a4(0x1d4)+_0x36de62+_0x5983a4(0x1c9)+_0x198e45+'\x20snapshot\x20--filename\x20'+_0x5a659d+_0x5983a4(0x235)+_0x198e45+'\x20screenshot\x20--filename\x20'+_0x4b36cd+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0x2e5b2a){const _0x5ba4cb=_0x57c9,_0x1448b6={'JWZfz':'en-US','qXGPV':'Reviewer','lKRlt':_0x5ba4cb(0x228),'ijDdY':_0x5ba4cb(0x1f0),'XUcuf':'01_initial.yml','ncVOY':'01_initial-state.png','Zttzh':function(_0x3061c8,_0x5b077a){return _0x3061c8(_0x5b077a);}},{checklistItem:_0x56ba2b,itemFeedback:_0x360434,taskDescription:_0x5a2287,cliCommandPrefix:_0x5749dc,cliArtifactDir:_0x56903f,isCdpMode:_0xf61f5f,url:_0x35a24c,cdpEndpoint:_0x5232d2,loginInstructions:_0x313e4f}=_0x2e5b2a,_0x4a0ebf=buildCliArtifactPath(_0x56903f,_0x1448b6[_0x5ba4cb(0x227)]),_0x4d9054=buildCliArtifactPath(_0x56903f,'02_state.yml'),_0x52339e=buildCliArtifactPath(_0x56903f,_0x5ba4cb(0x209)),_0x50f7b8=buildCliArtifactPath(_0x56903f,_0x1448b6['ncVOY']),_0x386dc0=_0x1448b6[_0x5ba4cb(0x22d)](quoteShellArg,_0x4a0ebf),_0x547973=_0x1448b6[_0x5ba4cb(0x22d)](quoteShellArg,_0x4d9054),_0x2cfc31=quoteShellArg(_0x52339e),_0x2ce6b0=quoteShellArg(_0x50f7b8),_0x9a76fa=_0x56ba2b[_0x5ba4cb(0x201)]?_0x5ba4cb(0x1b8)+_0x56ba2b['notes']:'';let _0x4c4bc4='';if(_0x360434&&_0x360434[_0x5ba4cb(0x1f5)]['length']>0x0){const _0x227238=_0x360434['unaddressedComments']['map'](_0x6c3e51=>{const _0x167eee=_0x5ba4cb,_0x290e9d=new Date(_0x6c3e51[_0x167eee(0x1f4)])['toLocaleDateString'](_0x1448b6[_0x167eee(0x1ee)],{'month':'short','day':_0x167eee(0x1ca)}),_0x33d02e=_0x6c3e51['authorName']||_0x6c3e51[_0x167eee(0x1e1)]||_0x1448b6[_0x167eee(0x205)],_0x1812ab=_0x6c3e51[_0x167eee(0x20c)]?_0x167eee(0x214)+(_0x6c3e51['domRef']['selector'][_0x167eee(0x1a3)](_0x1448b6[_0x167eee(0x1bb)])[_0x167eee(0x1f6)]()?.['split'](':')[0x0]||_0x1448b6[_0x167eee(0x1d1)])+_0x167eee(0x22c)+(_0x6c3e51['domRef'][_0x167eee(0x1be)]||'')['slice'](0x0,0x32)+'\x22)':'';return'-\x20['+_0x6c3e51['id']+_0x167eee(0x1d9)+_0x33d02e+_0x167eee(0x1ea)+_0x290e9d+_0x167eee(0x1fc)+_0x6c3e51['content']+'\x22'+_0x1812ab;})['join']('\x0a');_0x4c4bc4='\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'+_0x227238;}const _0x5a99d7=_0x360434?.[_0x5ba4cb(0x222)]?_0x5ba4cb(0x1a5)+_0x360434['canonicalFlow']:'',_0xf52576=_0xf61f5f?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x5232d2+'.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.':'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x35a24c+'\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',_0x38ae97=_0x35a24c?quoteShellArg(_0x35a24c):'',_0x47f96c=_0xf61f5f?'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x5749dc+'\x20open`,\x20then\x20`'+_0x5749dc+'\x20tracing-start`,\x20then\x20`'+_0x5749dc+_0x5ba4cb(0x1c2)+_0x56903f+_0x5ba4cb(0x232)+_0x5749dc+'\x20snapshot\x20--filename\x20'+_0x386dc0+'`\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`'+_0x5749dc+'\x20screenshot\x20--filename\x20'+_0x2ce6b0+_0x5ba4cb(0x207)+_0x5749dc+_0x5ba4cb(0x1cc):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x5749dc+_0x5ba4cb(0x1b6)+_0x38ae97+_0x5ba4cb(0x230)+_0x5749dc+_0x5ba4cb(0x231)+_0x5749dc+_0x5ba4cb(0x1c2)+_0x56903f+_0x5ba4cb(0x232)+_0x5749dc+'\x20snapshot\x20--filename\x20'+_0x386dc0+_0x5ba4cb(0x1b1)+_0x5749dc+'\x20screenshot\x20--filename\x20'+_0x2ce6b0+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x5749dc+_0x5ba4cb(0x1a8),_0x2dd20f=_0xf61f5f?_0x5ba4cb(0x1a6):_0x5ba4cb(0x200),_0x4d8101=_0x313e4f?_0x5ba4cb(0x1cd)+_0x313e4f+_0x5ba4cb(0x1d3):'';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'+_0x56ba2b[_0x5ba4cb(0x22e)]+_0x9a76fa+_0x4c4bc4+_0x5a99d7+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x5a2287+'\x0a\x0a'+_0xf52576+_0x4d8101+'\x0a\x0a'+_0x47f96c+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x5749dc+_0x5ba4cb(0x1ec)+_0x56903f+_0x5ba4cb(0x1fe)+_0x547973+'`\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'+_0x2cfc31+_0x5ba4cb(0x1f2)+_0x56903f+_0x5ba4cb(0x1de)+_0x50f7b8+_0x5ba4cb(0x1aa)+buildCliArtifactPath(_0x56903f,_0x5ba4cb(0x21d))+'\x22,\x20\x22'+buildCliArtifactPath(_0x56903f,'03_result-visible.png')+'\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'+buildCliArtifactPath(_0x56903f,'key_04_success-state.png')+_0x5ba4cb(0x1f9)+_0x2dd20f+'\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(_0x21b6de){const _0x3ad8bf=[..._0x21b6de['keys']()]['sort']();let _0x1e5e13=0x0;for(const _0x17eaf3 of _0x21b6de['values']()){_0x1e5e13+=_0x17eaf3;}return{'cliCommandCount':_0x1e5e13,'cliCommandsSeen':_0x3ad8bf,'noCliCommandsCalled':_0x1e5e13===0x0};}export function createVerifyFeatureCliHooks(_0x2f3818){const _0x44d1a7=_0x57c9,_0x43833b={'BUqrw':function(_0x130088,_0x3b51df){return _0x130088!==_0x3b51df;},'IsAMa':'PostToolUse','LSqyZ':function(_0x21e7e9,_0x4a5d0a){return _0x21e7e9(_0x4a5d0a);},'PoDAN':'tool_call','BiRep':'playwright-cli','HWnds':'snapshot','oylGh':function(_0x526a8f,_0x1e7a4d,_0xa41fc7,_0x439857){return _0x526a8f(_0x1e7a4d,_0xa41fc7,_0x439857);},'XTqgG':_0x44d1a7(0x1e9),'ImFkY':_0x44d1a7(0x1e3)},_0x5979a3=new Map(),_0x23c1af=async _0x1953c5=>{const _0x2497ec=_0x44d1a7;if(_0x43833b[_0x2497ec(0x22b)](_0x1953c5['hook_event_name'],_0x43833b['IsAMa']))return{};const _0xc42b7c=_0x1953c5;if(_0xc42b7c[_0x2497ec(0x1af)]!==_0x2497ec(0x1fb))return{};const _0x3e65cf=_0xc42b7c[_0x2497ec(0x1eb)],_0x411291=extractBashCommand(_0x3e65cf);if(!_0x411291)return{};const _0x4e503a=_0x43833b['LSqyZ'](parsePlaywrightCliCommand,_0x411291);if(!_0x4e503a)return{};return _0x5979a3[_0x2497ec(0x1a9)](_0x4e503a,(_0x5979a3['get'](_0x4e503a)||0x0)+0x1),_0x2f3818[_0x2497ec(0x1da)](_0x43833b[_0x2497ec(0x1d2)],{'transport':_0x43833b['BiRep'],'toolName':_0x4e503a}),_0x2f3818[_0x2497ec(0x1ae)](_0x2497ec(0x1c8),{'transport':_0x2497ec(0x1c0),'toolName':_0x4e503a,'bashCommandPreview':truncatePreview(_0x411291)}),_0x4e503a!==_0x43833b['HWnds']&&console['log'](_0x43833b[_0x2497ec(0x21e)](formatPlaywrightCliConsoleLogMessage,_0x3e65cf,_0x411291,_0x4e503a)),{};},_0x35a2dc=async _0x34e8ff=>{const _0x7fe6df=_0x44d1a7;if(_0x34e8ff[_0x7fe6df(0x223)]!==_0x43833b[_0x7fe6df(0x1c3)])return{};const _0x42efb8=_0x34e8ff;if(_0x43833b['BUqrw'](_0x42efb8[_0x7fe6df(0x1af)],_0x7fe6df(0x1fb)))return{};return await _0x2f3818['trackPhaseError'](_0x43833b['ImFkY'],_0x42efb8[_0x7fe6df(0x203)],{'transport':'playwright-cli','toolName':'Bash'}),{};};return{'postToolUseHook':_0x23c1af,'postToolUseFailureHook':_0x35a2dc,'commandCounts':_0x5979a3};}async function runPlaywrightCliLifecycleCommand(_0xb9dcdd){const _0x53f36b=_0x57c9,_0x18968d={'KOQgv':function(_0x266b76,_0x320df7){return _0x266b76(_0x320df7);},'jeStx':function(_0x494660,_0x1f7223){return _0x494660??_0x1f7223;},'VVMhX':function(_0x226fcb,_0x8519e,_0x4da094){return _0x226fcb(_0x8519e,_0x4da094);},'XKFmr':function(_0x27ef11,_0x470ace,_0x552d1b){return _0x27ef11(_0x470ace,_0x552d1b);}},{sessionId:_0x319f17,configPath:_0x4df8af,commandArgs:_0x40155e,env:_0x406ff8,telemetry:_0x59937f,phase:_0x3ced9c,metadata:_0x5da0fd,timeoutMs:_0x396801}=_0xb9dcdd;_0x59937f['trackPhaseStart'](_0x3ced9c,_0x5da0fd);try{const _0xdcecfd=await _0x18968d[_0x53f36b(0x208)](runPlaywrightCliCommand,{'sessionId':_0x319f17,'configPath':_0x4df8af,'commandArgs':_0x40155e,'cwd':process['cwd'](),'env':_0x406ff8,'timeoutMs':_0x18968d['jeStx'](_0x396801,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x59937f[_0x53f36b(0x1ae)](_0x3ced9c,{..._0x5da0fd,'subcommand':_0xdcecfd['invocation'][_0x53f36b(0x233)],'stdoutPreview':_0x18968d['VVMhX'](truncatePreview,_0xdcecfd['stdout'],0x7d0),'stderrPreview':_0x18968d['XKFmr'](truncatePreview,_0xdcecfd[_0x53f36b(0x204)],0x7d0)});}catch(_0x3fd1a0){await _0x59937f[_0x53f36b(0x221)](_0x3ced9c,_0x3fd1a0,_0x5da0fd);throw _0x3fd1a0;}}export async function finalizeVerifyFeatureCliSession(_0x3b5aaa){const _0x11bc43=_0x57c9,_0x46ec3a={'OKbgv':'tracing-stop','XdVwx':'playwright_cli_video_stop','ELtzi':'video-stop','QhJFP':_0x11bc43(0x20e),'aQmvK':function(_0x4e94dc,_0x2e0a9e){return _0x4e94dc(_0x2e0a9e);}},{telemetry:_0x25e48e,sessionId:_0xe0baec,configPath:_0x523041,cliArtifactDir:_0x514e2b,env:_0x13b9c9,transportMetadata:_0x32f8b1}=_0x3b5aaa,_0x557e56=[{'phase':_0x11bc43(0x1df),'commandArgs':[_0x46ec3a['OKbgv']]},{'phase':_0x46ec3a['XdVwx'],'commandArgs':[_0x46ec3a['ELtzi'],'--filename='+buildCliArtifactPath(_0x514e2b,'session-recording.webm')]},{'phase':_0x46ec3a['QhJFP'],'commandArgs':['close']}];for(const _0x174c96 of _0x557e56){try{await _0x46ec3a[_0x11bc43(0x1bf)](runPlaywrightCliLifecycleCommand,{'sessionId':_0xe0baec,'configPath':_0x523041,'commandArgs':[..._0x174c96['commandArgs']],'env':_0x13b9c9,'telemetry':_0x25e48e,'phase':_0x174c96[_0x11bc43(0x1b2)],'metadata':_0x32f8b1});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x4dcba8){const _0x2e7328={'cxVwk':'trace.trace.zip'},_0x3e654d=['trace.zip',_0x2e7328['cxVwk']];for(const _0x4911d1 of _0x3e654d){const _0x581357=join(_0x4dcba8,_0x4911d1);try{return{'buffer':await readFile(_0x581357),'source':_0x581357};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0xd93def){const _0x1033ce=_0x57c9,_0x2e6d8d={'usWHY':function(_0x115ceb,_0x2840e3,_0x29ca7c){return _0x115ceb(_0x2840e3,_0x29ca7c);},'wxZmZ':function(_0x2dab05,_0x23ae44){return _0x2dab05(_0x23ae44);},'ngFpJ':function(_0x5d9a12,_0x1200be){return _0x5d9a12+_0x1200be;}},{cwd:_0xac58a9,cliArtifactDir:_0x520776,startTime:_0x183d97}=_0xd93def,_0x36fe11=[];await _0x2e6d8d['usWHY'](mkdir,_0x520776,{'recursive':!![]});const _0x5a678e=await readdir(_0xac58a9,{'withFileTypes':!![]});for(const _0x3ba3ec of _0x5a678e){if(!_0x3ba3ec['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x1033ce(0x202)](_0x3ba3ec[_0x1033ce(0x1a7)]))continue;const _0x4a275d=join(_0xac58a9,_0x3ba3ec[_0x1033ce(0x1a7)]),_0x3d07d5=await _0x2e6d8d[_0x1033ce(0x20b)](stat,_0x4a275d);if(_0x2e6d8d[_0x1033ce(0x1d5)](_0x3d07d5['mtimeMs'],0x7d0)<_0x183d97)continue;const _0x1884bd=buildCliArtifactPath(_0x520776,_0x3ba3ec[_0x1033ce(0x1a7)]);if(_0x4a275d===_0x1884bd)continue;await rename(_0x4a275d,_0x1884bd),_0x36fe11['push'](_0x3ba3ec['name']);}return _0x36fe11[_0x1033ce(0x1ac)]();}
|
|
@@ -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.feb9faf-20",
|
|
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
|
}
|