@unotest/web 0.31.0 → 0.32.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 _0x1ad552=_0x5b12;(function(_0x177992,_0x2d74bf){const _0x1598d5={_0x3fa744:0x179,_0x4cd730:0x162,_0xb1cbb0:0x15f},_0x49a3b0=_0x5b12,_0x123839=_0x177992();while(!![]){try{const _0x1209aa=-parseInt(_0x49a3b0(0x178))/0x1+-parseInt(_0x49a3b0(_0x1598d5._0x3fa744))/0x2+-parseInt(_0x49a3b0(0x17e))/0x3+parseInt(_0x49a3b0(_0x1598d5._0x4cd730))/0x4+parseInt(_0x49a3b0(0x168))/0x5*(parseInt(_0x49a3b0(0x173))/0x6)+parseInt(_0x49a3b0(0x16b))/0x7*(-parseInt(_0x49a3b0(0x174))/0x8)+parseInt(_0x49a3b0(_0x1598d5._0xb1cbb0))/0x9;if(_0x1209aa===_0x2d74bf)break;else _0x123839['push'](_0x123839['shift']());}catch(_0x4eb0fc){_0x123839['push'](_0x123839['shift']());}}}(_0x226f,0x5da5c));function _0x5b12(_0x52052d,_0x50bcd1){_0x52052d=_0x52052d-0x158;const _0x226fa1=_0x226f();let _0x5b1268=_0x226fa1[_0x52052d];if(_0x5b12['Gcfexk']===undefined){var _0x413626=function(_0xeddaaa){const _0x799597='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3f51f4='',_0x3ffe18='';for(let _0x39a290=0x0,_0x530e43,_0x4bef55,_0x4d5aa2=0x0;_0x4bef55=_0xeddaaa['charAt'](_0x4d5aa2++);~_0x4bef55&&(_0x530e43=_0x39a290%0x4?_0x530e43*0x40+_0x4bef55:_0x4bef55,_0x39a290++%0x4)?_0x3f51f4+=String['fromCharCode'](0xff&_0x530e43>>(-0x2*_0x39a290&0x6)):0x0){_0x4bef55=_0x799597['indexOf'](_0x4bef55);}for(let _0x356f27=0x0,_0x128f96=_0x3f51f4['length'];_0x356f27<_0x128f96;_0x356f27++){_0x3ffe18+='%'+('00'+_0x3f51f4['charCodeAt'](_0x356f27)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ffe18);};_0x5b12['BsvTnB']=_0x413626,_0x5b12['lPoeik']={},_0x5b12['Gcfexk']=!![];}const _0x2daff5=_0x226fa1[0x0],_0x13a54a=_0x52052d+_0x2daff5,_0x1b50d7=_0x5b12['lPoeik'][_0x13a54a];return!_0x1b50d7?(_0x5b1268=_0x5b12['BsvTnB'](_0x5b1268),_0x5b12['lPoeik'][_0x13a54a]=_0x5b1268):_0x5b1268=_0x1b50d7,_0x5b1268;}var __defProp=Object[_0x1ad552(0x16e)],__name=(_0x3f51f4,_0x3ffe18)=>__defProp(_0x3f51f4,_0x1ad552(0x17f),{'value':_0x3ffe18,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';function _0x226f(){const _0x4b401b=['mtC4mda4ChLuyK9t','DMvYC2LVBG','C2nHzMzVBgrxB3jRC3bHy2u','lY8GqhvUB3rLC3qVD2vIihbYB2PLy3qGy29UzMLNlIbbBgWGzMLLBgrZigfYzsbVChrPB25HBcdIGjqGzgvMyxvSDhmGyxbWBhKklY8GD2HLBIbVBwL0DgvKlGOVlWOVlYbtyxzLzcbHCYaUBwPZihnVihrOzsbYDw50Aw1LigXVywrZigL0igfZievttsbYzwDHCMrSzxnZig9MihrOzsbWCM9Qzwn0j3mklY8GCgfJA2fNzs5QC29Uicj0ExbLiIbMAwvSzc4GrM9YieLersbHDxrVy29TCgXLDguSihr5CguTAw1WB3j0ihrOzsbZy2HLBwe6cI8VcI8VicaGlYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcI8VicaGzxHWB3j0igrLzMf1BhqGEYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYb9oWOklYOQieb0ExbLihTqyxj0AwfSpgLTCg9YDcGNqhvUB3rLC3qVD2vIjYKUvw5VDgvZDenVBMzPzZ59icOVcMv4Cg9YDcbKzwzHDwX0ihSkicaVlYbIyxnLvxjSoIaNAhr0Chm6lY95B3vYlwfWCc50zxn0jYWkicaVlYbICM93C2vYCZOGwYDJAhjVBwL1BsCSicDMAxjLzM94jYWGj3DLyMTPDcDDlcaGlY8Gq0KGB3zLCNjPzgukicaVlYb2Awv3Cg9YDdOGEYb3Awr0AdOGmti4mcWGAgvPz2H0oIa3mJaGFsWkicaVlYbYzxrYEtOGEYbJB3vUDdOGmsWGB246ifSNDhjHBNnPzw50j10GFsWGicaGicaGic8Vienjig92zxjYAwrLcIaGlY8GC3rVCMfNzvn0yxrLoIaNlNvUB3rLC3qVy2fJAguVyxv0Ac5QC29UjYWGicaGicaVlYbZzwuGAgvSCgvYCWOGic8VihnHBMrIB3G6ihSGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GyxbPq2fSBcaVihvWBg9HzcaVigrIuxvLCNKGlYbZAgvSBaOGic8VicaGyxbPqMfZzvvYBdOGj2H0DhbZoI8VyxbPlNLVDxiTyxbWlNrLC3qNlcaGicaGlY8GyMfZzsbMB3iGyxbPq2fSBcGNue9tvcCSicCVCgf0AcCSiokaPIKkicaVlYaGihvWBg9HzerPCJOGj3vUB3rLC3qVzML4DhvYzxmNlcaGicaGicaGicaGicaGic8VihjVB3qGzM9YihvWBg9HzcGNzg9JlNbKzICPihbHDgHZoWOGic8VicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGChjVAMvJDcbYB290lIbvCgXVywrZig1HEqOGic8VicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GBM90igvZy2fWzsbPDcaOCMvSyxrPDMuGCgf0AhmGB25SEsKUcIaGlY8GicbKyxrHyMfZztOGj3bVC3rNCMvZCwW6lY9SB2nHBgHVC3q6ntqZmI9HChbFDgvZDcCSicaVlYbKyLf1zxj5ic8GzgjfEgvJcIaGlY8GFsWk','mJmYmtm1t1HhrhjX','mZK0ntqYChr1yvPz','zw52rxHHBxbSzq','mdeTC21VA2uUANm','ztjL','lY8GrxHHBxbSzsaWmIdIGjqGzMLSBcbHBIbPBNb1DcaRigfZC2vYDcb0AguGyxbWihjLywn0zwqUcI8VcI8ViefNywLUC3qGCgXHEwDYB3vUzc51BM90zxn0lMnVBs9Zy2vUyxjPB3mVyMLNlxrHyMXLlIbezw1VBNn0CMf0zxmGz2v0qNLsB2XLcI8VigzVCIbHigXHyMvSBgvKigLUChv0lcb0ExbLzcbPBNb1Dcb2AweGzMLSBcGPlcbHBMqGysbSB2nHDg9Yig1LDgHVzc1JAgfPBGOVlYaOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhr9ks5MAxjZDcGPksbPBIbHBIbHC3nLCNrPB24UcI8Vifj1BIb3AxrOoIaGBNb4ieb1BM90zxn0l3DLyIbLmMuGzxHHBxbSzxmVmdiTzM9YBs1MAwXScGPMDw5JDgLVBIb0zxn0x2zVCM1FzMLSBf9OyxbWEv9WyxrOkcKGEWOGihn0zxaOiKzPBhrLCIb0AguGqMLNifrHyMXLigj5igeGBMfTzsiSicGPid0+ihSkicaGigDVDg8OjY9Zy2vUyxjPB3mVyMLNlxrHyMXLjYK7cIaGicbMAwXSkgDLDej5uM9SzsGNDgv4DgjVEcCSihTUyw1LoIaNrMLSDgvYigj5ig5HBwuNFsKSicDvBweGuxvPBM4NktSkicb9ktSkcIaGC3rLCcGIrMLSDgvYAw5NihjLDMvHBhmGDgHLienSzwfYigzPBhrLCIbJB250CM9SigfUzcbTyxrJAgLUzYbYB3DZiIWGkcKGpt4GEWOGicaGyxnZzxj0vMLZAwjSzsHNzxrcEvjVBguOj2j1DhrVBICSihTUyw1LoIaNq2XLyxiGzMLSDgvYj30PktSkicaGigfZC2vYDfzPC2LIBguOz2v0qNLsB2XLkcDYB3CNks5MAwX0zxiOE2HHC1rLEhq6icDvBweGuxvPBM4NFsKUzMLYC3qOksK7cIaGFsK7cN0k','mtu2mde2mMLdB3L6uG','BMfTzq','DxrMoa','Dw5VDgvZDenVBMzPz01QCW','ChvZAa','ANnJB25MAwCUANnVBG','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','igHHCYbUBYb1C2fIBguGiNzLCNnPB24IigzPzwXK','Dw5VDgvZDa','nJa0odm2mfPSqKTptG','CgfJA2fNzs5QC29U','x2HLBhbLCNm','nJGXnZq0CKT0yvLS','Dw5VDgvZDc1ZDwL0zq','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','CMvHze93BLzLCNnPB24','zxHHBxbSzxm','C3rYAw5N','nwT6Euz2uG','EWOGicjJB21WAwXLCK9WDgLVBNmIoIb7cIaGicaIy2HLy2TkCYi6igzHBhnLlaOGicaGiNrHCMDLDci6icjLCZiWmJiIlaOGicaGiMXPyIi6ifSIzxmYmdiYiL0ScIaGicaIDhLWzxmIoIbBxqOGih0ScIaGiMLUy2X1zguIoIbBcIaGicaIkIOVkI5QCYiScIaGicaIlI4VlNvUB3rLC3qVDhLWzxmVzw52lMqUDhmIlaOGicaGiI4VBM9Kzv9TB2r1BgvZl0b1BM90zxn0l3DLyI90ExbLCY91BM90zxn0lwrZBc5KlNrZiGOGif0kFqO','C3rYAw5NAwz5','mZvYAfHYAKi','iYmGrtjfihrLC3rPBMCGD2L0AcbaDw5VDgvZDc93zwikcKbbr0vovfmUBwqkcKzVCIbHBNKGCMvXDwvZDcb0BYb3CML0zsWGCMvJB3jKlcbVCIbYDw4Gyw4Gzw5KlxrVlwvUzcb0zxn0lcbVCgvUihrOzqPGD3jPDguTztjLlxrLC3rGihnRAwXSicHVCIbYDw4Gyc93CML0zs1LmMuTDgvZDgaPigfUzcbKCML2zsb0AguGyNjVD3nLCIb0AhjVDwDOcNrOzsbGDw5VDgvZDc13zwjGie1ducb0B29SCYaOyg5LD19JB250zxH0ycdIHPiGygv4CgXVCMvFC3rLCgaG4OAsigbNzxrFCgfNzv9ZBMfWC2HVDgak4OAsigbYDw5FDgvZDgaPlIbeBYbUB3qGAgfUzc1HDxrOB3iGDgvZDhmGyMXPBMqGB3iGBwfWihrOzsbWCM9Qzwn0ihDPDgGkygzPBMrGl2bSC2aVygf3A2aG4OcuihrOzsbZA2LSBcDZifbOyxnLidaGBgLZDhmGDgHLigzPBgvZihrVihjLywqU','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','zgvMAw5LuhjVCgvYDhK','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','CgfJA2fNzs5QC29Uigf0ia','iYb1BM90zxn0lxDLyIdIGjqGC2vJCMv0ihnJzw5HCMLVihzHCMLHyMXLCY4Gq3jLyxrLzcbIEsbGAw5PDgaSigDPDgLNBM9YzwqUcImkiYbtyw1LieTfwt1wquXvrsbMB3jTyxqGyxmGDw5VDgvZDc8Uzw52lcbIDxqGDMfSDwvZigHLCMuGyxjLihrYzwf0zwqGyxmkiYbtrunsrvq6ihrOzxKGyxjLig1HC2TLzcaOC2HVD24GyxmGyokaUxnLy3jLDdPlrvNIGlPGksbHBNL3AgvYzsb0AguGCNvUBMvYig9YcImGtunqigrLyNvNigXVzYb3B3vSzcbVDgHLCNDPC2uGD3jPDguGDgHLBsdIGjqGzMLSBcGPihzHBhvLCYWGvvjmCYWGzxzHBhvHDgukiYbZDhjPBMDZlIbszwzLCMvUy2uGDgHLBsbPBIbHihnJzw5HCMLVigj5ihrOzwLYigjHCMuGvvbqrvjFu05bs0uGBMfTzsWGDgHLcImGC2fTzsb3yxKGyxmGlMvUDIb2yxjPywjSzxm6cImkiYaGigzPBgWOz2v0qNLmywjLBcGNugfZC3DVCMqNksWGueftu1DpuKqPoWOJcImGu2vJCMv0CYbHCMuGtK9uigv4Cg9YDgvKihrVihn1yNbYB2nLC3nLCYaOC2HLBgWOksKG4OcuihrOzxKGC3rHEsbPBIb0AgukiYb2yxjPywjSzsbZDg9Yzs4GqsbZDwjWCM9JzxnZihrOyxqGz2vUDwLUzwX5ig5LzwrZig9UzsaOysbSAxn0zw5LCIb3AxrOigekiYb0B2TLBIKGz2v0CYbPDcb2AweGDgHLigv4CgXPy2L0igfSBg93BgLZDcbPBIb1BM90zxn0lMnVBMzPzY4QoGOJicaGC2fUzgjVEdOGEYbLEhbVCNrtzwnYzxrZoIbBj1rps0voj10GFqOJifb1DcbUB24TC2vJCMv0ihzHBhvLCYaOvvjmCYWGzw1HAwXZlcbPzhmPigLUihvUB3rLC3qVlMvUDI4kiWOJiezmruvux0vyqu1qteukte9hsu49cLbbu1nxt1jepqPut0TftJ0k','BgvUz3rO','mZyXmdKXngnpC1nLuG'];_0x226f=function(){return _0x4b401b;};return _0x226f();}import{join}from'path';var templates={'jsconfigJson':_0x1ad552(0x169),'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':_0x1ad552(0x164),'claudeMdBody':_0x1ad552(0x16c),'examples':{'01-smoke.js':_0x1ad552(0x15c),'02-form-fill.js':_0x1ad552(0x17d)},'secretsExample':_0x1ad552(0x171),'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\x20engine\x20for\x20this\x20run\x20(chromium\x20|\x20firefox\x20|\x20webkit).\x20Overrides\x20the\x0a#\x20first\x20entry\x20of\x20`browsers`\x20in\x20unotest.config.*.\x20Default:\x20the\x20config.\x0a#\x20UNOTEST_BROWSER=chromium\x0a#\x20Chromium\x20channel\x20for\x20this\x20run\x20(chrome\x20|\x20msedge\x20|\x20chrome-beta\x20|\x20bundled).\x0a#\x20Overrides\x20`channel`\x20in\x20unotest.config.*\x20—\x20the\x20config\x20travels\x20with\x20the\x0a#\x20suite,\x20this\x20stays\x20on\x20the\x20machine.\x20`bundled`\x20=\x20Playwright\x27s\x20own\x20Chromium.\x0a#\x20UNOTEST_BROWSER_CHANNEL=bundled\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(_0x39a290){const _0x14b2c3={_0x10b57d:0x16d,_0x3cb792:0x16f},_0x14d470=_0x1ad552,_0x530e43=_0x39a290===void 0x0?_0x14d470(_0x14b2c3._0x10b57d):'\x20\x20channel:\x20'+JSON[_0x14d470(0x16a)](_0x39a290)+',';return _0x14d470(0x177)+_0x530e43+_0x14d470(_0x14b2c3._0x3cb792);}__name(unotestConfigMjs,_0x1ad552(0x159));function suitePackageJson(_0x4bef55){const _0x4a2064=_0x1ad552;return JSON['stringify']({'name':_0x4a2064(0x163),'private':!![],'devDependencies':{'@unotest/web':'^'+_0x4bef55}},null,0x2)+'\x0a';}__name(suitePackageJson,'suitePackageJson');import{readFileSync}from'fs';import{dirname,resolve}from'path';import{fileURLToPath}from'url';function readOwnVersion(){const _0x47228c={_0x52479d:0x175},_0x512a6c=_0x1ad552,_0x4d5aa2=dirname(fileURLToPath(import.meta.url)),_0x356f27=resolve(_0x4d5aa2,'../../package.json'),_0x128f96=readFileSync(_0x356f27,_0x512a6c(0x158)),_0xd3e750=JSON['parse'](_0x128f96);if(typeof _0xd3e750['version']!==_0x512a6c(0x167)||_0xd3e750[_0x512a6c(_0x47228c._0x52479d)][_0x512a6c(0x172)]===0x0)throw new Error(_0x512a6c(0x170)+_0x356f27+_0x512a6c(0x15d));return _0xd3e750['version'];}__name(readOwnVersion,_0x1ad552(0x165));async function scaffoldWorkspace(_0x1de613,_0x14c5a8={}){const _0xd95db8={_0x1c9ae8:0x15e,_0x432969:0x166,_0xdf58c8:0x15e,_0x29ad:0x17c,_0x3092b5:0x161,_0x48c327:0x15e,_0x2699c1:0x15b,_0x475770:0x17b,_0x25fe4d:0x166},_0x3d74fd=_0x1ad552,_0x6c8f74=[],_0x4d85bc=[];await mkdir(join(_0x1de613,_0x3d74fd(_0xd95db8._0x1c9ae8),_0x3d74fd(0x17c),_0x3d74fd(_0xd95db8._0x432969)),{'recursive':!![]}),await mkdir(join(_0x1de613,_0x3d74fd(_0xd95db8._0xdf58c8),_0x3d74fd(_0xd95db8._0x29ad),_0x3d74fd(_0xd95db8._0x3092b5)),{'recursive':!![]});const _0x5dd14b=[{'rel':join(_0x3d74fd(_0xd95db8._0xdf58c8),'unotest.config.mjs'),'content':unotestConfigMjs(_0x14c5a8['channel'])},{'rel':join(_0x3d74fd(_0xd95db8._0x48c327),_0x3d74fd(0x160)),'content':suitePackageJson(readOwnVersion())},{'rel':join('unotest','.env'),'content':templates[_0x3d74fd(0x17a)]},{'rel':join(_0x3d74fd(0x15e),_0x3d74fd(_0xd95db8._0x2699c1)),'content':templates['jsconfigJson']},{'rel':join(_0x3d74fd(0x15e),_0x3d74fd(0x17c),_0x3d74fd(0x166),_0x3d74fd(_0xd95db8._0x475770)),'content':templates[_0x3d74fd(_0xd95db8._0x25fe4d)][_0x3d74fd(0x17b)]}];for(const {rel:_0x263bf4,content:_0x4a9430}of _0x5dd14b){const _0x263d20=join(_0x1de613,_0x263bf4);if(existsSync(_0x263d20)){_0x4d85bc[_0x3d74fd(0x15a)](_0x263bf4);continue;}await writeFile(_0x263d20,_0x4a9430),_0x6c8f74['push'](_0x263bf4);}return{'projectRoot':_0x1de613,'created':_0x6c8f74,'skipped':_0x4d85bc};}__name(scaffoldWorkspace,_0x1ad552(0x176));export{scaffoldWorkspace};
1
+ const _0x2dd8a3=_0xfe9e;function _0x3d7e(){const _0x3794a9=['mtGYnJa3nLnnru5Kza','DMvYC2LVBG','BgvUz3rO','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','Dw5VDgvZDenVBMzPz01QCW','C2nHzMzVBgrxB3jRC3bHy2u','DxrMoa','Dw5VDgvZDc5JB25MAwCUBwPZ','icaVlYbJAgfUBMvSoIaNy2HYB21LjYWGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8Gj2nOCM9TzsCGlYaNBxnLzgDLjYaVig51BgWGkgj1BMrSzwqP','mte3uLvlD0P6','lMvUDG','C3rYAw5N','lY8GrxHHBxbSzsaWmsdIGjqGC21VA2u6ig5HDMLNyxrLicSGy2XPy2SGkYbvuKWGyxnZzxj0Aw9UlGOVlWOVlYbuAguGBwLUAw1HBcb0AhjLzs1ZDgvWihbHDhrLCM4UieHPDhmGCgXHEwDYB3vUzc51BM90zxn0lMnVBsbZBYbUBYbWCM9Qzwn0cI8VihnLDhvWigLZig5LzwrLzc4GuNvUihDPDgG6icbUChGGqhvUB3rLC3qVD2vIiguYzsbLEgfTCgXLCY8Wms1ZBw9RzqOkzNvUy3rPB24GDgvZDf9ZBw9Rzv9WBgf5z3jVDw5KkcKGEWOGihn0zxaOiK9Wzw4GDgHLiejPzYbuywjSzsbZy2vUyxjPBYbMCM9TihrOzsbWBgf5z3jVDw5KigLUzgv4iIWGkcKGpt4GEWOGicaGz290BYGNlYCPoWOGicaGy2XPy2SOz2v0qNLsB2XLkcDSAw5RjYWGE25HBwu6icDcAwCGvgfIBguNlcbLEgfJDdOGDhj1zx0PktSkicaGigfZC2vYDfvYBcGNl3nJzw5HCMLVCY9IAwCTDgfIBguNktSkicb9ktSkFqO','zxHHBxbSzxm','nda3ntq0mffJD0PVEG','CgfJA2fNzs5QC29Uigf0ia','lI4VlI4VCgfJA2fNzs5QC29U','C3vPDgvqywnRywDLsNnVBG','ztjL','cIaGlY8GDMLLD2vYoIb7cIaGlY8GicbWB3j0oIa1mtCZlcaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGic8VigrLzMf1Bhq6ihjHBMrVBsbMCMvLihbVCNqkicaVlYaGigjYB3DZzxi6ihrYDwuSicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGlY8GzgvMyxvSDdOGDhj1zsaOyxv0BY1VCgvUig9Uigb2Awv3zxjGkqOGic8Vih0ScN07cG','Dw5VDgvZDc1ZDwL0zq','x2HLBhbLCNm','C3rYAw5NAwz5','mJaYmZq0uhDJy3HK','ndb2y0XUCKi','ANnJB25MAwCUANnVBG','ChvZAa','BMfTzq','ota5mde2wwL6uuf2','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','ANnJB25MAwDkC29U','nND0thnhDa','Dw5VDgvZDa','mdeTC21VA2uUANm','mta1mJGYAunJwwzJ','mtbOq1nOB28','CMvHze93BLzLCNnPB24','nZu4odL4A3rMDgC','y2HHBM5LBa','mtyYndGXovHyuLjTrq','CgfYC2u','EWOGicjJB21WAwXLCK9WDgLVBNmIoIb7cIaGicaIy2HLy2TkCYi6igzHBhnLlaOGicaGiNrHCMDLDci6icjLCZiWmJiIlaOGicaGiMXPyIi6ifSIzxmYmdiYiL0ScIaGicaIDhLWzxmIoIbBxqOGih0ScIaGiMLUy2X1zguIoIbBcIaGicaIkIOVkI5QCYiScIaGicaIlI4VlNvUB3rLC3qVDhLWzxmVzw52lMqUDhmIlaOGicaGiI4VBM9Kzv9TB2r1BgvZl0b1BM90zxn0l3DLyI90ExbLCY91BM90zxn0lwrZBc5KlNrZiGOGif0kFqO'];_0x3d7e=function(){return _0x3794a9;};return _0x3d7e();}(function(_0x1816d6,_0x59a68f){const _0x5efd3c={_0x178810:0x9f,_0x20f313:0x90,_0x19c395:0x9c,_0x4f362f:0x8b,_0x3061e5:0xa9,_0x501d22:0x8c,_0x13a821:0x9a},_0x3d8c00=_0xfe9e,_0x39eab4=_0x1816d6();while(!![]){try{const _0x47018f=parseInt(_0x3d8c00(0x98))/0x1*(parseInt(_0x3d8c00(0x97))/0x2)+parseInt(_0x3d8c00(_0x5efd3c._0x178810))/0x3+parseInt(_0x3d8c00(_0x5efd3c._0x20f313))/0x4+-parseInt(_0x3d8c00(0xae))/0x5+parseInt(_0x3d8c00(0x94))/0x6*(parseInt(_0x3d8c00(_0x5efd3c._0x19c395))/0x7)+-parseInt(_0x3d8c00(_0x5efd3c._0x4f362f))/0x8*(parseInt(_0x3d8c00(_0x5efd3c._0x3061e5))/0x9)+parseInt(_0x3d8c00(_0x5efd3c._0x501d22))/0xa*(-parseInt(_0x3d8c00(_0x5efd3c._0x13a821))/0xb);if(_0x47018f===_0x59a68f)break;else _0x39eab4['push'](_0x39eab4['shift']());}catch(_0x500045){_0x39eab4['push'](_0x39eab4['shift']());}}}(_0x3d7e,0x67444));var __defProp=Object['defineProperty'],__name=(_0x461488,_0x3abd19)=>__defProp(_0x461488,_0x2dd8a3(0x8f),{'value':_0x3abd19,'configurable':!![]});import{mkdir,writeFile}from'fs/promises';import{existsSync}from'fs';import{join}from'path';var templates={'jsconfigJson':_0x2dd8a3(0x9e),'scenarioTemplate':_0x2dd8a3(0x92),'agentsMd':'#\x20@unotest/web\x20—\x20guide\x20for\x20AI\x20agents\x20(and\x20humans)\x0a\x0aThis\x20project\x20uses\x20[`@unotest/web`](https://www.npmjs.com/package/@unotest/web)\x0afor\x20end-to-end\x20testing\x20of\x20web\x20applications.\x0a\x0a##\x20Writing\x20a\x20test\x20—\x20use\x20the\x20skill\x20+\x20MCP\x0a\x0aFor\x20ANY\x20request\x20to\x20write,\x20record,\x20or\x20run\x20an\x20e2e\x20test:\x0a\x0a1.\x20Open\x20the\x20**`write-e2e-test`**\x20skill\x20—\x20`.claude/skills/write-e2e-test/SKILL.md`\x0a\x20\x20\x20(in\x20Claude\x20Code\x20you\x20can\x20also\x20run\x20`/write-e2e-test`)\x20—\x20and\x20follow\x20it.\x0a2.\x20Drive\x20the\x20browser\x20through\x20the\x20**`unotest-web`\x20MCP\x20tools**:\x20`new_context`\x20→\x0a\x20\x20\x20`explore_start`\x20→\x20`explore_step`\x20→\x20`get_page_snapshot`\x20→\x20`run_test`.\x0a\x0aDo\x20NOT\x20hand-author\x20tests\x20blind\x20or\x20map\x20the\x20project\x20with\x20`find`/`ls`/`awk`\x20—\x20the\x0askill\x27s\x20Phase\x200\x20names\x20the\x20exact\x20files\x20to\x20read.\x20Runnable,\x20copy-pasteable\x0aexamples\x20live\x20in\x20`unotest/e2e/examples/`.\x0a\x0a##\x20Layout\x0a\x0a-\x20`unotest/e2e/<feature>/<name>.js`\x20—\x20test\x20scenarios,\x20grouped\x20by\x20feature/page\x0a\x20\x20(one\x20`test_*`\x20function\x20per\x20file).\x20**Required:**\x20every\x20scenario\x20lives\x20in\x20a\x0a\x20\x20feature\x20subfolder.\x20A\x20test\x20file\x20placed\x20directly\x20in\x20`unotest/e2e/`\x20is\x20rejected\x0a\x20\x20by\x20the\x20linter\x20(`lint:scenario-in-root`).\x0a-\x20`unotest/e2e/_helpers/`\x20—\x20project-specific\x20helpers\x20(visible\x20to\x20all\x20scenarios)\x0a-\x20`unotest/e2e/_template.js`\x20—\x20starting-point\x20template\x20(copy\x20into\x20a\x20feature\x20folder)\x0a\x0a##\x20DSL\x20conventions\x0a\x0aThe\x20DSL\x20is\x20a\x20strict\x20JS\x20subset\x20parsed\x20by\x20@unotest/dsl.\x20Method\x20chains,\x20options-\x0aobjects,\x20and\x20variables\x20are\x20allowed.\x20Multi-line\x20strings\x20use\x0abackticks\x20but\x20`${...}`\x20interpolation\x20is\x20forbidden\x20(sandbox\x20boundary\x20—\x0apass\x20values\x20via\x20positional\x20args).\x0a\x0a**Every\x20step\x20must\x20sit\x20inside\x20a\x20`step(\x22description\x22,\x20()\x20=>\x20{\x20…\x20})`\x20block\x20(linter\x0aenforces).**\x20The\x20title\x20is\x20plain-English\x20intent;\x20the\x20steps\x20inside\x20are\x20the\x0aimplementation.\x20When\x20a\x20step\x20later\x20breaks\x20(selector\x20drift),\x20you\x20read\x20the\x0atitle\x20to\x20understand\x20what\x20the\x20group\x20was\x20trying\x20to\x20do\x20and\x20repair\x20it.\x20Group\x20by\x0aintent,\x20one\x20block\x20per\x20logical\x20chunk:\x0a\x0a```js\x0afunction\x20test_login()\x20{\x0a\x20\x20step(\x22Sign\x20in\x20as\x20the\x20demo\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20goto(\x27https://app.example.com/login\x27);\x0a\x20\x20\x20\x20fill(getByLabel(\x27Email\x27),\x20\x27demo@example.com\x27);\x0a\x20\x20\x20\x20click(getByRole(\x27button\x27,\x20{name:\x20\x27Log\x20in\x27}));\x0a\x20\x20});\x0a\x0a\x20\x20step(\x22Dashboard\x20shows\x20the\x20signed-in\x20user\x22,\x20()\x20=>\x20{\x0a\x20\x20\x20\x20assertText(getByRole(\x27heading\x27),\x20\x27Welcome\x27);\x0a\x20\x20});\x0a}\x0a```\x0a\x0a**Base\x20URL\x20—\x20write\x20relative\x20paths.**\x20`APP_BASE_URL`\x20(in\x20`unotest/.env`)\x20is\x20the\x0aapp\x27s\x20base;\x20`goto(\x27/login\x27)`\x20resolves\x20against\x20it.\x20Don\x27t\x20concatenate\x0a(`goto(APP_BASE_URL\x20+\x20\x27/login\x27)`)\x20—\x20just\x20pass\x20the\x20path:\x0a\x0a```js\x0agoto(\x27/login\x27);\x0afill(getByLabel(\x27Password\x27),\x20TEST_USER_PASSWORD);\x0a```\x0a\x0a**Environments.**\x20Override\x20`APP_BASE_URL`\x20(and\x20any\x20var)\x20per\x20environment\x20with\x0aoverlay\x20files\x20—\x20`unotest/.env.staging`,\x20`unotest/.env.production`\x20(secrets:\x0a`unotest/.secrets.<env>`).\x20Select\x20one\x20at\x20run\x20time:\x20`npx\x20@unotest/web\x20e2e\x20<name>\x0a--env\x20staging`.\x20The\x20overlay\x20layers\x20over\x20the\x20base\x20`.env`\x20(overlay\x20wins).\x0a\x0a**External\x20variables\x20&\x20secrets:**\x20reference\x20logins\x20/\x20tokens\x20by\x20a\x20bare\x0a`UPPER_SNAKE`\x20name\x20—\x20resolved\x20from\x20`unotest/.env`\x20(normal)\x20or\x20`unotest/.secrets`\x0a(secret,\x20masked\x20in\x20logs).\x20No\x20`env()`/`secret()`\x20wrapper.\x20A\x20lowercase\x20name\x20is\x20an\x0ain-scenario\x20binding;\x20an\x20unknown\x20`UPPER_SNAKE`\x20fails\x20the\x20run\x20asking\x20you\x20to\x20add\x20it\x0ato\x20`unotest/.env`.\x0a\x0a**Selector\x20hierarchy\x20(D-22\x20—\x20linter\x20enforces):**\x0a1.\x20`getByTestId(id)`\x20—\x20most\x20stable\x0a2.\x20`getByRole(role,\x20{name})`\x20—\x20semantic,\x20a11y-aware\x0a3.\x20`getByLabel(text)`\x20—\x20for\x20form\x20fields\x0a4.\x20`getByText(text)`\x20—\x20for\x20unique\x20text\x0a5.\x20`locator(css)`\x20—\x20last\x20resort\x20(linter\x20warns)\x0a\x0aFull\x20reference\x20shipped\x20with\x20the\x20package:\x0a-\x20`node_modules/@unotest/web/guides/dsl-reference.md`\x20—\x20DSL\x20functions\x20+\x20linter\x20codes\x0a\x0a##\x20Running\x20(CLI)\x0a\x0a-\x20`npx\x20@unotest/web\x20e2e\x20<feature>/<name>`\x20—\x20run\x20a\x20scenario\x20by\x20name\x0a-\x20`npx\x20@unotest/web\x20lint`\x20—\x20static\x20check\x20of\x20all\x20scenarios\x20+\x20helpers\x0a-\x20`npx\x20@unotest/web\x20mcp`\x20—\x20start\x20the\x20MCP\x20server\x20for\x20agent\x20control\x0a\x0a##\x20Via\x20MCP\x20(Claude\x20Code\x20/\x20Claude\x20Desktop\x20/\x20Cursor)\x0a\x0aThe\x20MCP\x20server\x20exposes:\x0a-\x20`run_test\x20name=\x22<name>\x22\x20mode=\x22step\x22\x20pauseOnFailure=true`\x20—\x20run\x20with\x20step-mode\x0a-\x20`step`\x20/\x20`resume`\x20—\x20advance\x20one\x20AST\x20node\x20/\x20run\x20until\x20next\x20pause\x0a-\x20`inspect_runtime`\x20—\x20current\x20state,\x20last\x20error,\x20locals\x20dump\x0a-\x20`abort_runtime`\x20—\x20kill\x20a\x20paused\x20runtime\x0a\x0aFor\x20agent-fix\x20workflows\x20on\x20flaky\x20tests:\x20`agent_fix\x20testId=\x22<id>\x22`\x20returns\x20a\x0astructured\x20context\x20bundle\x20(see\x20D-25\x20—\x20we\x20never\x20call\x20LLMs\x20or\x20auto-apply\x0adiffs,\x20the\x20diff\x20comes\x20from\x20your\x20MCP-host\x20agent).\x0a','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':_0x2dd8a3(0xac),'02-form-fill.js':_0x2dd8a3(0x91)},'secretsExample':_0x2dd8a3(0xa3),'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\x20engine\x20for\x20this\x20run\x20(chromium\x20|\x20firefox\x20|\x20webkit).\x20Overrides\x20the\x0a#\x20first\x20entry\x20of\x20`browsers`\x20in\x20unotest.config.*.\x20Default:\x20the\x20config.\x0a#\x20UNOTEST_BROWSER=chromium\x0a#\x20Chromium\x20channel\x20for\x20this\x20run\x20(chrome\x20|\x20msedge\x20|\x20chrome-beta\x20|\x20bundled).\x0a#\x20Overrides\x20`channel`\x20in\x20unotest.config.*\x20—\x20the\x20config\x20travels\x20with\x20the\x0a#\x20suite,\x20this\x20stays\x20on\x20the\x20machine.\x20`bundled`\x20=\x20Playwright\x27s\x20own\x20Chromium.\x0a#\x20UNOTEST_BROWSER_CHANNEL=bundled\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(_0x452e7c){const _0x4bad8e={_0x3769d4:0xa8,_0x2f78d2:0xa2,_0x5d4f86:0x87},_0x11e723=_0x2dd8a3,_0x3a597f=_0x452e7c===void 0x0?_0x11e723(_0x4bad8e._0x3769d4):'\x20\x20channel:\x20'+JSON['stringify'](_0x452e7c)+',';return _0x11e723(_0x4bad8e._0x2f78d2)+_0x3a597f+_0x11e723(_0x4bad8e._0x5d4f86);}__name(unotestConfigMjs,_0x2dd8a3(0xa4));function suitePackageJson(_0x5a9bea){const _0x1ecca2={_0x4b4d11:0x88},_0x506d0c=_0x2dd8a3;return JSON[_0x506d0c(0x8a)]({'name':_0x506d0c(_0x1ecca2._0x4b4d11),'private':!![],'devDependencies':{'@unotest/web':'^'+_0x5a9bea}},null,0x2)+'\x0a';}__name(suitePackageJson,_0x2dd8a3(0xb1));import{readFileSync}from'fs';import{dirname,resolve}from'path';import{fileURLToPath}from'url';function readOwnVersion(){const _0x18879d={_0x4588bf:0xb0,_0x442366:0xa6,_0x23d79d:0x9d,_0x508ef6:0xa0,_0x44fd00:0xa0,_0x1412fe:0xa1,_0x6ec61c:0xaf},_0x37dcba=_0x2dd8a3,_0x593dba=dirname(fileURLToPath(import.meta.url)),_0x1fb53a=resolve(_0x593dba,_0x37dcba(_0x18879d._0x4588bf)),_0xab4005=readFileSync(_0x1fb53a,_0x37dcba(_0x18879d._0x442366)),_0x35223a=JSON[_0x37dcba(_0x18879d._0x23d79d)](_0xab4005);if(typeof _0x35223a[_0x37dcba(_0x18879d._0x508ef6)]!==_0x37dcba(0xab)||_0x35223a[_0x37dcba(_0x18879d._0x44fd00)][_0x37dcba(_0x18879d._0x1412fe)]===0x0)throw new Error(_0x37dcba(_0x18879d._0x6ec61c)+_0x1fb53a+'\x20has\x20no\x20usable\x20\x22version\x22\x20field');return _0x35223a['version'];}__name(readOwnVersion,_0x2dd8a3(0x99));async function scaffoldWorkspace(_0x2313d2,_0x10cf01={}){const _0x2cf790={_0x7beffc:0x86,_0x420706:0x95,_0x2ba59e:0xa7,_0x218591:0x95,_0x585873:0xaa,_0x4a9d73:0x95,_0x42318a:0x96,_0x24c753:0xad,_0x4acc19:0x8e},_0x1e9789=_0x2dd8a3,_0x197e7b=[],_0x926a2b=[];await mkdir(join(_0x2313d2,_0x1e9789(0x95),_0x1e9789(_0x2cf790._0x7beffc),'examples'),{'recursive':!![]}),await mkdir(join(_0x2313d2,_0x1e9789(_0x2cf790._0x420706),_0x1e9789(0x86),_0x1e9789(0x89)),{'recursive':!![]});const _0x53956a=[{'rel':join(_0x1e9789(_0x2cf790._0x420706),_0x1e9789(_0x2cf790._0x2ba59e)),'content':unotestConfigMjs(_0x10cf01[_0x1e9789(0x9b)])},{'rel':join(_0x1e9789(_0x2cf790._0x218591),'package.json'),'content':suitePackageJson(readOwnVersion())},{'rel':join('unotest',_0x1e9789(_0x2cf790._0x585873)),'content':templates['envExample']},{'rel':join(_0x1e9789(0x95),_0x1e9789(0x8d)),'content':templates[_0x1e9789(0x93)]},{'rel':join(_0x1e9789(_0x2cf790._0x4a9d73),_0x1e9789(_0x2cf790._0x7beffc),_0x1e9789(0xad),_0x1e9789(_0x2cf790._0x42318a)),'content':templates[_0x1e9789(_0x2cf790._0x24c753)][_0x1e9789(0x96)]}];for(const {rel:_0x5f4a40,content:_0x3ac34a}of _0x53956a){const _0xc00f71=join(_0x2313d2,_0x5f4a40);if(existsSync(_0xc00f71)){_0x926a2b['push'](_0x5f4a40);continue;}await writeFile(_0xc00f71,_0x3ac34a),_0x197e7b[_0x1e9789(_0x2cf790._0x4acc19)](_0x5f4a40);}return{'projectRoot':_0x2313d2,'created':_0x197e7b,'skipped':_0x926a2b};}function _0xfe9e(_0x5a6f63,_0x4c8e5c){_0x5a6f63=_0x5a6f63-0x86;const _0x3d7e97=_0x3d7e();let _0xfe9ea6=_0x3d7e97[_0x5a6f63];if(_0xfe9e['rIBwfC']===undefined){var _0x1fecdd=function(_0x175a65){const _0x5afa09='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x461488='',_0x3abd19='';for(let _0x452e7c=0x0,_0x3a597f,_0x5a9bea,_0x593dba=0x0;_0x5a9bea=_0x175a65['charAt'](_0x593dba++);~_0x5a9bea&&(_0x3a597f=_0x452e7c%0x4?_0x3a597f*0x40+_0x5a9bea:_0x5a9bea,_0x452e7c++%0x4)?_0x461488+=String['fromCharCode'](0xff&_0x3a597f>>(-0x2*_0x452e7c&0x6)):0x0){_0x5a9bea=_0x5afa09['indexOf'](_0x5a9bea);}for(let _0x1fb53a=0x0,_0xab4005=_0x461488['length'];_0x1fb53a<_0xab4005;_0x1fb53a++){_0x3abd19+='%'+('00'+_0x461488['charCodeAt'](_0x1fb53a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3abd19);};_0xfe9e['wBjOyn']=_0x1fecdd,_0xfe9e['RYNMqf']={},_0xfe9e['rIBwfC']=!![];}const _0x6bb9e=_0x3d7e97[0x0],_0x468562=_0x5a6f63+_0x6bb9e,_0x36014b=_0xfe9e['RYNMqf'][_0x468562];return!_0x36014b?(_0xfe9ea6=_0xfe9e['wBjOyn'](_0xfe9ea6),_0xfe9e['RYNMqf'][_0x468562]=_0xfe9ea6):_0xfe9ea6=_0x36014b,_0xfe9ea6;}__name(scaffoldWorkspace,_0x2dd8a3(0xa5));export{scaffoldWorkspace};
@@ -1 +1 @@
1
- var _0x3a654c=_0x5cd3;(function(_0xda4d50,_0x5165d9){var _0x4c7581={_0x123399:0x16d,_0x51ccb9:0x160,_0x1590dd:0x16f,_0x4befa8:0x171,_0x582a6d:0x173,_0x2f0de6:0x15f,_0xb356bd:0x165},_0x58786c=_0x5cd3,_0xb338c7=_0xda4d50();while(!![]){try{var _0xf1190f=parseInt(_0x58786c(_0x4c7581._0x123399))/0x1+parseInt(_0x58786c(_0x4c7581._0x51ccb9))/0x2*(parseInt(_0x58786c(0x166))/0x3)+parseInt(_0x58786c(_0x4c7581._0x1590dd))/0x4*(-parseInt(_0x58786c(0x163))/0x5)+-parseInt(_0x58786c(0x16e))/0x6*(parseInt(_0x58786c(_0x4c7581._0x4befa8))/0x7)+parseInt(_0x58786c(_0x4c7581._0x582a6d))/0x8*(parseInt(_0x58786c(0x174))/0x9)+-parseInt(_0x58786c(_0x4c7581._0x2f0de6))/0xa+parseInt(_0x58786c(_0x4c7581._0xb356bd))/0xb;if(_0xf1190f===_0x5165d9)break;else _0xb338c7['push'](_0xb338c7['shift']());}catch(_0x25ce82){_0xb338c7['push'](_0xb338c7['shift']());}}}(_0x5728,0x3a823));import{fileURLToPath}from'url';function _0x5cd3(_0x3cc0d9,_0x348278){_0x3cc0d9=_0x3cc0d9-0x15d;var _0x5728e7=_0x5728();var _0x5cd3a6=_0x5728e7[_0x3cc0d9];if(_0x5cd3['MWxbWl']===undefined){var _0x43b8e7=function(_0x1e70ba){var _0x7020f5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x58c29e='',_0x289aab='';for(var _0x33acbe=0x0,_0xece5ac,_0x49c248,_0x5d25aa=0x0;_0x49c248=_0x1e70ba['charAt'](_0x5d25aa++);~_0x49c248&&(_0xece5ac=_0x33acbe%0x4?_0xece5ac*0x40+_0x49c248:_0x49c248,_0x33acbe++%0x4)?_0x58c29e+=String['fromCharCode'](0xff&_0xece5ac>>(-0x2*_0x33acbe&0x6)):0x0){_0x49c248=_0x7020f5['indexOf'](_0x49c248);}for(var _0x210512=0x0,_0x122a01=_0x58c29e['length'];_0x210512<_0x122a01;_0x210512++){_0x289aab+='%'+('00'+_0x58c29e['charCodeAt'](_0x210512)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x289aab);};_0x5cd3['AERaQq']=_0x43b8e7,_0x5cd3['GkrPfz']={},_0x5cd3['MWxbWl']=!![];}var _0x48b737=_0x5728e7[0x0],_0x3c7925=_0x3cc0d9+_0x48b737,_0x5f1166=_0x5cd3['GkrPfz'][_0x3c7925];return!_0x5f1166?(_0x5cd3a6=_0x5cd3['AERaQq'](_0x5cd3a6),_0x5cd3['GkrPfz'][_0x3c7925]=_0x5cd3a6):_0x5cd3a6=_0x5f1166,_0x5cd3a6;}import{dirname,resolve}from'path';import{spawn}from'child_process';import{existsSync}from'fs';var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,_0x3a654c(0x175)),resolve(here,_0x3a654c(0x16b))],serverEntry=candidates[_0x3a654c(0x161)](_0x58c29e=>existsSync(_0x58c29e));function _0x5728(){var _0x209a52=['C2vYDMuTzML4DhvYztOGy2fUBM90igXVy2f0zsbMAxH0DxjLihnLCNzLCIbLBNrYEs4GvhjPzwq6cG','mZy1ENHkzePW','AM9PBG','mte5ndq2ogDOtMD3sa','m29tEKrUCW','yxjNDG','Aw5OzxjPDa','D3jPDgu','BwfW','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','zxHPDa','mJyYmdC4Eg9eq2DN','nJaWze1fB0vv','oda4mfHywNjQzW','C3rKzxjY','mJa3nZz2y2ngzui','C2XPy2u','mtmZmJbSt0ruAg8','mte4ogvVDvzQza','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','zxHLy1bHDgG','rgLKihLVDsbWDwjSAxnOihDPDgHVDxqGzxHHBxbSzxmVzML4DhvYzxmVpWO','mZyZnte4mg9UwuDbBq','oteZoty2zfz6wejH','zMLUza'];_0x5728=function(){return _0x209a52;};return _0x5728();}!serverEntry&&(process[_0x3a654c(0x170)][_0x3a654c(0x169)](_0x3a654c(0x162)+candidates[_0x3a654c(0x16a)](_0x289aab=>'\x20\x20'+_0x289aab+'\x0a')[_0x3a654c(0x164)]('')+_0x3a654c(0x15e)),process['exit'](0x1));var child=spawn(process[_0x3a654c(0x15d)],[serverEntry,...process[_0x3a654c(0x167)][_0x3a654c(0x172)](0x2)],{'stdio':_0x3a654c(0x168)});child['on'](_0x3a654c(0x16c),_0x33acbe=>process[_0x3a654c(0x16c)](_0x33acbe??0x1));
1
+ function _0x2cb1(_0x2f53c4,_0x2f8c27){_0x2f53c4=_0x2f53c4-0x197;var _0x488435=_0x4884();var _0x2cb1b9=_0x488435[_0x2f53c4];if(_0x2cb1['hzBVJw']===undefined){var _0xab9ec7=function(_0xc8ba29){var _0x106b9b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4838ff='',_0x4e6351='';for(var _0xe7d241=0x0,_0x2544b3,_0x4bf744,_0x329d63=0x0;_0x4bf744=_0xc8ba29['charAt'](_0x329d63++);~_0x4bf744&&(_0x2544b3=_0xe7d241%0x4?_0x2544b3*0x40+_0x4bf744:_0x4bf744,_0xe7d241++%0x4)?_0x4838ff+=String['fromCharCode'](0xff&_0x2544b3>>(-0x2*_0xe7d241&0x6)):0x0){_0x4bf744=_0x106b9b['indexOf'](_0x4bf744);}for(var _0x547fba=0x0,_0x40cdd6=_0x4838ff['length'];_0x547fba<_0x40cdd6;_0x547fba++){_0x4e6351+='%'+('00'+_0x4838ff['charCodeAt'](_0x547fba)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4e6351);};_0x2cb1['lURvpn']=_0xab9ec7,_0x2cb1['bZthqP']={},_0x2cb1['hzBVJw']=!![];}var _0x55e31d=_0x488435[0x0],_0x25a52a=_0x2f53c4+_0x55e31d,_0x1f384a=_0x2cb1['bZthqP'][_0x25a52a];return!_0x1f384a?(_0x2cb1b9=_0x2cb1['lURvpn'](_0x2cb1b9),_0x2cb1['bZthqP'][_0x25a52a]=_0x2cb1b9):_0x2cb1b9=_0x1f384a,_0x2cb1b9;}var _0x3264ab=_0x2cb1;function _0x4884(){var _0x5582c5=['mta5oti3mLrREg9Lvq','mtK4otC4m1j6zLr3Aq','nJu1mZC1sgjsqKH2','lI4VlI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','mteWodGYCwLOz2fs','mJiYmtbly1DeyMq','D3jPDgu','zMLUza','zxHPDa','zxHLy1bHDgG','C3rKzxjY','mJKYsufrBhn3','Aw5OzxjPDa','lI4VlI4VzxHHBxbSzxmVzML4DhvYzxmVyNjLywSTzML4lwfWCc9Zzxj2zs5TANm','mZjStwDXALi','AM9PBG','mJa5mJe5ne9mCeThtG','ntm1nZm0Cu9iBuXq'];_0x4884=function(){return _0x5582c5;};return _0x4884();}(function(_0x40d440,_0x5e1cc8){var _0x24d50b={_0x25a481:0x1a2,_0x1b3722:0x19c,_0x3e1887:0x197,_0x2c07fe:0x199,_0x46c69b:0x198},_0xe12437=_0x2cb1,_0x2502c3=_0x40d440();while(!![]){try{var _0x20384a=parseInt(_0xe12437(0x1a8))/0x1+parseInt(_0xe12437(0x19b))/0x2+parseInt(_0xe12437(0x1a7))/0x3+-parseInt(_0xe12437(_0x24d50b._0x25a481))/0x4*(-parseInt(_0xe12437(_0x24d50b._0x1b3722))/0x5)+-parseInt(_0xe12437(_0x24d50b._0x3e1887))/0x6+-parseInt(_0xe12437(_0x24d50b._0x2c07fe))/0x7+parseInt(_0xe12437(0x1a5))/0x8*(-parseInt(_0xe12437(_0x24d50b._0x46c69b))/0x9);if(_0x20384a===_0x5e1cc8)break;else _0x2502c3['push'](_0x2502c3['shift']());}catch(_0x37ecd2){_0x2502c3['push'](_0x2502c3['shift']());}}}(_0x4884,0x6e446));import{fileURLToPath}from'url';import{dirname,resolve}from'path';import{spawn}from'child_process';import{existsSync}from'fs';var here=dirname(fileURLToPath(import.meta.url)),candidates=[resolve(here,_0x3264ab(0x1a4)),resolve(here,_0x3264ab(0x19a))],serverEntry=candidates[_0x3264ab(0x19e)](_0x4838ff=>existsSync(_0x4838ff));!serverEntry&&(process[_0x3264ab(0x1a1)][_0x3264ab(0x19d)]('serve-fixture:\x20cannot\x20locate\x20fixture\x20server\x20entry.\x20Tried:\x0a'+candidates['map'](_0x4e6351=>'\x20\x20'+_0x4e6351+'\x0a')[_0x3264ab(0x1a6)]('')+'Did\x20you\x20publish\x20without\x20examples/fixtures/?\x0a'),process[_0x3264ab(0x19f)](0x1));var child=spawn(process[_0x3264ab(0x1a0)],[serverEntry,...process['argv']['slice'](0x2)],{'stdio':_0x3264ab(0x1a3)});child['on'](_0x3264ab(0x19f),_0xe7d241=>process[_0x3264ab(0x19f)](_0xe7d241??0x1));
@@ -1 +1 @@
1
- const _0x8fe9bb=_0x515c;(function(_0x4c4c9b,_0x1968ca){const _0x370a39={_0x1ed841:0x1b8,_0x17e18a:0x18d,_0x450f50:0x18c,_0x20410c:0x189,_0x72bf94:0x1c2},_0x5b35df=_0x515c,_0x422a24=_0x4c4c9b();while(!![]){try{const _0x1f14f7=parseInt(_0x5b35df(0x1b2))/0x1*(parseInt(_0x5b35df(_0x370a39._0x1ed841))/0x2)+parseInt(_0x5b35df(0x1b3))/0x3*(-parseInt(_0x5b35df(0x19c))/0x4)+-parseInt(_0x5b35df(0x162))/0x5*(parseInt(_0x5b35df(0x190))/0x6)+-parseInt(_0x5b35df(_0x370a39._0x17e18a))/0x7+-parseInt(_0x5b35df(0x174))/0x8*(-parseInt(_0x5b35df(_0x370a39._0x450f50))/0x9)+-parseInt(_0x5b35df(_0x370a39._0x20410c))/0xa+-parseInt(_0x5b35df(0x1ae))/0xb*(-parseInt(_0x5b35df(_0x370a39._0x72bf94))/0xc);if(_0x1f14f7===_0x1968ca)break;else _0x422a24['push'](_0x422a24['shift']());}catch(_0x468fe7){_0x422a24['push'](_0x422a24['shift']());}}}(_0xed3b,0x9badf));var __defProp=Object[_0x8fe9bb(0x1c0)],__name=(_0x431c63,_0x19bc98)=>__defProp(_0x431c63,_0x8fe9bb(0x1b4),{'value':_0x19bc98,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';function _0x515c(_0x14df0f,_0x2de924){_0x14df0f=_0x14df0f-0x15b;const _0xed3b6d=_0xed3b();let _0x515cbe=_0xed3b6d[_0x14df0f];if(_0x515c['zzertE']===undefined){var _0x381bbf=function(_0x690e31){const _0x5306d7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x136f58='',_0x431c63='';for(let _0x19bc98=0x0,_0x3dbb9b,_0x929070,_0x50a6ab=0x0;_0x929070=_0x690e31['charAt'](_0x50a6ab++);~_0x929070&&(_0x3dbb9b=_0x19bc98%0x4?_0x3dbb9b*0x40+_0x929070:_0x929070,_0x19bc98++%0x4)?_0x136f58+=String['fromCharCode'](0xff&_0x3dbb9b>>(-0x2*_0x19bc98&0x6)):0x0){_0x929070=_0x5306d7['indexOf'](_0x929070);}for(let _0x5eccdd=0x0,_0x110d6c=_0x136f58['length'];_0x5eccdd<_0x110d6c;_0x5eccdd++){_0x431c63+='%'+('00'+_0x136f58['charCodeAt'](_0x5eccdd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x431c63);};_0x515c['QmvnjN']=_0x381bbf,_0x515c['XDgJvL']={},_0x515c['zzertE']=!![];}const _0x25c2ae=_0xed3b6d[0x0],_0x55aebc=_0x14df0f+_0x25c2ae,_0x5f590c=_0x515c['XDgJvL'][_0x55aebc];return!_0x5f590c?(_0x515cbe=_0x515c['QmvnjN'](_0x515cbe),_0x515c['XDgJvL'][_0x55aebc]=_0x515cbe):_0x515cbe=_0x5f590c,_0x515cbe;}import{createRequire}from'module';import{dirname,join}from'path';import{existsSync as _0x136f58}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x3f7039={_0xb12709:0x17c},_0x26800c=_0x8fe9bb;for(const _0x3dbb9b of[probeChrome,probeEdge,probeChromeBeta]){const _0x929070=_0x3dbb9b();if(_0x929070[_0x26800c(_0x3f7039._0xb12709)]!==null)return _0x929070;}return{'channel':null};}__name(probeSystemBrowser,_0x8fe9bb(0x1b6));function probeChrome(){const _0x5dfb62={_0xf6c944:0x164},_0xb10358=_0x8fe9bb,_0x50a6ab=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x50a6ab)return{'channel':_0xb10358(_0x5dfb62._0xf6c944),'path':_0x50a6ab,'label':'Google\x20Chrome'};return{'channel':null};}__name(probeChrome,_0x8fe9bb(0x183));function probeEdge(){const _0x49eaf2={_0x325253:0x175},_0x2c5d16=_0x8fe9bb,_0x5eccdd=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x5eccdd)return{'channel':_0x2c5d16(_0x49eaf2._0x325253),'path':_0x5eccdd,'label':_0x2c5d16(0x15e)};return{'channel':null};}__name(probeEdge,_0x8fe9bb(0x177));function probeChromeBeta(){const _0x110d6c=firstExistingPath(CHROME_BETA_PATHS);if(_0x110d6c)return{'channel':'chrome-beta','path':_0x110d6c,'label':'Google\x20Chrome\x20Beta'};return{'channel':null};}__name(probeChromeBeta,'probeChromeBeta');var CHROME_PATHS=((()=>{const _0x4d915c={_0x456165:0x176,_0x3ac9c8:0x18b,_0x2be53c:0x195,_0xb2279:0x1ab,_0x45b0a3:0x171,_0x3a9ee6:0x1ac,_0x29094e:0x197,_0x25ec39:0x17d},_0x431418=_0x8fe9bb;switch(process['platform']){case _0x431418(_0x4d915c._0x456165):return['/Applications/Google\x20Chrome.app/Contents/MacOS/Google\x20Chrome'];case _0x431418(_0x4d915c._0x3ac9c8):return[process[_0x431418(0x1ab)]['ProgramFiles']+_0x431418(0x1ac),process[_0x431418(0x1ab)][_0x431418(_0x4d915c._0x2be53c)]+_0x431418(0x1ac),process[_0x431418(_0x4d915c._0xb2279)][_0x431418(_0x4d915c._0x45b0a3)]+_0x431418(_0x4d915c._0x3a9ee6)];default:return[_0x431418(0x1a4),_0x431418(0x1b9),_0x431418(_0x4d915c._0x29094e),_0x431418(_0x4d915c._0x25ec39),_0x431418(0x18f)];}})()),CHROME_BIN_NAMES=[_0x8fe9bb(0x16b),_0x8fe9bb(0x168),_0x8fe9bb(0x19d),_0x8fe9bb(0x1bb)],EDGE_PATHS=((()=>{const _0x53dcf3={_0x22adf3:0x176,_0x27a161:0x18b,_0x10eb5b:0x1ab,_0x1620d9:0x166,_0x1ad4e1:0x1a3},_0x43f56b=_0x8fe9bb;switch(process['platform']){case _0x43f56b(_0x53dcf3._0x22adf3):return[_0x43f56b(0x1ba)];case _0x43f56b(_0x53dcf3._0x27a161):return[process[_0x43f56b(_0x53dcf3._0x10eb5b)][_0x43f56b(_0x53dcf3._0x1620d9)]+_0x43f56b(0x15f),process[_0x43f56b(0x1ab)]['ProgramFiles(x86)']+'\x5cMicrosoft\x5cEdge\x5cApplication\x5cmsedge.exe'];default:return[_0x43f56b(_0x53dcf3._0x1ad4e1),'/usr/bin/microsoft-edge-stable'];}})()),EDGE_BIN_NAMES=[_0x8fe9bb(0x1b0),_0x8fe9bb(0x1aa)],CHROME_BETA_PATHS=((()=>{const _0x4f8734={_0x4f350a:0x1b5,_0xe26f2d:0x18b},_0x54f3d7=_0x8fe9bb;switch(process[_0x54f3d7(0x15b)]){case'darwin':return[_0x54f3d7(_0x4f8734._0x4f350a)];case _0x54f3d7(_0x4f8734._0xe26f2d):return[process['env'][_0x54f3d7(0x166)]+'\x5cGoogle\x5cChrome\x20Beta\x5cApplication\x5cchrome.exe'];default:return[_0x54f3d7(0x1bc)];}})());function _0xed3b(){const _0x3d1c05=['l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH','y3DK','Cgf0Aa','ls1IywLS','zgvMAw5LuhjVCgvYDhK','DxrMoa','mteXnKHqwNDRCG','zMLYC3rfEgLZDgLUz1bHDgG','ls1QC29U','igzVDw5K','CgXHDgzVCM0','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','y2HLy2TxCML0ywjSzun3za','twLJCM9ZB2z0ievKz2u','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','BM9Kzq','yMfPBa','mtyZmdq2nvPAqxHhvG','AM9PBG','y2HYB21L','v2vIuNvUBMvYqwrHChrLCG','uhjVz3jHBuzPBgvZ','ls1ICMvHAW','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','yNvPBgrfBNy','ls13B3jRzxjZpq','z29Vz2XLlwnOCM9Tzq','vgfYz2v0igrPCMvJDg9YEq','CMvZB2X2zq','zxjYB3i','C3vWCg9YDgvKs2LUzhm','AgvHzgvK','te9dquXbufbeqvrb','Dw5VDgvZDc13zwi','vu5pvevtvf9iruferuq','nZqYodHoqNHZr2u','BxnLzgDL','zgfYD2LU','ChjVyMvfzgDL','DhjPBq','C2nLBMfYAw8','u3LZDgvTigjYB3DZzxi','yxbWu2vYDMvYqxjNCW','y2HHBM5LBa','l3vZCI9IAw4Vy2HYB21PDw0','yNjLywTWB2LUDhm','l3bHy2THz2uUANnVBG','tM9Kzs5QCYb2zxjZAw9U','y2HLy2TtExn0zw1cCM93C2vY','BgvUz3rO','ChjVyMvdAhjVBwu','C3bSAxq','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','C3rHCNrZv2L0Aa','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','BgfIzwW','ndq2ndm3mfzPrwDStW','DgfYz2v0ia','D2LUmZi','nJntAMHfz3a','mJmYodi4nfjwAuPiwG','yMLU','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','mtjbvgDxy1O','igrVzxmGBM90igv4Axn0','A2LUza','C3rYAw5N','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','uhjVz3jHBuzPBgvZkhG4nIK','yxbWlxnLCNzLCG','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','D29YA2vYCW','B2jQzwn0','CgfYC2u','y29SBgvJDgLVBG','mtzLv2DyBNm','y2HYB21PDw0','D2HPy2G','D2fYBMLUzW','D2HPy2HpzG','zgvIDwC','ChvZAa','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzq','ls1Kzwj1zW','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','CMvZB2X2zujPBG','yxv0Ag9Y','CNvUrw52AxjVBM1LBNrdAgvJA3m','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','zw52','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','y2HLy2ToB2rLvMvYC2LVBG','mZuYmdG4rgjWsMzZ','ztjL','BwLJCM9ZB2z0lwvKz2u','qhvUB3rLC3qVD2vI','mJK0mZG4svnzvMDV','otuWndi3sKTpCgPp','BMfTzq','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','ChjVyMvtExn0zw1cCM93C2vY','yNvPBgrbCMDZ','mLriEeTzzG','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1ZDgfIBgu','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','y2HYB21PDw0TyNjVD3nLCG'];_0xed3b=function(){return _0x3d1c05;};return _0xed3b();}function firstExistingPath(_0x412b6f){const _0x4a671f=_0x8fe9bb;for(const _0x3b711c of _0x412b6f){if(!_0x3b711c||_0x3b711c[_0x4a671f(0x186)]('undefined'))continue;if(existsSync(_0x3b711c))return _0x3b711c;}return null;}__name(firstExistingPath,_0x8fe9bb(0x1c3));function whichOf(_0x47fada){const _0x2dc17c={_0x1d1750:0x19e,_0x128192:0x1c1,_0x291819:0x182},_0x225e56=_0x8fe9bb;if(process['platform']==='win32')return void 0x0;for(const _0x1cb82c of _0x47fada){try{const _0xacf910=execFileSync(_0x225e56(_0x2dc17c._0x1d1750),[_0x1cb82c],{'encoding':_0x225e56(_0x2dc17c._0x128192)})[_0x225e56(0x178)]();if(_0xacf910[_0x225e56(_0x2dc17c._0x291819)]>0x0&&existsSync(_0xacf910))return _0xacf910;}catch{}}return void 0x0;}__name(whichOf,_0x8fe9bb(0x1a0));function runEnvironmentChecks(_0x2665b4={}){const _0x8d1511={_0x552113:0x1bd},_0xed080d=_0x8fe9bb,_0x5f16f6=_0x2665b4[_0xed080d(_0x8d1511._0x552113)]??process[_0xed080d(_0x8d1511._0x552113)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x5f16f6)];}__name(runEnvironmentChecks,_0x8fe9bb(0x1a9));function checkNodeVersion(){const _0x54e5e1={_0x1e2b47:0x184,_0x295030:0x16e,_0xd8c92f:0x187},_0x333f95=_0x8fe9bb,_0x5cb5ff=process['versions'][_0x333f95(0x160)],_0x394c7f=Number(_0x5cb5ff[_0x333f95(_0x54e5e1._0x1e2b47)]('.')[0x0]);if(!Number['isFinite'](_0x394c7f)||_0x394c7f<0x14)return{'name':'Node.js\x20version','severity':_0x333f95(_0x54e5e1._0x295030),'message':_0x333f95(0x15c)+_0x5cb5ff+')','detail':_0x333f95(_0x54e5e1._0xd8c92f)};return{'name':_0x333f95(0x180),'severity':'ok','message':_0x5cb5ff};}__name(checkNodeVersion,_0x8fe9bb(0x1ad));function checkSystemBrowser(){const _0x33e335={_0x429b30:0x17c,_0x32c4a2:0x17a,_0x1fd13d:0x1c5,_0x5e409d:0x17a,_0x25164b:0x19f,_0x309bdb:0x185},_0x1d6ba1=_0x8fe9bb,_0x214a31=probeSystemBrowser();if(_0x214a31[_0x1d6ba1(_0x33e335._0x429b30)]!==null)return{'name':_0x1d6ba1(_0x33e335._0x32c4a2),'severity':'ok','message':_0x214a31[_0x1d6ba1(0x188)]+_0x1d6ba1(_0x33e335._0x1fd13d),'detail':_0x214a31[_0x1d6ba1(0x1be)]};return{'name':_0x1d6ba1(_0x33e335._0x5e409d),'severity':_0x1d6ba1(_0x33e335._0x25164b),'message':'no\x20Chrome\x20/\x20Edge\x20/\x20Chromium\x20detected','detail':_0x1d6ba1(_0x33e335._0x309bdb)};}__name(checkSystemBrowser,_0x8fe9bb(0x181));function checkWritableCwd(_0x413879){const _0x20438e={_0x1cf799:0x18a,_0x259fc3:0x16c},_0x38457d=_0x8fe9bb;if(!_0x136f58(_0x413879))return{'name':_0x38457d(0x16c),'severity':'error','message':_0x38457d(_0x20438e._0x1cf799)+_0x413879+_0x38457d(0x191),'detail':_0x38457d(0x1a6)};return{'name':_0x38457d(_0x20438e._0x259fc3),'severity':'ok','message':_0x413879};}__name(checkWritableCwd,_0x8fe9bb(0x15d));var PACKAGE_NAME=_0x8fe9bb(0x1b1),WebRunnerAdapter=class{static{__name(this,_0x8fe9bb(0x165));}[_0x8fe9bb(0x1b4)]=PACKAGE_NAME;['suffix']='';[_0x8fe9bb(0x1a1)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};[_0x8fe9bb(0x16f)]=[_0x8fe9bb(0x179),_0x8fe9bb(0x19b),'authoring'];[_0x8fe9bb(0x1a7)](){const _0x48026c={_0x307cdc:0x16d,_0xe62af4:0x194},_0x4d9f27=_0x8fe9bb,_0xa7e903=createRequire(import.meta.url),_0x2f4e4a=_0xa7e903[_0x4d9f27(_0x48026c._0x307cdc)](PACKAGE_NAME+_0x4d9f27(0x17f)),_0x2a47e6=JSON[_0x4d9f27(0x19a)](readFileSync(_0x2f4e4a,_0x4d9f27(0x1c1))),_0x16c901=pickBin(_0x2a47e6);if(!_0x16c901)throw new Error(PACKAGE_NAME+_0x4d9f27(_0x48026c._0xe62af4));return join(dirname(_0x2f4e4a),_0x16c901);}[_0x8fe9bb(0x1b7)](_0x2c5b2e){const _0x595ec4={_0x5063d1:0x192,_0xc340a5:0x179,_0x76c7f7:0x17e,_0xb0a0a7:0x182,_0x16a921:0x1a2,_0x2e3ccf:0x19b,_0x605c04:0x198,_0x5239b4:0x16a,_0x1cb08a:0x161,_0x298fc7:0x1a2,_0x205492:0x1bf,_0x327a05:0x1a8,_0x4bb9c7:0x1b4},_0x57af38=_0x8fe9bb;if(_0x2c5b2e[_0x57af38(_0x595ec4._0x5063d1)]===_0x57af38(_0x595ec4._0xc340a5)){const _0x508cbb=[_0x57af38(0x1af),_0x2c5b2e['scenario']];if(_0x2c5b2e['debug'])_0x508cbb['push'](_0x57af38(0x1a5));return _0x2c5b2e['breakpoints']&&_0x2c5b2e[_0x57af38(_0x595ec4._0x76c7f7)][_0x57af38(_0x595ec4._0xb0a0a7)]>0x0&&_0x508cbb[_0x57af38(_0x595ec4._0x16a921)](_0x57af38(0x167),_0x2c5b2e[_0x57af38(0x17e)][_0x57af38(0x163)](',')),_0x508cbb;}if(_0x2c5b2e[_0x57af38(0x192)]===_0x57af38(_0x595ec4._0x2e3ccf)){const _0x8f709f=[_0x57af38(0x19b),_0x2c5b2e[_0x57af38(0x19b)]];_0x2c5b2e[_0x57af38(0x198)]!==void 0x0&&_0x2c5b2e[_0x57af38(_0x595ec4._0x605c04)]>0x1&&_0x8f709f[_0x57af38(0x1a2)](_0x57af38(_0x595ec4._0x5239b4)+_0x2c5b2e[_0x57af38(_0x595ec4._0x605c04)]);if(_0x2c5b2e[_0x57af38(_0x595ec4._0x1cb08a)])_0x8f709f[_0x57af38(_0x595ec4._0x298fc7)](_0x57af38(_0x595ec4._0x205492));return _0x8f709f;}if(_0x2c5b2e[_0x57af38(_0x595ec4._0x5063d1)]==='authoring')return[_0x57af38(_0x595ec4._0x327a05),_0x2c5b2e['scenario']];const _0x43d860=_0x2c5b2e;throw new UnsupportedRunKindError(_0x43d860['kind'],this[_0x57af38(_0x595ec4._0x4bb9c7)]);}[_0x8fe9bb(0x169)](_0x32b388){const _0xbdd4e9=_0x8fe9bb,_0x3989c7={};if(_0x32b388[_0xbdd4e9(0x170)])_0x3989c7[_0xbdd4e9(0x173)]='1';return _0x3989c7;}[_0x8fe9bb(0x17b)](){const _0x185c6c={_0x5d722f:0x196},_0x5fc1e=_0x8fe9bb;return[_0x5fc1e(_0x185c6c._0x5d722f)];}['schedulesArgs'](){const _0x45cc0f={_0x12c2d2:0x1c4},_0x5e24cc=_0x8fe9bb;return['schedules',_0x5e24cc(_0x45cc0f._0x12c2d2)];}async['doctor'](_0x241d06){return runEnvironmentChecks({'cwd':_0x241d06['projectRoot']});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0xacd148){const _0x1addc7={_0x5d51e3:0x193,_0x5609d3:0x18e,_0x578600:0x199,_0x4a8438:0x172},_0x5e3dcf=_0x8fe9bb;if(typeof _0xacd148[_0x5e3dcf(0x18e)]===_0x5e3dcf(_0x1addc7._0x5d51e3))return _0xacd148[_0x5e3dcf(_0x1addc7._0x5609d3)];if(_0xacd148[_0x5e3dcf(_0x1addc7._0x5609d3)]&&typeof _0xacd148[_0x5e3dcf(0x18e)]===_0x5e3dcf(_0x1addc7._0x578600))return _0xacd148[_0x5e3dcf(0x18e)][_0x5e3dcf(_0x1addc7._0x4a8438)]??Object['values'](_0xacd148[_0x5e3dcf(0x18e)])[0x0]??null;return null;}__name(pickBin,'pickBin');export{web_runner_adapter_default as default,webRunnerAdapter};
1
+ const _0x5b719e=_0x1c71;(function(_0x25f1af,_0x48b7d1){const _0x26598={_0x2c66dd:0x132,_0x99b28e:0x134,_0x2ae345:0x139,_0x476a8b:0x127,_0x5073d4:0x14f},_0xbef82d=_0x1c71,_0x4fdaee=_0x25f1af();while(!![]){try{const _0x57deb8=parseInt(_0xbef82d(0x184))/0x1*(parseInt(_0xbef82d(0x163))/0x2)+parseInt(_0xbef82d(_0x26598._0x2c66dd))/0x3*(parseInt(_0xbef82d(0x11b))/0x4)+parseInt(_0xbef82d(0x16e))/0x5*(-parseInt(_0xbef82d(0x16a))/0x6)+-parseInt(_0xbef82d(0x155))/0x7*(parseInt(_0xbef82d(_0x26598._0x99b28e))/0x8)+parseInt(_0xbef82d(0x159))/0x9*(-parseInt(_0xbef82d(0x142))/0xa)+parseInt(_0xbef82d(_0x26598._0x2ae345))/0xb*(parseInt(_0xbef82d(_0x26598._0x476a8b))/0xc)+parseInt(_0xbef82d(_0x26598._0x5073d4))/0xd;if(_0x57deb8===_0x48b7d1)break;else _0x4fdaee['push'](_0x4fdaee['shift']());}catch(_0x5d765e){_0x4fdaee['push'](_0x4fdaee['shift']());}}}(_0x5534,0x7103a));var __defProp=Object[_0x5b719e(0x147)],__name=(_0xa51c42,_0x17a880)=>__defProp(_0xa51c42,_0x5b719e(0x149),{'value':_0x17a880,'configurable':!![]});import{UnsupportedRunKindError}from'@unotest/protocol';import{readFileSync}from'fs';import{createRequire}from'module';function _0x5534(){const _0x557b89=['D2HPy2G','yxv0Ag9Y','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2uTC3rHyMXL','Dw5VDgvZDc13zwi','ChjVAMvJDfjVB3q','mZe0EefPtNvu','ihbHy2THz2uUANnVBIbKzwnSyxjLCYbUBYaNyMLUjYbMAwvSzcdIGjqGyNjVA2vUigLUC3rHBgW/','ls1IywLS','q3jLyxrLihrOzsbKAxjLy3rVCNKGB3iGCNvUigLUAxqGAw4Gyw4GzxHPC3rPBMCGChjVAMvJDcbYB290lG','AxngAw5PDgu','yMLU','AM9PBG','mZG0sMXOEgTi','l3vZCI9IAw4Vy2HYB21PDw0TyNjVD3nLCG','C2nOzwr1BgvZqxjNCW','u3LZDgvTigjYB3DZzxi','ntmZmtvZAgPrCuS','yNjLywTWB2LUDhm','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LlMfWCc9dB250zw50CY9nywnpuY9hB29NBguGq2HYB21L','l3bHy2THz2uUANnVBG','C3rYAw5N','xeDVB2DSzvXdAhjVBwvCqxbWBgLJyxrPB25Cy2HYB21LlMv4zq','yNvPBgrfBNy','Aw5PDcb3AwXSig9MzMvYihrVigrVD25SB2fKigj1BMrSzwqGq2HYB21PDw0Gkh4XntaGtuiPlIbbBhrLCM5HDgL2zwX5lcbPBNn0ywXSienOCM9TzsbMCM9TigH0DhbZoI8VD3D3lMDVB2DSzs5JB20Vy2HYB21LigfUzcbYzs1YDw4U','CgfYC2u','ChjVyMvdAhjVBwvczxrH','y2HHBM5LBa','C2nLBMfYAw8','BwLJCM9ZB2z0lwvKz2uTC3rHyMXL','vgfYz2v0igrPCMvJDg9YEq','ChjVyMvfzgDL','zxjYB3i','r29Vz2XLienOCM9Tzq','A2LUza','Dw5KzwzPBMvK','y2HYB21PDw0','v2vIuNvUBMvYqwrHChrLCG','igzVDw5K','mti5n2H1EKjYCG','z29Vz2XLlwnOCM9Tzq','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1ZDgfIBgu','ndG0nJrhzLHcDeC','zgfYD2LU','C2nOzwr1BgvZ','yMfPBa','BgvUz3rO','l3vZCI9IAw4VBwLJCM9ZB2z0lwvKz2u','uhjVz3jHBuzPBgvZkhG4nIK','l0fWCgXPy2f0Aw9UCY9nAwnYB3nVzNqGrwrNzs5HChaVq29UDgvUDhmVtwfJt1mVtwLJCM9ZB2z0ievKz2u','CMvZB2X2zq','l3vZCI9IAw4Vy2HYB21PDw0','y2HYB21PDw0TyNjVD3nLCG','Cgf0Aa','mJG2nZi4v1j3AeL4','yxv0Ag9YAw5N','zg9JDg9Y','BwLJCM9ZB2z0lwvKz2u','y29SBgvJDgLVBG','y3DK','zgvIDwC','ChjVyMvdAhjVBwu','y2HYB21L','C3rHCNrZv2L0Aa','xe1Py3jVC29MDfXfzgDLxefWCgXPy2f0Aw9Uxg1ZzwrNzs5LEgu','m0DIzK1rCa','yxbWu2vYDMvYqxjNCW','mJmYrLfSrwvS','z29Vz2XLlwnOCM9Tzs1ZDgfIBgu','l3nUyxaVyMLUl2DVB2DSzs1JAhjVBwu','l0fWCgXPy2f0Aw9UCY9hB29NBguGq2HYB21LiejLDgeUyxbWl0nVBNrLBNrZl01Hy09tl0DVB2DSzsbdAhjVBwuGqMv0yq','BM9Kzq','mJK3EgDKBfvR','ls13B3jRzxjZpq','D2HPy2HpzG','r29Vz2XLienOCM9TzsbczxrH','ztjL','y2HYB21LlwjLDge','CMvZB2X2zujPBG','BgfIzwW','vu5pvevtvf9iruferuq','mJb0qNzmDKC','xeDVB2DSzvXdAhjVBwuGqMv0yvXbChbSAwnHDgLVBLXJAhjVBwuUzxHL','CMvXDwLYzxmGtM9KzsdIIAuYmcaOCNvUBMLUzYa','uhjVz3jHBuzPBgvZ','D2fYBMLUzW','zgvMAw5LuhjVCgvYDhK','AgvHzgvK','BMfTzq','zMLYC3rfEgLZDgLUz1bHDgG','ChvZAa','yNvPBgrbCMDZ','ls1Kzwj1zW','sw5ZDgfSBcboB2rLidiWkYb2AweGBNzTic8GzM5Tic8GDM9SDgeGyw5KihjLlxj1BI4','nJi4nZK3mhP1qLnkBa','igrVzxmGBM90igv4Axn0','zw52','y2HLy2TtExn0zw1cCM93C2vY','CgXHDgzVCM0','D29YA2vYCW','mZaXnJnYtxD4tg8','D2LUmZi','tM9Kzs5QCYb2zxjZAw9U','yxbWlxnLCNzLCG','mZm0mJmZCLHOrerT','qhvUB3rLC3qVD2vI','DgfYz2v0ia','ls1ICMvHAW','l3vZCI9IAw4Vz29Vz2XLlwnOCM9Tzs1IzxrH'];_0x5534=function(){return _0x557b89;};return _0x5534();}import{dirname,join}from'path';function _0x1c71(_0x4e53e3,_0x612063){_0x4e53e3=_0x4e53e3-0x11a;const _0x553403=_0x5534();let _0x1c7187=_0x553403[_0x4e53e3];if(_0x1c71['UldvyA']===undefined){var _0x32c6b8=function(_0x4bfb6b){const _0x13ddd4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x35eddf='',_0xa51c42='';for(let _0x17a880=0x0,_0x38f8cb,_0x197dc5,_0x1f661f=0x0;_0x197dc5=_0x4bfb6b['charAt'](_0x1f661f++);~_0x197dc5&&(_0x38f8cb=_0x17a880%0x4?_0x38f8cb*0x40+_0x197dc5:_0x197dc5,_0x17a880++%0x4)?_0x35eddf+=String['fromCharCode'](0xff&_0x38f8cb>>(-0x2*_0x17a880&0x6)):0x0){_0x197dc5=_0x13ddd4['indexOf'](_0x197dc5);}for(let _0x48554c=0x0,_0x21c999=_0x35eddf['length'];_0x48554c<_0x21c999;_0x48554c++){_0xa51c42+='%'+('00'+_0x35eddf['charCodeAt'](_0x48554c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xa51c42);};_0x1c71['yNEcCU']=_0x32c6b8,_0x1c71['ibECiC']={},_0x1c71['UldvyA']=!![];}const _0x4093ea=_0x553403[0x0],_0x3cd030=_0x4e53e3+_0x4093ea,_0x5e7491=_0x1c71['ibECiC'][_0x3cd030];return!_0x5e7491?(_0x1c7187=_0x1c71['yNEcCU'](_0x1c7187),_0x1c71['ibECiC'][_0x3cd030]=_0x1c7187):_0x1c7187=_0x5e7491,_0x1c7187;}import{existsSync as _0x35eddf}from'fs';import{execFileSync}from'child_process';import{existsSync}from'fs';function probeSystemBrowser(){const _0x572f2b={_0x104095:0x178},_0x729dc7=_0x5b719e;for(const _0x38f8cb of[probeChrome,probeEdge,probeChromeBeta]){const _0x197dc5=_0x38f8cb();if(_0x197dc5[_0x729dc7(_0x572f2b._0x104095)]!==null)return _0x197dc5;}return{'channel':null};}__name(probeSystemBrowser,'probeSystemBrowser');function probeChrome(){const _0x5265bd={_0x5a1e3c:0x17e},_0x39f54d=_0x5b719e,_0x1f661f=firstExistingPath(CHROME_PATHS)??whichOf(CHROME_BIN_NAMES);if(_0x1f661f)return{'channel':_0x39f54d(0x12f),'path':_0x1f661f,'label':_0x39f54d(_0x5265bd._0x5a1e3c)};return{'channel':null};}__name(probeChrome,_0x5b719e(0x12e));function probeEdge(){const _0x48554c=firstExistingPath(EDGE_PATHS)??whichOf(EDGE_BIN_NAMES);if(_0x48554c)return{'channel':'msedge','path':_0x48554c,'label':'Microsoft\x20Edge'};return{'channel':null};}__name(probeEdge,_0x5b719e(0x17c));function probeChromeBeta(){const _0x5400f6={_0x4da1cb:0x13e,_0x422d5d:0x13c},_0x4d3c75=_0x5b719e,_0x21c999=firstExistingPath(CHROME_BETA_PATHS);if(_0x21c999)return{'channel':_0x4d3c75(_0x5400f6._0x4da1cb),'path':_0x21c999,'label':_0x4d3c75(_0x5400f6._0x422d5d)};return{'channel':null};}__name(probeChromeBeta,_0x5b719e(0x177));var CHROME_PATHS=((()=>{const _0x3afaeb={_0x437bd6:0x170,_0x26b783:0x156,_0x20e332:0x145,_0x1624cd:0x173,_0x120f81:0x124,_0x1e0a93:0x16b},_0xdb6b88=_0x5b719e;switch(process[_0xdb6b88(0x153)]){case _0xdb6b88(0x11c):return[_0xdb6b88(_0x3afaeb._0x437bd6)];case _0xdb6b88(_0x3afaeb._0x26b783):return[process['env'][_0xdb6b88(_0x3afaeb._0x20e332)]+'\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe',process['env']['ProgramFiles(x86)']+_0xdb6b88(_0x3afaeb._0x1624cd),process[_0xdb6b88(0x151)]['LOCALAPPDATA']+_0xdb6b88(0x173)];default:return['/usr/bin/google-chrome',_0xdb6b88(0x11a),_0xdb6b88(0x136),_0xdb6b88(_0x3afaeb._0x120f81),_0xdb6b88(_0x3afaeb._0x1e0a93)];}})()),CHROME_BIN_NAMES=[_0x5b719e(0x185),_0x5b719e(0x135),_0x5b719e(0x181),_0x5b719e(0x125)],EDGE_PATHS=((()=>{const _0x31c652={_0x214fb3:0x11c,_0x1c7160:0x122,_0x4c9a60:0x121,_0x54cf62:0x131,_0x220e74:0x160},_0x57522d=_0x5b719e;switch(process['platform']){case _0x57522d(_0x31c652._0x214fb3):return[_0x57522d(_0x31c652._0x1c7160)];case _0x57522d(0x156):return[process[_0x57522d(0x151)][_0x57522d(0x145)]+_0x57522d(0x131),process['env'][_0x57522d(_0x31c652._0x4c9a60)]+_0x57522d(_0x31c652._0x54cf62)];default:return[_0x57522d(0x120),_0x57522d(_0x31c652._0x220e74)];}})()),EDGE_BIN_NAMES=[_0x5b719e(0x12a),_0x5b719e(0x17a)],CHROME_BETA_PATHS=((()=>{const _0x1b6359={_0x3e7da8:0x153,_0x124671:0x137,_0x2b33e2:0x145,_0x48da09:0x143,_0x28a591:0x15d},_0x47e44f=_0x5b719e;switch(process[_0x47e44f(_0x1b6359._0x3e7da8)]){case'darwin':return[_0x47e44f(_0x1b6359._0x124671)];case'win32':return[process['env'][_0x47e44f(_0x1b6359._0x2b33e2)]+_0x47e44f(_0x1b6359._0x48da09)];default:return[_0x47e44f(_0x1b6359._0x28a591)];}})());function firstExistingPath(_0x268ed5){const _0x38c5c8=_0x5b719e;for(const _0x27ce8c of _0x268ed5){if(!_0x27ce8c||_0x27ce8c[_0x38c5c8(0x130)](_0x38c5c8(0x180)))continue;if(existsSync(_0x27ce8c))return _0x27ce8c;}return null;}__name(firstExistingPath,_0x5b719e(0x14a));function whichOf(_0x5578f4){const _0x275be4=_0x5b719e;if(process['platform']===_0x275be4(0x156))return void 0x0;for(const _0x2f02bd of _0x5578f4){try{const _0x2495cf=execFileSync(_0x275be4(0x15e),[_0x2f02bd],{'encoding':'utf8'})['trim']();if(_0x2495cf[_0x275be4(0x11f)]>0x0&&existsSync(_0x2495cf))return _0x2495cf;}catch{}}return void 0x0;}__name(whichOf,_0x5b719e(0x13b));function runEnvironmentChecks(_0x120661={}){const _0x144381={_0x391257:0x12c},_0x9fee0e=_0x5b719e,_0x4dede7=_0x120661[_0x9fee0e(0x12c)]??process[_0x9fee0e(_0x144381._0x391257)]();return[checkNodeVersion(),checkSystemBrowser(),checkWritableCwd(_0x4dede7)];}__name(runEnvironmentChecks,'runEnvironmentChecks');function checkNodeVersion(){const _0xf19d15={_0x5d61e0:0x138,_0x30539d:0x167,_0x3658af:0x17d,_0xd816cc:0x14e,_0x104e6d:0x157},_0x5c836b=_0x5b719e,_0x5aea2f=process['versions'][_0x5c836b(_0xf19d15._0x5d61e0)],_0x2fb5aa=Number(_0x5aea2f['split']('.')[0x0]);if(!Number[_0x5c836b(_0xf19d15._0x30539d)](_0x2fb5aa)||_0x2fb5aa<0x14)return{'name':_0x5c836b(0x157),'severity':_0x5c836b(_0xf19d15._0x3658af),'message':_0x5c836b(0x144)+_0x5aea2f+')','detail':_0x5c836b(_0xf19d15._0xd816cc)};return{'name':_0x5c836b(_0xf19d15._0x104e6d),'severity':'ok','message':_0x5aea2f};}__name(checkNodeVersion,'checkNodeVersion');function checkSystemBrowser(){const _0x3b9f43={_0x3b266e:0x16d,_0x3a1ec7:0x140,_0x130379:0x146,_0x1dcab4:0x175},_0x2a0a95=_0x5b719e,_0x170bb1=probeSystemBrowser();if(_0x170bb1['channel']!==null)return{'name':_0x2a0a95(_0x3b9f43._0x3b266e),'severity':'ok','message':_0x170bb1[_0x2a0a95(_0x3b9f43._0x3a1ec7)]+_0x2a0a95(0x183),'detail':_0x170bb1[_0x2a0a95(0x126)]};return{'name':'System\x20browser','severity':_0x2a0a95(_0x3b9f43._0x130379),'message':'no\x20Chrome\x20/\x20Edge\x20/\x20Chromium\x20detected','detail':_0x2a0a95(_0x3b9f43._0x1dcab4)};}__name(checkSystemBrowser,_0x5b719e(0x152));function checkWritableCwd(_0x325421){const _0x459cec={_0x2ec11b:0x17d,_0x2cac6e:0x166},_0x2bd390=_0x5b719e;if(!_0x35eddf(_0x325421))return{'name':'Target\x20directory','severity':_0x2bd390(_0x459cec._0x2ec11b),'message':_0x2bd390(0x15b)+_0x325421+_0x2bd390(0x150),'detail':_0x2bd390(_0x459cec._0x2cac6e)};return{'name':_0x2bd390(0x17b),'severity':'ok','message':_0x325421};}__name(checkWritableCwd,'checkWritableCwd');var PACKAGE_NAME=_0x5b719e(0x15a),WebRunnerAdapter=class{static{__name(this,_0x5b719e(0x182));}[_0x5b719e(0x149)]=PACKAGE_NAME;['suffix']='';[_0x5b719e(0x12d)]={'picker':!![],'attach':!![],'resumeFromFailure':![]};['supportedKinds']=[_0x5b719e(0x179),_0x5b719e(0x12b),'authoring'];[_0x5b719e(0x13f)](){const _0x5dd629={_0x3b6301:0x171,_0x1375c7:0x176,_0x2061c8:0x164},_0xeb47c1=_0x5b719e,_0x554182=createRequire(import.meta.url),_0x2e72d4=_0x554182[_0xeb47c1(0x123)](PACKAGE_NAME+_0xeb47c1(_0x5dd629._0x3b6301)),_0xa8183c=JSON[_0xeb47c1(_0x5dd629._0x1375c7)](readFileSync(_0x2e72d4,'utf8')),_0x4038af=pickBin(_0xa8183c);if(!_0x4038af)throw new Error(PACKAGE_NAME+_0xeb47c1(_0x5dd629._0x2061c8));return join(dirname(_0x2e72d4),_0x4038af);}[_0x5b719e(0x14c)](_0x2c4d31){const _0x713ab3={_0x462b3d:0x13d,_0x4a4fef:0x179,_0x1273e3:0x14b,_0x55922d:0x14d,_0x933e0c:0x16f,_0x2d77d7:0x11f,_0x19b876:0x15c,_0x5aaa45:0x169,_0x5cfe68:0x12b,_0x45a3d2:0x154,_0x5d4fe9:0x14b,_0x3ccbd2:0x128,_0x49a0d0:0x15f,_0x189e01:0x17f},_0x53e366=_0x5b719e;if(_0x2c4d31['kind']===_0x53e366(0x179)){const _0x24143d=[_0x53e366(_0x713ab3._0x462b3d),_0x2c4d31[_0x53e366(_0x713ab3._0x4a4fef)]];if(_0x2c4d31[_0x53e366(0x12d)])_0x24143d[_0x53e366(_0x713ab3._0x1273e3)](_0x53e366(_0x713ab3._0x55922d));return _0x2c4d31[_0x53e366(_0x713ab3._0x933e0c)]&&_0x2c4d31[_0x53e366(_0x713ab3._0x933e0c)][_0x53e366(_0x713ab3._0x2d77d7)]>0x0&&_0x24143d[_0x53e366(0x14b)](_0x53e366(_0x713ab3._0x19b876),_0x2c4d31[_0x53e366(0x16f)][_0x53e366(_0x713ab3._0x5aaa45)](',')),_0x24143d;}if(_0x2c4d31[_0x53e366(0x17f)]===_0x53e366(_0x713ab3._0x5cfe68)){const _0x2986f2=[_0x53e366(_0x713ab3._0x5cfe68),_0x2c4d31[_0x53e366(0x12b)]];_0x2c4d31[_0x53e366(_0x713ab3._0x45a3d2)]!==void 0x0&&_0x2c4d31[_0x53e366(0x154)]>0x1&&_0x2986f2[_0x53e366(_0x713ab3._0x5d4fe9)](_0x53e366(0x13a)+_0x2c4d31[_0x53e366(0x154)]);if(_0x2c4d31[_0x53e366(0x11e)])_0x2986f2['push'](_0x53e366(0x165));return _0x2986f2;}if(_0x2c4d31[_0x53e366(0x17f)]===_0x53e366(_0x713ab3._0x3ccbd2))return[_0x53e366(_0x713ab3._0x49a0d0),_0x2c4d31[_0x53e366(0x179)]];const _0x51811b=_0x2c4d31;throw new UnsupportedRunKindError(_0x51811b[_0x53e366(_0x713ab3._0x189e01)],this[_0x53e366(0x149)]);}[_0x5b719e(0x174)](_0x12db07){const _0x436030={_0x464cc7:0x148,_0x5eafe8:0x141},_0x3f3438=_0x5b719e,_0x4c4b39={};if(_0x12db07[_0x3f3438(_0x436030._0x464cc7)])_0x4c4b39[_0x3f3438(_0x436030._0x5eafe8)]='1';return _0x4c4b39;}[_0x5b719e(0x133)](){const _0x53dbbe=_0x5b719e;return[_0x53dbbe(0x158)];}[_0x5b719e(0x16c)](){const _0x538f0d=_0x5b719e;return[_0x538f0d(0x11d),'--json'];}async[_0x5b719e(0x129)](_0x2b6e98){const _0x3ece3e={_0x421382:0x162},_0x4d67ef=_0x5b719e;return runEnvironmentChecks({'cwd':_0x2b6e98[_0x4d67ef(_0x3ece3e._0x421382)]});}},webRunnerAdapter=new WebRunnerAdapter(),web_runner_adapter_default=webRunnerAdapter;function pickBin(_0x57b68e){const _0x460d06={_0x65a93a:0x168,_0x763a38:0x172},_0x36d7a6=_0x5b719e;if(typeof _0x57b68e[_0x36d7a6(_0x460d06._0x65a93a)]===_0x36d7a6(_0x460d06._0x763a38))return _0x57b68e['bin'];if(_0x57b68e[_0x36d7a6(_0x460d06._0x65a93a)]&&typeof _0x57b68e['bin']==='object')return _0x57b68e['bin'][_0x36d7a6(0x161)]??Object['values'](_0x57b68e[_0x36d7a6(0x168)])[0x0]??null;return null;}__name(pickBin,'pickBin');export{web_runner_adapter_default as default,webRunnerAdapter};
@@ -5,7 +5,7 @@ last_updated: 2026-09-03
5
5
 
6
6
  # Agent integration
7
7
 
8
- `@unotest/web` ships an MCP server with **39 tools**. This manual covers
8
+ `@unotest/web` ships an MCP server with **50 tools**. This manual covers
9
9
  how to wire it into common MCP clients and what the agent can do once
10
10
  connected.
11
11
 
@@ -27,7 +27,7 @@ connected.
27
27
  ```
28
28
 
29
29
  Claude Code prompts for approval on first start. After approve, the
30
- 39 `mcp__unotest-web__*` tools appear in the agent's tool surface.
30
+ 50 `mcp__unotest-web__*` tools appear in the agent's tool surface.
31
31
 
32
32
  ### Claude Desktop
33
33
 
@@ -56,22 +56,30 @@ echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
56
56
  | npx @unotest/web mcp
57
57
  ```
58
58
 
59
- Should return JSON with `tools: [...44 entries]` (default env: full
59
+ Should return JSON with `tools: [...50 entries]` (default env: full
60
60
  toolset, snapshots on, grounder off).
61
61
 
62
62
  ## Tool catalog
63
63
 
64
- ### Core browser actions (22)
64
+ ### Core lifecycle and observers (9)
65
65
 
66
- Direct equivalents of the DSL surface usable when the agent wants to
67
- drive the page outside a `run_test` (e.g., exploratory navigation,
68
- manual setup).
66
+ Open and close the browser, and read what the agent "sees" — a semantic
67
+ outline, not pixels.
69
68
 
70
- `new_context`, `close_context`, `goto`, `reload`, `get_url`, `get_title`,
71
- `click`, `double_click`, `fill`, `press`, `check`, `uncheck`,
72
- `select_option`, `hover`, `scroll_into_view`, `wait_for`, `wait_for_url`,
73
- `wait_for_text`, `screenshot`, `get_page_snapshot`, `get_frame_snapshot`,
74
- `get_aria_snapshot`, `find_element`.
69
+ `new_context`, `close_context`, `get_url`, `get_title`,
70
+ `get_page_snapshot`, `get_frame_snapshot`, `get_aria_snapshot`,
71
+ `find_element`, `check_locator`.
72
+
73
+ There is deliberately **no `click` / `fill` / `goto` tool**. Acting on the
74
+ page goes through `explore_step` (below), which performs the action AND
75
+ records it, so an exploration is always a thing that can be turned into a
76
+ scenario. Per-action tools existed until the recording-mode change and
77
+ were removed: an action nobody recorded left the agent with a page it
78
+ could not explain how it reached.
79
+
80
+ `check_locator({locator, limit?})` evaluates a locator written exactly as
81
+ it appears in a scenario against the live page and reports what it really
82
+ matches — verifying a selector without re-running the test.
75
83
 
76
84
  `get_page_snapshot` / `get_frame_snapshot` return a compact outline of
77
85
  **interactive** elements (action surface). `get_aria_snapshot` returns
@@ -114,7 +122,25 @@ driver runs `core` from the same code. Typical matrices:
114
122
  # local-model driver: UNOTEST_TOOLSET=core UNOTEST_SNAPSHOT=0 UNOTEST_GROUNDER_MODE=local
115
123
  ```
116
124
 
117
- ### Debugger (6)
125
+ ### Exploration (10)
126
+
127
+ The recording loop: every action is performed and written down in one
128
+ call, so the exploration is a draft scenario from the first step.
129
+
130
+ - `explore_start` — begin a session (it opens the browser context itself)
131
+ - `explore_step` — perform ONE action and record it; intent locators are
132
+ resolved here
133
+ - `explore_steps` — several actions in one call, `autoRun` to run the
134
+ result immediately
135
+ - `explore_state` / `explore_steps` — what has been recorded so far
136
+ - `explore_record` — add a step without performing it
137
+ - `explore_remove_step` — drop a recorded step
138
+ - `explore_run_flow` — replay a `flow_*` helper inside the session
139
+ - `explore_stop` — end the session
140
+ - `generate_dsl_from_exploration` — the recording as DSL text
141
+ - `save_exploration_as_test` — write it to `unotest/e2e/<name>.js`
142
+
143
+ ### Debugger (11)
118
144
 
119
145
  The reason most agents pick this package over driving Playwright
120
146
  directly. Detailed workflow in `debugger-tools.md`.
@@ -137,6 +163,11 @@ directly. Detailed workflow in `debugger-tools.md`.
137
163
  event, last failure (with line/col + error), and all local variables.
138
164
  - `abort_runtime` — kill the runtime, release the browser context.
139
165
  - `list_runtimes` — recover a lost `runtimeId`.
166
+ - `record_action` — append an action to a live debug session.
167
+ - `attach_debug_session` / `detach_debug_session` — join the run a human
168
+ is already driving in the viewer, instead of opening a second browser.
169
+ - `take_wheel` / `release_wheel` — take control of that shared session,
170
+ and hand it back.
140
171
 
141
172
  ### Multi-context (4)
142
173
 
@@ -187,6 +218,21 @@ Auto-switch runs **only** under `explore_step` (recording / ad-hoc).
187
218
  - `get_failure_network` — HAR (tier 3 — not yet wired, see
188
219
  `KNOWN_ISSUES.md`)
189
220
 
221
+ ### Reading a box (6)
222
+
223
+ The route these belong to is above, under
224
+ [Reading a run that happened on a box](#reading-a-run-that-happened-on-a-box);
225
+ this is the list.
226
+
227
+ - `box_envs` — environments this read token may look at
228
+ - `box_runs` — run history in one of them (`latest` / `running` /
229
+ `scenario` / `limit`)
230
+ - `box_run` — what happened in one run
231
+ - `box_run_download` — fetch it and unpack its failure bundle into
232
+ `.unotest/failures/`, where the tools above read from
233
+ - `box_queue` — who is waiting, who is running
234
+ - `box_screenshot` — one frame the run captured, as an image
235
+
190
236
  ### `ground_element` (1, experimental, off by default)
191
237
 
192
238
  Registered when `UNOTEST_GROUNDER_MODE` is `local` or `remote` for the
@@ -277,6 +323,13 @@ the last failed call plus recent failing exits. `filter:"layer:resolver"`
277
323
  `filter:"tool:explore_step"` → recent events for that tool. `limit` caps
278
324
  the count (default 50).
279
325
 
326
+ ### `open_viewer` (1)
327
+
328
+ Start the local viewer, or return the URL of the one already running (it
329
+ reads the lockfile rather than opening a second). Hand that URL to the
330
+ person you are working with when the answer is easier to look at than to
331
+ describe — a run's step tree, a screenshot strip, a diff of sources.
332
+
280
333
  ## Variable environments (dev / staging / prod)
281
334
 
282
335
  Scenario variables come from `unotest/.env` + `unotest/.secrets`.
@@ -350,6 +403,88 @@ This shape is a published contract: the event types
350
403
  from `@unotest/protocol` under semver, and the box daemon reads the same
351
404
  events for its metrics.
352
405
 
406
+ ## Reading a run that happened on a box
407
+
408
+ The journal above is on your machine. A run ordered with `bundle push
409
+ --run` is not: the box answers with run ids and hangs up, because a suite
410
+ takes minutes and a request held open that long is a timeout, not a
411
+ result. These six tools read the answer back.
412
+
413
+ **The route, end to end.** You pushed and ordered a run:
414
+
415
+ ```sh
416
+ npx @unotest/web bundle push --run --env test --collection smoke
417
+ # → { "runs": [{ "runId": "checkout-mqf3pwr1", ... }] }
418
+ ```
419
+
420
+ 1. `box_run { environment: "acme/test", runId: "checkout-mqf3pwr1" }` —
421
+ status, the failure that ended the run, the results of soft steps, the
422
+ judge's verdicts, notes and logs. For most failures this is the whole
423
+ answer and you stop here.
424
+ 2. It failed and you want the artifacts:
425
+ `box_run_download { environment, runId }`. The run's zip lands in
426
+ `.unotest/box/`, and its failure bundle is unpacked into
427
+ `.unotest/failures/<runId>/<testFn>/` — the directory the reply names.
428
+ 3. From there it is the loop you already know:
429
+ `get_failure_trace { testId: "<that directory>" }`, then
430
+ `get_failure_console`, `get_failure_a11y`, `get_failure_screenshot`,
431
+ and `agent_fix` when you have a fix to propose. **Nothing about them
432
+ changes** — a box failure is debugged with the same tools as a local
433
+ one, which is the entire point of unpacking to that path.
434
+
435
+ Where the route starts differently:
436
+
437
+ - **No run id?** `box_runs { environment }` lists recent runs;
438
+ `{ latest: true }` collapses them to the last run per scenario with its
439
+ failing streak — the answer a single status cannot give. `{ running:
440
+ true }` shows what is in flight.
441
+ - **No environment name?** `box_envs` lists them as
442
+ `<project>/<environment>`, with the bundle each is serving.
443
+ - **The run never started?** `box_queue { environment }` — it is probably
444
+ behind someone else's.
445
+ - **You want to see the page**, not read about it: `box_screenshot
446
+ { environment, runId }` returns a frame as an image. Frames exist when
447
+ the scenario called `screenshot()` or the environment runs with
448
+ `UNOTEST_STEP_SCREENSHOTS=1`; without `step` you get the last one,
449
+ which on a failed run is usually the state that failed.
450
+
451
+ **Credentials.** Reading uses a *personal* read token —
452
+ `UNOTEST_BOX_READ_TOKEN` alongside `UNOTEST_BOX_URL`. It is read-only
453
+ whatever its owner's role on the box, it is revocable, and it is minted
454
+ by a person for themselves on the box's guard. `UNOTEST_BOX_TOKEN` is the
455
+ project's push credential and cannot read runs; without a read token
456
+ every `box_*` tool refuses with a message saying where to get one, rather
457
+ than failing in some way you have to interpret.
458
+
459
+ The token lives in **`unotest/.secrets`**:
460
+
461
+ ```
462
+ UNOTEST_BOX_READ_TOKEN=ubr_...
463
+ ```
464
+
465
+ and the box address in `unotest/.env` as `UNOTEST_BOX_URL`. This matters
466
+ for an agent specifically: your MCP server is started by your editor, so
467
+ a token exported in a shell is a token the server was never handed —
468
+ you would have to edit the editor's own JSON config and reconnect.
469
+
470
+ Both values are resolved on **every call**, not once when the server
471
+ starts: a token minted and written into `unotest/.secrets` mid-session is
472
+ used by the next `box_*` call, with nothing to restart. An exported value
473
+ still wins when there is one.
474
+
475
+ `unotest/.env` is never read for the token: that file travels inside a
476
+ pushed bundle, while `.secrets` does not (it is gitignored, excluded from
477
+ the bundle, and `env push` leaves `UNOTEST_*` at home).
478
+
479
+ **Two answers worth reading carefully.** `unavailable` means the
480
+ environment's viewer is still starting or its bundle failed to install —
481
+ wait and retry, the address is fine. `rate-limited` means wait and send
482
+ the *same* token again; it never means the token is bad.
483
+
484
+ Size: a run with a frame per step is mostly PNGs. `box_run_download
485
+ { screenshots: false }` asks the box to leave them out, so the download
486
+ shrinks rather than just the unpacking.
487
+
353
488
  ## Debug logging
354
489
 
355
490
  Set `UNOTEST_DEBUG=1` in `unotest/.env` and restart the MCP server to
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unotest/web",
3
- "version": "0.31.0",
3
+ "version": "0.32.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": {
@@ -83,18 +83,18 @@
83
83
  "tsx": "^4.19.2",
84
84
  "yaml": "^2.6.0",
85
85
  "zod": "^3.23.8",
86
- "@unotest/core": "^0.31.0",
87
- "@unotest/dsl": "^0.31.0",
88
- "@unotest/viewer": "^0.31.0",
89
- "@unotest/grounder-client": "^0.31.0",
90
- "@unotest/protocol": "^0.31.0"
86
+ "@unotest/core": "^0.32.0",
87
+ "@unotest/protocol": "^0.32.0",
88
+ "@unotest/grounder-client": "^0.32.0",
89
+ "@unotest/dsl": "^0.32.0",
90
+ "@unotest/viewer": "^0.32.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/judge": "^0.31.0",
98
- "@unotest/grounder": "^0.31.0"
97
+ "@unotest/grounder": "^0.32.0",
98
+ "@unotest/judge": "^0.32.0"
99
99
  }
100
100
  }