@ranger-testing/ranger-cli 2.5.3 → 2.5.4-alpha.0e8b82c-9
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.
- package/build/cli.js +1 -1
- package/build/commands/addEnv.js +1 -1
- package/build/commands/authEncrypt.js +1 -1
- package/build/commands/clean.js +1 -1
- package/build/commands/config.js +1 -1
- package/build/commands/env.js +1 -1
- package/build/commands/feature.js +1 -1
- package/build/commands/hook.js +1 -1
- package/build/commands/hooks/autoPrompt.js +1 -1
- package/build/commands/hooks/disable.js +1 -1
- package/build/commands/hooks/enable.js +1 -1
- package/build/commands/hooks/exitPlanMode.js +1 -1
- package/build/commands/hooks/index.js +1 -1
- package/build/commands/hooks/output.js +1 -1
- package/build/commands/hooks/planReminder.js +1 -1
- package/build/commands/hooks/planStart.js +1 -1
- package/build/commands/hooks/postEdit.js +1 -1
- package/build/commands/hooks/preCompact.js +1 -1
- package/build/commands/hooks/sessionEnd.js +1 -1
- package/build/commands/hooks/sessionStart.js +1 -1
- package/build/commands/hooks/stopHook.js +1 -1
- package/build/commands/index.js +1 -1
- package/build/commands/login.js +1 -1
- package/build/commands/mcpBootstrap.js +1 -1
- package/build/commands/migrateProfile.js +1 -0
- package/build/commands/setup/claude.js +1 -1
- package/build/commands/setup/opencode.js +1 -1
- package/build/commands/setupCi.js +1 -1
- package/build/commands/skillup.js +1 -1
- package/build/commands/start.js +1 -1
- package/build/commands/status.js +1 -1
- package/build/commands/update.js +1 -1
- package/build/commands/updateEnv.js +1 -1
- package/build/commands/useEnv.js +1 -1
- package/build/commands/utils/activeProfile.js +1 -1
- package/build/commands/utils/agentEnv.js +1 -1
- package/build/commands/utils/browserSessionsApi.js +1 -1
- package/build/commands/utils/claudeConfig.js +1 -1
- package/build/commands/utils/claudeOverrideSettings.js +1 -1
- package/build/commands/utils/claudePlugin.js +1 -1
- package/build/commands/utils/cloudProfile.js +1 -0
- package/build/commands/utils/cloudProfileSession.js +1 -0
- package/build/commands/utils/crypto.js +1 -1
- package/build/commands/utils/desirePathLog.js +1 -1
- package/build/commands/utils/deviceAuth.js +1 -1
- package/build/commands/utils/environment.js +1 -1
- package/build/commands/utils/featureApi.js +1 -1
- package/build/commands/utils/fixWebmDuration.js +1 -1
- package/build/commands/utils/gitTracked.js +1 -0
- package/build/commands/utils/keychain.js +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js +1 -1
- package/build/commands/utils/matchAuthEnvironment.js +1 -0
- package/build/commands/utils/mcpImageBase64.js +1 -1
- package/build/commands/utils/model.js +1 -1
- package/build/commands/utils/opencodeConfig.js +1 -1
- package/build/commands/utils/playwrightCli.js +1 -1
- package/build/commands/utils/profileMessages.js +1 -1
- package/build/commands/utils/profileSetupBanner.js +1 -1
- package/build/commands/utils/projectsConfig.js +1 -0
- package/build/commands/utils/rangerConfig.js +1 -1
- package/build/commands/utils/rangerRoot.js +1 -1
- package/build/commands/utils/resolveProfileContext.js +1 -0
- package/build/commands/utils/resolveProfileUrl.js +1 -0
- package/build/commands/utils/retry.js +1 -1
- package/build/commands/utils/sessionCache.js +1 -1
- package/build/commands/utils/settings.js +1 -1
- package/build/commands/utils/skillContent.js +1 -1
- package/build/commands/utils/skills.js +1 -1
- package/build/commands/utils/stitchWebmFiles.js +1 -1
- package/build/commands/utils/telemetry.js +1 -1
- package/build/commands/utils/tokenRefresh.js +1 -1
- package/build/commands/utils/traceSnapshotMapper.js +1 -1
- package/build/commands/utils/userApi.js +1 -1
- package/build/commands/utils/version.js +1 -1
- package/build/commands/verifyFeature.js +1 -1
- package/build/commands/verifyFeatureCli.js +1 -1
- package/build/skills/ranger/SKILL.md +18 -4
- package/build/skills/ranger/create.md +6 -0
- package/build/skills/ranger/verify.md +17 -3
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(_0xc3785f,_0x6f68f4){const _0x1dcd5f=_0x1906,_0x14e9e8=_0xc3785f();while(!![]){try{const _0x2589a3=-parseInt(_0x1dcd5f(0x120))/0x1+-parseInt(_0x1dcd5f(0xbe))/0x2*(-parseInt(_0x1dcd5f(0x123))/0x3)+-parseInt(_0x1dcd5f(0xf3))/0x4+-parseInt(_0x1dcd5f(0xcd))/0x5+parseInt(_0x1dcd5f(0xfd))/0x6+parseInt(_0x1dcd5f(0xcc))/0x7*(parseInt(_0x1dcd5f(0x101))/0x8)+parseInt(_0x1dcd5f(0xda))/0x9*(parseInt(_0x1dcd5f(0x105))/0xa);if(_0x2589a3===_0x6f68f4)break;else _0x14e9e8['push'](_0x14e9e8['shift']());}catch(_0x476f29){_0x14e9e8['push'](_0x14e9e8['shift']());}}}(_0x3e1e,0xa034e));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 _0x3e1e(){const _0x595fd5=['nTWDe','--filename=','(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))','tool_call','mtimeMs','tZDQi','press','YwWpn','capture\x20snapshot','trackPhaseError','values','start\x20video\x20recording','fDzmm','02_state.yml','capture\x20snapshot\x20`','03_result-visible.png','QonmR','4266324YOKqMh','\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.','\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','\x0a\x0a##\x20Additional\x20Notes\x0a','\x22,\x20\x22','push','DEBUG','BlppD','mnoHK','snapshot','5525802DXcFnv','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\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','uBanL','221664iBYGYI','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','fill\x20','stderr','20QRFyQa','subcommand','jbeng','domRef','\x0a\x0a1.\x20Run\x20`','test','Hvgtu','CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20','pop','error','`\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`','BLagu','pFnGX','):\x20\x22','trackPhaseEnd','textContent','numeric','unaddressedComments','tracing-stop','capture\x20screenshot','voKXt','description','close','canonicalFlow','BrLHk','selector','tool_input','195319OvhOKS','env','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','3045XmydOW','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','PostToolUseFailure','.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.','check','eEPeT','GlgiT','isFile','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','ZAcWi','name','dXKXI','set','XNYyU','-\x20[','playwright-cli','cFoBI','RqMat','`\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`','ref\x20','\x20tracing-start`\x0a3.\x20Run\x20`','Bash','stop\x20tracing','map','invocation','authorName','ptAuM','mGyuo','iqcGc','EuGeZ','UVmLE','video-start','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','SesNj','hook_event_name','`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.','trace.zip','trim','run-code','\x20screenshot\x20--filename\x20','trackPhaseStart','cwd','fill','match','310MLINek','key_04_success-state.png','wccsK','split','\x20snapshot\x20--filename\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','run\x20custom\x20Playwright\x20code','HFjfv','replace','tracing-start','stop\x20video\x20recording','yjvfV','open','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','259zPMeKY','6294320exfDXP','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','trace.trace.zip','tool_name','03_learn-more.png','element','`\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`','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','sort','(?:^|\x5cs)','HKBvu','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','JuCFV','4830669TvfbrR','commandArgs','janFE','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','02_button-clicked.png','press\x20','\x5c$&','NdWgF'];_0x3e1e=function(){return _0x595fd5;};return _0x3e1e();}function truncatePreview(_0x20ed24,_0x12edfc=PLAYWRIGHT_CLI_PREVIEW_LIMIT){return _0x20ed24['length']>_0x12edfc?_0x20ed24['slice'](0x0,_0x12edfc)+'...':_0x20ed24;}function buildCliArtifactPath(_0x245d07,_0x4424a1){const _0x24b3b6=_0x1906,_0x271358={'ZAcWi':function(_0x339ade,_0x417183,_0x2a62f0){return _0x339ade(_0x417183,_0x2a62f0);}};return _0x271358[_0x24b3b6(0x12c)](join,_0x245d07,_0x4424a1);}function _0x1906(_0x13987c,_0x98b125){_0x13987c=_0x13987c-0xa6;const _0x3e1ed9=_0x3e1e();let _0x190632=_0x3e1ed9[_0x13987c];return _0x190632;}function toStepDisplayName(_0x611250){const _0x123f57=_0x1906,_0x13e715={'HFjfv':function(_0x51ae87,_0x25eff2){return _0x51ae87(_0x25eff2);}},_0x20c995=_0x13e715[_0x123f57(0xc5)](basename,_0x611250)['replace'](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')['replace'](/^\d+_/,'')[_0x123f57(0xc6)](/-/g,'\x20');return{'name':_0x20c995,'isKeyStep':/^key_/i['test'](basename(_0x611250))};}function extractShellValue(_0x98f4b7){if(!_0x98f4b7)return null;return _0x98f4b7[0x1]??_0x98f4b7[0x2]??_0x98f4b7[0x3]??null;}function extractFilenameOption(_0x118230){return extractShellValue(_0x118230['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x584aef,_0x27887e){const _0x19e55c=_0x1906,_0x360d43={'SesNj':_0x19e55c(0xe0),'fDzmm':function(_0x4b211e,_0x4ab5d4){return _0x4b211e(_0x4ab5d4);}},_0x11889b=_0x27887e[_0x19e55c(0xc6)](/[.*+?^${}()|[\]\\]/g,_0x360d43[_0x19e55c(0xb3)]);return _0x360d43[_0x19e55c(0xee)](extractShellValue,_0x584aef[_0x19e55c(0xbd)](new RegExp(_0x19e55c(0xd6)+_0x11889b+_0x19e55c(0xe4))));}function formatCommandTarget(_0x44523f){const _0x1a2230=_0x1906,_0x56bc82={'plrAw':'target'};if(!_0x44523f)return _0x56bc82['plrAw'];if(/^e\d+$/i[_0x1a2230(0x10a)](_0x44523f))return _0x1a2230(0x136)+_0x44523f;return JSON['stringify'](truncatePreview(_0x44523f,0x78));}function formatPlaywrightCliLog(_0x22859d,_0x6085c3){const _0x460921=_0x1906,_0x313a2c={'tXGvZ':_0x460921(0xca),'nTWDe':function(_0x33ae35,_0x40a40f,_0x2804be){return _0x33ae35(_0x40a40f,_0x2804be);},'voKXt':'open\x20browser','uBanL':_0x460921(0xc7),'HKBvu':'start\x20tracing','fCBFX':_0x460921(0xed),'bpDMK':_0x460921(0xc8),'QonmR':_0x460921(0xfc),'BlppD':function(_0x173337,_0x5df837){return _0x173337(_0x5df837);},'ZUKuF':'screenshot','BLagu':_0x460921(0x118),'dXKXI':'click','yXqPx':_0x460921(0xbc),'CVVIj':_0x460921(0xc4),'JuCFV':'open\x20new\x20tab','mGyuo':'tab-select','ptAuM':function(_0x13e6d5,_0x197a48,_0xf5f181){return _0x13e6d5(_0x197a48,_0xf5f181);}};switch(_0x6085c3){case _0x313a2c['tXGvZ']:{const _0x20f85b=_0x313a2c[_0x460921(0xe2)](extractFirstCommandArgument,_0x22859d,_0x6085c3);return _0x20f85b?'open\x20'+_0x20f85b:_0x313a2c[_0x460921(0x119)];}case _0x313a2c[_0x460921(0x100)]:return _0x313a2c[_0x460921(0xd7)];case _0x460921(0x117):return _0x460921(0xa8);case _0x460921(0xb1):return _0x313a2c['fCBFX'];case'video-stop':return _0x313a2c['bpDMK'];case _0x313a2c[_0x460921(0xf2)]:{const _0x25e76f=_0x313a2c[_0x460921(0xfa)](extractFilenameOption,_0x22859d);if(!_0x25e76f)return _0x460921(0xea);const {name:_0x198a44}=toStepDisplayName(_0x25e76f);return _0x460921(0xf0)+_0x198a44+'`';}case _0x313a2c['ZUKuF']:{const _0x470fe4=_0x313a2c[_0x460921(0xfa)](extractFilenameOption,_0x22859d);if(!_0x470fe4)return _0x313a2c[_0x460921(0x110)];const {name:_0x2795b6,isKeyStep:_0x277694}=toStepDisplayName(_0x470fe4);return _0x277694?'capture\x20key\x20step\x20`'+_0x2795b6+'`':'capture\x20step\x20`'+_0x2795b6+'`';}case _0x313a2c[_0x460921(0x12e)]:return'click\x20'+formatCommandTarget(extractFirstCommandArgument(_0x22859d,_0x6085c3));case _0x460921(0x127):return'check\x20'+_0x313a2c[_0x460921(0xfa)](formatCommandTarget,_0x313a2c[_0x460921(0xe2)](extractFirstCommandArgument,_0x22859d,_0x6085c3));case _0x313a2c['yXqPx']:return _0x460921(0x103)+formatCommandTarget(extractFirstCommandArgument(_0x22859d,_0x6085c3));case _0x460921(0xe8):return _0x460921(0xdf)+formatCommandTarget(extractFirstCommandArgument(_0x22859d,_0x6085c3));case _0x460921(0xb8):return _0x313a2c['CVVIj'];case'tab-new':{const _0x30d17d=extractFirstCommandArgument(_0x22859d,_0x6085c3);return _0x30d17d?'open\x20new\x20tab\x20'+_0x30d17d:_0x313a2c[_0x460921(0xd9)];}case _0x313a2c[_0x460921(0xad)]:{const _0x51cb4e=_0x313a2c[_0x460921(0xac)](extractFirstCommandArgument,_0x22859d,_0x6085c3);return _0x51cb4e?'select\x20tab\x20'+_0x51cb4e:'select\x20tab';}default:return _0x6085c3;}}function extractPlaywrightCliToolDescription(_0x44118d){const _0xfdc1aa=_0x1906,_0x22232e=_0x44118d['description'];if(typeof _0x22232e!=='string')return null;const _0x48659c=_0x22232e[_0xfdc1aa(0xb7)]()['replace'](/\s+/g,'\x20');return _0x48659c['length']>0x0?_0x48659c:null;}export function formatPlaywrightCliConsoleLogMessage(_0x3d7b39,_0x5de6d2,_0x558024){const _0x28d829=_0x1906,_0x5adfac={'RqMat':function(_0x21c3f0,_0x3caf5d){return _0x21c3f0(_0x3caf5d);}},_0x4d0e92=formatPlaywrightCliLog(_0x5de6d2,_0x558024),_0x48ab94=_0x5adfac[_0x28d829(0x134)](extractPlaywrightCliToolDescription,_0x3d7b39);if(!_0x48ab94)return'[playwright-cli]\x20'+_0x4d0e92;if(process[_0x28d829(0x121)][_0x28d829(0xf9)])return'[ranger-verification-agent]\x20'+_0x48ab94+'\x20('+_0x4d0e92+')';return'[ranger-verification-agent]\x20'+_0x48ab94;}export function buildVerifyFeatureCliDebugPrompt(_0x15372b,_0x4b3fbf){const _0x2c640e=_0x1906,_0x411c4a={'mnoHK':function(_0x5122b2,_0x78efe3,_0x457bca){return _0x5122b2(_0x78efe3,_0x457bca);},'yjvfV':_0x2c640e(0xd1),'Hvgtu':function(_0x226946,_0x38d38e){return _0x226946(_0x38d38e);},'ZacWf':function(_0xf16cfe,_0x1d8018){return _0xf16cfe(_0x1d8018);}},_0x1e7239=_0x411c4a[_0x2c640e(0xfb)](buildCliArtifactPath,_0x4b3fbf,'00_mozilla-homepage.yml'),_0x1a178c=buildCliArtifactPath(_0x4b3fbf,'01_mozilla-homepage.png'),_0x20c7c3=buildCliArtifactPath(_0x4b3fbf,'02_learn-more.yml'),_0x8000a6=buildCliArtifactPath(_0x4b3fbf,_0x411c4a[_0x2c640e(0xc9)]),_0x2eb8a9=_0x411c4a[_0x2c640e(0x10b)](quoteShellArg,_0x1e7239),_0x116d28=_0x411c4a[_0x2c640e(0x10b)](quoteShellArg,_0x1a178c),_0x2f24c0=_0x411c4a['ZacWf'](quoteShellArg,_0x20c7c3),_0x1f604c=quoteShellArg(_0x8000a6);return _0x2c640e(0x102)+_0x15372b+_0x2c640e(0x109)+_0x15372b+'\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`'+_0x15372b+_0x2c640e(0xa6)+_0x15372b+_0x2c640e(0xd4)+_0x4b3fbf+_0x2c640e(0x122)+_0x15372b+'\x20snapshot\x20--filename\x20'+_0x2eb8a9+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x15372b+_0x2c640e(0xb9)+_0x116d28+_0x2c640e(0xb2)+_0x15372b+'\x20snapshot\x20--filename\x20'+_0x2f24c0+'`\x0a9.\x20Run\x20`'+_0x15372b+'\x20screenshot\x20--filename\x20'+_0x1f604c+_0x2c640e(0xb5);}export function buildVerifyFeatureCliPrompt(_0x4eacd5){const _0x4dff8c=_0x1906,_0x18be0a={'zMDby':_0x4dff8c(0x115),'UcNGE':'\x20>\x20','GlgiT':function(_0x1bfef5,_0x37505f,_0x2c5517){return _0x1bfef5(_0x37505f,_0x2c5517);},'pFnGX':'key_03_success-state.png','GTjsq':function(_0x33b853,_0x48e804){return _0x33b853(_0x48e804);},'qlPUL':function(_0x4b04ac,_0x2ffd55){return _0x4b04ac(_0x2ffd55);},'YpUHw':function(_0x2d51ce,_0x37eae4){return _0x2d51ce(_0x37eae4);},'UVmLE':_0x4dff8c(0xde),'XnrLj':_0x4dff8c(0xbf)},{checklistItem:_0x1020a2,itemFeedback:_0x2bc69e,taskDescription:_0xff138e,cliCommandPrefix:_0x35b73e,cliArtifactDir:_0x34036f,isCdpMode:_0x247860,url:_0x1284ce,cdpEndpoint:_0x470506,loginInstructions:_0x48a385}=_0x4eacd5,_0x3c4aec=buildCliArtifactPath(_0x34036f,'01_initial.yml'),_0x35e5cd=buildCliArtifactPath(_0x34036f,_0x4dff8c(0xef)),_0x8061d0=_0x18be0a[_0x4dff8c(0x129)](buildCliArtifactPath,_0x34036f,_0x18be0a[_0x4dff8c(0x111)]),_0x3d503b=_0x18be0a[_0x4dff8c(0x129)](buildCliArtifactPath,_0x34036f,'01_initial-state.png'),_0x5b3c0f=_0x18be0a['GTjsq'](quoteShellArg,_0x3c4aec),_0x3c313f=quoteShellArg(_0x35e5cd),_0x3d20e7=_0x18be0a['qlPUL'](quoteShellArg,_0x8061d0),_0x18477e=_0x18be0a['qlPUL'](quoteShellArg,_0x3d503b),_0x45fe33=_0x1020a2['notes']?_0x4dff8c(0xf6)+_0x1020a2['notes']:'';let _0x5cbb7e='';if(_0x2bc69e&&_0x2bc69e['unaddressedComments']['length']>0x0){const _0x3c8de1=_0x2bc69e[_0x4dff8c(0x116)][_0x4dff8c(0xa9)](_0x13a784=>{const _0xe3073d=_0x4dff8c,_0x4a917c=new Date(_0x13a784['createdAt'])['toLocaleDateString']('en-US',{'month':'short','day':_0x18be0a['zMDby']}),_0x545cc5=_0x13a784[_0xe3073d(0xab)]||_0x13a784['authorEmail']||'Reviewer',_0x5e20c1=_0x13a784[_0xe3073d(0x108)]?'\x20(on\x20element:\x20<'+(_0x13a784[_0xe3073d(0x108)][_0xe3073d(0x11e)][_0xe3073d(0xc1)](_0x18be0a['UcNGE'])[_0xe3073d(0x10d)]()?.['split'](':')[0x0]||_0xe3073d(0xd2))+'>\x20\x22'+(_0x13a784['domRef'][_0xe3073d(0x114)]||'')['slice'](0x0,0x32)+'\x22)':'';return _0xe3073d(0x131)+_0x13a784['id']+']\x20**'+_0x545cc5+'**\x20('+_0x4a917c+_0xe3073d(0x112)+_0x13a784['content']+'\x22'+_0x5e20c1;})['join']('\x0a');_0x5cbb7e='\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'+_0x3c8de1;}const _0x5b1ebe=_0x2bc69e?.[_0x4dff8c(0x11c)]?_0x4dff8c(0xd8)+_0x2bc69e['canonicalFlow']:'',_0x960474=_0x247860?_0x4dff8c(0x12b)+_0x470506+_0x4dff8c(0x126):_0x4dff8c(0x10c)+_0x1284ce+'\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',_0x50f248=_0x1284ce?_0x18be0a['YpUHw'](quoteShellArg,_0x1284ce):'',_0x4b30bf=_0x247860?_0x4dff8c(0xdd)+_0x35b73e+'\x20open`,\x20then\x20`'+_0x35b73e+'\x20tracing-start`,\x20then\x20`'+_0x35b73e+_0x4dff8c(0x124)+_0x34036f+_0x4dff8c(0xcb)+_0x35b73e+'\x20snapshot\x20--filename\x20'+_0x5b3c0f+_0x4dff8c(0x10f)+_0x35b73e+_0x4dff8c(0xb9)+_0x18477e+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x35b73e+_0x4dff8c(0xff):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x35b73e+'\x20open\x20'+_0x50f248+'`,\x20then\x20`'+_0x35b73e+'\x20tracing-start`,\x20then\x20`'+_0x35b73e+'\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`'+_0x34036f+_0x4dff8c(0xcb)+_0x35b73e+_0x4dff8c(0xc2)+_0x5b3c0f+_0x4dff8c(0xd3)+_0x35b73e+'\x20screenshot\x20--filename\x20'+_0x18477e+'`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`'+_0x35b73e+_0x4dff8c(0xc3),_0x3b483b=_0x247860?_0x4dff8c(0xf4):'\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.',_0x5059c0=_0x48a385?'\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a'+_0x48a385+'\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'+_0x1020a2[_0x4dff8c(0x11a)]+_0x45fe33+_0x5cbb7e+_0x5b1ebe+_0x4dff8c(0xce)+_0xff138e+'\x0a\x0a'+_0x960474+_0x5059c0+'\x0a\x0a'+_0x4b30bf+'\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`'+_0x35b73e+_0x4dff8c(0xfe)+_0x34036f+'`\x0a-\x20`snapshot\x20--filename\x20'+_0x3c313f+'`\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'+_0x3d20e7+_0x4dff8c(0x135)+_0x34036f+'`:\x20\x22'+_0x3d503b+_0x4dff8c(0xf7)+_0x18be0a[_0x4dff8c(0x129)](buildCliArtifactPath,_0x34036f,_0x18be0a[_0x4dff8c(0xb0)])+'\x22,\x20\x22'+buildCliArtifactPath(_0x34036f,_0x4dff8c(0xf1))+_0x4dff8c(0xf5)+_0x18be0a['GlgiT'](buildCliArtifactPath,_0x34036f,_0x18be0a['XnrLj'])+'\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'+_0x3b483b+'\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(_0x533e79){const _0x5ec125=_0x1906,_0x22aed4=[..._0x533e79['keys']()][_0x5ec125(0xd5)]();let _0x3e8aab=0x0;for(const _0x1844a8 of _0x533e79[_0x5ec125(0xec)]()){_0x3e8aab+=_0x1844a8;}return{'cliCommandCount':_0x3e8aab,'cliCommandsSeen':_0x22aed4,'noCliCommandsCalled':_0x3e8aab===0x0};}export function createVerifyFeatureCliHooks(_0x4e9526){const _0x55684e=_0x1906,_0x44c979={'EuGeZ':function(_0xbf523d,_0x176df3){return _0xbf523d!==_0x176df3;},'mzTTf':'Bash','rxRne':function(_0x36d7dc,_0x3b1836){return _0x36d7dc(_0x3b1836);},'BrLHk':function(_0x2fb28c,_0x51cf20){return _0x2fb28c+_0x51cf20;},'eEPeT':_0x55684e(0xe5),'DvySY':'playwright-cli','vtQTx':function(_0x9933df,_0x1523ae){return _0x9933df(_0x1523ae);},'NdWgF':function(_0x56aafa,_0x18bce2,_0x15b37f,_0x3845d7){return _0x56aafa(_0x18bce2,_0x15b37f,_0x3845d7);},'wccsK':'tool_failure'},_0x178770=new Map(),_0x2f5229=async _0x25f706=>{const _0x359398=_0x55684e;if(_0x44c979[_0x359398(0xaf)](_0x25f706[_0x359398(0xb4)],'PostToolUse'))return{};const _0x1541c4=_0x25f706;if(_0x1541c4[_0x359398(0xd0)]!==_0x44c979['mzTTf'])return{};const _0x512277=_0x1541c4[_0x359398(0x11f)],_0x538d14=_0x44c979['rxRne'](extractBashCommand,_0x512277);if(!_0x538d14)return{};const _0x2dbb31=parsePlaywrightCliCommand(_0x538d14);if(!_0x2dbb31)return{};return _0x178770[_0x359398(0x12f)](_0x2dbb31,_0x44c979[_0x359398(0x11d)](_0x178770['get'](_0x2dbb31)||0x0,0x1)),_0x4e9526['trackPhaseStart'](_0x44c979[_0x359398(0x128)],{'transport':_0x44c979['DvySY'],'toolName':_0x2dbb31}),_0x4e9526[_0x359398(0x113)](_0x359398(0xe5),{'transport':_0x359398(0x132),'toolName':_0x2dbb31,'bashCommandPreview':_0x44c979['vtQTx'](truncatePreview,_0x538d14)}),_0x44c979['EuGeZ'](_0x2dbb31,'snapshot')&&console['log'](_0x44c979[_0x359398(0xe1)](formatPlaywrightCliConsoleLogMessage,_0x512277,_0x538d14,_0x2dbb31)),{};},_0xeb72a1=async _0x2f381d=>{const _0x5670ed=_0x55684e;if(_0x44c979[_0x5670ed(0xaf)](_0x2f381d['hook_event_name'],_0x5670ed(0x125)))return{};const _0x2691ce=_0x2f381d;if(_0x2691ce['tool_name']!==_0x5670ed(0xa7))return{};return await _0x4e9526[_0x5670ed(0xeb)](_0x44c979[_0x5670ed(0xc0)],_0x2691ce[_0x5670ed(0x10e)],{'transport':_0x5670ed(0x132),'toolName':_0x5670ed(0xa7)}),{};};return{'postToolUseHook':_0x2f5229,'postToolUseFailureHook':_0xeb72a1,'commandCounts':_0x178770};}async function runPlaywrightCliLifecycleCommand(_0x30b1ea){const _0x455014=_0x1906,_0x5525b5={'iqcGc':function(_0x134a84,_0x3aa5df){return _0x134a84??_0x3aa5df;},'cFoBI':function(_0x32f36f,_0x3b0cca,_0x39cda5){return _0x32f36f(_0x3b0cca,_0x39cda5);}},{sessionId:_0x15ee24,configPath:_0x1cb610,commandArgs:_0x242f93,env:_0x79b7a,telemetry:_0x282777,phase:_0x159a7,metadata:_0x27a80d,timeoutMs:_0x350b3b}=_0x30b1ea;_0x282777[_0x455014(0xba)](_0x159a7,_0x27a80d);try{const _0x574887=await runPlaywrightCliCommand({'sessionId':_0x15ee24,'configPath':_0x1cb610,'commandArgs':_0x242f93,'cwd':process[_0x455014(0xbb)](),'env':_0x79b7a,'timeoutMs':_0x5525b5[_0x455014(0xae)](_0x350b3b,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x282777[_0x455014(0x113)](_0x159a7,{..._0x27a80d,'subcommand':_0x574887[_0x455014(0xaa)][_0x455014(0x106)],'stdoutPreview':_0x5525b5[_0x455014(0x133)](truncatePreview,_0x574887['stdout'],0x7d0),'stderrPreview':truncatePreview(_0x574887[_0x455014(0x104)],0x7d0)});}catch(_0x32134c){await _0x282777[_0x455014(0xeb)](_0x159a7,_0x32134c,_0x27a80d);throw _0x32134c;}}export async function finalizeVerifyFeatureCliSession(_0x3d40f5){const _0x574673=_0x1906,_0x2e2eb6={'RDSys':'playwright_cli_video_stop','YRJoO':_0x574673(0x11b),'jGFUo':function(_0xa168af,_0x22be95){return _0xa168af(_0x22be95);}},{telemetry:_0x3098e5,sessionId:_0x2a3ef1,configPath:_0x1f9628,cliArtifactDir:_0x28632b,env:_0x21e1b2,transportMetadata:_0x4c006e}=_0x3d40f5,_0xbab236=[{'phase':'playwright_cli_tracing_stop','commandArgs':['tracing-stop']},{'phase':_0x2e2eb6['RDSys'],'commandArgs':['video-stop',_0x574673(0xe3)+buildCliArtifactPath(_0x28632b,'session-recording.webm')]},{'phase':'playwright_cli_close','commandArgs':[_0x2e2eb6['YRJoO']]}];for(const _0x3d73cf of _0xbab236){try{await _0x2e2eb6['jGFUo'](runPlaywrightCliLifecycleCommand,{'sessionId':_0x2a3ef1,'configPath':_0x1f9628,'commandArgs':[..._0x3d73cf[_0x574673(0xdb)]],'env':_0x21e1b2,'telemetry':_0x3098e5,'phase':_0x3d73cf['phase'],'metadata':_0x4c006e});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x2c39fc){const _0x45682c=_0x1906,_0x2f8a1d={'tZDQi':_0x45682c(0xcf),'YwWpn':function(_0x164885,_0x208c69,_0x17b58f){return _0x164885(_0x208c69,_0x17b58f);},'XNYyU':function(_0x138229,_0x534186){return _0x138229(_0x534186);}},_0x3bb9e9=[_0x45682c(0xb6),_0x2f8a1d[_0x45682c(0xe7)]];for(const _0x5152c4 of _0x3bb9e9){const _0x2e0015=_0x2f8a1d[_0x45682c(0xe9)](join,_0x2c39fc,_0x5152c4);try{return{'buffer':await _0x2f8a1d[_0x45682c(0x130)](readFile,_0x2e0015),'source':_0x2e0015};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x1eb370){const _0x47b175=_0x1906,_0xdd8929={'janFE':function(_0x326471,_0x4ff840,_0x1493c1){return _0x326471(_0x4ff840,_0x1493c1);},'DhBPt':function(_0x55f9f5,_0xb6764){return _0x55f9f5(_0xb6764);},'jbeng':function(_0x448827,_0x518712){return _0x448827<_0x518712;},'QMTEM':function(_0x6a91be,_0x15a995){return _0x6a91be+_0x15a995;},'stTPr':function(_0x18f614,_0x3bcd35){return _0x18f614===_0x3bcd35;},'xlARc':function(_0x8c448a,_0x12bfa2,_0x30883c){return _0x8c448a(_0x12bfa2,_0x30883c);}},{cwd:_0x3ca8ef,cliArtifactDir:_0xe808ad,startTime:_0x511164}=_0x1eb370,_0xeeca37=[];await _0xdd8929[_0x47b175(0xdc)](mkdir,_0xe808ad,{'recursive':!![]});const _0x2e3988=await _0xdd8929[_0x47b175(0xdc)](readdir,_0x3ca8ef,{'withFileTypes':!![]});for(const _0x5e6938 of _0x2e3988){if(!_0x5e6938[_0x47b175(0x12a)]()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x5e6938['name']))continue;const _0x5c1045=join(_0x3ca8ef,_0x5e6938['name']),_0xedbee5=await _0xdd8929['DhBPt'](stat,_0x5c1045);if(_0xdd8929[_0x47b175(0x107)](_0xdd8929['QMTEM'](_0xedbee5[_0x47b175(0xe6)],0x7d0),_0x511164))continue;const _0x42f27b=buildCliArtifactPath(_0xe808ad,_0x5e6938[_0x47b175(0x12d)]);if(_0xdd8929['stTPr'](_0x5c1045,_0x42f27b))continue;await _0xdd8929['xlARc'](rename,_0x5c1045,_0x42f27b),_0xeeca37[_0x47b175(0xf8)](_0x5e6938['name']);}return _0xeeca37['sort']();}
|
|
1
|
+
(function(_0x4672dc,_0x5f2ced){const _0x442b53=_0x3ff2,_0x4a7578=_0x4672dc();while(!![]){try{const _0x5f2f5d=parseInt(_0x442b53(0x186))/0x1+-parseInt(_0x442b53(0x1c0))/0x2+parseInt(_0x442b53(0x176))/0x3+parseInt(_0x442b53(0x1c9))/0x4*(-parseInt(_0x442b53(0x17e))/0x5)+parseInt(_0x442b53(0x1b0))/0x6*(parseInt(_0x442b53(0x17d))/0x7)+-parseInt(_0x442b53(0x1c8))/0x8+parseInt(_0x442b53(0x1df))/0x9;if(_0x5f2f5d===_0x5f2ced)break;else _0x4a7578['push'](_0x4a7578['shift']());}catch(_0x28303b){_0x4a7578['push'](_0x4a7578['shift']());}}}(_0x12e1,0xd78bc));import{mkdir,readFile,readdir,rename,stat}from'fs/promises';import{basename,join}from'path';import{extractBashCommand,parsePlaywrightCliCommand,quoteShellArg,runPlaywrightCliCommand}from'./utils/playwrightCli.js';const PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS=0xea60,PLAYWRIGHT_CLI_PREVIEW_LIMIT=0xf0,VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN=/^(?:\d{2}_.+\.(?:png|ya?ml)|key_.+\.png|session-recording(?:-\d+)?\.webm|trace(?:\.trace)?(?:-\d+)?\.zip|current_snap\.ya?ml)$/i;function truncatePreview(_0x4c70e0,_0x5a68a4=PLAYWRIGHT_CLI_PREVIEW_LIMIT){const _0x50a598=_0x3ff2,_0x2062d0={'skzFf':'...'};return _0x4c70e0[_0x50a598(0x1a6)]>_0x5a68a4?_0x4c70e0['slice'](0x0,_0x5a68a4)+_0x2062d0['skzFf']:_0x4c70e0;}function _0x12e1(){const _0x29c67b=['target','75414ZiNBWo','bYwcq','open\x20new\x20tab\x20','authorEmail','trim','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a4.\x20Take\x20a\x20snapshot\x20with\x20`','ABUzo','7yKUKTK','5ZBSygp','authorName','hook_event_name','trackPhaseStart','map','\x20video-start`\x0a4.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','-\x20[','01_initial-state.png','1413524eLYaOr','GHovm','name','02_state.yml','[playwright-cli]\x20','phase','qiWSC','tool_failure','test','`\x0a\x0a-\x20Write\x20all\x20artifacts\x20under\x20`','close','unaddressedComments','\x20snapshot\x20--filename\x20','stdout','toLocaleDateString','content','\x20(on\x20element:\x20<','mtimeMs','trace.trace.zip','video-stop','IslIs','invocation','`\x0a7.\x20Click\x20the\x20\x22Learn\x20More\x22\x20link\x20with\x20Playwright\x20CLI\x0a8.\x20Run\x20`','\x20screenshot\x20--filename\x20','\x0a##\x20Evaluation\x20Criteria\x0a-\x20VERIFIED:\x20The\x20task\x20completed\x20successfully\x20and\x20the\x20scenario\x20requirements\x20are\x20fully\x20met\x0a-\x20PARTIAL:\x20The\x20task\x20partially\x20completed\x20but\x20some\x20aspects\x20of\x20the\x20scenario\x20are\x20not\x20verified\x0a-\x20BLOCKED:\x20A\x20blocking\x20issue\x20(bug,\x20error,\x20missing\x20feature)\x20prevents\x20completion\x0a-\x20FAILED:\x20The\x20task\x20could\x20not\x20be\x20completed\x20due\x20to\x20errors\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format\x20with\x20your\x20evaluation.','PostToolUse','createdAt','Reviewer','\x0a\x0a##\x20Authentication\x0aBEFORE\x20starting\x20the\x20verification\x20task,\x20you\x20MUST\x20authenticate\x20using\x20these\x20steps:\x0a','\x0a-\x20You\x20may\x20ONLY\x20navigate\x20to\x20paths\x20under\x20this\x20base\x20URL\x20(same\x20protocol,\x20host,\x20and\x20port)\x0a-\x20For\x20example,\x20if\x20the\x20base\x20URL\x20is\x20\x22http://localhost:3000\x22,\x20you\x20can\x20navigate\x20to\x20\x22http://localhost:3000/home\x22,\x20\x22http://localhost:3000/settings\x22,\x20etc.\x0a-\x20DO\x20NOT\x20navigate\x20to\x20any\x20different\x20domain,\x20host,\x20or\x20port\x20under\x20any\x20circumstances\x0a-\x20If\x20documentation\x20or\x20code\x20diffs\x20suggest\x20a\x20path\x20exists\x20(e.g.,\x20\x22/dashboard\x22),\x20you\x20may\x20navigate\x20to\x20that\x20path\x20ONLY\x20under\x20the\x20base\x20URL\x20above\x0a-\x20The\x20base\x20URL\x20above\x20is\x20the\x20ONLY\x20authorized\x20profile\x20for\x20this\x20verification','snapshot','##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`','length','DMgpM','\x0a\x0a##\x20Reviewer\x20Feedback\x20to\x20Address\x0aThe\x20following\x20reviewer\x20comments\x20were\x20left\x20on\x20the\x20previous\x20version\x20of\x20this\x20item.\x0aVerify\x20that\x20each\x20concern\x20has\x20been\x20addressed\x20in\x20the\x20current\x20implementation.\x0aFor\x20each\x20comment\x20you\x20believe\x20has\x20been\x20addressed,\x20include\x20its\x20ID\x20(the\x20bracketed\x20value)\x20in\x20the\x20addressedCommentIds\x20array\x20in\x20your\x20output.\x0a\x0a','vaPmy','FJwEV','kfOyf','\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a7.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a8.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario','\x20video-start`.\x0a3.\x20Save\x20every\x20snapshot\x20and\x20screenshot\x20under\x20`','`\x20writes\x20a\x20YAML\x20snapshot\x20you\x20can\x20read\x20for\x20element\x20refs\x0a-\x20`click\x20<ref>`,\x20`fill\x20<ref>\x20\x22text\x22`,\x20`check\x20<ref>`,\x20`press\x20Enter`\x0a-\x20`tab-list`,\x20`tab-select\x20<index>`,\x20`tab-new\x20<url>`\x0a-\x20`screenshot\x20--filename\x20','match','7634286YtESEw','EAddq','select\x20tab','BrRzw','00_mozilla-homepage.yml','pjHca','`\x0a-\x20`snapshot\x20--filename\x20','gQCSC','MDswe','open','WiLHh','Bash','values','XtMEB','tab-new','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a6.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','3080854rYRGro','key_04_success-state.png','run-code','trackPhaseEnd','dZGhq','`\x20to\x20inspect\x20the\x20current\x20app\x20state.\x0a5.\x20Read\x20snapshot\x20YAML\x20files\x20to\x20find\x20element\x20references\x20like\x20`e12`,\x20then\x20use\x20them\x20with\x20`click`,\x20`fill`,\x20`check`,\x20or\x20`select`.\x0a6.\x20Use\x20`','\x0a\x0a##\x20Task\x20to\x20Execute\x0a','\x20open\x20https://www.mozilla.org`\x0a2.\x20Run\x20`','11424744poawBJ','1497196kgAlvV','sAZMj','open\x20new\x20tab','vYaqq','cwd','--filename=','domRef','fill','Vzbee','tracing-start','replace','tool_call','You\x20are\x20a\x20Feature\x20Review\x20Verifier.\x20Your\x20job\x20is\x20to\x20verify\x20a\x20scenario\x20by\x20executing\x20a\x20UI\x20flow\x20and\x20evaluating\x20whether\x20it\x20adequately\x20completes\x20the\x20scenario.\x0a\x0a##\x20Scenario\x20to\x20Verify\x0a','sort','capture\x20step\x20`','nOSMx','02_button-clicked.png','\x0a\x0a##\x20Expected\x20Flow\x20(from\x20previous\x20verification)\x0a','`\x0a-\x20`run-code\x20\x22await\x20page.waitForTimeout(1000)\x22`\x20for\x20waits\x20or\x20small\x20custom\x20checks\x0a\x0a##\x20Screenshot\x20Guidelines\x20-\x20IMPORTANT\x0aTake\x20screenshots\x20throughout\x20the\x20verification\x20flow\x20so\x20a\x20human\x20can\x20review\x20it\x20for\x20completeness.\x20Screenshots\x20are\x20your\x20evidence\x20trail.\x0a\x0a**When\x20to\x20take\x20screenshots\x20(use\x20Playwright\x20CLI\x20screenshot):**\x0a-\x20After\x20the\x20initial\x20snapshot\x20(capture\x20starting\x20state)\x0a-\x20Before\x20and\x20after\x20clicking\x20buttons\x20or\x20submitting\x20forms\x0a-\x20When\x20important\x20UI\x20elements\x20appear\x20(modals,\x20notifications,\x20loading\x20states)\x0a-\x20After\x20navigating\x20to\x20different\x20views\x20or\x20pages\x0a-\x20When\x20verifying\x20specific\x20elements\x20exist\x0a-\x20At\x20the\x20final\x20state\x20showing\x20the\x20completed\x20action\x0a\x0a**Screenshot\x20naming:**\x0a-\x20Use\x20descriptive\x20filenames\x20under\x20`','keys','MZcFZ','You\x20are\x20testing\x20browser\x20automation.\x20Your\x20task\x20is\x20simple:\x0a\x0aUse\x20Bash\x20and\x20Playwright\x20CLI\x20only.\x20The\x20browser\x20command\x20prefix\x20is:\x0a','13631868pqPqGQ','`\x20style\x20absolute\x20paths\x20at\x20key\x20moments.\x0a8.\x20If\x20you\x20need\x20waits\x20or\x20custom\x20assertions,\x20use\x20`','\x20tracing-start`\x0a3.\x20Run\x20`','dOIqJ','`\x0a9.\x20Run\x20`','fmxeg','HrIrm',']\x20**','`\x20using\x20absolute\x20paths\x20only.\x20Do\x20not\x20use\x20relative\x20filenames.\x0a5.\x20Run\x20`','get','short','playwright_cli_tracing_stop','open\x20browser','\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20step\x202\x20(taking\x20initial\x20snapshot),\x20IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20HTTP\x20404:\x20\x22404\x22,\x20\x22Not\x20Found\x22,\x20\x22Page\x20not\x20found\x22,\x20\x22does\x20not\x20exist\x22\x0a-\x20HTTP\x20500:\x20\x22500\x22,\x20\x22Internal\x20Server\x20Error\x22,\x20\x22Server\x20Error\x22,\x20\x22Something\x20went\x20wrong\x22\x0a-\x20HTTP\x20400:\x20\x22400\x22,\x20\x22Bad\x20Request\x22,\x20\x22Invalid\x20request\x22\x0a\x0a**Also\x20check\x20for:**\x0a-\x20Framework\x20error\x20pages\x20(Next.js\x20error\x20boundary,\x20React\x20error\x20page,\x20\x22Application\x20error\x22)\x0a-\x20Completely\x20blank/empty\x20pages\x20with\x20no\x20content\x0a-\x20\x22Cannot\x20GET\x20/path\x22\x20messages\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22HTTP\x20404\x20-\x20Page\x20not\x20found\x20at\x20/dashboard\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20appropriate\x20type\x20(HTTP_404,\x20HTTP_500,\x20HTTP_400,\x20or\x20NAVIGATION_ERROR)\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.','prlby','[ranger-verification-agent]\x20','\x0a\x0a##\x20Browser\x20Command\x20Reference\x0aUse\x20Bash\x20to\x20run\x20Playwright\x20CLI\x20commands\x20with\x20this\x20exact\x20prefix:\x0a`','check','01_mozilla-homepage.png','capture\x20key\x20step\x20`','tqpAf','Audce','error','\x20open\x20','run\x20custom\x20Playwright\x20code','pop','WJKJz','##\x20App\x20Context\x0aYou\x20are\x20connected\x20to\x20a\x20desktop\x20application\x20via\x20CDP\x20(Chrome\x20DevTools\x20Protocol)\x20at\x20','SKLac','subcommand','start\x20tracing','MlyLS','select\x20tab\x20','split','trackPhaseError','02_learn-more.yml'];_0x12e1=function(){return _0x29c67b;};return _0x12e1();}function buildCliArtifactPath(_0x36b67a,_0x29c404){return join(_0x36b67a,_0x29c404);}function toStepDisplayName(_0x1e193e){const _0x4fc715=_0x3ff2,_0x5e04fb=basename(_0x1e193e)['replace'](/\.(?:png|ya?ml)$/i,'')['replace'](/^key_/i,'')['replace'](/^\d+_/,'')[_0x4fc715(0x1d3)](/-/g,'\x20');return{'name':_0x5e04fb,'isKeyStep':/^key_/i[_0x4fc715(0x18e)](basename(_0x1e193e))};}function extractShellValue(_0x4d72e8){if(!_0x4d72e8)return null;return _0x4d72e8[0x1]??_0x4d72e8[0x2]??_0x4d72e8[0x3]??null;}function extractFilenameOption(_0x371187){const _0x2935cc=_0x3ff2,_0x150db9={'MDswe':function(_0x2b6e07,_0x3e03a6){return _0x2b6e07(_0x3e03a6);}};return _0x150db9[_0x2935cc(0x1b8)](extractShellValue,_0x371187['match'](/--filename(?:=|\s+)(?:"([^"]+)"|'([^']+)'|(\S+))/));}function extractFirstCommandArgument(_0x280781,_0x41dadb){const _0x3a3d75=_0x3ff2,_0x3417ad=_0x41dadb[_0x3a3d75(0x1d3)](/[.*+?^${}()|[\]\\]/g,'\x5c$&');return extractShellValue(_0x280781[_0x3a3d75(0x1af)](new RegExp('(?:^|\x5cs)'+_0x3417ad+'(?:\x5cs+(?:\x22([^\x22]+)\x22|\x27([^\x27]+)\x27|(\x5cS+)))')));}function formatCommandTarget(_0x502f77){const _0x5a7793=_0x3ff2,_0x464b37={'bYwcq':_0x5a7793(0x175),'tqpAf':function(_0x2c78c0,_0x23cf91,_0x4aa7fd){return _0x2c78c0(_0x23cf91,_0x4aa7fd);}};if(!_0x502f77)return _0x464b37[_0x5a7793(0x177)];if(/^e\d+$/i['test'](_0x502f77))return'ref\x20'+_0x502f77;return JSON['stringify'](_0x464b37[_0x5a7793(0x1f3)](truncatePreview,_0x502f77,0x78));}function formatPlaywrightCliLog(_0x4752a8,_0x5c4a87){const _0x248a8c=_0x3ff2,_0x53122d={'nOSMx':function(_0x4f2871,_0x56ca67,_0x227b53){return _0x4f2871(_0x56ca67,_0x227b53);},'tEMgD':_0x248a8c(0x1eb),'XtMEB':_0x248a8c(0x16f),'GHovm':'stop\x20tracing','qiWSC':'video-start','FJwEV':'start\x20video\x20recording','MlyLS':'video-stop','NTzcZ':'stop\x20video\x20recording','PxdoE':function(_0x7b5dd5,_0x5aec79){return _0x7b5dd5(_0x5aec79);},'yUMjW':'capture\x20snapshot','fmxeg':function(_0x5033f8,_0x23ef9b){return _0x5033f8(_0x23ef9b);},'EAddq':'capture\x20screenshot','sAZMj':'click','vYaqq':function(_0xefe5d4,_0x40d314){return _0xefe5d4(_0x40d314);},'ABUzo':_0x248a8c(0x1f0),'LKssV':function(_0xaec9aa,_0x5b1797,_0x338111){return _0xaec9aa(_0x5b1797,_0x338111);},'roddT':_0x248a8c(0x1c2),'fkLmx':function(_0x347120,_0x5380d8,_0x2cb0bf){return _0x347120(_0x5380d8,_0x2cb0bf);},'ULzcc':_0x248a8c(0x1b2)};switch(_0x5c4a87){case _0x248a8c(0x1b9):{const _0x1ff048=_0x53122d['nOSMx'](extractFirstCommandArgument,_0x4752a8,_0x5c4a87);return _0x1ff048?'open\x20'+_0x1ff048:_0x53122d['tEMgD'];}case _0x248a8c(0x1d2):return _0x53122d[_0x248a8c(0x1bd)];case'tracing-stop':return _0x53122d[_0x248a8c(0x187)];case _0x53122d[_0x248a8c(0x18c)]:return _0x53122d[_0x248a8c(0x1aa)];case _0x53122d[_0x248a8c(0x170)]:return _0x53122d['NTzcZ'];case _0x248a8c(0x1a4):{const _0x1db52b=_0x53122d['PxdoE'](extractFilenameOption,_0x4752a8);if(!_0x1db52b)return _0x53122d['yUMjW'];const {name:_0x32748b}=toStepDisplayName(_0x1db52b);return'capture\x20snapshot\x20`'+_0x32748b+'`';}case'screenshot':{const _0x56ca80=_0x53122d[_0x248a8c(0x1e4)](extractFilenameOption,_0x4752a8);if(!_0x56ca80)return _0x53122d[_0x248a8c(0x1b1)];const {name:_0x1aae33,isKeyStep:_0x48a18f}=toStepDisplayName(_0x56ca80);return _0x48a18f?_0x248a8c(0x1f2)+_0x1aae33+'`':_0x248a8c(0x1d7)+_0x1aae33+'`';}case _0x53122d[_0x248a8c(0x1ca)]:return'click\x20'+_0x53122d[_0x248a8c(0x1cc)](formatCommandTarget,extractFirstCommandArgument(_0x4752a8,_0x5c4a87));case _0x53122d[_0x248a8c(0x17c)]:return'check\x20'+formatCommandTarget(_0x53122d[_0x248a8c(0x1d8)](extractFirstCommandArgument,_0x4752a8,_0x5c4a87));case _0x248a8c(0x1d0):return'fill\x20'+_0x53122d['fmxeg'](formatCommandTarget,_0x53122d['LKssV'](extractFirstCommandArgument,_0x4752a8,_0x5c4a87));case'press':return'press\x20'+formatCommandTarget(extractFirstCommandArgument(_0x4752a8,_0x5c4a87));case _0x53122d['roddT']:return _0x248a8c(0x1f7);case _0x248a8c(0x1be):{const _0x40bac2=_0x53122d['fkLmx'](extractFirstCommandArgument,_0x4752a8,_0x5c4a87);return _0x40bac2?_0x248a8c(0x178)+_0x40bac2:_0x248a8c(0x1cb);}case'tab-select':{const _0x3a6f56=extractFirstCommandArgument(_0x4752a8,_0x5c4a87);return _0x3a6f56?_0x248a8c(0x171)+_0x3a6f56:_0x53122d['ULzcc'];}default:return _0x5c4a87;}}function extractPlaywrightCliToolDescription(_0x3cdb81){const _0x41f390=_0x3ff2,_0x50a9e4=_0x3cdb81['description'];if(typeof _0x50a9e4!=='string')return null;const _0x1d0606=_0x50a9e4[_0x41f390(0x17a)]()[_0x41f390(0x1d3)](/\s+/g,'\x20');return _0x1d0606[_0x41f390(0x1a6)]>0x0?_0x1d0606:null;}export function formatPlaywrightCliConsoleLogMessage(_0x45d30b,_0x396d47,_0x38fe15){const _0x5718f8=_0x3ff2,_0x2a81d9={'clBbe':function(_0x2d15a0,_0x56185f){return _0x2d15a0(_0x56185f);}},_0x557b42=formatPlaywrightCliLog(_0x396d47,_0x38fe15),_0x22661e=_0x2a81d9['clBbe'](extractPlaywrightCliToolDescription,_0x45d30b);if(!_0x22661e)return _0x5718f8(0x18a)+_0x557b42;if(process['env']['DEBUG'])return _0x5718f8(0x1ee)+_0x22661e+'\x20('+_0x557b42+')';return'[ranger-verification-agent]\x20'+_0x22661e;}export function buildVerifyFeatureCliDebugPrompt(_0x550fb5,_0x309c8a){const _0x503b38=_0x3ff2,_0xa7e87a={'CWQGt':function(_0x1eb94d,_0x23b85f,_0x3a9264){return _0x1eb94d(_0x23b85f,_0x3a9264);},'WiLHh':function(_0x368b26,_0x1bf8a9,_0x5efd94){return _0x368b26(_0x1bf8a9,_0x5efd94);},'lAvlG':function(_0x33de5d,_0x1f5bd7){return _0x33de5d(_0x1f5bd7);},'IslIs':function(_0x365725,_0x4fb09f){return _0x365725(_0x4fb09f);}},_0x55a531=_0xa7e87a['CWQGt'](buildCliArtifactPath,_0x309c8a,_0x503b38(0x1b4)),_0x47bdeb=buildCliArtifactPath(_0x309c8a,_0x503b38(0x1f1)),_0x2240e8=buildCliArtifactPath(_0x309c8a,_0x503b38(0x174)),_0x967502=_0xa7e87a[_0x503b38(0x1ba)](buildCliArtifactPath,_0x309c8a,'03_learn-more.png'),_0x8f1495=_0xa7e87a['lAvlG'](quoteShellArg,_0x55a531),_0x47f732=quoteShellArg(_0x47bdeb),_0x3bebd1=_0xa7e87a['lAvlG'](quoteShellArg,_0x2240e8),_0x4ec230=_0xa7e87a[_0x503b38(0x19a)](quoteShellArg,_0x967502);return _0x503b38(0x1de)+_0x550fb5+'\x0a\x0a1.\x20Run\x20`'+_0x550fb5+_0x503b38(0x1c7)+_0x550fb5+_0x503b38(0x1e1)+_0x550fb5+_0x503b38(0x183)+_0x309c8a+_0x503b38(0x1e7)+_0x550fb5+'\x20snapshot\x20--filename\x20'+_0x8f1495+'`\x0a5.\x20Read\x20the\x20snapshot\x20file\x20to\x20find\x20the\x20\x22Learn\x20More\x22\x20link\x20reference\x0a6.\x20Run\x20`'+_0x550fb5+_0x503b38(0x19d)+_0x47f732+_0x503b38(0x19c)+_0x550fb5+'\x20snapshot\x20--filename\x20'+_0x3bebd1+_0x503b38(0x1e3)+_0x550fb5+'\x20screenshot\x20--filename\x20'+_0x4ec230+'`\x0a10.\x20Return\x20immediately\x20with\x20the\x20structured\x20output\x0a\x0aReturn\x20your\x20findings\x20in\x20the\x20structured\x20output\x20format.';}export function buildVerifyFeatureCliPrompt(_0xe881bf){const _0x4eb70f=_0x3ff2,_0x112374={'rSQii':'en-US','jpOjl':_0x4eb70f(0x1e9),'DNFTe':'numeric','prlby':'\x20>\x20','dZGhq':'element','HrIrm':function(_0x463f54,_0x496899,_0x51fe90){return _0x463f54(_0x496899,_0x51fe90);},'dOIqJ':'key_03_success-state.png','dmLBI':function(_0x3eafce,_0x4160e4,_0x3e4058){return _0x3eafce(_0x4160e4,_0x3e4058);},'SKLac':function(_0x2ac1b8,_0x3937bd){return _0x2ac1b8(_0x3937bd);},'cFWae':function(_0x3a0862,_0x3cda1c,_0x323224){return _0x3a0862(_0x3cda1c,_0x323224);},'RJhAj':'03_result-visible.png','pjHca':_0x4eb70f(0x1c1)},{checklistItem:_0x11a516,itemFeedback:_0x1e256b,taskDescription:_0x2fd2c3,cliCommandPrefix:_0x35e128,cliArtifactDir:_0x55a450,isCdpMode:_0x3b6a1e,url:_0x37104d,cdpEndpoint:_0x3bfbcf,loginInstructions:_0xb4cc81}=_0xe881bf,_0x4808f5=_0x112374[_0x4eb70f(0x1e5)](buildCliArtifactPath,_0x55a450,'01_initial.yml'),_0x26103d=buildCliArtifactPath(_0x55a450,_0x4eb70f(0x189)),_0x2ffa7f=buildCliArtifactPath(_0x55a450,_0x112374[_0x4eb70f(0x1e2)]),_0xc3b9b2=_0x112374['dmLBI'](buildCliArtifactPath,_0x55a450,_0x4eb70f(0x185)),_0x2efcae=quoteShellArg(_0x4808f5),_0x390390=_0x112374[_0x4eb70f(0x16d)](quoteShellArg,_0x26103d),_0x526e4a=quoteShellArg(_0x2ffa7f),_0x3a28ec=_0x112374['SKLac'](quoteShellArg,_0xc3b9b2),_0x2d4918=_0x11a516['notes']?'\x0a\x0a##\x20Additional\x20Notes\x0a'+_0x11a516['notes']:'';let _0x379751='';if(_0x1e256b&&_0x1e256b['unaddressedComments']['length']>0x0){const _0x3314db=_0x1e256b[_0x4eb70f(0x191)][_0x4eb70f(0x182)](_0x5ee17b=>{const _0x2a1b84=_0x4eb70f,_0x446858=new Date(_0x5ee17b[_0x2a1b84(0x1a0)])[_0x2a1b84(0x194)](_0x112374['rSQii'],{'month':_0x112374['jpOjl'],'day':_0x112374['DNFTe']}),_0x334e0a=_0x5ee17b[_0x2a1b84(0x17f)]||_0x5ee17b[_0x2a1b84(0x179)]||_0x2a1b84(0x1a1),_0x59b71d=_0x5ee17b[_0x2a1b84(0x1cf)]?_0x2a1b84(0x196)+(_0x5ee17b['domRef']['selector'][_0x2a1b84(0x172)](_0x112374[_0x2a1b84(0x1ed)])[_0x2a1b84(0x16a)]()?.['split'](':')[0x0]||_0x112374[_0x2a1b84(0x1c4)])+'>\x20\x22'+(_0x5ee17b[_0x2a1b84(0x1cf)]['textContent']||'')['slice'](0x0,0x32)+'\x22)':'';return _0x2a1b84(0x184)+_0x5ee17b['id']+_0x2a1b84(0x1e6)+_0x334e0a+'**\x20('+_0x446858+'):\x20\x22'+_0x5ee17b[_0x2a1b84(0x195)]+'\x22'+_0x59b71d;})['join']('\x0a');_0x379751=_0x4eb70f(0x1a8)+_0x3314db;}const _0x3fdde6=_0x1e256b?.['canonicalFlow']?_0x4eb70f(0x1da)+_0x1e256b['canonicalFlow']:'',_0x1cf0c2=_0x3b6a1e?_0x4eb70f(0x16c)+_0x3bfbcf+'.\x0aThis\x20is\x20NOT\x20a\x20web\x20app\x20—\x20there\x20is\x20no\x20URL\x20to\x20navigate\x20to.\x20The\x20app\x20is\x20already\x20running\x20and\x20connected.':'CRITICAL\x20URL\x20REQUIREMENT:\x0aYour\x20base\x20URL\x20is:\x20'+_0x37104d+_0x4eb70f(0x1a3),_0x3b8b9d=_0x37104d?quoteShellArg(_0x37104d):'',_0x123534=_0x3b6a1e?_0x4eb70f(0x1a5)+_0x35e128+'\x20open`,\x20then\x20`'+_0x35e128+'\x20tracing-start`,\x20then\x20`'+_0x35e128+_0x4eb70f(0x1ad)+_0x55a450+_0x4eb70f(0x17b)+_0x35e128+'\x20snapshot\x20--filename\x20'+_0x2efcae+_0x4eb70f(0x1c5)+_0x35e128+'\x20screenshot\x20--filename\x20'+_0x3a28ec+_0x4eb70f(0x1bf)+_0x35e128+_0x4eb70f(0x1ac):'##\x20Instructions\x0a1.\x20Use\x20Bash\x20plus\x20Playwright\x20CLI\x20only.\x20Do\x20NOT\x20call\x20MCP\x20browser\x20tools.\x0a2.\x20Start\x20by\x20running\x20`'+_0x35e128+_0x4eb70f(0x1f6)+_0x3b8b9d+'`,\x20then\x20`'+_0x35e128+'\x20tracing-start`,\x20then\x20`'+_0x35e128+_0x4eb70f(0x1ad)+_0x55a450+_0x4eb70f(0x17b)+_0x35e128+_0x4eb70f(0x192)+_0x2efcae+'`\x20and\x20read\x20the\x20snapshot\x20file\x20to\x20inspect\x20the\x20page.\x0a5.\x20**IMMEDIATELY\x20check\x20for\x20blocking\x20HTTP\x20errors\x20before\x20proceeding.**\x0a6.\x20Execute\x20the\x20task\x20step-by-step\x20with\x20Playwright\x20CLI\x20commands.\x0a7.\x20Use\x20`'+_0x35e128+_0x4eb70f(0x19d)+_0x3a28ec+_0x4eb70f(0x1e0)+_0x35e128+'\x20run-code\x20\x22<playwright\x20code>\x22`.\x0a9.\x20Do\x20not\x20run\x20`close`,\x20`tracing-stop`,\x20or\x20`video-stop`;\x20the\x20host\x20finalizes\x20the\x20session\x20and\x20artifacts.\x0a10.\x20After\x20completing\x20the\x20verification,\x20evaluate\x20whether\x20the\x20result\x20adequately\x20verifies\x20the\x20scenario',_0x112a27=_0x3b6a1e?'\x0a\x0a##\x20Critical:\x20Early\x20Error\x20Detection\x0aAfter\x20taking\x20the\x20initial\x20snapshot,\x20IMMEDIATELY\x20check\x20for\x20blocking\x20errors:\x0a\x0a**Blocking\x20errors\x20to\x20detect:**\x0a-\x20Crash\x20or\x20error\x20dialogs\x20(\x22An\x20error\x20occurred\x22,\x20\x22Something\x20went\x20wrong\x22,\x20unhandled\x20exception\x20messages)\x0a-\x20Blank\x20or\x20empty\x20window\x20with\x20no\x20rendered\x20content\x0a-\x20Framework\x20error\x20boundaries\x20(React\x20error\x20page,\x20Electron\x20crash\x20reporter)\x0a-\x20Unresponsive\x20or\x20frozen\x20UI\x20(no\x20interactive\x20elements\x20in\x20snapshot)\x0a\x0a**If\x20ANY\x20blocking\x20error\x20is\x20detected:**\x0a1.\x20DO\x20NOT\x20continue\x20with\x20the\x20task\x0a2.\x20Return\x20IMMEDIATELY\x20with\x20evaluation:\x20\x22blocked\x22\x0a3.\x20Set\x20evaluationReason\x20to\x20describe\x20the\x20specific\x20error\x20(e.g.,\x20\x22App\x20crashed\x20—\x20error\x20dialog\x20visible\x20on\x20launch\x22)\x0a4.\x20Include\x20the\x20error\x20in\x20issues\x20array\x20with\x20severity:\x20\x22BLOCKER\x22\x20and\x20type:\x20\x22APP_ERROR\x22\x0a\x0aThis\x20early\x20exit\x20prevents\x20wasting\x20time\x20on\x20tasks\x20that\x20cannot\x20succeed\x20due\x20to\x20fundamental\x20errors.':_0x4eb70f(0x1ec),_0x126ce1=_0xb4cc81?_0x4eb70f(0x1a2)+_0xb4cc81+'\x0a\x0aAfter\x20completing\x20authentication,\x20proceed\x20with\x20the\x20verification\x20task\x20below.\x0aIf\x20authentication\x20fails,\x20return\x20immediately\x20with\x20evaluation\x20\x22blocked\x22\x20and\x20describe\x20the\x20auth\x20failure.':'';return _0x4eb70f(0x1d5)+_0x11a516['description']+_0x2d4918+_0x379751+_0x3fdde6+_0x4eb70f(0x1c6)+_0x2fd2c3+'\x0a\x0a'+_0x1cf0c2+_0x126ce1+'\x0a\x0a'+_0x123534+_0x4eb70f(0x1ef)+_0x35e128+_0x4eb70f(0x18f)+_0x55a450+_0x4eb70f(0x1b6)+_0x390390+_0x4eb70f(0x1ae)+_0x526e4a+_0x4eb70f(0x1db)+_0x55a450+'`:\x20\x22'+_0xc3b9b2+'\x22,\x20\x22'+buildCliArtifactPath(_0x55a450,_0x4eb70f(0x1d9))+'\x22,\x20\x22'+_0x112374['cFWae'](buildCliArtifactPath,_0x55a450,_0x112374['RJhAj'])+'\x22\x0a-\x20Number\x20prefixes\x20(01_,\x2002_,\x20etc.)\x20help\x20maintain\x20chronological\x20order\x0a-\x20For\x20KEY\x20MOMENTS\x20that\x20prove\x20the\x20scenario\x20is\x20complete,\x20prefix\x20with\x20\x22key_\x22:\x20\x22'+_0x112374[_0x4eb70f(0x1e5)](buildCliArtifactPath,_0x55a450,_0x112374[_0x4eb70f(0x1b5)])+'\x22\x0a-\x20The\x20\x22key_\x22\x20prefix\x20marks\x20screenshots\x20as\x20high-priority\x20evidence\x20for\x20human\x20reviewers\x0a\x0a**Aim\x20for\x203-6\x20screenshots\x20per\x20verification**\x20to\x20document\x20the\x20complete\x20flow.\x20Mark\x201-2\x20of\x20the\x20most\x20important\x20ones\x20with\x20the\x20\x22key_\x22\x20prefix.\x0a'+_0x112a27+_0x4eb70f(0x19e);}export function summarizeVerifyFeatureCliCommandAvailability(_0x3683cf){const _0x477e69=_0x3ff2,_0x4f8f95={'dgFDX':function(_0x396c7b,_0x3ceffc){return _0x396c7b===_0x3ceffc;}},_0x34378d=[..._0x3683cf[_0x477e69(0x1dc)]()]['sort']();let _0x1e42ab=0x0;for(const _0x3f7081 of _0x3683cf[_0x477e69(0x1bc)]()){_0x1e42ab+=_0x3f7081;}return{'cliCommandCount':_0x1e42ab,'cliCommandsSeen':_0x34378d,'noCliCommandsCalled':_0x4f8f95['dgFDX'](_0x1e42ab,0x0)};}export function createVerifyFeatureCliHooks(_0x9955c8){const _0x17119f={'oNXkI':function(_0x80e5ae,_0x353140){return _0x80e5ae!==_0x353140;},'lkMYR':function(_0x5e2d60,_0x16b7af){return _0x5e2d60(_0x16b7af);},'DMgpM':function(_0x939e3e,_0x5a884d){return _0x939e3e+_0x5a884d;},'MZcFZ':'tool_call','Hckdq':'PostToolUseFailure','gQCSC':function(_0xfa45a3,_0x4b0612){return _0xfa45a3!==_0x4b0612;},'Isgtd':'playwright-cli'},_0x61d940=new Map(),_0x8f7c5=async _0x45d6e2=>{const _0x1eb3ef=_0x3ff2;if(_0x17119f['oNXkI'](_0x45d6e2[_0x1eb3ef(0x180)],_0x1eb3ef(0x19f)))return{};const _0x5b13bf=_0x45d6e2;if(_0x5b13bf['tool_name']!=='Bash')return{};const _0x40f213=_0x5b13bf['tool_input'],_0x94912e=extractBashCommand(_0x40f213);if(!_0x94912e)return{};const _0x67dd67=_0x17119f['lkMYR'](parsePlaywrightCliCommand,_0x94912e);if(!_0x67dd67)return{};return _0x61d940['set'](_0x67dd67,_0x17119f[_0x1eb3ef(0x1a7)](_0x61d940[_0x1eb3ef(0x1e8)](_0x67dd67)||0x0,0x1)),_0x9955c8[_0x1eb3ef(0x181)](_0x1eb3ef(0x1d4),{'transport':'playwright-cli','toolName':_0x67dd67}),_0x9955c8[_0x1eb3ef(0x1c3)](_0x17119f[_0x1eb3ef(0x1dd)],{'transport':'playwright-cli','toolName':_0x67dd67,'bashCommandPreview':truncatePreview(_0x94912e)}),_0x67dd67!==_0x1eb3ef(0x1a4)&&console['log'](formatPlaywrightCliConsoleLogMessage(_0x40f213,_0x94912e,_0x67dd67)),{};},_0x53b621=async _0x5d4ec2=>{const _0x54f9f3=_0x3ff2;if(_0x17119f['oNXkI'](_0x5d4ec2['hook_event_name'],_0x17119f['Hckdq']))return{};const _0x488c76=_0x5d4ec2;if(_0x17119f[_0x54f9f3(0x1b7)](_0x488c76['tool_name'],_0x54f9f3(0x1bb)))return{};return await _0x9955c8[_0x54f9f3(0x173)](_0x54f9f3(0x18d),_0x488c76[_0x54f9f3(0x1f5)],{'transport':_0x17119f['Isgtd'],'toolName':_0x54f9f3(0x1bb)}),{};};return{'postToolUseHook':_0x8f7c5,'postToolUseFailureHook':_0x53b621,'commandCounts':_0x61d940};}function _0x3ff2(_0x31a6cf,_0x12ace3){_0x31a6cf=_0x31a6cf-0x16a;const _0x12e1d0=_0x12e1();let _0x3ff22f=_0x12e1d0[_0x31a6cf];return _0x3ff22f;}async function runPlaywrightCliLifecycleCommand(_0x3a583b){const _0x4ae655=_0x3ff2,_0x23c811={'TvXtA':function(_0x5b11d4,_0x3b1219){return _0x5b11d4(_0x3b1219);},'Vzbee':function(_0x45c927,_0x2b6398){return _0x45c927??_0x2b6398;},'pvcxB':function(_0x58a5d1,_0x54bd4,_0x4114ea){return _0x58a5d1(_0x54bd4,_0x4114ea);}},{sessionId:_0x3a1abb,configPath:_0x1beed8,commandArgs:_0x3b72d9,env:_0x52efa5,telemetry:_0x5279ef,phase:_0x55dbb8,metadata:_0x24a5b8,timeoutMs:_0x33473b}=_0x3a583b;_0x5279ef[_0x4ae655(0x181)](_0x55dbb8,_0x24a5b8);try{const _0x2a7850=await _0x23c811['TvXtA'](runPlaywrightCliCommand,{'sessionId':_0x3a1abb,'configPath':_0x1beed8,'commandArgs':_0x3b72d9,'cwd':process[_0x4ae655(0x1cd)](),'env':_0x52efa5,'timeoutMs':_0x23c811[_0x4ae655(0x1d1)](_0x33473b,PLAYWRIGHT_CLI_COMMAND_TIMEOUT_MS)});_0x5279ef[_0x4ae655(0x1c3)](_0x55dbb8,{..._0x24a5b8,'subcommand':_0x2a7850[_0x4ae655(0x19b)][_0x4ae655(0x16e)],'stdoutPreview':truncatePreview(_0x2a7850[_0x4ae655(0x193)],0x7d0),'stderrPreview':_0x23c811['pvcxB'](truncatePreview,_0x2a7850['stderr'],0x7d0)});}catch(_0x55cde3){await _0x5279ef['trackPhaseError'](_0x55dbb8,_0x55cde3,_0x24a5b8);throw _0x55cde3;}}export async function finalizeVerifyFeatureCliSession(_0x559847){const _0x555a2a=_0x3ff2,_0x16efa5={'WJKJz':_0x555a2a(0x1ea),'hlBwA':'tracing-stop','kfOyf':'playwright_cli_video_stop','vaPmy':'session-recording.webm'},{telemetry:_0x390b9e,sessionId:_0x521f87,configPath:_0xf9ced4,cliArtifactDir:_0x2c25bf,env:_0x5b14b2,transportMetadata:_0x1be6d0}=_0x559847,_0x545c83=[{'phase':_0x16efa5[_0x555a2a(0x16b)],'commandArgs':[_0x16efa5['hlBwA']]},{'phase':_0x16efa5[_0x555a2a(0x1ab)],'commandArgs':[_0x555a2a(0x199),_0x555a2a(0x1ce)+buildCliArtifactPath(_0x2c25bf,_0x16efa5[_0x555a2a(0x1a9)])]},{'phase':'playwright_cli_close','commandArgs':[_0x555a2a(0x190)]}];for(const _0x3d2fcb of _0x545c83){try{await runPlaywrightCliLifecycleCommand({'sessionId':_0x521f87,'configPath':_0xf9ced4,'commandArgs':[..._0x3d2fcb['commandArgs']],'env':_0x5b14b2,'telemetry':_0x390b9e,'phase':_0x3d2fcb[_0x555a2a(0x18b)],'metadata':_0x1be6d0});}catch{}}}export async function loadVerifyFeatureCliTraceUploadArtifact(_0x1c4140){const _0x4f4017=_0x3ff2,_0xee2628={'vPlAX':'trace.zip','xTtPu':function(_0x45d98f,_0x1a7387,_0x583569){return _0x45d98f(_0x1a7387,_0x583569);}},_0x3c62dc=[_0xee2628['vPlAX'],_0x4f4017(0x198)];for(const _0x248f59 of _0x3c62dc){const _0x2bb5c4=_0xee2628['xTtPu'](join,_0x1c4140,_0x248f59);try{return{'buffer':await readFile(_0x2bb5c4),'source':_0x2bb5c4};}catch{}}return null;}export async function rehomeVerifyFeatureCliArtifacts(_0x2c1741){const _0x383ca6=_0x3ff2,_0x5f5be1={'Audce':function(_0x347178,_0xf97771,_0x20dca1){return _0x347178(_0xf97771,_0x20dca1);},'PZPsN':function(_0x18728e,_0x2f9222){return _0x18728e+_0x2f9222;},'BrRzw':function(_0x4659bb,_0x16d379,_0x4fd2b6){return _0x4659bb(_0x16d379,_0x4fd2b6);},'XAcGB':function(_0x291337,_0x3262f8){return _0x291337===_0x3262f8;}},{cwd:_0x6d7d9,cliArtifactDir:_0x215b8a,startTime:_0x537e3f}=_0x2c1741,_0x4f7ef8=[];await _0x5f5be1[_0x383ca6(0x1f4)](mkdir,_0x215b8a,{'recursive':!![]});const _0x3a67dd=await _0x5f5be1['Audce'](readdir,_0x6d7d9,{'withFileTypes':!![]});for(const _0x4678f5 of _0x3a67dd){if(!_0x4678f5['isFile']()||!VERIFY_FEATURE_CLI_ARTIFACT_FILE_PATTERN['test'](_0x4678f5[_0x383ca6(0x188)]))continue;const _0x49d012=join(_0x6d7d9,_0x4678f5['name']),_0x3cb95f=await stat(_0x49d012);if(_0x5f5be1['PZPsN'](_0x3cb95f[_0x383ca6(0x197)],0x7d0)<_0x537e3f)continue;const _0x4c06eb=_0x5f5be1[_0x383ca6(0x1b3)](buildCliArtifactPath,_0x215b8a,_0x4678f5['name']);if(_0x5f5be1['XAcGB'](_0x49d012,_0x4c06eb))continue;await rename(_0x49d012,_0x4c06eb),_0x4f7ef8['push'](_0x4678f5['name']);}return _0x4f7ef8[_0x383ca6(0x1d6)]();}
|
|
@@ -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`
|
|
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. **
|
|
236
|
-
2. **
|
|
237
|
-
3. **
|
|
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,21 @@ 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
|
-
|
|
11
|
+
## Profile resolution
|
|
12
|
+
|
|
13
|
+
When the user gives you a username + password, set them inline and run `go` — no `profile add` step:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
RANGER_TEST_USERNAME='alice@example.com' RANGER_TEST_PASSWORD='hunter2' \
|
|
17
|
+
ranger-cli go --url <target> --notes '<what to verify>'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Resolution order:
|
|
21
|
+
|
|
22
|
+
1. `--profile <name>` flag (or `RANGER_PROFILE` env var)
|
|
23
|
+
2. Saved active profile (`ranger-cli profile use <name>`)
|
|
24
|
+
3. `RANGER_TEST_USERNAME` (reuses or creates a matching profile)
|
|
25
|
+
4. The org's sole profile when exactly one exists
|
|
12
26
|
|
|
13
27
|
## Required: Active Feature Review
|
|
14
28
|
|
|
@@ -41,7 +55,7 @@ You do NOT need to manually include reviewer feedback in your `--notes` descript
|
|
|
41
55
|
|
|
42
56
|
| Option | Required | Description |
|
|
43
57
|
|--------|----------|-------------|
|
|
44
|
-
| `--profile` | No | Profile to use
|
|
58
|
+
| `--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
59
|
| `--notes` | No | What to verify (defaults to scenario description) |
|
|
46
60
|
| `--scenario` | No | Scenario index to verify (skips selection prompt) |
|
|
47
61
|
| `--start-path` | No | Path to start on (appended to base URL, e.g., `/dashboard`) |
|
|
@@ -182,7 +196,7 @@ Always end the conversational turn by sharing the dashboard link whenever you ru
|
|
|
182
196
|
Run `ranger-cli list` to find feature reviews, then `ranger-cli resume <id>` to resume one.
|
|
183
197
|
|
|
184
198
|
### "No active profile"
|
|
185
|
-
|
|
199
|
+
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
200
|
|
|
187
201
|
### Verification times out
|
|
188
202
|
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.
|
|
3
|
+
"version": "2.5.4-alpha.0e8b82c-9",
|
|
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
|
},
|