@ranger-testing/ranger-cli 2.5.4-alpha.071b7bd-1 → 2.5.4-alpha.1f7a251-7

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 (80) 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 -0
  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 -0
  42. package/build/commands/utils/cloudProfileSession.js +1 -0
  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 -0
  50. package/build/commands/utils/keychain.js +1 -1
  51. package/build/commands/utils/localAgentInstallationsApi.js +1 -1
  52. package/build/commands/utils/matchAuthEnvironment.js +1 -0
  53. package/build/commands/utils/mcpImageBase64.js +1 -1
  54. package/build/commands/utils/model.js +1 -1
  55. package/build/commands/utils/opencodeConfig.js +1 -1
  56. package/build/commands/utils/playwrightCli.js +1 -1
  57. package/build/commands/utils/profileMessages.js +1 -1
  58. package/build/commands/utils/profileSetupBanner.js +1 -1
  59. package/build/commands/utils/projectsConfig.js +1 -0
  60. package/build/commands/utils/rangerConfig.js +1 -1
  61. package/build/commands/utils/rangerRoot.js +1 -1
  62. package/build/commands/utils/resolveProfileContext.js +1 -0
  63. package/build/commands/utils/resolveProfileUrl.js +1 -0
  64. package/build/commands/utils/retry.js +1 -1
  65. package/build/commands/utils/sessionCache.js +1 -1
  66. package/build/commands/utils/settings.js +1 -1
  67. package/build/commands/utils/skillContent.js +1 -1
  68. package/build/commands/utils/skills.js +1 -1
  69. package/build/commands/utils/stitchWebmFiles.js +1 -1
  70. package/build/commands/utils/telemetry.js +1 -1
  71. package/build/commands/utils/tokenRefresh.js +1 -1
  72. package/build/commands/utils/traceSnapshotMapper.js +1 -1
  73. package/build/commands/utils/userApi.js +1 -1
  74. package/build/commands/utils/version.js +1 -1
  75. package/build/commands/verifyFeature.js +1 -1
  76. package/build/commands/verifyFeatureCli.js +1 -1
  77. package/build/skills/ranger/SKILL.md +18 -4
  78. package/build/skills/ranger/create.md +6 -0
  79. package/build/skills/ranger/verify.md +23 -3
  80. package/package.json +6 -2
@@ -1 +1 @@
1
- (function(_0xd11e83,_0x15ae2d){const _0xefe01c=_0x421c,_0xf2479b=_0xd11e83();while(!![]){try{const _0x223f50=parseInt(_0xefe01c(0x236))/0x1+-parseInt(_0xefe01c(0x1db))/0x2*(-parseInt(_0xefe01c(0x201))/0x3)+parseInt(_0xefe01c(0x234))/0x4+parseInt(_0xefe01c(0x252))/0x5*(parseInt(_0xefe01c(0x214))/0x6)+-parseInt(_0xefe01c(0x1f3))/0x7+-parseInt(_0xefe01c(0x20a))/0x8*(parseInt(_0xefe01c(0x262))/0x9)+-parseInt(_0xefe01c(0x22a))/0xa;if(_0x223f50===_0x15ae2d)break;else _0xf2479b['push'](_0xf2479b['shift']());}catch(_0x17199f){_0xf2479b['push'](_0xf2479b['shift']());}}}(_0x4b14,0x6c444));function _0x421c(_0x53d2b8,_0x3da4a8){_0x53d2b8=_0x53d2b8-0x1db;const _0x4b1465=_0x4b14();let _0x421c9f=_0x4b1465[_0x53d2b8];return _0x421c9f;}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(_0x4ae1fa,_0x5c51ae=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x43bfbd=_0x421c,_0x32c443={'AardL':_0x43bfbd(0x1f7)};return _0x4ae1fa[_0x43bfbd(0x250)]>_0x5c51ae?_0x4ae1fa[_0x43bfbd(0x256)](0x0,_0x5c51ae)+_0x32c443[_0x43bfbd(0x1e7)]:_0x4ae1fa;}function buildCliArtifactPath(_0x2ece33,_0x1c06c9){return join(_0x2ece33,_0x1c06c9);}function toStepDisplayName(_0x220f6c){const _0x403843=_0x421c,_0x390d91={'QGakz':function(_0xbaea00,_0x52bf5d){return _0xbaea00(_0x52bf5d);}},_0x3494df=basename(_0x220f6c)[_0x403843(0x217)](/\.(?:png|ya?ml)$/i,'')[_0x403843(0x217)](/^key_/i,'')[_0x403843(0x217)](/^\d+_/,'')['replace'](/-/g,'\x20');return{'name':_0x3494df,'isKeyStep':/^key_/i[_0x403843(0x25c)](_0x390d91['QGakz'](basename,_0x220f6c))};}function extractShellValue(_0x2017f2){if(!_0x2017f2)return null;return _0x2017f2[0x1]??_0x2017f2[0x2]??_0x2017f2[0x3]??null;}function extractFilenameOption(_0x5af635){const _0x272bfd={'AjHkb':function(_0x2388bb,_0x1a46b7){return _0x2388bb(_0x1a46b7);}};return _0x272bfd['AjHkb'](extractShellValue,_0x5af635['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x419532,_0x11dbc6){const _0x12f785=_0x421c,_0x2aebc4={'hYxNc':function(_0x245246,_0x95f96e){return _0x245246(_0x95f96e);}},_0x24101a=_0x11dbc6[_0x12f785(0x217)](/[.*+?^${}()|[\]\\]/g,_0x12f785(0x206));return _0x2aebc4['hYxNc'](extractShellValue,_0x419532[_0x12f785(0x21b)](new RegExp('(?:^|\x5cs)'+_0x24101a+_0x12f785(0x25a))));}function formatCommandTarget(_0x42f9bf){const _0x1d1470=_0x421c,_0x5f3da8={'RInvV':function(_0x3b85c1,_0x5621a7,_0x1805a2){return _0x3b85c1(_0x5621a7,_0x1805a2);}};if(!_0x42f9bf)return'target';if(/^e\d+$/i['test'](_0x42f9bf))return _0x1d1470(0x24a)+_0x42f9bf;return JSON[_0x1d1470(0x253)](_0x5f3da8[_0x1d1470(0x212)](truncatePreview,_0x42f9bf,0x78));}function formatPlaywrightCliLog(_0x5f1f3b,_0x4b4b55){const _0x429863=_0x421c,_0xbd108c={'eViEb':function(_0x1b84f4,_0x596512,_0x56f1c4){return _0x1b84f4(_0x596512,_0x56f1c4);},'CyCdd':_0x429863(0x241),'wcPxN':_0x429863(0x202),'BoGjY':_0x429863(0x224),'abuMp':'stop\x20tracing','hFvBM':_0x429863(0x242),'wrrGE':'stop\x20video\x20recording','mJHlu':function(_0x270432,_0x1942fd){return _0x270432(_0x1942fd);},'difUh':_0x429863(0x259),'sugri':function(_0x290d03,_0x3f1d6f){return _0x290d03(_0x3f1d6f);},'HKCCX':'click','GTqtp':function(_0x4e6cb9,_0x2d8b22){return _0x4e6cb9(_0x2d8b22);},'JWnlE':_0x429863(0x1dc),'NkkLF':function(_0x36062a,_0x162779,_0x245b0f){return _0x36062a(_0x162779,_0x245b0f);},'YZoPE':function(_0x1418e7,_0x4d75bd){return _0x1418e7(_0x4d75bd);},'HIlpu':'tab-new','GOBFX':'select\x20tab'};switch(_0x4b4b55){case'open':{const _0x391a52=_0xbd108c[_0x429863(0x226)](extractFirstCommandArgument,_0x5f1f3b,_0x4b4b55);return _0x391a52?_0x429863(0x1ef)+_0x391a52:_0x429863(0x229);}case _0xbd108c['CyCdd']:return _0xbd108c['wcPxN'];case _0xbd108c['BoGjY']:return _0xbd108c[_0x429863(0x1f2)];case'video-start':return'start\x20video\x20recording';case _0xbd108c['hFvBM']:return _0xbd108c[_0x429863(0x209)];case _0x429863(0x25e):{const _0x15e8db=extractFilenameOption(_0x5f1f3b);if(!_0x15e8db)return'capture\x20snapshot';const {name:_0x328184}=_0xbd108c['mJHlu'](toStepDisplayName,_0x15e8db);return'capture\x20snapshot\x20`'+_0x328184+'`';}case _0xbd108c[_0x429863(0x203)]:{const _0x146c6f=_0xbd108c['mJHlu'](extractFilenameOption,_0x5f1f3b);if(!_0x146c6f)return'capture\x20screenshot';const {name:_0x28f17d,isKeyStep:_0x1f44d0}=_0xbd108c[_0x429863(0x20b)](toStepDisplayName,_0x146c6f);return _0x1f44d0?_0x429863(0x219)+_0x28f17d+'`':_0x429863(0x247)+_0x28f17d+'`';}case _0xbd108c['HKCCX']:return _0x429863(0x22e)+_0xbd108c['GTqtp'](formatCommandTarget,extractFirstCommandArgument(_0x5f1f3b,_0x4b4b55));case'check':return _0x429863(0x1ec)+formatCommandTarget(_0xbd108c[_0x429863(0x226)](extractFirstCommandArgument,_0x5f1f3b,_0x4b4b55));case _0xbd108c['JWnlE']:return'fill\x20'+formatCommandTarget(_0xbd108c[_0x429863(0x216)](extractFirstCommandArgument,_0x5f1f3b,_0x4b4b55));case'press':return _0x429863(0x22d)+_0xbd108c[_0x429863(0x255)](formatCommandTarget,_0xbd108c['eViEb'](extractFirstCommandArgument,_0x5f1f3b,_0x4b4b55));case _0x429863(0x211):return _0x429863(0x23a);case _0xbd108c[_0x429863(0x218)]:{const _0x561f6c=extractFirstCommandArgument(_0x5f1f3b,_0x4b4b55);return _0x561f6c?'open\x20new\x20tab\x20'+_0x561f6c:_0x429863(0x249);}case'tab-select':{const _0x13b7fd=_0xbd108c[_0x429863(0x226)](extractFirstCommandArgument,_0x5f1f3b,_0x4b4b55);return _0x13b7fd?'select\x20tab\x20'+_0x13b7fd:_0xbd108c['GOBFX'];}default:return _0x4b4b55;}}function extractPlaywrightCliToolDescription(_0x11adf7){const _0x2b8b64=_0x421c,_0x185804=_0x11adf7['description'];if(typeof _0x185804!=='string')return null;const _0x55760a=_0x185804[_0x2b8b64(0x1fb)]()['replace'](/\s+/g,'\x20');return _0x55760a[_0x2b8b64(0x250)]>0x0?_0x55760a:null;}export function formatPlaywrightCliConsoleLogMessage(_0x330311,_0x421f1c,_0xc49bad){const _0xa6b3e9=_0x421c,_0x9496d4={'PHjYA':function(_0x1925bf,_0x4d33c4,_0x180b41){return _0x1925bf(_0x4d33c4,_0x180b41);}},_0x1a40eb=_0x9496d4['PHjYA'](formatPlaywrightCliLog,_0x421f1c,_0xc49bad),_0xbc5552=extractPlaywrightCliToolDescription(_0x330311);if(!_0xbc5552)return _0xa6b3e9(0x20f)+_0x1a40eb;if(process['env'][_0xa6b3e9(0x263)])return'[ranger-verification-agent]\x20'+_0xbc5552+'\x20('+_0x1a40eb+')';return'[ranger-verification-agent]\x20'+_0xbc5552;}export function buildVerifyFeatureCliDebugPrompt(_0x2cd93c,_0x5e4d99){const _0x4012f8=_0x421c,_0x3a88f4={'NJzvX':'00_mozilla-homepage.yml','dSXSO':function(_0x4ba7cf,_0x3428ba,_0x1c2026){return _0x4ba7cf(_0x3428ba,_0x1c2026);},'kliHt':'02_learn-more.yml','qldKC':function(_0x1082a8,_0x2225f4,_0xdc59b3){return _0x1082a8(_0x2225f4,_0xdc59b3);},'KKNuy':function(_0x1506da,_0x4b2f65){return _0x1506da(_0x4b2f65);}},_0x2bf79e=buildCliArtifactPath(_0x5e4d99,_0x3a88f4['NJzvX']),_0x3f4ee7=_0x3a88f4['dSXSO'](buildCliArtifactPath,_0x5e4d99,_0x4012f8(0x23d)),_0x597d25=_0x3a88f4[_0x4012f8(0x221)](buildCliArtifactPath,_0x5e4d99,_0x3a88f4[_0x4012f8(0x1f0)]),_0x31c989=_0x3a88f4['qldKC'](buildCliArtifactPath,_0x5e4d99,_0x4012f8(0x215)),_0x7e0e03=quoteShellArg(_0x2bf79e),_0x51db0d=quoteShellArg(_0x3f4ee7),_0x3578c7=quoteShellArg(_0x597d25),_0x55fa23=_0x3a88f4['KKNuy'](quoteShellArg,_0x31c989);return'You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a'+_0x2cd93c+'\x0a\x0a1.\x20Run\x20`'+_0x2cd93c+_0x4012f8(0x248)+_0x2cd93c+_0x4012f8(0x1e6)+_0x2cd93c+_0x4012f8(0x1e9)+_0x5e4d99+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`'+_0x2cd93c+'\x20snapshot\x20--filename\x20'+_0x7e0e03+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x2cd93c+'\x20screenshot\x20--filename\x20'+_0x51db0d+_0x4012f8(0x205)+_0x2cd93c+'\x20snapshot\x20--filename\x20'+_0x3578c7+'`\x0a9.\x20Run\x20`'+_0x2cd93c+_0x4012f8(0x1e3)+_0x55fa23+_0x4012f8(0x235);}export function buildVerifyFeatureCliPrompt(_0x2eeba0){const _0x855f08=_0x421c,_0x328faf={'mJjWl':'en-US','MIRJy':'numeric','aZGhJ':_0x855f08(0x222),'xUGaS':_0x855f08(0x246),'HiRXK':'02_state.yml','rzYcE':'key_03_success-state.png','NobEc':function(_0x3e7174,_0x58889f){return _0x3e7174(_0x58889f);},'hjSCk':function(_0x381e2e,_0x15016c,_0x5a07dd){return _0x381e2e(_0x15016c,_0x5a07dd);},'WMgyu':_0x855f08(0x213)},{checklistItem:_0x138d56,itemFeedback:_0x499db7,taskDescription:_0x446a51,cliCommandPrefix:_0x4a3043,cliArtifactDir:_0x280fff,isCdpMode:_0x2fca04,url:_0x44305f,cdpEndpoint:_0x57b378,loginInstructions:_0x4de534}=_0x2eeba0,_0x3b1d52=buildCliArtifactPath(_0x280fff,_0x328faf['xUGaS']),_0x2bd3cc=buildCliArtifactPath(_0x280fff,_0x328faf[_0x855f08(0x1e0)]),_0x546799=buildCliArtifactPath(_0x280fff,_0x328faf[_0x855f08(0x21e)]),_0xaf980c=buildCliArtifactPath(_0x280fff,_0x855f08(0x233)),_0x4dbc7d=_0x328faf[_0x855f08(0x227)](quoteShellArg,_0x3b1d52),_0x475d71=quoteShellArg(_0x2bd3cc),_0x4f16e0=_0x328faf[_0x855f08(0x227)](quoteShellArg,_0x546799),_0x337c8a=quoteShellArg(_0xaf980c),_0x4dd92c=_0x138d56[_0x855f08(0x22c)]?_0x855f08(0x264)+_0x138d56['notes']:'';let _0x1f7c11='';if(_0x499db7&&_0x499db7[_0x855f08(0x1f8)]['length']>0x0){const _0x1ce249=_0x499db7[_0x855f08(0x1f8)]['map'](_0x4eb8e2=>{const _0x5f0eed=_0x855f08,_0x57d76d=new Date(_0x4eb8e2[_0x5f0eed(0x230)])[_0x5f0eed(0x21f)](_0x328faf['mJjWl'],{'month':'short','day':_0x328faf['MIRJy']}),_0x5079e5=_0x4eb8e2[_0x5f0eed(0x20e)]||_0x4eb8e2[_0x5f0eed(0x207)]||_0x5f0eed(0x260),_0x3e0c16=_0x4eb8e2[_0x5f0eed(0x210)]?'\x20(on\x20element:\x20<'+(_0x4eb8e2['domRef'][_0x5f0eed(0x1fd)]['split'](_0x328faf['aZGhJ'])['pop']()?.[_0x5f0eed(0x1ea)](':')[0x0]||'element')+_0x5f0eed(0x237)+(_0x4eb8e2[_0x5f0eed(0x210)]['textContent']||'')[_0x5f0eed(0x256)](0x0,0x32)+'\x22)':'';return _0x5f0eed(0x23f)+_0x4eb8e2['id']+_0x5f0eed(0x21c)+_0x5079e5+'**\x20('+_0x57d76d+_0x5f0eed(0x22b)+_0x4eb8e2[_0x5f0eed(0x200)]+'\x22'+_0x3e0c16;})['join']('\x0a');_0x1f7c11='\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'+_0x1ce249;}const _0x27fd2a=_0x499db7?.['canonicalFlow']?_0x855f08(0x225)+_0x499db7[_0x855f08(0x267)]:'',_0x1faa28=_0x2fca04?_0x855f08(0x208)+_0x57b378+'.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.':_0x855f08(0x23c)+_0x44305f+_0x855f08(0x1dd),_0x352c44=_0x44305f?quoteShellArg(_0x44305f):'',_0x205686=_0x2fca04?_0x855f08(0x22f)+_0x4a3043+_0x855f08(0x220)+_0x4a3043+_0x855f08(0x1ed)+_0x4a3043+_0x855f08(0x1f6)+_0x280fff+_0x855f08(0x25d)+_0x4a3043+_0x855f08(0x24d)+_0x4dbc7d+'`\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`'+_0x4a3043+'\x20screenshot\x20--filename\x20'+_0x337c8a+_0x855f08(0x1f5)+_0x4a3043+_0x855f08(0x20d):_0x855f08(0x22f)+_0x4a3043+_0x855f08(0x24f)+_0x352c44+_0x855f08(0x24b)+_0x4a3043+_0x855f08(0x1ed)+_0x4a3043+_0x855f08(0x1f6)+_0x280fff+_0x855f08(0x25d)+_0x4a3043+_0x855f08(0x24d)+_0x4dbc7d+_0x855f08(0x1fe)+_0x4a3043+_0x855f08(0x1e3)+_0x337c8a+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x4a3043+_0x855f08(0x1e5),_0x4f3138=_0x2fca04?'\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.':_0x855f08(0x251),_0x353496=_0x4de534?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x4de534+_0x855f08(0x1f1):'';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'+_0x138d56['description']+_0x4dd92c+_0x1f7c11+_0x27fd2a+'\x0a\x0a##\x20Task\x20to\x20Execute\x0a'+_0x446a51+'\x0a\x0a'+_0x1faa28+_0x353496+'\x0a\x0a'+_0x205686+_0x855f08(0x261)+_0x4a3043+'`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`'+_0x280fff+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x475d71+'`\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'+_0x4f16e0+'`\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`'+_0x280fff+_0x855f08(0x20c)+_0xaf980c+_0x855f08(0x23e)+_0x328faf[_0x855f08(0x1df)](buildCliArtifactPath,_0x280fff,_0x855f08(0x231))+'\x22,\x20\x22'+_0x328faf[_0x855f08(0x1df)](buildCliArtifactPath,_0x280fff,_0x328faf['WMgyu'])+'\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(_0x280fff,_0x855f08(0x1ee))+'\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'+_0x4f3138+_0x855f08(0x269);}export function summarizeVerifyFeatureCliCommandAvailability(_0x3a6501){const _0x4b7f5e=_0x421c,_0x173a87={'ryQUk':function(_0x5b4b05,_0x1af4c){return _0x5b4b05===_0x1af4c;}},_0x39480b=[..._0x3a6501[_0x4b7f5e(0x1e1)]()]['sort']();let _0x2f1759=0x0;for(const _0x199503 of _0x3a6501['values']()){_0x2f1759+=_0x199503;}return{'cliCommandCount':_0x2f1759,'cliCommandsSeen':_0x39480b,'noCliCommandsCalled':_0x173a87[_0x4b7f5e(0x243)](_0x2f1759,0x0)};}export function createVerifyFeatureCliHooks(_0x2ff677){const _0x409505=_0x421c,_0x2fdd3b={'fXPOS':'PostToolUse','GRqUW':function(_0x8a3b57,_0x1c944c){return _0x8a3b57+_0x1c944c;},'oMvkC':_0x409505(0x1e8),'OztzJ':'tool_call','zanNQ':function(_0x210dcd,_0x367815){return _0x210dcd(_0x367815);},'zMWqz':function(_0x470e6d,_0x3c1130){return _0x470e6d!==_0x3c1130;},'tuNWa':_0x409505(0x254),'prktP':function(_0x4a4411,_0x2ab1cd){return _0x4a4411!==_0x2ab1cd;},'yivVb':'Bash'},_0x4c23a2=new Map(),_0xd2e6e5=async _0x39f49f=>{const _0x48ff8c=_0x409505;if(_0x39f49f['hook_event_name']!==_0x2fdd3b['fXPOS'])return{};const _0x43d23d=_0x39f49f;if(_0x43d23d[_0x48ff8c(0x232)]!=='Bash')return{};const _0x4a6224=_0x43d23d[_0x48ff8c(0x1eb)],_0x586c39=extractBashCommand(_0x4a6224);if(!_0x586c39)return{};const _0x8748d3=parsePlaywrightCliCommand(_0x586c39);if(!_0x8748d3)return{};return _0x4c23a2['set'](_0x8748d3,_0x2fdd3b['GRqUW'](_0x4c23a2[_0x48ff8c(0x24c)](_0x8748d3)||0x0,0x1)),_0x2ff677[_0x48ff8c(0x258)]('tool_call',{'transport':_0x2fdd3b[_0x48ff8c(0x1fa)],'toolName':_0x8748d3}),_0x2ff677['trackPhaseEnd'](_0x2fdd3b[_0x48ff8c(0x1e4)],{'transport':_0x2fdd3b[_0x48ff8c(0x1fa)],'toolName':_0x8748d3,'bashCommandPreview':_0x2fdd3b['zanNQ'](truncatePreview,_0x586c39)}),_0x2fdd3b[_0x48ff8c(0x240)](_0x8748d3,_0x48ff8c(0x25e))&&console[_0x48ff8c(0x24e)](formatPlaywrightCliConsoleLogMessage(_0x4a6224,_0x586c39,_0x8748d3)),{};},_0xc212b1=async _0x5695f4=>{const _0x454796=_0x409505;if(_0x5695f4['hook_event_name']!==_0x2fdd3b['tuNWa'])return{};const _0x11d029=_0x5695f4;if(_0x2fdd3b[_0x454796(0x21a)](_0x11d029[_0x454796(0x232)],_0x2fdd3b[_0x454796(0x239)]))return{};return await _0x2ff677['trackPhaseError']('tool_failure',_0x11d029['error'],{'transport':_0x2fdd3b['oMvkC'],'toolName':_0x454796(0x245)}),{};};return{'postToolUseHook':_0xd2e6e5,'postToolUseFailureHook':_0xc212b1,'commandCounts':_0x4c23a2};}async function runPlaywrightCliLifecycleCommand(_0x3a13a7){const _0x189831=_0x421c,_0x4dbc5d={'vasrE':function(_0x5e0935,_0x3892bc){return _0x5e0935(_0x3892bc);},'nshha':function(_0x2e5498,_0x14508c){return _0x2e5498??_0x14508c;}},{sessionId:_0x20e57c,configPath:_0x17a60e,commandArgs:_0x1aafac,env:_0x12e0e9,telemetry:_0xb3829b,phase:_0x3635a3,metadata:_0x18d2b3,timeoutMs:_0x1ad3c4}=_0x3a13a7;_0xb3829b['trackPhaseStart'](_0x3635a3,_0x18d2b3);try{const _0x5edfb5=await _0x4dbc5d[_0x189831(0x1f9)](runPlaywrightCliCommand,{'sessionId':_0x20e57c,'configPath':_0x17a60e,'commandArgs':_0x1aafac,'cwd':process[_0x189831(0x21d)](),'env':_0x12e0e9,'timeoutMs':_0x4dbc5d[_0x189831(0x268)](_0x1ad3c4,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0xb3829b[_0x189831(0x244)](_0x3635a3,{..._0x18d2b3,'subcommand':_0x5edfb5[_0x189831(0x25b)]['subcommand'],'stdoutPreview':truncatePreview(_0x5edfb5[_0x189831(0x25f)],0x7d0),'stderrPreview':truncatePreview(_0x5edfb5['stderr'],0x7d0)});}catch(_0x41c1ac){await _0xb3829b[_0x189831(0x228)](_0x3635a3,_0x41c1ac,_0x18d2b3);throw _0x41c1ac;}}export async function finalizeVerifyFeatureCliSession(_0x518d7a){const _0x485f9a=_0x421c,_0xe0ce07={'VAhSX':'playwright_cli_tracing_stop','cFIdj':'tracing-stop','FJEzu':function(_0x32661c,_0x4108ce,_0x45f8e7){return _0x32661c(_0x4108ce,_0x45f8e7);},'vNGoq':'session-recording.webm','BYpqX':_0x485f9a(0x223)},{telemetry:_0x100986,sessionId:_0x1cde0e,configPath:_0x5aa928,cliArtifactDir:_0x38d66e,env:_0x290dea,transportMetadata:_0x3c3807}=_0x518d7a,_0x7370d2=[{'phase':_0xe0ce07['VAhSX'],'commandArgs':[_0xe0ce07['cFIdj']]},{'phase':_0x485f9a(0x1fc),'commandArgs':[_0x485f9a(0x242),_0x485f9a(0x1de)+_0xe0ce07['FJEzu'](buildCliArtifactPath,_0x38d66e,_0xe0ce07['vNGoq'])]},{'phase':_0xe0ce07[_0x485f9a(0x238)],'commandArgs':[_0x485f9a(0x23b)]}];for(const _0x3079cf of _0x7370d2){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x1cde0e,'configPath':_0x5aa928,'commandArgs':[..._0x3079cf[_0x485f9a(0x1f4)]],'env':_0x290dea,'telemetry':_0x100986,'phase':_0x3079cf[_0x485f9a(0x1e2)],'metadata':_0x3c3807});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x466571){const _0x392640={'rhGXr':'trace.zip','fHOXv':'trace.trace.zip','bHoVn':function(_0x261e63,_0x5a7c24,_0x4c5508){return _0x261e63(_0x5a7c24,_0x4c5508);}},_0x257ea5=[_0x392640['rhGXr'],_0x392640['fHOXv']];for(const _0x26b145 of _0x257ea5){const _0x42b4d5=_0x392640['bHoVn'](join,_0x466571,_0x26b145);try{return{'buffer':await readFile(_0x42b4d5),'source':_0x42b4d5};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0xfefd80){const _0x2b75f1=_0x421c,_0x57e1aa={'ufnsj':function(_0x315e63,_0x1334f7,_0x3d0743){return _0x315e63(_0x1334f7,_0x3d0743);},'RNRnS':function(_0x410649,_0x79912a){return _0x410649(_0x79912a);},'Ylykl':function(_0x266dda,_0x5a8930){return _0x266dda<_0x5a8930;}},{cwd:_0xdddfc1,cliArtifactDir:_0x17f1a6,startTime:_0x5107e2}=_0xfefd80,_0x25eec7=[];await _0x57e1aa['ufnsj'](mkdir,_0x17f1a6,{'recursive':!![]});const _0x2e1ce9=await readdir(_0xdddfc1,{'withFileTypes':!![]});for(const _0x5b0f28 of _0x2e1ce9){if(!_0x5b0f28['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN[_0x2b75f1(0x25c)](_0x5b0f28[_0x2b75f1(0x1ff)]))continue;const _0x1b0707=_0x57e1aa[_0x2b75f1(0x257)](join,_0xdddfc1,_0x5b0f28[_0x2b75f1(0x1ff)]),_0x36bd4b=await _0x57e1aa['RNRnS'](stat,_0x1b0707);if(_0x57e1aa['Ylykl'](_0x36bd4b[_0x2b75f1(0x266)]+0x7d0,_0x5107e2))continue;const _0x2abc9b=buildCliArtifactPath(_0x17f1a6,_0x5b0f28['name']);if(_0x1b0707===_0x2abc9b)continue;await rename(_0x1b0707,_0x2abc9b),_0x25eec7[_0x2b75f1(0x265)](_0x5b0f28['name']);}return _0x25eec7[_0x2b75f1(0x204)]();}function _0x4b14(){const _0x3b85f3=['open\x20new\x20tab','ref\x20','`,\x20then\x20`','get','\x20snapshot\x20--filename\x20','log','\x20open\x20','length','\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.','178015UqEsWi','stringify','PostToolUseFailure','YZoPE','slice','ufnsj','trackPhaseStart','screenshot','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','invocation','test','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','snapshot','stdout','Reviewer','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','36uwnvfE','DEBUG','\x0a\x0a##\x20Additional\x20Notes\x0a','push','mtimeMs','canonicalFlow','nshha','\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.','4YSKrBN','fill','\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','--filename=','hjSCk','HiRXK','keys','phase','\x20screenshot\x20--filename\x20','OztzJ','\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','\x20tracing-start`\x0a3.\x20Run\x20`','AardL','playwright-cli','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','split','tool_input','check\x20','\x20tracing-start`,\x20then\x20`','key_04_success-state.png','open\x20','kliHt','\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.','abuMp','757001KVDDyg','commandArgs','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','...','unaddressedComments','vasrE','oMvkC','trim','playwright_cli_video_stop','selector','`\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`','name','content','215814bgACYq','start\x20tracing','difUh','sort','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','\x5c$&','authorEmail','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','wrrGE','1331392XGxIjT','sugri','`:\x20\x22','\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','authorName','[playwright-cli]\x20','domRef','run-code','RInvV','03_result-visible.png','18iSCRNY','03_learn-more.png','NkkLF','replace','HIlpu','capture\x20key\x20step\x20`','prktP','match',']\x20**','cwd','rzYcE','toLocaleDateString','\x20open`,\x20then\x20`','dSXSO','\x20>\x20','playwright_cli_close','tracing-stop','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','eViEb','NobEc','trackPhaseError','open\x20browser','1895590gVHZHK','):\x20\x22','notes','press\x20','click\x20','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','createdAt','02_button-clicked.png','tool_name','01_initial-state.png','3427856ldVuRJ','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','299209HnGfnn','>\x20\x22','BYpqX','yivVb','run\x20custom\x20Playwright\x20code','close','CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20','01_mozilla-homepage.png','\x22,\x20\x22','-\x20[','zMWqz','tracing-start','video-stop','ryQUk','trackPhaseEnd','Bash','01_initial.yml','capture\x20step\x20`','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`'];_0x4b14=function(){return _0x3b85f3;};return _0x4b14();}
1
+ (function(_0x18d502,_0x5b1b28){const _0x3a1625=_0x3816,_0x355bfc=_0x18d502();while(!![]){try{const _0x1720f9=parseInt(_0x3a1625(0x121))/0x1*(-parseInt(_0x3a1625(0x13c))/0x2)+parseInt(_0x3a1625(0x173))/0x3+parseInt(_0x3a1625(0x153))/0x4*(-parseInt(_0x3a1625(0x14c))/0x5)+-parseInt(_0x3a1625(0x188))/0x6+parseInt(_0x3a1625(0x12b))/0x7*(parseInt(_0x3a1625(0x14d))/0x8)+-parseInt(_0x3a1625(0x176))/0x9*(-parseInt(_0x3a1625(0x17b))/0xa)+parseInt(_0x3a1625(0x177))/0xb*(parseInt(_0x3a1625(0x129))/0xc);if(_0x1720f9===_0x5b1b28)break;else _0x355bfc['push'](_0x355bfc['shift']());}catch(_0x2fd36a){_0x355bfc['push'](_0x355bfc['shift']());}}}(_0xd62d,0xaf260));import{mkdir,readFile,readdir,rename,stat}from'fs/promises';import{basename,join}from'path';function _0x3816(_0x36474b,_0x3c2b2d){_0x36474b=_0x36474b-0x103;const _0xd62d62=_0xd62d();let _0x3816af=_0xd62d62[_0x36474b];return _0x3816af;}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(_0x444994,_0x6ba93c=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x2810ff=_0x3816,_0x1d53c3={'AXlRR':function(_0x3f7b3a,_0x48f7dc){return _0x3f7b3a+_0x48f7dc;},'lKgUq':'...'};return _0x444994['length']>_0x6ba93c?_0x1d53c3['AXlRR'](_0x444994[_0x2810ff(0x16e)](0x0,_0x6ba93c),_0x1d53c3['lKgUq']):_0x444994;}function buildCliArtifactPath(_0x4443ff,_0x2f5c78){return join(_0x4443ff,_0x2f5c78);}function toStepDisplayName(_0x43dfdc){const _0x593b49=_0x3816,_0x1836c6=basename(_0x43dfdc)['replace'](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')['replace'](/^\d+_/,'')[_0x593b49(0x13b)](/-/g,'\x20');return{'name':_0x1836c6,'isKeyStep':/^key_/i[_0x593b49(0x10a)](basename(_0x43dfdc))};}function extractShellValue(_0x1b35c6){if(!_0x1b35c6)return null;return _0x1b35c6[0x1]??_0x1b35c6[0x2]??_0x1b35c6[0x3]??null;}function extractFilenameOption(_0x58b72f){return extractShellValue(_0x58b72f['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0xc52965,_0x43df9d){const _0x56a521=_0x3816,_0x1541d6={'IpvAz':'\x5c$&','gPWvr':function(_0x20a298,_0x3012f5){return _0x20a298(_0x3012f5);}},_0x4b2f73=_0x43df9d['replace'](/[.*+?^${}()|[\]\\]/g,_0x1541d6[_0x56a521(0x10b)]);return _0x1541d6['gPWvr'](extractShellValue,_0xc52965['match'](new RegExp('(?:^|\x5cs)'+_0x4b2f73+_0x56a521(0x184))));}function _0xd62d(){const _0x3ff655=['`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','commandArgs','open\x20new\x20tab','GWzmy','authorName','hxnbg','--filename=','03_learn-more.png','01_initial-state.png','`\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`','slice','keys','invocation','clBzV','notes','1734879FykGJu','short','\x20snapshot\x20--filename\x20','1278qtPWjO','33CXDxhS','capture\x20snapshot','\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','QgSfP','64360SzxOkV','npxtt','SjYgO','BDeQM','\x20tracing-start`\x0a3.\x20Run\x20`','-\x20[','open\x20new\x20tab\x20','\x20(on\x20element:\x20<','\x20open`,\x20then\x20`','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','gETUO','env','3227592yKqLVD','pop','\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','`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`','\x0a\x0a1.\x20Run\x20`','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','\x0a\x0aAfter\x20completing\x20authentication,\x20proceed\x20with\x20the\x20verification\x20task\x20below.\x0aIf\x20authentication\x20fails,\x20return\x20immediately\x20with\x20evaluation\x20\x22blocked\x22\x20and\x20describe\x20the\x20auth\x20failure.','press','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','click\x20','createdAt','CQALy','test','IpvAz','hook_event_name','**\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`','snapshot','key_04_success-state.png','trace.zip','playwright_cli_video_stop','`,\x20then\x20`','ClJrY','tracing-stop','run\x20custom\x20Playwright\x20code','meFEn','textContent','TNhMk','Bash','stderr','authorEmail','numeric','`\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','isFile','\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.','507082HjLGLk','close','tool_call','canonicalFlow','bfMxk','trackPhaseEnd','rnaUL','selector','6054564iSvBpD','KohhG','14MopNIV','open','02_learn-more.yml','kbdsU','select\x20tab','GbsBh','target','split','stop\x20video\x20recording','jbunm','00_mozilla-homepage.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','MSYIy','wiRKT','CAJvN','playwright-cli','replace','2xEGQBF','name','tool_name','length','map','\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a9.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a10.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario','set','YOjPz','key_03_success-state.png','[ranger-verification-agent]\x20','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','click','WtXBv','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','video-start','19250ZAKMKL','647304lzQXQg','\x20screenshot\x20--filename\x20','DYmCP','`\x0a9.\x20Run\x20`','trace.trace.zip','UBVcB','1460BxLZhq','OLIni','join','error','ckGUf','open\x20browser','content','EAcfj','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','tool_input','\x20open\x20','FzMJW','Reviewer','sort','01_initial.yml','FXRJQ','check'];_0xd62d=function(){return _0x3ff655;};return _0xd62d();}function formatCommandTarget(_0x4cd515){const _0x352ccf=_0x3816;if(!_0x4cd515)return _0x352ccf(0x131);if(/^e\d+$/i[_0x352ccf(0x10a)](_0x4cd515))return'ref\x20'+_0x4cd515;return JSON['stringify'](truncatePreview(_0x4cd515,0x78));}function formatPlaywrightCliLog(_0x93a6c1,_0x5beca8){const _0x5c2113=_0x3816,_0x5c453a={'qpzZr':_0x5c2113(0x12c),'meFEn':function(_0x2a1dcb,_0xbf6c87,_0x141476){return _0x2a1dcb(_0xbf6c87,_0x141476);},'DhDON':'tracing-start','wiRKT':'start\x20tracing','xhEaK':'start\x20video\x20recording','CQALy':_0x5c2113(0x133),'lhnJI':_0x5c2113(0x10f),'qsnDA':function(_0x21c7eb,_0x19f4e0){return _0x21c7eb(_0x19f4e0);},'HyRtZ':function(_0x532b9f,_0x3c1bdc){return _0x532b9f(_0x3c1bdc);},'YJXkN':_0x5c2113(0x163),'SXFeU':'fill','OLIni':function(_0x46bd4c,_0x1d161a){return _0x46bd4c(_0x1d161a);},'RKtoZ':'tab-select','EVJnL':_0x5c2113(0x12f)};switch(_0x5beca8){case _0x5c453a['qpzZr']:{const _0x408e46=_0x5c453a[_0x5c2113(0x117)](extractFirstCommandArgument,_0x93a6c1,_0x5beca8);return _0x408e46?'open\x20'+_0x408e46:_0x5c2113(0x158);}case _0x5c453a['DhDON']:return _0x5c453a[_0x5c2113(0x138)];case'tracing-stop':return'stop\x20tracing';case _0x5c2113(0x14b):return _0x5c453a['xhEaK'];case'video-stop':return _0x5c453a[_0x5c2113(0x109)];case _0x5c453a['lhnJI']:{const _0x23d1da=extractFilenameOption(_0x93a6c1);if(!_0x23d1da)return _0x5c2113(0x178);const {name:_0x9fc40e}=toStepDisplayName(_0x23d1da);return'capture\x20snapshot\x20`'+_0x9fc40e+'`';}case'screenshot':{const _0x56dd7a=extractFilenameOption(_0x93a6c1);if(!_0x56dd7a)return'capture\x20screenshot';const {name:_0x40fa74,isKeyStep:_0x2907d4}=_0x5c453a['qsnDA'](toStepDisplayName,_0x56dd7a);return _0x2907d4?'capture\x20key\x20step\x20`'+_0x40fa74+'`':'capture\x20step\x20`'+_0x40fa74+'`';}case _0x5c2113(0x147):return _0x5c2113(0x107)+_0x5c453a['HyRtZ'](formatCommandTarget,extractFirstCommandArgument(_0x93a6c1,_0x5beca8));case _0x5c453a['YJXkN']:return'check\x20'+formatCommandTarget(extractFirstCommandArgument(_0x93a6c1,_0x5beca8));case _0x5c453a['SXFeU']:return'fill\x20'+_0x5c453a[_0x5c2113(0x154)](formatCommandTarget,extractFirstCommandArgument(_0x93a6c1,_0x5beca8));case _0x5c2113(0x105):return'press\x20'+_0x5c453a[_0x5c2113(0x154)](formatCommandTarget,_0x5c453a['meFEn'](extractFirstCommandArgument,_0x93a6c1,_0x5beca8));case'run-code':return _0x5c2113(0x116);case'tab-new':{const _0x31306c=extractFirstCommandArgument(_0x93a6c1,_0x5beca8);return _0x31306c?_0x5c2113(0x181)+_0x31306c:_0x5c2113(0x166);}case _0x5c453a['RKtoZ']:{const _0xe10a13=extractFirstCommandArgument(_0x93a6c1,_0x5beca8);return _0xe10a13?'select\x20tab\x20'+_0xe10a13:_0x5c453a['EVJnL'];}default:return _0x5beca8;}}function extractPlaywrightCliToolDescription(_0x2ab466){const _0x56ce2=_0x3816,_0x567eca={'KohhG':function(_0x2e6bab,_0x129c45){return _0x2e6bab>_0x129c45;}},_0x540bc6=_0x2ab466['description'];if(typeof _0x540bc6!=='string')return null;const _0x41c091=_0x540bc6['trim']()[_0x56ce2(0x13b)](/\s+/g,'\x20');return _0x567eca[_0x56ce2(0x12a)](_0x41c091[_0x56ce2(0x13f)],0x0)?_0x41c091:null;}export function formatPlaywrightCliConsoleLogMessage(_0x541d57,_0x592458,_0x54c27b){const _0x41e450=_0x3816,_0x10a42f={'jCiMM':function(_0xf45fad,_0xdf6f03,_0x22222f){return _0xf45fad(_0xdf6f03,_0x22222f);}},_0x184c6c=_0x10a42f['jCiMM'](formatPlaywrightCliLog,_0x592458,_0x54c27b),_0x2ae345=extractPlaywrightCliToolDescription(_0x541d57);if(!_0x2ae345)return'[playwright-cli]\x20'+_0x184c6c;if(process[_0x41e450(0x187)]['DEBUG'])return _0x41e450(0x145)+_0x2ae345+'\x20('+_0x184c6c+')';return _0x41e450(0x145)+_0x2ae345;}export function buildVerifyFeatureCliDebugPrompt(_0x5b6150,_0x1002f4){const _0x4a0aeb=_0x3816,_0x57f012={'SjYgO':function(_0x48b1c1,_0x1b2b38,_0xfdba39){return _0x48b1c1(_0x1b2b38,_0xfdba39);},'zjdAL':_0x4a0aeb(0x12d),'npxtt':function(_0x39cee9,_0x405e55){return _0x39cee9(_0x405e55);}},_0x545532=_0x57f012[_0x4a0aeb(0x17d)](buildCliArtifactPath,_0x1002f4,_0x4a0aeb(0x135)),_0x577f3a=_0x57f012[_0x4a0aeb(0x17d)](buildCliArtifactPath,_0x1002f4,'01_mozilla-homepage.png'),_0xca6536=_0x57f012[_0x4a0aeb(0x17d)](buildCliArtifactPath,_0x1002f4,_0x57f012['zjdAL']),_0x4dbe80=buildCliArtifactPath(_0x1002f4,_0x4a0aeb(0x16b)),_0x5548fd=quoteShellArg(_0x545532),_0x2c75c9=quoteShellArg(_0x577f3a),_0x58d3d0=quoteShellArg(_0xca6536),_0x18586e=_0x57f012[_0x4a0aeb(0x17c)](quoteShellArg,_0x4dbe80);return _0x4a0aeb(0x185)+_0x5b6150+_0x4a0aeb(0x18c)+_0x5b6150+'\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`'+_0x5b6150+_0x4a0aeb(0x17f)+_0x5b6150+'\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x1002f4+_0x4a0aeb(0x146)+_0x5b6150+'\x20snapshot\x20--filename\x20'+_0x5548fd+_0x4a0aeb(0x18b)+_0x5b6150+_0x4a0aeb(0x14e)+_0x2c75c9+'`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`'+_0x5b6150+_0x4a0aeb(0x175)+_0x58d3d0+_0x4a0aeb(0x150)+_0x5b6150+'\x20screenshot\x20--filename\x20'+_0x18586e+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0xf574c0){const _0x4f2352=_0x3816,_0x36df48={'tWUkz':'en-US','EAcfj':_0x4f2352(0x174),'ckGUf':_0x4f2352(0x11d),'XAgQA':_0x4f2352(0x15f),'QgSfP':'\x20>\x20','GWzmy':'element','rnaUL':function(_0x3a0237,_0x561dbf,_0x507ef0){return _0x3a0237(_0x561dbf,_0x507ef0);},'bfMxk':'02_state.yml','GbsBh':function(_0x50df3b,_0x1d88b1,_0x50a258){return _0x50df3b(_0x1d88b1,_0x50a258);},'iPynj':function(_0x4c0e13,_0x3eb26f){return _0x4c0e13(_0x3eb26f);},'FuTDb':function(_0x51ce4e,_0x367de9){return _0x51ce4e(_0x367de9);},'kbdsU':'02_button-clicked.png','DYmCP':'03_result-visible.png','jbunm':_0x4f2352(0x110)},{checklistItem:_0x3cc1ef,itemFeedback:_0xf0b1b1,taskDescription:_0x52a49,cliCommandPrefix:_0x5f0f76,cliArtifactDir:_0x140061,isCdpMode:_0x1e84cc,url:_0x332e04,cdpEndpoint:_0x3cb580,loginInstructions:_0x5369e3}=_0xf574c0,_0x14a8ba=buildCliArtifactPath(_0x140061,_0x4f2352(0x161)),_0x449da1=_0x36df48[_0x4f2352(0x127)](buildCliArtifactPath,_0x140061,_0x36df48[_0x4f2352(0x125)]),_0x5c2f2a=_0x36df48['GbsBh'](buildCliArtifactPath,_0x140061,_0x4f2352(0x144)),_0x4b2bd2=_0x36df48[_0x4f2352(0x130)](buildCliArtifactPath,_0x140061,_0x4f2352(0x16c)),_0x2646fb=quoteShellArg(_0x14a8ba),_0x75b2cb=quoteShellArg(_0x449da1),_0x303383=_0x36df48['iPynj'](quoteShellArg,_0x5c2f2a),_0x2c289f=_0x36df48['FuTDb'](quoteShellArg,_0x4b2bd2),_0x1728bc=_0x3cc1ef[_0x4f2352(0x172)]?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x3cc1ef[_0x4f2352(0x172)]:'';let _0x3d4bcd='';if(_0xf0b1b1&&_0xf0b1b1['unaddressedComments'][_0x4f2352(0x13f)]>0x0){const _0x19bf5a=_0xf0b1b1['unaddressedComments'][_0x4f2352(0x140)](_0x5427f2=>{const _0x24a640=_0x4f2352,_0x15be93=new Date(_0x5427f2[_0x24a640(0x108)])['toLocaleDateString'](_0x36df48['tWUkz'],{'month':_0x36df48[_0x24a640(0x15a)],'day':_0x36df48[_0x24a640(0x157)]}),_0x5b488f=_0x5427f2[_0x24a640(0x168)]||_0x5427f2[_0x24a640(0x11c)]||_0x36df48['XAgQA'],_0x15db18=_0x5427f2['domRef']?_0x24a640(0x182)+(_0x5427f2['domRef'][_0x24a640(0x128)][_0x24a640(0x132)](_0x36df48[_0x24a640(0x17a)])[_0x24a640(0x189)]()?.['split'](':')[0x0]||_0x36df48[_0x24a640(0x167)])+'>\x20\x22'+(_0x5427f2['domRef'][_0x24a640(0x118)]||'')['slice'](0x0,0x32)+'\x22)':'';return _0x24a640(0x180)+_0x5427f2['id']+']\x20**'+_0x5b488f+_0x24a640(0x10d)+_0x15be93+'):\x20\x22'+_0x5427f2[_0x24a640(0x159)]+'\x22'+_0x15db18;})[_0x4f2352(0x155)]('\x0a');_0x3d4bcd=_0x4f2352(0x179)+_0x19bf5a;}const _0x59429c=_0xf0b1b1?.[_0x4f2352(0x124)]?'\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a'+_0xf0b1b1[_0x4f2352(0x124)]:'',_0x2dad88=_0x1e84cc?_0x4f2352(0x149)+_0x3cb580+'.\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'+_0x332e04+_0x4f2352(0x18a),_0x424e39=_0x332e04?quoteShellArg(_0x332e04):'',_0x131aaf=_0x1e84cc?_0x4f2352(0x14a)+_0x5f0f76+_0x4f2352(0x183)+_0x5f0f76+'\x20tracing-start`,\x20then\x20`'+_0x5f0f76+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x140061+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x5f0f76+'\x20snapshot\x20--filename\x20'+_0x2646fb+'`\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`'+_0x5f0f76+_0x4f2352(0x14e)+_0x2c289f+_0x4f2352(0x103)+_0x5f0f76+_0x4f2352(0x136):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x5f0f76+_0x4f2352(0x15d)+_0x424e39+_0x4f2352(0x113)+_0x5f0f76+'\x20tracing-start`,\x20then\x20`'+_0x5f0f76+_0x4f2352(0x106)+_0x140061+'`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`'+_0x5f0f76+_0x4f2352(0x175)+_0x2646fb+_0x4f2352(0x16d)+_0x5f0f76+_0x4f2352(0x14e)+_0x2c289f+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x5f0f76+_0x4f2352(0x141),_0x3261fe=_0x1e84cc?'\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.':_0x4f2352(0x120),_0x207a52=_0x5369e3?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x5369e3+_0x4f2352(0x104):'';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'+_0x3cc1ef['description']+_0x1728bc+_0x3d4bcd+_0x59429c+_0x4f2352(0x15b)+_0x52a49+'\x0a\x0a'+_0x2dad88+_0x207a52+'\x0a\x0a'+_0x131aaf+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x5f0f76+_0x4f2352(0x164)+_0x140061+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x75b2cb+_0x4f2352(0x11e)+_0x303383+_0x4f2352(0x10e)+_0x140061+'`:\x20\x22'+_0x4b2bd2+'\x22,\x20\x22'+buildCliArtifactPath(_0x140061,_0x36df48[_0x4f2352(0x12e)])+'\x22,\x20\x22'+buildCliArtifactPath(_0x140061,_0x36df48[_0x4f2352(0x14f)])+'\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(_0x140061,_0x36df48[_0x4f2352(0x134)])+'\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'+_0x3261fe+'\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(_0x47eb57){const _0x33bd83=_0x3816,_0x4b7fd2={'XetJI':function(_0x5727d4,_0x1ec8eb){return _0x5727d4===_0x1ec8eb;}},_0x16b19d=[..._0x47eb57[_0x33bd83(0x16f)]()]['sort']();let _0x17339a=0x0;for(const _0x547571 of _0x47eb57['values']()){_0x17339a+=_0x547571;}return{'cliCommandCount':_0x17339a,'cliCommandsSeen':_0x16b19d,'noCliCommandsCalled':_0x4b7fd2['XetJI'](_0x17339a,0x0)};}export function createVerifyFeatureCliHooks(_0x77aade){const _0xbe2e71=_0x3816,_0x546196={'wXlxZ':function(_0x309f67,_0xfe0687){return _0x309f67!==_0xfe0687;},'WtXBv':function(_0x1cca6e,_0x2b8f83){return _0x1cca6e!==_0x2b8f83;},'hxnbg':'Bash','CAJvN':_0xbe2e71(0x123),'UBVcB':_0xbe2e71(0x13a),'wyMSm':function(_0x337753,_0xb9b38c){return _0x337753(_0xb9b38c);},'ClJrY':'snapshot','fRmnC':'PostToolUseFailure'},_0x2435a9=new Map(),_0x5cc998=async _0x3a0a78=>{const _0x1152e8=_0xbe2e71;if(_0x546196['wXlxZ'](_0x3a0a78['hook_event_name'],'PostToolUse'))return{};const _0x49d562=_0x3a0a78;if(_0x546196[_0x1152e8(0x148)](_0x49d562[_0x1152e8(0x13e)],_0x546196[_0x1152e8(0x169)]))return{};const _0x3f0376=_0x49d562[_0x1152e8(0x15c)],_0x38ba37=extractBashCommand(_0x3f0376);if(!_0x38ba37)return{};const _0x85b5f7=parsePlaywrightCliCommand(_0x38ba37);if(!_0x85b5f7)return{};return _0x2435a9[_0x1152e8(0x142)](_0x85b5f7,(_0x2435a9['get'](_0x85b5f7)||0x0)+0x1),_0x77aade['trackPhaseStart'](_0x546196[_0x1152e8(0x139)],{'transport':_0x546196['UBVcB'],'toolName':_0x85b5f7}),_0x77aade[_0x1152e8(0x126)](_0x546196['CAJvN'],{'transport':_0x546196[_0x1152e8(0x152)],'toolName':_0x85b5f7,'bashCommandPreview':_0x546196['wyMSm'](truncatePreview,_0x38ba37)}),_0x85b5f7!==_0x546196[_0x1152e8(0x114)]&&console['log'](formatPlaywrightCliConsoleLogMessage(_0x3f0376,_0x38ba37,_0x85b5f7)),{};},_0x394e88=async _0x46ce2c=>{const _0x440a14=_0xbe2e71;if(_0x46ce2c[_0x440a14(0x10c)]!==_0x546196['fRmnC'])return{};const _0x2c6d0c=_0x46ce2c;if(_0x2c6d0c['tool_name']!==_0x546196[_0x440a14(0x169)])return{};return await _0x77aade['trackPhaseError']('tool_failure',_0x2c6d0c[_0x440a14(0x156)],{'transport':_0x440a14(0x13a),'toolName':_0x440a14(0x11a)}),{};};return{'postToolUseHook':_0x5cc998,'postToolUseFailureHook':_0x394e88,'commandCounts':_0x2435a9};}async function runPlaywrightCliLifecycleCommand(_0x4c9a33){const _0x5955b5=_0x3816,{sessionId:_0x36d9e5,configPath:_0xb3fc3a,commandArgs:_0x410a8f,env:_0x1939aa,telemetry:_0x1adbb5,phase:_0x2bb929,metadata:_0x2c2726,timeoutMs:_0x1e5d62}=_0x4c9a33;_0x1adbb5['trackPhaseStart'](_0x2bb929,_0x2c2726);try{const _0x35297c=await runPlaywrightCliCommand({'sessionId':_0x36d9e5,'configPath':_0xb3fc3a,'commandArgs':_0x410a8f,'cwd':process['cwd'](),'env':_0x1939aa,'timeoutMs':_0x1e5d62??PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS});_0x1adbb5['trackPhaseEnd'](_0x2bb929,{..._0x2c2726,'subcommand':_0x35297c[_0x5955b5(0x170)]['subcommand'],'stdoutPreview':truncatePreview(_0x35297c['stdout'],0x7d0),'stderrPreview':truncatePreview(_0x35297c[_0x5955b5(0x11b)],0x7d0)});}catch(_0x428b78){await _0x1adbb5['trackPhaseError'](_0x2bb929,_0x428b78,_0x2c2726);throw _0x428b78;}}export async function finalizeVerifyFeatureCliSession(_0x1a4f78){const _0x5245c2=_0x3816,_0x54966d={'clBzV':'playwright_cli_tracing_stop','FXRJQ':_0x5245c2(0x115),'MSYIy':_0x5245c2(0x112),'BDeQM':'video-stop','gETUO':function(_0x58ac04,_0x2dc25a,_0x4372e4){return _0x58ac04(_0x2dc25a,_0x4372e4);}},{telemetry:_0x561790,sessionId:_0x5669ab,configPath:_0x341474,cliArtifactDir:_0x590fc9,env:_0x543bb2,transportMetadata:_0x12ea48}=_0x1a4f78,_0x75603d=[{'phase':_0x54966d[_0x5245c2(0x171)],'commandArgs':[_0x54966d[_0x5245c2(0x162)]]},{'phase':_0x54966d[_0x5245c2(0x137)],'commandArgs':[_0x54966d[_0x5245c2(0x17e)],_0x5245c2(0x16a)+_0x54966d[_0x5245c2(0x186)](buildCliArtifactPath,_0x590fc9,'session-recording.webm')]},{'phase':'playwright_cli_close','commandArgs':[_0x5245c2(0x122)]}];for(const _0x6dbf2b of _0x75603d){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x5669ab,'configPath':_0x341474,'commandArgs':[..._0x6dbf2b[_0x5245c2(0x165)]],'env':_0x543bb2,'telemetry':_0x561790,'phase':_0x6dbf2b['phase'],'metadata':_0x12ea48});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x225a37){const _0x51e31f=_0x3816,_0x217e65={'CAOzi':function(_0x20e017,_0x709fe,_0x97636f){return _0x20e017(_0x709fe,_0x97636f);}},_0x149ea9=[_0x51e31f(0x111),_0x51e31f(0x151)];for(const _0xbd9b9 of _0x149ea9){const _0x3cfa9c=_0x217e65['CAOzi'](join,_0x225a37,_0xbd9b9);try{return{'buffer':await readFile(_0x3cfa9c),'source':_0x3cfa9c};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x3d6972){const _0x133d58=_0x3816,_0xf5b9bf={'FzMJW':function(_0x5547cc,_0x3a1cdb,_0x21765b){return _0x5547cc(_0x3a1cdb,_0x21765b);},'OqAVL':function(_0x4a1be9,_0x5ca443){return _0x4a1be9(_0x5ca443);},'TNhMk':function(_0x42b9fd,_0x234515,_0x41000c){return _0x42b9fd(_0x234515,_0x41000c);},'WtlsW':function(_0x50fa6d,_0x5ac9af){return _0x50fa6d===_0x5ac9af;},'YOjPz':function(_0x3d1a11,_0x15f683,_0x4dde45){return _0x3d1a11(_0x15f683,_0x4dde45);}},{cwd:_0x338484,cliArtifactDir:_0x2dccad,startTime:_0x2594f5}=_0x3d6972,_0x4be2a8=[];await mkdir(_0x2dccad,{'recursive':!![]});const _0x465fb1=await _0xf5b9bf[_0x133d58(0x15e)](readdir,_0x338484,{'withFileTypes':!![]});for(const _0x2a84b0 of _0x465fb1){if(!_0x2a84b0[_0x133d58(0x11f)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x2a84b0['name']))continue;const _0x5cc3d9=join(_0x338484,_0x2a84b0['name']),_0x176dc3=await _0xf5b9bf['OqAVL'](stat,_0x5cc3d9);if(_0x176dc3['mtimeMs']+0x7d0<_0x2594f5)continue;const _0x55d15f=_0xf5b9bf[_0x133d58(0x119)](buildCliArtifactPath,_0x2dccad,_0x2a84b0[_0x133d58(0x13d)]);if(_0xf5b9bf['WtlsW'](_0x5cc3d9,_0x55d15f))continue;await _0xf5b9bf[_0x133d58(0x143)](rename,_0x5cc3d9,_0x55d15f),_0x4be2a8['push'](_0x2a84b0[_0x133d58(0x13d)]);}return _0x4be2a8[_0x133d58(0x160)]();}
@@ -7,12 +7,25 @@ description: "Ranger’s browser verification tooling that supplements a coding
7
7
 
8
8
  Run Ranger commands using `ranger-cli <args>`.
9
9
 
10
- **IMPORTANT: At the start of any session, run `ranger-cli update` to ensure you have the latest CLI and skills.**
10
+ **IMPORTANT: At the start of any session, check that you have the latest CLI and skills. If you were installed from `@latest`, run `ranger-cli update`. If you are on a prerelease (e.g., `@alpha`, version contains `-alpha.`), do NOT run `ranger-cli update` it will move you to `@latest` and off the prerelease track. Check with your team lead or re-install with `npm i -g @ranger-testing/ranger-cli@alpha` to stay current on that channel.**
11
11
 
12
12
  If you are running in Claude Code, read and suggest the following claude-specific commands to the user: [claude.md](./claude.md).
13
13
 
14
14
  Use Ranger when the work includes any UI or frontend component. Do not suggest Ranger for backend-only or infra-only changes unless the user asks.
15
15
 
16
+ ## One-shot verification from user creds
17
+
18
+ When the user gives you credentials and a goal in a single message (e.g. "use `alice@example.com` / `hunter2` to log in and check the dashboard renders"), skip the create/setup ceremony and run verification directly:
19
+
20
+ ```bash
21
+ RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
22
+ ranger-cli go --url <target-url> --notes '<the goal verbatim>'
23
+ ```
24
+
25
+ If a feature review is required and none is active, the CLI will create one automatically. Do **not** run `ranger-cli create` first unless the user explicitly asks for a structured feature review with multiple scenarios.
26
+
27
+ When credentials sit in a `.env` next to the user's repo (look for `RANGER_TEST_USERNAME` / `RANGER_TEST_PASSWORD` / `TARGET_URL`), source that file inline before running `go` instead of typing the values.
28
+
16
29
  This skill covers three workflows for Ranger feature review tracking:
17
30
 
18
31
  ## Supported Workflows
@@ -232,9 +245,10 @@ When completing your work or ending the session, your final message to the user
232
245
 
233
246
  If you encounter authentication issues:
234
247
 
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)
248
+ 1. **Log in with provided credentials**: Set `RANGER_TEST_USERNAME` and `RANGER_TEST_PASSWORD` and re-run `ranger-cli go ...`. The CLI uses those credentials to log in and reuses the same profile on subsequent runs.
249
+ 2. **Check existing profiles**: Run `ranger-cli profile ls` to see all configured profiles.
250
+ 3. **Pin a specific profile**: Use `ranger-cli profile use <profile-name>` (or pass `--profile <name>` / set `RANGER_PROFILE`).
251
+ 4. **Refresh auth**: Ask the user to run `ranger-cli profile update <profile-name>` to re-capture authentication for a profile.
238
252
 
239
253
 
240
254
  ### Authentication Issues to Ranger
@@ -2,6 +2,12 @@
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"), skip this step. Run `ranger-cli go --url <target> --notes '<goal>'` directly — a feature review will be created automatically when one is needed. See the **One-shot verification from user creds** section in the parent `SKILL.md`.
8
+
9
+ Reach for `ranger-cli create` when the work is multi-scenario or you want to enumerate the user journeys up front for the reviewer.
10
+
5
11
  ## Basic Command
6
12
 
7
13
  ```bash
@@ -8,7 +8,27 @@ After implementing code for a scenario, verify it works in the browser. This cre
8
8
  ranger-cli go --scenario <N> --notes "<what to verify>"
9
9
  ```
10
10
 
11
- The URL is derived from your active profile's `baseUrl` setting.
11
+ The URL is derived from your active profile's `baseUrl` setting (or auto-materialized — see below).
12
+
13
+ ## Profile resolution (no setup required)
14
+
15
+ The fastest path: when the user gives you a username + password (in chat or in a `.env`), set them inline and run `go`. The CLI handles the rest — no `profile add` step.
16
+
17
+ ```bash
18
+ RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
19
+ ranger-cli go --url <target> --notes '<what to verify>'
20
+ ```
21
+
22
+ If `RANGER_TEST_USERNAME` already matches an existing cloud profile, the CLI just logs in as that user. If not, a new cloud profile keyed off that username is saved so the next run reuses it.
23
+
24
+ `go` resolves which profile to use in this order:
25
+
26
+ 1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
27
+ 2. The saved active profile (`ranger-cli profile use <name>`)
28
+ 3. `RANGER_TEST_USERNAME` (logs in as that user; reuses or creates the matching cloud profile)
29
+ 4. The org's only cloud profile, if exactly one exists
30
+
31
+ 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 the `sessionDeps` freshness check.
12
32
 
13
33
  ## Required: Active Feature Review
14
34
 
@@ -41,7 +61,7 @@ You do NOT need to manually include reviewer feedback in your `--notes` descript
41
61
 
42
62
  | Option | Required | Description |
43
63
  |--------|----------|-------------|
44
- | `--profile` | No | Profile to use (defaults to active profile) |
64
+ | `--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
65
  | `--notes` | No | What to verify (defaults to scenario description) |
46
66
  | `--scenario` | No | Scenario index to verify (skips selection prompt) |
47
67
  | `--start-path` | No | Path to start on (appended to base URL, e.g., `/dashboard`) |
@@ -182,7 +202,7 @@ Always end the conversational turn by sharing the dashboard link whenever you ru
182
202
  Run `ranger-cli list` to find feature reviews, then `ranger-cli resume <id>` to resume one.
183
203
 
184
204
  ### "No active profile"
185
- Run `ranger-cli profile use <profile-name>` to set a profile with browser access.
205
+ 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
206
 
187
207
  ### Verification times out
188
208
  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.071b7bd-1",
3
+ "version": "2.5.4-alpha.1f7a251-7",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "ranger": "./build/cli.js",
@@ -12,7 +12,8 @@
12
12
  "obfuscate": "node scripts/obfuscate.cjs",
13
13
  "dev": "tsx src/cli.ts",
14
14
  "check-playwright-version": "node scripts/check-playwright-version.cjs",
15
- "postinstall": "node scripts/postinstall.js"
15
+ "postinstall": "node scripts/postinstall.js",
16
+ "test": "jest --config jest.config.cjs"
16
17
  },
17
18
  "files": [
18
19
  "build",
@@ -29,9 +30,12 @@
29
30
  },
30
31
  "devDependencies": {
31
32
  "@types/inquirer": "^9.0.7",
33
+ "@types/jest": "^29.5.0",
32
34
  "@types/node": "^22.0.0",
33
35
  "@types/yargs": "^17.0.32",
36
+ "jest": "^29.7.0",
34
37
  "javascript-obfuscator": "^4.1.1",
38
+ "ts-jest": "^29.1.0",
35
39
  "tsx": "^4.20.6",
36
40
  "typescript": "^5.0.0"
37
41
  },