@unotest/web 0.18.0 → 0.20.0

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.
@@ -1 +1 @@
1
- const _0x2c63a5=_0x138a;(function(_0x3a4d80,_0x51191a){const _0x305b14={_0x364e07:0x195,_0xf3f176:0x1a4,_0x4ad041:0x19a,_0x43e2ea:0x19c,_0x3e04cf:0x191,_0x3c2f26:0x19b},_0x2ec3dd=_0x138a,_0x2c1113=_0x3a4d80();while(!![]){try{const _0x46c647=parseInt(_0x2ec3dd(_0x305b14._0x364e07))/0x1*(parseInt(_0x2ec3dd(_0x305b14._0xf3f176))/0x2)+parseInt(_0x2ec3dd(_0x305b14._0x4ad041))/0x3*(-parseInt(_0x2ec3dd(0x19e))/0x4)+parseInt(_0x2ec3dd(0x19d))/0x5+-parseInt(_0x2ec3dd(_0x305b14._0x43e2ea))/0x6*(parseInt(_0x2ec3dd(_0x305b14._0x3e04cf))/0x7)+-parseInt(_0x2ec3dd(0x1a8))/0x8+parseInt(_0x2ec3dd(0x1a2))/0x9*(-parseInt(_0x2ec3dd(_0x305b14._0x3c2f26))/0xa)+parseInt(_0x2ec3dd(0x197))/0xb;if(_0x46c647===_0x51191a)break;else _0x2c1113['push'](_0x2c1113['shift']());}catch(_0x3e35be){_0x2c1113['push'](_0x2c1113['shift']());}}}(_0x5c00,0xaa6c3));var __defProp=Object[_0x2c63a5(0x192)],__name=(_0x2479bf,_0xc5feea)=>__defProp(_0x2479bf,'name',{'value':_0xc5feea,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';function _0x5c00(){const _0x31badf=['ChvZAa','nda2AMvitvDV','zgvMAw5LuhjVCgvYDhK','EWOGicjJB21WAwXLCK9WDgLVBNmIoIb7cIaGicaIy2HLy2TkCYi6igzHBhnLlaOGicaGiNrHCMDLDci6icjLCZiWmJiIlaOGicaGiMXPyIi6ifSIzxmYmdiYiL0ScIaGicaIDhLWzxmIoIbBxqOGih0ScIaGiMLUy2X1zguIoIbBcIaGicaIkIOVkI5QCYiScIaGicaIlI4VlNvUB3rLC3qVDhLWzxmVzw52lMqUDhmIlaOGicaGiI4Ul25VzgvFBw9KDwXLCY9aDw5VDgvZDc93zwiVDhLWzxmVDw5VDgvZDc1KC2WUzc50CYikicbDcN0k','ANnJB25MAwCUANnVBG','mtmZC254zM1x','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4GqsbZDwjWCM9JzxnZihrOyxqGz2vUDwLUzwX5ig5LzwrZig9UzsaOysbSAxn0zw5LCIb3AxrOigekiYb0B2TLBIKGz2v0CYbPDcb2AweGDgHLigv4CgXPy2L0igfSBg93BgLZDcbPBIb1BM90zxn0lMnVBMzPzY4QoGOJicaGC2fUzgjVEdOGEYbLEhbVCNrtzwnYzxrZoIbBj1rps0voj10GFqOJifb1DcbUB24TC2vJCMv0ihzHBhvLCYaOvvjmCYWGzw1HAwXZlcbPzhmPigLUihvUB3rLC3qVlMvUDI4kiWOJiezmruvux0vyqu1qteukte9hsu49cLbbu1nxt1jepqPut0TftJ0k','mtCZnJe3ndbMuxDhweG','Dw5VDgvZDa','y2HHBM5LBa','mZeYs0Lbu1vh','mZa2mtuWvMXmzNHJ','mJm2otrUv3PVBvy','mZaWmtK5me1itNfADq','ndKYodHbqK9pEue','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','x2HLBhbLCNm','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','mJK3C0D5CKP5','icbJAgfUBMvSoIa','mtC0odjAwKfQyKy','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','C2nHzMzVBgrxB3jRC3bHy2u','otC5mZiWzenUtwjn','Dw5VDgvZDenVBMzPz01QCW','ANnJB25MAwDkC29U','zxHHBxbSzxm','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO'];_0x5c00=function(){return _0x31badf;};return _0x5c00();}import{join}from'path';var templates={'jsconfigJson':_0x2c63a5(0x193),'scenarioTemplate':'//\x20Move\x20+\x20rename\x20this\x20file\x20to\x20<feature>/<your_name>.js\x20(e.g.\x0a//\x20auth/login.js)\x20and\x20the\x20function\x20below\x20to\x20test_<your_name>().\x20Scenarios\x20live\x0a//\x20in\x20feature\x20subfolders,\x20NOT\x20the\x20e2e\x20root\x20—\x20the\x20linter\x20(lint:scenario-in-root)\x0a//\x20rejects\x20a\x20test\x20file\x20placed\x20directly\x20in\x20unotest/e2e/.\x20The\x20loader\x20derives\x20the\x0a//\x20entry\x20name\x20from\x20the\x20file\x20basename\x20—\x20kebab-case\x20dashes\x20become\x20underscores.\x0a\x0a//\x20Every\x20executable\x20step\x20must\x20sit\x20inside\x20a\x20step(\x22...\x22,\x20()\x20=>\x20{\x20…\x20})\x20block.\x20The\x0a//\x20title\x20is\x20a\x20plain-English\x20description\x20of\x20the\x20group;\x20the\x20steps\x20inside\x20are\x0a//\x20the\x20implementation.\x20Group\x20by\x20intent\x20(Setup\x20/\x20Enter\x20/\x20Act\x20/\x20Assert\x20or\x0a//\x20whatever\x20reads\x20well)\x20—\x20one\x20block\x20per\x20logical\x20chunk.\x0a\x0afunction\x20test_your_name_here()\x20{\x0a\x20\x20step(\x22Seed\x20a\x20known\x20user\x20via\x20DB\x20/\x20API\x20fixtures\x20from\x20_helpers/\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20wipe_e2e_users();\x0a\x20\x20\x20\x20//\x20\x20\x20\x20user_id\x20=\x20seed_user(\x27alice@example.com\x27,\x20\x27secret\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Sign\x20in\x20as\x20the\x20seeded\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27https://your-app.test/login\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20\x27alice@example.com\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Password\x27),\x20\x27secret\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20click(getByRole(\x27button\x27,\x20{name:\x20\x27Log\x20in\x27}));\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Assert\x20the\x20dashboard\x20shows\x20the\x20signed-in\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertUrl(\x27/dashboard\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertText(getByRole(\x27heading\x27),\x20\x27Welcome,\x20Alice\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20count\x20=\x20dbQuery(\x27SELECT\x20count(*)\x20FROM\x20users\x20WHERE\x20active\x20=\x20true\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertTrue(count\x20>\x200,\x20\x27expected\x20at\x20least\x20one\x20active\x20user\x27);\x0a\x20\x20});\x0a}\x0a','agentsMd':_0x2c63a5(0x1a1),'claudeMdBody':_0x2c63a5(0x1a5),'examples':{'01-smoke.js':_0x2c63a5(0x18f),'02-form-fill.js':'//\x20Example\x2002\x20—\x20fill\x20an\x20input\x20+\x20assert\x20the\x20app\x20reacted.\x0a//\x0a//\x20Against\x20playground.unotest.com/scenarios/big-table.\x20Demonstrates\x20getByRole\x0a//\x20for\x20a\x20labelled\x20input,\x20typed\x20input\x20via\x20fill(),\x20and\x20a\x20locator\x20method-chain\x0a//\x20(getByRole(\x27row\x27).filter({hasText}).first())\x20in\x20an\x20assertion.\x0a//\x20Run\x20with:\x20\x20npx\x20@unotest/web\x20e2e\x20examples/02-form-fill\x0a\x0afunction\x20test_form_fill_happy_path()\x20{\x0a\x20\x20step(\x22Filter\x20the\x20Big\x20Table\x20by\x20a\x20name\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27/scenarios/big-table\x27);\x0a\x20\x20\x20\x20fill(getByRole(\x27textbox\x27,\x20{name:\x20\x27Filter\x20by\x20name\x27}),\x20\x27Uma\x20Quinn\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Filtering\x20reveals\x20the\x20Clear\x20filter\x20control\x20and\x20matching\x20rows\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27button\x27,\x20{name:\x20\x27Clear\x20filter\x27}));\x0a\x20\x20\x20\x20assertVisible(getByRole(\x27row\x27).filter({hasText:\x20\x27Uma\x20Quinn\x27}).first());\x0a\x20\x20});\x0a}\x0a'},'secretsExample':_0x2c63a5(0x196),'envExample':'#\x20unotest-web\x20—\x20copied\x20to\x20unotest/.env\x20by\x20`init`\x20if\x20not\x20present.\x0a#\x0a#\x20Fill\x20in\x20values\x20that\x20apply\x20to\x20your\x20project.\x20Variables\x20are\x20loaded\x20by\x20the\x0a#\x20runner\x20at\x20scenario\x20start.\x0a#\x0a#\x20Reference\x20any\x20variable\x20from\x20a\x20scenario\x20by\x20its\x20bare\x20UPPER_SNAKE\x20name\x20—\x0a#\x20no\x20env()/secret()\x20wrapper:\x0a#\x0a#\x20\x20\x20goto(\x27/login\x27);\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20relative\x20—\x20see\x20APP_BASE_URL\x0a#\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20TEST_USER_EMAIL);\x0a#\x0a#\x20Secret\x20values\x20(passwords,\x20tokens)\x20go\x20in\x20unotest/.secrets\x20instead\x20—\x20same\x0a#\x20format,\x20but\x20masked\x20in\x20every\x20log.\x20An\x20unknown\x20UPPER_SNAKE\x20name\x20fails\x20the\x0a#\x20run\x20with\x20a\x20clear\x20\x22add\x20it\x20to\x20unotest/.env\x22\x20message.\x0a#\x0a#\x20Environments:\x20override\x20any\x20value\x20per\x20environment\x20with\x20overlay\x20files\x20—\x0a#\x20unotest/.env.staging,\x20unotest/.env.production\x20(secrets:\x20.secrets.<env>).\x0a#\x20Select\x20one:\x20`npx\x20@unotest/web\x20e2e\x20<name>\x20--env\x20staging`.\x20The\x20overlay\x20layers\x0a#\x20over\x20this\x20base\x20file\x20(overlay\x20wins);\x20the\x20shell\x20environment\x20wins\x20over\x20both.\x0a\x0a#\x20---\x20App\x20under\x20test\x20--------------------------------------------------------\x0a#\x20The\x20app\x27s\x20base\x20URL.\x20Relative\x20goto(\x27/path\x27)\x20resolves\x20against\x20it\x20(wired\x20into\x0a#\x20Playwright\x27s\x20baseURL\x20automatically),\x20so\x20write\x20goto(\x27/login\x27)\x20—\x20never\x0a#\x20goto(APP_BASE_URL\x20+\x20\x27/login\x27).\x20Also\x20used\x20for\x20assertUrl\x20substring\x20matching.\x0a#\x20Defaults\x20to\x20the\x20unotest\x20playground\x20so\x20the\x20example\x20scenarios\x20run\x20out\x20of\x20the\x0a#\x20box;\x20point\x20it\x20at\x20your\x20own\x20app.\x0aAPP_BASE_URL=https://playground.unotest.com\x0a\x0a#\x20---\x20Database\x20--------------------------------------------------------------\x0a#\x20Used\x20by\x20dbQuery\x20/\x20dbExec.\x20Install\x20the\x20matching\x20driver\x20as\x20a\x20peer-dep:\x0a#\x20\x20\x20pnpm\x20add\x20-D\x20pg\x20@types/pg\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20for\x20postgresql://\x0a#\x20\x20\x20pnpm\x20add\x20-D\x20mysql2\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20for\x20mysql://\x0a#\x20(SQLite\x20via\x20better-sqlite3\x20—\x20install\x20only\x20if\x20needed.)\x0aDATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp_test\x0a\x0a#\x20---\x20Extra\x20API\x20hosts\x20-------------------------------------------------------\x0a#\x20apiCall(...)\x20goes\x20against\x20sandbox.apiBaseUrl\x20from\x20unotest.config.*\x20by\x0a#\x20default.\x20A\x20setup\x20that\x20talks\x20to\x20MORE\x20hosts\x20names\x20them\x20here\x20and\x20picks\x20one\x0a#\x20per\x20call\x20by\x20the\x20variable\x20NAME\x20(URLs\x20never\x20appear\x20in\x20scenarios):\x0a#\x20\x20\x20apiCall(\x27POST\x27,\x20\x27/things\x27,\x20body,\x20headers,\x20{base:\x20\x27API_BASE_CHAT\x27})\x0a#\x20API_BASE_CHAT=https://chatbackend.example.com\x0a\x0a#\x20---\x20Runner\x20--------------------------------------------------------------\x0a#\x20Show\x20the\x20browser\x20window\x20during\x20runs\x20(default:\x20headless).\x0a#\x20UNOTEST_HEADED=1\x0a#\x20Slow\x20each\x20Playwright\x20op\x20by\x20N\x20ms\x20(default:\x200).\x20Pairs\x20with\x20HEADED\x20for\x0a#\x20watching\x20the\x20agent\x20at\x20work.\x0a#\x20UNOTEST_SLOW_MO=100\x0a#\x20Browser\x20used\x20by\x20the\x20CLI\x20(chromium\x20|\x20firefox\x20|\x20webkit).\x20Default:\x20chromium.\x0a#\x20UNOTEST_BROWSER=chromium\x0a#\x20Default\x20action\x20timeout\x20in\x20milliseconds\x20—\x20applied\x20to\x20every\x20click\x20/\x0a#\x20fill\x20/\x20waitFor\x20/\x20etc.\x20via\x20Playwright\x27s\x20setDefaultTimeout.\x20Default\x203000.\x0a#\x20Bump\x20if\x20your\x20app\x20is\x20slow;\x20per-action\x20override\x20via\x20the\x20action\x27s\x0a#\x20options.timeout.\x20Playwright\x27s\x20stock\x2030000\x20strands\x20interactive\x20agents.\x0a#\x20UNOTEST_DEFAULT_TIMEOUT_MS=3000\x0a#\x20Default\x20navigation\x20timeout\x20in\x20milliseconds\x20—\x20applied\x20to\x20goto\x20/\x20reload\x20/\x0a#\x20waitForUrl,\x20click\x27s\x20post-action\x20navigation\x20wait,\x20AND\x20setPage\x27s\x20wait\x20for\x20a\x0a#\x20newly\x20opened\x20tab\x20to\x20appear\x20+\x20load.\x20Real-world\x20pages\x20routinely\x20take\x205–15s\x0a#\x20to\x20fire\x20\x27load\x27;\x20keep\x20this\x20separate\x20from\x20the\x20action\x20timeout\x20above.\x0aUNOTEST_DEFAULT_NAVIGATION_TIMEOUT_MS=15000\x0a\x0a#\x20Per-run\x20wall-clock\x20budget\x20in\x20milliseconds\x20—\x20a\x20run\x20aborts\x20once\x20it\x20exceeds\x0a#\x20this.\x20Guards\x20against\x20a\x20stuck\x20scenario\x20hanging\x20the\x20agent\x20indefinitely.\x0a#\x20Invalid\x20or\x20non-positive\x20values\x20fall\x20back\x20to\x20the\x20default.\x20Default\x20300000.\x0a#\x20UNOTEST_MAX_DURATION_MS=300000\x0a\x0a#\x20---\x20Locale\x20+\x20timezone\x20---------------------------------------------------\x0a#\x20Pin\x20the\x20browser\x20context\x27s\x20Accept-Language\x20/\x20navigator.language.\x20Without\x0a#\x20these,\x20tests\x20inherit\x20the\x20OS\x20locale\x20—\x20accessible-name\x20selectors\x0a#\x20(`getByRole(name)`)\x20on\x20i18n\x27d\x20apps\x20will\x20break\x20across\x20machines.\x0a#\x20UNOTEST_LOCALE=en-US\x0a#\x20UNOTEST_TIMEZONE=UTC\x0a\x0a#\x20---\x20Recording\x20(explore_*)\x20----------------------------------------------\x0a#\x20Grace\x20window\x20in\x20ms\x20after\x20each\x20explore_step\x20action.\x20If\x20a\x20click\x20opens\x20a\x0a#\x20new\x20tab/popup,\x20the\x20MCP\x20server\x20auto-switches\x20the\x20active\x20page\x20to\x20it\x20AND\x0a#\x20inserts\x20setPage(N)\x20into\x20the\x20generated\x20DSL\x20trace.\x20Set\x20to\x200\x20to\x20disable\x0a#\x20(strict\x20mode).\x20Has\x20NO\x20effect\x20on\x20run_test\x20—\x20there\x20setPage\x20already\x20waits\x0a#\x20for\x20the\x20tab\x20to\x20appear\x20on\x20its\x20own.\x20Range:\x20[0,\x2010000].\x20Default:\x202000.\x0a#\x20UNOTEST_POPUP_GRACE_MS=2000\x0a\x0a#\x20---\x20Logging\x20-------------------------------------------------------------\x0a#\x20debug\x20|\x20info\x20|\x20warn\x20|\x20error.\x20Default:\x20info.\x0aUNOTEST_LOG_LEVEL=info\x0a\x0a#\x20---\x20Debug\x20diagnostics\x20---------------------------------------------------\x0a#\x20Off\x20by\x20default.\x20Set\x20to\x201\x20to\x20record\x20a\x20structured\x20JSONL\x20log\x20+\x20per-call\x0a#\x20folders\x20under\x20unotest/.debug/\x20—\x20then\x20restart\x20the\x20MCP\x20server.\x20Each\x20tool\x0a#\x20call\x20gets\x20a\x20folder\x20with\x20the\x20full\x20snapshot\x20JSON,\x20the\x20outerHTML\x20of\x20the\x0a#\x20element\x20a\x20locator\x20resolved\x20to,\x20and\x20(on\x20failure)\x20page.html\x20+\x20a\x20screenshot,\x0a#\x20so\x20you\x20(and\x20the\x20AI\x20agent,\x20via\x20get_last_mcp_log)\x20can\x20verify\x20the\x20snapshot\x0a#\x20didn\x27t\x20glitch\x20and\x20the\x20locator\x20hit\x20the\x20right\x20element\x20—\x20instead\x20of\x20guessing\x0a#\x20from\x20a\x20truncated\x20error.\x20audit_last_run\x20then\x20checks\x20the\x20run\x20against\x20the\x0a#\x20testing\x20rules.\x20Also\x20turns\x20on\x20full\x20CLI\x20stack\x20traces.\x20Use\x20\x27summary\x27\x20for\x20a\x0a#\x20lighter\x20log\x20(tool\x20+\x20snapshot\x20layers\x20only,\x20no\x20artifacts).\x20NOTE:\x20tool\x0a#\x20arguments\x20are\x20logged\x20verbatim,\x20so\x20a\x20fill()\x20with\x20a\x20password\x20lands\x20in\x20the\x0a#\x20local\x20(gitignored)\x20log\x20—\x20keep\x20this\x20off\x20unless\x20you\x27re\x20debugging.\x0a#\x20UNOTEST_DEBUG=1\x0a\x0a#\x20---\x20Capture\x20(viewer\x20inspector)\x20------------------------------------------\x0a#\x20Record\x20the\x20browser\x20console\x20+\x20network\x20requests\x20into\x20each\x20run\x27s\x20dir\x20so\x20the\x0a#\x20viewer\x27s\x20Console\x20/\x20Network\x20inspector\x20tabs\x20are\x20populated.\x20Set\x20to\x200\x20to\x20disable.\x0aUNOTEST_NETWORK=1\x0aUNOTEST_CONSOLE=1\x0a#\x20Set\x20to\x201\x20to\x20also\x20capture\x20a\x20screenshot\x20after\x20EVERY\x20executed\x20step\x20(into\x0a#\x20unotest/.runs/<runId>/screenshot/;\x20click\x20a\x20step\x20row\x20in\x20the\x20viewer\x20to\x20see\x0a#\x20it).\x20On\x20failure,\x20a\x20screenshot\x20+\x20page.html\x20always\x20land\x20in\x0a#\x20unotest/.runs/<runId>/failure/\x20—\x20no\x20flag\x20needed.\x0a#\x20UNOTEST_STEP_SCREENSHOTS=1\x0a'};function unotestConfigMjs(_0x3d079e){const _0x5d4b68={_0x153677:0x1a6,_0x388109:0x19f},_0x462b79=_0x2c63a5,_0x22a41b=_0x3d079e===void 0x0?_0x462b79(_0x5d4b68._0x153677):_0x462b79(0x1a3)+JSON['stringify'](_0x3d079e)+',';return'//\x20@unotest/web\x20project\x20config.\x20All\x20fields\x20are\x20optional\x20—\x20defaults\x20apply\x0a//\x20when\x20omitted.\x0a//\x0a//\x20Saved\x20as\x20.mjs\x20so\x20the\x20runtime\x20loads\x20it\x20as\x20ESM\x20regardless\x20of\x20the\x20project\x27s\x0a//\x20package.json\x20\x22type\x22\x20field.\x20For\x20IDE\x20autocomplete,\x20type-import\x20the\x20schema:\x0a//\x0a//\x20\x20\x20/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0a//\x20\x20\x20export\x20default\x20{\x20baseUrl:\x20\x27https://your-app.test\x27\x20};\x0a\x0a/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0aexport\x20default\x20{\x0a\x20\x20//\x20baseUrl:\x20\x27https://your-app.test\x27,\x0a\x20\x20//\x20browsers:\x20[\x27chromium\x27,\x20\x27firefox\x27,\x20\x27webkit\x27],\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20viewport:\x20{\x20width:\x201280,\x20height:\x20720\x20},\x0a\x20\x20//\x20retry:\x20{\x20count:\x201,\x20on:\x20[\x27transient\x27]\x20},\x20\x20\x20\x20\x20\x20\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20storageState:\x20\x27.unotest/cache/auth.json\x27,\x20\x20\x20\x20\x20\x20//\x20see\x20helpers\x0a\x20\x20//\x20sandbox:\x20{\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20apiCall\x20/\x20upload\x20/\x20dbQuery\x20/\x20shell\x0a\x20\x20//\x20\x20\x20apiBaseUrl:\x20\x27https://api.your-app.test\x27,\x20\x20\x20\x20\x20//\x20base\x20for\x20apiCall(\x27POST\x27,\x20\x27/path\x27,\x20…)\x0a\x20\x20//\x20\x20\x20uploadDir:\x20\x27unotest/fixtures\x27,\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20root\x20for\x20upload(\x27doc.pdf\x27)\x20paths;\x0a\x20\x20//\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20default:\x20project\x20root.\x20Uploads\x20may\x0a\x20\x20//\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20not\x20escape\x20it\x20(relative\x20paths\x20only).\x0a\x20\x20//\x20\x20\x20database:\x20\x27postgresql://localhost:5432/app_test\x27,\x20\x20//\x20dbQuery\x20/\x20dbExec\x0a\x20\x20//\x20},\x0a'+_0x22a41b+_0x462b79(_0x5d4b68._0x388109);}__name(unotestConfigMjs,_0x2c63a5(0x1a9));function _0x138a(_0x4aa841,_0x4b4223){_0x4aa841=_0x4aa841-0x18e;const _0x5c003c=_0x5c00();let _0x138a7a=_0x5c003c[_0x4aa841];if(_0x138a['FdvgmY']===undefined){var _0x24f2f7=function(_0x31335f){const _0x23b824='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2479bf='',_0xc5feea='';for(let _0x3d079e=0x0,_0x22a41b,_0x419dad,_0x52e7bb=0x0;_0x419dad=_0x31335f['charAt'](_0x52e7bb++);~_0x419dad&&(_0x22a41b=_0x3d079e%0x4?_0x22a41b*0x40+_0x419dad:_0x419dad,_0x3d079e++%0x4)?_0x2479bf+=String['fromCharCode'](0xff&_0x22a41b>>(-0x2*_0x3d079e&0x6)):0x0){_0x419dad=_0x23b824['indexOf'](_0x419dad);}for(let _0x4ba017=0x0,_0x3c8d32=_0x2479bf['length'];_0x4ba017<_0x3c8d32;_0x4ba017++){_0xc5feea+='%'+('00'+_0x2479bf['charCodeAt'](_0x4ba017)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xc5feea);};_0x138a['HqBrho']=_0x24f2f7,_0x138a['pNGMZV']={},_0x138a['FdvgmY']=!![];}const _0x57274a=_0x5c003c[0x0],_0x5b82ba=_0x4aa841+_0x57274a,_0x4a6643=_0x138a['pNGMZV'][_0x5b82ba];return!_0x4a6643?(_0x138a7a=_0x138a['HqBrho'](_0x138a7a),_0x138a['pNGMZV'][_0x5b82ba]=_0x138a7a):_0x138a7a=_0x4a6643,_0x138a7a;}async function scaffoldWorkspace(_0x419dad,_0x52e7bb={}){const _0x2e3999={_0x2e43db:0x198,_0x3b3b13:0x1a0,_0x129b3a:0x1aa,_0x22cdc9:0x18e,_0x280aca:0x190,_0x187916:0x190},_0x3a34fb=_0x2c63a5,_0x4ba017=[],_0x3c8d32=[];await mkdir(join(_0x419dad,'unotest','e2e',_0x3a34fb(0x18e)),{'recursive':!![]}),await mkdir(join(_0x419dad,_0x3a34fb(_0x2e3999._0x2e43db),'e2e',_0x3a34fb(_0x2e3999._0x3b3b13)),{'recursive':!![]});const _0x33a26f=[{'rel':'unotest.config.mjs','content':unotestConfigMjs(_0x52e7bb[_0x3a34fb(0x199)])},{'rel':join('unotest','.env'),'content':templates['envExample']},{'rel':join(_0x3a34fb(0x198),_0x3a34fb(0x194)),'content':templates[_0x3a34fb(_0x2e3999._0x129b3a)]},{'rel':join('unotest','e2e',_0x3a34fb(_0x2e3999._0x22cdc9),'01-smoke.js'),'content':templates[_0x3a34fb(_0x2e3999._0x22cdc9)]['01-smoke.js']}];for(const {rel:_0x1479fa,content:_0x144103}of _0x33a26f){const _0x4bd9e2=join(_0x419dad,_0x1479fa);if(existsSync(_0x4bd9e2)){_0x3c8d32[_0x3a34fb(_0x2e3999._0x280aca)](_0x1479fa);continue;}await writeFile(_0x4bd9e2,_0x144103),_0x4ba017[_0x3a34fb(_0x2e3999._0x187916)](_0x1479fa);}return{'projectRoot':_0x419dad,'created':_0x4ba017,'skipped':_0x3c8d32};}__name(scaffoldWorkspace,_0x2c63a5(0x1a7));export{scaffoldWorkspace};
1
+ const _0x5a49a7=_0x4fbb;(function(_0x58648a,_0x38e069){const _0x4b3c16={_0x327d86:0x1c2,_0x4a38f3:0x1d4,_0x25de60:0x1bc},_0x2cc7d6=_0x4fbb,_0x203935=_0x58648a();while(!![]){try{const _0x34a05c=-parseInt(_0x2cc7d6(0x1dd))/0x1*(parseInt(_0x2cc7d6(_0x4b3c16._0x327d86))/0x2)+parseInt(_0x2cc7d6(_0x4b3c16._0x4a38f3))/0x3+parseInt(_0x2cc7d6(0x1ce))/0x4+-parseInt(_0x2cc7d6(0x1d5))/0x5*(parseInt(_0x2cc7d6(0x1ca))/0x6)+parseInt(_0x2cc7d6(_0x4b3c16._0x25de60))/0x7+-parseInt(_0x2cc7d6(0x1d0))/0x8*(-parseInt(_0x2cc7d6(0x1d9))/0x9)+parseInt(_0x2cc7d6(0x1c5))/0xa*(-parseInt(_0x2cc7d6(0x1d3))/0xb);if(_0x34a05c===_0x38e069)break;else _0x203935['push'](_0x203935['shift']());}catch(_0x57e826){_0x203935['push'](_0x203935['shift']());}}}(_0x1cca,0x85cf6));var __defProp=Object[_0x5a49a7(0x1cd)],__name=(_0x33ef7d,_0x337d73)=>__defProp(_0x33ef7d,_0x5a49a7(0x1c6),{'value':_0x337d73,'configurable':!![]});function _0x4fbb(_0x9305e,_0x251a43){_0x9305e=_0x9305e-0x1bc;const _0x1ccaf6=_0x1cca();let _0x4fbb20=_0x1ccaf6[_0x9305e];if(_0x4fbb['juazjt']===undefined){var _0x1c4177=function(_0x374a3e){const _0x1c61e1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x33ef7d='',_0x337d73='';for(let _0x404149=0x0,_0x2da943,_0x33e56a,_0x2c2e1a=0x0;_0x33e56a=_0x374a3e['charAt'](_0x2c2e1a++);~_0x33e56a&&(_0x2da943=_0x404149%0x4?_0x2da943*0x40+_0x33e56a:_0x33e56a,_0x404149++%0x4)?_0x33ef7d+=String['fromCharCode'](0xff&_0x2da943>>(-0x2*_0x404149&0x6)):0x0){_0x33e56a=_0x1c61e1['indexOf'](_0x33e56a);}for(let _0x4b1b87=0x0,_0x3dfa6a=_0x33ef7d['length'];_0x4b1b87<_0x3dfa6a;_0x4b1b87++){_0x337d73+='%'+('00'+_0x33ef7d['charCodeAt'](_0x4b1b87)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x337d73);};_0x4fbb['aHrRdE']=_0x1c4177,_0x4fbb['oNgTRW']={},_0x4fbb['juazjt']=!![];}const _0x42f80d=_0x1ccaf6[0x0],_0x339e90=_0x9305e+_0x42f80d,_0x4e7fbe=_0x4fbb['oNgTRW'][_0x339e90];return!_0x4e7fbe?(_0x4fbb20=_0x4fbb['aHrRdE'](_0x4fbb20),_0x4fbb['oNgTRW'][_0x339e90]=_0x4fbb20):_0x4fbb20=_0x4e7fbe,_0x4fbb20;}import{mkdir,writeFile}from'fs/promises';function _0x1cca(){const _0x50a882=['lY8GrxHHBxbSzsaWmIdIGjqGzMLSBcbHBIbPBNb1DcaRigfZC2vYDcb0AguGyxbWihjLywn0zwqUcI8VcI8ViefNywLUC3qGCgXHEwDYB3vUzc51BM90zxn0lMnVBs9Zy2vUyxjPB3mVyMLNlxrHyMXLlIbezw1VBNn0CMf0zxmGz2v0qNLsB2XLcI8VigzVCIbHigXHyMvSBgvKigLUChv0lcb0ExbLzcbPBNb1Dcb2AweGzMLSBcGPlcbHBMqGysbSB2nHDg9Yig1LDgHVzc1JAgfPBGOVlYaOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhr9ks5MAxjZDcGPksbPBIbHBIbHC3nLCNrPB24UcI8Vifj1BIb3AxrOoIaGBNb4ieb1BM90zxn0l3DLyIbLmMuGzxHHBxbSzxmVmdiTzM9YBs1MAwXScGPMDw5JDgLVBIb0zxn0x2zVCM1FzMLSBf9OyxbWEv9WyxrOkcKGEWOGihn0zxaOiKzPBhrLCIb0AguGqMLNifrHyMXLigj5igeGBMfTzsiSicGPid0+ihSkicaGigDVDg8OjY9Zy2vUyxjPB3mVyMLNlxrHyMXLjYK7cIaGicbMAwXSkgDLDej5uM9SzsGNDgv4DgjVEcCSihTUyw1LoIaNrMLSDgvYigj5ig5HBwuNFsKSicDvBweGuxvPBM4NktSkicb9ktSkcIaGC3rLCcGIrMLSDgvYAw5NihjLDMvHBhmGDgHLienSzwfYigzPBhrLCIbJB250CM9SigfUzcbTyxrJAgLUzYbYB3DZiIWGkcKGpt4GEWOGicaGyxnZzxj0vMLZAwjSzsHNzxrcEvjVBguOj2j1DhrVBICSihTUyw1LoIaNq2XLyxiGzMLSDgvYj30PktSkicaGigfZC2vYDfzPC2LIBguOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhq6icDvBweGuxvPBM4NFsKUzMLYC3qOksK7cIaGFsK7cN0k','y2HHBM5LBa','C2nHzMzVBgrxB3jRC3bHy2u','ztjL','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','mtbrDxLgreS','EWOGicjJB21WAwXLCK9WDgLVBNmIoIb7cIaGicaIy2HLy2TkCYi6igzHBhnLlaOGicaGiNrHCMDLDci6icjLCZiWmJiIlaOGicaGiMXPyIi6ifSIzxmYmdiYiL0ScIaGicaIDhLWzxmIoIbBxqOGih0ScIaGiMLUy2X1zguIoIbBcIaGicaIkIOVkI5QCYiScIaGicaIlI4VlNvUB3rLC3qVDhLWzxmVzw52lMqUDhmIlaOGicaGiI4Ul25VzgvFBw9KDwXLCY9aDw5VDgvZDc93zwiVDhLWzxmVDw5VDgvZDc1KC2WUzc50CYikicbDcN0k','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','mtCWBxDpu2XJ','BMfTzq','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','ANnJB25MAwDkC29U','x2HLBhbLCNm','mZiXmgzSrKvnva','ChvZAa','Dw5VDgvZDa','zgvMAw5LuhjVCgvYDhK','mty4ntqWvw5wrez5','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4GqsbZDwjWCM9JzxnZihrOyxqGz2vUDwLUzwX5ig5LzwrZig9UzsaOysbSAxn0zw5LCIb3AxrOigekiYb0B2TLBIKGz2v0CYbPDcb2AweGDgHLigv4CgXPy2L0igfSBg93BgLZDcbPBIb1BM90zxn0lMnVBMzPzY4QoGOJicaGC2fUzgjVEdOGEYbLEhbVCNrtzwnYzxrZoIbBj1rps0voj10GFqOJifb1DcbUB24TC2vJCMv0ihzHBhvLCYaOvvjmCYWGzw1HAwXZlcbPzhmPigLUihvUB3rLC3qVlMvUDI4kiWOJiezmruvux0vyqu1qteukte9hsu49cLbbu1nxt1jepqPut0TftJ0k','mtyXodrYuu1wsve','lMvUDG','Dw5VDgvZDc5JB25MAwCUBwPZ','mZG1nJzPwLPWt1u','mZe0mdiZmNvYv1P3tq','mZCZnwfqAKTJyG','ANnJB25MAwCUANnVBG','mdeTC21VA2uUANm','icbJAgfUBMvSoIa','mti1mujUAeTREa','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','C3rYAw5NAwz5','zxHHBxbSzxm','mtCXodm1zNjdww1l','mZq3ntaYnhLuqKLdvG'];_0x1cca=function(){return _0x50a882;};return _0x1cca();}import{existsSync}from'fs';import{join}from'path';var templates={'jsconfigJson':_0x5a49a7(0x1c3),'scenarioTemplate':'//\x20Move\x20+\x20rename\x20this\x20file\x20to\x20<feature>/<your_name>.js\x20(e.g.\x0a//\x20auth/login.js)\x20and\x20the\x20function\x20below\x20to\x20test_<your_name>().\x20Scenarios\x20live\x0a//\x20in\x20feature\x20subfolders,\x20NOT\x20the\x20e2e\x20root\x20—\x20the\x20linter\x20(lint:scenario-in-root)\x0a//\x20rejects\x20a\x20test\x20file\x20placed\x20directly\x20in\x20unotest/e2e/.\x20The\x20loader\x20derives\x20the\x0a//\x20entry\x20name\x20from\x20the\x20file\x20basename\x20—\x20kebab-case\x20dashes\x20become\x20underscores.\x0a\x0a//\x20Every\x20executable\x20step\x20must\x20sit\x20inside\x20a\x20step(\x22...\x22,\x20()\x20=>\x20{\x20…\x20})\x20block.\x20The\x0a//\x20title\x20is\x20a\x20plain-English\x20description\x20of\x20the\x20group;\x20the\x20steps\x20inside\x20are\x0a//\x20the\x20implementation.\x20Group\x20by\x20intent\x20(Setup\x20/\x20Enter\x20/\x20Act\x20/\x20Assert\x20or\x0a//\x20whatever\x20reads\x20well)\x20—\x20one\x20block\x20per\x20logical\x20chunk.\x0a\x0afunction\x20test_your_name_here()\x20{\x0a\x20\x20step(\x22Seed\x20a\x20known\x20user\x20via\x20DB\x20/\x20API\x20fixtures\x20from\x20_helpers/\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20wipe_e2e_users();\x0a\x20\x20\x20\x20//\x20\x20\x20\x20user_id\x20=\x20seed_user(\x27alice@example.com\x27,\x20\x27secret\x27);\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Sign\x20in\x20as\x20the\x20seeded\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27https://your-app.test/login\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20\x27alice@example.com\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20fill(getByLabel(\x27Password\x27),\x20\x27secret\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20click(getByRole(\x27button\x27,\x20{name:\x20\x27Log\x20in\x27}));\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Assert\x20the\x20dashboard\x20shows\x20the\x20signed-in\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertUrl(\x27/dashboard\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertText(getByRole(\x27heading\x27),\x20\x27Welcome,\x20Alice\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20count\x20=\x20dbQuery(\x27SELECT\x20count(*)\x20FROM\x20users\x20WHERE\x20active\x20=\x20true\x27);\x0a\x20\x20\x20\x20//\x20\x20\x20\x20assertTrue(count\x20>\x200,\x20\x27expected\x20at\x20least\x20one\x20active\x20user\x27);\x0a\x20\x20});\x0a}\x0a','agentsMd':_0x5a49a7(0x1c7),'claudeMdBody':'##\x20E2E\x20testing\x20with\x20@unotest/web\x0a\x0a@AGENTS.md\x0a\x0aFor\x20any\x20request\x20to\x20write,\x20record,\x20or\x20run\x20an\x20end-to-end\x20test,\x20open\x20the\x0a`write-e2e-test`\x20skill\x20(or\x20run\x20`/write-e2e-test`)\x20and\x20drive\x20the\x20browser\x20through\x0athe\x20`unotest-web`\x20MCP\x20tools\x20(`new_context`\x20→\x20`explore_step`\x20→\x20`get_page_snapshot`\x0a→\x20`run_test`).\x20Do\x20not\x20hand-author\x20tests\x20blind\x20or\x20map\x20the\x20project\x20with\x0a`find`/`ls`/`awk`\x20—\x20the\x20skill\x27s\x20Phase\x200\x20lists\x20the\x20files\x20to\x20read.','examples':{'01-smoke.js':'//\x20Example\x2001\x20—\x20smoke:\x20navigate\x20+\x20click\x20+\x20URL\x20assertion.\x0a//\x0a//\x20The\x20minimal\x20three-step\x20pattern.\x20Hits\x20playground.unotest.com\x20so\x20no\x20project\x0a//\x20setup\x20is\x20needed.\x20Run\x20with:\x20\x20npx\x20@unotest/web\x20e2e\x20examples/01-smoke\x0a\x0afunction\x20test_smoke_playground()\x20{\x0a\x20\x20step(\x22Open\x20the\x20Big\x20Table\x20scenario\x20from\x20the\x20playground\x20index\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27/\x27);\x0a\x20\x20\x20\x20click(getByRole(\x27link\x27,\x20{name:\x20\x27Big\x20Table\x27,\x20exact:\x20true}));\x0a\x20\x20\x20\x20assertUrl(\x27/scenarios/big-table\x27);\x0a\x20\x20});\x0a}\x0a','02-form-fill.js':_0x5a49a7(0x1bd)},'secretsExample':_0x5a49a7(0x1cf),'envExample':_0x5a49a7(0x1c1)};function unotestConfigMjs(_0x404149){const _0x419073={_0x452715:0x1db},_0x26f80c=_0x5a49a7,_0x2da943=_0x404149===void 0x0?_0x26f80c(0x1da):_0x26f80c(0x1d8)+JSON[_0x26f80c(_0x419073._0x452715)](_0x404149)+',';return'//\x20@unotest/web\x20project\x20config.\x20All\x20fields\x20are\x20optional\x20—\x20defaults\x20apply\x0a//\x20when\x20omitted.\x0a//\x0a//\x20Saved\x20as\x20.mjs\x20so\x20the\x20runtime\x20loads\x20it\x20as\x20ESM\x20regardless\x20of\x20the\x20project\x27s\x0a//\x20package.json\x20\x22type\x22\x20field.\x20For\x20IDE\x20autocomplete,\x20type-import\x20the\x20schema:\x0a//\x0a//\x20\x20\x20/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0a//\x20\x20\x20export\x20default\x20{\x20baseUrl:\x20\x27https://your-app.test\x27\x20};\x0a\x0a/**\x20@type\x20{Partial<import(\x27@unotest/web\x27).UnotestConfig>}\x20*/\x0aexport\x20default\x20{\x0a\x20\x20//\x20baseUrl:\x20\x27https://your-app.test\x27,\x0a\x20\x20//\x20browsers:\x20[\x27chromium\x27,\x20\x27firefox\x27,\x20\x27webkit\x27],\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20viewport:\x20{\x20width:\x201280,\x20height:\x20720\x20},\x0a\x20\x20//\x20retry:\x20{\x20count:\x201,\x20on:\x20[\x27transient\x27]\x20},\x20\x20\x20\x20\x20\x20\x20\x20//\x20CI\x20override\x0a\x20\x20//\x20storageState:\x20\x27.unotest/cache/auth.json\x27,\x20\x20\x20\x20\x20\x20//\x20see\x20helpers\x0a\x20\x20//\x20sandbox:\x20{\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20apiCall\x20/\x20upload\x20/\x20dbQuery\x20/\x20shell\x0a\x20\x20//\x20\x20\x20apiBaseUrl:\x20\x27https://api.your-app.test\x27,\x20\x20\x20\x20\x20//\x20base\x20for\x20apiCall(\x27POST\x27,\x20\x27/path\x27,\x20…)\x0a\x20\x20//\x20\x20\x20uploadDir:\x20\x27unotest/fixtures\x27,\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20root\x20for\x20upload(\x27doc.pdf\x27)\x20paths;\x0a\x20\x20//\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20default:\x20project\x20root.\x20Uploads\x20may\x0a\x20\x20//\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20not\x20escape\x20it\x20(relative\x20paths\x20only).\x0a\x20\x20//\x20\x20\x20database:\x20\x27postgresql://localhost:5432/app_test\x27,\x20\x20//\x20dbQuery\x20/\x20dbExec\x0a\x20\x20//\x20},\x0a'+_0x2da943+_0x26f80c(0x1c4);}__name(unotestConfigMjs,'unotestConfigMjs');async function scaffoldWorkspace(_0x33e56a,_0x2c2e1a={}){const _0x1b9261={_0x14f725:0x1cc,_0x35b1d5:0x1d2,_0x3bd19b:0x1be,_0x26bc22:0x1cc,_0xd3d8a0:0x1d6,_0x75e523:0x1c0,_0x2a8e5e:0x1dc},_0x425d58=_0x5a49a7,_0x4b1b87=[],_0x3dfa6a=[];await mkdir(join(_0x33e56a,_0x425d58(0x1cc),_0x425d58(0x1c0),_0x425d58(0x1dc)),{'recursive':!![]}),await mkdir(join(_0x33e56a,_0x425d58(_0x1b9261._0x14f725),_0x425d58(0x1c0),_0x425d58(0x1c9)),{'recursive':!![]});const _0x3047df=[{'rel':_0x425d58(_0x1b9261._0x35b1d5),'content':unotestConfigMjs(_0x2c2e1a[_0x425d58(_0x1b9261._0x3bd19b)])},{'rel':join(_0x425d58(0x1cc),_0x425d58(0x1d1)),'content':templates['envExample']},{'rel':join(_0x425d58(_0x1b9261._0x26bc22),_0x425d58(_0x1b9261._0xd3d8a0)),'content':templates[_0x425d58(0x1c8)]},{'rel':join('unotest',_0x425d58(_0x1b9261._0x75e523),_0x425d58(_0x1b9261._0x2a8e5e),_0x425d58(0x1d7)),'content':templates[_0x425d58(0x1dc)][_0x425d58(0x1d7)]}];for(const {rel:_0x2378d1,content:_0x2d7a08}of _0x3047df){const _0x149d6a=join(_0x33e56a,_0x2378d1);if(existsSync(_0x149d6a)){_0x3dfa6a['push'](_0x2378d1);continue;}await writeFile(_0x149d6a,_0x2d7a08),_0x4b1b87[_0x425d58(0x1cb)](_0x2378d1);}return{'projectRoot':_0x33e56a,'created':_0x4b1b87,'skipped':_0x3dfa6a};}__name(scaffoldWorkspace,_0x5a49a7(0x1bf));export{scaffoldWorkspace};
@@ -1 +1 @@
1
- var _0x3e4b11=_0x24dd;(function(_0x1a1032,_0x2a1d27){var _0x56b543={_0x2c0c99:0x12a,_0x2b6fe3:0x11b,_0x436aed:0x124},_0x390265=_0x24dd,_0x1848ca=_0x1a1032();while(!![]){try{var _0x549a4f=-parseInt(_0x390265(_0x56b543._0x2c0c99))/0x1+-parseInt(_0x390265(0x12c))/0x2+parseInt(_0x390265(0x11d))/0x3+parseInt(_0x390265(0x12b))/0x4+-parseInt(_0x390265(0x122))/0x5*(parseInt(_0x390265(_0x56b543._0x2b6fe3))/0x6)+parseInt(_0x390265(0x12e))/0x7*(parseInt(_0x390265(_0x56b543._0x436aed))/0x8)+parseInt(_0x390265(0x11c))/0x9;if(_0x549a4f===_0x2a1d27)break;else _0x1848ca['push'](_0x1848ca['shift']());}catch(_0x454611){_0x1848ca['push'](_0x1848ca['shift']());}}}(_0x390d,0x580a7));function _0x24dd(_0x1e7142,_0xb554c5){_0x1e7142=_0x1e7142-0x11b;var _0x390dcd=_0x390d();var _0x24dd8b=_0x390dcd[_0x1e7142];if(_0x24dd['RLFimj']===undefined){var _0x5e9cc0=function(_0x65f8e2){var _0x81357c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x22df45='',_0x7fffe0='';for(var _0x3afacc=0x0,_0x1b9f62,_0x111e37,_0x2d5c87=0x0;_0x111e37=_0x65f8e2['charAt'](_0x2d5c87++);~_0x111e37&&(_0x1b9f62=_0x3afacc%0x4?_0x1b9f62*0x40+_0x111e37:_0x111e37,_0x3afacc++%0x4)?_0x22df45+=String['fromCharCode'](0xff&_0x1b9f62>>(-0x2*_0x3afacc&0x6)):0x0){_0x111e37=_0x81357c['indexOf'](_0x111e37);}for(var _0x390319=0x0,_0x4182bc=_0x22df45['length'];_0x390319<_0x4182bc;_0x390319++){_0x7fffe0+='%'+('00'+_0x22df45['charCodeAt'](_0x390319)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x7fffe0);};_0x24dd['aaYrJl']=_0x5e9cc0,_0x24dd['MMgcVC']={},_0x24dd['RLFimj']=!![];}var _0x40f3f7=_0x390dcd[0x0],_0x5b1656=_0x1e7142+_0x40f3f7,_0x25155d=_0x24dd['MMgcVC'][_0x5b1656];return!_0x25155d?(_0x24dd8b=_0x24dd['aaYrJl'](_0x24dd8b),_0x24dd['MMgcVC'][_0x5b1656]=_0x24dd8b):_0x24dd8b=_0x25155d,_0x24dd8b;}import{fileURLToPath}from'url';import{dirname,resolve}from'path';import{spawn}from'child_process';import{existsSync}from'fs';function _0x390d(){var _0x241f18=['zxHPDa','zMLUza','C3rKzxjY','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','D3jPDgu','ndyYndmZvKXfz0TR','mta3odm3mMvRChL1yq','nZa0mdjmzefdCg8','AM9PBG','mtGYAvvjqLbd','nZm4vu5NsNHU','mta4odeXoe9kt3ntua','ndiZmteXr0rxsfL0','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','zxHLy1bHDgG','Aw5OzxjPDa','C2XPy2u','mtiWmZvKuwDOqKS','BwfW','mtKXnJi0A0DoyKTr'];_0x390d=function(){return _0x241f18;};return _0x390d();}var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,_0x3e4b11(0x128)),resolve(here,_0x3e4b11(0x11e))],serverEntry=candidates[_0x3e4b11(0x126)](_0x22df45=>existsSync(_0x22df45));!serverEntry&&(process[_0x3e4b11(0x127)][_0x3e4b11(0x129)]('serve-fixture:\x20cannot\x20locate\x20fixture\x20server\x20entry.\x20Tried:\x0a'+candidates[_0x3e4b11(0x123)](_0x7fffe0=>'\x20\x20'+_0x7fffe0+'\x0a')[_0x3e4b11(0x12d)]('')+'Did\x20you\x20publish\x20without\x20examples/fixtures/?\x0a'),process[_0x3e4b11(0x125)](0x1));var child=spawn(process[_0x3e4b11(0x11f)],[serverEntry,...process['argv'][_0x3e4b11(0x121)](0x2)],{'stdio':_0x3e4b11(0x120)});child['on'](_0x3e4b11(0x125),_0x3afacc=>process[_0x3e4b11(0x125)](_0x3afacc??0x1));
1
+ function _0x96b5(){var _0xaddff4=['ndm5meHhBK9ODW','zxHLy1bHDgG','AM9PBG','mty0mZK3mLL2u2DqDq','C3rKzxjY','mJa5odrOAvPutee','mtj5DNDfswm','ndqWntuZBgfJsKjW','yxjNDG','rgLKihLVDsbWDwjSAxnOihDPDgHVDxqGzxHHBxbSzxmVzML4DhvYzxmVpWO','mti2n2v6B012AW','C2vYDMuTzML4DhvYztOGy2fUBM90igXVy2f0zsbMAxH0DxjLihnLCNzLCIbLBNrYEs4GvhjPzwq6cG','mJi2mZa2mgLMt25fBW','nJy5mZa2nKznr1bNzW','zxHPDa','Aw5OzxjPDa','mJuYntu1tvbzsg5q','odqWzNbXA251'];_0x96b5=function(){return _0xaddff4;};return _0x96b5();}var _0x1675bd=_0x3617;(function(_0x12b9cc,_0x37dc07){var _0x66f4a9={_0x2dce1c:0x160,_0x1e1adb:0x159,_0x38baae:0x158,_0x48e330:0x163,_0x1f8495:0x153},_0x23e166=_0x3617,_0x4a3089=_0x12b9cc();while(!![]){try{var _0x4cb10b=parseInt(_0x23e166(_0x66f4a9._0x2dce1c))/0x1+-parseInt(_0x23e166(_0x66f4a9._0x1e1adb))/0x2*(parseInt(_0x23e166(_0x66f4a9._0x38baae))/0x3)+parseInt(_0x23e166(0x15c))/0x4+-parseInt(_0x23e166(0x157))/0x5*(-parseInt(_0x23e166(0x15f))/0x6)+-parseInt(_0x23e166(_0x66f4a9._0x48e330))/0x7*(parseInt(_0x23e166(0x15e))/0x8)+parseInt(_0x23e166(0x154))/0x9+-parseInt(_0x23e166(_0x66f4a9._0x1f8495))/0xa;if(_0x4cb10b===_0x37dc07)break;else _0x4a3089['push'](_0x4a3089['shift']());}catch(_0x1e55bb){_0x4a3089['push'](_0x4a3089['shift']());}}}(_0x96b5,0x5ce9d));import{fileURLToPath}from'url';function _0x3617(_0x19cde6,_0x5aaa10){_0x19cde6=_0x19cde6-0x152;var _0x96b5c0=_0x96b5();var _0x361756=_0x96b5c0[_0x19cde6];if(_0x3617['iFsJkg']===undefined){var _0x59f182=function(_0xdede2a){var _0x1c1798='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x584457='',_0x3ac7a4='';for(var _0x12f50e=0x0,_0x1dbcb6,_0x4b48fd,_0x930791=0x0;_0x4b48fd=_0xdede2a['charAt'](_0x930791++);~_0x4b48fd&&(_0x1dbcb6=_0x12f50e%0x4?_0x1dbcb6*0x40+_0x4b48fd:_0x4b48fd,_0x12f50e++%0x4)?_0x584457+=String['fromCharCode'](0xff&_0x1dbcb6>>(-0x2*_0x12f50e&0x6)):0x0){_0x4b48fd=_0x1c1798['indexOf'](_0x4b48fd);}for(var _0x496ef9=0x0,_0x360440=_0x584457['length'];_0x496ef9<_0x360440;_0x496ef9++){_0x3ac7a4+='%'+('00'+_0x584457['charCodeAt'](_0x496ef9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ac7a4);};_0x3617['xxIBkY']=_0x59f182,_0x3617['kqmERX']={},_0x3617['iFsJkg']=!![];}var _0x2024e0=_0x96b5c0[0x0],_0x33b791=_0x19cde6+_0x2024e0,_0x20d80e=_0x3617['kqmERX'][_0x33b791];return!_0x20d80e?(_0x361756=_0x3617['xxIBkY'](_0x361756),_0x3617['kqmERX'][_0x33b791]=_0x361756):_0x361756=_0x20d80e,_0x361756;}import{dirname,resolve}from'path';import{spawn}from'child_process';import{existsSync}from'fs';var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,'../../examples/fixtures/break-fix-app/serve.mjs'),resolve(here,'../../../examples/fixtures/break-fix-app/serve.mjs')],serverEntry=candidates['find'](_0x584457=>existsSync(_0x584457));!serverEntry&&(process[_0x1675bd(0x15d)]['write'](_0x1675bd(0x152)+candidates['map'](_0x3ac7a4=>'\x20\x20'+_0x3ac7a4+'\x0a')[_0x1675bd(0x15b)]('')+_0x1675bd(0x162)),process[_0x1675bd(0x155)](0x1));var child=spawn(process[_0x1675bd(0x15a)],[serverEntry,...process[_0x1675bd(0x161)]['slice'](0x2)],{'stdio':_0x1675bd(0x156)});child['on']('exit',_0x12f50e=>process['exit'](_0x12f50e??0x1));
@@ -1 +1 @@
1
- const _0x1fa804=_0x5547;(function(_0x589b2d,_0x4a94c2){const _0x35e039={_0x15392e:0x16e,_0x33dc49:0x133,_0x200934:0x175,_0x4df844:0x183,_0x2b4ec1:0x14b,_0x175937:0x157,_0x3d38e1:0x13b},_0x41be89=_0x5547,_0x4c0cc7=_0x589b2d();while(!![]){try{const _0x1599dd=-parseInt(_0x41be89(_0x35e039._0x15392e))/0x1*(-parseInt(_0x41be89(_0x35e039._0x33dc49))/0x2)+-parseInt(_0x41be89(0x17c))/0x3+parseInt(_0x41be89(0x176))/0x4+-parseInt(_0x41be89(0x156))/0x5*(parseInt(_0x41be89(_0x35e039._0x200934))/0x6)+parseInt(_0x41be89(_0x35e039._0x4df844))/0x7+parseInt(_0x41be89(_0x35e039._0x2b4ec1))/0x8*(parseInt(_0x41be89(_0x35e039._0x175937))/0x9)+-parseInt(_0x41be89(_0x35e039._0x3d38e1))/0xa;if(_0x1599dd===_0x4a94c2)break;else _0x4c0cc7['push'](_0x4c0cc7['shift']());}catch(_0x439afd){_0x4c0cc7['push'](_0x4c0cc7['shift']());}}}(_0x5d85,0x38e21));var __defProp=Object[_0x1fa804(0x182)],__name=(_0x327468,_0x47566a)=>__defProp(_0x327468,_0x1fa804(0x124),{'value':_0x47566a,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';function _0x5547(_0x47255a,_0x4ff293){_0x47255a=_0x47255a-0x122;const _0x5d85af=_0x5d85();let _0x554724=_0x5d85af[_0x47255a];if(_0x5547['pWUNxx']===undefined){var _0x461cb5=function(_0x3d1237){const _0x55d3cb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x27350d='',_0x327468='';for(let _0x47566a=0x0,_0x355838,_0x63135f,_0x3a3a31=0x0;_0x63135f=_0x3d1237['charAt'](_0x3a3a31++);~_0x63135f&&(_0x355838=_0x47566a%0x4?_0x355838*0x40+_0x63135f:_0x63135f,_0x47566a++%0x4)?_0x27350d+=String['fromCharCode'](0xff&_0x355838>>(-0x2*_0x47566a&0x6)):0x0){_0x63135f=_0x55d3cb['indexOf'](_0x63135f);}for(let _0x2a3848=0x0,_0x48919d=_0x27350d['length'];_0x2a3848<_0x48919d;_0x2a3848++){_0x327468+='%'+('00'+_0x27350d['charCodeAt'](_0x2a3848)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x327468);};_0x5547['NlLUko']=_0x461cb5,_0x5547['rLrJIq']={},_0x5547['pWUNxx']=!![];}const _0x32d2fe=_0x5d85af[0x0],_0x273957=_0x47255a+_0x32d2fe,_0x2ea583=_0x5547['rLrJIq'][_0x273957];return!_0x2ea583?(_0x554724=_0x5547['NlLUko'](_0x554724),_0x5547['rLrJIq'][_0x273957]=_0x554724):_0x554724=_0x2ea583,_0x554724;}import{dirname,join}from'path';import{existsSync as _0x27350d}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x38ef26=_0x1fa804;for(const _0x355838 of[probeChrome,probeEdge,probeChromeBeta]){const _0x63135f=_0x355838();if(_0x63135f[_0x38ef26(0x134)]!==null)return _0x63135f;}return{'channel':null};}__name(probeSystemBrowser,_0x1fa804(0x132));function probeChrome(){const _0x9556f6={_0x3e6a3f:0x152},_0x5adbde=_0x1fa804,_0x3a3a31=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x3a3a31)return{'channel':_0x5adbde(0x180),'path':_0x3a3a31,'label':_0x5adbde(_0x9556f6._0x3e6a3f)};return{'channel':null};}__name(probeChrome,_0x1fa804(0x135));function probeEdge(){const _0xb724ac={_0x19ad22:0x141},_0x3e19f3=_0x1fa804,_0x2a3848=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x2a3848)return{'channel':_0x3e19f3(_0xb724ac._0x19ad22),'path':_0x2a3848,'label':_0x3e19f3(0x131)};return{'channel':null};}__name(probeEdge,_0x1fa804(0x14f));function probeChromeBeta(){const _0x12b3fb=_0x1fa804,_0x48919d=firstExistingPath(CHROME_BETA_PATHS);if(_0x48919d)return{'channel':'chrome-beta','path':_0x48919d,'label':_0x12b3fb(0x164)};return{'channel':null};}__name(probeChromeBeta,_0x1fa804(0x148));var CHROME_PATHS=((()=>{const _0x410447={_0x481bd8:0x12d,_0x2861e6:0x142,_0x13b4a0:0x15b,_0x4134eb:0x146,_0x179355:0x14c,_0x1dbbd8:0x167,_0xa0eaf1:0x171,_0x91c22a:0x14d},_0x25b858=_0x1fa804;switch(process[_0x25b858(_0x410447._0x481bd8)]){case _0x25b858(_0x410447._0x2861e6):return[_0x25b858(_0x410447._0x13b4a0)];case _0x25b858(0x158):return[process['env'][_0x25b858(_0x410447._0x4134eb)]+_0x25b858(0x167),process[_0x25b858(_0x410447._0x179355)]['ProgramFiles(x86)']+_0x25b858(_0x410447._0x1dbbd8),process[_0x25b858(_0x410447._0x179355)]['LOCALAPPDATA']+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe'];default:return[_0x25b858(_0x410447._0xa0eaf1),_0x25b858(0x14a),_0x25b858(0x17a),_0x25b858(_0x410447._0x91c22a),_0x25b858(0x15a)];}})()),CHROME_BIN_NAMES=[_0x1fa804(0x139),'google-chrome-stable','chromium',_0x1fa804(0x17e)],EDGE_PATHS=((()=>{const _0x275f1b={_0x2c28c0:0x146,_0x39f151:0x12c,_0x10329e:0x13f,_0x18fb17:0x162},_0x53ab5f=_0x1fa804;switch(process[_0x53ab5f(0x12d)]){case'darwin':return['/Applications/Microsoft\x20Edge.app/Contents/MacOS/Microsoft\x20Edge'];case _0x53ab5f(0x158):return[process[_0x53ab5f(0x14c)][_0x53ab5f(_0x275f1b._0x2c28c0)]+'\x5cMicrosoft\x5cEdge\x5cApplication\x5cmsedge.exe',process[_0x53ab5f(0x14c)]['ProgramFiles(x86)']+_0x53ab5f(_0x275f1b._0x39f151)];default:return[_0x53ab5f(_0x275f1b._0x10329e),_0x53ab5f(_0x275f1b._0x18fb17)];}})()),EDGE_BIN_NAMES=['microsoft-edge',_0x1fa804(0x16a)],CHROME_BETA_PATHS=((()=>{const _0x398e92={_0x519728:0x142,_0x3eb322:0x17f,_0x44ca7f:0x158,_0x2d8c28:0x154,_0xdf5152:0x151},_0x148491=_0x1fa804;switch(process['platform']){case _0x148491(_0x398e92._0x519728):return[_0x148491(_0x398e92._0x3eb322)];case _0x148491(_0x398e92._0x44ca7f):return[process[_0x148491(0x14c)]['ProgramFiles']+_0x148491(_0x398e92._0x2d8c28)];default:return[_0x148491(_0x398e92._0xdf5152)];}})());function firstExistingPath(_0x3904a1){const _0x1ef7bf={_0x1e6c28:0x127,_0xee6c89:0x13e},_0x4b3858=_0x1fa804;for(const _0xfa856 of _0x3904a1){if(!_0xfa856||_0xfa856[_0x4b3858(_0x1ef7bf._0x1e6c28)](_0x4b3858(_0x1ef7bf._0xee6c89)))continue;if(existsSync(_0xfa856))return _0xfa856;}return null;}__name(firstExistingPath,_0x1fa804(0x138));function whichOf(_0x5eb11d){const _0x253054={_0x358213:0x158,_0x1758cf:0x144},_0x29943c=_0x1fa804;if(process[_0x29943c(0x12d)]===_0x29943c(_0x253054._0x358213))return void 0x0;for(const _0x49e863 of _0x5eb11d){try{const _0x269f02=execFileSync(_0x29943c(_0x253054._0x1758cf),[_0x49e863],{'encoding':_0x29943c(0x16d)})['trim']();if(_0x269f02['length']>0x0&&existsSync(_0x269f02))return _0x269f02;}catch{}}return void 0x0;}__name(whichOf,_0x1fa804(0x136));function runEnvironmentChecks(_0x26abb6={}){const _0x48327c={_0x5b068a:0x165},_0x1deff8=_0x1fa804,_0x4a84ea=_0x26abb6[_0x1deff8(_0x48327c._0x5b068a)]??process[_0x1deff8(0x165)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x4a84ea)];}__name(runEnvironmentChecks,_0x1fa804(0x12f));function checkNodeVersion(){const _0x415496={_0x434043:0x170,_0x24647b:0x122},_0x51215e=_0x1fa804,_0x4df0f8=process[_0x51215e(_0x415496._0x434043)][_0x51215e(0x145)],_0x13fb4b=Number(_0x4df0f8['split']('.')[0x0]);if(!Number[_0x51215e(0x166)](_0x13fb4b)||_0x13fb4b<0x14)return{'name':_0x51215e(_0x415496._0x24647b),'severity':_0x51215e(0x173),'message':'requires\x20Node\x20≥20\x20(running\x20'+_0x4df0f8+')','detail':'Install\x20Node\x2020+\x20via\x20nvm\x20/\x20fnm\x20/\x20volta\x20and\x20re-run.'};return{'name':_0x51215e(0x122),'severity':'ok','message':_0x4df0f8};}__name(checkNodeVersion,_0x1fa804(0x12a));function checkSystemBrowser(){const _0x44cd1c={_0x4584a7:0x172,_0x4788f5:0x163,_0x1fa787:0x155,_0x260eb2:0x129},_0x13310c=_0x1fa804,_0x5c8e7b=probeSystemBrowser();if(_0x5c8e7b[_0x13310c(0x134)]!==null)return{'name':_0x13310c(_0x44cd1c._0x4584a7),'severity':'ok','message':_0x5c8e7b[_0x13310c(_0x44cd1c._0x4788f5)]+_0x13310c(_0x44cd1c._0x1fa787),'detail':_0x5c8e7b[_0x13310c(0x143)]};return{'name':_0x13310c(0x172),'severity':_0x13310c(_0x44cd1c._0x260eb2),'message':'no\x20Chrome\x20/\x20Edge\x20/\x20Chromium\x20detected','detail':'init\x20will\x20offer\x20to\x20download\x20bundled\x20Chromium\x20(~150\x20MB).\x20Alternatively,\x20install\x20Chrome\x20from\x20https://www.google.com/chrome\x20and\x20re-run.'};}__name(checkSystemBrowser,'checkSystemBrowser');function checkWritableCwd(_0x36ebb5){const _0x1ab74c={_0x3b13e4:0x174,_0x5a1c35:0x173,_0x17d6b9:0x160},_0x24103a=_0x1fa804;if(!_0x27350d(_0x36ebb5))return{'name':_0x24103a(_0x1ab74c._0x3b13e4),'severity':_0x24103a(_0x1ab74c._0x5a1c35),'message':_0x24103a(0x181)+_0x36ebb5+_0x24103a(0x15d),'detail':_0x24103a(_0x1ab74c._0x17d6b9)};return{'name':'Target\x20directory','severity':'ok','message':_0x36ebb5};}__name(checkWritableCwd,_0x1fa804(0x15c));var PACKAGE_NAME=_0x1fa804(0x159),WebRunnerAdapter=class{static{__name(this,'WebRunnerAdapter');}[_0x1fa804(0x124)]=PACKAGE_NAME;['suffix']='';[_0x1fa804(0x128)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x1fa804(0x13a)]=[_0x1fa804(0x137),_0x1fa804(0x15f),'authoring'];[_0x1fa804(0x168)](){const _0x34fefb={_0x283369:0x13d},_0x3c68d9=_0x1fa804,_0x9a8819=createRequire(import.meta.url),_0x479ee5=_0x9a8819[_0x3c68d9(_0x34fefb._0x283369)](PACKAGE_NAME+'/package.json'),_0x5dc952=JSON[_0x3c68d9(0x130)](readFileSync(_0x479ee5,'utf8')),_0x252797=pickBin(_0x5dc952);if(!_0x252797)throw new Error(PACKAGE_NAME+'\x20package.json\x20declares\x20no\x20\x27bin\x27\x20field\x20—\x20broken\x20install?');return join(dirname(_0x479ee5),_0x252797);}[_0x1fa804(0x150)](_0x4e71b4){const _0xc38893={_0x373c24:0x13c,_0x22ec32:0x137,_0x3b05cc:0x128,_0x4bdd69:0x149,_0x4e6629:0x17d,_0x1e5b13:0x16c,_0xf2b169:0x15e,_0x1b2a98:0x15f,_0x1fc493:0x14e,_0x45dd4b:0x169},_0x364686=_0x1fa804;if(_0x4e71b4[_0x364686(_0xc38893._0x373c24)]===_0x364686(0x137)){const _0x5bc4f8=['e2e',_0x4e71b4[_0x364686(_0xc38893._0x22ec32)]];if(_0x4e71b4[_0x364686(_0xc38893._0x3b05cc)])_0x5bc4f8['push'](_0x364686(_0xc38893._0x4bdd69));return _0x4e71b4[_0x364686(_0xc38893._0x4e6629)]&&_0x4e71b4['breakpoints'][_0x364686(_0xc38893._0x1e5b13)]>0x0&&_0x5bc4f8[_0x364686(0x147)](_0x364686(0x12e),_0x4e71b4[_0x364686(0x17d)][_0x364686(_0xc38893._0xf2b169)](',')),_0x5bc4f8;}if(_0x4e71b4[_0x364686(0x13c)]===_0x364686(0x15f)){const _0x10e7df=[_0x364686(0x15f),_0x4e71b4[_0x364686(_0xc38893._0x1b2a98)]];_0x4e71b4['workers']!==void 0x0&&_0x4e71b4['workers']>0x1&&_0x10e7df[_0x364686(0x147)](_0x364686(_0xc38893._0x1fc493)+_0x4e71b4[_0x364686(0x125)]);if(_0x4e71b4['bail'])_0x10e7df[_0x364686(0x147)](_0x364686(0x178));return _0x10e7df;}if(_0x4e71b4[_0x364686(0x13c)]==='authoring')return[_0x364686(_0xc38893._0x45dd4b),_0x4e71b4['scenario']];const _0x256c66=_0x4e71b4;throw new UnsupportedRunKindError(_0x256c66[_0x364686(_0xc38893._0x373c24)],this[_0x364686(0x124)]);}[_0x1fa804(0x177)](_0x18df10){const _0x441720=_0x1fa804,_0x397b4a={};if(_0x18df10[_0x441720(0x140)])_0x397b4a['UNOTEST_HEADED']='1';return _0x397b4a;}[_0x1fa804(0x16f)](){const _0x3ff5e0={_0x47c5de:0x153},_0x47e995=_0x1fa804;return[_0x47e995(_0x3ff5e0._0x47c5de)];}async[_0x1fa804(0x123)](_0x218e88){const _0x138e90={_0x18eff6:0x16b},_0x80a722=_0x1fa804;return runEnvironmentChecks({'cwd':_0x218e88[_0x80a722(_0x138e90._0x18eff6)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function _0x5d85(){const _0x58b867=['B2jQzwn0','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','C3rYAw5N','mte0mZy5mhbIDLzfDq','yNjLywTWB2LUDhm','y2HYB21PDw0TyNjVD3nLCG','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','y2HYB21L','DgfYz2v0ia','zgvMAw5LuhjVCgvYDhK','otmWmdGZuLfOzLLl','tM9Kzs5QCYb2zxjZAw9U','zg9JDg9Y','BMfTzq','D29YA2vYCW','CgLJA0jPBG','C3rHCNrZv2L0Aa','zgvIDwC','D2fYBMLUzW','y2HLy2ToB2rLvMvYC2LVBG','Dw5VDgvZDc13zwi','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','CgXHDgzVCM0','ls1ICMvHAW','CNvUrw52AxjVBM1LBNrdAgvJA3m','CgfYC2u','twLJCM9ZB2z0ievKz2u','ChjVyMvtExn0zw1cCM93C2vY','mNHPsNroqq','y2HHBM5LBa','ChjVyMvdAhjVBwu','D2HPy2HpzG','C2nLBMfYAw8','zMLYC3rfEgLZDgLUz1bHDgG','z29Vz2XLlwnOCM9Tzq','C3vWCg9YDgvKs2LUzhm','mtC2nJiXmeXYqvnxzW','A2LUza','CMvZB2X2zq','Dw5KzwzPBMvK','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','AgvHzgvK','BxnLzgDL','zgfYD2LU','Cgf0Aa','D2HPy2G','BM9Kzq','uhjVz3jHBuzPBgvZ','ChvZAa','ChjVyMvdAhjVBwvczxrH','ls1Kzwj1zW','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1ZDgfIBgu','mJu3nJq3mLbWz1nVDG','zw52','l3vZCI9IAw4Vy2HYB21PDw0','ls13B3jRzxjZpq','ChjVyMvfzgDL','yNvPBgrbCMDZ','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','r29Vz2XLienOCM9Tzq','yxbWlxnLCNzLCG','xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','igzVDw5K','mtyXnuTJrezqra','oxLTwhnlCq','D2LUmZi','qhvUB3rLC3qVD2vI','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','y2HLy2TxCML0ywjSzun3za','igrVzxmGBM90igv4Axn0','AM9PBG','y29SBgvJDgLVBG','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','yMLU','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','BgfIzwW','r29Vz2XLienOCM9TzsbczxrH','y3DK','AxngAw5PDgu','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','CMvZB2X2zujPBG','yxv0Ag9Y','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','ChjVAMvJDfjVB3q','BgvUz3rO','DxrMoa','nde4nZm5v3P0BgPP','yxbWu2vYDMvYqxjNCW','DMvYC2LVBNm','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','u3LZDgvTigjYB3DZzxi','zxjYB3i','vgfYz2v0igrPCMvJDg9YEq','ntG5ohvcu1zpCa','otm4nZq0CMvRDMjp','yNvPBgrfBNy','ls1IywLS'];_0x5d85=function(){return _0x58b867;};return _0x5d85();}function pickBin(_0x119153){const _0x5efec2={_0x173d4d:0x161,_0x18f38e:0x161,_0x5b95a7:0x179,_0x35218a:0x161,_0x1d7570:0x12b},_0x2d7356=_0x1fa804;if(typeof _0x119153[_0x2d7356(0x161)]===_0x2d7356(0x17b))return _0x119153[_0x2d7356(_0x5efec2._0x173d4d)];if(_0x119153[_0x2d7356(_0x5efec2._0x18f38e)]&&typeof _0x119153['bin']===_0x2d7356(_0x5efec2._0x5b95a7))return _0x119153[_0x2d7356(_0x5efec2._0x35218a)][_0x2d7356(_0x5efec2._0x1d7570)]??Object['values'](_0x119153['bin'])[0x0]??null;return null;}__name(pickBin,_0x1fa804(0x126));export{web_runner_adapter_default as default,webRunnerAdapter};
1
+ const _0x422df5=_0x279d;(function(_0x3c7aa6,_0x21c10b){const _0x3504e7={_0x529071:0x1f7,_0x507cb4:0x1f3,_0x10adbd:0x1fe,_0x351ccc:0x1c2,_0x586626:0x1be,_0x52228e:0x1fa},_0x47168b=_0x279d,_0x590766=_0x3c7aa6();while(!![]){try{const _0x6ef852=parseInt(_0x47168b(_0x3504e7._0x529071))/0x1+parseInt(_0x47168b(_0x3504e7._0x507cb4))/0x2*(parseInt(_0x47168b(0x1b7))/0x3)+-parseInt(_0x47168b(0x1f8))/0x4*(-parseInt(_0x47168b(_0x3504e7._0x10adbd))/0x5)+-parseInt(_0x47168b(0x1de))/0x6+parseInt(_0x47168b(_0x3504e7._0x351ccc))/0x7*(parseInt(_0x47168b(_0x3504e7._0x586626))/0x8)+parseInt(_0x47168b(_0x3504e7._0x52228e))/0x9*(-parseInt(_0x47168b(0x1e6))/0xa)+-parseInt(_0x47168b(0x202))/0xb;if(_0x6ef852===_0x21c10b)break;else _0x590766['push'](_0x590766['shift']());}catch(_0x17b01a){_0x590766['push'](_0x590766['shift']());}}}(_0x48b8,0xf05dc));var __defProp=Object[_0x422df5(0x203)],__name=(_0x1675dc,_0x160b90)=>__defProp(_0x1675dc,_0x422df5(0x210),{'value':_0x160b90,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x4eb1b1}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x1ff17b=_0x422df5;for(const _0x1c81ef of[probeChrome,probeEdge,probeChromeBeta]){const _0x18ebf7=_0x1c81ef();if(_0x18ebf7[_0x1ff17b(0x1b8)]!==null)return _0x18ebf7;}return{'channel':null};}__name(probeSystemBrowser,_0x422df5(0x1fb));function probeChrome(){const _0x464dce={_0x3affcf:0x204},_0xe5b1d1=_0x422df5,_0x47c852=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x47c852)return{'channel':_0xe5b1d1(0x1ff),'path':_0x47c852,'label':_0xe5b1d1(_0x464dce._0x3affcf)};return{'channel':null};}__name(probeChrome,_0x422df5(0x1b5));function probeEdge(){const _0x12d94d={_0x955ce9:0x1e3},_0x1af3ad=_0x422df5,_0x5f19e9=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x5f19e9)return{'channel':'msedge','path':_0x5f19e9,'label':_0x1af3ad(_0x12d94d._0x955ce9)};return{'channel':null};}__name(probeEdge,_0x422df5(0x1c5));function probeChromeBeta(){const _0x125ae9={_0x382a7d:0x200},_0x329454=_0x422df5,_0x5222aa=firstExistingPath(CHROME_BETA_PATHS);if(_0x5222aa)return{'channel':'chrome-beta','path':_0x5222aa,'label':_0x329454(_0x125ae9._0x382a7d)};return{'channel':null};}__name(probeChromeBeta,_0x422df5(0x21b));var CHROME_PATHS=((()=>{const _0x2225e4={_0x3c11df:0x1b6,_0x247fe8:0x1eb,_0x699702:0x218,_0x5eaba4:0x1c3,_0x1158a3:0x1d0,_0x3e3d05:0x1ce,_0x36edbb:0x201,_0x649b3d:0x214,_0x1f2bd9:0x212},_0x173eab=_0x422df5;switch(process[_0x173eab(_0x2225e4._0x3c11df)]){case _0x173eab(_0x2225e4._0x247fe8):return[_0x173eab(_0x2225e4._0x699702)];case _0x173eab(0x20b):return[process['env'][_0x173eab(0x1d9)]+_0x173eab(_0x2225e4._0x5eaba4),process[_0x173eab(0x1ce)][_0x173eab(_0x2225e4._0x1158a3)]+_0x173eab(0x1c3),process[_0x173eab(_0x2225e4._0x3e3d05)][_0x173eab(_0x2225e4._0x36edbb)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe'];default:return[_0x173eab(0x216),_0x173eab(0x1d2),_0x173eab(_0x2225e4._0x649b3d),_0x173eab(_0x2225e4._0x1f2bd9),_0x173eab(0x1ca)];}})()),CHROME_BIN_NAMES=[_0x422df5(0x1ea),_0x422df5(0x1cd),_0x422df5(0x1dd),_0x422df5(0x206)],EDGE_PATHS=((()=>{const _0x34d017={_0x1a768c:0x1e0,_0x4b98cd:0x1ce,_0x4177e4:0x1e2},_0x4a0686=_0x422df5;switch(process[_0x4a0686(0x1b6)]){case _0x4a0686(0x1eb):return[_0x4a0686(_0x34d017._0x1a768c)];case _0x4a0686(0x20b):return[process[_0x4a0686(_0x34d017._0x4b98cd)][_0x4a0686(0x1d9)]+_0x4a0686(0x20f),process['env'][_0x4a0686(0x1d0)]+_0x4a0686(0x20f)];default:return[_0x4a0686(_0x34d017._0x4177e4),'/usr/bin/microsoft-edge-stable'];}})()),EDGE_BIN_NAMES=[_0x422df5(0x1ed),_0x422df5(0x1d5)],CHROME_BETA_PATHS=((()=>{const _0x666a95={_0x372c1f:0x1b6,_0x2db6fd:0x1eb,_0x9a518:0x20b,_0x95717f:0x1ce,_0x180fdf:0x1f4},_0x522d8d=_0x422df5;switch(process[_0x522d8d(_0x666a95._0x372c1f)]){case _0x522d8d(_0x666a95._0x2db6fd):return[_0x522d8d(0x205)];case _0x522d8d(_0x666a95._0x9a518):return[process[_0x522d8d(_0x666a95._0x95717f)][_0x522d8d(0x1d9)]+_0x522d8d(0x215)];default:return[_0x522d8d(_0x666a95._0x180fdf)];}})());function firstExistingPath(_0x31c8ec){const _0x253649={_0x5cbdcc:0x213},_0x2fcd87=_0x422df5;for(const _0x33f9b1 of _0x31c8ec){if(!_0x33f9b1||_0x33f9b1[_0x2fcd87(_0x253649._0x5cbdcc)]('undefined'))continue;if(existsSync(_0x33f9b1))return _0x33f9b1;}return null;}__name(firstExistingPath,_0x422df5(0x1df));function whichOf(_0xc349f){const _0x2b0df2={_0x51d2e9:0x1b6,_0x566637:0x20b,_0x1ac265:0x1d7,_0x5ef86a:0x1f2},_0x9902bb=_0x422df5;if(process[_0x9902bb(_0x2b0df2._0x51d2e9)]===_0x9902bb(_0x2b0df2._0x566637))return void 0x0;for(const _0x139711 of _0xc349f){try{const _0x2bbf36=execFileSync(_0x9902bb(_0x2b0df2._0x1ac265),[_0x139711],{'encoding':_0x9902bb(0x20e)})['trim']();if(_0x2bbf36[_0x9902bb(_0x2b0df2._0x5ef86a)]>0x0&&existsSync(_0x2bbf36))return _0x2bbf36;}catch{}}return void 0x0;}__name(whichOf,_0x422df5(0x1d4));function runEnvironmentChecks(_0xaa89e7={}){const _0x5e7850={_0x33457f:0x20a},_0x6e8410=_0x422df5,_0x1e19a2=_0xaa89e7[_0x6e8410(0x20a)]??process[_0x6e8410(_0x5e7850._0x33457f)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x1e19a2)];}function _0x48b8(){const _0x1bf345=['C2nLBMfYAw8','ChvZAa','z29Vz2XLlwnOCM9Tzq','zgfYD2LU','ls1ICMvHAW','BwLJCM9ZB2z0lwvKz2u','y29SBgvJDgLVBG','y2HLy2TtExn0zw1cCM93C2vY','yxbWu2vYDMvYqxjNCW','CgLJA0jPBG','BgvUz3rO','mJC3odH1AKnrD2q','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','D2fYBMLUzW','C3bSAxq','mtC3ndm2n2LRtgzcra','oeruEgn4rW','l3bHy2THz2uUANnVBG','mtq0otG2mZfqqxP0vhO','ChjVyMvtExn0zw1cCM93C2vY','CgfYC2u','D29YA2vYCW','mZGZmdm4mgDwDxv6qq','y2HYB21L','r29Vz2XLienOCM9TzsbczxrH','te9dquXbufbeqvrb','mJa5mZyYodLHDg5Ly0m','zgvMAw5LuhjVCgvYDhK','r29Vz2XLienOCM9Tzq','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','y2HYB21PDw0TyNjVD3nLCG','igzVDw5K','yMLU','tM9Kzs5QCYb2zxjZAw9U','y3DK','D2LUmZi','C3vMzML4','AM9PBG','DxrMoa','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','BMfTzq','BM9Kzq','l3vZCI9IAw4Vy2HYB21PDw0','C3rHCNrZv2L0Aa','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','ChjVAMvJDfjVB3q','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','A2LUza','zgvIDwC','ChjVyMvdAhjVBwvczxrH','ChjVyMvdAhjVBwu','CgXHDgzVCM0','mZKZzuDrBKHo','y2HHBM5LBa','AxngAw5PDgu','v2vIuNvUBMvYqwrHChrLCG','y2HLy2TxCML0ywjSzun3za','CMvZB2X2zq','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','oejRB2vnDW','u3LZDgvTigjYB3DZzxi','B2jQzwn0','ls13B3jRzxjZpq','ndeZodK5nwvWqMHHra','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','vgfYz2v0igrPCMvJDg9YEq','ChjVyMvfzgDL','y2HLy2ToB2rLvMvYC2LVBG','DMvYC2LVBNm','yNjLywTWB2LUDhm','yxv0Ag9YAw5N','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','C3vWCg9YDgvKs2LUzhm','igrVzxmGBM90igv4Axn0','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','zw52','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','uhjVz3jHBuzPBgvZkhG4nIK','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1ZDgfIBgu','zxjYB3i','D2HPy2HpzG','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','Dw5VDgvZDc13zwi','D2HPy2G','vu5pvevtvf9iruferuq','uhjVz3jHBuzPBgvZ','qhvUB3rLC3qVD2vI','zg9JDg9Y','ztjL','y2HYB21PDw0','nZmXndCYmgPbBLbXvW','zMLYC3rfEgLZDgLUz1bHDgG','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','CMvZB2X2zujPBG','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','twLJCM9ZB2z0ievKz2u','Cgf0Aa','ls1IywLS','mtbKCvvvrhK','AgvHzgvK'];_0x48b8=function(){return _0x1bf345;};return _0x48b8();}__name(runEnvironmentChecks,'runEnvironmentChecks');function checkNodeVersion(){const _0x20b0b0={_0x299863:0x211,_0x182856:0x209,_0x4acf2a:0x1d1,_0x1ac7b5:0x209},_0x6547fb=_0x422df5,_0x259757=process[_0x6547fb(0x1c7)][_0x6547fb(_0x20b0b0._0x299863)],_0x9354a9=Number(_0x259757[_0x6547fb(0x1f6)]('.')[0x0]);if(!Number[_0x6547fb(0x1b9)](_0x9354a9)||_0x9354a9<0x14)return{'name':_0x6547fb(_0x20b0b0._0x182856),'severity':'error','message':'requires\x20Node\x20≥20\x20(running\x20'+_0x259757+')','detail':_0x6547fb(_0x20b0b0._0x4acf2a)};return{'name':_0x6547fb(_0x20b0b0._0x1ac7b5),'severity':'ok','message':_0x259757};}__name(checkNodeVersion,_0x422df5(0x1c6));function checkSystemBrowser(){const _0x20bd9e={_0x20ad2d:0x207,_0x523bff:0x1e4,_0x1bf7a3:0x1f5},_0xa92dbd=_0x422df5,_0x1fe0a8=probeSystemBrowser();if(_0x1fe0a8[_0xa92dbd(0x1b8)]!==null)return{'name':_0xa92dbd(0x1bf),'severity':'ok','message':_0x1fe0a8['label']+_0xa92dbd(_0x20bd9e._0x20ad2d),'detail':_0x1fe0a8[_0xa92dbd(_0x20bd9e._0x523bff)]};return{'name':'System\x20browser','severity':_0xa92dbd(_0x20bd9e._0x1bf7a3),'message':'no\x20Chrome\x20/\x20Edge\x20/\x20Chromium\x20detected','detail':_0xa92dbd(0x1cf)};}function _0x279d(_0x4e1baa,_0x40f617){_0x4e1baa=_0x4e1baa-0x1b5;const _0x48b8e6=_0x48b8();let _0x279d60=_0x48b8e6[_0x4e1baa];if(_0x279d['qUYJIx']===undefined){var _0xfbbb18=function(_0x25f45e){const _0x420e50='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4eb1b1='',_0x1675dc='';for(let _0x160b90=0x0,_0x1c81ef,_0x18ebf7,_0x47c852=0x0;_0x18ebf7=_0x25f45e['charAt'](_0x47c852++);~_0x18ebf7&&(_0x1c81ef=_0x160b90%0x4?_0x1c81ef*0x40+_0x18ebf7:_0x18ebf7,_0x160b90++%0x4)?_0x4eb1b1+=String['fromCharCode'](0xff&_0x1c81ef>>(-0x2*_0x160b90&0x6)):0x0){_0x18ebf7=_0x420e50['indexOf'](_0x18ebf7);}for(let _0x5f19e9=0x0,_0x5222aa=_0x4eb1b1['length'];_0x5f19e9<_0x5222aa;_0x5f19e9++){_0x1675dc+='%'+('00'+_0x4eb1b1['charCodeAt'](_0x5f19e9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1675dc);};_0x279d['RSRLiH']=_0xfbbb18,_0x279d['USOSIh']={},_0x279d['qUYJIx']=!![];}const _0x3f530e=_0x48b8e6[0x0],_0x4cf757=_0x4e1baa+_0x3f530e,_0x58517d=_0x279d['USOSIh'][_0x4cf757];return!_0x58517d?(_0x279d60=_0x279d['RSRLiH'](_0x279d60),_0x279d['USOSIh'][_0x4cf757]=_0x279d60):_0x279d60=_0x58517d,_0x279d60;}__name(checkSystemBrowser,_0x422df5(0x1ef));function checkWritableCwd(_0x4e5422){const _0x50f870={_0x3678e2:0x1d3,_0x5479d0:0x1cc},_0x562e36=_0x422df5;if(!_0x4eb1b1(_0x4e5422))return{'name':_0x562e36(0x1c4),'severity':_0x562e36(_0x50f870._0x3678e2),'message':'target\x20'+_0x4e5422+_0x562e36(_0x50f870._0x5479d0),'detail':_0x562e36(0x1bd)};return{'name':_0x562e36(0x1c4),'severity':'ok','message':_0x4e5422};}__name(checkWritableCwd,_0x422df5(0x1bb));var PACKAGE_NAME=_0x422df5(0x1da),WebRunnerAdapter=class{static{__name(this,_0x422df5(0x1ba));}[_0x422df5(0x210)]=PACKAGE_NAME;[_0x422df5(0x20c)]='';[_0x422df5(0x21a)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x422df5(0x1cb)]=[_0x422df5(0x1e8),_0x422df5(0x1ee),_0x422df5(0x1c9)];[_0x422df5(0x1e1)](){const _0x4c3908={_0x1713fc:0x1f9,_0x4aa571:0x1fc},_0x3d943d=_0x422df5,_0x211a08=createRequire(import.meta.url),_0x274458=_0x211a08[_0x3d943d(0x1bc)](PACKAGE_NAME+_0x3d943d(_0x4c3908._0x1713fc)),_0x23447a=JSON[_0x3d943d(_0x4c3908._0x4aa571)](readFileSync(_0x274458,_0x3d943d(0x20e))),_0xcaaa64=pickBin(_0x23447a);if(!_0xcaaa64)throw new Error(PACKAGE_NAME+'\x20package.json\x20declares\x20no\x20\x27bin\x27\x20field\x20—\x20broken\x20install?');return join(dirname(_0x274458),_0xcaaa64);}['buildArgs'](_0x55a87e){const _0x1f352c={_0x228c69:0x21a,_0x316312:0x1e9,_0x26624f:0x1f2,_0x42c1b4:0x1ee,_0x2c599d:0x1fd,_0x44b57e:0x1e9,_0x59afe1:0x1e5},_0x28faec=_0x422df5;if(_0x55a87e['kind']===_0x28faec(0x1e8)){const _0x476356=[_0x28faec(0x1dc),_0x55a87e[_0x28faec(0x1e8)]];if(_0x55a87e[_0x28faec(_0x1f352c._0x228c69)])_0x476356[_0x28faec(_0x1f352c._0x316312)]('--debug');return _0x55a87e[_0x28faec(0x1c8)]&&_0x55a87e[_0x28faec(0x1c8)][_0x28faec(_0x1f352c._0x26624f)]>0x0&&_0x476356['push'](_0x28faec(0x1ec),_0x55a87e['breakpoints'][_0x28faec(0x20d)](',')),_0x476356;}if(_0x55a87e[_0x28faec(0x219)]==='collection'){const _0x46f169=[_0x28faec(0x1ee),_0x55a87e[_0x28faec(_0x1f352c._0x42c1b4)]];_0x55a87e[_0x28faec(0x1fd)]!==void 0x0&&_0x55a87e[_0x28faec(_0x1f352c._0x2c599d)]>0x1&&_0x46f169['push'](_0x28faec(0x1c1)+_0x55a87e[_0x28faec(_0x1f352c._0x2c599d)]);if(_0x55a87e['bail'])_0x46f169[_0x28faec(_0x1f352c._0x44b57e)](_0x28faec(_0x1f352c._0x59afe1));return _0x46f169;}if(_0x55a87e[_0x28faec(0x219)]==='authoring')return['author',_0x55a87e[_0x28faec(0x1e8)]];const _0x4d48c7=_0x55a87e;throw new UnsupportedRunKindError(_0x4d48c7[_0x28faec(0x219)],this[_0x28faec(0x210)]);}['buildEnv'](_0x532ece){const _0x176e87=_0x422df5,_0x1163d7={};if(_0x532ece[_0x176e87(0x1e7)])_0x1163d7[_0x176e87(0x1d8)]='1';return _0x1163d7;}[_0x422df5(0x1f0)](){return['app-server'];}async[_0x422df5(0x1db)](_0x33dbd3){const _0x3d3690=_0x422df5;return runEnvironmentChecks({'cwd':_0x33dbd3[_0x3d3690(0x217)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x3d9816){const _0x5f043f={_0x285e2:0x208,_0x308b92:0x1c0,_0x3b6898:0x1d6},_0x3db5fc=_0x422df5;if(typeof _0x3d9816[_0x3db5fc(_0x5f043f._0x285e2)]==='string')return _0x3d9816[_0x3db5fc(0x208)];if(_0x3d9816[_0x3db5fc(0x208)]&&typeof _0x3d9816[_0x3db5fc(0x208)]===_0x3db5fc(_0x5f043f._0x308b92))return _0x3d9816[_0x3db5fc(_0x5f043f._0x285e2)][_0x3db5fc(_0x5f043f._0x3b6898)]??Object['values'](_0x3d9816[_0x3db5fc(0x208)])[0x0]??null;return null;}__name(pickBin,_0x422df5(0x1f1));export{web_runner_adapter_default as default,webRunnerAdapter};
@@ -65,7 +65,8 @@ consists of:
65
65
  gitignored cache, refreshed on every `lint` / run — or on demand with
66
66
  `npx @unotest/web types`.
67
67
 
68
- Helpers (`flow_*` in `unotest/e2e/_helpers/`) need no declarations: the
68
+ Helpers (`flow_*` and `snake_case` in `unotest/e2e/_helpers/`) need no
69
+ declarations: the
69
70
  jsconfig includes `**/*.js`, so the editor resolves them from source, with
70
71
  go-to-definition landing in the real file.
71
72
 
@@ -1069,7 +1070,8 @@ Backticks are **raw** — `${…}` interpolation is rejected at parse time
1069
1070
  ### `screenshot(name?, options?)` → `string`
1070
1071
 
1071
1072
  On-demand PNG capture of the active page into the run's artifact dir:
1072
- `unotest/.runs/<runId>/screenshot/<NNN>-<name>.png`. Returns the
1073
+ `unotest/.runs/<YYYY>/<MM>/<DD>/<runId>/screenshot/<NNN>-<name>.png`
1074
+ (runs are filed under the UTC date they started). Returns the
1073
1075
  project-relative path. Evidence tool — fixes what the page actually
1074
1076
  looked like at this point, so a green run can be verified after the
1075
1077
  fact (the viewer lists each capture as a `screenshot` event).
@@ -1174,5 +1176,25 @@ exact grammar deltas from the upstream parser.
1174
1176
  fine when they share a feature surface.
1175
1177
  - **Helpers stay in `unotest/e2e/_helpers/`** — these are project-owned,
1176
1178
  not part of the core surface. Use sandbox primitives there.
1179
+ - **Two kinds of helper.** A `flow_*` helper is a composite journey —
1180
+ sign-in, checkout — and is *executable on its own*: the runner accepts it
1181
+ as an entry and the agent can replay it while recording. A plain
1182
+ `snake_case` helper is a building block; use it for anything that READS
1183
+ and returns a value:
1184
+
1185
+ ```js
1186
+ // unotest/e2e/_helpers/viewer.js
1187
+ function overview_header_width() {
1188
+ return evaluate( // lint-ok: element geometry has no typed getter
1189
+ '(() => Math.round(document.querySelector("header").getBoundingClientRect().width))()'
1190
+ );
1191
+ }
1192
+ ```
1193
+
1194
+ `return` is legal in either kind, and NOT in a `test_*` entry — there it
1195
+ would mean the scenario silently ended halfway. A `flow_*` that returns a
1196
+ value gets `lint:flow-returns-value` (warning): fine when the flow acts
1197
+ and yields its result (`email = flow_signup()`), a rename hint when it
1198
+ only reads.
1177
1199
  - **Lint before you ship** — `npx @unotest/web lint` runs the AST
1178
1200
  linter across `unotest/e2e/**/*.js`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unotest/web",
3
- "version": "0.18.0",
3
+ "version": "0.20.0",
4
4
  "description": "AI-native E2E testing for web applications. MCP server (run_test / step / resume / inspect_runtime / agent_fix) + CLI runner + JavaScript DSL scenarios on a sandboxed AST engine + semantic DOM snapshots.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -79,21 +79,21 @@
79
79
  "@modelcontextprotocol/sdk": "^1.0.4",
80
80
  "chokidar": "^4.0.3",
81
81
  "dotenv": "^16.4.5",
82
- "playwright": "^1.51.0",
82
+ "playwright": "^1.62.0",
83
83
  "tsx": "^4.19.2",
84
84
  "yaml": "^2.6.0",
85
85
  "zod": "^3.23.8",
86
- "@unotest/core": "^0.18.0",
87
- "@unotest/dsl": "^0.18.0",
88
- "@unotest/grounder-client": "^0.18.0",
89
- "@unotest/viewer": "^0.18.0",
90
- "@unotest/protocol": "^0.18.0"
86
+ "@unotest/core": "^0.20.0",
87
+ "@unotest/viewer": "^0.20.0",
88
+ "@unotest/protocol": "^0.20.0",
89
+ "@unotest/dsl": "^0.20.0",
90
+ "@unotest/grounder-client": "^0.20.0"
91
91
  },
92
92
  "devDependencies": {
93
93
  "@types/node": "^22.10.0",
94
94
  "javascript-obfuscator": "^4.1.1",
95
95
  "tsup": "^8.5.1",
96
96
  "typescript": "^5.7.2",
97
- "@unotest/grounder": "^0.18.0"
97
+ "@unotest/grounder": "^0.20.0"
98
98
  }
99
99
  }
@@ -321,6 +321,24 @@ Use the SAME flow name on every step of the block. Variables inside a flow
321
321
  (`{{LOGIN}}` etc.) resolve at replay/run time, so the secret never lives in the
322
322
  flow file either.
323
323
 
324
+ **A helper that READS is not a flow.** `flow_*` is executable on its own — the
325
+ runner accepts it as an entry and `explore_run_flow` replays it — so keep that
326
+ prefix for journeys you would want replayed. Anything that reads state and
327
+ hands back a value is a plain `snake_case` helper:
328
+
329
+ ```js
330
+ // unotest/e2e/_helpers/viewer.js
331
+ function overview_header_width() {
332
+ return evaluate('(() => document.querySelector("header").getBoundingClientRect().width)()');
333
+ }
334
+ ```
335
+
336
+ `return` is legal in either helper kind. It is NOT legal in a `test_*` entry —
337
+ there it would mean the scenario silently ended halfway. A `flow_*` that
338
+ returns a value gets a `lint:flow-returns-value` warning: fine when the flow
339
+ acts and yields its result (`email = flow_signup()`), a rename hint when it
340
+ only reads.
341
+
324
342
  ## When a locator matches `N elements`
325
343
 
326
344
  Every locator must resolve to exactly one element. When you see