@ranger-testing/ranger-cli 2.5.4-alpha.bc88254-5 → 2.5.4-alpha.f4657dc-23

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 (83) 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/deleteProfile.js +1 -0
  8. package/build/commands/env.js +1 -1
  9. package/build/commands/feature.js +1 -1
  10. package/build/commands/hook.js +1 -1
  11. package/build/commands/hooks/autoPrompt.js +1 -1
  12. package/build/commands/hooks/disable.js +1 -1
  13. package/build/commands/hooks/enable.js +1 -1
  14. package/build/commands/hooks/exitPlanMode.js +1 -1
  15. package/build/commands/hooks/index.js +1 -1
  16. package/build/commands/hooks/output.js +1 -1
  17. package/build/commands/hooks/planReminder.js +1 -1
  18. package/build/commands/hooks/planStart.js +1 -1
  19. package/build/commands/hooks/postEdit.js +1 -1
  20. package/build/commands/hooks/preCompact.js +1 -1
  21. package/build/commands/hooks/sessionEnd.js +1 -1
  22. package/build/commands/hooks/sessionStart.js +1 -1
  23. package/build/commands/hooks/stopHook.js +1 -1
  24. package/build/commands/index.js +1 -1
  25. package/build/commands/login.js +1 -1
  26. package/build/commands/mcpBootstrap.js +1 -1
  27. package/build/commands/migrateProfile.js +1 -1
  28. package/build/commands/setup/claude.js +1 -1
  29. package/build/commands/setup/opencode.js +1 -1
  30. package/build/commands/setupCi.js +1 -1
  31. package/build/commands/skillup.js +1 -1
  32. package/build/commands/start.js +1 -1
  33. package/build/commands/status.js +1 -1
  34. package/build/commands/update.js +1 -1
  35. package/build/commands/updateEnv.js +1 -1
  36. package/build/commands/useEnv.js +1 -1
  37. package/build/commands/utils/activeProfile.js +1 -1
  38. package/build/commands/utils/agentEnv.js +1 -1
  39. package/build/commands/utils/browserSessionsApi.js +1 -1
  40. package/build/commands/utils/claudeConfig.js +1 -1
  41. package/build/commands/utils/claudeOverrideSettings.js +1 -1
  42. package/build/commands/utils/claudePlugin.js +1 -1
  43. package/build/commands/utils/cloudProfile.js +1 -1
  44. package/build/commands/utils/cloudProfileSession.js +1 -1
  45. package/build/commands/utils/crypto.js +1 -1
  46. package/build/commands/utils/desirePathLog.js +1 -1
  47. package/build/commands/utils/deviceAuth.js +1 -1
  48. package/build/commands/utils/environment.js +1 -1
  49. package/build/commands/utils/featureApi.js +1 -1
  50. package/build/commands/utils/fixWebmDuration.js +1 -1
  51. package/build/commands/utils/gitTracked.js +1 -1
  52. package/build/commands/utils/keychain.js +1 -1
  53. package/build/commands/utils/legacyWarning.js +1 -0
  54. package/build/commands/utils/localAgentInstallationsApi.js +1 -1
  55. package/build/commands/utils/matchAuthEnvironment.js +1 -1
  56. package/build/commands/utils/mcpImageBase64.js +1 -1
  57. package/build/commands/utils/model.js +1 -1
  58. package/build/commands/utils/opencodeConfig.js +1 -1
  59. package/build/commands/utils/playwrightCli.js +1 -1
  60. package/build/commands/utils/profileMessages.js +1 -1
  61. package/build/commands/utils/profileSetupBanner.js +1 -1
  62. package/build/commands/utils/projectsConfig.js +1 -1
  63. package/build/commands/utils/rangerConfig.js +1 -1
  64. package/build/commands/utils/rangerRoot.js +1 -1
  65. package/build/commands/utils/resolveProfileContext.js +1 -1
  66. package/build/commands/utils/resolveProfileUrl.js +1 -1
  67. package/build/commands/utils/retry.js +1 -1
  68. package/build/commands/utils/sessionCache.js +1 -1
  69. package/build/commands/utils/settings.js +1 -1
  70. package/build/commands/utils/skillContent.js +1 -1
  71. package/build/commands/utils/skills.js +1 -1
  72. package/build/commands/utils/stitchWebmFiles.js +1 -1
  73. package/build/commands/utils/telemetry.js +1 -1
  74. package/build/commands/utils/tokenRefresh.js +1 -1
  75. package/build/commands/utils/traceSnapshotMapper.js +1 -1
  76. package/build/commands/utils/userApi.js +1 -1
  77. package/build/commands/utils/version.js +1 -1
  78. package/build/commands/verifyFeature.js +1 -1
  79. package/build/commands/verifyFeatureCli.js +1 -1
  80. package/build/skills/ranger/SKILL.md +35 -6
  81. package/build/skills/ranger/create.md +19 -0
  82. package/build/skills/ranger/verify.md +42 -15
  83. package/package.json +3 -2
@@ -1 +1 @@
1
- (function(_0x4bc1e1,_0x4e485b){const _0x444ab6=_0x3644,_0x957365=_0x4bc1e1();while(!![]){try{const _0x1086d8=parseInt(_0x444ab6(0x12a))/0x1*(-parseInt(_0x444ab6(0x147))/0x2)+parseInt(_0x444ab6(0x165))/0x3*(-parseInt(_0x444ab6(0x148))/0x4)+-parseInt(_0x444ab6(0x11a))/0x5+-parseInt(_0x444ab6(0x116))/0x6+-parseInt(_0x444ab6(0x14c))/0x7*(parseInt(_0x444ab6(0x102))/0x8)+-parseInt(_0x444ab6(0x11d))/0x9*(-parseInt(_0x444ab6(0x152))/0xa)+parseInt(_0x444ab6(0x17d))/0xb;if(_0x1086d8===_0x4e485b)break;else _0x957365['push'](_0x957365['shift']());}catch(_0x139e8e){_0x957365['push'](_0x957365['shift']());}}}(_0x167e,0xf414b));import{mkdir,readFile,readdir,rename,stat}from'fs/promises';import{basename,join}from'path';function _0x3644(_0x33691e,_0x30a321){_0x33691e=_0x33691e-0xe4;const _0x167e11=_0x167e();let _0x36447d=_0x167e11[_0x33691e];return _0x36447d;}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(_0x354021,_0x1cc011=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x7a5207=_0x3644,_0x38502c={'DNctC':function(_0x4a2166,_0x5e5009){return _0x4a2166+_0x5e5009;}};return _0x354021['length']>_0x1cc011?_0x38502c[_0x7a5207(0xed)](_0x354021['slice'](0x0,_0x1cc011),_0x7a5207(0x11f)):_0x354021;}function buildCliArtifactPath(_0xddb2d,_0x4e3dc7){return join(_0xddb2d,_0x4e3dc7);}function toStepDisplayName(_0x5d7d77){const _0x404a39=_0x3644,_0x465988={'BhVJw':function(_0x3f3a78,_0x3e26bd){return _0x3f3a78(_0x3e26bd);}},_0x58be9e=basename(_0x5d7d77)['replace'](/\.(?:png|ya?ml)$/i,'')[_0x404a39(0x130)](/^key_/i,'')['replace'](/^\d+_/,'')[_0x404a39(0x130)](/-/g,'\x20');return{'name':_0x58be9e,'isKeyStep':/^key_/i[_0x404a39(0x14d)](_0x465988['BhVJw'](basename,_0x5d7d77))};}function extractShellValue(_0x62d049){if(!_0x62d049)return null;return _0x62d049[0x1]??_0x62d049[0x2]??_0x62d049[0x3]??null;}function extractFilenameOption(_0x50f5b5){const _0x54f46b={'ZTzij':function(_0x299179,_0x429f01){return _0x299179(_0x429f01);}};return _0x54f46b['ZTzij'](extractShellValue,_0x50f5b5['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x2f5831,_0x2d55b1){const _0x410ee4=_0x3644,_0x114340=_0x2d55b1['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&');return extractShellValue(_0x2f5831['match'](new RegExp('(?:^|\x5cs)'+_0x114340+_0x410ee4(0x111))));}function formatCommandTarget(_0x49f17f){const _0x3d0356=_0x3644,_0x10ac70={'iodXS':function(_0xbeef1b,_0x502d6c,_0x44b4ca){return _0xbeef1b(_0x502d6c,_0x44b4ca);}};if(!_0x49f17f)return'target';if(/^e\d+$/i['test'](_0x49f17f))return'ref\x20'+_0x49f17f;return JSON[_0x3d0356(0xe8)](_0x10ac70['iodXS'](truncatePreview,_0x49f17f,0x78));}function _0x167e(){const _0x3b9a32=['yUsda','video-stop','DEBUG','bgZth','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','unaddressedComments','set','01_initial-state.png','nOQPM','402632RRXsya','playwright_cli_close','xugfA','tool_name','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','tracing-stop','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','run-code','\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','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','[ranger-verification-agent]\x20','fill\x20','press','QmGKY','capture\x20step\x20`','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','PoAzr','BlDTJ','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','7451544ohxdHc','`\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`','oRwaV','NSqLr','1609775xIcMQX','values','pWtFA','9zIZTeC','length','...','capture\x20snapshot','en-US','kyaWZ','BHXhS','toLocaleDateString','selector','01_initial.yml','02_state.yml','\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','key_04_success-state.png','752yrFqJV','pop','\x20screenshot\x20--filename\x20','textContent','hrDkL','screenshot','replace','get','ZKRHp','mlvWO','split','\x20snapshot\x20--filename\x20','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','XUPKn','MEjif','`\x0a9.\x20Run\x20`','fRKIq','session-recording.webm','\x0a\x0a##\x20Task\x20to\x20Execute\x0a',']\x20**','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','`\x0a-\x20`run-code\x20\x22await\x20page.waitForTimeout(1000)\x22`\x20for\x20waits\x20or\x20small\x20custom\x20checks\x0a\x0a##\x20Screenshot\x20Guidelines\x20-\x20IMPORTANT\x0aTake\x20screenshots\x20throughout\x20the\x20verification\x20flow\x20so\x20a\x20human\x20can\x20review\x20it\x20for\x20completeness.\x20Screenshots\x20are\x20your\x20evidence\x20trail.\x0a\x0a**When\x20to\x20take\x20screenshots\x20(use\x20Playwright\x20CLI\x20screenshot):**\x0a-\x20After\x20the\x20initial\x20snapshot\x20(capture\x20starting\x20state)\x0a-\x20Before\x20and\x20after\x20clicking\x20buttons\x20or\x20submitting\x20forms\x0a-\x20When\x20important\x20UI\x20elements\x20appear\x20(modals,\x20notifications,\x20loading\x20states)\x0a-\x20After\x20navigating\x20to\x20different\x20views\x20or\x20pages\x0a-\x20When\x20verifying\x20specific\x20elements\x20exist\x0a-\x20At\x20the\x20final\x20state\x20showing\x20the\x20completed\x20action\x0a\x0a**Screenshot\x20naming:**\x0a-\x20Use\x20descriptive\x20filenames\x20under\x20`','PostToolUseFailure','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','hook_event_name','\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','snapshot','**\x20(','name','1682AHofRf','236PRLUBT','CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20','QavPs','playwright_cli_video_stop','203bTVZjL','test','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','dIsua','stderr','10510790UNGOiv','rjyhH','stdout','click\x20','phase','open\x20','numeric','feclK','trackPhaseEnd','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','gWyki','`:\x20\x22','check','stop\x20video\x20recording','tool_input','BOUIS','subcommand','`\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','\x0a\x0a##\x20Additional\x20Notes\x0a','77955pKWyof','mgIcw','BRZyF','03_result-visible.png','PQyXc','content','isFile','03_learn-more.png','eZEFI','>\x20\x22','\x0a\x0a1.\x20Run\x20`','\x20tracing-start`,\x20then\x20`','trackPhaseStart','short','QSZtP','NVNYC','MocbO','video-start','fill','trim','open\x20browser','PHwgC','flnHR','select\x20tab','56514073GvVtRe','string','domRef','start\x20tracing','env','stringify','FZqZc','CqKWz','notes','playwright-cli','DNctC','open\x20new\x20tab\x20','authorEmail','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','ztzeW','hoUWc','canonicalFlow','AcldB','sort','authorName','uWWDC','tool_failure'];_0x167e=function(){return _0x3b9a32;};return _0x167e();}function formatPlaywrightCliLog(_0x4dafb5,_0x5df9cd){const _0x59480c=_0x3644,_0x269dc3={'PHwgC':'open','FZqZc':function(_0x26b036,_0x490ba3,_0x2959d5){return _0x26b036(_0x490ba3,_0x2959d5);},'VpmCG':_0x59480c(0x179),'fRKIq':_0x59480c(0xe6),'eCIqN':_0x59480c(0x107),'pJOEj':'stop\x20tracing','PQyXc':_0x59480c(0x176),'tXoTN':function(_0x3aef19,_0x3168f1){return _0x3aef19(_0x3168f1);},'gWyki':_0x59480c(0x12f),'feclK':function(_0x4b0a59,_0x53f45e){return _0x4b0a59(_0x53f45e);},'flnHR':'capture\x20screenshot','CqKWz':'click','paAxv':function(_0x3f6a4b,_0x12b629,_0xc19a7e){return _0x3f6a4b(_0x12b629,_0xc19a7e);},'eAlTq':function(_0x2ebf45,_0x3dac5f){return _0x2ebf45(_0x3dac5f);},'hdSwk':function(_0x542545,_0x32d451){return _0x542545(_0x32d451);},'QavPs':_0x59480c(0x10e),'QmGKY':_0x59480c(0x109),'dIsua':'run\x20custom\x20Playwright\x20code','ztzeW':'tab-select','NVNYC':_0x59480c(0x17c)};switch(_0x5df9cd){case _0x269dc3[_0x59480c(0x17a)]:{const _0x1ce41d=_0x269dc3['FZqZc'](extractFirstCommandArgument,_0x4dafb5,_0x5df9cd);return _0x1ce41d?_0x59480c(0x157)+_0x1ce41d:_0x269dc3['VpmCG'];}case'tracing-start':return _0x269dc3[_0x59480c(0x13a)];case _0x269dc3['eCIqN']:return _0x269dc3['pJOEj'];case _0x269dc3[_0x59480c(0x169)]:return'start\x20video\x20recording';case _0x59480c(0xfa):return _0x59480c(0x15f);case _0x59480c(0x144):{const _0x5b8fb3=extractFilenameOption(_0x4dafb5);if(!_0x5b8fb3)return _0x59480c(0x120);const {name:_0x188328}=_0x269dc3['tXoTN'](toStepDisplayName,_0x5b8fb3);return'capture\x20snapshot\x20`'+_0x188328+'`';}case _0x269dc3[_0x59480c(0x15c)]:{const _0xefd6c6=_0x269dc3['feclK'](extractFilenameOption,_0x4dafb5);if(!_0xefd6c6)return _0x269dc3[_0x59480c(0x17b)];const {name:_0x4fb85a,isKeyStep:_0x510974}=_0x269dc3['tXoTN'](toStepDisplayName,_0xefd6c6);return _0x510974?'capture\x20key\x20step\x20`'+_0x4fb85a+'`':_0x59480c(0x110)+_0x4fb85a+'`';}case _0x269dc3[_0x59480c(0xea)]:return _0x59480c(0x155)+_0x269dc3[_0x59480c(0x159)](formatCommandTarget,_0x269dc3['paAxv'](extractFirstCommandArgument,_0x4dafb5,_0x5df9cd));case _0x59480c(0x15e):return'check\x20'+_0x269dc3['eAlTq'](formatCommandTarget,_0x269dc3[_0x59480c(0xe9)](extractFirstCommandArgument,_0x4dafb5,_0x5df9cd));case _0x59480c(0x177):return _0x59480c(0x10d)+_0x269dc3['hdSwk'](formatCommandTarget,extractFirstCommandArgument(_0x4dafb5,_0x5df9cd));case _0x269dc3[_0x59480c(0x14a)]:return'press\x20'+formatCommandTarget(extractFirstCommandArgument(_0x4dafb5,_0x5df9cd));case _0x269dc3[_0x59480c(0x10f)]:return _0x269dc3[_0x59480c(0x150)];case'tab-new':{const _0x35ea63=_0x269dc3[_0x59480c(0xe9)](extractFirstCommandArgument,_0x4dafb5,_0x5df9cd);return _0x35ea63?_0x59480c(0xee)+_0x35ea63:'open\x20new\x20tab';}case _0x269dc3[_0x59480c(0xf1)]:{const _0x30b499=extractFirstCommandArgument(_0x4dafb5,_0x5df9cd);return _0x30b499?'select\x20tab\x20'+_0x30b499:_0x269dc3[_0x59480c(0x174)];}default:return _0x5df9cd;}}function extractPlaywrightCliToolDescription(_0x5183ee){const _0x4deb6e=_0x3644,_0x450996=_0x5183ee['description'];if(typeof _0x450996!==_0x4deb6e(0xe4))return null;const _0x352c54=_0x450996[_0x4deb6e(0x178)]()['replace'](/\s+/g,'\x20');return _0x352c54['length']>0x0?_0x352c54:null;}export function formatPlaywrightCliConsoleLogMessage(_0x3f9c38,_0x135e72,_0x24b866){const _0x5efba6=_0x3644,_0x2c720d={'XUPKn':function(_0x5c6ea6,_0x3bad68,_0x18e63c){return _0x5c6ea6(_0x3bad68,_0x18e63c);},'HXxZF':function(_0x480a90,_0x5d1ba2){return _0x480a90(_0x5d1ba2);}},_0x5f3dbb=_0x2c720d[_0x5efba6(0x137)](formatPlaywrightCliLog,_0x135e72,_0x24b866),_0x3aadcc=_0x2c720d['HXxZF'](extractPlaywrightCliToolDescription,_0x3f9c38);if(!_0x3aadcc)return'[playwright-cli]\x20'+_0x5f3dbb;if(process[_0x5efba6(0xe7)][_0x5efba6(0xfb)])return'[ranger-verification-agent]\x20'+_0x3aadcc+'\x20('+_0x5f3dbb+')';return _0x5efba6(0x10c)+_0x3aadcc;}export function buildVerifyFeatureCliDebugPrompt(_0x4d3583,_0x2f5326){const _0xf9184e=_0x3644,_0x1537b5={'uWWDC':function(_0x44ddf9,_0x22500b,_0x479d9b){return _0x44ddf9(_0x22500b,_0x479d9b);},'oRwaV':'01_mozilla-homepage.png','mgIcw':function(_0x4404c7,_0x4daf96,_0x50a816){return _0x4404c7(_0x4daf96,_0x50a816);},'VQThF':'02_learn-more.yml','rjyhH':function(_0x2a1017,_0x3c4009){return _0x2a1017(_0x3c4009);},'nOQPM':function(_0x4c6c0e,_0x4e221f){return _0x4c6c0e(_0x4e221f);}},_0x5b89b9=_0x1537b5['uWWDC'](buildCliArtifactPath,_0x2f5326,'00_mozilla-homepage.yml'),_0x531b43=_0x1537b5[_0xf9184e(0xf7)](buildCliArtifactPath,_0x2f5326,_0x1537b5[_0xf9184e(0x118)]),_0x454248=_0x1537b5['mgIcw'](buildCliArtifactPath,_0x2f5326,_0x1537b5['VQThF']),_0x508ef0=_0x1537b5[_0xf9184e(0x166)](buildCliArtifactPath,_0x2f5326,_0xf9184e(0x16c)),_0x140c90=_0x1537b5['rjyhH'](quoteShellArg,_0x5b89b9),_0x58a91d=quoteShellArg(_0x531b43),_0x577242=_0x1537b5[_0xf9184e(0x153)](quoteShellArg,_0x454248),_0x23a088=_0x1537b5[_0xf9184e(0x101)](quoteShellArg,_0x508ef0);return _0xf9184e(0x14e)+_0x4d3583+_0xf9184e(0x16f)+_0x4d3583+_0xf9184e(0x10b)+_0x4d3583+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x4d3583+_0xf9184e(0x136)+_0x2f5326+_0xf9184e(0x108)+_0x4d3583+_0xf9184e(0x135)+_0x140c90+_0xf9184e(0x115)+_0x4d3583+'\x20screenshot\x20--filename\x20'+_0x58a91d+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x4d3583+'\x20snapshot\x20--filename\x20'+_0x577242+_0xf9184e(0x139)+_0x4d3583+_0xf9184e(0x12c)+_0x23a088+_0xf9184e(0x106);}export function buildVerifyFeatureCliPrompt(_0x2b748d){const _0x4d1e7c=_0x3644,_0xcd50f2={'pWtFA':_0x4d1e7c(0x121),'BlDTJ':_0x4d1e7c(0x158),'QKdVl':'Reviewer','pjoIA':'element','ZKRHp':function(_0x57c18e,_0x5d6883,_0x5625ed){return _0x57c18e(_0x5d6883,_0x5625ed);},'xykbD':function(_0x509fcc,_0x3f55cf,_0x9726bb){return _0x509fcc(_0x3f55cf,_0x9726bb);},'MocbO':_0x4d1e7c(0x100),'AcldB':function(_0x3f84d4,_0x4ae09f){return _0x3f84d4(_0x4ae09f);},'mlvWO':'02_button-clicked.png','leMSl':_0x4d1e7c(0x129)},{checklistItem:_0x21f881,itemFeedback:_0x714aa4,taskDescription:_0xcab1fc,cliCommandPrefix:_0x537d88,cliArtifactDir:_0x16b3e7,isCdpMode:_0x42abda,url:_0x525359,cdpEndpoint:_0x299f55,loginInstructions:_0x384b63}=_0x2b748d,_0x41f00f=_0xcd50f2['ZKRHp'](buildCliArtifactPath,_0x16b3e7,_0x4d1e7c(0x126)),_0x21677e=_0xcd50f2[_0x4d1e7c(0x132)](buildCliArtifactPath,_0x16b3e7,_0x4d1e7c(0x127)),_0x53f1ef=buildCliArtifactPath(_0x16b3e7,'key_03_success-state.png'),_0x5d5029=_0xcd50f2['xykbD'](buildCliArtifactPath,_0x16b3e7,_0xcd50f2[_0x4d1e7c(0x175)]),_0x16c6bd=_0xcd50f2[_0x4d1e7c(0xf4)](quoteShellArg,_0x41f00f),_0xf23031=_0xcd50f2[_0x4d1e7c(0xf4)](quoteShellArg,_0x21677e),_0x93284=quoteShellArg(_0x53f1ef),_0x51640e=quoteShellArg(_0x5d5029),_0xd76dae=_0x21f881[_0x4d1e7c(0xeb)]?_0x4d1e7c(0x164)+_0x21f881[_0x4d1e7c(0xeb)]:'';let _0x449bbd='';if(_0x714aa4&&_0x714aa4[_0x4d1e7c(0xfe)][_0x4d1e7c(0x11e)]>0x0){const _0x235d92=_0x714aa4['unaddressedComments']['map'](_0x1441de=>{const _0x484c19=_0x4d1e7c,_0x476d99=new Date(_0x1441de['createdAt'])[_0x484c19(0x124)](_0xcd50f2[_0x484c19(0x11c)],{'month':_0x484c19(0x172),'day':_0xcd50f2[_0x484c19(0x114)]}),_0x4d4411=_0x1441de[_0x484c19(0xf6)]||_0x1441de[_0x484c19(0xef)]||_0xcd50f2['QKdVl'],_0x208cff=_0x1441de[_0x484c19(0xe5)]?'\x20(on\x20element:\x20<'+(_0x1441de['domRef'][_0x484c19(0x125)][_0x484c19(0x134)]('\x20>\x20')[_0x484c19(0x12b)]()?.[_0x484c19(0x134)](':')[0x0]||_0xcd50f2['pjoIA'])+_0x484c19(0x16e)+(_0x1441de['domRef'][_0x484c19(0x12d)]||'')['slice'](0x0,0x32)+'\x22)':'';return'-\x20['+_0x1441de['id']+_0x484c19(0x13d)+_0x4d4411+_0x484c19(0x145)+_0x476d99+'):\x20\x22'+_0x1441de[_0x484c19(0x16a)]+'\x22'+_0x208cff;})['join']('\x0a');_0x449bbd='\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'+_0x235d92;}const _0x4beac1=_0x714aa4?.[_0x4d1e7c(0xf3)]?_0x4d1e7c(0x14f)+_0x714aa4['canonicalFlow']:'',_0x3e6992=_0x42abda?_0x4d1e7c(0x13e)+_0x299f55+'.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.':_0x4d1e7c(0x149)+_0x525359+'\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',_0x57a1ee=_0x525359?quoteShellArg(_0x525359):'',_0x3dff35=_0x42abda?_0x4d1e7c(0xfd)+_0x537d88+'\x20open`,\x20then\x20`'+_0x537d88+'\x20tracing-start`,\x20then\x20`'+_0x537d88+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x16b3e7+_0x4d1e7c(0x15b)+_0x537d88+'\x20snapshot\x20--filename\x20'+_0x16c6bd+'`\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`'+_0x537d88+_0x4d1e7c(0x12c)+_0x51640e+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x537d88+_0x4d1e7c(0x128):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x537d88+'\x20open\x20'+_0x57a1ee+'`,\x20then\x20`'+_0x537d88+_0x4d1e7c(0x170)+_0x537d88+_0x4d1e7c(0xf0)+_0x16b3e7+_0x4d1e7c(0x15b)+_0x537d88+_0x4d1e7c(0x135)+_0x16c6bd+_0x4d1e7c(0x117)+_0x537d88+_0x4d1e7c(0x12c)+_0x51640e+_0x4d1e7c(0x141)+_0x537d88+_0x4d1e7c(0x10a),_0x3949b2=_0x42abda?'\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20taking\x20the\x20initial\x20snapshot,\x20IMMEDIATELY\x20check\x20for\x20blocking\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20Crash\x20or\x20error\x20dialogs\x20(\x22An\x20error\x20occurred\x22,\x20\x22Something\x20went\x20wrong\x22,\x20unhandled\x20exception\x20messages)\x0a-\x20Blank\x20or\x20empty\x20window\x20with\x20no\x20rendered\x20content\x0a-\x20Framework\x20error\x20boundaries\x20(React\x20error\x20page,\x20Electron\x20crash\x20reporter)\x0a-\x20Unresponsive\x20or\x20frozen\x20UI\x20(no\x20interactive\x20elements\x20in\x20snapshot)\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22App\x20crashed\x20—\x20error\x20dialog\x20visible\x20on\x20launch\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20type:\x20\x22APP_ERROR\x22\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.':'\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20step\x202\x20(taking\x20initial\x20snapshot),\x20IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20HTTP\x20404:\x20\x22404\x22,\x20\x22Not\x20Found\x22,\x20\x22Page\x20not\x20found\x22,\x20\x22does\x20not\x20exist\x22\x0a-\x20HTTP\x20500:\x20\x22500\x22,\x20\x22Internal\x20Server\x20Error\x22,\x20\x22Server\x20Error\x22,\x20\x22Something\x20went\x20wrong\x22\x0a-\x20HTTP\x20400:\x20\x22400\x22,\x20\x22Bad\x20Request\x22,\x20\x22Invalid\x20request\x22\x0a\x0a**Also\x20check\x20for:**\x0a-\x20Framework\x20error\x20pages\x20(Next.js\x20error\x20boundary,\x20React\x20error\x20page,\x20\x22Application\x20error\x22)\x0a-\x20Completely\x20blank/empty\x20pages\x20with\x20no\x20content\x0a-\x20\x22Cannot\x20GET\x20/path\x22\x20messages\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22HTTP\x20404\x20-\x20Page\x20not\x20found\x20at\x20/dashboard\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20appropriate\x20type\x20(HTTP_404,\x20HTTP_500,\x20HTTP_400,\x20or\x20NAVIGATION_ERROR)\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.',_0x570f9e=_0x384b63?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x384b63+'\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'+_0x21f881['description']+_0xd76dae+_0x449bbd+_0x4beac1+_0x4d1e7c(0x13c)+_0xcab1fc+'\x0a\x0a'+_0x3e6992+_0x570f9e+'\x0a\x0a'+_0x3dff35+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x537d88+_0x4d1e7c(0x112)+_0x16b3e7+'`\x0a-\x20`snapshot\x20--filename\x20'+_0xf23031+_0x4d1e7c(0x163)+_0x93284+_0x4d1e7c(0x13f)+_0x16b3e7+_0x4d1e7c(0x15d)+_0x5d5029+'\x22,\x20\x22'+buildCliArtifactPath(_0x16b3e7,_0xcd50f2[_0x4d1e7c(0x133)])+'\x22,\x20\x22'+buildCliArtifactPath(_0x16b3e7,_0x4d1e7c(0x168))+'\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(_0x16b3e7,_0xcd50f2['leMSl'])+_0x4d1e7c(0x143)+_0x3949b2+'\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(_0x2a490c){const _0x3b119e=_0x3644,_0x1b3835=[..._0x2a490c['keys']()][_0x3b119e(0xf5)]();let _0x4b5602=0x0;for(const _0x447c26 of _0x2a490c[_0x3b119e(0x11b)]()){_0x4b5602+=_0x447c26;}return{'cliCommandCount':_0x4b5602,'cliCommandsSeen':_0x1b3835,'noCliCommandsCalled':_0x4b5602===0x0};}export function createVerifyFeatureCliHooks(_0x215a54){const _0x456cf5=_0x3644,_0x45ed2c={'KDDVv':'PostToolUse','QSZtP':function(_0x104bab,_0x285586){return _0x104bab!==_0x285586;},'eZEFI':function(_0x466beb,_0x5b8e42){return _0x466beb(_0x5b8e42);},'NSqLr':function(_0x44d35e,_0x597b8c){return _0x44d35e(_0x597b8c);},'BRZyF':'tool_call','kyaWZ':function(_0x2b20ae,_0x2888fc){return _0x2b20ae!==_0x2888fc;},'bgZth':'snapshot','BHXhS':function(_0x3c8ea7,_0x549ede,_0x48c329,_0x2ebee0){return _0x3c8ea7(_0x549ede,_0x48c329,_0x2ebee0);},'bcfKM':_0x456cf5(0x140),'hrDkL':_0x456cf5(0xec)},_0x331da8=new Map(),_0x5ead52=async _0x35d23a=>{const _0x562ead=_0x456cf5;if(_0x35d23a[_0x562ead(0x142)]!==_0x45ed2c['KDDVv'])return{};const _0x3e7994=_0x35d23a;if(_0x45ed2c[_0x562ead(0x173)](_0x3e7994[_0x562ead(0x105)],'Bash'))return{};const _0x2f07d6=_0x3e7994[_0x562ead(0x160)],_0x9af4e4=_0x45ed2c[_0x562ead(0x16d)](extractBashCommand,_0x2f07d6);if(!_0x9af4e4)return{};const _0x2eb257=_0x45ed2c[_0x562ead(0x119)](parsePlaywrightCliCommand,_0x9af4e4);if(!_0x2eb257)return{};return _0x331da8[_0x562ead(0xff)](_0x2eb257,(_0x331da8[_0x562ead(0x131)](_0x2eb257)||0x0)+0x1),_0x215a54[_0x562ead(0x171)](_0x45ed2c[_0x562ead(0x167)],{'transport':_0x562ead(0xec),'toolName':_0x2eb257}),_0x215a54[_0x562ead(0x15a)]('tool_call',{'transport':_0x562ead(0xec),'toolName':_0x2eb257,'bashCommandPreview':truncatePreview(_0x9af4e4)}),_0x45ed2c['kyaWZ'](_0x2eb257,_0x45ed2c[_0x562ead(0xfc)])&&console['log'](_0x45ed2c[_0x562ead(0x123)](formatPlaywrightCliConsoleLogMessage,_0x2f07d6,_0x9af4e4,_0x2eb257)),{};},_0x1469f6=async _0x5bf10a=>{const _0x151416=_0x456cf5;if(_0x45ed2c['kyaWZ'](_0x5bf10a['hook_event_name'],_0x45ed2c['bcfKM']))return{};const _0x4ead80=_0x5bf10a;if(_0x45ed2c[_0x151416(0x122)](_0x4ead80[_0x151416(0x105)],'Bash'))return{};return await _0x215a54['trackPhaseError'](_0x151416(0xf8),_0x4ead80['error'],{'transport':_0x45ed2c[_0x151416(0x12e)],'toolName':'Bash'}),{};};return{'postToolUseHook':_0x5ead52,'postToolUseFailureHook':_0x1469f6,'commandCounts':_0x331da8};}async function runPlaywrightCliLifecycleCommand(_0x579318){const _0x1e1e60=_0x3644,_0x2e03db={'SekKg':function(_0x44886a,_0x3a76a6){return _0x44886a(_0x3a76a6);},'PoAzr':function(_0x1effc8,_0x92049){return _0x1effc8??_0x92049;},'hoUWc':function(_0x2ddcf3,_0x2ba18d,_0x10051e){return _0x2ddcf3(_0x2ba18d,_0x10051e);}},{sessionId:_0x15f56a,configPath:_0x47970f,commandArgs:_0x4f1036,env:_0x344c28,telemetry:_0x22504e,phase:_0x1a3e30,metadata:_0x21f513,timeoutMs:_0x4d6d11}=_0x579318;_0x22504e[_0x1e1e60(0x171)](_0x1a3e30,_0x21f513);try{const _0x3f807d=await _0x2e03db['SekKg'](runPlaywrightCliCommand,{'sessionId':_0x15f56a,'configPath':_0x47970f,'commandArgs':_0x4f1036,'cwd':process['cwd'](),'env':_0x344c28,'timeoutMs':_0x2e03db[_0x1e1e60(0x113)](_0x4d6d11,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x22504e[_0x1e1e60(0x15a)](_0x1a3e30,{..._0x21f513,'subcommand':_0x3f807d['invocation'][_0x1e1e60(0x162)],'stdoutPreview':truncatePreview(_0x3f807d[_0x1e1e60(0x154)],0x7d0),'stderrPreview':_0x2e03db[_0x1e1e60(0xf2)](truncatePreview,_0x3f807d[_0x1e1e60(0x151)],0x7d0)});}catch(_0x5d2a7c){await _0x22504e['trackPhaseError'](_0x1a3e30,_0x5d2a7c,_0x21f513);throw _0x5d2a7c;}}export async function finalizeVerifyFeatureCliSession(_0xecc237){const _0xc553b7=_0x3644,_0x967fa0={'sEkgY':'close'},{telemetry:_0x456a7a,sessionId:_0xf738f0,configPath:_0x1f56a0,cliArtifactDir:_0x3ed167,env:_0x2383f7,transportMetadata:_0x36d222}=_0xecc237,_0x1119a4=[{'phase':'playwright_cli_tracing_stop','commandArgs':[_0xc553b7(0x107)]},{'phase':_0xc553b7(0x14b),'commandArgs':[_0xc553b7(0xfa),'--filename='+buildCliArtifactPath(_0x3ed167,_0xc553b7(0x13b))]},{'phase':_0xc553b7(0x103),'commandArgs':[_0x967fa0['sEkgY']]}];for(const _0x15721b of _0x1119a4){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0xf738f0,'configPath':_0x1f56a0,'commandArgs':[..._0x15721b['commandArgs']],'env':_0x2383f7,'telemetry':_0x456a7a,'phase':_0x15721b[_0xc553b7(0x156)],'metadata':_0x36d222});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x1f914f){const _0x5535fe=_0x3644,_0x5b46fd={'yUsda':'trace.trace.zip','xugfA':function(_0x2c5b51,_0x5e6332,_0x31fe1c){return _0x2c5b51(_0x5e6332,_0x31fe1c);}},_0x28e004=['trace.zip',_0x5b46fd[_0x5535fe(0xf9)]];for(const _0x9c50f8 of _0x28e004){const _0x122c31=_0x5b46fd[_0x5535fe(0x104)](join,_0x1f914f,_0x9c50f8);try{return{'buffer':await readFile(_0x122c31),'source':_0x122c31};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x23213c){const _0x2d673c=_0x3644,_0x135cd8={'MEjif':function(_0x55ac0a,_0x4ae5b1,_0x240c7c){return _0x55ac0a(_0x4ae5b1,_0x240c7c);},'BOUIS':function(_0x15f0e9,_0xbfcbb9,_0x2f2c8d){return _0x15f0e9(_0xbfcbb9,_0x2f2c8d);},'RzISq':function(_0x445626,_0x9d3b4b){return _0x445626<_0x9d3b4b;},'vNhUw':function(_0x30bc78,_0x42ff06){return _0x30bc78===_0x42ff06;}},{cwd:_0x135bb2,cliArtifactDir:_0x1f6373,startTime:_0x295ac5}=_0x23213c,_0x9dd3a1=[];await _0x135cd8[_0x2d673c(0x138)](mkdir,_0x1f6373,{'recursive':!![]});const _0xc2da1c=await readdir(_0x135bb2,{'withFileTypes':!![]});for(const _0x35c8fa of _0xc2da1c){if(!_0x35c8fa[_0x2d673c(0x16b)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x2d673c(0x14d)](_0x35c8fa['name']))continue;const _0x59feb8=_0x135cd8[_0x2d673c(0x161)](join,_0x135bb2,_0x35c8fa['name']),_0x25a705=await stat(_0x59feb8);if(_0x135cd8['RzISq'](_0x25a705['mtimeMs']+0x7d0,_0x295ac5))continue;const _0x640bb6=buildCliArtifactPath(_0x1f6373,_0x35c8fa[_0x2d673c(0x146)]);if(_0x135cd8['vNhUw'](_0x59feb8,_0x640bb6))continue;await rename(_0x59feb8,_0x640bb6),_0x9dd3a1['push'](_0x35c8fa[_0x2d673c(0x146)]);}return _0x9dd3a1['sort']();}
1
+ (function(_0x2b207c,_0x45bbfd){const _0x4f440a=_0x472a,_0x15a745=_0x2b207c();while(!![]){try{const _0x1a6868=-parseInt(_0x4f440a(0x123))/0x1*(-parseInt(_0x4f440a(0x15f))/0x2)+-parseInt(_0x4f440a(0x13a))/0x3*(-parseInt(_0x4f440a(0x154))/0x4)+-parseInt(_0x4f440a(0x12d))/0x5+parseInt(_0x4f440a(0x15a))/0x6+-parseInt(_0x4f440a(0x125))/0x7+parseInt(_0x4f440a(0xe9))/0x8*(-parseInt(_0x4f440a(0x148))/0x9)+parseInt(_0x4f440a(0x124))/0xa*(parseInt(_0x4f440a(0x102))/0xb);if(_0x1a6868===_0x45bbfd)break;else _0x15a745['push'](_0x15a745['shift']());}catch(_0x3a5b59){_0x15a745['push'](_0x15a745['shift']());}}}(_0x2bc2,0xab6bd));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(_0x5d741b,_0x57e1f3=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x1a66c8=_0x472a;return _0x5d741b['length']>_0x57e1f3?_0x5d741b[_0x1a66c8(0x129)](0x0,_0x57e1f3)+'...':_0x5d741b;}function buildCliArtifactPath(_0x303031,_0x2066bc){return join(_0x303031,_0x2066bc);}function toStepDisplayName(_0x41c7a3){const _0x1acdae=_0x472a,_0x42cb10={'itWbR':function(_0x48c004,_0x587e8c){return _0x48c004(_0x587e8c);}},_0x33659e=_0x42cb10[_0x1acdae(0x114)](basename,_0x41c7a3)[_0x1acdae(0xfd)](/\.(?:png|ya?ml)$/i,'')[_0x1acdae(0xfd)](/^key_/i,'')[_0x1acdae(0xfd)](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x33659e,'isKeyStep':/^key_/i['test'](basename(_0x41c7a3))};}function extractShellValue(_0x7c43aa){if(!_0x7c43aa)return null;return _0x7c43aa[0x1]??_0x7c43aa[0x2]??_0x7c43aa[0x3]??null;}function extractFilenameOption(_0x11f3b4){const _0x140a95=_0x472a;return extractShellValue(_0x11f3b4[_0x140a95(0x160)](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x183cc3,_0x56a905){const _0x28c414=_0x472a,_0x4b5214={'ZPeoS':'\x5c$&','RpkYe':function(_0x2df295,_0x24276f){return _0x2df295(_0x24276f);}},_0x6948d=_0x56a905['replace'](/[.*+?^${}()|[\]\\]/g,_0x4b5214[_0x28c414(0x157)]);return _0x4b5214['RpkYe'](extractShellValue,_0x183cc3[_0x28c414(0x160)](new RegExp('(?:^|\x5cs)'+_0x6948d+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x245b53){const _0x1125f3=_0x472a,_0xab6bb5={'CNXUb':'target','jPisd':function(_0x2196bd,_0x3deabf,_0x1787b0){return _0x2196bd(_0x3deabf,_0x1787b0);}};if(!_0x245b53)return _0xab6bb5[_0x1125f3(0xef)];if(/^e\d+$/i[_0x1125f3(0x140)](_0x245b53))return _0x1125f3(0x12c)+_0x245b53;return JSON['stringify'](_0xab6bb5[_0x1125f3(0x12f)](truncatePreview,_0x245b53,0x78));}function formatPlaywrightCliLog(_0x2f65ec,_0x50053d){const _0x33426b=_0x472a,_0xe7c6ed={'IiBYs':_0x33426b(0x10a),'AiZoV':_0x33426b(0x14a),'bJFRT':_0x33426b(0x166),'WLdLX':_0x33426b(0x122),'CdNlA':function(_0x3c1514,_0xe017d7){return _0x3c1514(_0xe017d7);},'wXTCB':function(_0x2f9034,_0x1e5562){return _0x2f9034(_0x1e5562);},'bHxZf':_0x33426b(0x13f),'TPmdh':function(_0x96f758,_0x17692f,_0x1ae6ba){return _0x96f758(_0x17692f,_0x1ae6ba);},'WRjtg':'check','CLnVA':_0x33426b(0x13e),'tMoiw':function(_0x331e17,_0x1f8608){return _0x331e17(_0x1f8608);},'wSqRe':'press','rNUPI':_0x33426b(0xea),'KJwVk':_0x33426b(0x119),'GnNvx':function(_0x4c4962,_0x2dc8a7,_0x1f5f73){return _0x4c4962(_0x2dc8a7,_0x1f5f73);}};switch(_0x50053d){case _0xe7c6ed[_0x33426b(0x10e)]:{const _0x5d2ff1=extractFirstCommandArgument(_0x2f65ec,_0x50053d);return _0x5d2ff1?_0x33426b(0x126)+_0x5d2ff1:'open\x20browser';}case _0x33426b(0xdf):return _0xe7c6ed[_0x33426b(0x136)];case _0x33426b(0x115):return _0xe7c6ed[_0x33426b(0x13d)];case _0x33426b(0xf4):return _0x33426b(0xed);case _0x33426b(0x139):return _0xe7c6ed[_0x33426b(0x141)];case _0x33426b(0x168):{const _0x31297f=_0xe7c6ed[_0x33426b(0x147)](extractFilenameOption,_0x2f65ec);if(!_0x31297f)return _0x33426b(0xf6);const {name:_0x47ffaf}=toStepDisplayName(_0x31297f);return'capture\x20snapshot\x20`'+_0x47ffaf+'`';}case _0x33426b(0x120):{const _0x36d860=extractFilenameOption(_0x2f65ec);if(!_0x36d860)return'capture\x20screenshot';const {name:_0x461664,isKeyStep:_0x2ff9a0}=_0xe7c6ed['wXTCB'](toStepDisplayName,_0x36d860);return _0x2ff9a0?'capture\x20key\x20step\x20`'+_0x461664+'`':'capture\x20step\x20`'+_0x461664+'`';}case _0xe7c6ed[_0x33426b(0x15c)]:return _0x33426b(0x106)+formatCommandTarget(_0xe7c6ed['TPmdh'](extractFirstCommandArgument,_0x2f65ec,_0x50053d));case _0xe7c6ed['WRjtg']:return _0x33426b(0x138)+formatCommandTarget(extractFirstCommandArgument(_0x2f65ec,_0x50053d));case _0xe7c6ed[_0x33426b(0xe0)]:return _0x33426b(0xe1)+_0xe7c6ed[_0x33426b(0x105)](formatCommandTarget,extractFirstCommandArgument(_0x2f65ec,_0x50053d));case _0xe7c6ed[_0x33426b(0x159)]:return _0x33426b(0x108)+formatCommandTarget(extractFirstCommandArgument(_0x2f65ec,_0x50053d));case'run-code':return _0xe7c6ed['rNUPI'];case _0xe7c6ed[_0x33426b(0xf9)]:{const _0x14bd5b=extractFirstCommandArgument(_0x2f65ec,_0x50053d);return _0x14bd5b?'open\x20new\x20tab\x20'+_0x14bd5b:_0x33426b(0x151);}case'tab-select':{const _0x50678=_0xe7c6ed[_0x33426b(0x156)](extractFirstCommandArgument,_0x2f65ec,_0x50053d);return _0x50678?_0x33426b(0x113)+_0x50678:_0x33426b(0x12e);}default:return _0x50053d;}}function extractPlaywrightCliToolDescription(_0x16be1a){const _0x3b0cde=_0x472a,_0x30fb76=_0x16be1a['description'];if(typeof _0x30fb76!==_0x3b0cde(0x128))return null;const _0x52bab5=_0x30fb76['trim']()['replace'](/\s+/g,'\x20');return _0x52bab5['length']>0x0?_0x52bab5:null;}export function formatPlaywrightCliConsoleLogMessage(_0x35bc5a,_0x427d4a,_0x3c7d06){const _0x5e1255=_0x472a,_0x3755db=formatPlaywrightCliLog(_0x427d4a,_0x3c7d06),_0x3347da=extractPlaywrightCliToolDescription(_0x35bc5a);if(!_0x3347da)return'[playwright-cli]\x20'+_0x3755db;if(process['env']['DEBUG'])return _0x5e1255(0x14b)+_0x3347da+'\x20('+_0x3755db+')';return _0x5e1255(0x14b)+_0x3347da;}export function buildVerifyFeatureCliDebugPrompt(_0x47eb7d,_0x51acd9){const _0x3dd5a6=_0x472a,_0x55c997={'DLBbg':function(_0x13cf9d,_0x573a87,_0x87fa95){return _0x13cf9d(_0x573a87,_0x87fa95);},'zufqR':function(_0x16664b,_0x347914){return _0x16664b(_0x347914);}},_0x269d50=buildCliArtifactPath(_0x51acd9,'00_mozilla-homepage.yml'),_0x12d496=buildCliArtifactPath(_0x51acd9,'01_mozilla-homepage.png'),_0x2385ef=_0x55c997[_0x3dd5a6(0x117)](buildCliArtifactPath,_0x51acd9,_0x3dd5a6(0x14f)),_0x46f0bc=buildCliArtifactPath(_0x51acd9,'03_learn-more.png'),_0x579724=_0x55c997['zufqR'](quoteShellArg,_0x269d50),_0x35cfc7=quoteShellArg(_0x12d496),_0x5957a9=quoteShellArg(_0x2385ef),_0x18ae5e=quoteShellArg(_0x46f0bc);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x47eb7d+_0x3dd5a6(0x103)+_0x47eb7d+'\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`'+_0x47eb7d+'\x20tracing-start`\x0a3.\x20Run\x20`'+_0x47eb7d+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x51acd9+_0x3dd5a6(0x11c)+_0x47eb7d+'\x20snapshot\x20--filename\x20'+_0x579724+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x47eb7d+'\x20screenshot\x20--filename\x20'+_0x35cfc7+_0x3dd5a6(0x142)+_0x47eb7d+_0x3dd5a6(0x133)+_0x5957a9+_0x3dd5a6(0x13b)+_0x47eb7d+_0x3dd5a6(0x100)+_0x18ae5e+_0x3dd5a6(0xf7);}export function buildVerifyFeatureCliPrompt(_0x36919a){const _0x41bdc5=_0x472a,_0x203e2e={'kVGwj':_0x41bdc5(0xf8),'vtFwF':'Reviewer','lgVfy':_0x41bdc5(0xff),'UajuA':function(_0x1faf4c,_0x3d5f4a,_0x70d55){return _0x1faf4c(_0x3d5f4a,_0x70d55);},'BMbXK':'01_initial.yml','lXlIG':function(_0x6abc3e,_0x2ffb31,_0x3b9e4b){return _0x6abc3e(_0x2ffb31,_0x3b9e4b);},'cozRK':function(_0x2bf921,_0x3e9dc1,_0x57724c){return _0x2bf921(_0x3e9dc1,_0x57724c);},'PlmIW':_0x41bdc5(0x12b),'AWiEZ':function(_0x113a0a,_0x17d677){return _0x113a0a(_0x17d677);},'VcfFV':function(_0x30e822,_0x3e066d){return _0x30e822(_0x3e066d);},'vXzla':'02_button-clicked.png','vHSax':function(_0xeb85db,_0x1d32c0,_0x351b54){return _0xeb85db(_0x1d32c0,_0x351b54);}},{checklistItem:_0x16341e,itemFeedback:_0x3e7d58,taskDescription:_0x5162fc,cliCommandPrefix:_0x17b901,cliArtifactDir:_0x57b710,isCdpMode:_0x2b599f,url:_0x4ee09c,cdpEndpoint:_0x16774f,loginInstructions:_0x40e814}=_0x36919a,_0x562b20=_0x203e2e[_0x41bdc5(0x12a)](buildCliArtifactPath,_0x57b710,_0x203e2e[_0x41bdc5(0x14d)]),_0x31bf4d=_0x203e2e['lXlIG'](buildCliArtifactPath,_0x57b710,_0x41bdc5(0x116)),_0x29a332=_0x203e2e['cozRK'](buildCliArtifactPath,_0x57b710,'key_03_success-state.png'),_0x1e166a=_0x203e2e[_0x41bdc5(0x10d)](buildCliArtifactPath,_0x57b710,_0x203e2e['PlmIW']),_0x70f6a1=quoteShellArg(_0x562b20),_0x5ddc26=_0x203e2e['AWiEZ'](quoteShellArg,_0x31bf4d),_0x1a95a7=quoteShellArg(_0x29a332),_0x535acf=_0x203e2e['VcfFV'](quoteShellArg,_0x1e166a),_0xf3342e=_0x16341e[_0x41bdc5(0xe5)]?_0x41bdc5(0x158)+_0x16341e[_0x41bdc5(0xe5)]:'';let _0x362849='';if(_0x3e7d58&&_0x3e7d58['unaddressedComments']['length']>0x0){const _0x32707f=_0x3e7d58[_0x41bdc5(0x11b)][_0x41bdc5(0x10f)](_0xcc6f37=>{const _0x4afa0e=_0x41bdc5,_0x458ccf=new Date(_0xcc6f37[_0x4afa0e(0x145)])[_0x4afa0e(0x162)](_0x4afa0e(0x155),{'month':'short','day':_0x203e2e[_0x4afa0e(0xe6)]}),_0x4474b4=_0xcc6f37[_0x4afa0e(0x16a)]||_0xcc6f37['authorEmail']||_0x203e2e[_0x4afa0e(0x101)],_0x38b443=_0xcc6f37[_0x4afa0e(0xe7)]?_0x4afa0e(0x121)+(_0xcc6f37['domRef']['selector'][_0x4afa0e(0x131)]('\x20>\x20')[_0x4afa0e(0x149)]()?.[_0x4afa0e(0x131)](':')[0x0]||_0x203e2e['lgVfy'])+'>\x20\x22'+(_0xcc6f37['domRef'][_0x4afa0e(0x165)]||'')[_0x4afa0e(0x129)](0x0,0x32)+'\x22)':'';return'-\x20['+_0xcc6f37['id']+']\x20**'+_0x4474b4+_0x4afa0e(0xe3)+_0x458ccf+'):\x20\x22'+_0xcc6f37['content']+'\x22'+_0x38b443;})['join']('\x0a');_0x362849='\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'+_0x32707f;}const _0x157ba9=_0x3e7d58?.['canonicalFlow']?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0x3e7d58['canonicalFlow']:'',_0x331417=_0x2b599f?'##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20'+_0x16774f+'.\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'+_0x4ee09c+'\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',_0x1d8ce9=_0x4ee09c?quoteShellArg(_0x4ee09c):'',_0x28d3df=_0x2b599f?'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x17b901+_0x41bdc5(0xf2)+_0x17b901+'\x20tracing-start`,\x20then\x20`'+_0x17b901+_0x41bdc5(0xf0)+_0x57b710+_0x41bdc5(0x127)+_0x17b901+'\x20snapshot\x20--filename\x20'+_0x70f6a1+_0x41bdc5(0xf5)+_0x17b901+_0x41bdc5(0x100)+_0x535acf+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x17b901+_0x41bdc5(0x144):_0x41bdc5(0x11e)+_0x17b901+'\x20open\x20'+_0x1d8ce9+_0x41bdc5(0x11f)+_0x17b901+_0x41bdc5(0x146)+_0x17b901+_0x41bdc5(0xf0)+_0x57b710+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x17b901+'\x20snapshot\x20--filename\x20'+_0x70f6a1+_0x41bdc5(0xfe)+_0x17b901+'\x20screenshot\x20--filename\x20'+_0x535acf+_0x41bdc5(0x111)+_0x17b901+_0x41bdc5(0xe4),_0x12a4ad=_0x2b599f?_0x41bdc5(0xe8):_0x41bdc5(0x164),_0x5106cf=_0x40e814?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x40e814+'\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 _0x41bdc5(0xeb)+_0x16341e['description']+_0xf3342e+_0x362849+_0x157ba9+_0x41bdc5(0x137)+_0x5162fc+'\x0a\x0a'+_0x331417+_0x5106cf+'\x0a\x0a'+_0x28d3df+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x17b901+_0x41bdc5(0x167)+_0x57b710+_0x41bdc5(0x143)+_0x5ddc26+'`\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'+_0x1a95a7+_0x41bdc5(0xde)+_0x57b710+_0x41bdc5(0x110)+_0x1e166a+'\x22,\x20\x22'+buildCliArtifactPath(_0x57b710,_0x203e2e[_0x41bdc5(0x15d)])+'\x22,\x20\x22'+_0x203e2e[_0x41bdc5(0x130)](buildCliArtifactPath,_0x57b710,_0x41bdc5(0x11d))+'\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(_0x57b710,'key_04_success-state.png')+_0x41bdc5(0xfb)+_0x12a4ad+'\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(_0xdd1e07){const _0x1e1352=_0x472a,_0x259678={'liwkh':function(_0x1b882f,_0x166f0e){return _0x1b882f===_0x166f0e;}},_0x1ca184=[..._0xdd1e07[_0x1e1352(0xf3)]()]['sort']();let _0x19646f=0x0;for(const _0x2e64b9 of _0xdd1e07['values']()){_0x19646f+=_0x2e64b9;}return{'cliCommandCount':_0x19646f,'cliCommandsSeen':_0x1ca184,'noCliCommandsCalled':_0x259678[_0x1e1352(0xf1)](_0x19646f,0x0)};}export function createVerifyFeatureCliHooks(_0x22b57d){const _0x58ffbc=_0x472a,_0x339b73={'JaoHJ':function(_0x538a16,_0xd25627){return _0x538a16!==_0xd25627;},'wTBhp':function(_0x3244b8,_0x54bd1d){return _0x3244b8!==_0x54bd1d;},'pUMYq':function(_0x475d4a,_0xb4494){return _0x475d4a(_0xb4494);},'iiqSL':function(_0x50a5a1,_0x5f2470){return _0x50a5a1+_0x5f2470;},'qmCPW':'playwright-cli','fIgKe':'tool_call','vzfPN':function(_0xe9d1fd,_0x2dbf15){return _0xe9d1fd(_0x2dbf15);},'fXoKf':function(_0x581d56,_0x39c2d9,_0x25a7cf,_0xc51080){return _0x581d56(_0x39c2d9,_0x25a7cf,_0xc51080);},'UzYBW':function(_0x374a92,_0x4b14f0){return _0x374a92!==_0x4b14f0;},'LTFxV':_0x58ffbc(0x15b)},_0x11ed0d=new Map(),_0x29efe6=async _0x54e4f2=>{const _0x576c6c=_0x58ffbc;if(_0x339b73[_0x576c6c(0x109)](_0x54e4f2['hook_event_name'],_0x576c6c(0xfa)))return{};const _0x2aaba6=_0x54e4f2;if(_0x339b73[_0x576c6c(0x163)](_0x2aaba6[_0x576c6c(0x107)],_0x576c6c(0x15b)))return{};const _0x294379=_0x2aaba6[_0x576c6c(0x11a)],_0x4d7dd7=_0x339b73[_0x576c6c(0x10b)](extractBashCommand,_0x294379);if(!_0x4d7dd7)return{};const _0x5a534c=_0x339b73[_0x576c6c(0x10b)](parsePlaywrightCliCommand,_0x4d7dd7);if(!_0x5a534c)return{};return _0x11ed0d[_0x576c6c(0x153)](_0x5a534c,_0x339b73[_0x576c6c(0x152)](_0x11ed0d[_0x576c6c(0x14c)](_0x5a534c)||0x0,0x1)),_0x22b57d['trackPhaseStart'](_0x576c6c(0xee),{'transport':_0x339b73['qmCPW'],'toolName':_0x5a534c}),_0x22b57d['trackPhaseEnd'](_0x339b73['fIgKe'],{'transport':'playwright-cli','toolName':_0x5a534c,'bashCommandPreview':_0x339b73['vzfPN'](truncatePreview,_0x4d7dd7)}),_0x5a534c!=='snapshot'&&console[_0x576c6c(0xec)](_0x339b73['fXoKf'](formatPlaywrightCliConsoleLogMessage,_0x294379,_0x4d7dd7,_0x5a534c)),{};},_0x1c7405=async _0x4240d3=>{const _0x1bee04=_0x58ffbc;if(_0x339b73['UzYBW'](_0x4240d3[_0x1bee04(0x132)],'PostToolUseFailure'))return{};const _0x4c9fe8=_0x4240d3;if(_0x4c9fe8[_0x1bee04(0x107)]!==_0x1bee04(0x15b))return{};return await _0x22b57d['trackPhaseError']('tool_failure',_0x4c9fe8['error'],{'transport':_0x339b73['qmCPW'],'toolName':_0x339b73['LTFxV']}),{};};return{'postToolUseHook':_0x29efe6,'postToolUseFailureHook':_0x1c7405,'commandCounts':_0x11ed0d};}async function runPlaywrightCliLifecycleCommand(_0x248835){const _0x4e0bdb=_0x472a,_0x44e0b2={'PGJkv':function(_0x571244,_0x8b67b1){return _0x571244(_0x8b67b1);},'HGqSs':function(_0x3bb3bb,_0x503f48,_0x176fd6){return _0x3bb3bb(_0x503f48,_0x176fd6);}},{sessionId:_0x5584dc,configPath:_0x1fe9d1,commandArgs:_0x333c1a,env:_0x55712f,telemetry:_0x3b5b8f,phase:_0x2f8d47,metadata:_0x3ca1fa,timeoutMs:_0x434a66}=_0x248835;_0x3b5b8f[_0x4e0bdb(0x13c)](_0x2f8d47,_0x3ca1fa);try{const _0x4ed7d2=await _0x44e0b2[_0x4e0bdb(0x134)](runPlaywrightCliCommand,{'sessionId':_0x5584dc,'configPath':_0x1fe9d1,'commandArgs':_0x333c1a,'cwd':process['cwd'](),'env':_0x55712f,'timeoutMs':_0x434a66??PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS});_0x3b5b8f['trackPhaseEnd'](_0x2f8d47,{..._0x3ca1fa,'subcommand':_0x4ed7d2['invocation'][_0x4e0bdb(0x104)],'stdoutPreview':_0x44e0b2['HGqSs'](truncatePreview,_0x4ed7d2[_0x4e0bdb(0xfc)],0x7d0),'stderrPreview':truncatePreview(_0x4ed7d2['stderr'],0x7d0)});}catch(_0x1eb746){await _0x3b5b8f['trackPhaseError'](_0x2f8d47,_0x1eb746,_0x3ca1fa);throw _0x1eb746;}}export async function finalizeVerifyFeatureCliSession(_0x3e6445){const _0x131b2b=_0x472a,_0x26bb90={'XHEEt':_0x131b2b(0x15e),'CMLxB':_0x131b2b(0x112),'MFBkV':'playwright_cli_close','JQYBt':function(_0x51e494,_0x25f180){return _0x51e494(_0x25f180);}},{telemetry:_0x5b2f31,sessionId:_0x50d4db,configPath:_0x5f41c8,cliArtifactDir:_0x328146,env:_0x28ad58,transportMetadata:_0x14c3c1}=_0x3e6445,_0x2ec7c2=[{'phase':_0x26bb90['XHEEt'],'commandArgs':[_0x131b2b(0x115)]},{'phase':_0x131b2b(0xe2),'commandArgs':['video-stop','--filename='+buildCliArtifactPath(_0x328146,_0x26bb90[_0x131b2b(0x169)])]},{'phase':_0x26bb90['MFBkV'],'commandArgs':[_0x131b2b(0x10c)]}];for(const _0x42f371 of _0x2ec7c2){try{await _0x26bb90['JQYBt'](runPlaywrightCliLifecycleCommand,{'sessionId':_0x50d4db,'configPath':_0x5f41c8,'commandArgs':[..._0x42f371['commandArgs']],'env':_0x28ad58,'telemetry':_0x5b2f31,'phase':_0x42f371[_0x131b2b(0x118)],'metadata':_0x14c3c1});}catch{}}}function _0x472a(_0x1d3498,_0xe882cd){_0x1d3498=_0x1d3498-0xde;const _0x2bc290=_0x2bc2();let _0x472ae5=_0x2bc290[_0x1d3498];return _0x472ae5;}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x4aae2f){const _0x9e3a75={'HKLTo':'trace.zip','WPdsl':'trace.trace.zip'},_0x2ead95=[_0x9e3a75['HKLTo'],_0x9e3a75['WPdsl']];for(const _0x42ac52 of _0x2ead95){const _0x13f195=join(_0x4aae2f,_0x42ac52);try{return{'buffer':await readFile(_0x13f195),'source':_0x13f195};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x2c5fdd){const _0x55a2fc=_0x472a,_0x92b93e={'AVwnj':function(_0x2ab298,_0x157e05,_0x270698){return _0x2ab298(_0x157e05,_0x270698);},'iWskL':function(_0x2938de,_0x56962f){return _0x2938de(_0x56962f);},'TeIzd':function(_0x48902a,_0x323408,_0x5dcc90){return _0x48902a(_0x323408,_0x5dcc90);},'msjuk':function(_0x55d548,_0x5c1a33,_0x39942b){return _0x55d548(_0x5c1a33,_0x39942b);}},{cwd:_0x29a863,cliArtifactDir:_0x28d315,startTime:_0x16ca4b}=_0x2c5fdd,_0x38e890=[];await mkdir(_0x28d315,{'recursive':!![]});const _0x5a0951=await _0x92b93e['AVwnj'](readdir,_0x29a863,{'withFileTypes':!![]});for(const _0x369309 of _0x5a0951){if(!_0x369309['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x369309['name']))continue;const _0x267116=join(_0x29a863,_0x369309[_0x55a2fc(0x135)]),_0x2d25d7=await _0x92b93e[_0x55a2fc(0x150)](stat,_0x267116);if(_0x2d25d7[_0x55a2fc(0x161)]+0x7d0<_0x16ca4b)continue;const _0x2dca73=_0x92b93e['TeIzd'](buildCliArtifactPath,_0x28d315,_0x369309['name']);if(_0x267116===_0x2dca73)continue;await _0x92b93e['msjuk'](rename,_0x267116,_0x2dca73),_0x38e890[_0x55a2fc(0x14e)](_0x369309['name']);}return _0x38e890['sort']();}function _0x2bc2(){const _0x29eff6=['\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','stdout','replace','`\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`','element','\x20screenshot\x20--filename\x20','vtFwF','22ylbIPi','\x0a\x0a1.\x20Run\x20`','subcommand','tMoiw','click\x20','tool_name','press\x20','JaoHJ','open','pUMYq','close','cozRK','IiBYs','map','`:\x20\x22','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','session-recording.webm','select\x20tab\x20','itWbR','tracing-stop','02_state.yml','DLBbg','phase','tab-new','tool_input','unaddressedComments','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','03_result-visible.png','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','`,\x20then\x20`','screenshot','\x20(on\x20element:\x20<','stop\x20video\x20recording','3RLhhfU','3278220VgSwyC','1334739ZjTIqR','open\x20','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','string','slice','UajuA','01_initial-state.png','ref\x20','2395960upuHKe','select\x20tab','jPisd','vHSax','split','hook_event_name','\x20snapshot\x20--filename\x20','PGJkv','name','AiZoV','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','check\x20','video-stop','2949guIUDR','`\x0a9.\x20Run\x20`','trackPhaseStart','bJFRT','fill','click','test','WLdLX','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','`\x0a-\x20`snapshot\x20--filename\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','createdAt','\x20tracing-start`,\x20then\x20`','CdNlA','72vUCFCl','pop','start\x20tracing','[ranger-verification-agent]\x20','get','BMbXK','push','02_learn-more.yml','iWskL','open\x20new\x20tab','iiqSL','set','1076vsiGjV','en-US','GnNvx','ZPeoS','\x0a\x0a##\x20Additional\x20Notes\x0a','wSqRe','4663656HAliTz','Bash','bHxZf','vXzla','playwright_cli_tracing_stop','216842RVwIaA','match','mtimeMs','toLocaleDateString','wTBhp','\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.','textContent','stop\x20tracing','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','snapshot','CMLxB','authorName','`\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`','tracing-start','CLnVA','fill\x20','playwright_cli_video_stop','**\x20(','\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','notes','kVGwj','domRef','\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.','650600xvtNsC','run\x20custom\x20Playwright\x20code','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','log','start\x20video\x20recording','tool_call','CNXUb','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','liwkh','\x20open`,\x20then\x20`','keys','video-start','`\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','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','numeric','KJwVk','PostToolUse'];_0x2bc2=function(){return _0x29eff6;};return _0x2bc2();}
@@ -13,9 +13,38 @@ If you are running in Claude Code, read and suggest the following claude-specifi
13
13
 
14
14
  Use Ranger when the work includes any UI or frontend component. Do not suggest Ranger for backend-only or infra-only changes unless the user asks.
15
15
 
16
- 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,10 +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. **Try ad-hoc materialization first**: Set `RANGER_TEST_USERNAME` and `RANGER_TEST_PASSWORD` env vars and re-run `ranger-cli go ...` a cloud profile is created on the fly using those credentials, no `profile add` needed. On subsequent runs, `RANGER_TEST_USERNAME` alone resolves the existing profile (the password is fetched from the cloud row).
236
- 2. **Check existing profiles**: Run `ranger-cli profile ls` to see all configured profiles and their details
237
- 3. **Pin a specific profile**: Use `ranger-cli profile use <profile-name>` (or pass `--profile <name>` / set `RANGER_PROFILE`)
238
- 4. **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.)
239
268
 
240
269
 
241
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,36 +1,63 @@
1
1
  # Verifying Scenarios
2
2
 
3
- After implementing code for a scenario, verify it works in the browser. This creates evidence (screenshots, traces, logs) that the implementation is complete.
3
+ ## One-shot: creds + goal in, verification out
4
4
 
5
- ## Basic Command
5
+ When the user gives you credentials and a goal (e.g. "use alice@example.com / hunter2 and check the dashboard renders"), run `go` directly with env vars inline — no `create`, no `profile add`, no ceremony:
6
6
 
7
7
  ```bash
8
- ranger-cli go --scenario <N> --notes "<what to verify>"
8
+ RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
9
+ ranger-cli go --base-url <target-url> --notes '<the goal verbatim>'
9
10
  ```
10
11
 
11
- The URL is derived from your active profile's `baseUrl` setting (or auto-materialized see below).
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`).
12
13
 
13
- ## Profile resolution (no setup required)
14
+ The CLI:
14
15
 
15
- `go` resolves which profile to use in this order:
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
16
20
 
17
- 1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
18
- 2. The saved active profile (`ranger-cli profile use`)
19
- 3. **Ad-hoc materialization**: if `RANGER_TEST_USERNAME` is set and no profile is otherwise selected, a cloud profile is created on-the-fly using that username, with `RANGER_TEST_PASSWORD` stored alongside it. Subsequent runs reuse the same profile.
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
20
26
 
21
- The ad-hoc path is the recommended default for new test users — no `profile add` ceremony needed. If the user only wants to *consume* sessions (e.g. on a fresh CI box where the profile already exists in the cloud), `RANGER_TEST_USERNAME` alone is enough; the password is fetched from the stored cloud profile.
27
+ If `go` returns a 422 / login-failed, automated login probably isn't set up for this account. Fall back in this order:
22
28
 
23
- For pinned-session use (`RANGER_SESSION_STATE_PATH=/path/to/storageState.json`), the CLI uses that file directly and skips both cloud-side login and `sessionDeps` invalidation.
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
24
32
 
25
- ## Required: Active Feature Review
33
+ If the user did NOT give you credentials, skip the env-var path entirely and go straight to fallback #1 or #2.
26
34
 
27
- `go` requires an active feature review. If you don't have one:
35
+ ## Scenario-driven verification
36
+
37
+ After implementing code against a scenario in an active feature review, verify it:
38
+
39
+ ```bash
40
+ ranger-cli go --scenario <N> --notes "<what to verify>"
41
+ ```
42
+
43
+ ## Profile resolution order
44
+
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
49
+
50
+ ## Active feature review (only needed for scenario-driven runs)
51
+
52
+ If you're verifying a scenario (not a one-shot):
28
53
 
29
54
  ```bash
30
55
  ranger-cli list # Find feature reviews to resume
31
56
  ranger-cli resume <id> # Resume a specific feature review
32
57
  ```
33
58
 
59
+ For a one-shot `go --base-url ... --notes '...'`, the CLI handles feature-review creation for you.
60
+
34
61
  ## The Verification Flow
35
62
 
36
63
  1. **Select scenario** - CLI prompts which scenario this verifies
@@ -53,7 +80,7 @@ You do NOT need to manually include reviewer feedback in your `--notes` descript
53
80
 
54
81
  | Option | Required | Description |
55
82
  |--------|----------|-------------|
56
- | `--profile` | No | Profile to use. Equivalent to `RANGER_PROFILE` env var. Defaults to active profile, or auto-materializes from `RANGER_TEST_USERNAME` if set. |
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. |
57
84
  | `--notes` | No | What to verify (defaults to scenario description) |
58
85
  | `--scenario` | No | Scenario index to verify (skips selection prompt) |
59
86
  | `--start-path` | No | Path to start on (appended to base URL, e.g., `/dashboard`) |
@@ -194,7 +221,7 @@ Always end the conversational turn by sharing the dashboard link whenever you ru
194
221
  Run `ranger-cli list` to find feature reviews, then `ranger-cli resume <id>` to resume one.
195
222
 
196
223
  ### "No active profile"
197
- Either set `RANGER_TEST_USERNAME` (and `RANGER_TEST_PASSWORD` for first-time login) and re-run — the profile will materialize automatically — or pin one explicitly with `ranger-cli profile use <profile-name>`.
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>`.
198
225
 
199
226
  ### Verification times out
200
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.bc88254-5",
3
+ "version": "2.5.4-alpha.f4657dc-23",
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
  }