@ranger-testing/ranger-cli 2.5.4-alpha.0e8b82c-9 → 2.5.4-alpha.152f635-21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +36 -14
  2. package/build/cli.js +1 -1
  3. package/build/commands/addEnv.js +1 -1
  4. package/build/commands/authEncrypt.js +1 -1
  5. package/build/commands/clean.js +1 -1
  6. package/build/commands/config.js +1 -1
  7. package/build/commands/env.js +1 -1
  8. package/build/commands/feature.js +1 -1
  9. package/build/commands/hook.js +1 -1
  10. package/build/commands/hooks/autoPrompt.js +1 -1
  11. package/build/commands/hooks/disable.js +1 -1
  12. package/build/commands/hooks/enable.js +1 -1
  13. package/build/commands/hooks/exitPlanMode.js +1 -1
  14. package/build/commands/hooks/index.js +1 -1
  15. package/build/commands/hooks/output.js +1 -1
  16. package/build/commands/hooks/planReminder.js +1 -1
  17. package/build/commands/hooks/planStart.js +1 -1
  18. package/build/commands/hooks/postEdit.js +1 -1
  19. package/build/commands/hooks/preCompact.js +1 -1
  20. package/build/commands/hooks/sessionEnd.js +1 -1
  21. package/build/commands/hooks/sessionStart.js +1 -1
  22. package/build/commands/hooks/stopHook.js +1 -1
  23. package/build/commands/index.js +1 -1
  24. package/build/commands/login.js +1 -1
  25. package/build/commands/mcpBootstrap.js +1 -1
  26. package/build/commands/migrateProfile.js +1 -1
  27. package/build/commands/setup/claude.js +1 -1
  28. package/build/commands/setup/opencode.js +1 -1
  29. package/build/commands/setupCi.js +1 -1
  30. package/build/commands/skillup.js +1 -1
  31. package/build/commands/start.js +1 -1
  32. package/build/commands/status.js +1 -1
  33. package/build/commands/update.js +1 -1
  34. package/build/commands/updateEnv.js +1 -1
  35. package/build/commands/useEnv.js +1 -1
  36. package/build/commands/utils/activeProfile.js +1 -1
  37. package/build/commands/utils/agentEnv.js +1 -1
  38. package/build/commands/utils/browserSessionsApi.js +1 -1
  39. package/build/commands/utils/claudeConfig.js +1 -1
  40. package/build/commands/utils/claudeOverrideSettings.js +1 -1
  41. package/build/commands/utils/claudePlugin.js +1 -1
  42. package/build/commands/utils/cloudProfile.js +1 -1
  43. package/build/commands/utils/cloudProfileSession.js +1 -1
  44. package/build/commands/utils/crypto.js +1 -1
  45. package/build/commands/utils/desirePathLog.js +1 -1
  46. package/build/commands/utils/deviceAuth.js +1 -1
  47. package/build/commands/utils/environment.js +1 -1
  48. package/build/commands/utils/featureApi.js +1 -1
  49. package/build/commands/utils/fixWebmDuration.js +1 -1
  50. package/build/commands/utils/gitTracked.js +1 -1
  51. package/build/commands/utils/keychain.js +1 -1
  52. package/build/commands/utils/legacyWarning.js +1 -0
  53. package/build/commands/utils/localAgentInstallationsApi.js +1 -1
  54. package/build/commands/utils/matchAuthEnvironment.js +1 -1
  55. package/build/commands/utils/mcpImageBase64.js +1 -1
  56. package/build/commands/utils/model.js +1 -1
  57. package/build/commands/utils/opencodeConfig.js +1 -1
  58. package/build/commands/utils/playwrightCli.js +1 -1
  59. package/build/commands/utils/profileMessages.js +1 -1
  60. package/build/commands/utils/profileSetupBanner.js +1 -1
  61. package/build/commands/utils/projectsConfig.js +1 -1
  62. package/build/commands/utils/rangerConfig.js +1 -1
  63. package/build/commands/utils/rangerRoot.js +1 -1
  64. package/build/commands/utils/resolveProfileContext.js +1 -1
  65. package/build/commands/utils/resolveProfileUrl.js +1 -1
  66. package/build/commands/utils/retry.js +1 -1
  67. package/build/commands/utils/sessionCache.js +1 -1
  68. package/build/commands/utils/settings.js +1 -1
  69. package/build/commands/utils/skillContent.js +1 -1
  70. package/build/commands/utils/skills.js +1 -1
  71. package/build/commands/utils/stitchWebmFiles.js +1 -1
  72. package/build/commands/utils/telemetry.js +1 -1
  73. package/build/commands/utils/tokenRefresh.js +1 -1
  74. package/build/commands/utils/traceSnapshotMapper.js +1 -1
  75. package/build/commands/utils/userApi.js +1 -1
  76. package/build/commands/utils/version.js +1 -1
  77. package/build/commands/verifyFeature.js +1 -1
  78. package/build/commands/verifyFeatureCli.js +1 -1
  79. package/build/skills/ranger/SKILL.md +24 -8
  80. package/build/skills/ranger/create.md +16 -3
  81. package/build/skills/ranger/verify.md +35 -10
  82. package/package.json +3 -2
@@ -1 +1 @@
1
- (function(_0x4672dc,_0x5f2ced){const _0x442b53=_0x3ff2,_0x4a7578=_0x4672dc();while(!![]){try{const _0x5f2f5d=parseInt(_0x442b53(0x186))/0x1+-parseInt(_0x442b53(0x1c0))/0x2+parseInt(_0x442b53(0x176))/0x3+parseInt(_0x442b53(0x1c9))/0x4*(-parseInt(_0x442b53(0x17e))/0x5)+parseInt(_0x442b53(0x1b0))/0x6*(parseInt(_0x442b53(0x17d))/0x7)+-parseInt(_0x442b53(0x1c8))/0x8+parseInt(_0x442b53(0x1df))/0x9;if(_0x5f2f5d===_0x5f2ced)break;else _0x4a7578['push'](_0x4a7578['shift']());}catch(_0x28303b){_0x4a7578['push'](_0x4a7578['shift']());}}}(_0x12e1,0xd78bc));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(_0x4c70e0,_0x5a68a4=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x50a598=_0x3ff2,_0x2062d0={'skzFf':'...'};return _0x4c70e0[_0x50a598(0x1a6)]>_0x5a68a4?_0x4c70e0['slice'](0x0,_0x5a68a4)+_0x2062d0['skzFf']:_0x4c70e0;}function _0x12e1(){const _0x29c67b=['target','75414ZiNBWo','bYwcq','open\x20new\x20tab\x20','authorEmail','trim','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','ABUzo','7yKUKTK','5ZBSygp','authorName','hook_event_name','trackPhaseStart','map','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','-\x20[','01_initial-state.png','1413524eLYaOr','GHovm','name','02_state.yml','[playwright-cli]\x20','phase','qiWSC','tool_failure','test','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','close','unaddressedComments','\x20snapshot\x20--filename\x20','stdout','toLocaleDateString','content','\x20(on\x20element:\x20<','mtimeMs','trace.trace.zip','video-stop','IslIs','invocation','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','\x20screenshot\x20--filename\x20','\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.','PostToolUse','createdAt','Reviewer','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','\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','snapshot','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','length','DMgpM','\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','vaPmy','FJwEV','kfOyf','\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','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','`\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','match','7634286YtESEw','EAddq','select\x20tab','BrRzw','00_mozilla-homepage.yml','pjHca','`\x0a-\x20`snapshot\x20--filename\x20','gQCSC','MDswe','open','WiLHh','Bash','values','XtMEB','tab-new','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','3080854rYRGro','key_04_success-state.png','run-code','trackPhaseEnd','dZGhq','`\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`','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','11424744poawBJ','1497196kgAlvV','sAZMj','open\x20new\x20tab','vYaqq','cwd','--filename=','domRef','fill','Vzbee','tracing-start','replace','tool_call','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','sort','capture\x20step\x20`','nOSMx','02_button-clicked.png','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','`\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`','keys','MZcFZ','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','13631868pqPqGQ','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','\x20tracing-start`\x0a3.\x20Run\x20`','dOIqJ','`\x0a9.\x20Run\x20`','fmxeg','HrIrm',']\x20**','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','get','short','playwright_cli_tracing_stop','open\x20browser','\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.','prlby','[ranger-verification-agent]\x20','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','check','01_mozilla-homepage.png','capture\x20key\x20step\x20`','tqpAf','Audce','error','\x20open\x20','run\x20custom\x20Playwright\x20code','pop','WJKJz','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','SKLac','subcommand','start\x20tracing','MlyLS','select\x20tab\x20','split','trackPhaseError','02_learn-more.yml'];_0x12e1=function(){return _0x29c67b;};return _0x12e1();}function buildCliArtifactPath(_0x36b67a,_0x29c404){return join(_0x36b67a,_0x29c404);}function toStepDisplayName(_0x1e193e){const _0x4fc715=_0x3ff2,_0x5e04fb=basename(_0x1e193e)['replace'](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')['replace'](/^\d+_/,'')[_0x4fc715(0x1d3)](/-/g,'\x20');return{'name':_0x5e04fb,'isKeyStep':/^key_/i[_0x4fc715(0x18e)](basename(_0x1e193e))};}function extractShellValue(_0x4d72e8){if(!_0x4d72e8)return null;return _0x4d72e8[0x1]??_0x4d72e8[0x2]??_0x4d72e8[0x3]??null;}function extractFilenameOption(_0x371187){const _0x2935cc=_0x3ff2,_0x150db9={'MDswe':function(_0x2b6e07,_0x3e03a6){return _0x2b6e07(_0x3e03a6);}};return _0x150db9[_0x2935cc(0x1b8)](extractShellValue,_0x371187['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x280781,_0x41dadb){const _0x3a3d75=_0x3ff2,_0x3417ad=_0x41dadb[_0x3a3d75(0x1d3)](/[.*+?^${}()|[\]\\]/g,'\x5c$&');return extractShellValue(_0x280781[_0x3a3d75(0x1af)](new RegExp('(?:^|\x5cs)'+_0x3417ad+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x502f77){const _0x5a7793=_0x3ff2,_0x464b37={'bYwcq':_0x5a7793(0x175),'tqpAf':function(_0x2c78c0,_0x23cf91,_0x4aa7fd){return _0x2c78c0(_0x23cf91,_0x4aa7fd);}};if(!_0x502f77)return _0x464b37[_0x5a7793(0x177)];if(/^e\d+$/i['test'](_0x502f77))return'ref\x20'+_0x502f77;return JSON['stringify'](_0x464b37[_0x5a7793(0x1f3)](truncatePreview,_0x502f77,0x78));}function formatPlaywrightCliLog(_0x4752a8,_0x5c4a87){const _0x248a8c=_0x3ff2,_0x53122d={'nOSMx':function(_0x4f2871,_0x56ca67,_0x227b53){return _0x4f2871(_0x56ca67,_0x227b53);},'tEMgD':_0x248a8c(0x1eb),'XtMEB':_0x248a8c(0x16f),'GHovm':'stop\x20tracing','qiWSC':'video-start','FJwEV':'start\x20video\x20recording','MlyLS':'video-stop','NTzcZ':'stop\x20video\x20recording','PxdoE':function(_0x7b5dd5,_0x5aec79){return _0x7b5dd5(_0x5aec79);},'yUMjW':'capture\x20snapshot','fmxeg':function(_0x5033f8,_0x23ef9b){return _0x5033f8(_0x23ef9b);},'EAddq':'capture\x20screenshot','sAZMj':'click','vYaqq':function(_0xefe5d4,_0x40d314){return _0xefe5d4(_0x40d314);},'ABUzo':_0x248a8c(0x1f0),'LKssV':function(_0xaec9aa,_0x5b1797,_0x338111){return _0xaec9aa(_0x5b1797,_0x338111);},'roddT':_0x248a8c(0x1c2),'fkLmx':function(_0x347120,_0x5380d8,_0x2cb0bf){return _0x347120(_0x5380d8,_0x2cb0bf);},'ULzcc':_0x248a8c(0x1b2)};switch(_0x5c4a87){case _0x248a8c(0x1b9):{const _0x1ff048=_0x53122d['nOSMx'](extractFirstCommandArgument,_0x4752a8,_0x5c4a87);return _0x1ff048?'open\x20'+_0x1ff048:_0x53122d['tEMgD'];}case _0x248a8c(0x1d2):return _0x53122d[_0x248a8c(0x1bd)];case'tracing-stop':return _0x53122d[_0x248a8c(0x187)];case _0x53122d[_0x248a8c(0x18c)]:return _0x53122d[_0x248a8c(0x1aa)];case _0x53122d[_0x248a8c(0x170)]:return _0x53122d['NTzcZ'];case _0x248a8c(0x1a4):{const _0x1db52b=_0x53122d['PxdoE'](extractFilenameOption,_0x4752a8);if(!_0x1db52b)return _0x53122d['yUMjW'];const {name:_0x32748b}=toStepDisplayName(_0x1db52b);return'capture\x20snapshot\x20`'+_0x32748b+'`';}case'screenshot':{const _0x56ca80=_0x53122d[_0x248a8c(0x1e4)](extractFilenameOption,_0x4752a8);if(!_0x56ca80)return _0x53122d[_0x248a8c(0x1b1)];const {name:_0x1aae33,isKeyStep:_0x48a18f}=toStepDisplayName(_0x56ca80);return _0x48a18f?_0x248a8c(0x1f2)+_0x1aae33+'`':_0x248a8c(0x1d7)+_0x1aae33+'`';}case _0x53122d[_0x248a8c(0x1ca)]:return'click\x20'+_0x53122d[_0x248a8c(0x1cc)](formatCommandTarget,extractFirstCommandArgument(_0x4752a8,_0x5c4a87));case _0x53122d[_0x248a8c(0x17c)]:return'check\x20'+formatCommandTarget(_0x53122d[_0x248a8c(0x1d8)](extractFirstCommandArgument,_0x4752a8,_0x5c4a87));case _0x248a8c(0x1d0):return'fill\x20'+_0x53122d['fmxeg'](formatCommandTarget,_0x53122d['LKssV'](extractFirstCommandArgument,_0x4752a8,_0x5c4a87));case'press':return'press\x20'+formatCommandTarget(extractFirstCommandArgument(_0x4752a8,_0x5c4a87));case _0x53122d['roddT']:return _0x248a8c(0x1f7);case _0x248a8c(0x1be):{const _0x40bac2=_0x53122d['fkLmx'](extractFirstCommandArgument,_0x4752a8,_0x5c4a87);return _0x40bac2?_0x248a8c(0x178)+_0x40bac2:_0x248a8c(0x1cb);}case'tab-select':{const _0x3a6f56=extractFirstCommandArgument(_0x4752a8,_0x5c4a87);return _0x3a6f56?_0x248a8c(0x171)+_0x3a6f56:_0x53122d['ULzcc'];}default:return _0x5c4a87;}}function extractPlaywrightCliToolDescription(_0x3cdb81){const _0x41f390=_0x3ff2,_0x50a9e4=_0x3cdb81['description'];if(typeof _0x50a9e4!=='string')return null;const _0x1d0606=_0x50a9e4[_0x41f390(0x17a)]()[_0x41f390(0x1d3)](/\s+/g,'\x20');return _0x1d0606[_0x41f390(0x1a6)]>0x0?_0x1d0606:null;}export function formatPlaywrightCliConsoleLogMessage(_0x45d30b,_0x396d47,_0x38fe15){const _0x5718f8=_0x3ff2,_0x2a81d9={'clBbe':function(_0x2d15a0,_0x56185f){return _0x2d15a0(_0x56185f);}},_0x557b42=formatPlaywrightCliLog(_0x396d47,_0x38fe15),_0x22661e=_0x2a81d9['clBbe'](extractPlaywrightCliToolDescription,_0x45d30b);if(!_0x22661e)return _0x5718f8(0x18a)+_0x557b42;if(process['env']['DEBUG'])return _0x5718f8(0x1ee)+_0x22661e+'\x20('+_0x557b42+')';return'[ranger-verification-agent]\x20'+_0x22661e;}export function buildVerifyFeatureCliDebugPrompt(_0x550fb5,_0x309c8a){const _0x503b38=_0x3ff2,_0xa7e87a={'CWQGt':function(_0x1eb94d,_0x23b85f,_0x3a9264){return _0x1eb94d(_0x23b85f,_0x3a9264);},'WiLHh':function(_0x368b26,_0x1bf8a9,_0x5efd94){return _0x368b26(_0x1bf8a9,_0x5efd94);},'lAvlG':function(_0x33de5d,_0x1f5bd7){return _0x33de5d(_0x1f5bd7);},'IslIs':function(_0x365725,_0x4fb09f){return _0x365725(_0x4fb09f);}},_0x55a531=_0xa7e87a['CWQGt'](buildCliArtifactPath,_0x309c8a,_0x503b38(0x1b4)),_0x47bdeb=buildCliArtifactPath(_0x309c8a,_0x503b38(0x1f1)),_0x2240e8=buildCliArtifactPath(_0x309c8a,_0x503b38(0x174)),_0x967502=_0xa7e87a[_0x503b38(0x1ba)](buildCliArtifactPath,_0x309c8a,'03_learn-more.png'),_0x8f1495=_0xa7e87a['lAvlG'](quoteShellArg,_0x55a531),_0x47f732=quoteShellArg(_0x47bdeb),_0x3bebd1=_0xa7e87a['lAvlG'](quoteShellArg,_0x2240e8),_0x4ec230=_0xa7e87a[_0x503b38(0x19a)](quoteShellArg,_0x967502);return _0x503b38(0x1de)+_0x550fb5+'\x0a\x0a1.\x20Run\x20`'+_0x550fb5+_0x503b38(0x1c7)+_0x550fb5+_0x503b38(0x1e1)+_0x550fb5+_0x503b38(0x183)+_0x309c8a+_0x503b38(0x1e7)+_0x550fb5+'\x20snapshot\x20--filename\x20'+_0x8f1495+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x550fb5+_0x503b38(0x19d)+_0x47f732+_0x503b38(0x19c)+_0x550fb5+'\x20snapshot\x20--filename\x20'+_0x3bebd1+_0x503b38(0x1e3)+_0x550fb5+'\x20screenshot\x20--filename\x20'+_0x4ec230+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0xe881bf){const _0x4eb70f=_0x3ff2,_0x112374={'rSQii':'en-US','jpOjl':_0x4eb70f(0x1e9),'DNFTe':'numeric','prlby':'\x20>\x20','dZGhq':'element','HrIrm':function(_0x463f54,_0x496899,_0x51fe90){return _0x463f54(_0x496899,_0x51fe90);},'dOIqJ':'key_03_success-state.png','dmLBI':function(_0x3eafce,_0x4160e4,_0x3e4058){return _0x3eafce(_0x4160e4,_0x3e4058);},'SKLac':function(_0x2ac1b8,_0x3937bd){return _0x2ac1b8(_0x3937bd);},'cFWae':function(_0x3a0862,_0x3cda1c,_0x323224){return _0x3a0862(_0x3cda1c,_0x323224);},'RJhAj':'03_result-visible.png','pjHca':_0x4eb70f(0x1c1)},{checklistItem:_0x11a516,itemFeedback:_0x1e256b,taskDescription:_0x2fd2c3,cliCommandPrefix:_0x35e128,cliArtifactDir:_0x55a450,isCdpMode:_0x3b6a1e,url:_0x37104d,cdpEndpoint:_0x3bfbcf,loginInstructions:_0xb4cc81}=_0xe881bf,_0x4808f5=_0x112374[_0x4eb70f(0x1e5)](buildCliArtifactPath,_0x55a450,'01_initial.yml'),_0x26103d=buildCliArtifactPath(_0x55a450,_0x4eb70f(0x189)),_0x2ffa7f=buildCliArtifactPath(_0x55a450,_0x112374[_0x4eb70f(0x1e2)]),_0xc3b9b2=_0x112374['dmLBI'](buildCliArtifactPath,_0x55a450,_0x4eb70f(0x185)),_0x2efcae=quoteShellArg(_0x4808f5),_0x390390=_0x112374[_0x4eb70f(0x16d)](quoteShellArg,_0x26103d),_0x526e4a=quoteShellArg(_0x2ffa7f),_0x3a28ec=_0x112374['SKLac'](quoteShellArg,_0xc3b9b2),_0x2d4918=_0x11a516['notes']?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x11a516['notes']:'';let _0x379751='';if(_0x1e256b&&_0x1e256b['unaddressedComments']['length']>0x0){const _0x3314db=_0x1e256b[_0x4eb70f(0x191)][_0x4eb70f(0x182)](_0x5ee17b=>{const _0x2a1b84=_0x4eb70f,_0x446858=new Date(_0x5ee17b[_0x2a1b84(0x1a0)])[_0x2a1b84(0x194)](_0x112374['rSQii'],{'month':_0x112374['jpOjl'],'day':_0x112374['DNFTe']}),_0x334e0a=_0x5ee17b[_0x2a1b84(0x17f)]||_0x5ee17b[_0x2a1b84(0x179)]||_0x2a1b84(0x1a1),_0x59b71d=_0x5ee17b[_0x2a1b84(0x1cf)]?_0x2a1b84(0x196)+(_0x5ee17b['domRef']['selector'][_0x2a1b84(0x172)](_0x112374[_0x2a1b84(0x1ed)])[_0x2a1b84(0x16a)]()?.['split'](':')[0x0]||_0x112374[_0x2a1b84(0x1c4)])+'>\x20\x22'+(_0x5ee17b[_0x2a1b84(0x1cf)]['textContent']||'')['slice'](0x0,0x32)+'\x22)':'';return _0x2a1b84(0x184)+_0x5ee17b['id']+_0x2a1b84(0x1e6)+_0x334e0a+'**\x20('+_0x446858+'):\x20\x22'+_0x5ee17b[_0x2a1b84(0x195)]+'\x22'+_0x59b71d;})['join']('\x0a');_0x379751=_0x4eb70f(0x1a8)+_0x3314db;}const _0x3fdde6=_0x1e256b?.['canonicalFlow']?_0x4eb70f(0x1da)+_0x1e256b['canonicalFlow']:'',_0x1cf0c2=_0x3b6a1e?_0x4eb70f(0x16c)+_0x3bfbcf+'.\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'+_0x37104d+_0x4eb70f(0x1a3),_0x3b8b9d=_0x37104d?quoteShellArg(_0x37104d):'',_0x123534=_0x3b6a1e?_0x4eb70f(0x1a5)+_0x35e128+'\x20open`,\x20then\x20`'+_0x35e128+'\x20tracing-start`,\x20then\x20`'+_0x35e128+_0x4eb70f(0x1ad)+_0x55a450+_0x4eb70f(0x17b)+_0x35e128+'\x20snapshot\x20--filename\x20'+_0x2efcae+_0x4eb70f(0x1c5)+_0x35e128+'\x20screenshot\x20--filename\x20'+_0x3a28ec+_0x4eb70f(0x1bf)+_0x35e128+_0x4eb70f(0x1ac):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x35e128+_0x4eb70f(0x1f6)+_0x3b8b9d+'`,\x20then\x20`'+_0x35e128+'\x20tracing-start`,\x20then\x20`'+_0x35e128+_0x4eb70f(0x1ad)+_0x55a450+_0x4eb70f(0x17b)+_0x35e128+_0x4eb70f(0x192)+_0x2efcae+'`\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`'+_0x35e128+_0x4eb70f(0x19d)+_0x3a28ec+_0x4eb70f(0x1e0)+_0x35e128+'\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',_0x112a27=_0x3b6a1e?'\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.':_0x4eb70f(0x1ec),_0x126ce1=_0xb4cc81?_0x4eb70f(0x1a2)+_0xb4cc81+'\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 _0x4eb70f(0x1d5)+_0x11a516['description']+_0x2d4918+_0x379751+_0x3fdde6+_0x4eb70f(0x1c6)+_0x2fd2c3+'\x0a\x0a'+_0x1cf0c2+_0x126ce1+'\x0a\x0a'+_0x123534+_0x4eb70f(0x1ef)+_0x35e128+_0x4eb70f(0x18f)+_0x55a450+_0x4eb70f(0x1b6)+_0x390390+_0x4eb70f(0x1ae)+_0x526e4a+_0x4eb70f(0x1db)+_0x55a450+'`:\x20\x22'+_0xc3b9b2+'\x22,\x20\x22'+buildCliArtifactPath(_0x55a450,_0x4eb70f(0x1d9))+'\x22,\x20\x22'+_0x112374['cFWae'](buildCliArtifactPath,_0x55a450,_0x112374['RJhAj'])+'\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'+_0x112374[_0x4eb70f(0x1e5)](buildCliArtifactPath,_0x55a450,_0x112374[_0x4eb70f(0x1b5)])+'\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'+_0x112a27+_0x4eb70f(0x19e);}export function summarizeVerifyFeatureCliCommandAvailability(_0x3683cf){const _0x477e69=_0x3ff2,_0x4f8f95={'dgFDX':function(_0x396c7b,_0x3ceffc){return _0x396c7b===_0x3ceffc;}},_0x34378d=[..._0x3683cf[_0x477e69(0x1dc)]()]['sort']();let _0x1e42ab=0x0;for(const _0x3f7081 of _0x3683cf[_0x477e69(0x1bc)]()){_0x1e42ab+=_0x3f7081;}return{'cliCommandCount':_0x1e42ab,'cliCommandsSeen':_0x34378d,'noCliCommandsCalled':_0x4f8f95['dgFDX'](_0x1e42ab,0x0)};}export function createVerifyFeatureCliHooks(_0x9955c8){const _0x17119f={'oNXkI':function(_0x80e5ae,_0x353140){return _0x80e5ae!==_0x353140;},'lkMYR':function(_0x5e2d60,_0x16b7af){return _0x5e2d60(_0x16b7af);},'DMgpM':function(_0x939e3e,_0x5a884d){return _0x939e3e+_0x5a884d;},'MZcFZ':'tool_call','Hckdq':'PostToolUseFailure','gQCSC':function(_0xfa45a3,_0x4b0612){return _0xfa45a3!==_0x4b0612;},'Isgtd':'playwright-cli'},_0x61d940=new Map(),_0x8f7c5=async _0x45d6e2=>{const _0x1eb3ef=_0x3ff2;if(_0x17119f['oNXkI'](_0x45d6e2[_0x1eb3ef(0x180)],_0x1eb3ef(0x19f)))return{};const _0x5b13bf=_0x45d6e2;if(_0x5b13bf['tool_name']!=='Bash')return{};const _0x40f213=_0x5b13bf['tool_input'],_0x94912e=extractBashCommand(_0x40f213);if(!_0x94912e)return{};const _0x67dd67=_0x17119f['lkMYR'](parsePlaywrightCliCommand,_0x94912e);if(!_0x67dd67)return{};return _0x61d940['set'](_0x67dd67,_0x17119f[_0x1eb3ef(0x1a7)](_0x61d940[_0x1eb3ef(0x1e8)](_0x67dd67)||0x0,0x1)),_0x9955c8[_0x1eb3ef(0x181)](_0x1eb3ef(0x1d4),{'transport':'playwright-cli','toolName':_0x67dd67}),_0x9955c8[_0x1eb3ef(0x1c3)](_0x17119f[_0x1eb3ef(0x1dd)],{'transport':'playwright-cli','toolName':_0x67dd67,'bashCommandPreview':truncatePreview(_0x94912e)}),_0x67dd67!==_0x1eb3ef(0x1a4)&&console['log'](formatPlaywrightCliConsoleLogMessage(_0x40f213,_0x94912e,_0x67dd67)),{};},_0x53b621=async _0x5d4ec2=>{const _0x54f9f3=_0x3ff2;if(_0x17119f['oNXkI'](_0x5d4ec2['hook_event_name'],_0x17119f['Hckdq']))return{};const _0x488c76=_0x5d4ec2;if(_0x17119f[_0x54f9f3(0x1b7)](_0x488c76['tool_name'],_0x54f9f3(0x1bb)))return{};return await _0x9955c8[_0x54f9f3(0x173)](_0x54f9f3(0x18d),_0x488c76[_0x54f9f3(0x1f5)],{'transport':_0x17119f['Isgtd'],'toolName':_0x54f9f3(0x1bb)}),{};};return{'postToolUseHook':_0x8f7c5,'postToolUseFailureHook':_0x53b621,'commandCounts':_0x61d940};}function _0x3ff2(_0x31a6cf,_0x12ace3){_0x31a6cf=_0x31a6cf-0x16a;const _0x12e1d0=_0x12e1();let _0x3ff22f=_0x12e1d0[_0x31a6cf];return _0x3ff22f;}async function runPlaywrightCliLifecycleCommand(_0x3a583b){const _0x4ae655=_0x3ff2,_0x23c811={'TvXtA':function(_0x5b11d4,_0x3b1219){return _0x5b11d4(_0x3b1219);},'Vzbee':function(_0x45c927,_0x2b6398){return _0x45c927??_0x2b6398;},'pvcxB':function(_0x58a5d1,_0x54bd4,_0x4114ea){return _0x58a5d1(_0x54bd4,_0x4114ea);}},{sessionId:_0x3a1abb,configPath:_0x1beed8,commandArgs:_0x3b72d9,env:_0x52efa5,telemetry:_0x5279ef,phase:_0x55dbb8,metadata:_0x24a5b8,timeoutMs:_0x33473b}=_0x3a583b;_0x5279ef[_0x4ae655(0x181)](_0x55dbb8,_0x24a5b8);try{const _0x2a7850=await _0x23c811['TvXtA'](runPlaywrightCliCommand,{'sessionId':_0x3a1abb,'configPath':_0x1beed8,'commandArgs':_0x3b72d9,'cwd':process[_0x4ae655(0x1cd)](),'env':_0x52efa5,'timeoutMs':_0x23c811[_0x4ae655(0x1d1)](_0x33473b,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x5279ef[_0x4ae655(0x1c3)](_0x55dbb8,{..._0x24a5b8,'subcommand':_0x2a7850[_0x4ae655(0x19b)][_0x4ae655(0x16e)],'stdoutPreview':truncatePreview(_0x2a7850[_0x4ae655(0x193)],0x7d0),'stderrPreview':_0x23c811['pvcxB'](truncatePreview,_0x2a7850['stderr'],0x7d0)});}catch(_0x55cde3){await _0x5279ef['trackPhaseError'](_0x55dbb8,_0x55cde3,_0x24a5b8);throw _0x55cde3;}}export async function finalizeVerifyFeatureCliSession(_0x559847){const _0x555a2a=_0x3ff2,_0x16efa5={'WJKJz':_0x555a2a(0x1ea),'hlBwA':'tracing-stop','kfOyf':'playwright_cli_video_stop','vaPmy':'session-recording.webm'},{telemetry:_0x390b9e,sessionId:_0x521f87,configPath:_0xf9ced4,cliArtifactDir:_0x2c25bf,env:_0x5b14b2,transportMetadata:_0x1be6d0}=_0x559847,_0x545c83=[{'phase':_0x16efa5[_0x555a2a(0x16b)],'commandArgs':[_0x16efa5['hlBwA']]},{'phase':_0x16efa5[_0x555a2a(0x1ab)],'commandArgs':[_0x555a2a(0x199),_0x555a2a(0x1ce)+buildCliArtifactPath(_0x2c25bf,_0x16efa5[_0x555a2a(0x1a9)])]},{'phase':'playwright_cli_close','commandArgs':[_0x555a2a(0x190)]}];for(const _0x3d2fcb of _0x545c83){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x521f87,'configPath':_0xf9ced4,'commandArgs':[..._0x3d2fcb['commandArgs']],'env':_0x5b14b2,'telemetry':_0x390b9e,'phase':_0x3d2fcb[_0x555a2a(0x18b)],'metadata':_0x1be6d0});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x1c4140){const _0x4f4017=_0x3ff2,_0xee2628={'vPlAX':'trace.zip','xTtPu':function(_0x45d98f,_0x1a7387,_0x583569){return _0x45d98f(_0x1a7387,_0x583569);}},_0x3c62dc=[_0xee2628['vPlAX'],_0x4f4017(0x198)];for(const _0x248f59 of _0x3c62dc){const _0x2bb5c4=_0xee2628['xTtPu'](join,_0x1c4140,_0x248f59);try{return{'buffer':await readFile(_0x2bb5c4),'source':_0x2bb5c4};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x2c1741){const _0x383ca6=_0x3ff2,_0x5f5be1={'Audce':function(_0x347178,_0xf97771,_0x20dca1){return _0x347178(_0xf97771,_0x20dca1);},'PZPsN':function(_0x18728e,_0x2f9222){return _0x18728e+_0x2f9222;},'BrRzw':function(_0x4659bb,_0x16d379,_0x4fd2b6){return _0x4659bb(_0x16d379,_0x4fd2b6);},'XAcGB':function(_0x291337,_0x3262f8){return _0x291337===_0x3262f8;}},{cwd:_0x6d7d9,cliArtifactDir:_0x215b8a,startTime:_0x537e3f}=_0x2c1741,_0x4f7ef8=[];await _0x5f5be1[_0x383ca6(0x1f4)](mkdir,_0x215b8a,{'recursive':!![]});const _0x3a67dd=await _0x5f5be1['Audce'](readdir,_0x6d7d9,{'withFileTypes':!![]});for(const _0x4678f5 of _0x3a67dd){if(!_0x4678f5['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x4678f5[_0x383ca6(0x188)]))continue;const _0x49d012=join(_0x6d7d9,_0x4678f5['name']),_0x3cb95f=await stat(_0x49d012);if(_0x5f5be1['PZPsN'](_0x3cb95f[_0x383ca6(0x197)],0x7d0)<_0x537e3f)continue;const _0x4c06eb=_0x5f5be1[_0x383ca6(0x1b3)](buildCliArtifactPath,_0x215b8a,_0x4678f5['name']);if(_0x5f5be1['XAcGB'](_0x49d012,_0x4c06eb))continue;await rename(_0x49d012,_0x4c06eb),_0x4f7ef8['push'](_0x4678f5['name']);}return _0x4f7ef8[_0x383ca6(0x1d6)]();}
1
+ (function(_0x1c0216,_0x2f19e3){const _0x4d41a7=_0x3db8,_0x4b813a=_0x1c0216();while(!![]){try{const _0x5d91b0=parseInt(_0x4d41a7(0x15a))/0x1+parseInt(_0x4d41a7(0x188))/0x2+parseInt(_0x4d41a7(0x116))/0x3*(-parseInt(_0x4d41a7(0x182))/0x4)+parseInt(_0x4d41a7(0x18a))/0x5*(-parseInt(_0x4d41a7(0x112))/0x6)+parseInt(_0x4d41a7(0x163))/0x7+parseInt(_0x4d41a7(0x12a))/0x8*(parseInt(_0x4d41a7(0x123))/0x9)+parseInt(_0x4d41a7(0x12d))/0xa;if(_0x5d91b0===_0x2f19e3)break;else _0x4b813a['push'](_0x4b813a['shift']());}catch(_0x434dcd){_0x4b813a['push'](_0x4b813a['shift']());}}}(_0x218a,0x7c9eb));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(_0x569337,_0x25920c=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x457637=_0x3db8,_0x55b831={'gEbAP':function(_0x465da1,_0x2cbf2a){return _0x465da1+_0x2cbf2a;}};return _0x569337['length']>_0x25920c?_0x55b831['gEbAP'](_0x569337[_0x457637(0x129)](0x0,_0x25920c),_0x457637(0x150)):_0x569337;}function buildCliArtifactPath(_0x11c362,_0x2b0a6f){return join(_0x11c362,_0x2b0a6f);}function toStepDisplayName(_0x4d9f1e){const _0x58a415=_0x3db8,_0x2cd5a7={'LulbW':function(_0x4427b0,_0x2d316b){return _0x4427b0(_0x2d316b);}},_0x10df28=basename(_0x4d9f1e)[_0x58a415(0x133)](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')['replace'](/^\d+_/,'')[_0x58a415(0x133)](/-/g,'\x20');return{'name':_0x10df28,'isKeyStep':/^key_/i[_0x58a415(0x109)](_0x2cd5a7['LulbW'](basename,_0x4d9f1e))};}function _0x218a(){const _0x4eb0f1=['content','lEsKv','fill','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','FdOJM','PicCP','12194OcSKAl','get','\x20open\x20','run\x20custom\x20Playwright\x20code','xjiUV','IiZek','\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','PostToolUse','MQFfR','2980082AYGTuv','tracing-start','sort','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','short','RDVNR','SzMTB','pop','capture\x20step\x20`','session-recording.webm','tracing-stop','JLTAc','open','unaddressedComments','PEbMo','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','GwOxH','wjRMq','YtZNc','pGdbL','\x22,\x20\x22','trace.zip','-\x20[','capture\x20screenshot','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','Reviewer','open\x20','ref\x20','NnkYU','`\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','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','29644WkhSWh','match','\x20open`,\x20then\x20`','aVPIq','isFile','SwBsY','157906qdXqeO','\x20tracing-start`,\x20then\x20`','5pEFQPZ','`:\x20\x22','open\x20new\x20tab','(?:^|\x5cs)','\x20snapshot\x20--filename\x20','phase','check','00_mozilla-homepage.yml','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','createdAt','UHBxu','\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.','commandArgs','key_04_success-state.png','test','VPGXA','capture\x20snapshot',']\x20**','tool_failure','fill\x20','\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','playwright-cli','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','4175088myEUol','tab-new','log','toocH','246jGeDfc','[playwright-cli]\x20','aruDE','`,\x20then\x20`','map','trim','cXVxC','KicDs','zfYmF','CTNGV','notes','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','\x20screenshot\x20--filename\x20','90avavFc','name','tool_call','tool_name','YOXyC','split','slice','50824EpLLgQ','authorName','capture\x20key\x20step\x20`','12335900gFKXfv','domRef','start\x20tracing','trackPhaseStart','`\x0a-\x20`snapshot\x20--filename\x20','press','replace','trace.trace.zip','zIaUi','set','PostToolUseFailure','`\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`','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','cwd','[ranger-verification-agent]\x20','02_learn-more.yml','):\x20\x22','numeric','check\x20','video-stop','kCfcK','press\x20','\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.','push','trackPhaseEnd','`\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`','click','element','`\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`','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','RLABE','stringify','LJUhe','tab-select','canonicalFlow','...','select\x20tab\x20','IVZwH','03_learn-more.png'];_0x218a=function(){return _0x4eb0f1;};return _0x218a();}function extractShellValue(_0x268984){if(!_0x268984)return null;return _0x268984[0x1]??_0x268984[0x2]??_0x268984[0x3]??null;}function extractFilenameOption(_0x198579){return extractShellValue(_0x198579['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x211e4c,_0x312a02){const _0xc82802=_0x3db8,_0x135669={'SzMTB':'\x5c$&','XzKFO':function(_0x48da2b,_0x170ed5){return _0x48da2b(_0x170ed5);}},_0x594828=_0x312a02['replace'](/[.*+?^${}()|[\]\\]/g,_0x135669[_0xc82802(0x169)]);return _0x135669['XzKFO'](extractShellValue,_0x211e4c[_0xc82802(0x183)](new RegExp(_0xc82802(0x18d)+_0x594828+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0xd345bc){const _0x416e46=_0x3db8,_0x35b61f={'Mmmnv':function(_0x16c6f6,_0x398aa3,_0x3048d5){return _0x16c6f6(_0x398aa3,_0x3048d5);}};if(!_0xd345bc)return'target';if(/^e\d+$/i[_0x416e46(0x109)](_0xd345bc))return _0x416e46(0x17e)+_0xd345bc;return JSON[_0x416e46(0x14c)](_0x35b61f['Mmmnv'](truncatePreview,_0xd345bc,0x78));}function _0x3db8(_0x95e992,_0x41f106){_0x95e992=_0x95e992-0x103;const _0x218aeb=_0x218a();let _0x3db8da=_0x218aeb[_0x95e992];return _0x3db8da;}function formatPlaywrightCliLog(_0x4d4088,_0x561ff8){const _0x26a541=_0x3db8,_0x5d4851={'PEbMo':function(_0x3bb7ec,_0x2d1486,_0x2ff4e9){return _0x3bb7ec(_0x2d1486,_0x2ff4e9);},'MOLAT':_0x26a541(0x164),'lEsKv':'video-start','YOXyC':'snapshot','SrSnB':function(_0x583420,_0x52f009){return _0x583420(_0x52f009);},'bnbfy':_0x26a541(0x10b),'NnkYU':_0x26a541(0x147),'kKKWF':function(_0x467b98,_0x3431b8,_0x1d69f7){return _0x467b98(_0x3431b8,_0x1d69f7);},'CTNGV':_0x26a541(0x190),'Zhyjf':function(_0x549e60,_0x155a6b,_0x9d3867){return _0x549e60(_0x155a6b,_0x9d3867);},'IiZek':'run-code','ElMUm':_0x26a541(0x15d),'RLABE':_0x26a541(0x18c),'GwOxH':_0x26a541(0x14e),'xVndT':'select\x20tab'};switch(_0x561ff8){case _0x26a541(0x16f):{const _0x5d3c08=_0x5d4851[_0x26a541(0x171)](extractFirstCommandArgument,_0x4d4088,_0x561ff8);return _0x5d3c08?_0x26a541(0x17d)+_0x5d3c08:'open\x20browser';}case _0x5d4851['MOLAT']:return _0x26a541(0x12f);case _0x26a541(0x16d):return'stop\x20tracing';case _0x5d4851[_0x26a541(0x155)]:return'start\x20video\x20recording';case _0x26a541(0x140):return'stop\x20video\x20recording';case _0x5d4851[_0x26a541(0x127)]:{const _0x111414=_0x5d4851['SrSnB'](extractFilenameOption,_0x4d4088);if(!_0x111414)return _0x5d4851['bnbfy'];const {name:_0x34e732}=_0x5d4851['SrSnB'](toStepDisplayName,_0x111414);return'capture\x20snapshot\x20`'+_0x34e732+'`';}case'screenshot':{const _0x225d06=extractFilenameOption(_0x4d4088);if(!_0x225d06)return _0x26a541(0x17a);const {name:_0x5f5c0f,isKeyStep:_0x5d1f73}=toStepDisplayName(_0x225d06);return _0x5d1f73?_0x26a541(0x12c)+_0x5f5c0f+'`':_0x26a541(0x16b)+_0x5f5c0f+'`';}case _0x5d4851[_0x26a541(0x17f)]:return'click\x20'+formatCommandTarget(_0x5d4851['kKKWF'](extractFirstCommandArgument,_0x4d4088,_0x561ff8));case _0x5d4851[_0x26a541(0x11f)]:return _0x26a541(0x13f)+formatCommandTarget(_0x5d4851['Zhyjf'](extractFirstCommandArgument,_0x4d4088,_0x561ff8));case _0x26a541(0x156):return _0x26a541(0x10e)+formatCommandTarget(extractFirstCommandArgument(_0x4d4088,_0x561ff8));case _0x26a541(0x132):return _0x26a541(0x142)+formatCommandTarget(extractFirstCommandArgument(_0x4d4088,_0x561ff8));case _0x5d4851[_0x26a541(0x15f)]:return _0x5d4851['ElMUm'];case _0x26a541(0x113):{const _0x18845c=extractFirstCommandArgument(_0x4d4088,_0x561ff8);return _0x18845c?'open\x20new\x20tab\x20'+_0x18845c:_0x5d4851[_0x26a541(0x14b)];}case _0x5d4851[_0x26a541(0x173)]:{const _0x464eae=_0x5d4851['kKKWF'](extractFirstCommandArgument,_0x4d4088,_0x561ff8);return _0x464eae?_0x26a541(0x151)+_0x464eae:_0x5d4851['xVndT'];}default:return _0x561ff8;}}function extractPlaywrightCliToolDescription(_0x7fdb52){const _0x3b32dc=_0x3db8,_0xe2a0c4={'ZgrHe':function(_0x219534,_0x3fec52){return _0x219534!==_0x3fec52;},'pGdbL':'string','RwJeT':function(_0x5d4912,_0x2862e8){return _0x5d4912>_0x2862e8;}},_0x5cfdc1=_0x7fdb52['description'];if(_0xe2a0c4['ZgrHe'](typeof _0x5cfdc1,_0xe2a0c4[_0x3b32dc(0x176)]))return null;const _0x43fc49=_0x5cfdc1[_0x3b32dc(0x11b)]()['replace'](/\s+/g,'\x20');return _0xe2a0c4['RwJeT'](_0x43fc49['length'],0x0)?_0x43fc49:null;}export function formatPlaywrightCliConsoleLogMessage(_0xd8b6c4,_0x557e60,_0x231b29){const _0x210d3f=_0x3db8,_0x2cfa3f=formatPlaywrightCliLog(_0x557e60,_0x231b29),_0x213010=extractPlaywrightCliToolDescription(_0xd8b6c4);if(!_0x213010)return _0x210d3f(0x117)+_0x2cfa3f;if(process['env']['DEBUG'])return _0x210d3f(0x13b)+_0x213010+'\x20('+_0x2cfa3f+')';return'[ranger-verification-agent]\x20'+_0x213010;}export function buildVerifyFeatureCliDebugPrompt(_0x544748,_0xb1108){const _0x445db1=_0x3db8,_0x4ffd49={'kCfcK':function(_0xf2bc38,_0xeb7ef9,_0x45b1ab){return _0xf2bc38(_0xeb7ef9,_0x45b1ab);},'QMlPS':_0x445db1(0x191),'YtZNc':function(_0x208aba,_0x1be5a1,_0x33631b){return _0x208aba(_0x1be5a1,_0x33631b);},'IVZwH':function(_0x4e6d6b,_0x1d063e){return _0x4e6d6b(_0x1d063e);},'SwBsY':function(_0x1e3a5c,_0x589fce){return _0x1e3a5c(_0x589fce);}},_0x3b74ad=_0x4ffd49[_0x445db1(0x141)](buildCliArtifactPath,_0xb1108,_0x4ffd49['QMlPS']),_0x323777=buildCliArtifactPath(_0xb1108,'01_mozilla-homepage.png'),_0x567d29=_0x4ffd49[_0x445db1(0x175)](buildCliArtifactPath,_0xb1108,_0x445db1(0x13c)),_0xe2dd3a=_0x4ffd49['kCfcK'](buildCliArtifactPath,_0xb1108,_0x445db1(0x153)),_0x550216=_0x4ffd49[_0x445db1(0x152)](quoteShellArg,_0x3b74ad),_0x278ec7=_0x4ffd49[_0x445db1(0x187)](quoteShellArg,_0x323777),_0x3b621c=quoteShellArg(_0x567d29),_0x41dd58=_0x4ffd49['SwBsY'](quoteShellArg,_0xe2dd3a);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x544748+'\x0a\x0a1.\x20Run\x20`'+_0x544748+'\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`'+_0x544748+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x544748+_0x445db1(0x103)+_0xb1108+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x544748+_0x445db1(0x18e)+_0x550216+_0x445db1(0x181)+_0x544748+'\x20screenshot\x20--filename\x20'+_0x278ec7+_0x445db1(0x17b)+_0x544748+_0x445db1(0x18e)+_0x3b621c+'`\x0a9.\x20Run\x20`'+_0x544748+_0x445db1(0x122)+_0x41dd58+_0x445db1(0x157);}export function buildVerifyFeatureCliPrompt(_0x3dddda){const _0xd061e3=_0x3db8,_0x5400e5={'diSHY':_0xd061e3(0x13e),'VPGXA':'\x20>\x20','EDLha':function(_0x1c92e0,_0x24d9ce,_0x4c7a4a){return _0x1c92e0(_0x24d9ce,_0x4c7a4a);},'eMEdB':'key_03_success-state.png','sXvgZ':function(_0x18c2d1,_0x180c15){return _0x18c2d1(_0x180c15);},'gRYjJ':function(_0x55694a,_0x523a00,_0x5333f9){return _0x55694a(_0x523a00,_0x5333f9);},'BfMgj':'03_result-visible.png','UCbZV':_0xd061e3(0x108)},{checklistItem:_0x18f36e,itemFeedback:_0x72693,taskDescription:_0x261daf,cliCommandPrefix:_0x24c2e3,cliArtifactDir:_0x4fd721,isCdpMode:_0x569c48,url:_0x5d0615,cdpEndpoint:_0xa14002,loginInstructions:_0x4a424e}=_0x3dddda,_0x4c121d=_0x5400e5['EDLha'](buildCliArtifactPath,_0x4fd721,'01_initial.yml'),_0x571bde=buildCliArtifactPath(_0x4fd721,'02_state.yml'),_0x219eb8=_0x5400e5['EDLha'](buildCliArtifactPath,_0x4fd721,_0x5400e5['eMEdB']),_0x268a4a=buildCliArtifactPath(_0x4fd721,'01_initial-state.png'),_0x2ed033=quoteShellArg(_0x4c121d),_0x3faa48=quoteShellArg(_0x571bde),_0x282ba6=quoteShellArg(_0x219eb8),_0x162995=_0x5400e5['sXvgZ'](quoteShellArg,_0x268a4a),_0x50e80e=_0x18f36e['notes']?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x18f36e[_0xd061e3(0x120)]:'';let _0x3fb455='';if(_0x72693&&_0x72693['unaddressedComments']['length']>0x0){const _0x5a9229=_0x72693[_0xd061e3(0x170)][_0xd061e3(0x11a)](_0xb0e927=>{const _0xe064a8=_0xd061e3,_0x35a98d=new Date(_0xb0e927[_0xe064a8(0x104)])['toLocaleDateString']('en-US',{'month':_0xe064a8(0x167),'day':_0x5400e5['diSHY']}),_0x3e7256=_0xb0e927[_0xe064a8(0x12b)]||_0xb0e927['authorEmail']||_0xe064a8(0x17c),_0x4a904d=_0xb0e927[_0xe064a8(0x12e)]?'\x20(on\x20element:\x20<'+(_0xb0e927['domRef']['selector'][_0xe064a8(0x128)](_0x5400e5[_0xe064a8(0x10a)])[_0xe064a8(0x16a)]()?.['split'](':')[0x0]||_0xe064a8(0x148))+'>\x20\x22'+(_0xb0e927['domRef']['textContent']||'')[_0xe064a8(0x129)](0x0,0x32)+'\x22)':'';return _0xe064a8(0x179)+_0xb0e927['id']+_0xe064a8(0x10c)+_0x3e7256+'**\x20('+_0x35a98d+_0xe064a8(0x13d)+_0xb0e927[_0xe064a8(0x154)]+'\x22'+_0x4a904d;})['join']('\x0a');_0x3fb455=_0xd061e3(0x10f)+_0x5a9229;}const _0x4d45dd=_0x72693?.[_0xd061e3(0x14f)]?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0x72693['canonicalFlow']:'',_0x335426=_0x569c48?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0xa14002+_0xd061e3(0x139):'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x5d0615+'\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',_0x41ef14=_0x5d0615?quoteShellArg(_0x5d0615):'',_0x32267b=_0x569c48?_0xd061e3(0x172)+_0x24c2e3+_0xd061e3(0x184)+_0x24c2e3+_0xd061e3(0x189)+_0x24c2e3+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x4fd721+_0xd061e3(0x14a)+_0x24c2e3+'\x20snapshot\x20--filename\x20'+_0x2ed033+_0xd061e3(0x138)+_0x24c2e3+_0xd061e3(0x122)+_0x162995+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x24c2e3+'\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a7.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a8.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario':'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x24c2e3+_0xd061e3(0x15c)+_0x41ef14+_0xd061e3(0x119)+_0x24c2e3+'\x20tracing-start`,\x20then\x20`'+_0x24c2e3+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x4fd721+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x24c2e3+_0xd061e3(0x18e)+_0x2ed033+_0xd061e3(0x146)+_0x24c2e3+_0xd061e3(0x122)+_0x162995+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x24c2e3+'\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',_0xafdbb5=_0x569c48?'\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.':_0xd061e3(0x106),_0x2ba9a0=_0x4a424e?_0xd061e3(0x121)+_0x4a424e+'\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'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'+_0x18f36e['description']+_0x50e80e+_0x3fb455+_0x4d45dd+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x261daf+'\x0a\x0a'+_0x335426+_0x2ba9a0+'\x0a\x0a'+_0x32267b+_0xd061e3(0x111)+_0x24c2e3+_0xd061e3(0x166)+_0x4fd721+_0xd061e3(0x131)+_0x3faa48+_0xd061e3(0x180)+_0x282ba6+_0xd061e3(0x149)+_0x4fd721+_0xd061e3(0x18b)+_0x268a4a+_0xd061e3(0x177)+buildCliArtifactPath(_0x4fd721,'02_button-clicked.png')+_0xd061e3(0x177)+_0x5400e5['gRYjJ'](buildCliArtifactPath,_0x4fd721,_0x5400e5['BfMgj'])+'\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(_0x4fd721,_0x5400e5['UCbZV'])+_0xd061e3(0x160)+_0xafdbb5+_0xd061e3(0x143);}export function summarizeVerifyFeatureCliCommandAvailability(_0x5de1a9){const _0x86ebd7=_0x3db8,_0x450668=[..._0x5de1a9['keys']()][_0x86ebd7(0x165)]();let _0x321d3c=0x0;for(const _0x925aa of _0x5de1a9['values']()){_0x321d3c+=_0x925aa;}return{'cliCommandCount':_0x321d3c,'cliCommandsSeen':_0x450668,'noCliCommandsCalled':_0x321d3c===0x0};}export function createVerifyFeatureCliHooks(_0x3f1956){const _0x252c7c=_0x3db8,_0x2051c0={'Xaxpt':_0x252c7c(0x161),'QLJqj':function(_0x104499,_0x4ef398){return _0x104499!==_0x4ef398;},'PicCP':_0x252c7c(0x110),'cXVxC':function(_0x1c26c4,_0x335a84){return _0x1c26c4!==_0x335a84;},'xjiUV':function(_0x1ce802,_0x3a808b,_0x2b1970,_0x109452){return _0x1ce802(_0x3a808b,_0x2b1970,_0x109452);},'KicDs':_0x252c7c(0x137),'LJUhe':_0x252c7c(0x10d),'aruDE':'Bash'},_0x5987b2=new Map(),_0x31054b=async _0xadb939=>{const _0x5545c0=_0x252c7c;if(_0xadb939['hook_event_name']!==_0x2051c0['Xaxpt'])return{};const _0x1d5270=_0xadb939;if(_0x2051c0['QLJqj'](_0x1d5270[_0x5545c0(0x126)],'Bash'))return{};const _0x2b5801=_0x1d5270['tool_input'],_0x4df085=extractBashCommand(_0x2b5801);if(!_0x4df085)return{};const _0x395e70=parsePlaywrightCliCommand(_0x4df085);if(!_0x395e70)return{};return _0x5987b2[_0x5545c0(0x136)](_0x395e70,(_0x5987b2[_0x5545c0(0x15b)](_0x395e70)||0x0)+0x1),_0x3f1956['trackPhaseStart'](_0x5545c0(0x125),{'transport':_0x2051c0[_0x5545c0(0x159)],'toolName':_0x395e70}),_0x3f1956['trackPhaseEnd']('tool_call',{'transport':'playwright-cli','toolName':_0x395e70,'bashCommandPreview':truncatePreview(_0x4df085)}),_0x2051c0[_0x5545c0(0x11c)](_0x395e70,'snapshot')&&console[_0x5545c0(0x114)](_0x2051c0[_0x5545c0(0x15e)](formatPlaywrightCliConsoleLogMessage,_0x2b5801,_0x4df085,_0x395e70)),{};},_0x3cfa81=async _0x31e271=>{const _0x33227c=_0x252c7c;if(_0x31e271['hook_event_name']!==_0x2051c0[_0x33227c(0x11d)])return{};const _0x1e8d6e=_0x31e271;if(_0x2051c0['cXVxC'](_0x1e8d6e['tool_name'],'Bash'))return{};return await _0x3f1956['trackPhaseError'](_0x2051c0[_0x33227c(0x14d)],_0x1e8d6e['error'],{'transport':_0x33227c(0x110),'toolName':_0x2051c0[_0x33227c(0x118)]}),{};};return{'postToolUseHook':_0x31054b,'postToolUseFailureHook':_0x3cfa81,'commandCounts':_0x5987b2};}async function runPlaywrightCliLifecycleCommand(_0x590253){const _0x3f1146=_0x3db8,_0x41c821={'zIaUi':function(_0x1c8fc5,_0x1ba157){return _0x1c8fc5??_0x1ba157;}},{sessionId:_0x898356,configPath:_0x2746e0,commandArgs:_0x598b38,env:_0x779ff3,telemetry:_0x21619b,phase:_0x4c1d70,metadata:_0x456e56,timeoutMs:_0x11fe0d}=_0x590253;_0x21619b[_0x3f1146(0x130)](_0x4c1d70,_0x456e56);try{const _0x3843e8=await runPlaywrightCliCommand({'sessionId':_0x898356,'configPath':_0x2746e0,'commandArgs':_0x598b38,'cwd':process[_0x3f1146(0x13a)](),'env':_0x779ff3,'timeoutMs':_0x41c821[_0x3f1146(0x135)](_0x11fe0d,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x21619b[_0x3f1146(0x145)](_0x4c1d70,{..._0x456e56,'subcommand':_0x3843e8['invocation']['subcommand'],'stdoutPreview':truncatePreview(_0x3843e8['stdout'],0x7d0),'stderrPreview':truncatePreview(_0x3843e8['stderr'],0x7d0)});}catch(_0x224ffa){await _0x21619b['trackPhaseError'](_0x4c1d70,_0x224ffa,_0x456e56);throw _0x224ffa;}}export async function finalizeVerifyFeatureCliSession(_0x9a881a){const _0x27de4b=_0x3db8,_0x384c2d={'JLTAc':'playwright_cli_video_stop','aVPIq':_0x27de4b(0x140),'wjRMq':function(_0x2fb7a7,_0x5bc6a1,_0x5f411d){return _0x2fb7a7(_0x5bc6a1,_0x5f411d);},'lApEZ':'playwright_cli_close','JtRRA':function(_0x5ab1cf,_0x26645d){return _0x5ab1cf(_0x26645d);}},{telemetry:_0x226223,sessionId:_0x4f4b0b,configPath:_0x329d19,cliArtifactDir:_0x463cbe,env:_0x2cfd0e,transportMetadata:_0x581c8a}=_0x9a881a,_0x4c1309=[{'phase':'playwright_cli_tracing_stop','commandArgs':['tracing-stop']},{'phase':_0x384c2d[_0x27de4b(0x16e)],'commandArgs':[_0x384c2d[_0x27de4b(0x185)],'--filename='+_0x384c2d[_0x27de4b(0x174)](buildCliArtifactPath,_0x463cbe,_0x27de4b(0x16c))]},{'phase':_0x384c2d['lApEZ'],'commandArgs':['close']}];for(const _0x434d20 of _0x4c1309){try{await _0x384c2d['JtRRA'](runPlaywrightCliLifecycleCommand,{'sessionId':_0x4f4b0b,'configPath':_0x329d19,'commandArgs':[..._0x434d20[_0x27de4b(0x107)]],'env':_0x2cfd0e,'telemetry':_0x226223,'phase':_0x434d20[_0x27de4b(0x18f)],'metadata':_0x581c8a});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x2f50da){const _0x2c863e=_0x3db8,_0x14a6e2={'MQFfR':function(_0x2771a1,_0x12f79c,_0x5aa292){return _0x2771a1(_0x12f79c,_0x5aa292);},'toocH':function(_0x53f0b0,_0x1802fc){return _0x53f0b0(_0x1802fc);}},_0x1dae97=[_0x2c863e(0x178),_0x2c863e(0x134)];for(const _0x352012 of _0x1dae97){const _0x4c991a=_0x14a6e2[_0x2c863e(0x162)](join,_0x2f50da,_0x352012);try{return{'buffer':await _0x14a6e2[_0x2c863e(0x115)](readFile,_0x4c991a),'source':_0x4c991a};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x233b0c){const _0x3d075f=_0x3db8,_0x4ffac9={'iejJe':function(_0x141b49,_0x386c57){return _0x141b49(_0x386c57);},'RDVNR':function(_0x5a5b45,_0x1bd2f0){return _0x5a5b45<_0x1bd2f0;},'FdOJM':function(_0x40daf9,_0x21a47a){return _0x40daf9+_0x21a47a;},'UHBxu':function(_0x263fb8,_0x5e7ed4){return _0x263fb8===_0x5e7ed4;},'zfYmF':function(_0x494d11,_0xb2eee9,_0x596f83){return _0x494d11(_0xb2eee9,_0x596f83);}},{cwd:_0xeb9cb2,cliArtifactDir:_0x3c7d70,startTime:_0x573dbc}=_0x233b0c,_0x285a35=[];await mkdir(_0x3c7d70,{'recursive':!![]});const _0x545fc8=await readdir(_0xeb9cb2,{'withFileTypes':!![]});for(const _0x30b7ff of _0x545fc8){if(!_0x30b7ff[_0x3d075f(0x186)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x3d075f(0x109)](_0x30b7ff[_0x3d075f(0x124)]))continue;const _0x1091f8=join(_0xeb9cb2,_0x30b7ff[_0x3d075f(0x124)]),_0x24551f=await _0x4ffac9['iejJe'](stat,_0x1091f8);if(_0x4ffac9[_0x3d075f(0x168)](_0x4ffac9[_0x3d075f(0x158)](_0x24551f['mtimeMs'],0x7d0),_0x573dbc))continue;const _0x260766=buildCliArtifactPath(_0x3c7d70,_0x30b7ff['name']);if(_0x4ffac9[_0x3d075f(0x105)](_0x1091f8,_0x260766))continue;await _0x4ffac9[_0x3d075f(0x11e)](rename,_0x1091f8,_0x260766),_0x285a35[_0x3d075f(0x144)](_0x30b7ff[_0x3d075f(0x124)]);}return _0x285a35['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 from user creds
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"), skip the create/setup ceremony and run verification directly:
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
- If a feature review is required and none is active, the CLI will create one automatically. Do **not** run `ranger-cli create` first unless the user explicitly asks for a structured feature review with multiple scenarios.
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
- When credentials sit in a `.env` next to the user's repo (look for `RANGER_TEST_USERNAME` / `RANGER_TEST_PASSWORD` / `TARGET_URL`), source that file inline before running `go` instead of typing the values.
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
- This skill covers three workflows for Ranger feature review tracking:
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
- ## Supported Workflows
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**: Ask the user to run `ranger-cli profile update <profile-name>` to re-capture authentication for a profile.
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"), skip this step. Run `ranger-cli go --url <target> --notes '<goal>'` directly a feature review will be created automatically when one is needed. See the **One-shot verification from user creds** section in the parent `SKILL.md`.
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
- Reach for `ranger-cli create` when the work is multi-scenario or you want to enumerate the user journeys up front for the reviewer.
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
- After implementing code for a scenario, verify it works in the browser. This creates evidence (screenshots, traces, logs) that the implementation is complete.
3
+ ## One-shot: creds + goal in, verification out
4
4
 
5
- ## Basic Command
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
- ranger-cli go --scenario <N> --notes "<what to verify>"
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
- ## Profile resolution
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
- When the user gives you a username + password, set them inline and run `go` no `profile add` step:
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
- RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
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
- Resolution order:
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
- ## Required: Active Feature Review
50
+ ## Active feature review (only needed for scenario-driven runs)
28
51
 
29
- `go` requires an active feature review. If you don't have one:
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.0e8b82c-9",
3
+ "version": "2.5.4-alpha.152f635-21",
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
  }