@ranger-testing/ranger-cli 2.5.4-alpha.ed286f1-2 → 2.5.4-alpha.f940f0d-18

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 -0
  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 -0
  43. package/build/commands/utils/cloudProfileSession.js +1 -0
  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 -0
  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 -0
  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 -0
  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 -0
  65. package/build/commands/utils/resolveProfileUrl.js +1 -0
  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 +36 -6
  80. package/build/skills/ranger/create.md +19 -0
  81. package/build/skills/ranger/verify.md +46 -7
  82. package/package.json +3 -2
@@ -1 +1 @@
1
- (function(_0x49e888,_0x447eaf){const _0x3fa4c0=_0x49a5,_0x46b51a=_0x49e888();while(!![]){try{const _0x2acfcb=parseInt(_0x3fa4c0(0x14b))/0x1+parseInt(_0x3fa4c0(0x157))/0x2*(parseInt(_0x3fa4c0(0x161))/0x3)+parseInt(_0x3fa4c0(0x10a))/0x4*(parseInt(_0x3fa4c0(0x10b))/0x5)+-parseInt(_0x3fa4c0(0x174))/0x6+parseInt(_0x3fa4c0(0xf2))/0x7*(parseInt(_0x3fa4c0(0x127))/0x8)+-parseInt(_0x3fa4c0(0x14d))/0x9+-parseInt(_0x3fa4c0(0x130))/0xa*(parseInt(_0x3fa4c0(0x145))/0xb);if(_0x2acfcb===_0x447eaf)break;else _0x46b51a['push'](_0x46b51a['shift']());}catch(_0x44e2cd){_0x46b51a['push'](_0x46b51a['shift']());}}}(_0x245b,0x8e7e6));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(_0x5aafc0,_0xd2cca5=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x1e0fa4=_0x49a5,_0x79a7b={'Tldcr':function(_0x21779b,_0x321b66){return _0x21779b>_0x321b66;},'kOOGD':'...'};return _0x79a7b[_0x1e0fa4(0xf5)](_0x5aafc0['length'],_0xd2cca5)?_0x5aafc0[_0x1e0fa4(0x153)](0x0,_0xd2cca5)+_0x79a7b[_0x1e0fa4(0xf6)]:_0x5aafc0;}function buildCliArtifactPath(_0x42449a,_0x2a051c){return join(_0x42449a,_0x2a051c);}function _0x245b(){const _0xaf1bd1=['sort','qWcww','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','Reviewer','bnfyK','trackPhaseStart','tool_name','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','347677kOBopD','test','values','join','element','\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.','941136jSPXDf','uaVNT','7936632dHWTgr','playwright_cli_video_stop','stringify','WPEXi','run\x20custom\x20Playwright\x20code','\x20screenshot\x20--filename\x20','slice','TpIkR','name','PostToolUseFailure','86XjScMC','QbTnJ','split','OkrFn','twwKJ','03_result-visible.png','target','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','zGwmc','BmRqj','5178wajtJo','-\x20[','unaddressedComments','dGqvD','env','trackPhaseEnd','stdout','start\x20video\x20recording','):\x20\x22','selector','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','\x20snapshot\x20--filename\x20','WHUSY','BhoIb','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','authorName','00_mozilla-homepage.yml','`\x20and\x20read\x20the\x20snapshot\x20file\x20to\x20inspect\x20the\x20page.\x0a5.\x20**IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors\x20before\x20proceeding.**\x0a6.\x20Execute\x20the\x20task\x20step-by-step\x20with\x20Playwright\x20CLI\x20commands.\x0a7.\x20Use\x20`','2133114EzCIsx','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','short','\x22,\x20\x22','authorEmail','stop\x20video\x20recording','description','`\x0a-\x20`snapshot\x20--filename\x20','vIFIa','ccVTV','isFile','02_button-clicked.png','inZwe','video-stop','DZncx','NXXcf','hLlGi','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','You\x20are\x20a\x20Feature\x20Review\x20Verifier.\x20Your\x20job\x20is\x20to\x20verify\x20a\x20scenario\x20by\x20executing\x20a\x20UI\x20flow\x20and\x20evaluating\x20whether\x20it\x20adequately\x20completes\x20the\x20scenario.\x0a\x0a##\x20Scenario\x20to\x20Verify\x0a','Rjnyz','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','numeric','4578lbSGkr','run-code','pRaQt','Tldcr','kOOGD','DEBUG','jTPIN','\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','\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.','ref\x20','press','stderr','01_initial-state.png','ubwsv','commandArgs','yTEcH','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','playwright-cli','PostToolUse','KBYKo','\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.','02_learn-more.yml','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','(?:^|\x5cs)','148936WShlYf','10VQuipS','`,\x20then\x20`','key_03_success-state.png','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','[ranger-verification-agent]\x20','OkSzk','trackPhaseError','OjgnD','select\x20tab','\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.','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','replace','tool_call','nfFKZ','mlDDK','length','snapshot','content','textContent','phase','key_04_success-state.png','\x20(on\x20element:\x20<','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','domRef','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','Bash','\x20open\x20','tab-select','12424HRvzJm','map','\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','tracing-stop','`\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','open','`\x0a9.\x20Run\x20`','FbLMl','en-US','90fTeuLE','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','`\x20to\x20inspect\x20the\x20current\x20app\x20state.\x0a5.\x20Read\x20snapshot\x20YAML\x20files\x20to\x20find\x20element\x20references\x20like\x20`e12`,\x20then\x20use\x20them\x20with\x20`click`,\x20`fill`,\x20`check`,\x20or\x20`select`.\x0a6.\x20Use\x20`','capture\x20snapshot\x20`','notes','canonicalFlow','stop\x20tracing','BuDLq','oeDQv','keys','ZADGt','close','open\x20browser'];_0x245b=function(){return _0xaf1bd1;};return _0x245b();}function toStepDisplayName(_0x33dadd){const _0x481464=_0x49a5,_0x12413d={'mlDDK':function(_0xbffbc8,_0x3d82a7){return _0xbffbc8(_0x3d82a7);}},_0x51c950=basename(_0x33dadd)['replace'](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')[_0x481464(0x116)](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x51c950,'isKeyStep':/^key_/i[_0x481464(0x146)](_0x12413d[_0x481464(0x119)](basename,_0x33dadd))};}function extractShellValue(_0x5b7233){if(!_0x5b7233)return null;return _0x5b7233[0x1]??_0x5b7233[0x2]??_0x5b7233[0x3]??null;}function extractFilenameOption(_0x2fce7a){return extractShellValue(_0x2fce7a['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x19d5e,_0x169b72){const _0x124f5d=_0x49a5,_0xb6e98e={'QbTnJ':'\x5c$&','hxVPO':function(_0x435f5f,_0x45e792){return _0x435f5f(_0x45e792);}},_0x442691=_0x169b72['replace'](/[.*+?^${}()|[\]\\]/g,_0xb6e98e[_0x124f5d(0x158)]);return _0xb6e98e['hxVPO'](extractShellValue,_0x19d5e['match'](new RegExp(_0x124f5d(0x109)+_0x442691+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x26f495){const _0x52db9a=_0x49a5,_0x43b721={'ZTdHT':function(_0x27747b,_0xa770ec,_0x499f08){return _0x27747b(_0xa770ec,_0x499f08);}};if(!_0x26f495)return _0x52db9a(0x15d);if(/^e\d+$/i['test'](_0x26f495))return _0x52db9a(0xfb)+_0x26f495;return JSON[_0x52db9a(0x14f)](_0x43b721['ZTdHT'](truncatePreview,_0x26f495,0x78));}function formatPlaywrightCliLog(_0x102c75,_0x41ec36){const _0x4ab8ad=_0x49a5,_0x34de1f={'BhoIb':_0x4ab8ad(0x12c),'OjgnD':function(_0x543889,_0x1e4ce8,_0x592e42){return _0x543889(_0x1e4ce8,_0x592e42);},'pRaQt':_0x4ab8ad(0x13c),'HCIQD':'start\x20tracing','cAgqV':_0x4ab8ad(0x12a),'ccVTV':_0x4ab8ad(0x136),'hmCqm':'video-start','FbLMl':'video-stop','nUxII':_0x4ab8ad(0x179),'GMdfJ':function(_0x25adde,_0x484169){return _0x25adde(_0x484169);},'zQAYr':'capture\x20screenshot','ubwsv':function(_0x521666,_0x47e2f0){return _0x521666(_0x47e2f0);},'inZwe':function(_0x4b5968,_0x488856,_0x4c84ee){return _0x4b5968(_0x488856,_0x4c84ee);},'sQotj':function(_0x1f6269,_0x20b085){return _0x1f6269(_0x20b085);},'nfFKZ':'tab-new'};switch(_0x41ec36){case _0x34de1f[_0x4ab8ad(0x16f)]:{const _0x25b99f=_0x34de1f[_0x4ab8ad(0x112)](extractFirstCommandArgument,_0x102c75,_0x41ec36);return _0x25b99f?'open\x20'+_0x25b99f:_0x34de1f[_0x4ab8ad(0xf4)];}case'tracing-start':return _0x34de1f['HCIQD'];case _0x34de1f['cAgqV']:return _0x34de1f[_0x4ab8ad(0x17d)];case _0x34de1f['hmCqm']:return _0x4ab8ad(0x168);case _0x34de1f[_0x4ab8ad(0x12e)]:return _0x34de1f['nUxII'];case _0x4ab8ad(0x11b):{const _0x3a9a50=extractFilenameOption(_0x102c75);if(!_0x3a9a50)return'capture\x20snapshot';const {name:_0x5cd39c}=_0x34de1f['GMdfJ'](toStepDisplayName,_0x3a9a50);return _0x4ab8ad(0x133)+_0x5cd39c+'`';}case'screenshot':{const _0xd25dd2=extractFilenameOption(_0x102c75);if(!_0xd25dd2)return _0x34de1f['zQAYr'];const {name:_0x2e8489,isKeyStep:_0x8135be}=toStepDisplayName(_0xd25dd2);return _0x8135be?'capture\x20key\x20step\x20`'+_0x2e8489+'`':'capture\x20step\x20`'+_0x2e8489+'`';}case'click':return'click\x20'+_0x34de1f[_0x4ab8ad(0xff)](formatCommandTarget,_0x34de1f['OjgnD'](extractFirstCommandArgument,_0x102c75,_0x41ec36));case'check':return'check\x20'+formatCommandTarget(extractFirstCommandArgument(_0x102c75,_0x41ec36));case'fill':return'fill\x20'+formatCommandTarget(_0x34de1f[_0x4ab8ad(0xe8)](extractFirstCommandArgument,_0x102c75,_0x41ec36));case _0x4ab8ad(0xfc):return'press\x20'+_0x34de1f['sQotj'](formatCommandTarget,extractFirstCommandArgument(_0x102c75,_0x41ec36));case _0x4ab8ad(0xf3):return _0x4ab8ad(0x151);case _0x34de1f[_0x4ab8ad(0x118)]:{const _0x2d251b=extractFirstCommandArgument(_0x102c75,_0x41ec36);return _0x2d251b?'open\x20new\x20tab\x20'+_0x2d251b:'open\x20new\x20tab';}case _0x4ab8ad(0x126):{const _0x2edb82=_0x34de1f[_0x4ab8ad(0xe8)](extractFirstCommandArgument,_0x102c75,_0x41ec36);return _0x2edb82?'select\x20tab\x20'+_0x2edb82:_0x4ab8ad(0x113);}default:return _0x41ec36;}}function extractPlaywrightCliToolDescription(_0x19674a){const _0x2700f5=_0x49a5,_0x1bb2a1=_0x19674a['description'];if(typeof _0x1bb2a1!=='string')return null;const _0x1bd28a=_0x1bb2a1['trim']()['replace'](/\s+/g,'\x20');return _0x1bd28a[_0x2700f5(0x11a)]>0x0?_0x1bd28a:null;}export function formatPlaywrightCliConsoleLogMessage(_0xe07aca,_0x21eb4d,_0xcb594b){const _0x2be2ea=_0x49a5,_0x1c0e37={'oeDQv':function(_0x130dd2,_0x3eead3){return _0x130dd2(_0x3eead3);}},_0x54062c=formatPlaywrightCliLog(_0x21eb4d,_0xcb594b),_0x571bd=_0x1c0e37[_0x2be2ea(0x138)](extractPlaywrightCliToolDescription,_0xe07aca);if(!_0x571bd)return'[playwright-cli]\x20'+_0x54062c;if(process[_0x2be2ea(0x165)][_0x2be2ea(0xf7)])return _0x2be2ea(0x10f)+_0x571bd+'\x20('+_0x54062c+')';return _0x2be2ea(0x10f)+_0x571bd;}export function buildVerifyFeatureCliDebugPrompt(_0x5a8621,_0x28758e){const _0x8cdc2b=_0x49a5,_0x3b8d20={'dGqvD':function(_0x5d52ed,_0x2e457a,_0x19bbb8){return _0x5d52ed(_0x2e457a,_0x19bbb8);},'jTPIN':function(_0x123628,_0x577604,_0x414930){return _0x123628(_0x577604,_0x414930);},'OkrFn':'03_learn-more.png','vIFIa':function(_0x2b80a8,_0x5be207){return _0x2b80a8(_0x5be207);}},_0x42f2fc=buildCliArtifactPath(_0x28758e,_0x8cdc2b(0x172)),_0x36fda5=buildCliArtifactPath(_0x28758e,'01_mozilla-homepage.png'),_0x538297=_0x3b8d20[_0x8cdc2b(0x164)](buildCliArtifactPath,_0x28758e,_0x8cdc2b(0x107)),_0x57f591=_0x3b8d20[_0x8cdc2b(0xf8)](buildCliArtifactPath,_0x28758e,_0x3b8d20[_0x8cdc2b(0x15a)]),_0xd1517b=_0x3b8d20[_0x8cdc2b(0x17c)](quoteShellArg,_0x42f2fc),_0x1dccbd=quoteShellArg(_0x36fda5),_0x16ca52=quoteShellArg(_0x538297),_0x43855f=_0x3b8d20['vIFIa'](quoteShellArg,_0x57f591);return _0x8cdc2b(0x15e)+_0x5a8621+'\x0a\x0a1.\x20Run\x20`'+_0x5a8621+_0x8cdc2b(0x121)+_0x5a8621+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x5a8621+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x28758e+_0x8cdc2b(0x144)+_0x5a8621+'\x20snapshot\x20--filename\x20'+_0xd1517b+_0x8cdc2b(0x102)+_0x5a8621+'\x20screenshot\x20--filename\x20'+_0x1dccbd+_0x8cdc2b(0x16c)+_0x5a8621+_0x8cdc2b(0x16d)+_0x16ca52+_0x8cdc2b(0x12d)+_0x5a8621+_0x8cdc2b(0x152)+_0x43855f+_0x8cdc2b(0x123);}export function buildVerifyFeatureCliPrompt(_0xd09e01){const _0x17d872=_0x49a5,_0x2653c9={'BmRqj':_0x17d872(0x176),'FapwP':_0x17d872(0xf1),'ocehI':_0x17d872(0x140),'HjFCl':_0x17d872(0x149),'XLGuW':'02_state.yml','aTMhb':function(_0x528e40,_0x15c4ca,_0x1b8255){return _0x528e40(_0x15c4ca,_0x1b8255);},'BSIgp':_0x17d872(0x10d),'Rjnyz':function(_0x21e130,_0xe748c1,_0x490814){return _0x21e130(_0xe748c1,_0x490814);},'OkSzk':_0x17d872(0xfe),'IQkps':function(_0x439331,_0xefc282){return _0x439331(_0xefc282);},'qqGLb':function(_0x48b465,_0x24ef61){return _0x48b465>_0x24ef61;},'NXXcf':function(_0x424add,_0xd830ef){return _0x424add(_0xd830ef);},'qfJlS':function(_0x16fd08,_0x8f99bc,_0x39e8d1){return _0x16fd08(_0x8f99bc,_0x39e8d1);},'bnfyK':_0x17d872(0xe7),'WPEXi':_0x17d872(0x15c)},{checklistItem:_0x54ab6e,itemFeedback:_0x1e0323,taskDescription:_0xff06e8,cliCommandPrefix:_0x11d8a5,cliArtifactDir:_0x5eca7f,isCdpMode:_0x57aafa,url:_0x3a59d9,cdpEndpoint:_0x1ad1d2,loginInstructions:_0x36da80}=_0xd09e01,_0x4d1535=buildCliArtifactPath(_0x5eca7f,'01_initial.yml'),_0x2655c8=buildCliArtifactPath(_0x5eca7f,_0x2653c9['XLGuW']),_0x45ff20=_0x2653c9['aTMhb'](buildCliArtifactPath,_0x5eca7f,_0x2653c9['BSIgp']),_0x301220=_0x2653c9['Rjnyz'](buildCliArtifactPath,_0x5eca7f,_0x2653c9[_0x17d872(0x110)]),_0x17080b=_0x2653c9['IQkps'](quoteShellArg,_0x4d1535),_0x52dfa8=quoteShellArg(_0x2655c8),_0x13eb91=_0x2653c9['IQkps'](quoteShellArg,_0x45ff20),_0x16388c=quoteShellArg(_0x301220),_0x561fce=_0x54ab6e[_0x17d872(0x134)]?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x54ab6e['notes']:'';let _0x1bc343='';if(_0x1e0323&&_0x2653c9['qqGLb'](_0x1e0323[_0x17d872(0x163)]['length'],0x0)){const _0x58a923=_0x1e0323['unaddressedComments'][_0x17d872(0x128)](_0x3ac271=>{const _0x20046b=_0x17d872,_0x587a3b=new Date(_0x3ac271['createdAt'])['toLocaleDateString'](_0x20046b(0x12f),{'month':_0x2653c9[_0x20046b(0x160)],'day':_0x2653c9['FapwP']}),_0x1c16c7=_0x3ac271[_0x20046b(0x171)]||_0x3ac271[_0x20046b(0x178)]||_0x2653c9['ocehI'],_0x156b66=_0x3ac271[_0x20046b(0x122)]?_0x20046b(0x120)+(_0x3ac271['domRef'][_0x20046b(0x16a)]['split']('\x20>\x20')['pop']()?.[_0x20046b(0x159)](':')[0x0]||_0x2653c9['HjFCl'])+'>\x20\x22'+(_0x3ac271[_0x20046b(0x122)][_0x20046b(0x11d)]||'')[_0x20046b(0x153)](0x0,0x32)+'\x22)':'';return _0x20046b(0x162)+_0x3ac271['id']+']\x20**'+_0x1c16c7+'**\x20('+_0x587a3b+_0x20046b(0x169)+_0x3ac271[_0x20046b(0x11c)]+'\x22'+_0x156b66;})[_0x17d872(0x148)]('\x0a');_0x1bc343='\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'+_0x58a923;}const _0x224f38=_0x1e0323?.['canonicalFlow']?_0x17d872(0x108)+_0x1e0323[_0x17d872(0x135)]:'',_0x199307=_0x57aafa?_0x17d872(0x13f)+_0x1ad1d2+_0x17d872(0x10e):'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x3a59d9+'\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',_0x34ca05=_0x3a59d9?_0x2653c9[_0x17d872(0xeb)](quoteShellArg,_0x3a59d9):'',_0x55bf0f=_0x57aafa?_0x17d872(0x16b)+_0x11d8a5+'\x20open`,\x20then\x20`'+_0x11d8a5+'\x20tracing-start`,\x20then\x20`'+_0x11d8a5+_0x17d872(0xf0)+_0x5eca7f+_0x17d872(0x170)+_0x11d8a5+_0x17d872(0x16d)+_0x17080b+_0x17d872(0x132)+_0x11d8a5+'\x20screenshot\x20--filename\x20'+_0x16388c+_0x17d872(0x131)+_0x11d8a5+'\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':_0x17d872(0x16b)+_0x11d8a5+_0x17d872(0x125)+_0x34ca05+_0x17d872(0x10c)+_0x11d8a5+'\x20tracing-start`,\x20then\x20`'+_0x11d8a5+_0x17d872(0xf0)+_0x5eca7f+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x11d8a5+_0x17d872(0x16d)+_0x17080b+_0x17d872(0x173)+_0x11d8a5+'\x20screenshot\x20--filename\x20'+_0x16388c+_0x17d872(0x115)+_0x11d8a5+'\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',_0x5e96cd=_0x57aafa?_0x17d872(0x14a):_0x17d872(0x106),_0x4d4710=_0x36da80?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x36da80+_0x17d872(0xfa):'';return _0x17d872(0xee)+_0x54ab6e[_0x17d872(0x17a)]+_0x561fce+_0x1bc343+_0x224f38+_0x17d872(0x175)+_0xff06e8+'\x0a\x0a'+_0x199307+_0x4d4710+'\x0a\x0a'+_0x55bf0f+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x11d8a5+_0x17d872(0xed)+_0x5eca7f+_0x17d872(0x17b)+_0x52dfa8+_0x17d872(0x12b)+_0x13eb91+'`\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`'+_0x5eca7f+'`:\x20\x22'+_0x301220+_0x17d872(0x177)+_0x2653c9['qfJlS'](buildCliArtifactPath,_0x5eca7f,_0x2653c9[_0x17d872(0x141)])+_0x17d872(0x177)+_0x2653c9[_0x17d872(0xef)](buildCliArtifactPath,_0x5eca7f,_0x2653c9[_0x17d872(0x150)])+_0x17d872(0x129)+buildCliArtifactPath(_0x5eca7f,_0x17d872(0x11f))+_0x17d872(0xf9)+_0x5e96cd+_0x17d872(0x114);}function _0x49a5(_0x84263c,_0x254d63){_0x84263c=_0x84263c-0xe6;const _0x245bfb=_0x245b();let _0x49a51b=_0x245bfb[_0x84263c];return _0x49a51b;}export function summarizeVerifyFeatureCliCommandAvailability(_0xe044de){const _0xa25f3=_0x49a5,_0x2cd6ea={'qiFSb':function(_0x4a11fe,_0xd6618a){return _0x4a11fe===_0xd6618a;}},_0x2081fc=[..._0xe044de[_0xa25f3(0x139)]()][_0xa25f3(0x13d)]();let _0x2600c0=0x0;for(const _0x431cf6 of _0xe044de[_0xa25f3(0x147)]()){_0x2600c0+=_0x431cf6;}return{'cliCommandCount':_0x2600c0,'cliCommandsSeen':_0x2081fc,'noCliCommandsCalled':_0x2cd6ea['qiFSb'](_0x2600c0,0x0)};}export function createVerifyFeatureCliHooks(_0x1fd72e){const _0x565236=_0x49a5,_0x47d643={'twwKJ':function(_0x314144,_0x159552){return _0x314144!==_0x159552;},'BuDLq':_0x565236(0x104),'aWRzN':function(_0x4d8e05,_0x3ea081){return _0x4d8e05!==_0x3ea081;},'oBpKx':function(_0x2788f3,_0x39a303){return _0x2788f3(_0x39a303);},'UNaiz':function(_0x43fafb,_0x4e5c27){return _0x43fafb+_0x4e5c27;},'qWcww':_0x565236(0x103),'hLlGi':_0x565236(0x117),'GvkSp':function(_0x345acb,_0xe5b061){return _0x345acb!==_0xe5b061;},'DZncx':_0x565236(0x124)},_0x40fd24=new Map(),_0x17c23d=async _0x957ce=>{const _0x11e1be=_0x565236;if(_0x47d643[_0x11e1be(0x15b)](_0x957ce['hook_event_name'],_0x47d643[_0x11e1be(0x137)]))return{};const _0x4c92b8=_0x957ce;if(_0x47d643['aWRzN'](_0x4c92b8[_0x11e1be(0x143)],_0x11e1be(0x124)))return{};const _0x5bbef2=_0x4c92b8['tool_input'],_0x3dd277=_0x47d643['oBpKx'](extractBashCommand,_0x5bbef2);if(!_0x3dd277)return{};const _0x6f50d5=parsePlaywrightCliCommand(_0x3dd277);if(!_0x6f50d5)return{};return _0x40fd24['set'](_0x6f50d5,_0x47d643['UNaiz'](_0x40fd24['get'](_0x6f50d5)||0x0,0x1)),_0x1fd72e[_0x11e1be(0x142)]('tool_call',{'transport':_0x47d643[_0x11e1be(0x13e)],'toolName':_0x6f50d5}),_0x1fd72e[_0x11e1be(0x166)](_0x47d643[_0x11e1be(0xec)],{'transport':'playwright-cli','toolName':_0x6f50d5,'bashCommandPreview':truncatePreview(_0x3dd277)}),_0x47d643['GvkSp'](_0x6f50d5,_0x11e1be(0x11b))&&console['log'](formatPlaywrightCliConsoleLogMessage(_0x5bbef2,_0x3dd277,_0x6f50d5)),{};},_0x57173e=async _0x2f5523=>{const _0x1df2cc=_0x565236;if(_0x47d643['GvkSp'](_0x2f5523['hook_event_name'],_0x1df2cc(0x156)))return{};const _0x1cd4ad=_0x2f5523;if(_0x47d643['twwKJ'](_0x1cd4ad['tool_name'],_0x1df2cc(0x124)))return{};return await _0x1fd72e['trackPhaseError']('tool_failure',_0x1cd4ad['error'],{'transport':'playwright-cli','toolName':_0x47d643[_0x1df2cc(0xea)]}),{};};return{'postToolUseHook':_0x17c23d,'postToolUseFailureHook':_0x57173e,'commandCounts':_0x40fd24};}async function runPlaywrightCliLifecycleCommand(_0xf41f6f){const _0x18c226=_0x49a5,_0x3fd6f9={'NnyRk':function(_0x5e865c,_0x5dfc4f,_0x9aaef6){return _0x5e865c(_0x5dfc4f,_0x9aaef6);}},{sessionId:_0x3d609f,configPath:_0x26a63c,commandArgs:_0x43224a,env:_0x11d1f1,telemetry:_0x3fe71a,phase:_0x9d9eaa,metadata:_0x126195,timeoutMs:_0x5e2939}=_0xf41f6f;_0x3fe71a['trackPhaseStart'](_0x9d9eaa,_0x126195);try{const _0x273337=await runPlaywrightCliCommand({'sessionId':_0x3d609f,'configPath':_0x26a63c,'commandArgs':_0x43224a,'cwd':process['cwd'](),'env':_0x11d1f1,'timeoutMs':_0x5e2939??PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS});_0x3fe71a[_0x18c226(0x166)](_0x9d9eaa,{..._0x126195,'subcommand':_0x273337['invocation']['subcommand'],'stdoutPreview':_0x3fd6f9['NnyRk'](truncatePreview,_0x273337[_0x18c226(0x167)],0x7d0),'stderrPreview':truncatePreview(_0x273337[_0x18c226(0xfd)],0x7d0)});}catch(_0x4796ee){await _0x3fe71a[_0x18c226(0x111)](_0x9d9eaa,_0x4796ee,_0x126195);throw _0x4796ee;}}export async function finalizeVerifyFeatureCliSession(_0x4ef0ba){const _0x3cbd31=_0x49a5,_0x5b8e51={'zGwmc':'tracing-stop','ZADGt':'session-recording.webm','TpIkR':_0x3cbd31(0x13b),'cBhvR':function(_0x460fbb,_0x592770){return _0x460fbb(_0x592770);}},{telemetry:_0x3fd091,sessionId:_0x904b8,configPath:_0x5656c2,cliArtifactDir:_0x52c028,env:_0x483660,transportMetadata:_0x7db437}=_0x4ef0ba,_0x5eaff3=[{'phase':'playwright_cli_tracing_stop','commandArgs':[_0x5b8e51[_0x3cbd31(0x15f)]]},{'phase':_0x3cbd31(0x14e),'commandArgs':[_0x3cbd31(0xe9),'--filename='+buildCliArtifactPath(_0x52c028,_0x5b8e51[_0x3cbd31(0x13a)])]},{'phase':'playwright_cli_close','commandArgs':[_0x5b8e51[_0x3cbd31(0x154)]]}];for(const _0x197c46 of _0x5eaff3){try{await _0x5b8e51['cBhvR'](runPlaywrightCliLifecycleCommand,{'sessionId':_0x904b8,'configPath':_0x5656c2,'commandArgs':[..._0x197c46[_0x3cbd31(0x100)]],'env':_0x483660,'telemetry':_0x3fd091,'phase':_0x197c46[_0x3cbd31(0x11e)],'metadata':_0x7db437});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x89b581){const _0x4cf83e=_0x49a5,_0x2a8037={'yTEcH':'trace.zip','KBYKo':function(_0x1549e3,_0x4d8911,_0x55118c){return _0x1549e3(_0x4d8911,_0x55118c);}},_0x4d05b9=[_0x2a8037[_0x4cf83e(0x101)],'trace.trace.zip'];for(const _0x53a3c4 of _0x4d05b9){const _0x14467c=_0x2a8037[_0x4cf83e(0x105)](join,_0x89b581,_0x53a3c4);try{return{'buffer':await readFile(_0x14467c),'source':_0x14467c};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x52d17c){const _0x480358=_0x49a5,_0x5aae2c={'URrMb':function(_0x4dcb53,_0x133cd7,_0x286f66){return _0x4dcb53(_0x133cd7,_0x286f66);},'WHUSY':function(_0x26433f,_0x3f5f7f){return _0x26433f(_0x3f5f7f);},'uaVNT':function(_0xeed622,_0x21084a){return _0xeed622+_0x21084a;}},{cwd:_0x5f0fa0,cliArtifactDir:_0x2e80e7,startTime:_0x535006}=_0x52d17c,_0x154775=[];await _0x5aae2c['URrMb'](mkdir,_0x2e80e7,{'recursive':!![]});const _0x44de32=await _0x5aae2c['URrMb'](readdir,_0x5f0fa0,{'withFileTypes':!![]});for(const _0x489b84 of _0x44de32){if(!_0x489b84[_0x480358(0xe6)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x480358(0x146)](_0x489b84['name']))continue;const _0x39cf31=join(_0x5f0fa0,_0x489b84[_0x480358(0x155)]),_0x3d83a9=await _0x5aae2c[_0x480358(0x16e)](stat,_0x39cf31);if(_0x5aae2c[_0x480358(0x14c)](_0x3d83a9['mtimeMs'],0x7d0)<_0x535006)continue;const _0x1456b9=_0x5aae2c['URrMb'](buildCliArtifactPath,_0x2e80e7,_0x489b84[_0x480358(0x155)]);if(_0x39cf31===_0x1456b9)continue;await rename(_0x39cf31,_0x1456b9),_0x154775['push'](_0x489b84['name']);}return _0x154775[_0x480358(0x13d)]();}
1
+ (function(_0x27a050,_0x109d29){const _0x3d790a=_0x231f,_0x43a569=_0x27a050();while(!![]){try{const _0x13d56d=-parseInt(_0x3d790a(0x1f1))/0x1*(parseInt(_0x3d790a(0x223))/0x2)+parseInt(_0x3d790a(0x20e))/0x3*(-parseInt(_0x3d790a(0x233))/0x4)+parseInt(_0x3d790a(0x1e1))/0x5*(-parseInt(_0x3d790a(0x1b0))/0x6)+parseInt(_0x3d790a(0x1b9))/0x7*(parseInt(_0x3d790a(0x1cc))/0x8)+parseInt(_0x3d790a(0x219))/0x9*(-parseInt(_0x3d790a(0x237))/0xa)+parseInt(_0x3d790a(0x1d0))/0xb*(-parseInt(_0x3d790a(0x1bc))/0xc)+-parseInt(_0x3d790a(0x240))/0xd*(-parseInt(_0x3d790a(0x217))/0xe);if(_0x13d56d===_0x109d29)break;else _0x43a569['push'](_0x43a569['shift']());}catch(_0x162462){_0x43a569['push'](_0x43a569['shift']());}}}(_0x6327,0x633fa));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(_0x1aaf05,_0x1c314e=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0xc279ca=_0x231f,_0x5092a7={'fGwKN':function(_0x2ddc90,_0x1d8101){return _0x2ddc90+_0x1d8101;}};return _0x1aaf05[_0xc279ca(0x226)]>_0x1c314e?_0x5092a7[_0xc279ca(0x1db)](_0x1aaf05[_0xc279ca(0x1e4)](0x0,_0x1c314e),_0xc279ca(0x22b)):_0x1aaf05;}function buildCliArtifactPath(_0x5d9bf8,_0x35351f){const _0x429a64=_0x231f,_0x20e9bc={'NwqHV':function(_0x508e8f,_0x4fef41,_0x11f4d1){return _0x508e8f(_0x4fef41,_0x11f4d1);}};return _0x20e9bc[_0x429a64(0x1ef)](join,_0x5d9bf8,_0x35351f);}function toStepDisplayName(_0x33c4d7){const _0x2ba3e9=_0x231f,_0x53cf36=basename(_0x33c4d7)[_0x2ba3e9(0x206)](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')[_0x2ba3e9(0x206)](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x53cf36,'isKeyStep':/^key_/i['test'](basename(_0x33c4d7))};}function extractShellValue(_0x5da616){if(!_0x5da616)return null;return _0x5da616[0x1]??_0x5da616[0x2]??_0x5da616[0x3]??null;}function extractFilenameOption(_0x157dca){return extractShellValue(_0x157dca['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x23ca5b,_0xddf6ea){const _0x1bb59b=_0x231f,_0x27e9ba=_0xddf6ea[_0x1bb59b(0x206)](/[.*+?^${}()|[\]\\]/g,_0x1bb59b(0x211));return extractShellValue(_0x23ca5b['match'](new RegExp('(?:^|\x5cs)'+_0x27e9ba+_0x1bb59b(0x1c6))));}function formatCommandTarget(_0x2e836d){const _0x5a60a7=_0x231f;if(!_0x2e836d)return _0x5a60a7(0x23a);if(/^e\d+$/i[_0x5a60a7(0x1fb)](_0x2e836d))return _0x5a60a7(0x201)+_0x2e836d;return JSON[_0x5a60a7(0x208)](truncatePreview(_0x2e836d,0x78));}function formatPlaywrightCliLog(_0x4740d7,_0x33fae7){const _0x11dfcc=_0x231f,_0x521d31={'GzFaS':'open\x20browser','ZgLih':'start\x20tracing','HllCq':'stop\x20tracing','ITRBT':'video-start','dGIuH':'stop\x20video\x20recording','ZWxUk':_0x11dfcc(0x1cd),'hHFIG':'screenshot','kZXXI':_0x11dfcc(0x1d7),'wvqWp':function(_0x3efd02,_0x2cdea0){return _0x3efd02(_0x2cdea0);},'VcIVS':function(_0x2145dc,_0x3e2c8e,_0x3bcb14){return _0x2145dc(_0x3e2c8e,_0x3bcb14);},'JBwdH':_0x11dfcc(0x1f4),'UYudz':_0x11dfcc(0x212),'gYyGi':function(_0x3dd6cc,_0x57000b){return _0x3dd6cc(_0x57000b);},'ILdCM':function(_0x263b52,_0x1f1102){return _0x263b52(_0x1f1102);},'NdgrO':'run-code','whzLI':_0x11dfcc(0x1c5),'qAxOO':'open\x20new\x20tab'};switch(_0x33fae7){case'open':{const _0x3974d5=extractFirstCommandArgument(_0x4740d7,_0x33fae7);return _0x3974d5?'open\x20'+_0x3974d5:_0x521d31['GzFaS'];}case'tracing-start':return _0x521d31['ZgLih'];case'tracing-stop':return _0x521d31[_0x11dfcc(0x1bf)];case _0x521d31['ITRBT']:return _0x11dfcc(0x22c);case'video-stop':return _0x521d31['dGIuH'];case _0x11dfcc(0x230):{const _0x31d04b=extractFilenameOption(_0x4740d7);if(!_0x31d04b)return _0x521d31['ZWxUk'];const {name:_0x1cc31c}=toStepDisplayName(_0x31d04b);return'capture\x20snapshot\x20`'+_0x1cc31c+'`';}case _0x521d31[_0x11dfcc(0x229)]:{const _0x265c0e=extractFilenameOption(_0x4740d7);if(!_0x265c0e)return _0x521d31['kZXXI'];const {name:_0x385456,isKeyStep:_0x52c58c}=_0x521d31[_0x11dfcc(0x1ad)](toStepDisplayName,_0x265c0e);return _0x52c58c?'capture\x20key\x20step\x20`'+_0x385456+'`':'capture\x20step\x20`'+_0x385456+'`';}case _0x11dfcc(0x1fa):return _0x11dfcc(0x222)+_0x521d31[_0x11dfcc(0x1ad)](formatCommandTarget,_0x521d31['VcIVS'](extractFirstCommandArgument,_0x4740d7,_0x33fae7));case _0x521d31[_0x11dfcc(0x1ba)]:return'check\x20'+_0x521d31[_0x11dfcc(0x1ad)](formatCommandTarget,extractFirstCommandArgument(_0x4740d7,_0x33fae7));case _0x521d31['UYudz']:return _0x11dfcc(0x1d2)+_0x521d31['gYyGi'](formatCommandTarget,extractFirstCommandArgument(_0x4740d7,_0x33fae7));case'press':return _0x11dfcc(0x1b1)+_0x521d31['ILdCM'](formatCommandTarget,extractFirstCommandArgument(_0x4740d7,_0x33fae7));case _0x521d31[_0x11dfcc(0x221)]:return'run\x20custom\x20Playwright\x20code';case _0x521d31[_0x11dfcc(0x1dd)]:{const _0x425a9=extractFirstCommandArgument(_0x4740d7,_0x33fae7);return _0x425a9?_0x11dfcc(0x205)+_0x425a9:_0x521d31['qAxOO'];}case'tab-select':{const _0x5dfdea=extractFirstCommandArgument(_0x4740d7,_0x33fae7);return _0x5dfdea?_0x11dfcc(0x23e)+_0x5dfdea:_0x11dfcc(0x231);}default:return _0x33fae7;}}function extractPlaywrightCliToolDescription(_0x2d6992){const _0x5c684f=_0x231f,_0x1014ed={'HJmDF':function(_0x2c0914,_0x1a16fd){return _0x2c0914>_0x1a16fd;}},_0x5de5cb=_0x2d6992[_0x5c684f(0x1f2)];if(typeof _0x5de5cb!==_0x5c684f(0x1ac))return null;const _0x45a0f2=_0x5de5cb['trim']()['replace'](/\s+/g,'\x20');return _0x1014ed[_0x5c684f(0x1e9)](_0x45a0f2['length'],0x0)?_0x45a0f2:null;}export function formatPlaywrightCliConsoleLogMessage(_0x150a58,_0x3e5616,_0x27de97){const _0x54f913=_0x231f,_0x55cfbf={'TboKC':function(_0x220251,_0x3453d2){return _0x220251(_0x3453d2);}},_0x535626=formatPlaywrightCliLog(_0x3e5616,_0x27de97),_0x2d8491=_0x55cfbf[_0x54f913(0x1e2)](extractPlaywrightCliToolDescription,_0x150a58);if(!_0x2d8491)return _0x54f913(0x210)+_0x535626;if(process[_0x54f913(0x1d1)][_0x54f913(0x1fc)])return'[ranger-verification-agent]\x20'+_0x2d8491+'\x20('+_0x535626+')';return'[ranger-verification-agent]\x20'+_0x2d8491;}function _0x231f(_0x48b813,_0x35b6a8){_0x48b813=_0x48b813-0x1a7;const _0x632792=_0x6327();let _0x231f4d=_0x632792[_0x48b813];return _0x231f4d;}function _0x6327(){const _0x3badda=['\x0a\x0a1.\x20Run\x20`','ref\x20','trace.zip','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','Oogab','open\x20new\x20tab\x20','replace','Bash','stringify','set','rsgTT','notes','trackPhaseEnd','keys','3gfOLqK','close','[playwright-cli]\x20','\x5c$&','fill','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','stdout','elmEc','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','42voOQrc','tool_name','9SJFxVF','01_initial.yml','KJMSj','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','\x20open\x20','cwd','\x20(on\x20element:\x20<','`:\x20\x22','NdgrO','click\x20','262YzrqFC','error','numeric','length','\x20screenshot\x20--filename\x20','KSMnq','hHFIG','euTDo','...','start\x20video\x20recording','\x20snapshot\x20--filename\x20','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','\x20tracing-start`\x0a3.\x20Run\x20`','snapshot','select\x20tab','PostToolUseFailure','1933836uKrylu','wAIGU','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','VZuuT','4079570JtSBlZ','ptAqj','rTZXR','target','**\x20(','\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.','map','select\x20tab\x20','mrnjv','10467431eZNvph','canonicalFlow','trackPhaseStart','authorName','YWfmR','tool_failure','\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','key_03_success-state.png','string','wvqWp','playwright_cli_tracing_stop','wJGUF','1129242JBBvUh','press\x20','split','subcommand','\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','content','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','\x20tracing-start`,\x20then\x20`','bLQMF','4032fMxlHt','JBwdH','QrvNJ','12iBQOfR','name','03_result-visible.png','HllCq','PXQXM','01_mozilla-homepage.png','playwright-cli','JHfqQ','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','tab-new','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','unaddressedComments','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','isFile','GxBRk','1472PrBcLH','capture\x20snapshot','hook_event_name','\x22,\x20\x22','4546091GbginB','env','fill\x20','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','CboSN','domRef','capture\x20screenshot','qtXkc','`,\x20then\x20`','invocation','fGwKN','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','whzLI','`\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','hlCAw','-\x20[','5uOnoTY','TboKC','lCCjU','slice','trace.trace.zip','--filename=','playwright_cli_video_stop','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','HJmDF','\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','EOjjh','tracing-stop','MkUun','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','NwqHV','\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','4749tPNCuM','description','createdAt','check','toLocaleDateString','commandArgs','`\x0a-\x20`snapshot\x20--filename\x20','xGoUM','QpDEz','click','test','DEBUG','00_mozilla-homepage.yml','session-recording.webm','fjFBK'];_0x6327=function(){return _0x3badda;};return _0x6327();}export function buildVerifyFeatureCliDebugPrompt(_0x70e223,_0x46dd5f){const _0x421986=_0x231f,_0xa4fbc1={'euTDo':function(_0xff5797,_0x46dec7,_0x1b41af){return _0xff5797(_0x46dec7,_0x1b41af);},'bLQMF':'02_learn-more.yml','PVdIC':function(_0x44e46c,_0x68ecab,_0xecea23){return _0x44e46c(_0x68ecab,_0xecea23);},'VZuuT':'03_learn-more.png','xGoUM':function(_0xfd2073,_0x4b0652){return _0xfd2073(_0x4b0652);}},_0x112926=buildCliArtifactPath(_0x46dd5f,_0x421986(0x1fd)),_0x38fa6a=_0xa4fbc1['euTDo'](buildCliArtifactPath,_0x46dd5f,_0x421986(0x1c1)),_0x1a55f5=_0xa4fbc1[_0x421986(0x22a)](buildCliArtifactPath,_0x46dd5f,_0xa4fbc1[_0x421986(0x1b8)]),_0x214c8c=_0xa4fbc1['PVdIC'](buildCliArtifactPath,_0x46dd5f,_0xa4fbc1[_0x421986(0x236)]),_0x4c8a96=quoteShellArg(_0x112926),_0x2b3826=quoteShellArg(_0x38fa6a),_0x5d2e3a=_0xa4fbc1[_0x421986(0x1f8)](quoteShellArg,_0x1a55f5),_0x43faf5=_0xa4fbc1['xGoUM'](quoteShellArg,_0x214c8c);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x70e223+_0x421986(0x200)+_0x70e223+_0x421986(0x235)+_0x70e223+_0x421986(0x22f)+_0x70e223+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x46dd5f+_0x421986(0x22e)+_0x70e223+'\x20snapshot\x20--filename\x20'+_0x4c8a96+_0x421986(0x213)+_0x70e223+_0x421986(0x227)+_0x2b3826+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x70e223+_0x421986(0x22d)+_0x5d2e3a+'`\x0a9.\x20Run\x20`'+_0x70e223+_0x421986(0x227)+_0x43faf5+_0x421986(0x1c9);}export function buildVerifyFeatureCliPrompt(_0x325930){const _0x3d52c2=_0x231f,_0x28a8ed={'ogCWe':'en-US','wJGUF':'short','KJMSj':_0x3d52c2(0x225),'qtXkc':'Reviewer','aTZru':'\x20>\x20','EJKBT':'element','GxBRk':function(_0x4f7d49,_0x16b3cd,_0x2bbd1c){return _0x4f7d49(_0x16b3cd,_0x2bbd1c);},'rsgTT':function(_0x5c7e9e,_0xb6adc4){return _0x5c7e9e(_0xb6adc4);},'ptAqj':function(_0x31b28d,_0x4a6e45){return _0x31b28d(_0x4a6e45);},'KSMnq':function(_0x1cfe56,_0x3ac46c){return _0x1cfe56(_0x3ac46c);},'hlCAw':function(_0x4ca207,_0x2156f0){return _0x4ca207(_0x2156f0);},'DQEUi':'02_button-clicked.png','EQjJp':function(_0x44fda0,_0x541093,_0xd8eaa4){return _0x44fda0(_0x541093,_0xd8eaa4);},'QpDEz':_0x3d52c2(0x1be)},{checklistItem:_0x5dc3a0,itemFeedback:_0x2bebcf,taskDescription:_0x11e7b5,cliCommandPrefix:_0x3f336b,cliArtifactDir:_0x46950d,isCdpMode:_0x385cc3,url:_0x370b09,cdpEndpoint:_0x46d9a1,loginInstructions:_0x487754}=_0x325930,_0x255ae6=_0x28a8ed[_0x3d52c2(0x1cb)](buildCliArtifactPath,_0x46950d,_0x3d52c2(0x21a)),_0x318b1d=_0x28a8ed['GxBRk'](buildCliArtifactPath,_0x46950d,'02_state.yml'),_0x4c569e=buildCliArtifactPath(_0x46950d,_0x3d52c2(0x1ab)),_0x27ebc8=_0x28a8ed['GxBRk'](buildCliArtifactPath,_0x46950d,'01_initial-state.png'),_0x1f8559=_0x28a8ed[_0x3d52c2(0x20a)](quoteShellArg,_0x255ae6),_0x5657f8=_0x28a8ed[_0x3d52c2(0x238)](quoteShellArg,_0x318b1d),_0x3292a6=_0x28a8ed['KSMnq'](quoteShellArg,_0x4c569e),_0x4dbd80=_0x28a8ed[_0x3d52c2(0x1df)](quoteShellArg,_0x27ebc8),_0x41bb2d=_0x5dc3a0['notes']?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x5dc3a0[_0x3d52c2(0x20b)]:'';let _0x4c36c8='';if(_0x2bebcf&&_0x2bebcf[_0x3d52c2(0x1c8)][_0x3d52c2(0x226)]>0x0){const _0x538209=_0x2bebcf[_0x3d52c2(0x1c8)][_0x3d52c2(0x23d)](_0x32836f=>{const _0x1c2ada=_0x3d52c2,_0x3f54a3=new Date(_0x32836f[_0x1c2ada(0x1f3)])[_0x1c2ada(0x1f5)](_0x28a8ed['ogCWe'],{'month':_0x28a8ed[_0x1c2ada(0x1af)],'day':_0x28a8ed[_0x1c2ada(0x21b)]}),_0x4b592b=_0x32836f[_0x1c2ada(0x1a7)]||_0x32836f['authorEmail']||_0x28a8ed[_0x1c2ada(0x1d8)],_0x4a7e32=_0x32836f[_0x1c2ada(0x1d6)]?_0x1c2ada(0x21f)+(_0x32836f['domRef']['selector'][_0x1c2ada(0x1b2)](_0x28a8ed['aTZru'])['pop']()?.[_0x1c2ada(0x1b2)](':')[0x0]||_0x28a8ed['EJKBT'])+'>\x20\x22'+(_0x32836f['domRef']['textContent']||'')[_0x1c2ada(0x1e4)](0x0,0x32)+'\x22)':'';return _0x1c2ada(0x1e0)+_0x32836f['id']+']\x20**'+_0x4b592b+_0x1c2ada(0x23b)+_0x3f54a3+'):\x20\x22'+_0x32836f[_0x1c2ada(0x1b5)]+'\x22'+_0x4a7e32;})['join']('\x0a');_0x4c36c8='\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'+_0x538209;}const _0x49eda9=_0x2bebcf?.[_0x3d52c2(0x241)]?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0x2bebcf['canonicalFlow']:'',_0x3134ed=_0x385cc3?_0x3d52c2(0x1b6)+_0x46d9a1+_0x3d52c2(0x1dc):'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x370b09+_0x3d52c2(0x1f0),_0x357064=_0x370b09?_0x28a8ed[_0x3d52c2(0x228)](quoteShellArg,_0x370b09):'',_0x39af92=_0x385cc3?_0x3d52c2(0x1d3)+_0x3f336b+'\x20open`,\x20then\x20`'+_0x3f336b+_0x3d52c2(0x1b7)+_0x3f336b+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x46950d+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x3f336b+'\x20snapshot\x20--filename\x20'+_0x1f8559+'`\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`'+_0x3f336b+_0x3d52c2(0x227)+_0x4dbd80+_0x3d52c2(0x21c)+_0x3f336b+_0x3d52c2(0x1b4):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x3f336b+_0x3d52c2(0x21d)+_0x357064+_0x3d52c2(0x1d9)+_0x3f336b+'\x20tracing-start`,\x20then\x20`'+_0x3f336b+_0x3d52c2(0x1ee)+_0x46950d+_0x3d52c2(0x203)+_0x3f336b+'\x20snapshot\x20--filename\x20'+_0x1f8559+'`\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`'+_0x3f336b+_0x3d52c2(0x227)+_0x4dbd80+_0x3d52c2(0x216)+_0x3f336b+_0x3d52c2(0x1aa),_0x30b9e7=_0x385cc3?_0x3d52c2(0x23c):'\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.',_0x1a5709=_0x487754?_0x3d52c2(0x1d4)+_0x487754+'\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'+_0x5dc3a0['description']+_0x41bb2d+_0x4c36c8+_0x49eda9+_0x3d52c2(0x1c7)+_0x11e7b5+'\x0a\x0a'+_0x3134ed+_0x1a5709+'\x0a\x0a'+_0x39af92+_0x3d52c2(0x1e8)+_0x3f336b+_0x3d52c2(0x1c4)+_0x46950d+_0x3d52c2(0x1f7)+_0x5657f8+_0x3d52c2(0x1de)+_0x3292a6+'`\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`'+_0x46950d+_0x3d52c2(0x220)+_0x27ebc8+_0x3d52c2(0x1cf)+buildCliArtifactPath(_0x46950d,_0x28a8ed['DQEUi'])+'\x22,\x20\x22'+_0x28a8ed['EQjJp'](buildCliArtifactPath,_0x46950d,_0x28a8ed[_0x3d52c2(0x1f9)])+_0x3d52c2(0x1ea)+buildCliArtifactPath(_0x46950d,'key_04_success-state.png')+'\x22\x0a-\x20The\x20\x22key_\x22\x20prefix\x20marks\x20screenshots\x20as\x20high-priority\x20evidence\x20for\x20human\x20reviewers\x0a\x0a**Aim\x20for\x203-6\x20screenshots\x20per\x20verification**\x20to\x20document\x20the\x20complete\x20flow.\x20Mark\x201-2\x20of\x20the\x20most\x20important\x20ones\x20with\x20the\x20\x22key_\x22\x20prefix.\x0a'+_0x30b9e7+'\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(_0x5d4c70){const _0x4eb415=_0x231f,_0x37dd09={'JIKRd':function(_0x3838d0,_0x29dea7){return _0x3838d0===_0x29dea7;}},_0x329a40=[..._0x5d4c70[_0x4eb415(0x20d)]()]['sort']();let _0x2341a5=0x0;for(const _0x544aef of _0x5d4c70['values']()){_0x2341a5+=_0x544aef;}return{'cliCommandCount':_0x2341a5,'cliCommandsSeen':_0x329a40,'noCliCommandsCalled':_0x37dd09['JIKRd'](_0x2341a5,0x0)};}export function createVerifyFeatureCliHooks(_0x3864cc){const _0xd14a12=_0x231f,_0x1b2c42={'PXQXM':function(_0x54e3cb,_0x23fe8d){return _0x54e3cb!==_0x23fe8d;},'uGSqd':function(_0x1d2497,_0x42d4f3){return _0x1d2497!==_0x42d4f3;},'iOGJB':function(_0xf84b72,_0xe49dbd){return _0xf84b72(_0xe49dbd);},'EzDHo':function(_0x350301,_0x1ed94c){return _0x350301+_0x1ed94c;},'OmDTm':'tool_call','fjFBK':_0xd14a12(0x1c2),'Dgati':function(_0x3a0430,_0x583250){return _0x3a0430(_0x583250);},'CboSN':_0xd14a12(0x230),'wAIGU':function(_0x4b1b71,_0x25ac6f,_0x47fd09,_0x543625){return _0x4b1b71(_0x25ac6f,_0x47fd09,_0x543625);},'ZGGPE':_0xd14a12(0x1a9),'QrvNJ':_0xd14a12(0x207)},_0x1f4316=new Map(),_0x3fabce=async _0x19c4f6=>{const _0x30ee55=_0xd14a12;if(_0x1b2c42[_0x30ee55(0x1c0)](_0x19c4f6[_0x30ee55(0x1ce)],'PostToolUse'))return{};const _0x190b94=_0x19c4f6;if(_0x1b2c42['uGSqd'](_0x190b94[_0x30ee55(0x218)],'Bash'))return{};const _0x54d340=_0x190b94['tool_input'],_0x5cdd07=_0x1b2c42['iOGJB'](extractBashCommand,_0x54d340);if(!_0x5cdd07)return{};const _0x2b13c4=parsePlaywrightCliCommand(_0x5cdd07);if(!_0x2b13c4)return{};return _0x1f4316[_0x30ee55(0x209)](_0x2b13c4,_0x1b2c42['EzDHo'](_0x1f4316['get'](_0x2b13c4)||0x0,0x1)),_0x3864cc[_0x30ee55(0x242)](_0x1b2c42['OmDTm'],{'transport':_0x1b2c42[_0x30ee55(0x1ff)],'toolName':_0x2b13c4}),_0x3864cc['trackPhaseEnd'](_0x1b2c42['OmDTm'],{'transport':'playwright-cli','toolName':_0x2b13c4,'bashCommandPreview':_0x1b2c42['Dgati'](truncatePreview,_0x5cdd07)}),_0x2b13c4!==_0x1b2c42[_0x30ee55(0x1d5)]&&console['log'](_0x1b2c42[_0x30ee55(0x234)](formatPlaywrightCliConsoleLogMessage,_0x54d340,_0x5cdd07,_0x2b13c4)),{};},_0x1f55e7=async _0x1076b2=>{const _0x1cf221=_0xd14a12;if(_0x1076b2['hook_event_name']!==_0x1cf221(0x232))return{};const _0x73cf99=_0x1076b2;if(_0x1b2c42[_0x1cf221(0x1c0)](_0x73cf99[_0x1cf221(0x218)],_0x1cf221(0x207)))return{};return await _0x3864cc['trackPhaseError'](_0x1b2c42['ZGGPE'],_0x73cf99[_0x1cf221(0x224)],{'transport':'playwright-cli','toolName':_0x1b2c42[_0x1cf221(0x1bb)]}),{};};return{'postToolUseHook':_0x3fabce,'postToolUseFailureHook':_0x1f55e7,'commandCounts':_0x1f4316};}async function runPlaywrightCliLifecycleCommand(_0x2b0d29){const _0x2344ec=_0x231f,_0x3119d7={'JHfqQ':function(_0x4b252c,_0x43a793){return _0x4b252c(_0x43a793);},'gTCPa':function(_0x59f3fe,_0x454a4a,_0x213b0a){return _0x59f3fe(_0x454a4a,_0x213b0a);},'YWfmR':function(_0x4d3bd8,_0x19a0ea,_0x2a8afc){return _0x4d3bd8(_0x19a0ea,_0x2a8afc);}},{sessionId:_0x51ae83,configPath:_0xae025c,commandArgs:_0x2e5a84,env:_0x127c8d,telemetry:_0x179ab8,phase:_0x59b26d,metadata:_0x4cabf9,timeoutMs:_0x369144}=_0x2b0d29;_0x179ab8[_0x2344ec(0x242)](_0x59b26d,_0x4cabf9);try{const _0x3ac115=await _0x3119d7[_0x2344ec(0x1c3)](runPlaywrightCliCommand,{'sessionId':_0x51ae83,'configPath':_0xae025c,'commandArgs':_0x2e5a84,'cwd':process[_0x2344ec(0x21e)](),'env':_0x127c8d,'timeoutMs':_0x369144??PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS});_0x179ab8[_0x2344ec(0x20c)](_0x59b26d,{..._0x4cabf9,'subcommand':_0x3ac115[_0x2344ec(0x1da)][_0x2344ec(0x1b3)],'stdoutPreview':_0x3119d7['gTCPa'](truncatePreview,_0x3ac115[_0x2344ec(0x214)],0x7d0),'stderrPreview':_0x3119d7[_0x2344ec(0x1a8)](truncatePreview,_0x3ac115['stderr'],0x7d0)});}catch(_0x3a1d4e){await _0x179ab8['trackPhaseError'](_0x59b26d,_0x3a1d4e,_0x4cabf9);throw _0x3a1d4e;}}export async function finalizeVerifyFeatureCliSession(_0x51322e){const _0x397157=_0x231f,_0x26b5a1={'ltSMB':_0x397157(0x1ae),'elmEc':_0x397157(0x1ec),'gyOWt':_0x397157(0x1e7),'iBuWg':function(_0x235105,_0x41a6f0,_0x28cce6){return _0x235105(_0x41a6f0,_0x28cce6);},'ZLVWC':_0x397157(0x1fe),'EOjjh':function(_0x185d11,_0x5ae7a6){return _0x185d11(_0x5ae7a6);}},{telemetry:_0x989dd4,sessionId:_0x180fab,configPath:_0xa3c00c,cliArtifactDir:_0x3cd06b,env:_0x17aece,transportMetadata:_0x1538f9}=_0x51322e,_0x16e55a=[{'phase':_0x26b5a1['ltSMB'],'commandArgs':[_0x26b5a1[_0x397157(0x215)]]},{'phase':_0x26b5a1['gyOWt'],'commandArgs':['video-stop',_0x397157(0x1e6)+_0x26b5a1['iBuWg'](buildCliArtifactPath,_0x3cd06b,_0x26b5a1['ZLVWC'])]},{'phase':'playwright_cli_close','commandArgs':[_0x397157(0x20f)]}];for(const _0x4644d4 of _0x16e55a){try{await _0x26b5a1[_0x397157(0x1eb)](runPlaywrightCliLifecycleCommand,{'sessionId':_0x180fab,'configPath':_0xa3c00c,'commandArgs':[..._0x4644d4[_0x397157(0x1f6)]],'env':_0x17aece,'telemetry':_0x989dd4,'phase':_0x4644d4['phase'],'metadata':_0x1538f9});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x1cab24){const _0x2a11c7=_0x231f,_0x2bd353={'mrnjv':_0x2a11c7(0x202),'lCCjU':function(_0x30f7fa,_0x564b4a,_0x2b2c2d){return _0x30f7fa(_0x564b4a,_0x2b2c2d);},'tFJEe':function(_0x586605,_0xcf9b56){return _0x586605(_0xcf9b56);}},_0x27e672=[_0x2bd353[_0x2a11c7(0x23f)],_0x2a11c7(0x1e5)];for(const _0x36ac31 of _0x27e672){const _0x3fec0d=_0x2bd353[_0x2a11c7(0x1e3)](join,_0x1cab24,_0x36ac31);try{return{'buffer':await _0x2bd353['tFJEe'](readFile,_0x3fec0d),'source':_0x3fec0d};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x5e6f25){const _0xc51e3=_0x231f,_0x34ce98={'GtFXN':function(_0x41e80c,_0xf47c92,_0x2ed0f9){return _0x41e80c(_0xf47c92,_0x2ed0f9);},'wyTss':function(_0x45192d,_0x1d9824,_0x3cbb20){return _0x45192d(_0x1d9824,_0x3cbb20);},'Oogab':function(_0xe6e050,_0x4be384,_0x36e7a4){return _0xe6e050(_0x4be384,_0x36e7a4);},'MkUun':function(_0x5353f8,_0x5691f0){return _0x5353f8(_0x5691f0);},'rTZXR':function(_0x1acfc0,_0x23f95a){return _0x1acfc0<_0x23f95a;}},{cwd:_0x3d35d4,cliArtifactDir:_0x30cc54,startTime:_0x44fd82}=_0x5e6f25,_0x59d7d4=[];await _0x34ce98['GtFXN'](mkdir,_0x30cc54,{'recursive':!![]});const _0x9507e8=await _0x34ce98['wyTss'](readdir,_0x3d35d4,{'withFileTypes':!![]});for(const _0x4b9afc of _0x9507e8){if(!_0x4b9afc[_0xc51e3(0x1ca)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0xc51e3(0x1fb)](_0x4b9afc[_0xc51e3(0x1bd)]))continue;const _0xc6b1ca=_0x34ce98[_0xc51e3(0x204)](join,_0x3d35d4,_0x4b9afc[_0xc51e3(0x1bd)]),_0x4c0360=await _0x34ce98[_0xc51e3(0x1ed)](stat,_0xc6b1ca);if(_0x34ce98[_0xc51e3(0x239)](_0x4c0360['mtimeMs']+0x7d0,_0x44fd82))continue;const _0x3fdbf4=buildCliArtifactPath(_0x30cc54,_0x4b9afc[_0xc51e3(0x1bd)]);if(_0xc6b1ca===_0x3fdbf4)continue;await _0x34ce98['wyTss'](rename,_0xc6b1ca,_0x3fdbf4),_0x59d7d4['push'](_0x4b9afc['name']);}return _0x59d7d4['sort']();}
@@ -7,15 +7,44 @@ description: "Ranger’s browser verification tooling that supplements a coding
7
7
 
8
8
  Run Ranger commands using `ranger-cli <args>`.
9
9
 
10
- **IMPORTANT: At the start of any session, run `ranger-cli update` to ensure you have the latest CLI and skills.**
10
+ **IMPORTANT: At the start of any session, check that you have the latest CLI and skills. If you were installed from `@latest`, run `ranger-cli update`. If you are on a prerelease (e.g., `@alpha`, version contains `-alpha.`), do NOT run `ranger-cli update` it will move you to `@latest` and off the prerelease track. Check with your team lead or re-install with `npm i -g @ranger-testing/ranger-cli@alpha` to stay current on that channel.**
11
11
 
12
12
  If you are running in Claude Code, read and suggest the following claude-specific commands to the user: [claude.md](./claude.md).
13
13
 
14
14
  Use Ranger when the work includes any UI or frontend component. Do not suggest Ranger for backend-only or infra-only changes unless the user asks.
15
15
 
16
- This skill covers three workflows for Ranger feature review tracking:
16
+ ## One-shot verification (default path when you have creds)
17
17
 
18
- ## Supported Workflows
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
+
20
+ ```bash
21
+ RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
22
+ ranger-cli go --base-url <target-url> --notes '<the goal verbatim>'
23
+ ```
24
+
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
30
+
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).
32
+
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.
34
+
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
19
48
 
20
49
  | Workflow | When to Use | Required Reading |
21
50
  |----------|-------------|------------------|
@@ -232,9 +261,10 @@ When completing your work or ending the session, your final message to the user
232
261
 
233
262
  If you encounter authentication issues:
234
263
 
235
- 1. **Check your profiles**: Run `ranger-cli profile ls` to see all configured profiles and their details
236
- 2. **Switch profiles**: Use `ranger-cli profile use <profile-name>` to switch to a different profile
237
- 3. **Refresh auth**: Instruct the user to run `ranger-cli profile update <profile-name>` to re-capture authentication for a profile (user will need to help with that)
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.
265
+ 2. **Check existing profiles**: Run `ranger-cli profile ls` to see all configured profiles.
266
+ 3. **Pin a specific profile**: Use `ranger-cli profile use <profile-name>` (or pass `--profile <name>` / set `RANGER_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.)
238
268
 
239
269
 
240
270
  ### Authentication Issues to Ranger
@@ -2,6 +2,25 @@
2
2
 
3
3
  Create a feature review when starting new work that doesn't have an existing feature review to resume.
4
4
 
5
+ ## ⚠️ When NOT to use this
6
+
7
+ **If the user just wants a quick browser check** (e.g. "log in as X and confirm the dashboard renders", "check that the new button appears on /settings"), **do not run `ranger-cli create`**. Run `ranger-cli go` directly:
8
+
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`.
23
+
5
24
  ## Basic Command
6
25
 
7
26
  ```bash
@@ -1,24 +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
+
7
+ ```bash
8
+ RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
9
+ ranger-cli go --base-url <target-url> --notes '<the goal verbatim>'
10
+ ```
11
+
12
+ If credentials already live in a nearby `.env`, source it inline before running `go` instead of typing values (`set -a; source ./.env; set +a`).
13
+
14
+ The CLI:
15
+
16
+ - Materializes a profile from `RANGER_TEST_USERNAME` if one doesn't exist
17
+ - Runs the configured login if no session is cached
18
+ - Creates a feature review automatically when one is needed
19
+ - Captures a trace + screenshots you can link to
20
+
21
+ This works for any login flow Ranger has set up with the customer — username/password, SSO, OAuth, MFA, passkeys. Don't worry about the auth shape; if the user gave you creds, try this path first.
22
+
23
+ Do **not** run `ranger-cli create` first unless the user explicitly asks for a structured feature review with multiple scenarios.
24
+
25
+ ### Fallback when the one-shot path fails
26
+
27
+ If `go` returns a 422 / login-failed, automated login probably isn't set up for this account. Fall back in this order:
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:
6
38
 
7
39
  ```bash
8
40
  ranger-cli go --scenario <N> --notes "<what to verify>"
9
41
  ```
10
42
 
11
- The URL is derived from your active profile's `baseUrl` setting.
43
+ ## Profile resolution order
12
44
 
13
- ## Required: Active Feature Review
45
+ 1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
46
+ 2. Saved active profile (`ranger-cli profile use <name>`)
47
+ 3. `RANGER_TEST_USERNAME` (reuses or creates a matching profile)
48
+ 4. The org's sole profile when exactly one exists
14
49
 
15
- `go` requires an active feature review. If you don't have one:
50
+ ## Active feature review (only needed for scenario-driven runs)
51
+
52
+ If you're verifying a scenario (not a one-shot):
16
53
 
17
54
  ```bash
18
55
  ranger-cli list # Find feature reviews to resume
19
56
  ranger-cli resume <id> # Resume a specific feature review
20
57
  ```
21
58
 
59
+ For a one-shot `go --base-url ... --notes '...'`, the CLI handles feature-review creation for you.
60
+
22
61
  ## The Verification Flow
23
62
 
24
63
  1. **Select scenario** - CLI prompts which scenario this verifies
@@ -41,7 +80,7 @@ You do NOT need to manually include reviewer feedback in your `--notes` descript
41
80
 
42
81
  | Option | Required | Description |
43
82
  |--------|----------|-------------|
44
- | `--profile` | No | Profile to use (defaults to active profile) |
83
+ | `--profile` | No | Profile to use. Equivalent to `RANGER_PROFILE` env var. Defaults to active profile, or to the user keyed by `RANGER_TEST_USERNAME` if set. |
45
84
  | `--notes` | No | What to verify (defaults to scenario description) |
46
85
  | `--scenario` | No | Scenario index to verify (skips selection prompt) |
47
86
  | `--start-path` | No | Path to start on (appended to base URL, e.g., `/dashboard`) |
@@ -182,7 +221,7 @@ Always end the conversational turn by sharing the dashboard link whenever you ru
182
221
  Run `ranger-cli list` to find feature reviews, then `ranger-cli resume <id>` to resume one.
183
222
 
184
223
  ### "No active profile"
185
- Run `ranger-cli profile use <profile-name>` to set a profile with browser access.
224
+ Either set `RANGER_TEST_USERNAME` (and `RANGER_TEST_PASSWORD` for first-time login) and re-run, or pin one explicitly with `ranger-cli profile use <profile-name>`.
186
225
 
187
226
  ### Verification times out
188
227
  The agent has 59 minutes max. For very long flows, break into smaller scenarios.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ranger-testing/ranger-cli",
3
- "version": "2.5.4-alpha.ed286f1-2",
3
+ "version": "2.5.4-alpha.f940f0d-18",
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
  }