@ranger-testing/ranger-cli 2.5.4-alpha.a70fc60-4 → 2.5.4-alpha.b28d3b1-14

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 (81) hide show
  1. package/build/cli.js +1 -1
  2. package/build/commands/addEnv.js +1 -1
  3. package/build/commands/authEncrypt.js +1 -1
  4. package/build/commands/clean.js +1 -1
  5. package/build/commands/config.js +1 -1
  6. package/build/commands/env.js +1 -1
  7. package/build/commands/feature.js +1 -1
  8. package/build/commands/hook.js +1 -1
  9. package/build/commands/hooks/autoPrompt.js +1 -1
  10. package/build/commands/hooks/disable.js +1 -1
  11. package/build/commands/hooks/enable.js +1 -1
  12. package/build/commands/hooks/exitPlanMode.js +1 -1
  13. package/build/commands/hooks/index.js +1 -1
  14. package/build/commands/hooks/output.js +1 -1
  15. package/build/commands/hooks/planReminder.js +1 -1
  16. package/build/commands/hooks/planStart.js +1 -1
  17. package/build/commands/hooks/postEdit.js +1 -1
  18. package/build/commands/hooks/preCompact.js +1 -1
  19. package/build/commands/hooks/sessionEnd.js +1 -1
  20. package/build/commands/hooks/sessionStart.js +1 -1
  21. package/build/commands/hooks/stopHook.js +1 -1
  22. package/build/commands/index.js +1 -1
  23. package/build/commands/login.js +1 -1
  24. package/build/commands/mcpBootstrap.js +1 -1
  25. package/build/commands/migrateProfile.js +1 -1
  26. package/build/commands/setup/claude.js +1 -1
  27. package/build/commands/setup/opencode.js +1 -1
  28. package/build/commands/setupCi.js +1 -1
  29. package/build/commands/skillup.js +1 -1
  30. package/build/commands/start.js +1 -1
  31. package/build/commands/status.js +1 -1
  32. package/build/commands/update.js +1 -1
  33. package/build/commands/updateEnv.js +1 -1
  34. package/build/commands/useEnv.js +1 -1
  35. package/build/commands/utils/activeProfile.js +1 -1
  36. package/build/commands/utils/agentEnv.js +1 -1
  37. package/build/commands/utils/browserSessionsApi.js +1 -1
  38. package/build/commands/utils/claudeConfig.js +1 -1
  39. package/build/commands/utils/claudeOverrideSettings.js +1 -1
  40. package/build/commands/utils/claudePlugin.js +1 -1
  41. package/build/commands/utils/cloudProfile.js +1 -1
  42. package/build/commands/utils/cloudProfileSession.js +1 -1
  43. package/build/commands/utils/crypto.js +1 -1
  44. package/build/commands/utils/desirePathLog.js +1 -1
  45. package/build/commands/utils/deviceAuth.js +1 -1
  46. package/build/commands/utils/environment.js +1 -1
  47. package/build/commands/utils/featureApi.js +1 -1
  48. package/build/commands/utils/fixWebmDuration.js +1 -1
  49. package/build/commands/utils/gitTracked.js +1 -1
  50. package/build/commands/utils/keychain.js +1 -1
  51. package/build/commands/utils/legacyWarning.js +1 -0
  52. package/build/commands/utils/localAgentInstallationsApi.js +1 -1
  53. package/build/commands/utils/matchAuthEnvironment.js +1 -1
  54. package/build/commands/utils/mcpImageBase64.js +1 -1
  55. package/build/commands/utils/model.js +1 -1
  56. package/build/commands/utils/opencodeConfig.js +1 -1
  57. package/build/commands/utils/playwrightCli.js +1 -1
  58. package/build/commands/utils/profileMessages.js +1 -1
  59. package/build/commands/utils/profileSetupBanner.js +1 -1
  60. package/build/commands/utils/projectsConfig.js +1 -1
  61. package/build/commands/utils/rangerConfig.js +1 -1
  62. package/build/commands/utils/rangerRoot.js +1 -1
  63. package/build/commands/utils/resolveProfileContext.js +1 -1
  64. package/build/commands/utils/resolveProfileUrl.js +1 -1
  65. package/build/commands/utils/retry.js +1 -1
  66. package/build/commands/utils/sessionCache.js +1 -1
  67. package/build/commands/utils/settings.js +1 -1
  68. package/build/commands/utils/skillContent.js +1 -1
  69. package/build/commands/utils/skills.js +1 -1
  70. package/build/commands/utils/stitchWebmFiles.js +1 -1
  71. package/build/commands/utils/telemetry.js +1 -1
  72. package/build/commands/utils/tokenRefresh.js +1 -1
  73. package/build/commands/utils/traceSnapshotMapper.js +1 -1
  74. package/build/commands/utils/userApi.js +1 -1
  75. package/build/commands/utils/version.js +1 -1
  76. package/build/commands/verifyFeature.js +1 -1
  77. package/build/commands/verifyFeatureCli.js +1 -1
  78. package/build/skills/ranger/SKILL.md +25 -5
  79. package/build/skills/ranger/create.md +19 -0
  80. package/build/skills/ranger/verify.md +34 -7
  81. package/package.json +3 -2
@@ -1 +1 @@
1
- (function(_0xb25dab,_0x193bfd){const _0x1c9f4b=_0x298b,_0x375a8e=_0xb25dab();while(!![]){try{const _0x457a5d=-parseInt(_0x1c9f4b(0x1e2))/0x1+parseInt(_0x1c9f4b(0x1cc))/0x2+parseInt(_0x1c9f4b(0x19a))/0x3+parseInt(_0x1c9f4b(0x1b4))/0x4+parseInt(_0x1c9f4b(0x1ae))/0x5*(parseInt(_0x1c9f4b(0x1b7))/0x6)+parseInt(_0x1c9f4b(0x19e))/0x7*(-parseInt(_0x1c9f4b(0x185))/0x8)+-parseInt(_0x1c9f4b(0x17b))/0x9;if(_0x457a5d===_0x193bfd)break;else _0x375a8e['push'](_0x375a8e['shift']());}catch(_0x15d840){_0x375a8e['push'](_0x375a8e['shift']());}}}(_0x14db,0x8e056));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 _0x14db(){const _0x5998bf=['305683szLwIk','01_mozilla-homepage.png','name','click','Bash','env','video-stop','03_result-visible.png','tgUhf','description','string','PostToolUseFailure','canonicalFlow','fill','\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.','playwright_cli_video_stop','5ZsbXwe','sqxAZ','dIFDw','video-start','02_state.yml','trace.zip','498864FqzCeL','stderr','ljgSI','4960938iooGEE','commandArgs','\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.','capture\x20key\x20step\x20`','tracing-start','authorName','element','ref\x20','XTQCE','CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20','sort','test','VecsJ','cexSi','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','replace','snapshot','02_learn-more.yml','03_learn-more.png','mtimeMs','capture\x20snapshot\x20`','1442364ULhAmV','BCsYF','FYQzd','numeric','MSqkn','authorEmail','unaddressedComments','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','start\x20video\x20recording','stringify','...','stdout','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','rzaCu','KiSpp','Reviewer','trackPhaseError','trackPhaseStart',']\x20**','\x20>\x20','pCtTh','sLEex','181037SzAOKi','\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','tab-new','fill\x20','QKDSS','CGvkQ','yyQPQ','NgBTf','select\x20tab','hFYSH','close','stop\x20video\x20recording','map','`\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','nHMCR','playwright_cli_close','log','key_04_success-state.png','join','tool_input','):\x20\x22','tADEh','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','ShlET','vbRyf','\x20screenshot\x20--filename\x20','check','PostToolUse','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','\x20tracing-start`,\x20then\x20`','yLwKO','DxOxd','start\x20tracing','SwLNo','set','tool_name','mtHHP','3400551ngkHzx','press\x20','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','key_03_success-state.png','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','run-code','tool_call','IFCMj','HaMAU','hook_event_name','112tdjJLq','target','split','match','notes','00_mozilla-homepage.yml','\x22,\x20\x22','error','GzucK','DpvgI','`:\x20\x22','keys','length','Zrsfa','\x20tracing-start`\x0a3.\x20Run\x20`','\x20(on\x20element:\x20<','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\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','slice','session-recording.webm','AyZnV','237717Jzasnn','`\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`','capture\x20snapshot','press'];_0x14db=function(){return _0x5998bf;};return _0x14db();}function truncatePreview(_0x3a1661,_0xbaa269=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x4c9897=_0x298b,_0x418835={'sTspN':function(_0x39cf6b,_0x1d2e4f){return _0x39cf6b>_0x1d2e4f;}};return _0x418835['sTspN'](_0x3a1661['length'],_0xbaa269)?_0x3a1661[_0x4c9897(0x197)](0x0,_0xbaa269)+_0x4c9897(0x1d6):_0x3a1661;}function buildCliArtifactPath(_0x3f7462,_0x3eb591){const _0x2adb30={'lFFkr':function(_0x30c20f,_0x2e1ba0,_0x14b231){return _0x30c20f(_0x2e1ba0,_0x14b231);}};return _0x2adb30['lFFkr'](join,_0x3f7462,_0x3eb591);}function toStepDisplayName(_0x1e29b2){const _0x549d90=_0x298b,_0x4ffaf4={'oTCUI':function(_0x1409e7,_0x1e5c7c){return _0x1409e7(_0x1e5c7c);}},_0xf02868=basename(_0x1e29b2)['replace'](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')[_0x549d90(0x1c6)](/^\d+_/,'')[_0x549d90(0x1c6)](/-/g,'\x20');return{'name':_0xf02868,'isKeyStep':/^key_/i['test'](_0x4ffaf4['oTCUI'](basename,_0x1e29b2))};}function extractShellValue(_0x4a2415){if(!_0x4a2415)return null;return _0x4a2415[0x1]??_0x4a2415[0x2]??_0x4a2415[0x3]??null;}function _0x298b(_0x29d7cc,_0x1b862c){_0x29d7cc=_0x29d7cc-0x16c;const _0x14db81=_0x14db();let _0x298bac=_0x14db81[_0x29d7cc];return _0x298bac;}function extractFilenameOption(_0x46c975){const _0x58bb99=_0x298b;return extractShellValue(_0x46c975[_0x58bb99(0x188)](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x2684c0,_0x2c64e7){const _0x2d8f46={'IsVAR':function(_0x151c60,_0x560d52){return _0x151c60(_0x560d52);}},_0xcd40b3=_0x2c64e7['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');return _0x2d8f46['IsVAR'](extractShellValue,_0x2684c0['match'](new RegExp('(?:^|\x5cs)'+_0xcd40b3+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x5d4536){const _0x10f6d0=_0x298b,_0x23c882={'Zrsfa':_0x10f6d0(0x186)};if(!_0x5d4536)return _0x23c882[_0x10f6d0(0x192)];if(/^e\d+$/i[_0x10f6d0(0x1c2)](_0x5d4536))return _0x10f6d0(0x1be)+_0x5d4536;return JSON[_0x10f6d0(0x1d5)](truncatePreview(_0x5d4536,0x78));}function formatPlaywrightCliLog(_0x5c733c,_0x2fe289){const _0x1d4486=_0x298b,_0x55a40={'sqxAZ':'open','NgBTf':'stop\x20tracing','pCtTh':_0x1d4486(0x1d4),'YCGae':_0x1d4486(0x1ed),'TzIjG':'screenshot','nHMCR':function(_0x404f25,_0x2467f6){return _0x404f25(_0x2467f6);},'cSGHl':'capture\x20screenshot','tADEh':function(_0x2e1b96,_0x8cdadb){return _0x2e1b96(_0x8cdadb);},'vbRyf':_0x1d4486(0x170),'DlHIX':function(_0x33dd17,_0x4ce9bd,_0x1db9ca){return _0x33dd17(_0x4ce9bd,_0x1db9ca);},'GzucK':'run\x20custom\x20Playwright\x20code','ljgSI':'open\x20new\x20tab','dIFDw':'tab-select'};switch(_0x2fe289){case _0x55a40[_0x1d4486(0x1af)]:{const _0x372b77=extractFirstCommandArgument(_0x5c733c,_0x2fe289);return _0x372b77?'open\x20'+_0x372b77:'open\x20browser';}case _0x1d4486(0x1bb):return _0x1d4486(0x176);case'tracing-stop':return _0x55a40[_0x1d4486(0x1e9)];case _0x1d4486(0x1b1):return _0x55a40[_0x1d4486(0x1e0)];case'video-stop':return _0x55a40['YCGae'];case _0x1d4486(0x1c7):{const _0x2a4edf=extractFilenameOption(_0x5c733c);if(!_0x2a4edf)return _0x1d4486(0x19c);const {name:_0x495ba9}=toStepDisplayName(_0x2a4edf);return _0x1d4486(0x1cb)+_0x495ba9+'`';}case _0x55a40['TzIjG']:{const _0x5b86a6=_0x55a40[_0x1d4486(0x1f0)](extractFilenameOption,_0x5c733c);if(!_0x5b86a6)return _0x55a40['cSGHl'];const {name:_0x1d2f63,isKeyStep:_0x46dc85}=_0x55a40[_0x1d4486(0x1f7)](toStepDisplayName,_0x5b86a6);return _0x46dc85?_0x1d4486(0x1ba)+_0x1d2f63+'`':'capture\x20step\x20`'+_0x1d2f63+'`';}case _0x1d4486(0x1a1):return'click\x20'+formatCommandTarget(extractFirstCommandArgument(_0x5c733c,_0x2fe289));case _0x55a40[_0x1d4486(0x16e)]:return'check\x20'+_0x55a40['tADEh'](formatCommandTarget,_0x55a40['DlHIX'](extractFirstCommandArgument,_0x5c733c,_0x2fe289));case _0x1d4486(0x1ab):return _0x1d4486(0x1e5)+_0x55a40['tADEh'](formatCommandTarget,extractFirstCommandArgument(_0x5c733c,_0x2fe289));case _0x1d4486(0x19d):return _0x1d4486(0x17c)+formatCommandTarget(extractFirstCommandArgument(_0x5c733c,_0x2fe289));case _0x1d4486(0x180):return _0x55a40[_0x1d4486(0x18d)];case _0x1d4486(0x1e4):{const _0x4b7f8a=extractFirstCommandArgument(_0x5c733c,_0x2fe289);return _0x4b7f8a?'open\x20new\x20tab\x20'+_0x4b7f8a:_0x55a40[_0x1d4486(0x1b6)];}case _0x55a40[_0x1d4486(0x1b0)]:{const _0x3b85b4=extractFirstCommandArgument(_0x5c733c,_0x2fe289);return _0x3b85b4?'select\x20tab\x20'+_0x3b85b4:_0x1d4486(0x1ea);}default:return _0x2fe289;}}function extractPlaywrightCliToolDescription(_0x4dcd06){const _0x36d77d=_0x298b,_0x2e2cb8=_0x4dcd06[_0x36d77d(0x1a7)];if(typeof _0x2e2cb8!==_0x36d77d(0x1a8))return null;const _0x2c1d61=_0x2e2cb8['trim']()[_0x36d77d(0x1c6)](/\s+/g,'\x20');return _0x2c1d61[_0x36d77d(0x191)]>0x0?_0x2c1d61:null;}export function formatPlaywrightCliConsoleLogMessage(_0x2eb3f3,_0xb75d31,_0xae6640){const _0x4c7e36=_0x298b,_0x59288e=formatPlaywrightCliLog(_0xb75d31,_0xae6640),_0x3fc673=extractPlaywrightCliToolDescription(_0x2eb3f3);if(!_0x3fc673)return'[playwright-cli]\x20'+_0x59288e;if(process[_0x4c7e36(0x1a3)]['DEBUG'])return'[ranger-verification-agent]\x20'+_0x3fc673+'\x20('+_0x59288e+')';return'[ranger-verification-agent]\x20'+_0x3fc673;}export function buildVerifyFeatureCliDebugPrompt(_0x24e6c6,_0x8560ac){const _0x35f70e=_0x298b,_0x1be154={'XTQCE':function(_0x57ecf8,_0x286208,_0x5bb3fb){return _0x57ecf8(_0x286208,_0x5bb3fb);},'MTdlI':_0x35f70e(0x18a),'mRvfk':_0x35f70e(0x19f),'icBOC':function(_0x4b54bb,_0x133b9d,_0x1a44c7){return _0x4b54bb(_0x133b9d,_0x1a44c7);},'IFCMj':_0x35f70e(0x1c9),'yyQPQ':function(_0x4aef75,_0x2236aa){return _0x4aef75(_0x2236aa);},'VecsJ':function(_0x28e1d3,_0x3a8fe8){return _0x28e1d3(_0x3a8fe8);}},_0x244fe3=_0x1be154['XTQCE'](buildCliArtifactPath,_0x8560ac,_0x1be154['MTdlI']),_0x44815b=_0x1be154[_0x35f70e(0x1bf)](buildCliArtifactPath,_0x8560ac,_0x1be154['mRvfk']),_0x1762d0=_0x1be154['icBOC'](buildCliArtifactPath,_0x8560ac,_0x35f70e(0x1c8)),_0x57eb1b=buildCliArtifactPath(_0x8560ac,_0x1be154[_0x35f70e(0x182)]),_0x248b67=_0x1be154[_0x35f70e(0x1e8)](quoteShellArg,_0x244fe3),_0x5e431e=quoteShellArg(_0x44815b),_0x1ba39b=_0x1be154['yyQPQ'](quoteShellArg,_0x1762d0),_0xdfa4f6=_0x1be154[_0x35f70e(0x1c3)](quoteShellArg,_0x57eb1b);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x24e6c6+'\x0a\x0a1.\x20Run\x20`'+_0x24e6c6+_0x35f70e(0x172)+_0x24e6c6+_0x35f70e(0x193)+_0x24e6c6+_0x35f70e(0x195)+_0x8560ac+_0x35f70e(0x17d)+_0x24e6c6+'\x20snapshot\x20--filename\x20'+_0x248b67+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x24e6c6+_0x35f70e(0x16f)+_0x5e431e+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x24e6c6+'\x20snapshot\x20--filename\x20'+_0x1ba39b+'`\x0a9.\x20Run\x20`'+_0x24e6c6+'\x20screenshot\x20--filename\x20'+_0xdfa4f6+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0x5c3c40){const _0x48ac8b=_0x298b,_0x2a013f={'DxOxd':'en-US','AyZnV':'short','xubtp':_0x48ac8b(0x1cf),'HOOdz':_0x48ac8b(0x1db),'kUXOS':_0x48ac8b(0x1df),'dKpFY':function(_0x5416c8,_0x40139c,_0x5e999c){return _0x5416c8(_0x40139c,_0x5e999c);},'SwLNo':_0x48ac8b(0x1b2),'BCsYF':function(_0x4b41b9,_0x5f4e17,_0x412063){return _0x4b41b9(_0x5f4e17,_0x412063);},'uwGXl':'01_initial-state.png','QKDSS':function(_0x369afd,_0xb67bb5){return _0x369afd(_0xb67bb5);},'YKfSc':function(_0x51b25e,_0x83bbf8){return _0x51b25e>_0x83bbf8;}},{checklistItem:_0x457e14,itemFeedback:_0x1b47d9,taskDescription:_0x2bae0c,cliCommandPrefix:_0x2e0151,cliArtifactDir:_0x27eef1,isCdpMode:_0x335750,url:_0xcc0aa7,cdpEndpoint:_0x25e05c,loginInstructions:_0x157043}=_0x5c3c40,_0x5cdd58=buildCliArtifactPath(_0x27eef1,'01_initial.yml'),_0x20f9db=_0x2a013f['dKpFY'](buildCliArtifactPath,_0x27eef1,_0x2a013f[_0x48ac8b(0x177)]),_0x2aab1a=buildCliArtifactPath(_0x27eef1,_0x48ac8b(0x17e)),_0x12690c=_0x2a013f[_0x48ac8b(0x1cd)](buildCliArtifactPath,_0x27eef1,_0x2a013f['uwGXl']),_0x32156d=_0x2a013f['QKDSS'](quoteShellArg,_0x5cdd58),_0x2ffc1f=quoteShellArg(_0x20f9db),_0x1f529b=quoteShellArg(_0x2aab1a),_0x51af94=_0x2a013f[_0x48ac8b(0x1e6)](quoteShellArg,_0x12690c),_0x29b5a3=_0x457e14['notes']?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x457e14[_0x48ac8b(0x189)]:'';let _0x5c7531='';if(_0x1b47d9&&_0x2a013f['YKfSc'](_0x1b47d9['unaddressedComments']['length'],0x0)){const _0x24a770=_0x1b47d9[_0x48ac8b(0x1d2)][_0x48ac8b(0x1ee)](_0x1545be=>{const _0x3b5dd9=_0x48ac8b,_0x379df5=new Date(_0x1545be['createdAt'])['toLocaleDateString'](_0x2a013f[_0x3b5dd9(0x175)],{'month':_0x2a013f[_0x3b5dd9(0x199)],'day':_0x2a013f['xubtp']}),_0x34cf41=_0x1545be[_0x3b5dd9(0x1bc)]||_0x1545be[_0x3b5dd9(0x1d1)]||_0x2a013f['HOOdz'],_0x4af854=_0x1545be['domRef']?_0x3b5dd9(0x194)+(_0x1545be['domRef']['selector']['split'](_0x2a013f['kUXOS'])['pop']()?.[_0x3b5dd9(0x187)](':')[0x0]||_0x3b5dd9(0x1bd))+'>\x20\x22'+(_0x1545be['domRef']['textContent']||'')[_0x3b5dd9(0x197)](0x0,0x32)+'\x22)':'';return'-\x20['+_0x1545be['id']+_0x3b5dd9(0x1de)+_0x34cf41+'**\x20('+_0x379df5+_0x3b5dd9(0x1f6)+_0x1545be['content']+'\x22'+_0x4af854;})[_0x48ac8b(0x1f4)]('\x0a');_0x5c7531=_0x48ac8b(0x196)+_0x24a770;}const _0x2eac27=_0x1b47d9?.[_0x48ac8b(0x1aa)]?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0x1b47d9['canonicalFlow']:'',_0x1fca4e=_0x335750?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x25e05c+_0x48ac8b(0x1d3):_0x48ac8b(0x1c0)+_0xcc0aa7+'\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',_0x49567c=_0xcc0aa7?_0x2a013f[_0x48ac8b(0x1e6)](quoteShellArg,_0xcc0aa7):'',_0x1405e0=_0x335750?_0x48ac8b(0x1c5)+_0x2e0151+'\x20open`,\x20then\x20`'+_0x2e0151+'\x20tracing-start`,\x20then\x20`'+_0x2e0151+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x27eef1+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x2e0151+'\x20snapshot\x20--filename\x20'+_0x32156d+'`\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`'+_0x2e0151+_0x48ac8b(0x16f)+_0x51af94+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x2e0151+'\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':_0x48ac8b(0x1c5)+_0x2e0151+'\x20open\x20'+_0x49567c+'`,\x20then\x20`'+_0x2e0151+_0x48ac8b(0x173)+_0x2e0151+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x27eef1+_0x48ac8b(0x1d8)+_0x2e0151+'\x20snapshot\x20--filename\x20'+_0x32156d+'`\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`'+_0x2e0151+'\x20screenshot\x20--filename\x20'+_0x51af94+_0x48ac8b(0x16c)+_0x2e0151+'\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',_0x4c593b=_0x335750?'\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.':_0x48ac8b(0x1ac),_0x1ebfab=_0x157043?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x157043+'\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'+_0x457e14['description']+_0x29b5a3+_0x5c7531+_0x2eac27+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x2bae0c+'\x0a\x0a'+_0x1fca4e+_0x1ebfab+'\x0a\x0a'+_0x1405e0+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x2e0151+_0x48ac8b(0x17f)+_0x27eef1+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x2ffc1f+_0x48ac8b(0x1ef)+_0x1f529b+_0x48ac8b(0x19b)+_0x27eef1+_0x48ac8b(0x18f)+_0x12690c+'\x22,\x20\x22'+buildCliArtifactPath(_0x27eef1,'02_button-clicked.png')+_0x48ac8b(0x18b)+buildCliArtifactPath(_0x27eef1,_0x48ac8b(0x1a5))+'\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(_0x27eef1,_0x48ac8b(0x1f3))+_0x48ac8b(0x1e3)+_0x4c593b+_0x48ac8b(0x1b9);}export function summarizeVerifyFeatureCliCommandAvailability(_0x7450c1){const _0x1d2e0d=_0x298b,_0x35221d={'hFYSH':function(_0x2fbf33,_0x3fc008){return _0x2fbf33===_0x3fc008;}},_0x10cc59=[..._0x7450c1[_0x1d2e0d(0x190)]()]['sort']();let _0x5c9478=0x0;for(const _0x209640 of _0x7450c1['values']()){_0x5c9478+=_0x209640;}return{'cliCommandCount':_0x5c9478,'cliCommandsSeen':_0x10cc59,'noCliCommandsCalled':_0x35221d[_0x1d2e0d(0x1eb)](_0x5c9478,0x0)};}export function createVerifyFeatureCliHooks(_0x405877){const _0x38f1d9=_0x298b,_0x577bc8={'lOgwP':_0x38f1d9(0x171),'cexSi':function(_0x4ad6b4,_0x2d12d3){return _0x4ad6b4!==_0x2d12d3;},'urhrI':function(_0x71ad3b,_0x17eee2){return _0x71ad3b(_0x17eee2);},'mtHHP':_0x38f1d9(0x181),'tgUhf':'playwright-cli','KiSpp':function(_0x3f1b61,_0x3ae4e6){return _0x3f1b61(_0x3ae4e6);},'sLEex':function(_0x33d40e,_0x5eba73,_0x417b80,_0x2a9fe0){return _0x33d40e(_0x5eba73,_0x417b80,_0x2a9fe0);}},_0x76283c=new Map(),_0x137340=async _0xedec3e=>{const _0x50a6df=_0x38f1d9;if(_0xedec3e[_0x50a6df(0x184)]!==_0x577bc8['lOgwP'])return{};const _0x5096a4=_0xedec3e;if(_0x577bc8[_0x50a6df(0x1c4)](_0x5096a4[_0x50a6df(0x179)],'Bash'))return{};const _0x33366d=_0x5096a4[_0x50a6df(0x1f5)],_0x5d3667=extractBashCommand(_0x33366d);if(!_0x5d3667)return{};const _0x163ef1=_0x577bc8['urhrI'](parsePlaywrightCliCommand,_0x5d3667);if(!_0x163ef1)return{};return _0x76283c[_0x50a6df(0x178)](_0x163ef1,(_0x76283c['get'](_0x163ef1)||0x0)+0x1),_0x405877['trackPhaseStart'](_0x577bc8[_0x50a6df(0x17a)],{'transport':'playwright-cli','toolName':_0x163ef1}),_0x405877['trackPhaseEnd'](_0x577bc8[_0x50a6df(0x17a)],{'transport':_0x577bc8[_0x50a6df(0x1a6)],'toolName':_0x163ef1,'bashCommandPreview':_0x577bc8[_0x50a6df(0x1da)](truncatePreview,_0x5d3667)}),_0x163ef1!==_0x50a6df(0x1c7)&&console[_0x50a6df(0x1f2)](_0x577bc8[_0x50a6df(0x1e1)](formatPlaywrightCliConsoleLogMessage,_0x33366d,_0x5d3667,_0x163ef1)),{};},_0x20dcf7=async _0x37b578=>{const _0x187da5=_0x38f1d9;if(_0x577bc8[_0x187da5(0x1c4)](_0x37b578['hook_event_name'],_0x187da5(0x1a9)))return{};const _0x10789d=_0x37b578;if(_0x577bc8['cexSi'](_0x10789d['tool_name'],_0x187da5(0x1a2)))return{};return await _0x405877['trackPhaseError']('tool_failure',_0x10789d[_0x187da5(0x18c)],{'transport':_0x577bc8[_0x187da5(0x1a6)],'toolName':_0x187da5(0x1a2)}),{};};return{'postToolUseHook':_0x137340,'postToolUseFailureHook':_0x20dcf7,'commandCounts':_0x76283c};}async function runPlaywrightCliLifecycleCommand(_0x18e738){const _0x44719f=_0x298b,_0x11357a={'zUyBI':function(_0x2daba,_0x40bf30){return _0x2daba??_0x40bf30;}},{sessionId:_0x38a575,configPath:_0x1848ed,commandArgs:_0x23298a,env:_0x38d29d,telemetry:_0x17d418,phase:_0xa7f702,metadata:_0x334926,timeoutMs:_0x3bcfed}=_0x18e738;_0x17d418[_0x44719f(0x1dd)](_0xa7f702,_0x334926);try{const _0x48ceb0=await runPlaywrightCliCommand({'sessionId':_0x38a575,'configPath':_0x1848ed,'commandArgs':_0x23298a,'cwd':process['cwd'](),'env':_0x38d29d,'timeoutMs':_0x11357a['zUyBI'](_0x3bcfed,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x17d418['trackPhaseEnd'](_0xa7f702,{..._0x334926,'subcommand':_0x48ceb0['invocation']['subcommand'],'stdoutPreview':truncatePreview(_0x48ceb0[_0x44719f(0x1d7)],0x7d0),'stderrPreview':truncatePreview(_0x48ceb0[_0x44719f(0x1b5)],0x7d0)});}catch(_0x5afb73){await _0x17d418[_0x44719f(0x1dc)](_0xa7f702,_0x5afb73,_0x334926);throw _0x5afb73;}}export async function finalizeVerifyFeatureCliSession(_0x52a18b){const _0x3348ca=_0x298b,_0x54e416={'DpvgI':_0x3348ca(0x1ad),'CGvkQ':_0x3348ca(0x198),'HaMAU':_0x3348ca(0x1ec)},{telemetry:_0x519127,sessionId:_0x21b382,configPath:_0x44d69c,cliArtifactDir:_0x3958e2,env:_0x25284d,transportMetadata:_0x4202a3}=_0x52a18b,_0x42b9f3=[{'phase':'playwright_cli_tracing_stop','commandArgs':['tracing-stop']},{'phase':_0x54e416[_0x3348ca(0x18e)],'commandArgs':[_0x3348ca(0x1a4),'--filename='+buildCliArtifactPath(_0x3958e2,_0x54e416[_0x3348ca(0x1e7)])]},{'phase':_0x3348ca(0x1f1),'commandArgs':[_0x54e416[_0x3348ca(0x183)]]}];for(const _0xbb1a5 of _0x42b9f3){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x21b382,'configPath':_0x44d69c,'commandArgs':[..._0xbb1a5[_0x3348ca(0x1b8)]],'env':_0x25284d,'telemetry':_0x519127,'phase':_0xbb1a5['phase'],'metadata':_0x4202a3});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0xa53846){const _0x35f4ce=_0x298b,_0x48f53f={'ShlET':_0x35f4ce(0x1b3),'yLwKO':'trace.trace.zip','JvjcZ':function(_0x34e96e,_0x556178,_0x4042ea){return _0x34e96e(_0x556178,_0x4042ea);}},_0x2026a1=[_0x48f53f[_0x35f4ce(0x16d)],_0x48f53f[_0x35f4ce(0x174)]];for(const _0x1356ce of _0x2026a1){const _0xb2088=_0x48f53f['JvjcZ'](join,_0xa53846,_0x1356ce);try{return{'buffer':await readFile(_0xb2088),'source':_0xb2088};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x2662c4){const _0x3bb64=_0x298b,_0x18a578={'rzaCu':function(_0x368b2b,_0x474e6d,_0x564fbc){return _0x368b2b(_0x474e6d,_0x564fbc);},'MSqkn':function(_0x17f124,_0x3da136,_0x1df3ab){return _0x17f124(_0x3da136,_0x1df3ab);},'FYQzd':function(_0x51e947,_0x5419d7){return _0x51e947(_0x5419d7);},'cUtnM':function(_0x13032c,_0x4c7cdb,_0x7d8a2d){return _0x13032c(_0x4c7cdb,_0x7d8a2d);}},{cwd:_0x3666e3,cliArtifactDir:_0x1cb111,startTime:_0x48c4fe}=_0x2662c4,_0x4f2aae=[];await _0x18a578['rzaCu'](mkdir,_0x1cb111,{'recursive':!![]});const _0x323428=await _0x18a578[_0x3bb64(0x1d0)](readdir,_0x3666e3,{'withFileTypes':!![]});for(const _0x12809f of _0x323428){if(!_0x12809f['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x3bb64(0x1c2)](_0x12809f['name']))continue;const _0x560288=_0x18a578[_0x3bb64(0x1d9)](join,_0x3666e3,_0x12809f[_0x3bb64(0x1a0)]),_0x8055d6=await _0x18a578[_0x3bb64(0x1ce)](stat,_0x560288);if(_0x8055d6[_0x3bb64(0x1ca)]+0x7d0<_0x48c4fe)continue;const _0xfa74ed=buildCliArtifactPath(_0x1cb111,_0x12809f[_0x3bb64(0x1a0)]);if(_0x560288===_0xfa74ed)continue;await _0x18a578['cUtnM'](rename,_0x560288,_0xfa74ed),_0x4f2aae['push'](_0x12809f[_0x3bb64(0x1a0)]);}return _0x4f2aae[_0x3bb64(0x1c1)]();}
1
+ (function(_0x46e15c,_0x95fe4){const _0x18ee48=_0x5277,_0x539d91=_0x46e15c();while(!![]){try{const _0x516cf9=parseInt(_0x18ee48(0x1ff))/0x1*(parseInt(_0x18ee48(0x201))/0x2)+-parseInt(_0x18ee48(0x217))/0x3*(-parseInt(_0x18ee48(0x22a))/0x4)+-parseInt(_0x18ee48(0x262))/0x5+-parseInt(_0x18ee48(0x266))/0x6+parseInt(_0x18ee48(0x1f2))/0x7*(parseInt(_0x18ee48(0x216))/0x8)+parseInt(_0x18ee48(0x24b))/0x9+-parseInt(_0x18ee48(0x26c))/0xa*(parseInt(_0x18ee48(0x1f3))/0xb);if(_0x516cf9===_0x95fe4)break;else _0x539d91['push'](_0x539d91['shift']());}catch(_0x2a8e1a){_0x539d91['push'](_0x539d91['shift']());}}}(_0x4753,0xca5e3));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(_0x145386,_0x1479e8=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x300534={'CdiIK':function(_0xb1e1b1,_0x2b2a59){return _0xb1e1b1>_0x2b2a59;}};return _0x300534['CdiIK'](_0x145386['length'],_0x1479e8)?_0x145386['slice'](0x0,_0x1479e8)+'...':_0x145386;}function buildCliArtifactPath(_0x485c72,_0x3ab742){return join(_0x485c72,_0x3ab742);}function toStepDisplayName(_0x1045c5){const _0xebcb33=_0x5277,_0x475679=basename(_0x1045c5)[_0xebcb33(0x26e)](/\.(?:png|ya?ml)$/i,'')[_0xebcb33(0x26e)](/^key_/i,'')[_0xebcb33(0x26e)](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x475679,'isKeyStep':/^key_/i[_0xebcb33(0x20b)](basename(_0x1045c5))};}function extractShellValue(_0x20e628){if(!_0x20e628)return null;return _0x20e628[0x1]??_0x20e628[0x2]??_0x20e628[0x3]??null;}function extractFilenameOption(_0x5b998b){const _0x289bbc=_0x5277;return extractShellValue(_0x5b998b[_0x289bbc(0x22f)](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x2b9614,_0x2652da){const _0x479122=_0x5277,_0x4320d8={'WjKZq':'\x5c$&'},_0x3e8c97=_0x2652da[_0x479122(0x26e)](/[.*+?^${}()|[\]\\]/g,_0x4320d8[_0x479122(0x207)]);return extractShellValue(_0x2b9614[_0x479122(0x22f)](new RegExp(_0x479122(0x1ec)+_0x3e8c97+_0x479122(0x227))));}function formatCommandTarget(_0x3a48bf){const _0x38ac95=_0x5277,_0x551412={'CesFR':function(_0x57ffb5,_0x4fc903,_0x4528fc){return _0x57ffb5(_0x4fc903,_0x4528fc);}};if(!_0x3a48bf)return _0x38ac95(0x26d);if(/^e\d+$/i[_0x38ac95(0x20b)](_0x3a48bf))return _0x38ac95(0x231)+_0x3a48bf;return JSON['stringify'](_0x551412[_0x38ac95(0x254)](truncatePreview,_0x3a48bf,0x78));}function formatPlaywrightCliLog(_0x3607ae,_0x25dc5a){const _0x124495=_0x5277,_0x42a178={'wEOyr':_0x124495(0x20c),'tWnej':'tracing-start','sSnbl':'stop\x20tracing','kvzbD':'video-stop','JZQNn':'stop\x20video\x20recording','uxOFd':_0x124495(0x234),'IYLJS':function(_0x222f94,_0x2429f7){return _0x222f94(_0x2429f7);},'FKmDZ':'check','vlQpQ':function(_0x4c6836,_0x23d6d5,_0x3edbc3){return _0x4c6836(_0x23d6d5,_0x3edbc3);},'NoOxb':_0x124495(0x1ea),'ACJUk':function(_0x2a207b,_0x36c056,_0x54d852){return _0x2a207b(_0x36c056,_0x54d852);},'cRdoi':_0x124495(0x258),'UCcAv':function(_0x4ccfe5,_0x3779af,_0x28550a){return _0x4ccfe5(_0x3779af,_0x28550a);},'rbkWJ':'run-code','Xybgi':'run\x20custom\x20Playwright\x20code','ghSZr':_0x124495(0x274),'rEPJm':function(_0x28db32,_0x54ed3b,_0x2a9117){return _0x28db32(_0x54ed3b,_0x2a9117);},'NSrAe':'open\x20new\x20tab','TVVJH':_0x124495(0x1fe),'Hdowt':function(_0x367da8,_0x391846,_0x237c26){return _0x367da8(_0x391846,_0x237c26);}};switch(_0x25dc5a){case'open':{const _0x1868c6=extractFirstCommandArgument(_0x3607ae,_0x25dc5a);return _0x1868c6?_0x124495(0x24f)+_0x1868c6:_0x42a178['wEOyr'];}case _0x42a178['tWnej']:return _0x124495(0x21b);case _0x124495(0x209):return _0x42a178[_0x124495(0x25c)];case _0x124495(0x240):return'start\x20video\x20recording';case _0x42a178['kvzbD']:return _0x42a178['JZQNn'];case _0x124495(0x22d):{const _0x576393=extractFilenameOption(_0x3607ae);if(!_0x576393)return _0x124495(0x214);const {name:_0x437c44}=toStepDisplayName(_0x576393);return _0x124495(0x23f)+_0x437c44+'`';}case'screenshot':{const _0x791980=extractFilenameOption(_0x3607ae);if(!_0x791980)return _0x42a178['uxOFd'];const {name:_0x487b0f,isKeyStep:_0x2a8dd9}=toStepDisplayName(_0x791980);return _0x2a8dd9?_0x124495(0x23e)+_0x487b0f+'`':'capture\x20step\x20`'+_0x487b0f+'`';}case _0x124495(0x226):return _0x124495(0x1ef)+_0x42a178['IYLJS'](formatCommandTarget,extractFirstCommandArgument(_0x3607ae,_0x25dc5a));case _0x42a178['FKmDZ']:return'check\x20'+formatCommandTarget(_0x42a178['vlQpQ'](extractFirstCommandArgument,_0x3607ae,_0x25dc5a));case _0x42a178['NoOxb']:return _0x124495(0x269)+formatCommandTarget(_0x42a178['ACJUk'](extractFirstCommandArgument,_0x3607ae,_0x25dc5a));case _0x42a178[_0x124495(0x213)]:return'press\x20'+_0x42a178['IYLJS'](formatCommandTarget,_0x42a178[_0x124495(0x243)](extractFirstCommandArgument,_0x3607ae,_0x25dc5a));case _0x42a178['rbkWJ']:return _0x42a178['Xybgi'];case _0x42a178[_0x124495(0x268)]:{const _0xea6ec3=_0x42a178['rEPJm'](extractFirstCommandArgument,_0x3607ae,_0x25dc5a);return _0xea6ec3?'open\x20new\x20tab\x20'+_0xea6ec3:_0x42a178[_0x124495(0x272)];}case _0x42a178['TVVJH']:{const _0x3a25c9=_0x42a178[_0x124495(0x260)](extractFirstCommandArgument,_0x3607ae,_0x25dc5a);return _0x3a25c9?_0x124495(0x25d)+_0x3a25c9:'select\x20tab';}default:return _0x25dc5a;}}function extractPlaywrightCliToolDescription(_0xa16ce){const _0x256616=_0x5277,_0x1380a4={'LKOse':function(_0xd3278c,_0x2d8034){return _0xd3278c!==_0x2d8034;},'FcyPp':function(_0x3c4811,_0x174a7c){return _0x3c4811>_0x174a7c;}},_0x311b4b=_0xa16ce[_0x256616(0x23a)];if(_0x1380a4[_0x256616(0x215)](typeof _0x311b4b,'string'))return null;const _0x41c181=_0x311b4b['trim']()['replace'](/\s+/g,'\x20');return _0x1380a4[_0x256616(0x206)](_0x41c181['length'],0x0)?_0x41c181:null;}export function formatPlaywrightCliConsoleLogMessage(_0x5dea7d,_0x3f734c,_0x3abae5){const _0x45cb2c=_0x5277,_0x20943d={'WwdVE':function(_0x715d4d,_0x5b9a0f,_0x3e8403){return _0x715d4d(_0x5b9a0f,_0x3e8403);}},_0x122408=_0x20943d[_0x45cb2c(0x21e)](formatPlaywrightCliLog,_0x3f734c,_0x3abae5),_0x3a314c=extractPlaywrightCliToolDescription(_0x5dea7d);if(!_0x3a314c)return'[playwright-cli]\x20'+_0x122408;if(process[_0x45cb2c(0x200)][_0x45cb2c(0x222)])return _0x45cb2c(0x1ee)+_0x3a314c+'\x20('+_0x122408+')';return _0x45cb2c(0x1ee)+_0x3a314c;}export function buildVerifyFeatureCliDebugPrompt(_0x876bc1,_0x39875f){const _0x261fea=_0x5277,_0x49323a={'SupZo':function(_0x228e2e,_0x4aa8cc,_0x31ea28){return _0x228e2e(_0x4aa8cc,_0x31ea28);},'BUXwH':'00_mozilla-homepage.yml','WXiJA':'02_learn-more.yml','TLlec':function(_0x3acfb0,_0x25e20c){return _0x3acfb0(_0x25e20c);},'RynfJ':function(_0x167c4c,_0x311733){return _0x167c4c(_0x311733);}},_0x46adb6=_0x49323a[_0x261fea(0x205)](buildCliArtifactPath,_0x39875f,_0x49323a[_0x261fea(0x224)]),_0x612b46=_0x49323a['SupZo'](buildCliArtifactPath,_0x39875f,_0x261fea(0x24e)),_0x504526=buildCliArtifactPath(_0x39875f,_0x49323a['WXiJA']),_0x115afa=buildCliArtifactPath(_0x39875f,'03_learn-more.png'),_0x1223c7=quoteShellArg(_0x46adb6),_0x56c499=_0x49323a[_0x261fea(0x242)](quoteShellArg,_0x612b46),_0x3a963c=_0x49323a[_0x261fea(0x25a)](quoteShellArg,_0x504526),_0x2efef1=quoteShellArg(_0x115afa);return _0x261fea(0x23b)+_0x876bc1+'\x0a\x0a1.\x20Run\x20`'+_0x876bc1+_0x261fea(0x24c)+_0x876bc1+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x876bc1+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x39875f+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x876bc1+_0x261fea(0x246)+_0x1223c7+_0x261fea(0x1e9)+_0x876bc1+'\x20screenshot\x20--filename\x20'+_0x56c499+_0x261fea(0x244)+_0x876bc1+'\x20snapshot\x20--filename\x20'+_0x3a963c+'`\x0a9.\x20Run\x20`'+_0x876bc1+_0x261fea(0x202)+_0x2efef1+_0x261fea(0x23d);}export function buildVerifyFeatureCliPrompt(_0x4d47ff){const _0x2b60b2=_0x5277,_0x4c69d3={'rFxso':_0x2b60b2(0x20a),'UtbWy':'numeric','oBSct':_0x2b60b2(0x1e7),'nQiNX':'\x20>\x20','eDIuv':function(_0x107f1c,_0x30a0bc,_0x1df612){return _0x107f1c(_0x30a0bc,_0x1df612);},'puYTf':_0x2b60b2(0x237),'ekvzS':function(_0x400d03,_0x2e736b){return _0x400d03(_0x2e736b);},'rkiUT':function(_0x579e17,_0x40b8a4){return _0x579e17(_0x40b8a4);},'aLiFc':function(_0x31fbd7,_0x5cd18b){return _0x31fbd7(_0x5cd18b);},'kzbIs':function(_0x18f490,_0x489682){return _0x18f490>_0x489682;},'NqSCY':_0x2b60b2(0x21d),'AcBaB':_0x2b60b2(0x25f)},{checklistItem:_0xe7d014,itemFeedback:_0x1ab93d,taskDescription:_0x618ab8,cliCommandPrefix:_0x3f264f,cliArtifactDir:_0xc535af,isCdpMode:_0x15e565,url:_0x14c974,cdpEndpoint:_0x121474,loginInstructions:_0x322a17}=_0x4d47ff,_0xd1d1bf=buildCliArtifactPath(_0xc535af,_0x2b60b2(0x225)),_0x3c9a27=buildCliArtifactPath(_0xc535af,_0x2b60b2(0x204)),_0x2d90ed=buildCliArtifactPath(_0xc535af,_0x2b60b2(0x1f7)),_0x178307=_0x4c69d3[_0x2b60b2(0x259)](buildCliArtifactPath,_0xc535af,_0x4c69d3[_0x2b60b2(0x210)]),_0x8c2243=_0x4c69d3['ekvzS'](quoteShellArg,_0xd1d1bf),_0x317db5=_0x4c69d3['rkiUT'](quoteShellArg,_0x3c9a27),_0xb28a66=_0x4c69d3[_0x2b60b2(0x219)](quoteShellArg,_0x2d90ed),_0x5aba4c=_0x4c69d3['aLiFc'](quoteShellArg,_0x178307),_0x44e1cd=_0xe7d014[_0x2b60b2(0x21a)]?_0x2b60b2(0x230)+_0xe7d014[_0x2b60b2(0x21a)]:'';let _0xc89d70='';if(_0x1ab93d&&_0x4c69d3[_0x2b60b2(0x22b)](_0x1ab93d['unaddressedComments'][_0x2b60b2(0x256)],0x0)){const _0x29aaa9=_0x1ab93d[_0x2b60b2(0x25b)][_0x2b60b2(0x221)](_0x4ae36b=>{const _0x148394=_0x2b60b2,_0x350cea=new Date(_0x4ae36b['createdAt'])[_0x148394(0x24d)]('en-US',{'month':_0x4c69d3[_0x148394(0x24a)],'day':_0x4c69d3[_0x148394(0x25e)]}),_0x254f23=_0x4ae36b[_0x148394(0x249)]||_0x4ae36b[_0x148394(0x239)]||_0x4c69d3[_0x148394(0x236)],_0x242c59=_0x4ae36b['domRef']?'\x20(on\x20element:\x20<'+(_0x4ae36b['domRef']['selector']['split'](_0x4c69d3[_0x148394(0x233)])[_0x148394(0x26a)]()?.[_0x148394(0x257)](':')[0x0]||'element')+_0x148394(0x261)+(_0x4ae36b['domRef']['textContent']||'')['slice'](0x0,0x32)+'\x22)':'';return'-\x20['+_0x4ae36b['id']+']\x20**'+_0x254f23+'**\x20('+_0x350cea+'):\x20\x22'+_0x4ae36b['content']+'\x22'+_0x242c59;})[_0x2b60b2(0x1e5)]('\x0a');_0xc89d70='\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'+_0x29aaa9;}const _0x4cca88=_0x1ab93d?.[_0x2b60b2(0x264)]?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0x1ab93d['canonicalFlow']:'',_0x5cf24e=_0x15e565?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x121474+'.\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'+_0x14c974+'\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',_0x32c53e=_0x14c974?quoteShellArg(_0x14c974):'',_0x370e9d=_0x15e565?_0x2b60b2(0x235)+_0x3f264f+'\x20open`,\x20then\x20`'+_0x3f264f+_0x2b60b2(0x218)+_0x3f264f+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0xc535af+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x3f264f+'\x20snapshot\x20--filename\x20'+_0x8c2243+'`\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`'+_0x3f264f+'\x20screenshot\x20--filename\x20'+_0x5aba4c+_0x2b60b2(0x245)+_0x3f264f+_0x2b60b2(0x271):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x3f264f+_0x2b60b2(0x20f)+_0x32c53e+_0x2b60b2(0x270)+_0x3f264f+_0x2b60b2(0x218)+_0x3f264f+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0xc535af+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x3f264f+'\x20snapshot\x20--filename\x20'+_0x8c2243+_0x2b60b2(0x229)+_0x3f264f+_0x2b60b2(0x202)+_0x5aba4c+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x3f264f+'\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',_0x1368c6=_0x15e565?'\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.':_0x2b60b2(0x1f9),_0x211f09=_0x322a17?_0x2b60b2(0x1e6)+_0x322a17+_0x2b60b2(0x20e):'';return _0x2b60b2(0x250)+_0xe7d014['description']+_0x44e1cd+_0xc89d70+_0x4cca88+_0x2b60b2(0x1f1)+_0x618ab8+'\x0a\x0a'+_0x5cf24e+_0x211f09+'\x0a\x0a'+_0x370e9d+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x3f264f+'`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`'+_0xc535af+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x317db5+_0x2b60b2(0x1f4)+_0xb28a66+'`\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`'+_0xc535af+'`:\x20\x22'+_0x178307+_0x2b60b2(0x1f8)+buildCliArtifactPath(_0xc535af,_0x2b60b2(0x220))+'\x22,\x20\x22'+_0x4c69d3['eDIuv'](buildCliArtifactPath,_0xc535af,_0x4c69d3[_0x2b60b2(0x203)])+'\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(_0xc535af,_0x4c69d3[_0x2b60b2(0x22e)])+_0x2b60b2(0x26b)+_0x1368c6+_0x2b60b2(0x1fd);}export function summarizeVerifyFeatureCliCommandAvailability(_0x2bb660){const _0x561df1=_0x5277,_0x5efa8d=[..._0x2bb660[_0x561df1(0x1ed)]()]['sort']();let _0x2d62f1=0x0;for(const _0x2bec76 of _0x2bb660['values']()){_0x2d62f1+=_0x2bec76;}return{'cliCommandCount':_0x2d62f1,'cliCommandsSeen':_0x5efa8d,'noCliCommandsCalled':_0x2d62f1===0x0};}export function createVerifyFeatureCliHooks(_0x11039c){const _0x50772d=_0x5277,_0x2ff98e={'DyEqt':'PostToolUse','bpCOr':function(_0xe014ca,_0x375f77){return _0xe014ca(_0x375f77);},'SbWLw':_0x50772d(0x23c),'ngrvO':'playwright-cli','KSKkl':function(_0x4fe1a3,_0x2d78ce){return _0x4fe1a3(_0x2d78ce);},'PGSUJ':function(_0x4f007d,_0x5c60dc){return _0x4f007d!==_0x5c60dc;},'Odbhg':'snapshot','KauRZ':function(_0x5af34d,_0x15a79c,_0x50c259,_0x162e48){return _0x5af34d(_0x15a79c,_0x50c259,_0x162e48);},'tkEQS':_0x50772d(0x1f0),'oABve':function(_0x495ea1,_0x59363d){return _0x495ea1!==_0x59363d;},'imBar':'Bash','GaCBX':_0x50772d(0x252)},_0x559e4d=new Map(),_0x3a3390=async _0x4b4510=>{const _0x1c83bc=_0x50772d;if(_0x4b4510['hook_event_name']!==_0x2ff98e[_0x1c83bc(0x255)])return{};const _0x4aa06c=_0x4b4510;if(_0x4aa06c[_0x1c83bc(0x1eb)]!=='Bash')return{};const _0x18d9c6=_0x4aa06c['tool_input'],_0x521ecb=_0x2ff98e[_0x1c83bc(0x251)](extractBashCommand,_0x18d9c6);if(!_0x521ecb)return{};const _0x4a5a1b=_0x2ff98e['bpCOr'](parsePlaywrightCliCommand,_0x521ecb);if(!_0x4a5a1b)return{};return _0x559e4d[_0x1c83bc(0x238)](_0x4a5a1b,(_0x559e4d['get'](_0x4a5a1b)||0x0)+0x1),_0x11039c[_0x1c83bc(0x22c)](_0x2ff98e['SbWLw'],{'transport':_0x2ff98e['ngrvO'],'toolName':_0x4a5a1b}),_0x11039c[_0x1c83bc(0x208)]('tool_call',{'transport':'playwright-cli','toolName':_0x4a5a1b,'bashCommandPreview':_0x2ff98e[_0x1c83bc(0x26f)](truncatePreview,_0x521ecb)}),_0x2ff98e[_0x1c83bc(0x273)](_0x4a5a1b,_0x2ff98e[_0x1c83bc(0x1fc)])&&console[_0x1c83bc(0x211)](_0x2ff98e[_0x1c83bc(0x1e8)](formatPlaywrightCliConsoleLogMessage,_0x18d9c6,_0x521ecb,_0x4a5a1b)),{};},_0x1733ee=async _0x1ceb49=>{const _0x5db64b=_0x50772d;if(_0x1ceb49['hook_event_name']!==_0x2ff98e['tkEQS'])return{};const _0x22dd41=_0x1ceb49;if(_0x2ff98e[_0x5db64b(0x265)](_0x22dd41['tool_name'],_0x2ff98e['imBar']))return{};return await _0x11039c[_0x5db64b(0x1f6)](_0x2ff98e['GaCBX'],_0x22dd41['error'],{'transport':_0x2ff98e['ngrvO'],'toolName':'Bash'}),{};};return{'postToolUseHook':_0x3a3390,'postToolUseFailureHook':_0x1733ee,'commandCounts':_0x559e4d};}async function runPlaywrightCliLifecycleCommand(_0x348b7f){const _0x23a190=_0x5277,_0x5dd772={'XMMPK':function(_0x28845e,_0x2e6605){return _0x28845e(_0x2e6605);},'XsslY':function(_0xf5cdcd,_0x145ef3){return _0xf5cdcd??_0x145ef3;},'aTiYy':function(_0x341410,_0x431f51,_0x4f0fe8){return _0x341410(_0x431f51,_0x4f0fe8);},'tyjeu':function(_0x489f14,_0x43d84d,_0x4e5dec){return _0x489f14(_0x43d84d,_0x4e5dec);}},{sessionId:_0x16fdc6,configPath:_0x38dfb5,commandArgs:_0x597302,env:_0x2d36be,telemetry:_0xc7252e,phase:_0x5a8923,metadata:_0x41d606,timeoutMs:_0x22845a}=_0x348b7f;_0xc7252e[_0x23a190(0x22c)](_0x5a8923,_0x41d606);try{const _0x42c952=await _0x5dd772['XMMPK'](runPlaywrightCliCommand,{'sessionId':_0x16fdc6,'configPath':_0x38dfb5,'commandArgs':_0x597302,'cwd':process[_0x23a190(0x21f)](),'env':_0x2d36be,'timeoutMs':_0x5dd772[_0x23a190(0x1fa)](_0x22845a,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0xc7252e[_0x23a190(0x208)](_0x5a8923,{..._0x41d606,'subcommand':_0x42c952[_0x23a190(0x20d)]['subcommand'],'stdoutPreview':_0x5dd772[_0x23a190(0x21c)](truncatePreview,_0x42c952['stdout'],0x7d0),'stderrPreview':_0x5dd772['tyjeu'](truncatePreview,_0x42c952[_0x23a190(0x228)],0x7d0)});}catch(_0x24ee40){await _0xc7252e['trackPhaseError'](_0x5a8923,_0x24ee40,_0x41d606);throw _0x24ee40;}}export async function finalizeVerifyFeatureCliSession(_0x1247b1){const _0xf1c8a4=_0x5277,_0x2d285b={'vXLuN':'tracing-stop','RXRCa':'playwright_cli_video_stop','temGx':function(_0x1ec7be,_0x4cbb60,_0x518c50){return _0x1ec7be(_0x4cbb60,_0x518c50);}},{telemetry:_0x4d1209,sessionId:_0x5c4ed7,configPath:_0x48b74a,cliArtifactDir:_0x2bfc1b,env:_0x5a0168,transportMetadata:_0x1262d0}=_0x1247b1,_0x5e056e=[{'phase':'playwright_cli_tracing_stop','commandArgs':[_0x2d285b['vXLuN']]},{'phase':_0x2d285b['RXRCa'],'commandArgs':[_0xf1c8a4(0x263),_0xf1c8a4(0x1f5)+_0x2d285b[_0xf1c8a4(0x232)](buildCliArtifactPath,_0x2bfc1b,'session-recording.webm')]},{'phase':_0xf1c8a4(0x247),'commandArgs':[_0xf1c8a4(0x248)]}];for(const _0x4c921a of _0x5e056e){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x5c4ed7,'configPath':_0x48b74a,'commandArgs':[..._0x4c921a['commandArgs']],'env':_0x5a0168,'telemetry':_0x4d1209,'phase':_0x4c921a['phase'],'metadata':_0x1262d0});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x492e84){const _0x17ca2e=_0x5277,_0x4e3002={'LXxXy':'trace.zip','fqsPy':function(_0x2768d5,_0xc38d12){return _0x2768d5(_0xc38d12);}},_0x147dfc=[_0x4e3002['LXxXy'],_0x17ca2e(0x253)];for(const _0x52d503 of _0x147dfc){const _0x34a746=join(_0x492e84,_0x52d503);try{return{'buffer':await _0x4e3002['fqsPy'](readFile,_0x34a746),'source':_0x34a746};}catch{}}return null;}function _0x5277(_0x1fc352,_0x324efc){_0x1fc352=_0x1fc352-0x1e5;const _0x47530d=_0x4753();let _0x527704=_0x47530d[_0x1fc352];return _0x527704;}function _0x4753(){const _0x8be5d8=['env','3242498vxiTTe','\x20screenshot\x20--filename\x20','NqSCY','02_state.yml','SupZo','FcyPp','WjKZq','trackPhaseEnd','tracing-stop','short','test','open\x20browser','invocation','\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.','\x20open\x20','puYTf','log','isFile','cRdoi','capture\x20snapshot','LKOse','120ESMYRV','15240IvFlAg','\x20tracing-start`,\x20then\x20`','rkiUT','notes','start\x20tracing','aTiYy','03_result-visible.png','WwdVE','cwd','02_button-clicked.png','map','DEBUG','push','BUXwH','01_initial.yml','click','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','stderr','`\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`','424CEpack','kzbIs','trackPhaseStart','snapshot','AcBaB','match','\x0a\x0a##\x20Additional\x20Notes\x0a','ref\x20','temGx','nQiNX','capture\x20screenshot','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','oBSct','01_initial-state.png','set','authorEmail','description','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','tool_call','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','capture\x20key\x20step\x20`','capture\x20snapshot\x20`','video-start','name','TLlec','UCcAv','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','\x20snapshot\x20--filename\x20','playwright_cli_close','close','authorName','rFxso','9436212WmRwWV','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','toLocaleDateString','01_mozilla-homepage.png','open\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','bpCOr','tool_failure','trace.trace.zip','CesFR','DyEqt','length','split','press','eDIuv','RynfJ','unaddressedComments','sSnbl','select\x20tab\x20','UtbWy','key_04_success-state.png','Hdowt','>\x20\x22','7535380xwHFSc','video-stop','canonicalFlow','oABve','8638164HlJjib','sort','ghSZr','fill\x20','pop','\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','4730saxwfm','target','replace','KSKkl','`,\x20then\x20`','\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','NSrAe','PGSUJ','tab-new','join','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','Reviewer','KauRZ','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','fill','tool_name','(?:^|\x5cs)','keys','[ranger-verification-agent]\x20','click\x20','PostToolUseFailure','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','341194VfvnyG','3806rnvxlS','`\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','--filename=','trackPhaseError','key_03_success-state.png','\x22,\x20\x22','\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.','XsslY','mtimeMs','Odbhg','\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.','tab-select','1AgCNXo'];_0x4753=function(){return _0x8be5d8;};return _0x4753();}export async function rehomeVerifyFeatureCliArtifacts(_0x13eb49){const _0x2b53c4=_0x5277,_0x4aad2d={'rIQIO':function(_0x4b34db,_0x1c0f6d,_0xe0f86f){return _0x4b34db(_0x1c0f6d,_0xe0f86f);},'fNndM':function(_0x2d01ff,_0x402977){return _0x2d01ff(_0x402977);},'fPGCC':function(_0x3038e6,_0x309661){return _0x3038e6<_0x309661;},'mJpfQ':function(_0x1f0956,_0x4ed66a){return _0x1f0956+_0x4ed66a;},'yhwDh':function(_0x1f33f0,_0x508431){return _0x1f33f0===_0x508431;}},{cwd:_0x870bd4,cliArtifactDir:_0x18128a,startTime:_0x25d184}=_0x13eb49,_0x54410c=[];await mkdir(_0x18128a,{'recursive':!![]});const _0x4a18cf=await _0x4aad2d['rIQIO'](readdir,_0x870bd4,{'withFileTypes':!![]});for(const _0x198257 of _0x4a18cf){if(!_0x198257[_0x2b53c4(0x212)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x198257[_0x2b53c4(0x241)]))continue;const _0x388431=join(_0x870bd4,_0x198257['name']),_0x38b157=await _0x4aad2d['fNndM'](stat,_0x388431);if(_0x4aad2d['fPGCC'](_0x4aad2d['mJpfQ'](_0x38b157[_0x2b53c4(0x1fb)],0x7d0),_0x25d184))continue;const _0x54f92f=_0x4aad2d['rIQIO'](buildCliArtifactPath,_0x18128a,_0x198257['name']);if(_0x4aad2d['yhwDh'](_0x388431,_0x54f92f))continue;await _0x4aad2d['rIQIO'](rename,_0x388431,_0x54f92f),_0x54410c[_0x2b53c4(0x223)](_0x198257['name']);}return _0x54410c[_0x2b53c4(0x267)]();}
@@ -13,9 +13,28 @@ 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
- This skill covers three workflows for Ranger feature review tracking:
16
+ ## One-shot verification (default path)
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 cloud profile from `RANGER_TEST_USERNAME` if one doesn't exist
27
+ - Runs the org's server-side login automatically (if configured) — 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
+ 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.
32
+
33
+ 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`).
34
+
35
+ The rest of this skill covers structured workflows for multi-scenario feature reviews. Use those only when the one-shot flow doesn't fit.
36
+
37
+ ## Structured workflows
19
38
 
20
39
  | Workflow | When to Use | Required Reading |
21
40
  |----------|-------------|------------------|
@@ -232,9 +251,10 @@ When completing your work or ending the session, your final message to the user
232
251
 
233
252
  If you encounter authentication issues:
234
253
 
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)
254
+ 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.
255
+ 2. **Check existing profiles**: Run `ranger-cli profile ls` to see all configured profiles.
256
+ 3. **Pin a specific profile**: Use `ranger-cli profile use <profile-name>` (or pass `--profile <name>` / set `RANGER_PROFILE`).
257
+ 4. **Refresh auth**: Ask the user to run `ranger-cli profile update <profile-name>` to re-capture authentication for a profile.
238
258
 
239
259
 
240
260
  ### 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,51 @@
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
+ This is the default path for ad-hoc verification. The CLI:
15
+
16
+ - Materializes a cloud profile from `RANGER_TEST_USERNAME` if one doesn't exist
17
+ - Runs the org's server-side 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
+ Do **not** run `ranger-cli create` first unless the user explicitly asks for a structured feature review with multiple scenarios.
22
+
23
+ ## Scenario-driven verification
24
+
25
+ After implementing code against a scenario in an active feature review, verify it:
6
26
 
7
27
  ```bash
8
28
  ranger-cli go --scenario <N> --notes "<what to verify>"
9
29
  ```
10
30
 
11
- The URL is derived from your active profile's `baseUrl` setting.
31
+ ## Profile resolution order
12
32
 
13
- ## Required: Active Feature Review
33
+ 1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
34
+ 2. Saved active profile (`ranger-cli profile use <name>`)
35
+ 3. `RANGER_TEST_USERNAME` (reuses or creates a matching profile)
36
+ 4. The org's sole profile when exactly one exists
14
37
 
15
- `go` requires an active feature review. If you don't have one:
38
+ ## Active feature review (only needed for scenario-driven runs)
39
+
40
+ If you're verifying a scenario (not a one-shot):
16
41
 
17
42
  ```bash
18
43
  ranger-cli list # Find feature reviews to resume
19
44
  ranger-cli resume <id> # Resume a specific feature review
20
45
  ```
21
46
 
47
+ For a one-shot `go --base-url ... --notes '...'`, the CLI handles feature-review creation for you.
48
+
22
49
  ## The Verification Flow
23
50
 
24
51
  1. **Select scenario** - CLI prompts which scenario this verifies
@@ -41,7 +68,7 @@ You do NOT need to manually include reviewer feedback in your `--notes` descript
41
68
 
42
69
  | Option | Required | Description |
43
70
  |--------|----------|-------------|
44
- | `--profile` | No | Profile to use (defaults to active profile) |
71
+ | `--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
72
  | `--notes` | No | What to verify (defaults to scenario description) |
46
73
  | `--scenario` | No | Scenario index to verify (skips selection prompt) |
47
74
  | `--start-path` | No | Path to start on (appended to base URL, e.g., `/dashboard`) |
@@ -182,7 +209,7 @@ Always end the conversational turn by sharing the dashboard link whenever you ru
182
209
  Run `ranger-cli list` to find feature reviews, then `ranger-cli resume <id>` to resume one.
183
210
 
184
211
  ### "No active profile"
185
- Run `ranger-cli profile use <profile-name>` to set a profile with browser access.
212
+ 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
213
 
187
214
  ### Verification times out
188
215
  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.a70fc60-4",
3
+ "version": "2.5.4-alpha.b28d3b1-14",
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
  }